diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 7b3216310..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - ignorePatterns: ["**/*"] -}; diff --git a/.github/ISSUE_TEMPLATE/blank-issue.md b/.github/ISSUE_TEMPLATE/blank-issue.md new file mode 100644 index 000000000..acac852e5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/blank-issue.md @@ -0,0 +1,10 @@ +--- +name: Blank Issue +about: Other +title: '' +labels: '' +assignees: '' + +--- + + diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index ed0ab9842..1cbaa900a 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,8 +1,8 @@ blank_issues_enabled: true contact_links: - name: Submit a Landscape issue - url: https://github.com/urbit/landscape/issues/new/choose - about: Issues with Landscape (Tlon's flagship client) should be filed at urbit/landscape. This includes groups, chats, collections, notebooks, and more. + url: https://github.com/tloncorp/landscape-apps/issues/new/choose + about: Issues with Landscape should be filed at tloncorp/landscape-apps. This includes Groups, Talk, and Landscape proper. - name: urbit-dev mailing list url: https://groups.google.com/a/urbit.org/g/dev about: Developer questions and discussions also take place on the urbit-dev mailing list. diff --git a/.github/actions/glob/entrypoint.sh b/.github/actions/glob/entrypoint.sh deleted file mode 100755 index 7428213a5..000000000 --- a/.github/actions/glob/entrypoint.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash - -cd "$GITHUB_WORKSPACE" || exit - -echo "$2" | base64 -d > service-account -echo "$3" | base64 -d > id_ssh -echo "$4" | base64 -d > id_ssh.pub - -chmod 600 service-account -chmod 600 id_ssh -chmod 600 id_ssh.pub - -janeway release glob-all --dev --no-pill \ - --credentials service-account \ - --ssh-key id_ssh \ - --ci \ - | bash - -SHORTHASH=$(git rev-parse --short HEAD) - -janeway release prepare-ota arvo-glob-"$SHORTHASH" "$1" \ - --credentials service-account \ - --ssh-key id_ssh \ - --ci \ - | bash - -janeway release perform-ota "$1" \ - --credentials service-account \ - --ssh-key id_ssh \ - --ci \ - | bash - diff --git a/.github/actions/glob/Dockerfile b/.github/actions/ota/Dockerfile similarity index 72% rename from .github/actions/glob/Dockerfile rename to .github/actions/ota/Dockerfile index e372532ac..bee188917 100644 --- a/.github/actions/glob/Dockerfile +++ b/.github/actions/ota/Dockerfile @@ -1,4 +1,4 @@ -FROM tloncorp/janeway:v0.15.4 +FROM tloncorp/janeway:v0.17.0 COPY entrypoint.sh /entrypoint.sh EXPOSE 22/tcp ENTRYPOINT ["/entrypoint.sh"] diff --git a/.github/actions/glob/action.yml b/.github/actions/ota/action.yml similarity index 52% rename from .github/actions/glob/action.yml rename to .github/actions/ota/action.yml index 4617e3d49..f9b0d027e 100644 --- a/.github/actions/glob/action.yml +++ b/.github/actions/ota/action.yml @@ -1,18 +1,21 @@ -name: 'glob' -description: 'Create a glob and deploy it to a moon' +name: 'ota' +description: 'perform an OTA update of arvo on a remote ship' inputs: ship: - description: "Ship to deploy to" + description: "target ship" required: true credentials: description: "base64-encoded GCP Service Account credentials" required: true ssh-sec-key: - description: "A base64-encoded SSH secret key for the container to use" + description: "base64-encoded SSH secret key for the container to use" required: true ssh-pub-key: - description: "The corresponding base64-encoded SSH public key" + description: "base64-encoded corresponding SSH public key" required: true + ref: + description: "git ref of arvo source to check out" + required: false runs: using: 'docker' @@ -22,4 +25,4 @@ runs: - ${{ inputs.credentials }} - ${{ inputs.ssh-sec-key }} - ${{ inputs.ssh-pub-key }} - + - ${{ inputs.ref }} diff --git a/.github/actions/ota/entrypoint.sh b/.github/actions/ota/entrypoint.sh new file mode 100755 index 000000000..5839a49f4 --- /dev/null +++ b/.github/actions/ota/entrypoint.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +echo "$2" | base64 -d > /service-account +echo "$3" | base64 -d > /id_ssh +echo "$4" | base64 -d > /id_ssh.pub + +chmod 600 /service-account +chmod 600 /id_ssh +chmod 600 /id_ssh.pub + +janeway \ + --ci \ + --verbose \ + --credentials /service-account \ + --ssh-key /id_ssh \ + release ota \ + arvo \ + "$1" \ + ${5:+"--ref"} ${5:+"$5"} \ + | bash diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 596847d46..000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,119 +0,0 @@ -# Notes: -# -# jobs. -# -# A seperate job id results in a lot of duplication of nix/cachix work. -# The build will have to download any substituted derivations from cachix -# for the steps with each distinct job id and upload built derivations to -# cachix after each job has completed, either succesfully or on failure. -# -# jobs..steps.run -# -# build + test are distinct as each step entry results in a collapsable title -# within the log output, which makes it easier to view failing builds or -# tests independently. -# -# jobs..strategy.fail-fast -# -# Set to false so developers working on vere or king-haskell can have their -# respective builds proceed without the other causing failure. -# -# shell.nix -# -# mkShell doesn't allow you to build it - so instantiate all the subshells -# defined for the individual pkg/*/shell.nix as a sanity check and to create -# some artefacts suitable for developers to pull from cachix. The top-level -# shell.nix build time is dominated by Haskell dependencies so it's built as -# part of the haskell build steps. -# -# Syntax: -# -# https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions - -name: build - -on: - push: - paths: - - 'pkg/arvo/**' - - 'pkg/docker-image/**' - - 'pkg/ent/**' - - 'pkg/ge-additions/**' - - 'pkg/libaes_siv/**' - - 'pkg/urbit/**' - - 'pkg/urcrypt/**' - - 'bin/**' - - 'nix/**' - - default.nix - pull_request: - paths: - - 'pkg/arvo/**' - - 'pkg/docker-image/**' - - 'pkg/ent/**' - - 'pkg/ge-additions/**' - - 'pkg/libaes_siv/**' - - 'pkg/urbit/**' - - 'pkg/urcrypt/**' - - 'bin/**' - - 'nix/**' - - default.nix - -jobs: - urbit: - strategy: - fail-fast: false - matrix: - include: - - { os: ubuntu-latest } - - { os: macos-latest } - - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v2 - - # We only want the extra nix config on linux, where it is necessary - # for the docker build. We don't want in on Mac, where it isn't but - # it breaks the nix install. The two `if` clauses should be mutually - # exclusive - - uses: cachix/install-nix-action@v16 - with: - extra_nix_config: | - system-features = nixos-test benchmark big-parallel kvm - if: ${{ matrix.os == 'ubuntu-latest' }} - - uses: cachix/install-nix-action@v16 - if: ${{ matrix.os != 'ubuntu-latest' }} - - - uses: cachix/cachix-action@v10 - with: - name: ares - authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} - - - run: nix-build -A urbit --arg enableStatic true - - - if: ${{ matrix.os == 'ubuntu-latest' }} - run: nix-build -A urbit-tests - - - if: ${{ matrix.os == 'ubuntu-latest' }} - run: nix-build -A docker-image - - mingw: - runs-on: windows-latest - defaults: - run: - shell: C:\msys64\msys2_shell.cmd -mingw64 -defterm -no-start -here -c ". <(cygpath '{0}')" - working-directory: ./pkg/urbit - - steps: - - uses: actions/checkout@v2 - with: - lfs: true - - # echo suppresses pacman prompt - - run: echo|./configure - env: - CACHIX_CACHE: ares - CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }} - - - run: mingw32-make build/urbit - - run: build/urbit -l -d -B ../../bin/solid.pill -F bus && curl -f --data '{"source":{"dojo":"+hood/exit"},"sink":{"app":"hood"}}' http://localhost:12321 diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml deleted file mode 100644 index 1d8711f7f..000000000 --- a/.github/workflows/chromatic.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Chromatic Deployment - -on: - pull_request: - paths: - - 'pkg/interface/**' - push: - paths: - - 'pkg/interface/**' - branches: - - 'release/next-userspace' - -jobs: - chromatic-deployment: - runs-on: ubuntu-latest - name: "Deploy Chromatic" - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - run: npm i && npm run bootstrap - - name: Publish to Chromatic - uses: chromaui/action@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - workingDir: pkg/interface diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml new file mode 100644 index 000000000..4832a4d7d --- /dev/null +++ b/.github/workflows/develop.yml @@ -0,0 +1,34 @@ +name: Push to develop + +on: + push: + branches: + - 'develop' + paths: + - '.github/workflows/feature.yml' + - '.github/workflows/develop.yml' + - '.github/workflows/release.yml' + - '.github/workflows/master.yml' + - '.github/workflows/vere.yml' + - 'pkg/arvo/**' + - 'pkg/docker-image/**' + - 'pkg/ent/**' + - 'pkg/ge-additions/**' + - 'pkg/libaes_siv/**' + - 'pkg/urbit/**' + - 'pkg/urcrypt/**' + - 'tests/**' + - 'bin/**' + - 'nix/**' + - 'default.nix' + +jobs: + call-vere: + uses: ./.github/workflows/vere.yml + with: + pace: 'edge' + upload: >- + ${{ + (github.ref_name == 'next/vere' && github.ref_type == 'branch') + }} + secrets: inherit diff --git a/.github/workflows/feature.yml b/.github/workflows/feature.yml new file mode 100644 index 000000000..01ca5af92 --- /dev/null +++ b/.github/workflows/feature.yml @@ -0,0 +1,32 @@ +name: Feature pull request + +on: + pull_request: + paths: + - '.github/workflows/feature.yml' + - '.github/workflows/develop.yml' + - '.github/workflows/release.yml' + - '.github/workflows/master.yml' + - '.github/workflows/vere.yml' + - 'pkg/arvo/**' + - 'pkg/docker-image/**' + - 'pkg/ent/**' + - 'pkg/ge-additions/**' + - 'pkg/libaes_siv/**' + - 'pkg/urbit/**' + - 'pkg/urcrypt/**' + - 'tests/**' + - 'bin/**' + - 'nix/**' + - 'default.nix' + +jobs: + call-vere: + uses: ./.github/workflows/vere.yml + with: + pace: 'edge' + upload: >- + ${{ + (github.ref_name == 'next/vere' && github.ref_type == 'branch') + }} + secrets: inherit diff --git a/.github/workflows/frontend-test.yml b/.github/workflows/frontend-test.yml deleted file mode 100644 index 89e68662a..000000000 --- a/.github/workflows/frontend-test.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: frontend-test - -on: - pull_request: - paths: - - 'pkg/interface/**' - - 'pkg/btc-wallet/**' - - 'pkg/npm/**' - -jobs: - frontend-test: - runs-on: ubuntu-latest - name: "Test changed frontend packages" - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - run: git fetch --prune - - name: 'Setup root deps' - run: npm ci - - name: 'Setup dependencies' - run: npm run bootstrap - - name: 'Run tests' - run: npm run test -- --since origin/$GITHUB_BASE_REF --include-dependents diff --git a/.github/workflows/glob.yml b/.github/workflows/glob.yml deleted file mode 100644 index be5d77115..000000000 --- a/.github/workflows/glob.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: glob -on: - push: - branches: - - 'release/next-userspace' -jobs: - glob: - runs-on: ubuntu-latest - name: "Create and deploy a glob to ~hanruc-nalfus-nidsut-tomdun" - steps: - - uses: actions/checkout@v2 - with: - lfs: true - - uses: ./.github/actions/glob - with: - ship: 'hanruc-nalfus-nidsut-tomdun' - credentials: ${{ secrets.JANEWAY_SERVICE_KEY }} - ssh-sec-key: ${{ secrets.JANEWAY_SSH_SEC_KEY }} - ssh-pub-key: ${{ secrets.JANEWAY_SSH_PUB_KEY }} - diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml new file mode 100644 index 000000000..b04cd042e --- /dev/null +++ b/.github/workflows/master.yml @@ -0,0 +1,34 @@ +name: Push to master + +on: + push: + branches: + - 'master' + paths: + - '.github/workflows/feature.yml' + - '.github/workflows/develop.yml' + - '.github/workflows/release.yml' + - '.github/workflows/master.yml' + - '.github/workflows/vere.yml' + - 'pkg/arvo/**' + - 'pkg/docker-image/**' + - 'pkg/ent/**' + - 'pkg/ge-additions/**' + - 'pkg/libaes_siv/**' + - 'pkg/urbit/**' + - 'pkg/urcrypt/**' + - 'tests/**' + - 'bin/**' + - 'nix/**' + - 'default.nix' + +jobs: + call-vere: + uses: ./.github/workflows/vere.yml + with: + pace: 'live' + upload: >- + ${{ + (github.ref_name == 'next/vere' && github.ref_type == 'branch') + }} + secrets: inherit diff --git a/.github/workflows/merge-master.yml b/.github/workflows/merge-master.yml deleted file mode 100644 index 48d0abf9f..000000000 --- a/.github/workflows/merge-master.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: merge -on: - push: - branches: - - 'master' -jobs: - merge-to-next-js: - runs-on: ubuntu-latest - name: "Merge master to release/next-userspace" - steps: - - uses: actions/checkout@v2 - - uses: devmasx/merge-branch@v1.3.1 - with: - type: now - target_branch: release/next-userspace - github_token: ${{ secrets.JANEWAY_BOT_TOKEN }} - - merge-to-group-timer: - runs-on: ubuntu-latest - name: "Merge master to ops/group-timer" - steps: - - uses: actions/checkout@v2 - - uses: devmasx/merge-branch@v1.3.1 - with: - type: now - target_branch: ops/group-timer - github_token: ${{ secrets.JANEWAY_BOT_TOKEN }} diff --git a/.github/workflows/merge-release.yml b/.github/workflows/merge-release.yml deleted file mode 100644 index eb7df325a..000000000 --- a/.github/workflows/merge-release.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: ops-merge -on: - push: - branches: - - 'release/*' -jobs: - merge-release-to-ops: - runs-on: ubuntu-latest - name: "Merge to ops-tlon" - steps: - - uses: actions/checkout@v2 - - uses: devmasx/merge-branch@v1.3.1 - with: - type: now - target_branch: ops-tlon - github_token: ${{ secrets.JANEWAY_BOT_TOKEN }} - diff --git a/.github/workflows/ota.yml b/.github/workflows/ota.yml new file mode 100644 index 000000000..093f98620 --- /dev/null +++ b/.github/workflows/ota.yml @@ -0,0 +1,19 @@ +name: ota +on: + workflow_dispatch: + push: + branches: + - 'develop' +jobs: + deploy: + runs-on: ubuntu-latest + name: "make an OTA update to arvo on ~binnec-dozzod-marzod" + steps: + - uses: actions/checkout@v3 + - uses: ./.github/actions/ota + with: + ship: 'canary' + credentials: ${{ secrets.JANEWAY_SERVICE_KEY }} + ssh-sec-key: ${{ secrets.JANEWAY_SSH_SEC_KEY }} + ssh-pub-key: ${{ secrets.JANEWAY_SSH_PUB_KEY }} + ref: 'develop' diff --git a/.github/workflows/publish-npm-packages.yml b/.github/workflows/publish-npm-packages.yml deleted file mode 100644 index 44fb251f8..000000000 --- a/.github/workflows/publish-npm-packages.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: publish-npm-packages -on: - push: - branches: - - 'master' - paths: - - 'pkg/npm/**' -jobs: - publish-api: - runs-on: ubuntu-latest - name: "Publish '@urbit/api' if a new version is available" - steps: - - uses: actions/checkout@v2 - with: - lfs: true - - uses: actions/setup-node@v2 - with: - node-version: '14' - - run: 'npm install' - working-directory: 'pkg/npm/api' - - uses: JS-DevTools/npm-publish@v1 - with: - check-version: true - package: './pkg/npm/api/package.json' - token: ${{ secrets.NPM_TOKEN }} - - publish-http-api: - runs-on: ubuntu-latest - name: "Publish '@urbit/http-api' if a new version is available" - steps: - - uses: actions/checkout@v2 - with: - lfs: true - - uses: actions/setup-node@v2 - with: - node-version: '14' - - run: 'npm install' - working-directory: 'pkg/npm/http-api' - - uses: JS-DevTools/npm-publish@v1 - with: - check-version: true - package: './pkg/npm/http-api/package.json' - token: ${{ secrets.NPM_TOKEN }} - - publish-eslint-config: - runs-on: ubuntu-latest - name: "Publish '@urbit/eslint-config' if a new version is available" - steps: - - uses: actions/checkout@v2 - with: - lfs: true - - uses: actions/setup-node@v2 - with: - node-version: '14' - - run: 'npm install' - working-directory: 'pkg/npm/eslint-config' - - uses: JS-DevTools/npm-publish@v1 - with: - check-version: true - package: './pkg/npm/eslint-config/package.json' - token: ${{ secrets.NPM_TOKEN }} - diff --git a/.github/workflows/release-docker.yml b/.github/workflows/release-docker.yml deleted file mode 100644 index 13fc3f915..000000000 --- a/.github/workflows/release-docker.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: release-docker - -on: - release: null - push: - tags: 'urbit-v[0-9]+.[0-9]+' - -jobs: - upload: - strategy: - matrix: - include: - - { os: ubuntu-latest, system: x86_64-linux } - - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v2 - - uses: cachix/install-nix-action@v16 - with: - extra_nix_config: | - system-features = nixos-test benchmark big-parallel kvm - - uses: cachix/cachix-action@v10 - with: - name: ares - authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} - - uses: docker/docker-login-action@v1.8.0 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - uses: christian-korneck/update-container-description-action@v1 - env: - DOCKER_USER: ${{ secrets.DOCKERHUB_USERNAME }} - DOCKER_PASS: ${{ secrets.DOCKERHUB_TOKEN }} - with: - destination_container_repo: ${{ secrets.DOCKERHUB_USERNAME }}/urbit - provider: dockerhub - short_description: 'Urbit: a clean-slate OS and network for the 21st century' - readme_file: 'pkg/docker-image/README.md' - - - run: | - version="$(cat ./pkg/urbit/version)" - image="$(nix-build -A docker-image)" - imageName="$(nix-instantiate --eval -A docker-image.imageName | cut -d'"' -f2)" - imageTag="$(nix-instantiate --eval -A docker-image.imageTag | cut -d'"' -f2)" - # Load the image from the nix-built tarball - docker load -i $image - docker tag "$imageName:$imageTag" ${{secrets.DOCKERHUB_USERNAME }}/urbit:v$version - docker tag "$imageName:$imageTag" ${{secrets.DOCKERHUB_USERNAME }}/urbit:latest - docker push ${{secrets.DOCKERHUB_USERNAME }}/urbit:v$version - docker push ${{secrets.DOCKERHUB_USERNAME }}/urbit:latest diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0af64103a..1d2258a1f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,44 +1,34 @@ -name: release +name: Push to release branch on: - release: null push: - tags: ['*'] + branches: + - 'release/*' + paths: + - '.github/workflows/feature.yml' + - '.github/workflows/develop.yml' + - '.github/workflows/release.yml' + - '.github/workflows/master.yml' + - '.github/workflows/vere.yml' + - 'pkg/arvo/**' + - 'pkg/docker-image/**' + - 'pkg/ent/**' + - 'pkg/ge-additions/**' + - 'pkg/libaes_siv/**' + - 'pkg/urbit/**' + - 'pkg/urcrypt/**' + - 'tests/**' + - 'bin/**' + - 'nix/**' + - 'default.nix' jobs: - upload: - strategy: - matrix: - include: - - { os: ubuntu-latest, system: x86_64-linux } - - { os: macos-latest, system: x86_64-darwin } - - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v2 - - uses: cachix/install-nix-action@v16 - - uses: cachix/cachix-action@v10 - with: - name: ${{ secrets.CACHIX_NAME }} - authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} - - - uses: google-github-actions/setup-gcloud@v0.2.0 - with: - version: '290.0.1' - service_account_key: ${{ secrets.GCS_SERVICE_ACCOUNT_KEY }} - project_id: ${{ secrets.GCS_PROJECT }} - export_default_credentials: true - - - run: nix-build -A tarball --arg enableStatic true - - - name: Run upload to bootstrap.urbit.org - run: | - version="$(cat ./pkg/urbit/version)" - system="$(nix-instantiate --eval --expr 'builtins.currentSystem')" - system=${system:1:${#system}-2} - target="gs://bootstrap.urbit.org/ci/urbit-v${version}-${system}-${GITHUB_SHA:0:9}.tgz" - - gsutil cp -n ./result "$target" - - echo "upload to $target complete." + call-vere: + uses: ./.github/workflows/vere.yml + with: + pace: 'soon' + upload: >- + ${{ + (github.ref_name == 'next/vere' && github.ref_type == 'branch') + }} + secrets: inherit diff --git a/.github/workflows/vere.yml b/.github/workflows/vere.yml new file mode 100644 index 000000000..c24155c18 --- /dev/null +++ b/.github/workflows/vere.yml @@ -0,0 +1,83 @@ + +name: vere + +on: + workflow_call: + inputs: + upload: + description: 'upload binaries to gcp' + type: boolean + default: false + required: false + pace: + description: 'release pace' + type: string + default: 'edge' + required: false + secrets: + CACHIX_AUTH_TOKEN: + required: false + GCP_CREDENTIALS: + required: false + GCS_SERVICE_ACCOUNT_KEY: + required: false + GCS_PROJECT: + required: false + + workflow_dispatch: + inputs: + upload: + description: 'upload binaries to gcp' + type: boolean + default: false + required: false + pace: + description: 'release pace' + type: choice + options: + - edge + - soon + - live + +jobs: + urbit: + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-latest, type: linux } + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + + # We only want the extra nix config on linux, where it is necessary + # for the docker build. We don't want in on Mac, where it isn't but + # it breaks the nix install. The two `if` clauses should be mutually + # exclusive + - uses: cachix/install-nix-action@v20 + with: + extra_nix_config: | + system-features = nixos-test benchmark big-parallel kvm + if: ${{ matrix.type == 'linux' }} + - uses: cachix/install-nix-action@v20 + if: ${{ matrix.os != 'ubuntu-latest' }} + + - uses: cachix/cachix-action@v10 + with: + name: ares + authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} + + - if: ${{ matrix.os == 'ubuntu-latest' }} + name: run urbit-tests + run: | + cp -RL tests pkg/arvo/tests + vere=$(curl https://bootstrap.urbit.org/vere/${{ inputs.pace }}/last) + echo $vere + url="$(echo https://bootstrap.urbit.org/vere/${{ inputs.pace }}/v${vere}/vere-v${vere}-linux-x86_64)" + echo $url + # put in .jam so it doesn't crash when it gets -A'd in + curl -Lo pkg/arvo/vere.jam "$url" + chmod +x pkg/arvo/vere.jam + nix-build -A urbit-tests diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 0b77208ae..000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -16.14.0 \ No newline at end of file diff --git a/.vercelignore b/.vercelignore deleted file mode 100644 index 6203dc090..000000000 --- a/.vercelignore +++ /dev/null @@ -1,16 +0,0 @@ -bin -doc -extras -nix -pkg/arvo -pkg/base-dev -pkg/docker-image -pkg/ent -pkg/garden -pkg/garden-dev -pkg/ge-additions -pkg/herb -pkg/hs -pkg/libaes_siv -pkg/urbit -sh \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e1f66402b..e35391b73 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,141 +1,101 @@ -# Contributing to Urbit +## Workflow -Thank you for your interest in contributing to Urbit. +Before beginning any unit of work, you should have a GitHub issue detailing the +scope of the work. This could be an issue someone else filed and has been +assigned to you (or you've assigned to yourself) or a new issue you filed +specifically for this unit of work. As much as possible, discussion of the work +should take place in the issue. When this is not possible, please update the +issue with relevant details from any offline conversations. Each issue should +provide a clear and thorough history of the work from inception to completion. -See [urbit.org/using/install][start] for basic orientation and usage -instructions. You may also want to subscribe to [urbit-dev][list], the Urbit -development mailing list. For specific information on contributing to the Urbit -interface, see its [contribution guidelines][interface]. +## Issues -For information on Arvo's maintainers, see [pkg/arvo][main]. +The [GitHub tracker][issu] is our canonical source of truth around issues, bugs, +performance problems and feature requests. If you encounter any issues when +developing on Urbit, feel free to submit a report about it here. -For more extensive information on Urbit development, such as how to set up an -environment and how to submit a grant, see the [developer documentation][dev]. +A good bug report, description of a crash, etc., should ideally be +*reproducible*, with clear steps as to how another developer can replicate and +examine your problem. That said, this isn't always possible -- some bugs depend +on having created a complicated or unusual state, or can otherwise simply be +difficult to trigger again. -[start]: https://urbit.org/using/install -[interface]: /pkg/interface/CONTRIBUTING.md -[dev]: https://urbit.org/docs/development +Your issue should thus at a minimum be *informative*. The best advice here is +probably "don't write bad issues," where "bad" is a matter of judgment and +taste. Issues that the maintainers don't judge to be sufficiently useful or +informative may be closed. -## Fake ships +Feature requests are welcome, but they should include sufficient detail and +explanation, as well as a discussion of perceived benefits one could expect from +them. "It would be cool if.." probably does not, in itself, constitute a good +feature request; instead, try to be specific about what you're requesting, and +what your desired feature would accomplish. -You may have an identity on the live network, but doing all your development on -the live network would be cumbersome and unnecessary. Standard practice in -Urbit development is to work on a fake `~zod`. Fake ships use deterministic -keys (derived from the ship address) and don't talk to the live network. They -can talk to each other over the local loopback. +### Feature Branch Names -To start a fake ship, simply specify the name with `-F`: +Every branch that you intend to put up for review must adhere to the form +`i//<...>`, where `` is the number of the issue that the branch +corresponds to and `<...>` is an optional short description of the branch to aid +in readability. If `<...>` is omitted, the `/` should be omitted as well, which +makes `i/` a well-formed branch name. These feature branches should be based +off of `develop`. -``` -$ urbit -F zod -``` +### Commits -You can also pass a name for the *pier* (or ship directory): - -``` -$ urbit -F zod -c my-fake-zod -``` - -To resume a fake ship, just pass the name of the pier: - -``` -$ urbit my-fake-zod -``` - -Fake ships by default use the same pre-compiled kernelspace ('pills') as livenet -ships do: boot pills, which are not always current with `master`. If you wish to -develop using code off the master branch, run the following from the repo -directory: - -``` -git lfs install -git lfs pull -urbit -F zod -B "bin/solid.pill" -A "pkg/arvo" -``` - -## Git practice - -### Contributing - -The canonical source tree is the `master` branch of -[https://github.com/urbit/urbit][repo]. You should typically branch off of -`master` when commencing new work. Most pull requests should be merging into -one of the `next/*` branches, depending on what part of the system the pull -request is targeting. - -Since we use GitHub, we request you contribute via a GitHub pull request. Tag -the [maintainer][main] for the component. If you have a question for the -maintainer, you can direct message them from your Urbit ship using that -information. - -When contributing changes, via whatever means, make sure you describe them -appropriately. You should attach a reasonably high-level summary of what the -changes are and what they do; reference any useful background material that may -exist, e.g. a GitHub issue, a mailing list discussion, a UP, etc. [Here][jbpr] -is a good example of a pull request with a useful, concise description. - -If your changes replace significant extant functionality, be sure to compare -them with the thing you're replacing. You may also want to cc reviewers, -or other parties who might have a particular interest in what you're -contributing. - -[jbpr]: https://github.com/urbit/urbit/pull/1782 - -### Hygiene - -Commits should generally be relevant, atomic, and have descriptions formatted -in the following manner: +Commits should generally be relevant, atomic, and have descriptions formatted in +the following manner: > component: short description > > long description The 'component' is a short prefix of what area of the codebase the commit -applies to. If a commit patches `%gall`, for example, the description should -be prefixed by 'gall'. If it touches `:aqua`, it should be prefixed by 'aqua'. -If it touches multiple components, then separate these by commas, e.g. "gall, -aqua, ph" -- but note that this may be a warning that too many changes are -being packed into a single commit. The 'component' and 'short description' -combined should be no more than 50 characters. +applies to. If a commit patches `%gall`, for example, the description should be +prefixed by 'gall'. If it touches `:aqua`, it should be prefixed by 'aqua'. If +it touches multiple components, then separate these by commas, e.g. "gall, aqua, +ph" -- but note that this may be a warning that too many changes are being +packed into a single commit. The 'component' and 'short description' combined +should be no more than 50 characters. -A lengthier description is encouraged, where useful, but is not always strictly -required. You should use the longer description to give any useful background -on or motivation for the commit, provide a summary of what it does, link to -relevant issues, proposals, or other commits, and so on. +Every individual commit should at a minimum be in a compiling and runnable state. +Broken commits or commits simply marked "wip" are not allowed. If you need to +clean up the commits in your branch, you can soft reset to an earlier state and +recommit with better metadata (or if the change is small enough, squash to one +good commit at the end). + +A lengthier description is encouraged, but is not always strictly required. You +should use the longer description to give any useful background on or motivation +for the commit, provide a summary of what it does, link to relevant issues, +proposals, or other commits, and so on. Here is an example of our commit format, taken from a commit in the history: > zuse: remove superfluous 'scup' and 'culm' types. > > %zuse includes definitions for 'scup' and 'culm', both of which are -> superfluous. 'scup' is simply (pair ship desk) and is used only in -> the definition of 'culm', a tagged union in which three of the four -> branches are commented out (i.e. are unused). +> superfluous. 'scup' is simply (pair ship desk) and is used only in the +> definition of 'culm', a tagged union in which three of the four branches are +> commented out (i.e. are unused). > -> This commit deletes 'scup' and 'culm' and refactors what little code -> made use of them. +> This commit deletes 'scup' and 'culm' and refactors what little code made use +> of them. -Note that the short description is prefixed by `zuse:`, which is what the -commit touches. Otherwise it just includes a summary of the change. +Note that the short description is prefixed by `zuse:`, which is what the commit +touches. Otherwise it just includes a summary of the change. Here's another example: > build: give arvo a high priority > -> 0bdced981e4 introduced the 'arvo-ropsten' derivation. Attempting to -> install both 'arvo' and 'arvo-ropsten' via nix-env will result in a -> priority error; this assigns a higher priority to 'arvo' to resolve the -> conflict. +> 0bdced981e4 introduced the 'arvo-ropsten' derivation. Attempting to install +> both 'arvo' and 'arvo-ropsten' via nix-env will result in a priority error; +> this assigns a higher priority to 'arvo' to resolve the conflict. > > Fixes #1912. Note that it cites a previous relevant commit, `0bdced981e4`, in its summary, and also points at the issue that it resolves. -If you're in doubt about how to format your commit descriptions, take a look at -the recent history and try to mimic the style that you can see others broadly -follow there. - When we say commits should be "atomic", we mean with respect to some distinct logical unit, e.g. a type definition used across many files, or a single file, or just a single function in a single file. Commits should be atomic at the @@ -144,104 +104,83 @@ into a single one that captures everything you're trying to do -- the history will never make for pleasant bedtime reading, so focus instead on making your commits useful for tools like `git-blame` and `git-bisect`. -Your contribution must apply cleanly to `master` in order to be considered -mergeable. You may want to regularly [rebase your changes][reba] onto `master` -in order to both clean up any intermediate "development" commits you make and -to ensure that you're up to date. +Your contribution must apply cleanly to `develop` in order to be considered +mergeable. You may want to regularly [rebase your changes][reba] onto +`develop` in order to both clean up any intermediate "development" commits you +make and to ensure that you're up to date. -If you're making a GitHub pull request, it's good practice to make it from a -topic branch, rather than `master`, on your fork. +### Pull Requests and Merges -### Pills +When your work is ready for review, open a pull request, making sure to link to +the tracking issue in the description, which should be formatted as follows +(where `` is the number of this work's tracking issue): + +``` +### Description + +Resolves #. + +Thoroughly describe the changes made. + +### Related + +Reference any related issues, links, papers, etc. here. +``` + +Tests will run automatically via GitHub Actions when you open a pull request or +push new commits to an existing pull request. + +Once you've collected and addressed feedback, tests are passing, and your PR has +been approved, merge the pull request. + +**Note**: If you are merging into develop, you *must* be syncing OTAs from +`~binnec-dozzod-marzod` which gets the tip of develop deployed to it. If +your merge breaks `binnec` it's your responsibility to alert people and +fix it. Your PR is shipped when it's successfully been deployed to +`~binnec` and picked up by your personal ship. If you're merging on behalf +of an external developer, this is also your responsibility. + +If you properly included the "Resolves +#N." directive in the pull request description, merging will automatically close +the tracking issue associated with the pull request. + +## Code style + +Hoon will be a less familiar language to many contributors. We've published +some [style guidelines for Hoon][hoon], but above all you should try to mimic +the style of the code around you. With regards to the style used throughout the +codebase: the more recently the code was written, the more standard and accepted +its style is likely to be. + +### Kernel Development and Pills + +Urbit bootstraps itself from a pill (you can see it being fetched from +`bootstrap.urbit.org` on boot). This is the compiled version of the kernel +(which you can find in the `sys` directory of [Arvo][arvo]), along with a +complete copy of the Arvo source. + +You can find the latest solid pill, as well as the latest so-called *brass* +and *ivory* pills, in the `bin/` directory at the repository root. Any contribution that touches the kernel (i.e., anything in `pkg/arvo/sys`), should be accompanied by an updated [solid pill](#the-kernel-and-pills). Pills are tracked in the repository via [git LFS][git-lfs]. -Whenever you make a contribution to the kernel, please create a new solid pill -via: - ``` -sh/update-solid-pill +$ git lfs init +$ git lfs pull ``` -and include it along with your contribution. +[git-lfs]: https://git-lfs.github.com -Historically, we've sometimes included these updated pills in separate, -standalone commits (you will see plenty of "pills: update solid" and similar -commits if you look through the history), but this practice is considered to be -deprecated -- you should usually just include the updated pill in the same -commit that updates the source. - -## Releases - -We typically create releases by tagging appropriate commits on `master`, so any -given commit in `master` may not actually be present in the latest release. - -We perform updates by pushing releases over-the-air to `~zod` approximately -once per week, so any contribution that can be deployed OTA will usually find -its way onto the network pretty rapidly. - -If you want to propose a hotfix (i.e. a small, OTA-updateable change, usually a -bugfix, to some currently-deployed release) then simply make it clear that your -contribution -- whether it be a pull request, patch, or whatever -- is intended -to be a hotfix. A maintainer can then deploy it to the network outside of the -normal release schedule. - -Less frequently we release new Vere versions, which requires users to download -new binaries, and occasionally, while Urbit is still in early development, we -breach network continuity in order to release large changes that are difficult -to push out over-the-air. Contributions to Vere, or non-OTA-able updates to -Arvo, will find their way into releases before terribly long. - -## Code style - -The Urbit project uses two-space indentation and avoids tab characters. -In C code, it should not be too difficult to mimic the style of the code -around you, which is just fairly standard K&R with braces on every -compound statement. One thing to watch out for is top-level sections in -source files that are denoted by comments and are actually indented one -level. - -Hoon will be a less familiar language to many contributors. We've published -some [style guidelines for Hoon][hoon], but above all you should try to mimic -the style of the code around you. With regards to the style used throughout -the codebase: the more recently the code was written, the more standard and -accepted its style is likely to be. - -## Kernel development - -Working on either C or non-kernel Hoon should not bring any surprises, but the -Hoon kernel (anything under [`pkg/arvo/sys/`][sys]) is bootstrapped from a -so-called *pill*, and must be recompiled if any changes are made. This should -happen automatically when you make changes, but if it doesn't, the command to -manually recompile and install the new kernel is `|reset` in `dojo`. This -rebuilds from the `sys` directory in the `base` desk in `%clay`. - -Currently, `|reset` does not reload apps like `dojo` itself, which will still -reference the old kernel. To force them to reload, make a trivial edit to their -main source file (under the `app` directory) in `%clay`. - -[arvo]: https://github.com/urbit/urbit/tree/master/pkg/arvo -[sys]: https://github.com/urbit/urbit/tree/master/pkg/arvo/sys - -## The kernel and pills - -Urbit bootstraps itself using a binary blob called a pill (you can see it being -fetched from `bootstrap.urbit.org` on boot). This is the compiled version of -the kernel (which you can find in the `sys` directory of [Arvo][arvo]), along -with a complete copy of the Arvo source. - -The procedure for creating a pill is often called "soliding." It is somewhat -similar to `|reset`, but instead of replacing your running kernel, it writes -the compiled kernel to a file. The command to solid is: +The +solid command is used to write the compiled kernel to a file. ``` > .urbit/pill +solid ``` -When the compilation finishes, your pill will be found in the -`[pier]/.urb/put/` directory as `urbit.pill`. +When the compilation finishes, your pill will be found in the `[pier]/.urb/put/` +directory as `urbit.pill`. You can boot a new ship from your local pill with `-B`: @@ -253,48 +192,57 @@ Release pills, i.e. those corresponding to vere releases, are cached at `https://bootstrap.urbit.org` and are indexed by the vere version number, e.g. `urbit-0.8.2.pill`. -Pills are also cached in version control via [git LFS][git-lfs]. You can find -the latest solid pill, as well as the latest so-called *brass* and *ivory* -pills, in the `bin/` directory at the repository root. Note that you'll need -to initialise git LFS in order to check these pills out: +Whenever you make a contribution to the kernel, please create a new solid pill +via: ``` -$ git lfs init -$ git lfs pull +sh/update-solid-pill ``` -[git-lfs]: https://git-lfs.github.com +You should include the updated pill in the same commit that updates the source. -## Issues +## Development Environment -The [GitHub tracker][issu] is our canonical source of truth around issues, -bugs, performance problems, feature requests, and so on. If you encounter any -issues when developing on Urbit, feel free to submit a report about it here. +Although you likely have an identity on the live network, developing on the live +network is high-risk and largely unnecessary. Instead, standard practice is to +work on a fake ship. Fake ships use deterministic keys derived from the ship's +address, don't communicate on the live network, and can communicate with other +fake ships over the local loopback. -A good bug report, description of a crash, etc., should ideally be -*reproducible*, with clear steps as to how another developer can replicate and -examine your problem. That said, this isn't always possible -- some bugs -depend on having created a complicated or unusual state, or can otherwise -simply be difficult to trigger again (say, you encountered it in the last -continuity era). +### Boot a New Fake Ship -Your issue should thus at a minimum be *informative*. The best advice here is -probably "don't write bad issues," where "bad" is a matter of judgment and -taste. Issues that the maintainers don't judge to be sufficiently useful or -informative may be closed. +To boot a new fake ship, pass the `-F` flag and a valid Urbit ship name to +`urbit`: -Feature requests are welcome, but they should include sufficient detail and -explanation, as well as a discussion of perceived benefits one could expect -from them. "It would be cool if.." probably does not, in itself, constitute a -good feature request; instead, try to be specific about what you're requesting, -and what your desired feature would accomplish. +```console +$ bazel build :urbit +$ ln -s bazel-bin/pkg/vere/urbit urbit +$ ./urbit -F +``` -## Staying in touch +By default, booting a fake ship will use the same pill that livenet ships use, +which leads to a non-trivial boot time on the order of tens of minutes. However, +using a development specific "solid" pill reduces this time to a couple minutes. + +To boot using the solid pill, download or create one as described in the Kernel +Development and Pills section above and then run the following: + +```console +$ ./urbit -F -B solid.pill +``` + +### Launch an Existing Fake Ship + +To launch an existing fake ship, supply the pier (the ship directory), which is +simply the name of the ship[^1], to `urbit`: + +```console +$ ./urbit +``` + +[^1]: Unless you specified the pier name using the `-c` flag. -Questions or other communications about contributing to Urbit can go to -[support@urbit.org][mail]. -[mail]: mailto:support@urbit.org [list]: https://groups.google.com/a/urbit.org/forum/#!forum/dev [repo]: https://github.com/urbit/urbit [reba]: https://git-rebase.io/ diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 29370a874..2be1149e3 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,249 +1,98 @@ -# Maintainers' Guide +# Maintaining -## Branch organization +## Overview -The essence of this branching scheme is that you create "release branches" of -independently releasable units of work. These can then be released by their -maintainers when ready. +We use a three-stage release pipeline. Each stage of the release pipeline has +its own dedicated branch and corresponding testing moon. Features and bug fixes +progress through each stage--and are subject to testing along the way--until +they're eventually released to the live network. This pipeline automates our +release process, making it much easier to quickly and reliably ship code. It's +also simple to reason about. -### Master branch - -Master is what's released on the network. Deployment instructions are in the -next section, but tagged releases should always come from this branch. - -### Feature branches - -Anyone can create feature branches. For those with commit access to -urbit/urbit, you're welcome to create them in this repo; otherwise, fork the -repo and create them there. - -Usually, new development should start from master, but if your work depends on -work in another feature branch or release branch, start from there. - -If, after starting your work, you need changes that are in master, merge it into -your branch. If you need changes that are in a release branch or feature -branch, merge it into your branch, but understand that your work now depends on -that release branch, which means it won't be released until that one is -released. - -### Release branches - -Release branches are code that is ready to release. All release branch names -should start with `next/`. - -All code must be reviewed before being pushed to a release branch. Thus, -feature branches should be PR'd against a release branch, not master. - -Create new release branches as needed. You don't need a new one for every PR, -since many changes are relatively small and can be merged together with little -risk. However, once you merge two branches, they're now coupled and will only -be released together -- unless one of the underlying commits is separately put -on a release branch. - -Here's a worked example. The rule is to make however many branches are useful, -and no more. This example is not prescriptive; the developers making the -changes may add, remove, or rename branches in this flow at will. - -Suppose you (plural, the dev community at large) complete some work in a -userspace app, and you put it in `next/landscape`. Separately, you make a small -JS change. If you PR it to `next/landscape`, then it will only be released at -the same time as the app changes. Maybe this is fine, or maybe you want this -change to go out quickly, and the change in `next/landscape` is relatively -risky, so you don't want to push it out on Friday afternoon. In this case, put -the change in another release branch, say `next/js`. Now either can be released -independently. - -Suppose you do further work that you want to PR to `next/landscape`, but it -depends on your fixes in `next/js`. Simply merge `next/js` into either your -feature branch or `next/landscape` and PR your finished work to -`next/landscape`. Now there is a one-way coupling: `next/landscape` contains -`next/js`, so releasing it will implicitly release `next/js`. However, you can -still release `next/js` independently. - -This scheme extends to other branches, like `next/base` or `next/os1.1` or -`next/ford-fusion`. Some branches may be long-lived and represent simply the -"next" release of something, while others will have a definite lifetime that -corresponds to development of a particular feature or numbered release. - -Since they are "done", release branches should be considered "public", in the -sense that others may depend on them at will. Thus, never rebase a release -branch. - -When cutting a new release, you can filter branches with `git branch --list -'next/*'` or by typing "next/" in the branch filter on Github. This will give -you the list of branches which have passed review and may be merged to master -and released. When choosing which branches to release, make sure you understand -the risks of releasing them immediately. If merging these produces nontrivial -conflicts, consider asking the developers on those branches to merge between -themselves. In many cases a developer can do this directly, but if it's -sufficiently nontrivial, this may be a reviewed PR of one release branch into -another. - -#### Standard release branches - -While you can always create non-standard release branches to stage for a -particular release, most changes should go through the following: - -- next/base -- changes to the %base desk in pkg/arvo -- next/garden -- changes to the %garden desk -- next/landscape -- changes to the %landscape desk -- next/bitcoin -- changes to the %bitcoin desk -- next/webterm -- changes to the %webterm desk -- next/vere -- changes to the runtime - -### Other cases - -Outside contributors can generally target their PRs against master unless -specifically instructed. Maintainers should retarget those branches as -appropriate. - -If a commit is not something that goes into a release (eg changes to README or -CI), it may be committed straight to master. - -If a hotfix is urgent, it may be PR'd straight to master. This should only be -done if you reasonably expect that it will be released soon and before anything -else is released. - -If a series of commits that you want to release is on a release branch, but you -really don't want to release the whole branch, you must cherry-pick them onto -another release branch. Cherry-picking isn't ideal because those commits will -be duplicated in the history, but it won't have any serious side effects. - - -## Hotfixes - -Here lies an informal guide for making hotfix releases and deploying them to -the network. - -Take [this PR][1], as an example. This constituted a great hotfix. It's a -single commit, targeting a problem that existed on the network at the time. -Here's how it should be released and deployed OTA. - -[1]: https://github.com/urbit/urbit/pull/2025 - -### If the thing is acceptable to merge, merge it to master - -Unless it's very trivial, it should probably have a single "credible looking" -review from somebody else on it. - -You should avoid merging the PR in GitHub directly. Instead, use the -`sh/merge-with-custom-msg` script -- it will produce a merge commit with -message along the lines of: +## Branches and Moons +The branches and their corresponding moons that comprise the stages of the +release pipeline are: ``` -Merge branch FOO (#PR_NUM) - -* FOO: - bar: ... - baz: ... - -Signed-off-by: SIGNER +---------------------------------------------------------------------------------------------- + Branch | Moon | Target audience | Contains +---------------------------------------------------------------------------------------------- +`develop` | `~binnec-dozzod-marzod` | Kernel developers | Latest `develop` branch commit +`release` | `~marnec-dozzod-marzod` | Early Adopters | Latest `release` branch commit +`release` | `~doznec-dozzod-marzod` | App Developers | Latest release candidate +`master` | `~zod` | Everyone else | Latest release ``` -We do this as it's nice to have the commit log information in the merge commit, -which GitHub's "Merge PR" button doesn't do (at least by default). -`sh/merge-with-custom-msg` performs some useful last-minute urbit-specific -checks, as well. +**WARNING**: If you lack the requisite skills to troubleshoot and fix kernel issues, you should not sync from develop/~binnec. If you're not prepared to breach your ship in response to an issue stemming from an early release, do not use pre-release moons. -You might want to alias `sh/merge-with-custom-msg` locally, to make it easier -to use. My .git/config contains the following, for example: - -``` -[alias] - mu = !sh/merge-with-custom-msg -``` - -so that I can type e.g. `git mu origin/foo 1337`. - -### Prepare a release commit - -If you're making a Vere release, just play it safe and update all the pills. - -To produce multi pills, you will need to set up an environment with the -appropriate desks with the appropriate contents, doing something like the -following (where `> ` denotes an urbit command and `% ` denotes a unix shell -command): +`develop` is the default branch in the repo, which means that all new pull +requests target it by default. The general flow of a new feature or bug fix +through the pipeline is: ```console -> |merge %garden our %base -> |merge %landscape our %base -> |merge %bitcoin our %base -> |merge %webterm our %base -> |mount % -> |mount %garden -> |mount %landscape -> |mount %bitcoin -> |mount %webterm -% rsync -avL --delete pkg/arvo/ zod/base/ -% rm -rf zod/base/tests/ -% for desk in garden landscape bitcoin webterm; do \ - rsync -avL --delete pkg/$desk/ zod/$desk/ \ - done -> |commit %base -> |commit %garden -> |commit %landscape -> |commit %bitcoin -> |commit %webterm -> .multi/pill +solid %base %garden %landscape %bitcoin %webterm -> .multi-brass/pill +brass %base %garden %landscape %bitcoin %webterm +feature branch ----> develop ----> release ---------> master + | | | + deployed to deployed to deployed to + ~binnec moon ~marnec/~doznec moon network ``` -And then of course: +If an issue arises in the course of testing the `release` branch (because more +people are using `marnec` than `binnec`), a PR can be opened to target +`release`. If that's the case, the `master` needs to be merged back into +`develop` after `release` merges into `master` to ensure that `develop` gets the +fix. -```console -> .solid/pill +solid -> .brass/pill +brass -> .ivory/pill +ivory -``` +## Release Workflow -For an Urbit OS release, after all the merge commits, make a release with the -commit message "release: urbit-os-v1.0.xx". This commit should have up-to-date -artifacts from pkg/interface and a new version number in the desk.docket-0 of -any desk which changed. If neither the pill nor the JS need to be updated (e.g -if the pill was already updated in the previous merge commit), consider making -the release commit with --allow-empty. +Developers work on feature branches built against `develop`. While doing this, +they continually merge in changes from `develop` to their feature branch. When +their feature is ready (and they've tested it), they open a pull request. After +code review approval and passing tests, their feature can merge into `develop`. +Every merge into `develop` immediately triggers a deploy to the `binnec` moon. +If your merge breaks `binnec` it's your responsibility to fix it. -If anything in `pkg/interface` has changed, ensure it has been built and -deployed properly. You'll want to do this before making a pill, since you want -the pill to have the new files/hash. For most things, it is sufficient to run -`npm install; npm run build:prod` in `pkg/interface`. +Once a week on Tuesday, a `release` branch is cut off of `develop`. This release +gets deployed to `marnec` to be tested for the rest of the week. Any fixes that +have to go into the release can go straight into the release branch. New work +that didn't make the release continues on feature branches against `develop` +(eventually merging there). After initial testing on `marnec`, a release +candidate is tagged and merges into `~doznec` where early adopters and app +developers can pick it up and test or update their apps for a new kelvin. If +it's a new kelvin, we also send an email to urbit-dev with instructions for +testing the breaking changes. -However, if you've made a change to Landscape's JS, then you will need to build -a "glob" and upload it to bootstrap.urbit.org. To do this, run `npm install; -npm run build:prod` in `pkg/interface`, and add the resulting -`pkg/arvo/app/landscape/index.[hash].js` to a fakezod at that path (or just create a -new fakezod with `urbit -F zod -B bin/solid.pill -A pkg/arvo`). Run -`:glob|make`, and this will output a file in `fakezod/.urb/put/glob-0vXXX.glob`. +Then on the next Tuesday the release branch merges into master and tagged using +the tag instructions below, we create a GitHub release (marked latest) using +that tag on `master` which documents the changes that went into the release. In +the Github UI you can get the changelog by selecting the tag prior to it from +the previous release when creating the new release. Then the release is deployed +to the broader network via `zod`. Master is then merged back into `develop` +where any fixes that went straight to release get picked up. Lastly, a new +release branch is cut from `develop` and the process begins again. -Upload this file to bootstrap.urbit.org, and modify `+hash` at the top of -`pkg/arvo/app/glob.hoon` to match the hash in the filename of the `.glob` file. -Amend `pkg/arvo/app/landscape/index.html` to import the hashed JS bundle, instead -of the unversioned index.js. Do not commit the produced `index.js` and -make sure it doesn't end up in your pills (they should be less than 10MB each). +### Tagging -### Tag the resulting commit +When we branch release to deploy to `~marnec`, we need to tag it as a release candidate (RC), like `urbit-os-vx.y-rc1`. Here 'x' is the major version and 'y' is an OTA patch counter. After this any change that goes into release gets a new tag that increments the rc. -What you should do here depends on the type of release being made. +After we ship a release to the live network, add a tag that is not a release candidate, like `urbit-os-vx.y`, to the master branch, since that's what was released. -First, for Urbit OS releases: +#### Applying the Tag Locally -If it's a very trivial hotfix that you know isn't going to break anything, tag -it as `urbit-os-vx.y`. Here 'x' is the major version and 'y' is an OTA patch -counter. Change `urbit-os` to e.g. `landscape` or another desk if that's what you're -releasing. If you're releasing changes to more than one desk, add a separate -tag for each desk (but only make one announcment email/post, with all of the -desks listed). +Use an annotated tag with the `-a` git argument. Make sure to follow +the naming convention for RCs and live releases, described above. -Use an annotated tag, i.e. + +To add a tag to the local repo, run this: ``` -git tag -a urbit-os-vx.y +git tag -a ``` -The tag format should look something like this: +This will bring up an editor, where you should add the release notes, +which should look like this: ``` -urbit-os-vx.y + This release will be pushed to the network as an over-the-air update. @@ -256,99 +105,68 @@ Contributions: [..] ``` -You can get the "contributions" section by the shortlog between the -last release and this release: +To fill in the "contributions" section, copy in the shortlog between the last release and this release, obtained by running this command: ``` -git shortlog LAST_RELEASE.. +git shortlog --no-merges LAST_RELEASE.. ``` -I originally tried to curate this list somewhat, but now just paste it -verbatim. If it's too noisy, yell at your colleagues to improve their commit -messages. +#### Pushing the Tag to the Main Repo -Try to include a high-level summary of the changes in the "release notes" -section. You should be able to do this by simply looking at the git log and -skimming the commit descriptions (or perhaps copying some of them in verbatim). -If the commit descriptions are too poor to easily do this, then again, yell at -your fellow contributors to make them better in the future. - -If it's *not* a trivial hotfix, you should probably make any number of release -candidate tags (e.g. `urbit-os-vx.y.rc1`, `urbit-os-vx.y.rc2`, ..), test -them, and after you confirm one of them is good, tag the release as -`urbit-os-vx.y`. - -For Vere releases: - -Tag the release as `urbit-vx.y`. The tag format should look something like -this: +Once you have added a tag, push it to the main repository using the +following command: ``` -urbit-vx.y - -Note that this Vere release will by default boot fresh ships using an Urbit OS -va.b.c pill. - -Release binaries: - -(linux64) -https://bootstrap.urbit.org/urbit-vx.y-linux64.tgz - -(macOS) -https://bootstrap.urbit.org/urbit-vx.y-darwin.tgz - -Release notes: - - [..] - -Contributions: - - [..] +git push origin ``` -Ensure the Vere release is marked as the 'latest' release and upload the two -`.tgz` files to the release as `darwin.tgz` and `linux64.tgz`; -this allows us to programmatically retrieve the latest release at -[urbit.org/install/mac/latest/](https://urbit.org/install/mac/latest) and -[urbit.org/install/linux64/latest](https://urbit.org/install/linux64/latest), -respectively. +## Releases -The same schpeel re: release candidates applies here. +- [ ] Create a pull request from the relevant release branch (with the format `release/urbit-os-vX.XX`) to `master`. +- [ ] ssh into `~zod` +- [ ] Check to ensure that nobody else is ssh'd into `~zod`, by running `screen -ls` and verifying no sessions are attached. +- [ ] Attach to the screen session using `screen -x` +- [ ] Ensure that the release candidate was correctly propagated through the prerelease moons + - Use `-read %z ~SHIP %DESK da+now /` to check desk hashes + - [ ] Run the above check on the following [SHIP DESK] pairs: [~marnec-dozzod-marzod %base], [~marnec-dozzod-marzod %kids], [~doznec-dozzod-marzod %base], [~doznec-dozzod-marzod %kids] — **they should all match** +- [ ] Install the contents of the `%kids` desk on `~doznec-dozzod-marzod` into our `%base`: `|merge %base ~doznec-dozzod-marzod %kids, =gem %only-that` +- [ ] Check that `~zod` has updated to the latest release. For a Kelvin release, you can run `zuse` in the Dojo. Each non-Kelvin release might its own way of checking whether the update has completed, possibly through checking the `%cz` hash of the `%base` desk matches the hash on `~marnec-dozzod-marzod` by comparing the outputs of `+vat %base` on both ships. +- [ ] Merge `~zod`'s `%base` desk into its `%kids` desk to distribute the new code to the network: `|merge %kids our %base, =gem %only-that` +- [ ] Before exiting the screen session on `~zod`, make sure the screen session is not left in copy mode for a long period of time, since that will disrupt `~zod`'s operation. -Note that the release notes indicate which version of Urbit OS the Vere release -will use by default when booting fresh ships. Do not include implicit Urbit OS -changes in Vere releases; this used to be done, historically, but shouldn't be -any longer. If there are Urbit OS and Vere changes to be released, make two -separate releases. +### Release Communications -### Deploy the update +- [ ] Tag the commit that went onto the live network as a release, using GitHub's "Releases" interface. See the "Tagging" section of this document for details. +- [ ] Update (add a response) the mailing list post to include the base hash of the new release, and indicate that this has now been deployed to the network. +- [ ] Tweet from the `@zodisok` Twitter account linking to the GitHub release. +- [ ] Post links to the release in the Urbit Community Development channel and a channel in the UF public group. -(**Note**: the following steps are automated by some other Tlon-internal -tooling. Just ask `~nidsut-tomdun` for details.) +### Post-Release Git Cleanup -For Urbit OS updates, this means copying the files into ~zod's %base desk. The -changes should be merged into /~zod/kids and then propagated through other galaxies -and stars to the rest of the network. +- [ ] Merge `master` back into `develop`. +- [ ] Cut a new release branch from `develop`. The branch should have the format `release/urbit-os-vX.XX` -For consistency, I create a release tarball and then rsync the files in. +### Release Next Release Candidate -``` -$ wget https://github.com/urbit/urbit/archive/urbit-os-vx.y.tar.gz -$ tar xzf urbit-os-vx.y.tar.gz -$ herb zod -p hood -d "+hood/mount /=base=" -$ rsync -zr --delete urbit-urbit-os-vx.y/pkg/arvo/ zod/base -$ herb zod -p hood -d "+hood/commit %base" -$ herb zod -p hood -d "+hood/merge %kids our %base" -``` +We'll now need to **IMMEDIATELY** deploy the new release candidate to the pre-release moon(s). Otherwise PRs merged during this window will bypass the testing period on `~binnec` and go straight to the release candidate. -For Vere updates, this means simply shutting down each desired ship, installing -the new binary, and restarting the pier with it. +- On `~marnec-dozzod-marzod`: + - [ ] `|merge %base ~binnec-dozzod-marzod %kids, =gem %only-that` to update `~marnec` with the contents of the GH release branch + - [ ] `|merge %kids our %base, =gem %only-that` to OTA the release candidate to subscribers +- When ready to deploy the release candidate to App Developers, on `~doznec-dozzod-marzod`: + - [ ] `|merge %base ~marnec-dozzod-marzod %kids, =gem %only-that` to update `~doznec` with the release candidate + - [ ] `|merge %kids our %base, =gem %only-that` to OTA the release candidate to subscribers -### Announce the update +### Post-Release Checks +- [ ] Check that `~marzod` and other distribution stars are receiving the update by running `|ames-sift ~zod` and `|ames-verb %rcv %ges`. You should see lots of packets from `~zod`. Once you have confirmed packets are flowing, run `|ames-sift` and `|ames-verb` with no arguments to reset the verbosity state. +- [ ] Check that planets are receiving the update. They should start updating within an hour or so. +- [ ] Monitor the Urbit Community Help channel, UF public group channels, and Twitter to make -Post an announcement to urbit-dev. The tag annotation, basically, is fine here --- I usually add the %cz hash (for Urbit OS releases) and the release binary -URLs (for Vere releases). Check the urbit-dev archives for examples of these -announcements. - -Post the same announcement to the group feed of Urbit Community. +### Post-Release Artifacts +After waiting at least 24 hours after the release to the network, make and distribute a pill. +- [ ] Find a ship on the network (for now, use `~halbex-palheb`, which runs the UF public group) whose sources for `%base` and the standard app desks are mainline, not devstream. +- [ ] Ensure the `%cz` hashes of all desks match those on the distribution ships. +- [ ] Make a pill by running `.multi-vX-XX/pill +solid %base %garden %webterm %landscape %groups %talk` (replacing `X-XX` with the appropriate version numbers, in this and later steps). +- [ ] Boot a fakezod off that pill to make sure the pill is viable. +- [ ] Upload the pill to `bootstrap.urbit.org` using the Google Cloud SDK by running: `gsutil cp /path/to/pier/.urb/put/multi-vX-XX.pill gs://bootstrap.urbit.org/urbit-vX.XX.pill` -- note that it should be `vX.XX`, not `vX-XX` as in the original pill filename. +- [ ] Boot a ship with the latest binary and check that it downloads the pill from `https://bootstrap.urbit.org/urbit-vX.XX.pill` where you just uploaded it. diff --git a/Makefile b/Makefile index a06eac1c8..52aec5e1b 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ -.PHONY: build build-all install cross release test pills ropsten-pills clean +.PHONY: build build-all install cross release test pills goerli-pills clean build: - nix-build -A urbit -A herb --no-out-link + nix-build -A urbit --no-out-link install: - nix-env -f . -iA urbit -iA herb + nix-env -f . -iA urbit release: sh/release @@ -17,8 +17,8 @@ pills: sh/update-brass-pill sh/update-ivory-pill -ropsten-pills: - sh/create-ropsten-pills +goerli-pills: + sh/create-goerli-pills interface: sh/build-interface diff --git a/README.md b/README.md index 58a645514..4fcca29d6 100644 --- a/README.md +++ b/README.md @@ -7,101 +7,36 @@ has an identity layer (Azimuth), virtual machine (Vere), and operating system A running Urbit "ship" is designed to operate with other ships peer-to-peer. Urbit is a general-purpose, peer-to-peer computer and network. -This repository contains: +This repository contains the [Arvo Kernel][arvo] -- The [Arvo OS][arvo] -- [herb][herb], a tool for Unix control of an Urbit ship -- Source code for [Landscape's web interface][land] -- Source code for the [vere][vere] virtual machine. - -For more on the identity layer, see [Azimuth][azim]. To manage your Urbit -identity, use [Bridge][brid]. - -[arvo]: https://github.com/urbit/urbit/tree/master/pkg/arvo -[azim]: https://github.com/urbit/azimuth -[brid]: https://github.com/urbit/bridge -[herb]: https://github.com/urbit/urbit/tree/master/pkg/herb -[land]: https://github.com/urbit/urbit/tree/master/pkg/interface -[vere]: https://github.com/urbit/urbit/tree/master/pkg/urbit +For the Runtime, see [Vere][vere]. +For more on the identity layer, see [Azimuth][azim]. +To manage your Urbit identity, use [Bridge][brid]. ## Install To install and run Urbit, please follow the instructions at -[urbit.org/using/install][start]. You'll be on the live network in a +[urbit.org/getting-started][start]. You'll be on the live network in a few minutes. -If you're interested in Urbit development, keep reading. - -[start]: https://urbit.org/using/install/ - -## Development - -[![License][license-badge]][license] -[![Build][build-badge]][build] -[![Nix][nix-badge]][nix] -[![Cachix][cachix-badge]][cachix] - -Urbit uses [Nix][nix] to manage builds. On Linux and macOS you can install Nix -via: - -``` -curl -L https://nixos.org/nix/install | sh -``` - -You can optionally setup Nix to pull build artefacts from the binary cache -that continuous integration uses. This will improve build times and avoid -unnecessary recompilations of common dependencies. Once Nix has been installed -you can setup Cachix via: - -``` -nix-env -iA cachix -f https://cachix.org/api/v1/install -cachix use ares -``` - -The Makefile in the project's root directory contains useful phony targets for -building, installing, testing, and so on. You can use it to avoid dealing with -Nix explicitly. - -To build the Urbit virtual machine binary, for example, use: - -``` -make build -``` - -The test suite can similarly be run via a simple: - -``` -make test -``` - -Note that some of the Makefile targets need access to pills tracked via [git -LFS][git-lfs], so you'll also need to have those available locally: - -``` -git lfs install -git lfs pull -``` - -[license]: https://raw.githubusercontent.com/urbit/urbit/master/LICENSE.txt -[license-badge]: https://img.shields.io/badge/license-MIT-blue.svg -[build]: https://github.com/urbit/urbit/actions -[build-badge]: https://github.com/urbit/urbit/workflows/build/badge.svg -[cachix]: https://ares.cachix.org -[cachix-badge]: https://img.shields.io/badge/cachix-ares-purple.svg -[nix]: https://nixos.org -[nix-badge]: https://img.shields.io/badge/builtwith-nix-purple.svg -[git-lfs]: https://git-lfs.github.com +[start]: https://urbit.org/getting-started/ ## Contributing Contributions of any form are more than welcome! Please take a look at our [contributing guidelines][cont] for details on our git practices, coding -styles, how we manage issues, and so on. - -For instructions on contributing to Landscape, see [its][lcont] guidelines. +styles, and how we manage issues. You might also be interested in joining the [urbit-dev][list] mailing list. +## Release + +For details about our release process, see the [maintainers guidelines][main] + +[arvo]: https://github.com/urbit/urbit/tree/master/pkg/arvo +[azim]: https://github.com/urbit/azimuth +[brid]: https://github.com/urbit/bridge +[vere]: https://github.com/urbit/vere [list]: https://groups.google.com/a/urbit.org/forum/#!forum/dev [cont]: https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md -[lcont]: https://github.com/urbit/urbit/blob/master/pkg/interface/CONTRIBUTING.md +[main]: https://github.com/urbit/urbit/blob/master/MAINTAINERS.md diff --git a/bin/brass.pill b/bin/brass.pill index ad7da6640..a6baa096b 100644 --- a/bin/brass.pill +++ b/bin/brass.pill @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4247c64a7d9fc0c0f1d2f017c21dd3464ddfe56529c7d6eef0e64554bd453e8 -size 7611162 +oid sha256:bd487cdb8294fdef6878f623bceb893553b36b2a616d22d30017b430361586fb +size 3889185 diff --git a/bin/ivory.pill b/bin/ivory.pill index c782fb725..3a6b06922 100644 --- a/bin/ivory.pill +++ b/bin/ivory.pill @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5123a1ac30b83ec026587574df1ce13a73e72d06588ff68b5c41c09e1bebb5b7 -size 949962 +oid sha256:26ff86808886beb831e4a135f478e42ce83ef4a09ad24808b3fe97248ce7a6b7 +size 1136643 diff --git a/bin/multi-brass.pill b/bin/multi-brass.pill deleted file mode 100644 index debb8ecc8..000000000 --- a/bin/multi-brass.pill +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2f46209c31bc7be965b6ba32db92fb0746be15d9613b1c3c8d09ce7fa0e5e157 -size 8280141 diff --git a/bin/multi.pill b/bin/multi.pill index a05f085f2..251d3cf23 100644 --- a/bin/multi.pill +++ b/bin/multi.pill @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:187ea751a274dba7ed69df3a5b8f6f7ac620e3f9787abd75b18cf494d0c41f05 -size 11174099 +oid sha256:4e4c99cd57805f38ffa1c8d0abe2e21cf1b93d5dbb76e32135721a9b8f46aa31 +size 7740551 diff --git a/bin/solid.pill b/bin/solid.pill index a79fa3353..c5f3546c0 100644 --- a/bin/solid.pill +++ b/bin/solid.pill @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c45166ff0f8ab8dc1552bcef519c77c0afa6ca52f8ed1ba31ed632012667d619 -size 8674763 +oid sha256:9d0ff563027d47436d12f00b7500352ec844a1db7d336b0e5b9cfd5c4c49c66c +size 6017943 diff --git a/default.nix b/default.nix index 011340a71..da2fff6c7 100644 --- a/default.nix +++ b/default.nix @@ -40,7 +40,9 @@ , crossOverlays ? [ ] # Whether to use pkgs.pkgsStatic.* to obtain statically linked package # dependencies - ie. when building fully-static libraries or executables. -, enableStatic ? false }: +, enableStatic ? false + # release channel (when static) +, verePace ? "" }: let @@ -55,7 +57,10 @@ let if system == "x86_64-linux" && crossSystem == null && enableStatic then "x86_64-unknown-linux-musl" else - crossSystem; + if system == "aarch64-linux" && crossSystem == null && enableStatic then + "aarch64-unknown-linux-musl" + else + crossSystem; }; # Use nixpkgs' top-level/static overlay if enableStatic = true. @@ -95,8 +100,6 @@ let marsSources = callPackage ./nix/pkgs/marsSources { }; - urbit = callPackage ./nix/pkgs/urbit { inherit enableStatic; }; - urcrypt = callPackage ./nix/pkgs/urcrypt { inherit enableStatic; }; docker-image = callPackage ./nix/pkgs/docker-image { }; @@ -107,16 +110,14 @@ let # Expose packages with local customisations (like patches) for dev access. inherit (pkgsStatic) libsigsegv lmdb; - urbit-debug = urbit.override { enableDebug = true; }; urbit-tests = libLocal.testFakeShip { inherit arvo; - urbit = urbit-debug; pill = solid.lfs; }; - ivory-ropsten = ivory.override { arvo = arvo.ropsten; }; - brass-ropsten = brass.override { arvo = arvo.ropsten; }; + ivory-goerli = ivory.override { arvo = arvo.goerli; }; + brass-goerli = brass.override { arvo = arvo.goerli; }; # Create a .tgz of the primary binaries. tarball = let diff --git a/doc/spec/nock/10.txt b/doc/spec/nock/10.txt new file mode 100644 index 000000000..27d1e8c73 --- /dev/null +++ b/doc/spec/nock/10.txt @@ -0,0 +1,70 @@ +Author: Mencius Moldbug [moldbug@gmail.com] +Date: 9/15/2008 +Version: 10K + +1. Introduction + + This file defines one function, "nock." + + nock is in the public domain. + +2. Data + + A "noun" is either an "atom" or a "cell." An "atom" is an unsigned + integer of any size. A "cell" is an ordered pair of any two nouns, + the "head" and "tail." + +3. Semantics + + nock maps one noun to another. It doesn't always terminate. + +4. Pseudocode + + nock is defined in a pattern-matching pseudocode, below. + + Brackets enclose cells. [a b c] is [a [b c]]. + +5. Definition + +5.1 Transformations + + *[a [b c] d] => [*[a b c] *[a d]] + *[a 0 b] => /[b a] + *[a 1 b] => [b] + *[a 2 b c d] => *[a 3 [0 1] 3 [1 c d] [1 0] 3 [1 2 3] [1 0] 5 5 b] + *[a 3 b] => **[a b] + *[a 4 b] => &*[a b] + *[a 5 b] => ^*[a b] + *[a 6 b] => =*[a b] + *[a] => *[a] + +5.2 Operators + +5.2.1 Goto [*] + + *[a] -> nock[a] + +5.2.2 Deep [&] + + &[a b] -> 0 + &[a] -> 1 + +5.2.4 Bump [^] + + ^[a b] -> ^[a b] + ^[a] -> (a + 1) + +5.2.5 Like [=] + + =[a a] -> 0 + =[a b] -> 1 + =[a] -> =[a] + +5.2.6 Snip [/] + + /[1 a] -> a + /[2 a b] -> a + /[3 a b] -> b + /[(a + a) b] -> /[2 /[a b]] + /[(a + a + 1) b] -> /[3 /[a b]] + /[a] -> /[a] diff --git a/doc/spec/nock/11.txt b/doc/spec/nock/11.txt new file mode 100644 index 000000000..da9dafb91 --- /dev/null +++ b/doc/spec/nock/11.txt @@ -0,0 +1,74 @@ +Author: Mencius Moldbug (moldbug@gmail.com) +Date: 5/25/2008 +Version: 11K + +1. Introduction + + This file defines one function, "nock." + + nock is in the public domain. + +2. Data + + A "noun" is either an "atom" or a "cell." An "atom" is an unsigned + integer of any size. A "cell" is an ordered pair of any two nouns, + the "head" and "tail." + +3. Semantics + + nock maps one noun to another. It doesn't always terminate. + +4. Pseudocode + + nock is defined in a pattern-matching pseudocode, below. + + Parentheses enclose cells. (a b c) is (a (b c)). + +5. Definition + +5.1 Transformations + + *(a (b c) d) => (*(a b c) *(a d)) + *(a 0 b) => /(b a) + *(a 1 b) => (b) + *(a 2 b c d) => *(a 3 (0 1) 3 (1 c d) (1 0) 3 (1 2 3) (1 0) 5 5 b) + *(a 3 b) => **(a b) + *(a 4 b) => &*(a b) + *(a 5 b) => ^*(a b) + *(a 6 b) => =*(a b) + + *(a 7 b c) => *(a 3 (((1 0) b) c) 1 0 3) + *(a 8 b c) => *(a c) + + *(a) => *(a) + +5.2 Operators + +5.2.1 Goto (*) + + *(a) -> nock(a) + +5.2.2 Deep (&) + + &(a b) -> 0 + &(a) -> 1 + +5.2.4 Bump (^) + + ^(a b) -> ^(a b) + ^(a) -> a + 1 + +5.2.5 Same (=) + + =(a a) -> 0 + =(a b) -> 1 + =(a) -> =(a) + +5.2.6 Snip (/) + + /(1 a) -> a + /(2 a b) -> a + /(3 a b) -> b + /((a + a) b) -> /(2 /(a b)) + /((a + a + 1) b) -> /(3 /(a b)) + /(a) -> /(a) diff --git a/doc/spec/nock/12.txt b/doc/spec/nock/12.txt new file mode 100644 index 000000000..d3762e855 --- /dev/null +++ b/doc/spec/nock/12.txt @@ -0,0 +1,75 @@ +Author: Curtis Yarvin (curtis.yarvin@gmail.com) +Date: 3/28/2008 +Version: 0.12 + +1. Introduction + + This file defines one function, "nock." + + nock is in the public domain. + +2. Data + + A "noun" is either an "atom" or a "cell." An "atom" is an unsigned + integer of any size. A "cell" is an ordered pair of any two nouns, + the "head" and "tail." + +3. Semantics + + nock maps one noun to another. It doesn't always terminate. + +4. Pseudocode + + nock is defined in a pattern-matching pseudocode, below. + + Parentheses enclose cells. (a b c) is (a (b c)). + +5. Definition + +5.1 Transformations + + *(a (b c) d) => (*(a b c) *(a d)) + *(a 0 b) => /(b a) + *(a 1 b) => (b) + *(a 2 b c) => *(*(a b) c) + *(a 3 b) => **(a b) + *(a 4 b) => &*(a b) + *(a 5 b) => ^*(a b) + *(a 6 b) => =*(a b) + + *(a 7 b c d) => *(a 3 (0 1) 3 (1 c d) (1 0) 3 (1 2 3) (1 0) 5 5 b) + *(a 8 b c) => *(a 2 (((1 0) b) c) 0 3) + *(a 9 b c) => *(a c) + + *(a) => *(a) + +5.2 Operators + +5.2.1 Goto (*) + + *(a) -> nock(a) + +5.2.2 Deep (&) + + &(a b) -> 0 + &(a) -> 1 + +5.2.4 Bump (^) + + ^(a b) -> ^(a b) + ^(a) -> a + 1 + +5.2.5 Same (=) + + =(a a) -> 0 + =(a b) -> 1 + =(a) -> =(a) + +5.2.6 Snip (/) + + /(1 a) -> a + /(2 a b) -> a + /(3 a b) -> b + /((a + a) b) -> /(2 /(a b)) + /((a + a + 1) b) -> /(3 /(a b)) + /(a) -> /(a) diff --git a/doc/spec/nock/13.txt b/doc/spec/nock/13.txt new file mode 100644 index 000000000..2295e5ead --- /dev/null +++ b/doc/spec/nock/13.txt @@ -0,0 +1,71 @@ +Author: Curtis Yarvin (curtis.yarvin@gmail.com) +Date: 3/8/2008 +Version: 0.13 + +1. Manifest + + This file defines one Turing-complete function, "nock." + + nock is in the public domain. So far as I know, it is + neither patentable nor patented. Use it at your own risk. + +2. Data + + Both the domain and range of nock are "nouns." + + A "noun" is either an "atom" or a "cell." An "atom" is an unsigned + integer of any size. A "cell" is an ordered pair of any two nouns, + the "head" and "tail." + +3. Pseudocode + + nock is defined in a pattern-matching pseudocode. + + Match precedence is top-down. Operators are prefix. Parens + denote cells, and group right: (a b c) is (a (b c)). + +4. Definition + +4.1 Transformations + + *(a 0 b c) => *(*(a b) c) + *(a 0 b) => /(b a) + *(a 1 b) => (b) + *(a 2 b) => **(a b) + *(a 3 b) => &*(a b) + *(a 4 b) => ^*(a b) + *(a 5 b) => =*(a b) + *(a 6 b c d) => *(a 2 (0 1) 2 (1 c d) (1 0) 2 (1 2 3) (1 0) 4 4 b) + *(a b c) => (*(a b) *(a c)) + *(a) => *(a) + +4.2 Operators + +4.2.1 Goto (*) + + *(a) -> nock(a) + +4.2.2 Deep (&) + + &(a b) -> 0 + &(a) -> 1 + +4.2.3 Bump (^) + + ^(a b) -> ^(a b) + ^(a) -> a + 1 + +4.2.4 Same (=) + + =(a a) -> 0 + =(a b) -> 1 + =(a) -> =(a) + +4.2.5 Snip (/) + + /(1 a) -> a + /(2 a b) -> a + /(3 a b) -> b + /((a + a) b) -> /(2 /(a b)) + /((a + a + 1) b) -> /(3 /(a b)) + /(a) -> /(a) diff --git a/doc/spec/nock/6.txt b/doc/spec/nock/6.txt new file mode 100644 index 000000000..1dbd59958 --- /dev/null +++ b/doc/spec/nock/6.txt @@ -0,0 +1,42 @@ +1 Structures + + A noun is an atom or a cell. An atom is any natural number. + A cell is an ordered pair of nouns. + +2 Reductions + + nock(a) *a + [a b c] [a [b c]] + + ?[a b] 0 + ?a 1 + +a 1 + a + =[a a] 0 + =[a b] 1 + + /[1 a] a + /[2 a b] a + /[3 a b] b + /[(a + a) b] /[2 /[a b]] + /[(a + a + 1) b] /[3 /[a b]] + + *[a [b c] d] [*[a b c] *[a d]] + + *[a 0 b] /[b a] + *[a 1 b] b + *[a 2 b c] *[*[a b] *[a c]] + *[a 3 b] ?*[a b] + *[a 4 b] +*[a b] + *[a 5 b] =*[a b] + + *[a 6 b c d] *[a 2 [0 1] 2 [1 c d] [1 0] 2 [1 2 3] [1 0] 4 4 b] + *[a 7 b c] *[a 2 b 1 c] + *[a 8 b c] *[a 7 [[0 1] b] c] + *[a 9 b c] *[a 7 c 0 b] + *[a 10 b c] *[a c] + *[a 10 [b c] d] *[a 8 c 7 [0 2] d] + + +[a b] +[a b] + =a =a + /a /a + *a *a diff --git a/doc/spec/nock/7.txt b/doc/spec/nock/7.txt new file mode 100644 index 000000000..bd3e29508 --- /dev/null +++ b/doc/spec/nock/7.txt @@ -0,0 +1,42 @@ +1 Structures + + A noun is an atom or a cell. An atom is any natural number. + A cell is any ordered pair of nouns. + +2 Pseudocode + + [a b c] [a [b c]] + nock(a) *a + + ?[a b] 0 + ?a 1 + ^a 1 + a + =[a a] 0 + =[a b] 1 + + /[1 a] a + /[2 a b] a + /[3 a b] b + /[(a + a) b] /[2 /[a b]] + /[(a + a + 1) b] /[3 /[a b]] + + *[a [b c] d] [*[a b c] *[a d]] + + *[a 0 b] /[b a] + *[a 1 b] b + *[a 2 b c] *[*[a b] *[a c]] + *[a 3 b] ?*[a b] + *[a 4 b] ^*[a b] + *[a 5 b] =*[a b] + + *[a 6 b c d] *[a 2 [0 1] 2 [1 c d] [1 0] 2 [1 2 3] [1 0] 4 4 b] + *[a 7 b c] *[a 2 b 1 c] + *[a 8 b c] *[a 7 [[7 [0 1] b] 0 1] c] + *[a 9 b c] *[a 7 c 0 b] + *[a 10 b c] *[a c] + *[a 10 [b c] d] *[a 8 c 7 [0 3] d] + + ^[a b] ^[a b] + =a =a + /a /a + *a *a diff --git a/doc/spec/nock/8.txt b/doc/spec/nock/8.txt new file mode 100644 index 000000000..2981d6c5f --- /dev/null +++ b/doc/spec/nock/8.txt @@ -0,0 +1,45 @@ +1 Structures + + A noun is an atom or a cell. An atom is any unsigned integer. + A cell is an ordered pair of nouns. + +2 Pseudocode + + [a b c] is [a [b c]]; *a is nock(a). Reductions match top-down. + +3 Reductions + + ?[a b] 0 + ?a 1 + ^a (a + 1) + =[a a] 0 + =[a b] 1 + + /[1 a] a + /[2 a b] a + /[3 a b] b + /[(a + a) b] /[2 /[a b]] + /[(a + a + 1) b] /[3 /[a b]] + + *[a [b c] d] [*[a b c] *[a d]] + *[a 0 b] /[b a] + *[a 1 b] b + *[a 2 b c] *[*[a b] *[a c]] + *[a 3 b] ?*[a b] + *[a 4 b] ^*[a b] + *[a 5 b] =*[a b] + + *[a 6 b c d] *[a 2 [0 1] 2 [1 c d] [1 0] 2 [1 2 3] [1 0] 4 4 b] + *[a 7 b c] *[a 2 b 1 c] + *[a 8 b c] *[a 7 [7 b [0 1]] c] + *[a 9 b c] *[a 8 b 2 [[7 [0 3] d] [0 5]] 0 5] + *[a 10 b c] *[a 8 b 8 [7 [0 3] c] 0 2] + *[a 11 b c] *[a 8 b 7 [0 3] c] + *[a 12 b c] *[a [1 0] 1 c] + + ^[a b] ^[a b] + =a =a + /a /a + *a *a + + diff --git a/doc/spec/nock/9.txt b/doc/spec/nock/9.txt new file mode 100644 index 000000000..b6aabad76 --- /dev/null +++ b/doc/spec/nock/9.txt @@ -0,0 +1,43 @@ +1 Context + + This spec defines one function, Nock. + +2 Structures + + A noun is an atom or a cell. An atom is any unsigned integer. + A cell is an ordered pair of any two nouns. + +3 Pseudocode + + Brackets enclose cells. [a b c] is [a [b c]]. + + *a is Nock(a). Reductions match top-down. + +4 Reductions + + ?[a b] => 0 + ?a => 1 + + ^[a b] => ^[a b] + ^a => (a + 1) + + =[a a] => 0 + =[a b] => 1 + =a => =a + + /[1 a] => a + /[2 a b] => a + /[3 a b] => b + /[(a + a) b] => /[2 /[a b]] + /[(a + a + 1) b] => /[3 /[a b]] + /a => /a + + *[a 0 b] => /[b a] + *[a 1 b] => b + *[a 2 b c d] => *[a 3 [0 1] 3 [1 c d] [1 0] 3 [1 2 3] [1 0] 5 5 b] + *[a 3 b] => **[a b] + *[a 4 b] => ?*[a b] + *[a 5 b] => ^*[a b] + *[a 6 b] => =*[a b] + *[a [b c] d] => [*[a b c] *[a d]] + *a => *a diff --git a/lerna.json b/lerna.json deleted file mode 100644 index abd412c3f..000000000 --- a/lerna.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "packages": [ - "pkg/npm/*", - "pkg/btc-wallet", - "pkg/interface", - "pkg/grid" - ], - "version": "independent" -} diff --git a/nix/default.nix b/nix/default.nix index 7819ffbb3..627b3eba7 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -25,6 +25,7 @@ let (import ./overlays/native.nix) # Specific overrides guarded by the host platform. (import ./overlays/musl.nix) + (import ./overlays/arm.nix) ]; }; diff --git a/nix/lib/boot-fake-ship.nix b/nix/lib/boot-fake-ship.nix index 2b955c85f..d67f16f58 100644 --- a/nix/lib/boot-fake-ship.nix +++ b/nix/lib/boot-fake-ship.nix @@ -1,6 +1,6 @@ { lib, stdenvNoCC, curl }: -{ urbit, arvo ? null, pill, ship, arguments ? [ "-l" ] }: +{ arvo ? null, pill, ship, arguments ? [ "-l" ] }: let @@ -10,14 +10,14 @@ let in stdenvNoCC.mkDerivation { name = "fake-${ship}"; - buildInputs = [ curl urbit ]; + buildInputs = [ curl ]; phases = [ "buildPhase" "installPhase " ]; buildPhase = '' set -xeuo pipefail - urbit ${lib.concatStringsSep " " args} ./pier + ${arvo}/vere.jam ${lib.concatStringsSep " " args} -c ./pier cleanup () { if [ -f ./pier/.vere.lock ]; then diff --git a/nix/lib/test-fake-ship.nix b/nix/lib/test-fake-ship.nix index f9fc7e2fa..a7cb31e33 100644 --- a/nix/lib/test-fake-ship.nix +++ b/nix/lib/test-fake-ship.nix @@ -1,16 +1,15 @@ { lib, stdenvNoCC, curl, python3, bootFakeShip }: -{ urbit, arvo ? null, pill, ship ? "bus", arguments ? urbit.meta.arguments -, doCheck ? true }: +{ arvo ? null, pill, ship ? "bus", doCheck ? true }: stdenvNoCC.mkDerivation { name = "test-${ship}"; - src = bootFakeShip { inherit urbit arvo pill ship; }; + src = bootFakeShip { inherit arvo pill ship; }; phases = [ "unpackPhase" "buildPhase" "checkPhase" ]; - buildInputs = [ curl python3 urbit ]; + buildInputs = [ curl python3 ]; unpackPhase = '' cp -R $src ./pier @@ -20,7 +19,7 @@ stdenvNoCC.mkDerivation { buildPhase = '' set -x - urbit ${lib.concatStringsSep " " arguments} -d ./pier 2> urbit-output + ${arvo}/vere.jam -d ./pier 2> urbit-output # Sledge Hammer! # See: https://github.com/travis-ci/travis-ci/issues/4704#issuecomment-348435959 diff --git a/nix/overlays/arm.nix b/nix/overlays/arm.nix index 62bb1eb0d..be0112296 100644 --- a/nix/overlays/arm.nix +++ b/nix/overlays/arm.nix @@ -3,10 +3,11 @@ final: prev: let isAarch64 = prev.stdenv.hostPlatform.isAarch64; + isDarwin = prev.stdenv.isDarwin; -in prev.lib.optionalAttrs isAarch64 { +in prev.lib.optionalAttrs (isAarch64 && !isDarwin) { libsigsegv = prev.libsigsegv.overrideAttrs (attrs: { - preConfigure = (old.preConfigure or "") + '' + preConfigure = (prev.preConfigure or "") + '' sed -i 's/^CFG_FAULT=$/CFG_FAULT=fault-linux-arm.h/' configure ''; }); diff --git a/nix/overlays/native.nix b/nix/overlays/native.nix index 76dee9c46..4f34fe136 100644 --- a/nix/overlays/native.nix +++ b/nix/overlays/native.nix @@ -27,6 +27,10 @@ in { brotliSupport = false; }; + # lies, all lies + openssl-static-osx = prev.openssl; + zlib-static-osx = prev.zlib; + lmdb = prev.lmdb.overrideAttrs (attrs: { patches = optionalList attrs.patches ++ prev.lib.optional prev.stdenv.isDarwin [ diff --git a/nix/overlays/static.nix b/nix/overlays/static.nix index 64cf0a16e..1d364a598 100644 --- a/nix/overlays/static.nix +++ b/nix/overlays/static.nix @@ -16,12 +16,19 @@ let in { gmp = enableStatic prev.gmp; - curlUrbit = enableStatic prev.curlUrbit; + curlUrbit = enableStatic (prev.curlUrbit.override { openssl = final.openssl-static-osx; zlib = final.zlib-static-osx; }); libuv = enableStatic prev.libuv; libffi = enableStatic prev.libffi; + openssl-static-osx = prev.openssl.override { + static = true; + withPerl = false; + }; + + zlib-static-osx = if final.stdenv.isDarwin then prev.zlib.static else prev.zlib; + secp256k1 = enableStatic prev.secp256k1; lmdb = prev.lmdb.overrideAttrs (old: diff --git a/nix/pkgs/arvo/default.nix b/nix/pkgs/arvo/default.nix index 9d9d10806..502d2847a 100644 --- a/nix/pkgs/arvo/default.nix +++ b/nix/pkgs/arvo/default.nix @@ -5,16 +5,16 @@ stdenvNoCC.mkDerivation { src = marsSources; - outputs = [ "out" "ropsten" ]; + outputs = [ "out" "goerli" ]; - phases = [ "mainnetPhase" "ropstenPhase" ]; + phases = [ "mainnetPhase" "goerliPhase" ]; mainnetPhase = '' ln -s ${marsSources.out}/arvo $out ''; - ropstenPhase = '' - ln -s ${marsSources.ropsten}/arvo $ropsten + goerliPhase = '' + ln -s ${marsSources.goerli}/arvo $goerli ''; preferLocalBuild = true; diff --git a/nix/pkgs/marsSources/default.nix b/nix/pkgs/marsSources/default.nix index 80bbf303b..5811e19e5 100644 --- a/nix/pkgs/marsSources/default.nix +++ b/nix/pkgs/marsSources/default.nix @@ -6,16 +6,16 @@ stdenvNoCC.mkDerivation { buildInputs = [ bc ]; - outputs = [ "out" "ropsten" ]; + outputs = [ "out" "goerli" ]; - phases = [ "mainnetPhase" "ropstenPhase" ]; + phases = [ "mainnetPhase" "goerliPhase" ]; mainnetPhase = '' cp -r $src $out chmod -R u+w $out ''; - ropstenPhase = '' + goerliPhase = '' cp -r $src tmp chmod -R u+w tmp @@ -23,9 +23,9 @@ stdenvNoCC.mkDerivation { AMES=tmp/arvo/sys/vane/ames.hoon ACME=tmp/arvo/app/acme.hoon - # Replace the mainnet azimuth contract with the ropsten contract + # Replace the mainnet azimuth contract with the goerli contract sed --in-place \ - 's/\(\+\+ contracts \)mainnet\-contracts/\1ropsten-contracts/' \ + 's/\(\+\+ contracts \)mainnet\-contracts/\1goerli-contracts/' \ $ZUSE # Increment the %ames protocol version @@ -38,8 +38,8 @@ stdenvNoCC.mkDerivation { 's_https://acme-v02.api.letsencrypt.org/directory_https://acme-staging-v02.api.letsencrypt.org/directory_' \ $ACME - cp -r tmp $ropsten - chmod -R u+w $ropsten + cp -r tmp $goerli + chmod -R u+w $goerli ''; preferLocalBuild = true; diff --git a/nix/pkgs/pill/brass.nix b/nix/pkgs/pill/brass.nix index 36b18dd9a..6aa1c5dcf 100644 --- a/nix/pkgs/pill/brass.nix +++ b/nix/pkgs/pill/brass.nix @@ -1,5 +1,5 @@ { lib, stdenvNoCC, fetchGitHubLFS, bootFakeShip, solid, urbit, arvo, curl -, withRopsten ? false }: +, withGoerli ? false }: let @@ -9,9 +9,9 @@ in { build = import ./builder.nix { inherit stdenvNoCC urbit curl; - name = "brass" + lib.optionalString withRopsten "-ropsten"; + name = "brass" + lib.optionalString withGoerli "-goerli"; builder = ./brass.sh; - arvo = if withRopsten then arvo.ropsten else arvo; + arvo = if withGoerli then arvo.goerli else arvo; pier = bootFakeShip { inherit urbit; @@ -19,4 +19,4 @@ in { ship = "zod"; }; }; -} // lib.optionalAttrs (!withRopsten) { inherit lfs; } +} // lib.optionalAttrs (!withGoerli) { inherit lfs; } diff --git a/nix/pkgs/pill/ivory.nix b/nix/pkgs/pill/ivory.nix index 9eceef109..b4881909c 100644 --- a/nix/pkgs/pill/ivory.nix +++ b/nix/pkgs/pill/ivory.nix @@ -1,5 +1,5 @@ { lib, stdenvNoCC, fetchGitHubLFS, bootFakeShip, solid, urbit, arvo, curl, xxd -, withRopsten ? false }: +, withGoerli ? false }: let @@ -9,9 +9,9 @@ in { build = import ./builder.nix { inherit stdenvNoCC urbit curl; - name = "ivory" + lib.optionalString withRopsten "-ropsten"; + name = "ivory" + lib.optionalString withGoerli "-goerli"; builder = ./ivory.sh; - arvo = if withRopsten then arvo.ropsten else arvo; + arvo = if withGoerli then arvo.goerli else arvo; pier = bootFakeShip { inherit urbit; @@ -39,4 +39,4 @@ in { preferLocalBuild = true; }; -} // lib.optionalAttrs (!withRopsten) { inherit lfs; } +} // lib.optionalAttrs (!withGoerli) { inherit lfs; } diff --git a/nix/pkgs/urbit/default.nix b/nix/pkgs/urbit/default.nix index 7ded4b5ed..e9da7b305 100644 --- a/nix/pkgs/urbit/default.nix +++ b/nix/pkgs/urbit/default.nix @@ -1,9 +1,11 @@ { lib, stdenv, coreutils, pkgconfig # build/env , cacert, ca-bundle, ivory # codegen -, curlUrbit, ent, gmp, h2o, libsigsegv, libuv, lmdb # libs -, murmur3, openssl, softfloat3, urcrypt, zlib # +, curlUrbit, ent, gmp, h2o, libsigsegv, libuv, lmdb # libs +, murmur3, openssl, openssl-static-osx, softfloat3 # +, urcrypt, zlib, zlib-static-osx # , enableStatic ? stdenv.hostPlatform.isStatic # opts , enableDebug ? false +, verePace ? "" , doCheck ? true , enableParallelBuilding ? true , dontStrip ? true }: @@ -40,10 +42,10 @@ in stdenv.mkDerivation { libuv lmdb murmur3 - openssl + (if stdenv.isDarwin && enableStatic then openssl-static-osx else openssl) softfloat3 urcrypt - zlib + (if stdenv.isDarwin && enableStatic then zlib-static-osx else zlib) ]; # Ensure any `/usr/bin/env bash` shebang is patched. @@ -69,6 +71,7 @@ in stdenv.mkDerivation { MEMORY_DEBUG = enableDebug; CPU_DEBUG = enableDebug; EVENT_TIME_DEBUG = false; + VERE_PACE = if enableStatic then verePace else ""; # See https://github.com/NixOS/nixpkgs/issues/18995 hardeningDisable = lib.optionals enableDebug [ "all" ]; diff --git a/nix/pkgs/urcrypt/default.nix b/nix/pkgs/urcrypt/default.nix index 1726447c9..3aab6e91d 100644 --- a/nix/pkgs/urcrypt/default.nix +++ b/nix/pkgs/urcrypt/default.nix @@ -1,5 +1,5 @@ { stdenv, autoreconfHook, pkgconfig -, libaes_siv, openssl, secp256k1 +, libaes_siv, openssl, openssl-static-osx, secp256k1 , enableStatic ? stdenv.hostPlatform.isStatic }: stdenv.mkDerivation rec { diff --git a/nix/sources-openssl.json b/nix/sources-openssl.json new file mode 100644 index 000000000..7f3f7fa5b --- /dev/null +++ b/nix/sources-openssl.json @@ -0,0 +1,18 @@ +{ + "openssl": { + "branch": "1_1_1n", + "homepage": "https://www.openssl.org/", + "pmnsh": { + "include": "build/include", + "lib": "build", + "prepare": "./config --prefix=`mkdir -p build && readlink -f ./build` --libdir=. no-shared no-tests", + "make": "install_dev" + }, + "owner": "openssl", + "repo": "openssl", + "rev": "OpenSSL_1_1_1n", + "type": "tarball", + "url": "https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_1n.tar.gz", + "url_template": "https://github.com///archive/refs/tags/.tar.gz" + } +} diff --git a/nix/sources-pmnsh.json b/nix/sources-pmnsh.json index 1f60716c1..ee7d64d2e 100644 --- a/nix/sources-pmnsh.json +++ b/nix/sources-pmnsh.json @@ -4,6 +4,11 @@ "description": "A command line tool and library for transferring data with URL syntax", "homepage": "http://curl.se/", "pmnsh": { + "compat": { + "openbsd": { + "prepare": "autoreconf -vfi && ./configure --disable-shared --disable-ldap --disable-rtsp --without-brotli --without-libidn2 --without-libpsl --without-nghttp2 --with-openssl=`readlink -f ../openssl/build`" + } + }, "include": "include", "lib": "lib/.libs", "prepare": "autoreconf -vfi && ./configure --disable-shared --disable-ldap --disable-rtsp --without-brotli --without-libidn2 --without-libpsl --without-nghttp2 --with-openssl", @@ -76,6 +81,13 @@ }, "urcrypt": { "pmnsh": { + "compat": { + "openbsd": { + "make": "install prefix=`readlink -f .` exec_prefix=`readlink -f .`", + "include": "include", + "lib": "lib" + } + }, "prepare": "./autogen.sh && ./configure --disable-shared PKG_CONFIG_PATH=../secp256k1 CFLAGS=\"-I../secp256k1/include -I../libaes_siv\" LDFLAGS=-L../libaes_siv", "make": "install" } diff --git a/nix/sources.json b/nix/sources.json index afa2172be..86a17da1e 100644 --- a/nix/sources.json +++ b/nix/sources.json @@ -8,6 +8,9 @@ "compat": { "mingw": { "prepare": "cmake -G\"MSYS Makefiles\" -DCMAKE_INSTALL_PREFIX=. ." + }, + "openbsd": { + "prepare": "cmake -DOPENSSL_ROOT_DIR=`readlink -f ../openssl/build` ." } }, "include": "include", @@ -35,6 +38,10 @@ "mingw": { "make": "aes_siv_static", "prepare": "cmake -G\"MSYS Makefiles\" -DDISABLE_DOCS:BOOL=ON ." + }, + "openbsd": { + "make": "aes_siv_static", + "prepare": "cmake -DDISABLE_DOCS:BOOL=ON -DOPENSSL_ROOT_DIR=`readlink -f ../openssl/build` ." } } }, @@ -98,6 +105,10 @@ "mingw": { "lib": "build/Win64-MinGW-w64", "make": "-C build/Win64-MinGW-w64 libsoftfloat3.a" + }, + "openbsd": { + "lib": "build/template-FAST_INT64", + "make": "-C build/template-FAST_INT64 libsoftfloat3.a" } }, "include": "source/include" diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 6ddca56b4..000000000 --- a/package-lock.json +++ /dev/null @@ -1,15716 +0,0 @@ -{ - "name": "root", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "root", - "devDependencies": { - "eslint": "^7.29.0", - "husky": "^6.0.0", - "lerna": "^4.0.0", - "lint-staged": "^11.1.2", - "prettier": "^2.3.2" - }, - "engines": { - "node": "16.14.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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==", - "dev": true, - "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/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=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@lerna/add": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-4.0.0.tgz", - "integrity": "sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng==", - "dev": true, - "dependencies": { - "@lerna/bootstrap": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "npm-package-arg": "^8.1.0", - "p-map": "^4.0.0", - "pacote": "^11.2.6", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/bootstrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-4.0.0.tgz", - "integrity": "sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw==", - "dev": true, - "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/has-npm-version": "4.0.0", - "@lerna/npm-install": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/rimraf-dir": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/symlink-binary": "4.0.0", - "@lerna/symlink-dependencies": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "read-package-tree": "^5.3.1", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/changed": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-4.0.0.tgz", - "integrity": "sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ==", - "dev": true, - "dependencies": { - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/listable": "4.0.0", - "@lerna/output": "4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/check-working-tree": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz", - "integrity": "sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q==", - "dev": true, - "dependencies": { - "@lerna/collect-uncommitted": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "@lerna/validation-error": "4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/child-process": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-4.0.0.tgz", - "integrity": "sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/clean": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-4.0.0.tgz", - "integrity": "sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA==", - "dev": true, - "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/rimraf-dir": "4.0.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/cli": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-4.0.0.tgz", - "integrity": "sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA==", - "dev": true, - "dependencies": { - "@lerna/global-options": "4.0.0", - "dedent": "^0.7.0", - "npmlog": "^4.1.2", - "yargs": "^16.2.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/collect-uncommitted": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz", - "integrity": "sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "chalk": "^4.1.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/collect-updates": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-4.0.0.tgz", - "integrity": "sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/command": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-4.0.0.tgz", - "integrity": "sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/project": "4.0.0", - "@lerna/validation-error": "4.0.0", - "@lerna/write-log-file": "4.0.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/conventional-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz", - "integrity": "sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw==", - "dev": true, - "dependencies": { - "@lerna/validation-error": "4.0.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.2", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "lodash.template": "^4.5.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/conventional-commits/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-4.0.0.tgz", - "integrity": "sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^2.0.2", - "npm-package-arg": "^8.1.0", - "p-reduce": "^2.1.0", - "pacote": "^11.2.6", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/create-symlink": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-4.0.0.tgz", - "integrity": "sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig==", - "dev": true, - "dependencies": { - "cmd-shim": "^4.1.0", - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/create/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/describe-ref": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-4.0.0.tgz", - "integrity": "sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-4.0.0.tgz", - "integrity": "sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/validation-error": "4.0.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/exec": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-4.0.0.tgz", - "integrity": "sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/profiler": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "p-map": "^4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/filter-options": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-4.0.0.tgz", - "integrity": "sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw==", - "dev": true, - "dependencies": { - "@lerna/collect-updates": "4.0.0", - "@lerna/filter-packages": "4.0.0", - "dedent": "^0.7.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/filter-packages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-4.0.0.tgz", - "integrity": "sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA==", - "dev": true, - "dependencies": { - "@lerna/validation-error": "4.0.0", - "multimatch": "^5.0.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/get-npm-exec-opts": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz", - "integrity": "sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ==", - "dev": true, - "dependencies": { - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/get-packed": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-4.0.0.tgz", - "integrity": "sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/get-packed/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/get-packed/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@lerna/get-packed/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/get-packed/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@lerna/get-packed/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/get-packed/node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/github-client": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-4.0.0.tgz", - "integrity": "sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^18.1.0", - "git-url-parse": "^11.4.4", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/gitlab-client": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz", - "integrity": "sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "npmlog": "^4.1.2", - "whatwg-url": "^8.4.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/global-options": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-4.0.0.tgz", - "integrity": "sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ==", - "dev": true, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/has-npm-version": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz", - "integrity": "sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-4.0.0.tgz", - "integrity": "sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/info": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-4.0.0.tgz", - "integrity": "sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q==", - "dev": true, - "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/output": "4.0.0", - "envinfo": "^7.7.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/init": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-4.0.0.tgz", - "integrity": "sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/link": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-4.0.0.tgz", - "integrity": "sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w==", - "dev": true, - "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/symlink-dependencies": "4.0.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/list": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-4.0.0.tgz", - "integrity": "sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg==", - "dev": true, - "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/listable": "4.0.0", - "@lerna/output": "4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/listable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-4.0.0.tgz", - "integrity": "sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ==", - "dev": true, - "dependencies": { - "@lerna/query-graph": "4.0.0", - "chalk": "^4.1.0", - "columnify": "^1.5.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/log-packed": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-4.0.0.tgz", - "integrity": "sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ==", - "dev": true, - "dependencies": { - "byte-size": "^7.0.0", - "columnify": "^1.5.4", - "has-unicode": "^2.0.1", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/npm-conf": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-4.0.0.tgz", - "integrity": "sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw==", - "dev": true, - "dependencies": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/npm-conf/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/npm-dist-tag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz", - "integrity": "sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw==", - "dev": true, - "dependencies": { - "@lerna/otplease": "4.0.0", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/npm-dist-tag/node_modules/make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/npm-dist-tag/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/npm-dist-tag/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@lerna/npm-dist-tag/node_modules/npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "dependencies": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/npm-install": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-4.0.0.tgz", - "integrity": "sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/get-npm-exec-opts": "4.0.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/npm-publish": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-4.0.0.tgz", - "integrity": "sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w==", - "dev": true, - "dependencies": { - "@lerna/otplease": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^4.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "pify": "^5.0.0", - "read-package-json": "^3.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/npm-publish/node_modules/normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/npm-publish/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/npm-publish/node_modules/read-package-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", - "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", - "dev": true, - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/npm-run-script": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz", - "integrity": "sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/get-npm-exec-opts": "4.0.0", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/otplease": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-4.0.0.tgz", - "integrity": "sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw==", - "dev": true, - "dependencies": { - "@lerna/prompt": "4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/output": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-4.0.0.tgz", - "integrity": "sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w==", - "dev": true, - "dependencies": { - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/pack-directory": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-4.0.0.tgz", - "integrity": "sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ==", - "dev": true, - "dependencies": { - "@lerna/get-packed": "4.0.0", - "@lerna/package": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "npm-packlist": "^2.1.4", - "npmlog": "^4.1.2", - "tar": "^6.1.0", - "temp-write": "^4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/pack-directory/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/pack-directory/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@lerna/pack-directory/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/pack-directory/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@lerna/pack-directory/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/pack-directory/node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/package": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-4.0.0.tgz", - "integrity": "sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q==", - "dev": true, - "dependencies": { - "load-json-file": "^6.2.0", - "npm-package-arg": "^8.1.0", - "write-pkg": "^4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/package-graph": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-4.0.0.tgz", - "integrity": "sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw==", - "dev": true, - "dependencies": { - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/validation-error": "4.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/prerelease-id-from-version": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz", - "integrity": "sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg==", - "dev": true, - "dependencies": { - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/profiler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-4.0.0.tgz", - "integrity": "sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2", - "upath": "^2.0.1" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/project": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-4.0.0.tgz", - "integrity": "sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg==", - "dev": true, - "dependencies": { - "@lerna/package": "4.0.0", - "@lerna/validation-error": "4.0.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/project/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/@lerna/prompt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-4.0.0.tgz", - "integrity": "sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ==", - "dev": true, - "dependencies": { - "inquirer": "^7.3.3", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/publish": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-4.0.0.tgz", - "integrity": "sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg==", - "dev": true, - "dependencies": { - "@lerna/check-working-tree": "4.0.0", - "@lerna/child-process": "4.0.0", - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "@lerna/log-packed": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/npm-dist-tag": "4.0.0", - "@lerna/npm-publish": "4.0.0", - "@lerna/otplease": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/pack-directory": "4.0.0", - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "@lerna/version": "4.0.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^4.0.1", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^11.2.6", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/publish/node_modules/make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@lerna/publish/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/publish/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@lerna/publish/node_modules/npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "dependencies": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@lerna/pulse-till-done": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz", - "integrity": "sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg==", - "dev": true, - "dependencies": { - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/query-graph": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-4.0.0.tgz", - "integrity": "sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg==", - "dev": true, - "dependencies": { - "@lerna/package-graph": "4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/resolve-symlink": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz", - "integrity": "sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2", - "read-cmd-shim": "^2.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/rimraf-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz", - "integrity": "sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg==", - "dev": true, - "dependencies": { - "@lerna/child-process": "4.0.0", - "npmlog": "^4.1.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/run": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-4.0.0.tgz", - "integrity": "sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ==", - "dev": true, - "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/npm-run-script": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/profiler": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/timer": "4.0.0", - "@lerna/validation-error": "4.0.0", - "p-map": "^4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/run-lifecycle": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz", - "integrity": "sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ==", - "dev": true, - "dependencies": { - "@lerna/npm-conf": "4.0.0", - "npm-lifecycle": "^3.1.5", - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/run-topologically": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-4.0.0.tgz", - "integrity": "sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA==", - "dev": true, - "dependencies": { - "@lerna/query-graph": "4.0.0", - "p-queue": "^6.6.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/symlink-binary": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz", - "integrity": "sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA==", - "dev": true, - "dependencies": { - "@lerna/create-symlink": "4.0.0", - "@lerna/package": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/symlink-dependencies": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz", - "integrity": "sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw==", - "dev": true, - "dependencies": { - "@lerna/create-symlink": "4.0.0", - "@lerna/resolve-symlink": "4.0.0", - "@lerna/symlink-binary": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/timer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-4.0.0.tgz", - "integrity": "sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg==", - "dev": true, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/validation-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-4.0.0.tgz", - "integrity": "sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw==", - "dev": true, - "dependencies": { - "npmlog": "^4.1.2" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/version": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-4.0.0.tgz", - "integrity": "sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA==", - "dev": true, - "dependencies": { - "@lerna/check-working-tree": "4.0.0", - "@lerna/child-process": "4.0.0", - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/conventional-commits": "4.0.0", - "@lerna/github-client": "4.0.0", - "@lerna/gitlab-client": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "temp-write": "^4.0.0", - "write-json-file": "^4.3.0" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/write-log-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-4.0.0.tgz", - "integrity": "sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg==", - "dev": true, - "dependencies": { - "npmlog": "^4.1.2", - "write-file-atomic": "^3.0.3" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/write-log-file/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/@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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/ci-detect": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", - "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", - "dev": true - }, - "node_modules/@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - } - }, - "node_modules/@npmcli/git/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", - "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", - "dev": true - }, - "node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "dependencies": { - "infer-owner": "^1.0.4" - } - }, - "node_modules/@npmcli/run-script": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", - "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - } - }, - "node_modules/@npmcli/run-script/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/run-script/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/run-script/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@npmcli/run-script/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/run-script/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/run-script/node_modules/node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 10.12.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@npmcli/run-script/node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@octokit/auth-token": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", - "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/core": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", - "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", - "dev": true, - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.4.tgz", - "integrity": "sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==", - "dev": true, - "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-8.2.1.tgz", - "integrity": "sha512-BJz6kWuL3n+y+qM8Pv+UGbSxH6wxKf/SBs5yzGufMHwDefsa+Iq7ZGy1BINMD2z9SkXlIzk1qiu988rMuGXEMg==", - "dev": true - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.14.0.tgz", - "integrity": "sha512-S2uEu2uHeI7Vf+Lvj8tv3O5/5TCAa8GHS0dUQN7gdM7vKA6ZHAbR6HkAVm5yMb1mbedLEbxOuQ+Fa0SQ7tCDLA==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.18.0" - }, - "peerDependencies": { - "@octokit/core": ">=2" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.4.1.tgz", - "integrity": "sha512-Nx0g7I5ayAYghsLJP4Q1Ch2W9jYYM0FlWWWZocUro8rNxVwuZXGfFd7Rcqi9XDWepSXjg1WByiNJnZza2hIOvQ==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.18.1", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/request": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz", - "integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==", - "dev": true, - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/request/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/rest": { - "version": "18.6.7", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.6.7.tgz", - "integrity": "sha512-Kn6WrI2ZvmAztdx+HEaf88RuJn+LK72S8g6OpciE4kbZddAN84fu4fiPGxcEu052WmqKVnA/cnQsbNlrYC6rqQ==", - "dev": true, - "dependencies": { - "@octokit/core": "^3.5.0", - "@octokit/plugin-paginate-rest": "^2.6.2", - "@octokit/plugin-request-log": "^1.0.2", - "@octokit/plugin-rest-endpoint-methods": "5.4.1" - } - }, - "node_modules/@octokit/types": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.18.1.tgz", - "integrity": "sha512-5YsddjO1U+xC8ZYKV8yZYebW55PCc7qiEEeZ+wZRr6qyclynzfyD65KZ5FdtIeP0/cANyFaD7hV69qElf1nMsQ==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^8.2.1" - } - }, - "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/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "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-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", - "dev": true - }, - "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/agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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/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-escapes/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/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "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/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "node_modules/asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", - "dev": true, - "dependencies": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cacache/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cacache/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacache/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cacache/node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "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==", - "dev": true, - "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/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "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/chalk/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/chalk/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/chalk/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/chalk/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/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/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/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/cli-truncate/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/cli-truncate/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/cli-truncate/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "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/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cmd-shim": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", - "dev": true, - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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=", - "dev": true - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "node_modules/columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "dev": true, - "dependencies": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - } - }, - "node_modules/columnify/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/columnify/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/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/compare-func/node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "node_modules/conventional-changelog-angular": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", - "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.3.tgz", - "integrity": "sha512-MwnZjIoMRL3jtPH5GywVNqetGILC7g6RQFvdb8LRU/fA/338JbeWAku3PZ8yQ+mtVRViiISqJlb0sOz0htBZig==", - "dev": true, - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", - "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", - "dev": true, - "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/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/conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", - "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0", - "trim-off-newlines": "^1.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "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/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "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-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - } - }, - "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==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "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==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "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/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "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/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "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/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "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==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/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/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/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/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/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/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "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/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/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/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "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==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", - "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", - "dev": true, - "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-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==", - "dev": true - }, - "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/fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/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=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "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/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==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz", - "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==", - "dev": true - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "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==", - "dev": true, - "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-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "dependencies": { - "minipass": "^2.6.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=", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/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/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/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/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==", - "dev": true, - "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-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==", - "dev": true - }, - "node_modules/get-pkg-repo": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz", - "integrity": "sha512-/FjamZL9cBYllEbReZkxF2IMh80d8TJoC4e3bmLNif8ibHw95aj0N/tzqK0kZz9eU/3w3dL6lF4fnnX/sDdW3A==", - "dev": true, - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "meow": "^7.0.0", - "through2": "^2.0.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/meow": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-pkg-repo/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/get-pkg-repo/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-pkg-repo/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/get-pkg-repo/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/get-pkg-repo/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/get-pkg-repo/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-pkg-repo/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/git-raw-commits": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", - "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", - "dev": true, - "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/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/git-up": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz", - "integrity": "sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==", - "dev": true, - "dependencies": { - "is-ssh": "^1.3.0", - "parse-url": "^5.0.0" - } - }, - "node_modules/git-url-parse": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.5.0.tgz", - "integrity": "sha512-TZYSMDeM37r71Lqg1mbnMlOqlHd7BSij9qN7XwTkRqSAYFMihGLGhfHwgqQob3GUhEneKnV4nskN9rbQw2KGxA==", - "dev": true, - "dependencies": { - "git-up": "^4.0.0" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "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": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "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/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.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==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "node_modules/hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "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/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "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/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "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==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4" - } - }, - "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-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "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/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/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/init-package-json": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.3.tgz", - "integrity": "sha512-tk/gAgbMMxR6fn1MgMaM1HpU1ryAmBWWitnxG5OhuNXeX0cbpbgV5jA4AIpQJVNoyOfOevTtO6WX+rPs+EFqaQ==", - "dev": true, - "dependencies": { - "glob": "^7.1.1", - "npm-package-arg": "^8.1.2", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^3.0.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/read-package-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", - "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", - "dev": true, - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-ssh": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", - "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", - "dev": true, - "dependencies": { - "protocols": "^1.1.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "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==", - "dev": true - }, - "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/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "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==", - "dev": true - }, - "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/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lerna": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-4.0.0.tgz", - "integrity": "sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg==", - "dev": true, - "dependencies": { - "@lerna/add": "4.0.0", - "@lerna/bootstrap": "4.0.0", - "@lerna/changed": "4.0.0", - "@lerna/clean": "4.0.0", - "@lerna/cli": "4.0.0", - "@lerna/create": "4.0.0", - "@lerna/diff": "4.0.0", - "@lerna/exec": "4.0.0", - "@lerna/import": "4.0.0", - "@lerna/info": "4.0.0", - "@lerna/init": "4.0.0", - "@lerna/link": "4.0.0", - "@lerna/list": "4.0.0", - "@lerna/publish": "4.0.0", - "@lerna/run": "4.0.0", - "@lerna/version": "4.0.0", - "import-local": "^3.0.2", - "npmlog": "^4.1.2" - }, - "bin": { - "lerna": "cli.js" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "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/libnpmaccess": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", - "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", - "dev": true, - "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/libnpmaccess/node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/libnpmaccess/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/libnpmpublish": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", - "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", - "dev": true, - "dependencies": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/libnpmpublish/node_modules/normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/lint-staged": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.2.tgz", - "integrity": "sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/listr2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.10.0.tgz", - "integrity": "sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - } - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", - "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.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/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/log-update/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/log-update/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/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/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/make-fetch-happen": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.3.tgz", - "integrity": "sha512-uZ/9Cf2vKqsSWZyXhZ9wHHyckBrkntgbnqV68Bfe8zZenlf7D6yuGMXvHZQ+jSnzPkjosuNP1HGasj1J4h8OlQ==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/map-obj": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", - "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/meow/node_modules/read-pkg/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/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dev": true, - "dependencies": { - "mime-db": "1.48.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/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-fetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-fetch/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "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/mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-infer-owner/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-infer-owner/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true - }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "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/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-gyp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", - "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/node-gyp/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/node-gyp/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/normalize-package-data/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/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-lifecycle": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", - "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", - "dev": true, - "dependencies": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - } - }, - "node_modules/npm-lifecycle/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "node_modules/npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-registry-fetch/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "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/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "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=", - "dev": true, - "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-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/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "dependencies": { - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", - "dev": true, - "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pacote/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pacote/node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/pacote/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pacote/node_modules/tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "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-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-path": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", - "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", - "dev": true, - "dependencies": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0", - "qs": "^6.9.4", - "query-string": "^6.13.8" - } - }, - "node_modules/parse-path/node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/parse-url": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.7.tgz", - "integrity": "sha512-CgbjyWT6aOh2oNSUS0cioYQsGysj9hQ2IdbOfeNwq5KOaKM7dOw/yTupiI0cnJhaDHJEIGybPkQz7LF9WNIhyw==", - "dev": true, - "dependencies": { - "is-ssh": "^1.3.0", - "normalize-url": "4.5.1", - "parse-path": "^4.0.0", - "protocols": "^1.4.0" - } - }, - "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==", - "dev": true, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "dependencies": { - "semver-compare": "^1.0.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.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "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/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", - "dev": true, - "dependencies": { - "read": "1" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "node_modules/protocols": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", - "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", - "dev": true - }, - "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/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "dev": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/read-cmd-shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", - "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", - "dev": true - }, - "node_modules/read-package-json": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", - "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", - "dev": true, - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-tree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", - "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", - "dev": true, - "dependencies": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/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/read-pkg-up/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/read-pkg-up/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/read-pkg-up/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/read-pkg-up/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/read-pkg-up/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/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/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/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "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-cwd/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-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/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "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/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "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==", - "dev": true, - "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/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "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==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "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/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "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.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "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/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-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/slice-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/slice-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/slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", - "dev": true - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "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/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ssri/node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stringify-object/node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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-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-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", - "dev": true, - "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/table/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==", - "dev": true - }, - "node_modules/tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/temp-write": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-4.0.0.tgz", - "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/temp-write/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/temp-write/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/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "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/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/through2/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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "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-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "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-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/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "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/uglify-js": { - "version": "3.13.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", - "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/umask": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", - "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", - "dev": true - }, - "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==", - "dev": true, - "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/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/util-promisify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "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.", - "dev": true, - "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/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "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/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==", - "dev": true, - "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/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "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-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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "dependencies": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">=8.3" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/write-json-file/node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-json-file/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-json-file/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/write-json-file/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/write-json-file/node_modules/sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/write-json-file/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/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "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/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "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" - } - } - }, - "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==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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=", - "dev": true - } - } - }, - "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true - }, - "@lerna/add": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-4.0.0.tgz", - "integrity": "sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng==", - "dev": true, - "requires": { - "@lerna/bootstrap": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "npm-package-arg": "^8.1.0", - "p-map": "^4.0.0", - "pacote": "^11.2.6", - "semver": "^7.3.4" - } - }, - "@lerna/bootstrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-4.0.0.tgz", - "integrity": "sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw==", - "dev": true, - "requires": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/has-npm-version": "4.0.0", - "@lerna/npm-install": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/rimraf-dir": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/symlink-binary": "4.0.0", - "@lerna/symlink-dependencies": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "read-package-tree": "^5.3.1", - "semver": "^7.3.4" - } - }, - "@lerna/changed": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-4.0.0.tgz", - "integrity": "sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ==", - "dev": true, - "requires": { - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/listable": "4.0.0", - "@lerna/output": "4.0.0" - } - }, - "@lerna/check-working-tree": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz", - "integrity": "sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q==", - "dev": true, - "requires": { - "@lerna/collect-uncommitted": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "@lerna/validation-error": "4.0.0" - } - }, - "@lerna/child-process": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-4.0.0.tgz", - "integrity": "sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - } - }, - "@lerna/clean": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-4.0.0.tgz", - "integrity": "sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA==", - "dev": true, - "requires": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/rimraf-dir": "4.0.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" - } - }, - "@lerna/cli": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-4.0.0.tgz", - "integrity": "sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA==", - "dev": true, - "requires": { - "@lerna/global-options": "4.0.0", - "dedent": "^0.7.0", - "npmlog": "^4.1.2", - "yargs": "^16.2.0" - } - }, - "@lerna/collect-uncommitted": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz", - "integrity": "sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "chalk": "^4.1.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/collect-updates": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-4.0.0.tgz", - "integrity": "sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "slash": "^3.0.0" - } - }, - "@lerna/command": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-4.0.0.tgz", - "integrity": "sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/project": "4.0.0", - "@lerna/validation-error": "4.0.0", - "@lerna/write-log-file": "4.0.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/conventional-commits": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz", - "integrity": "sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw==", - "dev": true, - "requires": { - "@lerna/validation-error": "4.0.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.2", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "lodash.template": "^4.5.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "pify": "^5.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "@lerna/create": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-4.0.0.tgz", - "integrity": "sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^2.0.2", - "npm-package-arg": "^8.1.0", - "p-reduce": "^2.1.0", - "pacote": "^11.2.6", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" - }, - "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - } - } - }, - "@lerna/create-symlink": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-4.0.0.tgz", - "integrity": "sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig==", - "dev": true, - "requires": { - "cmd-shim": "^4.1.0", - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/describe-ref": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-4.0.0.tgz", - "integrity": "sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-4.0.0.tgz", - "integrity": "sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/validation-error": "4.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/exec": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-4.0.0.tgz", - "integrity": "sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/profiler": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "p-map": "^4.0.0" - } - }, - "@lerna/filter-options": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-4.0.0.tgz", - "integrity": "sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw==", - "dev": true, - "requires": { - "@lerna/collect-updates": "4.0.0", - "@lerna/filter-packages": "4.0.0", - "dedent": "^0.7.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/filter-packages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-4.0.0.tgz", - "integrity": "sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA==", - "dev": true, - "requires": { - "@lerna/validation-error": "4.0.0", - "multimatch": "^5.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/get-npm-exec-opts": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz", - "integrity": "sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/get-packed": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-4.0.0.tgz", - "integrity": "sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - } - } - }, - "@lerna/github-client": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-4.0.0.tgz", - "integrity": "sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^18.1.0", - "git-url-parse": "^11.4.4", - "npmlog": "^4.1.2" - } - }, - "@lerna/gitlab-client": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz", - "integrity": "sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA==", - "dev": true, - "requires": { - "node-fetch": "^2.6.1", - "npmlog": "^4.1.2", - "whatwg-url": "^8.4.0" - } - }, - "@lerna/global-options": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-4.0.0.tgz", - "integrity": "sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ==", - "dev": true - }, - "@lerna/has-npm-version": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz", - "integrity": "sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "semver": "^7.3.4" - } - }, - "@lerna/import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-4.0.0.tgz", - "integrity": "sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" - } - }, - "@lerna/info": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/info/-/info-4.0.0.tgz", - "integrity": "sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q==", - "dev": true, - "requires": { - "@lerna/command": "4.0.0", - "@lerna/output": "4.0.0", - "envinfo": "^7.7.4" - } - }, - "@lerna/init": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-4.0.0.tgz", - "integrity": "sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/link": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-4.0.0.tgz", - "integrity": "sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w==", - "dev": true, - "requires": { - "@lerna/command": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/symlink-dependencies": "4.0.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" - } - }, - "@lerna/list": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-4.0.0.tgz", - "integrity": "sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg==", - "dev": true, - "requires": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/listable": "4.0.0", - "@lerna/output": "4.0.0" - } - }, - "@lerna/listable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-4.0.0.tgz", - "integrity": "sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ==", - "dev": true, - "requires": { - "@lerna/query-graph": "4.0.0", - "chalk": "^4.1.0", - "columnify": "^1.5.4" - } - }, - "@lerna/log-packed": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-4.0.0.tgz", - "integrity": "sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ==", - "dev": true, - "requires": { - "byte-size": "^7.0.0", - "columnify": "^1.5.4", - "has-unicode": "^2.0.1", - "npmlog": "^4.1.2" - } - }, - "@lerna/npm-conf": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-4.0.0.tgz", - "integrity": "sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw==", - "dev": true, - "requires": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - }, - "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "@lerna/npm-dist-tag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz", - "integrity": "sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw==", - "dev": true, - "requires": { - "@lerna/otplease": "4.0.0", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^4.1.2" - }, - "dependencies": { - "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - } - } - }, - "@lerna/npm-install": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-4.0.0.tgz", - "integrity": "sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/get-npm-exec-opts": "4.0.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - } - }, - "@lerna/npm-publish": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-4.0.0.tgz", - "integrity": "sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w==", - "dev": true, - "requires": { - "@lerna/otplease": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^4.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "pify": "^5.0.0", - "read-package-json": "^3.0.0" - }, - "dependencies": { - "normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - }, - "read-package-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", - "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - } - } - }, - "@lerna/npm-run-script": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz", - "integrity": "sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "@lerna/get-npm-exec-opts": "4.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/otplease": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-4.0.0.tgz", - "integrity": "sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw==", - "dev": true, - "requires": { - "@lerna/prompt": "4.0.0" - } - }, - "@lerna/output": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-4.0.0.tgz", - "integrity": "sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/pack-directory": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-4.0.0.tgz", - "integrity": "sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ==", - "dev": true, - "requires": { - "@lerna/get-packed": "4.0.0", - "@lerna/package": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "npm-packlist": "^2.1.4", - "npmlog": "^4.1.2", - "tar": "^6.1.0", - "temp-write": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - } - } - }, - "@lerna/package": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-4.0.0.tgz", - "integrity": "sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q==", - "dev": true, - "requires": { - "load-json-file": "^6.2.0", - "npm-package-arg": "^8.1.0", - "write-pkg": "^4.0.0" - } - }, - "@lerna/package-graph": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-4.0.0.tgz", - "integrity": "sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw==", - "dev": true, - "requires": { - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/validation-error": "4.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "semver": "^7.3.4" - } - }, - "@lerna/prerelease-id-from-version": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz", - "integrity": "sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg==", - "dev": true, - "requires": { - "semver": "^7.3.4" - } - }, - "@lerna/profiler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/profiler/-/profiler-4.0.0.tgz", - "integrity": "sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2", - "upath": "^2.0.1" - } - }, - "@lerna/project": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-4.0.0.tgz", - "integrity": "sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg==", - "dev": true, - "requires": { - "@lerna/package": "4.0.0", - "@lerna/validation-error": "4.0.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - }, - "dependencies": { - "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 - } - } - }, - "@lerna/prompt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-4.0.0.tgz", - "integrity": "sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ==", - "dev": true, - "requires": { - "inquirer": "^7.3.3", - "npmlog": "^4.1.2" - } - }, - "@lerna/publish": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-4.0.0.tgz", - "integrity": "sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "4.0.0", - "@lerna/child-process": "4.0.0", - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "@lerna/log-packed": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/npm-dist-tag": "4.0.0", - "@lerna/npm-publish": "4.0.0", - "@lerna/otplease": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/pack-directory": "4.0.0", - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "@lerna/version": "4.0.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^4.0.1", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^11.2.6", - "semver": "^7.3.4" - }, - "dependencies": { - "make-fetch-happen": { - "version": "8.0.14", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", - "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "npm-registry-fetch": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", - "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", - "dev": true, - "requires": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - } - } - } - }, - "@lerna/pulse-till-done": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz", - "integrity": "sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/query-graph": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-4.0.0.tgz", - "integrity": "sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg==", - "dev": true, - "requires": { - "@lerna/package-graph": "4.0.0" - } - }, - "@lerna/resolve-symlink": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz", - "integrity": "sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2", - "read-cmd-shim": "^2.0.0" - } - }, - "@lerna/rimraf-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz", - "integrity": "sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg==", - "dev": true, - "requires": { - "@lerna/child-process": "4.0.0", - "npmlog": "^4.1.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - } - }, - "@lerna/run": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-4.0.0.tgz", - "integrity": "sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ==", - "dev": true, - "requires": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/npm-run-script": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/profiler": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/timer": "4.0.0", - "@lerna/validation-error": "4.0.0", - "p-map": "^4.0.0" - } - }, - "@lerna/run-lifecycle": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz", - "integrity": "sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ==", - "dev": true, - "requires": { - "@lerna/npm-conf": "4.0.0", - "npm-lifecycle": "^3.1.5", - "npmlog": "^4.1.2" - } - }, - "@lerna/run-topologically": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-4.0.0.tgz", - "integrity": "sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA==", - "dev": true, - "requires": { - "@lerna/query-graph": "4.0.0", - "p-queue": "^6.6.2" - } - }, - "@lerna/symlink-binary": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz", - "integrity": "sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA==", - "dev": true, - "requires": { - "@lerna/create-symlink": "4.0.0", - "@lerna/package": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - } - }, - "@lerna/symlink-dependencies": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz", - "integrity": "sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw==", - "dev": true, - "requires": { - "@lerna/create-symlink": "4.0.0", - "@lerna/resolve-symlink": "4.0.0", - "@lerna/symlink-binary": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - } - }, - "@lerna/timer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-4.0.0.tgz", - "integrity": "sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg==", - "dev": true - }, - "@lerna/validation-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-4.0.0.tgz", - "integrity": "sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } - }, - "@lerna/version": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-4.0.0.tgz", - "integrity": "sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA==", - "dev": true, - "requires": { - "@lerna/check-working-tree": "4.0.0", - "@lerna/child-process": "4.0.0", - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/conventional-commits": "4.0.0", - "@lerna/github-client": "4.0.0", - "@lerna/gitlab-client": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "temp-write": "^4.0.0", - "write-json-file": "^4.3.0" - } - }, - "@lerna/write-log-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-4.0.0.tgz", - "integrity": "sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg==", - "dev": true, - "requires": { - "npmlog": "^4.1.2", - "write-file-atomic": "^3.0.3" - }, - "dependencies": { - "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" - } - } - } - }, - "@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==", - "dev": true, - "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==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/ci-detect": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", - "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==", - "dev": true - }, - "@npmcli/git": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.1.0.tgz", - "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", - "dev": true, - "requires": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@npmcli/installed-package-contents": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", - "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", - "dev": true, - "requires": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "@npmcli/node-gyp": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-1.0.2.tgz", - "integrity": "sha512-yrJUe6reVMpktcvagumoqD9r08fH1iRo01gn1u0zoCApa9lnZGEigVKUd2hzsCId4gdtkZZIVscLhNxMECKgRg==", - "dev": true - }, - "@npmcli/promise-spawn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", - "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", - "dev": true, - "requires": { - "infer-owner": "^1.0.4" - } - }, - "@npmcli/run-script": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-1.8.5.tgz", - "integrity": "sha512-NQspusBCpTjNwNRFMtz2C5MxoxyzlbuJ4YEhxAKrIonTiirKDtatsZictx9RgamQIx6+QuHMNmPl0wQdoESs9A==", - "dev": true, - "requires": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "infer-owner": "^1.0.4", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "node-gyp": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", - "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - } - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - } - } - }, - "@octokit/auth-token": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", - "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.5.1.tgz", - "integrity": "sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw==", - "dev": true, - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } - } - }, - "@octokit/graphql": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.4.tgz", - "integrity": "sha512-SWTdXsVheRmlotWNjKzPOb6Js6tjSqA2a8z9+glDJng0Aqjzti8MEWOtuT8ZSu6wHnci7LZNuarE87+WJBG4vg==", - "dev": true, - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-8.2.1.tgz", - "integrity": "sha512-BJz6kWuL3n+y+qM8Pv+UGbSxH6wxKf/SBs5yzGufMHwDefsa+Iq7ZGy1BINMD2z9SkXlIzk1qiu988rMuGXEMg==", - "dev": true - }, - "@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.14.0.tgz", - "integrity": "sha512-S2uEu2uHeI7Vf+Lvj8tv3O5/5TCAa8GHS0dUQN7gdM7vKA6ZHAbR6HkAVm5yMb1mbedLEbxOuQ+Fa0SQ7tCDLA==", - "dev": true, - "requires": { - "@octokit/types": "^6.18.0" - } - }, - "@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "requires": {} - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.4.1.tgz", - "integrity": "sha512-Nx0g7I5ayAYghsLJP4Q1Ch2W9jYYM0FlWWWZocUro8rNxVwuZXGfFd7Rcqi9XDWepSXjg1WByiNJnZza2hIOvQ==", - "dev": true, - "requires": { - "@octokit/types": "^6.18.1", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz", - "integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==", - "dev": true, - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } - } - }, - "@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/rest": { - "version": "18.6.7", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.6.7.tgz", - "integrity": "sha512-Kn6WrI2ZvmAztdx+HEaf88RuJn+LK72S8g6OpciE4kbZddAN84fu4fiPGxcEu052WmqKVnA/cnQsbNlrYC6rqQ==", - "dev": true, - "requires": { - "@octokit/core": "^3.5.0", - "@octokit/plugin-paginate-rest": "^2.6.2", - "@octokit/plugin-request-log": "^1.0.2", - "@octokit/plugin-rest-endpoint-methods": "5.4.1" - } - }, - "@octokit/types": { - "version": "6.18.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.18.1.tgz", - "integrity": "sha512-5YsddjO1U+xC8ZYKV8yZYebW55PCc7qiEEeZ+wZRr6qyclynzfyD65KZ5FdtIeP0/cANyFaD7hV69qElf1nMsQ==", - "dev": true, - "requires": { - "@octokit/openapi-types": "^8.2.1" - } - }, - "@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/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true, - "requires": {} - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", - "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" - } - }, - "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - } - }, - "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" - }, - "dependencies": { - "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 - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "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" - } - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "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==", - "dev": true - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "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==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "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==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "before-after-hook": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", - "dev": true - }, - "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", - "dev": true - }, - "byte-size": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-7.0.1.tgz", - "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", - "dev": true - }, - "cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "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 - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.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" - } - }, - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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" - } - } - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.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" - } - }, - "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 - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "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" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "cmd-shim": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-4.1.0.tgz", - "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", - "dev": true, - "requires": { - "mkdirp-infer-owner": "^2.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "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==", - "dev": true, - "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=", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "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" - } - } - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - }, - "dependencies": { - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "conventional-changelog-angular": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz", - "integrity": "sha512-5GLsbnkR/7A89RyHLvvoExbiGbd9xKdKqDTrArnPbOqBqG/2wIosu0fHwpeIRI8Tl94MhVNBXcLJZl92ZQ5USw==", - "dev": true, - "requires": { - "compare-func": "^2.0.0", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.3.tgz", - "integrity": "sha512-MwnZjIoMRL3jtPH5GywVNqetGILC7g6RQFvdb8LRU/fA/338JbeWAku3PZ8yQ+mtVRViiISqJlb0sOz0htBZig==", - "dev": true, - "requires": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" - }, - "dependencies": { - "normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - } - } - }, - "conventional-changelog-preset-loader": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", - "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz", - "integrity": "sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g==", - "dev": true, - "requires": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.6", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.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==", - "dev": true - } - } - }, - "conventional-commits-filter": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", - "dev": true, - "requires": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz", - "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==", - "dev": true, - "requires": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0", - "trim-off-newlines": "^1.0.0" - } - }, - "conventional-recommended-bump": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", - "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", - "dev": true, - "requires": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "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" - } - }, - "dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", - "dev": true - }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "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" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "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 - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - } - }, - "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" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "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": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - } - }, - "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==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.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 - } - } - }, - "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 - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.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 - } - } - }, - "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" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "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" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "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" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "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==", - "dev": true - }, - "fast-glob": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", - "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", - "dev": true, - "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" - } - }, - "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==", - "dev": true - }, - "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 - }, - "fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - }, - "dependencies": { - "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=", - "dev": true - } - } - }, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "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.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz", - "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "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==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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 - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.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" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.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==", - "dev": true - }, - "get-pkg-repo": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.1.2.tgz", - "integrity": "sha512-/FjamZL9cBYllEbReZkxF2IMh80d8TJoC4e3bmLNif8ibHw95aj0N/tzqK0kZz9eU/3w3dL6lF4fnnX/sDdW3A==", - "dev": true, - "requires": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "meow": "^7.0.0", - "through2": "^2.0.0" - }, - "dependencies": { - "meow": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-7.1.1.tgz", - "integrity": "sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^2.5.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.13.1", - "yargs-parser": "^18.1.3" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "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 - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-raw-commits": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz", - "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==", - "dev": true, - "requires": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "git-semver-tags": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", - "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", - "dev": true, - "requires": { - "meow": "^8.0.0", - "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==", - "dev": true - } - } - }, - "git-up": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.2.tgz", - "integrity": "sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "parse-url": "^5.0.0" - } - }, - "git-url-parse": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.5.0.tgz", - "integrity": "sha512-TZYSMDeM37r71Lqg1mbnMlOqlHd7BSij9qN7XwTkRqSAYFMihGLGhfHwgqQob3GUhEneKnV4nskN9rbQw2KGxA==", - "dev": true, - "requires": { - "git-up": "^4.0.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "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": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "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": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "requires": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4", - "wordwrap": "^1.0.0" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "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==", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "hosted-git-info": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz", - "integrity": "sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "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" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "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 - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", - "dev": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "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 - }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "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" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "init-package-json": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-2.0.3.tgz", - "integrity": "sha512-tk/gAgbMMxR6fn1MgMaM1HpU1ryAmBWWitnxG5OhuNXeX0cbpbgV5jA4AIpQJVNoyOfOevTtO6WX+rPs+EFqaQ==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^8.1.2", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^3.0.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - }, - "dependencies": { - "normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "read-package-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-3.0.1.tgz", - "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - } - } - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "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-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-ssh": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", - "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", - "dev": true, - "requires": { - "protocols": "^1.1.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "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==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "^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-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "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=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "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==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "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==", - "dev": true - }, - "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 - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "lerna": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-4.0.0.tgz", - "integrity": "sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg==", - "dev": true, - "requires": { - "@lerna/add": "4.0.0", - "@lerna/bootstrap": "4.0.0", - "@lerna/changed": "4.0.0", - "@lerna/clean": "4.0.0", - "@lerna/cli": "4.0.0", - "@lerna/create": "4.0.0", - "@lerna/diff": "4.0.0", - "@lerna/exec": "4.0.0", - "@lerna/import": "4.0.0", - "@lerna/info": "4.0.0", - "@lerna/init": "4.0.0", - "@lerna/link": "4.0.0", - "@lerna/list": "4.0.0", - "@lerna/publish": "4.0.0", - "@lerna/run": "4.0.0", - "@lerna/version": "4.0.0", - "import-local": "^3.0.2", - "npmlog": "^4.1.2" - } - }, - "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" - } - }, - "libnpmaccess": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-4.0.3.tgz", - "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "libnpmpublish": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-4.0.2.tgz", - "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", - "dev": true, - "requires": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" - }, - "dependencies": { - "normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - } - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.2.tgz", - "integrity": "sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==", - "dev": true, - "requires": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - } - }, - "listr2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.10.0.tgz", - "integrity": "sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - } - }, - "load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "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==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", - "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.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.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" - } - }, - "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 - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.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" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "make-fetch-happen": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.3.tgz", - "integrity": "sha512-uZ/9Cf2vKqsSWZyXhZ9wHHyckBrkntgbnqV68Bfe8zZenlf7D6yuGMXvHZQ+jSnzPkjosuNP1HGasj1J4h8OlQ==", - "dev": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "map-obj": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.2.1.tgz", - "integrity": "sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==", - "dev": true - }, - "meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dev": true, - "requires": { - "mime-db": "1.48.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 - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "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==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - } - } - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-fetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.3.3.tgz", - "integrity": "sha512-akCrLDWfbdAWkMLBxJEeWTdNsjML+dt5YgOI4gJ53vuO0vrmYQkUPxa6j6V65s9CcePIr2SSWqjT2EcrNseryQ==", - "dev": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - } - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "requires": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "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" - } - }, - "mkdirp-infer-owner": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", - "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - } - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "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==", - "dev": true - }, - "multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "requires": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - } - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "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 - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "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==", - "dev": true - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, - "node-gyp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.1.1.tgz", - "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-install-checks": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-4.0.0.tgz", - "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", - "dev": true, - "requires": { - "semver": "^7.1.1" - } - }, - "npm-lifecycle": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", - "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", - "dev": true, - "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "npm-package-arg": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.5.tgz", - "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" - } - }, - "npm-packlist": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", - "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-pick-manifest": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", - "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", - "dev": true, - "requires": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" - } - }, - "npm-registry-fetch": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", - "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", - "dev": true, - "requires": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - } - } - }, - "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" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "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=", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "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-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 - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.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==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true - }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true - }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - } - }, - "p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.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==", - "dev": true - }, - "p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "requires": { - "p-reduce": "^2.0.0" - } - }, - "pacote": { - "version": "11.3.5", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-11.3.5.tgz", - "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", - "dev": true, - "requires": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", - "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - } - } - }, - "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-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-path": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", - "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0", - "qs": "^6.9.4", - "query-string": "^6.13.8" - }, - "dependencies": { - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "parse-url": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-5.0.7.tgz", - "integrity": "sha512-CgbjyWT6aOh2oNSUS0cioYQsGysj9hQ2IdbOfeNwq5KOaKM7dOw/yTupiI0cnJhaDHJEIGybPkQz7LF9WNIhyw==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "normalize-url": "4.5.1", - "parse-path": "^4.0.0", - "protocols": "^1.4.0" - } - }, - "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==", - "dev": true - }, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "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" - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "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.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", - "dev": true, - "requires": { - "read": "1" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "protocols": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", - "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", - "dev": true - }, - "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 - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-string": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", - "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", - "dev": true, - "requires": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-cmd-shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", - "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", - "dev": true - }, - "read-package-json": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.2.tgz", - "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" - } - }, - "read-package-json-fast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", - "dev": true, - "requires": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "read-package-tree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", - "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", - "dev": true, - "requires": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.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" - } - }, - "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 - }, - "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 - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", - "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "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==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "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" - }, - "dependencies": { - "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-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 - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "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" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "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==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "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" - } - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "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 - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^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" - } - }, - "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 - } - } - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, - "smart-buffer": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", - "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", - "dev": true - }, - "socks": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", - "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.1.0" - } - }, - "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" - } - }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "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 - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", - "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-on-first": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", - "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", - "dev": true - }, - "split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "requires": { - "readable-stream": "^3.0.0" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - }, - "dependencies": { - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } - } - }, - "strict-uri-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", - "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - } - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.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-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-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "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 - }, - "strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", - "dev": true, - "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==", - "dev": true - } - } - }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true - }, - "temp-write": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-4.0.0.tgz", - "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "semver": "^6.0.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 - } - } - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "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 - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "requires": { - "readable-stream": "3" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "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-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "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-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 - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "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" - } - }, - "uglify-js": { - "version": "3.13.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", - "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true - }, - "umask": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", - "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "util-promisify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", - "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "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 - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "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 - }, - "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==", - "dev": true, - "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" - } - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "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 - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "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-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 - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-json-file": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-4.3.0.tgz", - "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", - "dev": true, - "requires": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.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 - }, - "sort-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.2.0.tgz", - "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", - "dev": true, - "requires": { - "is-plain-obj": "^2.0.0" - } - }, - "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" - } - } - } - }, - "write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "requires": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "dependencies": { - "type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true - }, - "write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - } - } - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "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 - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "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 - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index 4c357b34c..000000000 --- a/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "root", - "private": true, - "engines": { - "node": "16.14.0" - }, - "devDependencies": { - "eslint": "^7.29.0", - "husky": "^6.0.0", - "lerna": "^4.0.0", - "lint-staged": "^11.1.2", - "prettier": "^2.3.2" - }, - "scripts": { - "watch-libs": "lerna run watch --no-private --parallel", - "build-libs": "lerna run build --no-private", - "test": "lerna run test", - "bootstrap": "lerna bootstrap", - "build:prod": "lerna run build:prod" - } -} diff --git a/pkg/arvo/app/acme.hoon b/pkg/arvo/app/acme.hoon index cd2a2a09b..17ca28d3f 100644 --- a/pkg/arvo/app/acme.hoon +++ b/pkg/arvo/app/acme.hoon @@ -584,10 +584,11 @@ ~| [%no-next-domain idx=idx] (head (skim pending |=([turf idx=@ud ?] =(idx ^idx)))) :: XX should confirm that :turf points to us - :: confirms that domain exists (and an urbit is on :80) + :: confirms that domain exists (and an urbit is on the standard port) :: + =/ sec=? p:.^(hart:eyre %e /(scot %p our.bow)/host/(scot %da now.bow)) =/ =purl - :- [sec=| por=~ host=[%& turf.next]] + :- [sec=sec por=~ host=[%& turf.next]] [[ext=~ path=/'~debug'] query=~] =/ =wire (acme-wire try %validate-domain /idx/(scot %ud idx.next)) @@ -754,9 +755,8 @@ ?> ?=(%wake sas.u.rod) =* aut u.active.aut.u.rod =/ pat=path /'.well-known'/acme-challenge/[tok.cal.aut] - :: note: requires port 80, just as the ACME service will - :: - =/ url=purl [[sec=| por=~ hos=[%& dom.aut]] [ext=~ pat] hed=~] + =/ sec=? p:.^(hart:eyre %e /(scot %p our.bow)/host/(scot %da now.bow)) + =/ url=purl [[sec=sec por=~ hos=[%& dom.aut]] [ext=~ pat] hed=~] :: =/ url=purl [[sec=| por=`8.081 hos=[%& /localhost]] [ext=~ pat] hed=~] :: XX idx in wire? :: diff --git a/pkg/arvo/app/aqua.hoon b/pkg/arvo/app/aqua.hoon index 574f4cd3f..a41f45ba3 100644 --- a/pkg/arvo/app/aqua.hoon +++ b/pkg/arvo/app/aqua.hoon @@ -7,6 +7,7 @@ :: OR :: :aqua &pill +solid :: +:: XX: update these examples :: Then try stuff: :: :aqua [%init ~[~bud ~dev]] :: :aqua [%dojo ~[~bud ~dev] "[our eny (add 3 5)]"] @@ -480,14 +481,15 @@ =^ ms state (poke-pill pil) (emit-cards ms) :: - [%swap-files ~] + [%swap-files @tas] + =/ =desk +.val =. userspace-ova.pil - =/ slim-dirs=(list path) - ~[/app /ted /gen /lib /mar /sur /hoon/sys /arvo/sys /zuse/sys] + :: take all files from a userspace desk + =/ all-dirs=(list path) ~[/] :_ ~ %- unix-event:pill-lib - %- %*(. file-ovum:pill-lib directories slim-dirs) - /(scot %p our.hid)/work/(scot %da now.hid) + %+ %*(. file-ovum:pill-lib directories all-dirs) + desk /(scot %p our.hid)/[desk]/(scot %da now.hid) =^ ms state (poke-pill pil) (emit-cards ms) :: diff --git a/pkg/arvo/app/azimuth.hoon b/pkg/arvo/app/azimuth.hoon index 6a7b81e43..54a97be23 100644 --- a/pkg/arvo/app/azimuth.hoon +++ b/pkg/arvo/app/azimuth.hoon @@ -6,22 +6,16 @@ default-agent, verb, dbug -:: Generally don't update the snapshot until we have clay tombstoning. -:: -/* snap %azimuth-snapshot /app/azimuth/version-0/azimuth-snapshot :: To update, run from dojo: :: -azimuth-snap-state %default 'version-0' :: :: To recreate from a full list of logs (at /app/azimuth/logs/eth-logs): :: -azimuth-snap-logs %default 'version-0' :: -=/ snap=snap-state snap -=/ last-snap=@ number.id.snap -:: =, jael |% +$ app-state - $: %6 + $: %7 url=@ta =net refresh=_~m5 @@ -30,10 +24,14 @@ own=owners spo=sponsors logs=(list =event-log:rpc:ethereum) + sap=snap-state == :: +$ poke-data - $% :: %listen + $% :: %load: load snapshot + :: + [%load snap=snap-state] + :: %listen :: [%listen whos=(list ship) =source:jael] :: %watch: configure node url and network @@ -75,14 +73,18 @@ == :: ++ init-timer - |= =bowl:gall + |= at=@da ^- card - [%pass /init %arvo %b %wait now.bowl] + [%pass /init %arvo %b %wait at] :: ++ start-log-retrieval |= [=ship args=vase] ^- card [%pass /wa %agent [ship %eth-watcher] %poke %eth-watcher-poke args] + :: + ++ start-azimuth-load + ^- card + [%pass /al %arvo %k %fard %base %azimuth-load %noun !>(~)] -- :: =< @@ -92,22 +94,10 @@ def ~(. (default-agent this %|) bowl) :: ++ on-init - ^- (quip card _this) - =/ points=@ud ~(wyt by points.nas.snap) - %- %- slog - [leaf+"ship: loading azimuth snapshot ({} points)"]~ - :: - =: net.state %default - nas.state nas.snap - own.state owners.snap - spo.state sponsors.snap - url.state 'http://eth-mainnet.urbit.org:8545' - == :_ this ?: .^(? %j /(scot %p our.bowl)/fake/(scot %da now.bowl)) ~ - ~[(nuke-azimuth-tracker bowl) (init-timer bowl)] - :: + ~[(init-timer now.bowl)] ++ on-save !>(state) ++ on-load |= old=vase @@ -122,7 +112,7 @@ `old-state %- %- slog :_ ~ leaf+"ship: loading snapshot with {<(lent logs.old-state)>} events" - =. +.state +:(state-5-to-6 old-state) + =. +.state +:(state-6-to-7 (state-5-to-6 old-state)) =^ cards state (%*(run-logs do nas.state *^state:naive) logs.state) [(jael-update:do (to-udiffs:do cards)) state] @@ -130,12 +120,12 @@ ?. ?=(%2 -.old-state) `old-state ~& > '%azimuth: updating to state 3' - =. +.state +:(state-5-to-6 old-state) + =. +.state +:(state-6-to-7 (state-5-to-6 old-state)) :: replace naive state and indices with snapshot :: - =: nas.state nas.snap - own.state owners.snap - spo.state sponsors.snap + =: nas.state nas.sap.state + own.state owners.sap.state + spo.state sponsors.sap.state logs.state ~ :: TODO: shouldn't be needed but have seen eth-watcher :: threads use a url='' if this is not used @@ -144,8 +134,8 @@ == =/ points=@ud ~(wyt by points.nas.state) %- %- slog :_ ~ - leaf+"ship: processing azimuth snapshot ({} points)" - =/ snap-cards=udiffs:point (run-state:do id.snap points.nas.state) + leaf+"ship: processing azimuth snapshot (~{} points)" + =/ snap-cards=udiffs:point (run-state:do id.sap.state points.nas.state) :_ [%3 url net whos nas own spo logs]:state %+ weld (jael-update:do snap-cards) @@ -160,22 +150,30 @@ =^ cards-4 old-state ?. ?=(%4 -.old-state) [cards-3 old-state] =^ cards this - %- %*(. on-poke +.state.this +:(state-5-to-6 old-state)) + %- %*(. on-poke +.state.this +:(state-6-to-7 (state-5-to-6 old-state))) [%azimuth-poke !>([%watch [url net]:old-state])] ~& > '%azimuth: updating to state 5' [cards [%5 url net whos nas own spo logs]:state.this] =? old-state ?=(%5 -.old-state) (state-5-to-6 old-state) - ?> ?=(%6 -.old-state) + =? old-state ?=(%6 -.old-state) + (state-6-to-7 old-state) + ?> ?=(%7 -.old-state) [cards-4 this(state old-state)] :: - ++ app-states $%(state-0 state-1-2-3-4-5 app-state) - :: - ++ state-5-to-6 - |= state-1-2-3-4-5 - ^- app-state - [%6 url net ~m5 whos nas own spo logs] + ++ app-states $%(state-0 state-1-2-3-4-5 state-6 app-state) :: + +$ state-6 + $: %6 + url=@ta + =net + refresh=_~m5 + whos=(set ship) + nas=^state:naive + own=owners + spo=sponsors + logs=(list =event-log:rpc:ethereum) + == +$ state-1-2-3-4-5 $: ?(%1 %2 %3 %4 %5) url=@ta @@ -196,6 +194,15 @@ own=owners logs=(list =event-log:rpc:ethereum) == + ++ state-5-to-6 + |= state-1-2-3-4-5 + ^- state-6 + [%6 url net ~m5 whos nas own spo logs] + :: + ++ state-6-to-7 + |= state-6 + ^- app-state + [%7 url net refresh whos nas own spo logs *snap-state] -- :: ++ on-poke @@ -219,9 +226,9 @@ [(subscribe-to-eth-watcher bowl)]~ :: %resnap - =: nas.state nas.snap - own.state owners.snap - spo.state sponsors.snap + =: nas.state nas.sap.state + own.state owners.sap.state + spo.state sponsors.sap.state == `this == @@ -229,7 +236,23 @@ ?. ?=(%azimuth-poke mark) (on-poke:def mark vase) =+ !<(poke=poke-data vase) + |- ?- -.poke + %load + =/ points=@ud ~(wyt by points.nas.snap.poke) + %- %- slog + [leaf+"ship: loading azimuth snapshot ({} points)"]~ + :: + =: net.state %default + nas.state nas.snap.poke + own.state owners.snap.poke + spo.state sponsors.snap.poke + url.state 'http://eth-mainnet.urbit.org:8545' + sap.state snap.poke + logs.state ~ + == + $(poke [%kick ~]) + :: %listen [[(listen-to-azimuth (silt whos.poke) source.poke)]~ this] :: @@ -237,8 +260,8 @@ =/ last-block=@ ?^ logs.state number:(last-block-id:dice logs.state) - ~& >> %no-logs-in-azimuth-state - last-snap + :: ~& >> %no-logs-in-azimuth-state + number.id.sap.state =+ [our=(scot %p our.bowl) now=(scot %da now.bowl)] =+ .^(dudes=(set [dude:gall ?]) %ge our %base now /) =/ running=? (~(has in dudes) [%eth-watcher &]) @@ -246,43 +269,44 @@ |((~(has in dudes) [%eth-watcher &]) (~(has in dudes) [%eth-watcher |])) :_ this =/ cards=(list card) - :- :: %jael will re-subscribe to get all azimuth diffs - :: - (listen-to-azimuth ~ [%| dap.bowl]) - :: we poke eth-watcher to retrieve logs from the latest we have - :: - %*(start do last-snap last-block) - =? cards !running - :: restart %eth-watcher - :: - ~& >> %starting-eth-watcher - =/ rein=[desk rein] [%base %.y [%eth-watcher ~ ~] ~] - :_ cards - [%pass /rein %agent [our.bowl %hood] %poke kiln-rein+!>(rein)] - =? cards !installed + ?: installed + ~ :: reinstall %base desk :: =+ spo=(sein:title [our now our]:bowl) ~& >> re-installing-base-from+spo =/ fresh=[desk ship desk] [%base spo %kids] + [%pass /fresh %agent [our.bowl %hood] %poke kiln-install+!>(fresh)]~ + =? cards !running + :: restart %eth-watcher + :: + ~& >> %starting-eth-watcher + =/ rein=[desk rein] [%base [%eth-watcher %&] ~ ~] :_ cards - [%pass /fresh %agent [our.bowl %hood] %poke kiln-install+!>(fresh)] - :: resubscribe if we somehow get unsubscribed from eth-watcher - :: - ?: (~(has by wex.bowl) [/eth-watcher our.bowl %eth-watcher]) - cards - ~& >> %resubscribing-to-eth-watcher - [(subscribe-to-eth-watcher bowl) cards] + [%pass /rein %agent [our.bowl %hood] %poke kiln-rein+!>(rein)] + =. cards + :: we poke eth-watcher to retrieve logs from the latest we have + :: + (weld %*(start do number.id.sap.state last-block) cards) + =? cards !(~(has by wex.bowl) [/eth-watcher our.bowl %eth-watcher]) + :: resubscribe if we somehow get unsubscribed from eth-watcher + :: + [(subscribe-to-eth-watcher bowl) cards] + =. cards + :: %jael will re-subscribe to get all azimuth diffs + :: + [(listen-to-azimuth ~ [%| dap.bowl]) cards] + (flop cards) :: %watch - =: nas.state ?:(?=(%default net.poke) nas.snap *^state:naive) - own.state ?:(?=(%default net.poke) owners.snap ~) - spo.state ?:(?=(%default net.poke) sponsors.snap ~) + =: nas.state ?:(?=(%default net.poke) nas.sap.state *^state:naive) + own.state ?:(?=(%default net.poke) owners.sap.state ~) + spo.state ?:(?=(%default net.poke) sponsors.sap.state ~) net.state net.poke url.state url.poke logs.state ~ == - [start:do this] + `this == :: ++ on-watch @@ -309,7 +333,7 @@ :- %leaf "ship: processing azimuth snapshot ({} points)" =/ snap-cards=udiffs:point - (%*(run-state do logs.state ~) id.snap points.nas.state) + (%*(run-state do logs.state ~) id.sap.state points.nas.state) [(weld (jael-update:do snap-cards) start:do) this] :: ++ on-leave on-leave:def @@ -318,13 +342,14 @@ ^- (unit (unit cage)) |^ ?+ path (on-peek:def path) - [%x %logs ~] ``noun+!>(logs.state) - [%x %nas ~] ``noun+!>(nas.state) - [%x %dns ~] ``noun+!>(dns.nas.state) - [%x %own ~] ``noun+!>(own.state) - [%x %spo ~] ``noun+!>(spo.state) - [%x %refresh ~] ``atom+!>(refresh.state) - [%x %point @ ~] ``noun+(point i.t.t.path) + [%x %logs ~] ``noun+!>(logs.state) + [%x %nas ~] ``noun+!>(nas.state) + [%x %dns ~] ``noun+!>(dns.nas.state) + [%x %own ~] ``noun+!>(own.state) + [%x %spo ~] ``noun+!>(spo.state) + [%x %refresh ~] ``atom+!>(refresh.state) + [%x %point @ ~] ``noun+(point i.t.t.path) + [%x %last-snap ~] ``noun+!>(sap.state) == :: ++ point @@ -369,19 +394,24 @@ :: ++ on-arvo |= [=wire =sign-arvo] + ?: &(=(/al wire) ?=(%arow +<.sign-arvo)) + ?- -.p.sign-arvo + %& `this + %| + %- (slog 'loading azimuth snapshot failed! still trying' p.p.sign-arvo) + [~[(init-timer (add ~s10 now.bowl))] this] + == ?. &(=(/init wire) ?=(%wake +<.sign-arvo)) (on-arvo:def wire sign-arvo) ?^ error.sign-arvo %- (slog 'azimuth: failed to initialize!' ~) `this :_ this - ~[(subscribe-to-eth-watcher bowl) (listen-to-azimuth ~ [%| dap.bowl])] + ~[start-azimuth-load] :: ++ on-fail on-fail:def -- |_ =bowl:gall -:: TODO: maybe flop the endianness here so metamask signs it in normal -:: order? :: ++ verifier ^- ^verifier:naive @@ -514,7 +544,7 @@ :+ %watch /[dap.bowl] ^- config:eth-watcher :* url.state =(%czar (clan:title our.bowl)) refresh.state ~h30 - (max launch.net ?:(=(net.state %default) +(last-snap) 0)) + (max launch.net ?:(=(net.state %default) +(number.id.sap.state) 0)) ~ ~[azimuth.net] ~[naive.net] diff --git a/pkg/arvo/app/azimuth/version-0.azimuth-snapshot b/pkg/arvo/app/azimuth/version-0.azimuth-snapshot deleted file mode 100644 index a664ca92f..000000000 Binary files a/pkg/arvo/app/azimuth/version-0.azimuth-snapshot and /dev/null differ diff --git a/pkg/arvo/app/claz.hoon b/pkg/arvo/app/claz.hoon index a8f1f42ce..64c20abcc 100644 --- a/pkg/arvo/app/claz.hoon +++ b/pkg/arvo/app/claz.hoon @@ -185,7 +185,7 @@ :: ?- network %mainnet 0x1 - %ropsten 0x3 + %goerli 0x5 %fakenet `@ux``@`1.337 [%other *] id.network == diff --git a/pkg/arvo/app/dbug.hoon b/pkg/arvo/app/dbug.hoon index fbec14e29..4c5dbb42e 100644 --- a/pkg/arvo/app/dbug.hoon +++ b/pkg/arvo/app/dbug.hoon @@ -716,7 +716,7 @@ 'rtt'^(numb (div rtt ~s1)) 'rttvar'^(numb (div rttvar ~s1)) 'ssthresh'^(numb ssthresh) - 'num-live'^(numb num-live) + 'num-live'^(numb ~(wyt by live)) 'cwnd'^(numb cwnd) 'counter'^(numb counter) == @@ -801,8 +801,8 @@ =/ heads=(list [tako desk]) %+ turn ~(tap in desks) |= =desk - =+ .^(=dome %cv /(scot %p our.bowl)/[desk]/(scot %da now.bowl)) - =/ =tako (~(got by hit.dome) let.dome) + =+ .^(=domo %cv /(scot %p our.bowl)/[desk]/(scot %da now.bowl)) + =/ =tako (~(got by hit.domo) let.domo) [tako desk] =/ yakis=(set yaki) %- silt diff --git a/pkg/arvo/app/debug/css/index.css b/pkg/arvo/app/debug/css/index.css index 2be3ef081..1121ba3f8 100644 --- a/pkg/arvo/app/debug/css/index.css +++ b/pkg/arvo/app/debug/css/index.css @@ -1 +1 @@ -/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}.aspect-ratio{height:0;position:relative}.aspect-ratio--16x9{padding-bottom:56.25%}.aspect-ratio--9x16{padding-bottom:177.77%}.aspect-ratio--4x3{padding-bottom:75%}.aspect-ratio--3x4{padding-bottom:133.33%}.aspect-ratio--6x4{padding-bottom:66.6%}.aspect-ratio--4x6{padding-bottom:150%}.aspect-ratio--8x5{padding-bottom:62.5%}.aspect-ratio--5x8{padding-bottom:160%}.aspect-ratio--7x5{padding-bottom:71.42%}.aspect-ratio--5x7{padding-bottom:140%}.aspect-ratio--1x1{padding-bottom:100%}.aspect-ratio--object{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover{background-size:cover!important}.contain{background-size:contain!important}.bg-center{background-position:50%}.bg-center,.bg-top{background-repeat:no-repeat}.bg-top{background-position:top}.bg-right{background-position:100%}.bg-bottom,.bg-right{background-repeat:no-repeat}.bg-bottom{background-position:bottom}.bg-left{background-repeat:no-repeat;background-position:0}.ba{border-style:solid;border-width:1px}.bt{border-top-style:solid;border-top-width:1px}.br{border-right-style:solid;border-right-width:1px}.bb{border-bottom-style:solid;border-bottom-width:1px}.bl{border-left-style:solid;border-left-width:1px}.bn{border-style:none;border-width:0}.b--black{border-color:#000}.b--white{border-color:#fff}.b--gray0{border-color:#333}.b--gray1{border-color:#4d4d4d}.b--gray2{border-color:#7f7f7f}.b--gray3{border-color:#b1b2b3}.b--gray4{border-color:#e6e6e6}.b--gray5{border-color:#f9f9f9}.b--blue0{border-color:#ecf6ff}.b--blue1{border-color:#b0c7ff}.b--blue2{border-color:#4330fc}.b--blue3{border-color:#190d7b}.b--red0{border-color:#f9d6ce}.b--red1{border-color:#ffa073}.b--red2{border-color:#ee5432}.b--red3{border-color:#c10d30}.b--green0{border-color:#bdebcc}.b--green1{border-color:#2ed196}.b--green2{border-color:#2aa779}.b--green3{border-color:#286e55}.b--yellow0{border-color:#ffefc5}.b--yellow1{border-color:#ffd972}.b--yellow2{border-color:#fcc440}.b--yellow3{border-color:#ee892b}.b--transparent{border-color:transparent}.br0{border-radius:0}.br1{border-radius:.125rem}.br2{border-radius:.25rem}.br3{border-radius:.5rem}.br4{border-radius:1rem}.br-100{border-radius:100%}.br-pill{border-radius:9999px}.br--bottom{border-top-left-radius:0;border-top-right-radius:0}.br--top{border-bottom-right-radius:0}.br--right,.br--top{border-bottom-left-radius:0}.br--right{border-top-left-radius:0}.br--left{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted{border-style:dotted}.b--dashed{border-style:dashed}.b--solid{border-style:solid}.b--none{border-style:none}.bw0{border-width:0}.bw1{border-width:.125rem}.bw2{border-width:.25rem}.bw3{border-width:.5rem}.bw4{border-width:1rem}.bw5{border-width:2rem}.bt-0{border-top-width:0}.br-0{border-right-width:0}.bb-0{border-bottom-width:0}.bl-0{border-left-width:0}.shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.border-box,a,article,aside,blockquote,body,code,dd,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=url],legend,li,main,nav,ol,p,pre,section,table,td,textarea,th,tr,ul{box-sizing:border-box}.pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.pa0{padding:0}.ma0,.na0{margin:0}.pl0{padding-left:0}.ml0,.nl0{margin-left:0}.pr0{padding-right:0}.mr0,.nr0{margin-right:0}.pt0{padding-top:0}.mt0,.nt0{margin-top:0}.pb0{padding-bottom:0}.mb0,.nb0{margin-bottom:0}.pv0{padding-top:0;padding-bottom:0}.mv0,.nv0{margin-top:0;margin-bottom:0}.ph0{padding-left:0;padding-right:0}.mh0,.nh0{margin-left:0;margin-right:0}.pa1{padding:.25rem}.ma1{margin:.25rem}.na1{margin:-.25rem}.pl1{padding-left:.25rem}.ml1{margin-left:.25rem}.nl1{margin-left:-.25rem}.pr1{padding-right:.25rem}.mr1{margin-right:.25rem}.nr1{margin-right:-.25rem}.pt1{padding-top:.25rem}.mt1{margin-top:.25rem}.nt1{margin-top:-.25rem}.pb1{padding-bottom:.25rem}.mb1{margin-bottom:.25rem}.nb1{margin-bottom:-.25rem}.pv1{padding-top:.25rem;padding-bottom:.25rem}.mv1{margin-top:.25rem;margin-bottom:.25rem}.nv1{margin-top:-.25rem;margin-bottom:-.25rem}.ph1{padding-left:.25rem;padding-right:.25rem}.mh1{margin-left:.25rem;margin-right:.25rem}.nh1{margin-left:-.25rem;margin-right:-.25rem}.pa2{padding:.5rem}.ma2{margin:.5rem}.na2{margin:-.5rem}.pl2{padding-left:.5rem}.ml2{margin-left:.5rem}.nl2{margin-left:-.5rem}.pr2{padding-right:.5rem}.mr2{margin-right:.5rem}.nr2{margin-right:-.5rem}.pt2{padding-top:.5rem}.mt2{margin-top:.5rem}.nt2{margin-top:-.5rem}.pb2{padding-bottom:.5rem}.mb2{margin-bottom:.5rem}.nb2{margin-bottom:-.5rem}.pv2{padding-top:.5rem;padding-bottom:.5rem}.mv2{margin-top:.5rem;margin-bottom:.5rem}.nv2{margin-top:-.5rem;margin-bottom:-.5rem}.ph2{padding-left:.5rem;padding-right:.5rem}.mh2{margin-left:.5rem;margin-right:.5rem}.nh2{margin-left:-.5rem;margin-right:-.5rem}.pa3{padding:.75rem}.ma3{margin:.75rem}.na3{margin:-.75rem}.pl3{padding-left:.75rem}.ml3{margin-left:.75rem}.nl3{margin-left:-.75rem}.pr3{padding-right:.75rem}.mr3{margin-right:.75rem}.nr3{margin-right:-.75rem}.pt3{padding-top:.75rem}.mt3{margin-top:.75rem}.nt3{margin-top:-.75rem}.pb3{padding-bottom:.75rem}.mb3{margin-bottom:.75rem}.nb3{margin-bottom:-.75rem}.pv3{padding-top:.75rem;padding-bottom:.75rem}.mv3{margin-top:.75rem;margin-bottom:.75rem}.nv3{margin-top:-.75rem;margin-bottom:-.75rem}.ph3{padding-left:.75rem;padding-right:.75rem}.mh3{margin-left:.75rem;margin-right:.75rem}.nh3{margin-left:-.75rem;margin-right:-.75rem}.pa4{padding:1rem}.ma4{margin:1rem}.na4{margin:-1rem}.pl4{padding-left:1rem}.ml4{margin-left:1rem}.nl4{margin-left:-1rem}.pr4{padding-right:1rem}.mr4{margin-right:1rem}.nr4{margin-right:-1rem}.pt4{padding-top:1rem}.mt4{margin-top:1rem}.nt4{margin-top:-1rem}.pb4{padding-bottom:1rem}.mb4{margin-bottom:1rem}.nb4{margin-bottom:-1rem}.pv4{padding-top:1rem;padding-bottom:1rem}.mv4{margin-top:1rem;margin-bottom:1rem}.nv4{margin-top:-1rem;margin-bottom:-1rem}.ph4{padding-left:1rem;padding-right:1rem}.mh4{margin-left:1rem;margin-right:1rem}.nh4{margin-left:-1rem;margin-right:-1rem}.pa5{padding:1.25rem}.ma5{margin:1.25rem}.na5{margin:-1.25rem}.pl5{padding-left:1.25rem}.ml5{margin-left:1.25rem}.nl5{margin-left:-1.25rem}.pr5{padding-right:1.25rem}.mr5{margin-right:1.25rem}.nr5{margin-right:-1.25rem}.pt5{padding-top:1.25rem}.mt5{margin-top:1.25rem}.nt5{margin-top:-1.25rem}.pb5{padding-bottom:1.25rem}.mb5{margin-bottom:1.25rem}.nb5{margin-bottom:-1.25rem}.pv5{padding-top:1.25rem;padding-bottom:1.25rem}.mv5{margin-top:1.25rem;margin-bottom:1.25rem}.nv5{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5{padding-left:1.25rem;padding-right:1.25rem}.mh5{margin-left:1.25rem;margin-right:1.25rem}.nh5{margin-left:-1.25rem;margin-right:-1.25rem}.pa6{padding:1.5rem}.ma6{margin:1.5rem}.na6{margin:-1.5rem}.pl6{padding-left:1.5rem}.ml6{margin-left:1.5rem}.nl6{margin-left:-1.5rem}.pr6{padding-right:1.5rem}.mr6{margin-right:1.5rem}.nr6{margin-right:-1.5rem}.pt6{padding-top:1.5rem}.mt6{margin-top:1.5rem}.nt6{margin-top:-1.5rem}.pb6{padding-bottom:1.5rem}.mb6{margin-bottom:1.5rem}.nb6{margin-bottom:-1.5rem}.pv6{padding-top:1.5rem;padding-bottom:1.5rem}.mv6{margin-top:1.5rem;margin-bottom:1.5rem}.nv6{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6{padding-left:1.5rem;padding-right:1.5rem}.mh6{margin-left:1.5rem;margin-right:1.5rem}.nh6{margin-left:-1.5rem;margin-right:-1.5rem}.pa7{padding:2rem}.ma7{margin:2rem}.na7{margin:-2rem}.pl7{padding-left:2rem}.ml7{margin-left:2rem}.nl7{margin-left:-2rem}.pr7{padding-right:2rem}.mr7{margin-right:2rem}.nr7{margin-right:-2rem}.pt7{padding-top:2rem}.mt7{margin-top:2rem}.nt7{margin-top:-2rem}.pb7{padding-bottom:2rem}.mb7{margin-bottom:2rem}.nb7{margin-bottom:-2rem}.pv7{padding-top:2rem;padding-bottom:2rem}.mv7{margin-top:2rem;margin-bottom:2rem}.nv7{margin-top:-2rem;margin-bottom:-2rem}.ph7{padding-left:2rem;padding-right:2rem}.mh7{margin-left:2rem;margin-right:2rem}.nh7{margin-left:-2rem;margin-right:-2rem}.pa8{padding:3rem}.ma8{margin:3rem}.na8{margin:-3rem}.pl8{padding-left:3rem}.ml8{margin-left:3rem}.nl8{margin-left:-3rem}.pr8{padding-right:3rem}.mr8{margin-right:3rem}.nr8{margin-right:-3rem}.pt8{padding-top:3rem}.mt8{margin-top:3rem}.nt8{margin-top:-3rem}.pb8{padding-bottom:3rem}.mb8{margin-bottom:3rem}.nb8{margin-bottom:-3rem}.pv8{padding-top:3rem;padding-bottom:3rem}.mv8{margin-top:3rem;margin-bottom:3rem}.nv8{margin-top:-3rem;margin-bottom:-3rem}.ph8{padding-left:3rem;padding-right:3rem}.mh8{margin-left:3rem;margin-right:3rem}.nh8{margin-left:-3rem;margin-right:-3rem}.pa9{padding:4rem}.ma9{margin:4rem}.na9{margin:-4rem}.pl9{padding-left:4rem}.ml9{margin-left:4rem}.nl9{margin-left:-4rem}.pr9{padding-right:4rem}.mr9{margin-right:4rem}.nr9{margin-right:-4rem}.pt9{padding-top:4rem}.mt9{margin-top:4rem}.nt9{margin-top:-4rem}.pb9{padding-bottom:4rem}.mb9{margin-bottom:4rem}.nb9{margin-bottom:-4rem}.pv9{padding-top:4rem;padding-bottom:4rem}.mv9{margin-top:4rem;margin-bottom:4rem}.nv9{margin-top:-4rem;margin-bottom:-4rem}.ph9{padding-left:4rem;padding-right:4rem}.mh9{margin-left:4rem;margin-right:4rem}.nh9{margin-left:-4rem;margin-right:-4rem}.pa10{padding:6rem}.ma10{margin:6rem}.na10{margin:-6rem}.pl10{padding-left:6rem}.ml10{margin-left:6rem}.nl10{margin-left:-6rem}.pr10{padding-right:6rem}.mr10{margin-right:6rem}.nr10{margin-right:-6rem}.pt10{padding-top:6rem}.mt10{margin-top:6rem}.nt10{margin-top:-6rem}.pb10{padding-bottom:6rem}.mb10{margin-bottom:6rem}.nb10{margin-bottom:-6rem}.pv10{padding-top:6rem;padding-bottom:6rem}.mv10{margin-top:6rem;margin-bottom:6rem}.nv10{margin-top:-6rem;margin-bottom:-6rem}.ph10{padding-left:6rem;padding-right:6rem}.mh10{margin-left:6rem;margin-right:6rem}.nh10{margin-left:-6rem;margin-right:-6rem}.pa11{padding:10rem}.ma11{margin:10rem}.na11{margin:-10rem}.pl11{padding-left:10rem}.ml11{margin-left:10rem}.nl11{margin-left:-10rem}.pr11{padding-right:10rem}.mr11{margin-right:10rem}.nr11{margin-right:-10rem}.pt11{padding-top:10rem}.mt11{margin-top:10rem}.nt11{margin-top:-10rem}.pb11{padding-bottom:10rem}.mb11{margin-bottom:10rem}.nb11{margin-bottom:-10rem}.pv11{padding-top:10rem;padding-bottom:10rem}.mv11{margin-top:10rem;margin-bottom:10rem}.nv11{margin-top:-10rem;margin-bottom:-10rem}.ph11{padding-left:10rem;padding-right:10rem}.mh11{margin-left:10rem;margin-right:10rem}.nh11{margin-left:-10rem;margin-right:-10rem}.pa12{padding:18rem}.ma12{margin:18rem}.na12{margin:-18rem}.pl12{padding-left:18rem}.ml12{margin-left:18rem}.nl12{margin-left:-18rem}.pr12{padding-right:18rem}.mr12{margin-right:18rem}.nr12{margin-right:-18rem}.pt12{padding-top:18rem}.mt12{margin-top:18rem}.nt12{margin-top:-18rem}.pb12{padding-bottom:18rem}.mb12{margin-bottom:18rem}.nb12{margin-bottom:-18rem}.pv12{padding-top:18rem;padding-bottom:18rem}.mv12{margin-top:18rem;margin-bottom:18rem}.nv12{margin-top:-18rem;margin-bottom:-18rem}.ph12{padding-left:18rem;padding-right:18rem}.mh12{margin-left:18rem;margin-right:18rem}.nh12{margin-left:-18rem;margin-right:-18rem}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-1{top:1rem}.right-1{right:1rem}.bottom-1{bottom:1rem}.left-1{left:1rem}.top-2{top:2rem}.right-2{right:2rem}.bottom-2{bottom:2rem}.left-2{left:2rem}.top--1{top:-1rem}.right--1{right:-1rem}.bottom--1{bottom:-1rem}.left--1{left:-1rem}.top--2{top:-2rem}.right--2{right:-2rem}.bottom--2{bottom:-2rem}.left--2{left:-2rem}.absolute--fill{top:0;right:0;bottom:0;left:0}.cf:after,.cf:before{content:" ";display:table}.cf:after{clear:both}.cf{*zoom:1}.cl{clear:left}.cr{clear:right}.cb{clear:both}.cn{clear:none}.dn{display:none}.di{display:inline}.db{display:block}.dib{display:inline-block}.dit{display:inline-table}.dt{display:table}.dtc{display:table-cell}.dt-row{display:table-row}.dt-row-group{display:table-row-group}.dt-column{display:table-column}.dt-column-group{display:table-column-group}.dt--fixed{table-layout:fixed;width:100%}.flex{display:flex}.inline-flex{display:inline-flex}.flex-auto{flex:1 1 auto;min-width:0;min-height:0}.flex-none{flex:none}.flex-column{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-column-reverse{flex-direction:column-reverse}.flex-row-reverse{flex-direction:row-reverse}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-center{align-content:center}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-stretch{align-content:stretch}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-last{order:99999}.flex-grow-0{flex-grow:0}.flex-grow-1{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink-1{flex-shrink:1}.fl{float:left}.fl,.fr{_display:inline}.fr{float:right}.fn{float:none}.sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.serif{font-family:georgia,times,serif}.system-sans-serif{font-family:sans-serif}.system-serif{font-family:serif}.code,code{font-family:Consolas,monaco,monospace}.courier{font-family:Courier Next,courier,monospace}.helvetica{font-family:helvetica neue,helvetica,sans-serif}.avenir{font-family:avenir next,avenir,sans-serif}.athelas{font-family:athelas,georgia,serif}.georgia{font-family:georgia,serif}.times{font-family:times,serif}.bodoni{font-family:Bodoni MT,serif}.calisto{font-family:Calisto MT,serif}.garamond{font-family:garamond,serif}.baskerville{font-family:baskerville,serif}.i{font-style:italic}.fs-normal{font-style:normal}.normal{font-weight:400}.b{font-weight:700}.fw1{font-weight:100}.fw2{font-weight:200}.fw3{font-weight:300}.fw4{font-weight:400}.fw5{font-weight:500}.fw6{font-weight:600}.fw7{font-weight:700}.fw8{font-weight:800}.fw9{font-weight:900}.input-reset{-webkit-appearance:none;-moz-appearance:none}.button-reset::-moz-focus-inner,.input-reset::-moz-focus-inner{border:0;padding:0}.debug *{outline:1px solid gold}.debug-white *{outline:1px solid #fff}.debug-black *{outline:1px solid #000}.debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAFElEQVR4AWPAC97/9x0eCsAEPgwAVLshdpENIxcAAAAASUVORK5CYII=) repeat 0 0}.debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMklEQVR4AWOgCLz/b0epAa6UGuBOqQHOQHLUgFEDnAbcBZ4UGwDOkiCnkIhdgNgNxAYAiYlD+8sEuo8AAAAASUVORK5CYII=) repeat 0 0}.debug-grid-8-solid{background:#fff url(data:image/gif;base64,R0lGODdhCAAIAPEAAADw/wDx/////wAAACwAAAAACAAIAAACDZQvgaeb/lxbAIKA8y0AOw==) repeat 0 0}.debug-grid-16-solid{background:#fff url(data:image/gif;base64,R0lGODdhEAAQAPEAAADw/wDx/xXy/////ywAAAAAEAAQAAACIZyPKckYDQFsb6ZqD85jZ2+BkwiRFKehhqQCQgDHcgwEBQA7) repeat 0 0}.link{text-decoration:none}.link,.link:active,.link:focus,.link:hover,.link:link,.link:visited{transition:color .15s ease-in}.link:focus{outline:1px dotted currentColor}.list{list-style-type:none}.h1{height:1rem}.h2{height:2rem}.h3{height:4rem}.h4{height:8rem}.h5{height:16rem}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}.min-h-100{min-height:100%}.vh-25{height:25vh}.vh-50{height:50vh}.vh-75{height:75vh}.vh-100{height:100vh}.min-vh-100{min-height:100vh}.h-auto{height:auto}.h-inherit{height:inherit}.black{color:#000}.white{color:#fff}.gray0{color:#333}.gray1{color:#4d4d4d}.gray2{color:#7f7f7f}.gray3{color:#b1b2b3}.gray4{color:#e6e6e6}.gray5{color:#f9f9f9}.blue0{color:#ecf6ff}.blue1{color:#b0c7ff}.blue2{color:#4330fc}.blue3{color:#190d7b}.red0{color:#f9d6ce}.red1{color:#ffa073}.red2{color:#ee5432}.red3{color:#c10d30}.green0{color:#bdebcc}.green1{color:#2ed196}.green2{color:#2aa779}.green3{color:#286e55}.yellow0{color:#ffefc5}.yellow1{color:#ffd972}.yellow2{color:#fcc440}.yellow3{color:#ee892b}.bg-black{background-color:#000}.bg-white{background-color:#fff}.bg-gray0{background-color:#333}.bg-gray1{background-color:#4d4d4d}.bg-gray2{background-color:#7f7f7f}.bg-gray3{background-color:#b1b2b3}.bg-gray4{background-color:#e6e6e6}.bg-gray5{background-color:#f9f9f9}.bg-blue0{background-color:#ecf6ff}.bg-blue1{background-color:#b0c7ff}.bg-blue2{background-color:#4330fc}.bg-blue3{background-color:#190d7b}.bg-red0{background-color:#f9d6ce}.bg-red1{background-color:#ffa073}.bg-red2{background-color:#ee5432}.bg-red3{background-color:#c10d30}.bg-green0{background-color:#bdebcc}.bg-green1{background-color:#2ed196}.bg-green2{background-color:#2aa779}.bg-green3{background-color:#286e55}.bg-yellow0{background-color:#ffefc5}.bg-yellow1{background-color:#ffd972}.bg-yellow2{background-color:#fcc440}.bg-yellow3{background-color:#ee892b}.bg-transparent{background-color:transparent}.hover-black:focus,.hover-black:hover{color:#000}.hover-white:focus,.hover-white:hover{color:#fff}.hover-gray0:focus,.hover-gray0:hover{color:#333}.hover-gray1:focus,.hover-gray1:hover{color:#4d4d4d}.hover-gray2:focus,.hover-gray2:hover{color:#7f7f7f}.hover-gray3:focus,.hover-gray3:hover{color:#b1b2b3}.hover-gray4:focus,.hover-gray4:hover{color:#e6e6e6}.hover-gray5:focus,.hover-gray5:hover{color:#f9f9f9}.hover-blue0:focus,.hover-blue0:hover{color:#ecf6ff}.hover-blue1:focus,.hover-blue1:hover{color:#b0c7ff}.hover-blue2:focus,.hover-blue2:hover{color:#4330fc}.hover-blue3:focus,.hover-blue3:hover{color:#190d7b}.hover-red0:focus,.hover-red0:hover{color:#f9d6ce}.hover-red1:focus,.hover-red1:hover{color:#ffa073}.hover-red2:focus,.hover-red2:hover{color:#ee5432}.hover-red3:focus,.hover-red3:hover{color:#c10d30}.hover-green0:focus,.hover-green0:hover{color:#bdebcc}.hover-green1:focus,.hover-green1:hover{color:#2ed196}.hover-green2:focus,.hover-green2:hover{color:#2aa779}.hover-green3:focus,.hover-green3:hover{color:#286e55}.hover-yellow0:focus,.hover-yellow0:hover{color:#ffefc5}.hover-yellow1:focus,.hover-yellow1:hover{color:#ffd972}.hover-yellow2:focus,.hover-yellow2:hover{color:#fcc440}.hover-yellow3:focus,.hover-yellow3:hover{color:#ee892b}.hover-bg-black:focus,.hover-bg-black:hover{background-color:#000}.hover-bg-white:focus,.hover-bg-white:hover{background-color:#fff}.hover-bg-gray0:focus,.hover-bg-gray0:hover{background-color:#333}.hover-bg-gray1:focus,.hover-bg-gray1:hover{background-color:#4d4d4d}.hover-bg-gray2:focus,.hover-bg-gray2:hover{background-color:#7f7f7f}.hover-bg-gray3:focus,.hover-bg-gray3:hover{background-color:#b1b2b3}.hover-bg-gray4:focus,.hover-bg-gray4:hover{background-color:#e6e6e6}.hover-bg-gray5:focus,.hover-bg-gray5:hover{background-color:#f9f9f9}.hover-bg-blue0:focus,.hover-bg-blue0:hover{background-color:#ecf6ff}.hover-bg-blue1:focus,.hover-bg-blue1:hover{background-color:#b0c7ff}.hover-bg-blue2:focus,.hover-bg-blue2:hover{background-color:#4330fc}.hover-bg-blue3:focus,.hover-bg-blue3:hover{background-color:#190d7b}.hover-bg-red0:focus,.hover-bg-red0:hover{background-color:#f9d6ce}.hover-bg-red1:focus,.hover-bg-red1:hover{background-color:#ffa073}.hover-bg-red2:focus,.hover-bg-red2:hover{background-color:#ee5432}.hover-bg-red3:focus,.hover-bg-red3:hover{background-color:#c10d30}.hover-bg-green0:focus,.hover-bg-green0:hover{background-color:#bdebcc}.hover-bg-green1:focus,.hover-bg-green1:hover{background-color:#2ed196}.hover-bg-green2:focus,.hover-bg-green2:hover{background-color:#2aa779}.hover-bg-green3:focus,.hover-bg-green3:hover{background-color:#286e55}.hover-bg-yellow0:focus,.hover-bg-yellow0:hover{background-color:#ffefc5}.hover-bg-yellow1:focus,.hover-bg-yellow1:hover{background-color:#ffd972}.hover-bg-yellow2:focus,.hover-bg-yellow2:hover{background-color:#fcc440}.hover-bg-yellow3:focus,.hover-bg-yellow3:hover{background-color:#ee892b}.hover-bg-transparent:focus,.hover-bg-transparent:hover{background-color:transparent}img{max-width:100%}.tracked{letter-spacing:.1em}.tracked-tight{letter-spacing:-.05em}.tracked-mega{letter-spacing:.25em}.lh-solid{line-height:1.333333}.lh-title{line-height:1.5}.lh-copy{line-height:1.666666}.mw1{max-width:1rem}.mw2{max-width:2rem}.mw3{max-width:4rem}.mw4{max-width:8rem}.mw5{max-width:16rem}.mw6{max-width:32rem}.mw7{max-width:48rem}.mw8{max-width:64rem}.mw9{max-width:96rem}.mw-none{max-width:none}.mw-100{max-width:100%}.nested-copy-line-height ol,.nested-copy-line-height p,.nested-copy-line-height ul{line-height:1.5}.nested-headline-line-height h1,.nested-headline-line-height h2,.nested-headline-line-height h3,.nested-headline-line-height h4,.nested-headline-line-height h5,.nested-headline-line-height h6{line-height:1.25}.nested-list-reset ol,.nested-list-reset ul{padding-left:0;margin-left:0;list-style-type:none}.nested-copy-indent p+p{text-indent:1em;margin-top:0;margin-bottom:0}.nested-copy-separator p+p{margin-top:1.5em}.nested-img img{width:100%;max-width:100%;display:block}.nested-links a{color:#357edd;transition:color .15s ease-in}.nested-links a:focus,.nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.dim{opacity:1}.dim,.dim:focus,.dim:hover{transition:opacity .15s ease-in}.dim:focus,.dim:hover{opacity:.5}.dim:active{opacity:.8;transition:opacity .15s ease-out}.glow,.glow:focus,.glow:hover{transition:opacity .15s ease-in}.glow:focus,.glow:hover{opacity:1}.hide-child .child{opacity:0;transition:opacity .15s ease-in}.hide-child:active .child,.hide-child:focus .child,.hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.underline-hover:focus,.underline-hover:hover{text-decoration:underline}.grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.grow:focus,.grow:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.grow:active{-webkit-transform:scale(.9);transform:scale(.9)}.grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}.grow-large:focus,.grow-large:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.pointer:hover,.shadow-hover{cursor:pointer}.shadow-hover{position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:after{content:"";box-shadow:0 0 16px 2px rgba(0,0,0,.2);border-radius:inherit;opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;transition:opacity .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:focus:after,.shadow-hover:hover:after{opacity:1}.bg-animate,.bg-animate:focus,.bg-animate:hover{transition:background-color .15s ease-in-out}.o-100{opacity:1}.o-90{opacity:.9}.o-80{opacity:.8}.o-70{opacity:.7}.o-60{opacity:.6}.o-50{opacity:.5}.o-40{opacity:.4}.o-30{opacity:.3}.o-20{opacity:.2}.o-10{opacity:.1}.o-05{opacity:.05}.o-025{opacity:.025}.o-0{opacity:0}.rotate-45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline{outline:1px solid}.outline-transparent{outline:1px solid transparent}.outline-0{outline:0}.overflow-visible{overflow:visible}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.overflow-x-visible{overflow-x:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-visible{overflow-y:visible}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-y-auto{overflow-y:auto}.static{position:static}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.collapse{border-collapse:collapse;border-spacing:0}.striped--light-silver:nth-child(odd){background-color:#aaa}.striped--moon-gray:nth-child(odd){background-color:#ccc}.striped--light-gray:nth-child(odd){background-color:#eee}.striped--near-white:nth-child(odd){background-color:#f4f4f4}.stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.strike{text-decoration:line-through}.underline{text-decoration:underline}.no-underline{text-decoration:none}.tl{text-align:left}.tr{text-align:right}.tc{text-align:center}.tj{text-align:justify}.ttc{text-transform:capitalize}.ttl{text-transform:lowercase}.ttu{text-transform:uppercase}.ttn{text-transform:none}.v-base{vertical-align:baseline}.v-mid{vertical-align:middle}.v-top{vertical-align:top}.v-btm{vertical-align:bottom}.f1{font-size:4.5rem}.f2{font-size:4rem}.f3{font-size:3rem}.f4{font-size:2rem}.f5{font-size:1.5rem}.f6{font-size:1.125rem}.f7{font-size:1rem}.f8{font-size:.875rem}.f9{font-size:.75rem}.measure{max-width:30em}.measure-wide{max-width:34em}.measure-narrow{max-width:20em}.small-caps{font-variant:small-caps}.indent{text-indent:1em;margin-top:0;margin-bottom:0}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.overflow-container{overflow-y:scroll}.center{margin-left:auto}.center,.mr-auto{margin-right:auto}.ml-auto{margin-left:auto}.clip{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal{white-space:normal}.nowrap{white-space:nowrap}.pre{white-space:pre}.w1{width:1rem}.w2{width:2rem}.w3{width:4rem}.w4{width:8rem}.w5{width:16rem}.w-10{width:10%}.w-20{width:20%}.w-25{width:25%}.w-30{width:30%}.w-33{width:33%}.w-34{width:34%}.w-40{width:40%}.w-50{width:50%}.w-60{width:60%}.w-70{width:70%}.w-75{width:75%}.w-80{width:80%}.w-90{width:90%}.w-100{width:100%}.w-third{width:33.33333%}.w-two-thirds{width:66.66667%}.w-auto{width:auto}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-3{z-index:3}.z-4{z-index:4}.z-5{z-index:5}.z-999{z-index:999}.z-9999{z-index:9999}.z-max{z-index:2147483647}.z-inherit{z-index:inherit}.z-initial{z-index:auto}.z-unset{z-index:unset}@media screen and (min-width:34.375em) and (max-width:46.875em){.aspect-ratio-m{height:0;position:relative}.aspect-ratio--16x9-m{padding-bottom:56.25%}.aspect-ratio--9x16-m{padding-bottom:177.77%}.aspect-ratio--4x3-m{padding-bottom:75%}.aspect-ratio--3x4-m{padding-bottom:133.33%}.aspect-ratio--6x4-m{padding-bottom:66.6%}.aspect-ratio--4x6-m{padding-bottom:150%}.aspect-ratio--8x5-m{padding-bottom:62.5%}.aspect-ratio--5x8-m{padding-bottom:160%}.aspect-ratio--7x5-m{padding-bottom:71.42%}.aspect-ratio--5x7-m{padding-bottom:140%}.aspect-ratio--1x1-m{padding-bottom:100%}.aspect-ratio--object-m{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-m{background-size:cover!important}.contain-m{background-size:contain!important}.bg-center-m{background-position:50%}.bg-center-m,.bg-top-m{background-repeat:no-repeat}.bg-top-m{background-position:top}.bg-right-m{background-position:100%}.bg-bottom-m,.bg-right-m{background-repeat:no-repeat}.bg-bottom-m{background-position:bottom}.bg-left-m{background-repeat:no-repeat;background-position:0}.ba-m{border-style:solid;border-width:1px}.bt-m{border-top-style:solid;border-top-width:1px}.br-m{border-right-style:solid;border-right-width:1px}.bb-m{border-bottom-style:solid;border-bottom-width:1px}.bl-m{border-left-style:solid;border-left-width:1px}.bn-m{border-style:none;border-width:0}.br0-m{border-radius:0}.br1-m{border-radius:.125rem}.br2-m{border-radius:.25rem}.br3-m{border-radius:.5rem}.br4-m{border-radius:1rem}.br-100-m{border-radius:100%}.br-pill-m{border-radius:9999px}.br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.br--top-m{border-bottom-right-radius:0}.br--right-m,.br--top-m{border-bottom-left-radius:0}.br--right-m{border-top-left-radius:0}.br--left-m{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-m{border-style:dotted}.b--dashed-m{border-style:dashed}.b--solid-m{border-style:solid}.b--none-m{border-style:none}.bw0-m{border-width:0}.bw1-m{border-width:.125rem}.bw2-m{border-width:.25rem}.bw3-m{border-width:.5rem}.bw4-m{border-width:1rem}.bw5-m{border-width:2rem}.bt-0-m{border-top-width:0}.br-0-m{border-right-width:0}.bb-0-m{border-bottom-width:0}.bl-0-m{border-left-width:0}.shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-m{padding:0}.ma0-m,.na0-m{margin:0}.pl0-m{padding-left:0}.ml0-m,.nl0-m{margin-left:0}.pr0-m{padding-right:0}.mr0-m,.nr0-m{margin-right:0}.pt0-m{padding-top:0}.mt0-m,.nt0-m{margin-top:0}.pb0-m{padding-bottom:0}.mb0-m,.nb0-m{margin-bottom:0}.pv0-m{padding-top:0;padding-bottom:0}.mv0-m,.nv0-m{margin-top:0;margin-bottom:0}.ph0-m{padding-left:0;padding-right:0}.mh0-m,.nh0-m{margin-left:0;margin-right:0}.pa1-m{padding:.25rem}.ma1-m{margin:.25rem}.na1-m{margin:-.25rem}.pl1-m{padding-left:.25rem}.ml1-m{margin-left:.25rem}.nl1-m{margin-left:-.25rem}.pr1-m{padding-right:.25rem}.mr1-m{margin-right:.25rem}.nr1-m{margin-right:-.25rem}.pt1-m{padding-top:.25rem}.mt1-m{margin-top:.25rem}.nt1-m{margin-top:-.25rem}.pb1-m{padding-bottom:.25rem}.mb1-m{margin-bottom:.25rem}.nb1-m{margin-bottom:-.25rem}.pv1-m{padding-top:.25rem;padding-bottom:.25rem}.mv1-m{margin-top:.25rem;margin-bottom:.25rem}.nv1-m{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-m{padding-left:.25rem;padding-right:.25rem}.mh1-m{margin-left:.25rem;margin-right:.25rem}.nh1-m{margin-left:-.25rem;margin-right:-.25rem}.pa2-m{padding:.5rem}.ma2-m{margin:.5rem}.na2-m{margin:-.5rem}.pl2-m{padding-left:.5rem}.ml2-m{margin-left:.5rem}.nl2-m{margin-left:-.5rem}.pr2-m{padding-right:.5rem}.mr2-m{margin-right:.5rem}.nr2-m{margin-right:-.5rem}.pt2-m{padding-top:.5rem}.mt2-m{margin-top:.5rem}.nt2-m{margin-top:-.5rem}.pb2-m{padding-bottom:.5rem}.mb2-m{margin-bottom:.5rem}.nb2-m{margin-bottom:-.5rem}.pv2-m{padding-top:.5rem;padding-bottom:.5rem}.mv2-m{margin-top:.5rem;margin-bottom:.5rem}.nv2-m{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-m{padding-left:.5rem;padding-right:.5rem}.mh2-m{margin-left:.5rem;margin-right:.5rem}.nh2-m{margin-left:-.5rem;margin-right:-.5rem}.pa3-m{padding:.75rem}.ma3-m{margin:.75rem}.na3-m{margin:-.75rem}.pl3-m{padding-left:.75rem}.ml3-m{margin-left:.75rem}.nl3-m{margin-left:-.75rem}.pr3-m{padding-right:.75rem}.mr3-m{margin-right:.75rem}.nr3-m{margin-right:-.75rem}.pt3-m{padding-top:.75rem}.mt3-m{margin-top:.75rem}.nt3-m{margin-top:-.75rem}.pb3-m{padding-bottom:.75rem}.mb3-m{margin-bottom:.75rem}.nb3-m{margin-bottom:-.75rem}.pv3-m{padding-top:.75rem;padding-bottom:.75rem}.mv3-m{margin-top:.75rem;margin-bottom:.75rem}.nv3-m{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-m{padding-left:.75rem;padding-right:.75rem}.mh3-m{margin-left:.75rem;margin-right:.75rem}.nh3-m{margin-left:-.75rem;margin-right:-.75rem}.pa4-m{padding:1rem}.ma4-m{margin:1rem}.na4-m{margin:-1rem}.pl4-m{padding-left:1rem}.ml4-m{margin-left:1rem}.nl4-m{margin-left:-1rem}.pr4-m{padding-right:1rem}.mr4-m{margin-right:1rem}.nr4-m{margin-right:-1rem}.pt4-m{padding-top:1rem}.mt4-m{margin-top:1rem}.nt4-m{margin-top:-1rem}.pb4-m{padding-bottom:1rem}.mb4-m{margin-bottom:1rem}.nb4-m{margin-bottom:-1rem}.pv4-m{padding-top:1rem;padding-bottom:1rem}.mv4-m{margin-top:1rem;margin-bottom:1rem}.nv4-m{margin-top:-1rem;margin-bottom:-1rem}.ph4-m{padding-left:1rem;padding-right:1rem}.mh4-m{margin-left:1rem;margin-right:1rem}.nh4-m{margin-left:-1rem;margin-right:-1rem}.pa5-m{padding:1.25rem}.ma5-m{margin:1.25rem}.na5-m{margin:-1.25rem}.pl5-m{padding-left:1.25rem}.ml5-m{margin-left:1.25rem}.nl5-m{margin-left:-1.25rem}.pr5-m{padding-right:1.25rem}.mr5-m{margin-right:1.25rem}.nr5-m{margin-right:-1.25rem}.pt5-m{padding-top:1.25rem}.mt5-m{margin-top:1.25rem}.nt5-m{margin-top:-1.25rem}.pb5-m{padding-bottom:1.25rem}.mb5-m{margin-bottom:1.25rem}.nb5-m{margin-bottom:-1.25rem}.pv5-m{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-m{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-m{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-m{padding-left:1.25rem;padding-right:1.25rem}.mh5-m{margin-left:1.25rem;margin-right:1.25rem}.nh5-m{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-m{padding:1.5rem}.ma6-m{margin:1.5rem}.na6-m{margin:-1.5rem}.pl6-m{padding-left:1.5rem}.ml6-m{margin-left:1.5rem}.nl6-m{margin-left:-1.5rem}.pr6-m{padding-right:1.5rem}.mr6-m{margin-right:1.5rem}.nr6-m{margin-right:-1.5rem}.pt6-m{padding-top:1.5rem}.mt6-m{margin-top:1.5rem}.nt6-m{margin-top:-1.5rem}.pb6-m{padding-bottom:1.5rem}.mb6-m{margin-bottom:1.5rem}.nb6-m{margin-bottom:-1.5rem}.pv6-m{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-m{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-m{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-m{padding-left:1.5rem;padding-right:1.5rem}.mh6-m{margin-left:1.5rem;margin-right:1.5rem}.nh6-m{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-m{padding:2rem}.ma7-m{margin:2rem}.na7-m{margin:-2rem}.pl7-m{padding-left:2rem}.ml7-m{margin-left:2rem}.nl7-m{margin-left:-2rem}.pr7-m{padding-right:2rem}.mr7-m{margin-right:2rem}.nr7-m{margin-right:-2rem}.pt7-m{padding-top:2rem}.mt7-m{margin-top:2rem}.nt7-m{margin-top:-2rem}.pb7-m{padding-bottom:2rem}.mb7-m{margin-bottom:2rem}.nb7-m{margin-bottom:-2rem}.pv7-m{padding-top:2rem;padding-bottom:2rem}.mv7-m{margin-top:2rem;margin-bottom:2rem}.nv7-m{margin-top:-2rem;margin-bottom:-2rem}.ph7-m{padding-left:2rem;padding-right:2rem}.mh7-m{margin-left:2rem;margin-right:2rem}.nh7-m{margin-left:-2rem;margin-right:-2rem}.pa8-m{padding:3rem}.ma8-m{margin:3rem}.na8-m{margin:-3rem}.pl8-m{padding-left:3rem}.ml8-m{margin-left:3rem}.nl8-m{margin-left:-3rem}.pr8-m{padding-right:3rem}.mr8-m{margin-right:3rem}.nr8-m{margin-right:-3rem}.pt8-m{padding-top:3rem}.mt8-m{margin-top:3rem}.nt8-m{margin-top:-3rem}.pb8-m{padding-bottom:3rem}.mb8-m{margin-bottom:3rem}.nb8-m{margin-bottom:-3rem}.pv8-m{padding-top:3rem;padding-bottom:3rem}.mv8-m{margin-top:3rem;margin-bottom:3rem}.nv8-m{margin-top:-3rem;margin-bottom:-3rem}.ph8-m{padding-left:3rem;padding-right:3rem}.mh8-m{margin-left:3rem;margin-right:3rem}.nh8-m{margin-left:-3rem;margin-right:-3rem}.pa9-m{padding:4rem}.ma9-m{margin:4rem}.na9-m{margin:-4rem}.pl9-m{padding-left:4rem}.ml9-m{margin-left:4rem}.nl9-m{margin-left:-4rem}.pr9-m{padding-right:4rem}.mr9-m{margin-right:4rem}.nr9-m{margin-right:-4rem}.pt9-m{padding-top:4rem}.mt9-m{margin-top:4rem}.nt9-m{margin-top:-4rem}.pb9-m{padding-bottom:4rem}.mb9-m{margin-bottom:4rem}.nb9-m{margin-bottom:-4rem}.pv9-m{padding-top:4rem;padding-bottom:4rem}.mv9-m{margin-top:4rem;margin-bottom:4rem}.nv9-m{margin-top:-4rem;margin-bottom:-4rem}.ph9-m{padding-left:4rem;padding-right:4rem}.mh9-m{margin-left:4rem;margin-right:4rem}.nh9-m{margin-left:-4rem;margin-right:-4rem}.pa10-m{padding:6rem}.ma10-m{margin:6rem}.na10-m{margin:-6rem}.pl10-m{padding-left:6rem}.ml10-m{margin-left:6rem}.nl10-m{margin-left:-6rem}.pr10-m{padding-right:6rem}.mr10-m{margin-right:6rem}.nr10-m{margin-right:-6rem}.pt10-m{padding-top:6rem}.mt10-m{margin-top:6rem}.nt10-m{margin-top:-6rem}.pb10-m{padding-bottom:6rem}.mb10-m{margin-bottom:6rem}.nb10-m{margin-bottom:-6rem}.pv10-m{padding-top:6rem;padding-bottom:6rem}.mv10-m{margin-top:6rem;margin-bottom:6rem}.nv10-m{margin-top:-6rem;margin-bottom:-6rem}.ph10-m{padding-left:6rem;padding-right:6rem}.mh10-m{margin-left:6rem;margin-right:6rem}.nh10-m{margin-left:-6rem;margin-right:-6rem}.pa11-m{padding:10rem}.ma11-m{margin:10rem}.na11-m{margin:-10rem}.pl11-m{padding-left:10rem}.ml11-m{margin-left:10rem}.nl11-m{margin-left:-10rem}.pr11-m{padding-right:10rem}.mr11-m{margin-right:10rem}.nr11-m{margin-right:-10rem}.pt11-m{padding-top:10rem}.mt11-m{margin-top:10rem}.nt11-m{margin-top:-10rem}.pb11-m{padding-bottom:10rem}.mb11-m{margin-bottom:10rem}.nb11-m{margin-bottom:-10rem}.pv11-m{padding-top:10rem;padding-bottom:10rem}.mv11-m{margin-top:10rem;margin-bottom:10rem}.nv11-m{margin-top:-10rem;margin-bottom:-10rem}.ph11-m{padding-left:10rem;padding-right:10rem}.mh11-m{margin-left:10rem;margin-right:10rem}.nh11-m{margin-left:-10rem;margin-right:-10rem}.pa12-m{padding:18rem}.ma12-m{margin:18rem}.na12-m{margin:-18rem}.pl12-m{padding-left:18rem}.ml12-m{margin-left:18rem}.nl12-m{margin-left:-18rem}.pr12-m{padding-right:18rem}.mr12-m{margin-right:18rem}.nr12-m{margin-right:-18rem}.pt12-m{padding-top:18rem}.mt12-m{margin-top:18rem}.nt12-m{margin-top:-18rem}.pb12-m{padding-bottom:18rem}.mb12-m{margin-bottom:18rem}.nb12-m{margin-bottom:-18rem}.pv12-m{padding-top:18rem;padding-bottom:18rem}.mv12-m{margin-top:18rem;margin-bottom:18rem}.nv12-m{margin-top:-18rem;margin-bottom:-18rem}.ph12-m{padding-left:18rem;padding-right:18rem}.mh12-m{margin-left:18rem;margin-right:18rem}.nh12-m{margin-left:-18rem;margin-right:-18rem}.top-0-m{top:0}.right-0-m{right:0}.bottom-0-m{bottom:0}.left-0-m{left:0}.top-1-m{top:1rem}.right-1-m{right:1rem}.bottom-1-m{bottom:1rem}.left-1-m{left:1rem}.top-2-m{top:2rem}.right-2-m{right:2rem}.bottom-2-m{bottom:2rem}.left-2-m{left:2rem}.top--1-m{top:-1rem}.right--1-m{right:-1rem}.bottom--1-m{bottom:-1rem}.left--1-m{left:-1rem}.top--2-m{top:-2rem}.right--2-m{right:-2rem}.bottom--2-m{bottom:-2rem}.left--2-m{left:-2rem}.absolute--fill-m{top:0;right:0;bottom:0;left:0}.cf-m:after,.cf-m:before{content:" ";display:table}.cf-m:after{clear:both}.cf-m{*zoom:1}.cl-m{clear:left}.cr-m{clear:right}.cb-m{clear:both}.cn-m{clear:none}.dn-m{display:none}.di-m{display:inline}.db-m{display:block}.dib-m{display:inline-block}.dit-m{display:inline-table}.dt-m{display:table}.dtc-m{display:table-cell}.dt-row-m{display:table-row}.dt-row-group-m{display:table-row-group}.dt-column-m{display:table-column}.dt-column-group-m{display:table-column-group}.dt--fixed-m{table-layout:fixed;width:100%}.flex-m{display:flex}.inline-flex-m{display:inline-flex}.flex-auto-m{flex:1 1 auto;min-width:0;min-height:0}.flex-none-m{flex:none}.flex-column-m{flex-direction:column}.flex-row-m{flex-direction:row}.flex-wrap-m{flex-wrap:wrap}.flex-nowrap-m{flex-wrap:nowrap}.flex-wrap-reverse-m{flex-wrap:wrap-reverse}.flex-column-reverse-m{flex-direction:column-reverse}.flex-row-reverse-m{flex-direction:row-reverse}.items-start-m{align-items:flex-start}.items-end-m{align-items:flex-end}.items-center-m{align-items:center}.items-baseline-m{align-items:baseline}.items-stretch-m{align-items:stretch}.self-start-m{align-self:flex-start}.self-end-m{align-self:flex-end}.self-center-m{align-self:center}.self-baseline-m{align-self:baseline}.self-stretch-m{align-self:stretch}.justify-start-m{justify-content:flex-start}.justify-end-m{justify-content:flex-end}.justify-center-m{justify-content:center}.justify-between-m{justify-content:space-between}.justify-around-m{justify-content:space-around}.content-start-m{align-content:flex-start}.content-end-m{align-content:flex-end}.content-center-m{align-content:center}.content-between-m{align-content:space-between}.content-around-m{align-content:space-around}.content-stretch-m{align-content:stretch}.order-0-m{order:0}.order-1-m{order:1}.order-2-m{order:2}.order-3-m{order:3}.order-4-m{order:4}.order-5-m{order:5}.order-6-m{order:6}.order-7-m{order:7}.order-8-m{order:8}.order-last-m{order:99999}.flex-grow-0-m{flex-grow:0}.flex-grow-1-m{flex-grow:1}.flex-shrink-0-m{flex-shrink:0}.flex-shrink-1-m{flex-shrink:1}.fl-m{float:left}.fl-m,.fr-m{_display:inline}.fr-m{float:right}.fn-m{float:none}.i-m{font-style:italic}.fs-normal-m{font-style:normal}.normal-m{font-weight:400}.b-m{font-weight:700}.fw1-m{font-weight:100}.fw2-m{font-weight:200}.fw3-m{font-weight:300}.fw4-m{font-weight:400}.fw5-m{font-weight:500}.fw6-m{font-weight:600}.fw7-m{font-weight:700}.fw8-m{font-weight:800}.fw9-m{font-weight:900}.h1-m{height:1rem}.h2-m{height:2rem}.h3-m{height:4rem}.h4-m{height:8rem}.h5-m{height:16rem}.h-25-m{height:25%}.h-50-m{height:50%}.h-75-m{height:75%}.h-100-m{height:100%}.min-h-100-m{min-height:100%}.vh-25-m{height:25vh}.vh-50-m{height:50vh}.vh-75-m{height:75vh}.vh-100-m{height:100vh}.min-vh-100-m{min-height:100vh}.h-auto-m{height:auto}.h-inherit-m{height:inherit}.tracked-m{letter-spacing:.1em}.tracked-tight-m{letter-spacing:-.05em}.tracked-mega-m{letter-spacing:.25em}.lh-solid-m{line-height:1.333333}.lh-title-m{line-height:1.5}.lh-copy-m{line-height:1.666666}.mw1-m{max-width:1rem}.mw2-m{max-width:2rem}.mw3-m{max-width:4rem}.mw4-m{max-width:8rem}.mw5-m{max-width:16rem}.mw6-m{max-width:32rem}.mw7-m{max-width:48rem}.mw8-m{max-width:64rem}.mw9-m{max-width:96rem}.mw-none-m{max-width:none}.mw-100-m{max-width:100%}.o-100-m{opacity:1}.o-90-m{opacity:.9}.o-80-m{opacity:.8}.o-70-m{opacity:.7}.o-60-m{opacity:.6}.o-50-m{opacity:.5}.o-40-m{opacity:.4}.o-30-m{opacity:.3}.o-20-m{opacity:.2}.o-10-m{opacity:.1}.o-05-m{opacity:.05}.o-025-m{opacity:.025}.o-0-m{opacity:0}.rotate-45-m{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-m{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-m{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-m{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-m{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-m{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-m{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-m{outline:1px solid}.outline-transparent-m{outline:1px solid transparent}.outline-0-m{outline:0}.overflow-visible-m{overflow:visible}.overflow-hidden-m{overflow:hidden}.overflow-scroll-m{overflow:scroll}.overflow-auto-m{overflow:auto}.overflow-x-visible-m{overflow-x:visible}.overflow-x-hidden-m{overflow-x:hidden}.overflow-x-scroll-m{overflow-x:scroll}.overflow-x-auto-m{overflow-x:auto}.overflow-y-visible-m{overflow-y:visible}.overflow-y-hidden-m{overflow-y:hidden}.overflow-y-scroll-m{overflow-y:scroll}.overflow-y-auto-m{overflow-y:auto}.static-m{position:static}.relative-m{position:relative}.absolute-m{position:absolute}.fixed-m{position:fixed}.strike-m{text-decoration:line-through}.underline-m{text-decoration:underline}.no-underline-m{text-decoration:none}.tl-m{text-align:left}.tr-m{text-align:right}.tc-m{text-align:center}.tj-m{text-align:justify}.ttc-m{text-transform:capitalize}.ttl-m{text-transform:lowercase}.ttu-m{text-transform:uppercase}.ttn-m{text-transform:none}.f1-m{font-size:4.5rem}.f2-m{font-size:4rem}.f3-m{font-size:3rem}.f4-m{font-size:2rem}.f5-m{font-size:1.5rem}.f6-m{font-size:1.125rem}.f7-m{font-size:1rem}.f8-m{font-size:.875rem}.f9-m{font-size:.75rem}.measure-m{max-width:30em}.measure-wide-m{max-width:34em}.measure-narrow-m{max-width:20em}.small-caps-m{font-variant:small-caps}.indent-m{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-m{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-m{white-space:normal}.nowrap-m{white-space:nowrap}.pre-m{white-space:pre}.w1-m{width:1rem}.w2-m{width:2rem}.w3-m{width:4rem}.w4-m{width:8rem}.w5-m{width:16rem}.w-10-m{width:10%}.w-20-m{width:20%}.w-25-m{width:25%}.w-30-m{width:30%}.w-33-m{width:33%}.w-34-m{width:34%}.w-40-m{width:40%}.w-50-m{width:50%}.w-60-m{width:60%}.w-70-m{width:70%}.w-75-m{width:75%}.w-80-m{width:80%}.w-90-m{width:90%}.w-100-m{width:100%}.w-third-m{width:33.33333%}.w-two-thirds-m{width:66.66667%}.w-auto-m{width:auto}}@media screen and (min-width:46.875em) and (max-width:60em){.aspect-ratio-l{height:0;position:relative}.aspect-ratio--16x9-l{padding-bottom:56.25%}.aspect-ratio--9x16-l{padding-bottom:177.77%}.aspect-ratio--4x3-l{padding-bottom:75%}.aspect-ratio--3x4-l{padding-bottom:133.33%}.aspect-ratio--6x4-l{padding-bottom:66.6%}.aspect-ratio--4x6-l{padding-bottom:150%}.aspect-ratio--8x5-l{padding-bottom:62.5%}.aspect-ratio--5x8-l{padding-bottom:160%}.aspect-ratio--7x5-l{padding-bottom:71.42%}.aspect-ratio--5x7-l{padding-bottom:140%}.aspect-ratio--1x1-l{padding-bottom:100%}.aspect-ratio--object-l{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-l{background-size:cover!important}.contain-l{background-size:contain!important}.bg-center-l{background-position:50%}.bg-center-l,.bg-top-l{background-repeat:no-repeat}.bg-top-l{background-position:top}.bg-right-l{background-position:100%}.bg-bottom-l,.bg-right-l{background-repeat:no-repeat}.bg-bottom-l{background-position:bottom}.bg-left-l{background-repeat:no-repeat;background-position:0}.ba-l{border-style:solid;border-width:1px}.bt-l{border-top-style:solid;border-top-width:1px}.br-l{border-right-style:solid;border-right-width:1px}.bb-l{border-bottom-style:solid;border-bottom-width:1px}.bl-l{border-left-style:solid;border-left-width:1px}.bn-l{border-style:none;border-width:0}.br0-l{border-radius:0}.br1-l{border-radius:.125rem}.br2-l{border-radius:.25rem}.br3-l{border-radius:.5rem}.br4-l{border-radius:1rem}.br-100-l{border-radius:100%}.br-pill-l{border-radius:9999px}.br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.br--top-l{border-bottom-right-radius:0}.br--right-l,.br--top-l{border-bottom-left-radius:0}.br--right-l{border-top-left-radius:0}.br--left-l{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-l{border-style:dotted}.b--dashed-l{border-style:dashed}.b--solid-l{border-style:solid}.b--none-l{border-style:none}.bw0-l{border-width:0}.bw1-l{border-width:.125rem}.bw2-l{border-width:.25rem}.bw3-l{border-width:.5rem}.bw4-l{border-width:1rem}.bw5-l{border-width:2rem}.bt-0-l{border-top-width:0}.br-0-l{border-right-width:0}.bb-0-l{border-bottom-width:0}.bl-0-l{border-left-width:0}.shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-l{padding:0}.ma0-l,.na0-l{margin:0}.pl0-l{padding-left:0}.ml0-l,.nl0-l{margin-left:0}.pr0-l{padding-right:0}.mr0-l,.nr0-l{margin-right:0}.pt0-l{padding-top:0}.mt0-l,.nt0-l{margin-top:0}.pb0-l{padding-bottom:0}.mb0-l,.nb0-l{margin-bottom:0}.pv0-l{padding-top:0;padding-bottom:0}.mv0-l,.nv0-l{margin-top:0;margin-bottom:0}.ph0-l{padding-left:0;padding-right:0}.mh0-l,.nh0-l{margin-left:0;margin-right:0}.pa1-l{padding:.25rem}.ma1-l{margin:.25rem}.na1-l{margin:-.25rem}.pl1-l{padding-left:.25rem}.ml1-l{margin-left:.25rem}.nl1-l{margin-left:-.25rem}.pr1-l{padding-right:.25rem}.mr1-l{margin-right:.25rem}.nr1-l{margin-right:-.25rem}.pt1-l{padding-top:.25rem}.mt1-l{margin-top:.25rem}.nt1-l{margin-top:-.25rem}.pb1-l{padding-bottom:.25rem}.mb1-l{margin-bottom:.25rem}.nb1-l{margin-bottom:-.25rem}.pv1-l{padding-top:.25rem;padding-bottom:.25rem}.mv1-l{margin-top:.25rem;margin-bottom:.25rem}.nv1-l{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-l{padding-left:.25rem;padding-right:.25rem}.mh1-l{margin-left:.25rem;margin-right:.25rem}.nh1-l{margin-left:-.25rem;margin-right:-.25rem}.pa2-l{padding:.5rem}.ma2-l{margin:.5rem}.na2-l{margin:-.5rem}.pl2-l{padding-left:.5rem}.ml2-l{margin-left:.5rem}.nl2-l{margin-left:-.5rem}.pr2-l{padding-right:.5rem}.mr2-l{margin-right:.5rem}.nr2-l{margin-right:-.5rem}.pt2-l{padding-top:.5rem}.mt2-l{margin-top:.5rem}.nt2-l{margin-top:-.5rem}.pb2-l{padding-bottom:.5rem}.mb2-l{margin-bottom:.5rem}.nb2-l{margin-bottom:-.5rem}.pv2-l{padding-top:.5rem;padding-bottom:.5rem}.mv2-l{margin-top:.5rem;margin-bottom:.5rem}.nv2-l{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-l{padding-left:.5rem;padding-right:.5rem}.mh2-l{margin-left:.5rem;margin-right:.5rem}.nh2-l{margin-left:-.5rem;margin-right:-.5rem}.pa3-l{padding:.75rem}.ma3-l{margin:.75rem}.na3-l{margin:-.75rem}.pl3-l{padding-left:.75rem}.ml3-l{margin-left:.75rem}.nl3-l{margin-left:-.75rem}.pr3-l{padding-right:.75rem}.mr3-l{margin-right:.75rem}.nr3-l{margin-right:-.75rem}.pt3-l{padding-top:.75rem}.mt3-l{margin-top:.75rem}.nt3-l{margin-top:-.75rem}.pb3-l{padding-bottom:.75rem}.mb3-l{margin-bottom:.75rem}.nb3-l{margin-bottom:-.75rem}.pv3-l{padding-top:.75rem;padding-bottom:.75rem}.mv3-l{margin-top:.75rem;margin-bottom:.75rem}.nv3-l{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-l{padding-left:.75rem;padding-right:.75rem}.mh3-l{margin-left:.75rem;margin-right:.75rem}.nh3-l{margin-left:-.75rem;margin-right:-.75rem}.pa4-l{padding:1rem}.ma4-l{margin:1rem}.na4-l{margin:-1rem}.pl4-l{padding-left:1rem}.ml4-l{margin-left:1rem}.nl4-l{margin-left:-1rem}.pr4-l{padding-right:1rem}.mr4-l{margin-right:1rem}.nr4-l{margin-right:-1rem}.pt4-l{padding-top:1rem}.mt4-l{margin-top:1rem}.nt4-l{margin-top:-1rem}.pb4-l{padding-bottom:1rem}.mb4-l{margin-bottom:1rem}.nb4-l{margin-bottom:-1rem}.pv4-l{padding-top:1rem;padding-bottom:1rem}.mv4-l{margin-top:1rem;margin-bottom:1rem}.nv4-l{margin-top:-1rem;margin-bottom:-1rem}.ph4-l{padding-left:1rem;padding-right:1rem}.mh4-l{margin-left:1rem;margin-right:1rem}.nh4-l{margin-left:-1rem;margin-right:-1rem}.pa5-l{padding:1.25rem}.ma5-l{margin:1.25rem}.na5-l{margin:-1.25rem}.pl5-l{padding-left:1.25rem}.ml5-l{margin-left:1.25rem}.nl5-l{margin-left:-1.25rem}.pr5-l{padding-right:1.25rem}.mr5-l{margin-right:1.25rem}.nr5-l{margin-right:-1.25rem}.pt5-l{padding-top:1.25rem}.mt5-l{margin-top:1.25rem}.nt5-l{margin-top:-1.25rem}.pb5-l{padding-bottom:1.25rem}.mb5-l{margin-bottom:1.25rem}.nb5-l{margin-bottom:-1.25rem}.pv5-l{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-l{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-l{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-l{padding-left:1.25rem;padding-right:1.25rem}.mh5-l{margin-left:1.25rem;margin-right:1.25rem}.nh5-l{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-l{padding:1.5rem}.ma6-l{margin:1.5rem}.na6-l{margin:-1.5rem}.pl6-l{padding-left:1.5rem}.ml6-l{margin-left:1.5rem}.nl6-l{margin-left:-1.5rem}.pr6-l{padding-right:1.5rem}.mr6-l{margin-right:1.5rem}.nr6-l{margin-right:-1.5rem}.pt6-l{padding-top:1.5rem}.mt6-l{margin-top:1.5rem}.nt6-l{margin-top:-1.5rem}.pb6-l{padding-bottom:1.5rem}.mb6-l{margin-bottom:1.5rem}.nb6-l{margin-bottom:-1.5rem}.pv6-l{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-l{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-l{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-l{padding-left:1.5rem;padding-right:1.5rem}.mh6-l{margin-left:1.5rem;margin-right:1.5rem}.nh6-l{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-l{padding:2rem}.ma7-l{margin:2rem}.na7-l{margin:-2rem}.pl7-l{padding-left:2rem}.ml7-l{margin-left:2rem}.nl7-l{margin-left:-2rem}.pr7-l{padding-right:2rem}.mr7-l{margin-right:2rem}.nr7-l{margin-right:-2rem}.pt7-l{padding-top:2rem}.mt7-l{margin-top:2rem}.nt7-l{margin-top:-2rem}.pb7-l{padding-bottom:2rem}.mb7-l{margin-bottom:2rem}.nb7-l{margin-bottom:-2rem}.pv7-l{padding-top:2rem;padding-bottom:2rem}.mv7-l{margin-top:2rem;margin-bottom:2rem}.nv7-l{margin-top:-2rem;margin-bottom:-2rem}.ph7-l{padding-left:2rem;padding-right:2rem}.mh7-l{margin-left:2rem;margin-right:2rem}.nh7-l{margin-left:-2rem;margin-right:-2rem}.pa8-l{padding:3rem}.ma8-l{margin:3rem}.na8-l{margin:-3rem}.pl8-l{padding-left:3rem}.ml8-l{margin-left:3rem}.nl8-l{margin-left:-3rem}.pr8-l{padding-right:3rem}.mr8-l{margin-right:3rem}.nr8-l{margin-right:-3rem}.pt8-l{padding-top:3rem}.mt8-l{margin-top:3rem}.nt8-l{margin-top:-3rem}.pb8-l{padding-bottom:3rem}.mb8-l{margin-bottom:3rem}.nb8-l{margin-bottom:-3rem}.pv8-l{padding-top:3rem;padding-bottom:3rem}.mv8-l{margin-top:3rem;margin-bottom:3rem}.nv8-l{margin-top:-3rem;margin-bottom:-3rem}.ph8-l{padding-left:3rem;padding-right:3rem}.mh8-l{margin-left:3rem;margin-right:3rem}.nh8-l{margin-left:-3rem;margin-right:-3rem}.pa9-l{padding:4rem}.ma9-l{margin:4rem}.na9-l{margin:-4rem}.pl9-l{padding-left:4rem}.ml9-l{margin-left:4rem}.nl9-l{margin-left:-4rem}.pr9-l{padding-right:4rem}.mr9-l{margin-right:4rem}.nr9-l{margin-right:-4rem}.pt9-l{padding-top:4rem}.mt9-l{margin-top:4rem}.nt9-l{margin-top:-4rem}.pb9-l{padding-bottom:4rem}.mb9-l{margin-bottom:4rem}.nb9-l{margin-bottom:-4rem}.pv9-l{padding-top:4rem;padding-bottom:4rem}.mv9-l{margin-top:4rem;margin-bottom:4rem}.nv9-l{margin-top:-4rem;margin-bottom:-4rem}.ph9-l{padding-left:4rem;padding-right:4rem}.mh9-l{margin-left:4rem;margin-right:4rem}.nh9-l{margin-left:-4rem;margin-right:-4rem}.pa10-l{padding:6rem}.ma10-l{margin:6rem}.na10-l{margin:-6rem}.pl10-l{padding-left:6rem}.ml10-l{margin-left:6rem}.nl10-l{margin-left:-6rem}.pr10-l{padding-right:6rem}.mr10-l{margin-right:6rem}.nr10-l{margin-right:-6rem}.pt10-l{padding-top:6rem}.mt10-l{margin-top:6rem}.nt10-l{margin-top:-6rem}.pb10-l{padding-bottom:6rem}.mb10-l{margin-bottom:6rem}.nb10-l{margin-bottom:-6rem}.pv10-l{padding-top:6rem;padding-bottom:6rem}.mv10-l{margin-top:6rem;margin-bottom:6rem}.nv10-l{margin-top:-6rem;margin-bottom:-6rem}.ph10-l{padding-left:6rem;padding-right:6rem}.mh10-l{margin-left:6rem;margin-right:6rem}.nh10-l{margin-left:-6rem;margin-right:-6rem}.pa11-l{padding:10rem}.ma11-l{margin:10rem}.na11-l{margin:-10rem}.pl11-l{padding-left:10rem}.ml11-l{margin-left:10rem}.nl11-l{margin-left:-10rem}.pr11-l{padding-right:10rem}.mr11-l{margin-right:10rem}.nr11-l{margin-right:-10rem}.pt11-l{padding-top:10rem}.mt11-l{margin-top:10rem}.nt11-l{margin-top:-10rem}.pb11-l{padding-bottom:10rem}.mb11-l{margin-bottom:10rem}.nb11-l{margin-bottom:-10rem}.pv11-l{padding-top:10rem;padding-bottom:10rem}.mv11-l{margin-top:10rem;margin-bottom:10rem}.nv11-l{margin-top:-10rem;margin-bottom:-10rem}.ph11-l{padding-left:10rem;padding-right:10rem}.mh11-l{margin-left:10rem;margin-right:10rem}.nh11-l{margin-left:-10rem;margin-right:-10rem}.pa12-l{padding:18rem}.ma12-l{margin:18rem}.na12-l{margin:-18rem}.pl12-l{padding-left:18rem}.ml12-l{margin-left:18rem}.nl12-l{margin-left:-18rem}.pr12-l{padding-right:18rem}.mr12-l{margin-right:18rem}.nr12-l{margin-right:-18rem}.pt12-l{padding-top:18rem}.mt12-l{margin-top:18rem}.nt12-l{margin-top:-18rem}.pb12-l{padding-bottom:18rem}.mb12-l{margin-bottom:18rem}.nb12-l{margin-bottom:-18rem}.pv12-l{padding-top:18rem;padding-bottom:18rem}.mv12-l{margin-top:18rem;margin-bottom:18rem}.nv12-l{margin-top:-18rem;margin-bottom:-18rem}.ph12-l{padding-left:18rem;padding-right:18rem}.mh12-l{margin-left:18rem;margin-right:18rem}.nh12-l{margin-left:-18rem;margin-right:-18rem}.top-0-l{top:0}.right-0-l{right:0}.bottom-0-l{bottom:0}.left-0-l{left:0}.top-1-l{top:1rem}.right-1-l{right:1rem}.bottom-1-l{bottom:1rem}.left-1-l{left:1rem}.top-2-l{top:2rem}.right-2-l{right:2rem}.bottom-2-l{bottom:2rem}.left-2-l{left:2rem}.top--1-l{top:-1rem}.right--1-l{right:-1rem}.bottom--1-l{bottom:-1rem}.left--1-l{left:-1rem}.top--2-l{top:-2rem}.right--2-l{right:-2rem}.bottom--2-l{bottom:-2rem}.left--2-l{left:-2rem}.absolute--fill-l{top:0;right:0;bottom:0;left:0}.cf-l:after,.cf-l:before{content:" ";display:table}.cf-l:after{clear:both}.cf-l{*zoom:1}.cl-l{clear:left}.cr-l{clear:right}.cb-l{clear:both}.cn-l{clear:none}.dn-l{display:none}.di-l{display:inline}.db-l{display:block}.dib-l{display:inline-block}.dit-l{display:inline-table}.dt-l{display:table}.dtc-l{display:table-cell}.dt-row-l{display:table-row}.dt-row-group-l{display:table-row-group}.dt-column-l{display:table-column}.dt-column-group-l{display:table-column-group}.dt--fixed-l{table-layout:fixed;width:100%}.flex-l{display:flex}.inline-flex-l{display:inline-flex}.flex-auto-l{flex:1 1 auto;min-width:0;min-height:0}.flex-none-l{flex:none}.flex-column-l{flex-direction:column}.flex-row-l{flex-direction:row}.flex-wrap-l{flex-wrap:wrap}.flex-nowrap-l{flex-wrap:nowrap}.flex-wrap-reverse-l{flex-wrap:wrap-reverse}.flex-column-reverse-l{flex-direction:column-reverse}.flex-row-reverse-l{flex-direction:row-reverse}.items-start-l{align-items:flex-start}.items-end-l{align-items:flex-end}.items-center-l{align-items:center}.items-baseline-l{align-items:baseline}.items-stretch-l{align-items:stretch}.self-start-l{align-self:flex-start}.self-end-l{align-self:flex-end}.self-center-l{align-self:center}.self-baseline-l{align-self:baseline}.self-stretch-l{align-self:stretch}.justify-start-l{justify-content:flex-start}.justify-end-l{justify-content:flex-end}.justify-center-l{justify-content:center}.justify-between-l{justify-content:space-between}.justify-around-l{justify-content:space-around}.content-start-l{align-content:flex-start}.content-end-l{align-content:flex-end}.content-center-l{align-content:center}.content-between-l{align-content:space-between}.content-around-l{align-content:space-around}.content-stretch-l{align-content:stretch}.order-0-l{order:0}.order-1-l{order:1}.order-2-l{order:2}.order-3-l{order:3}.order-4-l{order:4}.order-5-l{order:5}.order-6-l{order:6}.order-7-l{order:7}.order-8-l{order:8}.order-last-l{order:99999}.flex-grow-0-l{flex-grow:0}.flex-grow-1-l{flex-grow:1}.flex-shrink-0-l{flex-shrink:0}.flex-shrink-1-l{flex-shrink:1}.fl-l{float:left}.fl-l,.fr-l{_display:inline}.fr-l{float:right}.fn-l{float:none}.i-l{font-style:italic}.fs-normal-l{font-style:normal}.normal-l{font-weight:400}.b-l{font-weight:700}.fw1-l{font-weight:100}.fw2-l{font-weight:200}.fw3-l{font-weight:300}.fw4-l{font-weight:400}.fw5-l{font-weight:500}.fw6-l{font-weight:600}.fw7-l{font-weight:700}.fw8-l{font-weight:800}.fw9-l{font-weight:900}.h1-l{height:1rem}.h2-l{height:2rem}.h3-l{height:4rem}.h4-l{height:8rem}.h5-l{height:16rem}.h-25-l{height:25%}.h-50-l{height:50%}.h-75-l{height:75%}.h-100-l{height:100%}.min-h-100-l{min-height:100%}.vh-25-l{height:25vh}.vh-50-l{height:50vh}.vh-75-l{height:75vh}.vh-100-l{height:100vh}.min-vh-100-l{min-height:100vh}.h-auto-l{height:auto}.h-inherit-l{height:inherit}.tracked-l{letter-spacing:.1em}.tracked-tight-l{letter-spacing:-.05em}.tracked-mega-l{letter-spacing:.25em}.lh-solid-l{line-height:1.333333}.lh-title-l{line-height:1.5}.lh-copy-l{line-height:1.666666}.mw1-l{max-width:1rem}.mw2-l{max-width:2rem}.mw3-l{max-width:4rem}.mw4-l{max-width:8rem}.mw5-l{max-width:16rem}.mw6-l{max-width:32rem}.mw7-l{max-width:48rem}.mw8-l{max-width:64rem}.mw9-l{max-width:96rem}.mw-none-l{max-width:none}.mw-100-l{max-width:100%}.o-100-l{opacity:1}.o-90-l{opacity:.9}.o-80-l{opacity:.8}.o-70-l{opacity:.7}.o-60-l{opacity:.6}.o-50-l{opacity:.5}.o-40-l{opacity:.4}.o-30-l{opacity:.3}.o-20-l{opacity:.2}.o-10-l{opacity:.1}.o-05-l{opacity:.05}.o-025-l{opacity:.025}.o-0-l{opacity:0}.rotate-45-l{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-l{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-l{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-l{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-l{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-l{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-l{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-l{outline:1px solid}.outline-transparent-l{outline:1px solid transparent}.outline-0-l{outline:0}.overflow-visible-l{overflow:visible}.overflow-hidden-l{overflow:hidden}.overflow-scroll-l{overflow:scroll}.overflow-auto-l{overflow:auto}.overflow-x-visible-l{overflow-x:visible}.overflow-x-hidden-l{overflow-x:hidden}.overflow-x-scroll-l{overflow-x:scroll}.overflow-x-auto-l{overflow-x:auto}.overflow-y-visible-l{overflow-y:visible}.overflow-y-hidden-l{overflow-y:hidden}.overflow-y-scroll-l{overflow-y:scroll}.overflow-y-auto-l{overflow-y:auto}.static-l{position:static}.relative-l{position:relative}.absolute-l{position:absolute}.fixed-l{position:fixed}.strike-l{text-decoration:line-through}.underline-l{text-decoration:underline}.no-underline-l{text-decoration:none}.tl-l{text-align:left}.tr-l{text-align:right}.tc-l{text-align:center}.tj-l{text-align:justify}.ttc-l{text-transform:capitalize}.ttl-l{text-transform:lowercase}.ttu-l{text-transform:uppercase}.ttn-l{text-transform:none}.f1-l{font-size:4.5rem}.f2-l{font-size:4rem}.f3-l{font-size:3rem}.f4-l{font-size:2rem}.f5-l{font-size:1.5rem}.f6-l{font-size:1.125rem}.f7-l{font-size:1rem}.f8-l{font-size:.875rem}.f9-l{font-size:.75rem}.measure-l{max-width:30em}.measure-wide-l{max-width:34em}.measure-narrow-l{max-width:20em}.small-caps-l{font-variant:small-caps}.indent-l{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-l{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-l{white-space:normal}.nowrap-l{white-space:nowrap}.pre-l{white-space:pre}.w1-l{width:1rem}.w2-l{width:2rem}.w3-l{width:4rem}.w4-l{width:8rem}.w5-l{width:16rem}.w-10-l{width:10%}.w-20-l{width:20%}.w-25-l{width:25%}.w-30-l{width:30%}.w-33-l{width:33%}.w-34-l{width:34%}.w-40-l{width:40%}.w-50-l{width:50%}.w-60-l{width:60%}.w-70-l{width:70%}.w-75-l{width:75%}.w-80-l{width:80%}.w-90-l{width:90%}.w-100-l{width:100%}.w-third-l{width:33.33333%}.w-two-thirds-l{width:66.66667%}.w-auto-l{width:auto}}@media screen and (min-width:60em){.aspect-ratio-xl{height:0;position:relative}.aspect-ratio--16x9-xl{padding-bottom:56.25%}.aspect-ratio--9x16-xl{padding-bottom:177.77%}.aspect-ratio--4x3-xl{padding-bottom:75%}.aspect-ratio--3x4-xl{padding-bottom:133.33%}.aspect-ratio--6x4-xl{padding-bottom:66.6%}.aspect-ratio--4x6-xl{padding-bottom:150%}.aspect-ratio--8x5-xl{padding-bottom:62.5%}.aspect-ratio--5x8-xl{padding-bottom:160%}.aspect-ratio--7x5-xl{padding-bottom:71.42%}.aspect-ratio--5x7-xl{padding-bottom:140%}.aspect-ratio--1x1-xl{padding-bottom:100%}.aspect-ratio--object-xl{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-xl{background-size:cover!important}.contain-xl{background-size:contain!important}.bg-center-xl{background-position:50%}.bg-center-xl,.bg-top-xl{background-repeat:no-repeat}.bg-top-xl{background-position:top}.bg-right-xl{background-position:100%}.bg-bottom-xl,.bg-right-xl{background-repeat:no-repeat}.bg-bottom-xl{background-position:bottom}.bg-left-xl{background-repeat:no-repeat;background-position:0}.ba-xl{border-style:solid;border-width:1px}.bt-xl{border-top-style:solid;border-top-width:1px}.br-xl{border-right-style:solid;border-right-width:1px}.bb-xl{border-bottom-style:solid;border-bottom-width:1px}.bl-xl{border-left-style:solid;border-left-width:1px}.bn-xl{border-style:none;border-width:0}.br0-xl{border-radius:0}.br1-xl{border-radius:.125rem}.br2-xl{border-radius:.25rem}.br3-xl{border-radius:.5rem}.br4-xl{border-radius:1rem}.br-100-xl{border-radius:100%}.br-pill-xl{border-radius:9999px}.br--bottom-xl{border-top-left-radius:0;border-top-right-radius:0}.br--top-xl{border-bottom-right-radius:0}.br--right-xl,.br--top-xl{border-bottom-left-radius:0}.br--right-xl{border-top-left-radius:0}.br--left-xl{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-xl{border-style:dotted}.b--dashed-xl{border-style:dashed}.b--solid-xl{border-style:solid}.b--none-xl{border-style:none}.bw0-xl{border-width:0}.bw1-xl{border-width:.125rem}.bw2-xl{border-width:.25rem}.bw3-xl{border-width:.5rem}.bw4-xl{border-width:1rem}.bw5-xl{border-width:2rem}.bt-0-xl{border-top-width:0}.br-0-xl{border-right-width:0}.bb-0-xl{border-bottom-width:0}.bl-0-xl{border-left-width:0}.shadow-1-xl{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-xl{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-xl{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-xl{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-xl{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-xl{padding:0}.ma0-xl,.na0-xl{margin:0}.pl0-xl{padding-left:0}.ml0-xl,.nl0-xl{margin-left:0}.pr0-xl{padding-right:0}.mr0-xl,.nr0-xl{margin-right:0}.pt0-xl{padding-top:0}.mt0-xl,.nt0-xl{margin-top:0}.pb0-xl{padding-bottom:0}.mb0-xl,.nb0-xl{margin-bottom:0}.pv0-xl{padding-top:0;padding-bottom:0}.mv0-xl,.nv0-xl{margin-top:0;margin-bottom:0}.ph0-xl{padding-left:0;padding-right:0}.mh0-xl,.nh0-xl{margin-left:0;margin-right:0}.pa1-xl{padding:.25rem}.ma1-xl{margin:.25rem}.na1-xl{margin:-.25rem}.pl1-xl{padding-left:.25rem}.ml1-xl{margin-left:.25rem}.nl1-xl{margin-left:-.25rem}.pr1-xl{padding-right:.25rem}.mr1-xl{margin-right:.25rem}.nr1-xl{margin-right:-.25rem}.pt1-xl{padding-top:.25rem}.mt1-xl{margin-top:.25rem}.nt1-xl{margin-top:-.25rem}.pb1-xl{padding-bottom:.25rem}.mb1-xl{margin-bottom:.25rem}.nb1-xl{margin-bottom:-.25rem}.pv1-xl{padding-top:.25rem;padding-bottom:.25rem}.mv1-xl{margin-top:.25rem;margin-bottom:.25rem}.nv1-xl{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-xl{padding-left:.25rem;padding-right:.25rem}.mh1-xl{margin-left:.25rem;margin-right:.25rem}.nh1-xl{margin-left:-.25rem;margin-right:-.25rem}.pa2-xl{padding:.5rem}.ma2-xl{margin:.5rem}.na2-xl{margin:-.5rem}.pl2-xl{padding-left:.5rem}.ml2-xl{margin-left:.5rem}.nl2-xl{margin-left:-.5rem}.pr2-xl{padding-right:.5rem}.mr2-xl{margin-right:.5rem}.nr2-xl{margin-right:-.5rem}.pt2-xl{padding-top:.5rem}.mt2-xl{margin-top:.5rem}.nt2-xl{margin-top:-.5rem}.pb2-xl{padding-bottom:.5rem}.mb2-xl{margin-bottom:.5rem}.nb2-xl{margin-bottom:-.5rem}.pv2-xl{padding-top:.5rem;padding-bottom:.5rem}.mv2-xl{margin-top:.5rem;margin-bottom:.5rem}.nv2-xl{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-xl{padding-left:.5rem;padding-right:.5rem}.mh2-xl{margin-left:.5rem;margin-right:.5rem}.nh2-xl{margin-left:-.5rem;margin-right:-.5rem}.pa3-xl{padding:.75rem}.ma3-xl{margin:.75rem}.na3-xl{margin:-.75rem}.pl3-xl{padding-left:.75rem}.ml3-xl{margin-left:.75rem}.nl3-xl{margin-left:-.75rem}.pr3-xl{padding-right:.75rem}.mr3-xl{margin-right:.75rem}.nr3-xl{margin-right:-.75rem}.pt3-xl{padding-top:.75rem}.mt3-xl{margin-top:.75rem}.nt3-xl{margin-top:-.75rem}.pb3-xl{padding-bottom:.75rem}.mb3-xl{margin-bottom:.75rem}.nb3-xl{margin-bottom:-.75rem}.pv3-xl{padding-top:.75rem;padding-bottom:.75rem}.mv3-xl{margin-top:.75rem;margin-bottom:.75rem}.nv3-xl{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-xl{padding-left:.75rem;padding-right:.75rem}.mh3-xl{margin-left:.75rem;margin-right:.75rem}.nh3-xl{margin-left:-.75rem;margin-right:-.75rem}.pa4-xl{padding:1rem}.ma4-xl{margin:1rem}.na4-xl{margin:-1rem}.pl4-xl{padding-left:1rem}.ml4-xl{margin-left:1rem}.nl4-xl{margin-left:-1rem}.pr4-xl{padding-right:1rem}.mr4-xl{margin-right:1rem}.nr4-xl{margin-right:-1rem}.pt4-xl{padding-top:1rem}.mt4-xl{margin-top:1rem}.nt4-xl{margin-top:-1rem}.pb4-xl{padding-bottom:1rem}.mb4-xl{margin-bottom:1rem}.nb4-xl{margin-bottom:-1rem}.pv4-xl{padding-top:1rem;padding-bottom:1rem}.mv4-xl{margin-top:1rem;margin-bottom:1rem}.nv4-xl{margin-top:-1rem;margin-bottom:-1rem}.ph4-xl{padding-left:1rem;padding-right:1rem}.mh4-xl{margin-left:1rem;margin-right:1rem}.nh4-xl{margin-left:-1rem;margin-right:-1rem}.pa5-xl{padding:1.25rem}.ma5-xl{margin:1.25rem}.na5-xl{margin:-1.25rem}.pl5-xl{padding-left:1.25rem}.ml5-xl{margin-left:1.25rem}.nl5-xl{margin-left:-1.25rem}.pr5-xl{padding-right:1.25rem}.mr5-xl{margin-right:1.25rem}.nr5-xl{margin-right:-1.25rem}.pt5-xl{padding-top:1.25rem}.mt5-xl{margin-top:1.25rem}.nt5-xl{margin-top:-1.25rem}.pb5-xl{padding-bottom:1.25rem}.mb5-xl{margin-bottom:1.25rem}.nb5-xl{margin-bottom:-1.25rem}.pv5-xl{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-xl{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-xl{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-xl{padding-left:1.25rem;padding-right:1.25rem}.mh5-xl{margin-left:1.25rem;margin-right:1.25rem}.nh5-xl{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-xl{padding:1.5rem}.ma6-xl{margin:1.5rem}.na6-xl{margin:-1.5rem}.pl6-xl{padding-left:1.5rem}.ml6-xl{margin-left:1.5rem}.nl6-xl{margin-left:-1.5rem}.pr6-xl{padding-right:1.5rem}.mr6-xl{margin-right:1.5rem}.nr6-xl{margin-right:-1.5rem}.pt6-xl{padding-top:1.5rem}.mt6-xl{margin-top:1.5rem}.nt6-xl{margin-top:-1.5rem}.pb6-xl{padding-bottom:1.5rem}.mb6-xl{margin-bottom:1.5rem}.nb6-xl{margin-bottom:-1.5rem}.pv6-xl{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-xl{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-xl{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-xl{padding-left:1.5rem;padding-right:1.5rem}.mh6-xl{margin-left:1.5rem;margin-right:1.5rem}.nh6-xl{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-xl{padding:2rem}.ma7-xl{margin:2rem}.na7-xl{margin:-2rem}.pl7-xl{padding-left:2rem}.ml7-xl{margin-left:2rem}.nl7-xl{margin-left:-2rem}.pr7-xl{padding-right:2rem}.mr7-xl{margin-right:2rem}.nr7-xl{margin-right:-2rem}.pt7-xl{padding-top:2rem}.mt7-xl{margin-top:2rem}.nt7-xl{margin-top:-2rem}.pb7-xl{padding-bottom:2rem}.mb7-xl{margin-bottom:2rem}.nb7-xl{margin-bottom:-2rem}.pv7-xl{padding-top:2rem;padding-bottom:2rem}.mv7-xl{margin-top:2rem;margin-bottom:2rem}.nv7-xl{margin-top:-2rem;margin-bottom:-2rem}.ph7-xl{padding-left:2rem;padding-right:2rem}.mh7-xl{margin-left:2rem;margin-right:2rem}.nh7-xl{margin-left:-2rem;margin-right:-2rem}.pa8-xl{padding:3rem}.ma8-xl{margin:3rem}.na8-xl{margin:-3rem}.pl8-xl{padding-left:3rem}.ml8-xl{margin-left:3rem}.nl8-xl{margin-left:-3rem}.pr8-xl{padding-right:3rem}.mr8-xl{margin-right:3rem}.nr8-xl{margin-right:-3rem}.pt8-xl{padding-top:3rem}.mt8-xl{margin-top:3rem}.nt8-xl{margin-top:-3rem}.pb8-xl{padding-bottom:3rem}.mb8-xl{margin-bottom:3rem}.nb8-xl{margin-bottom:-3rem}.pv8-xl{padding-top:3rem;padding-bottom:3rem}.mv8-xl{margin-top:3rem;margin-bottom:3rem}.nv8-xl{margin-top:-3rem;margin-bottom:-3rem}.ph8-xl{padding-left:3rem;padding-right:3rem}.mh8-xl{margin-left:3rem;margin-right:3rem}.nh8-xl{margin-left:-3rem;margin-right:-3rem}.pa9-xl{padding:4rem}.ma9-xl{margin:4rem}.na9-xl{margin:-4rem}.pl9-xl{padding-left:4rem}.ml9-xl{margin-left:4rem}.nl9-xl{margin-left:-4rem}.pr9-xl{padding-right:4rem}.mr9-xl{margin-right:4rem}.nr9-xl{margin-right:-4rem}.pt9-xl{padding-top:4rem}.mt9-xl{margin-top:4rem}.nt9-xl{margin-top:-4rem}.pb9-xl{padding-bottom:4rem}.mb9-xl{margin-bottom:4rem}.nb9-xl{margin-bottom:-4rem}.pv9-xl{padding-top:4rem;padding-bottom:4rem}.mv9-xl{margin-top:4rem;margin-bottom:4rem}.nv9-xl{margin-top:-4rem;margin-bottom:-4rem}.ph9-xl{padding-left:4rem;padding-right:4rem}.mh9-xl{margin-left:4rem;margin-right:4rem}.nh9-xl{margin-left:-4rem;margin-right:-4rem}.pa10-xl{padding:6rem}.ma10-xl{margin:6rem}.na10-xl{margin:-6rem}.pl10-xl{padding-left:6rem}.ml10-xl{margin-left:6rem}.nl10-xl{margin-left:-6rem}.pr10-xl{padding-right:6rem}.mr10-xl{margin-right:6rem}.nr10-xl{margin-right:-6rem}.pt10-xl{padding-top:6rem}.mt10-xl{margin-top:6rem}.nt10-xl{margin-top:-6rem}.pb10-xl{padding-bottom:6rem}.mb10-xl{margin-bottom:6rem}.nb10-xl{margin-bottom:-6rem}.pv10-xl{padding-top:6rem;padding-bottom:6rem}.mv10-xl{margin-top:6rem;margin-bottom:6rem}.nv10-xl{margin-top:-6rem;margin-bottom:-6rem}.ph10-xl{padding-left:6rem;padding-right:6rem}.mh10-xl{margin-left:6rem;margin-right:6rem}.nh10-xl{margin-left:-6rem;margin-right:-6rem}.pa11-xl{padding:10rem}.ma11-xl{margin:10rem}.na11-xl{margin:-10rem}.pl11-xl{padding-left:10rem}.ml11-xl{margin-left:10rem}.nl11-xl{margin-left:-10rem}.pr11-xl{padding-right:10rem}.mr11-xl{margin-right:10rem}.nr11-xl{margin-right:-10rem}.pt11-xl{padding-top:10rem}.mt11-xl{margin-top:10rem}.nt11-xl{margin-top:-10rem}.pb11-xl{padding-bottom:10rem}.mb11-xl{margin-bottom:10rem}.nb11-xl{margin-bottom:-10rem}.pv11-xl{padding-top:10rem;padding-bottom:10rem}.mv11-xl{margin-top:10rem;margin-bottom:10rem}.nv11-xl{margin-top:-10rem;margin-bottom:-10rem}.ph11-xl{padding-left:10rem;padding-right:10rem}.mh11-xl{margin-left:10rem;margin-right:10rem}.nh11-xl{margin-left:-10rem;margin-right:-10rem}.pa12-xl{padding:18rem}.ma12-xl{margin:18rem}.na12-xl{margin:-18rem}.pl12-xl{padding-left:18rem}.ml12-xl{margin-left:18rem}.nl12-xl{margin-left:-18rem}.pr12-xl{padding-right:18rem}.mr12-xl{margin-right:18rem}.nr12-xl{margin-right:-18rem}.pt12-xl{padding-top:18rem}.mt12-xl{margin-top:18rem}.nt12-xl{margin-top:-18rem}.pb12-xl{padding-bottom:18rem}.mb12-xl{margin-bottom:18rem}.nb12-xl{margin-bottom:-18rem}.pv12-xl{padding-top:18rem;padding-bottom:18rem}.mv12-xl{margin-top:18rem;margin-bottom:18rem}.nv12-xl{margin-top:-18rem;margin-bottom:-18rem}.ph12-xl{padding-left:18rem;padding-right:18rem}.mh12-xl{margin-left:18rem;margin-right:18rem}.nh12-xl{margin-left:-18rem;margin-right:-18rem}.top-0-xl{top:0}.right-0-xl{right:0}.bottom-0-xl{bottom:0}.left-0-xl{left:0}.top-1-xl{top:1rem}.right-1-xl{right:1rem}.bottom-1-xl{bottom:1rem}.left-1-xl{left:1rem}.top-2-xl{top:2rem}.right-2-xl{right:2rem}.bottom-2-xl{bottom:2rem}.left-2-xl{left:2rem}.top--1-xl{top:-1rem}.right--1-xl{right:-1rem}.bottom--1-xl{bottom:-1rem}.left--1-xl{left:-1rem}.top--2-xl{top:-2rem}.right--2-xl{right:-2rem}.bottom--2-xl{bottom:-2rem}.left--2-xl{left:-2rem}.absolute--fill-xl{top:0;right:0;bottom:0;left:0}.cf-xl:after,.cf-xl:before{content:" ";display:table}.cf-xl:after{clear:both}.cf-xl{*zoom:1}.cl-xl{clear:left}.cr-xl{clear:right}.cb-xl{clear:both}.cn-xl{clear:none}.dn-xl{display:none}.di-xl{display:inline}.db-xl{display:block}.dib-xl{display:inline-block}.dit-xl{display:inline-table}.dt-xl{display:table}.dtc-xl{display:table-cell}.dt-row-xl{display:table-row}.dt-row-group-xl{display:table-row-group}.dt-column-xl{display:table-column}.dt-column-group-xl{display:table-column-group}.dt--fixed-xl{table-layout:fixed;width:100%}.flex-xl{display:flex}.inline-flex-xl{display:inline-flex}.flex-auto-xl{flex:1 1 auto;min-width:0;min-height:0}.flex-none-xl{flex:none}.flex-column-xl{flex-direction:column}.flex-row-xl{flex-direction:row}.flex-wrap-xl{flex-wrap:wrap}.flex-nowrap-xl{flex-wrap:nowrap}.flex-wrap-reverse-xl{flex-wrap:wrap-reverse}.flex-column-reverse-xl{flex-direction:column-reverse}.flex-row-reverse-xl{flex-direction:row-reverse}.items-start-xl{align-items:flex-start}.items-end-xl{align-items:flex-end}.items-center-xl{align-items:center}.items-baseline-xl{align-items:baseline}.items-stretch-xl{align-items:stretch}.self-start-xl{align-self:flex-start}.self-end-xl{align-self:flex-end}.self-center-xl{align-self:center}.self-baseline-xl{align-self:baseline}.self-stretch-xl{align-self:stretch}.justify-start-xl{justify-content:flex-start}.justify-end-xl{justify-content:flex-end}.justify-center-xl{justify-content:center}.justify-between-xl{justify-content:space-between}.justify-around-xl{justify-content:space-around}.content-start-xl{align-content:flex-start}.content-end-xl{align-content:flex-end}.content-center-xl{align-content:center}.content-between-xl{align-content:space-between}.content-around-xl{align-content:space-around}.content-stretch-xl{align-content:stretch}.order-0-xl{order:0}.order-1-xl{order:1}.order-2-xl{order:2}.order-3-xl{order:3}.order-4-xl{order:4}.order-5-xl{order:5}.order-6-xl{order:6}.order-7-xl{order:7}.order-8-xl{order:8}.order-last-xl{order:99999}.flex-grow-0-xl{flex-grow:0}.flex-grow-1-xl{flex-grow:1}.flex-shrink-0-xl{flex-shrink:0}.flex-shrink-1-xl{flex-shrink:1}.fl-xl{float:left}.fl-xl,.fr-xl{_display:inline}.fr-xl{float:right}.fn-xl{float:none}.i-xl{font-style:italic}.fs-normal-xl{font-style:normal}.normal-xl{font-weight:400}.b-xl{font-weight:700}.fw1-xl{font-weight:100}.fw2-xl{font-weight:200}.fw3-xl{font-weight:300}.fw4-xl{font-weight:400}.fw5-xl{font-weight:500}.fw6-xl{font-weight:600}.fw7-xl{font-weight:700}.fw8-xl{font-weight:800}.fw9-xl{font-weight:900}.h1-xl{height:1rem}.h2-xl{height:2rem}.h3-xl{height:4rem}.h4-xl{height:8rem}.h5-xl{height:16rem}.h-25-xl{height:25%}.h-50-xl{height:50%}.h-75-xl{height:75%}.h-100-xl{height:100%}.min-h-100-xl{min-height:100%}.vh-25-xl{height:25vh}.vh-50-xl{height:50vh}.vh-75-xl{height:75vh}.vh-100-xl{height:100vh}.min-vh-100-xl{min-height:100vh}.h-auto-xl{height:auto}.h-inherit-xl{height:inherit}.tracked-xl{letter-spacing:.1em}.tracked-tight-xl{letter-spacing:-.05em}.tracked-mega-xl{letter-spacing:.25em}.lh-solid-xl{line-height:1.333333}.lh-title-xl{line-height:1.5}.lh-copy-xl{line-height:1.666666}.mw1-xl{max-width:1rem}.mw2-xl{max-width:2rem}.mw3-xl{max-width:4rem}.mw4-xl{max-width:8rem}.mw5-xl{max-width:16rem}.mw6-xl{max-width:32rem}.mw7-xl{max-width:48rem}.mw8-xl{max-width:64rem}.mw9-xl{max-width:96rem}.mw-none-xl{max-width:none}.mw-100-xl{max-width:100%}.o-100-xl{opacity:1}.o-90-xl{opacity:.9}.o-80-xl{opacity:.8}.o-70-xl{opacity:.7}.o-60-xl{opacity:.6}.o-50-xl{opacity:.5}.o-40-xl{opacity:.4}.o-30-xl{opacity:.3}.o-20-xl{opacity:.2}.o-10-xl{opacity:.1}.o-05-xl{opacity:.05}.o-025-xl{opacity:.025}.o-0-xl{opacity:0}.rotate-45-xl{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-xl{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-xl{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-xl{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-xl{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-xl{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-xl{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-xl{outline:1px solid}.outline-transparent-xl{outline:1px solid transparent}.outline-0-xl{outline:0}.overflow-visible-xl{overflow:visible}.overflow-hidden-xl{overflow:hidden}.overflow-scroll-xl{overflow:scroll}.overflow-auto-xl{overflow:auto}.overflow-x-visible-xl{overflow-x:visible}.overflow-x-hidden-xl{overflow-x:hidden}.overflow-x-scroll-xl{overflow-x:scroll}.overflow-x-auto-xl{overflow-x:auto}.overflow-y-visible-xl{overflow-y:visible}.overflow-y-hidden-xl{overflow-y:hidden}.overflow-y-scroll-xl{overflow-y:scroll}.overflow-y-auto-xl{overflow-y:auto}.static-xl{position:static}.relative-xl{position:relative}.absolute-xl{position:absolute}.fixed-xl{position:fixed}.strike-xl{text-decoration:line-through}.underline-xl{text-decoration:underline}.no-underline-xl{text-decoration:none}.tl-xl{text-align:left}.tr-xl{text-align:right}.tc-xl{text-align:center}.tj-xl{text-align:justify}.ttc-xl{text-transform:capitalize}.ttl-xl{text-transform:lowercase}.ttu-xl{text-transform:uppercase}.ttn-xl{text-transform:none}.f1-xl{font-size:4.5rem}.f2-xl{font-size:4rem}.f3-xl{font-size:3rem}.f4-xl{font-size:2rem}.f5-xl{font-size:1.5rem}.f6-xl{font-size:1.125rem}.f7-xl{font-size:1rem}.f8-xl{font-size:.875rem}.f9-xl{font-size:.75rem}.measure-xl{max-width:30em}.measure-wide-xl{max-width:34em}.measure-narrow-xl{max-width:20em}.small-caps-xl{font-variant:small-caps}.indent-xl{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-xl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-xl{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-xl{white-space:normal}.nowrap-xl{white-space:nowrap}.pre-xl{white-space:pre}.w1-xl{width:1rem}.w2-xl{width:2rem}.w3-xl{width:4rem}.w4-xl{width:8rem}.w5-xl{width:16rem}.w-10-xl{width:10%}.w-20-xl{width:20%}.w-25-xl{width:25%}.w-30-xl{width:30%}.w-33-xl{width:33%}.w-34-xl{width:34%}.w-40-xl{width:40%}.w-50-xl{width:50%}.w-60-xl{width:60%}.w-70-xl{width:70%}.w-75-xl{width:75%}.w-80-xl{width:80%}.w-90-xl{width:90%}.w-100-xl{width:100%}.w-third-xl{width:33.33333%}.w-two-thirds-xl{width:66.66667%}.w-auto-xl{width:auto}}@font-face{font-family:Inter;font-style:normal;font-weight:400;src:url(https://media.urbit.org/fonts/Inter-Regular.woff2) format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:400;src:url(https://media.urbit.org/fonts/Inter-Italic.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:700;src:url(https://media.urbit.org/fonts/Inter-Bold.woff2) format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:700;src:url(https://media.urbit.org/fonts/Inter-BoldItalic.woff2) format("woff2")}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-extralight.woff);font-weight:200}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-light.woff);font-weight:300}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-regular.woff);font-weight:400}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-medium.woff);font-weight:500}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-semibold.woff);font-weight:600}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-bold.woff);font-weight:700}body,html{height:100%;width:100%;-webkit-font-smoothing:antialiased;overflow:hidden}a,button,h1,h2,h3,h4,h5,h6,input,p,textarea{margin-block-end:unset;margin-block-start:unset;-webkit-margin-before:unset;-webkit-margin-after:unset;font-family:Inter,sans-serif;padding:0}button,summary{cursor:pointer}h2{font-weight:400}a{color:#000;text-decoration:none}.inter{font-family:Inter,sans-serif}.clamp-3{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.clamp-message{max-width:calc(100% - 36px - 1.5rem)}.clamp-attachment{overflow:scroll;max-height:10em;max-width:100%}.lh-16{line-height:16px}.mono{font-family:Source Code Pro,monospace}.list-ship{line-height:2.2}.bg-welcome-green{background-color:#ecf6f2}.c-default{cursor:default}.m0a{margin:0 auto}.mix-blend-diff{mix-blend-mode:difference}.focus-b--black:focus{border-color:#000}.embed-container{position:relative;height:0;overflow:hidden;padding-bottom:56.25%}.embed-container embed,.embed-container iframe,.embed-container object{position:absolute;top:0;left:0;width:100%;height:100%}.spin-active{animation:spin 2s infinite}@keyframes spin{0%{transform:rotate(0deg)}25%{transform:rotate(90deg)}50%{transform:rotate(180deg)}75%{transform:rotate(270deg)}to{transform:rotate(1turn)}}.toggle:after{content:"";height:12px;width:12px;background:#fff;position:absolute;top:2px;left:2px;border-radius:100%}.toggle.checked:after{left:14px}@media (max-width:34.375em){.dn-s{display:none}.flex-basis-100-s,.flex-basis-full-s{flex-basis:100%}.h-100-m-40-s{height:calc(100% - 40px)}.black-s{color:#000}}@media (min-width:34.375em){.db-ns{display:block}.flex-basis-30-ns{flex-basis:30vw}.h-100-m-40-ns{height:calc(100% - 40px)}}@media (prefers-color-scheme:dark){body{background-color:#333}.bg-black-d{background-color:#000}.white-d{color:#fff}.gray1-d{color:#4d4d4d}.gray2-d{color:#7f7f7f}.gray3-d{color:#b1b2b3}.gray4-d{color:#e6e6e6}.bg-gray0-d{background-color:#333}.bg-gray1-d{background-color:#4d4d4d}.b--gray0-d{border-color:#333}.b--gray1-d{border-color:#4d4d4d}.b--gray2-d{border-color:#7f7f7f}.b--white-d{border-color:#fff}.bb-d{border-bottom-width:1px;border-bottom-style:solid}.invert-d{filter:invert(1)}.o-60-d{opacity:.6}.focus-b--white-d:focus{border-color:#fff}a{color:#fff}.hover-bg-gray1-d:hover{background-color:#4d4d4d}} \ No newline at end of file +/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}.aspect-ratio{height:0;position:relative}.aspect-ratio--16x9{padding-bottom:56.25%}.aspect-ratio--9x16{padding-bottom:177.77%}.aspect-ratio--4x3{padding-bottom:75%}.aspect-ratio--3x4{padding-bottom:133.33%}.aspect-ratio--6x4{padding-bottom:66.6%}.aspect-ratio--4x6{padding-bottom:150%}.aspect-ratio--8x5{padding-bottom:62.5%}.aspect-ratio--5x8{padding-bottom:160%}.aspect-ratio--7x5{padding-bottom:71.42%}.aspect-ratio--5x7{padding-bottom:140%}.aspect-ratio--1x1{padding-bottom:100%}.aspect-ratio--object{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover{background-size:cover!important}.contain{background-size:contain!important}.bg-center{background-position:50%}.bg-center,.bg-top{background-repeat:no-repeat}.bg-top{background-position:top}.bg-right{background-position:100%}.bg-bottom,.bg-right{background-repeat:no-repeat}.bg-bottom{background-position:bottom}.bg-left{background-repeat:no-repeat;background-position:0}.ba{border-style:solid;border-width:1px}.bt{border-top-style:solid;border-top-width:1px}.br{border-right-style:solid;border-right-width:1px}.bb{border-bottom-style:solid;border-bottom-width:1px}.bl{border-left-style:solid;border-left-width:1px}.bn{border-style:none;border-width:0}.b--black{border-color:#000}.b--white{border-color:#fff}.b--gray0{border-color:#333}.b--gray1{border-color:#4d4d4d}.b--gray2{border-color:#7f7f7f}.b--gray3{border-color:#b1b2b3}.b--gray4{border-color:#e6e6e6}.b--gray5{border-color:#f9f9f9}.b--blue0{border-color:#ecf6ff}.b--blue1{border-color:#b0c7ff}.b--blue2{border-color:#4330fc}.b--blue3{border-color:#190d7b}.b--red0{border-color:#f9d6ce}.b--red1{border-color:#ffa073}.b--red2{border-color:#ee5432}.b--red3{border-color:#c10d30}.b--green0{border-color:#bdebcc}.b--green1{border-color:#2ed196}.b--green2{border-color:#2aa779}.b--green3{border-color:#286e55}.b--yellow0{border-color:#ffefc5}.b--yellow1{border-color:#ffd972}.b--yellow2{border-color:#fcc440}.b--yellow3{border-color:#ee892b}.b--transparent{border-color:transparent}.br0{border-radius:0}.br1{border-radius:.125rem}.br2{border-radius:.25rem}.br3{border-radius:.5rem}.br4{border-radius:1rem}.br-100{border-radius:100%}.br-pill{border-radius:9999px}.br--bottom{border-top-left-radius:0;border-top-right-radius:0}.br--top{border-bottom-right-radius:0}.br--right,.br--top{border-bottom-left-radius:0}.br--right{border-top-left-radius:0}.br--left{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted{border-style:dotted}.b--dashed{border-style:dashed}.b--solid{border-style:solid}.b--none{border-style:none}.bw0{border-width:0}.bw1{border-width:.125rem}.bw2{border-width:.25rem}.bw3{border-width:.5rem}.bw4{border-width:1rem}.bw5{border-width:2rem}.bt-0{border-top-width:0}.br-0{border-right-width:0}.bb-0{border-bottom-width:0}.bl-0{border-left-width:0}.shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.border-box,a,article,aside,blockquote,body,code,dd,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=url],legend,li,main,nav,ol,p,pre,section,table,td,textarea,th,tr,ul{box-sizing:border-box}.pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.pa0{padding:0}.ma0,.na0{margin:0}.pl0{padding-left:0}.ml0,.nl0{margin-left:0}.pr0{padding-right:0}.mr0,.nr0{margin-right:0}.pt0{padding-top:0}.mt0,.nt0{margin-top:0}.pb0{padding-bottom:0}.mb0,.nb0{margin-bottom:0}.pv0{padding-top:0;padding-bottom:0}.mv0,.nv0{margin-top:0;margin-bottom:0}.ph0{padding-left:0;padding-right:0}.mh0,.nh0{margin-left:0;margin-right:0}.pa1{padding:.25rem}.ma1{margin:.25rem}.na1{margin:-.25rem}.pl1{padding-left:.25rem}.ml1{margin-left:.25rem}.nl1{margin-left:-.25rem}.pr1{padding-right:.25rem}.mr1{margin-right:.25rem}.nr1{margin-right:-.25rem}.pt1{padding-top:.25rem}.mt1{margin-top:.25rem}.nt1{margin-top:-.25rem}.pb1{padding-bottom:.25rem}.mb1{margin-bottom:.25rem}.nb1{margin-bottom:-.25rem}.pv1{padding-top:.25rem;padding-bottom:.25rem}.mv1{margin-top:.25rem;margin-bottom:.25rem}.nv1{margin-top:-.25rem;margin-bottom:-.25rem}.ph1{padding-left:.25rem;padding-right:.25rem}.mh1{margin-left:.25rem;margin-right:.25rem}.nh1{margin-left:-.25rem;margin-right:-.25rem}.pa2{padding:.5rem}.ma2{margin:.5rem}.na2{margin:-.5rem}.pl2{padding-left:.5rem}.ml2{margin-left:.5rem}.nl2{margin-left:-.5rem}.pr2{padding-right:.5rem}.mr2{margin-right:.5rem}.nr2{margin-right:-.5rem}.pt2{padding-top:.5rem}.mt2{margin-top:.5rem}.nt2{margin-top:-.5rem}.pb2{padding-bottom:.5rem}.mb2{margin-bottom:.5rem}.nb2{margin-bottom:-.5rem}.pv2{padding-top:.5rem;padding-bottom:.5rem}.mv2{margin-top:.5rem;margin-bottom:.5rem}.nv2{margin-top:-.5rem;margin-bottom:-.5rem}.ph2{padding-left:.5rem;padding-right:.5rem}.mh2{margin-left:.5rem;margin-right:.5rem}.nh2{margin-left:-.5rem;margin-right:-.5rem}.pa3{padding:.75rem}.ma3{margin:.75rem}.na3{margin:-.75rem}.pl3{padding-left:.75rem}.ml3{margin-left:.75rem}.nl3{margin-left:-.75rem}.pr3{padding-right:.75rem}.mr3{margin-right:.75rem}.nr3{margin-right:-.75rem}.pt3{padding-top:.75rem}.mt3{margin-top:.75rem}.nt3{margin-top:-.75rem}.pb3{padding-bottom:.75rem}.mb3{margin-bottom:.75rem}.nb3{margin-bottom:-.75rem}.pv3{padding-top:.75rem;padding-bottom:.75rem}.mv3{margin-top:.75rem;margin-bottom:.75rem}.nv3{margin-top:-.75rem;margin-bottom:-.75rem}.ph3{padding-left:.75rem;padding-right:.75rem}.mh3{margin-left:.75rem;margin-right:.75rem}.nh3{margin-left:-.75rem;margin-right:-.75rem}.pa4{padding:1rem}.ma4{margin:1rem}.na4{margin:-1rem}.pl4{padding-left:1rem}.ml4{margin-left:1rem}.nl4{margin-left:-1rem}.pr4{padding-right:1rem}.mr4{margin-right:1rem}.nr4{margin-right:-1rem}.pt4{padding-top:1rem}.mt4{margin-top:1rem}.nt4{margin-top:-1rem}.pb4{padding-bottom:1rem}.mb4{margin-bottom:1rem}.nb4{margin-bottom:-1rem}.pv4{padding-top:1rem;padding-bottom:1rem}.mv4{margin-top:1rem;margin-bottom:1rem}.nv4{margin-top:-1rem;margin-bottom:-1rem}.ph4{padding-left:1rem;padding-right:1rem}.mh4{margin-left:1rem;margin-right:1rem}.nh4{margin-left:-1rem;margin-right:-1rem}.pa5{padding:1.25rem}.ma5{margin:1.25rem}.na5{margin:-1.25rem}.pl5{padding-left:1.25rem}.ml5{margin-left:1.25rem}.nl5{margin-left:-1.25rem}.pr5{padding-right:1.25rem}.mr5{margin-right:1.25rem}.nr5{margin-right:-1.25rem}.pt5{padding-top:1.25rem}.mt5{margin-top:1.25rem}.nt5{margin-top:-1.25rem}.pb5{padding-bottom:1.25rem}.mb5{margin-bottom:1.25rem}.nb5{margin-bottom:-1.25rem}.pv5{padding-top:1.25rem;padding-bottom:1.25rem}.mv5{margin-top:1.25rem;margin-bottom:1.25rem}.nv5{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5{padding-left:1.25rem;padding-right:1.25rem}.mh5{margin-left:1.25rem;margin-right:1.25rem}.nh5{margin-left:-1.25rem;margin-right:-1.25rem}.pa6{padding:1.5rem}.ma6{margin:1.5rem}.na6{margin:-1.5rem}.pl6{padding-left:1.5rem}.ml6{margin-left:1.5rem}.nl6{margin-left:-1.5rem}.pr6{padding-right:1.5rem}.mr6{margin-right:1.5rem}.nr6{margin-right:-1.5rem}.pt6{padding-top:1.5rem}.mt6{margin-top:1.5rem}.nt6{margin-top:-1.5rem}.pb6{padding-bottom:1.5rem}.mb6{margin-bottom:1.5rem}.nb6{margin-bottom:-1.5rem}.pv6{padding-top:1.5rem;padding-bottom:1.5rem}.mv6{margin-top:1.5rem;margin-bottom:1.5rem}.nv6{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6{padding-left:1.5rem;padding-right:1.5rem}.mh6{margin-left:1.5rem;margin-right:1.5rem}.nh6{margin-left:-1.5rem;margin-right:-1.5rem}.pa7{padding:2rem}.ma7{margin:2rem}.na7{margin:-2rem}.pl7{padding-left:2rem}.ml7{margin-left:2rem}.nl7{margin-left:-2rem}.pr7{padding-right:2rem}.mr7{margin-right:2rem}.nr7{margin-right:-2rem}.pt7{padding-top:2rem}.mt7{margin-top:2rem}.nt7{margin-top:-2rem}.pb7{padding-bottom:2rem}.mb7{margin-bottom:2rem}.nb7{margin-bottom:-2rem}.pv7{padding-top:2rem;padding-bottom:2rem}.mv7{margin-top:2rem;margin-bottom:2rem}.nv7{margin-top:-2rem;margin-bottom:-2rem}.ph7{padding-left:2rem;padding-right:2rem}.mh7{margin-left:2rem;margin-right:2rem}.nh7{margin-left:-2rem;margin-right:-2rem}.pa8{padding:3rem}.ma8{margin:3rem}.na8{margin:-3rem}.pl8{padding-left:3rem}.ml8{margin-left:3rem}.nl8{margin-left:-3rem}.pr8{padding-right:3rem}.mr8{margin-right:3rem}.nr8{margin-right:-3rem}.pt8{padding-top:3rem}.mt8{margin-top:3rem}.nt8{margin-top:-3rem}.pb8{padding-bottom:3rem}.mb8{margin-bottom:3rem}.nb8{margin-bottom:-3rem}.pv8{padding-top:3rem;padding-bottom:3rem}.mv8{margin-top:3rem;margin-bottom:3rem}.nv8{margin-top:-3rem;margin-bottom:-3rem}.ph8{padding-left:3rem;padding-right:3rem}.mh8{margin-left:3rem;margin-right:3rem}.nh8{margin-left:-3rem;margin-right:-3rem}.pa9{padding:4rem}.ma9{margin:4rem}.na9{margin:-4rem}.pl9{padding-left:4rem}.ml9{margin-left:4rem}.nl9{margin-left:-4rem}.pr9{padding-right:4rem}.mr9{margin-right:4rem}.nr9{margin-right:-4rem}.pt9{padding-top:4rem}.mt9{margin-top:4rem}.nt9{margin-top:-4rem}.pb9{padding-bottom:4rem}.mb9{margin-bottom:4rem}.nb9{margin-bottom:-4rem}.pv9{padding-top:4rem;padding-bottom:4rem}.mv9{margin-top:4rem;margin-bottom:4rem}.nv9{margin-top:-4rem;margin-bottom:-4rem}.ph9{padding-left:4rem;padding-right:4rem}.mh9{margin-left:4rem;margin-right:4rem}.nh9{margin-left:-4rem;margin-right:-4rem}.pa10{padding:6rem}.ma10{margin:6rem}.na10{margin:-6rem}.pl10{padding-left:6rem}.ml10{margin-left:6rem}.nl10{margin-left:-6rem}.pr10{padding-right:6rem}.mr10{margin-right:6rem}.nr10{margin-right:-6rem}.pt10{padding-top:6rem}.mt10{margin-top:6rem}.nt10{margin-top:-6rem}.pb10{padding-bottom:6rem}.mb10{margin-bottom:6rem}.nb10{margin-bottom:-6rem}.pv10{padding-top:6rem;padding-bottom:6rem}.mv10{margin-top:6rem;margin-bottom:6rem}.nv10{margin-top:-6rem;margin-bottom:-6rem}.ph10{padding-left:6rem;padding-right:6rem}.mh10{margin-left:6rem;margin-right:6rem}.nh10{margin-left:-6rem;margin-right:-6rem}.pa11{padding:10rem}.ma11{margin:10rem}.na11{margin:-10rem}.pl11{padding-left:10rem}.ml11{margin-left:10rem}.nl11{margin-left:-10rem}.pr11{padding-right:10rem}.mr11{margin-right:10rem}.nr11{margin-right:-10rem}.pt11{padding-top:10rem}.mt11{margin-top:10rem}.nt11{margin-top:-10rem}.pb11{padding-bottom:10rem}.mb11{margin-bottom:10rem}.nb11{margin-bottom:-10rem}.pv11{padding-top:10rem;padding-bottom:10rem}.mv11{margin-top:10rem;margin-bottom:10rem}.nv11{margin-top:-10rem;margin-bottom:-10rem}.ph11{padding-left:10rem;padding-right:10rem}.mh11{margin-left:10rem;margin-right:10rem}.nh11{margin-left:-10rem;margin-right:-10rem}.pa12{padding:18rem}.ma12{margin:18rem}.na12{margin:-18rem}.pl12{padding-left:18rem}.ml12{margin-left:18rem}.nl12{margin-left:-18rem}.pr12{padding-right:18rem}.mr12{margin-right:18rem}.nr12{margin-right:-18rem}.pt12{padding-top:18rem}.mt12{margin-top:18rem}.nt12{margin-top:-18rem}.pb12{padding-bottom:18rem}.mb12{margin-bottom:18rem}.nb12{margin-bottom:-18rem}.pv12{padding-top:18rem;padding-bottom:18rem}.mv12{margin-top:18rem;margin-bottom:18rem}.nv12{margin-top:-18rem;margin-bottom:-18rem}.ph12{padding-left:18rem;padding-right:18rem}.mh12{margin-left:18rem;margin-right:18rem}.nh12{margin-left:-18rem;margin-right:-18rem}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-1{top:1rem}.right-1{right:1rem}.bottom-1{bottom:1rem}.left-1{left:1rem}.top-2{top:2rem}.right-2{right:2rem}.bottom-2{bottom:2rem}.left-2{left:2rem}.top--1{top:-1rem}.right--1{right:-1rem}.bottom--1{bottom:-1rem}.left--1{left:-1rem}.top--2{top:-2rem}.right--2{right:-2rem}.bottom--2{bottom:-2rem}.left--2{left:-2rem}.absolute--fill{top:0;right:0;bottom:0;left:0}.cf:after,.cf:before{content:" ";display:table}.cf:after{clear:both}.cf{*zoom:1}.cl{clear:left}.cr{clear:right}.cb{clear:both}.cn{clear:none}.dn{display:none}.di{display:inline}.db{display:block}.dib{display:inline-block}.dit{display:inline-table}.dt{display:table}.dtc{display:table-cell}.dt-row{display:table-row}.dt-row-group{display:table-row-group}.dt-column{display:table-column}.dt-column-group{display:table-column-group}.dt--fixed{table-layout:fixed;width:100%}.flex{display:flex}.inline-flex{display:inline-flex}.flex-auto{flex:1 1 auto;min-width:0;min-height:0}.flex-none{flex:none}.flex-column{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-column-reverse{flex-direction:column-reverse}.flex-row-reverse{flex-direction:row-reverse}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-center{align-content:center}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-stretch{align-content:stretch}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-last{order:99999}.flex-grow-0{flex-grow:0}.flex-grow-1{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink-1{flex-shrink:1}.fl{float:left}.fl,.fr{_display:inline}.fr{float:right}.fn{float:none}.sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.serif{font-family:georgia,times,serif}.system-sans-serif{font-family:sans-serif}.system-serif{font-family:serif}.code,code{font-family:Consolas,monaco,monospace}.courier{font-family:Courier Next,courier,monospace}.helvetica{font-family:helvetica neue,helvetica,sans-serif}.avenir{font-family:avenir next,avenir,sans-serif}.athelas{font-family:athelas,georgia,serif}.georgia{font-family:georgia,serif}.times{font-family:times,serif}.bodoni{font-family:Bodoni MT,serif}.calisto{font-family:Calisto MT,serif}.garamond{font-family:garamond,serif}.baskerville{font-family:baskerville,serif}.i{font-style:italic}.fs-normal{font-style:normal}.normal{font-weight:400}.b{font-weight:700}.fw1{font-weight:100}.fw2{font-weight:200}.fw3{font-weight:300}.fw4{font-weight:400}.fw5{font-weight:500}.fw6{font-weight:600}.fw7{font-weight:700}.fw8{font-weight:800}.fw9{font-weight:900}.input-reset{-webkit-appearance:none;-moz-appearance:none}.button-reset::-moz-focus-inner,.input-reset::-moz-focus-inner{border:0;padding:0}.debug *{outline:1px solid gold}.debug-white *{outline:1px solid #fff}.debug-black *{outline:1px solid #000}.debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAFElEQVR4AWPAC97/9x0eCsAEPgwAVLshdpENIxcAAAAASUVORK5CYII=) repeat 0 0}.debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMklEQVR4AWOgCLz/b0epAa6UGuBOqQHOQHLUgFEDnAbcBZ4UGwDOkiCnkIhdgNgNxAYAiYlD+8sEuo8AAAAASUVORK5CYII=) repeat 0 0}.debug-grid-8-solid{background:#fff url(data:image/gif;base64,R0lGODdhCAAIAPEAAADw/wDx/////wAAACwAAAAACAAIAAACDZQvgaeb/lxbAIKA8y0AOw==) repeat 0 0}.debug-grid-16-solid{background:#fff url(data:image/gif;base64,R0lGODdhEAAQAPEAAADw/wDx/xXy/////ywAAAAAEAAQAAACIZyPKckYDQFsb6ZqD85jZ2+BkwiRFKehhqQCQgDHcgwEBQA7) repeat 0 0}.link{text-decoration:none}.link,.link:active,.link:focus,.link:hover,.link:link,.link:visited{transition:color .15s ease-in}.link:focus{outline:1px dotted currentColor}.list{list-style-type:none}.h1{height:1rem}.h2{height:2rem}.h3{height:4rem}.h4{height:8rem}.h5{height:16rem}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}.min-h-100{min-height:100%}.vh-25{height:25vh}.vh-50{height:50vh}.vh-75{height:75vh}.vh-100{height:100vh}.min-vh-100{min-height:100vh}.h-auto{height:auto}.h-inherit{height:inherit}.black{color:#000}.white{color:#fff}.gray0{color:#333}.gray1{color:#4d4d4d}.gray2{color:#7f7f7f}.gray3{color:#b1b2b3}.gray4{color:#e6e6e6}.gray5{color:#f9f9f9}.blue0{color:#ecf6ff}.blue1{color:#b0c7ff}.blue2{color:#4330fc}.blue3{color:#190d7b}.red0{color:#f9d6ce}.red1{color:#ffa073}.red2{color:#ee5432}.red3{color:#c10d30}.green0{color:#bdebcc}.green1{color:#2ed196}.green2{color:#2aa779}.green3{color:#286e55}.yellow0{color:#ffefc5}.yellow1{color:#ffd972}.yellow2{color:#fcc440}.yellow3{color:#ee892b}.bg-black{background-color:#000}.bg-white{background-color:#fff}.bg-gray0{background-color:#333}.bg-gray1{background-color:#4d4d4d}.bg-gray2{background-color:#7f7f7f}.bg-gray3{background-color:#b1b2b3}.bg-gray4{background-color:#e6e6e6}.bg-gray5{background-color:#f9f9f9}.bg-blue0{background-color:#ecf6ff}.bg-blue1{background-color:#b0c7ff}.bg-blue2{background-color:#4330fc}.bg-blue3{background-color:#190d7b}.bg-red0{background-color:#f9d6ce}.bg-red1{background-color:#ffa073}.bg-red2{background-color:#ee5432}.bg-red3{background-color:#c10d30}.bg-green0{background-color:#bdebcc}.bg-green1{background-color:#2ed196}.bg-green2{background-color:#2aa779}.bg-green3{background-color:#286e55}.bg-yellow0{background-color:#ffefc5}.bg-yellow1{background-color:#ffd972}.bg-yellow2{background-color:#fcc440}.bg-yellow3{background-color:#ee892b}.bg-transparent{background-color:transparent}.hover-black:focus,.hover-black:hover{color:#000}.hover-white:focus,.hover-white:hover{color:#fff}.hover-gray0:focus,.hover-gray0:hover{color:#333}.hover-gray1:focus,.hover-gray1:hover{color:#4d4d4d}.hover-gray2:focus,.hover-gray2:hover{color:#7f7f7f}.hover-gray3:focus,.hover-gray3:hover{color:#b1b2b3}.hover-gray4:focus,.hover-gray4:hover{color:#e6e6e6}.hover-gray5:focus,.hover-gray5:hover{color:#f9f9f9}.hover-blue0:focus,.hover-blue0:hover{color:#ecf6ff}.hover-blue1:focus,.hover-blue1:hover{color:#b0c7ff}.hover-blue2:focus,.hover-blue2:hover{color:#4330fc}.hover-blue3:focus,.hover-blue3:hover{color:#190d7b}.hover-red0:focus,.hover-red0:hover{color:#f9d6ce}.hover-red1:focus,.hover-red1:hover{color:#ffa073}.hover-red2:focus,.hover-red2:hover{color:#ee5432}.hover-red3:focus,.hover-red3:hover{color:#c10d30}.hover-green0:focus,.hover-green0:hover{color:#bdebcc}.hover-green1:focus,.hover-green1:hover{color:#2ed196}.hover-green2:focus,.hover-green2:hover{color:#2aa779}.hover-green3:focus,.hover-green3:hover{color:#286e55}.hover-yellow0:focus,.hover-yellow0:hover{color:#ffefc5}.hover-yellow1:focus,.hover-yellow1:hover{color:#ffd972}.hover-yellow2:focus,.hover-yellow2:hover{color:#fcc440}.hover-yellow3:focus,.hover-yellow3:hover{color:#ee892b}.hover-bg-black:focus,.hover-bg-black:hover{background-color:#000}.hover-bg-white:focus,.hover-bg-white:hover{background-color:#fff}.hover-bg-gray0:focus,.hover-bg-gray0:hover{background-color:#333}.hover-bg-gray1:focus,.hover-bg-gray1:hover{background-color:#4d4d4d}.hover-bg-gray2:focus,.hover-bg-gray2:hover{background-color:#7f7f7f}.hover-bg-gray3:focus,.hover-bg-gray3:hover{background-color:#b1b2b3}.hover-bg-gray4:focus,.hover-bg-gray4:hover{background-color:#e6e6e6}.hover-bg-gray5:focus,.hover-bg-gray5:hover{background-color:#f9f9f9}.hover-bg-blue0:focus,.hover-bg-blue0:hover{background-color:#ecf6ff}.hover-bg-blue1:focus,.hover-bg-blue1:hover{background-color:#b0c7ff}.hover-bg-blue2:focus,.hover-bg-blue2:hover{background-color:#4330fc}.hover-bg-blue3:focus,.hover-bg-blue3:hover{background-color:#190d7b}.hover-bg-red0:focus,.hover-bg-red0:hover{background-color:#f9d6ce}.hover-bg-red1:focus,.hover-bg-red1:hover{background-color:#ffa073}.hover-bg-red2:focus,.hover-bg-red2:hover{background-color:#ee5432}.hover-bg-red3:focus,.hover-bg-red3:hover{background-color:#c10d30}.hover-bg-green0:focus,.hover-bg-green0:hover{background-color:#bdebcc}.hover-bg-green1:focus,.hover-bg-green1:hover{background-color:#2ed196}.hover-bg-green2:focus,.hover-bg-green2:hover{background-color:#2aa779}.hover-bg-green3:focus,.hover-bg-green3:hover{background-color:#286e55}.hover-bg-yellow0:focus,.hover-bg-yellow0:hover{background-color:#ffefc5}.hover-bg-yellow1:focus,.hover-bg-yellow1:hover{background-color:#ffd972}.hover-bg-yellow2:focus,.hover-bg-yellow2:hover{background-color:#fcc440}.hover-bg-yellow3:focus,.hover-bg-yellow3:hover{background-color:#ee892b}.hover-bg-transparent:focus,.hover-bg-transparent:hover{background-color:transparent}img{max-width:100%}.tracked{letter-spacing:.1em}.tracked-tight{letter-spacing:-.05em}.tracked-mega{letter-spacing:.25em}.lh-solid{line-height:1.333333}.lh-title{line-height:1.5}.lh-copy{line-height:1.666666}.mw1{max-width:1rem}.mw2{max-width:2rem}.mw3{max-width:4rem}.mw4{max-width:8rem}.mw5{max-width:16rem}.mw6{max-width:32rem}.mw7{max-width:48rem}.mw8{max-width:64rem}.mw9{max-width:96rem}.mw-none{max-width:none}.mw-100{max-width:100%}.nested-copy-line-height ol,.nested-copy-line-height p,.nested-copy-line-height ul{line-height:1.5}.nested-headline-line-height h1,.nested-headline-line-height h2,.nested-headline-line-height h3,.nested-headline-line-height h4,.nested-headline-line-height h5,.nested-headline-line-height h6{line-height:1.25}.nested-list-reset ol,.nested-list-reset ul{padding-left:0;margin-left:0;list-style-type:none}.nested-copy-indent p+p{text-indent:1em;margin-top:0;margin-bottom:0}.nested-copy-separator p+p{margin-top:1.5em}.nested-img img{width:100%;max-width:100%;display:block}.nested-links a{color:#357edd;transition:color .15s ease-in}.nested-links a:focus,.nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.dim{opacity:1}.dim,.dim:focus,.dim:hover{transition:opacity .15s ease-in}.dim:focus,.dim:hover{opacity:.5}.dim:active{opacity:.8;transition:opacity .15s ease-out}.glow,.glow:focus,.glow:hover{transition:opacity .15s ease-in}.glow:focus,.glow:hover{opacity:1}.hide-child .child{opacity:0;transition:opacity .15s ease-in}.hide-child:active .child,.hide-child:focus .child,.hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.underline-hover:focus,.underline-hover:hover{text-decoration:underline}.grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.grow:focus,.grow:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.grow:active{-webkit-transform:scale(.9);transform:scale(.9)}.grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}.grow-large:focus,.grow-large:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.pointer:hover,.shadow-hover{cursor:pointer}.shadow-hover{position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:after{content:"";box-shadow:0 0 16px 2px rgba(0,0,0,.2);border-radius:inherit;opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;transition:opacity .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:focus:after,.shadow-hover:hover:after{opacity:1}.bg-animate,.bg-animate:focus,.bg-animate:hover{transition:background-color .15s ease-in-out}.o-100{opacity:1}.o-90{opacity:.9}.o-80{opacity:.8}.o-70{opacity:.7}.o-60{opacity:.6}.o-50{opacity:.5}.o-40{opacity:.4}.o-30{opacity:.3}.o-20{opacity:.2}.o-10{opacity:.1}.o-05{opacity:.05}.o-025{opacity:.025}.o-0{opacity:0}.rotate-45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline{outline:1px solid}.outline-transparent{outline:1px solid transparent}.outline-0{outline:0}.overflow-visible{overflow:visible}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.overflow-x-visible{overflow-x:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-visible{overflow-y:visible}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-y-auto{overflow-y:auto}.static{position:static}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.collapse{border-collapse:collapse;border-spacing:0}.striped--light-silver:nth-child(odd){background-color:#aaa}.striped--moon-gray:nth-child(odd){background-color:#ccc}.striped--light-gray:nth-child(odd){background-color:#eee}.striped--near-white:nth-child(odd){background-color:#f4f4f4}.stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.strike{text-decoration:line-through}.underline{text-decoration:underline}.no-underline{text-decoration:none}.tl{text-align:left}.tr{text-align:right}.tc{text-align:center}.tj{text-align:justify}.ttc{text-transform:capitalize}.ttl{text-transform:lowercase}.ttu{text-transform:uppercase}.ttn{text-transform:none}.v-base{vertical-align:baseline}.v-mid{vertical-align:middle}.v-top{vertical-align:top}.v-btm{vertical-align:bottom}.f1{font-size:4.5rem}.f2{font-size:4rem}.f3{font-size:3rem}.f4{font-size:2rem}.f5{font-size:1.5rem}.f6{font-size:1.125rem}.f7{font-size:1rem}.f8{font-size:.875rem}.f9{font-size:.75rem}.measure{max-width:30em}.measure-wide{max-width:34em}.measure-narrow{max-width:20em}.small-caps{font-variant:small-caps}.indent{text-indent:1em;margin-top:0;margin-bottom:0}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.overflow-container{overflow-y:scroll}.center{margin-left:auto}.center,.mr-auto{margin-right:auto}.ml-auto{margin-left:auto}.clip{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal{white-space:normal}.nowrap{white-space:nowrap}.pre{white-space:pre}.w1{width:1rem}.w2{width:2rem}.w3{width:4rem}.w4{width:8rem}.w5{width:16rem}.w-10{width:10%}.w-20{width:20%}.w-25{width:25%}.w-30{width:30%}.w-33{width:33%}.w-34{width:34%}.w-40{width:40%}.w-50{width:50%}.w-60{width:60%}.w-70{width:70%}.w-75{width:75%}.w-80{width:80%}.w-90{width:90%}.w-100{width:100%}.w-third{width:33.33333%}.w-two-thirds{width:66.66667%}.w-auto{width:auto}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-3{z-index:3}.z-4{z-index:4}.z-5{z-index:5}.z-999{z-index:999}.z-9999{z-index:9999}.z-max{z-index:2147483647}.z-inherit{z-index:inherit}.z-initial{z-index:auto}.z-unset{z-index:unset}@media screen and (min-width:34.375em) and (max-width:46.875em){.aspect-ratio-m{height:0;position:relative}.aspect-ratio--16x9-m{padding-bottom:56.25%}.aspect-ratio--9x16-m{padding-bottom:177.77%}.aspect-ratio--4x3-m{padding-bottom:75%}.aspect-ratio--3x4-m{padding-bottom:133.33%}.aspect-ratio--6x4-m{padding-bottom:66.6%}.aspect-ratio--4x6-m{padding-bottom:150%}.aspect-ratio--8x5-m{padding-bottom:62.5%}.aspect-ratio--5x8-m{padding-bottom:160%}.aspect-ratio--7x5-m{padding-bottom:71.42%}.aspect-ratio--5x7-m{padding-bottom:140%}.aspect-ratio--1x1-m{padding-bottom:100%}.aspect-ratio--object-m{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-m{background-size:cover!important}.contain-m{background-size:contain!important}.bg-center-m{background-position:50%}.bg-center-m,.bg-top-m{background-repeat:no-repeat}.bg-top-m{background-position:top}.bg-right-m{background-position:100%}.bg-bottom-m,.bg-right-m{background-repeat:no-repeat}.bg-bottom-m{background-position:bottom}.bg-left-m{background-repeat:no-repeat;background-position:0}.ba-m{border-style:solid;border-width:1px}.bt-m{border-top-style:solid;border-top-width:1px}.br-m{border-right-style:solid;border-right-width:1px}.bb-m{border-bottom-style:solid;border-bottom-width:1px}.bl-m{border-left-style:solid;border-left-width:1px}.bn-m{border-style:none;border-width:0}.br0-m{border-radius:0}.br1-m{border-radius:.125rem}.br2-m{border-radius:.25rem}.br3-m{border-radius:.5rem}.br4-m{border-radius:1rem}.br-100-m{border-radius:100%}.br-pill-m{border-radius:9999px}.br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.br--top-m{border-bottom-right-radius:0}.br--right-m,.br--top-m{border-bottom-left-radius:0}.br--right-m{border-top-left-radius:0}.br--left-m{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-m{border-style:dotted}.b--dashed-m{border-style:dashed}.b--solid-m{border-style:solid}.b--none-m{border-style:none}.bw0-m{border-width:0}.bw1-m{border-width:.125rem}.bw2-m{border-width:.25rem}.bw3-m{border-width:.5rem}.bw4-m{border-width:1rem}.bw5-m{border-width:2rem}.bt-0-m{border-top-width:0}.br-0-m{border-right-width:0}.bb-0-m{border-bottom-width:0}.bl-0-m{border-left-width:0}.shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-m{padding:0}.ma0-m,.na0-m{margin:0}.pl0-m{padding-left:0}.ml0-m,.nl0-m{margin-left:0}.pr0-m{padding-right:0}.mr0-m,.nr0-m{margin-right:0}.pt0-m{padding-top:0}.mt0-m,.nt0-m{margin-top:0}.pb0-m{padding-bottom:0}.mb0-m,.nb0-m{margin-bottom:0}.pv0-m{padding-top:0;padding-bottom:0}.mv0-m,.nv0-m{margin-top:0;margin-bottom:0}.ph0-m{padding-left:0;padding-right:0}.mh0-m,.nh0-m{margin-left:0;margin-right:0}.pa1-m{padding:.25rem}.ma1-m{margin:.25rem}.na1-m{margin:-.25rem}.pl1-m{padding-left:.25rem}.ml1-m{margin-left:.25rem}.nl1-m{margin-left:-.25rem}.pr1-m{padding-right:.25rem}.mr1-m{margin-right:.25rem}.nr1-m{margin-right:-.25rem}.pt1-m{padding-top:.25rem}.mt1-m{margin-top:.25rem}.nt1-m{margin-top:-.25rem}.pb1-m{padding-bottom:.25rem}.mb1-m{margin-bottom:.25rem}.nb1-m{margin-bottom:-.25rem}.pv1-m{padding-top:.25rem;padding-bottom:.25rem}.mv1-m{margin-top:.25rem;margin-bottom:.25rem}.nv1-m{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-m{padding-left:.25rem;padding-right:.25rem}.mh1-m{margin-left:.25rem;margin-right:.25rem}.nh1-m{margin-left:-.25rem;margin-right:-.25rem}.pa2-m{padding:.5rem}.ma2-m{margin:.5rem}.na2-m{margin:-.5rem}.pl2-m{padding-left:.5rem}.ml2-m{margin-left:.5rem}.nl2-m{margin-left:-.5rem}.pr2-m{padding-right:.5rem}.mr2-m{margin-right:.5rem}.nr2-m{margin-right:-.5rem}.pt2-m{padding-top:.5rem}.mt2-m{margin-top:.5rem}.nt2-m{margin-top:-.5rem}.pb2-m{padding-bottom:.5rem}.mb2-m{margin-bottom:.5rem}.nb2-m{margin-bottom:-.5rem}.pv2-m{padding-top:.5rem;padding-bottom:.5rem}.mv2-m{margin-top:.5rem;margin-bottom:.5rem}.nv2-m{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-m{padding-left:.5rem;padding-right:.5rem}.mh2-m{margin-left:.5rem;margin-right:.5rem}.nh2-m{margin-left:-.5rem;margin-right:-.5rem}.pa3-m{padding:.75rem}.ma3-m{margin:.75rem}.na3-m{margin:-.75rem}.pl3-m{padding-left:.75rem}.ml3-m{margin-left:.75rem}.nl3-m{margin-left:-.75rem}.pr3-m{padding-right:.75rem}.mr3-m{margin-right:.75rem}.nr3-m{margin-right:-.75rem}.pt3-m{padding-top:.75rem}.mt3-m{margin-top:.75rem}.nt3-m{margin-top:-.75rem}.pb3-m{padding-bottom:.75rem}.mb3-m{margin-bottom:.75rem}.nb3-m{margin-bottom:-.75rem}.pv3-m{padding-top:.75rem;padding-bottom:.75rem}.mv3-m{margin-top:.75rem;margin-bottom:.75rem}.nv3-m{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-m{padding-left:.75rem;padding-right:.75rem}.mh3-m{margin-left:.75rem;margin-right:.75rem}.nh3-m{margin-left:-.75rem;margin-right:-.75rem}.pa4-m{padding:1rem}.ma4-m{margin:1rem}.na4-m{margin:-1rem}.pl4-m{padding-left:1rem}.ml4-m{margin-left:1rem}.nl4-m{margin-left:-1rem}.pr4-m{padding-right:1rem}.mr4-m{margin-right:1rem}.nr4-m{margin-right:-1rem}.pt4-m{padding-top:1rem}.mt4-m{margin-top:1rem}.nt4-m{margin-top:-1rem}.pb4-m{padding-bottom:1rem}.mb4-m{margin-bottom:1rem}.nb4-m{margin-bottom:-1rem}.pv4-m{padding-top:1rem;padding-bottom:1rem}.mv4-m{margin-top:1rem;margin-bottom:1rem}.nv4-m{margin-top:-1rem;margin-bottom:-1rem}.ph4-m{padding-left:1rem;padding-right:1rem}.mh4-m{margin-left:1rem;margin-right:1rem}.nh4-m{margin-left:-1rem;margin-right:-1rem}.pa5-m{padding:1.25rem}.ma5-m{margin:1.25rem}.na5-m{margin:-1.25rem}.pl5-m{padding-left:1.25rem}.ml5-m{margin-left:1.25rem}.nl5-m{margin-left:-1.25rem}.pr5-m{padding-right:1.25rem}.mr5-m{margin-right:1.25rem}.nr5-m{margin-right:-1.25rem}.pt5-m{padding-top:1.25rem}.mt5-m{margin-top:1.25rem}.nt5-m{margin-top:-1.25rem}.pb5-m{padding-bottom:1.25rem}.mb5-m{margin-bottom:1.25rem}.nb5-m{margin-bottom:-1.25rem}.pv5-m{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-m{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-m{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-m{padding-left:1.25rem;padding-right:1.25rem}.mh5-m{margin-left:1.25rem;margin-right:1.25rem}.nh5-m{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-m{padding:1.5rem}.ma6-m{margin:1.5rem}.na6-m{margin:-1.5rem}.pl6-m{padding-left:1.5rem}.ml6-m{margin-left:1.5rem}.nl6-m{margin-left:-1.5rem}.pr6-m{padding-right:1.5rem}.mr6-m{margin-right:1.5rem}.nr6-m{margin-right:-1.5rem}.pt6-m{padding-top:1.5rem}.mt6-m{margin-top:1.5rem}.nt6-m{margin-top:-1.5rem}.pb6-m{padding-bottom:1.5rem}.mb6-m{margin-bottom:1.5rem}.nb6-m{margin-bottom:-1.5rem}.pv6-m{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-m{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-m{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-m{padding-left:1.5rem;padding-right:1.5rem}.mh6-m{margin-left:1.5rem;margin-right:1.5rem}.nh6-m{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-m{padding:2rem}.ma7-m{margin:2rem}.na7-m{margin:-2rem}.pl7-m{padding-left:2rem}.ml7-m{margin-left:2rem}.nl7-m{margin-left:-2rem}.pr7-m{padding-right:2rem}.mr7-m{margin-right:2rem}.nr7-m{margin-right:-2rem}.pt7-m{padding-top:2rem}.mt7-m{margin-top:2rem}.nt7-m{margin-top:-2rem}.pb7-m{padding-bottom:2rem}.mb7-m{margin-bottom:2rem}.nb7-m{margin-bottom:-2rem}.pv7-m{padding-top:2rem;padding-bottom:2rem}.mv7-m{margin-top:2rem;margin-bottom:2rem}.nv7-m{margin-top:-2rem;margin-bottom:-2rem}.ph7-m{padding-left:2rem;padding-right:2rem}.mh7-m{margin-left:2rem;margin-right:2rem}.nh7-m{margin-left:-2rem;margin-right:-2rem}.pa8-m{padding:3rem}.ma8-m{margin:3rem}.na8-m{margin:-3rem}.pl8-m{padding-left:3rem}.ml8-m{margin-left:3rem}.nl8-m{margin-left:-3rem}.pr8-m{padding-right:3rem}.mr8-m{margin-right:3rem}.nr8-m{margin-right:-3rem}.pt8-m{padding-top:3rem}.mt8-m{margin-top:3rem}.nt8-m{margin-top:-3rem}.pb8-m{padding-bottom:3rem}.mb8-m{margin-bottom:3rem}.nb8-m{margin-bottom:-3rem}.pv8-m{padding-top:3rem;padding-bottom:3rem}.mv8-m{margin-top:3rem;margin-bottom:3rem}.nv8-m{margin-top:-3rem;margin-bottom:-3rem}.ph8-m{padding-left:3rem;padding-right:3rem}.mh8-m{margin-left:3rem;margin-right:3rem}.nh8-m{margin-left:-3rem;margin-right:-3rem}.pa9-m{padding:4rem}.ma9-m{margin:4rem}.na9-m{margin:-4rem}.pl9-m{padding-left:4rem}.ml9-m{margin-left:4rem}.nl9-m{margin-left:-4rem}.pr9-m{padding-right:4rem}.mr9-m{margin-right:4rem}.nr9-m{margin-right:-4rem}.pt9-m{padding-top:4rem}.mt9-m{margin-top:4rem}.nt9-m{margin-top:-4rem}.pb9-m{padding-bottom:4rem}.mb9-m{margin-bottom:4rem}.nb9-m{margin-bottom:-4rem}.pv9-m{padding-top:4rem;padding-bottom:4rem}.mv9-m{margin-top:4rem;margin-bottom:4rem}.nv9-m{margin-top:-4rem;margin-bottom:-4rem}.ph9-m{padding-left:4rem;padding-right:4rem}.mh9-m{margin-left:4rem;margin-right:4rem}.nh9-m{margin-left:-4rem;margin-right:-4rem}.pa10-m{padding:6rem}.ma10-m{margin:6rem}.na10-m{margin:-6rem}.pl10-m{padding-left:6rem}.ml10-m{margin-left:6rem}.nl10-m{margin-left:-6rem}.pr10-m{padding-right:6rem}.mr10-m{margin-right:6rem}.nr10-m{margin-right:-6rem}.pt10-m{padding-top:6rem}.mt10-m{margin-top:6rem}.nt10-m{margin-top:-6rem}.pb10-m{padding-bottom:6rem}.mb10-m{margin-bottom:6rem}.nb10-m{margin-bottom:-6rem}.pv10-m{padding-top:6rem;padding-bottom:6rem}.mv10-m{margin-top:6rem;margin-bottom:6rem}.nv10-m{margin-top:-6rem;margin-bottom:-6rem}.ph10-m{padding-left:6rem;padding-right:6rem}.mh10-m{margin-left:6rem;margin-right:6rem}.nh10-m{margin-left:-6rem;margin-right:-6rem}.pa11-m{padding:10rem}.ma11-m{margin:10rem}.na11-m{margin:-10rem}.pl11-m{padding-left:10rem}.ml11-m{margin-left:10rem}.nl11-m{margin-left:-10rem}.pr11-m{padding-right:10rem}.mr11-m{margin-right:10rem}.nr11-m{margin-right:-10rem}.pt11-m{padding-top:10rem}.mt11-m{margin-top:10rem}.nt11-m{margin-top:-10rem}.pb11-m{padding-bottom:10rem}.mb11-m{margin-bottom:10rem}.nb11-m{margin-bottom:-10rem}.pv11-m{padding-top:10rem;padding-bottom:10rem}.mv11-m{margin-top:10rem;margin-bottom:10rem}.nv11-m{margin-top:-10rem;margin-bottom:-10rem}.ph11-m{padding-left:10rem;padding-right:10rem}.mh11-m{margin-left:10rem;margin-right:10rem}.nh11-m{margin-left:-10rem;margin-right:-10rem}.pa12-m{padding:18rem}.ma12-m{margin:18rem}.na12-m{margin:-18rem}.pl12-m{padding-left:18rem}.ml12-m{margin-left:18rem}.nl12-m{margin-left:-18rem}.pr12-m{padding-right:18rem}.mr12-m{margin-right:18rem}.nr12-m{margin-right:-18rem}.pt12-m{padding-top:18rem}.mt12-m{margin-top:18rem}.nt12-m{margin-top:-18rem}.pb12-m{padding-bottom:18rem}.mb12-m{margin-bottom:18rem}.nb12-m{margin-bottom:-18rem}.pv12-m{padding-top:18rem;padding-bottom:18rem}.mv12-m{margin-top:18rem;margin-bottom:18rem}.nv12-m{margin-top:-18rem;margin-bottom:-18rem}.ph12-m{padding-left:18rem;padding-right:18rem}.mh12-m{margin-left:18rem;margin-right:18rem}.nh12-m{margin-left:-18rem;margin-right:-18rem}.top-0-m{top:0}.right-0-m{right:0}.bottom-0-m{bottom:0}.left-0-m{left:0}.top-1-m{top:1rem}.right-1-m{right:1rem}.bottom-1-m{bottom:1rem}.left-1-m{left:1rem}.top-2-m{top:2rem}.right-2-m{right:2rem}.bottom-2-m{bottom:2rem}.left-2-m{left:2rem}.top--1-m{top:-1rem}.right--1-m{right:-1rem}.bottom--1-m{bottom:-1rem}.left--1-m{left:-1rem}.top--2-m{top:-2rem}.right--2-m{right:-2rem}.bottom--2-m{bottom:-2rem}.left--2-m{left:-2rem}.absolute--fill-m{top:0;right:0;bottom:0;left:0}.cf-m:after,.cf-m:before{content:" ";display:table}.cf-m:after{clear:both}.cf-m{*zoom:1}.cl-m{clear:left}.cr-m{clear:right}.cb-m{clear:both}.cn-m{clear:none}.dn-m{display:none}.di-m{display:inline}.db-m{display:block}.dib-m{display:inline-block}.dit-m{display:inline-table}.dt-m{display:table}.dtc-m{display:table-cell}.dt-row-m{display:table-row}.dt-row-group-m{display:table-row-group}.dt-column-m{display:table-column}.dt-column-group-m{display:table-column-group}.dt--fixed-m{table-layout:fixed;width:100%}.flex-m{display:flex}.inline-flex-m{display:inline-flex}.flex-auto-m{flex:1 1 auto;min-width:0;min-height:0}.flex-none-m{flex:none}.flex-column-m{flex-direction:column}.flex-row-m{flex-direction:row}.flex-wrap-m{flex-wrap:wrap}.flex-nowrap-m{flex-wrap:nowrap}.flex-wrap-reverse-m{flex-wrap:wrap-reverse}.flex-column-reverse-m{flex-direction:column-reverse}.flex-row-reverse-m{flex-direction:row-reverse}.items-start-m{align-items:flex-start}.items-end-m{align-items:flex-end}.items-center-m{align-items:center}.items-baseline-m{align-items:baseline}.items-stretch-m{align-items:stretch}.self-start-m{align-self:flex-start}.self-end-m{align-self:flex-end}.self-center-m{align-self:center}.self-baseline-m{align-self:baseline}.self-stretch-m{align-self:stretch}.justify-start-m{justify-content:flex-start}.justify-end-m{justify-content:flex-end}.justify-center-m{justify-content:center}.justify-between-m{justify-content:space-between}.justify-around-m{justify-content:space-around}.content-start-m{align-content:flex-start}.content-end-m{align-content:flex-end}.content-center-m{align-content:center}.content-between-m{align-content:space-between}.content-around-m{align-content:space-around}.content-stretch-m{align-content:stretch}.order-0-m{order:0}.order-1-m{order:1}.order-2-m{order:2}.order-3-m{order:3}.order-4-m{order:4}.order-5-m{order:5}.order-6-m{order:6}.order-7-m{order:7}.order-8-m{order:8}.order-last-m{order:99999}.flex-grow-0-m{flex-grow:0}.flex-grow-1-m{flex-grow:1}.flex-shrink-0-m{flex-shrink:0}.flex-shrink-1-m{flex-shrink:1}.fl-m{float:left}.fl-m,.fr-m{_display:inline}.fr-m{float:right}.fn-m{float:none}.i-m{font-style:italic}.fs-normal-m{font-style:normal}.normal-m{font-weight:400}.b-m{font-weight:700}.fw1-m{font-weight:100}.fw2-m{font-weight:200}.fw3-m{font-weight:300}.fw4-m{font-weight:400}.fw5-m{font-weight:500}.fw6-m{font-weight:600}.fw7-m{font-weight:700}.fw8-m{font-weight:800}.fw9-m{font-weight:900}.h1-m{height:1rem}.h2-m{height:2rem}.h3-m{height:4rem}.h4-m{height:8rem}.h5-m{height:16rem}.h-25-m{height:25%}.h-50-m{height:50%}.h-75-m{height:75%}.h-100-m{height:100%}.min-h-100-m{min-height:100%}.vh-25-m{height:25vh}.vh-50-m{height:50vh}.vh-75-m{height:75vh}.vh-100-m{height:100vh}.min-vh-100-m{min-height:100vh}.h-auto-m{height:auto}.h-inherit-m{height:inherit}.tracked-m{letter-spacing:.1em}.tracked-tight-m{letter-spacing:-.05em}.tracked-mega-m{letter-spacing:.25em}.lh-solid-m{line-height:1.333333}.lh-title-m{line-height:1.5}.lh-copy-m{line-height:1.666666}.mw1-m{max-width:1rem}.mw2-m{max-width:2rem}.mw3-m{max-width:4rem}.mw4-m{max-width:8rem}.mw5-m{max-width:16rem}.mw6-m{max-width:32rem}.mw7-m{max-width:48rem}.mw8-m{max-width:64rem}.mw9-m{max-width:96rem}.mw-none-m{max-width:none}.mw-100-m{max-width:100%}.o-100-m{opacity:1}.o-90-m{opacity:.9}.o-80-m{opacity:.8}.o-70-m{opacity:.7}.o-60-m{opacity:.6}.o-50-m{opacity:.5}.o-40-m{opacity:.4}.o-30-m{opacity:.3}.o-20-m{opacity:.2}.o-10-m{opacity:.1}.o-05-m{opacity:.05}.o-025-m{opacity:.025}.o-0-m{opacity:0}.rotate-45-m{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-m{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-m{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-m{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-m{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-m{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-m{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-m{outline:1px solid}.outline-transparent-m{outline:1px solid transparent}.outline-0-m{outline:0}.overflow-visible-m{overflow:visible}.overflow-hidden-m{overflow:hidden}.overflow-scroll-m{overflow:scroll}.overflow-auto-m{overflow:auto}.overflow-x-visible-m{overflow-x:visible}.overflow-x-hidden-m{overflow-x:hidden}.overflow-x-scroll-m{overflow-x:scroll}.overflow-x-auto-m{overflow-x:auto}.overflow-y-visible-m{overflow-y:visible}.overflow-y-hidden-m{overflow-y:hidden}.overflow-y-scroll-m{overflow-y:scroll}.overflow-y-auto-m{overflow-y:auto}.static-m{position:static}.relative-m{position:relative}.absolute-m{position:absolute}.fixed-m{position:fixed}.strike-m{text-decoration:line-through}.underline-m{text-decoration:underline}.no-underline-m{text-decoration:none}.tl-m{text-align:left}.tr-m{text-align:right}.tc-m{text-align:center}.tj-m{text-align:justify}.ttc-m{text-transform:capitalize}.ttl-m{text-transform:lowercase}.ttu-m{text-transform:uppercase}.ttn-m{text-transform:none}.f1-m{font-size:4.5rem}.f2-m{font-size:4rem}.f3-m{font-size:3rem}.f4-m{font-size:2rem}.f5-m{font-size:1.5rem}.f6-m{font-size:1.125rem}.f7-m{font-size:1rem}.f8-m{font-size:.875rem}.f9-m{font-size:.75rem}.measure-m{max-width:30em}.measure-wide-m{max-width:34em}.measure-narrow-m{max-width:20em}.small-caps-m{font-variant:small-caps}.indent-m{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-m{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-m{white-space:normal}.nowrap-m{white-space:nowrap}.pre-m{white-space:pre}.w1-m{width:1rem}.w2-m{width:2rem}.w3-m{width:4rem}.w4-m{width:8rem}.w5-m{width:16rem}.w-10-m{width:10%}.w-20-m{width:20%}.w-25-m{width:25%}.w-30-m{width:30%}.w-33-m{width:33%}.w-34-m{width:34%}.w-40-m{width:40%}.w-50-m{width:50%}.w-60-m{width:60%}.w-70-m{width:70%}.w-75-m{width:75%}.w-80-m{width:80%}.w-90-m{width:90%}.w-100-m{width:100%}.w-third-m{width:33.33333%}.w-two-thirds-m{width:66.66667%}.w-auto-m{width:auto}}@media screen and (min-width:46.875em) and (max-width:60em){.aspect-ratio-l{height:0;position:relative}.aspect-ratio--16x9-l{padding-bottom:56.25%}.aspect-ratio--9x16-l{padding-bottom:177.77%}.aspect-ratio--4x3-l{padding-bottom:75%}.aspect-ratio--3x4-l{padding-bottom:133.33%}.aspect-ratio--6x4-l{padding-bottom:66.6%}.aspect-ratio--4x6-l{padding-bottom:150%}.aspect-ratio--8x5-l{padding-bottom:62.5%}.aspect-ratio--5x8-l{padding-bottom:160%}.aspect-ratio--7x5-l{padding-bottom:71.42%}.aspect-ratio--5x7-l{padding-bottom:140%}.aspect-ratio--1x1-l{padding-bottom:100%}.aspect-ratio--object-l{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-l{background-size:cover!important}.contain-l{background-size:contain!important}.bg-center-l{background-position:50%}.bg-center-l,.bg-top-l{background-repeat:no-repeat}.bg-top-l{background-position:top}.bg-right-l{background-position:100%}.bg-bottom-l,.bg-right-l{background-repeat:no-repeat}.bg-bottom-l{background-position:bottom}.bg-left-l{background-repeat:no-repeat;background-position:0}.ba-l{border-style:solid;border-width:1px}.bt-l{border-top-style:solid;border-top-width:1px}.br-l{border-right-style:solid;border-right-width:1px}.bb-l{border-bottom-style:solid;border-bottom-width:1px}.bl-l{border-left-style:solid;border-left-width:1px}.bn-l{border-style:none;border-width:0}.br0-l{border-radius:0}.br1-l{border-radius:.125rem}.br2-l{border-radius:.25rem}.br3-l{border-radius:.5rem}.br4-l{border-radius:1rem}.br-100-l{border-radius:100%}.br-pill-l{border-radius:9999px}.br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.br--top-l{border-bottom-right-radius:0}.br--right-l,.br--top-l{border-bottom-left-radius:0}.br--right-l{border-top-left-radius:0}.br--left-l{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-l{border-style:dotted}.b--dashed-l{border-style:dashed}.b--solid-l{border-style:solid}.b--none-l{border-style:none}.bw0-l{border-width:0}.bw1-l{border-width:.125rem}.bw2-l{border-width:.25rem}.bw3-l{border-width:.5rem}.bw4-l{border-width:1rem}.bw5-l{border-width:2rem}.bt-0-l{border-top-width:0}.br-0-l{border-right-width:0}.bb-0-l{border-bottom-width:0}.bl-0-l{border-left-width:0}.shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-l{padding:0}.ma0-l,.na0-l{margin:0}.pl0-l{padding-left:0}.ml0-l,.nl0-l{margin-left:0}.pr0-l{padding-right:0}.mr0-l,.nr0-l{margin-right:0}.pt0-l{padding-top:0}.mt0-l,.nt0-l{margin-top:0}.pb0-l{padding-bottom:0}.mb0-l,.nb0-l{margin-bottom:0}.pv0-l{padding-top:0;padding-bottom:0}.mv0-l,.nv0-l{margin-top:0;margin-bottom:0}.ph0-l{padding-left:0;padding-right:0}.mh0-l,.nh0-l{margin-left:0;margin-right:0}.pa1-l{padding:.25rem}.ma1-l{margin:.25rem}.na1-l{margin:-.25rem}.pl1-l{padding-left:.25rem}.ml1-l{margin-left:.25rem}.nl1-l{margin-left:-.25rem}.pr1-l{padding-right:.25rem}.mr1-l{margin-right:.25rem}.nr1-l{margin-right:-.25rem}.pt1-l{padding-top:.25rem}.mt1-l{margin-top:.25rem}.nt1-l{margin-top:-.25rem}.pb1-l{padding-bottom:.25rem}.mb1-l{margin-bottom:.25rem}.nb1-l{margin-bottom:-.25rem}.pv1-l{padding-top:.25rem;padding-bottom:.25rem}.mv1-l{margin-top:.25rem;margin-bottom:.25rem}.nv1-l{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-l{padding-left:.25rem;padding-right:.25rem}.mh1-l{margin-left:.25rem;margin-right:.25rem}.nh1-l{margin-left:-.25rem;margin-right:-.25rem}.pa2-l{padding:.5rem}.ma2-l{margin:.5rem}.na2-l{margin:-.5rem}.pl2-l{padding-left:.5rem}.ml2-l{margin-left:.5rem}.nl2-l{margin-left:-.5rem}.pr2-l{padding-right:.5rem}.mr2-l{margin-right:.5rem}.nr2-l{margin-right:-.5rem}.pt2-l{padding-top:.5rem}.mt2-l{margin-top:.5rem}.nt2-l{margin-top:-.5rem}.pb2-l{padding-bottom:.5rem}.mb2-l{margin-bottom:.5rem}.nb2-l{margin-bottom:-.5rem}.pv2-l{padding-top:.5rem;padding-bottom:.5rem}.mv2-l{margin-top:.5rem;margin-bottom:.5rem}.nv2-l{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-l{padding-left:.5rem;padding-right:.5rem}.mh2-l{margin-left:.5rem;margin-right:.5rem}.nh2-l{margin-left:-.5rem;margin-right:-.5rem}.pa3-l{padding:.75rem}.ma3-l{margin:.75rem}.na3-l{margin:-.75rem}.pl3-l{padding-left:.75rem}.ml3-l{margin-left:.75rem}.nl3-l{margin-left:-.75rem}.pr3-l{padding-right:.75rem}.mr3-l{margin-right:.75rem}.nr3-l{margin-right:-.75rem}.pt3-l{padding-top:.75rem}.mt3-l{margin-top:.75rem}.nt3-l{margin-top:-.75rem}.pb3-l{padding-bottom:.75rem}.mb3-l{margin-bottom:.75rem}.nb3-l{margin-bottom:-.75rem}.pv3-l{padding-top:.75rem;padding-bottom:.75rem}.mv3-l{margin-top:.75rem;margin-bottom:.75rem}.nv3-l{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-l{padding-left:.75rem;padding-right:.75rem}.mh3-l{margin-left:.75rem;margin-right:.75rem}.nh3-l{margin-left:-.75rem;margin-right:-.75rem}.pa4-l{padding:1rem}.ma4-l{margin:1rem}.na4-l{margin:-1rem}.pl4-l{padding-left:1rem}.ml4-l{margin-left:1rem}.nl4-l{margin-left:-1rem}.pr4-l{padding-right:1rem}.mr4-l{margin-right:1rem}.nr4-l{margin-right:-1rem}.pt4-l{padding-top:1rem}.mt4-l{margin-top:1rem}.nt4-l{margin-top:-1rem}.pb4-l{padding-bottom:1rem}.mb4-l{margin-bottom:1rem}.nb4-l{margin-bottom:-1rem}.pv4-l{padding-top:1rem;padding-bottom:1rem}.mv4-l{margin-top:1rem;margin-bottom:1rem}.nv4-l{margin-top:-1rem;margin-bottom:-1rem}.ph4-l{padding-left:1rem;padding-right:1rem}.mh4-l{margin-left:1rem;margin-right:1rem}.nh4-l{margin-left:-1rem;margin-right:-1rem}.pa5-l{padding:1.25rem}.ma5-l{margin:1.25rem}.na5-l{margin:-1.25rem}.pl5-l{padding-left:1.25rem}.ml5-l{margin-left:1.25rem}.nl5-l{margin-left:-1.25rem}.pr5-l{padding-right:1.25rem}.mr5-l{margin-right:1.25rem}.nr5-l{margin-right:-1.25rem}.pt5-l{padding-top:1.25rem}.mt5-l{margin-top:1.25rem}.nt5-l{margin-top:-1.25rem}.pb5-l{padding-bottom:1.25rem}.mb5-l{margin-bottom:1.25rem}.nb5-l{margin-bottom:-1.25rem}.pv5-l{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-l{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-l{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-l{padding-left:1.25rem;padding-right:1.25rem}.mh5-l{margin-left:1.25rem;margin-right:1.25rem}.nh5-l{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-l{padding:1.5rem}.ma6-l{margin:1.5rem}.na6-l{margin:-1.5rem}.pl6-l{padding-left:1.5rem}.ml6-l{margin-left:1.5rem}.nl6-l{margin-left:-1.5rem}.pr6-l{padding-right:1.5rem}.mr6-l{margin-right:1.5rem}.nr6-l{margin-right:-1.5rem}.pt6-l{padding-top:1.5rem}.mt6-l{margin-top:1.5rem}.nt6-l{margin-top:-1.5rem}.pb6-l{padding-bottom:1.5rem}.mb6-l{margin-bottom:1.5rem}.nb6-l{margin-bottom:-1.5rem}.pv6-l{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-l{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-l{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-l{padding-left:1.5rem;padding-right:1.5rem}.mh6-l{margin-left:1.5rem;margin-right:1.5rem}.nh6-l{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-l{padding:2rem}.ma7-l{margin:2rem}.na7-l{margin:-2rem}.pl7-l{padding-left:2rem}.ml7-l{margin-left:2rem}.nl7-l{margin-left:-2rem}.pr7-l{padding-right:2rem}.mr7-l{margin-right:2rem}.nr7-l{margin-right:-2rem}.pt7-l{padding-top:2rem}.mt7-l{margin-top:2rem}.nt7-l{margin-top:-2rem}.pb7-l{padding-bottom:2rem}.mb7-l{margin-bottom:2rem}.nb7-l{margin-bottom:-2rem}.pv7-l{padding-top:2rem;padding-bottom:2rem}.mv7-l{margin-top:2rem;margin-bottom:2rem}.nv7-l{margin-top:-2rem;margin-bottom:-2rem}.ph7-l{padding-left:2rem;padding-right:2rem}.mh7-l{margin-left:2rem;margin-right:2rem}.nh7-l{margin-left:-2rem;margin-right:-2rem}.pa8-l{padding:3rem}.ma8-l{margin:3rem}.na8-l{margin:-3rem}.pl8-l{padding-left:3rem}.ml8-l{margin-left:3rem}.nl8-l{margin-left:-3rem}.pr8-l{padding-right:3rem}.mr8-l{margin-right:3rem}.nr8-l{margin-right:-3rem}.pt8-l{padding-top:3rem}.mt8-l{margin-top:3rem}.nt8-l{margin-top:-3rem}.pb8-l{padding-bottom:3rem}.mb8-l{margin-bottom:3rem}.nb8-l{margin-bottom:-3rem}.pv8-l{padding-top:3rem;padding-bottom:3rem}.mv8-l{margin-top:3rem;margin-bottom:3rem}.nv8-l{margin-top:-3rem;margin-bottom:-3rem}.ph8-l{padding-left:3rem;padding-right:3rem}.mh8-l{margin-left:3rem;margin-right:3rem}.nh8-l{margin-left:-3rem;margin-right:-3rem}.pa9-l{padding:4rem}.ma9-l{margin:4rem}.na9-l{margin:-4rem}.pl9-l{padding-left:4rem}.ml9-l{margin-left:4rem}.nl9-l{margin-left:-4rem}.pr9-l{padding-right:4rem}.mr9-l{margin-right:4rem}.nr9-l{margin-right:-4rem}.pt9-l{padding-top:4rem}.mt9-l{margin-top:4rem}.nt9-l{margin-top:-4rem}.pb9-l{padding-bottom:4rem}.mb9-l{margin-bottom:4rem}.nb9-l{margin-bottom:-4rem}.pv9-l{padding-top:4rem;padding-bottom:4rem}.mv9-l{margin-top:4rem;margin-bottom:4rem}.nv9-l{margin-top:-4rem;margin-bottom:-4rem}.ph9-l{padding-left:4rem;padding-right:4rem}.mh9-l{margin-left:4rem;margin-right:4rem}.nh9-l{margin-left:-4rem;margin-right:-4rem}.pa10-l{padding:6rem}.ma10-l{margin:6rem}.na10-l{margin:-6rem}.pl10-l{padding-left:6rem}.ml10-l{margin-left:6rem}.nl10-l{margin-left:-6rem}.pr10-l{padding-right:6rem}.mr10-l{margin-right:6rem}.nr10-l{margin-right:-6rem}.pt10-l{padding-top:6rem}.mt10-l{margin-top:6rem}.nt10-l{margin-top:-6rem}.pb10-l{padding-bottom:6rem}.mb10-l{margin-bottom:6rem}.nb10-l{margin-bottom:-6rem}.pv10-l{padding-top:6rem;padding-bottom:6rem}.mv10-l{margin-top:6rem;margin-bottom:6rem}.nv10-l{margin-top:-6rem;margin-bottom:-6rem}.ph10-l{padding-left:6rem;padding-right:6rem}.mh10-l{margin-left:6rem;margin-right:6rem}.nh10-l{margin-left:-6rem;margin-right:-6rem}.pa11-l{padding:10rem}.ma11-l{margin:10rem}.na11-l{margin:-10rem}.pl11-l{padding-left:10rem}.ml11-l{margin-left:10rem}.nl11-l{margin-left:-10rem}.pr11-l{padding-right:10rem}.mr11-l{margin-right:10rem}.nr11-l{margin-right:-10rem}.pt11-l{padding-top:10rem}.mt11-l{margin-top:10rem}.nt11-l{margin-top:-10rem}.pb11-l{padding-bottom:10rem}.mb11-l{margin-bottom:10rem}.nb11-l{margin-bottom:-10rem}.pv11-l{padding-top:10rem;padding-bottom:10rem}.mv11-l{margin-top:10rem;margin-bottom:10rem}.nv11-l{margin-top:-10rem;margin-bottom:-10rem}.ph11-l{padding-left:10rem;padding-right:10rem}.mh11-l{margin-left:10rem;margin-right:10rem}.nh11-l{margin-left:-10rem;margin-right:-10rem}.pa12-l{padding:18rem}.ma12-l{margin:18rem}.na12-l{margin:-18rem}.pl12-l{padding-left:18rem}.ml12-l{margin-left:18rem}.nl12-l{margin-left:-18rem}.pr12-l{padding-right:18rem}.mr12-l{margin-right:18rem}.nr12-l{margin-right:-18rem}.pt12-l{padding-top:18rem}.mt12-l{margin-top:18rem}.nt12-l{margin-top:-18rem}.pb12-l{padding-bottom:18rem}.mb12-l{margin-bottom:18rem}.nb12-l{margin-bottom:-18rem}.pv12-l{padding-top:18rem;padding-bottom:18rem}.mv12-l{margin-top:18rem;margin-bottom:18rem}.nv12-l{margin-top:-18rem;margin-bottom:-18rem}.ph12-l{padding-left:18rem;padding-right:18rem}.mh12-l{margin-left:18rem;margin-right:18rem}.nh12-l{margin-left:-18rem;margin-right:-18rem}.top-0-l{top:0}.right-0-l{right:0}.bottom-0-l{bottom:0}.left-0-l{left:0}.top-1-l{top:1rem}.right-1-l{right:1rem}.bottom-1-l{bottom:1rem}.left-1-l{left:1rem}.top-2-l{top:2rem}.right-2-l{right:2rem}.bottom-2-l{bottom:2rem}.left-2-l{left:2rem}.top--1-l{top:-1rem}.right--1-l{right:-1rem}.bottom--1-l{bottom:-1rem}.left--1-l{left:-1rem}.top--2-l{top:-2rem}.right--2-l{right:-2rem}.bottom--2-l{bottom:-2rem}.left--2-l{left:-2rem}.absolute--fill-l{top:0;right:0;bottom:0;left:0}.cf-l:after,.cf-l:before{content:" ";display:table}.cf-l:after{clear:both}.cf-l{*zoom:1}.cl-l{clear:left}.cr-l{clear:right}.cb-l{clear:both}.cn-l{clear:none}.dn-l{display:none}.di-l{display:inline}.db-l{display:block}.dib-l{display:inline-block}.dit-l{display:inline-table}.dt-l{display:table}.dtc-l{display:table-cell}.dt-row-l{display:table-row}.dt-row-group-l{display:table-row-group}.dt-column-l{display:table-column}.dt-column-group-l{display:table-column-group}.dt--fixed-l{table-layout:fixed;width:100%}.flex-l{display:flex}.inline-flex-l{display:inline-flex}.flex-auto-l{flex:1 1 auto;min-width:0;min-height:0}.flex-none-l{flex:none}.flex-column-l{flex-direction:column}.flex-row-l{flex-direction:row}.flex-wrap-l{flex-wrap:wrap}.flex-nowrap-l{flex-wrap:nowrap}.flex-wrap-reverse-l{flex-wrap:wrap-reverse}.flex-column-reverse-l{flex-direction:column-reverse}.flex-row-reverse-l{flex-direction:row-reverse}.items-start-l{align-items:flex-start}.items-end-l{align-items:flex-end}.items-center-l{align-items:center}.items-baseline-l{align-items:baseline}.items-stretch-l{align-items:stretch}.self-start-l{align-self:flex-start}.self-end-l{align-self:flex-end}.self-center-l{align-self:center}.self-baseline-l{align-self:baseline}.self-stretch-l{align-self:stretch}.justify-start-l{justify-content:flex-start}.justify-end-l{justify-content:flex-end}.justify-center-l{justify-content:center}.justify-between-l{justify-content:space-between}.justify-around-l{justify-content:space-around}.content-start-l{align-content:flex-start}.content-end-l{align-content:flex-end}.content-center-l{align-content:center}.content-between-l{align-content:space-between}.content-around-l{align-content:space-around}.content-stretch-l{align-content:stretch}.order-0-l{order:0}.order-1-l{order:1}.order-2-l{order:2}.order-3-l{order:3}.order-4-l{order:4}.order-5-l{order:5}.order-6-l{order:6}.order-7-l{order:7}.order-8-l{order:8}.order-last-l{order:99999}.flex-grow-0-l{flex-grow:0}.flex-grow-1-l{flex-grow:1}.flex-shrink-0-l{flex-shrink:0}.flex-shrink-1-l{flex-shrink:1}.fl-l{float:left}.fl-l,.fr-l{_display:inline}.fr-l{float:right}.fn-l{float:none}.i-l{font-style:italic}.fs-normal-l{font-style:normal}.normal-l{font-weight:400}.b-l{font-weight:700}.fw1-l{font-weight:100}.fw2-l{font-weight:200}.fw3-l{font-weight:300}.fw4-l{font-weight:400}.fw5-l{font-weight:500}.fw6-l{font-weight:600}.fw7-l{font-weight:700}.fw8-l{font-weight:800}.fw9-l{font-weight:900}.h1-l{height:1rem}.h2-l{height:2rem}.h3-l{height:4rem}.h4-l{height:8rem}.h5-l{height:16rem}.h-25-l{height:25%}.h-50-l{height:50%}.h-75-l{height:75%}.h-100-l{height:100%}.min-h-100-l{min-height:100%}.vh-25-l{height:25vh}.vh-50-l{height:50vh}.vh-75-l{height:75vh}.vh-100-l{height:100vh}.min-vh-100-l{min-height:100vh}.h-auto-l{height:auto}.h-inherit-l{height:inherit}.tracked-l{letter-spacing:.1em}.tracked-tight-l{letter-spacing:-.05em}.tracked-mega-l{letter-spacing:.25em}.lh-solid-l{line-height:1.333333}.lh-title-l{line-height:1.5}.lh-copy-l{line-height:1.666666}.mw1-l{max-width:1rem}.mw2-l{max-width:2rem}.mw3-l{max-width:4rem}.mw4-l{max-width:8rem}.mw5-l{max-width:16rem}.mw6-l{max-width:32rem}.mw7-l{max-width:48rem}.mw8-l{max-width:64rem}.mw9-l{max-width:96rem}.mw-none-l{max-width:none}.mw-100-l{max-width:100%}.o-100-l{opacity:1}.o-90-l{opacity:.9}.o-80-l{opacity:.8}.o-70-l{opacity:.7}.o-60-l{opacity:.6}.o-50-l{opacity:.5}.o-40-l{opacity:.4}.o-30-l{opacity:.3}.o-20-l{opacity:.2}.o-10-l{opacity:.1}.o-05-l{opacity:.05}.o-025-l{opacity:.025}.o-0-l{opacity:0}.rotate-45-l{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-l{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-l{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-l{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-l{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-l{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-l{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-l{outline:1px solid}.outline-transparent-l{outline:1px solid transparent}.outline-0-l{outline:0}.overflow-visible-l{overflow:visible}.overflow-hidden-l{overflow:hidden}.overflow-scroll-l{overflow:scroll}.overflow-auto-l{overflow:auto}.overflow-x-visible-l{overflow-x:visible}.overflow-x-hidden-l{overflow-x:hidden}.overflow-x-scroll-l{overflow-x:scroll}.overflow-x-auto-l{overflow-x:auto}.overflow-y-visible-l{overflow-y:visible}.overflow-y-hidden-l{overflow-y:hidden}.overflow-y-scroll-l{overflow-y:scroll}.overflow-y-auto-l{overflow-y:auto}.static-l{position:static}.relative-l{position:relative}.absolute-l{position:absolute}.fixed-l{position:fixed}.strike-l{text-decoration:line-through}.underline-l{text-decoration:underline}.no-underline-l{text-decoration:none}.tl-l{text-align:left}.tr-l{text-align:right}.tc-l{text-align:center}.tj-l{text-align:justify}.ttc-l{text-transform:capitalize}.ttl-l{text-transform:lowercase}.ttu-l{text-transform:uppercase}.ttn-l{text-transform:none}.f1-l{font-size:4.5rem}.f2-l{font-size:4rem}.f3-l{font-size:3rem}.f4-l{font-size:2rem}.f5-l{font-size:1.5rem}.f6-l{font-size:1.125rem}.f7-l{font-size:1rem}.f8-l{font-size:.875rem}.f9-l{font-size:.75rem}.measure-l{max-width:30em}.measure-wide-l{max-width:34em}.measure-narrow-l{max-width:20em}.small-caps-l{font-variant:small-caps}.indent-l{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-l{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-l{white-space:normal}.nowrap-l{white-space:nowrap}.pre-l{white-space:pre}.w1-l{width:1rem}.w2-l{width:2rem}.w3-l{width:4rem}.w4-l{width:8rem}.w5-l{width:16rem}.w-10-l{width:10%}.w-20-l{width:20%}.w-25-l{width:25%}.w-30-l{width:30%}.w-33-l{width:33%}.w-34-l{width:34%}.w-40-l{width:40%}.w-50-l{width:50%}.w-60-l{width:60%}.w-70-l{width:70%}.w-75-l{width:75%}.w-80-l{width:80%}.w-90-l{width:90%}.w-100-l{width:100%}.w-third-l{width:33.33333%}.w-two-thirds-l{width:66.66667%}.w-auto-l{width:auto}}@media screen and (min-width:60em){.aspect-ratio-xl{height:0;position:relative}.aspect-ratio--16x9-xl{padding-bottom:56.25%}.aspect-ratio--9x16-xl{padding-bottom:177.77%}.aspect-ratio--4x3-xl{padding-bottom:75%}.aspect-ratio--3x4-xl{padding-bottom:133.33%}.aspect-ratio--6x4-xl{padding-bottom:66.6%}.aspect-ratio--4x6-xl{padding-bottom:150%}.aspect-ratio--8x5-xl{padding-bottom:62.5%}.aspect-ratio--5x8-xl{padding-bottom:160%}.aspect-ratio--7x5-xl{padding-bottom:71.42%}.aspect-ratio--5x7-xl{padding-bottom:140%}.aspect-ratio--1x1-xl{padding-bottom:100%}.aspect-ratio--object-xl{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-xl{background-size:cover!important}.contain-xl{background-size:contain!important}.bg-center-xl{background-position:50%}.bg-center-xl,.bg-top-xl{background-repeat:no-repeat}.bg-top-xl{background-position:top}.bg-right-xl{background-position:100%}.bg-bottom-xl,.bg-right-xl{background-repeat:no-repeat}.bg-bottom-xl{background-position:bottom}.bg-left-xl{background-repeat:no-repeat;background-position:0}.ba-xl{border-style:solid;border-width:1px}.bt-xl{border-top-style:solid;border-top-width:1px}.br-xl{border-right-style:solid;border-right-width:1px}.bb-xl{border-bottom-style:solid;border-bottom-width:1px}.bl-xl{border-left-style:solid;border-left-width:1px}.bn-xl{border-style:none;border-width:0}.br0-xl{border-radius:0}.br1-xl{border-radius:.125rem}.br2-xl{border-radius:.25rem}.br3-xl{border-radius:.5rem}.br4-xl{border-radius:1rem}.br-100-xl{border-radius:100%}.br-pill-xl{border-radius:9999px}.br--bottom-xl{border-top-left-radius:0;border-top-right-radius:0}.br--top-xl{border-bottom-right-radius:0}.br--right-xl,.br--top-xl{border-bottom-left-radius:0}.br--right-xl{border-top-left-radius:0}.br--left-xl{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-xl{border-style:dotted}.b--dashed-xl{border-style:dashed}.b--solid-xl{border-style:solid}.b--none-xl{border-style:none}.bw0-xl{border-width:0}.bw1-xl{border-width:.125rem}.bw2-xl{border-width:.25rem}.bw3-xl{border-width:.5rem}.bw4-xl{border-width:1rem}.bw5-xl{border-width:2rem}.bt-0-xl{border-top-width:0}.br-0-xl{border-right-width:0}.bb-0-xl{border-bottom-width:0}.bl-0-xl{border-left-width:0}.shadow-1-xl{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-xl{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-xl{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-xl{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-xl{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-xl{padding:0}.ma0-xl,.na0-xl{margin:0}.pl0-xl{padding-left:0}.ml0-xl,.nl0-xl{margin-left:0}.pr0-xl{padding-right:0}.mr0-xl,.nr0-xl{margin-right:0}.pt0-xl{padding-top:0}.mt0-xl,.nt0-xl{margin-top:0}.pb0-xl{padding-bottom:0}.mb0-xl,.nb0-xl{margin-bottom:0}.pv0-xl{padding-top:0;padding-bottom:0}.mv0-xl,.nv0-xl{margin-top:0;margin-bottom:0}.ph0-xl{padding-left:0;padding-right:0}.mh0-xl,.nh0-xl{margin-left:0;margin-right:0}.pa1-xl{padding:.25rem}.ma1-xl{margin:.25rem}.na1-xl{margin:-.25rem}.pl1-xl{padding-left:.25rem}.ml1-xl{margin-left:.25rem}.nl1-xl{margin-left:-.25rem}.pr1-xl{padding-right:.25rem}.mr1-xl{margin-right:.25rem}.nr1-xl{margin-right:-.25rem}.pt1-xl{padding-top:.25rem}.mt1-xl{margin-top:.25rem}.nt1-xl{margin-top:-.25rem}.pb1-xl{padding-bottom:.25rem}.mb1-xl{margin-bottom:.25rem}.nb1-xl{margin-bottom:-.25rem}.pv1-xl{padding-top:.25rem;padding-bottom:.25rem}.mv1-xl{margin-top:.25rem;margin-bottom:.25rem}.nv1-xl{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-xl{padding-left:.25rem;padding-right:.25rem}.mh1-xl{margin-left:.25rem;margin-right:.25rem}.nh1-xl{margin-left:-.25rem;margin-right:-.25rem}.pa2-xl{padding:.5rem}.ma2-xl{margin:.5rem}.na2-xl{margin:-.5rem}.pl2-xl{padding-left:.5rem}.ml2-xl{margin-left:.5rem}.nl2-xl{margin-left:-.5rem}.pr2-xl{padding-right:.5rem}.mr2-xl{margin-right:.5rem}.nr2-xl{margin-right:-.5rem}.pt2-xl{padding-top:.5rem}.mt2-xl{margin-top:.5rem}.nt2-xl{margin-top:-.5rem}.pb2-xl{padding-bottom:.5rem}.mb2-xl{margin-bottom:.5rem}.nb2-xl{margin-bottom:-.5rem}.pv2-xl{padding-top:.5rem;padding-bottom:.5rem}.mv2-xl{margin-top:.5rem;margin-bottom:.5rem}.nv2-xl{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-xl{padding-left:.5rem;padding-right:.5rem}.mh2-xl{margin-left:.5rem;margin-right:.5rem}.nh2-xl{margin-left:-.5rem;margin-right:-.5rem}.pa3-xl{padding:.75rem}.ma3-xl{margin:.75rem}.na3-xl{margin:-.75rem}.pl3-xl{padding-left:.75rem}.ml3-xl{margin-left:.75rem}.nl3-xl{margin-left:-.75rem}.pr3-xl{padding-right:.75rem}.mr3-xl{margin-right:.75rem}.nr3-xl{margin-right:-.75rem}.pt3-xl{padding-top:.75rem}.mt3-xl{margin-top:.75rem}.nt3-xl{margin-top:-.75rem}.pb3-xl{padding-bottom:.75rem}.mb3-xl{margin-bottom:.75rem}.nb3-xl{margin-bottom:-.75rem}.pv3-xl{padding-top:.75rem;padding-bottom:.75rem}.mv3-xl{margin-top:.75rem;margin-bottom:.75rem}.nv3-xl{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-xl{padding-left:.75rem;padding-right:.75rem}.mh3-xl{margin-left:.75rem;margin-right:.75rem}.nh3-xl{margin-left:-.75rem;margin-right:-.75rem}.pa4-xl{padding:1rem}.ma4-xl{margin:1rem}.na4-xl{margin:-1rem}.pl4-xl{padding-left:1rem}.ml4-xl{margin-left:1rem}.nl4-xl{margin-left:-1rem}.pr4-xl{padding-right:1rem}.mr4-xl{margin-right:1rem}.nr4-xl{margin-right:-1rem}.pt4-xl{padding-top:1rem}.mt4-xl{margin-top:1rem}.nt4-xl{margin-top:-1rem}.pb4-xl{padding-bottom:1rem}.mb4-xl{margin-bottom:1rem}.nb4-xl{margin-bottom:-1rem}.pv4-xl{padding-top:1rem;padding-bottom:1rem}.mv4-xl{margin-top:1rem;margin-bottom:1rem}.nv4-xl{margin-top:-1rem;margin-bottom:-1rem}.ph4-xl{padding-left:1rem;padding-right:1rem}.mh4-xl{margin-left:1rem;margin-right:1rem}.nh4-xl{margin-left:-1rem;margin-right:-1rem}.pa5-xl{padding:1.25rem}.ma5-xl{margin:1.25rem}.na5-xl{margin:-1.25rem}.pl5-xl{padding-left:1.25rem}.ml5-xl{margin-left:1.25rem}.nl5-xl{margin-left:-1.25rem}.pr5-xl{padding-right:1.25rem}.mr5-xl{margin-right:1.25rem}.nr5-xl{margin-right:-1.25rem}.pt5-xl{padding-top:1.25rem}.mt5-xl{margin-top:1.25rem}.nt5-xl{margin-top:-1.25rem}.pb5-xl{padding-bottom:1.25rem}.mb5-xl{margin-bottom:1.25rem}.nb5-xl{margin-bottom:-1.25rem}.pv5-xl{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-xl{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-xl{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-xl{padding-left:1.25rem;padding-right:1.25rem}.mh5-xl{margin-left:1.25rem;margin-right:1.25rem}.nh5-xl{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-xl{padding:1.5rem}.ma6-xl{margin:1.5rem}.na6-xl{margin:-1.5rem}.pl6-xl{padding-left:1.5rem}.ml6-xl{margin-left:1.5rem}.nl6-xl{margin-left:-1.5rem}.pr6-xl{padding-right:1.5rem}.mr6-xl{margin-right:1.5rem}.nr6-xl{margin-right:-1.5rem}.pt6-xl{padding-top:1.5rem}.mt6-xl{margin-top:1.5rem}.nt6-xl{margin-top:-1.5rem}.pb6-xl{padding-bottom:1.5rem}.mb6-xl{margin-bottom:1.5rem}.nb6-xl{margin-bottom:-1.5rem}.pv6-xl{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-xl{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-xl{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-xl{padding-left:1.5rem;padding-right:1.5rem}.mh6-xl{margin-left:1.5rem;margin-right:1.5rem}.nh6-xl{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-xl{padding:2rem}.ma7-xl{margin:2rem}.na7-xl{margin:-2rem}.pl7-xl{padding-left:2rem}.ml7-xl{margin-left:2rem}.nl7-xl{margin-left:-2rem}.pr7-xl{padding-right:2rem}.mr7-xl{margin-right:2rem}.nr7-xl{margin-right:-2rem}.pt7-xl{padding-top:2rem}.mt7-xl{margin-top:2rem}.nt7-xl{margin-top:-2rem}.pb7-xl{padding-bottom:2rem}.mb7-xl{margin-bottom:2rem}.nb7-xl{margin-bottom:-2rem}.pv7-xl{padding-top:2rem;padding-bottom:2rem}.mv7-xl{margin-top:2rem;margin-bottom:2rem}.nv7-xl{margin-top:-2rem;margin-bottom:-2rem}.ph7-xl{padding-left:2rem;padding-right:2rem}.mh7-xl{margin-left:2rem;margin-right:2rem}.nh7-xl{margin-left:-2rem;margin-right:-2rem}.pa8-xl{padding:3rem}.ma8-xl{margin:3rem}.na8-xl{margin:-3rem}.pl8-xl{padding-left:3rem}.ml8-xl{margin-left:3rem}.nl8-xl{margin-left:-3rem}.pr8-xl{padding-right:3rem}.mr8-xl{margin-right:3rem}.nr8-xl{margin-right:-3rem}.pt8-xl{padding-top:3rem}.mt8-xl{margin-top:3rem}.nt8-xl{margin-top:-3rem}.pb8-xl{padding-bottom:3rem}.mb8-xl{margin-bottom:3rem}.nb8-xl{margin-bottom:-3rem}.pv8-xl{padding-top:3rem;padding-bottom:3rem}.mv8-xl{margin-top:3rem;margin-bottom:3rem}.nv8-xl{margin-top:-3rem;margin-bottom:-3rem}.ph8-xl{padding-left:3rem;padding-right:3rem}.mh8-xl{margin-left:3rem;margin-right:3rem}.nh8-xl{margin-left:-3rem;margin-right:-3rem}.pa9-xl{padding:4rem}.ma9-xl{margin:4rem}.na9-xl{margin:-4rem}.pl9-xl{padding-left:4rem}.ml9-xl{margin-left:4rem}.nl9-xl{margin-left:-4rem}.pr9-xl{padding-right:4rem}.mr9-xl{margin-right:4rem}.nr9-xl{margin-right:-4rem}.pt9-xl{padding-top:4rem}.mt9-xl{margin-top:4rem}.nt9-xl{margin-top:-4rem}.pb9-xl{padding-bottom:4rem}.mb9-xl{margin-bottom:4rem}.nb9-xl{margin-bottom:-4rem}.pv9-xl{padding-top:4rem;padding-bottom:4rem}.mv9-xl{margin-top:4rem;margin-bottom:4rem}.nv9-xl{margin-top:-4rem;margin-bottom:-4rem}.ph9-xl{padding-left:4rem;padding-right:4rem}.mh9-xl{margin-left:4rem;margin-right:4rem}.nh9-xl{margin-left:-4rem;margin-right:-4rem}.pa10-xl{padding:6rem}.ma10-xl{margin:6rem}.na10-xl{margin:-6rem}.pl10-xl{padding-left:6rem}.ml10-xl{margin-left:6rem}.nl10-xl{margin-left:-6rem}.pr10-xl{padding-right:6rem}.mr10-xl{margin-right:6rem}.nr10-xl{margin-right:-6rem}.pt10-xl{padding-top:6rem}.mt10-xl{margin-top:6rem}.nt10-xl{margin-top:-6rem}.pb10-xl{padding-bottom:6rem}.mb10-xl{margin-bottom:6rem}.nb10-xl{margin-bottom:-6rem}.pv10-xl{padding-top:6rem;padding-bottom:6rem}.mv10-xl{margin-top:6rem;margin-bottom:6rem}.nv10-xl{margin-top:-6rem;margin-bottom:-6rem}.ph10-xl{padding-left:6rem;padding-right:6rem}.mh10-xl{margin-left:6rem;margin-right:6rem}.nh10-xl{margin-left:-6rem;margin-right:-6rem}.pa11-xl{padding:10rem}.ma11-xl{margin:10rem}.na11-xl{margin:-10rem}.pl11-xl{padding-left:10rem}.ml11-xl{margin-left:10rem}.nl11-xl{margin-left:-10rem}.pr11-xl{padding-right:10rem}.mr11-xl{margin-right:10rem}.nr11-xl{margin-right:-10rem}.pt11-xl{padding-top:10rem}.mt11-xl{margin-top:10rem}.nt11-xl{margin-top:-10rem}.pb11-xl{padding-bottom:10rem}.mb11-xl{margin-bottom:10rem}.nb11-xl{margin-bottom:-10rem}.pv11-xl{padding-top:10rem;padding-bottom:10rem}.mv11-xl{margin-top:10rem;margin-bottom:10rem}.nv11-xl{margin-top:-10rem;margin-bottom:-10rem}.ph11-xl{padding-left:10rem;padding-right:10rem}.mh11-xl{margin-left:10rem;margin-right:10rem}.nh11-xl{margin-left:-10rem;margin-right:-10rem}.pa12-xl{padding:18rem}.ma12-xl{margin:18rem}.na12-xl{margin:-18rem}.pl12-xl{padding-left:18rem}.ml12-xl{margin-left:18rem}.nl12-xl{margin-left:-18rem}.pr12-xl{padding-right:18rem}.mr12-xl{margin-right:18rem}.nr12-xl{margin-right:-18rem}.pt12-xl{padding-top:18rem}.mt12-xl{margin-top:18rem}.nt12-xl{margin-top:-18rem}.pb12-xl{padding-bottom:18rem}.mb12-xl{margin-bottom:18rem}.nb12-xl{margin-bottom:-18rem}.pv12-xl{padding-top:18rem;padding-bottom:18rem}.mv12-xl{margin-top:18rem;margin-bottom:18rem}.nv12-xl{margin-top:-18rem;margin-bottom:-18rem}.ph12-xl{padding-left:18rem;padding-right:18rem}.mh12-xl{margin-left:18rem;margin-right:18rem}.nh12-xl{margin-left:-18rem;margin-right:-18rem}.top-0-xl{top:0}.right-0-xl{right:0}.bottom-0-xl{bottom:0}.left-0-xl{left:0}.top-1-xl{top:1rem}.right-1-xl{right:1rem}.bottom-1-xl{bottom:1rem}.left-1-xl{left:1rem}.top-2-xl{top:2rem}.right-2-xl{right:2rem}.bottom-2-xl{bottom:2rem}.left-2-xl{left:2rem}.top--1-xl{top:-1rem}.right--1-xl{right:-1rem}.bottom--1-xl{bottom:-1rem}.left--1-xl{left:-1rem}.top--2-xl{top:-2rem}.right--2-xl{right:-2rem}.bottom--2-xl{bottom:-2rem}.left--2-xl{left:-2rem}.absolute--fill-xl{top:0;right:0;bottom:0;left:0}.cf-xl:after,.cf-xl:before{content:" ";display:table}.cf-xl:after{clear:both}.cf-xl{*zoom:1}.cl-xl{clear:left}.cr-xl{clear:right}.cb-xl{clear:both}.cn-xl{clear:none}.dn-xl{display:none}.di-xl{display:inline}.db-xl{display:block}.dib-xl{display:inline-block}.dit-xl{display:inline-table}.dt-xl{display:table}.dtc-xl{display:table-cell}.dt-row-xl{display:table-row}.dt-row-group-xl{display:table-row-group}.dt-column-xl{display:table-column}.dt-column-group-xl{display:table-column-group}.dt--fixed-xl{table-layout:fixed;width:100%}.flex-xl{display:flex}.inline-flex-xl{display:inline-flex}.flex-auto-xl{flex:1 1 auto;min-width:0;min-height:0}.flex-none-xl{flex:none}.flex-column-xl{flex-direction:column}.flex-row-xl{flex-direction:row}.flex-wrap-xl{flex-wrap:wrap}.flex-nowrap-xl{flex-wrap:nowrap}.flex-wrap-reverse-xl{flex-wrap:wrap-reverse}.flex-column-reverse-xl{flex-direction:column-reverse}.flex-row-reverse-xl{flex-direction:row-reverse}.items-start-xl{align-items:flex-start}.items-end-xl{align-items:flex-end}.items-center-xl{align-items:center}.items-baseline-xl{align-items:baseline}.items-stretch-xl{align-items:stretch}.self-start-xl{align-self:flex-start}.self-end-xl{align-self:flex-end}.self-center-xl{align-self:center}.self-baseline-xl{align-self:baseline}.self-stretch-xl{align-self:stretch}.justify-start-xl{justify-content:flex-start}.justify-end-xl{justify-content:flex-end}.justify-center-xl{justify-content:center}.justify-between-xl{justify-content:space-between}.justify-around-xl{justify-content:space-around}.content-start-xl{align-content:flex-start}.content-end-xl{align-content:flex-end}.content-center-xl{align-content:center}.content-between-xl{align-content:space-between}.content-around-xl{align-content:space-around}.content-stretch-xl{align-content:stretch}.order-0-xl{order:0}.order-1-xl{order:1}.order-2-xl{order:2}.order-3-xl{order:3}.order-4-xl{order:4}.order-5-xl{order:5}.order-6-xl{order:6}.order-7-xl{order:7}.order-8-xl{order:8}.order-last-xl{order:99999}.flex-grow-0-xl{flex-grow:0}.flex-grow-1-xl{flex-grow:1}.flex-shrink-0-xl{flex-shrink:0}.flex-shrink-1-xl{flex-shrink:1}.fl-xl{float:left}.fl-xl,.fr-xl{_display:inline}.fr-xl{float:right}.fn-xl{float:none}.i-xl{font-style:italic}.fs-normal-xl{font-style:normal}.normal-xl{font-weight:400}.b-xl{font-weight:700}.fw1-xl{font-weight:100}.fw2-xl{font-weight:200}.fw3-xl{font-weight:300}.fw4-xl{font-weight:400}.fw5-xl{font-weight:500}.fw6-xl{font-weight:600}.fw7-xl{font-weight:700}.fw8-xl{font-weight:800}.fw9-xl{font-weight:900}.h1-xl{height:1rem}.h2-xl{height:2rem}.h3-xl{height:4rem}.h4-xl{height:8rem}.h5-xl{height:16rem}.h-25-xl{height:25%}.h-50-xl{height:50%}.h-75-xl{height:75%}.h-100-xl{height:100%}.min-h-100-xl{min-height:100%}.vh-25-xl{height:25vh}.vh-50-xl{height:50vh}.vh-75-xl{height:75vh}.vh-100-xl{height:100vh}.min-vh-100-xl{min-height:100vh}.h-auto-xl{height:auto}.h-inherit-xl{height:inherit}.tracked-xl{letter-spacing:.1em}.tracked-tight-xl{letter-spacing:-.05em}.tracked-mega-xl{letter-spacing:.25em}.lh-solid-xl{line-height:1.333333}.lh-title-xl{line-height:1.5}.lh-copy-xl{line-height:1.666666}.mw1-xl{max-width:1rem}.mw2-xl{max-width:2rem}.mw3-xl{max-width:4rem}.mw4-xl{max-width:8rem}.mw5-xl{max-width:16rem}.mw6-xl{max-width:32rem}.mw7-xl{max-width:48rem}.mw8-xl{max-width:64rem}.mw9-xl{max-width:96rem}.mw-none-xl{max-width:none}.mw-100-xl{max-width:100%}.o-100-xl{opacity:1}.o-90-xl{opacity:.9}.o-80-xl{opacity:.8}.o-70-xl{opacity:.7}.o-60-xl{opacity:.6}.o-50-xl{opacity:.5}.o-40-xl{opacity:.4}.o-30-xl{opacity:.3}.o-20-xl{opacity:.2}.o-10-xl{opacity:.1}.o-05-xl{opacity:.05}.o-025-xl{opacity:.025}.o-0-xl{opacity:0}.rotate-45-xl{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-xl{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-xl{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-xl{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-xl{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-xl{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-xl{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-xl{outline:1px solid}.outline-transparent-xl{outline:1px solid transparent}.outline-0-xl{outline:0}.overflow-visible-xl{overflow:visible}.overflow-hidden-xl{overflow:hidden}.overflow-scroll-xl{overflow:scroll}.overflow-auto-xl{overflow:auto}.overflow-x-visible-xl{overflow-x:visible}.overflow-x-hidden-xl{overflow-x:hidden}.overflow-x-scroll-xl{overflow-x:scroll}.overflow-x-auto-xl{overflow-x:auto}.overflow-y-visible-xl{overflow-y:visible}.overflow-y-hidden-xl{overflow-y:hidden}.overflow-y-scroll-xl{overflow-y:scroll}.overflow-y-auto-xl{overflow-y:auto}.static-xl{position:static}.relative-xl{position:relative}.absolute-xl{position:absolute}.fixed-xl{position:fixed}.strike-xl{text-decoration:line-through}.underline-xl{text-decoration:underline}.no-underline-xl{text-decoration:none}.tl-xl{text-align:left}.tr-xl{text-align:right}.tc-xl{text-align:center}.tj-xl{text-align:justify}.ttc-xl{text-transform:capitalize}.ttl-xl{text-transform:lowercase}.ttu-xl{text-transform:uppercase}.ttn-xl{text-transform:none}.f1-xl{font-size:4.5rem}.f2-xl{font-size:4rem}.f3-xl{font-size:3rem}.f4-xl{font-size:2rem}.f5-xl{font-size:1.5rem}.f6-xl{font-size:1.125rem}.f7-xl{font-size:1rem}.f8-xl{font-size:.875rem}.f9-xl{font-size:.75rem}.measure-xl{max-width:30em}.measure-wide-xl{max-width:34em}.measure-narrow-xl{max-width:20em}.small-caps-xl{font-variant:small-caps}.indent-xl{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-xl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-xl{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-xl{white-space:normal}.nowrap-xl{white-space:nowrap}.pre-xl{white-space:pre}.w1-xl{width:1rem}.w2-xl{width:2rem}.w3-xl{width:4rem}.w4-xl{width:8rem}.w5-xl{width:16rem}.w-10-xl{width:10%}.w-20-xl{width:20%}.w-25-xl{width:25%}.w-30-xl{width:30%}.w-33-xl{width:33%}.w-34-xl{width:34%}.w-40-xl{width:40%}.w-50-xl{width:50%}.w-60-xl{width:60%}.w-70-xl{width:70%}.w-75-xl{width:75%}.w-80-xl{width:80%}.w-90-xl{width:90%}.w-100-xl{width:100%}.w-third-xl{width:33.33333%}.w-two-thirds-xl{width:66.66667%}.w-auto-xl{width:auto}}@font-face{font-family:Inter;font-style:normal;font-weight:400;src:url(https://media.urbit.org/fonts/Inter-Regular.woff2) format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:400;src:url(https://media.urbit.org/fonts/Inter-Italic.woff2) format("woff2")}@font-face{font-family:Inter;font-style:normal;font-weight:700;src:url(https://media.urbit.org/fonts/Inter-Bold.woff2) format("woff2")}@font-face{font-family:Inter;font-style:italic;font-weight:700;src:url(https://media.urbit.org/fonts/Inter-BoldItalic.woff2) format("woff2")}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-extralight.woff);font-weight:200}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-light.woff);font-weight:300}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-regular.woff);font-weight:400}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-medium.woff);font-weight:500}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-semibold.woff);font-weight:600}@font-face{font-family:Source Code Pro;src:url(https://storage.googleapis.com/media.urbit.org/fonts/scp-bold.woff);font-weight:700}body,html{height:100%;width:100%;-webkit-font-smoothing:antialiased;overflow:hidden}a,button,h1,h2,h3,h4,h5,h6,input,p,textarea{margin-block-end:unset;margin-block-start:unset;-webkit-margin-before:unset;-webkit-margin-after:unset;font-family:Inter,sans-serif;padding:0}button,summary{cursor:pointer}h2{font-weight:400}a{color:#000;text-decoration:none}.inter{font-family:Inter,sans-serif}.clamp-3{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.clamp-message{max-width:calc(100% - 36px - 1.5rem)}.clamp-attachment{overflow:scroll;max-height:10em;max-width:100%}.lh-16{line-height:16px}.mono{font-family:Source Code Pro,monospace}.list-ship{line-height:2.2}.bg-welcome-green{background-color:#ecf6f2}.c-default{cursor:default}.m0a{margin:0 auto}.mix-blend-diff{mix-blend-mode:difference}.focus-b--black:focus{border-color:#000}.embed-container{position:relative;height:0;overflow:hidden;padding-bottom:56.25%}.embed-container embed,.embed-container iframe,.embed-container object{position:absolute;top:0;left:0;width:100%;height:100%}.spin-active{animation:spin 2s infinite}@keyframes spin{0%{transform:rotate(0deg)}25%{transform:rotate(90deg)}50%{transform:rotate(180deg)}75%{transform:rotate(270deg)}to{transform:rotate(1turn)}}.toggle:after{content:"";height:12px;width:12px;background:#fff;position:absolute;top:2px;left:2px;border-radius:100%}.toggle.checked:after{left:14px}@media (max-width:34.375em){.dn-s{display:none}.flex-basis-100-s,.flex-basis-full-s{flex-basis:100%}.h-100-m-40-s{height:calc(100% - 40px)}.black-s{color:#000}}@media (min-width:34.375em){.db-ns{display:block}.flex-basis-30-ns{flex-basis:30vw}.h-100-m-40-ns{height:calc(100% - 40px)}}@media (prefers-color-scheme:dark){body{background-color:#333;color:#fff}.bg-black-d{background-color:#000}.white-d{color:#fff}.gray1-d{color:#4d4d4d}.gray2-d{color:#7f7f7f}.gray3-d{color:#b1b2b3}.gray4-d{color:#e6e6e6}.bg-gray0-d{background-color:#333}.bg-gray1-d{background-color:#4d4d4d}.b--gray0-d{border-color:#333}.b--gray1-d{border-color:#4d4d4d}.b--gray2-d{border-color:#7f7f7f}.b--white-d{border-color:#fff}.bb-d{border-bottom-width:1px;border-bottom-style:solid}.invert-d{filter:invert(1)}.o-60-d{opacity:.6}.focus-b--white-d:focus{border-color:#fff}a{color:#fff}.hover-bg-gray1-d:hover{background-color:#4d4d4d}} \ No newline at end of file diff --git a/pkg/arvo/app/dojo.hoon b/pkg/arvo/app/dojo.hoon index b127a3ce0..e9c6904aa 100644 --- a/pkg/arvo/app/dojo.hoon +++ b/pkg/arvo/app/dojo.hoon @@ -3,16 +3,16 @@ :: :: :: /? 309 :: arvo kelvin /- *sole, lens :: console structures -/+ sole, pprint, :: +/+ sole, pprint, dprint, :: auto=language-server-complete, :: easy-print=language-server-easy-print :: :: :: :: :::: :: :::: :: :: :: => |% :: external structures - +$ id @tasession :: session id + +$ id sole-id :: session id +$ house :: all state - $: %8 + $: %9 egg=@u :: command count hoc=(map id session) :: conversations acl=(set ship) :: remote access whitelist @@ -54,6 +54,7 @@ r=@t == [%poke p=goal] :: poke app + [%help p=(list term)] :: doccords [%show p=?(%0 %1 %2 %3 %4 %5)] :: val/type/hoon/xray [%verb p=term] :: store variable == :: @@ -174,8 +175,22 @@ :: ;~ pfix fas ;~ pose - (parse-variable (cold %sur hep) ;~(pfix gap parse-cables)) - (parse-variable (cold %lib lus) ;~(pfix gap parse-cables)) + (parse-variable (cold %sur hep) ;~(pfix gap (parse-cables %sur))) + (parse-variable (cold %lib lus) ;~(pfix gap (parse-cables %lib))) + ;~(pfix tis gap (parse-variable sym ;~(pfix gap parse-path))) + ;~(pfix cen gap (parse-variable sym ;~(pfix gap parse-mark))) + == + == + :: + ;~ pfix hax + ;~ pose + ;~ pfix ace + %+ cook + |= a=(list term) + [[%help (flop a)] 0 %ex [%cnts p=~[[%.y p=1]] q=~]] + (most fas sym) + == + (easy [[%help ~[%$]] 0 %ex [%cnts p=~[[%.y p=1]] q=~]]) == == :: @@ -194,22 +209,17 @@ == :: ++ parse-cables - %+ cook - |= cables=(list cable:clay) - :+ 0 %ex - ^- hoon - :: - :- %clsg - %+ turn cables - |= cable=cable:clay - ^- hoon - :: - :+ %clhp - ?~ face.cable - [%rock %n ~] - [%clhp [%rock %n ~] [%sand %tas u.face.cable]] - [%sand %tas file-path.cable] - (most ;~(plug com gaw) parse-cable) + |= base-path=@ta + %- cook :_ (most ;~(plug com gaw) parse-cable) + |= cables=(list cable:clay) + :+ 0 %tu + :: + %+ turn cables + |= cable=cable:clay + ^- dojo-source + =+ add-face=?~(face.cable "|*(n=* n)" ;:(weld "|*(n=* ^=(" (trip u.face.cable) " n))")) + :^ 0 %do (scan add-face parse-hoon) + :+ 0 %dv [-.dir `path`[base-path file-path.cable ~]] :: ++ parse-cable %+ cook |=(a=cable:clay a) @@ -218,6 +228,16 @@ (cook |=([face=term tis=@ file=term] [`face file]) ;~(plug sym tis sym)) (cook |=(a=term [`a a]) sym) == + :: + ++ parse-mark + %- cook :_ ;~(pfix cen sym) + |= mark=@tas + [0 %dv -.dir `path`[~.mar mark ~]] + :: + ++ parse-path + %+ cook |=(=path [0 %dv -.dir path]) + ;~(pfix fas (more fas sym)) + :: ++ parse-source (stag 0 parse-build) ++ parse-build %+ knee *dojo-build |. ~+ @@ -532,45 +552,35 @@ ?: ?=([%show %3] -.mad) (dy-rash %tan (dy-show-source q.mad) ~) ?: ?=(%brev -.mad) + ?: ?=(?(%eny %now %our) p.mad) + (dy-rash %tan (cat 3 p.mad ' is immutable') ~) =. var (~(del by var) p.mad) =< dy-amok ?+ p.mad . - $?(%eny %now %our) !! - %lib .(lib ~) - %sur .(sur ~) %dir .(dir [[our.hid %base ud+0] /]) == =+ cay=(~(got by rez) p.q.mad) ?- -.p.mad %verb + ?: ?=(?(%eny %now %our) p.p.mad) + (dy-rash %tan (cat 3 p.p.mad ' is immutable') ~) =. var (~(put by var) p.p.mad cay) ~| bad-set+[p.p.mad p.q.cay] =< dy-amok ?+ p.p.mad . - %eny ~|(%entropy-is-eternal !!) - %now ~|(%time-is-immutable !!) - %our ~|(%self-is-immutable !!) - %lib - %_ . - lib - ((dy-cast (list cable:clay) !>(*(list cable:clay))) q.cay) - == - :: - %sur - %_ . - sur - ((dy-cast (list cable:clay) !>(*(list cable:clay))) q.cay) - == - :: - %dir =+ ^= pax ^- path - =+ pax=((dy-cast path !>(*path)) q.cay) - ?: ?=(~ pax) ~[(scot %p our.hid) %base '0'] - ?: ?=([@ ~] pax) ~[i.pax %base '0'] - ?: ?=([@ @ ~] pax) ~[i.pax i.t.pax '0'] - pax - =. dir (need (de-beam pax)) - =- +>(..dy (he-diff %tan - ~)) - rose+[" " `~]^~[leaf+"=%" (smyt (en-beam he-beak s.dir))] + %dir + =/ bem=beam + %- need %- de-beam + =+ pax=((dy-cast path !>(*path)) q.cay) + ?: ?=(~ pax) ~[(scot %p our.hid) %base '0'] + ?: ?=([@ ~] pax) ~[i.pax %base '0'] + ?: ?=([@ @ ~] pax) ~[i.pax i.t.pax '0'] + pax + ?: =(~ .^((list path) %ct (en-beam he-beam(dir bem)))) + +(..dy (he-diff %tan 'dojo: dir does not exist' ~)) + =. dir bem + =- +>(..dy (he-diff %tan - ~)) + rose+[" " `~]^~[leaf+"=%" (smyt (en-beam he-beak s.dir))] == :: %poke @@ -624,6 +634,9 @@ ++ maar ?: =(%noun p.cay) ~ [[%rose [~ " " ~] >p.cay< ~] ~] -- + :: + %help + (dy-inspect p.p.mad p.q.cay) == :: ++ dy-show |=(cay=cage (dy-print cay ~)) @@ -663,6 +676,20 @@ :- i="" t=(turn `wain`?~(r.hit ~ (to-wain:format q.u.r.hit)) trip) == + :: + ++ dy-inspect + |= [topics=(list term) sut=type] + %+ dy-rash %mor + =+ to-display=(mule |.((find-item-in-type:dprint (flop topics) sut))) + ?: ?=(%| -.to-display) + [%tan [%leaf "Could not find help A"] p.to-display]~ + ?~ p.to-display + [%tan [%leaf "Could not find help B"]~]~ + =/ item (mule |.((print-item:dprint u.p.to-display))) + ?: ?=(%| -.item) + [%tan [%leaf "Could not find help C"] p.item]~ + p.item + :: ++ dy-show-type-noun |= a=type ^- tank =- >[-]< @@ -679,11 +706,16 @@ [%face ^] a(q $(a q.a)) [%cell ^] a(p $(a p.a), q $(a q.a)) [%fork *] a(p (silt (turn ~(tap in p.a) |=(b=type ^$(a b))))) - [%hint *] ?. ?=(%know -.q.p.a) $(a q.a) - ?@ p.q.p.a [(cat 3 '#' mark.p.q.p.a)]~ - [(rap 3 '#' auth.p.q.p.a (spat type.p.q.p.a) ~)]~ + [%hint *] ?+ q.p.a $(a q.a) + [%know *] + ?@ p.q.p.a [(cat 3 '#' mark.p.q.p.a)]~ + [(rap 3 '#' auth.p.q.p.a '+' (spat type.p.q.p.a) ~)]~ + :: + [%help *] + [summary.crib.p.q.p.a]~ + == [%core ^] `wain`/core - [%hold *] a(p $(a p.a)) + [%hold *] $(a (~(play ut p.a) q.a)) == :: :: XX needs filter @@ -735,9 +767,9 @@ ^+ +>+> =^ dat say (~(transceive sole say) cal) ?: |(?=(^ per) ?=(^ pux) ?=(~ pro)) - ~& %dy-edit-busy =^ lic say (~(transmit sole say) dat) - (dy-diff %mor [%det lic] [%bel ~] ~) + =/ tip=@t 'dojo: busy (press backspace to abort)' + (dy-diff %mor [%det lic] [%bel ~] [%tan [tip ~]] ~) => .(per `dat) =/ res (mule |.((slam u.pro !>((tufa buf.say))))) ?: ?=(%| -.res) @@ -823,12 +855,23 @@ =/ poz=vase (dy-sore p.cig) =/ kev=vase =/ kuv=(unit vase) (slew 7 som) - ?: =(~ q.cig) - (fall kuv !>(~)) =/ soz=(list [var=term vax=vase]) %~ tap by %- ~(run by q.cig) |=(val=(unit dojo-source) ?~(val !>([~ ~]) (dy-vase p.u.val))) + :: if the generator takes a named argument "drum-session", + :: then if a value isn't already supplied, we set it to the session + :: that this dojo instance is being run in. + :: (dojo is, indeed, quite coupled with drum.) + :: + =? soz + ?& ?=(^ kuv) + (slab %both %drum-session p.u.kuv) + !(~(has by q.cig) %drum-session) + == + [[%drum-session !>(ses.id)] soz] ::TODO does the who matter? + ?: =(~ soz) + (fall kuv !>(~)) ~| keyword-arg-failure+~(key by q.cig) %+ slap (with-faces kuv+(need kuv) rep+(with-faces soz) ~) @@ -1021,13 +1064,14 @@ |= =card:agent:gall ^+ +> =? card ?=(%pass -.card) - card(p [id p.card]) + ^- card:agent:gall + card(p [(scot %p who.id) ses.id p.card]) %_(+> moz [card moz]) :: ++ he-diff :: emit update |= fec=sole-effect ^+ +> - (he-card %give %fact ~[/sole/[id]] %sole-effect !>(fec)) + (he-card %give %fact ~[(id-to-path:sole id)] %sole-effect !>(fec)) :: ++ he-stop :: abort work ^+ . @@ -1535,21 +1579,47 @@ :: ++ on-load |= ole=vase + ^- (quip card:agent:gall _..on-init) |^ =+ old=!<(house-any ole) =? old ?=(%5 -.old) + ^- house-any + ^- house-6 (house-5-to-6 old) =? old ?=(?(%6 %7) -.old) (house-6-7-to-8 +.old) - ?> ?=(%8 -.old) - `..on-init(state old) + =^ caz old + ?. ?=(%8 -.old) [~ old] + (house-8-to-9 old) + ?> ?=(%9 -.old) + [caz ..on-init(state old)] :: - +$ house-any $%(house house-7 house-6 house-5) + +$ house-any $%(house house-8 house-7 house-6 house-5) + :: + +$ id-8 @tasession + +$ house-8 + $: %8 + egg=@u + hoc=(map id-8 session) + acl=(set ship) + == + ++ house-8-to-9 + |= old=house-8 + ^- (quip card:agent:gall house) + :- %+ turn ~(tap in ~(key by hoc.old)) + |= id=@ta + ^- card:agent:gall + [%give %kick ~[/sole/[id]] ~] + =- [%9 egg.old - acl.old] + %- ~(gas by *(map sole-id session)) + %+ murn ~(tap by hoc.old) + |= [id=@ta s=session] + (bind (upgrade-id:sole id) (late s)) :: +$ house-7 [%7 house-6-7] +$ house-6 [%6 house-6-7] +$ house-6-7 $: egg=@u :: command count - hoc=(map id session-6) :: conversations + hoc=(map id-8 session-6) :: conversations acl=(set ship) :: remote access whitelist == :: +$ session-6 :: per conversation @@ -1576,9 +1646,10 @@ old(poy ~, -.dir [our.hid %base ud+0]) :: +$ house-5 - [%5 egg=@u hoc=(map id session)] + [%5 egg=@u hoc=(map id-8 session-6)] ++ house-5-to-6 |= old=house-5 + ^- house-6 [%6 egg.old hoc.old *(set ship)] -- :: @@ -1594,7 +1665,8 @@ he-abet:(~(he-type he hid id.act ~ (~(got by hoc) id.act)) act) :: %lens-command - =+ !<([=id =command:lens] vase) + =+ !<([ses=@ta =command:lens] vase) + =/ =id [our.hid ses] he-abet:(~(he-lens he hid id ~ (~(got by hoc) id)) command) :: %allow-remote-login @@ -1632,8 +1704,7 @@ ?> ?| (team:title our.hid src.hid) (~(has in acl) src.hid) == - ?> ?=([%sole @ ~] path) - =/ id i.t.path + =/ =id (need (path-to-id:sole path)) =? hoc (~(has by hoc) id) ~& [%dojo-peer-replaced id] (~(del by hoc) id) @@ -1645,7 +1716,7 @@ ++ on-leave |= =path ?> ?=([%sole *] path) - =. hoc (~(del by hoc) t.path) + =. hoc (~(del by hoc) (need (path-to-id:sole path))) [~ ..on-init] :: ++ on-peek @@ -1654,13 +1725,15 @@ :: ++ on-agent |= [=wire =sign:agent:gall] - ?> ?=([@ @ *] wire) - =/ =session (~(got by hoc) i.wire) - =/ he-full ~(. he hid i.wire ~ session) + ^- (quip card:agent:gall _..on-init) + ?> ?=([@ @ @ *] wire) + =/ =id [(slav %p i.wire) i.t.wire] + =/ =session (~(got by hoc) id) + =/ he-full ~(. he hid id ~ session) =^ moves state =< he-abet ^+ he - ?+ i.t.wire ~|([%dojo-bad-on-agent wire -.sign] !!) + ?+ i.t.t.wire ~|([%dojo-bad-on-agent wire -.sign] !!) %poke (he-unto:he-full t.wire sign) %wool (he-wool:he-full t.wire sign) == @@ -1668,14 +1741,16 @@ :: ++ on-arvo |= [=wire =sign-arvo] - ?> ?=([@ *] wire) - =/ =session (~(got by hoc) i.wire) - =/ he-full ~(. he hid i.wire ~ session) + ^- (quip card:agent:gall _..on-init) + ?> ?=([@ @ *] wire) + =/ =id [(slav %p i.wire) i.t.wire] + =/ =session (~(got by hoc) id) + =/ he-full ~(. he hid id ~ session) =^ moves state =< he-abet ?+ +<.sign-arvo ~|([%dojo-bad-take +<.sign-arvo] !!) - %writ (he-writ:he-full t.wire +>.sign-arvo) - %http-response (he-http-response:he-full t.wire +>.sign-arvo) + %writ (he-writ:he-full t.t.wire +>.sign-arvo) + %http-response (he-http-response:he-full t.t.wire +>.sign-arvo) == [moves ..on-init] :: if dojo fails unexpectedly, kill whatever each session is working on diff --git a/pkg/arvo/app/eth-watcher.hoon b/pkg/arvo/app/eth-watcher.hoon index a2cb9a625..04584f595 100644 --- a/pkg/arvo/app/eth-watcher.hoon +++ b/pkg/arvo/app/eth-watcher.hoon @@ -469,6 +469,10 @@ [~ this(dogs.state (~(put by dogs.state) path u.dog(running ~)))] :: %thread-done + :: if empty, that means we cancelled this thread + :: + ?: =(*vase q.cage.sign) + `this =+ !<([vows=disavows pup=watchpup] q.cage.sign) =. u.dog %_ u.dog diff --git a/pkg/arvo/app/herm.hoon b/pkg/arvo/app/herm.hoon index d19c92778..aefe6c8df 100644 --- a/pkg/arvo/app/herm.hoon +++ b/pkg/arvo/app/herm.hoon @@ -1,8 +1,13 @@ :: herm: stand-in for term.c with http interface :: +/- herm /+ default-agent, dbug, verb +:: keep relevant mark conversions in cache for performance +:: /$ blit-to-json %blit %json /$ json-to-blit %json %blit +/$ json-to-task %json %herm-task +:: =, jael |% +$ state-0 [%0 ~] @@ -13,15 +18,18 @@ %+ verb | %- agent:dbug ^- agent:gall +=> |% + ++ pass-session + |= [ses=@tas tas=session-task:dill] + [%pass /dill/[ses] %arvo %d %shot ses tas] + -- |_ =bowl:gall +* this . def ~(. (default-agent this %|) bowl) :: ++ on-init ^- (quip card:agent:gall _this) - :: set up dill session subscription - :: - [[%pass [%view %$ ~] %arvo %d %view ~]~ this] + [~ this] :: ++ on-save !>([%0 ~]) ++ on-load @@ -32,47 +40,68 @@ ++ on-watch |= =path ^- (quip card:agent:gall _this) - ?> =(our src):bowl - ?> ?=([%session @ %view ~] path) :_ this - :: scry prompt and cursor position out of dill for initial response + ~| path + ?> ?=([%session @ %view ~] path) + =* ses i.t.path + :: subscribe to the requested session :: - =/ base=^path - /dx/(scot %p our.bowl)//(scot %da now.bowl)/sessions - :~ [%give %fact ~ %blit !>(.^(blit:dill (weld base //line)))] - [%give %fact ~ %blit !>(`blit:dill`hop+.^(@ud (weld base //cursor)))] - == + ::NOTE multiple views do not result in multiple subscriptions + :: because they go over the same wire/duct + :: + [(pass-session ses %view ~)]~ :: ++ on-arvo |= [=wire =sign-arvo] ^- (quip card:agent:gall _this) + ~| wire ?+ wire (on-arvo:def wire sign-arvo) [%tube *] [~ this] :: we no longer care about these :: :: pass on dill blits for the session :: - [%view %$ ~] + [%dill @ ~] + =* ses i.t.wire ?. ?=([%dill %blit *] sign-arvo) ~| [%unexpected-sign [- +<]:sign-arvo] !! :_ this %+ turn p.sign-arvo |= =blit:dill - [%give %fact [%session %$ %view ~]~ %blit !>(blit)] + [%give %fact [%session ses %view ~]~ %blit !>(blit)] + :: + :: clean up old-style subscriptions + :: + [%view @ ~] + =* ses i.t.wire + :_ this + [%pass wire %arvo %d %shot ses %flee ~]~ == :: ++ on-poke |= [=mark =vase] ^- (quip card:agent:gall _this) - ?> =(our src):bowl - ?. ?=(%belt mark) - ~| [%unexpected-mark mark] - !! :_ this - [%pass [%belt %$ ~] %arvo %d %belt !<(belt:dill vase)]~ + :_ ~ + ?+ mark ~|([%unexpected-mark mark] !!) + %belt (pass-session %$ %belt !<(belt:dill vase)) + %herm-task (pass-session !<(task:herm vase)) + == +:: +++ on-peek + |= =path + ^- (unit (unit cage)) + ?+ path ~ + [%x %sessions ~] + :+ ~ ~ + :- %json + !> ^- json + =- a+(turn ~(tap in -) (lead %s)) + .^((set @tas) %dy /(scot %p our.bowl)//(scot %da now.bowl)/sessions) + == :: ++ on-leave on-leave:def -++ on-peek on-peek:def +:: ++ on-agent on-agent:def ++ on-fail on-fail:def -- diff --git a/pkg/arvo/app/hood.hoon b/pkg/arvo/app/hood.hoon index d916c1b55..91b2ec4b8 100644 --- a/pkg/arvo/app/hood.hoon +++ b/pkg/arvo/app/hood.hoon @@ -2,8 +2,8 @@ /+ drum=hood-drum, helm=hood-helm, kiln=hood-kiln |% +$ state - $~ [%23 *state:drum *state:helm *state:kiln] - $>(%23 any-state) + $~ [%26 *state:drum *state:helm *state:kiln] + $>(%26 any-state) :: +$ any-state $% [ver=?(%1 %2 %3 %4 %5 %6) lac=(map @tas fin-any-state)] @@ -24,6 +24,9 @@ [%21 drum=state-4:drum helm=state-1:helm kiln=state-8:kiln] [%22 drum=state-4:drum helm=state-1:helm kiln=state-9:kiln] [%23 drum=state-4:drum helm=state-2:helm kiln=state-9:kiln] + [%24 drum=state-4:drum helm=state-2:helm kiln=state-10:kiln] + [%25 drum=state-5:drum helm=state-2:helm kiln=state-10:kiln] + [%26 drum=state-6:drum helm=state-2:helm kiln=state-10:kiln] == +$ any-state-tuple $: drum=any-state:drum @@ -91,8 +94,7 @@ :: ?+ mark (on-poke:def mark vase) %atom poke-helm(mark %helm-atom) - %dill-belt poke-drum(mark %drum-dill-belt) - %dill-blit poke-drum(mark %drum-dill-blit) + %dill-poke poke-drum %hood-sync poke-kiln(mark %kiln-sync) %write-sec-atom poke-helm(mark %helm-write-sec-atom) == @@ -107,6 +109,7 @@ ?+ path (on-watch:def +<) [%drum *] =^(c drum.state (peer:drum-core t.path) [c this]) [%kiln *] =^(c kiln.state (peer:kiln-core t.path) [c this]) + [%dill *] =^(c drum.state (peer:drum-core +<) [c this]) == :: ++ on-agent @@ -122,6 +125,7 @@ |= [=wire syn=sign-arvo] ^- step:agent:gall ?+ wire ~|([%hood-bad-wire wire] !!) + [%drum *] =^(c drum.state (take-arvo:drum-core t.wire syn) [c this]) [%helm *] =^(c helm.state (take-arvo:helm-core t.wire syn) [c this]) [%kiln *] =^(c kiln.state (take-arvo:kiln-core t.wire syn) [c this]) == diff --git a/pkg/arvo/app/lens.hoon b/pkg/arvo/app/lens.hoon index 74734f42e..3969a65d4 100644 --- a/pkg/arvo/app/lens.hoon +++ b/pkg/arvo/app/lens.hoon @@ -83,7 +83,8 @@ :: ?+ -.source.com :_ this(job.state (some [eyre-id com])) - [%pass /sole %agent [our.bowl %dojo] %watch /sole/[eyre-id]]~ + =/ =path /sole/(scot %p our.bowl)/[eyre-id] + [%pass /sole %agent [our.bowl %dojo] %watch path]~ :: %export :_ this(job.state (some [eyre-id com])) diff --git a/pkg/arvo/app/roller.hoon b/pkg/arvo/app/roller.hoon index a83d6d925..b27264524 100644 --- a/pkg/arvo/app/roller.hoon +++ b/pkg/arvo/app/roller.hoon @@ -65,7 +65,7 @@ :: frequency: time to wait between sending batches (TODO fancier) :: endpoint: ethereum rpc endpoint to use :: contract: ethereum contract address - :: chain-id: mainnet, ropsten, local (https://chainid.network/) + :: chain-id: mainnet, goerli, local (https://chainid.network/) :: resend-time: time to resend a batch with higher gas prie :: update-rate: frequency to update the roller's predicted state :: fallback-gas-price: default batch gas price @@ -1017,9 +1017,9 @@ =/ [contract=@ux chain-id=@] =< [naive chain-id] =, azimuth - ?- net.config + ?+ net.config !! %mainnet mainnet-contracts - %ropsten ropsten-contracts + %goerli goerli-contracts %local local-contracts %default contracts == diff --git a/pkg/arvo/app/shoe.hoon b/pkg/arvo/app/shoe.hoon index 4b0538ad3..0e827f57c 100644 --- a/pkg/arvo/app/shoe.hoon +++ b/pkg/arvo/app/shoe.hoon @@ -43,13 +43,13 @@ ++ on-fail on-fail:def :: ++ command-parser - |= sole-id=@ta + |= =sole-id:shoe ^+ |~(nail *(like [? command])) %+ stag & (perk %demo %row %table ~) :: ++ tab-list - |= sole-id=@ta + |= =sole-id:shoe ^- (list [@t tank]) :~ ['demo' leaf+"run example command"] ['row' leaf+"print a row"] @@ -57,7 +57,7 @@ == :: ++ on-command - |= [sole-id=@ta =command] + |= [=sole-id:shoe =command] ^- (quip card _this) =; [to=(list _sole-id) fec=shoe-effect:shoe] [[%shoe to fec]~ this] @@ -87,7 +87,7 @@ == :: ++ can-connect - |= sole-id=@ta + |= =sole-id:shoe ^- ? ?| =(~zod src.bowl) (team:title [our src]:bowl) diff --git a/pkg/arvo/app/spider.hoon b/pkg/arvo/app/spider.hoon index bb1adf7ae..8569e35c9 100644 --- a/pkg/arvo/app/spider.hoon +++ b/pkg/arvo/app/spider.hoon @@ -166,10 +166,10 @@ (on-load on-save) =^ cards state ?+ mark (on-poke:def mark vase) - %spider-input (on-poke-input:sc !<(input vase)) - %spider-start (handle-start-thread:sc !<(start-args:spider vase)) - %spider-stop (handle-stop-thread:sc !<([tid ?] vase)) - :: + %spider-input (on-poke-input:sc !<(input vase)) + %spider-start (handle-start-thread:sc !<(start-args:spider vase)) + %spider-inline (handle-inline-thread:sc !<(inline-args:spider vase)) + %spider-stop (handle-stop-thread:sc !<([tid ?] vase)) %handle-http-request (handle-http-request:sc !<([@ta =inbound-request:eyre] vase)) == @@ -303,12 +303,31 @@ ++ handle-start-thread ~/ %handle-start-thread |= [parent-tid=(unit tid) use=(unit tid) =beak file=term =vase] + (prep-thread parent-tid use beak %| file vase) +:: +++ handle-inline-thread + ~/ %handle-inline-thread + |= [parent-tid=(unit tid) use=(unit tid) =beak =shed:khan] + (prep-thread parent-tid use beak %& shed) +:: +++ prep-thread + |= $: parent-tid=(unit tid) use=(unit tid) =beak + source=(each shed:khan [file=term =vase]) + == ^- (quip card ^state) =/ parent-yarn=yarn ?~ parent-tid / (~(got by tid.state) u.parent-tid) - =/ new-tid (fall use (new-thread-id file)) + =/ new-tid + ?^ use + u.use + %- new-thread-id + ?- -.source + %& (cat 3 'inline-' q.beak) + %| file.p.source + == + :: =/ =yarn (snoc parent-yarn new-tid) :: ?: (~(has of running.state) yarn) @@ -321,16 +340,19 @@ =? serving.state !(~(has by serving.state) new-tid) (~(put by serving.state) new-tid [~ %noun q.beak]) :: - =: starting.state (~(put by starting.state) yarn [%build vase]) - tid.state (~(put by tid.state) new-tid yarn) + =. tid.state (~(put by tid.state) new-tid yarn) + ?- -.source + %& (begin-shed yarn p.source) + %| + =. starting.state (~(put by starting.state) yarn [%build vase.p.source]) + =/ pax=path + ~| no-file-for-thread+file.p.source + (need (get-fit:clay beak %ted file.p.source)) + :_ state + :_ ~ + :+ %pass /build/[new-tid] + [%arvo %c %warp p.beak q.beak ~ %sing %a r.beak pax] == - =/ pax=path - ~| no-file-for-thread+file - (need (get-fit:clay beak %ted file)) - :_ state - :_ ~ - :+ %pass /build/[new-tid] - [%arvo %c %warp p.beak q.beak ~ %sing %a r.beak pax] :: ++ handle-build ~/ %handle-build @@ -349,23 +371,25 @@ =/ maybe-thread (mule |.(!<(thread !<(vase q.r.u.riot)))) ?: ?=(%| -.maybe-thread) (thread-fail-not-running tid %thread-not-thread ~) - (start-thread yarn p.maybe-thread) + (slam-thread yarn p.maybe-thread) :: -++ start-thread - ~/ %start-thread +++ slam-thread + ~/ %slam-thread |= [=yarn =thread] ^- (quip card ^state) =/ =vase vase:(~(got by starting.state) yarn) - ?< (~(has of running.state) yarn) - =/ m (strand ,^vase) =/ res (mule |.((thread vase))) ?: ?=(%| -.res) (thread-fail-not-running (yarn-to-tid yarn) %false-start p.res) - =/ =eval-form:eval:m - (from-form:eval:m p.res) - =: starting.state (~(del by starting.state) yarn) - running.state (~(put of running.state) yarn eval-form) - == + =. starting.state (~(del by starting.state) yarn) + (begin-shed yarn p.res) +:: +++ begin-shed + |= [=yarn =shed:khan] + ?< (~(has of running.state) yarn) + =/ m (strand ,vase) + =/ =eval-form:eval:m (from-form:eval:m shed) + =. running.state (~(put of running.state) yarn eval-form) (take-input yarn ~) :: ++ handle-stop-thread diff --git a/pkg/arvo/gen/ames-flows.hoon b/pkg/arvo/gen/ames-flows.hoon new file mode 100644 index 000000000..9a6356b72 --- /dev/null +++ b/pkg/arvo/gen/ames-flows.hoon @@ -0,0 +1,46 @@ +:: print [len] %ames flows, sorted by number-per-ship +:: +:- %say +|= [[now=@da eny=@uvJ bec=beak] arg=$@(~ [len=@ ~]) ~] +:- %noun +:: +=; flows + ^- (list [=ship open=[out-open=@ out-closing=@ in=@ nax=@] corked=@]) + =/ len ?^(arg len.arg 50) + (scag len (sort flows |=([[@ [a=@ud *] *] @ [b=@ud *] *] (gth a b)))) +:: +=/ peers-map + .^ (map ship ?(%alien %known)) + %ax /(scot %p p.bec)//(scot %da now)/peers + == +=/ peers=(list ship) + %+ murn ~(tap by peers-map) + |= [=ship val=?(%alien %known)] + ?: =(ship p.bec) + ~ :: this is weird, but we saw it + ?- val + %alien ~ + %known (some ship) + == +:: +^- (list [=ship open=[out-open=@ out-closing=@ in=@ nax=@] corked=@]) +%+ turn peers +|= =ship +=+ .^ =ship-state:ames + %ax /(scot %p p.bec)//(scot %da now)/peers/(scot %p ship) + == +=/ =peer-state:ames ?>(?=(%known -.ship-state) +.ship-state) +=/ corked ~(wyt in corked.peer-state) +=- [ship - corked] +:: +=+ %+ roll ~(tap in ~(key by snd.peer-state)) + |= [b=bone [out=(list bone) in=(list bone) nax=(list bone)]] + =/ m (mod b 4) + ?+ m ~|([%odd-bone b] !!) + %0 [[b out] in nax] + %1 [out [b in] nax] + %3 [out in [b nax]] + == +=/ [out-closing=(list bone) out-open=(list bone)] + (skid out ~(has ^in closing.peer-state)) +[(lent out-open) (lent out-closing) (lent in) (lent nax)] diff --git a/pkg/arvo/gen/ames-timers.hoon b/pkg/arvo/gen/ames-timers.hoon new file mode 100644 index 000000000..a344b1df6 --- /dev/null +++ b/pkg/arvo/gen/ames-timers.hoon @@ -0,0 +1,20 @@ +:: print [len] %ames message-pump timers, sorted by number-per-ship +:: +:- %say +|= [[now=@da eny=@uvJ bec=beak] arg=$@(~ [len=@ ~]) ~] +:- %noun +:: +=; who + ^- (list [@ta @ud]) + =/ len ?^(arg len.arg 50) + (scag len (sort ~(tap by who) |=([[@ a=@ud] @ b=@ud] (gth a b)))) +:: +=| who=(map @ta @ud) +=/ tim .^((list (pair @da duct)) bx+/(scot %p p.bec)//(scot %da now)/debug/timers) +|- ^+ who +?~ tim who +?. &(?=(^ q.i.tim) ?=([%ames %pump ^] i.q.i.tim)) + $(tim t.tim) +=* her i.t.t.i.q.i.tim +=/ i (~(gut by who) her 0) +$(tim t.tim, who (~(put by who) her +(i))) diff --git a/pkg/arvo/gen/aqua/dojo.hoon b/pkg/arvo/gen/aqua/dojo.hoon index 03d63f505..d9ef58a1d 100644 --- a/pkg/arvo/gen/aqua/dojo.hoon +++ b/pkg/arvo/gen/aqua/dojo.hoon @@ -5,8 +5,8 @@ :- %aqua-events %+ turn ^- (list unix-event) - :~ [/d/term/1 %belt %ctl `@c`%e] - [/d/term/1 %belt %ctl `@c`%u] + :~ [/d/term/1 %belt %mod %ctl `@c`%e] + [/d/term/1 %belt %mod %ctl `@c`%u] [/d/term/1 %belt %txt ((list @c) command)] [/d/term/1 %belt %ret ~] == diff --git a/pkg/arvo/gen/azimuth/kick.hoon b/pkg/arvo/gen/azimuth/kick.hoon deleted file mode 100644 index ad63d5236..000000000 --- a/pkg/arvo/gen/azimuth/kick.hoon +++ /dev/null @@ -1,5 +0,0 @@ -:: Kick azimuth -:: -:- %say -|= * -[%azimuth-poke %kick ~] diff --git a/pkg/arvo/gen/azimuth/watch.hoon b/pkg/arvo/gen/azimuth/watch.hoon index 97c0d74b0..b46d32811 100644 --- a/pkg/arvo/gen/azimuth/watch.hoon +++ b/pkg/arvo/gen/azimuth/watch.hoon @@ -1,5 +1,5 @@ :: Change node url and network for azimuth :: :- %say -|= [* [url=@ta net=?(%mainnet %ropsten %local %default) ~] ~] +|= [* [url=@ta net=?(%mainnet %goerli %local %default) ~] ~] [%azimuth-poke %watch url net] diff --git a/pkg/arvo/gen/brass.hoon b/pkg/arvo/gen/brass.hoon index 98c39ec7e..a80cd5e90 100644 --- a/pkg/arvo/gen/brass.hoon +++ b/pkg/arvo/gen/brass.hoon @@ -24,7 +24,7 @@ rest=(list desk) == :: - ~ + prime=_| == :- %pill ^- pill:pill @@ -39,50 +39,10 @@ ?~ arg %base ?>(?=(@ base.arg) base.arg) /(scot %p p.bec)/[desk]/(scot %da now)/sys -=/ bas=path - (scag 3 sys) =/ dez=(list [desk path]) ?~ arg ~ %+ turn rest.arg |= =desk [desk /(scot %p p.bec)/[desk]/(scot %da now)] :: -:: compiler-source: hoon source file producing compiler, `sys/hoon` -:: -=+ compiler-source=.^(@t %cx (welp sys /hoon/hoon)) -:: -:: compiler-twig: compiler as hoon expression -:: -~& %brass-parsing -=+ compiler-twig=(rain /sys/hoon/hoon compiler-source) -~& %brass-parsed -:: -:: compiler-formula: compiler as nock formula -:: -~& %brass-compiling -=+ compiler-formula=q:(~(mint ut %noun) %noun compiler-twig) -~& %brass-compiled -:: -:: arvo-source: hoon source file producing arvo kernel, `sys/arvo` -:: -=+ arvo-source=.^(@t %cx (welp sys /arvo/hoon)) -:: -:: boot-ova: startup events -:: -=/ boot-ova=(list) - :~ aeon:eden:part - boot:eden:part - compiler-formula - compiler-source - arvo-source - == -:: a pill is a 3-tuple of event-lists: [boot kernel userspace] -:: -:+ %pill %brass -:+ boot-ova - :~ (boot-ovum:pill compiler-source arvo-source) - (file-ovum2:pill bas) - == -%+ turn - (snoc dez [%base bas]) -file-ovum:pill +(brass:pill sys dez prime) diff --git a/pkg/arvo/gen/desk-requests.hoon b/pkg/arvo/gen/desk-requests.hoon new file mode 100644 index 000000000..6bc32102c --- /dev/null +++ b/pkg/arvo/gen/desk-requests.hoon @@ -0,0 +1,28 @@ +:: +desk-requests: count pending requests for a desk +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [=desk ~] + ~ + == +:- %tang +^- tang +=/ cul=(list [@p rave:clay]) + %~ tap in + .^ (set [@p rave:clay]) + /cx/(scot %p p.bec)//(scot %da now)/cult/[desk] + == +:: +=/ [loc=_cul inc=_cul] + (skid cul |=([=@p rave:clay] =(p p.bec))) +=/ syc=_cul + =/ nex=@ud + +(ud:.^(cass:clay %cw /(scot %p p.bec)/[desk]/(scot %da now))) + (skim inc |=([@p =rave:clay] =([%sing %w ud+nex /] rave))) +:: +%- flop +:~ leaf+"total: {<(lent cul)>}" + leaf+"- local: {<(lent loc)>}" + leaf+"- incoming: {<(lent inc)>}" + leaf+" - for next: {<(lent syc)>}" +== diff --git a/pkg/arvo/gen/gall-nonces.hoon b/pkg/arvo/gen/gall-nonces.hoon new file mode 100644 index 000000000..d0bdd1ee9 --- /dev/null +++ b/pkg/arvo/gen/gall-nonces.hoon @@ -0,0 +1,10 @@ +:: +gall-nonces: print %gall agent subscription nonces, highest-last +:: +:- %say +|= [[now=@da eny=@uvJ bec=beak] ~ ~] +:- %noun +^- (list [dude:gall @ud]) +%+ sort + %~ tap by + .^((map dude:gall @ud) %gf /(scot %p p.bec)//(scot %da now)) +|=([[* a=@ud] [* b=@ud]] (lth a b)) diff --git a/pkg/arvo/gen/help.hoon b/pkg/arvo/gen/help.hoon index 277b41e93..2446943e5 100644 --- a/pkg/arvo/gen/help.hoon +++ b/pkg/arvo/gen/help.hoon @@ -39,7 +39,7 @@ |= a=* ^- [cord path] [;;(@t a) (welp (slag len pax) /[nam])] -- -:: +::TODO: make this work with doccords :- %say |= [[now=time @ our=ship ^] typ=$@(~ [p=term ~]) ~] =/ pax=path /(scot %p our)/base/(scot %da now)/gen :: XX hardcoded diff --git a/pkg/arvo/gen/hood/ames-cong.hoon b/pkg/arvo/gen/hood/ames-cong.hoon new file mode 100644 index 000000000..b6bd185e6 --- /dev/null +++ b/pkg/arvo/gen/hood/ames-cong.hoon @@ -0,0 +1,6 @@ +:: Helm: Adjust Ames congestion control constants +:: +:- %say +|= [^ [msg=@ud mem=@ud ~] ~] +:- %helm-ames-cong +msg^mem diff --git a/pkg/arvo/gen/hood/ames-snub.hoon b/pkg/arvo/gen/hood/ames-snub.hoon new file mode 100644 index 000000000..575e29c9d --- /dev/null +++ b/pkg/arvo/gen/hood/ames-snub.hoon @@ -0,0 +1,10 @@ +:: Helm: Set Ames Blocklist +:: +/? 310 +:: +:::: + :: +:- %say +|= [^ ships=(list ship) ~] +:- %helm-ames-snub +ships diff --git a/pkg/arvo/gen/hood/breload.hoon b/pkg/arvo/gen/hood/breload.hoon deleted file mode 100644 index 5b9df1d72..000000000 --- a/pkg/arvo/gen/hood/breload.hoon +++ /dev/null @@ -1,14 +0,0 @@ -:: Helm: Reload vane/s from /=base= -:: -:::: /hoon/breload/hood/gen - :: -/? 310 -:: -:::: - :: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [arg=(list term) ~] - == -:+ %helm-reload-desk %base -arg diff --git a/pkg/arvo/gen/hood/bump.hoon b/pkg/arvo/gen/hood/bump.hoon index 4811c2f35..cc443c25f 100644 --- a/pkg/arvo/gen/hood/bump.hoon +++ b/pkg/arvo/gen/hood/bump.hoon @@ -1,7 +1,3 @@ :- %say -|= $: [now=@da eny=@uvJ bec=beak] - ~ - force=_| - except=(set desk) - == -[%kiln-bump except force] +|= [[now=@da eny=@uvJ bec=beak] ~ ~] +[%kiln-bump ~] diff --git a/pkg/arvo/gen/hood/close-flows.hoon b/pkg/arvo/gen/hood/close-flows.hoon new file mode 100644 index 000000000..8804c9e34 --- /dev/null +++ b/pkg/arvo/gen/hood/close-flows.hoon @@ -0,0 +1,9 @@ +:: Deletes all stale ames flows from failed (re) subscriptions +:: +:: It runs in dry mode by default, printing the flows that can be closed. +:: To actually close the flows, run with |close-flows, =dry | +:: +:- %say +|= [^ arg=~ dry=?] +:: +[%helm-ames-kroc dry] diff --git a/pkg/arvo/gen/hood/doff.hoon b/pkg/arvo/gen/hood/doff.hoon new file mode 100644 index 000000000..6fd43a49b --- /dev/null +++ b/pkg/arvo/gen/hood/doff.hoon @@ -0,0 +1,8 @@ +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + ~ + [dude=_`dude:gall`%$ ship=_`@p`(bex 128)] + == +=/ darg=(unit dude:gall) ?:(=(%$ dude) ~ `dude) +=/ sarg=(unit ^ship) ?:(=((bex 128) ship) ~ `ship) +[%helm-doff darg sarg] diff --git a/pkg/arvo/gen/hood/gall-sift.hoon b/pkg/arvo/gen/hood/gall-sift.hoon new file mode 100644 index 000000000..9f02165ee --- /dev/null +++ b/pkg/arvo/gen/hood/gall-sift.hoon @@ -0,0 +1,8 @@ +:: Helm: Set Gall Verbosity by Agent +:: +/? 310 +:: +:- %say +|= [^ dudes=(list dude:gall) ~] +:- %helm-gall-sift +dudes diff --git a/pkg/arvo/gen/hood/gall-verb.hoon b/pkg/arvo/gen/hood/gall-verb.hoon new file mode 100644 index 000000000..32b445701 --- /dev/null +++ b/pkg/arvo/gen/hood/gall-verb.hoon @@ -0,0 +1,11 @@ +:: Helm: Adjust Gall verbosity +:: +:: List of diagnostic flags is in verb:gall in zuse.hoon, documented in +:: gall.hoon +:: +/? 310 +:: +:- %say +|= [^ veb=(list verb:gall) ~] +:- %helm-gall-verb +veb diff --git a/pkg/arvo/gen/hood/knob.hoon b/pkg/arvo/gen/hood/knob.hoon index 1262b199b..f5559dec2 100644 --- a/pkg/arvo/gen/hood/knob.hoon +++ b/pkg/arvo/gen/hood/knob.hoon @@ -1,4 +1,4 @@ -:: Helm: Adjust vane error verbosity knob +:: Drum: Adjust vane error verbosity knob :: /? 310 :: @@ -6,5 +6,5 @@ :: :- %say |= [^ [error-tag=@tas level=?(%hush %soft %loud) ~] ~] -:- %helm-knob +:- %drum-knob [error-tag level] diff --git a/pkg/arvo/gen/hood/link.hoon b/pkg/arvo/gen/hood/link.hoon index 5fe183279..5e14126a1 100644 --- a/pkg/arvo/gen/hood/link.hoon +++ b/pkg/arvo/gen/hood/link.hoon @@ -8,9 +8,11 @@ :: :- %say |= $: [now=@da eny=@uvJ byk=beak] - [arg=$?([dap=term ~] [who=ship dap=term ~]) ~] + arg=$?([dap=term ~] [who=ship dap=term ~]) + drum-session=@ta == :- %drum-link +:- drum-session ?~ +.arg [p.byk dap.arg] [who.arg dap.arg] diff --git a/pkg/arvo/gen/hood/new-desk.hoon b/pkg/arvo/gen/hood/new-desk.hoon new file mode 100644 index 000000000..54995a597 --- /dev/null +++ b/pkg/arvo/gen/hood/new-desk.hoon @@ -0,0 +1,50 @@ +:: |new-desk: creates a minimal desk +:: +/+ *generators +:: +:- %ask +|= $: [now=@da eny=@uvJ bek=beak] + [=desk ~] + [from=$~(%base desk) hard=_|] + == +:: +=; make-new-desk + ?. ?& !hard + (~(has in .^((set ^desk) %cd (en-beam bek(q %$) /))) desk) + == + (make-new-desk) + %+ print (rap 3 'the desk %' desk ' already exists. overwrite it?' ~) + %+ prompt [%& %prompt "overwrite? (y/N) "] + |= in=tape + ?. |(=("y" in) =("Y" in) =("yes" in)) + no-product + (make-new-desk) +:: +|. %- produce +:- %helm-pass +%^ new-desk:cloy desk + ~ +%- ~(gas by *(map path page:clay)) +|^ =- (turn - mage) + ^- (list path) + :~ /mar/noun/hoon + /mar/hoon/hoon + /mar/txt/hoon + /mar/kelvin/hoon + /sys/kelvin + == +:: +++ mage + |= =path + :- path + ^- page:clay + :- (rear path) + ~| [%missing-source-file from path] + .^ * + %cx + (scot %p p.bek) + from + (scot %da now) + path + == +-- diff --git a/pkg/arvo/gen/hood/rein.hoon b/pkg/arvo/gen/hood/rein.hoon index 3f777a2d3..db7d32261 100644 --- a/pkg/arvo/gen/hood/rein.hoon +++ b/pkg/arvo/gen/hood/rein.hoon @@ -8,9 +8,7 @@ == :- %kiln-rein :- desk +=+ .^(=cone:clay %cx /(scot %p p.bec)//(scot %da now)/domes) %+ roll arg -=| =rein:hood -|: [*[on=? =dude:gall] rein=rein(liv liv)] -?: on - rein(add (~(put in add.rein) dude)) -rein(sub (~(put in sub.rein) dude)) +|: [*[on=? =dude:gall] rein=ren:(~(got by cone) [p.bec desk])] +(~(put by rein) dude on) diff --git a/pkg/arvo/gen/hood/start.hoon b/pkg/arvo/gen/hood/start.hoon index a44b38b3d..b9174411b 100644 --- a/pkg/arvo/gen/hood/start.hoon +++ b/pkg/arvo/gen/hood/start.hoon @@ -15,4 +15,7 @@ ?@ +.arg [q.bec -.arg] ?> ((sane %tas) +<.arg) [-.arg +<.arg] -[%kiln-rein des & [dap ~ ~] ~] +=+ .^(=cone:clay %cx /(scot %p p.bec)//(scot %da now)/domes) +=/ =dome:clay (~(gut by cone) [p.bec des] *dome:clay) +=+ ((slog ?:(=(%live liv.dome) ~ ['kiln: desk not live' ~])) ~) +[%kiln-rein des (~(put by ren.dome) dap &)] diff --git a/pkg/arvo/gen/hood/tomb.hoon b/pkg/arvo/gen/hood/tomb.hoon index 6d20b5459..d424afbdd 100644 --- a/pkg/arvo/gen/hood/tomb.hoon +++ b/pkg/arvo/gen/hood/tomb.hoon @@ -13,8 +13,7 @@ =/ =lobe u.fil.arch =+ .^(=rang %cx /(scot %p p.bec)//(scot %da now)/rang) =+ .^(=cone %cx /(scot %p p.bec)//(scot %da now)/domes) -=/ domes=(list [[=ship =desk] =dome tom=(map tako norm) nor=norm]) - ~(tap by cone) +=/ domes=(list [[=ship =desk] dome]) ~(tap by cone) =/ norms |^ |- ^- (set [ship desk tako norm path]) @@ -24,14 +23,14 @@ =/ =aeon 1 %- ~(uni in $(domes t.domes)) |- ^- (set [ship desk tako norm path]) - ?: (lth let.dome.i.domes aeon) + ?: (lth let.i.domes aeon) ~ - =/ =tako (~(got by hit.dome.i.domes) aeon) + =/ =tako (~(got by hit.i.domes) aeon) =/ paths (draw-tako ship.i.domes desk.i.domes +.i.domes tako) (~(uni in paths) $(aeon +(aeon))) :: ++ draw-tako - |= [=ship =desk [dome tom=(map tako norm) nor=norm] =tako] + |= [=ship =desk dome =tako] ^- (set [^ship ^desk ^tako norm path]) ~+ =/ =yaki (~(got by hut.rang) tako) diff --git a/pkg/arvo/gen/hood/track.hoon b/pkg/arvo/gen/hood/track.hoon deleted file mode 100644 index 49c77771f..000000000 --- a/pkg/arvo/gen/hood/track.hoon +++ /dev/null @@ -1,14 +0,0 @@ -:: Kiln: merge each version of remote desk? XX clarify -:: -:::: /hoon/track/hood/gen - :: -/? 310 -:: -:::: - :: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [arg=[syd=@tas her=@p sud=@tas ~] ~] - == -:- %kiln-track -[syd her sud]:arg diff --git a/pkg/arvo/gen/hood/unlink.hoon b/pkg/arvo/gen/hood/unlink.hoon index d7bc509b0..fc6e1fb01 100644 --- a/pkg/arvo/gen/hood/unlink.hoon +++ b/pkg/arvo/gen/hood/unlink.hoon @@ -8,9 +8,11 @@ :: :- %say |= $: [now=@da eny=@uvJ byk=beak] - [arg=$?([dap=term ~] [who=ship dap=term ~]) ~] + arg=$?([dap=term ~] [who=ship dap=term ~]) + drum-session=@ta == :- %drum-unlink +:- drum-session ?~ +.arg [p.byk dap.arg] [who.arg dap.arg] diff --git a/pkg/arvo/gen/ivory.hoon b/pkg/arvo/gen/ivory.hoon index 6ae9a2504..387ac43f3 100644 --- a/pkg/arvo/gen/ivory.hoon +++ b/pkg/arvo/gen/ivory.hoon @@ -17,60 +17,4 @@ =/ sys=path ?^ arg top.arg /(scot %p p.bec)/[q.bec]/(scot %da now)/sys -=/ lib - (welp (flop (tail (flop sys))) /lib) -:: -|^ =/ ver - =/ sub *(trap vase) - =. sub (build-sys sub %hoon) - =. sub (build-sys sub %arvo) - =. sub (build-sys sub %lull) - =. sub (build-sys sub %zuse) - =. sub (build-lib sub & %ethereum) - =. sub (build-lib sub & %azimuth) - (build-lib sub | %vere) - =/ nok !. - => *[ver=(trap vase) ~] - != q:$:ver - ivory/[nok ver ~] -:: -++ build-sys - |= [sub=(trap vase) nam=term] ^- (trap vase) - ~> %slog.[0 leaf+"ivory: building /sys/{(trip nam)}"] - (swat sub (rain /sys/[nam]/hoon .^(@t cx+(welp sys /[nam]/hoon)))) -:: -++ build-lib - |= [sub=(trap vase) imp=? nam=term] ^- (trap vase) - ~> %slog.[0 leaf+"ivory: building /lib/{(trip nam)}"] - =/ hun=hoon - %+ mist /lib/[nam]/hoon - .^(@t cx+(welp lib /[nam]/hoon)) - ?. imp (swat sub hun) - (swel sub [%ktts nam hun]) -:: +mist: +rain but skipping past ford runes -:: -++ mist - |= [bon=path txt=@] - ^- hoon - =+ vas=vast - ~| bon - %+ scan (trip txt) - %- full - =; fud - (ifix [;~(plug gay fud) gay] tall:vas(wer bon)) - %- star - ;~ pose vul - %+ ifix [fas (just `@`10)] - (star ;~(less (just `@`10) next)) - == -:: +swel: +swat but with +slop -:: -++ swel - |= [tap=(trap vase) gen=hoon] - ^- (trap vase) - =/ gun (~(mint ut p:$:tap) %noun gen) - => [tap=tap gun=gun] - |. ~+ - =/ pro q:$:tap - [[%cell p.gun p:$:tap] [.*(pro q.gun) pro]] --- +(ivory:pill sys) diff --git a/pkg/arvo/gen/norms.hoon b/pkg/arvo/gen/norms.hoon index 81cc3594f..d7ad191e2 100644 --- a/pkg/arvo/gen/norms.hoon +++ b/pkg/arvo/gen/norms.hoon @@ -8,7 +8,7 @@ %- flop ^- tang %- zing %+ turn ~(tap by cone) -|= [[=ship =desk] dome tom=(map tako norm) nor=norm] +|= [[=ship =desk] dome] :- leaf+"{}/{}:" %+ turn ~(tap of nor) |= [=path keep=?] diff --git a/pkg/arvo/gen/roller/endpoint.hoon b/pkg/arvo/gen/roller/endpoint.hoon index ce59f3073..26e271d6f 100644 --- a/pkg/arvo/gen/roller/endpoint.hoon +++ b/pkg/arvo/gen/roller/endpoint.hoon @@ -1,4 +1,4 @@ :: :- %say -|= [* [url=@t net=?(%mainnet %ropsten %local) ~] ~] +|= [* [url=@t net=?(%mainnet %goerli %local) ~] ~] [%roller-action %config %endpoint url net] diff --git a/pkg/arvo/gen/roller/goerli.hoon b/pkg/arvo/gen/roller/goerli.hoon new file mode 100644 index 000000000..4dacaf99a --- /dev/null +++ b/pkg/arvo/gen/roller/goerli.hoon @@ -0,0 +1,10 @@ +:: Configures /app/roller to listen to a Goerli Infura node +:: +:- %say +|= * +:* %roller-action + %config + %endpoint + 'https://goerli.infura.io/v3/2599df54929b47099bda360958d75aaf' + %goerli +== diff --git a/pkg/arvo/gen/roller/ropsten.hoon b/pkg/arvo/gen/roller/ropsten.hoon deleted file mode 100644 index af363f0dd..000000000 --- a/pkg/arvo/gen/roller/ropsten.hoon +++ /dev/null @@ -1,10 +0,0 @@ -:: Configures /app/roller to listen to a Ropsten Infura node -:: -:- %say -|= * -:* %roller-action - %config - %endpoint - 'https://ropsten.infura.io/v3/2599df54929b47099bda360958d75aaf' - %ropsten -== diff --git a/pkg/arvo/gen/show-vat.hoon b/pkg/arvo/gen/show-vat.hoon index 922cc92bc..0d3d1d2b1 100644 --- a/pkg/arvo/gen/show-vat.hoon +++ b/pkg/arvo/gen/show-vat.hoon @@ -6,9 +6,15 @@ :- %tang %- flop ^- tang =/ pax=path /(scot %p p.bec)/[desk]/(scot %da now) -=+ .^([lal=@tas num=@ud] cx+(weld pax /sys/kelvin)) +=/ welt=(list [@tas @ud]) + =+ .^(=waft:clay cx+(weld pax /sys/kelvin)) + %+ sort ~(tap in (waft-to-wefts:clay waft)) + |= [a=weft b=weft] + ?: =(lal.a lal.b) + (lte num.a num.b) + (lte lal.a lal.b) :~ '/sys/kelvin:' - leaf/"[{} {}]" + (sell !>(welt)) '/desk/bill:' (sell !>(.^((list dude:gall) cx+(weld pax /desk/bill)))) == diff --git a/pkg/arvo/gen/solid.hoon b/pkg/arvo/gen/solid.hoon index d131a7338..f98d94948 100644 --- a/pkg/arvo/gen/solid.hoon +++ b/pkg/arvo/gen/solid.hoon @@ -28,12 +28,10 @@ == :: dub=_| + prime=_| == :- %pill ^- pill:pill -:: sys: root path to boot system, `/~me/[desk]/now/sys` -:: bas: root path to boot system' desk -:: dez: secondary desks and their root paths :: =/ sys=path ?: ?=([^ *] arg) @@ -42,91 +40,10 @@ ?~ arg %base ?>(?=(@ base.arg) base.arg) /(scot %p p.bec)/[desk]/(scot %da now)/sys -=/ bas=path - (scag 3 sys) =/ dez=(list [desk path]) ?~ arg ~ %+ turn rest.arg |= =desk [desk /(scot %p p.bec)/[desk]/(scot %da now)] :: -=/ compiler-path (weld sys /hoon) -=/ arvo-path (weld sys /arvo) -~& %solid-start -=/ compiler-src .^(@t %cx (weld compiler-path /hoon)) -=/ arvo-src .^(@t %cx (weld arvo-path /hoon)) -=/ arvo-formula - ~& %solid-loaded - =/ compiler-hoon (rain compiler-path compiler-src) - ?. dub - :: compile arvo against hoon, with our current compiler - :: - =/ whole-hoon=hoon - [%tsgr compiler-hoon [%tsgr [%$ 7] (rain arvo-path arvo-src)]] - ~& %solid-parsed - =/ whole-formula q:(~(mint ut %noun) %noun whole-hoon) - ~& %solid-arvo - whole-formula - :: compile arvo against hoon, with a freshly compiled hoon (via +ride) - :: - ~& %solid-parsed - =/ compiler-formula q:(~(mint ut %noun) %noun compiler-hoon) - ~& %solid-compiled - =/ whole-src - (rap 3 ['=> ' compiler-src '=> +7 ' arvo-src ~]) - ~& %solid-double-loaded - =/ whole-formula - =< + - .* 0 - :+ %7 - compiler-formula - [%9 2 %10 [6 %1 %noun whole-src] [%0 1]] - ~& %solid-double-compiled - whole-formula -:: -~& [%solid-kernel `@ux`(mug arvo-formula)] -:: -:: installed: Arvo gate (formal interface) with %zuse and vanes installed -:: -=/ installed - =< q - %^ spin - ^- (list ovum) - :- (boot-ovum:pill compiler-src arvo-src) - %+ turn - (snoc (turn dez tail) bas) - file-ovum2:pill - .*(0 arvo-formula) - |= [ovo=ovum ken=*] - [~ (slum ken [now ovo])] -:: -:: kernel-formula -:: -:: We evaluate :arvo-formula (for jet registration), -:: then ignore the result and produce .installed -:: -=/ kernel-formula - [%7 arvo-formula %1 installed] -:: -:: boot-two: startup formula -:: -=/ boot-two - => [kernel-formula=** main-sequence=**] - != [.*(0 kernel-formula) main-sequence] -:: -:: boot-ova -:: -=/ boot-ova=(list) - [aeon:eden:part boot-two kernel-formula ~] -:: -:: a pill is a 3-tuple of event-lists: [boot kernel userspace] -:: -:: Our kernel event-list is ~, as we've already installed them. -:: Our userspace event-list is a list containing a full %clay -:: filesystem sync event. -:: -:+ %pill %solid -:+ boot-ova ~ -%+ turn - (snoc dez [%base bas]) -file-ovum:pill +(solid:pill sys dez dub now prime) diff --git a/pkg/arvo/gen/stale-flows.hoon b/pkg/arvo/gen/stale-flows.hoon new file mode 100644 index 000000000..f7b668b2f --- /dev/null +++ b/pkg/arvo/gen/stale-flows.hoon @@ -0,0 +1,149 @@ +:: +stale-flows: prints number of ames flows that can be closed +:: +:: |stale-flows, =veb %1 :: flows from nacking initial subscriptions +:: |stale-flows, =veb %2 :: stale flows that keep (re)trying to connect +:: |stale-flows, =veb %21 :: ... per app (only forward) +:: |stale-flows, =veb %3 :: stale resubscriptions +:: +=> |% + +$ subs (jar path [ship bone @]) + +$ pags (jar app=term [dst=term =ship =path]) :: per-agent + +$ naks (set [ship bone]) + :: verbosity + :: + +$ veb ?(%0 %1 %2 %21 %3 %31) + :: + ++ resubs + |= [=subs =veb] + ^- @ + ::=/ sorted + :: %+ sort ~(tap by subs) + :: |=([a=(list *) b=(list *)] (lte (lent a) (lent b))) + %+ roll ~(tap by subs)::sorted + |= [[k=path v=(list [ship bone @])] num=@] + ~? &(=(%3 veb) (gth (lent v) 1)) + "#{<(dec (lent v))>} stale resubs on {}" + ?. (gth (lent v) 1) num + (add (dec (lent v)) num) + -- +:: +:- %say +|= $: [now=@da eny=@uvJ bec=beak] + [arg=~ dry=? =veb] + == +:: +=/ peers-map + .^((map ship ?(%alien %known)) %ax /(scot %p p.bec)//(scot %da now)/peers) +:: +=/ peers=(list ship) + %+ murn ~(tap by peers-map) + |= [=ship val=?(%alien %known)] + ?: =(ship p.bec) + ~ :: this is weird, but we saw it + ?- val + %alien ~ + %known (some ship) + == +:: +=; [[=subs =pags backward=@ forward=@] =naks] + :- %tang %- flop + %+ weld + :~ leaf+"#{<~(wyt in naks)>} flows from %nacking %watches" + leaf+"#{} live backward flows with (keep retrying)" + leaf+"#{} live forward flows with (keep retrying)" + leaf+"#{<(resubs subs veb)>} stale resubscriptions" + == + ?. =(%21 veb) ~ + :- leaf+"----------------------------------" + %+ turn %+ sort ~(tap by pags) + |= [[* v=(list)] [* w=(list)]] + (gth (lent v) (lent w)) + |= [app=term v=(list [dst=term =ship =path])] + :- %leaf + %+ weld "#{<(lent v)>} flows for {} with >10 retries" + ?. =(1 (lent v)) ~ + ?> ?=(^ v) + " on {} to {} at {}" +:: +%+ roll peers +|= [=ship [=subs p=pags b=@ f=@] n=naks] +=+ .^ =ship-state:ames + %ax /(scot %p p.bec)//(scot %da now)/peers/(scot %p ship) + == +=/ =peer-state:ames ?>(?=(%known -.ship-state) +.ship-state) +:: +|^ [stale nacks] +:: +++ stale + %+ roll ~(tap by snd.peer-state) + |= $: [=bone message-pump-state:ames] + subs=_subs pags=_p + backward=_b forward=_f + == + =, packet-pump-state + :- ?~ duct=(~(get by by-bone.ossuary.peer-state) bone) subs + ?. ?=([* [%gall %use sub=@ @ %out @ @ nonce=@ pub=@ *] *] u.duct) + subs + =/ =wire i.t.u.duct + =/ nonce=(unit @) (rush i.t.t.t.t.t.t.t.i.t.u.duct dem) + %- ~(add ja subs) + :_ [ship bone ?~(nonce 0 u.nonce)] :: 0, 1? + ?~ nonce wire + :: don't include the sub-nonce in the key + :: + (weld (scag 7 wire) (slag 8 wire)) + %+ roll ~(tap in live) + |= $: [[msg=@ frag=@] [packet-state:ames *]] + pags=_pags + out=[b=_backward f=_forward] + == + :: + :: only forward flows + :: + =? pags &(=(0 (end 0 bone)) (gth retries 10)) + ?~ duct=(~(get by by-bone.ossuary.peer-state) bone) + pags + ?. ?=([* [%gall %use sub=@ @ %out @ @ nonce=@ pub=@ *] *] u.duct) + pags + =/ =wire i.t.u.duct + (~(add ja pags) (snag 2 wire) (snag 8 wire) ship (slag 9 wire)) + :: + ~? &(=(%2 veb) (gth retries 10)) + =+ arrow=?:(=(0 (end 0 bone)) "<-" "->") + =+ closing=(~(has in closing.peer-state) bone) + %+ weld "{arrow} ({(cite:title ship)}) bone=#{} " + "closing={} msg=#{} frag=#{} #{}" + :- pags + =? out (gth retries 10) + ?: =(0 (end 0 bone)) + [b.out +(f.out)] + [+(b.out) f.out] + out +:: +++ nacks + %+ roll ~(tap by rcv.peer-state) + |= [[=bone *] nacks=_n] + ?. &(=(0 (end 0 bone)) =(1 (end 0 (rsh 0 bone)))) + :: not a naxplanation ack bone + :: + nacks + :: by only corking forward flows that have received + :: a nack we avoid corking the current subscription + :: + =+ target=(mix 0b10 bone) + :: make sure that the nack bone has a forward flow + :: + ?~ duct=(~(get by by-bone.ossuary.peer-state) target) + nacks + ?. ?=([* [%gall %use sub=@ @ %out @ @ nonce=@ pub=@ *] *] u.duct) + nacks + =/ =wire i.t.u.duct + ?> ?=([%gall %use sub=@ @ %out @ @ nonce=@ pub=@ *] wire) + =/ app=term i.t.t.wire + =/ nonce=@ + =- ?~(- 0 u.-) + (rush i.t.t.t.t.t.t.t.wire dem) + =/ =path t.t.t.t.t.t.t.t.wire + ~? =(%1 veb) "[bone={} nonce={} agent={}] {}" + (~(put in nacks) [ship target]) +-- diff --git a/pkg/arvo/gen/story-list.hoon b/pkg/arvo/gen/story-list.hoon index bc46a4438..0990ba451 100644 --- a/pkg/arvo/gen/story-list.hoon +++ b/pkg/arvo/gen/story-list.hoon @@ -3,6 +3,8 @@ :::: :: /- *story +/$ story-to-txt %story %txt +:: :- %say |= $: [now=@da eny=@uvJ bec=beak] [[~] =desk ~] @@ -15,9 +17,6 @@ tang+[leaf+"Error: desk {} does not exist." ~] ?: !.^(? %cu pax) tang+['Error: No story file found. Please use |story-init to create one.' ~] -=/ story-to-txt - .^($-(story wain) %cf /(scot %p our)/[desk]/(scot cas)/story/txt) -:: =/ tale .^(story %cx pax) -=/ tale-text (story-to-txt tale) -tang+tale-text \ No newline at end of file +=/ tale-text (flop (story-to-txt tale)) +tang+tale-text diff --git a/pkg/arvo/gen/story-read.hoon b/pkg/arvo/gen/story-read.hoon index dd6e21c1f..73403543d 100644 --- a/pkg/arvo/gen/story-read.hoon +++ b/pkg/arvo/gen/story-read.hoon @@ -48,7 +48,7 @@ ?- reverse-ancestors ~ :: stop here and return the current message - =/ msg=(list cord) (msg-from-commit this-commit tale) + =/ msg=wain (msg-from-commit this-commit tale) [(weld msg result.state) mergebase=~] :: [tako:clay ~] @@ -103,8 +103,7 @@ =/ mainline-commit .^(yaki:clay %cs /(scot %p our)/[syd]/(scot cas)/yaki/(scot %uv mainline)) :: - =/ msg=(list cord) - (msg-from-commit this-commit tale) + =/ msg=wain (msg-from-commit this-commit tale) :: :: 1 - process current commit :: 2 - recur and queue processing on all commits on the sideline @@ -141,14 +140,9 @@ :: ++ msg-from-commit |= [commit=yaki:clay tale=story] - ^- (list cord) - =/ proses (~(get by tale) r.commit) + ^- wain + =/ proses (~(get ju tale) r.commit) ?~ proses ~ %- flop :: fixes formatting reversal in dojo - %- to-wain:format - %- crip - ;: welp - (tako-to-text:lib r.commit) - (proses-to-text:lib u.proses) - == + (chapter-to-text:lib r.commit proses) -- diff --git a/pkg/arvo/gen/vat.hoon b/pkg/arvo/gen/vat.hoon index 703ade563..6534d5e24 100644 --- a/pkg/arvo/gen/vat.hoon +++ b/pkg/arvo/gen/vat.hoon @@ -3,8 +3,4 @@ |= $: [now=@da eny=@uvJ bec=beak] [[=desk ~] ~] == -?: =(desk %kids) [%tang ~[(report-kids p.bec now)]] -=+ .^ =vat %gx - /(scot %p p.bec)/hood/(scot %da now)/kiln/vat/[desk]/noun - == -[%tang ~[(report-vat p.bec now vat)]] +[%tang ~[(report-vat (report-prep p.bec now) p.bec now desk)]] diff --git a/pkg/arvo/lib/claz.hoon b/pkg/arvo/lib/claz.hoon index 1a34ae9ff..3f7f40067 100644 --- a/pkg/arvo/lib/claz.hoon +++ b/pkg/arvo/lib/claz.hoon @@ -25,7 +25,7 @@ |= =network ?+ network ~&(%careful-fallback-contracts mainnet-contracts:azimuth) %mainnet mainnet-contracts:azimuth - %ropsten ropsten-contracts:azimuth + %goerli goerli-contracts:azimuth == :: ++ encode-claz-call diff --git a/pkg/arvo/lib/deco.hoon b/pkg/arvo/lib/deco.hoon new file mode 100644 index 000000000..0773c879a --- /dev/null +++ b/pkg/arvo/lib/deco.hoon @@ -0,0 +1,189 @@ +:: Hoon doccords sample +:: +:: this is a sample file designed to explain syntax and conventions +:: for doccords +:: +:: all lines must be under 80 characters. no blank lines. +:: any line longer than 60 characters is probably too long. +:: uppercase or non-ascii letters are strongly discouraged. +:: +:: whenever possible, use formal decorations. {::} decorates +:: the next expression when put on its own line, and the previous +:: expression if written on the same line +:: +:: there are two places to put decorations: in line with the +:: code, and on the right margin. +:: +:: the file below is a well-commented library, built around +:: a typical two-core structure. the cores are labeled {%arch} +:: (structures) and {%work} (productions). +:: +:: this code is written to display the variety of formatting +:: options the parser allows. a specific convention should pick +:: one of these styles and stick to it. +:: +:: there are three ways to mark the beginning of a formal comment: +:: 1- {:: $foo:} +:: 2- {:: +bar:} +:: 3- {:: } +:: +:: style 1 may optionally be followed by a series of paragraphs, where each +:: paragraph is preceded by a line containing only {::} and whitespace, and +:: each line of a given paragraph is preceded by four aces. +:: {::} +:: {:: more text} +:: {:: even more text} +:: {::} +:: {:: |=(code=hoon !!)} +:: +:: style 2 is much like style 1, but paragraphs are indented by two spaces +:: instead of four. +:: {::} +:: {:: more text} +:: {:: even more text} +:: {::} +:: {:: |=(code=hoon !!)} +:: +:: code is indented a total of six aces, for either style. +:: +:: style 3 is used to annotate the hoon or spec that immediately follows +:: the comment. paragraphs are written with style 2. +:: +:: the $foo and +bar above are examples of *lexical locations* for +:: style and batch-commenting purposes. this tells the parser to attempt +:: to attach the comment to the specified location. these locations +:: may be written as follows: +:: - `|foo` means a chapter +:: - `%foo` means a constant +:: - `.foo` means a face +:: - `+foo` means an arm +:: - `$foo` means a spec +:: - `^foo` means a core +:: - `_foo` means a door +:: - `=foo` means a gate +:: - `/foo` means a file path segment +:: +:: thus /lib/foo^widget|initial=open means the =open gate in the |initial +:: chapter of the ^widget core in the /foo library +:: +:: at present, doccords does not support lexical locations in full. +:: only single-element locations of the form `$foo` and `+foo` are supported, +:: and must be written above an arm in the core to which they are to be +:: attached, and after the chapter they are in (if the core has chapters). +:: you may still write doccords for other locations in anticipation of the +:: fully supported lexical location, but they will be thrown away before they +:: make it to the compiler. +:: +:: a postfix formal comment will either attach to hoon or spec on the +:: current line, or the arm name if there is no hoon or spec on the +:: line. the convention for +$ arms is that the comment attached to the +:: arm is about the mold itself, while the comment attached to the spec +:: is about the output type of the mold. +:: +:: to inspect doccords in this file from dojo, try the following: +:: +:: > =deco -build-file %/lib/deco/hoon +:: > # deco +:: > # deco/arch +:: > # deco/arch/molds +:: > # deco/arch/molds/goof +:: +:: > ?? *goof:deco +:: +=> :: + :: structures for our imaginary hello, world generator. + :: + :: nothing forces us to put structures in a separate core. + :: but compile-time evaluation doesnt work in the current + :: core; we often want to statically evaluate structures. + :: + :: there are three kinds of structures: moldss (normalizing + :: functions), mold builders (functions that build molds), and + :: constants (static data). + :: + :: most code will not need its own mold builders. but put them + :: in a separate chapter (separated by {+|}). + |% + :: molds are functions that normalize nouns. + :: + :: arms producing molds are introduced with {+$}. the + :: compiler will copy the arm decoration onto its product + +| %molds + :: $jam: some delicious jam + :: $jelly: different from jam? + +$ spot [p=@ q=@] :: a coordinate + +$ tops :: mold for coordinate + [p=@ q=@] :: another coordinate + +$ goof :: a simple tuple mold + $: foo=@ :: something mysterious + bar=@ :: go here for drink + moo=(binary-tree juice) :: cows do this + == + +$ juice :: fruity beverage mold + $% [%plum p=@] :: fresh prune + [%pear p=@ q=@] :: good for cider + [%acai p=@] :: aztec superfood + == + +$ jam @tas + +$ jelly @tas + :: mold builders are functions that build molds from other molds + :: + :: other languages might call these "type constructors" + :: or "higher-kinded types". + +| %mold-builders + ++ binary-tree :: tree mold builder + |* a=$-(* *) + $@(~ [n=a l=(binary-tree a) r=(binary-tree a)]) + :: + :: if you have constants, put them in their own chapter. + +| %constant + ++ answer :: answer to everything + 42 + -- +:: engines for our imaginary hello, world app. +:: +|% +:: +default-jam: bunts $jam +:: +default-juice: bunts $juice +++ say-hello :: say hi to someone + :: friendly welcome message + :: + |= + :: .txt: friend to say hi to + :: + txt=term + ^- tape + "hello, {(rip 3 txt)}" +:: +say-goodbye: say a really proper goodbye +:: +:: some paragraphs about the goodbye algorithm, possibly +:: including code indented by four extra spaces: +:: +:: ?: =(%hello %world) +:: %hello +:: %world +:: +++ say-goodbye + :: describe product of function + :: + |= + :: .txt: departing friend + :: .num: number of friends + $: txt=term + num=@ + == + ^- tape + :: .foo: four + :: .bar: forty-two + =/ foo (add 2 2) + =/ bar (add (mul num foo) 2) + =/ moo (mul num bar) :: for all the cows + "goodbye and {(scow %ud moo)}, {(rip 3 txt)}" +:: +++ say-minimum :: minimal decoration + |= txt=term + "nothing to say to {(rip 3 txt)}" +:: +++ default-jam *jam +++ default-juice *juice +-- diff --git a/pkg/arvo/lib/desk-jam.hoon b/pkg/arvo/lib/desk-jam.hoon index 442c22408..e1f7b2968 100644 --- a/pkg/arvo/lib/desk-jam.hoon +++ b/pkg/arvo/lib/desk-jam.hoon @@ -3,8 +3,8 @@ ++ jam-desk |= [our=ship =desk now=@da] ~> %slog.0^leaf/"jamming desk {}" - =+ .^(=rang:clay %cx /(scot %p our)//(scot %da now)) - =+ .^(=tako:clay %cs /(scot %p our)/[desk]/(scot %da now)) + =+ .^(=rang:clay %cx /(scot %p our)//(scot %da now)/rang) + =+ .^(=tako:clay %cs /(scot %p our)/[desk]/(scot %da now)/tako/~) %- jam %- ?:(=(%base desk) remove-misc-dirs same) %- ~(run by q:(~(got by hut.rang) tako)) diff --git a/pkg/arvo/lib/dice.hoon b/pkg/arvo/lib/dice.hoon index c59b7907b..4f5f44a3b 100644 --- a/pkg/arvo/lib/dice.hoon +++ b/pkg/arvo/lib/dice.hoon @@ -32,9 +32,9 @@ ^- [azimuth=@ux naive=@ux chain-id=@ launch=@] =< [azimuth naive chain-id launch] =, azimuth - ?- net + ?+ net !! %mainnet mainnet-contracts - %ropsten ropsten-contracts + %goerli goerli-contracts %local local-contracts %default contracts == diff --git a/pkg/arvo/lib/dill.hoon b/pkg/arvo/lib/dill.hoon new file mode 120000 index 000000000..f9c2362f0 --- /dev/null +++ b/pkg/arvo/lib/dill.hoon @@ -0,0 +1 @@ +../../base-dev/lib/dill.hoon \ No newline at end of file diff --git a/pkg/arvo/lib/dns.hoon b/pkg/arvo/lib/dns.hoon index cbad20271..f2891ca39 100644 --- a/pkg/arvo/lib/dns.hoon +++ b/pkg/arvo/lib/dns.hoon @@ -36,7 +36,7 @@ ;< ~ bind:m (backoff:strandio try ~h1) ;< rep=(unit httr:eyre) bind:m (hiss-request:strandio hiss) ?: ?& ?=(^ rep) - |(=(200 p.u.rep) =(307 p.u.rep)) + |(=(200 p.u.rep) =(307 p.u.rep) =(301 p.u.rep)) == (pure:m &) ?. ?| ?=(~ rep) diff --git a/pkg/arvo/lib/dprint.hoon b/pkg/arvo/lib/dprint.hoon new file mode 100644 index 000000000..68d36fa6e --- /dev/null +++ b/pkg/arvo/lib/dprint.hoon @@ -0,0 +1,773 @@ +/- *sole +/+ easy-print=language-server-easy-print +:: a library for printing doccords +=/ debug | +=> + :: dprint-types + |% + :: $overview: an overview of all named things in the type. + :: + :: each element in the overview list is either a documentation for a sublist + :: or an association betwen a term and documentation for it + +$ overview (list overview-item) + :: + :: $overview-item: an element of an overview + +$ overview-item + $% [%header doc=what children=overview] + [%item name=tape doc=what] + == + :: + :: $item: the part of a type being inspected + +$ item + $% + :: overview of a type + :: + [%view items=overview] + :: inspecting a full core + $: %core + name=tape :: arm that built it + docs=what :: + sut=type :: [%core *] + children=(unit item) :: compiled against + == + :: inspecting a single arm on a core + $: %arm + name=tape :: arm name + adoc=what :: arm doc + pdoc=what :: product doc + cdoc=what :: $ arm/prod doc + gen=hoon :: arm hoon AST + sut=type :: subject of arm + == + :: inspecting a face and what's behind it + $: %face + name=tape :: name of face + docs=what :: + children=(unit item) :: face referent + == + :: inspecting a single chapter on a core + $: %chapter + name=tape :: name of chapter + docs=what :: + sut=type :: [%core *] + tom=tome :: tome of chapter + == + == + :: + -- +:: dprint +:: +:: core containing doccords search and printing utilities +|% +:: contains arms used for looking for docs inside of a type +:: +:: the entrypoint for finding docs within a type is +find-item-in-type. ++| %searching +:: +find-item-in-type: returns the item to print while searching through topic +:: +:: this gate is a thin wrapper around _hunt for usability, since the only entry +:: point most users should care about is find-item:hunt +:: +++ find-item-in-type + |= [topics=(list term) sut=type] + ?~ topics !! + =/ top=(lest term) topics + ~(find-item hunt [top sut]) +:: +:: +hunt: door used for refining the type while searching for doccords +:: +++ hunt + |_ [topics=(lest term) sut=type] + +* this . + :: + +| %find + :: + ++ find-item + ~? >> debug %find-item + ^- (unit item) + ?- sut + %noun ~ + %void ~ + [%atom *] ~ + [%cell *] find-cell + [%core *] find-core + [%face *] find-face + [%fork *] find-fork + [%hint *] find-hint + [%hold *] find-item:this(sut (~(play ut p.sut) q.sut)) + == + :: + ++ find-cell + ~? >> debug %find-cell + ^- (unit item) + ?> ?=([%cell *] sut) + =/ lhs find-item:this(sut p.sut) + ?~ lhs + find-item:this(sut q.sut) + lhs + :: + ++ find-core + ~? >> debug %find-core + ^- (unit item) + ?> ?=([%core *] sut) + ?: check-arm + ?: check-search + ?: check-arm-core + return-arm-core + return-arm + recurse-arm-core + ?: check-chap + ?: check-search + return-chap + recurse-chap + recurse-core + :: + ++ find-face + ~? >> debug %find-face + ^- (unit item) + ?> ?=([%face *] sut) + ?. ?=(term p.sut) + ::TODO: handle $tune case + find-item:this(sut q.sut) + ?. =(i.topics p.sut) + ~ + ?~ t.topics + return-face + find-item:this(sut q.sut, topics t.topics) + :: + ++ find-fork + ~? >> debug %find-fork + ^- (unit item) + ?> ?=([%fork *] sut) + =/ types=(list type) ~(tap in p.sut) + |- + ?~ types ~ + =+ res=find-item:this(sut i.types) + ?~ res + $(types t.types) + res + :: + ++ find-hint + ~? >> debug %find-hint + ^- (unit item) + |^ + ?> ?=([%hint *] sut) + ?. ?=([%help *] q.p.sut) + find-item:this(sut q.sut) + ?+ q.sut ~ + [%cell *] find-cell:this(sut q.sut) + [%core *] find-hint-core + [%face *] find-hint-face + [%fork *] find-fork:this(sut q.sut) + [%hint *] find-hint:this(sut q.sut) + [%hold *] find-hint:this(q.sut (~(play ut p.q.sut) q.q.sut)) + == + :: + ++ find-hint-core + ~? >> debug %find-hint-core + ^- (unit item) + ?> &(?=([%hint *] sut) ?=([%help *] q.p.sut) ?=([%core *] q.sut)) + :: + ?. ?& ((sane %tas) summary.crib.p.q.p.sut) + =(summary.crib.p.q.p.sut i.topics) + == + find-core:this(sut q.sut) + ?~ t.topics + return-hint-core + find-item:this(sut q.sut, topics t.topics) + :: + ++ find-hint-face + ~? >> debug %find-hint-face + ^- (unit item) + ?> &(?=([%hint *] sut) ?=([%help *] q.p.sut) ?=([%face *] q.sut)) + ?: check-face:this(sut q.sut) + ?~ t.topics + return-hint-face + find-item:this(sut q.q.sut, topics t.topics) + find-item:this(sut q.q.sut) + -- + :: + ::+| %recurse + ++ recurse-core + ~? >> debug %recurse-core + ^- (unit item) + ?> ?=([%core *] sut) + find-item:this(sut p.sut) + ++ recurse-chap + ~? >> debug %recurse-chap + ^- (unit item) + ?> ?=([%core *] sut) + ?~ t.topics !! + find-item:this(topics t.topics) + ++ recurse-arm-core + ~? >> debug %recurse-arm-core + ^- (unit item) + ?> ?=([%core *] sut) + ?~ t.topics !! + find-item:this(sut arm-type, topics t.topics) + :: + +| %check + :: + ++ check-arm + ~? >> debug %recurse-core + ^- ? + !=(~ (find ~[i.topics] (sloe sut))) + ++ check-chap + ~? >> debug %check-chap + ^- ? + ?> ?=([%core *] sut) + (~(has by q.r.q.sut) i.topics) + ++ check-face + ~? >> debug %check-face + ^- ? + ?> ?=([%face *] sut) + ?. ?=(term p.sut) + ::TODO: handle $tune case + %.n + =(p.sut i.topics) + ++ check-search + ~? >> debug %check-search + ^- ? + =(~ t.topics) + ++ check-arm-core + ~? >> debug %check-arm-core + ^- ? + =+ arm-list=(sloe (~(play ut sut) arm-hoon)) + &(!=(arm-list ~) !=(arm-list ~[%$]) ?=([%core *] arm-type)) + :: + +| %return + :: + ++ return-cell + ~? >>> debug %return-cell + ^- (unit item) + ?> ?=([%cell *] sut) + (join-items return-item:this(sut p.sut) return-item:this(sut q.sut)) + :: + ++ return-core + ~? >>> debug %return-core + ^- (unit item) + ?> ?=([%core *] sut) + =* compiled-against return-item:this(sut p.sut) + `[%core (trip i.topics) *what sut compiled-against] + :: + ++ return-face + ~? >>> debug %return-face + ^- (unit item) + ?> ?=([%face *] sut) + :: TODO: handle tune case + ?> ?=(term p.sut) + =* compiled-against return-item:this(sut q.sut) + `[%face (trip p.sut) *what compiled-against] + :: + ++ return-fork + ~? >>> debug %return-fork + ^- (unit item) + ?> ?=([%fork *] sut) + =* types ~(tap in p.sut) + =* items (turn types |=(a=type return-item:this(sut a))) + (roll items join-items) + :: + ++ return-hint + ~? >>> debug %return-hint + ^- (unit item) + ?> ?=([%hint *] sut) + =* res return-item:this(sut q.sut) + ?. ?=([%help *] q.p.sut) + ~ + ?: ?=([%core *] q.sut) + return-hint-core + ?: ?=([%face *] q.sut) + return-hint-face + `[%view [%header `crib.p.q.p.sut (item-as-overview res)]~] + :: + ++ return-arm + ~? >>> debug %return-arm + ^- (unit item) + ?> ?=([%core *] sut) + =+ [adoc pdoc cdoc]=(arm-docs i.topics sut) + ::TODO: should this p.sut be sut? or the compiled type of the arm? + `[%arm (trip i.topics) adoc pdoc cdoc arm-hoon sut] + :: + ++ return-chap + ~? >>> debug %return-chap + ^- (unit item) + ?> ?=([%core *] sut) + =/ tom=tome (~(got by q.r.q.sut) i.topics) + `[%chapter (trip i.topics) p.tom sut (~(got by q.r.q.sut) i.topics)] + :: + ++ return-arm-core + ~? >>> debug %return-arm-core + ^- (unit item) + ?> ?=([%core *] sut) + =+ [adoc pdoc cdoc]=(arm-docs i.topics sut) + =/ dox=what ?~(adoc ?~(pdoc ~ pdoc) adoc) + =/ at arm-type + ?> ?=([%core *] at) + =* compiled-against return-item:this(sut p.sut) + `[%core (trip i.topics) dox at compiled-against] + :: + ++ return-item + ~? >>> debug %return-item + ^- (unit item) + ?- sut + %noun ~ + %void ~ + [%atom *] ~ + [%cell *] return-cell + [%core *] return-core + [%face *] return-face + [%fork *] return-fork + [%hint *] return-hint + [%hold *] return-item:this(sut (~(play ut p.sut) q.sut)) + == + :: + ++ return-hint-core + ~? >>> debug %return-hint-core + ^- (unit item) + ?> &(?=([%hint *] sut) ?=([%core *] q.sut)) + (apply-hint return-core:this(sut q.sut)) + :: + ++ return-hint-face + ~? >>> debug %return-hint-face + ^- (unit item) + ?> &(?=([%hint *] sut) ?=([%face *] q.sut)) + (apply-hint return-face:this(sut q.sut)) + :: + ++ apply-hint + ~? >> debug %apply-hint + |= uit=(unit item) + ^- (unit item) + ?~ uit ~ + ?> &(?=([%hint *] sut) ?=([%help *] q.p.sut)) + ?+ u.uit ~ + ?([%core *] [%face *]) (some u.uit(docs `crib.p.q.p.sut)) + == + :: + +| %misc + ++ arm-hoon + ^- hoon + ?> ?=([%core *] sut) + (^arm-hoon i.topics sut) + :: + ++ arm-type + ^- type + ?> ?=([%core *] sut) + (^arm-type i.topics sut) + -- +:: +:: +arm-hoon: looks for an arm in a core type and returns its hoon +++ arm-hoon + |= [nom=term sut=type] + ^- hoon + ?> ?=([%core *] sut) + =/ tomes=(list [p=term q=tome]) ~(tap by q.r.q.sut) + |- + ?~ tomes !! + =+ gen=(~(get by q.q.i.tomes) nom) + ?~ gen + $(tomes t.tomes) + u.gen +:: +:: +arm-type: looks for an arm in a core type and returns its type +++ arm-type + |= [nom=term sut=type] + ^- type + ?> ?=([%core *] sut) + (~(play ut sut) (arm-hoon nom sut)) +:: +:: +hint-doc: returns docs if type is %help $hint w/ matching cuff +++ hint-doc + |= [=cuff sut=type] + ^- what + ?. &(?=([%hint *] sut) ?=([%help *] q.p.sut) =(cuff cuff.p.q.p.sut)) + ~ + `crib.p.q.p.sut +:: +:: +arm-doc: returns arm doc of an arm +:: +:: we just check if the $cuff is from a ++ or +$ arm but this will +:: probably need to be revisited once more sophisticated cuffs are used +++ arm-doc + |= [nom=term sut=type] + ^- what + ?~ (hint-doc [%funk nom]~ sut) + (hint-doc [%plan nom]~ sut) + (hint-doc [%funk nom]~ sut) +:: +:: +prod-doc: wrapper for +hint-doc with empty cuff +++ prod-doc + |= sut=type + ^- what + (hint-doc ~ sut) +:: +:: +buc-doc: checks if type is core and returns docs on $ arm if it exists +++ buc-doc + |= sut=type + ^- what + ?. ?=([%core *] sut) + ~ + ?~ (find [%$]~ (sloe sut)) + ~ + =/ sat=type (arm-type %$ sut) + ?~ (arm-doc %$ sat) + (prod-doc sat) + (arm-doc %$ sat) +:: +:: +arm-docs: grabs the docs for an arm. +:: +:: there are three possible places with relevant docs for an arm: +:: docs for the arm itself, docs for the product of the arm, and +:: if the arm builds a core, docs for the default arm of that core. +:: +:: .adoc: docs written above the the arm +:: .pdoc: docs for the product of the arm +:: .cdoc: docs for the default arm of the core produced by the arm +++ arm-docs + |= [nom=term sut=type] + ^- [what what what] + ?> ?=([%core *] sut) + =/ sat=type (~(play ut sut) (arm-hoon nom sut)) + =/ adoc=what (arm-doc nom sat) + =/ pdoc=what + ?~ adoc + (prod-doc sat) + ?> ?=([%hint *] sat) + (prod-doc q.sat) + =/ cdoc=what + ?~ adoc + ?~ pdoc + (buc-doc sat) + ?> ?=([%hint *] sat) + (buc-doc q.sat) + ?~ pdoc + ?> ?=([%hint *] sat) + (buc-doc q.sat) + ?> &(?=([%hint *] sat) ?=([%hint *] q.sat)) + (buc-doc q.q.sat) + [adoc pdoc cdoc] +:: +:: +arm-and-chapter-overviews: returns an overview of a core's contents +:: +:: returns an overview for arms which are part of unnamed chapters, and +:: an overview of the named chapters +:: +++ arm-and-chapter-overviews + |= =item + ^- [overview overview] + ?> &(?=([%core *] item) ?=([%core *] sut.item)) + =| [adocs=overview cdocs=overview] + =/ tomes ~(tap by q.r.q.sut.item) + |- + ?~ tomes + [(sort-overview adocs) (sort-overview cdocs)] + ?~ p.i.tomes + :: chapter has no name. add documentation for its arms to arm-docs + =. adocs (weld adocs (tome-as-overview q.i.tomes sut.item)) + $(tomes t.tomes) + :: chapter has a name. add to list of chapters + =. cdocs + %+ weld cdocs + ^- overview + [%item :(weld "^" name.item "|" (trip -.i.tomes)) p.q.i.tomes]~ + $(tomes t.tomes) +:: +:: +arms-in-chapter: returns an overview of the arms in a specific chapter +++ arms-in-chapter + |= [sut=type tom=tome] + ^- overview + (sort-overview (tome-as-overview tom sut)) +:: +:: +sort-overview: sort items in an overview in alphabetical order +++ sort-overview + |= ovr=overview + ^- overview + %+ sort ovr + |= [lhs=overview-item rhs=overview-item] + (aor (get-overview-name lhs) (get-overview-name rhs)) +:: +:: +get-overview-name: returns the name of an overview +++ get-overview-name + |= ovr=overview-item + ?- ovr + [%header *] "" + [%item *] name.ovr + == +:: +:: +tome-as-overview: translate a tome into an overview +++ tome-as-overview + |= [tom=tome sut=type] + ^- overview + %+ turn ~(tap by q.tom) + |= ar=(pair term hoon) + :* %item + ::TODO make this distinguish between ++ and +$ arms + (weld "+" (trip p.ar)) + =/ adoc (arm-doc p.ar (~(play ut sut) q.ar)) + =/ pdoc (prod-doc (~(play ut sut) q.ar)) + ?~ adoc + pdoc + adoc + == +:: +:: +item-as-overview: changes an item into an overview +++ item-as-overview + |= uit=(unit item) + ~? >> debug %item-as-overview + ^- overview + ?~ uit ~ + =+ itm=(need uit) + ?- itm + [%view *] items.itm + :: + [%core *] + ?~ name.itm + (item-as-overview children.itm) + :- [%item (weld "^" name.itm) docs.itm] + (item-as-overview children.itm) + :: + [%arm *] + :_ ~ + ::TODO make this distinguish between ++ and +$ arms + :* %item (weld "+" name.itm) + ?~ adoc.itm + ?~ pdoc.itm + cdoc.itm + pdoc.itm + adoc.itm + == + :: + [%chapter *] + [%item (weld "|" name.itm) docs.itm]~ + :: + [%face *] + ?~ name.itm + ~ + [%item (weld "." name.itm) docs.itm]~ + == +:: +:: +join-items: combines two (unit items) together +++ join-items + |= [lhs=(unit item) rhs=(unit item)] + ^- (unit item) + ?~ lhs rhs + ?~ rhs lhs + `[%view (weld (item-as-overview lhs) (item-as-overview rhs))] +:: +:: contains arms using for printing doccords items ++| %printing +:: +print-item: prints a doccords item +++ print-item + |= =item + ~? >> debug %print-item + ^- (list sole-effect) + ?- item + [%view *] (print-overview item *(pair styl styl)) + [%core *] (print-core item) + [%arm *] (print-arm item) + [%chapter *] (print-chapter item) + [%face *] (print-face item) + == +:: +:: +print-core: renders documentation for a full core +++ print-core + |= =item + ^- (list sole-effect) + ?> ?=([%core *] item) + =+ [arms chapters]=(arm-and-chapter-overviews item) + =/ styles=(pair styl styl) [[`%br ~ `%b] [`%br ~ `%m]] + ;: weld + (print-header (weld "^" name.item) docs.item) + :: + [%txt ""]~ + :: + (print-signature ~(duck easy-print sut.item)) + :: + [%txt ""]~ + :: + ?~ arms + ~ + (print-overview [%view [%header `['arms:' ~] arms]~] styles) + :: + ?~ chapters + ~ + (print-overview [%view [%header `['chapters:' ~] chapters]~] styles) + :: + ?~ children.item + ~ + =/ child ?: ?=([%core *] u.children.item) + u.children.item(children ~) + ?: ?=([%face *] u.children.item) + u.children.item(children ~) + u.children.item + =+ compiled=(item-as-overview `child) + ?~ compiled + ~ + (print-overview [%view [%header `['compiled against: ' ~] [i.compiled]~]~] styles) + == +:: +:: +print-chapter: renders documentation for a single chapter +++ print-chapter + |= =item + ^- (list sole-effect) + ?> ?=([%chapter *] item) + ~? > debug %print-chapter + =/ styles=(pair styl styl) [[`%br ~ `%b] [`%br ~ `%m]] + ;: weld + (print-header (weld "|" name.item) docs.item) + :: + =+ arms=(arms-in-chapter sut.item tom.item) + ?~ arms + ~ + (print-overview [%view [%header `['arms:' ~] arms]~] styles) + == +:: +:: +print-signature: turns product of duck:easy-print into a (list sole-effect) +++ print-signature + |= =tank + ^- (list sole-effect) + =/ tan (wash [3 80] tank) + ?. (gte (lent tan) 3) + (turn tan |=(a=tape [%txt a])) + %+ weld + (turn (scag 3 tan) |=(a=tape [%txt a])) + (styled [[`%br ~ `%g] ' ...']~) +:: +:: +print-arm: renders documentation for a single arm in a core +++ print-arm + |= =item + ^- (list sole-effect) + ?> ?=([%arm *] item) + ~? >> debug %print-arm + ;: weld + (print-header (weld "+" name.item) adoc.item) + [%txt ""]~ + :: + (print-signature ~(duck easy-print (~(play ut sut.item) gen.item))) + :: + [%txt ""]~ + :: + ?~ pdoc.item + *(list sole-effect) + %- zing :~ (styled [[`%br ~ `%b] 'product:']~) + (print-header "" pdoc.item) + [%txt ""]~ + == + :: + ?~ cdoc.item + *(list sole-effect) + %- zing :~ (styled [[`%br ~ `%b] '$:']~) + (print-header "" cdoc.item) + == + == +:: +:: +print-face: renders documentation for a face +++ print-face + |= =item + ^- (list sole-effect) + ?> ?=([%face *] item) + ~? >> debug %print-face + ;: weld + (print-header (weld "." name.item) docs.item) + [%txt ""]~ + :: + ?~ children.item + ~ + (print-item u.children.item) + == +:: +:: +print-header: prints name and docs only +++ print-header + |= [name=tape doc=what] + ^- (list sole-effect) + ~? >> debug %print-header + ;: weld + (styled [[`%br ~ `%g] (crip name)]~) + ?~ doc *(list sole-effect) +:: (styled [[`%br ~ `%r] '(undocumented)']~) + :~ :- %tan + %- flop + ;: weld + [%leaf "{(trip p.u.doc)}"]~ + (print-sections q.u.doc) + == == + == +:: +:: +print-overview: prints summaries of several items +:: +:: the (pair styl styl) provides styles for each generation of child items +++ print-overview + |= [view=item styles=(pair styl styl)] + ?> ?=([%view *] view) + ~? >> debug %print-overview + =| out=(list sole-effect) + |- ^- (list sole-effect) + ?~ items.view out + =/ oitem i.items.view + ?- oitem + [%header *] + %= $ + items.view t.items.view + out ;: weld + out + ?~ doc.oitem ~ + (styled [p.styles (crip "{(trip p.u.doc.oitem)}")]~) + ^$(view [%view children.oitem]) + == == + :: + [%item *] + %= $ + items.view t.items.view + out ;: weld + out + (styled [q.styles (crip name.oitem)]~) + ?~ doc.oitem + %- styled + :~ [[`%br ~ `%r] '(undocumented)'] + [[~ ~ ~] ''] + == + ^- (list sole-effect) + [%tan [[%leaf ""] [%leaf "{(trip p.u.doc.oitem)}"] ~]]~ + == == + == +:: +:: +print-sections: renders a list of sections as tang +:: +:: prints the longform documentation +++ print-sections + |= sections=(list sect) + ^- tang + =| out=tang + |- + ?~ sections out + =. out + ;: weld + out + `tang`[%leaf ""]~ + (print-section i.sections) + == + $(sections t.sections) +:: +:: +print-section: renders a sect as a tang +++ print-section + |= section=sect + ^- tang + %+ turn section + |= =pica + ^- tank + ?: p.pica + [%leaf (trip q.pica)] + [%leaf " {(trip q.pica)}"] +:: +:: +styled: makes $sole-effects out of $styls and $cords +++ styled + |= [in=(list (pair styl cord))] + ^- (list sole-effect) + =| out=(list sole-effect) + |- + ?~ in out + =/ eff=styx [p.i.in [q.i.in]~]~ + %= $ + in t.in + out (snoc out [%klr eff]) + == +-- diff --git a/pkg/arvo/lib/hood/drum.hoon b/pkg/arvo/lib/hood/drum.hoon index 0ec1b4959..bec10edf0 100644 --- a/pkg/arvo/lib/hood/drum.hoon +++ b/pkg/arvo/lib/hood/drum.hoon @@ -1,34 +1,73 @@ /- *sole /+ sole |% -+$ state state-4 ++$ state state-6 +$ any-state $~ *state - $% state-4 + $% state-6 + state-5 + state-4 state-3 state-2 == ++$ state-6 [%6 pith-6] ++$ state-5 [%5 pith-5] +$ state-4 [%4 pith-4] +$ state-3 [%3 pith-3] +$ state-2 [%2 pith-2] :: ++$ pith-6 + $: bin=(map @ source) :: terminals + nob=(map @tas ?(%hush %soft %loud)) + == +:: ++$ pith-5 + $: bin=(map @ source) + == +:: +$ pith-4 $: eel=(set gill:gall) :: connect to - bin=(map bone source) :: terminals + bin=(map bone source-4) :: terminals == :: :: ++$ source-4 + $: edg=_80 + off=@ud + kil=kill + inx=@ud + fug=(map gill:gall (unit target-4)) + mir=(pair @ud stub) + == +:: ++$ target-4 + $: $= blt + %+ pair + (unit dill-belt-4) + (unit dill-belt-4) + ris=(unit search) + hit=history + pom=sole-prompt + inp=sole-command + == +:: ++$ dill-belt-4 + $% [%ctl p=@c] + [%met p=@c] + dill-belt:dill + == +:: ++ pith-3 :: $: eel=(set gill:gall) :: connect to ray=(map dude:gall desk) :: fur=(map dude:gall (unit *)) :: servers - bin=(map bone source) :: terminals + bin=(map bone source-4) :: terminals == :: :: :: ++ pith-2 :: $: eel=(set gill:gall) :: connect to ray=(set well:gall) :: fur=(map dude:gall (unit *)) :: servers - bin=(map bone source) :: terminals + bin=(map bone source-4) :: terminals == :: :: :: ++ kill :: kill ring @@ -42,6 +81,7 @@ off=@ud :: window offset kil=kill :: kill buffer inx=@ud :: ring index + eel=(set gill:gall) :: connect to fug=(map gill:gall (unit target)) :: connections mir=(pair @ud stub) :: mirrored terminal == :: @@ -65,51 +105,76 @@ pom=sole-prompt :: static prompt inp=sole-command :: input state == :: +:: -- :: :: :: :::: :: :: :: :: :: |% ++ en-gill :: gill to wire - |= gyl=gill:gall + |= [ses=@tas gyl=gill:gall] ^- wire - [%drum %phat (scot %p p.gyl) q.gyl ~] + [%drum %phat (scot %p p.gyl) q.gyl ?:(=(%$ ses) ~ [ses ~])] :: ++ de-gill :: gill from wire - |= way=wire ^- gill:gall - ?>(?=([@ @ ~] way) [(slav %p i.way) i.t.way]) + |= way=wire + ^- [@tas gill:gall] + ~| wire=way + ?> ?=([@ @ ?(~ [@ ~])] way) + :- ?~(t.t.way %$ i.t.t.way) + [(slav %p i.way) i.t.way] -- -:: TODO: remove .ost :: |= [hid=bowl:gall state] =* sat +<+ -=/ ost 0 -=+ (~(gut by bin) ost *source) +=/ ses=@tas %$ +=+ (~(gut by bin) ses *source) =* dev - =| moz=(list card:agent:gall) -=| biz=(list dill-blit:dill) +=| biz=(list blit:dill) ::TODO should be per-session |% ++ this . +++ klr klr:format +$ state ^state :: proxy +$ any-state ^any-state :: proxy -++ on-init (poke-link our.hid %dojo) +++ on-init + =+ out=(poke-link %$ our.hid %dojo) + out(- [hear-logs -.out]) +:: +++ prep + |= s=@tas + =. ses s + =. dev (~(gut by bin) ses *source) + this +:: +++ open + %+ cork de-gill + |= [s=@tas g=gill:gall] + [g (prep s)] +:: ++ diff-sole-effect-phat :: app event |= [way=wire fec=sole-effect] - =< se-abet =< se-view - =+ gyl=(de-gill way) + =< se-abet + =^ gyl this (open way) ?: (se-aint gyl) +>.$ (se-diff gyl fec) :: ++ peer :: |= pax=path + =? this ?=([%dill @ ~] pax) + (prep i.t.pax) ~| [%drum-unauthorized our+our.hid src+src.hid] :: ourself ?> (team:title our.hid src.hid) :: or our own moon - =< se-abet =< se-view + =< se-abet (se-text "[{}, driving {}]") :: +++ poke-dill + |= [ses=@tas bet=dill-belt:dill] + (poke-dill-belt:(prep ses) bet) +:: ++ poke-dill-belt :: terminal event |= bet=dill-belt:dill - =< se-abet =< se-view + =< se-abet (se-belt bet) :: ++ poke-dill-blit :: terminal output @@ -117,29 +182,34 @@ se-abet:(se-blit-sys bit) :: ++ poke-link :: connect app - |= gyl=gill:gall - =< se-abet =< se-view - (se-link gyl) + |= [ses=@tas gyl=gill:gall] + =< se-abet + (se-link:(prep ses) gyl) :: ++ poke-unlink :: disconnect app - |= gyl=gill:gall - =< se-abet =< se-view - (se-drop:(se-pull gyl) & gyl) + |= [ses=@ta gyl=gill:gall] + =< se-abet + (se-drop:(se-pull:(prep ses) gyl) & gyl) :: ++ poke-exit :: shutdown |= ~ se-abet:(se-blit-sys `dill-blit:dill`[%qit ~]) :: ++ poke-put :: write file - |= [pax=path txt=@] + |= [pax=path arg=$@(@ [@tas @])] + =^ txt +> ?@(arg [arg +>] [+.arg (prep -.arg)]) se-abet:(se-blit-sys [%sav pax txt]) :: :: +++ poke-knob + |= [tag=@tas lev=?(%hush %soft %loud)] + se-abet(nob (~(put by nob) tag lev)) +:: ++ poke |= [=mark =vase] ?> =(our src):hid ?+ mark ~|([%poke-drum-bad-mark mark] !!) - %drum-dill-belt =;(f (f !<(_+<.f vase)) poke-dill-belt) - %drum-dill-blit =;(f (f !<(_+<.f vase)) poke-dill-blit) + %dill-poke =;(f (f !<(_+<.f vase)) poke-dill) + %drum-knob =;(f (f !<(_+<.f vase)) poke-knob) %drum-exit =;(f (f !<(_+<.f vase)) poke-exit) %drum-link =;(f (f !<(_+<.f vase)) poke-link) %drum-put =;(f (f !<(_+<.f vase)) poke-put) @@ -148,19 +218,42 @@ :: ++ on-load |= [hood-version=@ud old=any-state] - =< se-abet =< se-view + =< se-abet =? old ?=(%2 -.old) [%4 [eel bin]:old] =? old ?=(%3 -.old) [%4 [eel bin]:old] + =? old ?=(%4 -.old) + |^ 5+(~(run by bin.old) source-4-to-5) + ++ source-4-to-5 + |= source-4 + ^- source + =; fug [edg off kil inx eel.old fug mir] + (~(run by fug) |=(t=(unit target-4) (bind t target-4-to-5))) + :: + ++ target-4-to-5 + |= t=target-4 + ^- target + :_ +.t + :- (bind p.blt.t belt-4-to-5) + (bind q.blt.t belt-4-to-5) + :: + ++ belt-4-to-5 + |= b=dill-belt-4 + ^- dill-belt:dill + ?. ?=(?(%ctl %met) -.b) b + [%mod -.b p.b] + -- :: - ?> ?=(%4 -.old) + =? moz ?=(%5 -.old) [hear-logs moz] + =? old ?=(%5 -.old) [%6 bin.old ~] + ?> ?=(%6 -.old) =. sat old - =. dev (~(gut by bin) ost *source) + =. dev (~(gut by bin) ses *source) this :: ++ reap-phat :: ack connect |= [way=wire saw=(unit tang)] - =< se-abet =< se-view - =+ gyl=(de-gill way) + =< se-abet + =^ gyl this (open way) ?~ saw (se-join gyl) :: Don't print stack trace because we probably just crashed to @@ -170,9 +263,9 @@ :: ++ take-coup-phat :: ack poke |= [way=wire saw=(unit tang)] - =< se-abet =< se-view + =< se-abet ?~ saw +> - =+ gyl=(de-gill way) + =^ gyl this (open way) ?: (se-aint gyl) +>.$ %- se-dump:(se-drop:(se-pull gyl) & gyl) :_ u.saw @@ -195,22 +288,36 @@ :: ++ quit-phat :: |= way=wire - =< se-abet =< se-view - =+ gyl=(de-gill way) + =< se-abet + =^ gyl this (open way) ~& [%drum-quit src.hid gyl] (se-drop %| gyl) +:: +++ hear-logs + `card:agent:gall`[%pass /drum/dill/logs %arvo %d %logs [~ ~]] +:: +++ take-arvo + |= [way=wire syn=sign-arvo] + ?> =(/dill/logs way) + ?> ?=(%logs +<.syn) + se-abet:(se-told:(prep %$) told.syn) :: :: :: :::: :: :: :: :: :: ++ se-abet :: resolve ^- (quip card:agent:gall state) - =. . se-subze:se-adze - :_ sat(bin (~(put by bin) ost dev)) + =. . se-view:se-subze:se-adze + :_ sat(bin (~(put by bin) ses dev)) ^- (list card:agent:gall) ?~ biz (flop moz) :_ (flop moz) - =/ =dill-blit:dill ?~(t.biz i.biz [%mor (flop biz)]) - [%give %fact ~[/drum] %dill-blit !>(dill-blit)] + =/ =blit:dill ?~(t.biz i.biz [%mor (flop biz)]) + ::TODO remove /drum after dill cleans up + ::TODO but once we remove it, the empty trailing segment of + :: /dill/[ses] would prevent outsiders from subscribing + :: to the default session... + =/ to=(list path) [/dill/[ses] ?~(ses ~[/drum] ~)] + [%give %fact to %dill-blit !>(blit)] :: ++ se-adze :: update connections ^+ . @@ -229,14 +336,14 @@ (se-peer gil) :: ++ se-subze :: downdate connections - =< .(dev (~(got by bin) ost)) - =. bin (~(put by bin) ost dev) + =< .(dev (~(got by bin) ses)) + =. bin (~(put by bin) ses dev) ^+ . %- ~(rep by bin) =< .(con +>) - |: $:,[[ost=bone dev=source] con=_.] ^+ con - =+ xeno=se-subze-local:%_(con ost ost, dev dev) - xeno(ost ost.con, dev dev.con, bin (~(put by bin) ost dev.xeno)) + |: $:,[[ses=@tas dev=source] con=_.] ^+ con + =+ xeno=se-subze-local:%_(con ses ses, dev dev) + xeno(ses ses.con, dev dev.con, bin (~(put by bin.xeno) ses dev.xeno)) :: ++ se-subze-local ^+ . @@ -251,7 +358,7 @@ ++ se-aint :: ignore result |= gyl=gill:gall ^- ? - ?. (~(has by bin) ost) & + ?. (~(has by bin) ses) & =+ gyr=(~(get by fug) gyl) |(?=(~ gyr) ?=(~ u.gyr)) :: @@ -281,6 +388,19 @@ ~| [inx=inx wag=wag fug=fug eel=eel] `(snag inx `(list gill:gall)`wag) :: +++ se-told :: render system output + |= =told:dill + ^+ +> + ?- -.told + %crud =/ lev (~(gut by nob) p.told %loud) + =? +>.$ !=(%hush lev) + (se-text "crud: %{(trip p.told)} event failed") + ?. =(%loud lev) +>.$ + (se-dump q.told) + %talk (se-dump (flop p.told)) ::NOTE +se-dump flops internally + %text (se-text p.told) + == +:: ++ se-belt :: handle input |= bet=dill-belt:dill ^+ +> @@ -289,7 +409,7 @@ [%cru *] (se-dump:(se-text (trip p.bet)) q.bet) [%hey *] +>(mir [0 ~]) :: refresh [%rez *] +>(edg (dec p.bet)) :: resize window - [%yow *] ~&([%no-yow -.bet] +>) + [%yow *] (se-link p.bet) == =+ gul=se-agon ?: |(?=(~ gul) (se-aint u.gul)) @@ -340,8 +460,23 @@ leaf+(weld (scag (sub edg 3) tape) "...") leaf+tape :: +++ se-blin :: print and newline + |= $= lin + $~ [%put ~] + $>(?(%put %klr) dill-blit:dill) + ^+ +> + :: newline means we need to redraw the prompt, + :: so update the prompt mirror accordingly. + :: + =. mir [0 ~] + ::TODO doing hops and wyps conditionally based on the mirror state seems + :: better, but doesn't cover edge cases. results in dojo's ">=" being + :: rendered alongside the prompt in scrollback, for example. + :: figure out a way to make that work! + (se-blit %mor [%hop 0] [%wyp ~] lin [%nel ~] ~) +:: ++ se-dump :: print tanks - |= tac=(list tank) + |= tac=tang ^+ +> =/ wol=wall (zing (turn (flop tac) |=(a=tank (~(win re a) [0 edg])))) @@ -350,7 +485,7 @@ ?. ((sane %t) (crip i.wol)) :: XX upstream validation ~& bad-text+<`*`i.wol> $(wol t.wol) - $(wol t.wol, +>.^$ (se-blit %out (tuba i.wol))) + $(wol t.wol, +>.^$ (se-blin %put (tuba i.wol))) :: ++ se-join :: confirm connection |= gyl=gill:gall @@ -378,20 +513,21 @@ +>(eel (~(put in eel) gyl)) :: ++ se-blit :: give output - |= bil=dill-blit:dill + |= bil=blit:dill +>(biz [bil biz]) :: ++ se-blit-sys :: output to system |= bil=dill-blit:dill ^+ +> - (se-emit %give %fact ~[/drum] %dill-blit !>(bil)) + ::TODO remove /drum after dill cleans up + (se-emit %give %fact ~[/drum /dill/[ses]] %dill-blit !>(bil)) :: ++ se-show :: show buffer, raw |= lin=(pair @ud stub) ^+ +> ?: =(mir lin) +> - =. +> ?:(=(p.mir p.lin) +> (se-blit %hop p.lin)) - =. +> ?:(=(q.mir q.lin) +> (se-blit %pom q.lin)) - +>(mir lin) + %- se-blit(mir lin) + ?: =(q.mir q.lin) [%hop p.lin] + mor+[[%hop 0] [%wyp ~] [%klr q.lin] [%hop p.lin] ~] :: ++ se-just :: adjusted buffer |= [pom=stub lin=(pair @ud (list @c))] @@ -429,22 +565,22 @@ ?. ((sane %t) (crip txt)) :: XX upstream validation ~& bad-text+<`*`txt> +> - (se-blit %out (tuba txt)) + (se-blin %put (tuba txt)) :: ++ se-poke :: send a poke |= [gyl=gill:gall par=cage] - (se-emit %pass (en-gill gyl) %agent gyl %poke par) + (se-emit %pass (en-gill ses gyl) %agent gyl %poke par) :: ++ se-peer :: send a peer |= gyl=gill:gall ~> %slog.0^leaf/"drum: link {<[p q]:gyl>}" - =/ =path /sole/(cat 3 'drum_' (scot %p our.hid)) + =/ =path (id-to-path:sole our.hid ses) %- se-emit(fug (~(put by fug) gyl ~)) - [%pass (en-gill gyl) %agent gyl %watch path] + [%pass (en-gill ses gyl) %agent gyl %watch path] :: ++ se-pull :: cancel subscription |= gyl=gill:gall - (se-emit %pass (en-gill gyl) %agent gyl %leave ~) + (se-emit %pass (en-gill ses gyl) %agent gyl %leave ~) :: ++ se-tame :: switch connection |= gyl=gill:gall @@ -469,7 +605,7 @@ ^+ +> (ta-poke %sole-action !>(act)) :: - ++ ta-id (cat 3 'drum_' (scot %p our.hid)) :: per-ship duct id + ++ ta-id [our.hid ses] :: per-ship-session id :: ++ ta-aro :: hear arrow |= key=?(%d %l %r %u) @@ -498,13 +634,19 @@ ?< ?=([?(%cru %hey %rez %yow) *] bet) :: target-specific =. blt [q.blt `bet] :: remember belt ?- bet + @ (ta-txt bet ~) [%aro *] (ta-aro p.bet) [%bac *] ta-bac - [%ctl *] (ta-ctl p.bet) [%del *] ta-del - [%met *] (ta-met p.bet) + [%hit *] (ta-hit +.bet) [%ret *] ta-ret [%txt *] (ta-txt p.bet) + :: + [%mod *] + ?+ mod.bet $(bet key.bet) + %ctl (ta-ctl key.bet) + %met (ta-met key.bet) + == == :: ++ ta-det :: send edit @@ -528,7 +670,7 @@ (ta-hom %del (dec pos.inp)) :: ++ ta-ctl :: hear control - |= key=@ud + |= key=bolt:dill ^+ +> =. ris ?.(?=(?(%g %r) key) ~ ris) ?+ key ta-bel @@ -538,7 +680,7 @@ %d ?^ buf.say.inp ta-del ?: =([our.hid %dojo] gyl) - +>(..ta (se-blit qit+~)) :: quit pier + +>(..ta (se-blit-sys %qit ~)) :: quit pier +>(..ta (se-klin gyl)) :: unlink app %e +>(pos.inp (lent buf.say.inp)) %f (ta-aro %r) @@ -549,7 +691,7 @@ ?: =(pos.inp len) ta-bel (ta-kil %r [pos.inp (sub len pos.inp)]) - %l +>(..ta (se-blit %clr ~)) + %l +>(..ta (se-blit(q.mir ~) %clr ~)) %n (ta-aro %d) %p (ta-aro %u) %r ?~ ris @@ -582,6 +724,14 @@ ta-bel (ta-hom %del pos.inp) :: + ++ ta-hit :: hear click + |= [x=@ud y=@ud] + ^+ +> + =/ pol=@ud + (lent-char:klr (make:klr cad.pom)) + =? x (lth x pol) pol + +>.$(pos.inp (min (sub x pol) (lent buf.say.inp))) + :: ++ ta-erl :: hear local error |= pos=@ud ta-bel(pos.inp (min pos (lent buf.say.inp))) @@ -593,14 +743,13 @@ ++ ta-fec :: apply effect |= fec=sole-effect ^+ +> - ?- fec + ?+ fec +>(..ta (se-blit fec)) [%bel *] ta-bel [%blk *] +> [%bye *] +>(..ta (se-klin gyl)) - [%clr *] +>(..ta (se-blit fec)) [%det *] (ta-got +.fec) [%err *] (ta-err p.fec) - [%klr *] +>(..ta (se-blit %klr (make:klr p.fec))) + [%klr *] +>(..ta (se-blin %klr (make:klr p.fec))) [%mor *] |- ^+ +>.^$ ?~ p.fec +>.^$ $(p.fec t.p.fec, +>.^$ ^$(fec i.p.fec)) @@ -608,10 +757,8 @@ [%pro *] (ta-pro +.fec) [%tab *] +>(..ta (se-tab p.fec)) [%tan *] +>(..ta (se-dump p.fec)) - [%sag *] +>(..ta (se-blit fec)) - [%sav *] +>(..ta (se-blit fec)) [%txt *] +>(..ta (se-text p.fec)) - [%url *] +>(..ta (se-blit fec)) + [%url *] +>(..ta (se-text:(se-blit fec) (trip p.fec))) == :: ++ ta-dog :: change cursor @@ -663,8 +810,8 @@ kil ?. ?& ?=(^ old.kil) ?=(^ p.blt) - ?| ?=([%ctl ?(%k %u %w)] u.p.blt) - ?=([%met ?(%d %bac)] u.p.blt) + ?| ?=([%mod %ctl ?(%k %u %w)] u.p.blt) + ?=([%mod %met ?(%d [%bac ~])] u.p.blt) == == %= kil :: prepend num +(num.kil) @@ -681,17 +828,18 @@ == :: ++ ta-met :: meta key - |= key=@ud + |= key=bolt:dill ^+ +> =. ris ~ ?+ key ta-bel - %dot ?. &(?=(^ old.hit) ?=(^ i.old.hit)) :: last "arg" from hist + %'.' ?. &(?=(^ old.hit) ?=(^ i.old.hit)) :: last "arg" from hist ta-bel =+ old=`(list @c)`i.old.hit =+ sop=(ta-jump(buf.say.inp old) %l %ace (lent old)) (ta-hom (cat:edit pos.inp (slag sop old))) :: - %bac ?: =(0 pos.inp) :: kill left-word + [%bac ~] + ?: =(0 pos.inp) :: kill left-word ta-bel =+ sop=(ta-pos %l %edg pos.inp) (ta-kil %l [(sub pos.inp sop) sop]) @@ -747,8 +895,8 @@ :: %y ?. ?& ?=(^ old.kil) :: rotate & yank ?=(^ p.blt) - ?| ?=([%ctl %y] u.p.blt) - ?=([%met %y] u.p.blt) + ?| ?=([%mod %ctl %y] u.p.blt) + ?=([%mod %met %y] u.p.blt) == == ta-bel =+ las=(lent ta-yan) @@ -926,82 +1074,4 @@ ?: |(?=(~ a) (alnm i.a)) i $(i +(i), a t.a) -- -:: -++ klr :: styx/stub engine - =, dill - |% - ++ make :: stub from styx - |= a=styx ^- stub - =| b=stye - %+ reel - |- ^- stub - %- zing %+ turn a - |= a=$@(@t (pair styl styx)) - ?@ a [b (tuba (trip a))]~ - ^$(a q.a, b (styd p.a b)) - :: - |= [a=(pair stye (list @c)) b=stub] - ?~ b [a ~] - ?. =(p.a p.i.b) [a b] - [[p.a (weld q.a q.i.b)] t.b] - :: - ++ styd :: stye from styl - |= [a=styl b=stye] ^+ b :: with inheritance - :+ ?~ p.a p.b - ?~ u.p.a ~ - (~(put in p.b) u.p.a) - (fall p.q.a p.q.b) - (fall q.q.a q.q.b) - :: - ++ lent-char - |= a=stub ^- @ - (roll (lnts-char a) add) - :: - ++ lnts-char :: stub pair tail lengths - |= a=stub ^- (list @) - %+ turn a - |= a=(pair stye (list @c)) - (lent q.a) - :: - ++ brek :: index + incl-len of - |= [a=@ b=(list @)] :: stub pair w= idx a - =| [c=@ i=@] - |- ^- (unit (pair @ @)) - ?~ b ~ - =. c (add c i.b) - ?: (gte c a) - `[i c] - $(i +(i), b t.b) - :: - ++ slag :: slag stub, keep stye - |= [a=@ b=stub] - ^- stub - =+ c=(lnts-char b) - =+ i=(brek a c) - ?~ i b - =+ r=(^slag +(p.u.i) b) - ?: =(a q.u.i) - r - =+ n=(snag p.u.i b) - :_ r :- p.n - (^slag (sub (snag p.u.i c) (sub q.u.i a)) q.n) - :: - ++ scag :: scag stub, keep stye - |= [a=@ b=stub] - ^- stub - =+ c=(lnts-char b) - =+ i=(brek a c) - ?~ i b - ?: =(a q.u.i) - (^scag +(p.u.i) b) - %+ welp - (^scag p.u.i b) - =+ n=(snag p.u.i b) - :_ ~ :- p.n - (^scag (sub (snag p.u.i c) (sub q.u.i a)) q.n) - :: - ++ swag :: swag stub, keep stye - |= [[a=@ b=@] c=stub] - (scag b (slag a c)) - -- -- diff --git a/pkg/arvo/lib/hood/helm.hoon b/pkg/arvo/lib/hood/helm.hoon index 3fb38c780..f40f18741 100644 --- a/pkg/arvo/lib/hood/helm.hoon +++ b/pkg/arvo/lib/hood/helm.hoon @@ -1,4 +1,3 @@ -/+ pill =* card card:agent:gall |% +$ state state-2 @@ -202,6 +201,10 @@ |= ships=(list ship) abet:(emit %pass /helm/prod %arvo %a %prod ships) :: +++ poke-ames-snub + |= ships=(list ship) + abet:(emit %pass /helm/snub %arvo %a %snub ships) +:: ++ poke-atom |= ato=@ =+ len=(scow %ud (met 3 ato)) @@ -230,13 +233,25 @@ |= veb=(list verb:ames) =< abet (emit %pass /helm %arvo %a %spew veb) :: +++ poke-gall-sift + |= dudes=(list dude:gall) =< abet + (emit %pass /helm %arvo %g %sift dudes) +:: +++ poke-gall-verb + |= veb=(list verb:gall) =< abet + (emit %pass /helm %arvo %g %spew veb) +:: ++ poke-ames-wake |= ~ =< abet (emit %pass /helm %arvo %a %stir '') :: -++ poke-knob - |= [error-tag=@tas level=?(%hush %soft %loud)] =< abet - (emit %pass /helm %arvo %d %knob error-tag level) +++ poke-ames-kroc + |= dry=? =< abet + (emit %pass /helm %arvo %a %kroc dry) +:: +++ poke-ames-cong + |= cong=[msg=@ud mem=@ud] =< abet + (emit %pass /helm %arvo %a %cong cong) :: ++ poke-serve |= [=binding:eyre =generator:eyre] =< abet @@ -252,6 +267,11 @@ =< abet (emit %pass /helm/cors/reject %arvo %e %reject-origin origin) :: +++ poke-doff + |= [dude=(unit dude:gall) ship=(unit ship)] + =< abet + (emit %pass /helm/doff %arvo %g %doff dude ship) +:: ++ poke |= [=mark =vase] ?> ?| ?=(%helm-hi mark) @@ -260,17 +280,22 @@ == ?+ mark ~|([%poke-helm-bad-mark mark] !!) %helm-ames-prod =;(f (f !<(_+<.f vase)) poke-ames-prod) + %helm-ames-snub =;(f (f !<(_+<.f vase)) poke-ames-snub) %helm-ames-sift =;(f (f !<(_+<.f vase)) poke-ames-sift) %helm-ames-verb =;(f (f !<(_+<.f vase)) poke-ames-verb) %helm-ames-wake =;(f (f !<(_+<.f vase)) poke-ames-wake) + %helm-ames-kroc =;(f (f !<(_+<.f vase)) poke-ames-kroc) + %helm-ames-cong =;(f (f !<(_+<.f vase)) poke-ames-cong) %helm-atom =;(f (f !<(_+<.f vase)) poke-atom) %helm-automass =;(f (f !<(_+<.f vase)) poke-automass) %helm-cancel-automass =;(f (f !<(_+<.f vase)) poke-cancel-automass) %helm-code =;(f (f !<(_+<.f vase)) poke-code) %helm-cors-approve =;(f (f !<(_+<.f vase)) poke-cors-approve) %helm-cors-reject =;(f (f !<(_+<.f vase)) poke-cors-reject) + %helm-doff =;(f (f !<(_+<.f vase)) poke-doff) + %helm-gall-sift =;(f (f !<(_+<.f vase)) poke-gall-sift) + %helm-gall-verb =;(f (f !<(_+<.f vase)) poke-gall-verb) %helm-hi =;(f (f !<(_+<.f vase)) poke-hi) - %helm-knob =;(f (f !<(_+<.f vase)) poke-knob) %helm-pans =;(f (f !<(_+<.f vase)) poke-pans) %helm-mass =;(f (f !<(_+<.f vase)) poke-mass) %helm-meld =;(f (f !<(_+<.f vase)) poke-meld) diff --git a/pkg/arvo/lib/hood/kiln.hoon b/pkg/arvo/lib/hood/kiln.hoon index c8edd21d7..5f37c9b11 100644 --- a/pkg/arvo/lib/hood/kiln.hoon +++ b/pkg/arvo/lib/hood/kiln.hoon @@ -1,23 +1,26 @@ /- *hood +/+ strandio =, clay =, space:userlib =, format =* dude dude:gall |% -+$ state state-9 -+$ state-9 [%9 pith-9] -+$ state-8 [%8 pith-9] -+$ state-7 [%7 pith-7] -+$ state-6 [%6 pith-6] -+$ state-5 [%5 pith-5] -+$ state-4 [%4 pith-4] -+$ state-3 [%3 pith-3] -+$ state-2 [%2 pith-2] -+$ state-1 [%1 pith-1] -+$ state-0 [%0 pith-0] ++$ state state-10 ++$ state-10 [%10 pith-10] ++$ state-9 [%9 pith-9] ++$ state-8 [%8 pith-9] ++$ state-7 [%7 pith-7] ++$ state-6 [%6 pith-6] ++$ state-5 [%5 pith-5] ++$ state-4 [%4 pith-4] ++$ state-3 [%3 pith-3] ++$ state-2 [%2 pith-2] ++$ state-1 [%1 pith-1] ++$ state-0 [%0 pith-0] +$ any-state $~ *state - $% state-9 + $% state-10 + state-9 state-8 state-7 state-6 @@ -29,12 +32,11 @@ state-0 == :: -+$ pith-9 - $: wef=(unit weft) - rem=(map desk per-desk) :: - syn=(map kiln-sync let=@ud) :: - ark=(map desk arak) :: - commit-timer=[way=wire nex=@da tim=@dr mon=term] :: ++$ pith-10 + $: rem=(map desk per-desk) + nyz=@ud + zyn=(map kiln-sync sync-state) + commit-timer=[way=wire nex=@da tim=@dr mon=term] :: map desk to the currently ongoing fuse request :: and the latest version numbers for beaks to fus=(map desk per-fuse) @@ -45,12 +47,12 @@ hxs=(map desk @ud) == :: -+$ pith-7 ++$ pith-9 $: wef=(unit weft) - rem=(map desk per-desk) :: - syn=(map kiln-sync let=@ud) :: - ark=(map desk arak-7) :: - commit-timer=[way=wire nex=@da tim=@dr mon=term] :: + rem=(map desk per-desk) + syn=(map kiln-sync let=@ud) + ark=(map desk arak-9) + commit-timer=[way=wire nex=@da tim=@dr mon=term] :: map desk to the currently ongoing fuse request :: and the latest version numbers for beaks to fus=(map desk per-fuse) @@ -59,10 +61,53 @@ :: ensure they're unique even when the same :: request is made multiple times. hxs=(map desk @ud) - == :: + == +:: +:: $rein-9: diff from desk manifest +:: +:: .liv: suspended? if suspended, no agents should run +:: .add: agents not in manifest that should be running +:: .sub: agents in manifest that should not be running +:: ++$ rein-9 + $: liv=_& + add=(set dude) + sub=(set dude) + == +:: ++$ pith-7 + $: wef=(unit weft) + rem=(map desk per-desk) + syn=(map kiln-sync let=@ud) + ark=(map desk arak-7) + commit-timer=[way=wire nex=@da tim=@dr mon=term] + :: map desk to the currently ongoing fuse request + :: and the latest version numbers for beaks to + fus=(map desk per-fuse) + :: used for fuses - every time we get a fuse we + :: bump this. used when calculating hashes to + :: ensure they're unique even when the same + :: request is made multiple times. + hxs=(map desk @ud) + == +:: ++$ arak-9 + $: rail=(unit rail-9) + rein=rein-9 + == +:: +++ rail-9 + $: publisher=(unit ship) + paused=? + =ship + =desk + =aeon + next=(list rung) + == +:: +$ arak-7 $: rail=(unit rail-7) - =rein + rein=rein-9 == :: +$ rail-7 @@ -89,7 +134,7 @@ hxs=(map desk @ud) == :: :: -+$ arak-6 [rail=rail-6 next=(list rung) =rein] ++$ arak-6 [rail=rail-6 next=(list rung) rein=rein-9] +$ rail-6 [paused=? =ship =desk =aeon] :: +$ pith-5 @@ -126,7 +171,7 @@ =desk =aeon next=(list rung) - =rein + rein=rein-9 == +$ pith-3 :: $: rem=(map desk per-desk) :: @@ -262,9 +307,20 @@ [%0 %leaf (weld "kiln: " mes)] :: ++ render - |= [mez=tape sud=desk who=ship syd=desk] + |= [mez=tape sud=desk who=ship syd=desk kid=(unit desk)] :^ %palm [" " ~ ~ ~] leaf+(weld "kiln: " mez) - ~[leaf+"from {}" leaf+"on {}" leaf+"to {}"] + :^ leaf+"from {}" leaf+"on {}" leaf+"to {}" + ?~ kid ~ + [leaf+"then {}" ~] +:: +++ sources + =/ zyns=(list [[syd=desk her=ship sud=desk] *]) ~(tap by zyn) + =| sources=(map desk [ship desk]) + |- ^+ sources + ?~ zyns + sources + =. sources (~(put by sources) -.i.zyns) + $(zyns t.zyns) :: ++ on-init =< abet @@ -277,26 +333,22 @@ =/ sop=ship (sein:title our now our) :: set up base desk :: - =. ..on-init abet:(install-local:vats %base) =? ..on-init ?=(?(%earl %duke %king) (clan:title our)) - abet:(install:vats %base sop %kids) - :: - :: watch for gall reloading - =. ..on-init abet:gall-lyv:vats + abet:init:(apex:(sync %base sop %kids) `%kids) :: install other desks and make them public :: =/ dez=(list desk) ~(tap in desks) |- ^+ ..on-init ?~ dez ..on-init =. ..on-init - abet:(install-local:vats i.dez) + (emit %pass /kiln/init-zest %arvo %c %zest i.dez %live) =. ..on-init %- emit :^ %pass /kiln/permission %arvo [%c %perm i.dez / %r `[%black ~]] =/ src (get-publisher our i.dez now) =? ..on-init &(?=(^ src) !=(our u.src)) - abet:(install:vats i.dez u.src i.dez) + abet:init:(sync i.dez u.src i.dez) $(dez t.dez) :: ++ on-load @@ -373,10 +425,10 @@ =? old ?=(%7 -.old) :- %8 =- +.old(ark -) - %- ~(gas by *(map desk arak)) + %- ~(gas by *(map desk arak-9)) %+ turn ~(tap by ark.old) |= [d=desk a=arak-7] - ^- [desk arak] + ^- [desk arak-9] :- d :_ rein.a ?~ rail.a ~ @@ -385,665 +437,86 @@ =? old ?=(%8 -.old) [%9 +.old] :: - ?> ?=(%9 -.old) + =^ cards-9=(list card:agent:gall) old + ?. ?=(%9 -.old) + `old + =/ syn=(set kiln-sync) + %- ~(gas in ~(key by syn.old)) + %+ murn ~(tap by ark.old) + |= [=desk =arak-9] + ?~ rail.arak-9 + ~ + ?: paused.u.rail.arak-9 + ~ + `u=[desk ship.u.rail.arak-9 desk.u.rail.arak-9] + =/ zet=(list [desk zest]) + %+ murn ~(tap by ark.old) + |= [=desk =arak-9] + ^- (unit [^desk zest]) + ?: liv.rein.arak-9 + `[desk %held] + ?~ rail.arak-9 + ~ + ?: paused.u.rail.arak-9 + ~ + `[desk %held] + :: + :_ [%10 |1.+.old(syn 0, ark ~)] + ;: weld + %+ turn zet + |= [=desk =zest] + [%pass /kiln/load-zest %arvo %c %zest desk zest] + :: + %+ turn ~(tap in syn) + |= k=kiln-sync + [%pass /kiln/load-sync %agent [our %hood] %poke %kiln-sync !>(k)] + :: + =/ ks ~(tap in syn) + |- ^- (list card:agent:gall) + ?~ ks + ~ + ?: =(%base syd.i.ks) + :_ ~ + :* %pass /kiln/load-kids %agent [our %hood] + %poke %kiln-kids !>([i.ks `%kids]) + == + $(ks t.ks) + == + :: + ?> ?=(%10 -.old) =. state old - :: - =? kiln (lth old-version %7) - abet:(install:vats %base our %base) - =? kiln ?=(^ old-ota) - abet:(install:vats %base [her sud]:u.old-ota) - =? kiln (lth old-version %7) - abet:gall-lyv:vats - :: kiln %7 had a bug where it failed to properly emit a +listen - :: due to an unexpected crash. here we detect the cause of the crash - :: (not-yet-installed desks) and emit the +listen anew to make sure we - :: stay aware of commits to base. - :: - =? kiln - ?& =(%8 old-version) - :: - %+ lien ~(tap by ark.old) - |= [d=desk *] - =- =(0 rev) - .^([rev=@ud @da] %cw /(scot %p our)/[d]/(scot %da now)) - == - take-commit:(abed:vats %base) - =. wef ~ - abet:kiln + abet:(emil cards-9) :: ++ on-peek |= =path ^- (unit (unit cage)) ?+ path [~ ~] - [%x %kiln %lag ~] ``loob+!>(.^(? //(scot %p our)//(scot %da now)/zen/lag)) + [%x %kiln %our ~] ``noun+!>(our) + [%x %kiln %lag ~] + ``loob+!>(.^(? //(scot %p our)//(scot %da now)/zen/lag)) :: - [%x %kiln %vat @ ~] - =* loc i.t.t.t.path - =/ ego (scot %p our) - =/ wen (scot %da now) - =/ rak=(unit arak) (~(get by ark) loc) - ?~ rak [~ ~] - =/ hog .^(@uv cz+~[ego loc wen]) - =/ cas .^(cass cw+~[ego loc wen]) - :^ ~ ~ %noun - !> ^- vat - [loc hog cas u.rak] - :: - [%x %kiln %vats ~] - :^ ~ ~ %kiln-vats - !> ^- (list vat) - =/ ego (scot %p our) - =/ wen (scot %da now) - %+ turn ~(tap by ark) - |= [loc=desk rak=arak] - =/ hog .^(@uv cz+~[ego loc wen]) - =/ cas .^(cass cw+~[ego loc wen]) - [loc hog cas rak] - :: - [%x %kiln %ark ~] ``noun+!>(ark) - [%x %kiln %our ~] ``noun+!>(our) [%x %kiln %base-hash ~] - =/ ver (mergebase-hashes our %base now (~(got by ark) %base)) + =/ ver (mergebase-hashes our %base now (~(got by sources) %base)) ``noun+!>(?~(ver 0v0 i.ver)) + :: + [%x %kiln %syncs ~] ``noun+!>(zyn) + [%x %kiln %sources ~] ``noun+!>(sources) + [%x %kiln %pikes ~] + =+ .^(=rock:tire %cx /(scot %p our)//(scot %da now)/tire) + :^ ~ ~ %kiln-pikes + !> ^- pikes + %- ~(rut by rock) + |= [=desk =zest wic=(set weft)] + ^- pike + =+ .^(hash=@uv %cz /(scot %p our)/[desk]/(scot %da now)) + =/ sync (~(get by sources) desk) + [sync hash zest wic] == :: -++ vats - |_ [loc=desk rak=arak] - ++ ral (need rail.rak) - ++ vats . - ++ abet - ~| [%uninitialized-desk loc] - ?< =(%$ loc) - kiln(ark (~(put by ark) loc rak)) - ++ abed - |= lac=desk - ~_ leaf/"kiln: {} not installed" - vats(loc lac, rak (~(got by ark) lac)) - :: - ++ here ?~ rail.rak "{} (local)" - "{} from {<[ship desk]:ral>}" - ++ make-wire |=(step=@tas /kiln/vats/[loc]/[step]) - ++ from-wire - |= =wire - ~| wire - ?> ?=([@ @ *] wire) - (abed i.wire) - :: - ++ emit |=(card:agent:gall vats(kiln (^emit +<))) - ++ emil |=((list card:agent:gall) vats(kiln (^emil +<))) - ++ give - |% - ++ snap [%give %fact ~[/kiln/vats] %kiln-vats-snap-0 !>(ark)] - ++ diff |=(d=^diff [%give %fact ~[/kiln/vats] %kiln-vats-diff-0 !>(d)]) - -- - ++ pass - |% - ++ pyre |=(=tang [%pass /kiln/vats %pyre tang]) - ++ find (warp %find [%sing %y ud+1 /]) - ++ sync-da (warp %sync [%sing %w da+now /]) - ++ sync-ud (warp %sync [%sing %w ud+aeon:ral /]) - ++ download (warp %download [%sing %v ud+aeon:ral /]) - ++ gall-lyv - =/ paths=(set [care:clay path]) - %- sy - :~ [%z /sys/hoon/hoon] - [%z /sys/arvo/hoon] - [%z /sys/lull/hoon] - [%z /sys/zuse/hoon] - [%z /sys/vane/gall/hoon] - == - %+ clay-card %gall-lyv - [%warp our %base ~ %mult da+now paths] - :: - ++ warp - |= [s=term r=rave] - (clay-card s %warp ship:ral desk:ral `r) - ++ merge-main - =/ germ (get-germ loc) - =/ =aeon (dec aeon:ral) - %+ clay-card %merge-main - [%merg loc ship:ral desk:ral ud+aeon germ] - ++ merge-kids - =/ germ (get-germ %kids) - =/ =aeon (dec aeon:ral) - %+ clay-card %merge-kids - [%merg %kids ship:ral desk:ral ud+aeon germ] - ++ listen - (clay-card %listen %warp our loc `[%next %z da+now /]) - ++ clay-card - |= [step=@tas =task:clay] - ^- card:agent:gall - [%pass (make-wire step) %arvo %c task] - ++ start-dude - |= =dude - ^- card:agent:gall - [%pass /kiln/vats/[loc]/jolt/[dude] %arvo %g %jolt loc dude] - ++ stop-dude - |= =dude - ^- card:agent:gall - [%pass /kiln/vats/[loc]/uninstall %arvo %g %idle dude] - -- - :: +uninstall: stop tracking apps on desk, and suspend apps - :: - ++ uninstall - |= lac=desk - ^+ kiln - ?: =(%base lac) - =- (^emit (pyre:pass leaf/- ~)) - "kiln: |uninstall: %base cannot be uninstalled" - ?. (~(has by ark) lac) - ~> %slog.(fmt "|uninstall: {} not installed, ignoring") - kiln - =. vats (abed lac) - ~> %slog.(fmt "uninstalling {here}") - =. vats stop-agents - kiln(ark (~(del by ark) lac)) - :: +install: set up desk sync to .lac to install all apps from [her rem] - :: - ++ install - |= [lac=desk her=ship rem=desk] - ^+ vats - =. loc lac - ?: =([her rem] [our lac]) - (install-local lac) - =/ got (~(get by ark) lac) - ?: =(`[her rem] got) - =. rak (need got) - ~> %slog.(fmt "already tracking {here:(abed lac)}, ignoring") - vats - =. rak [`[~ paused=| her rem *aeon next=~] rein:(fall got *arak)] - ~> %slog.(fmt "beginning install into {here}") - (emil find:pass listen:pass ~) - :: +install-local: install from a local desk, with no remote - :: - :: Also notify clients that the desk was installed. - :: - ++ install-local - |= lac=desk - ^+ vats - |^ ^+ vats - ?. (~(has by ark) lac) - go - =. vats (abed lac) - ?^ rail.rak - go - ~> %slog.(fmt "{} already installed locally, refreshing") - update-running-dudes - :: - ++ go - =. loc lac - =. rak *arak - ~> %slog.(fmt "installing {} locally") - =. vats update-running-dudes - (emil listen:pass (diff:give %commit lac rak) ~) - -- - :: +reset: resync after failure - :: - :: TODO: instead of jumping all the way back to find:pass, - :: which will end up skipping all the way until the latest - :: remote commit, increment the aeon so we skip only the problematic - :: commit and try the commit immediately after it. - :: - ++ reset - ^+ vats - ~> %slog.(fmt "resetting tracking for {here}") - =/ cad (diff:give %reset loc rak) - =/ rel ral - =. rail.rak `rel(aeon 0, next ~) - (emil find:pass cad ~) - :: +pause: stop syncing from upstream - :: - ++ pause - |= lac=desk - ^+ vats - =. vats (abed lac) - ?. is-tracking - ~> %slog.(fmt "{} already paused, ignoring") - vats - ~> %slog.(fmt "{} pausing updates") - =/ rel ral - =. rail.rak `rel(paused &, aeon 0, next ~) - vats - :: - :: +gall-lyv: watch gall source for reloading - ++ gall-lyv - =. vats (abed %base) - (emit gall-lyv:pass) - :: +remove-upstream: stop listening to an upstream for changes - :: - ++ remove-upstream - |= lac=desk - ^+ vats - =. vats (abed lac) - =. rail.rak ~ - vats - :: +resume: restart tracking from upstream - :: - :: TODO: check whether kelvin is legit - :: - ++ resume - |= lac=desk - ^+ vats - =. vats (abed lac) - ~> %slog. %- fmt - ?. paused:ral - "{} already tracking, ignoring" - "{} resuming updates" - =/ rel ral - =. rail.rak `rel(paused |) - reset - :: +suspend: shut down all agents, keep syncing - :: - ++ suspend - |= lac=desk - ^+ vats - =/ got (~(get by ark) lac) - ?: =(%base lac) - =- (emit (pyre:pass leaf/- ~)) - "kiln: suspend: %base cannot be suspended" - ?. (~(has by ark) lac) - ~> %slog.(fmt "suspend: {} not installed, ignoring") - vats - =. vats (abed lac) - =. liv.rein.rak | - =. vats stop-agents - (emit (diff:give %suspend loc rak)) - :: +revive: restart agents on a suspended desk - :: - ++ revive - |= lac=desk - ^+ vats - =. vats (abed lac) - =. liv.rein.rak & - =. vats update-running-dudes - (emit (diff:give %revive loc rak)) - :: +set-rein: adjust which agents are forced on or off - :: - ++ set-rein - |= [lac=desk new=rein] - ^+ vats - =. vats (abed lac) - =^ old rein.rak [rein.rak new] - ?+ [liv.old liv.new] !! - [%| %|] vats - [%| %&] (revive lac) - [%& %|] (suspend lac) - [%& %&] update-running-dudes - == - :: +bump: try to apply kernel kelvin upgrade - :: - :: Apply merges to revive faded agents on all desks. - :: If .force, suspends stale agents. Else, any stale desk - :: will cause a crash. - :: - ++ bump - |= [kel=weft except=(set desk) force=?] - ^+ kiln - =/ ded (find-blocked kel except) - =? kiln force (suspend-many ded) - ?: |(force =(~ ded)) - ?: !=(zuse+zuse kel) - (bump-one kel %base) - (bump-many (all-desks-but (~(uni in except) ded))) - =- (^emit (pyre:pass leaf/- ~)) - "kiln: desks blocked upgrade to {}: {}" - :: - ++ all-desks-but |=(not=(set desk) (~(dif in ~(key by ark)) not)) - :: - ++ find-blocked - |= [kel=weft except=(set desk)] - ^- (set desk) - (~(dif in (get-blockers kel)) (~(put in except) %base)) - :: - ++ suspend-many - |= dead=(set desk) - ^+ kiln - =/ ded ~(tap in dead) - |- ^+ kiln - ?~ ded kiln - $(ded t.ded, kiln abet:(suspend i.ded)) - :: - ++ bump-many - |= live=(set desk) - ^+ kiln - :: ensure %base is always reloaded first - :: - =/ liv - %+ sort ~(tap in live) - |= [a=desk b=desk] - ^- ? - ?: =(%base a) & - ?: =(%base b) | - (lte `@`a `@`b) - :: - |- ^+ kiln - ?~ liv kiln - $(liv t.liv, kiln (bump-one zuse+zuse i.liv)) - :: - ++ bump-one - |= [kel=weft =desk] - ^+ kiln - ~> %slog.(fmt "bump {} to {<[lal num]:kel>}") - =< abet ^+ vats - =. vats (abed desk) - =/ kul (read-kelvin-local our desk now) - ?~ kul - ~> %slog.(fmt "{here} not yet installed") - vats - ?: =(kel u.kul) - ~> %slog.(fmt "{here} already at {<[lal num]:kel>}") - update-running-dudes - =^ tem rail.rak (crank-next kel) - ?^ tem - (emit merge-main:pass) - =- (emit (pyre:pass leaf/- ~)) - "kiln: {here} killed upgrade to {<[lal num]:kel>}" - :: +stop-agents: internal helper to suspend agents on .loc - :: - :: Will not shut down %hood or %dojo. - :: - ++ stop-agents - ^+ vats - =/ ded (get-apps-live our loc now) - =. ded (skip ded |=(d=dude ?=(?(%hood %dojo) d))) - (stop-dudes ded) - :: - ++ take - |= [=wire syn=sign-arvo] - ^+ kiln - ?> ?=([@ @ *] wire) - ?: ?=(%jolt i.t.wire) - (take-onto wire syn) - ?: ?=(%listen i.t.wire) - (take-listen wire syn) - =< abet - =. vats (from-wire wire) - ?+ i.t.wire - ~> %slog.(fmt "vats-bad-take {}") - vats - %find (take-find syn) - %sync (take-sync syn) - %download (take-download syn) - %merge-main (take-merge-main syn) - %merge-kids (take-merge-kids syn) - %gall-lyv (take-gall-lyv syn) - == - :: - ++ take-find - |= syn=sign-arvo - ^+ vats - ?> ?=(%writ +<.syn) - ?. is-tracking - vats - ?~ p.syn - ~> %slog.(fmt "cancelled (1) install into {here}, aborting") - vats(ark (~(del by ark) loc)) - ~> %slog.(fmt "activated install into {here}") - (emit sync-da:pass) - :: - ++ take-sync - |= syn=sign-arvo - ^+ vats - ?> ?=(%writ +<.syn) - =* rit u.p.syn - ?. is-tracking - vats - ?~ p.syn - ~> %slog.(fmt "cancelled (1) install into {here}, retrying") - reset - =? rail.rak ?=(%w p.p.rit) `%*(. ral aeon ud:;;(cass:clay q.q.r.rit)) - ~> %slog.(fmt "downloading update for {here}") - (emit download:pass) - :: - ++ take-download - |= syn=sign-arvo - ^+ vats - ?> ?=(%writ +<.syn) - ?. is-tracking - vats - ?~ p.syn - ~> %slog.(fmt "cancelled (2) install into {here}, retrying") - reset - ~> %slog.(fmt "finished downloading update for {here}") - ?. (get-remote-diff our loc now [ship desk aeon]:ral) - ~> %slog.(fmt "remote is identical to {here}, skipping") - =. rail.rak `%*(. ral aeon +(aeon:ral)) - =. vats update-running-dudes - (emil sync-ud:pass (diff:give %commit loc rak) ~) - =/ old-weft `weft`[%zuse zuse] - =/ new-weft - ?: =(our ship:ral) - (need (read-kelvin-local our desk:ral now)) :: TODO error handling - (read-kelvin-foreign [ship desk aeon]:ral) - :: don't try to read from the local desk's bill file if - :: there are no commits to the local desk (aeon 0) - :: - =/ yon =<(ud .^(cass cw+/(scot %p our)/[loc]/(scot %da now))) - =? vats &(liv.rein.rak !=(0 yon)) - %- stop-dudes - =< idle - (adjust-dudes [our loc now] rein.rak) - =. rail.rak `%*(. ral aeon +(aeon:ral)) - |^ ^+ vats - ?: =(%base loc) - do-base - ?: (gth num.new-weft num.old-weft) - kelvin-retreat - ?: =(num.new-weft num.old-weft) - kelvin-same - kelvin-advance - :: - ++ kelvin-retreat - ^+ vats - ~> %slog.(fmt "cannot install {here}, old kelvin {}") - ~> %slog.(fmt "will retry at foreign kelvin {}") - =/ =diff [%block loc rak new-weft blockers=(sy %base ~)] - (emil sync-ud:pass (diff:give diff) ~) - :: - ++ kelvin-advance - ^+ vats - ~> %slog.(fmt "future version {}, enqueueing") - :: retry upgrade if not blocked anymore - =. rail.rak `%*(. ral next (snoc next:ral [(dec aeon:ral) new-weft])) - =. ark (~(put by ark) loc rak) - =/ =diff [%block loc rak new-weft blockers=(sy %base ~)] - =. vats (emil sync-ud:pass (diff:give diff) ~) - =/ base=arak (~(got by ark) %base) - ?~ rail.base - vats - =/ rel u.rail.base - ?. &(?=(^ next.rel) =(~ (get-blockers weft.i.next.rel))) - vats - ~> %slog.(fmt "unblocked system update, updating") - =. kiln (bump-one weft.i.next.rel %base) - vats - :: - ++ kelvin-same - ^+ vats - ~> %slog.(fmt "merging into {here}") - ?> ?=(^ rail.rak) - =. next.u.rail.rak ~ - (emil ~[merge-main sync-ud]:pass) - :: - ++ do-base - ^+ vats - =/ blockers - ?: =(new-weft old-weft) - ~ - (get-blockers new-weft) - :: - ?. =(~ blockers) - ~> %slog.(fmt "OTA blocked on {}") - =. rail.rak - `%*(. ral next (snoc next:ral [(dec aeon:ral) new-weft])) - =/ =diff [%block loc rak new-weft blockers] - (emil sync-ud:pass (diff:give diff) ~) - ~> %slog.(fmt "applying OTA to {here}, kelvin: {}") - ?> ?=(^ rail.rak) - =. next.u.rail.rak ~ - =. wef - ?: =(old-weft new-weft) ~ - `new-weft - (emil ~[merge-main sync-ud]:pass) - -- - :: - ++ take-listen - |= [=wire syn=sign-arvo] - ^+ kiln - ?> ?=([@ %writ ~ *] syn) - =/ lac=desk (head wire) - :: ignore spurious updates from clay on desks we've uninstalled - :: - ?. (~(has by ark) lac) - kiln - =. vats (from-wire wire) - take-commit - :: - ++ take-commit - ^+ kiln - =. kiln - =< abet - ~> %slog.(fmt "commit detected at {here}") - =. rail.rak - ?~ rail.rak ~ - `[(get-publisher our loc now) +.u.rail.rak] - =. vats (emil listen:pass (diff:give %commit loc rak) ~) - ?. liv.rein.rak - ~> %slog.(fmt "{} not running") - vats - update-running-dudes - ?. =(%base loc) - kiln - (bump-many (all-desks-but (get-unblockers ark))) - :: - ++ take-merge-main - |= syn=sign-arvo - ^+ vats - ?> ?=(%mere +<.syn) - ?: ?=([%| %ali-unavailable *] p.syn) - =+ "kiln: merge into {here} failed, maybe because sunk; restarting" - %- (slog leaf/- p.p.syn) - =. vats (emit (diff:give %merge-sunk loc rak p.p.syn)) - reset - ?: ?=(%| -.p.syn) - =+ "kiln: merge into {here} failed, waiting for next revision" - %- (slog leaf/- p.p.syn) - =. vats (emit (diff:give %merge-fail loc rak p.p.syn)) - vats - ~> %slog.(fmt "merge into {} succeeded") - ?. =(%base loc) - vats - ~> %slog.(fmt "merging %base into %kids") - (emit merge-kids:pass) - :: - ++ take-merge-kids - |= syn=sign-arvo - ^+ vats - ?> ?=(%mere +<.syn) - ?: ?=([%| %ali-unavailable *] p.syn) - ~> %slog.(fmt "OTA to %kids failed, maybe peer sunk; restarting") - =. vats (emit (diff:give %merge-sunk %kids rak p.p.syn)) - reset - ?- -.p.syn - %& ~> %slog.(fmt "OTA to %kids succeeded") - (emit (diff:give %commit %kids rak)) - %| ~> %slog.(fmt "OTA to %kids failed {}") - (emit (diff:give %merge-fail %kids rak p.p.syn)) - == - :: - ++ take-gall-lyv - |= syn=sign-arvo - ^+ vats - =. vats gall-lyv - =/ vets ~(tap in ~(key by ark)) - |- - ?~ vets vats - =. vats (abed i.vets) - =. vats update-running-dudes - $(vets t.vets) - :: - ++ take-onto - |= [=wire syn=sign-arvo] - ^+ kiln - =/ onto ?>(?=([%gall %onto *] syn) p.syn) - ?- -.onto - %& kiln - %| (mean p.onto) - == - :: - ++ update-running-dudes - ^+ vats - =/ local [our loc now] - =/ dif (adjust-dudes local rein.rak) - =. vats (start-dudes jolt.dif) - =. vats (stop-dudes idle.dif) - vats - :: - ++ start-dudes - |= daz=(list dude) - (emil (turn daz start-dude:pass)) - :: - ++ stop-dudes - |= daz=(list dude) - (emil (turn daz stop-dude:pass)) - :: +crank-next: pop stale items from .next until one matches - :: - ++ crank-next - |= new=weft - ^+ [match=*(unit rung) rail.rak] - ?~ rail.rak - ~| [%no-rail-for desk=loc] - !! - =/ rog next.u.rail.rak - =- [match `u.rail.rak(next next)] - |- ^- [match=(unit rung) next=(list rung)] - ?~ rog [~ next.u.rail.rak] - ?: =(new weft.i.rog) - [`i.rog t.rog] - $(rog t.rog) - :: - ++ is-tracking - ^- ? - ?~ rail.rak | - !paused.u.rail.rak - -- -:: +get-blockers: find desks that would block a kernel update -:: -++ get-blockers - |= kel=weft - ^- (set desk) - %- ~(gas in *(set desk)) - %+ murn ~(tap by ark) - |= [=desk =arak] - ?: =(%base desk) - ~ - ?. liv.rein.arak - ~ - ?: =(`kel (read-kelvin-local our desk now)) - ~ - ?~ rail.arak - `desk - ?: (lien next.u.rail.arak |=([* k=weft] =(k kel))) - ~ - `desk -:: +get-unblockers: find desks which shouldn't block a kernel upgrade -:: -++ get-unblockers - |= ark=(map desk arak) - =/ base=(set desk) (sy %base %kids ~) - %- ~(gas in base) - %+ murn ~(tap by ark) - |= [loc=desk ark=arak] - ^- (unit desk) - ?. liv.rein.ark `loc - ?~ rail.ark `loc - ?: paused.u.rail.ark `loc - ~ :: +get-germ: select merge strategy into local desk :: -:: If destination desk doesn't exist, need a %init merge. If this is -:: its first revision, it probably doesn't have a mergebase yet, so -:: use %take-that. +:: If destination desk doesn't exist, need a %init merge. Otherwise, +:: we just want what the remote has, so we use %only-that. :: ++ get-germ |= =desk @@ -1066,13 +539,13 @@ %kiln-gall-sear =;(f (f !<(_+<.f vase)) poke-gall-sear) %kiln-info =;(f (f !<(_+<.f vase)) poke-info) %kiln-install =;(f (f !<(_+<.f vase)) poke-install) + %kiln-kids =;(f (f !<(_+<.f vase)) poke-kids) %kiln-label =;(f (f !<(_+<.f vase)) poke-label) %kiln-merge =;(f (f !<(_+<.f vase)) poke-merge) %kiln-mount =;(f (f !<(_+<.f vase)) poke-mount) %kiln-nuke =;(f (f !<(_+<.f vase)) poke-nuke) %kiln-pause =;(f (f !<(_+<.f vase)) poke-pause) %kiln-permission =;(f (f !<(_+<.f vase)) poke-permission) - %kiln-resume =;(f (f !<(_+<.f vase)) poke-resume) %kiln-revive =;(f (f !<(_+<.f vase)) poke-revive) %kiln-rein =;(f (f !<(_+<.f vase)) poke-rein) %kiln-rm =;(f (f !<(_+<.f vase)) poke-rm) @@ -1080,7 +553,6 @@ %kiln-suspend =;(f (f !<(_+<.f vase)) poke-suspend) %kiln-sync =;(f (f !<(_+<.f vase)) poke-sync) %kiln-syncs =;(f (f !<(_+<.f vase)) poke-syncs) - %kiln-track =;(f (f !<(_+<.f vase)) poke-track) %kiln-uninstall =;(f (f !<(_+<.f vase)) poke-uninstall) %kiln-unmount =;(f (f !<(_+<.f vase)) poke-unmount) %kiln-unsync =;(f (f !<(_+<.f vase)) poke-unsync) @@ -1098,14 +570,28 @@ (emit %pass way.commit-timer %arvo %b [%wait nex.commit-timer]) :: ++ poke-bump - |= [except=(set desk) force=?] - =/ =arak - (~(got by ark) %base) - =/ kel=weft - ?~ rail.arak zuse+zuse - ?~ next.u.rail.arak zuse+zuse - weft.i.next.u.rail.arak - abet:(bump:vats kel except force) + |= ~ + =< abet + =+ .^(=rock:tire %cx /(scot %p our)//(scot %da now)/tire) + =/ wic + %+ sort ~(tap by wic:(~(got by rock) %base)) + |= [[* a=@ud] [* b=@ud]] + (gth a b) + =. wic (skip wic |=([* a=@ud] (gte a zuse))) + ?~ wic + %- (slog 'kiln: %base already up-to-date' ~) + ..abet + =/ kel i.wic + %- emil + =/ cards + %+ murn ~(tap by rock) + |= [=desk =zest wic=(set weft)] + ?: |(=(%base desk) !?=(%live zest) (~(has in wic) kel)) + ~ + `u=[%pass /kiln/bump/[desk] %arvo %c %zest desk %held] + ?~ cards + [%pass /kiln/bump/wick %arvo %c %wick ~]~ + cards :: ++ poke-cancel |= a=@tas @@ -1202,7 +688,31 @@ :: ++ poke-install |= [loc=desk her=ship rem=desk] - abet:abet:(install:vats +<) + =+ .^(=rock:tire %cx /(scot %p our)//(scot %da now)/tire) + =/ =zest + ?~ got=(~(get by rock) loc) + %dead + zest.u.got + =. zyn + ?~ got=(~(get by sources) loc) + zyn + (~(del by zyn) loc u.got) + =? ..abet ?=(%dead zest) + (emit %pass /kiln/install %arvo %c %zest loc ?:(=(our her) %live %held)) + ?: (~(has by zyn) loc her rem) + abet:(spam (render "already syncing" loc her rem ~) ~) + ?: =([our loc] [her rem]) + abet + =/ sun (sync loc her rem) + ~> %slog.(fmt "beginning install into {here:sun}") + =< abet:abet:init + ?: =(%base loc) + (apex:sun `%kids) + sun +:: +++ poke-kids + |= [hos=kiln-sync nex=(unit desk)] + abet:abet:(apex:(sync hos) nex) :: ++ poke-label |= [syd=desk lab=@tas aey=(unit aeon)] @@ -1233,7 +743,9 @@ :: ++ poke-pause |= =desk - abet:abet:(pause:vats desk) + ?~ got=(~(get by sources) desk) + abet:(spam leaf+"desk not installed: {}" ~) + (poke-unsync desk u.got) :: ++ poke-permission |= [syd=desk pax=path pub=?] @@ -1244,23 +756,27 @@ :: ++ poke-rein |= [=desk =rein] - abet:abet:(set-rein:vats +<) -:: -++ poke-resume - |= =desk - abet:abet:(resume:vats desk) + abet:(emit %pass /kiln/rein %arvo %c %rein desk rein) :: ++ poke-revive |= =desk - abet:abet:(revive:vats desk) + abet:(emit %pass /kiln/revive %arvo %c %zest desk %live) :: ++ poke-rm |= a=path + =| c=(list (unit toro)) + %+ poke-info "removed: {}" + =- %+ roll - + |= [a=(unit toro) b=(unit toro)] + (clap a b furl) + |- ^- (list (unit toro)) =+ b=.^(arch %cy a) - ?~ fil.b - =+ ~[leaf+"No such file:" leaf+"{}"] - abet:(spam -) - (poke-info "removed" `(fray a)) + ?: ?=([^ ~] b) (snoc c `(fray a)) + =? c ?=(^ fil.b) (snoc c `(fray a)) + %- zing + %+ turn ~(tap by dir.b) + |= [kid=@ta ~] + ^$(a (weld a /[kid])) :: ++ poke-schedule |= [where=path tym=@da eve=@t] @@ -1271,31 +787,36 @@ :: ++ poke-suspend |= =desk - abet:abet:(suspend:vats desk) + abet:(emit %pass /kiln/suspend %arvo %c %zest desk %dead) :: ++ poke-sync |= hos=kiln-sync - ?: (~(has by syn) hos) - abet:(spam (render "already syncing" [sud her syd]:hos) ~) - abet:abet:start-sync:(auto hos) + ?: (~(has by zyn) hos) + abet:(spam (render "already syncing" [sud her syd ~]:hos) ~) + ~> %slog.(fmt "beginning sync into {} from {}/{}") + abet:abet:init:(sync hos) :: ++ poke-syncs :: print sync config |= ~ =< abet %- spam - ?: =(0 ~(wyt by syn)) + ?: =(0 ~(wyt by zyn)) [%leaf "no syncs configured"]~ - %+ turn ~(tap in ~(key by syn)) - |=(a=kiln-sync (render "sync configured" [sud her syd]:a)) -:: -++ poke-track - |= hos=kiln-sync - ?: (~(has by syn) hos) - abet:(spam (render "already tracking" [sud her syd]:hos) ~) - abet:abet:start-track:(auto hos) + %+ turn ~(tap by zyn) + |= [kiln-sync sync-state] + (render "sync configured" sud her syd kid) :: ++ poke-uninstall |= loc=desk - abet:(uninstall:vats +<) + =+ .^(=rock:tire %cx /(scot %p our)//(scot %da now)/tire) + ?~ got=(~(get by rock) loc) + abet:(spam leaf+"desk does not exist: {}" ~) + ?: =(+<:got %dead) + abet:(spam leaf+"desk not installed: {}" ~) + ~> %slog.(fmt "uninstalling {}") + =. ..on-init (emit %pass /kiln/uninstall %arvo %c %zest loc %dead) + ?~ sync=(~(get by sources) loc) + abet + (poke-unsync loc u.sync) :: ++ poke-unmount |= mon=kiln-unmount @@ -1307,26 +828,33 @@ abet:(emit %pass /unmount-beam %arvo %c [%ogre [[p q r] s]:u.bem]) abet:(emit %pass /unmount-point %arvo %c [%ogre mon]) :: +:: Don't need to cancel anything because new syncs will get a new nonce +:: ++ poke-unsync |= hus=kiln-unsync - ?. (~(has by syn) hus) - abet:(spam (render "not syncing" [sud her syd]:hus) ~) - %* . abet:abet:stop:(auto hus) - syn (~(del by syn) hus) - == + ?~ got=(~(get by zyn) hus) + abet:(spam (render "not syncing" [sud her syd ~]:hus) ~) + =. zyn (~(del by zyn) hus) + abet:(spam (render "cancelling sync" sud.hus her.hus syd.hus kid.u.got) ~) :: +peer: handle %watch :: ++ peer |= =path ?> (team:title our src) + ?: =(0 1) abet :: avoid mint-vain ?+ path ~|(kiln-path/path !!) [%vats ~] - abet(moz :_(moz [%give %fact ~ %kiln-vats-snap-0 !>(ark)])) + (mean leaf+"kiln: old subscription to /kiln/vats failed" ~) == :: ++ take-agent |= [=wire =sign:agent:gall] - ?+ wire ~|([%kiln-bad-take-agent wire -.sign] !!) + ?+ wire + ?: ?=(%poke-ack -.sign) + ~? ?=(^ p.sign) [%kiln-poke-nack u.p.sign] + abet + ~|([%kiln-bad-take-agent wire -.sign] !!) + :: [%fancy *] ?> ?=(%poke-ack -.sign) (take-coup-fancy t.wire p.sign) @@ -1343,16 +871,15 @@ :: ++ take-arvo |= [=wire =sign-arvo] + ^+ abet ?- wire - [%sync %merg *] %+ take-mere-sync t.t.wire - ?>(?=(%mere +<.sign-arvo) +>.sign-arvo) - [%find-ship *] %+ take-writ-find-ship t.wire - ?>(?=(%writ +<.sign-arvo) +>.sign-arvo) - [%sync *] %+ take-writ-sync t.wire - ?>(?=(%writ +<.sign-arvo) +>.sign-arvo) + [%sync %merg *] abet + [%find-ship *] abet + [%sync *] abet + [%zinc *] (take-sync t.wire sign-arvo) [%autocommit *] %+ take-wake-autocommit t.wire ?>(?=(%wake +<.sign-arvo) +>.sign-arvo) - [%vats *] abet:(take:vats t.wire sign-arvo) + [%vats *] abet [%fuse-request @tas *] =/ f (fuzz i.t.wire now) ?~ f @@ -1371,10 +898,8 @@ * ?+ +<.sign-arvo ((slog leaf+"kiln: strange card {<+<.sign-arvo wire>}" ~) abet) - %done %+ done wire - ?>(?=(%done +<.sign-arvo) +>.sign-arvo) - %mere %+ take-mere wire - ?>(?=(%mere +<.sign-arvo) +>.sign-arvo) + %done (done wire +>.sign-arvo) + %mere (take-mere wire +>.sign-arvo) == == ++ take |=(way=wire ?>(?=([@ ~] way) (work i.way))) :: general handler @@ -1398,42 +923,6 @@ ~? ?=(^ saw) [%kiln-spam-lame u.saw] abet :: -++ take-mere-sync :: - |= [way=wire mes=(each (set path) (pair term tang))] - ?> ?=([@ @ @ *] way) - =/ hos=kiln-sync - :* syd=(slav %tas i.way) - her=(slav %p i.t.way) - sud=(slav %tas i.t.t.way) - == - ?. (~(has by syn) hos) - abet - abet:abet:(mere:(auto hos) mes) -:: -++ take-writ-find-ship :: - |= [way=wire rot=riot] - ?> ?=([@ @ @ *] way) - =/ hos=kiln-sync - :* syd=(slav %tas i.way) - her=(slav %p i.t.way) - sud=(slav %tas i.t.t.way) - == - ?. (~(has by syn) hos) - abet - abet:abet:(take-find-ship:(auto hos) rot) -:: -++ take-writ-sync :: - |= [way=wire rot=riot] - ?> ?=([@ @ @ *] way) - =/ hos=kiln-sync - :* syd=(slav %tas i.way) - her=(slav %p i.t.way) - sud=(slav %tas i.t.t.way) - == - ?. (~(has by syn) hos) - abet - abet:abet:(writ:(auto hos) rot) -:: ++ take-wake-autocommit |= [way=wire error=(unit tang)] ?^ error @@ -1568,112 +1057,160 @@ u.let -- :: -++ auto +++ take-sync + |= [=wire =sign-arvo] + ?> ?=([@ @ @ *] wire) + =* syd i.wire + =/ her (slav %p i.t.wire) + =* sud i.t.t.wire + ?. (~(has by zyn) syd her sud) + abet + abet:abet:(take:(sync syd her sud) t.t.t.wire sign-arvo) +:: +++ sync |= kiln-sync - =+ (~(gut by syn) [syd her sud] let=*@ud) + =/ got (~(get by zyn) syd her sud) + =+ `sync-state`(fall got [(scot %uv nyz) ~ *@ud]) + =? nyz ?=(~ got) +(nyz) |% - ++ abet - ..auto(syn (~(put by syn) [syd her sud] let)) + ++ abet ..sync(zyn (~(put by zyn) [syd her sud] nun kid let)) + ++ apex |=(nex=(unit desk) ..abet(kid nex)) + ++ emit |=(card:agent:gall ..abet(kiln (^emit +<))) + ++ emil |=((list card:agent:gall) ..abet(kiln (^emil +<))) + ++ here "{} from {}/{}" + ++ ware + |= =wire + [%kiln %zinc syd (scot %p her) sud nun wire] + ++ lard + |= [=wire =shed:khan] + (emit %pass (ware wire) %arvo %k %lard %base shed) + ++ merg + |= [=wire =desk] + %: emit + %pass (ware wire) %arvo %c + %merg desk her sud + ud+(dec let) (get-germ desk) + == :: - ++ blab - |= new=(list card:agent:gall) - ^+ +> - +>.$(moz (welp new moz)) + :: (re)Start a sync from scratch by finding what version the source + :: desk is at :: - ++ warp - |= [=wire =ship =riff] - (blab [%pass wire %arvo %c [%warp ship riff]] ~) + ++ init + ^+ ..abet + =. let 0 + %+ lard /init + =/ m (strand:rand ,vase) + ;< =riot:clay bind:m (warp:strandio her sud ~ %sing %y ud+1 /) + ?> ?=(^ riot) + ~> %slog.(fmt "activated install into {here}") + ;< now=@da bind:m get-time:strandio + ;< =riot:clay bind:m (warp:strandio her sud ~ %sing %w da+now /) + ?> ?=(^ riot) + =+ !<(=cass:clay q.r.u.riot) + (pure:m !>(ud.cass)) :: - ++ spam |*(* %_(+> ..auto (^spam +<))) - ++ stop - => (spam (render "ended autosync" sud her syd) ~) - =/ =wire /kiln/sync/[syd]/(scot %p her)/[sud] - (warp wire her sud ~) - :: XX duplicate of start-sync? see |track + :: Listen for the next revision, and download it :: - ++ start-track - => (spam (render "activated track" sud her syd) ~) - =. let 1 - =/ =wire /kiln/sync/[syd]/(scot %p her)/[sud] - (warp wire her sud `[%sing %y ud+let /]) + ++ next + ^+ ..abet + %+ lard /next + =/ m (strand:rand ,vase) + ;< =riot:clay bind:m (warp:strandio her sud ~ %sing %w ud+let /) + ?> ?=(^ riot) + ~> %slog.(fmt "downloading update for {here}") + ;< =riot:clay bind:m (warp:strandio her sud ~ %sing %v ud+let /) + ?> ?=(^ riot) + (pure:m !>(%done)) :: - ++ start-sync - => (spam (render "finding ship and desk" sud her syd) ~) - =/ =wire /kiln/find-ship/[syd]/(scot %p her)/[sud] - (warp wire her sud `[%sing %y ud+1 /]) + :: Main control router :: - ++ take-find-ship - |= rot=riot - => (spam (render "activated sync" sud her syd) ~) - =/ =wire /kiln/sync/[syd]/(scot %p her)/[sud] - (warp wire her sud `[%sing %w [%da now] /]) + :: NB: %next, %main, and %kids are conceptually a single state with a + :: single error handling mechanism (move on to the next version). We + :: cannot combine them into a single lard because when you update + :: main you may update spider, and in that case all active threads + :: are killed, which would stop us from continuing that thread. + :: Instead, we do the merges to syd and kid explicitly. :: - ++ writ - |= rot=riot - ?~ rot - =. +>.$ - %^ spam - leaf+"sync cancelled, retrying" - (render "on sync" sud her syd) - ~ - start-sync - =. let ?. ?=(%w p.p.u.rot) let ud:;;(cass:clay q.q.r.u.rot) - =/ =wire /kiln/sync/merg/[syd]/(scot %p her)/[sud] - :: germ: merge mode for sync merges - :: - :: Initial merges from any source must use the %init germ. - :: Subsequent merges may use any germ, but if the source is - :: a remote ship with which we have not yet merged, we won't - :: share a merge-base commit and all germs but %only-that will - :: fail. - :: - :: We want to always use %only-that for the first remote merge. - :: But we also want local syncs (%base to %base or %kids) to - :: succeed after that first remote sync. To accomplish both we - :: simply use %only-that for the first three sync merges. (The - :: first two are from the pill.) - :: - =/ =germ - =/ =cass - .^(cass:clay %cw /(scot %p our)/[syd]/(scot %da now)) - ?: =(0 ud.cass) + ++ take + |= [=wire =sign-arvo] + ^+ ..abet + ?> ?=([@ @ *] wire) + ?. =(nun i.wire) + ..abet + ?+ i.t.wire + ~> %slog.(fmt "sync-bad-take {}") + ..abet %init - ?:((gth 2 ud.cass) %only-that %mate) - =< %- spam - ?: =(our her) ~ - [(render "beginning sync" sud her syd) ~] - (blab [%pass wire %arvo %c [%merg syd her sud ud+let germ]] ~) - :: - ++ mere - |= mes=(each (set path) (pair term tang)) - ?: ?=([%| %ali-unavailable *] mes) - =. +>.$ - %^ spam - leaf+"merge cancelled, maybe because sunk; restarting" - (render "on sync" sud her syd) - ~ - start-sync:stop - =. let +(let) - =. +>.$ - %- spam - ?: ?=(%& -.mes) - [(render "sync succeeded" sud her syd) ~] - ?+ p.p.mes - :* (render "sync failed" sud her syd) - leaf+"please manually merge the desks with" - leaf+"|merge %{(trip syd)} {(scow %p her)} %{(trip sud)}" - leaf+"" - leaf+"error code: {}" - q.p.mes - == + ?. =(0 let) + ~> %slog.(fmt "sync-bad-stage {} {}") + ..abet + ?> ?=(%arow +<.sign-arvo) + ?: ?=(%| -.p.sign-arvo) + ~> %slog.(fmt "activation failed into {here}; retrying sync") + %- (slog p.p.sign-arvo) + init + :: Now that we know the revision, start main download loop :: - %no-ali-disc - :~ (render "sync activated" sud her syd) - leaf+"note: blank desk {} on {}" - == + =. let !<(@ud q.p.p.sign-arvo) + next + :: + %next + ?> ?=(%arow +<.sign-arvo) + ?: ?=(%| -.p.sign-arvo) + :: ~> %slog.(fmt "download failed into {here}; retrying sync") + :: %- (slog p.p.sign-arvo) + init + :: + ~> %slog.(fmt "finished downloading update for {here}") + =. let +(let) + :: If nothing changed, just ensure %kids is up-to-date and advance + :: + ?. (get-remote-diff our syd now [her sud (dec let)]) + =< next + ?~ kid + ~> %slog.(fmt "remote is identical to {here}, skipping") + ..abet + ?. (get-remote-diff our u.kid now [her sud (dec let)]) + ~> %slog.(fmt "remote is identical to {here}, skipping") + ..abet + ~> %slog.(fmt "remote is identical to {here}, merging into {}") + (merg /kids u.kid) + :: Else start merging, but also immediately start listening to + :: the next revision. Now, all errors should no-op -- we're + :: already waiting for the next revision. + :: + =. ..abet (merg /main syd) + next + :: + %main + ?> ?=(%mere +<.sign-arvo) + ?: ?=(%| -.p.sign-arvo) + =+ "kiln: merge into {here} failed, waiting for next revision" + %- (slog leaf/- p.p.sign-arvo) + ..abet + ~> %slog.(fmt "merge into {} succeeded") + :: If we have a kids desk parameter, merge into that + :: + ?~ kid + ..abet + ~> %slog.(fmt "kids merge into {}") + (merg /kids u.kid) + :: + %kids + ?> ?=(%mere +<.sign-arvo) + ?~ kid + ..abet + :: Just notify; we've already started listening for the next + :: version + :: + ?- -.p.sign-arvo + %& ~> %slog.(fmt "kids merge to {} succeeded") + ..abet + %| ~> %slog.(fmt "kids merge to {} failed") + %- (slog p.p.sign-arvo) + ..abet == - =/ =wire /kiln/sync/[syd]/(scot %p her)/[sud] - (warp wire her sud `[%sing %y ud+let /]) + == -- :: ++ work :: state machine diff --git a/pkg/arvo/lib/pprint.hoon b/pkg/arvo/lib/pprint.hoon index 310c0f640..3eab077ad 100644 --- a/pkg/arvo/lib/pprint.hoon +++ b/pkg/arvo/lib/pprint.hoon @@ -632,6 +632,7 @@ [%atom *] (cat 3 '@' p.p.spec) == %dbug $(spec q.spec) + %gist $(spec q.spec) %leaf =+((scot p.spec q.spec) ?:(=('~' -) - (cat 3 '%' -))) %like tree/[[`[':' ~] ~] (turn `(list wing)`+.spec wing-to-plum)] %loop (cat 3 '$' p.spec) diff --git a/pkg/arvo/lib/test/ames-gall.hoon b/pkg/arvo/lib/test/ames-gall.hoon new file mode 100644 index 000000000..6f0af1a12 --- /dev/null +++ b/pkg/arvo/lib/test/ames-gall.hoon @@ -0,0 +1,204 @@ +/+ *test, test-pub, test-sub +/= ames-raw /sys/vane/ames +/= gall-raw /sys/vane/gall +:: +=/ ames-bunt (ames-raw ~zod) +=/ gall-bunt (gall-raw ~zod) +:: basic helpers +:: +|% +++ make-gall + |= =ship + =/ gall-pupa (gall-raw ship) + =/ gall-core (gall-pupa now=~1111.1.1 eny=`@`0xdead.beef scry=*roof) + =+ [out adult]=(call:gall-core duct=~[/init] dud=~ task=[%init ~]) + adult +:: +++ ames-nec-bud + :: create ~nec + :: + =/ nec (ames-raw ~nec) + =. now.nec ~1111.1.1 + =. eny.nec 0xdead.beef + =. life.ames-state.nec 2 + =. rof.nec |=(* ``[%noun !>(*(list turf))]) + =. crypto-core.ames-state.nec (pit:nu:crub:crypto 512 (shaz 'nec')) + =/ nec-pub pub:ex:crypto-core.ames-state.nec + =/ nec-sec sec:ex:crypto-core.ames-state.nec + :: create ~bud + :: + =/ bud (ames-raw ~bud) + =. now.bud ~1111.1.1 + =. eny.bud 0xbeef.dead + =. life.ames-state.bud 3 + =. rof.bud |=(* ``[%noun !>(*(list turf))]) + =. crypto-core.ames-state.bud (pit:nu:crub:crypto 512 (shaz 'bud')) + =/ bud-pub pub:ex:crypto-core.ames-state.bud + =/ bud-sec sec:ex:crypto-core.ames-state.bud + :: + =/ nec-sym (derive-symmetric-key:ames-raw bud-pub nec-sec) + =/ bud-sym (derive-symmetric-key:ames-raw nec-pub bud-sec) + ?> =(nec-sym bud-sym) + :: tell ~nec about ~bud + :: + =. peers.ames-state.nec + %+ ~(put by peers.ames-state.nec) ~bud + =| =peer-state:ames + =. -.peer-state + :* symmetric-key=bud-sym + life=3 + rift=0 + public-key=bud-pub + sponsor=~bud + == + =. route.peer-state `[direct=%.y `lane:ames`[%& ~bud]] + [%known peer-state] + :: tell ~bud about ~nec + :: + =. peers.ames-state.bud + %+ ~(put by peers.ames-state.bud) ~nec + =| =peer-state:ames + =. -.peer-state + :* symmetric-key=nec-sym + life=2 + rift=0 + public-key=nec-pub + sponsor=~nec + == + =. route.peer-state `[direct=%.y `lane:ames`[%& ~nec]] + [%known peer-state] + :: metamorphose + :: + => .(nec +:(call:(nec) ~[//unix] ~ %born ~)) + => .(bud +:(call:(bud) ~[//unix] ~ %born ~)) + :: + [nec=nec bud=bud] +-- +:: forward-declare to avoid repeated metamorphoses +=/ gall-adult (make-gall ~zod) +=/ ames-adult nec:ames-nec-bud +:: main core +:: +|% ++$ gall-gate _gall-adult ++$ ames-gate _ames-adult +:: +++ nec-bud + =/ a ames-nec-bud + =/ gall-nec (make-gall ~nec) + =. gall-nec (load-agent ~nec gall-nec %sub test-sub) + =/ gall-bud (make-gall ~bud) + =. gall-bud (load-agent ~bud gall-bud %pub test-pub) + :* nec=[ames=nec.a gall=gall-nec] + bud=[ames=bud.a gall=gall-bud] + == +:: +gall-check-call: run gall task, assert produces expected-moves +:: +++ gall-check-call + |= $: =gall-gate + [now=@da eny=@ =roof] + [=duct task=(hobo task:gall)] + expected-moves=(list move:gall-bunt) + == + ^- [tang ^gall-gate] + =/ gall-core (gall-gate now eny roof) + =^ moves gall-gate (call:gall-core duct dud=~ task) + [(expect-eq !>(expected-moves) !>(moves)) gall-gate] +:: +++ gall-call + |= [=gall-gate =duct task=(hobo task:gall) =roof] + %. [duct dud=~ task] + call:(gall-gate now=~1111.1.1 eny=`@`0xdead.beef roof) +:: +gall-check-take: run gall sign, assert produces expected-moves +:: +++ gall-check-take + |= $: =gall-gate + [now=@da eny=@ =roof] + [=wire =duct =sign-arvo] + expected-moves=(list move:gall-bunt) + == + ^- [tang ^gall-gate] + =/ gall-core (gall-gate now eny roof) + =^ moves gall-gate (take:gall-core wire duct dud=~ sign-arvo) + [(expect-eq !>(expected-moves) !>(moves)) gall-gate] +:: +++ gall-take + |= [=gall-gate =wire =duct =sign-arvo =roof] + %. [wire duct dud=~ sign-arvo] + take:(gall-gate now=~1111.1.1 eny=`@`0xdead.beef roof) +:: +ames-check-call: run gall task, assert produces expected-moves +:: +++ ames-check-call + |= $: =ames-gate + [now=@da eny=@ =roof] + [=duct task=(hobo task:ames)] + expected-moves=(list move:ames-bunt) + == + ^- [tang ^ames-gate] + =/ ames-core (ames-gate now eny roof) + =^ moves ames-gate (call:ames-core duct dud=~ task) + [(expect-eq !>(expected-moves) !>(moves)) ames-gate] +:: +++ ames-call + |= [=ames-gate =duct task=(hobo task:ames) =roof] + %. [duct dud=~ task] + call:(ames-gate now=~1111.1.1 eny=`@`0xdead.beef roof) +:: +ames: run ames sign, assert produces expected-moves +:: +++ ames-check-take + |= $: =ames-gate + [now=@da eny=@ =roof] + [=wire =duct =sign:ames-bunt] + expected-moves=(list move:ames-bunt) + == + ^- [tang ^ames-gate] + =/ ames-core (ames-gate now eny roof) + =^ moves ames-gate (take:ames-core wire duct dud=~ sign) + [(expect-eq !>(expected-moves) !>(moves)) ames-gate] +:: +++ ames-scry-peer + |= $: =ames-gate + [now=@da eny=@ =roof] + our=ship + her=ship + == + ^- peer-state:ames + =- ?>(?=(%known -<) ->) + !< ship-state:ames + =< q + %- need %- need + %- scry:(ames-gate now eny roof) + [~ %x [[our %$ da+now] /peers/(scot %p her)]] +:: +++ gall-scry-nonce + |= $: =gall-gate + [now=@da eny=@ =roof] + our=ship + =dude:gall + sub=[=ship =term =wire] + == + ^- @ud + !< @ud + =< q + %- need %- need + %- scry:(gall-gate now eny roof) + [~ %n [[our dude da+now] [(scot %p ship.sub) [term wire]:sub]]] +:: +++ load-agent + |= [=ship =gall-gate =dude:gall =agent:gall] + =^ * gall-gate + %+ gall-call gall-gate + [~[/load] load/[[dude [ship %base da+~1111.1.1] agent]~] *roof] + =^ * gall-gate + =/ =sign-arvo + :+ %clay %writ + `[[%a da+~1111.1.1 %base] /app/[dude]/hoon vase+!>(!>(agent))] + %: gall-take + gall-gate + /sys/cor/[dude]/(scot %p ship)/base/(scot %da ~1111.1.1) + ~[/load] + sign-arvo + *roof + == + gall-gate +-- diff --git a/pkg/arvo/lib/test/pub.hoon b/pkg/arvo/lib/test/pub.hoon new file mode 100644 index 000000000..0a008f5ca --- /dev/null +++ b/pkg/arvo/lib/test/pub.hoon @@ -0,0 +1,36 @@ +/+ default-agent, verb, dbug +:: +=| state=~ +%- agent:dbug +%+ verb & +^- agent:gall +|_ =bowl:gall ++* this . + def ~(. (default-agent this %|) bowl) +:: +++ on-poke + |= [=mark =vase] + (on-poke:def +<) +:: +++ on-watch + |= =path + `this +:: +++ on-agent + |= [=wire =sign:agent:gall] + (on-agent:def +<) +:: +++ on-fail + |= [=term =tang] + (mean ':pub +on-fail' term tang) +:: +++ on-leave + |= =path + `this +:: +++ on-init `this +++ on-save !>(state) +++ on-load |=(old=vase `this(state !<(_state old))) +++ on-arvo on-arvo:def +++ on-peek on-peek:def +-- diff --git a/pkg/arvo/lib/test/sub.hoon b/pkg/arvo/lib/test/sub.hoon new file mode 100644 index 000000000..af324241f --- /dev/null +++ b/pkg/arvo/lib/test/sub.hoon @@ -0,0 +1,47 @@ +/+ default-agent, verb, dbug +:: +=| state=~ +%- agent:dbug +%+ verb & +^- agent:gall +|_ =bowl:gall ++* this . + def ~(. (default-agent this %|) bowl) +:: +++ on-poke + |= [=mark =vase] + =+ !<(=ship vase) + :_ this + ?+ mark !! + %leave [%pass /sub-foo/(scot %p ship) %agent [ship %pub] %leave ~]~ + %watch [%pass /sub-foo/(scot %p ship) %agent [ship %pub] %watch /foo]~ + == +:: +++ on-watch + |= =path + (on-watch:def +<) +:: +++ on-agent + |= [=wire =sign:agent:gall] + =/ =ship (slav %p &2.wire) + ?+ -.sign !! + %fact `this + %watch-ack `this + %kick + [[%pass /sub-foo/(scot %p ship) %agent [ship %pub] %watch /foo]~ this] + == +:: +++ on-fail + |= [=term =tang] + (mean ':sub +on-fail' term tang) +:: +++ on-leave + |= =path + `this +:: +++ on-init `this +++ on-save !>(state) +++ on-load |=(old=vase `this(state !<(_state old))) +++ on-arvo on-arvo:def +++ on-peek on-peek:def +-- diff --git a/pkg/arvo/mar/aqua/effect.hoon b/pkg/arvo/mar/aqua/effect.hoon new file mode 100644 index 000000000..e6f13f868 --- /dev/null +++ b/pkg/arvo/mar/aqua/effect.hoon @@ -0,0 +1,12 @@ +/- *aquarium +|_ af=aqua-effect +++ grad %noun +++ grow + |% + ++ noun af + -- +++ grab + |% + ++ noun aqua-effect + -- +-- diff --git a/pkg/arvo/mar/css.hoon b/pkg/arvo/mar/css.hoon deleted file mode 100644 index c4810b211..000000000 --- a/pkg/arvo/mar/css.hoon +++ /dev/null @@ -1,21 +0,0 @@ -:: -:::: /hoon/css/mar - :: -/? 310 -=, eyre -=, mimes:html -|_ mud=@t -++ grow :: convert to - |% ++ mime [/text/css (as-octs mud)] :: convert to %mime - ++ elem ;style :: convert to %hymn - ;- (trip mud) - == - ++ hymn ;html:(head:"{elem}" body) - -- -++ grab - |% :: convert from - ++ mime |=([p=mite q=octs] (@t q.q)) - ++ noun @t :: clam from %noun - -- -++ grad %mime --- diff --git a/pkg/arvo/mar/css.hoon b/pkg/arvo/mar/css.hoon new file mode 120000 index 000000000..dff5dfcd5 --- /dev/null +++ b/pkg/arvo/mar/css.hoon @@ -0,0 +1 @@ +../../base-dev/mar/css.hoon \ No newline at end of file diff --git a/pkg/arvo/mar/dill/belt.hoon b/pkg/arvo/mar/dill/belt.hoon index 1677b6ef1..5d50dcd98 100644 --- a/pkg/arvo/mar/dill/belt.hoon +++ b/pkg/arvo/mar/dill/belt.hoon @@ -45,8 +45,8 @@ =+ cha=(tuba (trip q.kev)) ?> ?=([@ ~] cha) :: of a single character ?+ mod !! :: modified by one buckykey - [%ctrl ~ ~] [%ctl i.cha] - [%alt ~ ~] [%met i.cha] + [%ctrl ~ ~] [%mod %ctl i.cha] + [%alt ~ ~] [%mod %met i.cha] == ?@ q.kev [%txt (tuba (trip q.kev))] diff --git a/pkg/arvo/mar/dill/blit.hoon b/pkg/arvo/mar/dill/blit.hoon index 77e5cecf4..3ba85e3dc 100644 --- a/pkg/arvo/mar/dill/blit.hoon +++ b/pkg/arvo/mar/dill/blit.hoon @@ -19,8 +19,10 @@ ^- ^json ?+ -.dib ~|(unsupported-blit+-.dib !!) %mor [%a (turn p.dib |=(a=dill-blit:dill json(dib a)))] - %hop (frond %hop (numb p.dib)) - ?(%pro %out) (frond -.dib (tape (tufa p.dib))) + %hop %+ frond %hop + ?@ p.dib (numb p.dib) + (pairs 'x'^(numb x.p.dib) 'y'^(numb y.p.dib) ~) + %put (frond -.dib (tape (tufa p.dib))) ?(%bel %clr) (frond %act %s -.dib) == -- diff --git a/pkg/arvo/mar/dns/complete.hoon b/pkg/arvo/mar/dns/complete.hoon index cbe67c6f0..17276f99e 100644 --- a/pkg/arvo/mar/dns/complete.hoon +++ b/pkg/arvo/mar/dns/complete.hoon @@ -8,5 +8,14 @@ ++ grab |% +$ noun [ship binding] + ++ json + =, dejs:format + |= jon=json + %. jon + %- ot + :~ [%ship |=(j=json ?>(?=([%s *] j) (rash +.j fed:ag)))] + [%address |=(j=json ?>(?=([%s *] j) [%if (rash +.j ip4:eyre)]))] + [%turf (ar so)] + == -- -- diff --git a/pkg/arvo/mar/dns/request.hoon b/pkg/arvo/mar/dns/request.hoon new file mode 100644 index 000000000..7b0e91a31 --- /dev/null +++ b/pkg/arvo/mar/dns/request.hoon @@ -0,0 +1,16 @@ +/- *dns +|_ r=request +++ grad %noun +++ grow + |% + ++ json + %- pairs:enjs:format + :~ ['ship' (ship:enjs:format ship.r)] + ['address' s+(rsh 3 (scot %if +.address.r))] + == + -- +++ grab + |% + ++ noun request + -- +-- diff --git a/pkg/arvo/mar/drum-put.hoon b/pkg/arvo/mar/drum-put.hoon index e6094158e..8fa3773c0 100644 --- a/pkg/arvo/mar/drum-put.hoon +++ b/pkg/arvo/mar/drum-put.hoon @@ -1,8 +1,7 @@ +:: %drum-put: download into host system :: -:::: /hoon/do-claim/womb/mar - :: /? 310 -|_ [path @] +|_ [path $@(@ [@ta @])] :: ++ grad %noun ++ grow @@ -11,6 +10,6 @@ -- ++ grab :: convert from |% - +$ noun [path @] :: clam from %noun + +$ noun [path $@(@ [@ta @])] :: clam from %noun -- -- diff --git a/pkg/arvo/mar/herm/task.hoon b/pkg/arvo/mar/herm/task.hoon new file mode 100644 index 000000000..93757418e --- /dev/null +++ b/pkg/arvo/mar/herm/task.hoon @@ -0,0 +1,46 @@ +:: task: herm task for passthrough to dill +:: +/- herm +/+ dill +:: +|_ =task:herm +++ grad %noun +:: +grab: convert from +:: +++ grab + |% + ++ noun task:herm + :: + ++ json + |= jon=^json + ^+ task + ~| jon + ?> ?=([%o *] jon) + =+ ses=(~(got by p.jon) 'session') + ?> ?=([%s *] ses) + :- ?: =('' p.ses) %$ + (slav %tas p.ses) + =. p.jon (~(del by p.jon) 'session') + %. jon + =, dejs:format + |^ task + ++ task + %- of + :~ belt+belt:dejs:^dill + blew+(ot 'w'^ni 'h'^ni ~) + hail+ul + open+(ot 'term'^(se %tas) 'apps'^(ar gill) ~) + shut+ul + == + :: + ++ gill + (ot 'who'^(se %p) 'app'^(se %tas) ~) + -- + -- +:: +grow: convert to +:: +++ grow + |% + ++ noun task + -- +-- diff --git a/pkg/arvo/mar/kiln/bump.hoon b/pkg/arvo/mar/kiln/bump.hoon index 766454277..5954006e9 100644 --- a/pkg/arvo/mar/kiln/bump.hoon +++ b/pkg/arvo/mar/kiln/bump.hoon @@ -1,23 +1,13 @@ -|% -+$ bump [except=(set desk) force=_|] --- -|_ b=bump +|_ ~ ++ grad %noun ++ grab |% - ++ noun bump - ++ json - ^- $-(^json bump) - =, dejs:format - %- ot - :~ except+(as so) - force+bo - == + ++ noun ,~ + ++ json ul:dejs:format -- ++ grow |% - ++ noun b + ++ noun ~ + ++ json ~ -- --- - - +-- \ No newline at end of file diff --git a/pkg/arvo/mar/kiln/pikes.hoon b/pkg/arvo/mar/kiln/pikes.hoon new file mode 100644 index 000000000..3d709aea3 --- /dev/null +++ b/pkg/arvo/mar/kiln/pikes.hoon @@ -0,0 +1,24 @@ +/- h=hood +|_ =pikes:h +++ grad %noun +++ grow + |% + ++ noun pikes + ++ json + =, enjs:format + %- pairs + %+ turn ~(tap by pikes) + |= [=desk =pike:h] + :- desk + %- pairs + :~ sync/?~(sync.pike ~ =,(u.sync.pike (pairs ship/s/(scot %p ship) desk/s/desk ~))) + hash/s/(scot %uv hash.pike) + zest/s/zest.pike + wefts/a/(turn ~(tap in wic.pike) weft:enjs:h) + == + -- +++ grab + |% + ++ noun pikes:h + -- +-- diff --git a/pkg/arvo/mar/kiln/sync.hoon b/pkg/arvo/mar/kiln/sync.hoon new file mode 100644 index 000000000..7731a13d7 --- /dev/null +++ b/pkg/arvo/mar/kiln/sync.hoon @@ -0,0 +1,29 @@ +|% ++$ sync + [local=term =ship =desk] +-- +|_ s=sync +++ grad %noun +++ grow + |% + ++ noun s + ++ json + %- pairs:enjs:format + :~ local+s+local.s + desk+s+desk.s + ship+s+(scot %p ship.s) + == + -- +++ grab + |% + ++ noun sync + ++ json + ^- $-(^json sync) + =, dejs:format + %- ot + :~ local+so + ship+(su ;~(pfix sig fed:ag)) + desk+so + == + -- +-- diff --git a/pkg/arvo/mar/kiln/unsync.hoon b/pkg/arvo/mar/kiln/unsync.hoon new file mode 100644 index 000000000..fa203eda8 --- /dev/null +++ b/pkg/arvo/mar/kiln/unsync.hoon @@ -0,0 +1,29 @@ +|% ++$ unsync + [local=term =ship =desk] +-- +|_ usyc=unsync +++ grad %noun +++ grow + |% + ++ noun usyc + ++ json + %- pairs:enjs:format + :~ local+s+local.usyc + desk+s+desk.usyc + ship+s+(scot %p ship.usyc) + == + -- +++ grab + |% + ++ noun unsync + ++ json + ^- $-(^json unsync) + =, dejs:format + %- ot + :~ local+so + ship+(su ;~(pfix sig fed:ag)) + desk+so + == + -- +-- diff --git a/pkg/arvo/mar/kiln/vats-diff-0.hoon b/pkg/arvo/mar/kiln/vats-diff-0.hoon deleted file mode 100644 index cc98e8656..000000000 --- a/pkg/arvo/mar/kiln/vats-diff-0.hoon +++ /dev/null @@ -1,54 +0,0 @@ -/- hood -|_ =diff:hood -++ grad %noun -++ grow - |% - ++ noun diff - ++ json - =, enjs:format - |^ - %+ frond -.diff - ?- -.diff - %block (block +.diff) - ?(%merge-sunk %merge-fail) (desk-arak-err +.diff) - ?(%reset %commit %suspend %revive) (desk-arak +.diff) - == - :: - ++ block - |= [=desk =arak:hood =weft:hood blockers=(set desk)] - %+ merge (desk-arak desk arak) - %- pairs - :~ weft+(weft:enjs:hood weft) - blockers+a+(turn ~(tap in blockers) (lead %s)) - == - :: - ++ desk-arak - |= [=desk =arak:hood] - %- pairs - :~ desk+s+desk - arak+(arak:enjs:hood arak) - == - :: - ++ desk-arak-err - |= [=desk =arak:hood =tang] - %+ merge (desk-arak desk arak) - %+ frond %tang - a+(turn tang tank) - :: - ++ merge - |= [a=^json b=^json] - ^- ^json - ?> &(?=(%o -.a) ?=(%o -.b)) - o+(~(uni by p.a) p.b) - -- - -- -++ grab - |% - ++ noun diff:hood - -- --- - - - - - diff --git a/pkg/arvo/mar/kiln/vats-snap-0.hoon b/pkg/arvo/mar/kiln/vats-snap-0.hoon deleted file mode 100644 index 955229e1a..000000000 --- a/pkg/arvo/mar/kiln/vats-snap-0.hoon +++ /dev/null @@ -1,20 +0,0 @@ -/- hood -!: -|_ ark=(map desk arak:hood) -++ grad %noun -++ grow - |% - ++ noun ark - ++ json - =, enjs:format - %- pairs - %+ turn ~(tap by ark) - |= [=desk =arak:hood] - [desk (arak:enjs:hood arak)] - -- -:: -++ grab - |% - ++ noun (map desk arak:hood) - -- --- diff --git a/pkg/arvo/mar/kiln/vats.hoon b/pkg/arvo/mar/kiln/vats.hoon deleted file mode 100644 index 2a2ec8660..000000000 --- a/pkg/arvo/mar/kiln/vats.hoon +++ /dev/null @@ -1,21 +0,0 @@ -/- *hood -|_ vats=(list vat) -++ grad %noun -++ grow - |% - ++ noun vats - ++ json (vats:enjs vats) - -- -++ grab - |% - ++ noun (list vat) - -- --- - - - - - - - - diff --git a/pkg/arvo/mar/ted/eval.hoon b/pkg/arvo/mar/ted/eval.hoon new file mode 100644 index 000000000..36aca1796 --- /dev/null +++ b/pkg/arvo/mar/ted/eval.hoon @@ -0,0 +1,10 @@ +/- eval=ted-eval +|_ put=inpt:eval +++ grab |% + ++ noun inpt:eval + -- +++ grow |% + ++ noun put + -- +++ grad %noun +-- diff --git a/pkg/arvo/sur/claz.hoon b/pkg/arvo/sur/claz.hoon index 2b3677ed8..88c3b246c 100644 --- a/pkg/arvo/sur/claz.hoon +++ b/pkg/arvo/sur/claz.hoon @@ -11,7 +11,7 @@ :: ++ network $? %mainnet - %ropsten + %goerli %fakenet [%other id=@] == diff --git a/pkg/arvo/sur/dice.hoon b/pkg/arvo/sur/dice.hoon index 59c158996..5cde151aa 100644 --- a/pkg/arvo/sur/dice.hoon +++ b/pkg/arvo/sur/dice.hoon @@ -7,7 +7,8 @@ +$ owners (jug owner ship) +$ sponsors (map ship [residents=(set ship) requests=(set ship)]) +$ history (map address:ethereum (tree hist-tx)) -+$ net ?(%mainnet %ropsten %local %default) ++$ events (list event-log:rpc:ethereum) ++$ net ?(%mainnet %ropsten %goerli %local %default) +$ snap-state [%0 =id:block:jael nas=^state:naive =owners =sponsors] :: +$ config diff --git a/pkg/arvo/sur/herm.hoon b/pkg/arvo/sur/herm.hoon new file mode 100644 index 000000000..eab8cbb1b --- /dev/null +++ b/pkg/arvo/sur/herm.hoon @@ -0,0 +1,9 @@ +:: herm: stand-in for term.c with http interface +:: +|% ++$ task + $~ [%$ %hail ~] + $: session=@tas + task=$>(?(%open %shut %belt %blew %hail) session-task:dill) + == +-- diff --git a/pkg/arvo/sur/ted/eval.hoon b/pkg/arvo/sur/ted/eval.hoon new file mode 100644 index 000000000..54a4229a3 --- /dev/null +++ b/pkg/arvo/sur/ted/eval.hoon @@ -0,0 +1,5 @@ +^? +|% ++$ deps (list path) ++$ inpt $@(cord (pair cord deps)) +-- diff --git a/pkg/arvo/sys.kelvin b/pkg/arvo/sys.kelvin index e77a3de08..7de4a9fa2 100644 --- a/pkg/arvo/sys.kelvin +++ b/pkg/arvo/sys.kelvin @@ -1 +1 @@ -[%zuse 418] +[%zuse 414] diff --git a/pkg/arvo/sys/arvo.hoon b/pkg/arvo/sys/arvo.hoon index e80424264..9d97a1d9c 100644 --- a/pkg/arvo/sys/arvo.hoon +++ b/pkg/arvo/sys/arvo.hoon @@ -3,7 +3,7 @@ |% +| %global :: -++ arvo %240 +++ arvo %239 :: :: $arch: node identity :: $axal: fundamental node, recursive (trie) @@ -415,7 +415,7 @@ == -- :: -:: |de: axal engine +:: |of: axal engine :: ++ of =| fat=(axal) @@ -738,7 +738,7 @@ ?@ epic arvo %= $ epic +.epic - arvo .*(arvo [%9 2 %10 [6 %1 -.epic] %0 1]) + arvo .*([arvo -.epic] [%9 2 %10 [6 %0 3] %0 2]) == :: :: +boot: event 2: bootstrap a kernel from source @@ -773,7 +773,7 @@ :: ~> %slog.[0 leaf+"1-c (compiling compiler, wait a few minutes)"] =/ compiler-tool - .*(compiler-gate [%9 2 %10 [6 %1 noun/hoon.log] %0 1]) + .*([compiler-gate noun/hoon.log] [%9 2 %10 [6 %0 3] %0 2]) :: :: switch to the second-generation compiler. we want to be :: able to generate matching reflection nouns even if the @@ -781,7 +781,7 @@ :: generate last-generation spans for `!>`, etc. :: ~> %slog.[0 leaf+"1-d"] - =. compiler-gate .*(0 +:compiler-tool) + =. compiler-gate .*(0 +.compiler-tool) :: :: get the span (type) of the kernel core, which is the context :: of the compiler gate. we just compiled the compiler, @@ -791,18 +791,18 @@ :: ~> %slog.[0 leaf+"1-e"] =/ kernel-span - -:.*(compiler-gate [%9 2 %10 [6 %1 [-.compiler-tool '+>']] %0 1]) + -:.*([compiler-gate -.compiler-tool '+>'] [%9 2 %10 [6 %0 3] %0 2]) :: :: compile the arvo source against the kernel core. :: ~> %slog.[0 leaf+"1-f"] =/ kernel-tool - .*(compiler-gate [%9 2 %10 [6 %1 [kernel-span arvo.log]] %0 1]) + .*([compiler-gate kernel-span arvo.log] [%9 2 %10 [6 %0 3] %0 2]) :: :: create the arvo kernel, whose subject is the kernel core. :: ~> %slog.[0 leaf+"1-g"] - [.*(+>:compiler-gate +:kernel-tool) epic.log] + [.*(+>.compiler-gate +.kernel-tool) epic.log] -- :: :: |adapt @@ -1570,7 +1570,7 @@ :: %crud =? lag.zen ?& ?=(%exit mote.goof.buz) ?=(^ tang.goof.buz) - ?=(%leaf -.i.tang.goof.buz) :: XX ?@ + ?=([%leaf *] i.tang.goof.buz) ?=(%wyrd (crip p.i.tang.goof.buz)) == ~&(%lagging &) diff --git a/pkg/arvo/sys/hoon.hoon b/pkg/arvo/sys/hoon.hoon index 0be473c7f..58c7b09e8 100644 --- a/pkg/arvo/sys/hoon.hoon +++ b/pkg/arvo/sys/hoon.hoon @@ -2,25 +2,24 @@ :::: /sys/hoon :: :: :: =< ride -=> %140 => +=> %139 => :: :: :::: 0: version stub :: :: :: -~% %k.140 ~ ~ :: +~% %k.139 ~ ~ :: |% ++ hoon-version + -- => ~% %one + ~ -:: # %base +:: layer-1 :: -:: basic mathematical operations +:: basic mathematical operations |% -:: # %math :: unsigned arithmetic +| %math ++ add ~/ %add - :: unsigned addition + :: unsigned addition :: :: a: augend :: b: addend @@ -32,7 +31,7 @@ :: ++ dec ~/ %dec - :: unsigned decrement by one. + :: unsigned decrement by one. |= a=@ ~_ leaf+"decrement-underflow" ?< =(0 a) @@ -44,32 +43,32 @@ :: ++ div ~/ %div - :: unsigned divide + :: unsigned divide :: :: a: dividend :: b: divisor |: [a=`@`1 b=`@`1] :: quotient ^- @ + -:(dvr a b) +:: +++ dvr + ~/ %dvr + :: unsigned divide with remainder + :: + :: a: dividend + :: b: divisor + |: [a=`@`1 b=`@`1] + :: p: quotient + :: q: remainder + ^- [p=@ q=@] ~_ leaf+"divide-by-zero" ?< =(0 b) =+ c=0 |- - ?: (lth a b) c + ?: (lth a b) [c a] $(a (sub a b), c +(c)) :: -++ dvr - ~/ %dvr - :: unsigned divide with remainder - :: - :: a: dividend - :: b: divisor - |= [a=@ b=@] - :: p: quotient - :: q: remainder - ^- [p=@ q=@] - [(div a b) (mod a b)] -:: ++ gte ~/ %gte :: unsigned greater than or equals @@ -126,7 +125,7 @@ :: ++ max ~/ %max - :: unsigned maximum + :: unsigned maximum |= [a=@ b=@] :: the maximum ^- @ @@ -135,7 +134,7 @@ :: ++ min ~/ %min - :: unsigned minimum + :: unsigned minimum |= [a=@ b=@] :: the minimum ^- @ @@ -144,19 +143,18 @@ :: ++ mod ~/ %mod - :: unsigned modulus + :: unsigned modulus :: :: a: dividend :: b: divisor |: [a=`@`1 b=`@`1] :: the remainder ^- @ - ?< =(0 b) - (sub a (mul b (div a b))) + +:(dvr a b) :: ++ mul ~/ %mul - :: unsigned multiplication + :: unsigned multiplication :: :: a: multiplicand :: b: multiplier @@ -170,7 +168,7 @@ :: ++ sub ~/ %sub - :: unsigned subtraction + :: unsigned subtraction :: :: a: minuend :: b: subtrahend @@ -181,8 +179,6 @@ ?: =(0 b) a $(a (dec a), b (dec b)) :: -:: # %tree -:: :: tree addressing +| %tree ++ cap @@ -229,43 +225,6 @@ %3 +((mul a 2)) * (add (mod b 2) (mul $(b (div b 2)) 2)) == -:: :: -:::: 2n: functional hacks :: - :: :: - :: -++ aftr |*(a=$-(* *) |*(b=$-(* *) (pair b a))) :: pair after -++ cork |*([a=$-(* *) b=$-(* *)] (corl b a)) :: compose forward -++ corl :: compose backwards - |* [a=$-(* *) b=$-(* *)] - =< +:|.((a (b))) :: type check - =+ c=+<.b - |@ ++ $ (a (b c)) - -- -:: -++ cury :: curry left - |* [a=$-(^ *) b=*] - =+ c=+<+.a - |@ ++ $ (a b c) - -- -:: -++ curr :: curry right - |* [a=$-(^ *) c=*] - =+ b=+<+.a - |@ ++ $ (a b c) - -- -:: -++ fore |*(a=$-(* *) |*(b=$-(* *) (pair a b))) :: pair before -:: -++ head |*(^ ,:+<-) :: get head -++ same |*(* +<) :: identity -:: -++ succ |=(@ +(+<)) :: successor -:: -++ tail |*(^ ,:+<+) :: get tail -++ test |=(^ =(+<- +<+)) :: equality -:: -++ lead |*(* |*(* [+>+< +<])) :: put head -++ late |*(* |*(* [+< +>+<])) :: put tail :: :: # %containers :: @@ -413,35 +372,14 @@ :: $@(~ [~ u=item]) -- => -:: :: -:::: 2: layer two :: - :: :: - :: 2a: unit logic :: - :: 2b: list logic :: - :: 2c: bit arithmetic :: - :: 2d: bit logic :: - :: 2e: insecure hashing :: - :: 2f: noun ordering :: - :: 2g: unsigned powers :: - :: 2h: set logic :: - :: 2i: map logic :: - :: 2j: jar and jug logic :: - :: 2k: queue logic :: - :: 2l: container from container :: - :: 2m: container from noun :: - :: 2n: functional hacks :: - :: 2o: normalizing containers :: - :: 2p: serialization :: - :: 2q: molds and mold builders :: - :: +:: ~% %two + ~ +:: layer-2 +:: |% -:: :: -:::: 2a: unit logic :: - :: :: - :: biff, bind, bond, both, clap, drop, :: - :: fall, flit, lift, mate, need, some :: - :: +:: 2a: unit logic ++| %unit-logc +:: ++ biff :: apply |* [a=(unit) b=$-(* (unit))] ?~ a ~ @@ -521,16 +459,19 @@ |* a=* [~ u=a] :: -:::: 2b: list logic :: - :: :: - :: :: -:: +:: 2b: list logic ++| %list-logic :: +snoc: append an element to the end of a list :: ++ snoc |* [a=(list) b=*] (weld a ^+(a [b]~)) :: +:: +lure: List pURE +++ lure + |* a=* + [i=a t=~] +:: ++ fand :: all indices ~/ %fand |= [nedl=(list) hstk=(list)] @@ -811,27 +752,21 @@ :: ++ welp :: faceless weld ~/ %welp - =| [* *] - |@ - ++ $ - ?~ +<- - +<-(. +<+) - +<-(+ $(+<- +<->)) - -- + |* [* *] + ?~ +<- + +<-(. +<+) + +<-(+ $(+<- +<->)) :: ++ zing :: promote ~/ %zing - =| * - |@ - ++ $ - ?~ +< - +< - (welp +<- $(+< +<+)) - -- -:: :: -:::: 2c: bit arithmetic :: - :: :: - :: + |* * + ?~ +< + +< + (welp +<- $(+< +<+)) +:: +:: 2c: bit arithmetic ++| %bit-arithmetic +:: ++ bex :: binary exponent ~/ %bex |= a=bloq @@ -906,7 +841,7 @@ (lsh [bloq (mul step i)] (end [bloq step] i.b)) :: ++ rev - :: reverses block order, accounting for leading zeroes + :: reverses block order, accounting for leading zeroes :: :: boz: block size :: len: size of dat, in boz @@ -989,10 +924,10 @@ ++ sum |=([b=@ c=@] (sit (add b c))) :: wrapping add ++ sit |=(b=@ (end a b)) :: enforce modulo -- -:: :: -:::: 2d: bit logic :: - :: :: - :: +:: +:: 2d: bit logic ++| %bit-logic +:: ++ con :: binary or ~/ %con |= [a=@ b=@] @@ -1043,10 +978,10 @@ :: ++ not |= [a=bloq b=@ c=@] :: binary not (sized) (mix c (dec (bex (mul b (bex a))))) -:: :: -:::: 2e: insecure hashing :: - :: :: - :: +:: +:: 2e: insecure hashing ++| %insecure-hashing +:: ++ muk :: standard murmur3 ~% %muk ..muk ~ =+ ~(. fe 5) @@ -1123,10 +1058,9 @@ ?.(=(0 ham) ham $(i +(i), syd +(syd))) -- :: :: -:::: 2f: noun ordering :: - :: :: - :: aor, dor, gor, mor :: - :: +:: 2f: noun ordering ++| %noun-ordering +:: :: +aor: alphabetical order :: :: Orders atoms before cells, and atoms in ascending LSB order. @@ -1187,11 +1121,10 @@ ?: =(c d) (dor a b) (lth c d) -:: :: -:::: :: - :: 2g: unsigned powers :: - :: :: - :: +:: +:: 2g: unsigned powers ++| %unsigned-powers +:: ++ pow :: unsigned exponent ~/ %pow |= [a=@ b=@] @@ -1215,12 +1148,10 @@ ?: (lte t a) $(r s, q (dec q)) $(q (dec q)) -:: :: -:::: :: - :: :: - :: 2h: set logic :: - :: :: - :: +:: +:: 2h: set logic ++| %set-logic +:: ++ in :: set engine ~/ %in =| a=(tree) :: (set) @@ -1247,10 +1178,10 @@ =| [l=(unit) r=(unit)] |. ^- ? ?~ a & - ?& ?~(l & (gor n.a u.l)) - ?~(r & (gor u.r n.a)) - ?~(l.a & ?&((mor n.a n.l.a) $(a l.a, l `n.a))) - ?~(r.a & ?&((mor n.a n.r.a) $(a r.a, r `n.a))) + ?& ?~(l & &((gor n.a u.l) !=(n.a u.l))) + ?~(r & &((gor u.r n.a) !=(u.r n.a))) + ?~(l.a & ?&((mor n.a n.l.a) !=(n.a n.l.a) $(a l.a, l `n.a))) + ?~(r.a & ?&((mor n.a n.r.a) !=(n.a n.r.a) $(a r.a, r `n.a))) == :: ++ bif :: splits a by b @@ -1290,23 +1221,20 @@ :: ++ dif :: difference ~/ %dif - =+ b=a - |@ - ++ $ - |- ^+ a - ?~ b - a - =+ c=(bif n.b) - ?> ?=(^ c) - =+ d=$(a l.c, b l.b) - =+ e=$(a r.c, b r.b) - |- ^- [$?(~ _a)] - ?~ d e - ?~ e d - ?: (mor n.d n.e) - d(r $(d r.d)) - e(l $(e l.e)) - -- + |* b=_a + |- ^+ a + ?~ b + a + =+ c=(bif n.b) + ?> ?=(^ c) + =+ d=$(a l.c, b l.b) + =+ e=$(a r.c, b r.b) + |- ^- [$?(~ _a)] + ?~ d e + ?~ e d + ?: (mor n.d n.e) + d(r $(d r.d)) + e(l $(e l.e)) :: ++ dig :: axis of a in b |= b=* @@ -1331,16 +1259,16 @@ ~/ %has |* b=* ^- ? - :: wrap extracted item type in a unit because bunting fails + :: wrap extracted item type in a unit because bunting fails :: - :: If we used the real item type of _?^(a n.a !!) as the sample type, - :: then hoon would bunt it to create the default sample for the gate. + :: If we used the real item type of _?^(a n.a !!) as the sample type, + :: then hoon would bunt it to create the default sample for the gate. :: - :: However, bunting that expression fails if :a is ~. If we wrap it - :: in a unit, the bunted unit doesn't include the bunted item type. + :: However, bunting that expression fails if :a is ~. If we wrap it + :: in a unit, the bunted unit doesn't include the bunted item type. :: - :: This way we can ensure type safety of :b without needing to perform - :: this failing bunt. It's a hack. + :: This way we can ensure type safety of :b without needing to perform + :: this failing bunt. It's a hack. :: %. [~ b] |= b=(unit _?>(?=(^ a) n.a)) @@ -1356,22 +1284,19 @@ :: ++ int :: intersection ~/ %int - =+ b=a - |@ - ++ $ - |- ^+ a - ?~ b - ~ - ?~ a - ~ - ?. (mor n.a n.b) - $(a b, b a) - ?: =(n.b n.a) - a(l $(a l.a, b l.b), r $(a r.a, b r.b)) - ?: (gor n.b n.a) - %- uni(a $(a l.a, r.b ~)) $(b r.b) - %- uni(a $(a r.a, l.b ~)) $(b l.b) - -- + |* b=_a + |- ^+ a + ?~ b + ~ + ?~ a + ~ + ?. (mor n.a n.b) + $(a b, b a) + ?: =(n.b n.a) + a(l $(a l.a, b l.b), r $(a r.a, b r.b)) + ?: (gor n.b n.a) + %- uni(a $(a l.a, r.b ~)) $(b r.b) + %- uni(a $(a r.a, l.b ~)) $(b l.b) :: ++ put :: puts b in a, sorted ~/ %put @@ -1420,25 +1345,22 @@ :: ++ uni :: union ~/ %uni - =+ b=a - |@ - ++ $ - ?: =(a b) a - |- ^+ a - ?~ b - a - ?~ a - b - ?: =(n.b n.a) - b(l $(a l.a, b l.b), r $(a r.a, b r.b)) - ?: (mor n.a n.b) - ?: (gor n.b n.a) - $(l.a $(a l.a, r.b ~), b r.b) - $(r.a $(a r.a, l.b ~), b l.b) - ?: (gor n.a n.b) - $(l.b $(b l.b, r.a ~), a r.a) - $(r.b $(b r.b, l.a ~), a l.a) - -- + |* b=_a + ?: =(a b) a + |- ^+ a + ?~ b + a + ?~ a + b + ?: =(n.b n.a) + b(l $(a l.a, b l.b), r $(a r.a, b r.b)) + ?: (mor n.a n.b) + ?: (gor n.b n.a) + $(l.a $(a l.a, r.b ~), b r.b) + $(r.a $(a r.a, l.b ~), b l.b) + ?: (gor n.a n.b) + $(l.b $(b l.b, r.a ~), a r.a) + $(r.b $(b r.b, l.a ~), a l.a) :: ++ wyt :: size of set =< $ @@ -1446,10 +1368,10 @@ |. ^- @ ?~(a 0 +((add $(a l.a) $(a r.a)))) -- -:: :: -:::: 2i: map logic :: - :: :: - :: +:: +:: 2i: map logic ++| %map-logic +:: ++ by :: map engine ~/ %by =| a=(tree (pair)) :: (map) @@ -1509,23 +1431,20 @@ :: ++ dif :: difference ~/ %dif - =+ b=a - |@ - ++ $ - |- ^+ a - ?~ b - a - =+ c=(bif p.n.b q.n.b) - ?> ?=(^ c) - =+ d=$(a l.c, b l.b) - =+ e=$(a r.c, b r.b) - |- ^- [$?(~ _a)] - ?~ d e - ?~ e d - ?: (mor p.n.d p.n.e) - d(r $(d r.d)) - e(l $(e l.e)) - -- + |* b=_a + |- ^+ a + ?~ b + a + =+ c=(bif p.n.b q.n.b) + ?> ?=(^ c) + =+ d=$(a l.c, b l.b) + =+ e=$(a r.c, b r.b) + |- ^- [$?(~ _a)] + ?~ d e + ?~ e d + ?: (mor p.n.d p.n.e) + d(r $(d r.d)) + e(l $(e l.e)) :: ++ dig :: axis of b key |= b=* @@ -1588,26 +1507,23 @@ :: ++ int :: intersection ~/ %int - =+ b=a - |@ - ++ $ - |- ^+ a - ?~ b - ~ - ?~ a - ~ - ?: (mor p.n.a p.n.b) - ?: =(p.n.b p.n.a) - b(l $(a l.a, b l.b), r $(a r.a, b r.b)) - ?: (gor p.n.b p.n.a) - %- uni(a $(a l.a, r.b ~)) $(b r.b) - %- uni(a $(a r.a, l.b ~)) $(b l.b) - ?: =(p.n.a p.n.b) - b(l $(b l.b, a l.a), r $(b r.b, a r.a)) - ?: (gor p.n.a p.n.b) - %- uni(a $(b l.b, r.a ~)) $(a r.a) - %- uni(a $(b r.b, l.a ~)) $(a l.a) - -- + |* b=_a + |- ^+ a + ?~ b + ~ + ?~ a + ~ + ?: (mor p.n.a p.n.b) + ?: =(p.n.b p.n.a) + b(l $(a l.a, b l.b), r $(a r.a, b r.b)) + ?: (gor p.n.b p.n.a) + %- uni(a $(a l.a, r.b ~)) $(b r.b) + %- uni(a $(a r.a, l.b ~)) $(b l.b) + ?: =(p.n.a p.n.b) + b(l $(b l.b, a l.a), r $(b r.b, a r.a)) + ?: (gor p.n.a p.n.b) + %- uni(a $(b l.b, r.a ~)) $(a r.a) + %- uni(a $(b r.b, l.a ~)) $(a l.a) :: ++ jab ~/ %jab @@ -1693,48 +1609,41 @@ :: ++ uni :: union, merge ~/ %uni - =+ b=a - |@ - ++ $ - |- ^+ a - ?~ b - a - ?~ a - b - ?: =(p.n.b p.n.a) - b(l $(a l.a, b l.b), r $(a r.a, b r.b)) - ?: (mor p.n.a p.n.b) - ?: (gor p.n.b p.n.a) - $(l.a $(a l.a, r.b ~), b r.b) - $(r.a $(a r.a, l.b ~), b l.b) - ?: (gor p.n.a p.n.b) - $(l.b $(b l.b, r.a ~), a r.a) - $(r.b $(b r.b, l.a ~), a l.a) - -- + |* b=_a + |- ^+ a + ?~ b + a + ?~ a + b + ?: =(p.n.b p.n.a) + b(l $(a l.a, b l.b), r $(a r.a, b r.b)) + ?: (mor p.n.a p.n.b) + ?: (gor p.n.b p.n.a) + $(l.a $(a l.a, r.b ~), b r.b) + $(r.a $(a r.a, l.b ~), b l.b) + ?: (gor p.n.a p.n.b) + $(l.b $(b l.b, r.a ~), a r.a) + $(r.b $(b r.b, l.a ~), a l.a) :: ++ uno :: general union - =+ b=a - |@ - ++ $ - |* meg=$-([* * *] *) - |- ^+ a - ?~ b - a - ?~ a - b - ?: =(p.n.b p.n.a) - :+ [p.n.a `_?>(?=(^ a) q.n.a)`(meg p.n.a q.n.a q.n.b)] - $(b l.b, a l.a) - $(b r.b, a r.a) - ?: (mor p.n.a p.n.b) - ?: (gor p.n.b p.n.a) - $(l.a $(a l.a, r.b ~), b r.b) - $(r.a $(a r.a, l.b ~), b l.b) - ?: (gor p.n.a p.n.b) - $(l.b $(b l.b, r.a ~), a r.a) - $(r.b $(b r.b, l.a ~), a l.a) - -- - :: + |* b=_a + |* meg=$-([* * *] *) + |- ^+ a + ?~ b + a + ?~ a + b + ?: =(p.n.b p.n.a) + :+ [p.n.a `_?>(?=(^ a) q.n.a)`(meg p.n.a q.n.a q.n.b)] + $(b l.b, a l.a) + $(b r.b, a r.a) + ?: (mor p.n.a p.n.b) + ?: (gor p.n.b p.n.a) + $(l.a $(a l.a, r.b ~), b r.b) + $(r.a $(a r.a, l.b ~), b l.b) + ?: (gor p.n.a p.n.b) + $(l.b $(b l.b, r.a ~), a r.a) + $(r.b $(b r.b, l.a ~), a l.a) :: ++ urn :: apply gate to nodes ~/ %urn @@ -1763,10 +1672,9 @@ ?~ a b $(a r.a, b [q.n.a $(a l.a)]) -- -:: :: -:::: 2j: jar and jug logic :: - :: :: - :: +:: +:: 2j: jar and jug logic ++| %jar-and-jug-logic ++ ja :: jar engine =| a=(tree (pair * (list))) :: (jar) |@ @@ -1816,10 +1724,10 @@ =+ d=(get b) (~(put by a) b (~(put in d) c)) -- -:: :: -:::: 2k: queue logic :: - :: :: - :: +:: +:: 2k: queue logic ++| %queue-logic +:: ++ to :: queue engine =| a=(tree) :: (qeu) |@ @@ -1897,30 +1805,9 @@ ?~(r.a [~ n.a] $(a r.a)) -- :: -:::: 2o: containers :: - :: :: - :: -++ jar |$ [key value] (map key (list value)) :: map of lists -++ jug |$ [key value] (map key (set value)) :: map of sets +:: 2l: container from container ++| %container-from-container :: -++ map - |$ [key value] :: table - $| (tree (pair key value)) - |=(a=(tree (pair)) ?:(=(~ a) & ~(apt by a))) -:: -++ qeu - |$ [item] :: queue - $| (tree item) - |=(a=(tree) ?:(=(~ a) & ~(apt to a))) -:: -++ set - |$ [item] :: set - $| (tree item) - |=(a=(tree) ?:(=(~ a) & ~(apt in a))) -:: -:::: 2l: container from container :: - :: :: - :: ++ malt :: map from list |* a=(list) (molt `(list [p=_-<.a q=_->.a])`a) @@ -1933,10 +1820,10 @@ |* a=(list) :: ^- (set _i.-.a) =+ b=*(tree _?>(?=(^ a) i.a)) (~(gas in b) a) -:: :: -:::: 2m: container from noun :: - :: :: - :: +:: +:: 2m: container from noun ++| %container-from-noun +:: ++ ly :: list from raw noun le:nl :: @@ -2018,34 +1905,64 @@ [%p @p] [%q @q] [%rs @rs] [%rd @rd] [%rh @rh] [%rq @rq] == + +:: 2n: functional hacks ++| %functional-hacks :: -:: $tank: formatted print tree +++ aftr |*(a=$-(* *) |*(b=$-(* *) (pair b a))) :: pair after +++ cork |*([a=$-(* *) b=$-(* *)] (corl b a)) :: compose forward +++ corl :: compose backwards + |* [a=$-(* *) b=$-(* *)] + =< +:|.((a (b))) :: type check + |* c=_+<.b + (a (b c)) :: -:: just a cord, or -:: %leaf: just a tape -:: %palm: backstep list -:: flat-mid, open, flat-open, flat-close -:: %rose: flat list -:: flat-mid, open, close +++ cury :: curry left + |* [a=$-(^ *) b=*] + |* c=_+<+.a + (a b c) :: -+$ tank - $~ leaf/~ - $@ cord - $% [%leaf p=tape] - [%palm p=(qual tape tape tape tape) q=(list tank)] - [%rose p=(trel tape tape tape) q=(list tank)] - == +++ curr :: curry right + |* [a=$-(^ *) c=*] + |* b=_+<+.a + (a b c) :: -+$ tape (list @tD) :: utf8 string as list -+$ tour (list @c) :: utf32 clusters -+$ tarp [d=@ud h=@ud m=@ud s=@ud f=(list @ux)] :: parsed time -+$ term @tas :: ascii symbol -+$ wain (list cord) :: text lines -+$ wall (list tape) :: text lines +++ fore |*(a=$-(* *) |*(b=$-(* *) (pair a b))) :: pair before +:: +++ head |*(^ ,:+<-) :: get head +++ same |*(* +<) :: identity +:: +++ succ |=(@ +(+<)) :: successor +:: +++ tail |*(^ ,:+<+) :: get tail +++ test |=(^ =(+<- +<+)) :: equality +:: +++ lead |*(* |*(* [+>+< +<])) :: put head +++ late |*(* |*(* [+< +>+<])) :: put tail +:: +:: 2o: containers ++| %containers +++ jar |$ [key value] (map key (list value)) :: map of lists +++ jug |$ [key value] (map key (set value)) :: map of sets +:: +++ map + |$ [key value] :: table + $| (tree (pair key value)) + |=(a=(tree (pair)) ?:(=(~ a) & ~(apt by a))) +:: +++ qeu + |$ [item] :: queue + $| (tree item) + |=(a=(tree) ?:(=(~ a) & ~(apt to a))) +:: +++ set + |$ [item] :: set + $| (tree item) + |=(a=(tree) ?:(=(~ a) & ~(apt in a))) +:: +:: 2p: serialization ++| %serialization :: -:::: 2p: serialization :: - :: :: - :: ++ cue :: unpack ~/ %cue |= a=@ @@ -2117,7 +2034,8 @@ =+ e=(add (bex (dec c)) (cut 0 [d (dec c)] b)) [(add (add c c) e) (cut 0 [(add d (dec c)) e] b)] :: -++ fn :: float, infinity, or NaN +++ fn :: float, infinity, or NaN + :: :: s=sign, e=exponent, a=arithmetic form :: (-1)^s * a * 2^e $% [%f s=? e=@s a=@u] @@ -2125,42 +2043,79 @@ [%n ~] == :: -++ dn :: decimal float, infinity, or NaN +++ dn :: decimal float, infinity, or NaN + :: :: (-1)^s * a * 10^e $% [%d s=? e=@s a=@u] [%i s=?] [%n ~] == :: -++ rn :: parsed decimal float +++ rn :: parsed decimal float :: $% [%d a=? b=[c=@ [d=@ e=@] f=? i=@]] [%i a=?] [%n ~] == +:: +:: 2q: molds and mold builders ++| %molds-and-mold-builders +:: ++$ axis @ :: tree address ++$ bean ? :: 0=&=yes, 1=|=no ++$ flag ? ++$ char @t :: UTF8 byte ++$ cord @t :: UTF8, LSB first ++$ byts [wid=@ud dat=@] :: bytes, MSB first ++$ date [[a=? y=@ud] m=@ud t=tarp] :: parsed date ++$ knot @ta :: ASCII text ++$ noun * :: any noun ++$ path (list knot) :: like unix path ++$ stud :: standard name + $@ mark=@tas :: auth=urbit + $: auth=@tas :: standards authority + type=path :: standard label + == :: ++$ tang (list tank) :: bottom-first error +:: +:: $tank: formatted print tree +:: +:: just a cord, or +:: %leaf: just a tape +:: %palm: backstep list +:: flat-mid, open, flat-open, flat-close +:: %rose: flat list +:: flat-mid, open, close +:: ++$ tank + $~ leaf/~ + $@ cord + $% [%leaf p=tape] + [%palm p=(qual tape tape tape tape) q=(list tank)] + [%rose p=(trel tape tape tape) q=(list tank)] + == +:: ++$ tape (list @tD) :: utf8 string as list ++$ tour (list @c) :: utf32 clusters ++$ tarp [d=@ud h=@ud m=@ud s=@ud f=(list @ux)] :: parsed time ++$ term @tas :: ascii symbol ++$ wain (list cord) :: text lines ++$ wall (list tape) :: text lines +:: -- => :: :: -:::: 3: layer three :: - :: :: - :: 3a: signed and modular ints :: - :: 3b: floating point :: - :: 3c: urbit time :: - :: 3d: SHA hash family :: - :: 3e: (reserved) :: - :: 3f: scrambling :: - :: 3g: molds and mold builders :: - :: :: ~% %tri + == %year year %yore yore %ob ob == -|% +:: layer-3 +:: +|% +:: 3a: signed and modular ints ++| %signed-and-modular-ints :: -:::: 3a: signed and modular ints :: - :: :: - :: ++ egcd :: schneier's egcd |= [a=@ b=@] =+ si @@ -2264,10 +2219,9 @@ -1 --1 -- -:: :: -:::: 3b: floating point :: - :: :: - :: +:: +:: 3b: floating point ++| %floating-point :: ++ fl :: arb. precision fp =/ [[p=@u v=@s w=@u] r=$?(%n %u %d %z %a) d=$?(%d %f %i)] @@ -2280,6 +2234,8 @@ :: infinite exponent range => ~% %cofl +> ~ + :: cofl + :: :: internal functions; mostly operating on [e=@s a=@u], in other words :: positive numbers. many of these error out if a=0. |% @@ -2374,19 +2330,21 @@ =((lsh [0 (abs:si (dif:si e.a e.b))] a.b) a.a) =((lsh [0 (abs:si (dif:si e.a e.b))] a.a) a.b) :: - :: integer binary logarithm: 2^ibl(a) <= |a| < 2^(ibl(a)+1) + :: integer binary logarithm: 2^ibl(a) <= |a| < 2^(ibl(a)+1) ++ ibl |= [a=[e=@s a=@u]] ^- @s (sum:si (sun:si (dec (met 0 a.a))) e.a) :: - :: change to a representation where a.a is odd - :: every fn has a unique representation of this kind + :: +uni + :: + :: change to a representation where a.a is odd + :: every fn has a unique representation of this kind ++ uni |= [a=[e=@s a=@u]] |- ?: =((end 0 a.a) 1) a $(a.a (rsh 0 a.a), e.a (sum:si e.a --1)) :: - :: expands to either full precision or to denormalized + :: +xpd: expands to either full precision or to denormalized ++ xpd |= [a=[e=@s a=@u]] =+ ma=(met 0 a.a) @@ -2398,10 +2356,11 @@ (min q (^sub prc ma)) a(e (dif:si e.a (sun:si -)), a (lsh [0 -] a.a)) :: - :: central rounding mechanism - :: can perform: floor, ceiling, smaller, larger, - :: nearest (round ties to: even, away from 0, toward 0) - :: s is sticky bit: represents a value less than ulp(a) = 2^(e.a) + :: +lug: central rounding mechanism + :: + :: can perform: floor, ceiling, smaller, larger, + :: nearest (round ties to: even, away from 0, toward 0) + :: s is sticky bit: represents a value less than ulp(a) = 2^(e.a) :: ++ lug ~/ %lug @@ -2676,8 +2635,8 @@ =+ b=(old:si a) (rou [%f -.b --0 +.b]) :: - :: comparisons return ~ in the event of a NaN ++ lth :: less-than + :: comparisons return ~ in the event of a NaN |= [a=fn b=fn] ^- (unit ?) ?: |(?=([%n *] a) ?=([%n *] b)) ~ :- ~ ?: =(a b) | @@ -2739,16 +2698,17 @@ ?: s.a (^toj +>.a) =.(r swr (fli (^toj +>.a))) -- +:: +ff :: +:: this core has no use outside of the functionality +:: provided to ++rd, ++rs, ++rq, and ++rh +:: +:: w=width: bits in exponent field +:: p=precision: bits in fraction field +:: b=bias: added to exponent when storing +:: r=rounding mode: same as in ++fl ++ ff :: ieee 754 format fp |_ [[w=@u p=@u b=@s] r=$?(%n %u %d %z %a)] - :: this core has no use outside of the functionality - :: provided to ++rd, ++rs, ++rq, and ++rh - :: - :: w=width: bits in exponent field - :: p=precision: bits in fraction field - :: b=bias: added to exponent when storing - :: r=rounding mode: same as in ++fl :: ++ sb (bex (^add w p)) :: sign bit ++ me (dif:si (dif:si --1 b) (sun:si p)) :: minimum exponent @@ -2930,8 +2890,8 @@ ++ rs :: single precision fp ~% %rs +> ~ ^| + :: round to nearest, round up, round down, round to zero |_ r=$?(%n %u %d %z) - :: round to nearest, round up, round down, round to zero :: ++ ma %*(. ff w 8, p 23, b --127, r r) @@ -3009,8 +2969,8 @@ ++ rq :: quad precision fp ~% %rq +> ~ ^| + :: round to nearest, round up, round down, round to zero |_ r=$?(%n %u %d %z) - :: round to nearest, round up, round down, round to zero :: ++ ma %*(. ff w 15, p 112, b --16.383, r r) @@ -3088,8 +3048,8 @@ ++ rh :: half precision fp ~% %rh +> ~ ^| + :: round to nearest, round up, round down, round to zero |_ r=$?(%n %u %d %z) - :: round to nearest, round up, round down, round to zero :: ++ ma %*(. ff w 5, p 10, b --15, r r) @@ -3169,10 +3129,10 @@ ++ drg |= [a=@rh] ^- dn (drg:ma a) :: @rh to decimal float ++ grd |= [a=dn] ^- @rh (grd:ma a) :: decimal float to @rh -- -:: 3c: urbit time :: -:::: :: - :: year, yore, yell, yule, yall, yawn, yelp, yo :: - :: +:: +:: 3c: urbit time ++| %urbit-time +:: ++ year :: date to @d |= det=date ^- @da @@ -3294,10 +3254,10 @@ ++ qad 126.144.001 :: (add 1 (mul 4 yer)) ++ yer 31.536.000 :: (mul 365 day) -- -:: :: -:::: 3d: SHA hash family :: - :: :: - :: +:: +:: 3d: SHA hash family ++| %sha-hash-family +:: ++ shad |=(ruz=@ (shax (shax ruz))) :: double sha-256 ++ shaf :: half sha-256 |= [sal=@ ruz=@] @@ -3716,15 +3676,9 @@ :(sum (rol 0 5 a) fy e (wac 3 kbx) (wac j wox)) $(j +(j), a tem, b a, c (rol 0 30 b), d c, e d) -- -:: :: -:::: 3e: AES encryption (XX removed) :: - :: :: - :: -:: :: -:::: 3f: scrambling :: - :: :: - :: ob :: - :: +:: 3f: scrambling ++| %scrambling +:: ++ un :: =(x (wred (wren x))) |% ++ wren :: conceal structure @@ -4030,8 +3984,9 @@ :: -- :: -:::: 3g: molds and mold builders - :: +:: 3g: molds and mold builders ++| %molds-and-mold-builders +:: +$ coin $~ [%$ %ud 0] :: print format $% [%$ p=dime] :: [%blob p=*] :: @@ -4059,29 +4014,10 @@ [%1 p=*] :: block [%2 p=(list tank)] :: stack trace == :: -++ wonk =+ veq=$:edge :: product from edge - |@ ++ $ ?~(q.veq !! p.u.q.veq) :: - -- :: +++ wonk |* veq=_$:edge :: product from edge + ?~(q.veq !! p.u.q.veq) :: -- => -:: :: -:::: 4: layer four :: - :: :: - :: 4a: exotic bases :: - :: 4b: text processing :: - :: 4c: tank printer :: - :: 4d: parsing (tracing) :: - :: 4e: parsing (combinators) :: - :: 4f: parsing (rule builders) :: - :: 4g: parsing (outside caller) :: - :: 4h: parsing (ascii glyphs) :: - :: 4i: parsing (useful idioms) :: - :: 4j: parsing (bases and base digits) :: - :: 4k: atom printing :: - :: 4l: atom parsing :: - :: 4m: formatting functions :: - :: 4n: virtualization :: - :: 4o: molds and mold builders :: - :: +:: ~% %qua + == @@ -4089,10 +4025,13 @@ %mute mute %show show == +:: layer-4 +:: |% :: -:::: 4a: exotic bases - :: +:: 4a: exotic bases ++| %exotic-bases +:: ++ po :: phonetic base ~/ %po =+ :- ^= sis :: prefix syllables @@ -4170,9 +4109,9 @@ ~ `b -- +:: 4b: text processing ++| %text-processing :: -:::: 4b: text processing - :: ++ at :: basic printing |_ a=@ ++ r @@ -4314,12 +4253,19 @@ $(inx +(inx)) == |- ^- ? - ?: =(0 b) & - =+ cur=(end 3 b) + ?: =(inx len) & + =+ cur=(cut 3 [inx 1] b) ?: &((lth cur 32) !=(10 cur)) | - =+ len=(teff cur) - ?& |(=(1 len) =+(i=1 |-(|(=(i len) &((gte (cut 3 [i 1] b) 128) $(i +(i))))))) - $(b (rsh [3 len] b)) + =+ tef=(teff cur) + ?& ?| =(1 tef) + =+ i=1 + |- ^- ? + ?| + =(i tef) + ?& (gte (cut 3 [(add i inx) 1] b) 128) + $(i +(i)) + == == == + $(inx +(inx)) == :: ++ ruth :: biblical sanity @@ -4507,13 +4453,14 @@ %'~' ['~' '~' d] == :: -:::: 4c: tank printer - :: +:: 4c: tank printer ++| %tank-printer +:: ++ wash :: render tank at width |= [[tab=@ edg=@] tac=tank] ^- wall (~(win re tac) tab edg) :: -:: |re: tank renderer +:: +re: tank renderer :: ++ re |_ tac=tank @@ -4748,8 +4695,9 @@ == -- :: -:::: 4d: parsing (tracing) - :: +:: 4d: parsing (tracing) ++| %parsing-tracing +:: ++ last |= [zyc=hair naz=hair] :: farther trace ^- hair ?: =(p.zyc p.naz) @@ -4760,43 +4708,38 @@ ^- hair ?:(=(`@`10 weq) [+(p.naz) 1] [p.naz +(q.naz)]) :: -:::: 4e: parsing (combinators) - :: +:: 4e: parsing (combinators) ++| %parsing-combinators +:: ++ bend :: conditional comp ~/ %bend - =+ raq=|*([a=* b=*] [~ u=[a b]]) - |@ - ++ $ - ~/ %fun - |* [vex=edge sab=rule] - ?~ q.vex - vex - =+ yit=(sab q.u.q.vex) - =+ yur=(last p.vex p.yit) - ?~ q.yit - [p=yur q=q.vex] - =+ vux=(raq p.u.q.vex p.u.q.yit) - ?~ vux - [p=yur q=q.vex] - [p=yur q=[~ u=[p=u.vux q=q.u.q.yit]]] - -- + |* raq=_|*([a=* b=*] [~ u=[a b]]) + ~/ %fun + |* [vex=edge sab=rule] + ?~ q.vex + vex + =+ yit=(sab q.u.q.vex) + =+ yur=(last p.vex p.yit) + ?~ q.yit + [p=yur q=q.vex] + =+ vux=(raq p.u.q.vex p.u.q.yit) + ?~ vux + [p=yur q=q.vex] + [p=yur q=[~ u=[p=u.vux q=q.u.q.yit]]] :: ++ comp ~/ %comp - =+ raq=|*([a=* b=*] [a b]) :: arbitrary compose - |@ - ++ $ - ~/ %fun - |* [vex=edge sab=rule] - ~! +< - ?~ q.vex - vex - =+ yit=(sab q.u.q.vex) - =+ yur=(last p.vex p.yit) - ?~ q.yit - [p=yur q=q.yit] - [p=yur q=[~ u=[p=(raq p.u.q.vex p.u.q.yit) q=q.u.q.yit]]] - -- + |* raq=_|*([a=* b=*] [a b]) :: arbitrary compose + ~/ %fun + |* [vex=edge sab=rule] + ~! +< + ?~ q.vex + vex + =+ yit=(sab q.u.q.vex) + =+ yur=(last p.vex p.yit) + ?~ q.yit + [p=yur q=q.yit] + [p=yur q=[~ u=[p=(raq p.u.q.vex p.u.q.yit) q=q.u.q.yit]]] :: ++ fail |=(tub=nail [p=p.tub q=~]) :: never parse ++ glue :: add rule @@ -4851,8 +4794,9 @@ %. sam (comp |*([a=* b=*] a)) :: -:::: 4f: parsing (rule builders) - :: +:: 4f: parsing (rule builders) ++| %parsing-rule-builders +:: ++ bass :: leftmost base |* [wuc=@ tyd=rule] %+ cook @@ -4916,16 +4860,13 @@ :: ++ here :: place-based apply ~/ %here - =+ [hez=|=([a=pint b=*] [a b]) sef=*rule] - |@ - ++ $ - ~/ %fun - |= tub=nail - =+ vex=(sef tub) - ?~ q.vex - vex - [p=p.vex q=[~ u=[p=(hez [p.tub p.q.u.q.vex] p.u.q.vex) q=q.u.q.vex]]] - -- + |* [hez=_|=([a=pint b=*] [a b]) sef=rule] + ~/ %fun + |= tub=nail + =+ vex=(sef tub) + ?~ q.vex + vex + [p=p.vex q=[~ u=[p=(hez [p.tub p.q.u.q.vex] p.u.q.vex) q=q.u.q.vex]]] :: ++ inde |* sef=rule :: indentation block |= nail ^+ (sef) @@ -4977,12 +4918,10 @@ (next tub) :: ++ knee :: callbacks - =| [gar=* sef=_|.(*rule)] - |@ ++ $ - |= tub=nail - ^- (like _gar) - ((sef) tub) - -- + |* [gar=* sef=_|.(*rule)] + |= tub=nail + ^- (like _gar) + ((sef) tub) :: ++ mask :: match char in set ~/ %mask @@ -5169,8 +5108,9 @@ wag [p.wag [~ [p.u.q.vex p.u.q.wag] q.u.q.wag]] :: -:::: 4g: parsing (outside caller) - :: +:: 4g: parsing (outside caller) ++| %parsing-outside-caller +:: ++ rash |*([naf=@ sab=rule] (scan (trip naf) sab)) ++ rose |* [los=tape sab=rule] =+ vex=(sab [[1 1] los]) @@ -5190,8 +5130,9 @@ ~_(leaf+"syntax error" !!) p.u.q.vex :: -:::: 4h: parsing (ascii glyphs) - :: +:: 4h: parsing (ascii glyphs) ++| %parsing-ascii-glyphs +:: ++ ace (just ' ') :: spACE ++ bar (just '|') :: vertical BAR ++ bas (just '\\') :: Back Slash (escaped) @@ -5226,8 +5167,9 @@ ++ wut (just '?') :: wut, what? ++ zap (just '!') :: zap! bang! crash!! :: -:::: 4i: parsing (useful idioms) - :: +:: 4i: parsing (useful idioms) ++| %parsing-useful-idioms +:: ++ alf ;~(pose low hig) :: alphabetic ++ aln ;~(pose low hig nud) :: alphanumeric ++ alp ;~(pose low hig nud hep) :: alphanumeric and - @@ -5344,8 +5286,9 @@ (just `@`10) == :: -:::: 4j: parsing (bases and base digits) - :: +:: 4j: parsing (bases and base digits) ++| %parsing-bases-and-base-digits +:: ++ ab |% ++ bix (bass 16 (stun [2 2] six)) @@ -5412,7 +5355,7 @@ -- ++ ag |% - ++ ape |*(fel=rule ;~(pose (cold 0 (just '0')) fel)) + ++ ape |*(fel=rule ;~(pose (cold `@`0 (just '0')) fel)) ++ bay (ape (bass 16 ;~(plug qeb:ab (star ;~(pfix dog qib:ab))))) ++ bip =+ tod=(ape qex:ab) (bass 0x1.0000 ;~(plug tod (stun [7 7] ;~(pfix dog tod)))) @@ -5466,8 +5409,9 @@ ++ w ?:(=(tig 63) '~' ?:(=(tig 62) '-' ?:((gte tig 36) (add tig 29) x))) -- :: -:::: 4k: atom printing - :: +:: 4k: atom printing ++| %atom-printing +:: ++ co !: ~% %co ..co ~ @@ -5647,7 +5591,7 @@ |% :: +em-co: format in numeric base :: - :: in .bas, format .min digits of .hol with .par + :: in .bas, format .min digits of .hol with .par :: :: - .hol is processed least-significant digit first :: - all available digits in .hol will be processed, but @@ -5687,8 +5631,8 @@ :: :: +ox-co: format '.'-separated digit sequences in numeric base :: - :: in .bas, format each digit of .hol with .dug, - :: with '.' separators every .gop digits. + :: in .bas, format each digit of .hol with .dug, + :: with '.' separators every .gop digits. :: :: - .hol is processed least-significant digit first :: - .dug handles individual digits, output is prepended @@ -5708,8 +5652,8 @@ :: :: +ro-co: format '.'-prefixed bloqs in numeric base :: - :: in .bas, for .buz bloqs 0 to .dop, format at least one - :: digit of .hol, prefixed with '.' + :: in .bas, for .buz bloqs 0 to .dop, format at least one + :: digit of .hol, prefixed with '.' :: :: - used only for @i* addresses :: @@ -5727,8 +5671,9 @@ |=([? b=@ c=tape] [(dug b) c]) -- :: -:::: 4l: atom parsing - :: +:: 4l: atom parsing ++| %atom-parsing +:: ++ so ~% %so + ~ |% @@ -5917,8 +5862,8 @@ == -- :: -:::: 4m: formatting functions - :: +:: 4m: formatting functions ++| %formatting-functions ++ scot ~/ %scot |=(mol=dime ~(rent co %$ mol)) @@ -6019,8 +5964,9 @@ |= i=@ta (fall (rush i spot:stip) [%ta i]) :: -:::: 4n: virtualization - :: +:: 4n: virtualization ++| %virtualization +:: :: +mack: untyped, scry-less, unitary virtualization :: ++ mack @@ -6294,14 +6240,14 @@ ++ mure |= tap=(trap) ^- (unit) - =/ ton (mink [tap %9 2 %0 1] |=((pair) ``.*(~ [%12 1+p 1+q]))) + =/ ton (mink [tap %9 2 %0 1] |=(a=^ ``.*(a [%12 [%0 2] %0 3]))) ?.(?=(%0 -.ton) ~ `product.ton) :: +mute: untyped virtual :: ++ mute |= tap=(trap) ^- (each * (list tank)) - =/ ton (mock [tap %9 2 %0 1] |=((pair) ``.*(~ [%12 1+p 1+q]))) + =/ ton (mock [tap %9 2 %0 1] |=(a=^ ``.*(a [%12 [%0 2] %0 3]))) ?- -.ton %0 [%& p.ton] :: @@ -6314,17 +6260,17 @@ :: ++ slum ~/ %slum - |= [gat=* sam=*] - ^- * - .*(gat [%9 2 %10 [6 %1 sam] %0 1]) + |= sub=[gat=* sam=*] + .*(sub [%9 2 %10 [6 %0 3] %0 2]) :: +soft: virtual clam :: ++ soft |* han=$-(* *) |=(fud=* (mole |.((han fud)))) :: -:::: 4o: molds and mold builders - :: +:: 4o: molds and mold builders ++| %molds-and-mold-builders +:: +$ abel typo :: original sin: type +$ alas (list (pair term hoon)) :: alias list +$ atom @ :: just an atom @@ -6356,11 +6302,13 @@ +$ link :: lexical segment $% [%chat p=term] :: |chapter [%cone p=aura q=atom] :: %constant - [%frag p=term] :: .leg + [%frag p=term] :: .face [%funk p=term] :: +arm + [%plan p=term] :: $spec == :: ++$ cuff (list link) :: parsed lex segments +$ crib [summary=cord details=(list sect)] :: -+$ help [links=(list link) =crib] :: documentation ++$ help [=cuff =crib] :: documentation +$ limb $@ term :: wing element $% [%& p=axis] :: by geometry [%| p=@ud q=(unit term)] :: by name @@ -6375,18 +6323,13 @@ == :: +$ pica (pair ? cord) :: & prose, | code +$ palo (pair vein opal) :: wing trace, match -+$ plat :: - $? %hoon :: - %type :: - %nock :: - %tank :: - == :: +$ pock (pair axis nock) :: changes +$ port (each palo (pair type nock)) :: successful match +$ spec :: structure definition $~ [%base %null] :: $% [%base p=base] :: base type [%dbug p=spot q=spec] :: set debug + [%gist p=[%help p=help] q=spec] :: formal comment [%leaf p=term q=@] :: constant atom [%like p=wing q=(list wing)] :: reference [%loop p=term] :: hygienic reference @@ -6444,23 +6387,23 @@ (pair tope tope) :: cell ++ hoot :: hoon tools |% - +$ beer $@(char [~ p=hoon]) :: simple embed - +$ mane $@(@tas [@tas @tas]) :: XML name+space - +$ manx $~([[%$ ~] ~] [g=marx c=marl]) :: dynamic XML node - +$ marl (list tuna) :: dynamic XML nodes - +$ mart (list [n=mane v=(list beer)]) :: dynamic XML attrs - +$ marx $~([%$ ~] [n=mane a=mart]) :: dynamic XML tag - +$ mare (each manx marl) :: node or nodes - +$ maru (each tuna marl) :: interp or nodes - +$ tuna :: maybe interpolation + +$ beer $@(char [~ p=hoon]) :: simple embed + +$ mane $@(@tas [@tas @tas]) :: XML name+space + +$ manx $~([[%$ ~] ~] [g=marx c=marl]) :: dynamic XML node + +$ marl (list tuna) :: dynamic XML nodes + +$ mart (list [n=mane v=(list beer)]) :: dynamic XML attrs + +$ marx $~([%$ ~] [n=mane a=mart]) :: dynamic XML tag + +$ mare (each manx marl) :: node or nodes + +$ maru (each tuna marl) :: interp or nodes + +$ tuna :: maybe interpolation $~ [[%$ ~] ~] $^ manx $: ?(%tape %manx %marl %call) p=hoon == -- :: -+$ hoon :: - $~ [%zpzp ~] ++$ hoon :: hoon AST + $~ [%zpzp ~] :: $^ [p=hoon q=hoon] :: $% :: [%$ p=axis] :: simple leg @@ -6648,12 +6591,10 @@ +$ vair ?(%gold %iron %lead %zinc) :: in/contra/bi/co +$ vein (list (unit axis)) :: search trace +$ sect (list pica) :: paragraph -+$ whit :: - $: lab=(unit term) :: label - boy=(unit (pair cord (list sect))) :: body - def=(map term (pair cord (list sect))) :: definitions - use=(set term) :: defs used - == :: ++$ whit :: prefix docs parse + $: bat=(map cuff (pair cord (list sect))) :: batch comment + == :: ++$ whiz cord :: postfix doc parse +$ what (unit (pair cord (list sect))) :: help slogan/section +$ wing (list limb) :: search path :: @@ -6732,30 +6673,24 @@ inn=(map path @ud) :: calls into == -- -:: :: -:::: 5: layer five :: - :: :: - :: 5a: compiler utilities :: - :: 5b: macro expansion :: - :: 5c: compiler backend and prettyprinter :: - :: 5d: parser :: - :: 5e: molds and mold builders :: - :: 5f: profiling support (XX remove) :: - :: +:: ~% %pen + == %ap ap %ut ut == +:: layer-5 +:: |% :: -:::: 5aa: new partial nock interpreter - :: +:: 5aa: new partial nock interpreter ++| %new-partial-nock-interpreter +:: ++ musk !. :: nock with block set |% ++ abet - :: simplify raw result + :: simplify raw result :: |= $: :: noy: raw result :: @@ -6778,7 +6713,7 @@ wait/~(tap in blocks) :: ++ araw - :: execute nock on partial subject + :: execute nock on partial subject :: |= $: :: bus: subject, a partial noun :: fol: formula, a complete noun @@ -7014,7 +6949,7 @@ == :: ++ apex - :: execute nock on partial subject + :: execute nock on partial subject :: |= $: :: bus: subject, a partial noun :: fol: formula, a complete noun @@ -7029,7 +6964,7 @@ (abet (araw bus fol)) :: ++ combine - :: combine a pair of seminouns + :: combine a pair of seminouns :: |= $: :: hed: head of pair :: tal: tail of pair @@ -7055,7 +6990,7 @@ [full/(~(uni in blocks.mask.hed) blocks.mask.tal) ~] :: ++ complete - :: complete any laziness + :: complete any laziness :: |= bus=seminoun ^- seminoun @@ -7087,7 +7022,7 @@ == :: ++ fragment - :: seek to an axis in a seminoun + :: seek to an axis in a seminoun :: |= $: :: axe: tree address of subtree :: bus: partial noun @@ -7128,7 +7063,7 @@ == == :: ++ mutate - :: change a single axis in a seminoun + :: change a single axis in a seminoun :: |= $: :: axe: axis within big to change :: lit: (little) seminoun to insert within big at axe @@ -7193,7 +7128,7 @@ (combine hed mut) :: ++ require - :: require complete intermediate step + :: require complete intermediate step :: |= $: noy=result yen=$-(* result) @@ -7217,7 +7152,7 @@ (yen data.bus) :: ++ squash - :: convert stencil to block set + :: convert stencil to block set :: |= tyn=stencil ^- (set block) @@ -7228,8 +7163,9 @@ == -- :: -:::: 5a: compiler utilities - :: +:: 5a: compiler utilities ++| %compiler-utilities +:: ++ bool `type`(fork [%atom %f `0] [%atom %f `1] ~) :: make loobean ++ cell :: make %cell type ~/ %cell @@ -7534,8 +7470,9 @@ $(axe (peg axe 7), dom r.dom) == :: -:::: 5b: macro expansion - :: +:: 5b: macro expansion ++| %macro-expansions +:: ++ ah :: tiki engine |_ tik=tiki ++ blue @@ -7585,11 +7522,12 @@ -- :: ++ ax - =+ :* :: dom: axis to home - :: hay: wing to home - :: cox: hygienic context - :: bug: debug annotations - :: def: default expression + =+ :* :: .dom: axis to home + :: .hay: wing to home + :: .cox: hygienic context + :: .bug: debug annotations + :: .nut: annotations + :: .def: default expression :: dom=`axis`1 hay=*wing @@ -7601,12 +7539,13 @@ |_ mod=spec :: ++ autoname - :: derive name from spec + :: derive name from spec :: |- ^- (unit term) ?- -.mod %base ?.(?=([%atom *] p.mod) ~ ?:(=(%$ p.p.mod) `%atom `p.p.mod)) %dbug $(mod q.mod) + %gist $(mod q.mod) %leaf `p.mod %loop `p.mod %like ?~(p.mod ~ ?^(i.p.mod ?:(?=(%& -.i.p.mod) ~ q.i.p.mod) `i.p.mod)) @@ -7636,13 +7575,9 @@ %bcwt $(mod i.p.mod) %bczp ~ == - ++ hint - |= not=note - ^+ +> - ?>(?=(~ nut) +>.$(nut `not)) :: ++ function - :: construct a function example + :: construct a function example :: |= [fun=spec arg=spec] ^- hoon @@ -7662,7 +7597,7 @@ [%$ 15] :: ++ interface - :: construct a core example + :: construct a core example :: |= [variance=vair payload=spec arms=(map term spec)] ^- hoon @@ -7690,7 +7625,7 @@ [term example:clear(mod spec)] :: ++ home - :: express a hoon against the original subject + :: express a hoon against the original subject :: |= gen=hoon ^- hoon @@ -7702,12 +7637,12 @@ [%tsgr [%wing -] gen] :: ++ clear - :: clear annotations + :: clear annotations ^+ . .(bug ~, def ~, nut ~) :: ++ basal - :: example base case + :: example base case :: |= bas=base ?- bas @@ -7750,30 +7685,29 @@ ?~(res [%wing one] [%tsgl [%wing one] $(one i.res, res t.res)]) :: ++ descend - :: record an axis to original subject + :: record an axis to original subject :: |= axe=axis +>(dom (peg axe dom)) :: ++ decorate - :: apply documentation to expression + :: apply documentation to expression :: |= gen=hoon ^- hoon =- ?~(nut - [%note u.nut -]) - ^- hoon - |- ^- hoon + |- ?~(bug gen [%dbug i.bug $(bug t.bug)]) :: ++ pieces - :: enumerate tuple wings + :: enumerate tuple wings :: |= =(list term) ^- (^list wing) (turn list |=(=term `wing`[term ~])) :: ++ spore - :: build default sample + :: build default sample :: ^- hoon :: sample is always typeless @@ -7804,6 +7738,7 @@ (~(put by ^+(cox (~(uni by cox) q.mod))) %$ p.mod) == [%dbug *] [%dbug p.mod $(mod q.mod)] + [%gist *] $(mod q.mod) [%leaf *] [%rock p.mod q.mod] [%loop *] ~|([%loop p.mod] $(mod (~(got by cox) p.mod))) [%like *] $(mod bcmc/(unreel p.mod q.mod)) @@ -7849,7 +7784,7 @@ == :: ++ example - :: produce a correctly typed default instance + :: produce a correctly typed default instance :: ~+ ^- hoon @@ -7862,6 +7797,7 @@ :: [%base *] (decorate (basal p.mod)) [%dbug *] example(mod q.mod, bug [p.mod bug]) + [%gist *] example(mod q.mod, nut `p.mod) [%leaf *] (decorate [%rock p.mod q.mod]) [%like *] example(mod bcmc/(unreel p.mod q.mod)) [%loop *] [%limb p.mod] @@ -7889,11 +7825,12 @@ == :: ++ factory - :: make a normalizing gate (mold) + :: make a normalizing gate (mold) :: ^- hoon :: process annotations outside construct, to catch default :: + ::TODO: try seeing if putting %gist in here fixes %brbc ?: ?=(%dbug -.mod) factory(mod q.mod, bug [p.mod bug]) ?: ?=(%bcsg -.mod) factory(mod q.mod, def `[%kthp q.mod p.mod]) ^- hoon @@ -7922,7 +7859,7 @@ $/6 :: ++ analyze - :: normalize a fragment of the subject + :: normalize a fragment of the subject :: |_ $: :: axe: axis to fragment :: @@ -7969,19 +7906,19 @@ .(..analyze ^clear) :: ++ fetch - :: load the fragment + :: load the fragment :: ^- hoon [%$ axe] :: ++ fetch-wing - :: load, as a wing + :: load, as a wing :: ^- wing [[%& axe] ~] :: ++ choice - :: match full models, by trying them + :: match full models, by trying them :: |= $: :: one: first option :: rep: other options @@ -8036,7 +7973,7 @@ fin :: ++ relative - :: local constructor + :: local constructor :: ~+ ^- hoon @@ -8052,6 +7989,11 @@ [%dbug *] relative(mod q.mod, bug [p.mod bug]) :: + :: formal comment + :: + [%gist *] + relative(mod q.mod, nut `p.mod) + :: :: constant :: [%leaf *] @@ -8409,6 +8351,7 @@ `[%name term.p.gen skin] == :: + :: +open: desugarer ++ open ^- hoon ?- gen @@ -8461,8 +8404,14 @@ [%yell *] [%cncl [%limb %cain] [%zpgr [%cltr p.gen]] ~] [%note *] q.gen :: + ::TODO: does %gist need to be special cased here? [%brbc *] =- ?~ - !! - [%brtr [%bccl -] [%ktcl body.gen]] + :+ %brtr + [%bccl -] + |- + ?. ?=([%gist *] body.gen) + [%ktcl body.gen] + [%note p.body.gen $(body.gen q.body.gen)] %+ turn `(list term)`sample.gen |= =term ^- spec @@ -8775,8 +8724,9 @@ i.wig -- :: -:::: 5c: compiler backend and prettyprinter - :: +:: 5c: compiler backend and prettyprinter ++| %compiler-backend-and-prettyprinter +:: ++ ut ~% %ut +>+ @@ -8846,7 +8796,7 @@ == |_ [ref=type =skin] :: - :: =fish: make a $nock that tests a .ref at .axis for .skin + :: +fish: make a $nock that tests a .ref at .axis for .skin :: ++ fish |= =axis @@ -8897,7 +8847,7 @@ %wash [%1 1] == :: - :: -gain: make a $type by restricting .ref to .skin + :: +gain: make a $type by restricting .ref to .skin :: ++ gain |- ^- type @@ -8991,7 +8941,7 @@ [[%| 0 ~] $(depth.skin (dec depth.skin))] == :: - :: -lose: make a $type by restricting .ref to exclude .skin + :: +lose: make a $type by restricting .ref to exclude .skin :: ++ lose |- ^- type @@ -9101,7 +9051,7 @@ == :: ++ burp - :: expel undigested seminouns + :: expel undigested seminouns :: ^- type ~+ @@ -9669,7 +9619,7 @@ (chip & gen) :: ++ hemp - :: generate formula from foot + :: generate formula from foot :: |= [hud=poly gol=type gen=hoon] ^- nock @@ -9681,7 +9631,7 @@ == :: ++ laze - :: produce lazy core generator for static execution + :: produce lazy core generator for static execution :: |= [nym=(unit term) hud=poly dom=(map term tome)] ~+ @@ -9810,7 +9760,7 @@ == :: ++ mile - :: mull all chapters and feet in a core + :: mull all chapters and feet in a core :: |= [dox=type mel=vair nym=(unit term) hud=poly dom=(map term tome)] ^- (pair type type) @@ -9820,7 +9770,7 @@ [yet hum] :: ++ mine - :: mint all chapters and feet in a core + :: mint all chapters and feet in a core :: |= [gol=type mel=vair nym=(unit term) hud=poly dom=(map term tome)] ^- (pair type nock) @@ -9858,7 +9808,7 @@ :: all the below arms are used for gol checking and should have no :: effect other than giving more specific errors :: - :: all the possible types we could be expecting. + :: +gol-type: all the possible types we could be expecting. :: +$ gol-type $~ %noun @@ -9867,7 +9817,7 @@ [%core p=type q=coil] [%fork p=(set gol-type)] == - :: check that we're looking for a core + :: +core-check: check that we're looking for a core :: ++ core-check |= log=type @@ -9888,7 +9838,7 @@ =/ b $(tys t.tys) (~(put in b) a) == - :: check we have the expected number of chapters + :: +chapters-check: check we have the expected number of chapters :: ++ chapters-check |= log=gol-type @@ -9907,7 +9857,7 @@ =/ b $(tys t.tys) log == - :: get map of tomes if exists + :: +get-tomes: get map of tomes if exists :: ++ get-tomes |= log=gol-type @@ -9918,7 +9868,7 @@ [%fork *] ~ :: maybe could be more aggressive [%core *] `q.r.q.log == - :: get arms in tome + :: +get-arms: get arms in tome :: ++ get-arms |= [dog=(unit (map term tome)) nam=term] @@ -9927,7 +9877,7 @@ |= a=(map term tome) ~_ leaf+"unexpcted-chapter.{(trip nam)}" q:(~(got by a) nam) - :: check we have the expected number of arms + :: +arms-check: check we have the expected number of arms :: ++ arms-check |= [dab=(map term hoon) dag=(unit (map term hoon))] @@ -9947,7 +9897,7 @@ leaf+"have.{}" (nice dag =(exp hav)) a - :: get expected type of this arm + :: +get-arm-type: get expected type of this arm :: ++ get-arm-type |= [log=gol-type dag=(unit (map term hoon)) nam=term] @@ -11397,7 +11347,7 @@ ++ seem |=(toy=typo `type`toy) :: promote typo ++ seer |=(vix=vise `vase`vix) :: promote vise :: -:: +sell Pretty-print a vase to a tank using `deal`. +:: +sell: pretty-print a vase to a tank using +deal. :: ++ sell ~/ %sell @@ -11406,7 +11356,7 @@ ~| %sell (~(deal us p.vax) q.vax) :: -:: +skol $-(type tank) using `duck`. +:: +skol: $-(type tank) using duck. :: ++ skol |= typ=type @@ -11424,10 +11374,10 @@ :: :: +slab: states whether you can access an arm in a type. :: -:: -- way: the access type ($vial): read, write, or read-and-write. -:: The fourth case of $vial, %free, is not permitted because it would -:: allow you to discover "private" information about a type, -:: information which you could not make use of in (law-abiding) hoon anyway. +:: .way: the access type ($vial): read, write, or read-and-write. +:: The fourth case of $vial, %free, is not permitted because it would +:: allow you to discover "private" information about a type, +:: information which you could not make use of in (law-abiding) hoon anyway. :: ++ slab :: test if contains |= [way=?(%read %rite %both) cog=@tas typ=type] @@ -11460,13 +11410,12 @@ == :: ++ slew :: get axis in vase - |= [axe=@ vax=vase] ^- (unit vase) - ?. |- ^- ? - ?: =(1 axe) & - ?. ?=(^ q.vax) | - $(axe (mas axe), q.vax .*(q.vax [0 (cap axe)])) - ~ - `[(~(peek ut p.vax) %free axe) .*(q.vax [0 axe])] + |= [axe=@ vax=vase] + =/ typ |. (~(peek ut p.vax) %free axe) + |- ^- (unit vase) + ?: =(1 axe) `[$:typ q.vax] + ?@ q.vax ~ + $(axe (mas axe), q.vax ?-((cap axe) %2 -.q.vax, %3 +.q.vax)) :: ++ slim :: identical to seer? |= old=vise ^- vase @@ -11539,14 +11488,15 @@ |. ~+ [p.gun .*(q:$:tap q.gun)] :: -:::: 5d: parser - :: +:: 5d: parser ++| %parser +:: ++ vang :: set ++vast params |= [bug=? wer=path] :: bug: debug mode %*(. vast bug bug, wer wer) :: wer: where we are :: ++ vast :: main parsing core - =+ [bug=`?`| wer=*path] + =+ [bug=`?`| wer=*path doc=`?`&] |% ++ gash %+ cook :: parse path |= a=(list tyke) ^- tyke @@ -11580,117 +11530,163 @@ ++ mota %+ cook |=([a=tape b=tape] (rap 3 (weld a b))) ;~(plug (star low) (star hig)) - ++ glom - |= [wit=whit taw=whit] - ^- whit - :* ?~(lab.wit lab.taw lab.wit) - ?~(boy.wit boy.taw boy.wit) - (~(uni by def.wit) def.taw) - (~(uni in use.wit) use.taw) - == ++ docs |% + :: +apex: prefix comment. may contain batch comments. :: - :: above core + :: when a prefix doccord is parsed, it is possible that there is no +gap + :: afterward to be consumed, so we add an additional newline and + :: decrement the line number in the `hair` of the parser :: + :: the reason for this is that the whitespace parsing under +vast seems + :: to factor more cleanly this way, at least compared to the variations + :: tried without the extra newline. this doesn't mean there isn't a + :: better factorization without it, though. ++ apex + ?. doc (easy *whit) + %+ knee *whit |. ~+ ;~ plug - =/ ron (punt (indo noel)) - (punt (ifix [ron ron] (into head))) :: label - :: - =/ ron (punt (indo null)) - (ifix [ron ron] (punt body)) :: body - :: - (cook malt (star fill)) :: definitions - (easy ~) :: defs used (none) + |= tub=nail + =/ vex + %. tub + %- star + %+ cook |*([[a=* b=*] c=*] [a b c]) + ;~(pfix (punt leap) into ;~(pose larg smol)) + ?~ q.vex vex + :- p=p.vex + %- some + ?~ p.u.q.vex + [p=~ q=q.u.q.vex] + :- p=(malt p.u.q.vex) + q=`nail`[[(dec p.p.q.u.q.vex) q.p.q.u.q.vex] ['\0a' q.q.u.q.vex]] == :: - :: backward line + :: +apse: postfix comment. :: + :: a one line comment at the end of a line (typically starting at column + :: 57) that attaches to the expression starting at the beginning of the + :: current line. does not use a $link. ++ apse + ?. doc (easy *whiz) + %+ knee *whiz |. ~+ ;~ pose - %+ cook |=([a=term b=cord] %*(. *whit def (my [a b ~] ~))) - (exit fine) + ;~(less ;~(plug into step en-link col ace) ;~(pfix into step line)) :: - %+ cook |=(a=cord %*(. *whit boy `[a ~])) - (exit line) - :: - (easy *whit) + (easy *whiz) == :: - :: - ++ beer - |= $: lab=(unit term) - boy=(unit (pair cord (list sect))) - def=(list (pair (pair term cord) (list sect))) - == - ^- whit - =; def [lab boy (malt def) ~] - (turn def |=([[a=term b=cord] c=(list sect)] [a [b c]])) - :: - :: - ++ body - ;~ pose - ;~ plug :: can duplicate :: - (into ;~(pfix (punt ;~(plug null col gar step)) line)) - (easy ~) - == - ;~ plug - (into ;~(pfix step line)) - (rant text) - == - == - :: - ++ text (pick line code) :: text line - ++ line ;~(less ace (cook crip (star prn))) :: prose line - ++ code ;~(pfix step step (cook crip (star prn))) :: code line - ++ noel ;~(plug (punt ;~(pfix step hax)) null) :: header padding - ++ head ;~(pfix hax step cen sym) :: header line - ++ null (cold ~ (star ace)) :: blank line - ++ fine :: definition line - ;~ (glue ;~(plug col ace)) - sym - (cook crip (star prn)) - == - :: - :: - :: step: indent - :: into: :: and indent to end of line, consuming following space. - :: indo: :: to end of line, consuming following space. - :: exit: :: to end of line, not consuming following space. - :: - ++ step ;~(plug ace ace) - ++ into |*(bod=rule (indo ;~(pfix step bod))) - :: - ++ indo - |* bod=rule - ;~(pfix col gar ;~(sfix bod (just `@`10) (punt gap))) - :: - ++ exit - |* bod=rule - ;~(pfix (star ace) col gal step bod) - :: - :: fill: full definition - :: - ++ fill - %+ cook |=([[a=term b=cord] c=(list sect) (unit ~)] [a b c]) + ++ leap :: whitespace w/o docs + %+ cold ~ ;~ plug - (into fine) - (rant ;~(pfix step text)) - (punt (indo null)) + ;~ pose + (just '\0a') + ;~(plug gah ;~(pose gah skip)) + skip + == + (star ;~(pose skip gah)) == :: - :: rant: series of sections. + :: +smol: 2 aces then summary, 4 aces then paragraphs. + ++ smol + ;~ pfix + step + ;~ plug + ;~ plug + (plus en-link) + ;~ pose + (ifix [;~(plug col ace) (just '\0a')] (cook crip (plus prn))) + (ifix [(star ace) (just '\0a')] (easy *cord)) + == + == + (rant ;~(pfix step step text)) + == + == + :: + :: +larg: 4 aces then summary, 2 aces then paragraphs. + ++ larg + ;~ pfix + step step + ;~ plug + ;~ sfix + ;~ plug + ;~ pose + ;~(sfix (plus en-link) col ace) + ;~(less ace (easy *cuff)) + == + ;~(less ace (cook crip (plus prn))) + == + (just '\0a') + == + (rant ;~(pfix step teyt)) + == + == :: ++ rant |* sec=rule %- star ;~ pfix - (indo null) - (plus (into sec)) + (ifix [into (just '\0a')] (star ace)) + (plus (ifix [into (just '\0a')] sec)) + == + :: + ++ skip :: non-doccord comment + ;~ plug + col col + ;~(less ;~(pose larg smol) ;~(plug (star prn) (just '\0a'))) + == + :: + ++ null (cold ~ (star ace)) + ++ text (pick line code) + ++ teyt (pick line ;~(pfix step code)) + ++ line ;~(less ace (cook crip (star prn))) + ++ code ;~(pfix step ;~(less ace (cook crip (star prn)))) + ++ step ;~(plug ace ace) + :: + ++ into + ;~(plug (star ace) col col) + :: + ++ en-link + |= a=nail %. a + %+ knee *link |. ~+ + %- stew + ^. stet ^. limo + :~ :- '|' ;~(pfix bar (stag %chat sym)) + :- '.' ;~(pfix dot (stag %frag sym)) + :- '+' ;~(pfix lus (stag %funk sym)) + :- '$' ;~(pfix buc (stag %plan sym)) + :- '%' ;~(pfix cen (stag %cone bisk:so)) == -- :: + ++ clad :: hoon doccords + |* fel=rule + %+ cook + |= [a=whit b=hoon c=whiz] + =? b !=(c *whiz) + [%note help/`[c]~ b] + =+ docs=~(tap by bat.a) + |- + ?~ docs b + $(docs t.docs, b [%note help/i.docs b]) + (seam fel) + ++ coat :: spec doccords + |* fel=rule + %+ cook + |= [a=whit b=spec c=whiz] + =? b !=(c *whiz) + [%gist help/`[c]~ b] + =+ docs=~(tap by bat.a) + |- + ?~ docs b + $(docs t.docs, b [%gist help/i.docs b]) + (seam fel) + ++ scye :: with prefix doccords + |* fel=rule + ;~(pose ;~(plug apex:docs ;~(pfix gap fel)) ;~(plug (easy *whit) fel)) + ++ seam :: with doccords + |* fel=rule + (scye ;~(plug fel apse:docs)) + :: ++ plex :: reparse static path |= gen=hoon ^- (unit path) ?: ?=([%dbug *] gen) :: unwrap %dbug @@ -11959,8 +11955,6 @@ (cook drop-top wide-top) == :: - ::+| - :: ++ a-mane :: mane as hoon %+ cook |= [a=@tas b=(unit @tas)] @@ -12008,8 +12002,6 @@ wide-attrs == :: - ::+| - :: ++ tall-top :: tall top %+ knee *(each manx:hoot marl:hoot) |. ~+ ;~ pose @@ -12036,8 +12028,6 @@ [[p.a (weld q.a b)] c] ;~(plug tag-head tall-attrs tall-tail) :: - ::+| - :: ::REVIEW is there a better way to do this? ++ hopefully-quote :: prefer "quote" form %+ cook |=(a=(list beer:hoot) a) @@ -12140,19 +12130,21 @@ |% ++ main :: - :: state of the parsing loop. we maintain a construction - :: stack for elements and a line stack for lines in the - :: current block. a blank line causes the current block - :: to be parsed and thrown in the current element. when - :: the indent column retreats, the element stack rolls up. + :: state of the parsing loop. :: - :: verbose: debug printing enabled - :: err: error position - :: ind: outer and inner indent level - :: hac: stack of items under construction - :: cur: current item under construction - :: par: current "paragraph" being read in - :: [loc txt]: parsing state + :: we maintain a construction stack for elements and a line + :: stack for lines in the current block. a blank line + :: causes the current block to be parsed and thrown in the + :: current element. when the indent column retreats, the + :: element stack rolls up. + :: + :: .verbose: debug printing enabled + :: .err: error position + :: .ind: outer and inner indent level + :: .hac: stack of items under construction + :: .cur: current item under construction + :: .par: current "paragraph" being read in + :: .[loc txt]: parsing state :: =/ verbose & =| err=(unit hair) @@ -13215,7 +13207,7 @@ [':' (rune col %brcl expb)] ['.' (rune dot %brdt expa)] ['-' (rune hep %brhp expa)] - ['^' (rune ket %brkt expx)] + ['^' (rune ket %brkt expr)] ['~' (rune sig %brsg exqc)] ['*' (rune tar %brtr exqc)] ['=' (rune tis %brts exqc)] @@ -13323,7 +13315,7 @@ ^. stet ^. limo :~ [':' (rune col %mccl expi)] ['/' (rune fas %mcfs expa)] - ['<' (rune gal %mcgl exp1)] + ['<' (rune gal %mcgl expz)] ['~' (rune sig %mcsg expi)] [';' (rune mic %mcmc exqc)] == @@ -13372,63 +13364,52 @@ ;~ pfix zap %- stew ^. stet ^. limo - :~ [':' ;~(pfix col (toad expz))] + :~ [':' ;~(pfix col (toad expy))] ['.' ;~(pfix dot (toad |.(loaf(bug |))))] [',' (rune com %zpcm expb)] [';' (rune mic %zpmc expb)] ['>' (rune gar %zpgr expa)] ['<' (rune gal %zpgl exqc)] - ['@' (rune pat %zppt expy)] + ['@' (rune pat %zppt expx)] ['=' (rune tis %zpts expa)] ['?' (rune wut %zpwt hinh)] == == == :: - ++ boog !: :: core arms - %+ knee [p=*term q=*hoon] |. ~+ - ;~ pose - ;~ pfix (jest '++') - ;~ plug - ;~(pfix gap ;~(pose (cold %$ buc) sym)) - ;~(pfix gap loaf) - == - == - :: - %+ cook - |= [b=term d=spec] - [b [%ktcl [%name b d]]] - ;~ pfix (jest '+$') - ;~ plug - ;~(pfix gap sym) - ;~(pfix gap loan) - == - == - :: - %+ cook - |= [b=term c=(list term) e=spec] - ^- [term hoon] - :- b - :+ %brtr - :- %bccl - =- ?>(?=(^ -) -) - :: for each .term in .c, produce $=(term $~(* $-(* *))) - :: ie {term}=mold - :: - %+ turn c - |= =term - ^- spec - =/ tar [%base %noun] - [%bcts term [%bcsg tar [%bchp tar tar]]] - [%ktcl [%made [b c] e]] - ;~ pfix (jest '+*') - ;~ plug - ;~(pfix gap sym) - ;~(pfix gap (ifix [sel ser] (most ace sym))) - ;~(pfix gap loan) - == + ++ boog !: + %+ knee [p=*whit q=*term r=*help s=*hoon] + |.(~+((scye ;~(pose bola boba)))) + ++ bola :: ++ arms + %+ knee [q=*term r=*help s=*hoon] |. ~+ + %+ cook + |= [q=term r=whiz s=hoon] + ?: =(r *whiz) + [q *help s] + [q [[%funk q]~ [r]~] s] + ;~ pfix (jest '++') + ;~ plug + ;~(pfix gap ;~(pose (cold %$ buc) sym)) + apse:docs + ;~(pfix jump loaf) == == + ::TODO consider special casing $% + ++ boba :: +$ arms + %+ knee [q=*term r=*help s=*hoon] |. ~+ + %+ cook + |= [q=term r=whiz s=spec] + ?: =(r *whiz) + [q *help [%ktcl %name q s]] + [q [[%plan q]~ [r]~] [%ktcl %name q s]] + ;~ pfix (jest '+$') + ;~ plug + ;~(pfix gap sym) + apse:docs + ;~(pfix jump loan) + == + == + :: :: parses a or [a b c] or a b c == ++ lynx =/ wid (ifix [sel ser] (most ace sym)) @@ -13446,24 +13427,81 @@ :: lestify |= a=(list term) ?~(a !! a) + :: ++ whap !: :: chapter %+ cook - |= a=(list (pair term hoon)) + |= a=(list (qual whit term help hoon)) + :: separate $helps into their own list to be passed to +glow + =/ [duds=(list help) nude=(list (pair term hoon))] + %+ roll a + |= $: $= bog + (qual whit term help hoon) + :: + $= gob + [duds=(list help) nude=(list (pair term hoon))] + == + =/ [unt=(list help) tag=(list help)] + %+ skid ~(tap by bat.p.bog) |=(=help =(~ cuff.help)) + :- ?: =(*help r.bog) + (weld tag duds.gob) + [r.bog (weld tag duds.gob)] + |- + ?~ unt [[q.bog s.bog] nude.gob] + =. s.bog [%note help/i.unt s.bog] + $(unt t.unt) + :: + %+ glow duds |- ^- (map term hoon) - ?~ a ~ - =+ $(a t.a) + ?~ nude ~ + =+ $(nude t.nude) %+ ~(put by -) - p.i.a - ?: (~(has by -) p.i.a) - [%eror (weld "duplicate arm: +" (trip p.i.a))] - q.i.a - (most muck boog) + p.i.nude + ?: (~(has by -) p.i.nude) + [%eror (weld "duplicate arm: +" (trip p.i.nude))] + q.i.nude + :: + (most mush boog) + :: + :: +glow: moves batch comments to the correct arm + ++ glow + |= [duds=(list help) nude=(map term hoon)] + ^- (map term hoon) + |- + ?~ duds nude + :: if there is no link, its not part of a batch comment + ?~ cuff.i.duds + :: this shouldn't happen yet until we look for cuffs of length >1 + :: but we need to prove that cuff is nonempty anyways + $(duds t.duds) + :: + ::TODO: look past the first link. this probably requires + ::a major rethink on how batch comments work + =/ nom=(unit term) + ?+ i.cuff.i.duds ~ + :: we only support ++ and +$ batch comments right now + :: + ?([%funk *] [%plan *]) + `p.i.cuff.i.duds + == + %= $ + duds t.duds + nude ?~ nom nude + ?. (~(has by nude) u.nom) + :: ~> %slog.[0 leaf+"glow: unmatched link"] + nude + (~(jab by nude) u.nom |=(a=hoon [%note help+i.duds a])) + == :: ++ whip :: chapter declare - ;~ plug - (ifix [cen gap] sym) - whap - == + %+ cook + |= [[a=whit b=term c=whiz] d=(map term hoon)] + ^- [whit (pair term (map term hoon))] + ?. =(*whit a) + [a b d] + ?: =(*whiz c) + [*whit b d] + [%*(. *whit bat (malt [[%chat b]~ [c]~]~)) b d] + ;~(plug (seam ;~(pfix (jest '+|') gap cen sym)) whap) :: ++ wasp :: $brcb aliases ;~ pose @@ -13477,75 +13515,82 @@ ++ wisp !: :: core tail ?. tol fail %+ cook - |= a=(list (pair term (map term hoon))) + |= a=(list [wit=whit wap=(pair term (map term hoon))]) ^- (map term tome) =< p |- ^- (pair (map term tome) (map term hoon)) ?~ a [~ ~] =/ mor $(a t.a) - =. q.i.a - %- ~(urn by q.i.a) + =. q.wap.i.a + %- ~(urn by q.wap.i.a) |= b=(pair term hoon) ^+ +.b + :: tests for duplicate arms between two chapters ?. (~(has by q.mor) p.b) +.b [%eror (weld "duplicate arm: +" (trip p.b))] - :_ (~(uni by q.mor) q.i.a) + :_ (~(uni by q.mor) q.wap.i.a) %+ ~(put by p.mor) - p.i.a - :- *what - ?. (~(has by p.mor) p.i.a) - q.i.a - [[%$ [%eror (weld "duplicate chapter: |" (trip p.i.a))]] ~ ~] + p.wap.i.a + :- %- ~(get by bat.wit.i.a) + ?: (~(has by bat.wit.i.a) [%chat p.wap.i.a]~) + [%chat p.wap.i.a]~ + ~ + ?. (~(has by p.mor) p.wap.i.a) + q.wap.i.a + [[%$ [%eror (weld "duplicate chapter: |" (trip p.wap.i.a))]] ~ ~] :: + ::TODO: allow cores with unnamed chapter as well as named chapters? ;~ pose dun ;~ sfix ;~ pose - (most muck ;~(pfix (jest '+|') ;~(pfix gap whip))) - ;~(plug (stag %$ whap) (easy ~)) + (most mush whip) + ;~(plug (stag *whit (stag %$ whap)) (easy ~)) == gap dun == == :: - ++ toad :: untrap parser exp - =+ har=expa - |@ ++ $ - =+ dur=(ifix [pal par] $:har(tol |)) - ?:(tol ;~(pose ;~(pfix gap $:har(tol &)) dur) dur) - -- + ::TODO: check parser performance + ++ toad :: untrap parser expr + |* har=_expa + =+ dur=(ifix [pal par] $:har(tol |)) + ?. tol + dur + ;~(pose ;~(pfix jump $:har(tol &)) ;~(pfix gap $:har(tol &)) dur) :: ++ rune :: build rune - =+ [dif=*rule tuq=** har=expa] - |@ ++ $ - ;~(pfix dif (stag tuq (toad har))) - -- + |* [dif=rule tuq=* har=_expa] + ;~(pfix dif (stag tuq (toad har))) :: ++ runo :: rune plus - =+ [dif=*rule hil=** tuq=** har=expa] - |@ ++ $ - ;~(pfix dif (stag hil (stag tuq (toad har)))) - -- + |* [dif=rule hil=* tuq=* har=_expa] + ;~(pfix dif (stag hil (stag tuq (toad har)))) + :: ++ runq :: wide or tall if tol |* [wid=rule tal=rule] :: else wide ?. tol wid ;~(pose wid tal) :: - ++ glop ~+((glue mash)) :: separated by space - ++ gunk ~+((glue muck)) :: separated list ++ butt |* zor=rule :: closing == if tall ?:(tol ;~(sfix zor ;~(plug gap duz)) zor) ++ ulva |* zor=rule :: closing -- and tall ?.(tol fail ;~(sfix zor ;~(plug gap dun))) - ++ hank (most muck loaf) :: gapped hoons - ++ hunk (most muck loan) :: gapped specs + ++ glop ~+((glue mash)) :: separated by space + ++ gunk ~+((glue muck)) :: separated list + ++ goop ~+((glue mush)) :: separator list & docs + ++ hank (most mush loaf) :: gapped hoons + ++ hunk (most mush loan) :: gapped specs + ++ jump ;~(pose leap:docs gap) :: gap before docs + ++ loaf ?:(tol tall wide) :: hoon + ++ loan ?:(tol till wyde) :: spec ++ lore (sear |=(=hoon ~(flay ap hoon)) loaf) :: skin - ++ loaf ?:(tol tall wide) :: tall/wide hoon - ++ loan ?:(tol till wyde) :: tall/wide spec ++ lomp ;~(plug sym (punt ;~(pfix tis wyde))) :: typeable name ++ mash ?:(tol gap ;~(plug com ace)) :: list separator + ++ muss ?:(tol jump ;~(plug com ace)) :: list w/ doccords ++ muck ?:(tol gap ace) :: general separator + ++ mush ?:(tol jump ace) :: separator w/ docs ++ teak %+ knee *tiki |. ~+ :: wing or hoon =+ ^= gub |= [a=term b=$%([%& p=wing] [%| p=hoon])] @@ -13577,57 +13622,55 @@ :: (stag %| (stag ~ tall)) == - ++ rack (most mash ;~(gunk loaf loaf)) :: list [hoon hoon] - ++ ruck (most mash ;~(gunk loan loaf)) :: list [spec hoon] - ++ rick (most mash ;~(gunk rope loaf)) :: list [wing hoon] - :: - :: hoon contents + ++ rack (most muss ;~(goop loaf loaf)) :: list [hoon hoon] + ++ ruck (most muss ;~(goop loan loaf)) :: list [spec hoon] + ++ rick (most mash ;~(goop rope loaf)) :: list [wing hoon] + :: hoon contents :: ++ expa |.(loaf) :: one hoon - ++ expb |.(;~(gunk loaf loaf)) :: two hoons - ++ expc |.(;~(gunk loaf loaf loaf)) :: three hoons - ++ expd |.(;~(gunk loaf loaf loaf loaf)) :: four hoons + ++ expb |.(;~(goop loaf loaf)) :: two hoons + ++ expc |.(;~(goop loaf loaf loaf)) :: three hoons + ++ expd |.(;~(goop loaf loaf loaf loaf)) :: four hoons ++ expe |.(wisp) :: core tail - ++ expf |.(;~(gunk ;~(pfix cen sym) loaf)) :: %term and hoon - ++ expg |.(;~(gunk lomp loaf loaf)) :: term/spec, two hoons - ++ exph |.((butt ;~(gunk rope rick))) :: wing, [spec hoon]s - ++ expi |.((butt ;~(gunk loaf hank))) :: one or more hoons - ++ expj |.(;~(gunk lore loaf)) :: skin and hoon - ++ expk |.(;~(gunk loaf ;~(plug loaf (easy ~)))) :: list of two hoons - ++ expl |.(;~(gunk sym loaf loaf)) :: term, two hoons + ++ expf |.(;~(goop ;~(pfix cen sym) loaf)) :: %term and hoon + ++ expg |.(;~(goop lomp loaf loaf)) :: term/spec, two hoons + ++ exph |.((butt ;~(gunk rope rick))) :: wing, [wing hoon]s + ++ expi |.((butt ;~(goop loaf hank))) :: one or more hoons + ++ expj |.(;~(goop lore loaf)) :: skin and hoon + :: ++ expk |.(;~(gunk loaf ;~(plug loaf (easy ~)))):: list of two hoons + :: ++ expl |.(;~(gunk sym loaf loaf)) :: term, two hoons ++ expm |.((butt ;~(gunk rope loaf rick))) :: several [spec hoon]s ++ expn |. ;~ gunk rope loaf :: wing, hoon, ;~(plug loaf (easy ~)) :: list of one hoon == :: - ++ expo |.(;~(gunk wise loaf loaf)) :: =; - ++ expp |.(;~(gunk (butt rick) loaf)) :: [wing hoon]s, hoon - ++ expq |.(;~(gunk rope loaf loaf)) :: wing and two hoons - ++ expr |.(;~(gunk loaf wisp)) :: hoon and core tail + ++ expo |.(;~(goop wise loaf loaf)) :: =; + ++ expp |.(;~(goop (butt rick) loaf)) :: [wing hoon]s, hoon + ++ expq |.(;~(goop rope loaf loaf)) :: wing and two hoons + ++ expr |.(;~(goop loaf wisp)) :: hoon and core tail ++ exps |.((butt hank)) :: closed gapped hoons ++ expt |.(;~(gunk wise rope loaf loaf)) :: =^ ++ expu |.(;~(gunk rope loaf (butt hank))) :: wing, hoon, hoons - ++ expv |.((butt rick)) :: just changes - ++ expw |.(;~(gunk rope loaf loaf loaf)) :: wing and three hoons - ++ expx |.(;~(gunk loaf wisp)) :: hoon and core tail - ++ expy |.(;~(gunk ropa loaf loaf)) :: wings and two hoons - ++ expz |.(loaf(bug &)) :: hoon with tracing - ++ exp1 |.(;~(gunk loan loaf loaf loaf)) :: spec and three hoons - :: spec contents + :: ++ expv |.((butt rick)) :: just changes + ++ expw |.(;~(goop rope loaf loaf loaf)) :: wing and three hoons + ++ expx |.(;~(goop ropa loaf loaf)) :: wings and two hoons + ++ expy |.(loaf(bug &)) :: hoon with tracing + ++ expz |.(;~(goop loan loaf loaf loaf)) :: spec and three hoons + :: spec contents :: - ++ exqa |.(loan) :: one hoon - ++ exqb |.(;~(gunk loan loan)) :: two specs - ++ exqc |.(;~(gunk loan loaf)) :: spec then hoon - ++ exqd |.(;~(gunk loaf loan)) :: hoon then spec - ++ exqe |.(;~(gunk lynx loan)) :: list of names then spec + ++ exqa |.(loan) :: one spec + ++ exqb |.(;~(goop loan loan)) :: two specs + ++ exqc |.(;~(goop loan loaf)) :: spec then hoon + ++ exqd |.(;~(goop loaf loan)) :: hoon then spec + ++ exqe |.(;~(goop lynx loan)) :: list of names then spec ++ exqs |.((butt hunk)) :: closed gapped specs - ++ exqg |.(;~(gunk sym loan)) :: term and spec - ++ exqk |.(;~(gunk loaf ;~(plug loan (easy ~)))) :: hoon with one spec - ++ exqr |.(;~(gunk loan ;~(plug wasp wisp))) :: spec/aliases?/tail + ++ exqg |.(;~(goop sym loan)) :: term and spec + ::++ exqk |.(;~(goop loaf ;~(plug loan (easy ~)))):: hoon with one spec ++ exqn |.(;~(gunk loan (stag %cltr (butt hank)))):: autoconsed hoons - ++ exqw |.(;~(gunk loaf loan)) :: hoon and spec - ++ exqx |.(;~(gunk loaf loan loan)) :: hoon, two specs - ++ exqy |.(;~(gunk loaf loan loan loan)) :: hoon, three specs - ++ exqz |.(;~(gunk loaf (butt hunk))) :: hoon, n specs + ++ exqr |.(;~(gunk loan ;~(plug wasp wisp))) :: spec/aliases?/tail + ::++ exqw |.(;~(goop loaf loan)) :: hoon and spec + ++ exqx |.(;~(goop loaf loan loan)) :: hoon, two specs + ++ exqy |.(;~(goop loaf loan loan loan)) :: hoon, three specs + ++ exqz |.(;~(goop loaf (butt hunk))) :: hoon, n specs :: :: tiki expansion for %wt runes :: @@ -13653,22 +13696,22 @@ (~(wthx ah b) a) ;~(gunk lore teak) :: - :: hint syntax + :: hint syntax :: - ++ hinb |.(;~(gunk bont loaf)) :: hint and hoon + ++ hinb |.(;~(goop bont loaf)) :: hint and hoon ++ hinc |. :: optional =en, hoon - ;~(pose ;~(gunk bony loaf) (stag ~ loaf)) :: - ++ hind |.(;~(gunk bonk loaf bonz loaf)) :: jet hoon "bon"s hoon - ++ hine |.(;~(gunk bonk loaf)) :: jet-hint and hoon + ;~(pose ;~(goop bony loaf) (stag ~ loaf)) :: + ++ hind |.(;~(gunk bonk loaf ;~(goop bonz loaf))) :: jet hoon "bon"s hoon + ++ hine |.(;~(goop bonk loaf)) :: jet-hint and hoon ++ hinf |. :: 0-3 >s, two hoons ;~ pose - ;~(gunk (cook lent (stun [1 3] gar)) loaf loaf) - (stag 0 ;~(gunk loaf loaf)) + ;~(goop (cook lent (stun [1 3] gar)) loaf loaf) + (stag 0 ;~(goop loaf loaf)) == ++ hing |. :: 0-3 >s, three hoons ;~ pose - ;~(gunk (cook lent (stun [1 3] gar)) loaf loaf loaf) - (stag 0 ;~(gunk loaf loaf loaf)) + ;~(goop (cook lent (stun [1 3] gar)) loaf loaf loaf) + (stag 0 ;~(goop loaf loaf loaf)) == ++ bonk :: jet signature ;~ pfix cen @@ -13680,7 +13723,7 @@ == == ++ hinh |. :: 1/2 numbers, hoon - ;~ gunk + ;~ goop ;~ pose dem (ifix [sel ser] ;~(plug dem ;~(pfix ace dem))) @@ -13800,12 +13843,13 @@ [%spec spec %base %noun] wyde == + :: ++ tall :: full tall form %+ knee *hoon - |.(~+((wart ;~(pose expression:(norm &) long lute apex:(sail &))))) + |.(~+((wart (clad ;~(pose expression:(norm &) long lute apex:(sail &)))))) ++ till :: mold tall form %+ knee *spec - |.(~+((wert ;~(pose structure:(norm &) scad)))) + |.(~+((wert (coat ;~(pose structure:(norm &) scad))))) ++ wede :: wide bulb :: XX: lus deprecated :: @@ -13872,8 +13916,9 @@ ~< %slog.[0 leaf/"ride: compiled"] (~(mint ut typ) %noun gen) :: -:::: 5e: molds and mold builders - :: +:: 5e: molds and mold builders ++| %molds-and-mold-builders +:: +$ mane $@(@tas [@tas @tas]) :: XML name+space +$ manx $~([[%$ ~] ~] [g=marx c=marl]) :: dynamic XML node +$ marl (list manx) :: XML node list @@ -13888,8 +13933,8 @@ +$ spur path :: ship desk case spur +$ time @da :: galactic time :: -:::: 5f: profiling support (XX move) - :: +:: 5f: profiling support (XX move) ++| %profiling-support :: ++ pi-heck |= [nam=@tas day=doss] diff --git a/pkg/arvo/sys/lull.hoon b/pkg/arvo/sys/lull.hoon index 827cad33d..8ddc9d0c5 100644 --- a/pkg/arvo/sys/lull.hoon +++ b/pkg/arvo/sys/lull.hoon @@ -1,9 +1,9 @@ :: /sys/lull :: %lull: arvo structures -:: +!: => ..part |% -++ lull %329 +++ lull %325 :: :: :: :::: :: :: (1) models :: :: :: @@ -351,6 +351,8 @@ :: %hear: packet from unix :: %heed: track peer's responsiveness; gives %clog if slow :: %jilt: stop tracking peer's responsiveness + :: %cork: request to delete message flow + :: %kroc: request to delete stale message flows :: %plea: request to send message :: :: System and Lifecycle Tasks @@ -359,7 +361,10 @@ :: %init: vane boot :: %prod: re-send a packet per flow, to all peers if .ships is ~ :: %sift: limit verbosity to .ships + :: %snub: set packet blacklist to .ships :: %spew: set verbosity toggles + :: %cong: adjust congestion control parameters + :: %stir: recover from timer desync :: %trim: release memory :: %vega: kernel reload notification :: @@ -367,13 +372,17 @@ $% [%hear =lane =blob] [%heed =ship] [%jilt =ship] + [%cork =ship] + [%kroc dry=?] $>(%plea vane-task) :: $>(%born vane-task) $>(%init vane-task) [%prod ships=(list ship)] [%sift ships=(list ship)] + [%snub ships=(list ship)] [%spew veb=(list verb)] + [%cong msg=@ud mem=@ud] [%stir arg=@t] $>(%trim vane-task) $>(%vega vane-task) @@ -432,7 +441,7 @@ +$ address @uxaddress :: $verb: verbosity flag for ames :: - +$ verb ?(%snd %rcv %odd %msg %ges %for %rot) + +$ verb ?(%snd %rcv %odd %msg %ges %for %rot %kay) :: $blob: raw atom to or from unix, representing a packet :: +$ blob @uxblob @@ -511,6 +520,9 @@ :: entry and emit a nack to the local vane that asked us to send :: the message. :: heeds: listeners for %clog notifications + :: closing: bones closed on the sender side + :: corked: bones closed on both sender and receiver + :: krocs: bones that need to be sent again to the publisher :: +$ peer-state $: $: =symmetric-key @@ -526,6 +538,9 @@ rcv=(map bone message-sink-state) nax=(set [=bone =message-num]) heeds=(set duct) + closing=(set bone) + corked=(set bone) + krocs=(set bone) == :: $qos: quality of service; how is our connection to a peer doing? :: @@ -744,9 +759,9 @@ [%hill p=(list @tas)] :: mount points [%done error=(unit error:ames)] :: ames message (n)ack [%mere p=(each (set path) (pair term tang))] :: merge result - [%note p=@tD q=tank] :: debug message [%ogre p=@tas] :: delete mount point [%rule red=dict wit=dict] :: node r+w permissions + [%tire p=(each rock:tire wave:tire)] :: app state [%writ p=riot] :: response [%wris p=[%da p=@da] q=(set (pair care path))] :: many changes == :: @@ -776,12 +791,17 @@ [%park des=desk yok=yoki ran=rang] :: synchronous commit [%perm des=desk pax=path rit=rite] :: change permissions [%pork ~] :: resume commit + [%prep lat=(map lobe page)] :: prime clay store + [%rein des=desk ren=rein] :: extra apps [%stir arg=*] :: debug + [%tire p=(unit ~)] :: app state subscribe [%tomb =clue] :: tombstone specific $>(%trim vane-task) :: trim state $>(%vega vane-task) :: report upgrade [%warp wer=ship rif=riff] :: internal file req [%werp who=ship wer=ship rif=riff-any] :: external file req + [%wick ~] :: try upgrade + [%zest des=desk liv=zest] :: live $>(%plea vane-task) :: ames request == :: :: :: @@ -814,12 +834,34 @@ [%worn =ship =desk =tako =norm] :: set commit norm [%seek =ship =desk =cash] :: fetch source blobs == :: - +$ cone :: domes - %+ map [ship desk] :: - [dome tom=(map tako norm) nor=norm] :: + +$ cone (map [ship desk] dome) :: domes + :: + :: Desk state. + :: + :: Includes a checked-out ankh with current content, most recent version, map + :: of all version numbers to commit hashes (commits are in hut.rang), and map + :: of labels to version numbers. + :: + :: `mim` is a cache of the content in the directories that are mounted + :: to unix. Often, we convert to/from mime without anything really + :: having changed; this lets us short-circuit that in some cases. + :: Whenever you give an `%ergo`, you must update this. + :: + +$ dome + $: let=aeon :: top id + hit=(map aeon tako) :: versions by id + lab=(map @tas aeon) :: labels + tom=(map tako norm) :: tomb policies + nor=norm :: default policy + mim=(map path mime) :: mime cache + fod=flue :: ford cache + wic=(map weft yoki) :: commit-in-waiting + liv=zest :: running agents + ren=rein :: force agents on/off + == :: +$ crew (set ship) :: permissions group +$ dict [src=path rul=real] :: effective permission - +$ dome :: project state + +$ domo :: project state $: let=@ud :: top id hit=(map @ud tako) :: changes by id lab=(map @tas @ud) :: labels @@ -866,6 +908,17 @@ +$ norm (axal ?) :: tombstone policy +$ open $-(path vase) :: get prelude +$ page ^page :: export for compat + +$ pour :: ford build w/content + $% [%file =path] + [%nave =mark] + [%dais =mark] + [%cast =mars] + [%tube =mars] + :: leafs + :: + [%vale =path =lobe] + [%arch =path =(map path lobe)] + == +$ rang :: repository $: hut=(map tako yaki) :: changes lat=(map lobe page) :: data @@ -886,6 +939,7 @@ who=(pair (set ship) (map @ta crew)) :: == :: +$ regs (map path rule) :: rules for paths + +$ rein (map dude:gall ?) :: extra apps +$ riff [p=desk q=(unit rave)] :: request+desist +$ riff-any :: $% [%1 =riff] :: @@ -899,6 +953,13 @@ +$ rule [mod=?(%black %white) who=(set whom)] :: node permission +$ rump [p=care q=case r=@tas s=path] :: relative path +$ saba [p=ship q=@tas r=moar s=dome] :: patch+merge + +$ soak :: ford result + $% [%cage =cage] + [%vase =vase] + [%arch dir=(map @ta vase)] + [%dais =dais] + [%tube =tube] + == +$ soba (list [p=path q=miso]) :: delta +$ suba (list [p=path q=misu]) :: delta +$ tako @uvI :: yaki ref @@ -909,6 +970,9 @@ [%| p=(list a) q=(list a)] :: p -> q[chunk] == :: ++ urge |*(a=mold (list (unce a))) :: list change + +$ waft :: kelvin range + $^ [[%1 ~] p=(set weft)] :: + weft :: +$ whom (each ship @ta) :: ship or named crew +$ yoki (each yuki yaki) :: commit +$ yuki :: proto-commit @@ -921,11 +985,111 @@ r=tako :: self-reference t=@da :: date == :: + +$ zest $~(%dead ?(%dead %live %held)) :: how live + :: :: + ++ tire :: app state + |% :: + +$ rock (map desk [=zest wic=(set weft)]) :: + +$ wave :: + $% [%wait =desk =weft] :: blocked + [%warp =desk =weft] :: unblocked + [%zest =desk =zest] :: running + == :: + :: + ++ wash :: patch + |= [=rock =wave] + ^+ rock + ?- -.wave + %wait + =/ got=[=zest wic=(set weft)] + (~(gut by rock) desk.wave *zest ~) + (~(put by rock) desk.wave got(wic (~(put in wic.got) weft.wave))) + :: + %warp + %- ~(run by rock) + |= [=zest wic=(set weft)] + [zest (~(del in wic) weft.wave)] + :: + %zest + ?: ?=(%dead zest.wave) + (~(del by rock) desk.wave) + =/ got=[=zest wic=(set weft)] + (~(gut by rock) desk.wave *zest ~) + (~(put by rock) desk.wave got(zest zest.wave)) + == + :: + ++ walk :: diff + |= [a=rock b=rock] + ^- (list wave) + =/ adds (~(dif by b) a) + =/ dels (~(dif by a) b) + =/ bots (~(int by a) b) + ;: welp + ^- (list wave) + %- zing + %+ turn ~(tap by adds) + |= [=desk =zest wic=(set weft)] + ^- (list wave) + :- [%zest desk zest] + %+ turn ~(tap in wic) + |= =weft + [%wait desk weft] + :: + ^- (list wave) + %+ turn ~(tap by dels) + |= [=desk =zest wic=(set weft)] + ^- wave + [%zest desk %dead] + :: + ^- (list wave) + %- zing + %+ turn ~(tap by bots) + |= [=desk * *] + ^- (list wave) + =/ aa (~(got by a) desk) + =/ bb (~(got by b) desk) + =/ wadds (~(dif in wic.bb) wic.aa) + =/ wdels (~(dif in wic.aa) wic.bb) + ;: welp + ?: =(zest.aa zest.bb) + ~ + [%zest desk zest.bb]~ + :: + %+ turn ~(tap by wadds) + |= =weft + ^- wave + [%wait desk weft] + :: + %+ turn ~(tap by wdels) + |= =weft + ^- wave + [%warp desk weft] + == + == + -- :: :: +page-to-lobe: hash a page to get a lobe. :: ++ page-to-lobe |=(page (shax (jam +<))) :: + ++ cord-to-waft + |= =cord + ^- waft + =/ wefts=(list weft) + %+ turn (rash cord (star (ifix [gay gay] tall:vast))) + |= =hoon + !<(weft (slap !>(~) hoon)) + ?: ?=([* ~] wefts) + i.wefts + [[%1 ~] (sy wefts)] + :: + ++ waft-to-wefts + |= kal=waft + ^- (set weft) + ?^ -.kal + p.kal + [kal ~ ~] + :: :: +make-yaki: make commit out of a list of parents, content, and date. :: ++ make-yaki @@ -935,6 +1099,55 @@ %^ cat 7 (sham [%yaki (roll p add) q t]) (sham [%tako (roll p add) q t]) [p q has t] + :: + :: $leak: ford cache key + :: + :: This includes all build inputs, including transitive dependencies, + :: recursively. + :: + +$ leak + $~ [*pour ~] + $: =pour + deps=(set leak) + == + :: + :: $flow: global ford cache + :: + :: Refcount includes references from other items in the cache, and + :: from spills in each desk + :: + :: This is optimized for minimizing the number of rebuilds, and given + :: that, minimizing the amount of memory used. It is relatively slow + :: to lookup, because generating a cache key can be fairly slow (for + :: files, it requires parsing; for tubes, it even requires building + :: the marks). + :: + +$ flow (map leak [refs=@ud =soak]) + :: + :: Per-desk ford cache + :: + :: Spill is the set of "roots" we have into the global ford cache. + :: We add a root for everything referenced directly or indirectly on + :: a desk, then invalidate them on commit only if their dependencies + :: change. + :: + :: Sprig is a fast-lookup index over the global ford cache. The only + :: goal is to make cache hits fast. + :: + +$ flue [spill=(set leak) sprig=(map mist [=leak =soak])] + :: + :: Ford build without content. + :: + +$ mist + $% [%file =path] + [%nave =mark] + [%dais =mark] + [%cast =mars] + [%tube =mars] + [%vale =path] + [%arch =path] + == + :: :: $pile: preprocessed hoon source file :: :: /- sur-file :: surface imports from /sur @@ -1038,39 +1251,47 @@ ++ dill ^? |% +$ gift :: out result <-$ - $% [%bbye ~] :: reset prompt - [%blit p=(list blit)] :: terminal output - [%burl p=@t] :: activate url + $% [%blit p=(list blit)] :: terminal output [%logo ~] :: logout [%meld ~] :: unify memory [%pack ~] :: compact memory [%trim p=@ud] :: trim kernel state + [%logs =told] :: system output == :: +$ task :: in request ->$ $~ [%vega ~] :: - $% [%belt p=belt] :: terminal input - [%blew p=blew] :: terminal config - [%boot lit=? p=*] :: weird %dill boot + $% [%boot lit=? p=*] :: weird %dill boot [%crop p=@ud] :: trim kernel state - [%crud p=@tas q=(list tank)] :: print error - [%flee session=~] :: unwatch session [%flog p=flog] :: wrapped error - [%flow p=@tas q=(list gill:gall)] :: terminal config - [%hail ~] :: terminal refresh [%heft ~] :: memory report - [%hook ~] :: this term hung up - [%harm ~] :: all terms hung up $>(%init vane-task) :: after gall ready + [%logs p=(unit ~)] :: watch system output [%meld ~] :: unify memory - [%noop ~] :: no operation [%pack ~] :: compact memory - [%talk p=tank] :: - [%text p=tape] :: - [%view session=~] :: watch session blits + [%seat =desk] :: install desk + [%shot ses=@tas task=session-task] :: task for session $>(%trim vane-task) :: trim state $>(%vega vane-task) :: report upgrade [%verb ~] :: verbose mode - [%knob tag=term level=?(%hush %soft %loud)] :: error verbosity + [%knob tag=term level=?(%hush %soft %loud)] :: deprecated removeme + session-task :: for default session + told :: system output + == :: + :: :: + +$ session-task :: session request + $% [%belt p=belt] :: terminal input + [%blew p=blew] :: terminal config + [%flee ~] :: unwatch session + [%hail ~] :: terminal refresh + [%open p=dude:gall q=(list gill:gall)] :: setup session + [%shut ~] :: close session + [%view ~] :: watch session blits + == :: + :: :: + +$ told :: system output + $% [%crud p=@tas q=tang] :: error + [%talk p=(list tank)] :: tanks (in order) + [%text p=tape] :: tape == :: :: :::: :: (1d2) @@ -1078,69 +1299,56 @@ +$ blew [p=@ud q=@ud] :: columns rows +$ belt :: client input $? bolt :: simple input - $% [%mod mod=?(%ctl %met %hyp) key=bolt] :: w/ modifier + [%mod mod=?(%ctl %met %hyp) key=bolt] :: w/ modifier [%txt p=(list @c)] :: utf32 text ::TODO consider moving %hey, %rez, %yow here :: - ::TMP forward backwards-compatibility :: - :: :: - [%ctl p=@c] :: - [%met p=@c] :: - == == :: + == :: +$ bolt :: simple input $@ @c :: simple keystroke $% [%aro p=?(%d %l %r %u)] :: arrow key [%bac ~] :: true backspace [%del ~] :: true delete - [%hit r=@ud c=@ud] :: mouse click + [%hit x=@ud y=@ud] :: mouse click [%ret ~] :: return == :: - +$ blit :: old blit + +$ blit :: client output $% [%bel ~] :: make a noise [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%klr p=stub] :: set styled line - [%lin p=(list @c)] :: set current line - [%mor ~] :: newline + [%hop p=$@(@ud [x=@ud y=@ud])] :: set cursor col/pos + [%klr p=stub] :: put styled + [%mor p=(list blit)] :: multiple blits + [%nel ~] :: newline + [%put p=(list @c)] :: put text at cursor [%sag p=path q=*] :: save to jamfile [%sav p=path q=@] :: save to file [%url p=@t] :: activate url + [%wyp ~] :: wipe cursor line == :: - +$ dill-belt :: new belt - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%cru p=@tas q=(list tank)] :: echo error - [%ctl p=@] :: control-key - [%del ~] :: true delete + +$ dill-belt :: arvo input + $% belt :: client input + [%cru p=@tas q=(list tank)] :: errmsg (deprecated) [%hey ~] :: refresh - [%met p=@] :: meta-key - [%ret ~] :: return [%rez p=@ud q=@ud] :: resize, cols, rows - [%txt p=(list @c)] :: utf32 text [%yow p=gill:gall] :: connect to app == :: - +$ dill-blit :: new blit - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%klr p=stub] :: styled text - [%mor p=(list dill-blit)] :: multiple blits - [%pom p=stub] :: styled prompt - [%pro p=(list @c)] :: show as cursor+line + +$ dill-blit :: arvo output + $% blit :: client output [%qit ~] :: close console - [%out p=(list @c)] :: send output line - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - [%url p=@t] :: activate url == :: +$ flog :: sent to %dill $% [%crop p=@ud] :: trim kernel state - [%crud p=@tas q=(list tank)] :: + $>(%crud told) :: [%heft ~] :: [%meld ~] :: unify memory [%pack ~] :: compact memory - [%text p=tape] :: + $>(%text told) :: [%verb ~] :: verbose mode == :: + :: :: + +$ poke :: dill to userspace + $: ses=@tas :: target session + dill-belt :: input + == :: -- ::dill :: :::: :::: ++eyre :: (1e) http-server @@ -1154,6 +1362,9 @@ :: so we can apply configurations on a per-site basis :: [%set-config =http-config] + :: sessions: valid authentication cookie strings + :: + [%sessions ses=(set @t)] :: response: response to an event from earth :: [%response =http-event:http] @@ -1393,6 +1604,9 @@ :: gall scry endpoint :: [%scry ~] + :: respond with the @p the requester is authenticated as + :: + [%name ~] :: respond with the default file not found page :: [%four-oh-four ~] @@ -1641,7 +1855,6 @@ +$ gift :: outgoing result $% [%boon payload=*] :: ames response [%done error=(unit error:ames)] :: ames message (n)ack - [%onto p=(each suss tang)] :: about agent [%unto p=unto] :: == :: +$ task :: incoming request @@ -1650,16 +1863,20 @@ [%sear =ship] :: clear pending queues [%jolt =desk =dude] :: (re)start agent [%idle =dude] :: suspend agent + [%load =load] :: load agent [%nuke =dude] :: delete agent + [%doff dude=(unit dude) ship=(unit ship)] :: kill subscriptions + [%rake dude=(unit dude) all=?] :: reclaim old subs $>(%init vane-task) :: set owner $>(%trim vane-task) :: trim state $>(%vega vane-task) :: report upgrade $>(%plea vane-task) :: network request + [%spew veb=(list verb)] :: set verbosity + [%sift dudes=(list dude)] :: per agent == :: +$ bitt (map duct (pair ship path)) :: incoming subs - +$ boat :: outgoing subs - %+ map [=wire =ship =term] :: - [acked=? =path] :: + +$ boat (map [=wire =ship =term] [acked=? =path]) :: outgoing subs + +$ boar (map [=wire =ship =term] nonce=@) :: and their nonces +$ bowl :: standard app state $: $: our=ship :: host src=ship :: guest @@ -1675,6 +1892,7 @@ == == :: +$ dude term :: server identity +$ gill (pair ship term) :: general contact + +$ load (list [=dude =beak =agent]) :: loadout +$ scar :: opaque duct $: p=@ud :: bone sequence q=(map duct bone) :: by duct @@ -1695,6 +1913,9 @@ $% [%raw-fact =mark =noun] sign:agent == + :: TODO: add more flags? + :: + +$ verb ?(%odd) :: :: +agent: app core :: @@ -2112,10 +2333,11 @@ $~ [%vega ~] :: $% $>(%born vane-task) :: new unix process [%done ~] :: socket closed - :: XX mark ignored - :: + :: TODO mark ignored :: + :: :: [%fard p=(fyrd cage)] :: in-arvo thread [%fyrd p=(fyrd cast)] :: external thread + [%lard =bear =shed] :: inline thread $>(%trim vane-task) :: trim state $>(%vega vane-task) :: report upgrade == :: @@ -2124,8 +2346,200 @@ +$ bear $@(desk beak) :: partial $beak +$ cast (pair mark page) :: output mark + input ++ fyrd |$ [a] [=bear name=term args=a] :: thread run request + :: :: + +$ shed _*form:(strand:rand ,vase) :: compute vase -- ::khan :: +++ rand :: computation + |% + +$ card card:agent:gall + +$ input + $% [%poke =cage] + [%sign =wire =sign-arvo] + [%agent =wire =sign:agent:gall] + [%watch =path] + == + +$ strand-input [=bowl in=(unit input)] + +$ tid @tatid + +$ bowl + $: our=ship + src=ship + tid=tid + mom=(unit tid) + wex=boat:gall + sup=bitt:gall + eny=@uvJ + now=@da + byk=beak + == + :: + :: cards: cards to send immediately. These will go out even if a + :: later stage of the computation fails, so they shouldn't have + :: any semantic effect on the rest of the system. + :: Alternately, they may record an entry in contracts with + :: enough information to undo the effect if the computation + :: fails. + :: wait: don't move on, stay here. The next sign should come back + :: to this same callback. + :: skip: didn't expect this input; drop it down to be handled + :: elsewhere + :: cont: continue computation with new callback. + :: fail: abort computation; don't send effects + :: done: finish computation; send effects + :: + ++ strand-output-raw + |* a=mold + $~ [~ %done *a] + $: cards=(list card) + $= next + $% [%wait ~] + [%skip ~] + [%cont self=(strand-form-raw a)] + [%fail err=(pair term tang)] + [%done value=a] + == + == + :: + ++ strand-form-raw + |* a=mold + $-(strand-input (strand-output-raw a)) + :: + :: Abort strand computation with error message + :: + ++ strand-fail + |= err=(pair term tang) + |= strand-input + [~ %fail err] + :: + :: Asynchronous transcaction monad. + :: + :: Combo of four monads: + :: - Reader on input + :: - Writer on card + :: - Continuation + :: - Exception + :: + ++ strand + |* a=mold + |% + ++ output (strand-output-raw a) + :: + :: Type of an strand computation. + :: + ++ form (strand-form-raw a) + :: + :: Monadic pure. Identity computation for bind. + :: + ++ pure + |= arg=a + ^- form + |= strand-input + [~ %done arg] + :: + :: Monadic bind. Combines two computations, associatively. + :: + ++ bind + |* b=mold + |= [m-b=(strand-form-raw b) fun=$-(b form)] + ^- form + |= input=strand-input + =/ b-res=(strand-output-raw b) + (m-b input) + ^- output + :- cards.b-res + ?- -.next.b-res + %wait [%wait ~] + %skip [%skip ~] + %cont [%cont ..$(m-b self.next.b-res)] + %fail [%fail err.next.b-res] + %done [%cont (fun value.next.b-res)] + == + :: + :: The strand monad must be evaluted in a particular way to maintain + :: its monadic character. +take:eval implements this. + :: + ++ eval + |% + :: Indelible state of a strand + :: + +$ eval-form + $: =form + == + :: + :: Convert initial form to eval-form + :: + ++ from-form + |= =form + ^- eval-form + form + :: + :: The cases of results of +take + :: + +$ eval-result + $% [%next ~] + [%fail err=(pair term tang)] + [%done value=a] + == + :: + ++ validate-mark + |= [in=* =mark =bowl] + ^- cage + =+ .^ =dais:clay %cb + /(scot %p our.bowl)/[q.byk.bowl]/(scot %da now.bowl)/[mark] + == + =/ res (mule |.((vale.dais in))) + ?: ?=(%| -.res) + ~| %spider-mark-fail + (mean leaf+"spider: ames vale fail {}" p.res) + [mark p.res] + :: + :: Take a new sign and run the strand against it + :: + ++ take + :: cards: accumulate throughout recursion the cards to be + :: produced now + =| cards=(list card) + |= [=eval-form =strand-input] + ^- [[(list card) =eval-result] _eval-form] + =* take-loop $ + =. in.strand-input + ?~ in.strand-input ~ + =/ in u.in.strand-input + ?. ?=(%agent -.in) `in + ?. ?=(%fact -.sign.in) `in + :: + :- ~ + :^ %agent wire.in %fact + (validate-mark q.q.cage.sign.in p.cage.sign.in bowl.strand-input) + :: run the strand callback + :: + =/ =output (form.eval-form strand-input) + :: add cards to cards + :: + =. cards + %+ welp + cards + :: XX add tag to wires? + cards.output + :: case-wise handle next steps + :: + ?- -.next.output + %wait [[cards %next ~] eval-form] + %skip [[cards %next ~] eval-form] + %fail [[cards %fail err.next.output] eval-form] + %done [[cards %done value.next.output] eval-form] + %cont + :: recurse to run continuation with initialization input + :: + %_ take-loop + form.eval-form self.next.output + strand-input [bowl.strand-input ~] + == + == + -- + -- + -- ::strand +:: +$ gift-arvo :: out result <-$ $~ [%doze ~] $% gift:ames @@ -2208,9 +2622,6 @@ :: %ames: hear packet :: $>(%hear task:ames) - :: %dill: hangup - :: - $>(%hook task:dill) :: %clay: external edit :: $>(%into task:clay) @@ -2219,6 +2630,9 @@ :: TODO: make $yuki an option for %into? :: $>(%park task:clay) + :: %clay: load blob store + :: + $>(%prep task:clay) :: %eyre: learn ports of live http servers :: $>(%live task:eyre) @@ -2231,6 +2645,9 @@ :: %eyre: starts handling an backdoor http request :: $>(%request-local task:eyre) + :: %dill: close session + :: + $>(%shut task:dill) :: %behn: wakeup :: $>(%wake task:behn) diff --git a/pkg/arvo/sys/vane/ames.hoon b/pkg/arvo/sys/vane/ames.hoon index b2b4f8c9b..fcf539a44 100644 --- a/pkg/arvo/sys/vane/ames.hoon +++ b/pkg/arvo/sys/vane/ames.hoon @@ -102,7 +102,9 @@ ges=`?`%.n :: congestion control for=`?`%.n :: packet forwarding rot=`?`%.n :: routing attempts + kay=`?`%.n :: is ok/not responding == +=/ packet-size 13 => ~% %ames ..part ~ |% @@ -121,14 +123,14 @@ :: +qos-update-text: notice text for if connection state changes :: ++ qos-update-text - |= [=ship old=qos new=qos] + |= [=ship old=qos new=qos k=? ships=(set ship)] ^- (unit tape) :: ?+ [-.old -.new] ~ [%unborn %live] `"; {(scow %p ship)} is your neighbor" - [%dead %live] `"; {(scow %p ship)} is ok" - [%live %dead] `"; {(scow %p ship)} not responding still trying" - [%unborn %dead] `"; {(scow %p ship)} not responding still trying" + [%dead %live] ((trace k ship ships |.("is ok")) ~) + [%live %dead] ((trace k ship ships |.("not responding still trying")) ~) + [%unborn %dead] ((trace k ship ships |.("not responding still trying")) ~) [%live %unborn] `"; {(scow %p ship)} has sunk" [%dead %unborn] `"; {(scow %p ship)} has sunk" == @@ -155,7 +157,7 @@ |= [=message-num =message-blob] ^- (list static-fragment) :: - =/ num-fragments=fragment-num (met 13 message-blob) + =/ num-fragments=fragment-num (met packet-size message-blob) =| counter=@ :: |- ^- (list static-fragment) @@ -179,7 +181,7 @@ sorted $(index +(index), sorted [(~(got by fragments) index) sorted]) :: - (cue (rep 13 (flop sorted))) + (cue (rep packet-size (flop sorted))) :: +jim: caching +jam :: ++ jim |=(n=* ~+((jam n))) @@ -438,11 +440,11 @@ :: =? meat.shut-packet ?& ?=(%& -.meat.shut-packet) - (gth (met 13 fragment.p.meat.shut-packet) 1) + (gth (met packet-size fragment.p.meat.shut-packet) 1) == %_ meat.shut-packet fragment.p - (cut 13 [[fragment-num 1] fragment]:p.meat.shut-packet) + (cut packet-size [[fragment-num 1] fragment]:p.meat.shut-packet) == :: =/ vec ~[sndr rcvr sndr-life rcvr-life] @@ -598,13 +600,38 @@ :: +$ naxplanation [=message-num =error] :: ++| %statics +:: +:: $ames-state: state for entire vane +:: +:: peers: states of connections to other ships +:: unix-duct: handle to give moves to unix +:: life: our $life; how many times we've rekeyed +:: crypto-core: interface for encryption and signing +:: bug: debug printing configuration +:: snub: blocklist for incoming packets +:: cong: parameters for marking a flow as clogged +:: +:: Note: .corks is only still present for unreleased migration reasons +:: +:: ++$ ames-state + $: peers=(map ship ship-state) :: TODO: remove krocs from peer-state + =unix=duct + =life + crypto-core=acru:ames + =bug + corks=(set wire) :: TODO: remove next state update + snub=(set ship) + cong=[msg=@ud mem=@ud] + == +$ ames-state-4 ames-state-5 +$ ames-state-5 $: peers=(map ship ship-state-5) =unix=duct =life crypto-core=acru:ames - =bug + bug=bug-9 == :: +$ ship-state-4 ship-state-5 @@ -628,23 +655,82 @@ heeds=(set duct) == :: -+| %statics ++$ ames-state-6 + $: peers=(map ship ship-state-6) + =unix=duct + =life + crypto-core=acru:ames + bug=bug-9 + == :: -:: $ames-state: state for entire vane ++$ ship-state-6 + $% [%alien alien-agenda] + [%known peer-state-6] + == :: -:: peers: states of connections to other ships -:: unix-duct: handle to give moves to unix -:: life: our $life; how many times we've rekeyed -:: crypto-core: interface for encryption and signing -:: bug: debug printing configuration ++$ peer-state-6 + $: $: =symmetric-key + =life + =rift + =public-key + sponsor=ship + == + route=(unit [direct=? =lane]) + =qos + =ossuary + snd=(map bone message-pump-state) + rcv=(map bone message-sink-state) + nax=(set [=bone =message-num]) + heeds=(set duct) + == :: -+$ ames-state ++$ ames-state-7 $: peers=(map ship ship-state) =unix=duct =life crypto-core=acru:ames - =bug + bug=bug-9 == +:: ++$ ames-state-8 + $: peers=(map ship ship-state) + =unix=duct + =life + crypto-core=acru:ames + bug=bug-9 + corks=(set wire) + == +:: ++$ bug-9 + $: veb=_[`?`%.n `?`%.n `?`%.n `?`%.n `?`%.n `?`%.n `?`%.n] + ships=(set ship) + == +:: ++$ bug-10 + $: veb=_[`?`%.n `?`%.n `?`%.n `?`%.n `?`%.n `?`%.n `?`%.n `?`%.n] + ships=(set ship) + == +:: ++$ ames-state-9 + $: peers=(map ship ship-state) + =unix=duct + =life + crypto-core=acru:ames + bug=bug-9 + corks=(set wire) + snub=(set ship) + == +:: ++$ ames-state-10 + $: peers=(map ship ship-state) + =unix=duct + =life + crypto-core=acru:ames + bug=bug-10 + corks=(set wire) + snub=(set ship) + == +:: :: $bug: debug printing configuration :: :: veb: verbosity toggles @@ -692,6 +778,7 @@ $% [%private-keys ~] [%public-keys ships=(set ship)] [%turf ~] + [%ruin ships=(set ship)] == == $: @tas $% [%plea =ship =plea] @@ -727,19 +814,6 @@ [%prod ~] [%wake ~] == -:: $message-pump-gift: effect from |message-pump -:: -:: %done: report message acknowledgment -:: %send: emit message fragment -:: %wait: set a new timer at .date -:: %rest: cancel timer at .date -:: -+$ message-pump-gift - $% [%done =message-num error=(unit error)] - [%send =static-fragment] - [%wait date=@da] - [%rest date=@da] - == :: $packet-pump-task: job for |packet-pump :: :: %hear: deal with a packet acknowledgment @@ -755,17 +829,6 @@ [%wake current=message-num] [%prod ~] == -:: $packet-pump-gift: effect from |packet-pump -:: -:: %send: emit message fragment -:: %wait: set a new timer at .date -:: %rest: cancel timer at .date -:: -+$ packet-pump-gift - $% [%send =static-fragment] - [%wait date=@da] - [%rest date=@da] - == :: $message-sink-task: job for |message-sink :: :: %done: receive confirmation from vane of processing or failure @@ -778,15 +841,6 @@ [%drop =message-num] [%hear =lane =shut-packet ok=?] == -:: $message-sink-gift: effect from |message-sink -:: -:: %memo: assembled from received packets -:: %send: emit an ack packet -:: -+$ message-sink-gift - $% [%memo =message-num message=*] - [%send =message-num =ack-meat] - == -- :: external vane interface :: @@ -795,7 +849,16 @@ :: =< =* adult-gate . =| queued-events=(qeu queued-event) - =| cached-state=(unit [%5 ames-state-5]) + =| $= cached-state + %- unit + $% [%5 ames-state-5] + [%6 ames-state-6] + [%7 ames-state-7] + [%8 ames-state-8] + [%9 ames-state-9] + [%10 ames-state-10] + [%11 ^ames-state] + == :: |= [now=@da eny=@ rof=roof] =* larval-gate . @@ -808,6 +871,7 @@ ++ take ^take -- |% + ++ larval-core . :: +call: handle request $task :: ++ call @@ -818,21 +882,25 @@ :: ?^ dud ~|(%ames-larval-call-dud (mean tang.u.dud)) + :: before processing events, make sure we have state loaded :: - ?: &(?=(^ cached-state) ?=(~ queued-events)) + =^ molt-moves larval-core molt + :: + ?: &(!=(~ unix-duct.ames-state.adult-gate) =(~ queued-events)) =^ moves adult-gate (call:adult-core duct dud task) - (molt moves) + ~> %slog.0^leaf/"ames: metamorphosis" + [(weld molt-moves moves) adult-gate] + :: drop incoming packets until we metamorphose + :: + ?: ?=(%hear -.task) + [~ larval-gate] :: %born: set .unix-duct and start draining .queued-events :: ?: ?=(%born -.task) :: process %born using wrapped adult ames :: =^ moves adult-gate (call:adult-core duct dud task) - :: if no events were queued up, metamorphose - :: - ?~ queued-events - ~> %slog.0^leaf/"ames: metamorphosis" - [moves adult-gate] + =. moves (weld molt-moves moves) :: kick off a timer to process the first of .queued-events :: =. moves :_(moves [duct %pass /larva %b %wait now]) @@ -849,19 +917,18 @@ |= [=wire =duct dud=(unit goof) =sign] ?^ dud ~|(%ames-larval-take-dud (mean tang.u.dud)) + :: + =^ molt-moves larval-core molt + :: + ?: &(!=(~ unix-duct.ames-state.adult-gate) =(~ queued-events)) + =^ moves adult-gate (take:adult-core wire duct dud sign) + ~> %slog.0^leaf/"ames: metamorphosis" + [(weld molt-moves moves) adult-gate] :: enqueue event if not a larval drainage timer :: - =? queued-events !=(/larva wire) - (~(put to queued-events) %take wire duct sign) - :: start drainage timer if have regressed from adult ames - :: - ?: ?& !=(/larva wire) - ?=(^ cached-state) - == - [[duct %pass /larva %b %wait now]~ larval-gate] - :: XX what to do with errors? - :: - ?. =(/larva wire) [~ larval-gate] + ?. =(/larva wire) + =. queued-events (~(put to queued-events) %take wire duct sign) + [~ larval-gate] :: larval event drainage timer; pop and process a queued event :: ?. ?=([%behn %wake *] sign) @@ -900,10 +967,10 @@ %call (call:adult-core [duct ~ wrapped-task]:+.first-event) %take (take:adult-core [wire duct ~ sign]:+.first-event) == - :: .queued-events has been cleared; metamorphose + =. moves (weld molt-moves moves) + :: .queued-events has been cleared; done! :: ?~ queued-events - ?: ?=(^ cached-state) (molt moves) ~> %slog.0^leaf/"ames: metamorphosis" [moves adult-gate] :: set timer to drain next event @@ -913,7 +980,7 @@ :: lifecycle arms; mostly pass-throughs to the contained adult ames :: ++ scry scry:adult-core - ++ stay [%6 %larva queued-events ames-state.adult-gate] + ++ stay [%11 %larva queued-events ames-state.adult-gate] ++ load |= $= old $% $: %4 @@ -931,6 +998,41 @@ [%adult state=ames-state-5] == == $: %6 + $% $: %larva + events=(qeu queued-event) + state=ames-state-6 + == + [%adult state=ames-state-6] + == == + $: %7 + $% $: %larva + events=(qeu queued-event) + state=ames-state-7 + == + [%adult state=ames-state-7] + == == + $: %8 + $% $: %larva + events=(qeu queued-event) + state=ames-state-8 + == + [%adult state=ames-state-8] + == == + $: %9 + $% $: %larva + events=(qeu queued-event) + state=ames-state-9 + == + [%adult state=ames-state-9] + == == + $: %10 + $% $: %larva + events=(qeu queued-event) + state=ames-state-10 + == + [%adult state=ames-state-10] + == == + $: %11 $% $: %larva events=(qeu queued-event) state=_ames-state.adult-gate @@ -955,29 +1057,2629 @@ =. queued-events events.old larval-gate :: - [%6 %adult *] (load:adult-core %6 state.old) + [%6 %adult *] + =. cached-state `[%6 state.old] + ~> %slog.0^leaf/"ames: larva reload" + larval-gate :: [%6 %larva *] ~> %slog.0^leaf/"ames: larva: load" =. queued-events events.old - =. adult-gate (load:adult-core %6 state.old) larval-gate + :: + [%7 %adult *] + =. cached-state `[%7 state.old] + ~> %slog.0^leaf/"ames: larva reload" + larval-gate + :: + [%7 %larva *] + ~> %slog.0^leaf/"ames: larva: load" + =. queued-events events.old + larval-gate + :: + [%8 %adult *] + =. cached-state `[%8 state.old] + ~> %slog.0^leaf/"ames: larva reload" + larval-gate + :: + [%8 %larva *] + ~> %slog.0^leaf/"ames: larva: load" + =. queued-events events.old + larval-gate + :: + [%9 %adult *] + =. cached-state `[%9 state.old] + ~> %slog.0^leaf/"ames: larva reload" + larval-gate + :: + [%9 %larva *] + ~> %slog.0^leaf/"ames: larva: load" + =. queued-events events.old + larval-gate + :: + [%10 %adult *] + =. cached-state `[%10 state.old] + ~> %slog.0^leaf/"ames: larva reload" + larval-gate + :: + [%10 %larva *] + ~> %slog.1^leaf/"ames: larva: load" + =. queued-events events.old + larval-gate + :: + [%11 %adult *] (load:adult-core %11 state.old) + :: + [%11 %larva *] + ~> %slog.1^leaf/"ames: larva: load" + =. queued-events events.old + =. adult-gate (load:adult-core %11 state.old) + larval-gate + :: == :: +molt: re-evolve to adult-ames :: ++ molt - |= moves=(list move) - ^- (quip move _adult-gate) - =. ames-state.adult-gate - ?> ?=(^ cached-state) - (state-5-to-6:load:adult-core +.u.cached-state) - =. cached-state ~ - ~> %slog.0^leaf/"ames: metamorphosis reload" - [moves adult-gate] + ^- (quip move _larval-core) + ?~ cached-state [~ larval-core] + ~> %slog.0^leaf/"ames: molt" + =? u.cached-state ?=(%5 -.u.cached-state) + 6+(state-5-to-6:load:adult-core +.u.cached-state) + =? u.cached-state ?=(%6 -.u.cached-state) + 7+(state-6-to-7:load:adult-core +.u.cached-state) + =^ moz u.cached-state + ?. ?=(%7 -.u.cached-state) [~ u.cached-state] + ~> %slog.0^leaf/"ames: init daily recork timer" + :- [[/ames]~ %pass /recork %b %wait `@da`(add now ~d1)]~ + 8+(state-7-to-8:load:adult-core +.u.cached-state) + =? u.cached-state ?=(%8 -.u.cached-state) + 9+(state-8-to-9:load:adult-core +.u.cached-state) + =? u.cached-state ?=(%9 -.u.cached-state) + 10+(state-9-to-10:load:adult-core +.u.cached-state) + =? u.cached-state ?=(%10 -.u.cached-state) + 11+(state-10-to-11:load:adult-core +.u.cached-state) + ?> ?=(%11 -.u.cached-state) + =. ames-state.adult-gate +.u.cached-state + [moz larval-core(cached-state ~)] + -- +:: +=> :: |ev: inner event-handling core + :: + ~% %per-event ..decode-packet ~ + |% + ++ ev + =| moves=(list move) + ~% %event-gate ..ev ~ + |= [[now=@da eny=@ rof=roof] =duct =ames-state] + =* veb veb.bug.ames-state + =| cork-bone=(unit bone) :: modified by +on-kroc + ~% %event-core ..$ ~ + |% + +| %helpers + :: + ++ event-core . + ++ abet [(flop moves) ames-state] + ++ emit |=(=move event-core(moves [move moves])) + ++ channel-state [life crypto-core bug]:ames-state + ++ ev-trace + |= [verb=? =ship print=(trap tape)] + ^+ same + (trace verb ship ships.bug.ames-state print) + :: +get-peer-state: lookup .her state or ~ + :: + ++ get-peer-state + |= her=ship + ^- (unit peer-state) + :: + =- ?.(?=([~ %known *] -) ~ `+.u) + (~(get by peers.ames-state) her) + :: +got-peer-state: lookup .her state or crash + :: + ++ got-peer-state + |= her=ship + ^- peer-state + :: + ~| %freaky-alien^her + =- ?>(?=(%known -<) ->) + (~(got by peers.ames-state) her) + :: +gut-peer-state: lookup .her state or default + :: + ++ gut-peer-state + |= her=ship + ^- peer-state + =/ ship-state (~(get by peers.ames-state) her) + ?. ?=([~ %known *] ship-state) + *peer-state + +.u.ship-state + :: + +| %tasks + :: +on-take-done: handle notice from vane that it processed a message + :: + ++ on-take-done + |= [=wire error=(unit error)] + ^+ event-core + :: relay the vane ack to the foreign peer + :: + ?~ parsed=(parse-bone-wire wire) + :: no-op + :: + ~> %slog.0^leaf/"ames: dropping malformed wire: {(spud wire)}" + event-core + ?> ?=([@ her=ship *] u.parsed) + =* her her.u.parsed + =/ =peer-state (got-peer-state her) + =/ =channel [[our her] now channel-state -.peer-state] + =/ peer-core (pe peer-state channel) + |^ + ?: ?& ?=([%new *] u.parsed) + (lth rift.u.parsed rift.peer-state) + == + :: ignore events from an old rift + :: + %- %^ ev-trace odd.veb her + |.("dropping old rift wire: {(spud wire)}") + event-core + =/ =bone + ?-(u.parsed [%new *] bone.u.parsed, [%old *] bone.u.parsed) + =? peer-core ?=([%old *] u.parsed) + %- %^ ev-trace odd.veb her + |.("parsing old wire: {(spud wire)}") + peer-core + =< abet + ?~(error (send-ack bone) (send-nack bone u.error)) + :: + :: if processing succeded, send positive ack packet and exit + :: + ++ send-ack + |= =bone + ^+ peer-core + =+ sink-core=(mi:peer-core bone *message-sink-state) + :: handle cork only deals with bones that are in closing + :: + (handle-cork:abet:(call:abed:sink-core %done ok=%.y) bone) + :: failed; send message nack packet + :: + ++ send-nack + |= [=bone =^error] + ^+ peer-core + =/ sink-core (mi:peer-core bone *message-sink-state) + =. peer-core abet:(call:abed:sink-core %done ok=%.n) + =. event-core abet:peer-core + =/ =^peer-state (got-peer-state her) + =/ =^channel [[our her] now channel-state -.peer-state] + :: construct nack-trace message, referencing .failed $message-num + :: + =/ failed=message-num last-acked:(~(got by rcv.peer-state) bone) + =/ =naxplanation [failed error] + =/ =message-blob (jam naxplanation) + :: send nack-trace message on associated .nack-trace-bone + :: + =. peer-core (pe peer-state channel) + =/ nack-trace-bone=^bone (mix 0b10 bone) + :: + =+ pump-core=(mu:peer-core nack-trace-bone *message-pump-state) + abet:(call:abed:pump-core %memo message-blob) + -- + :: +on-sift: handle request to filter debug output by ship + :: + ++ on-sift + |= ships=(list ship) + ^+ event-core + =. ships.bug.ames-state (sy ships) + event-core + :: +on-snub: handle request to change ship blacklist + :: + ++ on-snub + |= ships=(list ship) + ^+ event-core + =. snub.ames-state (sy ships) + event-core + :: +on-spew: handle request to set verbosity toggles on debug output + :: + ++ on-spew + |= verbs=(list verb) + ^+ event-core + :: start from all %.n's, then flip requested toggles + :: + =. veb.bug.ames-state + %+ roll verbs + |= [=verb acc=_veb-all-off] + ^+ veb.bug.ames-state + ?- verb + %snd acc(snd %.y) + %rcv acc(rcv %.y) + %odd acc(odd %.y) + %msg acc(msg %.y) + %ges acc(ges %.y) + %for acc(for %.y) + %rot acc(rot %.y) + %kay acc(kay %.y) + == + event-core + :: +on-prod: re-send a packet per flow to each of .ships + :: + ++ on-prod + |= ships=(list ship) + ^+ event-core + =? ships =(~ ships) ~(tap in ~(key by peers.ames-state)) + |^ ^+ event-core + ?~ ships event-core + $(ships t.ships, event-core (prod-peer i.ships)) + :: + ++ prod-peer + |= her=ship + ^+ event-core + =/ par (get-peer-state her) + ?~ par event-core + =/ =channel [[our her] now channel-state -.u.par] + =/ peer-core (pe u.par channel) + =/ bones ~(tap in ~(key by snd.u.par)) + |- ^+ event-core + ?~ bones abet:peer-core + =/ pump-core (mu:peer-core i.bones *message-pump-state) + =. peer-core abet:(call:abed:pump-core %prod ~) + $(bones t.bones) + -- + :: +on-cong: adjust congestion control parameters + :: + ++ on-cong + |= [msg=@ud mem=@ud] + ^+ event-core + =. cong.ames-state msg^mem + event-core + :: +on-stir: recover from timer desync, setting new timers as needed + :: + :: .arg is unused, meant to ease future debug commands + :: + ++ on-stir + |= arg=@t + ^+ event-core + =/ want=(set [@da ^duct]) + %- ~(rep by peers.ames-state) + |= [[who=ship s=ship-state] acc=(set [@da ^duct])] + ?. ?=(%known -.s) acc + %- ~(rep by snd.+.s) + |= [[b=bone m=message-pump-state] acc=_acc] + =* tim next-wake.packet-pump-state.m + ?~ tim acc + %- ~(put in acc) + [u.tim `^duct`~[ames+(make-pump-timer-wire who b) /ames]] + =. want + (~(put in want) (add now ~d1) ~[/ames/recork /ames]) + :: + =/ have + %- ~(gas in *(set [@da ^duct])) + =/ tim + ;; (list [@da ^duct]) + =< q.q %- need %- need + (rof ~ %bx [[our %$ da+now] /debug/timers]) + (skim tim |=([@da hen=^duct] ?=([[%ames ?(%pump %recork) *] *] hen))) + :: + :: set timers for flows that should have one set but don't + :: + =. event-core + %- ~(rep in (~(dif in want) have)) + |= [[wen=@da hen=^duct] this=_event-core] + ?> ?=([^ *] hen) + (emit:this ~[/ames] %pass t.i.hen %b %wait wen) + :: + :: cancel timers for flows that have one set but shouldn't + :: + %- ~(rep in (~(dif in have) want)) + |= [[wen=@da hen=^duct] this=_event-core] + ?> ?=([^ *] hen) + (emit:this t.hen %pass t.i.hen %b %rest wen) + :: +on-crud: handle event failure; print to dill + :: + ++ on-crud + |= =error + ^+ event-core + (emit duct %pass /crud %d %flog %crud error) + :: +on-heed: handle request to track .ship's responsiveness + :: + ++ on-heed + |= =ship + ^+ event-core + =/ ship-state (~(get by peers.ames-state) ship) + ?. ?=([~ %known *] ship-state) + %+ enqueue-alien-todo ship + |= todos=alien-agenda + todos(heeds (~(put in heeds.todos) duct)) + :: + =/ =peer-state +.u.ship-state + =/ =channel [[our ship] now channel-state -.peer-state] + abet:on-heed:(pe peer-state channel) + :: +on-jilt: handle request to stop tracking .ship's responsiveness + :: + ++ on-jilt + |= =ship + ^+ event-core + =/ ship-state (~(get by peers.ames-state) ship) + ?. ?=([~ %known *] ship-state) + %+ enqueue-alien-todo ship + |= todos=alien-agenda + todos(heeds (~(del in heeds.todos) duct)) + :: + =/ =peer-state +.u.ship-state + =/ =channel [[our ship] now channel-state -.peer-state] + abet:on-jilt:(pe peer-state channel) + :: +on-hear: handle raw packet receipt + :: + ++ on-hear + |= [l=lane b=blob d=(unit goof)] + (on-hear-packet l (decode-packet b) d) + :: +on-hear-packet: handle mildly processed packet receipt + :: + ++ on-hear-packet + ~/ %on-hear-packet + |= [=lane =packet dud=(unit goof)] + ^+ event-core + %- (ev-trace odd.veb sndr.packet |.("received packet")) + :: + ?: =(our sndr.packet) + event-core + ?: (~(has in snub.ames-state) sndr.packet) + %- (ev-trace rcv.veb sndr.packet |.("snubbed")) + event-core + :: + %. +< + :: + ?. =(our rcvr.packet) + on-hear-forward + :: + ?: =(%keys content.packet) + on-hear-keys + ?: ?& ?=(%pawn (clan:title sndr.packet)) + !?=([~ %known *] (~(get by peers.ames-state) sndr.packet)) + == + on-hear-open + on-hear-shut + :: +on-hear-forward: maybe forward a packet to someone else + :: + :: Note that this performs all forwarding requests without + :: filtering. Any protection against DDoS amplification will be + :: provided by Vere. + :: + ++ on-hear-forward + ~/ %on-hear-forward + |= [=lane =packet dud=(unit goof)] + ^+ event-core + %- %^ ev-trace for.veb sndr.packet + |.("forward: {} -> {}") + :: set .origin.packet if it doesn't have one, re-encode, and send + :: + =? origin.packet + &(?=(~ origin.packet) !=(%czar (clan:title sndr.packet))) + ?: ?=(%& -.lane) + ~ + ?. (lte (met 3 p.lane) 6) + ~| ames-lane-size+p.lane !! + `p.lane + :: + =/ =blob (encode-packet packet) + (send-blob & rcvr.packet blob) + :: +on-hear-keys: handle receipt of attestion request + :: + ++ on-hear-keys + ~/ %on-hear-keys + |= [=lane =packet dud=(unit goof)] + =+ %^ ev-trace msg.veb sndr.packet + |.("requested attestation") + ?. =(%pawn (clan:title our)) + event-core + (send-blob | sndr.packet (attestation-packet sndr.packet 1)) + :: +on-hear-open: handle receipt of plaintext comet self-attestation + :: + ++ on-hear-open + ~/ %on-hear-open + |= [=lane =packet dud=(unit goof)] + ^+ event-core + =+ %^ ev-trace msg.veb sndr.packet + |.("got attestation") + :: assert the comet can't pretend to be a moon or other address + :: + ?> ?=(%pawn (clan:title sndr.packet)) + :: if we already know .sndr, ignore duplicate attestation + :: + =/ ship-state (~(get by peers.ames-state) sndr.packet) + ?: ?=([~ %known *] ship-state) + event-core + :: + =/ =open-packet (decode-open-packet packet our life.ames-state) + :: add comet as an %alien if we haven't already + :: + =? peers.ames-state ?=(~ ship-state) + (~(put by peers.ames-state) sndr.packet %alien *alien-agenda) + :: upgrade comet to %known via on-publ-full + :: + =. event-core + =/ crypto-suite=@ud 1 + =/ keys + (my [sndr-life.open-packet crypto-suite public-key.open-packet]~) + =/ =point + :* ^= rift 0 + ^= life sndr-life.open-packet + ^= keys keys + ^= sponsor `(^sein:title sndr.packet) + == + (on-publ / [%full (my [sndr.packet point]~)]) + :: manually add the lane to the peer state + :: + =. peers.ames-state + =/ =peer-state (gut-peer-state sndr.packet) + =. route.peer-state `[direct=%.n lane] + (~(put by peers.ames-state) sndr.packet %known peer-state) + :: + event-core + :: +on-hear-shut: handle receipt of encrypted packet + :: + ++ on-hear-shut + ~/ %on-hear-shut + |= [=lane =packet dud=(unit goof)] + ^+ event-core + =/ sndr-state (~(get by peers.ames-state) sndr.packet) + :: If we don't know them, ask Jael for their keys. If they're a + :: comet, this will also cause us to request a self-attestation + :: from the sender. The packet itself is dropped; we can assume it + :: will be resent. + :: + ?. ?=([~ %known *] sndr-state) + (enqueue-alien-todo sndr.packet |=(alien-agenda +<)) + :: decrypt packet contents using symmetric-key.channel + :: + :: If we know them, we have a $channel with them, which we've + :: populated with a .symmetric-key derived from our private key + :: and their public key using elliptic curve Diffie-Hellman. + :: + =/ =peer-state +.u.sndr-state + =/ =channel [[our sndr.packet] now channel-state -.peer-state] + ~| %ames-crash-on-packet-from^her.channel + =/ =shut-packet + (decode-shut-packet packet [symmetric-key her-life our-life]:channel) + :: non-galaxy: update route with heard lane or forwarded lane + :: + =? route.peer-state !=(%czar (clan:title her.channel)) + :: if new packet is direct, use that. otherwise, if the new new + :: and old lanes are indirect, use the new one. if the new lane + :: is indirect but the old lane is direct, then if the lanes are + :: identical, don't mark it indirect; if they're not identical, + :: use the new lane and mark it indirect. + :: + :: if you mark lane as indirect because you got an indirect + :: packet even though you already had a direct identical lane, + :: then delayed forwarded packets will come later and reset to + :: indirect, so you're unlikely to get a stable direct route + :: (unless the forwarder goes offline for a while). + :: + :: conversely, if you don't accept indirect routes with different + :: lanes, then if your lane is stale and they're trying to talk + :: to you, your acks will go to the stale lane, and you'll never + :: time it out unless you reach out to them. this manifests as + :: needing to |hi or dotpost to get a response when the other + :: ship has changed lanes. + :: + ?: ?=(~ origin.packet) + `[direct=%.y lane] + ?: ?=([~ %& *] route.peer-state) + ?: =(lane.u.route.peer-state |+u.origin.packet) + route.peer-state + `[direct=%.n |+u.origin.packet] + `[direct=%.n |+u.origin.packet] + :: perform peer-specific handling of packet + :: + =/ peer-core (pe peer-state channel) + abet:(on-hear-shut-packet:peer-core lane shut-packet dud) + :: +on-take-boon: receive request to give message to peer + :: + ++ on-take-boon + |= [=wire payload=*] + ^+ event-core + ?~ parsed=(parse-bone-wire wire) + ~> %slog.0^leaf/"ames: dropping malformed wire: {(spud wire)}" + event-core + :: + ?> ?=([@ her=ship *] u.parsed) + =* her her.u.parsed + =/ =peer-state (got-peer-state her) + =/ =channel [[our her] now channel-state -.peer-state] + =/ peer-core (pe peer-state channel) + :: + ?: ?& ?=([%new *] u.parsed) + (lth rift.u.parsed rift.peer-state) + == + :: ignore events from an old rift + :: + %- %^ ev-trace odd.veb her + |.("dropping old rift wire: {(spud wire)}") + event-core + =/ =bone + ?-(u.parsed [%new *] bone.u.parsed, [%old *] bone.u.parsed) + =? peer-core ?=([%old *] u.parsed) + %- %^ ev-trace odd.veb her + |.("parsing old wire: {(spud wire)}") + peer-core + abet:(on-memo:peer-core bone payload %boon) + :: +on-plea: handle request to send message + :: + ++ on-plea + |= [=ship =plea] + ^+ event-core + :: since flow kill goes like: + :: client vane cork task -> client ames pass cork as plea -> + :: -> server ames sinks plea -> server ames +on-plea (we are here); + :: if it's %cork plea passed to ames from its sink, + :: give %done and process flow closing after +on-take-done call + :: + ?: =([%a /close ~] plea) + (emit duct %give %done ~) + :: .plea is from local vane to foreign ship + :: + =/ ship-state (~(get by peers.ames-state) ship) + :: + ?. ?=([~ %known *] ship-state) + %+ enqueue-alien-todo ship + |= todos=alien-agenda + todos(messages [[duct plea] messages.todos]) + :: + =/ =peer-state +.u.ship-state + =/ =channel [[our ship] now channel-state -.peer-state] + :: + =^ =bone ossuary.peer-state (bind-duct ossuary.peer-state duct) + %- %^ ev-trace msg.veb ship + |. ^- tape + =/ sndr [our our-life.channel] + =/ rcvr [ship her-life.channel] + "plea {}" + abet:(on-memo:(pe peer-state channel) bone plea %plea) + :: +on-cork: handle request to kill a flow + :: + ++ on-cork + |= =ship + ^+ event-core + =/ =plea [%$ /flow [%cork ~]] + =/ ship-state (~(get by peers.ames-state) ship) + ?. ?=([~ %known *] ship-state) + %+ enqueue-alien-todo ship + |= todos=alien-agenda + todos(messages [[duct plea] messages.todos]) + =/ =peer-state +.u.ship-state + =/ =channel [[our ship] now channel-state -.peer-state] + :: + =/ [=bone ossuary=_ossuary.peer-state] + ?^ cork-bone [u.cork-bone ossuary.peer-state] + (bind-duct ossuary.peer-state duct) + =. ossuary.peer-state ossuary + :: + ?. (~(has by by-bone.ossuary.peer-state) bone) + %. event-core + %^ ev-trace odd.veb ship + |.("trying to cork {}, not in the ossuary, ignoring") + :: + =. closing.peer-state (~(put in closing.peer-state) bone) + %- %^ ev-trace msg.veb ship + |. ^- tape + =/ sndr [our our-life.channel] + =/ rcvr [ship her-life.channel] + "cork plea {}" + abet:(on-memo:(pe peer-state channel) bone plea %plea) + :: +on-kroc: cork all stale flows from failed subscriptions + :: + ++ on-kroc + |= dry=? + ^+ event-core + :: no-op + :: + ?: & %.(event-core (slog leaf/"ames: %kroc task not ready" ~)) + :: + =; [corks=@ core=_event-core] + ?. dry core + %.(core (slog leaf/"ames: #{} flows can be corked" ~)) + :: + %+ roll ~(tap by peers.ames-state) + |= [[=ship =ship-state] corks=@ core=_event-core] + ?. ?=(%known -.ship-state) + corks^core + =/ =peer-state:ames ?>(?=(%known -.ship-state) +.ship-state) + =/ subs=(jar path [bone sub-nonce=@]) + %+ roll ~(tap by snd.peer-state) + |= $: [=forward=bone message-pump-state:ames] + subs=(jar path [bone sub-nonce=@]) + == + ?: (~(has in closing.peer-state) forward-bone) + %. subs + %^ ev-trace &(dry odd.veb) ship + |. + %+ weld "stale flow bone={} in closing, " + "#{<~(wyt in live:packet-pump-state)>} packets retrying" + ?~ duct=(~(get by by-bone.ossuary.peer-state) forward-bone) + subs + ?. ?=([* [%gall %use sub=@ @ %out @ @ nonce=@ pub=@ *] *] u.duct) + subs + =/ =wire i.t.u.duct + =/ nonce=(unit @) (rush (snag 7 wire) dem) + %- ~(add ja subs) + :: 0 for old pre-nonce subscriptions + :: + :_ [forward-bone ?~(nonce 0 u.nonce)] + ?~ nonce wire + :: don't include the sub-nonce in the key + :: + (weld (scag 7 wire) (slag 8 wire)) + %+ roll ~(tap by subs) + |= [[=wire flows=(list [bone sub-nonce=@])] corks=_corks core=_core] + :: + %- tail + %+ roll (sort flows |=([[@ n=@] [@ m=@]] (lte n m))) + |= [[=bone nonce=@] resubs=_(lent flows) corks=_corks core=_core] + =/ app=term ?>(?=([%gall %use sub=@ *] wire) i.t.t.wire) + =/ =path (slag 7 wire) + =/ log=tape "[bone={} agent={} nonce={}] {}" + =; corkable=? + =? corks corkable +(corks) + =? core &(corkable !dry) (%*(on-cork core cork-bone `bone) ship) + (dec resubs)^corks^core + :: checks if this is a stale re-subscription + :: + ?. =(resubs 1) + %. & + (ev-trace &(dry odd.veb) ship |.((weld "stale %watch plea " log))) + :: the current subscription can be safely corked if there + :: is a flow with a naxplanation ack on a backward bone + :: + =+ backward-bone=(mix 0b10 bone) + ?. =(2 (mod backward-bone 4)) + | + ?~ (~(get by rcv.peer-state) backward-bone) + | + %. & + (ev-trace &(dry odd.veb) ship |.((weld "failed %watch plea " log))) + :: +on-take-wake: receive wakeup or error notification from behn + :: + ++ on-take-wake + |= [=wire error=(unit tang)] + ^+ event-core + :: + ?: ?=([%alien @ ~] wire) + :: if we haven't received an attestation, ask again + :: + ?^ error + %- (slog 'ames: attestation timer failed' u.error) + event-core + ?~ ship=`(unit @p)`(slaw %p i.t.wire) + %- (slog leaf+"ames: got timer for strange wire: {}" ~) + event-core + =/ ship-state (~(get by peers.ames-state) u.ship) + ?: ?=([~ %known *] ship-state) + event-core + (request-attestation u.ship) + :: + ?. ?=([%recork ~] wire) + =/ res=(unit [her=ship =bone]) (parse-pump-timer-wire wire) + ?~ res + %- (slog leaf+"ames: got timer for strange wire: {}" ~) + event-core + :: + =/ state=(unit peer-state) (get-peer-state her.u.res) + ?~ state + %. event-core + %- slog + [leaf+"ames: got timer for strange ship: {}, ignoring" ~] + :: + =/ =channel [[our her.u.res] now channel-state -.u.state] + abet:(on-wake:(pe u.state channel) bone.u.res error) + :: + =. event-core + (emit duct %pass /recork %b %wait `@da`(add now ~d1)) + :: + ?^ error + %- (slog 'ames: recork timer failed' u.error) + event-core + :: recork up to one bone per peer + :: + =/ pez ~(tap by peers.ames-state) + |- ^+ event-core + ?~ pez event-core + =+ [her sat]=i.pez + ?. ?=(%known -.sat) + $(pez t.pez) + =* peer-state +.sat + =/ =channel [[our her] now channel-state -.peer-state] + =/ peer-core (pe peer-state channel) + $(pez t.pez, event-core abet:recork-one:peer-core) + :: +on-init: first boot; subscribe to our info from jael + :: + ++ on-init + ^+ event-core + :: + =~ (emit duct %pass /turf %j %turf ~) + (emit duct %pass /private-keys %j %private-keys ~) + == + :: +on-priv: set our private key to jael's response + :: + ++ on-priv + |= [=life vein=(map life private-key)] + ^+ event-core + :: + =/ =private-key (~(got by vein) life) + =. life.ames-state life + =. crypto-core.ames-state (nol:nu:crub:crypto private-key) + :: recalculate each peer's symmetric key + :: + =/ our-private-key sec:ex:crypto-core.ames-state + =. peers.ames-state + %- ~(run by peers.ames-state) + |= =ship-state + ^+ ship-state + :: + ?. ?=(%known -.ship-state) + ship-state + :: + =/ =peer-state +.ship-state + =. symmetric-key.peer-state + (derive-symmetric-key public-key.+.ship-state our-private-key) + :: + [%known peer-state] + :: + event-core + :: +on-publ: update pki data for peer or self + :: + ++ on-publ + |= [=wire =public-keys-result] + ^+ event-core + :: + |^ ^+ event-core + :: + ?- public-keys-result + [%diff @ %rift *] + (on-publ-rift [who to.diff]:public-keys-result) + :: + [%diff @ %keys *] + (on-publ-rekey [who to.diff]:public-keys-result) + :: + [%diff @ %spon *] + (on-publ-sponsor [who to.diff]:public-keys-result) + :: + [%full *] + (on-publ-full points.public-keys-result) + :: + [%breach *] + (on-publ-breach who.public-keys-result) + == + :: +on-publ-breach: handle continuity breach of .ship; wipe its state + :: + :: Abandon all pretense of continuity and delete all messaging state + :: associated with .ship, including sent and unsent messages. + :: Also cancel all timers related to .ship. + :: + ++ on-publ-breach + |= =ship + ^+ event-core + :: + =/ ship-state (~(get by peers.ames-state) ship) + :: we shouldn't be hearing about ships we don't care about + :: + ?~ ship-state + ~> %slog.0^leaf/"ames: breach unknown {}" + event-core + :: if an alien breached, this doesn't affect us + :: + ?: ?=([~ %alien *] ship-state) + ~> %slog.0^leaf/"ames: breach alien {}" + event-core + ~> %slog.0^leaf/"ames: breach peer {}" + :: a peer breached; drop messaging state + :: + =/ =peer-state +.u.ship-state + =/ old-qos=qos qos.peer-state + :: cancel all timers related to .ship + :: + =. event-core + %+ roll ~(tap by snd.peer-state) + |= [[=snd=bone =message-pump-state] core=_event-core] + ^+ core + :: + ?~ next-wake=next-wake.packet-pump-state.message-pump-state + core + :: note: copies +on-pump-rest:message-pump + :: + =/ wire (make-pump-timer-wire ship snd-bone) + =/ duct ~[/ames] + (emit:core duct %pass wire %b %rest u.next-wake) + :: reset all peer state other than pki data + :: + =. +.peer-state +:*^peer-state + :: print change to quality of service, if any + :: + =/ text=(unit tape) + %^ qos-update-text ship old-qos + [qos.peer-state kay.veb ships.bug.ames-state] + :: + =? event-core ?=(^ text) + (emit duct %pass /qos %d %flog %text u.text) + :: reinitialize galaxy route if applicable + :: + =? route.peer-state =(%czar (clan:title ship)) + `[direct=%.y lane=[%& ship]] + :: + =. peers.ames-state + (~(put by peers.ames-state) ship [%known peer-state]) + :: + event-core + :: +on-publ-rekey: handle new key for peer + :: + :: TODO: assert .crypto-suite compatibility + :: + ++ on-publ-rekey + |= $: =ship + =life + crypto-suite=@ud + =public-key + == + ^+ event-core + :: + =/ ship-state (~(get by peers.ames-state) ship) + ?. ?=([~ %known *] ship-state) + =| =point + =. life.point life + =. keys.point (my [life crypto-suite public-key]~) + =. sponsor.point `(^^sein:title rof our now ship) + :: + (on-publ-full (my [ship point]~)) + :: + =/ =peer-state +.u.ship-state + =/ =private-key sec:ex:crypto-core.ames-state + =. symmetric-key.peer-state + (derive-symmetric-key public-key private-key) + :: + =. life.peer-state life + =. public-key.peer-state public-key + :: + =. peers.ames-state + (~(put by peers.ames-state) ship %known peer-state) + event-core + :: +on-publ-sponsor: handle new or lost sponsor for peer + :: + :: TODO: really handle sponsor loss + :: + ++ on-publ-sponsor + |= [=ship sponsor=(unit ship)] + ^+ event-core + :: + ?~ sponsor + %- (slog leaf+"ames: {(scow %p ship)} lost sponsor, ignoring" ~) + event-core + :: + =/ state=(unit peer-state) (get-peer-state ship) + ?~ state + %- (slog leaf+"ames: missing peer-state, ignoring" ~) + event-core + =. sponsor.u.state u.sponsor + =. peers.ames-state (~(put by peers.ames-state) ship %known u.state) + event-core + :: +on-publ-full: handle new pki data for peer(s) + :: + ++ on-publ-full + |= points=(map ship point) + ^+ event-core + :: + => .(points ~(tap by points)) + |^ ^+ event-core + ?~ points event-core + :: + =+ ^- [=ship =point] i.points + :: + ?. (~(has by keys.point) life.point) + $(points t.points) + :: + =/ old-ship-state (~(get by peers.ames-state) ship) + :: + =. event-core (insert-peer-state ship point) + :: + =? event-core ?=([~ %alien *] old-ship-state) + (meet-alien ship point +.u.old-ship-state) + :: + $(points t.points) + :: + ++ meet-alien + |= [=ship =point todos=alien-agenda] + ^+ event-core + :: if we're a comet, send self-attestation packet first + :: + =? event-core =(%pawn (clan:title our)) + (send-blob | ship (attestation-packet ship life.point)) + :: save current duct + :: + =/ original-duct duct + :: apply heeds + :: + =. event-core + %+ roll ~(tap in heeds.todos) + |= [=^duct core=_event-core] + (on-heed:core(duct duct) ship) + :: apply outgoing messages, reversing for FIFO order + :: + =. event-core + %+ reel messages.todos + |= [[=^duct =plea] core=_event-core] + ?: ?=(%$ -.plea) + (on-cork:core(duct duct) ship) + (on-plea:core(duct duct) ship plea) + :: apply outgoing packet blobs + :: + =. event-core + %+ roll ~(tap in packets.todos) + |= [=blob core=_event-core] + (send-blob:core | ship blob) + :: + event-core(duct original-duct) + -- + :: on-publ-rift: XX + :: + ++ on-publ-rift + |= [=ship =rift] + ^+ event-core + ?~ ship-state=(~(get by peers.ames-state) ship) + :: print error here? %rift was probably called before %keys + :: + ~> %slog.1^leaf/"ames: missing peer-state on-publ-rift" + event-core + ?: ?=([%alien *] u.ship-state) + :: ignore aliens + :: + event-core + =/ =peer-state +.u.ship-state + =. rift.peer-state rift + =. peers.ames-state + (~(put by peers.ames-state) ship %known peer-state) + event-core + :: + ++ insert-peer-state + |= [=ship =point] + ^+ event-core + :: + =/ =peer-state (gut-peer-state ship) + =/ =public-key pass:(~(got by keys.point) life.point) + =/ =private-key sec:ex:crypto-core.ames-state + =/ =symmetric-key (derive-symmetric-key public-key private-key) + :: + =. qos.peer-state [%unborn now] + =. life.peer-state life.point + =. rift.peer-state rift.point + =. public-key.peer-state public-key + =. symmetric-key.peer-state symmetric-key + =. sponsor.peer-state + ?^ sponsor.point + u.sponsor.point + (^^sein:title rof our now ship) + :: automatically set galaxy route, since unix handles lookup + :: + =? route.peer-state ?=(%czar (clan:title ship)) + `[direct=%.y lane=[%& ship]] + :: + =. peers.ames-state + (~(put by peers.ames-state) ship %known peer-state) + :: + event-core + -- + :: +on-take-turf: relay %turf move from jael to unix + :: + ++ on-take-turf + |= turfs=(list turf) + ^+ event-core + :: + (emit unix-duct.ames-state %give %turf turfs) + :: +on-born: handle unix process restart + :: + ++ on-born + ^+ event-core + :: + =. unix-duct.ames-state duct + :: + =/ turfs + ;; (list turf) + =< q.q %- need %- need + (rof ~ %j `beam`[[our %turf %da now] /]) + :: + (emit unix-duct.ames-state %give %turf turfs) + :: +on-vega: handle kernel reload + :: + ++ on-vega event-core + :: +on-trim: handle request to free memory + :: + :: %ruin comets not seen for six months + :: + ++ on-trim + ^+ event-core + =; rui=(set @p) + (emit duct %pass /ruin %j %ruin rui) + =- (silt (turn - head)) + %+ skim + ~(tap by peers.ames-state) + |= [=ship s=ship-state] + ?. &(?=(%known -.s) =(%pawn (clan:title ship))) %.n + ?& (gth (sub now ~d180) last-contact.qos.s) + :: + %- ~(any by snd.s) + |= m=message-pump-state + !=(~ unsent-fragments.m) + == + :: + +| %implementation + :: +enqueue-alien-todo: helper to enqueue a pending request + :: + :: Also requests key and life from Jael on first request. + :: If talking to a comet, requests attestation packet. + :: + ++ enqueue-alien-todo + |= [=ship mutate=$-(alien-agenda alien-agenda)] + ^+ event-core + :: + =/ ship-state (~(get by peers.ames-state) ship) + :: create a default $alien-agenda on first contact + :: + =+ ^- [already-pending=? todos=alien-agenda] + ?~ ship-state + [%.n *alien-agenda] + [%.y ?>(?=(%alien -.u.ship-state) +.u.ship-state)] + :: mutate .todos and apply to permanent state + :: + =. todos (mutate todos) + =. peers.ames-state (~(put by peers.ames-state) ship %alien todos) + ?: already-pending + event-core + :: + ?: =(%pawn (clan:title ship)) + (request-attestation ship) + :: NB: we specifically look for this wire in +public-keys-give in + :: Jael. if you change it here, you must change it there. + :: + (emit duct %pass /public-keys %j %public-keys [n=ship ~ ~]) + :: +request-attestation: helper to request attestation from comet + :: + :: Also sets a timer to resend the request every 30s. + :: + ++ request-attestation + |= =ship + ^+ event-core + =+ (ev-trace msg.veb ship |.("requesting attestion")) + =. event-core (send-blob | ship (sendkeys-packet ship)) + =/ =wire /alien/(scot %p ship) + (emit duct %pass wire %b %wait (add now ~s30)) + :: +send-blob: fire packet at .ship and maybe sponsors + :: + :: Send to .ship and sponsors until we find a direct lane, + :: skipping .our in the sponsorship chain. + :: + :: If we have no PKI data for a recipient, enqueue the packet and + :: request the information from Jael if we haven't already. + :: + ++ send-blob + ~/ %send-blob + |= [for=? =ship =blob] + :: + =/ final-ship ship + %- (ev-trace rot.veb final-ship |.("send-blob: to {}")) + |- + |^ ^+ event-core + :: + =/ ship-state (~(get by peers.ames-state) ship) + :: + ?. ?=([~ %known *] ship-state) + ?: ?=(%pawn (clan:title ship)) + (try-next-sponsor (^sein:title ship)) + %+ enqueue-alien-todo ship + |= todos=alien-agenda + todos(packets (~(put in packets.todos) blob)) + :: + =/ =peer-state +.u.ship-state + :: + :: XX routing hack to mimic old ames. + :: + :: Before removing this, consider: moons when their planet is + :: behind a NAT; a planet receiving initial acknowledgment + :: from a star; a planet talking to another planet under + :: another galaxy. + :: + ?: ?| =(our ship) + ?& !=(final-ship ship) + !=(%czar (clan:title ship)) + == + == + (try-next-sponsor sponsor.peer-state) + :: + ?: =(our ship) + :: if forwarding, don't send to sponsor to avoid loops + :: + ?: for + event-core + (try-next-sponsor sponsor.peer-state) + :: if forwarding, route must not be stale + :: + ?: &(for (lth last-contact.qos.peer-state (sub now ~h1))) + (try-next-sponsor sponsor.peer-state) + :: + ?~ route=route.peer-state + %- (ev-trace rot.veb final-ship |.("no route to: {}")) + (try-next-sponsor sponsor.peer-state) + :: + %- (ev-trace rot.veb final-ship |.("trying route: {}")) + =. event-core + (emit unix-duct.ames-state %give %send lane.u.route blob) + :: + ?: direct.u.route + event-core + (try-next-sponsor sponsor.peer-state) + :: + ++ try-next-sponsor + |= sponsor=^ship + ^+ event-core + :: + ?: =(ship sponsor) + event-core + ^$(ship sponsor) + -- + :: +attestation-packet: generate signed self-attestation for .her + :: + :: Sent by a comet on first contact with a peer. Not acked. + :: + ++ attestation-packet + |= [her=ship =her=life] + ^- blob + %- encode-packet + %- encode-open-packet + :_ crypto-core.ames-state + :* ^= public-key pub:ex:crypto-core.ames-state + ^= sndr our + ^= sndr-life life.ames-state + ^= rcvr her + ^= rcvr-life her-life + == + :: +sendkeys-packet: generate a request for a self-attestation. + :: + :: Sent by non-comets to comets. Not acked. + :: + ++ sendkeys-packet + |= her=ship + ^- blob + ?> ?=(%pawn (clan:title her)) + %- encode-packet + (encode-keys-packet our her life.ames-state) + :: + +| %internals + :: +pe: create nested |peer-core for per-peer processing + :: + ++ pe + |= [=peer-state =channel] + =* veb veb.bug.channel + =* her her.channel + |% + :: + +| %helpers + :: + ++ peer-core . + ++ pe-emit |=(move peer-core(event-core (emit +<))) + ++ abet + ^+ event-core + =. peers.ames-state + (~(put by peers.ames-state) her %known peer-state) + event-core + :: + ++ pe-trace + |= [verb=? print=(trap tape)] + ^+ same + (ev-trace verb her print) + :: + :: +got-duct: look up $duct by .bone, asserting already bound + :: + ++ got-duct + |= =bone + ^- ^duct + ~| %dangling-bone^her^bone + (~(got by by-bone.ossuary.peer-state) bone) + :: + ++ pump-core |=(=bone (mu bone *message-pump-state)) + ++ sink-core |=(=bone (mi bone *message-sink-state)) + :: + +| %tasks + :: + ++ on-heed + peer-core(heeds.peer-state (~(put in heeds.peer-state) duct)) + :: + ++ on-jilt + peer-core(heeds.peer-state (~(del in heeds.peer-state) duct)) + :: +update-qos: update and maybe print connection status + :: + ++ update-qos + |= =new=qos + ^+ peer-core + :: + =^ old-qos qos.peer-state [qos.peer-state new-qos] + :: if no update worth reporting, we're done + :: + =/ text + (qos-update-text her old-qos [new-qos kay.veb ships.bug.ames-state]) + ?~ text + peer-core + :: print message + :: + =. peer-core (pe-emit duct %pass /qos %d %flog %text u.text) + :: if peer has stopped responding, check if %boon's are backing up + :: + ?. ?=(?(%dead %unborn) -.qos.peer-state) + peer-core + check-clog + :: +on-hear-shut-packet: handle receipt of ack or message fragment + :: + ++ on-hear-shut-packet + |= [=lane =shut-packet dud=(unit goof)] + ^+ peer-core + :: update and print connection status + :: + =. peer-core (update-qos %live last-contact=now) + :: + =/ =bone bone.shut-packet + :: + ?: ?=(%& -.meat.shut-packet) + =+ ?. &(?=(^ dud) msg.veb) ~ + %. ~ + %- slog + :_ tang.u.dud + leaf+"ames: {} fragment crashed {}" + abet:(call:abed:(sink-core bone) %hear lane shut-packet ?=(~ dud)) + :: benign ack on corked bone + :: + ?: (~(has in corked.peer-state) bone) + peer-core + :: Just try again on error, printing trace + :: + :: Note this implies that vanes should never crash on %done, + :: since we have no way to continue using the flow if they do. + :: + =+ ?~ dud ~ + %. ~ + %+ slog leaf+"ames: {} ack crashed {}" + ?. msg.veb ~ + :- >[bone=bone message-num=message-num meat=meat]:shut-packet< + tang.u.dud + =< abet + (call:abed:(pump-core bone) %hear [message-num +.meat]:shut-packet) + :: +on-memo: handle request to send message + :: + ++ on-memo + |= [=bone payload=* valence=?(%plea %boon)] + ^+ peer-core + ?: ?& (~(has in closing.peer-state) bone) + !=(payload [%$ /flow %cork ~]) + == + ~> %slog.0^leaf/"ames: ignoring message on closing bone {}" + peer-core + ?: (~(has in corked.peer-state) bone) + ~> %slog.0^leaf/"ames: ignoring message on corked bone {}" + peer-core + :: + =/ =message-blob (dedup-message (jim payload)) + =. peer-core abet:(call:abed:(pump-core bone) %memo message-blob) + :: + ?: ?& =(%boon valence) + (gte now (add ~s30 last-contact.qos.peer-state)) + == + check-clog + peer-core + :: +on-wake: handle timer expiration + :: + ++ on-wake + |= [=bone error=(unit tang)] + ^+ peer-core + :: if we previously errored out, print and reset timer for later + :: + :: This really shouldn't happen, but if it does, make sure we + :: don't brick either this messaging flow or Behn. + :: + ?^ error + =. peer-core + (pe-emit duct %pass /wake-fail %d %flog %crud %ames-wake u.error) + :: + ?~ message-pump-state=(~(get by snd.peer-state) bone) + peer-core + =* packet-state packet-pump-state.u.message-pump-state + ?~ next-wake.packet-state peer-core + :: If we crashed because we woke up too early, assume another + :: timer is already set. + :: + ?: (lth now.channel u.next-wake.packet-state) + peer-core + :: + =/ =wire (make-pump-timer-wire her bone) + (pe-emit duct %pass wire %b %wait (add now.channel ~s30)) + :: update and print connection state + :: + =. peer-core %- update-qos + =/ expiry=@da (add ~s30 last-contact.qos.peer-state) + =? -.qos.peer-state + (gte now.channel expiry) + %dead + qos.peer-state + :: expire direct route + :: + :: If the peer is not responding, mark the .lane.route as + :: indirect. The next packets we emit will be sent to the + :: receiver's sponsorship chain in case the receiver's + :: transport address has changed and this lane is no longer + :: valid. + :: + :: If .her is a galaxy, the lane will always remain direct. + :: + =? route.peer-state + ?& ?=(%dead -.qos.peer-state) + ?=(^ route.peer-state) + direct.u.route.peer-state + !=(%czar (clan:title her)) + == + route.peer-state(direct.u %.n) + :: resend comet attestation packet if first message times out + :: + :: The attestation packet doesn't get acked, so if we tried to + :: send a packet but it timed out, maybe they didn't get our + :: attestation. + :: + :: Only resend on timeout of packets in the first message we + :: send them, since they should remember forever. + :: + =? event-core + ?& ?=(%pawn (clan:title our)) + =(1 current:(~(got by snd.peer-state) bone)) + == + (send-blob | her (attestation-packet [her her-life]:channel)) + ?: (~(has in corked.peer-state) bone) + :: if the bone was corked the flow doesn't exist anymore + :: TODO: clean up corked bones in the peer state when it's _safe_? + :: (e.g. if this bone is N blocks behind the next one) + :: + peer-core + :: maybe resend some timed out packets + :: + abet:(call:abed:(pump-core bone) %wake ~) + :: + +| %implementation + :: +dedup-message: replace with any existing copy of this message + :: + ++ dedup-message + |= =message-blob + ^+ message-blob + ?: (lte (met 13 message-blob) 1) + message-blob + =/ peers-l=(list [=ship =ship-state]) ~(tap by peers.ames-state) + |- ^+ message-blob + =* peer-loop $ + ?~ peers-l + message-blob + ?. ?=(%known -.ship-state.i.peers-l) + peer-loop(peers-l t.peers-l) + =/ snd-l=(list [=bone =message-pump-state]) + ~(tap by snd.ship-state.i.peers-l) + |- ^+ message-blob + =* bone-loop $ + ?~ snd-l peer-loop(peers-l t.peers-l) + =* unsent-fragments unsent-fragments.message-pump-state.i.snd-l + =/ blob-l=(list ^message-blob) + ~(tap to unsent-messages.message-pump-state.i.snd-l) + |- ^+ message-blob + =* blob-loop $ + ?^ blob-l + ?: =(i.blob-l message-blob) + i.blob-l + blob-loop(blob-l t.blob-l) + ?~ unsent-fragments bone-loop(snd-l t.snd-l) + ?: =(message-blob fragment.i.unsent-fragments) + `@`fragment.i.unsent-fragments + bone-loop(snd-l t.snd-l) + :: +check-clog: notify clients if peer has stopped responding + :: + ++ check-clog + ^+ peer-core + :: + :: Only look at response bones. Request bones are unregulated, + :: since requests tend to be much smaller than responses. + :: + =/ pumps=(list message-pump-state) + %+ murn ~(tap by snd.peer-state) + |= [=bone =message-pump-state] + ?: =(0 (end 0 bone)) + ~ + `u=message-pump-state + :: if clogged, notify client vane + :: + |^ ?. &(nuf-messages nuf-memory) peer-core + %+ roll ~(tap in heeds.peer-state) + |=([d=^duct core=_peer-core] (pe-emit:core d %give %clog her)) + :: +nuf-messages: are there enough messages to mark as clogged? + :: + ++ nuf-messages + =| num=@ud + |- ^- ? + ?~ pumps | + =. num + ;: add num + (sub [next current]:i.pumps) + ~(wyt in unsent-messages.i.pumps) + == + ?: (gte num msg.cong.ames-state) + & + $(pumps t.pumps) + :: +nuf-memory: is enough memory used to mark as clogged? + :: + ++ nuf-memory + =| mem=@ud + |- ^- ? + ?~ pumps | + =. mem + %+ add + %- ~(rep in unsent-messages.i.pumps) + |=([a=@ b=_mem] (add b (met 3 a))) + ?~ unsent-fragments.i.pumps 0 + (met 3 fragment.i.unsent-fragments.i.pumps) + ?: (gte mem mem.cong.ames-state) + & + $(pumps t.pumps) + -- + :: +send-shut-packet: fire encrypted packet at rcvr and maybe sponsors + :: + ++ send-shut-packet + |= =shut-packet + ^+ peer-core + :: swizzle last bone bit before sending + :: + :: The peer has the opposite perspective from ours about what + :: kind of flow this is (forward/backward), so flip the bit + :: here. + :: + =. event-core + %^ send-blob | her + %- encode-packet + %: encode-shut-packet + shut-packet(bone (mix 1 bone.shut-packet)) + symmetric-key.channel + our her + our-life.channel her-life.channel + == + peer-core + :: +recork-one: re-send the next %cork to the peer + :: + ++ recork-one + ^+ peer-core + =/ boz (sort ~(tap in closing.peer-state) lte) + |- ^+ peer-core + ?~ boz peer-core + =/ pum=message-pump-state (~(got by snd.peer-state) i.boz) + ?. =(next current):pum + $(boz t.boz) + :: sanity check on the message pump state + :: + ?. ?& =(~ unsent-messages.pum) + =(~ unsent-fragments.pum) + =(~ live.packet-pump-state.pum) + == + ~> %slog.0^leaf/"ames: bad pump state {}" + $(boz t.boz) + :: no outstanding messages, so send a new %cork + :: + :: TODO use +trace + ~> %slog.0^leaf/"ames: recork {}" + =/ =plea [%$ /flow [%cork ~]] + (on-memo i.boz plea %plea) + :: + :: +handle-cork: handle flow kill after server ames has taken %done + :: + ++ handle-cork + |= =bone + ^+ peer-core + ?. (~(has in closing.peer-state) bone) peer-core + =/ =message-pump-state + (~(gut by snd.peer-state) bone *message-pump-state) + =? peer-core ?=(^ next-wake.packet-pump-state.message-pump-state) + =* next-wake u.next-wake.packet-pump-state.message-pump-state + =/ =wire (make-pump-timer-wire her bone) + :: resetting timer for boons + :: + (pe-emit [/ames]~ %pass wire %b %rest next-wake) + =/ nax-bone=^bone (mix 0b10 bone) + =? peer-core (~(has by snd.peer-state) nax-bone) + %. peer-core + %+ pe-trace odd.veb + |.("remove naxplanation flow {<[her bone=nax-bone]>}") + =. peer-state + =, peer-state + %_ peer-state + :: preemptively delete nax flows (e.g. nacks for %watches) + :: + snd (~(del by (~(del by snd) bone)) nax-bone) + rcv (~(del by rcv) bone) + corked (~(put in corked) bone) + closing (~(del in closing) bone) + == + peer-core + :: + +| %internals + :: +mu: constructor for |pump message sender core + :: + ++ mu + |= [=bone state=message-pump-state] + |% + :: + +| %helpers + :: + ++ pump . + ++ abed + pump(state (~(gut by snd.peer-state) bone *message-pump-state)) + :: + ++ abet + :: if the bone was corked, it's been removed from the state, + :: so we avoid adding it again. + :: + =? snd.peer-state !corked (~(put by snd.peer-state) bone state) + peer-core + :: + ++ packet-pump (pu packet-pump-state.state) + ++ mu-trace + |= [verb=? print=(trap tape)] + ^+ same + (trace verb her ships.bug.channel print) + :: + ++ closing (~(has in closing.peer-state) bone) + ++ corked (~(has in corked.peer-state) bone) + :: +is-message-num-in-range: %.y unless duplicate or future ack + :: + ++ is-message-num-in-range + |= =message-num + ^- ? + :: + ?: (gte message-num next.state) + %.n + ?: (lth message-num current.state) + %.n + !(~(has by queued-message-acks.state) message-num) + :: + +| %entry-points + :: +call: handle a $message-pump-task + :: + ++ call + |= task=message-pump-task + ^+ pump + :: + =. pump =~((dispatch-task task) feed-packets) + =+ top=top-live:packet-pump + :: sanity check to isolate error cases + :: + ?. |(?=(~ top) (lte current.state message-num.key.u.top)) + ~| [%strange-current current=current.state key.u.top] + !! + :: maybe trigger a timer based on congestion control calculations + :: + abet:(call:packet-pump %halt ~) + :: + +| %tasks + :: +dispatch-task: perform task-specific processing + :: + ++ dispatch-task + |= task=message-pump-task + ^+ pump + :: + ?- -.task + %memo (on-memo message-blob.task) + %prod abet:(call:packet-pump %prod ~) + %wake abet:(call:packet-pump %wake current.state) + %near %- on-done + [[message-num %naxplanation error]:naxplanation.task %&] + %hear + ?- -.ack-meat.task + %& + (on-hear [message-num fragment-num=p.ack-meat]:task) + :: + %| + =/ cork=? + =+ top=top-live:packet-pump + :: If we send a %cork and get an ack, we can know by + :: sequence number that the ack is for the %cork message + :: + ?& closing + ?=(^ top) + =(0 ~(wyt in unsent-messages.state)) + =(0 (lent unsent-fragments.state)) + =(1 ~(wyt by live.packet-pump-state.state)) + =(message-num:task message-num.key.u.top) + == + =+ [ack msg]=[p.ack-meat message-num]:task + =. pump + %- on-done + [[msg ?:(ok.ack [%ok ~] [%nack ~])] cork] + ?. &(!ok.ack cork) pump + %. pump + %+ mu-trace odd.veb + |.("got nack for %cork {}") + == == + :: +on-memo: handle request to send a message + :: + ++ on-memo + |= blob=message-blob + pump(unsent-messages.state (~(put to unsent-messages.state) blob)) + :: +on-hear: handle packet acknowledgment + :: + ++ on-hear + |= [=message-num =fragment-num] + ^+ pump + :: pass to |packet-pump unless duplicate or future ack + :: + ?. (is-message-num-in-range message-num) + %. pump + (mu-trace snd.veb |.("hear pump out of range")) + abet:(call:packet-pump %hear message-num fragment-num) + :: +on-done: handle message acknowledgment + :: + :: A nack-trace message counts as a valid message nack on the + :: original failed message. + :: + :: This prevents us from having to wait for a message nack packet, + :: which would mean we couldn't immediately ack the nack-trace + :: message, which would in turn violate the semantics of backward + :: flows. + :: + ++ on-done + |= [[=message-num =ack] cork=?] + ^+ pump + :: unsent messages from the future should never get acked + :: + ~| :* bone=bone + mnum=message-num + next=next.state + unsent-messages=~(wyt in unsent-messages.state) + unsent-fragments=(lent unsent-fragments.state) + any-live=!=(~ live.packet-pump-state.state) + == + ?> (lth message-num next.state) + :: ignore duplicate message acks + :: + ?: (lth message-num current.state) + %. pump + %+ mu-trace snd.veb |. + "duplicate done {}" + :: ignore duplicate and future acks + :: + ?. (is-message-num-in-range message-num) + pump + :: clear and print .unsent-fragments if nonempty + :: + =? unsent-fragments.state + &(=(current next) ?=(^ unsent-fragments)):state + :: + ~> %slog.0^leaf/"ames: early message ack {}" + ~ + :: clear all packets from this message from the packet pump + :: + =. pump abet:(call:packet-pump %done message-num lag=*@dr) + :: enqueue this ack to be sent back to local client vane + :: + :: Don't clobber a naxplanation with just a nack packet. + :: + =? queued-message-acks.state + =/ old (~(get by queued-message-acks.state) message-num) + !?=([~ %naxplanation *] old) + (~(put by queued-message-acks.state) message-num ack) + :: emit local acks from .queued-message-acks until incomplete + :: + |- ^+ pump + :: if .current hasn't been fully acked, we're done + :: + ?~ cur=(~(get by queued-message-acks.state) current.state) + pump + :: .current is complete; pop, emit local ack, and try next message + :: + =. queued-message-acks.state + (~(del by queued-message-acks.state) current.state) + :: clear all packets from this message from the packet pump + :: + :: Note we did this when the original packet came in, a few lines + :: above. It's not clear why, but it doesn't always clear the + :: packets when it's not the current message. As a workaround, + :: we clear the packets again when we catch up to this packet. + :: + :: This is slightly inefficient because we run this twice for + :: each packet and it may emit a few unnecessary packets, but + :: it's not incorrect. pump-metrics are updated only once, + :: at the time when we actually delete the packet. + :: + =. pump abet:(call:packet-pump %done current.state lag=*@dr) + :: give %done to vane if we're ready + :: + ?- -.u.cur + %ok + =. peer-core + :: don't give %done for corks + :: + ?: cork (pump-cork current.state) + (pump-done current.state ~) + $(current.state +(current.state)) + :: + %nack pump + :: + %naxplanation + =. peer-core (pump-done current.state `error.u.cur) + $(current.state +(current.state)) + == + :: + +| %implementation + :: +feed-packets: give packets to |packet-pump until full + :: + ++ feed-packets + :: if nothing to send, no-op + :: + ?: &(=(~ unsent-messages) =(~ unsent-fragments)):state + pump + :: we have unsent fragments of the current message; feed them + :: + ?. =(~ unsent-fragments.state) + + :: we have unsent fragments of the current message; feed them + :: + =^ unsent pump abut:(feed:packet-pump unsent-fragments.state) + =. unsent-fragments.state unsent + :: if it sent all of them, feed it more; otherwise, we're done + :: + ?~(unsent feed-packets pump) + :: .unsent-messages is nonempty; pop a message off and feed it + :: + =^ =message-blob unsent-messages.state + ~(get to unsent-messages.state) + :: break .message into .chunks and set as .unsent-fragments + :: + =. unsent-fragments.state (split-message next.state message-blob) + :: try to feed packets from the next message + :: + =. next.state +(next.state) + feed-packets + :: +pump-done: handle |message-pump's report of message (n)ack + :: + ++ pump-done + |= [=message-num error=(unit error)] + ^+ peer-core + ?: ?& =(1 (end 0 bone)) + =(1 (end 0 (rsh 0 bone))) + (~(has in corked.peer-state) (mix 0b10 bone)) + == + %- %+ pe-trace msg.veb + =/ dat [her bone=bone message-num=message-num -.task] + |.("remove naxplanation flow {}") + :: XX we avoid re-adding the bone in abet:mu; test that it works + :: + =. snd.peer-state (~(del by snd.peer-state) bone) + peer-core + :: if odd bone, ack is on "subscription update" message; no-op + :: + ?: =(1 (end 0 bone)) peer-core + :: even bone; is this bone a nack-trace bone? + :: + ?: =(1 (end 0 (rsh 0 bone))) + :: nack-trace bone; assume .ok, clear nack from |message-sink + :: + =/ target-bone=^bone (mix 0b10 bone) + =< abet + (call:abed:(mi target-bone *message-sink-state) %drop message-num) + ?: &(closing ?=(%near -.task)) + :: if the bone belongs to a closing flow and we got a + :: naxplanation, don't relay ack to the client vane + :: + peer-core + :: not a nack-trace bone; relay ack to client vane + :: + (pe-emit (got-duct bone) %give %done error) + :: XX impure +abet pattern + :: +pump-cork: kill flow on cork sender side + :: + ++ pump-cork + |= =message-num + ^+ peer-core + :: clear all packets from this message from the packet pump + :: + =. pump abet:(call:packet-pump %done message-num lag=*@dr) + ?: corked + %- %+ pe-trace odd.veb + |.("trying to delete a corked bone={}") + peer-core + =/ nack-bone=^bone (mix 0b10 bone) + =? rcv.peer-state (~(has by rcv.peer-state) nack-bone) + :: if the publisher was behind we remove nacks on that bone + :: + (~(del by rcv.peer-state) nack-bone) + =. peer-state + =, peer-state + %_ peer-state + snd (~(del by snd) bone) + rcv (~(del by rcv) bone) + corked (~(put in corked) bone) + closing (~(del in closing) bone) + by-duct.ossuary (~(del by by-duct.ossuary) (got-duct bone)) + by-bone.ossuary (~(del by by-bone.ossuary) bone) + == + :: since we got one cork ack, try the next one + :: + recork-one + :: +pu: construct |packet-pump core + :: + ++ pu + |= state=packet-pump-state + :: + =| unsent=(list static-fragment) + |% + +| %helpers + ++ pack . + :: +abut: abet with gifts + :: + ++ abut [unsent abet] + ++ abet pump(packet-pump-state.state state) + ++ pu-trace + |= [verb=? print=(trap tape)] + ^+ same + (trace verb her ships.bug.channel print) + :: + ++ pu-wire (make-pump-timer-wire her bone) + ++ pu-emit |=(=note (pe-emit pump-duct %pass pu-wire note)) + :: +packet-queue: type for all sent fragments (order: seq number) + :: + ++ packet-queue + %- (ordered-map live-packet-key live-packet-val) + lte-packets + :: +live-packets: number of sent packets awaiting ack + :: + ++ live-packets + ^- @ud + ~(wyt by live.state) + :: +gauge: inflate a |pump-gauge to track congestion control + :: + ++ gauge (ga metrics.state) + :: +to-static-fragment: convenience function for |packet-pump + :: + ++ to-static-fragment + |= [live-packet-key live-packet-val] + ^- static-fragment + [message-num num-fragments fragment-num fragment] + :: + ++ pump-duct ~[/ames] + ++ top-live (pry:packet-queue live.state) + :: + +| %entry-points + :: + ++ call + |= task=packet-pump-task + ^+ pack + ?- -.task + %hear (on-hear [message-num fragment-num]:task) + %done (on-done message-num.task) + %wake (on-wake current.task) + %prod on-prod + %halt set-wake + == + :: +feed: try to send a list of packets, returning unsent ones + :: + ++ feed + |= fragments=(list static-fragment) + ^+ pack + :: bite off as many fragments as we can send + :: + =/ num-slots num-slots:gauge + =/ sent (scag num-slots fragments) + =. unsent (slag num-slots fragments) + :: if nothing to send, we're done + :: + ?~ sent pack + :: convert $static-fragment's into +ordered-set [key val] pairs + :: + =/ send-list + %+ turn sent + |= static-fragment + ^- [key=live-packet-key val=live-packet-val] + :: + :- [message-num fragment-num] + :- [sent-date=now.channel retries=0 skips=0] + [num-fragments fragment] + :: update .live and .metrics + :: + =. live.state (gas:packet-queue live.state send-list) + :: TMI + :: + => .(sent `(list static-fragment)`sent) + :: emit a $shut-packet for each packet to send + :: + =. peer-core + %+ roll sent + |= [packet=static-fragment core=_peer-core] + (send-shut-packet bone [message-num %& +]:packet) + pack + :: + +| %tasks + :: +on-prod: reset congestion control, re-send packets + :: + ++ on-prod + ^+ pack + ?: =(~ next-wake.state) + pack + :: + =. metrics.state + %*(. *pump-metrics counter counter.metrics.state) + =. live.state + %+ run:packet-queue live.state + |=(p=live-packet-val p(- *packet-state)) + :: + =/ sot (max 1 num-slots:gauge) + =/ liv live.state + |- ^+ pack + ?: =(0 sot) pack + ?: =(~ liv) pack + =^ hed liv (pop:packet-queue liv) + =. peer-core + %+ send-shut-packet bone + [message-num %& +]:(to-static-fragment hed) + $(sot (dec sot)) + :: +on-wake: handle packet timeout + :: + ++ on-wake + |= current=message-num + ^+ pack + :: assert temporal coherence + :: + ?< =(~ next-wake.state) + =. next-wake.state ~ + :: tell congestion control a packet timed out + :: + =. metrics.state on-timeout:gauge + =| acc=(unit static-fragment) + :: re-send first packet and update its state in-place + :: + =; [static-fragment=_acc live=_live.state] + =. live.state live + =? peer-core ?=(^ static-fragment) + %- %+ pu-trace snd.veb + =/ nums [message-num fragment-num]:u.static-fragment + |.("dead {}") + (send-shut-packet bone [message-num %& +]:u.static-fragment) + pack + :: + %^ (dip:packet-queue _acc) live.state acc + |= $: acc=_acc + key=live-packet-key + val=live-packet-val + == + ^- [new-val=(unit live-packet-val) stop=? _acc] + :: if already acked later message, don't resend + :: + ?: (lth message-num.key current) + %. [~ stop=%.n ~] + %- slog :_ ~ :- %leaf + "ames: strange wake queue, expected {}, got {}" + :: packet has expired; update it in-place, stop, and produce it + :: + =. last-sent.val now.channel + =. retries.val +(retries.val) + :: + [`val stop=%.y `(to-static-fragment key val)] + :: +fast-resend-after-ack: resend timed out packets + :: + :: After we finally receive an ack, we want to resend all the + :: live packets that have been building up. + :: + ++ fast-resend-after-ack + |= [=message-num =fragment-num] + ^+ pack + =; res=[resends=(list static-fragment) live=_live.state] + =. live.state live.res + =. peer-core + %+ reel resends.res + |= [packet=static-fragment core=_peer-core] + (send-shut-packet bone [message-num %& +]:packet) + pack + :: + =/ acc + resends=*(list static-fragment) + :: + %^ (dip:packet-queue _acc) live.state acc + |= $: acc=_acc + key=live-packet-key + val=live-packet-val + == + ^- [new-val=(unit live-packet-val) stop=? _acc] + ?: (lte-packets key [message-num fragment-num]) + [new-val=`val stop=%.n acc] + :: + ?: (gth (next-expiry:gauge key val) now.channel) + [new-val=`val stop=%.y acc] + :: + =. last-sent.val now.channel + =. resends.acc [(to-static-fragment key val) resends.acc] + [new-val=`val stop=%.n acc] + :: +on-hear: handle ack on a live packet + :: + :: If the packet was in our queue, delete it and update our + :: metrics, possibly re-sending skipped packets. Otherwise, no-op + :: + ++ on-hear + |= [=message-num =fragment-num] + ^+ pack + :: + =- :: if no sent packet matches the ack, + :: don't apply mutations or effects + :: + ?. found.- + %- (pu-trace snd.veb |.("miss {}")) + pack + :: + =. metrics.state metrics.- + =. live.state live.- + %- ?. ?| =(0 fragment-num) + =(0 (mod counter.metrics.state 20)) + == + same + %+ pu-trace snd.veb + |.("send: {}") + :: .resends is backward, so fold backward and emit + :: + =. peer-core + %+ reel resends.- + |= [packet=static-fragment core=_peer-core] + (send-shut-packet bone [message-num %& +]:packet) + (fast-resend-after-ack message-num fragment-num) + :: + =/ acc + :* found=`?`%.n + resends=*(list static-fragment) + metrics=metrics.state + == + :: + ^+ [acc live=live.state] + :: + %^ (dip:packet-queue _acc) live.state acc + |= $: acc=_acc + key=live-packet-key + val=live-packet-val + == + ^- [new-val=(unit live-packet-val) stop=? _acc] + :: + =/ gauge (ga metrics.acc) + :: is this the acked packet? + :: + ?: =(key [message-num fragment-num]) + :: delete acked packet, update metrics, and stop traversal + :: + =. found.acc %.y + =. metrics.acc (on-ack:gauge -.val) + [new-val=~ stop=%.y acc] + :: is this a duplicate ack? + :: + ?. (lte-packets key [message-num fragment-num]) + :: stop, nothing more to do + :: + [new-val=`val stop=%.y acc] + :: ack was on later packet; mark skipped, tell gauge, & continue + :: + =. skips.val +(skips.val) + =^ resend metrics.acc (on-skipped-packet:gauge -.val) + ?. resend + [new-val=`val stop=%.n acc] + :: + =. last-sent.val now.channel + =. retries.val +(retries.val) + =. resends.acc [(to-static-fragment key val) resends.acc] + [new-val=`val stop=%.n acc] + :: +on-done: apply ack to all packets from .message-num + :: + ++ on-done + |= =message-num + ^+ pack + :: + =- =. metrics.state metrics.- + =. live.state live.- + :: + %. (fast-resend-after-ack message-num `fragment-num`0) + (pu-trace snd.veb |.("done {}")) + :: + ^+ [metrics=metrics.state live=live.state] + :: + %^ (dip:packet-queue pump-metrics) live.state acc=metrics.state + |= $: metrics=pump-metrics + key=live-packet-key + val=live-packet-val + == + ^- [new-val=(unit live-packet-val) stop=? pump-metrics] + :: + =/ gauge (ga metrics) + :: if we get an out-of-order ack for a message, skip until it + :: + ?: (lth message-num.key message-num) + [new-val=`val stop=%.n metrics] + :: if packet was from acked message, delete it and continue + :: + ?: =(message-num.key message-num) + [new-val=~ stop=%.n metrics=(on-ack:gauge -.val)] + :: we've gone past the acked message; we're done + :: + [new-val=`val stop=%.y metrics] + :: +set-wake: set, unset, or reset timer, emitting moves + :: + ++ set-wake + ^+ pack + :: if nonempty .live, pry at head to get next wake time + :: + =/ new-wake=(unit @da) + ?~ head=(pry:packet-queue live.state) + ~ + `(next-expiry:gauge u.head) + :: no-op if no change + :: + ?: =(new-wake next-wake.state) pack + :: unset old timer if non-null + :: + =? peer-core !=(~ next-wake.state) + (pu-emit %b %rest (need next-wake.state)) + :: set new timer if non-null + :: + =? peer-core ?=(^ new-wake) + (pu-emit %b %wait u.new-wake) + :: + =? next-wake.state !=(~ next-wake.state) ~ :: unset + =? next-wake.state ?=(^ new-wake) new-wake :: reset + :: + pack + :: + +| %internals + :: +ga: construct |pump-gauge congestion control core + :: + ++ ga + |= pump-metrics + =* ship her + =* now now.channel + =* metrics +< + |% + +| %helpers + :: + ++ ga-trace + |= [verb=? print=(trap tape)] + ^+ same + (trace verb ship ships.bug.channel print) + :: +next-expiry: when should a newly sent fresh packet time out? + :: + :: Use rtt + 4*sigma, where sigma is the mean deviation of rtt. + :: This should make it unlikely that a packet would time out + :: from a delay, as opposed to an actual packet loss. + :: + ++ next-expiry + |= [live-packet-key live-packet-val] + ^- @da + (add last-sent rto) + :: +num-slots: how many packets can we send right now? + :: + ++ num-slots + ^- @ud + (sub-safe cwnd live-packets) + :: + :: +clamp-rto: apply min and max to an .rto value + :: + ++ clamp-rto + |= rto=@dr + ^+ rto + (min ~m2 (max ^~((div ~s1 5)) rto)) + :: +in-slow-start: %.y iff we're in "slow-start" mode + :: + ++ in-slow-start + ^- ? + (lth cwnd ssthresh) + :: +in-recovery: %.y iff we're recovering from a skipped packet + :: + :: We finish recovering when .live-packets finally dips back + :: down to .cwnd. + :: + ++ in-recovery + ^- ? + (gth live-packets cwnd) + :: +sub-safe: subtract with underflow protection + :: + ++ sub-safe + |= [a=@ b=@] + ^- @ + ?:((lte a b) 0 (sub a b)) + :: +show: produce a printable version of .metrics + :: + ++ show + =/ ms (div ~s1 1.000) + :: + :* rto=(div rto ms) + rtt=(div rtt ms) + rttvar=(div rttvar ms) + ssthresh=ssthresh + cwnd=cwnd + num-live=live-packets + counter=counter + == + :: + +| %entry-points + :: +on-ack: adjust metrics based on a packet getting acknowledged + :: + ++ on-ack + |= =packet-state + ^- pump-metrics + :: + =. counter +(counter) + :: if below congestion threshold, add 1; else, add avg 1 / cwnd + :: + =. cwnd + ?: in-slow-start + +(cwnd) + (add cwnd !=(0 (mod (mug now) cwnd))) + :: if this was a re-send, don't adjust rtt or downstream state + :: + ?. =(0 retries.packet-state) + metrics + :: rtt-datum: new rtt measurement based on packet roundtrip + :: + =/ rtt-datum=@dr (sub-safe now last-sent.packet-state) + :: rtt-error: difference between this measurement and expected + :: + =/ rtt-error=@dr + ?: (gte rtt-datum rtt) + (sub rtt-datum rtt) + (sub rtt rtt-datum) + :: exponential weighting ratio for .rtt and .rttvar + :: + =. rtt (div (add rtt-datum (mul rtt 7)) 8) + =. rttvar (div (add rtt-error (mul rttvar 7)) 8) + =. rto (clamp-rto (add rtt (mul 4 rttvar))) + :: + %. metrics + %+ ga-trace ges.veb |. + "ack update {}" + :: +on-skipped-packet: handle misordered ack + :: + ++ on-skipped-packet + |= packet-state + ^- [resend=? pump-metrics] + :: + =/ resend=? &(=(0 retries) |(in-recovery (gte skips 3))) + :- resend + :: + =? cwnd !in-recovery (max 2 (div cwnd 2)) + %- %+ ga-trace snd.veb + |.("skip {}") + metrics + :: +on-timeout: (re)enter slow-start mode on packet loss + :: + ++ on-timeout + ^- pump-metrics + :: + %- (ga-trace ges.veb |.("timeout update {}")) + =: ssthresh (max 1 (div cwnd 2)) + cwnd 1 + rto (clamp-rto (mul rto 2)) + == + metrics + -- + -- + -- + :: +mi: constructor for |sink message receiver core + :: + ++ mi + |= [=bone state=message-sink-state] + |% + :: + +| %helpers + :: + ++ sink . + ++ abed + sink(state (~(gut by rcv.peer-state) bone *message-sink-state)) + :: + ++ abet + :: if the bone was corked, it's been removed from the state, + :: so we avoid adding it again. + :: + =? rcv.peer-state !corked (~(put by rcv.peer-state) bone state) + peer-core + :: + ++ mi-trace + |= [verb=? print=(trap tape)] + ^+ same + (trace verb her ships.bug.channel print) + :: + ++ closing (~(has in closing.peer-state) bone) + ++ corked (~(has in corked.peer-state) bone) + ++ pump-core |=(=^bone (mu bone *message-pump-state)) + :: + +| %entry-points + :: +call: handle a $message-sink-task + :: + ++ call + |= task=message-sink-task + ^+ sink + :: if we get a plea request and have corked this flow, always ack + :: + ?: corked + =? peer-core &(?=(%hear -.task) =(1 (end 0 bone))) + %- (mi-trace odd.veb |.("hear plea on a corked bone={}")) + %+ send-shut-packet bone + [message-num.shut-packet.task %| %| ok=& lag=*@dr] + sink + ?- -.task + %drop sink(nax.state (~(del in nax.state) message-num.task)) + %done (done ok.task) + %hear (hear [lane shut-packet ok]:task) + == + :: + +| %tasks + :: +hear: receive message fragment, possibly completing message + :: + ++ hear + |= [=lane =shut-packet ok=?] + ^+ sink + :: we know this is a fragment, not an ack; expose into namespace + :: + ?> ?=(%& -.meat.shut-packet) + =+ [num-fragments fragment-num fragment]=+.meat.shut-packet + :: seq: message sequence number, for convenience + :: + =/ seq message-num.shut-packet + :: ignore messages from far future; limit to 10 in progress + :: + ?: (gte seq (add 10 last-acked.state)) + %- %+ mi-trace odd.veb + |.("future %hear {}") + sink + :: + =/ is-last-fragment=? =(+(fragment-num) num-fragments) + :: always ack a dupe! + :: + ?: (lte seq last-acked.state) + ?. is-last-fragment + :: single packet ack + :: + =. peer-core (send-shut-packet bone seq %| %& fragment-num) + %. sink + %+ mi-trace rcv.veb + |.("send dupe ack {}") + :: whole message (n)ack + :: + =/ ok=? !(~(has in nax.state) seq) + =. peer-core (send-shut-packet bone seq %| %| ok lag=`@dr`0) + %. sink + %+ mi-trace rcv.veb + |.("send dupe message ack {} ok={}") + :: last-acked}" + sink + :: ack all other packets + :: + =. peer-core (send-shut-packet bone seq %| %& fragment-num) + %- %+ mi-trace rcv.veb |. + =/ data + :* seq=seq fragment-num=fragment-num + num-fragments=num-fragments closing=closing + == + "send ack-1 {}" + sink + :: last-heard (gth num-fragments.u.existing fragment-num) + ?> =(num-fragments.u.existing num-fragments) + :: + u.existing + :: + =/ already-heard-fragment=? + (~(has by fragments.partial-rcv-message) fragment-num) + :: ack dupes except for the last fragment, in which case drop + :: + ?: already-heard-fragment + ?: is-last-fragment + %- %+ mi-trace rcv.veb |. + =/ data + [her seq=seq lh=last-heard.state la=last-acked.state] + "hear last dupe {}" + sink + =. peer-core (send-shut-packet bone seq %| %& fragment-num) + %. sink + %+ mi-trace rcv.veb + |.("send dupe ack {}") + :: new fragment; store in state and check if message is done + :: + =. num-received.partial-rcv-message + +(num-received.partial-rcv-message) + :: + =. fragments.partial-rcv-message + (~(put by fragments.partial-rcv-message) fragment-num fragment) + :: + =. live-messages.state + (~(put by live-messages.state) seq partial-rcv-message) + :: ack any packet other than the last one, and continue either way + :: + =? peer-core !is-last-fragment + %- %+ mi-trace rcv.veb |. + =/ data + [seq=seq fragment-num=fragment-num fragments=num-fragments] + "send ack-2 {}" + (send-shut-packet bone seq %| %& fragment-num) + :: enqueue all completed messages starting at +(last-heard.state) + :: + |- ^+ sink + :: if this is not the next message to ack, we're done + :: + ?. =(seq +(last-heard.state)) + sink + :: if we haven't heard anything from this message, we're done + :: + ?~ live=(~(get by live-messages.state) seq) + sink + :: if the message isn't done yet, we're done + :: + ?. =(num-received num-fragments):u.live + sink + :: we have whole message; update state, assemble, and send to vane + :: + =. last-heard.state +(last-heard.state) + =. live-messages.state (~(del by live-messages.state) seq) + :: + %- %+ mi-trace msg.veb + |.("hear {} {} {}kb") + =/ message=* (assemble-fragments [num-fragments fragments]:u.live) + =/ empty=? =(~ pending-vane-ack.state) + :: enqueue message to be sent to local vane + :: + =. pending-vane-ack.state + (~(put to pending-vane-ack.state) seq message) + :: + =? sink empty (handle-sink seq message ok) + :: + $(seq +(seq)) + :: +done: handle confirmation of message processing from vane + :: + ++ done + |= ok=? + ^+ sink + :: + =^ pending pending-vane-ack.state + ~(get to pending-vane-ack.state) + =/ =message-num message-num.p.pending + :: + =. last-acked.state +(last-acked.state) + =? nax.state !ok (~(put in nax.state) message-num) + :: + =. peer-core + (send-shut-packet bone message-num %| %| ok lag=`@dr`0) + ?~ next=~(top to pending-vane-ack.state) sink + (handle-sink message-num.u.next message.u.next ok) + :: + +| %implementation + :: +handle-sink: dispatch message + :: + :: odd bone: %plea request message + :: even bone, 0 second bit: %boon response message + :: even bone, 1 second bit: nack-trace %boon message + :: + ++ handle-sink + |= [=message-num message=* ok=?] + |^ ^+ sink + ?: =(1 (end 0 bone)) sink-plea + ?: =(0 (end 0 (rsh 0 bone))) sink-boon + sink-nack + :: XX FIXME: impure +abet pattern + ++ sink-plea + ^+ sink + ?: |(closing corked) sink + %- %+ mi-trace msg.veb + =/ dat [her bone=bone message-num=message-num] + |.("sink plea {}") + =; pe=_peer-core + =. peer-core pe + =? sink !ok (call %done ok=%.n) + sink + ?. ok + :: send nack-trace with blank .error for security + :: + =/ nack-bone=^bone (mix 0b10 bone) + =/ =message-blob (jam [message-num *error]) + abet:(call:abed:(pump-core nack-bone) %memo message-blob) + =+ ;; =plea message + =/ =wire (make-bone-wire her her-rift.channel bone) + :: + ?. =(vane.plea %$) + ?+ vane.plea ~| %ames-evil-vane^our^her^vane.plea !! + %c (pe-emit duct %pass wire %c %plea her plea) + %g (pe-emit duct %pass wire %g %plea her plea) + %j (pe-emit duct %pass wire %j %plea her plea) + == + :: a %cork plea is handled using %$ as the recipient vane to + :: account for publishers that still handle ames-to-ames %pleas + :: + ?> &(?=([%cork *] payload.plea) ?=(%flow -.path.plea)) + :: XX FIXME impure +abet pattern... + :: + =. closing.peer-state (~(put in closing.peer-state) bone) + (pe-emit duct %pass wire %a %plea her [%a /close ~]) + :: + :: +sink-boon: handle response message, acking unconditionally + :: + :: .bone must be mapped in .ossuary.peer-state, or we crash. + :: This means a malformed message will kill a flow. We + :: could change this to a no-op if we had some sort of security + :: reporting. + :: + :: Note that if we had several consecutive packets in the queue + :: and crashed while processing any of them, the %hole card + :: will turn *all* of them into losts/nacks. + :: + :: TODO: This handles a previous crash in the client vane, but + :: not in %ames itself. + :: + ++ sink-boon + ^+ sink + ?: |(closing corked) sink + %- %+ mi-trace msg.veb |. + :: XX -.task not visible, FIXME + :: + =/ dat [her bone=bone message-num=message-num] + ?:(ok "sink boon {}" "crashed on sink boon {}") + =? moves !ok + :: we previously crashed on this message; notify client vane + :: + %+ turn moves + |= =move + ?. ?=([* %give %boon *] move) move + [duct.move %give %lost ~] + :: + =. peer-core (pe-emit (got-duct bone) %give %boon message) + :: send ack unconditionally + :: + (call %done ok=%.y) + :: + ++ sink-nack + ^+ sink + :: if we get a naxplanation for a %cork, the publisher hasn't + :: received the OTA. The /recork timer will retry eventually. + :: + %- %+ mi-trace msg.veb + =/ dat [her bone=bone message-num=message-num] + |.("sink naxplanation {}") + :: flip .bone's second bit to find referenced flow + :: + =/ target=^bone (mix 0b10 bone) + =. peer-core + :: notify |message-pump that this message got naxplained + :: + =< abet + (call:abed:(pump-core target) %near ;;(naxplanation message)) + :: ack nack-trace message (only applied if we don't later crash) + :: + (call %done ok=%.y) + -- + -- + -- + -- -- :: adult ames, after metamorphosis from larva :: -=< =| =ames-state |= [now=@da eny=@ rof=roof] =* ames-gate . @@ -989,8 +3691,8 @@ |= [=duct dud=(unit goof) wrapped-task=(hobo task)] ^- [(list move) _ames-gate] :: - =/ =task ((harden task) wrapped-task) - =/ event-core (per-event [now eny rof] duct ames-state) + =/ =task ((harden task) wrapped-task) + =/ event-core (ev [now eny rof] duct ames-state) :: =^ moves ames-state =< abet @@ -1010,11 +3712,15 @@ %jilt (on-jilt:event-core ship.task) %prod (on-prod:event-core ships.task) %sift (on-sift:event-core ships.task) + %snub (on-snub:event-core ships.task) %spew (on-spew:event-core veb.task) + %cong (on-cong:event-core [msg mem]:task) %stir (on-stir:event-core arg.task) %trim on-trim:event-core %vega on-vega:event-core %plea (on-plea:event-core [ship plea]:task) + %cork (on-cork:event-core ship.task) + %kroc (on-kroc:event-core dry.task) == :: [moves ames-gate] @@ -1026,8 +3732,7 @@ ?^ dud ~|(%ames-take-dud (mean tang.u.dud)) :: - :: - =/ event-core (per-event [now eny rof] duct ames-state) + =/ event-core (ev [now eny rof] duct ames-state) :: =^ moves ames-state =< abet @@ -1045,20 +3750,23 @@ [moves ames-gate] :: +stay: extract state before reload :: -++ stay [%6 %adult ames-state] +++ stay [%11 %adult ames-state] :: +load: load in old state after reload :: ++ load - =< |= old-state=[%6 ^ames-state] + =< |= $= old-state + $% [%11 ^ames-state] + == ^+ ames-gate - ?> ?=(%6 -.old-state) + ?> ?=(%11 -.old-state) ames-gate(ames-state +.old-state) + :: all state transitions are called from larval ames + :: |% - :: +state-4-to-5 called from larval-ames :: ++ state-4-to-5 |= ames-state=ames-state-4 - ^- ames-state-4 + ^- ames-state-5 =. peers.ames-state %- ~(run by peers.ames-state) |= ship-state=ship-state-4 @@ -1072,15 +3780,14 @@ message-pump-state ship-state ames-state - :: +state-5-to-6 called from larval-ames :: ++ state-5-to-6 |= ames-state=ames-state-5 - ^- ^^ames-state + ^- ames-state-6 :_ +.ames-state %- ~(rut by peers.ames-state) |= [=ship ship-state=ship-state-5] - ^- ^ship-state + ^- ship-state-6 ?. ?=(%known -.ship-state) ship-state =/ peer-state=peer-state-5 +.ship-state @@ -1091,12 +3798,61 @@ ;; @ud =< q.q %- need %- need (rof ~ %j `beam`[[our %rift %da now] /(scot %p ship)]) - =/ =^peer-state - :_ +.peer-state - =, -.peer-state - [symmetric-key life rift public-key sponsor] + :- -.ship-state + :_ +.peer-state + =, -.peer-state + [symmetric-key life rift public-key sponsor] + :: + ++ state-6-to-7 + |= ames-state=ames-state-6 + ^- ames-state-7 + :_ +.ames-state + %- ~(run by peers.ames-state) + |= ship-state=ship-state-6 ^- ^ship-state - [-.ship-state peer-state] + ?. ?=(%known -.ship-state) + ship-state + :- %known + ^- peer-state + :- +<.ship-state + [route qos ossuary snd rcv nax heeds ~ ~ ~]:ship-state + :: + ++ state-7-to-8 + |= ames-state=ames-state-7 + ^- ames-state-8 + =, ames-state + :* peers unix-duct life crypto-core bug + *(set wire) + == + :: + ++ state-8-to-9 + |= ames-state=ames-state-8 + ^- ames-state-9 + =, ames-state + :* peers unix-duct life crypto-core bug corks + *(set ship) + == + :: + ++ state-9-to-10 + |= ames-state=ames-state-9 + ^- ames-state-10 + =, ames-state + :* peers unix-duct life crypto-core + %= bug.ames-state + veb [&1 &2 &3 &4 &5 &6 |6 %.n]:veb.bug + == + corks snub + == + :: + ++ state-10-to-11 + |= ames-state=ames-state-10 + ^- ^^ames-state + =, ames-state + :* peers unix-duct life crypto-core bug corks snub + :: 5 messages and 100Kb of data outstanding + :: + [msg=5 mem=100.000] + == -- :: +scry: dereference namespace :: @@ -1126,7 +3882,7 @@ =(%$ syd) == ?. for.veb.bug.ames-state ~ - ~> %slog.0^leaf/"ames: scry-fail {<[why=why lot=lot now=now syd=syd]>}" + ~> %slog.0^leaf/"ames: scry-fail {}" ~ :: /ax/protocol/version @ :: /ax/peers (map ship ?(%alien %known)) @@ -1158,9 +3914,11 @@ [%forward-lane ~] :: :: this duplicates the routing hack from +send-blob:event-core - :: so long as neither the peer nor the peer's sponsoring galaxy is us: + :: so long as neither the peer nor the peer's sponsoring galaxy is us, + :: and the peer has been reached recently: :: - :: - no route to the peer: send to the peer's sponsoring galaxy + :: - no route to the peer, or peer has not been contacted recently: + :: send to the peer's sponsoring galaxy :: - direct route to the peer: use that :: - indirect route to the peer: send to both that route and the :: the peer's sponsoring galaxy @@ -1172,6 +3930,8 @@ == ~ =; zar=(trap (list lane)) + ?: (lth last-contact.qos.u.peer (sub now ~h1)) + $:zar ?~ route.u.peer $:zar =* rot u.route.u.peer ?:(direct.rot [lane.rot ~] [lane.rot $:zar]) @@ -1211,2242 +3971,3 @@ ``noun+!>(!>(res)) == -- -:: |per-event: inner event-handling core -:: -~% %per-event ..decode-packet ~ -|% -++ per-event - =| moves=(list move) - ~% %event-gate ..per-event ~ - |= [[now=@da eny=@ rof=roof] =duct =ames-state] - =* veb veb.bug.ames-state - ~% %event-core ..$ ~ - |% - ++ event-core . - ++ abet [(flop moves) ames-state] - ++ emit |=(=move event-core(moves [move moves])) - ++ channel-state [life crypto-core bug]:ames-state - ++ trace - |= [verb=? =ship print=(trap tape)] - ^+ same - (^trace verb ship ships.bug.ames-state print) - :: +on-take-done: handle notice from vane that it processed a message - :: - ++ on-take-done - |= [=wire error=(unit error)] - ^+ event-core - :: relay the vane ack to the foreign peer - :: - ?~ parsed=(parse-bone-wire wire) - :: no-op - :: - ~> %slog.0^leaf/"ames: dropping malformed wire: {(spud wire)}" - event-core - ?> ?=([@ her=ship *] u.parsed) - =* her her.u.parsed - =/ =peer-state (got-peer-state her) - =/ =channel [[our her] now channel-state -.peer-state] - =/ peer-core (make-peer-core peer-state channel) - |^ - ?: ?& ?=([%new *] u.parsed) - (lth rift.u.parsed rift.peer-state) - == - :: ignore events from an old rift - :: - %- %^ trace odd.veb her - |.("dropping old rift wire: {(spud wire)}") - event-core - =/ =bone - ?-(u.parsed [%new *] bone.u.parsed, [%old *] bone.u.parsed) - =? peer-core ?=([%old *] u.parsed) - %- %^ trace odd.veb her - |.("parsing old wire: {(spud wire)}") - peer-core - ?~ error - (send-ack bone) - (send-nack bone u.error) - :: - :: if processing succeded, send positive ack packet and exit - :: - ++ send-ack - |= =bone - ^+ event-core - abet:(run-message-sink:peer-core bone %done ok=%.y) - :: failed; send message nack packet - :: - ++ send-nack - |= [=bone =^error] - ^+ event-core - =. event-core abet:(run-message-sink:peer-core bone %done ok=%.n) - =/ =^peer-state (got-peer-state her) - =/ =^channel [[our her] now channel-state -.peer-state] - :: construct nack-trace message, referencing .failed $message-num - :: - =/ failed=message-num last-acked:(~(got by rcv.peer-state) bone) - =/ =naxplanation [failed error] - =/ =message-blob (jam naxplanation) - :: send nack-trace message on associated .nack-trace-bone - :: - =. peer-core (make-peer-core peer-state channel) - =/ nack-trace-bone=^bone (mix 0b10 bone) - :: - abet:(run-message-pump:peer-core nack-trace-bone %memo message-blob) - -- - :: +on-sift: handle request to filter debug output by ship - :: - ++ on-sift - |= ships=(list ship) - ^+ event-core - =. ships.bug.ames-state (sy ships) - event-core - :: +on-spew: handle request to set verbosity toggles on debug output - :: - ++ on-spew - |= verbs=(list verb) - ^+ event-core - :: start from all %.n's, then flip requested toggles - :: - =. veb.bug.ames-state - %+ roll verbs - |= [=verb acc=_veb-all-off] - ^+ veb.bug.ames-state - ?- verb - %snd acc(snd %.y) - %rcv acc(rcv %.y) - %odd acc(odd %.y) - %msg acc(msg %.y) - %ges acc(ges %.y) - %for acc(for %.y) - %rot acc(rot %.y) - == - event-core - :: +on-prod: re-send a packet per flow to each of .ships - :: - ++ on-prod - |= ships=(list ship) - ^+ event-core - =? ships =(~ ships) ~(tap in ~(key by peers.ames-state)) - |^ ^+ event-core - ?~ ships event-core - $(ships t.ships, event-core (prod-peer i.ships)) - :: - ++ prod-peer - |= her=ship - ^+ event-core - =/ par (get-peer-state her) - ?~ par event-core - =/ =channel [[our her] now channel-state -.u.par] - =/ peer-core (make-peer-core u.par channel) - =/ bones ~(tap in ~(key by snd.u.par)) - |- ^+ event-core - ?~ bones abet:peer-core - =. peer-core (run-message-pump:peer-core i.bones %prod ~) - $(bones t.bones) - -- - :: +on-stir: start timers for any flow that lack them - :: - :: .arg is unused, meant to ease future debug commands - :: - ++ on-stir - |= arg=@t - =/ states=(list [ship peer-state]) - %+ murn ~(tap by peers.ames-state) - |= [=ship =ship-state] - ^- (unit [^ship peer-state]) - ?. ?=(%known -.ship-state) - ~ - `[ship +.ship-state] - =/ snds=(list (list [ship bone message-pump-state])) - %+ turn states - |= [=ship peer-state] - %+ turn ~(tap by snd) - |= [=bone =message-pump-state] - [ship bone message-pump-state] - =/ next-wakes - %+ turn `(list [ship bone message-pump-state])`(zing snds) - |= [=ship =bone message-pump-state] - [ship bone next-wake.packet-pump-state] - =/ next-real-wakes=(list [=ship =bone =@da]) - %+ murn next-wakes - |= [=ship =bone tym=(unit @da)] - ^- (unit [^ship ^bone @da]) - ?~(tym ~ `[ship bone u.tym]) - =/ timers - %- silt - ;; (list [@da ^duct]) - =< q.q %- need %- need - (rof ~ %b [[our %timers da+now] /]) - =/ to-stir - %+ skip next-real-wakes - |= [=ship =bone =@da] - (~(has in timers) [da `^duct`~[a+(make-pump-timer-wire ship bone) /ames]]) - ~& [%stirring to-stir] - |- ^+ event-core - ?~ to-stir - event-core - =/ =wire (make-pump-timer-wire [ship bone]:i.to-stir) - =. event-core (emit duct %pass wire %b %wait da.i.to-stir) - $(to-stir t.to-stir) - :: +on-crud: handle event failure; print to dill - :: - ++ on-crud - |= =error - ^+ event-core - (emit duct %pass /crud %d %flog %crud error) - :: +on-heed: handle request to track .ship's responsiveness - :: - ++ on-heed - |= =ship - ^+ event-core - =/ ship-state (~(get by peers.ames-state) ship) - ?. ?=([~ %known *] ship-state) - %+ enqueue-alien-todo ship - |= todos=alien-agenda - todos(heeds (~(put in heeds.todos) duct)) - :: - =/ =peer-state +.u.ship-state - =/ =channel [[our ship] now channel-state -.peer-state] - abet:on-heed:(make-peer-core peer-state channel) - :: +on-jilt: handle request to stop tracking .ship's responsiveness - :: - ++ on-jilt - |= =ship - ^+ event-core - =/ ship-state (~(get by peers.ames-state) ship) - ?. ?=([~ %known *] ship-state) - %+ enqueue-alien-todo ship - |= todos=alien-agenda - todos(heeds (~(del in heeds.todos) duct)) - :: - =/ =peer-state +.u.ship-state - =/ =channel [[our ship] now channel-state -.peer-state] - abet:on-jilt:(make-peer-core peer-state channel) - :: +on-hear: handle raw packet receipt - :: - ++ on-hear - |= [l=lane b=blob d=(unit goof)] - (on-hear-packet l (decode-packet b) d) - :: +on-hear-packet: handle mildly processed packet receipt - :: - ++ on-hear-packet - ~/ %on-hear-packet - |= [=lane =packet dud=(unit goof)] - ^+ event-core - %- %^ trace odd.veb sndr.packet - |.("received packet") - :: - ?: =(our sndr.packet) - event-core - :: - %. +< - :: - ?. =(our rcvr.packet) - on-hear-forward - :: - ?: =(%keys content.packet) - on-hear-keys - ?: ?& ?=(%pawn (clan:title sndr.packet)) - !?=([~ %known *] (~(get by peers.ames-state) sndr.packet)) - == - on-hear-open - on-hear-shut - :: +on-hear-forward: maybe forward a packet to someone else - :: - :: Note that this performs all forwarding requests without - :: filtering. Any protection against DDoS amplification will be - :: provided by Vere. - :: - ++ on-hear-forward - ~/ %on-hear-forward - |= [=lane =packet dud=(unit goof)] - ^+ event-core - %- %^ trace for.veb sndr.packet - |.("forward: {} -> {}") - :: set .origin.packet if it doesn't already have one, re-encode, and send - :: - =? origin.packet - &(?=(~ origin.packet) !=(%czar (clan:title sndr.packet))) - ?: ?=(%& -.lane) - ~ - ?. (lte (met 3 p.lane) 6) - ~| ames-lane-size+p.lane !! - `p.lane - :: - =/ =blob (encode-packet packet) - (send-blob & rcvr.packet blob) - :: +on-hear-keys: handle receipt of attestion request - :: - ++ on-hear-keys - ~/ %on-hear-keys - |= [=lane =packet dud=(unit goof)] - =+ %^ trace msg.veb sndr.packet - |.("requested attestation") - ?. =(%pawn (clan:title our)) - event-core - (send-blob | sndr.packet (attestation-packet sndr.packet 1)) - :: +on-hear-open: handle receipt of plaintext comet self-attestation - :: - ++ on-hear-open - ~/ %on-hear-open - |= [=lane =packet dud=(unit goof)] - ^+ event-core - =+ %^ trace msg.veb sndr.packet - |.("got attestation") - :: assert the comet can't pretend to be a moon or other address - :: - ?> ?=(%pawn (clan:title sndr.packet)) - :: if we already know .sndr, ignore duplicate attestation - :: - =/ ship-state (~(get by peers.ames-state) sndr.packet) - ?: ?=([~ %known *] ship-state) - event-core - :: - =/ =open-packet (decode-open-packet packet our life.ames-state) - :: add comet as an %alien if we haven't already - :: - =? peers.ames-state ?=(~ ship-state) - (~(put by peers.ames-state) sndr.packet %alien *alien-agenda) - :: upgrade comet to %known via on-publ-full - :: - =. event-core - =/ crypto-suite=@ud 1 - =/ keys - (my [sndr-life.open-packet crypto-suite public-key.open-packet]~) - =/ =point - :* ^= rift 0 - ^= life sndr-life.open-packet - ^= keys keys - ^= sponsor `(^sein:title sndr.packet) - == - (on-publ / [%full (my [sndr.packet point]~)]) - :: manually add the lane to the peer state - :: - =. peers.ames-state - =/ =peer-state (gut-peer-state sndr.packet) - =. route.peer-state `[direct=%.n lane] - (~(put by peers.ames-state) sndr.packet %known peer-state) - :: - event-core - :: +on-hear-shut: handle receipt of encrypted packet - :: - ++ on-hear-shut - ~/ %on-hear-shut - |= [=lane =packet dud=(unit goof)] - ^+ event-core - =/ sndr-state (~(get by peers.ames-state) sndr.packet) - :: If we don't know them, ask Jael for their keys. If they're a - :: comet, this will also cause us to request a self-attestation - :: from the sender. The packet itself is dropped; we can assume it - :: will be resent. - :: - ?. ?=([~ %known *] sndr-state) - (enqueue-alien-todo sndr.packet |=(alien-agenda +<)) - :: decrypt packet contents using symmetric-key.channel - :: - :: If we know them, we have a $channel with them, which we've - :: populated with a .symmetric-key derived from our private key - :: and their public key using elliptic curve Diffie-Hellman. - :: - =/ =peer-state +.u.sndr-state - =/ =channel [[our sndr.packet] now channel-state -.peer-state] - ~| %ames-crash-on-packet-from^her.channel - =/ =shut-packet - (decode-shut-packet packet [symmetric-key her-life our-life]:channel) - :: non-galaxy: update route with heard lane or forwarded lane - :: - =? route.peer-state !=(%czar (clan:title her.channel)) - :: if new packet is direct, use that. otherwise, if the new new - :: and old lanes are indirect, use the new one. if the new lane - :: is indirect but the old lane is direct, then if the lanes are - :: identical, don't mark it indirect; if they're not identical, - :: use the new lane and mark it indirect. - :: - :: if you mark lane as indirect because you got an indirect - :: packet even though you already had a direct identical lane, - :: then delayed forwarded packets will come later and reset to - :: indirect, so you're unlikely to get a stable direct route - :: (unless the forwarder goes offline for a while). - :: - :: conversely, if you don't accept indirect routes with different - :: lanes, then if your lane is stale and they're trying to talk - :: to you, your acks will go to the stale lane, and you'll never - :: time it out unless you reach out to them. this manifests as - :: needing to |hi or dotpost to get a response when the other - :: ship has changed lanes. - :: - ?: ?=(~ origin.packet) - `[direct=%.y lane] - ?: ?=([~ %& *] route.peer-state) - ?: =(lane.u.route.peer-state |+u.origin.packet) - route.peer-state - `[direct=%.n |+u.origin.packet] - `[direct=%.n |+u.origin.packet] - :: perform peer-specific handling of packet - :: - =/ peer-core (make-peer-core peer-state channel) - abet:(on-hear-shut-packet:peer-core lane shut-packet dud) - :: +on-take-boon: receive request to give message to peer - :: - ++ on-take-boon - |= [=wire payload=*] - ^+ event-core - ?~ parsed=(parse-bone-wire wire) - ~> %slog.0^leaf/"ames: dropping malformed wire: {(spud wire)}" - event-core - :: - ?> ?=([@ her=ship *] u.parsed) - =* her her.u.parsed - =/ =peer-state (got-peer-state her) - =/ =channel [[our her] now channel-state -.peer-state] - =/ peer-core (make-peer-core peer-state channel) - :: - ?: ?& ?=([%new *] u.parsed) - (lth rift.u.parsed rift.peer-state) - == - :: ignore events from an old rift - :: - %- %^ trace odd.veb her - |.("dropping old rift wire: {(spud wire)}") - event-core - =/ =bone - ?-(u.parsed [%new *] bone.u.parsed, [%old *] bone.u.parsed) - =? peer-core ?=([%old *] u.parsed) - %- %^ trace odd.veb her - |.("parsing old wire: {(spud wire)}") - peer-core - abet:(on-memo:peer-core bone payload %boon) - :: +on-plea: handle request to send message - :: - ++ on-plea - |= [=ship =plea] - ^+ event-core - :: .plea is from local vane to foreign ship - :: - =/ ship-state (~(get by peers.ames-state) ship) - :: - ?. ?=([~ %known *] ship-state) - %+ enqueue-alien-todo ship - |= todos=alien-agenda - todos(messages [[duct plea] messages.todos]) - :: - =/ =peer-state +.u.ship-state - =/ =channel [[our ship] now channel-state -.peer-state] - :: - =^ =bone ossuary.peer-state (bind-duct ossuary.peer-state duct) - %- %^ trace msg.veb ship - |. ^- tape - =/ sndr [our our-life.channel] - =/ rcvr [ship her-life.channel] - "plea {}" - :: - abet:(on-memo:(make-peer-core peer-state channel) bone plea %plea) - :: +on-take-wake: receive wakeup or error notification from behn - :: - ++ on-take-wake - |= [=wire error=(unit tang)] - ^+ event-core - :: - ?: ?=([%alien @ ~] wire) - :: if we haven't received an attestation, ask again - :: - ?^ error - %- (slog leaf+"ames: attestation timer failed: {}" ~) - event-core - ?~ ship=`(unit @p)`(slaw %p i.t.wire) - %- (slog leaf+"ames: got timer for strange wire: {}" ~) - event-core - =/ ship-state (~(get by peers.ames-state) u.ship) - ?: ?=([~ %known *] ship-state) - event-core - (request-attestation u.ship) - :: - =/ res=(unit [her=ship =bone]) (parse-pump-timer-wire wire) - ?~ res - %- (slog leaf+"ames: got timer for strange wire: {}" ~) - event-core - :: - =/ state=(unit peer-state) (get-peer-state her.u.res) - ?~ state - %- (slog leaf+"ames: got timer for strange ship: {}, ignoring" ~) - event-core - :: - =/ =channel [[our her.u.res] now channel-state -.u.state] - :: - abet:(on-wake:(make-peer-core u.state channel) bone.u.res error) - :: +on-init: first boot; subscribe to our info from jael - :: - ++ on-init - ^+ event-core - :: - =~ (emit duct %pass /turf %j %turf ~) - (emit duct %pass /private-keys %j %private-keys ~) - == - :: +on-priv: set our private key to jael's response - :: - ++ on-priv - |= [=life vein=(map life private-key)] - ^+ event-core - :: - =/ =private-key (~(got by vein) life) - =. life.ames-state life - =. crypto-core.ames-state (nol:nu:crub:crypto private-key) - :: recalculate each peer's symmetric key - :: - =/ our-private-key sec:ex:crypto-core.ames-state - =. peers.ames-state - %- ~(run by peers.ames-state) - |= =ship-state - ^+ ship-state - :: - ?. ?=(%known -.ship-state) - ship-state - :: - =/ =peer-state +.ship-state - =. symmetric-key.peer-state - (derive-symmetric-key public-key.+.ship-state our-private-key) - :: - [%known peer-state] - :: - event-core - :: +on-publ: update pki data for peer or self - :: - ++ on-publ - |= [=wire =public-keys-result] - ^+ event-core - :: - |^ ^+ event-core - :: - ?- public-keys-result - [%diff @ %rift *] - :: event-core - (on-publ-rift [who to.diff]:public-keys-result) - :: - [%diff @ %keys *] - (on-publ-rekey [who to.diff]:public-keys-result) - :: - [%diff @ %spon *] - (on-publ-sponsor [who to.diff]:public-keys-result) - :: - [%full *] - (on-publ-full points.public-keys-result) - :: - [%breach *] - (on-publ-breach who.public-keys-result) - == - :: +on-publ-breach: handle continuity breach of .ship; wipe its state - :: - :: Abandon all pretense of continuity and delete all messaging state - :: associated with .ship, including sent and unsent messages. - :: Also cancel all timers related to .ship. - :: - ++ on-publ-breach - |= =ship - ^+ event-core - :: - =/ ship-state (~(get by peers.ames-state) ship) - :: we shouldn't be hearing about ships we don't care about - :: - ?~ ship-state - ~> %slog.0^leaf/"ames: breach unknown {}" - event-core - :: if an alien breached, this doesn't affect us - :: - ?: ?=([~ %alien *] ship-state) - ~> %slog.0^leaf/"ames: breach alien {}" - event-core - ~> %slog.0^leaf/"ames: breach peer {}" - :: a peer breached; drop messaging state - :: - =/ =peer-state +.u.ship-state - =/ old-qos=qos qos.peer-state - :: cancel all timers related to .ship - :: - =. event-core - %+ roll ~(tap by snd.peer-state) - |= [[=snd=bone =message-pump-state] core=_event-core] - ^+ core - :: - ?~ next-wake=next-wake.packet-pump-state.message-pump-state - core - :: note: copies +on-pump-rest:message-pump - :: - =/ wire (make-pump-timer-wire ship snd-bone) - =/ duct ~[/ames] - (emit:core duct %pass wire %b %rest u.next-wake) - :: reset all peer state other than pki data - :: - =. +.peer-state +:*^peer-state - :: print change to quality of service, if any - :: - =/ text=(unit tape) (qos-update-text ship old-qos qos.peer-state) - :: - =? event-core ?=(^ text) - (emit duct %pass /qos %d %flog %text u.text) - :: reinitialize galaxy route if applicable - :: - =? route.peer-state =(%czar (clan:title ship)) - `[direct=%.y lane=[%& ship]] - :: - =. peers.ames-state - (~(put by peers.ames-state) ship [%known peer-state]) - :: - event-core - :: +on-publ-rekey: handle new key for peer - :: - :: TODO: assert .crypto-suite compatibility - :: - ++ on-publ-rekey - |= $: =ship - =life - crypto-suite=@ud - =public-key - == - ^+ event-core - :: - =/ ship-state (~(get by peers.ames-state) ship) - ?. ?=([~ %known *] ship-state) - =| =point - =. life.point life - =. keys.point (my [life crypto-suite public-key]~) - =. sponsor.point `(^^sein:title rof our now ship) - :: - (on-publ-full (my [ship point]~)) - :: - =/ =peer-state +.u.ship-state - :: - =/ =private-key sec:ex:crypto-core.ames-state - =. symmetric-key.peer-state - (derive-symmetric-key public-key private-key) - :: - =. life.peer-state life - =. public-key.peer-state public-key - :: - =. peers.ames-state (~(put by peers.ames-state) ship %known peer-state) - event-core - :: +on-publ-sponsor: handle new or lost sponsor for peer - :: - :: TODO: handle sponsor loss - :: - ++ on-publ-sponsor - |= [=ship sponsor=(unit ship)] - ^+ event-core - :: - ?~ sponsor - ~| %ames-lost-sponsor^our^ship !! - :: - =/ state=(unit peer-state) (get-peer-state ship) - ?~ state - %- (slog leaf+"ames: missing peer-state, ignoring" ~) - event-core - =. sponsor.u.state u.sponsor - =. peers.ames-state (~(put by peers.ames-state) ship %known u.state) - event-core - :: +on-publ-full: handle new pki data for peer(s) - :: - ++ on-publ-full - |= points=(map ship point) - ^+ event-core - :: - => .(points ~(tap by points)) - |^ ^+ event-core - ?~ points event-core - :: - =+ ^- [=ship =point] i.points - :: - ?. (~(has by keys.point) life.point) - $(points t.points) - :: - =/ old-ship-state (~(get by peers.ames-state) ship) - :: - =. event-core (insert-peer-state ship point) - :: - =? event-core ?=([~ %alien *] old-ship-state) - (meet-alien ship point +.u.old-ship-state) - :: - $(points t.points) - :: - ++ meet-alien - |= [=ship =point todos=alien-agenda] - ^+ event-core - :: if we're a comet, send self-attestation packet first - :: - =? event-core =(%pawn (clan:title our)) - (send-blob | ship (attestation-packet ship life.point)) - :: save current duct - :: - =/ original-duct duct - :: apply heeds - :: - =. event-core - %+ roll ~(tap in heeds.todos) - |= [=^duct core=_event-core] - (on-heed:core(duct duct) ship) - :: apply outgoing messages, reversing for FIFO order - :: - =. event-core - %+ reel messages.todos - |= [[=^duct =plea] core=_event-core] - (on-plea:core(duct duct) ship plea) - :: apply outgoing packet blobs - :: - =. event-core - %+ roll ~(tap in packets.todos) - |= [=blob core=_event-core] - (send-blob:core | ship blob) - :: - event-core(duct original-duct) - -- - :: on-publ-rift: XX - :: - ++ on-publ-rift - |= [=ship =rift] - ^+ event-core - ?~ ship-state=(~(get by peers.ames-state) ship) - :: print error here? %rift was probably called before %keys - :: - ~> %slog.1^leaf/"ames: missing peer-state on-publ-rift" - event-core - ?: ?=([%alien *] u.ship-state) - :: ignore aliens - :: - event-core - =/ =peer-state +.u.ship-state - =. rift.peer-state rift - =. peers.ames-state (~(put by peers.ames-state) ship %known peer-state) - event-core - :: - ++ insert-peer-state - |= [=ship =point] - ^+ event-core - :: - =/ =peer-state (gut-peer-state ship) - =/ =public-key pass:(~(got by keys.point) life.point) - =/ =private-key sec:ex:crypto-core.ames-state - =/ =symmetric-key (derive-symmetric-key public-key private-key) - :: - =. qos.peer-state [%unborn now] - =. life.peer-state life.point - =. public-key.peer-state public-key - =. symmetric-key.peer-state symmetric-key - =. sponsor.peer-state - ?^ sponsor.point - u.sponsor.point - (^^sein:title rof our now ship) - :: automatically set galaxy route, since unix handles lookup - :: - =? route.peer-state ?=(%czar (clan:title ship)) - `[direct=%.y lane=[%& ship]] - :: - =. peers.ames-state - (~(put by peers.ames-state) ship %known peer-state) - :: - event-core - -- - :: +on-take-turf: relay %turf move from jael to unix - :: - ++ on-take-turf - |= turfs=(list turf) - ^+ event-core - :: - (emit unix-duct.ames-state %give %turf turfs) - :: +on-born: handle unix process restart - :: - ++ on-born - ^+ event-core - :: - =. unix-duct.ames-state duct - :: - =/ turfs - ;; (list turf) - =< q.q %- need %- need - (rof ~ %j `beam`[[our %turf %da now] /]) - :: - (emit unix-duct.ames-state %give %turf turfs) - :: +on-vega: handle kernel reload - :: +on-trim: handle request to free memory - :: - ++ on-vega event-core - ++ on-trim event-core - :: +enqueue-alien-todo: helper to enqueue a pending request - :: - :: Also requests key and life from Jael on first request. - :: If talking to a comet, requests attestation packet. - :: - ++ enqueue-alien-todo - |= [=ship mutate=$-(alien-agenda alien-agenda)] - ^+ event-core - :: - =/ ship-state (~(get by peers.ames-state) ship) - :: create a default $alien-agenda on first contact - :: - =+ ^- [already-pending=? todos=alien-agenda] - ?~ ship-state - [%.n *alien-agenda] - [%.y ?>(?=(%alien -.u.ship-state) +.u.ship-state)] - :: mutate .todos and apply to permanent state - :: - =. todos (mutate todos) - =. peers.ames-state (~(put by peers.ames-state) ship %alien todos) - ?: already-pending - event-core - :: - ?: =(%pawn (clan:title ship)) - (request-attestation ship) - :: NB: we specifically look for this wire in +public-keys-give in - :: Jael. if you change it here, you must change it there. - :: - (emit duct %pass /public-keys %j %public-keys [n=ship ~ ~]) - :: +request-attestation: helper to request attestation from comet - :: - :: Also sets a timer to resend the request every 30s. - :: - ++ request-attestation - |= =ship - ^+ event-core - =+ (trace msg.veb ship |.("requesting attestion")) - =. event-core (send-blob | ship (sendkeys-packet ship)) - =/ =wire /alien/(scot %p ship) - (emit duct %pass wire %b %wait (add now ~s30)) - :: +send-blob: fire packet at .ship and maybe sponsors - :: - :: Send to .ship and sponsors until we find a direct lane, - :: skipping .our in the sponsorship chain. - :: - :: If we have no PKI data for a recipient, enqueue the packet and - :: request the information from Jael if we haven't already. - :: - ++ send-blob - ~/ %send-blob - |= [for=? =ship =blob] - :: - =/ final-ship ship - %- (trace rot.veb final-ship |.("send-blob: to {}")) - |- - |^ ^+ event-core - :: - =/ ship-state (~(get by peers.ames-state) ship) - :: - ?. ?=([~ %known *] ship-state) - ?: ?=(%pawn (clan:title ship)) - (try-next-sponsor (^sein:title ship)) - %+ enqueue-alien-todo ship - |= todos=alien-agenda - todos(packets (~(put in packets.todos) blob)) - :: - =/ =peer-state +.u.ship-state - :: - :: XX routing hack to mimic old ames. - :: - :: Before removing this, consider: moons when their planet is - :: behind a NAT; a planet receiving initial acknowledgment - :: from a star; a planet talking to another planet under - :: another galaxy. - :: - ?: ?| =(our ship) - ?& !=(final-ship ship) - !=(%czar (clan:title ship)) - == - == - (try-next-sponsor sponsor.peer-state) - :: - ?: =(our ship) - :: if forwarding, don't send to sponsor to avoid loops - :: - ?: for - event-core - (try-next-sponsor sponsor.peer-state) - :: - ?~ route=route.peer-state - %- (trace rot.veb final-ship |.("no route to: {}")) - (try-next-sponsor sponsor.peer-state) - :: - %- (trace rot.veb final-ship |.("trying route: {}")) - =. event-core - (emit unix-duct.ames-state %give %send lane.u.route blob) - :: - ?: direct.u.route - event-core - (try-next-sponsor sponsor.peer-state) - :: - ++ try-next-sponsor - |= sponsor=^ship - ^+ event-core - :: - ?: =(ship sponsor) - event-core - ^$(ship sponsor) - -- - :: +attestation-packet: generate signed self-attestation for .her - :: - :: Sent by a comet on first contact with a peer. Not acked. - :: - ++ attestation-packet - |= [her=ship =her=life] - ^- blob - %- encode-packet - %- encode-open-packet - :_ crypto-core.ames-state - :* ^= public-key pub:ex:crypto-core.ames-state - ^= sndr our - ^= sndr-life life.ames-state - ^= rcvr her - ^= rcvr-life her-life - == - :: +sendkeys-packet: generate a request for a self-attestation. - :: - :: Sent by non-comets to comets. Not acked. - :: - ++ sendkeys-packet - |= her=ship - ^- blob - ?> ?=(%pawn (clan:title her)) - %- encode-packet - (encode-keys-packet our her life.ames-state) - :: +get-peer-state: lookup .her state or ~ - :: - ++ get-peer-state - |= her=ship - ^- (unit peer-state) - :: - =- ?.(?=([~ %known *] -) ~ `+.u) - (~(get by peers.ames-state) her) - :: +got-peer-state: lookup .her state or crash - :: - ++ got-peer-state - |= her=ship - ^- peer-state - :: - ~| %freaky-alien^her - =- ?>(?=(%known -<) ->) - (~(got by peers.ames-state) her) - :: +gut-peer-state: lookup .her state or default - :: - ++ gut-peer-state - |= her=ship - ^- peer-state - =/ ship-state (~(get by peers.ames-state) her) - ?. ?=([~ %known *] ship-state) - *peer-state - +.u.ship-state - :: +make-peer-core: create nested |peer-core for per-peer processing - :: - ++ make-peer-core - |= [=peer-state =channel] - =* veb veb.bug.channel - |% - ++ peer-core . - ++ emit |=(move peer-core(event-core (^emit +<))) - ++ abet - ^+ event-core - :: - =. peers.ames-state - (~(put by peers.ames-state) her.channel %known peer-state) - :: - event-core - ++ trace - |= [verb=? print=(trap tape)] - ^+ same - (^trace verb her.channel print) - ++ on-heed peer-core(heeds.peer-state (~(put in heeds.peer-state) duct)) - ++ on-jilt peer-core(heeds.peer-state (~(del in heeds.peer-state) duct)) - :: +update-qos: update and maybe print connection status - :: - ++ update-qos - |= =new=qos - ^+ peer-core - :: - =^ old-qos qos.peer-state [qos.peer-state new-qos] - :: if no update worth reporting, we're done - :: - ?~ text=(qos-update-text her.channel old-qos new-qos) - peer-core - :: print message - :: - =. peer-core (emit duct %pass /qos %d %flog %text u.text) - :: if peer has stopped responding, check if %boon's are backing up - :: - ?. ?=(?(%dead %unborn) -.qos.peer-state) - peer-core - check-clog - :: +check-clog: notify clients if peer has stopped responding - :: - ++ check-clog - ^+ peer-core - :: - :: Only look at response bones. Request bones are unregulated, - :: since requests tend to be much smaller than responses. - :: - =/ pumps=(list message-pump-state) - %+ murn ~(tap by snd.peer-state) - |= [=bone =message-pump-state] - ?: =(0 (end 0 bone)) - ~ - `u=message-pump-state - :: clogged: are five or more response messages unsent to this peer? - :: - =/ clogged=? - =| acc=@ud - |- ^- ? - ?~ pumps - %.n - =. acc - %+ add acc - %+ add - :: in-flight messages - :: - (sub [next current]:i.pumps) - :: queued messages - :: - ~(wyt in unsent-messages.i.pumps) - :: - ?: (gte acc 5) - %.y - $(pumps t.pumps) - :: if clogged, notify client vanek - :: - ?. clogged - peer-core - %+ roll ~(tap in heeds.peer-state) - |=([d=^duct core=_peer-core] (emit:core d %give %clog her.channel)) - :: +on-hear-shut-packet: handle receipt of ack or message fragment - :: - ++ on-hear-shut-packet - |= [=lane =shut-packet dud=(unit goof)] - ^+ peer-core - :: update and print connection status - :: - =. peer-core (update-qos %live last-contact=now) - :: - =/ =bone bone.shut-packet - :: - ?: ?=(%& -.meat.shut-packet) - =+ ?. &(?=(^ dud) msg.veb) ~ - %. ~ - %- slog - :_ tang.u.dud - leaf+"ames: {} fragment crashed {}" - (run-message-sink bone %hear lane shut-packet ?=(~ dud)) - :: Just try again on error, printing trace - :: - :: Note this implies that vanes should never crash on %done, - :: since we have no way to continue using the flow if they do. - :: - =+ ?~ dud ~ - %. ~ - %+ slog leaf+"ames: {} ack crashed {}" - ?. msg.veb ~ - :- >[bone=bone message-num=message-num meat=meat]:shut-packet< - tang.u.dud - (run-message-pump bone %hear [message-num +.meat]:shut-packet) - :: +on-memo: handle request to send message - :: - ++ on-memo - |= [=bone payload=* valence=?(%plea %boon)] - ^+ peer-core - =/ =message-blob (dedup-message (jim payload)) - =. peer-core (run-message-pump bone %memo message-blob) - :: - ?: ?& =(%boon valence) - (gte now (add ~s30 last-contact.qos.peer-state)) - == - check-clog - peer-core - :: +dedup-message: replace with any existing copy of this message - :: - ++ dedup-message - |= =message-blob - ^+ message-blob - ?: (lte (met 13 message-blob) 1) - message-blob - =/ peers-l=(list [=ship =ship-state]) ~(tap by peers.ames-state) - |- ^+ message-blob - =* peer-loop $ - ?~ peers-l - message-blob - ?. ?=(%known -.ship-state.i.peers-l) - peer-loop(peers-l t.peers-l) - =/ snd-l=(list [=bone =message-pump-state]) - ~(tap by snd.ship-state.i.peers-l) - |- ^+ message-blob - =* bone-loop $ - ?~ snd-l - peer-loop(peers-l t.peers-l) - =/ blob-l=(list ^message-blob) - ~(tap to unsent-messages.message-pump-state.i.snd-l) - |- ^+ message-blob - =* blob-loop $ - ?^ blob-l - ?: =(i.blob-l message-blob) - i.blob-l - blob-loop(blob-l t.blob-l) - ?~ unsent-fragments.message-pump-state.i.snd-l - bone-loop(snd-l t.snd-l) - ?: =(message-blob fragment.i.unsent-fragments.message-pump-state.i.snd-l) - `@`fragment.i.unsent-fragments.message-pump-state.i.snd-l - bone-loop(snd-l t.snd-l) - :: +on-wake: handle timer expiration - :: - ++ on-wake - |= [=bone error=(unit tang)] - ^+ peer-core - :: if we previously errored out, print and reset timer for later - :: - :: This really shouldn't happen, but if it does, make sure we - :: don't brick either this messaging flow or Behn. - :: - ?^ error - =. peer-core - (emit duct %pass /wake-fail %d %flog %crud %ames-wake u.error) - :: - ?~ message-pump-state=(~(get by snd.peer-state) bone) - peer-core - ?~ next-wake.packet-pump-state.u.message-pump-state - peer-core - :: If we crashed because we woke up too early, assume another - :: timer is already set. - :: - ?: (lth now.channel u.next-wake.packet-pump-state.u.message-pump-state) - peer-core - :: - =/ =wire (make-pump-timer-wire her.channel bone) - (emit duct %pass wire %b %wait (add now.channel ~s30)) - :: update and print connection state - :: - =. peer-core %- update-qos - =/ expiry=@da (add ~s30 last-contact.qos.peer-state) - =? -.qos.peer-state - (gte now.channel expiry) - %dead - qos.peer-state - :: expire direct route - :: - :: If the peer is not responding, mark the .lane.route as - :: indirect. The next packets we emit will be sent to the - :: receiver's sponsorship chain in case the receiver's - :: transport address has changed and this lane is no longer - :: valid. - :: - :: If .her is a galaxy, the lane will always remain direct. - :: - =? route.peer-state - ?& ?=(%dead -.qos.peer-state) - ?=(^ route.peer-state) - direct.u.route.peer-state - !=(%czar (clan:title her.channel)) - == - route.peer-state(direct.u %.n) - :: resend comet attestation packet if first message times out - :: - :: The attestation packet doesn't get acked, so if we tried to - :: send a packet but it timed out, maybe they didn't get our - :: attestation. - :: - :: Only resend on timeout of packets in the first message we - :: send them, since they should remember forever. - :: - =? event-core - ?& ?=(%pawn (clan:title our)) - =(1 current:(~(got by snd.peer-state) bone)) - == - (send-blob | her.channel (attestation-packet [her her-life]:channel)) - :: maybe resend some timed out packets - :: - (run-message-pump bone %wake ~) - :: +send-shut-packet: fire encrypted packet at rcvr and maybe sponsors - :: - ++ send-shut-packet - |= =shut-packet - ^+ peer-core - :: swizzle last bone bit before sending - :: - :: The peer has the opposite perspective from ours about what - :: kind of flow this is (forward/backward), so flip the bit - :: here. - :: - =. event-core - %^ send-blob | her.channel - %- encode-packet - %: encode-shut-packet - shut-packet(bone (mix 1 bone.shut-packet)) - symmetric-key.channel - our her.channel - our-life.channel her-life.channel - == - peer-core - :: +got-duct: look up $duct by .bone, asserting already bound - :: - ++ got-duct - |= =bone - ^- ^duct - ~| %dangling-bone^her.channel^bone - (~(got by by-bone.ossuary.peer-state) bone) - :: +run-message-pump: process $message-pump-task and its effects - :: - ++ run-message-pump - |= [=bone task=message-pump-task] - ^+ peer-core - :: pass .task to the |message-pump and apply state mutations - :: - =/ =message-pump-state - (~(gut by snd.peer-state) bone *message-pump-state) - :: - =/ message-pump (make-message-pump message-pump-state channel) - =^ pump-gifts message-pump-state (work:message-pump task) - =. snd.peer-state (~(put by snd.peer-state) bone message-pump-state) - :: process effects from |message-pump - :: - |^ ^+ peer-core - ?~ pump-gifts peer-core - =* gift i.pump-gifts - =. peer-core - ?- -.gift - %done (on-pump-done [message-num error]:gift) - %send (on-pump-send static-fragment.gift) - %wait (on-pump-wait date.gift) - %rest (on-pump-rest date.gift) - == - $(pump-gifts t.pump-gifts) - :: +on-pump-done: handle |message-pump's report of message (n)ack - :: - ++ on-pump-done - |= [=message-num error=(unit error)] - ^+ peer-core - :: if odd bone, ack is on "subscription update" message; no-op - :: - ?: =(1 (end 0 bone)) - peer-core - :: even bone; is this bone a nack-trace bone? - :: - ?: =(1 (end 0 (rsh 0 bone))) - :: nack-trace bone; assume .ok, clear nack from |message-sink - :: - =/ target-bone=^bone (mix 0b10 bone) - :: - (run-message-sink target-bone %drop message-num) - :: not a nack-trace bone; relay ack to client vane - :: - (emit (got-duct bone) %give %done error) - :: +on-pump-send: emit message fragment requested by |message-pump - :: - ++ on-pump-send - |=(f=static-fragment (send-shut-packet bone [message-num %& +]:f)) - :: +on-pump-wait: relay |message-pump's set-timer request - :: - ++ on-pump-wait - |= date=@da - ^+ peer-core - :: - =/ =wire (make-pump-timer-wire her.channel bone) - =/ duct ~[/ames] - (emit duct %pass wire %b %wait date) - :: +on-pump-rest: relay |message-pump's unset-timer request - :: - ++ on-pump-rest - |= date=@da - ^+ peer-core - :: - =/ =wire (make-pump-timer-wire her.channel bone) - =/ duct ~[/ames] - (emit duct %pass wire %b %rest date) - -- - :: +run-message-sink: process $message-sink-task and its effects - :: - ++ run-message-sink - |= [=bone task=message-sink-task] - ^+ peer-core - :: pass .task to the |message-sink and apply state mutations - :: - =/ =message-sink-state - (~(gut by rcv.peer-state) bone *message-sink-state) - :: - =/ message-sink (make-message-sink message-sink-state channel) - =^ sink-gifts message-sink-state (work:message-sink task) - =. rcv.peer-state (~(put by rcv.peer-state) bone message-sink-state) - :: process effects from |message-sink - :: - |^ ^+ peer-core - ?~ sink-gifts peer-core - =* gift i.sink-gifts - =. peer-core - ?- -.gift - %memo (on-sink-memo [message-num message]:gift) - %send (on-sink-send [message-num ack-meat]:gift) - == - $(sink-gifts t.sink-gifts) - :: +on-sink-send: emit ack packet as requested by |message-sink - :: - ++ on-sink-send - |=([num=message-num ack=ack-meat] (send-shut-packet bone num %| ack)) - :: +on-sink-memo: dispatch message received by |message-sink - :: - :: odd bone: %plea request message - :: even bone, 0 second bit: %boon response message - :: even bone, 1 second bit: nack-trace %boon message - :: - ++ on-sink-memo - ?: =(1 (end 0 bone)) - on-sink-plea - ?: =(0 (end 0 (rsh 0 bone))) - on-sink-boon - on-sink-nack-trace - :: +on-sink-boon: handle response message received by |message-sink - :: - :: .bone must be mapped in .ossuary.peer-state, or we crash. - :: This means a malformed message will kill a flow. We - :: could change this to a no-op if we had some sort of security - :: reporting. - :: - :: Note that if we had several consecutive packets in the queue - :: and crashed while processing any of them, the %hole card - :: will turn *all* of them into losts/nacks. - :: - :: TODO: This handles a previous crash in the client vane, but not in - :: Ames itself. - :: - ++ on-sink-boon - |= [=message-num message=*] - ^+ peer-core - :: send ack unconditionally - :: - =. peer-core (emit (got-duct bone) %give %boon message) - =. peer-core (run-message-sink bone %done ok=%.y) - :: - ?. ?=([%hear * * ok=%.n] task) - :: fresh boon; give message to client vane - :: - %- %+ trace msg.veb - =/ dat [her.channel bone=bone message-num=message-num -.task] - |.("sink boon {}") - peer-core - :: we previously crashed on this message; notify client vane - :: - %- %+ trace msg.veb - =/ dat [her.channel bone=bone message-num=message-num -.task] - |.("crashed on sink boon {}") - boon-to-lost - :: +boon-to-lost: convert all boons to losts - :: - ++ boon-to-lost - ^+ peer-core - =. moves - %+ turn moves - |= =move - ?. ?=([* %give %boon *] move) - move - [duct.move %give %lost ~] - peer-core - :: +on-sink-nack-trace: handle nack-trace received by |message-sink - :: - ++ on-sink-nack-trace - |= [=message-num message=*] - ^+ peer-core - %- %+ trace msg.veb - =/ dat [her.channel bone=bone message-num=message-num] - |.("sink naxplanation {}") - :: - =+ ;; =naxplanation message - :: ack nack-trace message (only applied if we don't later crash) - :: - =. peer-core (run-message-sink bone %done ok=%.y) - :: flip .bone's second bit to find referenced flow - :: - =/ target-bone=^bone (mix 0b10 bone) - :: notify |message-pump that this message got naxplained - :: - (run-message-pump target-bone %near naxplanation) - :: +on-sink-plea: handle request message received by |message-sink - :: - ++ on-sink-plea - |= [=message-num message=*] - ^+ peer-core - %- %+ trace msg.veb - =/ dat [her.channel bone=bone message-num=message-num] - |.("sink plea {}") - :: is this the first time we're trying to process this message? - :: - ?. ?=([%hear * * ok=%.n] task) - :: fresh plea; pass to client vane - :: - =+ ;; =plea message - :: - =/ =wire (make-bone-wire her.channel her-rift.channel bone) - :: - ?+ vane.plea ~| %ames-evil-vane^our^her.channel^vane.plea !! - %c (emit duct %pass wire %c %plea her.channel plea) - %g (emit duct %pass wire %g %plea her.channel plea) - %j (emit duct %pass wire %j %plea her.channel plea) - == - :: we previously crashed on this message; send nack - :: - =. peer-core (run-message-sink bone %done ok=%.n) - :: also send nack-trace with blank .error for security - :: - =/ nack-trace-bone=^bone (mix 0b10 bone) - =/ =naxplanation [message-num *error] - =/ =message-blob (jam naxplanation) - :: - (run-message-pump nack-trace-bone %memo message-blob) - -- - -- - -- -:: +make-message-pump: constructor for |message-pump -:: -++ make-message-pump - |= [state=message-pump-state =channel] - =* veb veb.bug.channel - =| gifts=(list message-pump-gift) - :: - |% - ++ message-pump . - ++ give |=(gift=message-pump-gift message-pump(gifts [gift gifts])) - ++ packet-pump (make-packet-pump packet-pump-state.state channel) - ++ trace - |= [verb=? print=(trap tape)] - ^+ same - (^trace verb her.channel ships.bug.channel print) - :: +work: handle a $message-pump-task - :: - ++ work - |= task=message-pump-task - ^+ [gifts state] - :: - =~ (dispatch-task task) - feed-packets - (run-packet-pump %halt ~) - assert - [(flop gifts) state] - == - :: +dispatch-task: perform task-specific processing - :: - ++ dispatch-task - |= task=message-pump-task - ^+ message-pump - :: - ?- -.task - %prod (run-packet-pump %prod ~) - %memo (on-memo message-blob.task) - %wake (run-packet-pump %wake current.state) - %hear - ?- -.ack-meat.task - %& (on-hear [message-num fragment-num=p.ack-meat]:task) - %| (on-done [message-num ?:(ok.p.ack-meat [%ok ~] [%nack ~])]:task) - == - %near (on-done [message-num %naxplanation error]:naxplanation.task) - == - :: +on-memo: handle request to send a message - :: - ++ on-memo - |= =message-blob - ^+ message-pump - :: - =. unsent-messages.state (~(put to unsent-messages.state) message-blob) - message-pump - :: +on-hear: handle packet acknowledgment - :: - ++ on-hear - |= [=message-num =fragment-num] - ^+ message-pump - :: pass to |packet-pump unless duplicate or future ack - :: - ?. (is-message-num-in-range message-num) - %- (trace snd.veb |.("hear pump out of range")) - message-pump - (run-packet-pump %hear message-num fragment-num) - :: +on-done: handle message acknowledgment - :: - :: A nack-trace message counts as a valid message nack on the - :: original failed message. - :: - :: This prevents us from having to wait for a message nack packet, - :: which would mean we couldn't immediately ack the nack-trace - :: message, which would in turn violate the semantics of backward - :: flows. - :: - ++ on-done - |= [=message-num =ack] - ^+ message-pump - :: unsent messages from the future should never get acked - :: - ?> (lth message-num next.state) - :: ignore duplicate message acks - :: - ?: (lth message-num current.state) - %- %+ trace snd.veb - |.("duplicate done {}") - message-pump - :: ignore duplicate and future acks - :: - ?. (is-message-num-in-range message-num) - message-pump - :: clear and print .unsent-fragments if nonempty - :: - =? unsent-fragments.state - &(=(current next) ?=(^ unsent-fragments)):state - :: - ~> %slog.0^leaf/"ames: early message ack {}" - ~ - :: clear all packets from this message from the packet pump - :: - =. message-pump (run-packet-pump %done message-num lag=*@dr) - :: enqueue this ack to be sent back to local client vane - :: - :: Don't clobber a naxplanation with just a nack packet. - :: - =? queued-message-acks.state - =/ old (~(get by queued-message-acks.state) message-num) - !?=([~ %naxplanation *] old) - (~(put by queued-message-acks.state) message-num ack) - :: emit local acks from .queued-message-acks until incomplete - :: - |- ^+ message-pump - :: if .current hasn't been fully acked, we're done - :: - ?~ cur=(~(get by queued-message-acks.state) current.state) - message-pump - :: .current is complete; pop, emit local ack, and try next message - :: - =. queued-message-acks.state - (~(del by queued-message-acks.state) current.state) - :: clear all packets from this message from the packet pump - :: - :: Note we did this when the original packet came in, a few lines - :: above. It's not clear why, but it doesn't always clear the - :: packets when it's not the current message. As a workaround, - :: we clear the packets again when we catch up to this packet. - :: - :: This is slightly inefficient because we run this twice for - :: each packet and it may emit a few unnecessary packets, but - :: but it's not incorrect. pump-metrics are updated only once, - :: at the time when we actually delete the packet. - :: - =. message-pump (run-packet-pump %done current.state lag=*@dr) - :: give %done to vane if we're ready - :: - ?- -.u.cur - %ok - =. message-pump (give %done current.state ~) - $(current.state +(current.state)) - :: - %nack - message-pump - :: - %naxplanation - =. message-pump (give %done current.state `error.u.cur) - $(current.state +(current.state)) - == - :: +is-message-num-in-range: %.y unless duplicate or future ack - :: - ++ is-message-num-in-range - |= =message-num - ^- ? - :: - ?: (gte message-num next.state) - %.n - ?: (lth message-num current.state) - %.n - !(~(has by queued-message-acks.state) message-num) - :: +feed-packets: give packets to |packet-pump until full - :: - ++ feed-packets - :: if nothing to send, no-op - :: - ?: &(=(~ unsent-messages) =(~ unsent-fragments)):state - message-pump - :: we have unsent fragments of the current message; feed them - :: - ?. =(~ unsent-fragments.state) - =/ res (feed:packet-pump unsent-fragments.state) - =+ [unsent packet-pump-gifts packet-pump-state]=res - :: - =. unsent-fragments.state unsent - =. packet-pump-state.state packet-pump-state - :: - =. message-pump (process-packet-pump-gifts packet-pump-gifts) - :: if it sent all of them, feed it more; otherwise, we're done - :: - ?~ unsent - feed-packets - message-pump - :: .unsent-messages is nonempty; pop a message off and feed it - :: - =^ =message-blob unsent-messages.state ~(get to unsent-messages.state) - :: break .message into .chunks and set as .unsent-fragments - :: - =. unsent-fragments.state (split-message next.state message-blob) - :: try to feed packets from the next message - :: - =. next.state +(next.state) - feed-packets - :: +run-packet-pump: call +work:packet-pump and process results - :: - ++ run-packet-pump - |= =packet-pump-task - ^+ message-pump - :: - =^ packet-pump-gifts packet-pump-state.state - (work:packet-pump packet-pump-task) - :: - (process-packet-pump-gifts packet-pump-gifts) - :: +process-packet-pump-gifts: pass |packet-pump effects up the chain - :: - ++ process-packet-pump-gifts - |= packet-pump-gifts=(list packet-pump-gift) - ^+ message-pump - :: - ?~ packet-pump-gifts - message-pump - =. message-pump (give i.packet-pump-gifts) - :: - $(packet-pump-gifts t.packet-pump-gifts) - :: +assert: sanity checks to isolate error cases - :: - ++ assert - ^+ message-pump - =/ top-live - (pry:packet-queue:*make-packet-pump live.packet-pump-state.state) - ?. |(?=(~ top-live) (lte current.state message-num.key.u.top-live)) - ~| [%strange-current current=current.state key.u.top-live] - !! - message-pump - -- -:: +make-packet-pump: construct |packet-pump core -:: -++ make-packet-pump - |= [state=packet-pump-state =channel] - =* veb veb.bug.channel - =| gifts=(list packet-pump-gift) - |% - ++ packet-pump . - ++ give |=(packet-pump-gift packet-pump(gifts [+< gifts])) - ++ trace - |= [verb=? print=(trap tape)] - ^+ same - (^trace verb her.channel ships.bug.channel print) - :: +packet-queue: type for all sent fragments, ordered by sequence number - :: - ++ packet-queue - %- (ordered-map live-packet-key live-packet-val) - lte-packets - :: +gauge: inflate a |pump-gauge to track congestion control - :: - ++ gauge (make-pump-gauge now.channel metrics.state [her bug]:channel) - :: +work: handle $packet-pump-task request - :: - ++ work - |= task=packet-pump-task - ^+ [gifts state] - :: - =- [(flop gifts) state] - :: - ?- -.task - %hear (on-hear [message-num fragment-num]:task) - %done (on-done message-num.task) - %wake (on-wake current.task) - %prod on-prod - %halt set-wake - == - :: +on-prod: reset congestion control, re-send packets - :: - ++ on-prod - ^+ packet-pump - ?: =(~ next-wake.state) - packet-pump - :: - =. metrics.state %*(. *pump-metrics counter counter.metrics.state) - =. live.state - %+ run:packet-queue live.state - |=(p=live-packet-val p(- *packet-state)) - :: - =/ sot (max 1 num-slots:gauge) - =/ liv live.state - |- ^+ packet-pump - ?: =(0 sot) packet-pump - ?: =(~ liv) packet-pump - =^ hed liv (pop:packet-queue liv) - =. packet-pump (give %send (to-static-fragment hed)) - $(sot (dec sot)) - :: +on-wake: handle packet timeout - :: - ++ on-wake - |= current=message-num - ^+ packet-pump - :: assert temporal coherence - :: - ?< =(~ next-wake.state) - =. next-wake.state ~ - :: tell congestion control a packet timed out - :: - =. metrics.state on-timeout:gauge - :: re-send first packet and update its state in-place - :: - =- =* res - - =. live.state live.res - =? packet-pump ?=(^ static-fragment) - %- %+ trace snd.veb - =/ nums [message-num fragment-num]:u.static-fragment.res - |.("dead {}") - (give %send u.static-fragment.res) - packet-pump - :: - =| acc=(unit static-fragment) - ^+ [static-fragment=acc live=live.state] - :: - %^ (dip:packet-queue _acc) live.state acc - |= $: acc=_acc - key=live-packet-key - val=live-packet-val - == - ^- [new-val=(unit live-packet-val) stop=? _acc] - :: if already acked later message, don't resend - :: - ?: (lth message-num.key current) - %- %- slog :_ ~ - leaf+"ames: strange wake queue, expected {}, got {}" - [~ stop=%.n ~] - :: packet has expired; update it in-place, stop, and produce it - :: - =. last-sent.val now.channel - =. retries.val +(retries.val) - :: - [`val stop=%.y `(to-static-fragment key val)] - :: +feed: try to send a list of packets, returning unsent and effects - :: - ++ feed - |= fragments=(list static-fragment) - ^+ [fragments gifts state] - :: return unsent back to caller and reverse effects to finalize - :: - =- [unsent (flop gifts) state] - :: - ^+ [unsent=fragments packet-pump] - :: bite off as many fragments as we can send - :: - =/ num-slots num-slots:gauge - =/ sent (scag num-slots fragments) - =/ unsent (slag num-slots fragments) - :: - :- unsent - ^+ packet-pump - :: if nothing to send, we're done - :: - ?~ sent packet-pump - :: convert $static-fragment's into +ordered-set [key val] pairs - :: - =/ send-list - %+ turn sent - |= static-fragment - ^- [key=live-packet-key val=live-packet-val] - :: - :- [message-num fragment-num] - :- [sent-date=now.channel retries=0 skips=0] - [num-fragments fragment] - :: update .live and .metrics - :: - =. live.state (gas:packet-queue live.state send-list) - =. metrics.state (on-sent:gauge (lent send-list)) - :: TMI - :: - => .(sent `(list static-fragment)`sent) - :: emit a $packet-pump-gift for each packet to send - :: - %+ roll sent - |= [packet=static-fragment core=_packet-pump] - (give:core %send packet) - :: +fast-resend-after-ack: resend timed out packets - :: - :: After we finally receive an ack, we want to resend all the live - :: packets that have been building up. - :: - ++ fast-resend-after-ack - |= [=message-num =fragment-num] - ^+ packet-pump - =; res=[resends=(list static-fragment) live=_live.state] - =. live.state live.res - %+ reel resends.res - |= [packet=static-fragment core=_packet-pump] - (give:core %send packet) - :: - =/ acc - resends=*(list static-fragment) - :: - %^ (dip:packet-queue _acc) live.state acc - |= $: acc=_acc - key=live-packet-key - val=live-packet-val - == - ^- [new-val=(unit live-packet-val) stop=? _acc] - ?: (lte-packets key [message-num fragment-num]) - [new-val=`val stop=%.n acc] - :: - ?: (gth (next-expiry:gauge key val) now.channel) - [new-val=`val stop=%.y acc] - :: - =. last-sent.val now.channel - =. resends.acc [(to-static-fragment key val) resends.acc] - [new-val=`val stop=%.n acc] - :: +on-hear: handle ack on a live packet - :: - :: If the packet was in our queue, delete it and update our - :: metrics, possibly re-sending skipped packets. Otherwise, no-op. - :: - ++ on-hear - |= [=message-num =fragment-num] - ^+ packet-pump - :: - =- :: if no sent packet matches the ack, don't apply mutations or effects - :: - ?. found.- - %- (trace snd.veb |.("miss {}")) - packet-pump - :: - =. metrics.state metrics.- - =. live.state live.- - %- ?. ?| =(0 fragment-num) - =(0 (mod counter.metrics.state 20)) - == - same - (trace snd.veb |.("send: {<[fragment=fragment-num show:gauge]>}")) - :: .resends is backward, so fold backward and emit - :: - =. packet-pump - %+ reel resends.- - |= [packet=static-fragment core=_packet-pump] - (give:core %send packet) - (fast-resend-after-ack message-num fragment-num) - :: - =/ acc - :* found=`?`%.n - resends=*(list static-fragment) - metrics=metrics.state - == - :: - ^+ [acc live=live.state] - :: - %^ (dip:packet-queue _acc) live.state acc - |= $: acc=_acc - key=live-packet-key - val=live-packet-val - == - ^- [new-val=(unit live-packet-val) stop=? _acc] - :: - =/ gauge (make-pump-gauge now.channel metrics.acc [her bug]:channel) - :: is this the acked packet? - :: - ?: =(key [message-num fragment-num]) - :: delete acked packet, update metrics, and stop traversal - :: - =. found.acc %.y - =. metrics.acc (on-ack:gauge -.val) - [new-val=~ stop=%.y acc] - :: is this a duplicate ack? - :: - ?. (lte-packets key [message-num fragment-num]) - :: stop, nothing more to do - :: - [new-val=`val stop=%.y acc] - :: ack was on later packet; mark skipped, tell gauge, and continue - :: - =. skips.val +(skips.val) - =^ resend metrics.acc (on-skipped-packet:gauge -.val) - ?. resend - [new-val=`val stop=%.n acc] - :: - =. last-sent.val now.channel - =. retries.val +(retries.val) - =. resends.acc [(to-static-fragment key val) resends.acc] - [new-val=`val stop=%.n acc] - :: +on-done: apply ack to all packets from .message-num - :: - ++ on-done - |= =message-num - ^+ packet-pump - :: - =- =. metrics.state metrics.- - =. live.state live.- - :: - %- (trace snd.veb |.("done {}")) - (fast-resend-after-ack message-num `fragment-num`0) - :: - ^+ [metrics=metrics.state live=live.state] - :: - %^ (dip:packet-queue pump-metrics) live.state acc=metrics.state - |= $: metrics=pump-metrics - key=live-packet-key - val=live-packet-val - == - ^- [new-val=(unit live-packet-val) stop=? pump-metrics] - :: - =/ gauge (make-pump-gauge now.channel metrics [her bug]:channel) - :: if we get an out-of-order ack for a message, skip until it - :: - ?: (lth message-num.key message-num) - [new-val=`val stop=%.n metrics] - :: if packet was from acked message, delete it and continue - :: - ?: =(message-num.key message-num) - [new-val=~ stop=%.n metrics=(on-ack:gauge -.val)] - :: we've gone past the acked message; we're done - :: - [new-val=`val stop=%.y metrics] - :: +set-wake: set, unset, or reset timer, emitting moves - :: - ++ set-wake - ^+ packet-pump - :: if nonempty .live, pry at head to get next wake time - :: - =/ new-wake=(unit @da) - ?~ head=(pry:packet-queue live.state) - ~ - `(next-expiry:gauge u.head) - :: no-op if no change - :: - ?: =(new-wake next-wake.state) packet-pump - :: unset old timer if non-null - :: - =? packet-pump !=(~ next-wake.state) - =/ old (need next-wake.state) - =. next-wake.state ~ - (give %rest old) - :: set new timer if non-null - :: - =? packet-pump ?=(^ new-wake) - =. next-wake.state new-wake - (give %wait u.new-wake) - :: - packet-pump - -- -:: +to-static-fragment: convenience function for |packet-pump -:: -++ to-static-fragment - |= [live-packet-key live-packet-val] - ^- static-fragment - [message-num num-fragments fragment-num fragment] -:: +make-pump-gauge: construct |pump-gauge congestion control core -:: -++ make-pump-gauge - |= [now=@da pump-metrics =ship =bug] - =* veb veb.bug - =* metrics +<+< - |% - ++ trace - |= [verb=? print=(trap tape)] - ^+ same - (^trace verb ship ships.bug print) - :: +next-expiry: when should a newly sent fresh packet time out? - :: - :: Use rtt + 4*sigma, where sigma is the mean deviation of rtt. - :: This should make it unlikely that a packet would time out from a - :: delay, as opposed to an actual packet loss. - :: - ++ next-expiry - |= [live-packet-key live-packet-val] - ^- @da - (add last-sent rto) - :: +num-slots: how many packets can we send right now? - :: - ++ num-slots - ^- @ud - (sub-safe cwnd num-live) - :: +on-sent: adjust metrics based on sending .num-sent fresh packets - :: - ++ on-sent - |= num-sent=@ud - ^- pump-metrics - :: - =. num-live (add num-live num-sent) - metrics - :: +on-ack: adjust metrics based on a packet getting acknowledged - :: - ++ on-ack - |= =packet-state - ^- pump-metrics - :: - =. counter +(counter) - =. num-live (dec num-live) - :: if below congestion threshold, add 1; else, add avg. 1 / cwnd - :: - =. cwnd - ?: in-slow-start - +(cwnd) - (add cwnd !=(0 (mod (mug now) cwnd))) - :: if this was a re-send, don't adjust rtt or downstream state - :: - ?. =(0 retries.packet-state) - metrics - :: rtt-datum: new rtt measurement based on this packet roundtrip - :: - =/ rtt-datum=@dr (sub-safe now last-sent.packet-state) - :: rtt-error: difference between this rtt measurement and expected - :: - =/ rtt-error=@dr - ?: (gte rtt-datum rtt) - (sub rtt-datum rtt) - (sub rtt rtt-datum) - :: exponential weighting ratio for .rtt and .rttvar - :: - %- %+ trace ges.veb - |.("ack update {}") - =. rtt (div (add rtt-datum (mul rtt 7)) 8) - =. rttvar (div (add rtt-error (mul rttvar 7)) 8) - =. rto (clamp-rto (add rtt (mul 4 rttvar))) - :: - metrics - :: +on-skipped-packet: handle misordered ack - :: - ++ on-skipped-packet - |= packet-state - ^- [resend=? pump-metrics] - :: - =/ resend=? &(=(0 retries) |(in-recovery (gte skips 3))) - :- resend - :: - =? cwnd !in-recovery (max 2 (div cwnd 2)) - %- %+ trace snd.veb - |.("skip {<[resend=resend in-recovery=in-recovery show]>}") - metrics - :: +on-timeout: (re)enter slow-start mode on packet loss - :: - ++ on-timeout - ^- pump-metrics - :: - %- (trace ges.veb |.("timeout update {}")) - =: ssthresh (max 1 (div cwnd 2)) - cwnd 1 - rto (clamp-rto (mul rto 2)) - == - metrics - :: +clamp-rto: apply min and max to an .rto value - :: - ++ clamp-rto - |= rto=@dr - ^+ rto - (min ~m2 (max ^~((div ~s1 5)) rto)) - :: +in-slow-start: %.y iff we're in "slow-start" mode - :: - ++ in-slow-start - ^- ? - (lth cwnd ssthresh) - :: +in-recovery: %.y iff we're recovering from a skipped packet - :: - :: We finish recovering when .num-live finally dips back down to - :: .cwnd. - :: - ++ in-recovery - ^- ? - (gth num-live cwnd) - :: +sub-safe: subtract with underflow protection - :: - ++ sub-safe - |= [a=@ b=@] - ^- @ - ?:((lte a b) 0 (sub a b)) - :: +show: produce a printable version of .metrics - :: - ++ show - =/ ms (div ~s1 1.000) - :: - :* rto=(div rto ms) - rtt=(div rtt ms) - rttvar=(div rttvar ms) - ssthresh=ssthresh - cwnd=cwnd - num-live=num-live - counter=counter - == - -- -:: +make-message-sink: construct |message-sink message receiver core -:: -++ make-message-sink - |= [state=message-sink-state =channel] - =* veb veb.bug.channel - =| gifts=(list message-sink-gift) - |% - ++ message-sink . - ++ give |=(message-sink-gift message-sink(gifts [+< gifts])) - ++ trace - |= [verb=? print=(trap tape)] - ^+ same - (^trace verb her.channel ships.bug.channel print) - :: +work: handle a $message-sink-task - :: - ++ work - |= task=message-sink-task - ^+ [gifts state] - :: - =- [(flop gifts) state] - :: - ?- -.task - %done (on-done ok.task) - %drop (on-drop message-num.task) - %hear (on-hear [lane shut-packet ok]:task) - == - :: +on-hear: receive message fragment, possibly completing message - :: - ++ on-hear - |= [=lane =shut-packet ok=?] - ^+ message-sink - :: we know this is a fragment, not an ack; expose into namespace - :: - ?> ?=(%& -.meat.shut-packet) - =+ [num-fragments fragment-num fragment]=+.meat.shut-packet - :: seq: message sequence number, for convenience - :: - =/ seq message-num.shut-packet - :: ignore messages from far future; limit to 10 in progress - :: - ?: (gte seq (add 10 last-acked.state)) - %- %+ trace odd.veb - |.("future %hear {}") - message-sink - :: - =/ is-last-fragment=? =(+(fragment-num) num-fragments) - :: always ack a dupe! - :: - ?: (lte seq last-acked.state) - ?. is-last-fragment - :: single packet ack - :: - %- %+ trace rcv.veb - |.("send dupe ack {}") - (give %send seq %& fragment-num) - :: whole message (n)ack - :: - =/ ok=? !(~(has in nax.state) seq) - %- (trace rcv.veb |.("send dupe message ack {} ok={}")) - (give %send seq %| ok lag=`@dr`0) - :: last-acked}" - message-sink - :: ack all other packets - :: - %- %+ trace rcv.veb |. - =/ data - [seq=seq fragment-num=fragment-num num-fragments=num-fragments] - "send ack-1 {}" - (give %send seq %& fragment-num) - :: last-heard (gth num-fragments.u.existing fragment-num) - ?> =(num-fragments.u.existing num-fragments) - :: - u.existing - :: - =/ already-heard-fragment=? - (~(has by fragments.partial-rcv-message) fragment-num) - :: ack dupes except for the last fragment, in which case drop - :: - ?: already-heard-fragment - ?: is-last-fragment - %- %+ trace rcv.veb |. - =/ data - [her.channel seq=seq lh=last-heard.state la=last-acked.state] - "hear last dupe {}" - message-sink - %- %+ trace rcv.veb - |.("send dupe ack {}") - (give %send seq %& fragment-num) - :: new fragment; store in state and check if message is done - :: - =. num-received.partial-rcv-message - +(num-received.partial-rcv-message) - :: - =. fragments.partial-rcv-message - (~(put by fragments.partial-rcv-message) fragment-num fragment) - :: - =. live-messages.state - (~(put by live-messages.state) seq partial-rcv-message) - :: ack any packet other than the last one, and continue either way - :: - =? message-sink !is-last-fragment - %- %+ trace rcv.veb |. - =/ data - [seq=seq fragment-num=fragment-num num-fragments=num-fragments] - "send ack-2 {}" - (give %send seq %& fragment-num) - :: enqueue all completed messages starting at +(last-heard.state) - :: - |- ^+ message-sink - :: if this is not the next message to ack, we're done - :: - ?. =(seq +(last-heard.state)) - message-sink - :: if we haven't heard anything from this message, we're done - :: - ?~ live=(~(get by live-messages.state) seq) - message-sink - :: if the message isn't done yet, we're done - :: - ?. =(num-received num-fragments):u.live - message-sink - :: we have whole message; update state, assemble, and send to vane - :: - =. last-heard.state +(last-heard.state) - =. live-messages.state (~(del by live-messages.state) seq) - :: - %- %+ trace msg.veb - |.("hear {} {} {}kb") - =/ message=* (assemble-fragments [num-fragments fragments]:u.live) - =. message-sink (enqueue-to-vane seq message) - :: - $(seq +(seq)) - :: +enqueue-to-vane: enqueue message to be sent to local vane - :: - ++ enqueue-to-vane - |= [seq=message-num message=*] - ^+ message-sink - :: - =/ empty=? =(~ pending-vane-ack.state) - =. pending-vane-ack.state (~(put to pending-vane-ack.state) seq message) - ?. empty - message-sink - (give %memo seq message) - :: +on-done: handle confirmation of message processing from vane - :: - ++ on-done - |= ok=? - ^+ message-sink - :: - =^ pending pending-vane-ack.state ~(get to pending-vane-ack.state) - =/ =message-num message-num.p.pending - :: - =. last-acked.state +(last-acked.state) - =? nax.state !ok (~(put in nax.state) message-num) - :: - =. message-sink (give %send message-num %| ok lag=`@dr`0) - =/ next ~(top to pending-vane-ack.state) - ?~ next - message-sink - (give %memo u.next) - :: +on-drop: drop .message-num from our .nax state - :: - ++ on-drop - |= =message-num - ^+ message-sink - :: - =. nax.state (~(del in nax.state) message-num) - :: - message-sink - -- --- diff --git a/pkg/arvo/sys/vane/behn.hoon b/pkg/arvo/sys/vane/behn.hoon index afff958ea..78f13c81a 100644 --- a/pkg/arvo/sys/vane/behn.hoon +++ b/pkg/arvo/sys/vane/behn.hoon @@ -45,161 +45,112 @@ |= [[now=@da =duct] state=behn-state] :: |% - :: %entry-points :: - :: +born: urbit restarted; refresh :next-wake and store wakeup timer duct + +| %helpers :: - ++ born set-unix-wake(next-wake.state ~, unix-duct.state duct) - :: +crud: handle failure of previous arvo event - :: - ++ crud - |= [tag=@tas error=tang] + ++ this . + ++ emit |=(m=move this(moves [m moves])) + ++ abet ^+ [moves state] - :: behn must get activated before other vanes in a %wake + :: moves are statefully pre-flopped to ensure that + :: any prepended %doze is emitted first :: - ?. =(%wake tag) - ~& %behn-crud-not-wake^tag - [[duct %slip %d %flog %crud tag error]~ state] + =. moves (flop moves) + =/ new=(unit @da) (bind (pry:timer-map timers.state) head) + :: emit %doze if needed :: - ?: =(~ timers.state) - ~|(%behn-crud-no-timer^tag^error !!) + =? ..this + ?~ unix-duct.state | + =/ dif=[old=(unit @da) new=(unit @da)] [next-wake.state new] + ?+ dif ~|([%unpossible dif] !!) + [~ ~] | :: no-op + [~ ^] & :: set + [^ ~] & :: clear + [^ ^] !=(u.old.dif u.new.dif) :: set if changed + == + (emit(next-wake.state new) [unix-duct.state %give %doze new]) :: - (wake `error) - :: +rest: cancel the timer at :date, then adjust unix wakeup - :: +wait: set a new timer at :date, then adjust unix wakeup + [moves state] :: - ++ rest |=(date=@da set-unix-wake(timers.state (unset-timer [date duct]))) - ++ wait |=(date=@da set-unix-wake(timers.state (set-timer [date duct]))) - :: +huck: give back immediately + +| %entry-points :: - :: Useful if you want to continue working after other moves finish. + ++ call + |= [=task error=(unit tang)] + ^+ this + ?: ?& ?=(^ error) + !?=(%wake -.task) + == + :: XX more and better error handling + :: + ~& %behn-crud-not-wake^-.task + (emit [duct %slip %d %flog %crud -.task u.error]) + :: + ?- -.task + %born this(next-wake.state ~, unix-duct.state duct) + %drip (drip p.task) + %huck (emit [duct %give %heck syn.task]) + %rest this(timers.state (unset-timer [p.task duct])) + %trim this + %vega this + %wait this(timers.state (set-timer [p.task duct])) + %wake (wake(next-wake.state ~) error) + == :: - ++ huck - |= syn=sign-arvo - =< [moves state] - event-core(moves [duct %give %heck syn]~) - :: +drip: XX - :: - ++ drip - |= mov=vase - =< [moves state] - ^+ event-core - =. moves - [duct %pass /drip/(scot %ud count.drips.state) %b %wait +(now)]~ - =. movs.drips.state - (~(put by movs.drips.state) count.drips.state mov) - =. count.drips.state +(count.drips.state) - event-core - :: +take-drip: XX + :: +take-drip: the future is now, %give the deferred move :: ++ take-drip |= [num=@ud error=(unit tang)] - =< [moves state] - ^+ event-core + ^+ this =/ drip (~(got by movs.drips.state) num) - =. movs.drips.state (~(del by movs.drips.state) num) - =/ =move - =/ card [%give %meta drip] - ?~ error - [duct card] - =/ =tang - (weld u.error `tang`[leaf/"drip failed" ~]) - :: XX should be - :: [duct %hurl fail/tang card] - :: - [duct %pass /drip-slog %d %flog %crud %drip-fail tang] - event-core(moves [move moves]) - :: +trim: in response to memory pressue + %- emit(movs.drips.state (~(del by movs.drips.state) num)) + =/ card [%give %meta drip] + ?~ error + [duct card] + =/ =tang + (weld u.error `tang`[leaf/"drip failed" ~]) + :: XX should be + :: [duct %hurl fail/tang card] + :: + [duct %pass /drip-slog %d %flog %crud %drip-fail tang] :: - ++ trim [moves state] - :: +vega: learn of a kernel upgrade + +| %tasks :: - ++ vega [moves state] - :: +wake: unix says wake up; process the elapsed timer and set :next-wake + :: +drip: enqueue a future gift (as a vase), %pass ourselves a %wait + :: + ++ drip + |= vax=vase + ^+ this + %. [duct %pass /drip/(scot %ud count.drips.state) %b %wait +(now)] + %= emit + movs.drips.state (~(put by movs.drips.state) count.drips.state vax) + count.drips.state +(count.drips.state) + == + :: + :: +wake: unix says wake up; process the elapsed timer (or forward error) :: ++ wake |= error=(unit tang) - ^+ [moves state] - :: no-op on spurious but innocuous unix wakeups - :: + ^+ this ?: =(~ timers.state) + :: no-op on spurious but innocuous unix wakeups + :: ~? ?=(^ error) %behn-wake-no-timer^u.error - [moves state] - :: if we errored, pop the timer and notify the client vane of the error - :: - ?^ error - =< set-unix-wake - =^ =timer timers.state pop-timer - (emit-vane-wake duct.timer error) - :: if unix woke us too early, retry by resetting the unix wakeup timer - :: + this =/ [=timer later-timers=_timers.state] pop-timer ?: (gth date.timer now) - set-unix-wake(next-wake.state ~) - :: pop first timer, tell vane it has elapsed, and adjust next unix wakeup + :: no-op if timer is early, (+abet will reset) + :: + this + :: pop the first timer and notify client vane, + :: forwarding error if present :: - =< set-unix-wake - (emit-vane-wake(timers.state later-timers) duct.timer ~) - :: %utilities + :: XX %wake errors should be signaled out-of-band + :: [duct.timer %hurl goof %give %wake ~] + :: + (emit(timers.state later-timers) [duct.timer %give %wake error]) :: - ::+| + +| %implementation :: - ++ event-core . - :: +emit-vane-wake: produce a move to wake a vane; assumes no prior moves - :: - ++ emit-vane-wake - |= [=^duct error=(unit tang)] - event-core(moves [duct %give %wake error]~) - :: +emit-doze: set new unix wakeup timer in state and emit move to unix - :: - :: We prepend the unix %doze event so that it is handled first. Arvo must - :: handle this first because the moves %behn emits will get handled in - :: depth-first order. If we're handling a %wake which causes a move to a - :: different vane and a %doze event to send to unix, Arvo needs to process - :: the %doze first because otherwise if the move to the other vane calls - :: back into %behn and emits a second %doze, the second %doze would be - :: handled by unix first which is incorrect. - :: - ++ emit-doze - |= =date=(unit @da) - ^+ event-core - :: no-op if .unix-duct has not yet been set - :: - ?~ unix-duct.state - event-core - :: make sure we don't try to wake up in the past - :: - =? date-unit ?=(^ date-unit) `(max now u.date-unit) - :: - %_ event-core - next-wake.state date-unit - moves [[unix-duct.state %give %doze date-unit] moves] - == - :: +set-unix-wake: set or unset next unix wakeup timer based on :i.timers - :: - ++ set-unix-wake - =< [moves state] - ~% %set-unix-wake ..part ~ |- - ^+ event-core - :: - =* next-wake next-wake.state - =* timers timers.state - :: if no timers, cancel existing wakeup timer or no-op - :: - =/ first=(unit [date=@da *]) (pry:timer-map timers.state) - ?~ first - ?~ next-wake - event-core - (emit-doze ~) - :: if :next-wake is in the past or not soon enough, reset it - :: - ?^ next-wake - ?: &((gte date.u.first u.next-wake) (lte now u.next-wake)) - event-core - (emit-doze `date.u.first) - :: there was no unix wakeup timer; set one - :: - (emit-doze `date.u.first) :: +pop-timer: dequeue and produce earliest timer :: ++ pop-timer @@ -267,27 +218,10 @@ wrapped-task=(hobo task) == ^- [(list move) _behn-gate] - :: =/ =task ((harden task) wrapped-task) =/ event-core (per-event [now hen] state) - :: =^ moves state - :: - :: handle error notifications - :: - ?^ dud - (crud:event-core -.task tang.u.dud) - :: - ?- -.task - %born born:event-core - %rest (rest:event-core date=p.task) - %drip (drip:event-core move=p.task) - %huck (huck:event-core syn.task) - %trim trim:event-core - %vega vega:event-core - %wait (wait:event-core date=p.task) - %wake (wake:event-core error=~) - == + abet:(call:event-core task ?~(dud ~ `tang.u.dud)) [moves behn-gate] :: +load: migrate an old state to a new behn version :: @@ -378,6 +312,6 @@ ?> ?=([%drip @ ~] tea) =/ event-core (per-event [now hen] state) =^ moves state - (take-drip:event-core (slav %ud i.t.tea) error.hin) + abet:(take-drip:event-core (slav %ud i.t.tea) error.hin) [moves behn-gate] -- diff --git a/pkg/arvo/sys/vane/clay.hoon b/pkg/arvo/sys/vane/clay.hoon index 8c0a7f276..e46008de9 100644 --- a/pkg/arvo/sys/vane/clay.hoon +++ b/pkg/arvo/sys/vane/clay.hoon @@ -1,5 +1,5 @@ :: clay (4c), revision control -!: +:: :: The way to understand Clay is to take it section-by-section: :: :: - Data structures. You *must* start here; make sure you understand @@ -32,8 +32,56 @@ :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: -:: Here are the structures. `++raft` is the formal arvo state. It's also -:: worth noting that many of the clay-related structures are defined in lull. +:: We use a system of "invariant footnotes", where nonlocal invariants +:: are tagged with notes to construct a distributed argument that the +:: invariant is maintained. For example, see [wake]. +:: +:: Each one should be described somewhere, and then it should be +:: referenced any time it's touched. For example, any code which might +:: fill a subscription should be tagged with [wake], and if +wake is +:: not called by the end of that function, the function itself should +:: be tagged with [wake]. +:: +:: The tagged code should constitute an argument that the invariant is +:: maintained everywhere. While this is vulnerable to omission ("I +:: forgot that X could fill a subscription", it provides a good minimum +:: bar. +:: +:: Tag the specific line of code which affects the invariant. You do +:: not need to tag every function in a call stack if the invariant is +:: guaranteed to be maintained by the time the function returns. +:: +:: Some invariant references get tagged with whether they "open" or +:: "close" the invariant. For example, adding a commit to the dome +:: "opens" the [wake] invariant, while calling +wake closes it. When +:: an invariant opens, you should be able to scan down and find why it +:: closes in each possible flow of control. For wake, these are +:: labeled like this: +:: +:: open: [wake] < +:: close: [wake] > +:: open and almost immediately close: [wake] <> +:: +:: This system is best used for nonlocal invariants and is not +:: necessary when a function can guarantee its own invariants. For +:: example, consider a set alongside a @ud representing its size. +:: There is an invariant that any time you add or remove an item from +:: the set you must update its size. If you're operating on these +:: directly, it could be beneficial to tag each line of code which +:: might modify the set and make it clear where the size is modified. +:: +:: Sometimes code can be restructured so that many fewer tags are +:: needed. In the above example, if the set is modified in many +:: places, it may be worth factoring out set+size into a data structure +:: with its own arms for put, del, uni, int, etc. Then the invariant +:: only needs to be maintained within that data structure, and call +:: sites do not need to be tagged. +:: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: Here are the structures. `++raft` is the formal arvo state. It's +:: also worth noting that many of the clay-related structures are +:: defined in lull. :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: =/ bud @@ -90,7 +138,7 @@ :: `sto` stores the data needed to merge, and `bas` is the base :: beak for the merge. :: -+$ melt [bas=beak con=(list [beak germ]) sto=(map beak (unit dome:clay))] ++$ melt [bas=beak con=(list [beak germ]) sto=(map beak (unit domo))] :: :: Domestic desk state. :: @@ -105,44 +153,6 @@ fiz=melt :: state for mega merges == :: -:: Desk state. -:: -:: Includes a checked-out ankh with current content, most recent version, map -:: of all version numbers to commit hashes (commits are in hut.rang), and map -:: of labels to version numbers. -:: -:: `mim` is a cache of the content in the directories that are mounted -:: to unix. Often, we convert to/from mime without anything really -:: having changed; this lets us short-circuit that in some cases. -:: Whenever you give an `%ergo`, you must update this. -:: -+$ dome - $: let=aeon :: top id - hit=(map aeon tako) :: versions by id - lab=(map @tas aeon) :: labels - tom=(map tako norm) :: tomb policies - nor=norm :: default policy - mim=(map path mime) :: mime cache - fod=flue :: ford cache - == :: -:: -:: Commit state. -:: -:: -- `del` is the paths we're deleting. -:: -- `ink` is the insertions of hoon files (short-circuited for -:: bootstrapping). -:: -- `ins` is all the other insertions. -:: -- `dif` is the diffs in `dig` applied to their files. -:: -- `mut` is the diffs between `muc` and the original files. -:: -+$ dork :: diff work - $: del=(list path) :: deletes - ink=(list (pair path cage)) :: hoon inserts - ins=(list (pair path cage)) :: inserts - dif=(list (trel path lobe cage)) :: changes - mut=(list (trel path lobe cage)) :: mutations - == :: -:: :: Over-the-wire backfill request/response :: +$ fill @@ -157,78 +167,6 @@ [%1 peg=(unit page)] == :: -:: Global ford cache -:: -:: Refcount includes references from other items in the cache, and -:: from spills in each desk -:: -:: This is optimized for minimizing the number of rebuilds, and given -:: that, minimizing the amount of memory used. It is relatively slow -:: to lookup, because generating a cache key can be fairly slow (for -:: files, it requires parsing; for tubes, it even requires building -:: the marks). -:: -+$ flow (map leak [refs=@ud =soak]) -:: -:: Per-desk ford cache -:: -:: Spill is the set of "roots" we have into the global ford cache. -:: We add a root for everything referenced directly or indirectly on -:: a desk, then invalidate them on commit only if their dependencies -:: change. -:: -:: Sprig is a fast-lookup index over the global ford cache. The only -:: goal is to make cache hits fast. -:: -+$ flue [spill=(set leak) sprig=(map mist [=leak =soak])] -:: -:: Ford build without content. -:: -+$ mist - $% [%file =path] - [%nave =mark] - [%dais =mark] - [%cast =mars] - [%tube =mars] - [%vale =path] - [%arch =path] - == -:: -:: Ford build with content. -:: -+$ pour - $% [%file =path] - [%nave =mark] - [%dais =mark] - [%cast =mars] - [%tube =mars] - :: leafs - :: - [%vale =path =lobe] - [%arch =path =(map path lobe)] - == -:: -:: Ford result. -:: -+$ soak - $% [%cage =cage] - [%vase =vase] - [%arch dir=(map @ta vase)] - [%dais =dais] - [%tube =tube] - == -:: -:: Ford cache key -:: -:: This includes all build inputs, including transitive dependencies, -:: recursively. -:: -+$ leak - $~ [*pour ~] - $: =pour - deps=(set leak) - == -:: :: New desk data. :: :: Sent to other ships to update them about a particular desk. @@ -265,6 +203,8 @@ mon=(map term beam) :: mount points hez=(unit duct) :: sync duct cez=(map @ta crew) :: permission groups + tyr=(set duct) :: app subs + tur=rock:tire :: last tire pud=(unit [=desk =yoki]) :: pending update bug=[veb=@ mas=@] :: verbosity == :: @@ -318,6 +258,8 @@ haw=(map mood (unit cage)) :: simple cache == :: :: ++$ bill (list dude:gall) +:: :: Active downloads :: +$ update-state @@ -394,11 +336,15 @@ task :: == :: $: %d :: to %dill - $>(%flog task:dill) :: + $> $? %flog :: + %text :: + == :: + task:dill :: == :: $: %g :: to %gall $> $? %deal %jolt + %load == task:gall == :: @@ -421,14 +367,13 @@ == == :: $: %clay :: $> $? %mere :: - %note :: %writ :: + %wris :: == :: gift :: == :: $: %gall - $> $? %onto - %unto + $> $? %unto == gift:gall == @@ -571,6 +516,7 @@ $(vaz t.vaz) :: ++ ford + !. => |% +$ state $: cache=flow @@ -840,7 +786,7 @@ (page-to-cage page) =^ [mark vax=vase] nub (page-to-cage page) =^ =tube nub (build-tube p.page mak) - :_(nub [mak (road |.((tube vax)))]) + :_(nub [mak (tube vax)]) :: ++ page-to-cage |= =page @@ -862,7 +808,7 @@ [cag nub] =^ =tube nub (build-tube mok mak) ~| error-running-cast+[path mok mak] - :_(nub [mak (road |.((tube q.cag)))]) + :_(nub [mak (tube q.cag)]) :: ++ run-pact |= [old=page diff=page] @@ -908,7 +854,7 @@ %+ gain-leak file+path |= nob=state =. nub nob - =/ res=vase (road |.((slap sut hoon.pile))) + =/ res=vase (slap sut hoon.pile) [[%vase res] nub] :: ++ build-file @@ -1330,25 +1276,9 @@ :: NB: ruf=raft crashes in the compiler :: =* ruf |3.+6.^$ - :: - =/ [mow=(list move) hun=(unit duct) rede] - ?. =(our her) - :: no duct, foreign +rede or default - :: - :+ ?: (~(has by hoy.ruf) her) - ~ - [hun.rom.ruf %pass /sinks %j %public-keys (silt her ~)]~ - ~ - =/ rus rus:(~(gut by hoy.ruf) her *rung) - %+ ~(gut by rus) syd - [lim=~2000.1.1 ref=`*rind qyx=~ dom=*dome per=~ pew=~ fiz=*melt] - :: administrative duct, domestic +rede - :: - :+ ~ `hun.rom.ruf - =/ jod (~(gut by dos.rom.ruf) syd *dojo) - [lim=now ref=~ [qyx dom per pew fiz]:jod] - :: + =| [mow=(list move) hun=(unit duct) rede] =* red=rede ->+ + =< apex |% ++ abet :: resolve ^- [(list move) raft] @@ -1366,6 +1296,30 @@ dos.rom (~(put by dos.rom.ruf) syd [qyx dom per pew fiz]:red) == :: + ++ apex + ^+ ..park + ?. =(our her) + :: no duct, foreign +rede or default + :: + =. mow + ?: (~(has by hoy.ruf) her) + ~ + [hun.rom.ruf %pass /sinks %j %public-keys (silt her ~)]~ + =. hun ~ + =. |2.+6.park + =/ rus rus:(~(gut by hoy.ruf) her *rung) + %+ ~(gut by rus) syd + [lim=~2000.1.1 ref=`*rind qyx=~ dom=*dome per=~ pew=~ fiz=*melt] + ..park + :: administrative duct, domestic +rede + :: + =. mow ~ + =. hun `hun.rom.ruf + =. |2.+6.park + =/ jod (~(gut by dos.rom.ruf) syd *dojo) + [lim=now ref=*(unit rind) [qyx dom per pew fiz]:jod] + ..park + :: :: Handle `%sing` requests :: ++ aver @@ -1524,6 +1478,30 @@ (~(has in ^~((silt `(list ^care)`~[%u %w %x %y %z]))) care) -- :: + :: Build and send agents to gall + :: + :: Must be called at the end of a commit, but only while Clay is in a + :: fully-consistent state (eg not in the middle of a kelvin upgrade). + :: + ++ goad + ^+ ..park + =^ moves-1 ruf abet + =^ moves-2 ruf abet:goad:(lu now rof hen ruf) + =. ..park apex + (emil (weld moves-1 moves-2)) + :: + :: Notify subscribers of changes to tire + :: + :: Must be called any time tire could have changed, unless you called + :: goad (which calls tare internally). + :: + ++ tare + ^+ ..park + =^ moves-1 ruf abet + =^ moves-2 ruf abet:tare:(lu now rof hen ruf) + =. ..park apex + (emil (weld moves-1 moves-2)) + :: :: Create a request that cannot be filled immediately. :: :: If it's a local request, we just put in in `qyx`, setting a timer if it's @@ -1537,6 +1515,8 @@ =. wov (dedupe wov) =. qyx (~(put ju qyx) wov hen) ?~ ref + :: [wake] at @da must check if subscription was fulfilled + :: (run-if-future rove.wov |=(@da (bait hen +<))) |- ^+ +>+.$ =/ =rave (rove-to-rave rove.wov) @@ -1653,8 +1633,8 @@ :: no existing aeon is bound to this label :: ?~ yen - =. lab.dom (~(put by lab.dom) bel yon) - ..park + =. lab.dom (~(put by lab.dom) bel yon) :: [wake] <> + wake :: an aeon is bound to this label, :: but it is the same as the existing one, so we no-op :: @@ -1678,7 +1658,7 @@ ?> ?=(~ deletes) =/ data=(map path (each page lobe)) (~(run by changes) |=(=cage &+[p q.q]:cage)) - (park | &+[~ data] *rang) + (park | & &+[~ data] *rang) :: =/ parent-tako=tako (aeon-to-tako:ze let.dom) =/ data=(map path (each page lobe)) @@ -1693,7 +1673,7 @@ (~(run by changes) |=(=cage &+[p q.q]:cage)) :: =/ =yuki [~[parent-tako] data] - (park | &+yuki *rang) + (park | & &+yuki *rang) :: :: Unix commit :: @@ -1722,12 +1702,22 @@ :: :: Guaranteed to finish in one event. :: + :: updated: whether we've already completed sys upgrade + :: goat: whether we should call +goad at the end. Only false + :: during kelvin upgrade so that all commits can happen before + :: the +goad. + :: yoki: new commit + :: rang: any additional objects referenced + :: + :: [goad] < if goat is false, then the caller is responsible to + :: call +goad. + :: :: TODO: needs to check tako in rang :: ++ park =/ check-sane | |^ - |= [updated=? =yoki =rang] + |= [updated=? goat=? =yoki =rang] ^+ ..park =: hut.ran (~(uni by hut.rang) hut.ran) lat.ran (~(uni by lat.rang) lat.ran) @@ -1741,18 +1731,47 @@ |= [=path tum=(each page lobe)] ?: |(?=(%& -.tum) (~(has by lat.ran) p.tum)) & - (mean leaf/"clay: commit failed, file tombstoned: {} {<`@uv`p.tum>}" ~) + =- (mean leaf/- ~) + "clay: commit failed, file tombstoned: {} {<`@uv`p.tum>}" !! :: find desk kelvin :: - =/ kel=weft (get-kelvin yoki) - ?. |(=(%base syd) =(kel [%zuse zuse])) - ~>(%mean.|.(leaf/"clay: bad-kelvin, {<[need=zuse/zuse have=kel]>}") !!) + =/ kel=(set weft) (waft-to-wefts (get-kelvin yoki)) + ?. ?| (~(has in kel) zuse+zuse) :: kelvin match + ?& !=(%base syd) :: best-effort compat + %- ~(any in kel) + |= =weft + &(=(%zuse lal.weft) (gth num.weft zuse)) + == + ?& =(%base syd) :: ready to upgrade + %+ levy ~(tap by tore:(lu now rof hen ruf)) + |= [=desk =zest wic=(set weft)] + ?| =(%base desk) + !?=(%live zest) + !=(~ (~(int in wic) kel)) + == + == + == + ?: (~(all in kel) |=(=weft (gth num.weft zuse))) + %- (slog leaf+"clay: old-kelvin, {<[need=zuse/zuse have=kel]>}" ~) + ..park + =. wic.dom :: [tare] < + %+ roll ~(tap in kel) + |: [weft=*weft wic=wic.dom] + (~(put by wic) weft yoki) + =? ..park !?=(%base syd) wick :: [wick] + %- (slog leaf+"clay: wait-for-kelvin, {<[need=zuse/zuse have=kel]>}" ~) + tare :: [tare] > + =. wic.dom (~(del by wic.dom) zuse+zuse) :: =/ old-yaki ?: =(0 let.dom) *yaki (aeon-to-yaki:ze let.dom) + =/ old-kel=(set weft) + ?: =(0 let.dom) + [zuse+zuse ~ ~] + (waft-to-wefts (get-kelvin %| old-yaki)) =/ [deletes=(set path) changes=(map path (each page lobe))] (get-changes q.old-yaki new-data) ~| [from=let.dom deletes=deletes changes=~(key by changes)] @@ -1761,8 +1780,36 @@ :: promote and fill in mime cache :: =/ invalid (~(uni in deletes) ~(key by changes)) + :: if /sys updated in %base, defer to arvo and return early + :: ?: &(=(%base syd) !updated (~(any in invalid) is-kernel-path)) (sys-update yoki new-data) + :: after this point, there must be no early return except if it's a + :: complete no-op. any error conditions must crash. since we're + :: changing state, we may need to call +wake, +goad, etc, which + :: happens at the end of the function. + :: + :: [wick] if this commit added compatibility to a future kelvin, + :: then we might have unblocked a kelvin upgrade. + :: + :: or, if *this* is a kelvin upgrade, it's possible that another + :: kelvin upgrade will immediately be ready. for example, this + :: could be the case if all desks but one are ready for the next + :: two kelvins, and then that desk is suspended or receives a + :: commit with compatiblity with both kelvins. + :: + :: in any of these cases, we finish the current commit but call + :: +wick so that we try to execute the kelvin upgrade afterward. + :: we want this commit to persist even if the subsequent kelvin + :: upgrade fails. + :: + =. ..park wick + =. wic.dom :: [tare] < + %+ roll ~(tap in kel) + |: [weft=*weft wic=wic.dom] + ?: (gte num.weft zuse) + wic + (~(put by wic) weft yoki) :: =+ ?. (did-kernel-update invalid) ~ ((slog 'clay: kernel updated' ~) ~) @@ -1803,9 +1850,10 @@ == :: if we didn't change the data and it's not a merge commit, abort :: - :: very important to keep all permanent changes below this point - :: ?: &(=([r.old-yaki ~] p.p.yoki) =(data q.old-yaki)) + :: [tare] > if no changes, then commits-in-waiting could not have + :: changed. + :: ..park =/ =yaki ?- -.yoki @@ -1813,6 +1861,8 @@ %| ?> =(data q.p.yoki) p.yoki == + :: [wake] < [ergo] < [goad] < + :: =: let.dom +(let.dom) hit.dom (~(put by hit.dom) +(let.dom) r.yaki) hut.ran (~(put by hut.ran) r.yaki yaki) @@ -1831,7 +1881,45 @@ =. fod.dom [spill sprig]:args =. fad cache.args =. ..park (emil (print q.old-yaki data)) - wake:?:(mem (ergo 0 mum.res) ..park) + :: if upgrading kelvin and there's a commit-in-waiting, use that + :: + =? ..park &(=(%base syd) !=(old-kel kel)) + =/ desks=(list [=desk =dojo]) ~(tap by dos.rom) + =^ moves-1 ruf abet + =| moves-2=(list move) + |- ^+ ..park + ?~ desks + =. ..park apex + (emil (weld moves-1 moves-2)) + ?. ?=(%live liv.dom.dojo.i.desks) + $(desks t.desks) + ?: ?=(%base desk.i.desks) + $(desks t.desks) + ?~ wat=(~(get by wic.dom.dojo.i.desks) zuse+zuse) + (mean (cat 3 'clay: missing commit-in-waiting on ' desk.i.desks) ~) + =/ den ((de now rof hen ruf) our desk.i.desks) + :: [goad] < call without goading so that we apply all the commits + :: before trying to compile all desks to send to gall. + :: + =^ moves-3 ruf abet:(park:den | | u.wat *^rang) + =. moves-2 (weld moves-2 moves-3) + $(desks t.desks) + :: tell gall to try to run agents if %held + :: + :: [goad] > if goat or desk not running. %held uses park-held to + :: defer the goad into a new event, to attempt to revive the desk. + :: Note that %base will always be %live. + :: + =. ..park + ?- liv.dom + %held (emit hen %pass /park-held/[syd] %b %wait now) + %dead ..park + %live ?:(goat goad ..park) + == + :: notify unix and subscribers + :: + =? ..park mem (ergo 0 mum.res) :: [ergo] > + wake:tare :: [wake] > [tare] > :: :: +is-kernel-path: should changing .pax cause a kernel or vane reload? :: @@ -1843,14 +1931,15 @@ | %- ~(any in invalid) |=(p=path &((is-kernel-path p) !?=([%sys %vane *] p))) + :: :: +get-kelvin: read the desk's kernel version from /sys/kelvin :: ++ get-kelvin |= =yoki - ^- weft + ^- waft |^ ?- -.yoki %| - %- lobe-to-weft + %- lobe-to-waft ~> %mean.(cat 3 'clay: missing /sys/kelvin on ' syd) ~| ~(key by q.p.yoki) (~(got by q.p.yoki) /sys/kelvin) @@ -1861,26 +1950,24 @@ ~| ~(key by q.p.yoki) (~(got by q.p.yoki) /sys/kelvin) ?- -.fil - %& (page-to-weft p.fil) - %| (lobe-to-weft p.fil) + %& (page-to-waft p.fil) + %| (lobe-to-waft p.fil) == == :: - ++ lobe-to-weft + ++ lobe-to-waft |= =lobe - ^- weft + ^- waft =/ peg=(unit page) (~(get by lat.ran) lobe) ?~ peg ~|([%sys-kelvin-tombstoned syd] !!) - (page-to-weft u.peg) + (page-to-waft u.peg) :: - ++ page-to-weft + ++ page-to-waft |= =page - ^- weft + ^- waft ?+ p.page ~|(clay-bad-kelvin-mark/p.page !!) - %kelvin ;;(weft q.page) - %mime - =+ ;;(=mime q.page) - !<(weft (slap !>(~) (ream q.q.mime))) + %kelvin ;;(waft q.page) + %mime (cord-to-waft q.q:;;(mime q.page)) == -- :: @@ -2034,7 +2121,8 @@ |= [prefix=@tD paths=(set path)] %+ turn ~(tap in paths) |= =path - [u.hun %give %note prefix (path-to-tank path)] + ^- move + [u.hun %pass /note %d %text prefix ' ' ~(ram re (path-to-tank path))] :: ++ path-to-tank |= =path @@ -2124,6 +2212,16 @@ -- -- :: + :: [goad] Try to revive desk, but if it fails crash the event. + :: + ++ take-park-held + |= err=(unit tang) + ^+ ..park + ?^ err + ((slog leaf+"clay: desk {} failed to unsuspend" u.err) ..park) + =. liv.dom %live + goad + :: :: We always say we're merging from 'ali' to 'bob'. The basic steps, :: not all of which are always needed, are: :: @@ -2143,9 +2241,9 @@ |= [bas=beak con=(list [beak germ])] ^- melt :+ bas con - %- ~(gas by *(map beak (unit dome:clay))) - :- [bas *(unit dome:clay)] - (turn con |=(a=[beak germ] [-.a *(unit dome:clay)])) + %- ~(gas by *(map beak (unit domo))) + :- [bas *(unit domo)] + (turn con |=(a=[beak germ] [-.a *(unit domo)])) :: ++ start-fuse |= [bas=beak con=(list [beak germ])] @@ -2168,7 +2266,7 @@ =/ discarded=tang %+ turn ~(tap in sto.fiz) - |= [k=beak v=(unit dome:clay)] + |= [k=beak v=(unit domo)] ^- tank =/ received=tape ?~(v "missing" "received") leaf+"{<(en-beam k ~)>} {received}" @@ -2195,17 +2293,17 @@ ((slog [leaf+"clay: got strange fuse response {}"]~) ..take-fuse) =. fiz :+ bas.fiz con.fiz - (~(put by sto.fiz) bec `!<(dome:clay q.r.u.riot)) + (~(put by sto.fiz) bec `!<(domo q.r.u.riot)) =/ all-done=flag %- ~(all by sto.fiz) - |= res=(unit dome:clay) + |= res=(unit domo) ^- flag !=(res ~) ?. all-done ..take-fuse =| rag=rang =/ clean-state ..take-fuse - =/ initial-dome=dome:clay (need (~(got by sto.fiz) bas.fiz)) + =/ initial-dome=domo (need (~(got by sto.fiz) bas.fiz)) =/ next-yaki=yaki (~(got by hut.ran) (~(got by hit.initial-dome) let.initial-dome)) =/ parents=(list tako) ~[(~(got by hit.initial-dome) let.initial-dome)] @@ -2214,9 +2312,9 @@ ^+ ..take-fuse ?~ merges =. ..take-fuse (done-fuse clean-state %& ~) - (park | [%| next-yaki(p (flop parents))] rag) + (park | & [%| next-yaki(p (flop parents))] rag) =/ [bec=beak g=germ] i.merges - =/ ali-dom=dome:clay (need (~(got by sto.fiz) bec)) + =/ ali-dom=domo (need (~(got by sto.fiz) bec)) =/ result (merge-helper p.bec q.bec g ali-dom `next-yaki) ?- -.result %| @@ -2282,10 +2380,10 @@ ^+ ..merge ?~ riot (done %| %ali-unavailable ~[>[ali-ship ali-desk germ]<]) - =/ ali-dome=dome:clay + =/ ali-dome=domo ?: &(?=(@ -.q.q.r.u.riot) !=(~ -.q.q.r.u.riot)) - !<(dome:clay q.r.u.riot) - +:!<([* dome:clay] q.r.u.riot) + !<(domo q.r.u.riot) + +:!<([* domo] q.r.u.riot) =/ result=(each (unit merge-result) (pair term tang)) (merge-helper ali-ship ali-desk germ ali-dome ~) ?- -.result @@ -2295,13 +2393,13 @@ ?~ mr (done %& ~) =. ..merge (done %& conflicts.u.mr) - (park | new.u.mr ~ lat.u.mr) + (park | & new.u.mr ~ lat.u.mr) == :: +$ merge-result [conflicts=(set path) new=yoki lat=(map lobe page)] :: ++ merge-helper - |= [=ali=ship =ali=desk =germ ali-dome=dome:clay next-yaki=(unit yaki)] + |= [=ali=ship =ali=desk =germ ali-dome=domo next-yaki=(unit yaki)] ^- (each (unit merge-result) [term tang]) |^ ^- (each (unit merge-result) [term tang]) @@ -2866,6 +2964,11 @@ :: :: Emit update to unix sync :: + :: [ergo] Must be called any time the set of files changes that must + :: be mirrored to unix. +want-mime may optionally be used to cheaply + :: check if a version of a desk is mirrored to unix (and so +ergo + :: must be called). + :: ++ ergo |= [yon=aeon mim=(map path (unit mime))] ^+ ..park @@ -2907,7 +3010,7 @@ %- (slog >%unknown-case< >[her syd case spur]< ~) ..mount =/ for-yon ?:(=(let.dom u.yon) 0 u.yon) - =. mon + =. mon :: [ergo] (~(put by mon) pot [her syd ud+for-yon] spur) =/ =yaki (~(got by hut.ran) (~(got by hit.dom) u.yon)) =/ files (~(run by q.yaki) |=(=lobe |+lobe)) @@ -2924,7 +3027,7 @@ |= [pot=term =case =spur] ^+ ..unmount ?> ?=(^ hez.ruf) - =. mon (~(del by mon) pot) + =. mon (~(del by mon) pot) :: [ergo] =? mim.dom !(want-mime 0) ~ (emit u.hez.ruf %give %ogre pot) :: @@ -2960,7 +3063,7 @@ . (emit hen %give %done ~) :: - ?- -.rit + ?- -.rit :: [wake] <> %r wake(per (put-perm per pax red.rit)) %w wake(pew (put-perm pew pax wit.rit)) %rw wake(per (put-perm per pax red.rit), pew (put-perm pew pax wit.rit)) @@ -2973,9 +3076,11 @@ :: :: Remove a group from all rules. :: + :: [wake] < + :: ++ forget-crew |= nom=@ta - %= +> + %= +> :: [wake] < +call per (forget-crew-in nom per) pew (forget-crew-in nom pew) == @@ -2986,6 +3091,60 @@ |= r=rule r(who (~(del in who.r) |+nom)) :: + ++ set-rein :: [goad] < + |= [ren=(map dude:gall ?)] + ^+ ..park + ..park(ren.dom ren) + :: + ++ set-zest :: [goad] < + |= liv=zest + =? liv =(%base syd) %live + ..park(liv.dom liv) + :: + ++ rise :: [goad] < + |= [=dude:gall on=(unit ?)] + ?< =(%base syd) + %_ ..park + ren.dom + ?~ on + (~(del by ren.dom) dude) + (~(put by ren.dom) dude u.on) + == + :: + ++ stay + |= ver=(unit weft) + ^+ ..park + =. wic.dom :: [tare] <> + ?~ ver + ~ + (~(del by wic.dom) u.ver) + tare + :: + :: Try to apply highest-versioned %base commit-in-waiting + :: + :: [wick] Must be called whenever we might have unblocked a kelvin + :: upgrade. This is move-order agnostic because it defers the + :: upgrade into a new event. + :: + ++ wick + ^+ ..park + (emit hen %pass /wick %b %wait now) + :: + ++ take-wick + |= err=(unit tang) + ^+ ..park + ?^ err + ((slog leaf+"clay: failed to upgrade kelvin (wick)" u.err) ..park) + ?> ?=(%base syd) + =/ wis=(list [weft =yoki]) + %+ sort ~(tap by wic.dom) + |= [a=[weft yoki] b=[weft yoki]] + (gth num.a num.b) + =. wis (skip wis |=([[* a=@ud] *] (gte a zuse))) + ?~ wis :: Every commit bottoms out here ? + ..park + (park | & yoki.i.wis *rang) + :: :: Cancel a request. :: :: For local requests, we just remove it from `qyx`. For foreign requests, @@ -3044,7 +3203,7 @@ :: responses. For %x, we call ++validate-x to validate the type of :: the response. For %y, we coerce the result to an arch. :: - ++ take-foreign-answer :: external change + ++ take-foreign-answer :: external change |= [inx=@ud rut=(unit rand)] ^+ +> ?> ?=(^ ref) @@ -3056,7 +3215,7 @@ ?~ rut :: nothing here, so cache that :: - %_ wake + %_ wake :: [wake] <> haw.u.ref ?. ?=(%sing -.rav) haw.u.ref (~(put by haw.u.ref) mood.rav ~) @@ -3064,7 +3223,7 @@ |^ =/ result=(unit cage) (validate u.rut) =/ =mood [p.p q.p q]:u.rut - =: haw.u.ref (~(put by haw.u.ref) mood result) + =: haw.u.ref (~(put by haw.u.ref) mood result) :: [wake] <> bom.u.ref (~(del by bom.u.ref) inx) fod.u.ref (~(del by fod.u.ref) hen) == @@ -3260,7 +3419,7 @@ ?~ next ..abet(done &) =. ..abet =>((apply-foreign-update u.next) ?>(?=(~ need.sat) .)) - =. ..foreign-update =<(?>(?=(^ ref) .) wake) + =. ..foreign-update =<(?>(?=(^ ref) .) wake) :: [wake] > $ :: This used to be what always removed an item from `need`. Now, :: we remove in +take-backfill, but in the meantime we could have @@ -3291,6 +3450,8 @@ :: store, then we update the map of aeons to commits and the latest :: aeon. :: + :: [wake] < + :: ++ apply-foreign-update |= =nako ^+ ..abet @@ -3322,7 +3483,15 @@ :: =/ =rave rave:(~(got by bom.u.ref) inx) ?> ?=(%many -.rave) - =: let.dom (max let.nako let.dom) + :: [ergo] We do not call +ergo here, but if we wanted to support + :: keeping a foreign mounted desk up-to-date, this would open + :: that invariant. + :: + :: [goad] Same for +goad -- if we supported running agents off + :: foreign desks at an up-to-date revision, we would need to call + :: +goad here. + :: + =: let.dom (max let.nako let.dom) :: [wake] < +work hit.dom hit hut.ran hut :: Is this correct? Seeems like it should only go to `to` if @@ -3395,7 +3564,7 @@ :: ++ send-cards |= [cards=(list card) ducts=(set duct)] - ^+ ..wake + ^+ ..park %- emil %- zing %+ turn cards @@ -3407,6 +3576,18 @@ :: Loop through open subscriptions and check if we can fill any of :: them. :: + :: [wake] This must be called any time something might have changed + :: which fills a subscription or changes the set of subscriptions. + :: + :: It is safe to call this multiple times, because it updates the + :: subscription state to reflect that it's responded. Usually this + :: means deleting the subscription, but %many can respond multiple + :: times. + :: + :: One way of describing this invariant is that if you called +wake + :: on every desk at the end of every +call/+take, it would always + :: no-op. + :: ++ wake ^+ . =/ subs=(list [=wove ducts=(set duct)]) ~(tap by qyx) @@ -3821,7 +4002,7 @@ (build-cast:(aeon-ford aeon) [i i.t]:path) :_(..park [~ ~ %cast vase]) :: - :: XX move to +read-buc + :: TODO move to +read-buc :: ++ read-d !. @@ -3937,8 +4118,36 @@ :: +read-s: produce miscellaneous :: ++ read-s - |= [yon=aeon pax=path] + |= [yon=aeon pax=path =case] ^- (unit (unit cage)) + ?: ?=([%subs ~] pax) + ?. =([%da now] case) ~ + =| sus=(set ship) + =/ doj=(unit dojo) (~(get by dos.rom) syd) + ?~ doj + ``noun+!>(sus) + =/ wos ~(tap in ~(key by qyx.u.doj)) + |- + ?~ wos + ``noun+!>(sus) + ?~ for.i.wos + $(wos t.wos) + %= $ + wos t.wos + sus (~(put in sus) ship.u.for.i.wos) + == + ?: ?=([%bloc ~] pax) + :^ ~ ~ %noun + :- -:!>(*(map lobe page)) + ^- (map lobe page) + %- %~ rep in + %- reachable-takos + (~(got by hit.dom) let.dom) + |= [t=tako o=(map lobe page)] + %- ~(gas by o) + %+ turn + ~(val by q:(~(got by hut.ran) t)) + |=(l=lobe [l (~(got by lat.ran) l)]) ?. ?=([@ * *] pax) `~ ?+ i.pax `~ @@ -3982,7 +4191,7 @@ %late !! :: handled in +aver %case !! :: handled in +aver %base-tako - :: XX this ignores the given beak + :: TODO this ignores the given beak :: maybe move to +aver? ?> ?=(^ t.t.pax) :^ ~ ~ %uvs !> @@ -4067,17 +4276,17 @@ :: ++ read-v |= [yon=aeon pax=path] - ^- (unit (unit [%dome (hypo dome:clay)])) + ^- (unit (unit [%dome (hypo domo)])) ?: (lth yon let.dom) - :* ~ ~ %dome -:!>(*dome:clay) - ^- dome:clay + :* ~ ~ %dome -:!>(*domo) + ^- domo :* let=yon hit=(molt (skim ~(tap by hit.dom) |=([p=@ud *] (lte p yon)))) lab=(molt (skim ~(tap by lab.dom) |=([* p=@ud] (lte p yon)))) == == ?: (gth yon let.dom) ~ - ``[%dome -:!>(*dome:clay) [let hit lab]:dom] + ``[%dome -:!>(*domo) [let hit lab]:dom] :: :: Gets all cases refering to the same revision as the given case. :: @@ -4176,7 +4385,6 @@ [~ ..park] :: virtualize to catch and produce deterministic failures :: - !: |^ =/ res (mule |.(read)) ?: ?=(%& -.res) p.res %. [[~ ~] ..park] @@ -4193,7 +4401,7 @@ %f (read-f yon path.mun) %p [(read-p path.mun) ..park] %r (read-r yon path.mun) - %s [(read-s yon path.mun) ..park] + %s [(read-s yon path.mun case.mun) ..park] %t [(read-t yon path.mun) ..park] %u [(read-u yon path.mun) ..park] %v [(read-v yon path.mun) ..park] @@ -4205,6 +4413,246 @@ -- -- -- +:: userspace agent management +:: +++ lu + |= [now=@da rof=roof hen=duct raft] + =* ruf |3.+<.$ + =| mow=(list move) + |% + ++ abet + ^- [(list move) raft] + [(flop mow) ruf] + :: + ++ emit + |= mof=move + %_(+> mow [mof mow]) + :: + ++ emil + |= mof=(list move) + %_(+> mow (weld (flop mof) mow)) + :: +ford: init ford + :: + ++ ford + |= [her=ship syd=desk yon=(unit aeon)] + =/ den ((de now rof hen ruf) her syd) + (aeon-ford:den ?~(yon let.dom:den u.yon)) + :: +wrap: save ford cache + :: + ++ wrap + |* [her=ship syd=desk yon=(unit aeon) res=* =state:ford:fusion] + =^ moves ruf + =/ den ((de now rof hen ruf) her syd) + abet:+:(aeon-flow:den ?~(yon let.dom:den u.yon) res cache.state &2.state) + [res (emil moves)] + :: + ++ trace + |= [pri=@ print=(trap tape)] + ?: (lth veb.bug pri) + same + (slog leaf+"goad: {(print)}" ~) + :: +goad: emit %load move for all desks, applying $rein's + :: + :: [goad] Must be called any time the set of running agents changes. + :: This is whenever an agent is started, stopped, or updated. + :: + :: This is not move-order agnostic -- you must be careful of + :: reentrancy as long as arvo's move order is depth-first. + :: + :: [tare] > + :: + ++ goad + ^+ ..abet + =^ sat=(list [=desk =bill]) ..abet + =/ desks=(list desk) ~(tap in ~(key by dos.rom)) + |- ^- [(list [desk bill]) _..abet] + ?~ desks + [~ ..abet] + =/ den ((de now rof hen ruf) our i.desks) + ?. =(%live liv.dom.den) + %- (trace 2 |.("{} is not live")) + $(desks t.desks) + =^ res den (aver:den ~ %x da+now /desk/bill) + =. ruf +:abet:den + ?. ?=([~ ~ *] res) + $(desks t.desks) + =/ bill ~| [%building-bill i.desks] !<(bill q.u.u.res) + =/ rid (override bill ren.dom.den) + %- %+ trace 2 |. + "{} has bill {} and rein {}, so {}" + =^ sats ..abet $(desks t.desks) + [[[i.desks rid] sats] ..abet] + :: + =. sat (apply-precedence sat) + =+ ?: (lth veb.bug 1) ~ + %. ~ %- slog + %+ turn sat + |= [=desk =bill] + leaf+"goad: output: {}: {}" + =^ agents ..abet (build-agents sat) + :: TODO: enable if we can reduce memory usage + :: + :: =. ..abet + :: (build-marks (turn (skip sat |=([desk =bill] =(bill ~))) head)) + :: + =. ..abet tare :: [tare] > + (emit hen %pass /lu/load %g %load agents) + :: +override: apply rein to bill + :: + ++ override + |= [duz=bill ren=(map dude:gall ?)] + ^- bill + =. duz + %+ skip duz + |= =dude:gall + =(`| (~(get by ren) dude)) + :: + =/ dus (sy duz) + =. duz + %+ weld duz + %+ murn ~(tap by ren) + |= [=dude:gall on=?] + ?: &(?=(%& on) !(~(has in dus) dude)) + `u=dude + ~ + duz + :: +apply-precedence: resolve conflicts between $bill's + :: + :: policy is to crash if multiple desks are trying to run the same + :: agent. + :: + ++ apply-precedence + |= sat=(list [=desk =bill]) + ^+ sat + :: sort desks in alphabetical order with %base first + :: + =. sat (sort sat sort-desks) + :: for each desk + :: + =| done=(set dude:gall) + |- ^+ sat + ?~ sat + ~ + :: for each agent + :: + =/ bil bill.i.sat + =^ this done + |- ^- [bill (set dude:gall)] + ?~ bil + [~ done] + :: + ?: (~(has in done) i.bil) + ~> %mean.(cat 3 'clay: cannot run app from two desks: %' i.bil) + !! + =. done (~(put in done) i.bil) + =^ next done $(bil t.bil) + [[i.bil next] done] + [[desk.i.sat this] $(sat t.sat)] + :: + ++ sort-desks + |= [a=[=desk *] b=[=desk *]] + ^- ? + ?: =(%base desk.a) & + ?: =(%base desk.b) | + (aor desk.a desk.b) + :: build-file for each dude + :: + ++ build-agents + |= sat=(list [=desk =bill]) + ^- [load:gall _..abet] + =| lad=load:gall + |- ^- [load:gall _..abet] + ?~ sat + [lad ..abet] + =/ f (ford our desk.i.sat ~) + =^ new=load:gall ..abet + %- wrap :^ our desk.i.sat ~ + |- ^- [load:gall state:ford:fusion] + ?~ bill.i.sat + [~ nub.f] + =^ =vase nub.f (build-file:f /app/[i.bill.i.sat]/hoon) + =/ agent ~| [%building-app bill.i.sat] !<(agent:gall vase) + =^ lid nub.f $(bill.i.sat t.bill.i.sat) + [[[i.bill.i.sat [our desk.i.sat da+now] agent] lid] nub.f] + =. lad (weld lad new) + $(sat t.sat) + :: build-dais for each mark + :: + ++ build-marks + |= desks=(list desk) + ^+ ..abet + ?~ desks + ..abet + =/ f (ford our i.desks ~) + =^ null ..abet + %- wrap :^ our i.desks ~ + =^ marks=(list mark) nub.f + =/ pax=path / + |- ^- [(list mark) _nub.f] + =/ den ((de now rof hen ruf) our i.desks) + =^ res den (aver:den ~ %y da+now mar+pax) + ?. ?=([~ ~ *] res) + [~ nub.f] + =/ arch ~| [%building-arch i.desks] !<(arch q.u.u.res) + =/ m1=(list mark) + ?. ?& ?=(^ fil.arch) + ?=(^ pax) + =(/hoon (slag (dec (lent pax)) `path`pax)) + == + ~ + :_ ~ + ?~ t.pax + '' + |- ^- mark + ?~ t.t.pax + i.pax + (rap 3 i.pax '-' $(pax t.pax) ~) + :: + =^ m2 nub.f + |- ^- [(list mark) _nub.f] + ?~ dir.arch + [~ nub.f] + =^ n1 nub.f ^$(pax (weld pax /[p.n.dir.arch])) + =^ n2 nub.f $(dir.arch l.dir.arch) + =^ n3 nub.f $(dir.arch r.dir.arch) + [:(weld n1 n2 n3) nub.f] + [(weld m1 m2) nub.f] + :: + |- ^- [~ state:ford:fusion] + ?~ marks + [~ nub.f] + =^ =dais nub.f (build-dais:f i.marks) + $(marks t.marks) + $(desks t.desks) + :: + ++ tore + ^- rock:tire + %- ~(run by dos.rom) + |= =dojo + [liv.dom.dojo ~(key by wic.dom.dojo)] + :: + :: [tare] Must be called any time the zest or commits-in-waiting + :: might have changed for a desk. +goad calls this uncondtionally, + :: but if you're not calling +goad, you may need to call this. + :: + ++ tare + ?: =(~ tyr) + ..abet + =/ tor tore + =/ waves=(list wave:tire) (walk:tire tur tor) + ?~ waves + ..abet + =. tur tor + %- emil + %- zing + %+ turn ~(tap in tyr) + |= =duct + ^- (list move) + %+ turn waves + |= =wave:tire + ^- move + [duct %give %tire %| wave] + -- -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 4cA, filesystem vane @@ -4220,7 +4668,7 @@ :: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: =| :: instrument state - $: ver=%12 :: vane version + $: ver=%13 :: vane version ruf=raft :: revision tree == :: |= [now=@da eny=@uvJ rof=roof] :: current invocation @@ -4257,7 +4705,7 @@ ?~ des [[[hen %give %done ~] mos] ..^^$] =/ den ((de now rof hen ruf) our i.des) =^ mor ruf - =< abet:wake + =< abet:wake :: [wake] > ?: ?=(^ cew.req) den (forget-crew:den nom.req) $(des t.des, mos (weld mos mor)) @@ -4337,7 +4785,9 @@ :: %merg :: direct state up ?: =(%$ des.req) - ~&(%merg-no-desk !!) + ~|(%merg-no-desk !!) + ?. ((sane %tas) des.req) + ~|([%merg-bad-desk-name des.req] !!) =^ mos ruf =/ den ((de now rof hen ruf) our des.req) abet:(start-merge:den her.req dem.req cas.req how.req) @@ -4345,7 +4795,9 @@ :: %fuse ?: =(%$ des.req) - ~&(%fuse-no-desk !!) + ~|(%fuse-no-desk !!) + ?. ((sane %tas) des.req) + ~|([%fuse-bad-desk-name des.req] !!) =^ mos ruf =/ den ((de now rof hen ruf) our des.req) abet:(start-fuse:den bas.req con.req) @@ -4391,9 +4843,11 @@ [(weld moves-1 moves-2) ..^^$] :: %park + ?. ((sane %tas) des.req) + ~|([%park-bad-desk des.req] !!) =^ mos ruf =/ den ((de now rof hen ruf) our des.req) - abet:(park:den | [yok ran]:req) + abet:(park:den | & [yok ran]:req) [mos ..^$] :: %pork @@ -4401,41 +4855,76 @@ =. pud.ruf ~ =^ mos ruf =/ den ((de now rof hen ruf) our syd) - abet:(park:den & yoki *rang) + abet:(park:den & & yoki *rang) [mos ..^$] + :: + %prep + [~ ..^$(lat.ran.ruf (~(uni by lat.req) lat.ran.ruf))] :: %perm =^ mos ruf =/ den ((de now rof hen ruf) our des.req) abet:(perm:den pax.req rit.req) [mos ..^$] + :: + %rein + =^ m1 ruf + =/ den ((de now rof hen ruf) our des.req) + abet:(set-rein:den ren.req) + =^ m2 ruf abet:goad:(lu now rof hen ruf) :: [goad] > + [(weld m1 m2) ..^$] :: %stir - ?+ arg.req ~|(%strange-stir !!) - [%verb @] [~ ..^$(veb.bug.ruf +.arg.req)] - [%mass @] [~ ..^$(mas.bug.ruf +.arg.req)] + ?+ arg.req ~|(%strange-stir !!) + [%verb @] [~ ..^$(veb.bug.ruf +.arg.req)] + [%mass @] [~ ..^$(mas.bug.ruf +.arg.req)] + [%goad ~] + =^ mos ruf abet:goad:(lu now rof hen ruf) + [mos ..^$] + :: + [%rise =desk =dude:gall on=(unit ?)] + =^ m1 ruf + =/ den ((de now rof hen ruf) our desk.arg.req) + abet:(rise:den dude.arg.req on.arg.req) + =^ m2 ruf abet:goad:(lu now rof hen ruf) :: [goad] < + [(weld m1 m2) ..^$] + :: + [%stay =desk ver=(unit weft)] + =^ moves ruf + =/ den ((de now rof hen ruf) our desk.arg.req) + abet:(stay:den ver.arg.req) + [moves ..^$] + :: + [%trim ~] + =: fad.ruf *flow + dos.rom.ruf + %- ~(run by dos.rom.ruf) + |= =dojo + dojo(fod.dom *flue) + :: + hoy.ruf + %- ~(run by hoy.ruf) + |= =rung + %= rung + rus + %- ~(run by rus.rung) + |= =rede + rede(fod.dom *flue) + == + == + [~ ..^$] == :: - %tomb (tomb-clue:tomb hen clue.req) - %trim - =: fad.ruf *flow - dos.rom.ruf - %- ~(run by dos.rom.ruf) - |= =dojo - dojo(fod.dom *flue) - :: - hoy.ruf - %- ~(run by hoy.ruf) - |= =rung - %= rung - rus - %- ~(run by rus.rung) - |= =rede - rede(fod.dom *flue) - == - == - [~ ..^$] + %tire + ?~ p.req + =. tyr.ruf (~(del in tyr.ruf) hen) + `..^$ + =. tyr.ruf (~(put in tyr.ruf) hen) + :_ ..^$ + [hen %give %tire %& tore:(lu now rof hen ruf)]~ :: + %tomb (tomb-clue:tomb hen clue.req) + %trim [~ ..^$] %vega :: wake all desks, then send pending notifications :: @@ -4478,6 +4967,21 @@ cancel-request:den (start-request:den for u.q.rif) [mos ..^$] + :: + %wick + =^ mos ruf + =/ den ((de now rof hen ruf) our %base) + abet:wick:den :: [wick] + [mos ..^$] + :: + %zest + =^ m1 ruf + =/ den ((de now rof hen ruf) our des.req) + :: [wick] could be suspending the last blocking desk + :: + abet:wick:(set-zest:den liv.req) + =^ m2 ruf abet:goad:(lu now rof hen ruf) + [(weld m1 m2) ..^$] :: %plea =* her ship.req @@ -4503,7 +5007,8 @@ ++ load => |% +$ raft-any - $% [%12 raft-12] + $% [%13 raft-13] + [%12 raft-12] [%11 raft-11] [%10 raft-10] [%9 raft-9] @@ -4511,16 +5016,59 @@ [%7 raft-7] [%6 raft-6] == - +$ raft-12 raft - +$ raft-11 - $: rom=room - hoy=(map ship rung) + +$ raft-13 raft + +$ raft-12 + $: rom=room-11 + hoy=(map ship rung-11) ran=rang fad=flow mon=(map term beam) hez=(unit duct) cez=(map @ta crew) pud=(unit [=desk =yoki]) + bug=[veb=@ mas=@] + == + +$ raft-11 + $: rom=room-11 + hoy=(map ship rung-11) + ran=rang + fad=flow + mon=(map term beam) + hez=(unit duct) + cez=(map @ta crew) + pud=(unit [=desk =yoki]) + == + +$ room-11 + $: hun=duct + dos=(map desk dojo-11) + == + +$ dojo-11 + $: qyx=cult + dom=dome-11 + per=regs + pew=regs + fiz=melt + == + +$ dome-11 + $: let=aeon + hit=(map aeon tako) + lab=(map @tas aeon) + tom=(map tako norm) + nor=norm + mim=(map path mime) + fod=flue + == + +$ rung-11 + $: rus=(map desk rede-11) + == + +$ rede-11 + $: lim=@da + ref=(unit rind) + qyx=cult + dom=dome-11 + per=regs + pew=regs + fiz=melt == +$ raft-10 $: rom=room-10 @@ -4740,7 +5288,8 @@ =? old ?=(%9 -.old) 10+(raft-9-to-10 +.old) =? old ?=(%10 -.old) 11+(raft-10-to-11 +.old) =? old ?=(%11 -.old) 12+(raft-11-to-12 +.old) - ?> ?=(%12 -.old) + =? old ?=(%12 -.old) 13+(raft-12-to-13 +.old) + ?> ?=(%13 -.old) ..^^$(ruf +.old) :: +raft-6-to-7: delete stale ford caches (they could all be invalid) :: @@ -4831,7 +5380,7 @@ dos.rom %- ~(run by dos.rom.raf) |= =dojo-10 - ^- dojo + ^- dojo-11 %= dojo-10 fiz *melt qyx (cult-10-to-cult qyx.dojo-10) @@ -4852,7 +5401,7 @@ |= =rung-10 %- ~(run by rus.rung-10) |= =rede-10 - ^- rede + ^- rede-11 %= rede-10 fiz *melt qyx (cult-10-to-cult qyx.rede-10) @@ -4957,6 +5506,46 @@ |= raf=raft-11 ^- raft-12 raf(pud [pud.raf 0 0]) + :: +raft-12-to-13: + :: + :: add .liv and .ren to $dome's + :: add .tyr and .tur to $raft + :: + ++ raft-12-to-13 + |= raf=raft-12 + |^ ^- raft-13 + :: turn on %base desk :: TODO handle other desks somehow + :: :: maybe have kiln send one-time list of desks + :: + =; rof + rof(dos.rom (~(jab by dos.rom.rof) %base |=(d=dojo d(liv.dom %live)))) + ^- raft-13 + %= raf + dos.rom (~(run by dos.rom.raf) dojo-11-to-13) + hoy (~(run by hoy.raf) rung-11-to-13) + |6 [&7.raf ~ ~ |7.raf] + == + :: + ++ dojo-11-to-13 + |= doj=dojo-11 + ^- dojo + doj(dom (dome-11-to-13 dom.doj)) + :: + ++ rung-11-to-13 + |= rug=rung-11 + ^- rung + rug(rus (~(run by rus.rug) rede-11-to-13)) + :: + ++ rede-11-to-13 + |= red=rede-11 + ^- rede + red(dom (dome-11-to-13 dom.red)) + :: + ++ dome-11-to-13 + |= dom=dome-11 + ^- dome + dom(fod [fod.dom ~ liv=%dead ren=~]) + -- -- :: ++ scry :: inspect @@ -5005,7 +5594,11 @@ %sweep ``[%sweep !>(sweep)] %rang ``[%rang !>(ran.ruf)] %tomb ``[%flag !>((tomb t.path))] + %cult ``[%cult !>((cult t.path))] + %flow ``[%flow !>(fad.ruf)] %domes domes + %tire ``[%tire !>(tore:(lu now rof *duct ruf))] + %tyre ``[%tyre !>(tyr.ruf)] == :: ++ domes @@ -5013,21 +5606,37 @@ %- ~(gas by *cone) %+ turn ~(tap by dos.rom.ruf) |= [=desk =dojo] - [[our desk] [[let hit lab] tom nor]:dom.dojo] + [[our desk] dom.dojo] =. domes %- ~(uni by domes) %- ~(gas by *cone) - ^- (list [[ship desk] dome:clay (map tako norm) norm]) + ^- (list [[ship desk] dome]) %- zing - ^- (list (list [[ship desk] dome:clay (map tako norm) norm])) + ^- (list (list [[ship desk] dome])) %+ turn ~(tap by hoy.ruf) |= [=ship =rung] - ^- (list [[^ship desk] dome:clay (map tako norm) norm]) + ^- (list [[^ship desk] dome]) %+ turn ~(tap by rus.rung) |= [=desk =rede] - [[ship desk] [[let hit lab] tom nor]:dom.rede] + [[ship desk] dom.rede] ``[%domes !>(`cone`domes)] :: + ++ cult + |= =path + ^- (set [@p rave]) + %- %~ run in + %~ key by + ?~ path *^cult + qyx:(~(gut by dos.rom.ruf) i.path *dojo) + |= wove + :- ship:(fall for [ship=our @ud]) + ?- -.rove + %sing rove + %next [%next mood.rove] + %mult [%mult mool.rove] + %many [%many [track moat]:rove] + == + :: :: True if file is accessible :: ++ tomb @@ -5096,19 +5705,24 @@ `u=[need have leak] -- :: -:: We clear the ford cache by replacing it with its bunt as a literal. -:: This nests within +flow without reference to +type, +hoon, or -:: anything else in the sample of cache objects. Otherwise we would be -:: contravariant in the those types, which makes them harder to change. +:: We clear the ford cache by replacing it with its bunt as a literal, +:: with its singleton type. This nests within +flow and +flue without +:: reference to +type, +hoon, or anything else in the sample of cache +:: objects. Otherwise we would be contravariant in those types, which +:: makes them harder to change. :: ++ stay + =/ flu [~ ~] + =+ `flue`flu + =/ flo ~ + =+ `flow`flo :- ver %= ruf - fad ~ + fad flo dos.rom %- ~(run by dos.rom.ruf) |= =dojo - dojo(fod.dom `flue`[~ ~]) + dojo(fod.dom flu) :: hoy %- ~(run by hoy.ruf) @@ -5117,7 +5731,7 @@ rus %- ~(run by rus.rung) |= =rede - rede(fod.dom `flue`[~ ~]) + rede(fod.dom flu) == == :: @@ -5127,14 +5741,12 @@ ^+ [*(list move) ..^$] ?^ dud ~|(%clay-take-dud (mean tang.u.dud)) - ?: ?=([%dist *] tea) - ?: ?=(%onto +<.hin) - [~ ..^$] + ?: ?=([%lu %load *] tea) ?> ?=(%unto +<.hin) ?> ?=(%poke-ack -.p.hin) ?~ p.p.hin [~ ..^$] - =+ ((slog 'clay: dist migration failed' u.p.p.hin) ~) + =+ ((slog 'clay: reloading agents failed' u.p.p.hin) ~) !! :: ?: ?=([%merge @ @ @ @ ~] tea) @@ -5144,7 +5756,7 @@ =* ali-desk i.t.t.t.tea =/ germ (germ i.t.t.t.t.tea) =^ mos ruf - =/ den ((de now rof hen ruf) our i.t.tea) + =/ den ((de now rof hen ruf) our syd) abet:(merge:den ali-ship ali-desk germ p.hin) [mos ..^$] :: @@ -5156,11 +5768,27 @@ =/ ali-case (rash i.t.t.t.t.tea nuck:so) ?> ?=([%$ *] ali-case) =^ mos ruf - =/ den ((de now rof hen ruf) our i.t.tea) + =/ den ((de now rof hen ruf) our syd) abet:(take-fuse:den [ali-ship ali-desk (case +.ali-case)] p.hin) [mos ..^$] :: + ?: ?=([%park-held @ ~] tea) + ?> ?=(%wake +<.hin) + =* syd i.t.tea + =^ mos ruf + =/ den ((de now rof hen ruf) our syd) + abet:(take-park-held:den error.hin) + [mos ..^$] + :: + ?: ?=([%wick ~] tea) + ?> ?=(%wake +<.hin) + =^ mos ruf + =/ den ((de now rof hen ruf) our %base) + abet:(take-wick:den error.hin) + [mos ..^$] + :: ?: ?=([%foreign-warp *] tea) + ?: ?=(%wris +<.hin) ~& %dropping-wris `..^$ ?> ?=(%writ +<.hin) :_ ..^$ [hen %give %boon `(unit rand)`(bind `riot`p.hin rant-to-rand)]~ @@ -5289,7 +5917,6 @@ q.p.p.+.hin [~ ..^$] :: - %note [[hen %give +.hin]~ ..^$] %wake :: TODO: handle behn errors :: @@ -5299,6 +5926,8 @@ ?. ?=([%tyme @ @ ~] tea) ~& [%clay-strange-timer tea] [~ ..^$] + :: [wake] when requested time passes, call +wake + :: =/ her (slav %p i.t.tea) =/ syd (slav %tas i.t.t.tea) =^ mos ruf @@ -5310,8 +5939,8 @@ :: %boon !! %lost !! - %onto !! %unto !! + %wris ~& %strange-wris !! %writ %- (slog leaf+"clay: strange writ (expected on upgrade to Fusion)" ~) [~ ..^$] diff --git a/pkg/arvo/sys/vane/dill.hoon b/pkg/arvo/sys/vane/dill.hoon index b5e2df90a..8973a4ac6 100644 --- a/pkg/arvo/sys/vane/dill.hoon +++ b/pkg/arvo/sys/vane/dill.hoon @@ -8,27 +8,24 @@ -- :: => |% :: console protocol +$ axle :: - $: %4 ::TODO replace ducts with session ids :: + $: %7 :: hey=(unit duct) :: default duct - dug=(map duct axon) :: conversations - eye=(jug duct duct) :: outside listeners + dug=(map @tas axon) :: conversations + eye=(jug @tas duct) :: outside observers + ear=(set duct) :: syslog listeners lit=? :: boot in lite mode - $= veb :: vane verbosities - $~ (~(put by *(map @tas log-level)) %hole %soft) :: quiet packet crashes - (map @tas log-level) :: + egg=_| :: see +take, removeme == :: -+$ axon :: dill per duct ++$ axon :: dill session $: ram=term :: console program tem=(unit (list dill-belt)) :: pending, reverse wid=_80 :: terminal width - pos=@ud :: cursor position - see=$%([%lin (list @c)] [%klr stub]) :: current line == :: +$ log-level ?(%hush %soft %loud) :: none, line, full -- => :: |% :: protocol outward +$ mess :: - $% [%dill-belt p=(hypo dill-belt)] :: + $% [%dill-poke p=(hypo poke)] :: == :: +$ move [p=duct q=(wind note gift)] :: local move +$ note :: out request $-> @@ -40,6 +37,7 @@ $> $? %merg :: merge desks %perm :: change permissions %warp :: wait for clay hack + %zest :: == :: task:clay :: == :: @@ -52,10 +50,7 @@ task:dill :: == :: $: %g :: - $> $? %jolt :: - %deal :: - == :: - task:gall :: + $>(%deal task:gall) :: == :: $: %j :: $> $? %dawn :: @@ -71,7 +66,6 @@ == == :: $: %clay :: $> $? %mere :: - %note :: %writ :: == :: gift:clay :: @@ -80,10 +74,7 @@ $>(%blit gift:dill) :: == :: $: %gall :: - $> $? %onto :: - %unto :: - == :: - gift:gall :: + $>(%unto gift:gall) :: == == :: :::::::: :: dill tiles -- @@ -93,72 +84,47 @@ |% ++ as :: per cause =| moz=(list move) - |_ [hen=duct axon] + |_ [hen=duct ses=@tas axon] ++ abet :: resolve ^- [(list move) axle] - [(flop moz) all(dug (~(put by dug.all) hen +<+))] + [(flop moz) all(dug (~(put by dug.all) ses +<+>))] :: ++ call :: receive input |= kyz=task ^+ +> ?+ -.kyz ~& [%strange-kiss -.kyz] +> - %flow +> - %harm +> - %hail (send %hey ~) - %text (from %out (tuba p.kyz)) - %crud :: (send `dill-belt`[%cru p.kyz q.kyz]) - (crud p.kyz q.kyz) - %blew (send %rez p.p.kyz q.p.kyz) - %heft (pass /whey %$ whey/~) - %meld (dump kyz) - %pack (dump kyz) - %crop (dump trim+p.kyz) - %verb (pass /verb %$ kyz) - %noop +> - %belt - %- send - ::TMP forwards compatibility with next-dill - :: - ?@ p.kyz [%txt p.kyz ~] - ?: ?=(%hit -.p.kyz) [%txt ~] - ?. ?=(%mod -.p.kyz) p.kyz - =/ =@c - ?@ key.p.kyz key.p.kyz - ?:(?=(?(%bac %del %ret) -.key.p.kyz) `@`-.key.p.kyz ~-) - ?:(?=(%met mod.p.kyz) [%met c] [%ctl c]) + %hail (send %hey ~) + %belt (send `dill-belt`p.kyz) + %blew (send(wid p.p.kyz) %rez p.p.kyz q.p.kyz) + %heft (pass /whey %$ whey/~) + %meld (dump kyz) + %pack (dump kyz) + %crop (dump trim+p.kyz) + %verb (pass /verb %$ kyz) + :: + %seat + %^ pass /seat %g + :+ %deal [our our] + [%hood %poke %kiln-install !>([desk.kyz our desk.kyz])] == :: ++ crud - |= [err=@tas tac=(list tank)] - :: unknown errors default to %loud - :: - =/ lev=log-level (~(gut by veb.all) err %loud) - :: apply log level for this error tag - :: - =/ =wall - ?- lev - %hush ~ - %soft ~["crud: %{(trip err)} event failed"] - %loud :- "crud: %{(trip err)} event failed" - %- zing - %+ turn (flop tac) - |=(a=tank (~(win re a) [0 wid])) - == - |- ^+ +>.^$ - ?~ wall +>.^$ - $(wall t.wall, +>.^$ (from %out (tuba i.wall))) + |= [err=@tas tac=tang] + =- +>.$(moz (weld - moz)) + %+ turn + ~(tap in ear.all) + (late %give %logs %crud err tac) :: ++ dump :: pass down to hey |= git=gift ?> ?=(^ hey.all) +>(moz [[u.hey.all %give git] moz]) :: - ++ done :: return gift + ++ done :: gift to viewers |= git=gift =- +>.$(moz (weld - moz)) %+ turn - :- hen - ~(tap in (~(get ju eye.all) hen)) + ~(tap in (~(get ju eye.all) ses)) |=(=duct [duct %give git]) :: ++ deal :: pass to %gall @@ -172,41 +138,10 @@ ++ from :: receive blit |= bit=dill-blit ^+ +> - ?: ?=(%mor -.bit) - |- ^+ +>.^$ - ?~ p.bit +>.^$ - $(p.bit t.p.bit, +>.^$ ^$(bit i.p.bit)) - ?: ?=(%out -.bit) - %+ done %blit - :~ [%lin p.bit] - [%mor ~] - see - [%hop pos] - == - ?: ?=(%klr -.bit) - %+ done %blit - :~ [%klr p.bit] - [%mor ~] - see - [%hop pos] - == - ?: ?=(%pro -.bit) - =. see [%lin p.bit] - (done %blit [see [%hop pos] ~]) - ?: ?=(%pom -.bit) - ::NOTE treat "styled prompt" without style as plain prompt, - :: to allow rendering by older runtimes - ::TODO remove me once v0.10.9+ has high/guaranteed adoption - :: - ?: (levy p.bit (cork head |*(s=stye =(*stye s)))) - $(bit [%pro (zing (turn p.bit tail))]) - =. see [%klr p.bit] - (done %blit [see [%hop pos] ~]) - ?: ?=(%hop -.bit) - (done(pos p.bit) %blit [bit ~]) ?: ?=(%qit -.bit) (dump %logo ~) - (done %blit [bit ~]) + ::TODO so why is this a (list blit) again? + (done %blit bit ~) :: ++ sponsor ^- ship @@ -221,9 +156,9 @@ ^+ . =/ myt (flop (fall tem ~)) =. tem ~ - =. ..mere (pass / %g %jolt %base ram) + =. ..mere (pass /zest %c %zest %base %live) =. ..mere (show-desk %kids) - =. ..mere drum-watch + =. ..mere (open ~) |- ^+ ..mere ?~ myt ..mere $(myt t.myt, ..mere (send i.myt)) @@ -233,47 +168,41 @@ =. tem `(turn gyl |=(a=gill [%yow a])) (pass / [%c %warp our %base `[%sing %y [%ud 1] /]]) :: + ++ open + |= gyl=(list gill) + ::TODO should allow handlers from non-base desks + ::TODO maybe ensure :ram is running? + =. +> peer + %+ roll gyl + |= [g=gill _..open] + (send [%yow g]) + :: ++ send :: send action |= bet=dill-belt ^+ +> ?^ tem +>(tem `[bet u.tem]) - (deal / [%poke [%dill-belt -:!>(bet) bet]]) + (deal /send/[ses] [%poke [%dill-poke !>([ses bet])]]) :: - ++ drum-watch - (deal / [%watch /drum]) + ++ peer + (deal /peer/[ses] %watch /dill/[ses]) + :: + ++ pull + (deal /peer/[ses] %leave ~) :: ++ show-desk :: permit reads on desk |= des=desk (pass /show [%c %perm des / r+`[%black ~]]) :: - ++ kiln-install - |= [loc=desk =ship rem=desk] - (deal /install %poke %kiln-install !>([loc ship rem])) - :: - ++ kiln-sync - |= [loc=desk =ship rem=desk] - (deal /sync %poke %kiln-sync !>([loc ship rem])) - :: ++ take :: receive |= [tea=wire sih=sign] ^+ +> ?- sih - [%gall %onto *] - :: NOTE effects during initial boot sequence are ignored, - :: so :hood compilation errors will not print; slog if desired - :: - :: ~& [%take-gall-onto +>.sih] - ?- -.+>.sih - %| (crud %onto p.p.+>.sih) - %& (done %blit [%lin (tuba "{}")]~) - == - :: [%gall %unto *] :: ~& [%take-gall-unto +>.sih] ?- -.+>.sih %raw-fact !! - %kick drum-watch + %kick peer %poke-ack ?~(p.p.+>.sih +>.$ (crud %coup u.p.p.+>.sih)) %watch-ack ?~ p.p.+>.sih @@ -285,9 +214,6 @@ +>.$ (from ;;(dill-blit q.q.cage.p.+>.sih)) == - :: - [%clay %note *] - (from %out (tuba p.sih ' ' ~(ram re q.sih))) :: [?(%behn %clay) %writ *] init @@ -302,12 +228,20 @@ == -- :: - ++ ax :: make ++as - |= hen=duct + ++ ax :: make ++as from name + |= [hen=duct ses=@tas] ^- (unit _as) - =/ nux (~(get by dug.all) hen) + =/ nux (~(get by dug.all) ses) ?~ nux ~ - (some ~(. as hen u.nux)) + (some ~(. as hen ses u.nux)) + :: + ++ aw :: make ++as from wire + |= [hen=duct wir=wire] + ^- (unit _as) + %+ ax hen + ?+ wir %$ + [?(%peer %send) @ *] i.t.wir + == -- |% :: poke+peek pattern ++ call :: handle request @@ -318,7 +252,10 @@ ^+ [*(list move) ..^$] ~| wrapped-task =/ task=task ((harden task) wrapped-task) + :: unwrap session tasks, default to session %$ :: + =^ ses=@tas task + ?:(?=(%shot -.task) +.task [%$ task]) :: error notifications "downcast" to %crud :: =? task ?=(^ dud) @@ -348,10 +285,11 @@ :: =* duc (need hey.all) =/ app %hood - =/ see (tuba "") - =/ zon=axon [app input=[~ ~] width=80 cursor=(lent see) lin+see] + =/ say (tuba "") + =/ zon=axon [app input=[~ ~] width=80] :: - =^ moz all abet:(~(into as duc zon) ~) + =^ moz all abet:(~(into as duc %$ zon) ~) + =. eye.all (~(put ju eye.all) %$ duc) [moz ..^$] :: %flog tasks are unwrapped and sent back to us on our default duct :: @@ -367,49 +305,175 @@ :: ?: ?=(?(%trim %vega) -.task) [~ ..^$] - :: %knob sets a verbosity level for an error tag + :: %knob used to set a verbosity level for an error tag, + :: but dill no longer prints errors itself, so implementing %knob + :: has become a recommendation to error printers (like drum). + :: remove this when %knob gets removed from lull, next™ kelvin release. :: ?: ?=(%knob -.task) - =. veb.all (~(put by veb.all) tag.task level.task) + ~& [%dill %knob-deprecated] [~ ..^$] + :: %open opens a new dill session + :: + ?: ?=(%open -.task) + ?: (~(has by dug.all) ses) + ::TODO should we allow, and just send the %yow blits? + ~| [%cannot-open-existing ses] + !! + =/ zon=axon [p.task ~ width=80] + =^ moz all abet:(~(open as hen ses zon) q.task) + =. eye.all (~(put ju eye.all) ses hen) + [moz ..^$] + :: %shut closes an existing dill session + :: + ?: ?=(%shut -.task) + ?: =(%$ ses) + ~| %cannot-shut-default-session + !! + =/ nus + ~| [%no-session ses] + (need (ax hen ses)) + ::NOTE we do deletion from state outside of the core, + :: because +abet would re-insert. + ::TODO send a %bye blit? xx + =^ moz all abet:pull:nus + =. dug.all (~(del by dug.all) ses) + =. eye.all (~(del by eye.all) ses) + [moz ..^$] + :: %view opens a subscription to the target session, on the current duct :: ?: ?=(%view -.task) - :: crash on viewing non-existent session + =/ nus + :: crash on viewing non-existent session + :: + ~| [%no-session ses] + (need (ax hen ses)) + :: register the viewer and send a %hey so they get the full screen :: - ~| [%no-session session.task] - ?> =(~ session.task) - =/ session (need hey.all) - =/ =axon (~(got by dug.all) session) - :: register the viewer and send them the prompt line - :: - :- [hen %give %blit [see.axon]~]~ - ..^$(eye.all (~(put ju eye.all) session hen)) + =^ moz all + abet:(send:nus %hey ~) + :- moz + ..^$(eye.all (~(put ju eye.all) ses hen)) + :: %flee closes a subscription to the target session, from the current duct :: ?: ?=(%flee -.task) :- ~ - ~| [%no-session session.task] - ?> =(~ session.task) - =/ session (need hey.all) - ..^$(eye.all (~(del ju eye.all) session hen)) + ..^$(eye.all (~(del ju eye.all) ses hen)) + :: %logs opens or closes a subscription to system output :: - =/ nus (ax hen) - =? nus &(?=(~ nus) ?=(^ hey.all)) - ::TODO allow specifying target session in task - (ax u.hey.all) + ?: ?=(%logs -.task) + =. ear.all + ?~ p.task (~(del in ear.all) hen) + (~(put in ear.all) hen) + [~ ..^$] + :: if we were $told something, give %logs to all interested parties + :: + ?: ?=(?(%crud %talk %text) -.task) + :_ ..^$ + (turn ~(tap in ear.all) (late %give %logs task)) + :: + =/ nus + (ax hen ses) ?~ nus - :: :hen is an unrecognized duct + :: session :ses does not exist :: could be before %boot (or %boot failed) :: - ~& [%dill-call-no-flow hen -.task] - =/ tan ?:(?=(%crud -.task) q.task ~) - [((slog (flop tan)) ~) ..^$] + ~& [%dill-call-no-session ses hen -.task] + [~ ..^$] :: =^ moz all abet:(call:u.nus task) [moz ..^$] :: ++ load :: import old state - |= old=axle - ..^$(all old) + =< |= old=any-axle + ?- -.old + %7 ..^$(all old) + %6 $(old (axle-6-to-7 old)) + %5 $(old (axle-5-to-6 old)) + %4 $(old (axle-4-to-5 old)) + == + |% + +$ any-axle $%(axle axle-6 axle-5 axle-4) + :: + +$ axle-6 + $: %6 + hey=(unit duct) + dug=(map @tas axon) + eye=(jug @tas duct) + lit=? + veb=(map @tas log-level) + egg=_| + == + :: + ++ axle-6-to-7 + |= a=axle-6 + ^- axle + [%7 hey dug eye ~ lit egg]:a + :: + +$ axle-5 + $: %5 + hey=(unit duct) :: default duct + dug=(map @tas axon) :: conversations + eye=(jug @tas duct) :: outside listeners + lit=? :: boot in lite mode + veb=(map @tas log-level) + == + :: + ++ axle-5-to-6 + |= a=axle-5 + ^- axle-6 + :: [%6 hey `(map @tas axon)`dug eye lit veb |] + a(- %6, veb [veb.a &]) + :: + +$ axle-4 + $: %4 + hey=(unit duct) + dug=(map duct axon-4) + eye=(jug duct duct) + lit=? + veb=(map @tas log-level) + == + :: + +$ axon-4 + $: ram=term + tem=(unit (list dill-belt-4)) + wid=_80 + pos=$@(@ud [@ud @ud]) + see=$%([%lin (list @c)] [%klr stub]) + == + :: + +$ dill-belt-4 + $% [%ctl p=@c] + [%met p=@c] + dill-belt + == + :: + ++ axle-4-to-5 + |= axle-4 + ^- axle-5 + :- %5 + =- [hey nug nay lit veb] + %+ roll ~(tap by dug) + |= [[=duct =axon-4] nug=(map @tas axon) nay=(jug @tas duct)] + =/ ses=@tas + ~| [%unexpected-duct duct] + ?>(=([//term/1]~ duct) %$) + :- (~(put by nug) ses (axon-4-to-5 axon-4)) + %+ ~(put by nay) ses + (~(put in (~(get ju eye) duct)) duct) + :: + ++ axon-4-to-5 + |= axon-4 + ^- axon + =; tem [ram tem wid] + ?~ tem ~ + %- some + %+ turn u.tem + |= b=dill-belt-4 + ^- dill-belt + ?. ?=(?(%ctl %met) -.b) b + [%mod -.b p.b] + -- :: ++ scry ^- roon @@ -438,19 +502,12 @@ =(%$ syd) == ~ - :: /dx/sessions//line blit current line (prompt) of default session - :: /dx/sessions//cursor @ud current cursor position of default session - ::TODO support asking for specific sessions once session ids are real + :: /dy/sessions (set @tas) all existing sessions + :: /du/sessions/[ses] ? does session ses exist? :: - ?. ?=(%x ren) ~ - ?+ tyl ~ - [%sessions %$ *] - ?~ hey.all [~ ~] - ?~ session=(~(get by dug.all) u.hey.all) [~ ~] - ?+ t.t.tyl ~ - [%line ~] ``blit+!>(`blit`see.u.session) - [%cursor ~] ``atom+!>(pos.u.session) - == + ?+ [ren tyl] ~ + [%y %sessions ~] ``noun+!>(~(key by dug.all)) + [%u %sessions @ ~] ``noun+!>((~(has by dug.all) (snag 1 tyl))) == :: ++ stay all @@ -461,12 +518,27 @@ ?^ dud ~|(%dill-take-dud (mean tang.u.dud)) :: - =/ nus (ax hen) + =; [moz=(list move) lax=_..^$] + =? moz egg.all.lax + :: dill pre-release (version %5) in some cases ended up in a state + :: where it had both an old-style and new-style subscription open + :: for the default session. here, we obliterate both and establish + :: only the new-style subscription. + :: + =/ hey (need hey.all.lax) + :* [hey %pass / %g %deal [our our] %hood %leave ~] + [hey %pass [%peer %$ ~] %g %deal [our our] %hood %leave ~] + [hey %pass [%peer %$ ~] %g %deal [our our] %hood %watch [%dill %$ ~]] + moz + == + =. egg.all.lax | + [moz lax] + :: + =/ nus (aw hen tea) ?~ nus - :: :hen is an unrecognized duct - :: could be before %boot (or %boot failed) + :: :tea points to an unrecognized session :: - ~& [%dill-take-no-flow hen -.hin +<.hin] + ~& [%dill-take-no-session tea -.hin +<.hin] [~ ..^$] =^ moz all abet:(take:u.nus tea hin) [moz ..^$] diff --git a/pkg/arvo/sys/vane/eyre.hoon b/pkg/arvo/sys/vane/eyre.hoon index 20b21ed3b..e19f48d60 100644 --- a/pkg/arvo/sys/vane/eyre.hoon +++ b/pkg/arvo/sys/vane/eyre.hoon @@ -70,7 +70,7 @@ ++ axle $: :: date: date at which http-server's state was updated to this data structure :: - date=%~2020.10.18 + date=%~2022.7.26 :: server-state: state of inbound requests :: =server-state @@ -551,6 +551,18 @@ (easy ~) == == +:: +host-sans-port: strip the : from a host string +:: +++ host-sans-port + ;~ sfix + %+ cook crip + %- star + ;~ less + ;~(plug col (punt dem) ;~(less next (easy ~))) + next + == + (star next) + == :: +per-server-event: per-event server core :: ++ per-server-event @@ -602,6 +614,31 @@ [action [authenticated secure address request] ~ 0] =. connections.state (~(put by connections.state) duct connection) + :: redirect to https if insecure, redirects enabled + :: and secure port live + :: + ?: ?& !secure + redirect.http-config.state + ?=(^ secure.ports.state) + == + =/ location=@t + %+ rap 3 + :~ 'https://' + (rash (fall host '') host-sans-port) + ?: =(443 u.secure.ports.state) + '' + (crip ":{(a-co:co u.secure.ports.state)}") + ?: ?=([[~ ~] ~] (parse-request-line url.request)) + '/' + url.request + == + %- handle-response + :* %start + :- status-code=301 + headers=['location' location]~ + data=~ + complete=%.y + == :: figure out whether this is a cors request, :: whether the origin is approved or not, :: and maybe add it to the "pending approval" set @@ -707,11 +744,32 @@ :: %scry (handle-scry authenticated address request(url suburl)) + :: + %name + (handle-name authenticated request) :: %four-oh-four %^ return-static-data-on-duct 404 'text/html' (error-page 404 authenticated url.request ~) == + :: +handle-name: respond with our @p or 403 + :: + ++ handle-name + |= [authenticated=? =request:http] + |^ ^- (quip move server-state) + ?. authenticated + (error-response 403 ~) + ?. =(%'GET' method.request) + (error-response 405 "may only GET name") + %^ return-static-data-on-duct 200 'text/plain' + (as-octs:mimes:html (scot %p our)) + :: + ++ error-response + |= [status=@ud =tape] + ^- (quip move server-state) + %^ return-static-data-on-duct status 'text/html' + (error-page status authenticated url.request tape) + -- :: +handle-scry: respond with scry result, 404 or 500 :: ++ handle-scry @@ -811,7 +869,7 @@ %leave ~ == :: - ?(%authentication %logout) + ?(%authentication %logout %name) [~ state] :: %channel @@ -900,6 +958,7 @@ (session-cookie-string session &) :: =; out=[moves=(list move) server-state] + =. moves.out [give-session-tokens moves.out] :: if we didn't have any cookies previously, start the expiry timer :: ?. first-session out @@ -974,7 +1033,7 @@ ?~ channels =^ moz state (handle-response response) - [(weld moves moz) state] + [[give-session-tokens (weld moves moz)] state] =^ moz state (discard-channel:by-channel i.channels |) $(moves (weld moves moz), channels t.channels) @@ -1228,7 +1287,7 @@ :: the request may include a 'Last-Event-Id' header :: =/ maybe-last-event-id=(unit @ud) - ?~ maybe-raw-header=(get-header:http 'Last-Event-ID' header-list.request) + ?~ maybe-raw-header=(get-header:http 'last-event-id' header-list.request) ~ (rush u.maybe-raw-header dum:ag) :: flush events older than the passed in 'Last-Event-ID' @@ -2058,6 +2117,13 @@ (cury cat 3) ?~ ext.request-line '' (cat 3 '.' u.ext.request-line) + :: +give-session-tokens: send valid session tokens to unix + :: + ++ give-session-tokens + ^- move + :- outgoing-duct.state + =* ses sessions.authentication-state.state + [%give %sessions (~(run in ~(key by ses)) (cury scot %uv))] -- :: ++ forwarded-params @@ -2170,6 +2236,7 @@ [[~ /~/logout] duct [%logout ~]] [[~ /~/channel] duct [%channel ~]] [[~ /~/scry] duct [%scry ~]] + [[~ /~/name] duct [%name ~]] == [~ http-server-gate] :: %trim: in response to memory pressure @@ -2178,7 +2245,7 @@ :: XX cancel active too if =(0 trim-priority) ? :: ?: ?=(%trim -.task) - =/ event-args [[eny duct now rof] server-state.ax] + =* event-args [[eny duct now rof] server-state.ax] =* by-channel by-channel:(per-server-event event-args) =* channel-state channel-state.server-state.ax :: @@ -2236,12 +2303,15 @@ =. outgoing-duct.server-state.ax duct :: :_ http-server-gate - ;: weld - :: hand back default configuration for now + :* :: hand back default configuration for now + :: + [duct %give %set-config http-config.server-state.ax] + :: provide a list of valid auth tokens + :: + =< give-session-tokens + (per-server-event [eny duct now rof] server-state.ax) :: - [duct %give %set-config http-config.server-state.ax]~ - :: - closed-connections + closed-connections == :: ?: ?=(%code-changed -.task) @@ -2272,6 +2342,10 @@ :: %live =. ports.server-state.ax +.task + :: enable http redirects if https port live and cert set + :: + =. redirect.http-config.server-state.ax + &(?=(^ secure.task) ?=(^ secure.http-config.server-state.ax)) [~ http-server-gate] :: %rule: updates our http configuration :: @@ -2284,6 +2358,10 @@ ?: =(secure.config cert.http-rule.task) [~ http-server-gate] =. secure.config cert.http-rule.task + =. redirect.config + ?& ?=(^ secure.ports.server-state.ax) + ?=(^ cert.http-rule.task) + == :_ http-server-gate =* out-duct outgoing-duct.server-state.ax ?~ out-duct ~ @@ -2507,6 +2585,8 @@ :: ^- [(list move) _http-server-gate] :_ http-server-gate + :- =< give-session-tokens + (per-server-event [eny duct now rof] server-state.ax) ?: =(~ sessions) ~ =; next-expiry=@da [duct %pass /sessions/expire %b %wait next-expiry]~ @@ -2532,9 +2612,36 @@ :: +load: migrate old state to new state (called on vane reload) :: ++ load - |= old=axle + => |% + ++ axle-old + %+ cork + axle + |= =axle + axle(date %~2020.10.18) + -- + |= old=$%(axle axle-old) ^+ ..^$ - ..^$(ax old) + :: + ?- -.old + %~2020.10.18 + %= $ + date.old %~2022.7.26 + :: + bindings.server-state.old + %+ insert-binding + [[~ /~/name] outgoing-duct.server-state.old [%name ~]] + bindings.server-state.old + == + :: + %~2022.7.26 + :: enable https redirects if certificate configured + :: + =. redirect.http-config.server-state.old + ?& ?=(^ secure.ports.server-state.old) + ?=(^ secure.http-config.server-state.old) + == + ..^$(ax old) + == :: +stay: produce current state :: ++ stay `axle`ax @@ -2617,13 +2724,11 @@ =* domains domains.server-state.ax =* ports ports.server-state.ax =/ =host:eyre [%& ?^(domains n.domains /localhost)] - =/ secure=? &(?=(^ secure.ports) !?=(hoke:eyre host)) =/ port=(unit @ud) - ?. secure + ?. ?=(^ secure.ports) ?:(=(80 insecure.ports) ~ `insecure.ports) - ?> ?=(^ secure.ports) ?:(=(443 u.secure.ports) ~ secure.ports) - ``[secure port host] + ``[?=(^ secure.ports) port host] == == -- diff --git a/pkg/arvo/sys/vane/gall.hoon b/pkg/arvo/sys/vane/gall.hoon index 3ea10d64a..8ce10c655 100644 --- a/pkg/arvo/sys/vane/gall.hoon +++ b/pkg/arvo/sys/vane/gall.hoon @@ -4,17 +4,47 @@ :: :::: |= our=ship +:: veb: verbosity flags +:: +=/ veb-all-off + :: TODO: add more flags? + :: + :* odd=`?`%.n :: unusual events + == =, gall => |% ++| %helpers +:: +trace: print if .verb is set and we're tracking .dude +:: +++ trace + |= [verb=? =dude dudes=(set dude) print=tang] + ^+ same + ?. verb + same + ?. => [dude=dude dudes=dudes in=in] + ~+ |(=(~ dudes) (~(has in dudes) dude)) + same + (slog print) +:: +:: $bug: debug printing configuration +:: +:: veb: verbosity toggles +:: dudes: app filter; if ~, print for all +:: ++$ bug + $: veb=_veb-all-off + dudes=(set dude) + == +:: +| %main :: :: $move: Arvo-level move :: +$ move [=duct move=(wind note-arvo gift-arvo)] -:: $state-8: overall gall state, versioned +:: $state-11: overall gall state, versioned :: -+$ state-8 [%8 state] ++$ state-11 [%11 state] :: $state: overall gall state :: :: system-duct: TODO document @@ -22,6 +52,7 @@ :: contacts: other ships we're in communication with :: yokes: running agents :: blocked: moves to agents that haven't been started yet +:: bug: debug printing configuration :: +$ state $: system-duct=duct @@ -29,13 +60,8 @@ contacts=(set ship) yokes=(map term yoke) blocked=(map term (qeu blocked-move)) + =bug == -:: $watches: subscribers and publications -:: -:: TODO: rename this, to $ties? -:: TODO: rename $boat and $bitt and document -:: -+$ watches [inbound=bitt outbound=boat] :: $routes: new cuff; TODO: document :: +$ routes @@ -45,19 +71,26 @@ :: $yoke: agent runner state :: :: control-duct: TODO document -:: live: is this agent running? TODO document better +:: run-nonce: unique for each rebuild +:: sub-nonce: app-wide global %watch nonce :: stats: TODO document -:: watches: incoming and outgoing subscription state +:: bitt: incoming subscriptions +:: boat: outgoing subscriptions +:: boar: and their nonces +:: code: most recently loaded code :: agent: agent core :: beak: compilation source :: marks: mark conversion requests :: +$ yoke $: control-duct=duct - nonce=@t - live=? ::TODO remove, replaced by -.agent + run-nonce=@t + sub-nonce=_1 =stats - =watches + =bitt + =boat + =boar + code=* agent=(each agent vase) =beak marks=(map duct mark) @@ -116,160 +149,35 @@ :: $spore: structures for update, produced by +stay :: +$ spore - $: %8 + $: %11 system-duct=duct outstanding=(map [wire duct] (qeu remote-request)) contacts=(set ship) eggs=(map term egg) blocked=(map term (qeu blocked-move)) + =bug == :: $egg: migratory agent state; $yoke with .old-state instead of .agent :: +$ egg $: control-duct=duct - nonce=@t - live=? + run-nonce=@t + sub-nonce=@ =stats - =watches - old-state=(each vase vase) + =bitt + =boat + =boar + code=~ + old-state=[%| vase] =beak marks=(map duct mark) == -- -:: pupal gall core, on upgrade -:: -=< =* adult-gate . - =| =spore - |= [now=@da eny=@uvJ rof=roof] - =* pupal-gate . - =* adult-core (adult-gate +<) - =< |% - ++ call ^call - ++ load ^load - ++ scry ^scry - ++ stay ^stay - ++ take ^take - -- - |% - ++ molt - |= [=duct fec=(unit move)] - ^- [(list move) _adult-gate] - ~> %slog.[0 leaf+"gall: molting"] - ~< %slog.[0 leaf+"gall: molted"] - :: +molt should never notify its client about agent changes - :: - =- :_ -> - %+ welp - (skip -< |=(move ?=([* %give %onto *] +<))) - [^duct %pass /whiz/gall %$ %whiz ~]~ - =/ adult adult-core - =. state.adult - [%8 system-duct outstanding contacts yokes=~ blocked]:spore - =/ mo-core (mo-abed:mo:adult duct) - =. mo-core - =/ apps=(list [dap=term =egg]) ~(tap by eggs.spore) - |- ^+ mo-core - ?~ apps mo-core - ?. =(%base q.beak.egg.i.apps) - ~> %slog.[0 leaf+"gall: suspending {}"] - =. old-state.egg.i.apps - =/ old old-state.egg.i.apps - |/?-(-.old %| p.old, %& p.old) - =/ ap-core (ap-abut:ap:mo-core i.apps) - $(apps t.apps, mo-core ap-abet:ap-core) - ~> %slog.[0 leaf+"gall: upgrading {}"] - =/ ap-core (ap-abut:ap:mo-core i.apps) - =? ap-core ?=(%& -.old-state.egg.i.apps) - =^ tan ap-core (ap-install:ap-core `p.old-state.egg.i.apps) - ?^ tan - (mean u.tan) - ap-core - $(apps t.apps, mo-core ap-abet:ap-core) - =. mo-core (mo-subscribe-to-agent-builds:mo-core now) - =^ moves adult-gate mo-abet:mo-core - =? moves ?=(^ fec) (weld moves [u.fec]~) - [moves adult-gate] - :: - ++ call - |= [=duct dud=(unit goof) wrapped-task=(hobo task)] - =* call-args +< - ?: =(~ eggs.spore) - ~> %slog.[0 leaf+"gall: direct morphogenesis"] - =. state.adult-gate spore(eggs *(map term yoke)) - (call:adult-core call-args) - ?^ dud - ~> %slog.[0 leaf+"gall: pupa call dud"] - (mean >mote.u.dud< tang.u.dud) - =/ task ((harden task:gall) wrapped-task) - ?: ?=(%vega -.task) - [~ pupal-gate] - (molt duct `[duct %slip %g task]) - :: - ++ scry scry:adult-core - ++ stay spore - ++ take - |= [=wire =duct dud=(unit goof) sign=sign-arvo] - =* take-args +< - ?: =(~ eggs.spore) - ~> %slog.[0 leaf+"gall: direct morphogenesis"] - =. state.adult-gate spore(eggs *(map term yoke)) - (take:adult-core take-args) - ?^ dud - ~> %slog.[0 leaf+"gall: pupa take dud"] - (mean >mote.u.dud< tang.u.dud) - ?: =(/sys/lyv wire) - (molt duct ~) - (molt duct `[duct %pass wire %b %huck sign]) - :: - ++ load - |^ |= old=spore-any - =? old ?=(%7 -.old) - (spore-7-to-8 old) - ?> ?=(%8 -.old) - =. spore old - ?. =(~ eggs.spore) - pupal-gate - ~> %slog.[0 leaf+"gall: direct morphogenesis"] - %_ adult-gate - state spore(eggs *(map term yoke)) - == - :: - +$ spore-any $%(^spore spore-7) - +$ spore-7 - $: %7 - wipe-eyre-subs=_| ::NOTE band-aid for #3196 - system-duct=duct - outstanding=(map [wire duct] (qeu remote-request)) - contacts=(set ship) - eggs=(map term egg) - blocked=(map term (qeu blocked-move)) - == - :: - ++ spore-7-to-8 - |= old=spore-7 - ^- ^spore - :- %8 - =. eggs.old - %- ~(urn by eggs.old) - |= [a=term e=egg] - ::NOTE kiln will kick off appropriate app revival - e(old-state [%| p.old-state.e]) - +>.old - -- - -- :: adult gall vane interface, for type compatibility with pupa :: -=| state=state-8 +=| state=state-11 |= [now=@da eny=@uvJ rof=roof] =* gall-payload . -=< ~% %gall-wrap ..mo ~ - |% - ++ call ^call - ++ load ^load - ++ scry ^scry - ++ stay ^stay - ++ take ^take - -- ~% %gall-top ..part ~ |% :: +mo: Arvo-level move handling @@ -280,43 +188,71 @@ ++ mo ~% %gall-mo +> ~ |_ [hen=duct moves=(list move)] + :: + ++ trace + |= [verb=? =dude print=tang] + ^+ same + (^trace verb dude dudes.bug.state print) + :: :: +mo-abed: initialise state with the provided duct :: +mo-abet: finalize, reversing moves :: +mo-pass: prepend a standard %pass to the current list of moves :: +mo-give: prepend a standard %give to the current list of moves + :: +mo-talk: build task to print config report or failure trace :: ++ mo-core . ++ mo-abed |=(hun=duct mo-core(hen hun)) ++ mo-abet [(flop moves) gall-payload] - ++ mo-pass |=(p=[wire note-arvo] mo-core(moves [[hen pass+p] moves])) ++ mo-give |=(g=gift mo-core(moves [[hen give+g] moves])) + ++ mo-talk + |= rup=(each suss tang) + ^- [wire note-arvo] + :+ /sys/say %d + ^- task:dill + ?- -.rup + %& [%text "gall: {(t q)}ed %{(t p)}":[t=trip p.rup]] + %| [%talk leaf+"gall: failed" (flop p.rup)] + == + ++ mo-pass |=(p=[wire note-arvo] mo-core(moves [[hen pass+p] moves])) + ++ mo-slip |=(p=note-arvo mo-core(moves [[hen slip+p] moves])) ++ mo-past |= =(list [wire note-arvo]) ?~ list mo-core =. mo-core (mo-pass i.list) $(list t.list) - :: +mo-jolt: (re)start agent if not already started on this desk + :: +mo-jolt: (re)start agent :: ++ mo-jolt |= [dap=term =ship =desk] ^+ mo-core - =/ yak (~(get by yokes.state) dap) - ?~ yak - (mo-boot dap ship desk) - ?. -.agent.u.yak - (mo-boot dap ship desk) - ?. =(desk q.beak.u.yak) - (mo-boot dap ship desk) - mo-core - :: +mo-boot: ask %ford to build us a core for the specified agent. + =/ =wire /sys/cor/[dap]/(scot %p ship)/[desk] + ..mo-core + :: XX (mo-pass wire %c %jolt dap ship desk) + :: +mo-doff: kill all outgoing subscriptions :: - ++ mo-boot - |= [dap=term =ship =desk] + ++ mo-doff + |= [dude=(unit dude) ship=(unit ship)] ^+ mo-core - =/ =case [%da now] - =/ =wire /sys/cor/[dap]/(scot %p ship)/[desk]/(scot case) - (mo-pass wire %c %warp ship desk ~ %sing %a case /app/[dap]/hoon) + =/ apps=(list (pair term yoke)) + ?~ dude ~(tap by yokes.state) + (drop (bind (~(get by yokes.state) u.dude) (lead u.dude))) + |- ^+ mo-core + ?~ apps mo-core + =/ ap-core (ap-yoke:ap p.i.apps [~ our] q.i.apps) + $(apps t.apps, mo-core ap-abet:(ap-doff:ap-core ship)) + :: +mo-rake: send %cork's for old subscriptions if needed + :: + ++ mo-rake + |= [dude=(unit dude) all=?] + ^+ mo-core + =/ apps=(list (pair term yoke)) + ?~ dude ~(tap by yokes.state) + (drop (bind (~(get by yokes.state) u.dude) (lead u.dude))) + |- ^+ mo-core + ?~ apps mo-core + =/ ap-core (ap-yoke:ap p.i.apps [~ our] q.i.apps) + $(apps t.apps, mo-core ap-abet:(ap-rake:ap-core all)) :: +mo-receive-core: receives an app core built by %ford. :: :: Presuming we receive a good core, we first check to see if the agent @@ -335,17 +271,24 @@ ^+ mo-core :: =/ yak (~(get by yokes.state) dap) - =/ tex - ?~ yak "installing" - ?- -.agent.u.yak - %& "reloading" - %| "reviving" + =/ tex=(unit tape) + ?~ yak `"installing" + ?- -.agent.u.yak + %| `"reviving" + %& + ?: =(code.u.yak agent) + ~ + `"reloading" == - ~> %slog.[0 leaf+"gall: {tex} {}"] + =+ ?~ tex ~ + ~> %slog.[0 leaf+"gall: {u.tex} {}"] ~ :: ?^ yak + ?: &(=(q.beak.u.yak q.bek) =(code.u.yak agent) =(-.agent.u.yak &)) + mo-core + :: =. yokes.state - (~(put by yokes.state) dap u.yak(beak bek)) + (~(put by yokes.state) dap u.yak(beak bek, code agent)) =/ ap-core (ap-abed:ap dap `our) =. ap-core (ap-reinstall:ap-core agent) =. mo-core ap-abet:ap-core @@ -356,8 +299,9 @@ %* . *yoke control-duct hen beak bek + code agent agent &+agent - nonce (scot %uw (end 5 (shas %yoke-nonce eny))) + run-nonce (scot %uw (end 5 (shas %yoke-nonce eny))) == :: =/ old mo-core @@ -369,66 +313,12 @@ =/ ap-core +.wag ?^ maybe-tang =. mo-core old - (mo-give %onto %.n u.maybe-tang) + (mo-pass (mo-talk %.n u.maybe-tang)) :: =. mo-core ap-abet:ap-core =. mo-core (mo-clear-queue dap) =/ =suss [dap %boot now] - (mo-give %onto [%.y suss]) - :: +mo-subscribe-to-agent-builds: request agent update notices - :: - :: Also subscribe to our own source path, in case we get reloaded - :: but none of the agents do. This way, Clay will still notify us, - :: and we'll be able to exit the chrysalis. - :: - ++ mo-subscribe-to-agent-builds - |= date=@da - ^+ mo-core - =. mo-core (mo-abed system-duct.state) - :: - =/ sources=(jug desk [care:clay path]) - %+ ~(put by *(jug desk [care:clay path])) %base - %- sy - :~ [%z /sys/hoon/hoon] - [%z /sys/arvo/hoon] - [%z /sys/lull/hoon] - [%z /sys/zuse/hoon] - [%z /sys/vane/gall/hoon] - [%z /sys/kelvin] - == - :: - =. sources - =/ apps=(list [dap=term =yoke]) ~(tap by yokes.state) - |- ^+ sources - ?~ apps - sources - =? sources ?=(%& -.agent.yoke.i.apps) - (~(put ju sources) q.beak.yoke.i.apps %a /app/[dap.i.apps]/hoon) - $(apps t.apps) - :: - %- mo-past - %- zing - %+ turn ~(tap by sources) - |= [=desk paths=(set [care:clay path])] - :~ [/sys/lyv %c %warp our desk ~] - [/sys/lyv %c %warp our desk ~ %mult da+date paths] - == - :: +mo-scry-agent-cage: read $agent core from clay - :: - ++ mo-scry-agent-cage - |= [dap=term =desk =case:clay] - ^- (each agent tang) - =/ bek=beak [our desk case] - =/ sky (rof ~ %ca bek /app/[dap]/hoon) - ?~ sky |+[leaf+"gall: {} scry blocked"]~ - ?~ u.sky |+[leaf+"gall: {} scry failed"]~ - =/ =cage u.u.sky - ?. =(%vase p.cage) - |+[leaf+"gall: bad mark {} for agent {}"]~ - =/ res (mule |.(!<(agent !<(vase q.cage)))) - ?: ?=(%& -.res) - &+p.res - |+[[leaf+"gall: {} not valid agent"] p.res] + (mo-pass (mo-talk %.y suss)) :: +mo-send-foreign-request: handle local request to .ship :: ++ mo-send-foreign-request @@ -457,8 +347,12 @@ =. outstanding.state =/ stand (~(gut by outstanding.state) [wire hen] *(qeu remote-request)) - (~(put by outstanding.state) [wire hen] (~(put to stand) -.deal)) - (mo-pass wire note-arvo) + %+ ~(put by outstanding.state) [wire hen] + (~(gas to stand) ?.(?=(%leave -.deal) ~[-.deal] ~[%leave])) + =. mo-core (mo-pass wire note-arvo) + ?. ?=(%leave -.deal) + mo-core + (mo-pass wire [%a [%cork ship]]) :: +mo-track-ship: subscribe to ames and jael for notices about .ship :: ++ mo-track-ship @@ -531,9 +425,9 @@ ^+ mo-core :: ?+ -.wire !! - %lyv (mo-handle-sys-lyv wire sign-arvo) + %lyv ..mo-core :: vestigial + %cor ..mo-core :: vestigial %era (mo-handle-sys-era wire sign-arvo) - %cor (mo-handle-sys-cor wire sign-arvo) %lag (mo-handle-sys-lag wire sign-arvo) %req (mo-handle-sys-req wire sign-arvo) %way (mo-handle-sys-way wire sign-arvo) @@ -548,60 +442,6 @@ ?. ?=(%breach -.public-keys-result.sign-arvo) mo-core (mo-breach who.public-keys-result.sign-arvo) - :: +mo-handle-sys-cor: receive a built agent from %clay - :: - ++ mo-handle-sys-cor - |= [=wire =sign-arvo] - ^+ mo-core - :: - ?> ?=([%cor @ @ @ @ ~] wire) - =/ [dap=term her=@ta desk=@ta dat=@ta ~] t.wire - =/ =beak [(slav %p her) desk da+now] - ?> ?=([?(%behn %clay) %writ *] sign-arvo) - ?~ p.sign-arvo - (mean leaf+"gall: failed to build agent {}" ~) - =/ cag=cage r.u.p.sign-arvo - ?. =(%vase p.cag) - (mean leaf+"gall: bad %writ {} for {}" ~) - =/ res (mule |.(!<(agent !<(vase q.cag)))) - ?: ?=(%| -.res) - (mean leaf+["gall: bad agent {}"] p.res) - =. mo-core (mo-receive-core dap beak p.res) - (mo-subscribe-to-agent-builds now) - :: +mo-handle-sys-lyv: handle notice that agents have been rebuilt - :: - ++ mo-handle-sys-lyv - |= [=wire =sign-arvo] - ^+ mo-core - ?> ?=([%lyv ~] wire) - ?> ?=([?(%behn %clay) %wris *] sign-arvo) - =/ nex=(list [=care:clay =path]) ~(tap in q.sign-arvo) - ~> %slog.[0 leaf+"gall: reloading agents"] - ~< %slog.[0 leaf+"gall: reloaded agents"] - =; cor (mo-subscribe-to-agent-builds:cor now) - %+ roll nex - |= [[=care:clay =path] cor=_mo-core] - ^+ cor - :: We throw away %z results because we only have them to guarantee - :: molting. Clay will tell us if e.g. changing hoon.hoon affects - :: the result of a particular app (usually it will). - :: - ?. =(%a care) - cor - ~| path=path - =/ dap dap:;;([%app dap=@tas %hoon ~] path) - =/ yok=(unit yoke) (~(get by yokes.state) dap) - ?~ yok - ~> %slog.[0 leaf+"gall: no agent to reload: {}"] - cor - ?: ?=(%| -.agent.u.yok) - ~> %slog.[0 leaf+"gall: dead agent reload: {}"] - cor - =/ bek=beak [our q.beak.u.yok da+now] - =/ rag (mo-scry-agent-cage dap q.bek da+now) - ?: ?=(%| -.rag) - (mean p.rag) - (mo-receive-core:cor dap bek p.rag) :: +mo-handle-sys-lag: handle an ames %clog notification :: ++ mo-handle-sys-lag @@ -680,7 +520,10 @@ (~(put to *(qeu remote-request)) %missing) ~| [full-wire=full-wire hen=hen stand=stand] =^ rr stand ~(get to stand) - [rr (~(put by outstanding.state) [full-wire hen] stand)] + :- rr + ?: =(~ stand) + (~(del by outstanding.state) [full-wire hen]) + (~(put by outstanding.state) [full-wire hen] stand) :: non-null case of wire is old, remove on next breach after :: 2019/12 :: @@ -690,13 +533,18 @@ ?~ error=error.sign-arvo ~ `[[%leaf (trip tag.u.error)] tang.u.error] + :: send a %cork if we get a nack upon initial subscription + :: + =? mo-core + &(?=(^ err) |(?=(%watch-as remote-request) ?=(%watch remote-request))) + (mo-pass [%sys wire] %a %cork ship) :: ?- remote-request %watch-as (mo-give %unto %watch-ack err) %watch (mo-give %unto %watch-ack err) %poke (mo-give %unto %poke-ack err) %leave mo-core - %missing (mo-give:(mo-give %unto %watch-ack err) %unto %poke-ack err) + %missing ~>(%slog.[3 'gall: missing'] mo-core) == :: [%ames %boon *] @@ -705,7 +553,18 @@ :: !! =/ =ames-response ;;(ames-response payload.sign-arvo) - (mo-handle-ames-response ames-response) + :: %d: diff; ask clay to validate .noun as .mark + :: %x: kick; tell agent the publisher canceled the subscription, and + :: cork; tell ames to close the associated flow. + :: + ?- -.ames-response + %d (mo-give %unto %raw-fact mark.ames-response noun.ames-response) + %x =. mo-core (mo-give %unto %kick ~) + =/ key [[%sys wire] hen] + =? outstanding.state =(~ (~(gut by outstanding.state) key ~)) + (~(del by outstanding.state) key) + (mo-pass [%sys wire] %a %cork ship) + == :: [%ames %lost *] :: note this should only happen on reverse bones, so only facts @@ -738,9 +597,10 @@ ?~ yoke %- (slog leaf+"gall: {} dead, got {<+<.sign-arvo>}" ~) mo-core - ?. =(nonce.u.yoke i.t.wire) + ?. =(run-nonce.u.yoke i.t.wire) %- (slog leaf+"gall: got old {<+<.sign-arvo>} for {}" ~) mo-core + :: ?. ?=([?(%gall %behn) %unto *] sign-arvo) ?: ?=(%| -.agent.u.yoke) %- (slog leaf+"gall: {} dozing, dropping {<+<.sign-arvo>}" ~) @@ -836,15 +696,36 @@ ~> %slog.0^leaf/"gall: nuking {}" =. mo-core ap-abet:ap-nuke:(ap-abed:ap dap `our) mo-core(yokes.state (~(del by yokes.state) dap)) + :: +mo-load: install agents + :: + ++ mo-load + |= agents=(list [=dude =beak =agent]) + =. mo-core + |- ^+ mo-core + ?~ agents mo-core + =/ [=dude =desk] [dude q.beak]:i.agents + :: ~> %slog.0^leaf/"gall: starting {} on {}" + $(agents t.agents, mo-core (mo-receive-core i.agents)) + :: + =/ kil + =/ lol (skim ~(tap by yokes.state) |=([term yoke] -.agent)) + =/ mol (~(gas by *(map term yoke)) lol) + =/ sol ~(key by mol) + =/ new (silt (turn agents head)) + ~(tap in (~(dif in sol) new)) + |- ^+ mo-core + ?~ kil mo-core + ~> %slog.0^leaf/"gall: stopping {}" + $(kil t.kil, mo-core (mo-idle i.kil)) :: +mo-peek: call to +ap-peek (which is not accessible outside of +mo). :: ++ mo-peek ~/ %mo-peek - |= [dap=term =routes care=term =path] + |= [veb=? dap=term =routes care=term =path] ^- (unit (unit cage)) :: =/ app (ap-abed:ap dap routes) - (ap-peek:app care path) + (ap-peek:app veb care path) :: ++ mo-apply |= [dap=term =routes =deal] @@ -917,19 +798,21 @@ =/ running (~(get by yokes.state) agent) =/ is-running ?~(running %| ?=(%& -.agent.u.running)) =/ is-blocked (~(has by blocked.state) agent) + :: agent is running; deliver move normally :: - ?: |(!is-running is-blocked) - =/ blocked=(qeu blocked-move) - =/ waiting (~(get by blocked.state) agent) - =/ deals (fall waiting *(qeu blocked-move)) - =/ deal [hen routes &+deal] - (~(put to deals) deal) - :: - %- (slog leaf+"gall: not running {} yet, got {<-.deal>}" ~) - %_ mo-core - blocked.state (~(put by blocked.state) agent blocked) - == - (mo-apply agent routes deal) + ?. |(!is-running is-blocked) + (mo-apply agent routes deal) + :: + =/ blocked=(qeu blocked-move) + =/ waiting (~(get by blocked.state) agent) + =/ deals (fall waiting *(qeu blocked-move)) + =/ deal [hen routes &+deal] + (~(put to deals) deal) + :: + %- (slog leaf+"gall: not running {} yet, got {<-.deal>}" ~) + %_ mo-core + blocked.state (~(put by blocked.state) agent blocked) + == :: +mo-handle-ames-request: handle %ames request message. :: ++ mo-handle-ames-request @@ -950,18 +833,28 @@ %u [%leave ~] == (mo-pass wire %g %deal [ship our] agent-name deal) - :: +mo-handle-ames-response: handle ames response message. + :: +mo-spew: handle request to set verbosity toggles on debug output :: - ++ mo-handle-ames-response - |= =ames-response + ++ mo-spew + |= verbs=(list verb) ^+ mo-core - :: %d: diff; ask clay to validate .noun as .mark - :: %x: kick; tell agent the publisher canceled the subscription - :: - ?- -.ames-response - %d (mo-give %unto %raw-fact mark.ames-response noun.ames-response) - %x (mo-give %unto %kick ~) - == + :: start from all %.n's, then flip requested toggles + :: + =. veb.bug.state + %+ roll verbs + |= [=verb acc=_veb-all-off] + ^+ veb.bug.state + ?- verb + %odd acc(odd %.y) + == + mo-core + :: +mo-sift: handle request to filter debug output by agent + :: + ++ mo-sift + |= dudes=(list dude) + ^+ mo-core + =. dudes.bug.state (sy dudes) + mo-core :: +ap: agent engine :: :: An inner, agent-level core. The sample refers to the agent we're @@ -976,6 +869,19 @@ agent-config=(list (each suss tang)) =yoke == + :: + ++ trace + |= [verb=? print=tang] + ^+ same + (^trace verb agent-name print) + :: + ++ ap-nonce-wire + |= [=wire =dock] + ^+ wire + =/ nonce=@ (~(got by boar.yoke) wire dock) + ?: =(0 nonce) wire + [(scot %ud nonce) wire] + :: ++ ap-core . :: +ap-abed: initialise state for an agent, with the supplied routes. :: @@ -987,19 +893,6 @@ |= [dap=term =routes] ^+ ap-core (ap-yoke dap routes (~(got by yokes.state) dap)) - :: +ap-hatch: initialize agent state from $egg, after upgrade - :: - ++ ap-abut - |= [dap=term =egg] - ^+ ap-core - =/ yak=^yoke - ?: ?=(%| -.old-state.egg) - egg - =/ res (mo-scry-agent-cage dap q.beak.egg da+now) - ?: ?=(%| -.res) - (mean p.res) - egg(p.old-state `agent`p.res) - (ap-yoke dap `our yak) :: +ap-yoke: initialize agent state, starting from a $yoke :: ++ ap-yoke @@ -1021,8 +914,8 @@ :: =/ running (~(put by yokes.state) agent-name yoke) =/ moves - =/ giver |=(report=(each suss tang) [hen %give %onto report]) - =/ from-suss (turn agent-config giver) + =/ talker |=(report=(each suss tang) [hen %pass (mo-talk report)]) + =/ from-suss (turn agent-config talker) :(weld agent-moves from-suss moves) :: %_ mo-core @@ -1036,21 +929,19 @@ :: ++ ap-nuke ^+ ap-core - =/ out=(list [[=wire =ship =term] ? =path]) - ~(tap by outbound.watches.yoke) =/ inbound-paths=(set path) %- silt - %+ turn ~(tap by inbound.watches.yoke) + %+ turn ~(tap by bitt.yoke) |= [=duct =ship =path] path - =/ will=(list card:agent:gall) + =/ will=(list card:agent) %+ welp ?: =(~ inbound-paths) ~ [%give %kick ~(tap in inbound-paths) ~]~ - %+ turn ~(tap by outbound.watches.yoke) - |= [[=wire =ship =term] ? =path] - [%pass wire %agent [ship term] %leave ~] + %+ turn ~(tap by boat.yoke) + |= [[=wire =dock] ? =path] + [%pass wire %agent dock %leave ~] =^ maybe-tang ap-core (ap-ingest ~ |.([will *agent])) ap-core :: +ap-from-internal: internal move to move. @@ -1133,12 +1024,13 @@ tang.neet == =. wire + :^ %use agent-name run-nonce.yoke ?- -.neet %agent [%out (scot %p ship.neet) name.neet wire] %huck [%out (scot %p ship.neet) name.neet wire] %arvo [(scot %p attributing.agent-routes) wire] == - =. wire [%use agent-name nonce.yoke wire] + :: =/ =note-arvo ?- -.neet %arvo note-arvo.neet @@ -1152,8 +1044,7 @@ ++ ap-breach |= =ship ^+ ap-core - =/ in=(list [=duct =^ship =path]) - ~(tap by inbound.watches.yoke) + =/ in=(list [=duct =^ship =path]) ~(tap by bitt.yoke) |- ^+ ap-core ?^ in =? ap-core =(ship ship.i.in) @@ -1161,15 +1052,16 @@ core(agent-duct agent-duct) $(in t.in) :: - =/ out=(list [[=wire =^ship =term] ? =path]) - ~(tap by outbound.watches.yoke) + =/ out=(list [=wire =^ship =term]) + ~(tap ^in ~(key by boat.yoke)) |- ^+ ap-core ?~ out ap-core =? ap-core =(ship ship.i.out) =/ core =. agent-duct system-duct.state - =/ way [%out (scot %p ship) term.i.out wire.i.out] + =. wire.i.out (ap-nonce-wire i.out) + =/ way [%out (scot %p ship) term.i.out wire.i.out] (ap-specific-take way %kick ~) core(agent-duct agent-duct) $(out t.out) @@ -1184,8 +1076,7 @@ |= =ship ^+ ap-core :: - =/ in=(list [=duct =^ship =path]) - ~(tap by inbound.watches.yoke) + =/ in=(list [=duct =^ship =path]) ~(tap by bitt.yoke) |- ^+ ap-core ?~ in ap-core :: @@ -1206,7 +1097,7 @@ ?~ target-paths ?~ target-ship ~[agent-duct] - %+ murn ~(tap by inbound.watches.yoke) + %+ murn ~(tap by bitt.yoke) |= [=duct =ship =path] ^- (unit ^duct) ?: =(target-ship `ship) @@ -1221,7 +1112,7 @@ ++ ap-ducts-from-path |= [target-path=path target-ship=(unit ship)] ^- (list duct) - %+ murn ~(tap by inbound.watches.yoke) + %+ murn ~(tap by bitt.yoke) |= [=duct =ship =path] ^- (unit ^duct) ?: ?& =(target-path path) @@ -1246,7 +1137,7 @@ :: ++ ap-peek ~/ %ap-peek - |= [care=term tyl=path] + |= [veb=? care=term tyl=path] ^- (unit (unit cage)) :: take trailing mark off path for %x scrys :: @@ -1259,6 +1150,7 @@ =/ peek-result=(each (unit (unit cage)) tang) (ap-mule-peek |.((on-peek:ap-agent-core [care tyl]))) ?: ?=(%| -.peek-result) + ?. veb [~ ~] ((slog leaf+"peek bad result" p.peek-result) [~ ~]) :: for non-%x scries, or failed %x scries, or %x results that already :: have the requested mark, produce the result as-is @@ -1284,15 +1176,6 @@ ?: ?=(%& -.res) ``want^p.res ((slog leaf+"peek failed tube from {(trip have)} to {(trip want)}" ~) ~) - :: +ap-update-subscription: update subscription. - :: - ++ ap-update-subscription - ~/ %ap-update-subscription - |= [is-ok=? =other=ship other-agent=term =wire] - ^+ ap-core - ?: is-ok - ap-core - (ap-kill-down wire [other-ship other-agent]) :: +ap-move: send move :: ++ ap-move @@ -1316,8 +1199,8 @@ attributing.agent-routes :: guest agent-name :: agent == :: - :* wex=outbound.watches.yoke :: outgoing - sup=inbound.watches.yoke :: incoming + :* wex=boat.yoke :: outgoing + sup=bitt.yoke :: incoming == :: :* act=change.stats.yoke :: tick eny=eny.stats.yoke :: nonce @@ -1352,9 +1235,8 @@ ~/ %ap-subscribe |= pax=path ^+ ap-core - =/ incoming [attributing.agent-routes pax] - =. inbound.watches.yoke - (~(put by inbound.watches.yoke) agent-duct incoming) + =/ incoming [attributing.agent-routes pax] + =. bitt.yoke (~(put by bitt.yoke) agent-duct incoming) =^ maybe-tang ap-core %+ ap-ingest %watch-ack |. (on-watch:ap-agent-core pax) @@ -1404,6 +1286,7 @@ =/ other-agent i.t.t.wire =/ =dock [other-ship other-agent] =/ agent-wire t.t.t.wire + =/ nonce=@ 0 :: =^ =sign:agent ap-core ?. ?=(%raw-fact -.unto) @@ -1424,48 +1307,106 @@ %- ap-move :_ ~ :^ hen %pass /nowhere [%c %warp our q.beak.yoke ~ %sing %b case /[mark.unto]] + |^ ^+ ap-core + :: %poke-ack has no nonce; ingest directly + :: + ?: ?=(%poke-ack -.sign) + ingest-and-check-error + :: if .agent-wire matches, it's an old pre-nonce subscription + :: + ?: (~(has by boat.yoke) sub-key) + run-sign + :: if an app happened to use a null wire, no-op + :: + ?: =(~ agent-wire) + on-missing + =/ has-nonce=(unit @ud) (slaw %ud (head agent-wire)) + ?: &(?=(~ has-nonce) ?=(%kick -.sign)) + on-weird-kick + :: pop nonce off .agent-wire and match against stored subscription + :: + ?> ?=(^ has-nonce) + =: nonce u.has-nonce + agent-wire (tail agent-wire) + == + ?~ got=(~(get by boar.yoke) sub-key) + on-missing + ?: =(nonce.u.got nonce) + run-sign + (on-bad-nonce nonce.u.got) :: - :: if subscription ack or close, handle before calling user code - :: - =? outbound.watches.yoke ?=(%kick -.sign) - %- ~(del by outbound.watches.yoke) - [agent-wire dock] - ?: ?& ?=(%watch-ack -.sign) - !(~(has by outbound.watches.yoke) [agent-wire dock]) - == - %- %: slog + ++ sub-key [agent-wire dock] + ++ ingest (ap-ingest ~ |.((on-agent:ap-agent-core agent-wire sign))) + ++ run-sign + ?- -.sign + %poke-ack !! + %fact + =^ tan ap-core ingest + ?~ tan ap-core + =. ap-core (ap-kill-down sub-key) + (ap-error -.sign leaf/"take %fact failed, closing subscription" u.tan) + :: + %kick + =: boar.yoke (~(del by boar.yoke) sub-key) + boat.yoke (~(del by boat.yoke) sub-key) + == + ingest-and-check-error + :: + %watch-ack + ?. (~(has by boat.yoke) sub-key) + %. ap-core + %+ trace odd.veb.bug.state :~ leaf+"{}: got ack for nonexistent subscription" leaf+"{}: {}" >wire=wire< - ~ == - ap-core + =? boar.yoke ?=(^ p.sign) (~(del by boar.yoke) sub-key) + :: + =. boat.yoke + ?^ p.sign (~(del by boat.yoke) sub-key) + :: + %+ ~(jab by boat.yoke) sub-key + |= val=[acked=? =path] + %. val(acked &) + %^ trace &(odd.veb.bug.state acked.val) + leaf/"{} 2nd watch-ack on {}" ~ + :: + ingest-and-check-error + == :: - =? outbound.watches.yoke ?=(%watch-ack -.sign) - ?^ p.sign - %- ~(del by outbound.watches.yoke) - [agent-wire dock] - %+ ~(jab by outbound.watches.yoke) [agent-wire dock] - |= [acked=? =path] - =. . - ?. acked - . - %- =/ =tape - "{}: received 2nd watch-ack on {}" - (slog leaf+tape ~) - . - [& path] + ++ on-missing + %. ap-core + %+ trace odd.veb.bug.state :~ + leaf+"{}: got {<-.sign>} for nonexistent subscription" + leaf+"{}: {<[nonce=nonce agent-wire]>}" + >wire=wire< + == :: - =^ maybe-tang ap-core - %+ ap-ingest ~ |. - (on-agent:ap-agent-core agent-wire sign) - :: if failed %fact handling, kill subscription + ++ on-weird-kick + %. run-sign + %+ trace odd.veb.bug.state :~ + leaf+"{}: got %kick for nonexistent subscription" + leaf+"{}: {}" + >wire=wire< + == :: - =? ap-core ?=(%fact -.sign) - (ap-update-subscription =(~ maybe-tang) p.dock q.dock agent-wire) - ?^ maybe-tang - (ap-error -.sign leaf/"closing subscription" u.maybe-tang) - ap-core + ++ on-bad-nonce + |= stored-nonce=@ + %. ap-core + %- slog :~ + =/ nonces [expected=stored-nonce got=nonce] + =/ ok |(?=(?(%fact %kick) -.sign) =(~ p.sign)) + leaf+"{}: stale {<-.sign>} {} ok={}" + :: + leaf+"{}: {}" + >wire=wire< + == + :: + ++ ingest-and-check-error + ^+ ap-core + =^ tan ap-core ingest + ?~(tan ap-core (ap-error -.sign leaf/"take {<-.sign>} failed" u.tan)) + -- :: +ap-install: install wrapper. :: ++ ap-install @@ -1499,24 +1440,18 @@ :: ++ ap-silent-delete ^+ ap-core - :: - %= ap-core - inbound.watches.yoke - (~(del by inbound.watches.yoke) agent-duct) - == + ap-core(bitt.yoke (~(del by bitt.yoke) agent-duct)) :: +ap-load-delete: load delete. :: ++ ap-load-delete ^+ ap-core :: - =/ maybe-incoming - (~(get by inbound.watches.yoke) agent-duct) + =/ maybe-incoming (~(get by bitt.yoke) agent-duct) ?~ maybe-incoming ap-core :: - =/ incoming u.maybe-incoming - =. inbound.watches.yoke - (~(del by inbound.watches.yoke) agent-duct) + =/ incoming u.maybe-incoming + =. bitt.yoke (~(del by bitt.yoke) agent-duct) :: =^ maybe-tang ap-core %+ ap-ingest ~ |. @@ -1550,12 +1485,76 @@ :: Must process leave first in case kick handler rewatches. :: ++ ap-kill-down - |= [=wire =dock] + |= [sub-wire=wire =dock] ^+ ap-core - :: =. ap-core - (ap-pass wire %agent dock %leave ~) - (ap-pass wire %huck dock %b %huck `sign-arvo`[%gall %unto %kick ~]) + :: we take care to include the nonce in the "kernel-facing" wire + :: + (ap-pass (ap-nonce-wire sub-wire dock) %agent dock %leave ~) + (ap-pass sub-wire %huck dock %b %huck `sign-arvo`[%gall %unto %kick ~]) + :: +ap-doff: kill old-style outgoing subscriptions + :: + ++ ap-doff + |= ship=(unit ship) + ^+ ap-core + =/ subs ~(tap in ~(key by boat.yoke)) + |- ^+ ap-core + ?~ subs ap-core + =+ [wyr dok]=i.subs + ?: &(?=(^ ship) !=(u.ship ship.dok)) + $(subs t.subs) + :: if we haven't created new-style (nonced) subscriptions yet, + :: kick the old-style (nonceless) one that's in use right now. + :: + ::NOTE yes, still safe for pre-release ships with nonce=1, + :: this makes a new flow but cleans it up right away. + :: + =? ap-core (gte 1 (~(got by boar.yoke) wyr dok)) + (ap-pass wyr %agent dok %leave ~) + $(subs t.subs) + :: +ap-rake: clean up the dead %leave's + :: + ++ ap-rake + |= all=? + =/ subs ~(tap in ~(key by boat.yoke)) + |^ ^+ ap-core + ?~ subs ap-core + =/ [=wire =dock] i.subs + =/ non (~(got by boar.yoke) wire dock) + ?: &(!all =(0 non)) + $(subs t.subs) + ?~ per=(scry-peer-state p.dock) + $(subs t.subs) + :: + =/ dud=(set duct) + =/ mod=^wire + :* %gall %use agent-name run-nonce.yoke + %out (scot %p p.dock) q.dock + '0' wire + == + %- ~(rep by by-duct.ossuary.u.per) + |= [[=duct =bone] out=(set duct)] + ^+ out + ?. ?& ?=([* [%gall %use @ @ %out @ @ @ *] *] duct) + =(mod i.t.duct(i.t.t.t.t.t.t.t '0')) + == + out + ?: (~(has in closing.u.per) bone) out + ~> %slog.0^leaf+"gall: rake {}" + (~(put in out) duct) + :: + %- ap-move + (turn ~(tap in dud) |=(d=duct [+.d %pass -.d %a %cork p.dock])) + :: + ++ scry-peer-state + |= her=ship + ~+ ^- (unit peer-state:ames) + =/ sky (rof [~ ~] %ax [our %$ da+now] /peers/(scot %p her)) + ?: |(?=(~ sky) ?=(~ u.sky)) + ~ + =/ sat !<(ship-state:ames q.u.u.sky) + ?>(?=(%known -.sat) (some +.sat)) + -- :: +ap-mule: run virtualized with intercepted scry, preserving type :: :: Compare +mute and +mule. Those pass through scry, which @@ -1621,11 +1620,10 @@ `ap-core :: =. agent.yoke &++.p.result - =/ moves (zing (turn -.p.result ap-from-internal)) - =. inbound.watches.yoke - (ap-handle-kicks moves) + =/ moves (zing (turn -.p.result ap-from-internal)) + =. bitt.yoke (ap-handle-kicks moves) (ap-handle-peers moves) - :: +ap-handle-kicks: handle cancels of inbound.watches + :: +ap-handle-kicks: handle cancels of bitt.watches :: ++ ap-handle-kicks ~/ %ap-handle-kicks @@ -1641,8 +1639,8 @@ :: =/ quit-map=bitt (malt (turn quits |=(=duct [duct *[ship path]]))) - (~(dif by inbound.watches.yoke) quit-map) - :: +ap-handle-peers: handle new outbound.watches + (~(dif by bitt.yoke) quit-map) + :: +ap-handle-peers: handle new boat.watches :: ++ ap-handle-peers ~/ %ap-handle-peers @@ -1656,34 +1654,59 @@ ?: ?=([* %pass * %g %deal * * %leave *] move) =/ =wire p.move.move ?> ?=([%use @ @ %out @ @ *] wire) - =/ short-wire t.t.t.t.t.t.wire - =/ =dock [q.p q]:q.move.move - =. outbound.watches.yoke - (~(del by outbound.watches.yoke) [short-wire dock]) + =/ =dock [q.p q]:q.move.move + =/ sys-wire=^wire (scag 6 `^wire`wire) + =/ sub-wire=^wire (slag 6 `^wire`wire) + :: + ?. (~(has by boat.yoke) sub-wire dock) + %. $(moves t.moves) + %^ trace odd.veb.bug.state + leaf/"gall: {} missing subscription, got %leave" ~ + =/ nonce=@ (~(got by boar.yoke) sub-wire dock) + =. p.move.move + %+ weld sys-wire + (ap-nonce-wire sub-wire dock) + =: boat.yoke (~(del by boat.yoke) [sub-wire dock]) + boar.yoke (~(del by boar.yoke) [sub-wire dock]) + == + :: if nonce = 0, this was a pre-nonce subscription so later + :: subscriptions need to start subscribing on the next nonce + :: + =? sub-nonce.yoke =(nonce 0) +(sub-nonce.yoke) $(moves t.moves, new-moves [move new-moves]) ?. ?=([* %pass * %g %deal * * ?(%watch %watch-as) *] move) $(moves t.moves, new-moves [move new-moves]) =/ =wire p.move.move ?> ?=([%use @ @ %out @ @ *] wire) - =/ short-wire t.t.t.t.t.t.wire - =/ =dock [q.p q]:q.move.move - =/ =path - ?- -.r.q.move.move - %watch path.r.q.move.move - %watch-as path.r.q.move.move - == - ?: (~(has by outbound.watches.yoke) short-wire dock) + =/ sys-wire=^wire (scag 6 `^wire`wire) + =/ sub-wire=^wire (slag 6 `^wire`wire) + =/ [=dock =deal] [[q.p q] r]:q.move.move + :: + ?: (~(has by boat.yoke) sub-wire dock) =. ap-core =/ =tang - ~[leaf+"subscribe wire not unique" >agent-name< >short-wire< >dock<] - =/ have - (~(got by outbound.watches.yoke) short-wire dock) + ~[leaf+"subscribe wire not unique" >agent-name< >sub-wire< >dock<] + =/ have (~(got by boat.yoke) sub-wire dock) %- (slog >out=have< tang) (ap-error %watch-not-unique tang) :: reentrant, maybe bad? $(moves t.moves) - =. outbound.watches.yoke - (~(put by outbound.watches.yoke) [short-wire dock] [| path]) - $(moves t.moves, new-moves [move new-moves]) + :: + ::NOTE 0-check guards against pre-release bug + =? p.move.move !=(0 sub-nonce.yoke) + (weld sys-wire [(scot %ud sub-nonce.yoke) sub-wire]) + %_ $ + moves t.moves + new-moves [move new-moves] + sub-nonce.yoke +(sub-nonce.yoke) + :: + boat.yoke + %+ ~(put by boat.yoke) [sub-wire dock] + :- acked=| + path=?+(-.deal !! %watch path.deal, %watch-as path.deal) + :: + boar.yoke + (~(put by boar.yoke) [sub-wire dock] sub-nonce.yoke) + == -- -- :: +call: request @@ -1725,13 +1748,152 @@ %sear mo-abet:(mo-filter-queue:mo-core ship.task) %jolt mo-abet:(mo-jolt:mo-core dude.task our desk.task) %idle mo-abet:(mo-idle:mo-core dude.task) + %load mo-abet:(mo-load:mo-core +.task) %nuke mo-abet:(mo-nuke:mo-core dude.task) + %doff mo-abet:(mo-doff:mo-core +.task) + %rake mo-abet:(mo-rake:mo-core +.task) + %spew mo-abet:(mo-spew:mo-core veb.task) + %sift mo-abet:(mo-sift:mo-core dudes.task) %trim [~ gall-payload] %vega [~ gall-payload] == :: +load: recreate vane; note, only valid if called from pupa :: -++ load !! +++ load + |^ |= old=spore-any + =? old ?=(%7 -.old) (spore-7-to-8 old) + =? old ?=(%8 -.old) (spore-8-to-9 old) + =? old ?=(%9 -.old) (spore-9-to-10 old) + =? old ?=(%10 -.old) (spore-10-to-11 old) + ?> ?=(%11 -.old) + gall-payload(state old) + :: + +$ spore-any $%(spore spore-7 spore-8 spore-9 spore-10) + +$ spore-10 + $: %10 + system-duct=duct + outstanding=(map [wire duct] (qeu remote-request)) + contacts=(set ship) + eggs=(map term egg-10) + blocked=(map term (qeu blocked-move)) + =bug + == + +$ egg-10 + $: control-duct=duct + run-nonce=@t + sub-nonce=@ + live=? + =stats + =bitt + =boat + =boar + old-state=(each vase vase) + =beak + marks=(map duct mark) + == + +$ spore-9 + $: %9 + system-duct=duct + outstanding=(map [wire duct] (qeu remote-request-9)) + contacts=(set ship) + eggs=(map term egg-10) + blocked=(map term (qeu blocked-move)) + =bug + == + :: + +$ remote-request-9 ?(remote-request %cork) + :: + +$ spore-8 + $: %8 + system-duct=duct + outstanding=(map [wire duct] (qeu remote-request-9)) + contacts=(set ship) + eggs=(map term egg-8) + blocked=(map term (qeu blocked-move)) + == + +$ egg-8 + $: control-duct=duct + run-nonce=@t + live=? + =stats + watches=watches-8 + old-state=(each vase vase) + =beak + marks=(map duct mark) + == + +$ watches-8 [inbound=bitt outbound=boat-8] + +$ boat-8 (map [wire ship term] [acked=? =path]) + +$ spore-7 + $: %7 + wipe-eyre-subs=_| ::NOTE band-aid for #3196 + system-duct=duct + outstanding=(map [wire duct] (qeu remote-request-9)) + contacts=(set ship) + eggs=(map term egg-8) + blocked=(map term (qeu blocked-move)) + == + :: + ++ spore-7-to-8 + |= old=spore-7 + ^- spore-8 + :- %8 + =. eggs.old + %- ~(urn by eggs.old) + |= [a=term e=egg-8] + :: kiln will kick off appropriate app revival + :: + e(old-state [%| p.old-state.e]) + +>.old + :: + ++ spore-8-to-9 + |= old=spore-8 + ^- spore-9 + =- old(- %9, eggs -, blocked [blocked.old *bug]) + %- ~(run by eggs.old) + |= =egg-8 + ^- egg-10 + =/ [=bitt =boat =boar] (watches-8-to-9 watches.egg-8) + :* control-duct.egg-8 + run-nonce.egg-8 + sub-nonce=1 + live.egg-8 + stats.egg-8 + bitt boat boar + [old-state beak marks]:egg-8 + == + :: + ++ watches-8-to-9 + |= watches-8 + ^- [bitt boat boar] + [inbound outbound (~(run by outbound) |=([acked=? =path] nonce=0))] + :: + :: remove %cork + :: + ++ spore-9-to-10 + |= old=spore-9 + =- old(- %10, outstanding -) + %- ~(run by outstanding.old) + |= q=(qeu remote-request-9) + %- ~(gas to *(qeu remote-request)) + %+ murn ~(tap to q) + |=(r=remote-request-9 ?:(?=(%cork r) ~ `r)) + :: + :: removed live + :: changed old-state from (each vase vase) to [%| vase] + :: added code + :: + ++ spore-10-to-11 + |= old=spore-10 + ^- spore + %= old + - %11 + eggs + %- ~(urn by eggs.old) + |= [a=term e=egg-10] + ^- egg + e(|3 |4.e(|4 `|8.e(old-state [%| p.old-state.e]))) + == + -- :: +scry: standard scry :: ++ scry @@ -1753,8 +1915,16 @@ (sort ~(tap by queued) aor) :: =/ running - =/ active (~(run by yokes.state) |=(yoke [%.y +<])) - (sort ~(tap by active) aor) + %+ turn (sort ~(tap by yokes.state) aor) + |= [dap=term =yoke] + ^- mass + =/ met=(list mass) + =/ dat (mo-peek:mo | dap [~ ship] %x /whey/mass) + ?: ?=(?(~ [~ ~]) dat) ~ + (fall ((soft (list mass)) q.q.u.u.dat) ~) + ?~ met + dap^&+yoke + dap^|+(welp met dot+&+yoke ~) :: =/ maz=(list mass) :~ [%foreign %.y contacts.state] @@ -1797,6 +1967,28 @@ acc (~(put in acc) [dude -.agent.yoke]) :: + ?: ?& =(%f care) + =(~ path) + =([%$ %da now] coin) + =(our ship) + == + :+ ~ ~ + :- %nonces !> ^- (map dude @) + (~(run by yokes.state) |=(yoke sub-nonce)) + :: + ?: ?& =(%n care) + ?=([@ @ ^] path) + =([%$ %da now] coin) + =(our ship) + == + ?~ yok=(~(get by yokes.state) dap) + [~ ~] + =/ [=^ship =term =wire] + [(slav %p i.path) i.t.path t.t.path] + ?~ nonce=(~(get by boar.u.yok) [wire ship term]) + [~ ~] + [~ ~ atom+!>(u.nonce)] + :: ?. =(our ship) ~ ?. =([%$ %da now] coin) @@ -1806,7 +1998,7 @@ ?. ?=(^ path) ~ =/ =routes [~ ship] - (mo-peek:mo dap routes care path) + (mo-peek:mo & dap routes care path) :: +stay: save without cache; suspend non-%base agents :: :: TODO: superfluous? see +molt @@ -1818,12 +2010,12 @@ |= =yoke ^- egg %= yoke + code ~ agent + :- %| ?: ?=(%| -.agent.yoke) - [%| p.agent.yoke] - ?: =(%base q.beak.yoke) - [%& on-save:p.agent.yoke] - [%| on-save:p.agent.yoke] + p.agent.yoke + on-save:p.agent.yoke == :: +take: response :: diff --git a/pkg/arvo/sys/vane/jael.hoon b/pkg/arvo/sys/vane/jael.hoon index d335f2359..2f1335564 100644 --- a/pkg/arvo/sys/vane/jael.hoon +++ b/pkg/arvo/sys/vane/jael.hoon @@ -105,11 +105,8 @@ $>(%wake gift:behn) :: == :: $: %gall :: - $> $? %onto :: - %unto :: - == :: - gift:gall :: - == + $>(%unto gift:gall) :: + == :: == :: -- :: :: :::: @@ -306,28 +303,6 @@ %^ poke-watch hen %azimuth %+ fall node.tac (need (de-purl:html 'http://eth-mainnet.urbit.org:8545')) - =. +>.$ - :: get everything from /app/azimuth because jael subscriptions - :: seem to be flaky for now - :: - ?: & - %- curd =< abet - (sources:~(feel su hen now pki etn) ~ [%| %azimuth]) - :: - ?- (clan:title our) - %czar - %- curd =< abet - (sources:~(feel su hen now pki etn) ~ [%| %azimuth]) - :: - * - =. +>.$ - %- curd =< abet - %+ sources:~(feel su hen now pki etn) - (silt (turn spon-points head)) - [%| %azimuth] - %- curd =< abet - (sources:~(feel su hen now pki etn) ~ [%& (need spon-ship)]) - == :: =. moz %+ weld moz @@ -391,7 +366,7 @@ :: [%listen whos=(set ship) =source] :: %listen - ~& [%jael-listen whos source]:tac + :: %- (slog leaf+"jael: listen {} {}" ~) %- curd =< abet (sources:~(feel su hen now pki etn) [whos source]:tac) :: @@ -484,12 +459,12 @@ :: [%vega ~] :: %vega - +>.$:: + +>.$ + :: :: in response to memory pressure :: [%trim p=@ud] :: %trim - ::TODO consider %ruin-ing long-offline comets +>.$ :: :: watch private keys @@ -529,7 +504,7 @@ %ruin ::NOTE we blast this out to _all_ known ducts, because the common :: use case for this is comets, about who nobody cares. - =/ dus ~(key by yen.zim.pki) + =/ dus (~(uni in nel.zim.pki) ~(key by yen.zim.pki)) =/ sus ~(. su hen now pki etn) =/ sis ~(tap in ships.tac) |- @@ -572,10 +547,6 @@ =/ ships (~(get ju ship-sources-reverse.etn) source-id) %- curd =< abet (sources:~(feel su hen now pki etn) ships source) - :: - [%gall %onto *] - ~& [%jael-onto tea hin] - +>.$ :: [%gall %unto *] ?- +>-.hin @@ -758,12 +729,10 @@ ++ subscribers-on-ship |= =ship ^- (set duct) - =/ specific-subs (~(get ju ney.zim) ship) - =/ general-subs=(set duct) - ?: ?=(?(%czar %king %duke) (clan:title ship)) - nel.zim - ~ - (~(uni in specific-subs) general-subs) + :: union of general and ship-specific subs + :: + %- ~(uni in nel.zim) + (~(get ju ney.zim) ship) :: ++ feed |_ :: hen: subscription source @@ -1019,7 +988,7 @@ =| lex=state-2 |= $: :: now: current time :: eny: unique entropy - :: ski: namespace resolver + :: rof: namespace resolver :: now=@da eny=@uvJ diff --git a/pkg/arvo/sys/vane/khan.hoon b/pkg/arvo/sys/vane/khan.hoon index 62b1999b9..c35efebd5 100644 --- a/pkg/arvo/sys/vane/khan.hoon +++ b/pkg/arvo/sys/vane/khan.hoon @@ -102,15 +102,15 @@ =/ =beam (need (de-beam t.wire)) ?>(?=([@ ~] s.beam) beam(s i.s.beam)) :: -++ start-spider - |= =vase - ^- note - [%g %deal [our our] %spider %poke %spider-start vase] +++ poke-spider + |= [hen=duct =cage] + ^- move + [hen %pass //g %g %deal [our our] %spider %poke cage] :: ++ watch-spider - |= =path - ^- note - [%g %deal [our our] %spider %watch path] + |= [hen=duct =path] + ^- move + [hen %pass //g %g %deal [our our] %spider %watch path] -- =| khan-state =* state - @@ -134,22 +134,8 @@ %born [~ khan-gate(hey hen, tic 0)] :: - %fard - =/ tid=@ta - %^ cat 3 - 'khan-fyrd--' - (scot %uv (sham (mix tic eny))) - =. tic +(tic) - =* fyd p.task - =/ =beak (get-beak bear.fyd now) - =/ args [~ `tid beak name.fyd q.args.fyd] - :_ khan-gate - %+ turn - :~ (watch-spider /thread-result/[tid]) - (start-spider !>(args)) - == - |=(=note ^-(move [hen %pass //g note])) - :: + %fard (bard hen 'khan-fyrd--' bear.p.task %| [name args]:p.task) + %lard (bard hen 'khan-lard--' bear.task %& shed.task) %fyrd =* fyd p.task =/ =beak (get-beak bear.fyd now) @@ -160,6 +146,23 @@ =- [[hen %pass wire -]~ khan-gate] [%k %fard bear.fyd name.fyd p.q.args.fyd vase] == +:: +++ bard + |= [hen=duct prefix=@ta =bear payload=(each shed [name=term args=cage])] + ^- [(list move) _khan-gate] + =/ =tid:rand (cat 3 prefix (scot %uv (sham (mix tic eny)))) + =/ =beak (get-beak bear now) + =/ =cage + ?- -.payload + %& [%spider-inline !>([~ `tid beak p.payload])] + %| [%spider-start !>([~ `tid beak [name q.args]:p.payload])] + == + =. tic +(tic) + :_ khan-gate + :~ (watch-spider hen /thread-result/[tid]) + (poke-spider hen cage) + == +:: :: +load: migrate an old state to a new khan version :: ++ load @@ -195,7 +198,7 @@ ?+ p.cag ~&(bad-fact+p.cag !!) %thread-fail =/ =tang !<(tang q.cag) - %- (slog 'khan-fact' tang) + :: %- (slog 'khan-fact' tang) [hen %give %arow %| p.cag tang]~ :: %thread-done diff --git a/pkg/arvo/sys/zuse.hoon b/pkg/arvo/sys/zuse.hoon index 6c48fe74e..d57f527ff 100644 --- a/pkg/arvo/sys/zuse.hoon +++ b/pkg/arvo/sys/zuse.hoon @@ -4,7 +4,7 @@ => ..lull ~% %zuse ..part ~ |% -++ zuse %418 +++ zuse %414 :: :: :: :::: :: :: (2) engines :: :: :: @@ -3843,6 +3843,102 @@ ~ (some (~(run by lum) need)) -- ::dejs-soft + :: + ++ klr :: styx/stub engine + =, dill + |% + ++ make :: stub from styx + |= a=styx ^- stub + =| b=stye + %+ reel + |- ^- stub + %- zing %+ turn a + |= a=$@(@t (pair styl styx)) + ?@ a [b (tuba (trip a))]~ + ^$(a q.a, b (styd p.a b)) + :: + |= [a=(pair stye (list @c)) b=stub] + ?~ b [a ~] + ?. =(p.a p.i.b) [a b] + [[p.a (weld q.a q.i.b)] t.b] + :: + ++ styd :: stye from styl + |= [a=styl b=stye] ^+ b :: with inheritance + :+ ?~ p.a p.b + ?~ u.p.a ~ + (~(put in p.b) u.p.a) + (fall p.q.a p.q.b) + (fall q.q.a q.q.b) + :: + ++ lent-char + |= a=stub ^- @ + (roll (lnts-char a) add) + :: + ++ lnts-char :: stub text lengths + |= a=stub ^- (list @) + %+ turn a + |= a=(pair stye (list @c)) + (lent q.a) + :: + ++ brek :: index + incl-len of + |= [a=@ b=(list @)] :: stub pair w/ idx a + =| [c=@ i=@] + |- ^- (unit (pair @ @)) + ?~ b ~ + =. c (add c i.b) + ?: (gte c a) + `[i c] + $(i +(i), b t.b) + :: + ++ pact :: condense stub + |= a=stub + ^- stub + ?~ a ~ + ?~ t.a a + ?. =(p.i.a p.i.t.a) [i.a $(a t.a)] + =. q.i.t.a (weld q.i.a q.i.t.a) + $(a t.a) + :: + ++ slag :: slag stub + |= [a=@ b=stub] + ^- stub + ?: =(0 a) b + ?~ b ~ + =+ c=(lent q.i.b) + ?: =(c a) t.b + ?: (gth c a) + [[p.i.b (^slag a q.i.b)] t.b] + $(a (sub a c), b t.b) + :: + ++ scag :: scag stub + |= [a=@ b=stub] + ^- stub + ?: =(0 a) ~ + ?~ b ~ + =+ c=(lent q.i.b) + ?: (gth c a) + [p.i.b (^scag a q.i.b)]~ + :- i.b + $(a (sub a c), b t.b) + :: + ++ swag :: swag stub + |= [[a=@ b=@] c=stub] + (scag b (slag a c)) + :: + ++ wail :: overlay stub + |= [a=stub b=@ c=stub d=@c] + ^- stub + ;: weld + (scag b a) + :: + =+ e=(lent-char a) + ?: (lte b e) ~ + [*stye (reap (sub b e) d)]~ + :: + c + (slag (add b (lent-char c)) a) + == + -- :: klr -- :: |cloy: clay helpers :: @@ -4928,7 +5024,7 @@ =< q.q %- need %- need (rof ~ %j `beam`[[our %sein %da now] /(scot %p who)]) -- - :: middle core: for userspace use, with .^ + :: middle core: stateless queries for default numeric sponsorship :: => |% :: :: ++clan:title @@ -4968,7 +5064,7 @@ %pawn (end 4 who) == -- - :: surface core: stateless queries for default numeric sponsorship + :: surface core: for userspace use, with .^ :: |% :: :: ++cite:title @@ -5003,13 +5099,25 @@ %j /(scot %p our)/sein/(scot %da now)/(scot %p who) == + :: +team was created with two meanings: + :: A. her / her moon + :: B. whoever should be able to control her ship + :: + :: these two things aren't obviously equal anymore, + :: and it's more important for +team to satisfy B than A, + :: so now +team just means "her". + :: + :: (ships can definitely be trusted to control themselves) :: :: ++team:title - ++ team :: our / our moon - |= [our=ship who=ship] + ++ team :: her + |= [her=ship who=ship] ^- ? - ?| =(our who) - &(?=(%earl (clan who)) =(our (^sein who))) - == + =(her who) + :: :: ++moon:title + ++ moon :: her moon + |= [her=ship who=ship] + ^- ? + &(=(%earl (clan who)) =(her (^sein who))) -- ::title :: :: :::: ++milly :: (2k) milliseconds diff --git a/pkg/arvo/ted/aqua/dill.hoon b/pkg/arvo/ted/aqua/dill.hoon index e001a65dc..e7cb19017 100644 --- a/pkg/arvo/ted/aqua/dill.hoon +++ b/pkg/arvo/ted/aqua/dill.hoon @@ -17,15 +17,16 @@ %+ roll blits |= [b=blit:dill line=tape] ?- -.b - %lin (tape p.b) + %put (tape p.b) %klr (tape (zing (turn p.b tail))) - %mor ~& "{}: {line}" "" + %nel ~& "{}: {line}" "" %hop line %bel line %clr "" %sag ~& [%save-jamfile-to p.b] line %sav ~& [%save-file-to p.b] line %url ~& [%activate-url p.b] line + %wyp "" == ~? !=(~ last-line) last-line ~ diff --git a/pkg/arvo/ted/azimuth/load.hoon b/pkg/arvo/ted/azimuth/load.hoon new file mode 100644 index 000000000..c440b20b0 --- /dev/null +++ b/pkg/arvo/ted/azimuth/load.hoon @@ -0,0 +1,15 @@ +/- spider, *dice +/+ strand, strandio, naive, dice +=, strand=strand:spider +^- thread:spider +|= arg=vase +=/ m (strand ,vase) +^- form:m +=/ url=tape + ?~ lur=!<((unit tape) arg) + "https://bootstrap.urbit.org/mainnet.azimuth-snapshot" + u.lur +;< =cord bind:m (fetch-cord:strandio url) +=+ ;;(snap=snap-state (cue cord)) +;< ~ bind:m (poke-our:strandio %azimuth %azimuth-poke !>([%load snap])) +(pure:m !>(~)) diff --git a/pkg/arvo/ted/diff.hoon b/pkg/arvo/ted/diff.hoon index e74caa15c..234eb1ee4 100644 --- a/pkg/arvo/ted/diff.hoon +++ b/pkg/arvo/ted/diff.hoon @@ -14,8 +14,8 @@ =/ [b-path=path shallow=flag] ?:(?=([^ *] b) b [`path`b |]) =/ a-beam (need (de-beam a-path)) =/ b-beam (need (de-beam b-path)) -;< a-dome=dome bind:m (get-from-clay a-beam dome %v) -;< b-dome=dome bind:m (get-from-clay b-beam dome %v) +;< a-domo=domo bind:m (get-from-clay a-beam domo %v) +;< b-domo=domo bind:m (get-from-clay b-beam domo %v) ;< diffs=(list diff-type) bind:m (diff-beams a-beam b-beam) %- pure:m !> ^- tang diff --git a/pkg/arvo/ted/dns/address.hoon b/pkg/arvo/ted/dns/address.hoon index faf5b902c..078e00ad7 100644 --- a/pkg/arvo/ted/dns/address.hoon +++ b/pkg/arvo/ted/dns/address.hoon @@ -25,17 +25,17 @@ |= if=@if =/ m (strand ,~) ^- form:m - =/ collector-app `dock`[~zod %dns-collector] + =/ collector-app `dock`[~deg %dns-collector] ;< good=? bind:m (self-check-http:libdns |+if 2) ?. good %+ strand-fail:strandio %bail-early-self-check [>"couldn't access ship on port 80"< ~] + ;< our=@p bind:m get-our:strandio + ;< ~ bind:m (watch:strandio /response collector-app /(scot %p our)) ;< ~ bind:m (poke:strandio collector-app %dns-address !>([%if if])) =/ msg=cord (cat 3 'request for DNS sent to ' (scot %p p:collector-app)) ;< ~ bind:m (app-message:strandio %dns msg ~) - ;< our=@p bind:m get-our:strandio - ;< ~ bind:m (watch:strandio /sub collector-app /(scot %p our)) =/ msg=cord (cat 3 'awaiting response from ' (scot %p p:collector-app)) ;< ~ bind:m (app-message:strandio %dns msg ~) @@ -45,7 +45,7 @@ =/ m (strand ,~) ^- form:m ;< our=ship bind:m get-our:strandio - ;< =cage bind:m (take-fact:strandio /(scot %p our)) + ;< =cage bind:m (take-fact:strandio /response) ?> ?=(%dns-binding p.cage) =/ =binding:dns !<(binding:dns q.cage) ;< good=? bind:m (turf-confirm-install:libdns turf.binding) diff --git a/pkg/arvo/ted/eval.hoon b/pkg/arvo/ted/eval.hoon new file mode 100644 index 000000000..d4158d2fc --- /dev/null +++ b/pkg/arvo/ted/eval.hoon @@ -0,0 +1,30 @@ +/- spider, eval=ted-eval +/+ strandio +=, strand=strand:spider +^- thread:spider +|= raw=vase +=/ m (strand ,vase) +^- form:m +=+ !<(arg=(unit inpt:eval) raw) +?~ arg + (strand-fail:strand %no-input ~) +?@ u.arg + ?~ u.arg + (strand-fail:strand %no-command ~) + (eval-hoon:strandio (ream u.arg) ~) +?~ p.u.arg + (strand-fail:strand %no-command ~) +;< =beak bind:m get-beak:strandio +=/ paz=(list path) q.u.arg +=/ bez=(list beam) ~ +|- +?~ paz + (eval-hoon:strandio (ream p.u.arg) bez) +=/ bem + %+ fall + (de-beam i.paz) + [beak i.paz] +;< has=? bind:m (check-for-file:strandio bem) +?. has + (strand-fail:strand %no-file >bem< ~) +$(paz t.paz, bez [bem bez]) diff --git a/pkg/arvo/ted/khan-eval.hoon b/pkg/arvo/ted/khan-eval.hoon new file mode 100644 index 000000000..f0719a31f --- /dev/null +++ b/pkg/arvo/ted/khan-eval.hoon @@ -0,0 +1,59 @@ +/- spider, eval=ted-eval +/+ strandio +=, strand=strand:spider +^- thread:spider +|= raw=vase +=/ m (strand ,vase) +^- form:m +=+ !<(arg=(unit inpt:eval) raw) +?~ arg + (strand-fail:strand %no-input ~) +=/ com + ?@ u.arg + u.arg + p.u.arg +?~ com + (strand-fail:strand %no-command ~) +;< =beak bind:m get-beak:strandio +=/ paz=(list path) + ?@ u.arg + ~ + q.u.arg +=/ bez=(list beam) + :~ + [beak /sur/spider/hoon] + [beak /lib/strandio/hoon] + == +=/ =shed:khan + |- + ?~ paz + ;< vax=vase + bind:m + (eval-hoon:strandio (ream com) bez) + !<(shed:khan vax) + =/ bem + %+ fall + (de-beam i.paz) + [beak i.paz] + ;< has=? bind:m (check-for-file:strandio bem) + ?. has + (strand-fail:strand %no-file >bem< ~) + $(paz t.paz, bez [bem bez]) +=/ wir /test/wire +:: TODO: if we're building the thread against user-provided dependencies, can +:: TODO: we always use the default beak here? +;< ~ bind:m (send-thread:strandio beak shed wir) +;< [wer=wire sig=sign-arvo] bind:m take-sign-arvo:strandio +?> =(wir wer) +?> ?=(%khan -.sig) +?> ?=(%arow +<.sig) +=/ vow ,.+>.sig +?- -.vow + %& (pure:m q.p.vow) + %| (strand-fail:strand %child-failed +.vow) +== +:: tests: +:: success +:: -khan-eval '=/ m (strand ,vase) ;< ~ bind:m (poke [~zod %hood] %helm-hi !>(\'\')) (pure:m !>(\'success\'))' +:: failure +:: -khan-eval '=/ m (strand ,vase) ;< vax=vase bind:m (eval-hoon [%zpzp ~] ~) (pure:m !>(\'success\'))' diff --git a/pkg/arvo/ted/naive-csv.hoon b/pkg/arvo/ted/naive-csv.hoon index 3ce3029eb..7c801469c 100644 --- a/pkg/arvo/ted/naive-csv.hoon +++ b/pkg/arvo/ted/naive-csv.hoon @@ -33,10 +33,6 @@ naive, naive-tx=naive-transactions, *strandio -:: starting snapshot. this may not be the right starting point once we have -:: clay tombstoning and the snapshot may be updated -:: -/* snap %azimuth-snapshot /app/azimuth/version-0/azimuth-snapshot :: =, strand=strand:spider =, jael @@ -50,7 +46,7 @@ +$ address address:naive :: @ux +$ keccak @ux :: used for transaction and roll hashes +$ blocknum number:block :: @udblocknumber - +$ net net:dice :: ?(%mainnet %ropsten %local %default) + +$ net net:dice :: ?(%mainnet %goerli %local %default) +$ roll-dat :: all data required for each roll [[gas=@ud sender=address] =effects:naive] +$ block-dat :: all data required for each block @@ -103,7 +99,11 @@ ;< =events bind:m (scry events /gx/azimuth/logs/noun) =/ [naive-contract=address chain-id=@] [naive chain-id]:(get-network:dice net) - =/ snap=snap-state:dice snap + ;< =bowl:spider bind:m get-bowl + =/ snap=snap-state:dice + .^ snap-state:dice %gx + /(scot %p our.bowl)/azimuth/(scot %da now.bowl)/last-snap/noun + == :: ;< ~ bind:m %- flog-text %+ weld "naive-csv: processing {} ethereum logs " diff --git a/pkg/arvo/ted/test.hoon b/pkg/arvo/ted/test.hoon index 43a81700c..fb4064bd5 100644 --- a/pkg/arvo/ted/test.hoon +++ b/pkg/arvo/ted/test.hoon @@ -44,10 +44,6 @@ %+ turn ~(tap by paths-to-tests) |= [=path test-arms=(list test-arm)] ^- (list test) - :: strip off leading 'tests' from :path - :: - ?. ?=([%tests *] path) ~ - =/ path t.path ::NOTE TMI :: for each test, add the test's name to :path :: %+ turn test-arms @@ -108,7 +104,16 @@ |= arg=vase =/ m (strand ,vase) ^- form:m +;< =bowl:strand bind:m get-bowl:strandio =/ paz=(list path) + :: if no args, test everything under /=base=/tests + :: + ?~ q.arg + ~[/(scot %p our.bowl)/[q.byk.bowl]/(scot %da now.bowl)/tests] + :: else cast path to ~[path] if needed + :: + ?@ +<.q.arg + [(tail !<([~ path] arg)) ~] (tail !<([~ (list path)] arg)) =/ bez=(list beam) (turn paz |=(p=path ~|([%test-not-beam p] (need (de-beam p))))) diff --git a/pkg/arvo/tests/run/hints.hoon b/pkg/arvo/tests/run/hints.hoon deleted file mode 100644 index 7481b105b..000000000 --- a/pkg/arvo/tests/run/hints.hoon +++ /dev/null @@ -1,21 +0,0 @@ -:: Test that these hints do not crash the runtime -:: there is no need to include the hints for dynamic %bout -:: since all hoon tests exersize dynamic %bout -|% -:: these test that the hilt-trace hints -:: are safe to run or ignore -++ test-hela-hilt - ~> %hela - ~ -++ test-nara-hilt - ~> %nara - ~ -:: these test that the hint-trace hints -:: are safe to run or ignore -++ test-hela-hint - ~> %hela.[1 leaf+"test-hela-trace-hint"] - ~ -++ test-nara-hint - ~> %nara.[1 leaf+"test-nara-trace-hint"] - ~ --- diff --git a/pkg/autoprop/app/autoprop.hoon b/pkg/autoprop/app/autoprop.hoon new file mode 100644 index 000000000..76c3eaa19 --- /dev/null +++ b/pkg/autoprop/app/autoprop.hoon @@ -0,0 +1,323 @@ +:: autoprop: make pills & props when desk contents change +:: +:: link at the dojo command line: +:: |link %autoprop +:: +:: auto-build a new .urb/put/latest-solid.pill: +:: +latest-solid solid %kids %garden +:: +:: stop auto-building latest-solid: +:: -latest-solid +:: +:: auto-build a new .urb/put/somedesk.jam: +:: +some-desk desk %somedesk +:: +:: see currently configured build tasks: +:: ? +:: +:: run task right now: +:: !latest-solid +:: +/+ libpill=pill, shoe, verb, dbug, default-agent +:: +=, clay +:: +|% ++$ state-0 + $: %0 + make=(map @ta [next=(unit @da) =task]) :: things to make + hear=(set desk) :: observed desks + vers=path :: runtime version + sole=sole-id :: the way out + == +:: ++$ sole-id sole-id:sole:shoe +:: ++$ task + $% pill + prop + == +:: ++$ pill + $% [%ivory base=desk] + [%solid base=desk etc=(set desk)] + [%brass base=desk etc=(set desk)] + == +:: ++$ prop + $% [%desk =desk] + == +:: ++$ command + $% [%put name=@ta =task] :: configure pill build + [%del name=@ta] :: remove pill build + [%see ~] :: help & current config + [%run name=@ta] :: force build + == +:: ++$ card card:shoe +:: +++ delay ~d5 +-- +=| state-0 +=* state - +:: +%+ verb | +%- agent:dbug +^- agent:gall +%- (agent:shoe command) +^- (shoe:shoe command) +|_ =bowl:gall ++* this . + def ~(. (default-agent this %|) bowl) + des ~(. (default:shoe this command) bowl) + rev rev:.^(vere %$ /(scot %p our.bowl)//(scot %da now.bowl)/zen/ver) +:: +++ on-init + ^- (quip card _this) + :_ this(vers rev) + [%pass /vers %arvo %b %wait (add now.bowl ~m5)]~ +:: +++ on-save !>(state) +++ on-load + |= old=vase + ^- (quip card _this) + [~ this(state !<(state-0 old))] +:: +++ command-parser + |= =sole-id + ^+ |~(nail *(like [? command])) + %+ pick + (cold [%see ~] wut) + |^ ;~ pose + (stag %put ;~(plug (ifix [lus ace] sym) ;~(pose pil pro))) + ;~(plug (cold %del hep) sym) + ;~(plug (cold %run zap) sym) + == + :: + ++ pil + ;~ pose + ;~(plug (perk %ivory ~) ;~(pfix ace des)) + ;~(plug (perk %solid ~) ;~(pfix ace dez)) + ;~(plug (perk %brass ~) ;~(pfix ace dez)) + == + :: + ++ pro + ;~(plug (perk %desk ~) ;~(pfix ace des)) + :: + ++ des + ;~(pfix cen sym) + :: + ++ dez + ;~ plug + des + ;~ pose + ;~(pfix ace (cook ~(gas in *(set desk)) (more ace des))) + (easy ~) + == + == + -- +:: +++ on-command + |= [=sole-id =command] + ^- (quip card _this) + ?- -.command + %put + =* task task.command + =/ targ=(set desk) + ?- -.task + %ivory [base.task ~ ~] + ?(%solid %brass) (~(put in etc.task) base.task) + %desk [desk.task ~ ~] + == + =/ news (~(dif in targ) hear) + =. hear (~(uni in hear) targ) + =. make (~(put by make) name.command `now.bowl task.command) + :_ this + %+ turn ~(tap in news) + |= =desk + :+ %pass /desk/[desk] + [%arvo %c %warp our.bowl desk `[%next %z da+now.bowl /]] + :: + %del + ::NOTE deletion from hear, if necessary, handled in +on-arvo + [~ this(make (~(del by make) name.command))] + :: + %see + :_ this + ^- (list card) + =- [%shoe [sole-id]~ %sole %mor -]~ + ^- (list sole-effect:shoe) + :- [%txt "to add: +task-name type %args"] + :- [%txt " where type is one of: solid, brass, ivory, desk"] + :- [%txt "to del: -task-name"] + :- [%txt "to run: !task-name"] + ?: =(~ make) + [%txt "no builds configured"]~ + :- [%txt "--"] + :- [%txt "builds:"] + %+ turn ~(tap by make) + |= [name=@ta next=(unit @da) =task] + :- %txt + %- trip + %+ rap 3 + :* name ' (' + ?~(next 'up to date' (scot %da u.next)) + ') : +' -.task ' %' + :: + ?- -.task + %ivory [base.task ~] + ?(%solid %brass) :- base.task + ?: =(~ etc.task) ~ + [' %' (join ' %' ~(tap in etc.task))] + %desk [desk.task ~] + == == + :: + %run + =* name name.command + =+ (~(got by make) name) + :_ =- this(make (~(jab by make) name -)) + |=([next=(unit @da) =^task] [~ task]) + ::TODO just poke hood instead? + =; sag=sole-effect:shoe + :_ ~ + :+ %shoe [sole]~ + :+ %sole %mor + :~ [%txt "{(trip dap.bowl)} built {(trip name)}"] + sag + == + |^ =* base base.task + :+ %sag + =/ ver=@ta + =+ .^(vere %$ /(scot %p our.bowl)//(scot %da now.bowl)/zen/ver) + ?. ?=([%vere @ ~] rev) + (rap 3 (join '-' rev)) + (fall (slaw %ta i.t.rev) i.t.rev) + ?- -.task + ?(%solid %brass %ivory) /[dap.bowl]/[ver]/[name]/pill + %desk /[dap.bowl]/[ver]/[name]/jam + == + ?- -.task + %ivory (ivory:libpill (sys base)) + :: + ?(%solid %brass) + =/ dez=(list [desk path]) + %+ turn ~(tap in etc.task) + |=(d=desk [d (bek d)]) + ?- -.task + %solid (solid:libpill (sys base) dez | now.bowl &) + %brass (brass:libpill (sys base) dez &) + == + :: + %desk + =* desk desk.task + (install:events:libpill desk (byk desk) &) + == + :: + ++ sys + |= d=desk + `path`(snoc (bek d) %sys) + :: + ++ byk + |= d=desk + `beak`[our.bowl d da+now.bowl] + :: + ++ bek + |= d=desk + `path`(en-beam (byk d) /) + -- + == +:: +++ on-arvo + |= [=wire sign=sign-arvo] + ^- (quip card _this) + ?: ?=([%build ~] wire) + :: on-wake, build all tasks whose time has come + :: + ?> ?=(%wake +<.sign) + =/ tasks=(list @ta) + %+ murn ~(tap by make) + |= [name=@ta next=(unit @da) task] + ?~ next ~ + ?:((lte u.next now.bowl) (some name) ~) + ?^ error.sign + ((slog 'on-wake build failed' >tasks< u.error.sign) ~ this) + :: + =| cards=(list card) + |- + ?~ tasks [cards this] + =^ caz this (on-command sole %run i.tasks) + $(tasks t.tasks, cards (weld cards caz)) + :: + ?: ?=([%vers ~] wire) + :: on-wake, republish props if we're on a new runtime + :: + ?> ?=(%wake +<.sign) + =/ next=card + [%pass /vers %arvo %b %wait (add now.bowl ~m5)] + ?^ error.sign + %- (slog 'on-wake vers failed' u.error.sign) + [[next]~ this] + ?: =(rev vers) [[next]~ this] + =. vers rev + =/ tasks=(list @ta) ~(tap in ~(key by make)) + =| cards=(list card) + |- + ?~ tasks [[next cards] this] + =^ caz this (on-command sole %run i.tasks) + $(tasks t.tasks, cards (weld cards caz)) + :: + ?> ?=([%desk @ ~] wire) + =* desk i.t.wire + ?. ?=(%writ +<.sign) + ~& [dap.bowl %unexpected-sign +<.sign] + [~ this] + :: on-writ, bump build timers for all affected tasks + :: + =/ tasks=(list @ta) + %+ murn ~(tap by make) + |= [name=@ta (unit @da) =task] + =- ?:(- (some name) ~) + ?- -.task + %ivory =(desk base.task) + ?(%solid %brass) |(=(desk base.task) (~(has in etc.task) desk)) + %desk =(desk desk.task) + == + ?: =(~ tasks) + [~ this(hear (~(del in hear) desk))] + :: + =/ next=@da (add now.bowl delay) + :_ :: delay next build for affected tasks + :: + |- ?~ tasks this + =. make + %+ ~(jab by make) i.tasks + |=([(unit @da) =task] [`next task]) + $(tasks t.tasks) + :~ :: watch for the next change on this desk + :: + :+ %pass /desk/[desk] + [%arvo %c %warp our.bowl desk `[%next %z da+now.bowl /]] + :: + :: set a timer for building affected tasks + :: + [%pass /build %arvo %b %wait next] + == +:: +++ on-connect + |= =sole-id + ^- (quip card _this) + ::TODO actually should just poke drum to write + [~ this(sole sole-id)] +:: +++ can-connect |=(* =(src our):bowl) +++ on-disconnect on-disconnect:des +++ tab-list tab-list:des +:: +++ on-poke on-poke:def +++ on-watch on-watch:def +++ on-leave on-leave:def +++ on-peek on-peek:def +++ on-agent on-agent:def +++ on-fail on-fail:def +-- diff --git a/pkg/autoprop/desk.bill b/pkg/autoprop/desk.bill new file mode 100644 index 000000000..c5030c486 --- /dev/null +++ b/pkg/autoprop/desk.bill @@ -0,0 +1,3 @@ +:~ %autoprop +== + diff --git a/pkg/bitcoin/lib/dbug.hoon b/pkg/autoprop/lib/dbug.hoon similarity index 100% rename from pkg/bitcoin/lib/dbug.hoon rename to pkg/autoprop/lib/dbug.hoon diff --git a/pkg/bitcoin/lib/default-agent.hoon b/pkg/autoprop/lib/default-agent.hoon similarity index 100% rename from pkg/bitcoin/lib/default-agent.hoon rename to pkg/autoprop/lib/default-agent.hoon diff --git a/pkg/autoprop/lib/dice.hoon b/pkg/autoprop/lib/dice.hoon new file mode 120000 index 000000000..60d435d3a --- /dev/null +++ b/pkg/autoprop/lib/dice.hoon @@ -0,0 +1 @@ +../../arvo/lib/dice.hoon \ No newline at end of file diff --git a/pkg/autoprop/lib/ethereum.hoon b/pkg/autoprop/lib/ethereum.hoon new file mode 120000 index 000000000..96b5f11e6 --- /dev/null +++ b/pkg/autoprop/lib/ethereum.hoon @@ -0,0 +1 @@ +../../arvo/lib/ethereum.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/language-server/complete.hoon b/pkg/autoprop/lib/language-server/complete.hoon similarity index 100% rename from pkg/bitcoin/lib/language-server/complete.hoon rename to pkg/autoprop/lib/language-server/complete.hoon diff --git a/pkg/bitcoin/lib/language-server/parser.hoon b/pkg/autoprop/lib/language-server/parser.hoon similarity index 100% rename from pkg/bitcoin/lib/language-server/parser.hoon rename to pkg/autoprop/lib/language-server/parser.hoon diff --git a/pkg/autoprop/lib/naive.hoon b/pkg/autoprop/lib/naive.hoon new file mode 120000 index 000000000..f2d1d3a91 --- /dev/null +++ b/pkg/autoprop/lib/naive.hoon @@ -0,0 +1 @@ +../../arvo/lib/naive.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/pill.hoon b/pkg/autoprop/lib/pill.hoon similarity index 100% rename from pkg/bitcoin/lib/pill.hoon rename to pkg/autoprop/lib/pill.hoon diff --git a/pkg/bitcoin/lib/shoe.hoon b/pkg/autoprop/lib/shoe.hoon similarity index 100% rename from pkg/bitcoin/lib/shoe.hoon rename to pkg/autoprop/lib/shoe.hoon diff --git a/pkg/bitcoin/lib/skeleton.hoon b/pkg/autoprop/lib/skeleton.hoon similarity index 100% rename from pkg/bitcoin/lib/skeleton.hoon rename to pkg/autoprop/lib/skeleton.hoon diff --git a/pkg/bitcoin/lib/sole.hoon b/pkg/autoprop/lib/sole.hoon similarity index 100% rename from pkg/bitcoin/lib/sole.hoon rename to pkg/autoprop/lib/sole.hoon diff --git a/pkg/autoprop/lib/tiny.hoon b/pkg/autoprop/lib/tiny.hoon new file mode 120000 index 000000000..1d319d209 --- /dev/null +++ b/pkg/autoprop/lib/tiny.hoon @@ -0,0 +1 @@ +../../arvo/lib/tiny.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/verb.hoon b/pkg/autoprop/lib/verb.hoon similarity index 100% rename from pkg/bitcoin/lib/verb.hoon rename to pkg/autoprop/lib/verb.hoon diff --git a/pkg/bitcoin/mar/bill.hoon b/pkg/autoprop/mar/bill.hoon similarity index 100% rename from pkg/bitcoin/mar/bill.hoon rename to pkg/autoprop/mar/bill.hoon diff --git a/pkg/bitcoin/mar/hoon.hoon b/pkg/autoprop/mar/hoon.hoon similarity index 100% rename from pkg/bitcoin/mar/hoon.hoon rename to pkg/autoprop/mar/hoon.hoon diff --git a/pkg/bitcoin/mar/kelvin.hoon b/pkg/autoprop/mar/kelvin.hoon similarity index 100% rename from pkg/bitcoin/mar/kelvin.hoon rename to pkg/autoprop/mar/kelvin.hoon diff --git a/pkg/bitcoin/mar/mime.hoon b/pkg/autoprop/mar/mime.hoon similarity index 100% rename from pkg/bitcoin/mar/mime.hoon rename to pkg/autoprop/mar/mime.hoon diff --git a/pkg/bitcoin/mar/noun.hoon b/pkg/autoprop/mar/noun.hoon similarity index 100% rename from pkg/bitcoin/mar/noun.hoon rename to pkg/autoprop/mar/noun.hoon diff --git a/pkg/bitcoin/mar/ship.hoon b/pkg/autoprop/mar/ship.hoon similarity index 100% rename from pkg/bitcoin/mar/ship.hoon rename to pkg/autoprop/mar/ship.hoon diff --git a/pkg/bitcoin/mar/txt-diff.hoon b/pkg/autoprop/mar/txt-diff.hoon similarity index 100% rename from pkg/bitcoin/mar/txt-diff.hoon rename to pkg/autoprop/mar/txt-diff.hoon diff --git a/pkg/bitcoin/mar/txt.hoon b/pkg/autoprop/mar/txt.hoon similarity index 100% rename from pkg/bitcoin/mar/txt.hoon rename to pkg/autoprop/mar/txt.hoon diff --git a/pkg/autoprop/sur/dice.hoon b/pkg/autoprop/sur/dice.hoon new file mode 120000 index 000000000..454af0e29 --- /dev/null +++ b/pkg/autoprop/sur/dice.hoon @@ -0,0 +1 @@ +../../arvo/sur/dice.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/language-server.hoon b/pkg/autoprop/sur/language-server.hoon similarity index 100% rename from pkg/bitcoin/sur/language-server.hoon rename to pkg/autoprop/sur/language-server.hoon diff --git a/pkg/bitcoin/sur/sole.hoon b/pkg/autoprop/sur/sole.hoon similarity index 100% rename from pkg/bitcoin/sur/sole.hoon rename to pkg/autoprop/sur/sole.hoon diff --git a/pkg/bitcoin/sur/verb.hoon b/pkg/autoprop/sur/verb.hoon similarity index 100% rename from pkg/bitcoin/sur/verb.hoon rename to pkg/autoprop/sur/verb.hoon diff --git a/pkg/autoprop/sys.kelvin b/pkg/autoprop/sys.kelvin new file mode 100644 index 000000000..5bd0cc68f --- /dev/null +++ b/pkg/autoprop/sys.kelvin @@ -0,0 +1 @@ +[%zuse 415] diff --git a/pkg/base-dev/lib/agentio.hoon b/pkg/base-dev/lib/agentio.hoon index 9b0e45006..aa1a9d6c8 100644 --- a/pkg/base-dev/lib/agentio.hoon +++ b/pkg/base-dev/lib/agentio.hoon @@ -66,7 +66,7 @@ :: ++ rest |= p=@da - (arvo %b %wait p) + (arvo %b %rest p) :: ++ warp |= [wer=ship =riff:clay] @@ -85,16 +85,14 @@ ?:(?=(%sing genre) [genre mood] [genre mood]) (warp-our q.byk.bowl `rave) :: + ++ tire + (arvo %c %tire `~) + :: ++ connect |= [=binding:eyre app=term] (arvo %e %connect binding app) -- :: -++ fact-curry - |* [=mark =mold] - |= [paths=(list path) fac=mold] - (fact mark^!>(fac) paths) -:: ++ fact-kick |= [=path =cage] ^- (list card) diff --git a/pkg/base-dev/lib/azimuth.hoon b/pkg/base-dev/lib/azimuth.hoon index d9c6a1b2e..2bd907766 100644 --- a/pkg/base-dev/lib/azimuth.hoon +++ b/pkg/base-dev/lib/azimuth.hoon @@ -114,29 +114,29 @@ :: :: Testnet contract addresses :: - ++ ropsten-contracts + ++ goerli-contracts |% ++ azimuth - 0x308a.b6a6.024c.f198.b57e.008d.0ac9.ad02.1988.6579 + 0xbb61.fa68.3e4b.9104.18e2.7b00.a143.8a93.6234.df52 :: ++ ecliptic - 0x8b9f.86a2.8921.d9c7.05b3.113a.755f.b979.e1bd.1bce + 0xe129.0a32.9014.5e63.e6a8.ec1e.f661.6906.856d.0c8f :: ++ linear-star-release - 0x1f8e.dd03.1ee4.1474.0aed.b39b.84fb.8f2f.66ca.422f + 0x0 :: ++ conditional-star-release 0x0 :: ++ delegated-sending - 0x3e8c.a510.354b.c2fd.bbd6.1502.52d9.3105.c9c2.7bbe + 0x0 :: ++ naive - 0xe7cf.4b83.06d3.11ba.ca15.585f.e3f0.7cd0.441c.21d1 + 0x56e3.7137.cdaf.c026.a732.e8e8.40cd.621e.d50b.d210 :: - ++ launch 4.601.630 - ++ public launch - ++ chain-id 3 + ++ launch 7.834.742 + ++ public 7.834.800 + ++ chain-id 5 -- :: :: Local contract addresses diff --git a/pkg/base-dev/lib/bip/b173.hoon b/pkg/base-dev/lib/bip/b173.hoon index e2c46db1a..ce3cebefc 100644 --- a/pkg/base-dev/lib/bip/b173.hoon +++ b/pkg/base-dev/lib/bip/b173.hoon @@ -11,7 +11,7 @@ |% ++ prefixes ^- (map network tape) - (my [[%main "bc"] [%testnet "tb"] ~]) + (my [[%main "bc"] [%testnet "tb"] [%regtest "bcrt"] ~]) ++ charset "qpzry9x8gf2tvdw0s3jn54khce6mua7l" +$ raw-decoded [hrp=tape data=(list @) checksum=(list @)] :: below is a port of: https://github.com/bitcoinjs/bech32/blob/master/index.js diff --git a/pkg/base-dev/lib/bip/b174.hoon b/pkg/base-dev/lib/bip/b174.hoon index 3bae71d92..20c313fd2 100644 --- a/pkg/base-dev/lib/bip/b174.hoon +++ b/pkg/base-dev/lib/bip/b174.hoon @@ -56,6 +56,8 @@ 1^0x0 %testnet 1^0x1 + %regtest + 1^0x1 == :- (cat:byt ~[1^typ pubkey.h]) %- cat:byt diff --git a/pkg/base-dev/lib/bitcoin-utils.hoon b/pkg/base-dev/lib/bitcoin-utils.hoon index 648fb781b..a23354c58 100644 --- a/pkg/base-dev/lib/bitcoin-utils.hoon +++ b/pkg/base-dev/lib/bitcoin-utils.hoon @@ -143,6 +143,7 @@ |= a=@ ^- hexb =/ l=@ (met 3 a) + ?: =(l 0) 1^a ?: =(l 1) 1^a ?: =(l 2) (cat:byt ~[1^0xfd (flip:byt 2^a)]) ?: (lte l 4) (cat:byt ~[1^0xfe (flip:byt 4^a)]) @@ -162,7 +163,7 @@ %0xfe 2 %0xff 3 == - :_ (drop:byt (add 1 len) h) + :_ (drop:byt (add 1 (bex len)) h) %- flip:byt (take:byt (bex len) (drop:byt 1 h)) :: +dea: atom instead of hexb for parsed CompactSize diff --git a/pkg/base-dev/lib/dill.hoon b/pkg/base-dev/lib/dill.hoon new file mode 100644 index 000000000..41608b263 --- /dev/null +++ b/pkg/base-dev/lib/dill.hoon @@ -0,0 +1,94 @@ +:: dill: utilities for dill's data structures +:: +=, dill +|% +++ enjs + |% + ++ blit + |= =blit:dill + ^- json + =, enjs:format + %+ frond -.blit + ?- -.blit + %bel b+& + %clr b+& + %hop ?@ p.blit (numb p.blit) + (pairs 'x'^(numb x.p.blit) 'y'^(numb y.p.blit) ~) + %put a+(turn p.blit |=(c=@c s+(tuft c))) + %nel b+& + %url s+p.blit + %wyp b+& + %mor a+(turn p.blit ^blit) + :: + %sag + %- pairs + :~ 'path'^(path p.blit) + 'file'^s+(en:base64:mimes:html (as-octs:mimes:html (jam q.blit))) + == + :: + %sav + %- pairs + :~ 'path'^(path p.blit) + 'file'^s+(en:base64:mimes:html (as-octs:mimes:html q.blit)) + == + :: + %klr + :- %a + %+ turn p.blit + |= [=stye text=(list @c)] + %- pairs + :~ 'text'^a+(turn text |=(c=@c s+(tuft c))) + :: + :- 'stye' + %- pairs + |^ :~ 'back'^(color p.q.stye) + 'fore'^(color q.q.stye) + 'deco'^a+(turn ~(tap in p.stye) |=(d=deco ?~(d ~ s+d))) + == + ++ color + |= =tint + ?@ tint ?~(tint ~ s+tint) + =, tint + (pairs r+(numb r) g+(numb g) b+(numb b) ~) + -- + == + == + -- +:: +++ dejs + |% + ++ belt + |= jon=json + ^- belt:dill + ?: ?=([%s *] jon) + (taft p.jon) + =, dejs:format + %. jon + %- of + |^ :* mod+(ot 'mod'^mod 'key'^bot ~) + txt+(ar (cu taft so)) + bol + == + :: + ++ bol + :~ aro+(su (perk %d %l %r %u ~)) + bac+ul + del+ul + hit+(ot 'x'^ni 'y'^ni ~) + ret+ul + == + :: + ++ bot + |= j=json + ^- bolt:dill + ?+ j !! + [%s *] (taft p.j) + [%o *] ((of bol) j) + == + :: + ++ mod + |= j=json + ((su (perk %ctl %met %hyp ~)) j) + -- + -- +-- \ No newline at end of file diff --git a/pkg/base-dev/lib/ethereum.hoon b/pkg/base-dev/lib/ethereum.hoon index 9f63062f9..4f53df668 100644 --- a/pkg/base-dev/lib/ethereum.hoon +++ b/pkg/base-dev/lib/ethereum.hoon @@ -733,7 +733,7 @@ :: %eth-get-block-by-number :- 'eth_getBlockByNumber' - :~ (tape (num-to-hex bon.req)) + :~ (tape (num-to-hex-minimal bon.req)) b+txs.req == :: @@ -942,6 +942,12 @@ %- render-hex-bytes (as-octs:mimes:html n) :: +++ num-to-hex-minimal + |= n=@ + ^- tape + %- prefix-hex + ((x-co:co 1) n) +:: ++ address-to-hex |= a=address ^- tape diff --git a/pkg/base-dev/lib/language-server/complete.hoon b/pkg/base-dev/lib/language-server/complete.hoon index 56b3ca498..95ec07af7 100644 --- a/pkg/base-dev/lib/language-server/complete.hoon +++ b/pkg/base-dev/lib/language-server/complete.hoon @@ -3,7 +3,8 @@ :: =/ debug | |% -+* option [item] +++ option + |$ [item] [term=cord detail=item] :: :: Like +rose except also produces line number diff --git a/pkg/garden-dev/lib/mip.hoon b/pkg/base-dev/lib/mip.hoon similarity index 100% rename from pkg/garden-dev/lib/mip.hoon rename to pkg/base-dev/lib/mip.hoon diff --git a/pkg/base-dev/lib/ph/util.hoon b/pkg/base-dev/lib/ph/util.hoon index eee08a2ac..f4b53ceb6 100644 --- a/pkg/base-dev/lib/ph/util.hoon +++ b/pkg/base-dev/lib/ph/util.hoon @@ -28,8 +28,8 @@ %+ send-events-to who ^- (list unix-event) :~ - [/d/term/1 %belt %ctl `@c`%e] - [/d/term/1 %belt %ctl `@c`%u] + [/d/term/1 %belt %mod %ctl `@c`%e] + [/d/term/1 %belt %mod %ctl `@c`%u] [/d/term/1 %belt %txt ((list @c) what)] [/d/term/1 %belt %ret ~] == @@ -40,7 +40,7 @@ |= [who=ship what=term] ^- (list ph-event) %+ send-events-to who - :~ [/d/term/1 %belt %ctl (,@c what)] + :~ [/d/term/1 %belt %mod %ctl (,@c what)] == :: :: Inject a file into a ship @@ -67,7 +67,7 @@ :: %+ lien p.q.uf |= =blit:dill - ?. ?=(%lin -.blit) + ?. ?=(%put -.blit) | !=(~ (find what p.blit)) == diff --git a/pkg/base-dev/lib/pill.hoon b/pkg/base-dev/lib/pill.hoon index 1f6993fb6..4b07f57c6 100644 --- a/pkg/base-dev/lib/pill.hoon +++ b/pkg/base-dev/lib/pill.hoon @@ -64,7 +64,11 @@ %- ~(gas by *(map path (each page lobe:clay))) (turn hav |=([=path =page] [path &+page])) [/c/sync [%park des &+yuki *rang:clay]] - =| hav=(list [path page]) + (file-pages bas sal) +:: +++ file-pages + |= [bas=path sal=(list spur)] + =| hav=(list [path page:clay]) |- ^+ hav ?~ sal ~ =. hav $(sal t.sal) @@ -97,6 +101,16 @@ :: ++ file-ovum2 |=(p=path `unix-event`[//arvo what/(user-files p)]) :: +++ prep-ovum + |= dez=(list path) + ^- unix-event + =- ~& clay-blobs+~(wyt by -) + [/c/inflate [%prep -]] + %+ roll dez + |= [bas=path out=(map lobe:clay page:clay)] + %- ~(uni by out) + .^(_out %cs (snoc bas %bloc)) +:: :: +user-files: all userspace hoon files :: ++ user-files @@ -135,4 +149,218 @@ |- ^+ hav ?~ all hav $(all t.all, hav ^$(tyl [p.i.all tyl])) +:: +::TODO include %prep task in solid and brass? +++ solid + :: sys: root path to boot system, `/~me/[desk]/now/sys` + :: dez: secondary desks and their root paths + :: + |= [sys=path dez=(list [desk path]) dub=? now=@da prime=?] + ^- pill + =/ bas=path (scag 3 sys) + =/ compiler-path (weld sys /hoon) + =/ arvo-path (weld sys /arvo) + ~& %solid-start + =/ compiler-src .^(@t %cx (weld compiler-path /hoon)) + =/ arvo-src .^(@t %cx (weld arvo-path /hoon)) + =/ arvo-formula + ~& %solid-loaded + =/ compiler-hoon (rain compiler-path compiler-src) + ?. dub + :: compile arvo against hoon, with our current compiler + :: + =/ whole-hoon=hoon + [%tsgr compiler-hoon [%tsgr [%$ 7] (rain arvo-path arvo-src)]] + ~& %solid-parsed + =/ whole-formula q:(~(mint ut %noun) %noun whole-hoon) + ~& %solid-arvo + whole-formula + :: compile arvo against hoon, with a freshly compiled hoon (via +ride) + :: + ~& %solid-parsed + =/ compiler-formula q:(~(mint ut %noun) %noun compiler-hoon) + ~& %solid-compiled + =/ whole-src + (rap 3 ['=> ' compiler-src '=> +7 ' arvo-src ~]) + ~& %solid-double-loaded + =/ whole-formula + =< + + .* [%noun whole-src] + [%8 compiler-formula [%9 2 %10 [6 %0 3] [%0 2]]] + ~& %solid-double-compiled + whole-formula + :: + ~& [%solid-kernel `@ux`(mug arvo-formula)] + :: + :: installed: Arvo gate (formal interface) with %zuse and vanes installed + :: + =/ installed + =< q + %^ spin + ^- (list ovum) + :- (boot-ovum:pill compiler-src arvo-src) + %+ turn + (snoc (turn dez tail) bas) + file-ovum2:pill + .*(0 arvo-formula) + |= [ovo=ovum ken=*] + [~ (slum ken [now ovo])] + :: + :: boot-two: startup formula + :: + :: We evaluate :arvo-formula (for jet registration), + :: then ignore the result and produce .installed + :: + =/ boot-two + => *[arvo-formula=^ installed=^ tale=*] + != =+(.*(0 arvo-formula) [installed tale]) + :: + :: boot-ova + :: + =/ boot-ova=(list) + [aeon:eden:part boot-two arvo-formula installed ~] + :: + :: a pill is a 3-tuple of event-lists: [boot kernel userspace] + :: + :: Our kernel event-list is ~, as we've already installed them. + :: Our userspace event-list is a list containing a full %clay + :: filesystem sync event. + :: + :+ %pill %solid + :+ boot-ova ~ + =. dez (snoc dez [%base bas]) + %+ weld + (turn dez file-ovum) + ?. prime ~ + [(prep-ovum (turn dez tail))]~ +:: +++ brass + :: sys: root path to boot system, `/~me/[desk]/now/sys` + :: dez: secondary desks and their root paths + :: + |= [sys=path dez=(list [desk path]) prime=?] + ^- pill + =/ bas=path (scag 3 sys) + :: compiler-source: hoon source file producing compiler, `sys/hoon` + :: + =+ compiler-source=.^(@t %cx (welp sys /hoon/hoon)) + :: + :: compiler-twig: compiler as hoon expression + :: + ~& %brass-parsing + =+ compiler-twig=(rain /sys/hoon/hoon compiler-source) + ~& %brass-parsed + :: + :: compiler-formula: compiler as nock formula + :: + ~& %brass-compiling + =+ compiler-formula=q:(~(mint ut %noun) %noun compiler-twig) + ~& %brass-compiled + :: + :: arvo-source: hoon source file producing arvo kernel, `sys/arvo` + :: + =+ arvo-source=.^(@t %cx (welp sys /arvo/hoon)) + :: + :: boot-ova: startup events + :: + =/ boot-ova=(list) + :~ aeon:eden:part + boot:eden:part + compiler-formula + compiler-source + arvo-source + == + :: a pill is a 3-tuple of event-lists: [boot kernel userspace] + :: + :+ %pill %brass + :+ boot-ova + :~ (boot-ovum:pill compiler-source arvo-source) + (file-ovum2:pill bas) + == + =. dez (snoc dez [%base bas]) + %+ weld + (turn dez file-ovum) + ?. prime ~ + [(prep-ovum (turn dez tail))]~ +:: +++ ivory + |= sys=path + ^- pill + =/ lib (snoc (scag 3 sys) %lib) + |^ =/ ver + =/ sub *(trap vase) + =. sub (build-sys sub %hoon) + =. sub (build-sys sub %arvo) + =. sub (build-sys sub %lull) + =. sub (build-sys sub %zuse) + =. sub (build-lib sub & %ethereum) + =. sub (build-lib sub & %azimuth) + (build-lib sub | %vere) + =/ nok !. + => *[ver=(trap vase) ~] + != q:$:ver + ivory/[nok ver ~] + :: + ++ build-sys + |= [sub=(trap vase) nam=term] ^- (trap vase) + ~> %slog.[0 leaf+"ivory: building /sys/{(trip nam)}"] + (swat sub (rain /sys/[nam]/hoon .^(@t cx+(welp sys /[nam]/hoon)))) + :: + ++ build-lib + |= [sub=(trap vase) imp=? nam=term] ^- (trap vase) + ~> %slog.[0 leaf+"ivory: building /lib/{(trip nam)}"] + =/ hun=hoon + %+ mist /lib/[nam]/hoon + .^(@t cx+(welp lib /[nam]/hoon)) + ?. imp (swat sub hun) + (swel sub [%ktts nam hun]) + :: +mist: +rain but skipping past ford runes + :: + ++ mist + |= [bon=path txt=@] + ^- hoon + =+ vas=vast + ~| bon + %+ scan (trip txt) + %- full + =; fud + (ifix [;~(plug gay fud) gay] tall:vas(wer bon)) + %- star + ;~ pose vul + %+ ifix [fas (just `@`10)] + (star ;~(less (just `@`10) next)) + == + :: +swel: +swat but with +slop + :: + ++ swel + |= [tap=(trap vase) gen=hoon] + ^- (trap vase) + =/ gun (~(mint ut p:$:tap) %noun gen) + => [tap=tap gun=gun] + |. ~+ + =/ pro q:$:tap + [[%cell p.gun p:$:tap] [.*(pro q.gun) pro]] + -- +:: +++ events + |% + +$ prop [%prop meta tier (list ovum)] + +$ meta term + +$ tier ?(%fore %hind) :: before or after userspace + :: + ++ install + |= [as=desk =beak pri=?] + ^- prop + :^ %prop (rap 3 %install '-' as ~) %hind + ::TODO will exclude non-:directories files, such as /changelog/txt + =- (murn - same) + ^- (list (unit ovum)) + :~ `(file-ovum as (en-beam beak /)) + :: + ?. pri ~ + `(prep-ovum (en-beam beak /) ~) + :: + `[/d/install/[as] [%seat as]] + == + -- -- diff --git a/pkg/base-dev/lib/shoe.hoon b/pkg/base-dev/lib/shoe.hoon index cd4ab18db..856a4d782 100644 --- a/pkg/base-dev/lib/shoe.hoon +++ b/pkg/base-dev/lib/shoe.hoon @@ -13,15 +13,15 @@ /- *sole /+ sole, auto=language-server-complete |% -+$ state-0 - $: %0 - soles=(map @ta sole-share) ++$ state-1 + $: %1 + soles=(map sole-id sole-share) == :: $card: standard gall cards plus shoe effects :: +$ card $% card:agent:gall - [%shoe sole-ids=(list @ta) effect=shoe-effect] :: ~ sends to all soles + [%shoe sole-ids=(list sole-id) effect=shoe-effect] :: ~ sends to all == :: $shoe-effect: easier sole-effects :: @@ -47,30 +47,30 @@ :: if the head of the result is true, instantly run the command :: ++ command-parser - |~ sole-id=@ta + |~ =sole-id |~(nail *(like [? command-type])) :: +tab-list: autocomplete options for the session (to match +command-parser) :: ++ tab-list - |~ sole-id=@ta + |~ =sole-id :: (list [@t tank]) *(list (option:auto tank)) :: +on-command: called when a valid command is run :: ++ on-command - |~ [sole-id=@ta command=command-type] + |~ [=sole-id command=command-type] *(quip card _^|(..on-init)) :: ++ can-connect - |~ sole-id=@ta + |~ =sole-id *? :: ++ on-connect - |~ sole-id=@ta + |~ =sole-id *(quip card _^|(..on-init)) :: ++ on-disconnect - |~ sole-id=@ta + |~ =sole-id *(quip card _^|(..on-init)) :: ::NOTE standard gall agent arms below, though they may produce %shoe cards @@ -119,27 +119,27 @@ |* [shoe=* command-type=mold] |_ =bowl:gall ++ command-parser - |= sole-id=@ta + |= =sole-id (easy *[? command-type]) :: ++ tab-list - |= sole-id=@ta + |= =sole-id ~ :: ++ on-command - |= [sole-id=@ta command=command-type] + |= [=sole-id command=command-type] [~ shoe] :: ++ can-connect - |= sole-id=@ta + |= =sole-id (team:title [our src]:bowl) :: ++ on-connect - |= sole-id=@ta + |= =sole-id [~ shoe] :: ++ on-disconnect - |= sole-id=@ta + |= =sole-id [~ shoe] -- :: +agent: creates wrapper core that handles sole events and calls shoe arms @@ -147,7 +147,7 @@ ++ agent |* command-type=mold |= =(shoe command-type) - =| state-0 + =| state-1 =* state - ^- agent:gall => @@ -164,8 +164,7 @@ %+ turn ?^ sole-ids.card sole-ids.card ~(tap in ~(key by soles)) - |= sole-id=@ta - /sole/[sole-id] + id-to-path:sole :: %table =; fez=(list sole-effect) @@ -202,9 +201,36 @@ ?. ?=([%shoe-app ^] q.old-state) =^ cards shoe (on-load:og old-state) [(deal cards) this] - =^ old-inner state +:!<([%shoe-app vase state-0] old-state) - =^ cards shoe (on-load:og old-inner) - [(deal cards) this] + |^ =| old-outer=state-any + =^ old-inner old-outer + +:!<([%shoe-app vase state-any] old-state) + :: ~! q.old-state + :: ?+ +>.q.old-state !! + :: [%0 *] +:!<([%shoe-app vase state-0] old-state) + :: [%1 *] +:!<([%shoe-app vase state-1] old-state) + :: == + =^ caz shoe (on-load:og old-inner) + =^ cuz old-outer + ?. ?=(%0 -.old-outer) [~ old-outer] + (state-0-to-1 old-outer) + ?> ?=(%1 -.old-outer) + [(weld cuz (deal caz)) this(state old-outer)] + :: + +$ state-any $%(state-1 state-0) + +$ state-0 [%0 soles=(map @ta sole-share)] + ++ state-0-to-1 + |= old=state-0 + ^- (quip card:agent:gall state-1) + :- %+ turn ~(tap in ~(key by soles.old)) + |= id=@ta + ^- card:agent:gall + [%give %kick ~[/sole/[id]] ~] + :- %1 + %- ~(gas by *(map sole-id sole-share)) + %+ murn ~(tap by soles.old) + |= [id=@ta s=sole-share] + (bind (upgrade-id:sole id) (late s)) + -- :: ++ on-poke |= [=mark =vase] @@ -326,19 +352,18 @@ ++ on-watch |= =path ^- (quip card:agent:gall agent:gall) - ?. ?=([%sole @ ~] path) + ?~ sole-id=(path-to-id:sole path) =^ cards shoe (on-watch:og path) [(deal cards) this] - =* sole-id i.t.path - ?> (can-connect:og sole-id) - =. soles (~(put by soles) sole-id *sole-share) + ?> (can-connect:og u.sole-id) + =. soles (~(put by soles) u.sole-id *sole-share) =^ cards shoe - (on-connect:og sole-id) + (on-connect:og u.sole-id) :_ this %- deal :_ cards - [%shoe [sole-id]~ %sole %pro & dap.bowl "> "] + [%shoe [u.sole-id]~ %sole %pro & dap.bowl "> "] :: ++ on-leave |= =path diff --git a/pkg/base-dev/lib/sole.hoon b/pkg/base-dev/lib/sole.hoon index 66684668a..ad6b74962 100644 --- a/pkg/base-dev/lib/sole.hoon +++ b/pkg/base-dev/lib/sole.hoon @@ -136,4 +136,28 @@ =+ dat=(transmute [%mor leg] [%ins pos `@c`0]) ?> ?=(%ins -.dat) p.dat +:: +:: +++ path-to-id + |= =path + ^- (unit sole-id) + ?. ?=([%sole @ ?(~ [@ ~])] path) ~ + ?~ who=(slaw %p i.t.path) ~ + `[u.who ?~(t.t.path %$ i.t.t.path)] +:: +++ id-to-path + |= sole-id + ^- path + ::TODO this whole "no empty path ending" business feels icky. + :: do we want default session to be ~.~ ? + :: concern here is that outsiders cannot subscribe to the default + :: session, because /sole/~zod/ isn't a valid path... + [%sole (scot %p who) ?~(ses ~ /[ses])] +:: +++ upgrade-id + |= old=@ta + ^- (unit sole-id) + %+ rush old + %+ cook (late %$) + ;~(pfix (jest 'drum_~') fed:ag) -- diff --git a/pkg/base-dev/lib/sss.hoon b/pkg/base-dev/lib/sss.hoon new file mode 100644 index 000000000..a1a4a4b24 --- /dev/null +++ b/pkg/base-dev/lib/sss.hoon @@ -0,0 +1,248 @@ +/- *sss +/+ *mip +:: +|% +++ mk-subs :: Create sub-map. + |* [=(lake) paths=mold] + -:+6:(da lake paths) +:: +++ mk-pubs :: Create pub-map. + |* [=(lake) paths=mold] + -:+6:(du lake paths) +:: +++ mk-mar :: Create mar. + |* =(lake) + |_ =(response:poke lake *) + ++ grow + |% + ++ noun response + -- + ++ grab + |% + ++ noun (response:poke lake *) + -- + ++ grad %noun + -- +++ fled :: Like +sped but head is a path. + |= vax=vase + ^- vase + :_ q.vax + %- ~(play ut p.vax) + =- [%wtgr [%wtts - [%& 2]~] [%$ 1]] + =/ pax ~| %path-none ;;(path -.q.vax) + |- ^- spec + ?~ pax [%base %null] + [%bccl ~[[%leaf %ta -.pax] $(pax +.pax)]] +:: +++ zoom |= =noun ~| %need-path $/sss/;;(path noun) +:: +++ da :: Manage subscriptions. + |* [=(lake) paths=mold] + => + |% + +$ flow [=aeon fail=_| =rock:lake] + -- + |_ [sub=(map [ship dude paths] flow) =bowl:gall result-type=type on-rock-type=type] + ++ surf pine :: Subscribe to [ship dude path]. + ++ read :: See current subscribed states. + ^- (map [ship dude paths] [fail=? rock:lake]) + %- ~(run by sub) + |= =flow + [fail rock]:flow + :: :: Check poke-acks for errors. + :: :: If an %sss-on-rock poke nacks, + ++ chit :: that state is flagged as failed. + |= [[aeon=term ship=term dude=term path=paths] =sign:agent:gall] + ^+ sub + ?> ?=(%poke-ack -.sign) + ?~ p.sign sub + %+ ~(jab by sub) [(slav %p ship) dude path] + |= =flow + ?> =(aeon.flow (slav %ud aeon)) + flow(fail &) + :: :: Check if we're still interested + :: :: in a wave. If no, no-op. + :: :: If yes, scry. + ++ behn :: (See https://gist.github.com/belisarius222/7f8452bfea9b199c0ed717ab1778f35b) + |= [ship=term =dude aeon=term path=paths] + ^- (list card:agent:gall) + =/ ship (slav %p ship) + =/ aeon (slav %ud aeon) + ?: (lte aeon aeon:(~(got by sub) ship dude path)) ~ + ~[(scry `aeon ship dude path)] + :: + ++ apply :: Handle response from publisher. + |= res=(response:poke lake paths) + ^- (quip card:agent:gall _sub) + ?- type.res + %yore + :_ sub :_ ~ + (pine src.bowl dude.res path.res) + :: + %nigh + :_ sub :_ ~ + (behn-s25 [dude aeon path]:res) + :: + %scry + =* current [src.bowl dude.res path.res] + =/ [wave=(unit wave:lake) =flow] + =/ old=flow (~(gut by sub) current *flow) + ?- what.res + %rock ?> (gte aeon.res aeon.old) + `[aeon.res | rock.res] + %wave ~| [%weird-wave res=res old=old] + ?> =(aeon.res +(aeon.old)) + [`wave.res [aeon.res | (wash:lake rock.old wave.res)]] + == + :_ (~(put by sub) current flow) + %- flop + :~ (scry `+(aeon.res) src.bowl dude.res path.res) + :* %pass (zoom on-rock/(scot %ud aeon.flow)^(scot %p src.bowl)^dude.res^path.res) + %agent [our dap]:bowl + %poke %sss-on-rock on-rock-type ^- from + [path.res src.bowl dude.res rock.flow wave] + == == + == + :: + :: Non-public facing arms below + :: + +$ from (on-rock:poke lake paths) + +$ into (response:poke lake paths) + +$ result (request:poke paths) + ++ behn-s25 + |= [=dude =aeon path=noun] + ^- card:agent:gall + :* %pass (zoom behn/(scot %p src.bowl)^dude^(scot %ud aeon)^path) + %arvo %b %wait (add ~s25 now.bowl) + == + ++ pine |= [ship dude paths] (scry ~ +<) + ++ scry + |= [when=(unit aeon) who=ship which=dude where=paths] + ^- card:agent:gall + =/ when ?~ when %~ (scot %ud u.when) + :* %pass (zoom request/scry/(scot %p who)^which^when^where) + %agent [who which] + %poke %sss-to-pub :- result-type ^- result + [where which ^when] + == + -- +++ du :: Manage publications. + |* [=(lake) paths=mold] + => + |% + +$ rule [rocks=_1 waves=_5] :: Retention policy + +$ tide + $: rok=((mop aeon rock:lake) gte) + wav=((mop aeon wave:lake) lte) + rul=rule + mem=(mip aeon [ship dude] @da) + == + -- + |_ [pub=(map paths tide) =bowl:gall result-type=type] + +* rok ((on aeon rock:lake) gte) + wav ((on aeon wave:lake) lte) + :: + ++ rule :: Set new retention policy. + |= [path=paths =^rule] + ^+ pub + %+ ~(jab by pub) path + |= =tide + (form tide(rul rule)) + :: + ++ wipe :: Create new rock and wipe rest. + |= path=paths + ^+ pub + %+ ~(jab by pub) path + |= =tide + %* . (form tide(rul [0 1])) + rul rul.tide + wav ~ + == + ++ give :: Give a wave on a path. + |= [path=paths =wave:lake] + ^- (quip card:agent:gall _pub) + ?~ ;;((soft ^path) path) ~| %need-path !! + =/ =tide (~(gut by pub) path *tide) + =/ next=aeon + .+ %+ max + (fall (bind (pry:rok rok.tide) head) 0) + (fall (bind (ram:wav wav.tide) head) 0) + :: + :_ %+ ~(put by pub) path + =/ last=[=aeon =rock:lake] (fall (pry:rok rok.tide) *[key val]:rok) + =. wav.tide (put:wav wav.tide next wave) + =. mem.tide (~(del by mem.tide) next) + ?. =(next (add aeon.last waves.rul.tide)) tide + (form tide) + :: + %+ murn ~(tap by (~(gut by mem.tide) next ~)) + |= [[=ship =dude] =@da] + ?: (lth da now.bowl) ~ + `(send scry/wave/wave ship dude next path) + ++ read :: See current published states. + ^- (map paths rock:lake) + %- ~(run by pub) + |= =tide + =< rock + =/ snap=[=aeon =rock:lake] (fall (pry:rok rok.tide) *[key val]:rok) + %+ roll (tap:wav (lot:wav wav.tide `aeon.snap ~)) + |= [[=aeon =wave:lake] =_snap] + ?. =(aeon +(aeon.snap)) snap + [aeon (wash:lake rock.snap wave)] + :: + ++ apply :: Handle request from subscriber. + |= req=(request:poke paths) + ^- (quip card:agent:gall _pub) + =/ =tide (~(gut by pub) path.req *tide) + ?~ when.req + =/ last (fall (pry:rok rok.tide) *[=key =val]:rok) + :_ pub :_ ~ + (send scry/rock/val.last src.bowl dude.req key.last path.req) + ?^ dat=(get:wav wav.tide u.when.req) + :_ pub :_ ~ + (send scry/wave/u.dat src.bowl [dude u.when path]:req) + ?. (gth u.when.req key::(fall (ram:wav wav.tide) [key=+(u.when.req) **])) + :_ pub :_ ~ + (send yore/~ src.bowl [dude u.when path]:req) + :- ~[(send nigh/~ src.bowl [dude u.when path]:req)] + %+ ~(put by pub) path.req + %= tide mem + %^ ~(put bi mem.tide) u.when.req [src.bowl dude.req] + (add ~s25 now.bowl) + == + :: + :: Non-public facing arms below + :: + +$ into (request:poke paths) + +$ result (response:poke lake paths) + ++ send + |= [payload=_|3:*(response:poke lake paths) =ship =dude =aeon path=paths] + ^- card:agent:gall + =* mark (cat 3 %sss- name:lake) + :* %pass (zoom response/scry/(scot %p ship)^dude^(scot %ud aeon)^path) + %agent [ship dude] + %poke mark result-type ^- (response:poke lake paths) + [path dap.bowl aeon payload] + == + ++ form + |= =tide + ^+ tide + =/ max-rock=[=aeon =rock:lake] (fall (pry:rok rok.tide) *[key val]:rok) + =/ max-wave (fall (bind (ram:wav wav.tide) head) 0) + =. rok.tide + %+ gas:rok +<-:gas:rok + %- tab:rok :_ [~ +(rocks.rul.tide)] + ?: ?| =(waves.rul.tide 0) + (lth max-wave (add aeon.max-rock waves.rul.tide)) + == + rok.tide + %+ put:rok rok.tide + %+ roll (tab:wav wav.tide `aeon.max-rock max-wave) + |: [*[now=aeon =wave:lake] `[prev=aeon =rock:lake]`max-rock] + ~| %aeon-awry + ?> =(now +(prev)) + [now (wash:lake rock wave)] + ~| %rock-zero + tide(wav (lot:wav wav.tide (bind (ram:rok rok.tide) |=([r=@ *] (dec r))) ~)) + -- +-- diff --git a/pkg/base-dev/lib/story.hoon b/pkg/base-dev/lib/story.hoon index 8cb3c2a93..d216d41a6 100644 --- a/pkg/base-dev/lib/story.hoon +++ b/pkg/base-dev/lib/story.hoon @@ -38,41 +38,17 @@ :: :: Canonical textual representation :: -++ tako-to-text - |= [=tako:clay] - ^- tape - "commit: {<`@uv`tako>}\0a" -:: -++ proses-to-text - |= [=proses] - ^- tape - =/ proses-list=(list prose) ~(tap in proses) - ?: ?=(~ proses-list) "" - ?: ?=([prose ~] proses-list) - (prose-to-text i.proses-list) - %- tail - %^ spin `(list prose)`t.proses-list - (prose-to-text i.proses-list) - |= [prz=prose state=tape] - ^- [prose tape] - :- prz - ;: welp - state - "|||" - "\0a" - (prose-to-text prz) - == -:: -++ prose-to-text - |= prz=prose - =/ [title=@t body=@t] prz - ^- tape - ;: welp - "{(trip title)}" - "\0a\0a" - "{(trip body)}" - "\0a" - == +++ chapter-to-text + |= [=tako:clay =proses] + ^- wain + :- (crip "commit: {<`@uv`tako>}") + %- zing + %+ join `wain`~['|||'] + %+ turn ~(tap in proses) + |= prose + ^- wain + %- to-wain:format + (rap 3 title '\0a\0a' body ~) :: :: Parsers :: diff --git a/pkg/base-dev/lib/strand.hoon b/pkg/base-dev/lib/strand.hoon index d49260225..b0db35b27 100644 --- a/pkg/base-dev/lib/strand.hoon +++ b/pkg/base-dev/lib/strand.hoon @@ -1,188 +1 @@ -|% -+$ card card:agent:gall -+$ input - $% [%poke =cage] - [%sign =wire =sign-arvo] - [%agent =wire =sign:agent:gall] - [%watch =path] - == -+$ strand-input [=bowl in=(unit input)] -+$ tid @tatid -+$ bowl - $: our=ship - src=ship - tid=tid - mom=(unit tid) - wex=boat:gall - sup=bitt:gall - eny=@uvJ - now=@da - byk=beak - == -:: -:: cards: cards to send immediately. These will go out even if a -:: later stage of the computation fails, so they shouldn't have -:: any semantic effect on the rest of the system. -:: Alternately, they may record an entry in contracts with -:: enough information to undo the effect if the computation -:: fails. -:: wait: don't move on, stay here. The next sign should come back -:: to this same callback. -:: skip: didn't expect this input; drop it down to be handled -:: elsewhere -:: cont: continue computation with new callback. -:: fail: abort computation; don't send effects -:: done: finish computation; send effects -:: -++ strand-output-raw - |* a=mold - $~ [~ %done *a] - $: cards=(list card) - $= next - $% [%wait ~] - [%skip ~] - [%cont self=(strand-form-raw a)] - [%fail err=(pair term tang)] - [%done value=a] - == - == -:: -++ strand-form-raw - |* a=mold - $-(strand-input (strand-output-raw a)) -:: -:: Abort strand computation with error message -:: -++ strand-fail - |= err=(pair term tang) - |= strand-input - [~ %fail err] -:: -:: Asynchronous transcaction monad. -:: -:: Combo of four monads: -:: - Reader on input -:: - Writer on card -:: - Continuation -:: - Exception -:: -++ strand - |* a=mold - |% - ++ output (strand-output-raw a) - :: - :: Type of an strand computation. - :: - ++ form (strand-form-raw a) - :: - :: Monadic pure. Identity computation for bind. - :: - ++ pure - |= arg=a - ^- form - |= strand-input - [~ %done arg] - :: - :: Monadic bind. Combines two computations, associatively. - :: - ++ bind - |* b=mold - |= [m-b=(strand-form-raw b) fun=$-(b form)] - ^- form - |= input=strand-input - =/ b-res=(strand-output-raw b) - (m-b input) - ^- output - :- cards.b-res - ?- -.next.b-res - %wait [%wait ~] - %skip [%skip ~] - %cont [%cont ..$(m-b self.next.b-res)] - %fail [%fail err.next.b-res] - %done [%cont (fun value.next.b-res)] - == - :: - :: The strand monad must be evaluted in a particular way to maintain - :: its monadic character. +take:eval implements this. - :: - ++ eval - |% - :: Indelible state of a strand - :: - +$ eval-form - $: =form - == - :: - :: Convert initial form to eval-form - :: - ++ from-form - |= =form - ^- eval-form - form - :: - :: The cases of results of +take - :: - +$ eval-result - $% [%next ~] - [%fail err=(pair term tang)] - [%done value=a] - == - :: - ++ validate-mark - |= [in=* =mark =bowl] - ^- cage - =+ .^ =dais:clay %cb - /(scot %p our.bowl)/[q.byk.bowl]/(scot %da now.bowl)/[mark] - == - =/ res (mule |.((vale.dais in))) - ?: ?=(%| -.res) - ~|(%spider-mark-fail (mean leaf+"spider: ames vale fail {}" p.res)) - [mark p.res] - :: - :: Take a new sign and run the strand against it - :: - ++ take - :: cards: accumulate throughout recursion the cards to be - :: produced now - =| cards=(list card) - |= [=eval-form =strand-input] - ^- [[(list card) =eval-result] _eval-form] - =* take-loop $ - =. in.strand-input - ?~ in.strand-input ~ - =/ in u.in.strand-input - ?. ?=(%agent -.in) `in - ?. ?=(%fact -.sign.in) `in - :: - :- ~ - :+ %agent wire.in - [%fact (validate-mark q.q.cage.sign.in p.cage.sign.in bowl.strand-input)] - :: run the strand callback - :: - =/ =output (form.eval-form strand-input) - :: add cards to cards - :: - =. cards - %+ welp - cards - :: XX add tag to wires? - cards.output - :: case-wise handle next steps - :: - ?- -.next.output - %wait [[cards %next ~] eval-form] - %skip [[cards %next ~] eval-form] - %fail [[cards %fail err.next.output] eval-form] - %done [[cards %done value.next.output] eval-form] - %cont - :: recurse to run continuation with initialization input - :: - %_ take-loop - form.eval-form self.next.output - strand-input [bowl.strand-input ~] - == - == - -- - -- --- -:: +rand diff --git a/pkg/base-dev/lib/strandio.hoon b/pkg/base-dev/lib/strandio.hoon index 721025ab6..1ac0c3122 100644 --- a/pkg/base-dev/lib/strandio.hoon +++ b/pkg/base-dev/lib/strandio.hoon @@ -73,7 +73,9 @@ ^- form:m |= tin=strand-input:strand ?+ in.tin `[%skip ~] - ~ `[%wait ~] + ~ + `[%wait ~] + :: [~ %poke @ *] ?. =(mark p.cage.u.in.tin) `[%skip ~] @@ -87,7 +89,9 @@ ^- form:m |= tin=strand-input:strand ?+ in.tin `[%skip ~] - ~ `[%wait ~] + ~ + `[%wait ~] + :: [~ %sign *] `[%done [wire sign-arvo]:u.in.tin] == @@ -433,7 +437,6 @@ %- pure:m ?~ full-file.client-response '' q.data.u.full-file.client-response - :: ++ fetch-cord |= url=tape @@ -474,6 +477,18 @@ (pure:m ~) ?> =(%vase p.r.u.riot) (pure:m (some !<(vase q.r.u.riot))) +:: +++ build-file-hard + |= [[=ship =desk =case] =spur] + =* arg +< + =/ m (strand ,vase) + ^- form:m + ;< =riot:clay + bind:m + (warp ship desk ~ %sing %a case spur) + ?> ?=(^ riot) + ?> ?=(%vase p.r.u.riot) + (pure:m !<(vase q.r.u.riot)) :: +build-mark: build a mark definition to a $dais :: ++ build-mark @@ -586,6 +601,23 @@ (poke [who %hood] %helm-hi !>(~)) (pure:m ~) :: +++ eval-hoon + |= [gen=hoon bez=(list beam)] + =/ m (strand ,vase) + ^- form:m + =/ sut=vase !>(..zuse) + |- + ?~ bez + (pure:m (slap sut gen)) + ;< vax=vase bind:m (build-file-hard i.bez) + $(bez t.bez, sut (slop vax sut)) +:: +++ send-thread + |= [=bear:khan =shed:khan =wire] + =/ m (strand ,~) + ^- form:m + (send-raw-card %pass wire %arvo %k %lard bear shed) +:: :: Queue on skip, try next on fail %ignore :: ++ main-loop diff --git a/pkg/base-dev/lib/test.hoon b/pkg/base-dev/lib/test.hoon index ec97e71dd..c5947b256 100644 --- a/pkg/base-dev/lib/test.hoon +++ b/pkg/base-dev/lib/test.hoon @@ -38,7 +38,39 @@ =/ b (mule a) ?- -.b %| ~ - %& [leaf+"expected failure - succeeded" ~] + %& ['expected failure - succeeded' ~] + == +:: +expect-runs: kicks a trap, expecting success; returns trace on failure +:: +++ expect-success + |= a=(trap) + ^- tang + =/ b (mule a) + ?- -.b + %& ~ + %| ['expected success - failed' p.b] + == +:: $a-test-chain: a sequence of tests to be run +:: +:: NB: arms shouldn't start with `test-` so that `-test % ~` runs +:: ++$ a-test-chain + $_ + |? + ?: =(0 0) + [%& p=*tang] + [%| p=[tang=*tang next=^?(..$)]] +:: +run-chain: run a sequence of tests, stopping at first failure +:: +++ run-chain + |= seq=a-test-chain + ^- tang + =/ res $:seq + ?- -.res + %& p.res + %| ?. =(~ tang.p.res) + tang.p.res + $(seq next.p.res) == :: +category: prepends a name to an error result; passes successes unchanged :: diff --git a/pkg/base-dev/mar/belt.hoon b/pkg/base-dev/mar/belt.hoon index 1c5a6e1ea..acbf284c9 100644 --- a/pkg/base-dev/mar/belt.hoon +++ b/pkg/base-dev/mar/belt.hoon @@ -1,5 +1,7 @@ :: belt: runtime belt structure :: +/+ dill +:: |_ =belt:dill ++ grad %noun :: +grab: convert from @@ -7,18 +9,7 @@ ++ grab |% ++ noun belt:dill - ++ json - ^- $-(^json belt:dill) - =, dejs:format - %- of - :~ aro+(su (perk %d %l %r %u ~)) - bac+ul - ctl+(cu taft so) - del+ul - met+(cu taft so) - ret+ul - txt+(ar (cu taft so)) - == + ++ json belt:dejs:dill -- :: +grow: convert to :: diff --git a/pkg/base-dev/mar/blit.hoon b/pkg/base-dev/mar/blit.hoon index 4c23c5705..4b852aa60 100644 --- a/pkg/base-dev/mar/blit.hoon +++ b/pkg/base-dev/mar/blit.hoon @@ -1,5 +1,7 @@ :: blit: runtime blit structure :: +/+ dill +:: |_ =blit:dill ++ grad %noun :: +grab: convert from @@ -13,49 +15,6 @@ ++ grow |% ++ noun blit - ++ json - ^- ^json - =, enjs:format - %+ frond -.blit - ?- -.blit - %bel b+& - %clr b+& - %hop (numb p.blit) - %lin a+(turn p.blit |=(c=@c s+(tuft c))) - %mor b+& - %url s+p.blit - :: - %sag - %- pairs - :~ 'path'^(path p.blit) - 'file'^s+(en:base64:mimes:html (as-octs:mimes:html (jam q.blit))) - == - :: - %sav - %- pairs - :~ 'path'^(path p.blit) - 'file'^s+(en:base64:mimes:html (as-octs:mimes:html q.blit)) - == - :: - %klr - :- %a - %+ turn p.blit - |= [=stye text=(list @c)] - %- pairs - :~ 'text'^a+(turn text |=(c=@c s+(tuft c))) - :: - :- 'stye' - %- pairs - |^ :~ 'back'^(color p.q.stye) - 'fore'^(color q.q.stye) - 'deco'^a+(turn ~(tap in p.stye) |=(d=deco ?~(d ~ s+d))) - == - ++ color - |= =tint - ?@ tint ?~(tint ~ s+tint) - s+(crip ((x-co:co 6) (rep 3 ~[b g r]:tint))) - -- - == - == + ++ json (blit:enjs:dill blit) -- -- diff --git a/pkg/base-dev/mar/css.hoon b/pkg/base-dev/mar/css.hoon new file mode 100644 index 000000000..c4810b211 --- /dev/null +++ b/pkg/base-dev/mar/css.hoon @@ -0,0 +1,21 @@ +:: +:::: /hoon/css/mar + :: +/? 310 +=, eyre +=, mimes:html +|_ mud=@t +++ grow :: convert to + |% ++ mime [/text/css (as-octs mud)] :: convert to %mime + ++ elem ;style :: convert to %hymn + ;- (trip mud) + == + ++ hymn ;html:(head:"{elem}" body) + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (@t q.q)) + ++ noun @t :: clam from %noun + -- +++ grad %mime +-- diff --git a/pkg/base-dev/mar/kelvin.hoon b/pkg/base-dev/mar/kelvin.hoon index f64063d18..7f1b409cb 100644 --- a/pkg/base-dev/mar/kelvin.hoon +++ b/pkg/base-dev/mar/kelvin.hoon @@ -1,18 +1,28 @@ -=/ weft ,[lal=@tas num=@ud] :: TODO remove after merge -|_ kel=weft +|_ kal=waft:clay ++ grow |% ++ mime `^mime`[/text/x-kelvin (as-octs:mimes:html hoon)] - ++ noun kel - ++ hoon (crip "{<[lal num]:kel>}\0a") + ++ noun kal + ++ hoon + %+ rap 3 + %+ turn + %+ sort + ~(tap in (waft-to-wefts:clay kal)) + |= [a=weft b=weft] + ?: =(lal.a lal.b) + (gte num.a num.b) + (gte lal.a lal.b) + |= =weft + (rap 3 '[%' (scot %tas lal.weft) ' ' (scot %ud num.weft) ']\0a' ~) + :: ++ txt (to-wain:format hoon) -- ++ grab |% - ++ noun weft + ++ noun waft:clay ++ mime |= [=mite len=@ud tex=@] - !<(weft (slap !>(~) (ream tex))) + (cord-to-waft:clay tex) -- ++ grad %noun -- diff --git a/pkg/base-dev/mar/sole/action.hoon b/pkg/base-dev/mar/sole/action.hoon index 149ef5ef1..de2835d72 100644 --- a/pkg/base-dev/mar/sole/action.hoon +++ b/pkg/base-dev/mar/sole/action.hoon @@ -20,7 +20,9 @@ |= jon=^json ^- sole-action %- need %. jon => [dejs-soft:format ..sole-action] - |^ (ot id+so dat+(fo %ret (of det+change tab+ni ~)) ~) + |^ (ot id+id dat+(fo %ret (of det+change tab+ni ~)) ~) + ++ id + (ot who+(su ;~(pfix sig fed:ag)) ses+so ~) ++ fo |* [a=term b=fist] |=(c=json ?.(=([%s a] c) (b c) (some [a ~]))) diff --git a/pkg/base-dev/mar/story.hoon b/pkg/base-dev/mar/story.hoon index bf07ac742..70704efce 100644 --- a/pkg/base-dev/mar/story.hoon +++ b/pkg/base-dev/mar/story.hoon @@ -46,18 +46,13 @@ [/text/x-urb-story (as-octs:mimes:html (of-wain:format txt))] ++ txt ^- wain - %- snoc :_ '' :: ensures terminating newline is present + %- zing + %+ join `wain`~['---'] %+ murn ~(tap by tale) - |= [[=tako:clay =proses]] - ^- (unit cord) + |= [=tako:clay =proses] + ^- (unit wain) ?~ proses ~ - %- some - %- crip - ;: welp - (tako-to-text tako) - (proses-to-text proses) - "---" - == + (some (chapter-to-text tako proses)) -- ++ grab |% :: convert from diff --git a/pkg/base-dev/sur/bitcoin.hoon b/pkg/base-dev/sur/bitcoin.hoon index 06aee8178..4b83b5bf4 100644 --- a/pkg/base-dev/sur/bitcoin.hoon +++ b/pkg/base-dev/sur/bitcoin.hoon @@ -4,7 +4,7 @@ :: chyg: whether account is (non-)change. 0 or 1 :: bytc: "btc-byts" with dat cast to @ux |% -+$ network ?(%main %testnet) ++$ network ?(%main %testnet %regtest) +$ hexb [wid=@ dat=@ux] :: hex byts +$ bits [wid=@ dat=@ub] +$ xpub @ta diff --git a/pkg/base-dev/sur/hood.hoon b/pkg/base-dev/sur/hood.hoon index d1087a05b..06ce86e5f 100644 --- a/pkg/base-dev/sur/hood.hoon +++ b/pkg/base-dev/sur/hood.hoon @@ -1,147 +1,125 @@ =, clay =* dude dude:gall |% -:: $snap: kiln snapshot -:: -+$ snap (map desk arak) -:: $diff: subscription update -:: -+$ diff - $% [%block =desk =arak =weft blockers=(set desk)] - [%reset =desk =arak] - [%commit =desk =arak] - [%merge-sunk =desk =arak =tang] - [%merge-fail =desk =arak =tang] - [%suspend =desk =arak] - [%revive =desk =arak] ++$ pike + $: sync=(unit [=ship =desk]) + hash=@uv + =zest + wic=(set weft) == -:: $arak: foreign vat tracker :: -:: .rail: upstream tracking state, if any -:: .rein: configuration for agents ++$ pikes (map desk pike) :: -+$ arak - $: rail=(unit rail) - =rein - == -:: $rail: upstream tracking state -:: -:: .publisher: Ship that originally published desk, if available -:: .paused: is tracking paused? or live -:: .ship: upstream ship (could be .our) -:: .desk: name of upstream desk -:: .aeon: next aeon to pull from upstream -:: .next: list of pending commits with future kelvins -:: -+$ rail - $: publisher=(unit ship) - paused=? - =ship - =desk - =aeon - next=(list rung) - == :: $rung: reference to upstream commit :: +$ rung [=aeon =weft] -:: $rein: diff from desk manifest :: -:: .liv: suspended? if suspended, no agents should run -:: .add: agents not in manifest that should be running -:: .sub: agents in manifest that should not be running ++$ sync-state [nun=@ta kid=(unit desk) let=@ud] ++$ sink (unit [her=@p sud=desk kid=(unit desk) let=@ud]) +:: +report-prep: get data required for reports :: -+$ rein - $: liv=_& - add=(set dude) - sub=(set dude) +++ report-prep + |= [our=@p now=@da] + =/ ego (scot %p our) + =/ wen (scot %da now) + :* .^(rock:tire %cx /(scot %p our)//(scot %da now)/tire) + .^(=cone %cx /(scot %p our)//(scot %da now)/domes) + .^((map desk [ship desk]) %gx /[ego]/hood/[wen]/kiln/sources/noun) + .^ (map [desk ship desk] sync-state) %gx + /[ego]/hood/[wen]/kiln/syncs/noun + == == -:: -+$ vat [=desk hash=@uv =cass =arak] :: +report-vats: report on all desk installations :: ++ report-vats |= [our=@p now=@da] ^- tang - =+ .^ raz=(list vat) - %gx /(scot %p our)/hood/(scot %da now)/kiln/vats/noun - == - :- (report-kids our now) - (turn raz |=(v=vat (report-vat our now v))) + =/ desks .^((set desk) %cd /(scot %p our)/base/(scot %da now)) + =/ prep (report-prep our now) + %+ turn ~(tap in desks) + |=(syd=desk (report-vat prep our now syd)) :: +report-vat: report on a single desk installation :: ++ report-vat - |= [our=ship now=@da vat] + |= $: $: tyr=rock:tire =cone sor=(map desk [ship desk]) + zyn=(map [desk ship desk] sync-state) + == + our=ship now=@da syd=desk + == ^- tank + =/ ego (scot %p our) + =/ wen (scot %da now) + =+ .^(=cass %cw /[ego]/[syd]/[wen]) ?: =(ud.cass 0) - leaf+"desk does not yet exist: {}" + leaf+"desk does not yet exist: {}" + ?: =(%kids syd) + =+ .^(hash=@uv %cz /[ego]/[syd]/[wen]) + leaf+"%kids %cz hash: {}" =/ kel-path - /(scot %p our)/[desk]/(scot %da now)/sys/kelvin + /[ego]/[syd]/[wen]/sys/kelvin ?. .^(? %cu kel-path) - leaf+"bad desk: {}" - =+ .^(=weft %cx kel-path) - :+ %rose ["" "{}" "::"] + leaf+"bad desk: {}" + =+ .^(=waft %cx kel-path) + :+ %rose ["" "{}" "::"] ^- tang - =/ meb (mergebase-hashes our desk now arak) - =/ poz - ?~ rail.arak "local" - ?:(paused.u.rail.arak "paused" "tracking") - =/ sat ?:(liv.rein.arak "running" "suspended") - =/ pen - ?~ rail.arak "~" - <(turn next.u.rail.arak |=([@ lal=@tas num=@] [lal num]))> - :~ leaf/"/sys/kelvin: {<[lal num]:weft>}" + =/ hash .^(@uv %cz /[ego]/[syd]/[wen]) + =/ =sink + ?~ s=(~(get by sor) syd) + ~ + ?~ z=(~(get by zyn) syd u.s) + ~ + `[-.u.s +.u.s +.u.z] + =/ meb=(list @uv) + ?~ sink [hash]~ + (mergebase-hashes our syd now her.u.sink sud.u.sink) + =/ dek (~(got by tyr) syd) + =/ =dome (~(got by cone) our syd) + =/ [on=(list [@tas ?]) of=(list [@tas ?])] + (skid ~(tap by ren.dome) |=([* ?] +<+)) + =/ sat + ?- zest.dek + %live "running" + %dead "suspended" + %held "suspended until next update" + == + =/ kul=tape + %+ roll + %+ sort + ~(tap in (waft-to-wefts:clay waft)) + |= [a=weft b=weft] + ?: =(lal.a lal.b) + (lte num.a num.b) + (lte lal.a lal.b) + |= [=weft =tape] + (welp " {<[lal num]:weft>}" tape) + :~ leaf/"/sys/kelvin: {kul}" leaf/"base hash: {?.(=(1 (lent meb)) <(head meb)>)}" leaf/"%cz hash: {}" :: leaf/"app status: {sat}" - leaf/"force on: {?:(=(~ add.rein.arak) "~" )}" - leaf/"force off: {?:(=(~ sub.rein.arak) "~" )}" + leaf/"force on: {?:(=(~ on) "~" )}" + leaf/"force off: {?:(=(~ of) "~" )}" :: - leaf/"publishing ship: {?~(rail.arak <~> )}" - leaf/"updates: {poz}" - leaf/"source ship: {?~(rail.arak <~> )}" - leaf/"source desk: {?~(rail.arak <~> )}" - leaf/"source aeon: {?~(rail.arak <~> )}" - leaf/"pending updates: {pen}" + leaf/"publishing ship: {?~(sink <~> <(get-publisher our syd now)>)}" + leaf/"updates: {?~(sink "local" "remote")}" + leaf/"source ship: {?~(sink <~> )}" + leaf/"source desk: {?~(sink <~> )}" + leaf/"source aeon: {?~(sink <~> )}" + leaf/"kids desk: {?~(sink <~> ?~(kid.u.sink <~> ))}" + leaf/"pending updates: {<`(list [@tas @ud])`~(tap in wic.dek)>}" == :: +report-kids: non-vat cz hash report for kids desk :: ++ report-kids |= [our=ship now=@da] ^- tank - =/ dek %kids + =/ syd %kids =/ ego (scot %p our) =/ wen (scot %da now) - ?. (~(has in .^((set desk) %cd /[ego]//[wen])) dek) + ?. (~(has in .^((set desk) %cd /[ego]//[wen])) syd) leaf/"no %kids desk" - =+ .^(hash=@uv %cz /[ego]/[dek]/[wen]) + =+ .^(hash=@uv %cz /[ego]/[syd]/[wen]) leaf/"%kids %cz hash: {}" -:: +read-kelvin-foreign: read /sys/kelvin from a foreign desk -:: -++ read-kelvin-foreign - |= [=ship =desk =aeon] - ^- weft - ~| read-foreign-kelvin/+< - =/ her (scot %p ship) - =/ syd (scot %tas desk) - =/ yon (scot %ud aeon) - :: - =/ dom .^(dome cv/~[her syd yon]) - =/ tak (scot %uv (~(got by hit.dom) let.dom)) - =/ yak .^(yaki cs/~[her syd yon %yaki tak]) - =/ lob (scot %uv (~(got by q.yak) /sys/kelvin)) - =/ peg .^(page cs/~[her syd yon %blob lob]) - ;;(weft q.peg) -:: +read-kelvin-local: read /sys/kelvin from a local desk -:: -++ read-kelvin-local - |= [our=ship =desk now=@da] - ^- (unit weft) - ~| read-kelvin-local+desk - =/ pax (en-beam [our desk da+now] /sys/kelvin) - ?. .^(? cu/pax) - ~ - [~ .^(weft cx/pax)] :: +read-bill-foreign: read /desk/bill from a foreign desk :: ++ read-bill-foreign @@ -152,7 +130,7 @@ =/ syd (scot %tas desk) =/ yon (scot %ud aeon) :: - =/ dom .^(dome cv/~[her syd yon]) + =/ dom .^(domo cv/~[her syd yon]) =/ tak ~| aeons=~(key by hit.dom) (scot %uv (~(got by hit.dom) aeon)) =/ yak .^(yaki cs/~[her syd yon %yaki tak]) @@ -169,21 +147,6 @@ ?. .^(? cu/pax) *(list dude) .^((list dude) cx/pax) -:: +adjust-dudes: which agents should be started and stopped -:: -:: Will ask Gall to start agents that it's already running -:: but that should be ok, and might be safer in case other -:: unprocessed moves would have turned them off. -:: -++ adjust-dudes - |= $: local=[our=ship =desk now=@da] - =rein - == - ^- [jolt=(list dude) idle=(list dude)] - =/ all=(list dude) (read-bill local) - =/ want (get-apps-want local all rein) - =/ have (get-apps-live local) - [want (skip have ~(has in (sy want)))] :: ++ get-remote-diff |= [our=ship here=desk now=@da her=ship there=desk when=aeon] @@ -210,38 +173,18 @@ ^- (list [=dude live=?]) %~ tap in .^((set [=dude live=?]) ge+/(scot %p our)/[desk]/(scot %da now)) -:: +get-apps-want: find which apps should be running on a desk -:: -++ get-apps-want - |= [local=[our=ship =desk now=@da] duz=(list dude) =rein] - ^- (list dude) - ?. liv.rein ~ - ?. |(=(`zuse+zuse (read-kelvin-local local)) =(%base desk.local)) ~ - =. duz (skip duz ~(has in sub.rein)) - =. duz (weld duz (skip ~(tap in add.rein) ~(has in (sy duz)))) - duz :: ++ mergebase-hashes - |= [our=@p =desk now=@da =arak] - ?~ rail.arak - ~ - =/ her (scot %p ship.u.rail.arak) + |= [our=@p syd=desk now=@da her=ship sud=desk] + =/ her (scot %p her) =/ ego (scot %p our) =/ wen (scot %da now) - %+ turn .^((list tako) %cs ~[ego desk wen %base her desk.u.rail.arak]) - |=(=tako .^(@uv %cs ~[ego desk wen %hash (scot %uv tako)])) + %+ turn .^((list tako) %cs ~[ego syd wen %base her sud]) + |=(=tako .^(@uv %cs ~[ego syd wen %hash (scot %uv tako)])) :: ++ enjs =, enjs:format |% - ++ vats - |= v=(list ^vat) - ^- json - %- pairs - %+ turn v - |= va=^vat - [desk.va (vat va)] - :: ++ tim |= t=@ ^- json @@ -254,15 +197,6 @@ da+(tim da.c) == :: - ++ vat - |= v=^vat - %- pairs - :~ desk+s+desk.v - hash+s+(scot %uv hash.v) - cass+(cass cass.v) - arak+(arak arak.v) - == - :: ++ weft |= w=^weft %- pairs @@ -276,30 +210,5 @@ :~ aeon+(numb aeon.r) weft+(weft weft.r) == - :: - ++ rein - |= r=^rein - %- pairs - :~ add+a+(turn ~(tap in add.r) (lead %s)) - sub+a+(turn ~(tap in sub.r) (lead %s)) - == - :: - ++ arak - |= a=^arak - %- pairs - :~ rail+?~(rail.a ~ (rail u.rail.a)) - rein+(rein rein.a) - == - :: - ++ rail - |= r=^rail - %- pairs - :~ ship+s+(scot %p ship.r) - publisher+?~(publisher.r ~ s+(scot %p u.publisher.r)) - desk+s+desk.r - paused+b+paused.r - aeon+(numb aeon.r) - next+a+(turn next.r rung) - == -- -- diff --git a/pkg/base-dev/sur/sole.hoon b/pkg/base-dev/sur/sole.hoon index e942bccb8..f8141f701 100644 --- a/pkg/base-dev/sur/sole.hoon +++ b/pkg/base-dev/sur/sole.hoon @@ -3,8 +3,9 @@ :: ^? |% ++$ sole-id [who=@p ses=@ta] +$ sole-action :: sole to app - $: id=@ta :: duct id + $: id=sole-id :: session id $= dat $% :: [%abo ~] :: reset interaction [%det sole-change] :: command line edit diff --git a/pkg/base-dev/sur/spider.hoon b/pkg/base-dev/sur/spider.hoon index 2a6a8207e..7c212681f 100644 --- a/pkg/base-dev/sur/spider.hoon +++ b/pkg/base-dev/sur/spider.hoon @@ -1,7 +1,7 @@ /+ libstrand=strand =, strand=strand:libstrand |% -+$ thread $-(vase _*form:(strand ,vase)) ++$ thread $-(vase shed:khan) +$ input [=tid =cage] +$ tid tid:strand +$ bowl bowl:strand @@ -18,4 +18,10 @@ file=term =vase == ++$ inline-args + $: parent=(unit tid) + use=(unit tid) + =beak + =shed:khan + == -- diff --git a/pkg/base-dev/sur/sss.hoon b/pkg/base-dev/sur/sss.hoon new file mode 100644 index 000000000..9533719d7 --- /dev/null +++ b/pkg/base-dev/sur/sss.hoon @@ -0,0 +1,36 @@ +|% +++ lake + |$ [rock wave] + $_ ^? + |% + ++ name *term + +$ rock ^rock + +$ wave ^wave + ++ wash |~ [rock wave] *rock + -- ++$ aeon @ud ++$ dude dude:agent:gall ++$ what ?(%rock %wave) +++ poke + |% + ++ request + |* paths=mold + $: path=paths + =dude + when=(unit aeon) + == + ++ response + |* [=(lake) paths=mold] + $: path=paths + =dude + =aeon + $% [type=?(%nigh %yore) ~] + $: type=%scry + $% [what=%rock =rock:lake] + [what=%wave =wave:lake] + == == == == + ++ on-rock + |* [=(lake) paths=mold] + ,[path=paths src=ship from=dude =rock:lake wave=(unit wave:lake)] + -- +-- diff --git a/pkg/bitcoin/app/btc-provider.hoon b/pkg/bitcoin/app/btc-provider.hoon deleted file mode 100644 index af4a69488..000000000 --- a/pkg/bitcoin/app/btc-provider.hoon +++ /dev/null @@ -1,400 +0,0 @@ -:: btc-provider.hoon -:: Proxy that serves a BTC full node and ElectRS address indexer -:: -:: Subscriptions: none -:: To Subscribers: /clients -:: current connection state -:: results/errors of RPC calls -:: -:: Scrys -:: x/is-whitelisted/SHIP: bool, whether ship is whitelisted -:: -/- *bitcoin, json-rpc, *btc-provider -/+ dbug, default-agent, bl=btc, groupl=group, resource -~% %btc-provider-top ..part ~ -|% -+$ card card:agent:gall -+$ versioned-state - $% state-0 - state-1 - state-2 - == -:: -+$ state-0 [%0 =host-info =whitelist] -+$ state-1 [%1 =host-info =whitelist timer=(unit @da)] -+$ state-2 [%2 =host-info =whitelist timer=(unit @da) interval=@dr] --- -%- agent:dbug -=| state-2 -=* state - -^- agent:gall -=< -~% %btc-provider-agent ..send-status ~ -|_ =bowl:gall -+* this . - def ~(. (default-agent this %|) bowl) - hc ~(. +> bowl) -:: -++ on-init - ^- (quip card _this) - =| wl=^whitelist - :- ~ - %_ this - host-info ['' connected=%.n %main block=0 clients=*(set ship)] - whitelist wl(public %.n, kids %.n) - timer ~ - interval ~m1 - == -:: -++ on-save - ^- vase - !>(state) -:: -++ on-load - |= old-state=vase - ^- (quip card _this) - =/ old !<(versioned-state old-state) - ?- -.old - %2 - [~ this(state old)] - :: - %1 - `this(state [%2 host-info.old whitelist.old timer.old ~m1]) - :: - %0 - :_ this(state [%2 host-info.old whitelist.old ~ ~m1]) - ?: =('' api-url.host-info.old) ~ - ~[(start-ping-timer:hc ~s0)] - == -:: -++ on-poke - ~/ %on-poke - |= [=mark =vase] - ^- (quip card _this) - |^ - ?> ?|((team:title our.bowl src.bowl) (is-client:hc src.bowl)) - =^ cards state - ?+ mark (on-poke:def mark vase) - %btc-provider-command - ?> (team:title our.bowl src.bowl) - (handle-command !<(command vase)) - :: - %btc-provider-action - (handle-action !<(action vase)) - :: - %noun - ?. =(q.vase %kick-timer) `state - :_ state(timer `now.bowl) - :* (start-ping-timer ~s0) - ?~ timer ~ - [[%pass /block-time %arvo %b %rest u.timer] ~] - == - == - [cards this] - :: - ++ handle-command - |= comm=command - ^- (quip card _state) - ?- -.comm - %set-credentials - :_ %_ state - host-info [api-url.comm %.n network.comm 0 *(set ship)] - timer `now.bowl - == - :* (start-ping-timer:hc ~s0) - ?~ timer ~ - [[%pass /block-time %arvo %b %rest u.timer] ~] - == - :: - %add-whitelist - :- ~ - ?- -.wt.comm - %public - state(public.whitelist %.y) - :: - %kids - state(kids.whitelist %.y) - :: - %users - state(users.whitelist (~(uni in users.whitelist) users.wt.comm)) - :: - %groups - state(groups.whitelist (~(uni in groups.whitelist) groups.wt.comm)) - == - :: - %remove-whitelist - =. state - ?- -.wt.comm - %public - state(public.whitelist %.n) - :: - %kids - state(kids.whitelist %.n) - :: - %users - state(users.whitelist (~(dif in users.whitelist) users.wt.comm)) - :: - %groups - state(groups.whitelist (~(dif in groups.whitelist) groups.wt.comm)) - == - clean-client-list - :: - %set-interval - `state(interval inte.comm) - == - :: - :: +clean-client-list: remove clients who are no longer whitelisted - :: called after a whitelist change - :: - ++ clean-client-list - ^- (quip card _state) - =/ to-kick=(set ship) - %- silt - %+ murn ~(tap in clients.host-info) - |= c=ship ^- (unit ship) - ?:((is-whitelisted:hc c) ~ `c) - :_ state(clients.host-info (~(dif in clients.host-info) to-kick)) - %+ turn ~(tap in to-kick) - |=(c=ship [%give %kick ~[/clients] `c]) - :: - :: if not connected, only %ping action is allowed - :: - ++ handle-action - |= act=action - ^- (quip card _state) - :_ state - ?. ?|(connected.host-info ?=(%ping -.act)) - ~[(send-update:hc [%| %not-connected 500] ~)] - :_ ~ - %+ req-card act - ^- action:rpc-types - ?- -.act - %address-info [%get-address-info address.act] - %tx-info [%get-tx-vals txid.act] - %raw-tx [%get-raw-tx txid.act] - %broadcast-tx [%broadcast-tx rawtx.act] - %ping [%get-block-info ~] - %block-info [%get-block-info block.act] - == - :: - ++ req-card - |= [act=action ract=action:rpc-types] - =/ req=request:http - (gen-request:bl host-info ract) - [%pass (rpc-wire act) %arvo %i %request req *outbound-config:iris] - :: - ++ rpc-wire - |= act=action - ^- wire - /[-.act]/(scot %p src.bowl)/(scot %ux (cut 3 [0 20] eny.bowl)) - -- -:: -++ on-watch - ~/ %on-watch - |= pax=path - ^- (quip card _this) - :: checking provider permissions before trying to subscribe - :: terrible hack until we have cross-ship scries - :: - ?: ?=([%permitted @ ~] pax) - :_ this - =/ jon=json - %+ frond:enjs:format - %'providerStatus' - %- pairs:enjs:format - :~ provider+s+(scot %p our.bowl) - permitted+b+(is-whitelisted:hc src.bowl) - == - [%give %fact ~ %json !>(jon)]~ - :: - ?> ?| ?=([%clients ~] pax) - ?& ?=([%clients @ ~] pax) - =(src.bowl (slav %p i.t.pax)) - == - == - ?. (is-whitelisted:hc src.bowl) - ~|("btc-provider: blocked client {}" !!) - ~& > "btc-provider: accepted client {}" - `this(clients.host-info (~(put in clients.host-info) src.bowl)) -:: -++ on-arvo - ~/ %on-arvo - |= [wir=wire =sign-arvo] - |^ - ^- (quip card _this) - :: check for connectivity every 30 seconds - :: - ?: ?=([%ping-timer *] wir) - `this - ?: ?=([%block-ping *] wir) - :_ this(timer `(add now.bowl interval)) - :~ do-ping - (start-ping-timer:hc interval) - == - =^ cards state - ?+ +<.sign-arvo (on-arvo:def wir sign-arvo) - %http-response - (handle-rpc-response wir client-response.sign-arvo) - == - [cards this] - :: - ++ do-ping - ^- card - =/ act=action [%ping ~] - :* %pass /ping/[(scot %da now.bowl)] %agent - [our.bowl %btc-provider] %poke - %btc-provider-action !>(act) - == - :: - :: Handles HTTP responses from RPC servers. Parses for errors, - :: then handles response. For actions that require collating multiple - :: RPC calls, uses req-card to call out to RPC again if more - :: information is required. - ++ handle-rpc-response - |= [=wire response=client-response:iris] - ^- (quip card _state) - ?. ?=(%finished -.response) `state - =* status status-code.response-header.response - :: handle error types: connection errors, RPC errors (in order) - :: - =^ conn-err state - (connection-error status) - ?^ conn-err - :_ state(connected.host-info %.n) - :~ (send-status:hc [%disconnected ~] ~) - (send-update:hc [%| u.conn-err] ~) - == - :: - %+ handle-rpc-result wire - %- parse-result:rpc:bl - (get-rpc-response:bl response) - :: - ++ handle-rpc-result - |= [=wire r=result:rpc-types] - ^- (quip card _state) - =/ ship=(unit ship) - (slaw %p (snag 1 wire)) - ?+ -.wire ~|("Unexpected HTTP response" !!) - %address-info - ?> ?=([%get-address-info *] r) - :_ state - ~[(send-update:hc [%.y %address-info +.r] ship)] - :: - %tx-info - ?> ?=([%get-tx-vals *] r) - :_ state - ~[(send-update:hc [%.y %tx-info +.r] ship)] - :: - %raw-tx - ?> ?=([%get-raw-tx *] r) - :_ state - ~[(send-update:hc [%.y %raw-tx +.r] ship)] - :: - %broadcast-tx - ?> ?=([%broadcast-tx *] r) - :_ state - ~[(send-update:hc [%.y %broadcast-tx +.r] ship)] - :: - %ping - ?> ?=([%get-block-info *] r) - :_ state(connected.host-info %.y, block.host-info block.r) - :_ ~ - %- send-status:hc - :_ ~ - ?: =(block.host-info block.r) - [%connected network.host-info block.r fee.r] - [%new-block network.host-info block.r fee.r blockhash.r blockfilter.r] - :: - %block-info - ?> ?=([%get-block-info *] r) - :_ state - ~[(send-update:hc [%.y %block-info network.host-info +.r] ship)] - == - :: - ++ connection-error - |= status=@ud - ^- [(unit error) _state] - ?+ status [`[%rpc-error ~] state] - %200 [~ state] - %400 [`[%bad-request status] state] - %401 [`[%no-auth status] state(connected.host-info %.n)] - %502 [`[%not-connected status] state(connected.host-info %.n)] - %504 [`[%not-connected status] state(connected.host-info %.n)] - == - -- -:: -++ on-peek - ~/ %on-peek - |= pax=path - ^- (unit (unit cage)) - ?+ pax (on-peek:def pax) - [%x %is-whitelisted @t ~] - ``noun+!>((is-whitelisted:hc (ship (slav %p +>-.pax)))) - :: - [%x %is-client @t ~] - ``noun+!>((is-client:hc (ship (slav %p +>-.pax)))) -== -:: -++ on-leave on-leave:def -++ on-agent on-agent:def -++ on-fail on-fail:def --- -:: helper core -~% %btc-provider-helper ..card ~ -|_ =bowl:gall -+* grp ~(. groupl bowl) -++ send-status - |= [=status ship=(unit ship)] - ^- card - %- ?: ?=(%new-block -.status) - ~&(>> "%new-block: {}" same) - same - =- [%give %fact ~[-] %btc-provider-status !>(status)] - ?~ ship /clients - /clients/(scot %p u.ship) -:: -++ send-update - |= [=update ship=(unit ship)] - ^- card - %- ?: ?=(%.y -.update) - same - ~&(>> "prov. err: {}" same) - =- [%give %fact ~[-] %btc-provider-update !>(update)] - ?~ ship /clients - /clients/(scot %p u.ship) -:: -++ is-whitelisted - ~/ %is-whitelisted - |= user=ship - ^- ? - |^ - ?| public.whitelist - =(our.bowl user) - ?&(kids.whitelist is-kid) - (~(has in users.whitelist) user) - in-group - == - :: - ++ is-kid - =(our.bowl (sein:title our.bowl now.bowl user)) - :: - ++ in-group - =/ gs ~(tap in groups.whitelist) - ?. is-running:grp %.n - |- - ?~ gs %.n - ?: (is-member:grp user i.gs) - %.y - $(gs t.gs) - -- -:: -++ is-client - |= user=ship - ^- ? - (~(has in clients.host-info) user) -:: -++ start-ping-timer - |= interval=@dr - ^- card - [%pass /block-ping %arvo %b %wait (add now.bowl interval)] --- diff --git a/pkg/bitcoin/app/btc-wallet.hoon b/pkg/bitcoin/app/btc-wallet.hoon deleted file mode 100644 index d2fc5ac70..000000000 --- a/pkg/bitcoin/app/btc-wallet.hoon +++ /dev/null @@ -1,1383 +0,0 @@ -:: btc-wallet -:: -:: Scrys -:: x/scanned: (list xpub) of all scanned wallets -:: x/balance/xpub: balance (in sats) of wallet -/- *btc-wallet, bp=btc-provider, settings -/+ dbug, default-agent, bl=btc, bc=bitcoin, bcu=bitcoin-utils, bip32, agentio -~% %btc-wallet-top ..part ~ -|% -+$ card card:agent:gall -:: -++ defaults - |% - ++ params - :* batch-size=20 - fam-limit=10 - piym-limit=3 - == - ++ confs 6 - ++ fee 100 - -- -:: -+$ versioned-state - $% state-0 - state-1 - state-2 - state-3 - == -:: -+$ state-0 - $: %0 - prov=(unit provider) - walts=(map xpub:bc walt-0) - =btc-state - =history - curr-xpub=(unit xpub:bc) - =scans - =params - feybs=(map ship sats) - =piym - =poym - ahistorical-txs=(set txid) - == -:: -+$ base-state - $: prov=(unit provider) - walts=(map xpub:bc walt) - =btc-state - =history - curr-xpub=(unit xpub:bc) - =scans - =params - feybs=(map ship sats) - =piym - =poym - ahistorical-txs=(set txid) - == -:: -+$ state-1 [%1 base-state] -+$ state-2 [%2 base-state] -+$ state-3 [%3 base-state] --- -=| state-3 -=* state - -%- agent:dbug -^- agent:gall -=< -~% %btc-wallet-agent ..retry-filtered-addrs ~ -|_ =bowl:gall -+* this . - def ~(. (default-agent this %|) bowl) - hc ~(. +> bowl) - io ~(. agentio bowl) - pass pass:io -:: -++ on-init -^- (quip card _this) - ~& > '%btc-wallet initialized' - :: - =/ warning=event:settings [%put-entry q.byk.bowl %btc-wallet %warning %b %.y] - =/ currency=event:settings [%put-entry q.byk.bowl %btc-wallet %currency %s 'USD'] - =/ cards=(list card) - :~ (poke-our:hc %settings-store %settings-event !>(warning)) - (poke-our:hc %settings-store %settings-event !>(currency)) - == - :: - :- cards - %_ this - state - :* %3 - ~ - *(map xpub:bc walt) - *^btc-state - *^history - ~ - *^scans - params:defaults - *(map ship sats) - *^piym - *^poym - ~ - == - == -:: -++ on-save - ^- vase - !>(state) -:: -++ on-load - |= old-state=vase - ^- (quip card _this) - ~& > '%btc-wallet recompiled' - =/ ver !<(versioned-state old-state) - =| cards=(list card) - |- - ?- -.ver - %3 - [(flop cards) this(state ver)] - :: - %2 - %_ $ - -.ver %3 - cards :_(cards (~(wait pass /migrate-settings) (add now.bowl ~s1))) - == - :: - %1 - =? cards ?=(^ prov.ver) - :_ cards - =/ =dock [host.u.prov.ver %btc-provider] - =/ wir=wire /set-provider/(scot %p host.u.prov.ver) - =/ priv-wire=^wire (welp wir [%priv ~]) - [%pass priv-wire %agent dock %watch /clients/(scot %p our.bowl)] - $(-.ver %2) - :: - %0 - =/ new-walts=(map xpub:bc walt) - %- ~(run by walts.ver) - |= old-walt=walt-0 - ^- walt - old-walt(wilt +6:wilt.old-walt) - $(ver [%1 +.ver(walts new-walts)]) - == -:: -++ on-poke - ~/ %on-poke - |= [=mark =vase] - ^- (quip card _this) - |^ - =^ cards state - ?+ mark (on-poke:def mark vase) - :: - %noun - ?> =(our.bowl src.bowl) - (handle-noun q.vase) - :: - %btc-wallet-command - ?> =(our.bowl src.bowl) - (handle-command !<(command vase)) - :: - %btc-wallet-action - ?< =(our.bowl src.bowl) - (handle-action !<(action vase)) - :: - %btc-wallet-internal - ?> =(our.bowl src.bowl) - (handle-internal !<(internal vase)) - == - [cards this] - :: - ++ handle-noun - |= non=* - ?> ?=(%migrate-settings non) - :_ state - ^- (list card) - =/ bas=path /(scot %p our.bowl)/settings-store/(scot %da now.bowl) - ?. .^(? %gu bas) - ~& [dap.bowl %settings-store-mia] - ~ - ?. .^(? %gx (weld bas /has-bucket/landscape/btc-wallet/noun)) - ~ - =/ dat - .^(data:settings %gx (weld bas /bucket/landscape/btc-wallet/noun)) - ?> ?=(%bucket -.dat) - |^ :- =/ del=event:settings [%del-bucket %landscape %btc-wallet] - (poke-our:hc %settings-store %settings-event !>(del)) - (murn ~(tap by bucket.dat) copy-if-missing) - :: - ++ copy-if-missing - |= [=key:settings =val:settings] - ^- (unit card) - =/ hav=? - .^(? %gx (weld bas /has-entry/[q.byk.bowl]/btc-wallet/[key]/noun)) - ?: hav ~ - ~& [dap.bowl %importing-previous-setting key] - =/ put=event:settings [%put-entry q.byk.bowl %btc-wallet key val] - `(poke-our:hc %settings-store %settings-event !>(put)) - -- - :: - ++ handle-command - |= comm=command - ^- (quip card _state) - ?> (team:title our.bowl src.bowl) - ?- -.comm - %set-provider - |^ - ?~ provider.comm - ?~ prov `state - :_ state(prov ~) - %- zing - :~ (leave-provider host.u.prov) - (give-update:hc %change-provider ~)^~ - == - :_ state(prov `[u.provider.comm %.n]) - ?~ prov - (watch-provider:hc u.provider.comm) - %- zing - :~ (leave-provider host.u.prov) - (watch-provider:hc u.provider.comm) - (give-update:hc %change-provider `[u.provider.comm %.n])^~ - == - :: - ++ leave-provider - |= who=@p - ^- (list card) - =/ wir=wire /set-provider/(scot %p who) - =/ priv-wir=wire (welp wir %priv^~) - :+ [%pass wir %agent who^%btc-provider %leave ~] - [%pass priv-wir %agent who^%btc-provider %leave ~] - ~ - -- - :: - %check-provider - =/ pax /permitted/(scot %p provider.comm) - :_ state - [%pass pax %agent [provider.comm %btc-provider] %watch pax]~ - :: - %check-payee - =/ pax /check-payee/(scot %p payee.comm) - :_ state - [%pass pax %agent [payee.comm %btc-wallet] %watch pax]~ - :: - %set-current-wallet - (set-curr-xpub:hc xpub.comm) - :: - %add-wallet - |^ - ?~ (~(has by walts) xpub.comm) - ((slog ~[leaf+"xpub already in wallet"]) `state) - =/ w=walt (from-xpub:bl +.comm) - =. walts (~(put by walts) xpub.comm w) - =^ c1 state (init-batches xpub.comm (dec max-gap.w)) - =^ c2 state (set-curr-xpub:hc xpub.comm) - [(weld c1 c2) state] - :: - ++ init-batches - |= [=xpub:bc endpoint=idx] - ^- (quip card _state) - =/ b=batch - [(silt (gulf 0 endpoint)) endpoint %.n] - =^ cards0 state (req-scan:hc b xpub %0) - =^ cards1 state (req-scan:hc b xpub %1) - :_ state - [(scan-progress:hc xpub) (weld cards0 cards1)] - -- - :: - %delete-wallet - =* cw curr-xpub.state - =? cw ?&(?=(^ cw) =(u.cw xpub.comm)) - ~ - =. scans (~(del by scans) [xpub.comm %0]) - =: scans (~(del by scans) [xpub.comm %1]) - walts (~(del by walts) xpub.comm) - history - %- ~(rep by history) - |= [[=txid =hest] out=_history] - ?: =(xpub.hest xpub.comm) - (~(del by out) txid) - out - == - [[give-initial:hc]~ state] - :: - %init-payment-external - ?: is-broadcasting:hc - %- (slog ~[leaf+"broadcasting a transaction"]) - [[(give-update:hc %error %tx-being-signed)]~ state] - ?~ curr-xpub - ~|("btc-wallet: no curr-xpub set" !!) - ?: (is-dust:hc value.comm address.comm) - %- (slog ~[leaf+"sending dust"]) - [[(give-update:hc %error %no-dust)]~ state] - :: - ~| "no wallet with xpub" - =/ wal (~(got by walts) u.curr-xpub) - ~| "wallet not scanned yet" - ?> scanned.wal - =/ [tb=(unit txbu) chng=(unit sats)] - %~ with-change sut:bl - :* wal eny.bowl - block.btc-state ~ - feyb.comm ~[[address.comm value.comm ~]] - == - ?~ tb - %- %- slog - ~[leaf+"insufficient balance or not enough confirmed balance"] - [[(give-update:hc %error %insufficient-balance)]~ state] - =^ tb=(unit txbu) state - ?~ chng `state - =/ [addr=address =idx w=walt] - ~(nixt-address wad:bl wal %1) - :_ state(walts (~(put by walts) u.curr-xpub w)) - `(~(add-output txb:bl u.tb) addr u.chng `(~(hdkey wad:bl w %1) idx)) - =/ po=^poym - ?~(tb [~ ~] [tb note.comm]) - :_ state(poym po) - ?~ tb ~ - %+ turn txis.u.tb - |=(=txi (poke-provider:hc %raw-tx txid.utxo.txi)) - :: - :: overwrites any payment being built in poym - :: - %init-payment - ?: =(src.bowl payee.comm) - %- (slog ~[leaf+"can't pay ourselves"]) - [[(give-update:hc %error %cant-pay-ourselves)]~ state] - ?: ?=(%pawn (clan:title payee.comm)) - %- (slog ~[leaf+"no comets"]) - [[(give-update:hc %error %no-comets)]~ state] - ?: is-broadcasting:hc - %- (slog ~[leaf+"broadcasting a transaction"]) - [[(give-update:hc %error %tx-being-signed)]~ state] - =: poym `note.comm - feybs (~(put by feybs) payee.comm feyb.comm) - == - :_ state - ~[(poke-peer:hc payee.comm [%gen-pay-address value.comm note.comm])] - :: - %broadcast-tx - ?~ prov ~|("Provider not connected" !!) - =+ signed=(from-cord:hxb:bcu txhex.comm) - =/ tx-match=? - ?~ txbu.poym %.n - =((get-id:txu:bc (decode:txu:bc signed)) ~(get-txid txb:bl u.txbu.poym)) - :- ?. tx-match - %- (slog leaf+"txid didn't match txid in wallet") - [(give-update:hc %error %broadcast-fail)]~ - ~[(poke-provider:hc [%broadcast-tx signed])] - ?. tx-match state - ?~ txbu.poym state - state(signed-tx.u.txbu.poym `signed) - :: - %gen-new-address - ?~ curr-xpub - ~|("btc-wallet: no curr-xpub set" !!) - ~| "no wallet with xpub" - =/ wal (~(got by walts) u.curr-xpub) - ~| "wallet not scanned yet" - ?> scanned.wal - =/ [addr=address =idx w=walt] - ~(gen-address wad:bl wal %0) - :_ state(walts (~(put by walts) u.curr-xpub w)) - [(give-update:hc %new-address addr)]~ - == - :: - ++ handle-action - |= act=action - ^- (quip card _state) - ?- -.act - :: comets can't pay (could spam address requests) - :: reuses payment address for ship if ship in piym already - :: - %gen-pay-address - ~| "no comets" - ?< ?=(%pawn (clan:title src.bowl)) - ?~ curr-xpub - ~|("btc-wallet: no curr-xpub set" !!) - |^ - =^ cards state reuse-address - ?^ cards - :: if cards returned, means we already have an address - [cards state] - =+ f=(fam:bl our.bowl now.bowl src.bowl) - =+ n=(~(gut by num-fam.piym) f 0) - ?: (gte n fam-limit.params) - ~|("More than {} addresses for moons + planet" !!) - =. num-fam.piym (~(put by num-fam.piym) f +(n)) - =^ a=address state - (generate-address u.curr-xpub %0) - :- ~[(poke-peer:hc src.bowl [%give-pay-address a value.act])] - %_ state - ps.piym - %+ ~(put by ps.piym) src.bowl - `[u.curr-xpub a src.bowl value.act note.act] - == - :: - ++ generate-address - |= [=xpub:bc =chyg] - ~| "no wallet with xpub" - =/ wal=walt (~(got by walts) xpub) - ~| "wallet not scanned yet" - ?> scanned.wal - =/ [addr=address =idx w=walt] - ~(gen-address wad:bl wal chyg) - [addr state(walts (~(put by walts) xpub w))] - :: - ++ reuse-address - ^- (quip card _state) - =* payer src.bowl - =+ p=(~(get by ps.piym) payer) - ?~ p `state - ?^ pend.u.p - ~|("%gen-address: {} already has pending payment to us" !!) - =+ newp=u.p(value value.act) - :_ state(ps.piym (~(put by ps.piym) payer newp)) - ~[(poke-peer:hc payer [%give-pay-address address.newp value.act])] - -- - :: - %give-pay-address - ~| "Can't pay ourselves" - ?< =(src.bowl our.bowl) - ~| "Broadcasting a transaction" - ?< is-broadcasting:hc - ?~ curr-xpub - ~|("btc-wallet-hook: no curr-xpub set" !!) - ?: (is-dust:hc value.act address.act) - %- (slog ~[leaf+"sending dust"]) - [[(give-update:hc %error %no-dust)]~ state] - :: - =/ feyb - %+ ~(gut by feybs) - src.bowl - ?~(fee.btc-state fee:defaults u.fee.btc-state) - |^ - =^ tb=(unit txbu) state - (generate-txbu u.curr-xpub `src.bowl feyb ~[[address.act value.act ~]]) - =/ po=^poym - ?~(tb [~ ~] [tb note.poym]) - :_ state(poym po) - ?~ tb [(give-update:hc %error %insufficient-balance)]~ - %+ turn txis.u.tb - |=(=txi (poke-provider:hc [%raw-tx txid.utxo.txi])) - :: - ++ generate-txbu - |= [=xpub:bc payee=(unit ship) feyb=sats txos=(list txo)] - ^- [(unit txbu) _state] - ~| "no wallet with xpub" - =/ wal (~(got by walts) xpub) - ~| "wallet not scanned yet" - ?> scanned.wal - =/ [tb=(unit txbu) chng=(unit sats)] - %~ with-change sut:bl - [wal eny.bowl block.btc-state payee feyb txos] - ?~ tb - %- %- slog - ~[leaf+"insufficient balance or not enough confirmed balance"] - [tb state] - :: if no change, return txbu; else add change output to txbu - :: - ?~ chng [tb state] - =/ [addr=address =idx w=walt] - ~(nixt-address wad:bl wal %1) - :_ state(walts (~(put by walts) xpub w)) - `(~(add-output txb:bl u.tb) addr u.chng `(~(hdkey wad:bl w %1) idx)) - -- - :: - :: %expect-payment - :: - check that payment is in piym - :: - replace pend.payment with incoming txid (lock) - :: - add txid to pend.piym - :: - request tx-info from provider - :: - %expect-payment - |^ - ~| "%expect-payment: matching payment not in piym" - =/ pay (~(got by ps.piym) src.bowl) - ?> (piym-matches pay) - :_ (update-pend-piym txid.act pay(pend `txid.act)) - ?~ prov ~ - ~[(poke-provider:hc [%tx-info txid.act])] - :: - ++ piym-matches - |= p=payment - ?& =(payer.p src.bowl) - =(value.p value.act) - == - :: - ++ update-pend-piym - |= [txid=hexb p=payment] - ^- _state - ?~ pend.p ~|("update-pend-piym: no pending payment" !!) - %= state - ps.piym (~(put by ps.piym) payer.p p) - pend.piym (~(put by pend.piym) txid p) - == - -- - == - :: - ++ handle-internal - |= intr=internal - ^- (quip card _state) - ?- -.intr - %add-poym-raw-txi - |^ - ?> =(src.bowl our.bowl) - ?~ txbu.poym `state - =. txis.u.txbu.poym - (update-poym-txis txis.u.txbu.poym +.intr) - :_ state - =+ pb=~(to-psbt txb:bl u.txbu.poym) - ?~ pb ~ - =+ vb=~(vbytes txb:bl u.txbu.poym) - =+ fee=~(fee txb:bl u.txbu.poym) - ~& >> "{} vbytes, {<(div fee vb)>} sats/byte, {} sats fee" - %- (slog [%leaf "PSBT: {}"]~) - [(give-update:hc [%psbt u.pb fee])]~ - :: update outgoing payment with a rawtx, if the txid is in poym's txis - :: - ++ update-poym-txis - |= [txis=(list txi) txid=hexb rawtx=hexb] - ^- (list txi) - =| i=@ - |- ?: (gte i (lent txis)) txis - =/ ith=txi (snag i txis) - =? txis =(txid txid.utxo.ith) - (snap txis i `txi`ith(rawtx `rawtx)) - $(i +(i)) - -- - :: - :: delete an incoming/outgoing payment when we see it included in a tx - :: - %close-pym - ?> =(src.bowl our.bowl) - |^ - =^ cards state - ?. included.ti.intr - `state - ?: (~(has by pend.piym) txid.ti.intr) - (piym-to-history ti.intr) - ?: (poym-has-txid txid.ti.intr) - (poym-to-history ti.intr) - `state - =^ cards2 state - (handle-tx-info:hc ti.intr) - :_ state - (weld cards cards2) - :: - ++ poym-has-txid - |= txid=hexb - ^- ? - ?~ txbu.poym %.n - ?~ signed-tx.u.txbu.poym %.n - =(txid (get-id:txu:bc (decode:txu:bc u.signed-tx.u.txbu.poym))) - :: - checks whether poym has a signed tx - :: - checks whether the txid matches that signed tx, if not, skip - :: - clears poym - :: - returns card that adds hest to history - :: - ++ poym-to-history - |= ti=info:tx - ^- (quip card _state) - |^ - ?~ txbu.poym `state - ?~ signed-tx.u.txbu.poym `state - ?. (poym-has-txid txid.ti) - `state - =+ vout=(get-vout txos.u.txbu.poym) - ?~ vout - ~|("poym-to-history: poym should always have an output" !!) - =/ new-hest=hest - %: mk-hest - ti xpub.u.txbu.poym - our.bowl payee.u.txbu.poym - u.vout note.poym - == - :- [(give-update:hc %new-tx new-hest)]~ - %= state - poym [~ ~] - history (~(put by history) txid.ti new-hest) - == - :: - ++ get-vout - |= txos=(list txo) - ^- (unit @ud) - =| idx=@ud - |- ?~ txos ~ - ?~ hk.i.txos `idx - $(idx +(idx), txos t.txos) - -- - :: - checks whether txid in pend.piym - :: - checks whether ti has a matching value output to piym - :: - if no match found, just deletes pend.piym with this tx - :: stops peer from spamming txids - :: - returns card that adds hest to history - :: - ++ piym-to-history - |= ti=info:tx - |^ ^- (quip card _state) - =+ pay=(~(get by pend.piym) txid.ti) - ?~ pay `state - :: if no matching output in piym, - :: delete from pend.piym to stop DDOS of txids - :: - =+ vout=(get-vout value.u.pay) - ?~ vout - `(del-pend-piym txid.ti) - =/ new-hest - (mk-hest ti xpub.u.pay payer.u.pay `our.bowl u.vout note.u.pay) - =. state (del-all-piym txid.ti payer.u.pay) - :- [(give-update:hc %new-tx new-hest)]~ - %_ state - history (~(put by history) txid.ti new-hest) - == - :: - ++ get-vout - |= value=sats - ^- (unit @ud) - =| idx=@ud - =+ os=outputs.ti - |- ?~ os ~ - ?: =(value.i.os value) - `idx - $(os t.os, idx +(idx)) - :: - ++ del-pend-piym - |= txid=hexb - ^- _state - state(pend.piym (~(del by pend.piym) txid.ti)) - :: - ++ del-all-piym - |= [txid=hexb payer=ship] - ^- _state - =+ nf=(~(gut by num-fam.piym) payer 1) - %= state - pend.piym (~(del by pend.piym) txid) - ps.piym (~(del by ps.piym) payer) - num-fam.piym (~(put by num-fam.piym) payer (dec nf)) - == - -- - :: - ++ mk-hest - |= $: ti=info:tx - =xpub:bc - payer=ship - payee=(unit ship) - vout=@ud - note=(unit @t) - == - ^- hest - :* xpub - txid.ti - confs.ti - recvd.ti - (turn inputs.ti |=(i=val:tx [i `payer])) - %+ turn outputs.ti - |= o=val:tx - ?: =(pos.o vout) - :: check whether this is the output that went to payee - [o payee] - [o `payer] - note - == - -- - :: - %fail-broadcast-tx - ?> =(src.bowl our.bowl) - ~& >>> "%fail-broadcast-tx" - :_ state(poym [~ ~]) - [(give-update:hc %error %broadcast-fail)]~ - :: - %succeed-broadcast-tx - ?> =(src.bowl our.bowl) - ~& > "%succeed-broadcast-tx" - :_ state - :- (give-update:hc %broadcast-success ~) - ?~ prov ~ - :- (poke-provider:hc [%tx-info txid.intr]) - ?~ txbu.poym ~ - ?~ payee.u.txbu.poym ~ - :_ ~ - %- poke-peer:hc - :* u.payee.u.txbu.poym - %expect-payment - txid.intr - value:(snag 0 txos.u.txbu.poym) - == - == - -- -:: -++ on-agent - ~/ %on-agent - |= [=wire =sign:agent:gall] - ^- (quip card _this) - |^ - ?+ -.sign (on-agent:def wire sign) - %watch-ack - ?~ p.sign `this - %- (slog leaf+"connection rejected by provider ({})" u.p.sign) - `this - :: - %kick - ?~ prov `this - ?. ?& ?=(%set-provider -.wire) - =(host.u.prov src.bowl) - == - `this - :_ this(prov [~ src.bowl %.n]) - %- zing - :~ (watch-provider:hc src.bowl) - (give-update:hc %change-provider `[src.bowl %.n])^~ - == - :: - %fact - =^ cards state - ?+ p.cage.sign `state - %btc-provider-status - (handle-provider-status !<(status:bp q.cage.sign)) - :: - %btc-provider-update - (handle-provider-update !<(update:bp q.cage.sign)) - :: - %json - ?+ wire `state - [%check-payee @ ~] - =/ who (slav %p i.t.wire) - :_ state - :~ [%give %fact ~[/all] cage.sign] - [%pass wire %agent [who %btc-wallet] %leave ~] - == - :: - [%permitted @ ~] - =/ who (slav %p i.t.wire) - :_ state - :~ [%give %fact ~[/all] cage.sign] - [%pass wire %agent [who %btc-provider] %leave ~] - == - == - == - [cards this] - == - :: - :: +handle-provider-status: handle connectivity updates from provider - :: - retry pend.piym on any %connected event, since we're checking mempool - :: - if status is %connected, retry all pending address lookups - :: - only retry all if previously disconnected - :: - if block is updated, retry all address reqs - :: - if provider's network doesn't match network in our state, leave - :: - ++ handle-provider-status - |= s=status:bp - ^- (quip card _state) - =^ cards state - ?~ prov `state - ?. =(host.u.prov src.bowl) `state - ?- -.s - %new-block - %: on-connected - u.prov network.s - block.s fee.s - `blockhash.s `blockfilter.s - == - :: - %connected - (on-connected u.prov network.s block.s fee.s ~ ~) - :: - %disconnected - `state(prov `u.prov(connected %.n)) - == - :_ state - :+ (give-update:hc %btc-state btc-state) - (give-update:hc %change-provider prov) - cards - :: - ++ on-connected - |= $: p=provider - net=network - block=@ud - fee=(unit sats) - blockhash=(unit hexb) - blockfilter=(unit hexb) - == - ^- (quip card _state) - |^ - :: request block-info for missing blocks - :: if blockhash or blockfilter are ~ request block-info for current block - :: - =| blocks=(list @ud) - =/ gap (sub block block.btc-state) - =? blocks (gth gap 1) - (gulf +(block.btc-state) (dec block)) - =? blocks ?&((gth gap 0) ?|(?=(~ blockhash) ?=(~ blockfilter))) - (snoc blocks block) - =? blocks (gth gap 50) ~ - :_ %_ state - prov `p(connected %.y) - btc-state [block fee now.bowl] - == - %- zing - :~ retry-ahistorical-txs - (retry-pend-piym net) - (retry-block-info blocks) - :: - ?. ?|(!connected.p (gth gap 0)) - ~ - %- zing - :~ (retry-poym net) - (retry-txs net) - (retry-scans net) - == - :: - ?. ?&(?=(^ blockhash) ?=(^ blockfilter) (gth gap 0)) - ~ - (retry-filtered-addrs:hc net u.blockhash u.blockfilter) - :: - ?. (gth gap 50) - ~ - (retry-addrs net) - == - :: - ++ retry-ahistorical-txs - ^- (list card) - %+ turn ~(tap in ahistorical-txs) - |= =txid - (poke-provider:hc [%tx-info txid]) - :: - :: +retry-pend-piym: check whether txids in pend-piym are in mempool - :: - ++ retry-pend-piym - |= =network - ^- (list card) - %+ murn ~(tap by pend.piym) - |= [=txid p=payment] - =/ w (~(get by walts) xpub.p) - ?~ w ~ - ?. =(network network.u.w) ~ - `(poke-provider:hc [%tx-info txid]) - :: - ++ retry-block-info - |= blocks=(list @ud) - %+ turn blocks - |= block=@ud - (poke-provider:hc %block-info `block) - :: - ++ retry-poym - |= =network - ^- (list card) - ?~ txbu.poym ~ - =/ w (~(get by walts) xpub.u.txbu.poym) - ?~ w ~ - ?. =(network network.u.w) ~ - %+ weld - ?~ signed-tx.u.txbu.poym ~ - ~[(poke-provider:hc [%broadcast-tx u.signed-tx.u.txbu.poym])] - %+ turn txis.u.txbu.poym - |= =txi - (poke-provider:hc [%raw-tx ~(get-txid txb:bl u.txbu.poym)]) - :: - :: +retry-txs: get info on txs without enough confirmations - :: - ++ retry-txs - |= =network - ^- (list card) - %+ murn ~(tap by history) - |= [=txid =hest] - =/ w (~(get by walts) xpub.hest) - ?~ w ~ - ?. =(network network.u.w) ~ - ?: (gte confs.hest confs.u.w) ~ - `(poke-provider:hc [%tx-info txid]) - :: - ++ retry-scans - |= =network - ^- (list card) - %- zing - %+ murn ~(tap by scans) - |= [[=xpub:bc =chyg] =batch] - =/ w (~(get by walts) xpub) - ?~ w ~ - ?. =(network network.u.w) ~ - `-:(req-scan:hc batch xpub chyg) - :: - :: +retry-addrs: get info on addresses with unconfirmed UTXOs - :: - ++ retry-addrs - |= =network - ^- (list card) - %- zing - %+ murn ~(val by walts) - |= w=walt - ?. =(network network.w) ~ - ^- (unit (list card)) - :- ~ - %+ turn ~(tap by wach.w) - |= [a=address *] - (poke-provider:hc [%address-info a]) - -- - :: - ++ handle-provider-update - |= upd=update:bp - ^- (quip card _state) - |^ - ?: =(~ prov) `state - ?. =(host:(need prov) src.bowl) `state - ?. ?=(%.y -.upd) `state - ?- -.p.upd - %address-info - :: located in the helper in Scan Logic to keep all of that unified - :: - (handle-address-info address.p.upd utxos.p.upd used.p.upd) - :: - %tx-info - :: TODO: why do we get a nest-fail when using =^ ? - =^ cards=(list card) state - (handle-tx-info:hc info.p.upd) - :_ state - :_ cards - (poke-internal:hc [%close-pym info.p.upd]) - :: - %raw-tx - :_ state - ~[(poke-internal:hc [%add-poym-raw-txi +.p.upd])] - :: - %broadcast-tx - :_ state - ?~ txbu.poym ~ - ?. =(~(get-txid txb:bl u.txbu.poym) txid.p.upd) - ~ - ?: ?|(broadcast.p.upd included.p.upd) - ~[(poke-internal:hc [%succeed-broadcast-tx txid.p.upd])] - :~ (poke-internal:hc [%fail-broadcast-tx txid.p.upd]) - (give-update:hc %cancel-tx txid.p.upd) - == - :: - %block-info - :_ state - %^ retry-filtered-addrs:hc - network.p.upd - blockhash.p.upd - blockfilter.p.upd - == - :: - :: Scan Logic - :: - :: Algorithm - :: Initiate a batch for each chyg, with max-gap idxs in it - :: Watch all of the addresses made from idxs - :: Request info on all addresses from provider - :: When an %address-info comes back: - :: - remove that idx from todo.batch - :: - run check-scan to check whether that chyg is done - :: - if it isn't, refill it with max-gap idxs to scan - :: - :: +handle-address-info: updates scans and wallet with address info - :: - ++ handle-address-info - |= [=address utxos=(set utxo) used=?] - ^- (quip card _state) - =/ ac (address-coords:bl address ~(val by walts)) - ?~ ac - `state - =/ [w=walt =chyg =idx] u.ac - =. walts - %+ ~(put by walts) xpub.w - %+ ~(update-address wad:bl w chyg) - address - [used chyg idx utxos] - :: if transactions haven't made it into history, request transaction info - :: - =^ cards=(list card) ahistorical-txs - %+ roll ~(tap in utxos) - |= [u=utxo cad=(list card) ah=(set txid)] - ^- [(list card) (set txid)] - ?: (~(has by history) txid.u) - [cad ah] - :- [(poke-provider:hc [%tx-info txid.u]) cad] - (~(put by ah) txid.u) - :: if the wallet+chyg is being scanned, update the scan batch - :: - =/ b (~(get by scans) [xpub.w chyg]) - ?~ b - [cards state] - =. scans - (del-scanned u.b(has-used ?|(used has-used.u.b)) xpub.w chyg idx) - ?: empty:(scan-status xpub.w chyg) - =^ scan-cards=(list card) state - (check-scan xpub.w) - [(weld scan-cards cards) state] - :: - [cards state] - :: - :: +del-scanned: delete scanned idxs - :: - ++ del-scanned - |= [b=batch =xpub:bc =chyg to-delete=idx] - ^- ^scans - %+ ~(put by scans) [xpub chyg] - b(todo (~(del in todo.b) to-delete)) - :: - ++ scan-status - |= [=xpub:bc =chyg] - ^- [empty=? done=?] - =/ b=batch (~(got by scans) [xpub chyg]) - =/ empty=? =(0 ~(wyt in todo.b)) - :- empty - ?&(empty ?!(has-used.b)) - :: +check-scan: initiate a scan if one hasn't started - :: check status of scan if one is running - :: - ++ check-scan - |= =xpub:bc - ^- (quip card _state) - =/ s0 (scan-status xpub %0) - =/ s1 (scan-status xpub %1) - ?: ?&(empty.s0 done.s0 empty.s1 done.s1) - (end-scan xpub) - =^ cards0=(list card) state - (bump-batch xpub %0) - =^ cards1=(list card) state - (bump-batch xpub %1) - :_ state - [(scan-progress:hc xpub) (weld cards0 cards1)] - :: - :: delete the xpub from scans and set wallet to scanned - :: - ++ end-scan - |= [=xpub:bc] - ^- (quip card _state) - =/ w=walt (~(got by walts) xpub) - =. scans (~(del by scans) [xpub %0]) - =: scans (~(del by scans) [xpub %1]) - walts (~(put by walts) xpub w(scanned %.y)) - == - %- (slog ~[leaf+"Scanned xpub {}"]) - =^ cards state - (set-curr-xpub:hc xpub) - [[(give-update:hc [%scan-progress ~ ~]) cards] state] - :: - :: +bump-batch - :: if the batch is done but the wallet isn't done scanning, - :: returns new address requests and updated batch - :: - ++ bump-batch - |= [=xpub:bc =chyg] - ^- (quip card _state) - =/ b=batch (~(got by scans) xpub chyg) - =/ s (scan-status xpub chyg) - ?. ?&(empty.s ?!(done.s)) - `state - =/ w=walt (~(got by walts) xpub) - =/ newb=batch - :+ (silt (gulf +(endpoint.b) (add endpoint.b max-gap.w))) - (add endpoint.b max-gap.w) - %.n - (req-scan:hc newb xpub chyg) - -- - -- -:: -++ on-peek - ~/ %on-peek - |= pax=path - ^- (unit (unit cage)) - ?+ pax (on-peek:def pax) - [%x %configured ~] - =/ provider=json - ?~ prov ~ - [%s (scot %p host.u.prov)] - =/ result=json - %- pairs:enjs:format - :~ [%provider provider] - [%'hasWallet' b+?=(^ walts)] - == - ``json+!>(result) - :: - [%x %scanned ~] - ``noun+!>(scanned-wallets:hc) - :: - [%x %balance @ ~] - ``noun+!>((balance:hc (xpub:bc +>-.pax))) - == -:: -++ on-watch - ~/ %on-watch - |= =path - ^- (quip card _this) - ?+ path (on-watch:def path) - [%check-payee @ ~] - =/ who (slav %p i.t.path) - ?> =(who our.bowl) - =/ response=json - %+ frond:enjs:format 'checkPayee' - %- pairs:enjs:format - :~ ['hasWallet' b+?=(^ curr-xpub)] - ['payee' (ship:enjs:format our.bowl)] - == - :_ this - [%give %fact ~ %json !>(response)]~ - :: - [%all ~] - ?> (team:title our.bowl src.bowl) - :_ this - [give-initial:hc]~ - == -:: -++ on-leave on-leave:def -++ on-arvo - |= [=wire sign=sign-arvo] - ^- (quip card _this) - ?. ?=([%migrate-settings ~] wire) (on-arvo:def wire sign) - ?> ?=([%behn *] sign) - (on-poke %noun !>(%migrate-settings)) -++ on-fail on-fail:def --- -~% %btc-wallet-helper ..card ~ -|_ =bowl:gall -:: -++ retry-filtered-addrs - ~/ %retry-filtered-addrs - |= [=network blockhash=hexb blockfilter=hexb] - ^- (list card) - %- zing - %+ murn ~(val by walts) - |= w=walt - ^- (unit (list card)) - ?. =(network network.w) ~ - :- ~ - %+ turn - %~ tap in - %^ all-match:bip-b158:bc - blockfilter - blockhash - %+ turn ~(tap by wach.w) - |= [a=address *] - [a (to-script-pubkey:adr:bc a)] - |= [a=address spk=hexb] - ^- card - (poke-provider [%address-info a]) -:: -++ handle-tx-info - ~/ %handle-tx-info - |= ti=info:tx - ^- (quip card _state) - |^ - =/ h (~(get by history) txid.ti) - =. ahistorical-txs (~(del in ahistorical-txs) txid.ti) - =/ our-inputs=(set address) - %- silt - %+ skim - %+ turn inputs.ti - |=(=val:tx address.val) - is-our-address - =/ our-outputs=(set address) - %- silt - %+ skim - %+ turn outputs.ti - |=(=val:tx address.val) - is-our-address - :: all our addresses in inputs/outputs of tx - :: - =/ our-addrs=(set address) - (~(uni in our-inputs) our-outputs) - :: - =/ addr-info-cards=(list card) - %+ turn ~(tap in our-addrs) - |= a=address - ^- card - (poke-provider [%address-info a]) - ?: =(0 ~(wyt in our-addrs)) `state - =/ =xpub - xpub.w:(need (address-coords:bl (snag 0 ~(tap in our-addrs)) ~(val by walts))) - :: addresses in wallets, but tx not in history - :: - ?~ h - =/ new-hest=hest (mk-hest xpub our-inputs our-outputs) - =. history (~(put by history) txid.ti new-hest) - :_ state - :+ (give-update %balance current-balance) - (give-update %new-tx new-hest) - addr-info-cards - :: tx in history, but not in mempool/blocks - :: - ?. included.ti - :_ state(history (~(del by history) txid.ti)) - :+ (give-update %balance current-balance) - (give-update %cancel-tx txid.ti) - addr-info-cards - =/ new-hest u.h(confs confs.ti, recvd recvd.ti) - =. history (~(put by history) txid.ti new-hest) - :_ state - :+ (give-update %balance current-balance) - (give-update %new-tx new-hest) - addr-info-cards - :: - ++ mk-hest - :: has tx-info - |= [=xpub:bc our-inputs=(set address) our-outputs=(set address)] - ^- hest - :* xpub - txid.ti - confs.ti - recvd.ti - (turn inputs.ti |=(v=val:tx (is-our-ship our-inputs v))) - (turn outputs.ti |=(v=val:tx (is-our-ship our-outputs v))) - ~ - == - :: - ++ is-our-ship - |= [as=(set address) v=val:tx] - ^- [=val:tx s=(unit ship)] - [v ?:((~(has in as) address.v) `our.bowl ~)] - :: - ++ is-our-address - |=(a=address ?=(^ (address-coords:bl a ~(val by walts)))) - -- -:: -++ set-curr-xpub - |= =xpub - ^- (quip card _state) - ?~ (find ~[xpub] scanned-wallets) `state - =. curr-xpub `xpub - :_ state - [give-initial]~ -:: -:: +req-scan -:: - adds addresses in batch to wallet's watch map as un-used addresses -:: - returns provider %address-info request cards -:: -++ req-scan - ~/ %req-scan - |= [b=batch =xpub:bc =chyg] - ^- (quip card _state) - =/ w=walt (~(got by walts) xpub) - =/ as=(list [address [? ^chyg idx (set utxo)]]) - %+ turn ~(tap in todo.b) - |=(=idx [(~(mk-address wad:bl w chyg) idx) [%.n chyg idx *(set utxo)]]) - =. w - |- ?~ as w - $(as t.as, w (~(update-address wad:bl w chyg) -.i.as +.i.as)) - :- (turn as |=([a=address *] (poke-provider [%address-info a]))) - %_ state - scans - (~(put by scans) [xpub chyg] b) - :: - walts - (~(put by walts) xpub w) - == -:: -++ poke-provider - |= act=action:bp - ^- card - ?~ prov ~|("provider not set" !!) - :* %pass /[(scot %da now.bowl)] - %agent [host.u.prov %btc-provider] - %poke %btc-provider-action !>([act]) - == -:: -++ poke-peer - |= [target=ship act=action] - ^- card - :* %pass /[(scot %da now.bowl)] %agent - [target %btc-wallet] %poke - %btc-wallet-action !>(act) - == -:: -++ poke-internal - |= intr=internal - ^- card - :* %pass /[(scot %da now.bowl)] %agent - [our.bowl %btc-wallet] %poke - %btc-wallet-internal !>(intr) - == -:: -++ poke-our - |= [app=term =cage] - ^- card - [%pass / %agent [our.bowl app] %poke cage] -:: -++ give-update - |= upd=update - ^- card - [%give %fact ~[/all] %btc-wallet-update !>(upd)] -:: -++ scan-progress - |= [=xpub:bc] - |^ ^- card - %- give-update - :+ %scan-progress - (to-idx (~(gut by scans.state) [xpub %0] *batch)) - (to-idx (~(gut by scans.state) [xpub %1] *batch)) - ++ to-idx - |= b=batch - ^- (unit idx:bc) - =/ s=(list idx:bc) - (sort ~(tap in todo.b) lth) - ?~ s ~ `i.s - -- -:: -++ watch-provider - |= who=@p - ^- (list card) - =/ =dock [who %btc-provider] - =/ wir=wire /set-provider/(scot %p who) - =/ priv-wire=^wire (welp wir [%priv ~]) - :+ [%pass wir %agent dock %watch /clients] - [%pass priv-wire %agent dock %watch /clients/(scot %p our.bowl)] - ~ -:: -++ give-initial - ^- card - =^ a=(unit address) state - ?~ curr-xpub `state - =/ uw=(unit walt) (~(get by walts) u.curr-xpub) - ?: ?|(?=(~ uw) ?!(scanned.u.uw)) - ~|("no wallet with xpub or wallet not scanned yet" !!) - =/ [addr=address =idx w=walt] - ~(gen-address wad:bl u.uw %0) - [`addr state(walts (~(put by walts) u.curr-xpub w))] - %- give-update - ^- update - :* %initial - prov - curr-xpub - current-balance - current-history - btc-state - a - == -:: -++ current-balance - ^- (unit [sats sats]) - ?~ curr-xpub ~ - (balance u.curr-xpub) -:: -++ current-history - ^- ^history - ?~ curr-xpub ~ - %- ~(gas by *^history) - %+ skim ~(tap by history) - |= [txid =hest] - =(u.curr-xpub xpub.hest) -:: -++ balance - ~/ %balance - |= =xpub:bc - ^- (unit [sats sats]) - =/ w (~(get by walts) xpub) - ?~ w ~ - =/ values=(list [confirmed=sats unconfirmed=sats]) - %+ turn ~(val by wach.u.w) - |= =addi ^- [sats sats] - %+ roll - %+ turn ~(tap by utxos.addi) - |= =utxo - ^- [sats sats] - ?: (~(spendable sut:bl [u.w eny.bowl block.btc-state ~ 0 ~]) utxo) - [value.utxo 0] - [0 value.utxo] - |= [[a=sats b=sats] out=[p=sats q=sats]] - [(add a p.out) (add b q.out)] - :- ~ - %+ roll values - |= [[a=sats b=sats] out=[p=sats q=sats]] - [(add a p.out) (add b q.out)] -:: -++ is-dust - |= [=sats =address] - ^- ? - %+ lth sats - (mul 3 (input-weight:bc (get-bipt:adr:bc address))) -:: -++ is-broadcasting - ^- ? - ?~ txbu.poym %.n - ?=(^ signed-tx.u.txbu.poym) -:: -++ scanned-wallets - ^- (list xpub:bc) - %+ murn ~(tap by walts) - |= [=xpub:bc w=walt] - ^- (unit xpub:bc) - ?:(scanned.w `xpub ~) -:: -++ gall-scry - |* [=mold app=@tas =path] - .^(mold %gx (weld /(scot %p our.bowl)/[app]/(scot %da now.bowl) path)) --- diff --git a/pkg/bitcoin/desk.bill b/pkg/bitcoin/desk.bill deleted file mode 100644 index b6851316b..000000000 --- a/pkg/bitcoin/desk.bill +++ /dev/null @@ -1,2 +0,0 @@ -:~ %btc-wallet -== diff --git a/pkg/bitcoin/desk.docket-0 b/pkg/bitcoin/desk.docket-0 deleted file mode 100644 index 284925fa2..000000000 --- a/pkg/bitcoin/desk.docket-0 +++ /dev/null @@ -1,11 +0,0 @@ -:~ - title+'Bitcoin' - info+'A Bitcoin Wallet that lets you send and receive Bitcoin directly to and from other Urbit users' - color+0xf9.8e40 - glob-http+['https://bootstrap.urbit.org/glob-0v3.7b5q1.gn30e.cpfem.abmqg.qh77v.glob' 0v3.7b5q1.gn30e.cpfem.abmqg.qh77v] - image+'https://urbit.ewr1.vultrobjects.com/hastuc-dibtux/2021.8.24..02.57.38-bitcoin.svg' - base+'bitcoin' - version+[0 0 1] - license+'MIT' - website+'https://tlon.io' -== diff --git a/pkg/bitcoin/desk.ship b/pkg/bitcoin/desk.ship deleted file mode 100644 index 2bc09561a..000000000 --- a/pkg/bitcoin/desk.ship +++ /dev/null @@ -1 +0,0 @@ -~mister-dister-dozzod-dozzod diff --git a/pkg/bitcoin/gen/btc-provider/action.hoon b/pkg/bitcoin/gen/btc-provider/action.hoon deleted file mode 100644 index 2182dbd57..000000000 --- a/pkg/bitcoin/gen/btc-provider/action.hoon +++ /dev/null @@ -1,13 +0,0 @@ -:: Sends a raw RPC action to the BTC Provider -:: -:: Commands: -:: -:: -:: -/- *btc-provider -:: -:- %say -|= $: [now=@da eny=@uvJ =beak] - [[act=action ~] ~] -== -[%btc-provider-action act] diff --git a/pkg/bitcoin/gen/btc-provider/command.hoon b/pkg/bitcoin/gen/btc-provider/command.hoon deleted file mode 100644 index f7b375145..000000000 --- a/pkg/bitcoin/gen/btc-provider/command.hoon +++ /dev/null @@ -1,13 +0,0 @@ -:: Sends a command to the BTC Provider -:: -:: Commands: -:: -:: -:: -/- *btc-provider -:: -:- %say -|= $: [now=@da eny=@uvJ =beak] - [[comm=command ~] ~] - == -[%btc-provider-command comm] diff --git a/pkg/bitcoin/gen/btc-wallet-check.hoon b/pkg/bitcoin/gen/btc-wallet-check.hoon deleted file mode 100644 index 9c5e43555..000000000 --- a/pkg/bitcoin/gen/btc-wallet-check.hoon +++ /dev/null @@ -1,5 +0,0 @@ -:- %say -|= [[now=time * bec=beak] ~ ~] -:- %noun -:- %btc-wallet-hash -.^(@uv %gx (en-beam bec(q %glob) /btc-wallet/noun)) diff --git a/pkg/bitcoin/gen/btc-wallet/action.hoon b/pkg/bitcoin/gen/btc-wallet/action.hoon deleted file mode 100644 index 949bbff48..000000000 --- a/pkg/bitcoin/gen/btc-wallet/action.hoon +++ /dev/null @@ -1,9 +0,0 @@ -:: Sends an action to btc-wallet -:: -/- *btc-wallet -:: -:- %say -|= $: [now=@da eny=@uvJ =beak] -[[act=action ~] ~] -== -[%btc-wallet-action act] diff --git a/pkg/bitcoin/gen/btc-wallet/command.hoon b/pkg/bitcoin/gen/btc-wallet/command.hoon deleted file mode 100644 index 7f5e0c185..000000000 --- a/pkg/bitcoin/gen/btc-wallet/command.hoon +++ /dev/null @@ -1,9 +0,0 @@ -:: Sends a command to btc-wallet -:: -/- *btc-wallet -:: -:- %say -|= $: [now=@da eny=@uvJ =beak] - [[comm=command ~] ~] - == -[%btc-wallet-command comm] diff --git a/pkg/bitcoin/lib/agentio.hoon b/pkg/bitcoin/lib/agentio.hoon deleted file mode 120000 index 959a49843..000000000 --- a/pkg/bitcoin/lib/agentio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/agentio.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/azimuth.hoon b/pkg/bitcoin/lib/azimuth.hoon deleted file mode 120000 index 2bacb02b7..000000000 --- a/pkg/bitcoin/lib/azimuth.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/azimuth.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/azimuthio.hoon b/pkg/bitcoin/lib/azimuthio.hoon deleted file mode 120000 index 0b5df7063..000000000 --- a/pkg/bitcoin/lib/azimuthio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/azimuthio.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/bip/b158.hoon b/pkg/bitcoin/lib/bip/b158.hoon deleted file mode 120000 index cba919a85..000000000 --- a/pkg/bitcoin/lib/bip/b158.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b158.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/bip/b173.hoon b/pkg/bitcoin/lib/bip/b173.hoon deleted file mode 120000 index 2999150e2..000000000 --- a/pkg/bitcoin/lib/bip/b173.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b173.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/bip/b174.hoon b/pkg/bitcoin/lib/bip/b174.hoon deleted file mode 120000 index bc6cae53b..000000000 --- a/pkg/bitcoin/lib/bip/b174.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b174.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/bip32.hoon b/pkg/bitcoin/lib/bip32.hoon deleted file mode 120000 index 1cbb7f892..000000000 --- a/pkg/bitcoin/lib/bip32.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bip32.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/bip39.hoon b/pkg/bitcoin/lib/bip39.hoon deleted file mode 120000 index 36c4b7e83..000000000 --- a/pkg/bitcoin/lib/bip39.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bip39.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/bip39/english.hoon b/pkg/bitcoin/lib/bip39/english.hoon deleted file mode 120000 index f1ea0fe31..000000000 --- a/pkg/bitcoin/lib/bip39/english.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip39/english.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/bitcoin-json.hoon b/pkg/bitcoin/lib/bitcoin-json.hoon deleted file mode 100644 index d51db0b2a..000000000 --- a/pkg/bitcoin/lib/bitcoin-json.hoon +++ /dev/null @@ -1,248 +0,0 @@ -/- btc-wallet, btc-provider, bitcoin -/+ bl=bitcoin -|% -++ dejs - =, dejs:format - |% - ++ command - |= jon=json - ^- command:btc-wallet - %. jon - %- of - :~ set-provider+(mu ship) - check-provider+ship - check-payee+ship - set-current-wallet+so - add-wallet+add-wallet - delete-wallet+so - init-payment-external+init-payment-external - init-payment+init-payment - broadcast-tx+so - gen-new-address+|=(json ~) - == - :: - ++ ship (su ;~(pfix sig fed:ag)) - :: - ++ add-wallet - %- ot - :~ xpub+so - fprint+(at [ni ni ~]) - scan-to+(mu (at [ni ni ~])) - max-gap+(mu ni) - confs+(mu ni) - == - :: - ++ init-payment-external - %- ot - :~ address+address - value+ni - feyb+ni - note+(mu so) - == - :: - ++ init-payment - %- ot - :~ payee+ship - value+ni - feyb+ni - note+(mu so) - == - :: - ++ address - |= jon=json - ?> ?=([%s @t] jon) - ^- address:bitcoin - (from-cord:adr:bl +.jon) - -- -:: -++ enjs - =, enjs:format - |% - ++ status - |= sta=status:btc-provider - ^- json - %+ frond -.sta - ?- -.sta - %connected (connected sta) - %new-block (new-block sta) - %disconnected ~ - == - :: - ++ connected - |= sta=status:btc-provider - ?> ?=(%connected -.sta) - %- pairs - :~ network+s+network.sta - block+(numb block.sta) - fee+?~(fee.sta ~ (numb u.fee.sta)) - == - :: - ++ new-block - |= sta=status:btc-provider - ?> ?=(%new-block -.sta) - %- pairs - :~ network+s+network.sta - block+(numb block.sta) - fee+?~(fee.sta ~ (numb u.fee.sta)) - blockhash+(hexb blockhash.sta) - blockfilter+(hexb blockfilter.sta) - == - :: - ++ hexb - |= h=hexb:bitcoin - ^- json - %- pairs - :~ wid+(numb:enjs wid.h) - dat+s+(scot %ux dat.h) - == - :: - ++ update - |= upd=update:btc-wallet - ^- json - %+ frond -.upd - ?- -.upd - %initial (initial upd) - %change-provider (change-provider upd) - %change-wallet (change-wallet upd) - %psbt (psbt upd) - %btc-state (btc-state btc-state.upd) - %new-tx (hest hest.upd) - %cancel-tx (hexb txid.upd) - %new-address (address address.upd) - %balance (balance balance.upd) - %scan-progress (scan-progress main.upd change.upd) - %error s+error.upd - %broadcast-success ~ - == - :: - ++ initial - |= upd=update:btc-wallet - ?> ?=(%initial -.upd) - ^- json - %- pairs - :~ provider+(provider provider.upd) - wallet+?~(wallet.upd ~ [%s u.wallet.upd]) - balance+(balance balance.upd) - history+(history history.upd) - btc-state+(btc-state btc-state.upd) - address+?~(address.upd ~ (address u.address.upd)) - == - :: - ++ change-provider - |= upd=update:btc-wallet - ?> ?=(%change-provider -.upd) - ^- json - (provider provider.upd) - :: - ++ change-wallet - |= upd=update:btc-wallet - ?> ?=(%change-wallet -.upd) - ^- json - %- pairs - :~ wallet+?~(wallet.upd ~ [%s u.wallet.upd]) - balance+(balance balance.upd) - history+(history history.upd) - == - :: - ++ psbt - |= upd=update:btc-wallet - ?> ?=(%psbt -.upd) - ^- json - %- pairs - :~ pb+s+pb.upd - fee+(numb fee.upd) - == - :: - ++ balance - |= b=(unit [p=@ q=@]) - ^- json - ?~ b ~ - %- pairs - :~ confirmed+(numb p.u.b) - unconfirmed+(numb q.u.b) - == - :: - ++ scan-progress - |= [main=(unit idx:bitcoin) change=(unit idx:bitcoin)] - |^ ^- json - %- pairs - :~ main+(from-unit main) - change+(from-unit change) - == - ++ from-unit - |= i=(unit idx:bitcoin) - ?~ i ~ - (numb u.i) - -- - :: - ++ btc-state - |= bs=btc-state:btc-wallet - ^- json - %- pairs - :~ block+(numb block.bs) - fee+?~(fee.bs ~ (numb u.fee.bs)) - date+(sect t.bs) - == - :: - ++ provider - |= p=(unit provider:btc-wallet) - ^- json - ?~ p ~ - %- pairs - :~ host+(ship host.u.p) - connected+b+connected.u.p - == - :: - ++ history - |= hy=history:btc-wallet - ^- json - :- %o - ^- (map @t json) - %- ~(rep by hy) - |= [[=txid:btc-wallet h=hest:btc-wallet] out=(map @t json)] - ^- (map @t json) - (~(put by out) (scot %ux dat.txid) (hest h)) - :: - ++ hest - |= h=hest:btc-wallet - ^- json - %- pairs - :~ xpub+s+xpub.h - txid+(hexb txid.h) - confs+(numb confs.h) - recvd+?~(recvd.h ~ (sect u.recvd.h)) - inputs+(vals inputs.h) - outputs+(vals outputs.h) - note+?~(note.h ~ [%s u.note.h]) - == - :: - ++ vals - |= vl=(list [=val:tx:bitcoin s=(unit @p)]) - ^- json - :- %a - %+ turn vl - |= [v=val:tx:bitcoin s=(unit @p)] - %- pairs - :~ val+(val v) - ship+?~(s ~ (ship u.s)) - == - :: - ++ val - |= v=val:tx:bitcoin - ^- json - %- pairs - :~ txid+(hexb txid.v) - pos+(numb pos.v) - address+(address address.v) - value+(numb value.v) - == - :: - ++ address - |= a=address:bitcoin - ^- json - ?- -.a - %base58 [%s (rsh [3 2] (scot %uc +.a))] - %bech32 [%s +.a] - == - -- --- diff --git a/pkg/bitcoin/lib/bitcoin-utils.hoon b/pkg/bitcoin/lib/bitcoin-utils.hoon deleted file mode 120000 index 7cc792906..000000000 --- a/pkg/bitcoin/lib/bitcoin-utils.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bitcoin-utils.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/bitcoin.hoon b/pkg/bitcoin/lib/bitcoin.hoon deleted file mode 100644 index e1dfdabfa..000000000 --- a/pkg/bitcoin/lib/bitcoin.hoon +++ /dev/null @@ -1,296 +0,0 @@ -:: bitcoin.hoon -:: top-level Bitcoin constants -:: expose BIP libraries -:: -/- *bitcoin -/+ bech32=bip-b173, pbt=bip-b174, bcu=bitcoin-utils, bip-b158 -~% %bitcoin-lib ..part ~ -|% -++ overhead-weight ^-(vbytes 11) -++ input-weight - ~/ %input-weight - |= =bipt - ^- vbytes - ?- bipt - %44 148 - %49 91 - %84 68 - == -++ output-weight - |= =bipt - ^- vbytes - ?- bipt - %44 34 - %49 32 - %84 31 - == -:: -++ xpub-type - |= =xpub - ^- [=bipt =network] - =/ prefix=tape (scag 4 (trip xpub)) - ?: =("tpub" prefix) [%44 %testnet] - ?: =("upub" prefix) [%49 %testnet] - ?: =("vpub" prefix) [%84 %testnet] - ?: =("xpub" prefix) [%44 %main] - ?: =("ypub" prefix) [%49 %main] - ?: =("zpub" prefix) [%84 %main] - ~|("invalid xpub: {}" !!) -:: -:: adr: address manipulation -:: -++ adr - ~% %adr ..overhead-weight ~ - |% - ++ get-bipt - ~/ %get-bipt - |= a=address - ^- bipt - =/ spk=hexb (to-script-pubkey:adr a) - ?: =(25 wid.spk) %44 - ?: =(23 wid.spk) %49 - ?: =(22 wid.spk) %84 - ?: =(34 wid.spk) %84 - ~|("Invalid address" !!) - :: - ++ to-cord - ~/ %to-cord - |= a=address ^- cord - ?: ?=([%base58 *] a) - %- crip - %+ slag 2 - (scow %uc +.a) - +.a - :: - ++ from-pubkey - ~/ %from-pubkey - |= [=bipt =network pubkey=hexb] - ^- address - ?- bipt - %44 - :- %base58 - =< ^-(@uc dat) - %- cat:byt:bcu - :- ?- network - %main 1^0x0 - %testnet 1^0x6f - == - ~[(hash-160:bcu pubkey)] - :: - %49 - :- %base58 - =< ^-(@uc dat) - %- cat:byt:bcu - :~ ?- network - %main 1^0x5 - %testnet 1^0xc4 - == - %- hash-160:bcu - (cat:byt:bcu ~[2^0x14 (hash-160:bcu pubkey)]) - == - :: - %84 - :- %bech32 - (need (encode-pubkey:bech32 network pubkey)) - == - :: - ++ from-cord - ~/ %from-cord - |= addrc=@t - |^ - =/ addrt=tape (trip addrc) - ^- address - ?: (is-base58 addrt) - [%base58 `@uc`(scan addrt fim:ag)] - ?: (is-bech32 addrt) - [%bech32 addrc] - ~|("Invalid address: {}" !!) - :: - ++ is-base58 - |= at=tape - ^- ? - ?| =("m" (scag 1 at)) - =("1" (scag 1 at)) - =("3" (scag 1 at)) - =("2" (scag 1 at)) - == - :: - ++ is-bech32 - |= at=tape - ^- ? - ?| =("bc1" (scag 3 at)) - =("tb1" (scag 3 at)) - == - -- - :: - ++ to-script-pubkey - ~/ %to-script-pubkey - |= =address - ^- hexb - ?- -.address - %bech32 - =+ h=(from-address:bech32 +.address) - %- cat:byt:bcu - :~ 1^0x0 - 1^wid.h - h - == - :: - %base58 - =/ h=hexb [21 `@ux`+.address] - =+ lead-byt=dat:(take:byt:bcu 1 h) - =/ version-network=[bipt network] - ?: =(0x0 lead-byt) [%44 %main] - ?: =(0x6f lead-byt) [%44 %testnet] - ?: =(0x5 lead-byt) [%49 %main] - ?: =(0xc4 lead-byt) [%49 %testnet] - ~|("Invalid base58 address: {<+.address>}" !!) - %- cat:byt:bcu - ?: ?=(%44 -.version-network) - :~ 3^0x76.a914 - (drop:byt:bcu 1 h) - 2^0x88ac - == - :~ 2^0xa914 - (drop:byt:bcu 1 h) - 1^0x87 - == - == - -- -:: -:: +txu: transaction utility core -:: - primarily used for calculating txids -:: - ignores signatures in inputs -:: -++ txu - ~% %bitcoin-lib-txu ..overhead-weight ~ - =, bcu - |% - ++ en - |% - ++ input - |= i=input:tx - ^- hexb - %- cat:byt - :~ (flip:byt txid.i) - (flip:byt 4^pos.i) - ?~ script-sig.i 1^0x0 - %- cat:byt - ~[(en:csiz wid.u.script-sig.i) u.script-sig.i] - (flip:byt sequence.i) - == - :: - ++ output - |= o=output:tx - ^- hexb - %- cat:byt - :~ (flip:byt 8^value.o) - 1^wid.script-pubkey.o - script-pubkey.o - == - -- - :: - ++ de - |% - ++ nversion - |= b=hexb - ^- [nversion=@ud rest=hexb] - :- dat:(flip:byt (take:byt 4 b)) - (drop:byt 4 b) - :: - ++ segwit - |= b=hexb - ^- [segwit=(unit @ud) rest=hexb] - ?. =(1^0x0 (take:byt 1 b)) - [~ b] - :- [~ dat:(take:byt 2 b)] - (drop:byt 2 b) - :: - ++ script-sig - |= b=hexb - ^- [sig=hexb rest=hexb] - =^ siglen=hexb b (de:csiz b) - :- (take:byt dat.siglen b) - (drop:byt dat.siglen b) - :: - ++ sequence - |= b=hexb - ^- [seq=hexb rest=hexb] - [(flip:byt (take:byt 4 b)) (drop:byt 4 b)] - :: - ++ inputs - |= b=hexb - ^- [is=(list input:tx) rest=hexb] - |^ - =| acc=(list input:tx) - =^ count b (dea:csiz b) - |- - ?: =(0 count) [acc b] - =^ i b (input b) - $(acc (snoc acc i), count (dec count)) - :: - ++ input - |= b=hexb - ^- [i=input:tx rest=hexb] - =/ txid (flip:byt (take:byt 32 b)) - =/ pos dat:(flip:byt (take:byt 4 (drop:byt 32 b))) - =^ sig=hexb b (script-sig (drop:byt 36 b)) - =^ seq=hexb b (sequence b) - :_ b - [txid pos seq ?:((gth wid.sig 0) `sig ~) ~ 0] - -- - :: - ++ outputs - |= b=hexb - ^- [os=(list output:tx) rest=hexb] - =| acc=(list output:tx) - =^ count b (dea:csiz b) - |- - ?: =(0 count) [acc b] - =/ value (flip:byt (take:byt 8 b)) - =^ scriptlen b (dea:csiz (drop:byt 8 b)) - %= $ - acc %+ snoc acc - :- (take:byt scriptlen b) - dat.value - b (drop:byt scriptlen b) - count (dec count) - == - -- - :: +basic-encode: encodes data in a format suitable for hashing - :: - ++ basic-encode - |= =data:tx - ^- hexb - %- cat:byt - %- zing - :~ ~[(flip:byt 4^nversion.data)] - ~[(en:csiz (lent is.data))] - (turn is.data input:en) - ~[(en:csiz (lent os.data))] - (turn os.data output:en) - ~[(flip:byt 4^locktime.data)] - == - ++ get-id - |= =data:tx - ^- hexb - %- flip:byt - %- dsha256 - (basic-encode data) - :: - ++ decode - |= b=hexb - ^- data:tx - =^ nversion b - (nversion:de b) - =^ segwit b - (segwit:de b) - =^ inputs b - (inputs:de b) - =^ outputs b - (outputs:de b) - =/ locktime=@ud - dat:(take:byt 4 (flip:byt b)) - [inputs outputs locktime nversion segwit] - -- --- diff --git a/pkg/bitcoin/lib/btc-provider.hoon b/pkg/bitcoin/lib/btc-provider.hoon deleted file mode 100644 index ab857b5c4..000000000 --- a/pkg/bitcoin/lib/btc-provider.hoon +++ /dev/null @@ -1,215 +0,0 @@ -/- bp=btc-provider, json-rpc -/+ bc=bitcoin, bcu=bitcoin-utils -~% %btc-provider-lib ..part ~ -|% -:: +from-epoch: time since Jan 1, 1970 in seconds. -:: -++ from-epoch - |= secs=@ud - ^- (unit @da) - ?: =(0 secs) ~ - [~ (add ~1970.1.1 `@dr`(mul secs ~s1))] -:: -++ get-request - |= url=@t - ^- request:http - [%'GET' url ~ ~] -:: -++ post-request - |= [url=@t body=json] - ^- request:http - :* %'POST' - url - ~[['Content-Type' 'application/json']] - =, html - %- some - %- as-octt:mimes - (en-json body) - == -:: -++ gen-request - |= [=host-info:bp ract=action:rpc-types:bp] - ^- request:http - %+ rpc-action-to-http - api-url.host-info ract -:: -++ rpc - ~/ %rpc - =, dejs:format - |% - ++ parse-result - |= res=response:json-rpc - |^ ^- result:rpc-types:bp - ~| -.res - ?> ?=(%result -.res) - ?+ id.res ~|([%unsupported-result id.res] !!) - %get-address-info - [id.res (address-info res.res)] - :: - %get-tx-vals - [id.res (tx-vals res.res)] - :: - %get-raw-tx - [id.res (raw-tx res.res)] - :: - %broadcast-tx - [%broadcast-tx (broadcast-tx res.res)] - :: - %get-block-count - [id.res (ni res.res)] - :: - %get-block-info - [id.res (block-info res.res)] - == - :: - ++ address-info - %- ot - :~ [%address (cu from-cord:adr:bc so)] - [%utxos (as utxo)] - [%used bo] - [%block ni] - == - :: - ++ utxo - %- ot - :~ ['tx_pos' ni] - ['tx_hash' (cu from-cord:hxb:bcu so)] - [%height ni] - [%value ni] - [%recvd (cu from-epoch ni)] - == - :: - ++ tx-vals - %- ot - :~ [%included bo] - [%txid (cu from-cord:hxb:bcu so)] - [%confs ni] - [%recvd (cu from-epoch ni)] - [%inputs (ar tx-val)] - [%outputs (ar tx-val)] - == - :: - ++ tx-val - %- ot - :~ [%txid (cu from-cord:hxb:bcu so)] - [%pos ni] - [%address (cu from-cord:adr:bc so)] - [%value ni] - == - :: - ++ raw-tx - %- ot - :~ [%txid (cu from-cord:hxb:bcu so)] - [%rawtx (cu from-cord:hxb:bcu so)] - == - :: - ++ broadcast-tx - %- ot - :~ [%txid (cu from-cord:hxb:bcu so)] - [%broadcast bo] - [%included bo] - == - :: - ++ block-info - %- ot - :~ [%block ni] - [%fee (mu ni)] - [%blockhash (cu from-cord:hxb:bcu so)] - [%blockfilter (cu from-cord:hxb:bcu so)] - == - -- - -- -:: -++ rpc-action-to-http - |= [endpoint=@t ract=action:rpc-types:bp] - |^ ^- request:http - ?- -.ract - %get-address-info - %- get-request - %+ mk-url '/addresses/info/' - (to-cord:adr:bc address.ract) - :: - %get-tx-vals - %- get-request - %+ mk-url '/gettxvals/' - (to-cord:hxb:bcu txid.ract) - :: - %get-raw-tx - %- get-request - %+ mk-url '/getrawtx/' - (to-cord:hxb:bcu txid.ract) - :: - %broadcast-tx - %- get-request - %+ mk-url '/broadcasttx/' - (to-cord:hxb:bcu rawtx.ract) - :: - %get-block-count - %- get-request - (mk-url '/getblockcount' '') - :: - %get-block-info - %- get-request - (mk-url '/getblockinfo' '') - == - ++ mk-url - |= [base=@t params=@t] - %^ cat 3 - (cat 3 endpoint base) params - -- -:: RPC/HTTP Utilities -:: -++ httr-to-rpc-response - |= hit=httr:eyre - ^- response:json-rpc - ~| hit - =/ jon=json (need (de-json:html q:(need r.hit))) - ?. =(%2 (div p.hit 100)) - (parse-rpc-error jon) - =, dejs-soft:format - ^- response:json-rpc - =; dere - =+ res=((ar dere) jon) - ?~ res (need (dere jon)) - [%batch u.res] - |= jon=json - ^- (unit response:json-rpc) - =/ res=[id=(unit @t) res=(unit json) err=(unit json)] - %. jon - =, dejs:format - =- (ou -) - :~ ['id' (uf ~ (mu so))] - ['result' (uf ~ (mu same))] - ['error' (uf ~ (mu same))] - == - ?: ?=([^ * ~] res) - `[%result [u.id.res ?~(res.res ~ u.res.res)]] - ~| jon - `(parse-rpc-error jon) -:: -++ get-rpc-response - |= response=client-response:iris - ^- response:json-rpc - ?> ?=(%finished -.response) - %- httr-to-rpc-response - %+ to-httr:iris - response-header.response - full-file.response -:: -++ parse-rpc-error - |= =json - ^- response:json-rpc - :- %error - ?~ json ['' '' ''] - %. json - =, dejs:format - =- (ou -) - :~ =- ['id' (uf '' (cu - (mu so)))] - |*(a=(unit) ?~(a '' u.a)) - :- 'error' - =- (uf ['' ''] -) - =- (cu |*(a=(unit) ?~(a ['' ''] u.a)) (mu (ou -))) - :~ ['code' (uf '' no)] - ['message' (uf '' so)] - == == --- diff --git a/pkg/bitcoin/lib/btc.hoon b/pkg/bitcoin/lib/btc.hoon deleted file mode 100644 index f1db9d333..000000000 --- a/pkg/bitcoin/lib/btc.hoon +++ /dev/null @@ -1,574 +0,0 @@ -:: lib/btc.hoon -:: -/- *btc-wallet, json-rpc, bp=btc-provider -/+ bip32, bc=bitcoin, bcu=bitcoin-utils -=, secp:crypto -=+ ecc=secp256k1 -|% -:: -:: Formerly lib/btc-wallet.hoon -:: -:: -++ defaults - |% - ++ max-gap 20 - ++ confs 6 - -- - :: +fam: planet parent if s is a moon -:: -++ fam - |= [our=ship now=@da s=ship] - ^- ship - ?. =(%earl (clan:title s)) s - (sein:title our now s) -:: -++ num-confs - |= [last-block=@ud =utxo:bc] - ?: =(0 height.utxo) 0 - (add 1 (sub last-block height.utxo)) -:: -++ from-xpub - |= $: =xpub:bc - =fprint:bc - scan-to=(unit scon) - max-gap=(unit @ud) - confs=(unit @ud) - == - ^- walt - =/ [=bipt =network] (xpub-type:bc xpub) - :* xpub - network - fprint - +6:(from-extended:bip32 (trip xpub)) - bipt - *wach - [0 0] - %.n - (fall scan-to *scon) - (fall max-gap max-gap:defaults) - (fall confs confs:defaults) - == -:: +address-coords: find wallet info for the address, if any -:: -++ address-coords - |= [a=address ws=(list walt)] - ^- (unit [w=walt =chyg =idx]) - |^ - |- ?~ ws ~ - =/ res=(unit [=chyg =idx]) - (lookup i.ws) - ?^ res `[i.ws chyg.u.res idx.u.res] - $(ws t.ws) - :: - ++ lookup - |= w=walt - ^- (unit [=chyg =idx]) - =/ ad=(unit addi) (~(get by wach.w) a) - ?~(ad ~ `[chyg.u.ad idx.u.ad]) - -- -:: -++ new-txbu - |= $: w=walt - payee=(unit ship) - =vbytes:bc - is=(list insel) - txos=(list txo) - == - ^- txbu - :* xpub.w - payee - vbytes - %+ turn is - |= i=insel - [utxo.i ~ (~(hdkey wad w chyg.i) idx.i)] - txos - ~ - == -:: txb: transaction builder helpers -:: -++ txb - |_ t=txbu - ++ value - ^- [in=sats out=sats] - :- %+ roll - %+ turn txis.t - |=(=txi value.utxo.txi) - add - (roll (turn txos.t |=(=txo value.txo)) add) - :: - ++ fee - ^- sats:bc - =/ [in=sats out=sats] value - (sub in out) - :: - ++ vbytes - ^- vbytes:bc - %+ add overhead-weight:bc - %+ add - %+ roll - (turn txis.t |=(t=txi (input-weight:bc bipt.hdkey.t))) - add - %+ roll - (turn txos.t |=(t=txo (output-weight:bc (get-bipt:adr:bc address.t)))) - add - ++ tx-data - |^ - ^- data:tx:bc - :* (turn txis.t txi-data) - (turn txos.t txo-data) - 0 1 `1 - == - :: - ++ txi-data - |= =txi - :* txid.utxo.txi pos.utxo.txi - 4^0xffff.ffff ~ ~ value.utxo.txi - == - ++ txo-data - |= =txo - :- (to-script-pubkey:adr:bc address.txo) - value.txo - -- - :: - ++ get-txid - ^- txid - (get-id:txu:bc tx-data) - :: - ++ get-rawtx - (basic-encode:txu:bc tx-data) - :: +add-output: append output (usually change) to txos - :: - ++ add-output - |= =txo - ^- txbu - :: todo update vbytes - t(txos (snoc [txos.t] txo)) - :: +to-psbt: returns a based 64 PSBT if - :: - all inputs have an associated rawtx - :: - ++ to-psbt - ^- (unit base64:psbt:bc) - =/ ins=(list in:psbt:bc) - %+ murn txis.t - |= =txi - ?~ rawtx.txi ~ - `[utxo.txi u.rawtx.txi hdkey.txi] - ?: (lth (lent ins) (lent txis.t)) - ~ - =/ outs=(list out:psbt:bc) - %+ turn txos.t - |=(=txo [address.txo hk.txo]) - `(encode:pbt:bc %.y get-rawtx get-txid ins outs) - -- -:: wad: door for processing walts (wallets) -:: parameterized on a walt and it's chyg account -:: -++ wad - |_ [w=walt =chyg] - ++ pubkey - |= =idx:bc - ^- hexb:bc - =/ pk=@ux - %- compress-point:ecc - pub:(derive-public:(~(derive-public bip32 wamp.w) chyg) idx) - [(met 3 pk) pk] - :: - ++ hdkey - |= =idx:bc - ^- hdkey:bc - [fprint.w (~(pubkey wad w chyg) idx) network.w bipt.w chyg idx] - :: - ++ mk-address - |= =idx:bc - ^- address:bc - (from-pubkey:adr:bc bipt.w network.w (pubkey idx)) - :: +nixt-address: used to get change addresses - :: - gets the current next available address - :: - doesn't bump nixt-address if it's unused - :: - if used, fall back to gen-address and make a new one - :: - ++ nixt-address - ^- (trel address:bc idx:bc walt) - =/ addr (mk-address nixt-idx) - ~| "lib/btc-wallet-store: get-next-address: nixt shouldn't be blank" - =/ =addi (~(got by wach.w) addr) - ?. used.addi - [addr nixt-idx w] - gen-address - :: - :: +gen-address: - :: - generates the next available address - :: - watches it (using update address) - :: - ++ gen-address - ^- (trel address:bc idx:bc walt) - =/ addr (mk-address nixt-idx) - :* addr - nixt-idx - %+ update-address addr - [%.n chyg nixt-idx *(set utxo:bc)] - == - :: +update-address - :: - insert a new address - :: - if it's used, move "nixt" to the next free address - :: - watch address - :: - ++ update-address - |= [a=address:bc =addi] - ^- walt - ?> =(chyg chyg.addi) - ?> =(a (mk-address idx.addi)) - =? w ?&(used.addi (is-nixt addi)) - bump-nixt - w(wach (~(put by wach.w) a addi)) - :: - ++ is-nixt - |= =addi ^- ? - ?: ?=(%0 chyg.addi) - =(idx.addi p.nixt.w) - =(idx.addi q.nixt.w) - ++ nixt-idx - ?:(?=(%0 chyg) p.nixt.w q.nixt.w) - :: +bump-nixt: return wallet with bumped nixt - :: - find next unused address - :: - watches that address - :: - crashes if max-index is passed - :: - ++ bump-nixt - |^ ^- walt - =/ new-idx=idx:bc +(nixt-idx) - |- ?> (lte new-idx max-index) - =+ addr=(mk-address new-idx) - =/ =addi - %+ ~(gut by wach.w) addr - [%.n chyg new-idx *(set utxo:bc)] - ?. used.addi - %= w - nixt (set-nixt new-idx) - wach (~(put by wach.w) addr addi) - == - $(new-idx +(new-idx)) - :: - ++ set-nixt - |= =idx:bc ^- nixt - ?:(?=(%0 chyg) [idx q.nixt.w] [p.nixt.w idx]) - -- - -- -:: sut: select utxos -:: -++ sut -|_ [w=walt eny=@uvJ last-block=@ud payee=(unit ship) =feyb txos=(list txo)] - ++ dust-sats 3 - ++ dust-threshold - |= output-bipt=bipt:bc - ^- vbytes - (mul dust-sats (input-weight:bc output-bipt)) - :: - ++ target-value - ^- sats - %+ roll (turn txos |=(=txo value.txo)) - |=([a=sats b=sats] (add a b)) - :: - ++ base-weight - ^- vbytes - %+ add overhead-weight:bc - %+ roll - %+ turn txos - |=(=txo (output-weight:bc (get-bipt:adr:bc address.txo))) - add - :: - ++ total-vbytes - |= selected=(list insel) - ^- vbytes - %+ add base-weight - (mul (input-weight:bc bipt.w) (lent selected)) - :: value of an input after fee - :: 0 if net is <= 0 - :: - ++ net-value - |= val=sats - ^- sats - =/ cost (mul (input-weight:bc bipt.w) feyb) - ?: (lte val cost) 0 - (sub val cost) - :: - :: +spendable: whether utxo has enough confs to spend - :: - ++ spendable - |= =utxo:bc ^- ? - (gte (num-confs last-block utxo) confs.w) - :: +with-change: - :: - choose UTXOs, if there are enough - :: - return txbu and amount of change (if any) - :: - ++ with-change - ^- [tb=(unit txbu) chng=(unit sats)] - =/ tb=(unit txbu) select-utxos - ?~ tb [~ ~] - =+ excess=~(fee txb u.tb) :: (inputs - outputs) - =/ new-fee=sats :: cost of this tx + one more output - (mul feyb (add (output-weight:bc bipt.w) vbytes.u.tb)) - ?. (gth excess new-fee) - [tb ~] - ?. (gth (sub excess new-fee) (dust-threshold bipt.w)) - [tb ~] - :- tb - `(sub excess new-fee) - :: Uses naive random selection. Should switch to branch-and-bound later. - :: - ++ select-utxos - |^ ^- (unit txbu) - ?. %+ levy txos - |= =txo - %+ gth value.txo - (dust-threshold (get-bipt:adr:bc address.txo)) - ~|("One or more suggested outputs is dust." !!) - =/ is=(unit (list insel)) - %- single-random-draw - %- zing - (turn ~(val by wach.w) to-insels) - ?~ is ~ - `(new-txbu w payee (total-vbytes u.is) u.is txos) - :: - ++ to-insels - |= =addi - ^- (list insel) - %+ turn ~(tap in utxos.addi) - |=(=utxo:bc [utxo chyg.addi idx.addi]) - -- - :: single-random-draw - :: randomly choose utxos until target is hit - :: only use an insel if its net-value > 0 - :: - ++ single-random-draw - |= is=(list insel) - ^- (unit (list insel)) - =/ rng ~(. og eny) - =/ target (add target-value (mul feyb base-weight)) :: add base fees to target - =| [select=(list insel) total=sats:bc] - |- - ?: =(~ is) ~ - =^ n rng (rads:rng (lent is)) - =/ i=insel (snag n is) - ?. (spendable utxo.i) - $(is (oust [n 1] is)) - =/ net-val (net-value value.utxo.i) - =? select (gth net-val 0) - [i select] - =/ new-total (add total net-val) - ?: (gte new-total target) `select - %= $ - is (oust [n 1] is) - total new-total - == - :: - -- -:: -:: -:: Formerly lib/btc-provider -:: -:: -++ from-epoch - |= secs=@ud - ^- (unit @da) - ?: =(0 secs) ~ - [~ (add ~1970.1.1 `@dr`(mul secs ~s1))] -:: -++ get-request - |= url=@t - ^- request:http - [%'GET' url ~ ~] -:: -++ post-request - |= [url=@t body=json] - ^- request:http - :* %'POST' - url - ~[['Content-Type' 'application/json']] - =, html - %- some - %- as-octt:mimes - (en-json body) - == -:: -++ gen-request - |= [=host-info:bp ract=action:rpc-types:bp] - ^- request:http - %+ rpc-action-to-http - api-url.host-info ract -:: -++ rpc - =, dejs:format - |% - ++ parse-result - |= res=response:json-rpc - |^ ^- result:rpc-types:bp - ~| -.res - ?> ?=(%result -.res) - ?+ id.res ~|([%unsupported-result id.res] !!) - %get-address-info - [id.res (address-info res.res)] - :: - %get-tx-vals - [id.res (tx-vals res.res)] - :: - %get-raw-tx - [id.res (raw-tx res.res)] - :: - %broadcast-tx - [%broadcast-tx (broadcast-tx res.res)] - :: - %get-block-count - [id.res (ni res.res)] - :: - %get-block-info - [id.res (block-info res.res)] - == - :: - ++ address-info - %- ot - :~ [%address (cu from-cord:adr:bc so)] - [%utxos (as utxo)] - [%used bo] - [%block ni] - == - ++ utxo - %- ot - :~ ['tx_pos' ni] - ['tx_hash' (cu from-cord:hxb:bcu so)] - [%height ni] - [%value ni] - [%recvd (cu from-epoch ni)] - == - ++ tx-vals - %- ot - :~ [%included bo] - [%txid (cu from-cord:hxb:bcu so)] - [%confs ni] - [%recvd (cu from-epoch ni)] - [%inputs (ar tx-val)] - [%outputs (ar tx-val)] - == - ++ tx-val - %- ot - :~ [%txid (cu from-cord:hxb:bcu so)] - [%pos ni] - [%address (cu from-cord:adr:bc so)] - [%value ni] - == - ++ raw-tx - %- ot - :~ [%txid (cu from-cord:hxb:bcu so)] - [%rawtx (cu from-cord:hxb:bcu so)] - == - ++ broadcast-tx - %- ot - :~ [%txid (cu from-cord:hxb:bcu so)] - [%broadcast bo] - [%included bo] - == - ++ block-info - %- ot - :~ [%block ni] - [%fee (mu ni)] - [%blockhash (cu from-cord:hxb:bcu so)] - [%blockfilter (cu from-cord:hxb:bcu so)] - == - -- - -- -:: -++ rpc-action-to-http - |= [endpoint=@t ract=action:rpc-types:bp] - |^ ^- request:http - ?- -.ract - %get-address-info - %- get-request - %+ mk-url '/addresses/info/' - (to-cord:adr:bc address.ract) - :: - %get-tx-vals - %- get-request - %+ mk-url '/gettxvals/' - (to-cord:hxb:bcu txid.ract) - :: - %get-raw-tx - %- get-request - %+ mk-url '/getrawtx/' - (to-cord:hxb:bcu txid.ract) - :: - %broadcast-tx - %- get-request - %+ mk-url '/broadcasttx/' - (to-cord:hxb:bcu rawtx.ract) - :: - %get-block-count - %- get-request - (mk-url '/getblockcount' '') - :: - %get-block-info - =/ param=@t - ?~(block.ract '' (rsh [3 2] (scot %ui u.block.ract))) - %- get-request - (mk-url '/getblockinfo/' param) - == - ++ mk-url - |= [base=@t params=@t] - %^ cat 3 - (cat 3 endpoint base) params - -- -:: RPC/HTTP Utilities -:: -++ httr-to-rpc-response - |= hit=httr:eyre - ^- response:json-rpc - ~| hit - =/ jon=json (need (de-json:html q:(need r.hit))) - ?. =(%2 (div p.hit 100)) - (parse-rpc-error jon) - =, dejs-soft:format - ^- response:json-rpc - =; dere - =+ res=((ar dere) jon) - ?~ res (need (dere jon)) - [%batch u.res] - |= jon=json - ^- (unit response:json-rpc) - =/ res=[id=(unit @t) res=(unit json) err=(unit json)] - %. jon - =, dejs:format - =- (ou -) - :~ ['id' (uf ~ (mu so))] - ['result' (uf ~ (mu same))] - ['error' (uf ~ (mu same))] - == - ?: ?=([^ * ~] res) - `[%result [u.id.res ?~(res.res ~ u.res.res)]] - ~| jon - `(parse-rpc-error jon) -:: -++ get-rpc-response - |= response=client-response:iris - ^- response:json-rpc - ?> ?=(%finished -.response) - %- httr-to-rpc-response - %+ to-httr:iris - response-header.response - full-file.response -:: -++ parse-rpc-error - |= =json - ^- response:json-rpc - :- %error - ?~ json ['' '' ''] - %. json - =, dejs:format - =- (ou -) - :~ =- ['id' (uf '' (cu - (mu so)))] - |*(a=(unit) ?~(a '' u.a)) - :- 'error' - =- (uf ['' ''] -) - =- (cu |*(a=(unit) ?~(a ['' ''] u.a)) (mu (ou -))) - :~ ['code' (uf '' no)] - ['message' (uf '' so)] - == == --- diff --git a/pkg/bitcoin/lib/cram.hoon b/pkg/bitcoin/lib/cram.hoon deleted file mode 120000 index 4005e57ee..000000000 --- a/pkg/bitcoin/lib/cram.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/cram.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/der.hoon b/pkg/bitcoin/lib/der.hoon deleted file mode 120000 index 8446f8e92..000000000 --- a/pkg/bitcoin/lib/der.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/der.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/docket.hoon b/pkg/bitcoin/lib/docket.hoon deleted file mode 120000 index e0f69ee1e..000000000 --- a/pkg/bitcoin/lib/docket.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/docket.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/ethereum.hoon b/pkg/bitcoin/lib/ethereum.hoon deleted file mode 120000 index c0a2772eb..000000000 --- a/pkg/bitcoin/lib/ethereum.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ethereum.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/ethio.hoon b/pkg/bitcoin/lib/ethio.hoon deleted file mode 120000 index 9c5b58148..000000000 --- a/pkg/bitcoin/lib/ethio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ethio.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/group-store.hoon b/pkg/bitcoin/lib/group-store.hoon deleted file mode 100644 index dedc9dd4d..000000000 --- a/pkg/bitcoin/lib/group-store.hoon +++ /dev/null @@ -1,451 +0,0 @@ -/- *group, sur=group-store -/+ resource -^? -=< [. sur] -=, sur -|% -:: -++ dekebab - |= str=cord - ^- cord - =- (fall - str) - %+ rush str - =/ name - %+ cook - |= part=tape - ^- tape - ?~ part part - :- (sub i.part 32) - t.part - (star low) - %+ cook - (cork (bake zing (list tape)) crip) - ;~(plug (star low) (more hep name)) -:: -++ enkebab - |= str=cord - ^- cord - ~| str - =- (fall - str) - %+ rush str - =/ name - %+ cook - |= part=tape - ^- tape - ?~ part part - :- (add i.part 32) - t.part - ;~(plug hig (star low)) - %+ cook - |=(a=(list tape) (crip (zing (join "-" a)))) - ;~(plug (star low) (star name)) - -++ migrate-path-map - |* map=(map path *) - =/ keys=(list path) - (skim ~(tap in ~(key by map)) |=(=path =('~' (snag 0 path)))) - |- - ?~ keys - map - =* key i.keys - ?> ?=(^ key) - =/ value - (~(got by map) key) - =. map - (~(put by map) t.key value) - =. map - (~(del by map) key) - $(keys t.keys, map (~(put by map) t.key value)) -:: -++ enjs - =, enjs:format - |% - ++ frond - |= [p=@t q=json] - ^- json - (frond:enjs:format (dekebab p) q) - ++ pairs - |= a=(list [p=@t q=json]) - ^- json - %- pairs:enjs:format - %+ turn a - |= [p=@t q=json] - ^- [@t json] - [(dekebab p) q] - :: - ++ update - |= =^update - ^- json - %+ frond -.update - ?- -.update - %add-group (add-group update) - %add-members (add-members update) - %add-tag (add-tag update) - %remove-members (remove-members update) - %remove-tag (remove-tag update) - %initial (initial update) - %initial-group (initial-group update) - %remove-group (remove-group update) - %change-policy (change-policy update) - %expose (expose update) - == - :: - ++ initial-group - |= =^update - ?> ?=(%initial-group -.update) - %- pairs - :~ resource+(enjs:resource resource.update) - group+(group group.update) - == - :: - ++ initial - |= =^initial - ?> ?=(%initial -.initial) - %- pairs - ^- (list [@t json]) - %+ turn - ~(tap by groups.initial) - |= [rid=resource grp=^group] - ^- [@t json] - :_ (group grp) - (enjs-path:resource rid) - :: - ++ group - |= =^group - ^- json - %- pairs - :~ members+(set ship members.group) - policy+(policy policy.group) - tags+(tags tags.group) - hidden+b+hidden.group - == - :: - ++ rank - |= =rank:title - ^- json - [%s rank] - ++ tags - |= =^tags - ^- json - %- pairs - %+ turn ~(tap by tags) - |= [=^tag ships=(^set ^ship)] - ^- [@t json] - :_ (set ship ships) - ?@ tag tag - ;: (cury cat 3) - app.tag '\\' - tag.tag '\\' - (enjs-path:resource resource.tag) - == - :: - ++ set - |* [item=$-(* json) sit=(^set)] - ^- json - :- %a - %+ turn - ~(tap in sit) - item - :: - ++ tag - |= =^tag - ^- json - ?@ tag - (frond %tag s+tag) - %- pairs - :~ app+s+app.tag - tag+s+tag.tag - resource+s+(enjs-path:resource resource.tag) - == - :: - ++ policy - |= =^policy - %+ frond -.policy - %- pairs - ?- -.policy - %invite - :~ pending+(set ship pending.policy) - == - %open - :~ banned+(set ship banned.policy) - ban-ranks+(set rank ban-ranks.policy) - == - == - ++ policy-diff - |= =diff:^policy - %+ frond -.diff - |^ - ?- -.diff - %invite (invite +.diff) - %open (open +.diff) - %replace (policy +.diff) - == - ++ open - |= =diff:open:^policy - %+ frond -.diff - ?- -.diff - %allow-ranks (set rank ranks.diff) - %ban-ranks (set rank ranks.diff) - %allow-ships (set ship ships.diff) - %ban-ships (set ship ships.diff) - == - ++ invite - |= =diff:invite:^policy - %+ frond -.diff - ?- -.diff - %add-invites (set ship invitees.diff) - %remove-invites (set ship invitees.diff) - == - -- - :: - ++ expose - |= =^update - ^- json - ?> ?=(%expose -.update) - (frond %resource (enjs:resource resource.update)) - :: - ++ remove-group - |= =^update - ^- json - ?> ?=(%remove-group -.update) - (frond %resource (enjs:resource resource.update)) - :: - ++ add-group - |= =action - ^- json - ?> ?=(%add-group -.action) - %- pairs - :~ resource+(enjs:resource resource.action) - policy+(policy policy.action) - hidden+b+hidden.action - == - :: - ++ add-members - |= =action - ^- json - ?> ?=(%add-members -.action) - %- pairs - :~ resource+(enjs:resource resource.action) - ships+(set ship ships.action) - == - :: - ++ remove-members - |= =action - ^- json - ?> ?=(%remove-members -.action) - %- pairs - :~ resource+(enjs:resource resource.action) - ships+(set ship ships.action) - == - :: - ++ add-tag - |= =action - ^- json - ?> ?=(%add-tag -.action) - %- pairs - ^- (list [p=@t q=json]) - :~ resource+(enjs:resource resource.action) - tag+(tag tag.action) - ships+(set ship ships.action) - == - :: - ++ remove-tag - |= =action - ^- json - ?> ?=(%remove-tag -.action) - %- pairs - :~ resource+(enjs:resource resource.action) - tag+(tag tag.action) - ships+(set ship ships.action) - == - :: - ++ change-policy - |= =action - ^- json - ?> ?=(%change-policy -.action) - %- pairs - :~ resource+(enjs:resource resource.action) - diff+(policy-diff diff.action) - == - -- -++ dejs - =, dejs:format - |% - :: - ++ ruk-jon - |= [a=(map @t json) b=$-(@t @t)] - ^+ a - =- (malt -) - |- - ^- (list [@t json]) - ?~ a ~ - :- [(b p.n.a) q.n.a] - %+ weld - $(a l.a) - $(a r.a) - :: - ++ of - |* wer=(pole [cord fist]) - |= jon=json - ?> ?=([%o [@ *] ~ ~] jon) - |- - ?- wer - :: [[key=@t wit=*] t=*] - [[key=@t *] t=*] - => .(wer [[* wit] *]=wer) - ?: =(key.wer (enkebab p.n.p.jon)) - [key.wer ~|(val+q.n.p.jon (wit.wer q.n.p.jon))] - ?~ t.wer ~|(bad-key+p.n.p.jon !!) - ((of t.wer) jon) - == - ++ ot - |* wer=(pole [cord fist]) - |= jon=json - ~| jon - %- (ot-raw:dejs:format wer) - ?> ?=(%o -.jon) - (ruk-jon p.jon enkebab) - :: - ++ update - ^- $-(json ^update) - |= jon=json - ^- ^update - %. jon - %- of - :~ - add-group+add-group - add-members+add-members - remove-members+remove-members - add-tag+add-tag - remove-tag+remove-tag - change-policy+change-policy - remove-group+remove-group - expose+expose - == - ++ rank - |= =json - ^- rank:title - ?> ?=(%s -.json) - ?: =('czar' p.json) %czar - ?: =('king' p.json) %king - ?: =('duke' p.json) %duke - ?: =('earl' p.json) %earl - ?: =('pawn' p.json) %pawn - !! - ++ tag - |= =json - ^- ^tag - ?> ?=(%o -.json) - ?. (~(has by p.json) 'app') - =/ tag-json - (~(got by p.json) 'tag') - ?> ?=(%s -.tag-json) - ?: =('admin' p.tag-json) %admin - ?: =('moderator' p.tag-json) %moderator - ?: =('janitor' p.tag-json) %janitor - !! - %. json - %- ot - :~ app+so - resource+dejs-path:resource - tag+so - == - - :: move to zuse also - ++ oj - |* =fist - ^- $-(json (jug cord _(fist *json))) - (om (as fist)) - ++ tags - ^- $-(json ^tags) - *$-(json ^tags) - :: TODO: move to zuse - ++ ship - (su ;~(pfix sig fed:ag)) - ++ policy - ^- $-(json ^policy) - %- of - :~ invite+invite-policy - open+open-policy - == - ++ invite-policy - %- ot - :~ pending+(as ship) - == - ++ open-policy - %- ot - :~ ban-ranks+(as rank) - banned+(as ship) - == - ++ open-policy-diff - %- of - :~ allow-ranks+(as rank) - allow-ships+(as ship) - ban-ranks+(as rank) - ban-ships+(as ship) - == - ++ invite-policy-diff - %- of - :~ add-invites+(as ship) - remove-invites+(as ship) - == - ++ policy-diff - ^- $-(json diff:^policy) - %- of - :~ invite+invite-policy-diff - open+open-policy-diff - replace+policy - == - :: - ++ remove-group - |= =json - ^- [resource ~] - ?> ?=(%o -.json) - =/ rid=resource - (dejs:resource (~(got by p.json) 'resource')) - [rid ~] - :: - ++ expose - |= =json - ^- [resource ~] - ?> ?=(%o -.json) - =/ rid=resource - (dejs:resource (~(got by p.json) 'resource')) - [rid ~] - :: - ++ add-group - %- ot - :~ resource+dejs:resource - policy+policy - hidden+bo - == - ++ add-members - %- ot - :~ resource+dejs:resource - ships+(as ship) - == - ++ remove-members - ^- $-(json [resource (set ^ship)]) - %- ot - :~ resource+dejs:resource - ships+(as ship) - == - ++ add-tag - %- ot - :~ resource+dejs:resource - tag+tag - ships+(as ship) - == - ++ remove-tag - %- ot - :~ resource+dejs:resource - tag+tag - ships+(as ship) - == - ++ change-policy - %- ot - :~ resource+dejs:resource - diff+policy-diff - == - -- --- diff --git a/pkg/bitcoin/lib/group.hoon b/pkg/bitcoin/lib/group.hoon deleted file mode 100644 index d314cbdd8..000000000 --- a/pkg/bitcoin/lib/group.hoon +++ /dev/null @@ -1,137 +0,0 @@ -/- *group -/+ store=group-store, resource -:: -|_ =bowl:gall -+$ card card:agent:gall -:: -++ is-running - .^(? %gu /(scot %p our.bowl)/group-store/(scot %da now.bowl)) -:: -++ resource-for-update - |= =vase - ^- (list resource) - =/ =update:store !<(update:store vase) - ?: ?=(%initial -.update) - ~ - ~[resource.update] -:: -++ scry-for - |* [=mold =path] - =. path - (snoc path %noun) - .^ mold - %gx - (scot %p our.bowl) - %group-store - (scot %da now.bowl) - path - == -++ scry-tag - |= [rid=resource =tag] - ^- (unit (set ship)) - =/ group - (scry-group rid) - ?~ group - ~ - `(~(gut by tags.u.group) tag ~) -:: -++ scry-group - |= rid=resource - ^- (unit group) - %+ scry-for ,(unit group) - `path`groups+(en-path:resource rid) -:: -++ scry-groups - ^- (set resource) - .^ ,(set resource) - %gy - (scot %p our.bowl) - %group-store - (scot %da now.bowl) - /groups - == -:: -++ members - |= rid=resource - ^- (set ship) - =; =group - members.group - (fall (scry-group rid) *group) -:: -++ is-member - |= [=ship group=resource] - ^- ? - =- (~(has in -) ship) - (members group) -:: -++ is-admin - |= [=ship group=resource] - ^- ? - =/ tags tags:(fall (scry-group group) *^group) - =/ admins=(set ^ship) (~(gut by tags) %admin ~) - (~(has in admins) ship) -:: +role-for-ship: get role for user -:: -:: Returns ~ if no such group exists or user is not -:: a member of the group. Returns [~ ~] if the user -:: is a member with no additional role. -++ role-for-ship - |= [rid=resource =ship] - ^- (unit (unit role-tag)) - =/ grp=(unit group) - (scry-group rid) - ?~ grp ~ - (role-for-ship-with-group u.grp rid ship) -:: -++ role-for-ship-with-group - |= [grp=group rid=resource =ship] - ^- (unit (unit role-tag)) - =* group grp - =* policy policy.group - =* tags tags.group - =/ admins=(set ^ship) - (~(gut by tags) %admin ~) - ?: (~(has in admins) ship) - ``%admin - =/ mods - (~(gut by tags) %moderator ~) - ?: (~(has in mods) ship) - ``%moderator - =/ janitors - (~(gut by tags) %janitor ~) - ?: (~(has in janitors) ship) - ``%janitor - ?: (~(has in members.group) ship) - [~ ~] - ~ -:: -++ can-join - |= [rid=resource =ship] - ^- ? - %+ scry-for ,? - ^- path - :- %groups - (weld (en-path:resource rid) /join/(scot %p ship)) -:: -++ get-tagged-ships - |= [rid=resource =tag] - ^- (set ship) - =/ grp=(unit group) - (scry-group rid) - ?~ grp ~ - (get-tagged-ships-with-group u.grp rid tag) -:: -++ get-tagged-ships-with-group - |= [grp=group rid=resource =tag] - ^- (set ship) - (~(get ju tags.grp) tag) -:: -++ is-managed - |= rid=resource - ^- ? - =/ group=(unit group) - (scry-group rid) - ?~ group %.n - !hidden.u.group -:: --- diff --git a/pkg/bitcoin/lib/jose.hoon b/pkg/bitcoin/lib/jose.hoon deleted file mode 120000 index 6bff549ab..000000000 --- a/pkg/bitcoin/lib/jose.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/jose.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/keygen.hoon b/pkg/bitcoin/lib/keygen.hoon deleted file mode 120000 index 8557d0c52..000000000 --- a/pkg/bitcoin/lib/keygen.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/keygen.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/language-server/build.hoon b/pkg/bitcoin/lib/language-server/build.hoon deleted file mode 120000 index 749928056..000000000 --- a/pkg/bitcoin/lib/language-server/build.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/build.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/language-server/easy-print.hoon b/pkg/bitcoin/lib/language-server/easy-print.hoon deleted file mode 120000 index 2160e2f5a..000000000 --- a/pkg/bitcoin/lib/language-server/easy-print.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/easy-print.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/language-server/json.hoon b/pkg/bitcoin/lib/language-server/json.hoon deleted file mode 120000 index 96fe5b516..000000000 --- a/pkg/bitcoin/lib/language-server/json.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/json.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/language-server/rune-snippet.hoon b/pkg/bitcoin/lib/language-server/rune-snippet.hoon deleted file mode 120000 index 387505b59..000000000 --- a/pkg/bitcoin/lib/language-server/rune-snippet.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/rune-snippet.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/mip.hoon b/pkg/bitcoin/lib/mip.hoon deleted file mode 120000 index 47b46482a..000000000 --- a/pkg/bitcoin/lib/mip.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/mip.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/ph/io.hoon b/pkg/bitcoin/lib/ph/io.hoon deleted file mode 120000 index 9b660df8f..000000000 --- a/pkg/bitcoin/lib/ph/io.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/ph/io.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/ph/util.hoon b/pkg/bitcoin/lib/ph/util.hoon deleted file mode 120000 index ec423efc0..000000000 --- a/pkg/bitcoin/lib/ph/util.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/ph/util.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/pkcs.hoon b/pkg/bitcoin/lib/pkcs.hoon deleted file mode 120000 index d7a2ab46f..000000000 --- a/pkg/bitcoin/lib/pkcs.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/pkcs.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/primitive-rsa.hoon b/pkg/bitcoin/lib/primitive-rsa.hoon deleted file mode 120000 index f9dde2d95..000000000 --- a/pkg/bitcoin/lib/primitive-rsa.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/primitive-rsa.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/resource.hoon b/pkg/bitcoin/lib/resource.hoon deleted file mode 100644 index f84acb0b8..000000000 --- a/pkg/bitcoin/lib/resource.hoon +++ /dev/null @@ -1,57 +0,0 @@ -/- sur=resource -=< resource -|% -+$ resource resource:sur -++ en-path - |= =resource - ^- path - ~[%ship (scot %p entity.resource) name.resource] -:: -++ de-path - |= =path - ^- resource - (need (de-path-soft path)) -:: -++ de-path-soft - |= =path - ^- (unit resource) - ?. ?=([%ship @ @ *] path) - ~ - =/ ship - (slaw %p i.t.path) - ?~ ship - ~ - `[u.ship i.t.t.path] -:: -++ enjs - |= =resource - ^- json - =, enjs:format - %- pairs - :~ ship+(ship entity.resource) - name+s+name.resource - == -:: -++ enjs-path - |= =resource - %- spat - (en-path resource) -:: -++ dejs-path - %- su:dejs:format - ;~ pfix - (jest '/ship/') - ;~((glue fas) ;~(pfix sig fed:ag) urs:ab) - == -:: -++ dejs - =, dejs:format - ^- $-(json resource) - |= jon=json - ~| dejs+%resource - %. jon - %- ot - :~ ship+(su ;~(pfix sig fed:ag)) - name+so - == --- diff --git a/pkg/bitcoin/lib/ring.hoon b/pkg/bitcoin/lib/ring.hoon deleted file mode 120000 index e5e819947..000000000 --- a/pkg/bitcoin/lib/ring.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ring.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/server.hoon b/pkg/bitcoin/lib/server.hoon deleted file mode 120000 index 6176cfc00..000000000 --- a/pkg/bitcoin/lib/server.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/server.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/strand.hoon b/pkg/bitcoin/lib/strand.hoon deleted file mode 120000 index d95df7948..000000000 --- a/pkg/bitcoin/lib/strand.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/strand.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/strandio.hoon b/pkg/bitcoin/lib/strandio.hoon deleted file mode 120000 index 0caebfac1..000000000 --- a/pkg/bitcoin/lib/strandio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/strandio.hoon \ No newline at end of file diff --git a/pkg/bitcoin/lib/test.hoon b/pkg/bitcoin/lib/test.hoon deleted file mode 120000 index cc50ce7cf..000000000 --- a/pkg/bitcoin/lib/test.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/test.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/belt.hoon b/pkg/bitcoin/mar/belt.hoon deleted file mode 120000 index 0c8999932..000000000 --- a/pkg/bitcoin/mar/belt.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/belt.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/blit.hoon b/pkg/bitcoin/mar/blit.hoon deleted file mode 120000 index 3ea8dc943..000000000 --- a/pkg/bitcoin/mar/blit.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/blit.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/btc-provider/action.hoon b/pkg/bitcoin/mar/btc-provider/action.hoon deleted file mode 100644 index 52a0e1cbe..000000000 --- a/pkg/bitcoin/mar/btc-provider/action.hoon +++ /dev/null @@ -1,12 +0,0 @@ -/- *btc-provider -|_ act=action -++ grad %noun -++ grow - |% - ++ noun act - -- -++ grab - |% - ++ noun action - -- --- diff --git a/pkg/bitcoin/mar/btc-provider/status.hoon b/pkg/bitcoin/mar/btc-provider/status.hoon deleted file mode 100644 index c23fd5e2d..000000000 --- a/pkg/bitcoin/mar/btc-provider/status.hoon +++ /dev/null @@ -1,14 +0,0 @@ -/- *btc-provider -/+ bitcoin-json -|_ sta=status -++ grad %noun -++ grow - |% - ++ noun sta - ++ json (status:enjs:bitcoin-json sta) - -- -++ grab - |% - ++ noun status - -- --- diff --git a/pkg/bitcoin/mar/btc-provider/update.hoon b/pkg/bitcoin/mar/btc-provider/update.hoon deleted file mode 100644 index fae20d82b..000000000 --- a/pkg/bitcoin/mar/btc-provider/update.hoon +++ /dev/null @@ -1,12 +0,0 @@ -/- *btc-provider -|_ upd=update -++ grad %noun -++ grow - |% - ++ noun upd - -- -++ grab -|% - ++ noun update - -- --- diff --git a/pkg/bitcoin/mar/btc-wallet/action.hoon b/pkg/bitcoin/mar/btc-wallet/action.hoon deleted file mode 100644 index 6d50771ea..000000000 --- a/pkg/bitcoin/mar/btc-wallet/action.hoon +++ /dev/null @@ -1,12 +0,0 @@ -/- *btc-wallet -|_ act=action -++ grad %noun -++ grow - |% - ++ noun act - -- -++ grab - |% - ++ noun action - -- --- diff --git a/pkg/bitcoin/mar/btc-wallet/command.hoon b/pkg/bitcoin/mar/btc-wallet/command.hoon deleted file mode 100644 index efee201ca..000000000 --- a/pkg/bitcoin/mar/btc-wallet/command.hoon +++ /dev/null @@ -1,14 +0,0 @@ -/- *btc-wallet -/+ bitcoin-json -|_ com=command -++ grad %noun -++ grow - |% - ++ noun com - -- -++ grab - |% - ++ noun command - ++ json command:dejs:bitcoin-json - -- --- diff --git a/pkg/bitcoin/mar/btc-wallet/internal.hoon b/pkg/bitcoin/mar/btc-wallet/internal.hoon deleted file mode 100644 index 5096021af..000000000 --- a/pkg/bitcoin/mar/btc-wallet/internal.hoon +++ /dev/null @@ -1,12 +0,0 @@ -/- *btc-wallet -|_ intr=internal -++ grad %noun -++ grow - |% - ++ noun intr - -- -++ grab - |% - ++ noun internal - -- --- diff --git a/pkg/bitcoin/mar/btc-wallet/update.hoon b/pkg/bitcoin/mar/btc-wallet/update.hoon deleted file mode 100644 index a6245637d..000000000 --- a/pkg/bitcoin/mar/btc-wallet/update.hoon +++ /dev/null @@ -1,14 +0,0 @@ -/- *btc-wallet -/+ bitcoin-json -|_ upd=update -++ grad %noun -++ grow - |% - ++ noun upd - ++ json (update:enjs:bitcoin-json upd) - -- -++ grab - |% - ++ noun update - -- --- diff --git a/pkg/bitcoin/mar/docket-0.hoon b/pkg/bitcoin/mar/docket-0.hoon deleted file mode 120000 index 2bb549dd9..000000000 --- a/pkg/bitcoin/mar/docket-0.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/mar/docket-0.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/htm.hoon b/pkg/bitcoin/mar/htm.hoon deleted file mode 120000 index d29e24bac..000000000 --- a/pkg/bitcoin/mar/htm.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/htm.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/html.hoon b/pkg/bitcoin/mar/html.hoon deleted file mode 120000 index 14a5f8f7b..000000000 --- a/pkg/bitcoin/mar/html.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/html.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/httr.hoon b/pkg/bitcoin/mar/httr.hoon deleted file mode 120000 index 572665778..000000000 --- a/pkg/bitcoin/mar/httr.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/httr.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/hymn.hoon b/pkg/bitcoin/mar/hymn.hoon deleted file mode 120000 index 905156749..000000000 --- a/pkg/bitcoin/mar/hymn.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/hymn.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/js.hoon b/pkg/bitcoin/mar/js.hoon deleted file mode 120000 index 00189f4c6..000000000 --- a/pkg/bitcoin/mar/js.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/js.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/json.hoon b/pkg/bitcoin/mar/json.hoon deleted file mode 120000 index e77f85d05..000000000 --- a/pkg/bitcoin/mar/json.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/json.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/json/rpc/response.hoon b/pkg/bitcoin/mar/json/rpc/response.hoon deleted file mode 120000 index 52c97c864..000000000 --- a/pkg/bitcoin/mar/json/rpc/response.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/json/rpc/response.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/language-server/rpc/notification.hoon b/pkg/bitcoin/mar/language-server/rpc/notification.hoon deleted file mode 120000 index b95e54c35..000000000 --- a/pkg/bitcoin/mar/language-server/rpc/notification.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/notification.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/language-server/rpc/request.hoon b/pkg/bitcoin/mar/language-server/rpc/request.hoon deleted file mode 120000 index 26203cf5b..000000000 --- a/pkg/bitcoin/mar/language-server/rpc/request.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/request.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/language-server/rpc/response.hoon b/pkg/bitcoin/mar/language-server/rpc/response.hoon deleted file mode 120000 index 9dddb2cef..000000000 --- a/pkg/bitcoin/mar/language-server/rpc/response.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/response.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/path.hoon b/pkg/bitcoin/mar/path.hoon deleted file mode 120000 index c07b00064..000000000 --- a/pkg/bitcoin/mar/path.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/path.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/png.hoon b/pkg/bitcoin/mar/png.hoon deleted file mode 120000 index c2d8cf9fa..000000000 --- a/pkg/bitcoin/mar/png.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/png.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/purl.hoon b/pkg/bitcoin/mar/purl.hoon deleted file mode 120000 index d0d2cc0de..000000000 --- a/pkg/bitcoin/mar/purl.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/purl.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/sole/action.hoon b/pkg/bitcoin/mar/sole/action.hoon deleted file mode 120000 index b349bd771..000000000 --- a/pkg/bitcoin/mar/sole/action.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/mar/sole/action.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/sole/effect.hoon b/pkg/bitcoin/mar/sole/effect.hoon deleted file mode 120000 index bc11205c0..000000000 --- a/pkg/bitcoin/mar/sole/effect.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/mar/sole/effect.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/svg.hoon b/pkg/bitcoin/mar/svg.hoon deleted file mode 120000 index 2b406c2ac..000000000 --- a/pkg/bitcoin/mar/svg.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/svg.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/tang.hoon b/pkg/bitcoin/mar/tang.hoon deleted file mode 120000 index 9206e52b2..000000000 --- a/pkg/bitcoin/mar/tang.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/tang.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/tape.hoon b/pkg/bitcoin/mar/tape.hoon deleted file mode 120000 index be51fcb2d..000000000 --- a/pkg/bitcoin/mar/tape.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/tape.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/udon.hoon b/pkg/bitcoin/mar/udon.hoon deleted file mode 120000 index 215e0ada9..000000000 --- a/pkg/bitcoin/mar/udon.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/udon.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/umd.hoon b/pkg/bitcoin/mar/umd.hoon deleted file mode 120000 index 9b827a24d..000000000 --- a/pkg/bitcoin/mar/umd.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/umd.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/urb.hoon b/pkg/bitcoin/mar/urb.hoon deleted file mode 120000 index 2d8112d1d..000000000 --- a/pkg/bitcoin/mar/urb.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/urb.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/urbit.hoon b/pkg/bitcoin/mar/urbit.hoon deleted file mode 120000 index 70a62a723..000000000 --- a/pkg/bitcoin/mar/urbit.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/urbit.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/woff2.hoon b/pkg/bitcoin/mar/woff2.hoon deleted file mode 120000 index beaf4875c..000000000 --- a/pkg/bitcoin/mar/woff2.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/woff2.hoon \ No newline at end of file diff --git a/pkg/bitcoin/mar/xml.hoon b/pkg/bitcoin/mar/xml.hoon deleted file mode 120000 index e6323e215..000000000 --- a/pkg/bitcoin/mar/xml.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/xml.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/aquarium.hoon b/pkg/bitcoin/sur/aquarium.hoon deleted file mode 120000 index 1195b2c62..000000000 --- a/pkg/bitcoin/sur/aquarium.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/aquarium.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/asn1.hoon b/pkg/bitcoin/sur/asn1.hoon deleted file mode 120000 index 7888cada0..000000000 --- a/pkg/bitcoin/sur/asn1.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/asn1.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/bitcoin.hoon b/pkg/bitcoin/sur/bitcoin.hoon deleted file mode 120000 index d72c2c830..000000000 --- a/pkg/bitcoin/sur/bitcoin.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/bitcoin.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/btc-provider.hoon b/pkg/bitcoin/sur/btc-provider.hoon deleted file mode 100644 index 8f942dc6c..000000000 --- a/pkg/bitcoin/sur/btc-provider.hoon +++ /dev/null @@ -1,81 +0,0 @@ -/- *bitcoin, resource -|% -+$ host-info - $: api-url=@t - connected=? - =network - block=@ud - clients=(set ship) - == -+$ whitelist - $: public=? - kids=? - users=(set ship) - groups=(set resource:resource) - == -:: -+$ whitelist-target - $% [%public ~] - [%kids ~] - [%users users=(set ship)] - [%groups groups=(set resource:resource)] - == -+$ command - $% [%set-credentials api-url=@t =network] - [%add-whitelist wt=whitelist-target] - [%remove-whitelist wt=whitelist-target] - [%set-interval inte=@dr] - == -+$ action - $% [%address-info =address] - [%tx-info txid=hexb] - [%raw-tx txid=hexb] - [%broadcast-tx rawtx=hexb] - [%ping ~] - [%block-info block=(unit @ud)] - == -:: -+$ result - $% [%address-info =address utxos=(set utxo) used=? block=@ud] - [%tx-info =info:tx] - [%raw-tx txid=hexb rawtx=hexb] - [%broadcast-tx txid=hexb broadcast=? included=?] - [%block-info =network block=@ud fee=(unit sats) blockhash=hexb blockfilter=hexb] - == -+$ error - $% [%not-connected status=@ud] - [%bad-request status=@ud] - [%no-auth status=@ud] - [%rpc-error ~] - == -+$ update (each result error) -+$ status - $% [%connected =network block=@ud fee=(unit sats)] - [%new-block =network block=@ud fee=(unit sats) blockhash=hexb blockfilter=hexb] - [%disconnected ~] - == -:: -++ rpc-types - |% - +$ action - $% [%get-address-info =address] - [%get-tx-vals txid=hexb] - [%get-raw-tx txid=hexb] - [%broadcast-tx rawtx=hexb] - [%get-block-count ~] - [%get-block-info block=(unit @ud)] - == - :: - +$ result - $% [%get-address-info =address utxos=(set utxo) used=? block=@ud] - [%get-tx-vals =info:tx] - [%get-raw-tx txid=hexb rawtx=hexb] - [%create-raw-tx rawtx=hexb] - [%broadcast-tx txid=hexb broadcast=? included=?] - [%get-block-count block=@ud] - [%get-block-info block=@ud fee=(unit sats) blockhash=hexb blockfilter=hexb] - - == - -- --- -:: diff --git a/pkg/bitcoin/sur/btc-wallet.hoon b/pkg/bitcoin/sur/btc-wallet.hoon deleted file mode 100644 index 790aec3cd..000000000 --- a/pkg/bitcoin/sur/btc-wallet.hoon +++ /dev/null @@ -1,171 +0,0 @@ -/- *bitcoin, bp=btc-provider -/+ bip32 -|% -+$ params [batch-size=@ud fam-limit=@ud piym-limit=@ud] -+$ provider [host=ship connected=?] -+$ block @ud -+$ btc-state [=block fee=(unit sats) t=@da] -+$ payment [pend=(unit txid) =xpub =address payer=ship value=sats note=(unit @t)] -+$ piym - $: ps=(map ship payment) - pend=(map txid payment) - num-fam=(map ship @ud) - == -+$ poym [txbu=(unit txbu) note=(unit @t)] -:: -:: command: run from the CLI or as API calls by our ship -:: -+$ command - $% [%set-provider provider=(unit ship)] - [%check-provider provider=ship] - [%check-payee payee=ship] - [%set-current-wallet =xpub] - [%add-wallet =xpub =fprint scan-to=(unit scon) max-gap=(unit @ud) confs=(unit @ud)] - [%delete-wallet =xpub] - [%init-payment-external =address value=sats feyb=sats note=(unit @t)] - [%init-payment payee=ship value=sats feyb=sats note=(unit @t)] - [%broadcast-tx txhex=cord] - [%gen-new-address ~] - == -:: action: how peers poke us -:: -+$ action - $% [%gen-pay-address value=sats note=(unit @t)] - [%give-pay-address =address value=sats] - [%expect-payment =txid value=sats] - == -:: internal: actions that simply make the state machine more explicit -:: -+$ internal - $% [%add-poym-raw-txi =txid rawtx=hexb] - [%close-pym ti=info:tx] - [%fail-broadcast-tx =txid] - [%succeed-broadcast-tx =txid] - == -:: -:: Wallet Types -:: -:: nixt: next indices to generate addresses from (non-change/change) -:: addi: HD path along with UTXOs -:: wach: map for watched addresses. -:: Membership implies the address is known by outside parties or had prior activity -:: scon: indices to initially scan to in (non-)change accounts -:: defaults to 2^32-1 (i.e. all the addresses, ~4B) -:: wilt: copulates with thousands of indices to form addresses -:: -++ max-index (dec (pow 2 32)) -+$ nixt (pair idx idx) -+$ addi [used=? =chyg =idx utxos=(set utxo)] -+$ wach (map address addi) -+$ scon $~([max-index max-index] (pair idx idx)) -+$ wilt _bip32 -+$ wamp [prv=@ pub=[x=@ y=@] cad=@ dep=@ud ind=@ud pif=@] -:: -:: walt: wallet datastructure -:: scanned: whether the wallet's addresses have been checked for prior activity -:: scan-to -:: max-gap: maximum number of consec blank addresses before wallet stops scanning -:: confs: confirmations required (after this is hit for an address, wallet stops refreshing it) -:: -+$ walt-0 - $: =xpub - =network - =fprint - =wilt - =bipt - =wach - =nixt - scanned=? - scan-to=scon - max-gap=@ud - confs=@ud - == -:: -+$ walt - $: =xpub - =network - =fprint - =wamp - =bipt - =wach - =nixt - scanned=? - scan-to=scon - max-gap=@ud - confs=@ud - == -:: batch: indexes to scan for a given chyg -:: scans: all scans underway (batches) -:: -+$ batch [todo=(set idx) endpoint=idx has-used=?] -+$ scans (map [xpub chyg] batch) -:: -:: insel: a selected utxo for input to a transaction -:: pmet: optional payment metadata -:: feyb: fee per byte in sats -:: txi/txo: input/output for a transaction being built -:: - txo has an hdkey if it's a change account -:: - by convention, first output of txo is to the payee, if one is present -:: txbu: tx builder -- all information needed to make a transaction for signing -:: -+$ insel [=utxo =chyg =idx] -+$ feyb sats -+$ txi [=utxo rawtx=(unit hexb) =hdkey] -+$ txo [=address value=sats hk=(unit hdkey)] -+$ txbu - $: =xpub - payee=(unit ship) - =vbytes - txis=(list txi) - txos=(list txo) - signed-tx=(unit hexb) - == -:: hest: an entry in the history log -:: -+$ hest - $: =xpub - =txid - confs=@ud - recvd=(unit @da) - inputs=(list [=val:tx s=(unit ship)]) - outputs=(list [=val:tx s=(unit ship)]) - note=(unit @t) - == -+$ history (map txid hest) -:: -+$ error - $? %cant-pay-ourselves - %no-comets - %no-dust - %tx-being-signed - %insufficient-balance - %broadcast-fail - == -:: data to send to the frontend -:: -+$ update - $% $: %initial - provider=(unit provider) - wallet=(unit xpub) - balance=(unit [confirmed=sats unconfirmed=sats]) - =history - =btc-state - address=(unit address) - == - [%broadcast-success ~] - [%change-provider provider=(unit provider)] - [%change-wallet wallet=(unit xpub) balance=(unit [p=sats q=sats]) =history] - [%psbt pb=@t fee=sats] - [%btc-state =btc-state] - [%new-tx =hest] - [%cancel-tx =txid] - [%new-address =address] - [%balance balance=(unit [confirmed=sats unconfirmed=sats])] - [%error =error] - :: current index being scanned in each wallet part - :: ~ if scan of that part is done - :: - [%scan-progress main=(unit idx) change=(unit idx)] - == -:: --- diff --git a/pkg/bitcoin/sur/docket.hoon b/pkg/bitcoin/sur/docket.hoon deleted file mode 120000 index e13676adb..000000000 --- a/pkg/bitcoin/sur/docket.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/docket.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/group-store.hoon b/pkg/bitcoin/sur/group-store.hoon deleted file mode 100644 index 5a3931f95..000000000 --- a/pkg/bitcoin/sur/group-store.hoon +++ /dev/null @@ -1,39 +0,0 @@ -/- *group, *resource -^? -|% -:: -:: $action: request to change group-store state -:: -:: %add-group: add a group -:: %add-members: add members to a group -:: %remove-members: remove members from a group -:: %add-tag: add a tag to a set of ships -:: %remove-tag: remove a tag from a set of ships -:: %change-policy: change a group's policy -:: %remove-group: remove a group from the store -:: %expose: unset .hidden flag -:: -+$ action - $% [%add-group =resource =policy hidden=?] - [%add-members =resource ships=(set ship)] - [%remove-members =resource ships=(set ship)] - [%add-tag =resource =tag ships=(set ship)] - [%remove-tag =resource =tag ships=(set ship)] - [%change-policy =resource =diff:policy] - [%remove-group =resource ~] - [%expose =resource ~] - == -:: $update: a description of a processed state change -:: -:: %initial: describe groups upon new subscription -:: -+$ update - $% initial - action - == -+$ initial - $% [%initial-group =resource =group] - [%initial =groups] - == --- - diff --git a/pkg/bitcoin/sur/group.hoon b/pkg/bitcoin/sur/group.hoon deleted file mode 100644 index c5806493d..000000000 --- a/pkg/bitcoin/sur/group.hoon +++ /dev/null @@ -1,109 +0,0 @@ -/- *resource -:: -^? -|% -:: -++ groups-state-one - |% - +$ groups (map resource group) - :: - +$ tag $@(group-tag [app=term tag=term]) - :: - +$ tags (jug tag ship) - :: - +$ group - $: members=(set ship) - =tags - =policy - hidden=? - == - -- -:: $groups: a mapping from group-ids to groups -:: -+$ groups (map resource group) -:: $group-tag: an identifier used by groups -:: -:: These tags should have precise semantics, as they are shared across all -:: apps. -:: -+$ group-tag ?(role-tag) -:: $tag: an identifier used to identify a subset of members -:: -:: Tags may be used and recognised differently across apps. -:: for example, you could use tags like `%author`, `%bot`, `%flagged`... -:: -+$ tag $@(group-tag [app=term =resource tag=term]) -:: $role-tag: a kind of $group-tag that identifies a privileged user -:: -:: These roles are -:: %admin: Administrator, can do everything except delete the group -:: %moderator: Moderator, can add/remove/ban users -:: %janitor: Has no special meaning inside group-store, -:: but may be given additional privileges in other apps. -:: -+$ role-tag - ?(%admin %moderator %janitor) -:: $tags: a mapping from a $tag to the members it identifies -:: -+$ tags (jug tag ship) -:: $group: description of a group of users -:: -:: .members: members of the group -:: .tag-queries: a map of tags to subsets of members -:: .policy: permissions for the group -:: .hidden: is group unmanaged -+$ group - $: members=(set ship) - =tags - =policy - hidden=? - == -:: $policy: access control for a group -:: -++ policy - =< policy - |% - :: - +$ policy - $% invite - open - == - :: $diff: change group policy - +$ diff - $% [%invite diff:invite] - [%open diff:open] - [%replace =policy] - == - :: $invite: allow only invited ships - ++ invite - =< invite-policy - |% - :: - +$ invite-policy - [%invite pending=(set ship)] - :: $diff: add or remove invites - :: - +$ diff - $% [%add-invites invitees=(set ship)] - [%remove-invites invitees=(set ship)] - == - -- - :: $open: allow all unbanned ships of approriate rank - :: - ++ open - =< open-policy - |% - :: - +$ open-policy - [%open ban-ranks=(set rank:title) banned=(set ship)] - :: $diff: ban or allow ranks and ships - :: - +$ diff - $% [%allow-ranks ranks=(set rank:title)] - [%ban-ranks ranks=(set rank:title)] - [%ban-ships ships=(set ship)] - [%allow-ships ships=(set ship)] - == - -- - -- --- diff --git a/pkg/bitcoin/sur/hark-store.hoon b/pkg/bitcoin/sur/hark-store.hoon deleted file mode 120000 index 5d606e793..000000000 --- a/pkg/bitcoin/sur/hark-store.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/hark-store.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/hood.hoon b/pkg/bitcoin/sur/hood.hoon deleted file mode 120000 index b212f501e..000000000 --- a/pkg/bitcoin/sur/hood.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/hood.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/json/rpc.hoon b/pkg/bitcoin/sur/json/rpc.hoon deleted file mode 120000 index e499542f6..000000000 --- a/pkg/bitcoin/sur/json/rpc.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/sur/json/rpc.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/keygen.hoon b/pkg/bitcoin/sur/keygen.hoon deleted file mode 120000 index 99bcd5fc8..000000000 --- a/pkg/bitcoin/sur/keygen.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/keygen.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/resource.hoon b/pkg/bitcoin/sur/resource.hoon deleted file mode 100644 index fef7a7b35..000000000 --- a/pkg/bitcoin/sur/resource.hoon +++ /dev/null @@ -1,10 +0,0 @@ -^? -|% -+$ resource [=entity name=term] -+$ resources (set resource) -:: -+$ entity - $@ ship - $% !! - == --- diff --git a/pkg/bitcoin/sur/ring.hoon b/pkg/bitcoin/sur/ring.hoon deleted file mode 120000 index 633c96332..000000000 --- a/pkg/bitcoin/sur/ring.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/ring.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/settings.hoon b/pkg/bitcoin/sur/settings.hoon deleted file mode 120000 index c2c70beef..000000000 --- a/pkg/bitcoin/sur/settings.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/settings.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sur/spider.hoon b/pkg/bitcoin/sur/spider.hoon deleted file mode 120000 index 12ae2c187..000000000 --- a/pkg/bitcoin/sur/spider.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/spider.hoon \ No newline at end of file diff --git a/pkg/bitcoin/sys.kelvin b/pkg/bitcoin/sys.kelvin deleted file mode 100644 index e77a3de08..000000000 --- a/pkg/bitcoin/sys.kelvin +++ /dev/null @@ -1 +0,0 @@ -[%zuse 418] diff --git a/pkg/bitcoin/ted/btc-rpc.hoon b/pkg/bitcoin/ted/btc-rpc.hoon deleted file mode 100644 index b11f0c4a0..000000000 --- a/pkg/bitcoin/ted/btc-rpc.hoon +++ /dev/null @@ -1,95 +0,0 @@ -:: Note: these are for BTC testnet -:: -/- spider, rpc=json-rpc -/+ strandio, bc=bitcoin, bcu=bitcoin-utils -=, strand=strand:spider -=> -|% -++ url1 "http://localhost:50002" -++ addr ^-(address:bc [%bech32 'bc1q39wus23jwe7m2j7xmrfr2svhrtejmsn262x3j2']) -++ btc-req - ^- request:http - =, enjs:format - :* method=%'POST' - url=`@ta`(crip (weld url1 "/btc-rpc")) - header-list=['Content-Type'^'application/json' ~] - ^= body - %- some - %- as-octt:mimes:html - %- en-json:html - %- pairs - :~ jsonrpc+s+'2.0' - id+s+'block-info' - method+s+'getblockchaininfo' - == - == -++ electrs-req - ^- request:http - =, enjs:format - :* method=%'POST' - url=`@ta`(crip (weld url1 "/electrs-rpc")) - header-list=['Content-Type'^'application/json' ~] - ^= body - %- some - %- as-octt:mimes:html - %- en-json:html - %- pairs - :~ jsonrpc+s+'2.0' - id+s+'list-unspent' - method+s+'blockchain.scripthash.listunspent' - params+a+~[[%s '34aae877286aa09828803af27ce2315e72c4888efdf74d7d067c975b7c558789']] - == - == -:: -:: convert address to Electrs ScriptHash that it uses to index -:: big-endian sha256 of the output script -:: -++ electrs-script-hash - |= a=address:bc - ^- hexb:bc - %- flip:byt:bcu - %- sha256:bcu - (to-script-pubkey:adr:bc a) -:: -++ parse-json-rpc - |= =json - ^- (unit response:rpc) - =/ res=(unit [@t ^json]) - %. json - =, dejs-soft:format - (ot id+so result+some ~) - ?^ res `[%result u.res] - ~| parse-one-response=json - :+ ~ %error %- need - %. json - =, dejs-soft:format - (ot id+so error+(ot code+no message+so ~) ~) -:: -++ parse-response - |= =client-response:iris - =/ m (strand:strandio ,(unit response:rpc)) - ^- form:m - ?> ?=(%finished -.client-response) - ?~ full-file.client-response - (pure:m ~) - =/ body=@t q.data.u.full-file.client-response - =/ jon=(unit json) (de-json:html body) - ?~ jon (pure:m ~) - (pure:m (parse-json-rpc u.jon)) -:: -++ attempt-request - |= =request:http - =/ m (strand:strandio ,~) - ^- form:m - (send-request:strandio request) --- -^- thread:spider -|= arg=vase -:: =+ !<([~ a=@ud] arg) -=/ m (strand ,vase) -^- form:m -;< ~ bind:m (attempt-request electrs-req) -;< rep=client-response:iris bind:m - take-client-response:strandio -;< rpc-resp=(unit response:rpc) bind:m (parse-response rep) -(pure:m !>(rpc-resp)) diff --git a/pkg/bitcoin/tests/lib/bip/b158.hoon b/pkg/bitcoin/tests/lib/bip/b158.hoon deleted file mode 100644 index ed8cdfce3..000000000 --- a/pkg/bitcoin/tests/lib/bip/b158.hoon +++ /dev/null @@ -1,161 +0,0 @@ -/+ *test, *bip-b158, *bitcoin-utils -|% -+$ filter-vector - $: filter=hexb - expect=[parse=[n=@ux gcs-set=bits] decode=[delta=@ rest=bits]] -== -+$ siphash-vector - $: blockhash=tape - filter=hexb - item=hexb - expect=@ - == -+$ match-vector - $: blockhash=tape - filter=hexb - inc-spks=(list hexb) - exc-spks=(list hexb) - expect=(list @) - == -:: -++ filter-vectors - ^- (list filter-vector) - :~ - :: testnet genesis block - :: - :* 4^0x19d.fca8 - :* 0x1 - 24^0b1001.1101.1111.1100.1010.1000 - == - [769.941 [3 0b0]] - == - :: testnet block 926485 - :: - :* 25^0x9.027a.cea6.1b6c.c3fb.33f5.d52f.7d08.8a6b.2f75.d234.e89c.a800 - :* 0x9 - 192^0b10.0111.1010.1100.1110.1010.0110.0001.1011.0110.1100.1100.0011.1111.1011.0011.0011.1111.0101.1101.0101.0010.1111.0111.1101.0000.1000.1000.1010.0110.1011.0010.1111.0111.0101.1101.0010.0011.0100.1110.1000.1001.1100.1010.1000.0000.0000 - == - [10.156 172^0b1110.1010.0110.0001.1011.0110.1100.1100.0011.1111.1011.0011.0011.1111.0101.1101.0101.0010.1111.0111.1101.0000.1000.1000.1010.0110.1011.0010.1111.0111.0101.1101.0010.0011.0100.1110.1000.1001.1100.1010.1000.0000.0000] - == - :: 3 vectors with large Ns (i.e. CompactSize starting with 0xfd/fe/ff) - :: - :* 6^0xfd88.279d.fca8 - :* 0x2788 - 24^0b1001.1101.1111.1100.1010.1000 - == - [769.941 [3 0b0]] - == - :: - :* 8^0xfe11.2233.449d.fca8 - :* 0x4433.2211 - 24^0b1001.1101.1111.1100.1010.1000 - == - [769.941 [3 0b0]] - == - :: - :* 12^0xff11.2233.4455.6677.889d.fca8 - :* 0x8877.6655.4433.2211 - 24^0b1001.1101.1111.1100.1010.1000 - == - [769.941 [3 0b0]] - == - == -:: -++ siphash-vectors - ^- (list siphash-vector) - :: testnet genesis block - :~ :* "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943" - 4^0x19d.fca8 - 67^0x41.0467.8afd.b0fe.5548.2719.67f1.a671.30b7.105c.d6a8.28e0.3909.a679.62e0.ea1f.61de.b649.f6bc.3f4c.ef38.c4f3.5504.e51e.c112.de5c.384d.f7ba.0b8d.578a.4c70.2b6b.f11d.5fac - 769.941 - == - == -:: -++ match-vectors - ^- (list match-vector) - :: testnet genesis block - :~ :* "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943" - 4^0x19d.fca8 - ~[67^0x41.0467.8afd.b0fe.5548.2719.67f1.a671.30b7.105c.d6a8.28e0.3909.a679.62e0.ea1f.61de.b649.f6bc.3f4c.ef38.c4f3.5504.e51e.c112.de5c.384d.f7ba.0b8d.578a.4c70.2b6b.f11d.5fac] - ~[25^0x76.a914.3ebc.40e4.11ed.3c76.f867.1150.7ab9.5230.0890.3972.88ac] - ~[271.501 769.941] - == - :: testnet block 926485 - :: - :* "000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313" - 25^0x9.027a.cea6.1b6c.c3fb.33f5.d52f.7d08.8a6b.2f75.d234.e89c.a800 - :~ 25^0x76.a914.3ebc.40e4.11ed.3c76.f867.1150.7ab9.5230.0890.3972.88ac - 25^0x76.a914.5033.3046.115e.aa0a.c9e0.2165.65f9.4507.0e44.5739.88ac - == - :~ 21^0x14.7e69.a44c.1a94.2139.c8ab.4127.8325.5e1e.46d0.f0da - == - ~[176.536 2.341.508 3.078.625] - == - == -:: -++ test-all-vectors - =/ [p=@ m=@] [p:params m:params] - ^- tang - |^ ;: weld - %+ category "parse filters" - (zing (turn filter-vectors check-filter-parse)) - %+ category "decode GCS" - (zing (turn filter-vectors check-gcs-decode)) - %+ category "siphash" - (zing (turn siphash-vectors check-siphash)) - %+ category "hash script-pubkeys" - (zing (turn match-vectors check-hashing)) - %+ category "whether filter matches any script-pubkey" - (zing (turn match-vectors check-match)) - %+ category "get all script-pubkey matches for a block filter" - (zing (turn match-vectors check-all-match)) - == - :: - ++ check-filter-parse - |= v=filter-vector - %+ expect-eq - !>(parse.expect.v) - !>((parse-filter filter.v)) - :: - ++ check-gcs-decode - |= v=filter-vector - %+ expect-eq - !>(decode.expect.v) - !>((de:gol gcs-set:(parse-filter filter.v) p)) - :: - ++ check-siphash - |= v=siphash-vector - =+ f=(mul n:(parse-filter filter.v) m) - %+ expect-eq - !>(expect.v) - !>((to-range:hsh item.v f (to-key blockhash.v))) - :: - ++ check-hashing - |= v=match-vector - =/ [n=@ux gcs-set=bits] (parse-filter filter.v) - =+ k=(to-key blockhash.v) - %+ expect-eq - !>(expect.v) - !>((set-construct:hsh (weld inc-spks.v exc-spks.v) k (mul n m))) - :: - ++ check-match - |= v=match-vector - =+ k=(to-key blockhash.v) - %+ weld - %+ expect-eq - !>(%.y) - !>((match filter.v k inc-spks.v)) - %+ expect-eq - !>(%.n) - !>((match filter.v k exc-spks.v)) - :: - ++ check-all-match - |= v=match-vector - =/ b=hexb (from-cord:hxb (crip blockhash.v)) - =/ inc=(list [address hexb]) (turn inc-spks.v |=(h=hexb [*address h])) - =/ exc=(list [address hexb]) (turn exc-spks.v |=(h=hexb [*address h])) - %+ expect-eq - !>(`(set [address hexb])`(sy inc)) - !>(`(set [address hexb])`(all-match filter.v b (weld inc exc))) - -- --- diff --git a/pkg/bitcoin/tests/lib/bip/b174.hoon b/pkg/bitcoin/tests/lib/bip/b174.hoon deleted file mode 100644 index 50be45d95..000000000 --- a/pkg/bitcoin/tests/lib/bip/b174.hoon +++ /dev/null @@ -1,49 +0,0 @@ -/- *bitcoin -/+ *test, *bip-b158, bcu=bitcoin-utils, pbt=bip-b174 -|% -+$ psbt-vector - $: =hdkey - hdkey-hex=hexb - == -++ fprint 4^0xdead.beef -++ psbt-vectors - ^- (list psbt-vector) - :~ :* [fprint 33^0x1 %testnet %44 %0 1] - 20^0x2c00.0080.0100.0080.0000.0080.0000.0000.0100.0000 - == - :: - :* [fprint 33^0x1 %testnet %49 %0 1] - 20^0x3100.0080.0100.0080.0000.0080.0000.0000.0100.0000 - == - :: - :* [fprint 33^0x1 %testnet %84 %0 1] - 20^0x5400.0080.0100.0080.0000.0080.0000.0000.0100.0000 - == - :: - :* [fprint 33^0x1 %main %44 %0 1] - 20^0x2c00.0080.0000.0080.0000.0080.0000.0000.0100.0000 - == - :: - :* [fprint 33^0x1 %main %49 %0 1] - 20^0x3100.0080.0000.0080.0000.0080.0000.0000.0100.0000 - == - :: - :* [fprint 33^0x1 %main %84 %0 1] - 20^0x5400.0080.0000.0080.0000.0080.0000.0000.0100.0000 - == - == -++ test-all-vectors -^- tang - |^ ;: weld - %+ category "check PSBT" - (zing (turn psbt-vectors check-psbt)) - == - ++ check-psbt - |= v=psbt-vector - =/ key=hexb - (cat:byt:bcu ~[1^0x6 pubkey.hdkey.v]) :: %input target - %+ expect-eq - !>([key (cat:byt:bcu ~[fprint.hdkey.v hdkey-hex.v])]) - !>((hdkey:en:pbt %input hdkey.v)) - -- --- diff --git a/pkg/bitcoin/tests/lib/bip32.hoon b/pkg/bitcoin/tests/lib/bip32.hoon deleted file mode 100644 index 9ffd91245..000000000 --- a/pkg/bitcoin/tests/lib/bip32.hoon +++ /dev/null @@ -1,484 +0,0 @@ -:: tests for the bip32 lib -:: -:: Test vectors from: -:: https://en.bitcoin.it/wiki/BIP_0032_TestVectors -:: -/+ *test, bip32 -=, bip32 -:: -|% -+$ vector - $: mk=byts - pf=@ux - dp=tape - ad=@uc - id=@ux - sk=@ux - pk=@ux - cc=@ux - xpub=tape - xprv=tape - == -:: -++ test-vectors - ^- tang - |^ ;: weld - %+ category "identity" - (zing (turn vectors check-id)) - %+ category "public-key" - (zing (turn vectors check-pk)) - %+ category "private-key" - (zing (turn vectors check-sk)) - %+ category "chaincode" - (zing (turn vectors check-cc)) - %+ category "fingerprint" - (zing (turn vectors check-pf)) - %+ category "address-from-xprv" - (zing (check-addr-xprv vectors)) - %+ category "address-from-xpub" - (zing (check-addr-xpub vectors)) - %+ category "extended-private" - (zing (turn vectors check-xprv)) - %+ category "extended-public" - (zing (turn vectors check-xpub)) - == - :: - ++ check-id - |= vector - =/ identity=@ux - =< identity - ?: =("m" dp) - (from-seed mk) - (derive-path:(from-seed mk) dp) - %+ expect-eq - !> id - !> identity - :: - ++ check-pk - |= vector - =/ public-key=@ux - =< public-key - ?: =("m" dp) - (from-seed mk) - (derive-path:(from-seed mk) dp) - %+ expect-eq - !> pk - !> public-key - :: - ++ check-sk - |= vector - =/ private-key=@ux - =< private-key - ?: =("m" dp) - (from-seed mk) - (derive-path:(from-seed mk) dp) - %+ expect-eq - !> sk - !> private-key - :: - ++ check-cc - |= vector - =/ chain-code=@ux - =< chain-code - ?: =("m" dp) - (from-seed mk) - (derive-path:(from-seed mk) dp) - %+ expect-eq - !> cc - !> chain-code - :: - ++ check-pf - |= vector - =/ parent-fingerprint=@ux - =< fingerprint - ?: =("m" dp) - (from-seed mk) - (derive-path:(from-seed mk) dp) - %+ expect-eq - !> pf - !> parent-fingerprint - :: - ++ check-addr-xprv - |= vectors=(list vector) - ?> ?=(^ vectors) - =/ base=vector i.vectors - =/ tests=(list vector) t.vectors - |- ^- (list tang) - ?~ tests ~ - =* deriv i.tests - :_ %_ $ - tests t.tests - base ?:(=(dp.deriv "m") deriv base) - == - :: force success before starting second round of vectors - :: - ?: =(dp.deriv "m") *tang - =/ address=@uc - =< (address %main) - (derive-path:(from-extended xprv.base) dp.deriv) - %+ expect-eq - !> ad.deriv - !> address - :: - ++ check-addr-xpub - |= vectors=(list vector) - :: we can only derive non-hardened keys from an xpub key - :: e.g. from m/0'/1/2' to m/0'/1/2'/2/1000000000 - :: - ?> ?=([^ ^ ^ ^ *] vectors) - =/ base=vector i.t.t.t.vectors - =/ tests=(list vector) t.t.t.t.vectors - |- ^- (list tang) - ?~ tests ~ - =* deriv i.tests - :_ :: Second list of vectors has hardened paths. we skip those. - :: - $(tests ?:(=(dp.deriv "m") ~ t.tests), base base) - ?: =(dp.deriv "m") *tang - :: strips the hardened part of the path (at index=9) - :: m/0'/1/2'/2 - :: --------^ - :: - =. dp.deriv ['m' q:(trim 9 dp.deriv)] - =/ address=@uc - =< (address %main) - (derive-path:(from-extended xpub.base) dp.deriv) - %+ expect-eq - !> ad.deriv - !> address - :: - ++ check-xprv - |= vector - =/ extended-xprv=tape - =< (prv-extended %main) - ?: =("m" dp) - (from-seed mk) - (derive-path:(from-seed mk) dp) - %+ expect-eq - !> xprv - !> extended-xprv - :: - ++ check-xpub - |= vector - =/ extended-pub=tape - =< (pub-extended %main) - ?: =("m" dp) - (from-seed mk) - (derive-path:(from-seed mk) dp) - %+ expect-eq - !> xpub - !> extended-pub - :: - ++ vectors - ^- (list vector) - :~ :* 16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f - 0x3442.193e - "m" - 0c15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma - 0x3442.193e.1bb7.0916.e914.5521.72cd.4e2d.bc9d.f811 - :: - 0xe8f3.2e72.3dec.f405.1aef.ac8e.2c93.c9c5. - b214.3138.17cd.b01a.1494.b917.c843.6b35 - :: - 0x3.39a3.6013.3015.97da.ef41.fbe5.93a0.2cc5. - 13d0.b555.27ec.2df1.050e.2e8f.f49c.85c2 - :: - 0x873d.ff81.c02f.5256.23fd.1fe5.167e.ac3a. - 55a0.49de.3d31.4bb4.2ee2.27ff.ed37.d508 - :: - %+ weld - "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2g" - "Z29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8" - :: - %+ weld - "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiC" - "hkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi" - == - :: - :* 16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f - 0x5c1b.d648 - "m/0'" - 0c19Q2WoS5hSS6T8GjhK8KZLMgmWaq4neXrh - 0x5c1b.d648.ed23.aa5f.d50b.a52b.2457.c11e.9e80.a6a7 - :: - 0xedb2.e14f.9ee7.7d26.dd93.b4ec.ede8.d16e. - d408.ce14.9b6c.d80b.0715.a2d9.11a0.afea - :: - 0x3.5a78.4662.a4a2.0a65.bf6a.ab9a.e98a.6c06. - 8a81.c52e.4b03.2c0f.b540.0c70.6cfc.cc56 - :: - 0x47fd.acbd.0f10.9704.3b78.c63c.20c3.4ef4. - ed9a.111d.9800.47ad.1628.2c7a.e623.6141 - :: - %+ weld - "xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6" - "LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw" - :: - %+ weld - "xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4c" - "V1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7" - == - :: - :* 16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f - 0xbef5.a2f9 - "m/0'/1" - 0c1JQheacLPdM5ySCkrZkV66G2ApAXe1mqLj - 0xbef5.a2f9.a56a.94aa.b124.59f7.2ad9.cf8c.f19c.7bbe - :: - 0x3c6c.b8d0.f6a2.64c9.1ea8.b503.0fad.aa8e. - 538b.020f.0a38.7421.a12d.e931.9dc9.3368 - :: - 0x3.501e.454b.f007.51f2.4b1b.489a.a925.215d. - 66af.2234.e389.1c3b.21a5.2bed.b3cd.711c - :: - 0x2a78.5763.1386.ba23.daca.c341.80dd.1983. - 734e.444f.dbf7.7404.1578.e9b6.adb3.7c19 - :: - %+ weld - "xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKk" - "NAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ" - :: - %+ weld - "xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu5" - "3Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs" - == - :: - :* 16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f - 0xee7a.b90c - "m/0'/1/2'" - 0c1NjxqbA9aZWnh17q1UW3rB4EPu79wDXj7x - 0xee7a.b90c.de56.a8c0.e2bb.086a.c497.48b8.db9d.ce72 - :: - 0xcbce.0d71.9ecf.7431.d88e.6a89.fa14.83e0. - 2e35.092a.f60c.042b.1df2.ff59.fa42.4dca - :: - 0x3.57bf.e1e3.41d0.1c69.fe56.5430.9956.cbea. - 5168.22fb.a8a6.0174.3a01.2a78.96ee.8dc2 - :: - 0x446.6b9c.c8e1.61e9.6640.9ca5.2986.c584.f07e. - 9dc8.1f73.5db6.83c3.ff6e.c7b1.503f - :: - %+ weld - "xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPM" - "M3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5" - :: - %+ weld - "xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7F" - "wuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM" - == - :: - :* 16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f - 0xd880.d7d8 - "m/0'/1/2'/2" - 0c1LjmJcdPnDHhNTUgrWyhLGnRDKxQjoxAgt - 0xd880.d7d8.9384.8509.a62d.8fb7.4e32.148d.ac68.412f - :: - 0xf47.9245.fb19.a38a.1954.c5c7.c0eb.ab2f. - 9bdf.d96a.1756.3ef2.8a6a.4b1a.2a76.4ef4 - :: - 0x2.e844.5082.a72f.29b7.5ca4.8748.a914.df60. - 622a.609c.acfc.e8ed.0e35.8045.6074.1d29 - :: - 0xcfb7.1883.f016.76f5.87d0.23cc.53a3.5bc7. - f88f.724b.1f8c.2892.ac12.75ac.822a.3edd - :: - %+ weld - "xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiL" - "jTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV" - :: - %+ weld - "xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8Rf" - "QMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334" - == - :: - :* 16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f - 0xd69a.a102 - "m/0'/1/2'/2/1000000000" - 0c1LZiqrop2HGR4qrH1ULZPyBpU6AUP49Uam - 0xd69a.a102.255f.ed74.3782.78c7.8127.01ea.641f.df32 - :: - 0x471b.76e3.89e5.28d6.de6d.8168.57e0.12c5. - 4550.51ca.d666.0850.e583.72a6.c3e6.e7c8 - :: - 0x2.2a47.1424.da5e.6574.99d1.ff51.cb43.c474. - 81a0.3b1e.77f9.51fe.64ce.c9f5.a48f.7011 - :: - 0xc783.e67b.921d.2beb.8f6b.389c.c646.d726. - 3b41.4570.1dad.d216.1548.a8b0.78e6.5e9e - :: - %+ weld - "xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYF" - "gJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy" - :: - %+ weld - "xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHS" - "cGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76" - == - :: - :* 64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2. - cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2.9f9c.9996.9390.8d8a. - 8784.817e.7b78.7572.6f6c.6966.6360.5d5a.5754.514e.4b48.4542 - :: - 0xbd16.bee5 - "m" - 0c1JEoxevbLLG8cVqeoGKQiAwoWbNYSUyYjg - 0xbd16.bee5.3961.a47d.6ad8.88e2.9545.434a.89bd.fe95 - :: - 0x4b03.d6fc.3404.55b3.63f5.1020.ad3e.cca4. - f085.0280.cf43.6c70.c727.923f.6db4.6c3e - :: - 0x3.cbca.a9c9.8c87.7a26.977d.0082.5c95.6a23. - 8e8d.ddfb.d322.cce4.f74b.0b5b.d6ac.e4a7 - :: - 0x6049.9f80.1b89.6d83.179a.4374.aeb7.822a. - aeac.eaa0.db1f.85ee.3e90.4c4d.efbd.9689 - :: - %+ weld - "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8E" - "D9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB" - :: - %+ weld - "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pG" - "z6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U" - == - :: - :* 64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2. - cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2.9f9c.9996.9390.8d8a. - 8784.817e.7b78.7572.6f6c.6966.6360.5d5a.5754.514e.4b48.4542 - :: - 0x5a61.ff8e - "m/0" - 0c19EuDJdgfRkwCmRzbzVBHZWQG9QNWhftbZ - 0x5a61.ff8e.b7aa.ca30.10db.97eb.da76.1216.10b7.8096 - :: - 0xabe7.4a98.f6c7.eabe.e042.8f53.798f.0ab8. - aa1b.d378.7399.9041.703c.742f.15ac.7e1e - :: - 0x2.fc9e.5af0.ac8d.9b3c.ecfe.2a88.8e21.17ba. - 3d08.9d85.8588.6c9c.826b.6b22.a98d.12ea - :: - 0xf090.9aff.aa7e.e7ab.e5dd.4e10.0598.d4dc. - 53cd.709d.5a5c.2cac.40e7.412f.232f.7c9c - :: - %+ weld - "xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC" - "6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH" - :: - %+ weld - "xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKY" - "njwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt" - == - :: - :* 64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2. - cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2. - 9f9c.9996.9390.8d8a.8784.817e.7b78.7572. - 6f6c.6966.6360.5d5a.5754.514e.4b48.4542 - :: - 0xd8ab.4937 - "m/0/2147483647'" - 0c1Lke9bXGhn5VPrBuXgN12uGUphrttUErmk - 0xd8ab.4937.36da.02f1.1ed6.82f8.8339.e720.fb03.79d1 - :: - 0x877c.779a.d968.7164.e9c2.f4f0.f4ff.0340. - 8143.9233.0693.ce95.a58f.e18f.d52e.6e93 - :: - 0x3.c01e.7425.647b.defa.82b1.2d9b.ad5e.3e68. - 65be.e050.2694.b94c.a58b.666a.bc0a.5c3b - :: - 0xbe17.a268.474a.6bb9.c61e.1d72.0cf6.215e. - 2a88.c540.6c4a.ee7b.3854.7f58.5c9a.37d9 - :: - %+ weld - "xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85y" - "SDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a" - :: - %+ weld - "xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg" - "2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9" - == - :: - :* 64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2. - cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2. - 9f9c.9996.9390.8d8a.8784.817e.7b78.7572. - 6f6c.6966.6360.5d5a.5754.514e.4b48.4542 - :: - 0x7841.2e3a - "m/0/2147483647'/1" - 0c1BxrAr2pHpeBheusmd6fHDP2tSLAUa3qsW - 0x7841.2e3a.2296.a40d.e124.307b.6485.bd19.833e.2e34 - :: - 0x704a.ddf5.44a0.6e5e.e4be.a370.9846.3c23. - 613d.a320.20d6.0450.6da8.c051.8e1d.a4b7 - :: - 0x3.a7d1.d856.deb7.4c50.8e05.031f.9895.dab5. - 4626.251b.3806.e16b.4bd1.2e78.1a7d.f5b9 - :: - 0xf366.f48f.1ea9.f2d1.d3fe.958c.95ca.84ea. - 18e4.c4dd.b936.6c33.6c92.7eb2.46fb.38cb - :: - %+ weld - "xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvm" - "dMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon" - :: - %+ weld - "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25U" - "EPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef" - == - :: - :* 64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2. - cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2. - 9f9c.9996.9390.8d8a.8784.817e.7b78.7572. - 6f6c.6966.6360.5d5a.5754.514e.4b48.4542 - :: - 0x31a5.07b8 - "m/0/2147483647'/1/2147483646'" - 0c15XVotxCAV7sRx1PSCkQNsGw3W9jT9A94R - 0x31a5.07b8.1559.3dfc.51ff.c724.5ae7.e5ae.e304.246e - :: - 0xf1c7.c871.a54a.804a.fe32.8b4c.83a1.c33b. - 8e5f.f48f.5087.273f.04ef.a83b.247d.6a2d - :: - 0x2.d2b3.6900.396c.9282.fa14.6285.6658.2f20. - 6a5d.d0bc.c8d5.e892.6118.06ca.fb03.01f0 - :: - 0x6378.0703.0d55.d01f.9a0c.b3a7.8395.15d7. - 96bd.0770.6386.a6ed.df06.cc29.a65a.0e29 - :: - %+ weld - "xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZR" - "krgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL" - :: - %+ weld - "xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iA" - "xn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc" - == - :: - :* 64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2. - cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2. - 9f9c.9996.9390.8d8a.8784.817e.7b78.7572. - 6f6c.6966.6360.5d5a.5754.514e.4b48.4542 - :: - 0x2613.2fdb - "m/0/2147483647'/1/2147483646'/2" - 0c14UKfRV9ZPUp6ZC9PLhqbRtxdihW9em3xt - 0x2613.2fdb.e7bf.89cb.c64c.f8da.fa3f.9f88.b866.6220 - :: - 0xbb7d.39bd.b83e.cf58.f2fd.82b6.d918.341c. - bef4.2866.1ef0.1ab9.7c28.a484.2125.ac23 - :: - 0x2.4d90.2e1a.2fc7.a875.5ab5.b694.c575.fce7. - 42c4.8d9f.f192.e63d.f519.3e4c.7afe.1f9c - :: - 0x9452.b549.be8c.ea3e.cb7a.84be.c10d.cfd9. - 4afe.4d12.9ebf.d3b3.cb58.eedf.394e.d271 - :: - %+ weld - "xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbd" - "pq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt" - :: - %+ weld - "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7n" - "adnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j" - == == - -- --- diff --git a/pkg/bitcoin/tests/lib/bip39.hoon b/pkg/bitcoin/tests/lib/bip39.hoon deleted file mode 100644 index cc4350fc7..000000000 --- a/pkg/bitcoin/tests/lib/bip39.hoon +++ /dev/null @@ -1,256 +0,0 @@ -:: tests for the bip39 lib -:: -:: test vectors from here: -:: https://github.com/trezor/python-mnemonic/blob/master/vectors.json -:: which uses "TREZOR" as the password always -:: -/+ *test, bip39 -=, bip39 -:: -=/ vectors=(list [eny=byts nem=tape sed=@ux]) - :~ - :* - :- 16 - 0x0 - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" - 0xc552.57c3.60c0.7c72.029a.ebc1.b53c.05ed. - 0362.ada3.8ead.3e3e.9efa.3708.e534.9553. - 1f09.a698.7599.d182.64c1.e1c9.2f2c.f141. - 630c.7a3c.4ab7.c81b.2f00.1698.e746.3b04 - == - :* - :- 16 - 0x7f7f.7f7f.7f7f.7f7f.7f7f.7f7f.7f7f.7f7f - "legal winner thank year wave sausage worth useful legal winner thank yellow" - 0x2e89.0581.9b87.23fe.2c1d.1618.60e5.ee18. - 3031.8dbf.49a8.3bd4.51cf.b844.0c28.bd6f. - a457.fe12.9610.6559.a3c8.0937.a1c1.069b. - e3a3.a5bd.381e.e626.0e8d.9739.fce1.f607 - == - :* - :- 16 - 0x8080.8080.8080.8080.8080.8080.8080.8080 - "letter advice cage absurd amount doctor acoustic avoid letter advice cage above" - 0xd71d.e856.f81a.8acc.65e6.fc85.1a38.d4d7. - ec21.6fd0.796d.0a68.27a3.ad6e.d551.1a30. - fa28.0f12.eb2e.47ed.2ac0.3b5c.462a.0358. - d18d.69fe.4f98.5ec8.1778.c1b3.70b6.52a8 - == - :* - :- 16 - 0xffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo wrong" - 0xac27.4954.8022.5222.079d.7be1.8158.3751. - e86f.5710.27b0.497b.5b5d.1121.8e0a.8a13. - 3325.7291.7f0f.8e5a.5896.20c6.f15b.11c6. - 1dee.3276.51a1.4c34.e182.3105.2e48.c069 - == - :* - :- 24 - 0x0 - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon agent" - 0x358.95f2.f481.b1b0.f01f.cf8c.289c.7946. - 60b2.8998.1a78.f810.6447.707f.dd96.66ca. - 06da.5a9a.5651.8159.9b79.f53b.844d.8a71. - dd9f.439c.52a3.d7b3.e8a7.9c90.6ac8.45fa - == - :* - :- 24 - 0x7f7f.7f7f.7f7f.7f7f.7f7f.7f7f.7f7f.7f7f. - 7f7f.7f7f.7f7f.7f7f - "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal will" - 0xf2b9.4508.732b.cbac.bcc0.20fa.efec.fc89. - feaf.a664.9a54.91b8.c952.cede.496c.214a. - 0c7b.3c39.2d16.8748.f2d4.a612.bada.0753. - b52a.1c7a.c53c.1e93.abd5.c632.0b9e.95dd - == - :* - :- 24 - 0x8080.8080.8080.8080.8080.8080.8080.8080. - 8080.8080.8080.8080 - "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter always" - 0x107d.7c02.a5aa.6f38.c580.83ff.74f0.4c60. - 7c2d.2c0e.cc55.501d.add7.2d02.5b75.1bc2. - 7fe9.13ff.b796.f841.c49b.1d33.b610.cf0e. - 91d3.aa23.9027.f5e9.9fe4.ce9e.5088.cd65 - == - :* - :- 24 - 0xffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff. - ffff.ffff.ffff.ffff - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo when" - 0xcd6.e5d8.27bb.62eb.8fc1.e262.2542.2381. - 7fd0.68a7.4b5b.449c.c2f6.67c3.f1f9.85a7. - 6379.b433.48d9.52e2.265b.4cd1.2909.0758. - b3e3.c2c4.9103.b505.1aac.2eae.b890.a528 - == - :* - :- 32 - 0x0 - "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art" - 0xbda8.5446.c684.1370.7090.a520.22ed.d26a. - 1c94.6229.5029.f2e6.0cd7.c4f2.bbd3.0971. - 70af.7a4d.7324.5caf.a9c3.cca8.d561.a7c3. - de6f.5d4a.10be.8ed2.a5e6.08d6.8f92.fcc8 - == - :* - :- 32 - 0x7f7f.7f7f.7f7f.7f7f.7f7f.7f7f.7f7f.7f7f. - 7f7f.7f7f.7f7f.7f7f.7f7f.7f7f.7f7f.7f7f - "legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth useful legal winner thank year wave sausage worth title" - 0xbc09.fca1.804f.7e69.da93.c2f2.028e.b238. - c227.f2e9.dda3.0cd6.3699.2325.7848.0a40. - 21b1.46ad.717f.bb7e.451c.e9eb.835f.4362. - 0bf5.c514.db0f.8add.49f5.d121.449d.3e87 - == - :* - :- 32 - 0x8080.8080.8080.8080.8080.8080.8080.8080. - 8080.8080.8080.8080.8080.8080.8080.8080 - "letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic avoid letter advice cage absurd amount doctor acoustic bless" - 0xc0c5.19bd.0e91.a2ed.5435.7d9d.1ebe.f6f5. - af21.8a15.3624.cf4f.2da9.11a0.ed8f.7a09. - e2ef.61af.0aca.0070.96df.4300.22f7.a2b6. - fb91.661a.9589.0970.6972.0d01.5e4e.982f - == - :* - :- 32 - 0xffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff. - ffff.ffff.ffff.ffff.ffff.ffff.ffff.ffff - "zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo zoo vote" - 0xdd48.c104.698c.30cf.e2b6.1421.0324.8622. - fb7b.b0ff.692e.ebb0.0089.b32d.2248.4e16. - 1391.2f0a.5b69.4407.be89.9ffd.31ed.3992. - c456.cdf6.0f5d.4564.b8ba.3f05.a698.90ad - == - :* - :- 16 - 0x9e88.5d95.2ad3.62ca.eb4e.fe34.a8e9.1bd2 - "ozone drill grab fiber curtain grace pudding thank cruise elder eight picnic" - 0x274d.dc52.5802.f7c8.28d8.ef7d.dbcd.c530. - 4e87.ac35.3591.3611.fbbf.a986.d0c9.e547. - 6c91.689f.9c8a.54fd.55bd.3860.6aa6.a859. - 5ad2.13d4.c9c9.f9ac.a3fb.2170.69a4.1028 - == - :* - :- 24 - 0x6610.b259.67cd.cca9.d598.75f5.cb50.b0ea. - 7543.3311.869e.930b - "gravity machine north sort system female filter attitude volume fold club stay feature office ecology stable narrow fog" - 0x628c.3827.a882.3298.ee68.5db8.4f55.caa3. - 4b5c.c195.a778.e52d.45f5.9bcf.75ab.a68e. - 4d75.90e1.01dc.414b.c1bb.d573.7666.fbbe. - f35d.1f19.0395.3b66.624f.910f.eef2.45ac - == - :* - :- 32 - 0x68a7.9eac.a232.4873.eacc.50cb.9c6e.ca8c. - c68e.a5d9.36f9.8787.c60c.7ebc.74e6.ce7c - "hamster diagram private dutch cause delay private meat slide toddler razor book happy fancy gospel tennis maple dilemma loan word shrug inflict delay length" - 0x64c8.7cde.7e12.ecf6.704a.b95b.b140.8bef. - 047c.22db.4cc7.491c.4271.d170.a1b2.13d2. - 0b38.5bc1.588d.9c7b.38f1.b39d.4156.65b8. - a903.0c9e.c653.d75e.65f8.47d8.fc1f.c440 - == - :* - :- 16 - 0xc0ba.5a8e.9141.1121.0f2b.d131.f3d5.e08d - "scheme spot photo card baby mountain device kick cradle pact join borrow" - 0xea72.5895.aaae.8d4c.1cf6.82c1.bfd2.d358. - d52e.d9f0.f059.1131.b559.e272.4bb2.34fc. - a05a.a9c0.2c57.407e.04ee.9dc3.b454.aa63. - fbff.483a.8b11.de94.9624.b9f1.831a.9612 - == - :* - :- 24 - 0x6d9b.e1ee.6ebd.27a2.5811.5aad.99b7.317b. - 9c8d.28b6.d764.31c3 - "horn tenant knee talent sponsor spell gate clip pulse soap slush warm silver nephew swap uncle crack brave" - 0xfd57.9828.af3d.a1d3.2544.ce4d.b5c7.3d53. - fc8a.cc4d.db1e.3b25.1a31.179c.db71.e853. - c56d.2fcb.11ae.d398.98ce.6c34.b10b.5382. - 772d.b879.6e52.837b.5446.8aeb.312c.fc3d - == - :* - :- 32 - 0x9f6a.2878.b252.0799.a44e.f18b.c7df.394e. - 7061.a224.d2c3.3cd0.15b1.57d7.4686.9863 - "panda eyebrow bullet gorilla call smoke muffin taste mesh discover soft ostrich alcohol speed nation flash devote level hobby quick inner drive ghost inside" - 0x72be.8e05.2fc4.919d.2adf.28d5.306b.5474. - b006.9df3.5b02.303d.e8c1.729c.9538.dbb6. - fc2d.731d.5f83.2193.cd9f.b6ae.ecbc.4695. - 94a7.0e3d.d508.11b5.067f.3b88.b28c.3e8d - == - :* - :- 16 - 0x23db.8160.a31d.3e0d.ca36.88ed.941a.dbf3 - "cat swing flag economy stadium alone churn speed unique patch report train" - 0xdeb5.f454.49e6.15fe.ff56.40f2.e49f.933f. - f518.95de.3b43.8183.2b31.3994.1c57.b592. - 05a4.2480.c521.75b6.efcf.faa5.8a25.0388. - 7c1e.8b36.3a70.7256.bdd2.b587.b465.41f5 - == - :* - :- 24 - 0x8197.a4a4.7f04.25fa.eaa6.9dee.bc05.ca29. - c0a5.b5cc.76ce.acc0 - "light rule cinnamon wrap drastic word pride squirrel upgrade then income fatal apart sustain crack supply proud access" - 0x4cbd.ff1c.a2db.800f.d61c.ae72.a574.75fd. - c6ba.b03e.441f.d63f.96da.bd1f.183e.f5b7. - 8292.5f00.105f.3183.09a7.e9c3.ea69.67c7. - 801e.46c8.a580.8267.4c86.0a37.b93e.da02 - == - :* - :- 32 - 0x66d.ca1a.2bb7.e8a1.db28.3214.8ce9.933e. - ea0f.3ac9.548d.7931.12d9.a95c.9407.efad - "all hour make first leader extend hole alien behind guard gospel lava path output census museum junior mass reopen famous sing advance salt reform" - 0x26e9.75ec.6444.23f4.a4c4.f421.5ef0.9b4b. - d7ef.924e.85d1.d17c.4cf3.f136.c286.3cf6. - df0a.4750.4565.2c57.eb5f.b415.13ca.2a2d. - 6772.2b77.e954.b4b3.fc11.f759.0449.191d - == - :* - :- 16 - 0xf30f.8c1d.a665.478f.49b0.01d9.4c5f.c452 - "vessel ladder alter error federal sibling chat ability sun glass valve picture" - 0x2aaa.9242.daaf.cee6.aa9d.7269.f17d.4efe. - 271e.1b9a.5291.78d7.dc13.9cd1.8747.090b. - f9d6.0295.d0ce.7430.9a78.852a.9caa.df0a. - f48a.ae1c.6253.8396.2407.6224.374b.c63f - == - :* - :- 24 - 0xc10e.c20d.c3cd.9f65.2c7f.ac2f.1230.f7a3. - c828.389a.1439.2f05 - "scissors invite lock maple supreme raw rapid void congress muscle digital elegant little brisk hair mango congress clump" - 0x7b4a.10be.9d98.e6cb.a265.566d.b7f1.3671. - 8e13.98c7.1cb5.81e1.b2f4.64ca.c1ce.edf4. - f3e2.74dc.2700.03c6.70ad.8d02.c455.8b2f. - 8e39.edea.2775.c9e2.32c7.cb79.8b06.9e88 - == - :* - :- 32 - 0xf585.c11a.ec52.0db5.7dd3.53c6.9554.b21a. - 89b2.0fb0.6509.66fa.0a9d.6f74.fd98.9d8f - "void come effort suffer camp survey warrior heavy shoot primary clutch crush open amazing screen patrol group space point ten exist slush involve unfold" - 0x1f5.bced.59de.c48e.362f.2c45.b5de.68b9. - fd6c.92c6.634f.44d6.d40a.ab69.0565.06f0. - e355.24a5.1803.4ddc.1192.e1da.cd32.c1ed. - 3eaa.3c3b.131c.88ed.8e7e.54c4.9a5d.0998 - == - == -|% -++ test-all-vectors - |- - ?~ vectors ~ - =* v i.vectors - =- ?^(- - $(vectors t.vectors)) - =+ %+ expect-eq - !> nem.v - !> (from-entropy eny.v) - ?^ - - - %+ expect-eq - !> sed.v - !> `@ux`(to-seed nem.v "TREZOR") --- diff --git a/pkg/bitcoin/tests/lib/bitcoin.hoon b/pkg/bitcoin/tests/lib/bitcoin.hoon deleted file mode 100644 index 2eec93707..000000000 --- a/pkg/bitcoin/tests/lib/bitcoin.hoon +++ /dev/null @@ -1,207 +0,0 @@ -/+ *test, *bitcoin, *bitcoin-utils, bip32 -=, secp:crypto -=+ ecc=secp256k1 -|% -+$ chyg ?(%0 %1) -+$ bits-vector [bitwidth=@ atoms=(list @) =bits] -+$ compact-size-vector @ux -+$ tx-vector [hex-cord=@t txid=hexb] -+$ xpub-vector - $: =xpub - =network - hdpath=[=bipt =chyg =idx] - pubkey=hexb - =address - == -+$ script-pubkey-vector [=address spk=hexb] -:: -++ bits-vectors - ^- (list bits-vector) - :~ :* 5 - ~[0 31 31 0 31 0] - [30 0b1.1111.1111.1000.0011.1110.0000] - == - == -:: -++ compact-size-vectors - ^- (list compact-size-vector) - :~ 0x98 - 0x302 - 0xaa.bbcc - 0xaabb.ccdd - 0xaa.bbcc.ddee - 0xaabb.ccdd.eeff.1122 - == -:: -++ tx-vectors - ^- (list tx-vector) - :~ :* '0200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40000000000feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac00000000' - 32^0xfed6.cd1f.de4d.b4e1.3e7e.8003.17e3.7f9c.bd75.ec36.4389.670e.eff8.0da9.93c7.e560 - == - :: - :* '01000000000102267b34b058a44e678ca0609825fe37c5bb893462337334ad5a2e887b8ebef65c000000002322002049f80613b30fe3063d4e6ce75c53a7bc573ea17fe49dcb805aca416a8af5d991ffffffff666f99bf914bb18e28ec39af93d99a1938767fbec892408acced7c80663f0df40000000023220020096def7756afb4dba661ec58602cf6af1f7881e48e4b8a8c12be9985073f5adeffffffff06602d59010000000017a914572290324c72e6842e8a77c2cbb9882a3b9c2a9f87195c0e00000000001976a914abfdf3698ceef95986b31b763e6764cfe3ce584e88ac68642400000000001976a91456cf5fcc3654c5646b930e8773a95dce98c49e0588acfbb34b00000000001976a914518ee0d1b48f3d99f76e6e8283006610e39aeeba88acf492560000000000160014d1930fff9862af879ee14ecd3e1b9dc1099524ce0374c802000000001976a9148a6727bc345abeae523b6af7828053f95332918688ac03483045022100fcc8336b7c81e67cc7b53587fb06c3f950a6d3349e658594a444618c75988e45022065b3b957e0f7d2def98565a34c1ee7843d60525c4337730fa5d6ac8ff7aacb89012102ac604909ed86488338ec6255b0bdc0162562b299e66b860480a8bd2b99c7f3291976a9140e60a2ad39efd10ad61e2a3e6e5c1baa73190ee088ac0347304402202ec01f623cd48ba990caea70463de86b37ffb2363640b510ce9d80c750a54eec02204915d11649d636e5e8503b226d7a6a45da0163f3f0ca4b07bdaaa9af4d6f850f012102a52b3f9958c0f4b57b99f287832ea75775ddf7c83fa0648b6b1545ec4881ef2d1976a91401121fe150c9b05f9146bac57ad9947ea5c1478e88ac00000000' - 32^0x2b9c.60c4.dfcd.0aa2.b1b8.83a5.0a4a.2a96.197b.07d8.cdd1.e749.f0a1.f296.0f43.b339 - == - == -:: below use mnemonic: -:: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about -:: -++ xpub-vectors - ^- (list xpub-vector) - :~ :* 'tpubDC5FSnBiZDMmhiuCmWAYsLwgLYrrT9rAqvTySfuCCrgsWz8wxMXUS9Tb9iVMvcRbvFcAHGkMD5Kx8koh4GquNGNTfohfk7pgjhaPCdXpoba' - %testnet - [%44 %0 0] - 33^0x2.a745.1395.7353.69f2.ecdf.c829.c0f7.74e8.8ef1.303d.fe5b.2f04.dbaa.b30a.535d.fdd6 - [%base58 0cmkpZhYtJu2r87Js3pDiWJDmPte2NRZ8bJV] - == - :: - :* 'upub5EFU65HtV5TeiSHmZZm7FUffBGy8UKeqp7vw43jYbvZPpoVsgU93oac7Wk3u6moKegAEWtGNF8DehrnHtv21XXEMYRUocHqguyjknFHYfgY' - %testnet - [%49 %0 0] - 33^0x3.a1af.804a.c108.a8a5.1782.198c.2d03.4b28.bf90.c880.3f5a.53f7.6276.fa69.a4ea.e77f - [%base58 0c2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2] - == - :: - :* 'vpub5Y6cjg78GGuNLsaPhmYsiw4gYX3HoQiRBiSwDaBXKUafCt9bNwWQiitDk5VZ5BVxYnQdwoTyXSs2JHRPAgjAvtbBrf8ZhDYe2jWAqvZVnsc' - %testnet - [%84 %0 0] - 33^0x2.e7ab.2537.b5d4.9e97.0309.aae0.6e9e.49f3.6ce1.c9fe.bbd4.4ec8.e0d1.cca0.b4f9.c319 - [%bech32 'tb1q6rz28mcfaxtmd6v789l9rrlrusdprr9pqcpvkl'] - == - :: - :* 'xpub6BosfCnifzxcFwrSzQiqu2DBVTshkCXacvNsWGYJVVhhawA7d4R5WSWGFNbi8Aw6ZRc1brxMyWMzG3DSSSSoekkudhUd9yLb6qx39T9nMdj' - %main - [%44 %0 0] - 33^0x3.aaeb.52dd.7494.c361.049d.e67c.c680.e83e.bcbb.bdbe.b136.37d9.2cd8.45f7.0308.af5e - [%base58 0c1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA] - == - :: - :* 'ypub6Ww3ibxVfGzLrAH1PNcjyAWenMTbbAosGNB6VvmSEgytSER9azLDWCxoJwW7Ke7icmizBMXrzBx9979FfaHxHcrArf3zbeJJJUZPf663zsP' - %main - [%49 %0 0] - 33^0x3.9b3b.694b.8fc5.b5e0.7fb0.69c7.83ca.c754.f5d3.8c3e.08be.d196.0e31.fdb1.dda3.5c24 - [%base58 0c37VucYSaXLCAsxYyAPfbSi9eh4iEcbShgf] - == - :: - :* 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' - %main - [%84 %0 0] - 33^0x3.30d5.4fd0.dd42.0a6e.5f8d.3624.f5f3.482c.ae35.0f79.d5f0.753b.f5be.ef9c.2d91.af3c - [%bech32 'bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu'] - == - == -:: -++ script-pubkey-vectors - ^- (list script-pubkey-vector) - :~ :* [%bech32 'bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu'] - [wid=22 dat=0x14.c0ce.bcd6.c3d3.ca8c.75dc.5ec6.2ebe.5533.0ef9.10e2] - == - :: - :* [%bech32 'bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3'] - [wid=34 dat=0x20.1863.143c.14c5.1668.04bd.1920.3356.da13.6c98.5678.cd4d.27a1.b8c6.3296.0490.3262] - == - :: - :* [%bech32 'tb1q6rz28mcfaxtmd6v789l9rrlrusdprr9pqcpvkl'] - [wid=22 dat=0x14.d0c4.a3ef.09e9.97b6.e99e.397e.518f.e3e4.1a11.8ca1] - == - :: - :* [%base58 0c1LqBGSKuX5yYUonjxT5qGfpUsXKYYWeabA] - [wid=25 dat=0x76.a914.d986.ed01.b7a2.2225.a70e.dbf2.ba7c.fb63.a15c.b3aa.88ac] - == - :: - :* [%base58 0cmxVFsFW5N4mu1HPkxPttorvocvzeZ7KZyk] - [wid=25 dat=0x76.a914.ba27.f99e.007c.7f60.5a83.05e3.18c1.abde.3cd2.20ac.88ac] - == - :: - :* [%base58 0cmfWxJ45yp2SFn7UciZyNpvDKrzbhyfKrY8] - [wid=25 dat=0x76.a914.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.88ac] - == - :: - :* [%base58 0c37VucYSaXLCAsxYyAPfbSi9eh4iEcbShgf] - [wid=23 dat=0xa9.143f.b6e9.5812.e57b.b469.1f9a.4a62.8862.a61a.4f76.9b87] - == - :: - :* [%base58 0c2MvLWCyKPQQ6oqJKSJ9ic8hYVmLyNry6yuF] - [wid=23 dat=0xa9.1421.e7fe.f309.cf6f.6cfc.fe94.c572.e541.d74f.d848.5487] - == - == -:: -++ mk-pubkey -|= [=xpub =chyg =idx] - ^- hexb - =/ pk=@ux - %- compress-point:ecc - pub:(derive-public:(derive-public:(from-extended:bip32 (trip xpub)) (@ chyg)) idx) - [(met 3 pk) pk] -:: -++ test-all-vectors -^- tang - |^ ;: weld - %+ category "bit manipulation" - (zing (turn bits-vectors check-bits)) - %+ category "compact-size en/decoding" - (zing (turn compact-size-vectors check-compact-size)) - %+ category "check TX en/decoding" - (zing (turn tx-vectors check-tx)) - %+ category "xpub parsing" - (zing (turn xpub-vectors check-xpub-parsing)) - %+ category "pubkey derivation" - (zing (turn xpub-vectors check-pubkey-derivation)) - %+ category "address derivation" - (zing (turn xpub-vectors check-address-derivation)) - %+ category "script-pubkey derivation" - (zing (turn script-pubkey-vectors check-script-pubkey-derivation)) - == - :: - ++ check-bits - |= v=bits-vector - ;: weld - :: TODO: from-atoms works, but to-atoms doesn't - %+ expect-eq - !>(bits.v) - !>((from-atoms:bit bitwidth.v atoms.v)) - %+ expect-eq - !>(atoms.v) - !>((to-atoms:bit bitwidth.v bits.v)) - == - :: - ++ check-compact-size - |= v=compact-size-vector - %+ expect-eq - !>(v) - !>(dat:n:(de:csiz (en:csiz v))) - :: - ++ check-tx - |= v=tx-vector - %+ expect-eq - !>(txid.v) - !>((get-id:txu (decode:txu (from-cord:hxb hex-cord.v)))) - :: - ++ check-xpub-parsing - |= v=xpub-vector - =/ [b=bipt n=network] (xpub-type xpub.v) - %+ expect-eq - !>([b n]) - !>([bipt.hdpath.v network.v]) - :: - ++ check-pubkey-derivation - |= v=xpub-vector - %+ expect-eq - !>(pubkey.v) - !>((mk-pubkey xpub.v chyg.hdpath.v idx.hdpath.v)) - :: - ++ check-address-derivation - |= v=xpub-vector - =/ [b=bipt n=network] (xpub-type xpub.v) - %+ expect-eq - !>(address.v) - !>((from-pubkey:adr b n pubkey.v)) - :: - ++ check-script-pubkey-derivation - |= v=script-pubkey-vector - %+ expect-eq - !>(spk.v) - !>((to-script-pubkey:adr address.v)) - -- -:: --- diff --git a/pkg/bitcoin/tests/lib/btc.hoon b/pkg/bitcoin/tests/lib/btc.hoon deleted file mode 100644 index 9fffe31b1..000000000 --- a/pkg/bitcoin/tests/lib/btc.hoon +++ /dev/null @@ -1,190 +0,0 @@ -/- bc=bitcoin -/+ *test, *btc -|% -+$ wallet-vector - $: =xpub:bc - =chyg - =idx:bc - =address:bc - == -+$ vector - $: =xpub:bc - eny=@uv - block=@ud - feyb=sats - ins=(list insel) - outs=(list txo) - expect=[selected=(unit (list insel)) chng=(unit sats:bc)] - == -++ mk-utxo - |= value=sats:bc - ^- utxo:bc - :* pos=0 - [wid=32 dat=0xc493.f6f1.4668.5f76.b44f.0c77.ca88.120c.b8bc.89f5.34fe.69b6.8288.27b9.74e6.8849] - height=3 - value - recvd=~ - == -:: -++ fprint 4^0xdead.beef -:: -++ wallet-vectors - ^- (list wallet-vector) - :~ :* 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' - %0 - 0 - [%bech32 'bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu'] - == - == -:: -++ vectors - =| w=walt - ^- (list vector) - :~ :* 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' - 0v3uc.iuebi.5qilc.l8d87.c1k6n.7iksq.nkobs.8s5he.raq40.9ff0b.5tj3u.kjtg7.aq59e.hatv7.oioam.mlsr4.pqqcd.cnbjn.pnpi2.1m5rt.k4scg - 999 - 10 - :~ [(mk-utxo 200.000) %0 1] - [(mk-utxo 500.000) %0 2] - [(mk-utxo 204) %0 3] - [(mk-utxo 235.000) %1 2] - == - :~ [[%bech32 'bc1q59u5epktervh6fxqay2dlph0wxu9hjnx6v8n66'] 200.100 ~] - [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] 200.000 ~] - == - :* `~[[(mk-utxo 500.000) %0 2]] - `332.500 - == - == - :: - :* 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' - 0v1gt.mc4ca.lfs0m.q1dal.lqobu.mmlbd.2umnp.lj9dr.4pf4s.pvclr.dps96.4a6i8.rt6n9.krp0r.11kqu.ckqe4.1tmat.gr754.463aj.a4b41.jj7qg - 999 - 10 - :~ [(mk-utxo 200.000) %0 1] - [(mk-utxo 500.000) %0 2] - [(mk-utxo 204) %0 3] - [(mk-utxo 235.000) %1 2] - == - :~ [[%bech32 'bc1q59u5epktervh6fxqay2dlph0wxu9hjnx6v8n66'] 200.100 ~] - [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] 200.000 ~] - == - :* `~[[(mk-utxo 235.000) %1 2] [(mk-utxo 200.000) %0 1]] - `297.500 - == - == - :: - :* 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' - 0v1gt.mc4ca.lfs0m.q1dal.lqobu.mmlbd.2umnp.lj9dr.4pf4s.pvclr.dps96.4a6i8.rt6n9.krp0r.11kqu.ckqe4.1tmat.gr754.463aj.a4b41.jj7qg - 999 - 10 - ~[[(mk-utxo 500.000) %0 2]] - :~ [[%bech32 'bc1q59u5epktervh6fxqay2dlph0wxu9hjnx6v8n66'] 299.797 ~] - [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] 200.000 ~] - == - :* *(unit (list insel)) - *(unit sats:bc) - == - == - :* 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' - 0v1gt.mc4ca.lfs0m.q1dal.lqobu.mmlbd.2umnp.lj9dr.4pf4s.pvclr.dps96.4a6i8.rt6n9.krp0r.11kqu.ckqe4.1tmat.gr754.463aj.a4b41.jj7qg - 999 - 10 - ~[[(mk-utxo 500.000) %0 2]] - :~ [[%bech32 'bc1q59u5epktervh6fxqay2dlph0wxu9hjnx6v8n66'] 298.500 ~] - [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] 200.000 ~] - == - :* `~[[(mk-utxo 500.000) %0 2]] - *(unit sats:bc) - == - == - == -:: -++ dust-output-vectors - =| w=walt - ^- (list vector) - :~ - :* 'zpub6rFR7y4Q2AijBEqTUquhVz398htDFrtymD9xYYfG1m4wAcvPhXNfE3EfH1r1ADqtfSdVCToUG868RvUUkgDKf31mGDtKsAYz2oz2AGutZYs' - 0v1gt.mc4ca.lfs0m.q1dal.lqobu.mmlbd.2umnp.lj9dr.4pf4s.pvclr.dps96.4a6i8.rt6n9.krp0r.11kqu.ckqe4.1tmat.gr754.463aj.a4b41.jj7qg - 999 - 10 - ~[[(mk-utxo 500.000) %0 2]] - :~ [[%bech32 'bc1q59u5epktervh6fxqay2dlph0wxu9hjnx6v8n66'] 298.580 ~] - [[%bech32 'bc1qlwd7mw33uea5m8r2lsnsrkc7gp2qynrxsfxpfm'] 204 ~] - == - :* `~[[(mk-utxo 500.000) %0 2]] - *(unit sats:bc) - == - == - == -:: -++ test-all-vectors - ^- tang - |^ ;: weld - %+ category "address generation/lookup" - (zing (turn wallet-vectors address-gen-lookup)) - %+ category "single-random-draw" - (zing (turn vectors check-single-random-draw)) - :: - %+ category "select with change" - (zing (turn vectors check-change)) - :: - %+ category "don't allow dust outputs" - (zing (turn dust-output-vectors check-dust-output)) - == - :: - ++ address-gen-lookup - |= v=wallet-vector - =/ w=walt (from-xpub xpub.v fprint ~ ~ ~) - =/ =address (~(mk-address wad w chyg.v) idx.v) - =. w (~(update-address wad w chyg.v) address [%.n %0 0 *(set utxo:bc)]) - =/ [w2=walt c=chyg i=idx] (need (address-coords address ~[w])) - ;: weld - %+ expect-eq - !>(address) - !>(address.v) - %+ expect-eq - !>([w2 c i]) - !>([w chyg.v idx.v]) - == - :: - ++ check-single-random-draw - |= v=vector - =/ w=walt (from-xpub xpub.v fprint ~ ~ ~) - %+ expect-eq - !>(selected.expect.v) - !>((~(single-random-draw sut [w eny.v block.v ~ feyb.v outs.v]) ins.v)) - :: - ++ check-change - |= v=vector - =/ w=walt (from-xpub xpub.v fprint ~ ~ ~) - =. wach.w - %- ~(gas by *(map address:bc addi)) - %+ turn ins.v - |= i=insel - :- (~(mk-address wad w chyg.i) idx.i) - [%.y %0 0 (sy ~[utxo.i])] - %+ expect-eq - !>(chng.expect.v) - !>(chng:~(with-change sut [w eny.v block.v ~ feyb.v outs.v])) - :: - ++ check-dust-output - |= v=vector - =/ w=walt (from-xpub xpub.v fprint ~ ~ ~) - =. wach.w (insels-to-wach w ins.v) - %- expect-fail - |.(~(with-change sut [w eny.v block.v ~ feyb.v outs.v])) - :: - ++ insels-to-wach - |= [w=walt is=(list insel)] - ^- wach - %- ~(gas by *(map address:bc addi)) - %+ turn is - |= i=insel - :- (~(mk-address wad w chyg.i) idx.i) - [%.y %0 0 (sy ~[utxo.i])] - -- - :: if a non-change output is dust, error - :: change shouldn't be returned when change is dust - :: --- diff --git a/pkg/btc-wallet/.eslintignore b/pkg/btc-wallet/.eslintignore deleted file mode 100644 index 8dbaf7dc4..000000000 --- a/pkg/btc-wallet/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -config/webpack.dev.js -config/webpack.prod.js diff --git a/pkg/btc-wallet/.eslintrc.json b/pkg/btc-wallet/.eslintrc.json deleted file mode 100644 index b4bed6fb2..000000000 --- a/pkg/btc-wallet/.eslintrc.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true - }, - "extends": ["eslint:recommended", "plugin:react/recommended", "prettier"], - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly" - }, - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 11, - "sourceType": "module" - }, - "plugins": ["react"], - "rules": { - "react/prop-types": 0 - }, - "settings": { - "react": { - "version": "detect" - } - } -} diff --git a/pkg/btc-wallet/.gitignore b/pkg/btc-wallet/.gitignore deleted file mode 100644 index 0b4cb55f9..000000000 --- a/pkg/btc-wallet/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.eslintcache diff --git a/pkg/btc-wallet/.husky/.gitignore b/pkg/btc-wallet/.husky/.gitignore deleted file mode 100644 index 31354ec13..000000000 --- a/pkg/btc-wallet/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/pkg/btc-wallet/.husky/pre-commit b/pkg/btc-wallet/.husky/pre-commit deleted file mode 100755 index 22cde47be..000000000 --- a/pkg/btc-wallet/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -cd pkg/btc-wallet && npx lint-staged src diff --git a/pkg/btc-wallet/.prettierrc b/pkg/btc-wallet/.prettierrc deleted file mode 100644 index 937375d24..000000000 --- a/pkg/btc-wallet/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "semi": true, - "singleQuote": true -} diff --git a/pkg/btc-wallet/README.md b/pkg/btc-wallet/README.md deleted file mode 100644 index 60933f149..000000000 --- a/pkg/btc-wallet/README.md +++ /dev/null @@ -1,8 +0,0 @@ -To verify your version of the bitcoin wallet, run the following command in the -dojo: - -`> +btc-wallet-check` - -it should return with the following hash: - -`0v758lj.uf0s5.0nh3m.gunn6.942gj` diff --git a/pkg/btc-wallet/config/urbitrc-sample b/pkg/btc-wallet/config/urbitrc-sample deleted file mode 100644 index 0654ff48d..000000000 --- a/pkg/btc-wallet/config/urbitrc-sample +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - URBIT_PIERS: [ - "%URBITPIER%", - ], - URL: 'http://localhost:80' -}; diff --git a/pkg/btc-wallet/config/webpack.dev.js b/pkg/btc-wallet/config/webpack.dev.js deleted file mode 100644 index 8b3101204..000000000 --- a/pkg/btc-wallet/config/webpack.dev.js +++ /dev/null @@ -1,122 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -// const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const urbitrc = require('./urbitrc'); -const fs = require('fs-extra'); -const _ = require('lodash'); - -function copy(src, dest) { - return new Promise((res, rej) => - fs.copy(src, dest, (err) => (err ? rej(err) : res())) - ); -} - -class UrbitShipPlugin { - constructor(urbitrc) { - this.piers = urbitrc.URBIT_PIERS; - } - - apply(compiler) { - compiler.hooks.afterEmit.tapPromise( - 'UrbitShipPlugin', - async (compilation) => { - const src = path.resolve(compiler.options.output.path, 'index.js'); - } - ); - } -} - -let devServer = { - contentBase: path.join(__dirname, '../dist'), - hot: true, - port: 9000, - host: '0.0.0.0', - disableHostCheck: true, - historyApiFallback: true, - publicPath: '/apps/bitcoin/', -}; - -const router = _.mapKeys( - urbitrc.FLEET || {}, - (value, key) => `${key}.localhost:9000` -); - -if (urbitrc.URL) { - devServer = { - ...devServer, - index: 'index.html', - proxy: [ - { - target: 'http://localhost:9000', - changeOrigin: true, - target: urbitrc.URL, - router, - context: (path) => { - if (path === '/apps/bitcoin/desk.js') { - return true; - } - return !path.startsWith('/apps/bitcoin'); - }, - }, - ], - }; -} - -module.exports = { - node: { fs: 'empty' }, - mode: 'development', - entry: { - app: './src/index.tsx', - }, - module: { - rules: [ - { - test: /\.(j|t)sx?$/, - use: { - loader: 'ts-loader', - }, - exclude: /node_modules/, - }, - { - test: /\.css$/i, - use: [ - // Creates `style` nodes from JS strings - 'style-loader', - // Translates CSS into CommonJS - 'css-loader', - // Compiles Sass to CSS - 'sass-loader', - ], - }, - ], - }, - resolve: { - extensions: ['.js', '.ts', '.tsx'], - }, - devtool: 'inline-source-map', - devServer: devServer, - plugins: [ - new UrbitShipPlugin(urbitrc), - new HtmlWebpackPlugin({ - title: 'Bitcoin Wallet', - template: './public/index.html', - }), - ], - watch: true, - watchOptions: { - poll: true, - ignored: '/node_modules/', - }, - output: { - filename: 'index.js', - chunkFilename: 'index.js', - path: path.resolve(__dirname, '../dist'), - publicPath: '/apps/bitcoin/', - globalObject: 'this', - }, - optimization: { - minimize: false, - usedExports: true, - }, -}; diff --git a/pkg/btc-wallet/config/webpack.prod.js b/pkg/btc-wallet/config/webpack.prod.js deleted file mode 100644 index 930182af0..000000000 --- a/pkg/btc-wallet/config/webpack.prod.js +++ /dev/null @@ -1,58 +0,0 @@ -const path = require('path'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -// const urbitrc = require('./urbitrc'); - -module.exports = { - node: { fs: 'empty' }, - mode: 'production', - entry: { - app: './src/index.tsx', - }, - module: { - rules: [ - { - test: /\.(j|t)sx?$/, - use: { - loader: 'ts-loader', - }, - exclude: /node_modules/, - }, - { - test: /\.css$/i, - use: [ - // Creates `style` nodes from JS strings - 'style-loader', - // Translates CSS into CommonJS - 'css-loader', - // Compiles Sass to CSS - 'sass-loader', - ], - }, - ], - }, - resolve: { - extensions: ['.js', '.ts', '.tsx'], - }, - devtool: 'source-map', - plugins: [ - new CleanWebpackPlugin(), - new HtmlWebpackPlugin({ - title: 'Bitcoin Wallet', - template: './public/index.html', - }), - ], - output: { - filename: (pathData) => { - return pathData.chunk.name === 'app' - ? 'index.[contenthash].js' - : '[name].js'; - }, - path: path.resolve(__dirname, '../dist'), - publicPath: '/apps/bitcoin/', - }, - optimization: { - minimize: true, - usedExports: true, - }, -}; diff --git a/pkg/btc-wallet/package-lock.json b/pkg/btc-wallet/package-lock.json deleted file mode 100644 index 6ade58829..000000000 --- a/pkg/btc-wallet/package-lock.json +++ /dev/null @@ -1,11977 +0,0 @@ -{ - "name": "btc-wallet", - "version": "0.1.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", - "dev": true - }, - "@babel/core": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.10.tgz", - "integrity": "sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.10", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.10", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "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==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", - "requires": { - "@babel/types": "^7.13.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz", - "integrity": "sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", - "dev": true, - "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" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", - "dev": true, - "requires": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-module-transforms": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz", - "integrity": "sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", - "dev": true, - "requires": { - "@babel/types": "^7.12.1" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" - }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", - "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" - } - }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.12.tgz", - "integrity": "sha512-4T7Pb244rxH24yR116LAuJ+adxXXnHhZaLJjegJVKSdoNCe4x1eDBaud5YIcQFcqzsaD5BHvJw5BQ0AZapdCRw==" - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", - "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@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==", - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", - "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", - "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", - "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", - "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.17" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", - "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", - "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-typescript": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/preset-env": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", - "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-compilation-targets": "^7.13.10", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.8", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@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-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.12", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "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/preset-react": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.13.tgz", - "integrity": "sha512-TYM0V9z6Abb6dj1K7i5NrEhA13oS5ujUYQYDfqIBXYHOc2c2VkFgc+q9kyssIyUfy4/hEwqrgSlJ/Qgv8zJLsA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.12.13", - "@babel/plugin-transform-react-jsx-development": "^7.12.12", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" - } - }, - "@babel/preset-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz", - "integrity": "sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-typescript": "^7.13.0" - } - }, - "@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", - "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.0", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.0", - "@babel/types": "^7.13.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - } - }, - "@babel/types": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.12.tgz", - "integrity": "sha512-K4nY2xFN4QMvQwkQ+zmBDp6ANMbVNw6BbxWmYA4qNjhR9W+Lj/8ky5MEY2Me5r+B2c6/v6F53oMndG+f9s3IiA==", - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@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": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - } - } - }, - "@reach/auto-id": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.10.5.tgz", - "integrity": "sha512-we4/bwjFxJ3F+2eaddQ1HltbKvJ7AB8clkN719El7Zugpn/vOjfPMOVUiBqTmPGLUvkYrq4tpuFwLvk2HyOVHg==", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/descendants": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.10.5.tgz", - "integrity": "sha512-8HhN4DwS/HsPQ+Ym/Ft/XJ1spXBYdE8hqpnbYR9UcU7Nx3oDbTIdhjA6JXXt23t5avYIx2jRa8YHCtVKSHuiwA==", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/disclosure": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/disclosure/-/disclosure-0.10.5.tgz", - "integrity": "sha512-DCae28vcL7wXJNt8hySI2uaowEJ6KPDJ9U14xQMkMs0/lH7Tz8PoAO3llf7csEXk/4kzjnDpkyobDiEV3pz05g==", - "requires": { - "@reach/auto-id": "0.10.5", - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/menu-button": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/menu-button/-/menu-button-0.10.5.tgz", - "integrity": "sha512-PQzFzexk9K7Q5qTGmXcg3qYp+F36H0MaeyzybR5t4lB1e56nAh1u/C2bocwpHssIoy25xOR8Nu+LVMVf6k6cUw==", - "requires": { - "@reach/auto-id": "0.10.5", - "@reach/descendants": "0.10.5", - "@reach/popover": "0.10.5", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - } - }, - "@reach/observe-rect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", - "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" - }, - "@reach/popover": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.10.5.tgz", - "integrity": "sha512-S+qWIsjrN1yMpHjgELhjpdGc4Q3q1plJtXBGGQRxUAjmCUA/5OY7t5w5C8iqMNAEBwCvYXKvK/pLcXFxxLykSw==", - "requires": { - "@reach/portal": "0.10.5", - "@reach/rect": "0.10.5", - "@reach/utils": "0.10.5", - "tabbable": "^4.0.0", - "tslib": "^2.0.0" - } - }, - "@reach/portal": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.10.5.tgz", - "integrity": "sha512-K5K8gW99yqDPDCWQjEfSNZAbGOQWSx5AN2lpuR1gDVoz4xyWpTJ0k0LbetYJTDVvLP/InEcR7AU42JaDYDCXQw==", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/rect": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.10.5.tgz", - "integrity": "sha512-JBKs2HniYecq5zLO6UFReX28SUBPM3n0aizdNgHuvwZmDcTfNV4jsuJYQLqJ+FbCQsrSHkBxKZqWpfGXY9bUEg==", - "requires": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - } - }, - "@reach/tabs": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/tabs/-/tabs-0.10.5.tgz", - "integrity": "sha512-oQJxQ9FwFsXo2HxEzJxFU/wP31bPVh4VU54NlhHW9f49uofyYkIKBbAhdF0Zb3TnaFp4cGKPHX39pXBYGPDkAQ==", - "requires": { - "@reach/auto-id": "0.10.5", - "@reach/descendants": "0.10.5", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - } - }, - "@reach/utils": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.10.5.tgz", - "integrity": "sha512-5E/xxQnUbmpI/LrufBAOXjunl96DnqX6B4zC2MO2KH/dRzLug5gM5VuOwV26egsp0jvsSPxojwciOhS43px3qw==", - "requires": { - "@types/warning": "^3.0.0", - "tslib": "^2.0.0", - "warning": "^4.0.3" - } - }, - "@styled-system/background": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz", - "integrity": "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/border": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz", - "integrity": "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/color": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz", - "integrity": "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz", - "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==", - "requires": { - "object-assign": "^4.1.1" - } - }, - "@styled-system/css": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz", - "integrity": "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==" - }, - "@styled-system/flexbox": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz", - "integrity": "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/grid": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz", - "integrity": "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/layout": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz", - "integrity": "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/position": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz", - "integrity": "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/shadow": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz", - "integrity": "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/space": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz", - "integrity": "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/typography": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz", - "integrity": "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/variant": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz", - "integrity": "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==", - "requires": { - "@styled-system/core": "^5.1.2", - "@styled-system/css": "^5.1.5" - } - }, - "@tlon/indigo-light": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@tlon/indigo-light/-/indigo-light-1.0.7.tgz", - "integrity": "sha512-xO8hj2Ak6cEYe2QCM3w7UuaSB8ubg6G0G6/OkPVMVrz6b5ztccZmkbmYCYJ/Ot6976lGzKFsWFKRUhwRgCHfHQ==" - }, - "@tlon/indigo-react": { - "version": "1.2.22", - "resolved": "https://registry.npmjs.org/@tlon/indigo-react/-/indigo-react-1.2.22.tgz", - "integrity": "sha512-8w2TkYicch+R0kkZT+MZ4oG0pIJFNjhmVlbXgqyXhOCPRJB2WrAh6OM5Cbb389r7lA+CXXfu3Nx7Rdiuxjf/vg==", - "requires": { - "@reach/menu-button": "^0.10.5", - "react": "^16.13.1", - "tslib": "^2.0.1" - } - }, - "@tlon/sigil-js": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@tlon/sigil-js/-/sigil-js-1.4.3.tgz", - "integrity": "sha512-IaJUvAgXRmPFj5JA/MDfd+b+RFDhGdiMLfzJZKuFIQyl3Dl/3cC9HdDLCYSoK4GBTu3gZqoqi6wxZl5Xia/cSw==", - "requires": { - "invariant": "^2.2.4", - "svgson": "^4.0.0", - "transformation-matrix": "2.1.1" - } - }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/history": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.9.tgz", - "integrity": "sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==" - }, - "@types/lodash": { - "version": "4.14.171", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", - "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "@types/node": { - "version": "14.14.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.36.tgz", - "integrity": "sha512-kjivUwDJfIjngzbhooRnOLhGYz6oRFi+L+EpMjxroDYXwDw9lHrJJ43E+dJ6KAd3V3WxWAJ/qZE9XKYHhjPOFQ==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "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==", - "dev": true - }, - "@types/react": { - "version": "17.0.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.15.tgz", - "integrity": "sha512-uTKHDK9STXFHLaKv6IMnwp52fm0hwU+N89w/p9grdUqcFA6WuqDyPhaWopbNyE1k/VhgzmHl8pu1L4wITtmlLw==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "17.0.9", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.9.tgz", - "integrity": "sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-router": { - "version": "5.1.16", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.16.tgz", - "integrity": "sha512-8d7nR/fNSqlTFGHti0R3F9WwIertOaaA1UEB8/jr5l5mDMOs4CidEgvvYMw4ivqrBK+vtVLxyTj2P+Pr/dtgzg==", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*" - } - }, - "@types/react-router-dom": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.8.tgz", - "integrity": "sha512-03xHyncBzG0PmDmf8pf3rehtjY0NpUj7TIN46FrT5n1ZWHPZvXz32gUyNboJ+xsL8cpg8bQVLcllptcQHvocrw==", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/styled-components": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.11.tgz", - "integrity": "sha512-u8g3bSw9KUiZY+S++gh+LlURGraqBe3MC5I5dygrNjGDHWWQfsmZZRTJ9K9oHU2CqWtxChWmJkDI/gp+TZPQMw==", - "dev": true, - "requires": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "@types/tapable": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz", - "integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.0.tgz", - "integrity": "sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=" - }, - "@types/webpack": { - "version": "4.41.27", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.27.tgz", - "integrity": "sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - } - }, - "@types/webpack-env": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.2.tgz", - "integrity": "sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw==", - "dev": true - }, - "@types/webpack-sources": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz", - "integrity": "sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "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 - } - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@welldone-software/why-did-you-render": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@welldone-software/why-did-you-render/-/why-did-you-render-6.1.1.tgz", - "integrity": "sha512-BMFp33T4MC27qvCWsI1SqwZCxIlxoQXsPQFdGLDsPSg7sgoWX4Gzj0+hlKVrWrCBiIxi7gP2JcS9IK6CZzk8mg==", - "dev": true, - "requires": { - "lodash": "^4" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@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==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "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-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "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" - }, - "dependencies": { - "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 - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "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" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argon2-wasm": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/argon2-wasm/-/argon2-wasm-0.9.0.tgz", - "integrity": "sha512-bt5xqrDt5FnA1gdLLouOwi2NN1h9BeML8DmKth7CCYhygoXUEDeIxEMB++q+CUPQ8U5gju065Z0MjI+hVSXX7A==" - }, - "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" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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" - }, - "dependencies": { - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - } - }, - "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==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", - "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.0", - "@babel/helper-define-polyfill-provider": "^0.1.5", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", - "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5" - } - }, - "babel-plugin-root-import": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-root-import/-/babel-plugin-root-import-6.6.0.tgz", - "integrity": "sha512-SPzVOHd7nDh5loZwZBxtX/oOu1MXeKjTkz+1VnnzLWC0dk8sJIGC2IDQ2uWIBjE5mUtXlQ35MTHSqN0Xn7qHrg==", - "dev": true, - "requires": { - "slash": "^3.0.0" - } - }, - "babel-plugin-styled-components": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.12.0.tgz", - "integrity": "sha512-FEiD7l5ZABdJPpLssKXjBUJMYqzbcNzBowfXDCdJhOpbhWiewapUaY+LZGT8R4Jg2TwOjGjG4RKeyrO5p9sBkA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.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=" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "base-x": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz", - "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - }, - "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==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bip174": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.0.1.tgz", - "integrity": "sha512-i3X26uKJOkDTAalYAp0Er+qGMDhrbbh2o93/xiPyAN2s25KrClSpe3VXo/7mNJoqA5qfko8rLS2l3RWZgYmjKQ==" - }, - "bip32": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-1.0.4.tgz", - "integrity": "sha512-8T21eLWylZETolyqCPgia+MNp+kY37zFr7PTFDTPObHeNi9JlfG4qGIh8WzerIJidtwoK+NsWq2I5i66YfHoIw==", - "requires": { - "bs58check": "^2.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.0.0", - "typeforce": "^1.11.5", - "wif": "^2.0.6" - } - }, - "bip39": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz", - "integrity": "sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg==", - "requires": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "bitcoin-address-validation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bitcoin-address-validation/-/bitcoin-address-validation-2.0.1.tgz", - "integrity": "sha512-S3VEoqW4w/92QKKZhmraw84oUXc35i++hOknY9lxy9p10MXdwmhPjTNuKP37dm8YttYr5elUQE3jumc9l/PR5w==", - "requires": { - "base-x": "^3.0.8", - "bech32": "^2.0.0", - "sha.js": "^2.4.11" - }, - "dependencies": { - "bech32": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" - } - } - }, - "bitcoin-ops": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz", - "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow==" - }, - "bitcoinjs-lib": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.2.0.tgz", - "integrity": "sha512-5DcLxGUDejgNBYcieMIUfjORtUeNWl828VWLHJGVKZCb4zIS1oOySTUr0LGmcqJBQgTBz3bGbRQla4FgrdQEIQ==", - "requires": { - "bech32": "^1.1.2", - "bip174": "^2.0.1", - "bip32": "^2.0.4", - "bip66": "^1.1.0", - "bitcoin-ops": "^1.4.0", - "bs58check": "^2.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.3", - "merkle-lib": "^2.0.10", - "pushdata-bitcoin": "^1.0.1", - "randombytes": "^2.0.1", - "tiny-secp256k1": "^1.1.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.0.4", - "wif": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "10.12.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", - "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==" - }, - "bip32": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz", - "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==", - "requires": { - "@types/node": "10.12.18", - "bs58check": "^2.1.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "tiny-secp256k1": "^1.1.3", - "typeforce": "^1.11.5", - "wif": "^2.0.6" - } - } - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "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==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "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 - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - } - } - }, - "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==", - "dev": true, - "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=" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "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": { - "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==", - "dev": true - }, - "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==", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "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=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "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" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "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 - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "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.30001204", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz", - "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==", - "dev": true - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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==", - "dev": true, - "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" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "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" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.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" - } - }, - "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 - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "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.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "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 - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "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=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "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" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js-compat": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz", - "integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==", - "dev": true, - "requires": { - "browserslist": "^4.16.3", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "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==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "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-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - } - }, - "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==", - "dev": true, - "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" - } - }, - "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-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "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-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "csstype": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", - "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", - "dev": true - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-equal": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", - "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deep-rename-keys": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/deep-rename-keys/-/deep-rename-keys-0.2.1.tgz", - "integrity": "sha1-7eeFN9emaivmFRfir5Vtf1ij8dg=", - "requires": { - "kind-of": "^3.0.2", - "rename-keys": "^1.1.2" - } - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "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": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "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" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", - "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==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "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-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", - "dev": true - } - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.700", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.700.tgz", - "integrity": "sha512-wQtaxVZzpOeCjW1CGuC5W3bYjE2jglvk076LcTautBOB9UtHztty7wNzjVsndiMcSsdUsdMy5w76w5J1U7OPTQ==", - "dev": true - }, - "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" - } - }, - "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==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.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" - }, - "dependencies": { - "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 - } - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "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==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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=" - }, - "eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "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==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "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": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "globals": { - "version": "13.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz", - "integrity": "sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "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" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "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 - }, - "eslint-plugin-react": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", - "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "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" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.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 - } - } - }, - "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 - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "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 - } - } - }, - "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" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "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": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "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 - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" - }, - "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-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 - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "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" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.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==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "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==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.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" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "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" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "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" - } - }, - "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" - } - } - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "follow-redirects": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", - "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "formik": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.6.tgz", - "integrity": "sha512-Kxk2zQRafy56zhLmrzcbryUpMBvT0tal5IvcifK5+4YNGelKsnrODFJ0sZQRMQboblWNym4lAW3bt+tf2vApSA==", - "requires": { - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.14", - "lodash-es": "^4.17.14", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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 - }, - "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==", - "dev": true - }, - "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==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.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==", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "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": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "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": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "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" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - }, - "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==", - "dev": true - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "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" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - } - }, - "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - } - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "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=", - "dev": true - }, - "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 - }, - "husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", - "dev": true - }, - "i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=" - }, - "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" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "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 - }, - "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": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.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 - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "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==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.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==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "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" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "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==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "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=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "js-sha256": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", - "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "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" - } - }, - "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==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "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 - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "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" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "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" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.0.0.tgz", - "integrity": "sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==", - "dev": true, - "requires": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.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.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "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 - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "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" - } - }, - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "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" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "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" - } - } - } - }, - "listr2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.10.0.tgz", - "integrity": "sha512-eP40ZHihu70sSmqFNbNy2NL1YwImmlMmPh9WO5sLmPDleurMHt3n+SwEWNu2kzKScexZnkyFtc1VI0z/TGlmpw==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.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" - } - }, - "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 - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "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" - } - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "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" - } - }, - "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-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "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=" - }, - "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.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.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.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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" - } - } - } - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true - }, - "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" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-to-jsx": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.1.2.tgz", - "integrity": "sha512-O8DMCl32V34RrD+ZHxcAPc2+kYytuDIoQYjY36RVdsLK7uHjgNVvFec4yv0X6LgB4YEZgSvK5QtFi5YVqEpoMA==" - }, - "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" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "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==", - "dev": true - }, - "merkle-lib": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz", - "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", - "dev": true, - "requires": { - "mime-db": "1.46.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 - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "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==" - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "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==" - }, - "mousetrap": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz", - "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA==" - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "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" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - } - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "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 - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "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==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - } - } - }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", - "dev": true - }, - "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": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - }, - "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - } - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "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==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", - "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.0", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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" - } - }, - "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==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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" - } - }, - "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==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.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.0" - } - }, - "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==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" - } - }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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" - } - }, - "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==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "omit-deep": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/omit-deep/-/omit-deep-0.3.0.tgz", - "integrity": "sha1-IcivNJm8rdKWUaIyy8rLxSRF6+w=", - "requires": { - "is-plain-object": "^2.0.1", - "unset-value": "^0.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "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" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.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" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.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=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "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-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" - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.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==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "dev": true, - "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" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "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=", - "dev": true - }, - "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.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "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" - } - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "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" - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "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" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "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.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", - "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", - "dev": true - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "requires": { - "asap": "~2.0.6" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prompt": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.1.0.tgz", - "integrity": "sha512-ec1vUPXCplDBDUVD8uPa3XGA+OzLrO40Vxv3F1uxoiZGkZhdctlK2JotcHq5X6ExjocDOGwGdCSXloGNyU5L1Q==", - "requires": { - "colors": "^1.1.2", - "read": "1.0.x", - "revalidator": "0.1.x", - "utile": "0.3.x", - "winston": "2.x" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "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" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "pushdata-bitcoin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz", - "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=", - "requires": { - "bitcoin-ops": "^1.3.0" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - } - } - }, - "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" - }, - "react-hot-loader": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.0.tgz", - "integrity": "sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==", - "dev": true, - "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^3.3.0", - "loader-utils": "^1.1.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.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 - } - } - }, - "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-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, - "react-router": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", - "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", - "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", - "requires": { - "mute-stream": "~0.0.4" - } - }, - "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==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "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==", - "dev": true, - "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.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "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=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "rename-keys": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/rename-keys/-/rename-keys-1.2.0.tgz", - "integrity": "sha512-U7XpAktpbSgHTRSNRrjKSrjYkZKuhUukfoBlXWXUExCAqhzh1TU3BDRAfJmarcl5voKS+pbKU9MvyLWKZ4UEEg==" - }, - "renderkid": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", - "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", - "dev": true, - "requires": { - "css-select": "^2.0.2", - "dom-converter": "^0.2", - "htmlparser2": "^3.10.1", - "lodash": "^4.17.20", - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "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" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replace-in-file": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-4.3.1.tgz", - "integrity": "sha512-FqVvfmpqGTD2JRGI1JjJ86b24P17x/WWwGdxExeyJxnh/2rVQz2+jXfD1507UnnhEQw092X0u0DPCBf1WC4ooQ==", - "requires": { - "chalk": "^2.4.2", - "glob": "^7.1.6", - "yargs": "^15.0.2" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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" - } - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "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==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - } - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "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 - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - }, - "revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "requires": { - "glob": "^6.0.1" - } - }, - "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" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "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==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass": { - "version": "1.32.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", - "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", - "dev": true, - "requires": { - "chokidar": ">=2.0.0 <4.0.0" - } - }, - "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - } - }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "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" - } - }, - "secp256k1": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", - "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", - "requires": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.5.2", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.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" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "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" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "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" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "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 - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "dependencies": { - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - } - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^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" - } - }, - "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 - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "dev": true, - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - }, - "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" - } - } - } - }, - "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==", - "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==" - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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" - }, - "dependencies": { - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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" - } - }, - "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==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", - "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "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==" - } - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "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 - }, - "style-loader": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz", - "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.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" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "styled-components": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.2.3.tgz", - "integrity": "sha512-BlR+KrLW3NL1yhvEB+9Nu9Dt51CuOnHoxd+Hj+rYPdtyR8X11uIW9rvhpy3Dk4dXXBsiW1u5U78f00Lf/afGoA==", - "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": { - "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-system": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", - "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", - "requires": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgson": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/svgson/-/svgson-4.1.0.tgz", - "integrity": "sha512-DodISxHtdLKUghDYA+PGK4Qq350+CbBAkdvGLkBFSmWd9WKSg4dijgjB1IiRPTmsUCd+a7KYe+ILHtklYgQyzQ==", - "requires": { - "deep-rename-keys": "^0.2.1", - "omit-deep": "0.3.0", - "xml-reader": "2.4.3" - } - }, - "tabbable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz", - "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz", - "integrity": "sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ==", - "dev": true, - "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==", - "dev": true - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.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 - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "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 - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "tiny-secp256k1": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz", - "integrity": "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==", - "requires": { - "bindings": "^1.3.0", - "bn.js": "^4.11.8", - "create-hmac": "^1.1.7", - "elliptic": "^6.4.0", - "nan": "^2.13.2" - } - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "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-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "transformation-matrix": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/transformation-matrix/-/transformation-matrix-2.1.1.tgz", - "integrity": "sha512-74MoNHhwLVuzwaPDcAecFjSkOA9vwWqyOdkeB0Be8Jc/IWSS5SNZKapFllqzkTliqZptkvqX5CZnVeDvfhN8cw==" - }, - "ts-loader": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.2.0.tgz", - "integrity": "sha512-ebXBFrNyMSmbWgjnb3WBloUBK+VSx1xckaXsMXxlZRDqce/OPdYBVN5efB0W3V0defq0Gcy4YuzvPGqRgjj85A==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^2.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "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" - } - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "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-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 - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==" - }, - "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-0.1.2.tgz", - "integrity": "sha1-UGgQuGfyfCpabpsEgzYx9t5Y0xA=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "urbit-key-generation": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/urbit-key-generation/-/urbit-key-generation-0.19.0.tgz", - "integrity": "sha512-lWthsvbVUXfvMFdVewxeP6kAoObQ3+nYh+mZN7+oPVWPjjC94elBnDr4R+WcCfCdWkjzwYk+2hrw2y75ncsVyw==", - "requires": { - "argon2-wasm": "^0.9.0", - "bip32": "^1.0.2", - "bip39": "^2.5.0", - "bs58check": "^2.1.2", - "js-sha256": "^0.9.0", - "keccak": "^1.4.0", - "secp256k1": "^3.5.2", - "tweetnacl": "^1.0.0", - "urbit-ob": "4.1.4" - }, - "dependencies": { - "urbit-ob": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-4.1.4.tgz", - "integrity": "sha512-9sa7L+NUvlhP+okIMNyu8Bxn5VNDGo6AGVvCgOpEghqrEayk2uEoPeDV+ghGsCt1bA+4fjFMa7RG5ybZjgrtWQ==", - "requires": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - } - } - }, - "urbit-ob": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-5.0.1.tgz", - "integrity": "sha512-qGNAwu87XNkW3g8ah4fUwmh2EKXtsdhEbyEiE5qX4Op17rhLH3HSkvu8g9z+MhqX51Uz9sf8ktvqJj/IRwETIQ==", - "requires": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "urbit-sigil-js": { - "version": "1.3.13", - "resolved": "https://registry.npmjs.org/urbit-sigil-js/-/urbit-sigil-js-1.3.13.tgz", - "integrity": "sha512-g6tC7K65O/4rMCd9/Cy+BVyVSzC3GNjfd0R4EaXEl4aXnjRIiIkD0xkZl56yzLwNk6W9bniDQJALcGPxY3IROw==", - "requires": { - "invariant": "^2.2.4", - "react": "^16.8.6", - "svgson": "^4.0.0", - "transformation-matrix": "2.1.1" - } - }, - "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" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utile": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", - "integrity": "sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=", - "requires": { - "async": "~0.9.0", - "deep-equal": "~0.2.1", - "i": "0.3.x", - "mkdirp": "0.x.x", - "ncp": "1.0.x", - "rimraf": "2.x.x" - }, - "dependencies": { - "ncp": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", - "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=" - } - } - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "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 - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "varuint-bitcoin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", - "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "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==", - "dev": true - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.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 - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.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 - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.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" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "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==", - "dev": true, - "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-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wif": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=", - "requires": { - "bs58check": "<3.0.0" - } - }, - "winston": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.5.tgz", - "integrity": "sha512-TWoamHt5yYvsMarGlGEQE59SbJHqGsZV8/lwC+iCcGeAe0vUaOh+Lv6SYM17ouzC/a/LB1/hz/7sxFBtlu1l4A==", - "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - }, - "dependencies": { - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - } - } - }, - "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 - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.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==", - "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==", - "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==" - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-lexer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xml-lexer/-/xml-lexer-0.2.2.tgz", - "integrity": "sha1-UYGTpKozTVj8fSSLVJB5uJkH4EY=", - "requires": { - "eventemitter3": "^2.0.0" - } - }, - "xml-reader": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/xml-reader/-/xml-reader-2.4.3.tgz", - "integrity": "sha1-n4EMr3xCWlqvuEixxFEDyecddTA=", - "requires": { - "eventemitter3": "^2.0.0", - "xml-lexer": "^0.2.2" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } -} diff --git a/pkg/btc-wallet/package.json b/pkg/btc-wallet/package.json deleted file mode 100644 index 548132093..000000000 --- a/pkg/btc-wallet/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "name": "btc-wallet", - "version": "0.1.0", - "main": "node install.js", - "private": true, - "scripts": { - "start": "webpack-dev-server --config config/webpack.dev.js", - "build:dev": "cross-env NODE_ENV=production webpack --config config/webpack.dev.js", - "build:prod": "cross-env NODE_ENV=production webpack --config config/webpack.prod.js" - }, - "author": "Tlon Corp", - "license": "MIT", - "devDependencies": { - "@babel/core": "^7.9.0", - "@babel/plugin-proposal-class-properties": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.5", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.10.5", - "@babel/preset-env": "^7.9.5", - "@babel/preset-react": "^7.9.4", - "@babel/preset-typescript": "^7.13.0", - "@types/lodash": "^4.14.171", - "@types/react-dom": "^17.0.9", - "@types/react-router-dom": "^5.1.8", - "@types/styled-components": "^5.1.11", - "@types/webpack-env": "^1.16.2", - "@welldone-software/why-did-you-render": "^6.1.1", - "babel-loader": "^8.1.0", - "babel-plugin-root-import": "^6.5.0", - "clean-webpack-plugin": "^3.0.0", - "cross-env": "^7.0.2", - "eslint": "^7.29.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-react": "^7.24.0", - "file-loader": "^6.0.0", - "html-webpack-plugin": "^4.2.0", - "husky": "^6.0.0", - "lint-staged": "^11.0.0", - "prettier": "^2.3.1", - "react-hot-loader": "^4.12.21", - "sass": "^1.26.5", - "sass-loader": "^8.0.2", - "ts-loader": "8.2.0", - "typescript": "^4.3.5", - "webpack": "^4.43.0", - "webpack-cli": "^3.3.11", - "webpack-dev-server": "^3.10.3" - }, - "dependencies": { - "@babel/runtime": "^7.10.5", - "@reach/disclosure": "^0.10.5", - "@reach/menu-button": "^0.10.5", - "@reach/tabs": "^0.10.5", - "@tlon/indigo-light": "^1.0.7", - "@tlon/indigo-react": "^1.2.22", - "@tlon/sigil-js": "^1.4.3", - "bip39": "^2.5.0", - "bitcoin-address-validation": "^2.0.1", - "bitcoinjs-lib": "^5.2.0", - "bs58check": "^2.1.2", - "buffer": "^6.0.3", - "classnames": "^2.2.6", - "css-loader": "^3.5.3", - "formik": "^2.2.0", - "fs-extra": "^8.1.0", - "lodash": "^4.17.11", - "markdown-to-jsx": "^7.1.2", - "moment": "^2.20.1", - "mousetrap": "^1.6.3", - "mv": "^2.1.1", - "promise": "^8.0.3", - "prompt": "^1.0.0", - "react": "^16.14.0", - "react-dom": "^16.14.0", - "react-router-dom": "^5.0.0", - "replace-in-file": "^4.1.1", - "style-loader": "^1.2.1", - "styled-components": "^5.2.3", - "styled-system": "^5.1.5", - "urbit-key-generation": "^0.19.0", - "urbit-ob": "^5.0.0", - "urbit-sigil-js": "^1.3.13" - }, - "resolutions": { - "natives": "1.1.3" - }, - "lint-staged": { - "*.js": "eslint --cache --fix", - "*.{js,css,md}": "prettier --write" - } -} diff --git a/pkg/btc-wallet/public/index.html b/pkg/btc-wallet/public/index.html deleted file mode 100644 index 3bd422321..000000000 --- a/pkg/btc-wallet/public/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - Wallet - - - - - - - - - -
-
- - - - diff --git a/pkg/btc-wallet/src/App.tsx b/pkg/btc-wallet/src/App.tsx deleted file mode 100644 index fb9d0168e..000000000 --- a/pkg/btc-wallet/src/App.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { BrowserRouter } from 'react-router-dom'; -import { ThemeProvider } from 'styled-components'; -import light from './themes/light'; -import { Box, Reset } from '@tlon/indigo-react'; -import StartupModal from './components/StartupModal'; -import { useSettings } from './hooks/useSettings'; -import Body from './components/Body'; -import Header from './components/Header'; - -const App: React.FC = () => { - const { loaded, wallet, provider, scanProgress } = useSettings(); - const scanning = scanProgress?.main !== null || scanProgress?.change !== null; - const blur = !loaded || scanning ? false : !(wallet && provider); - - return ( - - - - {loaded && !scanning ? : null} - -
- - - - - ); -}; - -export default App; diff --git a/pkg/btc-wallet/src/components/Balance.tsx b/pkg/btc-wallet/src/components/Balance.tsx deleted file mode 100644 index 2fcab6afd..000000000 --- a/pkg/btc-wallet/src/components/Balance.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import React, { useState } from 'react'; -import { Row, Text, Button, Col } from '@tlon/indigo-react'; -import Send from './Send/Send'; -import CurrencyPicker from './CurrencyPicker'; -import { copyToClipboard, satsToCurrency } from '../lib/util'; -import { useSettings } from '../hooks/useSettings'; -import { api } from '../lib/api'; - -const Balance = () => { - const { - address, - confirmedBalance: sats, - unconfirmedBalance: unconfirmedSats, - denomination, - currencyRates, - setPsbt, - setFee, - setError, - scanProgress, - } = useSettings(); - const [sending, setSending] = useState(false); - const [copiedButton, setCopiedButton] = useState(false); - const [copiedString, setCopiedString] = useState(false); - const scanning = scanProgress?.main !== null || scanProgress?.change !== null; - - const copyAddress = async (arg: 'string' | 'button') => { - await copyToClipboard(address); - api.btcWalletCommand({ 'gen-new-address': null }); - - if (arg === 'button') { - setCopiedButton(true); - setTimeout(() => { - setCopiedButton(false); - }, 2000); - } else if (arg === 'string') { - setCopiedString(true); - setTimeout(() => { - setCopiedString(false); - }, 2000); - } - }; - - const unconfirmedString = unconfirmedSats ? ` (${unconfirmedSats}) ` : ''; - - const value = satsToCurrency(sats, denomination, currencyRates); - const sendDisabled = sats === 0; - const addressText = - address === null ? '' : address.slice(0, 6) + '...' + address.slice(-6); - - const conversion = currencyRates[denomination]?.last; - - return ( - <> - {sending ? ( - { - setSending(false); - setPsbt(''); - setFee(0); - setError(''); - }} - /> - ) : ( - - - - Balance - - copyAddress('string')} - > - {copiedString ? 'copied' : addressText} - - - - - - {value} - - {scanning ? ( - - - - Balance will be updated shortly: - - - - - {scanProgress.main === null ? 0 : scanProgress.main} main - wallet addresses scanned - - - - {scanProgress.change === null ? 0 : scanProgress.change}{' '} - change wallet addresses scanned - - - ) : ( - {`${sats}${unconfirmedString} sats`} - )} - - - - - - - )} - - ); -}; - -export default Balance; diff --git a/pkg/btc-wallet/src/components/Body.tsx b/pkg/btc-wallet/src/components/Body.tsx deleted file mode 100644 index 0f2bdde38..000000000 --- a/pkg/btc-wallet/src/components/Body.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { Box, LoadingSpinner, Col } from '@tlon/indigo-react'; -import { Switch, Route } from 'react-router-dom'; -import Balance from './Balance'; -import Transactions from './Transactions/Transactions'; -import Warning from './Warning'; -import Settings from './Settings'; -import { useSettings } from '../hooks/useSettings'; - -const Body: React.FC = () => { - const { loaded, showWarning: warning } = useSettings(); - const cardWidth = window.innerWidth <= 475 ? '350px' : '400px'; - return !loaded ? ( - - - - ) : ( - - - - - - - - - {!warning ? null : } - - - - - - ); -}; - -export default Body; diff --git a/pkg/btc-wallet/src/components/CurrencyPicker.tsx b/pkg/btc-wallet/src/components/CurrencyPicker.tsx deleted file mode 100644 index 7e3498d26..000000000 --- a/pkg/btc-wallet/src/components/CurrencyPicker.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; -import { Icon, Row, Text } from '@tlon/indigo-react'; -import { api } from '../lib/api'; -import { useSettings } from '../hooks/useSettings'; - -const CurrencyPicker = () => { - const { denomination, currencyRates } = useSettings(); - const switchCurrency = () => { - let newCurrency; - if (denomination === 'BTC') { - if ((currencyRates as any)['USD']) { - newCurrency = 'USD'; - } - } else if (denomination === 'USD') { - newCurrency = 'BTC'; - } - console.log({ newCurrency, denomination }); - let setCurrency = { - 'put-entry': { - desk: window.desk, - value: newCurrency, - 'entry-key': 'currency', - 'bucket-key': 'btc-wallet', - }, - }; - api.settingsEvent(setCurrency); - }; - - return ( - switchCurrency()}> - - - {denomination} - - - ); -}; - -export default CurrencyPicker; diff --git a/pkg/btc-wallet/src/components/Error.tsx b/pkg/btc-wallet/src/components/Error.tsx deleted file mode 100644 index cf41266df..000000000 --- a/pkg/btc-wallet/src/components/Error.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react'; -import { Text } from '@tlon/indigo-react'; - -enum ErrorTypes { - 'cant-pay-ourselves' = 'Cannot pay ourselves', - 'no-comets' = 'Cannot pay comets', - 'no-dust' = 'Cannot send dust', - 'tx-being-signed' = 'Cannot pay when transaction is being signed', - 'insufficient-balance' = 'Insufficient confirmed balance', - 'broadcast-fail' = 'Transaction broadcast failed', - 'invalid-master-ticker' = 'Invalid master ticket', - 'invalid-signed' = 'Invalid signed bitcoin transaction', -} - -const Error = ({ - error, - fontSize, - ...rest -}: { - error: string; - fontSize?: string; -}) => ( - - { - (ErrorTypes as any)[ - Object.keys(ErrorTypes).filter((et) => et === error)[0] - ] - } - -); - -export default Error; diff --git a/pkg/btc-wallet/src/components/Header.tsx b/pkg/btc-wallet/src/components/Header.tsx deleted file mode 100644 index 4f32d9d41..000000000 --- a/pkg/btc-wallet/src/components/Header.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from 'react'; -import { Box, Icon, Row, Text } from '@tlon/indigo-react'; -import { Link } from 'react-router-dom'; -import { useSettings } from '../hooks/useSettings'; - -const Header = () => { - const { provider } = useSettings(); - - let connection = null; - if (!(provider && provider.connected)) { - connection = ( - - Provider Offline - - ); - } - - return ( - - - - - - - Bitcoin - - - - {connection} - - - - - - - - - - - - - ); -}; - -export default Header; diff --git a/pkg/btc-wallet/src/components/ProviderModal.tsx b/pkg/btc-wallet/src/components/ProviderModal.tsx deleted file mode 100644 index 73c0d57c5..000000000 --- a/pkg/btc-wallet/src/components/ProviderModal.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { - Box, - Text, - Button, - StatelessTextInput, - Icon, - Row, - LoadingSpinner, -} from '@tlon/indigo-react'; -import { isValidPatp } from 'urbit-ob'; -import { api } from '../lib/api'; -import { useSettings } from '../hooks/useSettings'; - -enum providerStatuses { - checking, - failed, - ready, - initial = '', -} - -const ProviderModal = () => { - const { providerPerms } = useSettings(); - const [providerStatus, setProviderStatus] = useState( - providerStatuses.initial - ); - const [potentialProvider, setPotentialProvider] = useState(null); - const [provider, setProvider] = useState(null); - const [connecting, setConnecting] = useState(false); - - const checkProvider = (e: React.ChangeEvent) => { - // TODO: loading states - setProviderStatus(providerStatuses.initial); - let givenProvider = e.target.value; - if (isValidPatp(givenProvider)) { - let command = { - 'check-provider': givenProvider, - }; - setPotentialProvider(givenProvider); - setProviderStatus(providerStatuses.checking); - api.btcWalletCommand(command); - setTimeout(() => { - setProviderStatus(providerStatuses.failed); - }, 5000); - } - setProvider(givenProvider); - }; - - const submitProvider = () => { - if (providerStatus === providerStatuses.ready) { - let command = { - 'set-provider': provider, - }; - api.btcWalletCommand(command); - setConnecting(true); - } - }; - - useEffect(() => { - if (providerStatus !== providerStatuses.ready) { - if (providerPerms.provider === provider && providerPerms.permitted) { - setProviderStatus(providerStatuses.ready); - } - } - }, [providerStatus, providerPerms, provider, setProviderStatus]); - - let workingNode = null; - let workingColor = null; - let workingBg = null; - if (providerStatus === providerStatuses.ready) { - workingColor = 'green'; - workingBg = 'veryLightGreen'; - workingNode = ( - - - {provider} is a working provider node - - - ); - } else if (providerStatus === providerStatuses.failed) { - workingColor = 'red'; - workingBg = 'veryLightRed'; - workingNode = ( - - - {potentialProvider} is not a working provider node - - - ); - } - - return ( - - - - - Step 1 of 2: Set up Bitcoin Provider Node - - - - - In order to use the Bitcoin wallet on your ship you'll need to - set a provider node. A provider node is an urbit ship which maintains - a synced Bitcoin ledger. - - {' '} - Learn More - - - - - - Provider Node - - - - ) => - checkProvider(e) - } - /> - {providerStatus === providerStatuses.checking ? ( - - ) : null} - - {workingNode} - - - {connecting ? : null} - - - ); -}; - -export default ProviderModal; diff --git a/pkg/btc-wallet/src/components/Send/BridgeInvoice.tsx b/pkg/btc-wallet/src/components/Send/BridgeInvoice.tsx deleted file mode 100644 index 0186bcc82..000000000 --- a/pkg/btc-wallet/src/components/Send/BridgeInvoice.tsx +++ /dev/null @@ -1,246 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - Box, - Icon, - StatelessTextInput as Input, - Row, - Text, - Button, - Col, - LoadingSpinner, -} from '@tlon/indigo-react'; -import Sigil from '../Sigil'; -import * as bitcoin from 'bitcoinjs-lib'; -import { isValidPatp } from 'urbit-ob'; -import Sent from './Sent'; -import Error from '../Error'; -import { satsToCurrency } from '../../lib/util'; -import { useSettings } from '../../hooks/useSettings'; -import { api } from '../../lib/api'; - -type Props = { - payee: string; - stopSending: () => void; - satsAmount: number; -}; - -const BridgeInvoice: React.FC = ({ payee, stopSending, satsAmount }) => { - const { - error, - currencyRates, - fee, - broadcastSuccess, - denomination, - psbt, - history, - } = useSettings(); - const [txHex, setTxHex] = useState(''); - const [ready, setReady] = useState(false); - const [historyLength, setHistoryLength] = useState(0); - const [localError, setLocalError] = useState(''); - const [broadcasting, setBroadcasting] = useState(false); - const invoiceRef = useRef(); - - useEffect(() => { - if (broadcasting && localError !== '') { - setBroadcasting(false); - } - if (error !== '') { - setLocalError(error); - } - }, [error, broadcasting, setBroadcasting]); - - useEffect(() => { - window.open('https://bridge.urbit.org/?kind=btc&utx=' + psbt); - }, []); - - useEffect(() => { - if (historyLength === 0) { - setHistoryLength(history.length); - } - if (broadcasting && history.length > historyLength) { - setBroadcasting(false); - stopSending(); - } - }, [history]); - - const broadCastTx = (hex: string) => { - let command = { - 'broadcast-tx': hex, - }; - return api.btcWalletCommand(command); - }; - - const sendBitcoin = (hex: string) => { - try { - bitcoin.Transaction.fromHex(hex); - broadCastTx(hex); - setBroadcasting(true); - } catch (e) { - setLocalError('invalid-signed'); - setBroadcasting(false); - } - }; - - const checkTxHex = (e: React.ChangeEvent) => { - // TODO: validate this hex with something other than length check. - if (e.target.value.length > 0) { - setTxHex(e.target.value); - setReady(true); - setLocalError(''); - } else { - setLocalError('Invalid transaction hex'); - } - }; - - let inputColor = 'black'; - let inputBg = 'white'; - let inputBorder = 'lightGray'; - - if (localError !== '') { - inputColor = 'red'; - inputBg = 'veryLightRed'; - inputBorder = 'red'; - } - - const isShip = isValidPatp(payee); - - const icon = isShip ? ( - - ) : ( - - - - ); - - return ( - <> - {broadcastSuccess ? ( - - ) : ( - - - stopSending()} /> - - - - - {satsToCurrency(satsAmount, denomination, currencyRates)} - - - - {`${satsAmount} sats`} - - - {`Fee: ${satsToCurrency( - fee, - denomination, - currencyRates - )} (${fee} sats)`} - - - - You are paying - - - - {icon} - - {payee} - - - - - - Bridge signed transaction - - - - - Copy the signed transaction from Bridge - - - ) => checkTxHex(e)} - /> - {localError !== '' && ( - - - - )} - - - { - // @ts-ignore - broadcasting ? : null - } - - - )} - - ); -}; - -export default BridgeInvoice; diff --git a/pkg/btc-wallet/src/components/Send/ExternalInvoice.tsx b/pkg/btc-wallet/src/components/Send/ExternalInvoice.tsx deleted file mode 100644 index e4270579d..000000000 --- a/pkg/btc-wallet/src/components/Send/ExternalInvoice.tsx +++ /dev/null @@ -1,298 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - Box, - Icon, - StatelessTextInput as Input, - Row, - Text, - Button, - Col, - LoadingSpinner, -} from '@tlon/indigo-react'; -import Sigil from '../Sigil'; -import * as bitcoin from 'bitcoinjs-lib'; -import { isValidPatp } from 'urbit-ob'; -import Sent from './Sent'; -import Error from '../Error'; -import { copyToClipboard, satsToCurrency } from '../../lib/util'; -import { useSettings } from '../../hooks/useSettings'; -import { api } from '../../lib/api'; - -type Props = { - payee: string; - stopSending: () => void; - satsAmount: number; -}; - -const ExternalInvoice: React.FC = ({ - payee, - stopSending, - satsAmount, -}) => { - const { - error, - currencyRates, - fee, - broadcastSuccess, - denomination, - psbt, - history, - } = useSettings(); - const [txHex, setTxHex] = useState(''); - const [ready, setReady] = useState(false); - const [historyLength, setHistoryLength] = useState(0); - const [localError, setLocalError] = useState(''); - const [broadcasting, setBroadcasting] = useState(false); - const invoiceRef = useRef(); - - useEffect(() => { - if (broadcasting && localError !== '') { - setBroadcasting(false); - } - if (error !== '') { - setLocalError(error); - } - }, [error, broadcasting, setBroadcasting]); - - useEffect(() => { - if (historyLength === 0) { - setHistoryLength(history.length); - } - if (broadcasting && history.length > historyLength) { - setBroadcasting(false); - stopSending(); - } - }, [history]); - - const broadCastTx = (hex: string) => { - let command = { - 'broadcast-tx': hex, - }; - return api.btcWalletCommand(command); - }; - - const sendBitcoin = (hex: string) => { - try { - bitcoin.Transaction.fromHex(hex); - broadCastTx(hex); - setBroadcasting(true); - } catch (e) { - setLocalError('invalid-signed'); - setBroadcasting(false); - } - }; - - const checkTxHex = (e: React.ChangeEvent) => { - // TODO: validate this hex with something other than length check. - if (e.target.value.length > 0) { - setTxHex(e.target.value); - setReady(true); - setLocalError(''); - } else { - setLocalError('Invalid transaction hex'); - } - }; - - const copyPsbt = () => { - copyToClipboard(psbt); - }; - - const downloadPsbtFile = () => { - const blob = new Blob([psbt]); - const downloadURL = URL.createObjectURL(blob); - const link = document.createElement('a'); - link.href = downloadURL; - link.setAttribute('download', 'urbit.psbt'); - document.body.appendChild(link); - link.click(); - link.parentNode.removeChild(link); - }; - - let inputColor = 'black'; - let inputBg = 'white'; - let inputBorder = 'lightGray'; - - if (localError !== '') { - inputColor = 'red'; - inputBg = 'veryLightRed'; - inputBorder = 'red'; - } - - const isShip = isValidPatp(payee); - - const icon = isShip ? ( - - ) : ( - - - - ); - - return ( - <> - {broadcastSuccess ? ( - - ) : ( - - - stopSending()} /> - - - - - {satsToCurrency(satsAmount, denomination, currencyRates)} - - - - {`${satsAmount} sats`} - - - {`Fee: ${satsToCurrency( - fee, - denomination, - currencyRates - )} (${fee} sats)`} - - - - You are paying - - - - {icon} - - {payee} - - - - - - Partially-signed Bitcoin Transaction (PSBT) - - - - - - - - - - - Signed Tx - - ) => - checkTxHex(e) - } - /> - {localError !== '' && ( - - - - )} - - - - {broadcasting ? : null} - - - )} - - ); -}; - -export default ExternalInvoice; diff --git a/pkg/btc-wallet/src/components/Send/FeePicker.tsx b/pkg/btc-wallet/src/components/Send/FeePicker.tsx deleted file mode 100644 index b84ef01b7..000000000 --- a/pkg/btc-wallet/src/components/Send/FeePicker.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import React, { useEffect, useRef } from 'react'; -import { - Box, - Text, - Col, - StatelessRadioButtonField as RadioButton, - Label, -} from '@tlon/indigo-react'; -import { FeeChoices, feeLevels } from './Send'; - -type Props = { - feeChoices: FeeChoices; - feeValue: number; - setFeeValue: React.Dispatch; - feeDismiss: () => void; -}; - -const FeePicker: React.FC = ({ - feeChoices, - feeValue, - setFeeValue, - feeDismiss, -}) => { - const modalRef = useRef(null); - const clickDismiss = (e: any) => { - if (modalRef && !modalRef.current.contains(e.target)) { - feeDismiss(); - } - }; - useEffect(() => { - document.addEventListener('click', clickDismiss); - return () => { - document.removeEventListener('click', clickDismiss); - }; - }, []); - - return ( - - - Transaction Speed - - - { - setFeeValue(feeLevels.low); - feeDismiss(); - }} - > - - - - { - setFeeValue(feeLevels.mid); - feeDismiss(); - }} - > - - - - { - setFeeValue(feeLevels.high); - feeDismiss(); - }} - > - - - - - ); -}; - -export default FeePicker; diff --git a/pkg/btc-wallet/src/components/Send/Invoice.tsx b/pkg/btc-wallet/src/components/Send/Invoice.tsx deleted file mode 100644 index ba4675bd7..000000000 --- a/pkg/btc-wallet/src/components/Send/Invoice.tsx +++ /dev/null @@ -1,292 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { - Box, - Icon, - StatelessTextInput as Input, - Row, - Text, - Button, - Col, - LoadingSpinner, -} from '@tlon/indigo-react'; -import * as kg from 'urbit-key-generation'; -import { patp2dec, isValidPatq, isValidPatp } from 'urbit-ob'; -import * as bitcoin from 'bitcoinjs-lib'; -import Sigil from '../Sigil'; -import Sent from './Sent'; -import { satsToCurrency } from '../../lib/util'; -import Error from '../Error'; -import { useSettings } from '../../hooks/useSettings'; -import { api } from '../../lib/api'; -import { UrbitWallet } from '../../types'; - -const BITCOIN_MAINNET_INFO = { - messagePrefix: '\x18Bitcoin Signed Message:\n', - bech32: 'bc', - bip32: { - public: 0x04b24746, - private: 0x04b2430c, - }, - pubKeyHash: 0x00, - scriptHash: 0x05, - wif: 0x80, -}; - -const BITCOIN_TESTNET_INFO = { - messagePrefix: '\x18Bitcoin Signed Message:\n', - bech32: 'tb', - bip32: { - public: 0x045f1cf6, - private: 0x045f18bc, - }, - pubKeyHash: 0x6f, - scriptHash: 0xc4, - wif: 0xef, -}; - -type Props = { - stopSending: () => void; - payee: string; - satsAmount: number; -}; - -const Invoice: React.FC = ({ stopSending, payee, satsAmount }) => { - const { - error, - currencyRates, - psbt, - fee, - broadcastSuccess, - network, - denomination, - history, - } = useSettings(); - const [masterTicket, setMasterTicket] = useState(''); - const [ready, setReady] = useState(false); - const [historyLength, setHistoryLength] = useState(0); - const [localError, setLocalError] = useState(error); - const [broadcasting, setBroadcasting] = useState(false); - - useEffect(() => { - if (broadcasting && localError !== '') { - setBroadcasting(false); - } - }, [error, broadcasting, setBroadcasting]); - - const broadCastTx = (psbtHex: string) => { - let command = { - 'broadcast-tx': psbtHex, - }; - return api.btcWalletCommand(command); - }; - - useEffect(() => { - if (historyLength === 0) { - setHistoryLength(history.length); - } - if (broadcasting && history.length > historyLength) { - setBroadcasting(false); - stopSending(); - } - }, [history]); - - const sendBitcoin = (ticket: string, psbt: string) => { - const newPsbt = bitcoin.Psbt.fromBase64(psbt); - setBroadcasting(true); - kg.generateWallet({ - ticket, - ship: parseInt(patp2dec('~' + window.ship)), - }).then((urbitWallet: UrbitWallet) => { - // this wasn't being used, not clear why it was pulled out. - // const { xpub } = - // network === 'testnet' - // ? urbitWallet.bitcoinTestnet.keys - // : urbitWallet.bitcoinMainnet.keys; - - const { xprv: zprv } = urbitWallet.bitcoinMainnet.keys; - const { xprv: vprv } = urbitWallet.bitcoinTestnet.keys; - - const isTestnet = network === 'testnet'; - const derivationPrefix = isTestnet ? "m/84'/1'/0'/" : "m/84'/0'/0'/"; - - const btcWallet = isTestnet - ? bitcoin.bip32.fromBase58(vprv, BITCOIN_TESTNET_INFO) - : bitcoin.bip32.fromBase58(zprv, BITCOIN_MAINNET_INFO); - - try { - const hex = newPsbt.data.inputs - .reduce((psbt, input, idx) => { - // removing already derived part, eg m/84'/0'/0'/0/0 becomes 0/0 - const path = input.bip32Derivation[0].path - .split(derivationPrefix) - .join(''); - const prv = btcWallet.derivePath(path).privateKey; - return psbt.signInput(idx, bitcoin.ECPair.fromPrivateKey(prv)); - }, newPsbt) - .finalizeAllInputs() - .extractTransaction() - .toHex(); - - broadCastTx(hex); - } catch (e) { - setLocalError('invalid-master-ticket'); - setBroadcasting(false); - } - }); - }; - - const checkTicket = ({ - target: { value }, - }: React.ChangeEvent) => { - // TODO: port over bridge ticket validation logic - setMasterTicket(value); - setReady(isValidPatq(value)); - setLocalError(isValidPatq(value) ? '' : 'invalid-master-ticket'); - }; - - let inputColor = 'black'; - let inputBg = 'white'; - let inputBorder = 'lightGray'; - - if (error !== '') { - inputColor = 'red'; - inputBg = 'veryLightRed'; - inputBorder = 'red'; - } - - const isShip = isValidPatp(payee); - - const icon = isShip ? ( - - ) : ( - - - - ); - - return ( - <> - {broadcastSuccess ? ( - - ) : ( - - - stopSending()} /> - - - - - {satsToCurrency(satsAmount, denomination, currencyRates)} - - - - {`${satsAmount} sats`} - - - {`Fee: ${satsToCurrency( - fee, - denomination, - currencyRates - )} (${fee} sats)`} - - - - You are paying - - - - {icon} - - {payee} - - - - - - Ticket - - value.replace(/[^~-]+/g, '••••••')} - placeholder="••••••-••••••-••••••-••••••" - autoCapitalize="none" - autoCorrect="off" - color={inputColor} - backgroundColor={inputBg} - borderColor={inputBorder} - onChange={(e: React.ChangeEvent) => - checkTicket(e) - } - /> - - {error !== '' && ( - - - - )} - - - { - // @ts-ignore - broadcasting ? : null - } - - - )} - - ); -}; - -export default Invoice; diff --git a/pkg/btc-wallet/src/components/Send/Send.tsx b/pkg/btc-wallet/src/components/Send/Send.tsx deleted file mode 100644 index 22c5ab3c3..000000000 --- a/pkg/btc-wallet/src/components/Send/Send.tsx +++ /dev/null @@ -1,512 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { - Box, - Icon, - StatelessTextInput as Input, - Row, - Text, - Button, - Col, - LoadingSpinner, -} from '@tlon/indigo-react'; -import Invoice from './Invoice'; -import BridgeInvoice from './BridgeInvoice'; -import ExternalInvoice from './ExternalInvoice'; -import FeePicker from './FeePicker'; -import Error from '../Error'; -import Signer from './Signer'; -import { validate } from 'bitcoin-address-validation'; -import * as ob from 'urbit-ob'; -import { useSettings } from '../../hooks/useSettings'; -import { api } from '../../lib/api'; -import { deSig } from '../../lib/util'; - -enum focusFields { - payee, - currency, - sats, - note, - empty = '', -} - -export enum feeLevels { - low, - mid, - high, -} - -export enum signMethods { - bridge = 'bridge', - masterTicket = 'masterTicket', - external = 'external', -} - -enum payeeTypes { - ship, - address, - initial = '', -} - -export type FeeChoices = { - [feeLevels.low]: [number, number]; - [feeLevels.mid]: [number, number]; - [feeLevels.high]: [number, number]; -}; - -type Props = { - stopSending: () => void; - value: string; - conversion: number; -}; - -const Send: React.FC = ({ stopSending, value, conversion }) => { - const { error, setError, network, psbt, denomination, shipWallets } = - useSettings(); - const [signing, setSigning] = useState(false); - const [denomAmount, setDenomAmount] = useState(0.0); - const [satsAmount, setSatsAmount] = useState(0); - const [payee, setPayee] = useState(''); - const [checkingPatp, setCheckingPatp] = useState(false); - const [payeeType, setPayeeType] = useState(payeeTypes.initial); - const [ready, setReady] = useState(false); - const [validPayee, setValidPayee] = useState(false); - const [focusedField, setFocusedField] = useState(focusFields.empty); - const [feeChoices, setFeeChoices] = useState({ - [feeLevels.low]: [10, 1], - [feeLevels.mid]: [10, 1], - [feeLevels.high]: [10, 1], - }); - const [feeValue, setFeeValue] = useState(feeLevels.mid); - const [showFeePicker, setShowFeePicker] = useState(false); - const [note, setNote] = useState(''); - const [choosingSignMethod, setChoosingSignMethod] = useState(false); - const [signMethod, setSignMethod] = useState(signMethods.bridge); - - const feeDismiss = () => { - setShowFeePicker(false); - }; - - const handleSetSignMethod = (signMethod: signMethods) => { - setSignMethod(signMethod); - setChoosingSignMethod(false); - }; - - const checkPayee = (e: React.ChangeEvent) => { - setError(''); - - const validPatPCommand = (validPatP: string) => { - let command = { 'check-payee': validPatP }; - api.btcWalletCommand(command); - setTimeout(() => { - setCheckingPatp(false); - }, 5000); - setCheckingPatp(true); - setPayeeType(payeeTypes.ship); - setPayee(validPatP); - }; - - let payeeReceived = e.target.value; - let isPatp = ob.isValidPatp(`~${deSig(payeeReceived)}`); - let isAddress = validate(payeeReceived); - if (isPatp) { - validPatPCommand(`~${deSig(payeeReceived)}`); - } else if (isAddress) { - setPayee(payeeReceived); - setReady(true); - setCheckingPatp(false); - setPayeeType(payeeTypes.address); - setValidPayee(true); - } else { - setPayee(payeeReceived); - setReady(false); - setCheckingPatp(false); - setPayeeType(payeeTypes.initial); - setValidPayee(false); - } - }; - - const toggleSignMethod = () => { - setChoosingSignMethod(!choosingSignMethod); - }; - - const initPayment = () => { - if (payeeType === payeeTypes.ship) { - let command = { - 'init-payment': { - payee, - value: satsAmount, - feyb: feeChoices[feeValue][1], - note: note || null, - }, - }; - - api.btcWalletCommand(command).then(() => setSigning(true)); - } else if (payeeType === payeeTypes.address) { - let command = { - 'init-payment-external': { - address: payee, - value: satsAmount, - feyb: 1, - note: note || null, - }, - }; - api.btcWalletCommand(command).then(() => setSigning(true)); - } - }; - - useEffect(() => { - if (network === 'bitcoin') { - let url = 'https://bitcoiner.live/api/fees/estimates/latest'; - fetch(url) - .then((res) => res.json()) - .then((n) => { - // let estimates = Object.keys(n.estimates); - // let mid = Math.floor(estimates.length / 2); - // let high = estimates.length - 1; - setFeeChoices({ - [feeLevels.high]: [30, n.estimates[30]['sat_per_vbyte']], - [feeLevels.mid]: [180, n.estimates[180]['sat_per_vbyte']], - [feeLevels.low]: [360, n.estimates[360]['sat_per_vbyte']], - }); - }); - } - }, []); - - useEffect(() => { - if (!ready && !checkingPatp) { - if (shipWallets.payee === payee.slice(1) && shipWallets.hasWallet) { - setReady(true); - setCheckingPatp(false); - setValidPayee(true); - } - } - }, [ready, checkingPatp, shipWallets, payee]); - - let payeeColor = 'black'; - let payeeBg = 'white'; - let payeeBorder = 'lightGray'; - if (error) { - payeeColor = 'red'; - payeeBorder = 'red'; - payeeBg = 'veryLightRed'; - } else if (focusedField === focusFields.payee && validPayee) { - payeeColor = 'green'; - payeeBorder = 'green'; - payeeBg = 'veryLightGreen'; - } else if (focusedField !== focusFields.payee && validPayee) { - payeeColor = 'blue'; - payeeBorder = 'white'; - payeeBg = 'white'; - } else if (focusedField !== focusFields.payee && !validPayee) { - payeeColor = 'red'; - payeeBorder = 'red'; - payeeBg = 'veryLightRed'; - } else if ( - focusedField === focusFields.payee && - !validPayee && - !checkingPatp && - payeeType === payeeTypes.ship - ) { - payeeColor = 'red'; - payeeBorder = 'red'; - payeeBg = 'veryLightRed'; - } - - const signReady = ready && satsAmount > 0 && !signing; - - let invoice = null; - - switch (signMethod) { - case signMethods.masterTicket: { - invoice = ( - - ); - break; - } - case signMethods.bridge: { - invoice = ( - - ); - break; - } - case signMethods.external: { - invoice = ( - - ); - break; - } - default: - break; - } - - return ( - <> - {signing && psbt ? ( - invoice - ) : ( - - - - - Send BTC - - - {value} - - stopSending()} /> - - - - - To - - {checkingPatp ? ( - - ) : null} - - { - setFocusedField(focusFields.payee); - }} - onBlur={() => { - setFocusedField(focusFields.empty); - }} - color={payeeColor} - backgroundColor={payeeBg} - borderColor={payeeBorder} - ml={2} - flexGrow="1" - fontSize="14px" - placeholder="~sampel-palnet or BTC address" - value={payee} - fontFamily="mono" - disabled={signing} - onChange={(e: React.ChangeEvent) => - checkPayee(e) - } - /> - - {error && ( - - {/* yes this is a hack */} - - - - )} - - - Amount - - { - setFocusedField(focusFields.currency); - }} - onBlur={() => { - setFocusedField(focusFields.empty); - }} - fontSize="14px" - width="100%" - type="number" - borderColor={ - focusedField === focusFields.currency ? 'lightGray' : 'none' - } - disabled={signing} - value={denomAmount} - onChange={(e: React.ChangeEvent) => { - setDenomAmount(parseFloat(e.target.value)); - setSatsAmount( - Math.round( - (parseFloat(e.target.value) / conversion) * 100000000 - ) - ); - }} - /> - - {denomination} - - - - {/* yes this is a hack */} - - { - setFocusedField(focusFields.sats); - }} - onBlur={() => { - setFocusedField(focusFields.empty); - }} - fontSize="14px" - width="100%" - type="number" - borderColor={ - focusedField === focusFields.sats ? 'lightGray' : 'none' - } - disabled={signing} - value={satsAmount} - onChange={(e: React.ChangeEvent) => { - setDenomAmount( - parseFloat(e.target.value) * (conversion / 100000000) - ); - setSatsAmount(parseInt(e.target.value, 10)); - }} - /> - - sats - - - - - Fee - - - - {feeChoices[feeValue][1]} sats/vbyte - - - - - - {!showFeePicker ? null : ( - - )} - - - - Note - - { - setFocusedField(focusFields.note); - }} - onBlur={() => { - setFocusedField(focusFields.empty); - }} - fontSize="14px" - width="100%" - placeholder="What's this for?" - type="text" - borderColor={ - focusedField === focusFields.note ? 'lightGray' : 'none' - } - disabled={signing} - value={note} - onChange={(e: React.ChangeEvent) => { - setNote(e.target.value); - }} - /> - - - - {!(signing && !error) ? null : ( - - )} - - - - {signMethod === signMethods.masterTicket && ( - - - - We recommend that you sign transactions using Bridge to protect - your master ticket. - - - )} - - )} - - ); -}; - -export default Send; diff --git a/pkg/btc-wallet/src/components/Send/Sent.tsx b/pkg/btc-wallet/src/components/Send/Sent.tsx deleted file mode 100644 index 1990d4b28..000000000 --- a/pkg/btc-wallet/src/components/Send/Sent.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { Icon, Row, Col, Center, Text } from '@tlon/indigo-react'; -import { satsToCurrency } from '../../lib/util'; -import { useSettings } from '../../hooks/useSettings'; - -type Props = { - payee: string; - stopSending: () => void; - satsAmount: number; -}; - -const Sent: React.FC = ({ payee, stopSending, satsAmount }) => { - const { denomination, currencyRates } = useSettings(); - return ( - - - - -
- {`You sent BTC to ${payee}`} -
-
- - {satsToCurrency(satsAmount, denomination, currencyRates)} - - {`${satsAmount} sats`} -
- - ); -}; - -export default Sent; diff --git a/pkg/btc-wallet/src/components/Send/Signer.tsx b/pkg/btc-wallet/src/components/Send/Signer.tsx deleted file mode 100644 index f78301172..000000000 --- a/pkg/btc-wallet/src/components/Send/Signer.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from 'react'; -import { Box, Button, Icon, Row } from '@tlon/indigo-react'; -import { signMethods } from './Send'; - -const signMethodLabels = { - bridge: 'Sign with Bridge', - masterTicket: 'Sign with Master Ticket', - external: 'Sign Externally (PSBT)', -}; - -type Props = { - signReady: boolean; - initPayment: () => void; - choosingSignMethod: boolean; - signMethod: signMethods; - setSignMethod: (arg: signMethods) => void; -}; - -const Signer: React.FC = ({ - signReady, - initPayment, - choosingSignMethod, - signMethod, - setSignMethod, -}) => { - return choosingSignMethod ? ( - - {Object.keys(signMethods).map((method) => ( - - - {signMethod === (signMethods as any)[method] && ( - - )} - - ))} - - ) : ( - - ); -}; - -export default Signer; diff --git a/pkg/btc-wallet/src/components/Settings.tsx b/pkg/btc-wallet/src/components/Settings.tsx deleted file mode 100644 index bf2b8a981..000000000 --- a/pkg/btc-wallet/src/components/Settings.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React from 'react'; -import { Box, Icon, Row, Text, Button, Col } from '@tlon/indigo-react'; -import { useSettings } from '../hooks/useSettings'; -import { api } from '../lib/api'; -import { Link } from 'react-router-dom'; - -const Settings = () => { - const { wallet, provider } = useSettings(); - - const changeProvider = () => { - api.btcWalletCommand({ 'set-provider': null }); - window.location.reload(); - }; - - const replaceWallet = () => { - api.btcWalletCommand({ - 'delete-wallet': wallet, - }); - }; - - let connColor = 'red'; - let connBackground = 'veryLightRed'; - let conn = 'Offline'; - let host = ''; - if (provider) { - if (provider.connected) conn = 'Connected'; - if (provider.host) host = provider.host; - if (provider.connected && provider.host) { - connColor = 'orange'; - connBackground = 'lightOrange'; - } - } - - return ( - - - - XPub Derivation - - - - - - - - - - {wallet} - - - - - - - - BTC Node Provider - - - - - ~{host} - - - {conn} - - - - - - - ); -}; - -export default Settings; diff --git a/pkg/btc-wallet/src/components/Sigil.tsx b/pkg/btc-wallet/src/components/Sigil.tsx deleted file mode 100644 index 5de8569bd..000000000 --- a/pkg/btc-wallet/src/components/Sigil.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, { memo } from 'react'; -import { sigil, reactRenderer } from '@tlon/sigil-js'; -import { Box } from '@tlon/indigo-react'; - -export const foregroundFromBackground = (background: string) => { - const rgb = { - r: parseInt(background.slice(1, 3), 16), - g: parseInt(background.slice(3, 5), 16), - b: parseInt(background.slice(5, 7), 16), - }; - const brightness = (299 * rgb.r + 587 * rgb.g + 114 * rgb.b) / 1000; - const whiteBrightness = 255; - - return whiteBrightness - brightness < 50 ? 'black' : 'white'; -}; - -type Props = { - classes?: string; - color: string; - foreground?: string; - ship: string; - size: number; - svgClass?: string; - icon?: boolean; - padding?: number; - display?: string; -}; - -const Sigil: React.FC = memo( - ({ - classes = '', - color, - foreground = '', - ship, - size, - svgClass = '', - icon = false, - padding = 0, - display = 'inline-block', - }) => { - const innerSize = Number(size) - 2 * padding; - const paddingPx = `${padding}px`; - const foregroundColor = foreground - ? foreground - : foregroundFromBackground(color); - return ship.length > 14 ? ( - - ) : ( - - {sigil({ - patp: ship, - renderer: reactRenderer, - size: innerSize, - icon, - colors: [color, foregroundColor], - class: svgClass, - })} - - ); - } -); - -Sigil.displayName = 'Sigil'; - -export default Sigil; diff --git a/pkg/btc-wallet/src/components/StartupModal.tsx b/pkg/btc-wallet/src/components/StartupModal.tsx deleted file mode 100644 index e21f6ce2c..000000000 --- a/pkg/btc-wallet/src/components/StartupModal.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import { Box } from '@tlon/indigo-react'; -import WalletModal from './WalletModal'; -import ProviderModal from './ProviderModal'; -import { useSettings } from '../hooks/useSettings'; - -const StartupModal: React.FC = () => { - const { wallet, provider } = useSettings(); - let modal = null; - - if (wallet && provider) { - return null; - } else if (!provider) { - modal = ; - } else if (!wallet) { - modal = ; - } - return ( - - - {modal} - - - ); -}; - -export default StartupModal; diff --git a/pkg/btc-wallet/src/components/Transactions/Transaction.tsx b/pkg/btc-wallet/src/components/Transactions/Transaction.tsx deleted file mode 100644 index fd0df48ca..000000000 --- a/pkg/btc-wallet/src/components/Transactions/Transaction.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import React from 'react'; -import { Box, Row, Text, Col } from '@tlon/indigo-react'; -import _ from 'lodash'; -import TxAction from './TxAction'; -import TxCounterparty from './TxCounterparty'; -import { satsToCurrency } from '../../lib/util'; -import { useSettings } from '../../hooks/useSettings'; -import { Transaction as TransactionType } from '../../types'; - -const Transaction = ({ tx }: { tx: TransactionType }) => { - const { denomination, currencyRates } = useSettings(); - const pending = !tx.recvd; - - let weSent = _.find(tx.inputs, (input) => { - return input.ship === window.ship; - }); - let weRecv = tx.outputs.every((output) => { - return output.ship === window.ship; - }); - - let action: 'sent' | 'recv' | 'fail' = weRecv - ? 'recv' - : weSent - ? 'sent' - : 'recv'; - - let counterShip = null; - let counterAddress = null; - let value; - let sign; - - if (action === 'sent') { - let counter = _.find(tx.outputs, (output) => { - return output.ship !== window.ship; - }); - counterShip = _.get(counter, 'ship', null); - counterAddress = _.get(counter, 'val.address', null); - value = _.get(counter, 'val.value', null); - sign = '-'; - } else if (action === 'recv') { - value = _.reduce( - tx.outputs, - (sum, output) => { - if (output.ship === window.ship) { - return sum + output.val.value; - } else { - return sum; - } - }, - 0 - ); - - if (weSent && weRecv) { - counterAddress = _.get( - _.find(tx.inputs, (input) => { - return input.ship === window.ship; - }), - 'val.address', - null - ); - } else { - let counter = _.find(tx.inputs, (input) => { - return input.ship !== window.ship; - }); - counterShip = _.get(counter, 'ship', null); - counterAddress = _.get(counter, 'val.address', null); - } - sign = ''; - } - - let currencyValue = sign + satsToCurrency(value, denomination, currencyRates); - - const failure = Boolean(tx.failure); - if (failure) action = 'fail'; - - const txid = tx.txid.dat.slice(2).replaceAll('.', ''); - - return ( - - - - - {sign} - {value} sats - - - - - - {currencyValue} - - - ); -}; - -export default Transaction; diff --git a/pkg/btc-wallet/src/components/Transactions/Transactions.tsx b/pkg/btc-wallet/src/components/Transactions/Transactions.tsx deleted file mode 100644 index 0eec82fb9..000000000 --- a/pkg/btc-wallet/src/components/Transactions/Transactions.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import { Box, Text, Col } from '@tlon/indigo-react'; -import Transaction from './Transaction'; -import { useSettings } from '../../hooks/useSettings'; - -const Transactions = () => { - const { history } = useSettings(); - if (!history || history.length <= 0) { - return ( - - - No Transactions Yet - - - ); - } else { - return ( - - {history.map((tx, i) => { - return ; - })} - - ); - } -}; - -export default Transactions; diff --git a/pkg/btc-wallet/src/components/Transactions/TxAction.tsx b/pkg/btc-wallet/src/components/Transactions/TxAction.tsx deleted file mode 100644 index 6ed9e954d..000000000 --- a/pkg/btc-wallet/src/components/Transactions/TxAction.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from 'react'; -import { Box, Icon, Row, Text, LoadingSpinner } from '@tlon/indigo-react'; -import { useSettings } from '../../hooks/useSettings'; - -type Props = { - action: 'sent' | 'recv' | 'fail'; - pending: boolean; - txid: string; -}; - -const TxAction: React.FC = ({ action, pending, txid }) => { - const { network } = useSettings(); - const leftIcon = - action === 'sent' - ? 'ArrowSouth' - : action === 'recv' - ? 'ArrowNorth' - : action === 'fail' - ? 'X' - : 'NullIcon'; - - const actionColor = - action === 'sent' - ? 'sentBlue' - : action === 'recv' - ? 'recvGreen' - : action === 'fail' - ? 'gray' - : 'red'; - - const actionText = - action === 'sent' && !pending - ? 'Sent BTC' - : action === 'sent' && pending - ? 'Sending BTC' - : action === 'recv' && !pending - ? 'Received BTC' - : action === 'recv' && pending - ? 'Receiving BTC' - : action === 'fail' - ? 'Failed' - : 'error'; - - const pendingSpinner = !pending ? null : ( - - ); - - const url = - network === 'testnet' - ? `http://blockstream.info/testnet/tx/${txid}` - : `http://blockstream.info/tx/${txid}`; - - return ( - - - - - - {actionText} - - - - - {pendingSpinner} - - ); -}; - -export default TxAction; diff --git a/pkg/btc-wallet/src/components/Transactions/TxCounterparty.tsx b/pkg/btc-wallet/src/components/Transactions/TxCounterparty.tsx deleted file mode 100644 index 8bbdad07d..000000000 --- a/pkg/btc-wallet/src/components/Transactions/TxCounterparty.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; -import { Box, Icon, Row, Text } from '@tlon/indigo-react'; -import Sigil from '../Sigil'; - -type Props = { - ship: string; - address: string; -}; - -const TxCounterparty: React.FC = ({ ship, address }) => { - const icon = ship ? ( - - ) : ( - - - - ); - const addressText = !address - ? '' - : address.slice(0, 6) + '...' + address.slice(-6); - const text = ship ? `~${ship}` : addressText; - - return ( - - {icon} - - {text} - - - ); -}; - -export default TxCounterparty; diff --git a/pkg/btc-wallet/src/components/WalletModal.tsx b/pkg/btc-wallet/src/components/WalletModal.tsx deleted file mode 100644 index e46c865d7..000000000 --- a/pkg/btc-wallet/src/components/WalletModal.tsx +++ /dev/null @@ -1,268 +0,0 @@ -import React, { useState } from 'react'; -import { - Box, - Text, - Button, - StatelessTextInput, - Icon, - Row, - LoadingSpinner, -} from '@tlon/indigo-react'; -import { patp2dec, isValidPatq } from 'urbit-ob'; -import * as kg from 'urbit-key-generation'; -import { useSettings } from '../hooks/useSettings'; -import { api } from '../lib/api'; -import { UrbitWallet } from '../types'; - -const WalletModal: React.FC = () => { - const { network } = useSettings(); - const [mode, setMode] = useState('xpub'); - const [masterTicket, setMasterTicket] = useState(''); - const [confirmedMasterTicket, setConfirmedMasterTicket] = useState(''); - const [xpub, setXpub] = useState(''); - const [readyToSubmit, setReadyToSubmit] = useState(false); - const [processingSubmission, setProcessingSubmission] = useState(false); - const [confirmingMasterTicket, setConfirmingMasterTicket] = useState(false); - const [error, setError] = useState(false); - - const checkTicket = ({ - target: { value }, - }: React.ChangeEvent) => { - // TODO: port over bridge ticket validation logic - if (confirmingMasterTicket) { - setConfirmedMasterTicket(value); - setReadyToSubmit(isValidPatq(value)); - } else { - setMasterTicket(value); - setReadyToSubmit(isValidPatq(value)); - } - }; - - const checkXPub = ({ - target: { value: xpubGiven }, - }: React.ChangeEvent) => { - setXpub(xpubGiven); - setReadyToSubmit(xpubGiven.length > 0); - }; - - const submitXPub = (givenXpub: string) => { - type AddWalletCommand = { - 'add-wallet': { - xpub: string; - fprint: number[]; - 'scan-to': number | null; - 'max-gap': number; - confs: number; - }; - }; - const command: AddWalletCommand = { - 'add-wallet': { - xpub: givenXpub, - fprint: [4, 0], - 'scan-to': null, - 'max-gap': 8, - confs: 1, - }, - }; - api.btcWalletCommand(command); - setProcessingSubmission(true); - }; - - const submitMasterTicket = (ticket: string) => { - setProcessingSubmission(true); - kg.generateWallet({ - ticket, - ship: parseInt(patp2dec('~' + window.ship)), - }).then((urbitWallet: UrbitWallet) => { - const { xpub: xpubFromWallet } = - network === 'testnet' - ? urbitWallet.bitcoinTestnet.keys - : urbitWallet.bitcoinMainnet.keys; - - submitXPub(xpubFromWallet); - }); - }; - - const buttonDisabled = !readyToSubmit || processingSubmission; - const inputDisabled = processingSubmission; - // const processingSpinner = !processingSubmission ? null : ; - - if (mode === 'masterTicket') { - return ( - - - - - Step 2 of 2: Import your extended public key - - - - - - We recommend that you import your wallet using Bridge to protect - your master ticket. - - - - {confirmingMasterTicket && ( - { - setConfirmingMasterTicket(false); - setMasterTicket(''); - setConfirmedMasterTicket(''); - setError(false); - }} - /> - )} - - {confirmingMasterTicket ? 'Confirm Master Ticket' : 'Master Ticket'} - - - - value.replace(/[^~-]+/g, '••••••')} - placeholder="••••••-••••••-••••••-••••••" - autoCapitalize="none" - autoCorrect="off" - onChange={(e: React.ChangeEvent) => - checkTicket(e) - } - /> - {!inputDisabled ? null : } - - {error && ( - - - Master tickets do not match - - - )} - - - - - - ); - } else if (mode === 'xpub') { - return ( - - - - - Step 2 of 2: Import your extended public key - - - - - Visit{' '} - - bridge.urbit.org - {' '} - to obtain your key - - - - - Extended Public Key (XPub) - - - - ) => checkXPub(e)} - mr={1} - /> - {!inputDisabled ? null : } - - - { - if (inputDisabled) return; - setMode('masterTicket'); - setXpub(''); - setMasterTicket(''); - setReadyToSubmit(false); - }} - > - Import using master ticket -> - - - - - ); - } -}; - -export default WalletModal; diff --git a/pkg/btc-wallet/src/components/Warning.tsx b/pkg/btc-wallet/src/components/Warning.tsx deleted file mode 100644 index 466f14414..000000000 --- a/pkg/btc-wallet/src/components/Warning.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import React from 'react'; -import { Box, Text, Button, Col, Anchor } from '@tlon/indigo-react'; -import { api } from '../lib/api'; -import { useSettings } from '../hooks/useSettings'; - -const Warning = () => { - const { setShowWarning } = useSettings(); - const understand = () => { - setShowWarning(false); - let removeWarning = { - 'put-entry': { - value: false, - desk: window.desk, - 'entry-key': 'warning', - 'bucket-key': 'btc-wallet', - }, - }; - api.settingsEvent(removeWarning); - }; - - return ( - - - - Warning! - -
- - Be safe while using this wallet, and be sure to store responsible - amounts of BTC. - - - Always ensure that the checksum of the wallet matches that of the - wallet's repo. - -
- - - Learn more on urbit.org - - - - -
- ); -}; - -export default Warning; diff --git a/pkg/btc-wallet/src/css/custom.css b/pkg/btc-wallet/src/css/custom.css deleted file mode 100644 index e5a56b451..000000000 --- a/pkg/btc-wallet/src/css/custom.css +++ /dev/null @@ -1,158 +0,0 @@ -p, h1, h2, h3, h4, h5, h6, a, input, textarea, button { - margin-block-end: unset; - margin-block-start: unset; - -webkit-margin-before: unset; - -webkit-margin-after: unset; - font-family: Inter, sans-serif; -} - -a { - color: #000; - text-decoration: none; -} - -textarea, select, input, button { - outline: none; - -webkit-appearance: none; - border: none; - background-color: #fff; -} - -.body-regular { - font-size: 16px; - line-height: 24px; - font-weight: 600; -} - -.body-large { - font-size: 20px; - line-height: 24px; -} - -.label-regular { - font-size: 14px; - line-height: 24px; -} - -.label-small-mono { - font-size: 12px; - line-height: 24px; - font-family: "Source Code Pro", monospace; -} - -.body-regular-400 { - font-size: 16px; - line-height: 24px; - font-weight: 400; -} - -.plus-font { - font-size: 48px; - line-height: 24px; -} - -.btn-font { - font-size: 14px; - line-height: 16px; - font-weight: 600; -} -.mono { - font-family: "Source Code Pro", monospace; -} - -.inter { - font-family: Inter, sans-serif; -} - -.mix-blend-diff { - mix-blend-mode: difference; -} - -/* dark */ - -@media (prefers-color-scheme: dark) { - body { - background-color: #333; - } - .bg-black-d { - background-color: black; - } - .white-d { - color: white; - } - .gray1-d { - color: #4d4d4d; - } - .gray2-d { - color: #7f7f7f; - } - .gray3-d { - color: #b1b2b3; - } - .gray4-d { - color: #e6e6e6; - } - .bg-gray0-d { - background-color: #333; - } - .bg-gray1-d { - background-color: #4d4d4d; - } - .b--gray0-d { - border-color: #333; - } - .b--gray1-d { - border-color: #4d4d4d; - } - .b--gray2-d { - border-color: #7f7f7f; - } - .b--white-d { - border-color: #fff; - } - .bb-d { - border-bottom-width: 1px; - border-bottom-style: solid; - } - .invert-d { - filter: invert(1); - } - .o-80-d { - opacity: .8; - } - .focus-b--white-d:focus { - border-color: #fff; - } - a { - color: #fff; - } - .hover-bg-gray1-d:hover { - color: #4d4d4d; - } -} - -/* responsive */ - -@media all and (max-width: 34.375em) { - .h-100-minus-40-s { - height: calc(100% - 40px); - } -} - -@media all and (min-width: 34.375em) and (max-width: 46.875em) { - .h-100-minus-40-m { - height: calc(100% - 40px); - } -} - -@media all and (min-width: 46.875em) and (max-width: 60em) { - .h-100-minus-40-l { - height: calc(100% - 40px); - } -} - -@media all and (min-width: 60em) { - .h-100-minus-40-xl { - height: calc(100% - 40px); - } -} diff --git a/pkg/btc-wallet/src/css/fonts.css b/pkg/btc-wallet/src/css/fonts.css deleted file mode 100644 index 34de928ec..000000000 --- a/pkg/btc-wallet/src/css/fonts.css +++ /dev/null @@ -1,63 +0,0 @@ -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 400; - src: url("https://media.urbit.org/fonts/Inter-Regular.woff2") format("woff2"); -} - -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 400; - src: url("https://media.urbit.org/fonts/Inter-Italic.woff2") format("woff2"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 700; - src: url("https://media.urbit.org/fonts/Inter-Bold.woff2") format("woff2"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 700; - src: url("https://media.urbit.org/fonts/Inter-BoldItalic.woff2") format("woff2"); -} - -@font-face { - font-family: "Source Code Pro"; - src: url("https://storage.googleapis.com/media.urbit.org/fonts/scp-extralight.woff"); - font-weight: 200; -} - -@font-face { - font-family: "Source Code Pro"; - src: url("https://storage.googleapis.com/media.urbit.org/fonts/scp-light.woff"); - font-weight: 300; -} - -@font-face { - font-family: "Source Code Pro"; - src: url("https://storage.googleapis.com/media.urbit.org/fonts/scp-regular.woff"); - font-weight: 400; -} - -@font-face { - font-family: "Source Code Pro"; - src: url("https://storage.googleapis.com/media.urbit.org/fonts/scp-medium.woff"); - font-weight: 500; -} - -@font-face { - font-family: "Source Code Pro"; - src: url("https://storage.googleapis.com/media.urbit.org/fonts/scp-semibold.woff"); - font-weight: 600; -} - -@font-face { - font-family: "Source Code Pro"; - src: url("https://storage.googleapis.com/media.urbit.org/fonts/scp-bold.woff"); - font-weight: 700; -} - diff --git a/pkg/btc-wallet/src/css/indigo-static.css b/pkg/btc-wallet/src/css/indigo-static.css deleted file mode 100644 index bc23d73a1..000000000 --- a/pkg/btc-wallet/src/css/indigo-static.css +++ /dev/null @@ -1 +0,0 @@ -/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}.aspect-ratio{height:0;position:relative}.aspect-ratio--16x9{padding-bottom:56.25%}.aspect-ratio--9x16{padding-bottom:177.77%}.aspect-ratio--4x3{padding-bottom:75%}.aspect-ratio--3x4{padding-bottom:133.33%}.aspect-ratio--6x4{padding-bottom:66.6%}.aspect-ratio--4x6{padding-bottom:150%}.aspect-ratio--8x5{padding-bottom:62.5%}.aspect-ratio--5x8{padding-bottom:160%}.aspect-ratio--7x5{padding-bottom:71.42%}.aspect-ratio--5x7{padding-bottom:140%}.aspect-ratio--1x1{padding-bottom:100%}.aspect-ratio--object{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover{background-size:cover!important}.contain{background-size:contain!important}.bg-center{background-position:50%}.bg-center,.bg-top{background-repeat:no-repeat}.bg-top{background-position:top}.bg-right{background-position:100%}.bg-bottom,.bg-right{background-repeat:no-repeat}.bg-bottom{background-position:bottom}.bg-left{background-repeat:no-repeat;background-position:0}.ba{border-style:solid;border-width:1px}.bt{border-top-style:solid;border-top-width:1px}.br{border-right-style:solid;border-right-width:1px}.bb{border-bottom-style:solid;border-bottom-width:1px}.bl{border-left-style:solid;border-left-width:1px}.bn{border-style:none;border-width:0}.b--black{border-color:#000}.b--white{border-color:#fff}.b--gray0{border-color:#333}.b--gray1{border-color:#4d4d4d}.b--gray2{border-color:#7f7f7f}.b--gray3{border-color:#b1b2b3}.b--gray4{border-color:#e6e6e6}.b--gray5{border-color:#f9f9f9}.b--blue0{border-color:#ecf6ff}.b--blue1{border-color:#b0c7ff}.b--blue2{border-color:#4330fc}.b--blue3{border-color:#190d7b}.b--red0{border-color:#f9d6ce}.b--red1{border-color:#ffa073}.b--red2{border-color:#ee5432}.b--red3{border-color:#c10d30}.b--green0{border-color:#bdebcc}.b--green1{border-color:#2ed196}.b--green2{border-color:#2aa779}.b--green3{border-color:#286e55}.b--yellow0{border-color:#ffefc5}.b--yellow1{border-color:#ffd972}.b--yellow2{border-color:#fcc440}.b--yellow3{border-color:#ee892b}.b--transparent{border-color:transparent}.br0{border-radius:0}.br1{border-radius:.125rem}.br2{border-radius:.25rem}.br3{border-radius:.5rem}.br4{border-radius:1rem}.br-100{border-radius:100%}.br-pill{border-radius:9999px}.br--bottom{border-top-left-radius:0;border-top-right-radius:0}.br--top{border-bottom-right-radius:0}.br--right,.br--top{border-bottom-left-radius:0}.br--right{border-top-left-radius:0}.br--left{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted{border-style:dotted}.b--dashed{border-style:dashed}.b--solid{border-style:solid}.b--none{border-style:none}.bw0{border-width:0}.bw1{border-width:.125rem}.bw2{border-width:.25rem}.bw3{border-width:.5rem}.bw4{border-width:1rem}.bw5{border-width:2rem}.bt-0{border-top-width:0}.br-0{border-right-width:0}.bb-0{border-bottom-width:0}.bl-0{border-left-width:0}.shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.border-box,a,article,aside,blockquote,body,code,dd,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,html,input[type=email],input[type=number],input[type=password],input[type=tel],input[type=text],input[type=url],legend,li,main,nav,ol,p,pre,section,table,td,textarea,th,tr,ul{box-sizing:border-box}.pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.pa0{padding:0}.ma0,.na0{margin:0}.pl0{padding-left:0}.ml0,.nl0{margin-left:0}.pr0{padding-right:0}.mr0,.nr0{margin-right:0}.pt0{padding-top:0}.mt0,.nt0{margin-top:0}.pb0{padding-bottom:0}.mb0,.nb0{margin-bottom:0}.pv0{padding-top:0;padding-bottom:0}.mv0,.nv0{margin-top:0;margin-bottom:0}.ph0{padding-left:0;padding-right:0}.mh0,.nh0{margin-left:0;margin-right:0}.pa1{padding:.25rem}.ma1{margin:.25rem}.na1{margin:-.25rem}.pl1{padding-left:.25rem}.ml1{margin-left:.25rem}.nl1{margin-left:-.25rem}.pr1{padding-right:.25rem}.mr1{margin-right:.25rem}.nr1{margin-right:-.25rem}.pt1{padding-top:.25rem}.mt1{margin-top:.25rem}.nt1{margin-top:-.25rem}.pb1{padding-bottom:.25rem}.mb1{margin-bottom:.25rem}.nb1{margin-bottom:-.25rem}.pv1{padding-top:.25rem;padding-bottom:.25rem}.mv1{margin-top:.25rem;margin-bottom:.25rem}.nv1{margin-top:-.25rem;margin-bottom:-.25rem}.ph1{padding-left:.25rem;padding-right:.25rem}.mh1{margin-left:.25rem;margin-right:.25rem}.nh1{margin-left:-.25rem;margin-right:-.25rem}.pa2{padding:.5rem}.ma2{margin:.5rem}.na2{margin:-.5rem}.pl2{padding-left:.5rem}.ml2{margin-left:.5rem}.nl2{margin-left:-.5rem}.pr2{padding-right:.5rem}.mr2{margin-right:.5rem}.nr2{margin-right:-.5rem}.pt2{padding-top:.5rem}.mt2{margin-top:.5rem}.nt2{margin-top:-.5rem}.pb2{padding-bottom:.5rem}.mb2{margin-bottom:.5rem}.nb2{margin-bottom:-.5rem}.pv2{padding-top:.5rem;padding-bottom:.5rem}.mv2{margin-top:.5rem;margin-bottom:.5rem}.nv2{margin-top:-.5rem;margin-bottom:-.5rem}.ph2{padding-left:.5rem;padding-right:.5rem}.mh2{margin-left:.5rem;margin-right:.5rem}.nh2{margin-left:-.5rem;margin-right:-.5rem}.pa3{padding:.75rem}.ma3{margin:.75rem}.na3{margin:-.75rem}.pl3{padding-left:.75rem}.ml3{margin-left:.75rem}.nl3{margin-left:-.75rem}.pr3{padding-right:.75rem}.mr3{margin-right:.75rem}.nr3{margin-right:-.75rem}.pt3{padding-top:.75rem}.mt3{margin-top:.75rem}.nt3{margin-top:-.75rem}.pb3{padding-bottom:.75rem}.mb3{margin-bottom:.75rem}.nb3{margin-bottom:-.75rem}.pv3{padding-top:.75rem;padding-bottom:.75rem}.mv3{margin-top:.75rem;margin-bottom:.75rem}.nv3{margin-top:-.75rem;margin-bottom:-.75rem}.ph3{padding-left:.75rem;padding-right:.75rem}.mh3{margin-left:.75rem;margin-right:.75rem}.nh3{margin-left:-.75rem;margin-right:-.75rem}.pa4{padding:1rem}.ma4{margin:1rem}.na4{margin:-1rem}.pl4{padding-left:1rem}.ml4{margin-left:1rem}.nl4{margin-left:-1rem}.pr4{padding-right:1rem}.mr4{margin-right:1rem}.nr4{margin-right:-1rem}.pt4{padding-top:1rem}.mt4{margin-top:1rem}.nt4{margin-top:-1rem}.pb4{padding-bottom:1rem}.mb4{margin-bottom:1rem}.nb4{margin-bottom:-1rem}.pv4{padding-top:1rem;padding-bottom:1rem}.mv4{margin-top:1rem;margin-bottom:1rem}.nv4{margin-top:-1rem;margin-bottom:-1rem}.ph4{padding-left:1rem;padding-right:1rem}.mh4{margin-left:1rem;margin-right:1rem}.nh4{margin-left:-1rem;margin-right:-1rem}.pa5{padding:1.25rem}.ma5{margin:1.25rem}.na5{margin:-1.25rem}.pl5{padding-left:1.25rem}.ml5{margin-left:1.25rem}.nl5{margin-left:-1.25rem}.pr5{padding-right:1.25rem}.mr5{margin-right:1.25rem}.nr5{margin-right:-1.25rem}.pt5{padding-top:1.25rem}.mt5{margin-top:1.25rem}.nt5{margin-top:-1.25rem}.pb5{padding-bottom:1.25rem}.mb5{margin-bottom:1.25rem}.nb5{margin-bottom:-1.25rem}.pv5{padding-top:1.25rem;padding-bottom:1.25rem}.mv5{margin-top:1.25rem;margin-bottom:1.25rem}.nv5{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5{padding-left:1.25rem;padding-right:1.25rem}.mh5{margin-left:1.25rem;margin-right:1.25rem}.nh5{margin-left:-1.25rem;margin-right:-1.25rem}.pa6{padding:1.5rem}.ma6{margin:1.5rem}.na6{margin:-1.5rem}.pl6{padding-left:1.5rem}.ml6{margin-left:1.5rem}.nl6{margin-left:-1.5rem}.pr6{padding-right:1.5rem}.mr6{margin-right:1.5rem}.nr6{margin-right:-1.5rem}.pt6{padding-top:1.5rem}.mt6{margin-top:1.5rem}.nt6{margin-top:-1.5rem}.pb6{padding-bottom:1.5rem}.mb6{margin-bottom:1.5rem}.nb6{margin-bottom:-1.5rem}.pv6{padding-top:1.5rem;padding-bottom:1.5rem}.mv6{margin-top:1.5rem;margin-bottom:1.5rem}.nv6{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6{padding-left:1.5rem;padding-right:1.5rem}.mh6{margin-left:1.5rem;margin-right:1.5rem}.nh6{margin-left:-1.5rem;margin-right:-1.5rem}.pa7{padding:2rem}.ma7{margin:2rem}.na7{margin:-2rem}.pl7{padding-left:2rem}.ml7{margin-left:2rem}.nl7{margin-left:-2rem}.pr7{padding-right:2rem}.mr7{margin-right:2rem}.nr7{margin-right:-2rem}.pt7{padding-top:2rem}.mt7{margin-top:2rem}.nt7{margin-top:-2rem}.pb7{padding-bottom:2rem}.mb7{margin-bottom:2rem}.nb7{margin-bottom:-2rem}.pv7{padding-top:2rem;padding-bottom:2rem}.mv7{margin-top:2rem;margin-bottom:2rem}.nv7{margin-top:-2rem;margin-bottom:-2rem}.ph7{padding-left:2rem;padding-right:2rem}.mh7{margin-left:2rem;margin-right:2rem}.nh7{margin-left:-2rem;margin-right:-2rem}.pa8{padding:3rem}.ma8{margin:3rem}.na8{margin:-3rem}.pl8{padding-left:3rem}.ml8{margin-left:3rem}.nl8{margin-left:-3rem}.pr8{padding-right:3rem}.mr8{margin-right:3rem}.nr8{margin-right:-3rem}.pt8{padding-top:3rem}.mt8{margin-top:3rem}.nt8{margin-top:-3rem}.pb8{padding-bottom:3rem}.mb8{margin-bottom:3rem}.nb8{margin-bottom:-3rem}.pv8{padding-top:3rem;padding-bottom:3rem}.mv8{margin-top:3rem;margin-bottom:3rem}.nv8{margin-top:-3rem;margin-bottom:-3rem}.ph8{padding-left:3rem;padding-right:3rem}.mh8{margin-left:3rem;margin-right:3rem}.nh8{margin-left:-3rem;margin-right:-3rem}.pa9{padding:4rem}.ma9{margin:4rem}.na9{margin:-4rem}.pl9{padding-left:4rem}.ml9{margin-left:4rem}.nl9{margin-left:-4rem}.pr9{padding-right:4rem}.mr9{margin-right:4rem}.nr9{margin-right:-4rem}.pt9{padding-top:4rem}.mt9{margin-top:4rem}.nt9{margin-top:-4rem}.pb9{padding-bottom:4rem}.mb9{margin-bottom:4rem}.nb9{margin-bottom:-4rem}.pv9{padding-top:4rem;padding-bottom:4rem}.mv9{margin-top:4rem;margin-bottom:4rem}.nv9{margin-top:-4rem;margin-bottom:-4rem}.ph9{padding-left:4rem;padding-right:4rem}.mh9{margin-left:4rem;margin-right:4rem}.nh9{margin-left:-4rem;margin-right:-4rem}.pa10{padding:6rem}.ma10{margin:6rem}.na10{margin:-6rem}.pl10{padding-left:6rem}.ml10{margin-left:6rem}.nl10{margin-left:-6rem}.pr10{padding-right:6rem}.mr10{margin-right:6rem}.nr10{margin-right:-6rem}.pt10{padding-top:6rem}.mt10{margin-top:6rem}.nt10{margin-top:-6rem}.pb10{padding-bottom:6rem}.mb10{margin-bottom:6rem}.nb10{margin-bottom:-6rem}.pv10{padding-top:6rem;padding-bottom:6rem}.mv10{margin-top:6rem;margin-bottom:6rem}.nv10{margin-top:-6rem;margin-bottom:-6rem}.ph10{padding-left:6rem;padding-right:6rem}.mh10{margin-left:6rem;margin-right:6rem}.nh10{margin-left:-6rem;margin-right:-6rem}.pa11{padding:10rem}.ma11{margin:10rem}.na11{margin:-10rem}.pl11{padding-left:10rem}.ml11{margin-left:10rem}.nl11{margin-left:-10rem}.pr11{padding-right:10rem}.mr11{margin-right:10rem}.nr11{margin-right:-10rem}.pt11{padding-top:10rem}.mt11{margin-top:10rem}.nt11{margin-top:-10rem}.pb11{padding-bottom:10rem}.mb11{margin-bottom:10rem}.nb11{margin-bottom:-10rem}.pv11{padding-top:10rem;padding-bottom:10rem}.mv11{margin-top:10rem;margin-bottom:10rem}.nv11{margin-top:-10rem;margin-bottom:-10rem}.ph11{padding-left:10rem;padding-right:10rem}.mh11{margin-left:10rem;margin-right:10rem}.nh11{margin-left:-10rem;margin-right:-10rem}.pa12{padding:18rem}.ma12{margin:18rem}.na12{margin:-18rem}.pl12{padding-left:18rem}.ml12{margin-left:18rem}.nl12{margin-left:-18rem}.pr12{padding-right:18rem}.mr12{margin-right:18rem}.nr12{margin-right:-18rem}.pt12{padding-top:18rem}.mt12{margin-top:18rem}.nt12{margin-top:-18rem}.pb12{padding-bottom:18rem}.mb12{margin-bottom:18rem}.nb12{margin-bottom:-18rem}.pv12{padding-top:18rem;padding-bottom:18rem}.mv12{margin-top:18rem;margin-bottom:18rem}.nv12{margin-top:-18rem;margin-bottom:-18rem}.ph12{padding-left:18rem;padding-right:18rem}.mh12{margin-left:18rem;margin-right:18rem}.nh12{margin-left:-18rem;margin-right:-18rem}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.top-1{top:1rem}.right-1{right:1rem}.bottom-1{bottom:1rem}.left-1{left:1rem}.top-2{top:2rem}.right-2{right:2rem}.bottom-2{bottom:2rem}.left-2{left:2rem}.top--1{top:-1rem}.right--1{right:-1rem}.bottom--1{bottom:-1rem}.left--1{left:-1rem}.top--2{top:-2rem}.right--2{right:-2rem}.bottom--2{bottom:-2rem}.left--2{left:-2rem}.absolute--fill{top:0;right:0;bottom:0;left:0}.cf:after,.cf:before{content:" ";display:table}.cf:after{clear:both}.cf{*zoom:1}.cl{clear:left}.cr{clear:right}.cb{clear:both}.cn{clear:none}.dn{display:none}.di{display:inline}.db{display:block}.dib{display:inline-block}.dit{display:inline-table}.dt{display:table}.dtc{display:table-cell}.dt-row{display:table-row}.dt-row-group{display:table-row-group}.dt-column{display:table-column}.dt-column-group{display:table-column-group}.dt--fixed{table-layout:fixed;width:100%}.flex{display:flex}.inline-flex{display:inline-flex}.flex-auto{flex:1 1 auto;min-width:0;min-height:0}.flex-none{flex:none}.flex-column{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.flex-wrap-reverse{flex-wrap:wrap-reverse}.flex-column-reverse{flex-direction:column-reverse}.flex-row-reverse{flex-direction:row-reverse}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-baseline{align-self:baseline}.self-stretch{align-self:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.content-start{align-content:flex-start}.content-end{align-content:flex-end}.content-center{align-content:center}.content-between{align-content:space-between}.content-around{align-content:space-around}.content-stretch{align-content:stretch}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-last{order:99999}.flex-grow-0{flex-grow:0}.flex-grow-1{flex-grow:1}.flex-shrink-0{flex-shrink:0}.flex-shrink-1{flex-shrink:1}.fl{float:left}.fl,.fr{_display:inline}.fr{float:right}.fn{float:none}.sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.serif{font-family:georgia,times,serif}.system-sans-serif{font-family:sans-serif}.system-serif{font-family:serif}.code,code{font-family:Consolas,monaco,monospace}.courier{font-family:Courier Next,courier,monospace}.helvetica{font-family:helvetica neue,helvetica,sans-serif}.avenir{font-family:avenir next,avenir,sans-serif}.athelas{font-family:athelas,georgia,serif}.georgia{font-family:georgia,serif}.times{font-family:times,serif}.bodoni{font-family:Bodoni MT,serif}.calisto{font-family:Calisto MT,serif}.garamond{font-family:garamond,serif}.baskerville{font-family:baskerville,serif}.i{font-style:italic}.fs-normal{font-style:normal}.normal{font-weight:400}.b{font-weight:700}.fw1{font-weight:100}.fw2{font-weight:200}.fw3{font-weight:300}.fw4{font-weight:400}.fw5{font-weight:500}.fw6{font-weight:600}.fw7{font-weight:700}.fw8{font-weight:800}.fw9{font-weight:900}.input-reset{-webkit-appearance:none;-moz-appearance:none}.button-reset::-moz-focus-inner,.input-reset::-moz-focus-inner{border:0;padding:0}.debug *{outline:1px solid gold}.debug-white *{outline:1px solid #fff}.debug-black *{outline:1px solid #000}.debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAFElEQVR4AWPAC97/9x0eCsAEPgwAVLshdpENIxcAAAAASUVORK5CYII=) repeat 0 0}.debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMklEQVR4AWOgCLz/b0epAa6UGuBOqQHOQHLUgFEDnAbcBZ4UGwDOkiCnkIhdgNgNxAYAiYlD+8sEuo8AAAAASUVORK5CYII=) repeat 0 0}.debug-grid-8-solid{background:#fff url(data:image/gif;base64,R0lGODdhCAAIAPEAAADw/wDx/////wAAACwAAAAACAAIAAACDZQvgaeb/lxbAIKA8y0AOw==) repeat 0 0}.debug-grid-16-solid{background:#fff url(data:image/gif;base64,R0lGODdhEAAQAPEAAADw/wDx/xXy/////ywAAAAAEAAQAAACIZyPKckYDQFsb6ZqD85jZ2+BkwiRFKehhqQCQgDHcgwEBQA7) repeat 0 0}.link{text-decoration:none}.link,.link:active,.link:focus,.link:hover,.link:link,.link:visited{transition:color .15s ease-in}.link:focus{outline:1px dotted currentColor}.list{list-style-type:none}.h1{height:1rem}.h2{height:2rem}.h3{height:4rem}.h4{height:8rem}.h5{height:16rem}.h-25{height:25%}.h-50{height:50%}.h-75{height:75%}.h-100{height:100%}.min-h-100{min-height:100%}.vh-25{height:25vh}.vh-50{height:50vh}.vh-75{height:75vh}.vh-100{height:100vh}.min-vh-100{min-height:100vh}.h-auto{height:auto}.h-inherit{height:inherit}.black{color:#000}.white{color:#fff}.gray0{color:#333}.gray1{color:#4d4d4d}.gray2{color:#7f7f7f}.gray3{color:#b1b2b3}.gray4{color:#e6e6e6}.gray5{color:#f9f9f9}.blue0{color:#ecf6ff}.blue1{color:#b0c7ff}.blue2{color:#4330fc}.blue3{color:#190d7b}.red0{color:#f9d6ce}.red1{color:#ffa073}.red2{color:#ee5432}.red3{color:#c10d30}.green0{color:#bdebcc}.green1{color:#2ed196}.green2{color:#2aa779}.green3{color:#286e55}.yellow0{color:#ffefc5}.yellow1{color:#ffd972}.yellow2{color:#fcc440}.yellow3{color:#ee892b}.bg-black{background-color:#000}.bg-white{background-color:#fff}.bg-gray0{background-color:#333}.bg-gray1{background-color:#4d4d4d}.bg-gray2{background-color:#7f7f7f}.bg-gray3{background-color:#b1b2b3}.bg-gray4{background-color:#e6e6e6}.bg-gray5{background-color:#f9f9f9}.bg-blue0{background-color:#ecf6ff}.bg-blue1{background-color:#b0c7ff}.bg-blue2{background-color:#4330fc}.bg-blue3{background-color:#190d7b}.bg-red0{background-color:#f9d6ce}.bg-red1{background-color:#ffa073}.bg-red2{background-color:#ee5432}.bg-red3{background-color:#c10d30}.bg-green0{background-color:#bdebcc}.bg-green1{background-color:#2ed196}.bg-green2{background-color:#2aa779}.bg-green3{background-color:#286e55}.bg-yellow0{background-color:#ffefc5}.bg-yellow1{background-color:#ffd972}.bg-yellow2{background-color:#fcc440}.bg-yellow3{background-color:#ee892b}.bg-transparent{background-color:transparent}.hover-black:focus,.hover-black:hover{color:#000}.hover-white:focus,.hover-white:hover{color:#fff}.hover-gray0:focus,.hover-gray0:hover{color:#333}.hover-gray1:focus,.hover-gray1:hover{color:#4d4d4d}.hover-gray2:focus,.hover-gray2:hover{color:#7f7f7f}.hover-gray3:focus,.hover-gray3:hover{color:#b1b2b3}.hover-gray4:focus,.hover-gray4:hover{color:#e6e6e6}.hover-gray5:focus,.hover-gray5:hover{color:#f9f9f9}.hover-blue0:focus,.hover-blue0:hover{color:#ecf6ff}.hover-blue1:focus,.hover-blue1:hover{color:#b0c7ff}.hover-blue2:focus,.hover-blue2:hover{color:#4330fc}.hover-blue3:focus,.hover-blue3:hover{color:#190d7b}.hover-red0:focus,.hover-red0:hover{color:#f9d6ce}.hover-red1:focus,.hover-red1:hover{color:#ffa073}.hover-red2:focus,.hover-red2:hover{color:#ee5432}.hover-red3:focus,.hover-red3:hover{color:#c10d30}.hover-green0:focus,.hover-green0:hover{color:#bdebcc}.hover-green1:focus,.hover-green1:hover{color:#2ed196}.hover-green2:focus,.hover-green2:hover{color:#2aa779}.hover-green3:focus,.hover-green3:hover{color:#286e55}.hover-yellow0:focus,.hover-yellow0:hover{color:#ffefc5}.hover-yellow1:focus,.hover-yellow1:hover{color:#ffd972}.hover-yellow2:focus,.hover-yellow2:hover{color:#fcc440}.hover-yellow3:focus,.hover-yellow3:hover{color:#ee892b}.hover-bg-black:focus,.hover-bg-black:hover{background-color:#000}.hover-bg-white:focus,.hover-bg-white:hover{background-color:#fff}.hover-bg-gray0:focus,.hover-bg-gray0:hover{background-color:#333}.hover-bg-gray1:focus,.hover-bg-gray1:hover{background-color:#4d4d4d}.hover-bg-gray2:focus,.hover-bg-gray2:hover{background-color:#7f7f7f}.hover-bg-gray3:focus,.hover-bg-gray3:hover{background-color:#b1b2b3}.hover-bg-gray4:focus,.hover-bg-gray4:hover{background-color:#e6e6e6}.hover-bg-gray5:focus,.hover-bg-gray5:hover{background-color:#f9f9f9}.hover-bg-blue0:focus,.hover-bg-blue0:hover{background-color:#ecf6ff}.hover-bg-blue1:focus,.hover-bg-blue1:hover{background-color:#b0c7ff}.hover-bg-blue2:focus,.hover-bg-blue2:hover{background-color:#4330fc}.hover-bg-blue3:focus,.hover-bg-blue3:hover{background-color:#190d7b}.hover-bg-red0:focus,.hover-bg-red0:hover{background-color:#f9d6ce}.hover-bg-red1:focus,.hover-bg-red1:hover{background-color:#ffa073}.hover-bg-red2:focus,.hover-bg-red2:hover{background-color:#ee5432}.hover-bg-red3:focus,.hover-bg-red3:hover{background-color:#c10d30}.hover-bg-green0:focus,.hover-bg-green0:hover{background-color:#bdebcc}.hover-bg-green1:focus,.hover-bg-green1:hover{background-color:#2ed196}.hover-bg-green2:focus,.hover-bg-green2:hover{background-color:#2aa779}.hover-bg-green3:focus,.hover-bg-green3:hover{background-color:#286e55}.hover-bg-yellow0:focus,.hover-bg-yellow0:hover{background-color:#ffefc5}.hover-bg-yellow1:focus,.hover-bg-yellow1:hover{background-color:#ffd972}.hover-bg-yellow2:focus,.hover-bg-yellow2:hover{background-color:#fcc440}.hover-bg-yellow3:focus,.hover-bg-yellow3:hover{background-color:#ee892b}.hover-bg-transparent:focus,.hover-bg-transparent:hover{background-color:transparent}img{max-width:100%}.tracked{letter-spacing:.1em}.tracked-tight{letter-spacing:-.05em}.tracked-mega{letter-spacing:.25em}.lh-solid{line-height:1.333333}.lh-title{line-height:1.5}.lh-copy{line-height:1.666666}.mw1{max-width:1rem}.mw2{max-width:2rem}.mw3{max-width:4rem}.mw4{max-width:8rem}.mw5{max-width:16rem}.mw6{max-width:32rem}.mw7{max-width:48rem}.mw8{max-width:64rem}.mw9{max-width:96rem}.mw-none{max-width:none}.mw-100{max-width:100%}.nested-copy-line-height ol,.nested-copy-line-height p,.nested-copy-line-height ul{line-height:1.5}.nested-headline-line-height h1,.nested-headline-line-height h2,.nested-headline-line-height h3,.nested-headline-line-height h4,.nested-headline-line-height h5,.nested-headline-line-height h6{line-height:1.25}.nested-list-reset ol,.nested-list-reset ul{padding-left:0;margin-left:0;list-style-type:none}.nested-copy-indent p+p{text-indent:1em;margin-top:0;margin-bottom:0}.nested-copy-separator p+p{margin-top:1.5em}.nested-img img{width:100%;max-width:100%;display:block}.nested-links a{color:#357edd;transition:color .15s ease-in}.nested-links a:focus,.nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.dim{opacity:1}.dim,.dim:focus,.dim:hover{transition:opacity .15s ease-in}.dim:focus,.dim:hover{opacity:.5}.dim:active{opacity:.8;transition:opacity .15s ease-out}.glow,.glow:focus,.glow:hover{transition:opacity .15s ease-in}.glow:focus,.glow:hover{opacity:1}.hide-child .child{opacity:0;transition:opacity .15s ease-in}.hide-child:active .child,.hide-child:focus .child,.hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.underline-hover:focus,.underline-hover:hover{text-decoration:underline}.grow{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-out;transition:transform .25s ease-out;transition:transform .25s ease-out,-webkit-transform .25s ease-out}.grow:focus,.grow:hover{-webkit-transform:scale(1.05);transform:scale(1.05)}.grow:active{-webkit-transform:scale(.9);transform:scale(.9)}.grow-large{-moz-osx-font-smoothing:grayscale;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);transition:-webkit-transform .25s ease-in-out;transition:transform .25s ease-in-out;transition:transform .25s ease-in-out,-webkit-transform .25s ease-in-out}.grow-large:focus,.grow-large:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.grow-large:active{-webkit-transform:scale(.95);transform:scale(.95)}.pointer:hover,.shadow-hover{cursor:pointer}.shadow-hover{position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:after{content:"";box-shadow:0 0 16px 2px rgba(0,0,0,.2);border-radius:inherit;opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;z-index:-1;transition:opacity .5s cubic-bezier(.165,.84,.44,1)}.shadow-hover:focus:after,.shadow-hover:hover:after{opacity:1}.bg-animate,.bg-animate:focus,.bg-animate:hover{transition:background-color .15s ease-in-out}.o-100{opacity:1}.o-90{opacity:.9}.o-80{opacity:.8}.o-70{opacity:.7}.o-60{opacity:.6}.o-50{opacity:.5}.o-40{opacity:.4}.o-30{opacity:.3}.o-20{opacity:.2}.o-10{opacity:.1}.o-05{opacity:.05}.o-025{opacity:.025}.o-0{opacity:0}.rotate-45{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline{outline:1px solid}.outline-transparent{outline:1px solid transparent}.outline-0{outline:0}.overflow-visible{overflow:visible}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.overflow-x-visible{overflow-x:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-visible{overflow-y:visible}.overflow-y-hidden{overflow-y:hidden}.overflow-y-scroll{overflow-y:scroll}.overflow-y-auto{overflow-y:auto}.static{position:static}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.collapse{border-collapse:collapse;border-spacing:0}.striped--light-silver:nth-child(odd){background-color:#aaa}.striped--moon-gray:nth-child(odd){background-color:#ccc}.striped--light-gray:nth-child(odd){background-color:#eee}.striped--near-white:nth-child(odd){background-color:#f4f4f4}.stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.strike{text-decoration:line-through}.underline{text-decoration:underline}.no-underline{text-decoration:none}.tl{text-align:left}.tr{text-align:right}.tc{text-align:center}.tj{text-align:justify}.ttc{text-transform:capitalize}.ttl{text-transform:lowercase}.ttu{text-transform:uppercase}.ttn{text-transform:none}.v-base{vertical-align:baseline}.v-mid{vertical-align:middle}.v-top{vertical-align:top}.v-btm{vertical-align:bottom}.f1{font-size:4.5rem}.f2{font-size:4rem}.f3{font-size:3rem}.f4{font-size:2rem}.f5{font-size:1.5rem}.f6{font-size:1.125rem}.f7{font-size:1rem}.f8{font-size:.875rem}.f9{font-size:.75rem}.measure{max-width:30em}.measure-wide{max-width:34em}.measure-narrow{max-width:20em}.small-caps{font-variant:small-caps}.indent{text-indent:1em;margin-top:0;margin-bottom:0}.truncate{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.overflow-container{overflow-y:scroll}.center{margin-left:auto}.center,.mr-auto{margin-right:auto}.ml-auto{margin-left:auto}.clip{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal{white-space:normal}.nowrap{white-space:nowrap}.pre{white-space:pre}.w1{width:1rem}.w2{width:2rem}.w3{width:4rem}.w4{width:8rem}.w5{width:16rem}.w-10{width:10%}.w-20{width:20%}.w-25{width:25%}.w-30{width:30%}.w-33{width:33%}.w-34{width:34%}.w-40{width:40%}.w-50{width:50%}.w-60{width:60%}.w-70{width:70%}.w-75{width:75%}.w-80{width:80%}.w-90{width:90%}.w-100{width:100%}.w-third{width:33.33333%}.w-two-thirds{width:66.66667%}.w-auto{width:auto}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-3{z-index:3}.z-4{z-index:4}.z-5{z-index:5}.z-999{z-index:999}.z-9999{z-index:9999}.z-max{z-index:2147483647}.z-inherit{z-index:inherit}.z-initial{z-index:auto}.z-unset{z-index:unset}@media screen and (min-width:34.375em) and (max-width:46.875em){.aspect-ratio-m{height:0;position:relative}.aspect-ratio--16x9-m{padding-bottom:56.25%}.aspect-ratio--9x16-m{padding-bottom:177.77%}.aspect-ratio--4x3-m{padding-bottom:75%}.aspect-ratio--3x4-m{padding-bottom:133.33%}.aspect-ratio--6x4-m{padding-bottom:66.6%}.aspect-ratio--4x6-m{padding-bottom:150%}.aspect-ratio--8x5-m{padding-bottom:62.5%}.aspect-ratio--5x8-m{padding-bottom:160%}.aspect-ratio--7x5-m{padding-bottom:71.42%}.aspect-ratio--5x7-m{padding-bottom:140%}.aspect-ratio--1x1-m{padding-bottom:100%}.aspect-ratio--object-m{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-m{background-size:cover!important}.contain-m{background-size:contain!important}.bg-center-m{background-position:50%}.bg-center-m,.bg-top-m{background-repeat:no-repeat}.bg-top-m{background-position:top}.bg-right-m{background-position:100%}.bg-bottom-m,.bg-right-m{background-repeat:no-repeat}.bg-bottom-m{background-position:bottom}.bg-left-m{background-repeat:no-repeat;background-position:0}.ba-m{border-style:solid;border-width:1px}.bt-m{border-top-style:solid;border-top-width:1px}.br-m{border-right-style:solid;border-right-width:1px}.bb-m{border-bottom-style:solid;border-bottom-width:1px}.bl-m{border-left-style:solid;border-left-width:1px}.bn-m{border-style:none;border-width:0}.br0-m{border-radius:0}.br1-m{border-radius:.125rem}.br2-m{border-radius:.25rem}.br3-m{border-radius:.5rem}.br4-m{border-radius:1rem}.br-100-m{border-radius:100%}.br-pill-m{border-radius:9999px}.br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.br--top-m{border-bottom-right-radius:0}.br--right-m,.br--top-m{border-bottom-left-radius:0}.br--right-m{border-top-left-radius:0}.br--left-m{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-m{border-style:dotted}.b--dashed-m{border-style:dashed}.b--solid-m{border-style:solid}.b--none-m{border-style:none}.bw0-m{border-width:0}.bw1-m{border-width:.125rem}.bw2-m{border-width:.25rem}.bw3-m{border-width:.5rem}.bw4-m{border-width:1rem}.bw5-m{border-width:2rem}.bt-0-m{border-top-width:0}.br-0-m{border-right-width:0}.bb-0-m{border-bottom-width:0}.bl-0-m{border-left-width:0}.shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-m{padding:0}.ma0-m,.na0-m{margin:0}.pl0-m{padding-left:0}.ml0-m,.nl0-m{margin-left:0}.pr0-m{padding-right:0}.mr0-m,.nr0-m{margin-right:0}.pt0-m{padding-top:0}.mt0-m,.nt0-m{margin-top:0}.pb0-m{padding-bottom:0}.mb0-m,.nb0-m{margin-bottom:0}.pv0-m{padding-top:0;padding-bottom:0}.mv0-m,.nv0-m{margin-top:0;margin-bottom:0}.ph0-m{padding-left:0;padding-right:0}.mh0-m,.nh0-m{margin-left:0;margin-right:0}.pa1-m{padding:.25rem}.ma1-m{margin:.25rem}.na1-m{margin:-.25rem}.pl1-m{padding-left:.25rem}.ml1-m{margin-left:.25rem}.nl1-m{margin-left:-.25rem}.pr1-m{padding-right:.25rem}.mr1-m{margin-right:.25rem}.nr1-m{margin-right:-.25rem}.pt1-m{padding-top:.25rem}.mt1-m{margin-top:.25rem}.nt1-m{margin-top:-.25rem}.pb1-m{padding-bottom:.25rem}.mb1-m{margin-bottom:.25rem}.nb1-m{margin-bottom:-.25rem}.pv1-m{padding-top:.25rem;padding-bottom:.25rem}.mv1-m{margin-top:.25rem;margin-bottom:.25rem}.nv1-m{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-m{padding-left:.25rem;padding-right:.25rem}.mh1-m{margin-left:.25rem;margin-right:.25rem}.nh1-m{margin-left:-.25rem;margin-right:-.25rem}.pa2-m{padding:.5rem}.ma2-m{margin:.5rem}.na2-m{margin:-.5rem}.pl2-m{padding-left:.5rem}.ml2-m{margin-left:.5rem}.nl2-m{margin-left:-.5rem}.pr2-m{padding-right:.5rem}.mr2-m{margin-right:.5rem}.nr2-m{margin-right:-.5rem}.pt2-m{padding-top:.5rem}.mt2-m{margin-top:.5rem}.nt2-m{margin-top:-.5rem}.pb2-m{padding-bottom:.5rem}.mb2-m{margin-bottom:.5rem}.nb2-m{margin-bottom:-.5rem}.pv2-m{padding-top:.5rem;padding-bottom:.5rem}.mv2-m{margin-top:.5rem;margin-bottom:.5rem}.nv2-m{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-m{padding-left:.5rem;padding-right:.5rem}.mh2-m{margin-left:.5rem;margin-right:.5rem}.nh2-m{margin-left:-.5rem;margin-right:-.5rem}.pa3-m{padding:.75rem}.ma3-m{margin:.75rem}.na3-m{margin:-.75rem}.pl3-m{padding-left:.75rem}.ml3-m{margin-left:.75rem}.nl3-m{margin-left:-.75rem}.pr3-m{padding-right:.75rem}.mr3-m{margin-right:.75rem}.nr3-m{margin-right:-.75rem}.pt3-m{padding-top:.75rem}.mt3-m{margin-top:.75rem}.nt3-m{margin-top:-.75rem}.pb3-m{padding-bottom:.75rem}.mb3-m{margin-bottom:.75rem}.nb3-m{margin-bottom:-.75rem}.pv3-m{padding-top:.75rem;padding-bottom:.75rem}.mv3-m{margin-top:.75rem;margin-bottom:.75rem}.nv3-m{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-m{padding-left:.75rem;padding-right:.75rem}.mh3-m{margin-left:.75rem;margin-right:.75rem}.nh3-m{margin-left:-.75rem;margin-right:-.75rem}.pa4-m{padding:1rem}.ma4-m{margin:1rem}.na4-m{margin:-1rem}.pl4-m{padding-left:1rem}.ml4-m{margin-left:1rem}.nl4-m{margin-left:-1rem}.pr4-m{padding-right:1rem}.mr4-m{margin-right:1rem}.nr4-m{margin-right:-1rem}.pt4-m{padding-top:1rem}.mt4-m{margin-top:1rem}.nt4-m{margin-top:-1rem}.pb4-m{padding-bottom:1rem}.mb4-m{margin-bottom:1rem}.nb4-m{margin-bottom:-1rem}.pv4-m{padding-top:1rem;padding-bottom:1rem}.mv4-m{margin-top:1rem;margin-bottom:1rem}.nv4-m{margin-top:-1rem;margin-bottom:-1rem}.ph4-m{padding-left:1rem;padding-right:1rem}.mh4-m{margin-left:1rem;margin-right:1rem}.nh4-m{margin-left:-1rem;margin-right:-1rem}.pa5-m{padding:1.25rem}.ma5-m{margin:1.25rem}.na5-m{margin:-1.25rem}.pl5-m{padding-left:1.25rem}.ml5-m{margin-left:1.25rem}.nl5-m{margin-left:-1.25rem}.pr5-m{padding-right:1.25rem}.mr5-m{margin-right:1.25rem}.nr5-m{margin-right:-1.25rem}.pt5-m{padding-top:1.25rem}.mt5-m{margin-top:1.25rem}.nt5-m{margin-top:-1.25rem}.pb5-m{padding-bottom:1.25rem}.mb5-m{margin-bottom:1.25rem}.nb5-m{margin-bottom:-1.25rem}.pv5-m{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-m{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-m{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-m{padding-left:1.25rem;padding-right:1.25rem}.mh5-m{margin-left:1.25rem;margin-right:1.25rem}.nh5-m{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-m{padding:1.5rem}.ma6-m{margin:1.5rem}.na6-m{margin:-1.5rem}.pl6-m{padding-left:1.5rem}.ml6-m{margin-left:1.5rem}.nl6-m{margin-left:-1.5rem}.pr6-m{padding-right:1.5rem}.mr6-m{margin-right:1.5rem}.nr6-m{margin-right:-1.5rem}.pt6-m{padding-top:1.5rem}.mt6-m{margin-top:1.5rem}.nt6-m{margin-top:-1.5rem}.pb6-m{padding-bottom:1.5rem}.mb6-m{margin-bottom:1.5rem}.nb6-m{margin-bottom:-1.5rem}.pv6-m{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-m{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-m{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-m{padding-left:1.5rem;padding-right:1.5rem}.mh6-m{margin-left:1.5rem;margin-right:1.5rem}.nh6-m{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-m{padding:2rem}.ma7-m{margin:2rem}.na7-m{margin:-2rem}.pl7-m{padding-left:2rem}.ml7-m{margin-left:2rem}.nl7-m{margin-left:-2rem}.pr7-m{padding-right:2rem}.mr7-m{margin-right:2rem}.nr7-m{margin-right:-2rem}.pt7-m{padding-top:2rem}.mt7-m{margin-top:2rem}.nt7-m{margin-top:-2rem}.pb7-m{padding-bottom:2rem}.mb7-m{margin-bottom:2rem}.nb7-m{margin-bottom:-2rem}.pv7-m{padding-top:2rem;padding-bottom:2rem}.mv7-m{margin-top:2rem;margin-bottom:2rem}.nv7-m{margin-top:-2rem;margin-bottom:-2rem}.ph7-m{padding-left:2rem;padding-right:2rem}.mh7-m{margin-left:2rem;margin-right:2rem}.nh7-m{margin-left:-2rem;margin-right:-2rem}.pa8-m{padding:3rem}.ma8-m{margin:3rem}.na8-m{margin:-3rem}.pl8-m{padding-left:3rem}.ml8-m{margin-left:3rem}.nl8-m{margin-left:-3rem}.pr8-m{padding-right:3rem}.mr8-m{margin-right:3rem}.nr8-m{margin-right:-3rem}.pt8-m{padding-top:3rem}.mt8-m{margin-top:3rem}.nt8-m{margin-top:-3rem}.pb8-m{padding-bottom:3rem}.mb8-m{margin-bottom:3rem}.nb8-m{margin-bottom:-3rem}.pv8-m{padding-top:3rem;padding-bottom:3rem}.mv8-m{margin-top:3rem;margin-bottom:3rem}.nv8-m{margin-top:-3rem;margin-bottom:-3rem}.ph8-m{padding-left:3rem;padding-right:3rem}.mh8-m{margin-left:3rem;margin-right:3rem}.nh8-m{margin-left:-3rem;margin-right:-3rem}.pa9-m{padding:4rem}.ma9-m{margin:4rem}.na9-m{margin:-4rem}.pl9-m{padding-left:4rem}.ml9-m{margin-left:4rem}.nl9-m{margin-left:-4rem}.pr9-m{padding-right:4rem}.mr9-m{margin-right:4rem}.nr9-m{margin-right:-4rem}.pt9-m{padding-top:4rem}.mt9-m{margin-top:4rem}.nt9-m{margin-top:-4rem}.pb9-m{padding-bottom:4rem}.mb9-m{margin-bottom:4rem}.nb9-m{margin-bottom:-4rem}.pv9-m{padding-top:4rem;padding-bottom:4rem}.mv9-m{margin-top:4rem;margin-bottom:4rem}.nv9-m{margin-top:-4rem;margin-bottom:-4rem}.ph9-m{padding-left:4rem;padding-right:4rem}.mh9-m{margin-left:4rem;margin-right:4rem}.nh9-m{margin-left:-4rem;margin-right:-4rem}.pa10-m{padding:6rem}.ma10-m{margin:6rem}.na10-m{margin:-6rem}.pl10-m{padding-left:6rem}.ml10-m{margin-left:6rem}.nl10-m{margin-left:-6rem}.pr10-m{padding-right:6rem}.mr10-m{margin-right:6rem}.nr10-m{margin-right:-6rem}.pt10-m{padding-top:6rem}.mt10-m{margin-top:6rem}.nt10-m{margin-top:-6rem}.pb10-m{padding-bottom:6rem}.mb10-m{margin-bottom:6rem}.nb10-m{margin-bottom:-6rem}.pv10-m{padding-top:6rem;padding-bottom:6rem}.mv10-m{margin-top:6rem;margin-bottom:6rem}.nv10-m{margin-top:-6rem;margin-bottom:-6rem}.ph10-m{padding-left:6rem;padding-right:6rem}.mh10-m{margin-left:6rem;margin-right:6rem}.nh10-m{margin-left:-6rem;margin-right:-6rem}.pa11-m{padding:10rem}.ma11-m{margin:10rem}.na11-m{margin:-10rem}.pl11-m{padding-left:10rem}.ml11-m{margin-left:10rem}.nl11-m{margin-left:-10rem}.pr11-m{padding-right:10rem}.mr11-m{margin-right:10rem}.nr11-m{margin-right:-10rem}.pt11-m{padding-top:10rem}.mt11-m{margin-top:10rem}.nt11-m{margin-top:-10rem}.pb11-m{padding-bottom:10rem}.mb11-m{margin-bottom:10rem}.nb11-m{margin-bottom:-10rem}.pv11-m{padding-top:10rem;padding-bottom:10rem}.mv11-m{margin-top:10rem;margin-bottom:10rem}.nv11-m{margin-top:-10rem;margin-bottom:-10rem}.ph11-m{padding-left:10rem;padding-right:10rem}.mh11-m{margin-left:10rem;margin-right:10rem}.nh11-m{margin-left:-10rem;margin-right:-10rem}.pa12-m{padding:18rem}.ma12-m{margin:18rem}.na12-m{margin:-18rem}.pl12-m{padding-left:18rem}.ml12-m{margin-left:18rem}.nl12-m{margin-left:-18rem}.pr12-m{padding-right:18rem}.mr12-m{margin-right:18rem}.nr12-m{margin-right:-18rem}.pt12-m{padding-top:18rem}.mt12-m{margin-top:18rem}.nt12-m{margin-top:-18rem}.pb12-m{padding-bottom:18rem}.mb12-m{margin-bottom:18rem}.nb12-m{margin-bottom:-18rem}.pv12-m{padding-top:18rem;padding-bottom:18rem}.mv12-m{margin-top:18rem;margin-bottom:18rem}.nv12-m{margin-top:-18rem;margin-bottom:-18rem}.ph12-m{padding-left:18rem;padding-right:18rem}.mh12-m{margin-left:18rem;margin-right:18rem}.nh12-m{margin-left:-18rem;margin-right:-18rem}.top-0-m{top:0}.right-0-m{right:0}.bottom-0-m{bottom:0}.left-0-m{left:0}.top-1-m{top:1rem}.right-1-m{right:1rem}.bottom-1-m{bottom:1rem}.left-1-m{left:1rem}.top-2-m{top:2rem}.right-2-m{right:2rem}.bottom-2-m{bottom:2rem}.left-2-m{left:2rem}.top--1-m{top:-1rem}.right--1-m{right:-1rem}.bottom--1-m{bottom:-1rem}.left--1-m{left:-1rem}.top--2-m{top:-2rem}.right--2-m{right:-2rem}.bottom--2-m{bottom:-2rem}.left--2-m{left:-2rem}.absolute--fill-m{top:0;right:0;bottom:0;left:0}.cf-m:after,.cf-m:before{content:" ";display:table}.cf-m:after{clear:both}.cf-m{*zoom:1}.cl-m{clear:left}.cr-m{clear:right}.cb-m{clear:both}.cn-m{clear:none}.dn-m{display:none}.di-m{display:inline}.db-m{display:block}.dib-m{display:inline-block}.dit-m{display:inline-table}.dt-m{display:table}.dtc-m{display:table-cell}.dt-row-m{display:table-row}.dt-row-group-m{display:table-row-group}.dt-column-m{display:table-column}.dt-column-group-m{display:table-column-group}.dt--fixed-m{table-layout:fixed;width:100%}.flex-m{display:flex}.inline-flex-m{display:inline-flex}.flex-auto-m{flex:1 1 auto;min-width:0;min-height:0}.flex-none-m{flex:none}.flex-column-m{flex-direction:column}.flex-row-m{flex-direction:row}.flex-wrap-m{flex-wrap:wrap}.flex-nowrap-m{flex-wrap:nowrap}.flex-wrap-reverse-m{flex-wrap:wrap-reverse}.flex-column-reverse-m{flex-direction:column-reverse}.flex-row-reverse-m{flex-direction:row-reverse}.items-start-m{align-items:flex-start}.items-end-m{align-items:flex-end}.items-center-m{align-items:center}.items-baseline-m{align-items:baseline}.items-stretch-m{align-items:stretch}.self-start-m{align-self:flex-start}.self-end-m{align-self:flex-end}.self-center-m{align-self:center}.self-baseline-m{align-self:baseline}.self-stretch-m{align-self:stretch}.justify-start-m{justify-content:flex-start}.justify-end-m{justify-content:flex-end}.justify-center-m{justify-content:center}.justify-between-m{justify-content:space-between}.justify-around-m{justify-content:space-around}.content-start-m{align-content:flex-start}.content-end-m{align-content:flex-end}.content-center-m{align-content:center}.content-between-m{align-content:space-between}.content-around-m{align-content:space-around}.content-stretch-m{align-content:stretch}.order-0-m{order:0}.order-1-m{order:1}.order-2-m{order:2}.order-3-m{order:3}.order-4-m{order:4}.order-5-m{order:5}.order-6-m{order:6}.order-7-m{order:7}.order-8-m{order:8}.order-last-m{order:99999}.flex-grow-0-m{flex-grow:0}.flex-grow-1-m{flex-grow:1}.flex-shrink-0-m{flex-shrink:0}.flex-shrink-1-m{flex-shrink:1}.fl-m{float:left}.fl-m,.fr-m{_display:inline}.fr-m{float:right}.fn-m{float:none}.i-m{font-style:italic}.fs-normal-m{font-style:normal}.normal-m{font-weight:400}.b-m{font-weight:700}.fw1-m{font-weight:100}.fw2-m{font-weight:200}.fw3-m{font-weight:300}.fw4-m{font-weight:400}.fw5-m{font-weight:500}.fw6-m{font-weight:600}.fw7-m{font-weight:700}.fw8-m{font-weight:800}.fw9-m{font-weight:900}.h1-m{height:1rem}.h2-m{height:2rem}.h3-m{height:4rem}.h4-m{height:8rem}.h5-m{height:16rem}.h-25-m{height:25%}.h-50-m{height:50%}.h-75-m{height:75%}.h-100-m{height:100%}.min-h-100-m{min-height:100%}.vh-25-m{height:25vh}.vh-50-m{height:50vh}.vh-75-m{height:75vh}.vh-100-m{height:100vh}.min-vh-100-m{min-height:100vh}.h-auto-m{height:auto}.h-inherit-m{height:inherit}.tracked-m{letter-spacing:.1em}.tracked-tight-m{letter-spacing:-.05em}.tracked-mega-m{letter-spacing:.25em}.lh-solid-m{line-height:1.333333}.lh-title-m{line-height:1.5}.lh-copy-m{line-height:1.666666}.mw1-m{max-width:1rem}.mw2-m{max-width:2rem}.mw3-m{max-width:4rem}.mw4-m{max-width:8rem}.mw5-m{max-width:16rem}.mw6-m{max-width:32rem}.mw7-m{max-width:48rem}.mw8-m{max-width:64rem}.mw9-m{max-width:96rem}.mw-none-m{max-width:none}.mw-100-m{max-width:100%}.o-100-m{opacity:1}.o-90-m{opacity:.9}.o-80-m{opacity:.8}.o-70-m{opacity:.7}.o-60-m{opacity:.6}.o-50-m{opacity:.5}.o-40-m{opacity:.4}.o-30-m{opacity:.3}.o-20-m{opacity:.2}.o-10-m{opacity:.1}.o-05-m{opacity:.05}.o-025-m{opacity:.025}.o-0-m{opacity:0}.rotate-45-m{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-m{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-m{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-m{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-m{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-m{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-m{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-m{outline:1px solid}.outline-transparent-m{outline:1px solid transparent}.outline-0-m{outline:0}.overflow-visible-m{overflow:visible}.overflow-hidden-m{overflow:hidden}.overflow-scroll-m{overflow:scroll}.overflow-auto-m{overflow:auto}.overflow-x-visible-m{overflow-x:visible}.overflow-x-hidden-m{overflow-x:hidden}.overflow-x-scroll-m{overflow-x:scroll}.overflow-x-auto-m{overflow-x:auto}.overflow-y-visible-m{overflow-y:visible}.overflow-y-hidden-m{overflow-y:hidden}.overflow-y-scroll-m{overflow-y:scroll}.overflow-y-auto-m{overflow-y:auto}.static-m{position:static}.relative-m{position:relative}.absolute-m{position:absolute}.fixed-m{position:fixed}.strike-m{text-decoration:line-through}.underline-m{text-decoration:underline}.no-underline-m{text-decoration:none}.tl-m{text-align:left}.tr-m{text-align:right}.tc-m{text-align:center}.tj-m{text-align:justify}.ttc-m{text-transform:capitalize}.ttl-m{text-transform:lowercase}.ttu-m{text-transform:uppercase}.ttn-m{text-transform:none}.f1-m{font-size:4.5rem}.f2-m{font-size:4rem}.f3-m{font-size:3rem}.f4-m{font-size:2rem}.f5-m{font-size:1.5rem}.f6-m{font-size:1.125rem}.f7-m{font-size:1rem}.f8-m{font-size:.875rem}.f9-m{font-size:.75rem}.measure-m{max-width:30em}.measure-wide-m{max-width:34em}.measure-narrow-m{max-width:20em}.small-caps-m{font-variant:small-caps}.indent-m{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-m{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-m{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-m{white-space:normal}.nowrap-m{white-space:nowrap}.pre-m{white-space:pre}.w1-m{width:1rem}.w2-m{width:2rem}.w3-m{width:4rem}.w4-m{width:8rem}.w5-m{width:16rem}.w-10-m{width:10%}.w-20-m{width:20%}.w-25-m{width:25%}.w-30-m{width:30%}.w-33-m{width:33%}.w-34-m{width:34%}.w-40-m{width:40%}.w-50-m{width:50%}.w-60-m{width:60%}.w-70-m{width:70%}.w-75-m{width:75%}.w-80-m{width:80%}.w-90-m{width:90%}.w-100-m{width:100%}.w-third-m{width:33.33333%}.w-two-thirds-m{width:66.66667%}.w-auto-m{width:auto}}@media screen and (min-width:46.875em) and (max-width:60em){.aspect-ratio-l{height:0;position:relative}.aspect-ratio--16x9-l{padding-bottom:56.25%}.aspect-ratio--9x16-l{padding-bottom:177.77%}.aspect-ratio--4x3-l{padding-bottom:75%}.aspect-ratio--3x4-l{padding-bottom:133.33%}.aspect-ratio--6x4-l{padding-bottom:66.6%}.aspect-ratio--4x6-l{padding-bottom:150%}.aspect-ratio--8x5-l{padding-bottom:62.5%}.aspect-ratio--5x8-l{padding-bottom:160%}.aspect-ratio--7x5-l{padding-bottom:71.42%}.aspect-ratio--5x7-l{padding-bottom:140%}.aspect-ratio--1x1-l{padding-bottom:100%}.aspect-ratio--object-l{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-l{background-size:cover!important}.contain-l{background-size:contain!important}.bg-center-l{background-position:50%}.bg-center-l,.bg-top-l{background-repeat:no-repeat}.bg-top-l{background-position:top}.bg-right-l{background-position:100%}.bg-bottom-l,.bg-right-l{background-repeat:no-repeat}.bg-bottom-l{background-position:bottom}.bg-left-l{background-repeat:no-repeat;background-position:0}.ba-l{border-style:solid;border-width:1px}.bt-l{border-top-style:solid;border-top-width:1px}.br-l{border-right-style:solid;border-right-width:1px}.bb-l{border-bottom-style:solid;border-bottom-width:1px}.bl-l{border-left-style:solid;border-left-width:1px}.bn-l{border-style:none;border-width:0}.br0-l{border-radius:0}.br1-l{border-radius:.125rem}.br2-l{border-radius:.25rem}.br3-l{border-radius:.5rem}.br4-l{border-radius:1rem}.br-100-l{border-radius:100%}.br-pill-l{border-radius:9999px}.br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.br--top-l{border-bottom-right-radius:0}.br--right-l,.br--top-l{border-bottom-left-radius:0}.br--right-l{border-top-left-radius:0}.br--left-l{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-l{border-style:dotted}.b--dashed-l{border-style:dashed}.b--solid-l{border-style:solid}.b--none-l{border-style:none}.bw0-l{border-width:0}.bw1-l{border-width:.125rem}.bw2-l{border-width:.25rem}.bw3-l{border-width:.5rem}.bw4-l{border-width:1rem}.bw5-l{border-width:2rem}.bt-0-l{border-top-width:0}.br-0-l{border-right-width:0}.bb-0-l{border-bottom-width:0}.bl-0-l{border-left-width:0}.shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-l{padding:0}.ma0-l,.na0-l{margin:0}.pl0-l{padding-left:0}.ml0-l,.nl0-l{margin-left:0}.pr0-l{padding-right:0}.mr0-l,.nr0-l{margin-right:0}.pt0-l{padding-top:0}.mt0-l,.nt0-l{margin-top:0}.pb0-l{padding-bottom:0}.mb0-l,.nb0-l{margin-bottom:0}.pv0-l{padding-top:0;padding-bottom:0}.mv0-l,.nv0-l{margin-top:0;margin-bottom:0}.ph0-l{padding-left:0;padding-right:0}.mh0-l,.nh0-l{margin-left:0;margin-right:0}.pa1-l{padding:.25rem}.ma1-l{margin:.25rem}.na1-l{margin:-.25rem}.pl1-l{padding-left:.25rem}.ml1-l{margin-left:.25rem}.nl1-l{margin-left:-.25rem}.pr1-l{padding-right:.25rem}.mr1-l{margin-right:.25rem}.nr1-l{margin-right:-.25rem}.pt1-l{padding-top:.25rem}.mt1-l{margin-top:.25rem}.nt1-l{margin-top:-.25rem}.pb1-l{padding-bottom:.25rem}.mb1-l{margin-bottom:.25rem}.nb1-l{margin-bottom:-.25rem}.pv1-l{padding-top:.25rem;padding-bottom:.25rem}.mv1-l{margin-top:.25rem;margin-bottom:.25rem}.nv1-l{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-l{padding-left:.25rem;padding-right:.25rem}.mh1-l{margin-left:.25rem;margin-right:.25rem}.nh1-l{margin-left:-.25rem;margin-right:-.25rem}.pa2-l{padding:.5rem}.ma2-l{margin:.5rem}.na2-l{margin:-.5rem}.pl2-l{padding-left:.5rem}.ml2-l{margin-left:.5rem}.nl2-l{margin-left:-.5rem}.pr2-l{padding-right:.5rem}.mr2-l{margin-right:.5rem}.nr2-l{margin-right:-.5rem}.pt2-l{padding-top:.5rem}.mt2-l{margin-top:.5rem}.nt2-l{margin-top:-.5rem}.pb2-l{padding-bottom:.5rem}.mb2-l{margin-bottom:.5rem}.nb2-l{margin-bottom:-.5rem}.pv2-l{padding-top:.5rem;padding-bottom:.5rem}.mv2-l{margin-top:.5rem;margin-bottom:.5rem}.nv2-l{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-l{padding-left:.5rem;padding-right:.5rem}.mh2-l{margin-left:.5rem;margin-right:.5rem}.nh2-l{margin-left:-.5rem;margin-right:-.5rem}.pa3-l{padding:.75rem}.ma3-l{margin:.75rem}.na3-l{margin:-.75rem}.pl3-l{padding-left:.75rem}.ml3-l{margin-left:.75rem}.nl3-l{margin-left:-.75rem}.pr3-l{padding-right:.75rem}.mr3-l{margin-right:.75rem}.nr3-l{margin-right:-.75rem}.pt3-l{padding-top:.75rem}.mt3-l{margin-top:.75rem}.nt3-l{margin-top:-.75rem}.pb3-l{padding-bottom:.75rem}.mb3-l{margin-bottom:.75rem}.nb3-l{margin-bottom:-.75rem}.pv3-l{padding-top:.75rem;padding-bottom:.75rem}.mv3-l{margin-top:.75rem;margin-bottom:.75rem}.nv3-l{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-l{padding-left:.75rem;padding-right:.75rem}.mh3-l{margin-left:.75rem;margin-right:.75rem}.nh3-l{margin-left:-.75rem;margin-right:-.75rem}.pa4-l{padding:1rem}.ma4-l{margin:1rem}.na4-l{margin:-1rem}.pl4-l{padding-left:1rem}.ml4-l{margin-left:1rem}.nl4-l{margin-left:-1rem}.pr4-l{padding-right:1rem}.mr4-l{margin-right:1rem}.nr4-l{margin-right:-1rem}.pt4-l{padding-top:1rem}.mt4-l{margin-top:1rem}.nt4-l{margin-top:-1rem}.pb4-l{padding-bottom:1rem}.mb4-l{margin-bottom:1rem}.nb4-l{margin-bottom:-1rem}.pv4-l{padding-top:1rem;padding-bottom:1rem}.mv4-l{margin-top:1rem;margin-bottom:1rem}.nv4-l{margin-top:-1rem;margin-bottom:-1rem}.ph4-l{padding-left:1rem;padding-right:1rem}.mh4-l{margin-left:1rem;margin-right:1rem}.nh4-l{margin-left:-1rem;margin-right:-1rem}.pa5-l{padding:1.25rem}.ma5-l{margin:1.25rem}.na5-l{margin:-1.25rem}.pl5-l{padding-left:1.25rem}.ml5-l{margin-left:1.25rem}.nl5-l{margin-left:-1.25rem}.pr5-l{padding-right:1.25rem}.mr5-l{margin-right:1.25rem}.nr5-l{margin-right:-1.25rem}.pt5-l{padding-top:1.25rem}.mt5-l{margin-top:1.25rem}.nt5-l{margin-top:-1.25rem}.pb5-l{padding-bottom:1.25rem}.mb5-l{margin-bottom:1.25rem}.nb5-l{margin-bottom:-1.25rem}.pv5-l{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-l{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-l{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-l{padding-left:1.25rem;padding-right:1.25rem}.mh5-l{margin-left:1.25rem;margin-right:1.25rem}.nh5-l{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-l{padding:1.5rem}.ma6-l{margin:1.5rem}.na6-l{margin:-1.5rem}.pl6-l{padding-left:1.5rem}.ml6-l{margin-left:1.5rem}.nl6-l{margin-left:-1.5rem}.pr6-l{padding-right:1.5rem}.mr6-l{margin-right:1.5rem}.nr6-l{margin-right:-1.5rem}.pt6-l{padding-top:1.5rem}.mt6-l{margin-top:1.5rem}.nt6-l{margin-top:-1.5rem}.pb6-l{padding-bottom:1.5rem}.mb6-l{margin-bottom:1.5rem}.nb6-l{margin-bottom:-1.5rem}.pv6-l{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-l{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-l{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-l{padding-left:1.5rem;padding-right:1.5rem}.mh6-l{margin-left:1.5rem;margin-right:1.5rem}.nh6-l{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-l{padding:2rem}.ma7-l{margin:2rem}.na7-l{margin:-2rem}.pl7-l{padding-left:2rem}.ml7-l{margin-left:2rem}.nl7-l{margin-left:-2rem}.pr7-l{padding-right:2rem}.mr7-l{margin-right:2rem}.nr7-l{margin-right:-2rem}.pt7-l{padding-top:2rem}.mt7-l{margin-top:2rem}.nt7-l{margin-top:-2rem}.pb7-l{padding-bottom:2rem}.mb7-l{margin-bottom:2rem}.nb7-l{margin-bottom:-2rem}.pv7-l{padding-top:2rem;padding-bottom:2rem}.mv7-l{margin-top:2rem;margin-bottom:2rem}.nv7-l{margin-top:-2rem;margin-bottom:-2rem}.ph7-l{padding-left:2rem;padding-right:2rem}.mh7-l{margin-left:2rem;margin-right:2rem}.nh7-l{margin-left:-2rem;margin-right:-2rem}.pa8-l{padding:3rem}.ma8-l{margin:3rem}.na8-l{margin:-3rem}.pl8-l{padding-left:3rem}.ml8-l{margin-left:3rem}.nl8-l{margin-left:-3rem}.pr8-l{padding-right:3rem}.mr8-l{margin-right:3rem}.nr8-l{margin-right:-3rem}.pt8-l{padding-top:3rem}.mt8-l{margin-top:3rem}.nt8-l{margin-top:-3rem}.pb8-l{padding-bottom:3rem}.mb8-l{margin-bottom:3rem}.nb8-l{margin-bottom:-3rem}.pv8-l{padding-top:3rem;padding-bottom:3rem}.mv8-l{margin-top:3rem;margin-bottom:3rem}.nv8-l{margin-top:-3rem;margin-bottom:-3rem}.ph8-l{padding-left:3rem;padding-right:3rem}.mh8-l{margin-left:3rem;margin-right:3rem}.nh8-l{margin-left:-3rem;margin-right:-3rem}.pa9-l{padding:4rem}.ma9-l{margin:4rem}.na9-l{margin:-4rem}.pl9-l{padding-left:4rem}.ml9-l{margin-left:4rem}.nl9-l{margin-left:-4rem}.pr9-l{padding-right:4rem}.mr9-l{margin-right:4rem}.nr9-l{margin-right:-4rem}.pt9-l{padding-top:4rem}.mt9-l{margin-top:4rem}.nt9-l{margin-top:-4rem}.pb9-l{padding-bottom:4rem}.mb9-l{margin-bottom:4rem}.nb9-l{margin-bottom:-4rem}.pv9-l{padding-top:4rem;padding-bottom:4rem}.mv9-l{margin-top:4rem;margin-bottom:4rem}.nv9-l{margin-top:-4rem;margin-bottom:-4rem}.ph9-l{padding-left:4rem;padding-right:4rem}.mh9-l{margin-left:4rem;margin-right:4rem}.nh9-l{margin-left:-4rem;margin-right:-4rem}.pa10-l{padding:6rem}.ma10-l{margin:6rem}.na10-l{margin:-6rem}.pl10-l{padding-left:6rem}.ml10-l{margin-left:6rem}.nl10-l{margin-left:-6rem}.pr10-l{padding-right:6rem}.mr10-l{margin-right:6rem}.nr10-l{margin-right:-6rem}.pt10-l{padding-top:6rem}.mt10-l{margin-top:6rem}.nt10-l{margin-top:-6rem}.pb10-l{padding-bottom:6rem}.mb10-l{margin-bottom:6rem}.nb10-l{margin-bottom:-6rem}.pv10-l{padding-top:6rem;padding-bottom:6rem}.mv10-l{margin-top:6rem;margin-bottom:6rem}.nv10-l{margin-top:-6rem;margin-bottom:-6rem}.ph10-l{padding-left:6rem;padding-right:6rem}.mh10-l{margin-left:6rem;margin-right:6rem}.nh10-l{margin-left:-6rem;margin-right:-6rem}.pa11-l{padding:10rem}.ma11-l{margin:10rem}.na11-l{margin:-10rem}.pl11-l{padding-left:10rem}.ml11-l{margin-left:10rem}.nl11-l{margin-left:-10rem}.pr11-l{padding-right:10rem}.mr11-l{margin-right:10rem}.nr11-l{margin-right:-10rem}.pt11-l{padding-top:10rem}.mt11-l{margin-top:10rem}.nt11-l{margin-top:-10rem}.pb11-l{padding-bottom:10rem}.mb11-l{margin-bottom:10rem}.nb11-l{margin-bottom:-10rem}.pv11-l{padding-top:10rem;padding-bottom:10rem}.mv11-l{margin-top:10rem;margin-bottom:10rem}.nv11-l{margin-top:-10rem;margin-bottom:-10rem}.ph11-l{padding-left:10rem;padding-right:10rem}.mh11-l{margin-left:10rem;margin-right:10rem}.nh11-l{margin-left:-10rem;margin-right:-10rem}.pa12-l{padding:18rem}.ma12-l{margin:18rem}.na12-l{margin:-18rem}.pl12-l{padding-left:18rem}.ml12-l{margin-left:18rem}.nl12-l{margin-left:-18rem}.pr12-l{padding-right:18rem}.mr12-l{margin-right:18rem}.nr12-l{margin-right:-18rem}.pt12-l{padding-top:18rem}.mt12-l{margin-top:18rem}.nt12-l{margin-top:-18rem}.pb12-l{padding-bottom:18rem}.mb12-l{margin-bottom:18rem}.nb12-l{margin-bottom:-18rem}.pv12-l{padding-top:18rem;padding-bottom:18rem}.mv12-l{margin-top:18rem;margin-bottom:18rem}.nv12-l{margin-top:-18rem;margin-bottom:-18rem}.ph12-l{padding-left:18rem;padding-right:18rem}.mh12-l{margin-left:18rem;margin-right:18rem}.nh12-l{margin-left:-18rem;margin-right:-18rem}.top-0-l{top:0}.right-0-l{right:0}.bottom-0-l{bottom:0}.left-0-l{left:0}.top-1-l{top:1rem}.right-1-l{right:1rem}.bottom-1-l{bottom:1rem}.left-1-l{left:1rem}.top-2-l{top:2rem}.right-2-l{right:2rem}.bottom-2-l{bottom:2rem}.left-2-l{left:2rem}.top--1-l{top:-1rem}.right--1-l{right:-1rem}.bottom--1-l{bottom:-1rem}.left--1-l{left:-1rem}.top--2-l{top:-2rem}.right--2-l{right:-2rem}.bottom--2-l{bottom:-2rem}.left--2-l{left:-2rem}.absolute--fill-l{top:0;right:0;bottom:0;left:0}.cf-l:after,.cf-l:before{content:" ";display:table}.cf-l:after{clear:both}.cf-l{*zoom:1}.cl-l{clear:left}.cr-l{clear:right}.cb-l{clear:both}.cn-l{clear:none}.dn-l{display:none}.di-l{display:inline}.db-l{display:block}.dib-l{display:inline-block}.dit-l{display:inline-table}.dt-l{display:table}.dtc-l{display:table-cell}.dt-row-l{display:table-row}.dt-row-group-l{display:table-row-group}.dt-column-l{display:table-column}.dt-column-group-l{display:table-column-group}.dt--fixed-l{table-layout:fixed;width:100%}.flex-l{display:flex}.inline-flex-l{display:inline-flex}.flex-auto-l{flex:1 1 auto;min-width:0;min-height:0}.flex-none-l{flex:none}.flex-column-l{flex-direction:column}.flex-row-l{flex-direction:row}.flex-wrap-l{flex-wrap:wrap}.flex-nowrap-l{flex-wrap:nowrap}.flex-wrap-reverse-l{flex-wrap:wrap-reverse}.flex-column-reverse-l{flex-direction:column-reverse}.flex-row-reverse-l{flex-direction:row-reverse}.items-start-l{align-items:flex-start}.items-end-l{align-items:flex-end}.items-center-l{align-items:center}.items-baseline-l{align-items:baseline}.items-stretch-l{align-items:stretch}.self-start-l{align-self:flex-start}.self-end-l{align-self:flex-end}.self-center-l{align-self:center}.self-baseline-l{align-self:baseline}.self-stretch-l{align-self:stretch}.justify-start-l{justify-content:flex-start}.justify-end-l{justify-content:flex-end}.justify-center-l{justify-content:center}.justify-between-l{justify-content:space-between}.justify-around-l{justify-content:space-around}.content-start-l{align-content:flex-start}.content-end-l{align-content:flex-end}.content-center-l{align-content:center}.content-between-l{align-content:space-between}.content-around-l{align-content:space-around}.content-stretch-l{align-content:stretch}.order-0-l{order:0}.order-1-l{order:1}.order-2-l{order:2}.order-3-l{order:3}.order-4-l{order:4}.order-5-l{order:5}.order-6-l{order:6}.order-7-l{order:7}.order-8-l{order:8}.order-last-l{order:99999}.flex-grow-0-l{flex-grow:0}.flex-grow-1-l{flex-grow:1}.flex-shrink-0-l{flex-shrink:0}.flex-shrink-1-l{flex-shrink:1}.fl-l{float:left}.fl-l,.fr-l{_display:inline}.fr-l{float:right}.fn-l{float:none}.i-l{font-style:italic}.fs-normal-l{font-style:normal}.normal-l{font-weight:400}.b-l{font-weight:700}.fw1-l{font-weight:100}.fw2-l{font-weight:200}.fw3-l{font-weight:300}.fw4-l{font-weight:400}.fw5-l{font-weight:500}.fw6-l{font-weight:600}.fw7-l{font-weight:700}.fw8-l{font-weight:800}.fw9-l{font-weight:900}.h1-l{height:1rem}.h2-l{height:2rem}.h3-l{height:4rem}.h4-l{height:8rem}.h5-l{height:16rem}.h-25-l{height:25%}.h-50-l{height:50%}.h-75-l{height:75%}.h-100-l{height:100%}.min-h-100-l{min-height:100%}.vh-25-l{height:25vh}.vh-50-l{height:50vh}.vh-75-l{height:75vh}.vh-100-l{height:100vh}.min-vh-100-l{min-height:100vh}.h-auto-l{height:auto}.h-inherit-l{height:inherit}.tracked-l{letter-spacing:.1em}.tracked-tight-l{letter-spacing:-.05em}.tracked-mega-l{letter-spacing:.25em}.lh-solid-l{line-height:1.333333}.lh-title-l{line-height:1.5}.lh-copy-l{line-height:1.666666}.mw1-l{max-width:1rem}.mw2-l{max-width:2rem}.mw3-l{max-width:4rem}.mw4-l{max-width:8rem}.mw5-l{max-width:16rem}.mw6-l{max-width:32rem}.mw7-l{max-width:48rem}.mw8-l{max-width:64rem}.mw9-l{max-width:96rem}.mw-none-l{max-width:none}.mw-100-l{max-width:100%}.o-100-l{opacity:1}.o-90-l{opacity:.9}.o-80-l{opacity:.8}.o-70-l{opacity:.7}.o-60-l{opacity:.6}.o-50-l{opacity:.5}.o-40-l{opacity:.4}.o-30-l{opacity:.3}.o-20-l{opacity:.2}.o-10-l{opacity:.1}.o-05-l{opacity:.05}.o-025-l{opacity:.025}.o-0-l{opacity:0}.rotate-45-l{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-l{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-l{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-l{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-l{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-l{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-l{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-l{outline:1px solid}.outline-transparent-l{outline:1px solid transparent}.outline-0-l{outline:0}.overflow-visible-l{overflow:visible}.overflow-hidden-l{overflow:hidden}.overflow-scroll-l{overflow:scroll}.overflow-auto-l{overflow:auto}.overflow-x-visible-l{overflow-x:visible}.overflow-x-hidden-l{overflow-x:hidden}.overflow-x-scroll-l{overflow-x:scroll}.overflow-x-auto-l{overflow-x:auto}.overflow-y-visible-l{overflow-y:visible}.overflow-y-hidden-l{overflow-y:hidden}.overflow-y-scroll-l{overflow-y:scroll}.overflow-y-auto-l{overflow-y:auto}.static-l{position:static}.relative-l{position:relative}.absolute-l{position:absolute}.fixed-l{position:fixed}.strike-l{text-decoration:line-through}.underline-l{text-decoration:underline}.no-underline-l{text-decoration:none}.tl-l{text-align:left}.tr-l{text-align:right}.tc-l{text-align:center}.tj-l{text-align:justify}.ttc-l{text-transform:capitalize}.ttl-l{text-transform:lowercase}.ttu-l{text-transform:uppercase}.ttn-l{text-transform:none}.f1-l{font-size:4.5rem}.f2-l{font-size:4rem}.f3-l{font-size:3rem}.f4-l{font-size:2rem}.f5-l{font-size:1.5rem}.f6-l{font-size:1.125rem}.f7-l{font-size:1rem}.f8-l{font-size:.875rem}.f9-l{font-size:.75rem}.measure-l{max-width:30em}.measure-wide-l{max-width:34em}.measure-narrow-l{max-width:20em}.small-caps-l{font-variant:small-caps}.indent-l{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-l{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-l{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-l{white-space:normal}.nowrap-l{white-space:nowrap}.pre-l{white-space:pre}.w1-l{width:1rem}.w2-l{width:2rem}.w3-l{width:4rem}.w4-l{width:8rem}.w5-l{width:16rem}.w-10-l{width:10%}.w-20-l{width:20%}.w-25-l{width:25%}.w-30-l{width:30%}.w-33-l{width:33%}.w-34-l{width:34%}.w-40-l{width:40%}.w-50-l{width:50%}.w-60-l{width:60%}.w-70-l{width:70%}.w-75-l{width:75%}.w-80-l{width:80%}.w-90-l{width:90%}.w-100-l{width:100%}.w-third-l{width:33.33333%}.w-two-thirds-l{width:66.66667%}.w-auto-l{width:auto}}@media screen and (min-width:60em){.aspect-ratio-xl{height:0;position:relative}.aspect-ratio--16x9-xl{padding-bottom:56.25%}.aspect-ratio--9x16-xl{padding-bottom:177.77%}.aspect-ratio--4x3-xl{padding-bottom:75%}.aspect-ratio--3x4-xl{padding-bottom:133.33%}.aspect-ratio--6x4-xl{padding-bottom:66.6%}.aspect-ratio--4x6-xl{padding-bottom:150%}.aspect-ratio--8x5-xl{padding-bottom:62.5%}.aspect-ratio--5x8-xl{padding-bottom:160%}.aspect-ratio--7x5-xl{padding-bottom:71.42%}.aspect-ratio--5x7-xl{padding-bottom:140%}.aspect-ratio--1x1-xl{padding-bottom:100%}.aspect-ratio--object-xl{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:100}.cover-xl{background-size:cover!important}.contain-xl{background-size:contain!important}.bg-center-xl{background-position:50%}.bg-center-xl,.bg-top-xl{background-repeat:no-repeat}.bg-top-xl{background-position:top}.bg-right-xl{background-position:100%}.bg-bottom-xl,.bg-right-xl{background-repeat:no-repeat}.bg-bottom-xl{background-position:bottom}.bg-left-xl{background-repeat:no-repeat;background-position:0}.ba-xl{border-style:solid;border-width:1px}.bt-xl{border-top-style:solid;border-top-width:1px}.br-xl{border-right-style:solid;border-right-width:1px}.bb-xl{border-bottom-style:solid;border-bottom-width:1px}.bl-xl{border-left-style:solid;border-left-width:1px}.bn-xl{border-style:none;border-width:0}.br0-xl{border-radius:0}.br1-xl{border-radius:.125rem}.br2-xl{border-radius:.25rem}.br3-xl{border-radius:.5rem}.br4-xl{border-radius:1rem}.br-100-xl{border-radius:100%}.br-pill-xl{border-radius:9999px}.br--bottom-xl{border-top-left-radius:0;border-top-right-radius:0}.br--top-xl{border-bottom-right-radius:0}.br--right-xl,.br--top-xl{border-bottom-left-radius:0}.br--right-xl{border-top-left-radius:0}.br--left-xl{border-top-right-radius:0;border-bottom-right-radius:0}.b--dotted-xl{border-style:dotted}.b--dashed-xl{border-style:dashed}.b--solid-xl{border-style:solid}.b--none-xl{border-style:none}.bw0-xl{border-width:0}.bw1-xl{border-width:.125rem}.bw2-xl{border-width:.25rem}.bw3-xl{border-width:.5rem}.bw4-xl{border-width:1rem}.bw5-xl{border-width:2rem}.bt-0-xl{border-top-width:0}.br-0-xl{border-right-width:0}.bb-0-xl{border-bottom-width:0}.bl-0-xl{border-left-width:0}.shadow-1-xl{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.shadow-2-xl{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.shadow-3-xl{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.shadow-4-xl{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.shadow-5-xl{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}.pa0-xl{padding:0}.ma0-xl,.na0-xl{margin:0}.pl0-xl{padding-left:0}.ml0-xl,.nl0-xl{margin-left:0}.pr0-xl{padding-right:0}.mr0-xl,.nr0-xl{margin-right:0}.pt0-xl{padding-top:0}.mt0-xl,.nt0-xl{margin-top:0}.pb0-xl{padding-bottom:0}.mb0-xl,.nb0-xl{margin-bottom:0}.pv0-xl{padding-top:0;padding-bottom:0}.mv0-xl,.nv0-xl{margin-top:0;margin-bottom:0}.ph0-xl{padding-left:0;padding-right:0}.mh0-xl,.nh0-xl{margin-left:0;margin-right:0}.pa1-xl{padding:.25rem}.ma1-xl{margin:.25rem}.na1-xl{margin:-.25rem}.pl1-xl{padding-left:.25rem}.ml1-xl{margin-left:.25rem}.nl1-xl{margin-left:-.25rem}.pr1-xl{padding-right:.25rem}.mr1-xl{margin-right:.25rem}.nr1-xl{margin-right:-.25rem}.pt1-xl{padding-top:.25rem}.mt1-xl{margin-top:.25rem}.nt1-xl{margin-top:-.25rem}.pb1-xl{padding-bottom:.25rem}.mb1-xl{margin-bottom:.25rem}.nb1-xl{margin-bottom:-.25rem}.pv1-xl{padding-top:.25rem;padding-bottom:.25rem}.mv1-xl{margin-top:.25rem;margin-bottom:.25rem}.nv1-xl{margin-top:-.25rem;margin-bottom:-.25rem}.ph1-xl{padding-left:.25rem;padding-right:.25rem}.mh1-xl{margin-left:.25rem;margin-right:.25rem}.nh1-xl{margin-left:-.25rem;margin-right:-.25rem}.pa2-xl{padding:.5rem}.ma2-xl{margin:.5rem}.na2-xl{margin:-.5rem}.pl2-xl{padding-left:.5rem}.ml2-xl{margin-left:.5rem}.nl2-xl{margin-left:-.5rem}.pr2-xl{padding-right:.5rem}.mr2-xl{margin-right:.5rem}.nr2-xl{margin-right:-.5rem}.pt2-xl{padding-top:.5rem}.mt2-xl{margin-top:.5rem}.nt2-xl{margin-top:-.5rem}.pb2-xl{padding-bottom:.5rem}.mb2-xl{margin-bottom:.5rem}.nb2-xl{margin-bottom:-.5rem}.pv2-xl{padding-top:.5rem;padding-bottom:.5rem}.mv2-xl{margin-top:.5rem;margin-bottom:.5rem}.nv2-xl{margin-top:-.5rem;margin-bottom:-.5rem}.ph2-xl{padding-left:.5rem;padding-right:.5rem}.mh2-xl{margin-left:.5rem;margin-right:.5rem}.nh2-xl{margin-left:-.5rem;margin-right:-.5rem}.pa3-xl{padding:.75rem}.ma3-xl{margin:.75rem}.na3-xl{margin:-.75rem}.pl3-xl{padding-left:.75rem}.ml3-xl{margin-left:.75rem}.nl3-xl{margin-left:-.75rem}.pr3-xl{padding-right:.75rem}.mr3-xl{margin-right:.75rem}.nr3-xl{margin-right:-.75rem}.pt3-xl{padding-top:.75rem}.mt3-xl{margin-top:.75rem}.nt3-xl{margin-top:-.75rem}.pb3-xl{padding-bottom:.75rem}.mb3-xl{margin-bottom:.75rem}.nb3-xl{margin-bottom:-.75rem}.pv3-xl{padding-top:.75rem;padding-bottom:.75rem}.mv3-xl{margin-top:.75rem;margin-bottom:.75rem}.nv3-xl{margin-top:-.75rem;margin-bottom:-.75rem}.ph3-xl{padding-left:.75rem;padding-right:.75rem}.mh3-xl{margin-left:.75rem;margin-right:.75rem}.nh3-xl{margin-left:-.75rem;margin-right:-.75rem}.pa4-xl{padding:1rem}.ma4-xl{margin:1rem}.na4-xl{margin:-1rem}.pl4-xl{padding-left:1rem}.ml4-xl{margin-left:1rem}.nl4-xl{margin-left:-1rem}.pr4-xl{padding-right:1rem}.mr4-xl{margin-right:1rem}.nr4-xl{margin-right:-1rem}.pt4-xl{padding-top:1rem}.mt4-xl{margin-top:1rem}.nt4-xl{margin-top:-1rem}.pb4-xl{padding-bottom:1rem}.mb4-xl{margin-bottom:1rem}.nb4-xl{margin-bottom:-1rem}.pv4-xl{padding-top:1rem;padding-bottom:1rem}.mv4-xl{margin-top:1rem;margin-bottom:1rem}.nv4-xl{margin-top:-1rem;margin-bottom:-1rem}.ph4-xl{padding-left:1rem;padding-right:1rem}.mh4-xl{margin-left:1rem;margin-right:1rem}.nh4-xl{margin-left:-1rem;margin-right:-1rem}.pa5-xl{padding:1.25rem}.ma5-xl{margin:1.25rem}.na5-xl{margin:-1.25rem}.pl5-xl{padding-left:1.25rem}.ml5-xl{margin-left:1.25rem}.nl5-xl{margin-left:-1.25rem}.pr5-xl{padding-right:1.25rem}.mr5-xl{margin-right:1.25rem}.nr5-xl{margin-right:-1.25rem}.pt5-xl{padding-top:1.25rem}.mt5-xl{margin-top:1.25rem}.nt5-xl{margin-top:-1.25rem}.pb5-xl{padding-bottom:1.25rem}.mb5-xl{margin-bottom:1.25rem}.nb5-xl{margin-bottom:-1.25rem}.pv5-xl{padding-top:1.25rem;padding-bottom:1.25rem}.mv5-xl{margin-top:1.25rem;margin-bottom:1.25rem}.nv5-xl{margin-top:-1.25rem;margin-bottom:-1.25rem}.ph5-xl{padding-left:1.25rem;padding-right:1.25rem}.mh5-xl{margin-left:1.25rem;margin-right:1.25rem}.nh5-xl{margin-left:-1.25rem;margin-right:-1.25rem}.pa6-xl{padding:1.5rem}.ma6-xl{margin:1.5rem}.na6-xl{margin:-1.5rem}.pl6-xl{padding-left:1.5rem}.ml6-xl{margin-left:1.5rem}.nl6-xl{margin-left:-1.5rem}.pr6-xl{padding-right:1.5rem}.mr6-xl{margin-right:1.5rem}.nr6-xl{margin-right:-1.5rem}.pt6-xl{padding-top:1.5rem}.mt6-xl{margin-top:1.5rem}.nt6-xl{margin-top:-1.5rem}.pb6-xl{padding-bottom:1.5rem}.mb6-xl{margin-bottom:1.5rem}.nb6-xl{margin-bottom:-1.5rem}.pv6-xl{padding-top:1.5rem;padding-bottom:1.5rem}.mv6-xl{margin-top:1.5rem;margin-bottom:1.5rem}.nv6-xl{margin-top:-1.5rem;margin-bottom:-1.5rem}.ph6-xl{padding-left:1.5rem;padding-right:1.5rem}.mh6-xl{margin-left:1.5rem;margin-right:1.5rem}.nh6-xl{margin-left:-1.5rem;margin-right:-1.5rem}.pa7-xl{padding:2rem}.ma7-xl{margin:2rem}.na7-xl{margin:-2rem}.pl7-xl{padding-left:2rem}.ml7-xl{margin-left:2rem}.nl7-xl{margin-left:-2rem}.pr7-xl{padding-right:2rem}.mr7-xl{margin-right:2rem}.nr7-xl{margin-right:-2rem}.pt7-xl{padding-top:2rem}.mt7-xl{margin-top:2rem}.nt7-xl{margin-top:-2rem}.pb7-xl{padding-bottom:2rem}.mb7-xl{margin-bottom:2rem}.nb7-xl{margin-bottom:-2rem}.pv7-xl{padding-top:2rem;padding-bottom:2rem}.mv7-xl{margin-top:2rem;margin-bottom:2rem}.nv7-xl{margin-top:-2rem;margin-bottom:-2rem}.ph7-xl{padding-left:2rem;padding-right:2rem}.mh7-xl{margin-left:2rem;margin-right:2rem}.nh7-xl{margin-left:-2rem;margin-right:-2rem}.pa8-xl{padding:3rem}.ma8-xl{margin:3rem}.na8-xl{margin:-3rem}.pl8-xl{padding-left:3rem}.ml8-xl{margin-left:3rem}.nl8-xl{margin-left:-3rem}.pr8-xl{padding-right:3rem}.mr8-xl{margin-right:3rem}.nr8-xl{margin-right:-3rem}.pt8-xl{padding-top:3rem}.mt8-xl{margin-top:3rem}.nt8-xl{margin-top:-3rem}.pb8-xl{padding-bottom:3rem}.mb8-xl{margin-bottom:3rem}.nb8-xl{margin-bottom:-3rem}.pv8-xl{padding-top:3rem;padding-bottom:3rem}.mv8-xl{margin-top:3rem;margin-bottom:3rem}.nv8-xl{margin-top:-3rem;margin-bottom:-3rem}.ph8-xl{padding-left:3rem;padding-right:3rem}.mh8-xl{margin-left:3rem;margin-right:3rem}.nh8-xl{margin-left:-3rem;margin-right:-3rem}.pa9-xl{padding:4rem}.ma9-xl{margin:4rem}.na9-xl{margin:-4rem}.pl9-xl{padding-left:4rem}.ml9-xl{margin-left:4rem}.nl9-xl{margin-left:-4rem}.pr9-xl{padding-right:4rem}.mr9-xl{margin-right:4rem}.nr9-xl{margin-right:-4rem}.pt9-xl{padding-top:4rem}.mt9-xl{margin-top:4rem}.nt9-xl{margin-top:-4rem}.pb9-xl{padding-bottom:4rem}.mb9-xl{margin-bottom:4rem}.nb9-xl{margin-bottom:-4rem}.pv9-xl{padding-top:4rem;padding-bottom:4rem}.mv9-xl{margin-top:4rem;margin-bottom:4rem}.nv9-xl{margin-top:-4rem;margin-bottom:-4rem}.ph9-xl{padding-left:4rem;padding-right:4rem}.mh9-xl{margin-left:4rem;margin-right:4rem}.nh9-xl{margin-left:-4rem;margin-right:-4rem}.pa10-xl{padding:6rem}.ma10-xl{margin:6rem}.na10-xl{margin:-6rem}.pl10-xl{padding-left:6rem}.ml10-xl{margin-left:6rem}.nl10-xl{margin-left:-6rem}.pr10-xl{padding-right:6rem}.mr10-xl{margin-right:6rem}.nr10-xl{margin-right:-6rem}.pt10-xl{padding-top:6rem}.mt10-xl{margin-top:6rem}.nt10-xl{margin-top:-6rem}.pb10-xl{padding-bottom:6rem}.mb10-xl{margin-bottom:6rem}.nb10-xl{margin-bottom:-6rem}.pv10-xl{padding-top:6rem;padding-bottom:6rem}.mv10-xl{margin-top:6rem;margin-bottom:6rem}.nv10-xl{margin-top:-6rem;margin-bottom:-6rem}.ph10-xl{padding-left:6rem;padding-right:6rem}.mh10-xl{margin-left:6rem;margin-right:6rem}.nh10-xl{margin-left:-6rem;margin-right:-6rem}.pa11-xl{padding:10rem}.ma11-xl{margin:10rem}.na11-xl{margin:-10rem}.pl11-xl{padding-left:10rem}.ml11-xl{margin-left:10rem}.nl11-xl{margin-left:-10rem}.pr11-xl{padding-right:10rem}.mr11-xl{margin-right:10rem}.nr11-xl{margin-right:-10rem}.pt11-xl{padding-top:10rem}.mt11-xl{margin-top:10rem}.nt11-xl{margin-top:-10rem}.pb11-xl{padding-bottom:10rem}.mb11-xl{margin-bottom:10rem}.nb11-xl{margin-bottom:-10rem}.pv11-xl{padding-top:10rem;padding-bottom:10rem}.mv11-xl{margin-top:10rem;margin-bottom:10rem}.nv11-xl{margin-top:-10rem;margin-bottom:-10rem}.ph11-xl{padding-left:10rem;padding-right:10rem}.mh11-xl{margin-left:10rem;margin-right:10rem}.nh11-xl{margin-left:-10rem;margin-right:-10rem}.pa12-xl{padding:18rem}.ma12-xl{margin:18rem}.na12-xl{margin:-18rem}.pl12-xl{padding-left:18rem}.ml12-xl{margin-left:18rem}.nl12-xl{margin-left:-18rem}.pr12-xl{padding-right:18rem}.mr12-xl{margin-right:18rem}.nr12-xl{margin-right:-18rem}.pt12-xl{padding-top:18rem}.mt12-xl{margin-top:18rem}.nt12-xl{margin-top:-18rem}.pb12-xl{padding-bottom:18rem}.mb12-xl{margin-bottom:18rem}.nb12-xl{margin-bottom:-18rem}.pv12-xl{padding-top:18rem;padding-bottom:18rem}.mv12-xl{margin-top:18rem;margin-bottom:18rem}.nv12-xl{margin-top:-18rem;margin-bottom:-18rem}.ph12-xl{padding-left:18rem;padding-right:18rem}.mh12-xl{margin-left:18rem;margin-right:18rem}.nh12-xl{margin-left:-18rem;margin-right:-18rem}.top-0-xl{top:0}.right-0-xl{right:0}.bottom-0-xl{bottom:0}.left-0-xl{left:0}.top-1-xl{top:1rem}.right-1-xl{right:1rem}.bottom-1-xl{bottom:1rem}.left-1-xl{left:1rem}.top-2-xl{top:2rem}.right-2-xl{right:2rem}.bottom-2-xl{bottom:2rem}.left-2-xl{left:2rem}.top--1-xl{top:-1rem}.right--1-xl{right:-1rem}.bottom--1-xl{bottom:-1rem}.left--1-xl{left:-1rem}.top--2-xl{top:-2rem}.right--2-xl{right:-2rem}.bottom--2-xl{bottom:-2rem}.left--2-xl{left:-2rem}.absolute--fill-xl{top:0;right:0;bottom:0;left:0}.cf-xl:after,.cf-xl:before{content:" ";display:table}.cf-xl:after{clear:both}.cf-xl{*zoom:1}.cl-xl{clear:left}.cr-xl{clear:right}.cb-xl{clear:both}.cn-xl{clear:none}.dn-xl{display:none}.di-xl{display:inline}.db-xl{display:block}.dib-xl{display:inline-block}.dit-xl{display:inline-table}.dt-xl{display:table}.dtc-xl{display:table-cell}.dt-row-xl{display:table-row}.dt-row-group-xl{display:table-row-group}.dt-column-xl{display:table-column}.dt-column-group-xl{display:table-column-group}.dt--fixed-xl{table-layout:fixed;width:100%}.flex-xl{display:flex}.inline-flex-xl{display:inline-flex}.flex-auto-xl{flex:1 1 auto;min-width:0;min-height:0}.flex-none-xl{flex:none}.flex-column-xl{flex-direction:column}.flex-row-xl{flex-direction:row}.flex-wrap-xl{flex-wrap:wrap}.flex-nowrap-xl{flex-wrap:nowrap}.flex-wrap-reverse-xl{flex-wrap:wrap-reverse}.flex-column-reverse-xl{flex-direction:column-reverse}.flex-row-reverse-xl{flex-direction:row-reverse}.items-start-xl{align-items:flex-start}.items-end-xl{align-items:flex-end}.items-center-xl{align-items:center}.items-baseline-xl{align-items:baseline}.items-stretch-xl{align-items:stretch}.self-start-xl{align-self:flex-start}.self-end-xl{align-self:flex-end}.self-center-xl{align-self:center}.self-baseline-xl{align-self:baseline}.self-stretch-xl{align-self:stretch}.justify-start-xl{justify-content:flex-start}.justify-end-xl{justify-content:flex-end}.justify-center-xl{justify-content:center}.justify-between-xl{justify-content:space-between}.justify-around-xl{justify-content:space-around}.content-start-xl{align-content:flex-start}.content-end-xl{align-content:flex-end}.content-center-xl{align-content:center}.content-between-xl{align-content:space-between}.content-around-xl{align-content:space-around}.content-stretch-xl{align-content:stretch}.order-0-xl{order:0}.order-1-xl{order:1}.order-2-xl{order:2}.order-3-xl{order:3}.order-4-xl{order:4}.order-5-xl{order:5}.order-6-xl{order:6}.order-7-xl{order:7}.order-8-xl{order:8}.order-last-xl{order:99999}.flex-grow-0-xl{flex-grow:0}.flex-grow-1-xl{flex-grow:1}.flex-shrink-0-xl{flex-shrink:0}.flex-shrink-1-xl{flex-shrink:1}.fl-xl{float:left}.fl-xl,.fr-xl{_display:inline}.fr-xl{float:right}.fn-xl{float:none}.i-xl{font-style:italic}.fs-normal-xl{font-style:normal}.normal-xl{font-weight:400}.b-xl{font-weight:700}.fw1-xl{font-weight:100}.fw2-xl{font-weight:200}.fw3-xl{font-weight:300}.fw4-xl{font-weight:400}.fw5-xl{font-weight:500}.fw6-xl{font-weight:600}.fw7-xl{font-weight:700}.fw8-xl{font-weight:800}.fw9-xl{font-weight:900}.h1-xl{height:1rem}.h2-xl{height:2rem}.h3-xl{height:4rem}.h4-xl{height:8rem}.h5-xl{height:16rem}.h-25-xl{height:25%}.h-50-xl{height:50%}.h-75-xl{height:75%}.h-100-xl{height:100%}.min-h-100-xl{min-height:100%}.vh-25-xl{height:25vh}.vh-50-xl{height:50vh}.vh-75-xl{height:75vh}.vh-100-xl{height:100vh}.min-vh-100-xl{min-height:100vh}.h-auto-xl{height:auto}.h-inherit-xl{height:inherit}.tracked-xl{letter-spacing:.1em}.tracked-tight-xl{letter-spacing:-.05em}.tracked-mega-xl{letter-spacing:.25em}.lh-solid-xl{line-height:1.333333}.lh-title-xl{line-height:1.5}.lh-copy-xl{line-height:1.666666}.mw1-xl{max-width:1rem}.mw2-xl{max-width:2rem}.mw3-xl{max-width:4rem}.mw4-xl{max-width:8rem}.mw5-xl{max-width:16rem}.mw6-xl{max-width:32rem}.mw7-xl{max-width:48rem}.mw8-xl{max-width:64rem}.mw9-xl{max-width:96rem}.mw-none-xl{max-width:none}.mw-100-xl{max-width:100%}.o-100-xl{opacity:1}.o-90-xl{opacity:.9}.o-80-xl{opacity:.8}.o-70-xl{opacity:.7}.o-60-xl{opacity:.6}.o-50-xl{opacity:.5}.o-40-xl{opacity:.4}.o-30-xl{opacity:.3}.o-20-xl{opacity:.2}.o-10-xl{opacity:.1}.o-05-xl{opacity:.05}.o-025-xl{opacity:.025}.o-0-xl{opacity:0}.rotate-45-xl{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.rotate-90-xl{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.rotate-135-xl{-webkit-transform:rotate(135deg);transform:rotate(135deg)}.rotate-180-xl{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.rotate-225-xl{-webkit-transform:rotate(225deg);transform:rotate(225deg)}.rotate-270-xl{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.rotate-315-xl{-webkit-transform:rotate(315deg);transform:rotate(315deg)}.outline-xl{outline:1px solid}.outline-transparent-xl{outline:1px solid transparent}.outline-0-xl{outline:0}.overflow-visible-xl{overflow:visible}.overflow-hidden-xl{overflow:hidden}.overflow-scroll-xl{overflow:scroll}.overflow-auto-xl{overflow:auto}.overflow-x-visible-xl{overflow-x:visible}.overflow-x-hidden-xl{overflow-x:hidden}.overflow-x-scroll-xl{overflow-x:scroll}.overflow-x-auto-xl{overflow-x:auto}.overflow-y-visible-xl{overflow-y:visible}.overflow-y-hidden-xl{overflow-y:hidden}.overflow-y-scroll-xl{overflow-y:scroll}.overflow-y-auto-xl{overflow-y:auto}.static-xl{position:static}.relative-xl{position:relative}.absolute-xl{position:absolute}.fixed-xl{position:fixed}.strike-xl{text-decoration:line-through}.underline-xl{text-decoration:underline}.no-underline-xl{text-decoration:none}.tl-xl{text-align:left}.tr-xl{text-align:right}.tc-xl{text-align:center}.tj-xl{text-align:justify}.ttc-xl{text-transform:capitalize}.ttl-xl{text-transform:lowercase}.ttu-xl{text-transform:uppercase}.ttn-xl{text-transform:none}.f1-xl{font-size:4.5rem}.f2-xl{font-size:4rem}.f3-xl{font-size:3rem}.f4-xl{font-size:2rem}.f5-xl{font-size:1.5rem}.f6-xl{font-size:1.125rem}.f7-xl{font-size:1rem}.f8-xl{font-size:.875rem}.f9-xl{font-size:.75rem}.measure-xl{max-width:30em}.measure-wide-xl{max-width:34em}.measure-narrow-xl{max-width:20em}.small-caps-xl{font-variant:small-caps}.indent-xl{text-indent:1em;margin-top:0;margin-bottom:0}.truncate-xl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clip-xl{position:fixed!important;_position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.ws-normal-xl{white-space:normal}.nowrap-xl{white-space:nowrap}.pre-xl{white-space:pre}.w1-xl{width:1rem}.w2-xl{width:2rem}.w3-xl{width:4rem}.w4-xl{width:8rem}.w5-xl{width:16rem}.w-10-xl{width:10%}.w-20-xl{width:20%}.w-25-xl{width:25%}.w-30-xl{width:30%}.w-33-xl{width:33%}.w-34-xl{width:34%}.w-40-xl{width:40%}.w-50-xl{width:50%}.w-60-xl{width:60%}.w-70-xl{width:70%}.w-75-xl{width:75%}.w-80-xl{width:80%}.w-90-xl{width:90%}.w-100-xl{width:100%}.w-third-xl{width:33.33333%}.w-two-thirds-xl{width:66.66667%}.w-auto-xl{width:auto}} \ No newline at end of file diff --git a/pkg/btc-wallet/src/hooks/useSettings.tsx b/pkg/btc-wallet/src/hooks/useSettings.tsx deleted file mode 100644 index 4845b5cf7..000000000 --- a/pkg/btc-wallet/src/hooks/useSettings.tsx +++ /dev/null @@ -1,397 +0,0 @@ -import React, { createContext, useContext, useEffect, useState } from 'react'; -import _ from 'lodash'; -import { api } from '../lib/api'; -import { mapDenominationToSymbol, reduceHistory } from '../lib/util'; -import { - CurrencyRate, - Denomination, - Network, - Provider, - ProviderPerms, - ScanProgress, - ShipWallets, - Transaction, - TxidType, -} from '../types'; - -type SettingsContextType = { - network: Network; - setNetwork: React.Dispatch>; - loadedBtc: boolean; - setLoadedBtc: React.Dispatch>; - loadedSettings: boolean; - setLoadedSettings: React.Dispatch>; - loaded: boolean; - setLoaded: React.Dispatch>; - providerPerms: ProviderPerms; - setProviderPerms: React.Dispatch>; - shipWallets: ShipWallets; - setShipWallets: React.Dispatch>; - provider: Provider; - setProvider: React.Dispatch>; - wallet: string | null; - setWallet: React.Dispatch>; - confirmedBalance: number; - setConfirmedBalance: React.Dispatch>; - unconfirmedBalance: number; - setUnconfirmedBalance: React.Dispatch>; - btcState: any; - setBtcState: React.Dispatch>; - history: Transaction[]; - setHistory: React.Dispatch>; - fee: number; - setFee: React.Dispatch>; - psbt: string; - setPsbt: React.Dispatch>; - address: string | null; - setAddress: React.Dispatch>; - currencyRates: CurrencyRate; - setCurrencyRates: React.Dispatch>; - denomination: Denomination; - setDenomination: React.Dispatch>; - showWarning: boolean; - setShowWarning: React.Dispatch>; - error: string; - setError: React.Dispatch>; - broadcastSuccess: boolean; - setBroadcastSuccess: React.Dispatch>; - scanProgress: ScanProgress; - setScanProgress: React.Dispatch>; -}; - -export const SettingsContext = createContext({ - network: 'bitcoin', - setNetwork: () => {}, - loadedBtc: false, - setLoadedBtc: () => {}, - loadedSettings: true, - setLoadedSettings: () => {}, - loaded: false, - setLoaded: () => {}, - providerPerms: { provider: '', permitted: false }, - setProviderPerms: () => {}, - shipWallets: { payee: '', hasWallet: false }, - setShipWallets: () => {}, - provider: null, - setProvider: () => {}, - wallet: null, - setWallet: () => {}, - confirmedBalance: 0, - setConfirmedBalance: () => {}, - unconfirmedBalance: 0, - setUnconfirmedBalance: () => {}, - btcState: null, - setBtcState: () => {}, - history: [], - setHistory: () => {}, - fee: 0, - setFee: () => {}, - psbt: '', - setPsbt: () => {}, - address: null, - setAddress: () => {}, - currencyRates: { - BTC: { last: 1, symbol: 'BTC' }, - }, - setCurrencyRates: () => {}, - denomination: 'BTC', - setDenomination: () => {}, - showWarning: false, - setShowWarning: () => {}, - error: '', - setError: () => {}, - broadcastSuccess: false, - setBroadcastSuccess: () => {}, - scanProgress: { main: null, change: null }, - setScanProgress: () => {}, -}); - -type Props = { - channel: { setOnChannelError: (arg: () => void) => void }; -}; - -export const SettingsProvider: React.FC = ({ channel, children }) => { - const [network, setNetwork] = useState('bitcoin'); - const [channelData, setChannelData] = useState(null); - const [loadedBtc, setLoadedBtc] = useState(false); - const [loadedSettings, setLoadedSettings] = useState(false); - const [loaded, setLoaded] = useState(false); - const [providerPerms, setProviderPerms] = useState({ - provider: '', - permitted: false, - }); - const [shipWallets, setShipWallets] = useState({ - payee: '', - hasWallet: false, - }); - const [provider, setProvider] = useState(null); - const [wallet, setWallet] = useState(null); - const [confirmedBalance, setConfirmedBalance] = useState(0); - const [unconfirmedBalance, setUnconfirmedBalance] = useState(0); - const [btcState, setBtcState] = useState(null); - const [history, setHistory] = useState([]); - const [psbt, setPsbt] = useState(''); - const [fee, setFee] = useState(0); - const [address, setAddress] = useState(null); - const [currencyRates, setCurrencyRates] = useState({ - BTC: { last: 1, symbol: 'BTC' }, - }); - const [denomination, setDenomination] = useState('BTC'); - const [showWarning, setShowWarning] = useState(false); - const [error, setError] = useState(''); - const [broadcastSuccess, setBroadcastSuccess] = useState(false); - const [scanProgress, setScanProgress] = useState({ - main: null, - change: null, - }); - - const { Provider } = SettingsContext; - - const success = (event: any) => { - console.log({ event }); - setChannelData(event); - }; - const fail = (error: any) => console.log({ error }); - - const initializeBtcWallet = () => { - api.bind('/all', 'PUT', api.ship, 'btc-wallet', success, fail); - }; - - const initializeSettings = () => { - let app = 'settings-store'; - let path = `/bucket/${window.desk}/btc-wallet`; - - fetch(`/~/scry/${app}${path}.json`) - .then((res) => res.json()) - .then((n) => { - let data = _.get(n, 'initial', false); - let bucketData = _.get(n, 'bucket', false); - if (data) { - setChannelData(n); - } - if (bucketData) { - let bucketWarning = _.get(n, 'bucket.warning', -1); - if (bucketWarning !== -1) { - setShowWarning(bucketWarning); - } - let bucketCurrency = _.get(n, 'bucket.currency', -1); - if (bucketCurrency !== -1) { - setDenomination(bucketCurrency); - } - setLoadedSettings(true); - if (loadedBtc) { - setLoaded(true); - } - } - }); - - api.bind(path, 'PUT', api.ship, app, success, fail); - }; - - const initializeCurrencyPoll = () => { - fetch('https://blockchain.info/ticker') - .then((res) => res.json()) - .then((n) => { - const newCurrencyRates: any = currencyRates; - for (let c in n) { - newCurrencyRates[c] = n[c]; - newCurrencyRates[c].symbol = mapDenominationToSymbol(c); - } - setCurrencyRates(newCurrencyRates); - setTimeout(() => initializeCurrencyPoll(), 1000 * 60 * 15); - }); - }; - - const start = () => { - if (api.ship) { - initializeBtcWallet(); - initializeSettings(); - initializeCurrencyPoll(); - } - }; - - const handleNewTx = (newTx: Transaction) => { - const { txid, recvd } = newTx; - let old = _.findIndex(history, (h: Transaction) => { - return h.txid.dat === txid.dat && h.txid.wid === txid.wid; - }); - if (old !== -1) { - const newHistory = history.filter((_, i) => i !== old); - setHistory(newHistory); - } - if (recvd === null && old === -1) { - const newHistory = [...history, newTx]; - setHistory(newHistory); - } else if (recvd !== null && old === -1) { - // we expect history to have null recvd values first, and the rest in - // descending order - let insertionIndex = _.findIndex(history, (h: Transaction) => { - return h.recvd < recvd && h.recvd !== null; - }); - const newHistory = history.map((o, i) => - i === insertionIndex ? newTx : o - ); - setHistory(newHistory); - } - }; - - const handleCancelTx = ({ wid, dat }: TxidType) => { - let entryIndex = _.findIndex(history, (h: Transaction) => { - return wid === h.txid.wid && dat === h.txid.dat; - }); - if (entryIndex > -1) { - history[entryIndex].failure = true; - } - }; - - useEffect(() => { - const initialData = channelData?.data?.initial; - const putEntryData = channelData?.data?.['settings-event']?.['put-entry']; - const btcStateData = channelData?.data?.['btc-state']; - const changeProvider = channelData?.data?.['change-provider']; - const newTx = channelData?.data?.['new-tx']; - const providerStatus = channelData?.data?.providerStatus; - const checkPayee = channelData?.data?.checkPayee; - const changeWallet = channelData?.data?.changeWallet; - const psbtData = channelData?.data.psbt; - const cancelTx = channelData?.data['cancel-tx']; - const addressData = channelData?.data?.address; - const balanceData = channelData?.data?.balance; - const errorData = channelData?.data?.error; - const broadcastSuccessData = channelData?.data?.['broadcast-success']; - const broadcastFailData = channelData?.data?.['broadcast-fail']; - const scanProgressData = channelData?.data?.['scan-progress']; - if (initialData) { - setProvider(initialData.provider); - setWallet(initialData.wallet); - setConfirmedBalance(_.get(initialData.balance, 'confirmed', null)); - setUnconfirmedBalance(_.get(initialData.balance, 'unconfirmed', null)); - setBtcState(initialData['btc-state']); - setHistory(reduceHistory(initialData.history)); - setAddress(initialData.address); - setLoadedBtc(true); - if (loadedSettings) { - setLoaded(true); - } - } - if (putEntryData && putEntryData?.['entry-key'] === 'currency') { - setDenomination(putEntryData.value); - } - if (putEntryData && putEntryData?.['entry-key'] === 'warning') { - setShowWarning(putEntryData.value); - } - if (btcStateData) { - setBtcState(btcStateData); - } - if (changeProvider) { - setProvider(changeProvider); - } - if (newTx) { - handleNewTx(newTx); - } - if (providerStatus) { - let newProviderPerms: any = providerPerms; - for (let c in providerStatus) { - newProviderPerms[c] = providerStatus[c]; - } - setProviderPerms(newProviderPerms); - } - if (checkPayee) { - let newShipWallets: any = shipWallets; - - for (let c in checkPayee) { - newShipWallets[c] = checkPayee[c]; - } - setShipWallets(newShipWallets); - } - if (changeWallet) { - setWallet(changeWallet); - } - if (psbtData) { - setPsbt(psbtData.pb); - setFee(psbtData.fee); - } - if (cancelTx) { - handleCancelTx(cancelTx); - } - if (addressData) { - setAddress(addressData); - } - if (balanceData) { - setUnconfirmedBalance(balanceData.unconfirmed); - setConfirmedBalance(balanceData.confirmed); - } - if (errorData) { - setError(errorData); - } - if (broadcastSuccessData) { - setBroadcastSuccess(true); - } - if (broadcastFailData) { - setBroadcastSuccess(false); - } - if (scanProgressData) { - setScanProgress(scanProgressData); - } - }, [channelData]); - - useEffect(() => { - channel.setOnChannelError(() => { - start(); - }); - start(); - }, []); - - return ( - - {children} - - ); -}; - -export const useSettings = () => useContext(SettingsContext); diff --git a/pkg/btc-wallet/src/index.tsx b/pkg/btc-wallet/src/index.tsx deleted file mode 100644 index 848e9910d..000000000 --- a/pkg/btc-wallet/src/index.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { api } from './lib/api'; -import Channel from './lib/channel'; -import { SettingsProvider } from './hooks/useSettings'; -import App from './App'; - -import './css/indigo-static.css'; -import './css/fonts.css'; -import './css/custom.css'; - -const channel = new Channel(); -api.setChannel(window.ship, channel); - -if (module.hot) { - module.hot.accept(); -} - -ReactDOM.render( - - - , - document.querySelectorAll('#root')[0] -); diff --git a/pkg/btc-wallet/src/lib/api.ts b/pkg/btc-wallet/src/lib/api.ts deleted file mode 100644 index dc12c2760..000000000 --- a/pkg/btc-wallet/src/lib/api.ts +++ /dev/null @@ -1,86 +0,0 @@ -import _ from 'lodash'; - -export type Channel = { - poke: ( - ship: string, - appl: string, - mark: string, - data: any, - postDataHandler: (json: any) => void, - errorHandler: (err: string) => void - ) => void; - subscribe: ( - ship: string, - appl: string, - path: string, - errorHandler?: (err: string) => void, - eventHandler?: (event: any) => void - ) => void; -}; - -class UrbitApi { - ship: string; - channel: Channel; - bindPaths: string[]; - setChannel(ship: string, channel: Channel) { - this.ship = ship; - this.channel = channel; - this.bindPaths = []; - } - - bind( - path: string, - method: string, - ship = this.ship, - appl = 'btc-wallet', - success: any, - fail: any - ) { - this.bindPaths = _.uniq([...this.bindPaths, path]); - - (window as any).subscriptionId = this.channel.subscribe( - ship, - appl, - path, - (err) => { - fail(err); - }, - (event) => { - success({ - data: event, - from: { - ship, - path, - }, - }); - } - ); - } - - btcWalletCommand(data: any) { - return this.action('btc-wallet', 'btc-wallet-command', data); - } - - settingsEvent(data: any) { - return this.action('settings-store', 'settings-event', data); - } - - action(appl: string, mark: string, data: string) { - return new Promise((resolve, reject) => { - this.channel.poke( - this.ship, - appl, - mark, - data, - (json) => { - resolve(json); - }, - (err) => { - reject(err); - } - ); - }); - } -} -export let api = new UrbitApi(); -(window as any).api = api; diff --git a/pkg/btc-wallet/src/lib/channel.js b/pkg/btc-wallet/src/lib/channel.js deleted file mode 100644 index 3d188d55a..000000000 --- a/pkg/btc-wallet/src/lib/channel.js +++ /dev/null @@ -1,292 +0,0 @@ -export default class Channel { - constructor() { - this.init(); - this.deleteOnUnload(); - - // a way to handle channel errors - // - // - this.onChannelError = (err) => { - console.error('event source error: ', err); - }; - this.onChannelOpen = (e) => { - console.log('open', e); - }; - } - - init() { - this.debounceInterval = 500; - // unique identifier: current time and random number - // - this.uid = - new Date().getTime().toString() + - '-' + - Math.random().toString(16).slice(-6); - - this.requestId = 1; - - // the currently connected EventSource - // - this.eventSource = null; - - // the id of the last EventSource event we received - // - this.lastEventId = 0; - - // this last event id acknowledgment sent to the server - // - this.lastAcknowledgedEventId = 0; - - // a registry of requestId to successFunc/failureFunc - // - // These functions are registered during a +poke and are executed - // in the onServerEvent()/onServerError() callbacks. Only one of - // the functions will be called, and the outstanding poke will be - // removed after calling the success or failure function. - // - - this.outstandingPokes = new Map(); - - // a registry of requestId to subscription functions. - // - // These functions are registered during a +subscribe and are - // executed in the onServerEvent()/onServerError() callbacks. The - // event function will be called whenever a new piece of data on this - // subscription is available, which may be 0, 1, or many times. The - // disconnect function may be called exactly once. - // - this.outstandingSubscriptions = new Map(); - - this.outstandingJSON = []; - - this.debounceTimer = null; - } - - resetDebounceTimer() { - if (this.debounceTimer) { - clearTimeout(this.debounceTimer); - this.debounceTimer = null; - } - this.debounceTimer = setTimeout(() => { - this.sendJSONToChannel(); - }, this.debounceInterval); - } - - setOnChannelError(onError = (err) => {}) { - this.onChannelError = onError; - } - - setOnChannelOpen(onOpen = (e) => {}) { - this.onChannelOpen = onOpen; - } - - deleteOnUnload() { - window.addEventListener('beforeunload', (event) => { - this.delete(); - }); - } - - clearQueue() { - clearTimeout(this.debounceTimer); - this.debounceTimer = null; - this.sendJSONToChannel(); - } - - // sends a poke to an app on an urbit ship - // - poke(ship, app, mark, json, successFunc, failureFunc) { - let id = this.nextId(); - this.outstandingPokes.set(id, { - success: successFunc, - fail: failureFunc, - }); - - const j = { - id, - action: 'poke', - ship, - app, - mark, - json, - }; - - this.sendJSONToChannel(j); - } - - // subscribes to a path on an specific app and ship. - // - // Returns a subscription id, which is the same as the same internal id - // passed to your Urbit. - subscribe( - ship, - app, - path, - connectionErrFunc = (err) => {}, - eventFunc = (event) => {}, - quitFunc = () => {}, - subAckFunc = () => {} - ) { - let id = this.nextId(); - this.outstandingSubscriptions.set(id, { - err: connectionErrFunc, - event: eventFunc, - quit: quitFunc, - subAck: subAckFunc, - }); - - const json = { - id, - action: 'subscribe', - ship, - app, - path, - }; - - this.resetDebounceTimer(); - - this.outstandingJSON.push(json); - return id; - } - - // quit the channel - // - delete() { - let id = this.nextId(); - clearInterval(this.ackTimer); - navigator.sendBeacon( - this.channelURL(), - JSON.stringify([ - { - id, - action: 'delete', - }, - ]) - ); - if (this.eventSource) { - this.eventSource.close(); - } - } - - // unsubscribe to a specific subscription - // - unsubscribe(subscription) { - let id = this.nextId(); - this.sendJSONToChannel({ - id, - action: 'unsubscribe', - subscription, - }); - } - - // sends a JSON command command to the server. - // - sendJSONToChannel(j) { - let req = new XMLHttpRequest(); - req.open('PUT', this.channelURL()); - req.setRequestHeader('Content-Type', 'application/json'); - - if (this.lastEventId == this.lastAcknowledgedEventId) { - if (j) { - this.outstandingJSON.push(j); - } - - if (this.outstandingJSON.length > 0) { - let x = JSON.stringify(this.outstandingJSON); - req.send(x); - } - } else { - // we add an acknowledgment to clear the server side queue - // - // The server side puts messages it sends us in a queue until we - // acknowledge that we received it. - // - let payload = [ - ...this.outstandingJSON, - { action: 'ack', 'event-id': this.lastEventId }, - ]; - if (j) { - payload.push(j); - } - let x = JSON.stringify(payload); - req.send(x); - - this.lastAcknowledgedEventId = this.lastEventId; - } - this.outstandingJSON = []; - - this.connectIfDisconnected(); - } - - // connects to the EventSource if we are not currently connected - // - connectIfDisconnected() { - if (this.eventSource) { - return; - } - - this.eventSource = new EventSource(this.channelURL(), { - withCredentials: true, - }); - this.eventSource.onmessage = (e) => { - this.lastEventId = parseInt(e.lastEventId, 10); - - let obj = JSON.parse(e.data); - let pokeFuncs = this.outstandingPokes.get(obj.id); - let subFuncs = this.outstandingSubscriptions.get(obj.id); - - if (obj.response == 'poke' && !!pokeFuncs) { - let funcs = pokeFuncs; - if (obj.hasOwnProperty('ok')) { - funcs['success'](); - } else if (obj.hasOwnProperty('err')) { - funcs['fail'](obj.err); - } else { - console.error('Invalid poke response: ', obj); - } - this.outstandingPokes.delete(obj.id); - } else if ( - obj.response == 'subscribe' || - (obj.response == 'poke' && !!subFuncs) - ) { - let funcs = subFuncs; - - if (obj.hasOwnProperty('err')) { - funcs['err'](obj.err); - this.outstandingSubscriptions.delete(obj.id); - } else if (obj.hasOwnProperty('ok')) { - funcs['subAck'](obj); - } - } else if (obj.response == 'diff') { - // ensure we ack before channel clogs - if (this.lastEventId - this.lastAcknowledgedEventId > 30) { - this.clearQueue(); - } - - let funcs = subFuncs; - funcs['event'](obj.json); - } else if (obj.response == 'quit') { - let funcs = subFuncs; - funcs['quit'](obj); - this.outstandingSubscriptions.delete(obj.id); - } else { - console.log('Unrecognized response: ', e); - } - }; - - this.eventSource.onopen = this.onChannelOpen; - - this.eventSource.onerror = (e) => { - this.delete(); - this.init(); - this.onChannelError(e); - }; - } - - channelURL() { - return '/~/channel/' + this.uid; - } - - nextId() { - return this.requestId++; - } -} diff --git a/pkg/btc-wallet/src/lib/util.ts b/pkg/btc-wallet/src/lib/util.ts deleted file mode 100644 index 56967a107..000000000 --- a/pkg/btc-wallet/src/lib/util.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { CurrencyRate, Denomination, Transaction } from '../types'; - -export function uuid() { - let str = '0v'; - str += Math.ceil(Math.random() * 8) + '.'; - for (var i = 0; i < 5; i++) { - let _str = Math.ceil(Math.random() * 10000000).toString(32); - _str = ('00000' + _str).substr(-5, 5); - str += _str + '.'; - } - - return str.slice(0, -1); -} - -export function isPatTa(str: string) { - const r = /^[a-z,0-9,\-,.,_,~]+$/.exec(str); - return !!r; -} - -/* - Goes from: - ~2018.7.17..23.15.09..5be5 // urbit @da - To: - (javascript Date object) -*/ -export function daToDate(st: string) { - var dub = function (n: string) { - return parseInt(n) < 10 ? '0' + parseInt(n) : n.toString(); - }; - var da = st.split('..'); - var bigEnd = da[0].split('.'); - var lilEnd = da[1].split('.'); - var ds = `${bigEnd[0].slice(1)}-${dub(bigEnd[1])}-${dub(bigEnd[2])}T${dub( - lilEnd[0] - )}:${dub(lilEnd[1])}:${dub(lilEnd[2])}Z`; - return new Date(ds); -} - -/* - Goes from: - (javascript Date object) - To: - ~2018.7.17..23.15.09..5be5 // urbit @da -*/ - -export function dateToDa(d: Date, mil: boolean) { - var fil = function (n: number) { - return n >= 10 ? n : '0' + n; - }; - return ( - `~${d.getUTCFullYear()}.` + - `${d.getUTCMonth() + 1}.` + - `${fil(d.getUTCDate())}..` + - `${fil(d.getUTCHours())}.` + - `${fil(d.getUTCMinutes())}.` + - `${fil(d.getUTCSeconds())}` + - `${mil ? '..0000' : ''}` - ); -} - -export function deSig(ship: string) { - return ship.replace('~', ''); -} - -// trim patps to match dojo, chat-cli -export function cite(ship: string) { - let patp = ship, - shortened = ''; - if (patp.startsWith('~')) { - patp = patp.substr(1); - } - // comet - if (patp.length === 56) { - shortened = '~' + patp.slice(0, 6) + '_' + patp.slice(50, 56); - return shortened; - } - // moon - if (patp.length === 27) { - shortened = '~' + patp.slice(14, 20) + '^' + patp.slice(21, 27); - return shortened; - } - return `~${patp}`; -} - -export function satsToCurrency( - sats: number, - denomination: Denomination, - rates: CurrencyRate -) { - if (!rates) { - throw 'nonexistent currency table'; - } - if (!rates[denomination]) { - denomination = 'BTC'; - } - let rate = rates[denomination]; - let val = rate ? parseFloat((sats * rate.last * 0.00000001).toFixed(8)) : 0; - let text; - if (denomination === 'BTC' && rate) { - text = val + ' ' + rate.symbol; - } else if (rate) { - text = - rate.symbol + val.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,'); - } - return text; -} - -export function mapDenominationToSymbol(denomination: string) { - switch (denomination) { - case 'USD': - return '$'; - default: - return denomination; - } -} - -export function reduceHistory(history: Transaction[]) { - return Object.values(history).sort((hest1, hest2) => { - if (hest1.recvd === null) return -1; - if (hest2.recvd === null) return +1; - return hest2.recvd - hest1.recvd; - }); -} - -export function copyToClipboard(textToCopy: string) { - // navigator clipboard api needs a secure context (https or localhost) - if (navigator.clipboard && window.isSecureContext) { - return navigator.clipboard.writeText(textToCopy); - } else { - let textArea = document.createElement('textarea'); - textArea.value = textToCopy; - textArea.style.position = 'fixed'; - textArea.style.left = '-999999px'; - textArea.style.top = '-999999px'; - document.body.appendChild(textArea); - textArea.focus(); - textArea.select(); - return new Promise((res, rej) => { - document.execCommand('copy') ? res() : rej(); - textArea.remove(); - }); - } -} diff --git a/pkg/btc-wallet/src/themes/dark.js b/pkg/btc-wallet/src/themes/dark.js deleted file mode 100644 index 5095ef468..000000000 --- a/pkg/btc-wallet/src/themes/dark.js +++ /dev/null @@ -1,183 +0,0 @@ -import baseStyled from 'styled-components'; - -const base = { - white: 'rgba(255,255,255,1)', - black: 'rgba(0,0,0,1)', - red: 'rgba(255,65,54,1)', - yellow: 'rgba(255,199,0,1)', - green: 'rgba(0,159,101,1)', - blue: 'rgba(0,142,255,1)', -}; - -const scales = { - white05: 'rgba(255,255,255,0.05)', - white10: 'rgba(255,255,255,0.1)', - white20: 'rgba(255,255,255,0.2)', - white30: 'rgba(255,255,255,0.3)', - white40: 'rgba(255,255,255,0.4)', - white50: 'rgba(255,255,255,0.5)', - white60: 'rgba(255,255,255,0.6)', - white70: 'rgba(255,255,255,0.7)', - white80: 'rgba(255,255,255,0.8)', - white90: 'rgba(255,255,255,0.9)', - white100: 'rgba(255,255,255,1)', - black05: 'rgba(0,0,0,0.05)', - black10: 'rgba(0,0,0,0.1)', - black20: 'rgba(0,0,0,0.2)', - black30: 'rgba(0,0,0,0.3)', - black40: 'rgba(0,0,0,0.4)', - black50: 'rgba(0,0,0,0.5)', - black60: 'rgba(0,0,0,0.6)', - black70: 'rgba(0,0,0,0.7)', - black80: 'rgba(0,0,0,0.8)', - black90: 'rgba(0,0,0,0.9)', - black100: 'rgba(0,0,0,1)', - red05: 'rgba(255,65,54,0.05)', - red10: 'rgba(255,65,54,0.1)', - red20: 'rgba(255,65,54,0.2)', - red30: 'rgba(255,65,54,0.3)', - red40: 'rgba(255,65,54,0.4)', - red50: 'rgba(255,65,54,0.5)', - red60: 'rgba(255,65,54,0.6)', - red70: 'rgba(255,65,54,0.7)', - red80: 'rgba(255,65,54,0.8)', - red90: 'rgba(255,65,54,0.9)', - red100: 'rgba(255,65,54,1)', - yellow05: 'rgba(255,199,0,0.05)', - yellow10: 'rgba(255,199,0,0.1)', - yellow20: 'rgba(255,199,0,0.2)', - yellow30: 'rgba(255,199,0,0.3)', - yellow40: 'rgba(255,199,0,0.4)', - yellow50: 'rgba(255,199,0,0.5)', - yellow60: 'rgba(255,199,0,0.6)', - yellow70: 'rgba(255,199,0,0.7)', - yellow80: 'rgba(255,199,0,0.8)', - yellow90: 'rgba(255,199,0,0.9)', - yellow100: 'rgba(255,199,0,1)', - green05: 'rgba(0,159,101,0.05)', - green10: 'rgba(0,159,101,0.1)', - green20: 'rgba(0,159,101,0.2)', - green30: 'rgba(0,159,101,0.3)', - green40: 'rgba(0,159,101,0.4)', - green50: 'rgba(0,159,101,0.5)', - green60: 'rgba(0,159,101,0.6)', - green70: 'rgba(0,159,101,0.7)', - green80: 'rgba(0,159,101,0.8)', - green90: 'rgba(0,159,101,0.9)', - green100: 'rgba(0,159,101,1)', - blue05: 'rgba(0,142,255,0.05)', - blue10: 'rgba(0,142,255,0.1)', - blue20: 'rgba(0,142,255,0.2)', - blue30: 'rgba(0,142,255,0.3)', - blue40: 'rgba(0,142,255,0.4)', - blue50: 'rgba(0,142,255,0.5)', - blue60: 'rgba(0,142,255,0.6)', - blue70: 'rgba(0,142,255,0.7)', - blue80: 'rgba(0,142,255,0.8)', - blue90: 'rgba(0,142,255,0.9)', - blue100: 'rgba(0,142,255,1)', -}; - -const util = { - cyan: '#00FFFF', - magenta: '#FF00FF', - yellow: '#FFFF00', - black: '#000000', - gray0: '#333333', -}; - -const theme = { - colors: { - white: util.gray0, - black: base.white, - - gray: scales.white60, - lightGray: scales.white30, - washedGray: scales.white05, - - red: base.red, - lightRed: scales.red30, - washedRed: scales.red05, - - yellow: base.yellow, - lightYellow: scales.yellow30, - washedYellow: scales.yellow10, - - green: base.green, - lightGreen: scales.green30, - washedGreen: scales.green10, - - blue: base.blue, - lightBlue: scales.blue30, - washedBlue: scales.blue10, - - none: 'rgba(0,0,0,0)', - - scales: scales, - util: util, - }, - fonts: { - sans: `"Inter", "Inter UI", -apple-system, BlinkMacSystemFont, 'San Francisco', 'Helvetica Neue', Arial, sans-serif`, - mono: `"Source Code Pro", "Roboto mono", "Courier New", monospace`, - }, - // font-size - fontSizes: [ - 12, // 0 - 16, // 1 - 24, // 2 - 32, // 3 - 48, // 4 - 64, // 5 - ], - // font-weight - fontWeights: { - thin: 300, - regular: 400, - bold: 600, - }, - // line-height - lineHeights: { - min: 1.2, - short: 1.333333, - regular: 1.5, - tall: 1.666666, - }, - // border, border-top, border-right, border-bottom, border-left - borders: ['none', '1px solid'], - // margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, grid-gap, grid-column-gap, grid-row-gap - space: [ - 0, // 0 - 4, // 1 - 8, // 2 - 16, // 3 - 24, // 4 - 32, // 5 - 48, // 6 - 64, // 7 - 96, // 8 - ], - // border-radius - radii: [ - 0, // 0 - 2, // 1 - 4, // 2 - 8, // 3 - ], - // width, height, min-width, max-width, min-height, max-height - sizes: [ - 0, // 0 - 4, // 1 - 8, // 2 - 16, // 3 - 24, // 4 - 32, // 5 - 48, // 6 - 64, // 7 - 96, // 8 - ], - // z-index - zIndices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - breakpoints: ['550px', '750px', '960px'], -}; -export const styled = baseStyled; -export default theme; diff --git a/pkg/btc-wallet/src/themes/light.js b/pkg/btc-wallet/src/themes/light.js deleted file mode 100644 index 6dd797c69..000000000 --- a/pkg/btc-wallet/src/themes/light.js +++ /dev/null @@ -1,184 +0,0 @@ -import baseStyled from 'styled-components'; - -const base = { - white: 'rgba(255,255,255,1)', - black: 'rgba(0,0,0,1)', - red: 'rgba(255,65,54,1)', - yellow: 'rgba(255,199,0,1)', - green: 'rgba(0,159,101,1)', - blue: 'rgba(0,142,255,1)', - none: 'rgba(0,0,0,0)', -}; - -const scales = { - white10: 'rgba(255,255,255,0.1)', - white20: 'rgba(255,255,255,0.2)', - white30: 'rgba(255,255,255,0.3)', - white40: 'rgba(255,255,255,0.4)', - white50: 'rgba(255,255,255,0.5)', - white60: 'rgba(255,255,255,0.6)', - white70: 'rgba(255,255,255,0.7)', - white80: 'rgba(255,255,255,0.8)', - white90: 'rgba(255,255,255,0.9)', - white100: 'rgba(255,255,255,1)', - black04: 'rgba(0,0,0,0.04)', - black10: 'rgba(0,0,0,0.1)', - black20: 'rgba(0,0,0,0.2)', - black30: 'rgba(0,0,0,0.3)', - black40: 'rgba(0,0,0,0.4)', - black50: 'rgba(0,0,0,0.5)', - black60: 'rgba(0,0,0,0.6)', - black70: 'rgba(0,0,0,0.7)', - black80: 'rgba(0,0,0,0.8)', - black90: 'rgba(0,0,0,0.9)', - black100: 'rgba(0,0,0,1)', - red05: 'rgba(255,65,54,0.05)', - red10: 'rgba(255,65,54,0.1)', - red20: 'rgba(255,65,54,0.2)', - red30: 'rgba(255,65,54,0.3)', - red40: 'rgba(255,65,54,0.4)', - red50: 'rgba(255,65,54,0.5)', - red60: 'rgba(255,65,54,0.6)', - red70: 'rgba(255,65,54,0.7)', - red80: 'rgba(255,65,54,0.8)', - red90: 'rgba(255,65,54,0.9)', - red100: 'rgba(255,65,54,1)', - yellow10: 'rgba(255,199,0,0.1)', - yellow20: 'rgba(255,199,0,0.2)', - yellow30: 'rgba(255,199,0,0.3)', - yellow40: 'rgba(255,199,0,0.4)', - yellow50: 'rgba(255,199,0,0.5)', - yellow60: 'rgba(255,199,0,0.6)', - yellow70: 'rgba(255,199,0,0.7)', - yellow80: 'rgba(255,199,0,0.8)', - yellow90: 'rgba(255,199,0,0.9)', - yellow100: 'rgba(255,199,0,1)', - green05: 'rgba(0,159,101,0.05)', - green10: 'rgba(0,159,101,0.1)', - green20: 'rgba(0,159,101,0.2)', - green30: 'rgba(0,159,101,0.3)', - green40: 'rgba(0,159,101,0.4)', - green50: 'rgba(0,159,101,0.5)', - green60: 'rgba(0,159,101,0.6)', - green70: 'rgba(0,159,101,0.7)', - green80: 'rgba(0,159,101,0.8)', - green90: 'rgba(0,159,101,0.9)', - green100: 'rgba(0,159,101,1)', - blue10: 'rgba(0,142,255,0.1)', - blue20: 'rgba(0,142,255,0.2)', - blue30: 'rgba(0,142,255,0.3)', - blue40: 'rgba(0,142,255,0.4)', - blue50: 'rgba(0,142,255,0.5)', - blue60: 'rgba(0,142,255,0.6)', - blue70: 'rgba(0,142,255,0.7)', - blue80: 'rgba(0,142,255,0.8)', - blue90: 'rgba(0,142,255,0.9)', - blue100: 'rgba(0,142,255,1)', -}; - -const theme = { - colors: { - white: base.white, - black: base.black, - - gray: scales.black60, - lighterGray: scales.black20, - lightGray: scales.black30, - washedGray: scales.black10, - veryLightGray: scales.black04, - - red: base.red, - lightRed: scales.red30, - washedRed: scales.red10, - veryLightRed: scales.red05, - - yellow: base.yellow, - lightYellow: scales.yellow30, - washedYellow: scales.yellow10, - - green: base.green, - lightGreen: scales.green30, - midGreen: scales.green60, - washedGreen: scales.green10, - veryLightGreen: scales.green05, - - blue: base.blue, - lightBlue: scales.blue30, - washedBlue: scales.blue10, - - none: 'rgba(0,0,0,0)', - scales: scales, - - orange: 'rgba(255, 153, 0, 1)', - midOrange: 'rgba(255, 153, 0, 0.2)', - lightOrange: 'rgba(255, 153, 0, 0.08)', - - sentBlue: 'rgba(33,157,255,1)', - recvGreen: 'rgba(0,159,101,1)', - }, - fonts: { - sans: `"Inter", "Inter UI", -apple-system, BlinkMacSystemFont, 'San Francisco', 'Helvetica Neue', Arial, sans-serif`, - mono: `"Source Code Pro", "Roboto mono", "Courier New", monospace`, - }, - // font-size - fontSizes: [ - 12, // 0 - 16, // 1 - 24, // 2 - 32, // 3 - 48, // 4 - 64, // 5 - ], - // font-weight - fontWeights: { - thin: 300, - regular: 400, - bold: 600, - }, - // line-height - lineHeights: { - min: 1.2, - short: 1.333333, - regular: 1.5, - tall: 1.666666, - }, - // border, border-top, border-right, border-bottom, border-left - borders: ['none', '1px solid'], - // margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, grid-gap, grid-column-gap, grid-row-gap - space: [ - 0, // 0 - 4, // 1 - 8, // 2 - 16, // 3 - 24, // 4 - 32, // 5 - 48, // 6 - 64, // 7 - 96, // 8 - ], - // border-radius - radii: [ - 0, // 0 - 2, // 1 - 4, // 2 - 8, // 3 - 16, // 4 - ], - // width, height, min-width, max-width, min-height, max-height - sizes: [ - 0, // 0 - 4, // 1 - 8, // 2 - 16, // 3 - 24, // 4 - 32, // 5 - 48, // 6 - 64, // 7 - 96, // 8 - ], - // z-index - zIndices: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], - breakpoints: ['550px', '750px', '960px'], -}; -export const styled = baseStyled; -export default theme; diff --git a/pkg/btc-wallet/src/types.ts b/pkg/btc-wallet/src/types.ts deleted file mode 100644 index 88a80269e..000000000 --- a/pkg/btc-wallet/src/types.ts +++ /dev/null @@ -1,45 +0,0 @@ -export type ProviderPerms = { - provider: string; - permitted: boolean; -}; - -export type ShipWallets = { - payee: string; - hasWallet: boolean; -}; - -export type Transaction = { - txid: TxidType; - recvd: number; - outputs: [{ ship: string; val: { value: number } }]; - inputs: [{ ship: string }]; - failure: string; -}; - -export type TxidType = { - dat: string; - wid: string; -}; - -export type ScanProgress = { - main: null | number; - change: null | number; -}; - -export type Network = 'bitcoin' | 'testnet'; - -export type Denomination = 'BTC' | 'USD'; - -export type UrbitWallet = { - bitcoinTestnet: { keys: { xpub: string; xprv: string } }; - bitcoinMainnet: { keys: { xpub: string; xprv: string } }; -}; - -export type CurrencyRate = { - [Denomination: string]: { last: number; symbol: string }; -}; - -export type Provider = { - host: string; - connected: boolean; -}; diff --git a/pkg/btc-wallet/src/urbit-key-generation.d.ts b/pkg/btc-wallet/src/urbit-key-generation.d.ts deleted file mode 100644 index f383788ae..000000000 --- a/pkg/btc-wallet/src/urbit-key-generation.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'urbit-key-generation'; diff --git a/pkg/btc-wallet/src/urbit-ob.d.ts b/pkg/btc-wallet/src/urbit-ob.d.ts deleted file mode 100644 index 10e6fb26d..000000000 --- a/pkg/btc-wallet/src/urbit-ob.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'urbit-ob'; diff --git a/pkg/btc-wallet/src/window.ts b/pkg/btc-wallet/src/window.ts deleted file mode 100644 index 46b86eaef..000000000 --- a/pkg/btc-wallet/src/window.ts +++ /dev/null @@ -1,8 +0,0 @@ -declare global { - interface Window { - ship: string; - desk: string; - } -} - -export {}; diff --git a/pkg/btc-wallet/tsconfig.json b/pkg/btc-wallet/tsconfig.json deleted file mode 100644 index 5256dd7ee..000000000 --- a/pkg/btc-wallet/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "outDir": "./dist/", - "noImplicitAny": true, - "module": "es6", - "target": "es5", - "jsx": "react", - "allowJs": true, - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "lib": ["ESNext", "DOM"] - } -} diff --git a/pkg/docker-image/README.md b/pkg/docker-image/README.md deleted file mode 100644 index 0e7e0a46a..000000000 --- a/pkg/docker-image/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# Official Urbit Docker Image - -This is the official Docker image for [Urbit](https://urbit.org). - -Urbit is a clean-slate OS and network for the 21st century. - -## Using - -To use this image, you should mount a volume with a keyfile, comet file, or existing pier at `/urbit`, and map ports -as described below. - -### Volume Mount -This image expects a volume mounted at `/urbit`. This volume should initially contain one of - -- A keyfile `.key` for a galaxy, star, planet, or moon. See the setup instructions for Urbit for information on [obtaining a keyfile](https://urbit.org/using/install/). - * e.g. `sampel-palnet.key` for the planet `sampel-palnet`. -- An empty file with the extension `.comet`. This will cause Urbit to boot a [comet](https://urbit.org/docs/glossary/comet/) in a pier named for the `.comet` file (less the extension). - * e.g. starting with an empty file `my-urbit-bot.comet` will result in Urbit booting a comet into the pier - `my-urbit-bot` under your volume. -- An existing pier as a directory ``. You can migrate an existing ship to a new docker container in this way by placing its pier under the volume. - * e.g. if your ship is `sampel-palnet` then you likely have a directory `sampel-palnet` whose path you pass to `./urbit` when starting. [Move your pier](https://urbit.org/using/operations/using-your-ship/#moving-your-pier) directory to the volume and then start the container. - -The first two options result in Urbit attempting to boot either the ship named by the name of the keyfile, or a comet. In both cases, after that boot is successful, the `.key` or `.comet` file will be removed from the volume and the pier will take its place. - -In consequence, it is safe to remove the container and start a new container which mounts the same volume, e.g. to upgrade the version of the urbit binary by running a later container version. It is also possible to stop the container and then move the pier away e.g. to a location where you will run it directly with the Urbit binary. - -### Ports -The image includes `EXPOSE` directives for TCP port 80 and UDP port 34343. Port `80` is used for Urbit's HTTP interface for both [Landscape](https://urbit.org/docs/glossary/landscape/) and for [API calls](https://urbit.org/using/integrating-api/) to the ship. Port `34343` is set by default to be used by [Ames](https://urbit.org/docs/glossary/ames/) for ship-to-ship communication. - -You can either pass the `-P` flag to docker to map ports directly to the corresponding ports on the host, or map them individually with `-p` flags. For local testing the latter is often convenient, for instance to remap port 80 to an unprivileged port. - -For best performance, you must map the Ames UDP port to the *same* port on the host. If you map to a different port Ames will not be able to make direct connections and your network performance may suffer somewhat. Note that using the same port is required for direct connections but is not by itself sufficient for them. If you are behind a NAT router or the host is not on a public IP address or you are firewalled, you may not achive direct connections regardless. - -For this purpose you can force Ames to use a custom port. `/bin/start-urbit --port=$AMES_PORT` can be passed as an argument to the `docker start` command. Passing `/bin/start-urbit --port=13436` for example, would use port 13436. You must pass the name of the start script `/bin/start-urbit` in order to also pass arguments, if this is omitted your container will not start. - -### Examples -Creating a volume for ~sampel=palnet: -``` -docker volume create sampel-palnet -``` - -Copying key to sampel-palnet's volume (assumes default docker location): -``` -sudo cp ~/sampel-palnet.key /var/lib/docker/volumes/sampel-palnet/_data/sampel-palnet.key -``` - -Using that volume and launching ~sampel-palnet on host port 8080 with Ames talking on the default host port 34343: -``` -docker run -d -p 8080:80 -p 34343:34343/udp --name sampel-palnet \ - --mount type=volume,source=sampel-palnet,destination=/urbit \ - tloncorp/urbit -``` - -Using host port 8088 with Ames talking on host port 23232: -``` -docker run -d -p 8088:80 -p 23232:23232/udp --name sampel-palnet \ - --mount type=volume,source=sampel-palnet,destination=/urbit \ - tloncorp/urbit /bin/start-urbit --port=23232 -``` - -### Getting and resetting the Landscape +code -This docker image includes tools for retrieving and resetting the Landscape login code belonging to the planet, for programmatic use so the container does not need a tty. These scripts can be called using `docker container exec`. - -Getting the code: -``` -$ docker container exec sampel-palnet /bin/get-urbit-code -sampel-sampel-sampel-sampel -``` - -Resetting the code: -``` -$ docker container exec sampel-palnet /bin/reset-urbit-code -OK -``` - -Once the code has been reset the new code can be obtained from `/bin/get-urbit-code`. - -## Extending - -You likely do not want to extend this image. External applications which interact with Urbit do so primarily via an HTTP API, which should be exposed as described above. For containerized applications using Urbit, it is more appropriate to use a container orchestration service such as Docker Compose or Kubernetes to run Urbit alongside other containers which will interface with its API. - -## Development -The docker image is built by a Nix derivation in the [`nix/pkgs/docker-image/default.nix`](https://github.com/urbit/urbit/tree/master/nix/pkgs/docker-image/default.nix) file under the Urbit git repository. diff --git a/pkg/ent/.gitignore b/pkg/ent/.gitignore deleted file mode 100644 index 97b75b05e..000000000 --- a/pkg/ent/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/*.a -/*.o -/out -/test diff --git a/pkg/ent/LICENSE b/pkg/ent/LICENSE deleted file mode 100644 index 6cbc4284e..000000000 --- a/pkg/ent/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright 2019 Steven Dee - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pkg/ent/Makefile b/pkg/ent/Makefile deleted file mode 100644 index 88edb189e..000000000 --- a/pkg/ent/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -CC ?= cc -AR ?= ar -PREFIX ?= ./out - -ifndef IMPL -$(error IMPL must be set) -endif - -################################################################################ - -.PHONY: all test install clean - -all: ent.c ent.h - $(CC) -D$(IMPL) -O3 -Wall -Werror -pedantic -std=gnu99 -c ent.c - $(AR) rcs libent.a ent.o - -test: all - $(CC) -D$(IMPL) -O3 -Wall -Werror -pedantic -std=gnu99 ent.c test.c -o test - ./test - -install: all - @mkdir -p $(PREFIX)/lib/ - @mkdir -p $(PREFIX)/include/ - cp libent.a $(PREFIX)/lib/ - cp ent.h $(PREFIX)/include/ - -clean: - rm -f *.o *.a test - rm -rf ./out diff --git a/pkg/ent/README.md b/pkg/ent/README.md deleted file mode 100644 index e2bc1c7f5..000000000 --- a/pkg/ent/README.md +++ /dev/null @@ -1,38 +0,0 @@ -## `libent` - -`libent` is a cross-platform wrapper around `getentropy(2)`. It exports -one symbol, `ent_getentropy`. If getentropy is available, then it's just -a shim around that. Otherwise, it uses `getrandom(2)` (available since -kernel 3.17) on Linux, or `/dev/urandom` on other \*nix. - - -### Building and Testing - -```bash -./configure -make -make test -PREFIX=/usr/local make install -``` - -### Why? - -`getentropy` is the wave of the future. It's the correct API for -generating small amounts of entropy to create cryptographic keys or seed -PRNGs. It's good and reasonable and true, it's on Linux, \*BSD, and OS -X, and it only took us fifty years of UNIX to get here. - -Sadly, it only just arrived, so nobody has it yet. It didn't land in -Linux until glibc 2.25, which seems to only have made it into Debian 10. - -Once `getentropy` is everywhere you care about, you can just do a -s/ent\_//g on all the call sites and discard this shim. - -This project began because [Urbit](https://github.com/urbit/urbit)'s -entropy-generation function was bothering me. Then it got out of hand. - - -### References - -* [OpenBSD getentropy](https://man.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man2/getentropy.2) -* [djb on entropy gathering](https://blog.cr.yp.to/20140205-entropy.html) diff --git a/pkg/ent/configure b/pkg/ent/configure deleted file mode 100755 index 5eb1c0e2f..000000000 --- a/pkg/ent/configure +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -: "${MAKE:=make}" - -log () { - echo "$@" >&2; -} - -for impl in ENT_GETENTROPY_UNISTD \ - ENT_GETENTROPY_SYSRANDOM \ - ENT_GETRANDOM_SYSCALL \ - ENT_GETENTROPY_BCRYPTGENRANDOM \ - ENT_DEV_URANDOM -do - export IMPL=$impl - - log "Trying IMPL=$IMPL" - - if IMPL=$impl ${MAKE} >/dev/null 2>/dev/null - then sed -i 's|$(error IMPL must be set)|IMPL='"$impl"'|' Makefile - log "IMPL=$IMPL works" - exit 0 - else log "IMPL=$IMPL failed" - fi -done - -log "This shouldn't happen, something is broken." -exit 1 diff --git a/pkg/ent/ent.c b/pkg/ent/ent.c deleted file mode 100644 index e7309ff33..000000000 --- a/pkg/ent/ent.c +++ /dev/null @@ -1,72 +0,0 @@ -// Use `getentropy` from unistd.h ////////////////////////////////////////////// - -#if defined(ENT_GETENTROPY_UNISTD) -#include -#include -int ent_getentropy(void* buf, size_t len) { - return getentropy(buf, len); -} - - -// Use `getentropy` from sys/random.h ////////////////////////////////////////// - -#elif defined(ENT_GETENTROPY_SYSRANDOM) -#include -#include -int ent_getentropy(void* buf, size_t len) { - return getentropy(buf, len); -} - - -// Use the `getrandom` syscall ///////////////////////////////////////////////// - -#elif defined(ENT_GETRANDOM_SYSCALL) -#include -#include -#define _GNU_SOURCE -#include -#include - -#define ENTFAIL { errno=EIO; return -1; } - -int ent_getentropy(void* buf, size_t len) { - if (len > 256) ENTFAIL - int r = syscall(SYS_getrandom, buf, len, 0); - if (r < 0) return r; - if (r != len) ENTFAIL - return 0; -} - - -// Use `/dev/urandom` ////////////////////////////////////////////////////////// - -#elif defined(ENT_DEV_URANDOM) -#include -#include -#include - -#define ENTFAIL { errno=EIO; return -1; } - -int ent_getentropy(void* buf, size_t len) { - if (len > 256) ENTFAIL; - FILE *f = fopen("/dev/urandom", "re"); - if (!f) return -1; - int r = fread(buf, 1, len, f); - (void) fclose(f); - if (r != len) ENTFAIL - return 0; -} - - -// Use `BCryptGenRandom` on Windows //////////////////////////////////////////// - -#elif defined(ENT_GETENTROPY_BCRYPTGENRANDOM) -#include -#include -int ent_getentropy(void* buf, size_t len) { - return BCryptGenRandom(NULL, (PUCHAR)buf, len, BCRYPT_USE_SYSTEM_PREFERRED_RNG); -} - -#else -#error "One of these must be set: ENT_GETENTROPY_BCRYPTGENRANDOM, ENT_DEV_URANDOM, ENT_GETENTROPY_UNISTD, ENT_GETENTROPY_SYSRANDOM, ENT_GETRANDOM_SYSCALL" -#endif diff --git a/pkg/ent/ent.h b/pkg/ent/ent.h deleted file mode 100644 index e838d61b5..000000000 --- a/pkg/ent/ent.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include - -/* - Fills buf with high-quality entropy. - - buflen is the number of bytes, no greater than 256. - - Returns 0 on success. On failure, returns -1 and sets errno to - indicate the error. -*/ -int ent_getentropy(void* buf, size_t buflen); diff --git a/pkg/ent/shell.nix b/pkg/ent/shell.nix deleted file mode 100644 index 0866cb96f..000000000 --- a/pkg/ent/shell.nix +++ /dev/null @@ -1,8 +0,0 @@ -let - - pkgs = import ../../default.nix { }; - -in pkgs.shellFor { - name = "ent"; - packages = ps: [ ps.ent ]; -} diff --git a/pkg/ent/test.c b/pkg/ent/test.c deleted file mode 100644 index 90b6ca0c6..000000000 --- a/pkg/ent/test.c +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include -#include - -#include "ent.h" - -int main(void) { - char buf[256] = {0}; - - if (0 != ent_getentropy(buf, sizeof(buf))) { - perror("getentropy"); - exit(1); - } - - for (int i = 0; i < sizeof buf; i++) { - printf("%02hhx", buf[i]); - } - - puts(""); -} diff --git a/pkg/garden-dev/lib/docket.hoon b/pkg/garden-dev/lib/docket.hoon deleted file mode 100644 index ef39b7fbb..000000000 --- a/pkg/garden-dev/lib/docket.hoon +++ /dev/null @@ -1,223 +0,0 @@ -/- *docket -|% -:: -++ mime - |% - +$ draft - $: title=(unit @t) - info=(unit @t) - color=(unit @ux) - glob-http=(unit [=url hash=@uvH]) - glob-ames=(unit [=ship hash=@uvH]) - base=(unit term) - site=(unit path) - image=(unit url) - version=(unit version) - website=(unit url) - license=(unit cord) - == - :: - ++ finalize - |= =draft - ^- (unit docket) - ?~ title.draft ~ - ?~ info.draft ~ - ?~ color.draft ~ - ?~ version.draft ~ - ?~ website.draft ~ - ?~ license.draft ~ - =/ href=(unit href) - ?^ site.draft `[%site u.site.draft] - ?~ base.draft ~ - ?^ glob-http.draft - `[%glob u.base hash.u.glob-http %http url.u.glob-http]:draft - ?~ glob-ames.draft - ~ - `[%glob u.base hash.u.glob-ames %ames ship.u.glob-ames]:draft - ?~ href ~ - =, draft - :- ~ - :* %1 - u.title - u.info - u.color - u.href - image - u.version - u.website - u.license - == - :: - ++ from-clauses - =| =draft - |= cls=(list clause) - ^- (unit docket) - =* loop $ - ?~ cls (finalize draft) - =* clause i.cls - =. draft - ?- -.clause - %title draft(title `title.clause) - %info draft(info `info.clause) - %color draft(color `color.clause) - %glob-http draft(glob-http `[url hash]:clause) - %glob-ames draft(glob-ames `[ship hash]:clause) - %base draft(base `base.clause) - %site draft(site `path.clause) - %image draft(image `url.clause) - %version draft(version `version.clause) - %website draft(website `website.clause) - %license draft(license `license.clause) - == - loop(cls t.cls) - :: - ++ to-clauses - |= d=docket - ^- (list clause) - %- zing - :~ :~ title+title.d - info+info.d - color+color.d - version+version.d - website+website.d - license+license.d - == - ?~ image.d ~ ~[image+u.image.d] - ?: ?=(%site -.href.d) ~[site+path.href.d] - =/ ref=glob-reference glob-reference.href.d - :~ base+base.href.d - ?- -.location.ref - %http [%glob-http url.location.ref hash.ref] - %ames [%glob-ames ship.location.ref hash.ref] - == == == - :: - ++ spit-clause - |= =clause - ^- tape - %+ weld " {(trip -.clause)}+" - ?+ -.clause "'{(trip +.clause)}'" - %color (scow %ux color.clause) - %site (spud path.clause) - :: - %glob-http - "['{(trip url.clause)}' {(scow %uv hash.clause)}]" - :: - %glob-ames - "[{(scow %p ship.clause)} {(scow %uv hash.clause)}]" - :: - %version - =, version.clause - "[{(scow %ud major)} {(scow %ud minor)} {(scow %ud patch)}]" - == - :: - ++ spit-docket - |= dock=docket - ^- tape - ;: welp - ":~\0a" - `tape`(zing (join "\0a" (turn (to-clauses dock) spit-clause))) - "\0a==" - == - -- -:: -++ enjs - =, enjs:format - |% - :: - ++ charge-update - |= u=^charge-update - ^- json - %+ frond -.u - ^- json - ?- -.u - %del-charge s+desk.u - :: - %initial - %- pairs - %+ turn ~(tap by initial.u) - |=([=desk c=^charge] [desk (charge c)]) - :: - %add-charge - %- pairs - :~ desk+s+desk.u - charge+(charge charge.u) - == - == - :: - ++ num - |= a=@u - ^- ^tape - =/ p=json (numb a) - ?> ?=(%n -.p) - (trip p.p) - :: - ++ version - |= v=^version - ^- json - :- %s - %- crip - "{(num major.v)}.{(num minor.v)}.{(num patch.v)}" - :: - ++ merge - |= [a=json b=json] - ^- json - ?> &(?=(%o -.a) ?=(%o -.b)) - [%o (~(uni by p.a) p.b)] - :: - ++ href - |= h=^href - %+ frond -.h - ?- -.h - %site s+(spat path.h) - %glob - %- pairs - :~ base+s+base.h - glob-reference+(glob-reference glob-reference.h) - == - == - :: - ++ glob-reference - |= ref=^glob-reference - %- pairs - :~ hash+s+(scot %uv hash.ref) - location+(glob-location location.ref) - == - :: - ++ glob-location - |= loc=^glob-location - ^- json - %+ frond -.loc - ?- -.loc - %http s+url.loc - %ames s+(scot %p ship.loc) - == - :: - ++ charge - |= c=^charge - %+ merge (docket docket.c) - %- pairs - :~ chad+(chad chad.c) - == - :: - ++ docket - |= d=^docket - ^- json - %- pairs - :~ title+s+title.d - info+s+info.d - color+s+(scot %ux color.d) - href+(href href.d) - image+?~(image.d ~ s+u.image.d) - version+(version version.d) - license+s+license.d - website+s+website.d - == - :: - ++ chad - |= c=^chad - %+ frond -.c - ?+ -.c ~ - %hung s+err.c - == - -- --- diff --git a/pkg/garden-dev/lib/hark-store.hoon b/pkg/garden-dev/lib/hark-store.hoon deleted file mode 100644 index 23af6a64d..000000000 --- a/pkg/garden-dev/lib/hark-store.hoon +++ /dev/null @@ -1,255 +0,0 @@ -/- sur=hark-store -^? -=, sur -=< [. sur] -|% - -++ enjs - =, enjs:format - |% - ++ update - |= upd=^update - ^- json - %+ frond -.upd - ?+ -.upd a+~ - %added (notification +.upd) - %add-note (add-note +.upd) - %timebox (timebox +.upd) - %more (more +.upd) - %read-each (read-each +.upd) - %read-count (place +.upd) - %unread-each (read-each +.upd) - %unread-count (unread-count +.upd) - %saw-place (saw-place +.upd) - %all-stats (all-stats +.upd) - %del-place (place +.upd) - ::%read-note (index +.upd) - ::%note-read (note-read +.upd) - %archived (archived +.upd) - == - :: - ++ add-note - |= [bi=^bin bo=^body] - %- pairs - :~ bin+(bin bi) - body+(body bo) - == - :: - ++ saw-place - |= [p=^place t=(unit ^time)] - %- pairs - :~ place+(place p) - time+?~(t ~ (time u.t)) - == - :: - ++ archived - |= [t=^time l=^lid n=^notification] - %- pairs - :~ lid+(lid l) - time+s+(scot %ud t) - notification+(notification n) - == - :: - ++ note-read - |= * - (pairs ~) - :: - ++ all-stats - |= places=(map ^place ^stats) - ^- json - :- %a - ^- (list json) - %+ turn ~(tap by places) - |= [p=^place s=^stats] - %- pairs - :~ stats+(stats s) - place+(place p) - - == - :: - ++ stats - |= s=^stats - ^- json - %- pairs - :~ each+a+(turn ~(tap in each.s) (cork spat (lead %s))) - last+(time last.s) - count+(numb count.s) - == - ++ more - |= upds=(list ^update) - ^- json - a+(turn upds update) - :: - ++ place - |= =^place - %- pairs - :~ desk+s+desk.place - path+s+(spat path.place) - == - :: - ++ bin - |= =^bin - %- pairs - :~ place+(place place.bin) - path+s+(spat path.bin) - == - ++ notification - |= ^notification - ^- json - %- pairs - :~ time+(time date) - bin+(^bin bin) - body+(bodies body) - == - ++ bodies - |= bs=(list ^body) - ^- json - a+(turn bs body) - :: - ++ contents - |= cs=(list ^content) - ^- json - a+(turn cs content) - :: - ++ content - |= c=^content - ^- json - %+ frond -.c - ?- -.c - %ship s+(scot %p ship.c) - %text s+cord.c - == - :: - ++ body - |= ^body - ^- json - %- pairs - :~ title+(contents title) - content+(contents content) - time+(^time time) - link+s+(spat link) - == - :: - ++ binned-notification - |= [=^bin =^notification] - %- pairs - :~ bin+(^bin bin) - notification+(^notification notification) - == - ++ lid - |= l=^lid - ^- json - %+ frond -.l - ?- -.l - ?(%seen %unseen) ~ - %archive s+(scot %ud time.l) - == - :: - ++ timebox - |= [li=^lid l=(list ^notification)] - ^- json - %- pairs - :~ lid+(lid li) - notifications+a+(turn l notification) - == - :: - ++ read-each - |= [p=^place pax=^path] - %- pairs - :~ place+(place p) - path+(path pax) - == - :: - ++ unread-count - |= [p=^place inc=? count=@ud] - %- pairs - :~ place+(place p) - inc+b+inc - count+(numb count) - == - -- -++ dejs - =, dejs:format - |% - ++ ship (su ;~(pfix sig fed:ag)) - :: TODO: fix +stab - :: - ++ pa - |= j=json - ^- path - ?> ?=(%s -.j) - ?: =('/' p.j) / - (stab p.j) - :: - ++ place - %- ot - :~ desk+so - path+pa - == - :: - ++ bin - %- ot - :~ path+pa - place+place - == - :: - ++ read-each - %- ot - :~ place+place - path+pa - == - :: - :: parse date as @ud - :: TODO: move to zuse - ++ sd - |= jon=json - ^- @da - ?> ?=(%s -.jon) - `@da`(rash p.jon dem:ag) - :: - ++ lid - %- of - :~ archive+sd - unseen+ul - seen+ul - == - :: - ++ archive - %- ot - :~ lid+lid - bin+bin - == - ++ content - %- of - :~ text+so - ship+ship - == - :: - ++ body - %- ot - :~ title+(ar content) - content+(ar content) - time+di - binned+pa - link+pa - == - :: - ++ add-note - %- ot - :~ bin+bin - body+body - == - :: - ++ action - ^- $-(json ^action) - %- of - :~ archive-all+ul - archive+archive - opened+ul - read-count+place - read-each+read-each - read-note+bin - add-note+add-note - == - -- --- diff --git a/pkg/garden-dev/mar/docket-0.hoon b/pkg/garden-dev/mar/docket-0.hoon deleted file mode 100644 index 911d34c0d..000000000 --- a/pkg/garden-dev/mar/docket-0.hoon +++ /dev/null @@ -1,25 +0,0 @@ -/+ dock=docket -|_ =docket:dock -++ grow - |% - ++ mime - ^- ^mime - [/text/x-docket (as-octt:mimes:html (spit-docket:mime:dock docket))] - ++ noun docket - ++ json (docket:enjs:dock docket) - -- -++ grab - |% - :: - ++ mime - |= [=mite len=@ud tex=@] - ^- docket:dock - %- need - %- from-clauses:mime:dock - !<((list clause:dock) (slap !>(~) (ream tex))) - - :: - ++ noun docket:dock - -- -++ grad %noun --- diff --git a/pkg/garden-dev/sur/docket.hoon b/pkg/garden-dev/sur/docket.hoon deleted file mode 100644 index 091c8c9f9..000000000 --- a/pkg/garden-dev/sur/docket.hoon +++ /dev/null @@ -1,82 +0,0 @@ -|% -:: -+$ version - [major=@ud minor=@ud patch=@ud] -:: -+$ glob (map path mime) -:: -+$ url cord -:: $glob-location: How to retrieve a glob -:: -+$ glob-reference - [hash=@uvH location=glob-location] -:: -+$ glob-location - $% [%http =url] - [%ames =ship] - == -:: $href: Where a tile links to -:: -+$ href - $% [%glob base=term =glob-reference] - [%site =path] - == -:: $chad: State of a docket -:: -+$ chad - $~ [%install ~] - $% :: Done - [%glob =glob] - [%site ~] - :: Waiting - [%install ~] - [%suspend glob=(unit glob)] - :: Error - [%hung err=cord] - == -:: -:: $charge: A realized $docket -:: -+$ charge - $: =docket - =chad - == -:: -:: $clause: A key and value, as part of a docket -:: -:: Only used to parse $docket -:: -+$ clause - $% [%title title=@t] - [%info info=@t] - [%color color=@ux] - [%glob-http url=cord hash=@uvH] - [%glob-ames =ship hash=@uvH] - [%image =url] - [%site =path] - [%base base=term] - [%version =version] - [%website website=url] - [%license license=cord] - == -:: -:: $docket: A description of JS bundles for a desk -:: -+$ docket - $: %1 - title=@t - info=@t - color=@ux - =href - image=(unit url) - =version - website=url - license=cord - == -:: -+$ charge-update - $% [%initial initial=(map desk charge)] - [%add-charge =desk =charge] - [%del-charge =desk] - == --- diff --git a/pkg/garden-dev/sur/hark-store.hoon b/pkg/garden-dev/sur/hark-store.hoon deleted file mode 100644 index 457839309..000000000 --- a/pkg/garden-dev/sur/hark-store.hoon +++ /dev/null @@ -1,159 +0,0 @@ -^? -:: -:: %hark-store: Notification, unreads store -:: -:: Timeboxing & binning: -:: -:: Unread notifications accumulate in $unreads. They are grouped by -:: their $bin. A notification may become read by either: -:: a) being read by a %read-count or %read-each or %read-note -:: b) being read by a %seen -:: -:: If a) then we insert the corresponding bin into $reads at the -:: current timestamp -:: If b) then we empty $unreads and move all bins to $reads at the -:: current timestamp -:: -:: Unread tracking: -:: Unread tracking has two 'modes' which may be used concurrently, -:: if necessary. -:: -:: count: -:: This stores the unreads as a simple atom, describing the number -:: of unread items. May be increased with %unread-count and -:: set to zero with %read-count. Ideal for high-frequency linear -:: datastructures, e.g. chat -:: each: -:: This stores the unreads as a set of paths, describing the set of -:: unread items. Unreads may be added to the set with %unread-each -:: and removed with %read-each. Ideal for non-linear, low-frequency -:: datastructures, e.g. blogs -:: -|% -:: $place: A location, under which landscape stores stats -:: -:: .desk must match q.byk.bowl -:: Examples: -:: A chat: -:: [%landscape /~dopzod/urbit-help] -:: A note in a notebook: -:: [%landscape /~darrux-landes/feature-requests/12374893234232] -:: A group: -:: [%hark-group-hook /~bitbet-bolbel/urbit-community] -:: Comments on a link -:: [%landscape /~dabben-larbet/urbit-in-the-news/17014118450499614194868/2] -:: -+$ place [=desk =path] -:: -:: $bin: Identifier for grouping notifications -:: -:: Examples -:: A mention in a chat: -:: [/mention %landscape /~dopzod/urbit-help] -:: New messages in a chat -:: [/message %landscape /~dopzod/urbit-help] -:: A new comment in a notebook: -:: [/comment %landscape /~darrux-landes/feature-requests/12374893234232/2] -:: -+$ bin [=path =place] -:: -:: $lid: Reference to a timebox -:: -+$ lid - $% [%archive =time] - [%seen ~] - [%unseen ~] - == -:: $content: Notification content -+$ content - $% [%ship =ship] - [%text =cord] - == -:: -:: $body: A notification body -:: -+$ body - $: title=(list content) - content=(list content) - =time - binned=path - link=path - == -:: -+$ notification - [date=@da =bin body=(list body)] -:: $timebox: Group of notificatons -+$ timebox - (map bin notification) -:: $archive: Archived notifications, ordered by time -+$ archive - ((mop @da timebox) gth) -:: -+$ action - $% :: hook actions - :: - :: %add-note: add a notification - [%add-note =bin =body] - :: - :: %del-place: Underlying resource disappeared, remove all - :: associated notifications - [%del-place =place] - :: %unread-count: Change unread count by .count - [%unread-count =place inc=? count=@ud] - :: %unread-each: Add .path to list of unreads for .place - [%unread-each =place =path] - :: %saw-place: Update last-updated for .place to now.bowl - [%saw-place =place time=(unit time)] - :: store actions - :: - :: %archive: archive single notification - :: if .time is ~, then archiving unread notification - :: else, archiving read notification - [%archive =lid =bin] - :: %read-count: set unread count to zero - [%read-count =place] - :: %read-each: remove path from unreads for .place - [%read-each =place =path] - :: %read-note: Read note at .bin - [%read-note =bin] - :: %archive-all: Archive all notifications - [%archive-all ~] - :: %opened: User opened notifications, reset timeboxing logic. - :: - [%opened ~] - :: - :: XX: previously in hark-store, now deprecated - :: the hooks responsible for creating notifications may offer pokes - :: similar to this - :: [%read-graph =resource] - :: [%read-group =resource] - :: [%remove-graph =resource] - :: - == -:: .stats: Statistics for a .place -:: -+$ stats - $: count=@ud - each=(set path) - last=@da - timebox=(unit @da) - == -:: -+$ update - $% action - :: %more: more updates - [%archived =time =lid =notification] - [%more more=(list update)] - :: %note-read: note has been read with timestamp - [%note-read =time =bin] - [%added =notification] - :: %timebox: description of timebox. - :: - [%timebox =lid =(list notification)] - :: %place-stats: description of .stats for a .place - [%place-stats =place =stats] - :: %place-stats: stats for all .places - [%all-stats places=(map place stats)] - == --- - diff --git a/pkg/garden-dev/sur/settings.hoon b/pkg/garden-dev/sur/settings.hoon deleted file mode 100644 index 53e8691db..000000000 --- a/pkg/garden-dev/sur/settings.hoon +++ /dev/null @@ -1,44 +0,0 @@ -/+ *mip -|% -:: -++ settings-0 - =< settings - |% - +$ settings (map key bucket) - +$ bucket (map key val) - +$ val - $% [%s p=@t] - [%b p=?] - [%n p=@] - == - -- -:: -++ settings-1 - =< settings - |% - +$ settings (map key bucket) - -- -+$ bucket (map key val) -+$ key term -+$ val - $~ [%n 0] - $% [%s p=@t] - [%b p=?] - [%n p=@] - [%a p=(list val)] - == -:: -+$ settings (mip desk key bucket) -+$ event - $% [%put-bucket =desk =key =bucket] - [%del-bucket =desk =key] - [%put-entry =desk buc=key =key =val] - [%del-entry =desk buc=key =key] - == -+$ data - $% [%all =settings] - [%bucket =bucket] - [%desk desk=(map key bucket)] - [%entry =val] - == --- diff --git a/pkg/garden/app/docket.hoon b/pkg/garden/app/docket.hoon deleted file mode 100644 index 6dec08cf7..000000000 --- a/pkg/garden/app/docket.hoon +++ /dev/null @@ -1,731 +0,0 @@ -/- *docket, hood, treaty -/+ *server, agentio, default-agent, multipart, dbug, verb -|% -+$ card card:agent:gall -+$ app-state - $: %2 - :: local - charges=(map desk charge) - == -:: $cache: impermanent state -+$ cache - by-base=(map term desk) -:: -+$ inflated-state - [app-state cache] -:: +lac: toggle verbosity -++ lac & -:: -++ ver - |% - ++ poke 1 - ++ scry 1 - ++ peer 1 - -- -:: --- -^- agent:gall -%- agent:dbug -%+ verb | -=| inflated-state -=* state - -=< -|_ =bowl:gall -+* this . - io ~(. agentio bowl) - pass pass:io - def ~(. (default-agent this %|) bowl) - cc ~(. +> bowl) - ch ch:cc - cg cg:cc -:: -++ on-init - ^- (quip card _this) - :_ this - :~ (~(watch-our pass /kiln) %hood /kiln/vats) - (~(connect pass /eyre) [~ /] %docket) - (~(wait pass /init) (add 1 now.bowl)) - (~(connect pass /eyre) [~ /apps] %docket) - == -:: -++ on-load - |= =vase - ^- (quip card _this) - |^ - =+ !<(old=app-states vase) - =? old ?=(?(~ ^) -.old) [%1 old] - =^ cards old - ?. ?=(%1 -.old) `old - =/ rein=cage kiln-rein+!>([%base %.y ~ ~]) - =/ nuke=cage kiln-uninstall+!>(%hodl) - :_ old(- %2) - :~ [%pass /rein %agent [our.bowl %hood] %poke rein] - [%pass /nuke %agent [our.bowl %hood] %poke nuke] - == - ?> ?=(%2 -.old) - =. -.state old - :: inflate-cache needs to be called after the state is set - :: - =. +.state inflate-cache - [cards this] - :: - ++ inflate-cache - ^- cache - %- ~(gas by *(map term desk)) - %+ murn ~(tap by charges) - |= [=desk =charge] - ?. ?=(%glob -.href.docket.charge) ~ - `:_(desk base.href.docket.charge) - :: - +$ app-states - $^ state-0-ket - $% state-0-sig - state-1 - app-state - == - :: - +$ state-1 [%1 (map desk charge)] - +$ state-0-sig - $: ~ - == - :: - +$ state-0-ket - $: (map desk charge) - == - -- -:: -++ on-save !>(-.state) -++ on-poke - |= [=mark =vase] - ^- (quip card _this) - |^ - =^ cards state - ?+ mark (on-poke:def:cc mark vase) - %docket-install (install !<([ship desk] vase)) - %docket-uninstall (uninstall !<(desk vase)) - :: - %noun - =+ ;;([%kick =desk] q.vase) - :_(state ~(fetch-glob ch desk)) - :: - %handle-http-request - =+ !<([id=@ta req=inbound-request:eyre] vase) - (handle-http-request:cc id req) - == - [cards this] - :: - ++ install - |= [=ship =desk] - ^- (quip card _state) - =+ .^(=treaty:treaty %gx (scry:io %treaty /treaty/(scot %p ship)/[desk]/noun)) - ?: (~(has by charges) desk) - ~| bad-install-desk/desk - !! - =. charges - (~(put by charges) desk docket.treaty %install ~) - =* cha ~(. ch desk) - :_ state - ~[add-fact:cha (install:cha ship desk)] - :: - ++ uninstall - |= =desk - ^- (quip card _state) - =/ =charge ~|(no-charge-installed+desk (~(got by charges) desk)) - =. charges (~(del by charges) desk) - =? by-base ?=(%glob -.href.docket.charge) - (~(del by by-base) base.href.docket) - =* cha ~(. ch desk) - :_ state - ~[del-fact:cha uninstall:cha] - -- -:: -++ on-watch - |= =path - ^- (quip card _this) - =^ cards state - ?+ path (on-watch:def path) - [%http-response *] - ?> (team:title [our src]:bowl) - `state - :: - [%charges ~] - ?> (team:title [our src]:bowl) - `state - :: - [%glob @ @ ~] - =* base i.t.path - =/ hash (slav %uv i.t.t.path) - =/ desk ~|(path/path (~(got by by-base) i.t.path)) - =/ =charge ~|(desk/desk (~(got by charges) desk)) - ?> ?=(%glob -.chad.charge) - =/ have (hash-glob:cc glob.chad.charge) - ~| [%glob-unavailable requested=hash have=have] - ?> =(hash have) - :_ state - (fact-init-kick:io (glob:cg glob.chad.charge)) - == - [cards this] -:: -++ on-peek - |= =path - ^- (unit (unit cage)) - ?+ path [~ ~] - [%x %ver %poke ~] ``noun+!>(poke:ver) - [%x %ver %peer ~] ``noun+!>(peer:ver) - [%x %ver %scry ~] ``noun+!>(scry:ver) - [%x %our ~] ``json+!>(s+(scot %p our.bowl)) - :: - [%x %dbug %state ~] - =- ``noun+!>(-) - %_ state - charges - %- ~(run by charges) - |= =charge - =? chad.charge ?=(%glob -.chad.charge) - :- %glob - %- ~(run by glob.chad.charge) - |=(=mime mime(q.q 1.337)) - charge - == - :: - [%x %charges ~] - :- ~ :- ~ - %- charge-update:cg - :- %initial - %- ~(gas by *(map desk charge)) - %+ turn ~(tap by charges) - |= [=desk =charge] - [desk (get-light-charge charge)] - :: - [%x %charges @ %version ~] - ?~ charge=(~(get by charges) i.t.t.path) - [~ ~] - ``noun+!>(version.docket.u.charge) - == -:: -++ on-agent - |= [=wire =sign:agent:gall] - ^- (quip card _this) - |^ - =^ cards state - ?+ wire ~&(bad-docket-take+wire `state) - ~ `state - [%rein ~] ~&(%reined `state) - [%nuke ~] ~&(%nuked `state) - [%kiln ~] take-kiln - [%charge @ *] (take-charge i.t.wire t.t.wire) - == - [cards this] - :: - ++ take-kiln - ^- (quip card _state) - ?+ -.sign (on-agent:def:cc wire sign) - %kick [(~(watch-our pass /kiln) %hood /kiln/vats)^~ state] - %fact - |^ ^- (quip card _state) - ?+ p.cage.sign ~|(take-kiln-mark/p.cage.sign !!) - %kiln-vats-snap-0 (on-snap !<(snap:hood q.cage.sign)) - %kiln-vats-diff-0 (on-diff !<(diff:hood q.cage.sign)) - == - :: - ++ on-snap - |= =snap:hood - ^- (quip card _state) - =| fex=(list card) - =/ ark ~(tap by snap) - |- ^- (quip card _state) - ?~ ark [(flop fex) state] - =^ caz state (on-commit i.ark) - $(ark t.ark, fex (weld (flop caz) fex)) - :: - ++ on-diff - |= =diff:hood - =+ !<(=diff:hood q.cage.sign) - ?- -.diff - %commit (on-commit [desk arak]:diff) - %suspend (on-suspend [desk arak]:diff) - %revive (on-revive [desk arak]:diff) - ?(%block %reset %merge-sunk %merge-fail) - `state - == - :: - ++ on-commit - |= [=desk =arak:hood] - ^- (quip card _state) - =* cha ~(. ch desk) - ?. docket-exists:cha - ~? ?& !=(%base desk) - !=(%kids desk) - == - [dap.bowl %no-docket-file-for desk] - `state - :: always update the docket in state to match clay's - :: - =/ =docket docket:cha - =/ pre=(unit charge) (~(get by charges) desk) - =. charges (new-docket:cha docket) - :: if the new chad is a site, we're instantly done - :: - ?: ?=(%site -.href.docket) - =. charges (new-chad:cha %site ~) - :- ~[add-fact:cha] - state - :: - =. by-base (~(put by by-base) base.href.docket desk) - :: if the glob specification is unchanged, keep it - :: - ?: &(?=(^ pre) =(href.docket.u.pre href.docket) ?=(%glob -.chad.u.pre)) - [~[add-fact:cha] state] - :: if the glob spec changed, but we already host it, keep it - :: (this is the "just locally uploaded" case) - :: - ?: ?& ?=(^ pre) - ?=(%glob -.chad.u.pre) - :: - .= [(sham glob.chad.u.pre) %ames our.bowl] - glob-reference.href.docket - == - [~[add-fact:cha] state] - :: if the glob changed, forget the old and fetch the new - :: - =. charges (new-chad:cha %install ~) - [[add-fact:cha fetch-glob:cha] state] - :: - ++ on-suspend - |= [=desk =arak:hood] - ^- (quip card _state) - =* cha ~(. ch desk) - ?. (~(has by charges) desk) `state - =/ glob=(unit glob) - =/ =chad - chad:(~(got by charges) desk) - ?:(?=(%glob -.chad) `glob.chad ~) - =. charges (new-chad:cha %suspend glob) - :_(state ~[add-fact:cha]) - :: - ++ on-revive - |= [=desk =arak:hood] - ^- (quip card _state) - =* cha ~(. ch desk) - ?. (~(has by charges) desk) `state - =/ =charge (~(got by charges) desk) - ?. ?=(%glob -.href.docket.charge) - =. charges (new-chad:cha %site ~) - :_(state ~[add-fact:cha]) - =. charges - %- new-chad:cha - ?. ?=([%suspend ~ *] chad.charge) - [%install ~] - [%glob u.glob.chad.charge] - :_(state [add-fact fetch-glob]:cha) - -- - == - ++ take-charge - |= [=desk =^wire] - ^- (quip card _state) - ~| [%took-for-nonexistent-charge desk] - ?> |((~(has by charges) desk) ?=([%uninstall ~] wire)) - =* cha ~(. ch desk) - ?+ wire ~|(%bad-charge-wire !!) - :: - [%install ~] - ?> ?=(%poke-ack -.sign) - ?~ p.sign - `state - =. charges (new-chad:cha hung+'Failed install') - ((slog leaf+"Failed installing %{(trip desk)}" u.p.sign) `state) - :: - [%uninstall ~] - ?> ?=(%poke-ack -.sign) - ?~ p.sign `state - ((slog leaf+"Failed to uninstall %{(trip desk)}" u.p.sign) `state) - :: - [%glob @ ?(%http %ames) @ ~] - ?- -.sign - %kick `state - :: - ?(%poke-ack %watch-ack) - ?~ p.sign `state - =/ act=tape ?:(?=(%poke-ack -.sign) "start" "listen") - =. charges - %- new-chad:cha - ?: ?=(%http i.t.t.wire) - hung+'failed to fetch glob via http' - hung+'failed to fetch glob via ames' - ((slog leaf+"docket: couldn't {act} thread; will retry" u.p.sign) `state) - :: - %fact - ?+ p.cage.sign `state - %thread-fail - =+ !<([=term =tang] q.cage.sign) - ?. |(=(term %cancelled) =(term %http-request-cancelled)) - =. charges (new-chad:cha hung+'glob-failed') - :- ~[add-fact:cha] - ((slog leaf+"docket: thread failed;" leaf+ tang) state) - %- (slog leaf+"docket: thread cancelled; retrying" leaf+ tang) - =. charges (new-chad:cha %install ~) - :_ state - [add-fact:cha fetch-glob:cha] - :: - %thread-done - =+ !<(=glob q.cage.sign) - =/ =charge (~(got by charges) desk) - ?. ?=(%glob -.href.docket.charge) - `state - =* want=@uv hash.glob-reference.href.docket.charge - =/ plea=@uv (slav %uv i.t.wire) - ?. =(want plea) - :: we requested this at some point but no longer want it - :: - `state - =/ have=@uv (hash-glob glob) - ?. =(want have) - =. charges (new-chad:cha hung+'glob hash mismatch') - %. `state - =/ url=@t (fall (slaw %t i.t.t.t.wire) '???') - %- slog - :~ leaf+"docket: glob hash mismatch on {} from {(trip url)}" - leaf+"expected: {}" - leaf+"received: {}" - == - =. charges (new-chad:cha glob+glob) - =. by-base (~(put by by-base) base.href.docket.charge desk) - :_(state ~[add-fact:cha]) - == - == - == - -- -:: -++ on-arvo - |= [=wire sign=sign-arvo] - =^ cards state - ?+ wire (on-arvo:def wire sign) - [%init ~] - =* cha ~(. ch q.byk.bowl) - =. charges (~(put by charges) q.byk.bowl [docket:cha %install ~]) - [fetch-glob:cha state] - :: - [%eyre ~] - ?> ?=([%eyre %bound *] sign) - ?: accepted.sign `state - ~& [dap.bowl %failed-to-bind path.binding.sign] - `state - == - [cards this] -:: -++ on-fail on-fail:def -++ on-leave on-leave:def --- -:: -|_ =bowl:gall -++ io ~(. agentio bowl) -++ pass pass:io -++ def ~(. (default-agent state %|) bowl) -:: -++ hash-glob sham -++ cg - |% - ++ glob |=(g=^glob glob-0+!>(g)) - ++ docket |=(d=^docket docket-0+!>(d)) - ++ charge-update |=(u=^charge-update charge-update+!>(u)) - ++ kiln-uninstall |=(=desk kiln-uninstall+!>(desk)) - ++ kiln-install - |=([here=desk her=ship there=desk] kiln-install+!>([here her there])) - -- -:: -++ handle-http-request - |= [eyre-id=@ta inbound-request:eyre] - ^- (quip card _state) - :: - =; [payload=simple-payload:http caz=(list card) =_state] - :_ state - %+ weld caz - (give-simple-payload:app eyre-id payload) - :: - ::NOTE we don't use +require-authorization-simple here because we want - :: to short-circuit all the below logic for the unauthenticated case. - ?. authenticated - :_ [~ state] - =- [[307 ['location' -]~] ~] - (cat 3 '/~/login?redirect=' url.request) - :: - =* headers header-list.request - =/ req-line (parse-request-line url.request) - :: - |^ ?+ method.request [[405^~ ~] ~ state] - %'GET' [handle-get-request ~ state] - %'POST' handle-upload - == - :: - ++ handle-get-request - ^- simple-payload:http - ?+ [site ext]:req-line (redirect:gen '/apps/grid/') - [[%session ~] [~ %js]] - %- inline-js-response - (rap 3 'window.ship = "' (rsh 3 (scot %p our.bowl)) '";' ~) - :: - [[%docket %upload ~] ?(~ [~ %html])] - [[200 ~] `(upload-page ~)] - :: - [[%apps @ *] *] - %+ payload-from-glob - (snag 1 site.req-line) - req-line(site (slag 2 site.req-line)) - == - :: - ++ upload-page - |= msg=(list @t) - ^- octs - %- as-octt:mimes:html - %- en-xml:html - ^- manx - :: desks: with local globs, eligible for upload - :: - =/ desks=(list desk) - %+ murn ~(tap by charges) - |= [d=desk [docket *]] - ^- (unit desk) - ?:(?=(%glob -.href) `d ~) - :: - ;html - ;head - ;title:"%docket globulator" - ;meta(charset "utf-8"); - ;style:''' - * { font-family: monospace; margin-top: 1em; } - li { margin-top: 0.5em; } - ''' - == - ;body - ;h2:"%docket globulator" - ;+ ?. =(~ msg) - :- [%p ~] - (join `manx`;br; (turn msg |=(m=@t `manx`:/"{(trip m)}"))) - ;ol(start "0") - ;li:""" - make sure the desk you want to upload a glob for has a - desk.docket with %base and %glob- entries. - """ - ;li:"select the desk you want to upload the glob for." - ;li:""" - select a directory containing the glob contents. - usually contains at least an /index.html. - """ - ;li:"glob!" - == - (safari and internet explorer do not support uploading directory - trees properly. please glob from other browsers.) - ;+ ?: =(~ desks) - ;p:"no desks eligible for glob upload" - ;form(method "post", enctype "multipart/form-data") - ;label - ;+ :/"desk: " - ;select(name "desk") - ;* %+ turn desks - |=(d=desk =+((trip d) ;option(value -):"{-}")) - == - == - ;br; - ;label - ;+ :/"data: " - ;input - =type "file" - =name "glob" - =directory "" - =webkitdirectory "" - =mozdirectory ""; - == - ;br; - ;button(type "submit"):"glob!" - == - == - == - :: - ++ handle-upload - ^- [simple-payload:http (list card) _state] - ?. ?=([[%docket %upload ~] ?(~ [~ %html])] [site ext]:req-line) - [[404^~ ~] [~ state]] - :: - =; [desk=@ta =glob err=(list @t)] - =* error-result - :_ [~ state] - [[400 ~] `(upload-page err)] - :: - ?. =(~ err) error-result - :: - =* cha ~(. ch desk) - =/ =charge (~(got by charges) desk) - :: - =? err =(~ glob) - ['no files in glob' err] - =? err !?=(%glob -.href.docket.charge) - ['desk does not use glob' err] - :: - ?. =(~ err) error-result - :- [[200 ~] `(upload-page 'successfully globbed' ~)] - ?> ?=(%glob -.href.docket.charge) - :: - =. charges (new-chad:cha glob+glob) - =. by-base - =- (~(put by by-base) - desk) - base.href.docket.charge - :: - :_ state - :: - =/ ours=? - =/ loc location.glob-reference.href.docket.charge - ?& ?=(%ames -.loc) - =(our.bowl ship.loc) - == - :: - :* add-fact:cha - :: - ?. ours ~ - ^- (list card) - =- [%pass /write/[desk] %arvo %c %info -]~ - %+ foal:space:userlib - /(scot %p our.bowl)/[desk]/(scot %da now.bowl)/desk/docket-0 - %- docket:cg - docket.charge(glob-reference.href [(hash-glob glob) %ames our.bowl]) - == - :: - ?~ parts=(de-request:multipart [header-list body]:request) - ~& headers=header-list.request - [*@ta *glob 'failed to parse submitted data' ~] - :: - %+ roll u.parts - |= [[name=@t part:multipart] desk=@ta =glob err=(list @t)] - ^+ [desk glob err] - ?: =('desk' name) - :: must be a desk with existing charge - :: - ?. ((sane %ta) body) - [desk glob (cat 3 'invalid desk: ' body) err] - ?. (~(has by charges) body) - [desk glob (cat 3 'unknown desk: ' body) err] - [body glob err] - :- desk - :: all submitted files must be complete - :: - ?. =('glob' name) [glob (cat 3 'weird part: ' name) err] - ?~ file [glob 'file without filename' err] - ?~ type [glob (cat 3 'file without type: ' u.file) err] - ?^ code [glob (cat 3 'strange encoding: ' u.code) err] - =/ filp (rush u.file fip) - ?~ filp [glob (cat 3 'strange filename: ' u.file) err] - :: ignore metadata files and other "junk" - ::TODO consider expanding coverage - :: - ?: =('.DS_Store' (rear `path`u.filp)) - [glob err] - :: make sure to exclude the top-level dir from the path - :: - :_ err - %+ ~(put by glob) (slag 1 `path`u.filp) - [u.type (as-octs:mimes:html body)] - :: - ++ fip - =, de-purl:html - %+ cook - |=(pork (weld q (drop p))) - (cook deft (more fas smeg)) - :: - ++ inline-js-response - |= js=cord - ^- simple-payload:http - %. (as-octs:mimes:html js) - %* . js-response:gen - cache %.n - == - :: - ++ payload-from-glob - |= [from=@ta what=request-line] - ^- simple-payload:http - =/ des=(unit desk) - (~(get by by-base) from) - ?~ des not-found:gen - =/ cha=(unit charge) - (~(get by charges) u.des) - ?~ cha not-found:gen - ?. ?=(%glob -.chad.u.cha) not-found:gen - =* glob glob.chad.u.cha - =/ suffix=^path - (weld site.what (drop ext.what)) - ?: =(suffix /desk/js) - %- inline-js-response - (rap 3 'window.desk = "' u.des '";' ~) - =/ requested - ?: (~(has by glob) suffix) suffix - /index/html - =/ data=mime - (~(got by glob) requested) - =/ mime-type=@t (rsh 3 (crip )) - =; headers - [[200 headers] `q.data] - :- content-type+mime-type - ?: =(/index/html requested) ~ - ~[max-1-wk:gen] - -- -:: -++ get-light-charge - |= =charge - ?. ?=(%glob -.chad.charge) charge - charge(glob.chad *glob) -:: +ch: Charge engine -++ ch - |_ =desk - ++ pass |=(=wire ~(. ^pass [%charge desk wire])) - ++ glob-wire - |= glob-reference - ^- wire - :+ %glob - (scot %uv hash) - ?- -.location - %http /http/(scot %t url.location) - %ames /ames/(scot %p ship.location) - == - ++ add-fact - =/ =charge (~(got by charges) desk) - =- (fact:io - /charges ~) - (charge-update:cg %add-charge desk (get-light-charge charge)) - ++ del-fact (fact:io (charge-update:cg %del-charge desk) /charges ~) - ++ install - |= [=ship remote=^desk] - (poke-our:(pass /install) %hood (kiln-install:cg desk ship remote)) - ++ uninstall - (poke-our:(pass /uninstall) %hood (kiln-uninstall:cg desk)) - ++ new-docket - |= d=^docket - %+ ~(put by charges) desk - [d chad:(~(gut by charges) desk *charge)] - ++ new-chad |=(c=chad (~(jab by charges) desk |=(charge +<(chad c)))) - ++ fetch-glob - ^- (list card) - =/ =charge - ~| desk/desk - (~(got by charges) desk) - =/ tid=@t (cat 3 'docket-' (scot %uv (sham (mix eny.bowl desk)))) - ?> ?=(%glob -.href.docket.charge) - =/ ref glob-reference.href.docket.charge - ?: ?& ?=(%ames -.location.ref) - =(our.bowl ship.location.ref) - == - ~> %slog.0^leaf/"docket: awaiting manual glob for {} desk" - ~ - ~> %slog.0^leaf/"docket: fetching {<-.location.ref>} glob for {} desk" - =/ =cage - :- %spider-start - !>([~ `tid byk.bowl(r da+now.bowl) %glob !>(`[ref desk])]) - :~ (leave-our:(pass (glob-wire ref)) %spider) - (watch-our:(pass (glob-wire ref)) %spider /thread-result/[tid]) - (poke-our:(pass (glob-wire ref)) %spider cage) - == - ++ docket-loc `path`/desk/docket-0 - ++ docket-exists - ?: =(0 ud:.^(cass:clay %cw (scry:io desk ~))) %.n - .^(? %cu (scry:io desk docket-loc)) - :: - ++ docket .^(^docket %cx (scry:io desk docket-loc)) - -- --- - diff --git a/pkg/garden/app/hark-store.hoon b/pkg/garden/app/hark-store.hoon deleted file mode 100644 index 917e47af1..000000000 --- a/pkg/garden/app/hark-store.hoon +++ /dev/null @@ -1,551 +0,0 @@ -:: hark-store: notifications and unread counts [landscape] -:: -:: hark-store can store unread counts differently, depending on the -:: resource. -:: - last seen. This way, hark-store simply stores an index into -:: graph-store, which represents the last "seen" item, useful for -:: high-volume applications which are intrinsically time-ordered. i.e. -:: chats, comments -:: - each. Hark-store will store an index for each item that is unread. -:: Usefull for non-linear, low-volume applications, i.e. blogs, -:: collections -:: -/- store=hark-store -/+ verb, dbug, default-agent, re=hark-unreads, agentio -:: -:: -~% %hark-store-top ..part ~ -|% -+$ card card:agent:gall -+$ versioned-state - $% state-2 - state-3 - state-4 - state-5 - state-6 - state-7 - state-8 - state-9 - == -:: -+$ base-state - $: places=(map place:store stats:store) - seen=timebox:store - unseen=timebox:store - =archive:store - half-open=(map bin:store @da) - == -:: -+$ state-2 - [%2 *] -:: -+$ state-3 - [%3 *] -:: -+$ state-4 - [%4 *] -:: -+$ state-5 - [%5 *] -:: -+$ state-6 - [%6 *] -:: -+$ state-7 - [%7 *] -:: -+$ state-8 - [%8 base-state] -:: -+$ state-9 - [%9 base-state] -:: -:: -+$ cached-state - $: by-place=(jug place:store [=lid:store =path]) - ~ - == -+$ inflated-state - [state-9 cached-state] -:: -++ orm ((ordered-map @da timebox:store) gth) --- -:: -=| inflated-state -=* state - -:: -=< -%+ verb | -%- agent:dbug -^- agent:gall -~% %hark-store-agent ..card ~ -|_ =bowl:gall -+* this . - ha ~(. +> bowl) - def ~(. (default-agent this %|) bowl) - io ~(. agentio bowl) - pass pass:io -:: -++ on-init - `this -:: -++ on-save !>(-.state) -++ on-load - |= =old=vase - =/ old - !<(versioned-state old-vase) - =| cards=(list card) - |- ^- (quip card _this) - ?+ -.old - :: pre-dist migration - :_ this - (poke-our:pass %hark-graph-hook hark-graph-migrate+old-vase)^~ - :: - %9 - =. -.state old - =. +.state inflate:ha - :_(this (flop cards)) - :: - %8 - $(-.old %9, archive.old *archive:store) - == -:: -++ on-watch - |= =path - ^- (quip card _this) - ?> (team:title [src our]:bowl) - |^ - ?+ path (on-watch:def path) - [%notes ~] `this - :: - [%updates ~] - :_ this - [%give %fact ~ hark-update+!>(initial-updates)]~ - :: - == - :: - ++ initial-updates - ^- update:store - :- %more - ^- (list update:store) - :~ [%timebox unseen+~ ~(val by unseen)] - [%timebox seen+~ ~(val by seen)] - [%all-stats places] - == - -- -:: -++ on-peek - ~/ %hark-store-peek - |= =path - ^- (unit (unit cage)) - ?+ path (on-peek:def path) - :: - [%x %recent %inbox @ @ ~] - =/ date=@da - (slav %ud i.t.t.t.path) - =/ length=@ud - (slav %ud i.t.t.t.t.path) - :^ ~ ~ %hark-update - !> ^- update:store - :- %more - %+ turn (tab:orm archive `date length) - |= [time=@da =timebox:store] - ^- update:store - [%timebox archive+time ~(val by timebox)] - :: - [%x %all-stats ~] - :^ ~ ~ %hark-update - !> ^- update:store - :- %more - ^- (list update:store) - :~ [%all-stats places] - == - == -:: -++ on-poke - ~/ %hark-store-poke - |= [=mark =vase] - ^- (quip card _this) - |^ - ?> (team:title our.bowl src.bowl) - =^ cards state - ?+ mark (on-poke:def mark vase) - %hark-action (hark-action !<(action:store vase)) - %noun (poke-noun !<(* vase)) - == - [cards this] - :: - ++ poke-noun - |= val=* - ?+ val ~|(%bad-noun-poke !!) - %print ~&(+.state [~ state]) - %clear [~ state(. *inflated-state)] - %sane - ~& +.state - ~& inflate - ?>(=(+.state inflate) `state) - == - :: - ++ poke-us - |= =action:store - ^- card - [%pass / %agent [our dap]:bowl %poke hark-action+!>(action)] - :: - ++ hark-action - |= =action:store - ^- (quip card _state) - abet:(abed:poke-engine:ha action) - -- -:: -++ on-agent on-agent:def -:: -++ on-leave on-leave:def -++ on-arvo - |= [=wire =sign-arvo] - ^- (quip card _this) - ?. ?=([%autoseen ~] wire) - (on-arvo:def wire sign-arvo) - `this -:: -++ on-fail on-fail:def --- -|_ =bowl:gall -+* met ~(. metadata bowl) - io ~(. agentio bowl) - pass pass:io -++ poke-engine - |_ [out=(list update:store) cards=(list card)] - ++ poke-core . - :: - ++ abed - |= in=action:store - ^+ poke-core - ?- -.in - :: - %add-note (add-note +.in) - %del-place (del-place +.in) - %archive (do-archive +.in) - :: - %unread-count (unread-count +.in) - %read-count (read-count +.in) - :: - %read-each (read-each +.in) - %unread-each (unread-each +.in) - :: - %read-note (read-note +.in) - :: - %saw-place (saw-place +.in) - :: - %opened opened - %archive-all archive-all - :: - == - :: - ++ abet - ^- (quip card _state) - :_ state - %+ snoc (flop cards) - [%give %fact ~[/updates] %hark-update !>([%more (flop out)])] - :: - ++ give |=(=update:store poke-core(out [update out])) - ++ emit |=(=card poke-core(cards [card cards])) - :: - :: - :: +| %note - :: - :: notification tracking - ++ put-notifs - |= [time=@da =timebox:store] - poke-core(archive (put:orm archive time timebox)) - :: - ++ put-lid - |= [=lid:store =bin:store =notification:store] - ^+ poke-core - =. by-place (~(put ju by-place) place.bin [lid path.bin]) - ?- -.lid - %seen - poke-core(seen (~(put by seen) bin notification)) - :: - %unseen - poke-core(unseen (~(put by unseen) bin notification)) - :: - %archive - poke-core(archive (~(put re archive) time.lid bin notification)) - == - :: - ++ del-lid - |= [=lid:store =bin:store] - =. by-place (~(del ju by-place) place.bin [lid path.bin]) - ?- -.lid - %seen poke-core(seen (~(del by seen) bin)) - %unseen poke-core(unseen (~(del by unseen) bin)) - %archive poke-core(archive (~(del re archive) time.lid bin)) - == - :: - ++ add-note - |= [=bin:store =body:store] - ^+ poke-core - =. poke-core - (emit (fact:io hark-update+!>([%add-note bin body]) /notes ~)) - =/ existing-notif - (~(gut by unseen) bin *notification:store) - =/ new=notification:store - [now.bowl bin [body body.existing-notif]] - =. poke-core - (put-lid unseen/~ bin new) - (give %added new) - :: - ++ del-place - |= =place:store - =. poke-core (give %del-place place) - =/ notes=(list [=lid:store =path]) - ~(tap in (~(get ju by-place) place)) - |- ^+ poke-core - ?~ notes poke-core - =, i.notes - =. poke-core - (del-lid lid path place) - $(notes t.notes) - :: - ++ do-archive - |= [=lid:store =bin:store] - ^+ poke-core - ~| %already-archived - ?< ?=(%time -.lid) - ~| %non-existent - =/ =notification:store (need (get-lid lid bin)) - =. poke-core (del-lid lid bin) - =. poke-core (put-lid archive+now.bowl bin notification) - (give %archived now.bowl lid notification) - :: - ++ read-note - |= =bin:store - =/ =notification:store - (~(got by unseen) bin) - =. poke-core - (del-lid unseen/~ bin) - =/ =time - (fall timebox:(gut-place place.bin) now.bowl) - =. date.notification time - =. poke-core - (put-lid archive/time bin notification) - (give %note-read time bin) - :: - :: - :: +| %each - :: - :: each unread tracking - :: - ++ unread-each - |= [=place:store =path] - =. poke-core (saw-place place ~) - =. poke-core (give %unread-each place path) - %+ jub-place place - |=(=stats:store stats(each (~(put in each.stats) path))) - :: - ++ read-index-each - |= [=place:store =path] - %- read-bins - %+ skim - ~(tap in ~(key by unseen)) - |= =bin:store - ?. =(place place.bin) %.n - =/ not=notification:store - (~(got by unseen) bin) - (lien body.not |=(=body:store =(binned.body path))) - :: - ++ read-each - |= [=place:store =path] - =. poke-core (read-index-each place path) - =. poke-core (give %read-each place path) - %+ jub-place place - |= =stats:store - %_ stats - timebox `now.bowl - each (~(del in each.stats) path) - == - :: - ++ gut-place - |= =place:store - ?: (~(has by places) place) (~(got by places) place) - =| def=stats:store - def(timebox ~, last now.bowl) - :: - ++ jub-place - |= $: =place:store - f=$-(stats:store stats:store) - == - ^+ poke-core - =/ =stats:store - (gut-place place) - poke-core(places (~(put by places) place (f stats))) - :: - ++ unread-count - |= [=place:store inc=? count=@ud] - =. poke-core - (give %unread-count place inc count) - =. poke-core (saw-place place ~) - =/ f - ?: inc (cury add count) - (curr sub count) - %+ jub-place place - |= =stats:store - stats(count (f count.stats)) - :: - ++ half-archive - |= =place:store - =/ bins=(list [=lid:store =path]) - ~(tap in (~(get ju by-place) place)) - |- - ?~ bins poke-core - =/ =bin:store - [path.i.bins place] - =* lid lid.i.bins - ?: ?=(%archive -.lid) - $(bins t.bins) - =/ seen-place (~(get by seen) bin) - =/ n=(unit notification:store) (get-lid lid bin) - ?~ n $(bins t.bins) - =* note u.n - =/ =time (~(gut by half-open) bin now.bowl) - =? half-open !(~(has by half-open) bin) - (~(put by half-open) bin now.bowl) - =/ existing (get-lid archive/time bin) - =/ new (merge-notification existing note) - =? half-open (lth 30 (lent body.new)) - (~(del by half-open) bin) - =. poke-core - (put-lid archive/time bin new) - =. poke-core (del-lid lid bin) - =. poke-core (give %archived time lid (~(got re archive) time bin)) - $(bins t.bins) - :: - ++ read-count - |= =place:store - =. poke-core (give %read-count place) - =. poke-core (half-archive place) - %+ jub-place place - |= =stats:store - stats(count 0, timebox `now.bowl) - :: - ++ read-bins - |= bins=(list bin:store) - |- - ?~ bins poke-core - =/ core - (read-note i.bins) - $(poke-core core, bins t.bins) - :: - ++ saw-place - |= [=place:store time=(unit time)] - =. poke-core (give %saw-place place time) - %+ jub-place place - |=(=stats:store stats(last (fall time now.bowl))) - :: - ++ archive-seen - =/ seen=(list [=bin:store =notification:store]) ~(tap by seen) - poke-core - :: - ++ opened - =. poke-core (turn-places |=(=stats:store stats(timebox ~))) - =. poke-core (give %opened ~) - %+ roll ~(tap in ~(key by unseen)) - |= [=bin:store out=_poke-core] - (opened-note:out bin) - :: - ++ opened-note - |= =bin:store - ^+ poke-core - =/ old - (~(got by unseen) bin) - =. poke-core - (del-lid unseen/~ bin) - =/ se (~(get by seen) bin) - %^ put-lid seen/~ bin - (merge-notification se old) - - :: - ++ archive-all - |^ - =. poke-core (archive-lid unseen/~ unseen) - (archive-lid seen/~ seen) - ++ archive-lid - |= [=lid:store =timebox:store] - %+ roll ~(tap in ~(key by timebox)) - |= [=bin:store out=_poke-core] - (do-archive:out lid bin) - -- - :: - ++ turn-places - |= f=$-(stats:store stats:store) - =/ places ~(tap in ~(key by places)) - |- ^+ poke-core - ?~ places poke-core - =/ core=_poke-core (jub-place i.places f) - $(poke-core core, places t.places) - -- -:: -++ get-lid - |= [=lid:store =bin:store] - =; =timebox:store - (~(get by timebox) bin) - ?- -.lid - %unseen unseen - %seen seen - %archive (fall (get:orm archive time.lid) *timebox:store) - == -:: -++ merge-notification - |= [existing=(unit notification:store) new=notification:store] - ^- notification:store - ?~ existing new - [(max date.u.existing date.new) bin.new (welp body.new body.u.existing)] -:: -:: +key-orm: +key:by for ordered maps -++ key-orm - |= =archive:store - ^- (list @da) - (turn (tap:orm archive) |=([@da *] +<-)) -:: -:: +gut-orm: +gut:by for ordered maps -:: TODO: move to zuse.hoon -++ gut-orm - |= [=archive:store time=@da] - ^- timebox:store - (fall (get:orm archive time) ~) -:: -:: -++ scry - |* [=mold p=path] - ?> ?=(^ p) - ?> ?=(^ t.p) - .^(mold i.p (scot %p our.bowl) i.t.p (scot %da now.bowl) t.t.p) -:: -++ give - |= [paths=(list path) update=update:store] - ^- (list card) - [%give %fact paths [%hark-update !>(update)]]~ -:: -++ tap-nonempty - |= =archive:store - ^- (list [@da timebox:store]) - %+ skim (tap:orm archive) - |=([@da =timebox:store] !=(~(wyt by timebox) 0)) -:: -++ inflate - =. by-place ~ - =. by-place (index-timebox seen+~ seen by-place) - =. by-place (index-timebox unseen+~ unseen by-place) - =. by-place - %+ roll (tap:orm archive) - |= [[=time =timebox:store] out=_by-place] - (index-timebox archive/time timebox out) - +.state -:: -++ index-timebox - |= [=lid:store =timebox:store out=_by-place] - ^+ by-place - %+ roll ~(tap by timebox) - |= [[=bin:store =notification:store] out=_out] - (~(put ju out) place.bin [lid path.bin]) --- diff --git a/pkg/garden/app/hark-system-hook.hoon b/pkg/garden/app/hark-system-hook.hoon deleted file mode 100644 index e7cd7132d..000000000 --- a/pkg/garden/app/hark-system-hook.hoon +++ /dev/null @@ -1,186 +0,0 @@ -/- hark=hark-store, hood, docket -/+ verb, dbug, default-agent, agentio -|% -+$ card card:agent:gall -+$ state-0 [%0 lagging=_|] -:: -++ lag-interval ~m10 --- -%+ verb | -%- agent:dbug -^- agent:gall -=| state-0 -=* state - -=< -|_ =bowl:gall -+* this . - def ~(. (default-agent this %|) bowl) - io ~(. agentio bowl) - pass pass:io - cc ~(. +> bowl) -++ on-init - ^- (quip card _this) - :_ this - [onboard watch:kiln check:lag ~]:cc -:: -++ on-load - |= =vase - =+ !<(old=state-0 vase) - `this(state old) -:: -++ on-save !>(state) -++ on-poke on-poke:def -++ on-peek on-peek:def -++ on-watch on-watch:def -++ on-agent - |= [=wire =sign:agent:gall] - |^ - ?+ wire (on-agent:def wire sign) - [%kiln %vats ~] take-kiln-vats - == - ++ take-kiln-vats - ?- -.sign - ?(%poke-ack %watch-ack) (on-agent:def wire sign) - %kick :_(this (drop safe-watch:kiln:cc)) - :: - %fact - ?. ?=(%kiln-vats-diff-0 p.cage.sign) `this - =+ !<(=diff:hood q.cage.sign) - ?+ -.diff `this - :: - %commit - ?. |(=(desk.diff %base) ~(has-docket de:cc desk.diff)) `this - =/ =action:hark ~(commit de:cc desk.diff) - :_ this - ~[(poke:ha:cc action)] - :: - %block - =/ =action:hark (~(blocked de:cc desk.diff) blockers.diff) - :_ this - ~[(poke:ha:cc action)] - == - == - -- -:: -++ on-arvo - |= [=wire sign=sign-arvo] - ^- (quip card _this) - ?. ?=([%check-lag ~] wire) (on-arvo:def wire sign) - ?> ?=([%behn %wake *] sign) - =+ .^(lag=? %$ (scry:io %$ /zen/lag)) - ?: =(lagging lag) :_(this ~[check:lag:cc]) - :_ this(lagging lag) - :_ ~[check:lag:cc] - ?:(lagging start:lag:cc stop:lag:cc) -:: -++ on-fail on-fail:def -++ on-leave on-leave:def --- -|_ =bowl:gall -+* io ~(. agentio bowl) - pass pass:io -:: -++ onboard - ^- card - %- poke:ha - :+ %add-note [/ [q.byk.bowl /onboard]] - :: We special case this in the grid UI, but should include something - :: for third parties - [~[text+'Welcome to urbit'] ~ now.bowl / /] -:: -++ lag - |% - ++ check (~(wait pass /check-lag) (add now.bowl lag-interval)) - ++ place [q.byk.bowl /lag] - ++ body `body:hark`[~[text/'Runtime lagging'] ~ now.bowl / /] - ++ start (poke:ha %add-note [/ place] body) - ++ stop (poke:ha %del-place place) - -- -++ ha - |% - ++ pass ~(. ^pass /hark) - ++ poke - |=(=action:hark (poke-our:pass %hark-store hark-action+!>(action))) - -- -++ kiln - |% - ++ path /kiln/vats - ++ pass ~(. ^pass path) - ++ watch (watch-our:pass %hood path) - ++ watching (~(has by wex.bowl) [path our.bowl %hood]) - ++ safe-watch `(unit card)`?:(watching ~ `watch) - -- -:: -++ de - |_ =desk - ++ scry-path (scry:io desk /desk/docket-0) - ++ has-docket .^(? %cu scry-path) - ++ docket .^(docket:^docket %cx scry-path) - ++ hash .^(@uv %cz (scry:io desk ~)) - ++ place `place:hark`[q.byk.bowl /desk/[desk]] - ++ vat - .^(vat:hood %gx (scry:io %hood /kiln/vat/[desk]/noun)) - ++ body - |= [=path title=cord content=(unit cord)] - ^- body:hark - [~[text+title] ?~(content ~ ~[text/u.content]) now.bowl ~ path] - :: - :: - ++ title-prefix - |= =cord - %+ rap 3 - ?: =(desk %base) - ['System software' cord ~] - ?: has-docket - ['App: "' title:docket '"' cord ~] - ['Desk: ' desk cord ~] - :: - ++ get-version - ?: has-docket - (rap 3 'version: ' (ver version:docket) ~) - (rap 3 'hash: ' (scot %uv hash) ~) - :: - ++ commit - ^- action:hark - ?:(=(1 ud.cass:vat) created updated) - :: - ++ created - ^- action:hark - :+ %add-note [/created place] - (body /desk/[desk] (title-prefix ' has been installed') ~) - :: - ++ updated - ^- action:hark - :+ %add-note [/update place] - (body /desk/[desk] (title-prefix (rap 3 ' has been updated to ' get-version ~)) ~) - :: - ++ blocked - |= blockers=(set ^desk) - ^- action:hark - :+ %add-note [/blocked place] - %^ body /blocked (title-prefix ' is blocked from upgrading') - `(rap 3 'Blocking desks: ' (join ', ' ~(tap in blockers))) - :: - ++ ver - |= =version:^docket - =, version - `@t`(rap 3 (num major) '.' (num minor) '.' (num patch) ~) - :: - ++ num - |= a=@ud - `@t`(rsh 4 (scot %ui a)) - -- -++ note - |% - ++ merge - |= [=desk hash=@uv] - ^- (list body:hark) - :_ ~ - :* ~[text+'Desk Updated'] - ~[text+(crip "Desk {(trip desk)} has been updated to hash {(scow %uv hash)}")] - now.bowl - /update/[desk] - / - == - -- --- diff --git a/pkg/garden/app/settings-store.hoon b/pkg/garden/app/settings-store.hoon deleted file mode 100644 index 33f9acf6b..000000000 --- a/pkg/garden/app/settings-store.hoon +++ /dev/null @@ -1,202 +0,0 @@ -/- *settings -/+ verb, dbug, default-agent, agentio -|% -+$ card card:agent:gall -+$ versioned-state - $% state-0 - state-1 - state-2 - == -+$ state-0 [%0 settings=settings-0] -+$ state-1 [%1 settings=settings-1] -+$ state-2 [%2 =settings] --- -=| state-2 -=* state - -:: -%- agent:dbug -%+ verb | -^- agent:gall -=< - |_ bol=bowl:gall - +* this . - do ~(. +> bol) - def ~(. (default-agent this %|) bol) - io ~(. agentio bol) - :: - ++ on-init on-init:def - :: - ++ on-save !>(state) - :: - ++ on-load - |= =old=vase - ^- (quip card _this) - =/ old !<(versioned-state old-vase) - |- - ?- -.old - %0 $(old [%1 +.old]) - %1 $(old [%2 (~(put by *^settings) %landscape settings.old)]) - %2 `this(state old) - == - :: - ++ on-poke - |= [mar=mark vas=vase] - ^- (quip card _this) - ?> (team:title our.bol src.bol) - ?. ?=(%settings-event mar) - (on-poke:def mar vas) - =/ evt=event !<(event vas) - =^ cards state - ?- -.evt - %put-bucket (put-bucket:do [desk key bucket]:evt) - %del-bucket (del-bucket:do [desk key]:evt) - %put-entry (put-entry:do [desk buc key val]:evt) - %del-entry (del-entry:do [desk buc key]:evt) - == - [cards this] - :: - ++ on-watch - |= pax=path - ^- (quip card _this) - ?> (team:title our.bol src.bol) - ?+ pax (on-watch:def pax) - [%all ~] - [~ this] - :: - [%desk @ ~] - =* desk i.t.pax - [~ this] - :: - [%bucket @ @ ~] - =* desk i.t.pax - =* bucket-key i.t.t.pax - ?> (~(has bi settings) desk bucket-key) - [~ this] - :: - [%entry @ @ @ ~] - =* desk i.t.pax - =* bucket-key i.t.t.pax - =* entry-key i.t.t.t.pax - =/ bucket (~(got bi settings) desk bucket-key) - ?> (~(has by bucket) entry-key) - [~ this] - == - :: - ++ on-peek - |= pax=path - ^- (unit (unit cage)) - ?+ pax (on-peek:def pax) - [%x %all ~] - ``settings-data+!>(`data`all+settings) - :: - [%x %desk @ ~] - =* desk i.t.t.pax - =/ desk-settings (~(gut by settings) desk ~) - ``settings-data+!>(desk+desk-settings) - :: - [%x %bucket @ @ ~] - =* desk i.t.t.pax - =* buc i.t.t.t.pax - =/ bucket=(unit bucket) (~(get bi settings) desk buc) - ?~ bucket [~ ~] - ``settings-data+!>(`data`bucket+u.bucket) - :: - [%x %entry @ @ @ ~] - =* desk i.t.t.pax - =* buc i.t.t.t.pax - =* key i.t.t.t.t.pax - =/ =bucket (~(gut bi settings) desk buc *bucket) - =/ entry=(unit val) (~(get by bucket) key) - ?~ entry [~ ~] - ``settings-data+!>(`data`entry+u.entry) - :: - [%x %has-bucket @ @ ~] - =/ desk i.t.t.pax - =/ buc i.t.t.t.pax - =/ has-bucket=? (~(has bi settings) desk buc) - ``noun+!>(`?`has-bucket) - :: - [%x %has-entry @ @ @ ~] - =* desk i.t.t.pax - =* buc i.t.t.t.pax - =* key i.t.t.t.t.pax - =/ =bucket (~(gut bi settings) desk buc *bucket) - =/ has-entry=? (~(has by bucket) key) - ``noun+!>(`?`has-entry) - == - :: - ++ on-agent on-agent:def - ++ on-leave on-leave:def - ++ on-arvo on-arvo:def - ++ on-fail on-fail:def - -- -:: -|_ bol=bowl:gall -:: -:: +put-bucket: put a bucket in the top level settings map, overwriting if it -:: already exists -:: -++ put-bucket - |= [=desk =key =bucket] - ^- (quip card _state) - =/ pas=(list path) - :~ /all - /desk/[desk] - /bucket/[desk]/[key] - == - :- [(give-event pas %put-bucket desk key bucket)]~ - state(settings (~(put bi settings) desk key bucket)) -:: -:: +del-bucket: delete a bucket from the top level settings map -:: -++ del-bucket - |= [=desk =key] - ^- (quip card _state) - =/ pas=(list path) - :~ /all - /desk/[desk] - /bucket/[key] - == - :- [(give-event pas %del-bucket desk key)]~ - state(settings (~(del bi settings) desk key)) -:: -:: +put-entry: put an entry in a bucket, overwriting if it already exists -:: if bucket does not yet exist, create it -:: -++ put-entry - |= [=desk buc=key =key =val] - ^- (quip card _state) - =/ pas=(list path) - :~ /all - /desk/[desk] - /bucket/[desk]/[buc] - /entry/[desk]/[buc]/[key] - == - =/ =bucket (~(put by (~(gut bi settings) desk buc *bucket)) key val) - :- [(give-event pas %put-entry desk buc key val)]~ - state(settings (~(put bi settings) desk buc bucket)) -:: -:: +del-entry: delete an entry from a bucket, fail quietly if bucket does not -:: exist -:: -++ del-entry - |= [=desk buc=key =key] - ^- (quip card _state) - =/ pas=(list path) - :~ /all - /desk/[desk] - /bucket/[desk]/[buc] - /entry/[desk]/[buc]/[key] - == - =/ bucket=(unit bucket) (~(get bi settings) desk buc) - ?~ bucket - [~ state] - =. u.bucket (~(del by u.bucket) key) - :- [(give-event pas %del-entry desk buc key)]~ - state(settings (~(put bi settings) desk buc u.bucket)) -:: -++ give-event - |= [pas=(list path) evt=event] - ^- card - [%give %fact pas %settings-event !>(evt)] --- diff --git a/pkg/garden/app/treaty.hoon b/pkg/garden/app/treaty.hoon deleted file mode 100644 index c4fc9565a..000000000 --- a/pkg/garden/app/treaty.hoon +++ /dev/null @@ -1,343 +0,0 @@ -/- docket, *treaty -/+ default-agent, agentio, verb, dbug -|% -++ default-ally ~dister-dozzod-dozzod -:: -+$ card card:agent:gall -+$ state-0 - $: treaties=(map [=ship =desk] treaty) - sovereign=(map desk treaty) - entente=alliance - =allies:ally - direct=(set [=ship =desk]) - == --- -^- agent:gall -%+ verb | -%- agent:dbug -=| state-0 -=* state - -=< -|_ =bowl:gall -+* this . - def ~(. (default-agent this %|) bowl) - io ~(. agentio bowl) - pass pass:io - cc ~(. +> bowl) -++ on-init - ?: =(our.bowl default-ally) `this - (on-poke %ally-update-0 !>([%add default-ally])) -++ on-save !>(state) -++ on-load - |= =vase - =+ !<(old=state-0 vase) - `this(state old) -:: -++ on-poke - |= [=mark =vase] - ^- (quip card _this) - ?> (team:title [our src]:bowl) - |^ - ?+ mark (on-poke:def mark vase) - %ally-update-0 (ally-update !<(update:ally vase)) - %alliance-update-0 (alliance-update !<(update:alliance vase)) - :: - %noun - =+ ;;([%add =desk] q.vase) - =/ =docket:docket ~(get-docket so:cc desk) - =/ =treaty (treaty-from-docket:cc desk docket) - =. sovereign (~(put by sovereign) desk treaty) - `this - == - :: - ++ ally-update - |= =update:ally - ^- (quip card _this) - =- [[(ally-update:ca:cc update) -.-] +.-] - ?< ?=(?(%ini %new) -.update) - =* ship ship.update - ?< =(ship our.bowl) - =* al ~(. al:cc ship.update) - ?- -.update - %add [~[watch:al] this(allies (~(put by allies) ship *alliance))] - %del [~[leave:al] this(allies (~(del by allies) ship))] - == - :: - ++ alliance-update - |= =update:alliance - ^- (quip card _this) - =- [[(alliance-update:ca:cc update) -.-] +.-] - ?+ -.update !! - :: - %add - =, update - =. entente (~(put in entente) [ship desk]) - ?. =(our.bowl ship) `this - =* so ~(. so:cc desk) - =/ =docket:docket get-docket:so - =/ =treaty (treaty-from-docket:cc desk docket) - =. sovereign (~(put by sovereign) desk treaty) - :_ this - [publish warp give]:so - :: - %del - =, update - =. entente (~(del in entente) [ship desk]) - ?. =(our.bowl ship) `this - =. sovereign (~(del by sovereign) desk) - :_(this ~(kick so:cc desk)^~) - == - -- -:: -++ on-watch - |= =path - ^- (quip card _this) - ?+ path (on-watch:def path) - :: syncing - [%treaty @ @ ~] - =/ =ship (slav %p i.t.path) - =* desk i.t.t.path - ?: =(our.bowl ship) - :_(this (fact-init:io (treaty:cg:cc (~(got by sovereign) desk)))^~) - ?^ treat=(~(get by treaties) [ship desk]) - :_ this - (fact-init:io (treaty:cg:cc u.treat))^~ - ?> =(our.bowl src.bowl) - =. direct (~(put in direct) [ship desk]) - :_(this (drop ~(safe-watch tr:cc [ship desk]))) - :: - [%treaties ~] - :_ this - ::NOTE this assumes that all treaties in sovereign are also - :: present in the treaties map - (fact-init:io (treaty-update:cg:cc %ini treaties))^~ - :: - [%alliance ~] - :_ this - (fact-init:io (alliance-update:cg:cc %ini entente))^~ - :: local - :: - [%allies ~] - :_ this - (fact-init:io (ally-update:cg:cc %ini allies))^~ - == -:: -:: -++ on-peek - |= =path - ^- (unit (unit cage)) - ?+ path (on-peek:def path) - [%x %alliance ~] ``(alliance-update:cg:ca %ini entente) - [%x %default-ally ~] ``ship+!>(default-ally) - [%x %allies ~] ``(ally-update:cg:ca %ini allies) - :: - [%x %treaties @ ~] - =/ =ship (slav %p i.t.t.path) - =/ alliance (~(get ju allies) ship) - =/ allied - %- ~(gas by *(map [^ship desk] treaty)) - %+ skim ~(tap by treaties) - |= [ref=[^ship desk] =treaty] - (~(has in alliance) ref) - ``(treaty-update:cg:ca:cc %ini allied) - :: - [%x %treaty @ @ ~] - =/ =ship (slav %p i.t.t.path) - =* desk i.t.t.t.path - ``(treaty:cg:cc (~(got by treaties) [ship desk])) - == -:: -++ on-agent - |= [=wire =sign:agent:gall] - ^- (quip card _this) - =* ship src.bowl - |^ - ?+ wire (on-agent:def wire sign) - [%ally @ ~] ?>(=(src.bowl (slav %p i.t.wire)) take-ally) - :: - [%treaty @ @ ~] - =* desk i.t.t.wire - ?> =(ship (slav %p i.t.wire)) - (take-treaty desk) - == - :: - ++ take-ally - ?+ -.sign (on-agent:def wire sign) - :: - %kick - ?. (~(has by allies) ship) `this - :_(this ~[~(watch al:cc ship)]) - :: - %watch-ack - ?~ p.sign (on-agent:def wire sign) - =. allies (~(del by allies) ship) - %- (slog leaf+"Broke alliance with {}" u.p.sign) - `this - :: - %fact - ?. =(%alliance-update-0 p.cage.sign) `this - =+ !<(=update:alliance q.cage.sign) - =^ cards allies - ?- -.update - :: - %ini - :_ (~(put by allies) src.bowl init.update) - %+ murn ~(tap in init.update) - |= [s=^ship =desk] - ~(safe-watch tr:cc s desk) - :: - %add - :_ (~(put ju allies) src.bowl [ship desk]:update) - (drop ~(safe-watch tr:cc [ship desk]:update)) - - %del - :_ (~(del ju allies) src.bowl [ship desk]:update) - ~[~(leave tr:cc [ship desk]:update)] - == - :_ this - :_ cards - (fact:io (ally-update:cg:cc %new ship (~(get ju allies) src.bowl)) /allies ~) - == - :: - ++ take-treaty - |= =desk - =* tr ~(. tr:cc ship desk) - ?+ -.sign (on-agent:def wire sign) - :: - :: rewatch only if we aren't source - :: this would cause a potential kick-rewatch loop otherwise - :: - %kick - :_ this - ?: =(our.bowl ship) ~ - ~[watch:tr] - :: - %watch-ack - ?~ p.sign `this - =: treaties (~(del by treaties) ship desk) - direct (~(del in direct) ship desk) - == - %- (slog leaf+"treaty: withdrew from {}/{}" u.p.sign) - [gone:tr this] - :: - %fact - ?. =(%treaty-0 p.cage.sign) `this - =+ !<(=treaty q.cage.sign) - ?> =([ship desk] [ship desk]:treaty) - =. treaties (~(put by treaties) [ship desk]:treaty treaty) - [give:tr this] - == - -- -:: -++ on-arvo - |= [=wire sign=sign-arvo] - |^ - ?+ wire (on-arvo:def wire sign) - [%init ~] !! :: setup sponsor ally - :: - [%sovereign @ ~] - =* desk i.t.wire - (take-sovereign desk) - == - :: - ++ take-sovereign - |= =desk - =/ so ~(. so:cc desk) - ?> ?=([?(%clay %behn) %writ *] sign) - ?. (~(has by sovereign) desk) `this - =* riot p.sign - ?~ riot :: docket file is gone - =. sovereign (~(del by sovereign) desk) - [~[kick:so] this] - =* cage r.u.riot - ?. =(%docket-0 p.cage) `this - =+ !<(=docket:docket q.cage) - =/ =treaty (treaty-from-docket:cc desk docket) - =. sovereign (~(put by sovereign) desk treaty) - =* so ~(. so:cc desk) - :_(this [warp give]:so) - -- - -:: -++ on-fail on-fail:def -++ on-leave on-leave:def --- -|_ =bowl:gall -++ io ~(. agentio bowl) -++ pass pass:io -:: -++ treaty-from-docket - |= [=desk =docket:docket] - =+ .^(=cass:clay %cw (scry:io desk /desk/docket)) - =+ .^(hash=@uv %cz (scry:io desk ~)) - [our.bowl desk da+da.cass hash docket] -:: +al: Side effects for allies -++ al - |_ =ship - ++ pass ~(. ^pass /ally/(scot %p ship)) - ++ watch (watch:pass [ship dap.bowl] /alliance) - ++ leave (leave:pass ship dap.bowl) - -- -:: +cg: Cage construction -++ cg - |% - ++ ally-update |=(=update:ally ally-update-0+!>(update)) - ++ alliance-update |=(=update:alliance alliance-update-0+!>(update)) - ++ treaty |=(t=^treaty treaty-0+!>(t)) - ++ treaty-update |=(u=update:^treaty treaty-update-0+!>(u)) - -- -:: +ca: Card construction -++ ca - |% - ++ watch-docket (~(watch-our pass /docket) %docket /dockets) - ++ ally-update |=(=update:ally (fact:io (ally-update:cg update) /allies ~)) - ++ alliance-update - |=(=update:alliance (fact:io (alliance-update:cg update) /alliance ~)) - -- -:: +tr: engine for treaties -++ tr - |_ [=ship =desk] - ++ pass ~(. ^pass path) - ++ path /treaty/(scot %p ship)/[desk] - ++ dock [ship dap.bowl] - ++ watch (watch:pass dock path) - ++ watching (~(has by wex.bowl) [path dock]) - ++ safe-watch `(unit card)`?:(|(watching =(our.bowl ship)) ~ `watch) - ++ leave (leave:pass dock) - ++ gone - ^- (list card) - :~ (fact:io (treaty-update:cg %del ship desk) /treaties ~) - (kick-only:io our.bowl path ~) - == - ++ give - ^- (list card) - =/ t=treaty (~(got by treaties) ship desk) - :~ (fact:io (treaty-update:cg %add t) /treaties ~) - (fact:io (treaty:cg t) path ~) - == - -- -:: +so: engine for sovereign treaties -++ so - |_ =desk - ++ wire /sovereign/[desk] - ++ pass ~(. ^pass wire) - ++ path /treaty/(scot %p our.bowl)/[desk] - ++ get-docket .^(docket:docket %cx (scry:io desk /desk/docket-0)) - ++ warp - (warp-our:pass desk `[%next %x da+now.bowl /desk/docket-0]) - ++ kick - (kick:io path ~) - ++ give - :: notably gives on the /treaties path, like +give:tr does. - :: this should not give duplicate facts, because sovereign treaties - :: are handled in this core, not as "normal"/foreign treaties. - :: - ^- (list card) - =/ t=treaty (~(got by sovereign) desk) - :~ (fact:io (treaty-update:cg %add t) /treaties ~) - (fact:io (treaty:cg t) path ~) - == - ++ publish - (poke-our:pass %hood kiln-permission+!>([desk / &])) - -- --- diff --git a/pkg/garden/desk.bill b/pkg/garden/desk.bill deleted file mode 100644 index 9e260edb5..000000000 --- a/pkg/garden/desk.bill +++ /dev/null @@ -1,6 +0,0 @@ -:~ %docket - %treaty - %hark-store - %hark-system-hook - %settings-store -== diff --git a/pkg/garden/desk.docket-0 b/pkg/garden/desk.docket-0 deleted file mode 100644 index ea1004d82..000000000 --- a/pkg/garden/desk.docket-0 +++ /dev/null @@ -1,10 +0,0 @@ -:~ title+'System' - info+'An app launcher for Urbit.' - color+0xee.5432 - glob-http+['https://bootstrap.urbit.org/glob-0v2.p3f6i.19q8d.lsgcb.mckg7.dtu8f.glob' 0v2.p3f6i.19q8d.lsgcb.mckg7.dtu8f] - ::glob-ames+~zod^0v0 - base+'grid' - version+[1 1 3] - website+'https://tlon.io' - license+'MIT' -== diff --git a/pkg/garden/desk.ship b/pkg/garden/desk.ship deleted file mode 100644 index 2bc09561a..000000000 --- a/pkg/garden/desk.ship +++ /dev/null @@ -1 +0,0 @@ -~mister-dister-dozzod-dozzod diff --git a/pkg/garden/gen/docket/install.hoon b/pkg/garden/gen/docket/install.hoon deleted file mode 100644 index b44bc768e..000000000 --- a/pkg/garden/gen/docket/install.hoon +++ /dev/null @@ -1,7 +0,0 @@ -:: :docket|install: Install a desk through docket -:: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [[=ship =desk ~] ~] - == -[%docket-install ship desk] diff --git a/pkg/garden/gen/docket/uninstall.hoon b/pkg/garden/gen/docket/uninstall.hoon deleted file mode 100644 index 74144e8ec..000000000 --- a/pkg/garden/gen/docket/uninstall.hoon +++ /dev/null @@ -1,7 +0,0 @@ -:: :docket|uninstall: Uninstall a desk through docket -:: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [[=desk ~] ~] - == -[%docket-uninstall desk] diff --git a/pkg/garden/gen/treaty/add-desk.hoon b/pkg/garden/gen/treaty/add-desk.hoon deleted file mode 100644 index b2ece97fa..000000000 --- a/pkg/garden/gen/treaty/add-desk.hoon +++ /dev/null @@ -1,7 +0,0 @@ -:: :treaty|add-desk: Republish remote desk -:: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [[=ship =desk ~] ~] - == -[%alliance-update-0 %add ship desk] diff --git a/pkg/garden/gen/treaty/ally.hoon b/pkg/garden/gen/treaty/ally.hoon deleted file mode 100644 index e037d3f47..000000000 --- a/pkg/garden/gen/treaty/ally.hoon +++ /dev/null @@ -1,7 +0,0 @@ -:: :treaty|ally: Sync treaty data from ship -:: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [[=ship ~] ~] - == -[%ally-update-0 %add ship] diff --git a/pkg/garden/gen/treaty/publish.hoon b/pkg/garden/gen/treaty/publish.hoon deleted file mode 100644 index a77df652c..000000000 --- a/pkg/garden/gen/treaty/publish.hoon +++ /dev/null @@ -1,7 +0,0 @@ -:: :treaty|publish: Publish local desk -:: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [[=desk ~] ~] - == -[%alliance-update-0 %add p.bec desk] diff --git a/pkg/garden/gen/treaty/remove-desk.hoon b/pkg/garden/gen/treaty/remove-desk.hoon deleted file mode 100644 index 07303fbf9..000000000 --- a/pkg/garden/gen/treaty/remove-desk.hoon +++ /dev/null @@ -1,7 +0,0 @@ -:: :treaty|remove-desk: Stop republishing remote desk -:: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [[=ship =desk ~] ~] - == -[%alliance-update-0 %del ship desk] diff --git a/pkg/garden/gen/treaty/unally.hoon b/pkg/garden/gen/treaty/unally.hoon deleted file mode 100644 index 2f414d189..000000000 --- a/pkg/garden/gen/treaty/unally.hoon +++ /dev/null @@ -1,7 +0,0 @@ -:: :treaty|unally: Stop syncing treaty data from ship -:: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [[=ship ~] ~] - == -[%ally-update-0 %del ship] diff --git a/pkg/garden/gen/treaty/unpublish.hoon b/pkg/garden/gen/treaty/unpublish.hoon deleted file mode 100644 index a5f136ff0..000000000 --- a/pkg/garden/gen/treaty/unpublish.hoon +++ /dev/null @@ -1,7 +0,0 @@ -:: :treaty|unpublish: Stop publishing local desk -:: -:- %say -|= $: [now=@da eny=@uvJ bec=beak] - [[=desk ~] ~] - == -[%alliance-update-0 %del p.bec desk] diff --git a/pkg/garden/lib/agentio.hoon b/pkg/garden/lib/agentio.hoon deleted file mode 120000 index 959a49843..000000000 --- a/pkg/garden/lib/agentio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/agentio.hoon \ No newline at end of file diff --git a/pkg/garden/lib/azimuth.hoon b/pkg/garden/lib/azimuth.hoon deleted file mode 120000 index 2bacb02b7..000000000 --- a/pkg/garden/lib/azimuth.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/azimuth.hoon \ No newline at end of file diff --git a/pkg/garden/lib/azimuthio.hoon b/pkg/garden/lib/azimuthio.hoon deleted file mode 120000 index 0b5df7063..000000000 --- a/pkg/garden/lib/azimuthio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/azimuthio.hoon \ No newline at end of file diff --git a/pkg/garden/lib/bip/b158.hoon b/pkg/garden/lib/bip/b158.hoon deleted file mode 120000 index cba919a85..000000000 --- a/pkg/garden/lib/bip/b158.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b158.hoon \ No newline at end of file diff --git a/pkg/garden/lib/bip/b173.hoon b/pkg/garden/lib/bip/b173.hoon deleted file mode 120000 index 2999150e2..000000000 --- a/pkg/garden/lib/bip/b173.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b173.hoon \ No newline at end of file diff --git a/pkg/garden/lib/bip/b174.hoon b/pkg/garden/lib/bip/b174.hoon deleted file mode 120000 index bc6cae53b..000000000 --- a/pkg/garden/lib/bip/b174.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b174.hoon \ No newline at end of file diff --git a/pkg/garden/lib/bip32.hoon b/pkg/garden/lib/bip32.hoon deleted file mode 120000 index 1cbb7f892..000000000 --- a/pkg/garden/lib/bip32.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bip32.hoon \ No newline at end of file diff --git a/pkg/garden/lib/bip39.hoon b/pkg/garden/lib/bip39.hoon deleted file mode 120000 index 36c4b7e83..000000000 --- a/pkg/garden/lib/bip39.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bip39.hoon \ No newline at end of file diff --git a/pkg/garden/lib/bip39/english.hoon b/pkg/garden/lib/bip39/english.hoon deleted file mode 120000 index f1ea0fe31..000000000 --- a/pkg/garden/lib/bip39/english.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip39/english.hoon \ No newline at end of file diff --git a/pkg/garden/lib/bitcoin-utils.hoon b/pkg/garden/lib/bitcoin-utils.hoon deleted file mode 120000 index 7cc792906..000000000 --- a/pkg/garden/lib/bitcoin-utils.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bitcoin-utils.hoon \ No newline at end of file diff --git a/pkg/garden/lib/cram.hoon b/pkg/garden/lib/cram.hoon deleted file mode 120000 index 4005e57ee..000000000 --- a/pkg/garden/lib/cram.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/cram.hoon \ No newline at end of file diff --git a/pkg/garden/lib/dbug.hoon b/pkg/garden/lib/dbug.hoon deleted file mode 120000 index 04f6855f7..000000000 --- a/pkg/garden/lib/dbug.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/dbug.hoon \ No newline at end of file diff --git a/pkg/garden/lib/default-agent.hoon b/pkg/garden/lib/default-agent.hoon deleted file mode 120000 index 698f6802d..000000000 --- a/pkg/garden/lib/default-agent.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/default-agent.hoon \ No newline at end of file diff --git a/pkg/garden/lib/der.hoon b/pkg/garden/lib/der.hoon deleted file mode 120000 index 8446f8e92..000000000 --- a/pkg/garden/lib/der.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/der.hoon \ No newline at end of file diff --git a/pkg/garden/lib/docket.hoon b/pkg/garden/lib/docket.hoon deleted file mode 120000 index e0f69ee1e..000000000 --- a/pkg/garden/lib/docket.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/docket.hoon \ No newline at end of file diff --git a/pkg/garden/lib/ethereum.hoon b/pkg/garden/lib/ethereum.hoon deleted file mode 120000 index c0a2772eb..000000000 --- a/pkg/garden/lib/ethereum.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ethereum.hoon \ No newline at end of file diff --git a/pkg/garden/lib/ethio.hoon b/pkg/garden/lib/ethio.hoon deleted file mode 120000 index 9c5b58148..000000000 --- a/pkg/garden/lib/ethio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ethio.hoon \ No newline at end of file diff --git a/pkg/garden/lib/hark-store.hoon b/pkg/garden/lib/hark-store.hoon deleted file mode 120000 index 9e9e81ee2..000000000 --- a/pkg/garden/lib/hark-store.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/hark-store.hoon \ No newline at end of file diff --git a/pkg/garden/lib/hark/unreads.hoon b/pkg/garden/lib/hark/unreads.hoon deleted file mode 100644 index 2eee299f2..000000000 --- a/pkg/garden/lib/hark/unreads.hoon +++ /dev/null @@ -1,35 +0,0 @@ -/+ store=hark-store -|_ =archive:store -++ orm ((on @da timebox:store) gth) -++ del - |= [=time =bin:store] - ?~ box=(get:orm archive time) archive - (put:orm archive time (~(del by u.box) bin)) -++ put - |= [=time =bin:store =notification:store] - =/ box=timebox:store (fall (get:orm archive time) ~) - =. box (~(put by box) bin notification) - (put:orm archive time box) -:: -++ get - |= [=time =bin:store] - ^- (unit notification:store) - ?~ box=(get:orm archive time) ~ - (~(get by u.box) bin) -:: -++ got - |= [=time =bin:store] - (need (get time bin)) -:: -++ has - |= [=time =bin:store] - ?~((get time bin) %.n %.y) -:: -++ jab - |= [=time =bin:store f=$-(notification:store notification:store)] - (put time bin (f (got time bin))) -:: -++ job - |= [=time =bin:store f=$-((unit notification:store) notification:store)] - (put time bin (f (get time bin))) --- diff --git a/pkg/garden/lib/jose.hoon b/pkg/garden/lib/jose.hoon deleted file mode 120000 index 6bff549ab..000000000 --- a/pkg/garden/lib/jose.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/jose.hoon \ No newline at end of file diff --git a/pkg/garden/lib/keygen.hoon b/pkg/garden/lib/keygen.hoon deleted file mode 120000 index 8557d0c52..000000000 --- a/pkg/garden/lib/keygen.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/keygen.hoon \ No newline at end of file diff --git a/pkg/garden/lib/kiln.hoon b/pkg/garden/lib/kiln.hoon deleted file mode 100644 index feb77d33f..000000000 --- a/pkg/garden/lib/kiln.hoon +++ /dev/null @@ -1,18 +0,0 @@ -/- *hood -/* base-bill %bill /desk/bill -=, clay -=, space:userlib -=, format -=* dude dude:gall -|% -:: $diff: subscription update -:: -+$ diff - $% [%block =desk =arak =weft blockers=(set desk)] - [%reset =desk =arak] - [%merge =desk =arak] - [%merge-sunk =desk =arak =tang] - [%merge-fail =desk =arak =tang] - == --- - diff --git a/pkg/garden/lib/language-server/build.hoon b/pkg/garden/lib/language-server/build.hoon deleted file mode 120000 index 749928056..000000000 --- a/pkg/garden/lib/language-server/build.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/build.hoon \ No newline at end of file diff --git a/pkg/garden/lib/language-server/complete.hoon b/pkg/garden/lib/language-server/complete.hoon deleted file mode 120000 index 219d824c7..000000000 --- a/pkg/garden/lib/language-server/complete.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/complete.hoon \ No newline at end of file diff --git a/pkg/garden/lib/language-server/easy-print.hoon b/pkg/garden/lib/language-server/easy-print.hoon deleted file mode 120000 index 2160e2f5a..000000000 --- a/pkg/garden/lib/language-server/easy-print.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/easy-print.hoon \ No newline at end of file diff --git a/pkg/garden/lib/language-server/json.hoon b/pkg/garden/lib/language-server/json.hoon deleted file mode 120000 index 96fe5b516..000000000 --- a/pkg/garden/lib/language-server/json.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/json.hoon \ No newline at end of file diff --git a/pkg/garden/lib/language-server/parser.hoon b/pkg/garden/lib/language-server/parser.hoon deleted file mode 120000 index 327e1a5de..000000000 --- a/pkg/garden/lib/language-server/parser.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/parser.hoon \ No newline at end of file diff --git a/pkg/garden/lib/language-server/rune-snippet.hoon b/pkg/garden/lib/language-server/rune-snippet.hoon deleted file mode 120000 index 387505b59..000000000 --- a/pkg/garden/lib/language-server/rune-snippet.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/rune-snippet.hoon \ No newline at end of file diff --git a/pkg/garden/lib/mip.hoon b/pkg/garden/lib/mip.hoon deleted file mode 120000 index 47b46482a..000000000 --- a/pkg/garden/lib/mip.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/mip.hoon \ No newline at end of file diff --git a/pkg/garden/lib/multipart.hoon b/pkg/garden/lib/multipart.hoon deleted file mode 100644 index 4f047ae57..000000000 --- a/pkg/garden/lib/multipart.hoon +++ /dev/null @@ -1,49 +0,0 @@ -:: multipart: multipart/form-data request decoding -:: -|% -+$ part - $: file=(unit @t) :: filename - type=(unit mite) :: content-type - code=(unit @t) :: content-transfer-encoding - body=@t :: content - == -:: -++ de-request - |= [=header-list:http body=(unit octs)] - ^- (unit (list [@t part])) - ?~ body ~ - ?~ cot=(get-header:http 'content-type' header-list) ~ - ?. =('multipart/form-data; boundary=' (end 3^30 u.cot)) ~ - %+ rush q.u.body - (dep (rsh 3^30 u.cot)) -:: -++ dep - |= del=@t - |^ - %+ knee *(list [@t part]) |. ~+ - ;~ pose (cold ~ (full tip)) :: end, or - ;~ pfix dim nip :: section start - ;~ plug ;~ plug :: containing: - (ifix [cof doq] nom) :: name - (punt (ifix [cup doq] nod)) :: filename - (punt ;~(pfix nip cut nab)) :: content-type - (punt ;~(pfix nip cue nom)) :: con-tra-encoding - (ifix [sip nip] nag) :: content - == ^$ == == == - :: - ++ cof (jest 'Content-Disposition: form-data; name="') - ++ cue (jest 'Content-Transfer-Encoding: ') - ++ cup (jest '; filename="') - ++ cut (jest 'Content-Type: ') - ++ dim (jest (cat 3 '--' del)) - ++ nip (jest '\0d\0a') - ++ nab (more fas (cook (cury rap 3) (plus qit))) - ++ nag (dine ;~(less ;~(plug nip dim) next)) - ++ nod (dine ;~(less doq next)) - ++ nom (dine alp) - ++ sip ;~(plug nip nip) - ++ tip ;~(plug dim hep hep nip) - :: - ++ dine |*(r=rule (cook (cury rep 3) (star r))) - -- --- diff --git a/pkg/garden/lib/ph/io.hoon b/pkg/garden/lib/ph/io.hoon deleted file mode 120000 index 9b660df8f..000000000 --- a/pkg/garden/lib/ph/io.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/ph/io.hoon \ No newline at end of file diff --git a/pkg/garden/lib/ph/util.hoon b/pkg/garden/lib/ph/util.hoon deleted file mode 120000 index ec423efc0..000000000 --- a/pkg/garden/lib/ph/util.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/ph/util.hoon \ No newline at end of file diff --git a/pkg/garden/lib/pill.hoon b/pkg/garden/lib/pill.hoon deleted file mode 120000 index 41e912cf1..000000000 --- a/pkg/garden/lib/pill.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/pill.hoon \ No newline at end of file diff --git a/pkg/garden/lib/pkcs.hoon b/pkg/garden/lib/pkcs.hoon deleted file mode 120000 index d7a2ab46f..000000000 --- a/pkg/garden/lib/pkcs.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/pkcs.hoon \ No newline at end of file diff --git a/pkg/garden/lib/primitive-rsa.hoon b/pkg/garden/lib/primitive-rsa.hoon deleted file mode 120000 index f9dde2d95..000000000 --- a/pkg/garden/lib/primitive-rsa.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/primitive-rsa.hoon \ No newline at end of file diff --git a/pkg/garden/lib/ring.hoon b/pkg/garden/lib/ring.hoon deleted file mode 120000 index e5e819947..000000000 --- a/pkg/garden/lib/ring.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ring.hoon \ No newline at end of file diff --git a/pkg/garden/lib/server.hoon b/pkg/garden/lib/server.hoon deleted file mode 120000 index 6176cfc00..000000000 --- a/pkg/garden/lib/server.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/server.hoon \ No newline at end of file diff --git a/pkg/garden/lib/settings.hoon b/pkg/garden/lib/settings.hoon deleted file mode 100644 index b2f7cff7a..000000000 --- a/pkg/garden/lib/settings.hoon +++ /dev/null @@ -1,147 +0,0 @@ -/- *settings -|% -++ enjs - =, enjs:format - |% - ++ data - |= dat=^data - ^- json - %+ frond -.dat - ?- -.dat - %all (settings +.dat) - %bucket (bucket +.dat) - %entry (value +.dat) - %desk (desk-settings +.dat) - == - :: - ++ settings - |= s=^settings - ^- json - [%o (~(run by s) desk-settings)] - :: - ++ desk-settings - |= s=(map key ^bucket) - [%o (~(run by s) bucket)] - :: - ++ event - |= evt=^event - ^- json - %+ frond -.evt - ?- -.evt - %put-bucket (put-bucket +.evt) - %del-bucket (del-bucket +.evt) - %put-entry (put-entry +.evt) - %del-entry (del-entry +.evt) - == - :: - ++ put-bucket - |= [d=desk k=key b=^bucket] - ^- json - %- pairs - :~ bucket-key+s+k - bucket+(bucket b) - desk+s+d - == - :: - ++ del-bucket - |= [d=desk k=key] - ^- json - %- pairs - :~ bucket-key+s+k - desk+s+d - == - :: - ++ put-entry - |= [d=desk b=key k=key v=val] - ^- json - %- pairs - :~ bucket-key+s+b - entry-key+s+k - value+(value v) - desk+s+d - == - :: - ++ del-entry - |= [d=desk buc=key =key] - ^- json - %- pairs - :~ bucket-key+s+buc - entry-key+s+key - desk+s+d - == - :: - ++ value - |= =val - ^- json - ?- -.val - %s val - %b val - %n (numb p.val) - %a [%a (turn p.val value)] - == - :: - ++ bucket - |= b=^bucket - ^- json - [%o (~(run by b) value)] - -- -:: -++ dejs - =, dejs:format - |% - ++ event - |= jon=json - ^- ^event - %. jon - %- of - :~ put-bucket+put-bucket - del-bucket+del-bucket - put-entry+put-entry - del-entry+del-entry - == - :: - ++ put-bucket - %- ot - :~ desk+so - bucket-key+so - bucket+bucket - == - :: - ++ del-bucket - %- ot - :~ desk+so - bucket-key+so - == - :: - ++ put-entry - %- ot - :~ desk+so - bucket-key+so - entry-key+so - value+value - == - :: - ++ del-entry - %- ot - :~ desk+so - bucket-key+so - entry-key+so - == - :: - ++ value - |= jon=json - ^- val - ?+ -.jon !! - %s jon - %b jon - %n [%n (rash p.jon dem)] - %a [%a (turn p.jon value)] - == - :: - ++ bucket - |= jon=json - ^- ^bucket - ?> ?=([%o *] jon) - (~(run by p.jon) value) - -- --- diff --git a/pkg/garden/lib/shoe.hoon b/pkg/garden/lib/shoe.hoon deleted file mode 120000 index a4aab1dd7..000000000 --- a/pkg/garden/lib/shoe.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/shoe.hoon \ No newline at end of file diff --git a/pkg/garden/lib/skeleton.hoon b/pkg/garden/lib/skeleton.hoon deleted file mode 120000 index 77626a327..000000000 --- a/pkg/garden/lib/skeleton.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/skeleton.hoon \ No newline at end of file diff --git a/pkg/garden/lib/sole.hoon b/pkg/garden/lib/sole.hoon deleted file mode 120000 index f776890f2..000000000 --- a/pkg/garden/lib/sole.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/sole.hoon \ No newline at end of file diff --git a/pkg/garden/lib/strand.hoon b/pkg/garden/lib/strand.hoon deleted file mode 120000 index d95df7948..000000000 --- a/pkg/garden/lib/strand.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/strand.hoon \ No newline at end of file diff --git a/pkg/garden/lib/strandio.hoon b/pkg/garden/lib/strandio.hoon deleted file mode 120000 index 0caebfac1..000000000 --- a/pkg/garden/lib/strandio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/strandio.hoon \ No newline at end of file diff --git a/pkg/garden/lib/test.hoon b/pkg/garden/lib/test.hoon deleted file mode 120000 index cc50ce7cf..000000000 --- a/pkg/garden/lib/test.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/test.hoon \ No newline at end of file diff --git a/pkg/garden/lib/treaty.hoon b/pkg/garden/lib/treaty.hoon deleted file mode 100644 index bea8fc750..000000000 --- a/pkg/garden/lib/treaty.hoon +++ /dev/null @@ -1,92 +0,0 @@ -/- *treaty -/+ dock=docket -|% -++ enjs - =, enjs:format - |% - ++ merge - |= [a=json b=json] - ^- json - ?> &(?=(%o -.a) ?=(%o -.b)) - [%o (~(uni by p.a) p.b)] - :: - ++ treaty - |= t=^treaty - %+ merge (docket:enjs:dock docket.t) - %- pairs - :~ ship+s+(scot %p ship.t) - desk+s+desk.t - cass+(case case.t) - hash+s+(scot %uv hash.t) - == - :: - ++ case - |= c=^case - %+ frond -.c - ?- -.c - %da s+(scot %da p.c) - %tas s+(scot %tas p.c) - %ud (numb p.c) - == - ++ foreign-desk - |= [s=^ship =desk] - ^- cord - (crip "{(scow %p s)}/{(trip desk)}") - :: - ++ alliance - |= a=^alliance - ^- json - :- %a - %+ turn ~(tap in a) - |= [=^ship =desk] - ^- json - s+(foreign-desk ship desk) - :: - ++ treaty-update - |= u=update:^treaty - ^- json - %+ frond -.u - ?- -.u - %add (treaty treaty.u) - %del s+(foreign-desk +.u) - :: - %ini - %- pairs - %+ turn ~(tap by init.u) - |= [[s=^ship =desk] t=^treaty] - [(foreign-desk s desk) (treaty t)] - == - :: - ++ ally-update - |= u=update:ally - ^- json - %+ frond -.u - ?- -.u - ?(%add %del) s+(scot %p ship.u) - :: - %ini - %- pairs - %+ turn ~(tap by init.u) - |= [s=^ship a=^alliance] - [(scot %p s) (alliance a)] - :: - %new - %- pairs - :~ ship+s+(scot %p ship.u) - alliance+(alliance alliance.u) - == - == - -- -++ dejs - =, dejs:format - |% - ++ ship (su ;~(pfix sig fed:ag)) - ++ ally-update - ^- $-(json update:ally) - %- of - :~ add+ship - del+ship - == - -- --- - diff --git a/pkg/garden/lib/verb.hoon b/pkg/garden/lib/verb.hoon deleted file mode 120000 index 939072347..000000000 --- a/pkg/garden/lib/verb.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/verb.hoon \ No newline at end of file diff --git a/pkg/garden/mar/alliance-update-0.hoon b/pkg/garden/mar/alliance-update-0.hoon deleted file mode 100644 index 82f5e75a2..000000000 --- a/pkg/garden/mar/alliance-update-0.hoon +++ /dev/null @@ -1,12 +0,0 @@ -/- *treaty -|_ =update:alliance -++ grad %noun -++ grow - |% - ++ noun update - -- -++ grab - |% - ++ noun update:alliance - -- --- diff --git a/pkg/garden/mar/ally-update-0.hoon b/pkg/garden/mar/ally-update-0.hoon deleted file mode 100644 index 79ff4589a..000000000 --- a/pkg/garden/mar/ally-update-0.hoon +++ /dev/null @@ -1,15 +0,0 @@ -/- *treaty -/+ treat=treaty -|_ =update:ally -++ grad %noun -++ grow - |% - ++ noun update - ++ json (ally-update:enjs:treat update) - -- -++ grab - |% - ++ noun update:ally - ++ json ally-update:dejs:treat - -- --- diff --git a/pkg/garden/mar/belt.hoon b/pkg/garden/mar/belt.hoon deleted file mode 120000 index 0c8999932..000000000 --- a/pkg/garden/mar/belt.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/belt.hoon \ No newline at end of file diff --git a/pkg/garden/mar/bill.hoon b/pkg/garden/mar/bill.hoon deleted file mode 120000 index 801d99730..000000000 --- a/pkg/garden/mar/bill.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/bill.hoon \ No newline at end of file diff --git a/pkg/garden/mar/blit.hoon b/pkg/garden/mar/blit.hoon deleted file mode 120000 index 3ea8dc943..000000000 --- a/pkg/garden/mar/blit.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/blit.hoon \ No newline at end of file diff --git a/pkg/garden/mar/charge-update.hoon b/pkg/garden/mar/charge-update.hoon deleted file mode 100644 index a7ecaf4bd..000000000 --- a/pkg/garden/mar/charge-update.hoon +++ /dev/null @@ -1,13 +0,0 @@ -/+ dock=docket -|_ update=charge-update:dock -++ grad %noun -++ grow - |% - ++ noun update - ++ json (charge-update:enjs:dock update) - -- -++ grab - |% - ++ noun charge-update:dock - -- --- diff --git a/pkg/garden/mar/docket-0.hoon b/pkg/garden/mar/docket-0.hoon deleted file mode 120000 index 2bb549dd9..000000000 --- a/pkg/garden/mar/docket-0.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/mar/docket-0.hoon \ No newline at end of file diff --git a/pkg/garden/mar/docket/install.hoon b/pkg/garden/mar/docket/install.hoon deleted file mode 100644 index baacc4692..000000000 --- a/pkg/garden/mar/docket/install.hoon +++ /dev/null @@ -1,14 +0,0 @@ -|_ [=ship =desk] -++ grad %noun -++ grow - |% - ++ noun [ship desk] - ++ json `^json`s+(crip "{(scow %p ship)}/{(trip desk)}") - -- -++ grab - |% - ++ noun _[ship desk] - ++ json - (su:dejs:format ;~((glue fas) ;~(pfix sig fed:ag) sym)) - -- --- diff --git a/pkg/garden/mar/docket/uninstall.hoon b/pkg/garden/mar/docket/uninstall.hoon deleted file mode 100644 index 335cd9580..000000000 --- a/pkg/garden/mar/docket/uninstall.hoon +++ /dev/null @@ -1,13 +0,0 @@ -|_ =desk -++ grad %noun -++ grow - |% - ++ noun desk - ++ json s+desk - -- -++ grab - |% - ++ noun ^desk - ++ json so:dejs:format - -- --- diff --git a/pkg/garden/mar/glob-0.hoon b/pkg/garden/mar/glob-0.hoon deleted file mode 100644 index 153439684..000000000 --- a/pkg/garden/mar/glob-0.hoon +++ /dev/null @@ -1,11 +0,0 @@ -|_ gob=(map path mime) -++ grow - |% - ++ noun gob - -- -++ grab - |% - ++ noun (map path mime) - -- -++ grad %noun --- diff --git a/pkg/garden/mar/hark/action.hoon b/pkg/garden/mar/hark/action.hoon deleted file mode 100644 index 608f7f318..000000000 --- a/pkg/garden/mar/hark/action.hoon +++ /dev/null @@ -1,13 +0,0 @@ -/+ *hark-store -|_ act=action -++ grad %noun -++ grow - |% - ++ noun act - -- -++ grab - |% - ++ noun action - ++ json action:dejs - -- --- diff --git a/pkg/garden/mar/hark/update.hoon b/pkg/garden/mar/hark/update.hoon deleted file mode 100644 index 10fca1360..000000000 --- a/pkg/garden/mar/hark/update.hoon +++ /dev/null @@ -1,13 +0,0 @@ -/+ *hark-store -|_ upd=update -++ grad %noun -++ grow - |% - ++ noun upd - ++ json (update:enjs upd) - -- -++ grab - |% - ++ noun update - -- --- diff --git a/pkg/garden/mar/hoon.hoon b/pkg/garden/mar/hoon.hoon deleted file mode 120000 index 95f8f67f9..000000000 --- a/pkg/garden/mar/hoon.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/hoon.hoon \ No newline at end of file diff --git a/pkg/garden/mar/htm.hoon b/pkg/garden/mar/htm.hoon deleted file mode 120000 index d29e24bac..000000000 --- a/pkg/garden/mar/htm.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/htm.hoon \ No newline at end of file diff --git a/pkg/garden/mar/html.hoon b/pkg/garden/mar/html.hoon deleted file mode 120000 index 14a5f8f7b..000000000 --- a/pkg/garden/mar/html.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/html.hoon \ No newline at end of file diff --git a/pkg/garden/mar/httr.hoon b/pkg/garden/mar/httr.hoon deleted file mode 120000 index 572665778..000000000 --- a/pkg/garden/mar/httr.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/httr.hoon \ No newline at end of file diff --git a/pkg/garden/mar/hymn.hoon b/pkg/garden/mar/hymn.hoon deleted file mode 120000 index 905156749..000000000 --- a/pkg/garden/mar/hymn.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/hymn.hoon \ No newline at end of file diff --git a/pkg/garden/mar/js.hoon b/pkg/garden/mar/js.hoon deleted file mode 120000 index 00189f4c6..000000000 --- a/pkg/garden/mar/js.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/js.hoon \ No newline at end of file diff --git a/pkg/garden/mar/json.hoon b/pkg/garden/mar/json.hoon deleted file mode 120000 index e77f85d05..000000000 --- a/pkg/garden/mar/json.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/json.hoon \ No newline at end of file diff --git a/pkg/garden/mar/json/rpc/response.hoon b/pkg/garden/mar/json/rpc/response.hoon deleted file mode 120000 index 52c97c864..000000000 --- a/pkg/garden/mar/json/rpc/response.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/json/rpc/response.hoon \ No newline at end of file diff --git a/pkg/garden/mar/kelvin.hoon b/pkg/garden/mar/kelvin.hoon deleted file mode 120000 index 195ebe0dc..000000000 --- a/pkg/garden/mar/kelvin.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/kelvin.hoon \ No newline at end of file diff --git a/pkg/garden/mar/language-server/rpc/notification.hoon b/pkg/garden/mar/language-server/rpc/notification.hoon deleted file mode 120000 index b95e54c35..000000000 --- a/pkg/garden/mar/language-server/rpc/notification.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/notification.hoon \ No newline at end of file diff --git a/pkg/garden/mar/language-server/rpc/request.hoon b/pkg/garden/mar/language-server/rpc/request.hoon deleted file mode 120000 index 26203cf5b..000000000 --- a/pkg/garden/mar/language-server/rpc/request.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/request.hoon \ No newline at end of file diff --git a/pkg/garden/mar/language-server/rpc/response.hoon b/pkg/garden/mar/language-server/rpc/response.hoon deleted file mode 120000 index 9dddb2cef..000000000 --- a/pkg/garden/mar/language-server/rpc/response.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/response.hoon \ No newline at end of file diff --git a/pkg/garden/mar/mime.hoon b/pkg/garden/mar/mime.hoon deleted file mode 120000 index 0d85898f3..000000000 --- a/pkg/garden/mar/mime.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/mime.hoon \ No newline at end of file diff --git a/pkg/garden/mar/noun.hoon b/pkg/garden/mar/noun.hoon deleted file mode 120000 index 97cc30876..000000000 --- a/pkg/garden/mar/noun.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/noun.hoon \ No newline at end of file diff --git a/pkg/garden/mar/path.hoon b/pkg/garden/mar/path.hoon deleted file mode 120000 index c07b00064..000000000 --- a/pkg/garden/mar/path.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/path.hoon \ No newline at end of file diff --git a/pkg/garden/mar/png.hoon b/pkg/garden/mar/png.hoon deleted file mode 120000 index c2d8cf9fa..000000000 --- a/pkg/garden/mar/png.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/png.hoon \ No newline at end of file diff --git a/pkg/garden/mar/purl.hoon b/pkg/garden/mar/purl.hoon deleted file mode 120000 index d0d2cc0de..000000000 --- a/pkg/garden/mar/purl.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/purl.hoon \ No newline at end of file diff --git a/pkg/garden/mar/settings/data.hoon b/pkg/garden/mar/settings/data.hoon deleted file mode 100644 index a58b017ef..000000000 --- a/pkg/garden/mar/settings/data.hoon +++ /dev/null @@ -1,13 +0,0 @@ -/+ *settings -|_ dat=data -++ grad %noun -++ grow - |% - ++ noun dat - ++ json (data:enjs dat) - -- -++ grab - |% - ++ noun data - -- --- diff --git a/pkg/garden/mar/settings/event.hoon b/pkg/garden/mar/settings/event.hoon deleted file mode 100644 index 7f03b3139..000000000 --- a/pkg/garden/mar/settings/event.hoon +++ /dev/null @@ -1,16 +0,0 @@ -/+ *settings -|_ evt=event -++ grad %noun -++ grow - |% - ++ noun evt - ++ json - %+ frond:enjs:format %settings-event - (event:enjs evt) - -- -++ grab - |% - ++ noun event - ++ json event:dejs - -- --- diff --git a/pkg/garden/mar/ship.hoon b/pkg/garden/mar/ship.hoon deleted file mode 120000 index 72de2c03c..000000000 --- a/pkg/garden/mar/ship.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/ship.hoon \ No newline at end of file diff --git a/pkg/garden/mar/sole/action.hoon b/pkg/garden/mar/sole/action.hoon deleted file mode 120000 index b349bd771..000000000 --- a/pkg/garden/mar/sole/action.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/mar/sole/action.hoon \ No newline at end of file diff --git a/pkg/garden/mar/sole/effect.hoon b/pkg/garden/mar/sole/effect.hoon deleted file mode 120000 index bc11205c0..000000000 --- a/pkg/garden/mar/sole/effect.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/mar/sole/effect.hoon \ No newline at end of file diff --git a/pkg/garden/mar/svg.hoon b/pkg/garden/mar/svg.hoon deleted file mode 120000 index 2b406c2ac..000000000 --- a/pkg/garden/mar/svg.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/svg.hoon \ No newline at end of file diff --git a/pkg/garden/mar/tang.hoon b/pkg/garden/mar/tang.hoon deleted file mode 120000 index 9206e52b2..000000000 --- a/pkg/garden/mar/tang.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/tang.hoon \ No newline at end of file diff --git a/pkg/garden/mar/tape.hoon b/pkg/garden/mar/tape.hoon deleted file mode 120000 index be51fcb2d..000000000 --- a/pkg/garden/mar/tape.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/tape.hoon \ No newline at end of file diff --git a/pkg/garden/mar/treaties.hoon b/pkg/garden/mar/treaties.hoon deleted file mode 100644 index fc28f201b..000000000 --- a/pkg/garden/mar/treaties.hoon +++ /dev/null @@ -1,20 +0,0 @@ -/+ treaty -|_ treaties=(list treaty:treaty) -++ grow - |% - ++ noun treaties - ++ json - ^- ^json - %- pairs:enjs:format - %+ turn treaties - |= t=treaty:treaty - :- (crip "{(scow %p ship.t)}/{(trip desk.t)}") - (treaty:enjs:treaty t) - - -- -++ grab - |% - ++ noun (list treaty:treaty) - -- -++ grad %noun --- diff --git a/pkg/garden/mar/treaty-0.hoon b/pkg/garden/mar/treaty-0.hoon deleted file mode 100644 index 4a6eef3b8..000000000 --- a/pkg/garden/mar/treaty-0.hoon +++ /dev/null @@ -1,14 +0,0 @@ -/- *treaty -/+ treat=treaty -|_ tret=treaty -++ grow - |% - ++ noun tret - ++ json (treaty:enjs:treat tret) - -- -++ grab - |% - ++ noun treaty - -- -++ grad %noun --- diff --git a/pkg/garden/mar/treaty-update-0.hoon b/pkg/garden/mar/treaty-update-0.hoon deleted file mode 100644 index 9da97ac4c..000000000 --- a/pkg/garden/mar/treaty-update-0.hoon +++ /dev/null @@ -1,14 +0,0 @@ -/- *treaty -/+ treat=treaty -|_ =update:treaty -++ grad %noun -++ grow - |% - ++ noun update - ++ json (treaty-update:enjs:treat update) - -- -++ grab - |% - ++ noun update:treaty - -- --- diff --git a/pkg/garden/mar/txt-diff.hoon b/pkg/garden/mar/txt-diff.hoon deleted file mode 120000 index 1f7c04285..000000000 --- a/pkg/garden/mar/txt-diff.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/txt-diff.hoon \ No newline at end of file diff --git a/pkg/garden/mar/txt.hoon b/pkg/garden/mar/txt.hoon deleted file mode 120000 index 432541575..000000000 --- a/pkg/garden/mar/txt.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/txt.hoon \ No newline at end of file diff --git a/pkg/garden/mar/udon.hoon b/pkg/garden/mar/udon.hoon deleted file mode 120000 index 215e0ada9..000000000 --- a/pkg/garden/mar/udon.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/udon.hoon \ No newline at end of file diff --git a/pkg/garden/mar/umd.hoon b/pkg/garden/mar/umd.hoon deleted file mode 120000 index 9b827a24d..000000000 --- a/pkg/garden/mar/umd.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/umd.hoon \ No newline at end of file diff --git a/pkg/garden/mar/urb.hoon b/pkg/garden/mar/urb.hoon deleted file mode 120000 index 2d8112d1d..000000000 --- a/pkg/garden/mar/urb.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/urb.hoon \ No newline at end of file diff --git a/pkg/garden/mar/urbit.hoon b/pkg/garden/mar/urbit.hoon deleted file mode 120000 index 70a62a723..000000000 --- a/pkg/garden/mar/urbit.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/urbit.hoon \ No newline at end of file diff --git a/pkg/garden/mar/woff2.hoon b/pkg/garden/mar/woff2.hoon deleted file mode 120000 index beaf4875c..000000000 --- a/pkg/garden/mar/woff2.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/woff2.hoon \ No newline at end of file diff --git a/pkg/garden/mar/xml.hoon b/pkg/garden/mar/xml.hoon deleted file mode 120000 index e6323e215..000000000 --- a/pkg/garden/mar/xml.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/xml.hoon \ No newline at end of file diff --git a/pkg/garden/sur/aquarium.hoon b/pkg/garden/sur/aquarium.hoon deleted file mode 120000 index 1195b2c62..000000000 --- a/pkg/garden/sur/aquarium.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/aquarium.hoon \ No newline at end of file diff --git a/pkg/garden/sur/asn1.hoon b/pkg/garden/sur/asn1.hoon deleted file mode 120000 index 7888cada0..000000000 --- a/pkg/garden/sur/asn1.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/asn1.hoon \ No newline at end of file diff --git a/pkg/garden/sur/bitcoin.hoon b/pkg/garden/sur/bitcoin.hoon deleted file mode 120000 index d72c2c830..000000000 --- a/pkg/garden/sur/bitcoin.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/bitcoin.hoon \ No newline at end of file diff --git a/pkg/garden/sur/docket.hoon b/pkg/garden/sur/docket.hoon deleted file mode 120000 index e13676adb..000000000 --- a/pkg/garden/sur/docket.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/docket.hoon \ No newline at end of file diff --git a/pkg/garden/sur/hark-store.hoon b/pkg/garden/sur/hark-store.hoon deleted file mode 120000 index 5d606e793..000000000 --- a/pkg/garden/sur/hark-store.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/hark-store.hoon \ No newline at end of file diff --git a/pkg/garden/sur/hood.hoon b/pkg/garden/sur/hood.hoon deleted file mode 120000 index b212f501e..000000000 --- a/pkg/garden/sur/hood.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/hood.hoon \ No newline at end of file diff --git a/pkg/garden/sur/json/rpc.hoon b/pkg/garden/sur/json/rpc.hoon deleted file mode 120000 index e499542f6..000000000 --- a/pkg/garden/sur/json/rpc.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/sur/json/rpc.hoon \ No newline at end of file diff --git a/pkg/garden/sur/keygen.hoon b/pkg/garden/sur/keygen.hoon deleted file mode 120000 index 99bcd5fc8..000000000 --- a/pkg/garden/sur/keygen.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/keygen.hoon \ No newline at end of file diff --git a/pkg/garden/sur/language-server.hoon b/pkg/garden/sur/language-server.hoon deleted file mode 120000 index a1c726780..000000000 --- a/pkg/garden/sur/language-server.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/language-server.hoon \ No newline at end of file diff --git a/pkg/garden/sur/ring.hoon b/pkg/garden/sur/ring.hoon deleted file mode 120000 index 633c96332..000000000 --- a/pkg/garden/sur/ring.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/ring.hoon \ No newline at end of file diff --git a/pkg/garden/sur/settings.hoon b/pkg/garden/sur/settings.hoon deleted file mode 120000 index c2c70beef..000000000 --- a/pkg/garden/sur/settings.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/settings.hoon \ No newline at end of file diff --git a/pkg/garden/sur/sole.hoon b/pkg/garden/sur/sole.hoon deleted file mode 120000 index 8cac11891..000000000 --- a/pkg/garden/sur/sole.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/sole.hoon \ No newline at end of file diff --git a/pkg/garden/sur/spider.hoon b/pkg/garden/sur/spider.hoon deleted file mode 120000 index 12ae2c187..000000000 --- a/pkg/garden/sur/spider.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/spider.hoon \ No newline at end of file diff --git a/pkg/garden/sur/treaty.hoon b/pkg/garden/sur/treaty.hoon deleted file mode 100644 index 7284f9d9e..000000000 --- a/pkg/garden/sur/treaty.hoon +++ /dev/null @@ -1,59 +0,0 @@ -/- docket -|% -++ treaty - =< treaty - |% - :: $treaty: An extrajudicial docket - :: - :: Includes the docket itself, plus provenance generated by clay - :: - +$ treaty - [=ship =desk =case hash=@uv =docket:docket] - :: - :: $update:treaty: Diff of treaty state - :: - +$ update - $% [%ini init=(map [=ship =desk] =treaty)] - [%add =treaty] - [%del =ship =desk] - == - -- -++ alliance - =< alliance - |% - :: $alliance: Dockets to be advertised for install - :: - +$ alliance (set [=ship =desk]) - +$ diff - $% [%add =ship =desk] - [%del =ship =desk] - == - :: - +$ update - $% [%ini init=(set [=ship =desk])] - diff - == - -- - -:: +ally: Discovery structures -:: -++ ally - |% - :: - :: $allies: Provider ships and their alliances - :: - +$ allies (map ship alliance) - :: $diff: Request to change ally state - +$ diff - $% [%add =ship] - [%del =ship] - == - :: $update: Changed ally state - :: - +$ update - $% diff - [%ini init=(map ship alliance)] - [%new =ship =alliance] - == - -- --- diff --git a/pkg/garden/sur/verb.hoon b/pkg/garden/sur/verb.hoon deleted file mode 120000 index 1a6100d9c..000000000 --- a/pkg/garden/sur/verb.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/verb.hoon \ No newline at end of file diff --git a/pkg/garden/sys.kelvin b/pkg/garden/sys.kelvin deleted file mode 100644 index e77a3de08..000000000 --- a/pkg/garden/sys.kelvin +++ /dev/null @@ -1 +0,0 @@ -[%zuse 418] diff --git a/pkg/garden/ted/glob.hoon b/pkg/garden/ted/glob.hoon deleted file mode 100644 index 93d489d3b..000000000 --- a/pkg/garden/ted/glob.hoon +++ /dev/null @@ -1,37 +0,0 @@ -/- spider, docket -/+ strandio -=, strand=strand:spider -^- thread:spider -|= arg=vase -=/ m (strand ,vase) -^- form:m -=+ !<([~ ref=glob-reference:docket base=term] arg) -|^ -?- -.location.ref - %http (fetch-http [url.location hash]:ref) - %ames (fetch-ames [ship.location hash]:ref base) -== -:: -++ fetch-http - |= [url=cord hash=@uvH] - ^- form:m - ;< =glob:docket bind:m - %+ (retry:strandio ,glob:docket) `5 - =/ n (strand ,(unit glob:docket)) - ;< =cord bind:n (fetch-cord:strandio (trip url)) - %- pure:n - %- mole - |. - ;;(=glob:docket (cue cord)) - (pure:m !>(glob)) -:: -:: download from ship's docket state -++ fetch-ames - |= [[=ship hash=@uvH] base=term] - ^- form:m - ;< =bowl:spider bind:m get-bowl:strandio - ;< =cage bind:m - (watch-one:strandio /glob/(scot %da now.bowl) [ship %docket] /glob/[base]/(scot %uv hash)) - ?> ?=(%glob-0 p.cage) - (pure:m q.cage) --- diff --git a/pkg/garden/ted/make-glob.hoon b/pkg/garden/ted/make-glob.hoon deleted file mode 100644 index b884bd2bf..000000000 --- a/pkg/garden/ted/make-glob.hoon +++ /dev/null @@ -1,26 +0,0 @@ -/- spider, docket -/+ strandio -=, strand=strand:spider -^- thread:spider -|= arg=vase -=/ m (strand ,vase) -^- form:m -=+ !<([~ [=desk dir=path]] arg) -;< =bowl:spider bind:m get-bowl:strandio -=/ home=path /(scot %p our.bowl)/[desk]/(scot %da now.bowl) -=+ .^(paths=(list path) %ct (weld home dir)) -=/ =glob:docket - %- ~(gas by *glob:docket) - %+ turn paths - |= pax=path - ^- [path mime] - :- (slag (lent dir) pax) - =/ mar=mark (rear pax) - =+ .^(vas=vase %cr (weld home pax)) - =+ .^(=tube:clay %cc (weld home /[mar]/mime)) - !<(mime (tube vas)) -=/ =path /(cat 3 'glob-' (scot %uv (sham glob)))/glob - ~& globbed+`(set ^path)`~(key by glob) -;< ~ bind:m (poke-our:strandio %hood drum-put+!>([path (jam glob)])) -(pure:m *vase) - diff --git a/pkg/garden/tests/app/hark-store.hoon b/pkg/garden/tests/app/hark-store.hoon deleted file mode 100644 index c42f5334c..000000000 --- a/pkg/garden/tests/app/hark-store.hoon +++ /dev/null @@ -1,103 +0,0 @@ -/- hark=hark-store -/+ *test, re=hark-unreads -/= agent /app/hark-store -|% -++ place - ^- place:hark - [%landscape /graph/~zod/test] -:: -++ bin - ^- bin:hark - [/ place] - -:: -++ body - |= run=@ - :* ~[text/'Title'] - ~[text/(crip "Contents {(scow %ud run)}")] - `time`(add (mul ~s1 run) *time) - / - /test - == -:: -++ add-note - |= run=@ - ^- action:hark - [%add-note bin (body run)] -:: -++ read-count - ^- action:hark - [%read-count place] -:: -+$ state - $: %9 - places=(map place:hark stats:hark) - seen=timebox:hark - unseen=timebox:hark - =archive:hark - half-open=(map bin:hark @da) - == -++ bowl - |= run=@ud - ^- bowl:gall - :* [~zod ~zod %hark-store] - [~ ~] - [run `@uvJ`(shax run) (add (mul run ~s1) *time) [~zod %garden ud+run]] - == --- -|% -:: -++ test-half-open - =| run=@ud - =^ mov1 agent - (~(on-poke agent (bowl run)) %hark-action !>((add-note run))) - =^ mova agent - (~(on-poke agent (bowl run)) %noun !>(%sane)) - =. run +(run) - =^ mov2 agent - (~(on-poke agent (bowl run)) %hark-action !>(read-count)) - =^ mov3 agent - (~(on-poke agent (bowl run)) %noun !>(%sane)) - =/ expected-archive=notification:hark - [(add *time (mul ~s1 0)) bin ~[(body 0)]] - =+ !<(=state on-save:agent) - =/ actual-archive=notification:hark - (~(got re archive.state) (add *time ~s1) bin) - (expect-eq !>(expected-archive) !>(actual-archive)) -:: -++ test-half-open-double - =| run=@ud - =^ mov1 agent - (~(on-poke agent (bowl run)) %hark-action !>((add-note run))) - =. run +(run) - =^ mov2 agent - (~(on-poke agent (bowl run)) %hark-action !>(read-count)) - =. run +(run) - =^ mov3 agent - (~(on-poke agent (bowl run)) %hark-action !>((add-note run))) - =. run +(run) - =^ mov4 agent - (~(on-poke agent (bowl run)) %hark-action !>(read-count)) - =. run +(run) - =^ mov5 agent - (~(on-poke agent (bowl run)) %noun !>(%sane)) - =/ expected-archive=notification:hark - [(add *time (mul ~s1 2)) bin ~[(body 2) (body 0)]] - =+ !<(=state on-save:agent) - =/ actual-archive=notification:hark - (~(got re archive.state) (add *time ~s1) bin) - (expect-eq !>(expected-archive) !>(actual-archive)) -:: -++ test-half-open-capped - =| run=@ud - |- - ?: =(run 31) - =+ !<(=state on-save:agent) - (expect-eq !>(~) !>(half-open.state)) - =^ movs agent - (~(on-poke agent (bowl run)) %hark-action !>((add-note run))) - =^ mavs agent - (~(on-poke agent (bowl run)) %hark-action !>(read-count)) - $(run +(run)) -:: --- diff --git a/pkg/grid/.env b/pkg/grid/.env deleted file mode 100644 index bad9677bd..000000000 --- a/pkg/grid/.env +++ /dev/null @@ -1,2 +0,0 @@ -# Change manually to clear local storage once -VITE_LAST_WIPE=2021-10-20 \ No newline at end of file diff --git a/pkg/grid/.eslintignore b/pkg/grid/.eslintignore deleted file mode 100644 index 08a42b501..000000000 --- a/pkg/grid/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules/ -dist/ -bin/ -.vscode/ -.husky/ -*.config.js -*.config.ts -package.json \ No newline at end of file diff --git a/pkg/grid/.eslintrc.js b/pkg/grid/.eslintrc.js deleted file mode 100644 index f3c5f2a17..000000000 --- a/pkg/grid/.eslintrc.js +++ /dev/null @@ -1,88 +0,0 @@ -module.exports = { - root: true, - env: { - browser: true, - es2021: true - }, - extends: [ - 'plugin:react/recommended', - 'airbnb', - 'plugin:@typescript-eslint/recommended', - 'plugin:import/errors', - 'plugin:jsx-a11y/recommended', - 'plugin:tailwind/recommended', - 'prettier', - 'prettier/prettier', - 'plugin:prettier/recommended' - ], - ignorePatterns: ['**/*.config.js', '**/*.config.ts'], - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaFeatures: { - jsx: true - }, - ecmaVersion: 12, - sourceType: 'module' - }, - plugins: ['react', '@typescript-eslint', 'import', 'jsx-a11y', 'react-hooks'], - rules: { - 'no-undef': 'off', - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', - { vars: 'all', args: 'after-used', ignoreRestSiblings: false } - ], - 'no-unused-expressions': ['error', { allowShortCircuit: true }], - 'no-use-before-define': 'off', - 'no-param-reassign': ['error', { props: true, ignorePropertyModificationsFor: ['draft'] }], - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/no-empty-function': 'off', - 'react/jsx-filename-extension': ['warn', { extensions: ['.tsx'] }], - 'import/extensions': [ - 'error', - 'ignorePackages', - { - ts: 'never', - tsx: 'never' - } - ], - 'no-shadow': 'off', - '@typescript-eslint/no-shadow': ['error'], - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': 'off', - 'react/no-array-index-key': 'off', - 'import/prefer-default-export': 'off', - 'react/prop-types': 'off', - 'react/jsx-props-no-spreading': 'off', - 'react/require-default-props': 'off', - 'import/no-extraneous-dependencies': ['error'], - 'tailwind/class-order': 'off', - 'jsx-a11y/label-has-associated-control': [ - 'error', - { - required: { - some: ['nesting', 'id'] - } - } - ], - 'jsx-a11y/label-has-for': [ - 'error', - { - required: { - some: ['nesting', 'id'] - } - } - ] - }, - settings: { - 'import/parsers': { - '@typescript-eslint/parser': ['.ts'] - }, - - 'import/resolver': { - typescript: { - alwaysTryTypes: true - } - } - } -}; diff --git a/pkg/grid/.gitignore b/pkg/grid/.gitignore deleted file mode 100644 index c952a96cd..000000000 --- a/pkg/grid/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules -.DS_Store -dist -dist-ssr -*.local -stats.html -.eslintcache -.vercel \ No newline at end of file diff --git a/pkg/grid/.husky/.gitignore b/pkg/grid/.husky/.gitignore deleted file mode 100644 index 31354ec13..000000000 --- a/pkg/grid/.husky/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_ diff --git a/pkg/grid/.husky/pre-commit b/pkg/grid/.husky/pre-commit deleted file mode 100755 index 837d8ad5a..000000000 --- a/pkg/grid/.husky/pre-commit +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -cd pkg/grid -npm test -npx lint-staged diff --git a/pkg/grid/.prettierrc b/pkg/grid/.prettierrc deleted file mode 100644 index 97fe3fe64..000000000 --- a/pkg/grid/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "singleQuote": true, - "semi": true, - "printWidth": 100, - "trailingComma": "none" -} diff --git a/pkg/grid/CONTRIBUTING.md b/pkg/grid/CONTRIBUTING.md deleted file mode 100644 index 93df09d20..000000000 --- a/pkg/grid/CONTRIBUTING.md +++ /dev/null @@ -1,47 +0,0 @@ -# Contributing to Landscape - -Thank you for your interest in contributing to the Urbit ecosystem. - -Landscape is entirely open to contributions from the community. We mainly organize through our [project board], [issues], and [weekly call]. - -For now our code is stored in the main [urbit repo]. If you would like to contribute feel free to open up a PR there. - -## Git Conventions - -For Landscape we follow the same conventions as the main repo which can be found in it's [contributing doc]. This can be summarized as the following: - -Commits should try to be atomic and focused on one feature at a time. Work-in-progress commits should be rebased and combined into one so that the commit history stays clean. - -Commits should follow this format: - -> component: short description -> -> long description - -Where `component` is the closest most relevant area of the code base written as concisely as possible. The short description that accompanies should be a super concise summary of the changes. The total length of the commit message should strive to be 50 characters or less. The long description is optional, but should be used if further explanation is necessary. - -### Pull Requests - -A pull request (PR) should have a title similar in structure to our commit messages where it has a short identifier component followed by a very concise summary of the PR's intent. All PRs should have a description further laying out what it accomplishes. If the PR addresses certain Github issues, those should be referenced in the body of the description so they get linked. - -PRs to this repo should currently tag (or request review) from one of the following contributors: - -- [Liam - @liam-fitzgerald](https://github.com/liam-fitzgerald) -- [Hunter - @arthyn](https://github.com/arthyn) -- [James - @nerveharp](https://github.com/nerveharp) - -If design or visual changes are made, please provide screenshots and also tag (or request a review) from one of the following contributors: - -- [Éd - @urcades](https://github.com/urcades) -- [Gavin - @g-a-v-i-n](https://github.com/g-a-v-i-n) - -## Further Information - -If you haven't yet, check out the main [contributing doc] at the base of the repo for information on how to get started developing on Urbit. Also you can find a host of resources on [developers.urbit.org], including ways to earn address space by contributing. - -[project board]: https://github.com/orgs/urbit/projects/17 -[issues]: https://github.com/urbit/landscape/issues -[weekly call]: https://github.com/urbit/landscape/issues/792 -[urbit repo]: https://github.com/urbit/urbit -[contributing doc]: ../../CONTRIBUTING.md -[developers.urbit.org]: https://developers.urbit.org/ diff --git a/pkg/grid/README.md b/pkg/grid/README.md deleted file mode 100644 index 5f1660399..000000000 --- a/pkg/grid/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Landscape - -Landscape provides the primary launching interface for Tlon's suite of userspace applications. This directory contains the front-end web application to power said interface. - -Landscape is built primarily using [React], [Typescript], and [Tailwind CSS]. [Vite] ensures that all code and assets are loaded appropriately, bundles the application for distribution and provides a functional dev environment. - -## Getting Started - -To get started using Landscape first you need to run, `npm i && npm run bootstrap` at the top level of the greater urbit repo. This will install your npm dependencies and correctly link the current implementation of the packages at `pkg/npm/*` to your dependencies. - -If you intend to edit those packages will developing on Landscape, you should also have `npm run watch-libs` running to build and re-link them after every change. - -Once that's done, you can then run `npm run mock` if you'd like to get started immediately. This will use hard-coded mock data to power the interface so you can work on the interface without being connected to a ship. - -To develop against a working ship, you first need to add a `.env.local` file to the root of this directory. This file will not be committed. Adding `VITE_SHIP_URL={URL}` where **{URL}** is the URL of the ship you would like to point to, will allow you to run `npm run dev`. This will proxy all requests to the ship except for those powering the interface, allowing you to see live data. - -Regardless of what you run to develop, Vite will hot-reload code changes as you work so you don't have to constantly refresh. - -## Deploying - -To deploy, run `npm run build` which will bundle all the code and assets into the `dist/` folder. This can then be made into a glob by doing the following: - -1. Create or launch an urbit using the -F flag -2. On that urbit, if you don't already have a desk to run from, run `|merge %work our %base` to create a new desk and mount it with `|mount %work`. -3. Now the `%work` desk is accessible through the host OS's filesystem as a directory of that urbit's pier ie `~/zod/work`. -4. From the directory of grid you can run `rsync -avL --delete dist/ ~/zod/work/grid` where `~/zod` is your fake urbit's pier. -5. Once completed you can then run `|commit %work` on your urbit and you should see your files logged back out from the dojo. -6. Now run `=dir /=garden` to switch to the garden desk directory -7. You can now run `-make-glob %work /grid` which will take the grid folder where you just added files and create a glob which can be thought of as a sort of bundle. It will be output to `~/zod/.urb/put`. -8. If you navigate to `~/zod/.urb/put` you should see a file that looks like this `glob-0v5.fdf99.nph65.qecq3.ncpjn.q13mb.glob`. The characters between `glob-` and `.glob` are a hash of the glob's contents. -9. If you're working at Tlon, you can upload this to our Google storage using `gsutil cp glob-*.* gs://bootstrap.urbit.org`. Otherwise any publicly available HTTP endpoint that can serve files should be sufficient for distributing the glob. -10. Once you've uploaded the glob, you should then update the corresponding entry in the docket file that represents Landscape which currently resides at `pkg/garden/desk.docket-0`. Both the full URL and the hash should be updated to match the glob we just created, on the line that looks like this: - -```hoon - glob-http+['https://bootstrap.urbit.org/glob-0v5.fdf99.nph65.qecq3.ncpjn.q13mb.glob' 0v5.fdf99.nph65.qecq3.ncpjn.q13mb] -``` - -11. This can now be safely committed and deployed. - -[react]: https://reactjs.org/ -[typescript]: https://www.typescriptlang.org/ -[tailwind css]: https://tailwindcss.com/ -[vite]: https://vitejs.dev/ diff --git a/pkg/grid/index.html b/pkg/grid/index.html deleted file mode 100644 index 837936695..000000000 --- a/pkg/grid/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - Urbit • Home - - - - - - - - - - - - -
- - - - diff --git a/pkg/grid/package-lock.json b/pkg/grid/package-lock.json deleted file mode 100644 index 277925026..000000000 --- a/pkg/grid/package-lock.json +++ /dev/null @@ -1,11917 +0,0 @@ -{ - "name": "landscape", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "landscape", - "version": "0.0.0", - "dependencies": { - "@fingerprintjs/fingerprintjs": "^3.3.3", - "@radix-ui/react-checkbox": "^0.1.5", - "@radix-ui/react-dialog": "^0.0.20", - "@radix-ui/react-dropdown-menu": "^0.0.23", - "@radix-ui/react-icons": "^1.1.0", - "@radix-ui/react-polymorphic": "^0.0.13", - "@radix-ui/react-portal": "^0.0.15", - "@radix-ui/react-toggle": "^0.0.10", - "@tlon/sigil-js": "^1.4.4", - "@types/lodash": "^4.14.172", - "@urbit/api": "^2.1.0", - "@urbit/http-api": "^2.1.0", - "big-integer": "^1.6.48", - "classnames": "^2.3.1", - "clipboard-copy": "^4.0.1", - "color2k": "^1.2.4", - "fuzzy": "^0.1.3", - "immer": "^9.0.5", - "lodash": "^4.17.21", - "moment": "^2.29.1", - "mousetrap": "^1.6.5", - "postcss-import": "^14.0.2", - "query-string": "^7.0.1", - "react": "^17.0.2", - "react-dnd": "^15.1.1", - "react-dnd-html5-backend": "^15.1.2", - "react-dnd-touch-backend": "^15.1.1", - "react-dom": "^17.0.2", - "react-error-boundary": "^3.1.3", - "react-router-dom": "^5.2.0", - "slugify": "^1.6.0", - "urbit-ob": "^5.0.1", - "zustand": "^3.5.7" - }, - "devDependencies": { - "@tailwindcss/aspect-ratio": "^0.2.1", - "@types/lodash": "^4.14.172", - "@types/mousetrap": "^1.6.8", - "@types/node": "^16.7.9", - "@types/react": "^16.0.0", - "@types/react-dom": "^16.0.0", - "@types/react-router-dom": "^5.1.8", - "@typescript-eslint/eslint-plugin": "^4.26.1", - "@typescript-eslint/parser": "^4.26.1", - "@urbit/vite-plugin-urbit": "^0.7.1", - "@vitejs/plugin-react-refresh": "^1.3.1", - "autoprefixer": "^10.3.7", - "eslint": "^7.28.0", - "eslint-config-airbnb": "^18.2.1", - "eslint-config-prettier": "^8.3.0", - "eslint-import-resolver-typescript": "^2.4.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-prettier": "^3.4.0", - "eslint-plugin-react": "^7.24.0", - "eslint-plugin-react-hooks": "^4.2.0", - "eslint-plugin-tailwind": "^0.2.1", - "husky": "^7.0.0", - "lint-staged": "^11.1.2", - "postcss": "^8.3.9", - "prettier": "^2.3.2", - "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-visualizer": "^5.5.2", - "tailwindcss": "^2.2.16", - "tailwindcss-theming": "^3.0.0-beta.3", - "tailwindcss-touch": "^1.0.1", - "typescript": "^4.3.2", - "vite": "^2.6.7", - "vite-plugin-html-config": "^1.0.5" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.14.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.8", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8", - "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/generator": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.14.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.17.2", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.15.3", - "dev": true, - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.16.0", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.14.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@ctrl/tinycolor": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@fingerprintjs/fingerprintjs": { - "version": "3.3.3", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - } - }, - "node_modules/@fingerprintjs/fingerprintjs/node_modules/tslib": { - "version": "2.3.1", - "license": "0BSD" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@microsoft/fetch-event-source": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", - "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@radix-ui/popper": { - "version": "0.0.10", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "csstype": "^3.0.4" - } - }, - "node_modules/@radix-ui/primitive": { - "version": "0.0.5", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/@radix-ui/react-arrow": { - "version": "0.0.15", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-0.1.5.tgz", - "integrity": "sha512-M8Y4dSXsKSbF+FryG5VvZKr/1MukMVG7swq9p5s7wYb8Rvn0UM0rQ5w8BWmSWSV4BL/gbJdhwVCznwXXlgZRZg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.1.0", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.1", - "@radix-ui/react-label": "0.1.5", - "@radix-ui/react-presence": "0.1.2", - "@radix-ui/react-primitive": "0.1.4", - "@radix-ui/react-use-controllable-state": "0.1.0", - "@radix-ui/react-use-previous": "0.1.1", - "@radix-ui/react-use-size": "0.1.1" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/primitive": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-0.1.0.tgz", - "integrity": "sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-compose-refs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", - "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-context": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", - "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-presence": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-0.1.2.tgz", - "integrity": "sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-use-layout-effect": "0.1.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-primitive": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", - "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "0.1.2" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-slot": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", - "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-callback-ref": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz", - "integrity": "sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-controllable-state": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz", - "integrity": "sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-layout-effect": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", - "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-use-size": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-0.1.1.tgz", - "integrity": "sha512-pTgWM5qKBu6C7kfKxrKPoBI2zZYZmp2cSXzpUiGM3qEBQlMLtYhaY2JXdXUCxz+XmD1YEjc8oRwvyfsD4AG4WA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "0.0.15", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-slot": "0.0.12" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "0.0.5", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-context": { - "version": "0.0.5", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-dialog": { - "version": "0.0.20", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-dismissable-layer": "0.0.15", - "@radix-ui/react-focus-guards": "0.0.7", - "@radix-ui/react-focus-scope": "0.0.15", - "@radix-ui/react-id": "0.0.6", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-portal": "0.0.15", - "@radix-ui/react-presence": "0.0.15", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-slot": "0.0.12", - "@radix-ui/react-use-controllable-state": "0.0.6", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "^2.4.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "0.0.15", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-body-pointer-events": "0.0.7", - "@radix-ui/react-use-callback-ref": "0.0.5", - "@radix-ui/react-use-escape-keydown": "0.0.6" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-dropdown-menu": { - "version": "0.0.23", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-id": "0.0.6", - "@radix-ui/react-menu": "0.0.22", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-controllable-state": "0.0.6" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "0.0.7", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "0.0.15", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-callback-ref": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-icons": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.1.0.tgz", - "integrity": "sha512-nhctV9YKN8G4HfkS3p03ml+osTBDMGKImaAJTm666hymtaWEgIPiqL7F53ivDqIO4A+20ERwUiiKJ8h3XK7uAg==", - "peerDependencies": { - "react": "^16.x || ^17.x" - } - }, - "node_modules/@radix-ui/react-id": { - "version": "0.0.6", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-label": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-0.1.5.tgz", - "integrity": "sha512-Au9+n4/DhvjR0IHhvZ1LPdx/OW+3CGDie30ZyCkbSHIuLp4/CV4oPPGBwJ1vY99Jog3zyQhsGww9MXj8O9Aj/A==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.1", - "@radix-ui/react-id": "0.1.5", - "@radix-ui/react-primitive": "0.1.4" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-compose-refs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", - "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-context": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", - "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-id": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.1.5.tgz", - "integrity": "sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", - "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "0.1.2" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-slot": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", - "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-use-layout-effect": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", - "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-menu": { - "version": "0.0.22", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-collection": "0.0.15", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-dismissable-layer": "0.0.15", - "@radix-ui/react-focus-guards": "0.0.7", - "@radix-ui/react-focus-scope": "0.0.15", - "@radix-ui/react-id": "0.0.6", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-popper": "0.0.18", - "@radix-ui/react-portal": "0.0.15", - "@radix-ui/react-presence": "0.0.15", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-roving-focus": "0.0.16", - "@radix-ui/react-slot": "0.0.12", - "@radix-ui/react-use-callback-ref": "0.0.5", - "@radix-ui/react-use-direction": "0.0.1", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "^2.4.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-polymorphic": { - "version": "0.0.13", - "license": "MIT", - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-popper": { - "version": "0.0.18", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/popper": "0.0.10", - "@radix-ui/react-arrow": "0.0.15", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-rect": "0.0.7", - "@radix-ui/react-use-size": "0.0.6", - "@radix-ui/rect": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "0.0.15", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-layout-effect": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "0.0.15", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-use-layout-effect": "0.0.5" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "0.0.15", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-polymorphic": "0.0.13" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "0.0.16", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-collection": "0.0.15", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-id": "0.0.6", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-callback-ref": "0.0.5", - "@radix-ui/react-use-controllable-state": "0.0.6" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "0.0.12", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-toggle": { - "version": "0.0.10", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-controllable-state": "0.0.6" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-body-pointer-events": { - "version": "0.0.7", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "0.0.5", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "0.0.6", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-direction": { - "version": "0.0.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "0.0.6", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "0.0.5", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-previous": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-0.1.1.tgz", - "integrity": "sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-rect": { - "version": "0.0.7", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "0.0.5" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-size": { - "version": "0.0.6", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/rect": { - "version": "0.0.5", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/@react-dnd/asap": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/@react-dnd/invariant": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/@react-dnd/shallowequal": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/@rollup/pluginutils": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@tailwindcss/aspect-ratio": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "tailwindcss": ">=2.0.0" - } - }, - "node_modules/@tlon/sigil-js": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4", - "svgson": "^4.0.0", - "transformation-matrix": "2.1.1" - }, - "peerDependencies": { - "react": "^17" - } - }, - "node_modules/@types/history": { - "version": "4.7.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.172", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mousetrap": { - "version": "1.6.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "16.7.9", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.4", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "16.14.14", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "16.9.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "^16" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.16", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/history": "*", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.29.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.29.1", - "@typescript-eslint/scope-manager": "4.29.1", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.29.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.1", - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/typescript-estree": "4.29.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.29.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.29.1", - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/typescript-estree": "4.29.1", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.29.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/visitor-keys": "4.29.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.29.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.29.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/visitor-keys": "4.29.1", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.29.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.29.1", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@urbit/api": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@urbit/api/-/api-2.1.0.tgz", - "integrity": "sha512-2njwpvZ2s23gp5C4v9uDynU1wxrN33+vloqpvlErUhMR/4R6mXE4cMvsZzj/fCGOa0J3LRV/If7XmgG+kY69Tg==", - "dependencies": { - "@babel/runtime": "^7.16.0", - "big-integer": "^1.6.48", - "core-js": "^3.19.1", - "immer": "^9.0.1", - "urbit-ob": "^5.0.1" - } - }, - "node_modules/@urbit/http-api": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.1.0.tgz", - "integrity": "sha512-eXYar3ofw1HlhHy2NSkJPCo//oZzfnrGXIJAKQ/gWSzd8x3o7eiiIQjoFbuWojaACy8T9fXsGzpxEqoXZlWDhw==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@microsoft/fetch-event-source": "^2.0.0", - "browser-or-node": "^1.3.0", - "core-js": "^3.19.1" - } - }, - "node_modules/@urbit/vite-plugin-urbit": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "dependencies": { - "vite-plugin-html-config": "^1.0.6" - } - }, - "node_modules/@urbit/vite-plugin-urbit/node_modules/vite-plugin-html-config": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "vite": "^2.0.5" - } - }, - "node_modules/@vitejs/plugin-react-refresh": { - "version": "1.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.14.8", - "@babel/plugin-transform-react-jsx-self": "^7.14.5", - "@babel/plugin-transform-react-jsx-source": "^7.14.5", - "@rollup/pluginutils": "^4.1.1", - "react-refresh": "^0.10.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-node": { - "version": "1.8.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "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/ansi-colors": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-hidden": { - "version": "1.1.3", - "license": "ISC", - "dependencies": { - "tslib": "^1.0.0" - }, - "engines": { - "node": ">=8.5.0" - } - }, - "node_modules/aria-query": { - "version": "4.2.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/array-includes": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/autoprefixer": { - "version": "10.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.17.3", - "caniuse-lite": "^1.0.30001264", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "picocolors": "^0.2.1", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axe-core": { - "version": "4.3.2", - "dev": true, - "license": "MPL-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/big-integer": { - "version": "1.6.49", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" - }, - "node_modules/browserslist": { - "version": "4.17.3", - "dev": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001264", - "electron-to-chromium": "^1.3.857", - "escalade": "^3.1.1", - "node-releases": "^1.1.77", - "picocolors": "^0.2.1" - }, - "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/bytes": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001265", - "dev": true, - "license": "CC-BY-4.0", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/classnames": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "2.2.1", - "dev": true, - "license": "ISC" - }, - "node_modules/clipboard-copy": { - "version": "4.0.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/color-string": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/color2k": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.10", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/core-js": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz", - "integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.16.1", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-color-names": { - "version": "0.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/css-unit-converter": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.0.8", - "license": "MIT" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.7", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/debug": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-rename-keys": { - "version": "0.2.1", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2", - "rename-keys": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/defined": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/detective": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/dnd-core": { - "version": "15.1.1", - "license": "MIT", - "dependencies": { - "@react-dnd/asap": "4.0.0", - "@react-dnd/invariant": "3.0.0", - "redux": "^4.1.1" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "dev": true, - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "2.4.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/domutils": { - "version": "1.7.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.866", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/enquirer": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "1.1.2", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "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-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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/esbuild": { - "version": "0.13.4", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "optionalDependencies": { - "esbuild-android-arm64": "0.13.4", - "esbuild-darwin-64": "0.13.4", - "esbuild-darwin-arm64": "0.13.4", - "esbuild-freebsd-64": "0.13.4", - "esbuild-freebsd-arm64": "0.13.4", - "esbuild-linux-32": "0.13.4", - "esbuild-linux-64": "0.13.4", - "esbuild-linux-arm": "0.13.4", - "esbuild-linux-arm64": "0.13.4", - "esbuild-linux-mips64le": "0.13.4", - "esbuild-linux-ppc64le": "0.13.4", - "esbuild-openbsd-64": "0.13.4", - "esbuild-sunos-64": "0.13.4", - "esbuild-windows-32": "0.13.4", - "esbuild-windows-64": "0.13.4", - "esbuild-windows-arm64": "0.13.4" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-airbnb": { - "version": "18.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-airbnb-base": "^14.2.1", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0" - } - }, - "node_modules/eslint-config-airbnb-base": { - "version": "14.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-html-parser": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint": "^5.3.0", - "espree": "^4.0.0", - "htmlparser2": "^3.9.2" - } - }, - "node_modules/eslint-html-parser/node_modules/acorn": { - "version": "6.4.2", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/eslint-html-parser/node_modules/ansi-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-html-parser/node_modules/astral-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-html-parser/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/eslint-html-parser/node_modules/emoji-regex": { - "version": "7.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-html-parser/node_modules/eslint": { - "version": "5.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^6.14.0 || ^8.10.0 || >=9.10.0" - } - }, - "node_modules/eslint-html-parser/node_modules/eslint-scope": { - "version": "4.0.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-html-parser/node_modules/eslint-utils": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-html-parser/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-html-parser/node_modules/eslint/node_modules/espree": { - "version": "5.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint-html-parser/node_modules/espree": { - "version": "4.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint-html-parser/node_modules/file-entry-cache": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-html-parser/node_modules/flat-cache": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-html-parser/node_modules/flatted": { - "version": "2.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/eslint-html-parser/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-html-parser/node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint-html-parser/node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "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/eslint-html-parser/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-html-parser/node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint-html-parser/node_modules/regexpp": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/eslint-html-parser/node_modules/rimraf": { - "version": "2.6.3", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/eslint-html-parser/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/eslint-html-parser/node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-html-parser/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-html-parser/node_modules/slice-ansi": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-html-parser/node_modules/string-width": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-html-parser/node_modules/string-width/node_modules/ansi-regex": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-html-parser/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-html-parser/node_modules/strip-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-html-parser/node_modules/strip-json-comments": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-html-parser/node_modules/table": { - "version": "5.4.6", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint-html-parser/node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint-html-parser/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "2.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.5", - "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.11.2", - "aria-query": "^4.2.2", - "array-includes": "^3.1.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.0.2", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.6", - "emoji-regex": "^9.0.0", - "has": "^1.0.3", - "jsx-ast-utils": "^3.1.0", - "language-tags": "^1.0.5" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-tailwind": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-html-parser": "^1.0.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "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-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "2.0.3", - "license": "MIT" - }, - "node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "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/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.11.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/filter-obj": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.2", - "dev": true, - "license": "ISC" - }, - "node_modules/fraction.js": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fs-extra": { - "version": "10.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/fuzzy": { - "version": "0.1.3", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "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-nonce": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "dev": true, - "license": "ISC", - "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.1", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "dev": true, - "license": "MIT", - "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/ignore": { - "version": "5.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "dev": true, - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "0.3.1", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-value/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/history": { - "version": "4.10.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/html-tags": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/htmlparser2": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/husky": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.5", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "import-from": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-from": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "6.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-escapes": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/cli-cursor": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/mimic-fn": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/onetime": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/restore-cursor": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "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", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "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-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/is-callable": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-core-module": { - "version": "2.5.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.21", - "dev": true, - "license": "ODC-By-1.0" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "11.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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/lint-staged/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/lint-staged/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/lint-staged/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2": { - "version": "3.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - } - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.topath": { - "version": "4.5.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/modern-normalize": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/mousetrap": { - "version": "1.6.5", - "license": "Apache-2.0 WITH LLVM-exception" - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "0.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/nanoid": { - "version": "3.1.29", - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-releases": { - "version": "1.1.77", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/omit-deep": { - "version": "0.3.0", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.1", - "unset-value": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "dev": true, - "license": "MIT", - "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-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "0.2.1", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver-compare": "^1.0.0" - } - }, - "node_modules/postcss": { - "version": "8.3.9", - "license": "MIT", - "dependencies": { - "nanoid": "^3.1.28", - "picocolors": "^0.2.1", - "source-map-js": "^0.6.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-import": { - "version": "14.0.2", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1", - "postcss": "^8.1.6" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "import-cwd": "^3.0.0", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "5.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.6" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/purgecss": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "^6.0.0", - "glob": "^7.0.0", - "postcss": "^8.2.1", - "postcss-selector-parser": "^6.0.2" - }, - "bin": { - "purgecss": "bin/purgecss.js" - } - }, - "node_modules/query-string": { - "version": "7.0.1", - "license": "MIT", - "dependencies": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react": { - "version": "17.0.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dnd": { - "version": "15.1.1", - "license": "MIT", - "dependencies": { - "@react-dnd/invariant": "3.0.0", - "@react-dnd/shallowequal": "3.0.0", - "dnd-core": "15.1.1", - "fast-deep-equal": "^3.1.3", - "hoist-non-react-statics": "^3.3.2" - }, - "peerDependencies": { - "@types/hoist-non-react-statics": ">= 3.3.1", - "@types/node": ">= 12", - "@types/react": ">= 16", - "react": ">= 16.14" - }, - "peerDependenciesMeta": { - "@types/hoist-non-react-statics": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-dnd-html5-backend": { - "version": "15.1.2", - "license": "MIT", - "dependencies": { - "dnd-core": "15.1.1" - } - }, - "node_modules/react-dnd-touch-backend": { - "version": "15.1.1", - "license": "MIT", - "dependencies": { - "@react-dnd/invariant": "3.0.0", - "dnd-core": "15.1.1" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-boundary": { - "version": "3.1.3", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - }, - "peerDependencies": { - "react": ">=16.13.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-refresh": { - "version": "0.10.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-remove-scroll": { - "version": "2.4.3", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.1.0", - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0", - "use-callback-ref": "^1.2.3", - "use-sidecar": "^1.0.1" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-router": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-dom": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-style-singleton": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^1.0.0" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reduce-css-calc": { - "version": "2.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/redux": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/rename-keys": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.58.0", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-analyzer": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/rollup-plugin-visualizer": { - "version": "5.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "nanoid": "^3.1.22", - "open": "^7.4.2", - "source-map": "^0.7.3", - "yargs": "^16.2.0" - }, - "bin": { - "rollup-plugin-visualizer": "dist/bin/cli.js" - }, - "engines": { - "node": ">=10.16" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-visualizer/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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.3", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/slugify": { - "version": "1.6.0", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "0.6.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/split-on-first": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/string-argv": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.trimend": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "BSD-2-Clause", - "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": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgson": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "deep-rename-keys": "^0.2.1", - "omit-deep": "0.3.0", - "xml-reader": "2.4.3" - } - }, - "node_modules/table": { - "version": "6.7.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.2", - "dev": true, - "license": "MIT", - "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/table/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/table/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/table/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/tailwindcss": { - "version": "2.2.16", - "dev": true, - "license": "MIT", - "dependencies": { - "arg": "^5.0.1", - "bytes": "^3.0.0", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "color": "^4.0.1", - "cosmiconfig": "^7.0.1", - "detective": "^5.2.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.7", - "fs-extra": "^10.0.0", - "glob-parent": "^6.0.1", - "html-tags": "^3.1.0", - "is-color-stop": "^1.1.0", - "is-glob": "^4.0.1", - "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", - "modern-normalize": "^1.1.0", - "node-emoji": "^1.11.0", - "normalize-path": "^3.0.0", - "object-hash": "^2.2.0", - "postcss-js": "^3.0.3", - "postcss-load-config": "^3.1.0", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0", - "pretty-hrtime": "^1.0.3", - "purgecss": "^4.0.3", - "quick-lru": "^5.1.1", - "reduce-css-calc": "^2.1.8", - "resolve": "^1.20.0", - "tmp": "^0.2.1" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "autoprefixer": "^10.0.2", - "postcss": "^8.0.9" - } - }, - "node_modules/tailwindcss-theming": { - "version": "3.0.0-beta.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@ctrl/tinycolor": "^3.1.4", - "lodash": "^4.17.20" - } - }, - "node_modules/tailwindcss-touch": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/tailwindcss/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/tailwindcss/node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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/tailwindcss/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/tailwindcss/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/tailwindcss/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tailwindcss/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/transformation-matrix": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/tsconfig-paths": { - "version": "3.10.1", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.0", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "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/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.3.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unset-value": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/urbit-ob": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.2.5", - "license": "MIT", - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/vite": { - "version": "2.6.7", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.13.2", - "postcss": "^8.3.8", - "resolve": "^1.20.0", - "rollup": "^2.57.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": ">=12.2.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "less": "*", - "sass": "*", - "stylus": "*" - }, - "peerDependenciesMeta": { - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - } - } - }, - "node_modules/vite-plugin-html-config": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "vite": "^2.0.5" - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "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-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/write": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/xml-lexer": { - "version": "0.2.2", - "license": "MIT", - "dependencies": { - "eventemitter3": "^2.0.0" - } - }, - "node_modules/xml-reader": { - "version": "2.4.3", - "license": "MIT", - "dependencies": { - "eventemitter3": "^2.0.0", - "xml-lexer": "^0.2.2" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/zustand": { - "version": "3.5.7", - "license": "MIT", - "peerDependencies": { - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - } - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/compat-data": { - "version": "7.14.7", - "dev": true - }, - "@babel/core": { - "version": "7.14.8", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.8", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8", - "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" - } - }, - "@babel/generator": { - "version": "7.14.8", - "dev": true, - "requires": { - "@babel/types": "^7.14.8", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.8", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.8", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.14.8", - "dev": true, - "requires": { - "@babel/types": "^7.14.8" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.8", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true - }, - "@babel/helpers": { - "version": "7.14.8", - "dev": true, - "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.8", - "@babel/types": "^7.14.8" - } - }, - "@babel/highlight": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.8", - "dev": true - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.14.9", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/runtime": { - "version": "7.17.2", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.15.3", - "dev": true, - "requires": { - "core-js-pure": "^3.16.0", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.8", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.8", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.8", - "@babel/types": "^7.14.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.8", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.8", - "to-fast-properties": "^2.0.0" - } - }, - "@ctrl/tinycolor": { - "version": "3.4.0", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.11.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "dev": true - } - } - }, - "@fingerprintjs/fingerprintjs": { - "version": "3.3.3", - "requires": { - "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.3.1" - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "dev": true - }, - "@microsoft/fetch-event-source": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", - "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@radix-ui/popper": { - "version": "0.0.10", - "requires": { - "@babel/runtime": "^7.13.10", - "csstype": "^3.0.4" - } - }, - "@radix-ui/primitive": { - "version": "0.0.5", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-arrow": { - "version": "0.0.15", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15" - } - }, - "@radix-ui/react-checkbox": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-0.1.5.tgz", - "integrity": "sha512-M8Y4dSXsKSbF+FryG5VvZKr/1MukMVG7swq9p5s7wYb8Rvn0UM0rQ5w8BWmSWSV4BL/gbJdhwVCznwXXlgZRZg==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.1.0", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.1", - "@radix-ui/react-label": "0.1.5", - "@radix-ui/react-presence": "0.1.2", - "@radix-ui/react-primitive": "0.1.4", - "@radix-ui/react-use-controllable-state": "0.1.0", - "@radix-ui/react-use-previous": "0.1.1", - "@radix-ui/react-use-size": "0.1.1" - }, - "dependencies": { - "@radix-ui/primitive": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-0.1.0.tgz", - "integrity": "sha512-tqxZKybwN5Fa3VzZry4G6mXAAb9aAqKmPtnVbZpL0vsBwvOHTBwsjHVPXylocYLwEtBY9SCe665bYnNB515uoA==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-compose-refs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", - "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-context": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", - "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-presence": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-0.1.2.tgz", - "integrity": "sha512-3BRlFZraooIUfRlyN+b/Xs5hq1lanOOo/+3h6Pwu2GMFjkGKKa4Rd51fcqGqnVlbr3jYg+WLuGyAV4KlgqwrQw==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-use-layout-effect": "0.1.0" - } - }, - "@radix-ui/react-primitive": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", - "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "0.1.2" - } - }, - "@radix-ui/react-slot": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", - "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0" - } - }, - "@radix-ui/react-use-callback-ref": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-0.1.0.tgz", - "integrity": "sha512-Va041McOFFl+aV+sejvl0BS2aeHx86ND9X/rVFmEFQKTXCp6xgUK0NGUAGcgBlIjnJSbMYPGEk1xKSSlVcN2Aw==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-controllable-state": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-0.1.0.tgz", - "integrity": "sha512-zv7CX/PgsRl46a52Tl45TwqwVJdmqnlQEQhaYMz/yBOD2sx2gCkCFSoF/z9mpnYWmS6DTLNTg5lIps3fV6EnXg==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.1.0" - } - }, - "@radix-ui/react-use-layout-effect": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", - "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-size": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-0.1.1.tgz", - "integrity": "sha512-pTgWM5qKBu6C7kfKxrKPoBI2zZYZmp2cSXzpUiGM3qEBQlMLtYhaY2JXdXUCxz+XmD1YEjc8oRwvyfsD4AG4WA==", - "requires": { - "@babel/runtime": "^7.13.10" - } - } - } - }, - "@radix-ui/react-collection": { - "version": "0.0.15", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-slot": "0.0.12" - } - }, - "@radix-ui/react-compose-refs": { - "version": "0.0.5", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-context": { - "version": "0.0.5", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-dialog": { - "version": "0.0.20", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-dismissable-layer": "0.0.15", - "@radix-ui/react-focus-guards": "0.0.7", - "@radix-ui/react-focus-scope": "0.0.15", - "@radix-ui/react-id": "0.0.6", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-portal": "0.0.15", - "@radix-ui/react-presence": "0.0.15", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-slot": "0.0.12", - "@radix-ui/react-use-controllable-state": "0.0.6", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "^2.4.0" - } - }, - "@radix-ui/react-dismissable-layer": { - "version": "0.0.15", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-body-pointer-events": "0.0.7", - "@radix-ui/react-use-callback-ref": "0.0.5", - "@radix-ui/react-use-escape-keydown": "0.0.6" - } - }, - "@radix-ui/react-dropdown-menu": { - "version": "0.0.23", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-id": "0.0.6", - "@radix-ui/react-menu": "0.0.22", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-controllable-state": "0.0.6" - } - }, - "@radix-ui/react-focus-guards": { - "version": "0.0.7", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-focus-scope": { - "version": "0.0.15", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-callback-ref": "0.0.5" - } - }, - "@radix-ui/react-icons": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.1.0.tgz", - "integrity": "sha512-nhctV9YKN8G4HfkS3p03ml+osTBDMGKImaAJTm666hymtaWEgIPiqL7F53ivDqIO4A+20ERwUiiKJ8h3XK7uAg==", - "requires": {} - }, - "@radix-ui/react-id": { - "version": "0.0.6", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-label": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-0.1.5.tgz", - "integrity": "sha512-Au9+n4/DhvjR0IHhvZ1LPdx/OW+3CGDie30ZyCkbSHIuLp4/CV4oPPGBwJ1vY99Jog3zyQhsGww9MXj8O9Aj/A==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.1", - "@radix-ui/react-id": "0.1.5", - "@radix-ui/react-primitive": "0.1.4" - }, - "dependencies": { - "@radix-ui/react-compose-refs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-0.1.0.tgz", - "integrity": "sha512-eyclbh+b77k+69Dk72q3694OHrn9B3QsoIRx7ywX341U9RK1ThgQjMFZoPtmZNQTksXHLNEiefR8hGVeFyInGg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-context": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-0.1.1.tgz", - "integrity": "sha512-PkyVX1JsLBioeu0jB9WvRpDBBLtLZohVDT3BB5CTSJqActma8S8030P57mWZb4baZifMvN7KKWPAA40UmWKkQg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-id": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-0.1.5.tgz", - "integrity": "sha512-IPc4H/63bes0IZ1GJJozSEkSWcDyhNGtKFWUpJ+XtaLyQ1X3x7Mf6fWwWhDcpqlYEP+5WtAvfqcyEsyjP+ZhBQ==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "0.1.0" - } - }, - "@radix-ui/react-primitive": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-0.1.4.tgz", - "integrity": "sha512-6gSl2IidySupIMJFjYnDIkIWRyQdbu/AHK7rbICPani+LW4b0XdxBXc46og/iZvuwW8pjCS8I2SadIerv84xYA==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "0.1.2" - } - }, - "@radix-ui/react-slot": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz", - "integrity": "sha512-ADkqfL+agEzEguU3yS26jfB50hRrwf7U4VTwAOZEmi/g+ITcBWe12yM46ueS/UCIMI9Py+gFUaAdxgxafFvY2Q==", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0" - } - }, - "@radix-ui/react-use-layout-effect": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-0.1.0.tgz", - "integrity": "sha512-+wdeS51Y+E1q1Wmd+1xSSbesZkpVj4jsg0BojCbopWvgq5iBvixw5vgemscdh58ep98BwUbsFYnrywFhV9yrVg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - } - } - }, - "@radix-ui/react-menu": { - "version": "0.0.22", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-collection": "0.0.15", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-dismissable-layer": "0.0.15", - "@radix-ui/react-focus-guards": "0.0.7", - "@radix-ui/react-focus-scope": "0.0.15", - "@radix-ui/react-id": "0.0.6", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-popper": "0.0.18", - "@radix-ui/react-portal": "0.0.15", - "@radix-ui/react-presence": "0.0.15", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-roving-focus": "0.0.16", - "@radix-ui/react-slot": "0.0.12", - "@radix-ui/react-use-callback-ref": "0.0.5", - "@radix-ui/react-use-direction": "0.0.1", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "^2.4.0" - } - }, - "@radix-ui/react-polymorphic": { - "version": "0.0.13", - "requires": {} - }, - "@radix-ui/react-popper": { - "version": "0.0.18", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/popper": "0.0.10", - "@radix-ui/react-arrow": "0.0.15", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-rect": "0.0.7", - "@radix-ui/react-use-size": "0.0.6", - "@radix-ui/rect": "0.0.5" - } - }, - "@radix-ui/react-portal": { - "version": "0.0.15", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-layout-effect": "0.0.5" - } - }, - "@radix-ui/react-presence": { - "version": "0.0.15", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-use-layout-effect": "0.0.5" - } - }, - "@radix-ui/react-primitive": { - "version": "0.0.15", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-polymorphic": "0.0.13" - } - }, - "@radix-ui/react-roving-focus": { - "version": "0.0.16", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-collection": "0.0.15", - "@radix-ui/react-compose-refs": "0.0.5", - "@radix-ui/react-context": "0.0.5", - "@radix-ui/react-id": "0.0.6", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-callback-ref": "0.0.5", - "@radix-ui/react-use-controllable-state": "0.0.6" - } - }, - "@radix-ui/react-slot": { - "version": "0.0.12", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.0.5" - } - }, - "@radix-ui/react-toggle": { - "version": "0.0.10", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.0.5", - "@radix-ui/react-polymorphic": "0.0.13", - "@radix-ui/react-primitive": "0.0.15", - "@radix-ui/react-use-controllable-state": "0.0.6" - } - }, - "@radix-ui/react-use-body-pointer-events": { - "version": "0.0.7", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "0.0.5" - } - }, - "@radix-ui/react-use-callback-ref": { - "version": "0.0.5", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-controllable-state": { - "version": "0.0.6", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.0.5" - } - }, - "@radix-ui/react-use-direction": { - "version": "0.0.1", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-escape-keydown": { - "version": "0.0.6", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.0.5" - } - }, - "@radix-ui/react-use-layout-effect": { - "version": "0.0.5", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-previous": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-0.1.1.tgz", - "integrity": "sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg==", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-rect": { - "version": "0.0.7", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/rect": "0.0.5" - } - }, - "@radix-ui/react-use-size": { - "version": "0.0.6", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/rect": { - "version": "0.0.5", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@react-dnd/asap": { - "version": "4.0.0" - }, - "@react-dnd/invariant": { - "version": "3.0.0" - }, - "@react-dnd/shallowequal": { - "version": "3.0.0" - }, - "@rollup/pluginutils": { - "version": "4.1.1", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "@tailwindcss/aspect-ratio": { - "version": "0.2.1", - "dev": true, - "requires": {} - }, - "@tlon/sigil-js": { - "version": "1.4.4", - "requires": { - "invariant": "^2.2.4", - "svgson": "^4.0.0", - "transformation-matrix": "2.1.1" - } - }, - "@types/history": { - "version": "4.7.9", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.9", - "dev": true - }, - "@types/lodash": { - "version": "4.14.172", - "dev": true - }, - "@types/mousetrap": { - "version": "1.6.8", - "dev": true - }, - "@types/node": { - "version": "16.7.9", - "devOptional": true - }, - "@types/parse-json": { - "version": "4.0.0", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.4", - "devOptional": true - }, - "@types/react": { - "version": "16.14.14", - "devOptional": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "16.9.14", - "dev": true, - "requires": { - "@types/react": "^16" - } - }, - "@types/react-router": { - "version": "5.1.16", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*" - } - }, - "@types/react-router-dom": { - "version": "5.1.8", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "devOptional": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.29.1", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.29.1", - "@typescript-eslint/scope-manager": "4.29.1", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.29.1", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.1", - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/typescript-estree": "4.29.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.29.1", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.29.1", - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/typescript-estree": "4.29.1", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.29.1", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/visitor-keys": "4.29.1" - } - }, - "@typescript-eslint/types": { - "version": "4.29.1", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.29.1", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.29.1", - "@typescript-eslint/visitor-keys": "4.29.1", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.29.1", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.29.1", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@urbit/api": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@urbit/api/-/api-2.1.0.tgz", - "integrity": "sha512-2njwpvZ2s23gp5C4v9uDynU1wxrN33+vloqpvlErUhMR/4R6mXE4cMvsZzj/fCGOa0J3LRV/If7XmgG+kY69Tg==", - "requires": { - "@babel/runtime": "^7.16.0", - "big-integer": "^1.6.48", - "core-js": "^3.19.1", - "immer": "^9.0.1", - "urbit-ob": "^5.0.1" - } - }, - "@urbit/http-api": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.1.0.tgz", - "integrity": "sha512-eXYar3ofw1HlhHy2NSkJPCo//oZzfnrGXIJAKQ/gWSzd8x3o7eiiIQjoFbuWojaACy8T9fXsGzpxEqoXZlWDhw==", - "requires": { - "@babel/runtime": "^7.12.5", - "@microsoft/fetch-event-source": "^2.0.0", - "browser-or-node": "^1.3.0", - "core-js": "^3.19.1" - } - }, - "@urbit/vite-plugin-urbit": { - "version": "0.7.1", - "dev": true, - "requires": { - "vite-plugin-html-config": "^1.0.6" - }, - "dependencies": { - "vite-plugin-html-config": { - "version": "1.0.6", - "dev": true, - "requires": {} - } - } - }, - "@vitejs/plugin-react-refresh": { - "version": "1.3.6", - "dev": true, - "requires": { - "@babel/core": "^7.14.8", - "@babel/plugin-transform-react-jsx-self": "^7.14.5", - "@babel/plugin-transform-react-jsx-source": "^7.14.5", - "@rollup/pluginutils": "^4.1.1", - "react-refresh": "^0.10.0" - } - }, - "acorn": { - "version": "7.4.1", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "dev": true, - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "acorn-walk": { - "version": "7.2.0", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "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" - } - }, - "ansi-colors": { - "version": "4.1.1", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.1", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-hidden": { - "version": "1.1.3", - "requires": { - "tslib": "^1.0.0" - } - }, - "aria-query": { - "version": "4.2.2", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "array-includes": { - "version": "3.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flat": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "ast-types-flow": { - "version": "0.0.7", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "autoprefixer": { - "version": "10.3.7", - "dev": true, - "requires": { - "browserslist": "^4.17.3", - "caniuse-lite": "^1.0.30001264", - "fraction.js": "^4.1.1", - "normalize-range": "^0.1.2", - "picocolors": "^0.2.1", - "postcss-value-parser": "^4.1.0" - } - }, - "axe-core": { - "version": "4.3.2", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "big-integer": { - "version": "1.6.49" - }, - "binary-extensions": { - "version": "2.2.0", - "dev": true - }, - "bn.js": { - "version": "4.12.0" - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" - }, - "browserslist": { - "version": "4.17.3", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001264", - "electron-to-chromium": "^1.3.857", - "escalade": "^3.1.1", - "node-releases": "^1.1.77", - "picocolors": "^0.2.1" - } - }, - "bytes": { - "version": "3.1.0", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001265", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "dev": true - }, - "chokidar": { - "version": "3.5.2", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "classnames": { - "version": "2.3.1" - }, - "clean-stack": { - "version": "2.2.0", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "cli-width": { - "version": "2.2.1", - "dev": true - }, - "clipboard-copy": { - "version": "4.0.1" - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color": { - "version": "4.0.1", - "dev": true, - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.6.0" - }, - "dependencies": { - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "color-string": { - "version": "1.6.0", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "color2k": { - "version": "1.2.4" - }, - "colorette": { - "version": "1.2.2", - "dev": true - }, - "commander": { - "version": "6.2.1", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "confusing-browser-globals": { - "version": "1.0.10", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-js": { - "version": "3.21.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz", - "integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==" - }, - "core-js-pure": { - "version": "3.16.1", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "css-color-names": { - "version": "0.0.4", - "dev": true - }, - "css-unit-converter": { - "version": "1.1.2", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "dev": true - }, - "csstype": { - "version": "3.0.8" - }, - "damerau-levenshtein": { - "version": "1.0.7", - "dev": true - }, - "debug": { - "version": "4.3.2", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decode-uri-component": { - "version": "0.2.0" - }, - "deep-is": { - "version": "0.1.3", - "dev": true - }, - "deep-rename-keys": { - "version": "0.2.1", - "requires": { - "kind-of": "^3.0.2", - "rename-keys": "^1.1.2" - } - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "defined": { - "version": "1.0.0", - "dev": true - }, - "detect-node-es": { - "version": "1.1.0" - }, - "detective": { - "version": "5.2.0", - "dev": true, - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - } - }, - "didyoumean": { - "version": "1.2.2", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "dev": true - }, - "dnd-core": { - "version": "15.1.1", - "requires": { - "@react-dnd/asap": "4.0.0", - "@react-dnd/invariant": "3.0.0", - "redux": "^4.1.1" - } - }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "0.2.2", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.2.0", - "dev": true - }, - "entities": { - "version": "2.2.0", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "electron-to-chromium": { - "version": "1.3.866", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "enquirer": { - "version": "2.3.6", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "1.1.2", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "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-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "esbuild": { - "version": "0.13.4", - "dev": true, - "requires": { - "esbuild-android-arm64": "0.13.4", - "esbuild-darwin-64": "0.13.4", - "esbuild-darwin-arm64": "0.13.4", - "esbuild-freebsd-64": "0.13.4", - "esbuild-freebsd-arm64": "0.13.4", - "esbuild-linux-32": "0.13.4", - "esbuild-linux-64": "0.13.4", - "esbuild-linux-arm": "0.13.4", - "esbuild-linux-arm64": "0.13.4", - "esbuild-linux-mips64le": "0.13.4", - "esbuild-linux-ppc64le": "0.13.4", - "esbuild-openbsd-64": "0.13.4", - "esbuild-sunos-64": "0.13.4", - "esbuild-windows-32": "0.13.4", - "esbuild-windows-64": "0.13.4", - "esbuild-windows-arm64": "0.13.4" - } - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "eslint": { - "version": "7.32.0", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "glob-parent": { - "version": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "13.11.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "dev": true - } - } - }, - "eslint-config-airbnb": { - "version": "18.2.1", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^14.2.1", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - } - }, - "eslint-config-airbnb-base": { - "version": "14.2.1", - "dev": true, - "requires": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - } - }, - "eslint-config-prettier": { - "version": "8.3.0", - "dev": true, - "requires": {} - }, - "eslint-html-parser": { - "version": "1.0.1", - "dev": true, - "requires": { - "eslint": "^5.3.0", - "espree": "^4.0.0", - "htmlparser2": "^3.9.2" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "emoji-regex": { - "version": "7.0.3", - "dev": true - }, - "eslint": { - "version": "5.16.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "espree": { - "version": "5.0.1", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.4.3", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - }, - "espree": { - "version": "4.1.0", - "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "flat-cache": { - "version": "2.0.1", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true - }, - "levn": { - "version": "0.3.0", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "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" - } - }, - "path-key": { - "version": "2.0.1", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "dev": true - }, - "regexpp": { - "version": "2.0.1", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "5.7.1", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - } - }, - "string-width": { - "version": "3.1.0", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "strip-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "dev": true - }, - "table": { - "version": "5.4.6", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - } - }, - "type-check": { - "version": "0.3.2", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "which": { - "version": "1.3.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "eslint-import-resolver-node": { - "version": "0.3.5", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-import-resolver-typescript": { - "version": "2.4.0", - "dev": true, - "requires": { - "debug": "^4.1.1", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "resolve": "^1.17.0", - "tsconfig-paths": "^3.9.0" - } - }, - "eslint-module-utils": { - "version": "2.6.2", - "dev": true, - "requires": { - "debug": "^3.2.7", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-import": { - "version": "2.24.0", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.5", - "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.4.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.3", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.4.1", - "dev": true, - "requires": { - "@babel/runtime": "^7.11.2", - "aria-query": "^4.2.2", - "array-includes": "^3.1.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.0.2", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.6", - "emoji-regex": "^9.0.0", - "has": "^1.0.3", - "jsx-ast-utils": "^3.1.0", - "language-tags": "^1.0.5" - }, - "dependencies": { - "emoji-regex": { - "version": "9.2.2", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "3.4.0", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" - } - }, - "eslint-plugin-react": { - "version": "7.24.0", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.2.0", - "dev": true, - "requires": {} - }, - "eslint-plugin-tailwind": { - "version": "0.2.1", - "dev": true, - "requires": { - "eslint-html-parser": "^1.0.1" - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "eventemitter3": { - "version": "2.0.3" - }, - "execa": { - "version": "5.1.1", - "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" - } - }, - "external-editor": { - "version": "3.1.0", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "dependencies": { - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } - } - }, - "fast-deep-equal": { - "version": "3.1.3" - }, - "fast-diff": { - "version": "1.2.0", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "dev": true, - "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", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fastq": { - "version": "1.11.1", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figures": { - "version": "2.0.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "filter-obj": { - "version": "1.1.0" - }, - "find-up": { - "version": "2.1.0", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.2", - "dev": true - }, - "fraction.js": { - "version": "4.1.1", - "dev": true - }, - "fs-extra": { - "version": "10.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "fuzzy": { - "version": "0.1.3" - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-nonce": { - "version": "1.0.1" - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "get-value": { - "version": "2.0.6" - }, - "glob": { - "version": "7.1.7", - "dev": true, - "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.1", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.0.4", - "dev": true, - "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": { - "ignore": { - "version": "5.1.8", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.6", - "dev": true - }, - "has": { - "version": "1.0.3", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "0.3.1", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0" - }, - "isobject": { - "version": "2.1.0", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4" - }, - "hex-color-regex": { - "version": "1.1.0", - "dev": true - }, - "history": { - "version": "4.10.1", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "requires": { - "react-is": "^16.7.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "dev": true - }, - "hsl-regex": { - "version": "1.0.0", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "dev": true - }, - "html-tags": { - "version": "3.1.0", - "dev": true - }, - "htmlparser2": { - "version": "3.10.1", - "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "husky": { - "version": "7.0.1", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "immer": { - "version": "9.0.5" - }, - "import-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "import-from": "^3.0.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-from": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "inquirer": { - "version": "6.5.2", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true - }, - "mimic-fn": { - "version": "1.2.0", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "invariant": { - "version": "2.2.4", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6" - }, - "is-callable": { - "version": "1.2.4", - "dev": true - }, - "is-color-stop": { - "version": "1.1.0", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.5.0", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.6", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "dev": true - }, - "is-stream": { - "version": "2.0.1", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "0.0.1" - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isobject": { - "version": "3.0.1" - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "language-subtag-registry": { - "version": "0.3.21", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.3", - "dev": true - }, - "lines-and-columns": { - "version": "1.1.6", - "dev": true - }, - "lint-staged": { - "version": "11.1.2", - "dev": true, - "requires": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "commander": { - "version": "7.2.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "listr2": { - "version": "3.11.0", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "dev": true - } - } - }, - "locate-path": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21" - }, - "lodash.chunk": { - "version": "4.2.0" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0" - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "lodash.topath": { - "version": "4.5.2", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "log-update": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "loose-envify": { - "version": "1.4.0", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "mini-create-react-context": { - "version": "0.4.1", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "modern-normalize": { - "version": "1.1.0", - "dev": true - }, - "moment": { - "version": "2.29.1" - }, - "mousetrap": { - "version": "1.6.5" - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "dev": true - }, - "nanoid": { - "version": "3.1.29" - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "dev": true - }, - "node-emoji": { - "version": "1.11.0", - "dev": true, - "requires": { - "lodash": "^4.17.21" - } - }, - "node-releases": { - "version": "1.1.77", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "object-assign": { - "version": "4.1.1" - }, - "object-hash": { - "version": "2.2.0", - "dev": true - }, - "object-inspect": { - "version": "1.11.0", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "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.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "object.fromentries": { - "version": "2.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "omit-deep": { - "version": "0.3.0", - "requires": { - "is-plain-object": "^2.0.1", - "unset-value": "^0.1.1" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.4.2", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "optionator": { - "version": "0.9.1", - "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-tmpdir": { - "version": "1.0.2", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "3.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7" - }, - "path-to-regexp": { - "version": "1.8.0", - "requires": { - "isarray": "0.0.1" - } - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picocolors": { - "version": "0.2.1" - }, - "picomatch": { - "version": "2.3.0", - "dev": true - }, - "pify": { - "version": "2.3.0" - }, - "pkg-dir": { - "version": "2.0.0", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "pkg-up": { - "version": "2.0.0", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "postcss": { - "version": "8.3.9", - "requires": { - "nanoid": "^3.1.28", - "picocolors": "^0.2.1", - "source-map-js": "^0.6.2" - } - }, - "postcss-import": { - "version": "14.0.2", - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-js": { - "version": "3.0.3", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1", - "postcss": "^8.1.6" - } - }, - "postcss-load-config": { - "version": "3.1.0", - "dev": true, - "requires": { - "import-cwd": "^3.0.0", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "postcss-nested": { - "version": "5.0.6", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.6" - } - }, - "postcss-selector-parser": { - "version": "6.0.6", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.1.0" - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "prettier": { - "version": "2.3.2", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "dev": true - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "purgecss": { - "version": "4.0.3", - "dev": true, - "requires": { - "commander": "^6.0.0", - "glob": "^7.0.0", - "postcss": "^8.2.1", - "postcss-selector-parser": "^6.0.2" - } - }, - "query-string": { - "version": "7.0.1", - "requires": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "dev": true - }, - "react": { - "version": "17.0.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dnd": { - "version": "15.1.1", - "requires": { - "@react-dnd/invariant": "3.0.0", - "@react-dnd/shallowequal": "3.0.0", - "dnd-core": "15.1.1", - "fast-deep-equal": "^3.1.3", - "hoist-non-react-statics": "^3.3.2" - } - }, - "react-dnd-html5-backend": { - "version": "15.1.2", - "requires": { - "dnd-core": "15.1.1" - } - }, - "react-dnd-touch-backend": { - "version": "15.1.1", - "requires": { - "@react-dnd/invariant": "3.0.0", - "dnd-core": "15.1.1" - } - }, - "react-dom": { - "version": "17.0.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-error-boundary": { - "version": "3.1.3", - "requires": { - "@babel/runtime": "^7.12.5" - } - }, - "react-is": { - "version": "16.13.1" - }, - "react-refresh": { - "version": "0.10.0", - "dev": true - }, - "react-remove-scroll": { - "version": "2.4.3", - "requires": { - "react-remove-scroll-bar": "^2.1.0", - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0", - "use-callback-ref": "^1.2.3", - "use-sidecar": "^1.0.1" - } - }, - "react-remove-scroll-bar": { - "version": "2.2.0", - "requires": { - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0" - } - }, - "react-router": { - "version": "5.2.0", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-dom": { - "version": "5.2.0", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-style-singleton": { - "version": "2.1.1", - "requires": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^1.0.0" - } - }, - "read-cache": { - "version": "1.0.0", - "requires": { - "pify": "^2.3.0" - } - }, - "read-pkg": { - "version": "3.0.0", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "3.0.0", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reduce-css-calc": { - "version": "2.1.8", - "dev": true, - "requires": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "dev": true - } - } - }, - "redux": { - "version": "4.1.2", - "requires": { - "@babel/runtime": "^7.9.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9" - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "rename-keys": { - "version": "1.2.0" - }, - "require-directory": { - "version": "2.1.1", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "dev": true - }, - "resolve-pathname": { - "version": "3.0.0" - }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rgb-regex": { - "version": "1.0.1", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.58.0", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-analyzer": { - "version": "4.0.0", - "dev": true - }, - "rollup-plugin-visualizer": { - "version": "5.5.2", - "dev": true, - "requires": { - "nanoid": "^3.1.22", - "open": "^7.4.2", - "source-map": "^0.7.3", - "yargs": "^16.2.0" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "dev": true - } - } - }, - "run-async": { - "version": "2.4.1", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rxjs": { - "version": "6.6.7", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true - }, - "scheduler": { - "version": "0.20.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "6.3.0", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "dev": true - } - } - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "slugify": { - "version": "1.6.0" - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "source-map-js": { - "version": "0.6.2" - }, - "spdx-correct": { - "version": "3.1.1", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.10", - "dev": true - }, - "split-on-first": { - "version": "1.1.0" - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "strict-uri-encode": { - "version": "2.0.0" - }, - "string_decoder": { - "version": "1.3.0", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "dev": true - } - } - }, - "string-argv": { - "version": "0.3.1", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "stringify-object": { - "version": "3.3.0", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgson": { - "version": "4.1.0", - "requires": { - "deep-rename-keys": "^0.2.1", - "omit-deep": "0.3.0", - "xml-reader": "2.4.3" - } - }, - "table": { - "version": "6.7.1", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.2", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - } - } - }, - "tailwindcss": { - "version": "2.2.16", - "dev": true, - "requires": { - "arg": "^5.0.1", - "bytes": "^3.0.0", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "color": "^4.0.1", - "cosmiconfig": "^7.0.1", - "detective": "^5.2.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.7", - "fs-extra": "^10.0.0", - "glob-parent": "^6.0.1", - "html-tags": "^3.1.0", - "is-color-stop": "^1.1.0", - "is-glob": "^4.0.1", - "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", - "modern-normalize": "^1.1.0", - "node-emoji": "^1.11.0", - "normalize-path": "^3.0.0", - "object-hash": "^2.2.0", - "postcss-js": "^3.0.3", - "postcss-load-config": "^3.1.0", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.6", - "postcss-value-parser": "^4.1.0", - "pretty-hrtime": "^1.0.3", - "purgecss": "^4.0.3", - "quick-lru": "^5.1.1", - "reduce-css-calc": "^2.1.8", - "resolve": "^1.20.0", - "tmp": "^0.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "tailwindcss-theming": { - "version": "3.0.0-beta.3", - "dev": true, - "requires": { - "@ctrl/tinycolor": "^3.1.4", - "lodash": "^4.17.20" - } - }, - "tailwindcss-touch": { - "version": "1.0.1", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "through": { - "version": "2.3.8", - "dev": true - }, - "tiny-invariant": { - "version": "1.1.0" - }, - "tiny-warning": { - "version": "1.0.3" - }, - "tmp": { - "version": "0.2.1", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "transformation-matrix": { - "version": "2.1.1" - }, - "tsconfig-paths": { - "version": "3.10.1", - "dev": true, - "requires": { - "json5": "^2.2.0", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - } - }, - "tslib": { - "version": "1.14.1" - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - }, - "typescript": { - "version": "4.3.5", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "universalify": { - "version": "2.0.0", - "dev": true - }, - "unset-value": { - "version": "0.1.2", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - } - }, - "urbit-ob": { - "version": "5.0.1", - "requires": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "use-callback-ref": { - "version": "1.2.5", - "requires": {} - }, - "use-sidecar": { - "version": "1.0.5", - "requires": { - "detect-node-es": "^1.1.0", - "tslib": "^1.9.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-equal": { - "version": "1.0.1" - }, - "vite": { - "version": "2.6.7", - "dev": true, - "requires": { - "esbuild": "^0.13.2", - "fsevents": "~2.3.2", - "postcss": "^8.3.8", - "resolve": "^1.20.0", - "rollup": "^2.57.0" - } - }, - "vite-plugin-html-config": { - "version": "1.0.5", - "dev": true, - "requires": {} - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "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" - } - }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "write": { - "version": "1.0.3", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "xml-lexer": { - "version": "0.2.2", - "requires": { - "eventemitter3": "^2.0.0" - } - }, - "xml-reader": { - "version": "2.4.3", - "requires": { - "eventemitter3": "^2.0.0", - "xml-lexer": "^0.2.2" - } - }, - "xtend": { - "version": "4.0.2", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "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", - "dev": true - }, - "zustand": { - "version": "3.5.7", - "requires": {} - } - } -} diff --git a/pkg/grid/package.json b/pkg/grid/package.json deleted file mode 100644 index daf494b02..000000000 --- a/pkg/grid/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "name": "landscape", - "version": "0.0.0", - "private": true, - "scripts": { - "dev": "vite", - "mock": "vite --mode mock", - "build:mock": "tsc && vite build --mode mock", - "build:profile": "tsc && vite build --mode profile", - "build": "tsc && vite build", - "serve": "vite preview", - "lint": "eslint --cache \"**/*.{js,jsx,ts,tsx}\"", - "lint:fix": "npm run lint -- --fix", - "test": "tsc --noEmit", - "tsc": "tsc --noEmit" - }, - "dependencies": { - "@radix-ui/react-checkbox": "^0.1.5", - "@fingerprintjs/fingerprintjs": "^3.3.3", - "@radix-ui/react-dialog": "^0.0.20", - "@radix-ui/react-dropdown-menu": "^0.0.23", - "@radix-ui/react-icons": "^1.1.0", - "@radix-ui/react-polymorphic": "^0.0.13", - "@radix-ui/react-portal": "^0.0.15", - "@radix-ui/react-toggle": "^0.0.10", - "@tlon/sigil-js": "^1.4.4", - "@types/lodash": "^4.14.172", - "@urbit/api": "^2.1.0", - "@urbit/http-api": "^2.1.0", - "big-integer": "^1.6.48", - "classnames": "^2.3.1", - "clipboard-copy": "^4.0.1", - "color2k": "^1.2.4", - "fuzzy": "^0.1.3", - "immer": "^9.0.5", - "lodash": "^4.17.21", - "moment": "^2.29.1", - "mousetrap": "^1.6.5", - "postcss-import": "^14.0.2", - "query-string": "^7.0.1", - "react": "^17.0.2", - "react-dnd": "^15.1.1", - "react-dnd-html5-backend": "^15.1.2", - "react-dnd-touch-backend": "^15.1.1", - "react-dom": "^17.0.2", - "react-error-boundary": "^3.1.3", - "react-router-dom": "^5.2.0", - "slugify": "^1.6.0", - "urbit-ob": "^5.0.1", - "zustand": "^3.5.7" - }, - "devDependencies": { - "@tailwindcss/aspect-ratio": "^0.2.1", - "@types/lodash": "^4.14.172", - "@types/mousetrap": "^1.6.8", - "@types/node": "^16.7.9", - "@types/react": "^16.0.0", - "@types/react-dom": "^16.0.0", - "@types/react-router-dom": "^5.1.8", - "@typescript-eslint/eslint-plugin": "^4.26.1", - "@typescript-eslint/parser": "^4.26.1", - "@urbit/vite-plugin-urbit": "^0.7.1", - "@vitejs/plugin-react-refresh": "^1.3.1", - "autoprefixer": "^10.3.7", - "eslint": "^7.28.0", - "eslint-config-airbnb": "^18.2.1", - "eslint-config-prettier": "^8.3.0", - "eslint-import-resolver-typescript": "^2.4.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-prettier": "^3.4.0", - "eslint-plugin-react": "^7.24.0", - "eslint-plugin-react-hooks": "^4.2.0", - "eslint-plugin-tailwind": "^0.2.1", - "husky": "^7.0.0", - "lint-staged": "^11.1.2", - "postcss": "^8.3.9", - "prettier": "^2.3.2", - "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-visualizer": "^5.5.2", - "tailwindcss": "^2.2.16", - "tailwindcss-theming": "^3.0.0-beta.3", - "tailwindcss-touch": "^1.0.1", - "typescript": "^4.3.2", - "vite": "^2.6.7", - "vite-plugin-html-config": "^1.0.5" - }, - "lint-staged": { - "*.{js,jsx,ts,tsx}": [ - "npm run lint:fix", - "prettier --write" - ], - "*.+{json,css,md}": "prettier --write" - } -} diff --git a/pkg/grid/postcss.config.js b/pkg/grid/postcss.config.js deleted file mode 100644 index 44f2e62f6..000000000 --- a/pkg/grid/postcss.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - plugins: [ - require('postcss-import'), - require('tailwindcss'), - require('autoprefixer'), - ] -} diff --git a/pkg/grid/src/app.tsx b/pkg/grid/src/app.tsx deleted file mode 100644 index e973d8922..000000000 --- a/pkg/grid/src/app.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import React, { useEffect } from 'react'; -import Mousetrap from 'mousetrap'; -import { BrowserRouter, Switch, Route, useHistory, useLocation } from 'react-router-dom'; -import { ErrorBoundary } from 'react-error-boundary'; -import FingerprintJS from '@fingerprintjs/fingerprintjs'; -import { Grid } from './pages/Grid'; -import useDocketState from './state/docket'; -import { PermalinkRoutes } from './pages/PermalinkRoutes'; -import useKilnState from './state/kiln'; -import useContactState from './state/contact'; -import api from './state/api'; -import { useMedia } from './logic/useMedia'; -import { useHarkStore } from './state/hark'; -import { useSettingsState, useTheme } from './state/settings'; -import { useBrowserId, useLocalState } from './state/local'; -import { ErrorAlert } from './components/ErrorAlert'; -import { useErrorHandler } from './logic/useErrorHandler'; - -const getNoteRedirect = (path: string) => { - if (path.startsWith('/desk/')) { - const [, , desk] = path.split('/'); - return `/apps/${desk}`; - } - - if (path.startsWith('/grid/')) { - // Handle links to grid features (preferences, etc) - const route = path - .split('/') - .filter((el) => el !== 'grid') - .join('/'); - return route; - } - return ''; -}; - -const getId = async () => { - const fpPromise = FingerprintJS.load(); - const fp = await fpPromise; - const result = await fp.get(); - return result.visitorId; -}; - -const AppRoutes = () => { - const { push } = useHistory(); - const { search } = useLocation(); - const handleError = useErrorHandler(); - const browserId = useBrowserId(); - - useEffect(() => { - getId().then((value) => { - useLocalState.setState({ browserId: value }); - }); - }, [browserId]); - - useEffect(() => { - const query = new URLSearchParams(search); - if (query.has('grid-note')) { - const redir = getNoteRedirect(query.get('grid-note')!); - push(redir); - } - }, [search]); - - const theme = useTheme(); - const isDarkMode = useMedia('(prefers-color-scheme: dark)'); - - useEffect(() => { - if ((isDarkMode && theme === 'auto') || theme === 'dark') { - document.body.classList.add('dark'); - useLocalState.setState({ currentTheme: 'dark' }); - } else { - document.body.classList.remove('dark'); - useLocalState.setState({ currentTheme: 'light' }); - } - }, [isDarkMode, theme]); - - useEffect( - handleError(() => { - window.name = 'grid'; - - const { initialize: settingsInitialize, fetchAll } = useSettingsState.getState(); - settingsInitialize(api); - fetchAll(); - - const { fetchDefaultAlly, fetchAllies, fetchCharges } = useDocketState.getState(); - fetchDefaultAlly(); - fetchCharges(); - fetchAllies(); - - const { fetchVats, fetchLag } = useKilnState.getState(); - fetchVats(); - fetchLag(); - - useContactState.getState().initialize(api); - useHarkStore.getState().initialize(api); - - Mousetrap.bind(['command+/', 'ctrl+/'], () => { - push('/leap/search'); - }); - }), - [] - ); - - return ( - - - - - ); -}; - -export function App() { - const base = import.meta.env.MODE === 'mock' ? undefined : '/apps/grid'; - - return ( - window.location.reload()}> - - - - - ); -} diff --git a/pkg/grid/src/assets/android-chrome-512x512.png b/pkg/grid/src/assets/android-chrome-512x512.png deleted file mode 100644 index cbccf9f91..000000000 Binary files a/pkg/grid/src/assets/android-chrome-512x512.png and /dev/null differ diff --git a/pkg/grid/src/assets/apple-touch-icon.png b/pkg/grid/src/assets/apple-touch-icon.png deleted file mode 100644 index 33e361ced..000000000 Binary files a/pkg/grid/src/assets/apple-touch-icon.png and /dev/null differ diff --git a/pkg/grid/src/assets/favicon.ico b/pkg/grid/src/assets/favicon.ico deleted file mode 100644 index 2cd747c80..000000000 Binary files a/pkg/grid/src/assets/favicon.ico and /dev/null differ diff --git a/pkg/grid/src/assets/favicon.svg b/pkg/grid/src/assets/favicon.svg deleted file mode 100644 index 1f34862b8..000000000 --- a/pkg/grid/src/assets/favicon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/pkg/grid/src/assets/go.png b/pkg/grid/src/assets/go.png deleted file mode 100644 index 77bd1f958..000000000 Binary files a/pkg/grid/src/assets/go.png and /dev/null differ diff --git a/pkg/grid/src/assets/help-and-support.svg b/pkg/grid/src/assets/help-and-support.svg deleted file mode 100644 index 020dbfeba..000000000 --- a/pkg/grid/src/assets/help-and-support.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/grid/src/assets/manifest.json b/pkg/grid/src/assets/manifest.json deleted file mode 100644 index 5c5876c10..000000000 --- a/pkg/grid/src/assets/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "urbit", - "short_name": "urbit", - "icons": [ - { - "src": "/apps/grid/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/pkg/grid/src/assets/safari-pinned-tab.svg b/pkg/grid/src/assets/safari-pinned-tab.svg deleted file mode 100644 index c3de016ef..000000000 --- a/pkg/grid/src/assets/safari-pinned-tab.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - - - - diff --git a/pkg/grid/src/assets/system.png b/pkg/grid/src/assets/system.png deleted file mode 100644 index 09f6a4e60..000000000 Binary files a/pkg/grid/src/assets/system.png and /dev/null differ diff --git a/pkg/grid/src/components/AppInfo.tsx b/pkg/grid/src/components/AppInfo.tsx deleted file mode 100644 index a23597602..000000000 --- a/pkg/grid/src/components/AppInfo.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import { chadIsRunning, Treaty, Vat } from '@urbit/api'; -import clipboardCopy from 'clipboard-copy'; -import React, { FC, useCallback, useState } from 'react'; -import cn from 'classnames'; -import { Button, PillButton } from './Button'; -import { Dialog, DialogClose, DialogContent, DialogTrigger } from './Dialog'; -import { DocketHeader } from './DocketHeader'; -import { Spinner } from './Spinner'; -import { VatMeta } from './VatMeta'; -import useDocketState, { ChargeWithDesk, useTreaty } from '../state/docket'; -import { getAppHref, getAppName } from '../state/util'; -import { addRecentApp } from '../nav/search/Home'; -import { TreatyMeta } from './TreatyMeta'; - -type InstallStatus = 'uninstalled' | 'installing' | 'installed'; - -type App = ChargeWithDesk | Treaty; -interface AppInfoProps { - docket: App; - vat?: Vat; - className?: string; -} - -function getInstallStatus(docket: App): InstallStatus { - if (!('chad' in docket)) { - return 'uninstalled'; - } - if (chadIsRunning(docket.chad)) { - return 'installed'; - } - if ('install' in docket.chad) { - return 'installing'; - } - return 'uninstalled'; -} - -function getRemoteDesk(docket: App, vat?: Vat) { - if (vat && vat.arak.rail) { - const { ship, desk } = vat.arak.rail; - return [ship, desk]; - } - if ('chad' in docket) { - return ['', docket.desk]; - } - const { ship, desk } = docket; - return [ship, desk]; -} - -export const AppInfo: FC = ({ docket, vat, className }) => { - const installStatus = getInstallStatus(docket); - const [ship, desk] = getRemoteDesk(docket, vat); - const publisher = vat?.arak?.rail?.publisher ?? ship; - const [copied, setCopied] = useState(false); - const treaty = useTreaty(ship, desk); - - const installApp = async () => { - if (installStatus === 'installed') { - return; - } - await useDocketState.getState().installDocket(ship, desk); - }; - - const copyApp = useCallback(() => { - setCopied(true); - clipboardCopy(`web+urbitgraph://${publisher}/${desk}`); - - setTimeout(() => { - setCopied(false); - }, 1250); - }, [publisher, desk]); - - const installing = installStatus === 'installing'; - - if (!docket) { - // TODO: maybe replace spinner with skeletons - return ( -
- -
- ); - } - - return ( -
- -
- {installStatus === 'installed' && ( - addRecentApp(docket.desk)} - > - Open App - - )} - {installStatus !== 'installed' && ( - - - {installing ? ( - <> - - Installing... - - ) : ( - 'Get App' - )} - - -

Install “{getAppName(docket)}”

-

- This application will be able to view and interact with the contents of your - Urbit. Only install if you trust the developer. -

-
- - Cancel - - - Get “{getAppName(docket)}” - -
-
-
- )} - - {!copied && 'Copy App Link'} - {copied && 'copied!'} - -
-
-
- {vat ? ( - <> -
- - - ) : null} - {!treaty ? null : ( - <> -
- - - )} -
-
- ); -}; diff --git a/pkg/grid/src/components/AppLink.tsx b/pkg/grid/src/components/AppLink.tsx deleted file mode 100644 index 7ff8547ec..000000000 --- a/pkg/grid/src/components/AppLink.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import classNames from 'classnames'; -import React, { HTMLProps, ReactNode } from 'react'; -import { Link, LinkProps } from 'react-router-dom'; -import { DocketWithDesk } from '../state/docket'; -import { getAppHref, getAppName } from '../state/util'; -import { DocketImage } from './DocketImage'; - -type Sizes = 'xs' | 'small' | 'default'; -type LinkOrAnchorProps = { - [P in keyof LinkProps & - keyof HTMLProps]?: LinkProps[P] extends HTMLProps[P] - ? LinkProps[P] - : never; -}; - -export type AppLinkProps = Omit & { - app: T; - size?: Sizes; - selected?: boolean; - to?: (app: T) => LinkProps['to'] | undefined; -}; - -export const AppLink = ({ - app, - to, - size = 'default', - selected = false, - className, - ...props -}: AppLinkProps) => { - const linkTo = to?.(app); - const linkClassnames = classNames( - 'flex items-center default-ring rounded-lg', - size === 'default' && 'ring-offset-2', - size !== 'xs' && 'p-2', - size === 'xs' && 'p-1', - selected && 'bg-blue-200', - className - ); - const link = (children: ReactNode) => - linkTo ? ( - - {children} - - ) : ( - - {children} - - ); - return link( - <> - -
-

{getAppName(app)}

- {app.info && size === 'default' &&

{app.info}

} -
- - ); -}; diff --git a/pkg/grid/src/components/AppList.tsx b/pkg/grid/src/components/AppList.tsx deleted file mode 100644 index 0764bab47..000000000 --- a/pkg/grid/src/components/AppList.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, { MouseEvent, useCallback } from 'react'; -import classNames from 'classnames'; -import { MatchItem } from '../nav/Nav'; -import { useRecentsStore } from '../nav/search/Home'; -import { AppLink, AppLinkProps } from './AppLink'; -import { DocketWithDesk } from '../state/docket'; -import { getAppName } from '../state/util'; - -type AppListProps = { - apps: T[]; - labelledBy: string; - matchAgainst?: MatchItem; - onClick?: (e: MouseEvent, app: T) => void; - listClass?: string; -} & Omit, 'app' | 'onClick'>; - -export function appMatches(target: DocketWithDesk, match?: MatchItem): boolean { - if (!match) { - return false; - } - - const matchValue = match.display || match.value; - return target.title === matchValue || target.desk === matchValue; -} - -export const AppList = ({ - apps, - labelledBy, - matchAgainst, - onClick, - listClass, - size = 'default', - ...props -}: AppListProps) => { - const addRecentApp = useRecentsStore((state) => state.addRecentApp); - const selected = useCallback((app: T) => appMatches(app, matchAgainst), [matchAgainst]); - - return ( -
    - {apps.map((app) => ( -
  • - { - addRecentApp(app.desk); - onClick?.(e, app); - }} - /> -
  • - ))} -
- ); -}; diff --git a/pkg/grid/src/components/Attribute.tsx b/pkg/grid/src/components/Attribute.tsx deleted file mode 100644 index 1f1309662..000000000 --- a/pkg/grid/src/components/Attribute.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import cn from 'classnames'; -import { capitalize } from 'lodash'; - -interface AttributeProps { - attr: string; - children: React.ReactNode; - title?: string; - className?: string; -} - -export const Attribute = ({ attr, children, title, className }: AttributeProps) => ( -
-

{title || capitalize(attr)}

-

{children}

-
-); diff --git a/pkg/grid/src/components/Avatar.tsx b/pkg/grid/src/components/Avatar.tsx deleted file mode 100644 index 2f3991530..000000000 --- a/pkg/grid/src/components/Avatar.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import classNames from 'classnames'; -import React, { useMemo } from 'react'; -import { sigil, reactRenderer } from '@tlon/sigil-js'; -import { deSig, Contact } from '@urbit/api'; -import { darken, lighten, parseToHsla } from 'color2k'; -import { useCurrentTheme } from '../state/local'; -import { normalizeUrbitColor } from '../state/util'; - -export type AvatarSizes = 'xs' | 'small' | 'default'; - -interface AvatarProps extends Contact { - shipName: string; - size: AvatarSizes; - className?: string; -} - -interface AvatarMeta { - classes: string; - size: number; -} - -const sizeMap: Record = { - xs: { classes: 'w-6 h-6 rounded', size: 12 }, - small: { classes: 'w-8 h-8 rounded-lg', size: 16 }, - default: { classes: 'w-12 h-12 rounded-lg', size: 24 } -}; - -const foregroundFromBackground = (background: string): 'black' | 'white' => { - const rgb = { - r: parseInt(background.slice(1, 3), 16), - g: parseInt(background.slice(3, 5), 16), - b: parseInt(background.slice(5, 7), 16) - }; - const brightness = (299 * rgb.r + 587 * rgb.g + 114 * rgb.b) / 1000; - const whiteBrightness = 255; - - return whiteBrightness - brightness < 50 ? 'black' : 'white'; -}; - -const emptyContact: Contact = { - nickname: '', - bio: '', - status: '', - color: '#000000', - avatar: null, - cover: null, - groups: [], - 'last-updated': 0 -}; - -function themeAdjustColor(color: string, theme: 'light' | 'dark'): string { - const hsla = parseToHsla(color); - const lightness = hsla[2]; - - if (lightness <= 0.1 && theme === 'dark') { - return lighten(color, 0.1 - lightness); - } - - if (lightness >= 0.9 && theme === 'light') { - return darken(color, lightness - 0.9); - } - - return color; -} - -export const Avatar = ({ size, className, ...ship }: AvatarProps) => { - const currentTheme = useCurrentTheme(); - const { shipName, color, avatar } = { ...emptyContact, ...ship }; - const { classes, size: sigilSize } = sizeMap[size]; - const adjustedColor = themeAdjustColor(normalizeUrbitColor(color), currentTheme); - const foregroundColor = foregroundFromBackground(adjustedColor); - const sigilElement = useMemo(() => { - if (shipName.match(/[_^]/) || shipName.length > 14) { - return null; - } - - return sigil({ - patp: deSig(shipName) || 'zod', - renderer: reactRenderer, - size: sigilSize, - icon: true, - colors: [adjustedColor, foregroundColor] - }); - }, [shipName, adjustedColor, foregroundColor]); - - if (avatar) { - return ; - } - - return ( -
- {sigilElement} -
- ); -}; diff --git a/pkg/grid/src/components/Button.tsx b/pkg/grid/src/components/Button.tsx deleted file mode 100644 index d38aeef3f..000000000 --- a/pkg/grid/src/components/Button.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from 'react'; -import type * as Polymorphic from '@radix-ui/react-polymorphic'; -import classNames from 'classnames'; - -type ButtonVariant = - | 'primary' - | 'secondary' - | 'caution' - | 'destructive' - | 'alt-primary' - | 'alt-secondary'; - -type PolymorphicButton = Polymorphic.ForwardRefComponent< - 'button', - { - variant?: ButtonVariant; - } ->; - -const variants: Record = { - primary: 'text-white bg-black', - secondary: 'text-black bg-gray-100', - caution: 'text-white bg-orange-400', - destructive: 'text-white bg-red-500', - 'alt-primary': 'text-white bg-blue-400 ring-blue-300', - 'alt-secondary': 'text-blue-400 bg-blue-50' -}; - -export const Button = React.forwardRef( - ({ as: Comp = 'button', variant = 'primary', children, className, ...props }, ref) => { - return ( - - {children} - - ); - } -) as PolymorphicButton; - -export const PillButton = React.forwardRef(({ className, children, ...props }, ref) => ( - -)) as PolymorphicButton; diff --git a/pkg/grid/src/components/Checkbox.tsx b/pkg/grid/src/components/Checkbox.tsx deleted file mode 100644 index 5f4de6be4..000000000 --- a/pkg/grid/src/components/Checkbox.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { useState } from 'react'; -import classNames from 'classnames'; -import * as RadixCheckbox from '@radix-ui/react-checkbox'; -import { CheckIcon } from '@radix-ui/react-icons'; - -export const Checkbox: React.FC = ({ - defaultChecked, - checked, - onCheckedChange, - disabled, - className, - children -}) => { - const [on, setOn] = useState(defaultChecked); - const isControlled = !!onCheckedChange; - const proxyChecked = isControlled ? checked : on; - const proxyOnCheckedChange = isControlled ? onCheckedChange : setOn; - - return ( -
- - - - - - -
- ); -}; diff --git a/pkg/grid/src/components/DeskLink.tsx b/pkg/grid/src/components/DeskLink.tsx deleted file mode 100644 index 5e2ec45c1..000000000 --- a/pkg/grid/src/components/DeskLink.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React, { ReactNode } from 'react'; -import { Link, useHistory } from 'react-router-dom'; -import { useCharge } from '../state/docket'; -import { getAppHref } from '../state/util'; - -interface DeskLinkProps extends React.AnchorHTMLAttributes { - desk: string; - to?: string; - children?: ReactNode; - className?: string; -} - -export function DeskLink({ children, className, desk, to = '', ...rest }: DeskLinkProps) { - const { push } = useHistory(); - const charge = useCharge(desk); - - if (!charge) { - return null; - } - if (desk === window.desk) { - return ( - - {children} - - ); - } - const href = `${getAppHref(charge.href)}${to}`; - return ( - push('/')} - > - {children} - - ); -} diff --git a/pkg/grid/src/components/Dialog.tsx b/pkg/grid/src/components/Dialog.tsx deleted file mode 100644 index 7876552e2..000000000 --- a/pkg/grid/src/components/Dialog.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React, { FC } from 'react'; -import * as DialogPrimitive from '@radix-ui/react-dialog'; -import type * as Polymorphic from '@radix-ui/react-polymorphic'; -import classNames from 'classnames'; - -export const Dialog: FC = ({ children, ...props }) => { - return ( - - - {children} - - ); -}; - -type DialogContentComponent = Polymorphic.ForwardRefComponent< - Polymorphic.IntrinsicElement, - Polymorphic.OwnProps & { - containerClass?: string; - showClose?: boolean; - } ->; - -export const DialogContent = React.forwardRef( - ({ showClose = true, containerClass, children, className, ...props }, forwardedRef) => ( - -
- {children} - {showClose && ( - - - - - - - )} -
-
- ) -) as DialogContentComponent; - -export const DialogTrigger = DialogPrimitive.Trigger; -export const DialogClose = DialogPrimitive.Close; diff --git a/pkg/grid/src/components/DocketHeader.tsx b/pkg/grid/src/components/DocketHeader.tsx deleted file mode 100644 index f8db3f7e6..000000000 --- a/pkg/grid/src/components/DocketHeader.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { DocketImage } from './DocketImage'; -import { getAppName } from '../state/util'; -import { DocketWithDesk } from '../state/docket'; - -interface DocketHeaderProps { - docket: DocketWithDesk; - children?: React.ReactNode; -} - -export function DocketHeader(props: DocketHeaderProps) { - const { docket, children } = props; - const { info, image, color } = docket; - - return ( -
- -
-

{getAppName(docket)}

- {info &&

{info}

} -
- {children} -
- ); -} diff --git a/pkg/grid/src/components/DocketImage.tsx b/pkg/grid/src/components/DocketImage.tsx deleted file mode 100644 index 682123426..000000000 --- a/pkg/grid/src/components/DocketImage.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React, { useState } from 'react'; -import { Docket } from '@urbit/api'; -import cn from 'classnames'; -import { useTileColor } from '../tiles/useTileColor'; - -type DocketImageSizes = 'xs' | 'small' | 'default' | 'full'; - -interface DocketImageProps extends Pick { - className?: string; - size?: DocketImageSizes; -} - -const sizeMap: Record = { - xs: 'w-6 h-6 mr-2 rounded', - small: 'w-8 h-8 mr-3 rounded-md', - default: 'w-12 h-12 mr-3 rounded-lg', - full: 'w-20 h-20 md:w-32 md:h-32 rounded-2xl' -}; - -export function DocketImage({ color, image, className = '', size = 'full' }: DocketImageProps) { - const { tileColor } = useTileColor(color); - const [imageError, setImageError] = useState(false); - - return ( -
- {image && !imageError && ( - setImageError(true)} - /> - )} -
- ); -} diff --git a/pkg/grid/src/components/ErrorAlert.tsx b/pkg/grid/src/components/ErrorAlert.tsx deleted file mode 100644 index 93d18bc5a..000000000 --- a/pkg/grid/src/components/ErrorAlert.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react'; -import cn from 'classnames'; -import { Dialog, DialogClose, DialogContent } from './Dialog'; -import { Button } from './Button'; - -interface ErrorAlertProps { - error: Error; - resetErrorBoundary: () => void; - className?: string; -} - -const SubmitIssue = ({ error }: { error: Error }) => { - const title = error.message; - const body = `\`\`\`%0A${error.stack?.replaceAll('\n', '%0A')}%0A\`\`\``; - - return ( - - ); -}; - -export const ErrorAlert = ({ error, resetErrorBoundary, className }: ErrorAlertProps) => { - return ( - resetErrorBoundary()}> - -

- Encountered error: - {error.message} -

- {error.stack && ( -
-
{error.stack}
-
- )} -
- - Try Again - - -
-
-
- ); -}; diff --git a/pkg/grid/src/components/ProviderLink.tsx b/pkg/grid/src/components/ProviderLink.tsx deleted file mode 100644 index 13d39fd5e..000000000 --- a/pkg/grid/src/components/ProviderLink.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import classNames from 'classnames'; -import React from 'react'; -import { Link, LinkProps } from 'react-router-dom'; -import { Contact, Provider } from '@urbit/api'; -import { ShipName } from './ShipName'; -import { Avatar, AvatarSizes } from './Avatar'; - -export type ProviderLinkProps = Omit & { - provider: { shipName: string } & Contact; - size?: AvatarSizes; - selected?: boolean; - to?: (p: Provider) => LinkProps['to']; -}; - -export const ProviderLink = ({ - provider, - to, - selected = false, - size = 'default', - className, - ...props -}: ProviderLinkProps) => { - const small = size === 'small' || size === 'xs'; - return ( - - -
-
- - {provider.nickname} -
- {provider.status && size === 'default' &&

{provider.status}

} -
- - ); -}; diff --git a/pkg/grid/src/components/ProviderList.tsx b/pkg/grid/src/components/ProviderList.tsx deleted file mode 100644 index 47d32adcf..000000000 --- a/pkg/grid/src/components/ProviderList.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { MouseEvent, useCallback } from 'react'; -import { Contact, Provider } from '@urbit/api'; -import classNames from 'classnames'; -import { MatchItem } from '../nav/Nav'; -import { useRecentsStore } from '../nav/search/Home'; -import { ProviderLink, ProviderLinkProps } from './ProviderLink'; - -export type ProviderListProps = { - providers: ({ shipName: string } & Contact)[]; - labelledBy: string; - matchAgainst?: MatchItem; - onClick?: (e: MouseEvent, p: Provider) => void; - listClass?: string; -} & Omit; - -export function providerMatches(target: Provider, match?: MatchItem): boolean { - if (!match) { - return false; - } - - const matchValue = match.display || match.value; - return target.nickname === matchValue || target.shipName === matchValue; -} - -export const ProviderList = ({ - providers, - labelledBy, - matchAgainst, - onClick, - listClass, - size = 'default', - ...props -}: ProviderListProps) => { - const addRecentDev = useRecentsStore((state) => state.addRecentDev); - const selected = useCallback( - (provider: Provider) => providerMatches(provider, matchAgainst), - [matchAgainst] - ); - - return ( -
    - {providers.map((p) => ( -
  • - { - addRecentDev(p.shipName); - if (onClick) { - onClick(e, p); - } - }} - /> -
  • - ))} -
- ); -}; diff --git a/pkg/grid/src/components/Setting.tsx b/pkg/grid/src/components/Setting.tsx deleted file mode 100644 index 10fd5b716..000000000 --- a/pkg/grid/src/components/Setting.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import classNames from 'classnames'; -import React, { FC, HTMLAttributes } from 'react'; -import slugify from 'slugify'; -import { useAsyncCall } from '../logic/useAsyncCall'; -import { Spinner } from './Spinner'; -import { Toggle } from './Toggle'; - -type SettingsProps = { - name: string; - on: boolean; - disabled?: boolean; - toggle: (open: boolean) => Promise; -} & HTMLAttributes; - -export const Setting: FC = ({ - name, - on, - disabled = false, - toggle, - className, - children -}) => { - const { status, call } = useAsyncCall(toggle); - const id = slugify(name); - - return ( -
-

- {name} {status === 'loading' && } -

-
- -
{children}
-
-
- ); -}; diff --git a/pkg/grid/src/components/ShipName.tsx b/pkg/grid/src/components/ShipName.tsx deleted file mode 100644 index 5ada5a372..000000000 --- a/pkg/grid/src/components/ShipName.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { cite } from '@urbit/api'; -import React, { HTMLAttributes } from 'react'; - -type ShipNameProps = { - name: string; -} & HTMLAttributes; - -export const ShipName = ({ name, ...props }: ShipNameProps) => { - const separator = /([_^-])/; - const citedName = cite(name); - - if (!citedName) { - return null; - } - - const parts = citedName.replace('~', '').split(separator); - const first = parts.shift(); - - return ( - - ~ - {first} - {parts.length > 1 && ( - <> - {parts.map((piece, index) => ( - - {piece} - - ))} - - )} - - ); -}; diff --git a/pkg/grid/src/components/Spinner.tsx b/pkg/grid/src/components/Spinner.tsx deleted file mode 100644 index 5e7579a1a..000000000 --- a/pkg/grid/src/components/Spinner.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import classNames from 'classnames'; -import React from 'react'; -import { SpinnerIcon } from './icons/SpinnerIcon'; - -export const Spinner = ({ className, ...props }: React.HTMLAttributes) => ( - -); diff --git a/pkg/grid/src/components/Toggle.tsx b/pkg/grid/src/components/Toggle.tsx deleted file mode 100644 index 06cb194f5..000000000 --- a/pkg/grid/src/components/Toggle.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import classNames from 'classnames'; -import React, { useState } from 'react'; -import * as RadixToggle from '@radix-ui/react-toggle'; -import type * as Polymorphic from '@radix-ui/react-polymorphic'; - -type ToggleComponent = Polymorphic.ForwardRefComponent< - Polymorphic.IntrinsicElement, - Polymorphic.OwnProps & { - loading?: boolean; - toggleClass?: string; - knobClass?: string; - } ->; - -export const Toggle = React.forwardRef( - ( - { defaultPressed, pressed, onPressedChange, disabled, className, toggleClass, loading = false }, - ref - ) => { - const [on, setOn] = useState(defaultPressed); - const isControlled = !!onPressedChange; - const proxyPressed = isControlled ? pressed : on; - const proxyOnPressedChange = isControlled ? onPressedChange : setOn; - const knobPosition = proxyPressed ? 18 : 2; - - return ( - - - - - - - ); - } -) as ToggleComponent; diff --git a/pkg/grid/src/components/TreatyMeta.tsx b/pkg/grid/src/components/TreatyMeta.tsx deleted file mode 100644 index 00974bb70..000000000 --- a/pkg/grid/src/components/TreatyMeta.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { daToDate, Treaty } from '@urbit/api'; - -import moment from 'moment'; -import { Attribute } from './Attribute'; - -const meta = ['license', 'website', 'version'] as const; - -export function TreatyMeta(props: { treaty: Treaty }) { - const { treaty } = props; - const { desk, ship, cass } = treaty; - return ( -
- - {ship}/{desk} - - - {moment(daToDate(cass.da)).format('YYYY.MM.DD')} - - {meta.map((d) => ( - - {treaty[d]} - - ))} -
- ); -} diff --git a/pkg/grid/src/components/VatMeta.tsx b/pkg/grid/src/components/VatMeta.tsx deleted file mode 100644 index f55351e41..000000000 --- a/pkg/grid/src/components/VatMeta.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { Vat } from '@urbit/api'; - -import { Attribute } from './Attribute'; - -export function VatMeta(props: { vat: Vat }) { - const { vat } = props; - const { desk, arak, cass, hash } = vat; - - const { desk: foreignDesk, ship, next } = arak.rail || {}; - const pluralUpdates = next?.length !== 1; - return ( -
- - {hash} - - - %{desk} - - {next && next.length > 0 ? ( - - {next.length} update{pluralUpdates ? 's are' : ' is'} pending a System Update - - ) : null} -
- ); -} diff --git a/pkg/grid/src/components/icons/Adjust.tsx b/pkg/grid/src/components/icons/Adjust.tsx deleted file mode 100644 index d9aef173a..000000000 --- a/pkg/grid/src/components/icons/Adjust.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -export const Adjust = (props: React.SVGProps) => ( - - - -); diff --git a/pkg/grid/src/components/icons/Bullet.tsx b/pkg/grid/src/components/icons/Bullet.tsx deleted file mode 100644 index a5a2075d7..000000000 --- a/pkg/grid/src/components/icons/Bullet.tsx +++ /dev/null @@ -1,7 +0,0 @@ -import React from 'react'; - -export const Bullet = (props: React.SVGProps) => ( - - - -); diff --git a/pkg/grid/src/components/icons/Cross.tsx b/pkg/grid/src/components/icons/Cross.tsx deleted file mode 100644 index 70c41ddb2..000000000 --- a/pkg/grid/src/components/icons/Cross.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -export const Cross = (props: React.SVGProps) => ( - - - -); diff --git a/pkg/grid/src/components/icons/Elbow.tsx b/pkg/grid/src/components/icons/Elbow.tsx deleted file mode 100644 index 6b50598f2..000000000 --- a/pkg/grid/src/components/icons/Elbow.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React, { HTMLAttributes } from 'react'; - -type ElbowProps = HTMLAttributes; - -export const Elbow = (props: ElbowProps) => ( - - - -); diff --git a/pkg/grid/src/components/icons/Interface.tsx b/pkg/grid/src/components/icons/Interface.tsx deleted file mode 100644 index e0866da7a..000000000 --- a/pkg/grid/src/components/icons/Interface.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -export const Interface = (props: React.SVGProps) => ( - - - -); diff --git a/pkg/grid/src/components/icons/LeftArrow.tsx b/pkg/grid/src/components/icons/LeftArrow.tsx deleted file mode 100644 index b6a98f8b5..000000000 --- a/pkg/grid/src/components/icons/LeftArrow.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React, { HTMLAttributes } from 'react'; - -type LeftArrowProps = HTMLAttributes; - -export const LeftArrow = (props: LeftArrowProps) => ( - - - -); diff --git a/pkg/grid/src/components/icons/Lock.tsx b/pkg/grid/src/components/icons/Lock.tsx deleted file mode 100644 index d67eb952a..000000000 --- a/pkg/grid/src/components/icons/Lock.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; - -export const Lock = (props: React.SVGProps) => ( - - - -); diff --git a/pkg/grid/src/components/icons/Notifications.tsx b/pkg/grid/src/components/icons/Notifications.tsx deleted file mode 100644 index c4cabc2dd..000000000 --- a/pkg/grid/src/components/icons/Notifications.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -export const Notifications = (props: React.SVGProps) => ( - - - -); diff --git a/pkg/grid/src/components/icons/SpinnerIcon.tsx b/pkg/grid/src/components/icons/SpinnerIcon.tsx deleted file mode 100644 index 405b2821d..000000000 --- a/pkg/grid/src/components/icons/SpinnerIcon.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; - -export const SpinnerIcon = (props: React.SVGProps) => ( - - - - -); diff --git a/pkg/grid/src/components/icons/System.tsx b/pkg/grid/src/components/icons/System.tsx deleted file mode 100644 index 0a8b1a1ac..000000000 --- a/pkg/grid/src/components/icons/System.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; - -export const System = (props: React.SVGProps) => ( - - - - -); diff --git a/pkg/grid/src/env.d.ts b/pkg/grid/src/env.d.ts deleted file mode 100644 index 2fda24a0d..000000000 --- a/pkg/grid/src/env.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -interface ImportMetaEnv extends Readonly> { - readonly VITE_LAST_WIPE: string; - readonly VITE_STORAGE_VERSION: string; -} - -interface ImportMeta { - readonly env: ImportMetaEnv; -} diff --git a/pkg/grid/src/global.d.ts b/pkg/grid/src/global.d.ts deleted file mode 100644 index ce5215a80..000000000 --- a/pkg/grid/src/global.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -declare module 'urbit-ob' { - export function isValidPatp(patp: string): boolean; -} - -type Stringified = string & - { - [P in keyof T]: { '_ value': T[P] }; - }; - -interface JSON { - // stringify(value: any, replacer?: (key: string, value: any) => any, space?: string | number): string; - stringify( - value: T, - replacer?: (key: string, value: any) => any, - space?: string | number - ): string & Stringified; - // parse(text: string, reviver?: (key: any, value: any) => any): any; - parse(text: Stringified, reviver?: (key: any, value: any) => any): T; -} diff --git a/pkg/grid/src/logic/useAsyncCall.ts b/pkg/grid/src/logic/useAsyncCall.ts deleted file mode 100644 index 63ff02d7f..000000000 --- a/pkg/grid/src/logic/useAsyncCall.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { useCallback, useState } from 'react'; - -export type Status = 'initial' | 'loading' | 'success' | 'error'; - -export function useAsyncCall(cb: (...args: any[]) => Promise) { - const [status, setStatus] = useState('initial'); - const [error, setError] = useState(null); - - const call = useCallback( - (...args: any[]) => { - setStatus('loading'); - cb(...args) - .then((result) => { - setStatus('success'); - return result; - }) - .catch((err) => { - setError(err); - setStatus('error'); - }); - }, - [cb] - ); - - return { - call, - status, - error - }; -} diff --git a/pkg/grid/src/logic/useDebounce.ts b/pkg/grid/src/logic/useDebounce.ts deleted file mode 100644 index 550db124c..000000000 --- a/pkg/grid/src/logic/useDebounce.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { debounce, DebounceSettings } from 'lodash'; -import { useRef, useEffect, useCallback } from 'react'; -import { useIsMounted } from './useIsMounted'; - -export function useDebounce( - cb: (...args: any[]) => void, - delay: number, - options?: DebounceSettings -) { - const isMounted = useIsMounted(); - const inputsRef = useRef({ cb, delay }); // mutable ref like with useThrottle - - useEffect(() => { - inputsRef.current = { cb, delay }; - }); // also track cur. delay - - return useCallback( - debounce( - (...args) => { - // Debounce is an async callback. Cancel it, if in the meanwhile - // (1) component has been unmounted (see isMounted in snippet) - // (2) delay has changed - if (inputsRef.current.delay === delay && isMounted()) inputsRef.current.cb(...args); - }, - delay, - options - ), - [delay, debounce] - ); -} diff --git a/pkg/grid/src/logic/useErrorHandler.ts b/pkg/grid/src/logic/useErrorHandler.ts deleted file mode 100644 index bf5122e77..000000000 --- a/pkg/grid/src/logic/useErrorHandler.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useErrorHandler as useBoundaryHandler } from 'react-error-boundary'; - -export function useErrorHandler() { - const handle = useBoundaryHandler(); - - function handleError(cb: (...args: any[]) => any) { - return (...args: any[]) => { - try { - cb(...args); - } catch (error) { - handle(error); - } - }; - } - - return handleError; -} diff --git a/pkg/grid/src/logic/useIsMounted.ts b/pkg/grid/src/logic/useIsMounted.ts deleted file mode 100644 index a35b8472b..000000000 --- a/pkg/grid/src/logic/useIsMounted.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { useRef, useEffect } from 'react'; - -export function useIsMounted() { - const isMountedRef = useRef(true); - useEffect(() => { - return () => { - isMountedRef.current = false; - }; - }, []); - return () => isMountedRef.current; -} diff --git a/pkg/grid/src/logic/useMedia.ts b/pkg/grid/src/logic/useMedia.ts deleted file mode 100644 index 07c560ff0..000000000 --- a/pkg/grid/src/logic/useMedia.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { useCallback, useEffect, useState } from 'react'; - -export const useMedia = (mediaQuery: string) => { - const [match, setMatch] = useState(false); - - const update = useCallback((e: MediaQueryListEvent) => { - setMatch(e.matches); - }, []); - - useEffect(() => { - const query = window.matchMedia(mediaQuery); - - query.addEventListener('change', update); - update({ matches: query.matches } as MediaQueryListEvent); - return () => { - query.removeEventListener('change', update); - }; - }, [update]); - - return match; -}; diff --git a/pkg/grid/src/logic/useQuery.ts b/pkg/grid/src/logic/useQuery.ts deleted file mode 100644 index 142a15aff..000000000 --- a/pkg/grid/src/logic/useQuery.ts +++ /dev/null @@ -1,46 +0,0 @@ -import _ from 'lodash'; -import { useCallback, useMemo } from 'react'; -import { useLocation } from 'react-router-dom'; - -function mergeQuery(search: URLSearchParams, added: Record) { - _.forIn(added, (v, k) => { - if (v) { - search.append(k, v); - } else { - search.delete(k); - } - }); -} - -export function useQuery() { - const { search, pathname } = useLocation(); - - const query = useMemo(() => new URLSearchParams(search), [search]); - - const appendQuery = useCallback( - (added: Record) => { - const q = new URLSearchParams(search); - mergeQuery(q, added); - return q.toString(); - }, - [search] - ); - - const toQuery = useCallback( - (params: Record, path = pathname) => { - const q = new URLSearchParams(search); - mergeQuery(q, params); - return { - pathname: path, - search: q.toString() - }; - }, - [search, pathname] - ); - - return { - query, - appendQuery, - toQuery - }; -} diff --git a/pkg/grid/src/logic/useWaitForProps.ts b/pkg/grid/src/logic/useWaitForProps.ts deleted file mode 100644 index 278bb57b5..000000000 --- a/pkg/grid/src/logic/useWaitForProps.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useCallback, useEffect, useState } from 'react'; - -export function useWaitForProps

(props: P, timeout = 0) { - const [mainResolve, setMainResolve] = useState<() => void>(() => () => {}); - const [ready, setReady] = useState<(p: P) => boolean | undefined>(); - - useEffect(() => { - if (typeof ready === 'function' && ready(props)) { - mainResolve(); - } - }, [props, ready, mainResolve]); - - /** - * Waits until some predicate is true - * - * @param r - Predicate to wait for - * @returns A promise that resolves when `r` returns true, or rejects if the - * waiting times out - * - */ - const waiter = useCallback( - (r: (props: P) => boolean) => { - setReady(() => r); - return new Promise((resolve, reject) => { - setMainResolve(() => resolve); - if (timeout > 0) { - setTimeout(() => { - reject(new Error('Timed out')); - }, timeout); - } - }); - }, - [setMainResolve, setReady, timeout] - ); - - return waiter; -} diff --git a/pkg/grid/src/main.tsx b/pkg/grid/src/main.tsx deleted file mode 100644 index ed91dc168..000000000 --- a/pkg/grid/src/main.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import { App } from './app'; -import './styles/index.css'; - -ReactDOM.render( - - - , - document.getElementById('app') -); diff --git a/pkg/grid/src/nav/Help.tsx b/pkg/grid/src/nav/Help.tsx deleted file mode 100644 index 51db624b9..000000000 --- a/pkg/grid/src/nav/Help.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React from 'react'; -import helpAndSupport from '../assets/help-and-support.svg'; - -export const Help = () => { - return ( -

- -
-
-

For general help, ask the community

- - Join Urbit Community - -
-
-

For all other issues:

- - support@urbit.org - -
-
-
- ); -}; diff --git a/pkg/grid/src/nav/Leap.tsx b/pkg/grid/src/nav/Leap.tsx deleted file mode 100644 index ab2710a0c..000000000 --- a/pkg/grid/src/nav/Leap.tsx +++ /dev/null @@ -1,282 +0,0 @@ -import classNames from 'classnames'; -import React, { - ChangeEvent, - FocusEvent, - FormEvent, - KeyboardEvent, - HTMLAttributes, - useCallback, - useImperativeHandle, - useRef, - useEffect -} from 'react'; -import { Link, useHistory, useRouteMatch } from 'react-router-dom'; -import { Cross } from '../components/icons/Cross'; -import { useDebounce } from '../logic/useDebounce'; -import { useErrorHandler } from '../logic/useErrorHandler'; -import { MenuState, useLeapStore } from './Nav'; - -function normalizePathEnding(path: string) { - const end = path.length - 1; - return path[end] === '/' ? path.substring(0, end - 1) : path; -} - -export function createPreviousPath(current: string): string { - const parts = normalizePathEnding(current).split('/'); - parts.pop(); - - if (parts[parts.length - 1] === 'leap') { - parts.push('search'); - } - - return parts.join('/'); -} - -type LeapProps = { - menu: MenuState; - dropdown: string; - navOpen: boolean; - shouldDim: boolean; -} & HTMLAttributes; - -function normalizeMatchString(match: string, keepAltChars: boolean): string { - let normalizedString = match.toLocaleLowerCase().trim(); - - if (!keepAltChars) { - normalizedString = normalizedString.replace(/[^\w]/, ''); - } - - return normalizedString; -} - -export const Leap = React.forwardRef( - ({ menu, dropdown, navOpen, shouldDim, className }: LeapProps, ref) => { - const { push } = useHistory(); - const match = useRouteMatch<{ menu?: MenuState; query?: string; desk?: string }>( - `/leap/${menu}/:query?/(apps)?/:desk?` - ); - const appsMatch = useRouteMatch(`/leap/${menu}/${match?.params.query}/apps`); - const inputRef = useRef(null); - useImperativeHandle(ref, () => inputRef.current); - const { rawInput, selectedMatch, matches, selection, select } = useLeapStore(); - const handleError = useErrorHandler(); - - useEffect(() => { - const onTreaty = appsMatch && !appsMatch.isExact; - if (selection && rawInput === '' && !onTreaty) { - inputRef.current?.focus(); - } else if (selection && onTreaty) { - inputRef.current?.blur(); - } - }, [selection, rawInput, appsMatch]); - - useEffect(() => { - const newMatch = getMatch(rawInput); - - if (newMatch && rawInput) { - useLeapStore.setState({ selectedMatch: newMatch }); - } - }, [rawInput, matches]); - - const toggleSearch = useCallback(() => { - if (selection || menu === 'search') { - return; - } - - push('/leap/search'); - }, [selection, menu]); - - const onFocus = useCallback( - (e: FocusEvent) => { - // refocusing tab with input focused is false trigger - const windowFocus = e.nativeEvent.currentTarget === document.body; - if (windowFocus) { - return; - } - - toggleSearch(); - }, - [toggleSearch] - ); - - const getMatch = useCallback( - (value: string) => { - const onlySymbols = !value.match(/[\w]/g); - const normValue = normalizeMatchString(value, onlySymbols); - return matches.find((m) => - normalizeMatchString(m.value, onlySymbols).startsWith(normValue) - ); - }, - [matches] - ); - - const navigateByInput = useCallback( - (input: string) => { - const normalizedValue = input.trim().replace(/(~?[\w^_-]{3,13})\//, '$1/apps/'); - push(`/leap/${menu}/${normalizedValue}`); - }, - [menu] - ); - - const debouncedSearch = useDebounce( - (input: string) => { - if (!match || appsMatch) { - return; - } - - useLeapStore.setState({ searchInput: input }); - navigateByInput(input); - }, - 300, - { leading: true } - ); - - const handleSearch = useCallback(debouncedSearch, [match]); - - const onChange = useCallback( - handleError((e: ChangeEvent) => { - const input = e.target as HTMLInputElement; - const value = input.value.trim(); - const isDeletion = (e.nativeEvent as InputEvent).inputType === 'deleteContentBackward'; - const inputMatch = getMatch(value); - const matchValue = inputMatch?.value; - - if (matchValue && inputRef.current && !isDeletion) { - inputRef.current.value = matchValue; - const start = matchValue.startsWith(value) - ? value.length - : matchValue.substring(0, matchValue.indexOf(value)).length + value.length; - inputRef.current.setSelectionRange(start, matchValue.length); - useLeapStore.setState({ - rawInput: matchValue, - selectedMatch: inputMatch - }); - } else { - useLeapStore.setState({ - rawInput: value, - selectedMatch: matches[0] - }); - } - - handleSearch(value); - }), - [matches] - ); - - const onSubmit = useCallback( - handleError((e: FormEvent) => { - e.preventDefault(); - - const value = inputRef.current?.value.trim(); - const currentMatch = selectedMatch || (value && getMatch(value)); - - if (!currentMatch) { - return; - } - - if (currentMatch?.openInNewTab) { - window.open(currentMatch.url, currentMatch.value); - return; - } - - push(currentMatch.url); - useLeapStore.setState({ rawInput: '' }); - }), - [match, selectedMatch] - ); - - const onKeyDown = useCallback( - handleError((e: KeyboardEvent) => { - const deletion = e.key === 'Backspace' || e.key === 'Delete'; - const arrow = e.key === 'ArrowDown' || e.key === 'ArrowUp'; - - if (deletion && !rawInput && selection) { - e.preventDefault(); - select(null, appsMatch && !appsMatch.isExact ? undefined : match?.params.query); - const pathBack = createPreviousPath(match?.url || ''); - push(pathBack); - } - - if (arrow) { - e.preventDefault(); - if (matches.length === 0) { - return; - } - - const currentIndex = selectedMatch - ? matches.findIndex((m) => { - const matchValue = m.value; - const searchValue = selectedMatch.value; - return matchValue === searchValue; - }) - : 0; - const unsafeIndex = e.key === 'ArrowUp' ? currentIndex - 1 : currentIndex + 1; - const index = (unsafeIndex + matches.length) % matches.length; - - const newMatch = matches[index]; - useLeapStore.setState({ - rawInput: newMatch.value, - // searchInput: matchValue, - selectedMatch: newMatch - }); - } - }), - [selection, rawInput, match, matches, selectedMatch] - ); - - return ( -
-
- - {menu !== 'upgrading' ? ( - - ) : null} -
- {menu === 'search' && ( - select(null)} - > - - Close - - )} -
- ); - } -); diff --git a/pkg/grid/src/nav/Nav.tsx b/pkg/grid/src/nav/Nav.tsx deleted file mode 100644 index 89ecea223..000000000 --- a/pkg/grid/src/nav/Nav.tsx +++ /dev/null @@ -1,180 +0,0 @@ -import { DialogContent } from '@radix-ui/react-dialog'; -import * as Portal from '@radix-ui/react-portal'; -import classNames from 'classnames'; -import React, { FunctionComponent, useCallback, useEffect, useRef, useState } from 'react'; -import { ErrorBoundary } from 'react-error-boundary'; -import { Route, Switch, useHistory, useRouteMatch } from 'react-router-dom'; -import create from 'zustand'; -import { Dialog } from '../components/Dialog'; -import { ErrorAlert } from '../components/ErrorAlert'; -import { Help } from './Help'; -import { Leap } from './Leap'; -import { Notifications } from './Notifications'; -import { NotificationsLink } from './NotificationsLink'; -import { Search } from './Search'; -import { SystemMenu } from './SystemMenu'; -import { SystemPreferences } from './SystemPreferences'; - -export interface MatchItem { - url: string; - openInNewTab: boolean; - value: string; - display?: string; -} - -interface LeapStore { - rawInput: string; - searchInput: string; - matches: MatchItem[]; - selectedMatch?: MatchItem; - selection: React.ReactNode; - select: (selection: React.ReactNode, input?: string) => void; -} - -export const useLeapStore = create((set) => ({ - rawInput: '', - searchInput: '', - matches: [], - selectedMatch: undefined, - selection: null, - select: (selection: React.ReactNode, input?: string) => - set({ - rawInput: input || '', - searchInput: input || '', - selection - }) -})); - -window.leap = useLeapStore.getState; - -export type MenuState = - | 'closed' - | 'search' - | 'notifications' - | 'help-and-support' - | 'system-preferences' - | 'upgrading'; - -interface NavProps { - menu?: MenuState; -} - -export const Nav: FunctionComponent = ({ menu }) => { - const { push } = useHistory(); - const inputRef = useRef(null); - const navRef = useRef(null); - const dialogNavRef = useRef(null); - const systemMenuOpen = useRouteMatch('/system-menu'); - const [dialogContentOpen, setDialogContentOpen] = useState(false); - const select = useLeapStore((state) => state.select); - - const menuState = menu || 'closed'; - const isOpen = menuState !== 'upgrading' && menuState !== 'closed'; - const eitherOpen = isOpen || systemMenuOpen; - - useEffect(() => { - if (!isOpen) { - select(null); - setDialogContentOpen(false); - } - }, [isOpen]); - - const onOpen = useCallback( - (event: Event) => { - event.preventDefault(); - - setDialogContentOpen(true); - if (menu === 'search' && inputRef.current) { - setTimeout(() => { - inputRef.current?.focus(); - }, 0); - } - }, - [menu] - ); - - const onDialogClose = useCallback((open: boolean) => { - if (!open) { - push('/'); - } - }, []); - - const preventClose = useCallback((e) => { - const target = e.target as HTMLElement; - const hasNavAncestor = target.closest('#dialog-nav'); - - if (hasNavAncestor) { - e.preventDefault(); - } - }, []); - - return ( - push('/')}> - {/* Using portal so that we can retain the same nav items both in the dialog and in the base header */} - - - - - -
- - -
-
- - - - - - -
- -
- - ); -}; diff --git a/pkg/grid/src/nav/Notifications.tsx b/pkg/grid/src/nav/Notifications.tsx deleted file mode 100644 index 4b2fb3526..000000000 --- a/pkg/grid/src/nav/Notifications.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import React, { useEffect } from 'react'; -import { ErrorBoundary } from 'react-error-boundary'; -import { Link, NavLink, Route, RouteComponentProps, Switch } from 'react-router-dom'; -import { Button } from '../components/Button'; -import { ErrorAlert } from '../components/ErrorAlert'; -import { useHarkStore } from '../state/hark'; -import { Inbox } from './notifications/Inbox'; - -export const Notifications = ({ history }: RouteComponentProps) => { - const markAllAsRead = () => { - const { archiveAll } = useHarkStore.getState(); - archiveAll(); - }; - - useEffect(() => { - function visibilitychange() { - if (document.visibilityState === 'hidden') { - useHarkStore.getState().opened(); - } - } - document.addEventListener('visibilitychange', visibilitychange); - - return () => { - document.removeEventListener('visibilitychange', visibilitychange); - useHarkStore.getState().opened(); - }; - }, []); - // const select = useLeapStore((s) => s.select); - - return ( - history.push('/leap/notifications')} - > -
-
- - New - - - Archive - - - - -
- - - - - - - - -
-
- ); -}; diff --git a/pkg/grid/src/nav/NotificationsLink.tsx b/pkg/grid/src/nav/NotificationsLink.tsx deleted file mode 100644 index d7c01866e..000000000 --- a/pkg/grid/src/nav/NotificationsLink.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import classNames from 'classnames'; -import React, { useCallback } from 'react'; -import { Timebox } from '@urbit/api'; -import { Link, LinkProps } from 'react-router-dom'; -import { Bullet } from '../components/icons/Bullet'; -import { Cross } from '../components/icons/Cross'; -import { useHarkStore } from '../state/hark'; -import { useLeapStore } from './Nav'; -import { SettingsState, useSettingsState } from '../state/settings'; - -type NotificationsState = 'empty' | 'unread' | 'attention-needed' | 'open'; - -function getNotificationsState(isOpen: boolean, box: Timebox, dnd: boolean): NotificationsState { - const notifications = Object.values(box); - if (isOpen) { - return 'open'; - } - - if (dnd) { - return 'empty'; - } - - if ( - notifications.filter( - ({ bin }) => bin.place.desk === window.desk && ['/lag', 'blocked'].includes(bin.place.path) - ).length > 0 - ) { - return 'attention-needed'; - } - - // TODO: when real structure, this should be actually be unread not just existence - if (notifications.length > 0) { - return 'unread'; - } - - return 'empty'; -} - -type NotificationsLinkProps = Omit, 'to'> & { - navOpen: boolean; - notificationsOpen: boolean; - shouldDim: boolean; -}; - -const selDnd = (s: SettingsState) => s.display.doNotDisturb; - -export const NotificationsLink = ({ - navOpen, - notificationsOpen, - shouldDim -}: NotificationsLinkProps) => { - const unseen = useHarkStore((s) => s.unseen); - const dnd = useSettingsState(selDnd); - const state = getNotificationsState(notificationsOpen, unseen, dnd); - const select = useLeapStore((s) => s.select); - const clearSelection = useCallback(() => select(null), [select]); - - return ( - - {state === 'empty' && } - {state === 'unread' && Object.keys(unseen).length} - {state === 'attention-needed' && ( - - ! Attention needed - - )} - {state === 'open' && ( - <> - - Close - - )} - - ); -}; diff --git a/pkg/grid/src/nav/Search.tsx b/pkg/grid/src/nav/Search.tsx deleted file mode 100644 index ebcd5f4ee..000000000 --- a/pkg/grid/src/nav/Search.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import { Route, RouteComponentProps, Switch } from 'react-router-dom'; -import { ErrorBoundary } from 'react-error-boundary'; -import { TreatyInfo } from './search/TreatyInfo'; -import { Apps } from './search/Apps'; -import { Home } from './search/Home'; -import { Providers } from './search/Providers'; -import { ErrorAlert } from '../components/ErrorAlert'; - -type SearchProps = RouteComponentProps<{ - query?: string; -}>; - -export const Search = ({ match, history }: SearchProps) => { - return ( - history.push('/leap/search')}> - - - - - - - - ); -}; diff --git a/pkg/grid/src/nav/SystemMenu.tsx b/pkg/grid/src/nav/SystemMenu.tsx deleted file mode 100644 index 44f8379ca..000000000 --- a/pkg/grid/src/nav/SystemMenu.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; -import classNames from 'classnames'; -import clipboardCopy from 'clipboard-copy'; -import React, { HTMLAttributes, useCallback, useState } from 'react'; -import { Link, Route, useHistory } from 'react-router-dom'; -import { Vat } from '@urbit/api'; -import { Adjust } from '../components/icons/Adjust'; -import { useVat } from '../state/kiln'; -import { disableDefault, handleDropdownLink } from '../state/util'; -import { useMedia } from '../logic/useMedia'; -import { Cross } from '../components/icons/Cross'; -import { useLeapStore } from './Nav'; - -type SystemMenuProps = HTMLAttributes & { - open: boolean; - subMenuOpen: boolean; - shouldDim: boolean; -}; - -function getHash(vat: Vat): string { - const parts = vat.hash.split('.'); - return parts[parts.length - 1]; -} - -export const SystemMenu = ({ className, open, subMenuOpen, shouldDim }: SystemMenuProps) => { - const { push } = useHistory(); - const [copied, setCopied] = useState(false); - const garden = useVat(window.desk); - const hash = garden ? getHash(garden) : null; - const isMobile = useMedia('(max-width: 639px)'); - const select = useLeapStore((s) => s.select); - const clearSelection = useCallback(() => select(null), [select]); - - const copyHash = useCallback( - (event: Event) => { - event.preventDefault(); - if (!hash) { - return; - } - - setCopied(true); - clipboardCopy(hash); - - setTimeout(() => { - setCopied(false); - }, 1250); - }, - [hash] - ); - - const preventFlash = useCallback((e) => { - const target = e.target as HTMLElement; - - if (target.id !== 'system-menu-overlay') { - e.preventDefault(); - } - }, []); - - return ( - <> -
- setTimeout(() => !isOpen && push('/'), 15)} - > - - {!open && !subMenuOpen && ( - <> - - System Menu - - )} - {(open || subMenuOpen) && ( - <> - - Close - - )} - {/* trigger here just for anchoring the dropdown */} - - - - - - - - System Preferences - - - - Help and Support - - - - About - - {hash && ( - - Base Hash - - {!copied && {hash}} - {copied && 'copied!'} - - - )} - - - - -
- -
- - - ); -}; diff --git a/pkg/grid/src/nav/SystemPreferences.tsx b/pkg/grid/src/nav/SystemPreferences.tsx deleted file mode 100644 index 50e08fc5b..000000000 --- a/pkg/grid/src/nav/SystemPreferences.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import React, { PropsWithChildren, useCallback } from 'react'; -import { Link, Route, RouteComponentProps, Switch, useRouteMatch } from 'react-router-dom'; -import { ErrorBoundary } from 'react-error-boundary'; -import classNames from 'classnames'; -import { NotificationPrefs } from './preferences/NotificationPrefs'; -import { SystemUpdatePrefs } from './preferences/SystemUpdatePrefs'; -import { InterfacePrefs } from './preferences/InterfacePrefs'; -import { SecurityPrefs } from './preferences/SecurityPrefs'; -import { useCharges } from '../state/docket'; -import { AppPrefs } from './preferences/AppPrefs'; -import { DocketImage } from '../components/DocketImage'; -import { ErrorAlert } from '../components/ErrorAlert'; -import { useMedia } from '../logic/useMedia'; -import { LeftArrow } from '../components/icons/LeftArrow'; -import { System } from '../components/icons/System'; -import { Interface } from '../components/icons/Interface'; -import { Notifications } from '../components/icons/Notifications'; -import { Lock } from '../components/icons/Lock'; -import { getAppName } from '../state/util'; - -interface SystemPreferencesSectionProps { - url: string; - active: boolean; -} - -function SystemPreferencesSection({ - url, - active, - children -}: PropsWithChildren) { - return ( -
  • - - {children} - -
  • - ); -} - -export const SystemPreferences = (props: RouteComponentProps<{ submenu: string }>) => { - const { match, history } = props; - const subMatch = useRouteMatch<{ submenu: string; desk?: string }>( - `${match.url}/:submenu/:desk?` - ); - const charges = useCharges(); - const filteredCharges = Object.values(charges).filter((charge) => charge.desk !== window.desk); - const isMobile = useMedia('(max-width: 639px)'); - const settingsPath = isMobile ? `${match.url}/:submenu` : '/'; - - const matchSub = useCallback( - (target: string, desk?: string) => { - if (isMobile) { - return false; - } - - if (!subMatch && target === 'notifications') { - return true; - } - - if (desk && subMatch?.params.desk !== desk) { - return false; - } - - return subMatch?.params.submenu === target; - }, - [match, subMatch] - ); - - const subUrl = useCallback((submenu: string) => `${match.url}/${submenu}`, [match]); - - return ( - history.push('/leap/system-preferences')} - > -
    - - - - -
    - - - - - - - - - Back - -
    -
    -
    -
    - ); -}; diff --git a/pkg/grid/src/nav/notifications/BasicNotification.tsx b/pkg/grid/src/nav/notifications/BasicNotification.tsx deleted file mode 100644 index 7e7f87ed4..000000000 --- a/pkg/grid/src/nav/notifications/BasicNotification.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import React from 'react'; -import cn from 'classnames'; -import { Notification, harkBinToId, HarkContent, HarkLid } from '@urbit/api'; -import { map, take } from 'lodash'; -import { useCharge } from '../../state/docket'; -import { Elbow } from '../../components/icons/Elbow'; -import { ShipName } from '../../components/ShipName'; -import { DeskLink } from '../../components/DeskLink'; -import { useHarkStore } from '../../state/hark'; -import { DocketImage } from '../../components/DocketImage'; -import { Button } from '../../components/Button'; - -interface BasicNotificationProps { - notification: Notification; - lid: HarkLid; -} - -const MAX_CONTENTS = 5; - -const NotificationText = ({ contents }: { contents: HarkContent[] }) => { - return ( - <> - {contents.map((content, idx) => { - if ('ship' in content) { - return ; - } - return content.text; - })} - - ); -}; - -export const BasicNotification = ({ notification, lid }: BasicNotificationProps) => { - const { desk } = notification.bin.place; - const binId = harkBinToId(notification.bin); - const id = `notif-${notification.time}-${binId}`; - - const charge = useCharge(desk); - const first = notification.body?.[0]; - if (!first || !charge) { - return null; - } - const orderedByTime = notification.body.sort((a, b) => a.time - b.time); - const contents = map(orderedByTime, 'content').filter((c) => c.length > 0); - const large = contents.length === 0; - const archive = () => { - useHarkStore.getState().archiveNote(notification.bin, lid); - }; - - const archiveNoFollow = (e: React.MouseEvent) => { - e.preventDefault(); - e.stopPropagation(); - archive(); - }; - - return ( - -
    - -
    {charge?.title || desk}
    - {!large ? : null} -

    - -

    - {!('time' in lid) ? ( -
    - -
    - ) : null} -
    - {contents.length > 0 ? ( -
    - {take(contents, MAX_CONTENTS).map((content) => ( -

    - -

    - ))} - {contents.length > MAX_CONTENTS ? ( -

    and {contents.length - MAX_CONTENTS} more

    - ) : null} -
    - ) : null} -
    - ); -}; diff --git a/pkg/grid/src/nav/notifications/Inbox.tsx b/pkg/grid/src/nav/notifications/Inbox.tsx deleted file mode 100644 index 4661f884e..000000000 --- a/pkg/grid/src/nav/notifications/Inbox.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import React, { useEffect } from 'react'; -import { HarkLid, Notification } from '@urbit/api'; -import { BasicNotification } from './BasicNotification'; -import { BaseBlockedNotification, RuntimeLagNotification } from './SystemNotification'; -import { useNotifications } from '../../state/notifications'; -import { useHarkStore } from '../../state/hark'; -import { OnboardingNotification } from './OnboardingNotification'; - -function renderNotification(notification: Notification, key: string, lid: HarkLid) { - // Special casing - if (notification.bin.place.desk === window.desk) { - if (notification.bin.place.path === '/lag') { - return ; - } - if (notification.bin.path === '/blocked' && notification.bin.place.path === '/desk/base') { - return ; - } - if (notification.bin.place.path === '/onboard') { - return ; - } - } - return ; -} - -const Empty = () => ( -
    - All clear! -
    -); - -export const Inbox = ({ archived = false }) => { - const { unseen, seen } = useNotifications(); - const archive = useHarkStore((s) => s.archive); - - useEffect(() => { - useHarkStore.getState().getMore(); - }, [archived]); - - if (archived ? archive.size === 0 : Object.keys({ ...seen, ...unseen }).length === 0) { - return ; - } - - return ( -
    - {archived ? ( - Array.from(archive).map(([key, box]) => { - return Object.entries(box) - .sort(([, a], [, b]) => b.time - a.time) - .map(([binId, n]) => - renderNotification(n, `${key.toString()}-${binId}`, { time: key.toString() }) - ); - }) - ) : ( - <> -
    Unseen
    -
    - {Object.entries(unseen) - .sort(([, a], [, b]) => b.time - a.time) - .map(([binId, n]) => renderNotification(n, `unseen-${binId}`, { unseen: null }))} -
    -
    Seen
    -
    - {Object.entries(seen) - .sort(([, a], [, b]) => b.time - a.time) - .map(([binId, n]) => renderNotification(n, `seen-${binId}`, { seen: null }))} -
    - - )} -
    - ); -}; diff --git a/pkg/grid/src/nav/notifications/NotificationButton.tsx b/pkg/grid/src/nav/notifications/NotificationButton.tsx deleted file mode 100644 index d8c27c999..000000000 --- a/pkg/grid/src/nav/notifications/NotificationButton.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import type * as Polymorphic from '@radix-ui/react-polymorphic'; -import classNames from 'classnames'; - -type NotificationButtonVariant = 'primary' | 'secondary' | 'destructive'; - -type PolymorphicButton = Polymorphic.ForwardRefComponent< - 'button', - { - variant?: NotificationButtonVariant; - } ->; - -const variants: Record = { - primary: 'text-blue bg-white', - secondary: 'text-black bg-white', - destructive: 'text-red-500 bg-white' -}; - -export const NotificationButton = React.forwardRef( - ({ as: Comp = 'button', variant = 'primary', children, className, ...props }, ref) => { - return ( - - {children} - - ); - } -) as PolymorphicButton; diff --git a/pkg/grid/src/nav/notifications/OnboardingNotification.tsx b/pkg/grid/src/nav/notifications/OnboardingNotification.tsx deleted file mode 100644 index bd9af8947..000000000 --- a/pkg/grid/src/nav/notifications/OnboardingNotification.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import React from 'react'; -import cn from 'classnames'; -import { Link } from 'react-router-dom'; -import { HarkLid, Vats, getVatPublisher } from '@urbit/api'; -import { Button } from '../../components/Button'; -import { useBrowserId, useCurrentTheme } from '../../state/local'; -import { getDarkColor } from '../../state/util'; -import useKilnState from '../../state/kiln'; -import { useHarkStore } from '../../state/hark'; -import { useProtocolHandling } from '../../state/settings'; - -const getCards = (vats: Vats, protocol: boolean): OnboardingCardProps[] => { - const cards = [ - { - title: 'Terminal', - body: "A web interface to your Urbit's command line (the dojo).", - button: 'Install', - color: '#9CA4B1', - href: '/leap/search/direct/apps/~mister-dister-dozzod-dozzod/webterm', - ship: '~mister-dister-dozzod-dozzod', - desk: 'webterm' - }, - { - title: 'Groups', - body: 'A suite of applications to communicate on Urbit', - button: 'Install', - color: '#D1DDD3', - href: '/leap/search/direct/apps/~lander-dister-dozzod-dozzod/landscape', - ship: '~lander-dister-dozzod-dozzod', - desk: 'landscape' - }, - { - title: 'Bitcoin', - body: ' A Bitcoin Wallet that lets you send and receive Bitcoin directly to and from other Urbit users', - button: 'Install', - color: '#F6EBDB', - href: '/leap/search/direct/apps/~mister-dister-dozzod-dozzod/bitcoin', - ship: '~mister-dister-dozzod-dozzod', - desk: 'bitcoin' - } - // Commenting out until we have something real - // { - // title: 'Debug', - // body: "Install a debugger. You can inspect your ship's internals using this interface", - // button: 'Install', - // color: '#E5E5E5', - // href: '/leap/search/direct/apps/~zod/debug' - // } - // { - // title: 'Build an app', - // body: 'You can instantly get started building new things on Urbit. Just right click your Landscape and select “New App”', - // button: 'Learn more', - // color: '#82A6CA' - // } - ]; - if ('registerProtocolHandler' in window.navigator && !protocol) { - cards.push({ - title: 'Open Urbit-Native Links', - body: 'Enable your Urbit to open links you find in the wild', - button: 'Enable Link Handler', - color: '#82A6CA', - href: '/leap/system-preferences/interface', - desk: '', - ship: '' - }); - } - - return cards.filter((card) => { - return !Object.values(vats).find( - (vat) => getVatPublisher(vat) == card.ship && vat?.arak?.rail?.desk === card.desk - ); - }); -}; - -if ('registerProtocolHandler' in window.navigator) { -} - -interface OnboardingCardProps { - title: string; - button: string; - href: string; - body: string; - color: string; - ship: string; - desk: string; -} - -const OnboardingCard = ({ title, button, href, body, color }: OnboardingCardProps) => ( -
    -
    -

    {title}

    -

    {body}

    -
    - -
    -); - -interface OnboardingNotificationProps { - unread?: boolean; - lid: HarkLid; -} - -export const OnboardingNotification = ({ unread = false, lid }: OnboardingNotificationProps) => { - const theme = useCurrentTheme(); - const vats = useKilnState((s) => s.vats); - const browserId = useBrowserId(); - const protocolHandling = useProtocolHandling(browserId); - const cards = getCards(vats, protocolHandling); - - if (cards.length === 0 && !('time' in lid)) { - useHarkStore.getState().archiveNote( - { - path: '/', - place: { - path: '/onboard', - desk: window.desk - } - }, - lid - ); - return null; - } - - return ( -
    -
    -
    - - System -
    -
    -

    Hello there, and welcome!

    -
    -
    -
    - { - /* eslint-disable-next-line react/no-array-index-key */ - cards.map((card, i) => ( - - )) - } -
    -
    - ); -}; diff --git a/pkg/grid/src/nav/notifications/SystemNotification.tsx b/pkg/grid/src/nav/notifications/SystemNotification.tsx deleted file mode 100644 index c92822ae8..000000000 --- a/pkg/grid/src/nav/notifications/SystemNotification.tsx +++ /dev/null @@ -1,155 +0,0 @@ -import { pick, pickBy, partition } from 'lodash'; -import React, { useCallback } from 'react'; -import { kilnBump } from '@urbit/api'; -import { AppList } from '../../components/AppList'; -import { Button } from '../../components/Button'; -import { Dialog, DialogClose, DialogContent, DialogTrigger } from '../../components/Dialog'; -import { Elbow } from '../../components/icons/Elbow'; -import api from '../../state/api'; -import { useCharges } from '../../state/docket'; -import useKilnState, { useVat } from '../../state/kiln'; - -import { NotificationButton } from './NotificationButton'; -import { disableDefault } from '../../state/util'; -import { Vat } from '@urbit/api'; -import {useHistory} from 'react-router-dom'; - -export const RuntimeLagNotification = () => ( -
    -
    -
    - - System -
    -
    - -

    The runtime blocked a System Update

    -
    -
    -
    -

    - In order to proceed with the System Update, you’ll need to upgrade the runtime. If you are - using a hosted ship, you should contact your hosting provider. -

    -
    -
    -); - -function vatIsBlocked(newKelvin: number, vat: Vat) { - return !(vat.arak?.rail?.next || []).find(({ aeon, weft }) => weft.kelvin === newKelvin); -} - -export const BaseBlockedNotification = () => { - const base = useVat('base'); - const { push } = useHistory(); - // TODO: assert weft.name === 'zuse'?? - const newKelvin = base?.arak?.rail?.next?.[0]?.weft?.kelvin || 420; - const charges = useCharges(); - const [blocked, unblocked] = useKilnState((s) => { - const [b, u] = partition(Object.entries(s.vats), ([desk, vat]) => vatIsBlocked(newKelvin, vat)); - return [b.map(([d]) => d), u.map(([d]) => d)] as const; - }); - - const blockedCharges = Object.values(pick(charges, blocked)); - const count = blockedCharges.length; - - const handlePauseOTAs = useCallback(() => {}, []); - - const handleArchiveApps = useCallback(async () => { - api.poke(kilnBump(true)); - push('/leap/upgrading'); - }, []); - - return ( -
    -
    -
    - - System -
    -
    - -

    The following ({count}) apps blocked a System Update:

    -
    -
    - -
    -

    - In order to proceed with the System Update, you’ll need to temporarily archive these apps, - which will render them unusable, but with data intact. -

    -

    - Archived apps will automatically un-archive and resume operation when their developer - provides an app update. -

    -
    -
    - - Dismiss - -

    Skip System Update

    -

    - Skipping the application fo an incoming System Update will grant you the ability to - continue using incompatible apps at the cost of an urbit that's not up to date. -

    -

    - You can choose to apply System Updates from System Preferences any time.{' '} - - Learn More - -

    -
    - - Cancel - - - Pause OTAs - -
    -
    -
    - - - Archive ({count}) apps and Apply System Update - - -

    Archive ({count}) Apps and Apply System Update

    -

    - The following apps will be archived until their developer provides a compatible update - to your system. -

    - -
    - - Cancel - - - Archive Apps - -
    -
    -
    -
    -
    - ); -}; diff --git a/pkg/grid/src/nav/preferences/AppPrefs.tsx b/pkg/grid/src/nav/preferences/AppPrefs.tsx deleted file mode 100644 index 51910f776..000000000 --- a/pkg/grid/src/nav/preferences/AppPrefs.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React, { useCallback } from 'react'; -import { RouteComponentProps } from 'react-router-dom'; -import { Setting } from '../../components/Setting'; -import { ShipName } from '../../components/ShipName'; -import { useCharge } from '../../state/docket'; -import useKilnState, { useVat } from '../../state/kiln'; -import { getAppName } from '../../state/util'; - -export const AppPrefs = ({ match }: RouteComponentProps<{ desk: string }>) => { - const { desk } = match.params; - const charge = useCharge(desk); - const vat = useVat(desk); - const tracking = !!vat?.arak.rail; - const otasEnabled = !vat?.arak.rail?.paused; - const otaSource = vat?.arak.rail?.ship; - const toggleOTAs = useKilnState((s) => s.toggleOTAs); - - const toggleUpdates = useCallback((on: boolean) => toggleOTAs(desk, on), [desk, toggleOTAs]); - - return ( - <> -

    {getAppName(charge)} Settings

    -
    - {tracking ? ( - -

    Automatically download and apply updates to keep {getAppName(charge)} up to date.

    - {otaSource && ( -

    - OTA Source: -

    - )} -
    - ) : ( -

    No settings

    - )} -
    - - ); -}; diff --git a/pkg/grid/src/nav/preferences/InterfacePrefs.tsx b/pkg/grid/src/nav/preferences/InterfacePrefs.tsx deleted file mode 100644 index 9690d35a6..000000000 --- a/pkg/grid/src/nav/preferences/InterfacePrefs.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import React from 'react'; -import { Setting } from '../../components/Setting'; -import { - setBrowserSetting, - useBrowserSettings, - useProtocolHandling, - useSettingsState -} from '../../state/settings'; -import { useBrowserId } from '../../state/local'; - -export function InterfacePrefs() { - const settings = useBrowserSettings(); - const browserId = useBrowserId(); - const protocolHandling = useProtocolHandling(browserId); - const secure = window.location.protocol === 'https:' || window.location.hostname === 'localhost'; - const linkHandlingAllowed = secure && 'registerProtocolHandler' in window.navigator; - const setProtocolHandling = (setting: boolean) => { - const newSettings = setBrowserSetting(settings, { protocolHandling: setting }, browserId); - useSettingsState - .getState() - .putEntry('browserSettings', 'settings', JSON.stringify(newSettings)); - }; - - const toggleProtoHandling = async () => { - if (!protocolHandling && window?.navigator?.registerProtocolHandler) { - try { - window.navigator.registerProtocolHandler( - 'web+urbitgraph', - '/apps/grid/perma?ext=%s', - 'Urbit Links' - ); - setProtocolHandling(true); - } catch (e) { - console.error(e); - } - } else if (protocolHandling && window.navigator?.unregisterProtocolHandler) { - try { - window.navigator.unregisterProtocolHandler('web+urbitgraph', '/apps/grid/perma?ext=%s'); - setProtocolHandling(false); - } catch (e) { - console.error(e); - } - } - }; - - return ( - <> -

    Interface Settings

    -
    - -

    - Automatically open urbit links when using this browser. - {!linkHandlingAllowed && ( - <> - - Unavailable with this browser/connection. - - - )} -

    -
    -
    - - ); -} diff --git a/pkg/grid/src/nav/preferences/NotificationPrefs.tsx b/pkg/grid/src/nav/preferences/NotificationPrefs.tsx deleted file mode 100644 index 61ef404b4..000000000 --- a/pkg/grid/src/nav/preferences/NotificationPrefs.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { setMentions } from '@urbit/api'; -import React from 'react'; -import { Setting } from '../../components/Setting'; -import { pokeOptimisticallyN } from '../../state/base'; -import { HarkState, reduceGraph, useHarkStore } from '../../state/hark'; -import { useBrowserId } from '../../state/local'; -import { - useSettingsState, - useBrowserNotifications, - useBrowserSettings, - SettingsState, - setBrowserSetting -} from '../../state/settings'; - -const selDnd = (s: SettingsState) => s.display.doNotDisturb; -async function toggleDnd() { - const state = useSettingsState.getState(); - const curr = selDnd(state); - await state.putEntry('display', 'doNotDisturb', !curr); -} - -const selMentions = (s: HarkState) => s.notificationsGraphConfig.mentions; -async function toggleMentions() { - const state = useHarkStore.getState(); - await pokeOptimisticallyN(useHarkStore, setMentions(!selMentions(state)), reduceGraph); -} - -export const NotificationPrefs = () => { - const doNotDisturb = useSettingsState(selDnd); - const mentions = useHarkStore(selMentions); - const settings = useBrowserSettings(); - const browserId = useBrowserId(); - const browserNotifications = useBrowserNotifications(browserId); - const secure = window.location.protocol === 'https:' || window.location.hostname === 'localhost'; - const notificationsAllowed = secure && 'Notification' in window; - - const setBrowserNotifications = (setting: boolean) => { - const newSettings = setBrowserSetting(settings, { browserNotifications: setting }, browserId); - useSettingsState - .getState() - .putEntry('browserSettings', 'settings', JSON.stringify(newSettings)); - }; - - const toggleNotifications = async () => { - if (!browserNotifications) { - Notification.requestPermission(); - setBrowserNotifications(true); - } else { - setBrowserNotifications(false); - } - }; - - return ( - <> -

    Notifications

    -
    - -

    - Blocks Urbit notifications in Landscape from appearing as badges and prevents browser - notifications if enabled. -

    -
    - -

    - Show desktop notifications in this browser. - {!secure && ( - <> - - Unavailable with this browser/connection. - - - )} -

    -
    - -

    Notify me if someone mentions my @p in a channel I've joined

    -
    -
    - - ); -}; diff --git a/pkg/grid/src/nav/preferences/SecurityPrefs.tsx b/pkg/grid/src/nav/preferences/SecurityPrefs.tsx deleted file mode 100644 index 10ab9d42e..000000000 --- a/pkg/grid/src/nav/preferences/SecurityPrefs.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React, { useState } from 'react'; -import classNames from 'classnames'; -import { Button } from '../../components/Button'; -import { Checkbox } from '../../components/Checkbox'; - -export const SecurityPrefs = () => { - const [allSessions, setAllSessions] = useState(false); - - return ( - <> -

    Security

    -
    -
    -

    Logout

    -
    - setAllSessions((prev) => !prev)} - > - Log out of all sessions. - -
    - {allSessions && } - -
    -
    -
    -
    - - ); -}; diff --git a/pkg/grid/src/nav/preferences/SystemUpdatePrefs.tsx b/pkg/grid/src/nav/preferences/SystemUpdatePrefs.tsx deleted file mode 100644 index 4a8eafc55..000000000 --- a/pkg/grid/src/nav/preferences/SystemUpdatePrefs.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import _ from 'lodash'; -import React, { ChangeEvent, FormEvent, useCallback, useEffect, useState } from 'react'; -import { Button } from '../../components/Button'; -import { Setting } from '../../components/Setting'; -import { ShipName } from '../../components/ShipName'; -import { Spinner } from '../../components/Spinner'; -import { useAsyncCall } from '../../logic/useAsyncCall'; -import useKilnState, { useVat } from '../../state/kiln'; - -export const SystemUpdatePrefs = () => { - const { changeOTASource, toggleOTAs } = useKilnState((s) => - _.pick(s, ['toggleOTAs', 'changeOTASource']) - ); - const base = useVat('base'); - const otasEnabled = base && !(base.arak?.rail?.paused ?? true); - const otaSource = base && base.arak.rail?.ship; - - const toggleBase = useCallback((on: boolean) => toggleOTAs('base', on), [toggleOTAs]); - - const [source, setSource] = useState(''); - const sourceDirty = source !== otaSource; - const { status: sourceStatus, call: setOTA } = useAsyncCall(changeOTASource); - - useEffect(() => { - if (otaSource) { - setSource(otaSource); - } - }, [otaSource]); - - const handleSourceChange = useCallback((e: ChangeEvent) => { - const { target } = e; - const value = target.value.trim(); - setSource(value.startsWith('~') ? value : `~${value}`); - }, []); - - const onSubmit = useCallback( - (e: FormEvent) => { - e.preventDefault(); - setOTA(source); - }, - [source] - ); - - return ( - <> -

    System Updates

    -
    - -

    Automatically download and apply system updates to keep your Urbit up to date.

    - {otaSource && ( -

    - OTA Source: -

    - )} -
    -
    - -

    - Enter a valid urbit name into this form to change who you receive OTA updates from. Be - sure to select a reliable urbit! -

    -
    - - {sourceDirty && ( - - )} -
    -
    -
    - - ); -}; diff --git a/pkg/grid/src/nav/search/Apps.tsx b/pkg/grid/src/nav/search/Apps.tsx deleted file mode 100644 index 8bd04da58..000000000 --- a/pkg/grid/src/nav/search/Apps.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import React, { useCallback, useEffect, useMemo } from 'react'; -import { RouteComponentProps } from 'react-router-dom'; -import fuzzy from 'fuzzy'; -import { Treaty } from '@urbit/api'; -import { ShipName } from '../../components/ShipName'; -import { useAllyTreaties } from '../../state/docket'; -import { useLeapStore } from '../Nav'; -import { AppList } from '../../components/AppList'; -import { addRecentDev } from './Home'; -import { Spinner } from '../../components/Spinner'; - -type AppsProps = RouteComponentProps<{ ship: string }>; - -export const Apps = ({ match }: AppsProps) => { - const { searchInput, selectedMatch, select } = useLeapStore((state) => ({ - searchInput: state.searchInput, - select: state.select, - selectedMatch: state.selectedMatch - })); - const provider = match?.params.ship; - const { treaties, status } = useAllyTreaties(provider); - - useEffect(() => { - if (provider) { - addRecentDev(provider); - } - }, [provider]); - - const results = useMemo(() => { - if (!treaties) { - return undefined; - } - const values = Object.values(treaties); - return fuzzy - .filter( - searchInput, - values.map((v) => v.title) - ) - .sort((a, b) => { - const left = a.string.startsWith(searchInput) ? a.score + 1 : a.score; - const right = b.string.startsWith(searchInput) ? b.score + 1 : b.score; - - return right - left; - }) - .map((result) => values[result.index]); - }, [treaties, searchInput]); - const count = results?.length; - - const getAppPath = useCallback( - (app: Treaty) => `${match?.path.replace(':ship', provider)}/${app.ship}/${app.desk}`, - [match] - ); - - useEffect(() => { - select( - <> - Apps by - - ); - }, [provider]); - - useEffect(() => { - if (results) { - useLeapStore.setState({ - matches: results.map((r) => ({ - url: getAppPath(r), - openInNewTab: false, - value: r.desk, - display: r.title - })) - }); - } - }, [results]); - - const showNone = - status === 'error' || ((status === 'success' || status === 'initial') && results?.length === 0); - - return ( -
    - {status === 'loading' && ( - - Finding software... - - )} - {results && results.length > 0 && ( - <> -
    -

    - Software developed by -

    -

    - {count} result{count === 1 ? '' : 's'} -

    -
    - -

    That's it!

    - - )} - {showNone && ( -

    - Unable to find software developed by -

    - )} -
    - ); -}; diff --git a/pkg/grid/src/nav/search/Home.tsx b/pkg/grid/src/nav/search/Home.tsx deleted file mode 100644 index a5db6b462..000000000 --- a/pkg/grid/src/nav/search/Home.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import produce from 'immer'; -import create from 'zustand'; -import _ from 'lodash'; -import React, { useEffect } from 'react'; -import { persist } from 'zustand/middleware'; -import { MatchItem, useLeapStore } from '../Nav'; -import { providerMatch } from './Providers'; -import { AppList } from '../../components/AppList'; -import { ProviderList } from '../../components/ProviderList'; -import { AppLink } from '../../components/AppLink'; -import { ShipName } from '../../components/ShipName'; -import { ProviderLink } from '../../components/ProviderLink'; -import useDocketState, { ChargesWithDesks, useCharges } from '../../state/docket'; -import { - clearStorageMigration, - createStorageKey, - getAppHref, - storageVersion -} from '../../state/util'; -import useContactState from '../../state/contact'; - -export interface RecentsStore { - recentApps: string[]; - recentDevs: string[]; - addRecentApp: (desk: string) => void; - addRecentDev: (ship: string) => void; - removeRecentApp: (desk: string) => void; -} - -export const useRecentsStore = create( - persist( - (set) => ({ - recentApps: [], - recentDevs: [], - addRecentApp: (desk: string) => { - set( - produce((draft: RecentsStore) => { - const hasApp = draft.recentApps.find((testDesk) => testDesk === desk); - if (!hasApp) { - draft.recentApps.unshift(desk); - } - - draft.recentApps = _.take(draft.recentApps, 3); - }) - ); - }, - addRecentDev: (dev) => { - set( - produce((draft: RecentsStore) => { - const hasDev = draft.recentDevs.includes(dev); - if (!hasDev) { - draft.recentDevs.unshift(dev); - } - - draft.recentDevs = _.take(draft.recentDevs, 3); - }) - ); - }, - removeRecentApp: (desk: string) => { - set( - produce((draft: RecentsStore) => { - _.remove(draft.recentApps, (test) => test === desk); - }) - ); - } - }), - { - whitelist: ['recentApps', 'recentDevs'], - name: createStorageKey('recents-store'), - version: storageVersion, - migrate: clearStorageMigration - } - ) -); - -window.recents = useRecentsStore.getState; - -export function addRecentDev(dev: string) { - return useRecentsStore.getState().addRecentDev(dev); -} - -export function addRecentApp(app: string) { - return useRecentsStore.getState().addRecentApp(app); -} - -function getApps(desks: string[], charges: ChargesWithDesks) { - return desks.filter((desk) => desk in charges).map((desk) => charges[desk]); -} - -export const Home = () => { - const selectedMatch = useLeapStore((state) => state.selectedMatch); - const { recentApps, recentDevs } = useRecentsStore(); - const charges = useCharges(); - const groups = charges?.landscape; - const contacts = useContactState((s) => s.contacts); - const defaultAlly = useDocketState((s) => - s.defaultAlly ? { shipName: s.defaultAlly, ...contacts[s.defaultAlly] } : null - ); - const providerList = recentDevs.map((d) => ({ shipName: d, ...contacts[d] })); - const apps = getApps(recentApps, charges); - - useEffect(() => { - const appMatches = apps.map((app) => ({ - url: getAppHref(app.href), - openInNewTab: true, - value: app.desk, - display: app.title - })); - const devs = recentDevs.map(providerMatch); - - useLeapStore.setState({ - matches: ([] as MatchItem[]).concat(appMatches, devs) - }); - }, [recentApps, recentDevs]); - - return ( -
    -

    - Recent Apps -

    - {apps.length === 0 && ( -
    -

    Apps you use will be listed here, in the order you used them.

    -

    You can click/tap/keyboard on a listed app to open it.

    - {groups && ( - addRecentApp('groups')} - /> - )} -
    - )} - {apps.length > 0 && ( - - )} -
    -

    - Recent Developers -

    - {recentDevs.length === 0 && ( -
    -

    Urbit app developers you search for will be listed here.

    - {defaultAlly && ( - <> -

    - Try out app discovery by visiting below. -

    - addRecentDev(defaultAlly.shipName)} - /> - - )} -
    - )} - {recentDevs.length > 0 && ( - - )} -
    - ); -}; diff --git a/pkg/grid/src/nav/search/Providers.tsx b/pkg/grid/src/nav/search/Providers.tsx deleted file mode 100644 index 5c32e36bd..000000000 --- a/pkg/grid/src/nav/search/Providers.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import React, { useEffect, useMemo } from 'react'; -import { RouteComponentProps } from 'react-router-dom'; -import fuzzy from 'fuzzy'; -import { Provider, deSig } from '@urbit/api'; -import * as ob from 'urbit-ob'; -import { MatchItem, useLeapStore } from '../Nav'; -import { useAllies, useCharges } from '../../state/docket'; -import { ProviderList } from '../../components/ProviderList'; -import useContactState from '../../state/contact'; -import { AppList } from '../../components/AppList'; -import { getAppHref } from '../../state/util'; - -type ProvidersProps = RouteComponentProps<{ ship: string }>; - -export function providerMatch(provider: Provider | string): MatchItem { - const value = typeof provider === 'string' ? provider : provider.shipName; - const display = typeof provider === 'string' ? undefined : provider.nickname; - - return { - value, - display, - url: `/leap/search/${value}/apps`, - openInNewTab: false - }; -} - -function fuzzySort(search: string) { - return (a: fuzzy.FilterResult, b: fuzzy.FilterResult): number => { - const left = a.string.startsWith(search) ? a.score + 1 : a.score; - const right = b.string.startsWith(search) ? b.score + 1 : b.score; - - return right - left; - }; -} - -export const Providers = ({ match }: ProvidersProps) => { - const selectedMatch = useLeapStore((state) => state.selectedMatch); - const provider = match?.params.ship; - const contacts = useContactState((s) => s.contacts); - const charges = useCharges(); - const allies = useAllies(); - const search = provider || ''; - const chargeArray = Object.entries(charges); - const appResults = useMemo( - () => - charges - ? fuzzy - .filter( - search, - chargeArray.map(([desk, charge]) => charge.title + desk) - ) - .sort(fuzzySort(search)) - .map((el) => chargeArray[el.index][1]) - : [], - [charges, search] - ); - - const patp = `~${deSig(search) || ''}`; - const isValidPatp = ob.isValidPatp(patp); - - const results = useMemo(() => { - if (!allies) { - return []; - } - const exact = - isValidPatp && !Object.keys(allies).includes(patp) - ? [ - { - shipName: patp, - ...contacts[patp] - } - ] - : []; - return [ - ...exact, - ...fuzzy - .filter( - search, - Object.entries(allies).map(([ship]) => ship) - ) - .sort(fuzzySort(search)) - .map((el) => ({ shipName: el.original, ...contacts[el.original] })) - ]; - }, [allies, search, contacts]); - - const count = results?.length; - - useEffect(() => { - if (search) { - useLeapStore.setState({ rawInput: search }); - } - }, []); - - useEffect(() => { - if (results) { - const providerMatches = results ? results.map(providerMatch) : []; - const appMatches = appResults - ? appResults.map((app) => ({ - url: getAppHref(app.href), - openInNewTab: true, - value: app.desk, - display: app.title - })) - : []; - - const newProviderMatches = isValidPatp - ? [ - { - url: `/leap/search/${patp}/apps`, - value: patp, - display: patp, - openInNewTab: false - } - ] - : []; - - useLeapStore.setState({ - matches: ([] as MatchItem[]).concat(appMatches, providerMatches, newProviderMatches) - }); - } - }, [results, patp, isValidPatp]); - - return ( -
    - {appResults && !(results?.length > 0 && appResults.length === 0) && ( -
    -

    - Installed Apps -

    - -
    - )} - {results && !(appResults?.length > 0 && results.length === 0) && ( -
    -
    -

    Searching Software Providers

    -

    - {count} result{count === 1 ? '' : 's'} -

    -
    - -
    - )} -

    That's it!

    -
    - ); -}; diff --git a/pkg/grid/src/nav/search/TreatyInfo.tsx b/pkg/grid/src/nav/search/TreatyInfo.tsx deleted file mode 100644 index a6c78feec..000000000 --- a/pkg/grid/src/nav/search/TreatyInfo.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React, { useEffect } from 'react'; -import { useParams } from 'react-router-dom'; -import { AppInfo } from '../../components/AppInfo'; -import { Spinner } from '../../components/Spinner'; -import useDocketState, { useCharge, useTreaty } from '../../state/docket'; -import { useVat } from '../../state/kiln'; -import { getAppName } from '../../state/util'; -import { useLeapStore } from '../Nav'; - -export const TreatyInfo = () => { - const select = useLeapStore((state) => state.select); - const { host, desk } = useParams<{ host: string; desk: string }>(); - const treaty = useTreaty(host, desk); - const vat = useVat(desk); - const charge = useCharge(desk); - const name = getAppName(treaty); - - useEffect(() => { - if (!charge) { - useDocketState.getState().requestTreaty(host, desk); - } - }, [host, desk]); - - useEffect(() => { - select(<>{name}); - useLeapStore.setState({ matches: [] }); - }, [name]); - - if (!treaty) { - // TODO: maybe replace spinner with skeletons - return ( -
    - -
    - ); - } - return ; -}; diff --git a/pkg/grid/src/pages/Grid.tsx b/pkg/grid/src/pages/Grid.tsx deleted file mode 100644 index b1d968236..000000000 --- a/pkg/grid/src/pages/Grid.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import React, { FunctionComponent, useEffect } from 'react'; -import { ErrorBoundary } from 'react-error-boundary'; -import { Route, useHistory, useParams } from 'react-router-dom'; -import { ErrorAlert } from '../components/ErrorAlert'; -import { MenuState, Nav } from '../nav/Nav'; -import useKilnState from '../state/kiln'; -import { RemoveApp } from '../tiles/RemoveApp'; -import { SuspendApp } from '../tiles/SuspendApp'; -import { TileGrid } from '../tiles/TileGrid'; - -import { TileInfo } from '../tiles/TileInfo'; - -interface RouteProps { - menu?: MenuState; -} - -export const Grid: FunctionComponent = () => { - const { push } = useHistory(); - const { menu } = useParams(); - - useEffect(() => { - // TOOD: rework - // Heuristically detect reload completion and redirect - async function attempt(count = 0) { - if (count > 5) { - window.location.reload(); - } - const start = performance.now(); - await useKilnState.getState().fetchVats(); - await useKilnState.getState().fetchVats(); - if (performance.now() - start > 5000) { - attempt(count + 1); - } else { - push('/'); - } - } - if (menu === 'upgrading') { - attempt(); - } - }, [menu]); - - return ( -
    -
    -
    - -
    - - push('/')}> - - - - - - - - - - -
    -
    - ); -}; diff --git a/pkg/grid/src/pages/PermalinkRoutes.tsx b/pkg/grid/src/pages/PermalinkRoutes.tsx deleted file mode 100644 index c1fefda0d..000000000 --- a/pkg/grid/src/pages/PermalinkRoutes.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import React, { useEffect } from 'react'; -import { Switch, Route, Redirect, RouteComponentProps } from 'react-router-dom'; -import { Spinner } from '../components/Spinner'; -import { useQuery } from '../logic/useQuery'; -import { useCharge } from '../state/docket'; -import useKilnState, { useKilnLoaded } from '../state/kiln'; -import { getAppHref } from '../state/util'; - -function getDeskByForeignRef(ship: string, desk: string): string | undefined { - const { vats } = useKilnState.getState(); - const found = Object.entries(vats).find( - ([, vat]) => vat.arak.rail?.ship === ship && vat.arak.rail?.desk === desk - ); - return found ? found[0] : undefined; -} - -type AppLinkProps = RouteComponentProps<{ - ship: string; - desk: string; - link: string; -}>; - -function AppLink({ match, history, location }: AppLinkProps) { - const { ship, desk, link = '' } = match.params; - const ourDesk = getDeskByForeignRef(ship, desk); - console.log(ourDesk); - - if (ourDesk) { - return ; - } - return ; -} - -function AppLinkNotFound({ match }: AppLinkProps) { - const { ship, desk } = match.params; - return ; -} - -function AppLinkInvalid() { - return ( -
    -

    Link was malformed

    -

    The link you tried to follow was invalid

    -
    - ); -} -function AppLinkRedirect({ desk, link }: { desk: string; link: string }) { - const charge = useCharge(desk); - - useEffect(() => { - if (!charge) { - return; - } - - const query = new URLSearchParams({ - 'grid-link': encodeURIComponent(`/${link}`) - }); - - const url = `${getAppHref(charge.href)}?${query.toString()}`; - window.open(url, desk); - }, [charge]); - - return ; -} - -const LANDSCAPE_DESK = 'landscape'; -const LANDSCAPE_HOST = '~lander-dister-dozzod-dozzod'; - -function LandscapeLink({ match }: RouteComponentProps<{ link: string }>) { - const { link } = match.params; - - return ; -} - -export function PermalinkRoutes() { - const loaded = useKilnLoaded(); - - const { query } = useQuery(); - - if (query.has('ext')) { - const ext = query.get('ext')!; - const url = `/perma${ext.slice(16)}`; - return ; - } - - if (!loaded) { - return ; - } - - return ( - - - - - - ); -} diff --git a/pkg/grid/src/state/api.ts b/pkg/grid/src/state/api.ts deleted file mode 100644 index 2e4058fa8..000000000 --- a/pkg/grid/src/state/api.ts +++ /dev/null @@ -1,24 +0,0 @@ -import Urbit from '@urbit/http-api'; -import { useMockData } from './util'; - -declare global { - interface Window { - ship: string; - } -} - -const api = useMockData - ? ({ - poke: async () => {}, - subscribe: async () => {}, - subscribeOnce: async () => {}, - ship: '', - scry: async () => {} - } as unknown as Urbit) - : new Urbit('', ''); -if (import.meta.env.DEV || useMockData) { - api.verbose = true; -} -api.ship = useMockData ? 'dopzod' : window.ship; - -export default api; diff --git a/pkg/grid/src/state/base.ts b/pkg/grid/src/state/base.ts deleted file mode 100644 index 5041cf649..000000000 --- a/pkg/grid/src/state/base.ts +++ /dev/null @@ -1,196 +0,0 @@ -/* eslint-disable no-param-reassign */ -import { applyPatches, Patch, produceWithPatches, setAutoFreeze, enablePatches } from 'immer'; -import { compose } from 'lodash/fp'; -import _ from 'lodash'; -import create, { GetState, SetState, UseStore } from 'zustand'; -import { persist } from 'zustand/middleware'; -import Urbit, { FatalError, SubscriptionRequestInterface } from '@urbit/http-api'; -import { Poke } from '@urbit/api'; -import api from './api'; -import { clearStorageMigration, createStorageKey, storageVersion, useMockData } from './util'; - -setAutoFreeze(false); -enablePatches(); - -export const stateSetter = >( - fn: (state: Readonly>) => void, - set: (newState: T & BaseState) => void, - get: () => T & BaseState -): void => { - const old = get(); - const [state] = produceWithPatches(old, fn) as readonly [T & BaseState, any, Patch[]]; - // console.log(patches); - set(state); -}; - -export const optStateSetter = >( - fn: (state: T & BaseState) => void, - set: (newState: T & BaseState) => void, - get: () => T & BaseState -): string => { - const old = get(); - const id = _.uniqueId(); - const [state, , patches] = produceWithPatches(old, fn) as readonly [ - T & BaseState, - any, - Patch[] - ]; - set({ ...state, patches: { ...state.patches, [id]: patches } }); - return id; -}; - -export const reduceState = , U>( - state: UseStore>, - data: U, - reducers: ((data: U, state: S & BaseState) => S & BaseState)[] -): void => { - const reducer = compose(reducers.map((r) => (sta) => r(data, sta))); - state.getState().set((s) => { - reducer(s); - }); -}; - -export const reduceStateN = , U>( - state: S & BaseState, - data: U, - reducers: ((data: U, state: S & BaseState) => S & BaseState)[] -): void => { - const reducer = compose(reducers.map((r) => (sta) => r(data, sta))); - state.set(reducer); -}; - -export const optReduceState = , U>( - state: UseStore>, - data: U, - reducers: ((data: U, state: S & BaseState) => BaseState & S)[] -): string => { - const reducer = compose(reducers.map((r) => (sta) => r(data, sta))); - return state.getState().optSet((s) => { - reducer(s); - }); -}; - -/* eslint-disable-next-line import/no-mutable-exports */ -export let stateStorageKeys: string[] = []; - -export const stateStorageKey = (stateName: string): string => { - const key = createStorageKey(`${stateName}State`); - stateStorageKeys = [...new Set([...stateStorageKeys, key])]; - return key; -}; - -(window as any).clearStates = () => { - stateStorageKeys.forEach((key) => { - localStorage.removeItem(key); - }); -}; - -export interface BaseState> { - rollback: (id: string) => void; - patches: { - [id: string]: Patch[]; - }; - set: (fn: (state: StateType & BaseState) => void) => void; - addPatch: (id: string, ...patch: Patch[]) => void; - removePatch: (id: string) => void; - optSet: (fn: (state: StateType & BaseState) => void) => string; - initialize: (api: Urbit) => Promise; -} - -export function createSubscription( - app: string, - path: string, - e: (data: any) => void -): SubscriptionRequestInterface { - const request = { - app, - path, - event: e, - err: () => {}, - quit: () => { - throw new FatalError("subscription clogged"); - } - }; - // TODO: err, quit handling (resubscribe?) - return request; -} - -export const createState = >( - name: string, - properties: T | ((set: SetState>, get: GetState>) => T), - blacklist: (keyof BaseState | keyof T)[] = [], - subscriptions: (( - set: SetState>, - get: GetState> - ) => SubscriptionRequestInterface)[] = [] -): UseStore> => - create>( - persist>( - (set, get) => ({ - initialize: async (airlock: Urbit) => { - await Promise.all(subscriptions.map((sub) => airlock.subscribe(sub(set, get)))); - }, - set: (fn) => stateSetter(fn, set, get), - optSet: (fn) => { - return optStateSetter(fn, set, get); - }, - patches: {}, - addPatch: (id: string, patch: Patch[]) => { - set((s) => ({ ...s, patches: { ...s.patches, [id]: patch } })); - }, - removePatch: (id: string) => { - set((s) => ({ ...s, patches: _.omit(s.patches, id) })); - }, - rollback: (id: string) => { - set((state) => { - const applying = state.patches[id]; - return { ...applyPatches(state, applying), patches: _.omit(state.patches, id) }; - }); - }, - ...(typeof properties === 'function' ? (properties as any)(set, get) : properties) - }), - { - blacklist, - name: stateStorageKey(name), - version: storageVersion, - migrate: clearStorageMigration - } - ) - ); - -export async function doOptimistically>( - state: UseStore>, - action: A, - call: (a: A) => Promise, - reduce: ((a: A, fn: S & BaseState) => S & BaseState)[] -) { - let num: string | undefined; - try { - num = optReduceState(state, action, reduce); - await call(action); - state.getState().removePatch(num); - } catch (e) { - console.error(e); - if (num) { - state.getState().rollback(num); - } - } -} - -export async function pokeOptimisticallyN>( - state: UseStore>, - poke: Poke, - reduce: ((a: A, fn: S & BaseState) => S & BaseState)[] -) { - let num: string | undefined; - try { - num = optReduceState(state, poke.json, reduce); - await (useMockData ? new Promise((res) => setTimeout(res, 500)) : api.poke(poke)); - state.getState().removePatch(num); - } catch (e) { - console.error(e); - if (num) { - state.getState().rollback(num); - } - } -} diff --git a/pkg/grid/src/state/contact.ts b/pkg/grid/src/state/contact.ts deleted file mode 100644 index 40bf49bdb..000000000 --- a/pkg/grid/src/state/contact.ts +++ /dev/null @@ -1,134 +0,0 @@ -/* eslint-disable no-param-reassign */ -import { Contact, ContactEditFieldPrim, ContactUpdate, deSig, Patp, Rolodex } from '@urbit/api'; -import { useCallback } from 'react'; -import _ from 'lodash'; -import { BaseState, createState, createSubscription, reduceStateN } from './base'; -import { useMockData } from './util'; -import { mockContacts } from './mock-data'; - -export interface BaseContactState { - contacts: Rolodex; - isContactPublic: boolean; - nackedContacts: Set; - [ref: string]: unknown; -} - -type ContactState = BaseContactState & BaseState; - -const initial = (json: ContactUpdate, state: ContactState): ContactState => { - const data = _.get(json, 'initial', false); - if (data) { - state.contacts = data.rolodex; - state.isContactPublic = data['is-public']; - } - return state; -}; - -const add = (json: ContactUpdate, state: ContactState): ContactState => { - const data = _.get(json, 'add', false); - if (data) { - state.contacts[data.ship] = data.contact; - } - return state; -}; - -const remove = (json: ContactUpdate, state: ContactState): ContactState => { - const data = _.get(json, 'remove', false); - if (data && data.ship in state.contacts) { - delete state.contacts[data.ship]; - } - return state; -}; - -export const edit = (json: ContactUpdate, state: ContactState): ContactState => { - const data = _.get(json, 'edit', false); - const ship = `~${deSig(data.ship)}`; - if (data && ship in state.contacts) { - const [field] = Object.keys(data['edit-field']); - if (!field) { - return state; - } - - const value = data['edit-field'][field]; - if (field === 'add-group') { - if (typeof value !== 'string') { - state.contacts[ship].groups.push(`/ship/${Object.values(value).join('/')}`); - } else if (!state.contacts[ship].groups.includes(value)) { - state.contacts[ship].groups.push(value); - } - } else if (field === 'remove-group') { - if (typeof value !== 'string') { - state.contacts[ship].groups = state.contacts[ship].groups.filter( - (g) => g !== `/ship/${Object.values(value).join('/')}` - ); - } else { - state.contacts[ship].groups = state.contacts[ship].groups.filter((g) => g !== value); - } - } else { - const k = field as ContactEditFieldPrim; - state.contacts[ship][k] = value; - } - } - return state; -}; - -const setPublic = (json: ContactUpdate, state: ContactState): ContactState => { - const data = _.get(json, 'set-public', state.isContactPublic); - state.isContactPublic = data; - return state; -}; - -export const reduceNacks = ( - json: { resource?: { res: string } }, - state: ContactState -): ContactState => { - const data = json?.resource; - if (data) { - state.nackedContacts.add(`~${data.res}`); - } - return state; -}; - -export const reduce = [initial, add, remove, edit, setPublic]; - -const useContactState = createState( - 'Contact', - { - contacts: {}, - nackedContacts: new Set(), - isContactPublic: false - }, - ['nackedContacts'], - [ - (set, get) => - createSubscription('contact-pull-hook', '/nacks', (e) => { - const data = e?.resource; - if (data) { - reduceStateN(get(), data, [reduceNacks]); - } - }), - (set, get) => - createSubscription('contact-store', '/all', (e) => { - const data = _.get(e, 'contact-update', false); - if (data) { - reduceStateN(get(), data, reduce); - } - }) - ] -); - -if (useMockData) { - useContactState.setState({ contacts: mockContacts }); -} - -export function useContact(ship: string) { - return useContactState( - useCallback((s) => s.contacts[`~${deSig(ship)}`] as Contact | null, [ship]) - ); -} - -export function useOurContact() { - return useContact(`~${window.ship}`); -} - -export default useContactState; diff --git a/pkg/grid/src/state/docket.ts b/pkg/grid/src/state/docket.ts deleted file mode 100644 index 779ab4c18..000000000 --- a/pkg/grid/src/state/docket.ts +++ /dev/null @@ -1,364 +0,0 @@ -import create, { SetState } from 'zustand'; -import produce from 'immer'; -import { useCallback, useEffect, useState } from 'react'; -import { omit, pick } from 'lodash'; -import { - Allies, - Charge, - ChargeUpdateInitial, - scryAllies, - scryAllyTreaties, - scryCharges, - scryDefaultAlly, - Treaty, - Docket, - Treaties, - chadIsRunning, - AllyUpdateIni, - AllyUpdateNew, - TreatyUpdateIni, - TreatyUpdate, - docketInstall, - ChargeUpdate, - kilnRevive, - kilnSuspend, - allyShip -} from '@urbit/api'; -import api from './api'; -import { mockAllies, mockCharges, mockTreaties } from './mock-data'; -import { fakeRequest, normalizeUrbitColor, useMockData } from './util'; -import { Status } from '../logic/useAsyncCall'; - -export interface ChargeWithDesk extends Charge { - desk: string; -} - -export interface ChargesWithDesks { - [ref: string]: ChargeWithDesk; -} - -export interface DocketWithDesk extends Docket { - desk: string; -} - -interface DocketState { - charges: ChargesWithDesks; - treaties: Treaties; - allies: Allies; - defaultAlly: string | null; - fetchCharges: () => Promise; - fetchDefaultAlly: () => Promise; - requestTreaty: (ship: string, desk: string) => Promise; - fetchAllies: () => Promise; - fetchAllyTreaties: (ally: string) => Promise; - toggleDocket: (desk: string) => Promise; - installDocket: (ship: string, desk: string) => Promise; - uninstallDocket: (desk: string) => Promise; - // - addAlly: (ship: string) => Promise; - set: SetState; -} - -const useDocketState = create((set, get) => ({ - defaultAlly: useMockData ? '~zod' : null, - fetchDefaultAlly: async () => { - const defaultAlly = await api.scry(scryDefaultAlly); - set({ defaultAlly }); - }, - fetchCharges: async () => { - const charg = useMockData - ? await fakeRequest(mockCharges) - : (await api.scry(scryCharges)).initial; - - const charges = Object.entries(charg).reduce((obj: ChargesWithDesks, [key, value]) => { - // eslint-disable-next-line no-param-reassign - obj[key] = normalizeDocket(value as ChargeWithDesk, key); - return obj; - }, {}); - - set({ charges }); - }, - fetchAllies: async () => { - const allies = useMockData ? mockAllies : (await api.scry(scryAllies)).ini; - set({ allies }); - return allies; - }, - fetchAllyTreaties: async (ally: string) => { - let treaties = useMockData - ? mockTreaties - : (await api.scry(scryAllyTreaties(ally))).ini; - treaties = normalizeDockets(treaties); - set((s) => ({ treaties: { ...s.treaties, ...treaties } })); - return treaties; - }, - requestTreaty: async (ship: string, desk: string) => { - const { treaties } = get(); - if (useMockData) { - set({ treaties: await fakeRequest(treaties) }); - return treaties[desk]; - } - - const key = `${ship}/${desk}`; - if (key in treaties) { - return treaties[key]; - } - - const result = await api.subscribeOnce('treaty', `/treaty/${key}`, 20000); - const treaty = { ...normalizeDocket(result, desk), ship }; - set((state) => ({ - treaties: { ...state.treaties, [key]: treaty } - })); - return treaty; - }, - installDocket: async (ship: string, desk: string) => { - const treaty = get().treaties[`${ship}/${desk}`]; - if (!treaty) { - throw new Error('Bad install'); - } - set((state) => addCharge(state, desk, { ...treaty, chad: { install: null } })); - if (useMockData) { - await new Promise((res) => setTimeout(() => res(), 10000)); - set((state) => addCharge(state, desk, { ...treaty, chad: { glob: null } })); - } - - return api.poke(docketInstall(ship, desk)); - }, - uninstallDocket: async (desk: string) => { - set((state) => delCharge(state, desk)); - if (useMockData) { - return; - } - await api.poke({ - app: 'docket', - mark: 'docket-uninstall', - json: desk - }); - }, - toggleDocket: async (desk: string) => { - if (useMockData) { - set( - produce((draft) => { - const charge = draft.charges[desk]; - charge.chad = chadIsRunning(charge.chad) ? { suspend: null } : { glob: null }; - }) - ); - } - const { charges } = get(); - const charge = charges[desk]; - if (!charge) { - return; - } - const suspended = 'suspend' in charge.chad; - if (suspended) { - await api.poke(kilnRevive(desk)); - } else { - await api.poke(kilnSuspend(desk)); - } - }, - treaties: useMockData ? normalizeDockets(mockTreaties) : {}, - charges: {}, - allies: useMockData ? mockAllies : {}, - addAlly: async (ship) => { - set((draft) => { - draft.allies[ship] = []; - }); - - return api.poke(allyShip(ship)); - }, - set -})); - -function normalizeDocket(docket: T, desk: string): T { - return { - ...docket, - desk, - color: normalizeUrbitColor(docket.color) - }; -} - -function normalizeDockets(dockets: Record): Record { - return Object.entries(dockets).reduce((obj: Record, [key, value]) => { - const [, desk] = key.split('/'); - // eslint-disable-next-line no-param-reassign - obj[key] = normalizeDocket(value, desk); - return obj; - }, {}); -} - -function addCharge(state: DocketState, desk: string, charge: Charge) { - return { charges: { ...state.charges, [desk]: normalizeDocket(charge as ChargeWithDesk, desk) } }; -} - -function delCharge(state: DocketState, desk: string) { - return { charges: omit(state.charges, desk) }; -} - -api.subscribe({ - app: 'docket', - path: '/charges', - event: (data: ChargeUpdate) => { - useDocketState.setState((state) => { - if ('add-charge' in data) { - const { desk, charge } = data['add-charge']; - return addCharge(state, desk, charge); - } - - if ('del-charge' in data) { - const desk = data['del-charge']; - return delCharge(state, desk); - } - - return { charges: state.charges }; - }); - } -}); - -api.subscribe({ - app: 'treaty', - path: '/treaties', - event: (data: TreatyUpdate) => { - useDocketState.getState().set((draft) => { - if ('add' in data) { - const { ship, desk } = data.add; - const treaty = normalizeDocket(data.add, desk); - draft.treaties[`${ship}/${desk}`] = treaty; - } - - if ('ini' in data) { - const treaties = normalizeDockets(data.ini); - draft.treaties = { ...draft.treaties, ...treaties }; - } - }); - } -}); - -api.subscribe({ - app: 'treaty', - path: '/allies', - event: (data: AllyUpdateNew) => { - useDocketState.getState().set((draft) => { - if ('new' in data) { - const { ship, alliance } = data.new; - draft.allies[ship] = alliance; - } - }); - } -}); - -const selCharges = (s: DocketState) => { - return s.charges; -}; - -export function useCharges() { - return useDocketState(selCharges); -} - -export function useCharge(desk: string) { - return useDocketState(useCallback((state) => state.charges[desk], [desk])); -} - -const selRequest = (s: DocketState) => s.requestTreaty; -export function useRequestDocket() { - return useDocketState(selRequest); -} - -const selAllies = (s: DocketState) => s.allies; -export function useAllies() { - return useDocketState(selAllies); -} - -export function useAllyTreaties(ship: string) { - const allies = useAllies(); - const isAllied = ship in allies; - const [status, setStatus] = useState('initial'); - const [treaties, setTreaties] = useState(); - - useEffect(() => { - if (Object.keys(allies).length > 0 && !isAllied) { - setStatus('loading'); - useDocketState.getState().addAlly(ship); - } - }, [allies, isAllied, ship]); - - useEffect(() => { - async function fetchTreaties() { - if (isAllied) { - setStatus('loading'); - try { - const newTreaties = await useDocketState.getState().fetchAllyTreaties(ship); - - if (Object.keys(newTreaties).length > 0) { - setTreaties(newTreaties); - setStatus('success'); - } - } catch { - setStatus('error'); - } - } - } - - fetchTreaties(); - }, [ship, isAllied]); - - const storeTreaties = useDocketState( - useCallback( - (s) => { - const charter = s.allies[ship]; - return pick(s.treaties, ...(charter || [])); - }, - [ship] - ) - ); - - useEffect(() => { - const timeout = setTimeout(() => { - setStatus('error'); - }, 30 * 1000); // wait 30 secs before timing out - - if (Object.keys(storeTreaties).length > 0) { - setTreaties(storeTreaties); - setStatus('success'); - clearTimeout(timeout); - } - - return () => { - clearTimeout(timeout); - }; - }, [storeTreaties]); - - return { - isAllied, - treaties, - status - }; -} - -export function useTreaty(host: string, desk: string) { - return useDocketState( - useCallback( - (s) => { - const ref = `${host}/${desk}`; - return s.treaties[ref]; - }, - [host, desk] - ) - ); -} - -export function allyForTreaty(ship: string, desk: string) { - const ref = `${ship}/${desk}`; - const { allies } = useDocketState.getState(); - const ally = Object.entries(allies).find(([, allied]) => allied.includes(ref))?.[0]; - return ally; -} - -export const landscapeTreatyHost = import.meta.env.LANDSCAPE_HOST as string; - -// xx useful for debugging -window.docket = useDocketState.getState; - -if (useMockData) { - window.desk = 'garden'; -} - -export default useDocketState; diff --git a/pkg/grid/src/state/hark-types.ts b/pkg/grid/src/state/hark-types.ts deleted file mode 100644 index e9d54636f..000000000 --- a/pkg/grid/src/state/hark-types.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * I know this doesn't match our current hark type scheme, but since we're talking - * about changing that I decided to just throw something together to at least test - * this flow for updates. - */ - -export interface RuntimeLagNotification { - type: 'runtime-lag'; -} - -export interface BaseBlockedNotification { - type: 'system-updates-blocked'; - desks: string[]; -} - -export interface BasicNotification { - type: 'basic'; - time: string; - message: string; -} - -export type Notification = BasicNotification | BaseBlockedNotification | RuntimeLagNotification; diff --git a/pkg/grid/src/state/hark.ts b/pkg/grid/src/state/hark.ts deleted file mode 100644 index ab0c8e678..000000000 --- a/pkg/grid/src/state/hark.ts +++ /dev/null @@ -1,264 +0,0 @@ -/* eslint-disable no-param-reassign */ -import { - BigIntOrderedMap, - makePatDa, - decToUd, - unixToDa, - Timebox, - harkBinToId, - opened, - HarkBin, - HarkLid, - archive, - HarkContent, - NotificationGraphConfig, - archiveAll -} from '@urbit/api'; -/* eslint-disable-next-line camelcase */ -import { unstable_batchedUpdates } from 'react-dom'; -import produce from 'immer'; -import _ from 'lodash'; -import api from './api'; -import { getBrowserSetting, parseBrowserSettings, useSettingsState } from './settings'; -import { BaseState, createState, createSubscription, reduceStateN } from './base'; -import { mockNotifications } from './mock-data'; -import { useMockData } from './util'; -import { useLocalState } from './local'; - -export interface HarkState { - seen: Timebox; - unseen: Timebox; - archive: BigIntOrderedMap; - set: (f: (s: HarkState) => void) => void; - opened: () => Promise; - notificationsGraphConfig: NotificationGraphConfig; - archiveAll: () => Promise; - archiveNote: (bin: HarkBin, lid: HarkLid) => Promise; - getMore: () => Promise; - webNotes: { - [binId: string]: Notification[]; - }; - [ref: string]: unknown; -} - -type BaseHarkState = BaseState & HarkState; - -function updateState( - key: string, - transform: (state: BaseHarkState, data: any) => void -): (json: any, state: BaseHarkState) => BaseHarkState { - return (json: any, state: BaseHarkState) => { - if (_.has(json, key)) { - transform(state, _.get(json, key, undefined)); - } - return state; - }; -} - -export const reduceGraph = [ - updateState('initial', (draft, data) => { - draft.notificationsGraphConfig = data; - }), - updateState('set-mentions', (draft, data) => { - draft.notificationsGraphConfig.mentions = data; - }) -]; - -export const useHarkStore = createState( - 'Hark', - (set, get) => ({ - seen: {}, - unseen: useMockData ? mockNotifications : {}, - archive: new BigIntOrderedMap(), - webNotes: {}, - notificationsGraphConfig: { - watchOnSelf: false, - mentions: false, - watching: [] - }, - - set: (f) => { - const newState = produce(get(), f); - set(newState); - }, - archiveAll: async () => { - get().set((draft) => { - draft.unseen = {}; - draft.seen = {}; - }); - await api.poke(archiveAll); - }, - archiveNote: async (bin, lid) => { - get().set((draft) => { - const seen = 'seen' in lid ? 'seen' : 'unseen'; - const binId = harkBinToId(bin); - delete draft[seen][binId]; - }); - if (useMockData) { - return; - } - await api.poke(archive(bin, lid)); - }, - opened: async () => { - reduceHark({ opened: null }); - - await api.poke(opened); - }, - getMore: async () => { - const { archive: arch } = get(); - const idx = decToUd((arch?.peekSmallest()?.[0] || unixToDa(Date.now() * 1000)).toString()); - const update = await api.scry({ - app: 'hark-store', - path: `/recent/inbox/${idx}/5` - }); - reduceHark(update); - } - }), - ['archive', 'unseen', 'seen'], - [ - (set, get) => - createSubscription('hark-graph-hook', '/updates', (j) => { - const graphHookData = _.get(j, 'hark-graph-hook-update', false); - if (graphHookData) { - reduceStateN(get(), graphHookData, reduceGraph); - } - }), - () => - createSubscription('hark-store', '/updates', (u) => { - /* eslint-ignore-next-line camelcase */ - unstable_batchedUpdates(() => { - reduceHark(u); - }); - }) - ] -); - -function reduceHark(u: any) { - const { set } = useHarkStore.getState(); - if (!u) { - return; - } - if ('more' in u) { - u.more.forEach((upd: any) => { - reduceHark(upd); - }); - } else if ('all-stats' in u) { - // TODO: probably ignore? - } else if ('added' in u) { - set((draft) => { - const { bin } = u.added; - const binId = harkBinToId(bin); - draft.unseen[binId] = u.added; - }); - } else if ('timebox' in u) { - const { timebox } = u; - const { lid, notifications } = timebox; - if ('archive' in lid) { - set((draft) => { - const time = makePatDa(lid.archive); - const old = draft.archive.get(time) || {}; - notifications.forEach((note: any) => { - const binId = harkBinToId(note.bin); - old[binId] = note; - }); - draft.archive = draft.archive.set(time, old); - }); - } else { - set((draft) => { - const seen = 'seen' in lid ? 'seen' : 'unseen'; - notifications.forEach((note: any) => { - const binId = harkBinToId(note.bin); - draft[seen][binId] = note; - }); - }); - } - } else if ('archived' in u) { - const { lid, notification } = u.archived; - set((draft) => { - const seen = 'seen' in lid ? 'seen' : 'unseen'; - const binId = harkBinToId(notification.bin); - delete draft[seen][binId]; - const time = makePatDa(u.archived.time); - const timebox = draft.archive?.get(time) || {}; - timebox[binId] = notification; - draft.archive = draft.archive.set(time, timebox); - }); - } else if ('opened' in u) { - set((draft) => { - const bins = Object.keys(draft.unseen); - bins.forEach((bin) => { - const old = draft.seen[bin]; - const curr = draft.unseen[bin]; - curr.body = [...curr.body, ...(old?.body || [])]; - draft.seen[bin] = curr; - delete draft.unseen[bin]; - }); - }); - } else if ('del-place' in u) { - const { path, desk } = u['del-place']; - const pathId = `${desk}${path}`; - const wipeBox = (t: Timebox) => { - Object.keys(t).forEach((bin) => { - if (bin.startsWith(pathId)) { - delete t[bin]; - } - }); - }; - set((draft) => { - wipeBox(draft.unseen); - wipeBox(draft.seen); - draft.archive.keys().forEach((key) => { - wipeBox(draft.archive.get(key)!); - }); - }); - } -} - -api.subscribe({ - app: 'hark-store', - path: '/updates', - event: (u: any) => { - /* eslint-ignore-next-line camelcase */ - unstable_batchedUpdates(() => { - reduceHark(u); - }); - } -}); - -function harkContentsToPlainText(contents: HarkContent[]) { - return contents - .map((c) => { - if ('ship' in c) { - return c.ship; - } - return c.text; - }) - .join(''); -} - -api.subscribe({ - app: 'hark-store', - path: '/notes', - event: (u: any) => { - if ('add-note' in u) { - const { browserSettings, display } = useSettingsState.getState(); - const { browserId } = useLocalState.getState(); - const settings = parseBrowserSettings(browserSettings.settings); - const browserNotifications = getBrowserSetting(settings, browserId)?.browserNotifications; - - if (!browserNotifications || display.doNotDisturb) { - return; - } - const { bin, body } = u['add-note']; - const binId = harkBinToId(bin); - const { title, content } = body; - - const note = new Notification(harkContentsToPlainText(title), { - body: harkContentsToPlainText(content), - tag: binId, - renotify: true - }); - note.onclick = () => {}; - } - } -}); diff --git a/pkg/grid/src/state/kiln.ts b/pkg/grid/src/state/kiln.ts deleted file mode 100644 index 06589f759..000000000 --- a/pkg/grid/src/state/kiln.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { - getVats, - Vats, - scryLag, - getBlockers, - Vat, - kilnInstall, - kilnPause, - kilnResume -} from '@urbit/api'; -import create from 'zustand'; -import produce from 'immer'; -import { useCallback } from 'react'; -import api from './api'; -import { fakeRequest, useMockData } from './util'; -import { mockVats } from './mock-data'; - -interface KilnState { - vats: Vats; - loaded: boolean; - fetchVats: () => Promise; - lag: boolean; - fetchLag: () => Promise; - changeOTASource: (ship: string) => Promise; - toggleOTAs: (desk: string, on: boolean) => Promise; - set: (s: KilnState) => void; -} -const useKilnState = create((set, get) => ({ - vats: useMockData ? mockVats : {}, - lag: !!useMockData, - loaded: false, - fetchVats: async () => { - if (useMockData) { - await fakeRequest({}, 500); - set({ loaded: true }); - return; - } - const vats = await api.scry(getVats); - set({ vats, loaded: true }); - }, - fetchLag: async () => { - const lag = await api.scry(scryLag); - set({ lag }); - }, - changeOTASource: async (ship: string) => { - if (useMockData) { - await fakeRequest(''); - set( - produce((draft: KilnState) => { - if (!draft.vats.base.arak.rail) { - return; - } - draft.vats.base.arak.rail.ship = ship; - }) - ); - return; - } - - await api.poke(kilnInstall(ship, 'kids', 'base')); - }, - toggleOTAs: async (desk: string, on: boolean) => { - set( - produce((draft: KilnState) => { - const { arak } = draft.vats[desk]; - if (!arak.rail) { - return; - } - if (on) { - arak.rail.paused = false; - } else { - arak.rail.paused = true; - } - }) - ); - - await (useMockData ? fakeRequest('') : api.poke(on ? kilnResume(desk) : kilnPause(desk))); - await get().fetchVats(); // refresh vat state - }, - set: produce(set) -})); - -api.subscribe({ - app: 'hood', - path: '/kiln/vats', - event: () => { - useKilnState.getState().fetchVats(); - } -}); - -const selBlockers = (s: KilnState) => getBlockers(s.vats); -export function useBlockers() { - return useKilnState(selBlockers); -} - -export function useVat(desk: string): Vat | undefined { - return useKilnState(useCallback((s) => s.vats[desk], [desk])); -} - -const selLag = (s: KilnState) => s.lag; -export function useLag() { - return useKilnState(selLag); -} - -const selLoaded = (s: KilnState) => s.loaded; -export function useKilnLoaded() { - return useKilnState(selLoaded); -} - -export default useKilnState; diff --git a/pkg/grid/src/state/local.ts b/pkg/grid/src/state/local.ts deleted file mode 100644 index b26891412..000000000 --- a/pkg/grid/src/state/local.ts +++ /dev/null @@ -1,37 +0,0 @@ -import create from 'zustand'; -import { persist } from 'zustand/middleware'; -import produce from 'immer'; -import { clearStorageMigration, createStorageKey, storageVersion } from './util'; - -interface LocalState { - browserId: string; - currentTheme: 'light' | 'dark'; - set: (f: (s: LocalState) => void) => void; -} - -export const useLocalState = create( - persist( - (set, get) => ({ - set: (f) => set(produce(get(), f)), - currentTheme: 'light', - browserId: '' - }), - { - name: createStorageKey('local'), - version: storageVersion, - migrate: clearStorageMigration - } - ) -); - -const selBrowserId = (s: LocalState) => s.browserId; -export function useBrowserId() { - return useLocalState(selBrowserId); -} - -const selCurrentTheme = (s: LocalState) => s.currentTheme; -export function useCurrentTheme() { - return useLocalState(selCurrentTheme); -} - -export const setLocalState = (f: (s: LocalState) => void) => useLocalState.getState().set(f); diff --git a/pkg/grid/src/state/mock-data.ts b/pkg/grid/src/state/mock-data.ts deleted file mode 100644 index 967f07dd9..000000000 --- a/pkg/grid/src/state/mock-data.ts +++ /dev/null @@ -1,377 +0,0 @@ -import { - Vat, - Vats, - Allies, - Charges, - DocketHrefGlob, - Treaties, - Treaty, - Notification, - HarkContent, - HarkBody, - unixToDa, - Contact, - Contacts, - Timebox, - harkBinToId -} from '@urbit/api'; -import _ from 'lodash'; -import systemUrl from '../assets/system.png'; - -export const appMetaData: Pick = { - cass: { - da: '~2021.9.13..05.41.04..ae65', - ud: 1 - }, - hash: '0v6.nj6ls.l7unh.l9bhk.d839n.n8nlq.m2dmc.fj80i.pvqun.uhg6g.1kk0h', - website: 'https://tlon.io', - license: 'MIT', - version: '2.0.1' -}; - -const makeHref = (base: string): DocketHrefGlob => ({ glob: { base } }); - -export const mockTreaties: Treaties = { - '~zod/garden': { - ship: '~zod', - desk: 'garden', - title: 'System', - info: 'Your Urbit Home', - href: makeHref('garden'), - color: '#E2C050', - ...appMetaData - }, - '~zod/groups': { - ship: '~zod', - desk: 'groups', - title: 'Groups', - info: 'Simple Software for Community Assembly', - href: makeHref('groups'), - color: '#CDE7EF', - ...appMetaData - }, - '~zod/messages': { - title: 'Messages', - ship: '~zod', - desk: 'messages', - href: makeHref('messages'), - info: 'A lengthier description of the app down here', - color: '#8BE789', - ...appMetaData - }, - '~zod/calls': { - title: 'Calls', - ship: '~zod', - desk: 'calls', - href: makeHref('calls'), - info: 'A lengthier description of the app down here', - color: '#C2D6BE', - ...appMetaData - }, - '~zod/bitcoin-wallet': { - title: 'Bitcoin Wallet', - ship: '~zod', - desk: 'bitcoin-wallet', - href: makeHref('bitcoin-wallet'), - info: 'A lengthier description of the app down here', - color: '#F0AE70', - ...appMetaData - }, - '~zod/system': { - title: 'System', - ship: '~zod', - desk: 'system', - href: makeHref('system'), - info: 'A lengthier description of the app down here', - color: '#2D0118', - image: systemUrl, - ...appMetaData - }, - '~zod/my-apps': { - title: 'My Apps', - ship: '~zod', - desk: 'my-apps', - href: makeHref('my-apps'), - info: 'A lengthier description of the app down here', - color: '#D8B14E', - ...appMetaData - }, - '~zod/go': { - title: 'Go', - ship: '~zod', - desk: 'go', - href: makeHref('go'), - info: 'A lengthier description of the app down here', - color: '#A58E52', - ...appMetaData - }, - '~zod/terminal': { - title: 'Terminal', - ship: '~zod', - desk: 'terminal', - href: makeHref('terminal'), - info: 'A lengthier description of the app down here', - color: '#2D382B', - ...appMetaData - }, - '~zod/pomodoro': { - title: 'Pomodoro', - ship: '~zod', - desk: 'pomodoro', - href: makeHref('pomodoro'), - info: 'A lengthier description of the app down here', - color: '#EE5432', - ...appMetaData - }, - '~zod/clocks': { - title: 'Clocks', - ship: '~zod', - desk: 'clocks', - href: makeHref('clocks'), - info: 'A lengthier description of the app down here', - color: '#DCDCDC', - ...appMetaData - }, - '~zod/uniswap': { - title: 'Uniswap', - ship: '~zod', - desk: 'uniswap', - href: makeHref('uniswap'), - info: 'A lengthier description of the app down here', - color: '#FDA1FF', - ...appMetaData - }, - '~zod/inbox': { - title: 'Inbox', - ship: '~zod', - desk: 'inbox', - href: makeHref('inbox'), - color: '#FEFFBA', - ...appMetaData - } -}; - -export const mockCharges: Charges = _.reduce( - mockTreaties, - (acc, val, key) => { - const [, desk] = key.split('/'); - const chad = { glob: null }; - if (desk === 'inbox') { - return acc; - } - - if (desk === 'calls') { - return { ...acc, [desk]: { ...val, chad: { hung: 'glob failed' } } }; - } - - if (desk === 'messages') { - return { ...acc, [desk]: { ...val, chad: { install: null } } }; - } - - return { ...acc, [desk]: { ...val, chad } }; - }, - {} as Charges -); - -const charter = Object.keys(mockTreaties); - -export const mockAllies: Allies = [ - '~zod', - '~nocsyx-lassul', - '~nachus-hollyn', - '~nalbel_litzod', - '~litmus^ritten', - '~nalput_litzod', - '~nalrex_bannus', - '~nalrys' -].reduce((acc, val) => ({ ...acc, [val]: charter }), {}); - -function ship(s: string) { - return { ship: s }; -} - -function text(t: string) { - return { text: t }; -} - -function createDmNotification(...content: HarkContent[]): HarkBody { - return { - title: [ship('~hastuc-dibtux'), text(' messaged you')], - time: unixToDa(Date.now() - 3_600).toJSNumber(), - content, - binned: '/', - link: '/' - }; -} - -function createBitcoinNotif(amount: string) { - return { - title: [ship('~silnem'), text(` sent you ${amount}`)], - time: unixToDa(Date.now() - 3_600).toJSNumber(), - content: [], - binned: '/', - link: '/' - }; -} - -function createGroupNotif(to: string): HarkBody { - return { - title: [ship('~ridlur-figbud'), text(` invited you to ${to}`)], - content: [], - time: unixToDa(Date.now() - 3_600).toJSNumber(), - binned: '/', - link: '/' - }; -} - -window.desk = window.desk || 'garden'; - -function createMockSysNotification(path: string, body: HarkBody[] = []) { - return { - bin: { - place: { - desk: window.desk, - path - }, - path: '/' - }, - time: Date.now() - 3_600, - body - }; -} - -const lag = createMockSysNotification('/lag'); -const blocked = { - bin: { - place: { - desk: window.desk, - path: '/desk/base' - }, - path: '/blocked' - }, - time: Date.now() - 3_600, - body: [] -}; -const onboard = createMockSysNotification('/onboard'); - -const updateNotification = createMockSysNotification('/desk/bitcoin', [ - { - title: [{ text: 'App "Bitcoin" updated to version 1.0.1' }], - time: 0, - content: [], - link: '/desk/bitcoin', - binned: '/' - } -]); - -export function createMockNotification(desk: string, body: HarkBody[]): Notification { - return { - bin: { - place: { - desk, - path: '/' - }, - path: '/' - }, - time: Date.now() - 3_600, - body - }; -} - -export const mockNotifications: Timebox = _.keyBy( - [ - lag, - blocked, - onboard, - updateNotification, - createMockNotification('groups', [ - createDmNotification(text('ie the hook agent responsible for marking the notifications')), - createDmNotification(ship('~hastuc-dibtux'), text(' sent a link')) - ]), - createMockNotification('bitcoin-wallet', [createBitcoinNotif('0.025 BTC')]), - createMockNotification('groups', [createGroupNotif('a Group: Tlon Corporation')]) - ], - (not) => harkBinToId(not.bin) -); - -const contact: Contact = { - nickname: '', - bio: '', - status: '', - color: '#000000', - avatar: null, - cover: null, - groups: [], - 'last-updated': 0 -}; - -export const mockContacts: Contacts = { - '~zod': { - ...contact, - nickname: 'Tlon Corporation' - }, - '~nocsyx-lassul': { - ...contact, - status: 'technomancing an electron wrapper for urbit', - color: '#4c00ff' - }, - '~nachus-hollyn': { - ...contact, - avatar: 'https://i.pinimg.com/originals/20/62/59/2062590a440f717a2ae1065ad8e8a4c7.gif' - }, - '~nalbel_litzod': { - ...contact, - nickname: 'Queen', - color: '#0a1b0a' - }, - '~litmus^ritten': { - ...contact - }, - '~nalput_litzod': { - ...contact - }, - '~nalrex_bannus': { - ...contact, - status: 'Script, command and inspect your Urbit. Use TUI applications' - }, - '~nalrys': { - ...contact, - status: 'hosting coming soon', - color: '#130c06' - } -}; - -export const mockVat = (desk: string, blockers?: boolean): Vat => ({ - cass: { - da: '~2021.9.13..05.41.04..ae65', - ud: 1 - }, - desk, - arak: { - rein: { - sub: [], - add: [] - }, - rail: - desk === 'uniswap' - ? null - : { - aeon: 3, - desk, - publisher: '~zod', - next: blockers ? [{ aeon: 3, weft: { name: 'zuse', kelvin: 419 } }] : [], - ship: '~zod', - paused: desk === 'groups' - } - }, - hash: '0vh.lhfn6.julg1.fs52d.g2lqj.q5kp0.2o7j3.2bljl.jdm34.hd46v.9uv5v' -}); - -const badVats = ['inbox', 'system', 'terminal', 'base']; -export const mockVats = _.reduce( - mockCharges, - (vats, charge, desk) => { - return { ...vats, [desk]: mockVat(desk, !badVats.includes(desk)) }; - }, - { base: mockVat('base', true) } as Vats -); diff --git a/pkg/grid/src/state/notifications.ts b/pkg/grid/src/state/notifications.ts deleted file mode 100644 index 95bf5ec4d..000000000 --- a/pkg/grid/src/state/notifications.ts +++ /dev/null @@ -1,13 +0,0 @@ -import shallow from 'zustand/shallow'; -import { useHarkStore } from './hark'; - -export const useNotifications = () => { - const [unseen, seen] = useHarkStore((s) => [s.unseen, s.seen], shallow); - const hasAnyNotifications = Object.keys(seen).length > 0 || Object.keys(unseen).length > 0; - - return { - unseen, - seen, - hasAnyNotifications - }; -}; diff --git a/pkg/grid/src/state/settings.ts b/pkg/grid/src/state/settings.ts deleted file mode 100644 index bda7a0dd0..000000000 --- a/pkg/grid/src/state/settings.ts +++ /dev/null @@ -1,173 +0,0 @@ -/* eslint-disable no-param-reassign */ -import { - SettingsUpdate, - Value, - putEntry as doPutEntry, - getDeskSettings, - DeskData -} from '@urbit/api'; -import _ from 'lodash'; -import { - BaseState, - createState, - createSubscription, - pokeOptimisticallyN, - reduceStateN -} from './base'; -import api from './api'; - -interface BrowserSetting { - browserId: string; - browserNotifications: boolean; - protocolHandling: boolean; -} - -interface BaseSettingsState { - display: { - theme: 'light' | 'dark' | 'auto'; - doNotDisturb: boolean; - }; - tiles: { - order: string[]; - }; - loaded: boolean; - browserSettings: { - settings: Stringified; - }; - putEntry: (bucket: string, key: string, value: Value) => Promise; - fetchAll: () => Promise; - [ref: string]: unknown; -} - -export type SettingsState = BaseSettingsState & BaseState; - -function putBucket(json: SettingsUpdate, state: SettingsState): SettingsState { - const data = _.get(json, 'put-bucket', false); - if (data) { - state[data['bucket-key']] = data.bucket; - } - return state; -} - -function delBucket(json: SettingsUpdate, state: SettingsState): SettingsState { - const data = _.get(json, 'del-bucket', false); - if (data) { - delete state[data['bucket-key']]; - } - return state; -} - -function putEntry(json: SettingsUpdate, state: any): SettingsState { - const data: Record = _.get(json, 'put-entry', false); - if (data) { - if (!state[data['bucket-key']]) { - state[data['bucket-key']] = {}; - } - state[data['bucket-key']][data['entry-key']] = data.value; - } - return state; -} - -function delEntry(json: SettingsUpdate, state: any): SettingsState { - const data = _.get(json, 'del-entry', false); - if (data) { - delete state[data['bucket-key']][data['entry-key']]; - } - return state; -} - -export const reduceUpdate = [putBucket, delBucket, putEntry, delEntry]; - -export const useSettingsState = createState( - 'Settings', - (set, get) => ({ - display: { - theme: 'auto', - doNotDisturb: true - }, - tiles: { - order: [] - }, - browserSettings: { - settings: '' as Stringified - }, - loaded: false, - putEntry: async (bucket, key, val) => { - const poke = doPutEntry(window.desk, bucket, key, val); - await pokeOptimisticallyN(useSettingsState, poke, reduceUpdate); - }, - fetchAll: async () => { - const result = (await api.scry(getDeskSettings(window.desk))).desk; - const newState = { - ..._.mergeWith(get(), result, (obj, src) => (_.isArray(src) ? src : undefined)), - loaded: true - }; - set(newState); - } - }), - [], - [ - (set, get) => - createSubscription('settings-store', `/desk/${window.desk}`, (e) => { - const data = _.get(e, 'settings-event', false); - if (data) { - reduceStateN(get(), data, reduceUpdate); - set({ loaded: true }); - } - }) - ] -); - -const selTheme = (s: SettingsState) => s.display.theme; -export function useTheme() { - return useSettingsState(selTheme); -} - -export function parseBrowserSettings(settings: Stringified): BrowserSetting[] { - return settings !== '' ? JSON.parse(settings) : []; -} - -export function getBrowserSetting( - settings: BrowserSetting[], - browserId: string -): BrowserSetting | undefined { - return settings.find((el) => el.browserId === browserId); -} - -export function setBrowserSetting( - settings: BrowserSetting[], - newSetting: Partial, - browserId: string -): BrowserSetting[] { - const oldSettings = settings.slice(0); - const oldSettingIndex = oldSettings.findIndex((s) => s.browserId === browserId); - const setting = { - ...oldSettings[oldSettingIndex], - browserId, - ...newSetting - }; - - if (oldSettingIndex >= 0) { - oldSettings.splice(oldSettingIndex, 1); - } - - return [...oldSettings, setting]; -} - -const selBrowserSettings = (s: SettingsState) => s.browserSettings.settings; -export function useBrowserSettings(): BrowserSetting[] { - const settings = useSettingsState(selBrowserSettings); - return parseBrowserSettings(settings); -} - -export function useProtocolHandling(browserId: string): boolean { - const settings = useBrowserSettings(); - const browserSetting = getBrowserSetting(settings, browserId); - return browserSetting?.protocolHandling ?? false; -} - -export function useBrowserNotifications(browserId: string): boolean { - const settings = useBrowserSettings(); - const browserSetting = getBrowserSetting(settings, browserId); - return browserSetting?.browserNotifications ?? false; -} diff --git a/pkg/grid/src/state/util.ts b/pkg/grid/src/state/util.ts deleted file mode 100644 index 9b57981e5..000000000 --- a/pkg/grid/src/state/util.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Docket, DocketHref, Treaty } from '@urbit/api'; -import { hsla, parseToHsla } from 'color2k'; -import _ from 'lodash'; - -export const useMockData = import.meta.env.MODE === 'mock'; - -export async function fakeRequest(data: T, time = 300): Promise { - return new Promise((resolve) => { - setTimeout(() => { - resolve(data); - }, time); - }); -} - -export function getAppHref(href: DocketHref) { - return 'site' in href ? href.site : `/apps/${href.glob.base}/`; -} - -export function getAppName(app: (Docket & { desk: string }) | Treaty | undefined): string { - if (!app) { - return ''; - } - - return app.title || app.desk; -} - -export function disableDefault(e: T): void { - e.preventDefault(); -} - -// hack until radix-ui fixes this behavior -export function handleDropdownLink(setOpen?: (open: boolean) => void): (e: Event) => void { - return (e: Event) => { - e.stopPropagation(); - e.preventDefault(); - setTimeout(() => setOpen?.(false), 15); - }; -} - -export function deSig(ship: string): string { - if (!ship) { - return ''; - } - return ship.replace('~', ''); -} - -export function normalizeUrbitColor(color: string): string { - if (color.startsWith('#')) { - return color; - } - - const colorString = color.slice(2).replace('.', '').toUpperCase(); - const lengthAdjustedColor = _.padEnd(colorString, 6, _.last(colorString)); - return `#${lengthAdjustedColor}`; -} - -export function getDarkColor(color: string): string { - const hslaColor = parseToHsla(color); - return hsla(hslaColor[0], hslaColor[1], 1 - hslaColor[2], 1); -} - -export function createStorageKey(name: string): string { - return `~${window.ship}/${window.desk}/${name}`; -} - -// for purging storage with version updates -export function clearStorageMigration() { - return {} as T; -} - -export const storageVersion = parseInt(import.meta.env.VITE_STORAGE_VERSION, 10); diff --git a/pkg/grid/src/storage-wipe.ts b/pkg/grid/src/storage-wipe.ts deleted file mode 100644 index a1d0d6b16..000000000 --- a/pkg/grid/src/storage-wipe.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { createStorageKey } from './state/util'; - -const key = createStorageKey(`storage-wipe-${import.meta.env.VITE_LAST_WIPE}`); -const wiped = localStorage.getItem(key); - -// Loaded before everything, this clears local storage just once. -// Change VITE_LAST_WIPE in .env to date of wipe - -if (!wiped) { - localStorage.clear(); - localStorage.setItem(key, 'true'); -} diff --git a/pkg/grid/src/styles/base.css b/pkg/grid/src/styles/base.css deleted file mode 100644 index b48a6d8d3..000000000 --- a/pkg/grid/src/styles/base.css +++ /dev/null @@ -1,42 +0,0 @@ -body { - scrollbar-width: thin; - scrollbar-color: #e5e5e5 transparent; -} - -body::-webkit-scrollbar-thumb { - background-color: #e5e5e5; -} - -body::-webkit-scrollbar-track { - background: transparent; -} - -@media (prefers-color-scheme: dark) { - body { - scrollbar-color: #333333 transparent; - } - - body::-webkit-scrollbar-thumb { - background-color: #333333; - } -} - -.h1 { - @apply text-2xl sm:text-3xl font-bold leading-relaxed tracking-tighter; -} - -.h2 { - @apply text-xl sm:text-2xl font-semibold leading-snug tracking-tight; -} - -.h3 { - @apply text-lg sm:text-xl font-semibold leading-relaxed tracking-tight; -} - -.h4 { - @apply text-sm sm:text-base font-semibold leading-normal tracking-tight; -} - -.default-ring { - @apply focus-visible:ring-2 ring-blue-400 ring-opacity-80 focus-visible:outline-none; -} diff --git a/pkg/grid/src/styles/components.css b/pkg/grid/src/styles/components.css deleted file mode 100644 index b0cebc598..000000000 --- a/pkg/grid/src/styles/components.css +++ /dev/null @@ -1,39 +0,0 @@ -.circle-button { - @apply inline-flex items-center justify-center h-12 w-12 font-semibold rounded-full; -} - -.button { - @apply inline-flex items-center justify-center px-4 py-2 font-semibold text-base tracking-tight rounded-lg cursor-pointer; -} - -.dialog-container { - @apply fixed z-40 top-1/2 left-1/2 p-4 transform -translate-x-1/2 -translate-y-1/2; -} - -.dialog { - @apply relative max-h-[calc(100vh-2rem)] max-w-[calc(100vw-2rem)] p-5 sm:p-8 bg-white rounded-3xl overflow-auto; -} - -.dialog-inner-container { - @apply h-full p-4 md:p-8 space-y-8 overflow-y-auto; -} - -.dropdown { - @apply min-w-52 p-4 rounded-xl; -} - -.inner-section { - @apply p-3 bg-gray-50 rounded-xl; -} - -.input { - @apply px-4 py-2 w-full text-base sm:text-sm bg-white rounded-xl; -} - -.notification { - @apply p-4 bg-gray-50 rounded-xl; -} - -.spinner { - @apply inline-flex items-center w-6 h-6 animate-spin; -} diff --git a/pkg/grid/src/styles/grids.css b/pkg/grid/src/styles/grids.css deleted file mode 100644 index 6ec24acc7..000000000 --- a/pkg/grid/src/styles/grids.css +++ /dev/null @@ -1,65 +0,0 @@ -.note-grid-content { - display: grid; - grid-template-columns: 1.5rem 1fr 4rem; - grid-template-rows: 1.5rem 1.5rem; - grid-gap: 0.5rem; - padding: 1rem; - grid-template-areas: - 'icon title actions ' - 'arrow head head' - '. body body'; -} - -.note-grid-no-content { - display: grid; - width: 100%; - padding: 1rem; - grid-template-columns: 3.5rem 1fr 4rem; - grid-column-gap: 0.75rem; - align-items: center; - grid-template-areas: - 'icon title actions' - 'icon head head'; -} -.note-grid-title { - grid-area: title; -} - -.note-grid-icon { - grid-area: icon; -} - -.note-grid-body { - grid-area: body; -} - -.note-grid-head { - grid-area: head; -} - -.note-grid-arrow { - grid-area: arrow; -} - -.note-grid-actions { - grid-area: actions; -} - -@media (min-width: 640px) { - .note-grid-content { - grid-template-columns: 1.5rem 1fr 6rem; - grid-template-rows: 1.5rem 1.5rem; - grid-template-areas: - 'icon title actions ' - 'arrow head actions' - '. body actions'; - } - - .note-grid-no-content { - grid-template-rows: 1.75rem 1.75rem; - grid-template-columns: 3.5rem 1fr 6rem; - grid-template-areas: - 'icon title actions' - 'icon head actions'; - } -} diff --git a/pkg/grid/src/styles/index.css b/pkg/grid/src/styles/index.css deleted file mode 100644 index 419a82058..000000000 --- a/pkg/grid/src/styles/index.css +++ /dev/null @@ -1,10 +0,0 @@ -@import 'tailwindcss/base'; -@import './base.css'; - -@import 'tailwindcss/components'; -@import './components.css'; - -@import 'tailwindcss/utilities'; -@import './utilities.css'; - -@import './grids.css'; diff --git a/pkg/grid/src/styles/utilities.css b/pkg/grid/src/styles/utilities.css deleted file mode 100644 index ddbe64ce6..000000000 --- a/pkg/grid/src/styles/utilities.css +++ /dev/null @@ -1,7 +0,0 @@ -.scroll-full-width { - width: calc(100% - var(--removed-body-scroll-bar-size)); -} - -.scroll-left-50 { - left: calc(50% - (var(--removed-body-scroll-bar-size) / 2)); -} diff --git a/pkg/grid/src/tiles/RemoveApp.tsx b/pkg/grid/src/tiles/RemoveApp.tsx deleted file mode 100644 index a2357d03d..000000000 --- a/pkg/grid/src/tiles/RemoveApp.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React, { useCallback } from 'react'; -import { useHistory, useParams } from 'react-router-dom'; -import { Button } from '../components/Button'; -import { Dialog, DialogClose, DialogContent } from '../components/Dialog'; -import { useRecentsStore } from '../nav/search/Home'; -import useDocketState, { useCharges } from '../state/docket'; -import { getAppName } from '../state/util'; - -export const RemoveApp = () => { - const history = useHistory(); - const { desk } = useParams<{ desk: string }>(); - const charges = useCharges(); - const docket = charges[desk]; - const uninstallDocket = useDocketState((s) => s.uninstallDocket); - - // TODO: add optimistic updates - const handleRemoveApp = useCallback(() => { - uninstallDocket(desk); - useRecentsStore.getState().removeRecentApp(desk); - }, [desk]); - - return ( - !open && history.push('/')}> - -

    Uninstall “{getAppName(docket)}”?

    -

    - The app tile will be removed from Landscape, all processes will be stopped and their data archived, and the app will stop receiving updates. -

    -

    - If the app is reinstalled, the archived data will be restored and you'll be able to pick up where you left off. -

    -
    - - Cancel - - - Uninstall - -
    -
    -
    - ); -}; diff --git a/pkg/grid/src/tiles/SuspendApp.tsx b/pkg/grid/src/tiles/SuspendApp.tsx deleted file mode 100644 index a31c65cfd..000000000 --- a/pkg/grid/src/tiles/SuspendApp.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import React, { useCallback } from 'react'; -import { Redirect, useHistory, useParams } from 'react-router-dom'; -import { Button } from '../components/Button'; -import { Dialog, DialogClose, DialogContent } from '../components/Dialog'; -import { useRecentsStore } from '../nav/search/Home'; -import useDocketState, { useCharges } from '../state/docket'; -import { getAppName } from '../state/util'; - -export const SuspendApp = () => { - const history = useHistory(); - const { desk } = useParams<{ desk: string }>(); - const charges = useCharges(); - const charge = charges[desk]; - - // TODO: add optimistic updates - const handleSuspendApp = useCallback(() => { - useDocketState.getState().toggleDocket(desk); - useRecentsStore.getState().removeRecentApp(desk); - }, [desk]); - - if ('suspend' in charge.chad) { - return ; - } - - return ( - !open && history.push('/')}> - -

    Suspend “{getAppName(charge)}”

    -

    - All processes will be stopped and data archived. The app will continue to receive updates from its publisher. -

    -

    - When unsuspended, archived data will be loaded and all processes will resume running, so you can pick up where you left off. -

    -
    - - Cancel - - - Suspend - -
    -
    -
    - ); -}; diff --git a/pkg/grid/src/tiles/Tile.tsx b/pkg/grid/src/tiles/Tile.tsx deleted file mode 100644 index 4ffb59cc8..000000000 --- a/pkg/grid/src/tiles/Tile.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import classNames from 'classnames'; -import React, { FunctionComponent } from 'react'; -import { useDrag } from 'react-dnd'; -import { chadIsRunning } from '@urbit/api'; -import { TileMenu } from './TileMenu'; -import { Spinner } from '../components/Spinner'; -import { getAppHref } from '../state/util'; -import { useRecentsStore } from '../nav/search/Home'; -import { ChargeWithDesk } from '../state/docket'; -import { useTileColor } from './useTileColor'; -import { useVat } from '../state/kiln'; -import { Bullet } from '../components/icons/Bullet'; -import { dragTypes } from './TileGrid'; - -type TileProps = { - charge: ChargeWithDesk; - desk: string; - disabled?: boolean; -}; - -export const Tile: FunctionComponent = ({ charge, desk, disabled = false }) => { - const addRecentApp = useRecentsStore((state) => state.addRecentApp); - const { title, image, color, chad, href } = charge; - const vat = useVat(desk); - const { lightText, tileColor, menuColor, suspendColor, suspendMenuColor } = useTileColor(color); - const loading = !disabled && 'install' in chad; - const suspended = disabled || 'suspend' in chad; - const hung = 'hung' in chad; - const active = !disabled && chadIsRunning(chad); - const link = getAppHref(href); - const backgroundColor = suspended ? suspendColor : active ? tileColor || 'purple' : suspendColor; - - const [{ isDragging }, drag] = useDrag(() => ({ - type: dragTypes.TILE, - item: { desk }, - collect: (monitor) => ({ - isDragging: !!monitor.isDragging() - }) - })); - - return ( - addRecentApp(desk)} - onAuxClick={() => addRecentApp(desk)} - > -
    -
    - {!active && ( - <> - {loading && } - - {suspended ? 'Suspended' : loading ? 'Installing' : hung ? 'Errored' : null} - - - )} -
    - {vat?.arak.rail?.paused && !disabled && ( - - )} - - {title && ( -
    -

    {title}

    -
    - )} - {image && !loading && ( - - )} -
    -
    - ); -}; diff --git a/pkg/grid/src/tiles/TileContainer.tsx b/pkg/grid/src/tiles/TileContainer.tsx deleted file mode 100644 index 4d1943375..000000000 --- a/pkg/grid/src/tiles/TileContainer.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import classNames from 'classnames'; -import { uniq, without } from 'lodash'; -import React, { FunctionComponent } from 'react'; -import { useDrop } from 'react-dnd'; -import { useSettingsState } from '../state/settings'; -import { dragTypes, selTiles } from './TileGrid'; - -interface TileContainerProps { - desk: string; -} - -export const TileContainer: FunctionComponent = ({ desk, children }) => { - const { order } = useSettingsState(selTiles); - const [{ isOver }, drop] = useDrop<{ desk: string }, undefined, { isOver: boolean }>( - () => ({ - accept: dragTypes.TILE, - drop: ({ desk: itemDesk }) => { - if (!itemDesk || itemDesk === desk) { - return undefined; - } - // [1, 2, 3, 4] 1 -> 3 - // [2, 3, 4] - const beforeSlot = order.indexOf(itemDesk) < order.indexOf(desk); - const orderWithoutOriginal = without(order, itemDesk); - const slicePoint = orderWithoutOriginal.indexOf(desk); - // [2, 3] [4] - const left = orderWithoutOriginal.slice(0, beforeSlot ? slicePoint + 1 : slicePoint); - const right = orderWithoutOriginal.slice(slicePoint); - // concat([2, 3], [1], [4]) - const newOrder = uniq(left.concat([itemDesk], right)); - // [2, 3, 1, 4] - console.log({ order, left, right, slicePoint, newOrder }); - useSettingsState.getState().putEntry('tiles', 'order', newOrder); - - return undefined; - }, - collect: (monitor) => ({ - isOver: !!monitor.isOver() - }) - }), - [desk, order] - ); - - return ( -
    - {children} -
    - ); -}; diff --git a/pkg/grid/src/tiles/TileGrid.tsx b/pkg/grid/src/tiles/TileGrid.tsx deleted file mode 100644 index 7daf88a41..000000000 --- a/pkg/grid/src/tiles/TileGrid.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import React, { useEffect } from 'react'; -import { DndProvider } from 'react-dnd'; -import { HTML5Backend } from 'react-dnd-html5-backend'; -import { TouchBackend } from 'react-dnd-touch-backend'; -import { uniq } from 'lodash'; -import { ChargeWithDesk, useCharges } from '../state/docket'; -import { Tile } from './Tile'; -import { MenuState } from '../nav/Nav'; -import { SettingsState, useSettingsState } from '../state/settings'; -import { TileContainer } from './TileContainer'; -import { useMedia } from '../logic/useMedia'; - -export interface TileData { - desk: string; - charge: ChargeWithDesk; - position: number; - dragging: boolean; -} - -interface TileGridProps { - menu?: MenuState; -} - -export const dragTypes = { - TILE: 'tile' -}; - -export const selTiles = (s: SettingsState) => ({ - order: s.tiles.order, - loaded: s.loaded -}); - -export const TileGrid = ({ menu }: TileGridProps) => { - const charges = useCharges(); - const chargesLoaded = Object.keys(charges).length > 0; - const { order, loaded } = useSettingsState(selTiles); - const isMobile = useMedia('(pointer: coarse)'); - - useEffect(() => { - const hasKeys = order && !!order.length; - const chargeKeys = Object.keys(charges); - const hasChargeKeys = chargeKeys.length > 0; - - if (!loaded) { - return; - } - - // Correct order state, fill if none, remove duplicates, and remove - // old uninstalled app keys - if (!hasKeys && hasChargeKeys) { - useSettingsState.getState().putEntry('tiles', 'order', chargeKeys); - } else if (order.length < chargeKeys.length) { - useSettingsState.getState().putEntry('tiles', 'order', uniq(order.concat(chargeKeys))); - } else if (order.length > chargeKeys.length && hasChargeKeys) { - useSettingsState - .getState() - .putEntry('tiles', 'order', uniq(order.filter((key) => key in charges).concat(chargeKeys))); - } - }, [charges, order, loaded]); - - if (!chargesLoaded) { - return Loading...; - } - - return ( - -
    - {order - .filter((d) => d !== window.desk && d in charges) - .map((desk) => ( - - - - ))} -
    -
    - ); -}; diff --git a/pkg/grid/src/tiles/TileInfo.tsx b/pkg/grid/src/tiles/TileInfo.tsx deleted file mode 100644 index f95c04664..000000000 --- a/pkg/grid/src/tiles/TileInfo.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { useHistory, useParams } from 'react-router-dom'; -import { Dialog, DialogContent } from '../components/Dialog'; -import { AppInfo } from '../components/AppInfo'; -import { useCharge } from '../state/docket'; -import { useVat } from '../state/kiln'; - -export const TileInfo = () => { - const { desk } = useParams<{ desk: string }>(); - const { push } = useHistory(); - const charge = useCharge(desk); - const vat = useVat(desk); - - if (!charge) { - return null; - } - - return ( - !open && push('/')}> - - - - - ); -}; diff --git a/pkg/grid/src/tiles/TileMenu.tsx b/pkg/grid/src/tiles/TileMenu.tsx deleted file mode 100644 index 5a811301a..000000000 --- a/pkg/grid/src/tiles/TileMenu.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import React, { useCallback, useState } from 'react'; -import type * as Polymorphic from '@radix-ui/react-polymorphic'; -import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; -import classNames from 'classnames'; -import { Link } from 'react-router-dom'; -import { Chad, chadIsRunning } from '@urbit/api'; -import useDocketState from '../state/docket'; -import { disableDefault, handleDropdownLink } from '../state/util'; - -export interface TileMenuProps { - desk: string; - lightText: boolean; - menuColor: string; - chad: Chad; - className?: string; -} - -const MenuIcon = ({ className }: { className: string }) => ( - - - - - -); - -type ItemComponent = Polymorphic.ForwardRefComponent< - Polymorphic.IntrinsicElement, - Polymorphic.OwnProps ->; - -const Item = React.forwardRef(({ children, ...props }, ref) => ( - - {children} - -)) as ItemComponent; - -export const TileMenu = ({ desk, chad, menuColor, lightText, className }: TileMenuProps) => { - const [open, setOpen] = useState(false); - const toggleDocket = useDocketState((s) => s.toggleDocket); - const menuBg = { backgroundColor: menuColor }; - const linkOnSelect = useCallback(handleDropdownLink(setOpen), []); - const active = chadIsRunning(chad); - const suspended = 'suspend' in chad; - - return ( - setOpen(isOpen)}> - queryClient.setQueryData(['apps', name], app)} - > - - Menu - - - - - - App Info - - - - - {active && ( - - Suspend App - - )} - {suspended && toggleDocket(desk)}>Resume App} - - Uninstall App - - - - - - ); -}; diff --git a/pkg/grid/src/tiles/useTileColor.tsx b/pkg/grid/src/tiles/useTileColor.tsx deleted file mode 100644 index a9320c336..000000000 --- a/pkg/grid/src/tiles/useTileColor.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { darken, hsla, lighten, parseToHsla, readableColorIsBlack } from 'color2k'; -import { useCurrentTheme } from '../state/local'; -import { getDarkColor } from '../state/util'; - -function bgAdjustedColor(color: string, darkBg: boolean): string { - return darkBg ? lighten(color, 0.1) : darken(color, 0.1); -} - -function getMenuColor(color: string, darkBg: boolean): string { - const hslaColor = parseToHsla(color); - const satAdjustedColor = hsla(hslaColor[0], Math.max(0.2, hslaColor[1]), hslaColor[2], 1); - - return bgAdjustedColor(satAdjustedColor, darkBg); -} - -// makes tiles look broken because they blend into BG -function disallowWhiteTiles(color: string): string { - const hslaColor = parseToHsla(color); - return hslaColor[2] >= 0.95 ? darken(color, hslaColor[2] - 0.95) : color; -} - -export const useTileColor = (color: string) => { - const theme = useCurrentTheme(); - const darkTheme = theme === 'dark'; - const allowedColor = disallowWhiteTiles(color); - const tileColor = darkTheme ? getDarkColor(allowedColor) : allowedColor; - const darkBg = !readableColorIsBlack(tileColor); - const lightText = darkBg !== darkTheme; // if not same, light text - const suspendColor = darkTheme ? 'rgb(26,26,26)' : 'rgb(220,220,220)'; - - return { - theme, - tileColor, - menuColor: getMenuColor(tileColor, darkBg), - suspendColor, - suspendMenuColor: bgAdjustedColor(suspendColor, darkTheme), - lightText - }; -}; diff --git a/pkg/grid/src/vite-env.d.ts b/pkg/grid/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/pkg/grid/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/pkg/grid/src/window.ts b/pkg/grid/src/window.ts deleted file mode 100644 index 9a6993bc1..000000000 --- a/pkg/grid/src/window.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { useLeapStore } from './nav/Nav'; -import { useRecentsStore } from './nav/search/Home'; -import useDocketState from './state/docket'; - -declare global { - interface Window { - ship: string; - desk: string; - recents: typeof useRecentsStore.getState; - docket: typeof useDocketState.getState; - leap: typeof useLeapStore.getState; - } -} - -export {}; diff --git a/pkg/grid/tailwind.config.js b/pkg/grid/tailwind.config.js deleted file mode 100644 index 218adbecd..000000000 --- a/pkg/grid/tailwind.config.js +++ /dev/null @@ -1,215 +0,0 @@ -const defaultTheme = require('tailwindcss/defaultTheme'); -const resolveConfig = require('tailwindcss/resolveConfig'); -const { Theme, ThemeManager } = require('tailwindcss-theming/api'); - -const themableProperties = [ - 'spacing', - 'fontFamily', - //'fontSize', would require change in tailwindcss-theming - 'fontWeight', - 'letterSpacing', - 'lineHeight', - 'borderRadius', - 'borderWidth', - 'boxShadow' -]; - -function variablizeTheme(themeConfig, theme) { - themableProperties.forEach((prop) => { - const propSet = themeConfig[prop]; - Object.entries(propSet).forEach(([key, value]) => { - theme.setVariable(key, value, prop, prop); - }); - }); -} - -const config = resolveConfig({ - theme: { - fontFamily: { - sans: [ - 'Inter', - 'Inter UI', - '-apple-system', - 'BlinkMacSystemFont', - 'San Francisco', - 'Helvetica Neue', - 'Arial', - 'sans-serif' - ], - mono: ['Source Code Pro', 'Roboto mono', 'Courier New', 'monospace'] - }, - extend: { - lineHeight: { - tight: 1.2, - snug: 1.33334, - relaxed: 1.66667 - } - } - } -}); - -const base = new Theme().addColors({ - transparent: 'transparent', - white: '#FFFFFF', - black: '#000000', - gray: { - 50: '#F2F2F2', - 100: '#E5E5E5', - 200: '#CCCCCC', - 300: '#B3B3B3', - 400: '#999999', - 500: '#808080', - 600: '#666666', - 700: '#4D4D4D', - 800: '#333333', - 900: '#1A1A1A' - }, - blue: { - 50: '#EFF9FF', - 100: '#C8EDFF', - 200: '#A0E1FF', - 300: '#5FBFFF', - 400: '#219DFF', - 500: '#0F75D8', - 600: '#0252B2', - 700: '#00388B', - 800: '#002364', - 900: '#00133E' - }, - red: { - 50: '#FFF4F2', - 100: '#FFDED6', - 200: '#FFC8B9', - 300: '#FC9B84', - 400: '#F57456', - 500: '#EE5432', - 600: '#D03B22', - 700: '#B12918', - 800: '#931C13', - 900: '#751410' - }, - orange: { - 50: '#FFF4EF', - 100: '#FFE2CE', - 200: '#FFCEAB', - 300: '#FFA56F', - 400: '#FF7E36', - 500: '#D85E1E', - 600: '#B2420C', - 700: '#8B2B00', - 800: '#641E00', - 900: '#3E1100' - }, - green: { - 100: '#E6F5F0', - 200: '#B3E2D1', - 300: '#009F65' - }, - yellow: { - 100: '#FFF9E6', - 200: '#FFEEB3', - 300: '#FFDD66', - 400: '#FFC700' - } -}); -variablizeTheme(config.theme, base); - -const dark = new Theme() - .setName('dark') - .targetable() - .addColors({ - transparent: 'transparent', - white: '#000000', - black: '#FFFFFF', - gray: { - 50: '#1A1A1A', - 100: '#333333', - 200: '#4D4D4D', - 300: '#666666', - 400: '#808080', - 500: '#999999', - 600: '#B3B3B3', - 700: '#CCCCCC', - 800: '#E5E5E5', - 900: '#F2F2F2' - }, - red: { - 50: '#751410', - 100: '#931C13', - 200: '#B12918', - 300: '#D03B22', - 400: '#EE5432', - 500: '#F57456', - 600: '#FC9B84', - 700: '#FFC8B9', - 800: '#FFDED6', - 900: '#FFF4F2' - }, - blue: { - 50: '#00133E', - 100: '#002364', - 200: '#00388B', - 300: '#0252B2', - 400: '#0F75D8', - 500: '#219DFF', - 600: '#5FBFFF', - 700: '#A0E1FF', - 800: '#C8EDFF', - 900: '#EFF9FF' - }, - orange: { - 50: '#3E1100', - 100: '#641E00', - 200: '#8B2B00', - 300: '#B2420C', - 400: '#D85E1E', - 500: '#FF7E36', - 600: '#FFA56F', - 700: '#FFCEAB', - 800: '#FFE2CE', - 900: '#FFF4EF' - }, - green: { - 100: '#182722', - 200: '#134231', - 300: '#009F65' - }, - yellow: { - 100: '#312B18', - 200: '#5F4E13', - 300: '#A4820B', - 400: '#FFC700' - } - }); - -const themes = new ThemeManager().setDefaultTheme(base).addTheme(dark); - -module.exports = { - mode: 'jit', - purge: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], - darkMode: 'class', // or 'media' or 'class' - theme: { - extend: { - minWidth: (theme) => theme('spacing') - } - }, - screens: { - ...defaultTheme.screens, - xl: '1440px', - '2xl': '2200px' - }, - variants: { - extend: { - opacity: ['hover-none'], - display: ['group-hover'] - } - }, - plugins: [ - require('@tailwindcss/aspect-ratio'), - require('tailwindcss-touch')(), - require('tailwindcss-theming')({ - themes, - strategy: 'class' - }) - ] -}; diff --git a/pkg/grid/tsconfig.json b/pkg/grid/tsconfig.json deleted file mode 100644 index 013e6c54f..000000000 --- a/pkg/grid/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "lib": ["DOM", "DOM.Iterable", "ESNext"], - "allowJs": false, - "skipLibCheck": false, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react" - }, - "include": ["./src"] -} diff --git a/pkg/grid/vite.config.ts b/pkg/grid/vite.config.ts deleted file mode 100644 index 45c862692..000000000 --- a/pkg/grid/vite.config.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { loadEnv, defineConfig } from 'vite'; -import analyze from 'rollup-plugin-analyzer'; -import { visualizer } from 'rollup-plugin-visualizer'; -import reactRefresh from '@vitejs/plugin-react-refresh'; -import { urbitPlugin } from '@urbit/vite-plugin-urbit'; -import { execSync } from 'child_process'; - -// https://vitejs.dev/config/ -export default ({ mode }) => { - process.env.VITE_STORAGE_VERSION = Date.now().toString(); - - Object.assign(process.env, loadEnv(mode, process.cwd())); - const SHIP_URL = process.env.SHIP_URL || process.env.VITE_SHIP_URL || 'http://localhost:8080'; - console.log(SHIP_URL); - - return defineConfig({ - base: mode === 'mock' ? undefined : '/apps/grid/', - server: mode === 'mock' ? undefined : { https: true }, - build: - mode !== 'profile' - ? undefined - : { - rollupOptions: { - plugins: [ - analyze({ - limit: 20 - }), - visualizer() - ] - } - }, - plugins: - mode === 'mock' - ? [] - : [urbitPlugin({ base: 'grid', target: SHIP_URL, secure: false }), reactRefresh()] - }); -}; diff --git a/pkg/hs/natpmp-static/LICENSE b/pkg/hs/natpmp-static/LICENSE deleted file mode 100644 index 7fff2c26a..000000000 --- a/pkg/hs/natpmp-static/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Copyright (c) 2007-2011, Thomas BERNARD -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - diff --git a/pkg/hs/natpmp-static/README.txt b/pkg/hs/natpmp-static/README.txt deleted file mode 100644 index 87e6e25e3..000000000 --- a/pkg/hs/natpmp-static/README.txt +++ /dev/null @@ -1,5 +0,0 @@ -This is a vendored copy of libnatpmp-20150609, along with haskell bindings to -the library. Only the C code which was needed for these bindings was copied out -of the distribution. - -Original code: http://miniupnp.free.fr/libnatpmp.html diff --git a/pkg/hs/natpmp-static/Setup.hs b/pkg/hs/natpmp-static/Setup.hs deleted file mode 100644 index 9a994af67..000000000 --- a/pkg/hs/natpmp-static/Setup.hs +++ /dev/null @@ -1,2 +0,0 @@ -import Distribution.Simple -main = defaultMain diff --git a/pkg/hs/natpmp-static/cbits/binding.c b/pkg/hs/natpmp-static/cbits/binding.c deleted file mode 100644 index 50f3d4f09..000000000 --- a/pkg/hs/natpmp-static/cbits/binding.c +++ /dev/null @@ -1,77 +0,0 @@ -/* $Id: natpmpc.c,v 1.13 2012/08/21 17:23:38 nanard Exp $ */ -/* libnatpmp -Copyright (c) 2007-2011, Thomas BERNARD -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#include -#include - -#include -#include -#include "natpmp.h" - -// Additional binding code in C to make this more convenient to call from -// Haskell. libnatpmp expects that code which uses it to select() on an -// internal socket, which we don't want to expose to the Haskell bindings user. -// -// This is mostly an adaptation of the code in the demo natpmpc.c to use the -// select() loop. -int readNatResponseSynchronously(natpmp_t* natpmp, natpmpresp_t * response) -{ - fd_set fds; - struct timeval timeout; - int r; - int sav_errno; - - do { - FD_ZERO(&fds); - FD_SET(natpmp->s, &fds); - getnatpmprequesttimeout(natpmp, &timeout); - r = select(FD_SETSIZE, &fds, NULL, NULL, &timeout); - sav_errno = errno; - if(r<0) { - /* fprintf(stderr, "select(): errno=%d '%s'\n", */ - /* sav_errno, strerror(sav_errno)); */ - return 1; - } - r = readnatpmpresponseorretry(natpmp, response); - sav_errno = errno; - /* printf("readnatpmpresponseorretry returned %d (%s)\n", */ - /* r, r==0?"OK":(r==NATPMP_TRYAGAIN?"TRY AGAIN":"FAILED")); */ -/* if(r<0 && r!=NATPMP_TRYAGAIN) { */ -/* #ifdef ENABLE_STRNATPMPERR */ -/* fprintf(stderr, "readnatpmpresponseorretry() failed : %s\n", */ -/* strnatpmperr(r)); */ -/* #endif */ -/* fprintf(stderr, " errno=%d '%s'\n", */ -/* sav_errno, strerror(sav_errno)); */ -/* } */ - } while(r==NATPMP_TRYAGAIN); - - return r; -} diff --git a/pkg/hs/natpmp-static/cbits/binding.h b/pkg/hs/natpmp-static/cbits/binding.h deleted file mode 100644 index f781c8a20..000000000 --- a/pkg/hs/natpmp-static/cbits/binding.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __NATPMP_BINDING_H__ -#define __NATPMP_BINDING_H__ - -#include "natpmp.h" - -int readNatResponseSynchronously(natpmp_t* natpmp, natpmpresp_t * response); - -#endif diff --git a/pkg/hs/natpmp-static/cbits/getgateway.c b/pkg/hs/natpmp-static/cbits/getgateway.c deleted file mode 100644 index dfb9f3e21..000000000 --- a/pkg/hs/natpmp-static/cbits/getgateway.c +++ /dev/null @@ -1,573 +0,0 @@ -/* $Id: getgateway.c,v 1.25 2014/04/22 10:28:57 nanard Exp $ */ -/* libnatpmp - -Copyright (c) 2007-2014, Thomas BERNARD -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -*/ -#include -#include -#ifndef WIN32 -#include -#endif -#if !defined(_MSC_VER) -#include -#endif -/* There is no portable method to get the default route gateway. - * So below are four (or five ?) differents functions implementing this. - * Parsing /proc/net/route is for linux. - * sysctl is the way to access such informations on BSD systems. - * Many systems should provide route information through raw PF_ROUTE - * sockets. - * In MS Windows, default gateway is found by looking into the registry - * or by using GetBestRoute(). */ -#ifdef __linux__ -#define USE_PROC_NET_ROUTE -#undef USE_SOCKET_ROUTE -#undef USE_SYSCTL_NET_ROUTE -#endif - -#if defined(BSD) || defined(__FreeBSD_kernel__) -#undef USE_PROC_NET_ROUTE -#define USE_SOCKET_ROUTE -#undef USE_SYSCTL_NET_ROUTE -#endif - -#ifdef __APPLE__ -#undef USE_PROC_NET_ROUTE -#undef USE_SOCKET_ROUTE -#define USE_SYSCTL_NET_ROUTE -#endif - -#if (defined(sun) && defined(__SVR4)) -#undef USE_PROC_NET_ROUTE -#define USE_SOCKET_ROUTE -#undef USE_SYSCTL_NET_ROUTE -#endif - -#ifdef WIN32 -#undef USE_PROC_NET_ROUTE -#undef USE_SOCKET_ROUTE -#undef USE_SYSCTL_NET_ROUTE -//#define USE_WIN32_CODE -#define USE_WIN32_CODE_2 -#endif - -#ifdef __CYGWIN__ -#undef USE_PROC_NET_ROUTE -#undef USE_SOCKET_ROUTE -#undef USE_SYSCTL_NET_ROUTE -#define USE_WIN32_CODE -#include -#include -#include -#include -#endif - -#ifdef __HAIKU__ -#include -#include -#include -#include -#define USE_HAIKU_CODE -#endif - -#ifdef USE_SYSCTL_NET_ROUTE -#include -#include -#include -#include -#endif -#ifdef USE_SOCKET_ROUTE -#include -#include -#include -#include -#include -#endif - -#ifdef USE_WIN32_CODE -#include -#include -#define MAX_KEY_LENGTH 255 -#define MAX_VALUE_LENGTH 16383 -#endif - -#ifdef USE_WIN32_CODE_2 -#include -#include -#endif - -#include "getgateway.h" - -#ifndef WIN32 -#define SUCCESS (0) -#define FAILED (-1) -#endif - -#ifdef USE_PROC_NET_ROUTE -/* - parse /proc/net/route which is as follow : - -Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT -wlan0 0001A8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0 -eth0 0000FEA9 00000000 0001 0 0 0 0000FFFF 0 0 0 -wlan0 00000000 0101A8C0 0003 0 0 0 00000000 0 0 0 -eth0 00000000 00000000 0001 0 0 1000 00000000 0 0 0 - - One header line, and then one line by route by route table entry. -*/ -int getdefaultgateway(in_addr_t * addr) -{ - unsigned long d, g; - char buf[256]; - int line = 0; - FILE * f; - char * p; - f = fopen("/proc/net/route", "r"); - if(!f) - return FAILED; - while(fgets(buf, sizeof(buf), f)) { - if(line > 0) { /* skip the first line */ - p = buf; - /* skip the interface name */ - while(*p && !isspace(*p)) - p++; - while(*p && isspace(*p)) - p++; - if(sscanf(p, "%lx%lx", &d, &g)==2) { - if(d == 0 && g != 0) { /* default */ - *addr = g; - fclose(f); - return SUCCESS; - } - } - } - line++; - } - /* default route not found ! */ - if(f) - fclose(f); - return FAILED; -} -#endif /* #ifdef USE_PROC_NET_ROUTE */ - - -#ifdef USE_SYSCTL_NET_ROUTE - -#define ROUNDUP(a) \ - ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long)) - -int getdefaultgateway(in_addr_t * addr) -{ -#if 0 - /* net.route.0.inet.dump.0.0 ? */ - int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET, - NET_RT_DUMP, 0, 0/*tableid*/}; -#endif - /* net.route.0.inet.flags.gateway */ - int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET, - NET_RT_FLAGS, RTF_GATEWAY}; - size_t l; - char * buf, * p; - struct rt_msghdr * rt; - struct sockaddr * sa; - struct sockaddr * sa_tab[RTAX_MAX]; - int i; - int r = FAILED; - if(sysctl(mib, sizeof(mib)/sizeof(int), 0, &l, 0, 0) < 0) { - return FAILED; - } - if(l>0) { - buf = malloc(l); - if(sysctl(mib, sizeof(mib)/sizeof(int), buf, &l, 0, 0) < 0) { - free(buf); - return FAILED; - } - for(p=buf; prtm_msglen) { - rt = (struct rt_msghdr *)p; - sa = (struct sockaddr *)(rt + 1); - for(i=0; irtm_addrs & (1 << i)) { - sa_tab[i] = sa; - sa = (struct sockaddr *)((char *)sa + ROUNDUP(sa->sa_len)); - } else { - sa_tab[i] = NULL; - } - } - if( ((rt->rtm_addrs & (RTA_DST|RTA_GATEWAY)) == (RTA_DST|RTA_GATEWAY)) - && sa_tab[RTAX_DST]->sa_family == AF_INET - && sa_tab[RTAX_GATEWAY]->sa_family == AF_INET) { - if(((struct sockaddr_in *)sa_tab[RTAX_DST])->sin_addr.s_addr == 0) { - *addr = ((struct sockaddr_in *)(sa_tab[RTAX_GATEWAY]))->sin_addr.s_addr; - r = SUCCESS; - } - } - } - free(buf); - } - return r; -} -#endif /* #ifdef USE_SYSCTL_NET_ROUTE */ - - -#ifdef USE_SOCKET_ROUTE -/* Thanks to Darren Kenny for this code */ -#define NEXTADDR(w, u) \ - if (rtm_addrs & (w)) {\ - l = sizeof(struct sockaddr); memmove(cp, &(u), l); cp += l;\ - } - -#define rtm m_rtmsg.m_rtm - -struct { - struct rt_msghdr m_rtm; - char m_space[512]; -} m_rtmsg; - -int getdefaultgateway(in_addr_t *addr) -{ - int s, seq, l, rtm_addrs, i; - pid_t pid; - struct sockaddr so_dst, so_mask; - char *cp = m_rtmsg.m_space; - struct sockaddr *gate = NULL, *sa; - struct rt_msghdr *msg_hdr; - - pid = getpid(); - seq = 0; - rtm_addrs = RTA_DST | RTA_NETMASK; - - memset(&so_dst, 0, sizeof(so_dst)); - memset(&so_mask, 0, sizeof(so_mask)); - memset(&rtm, 0, sizeof(struct rt_msghdr)); - - rtm.rtm_type = RTM_GET; - rtm.rtm_flags = RTF_UP | RTF_GATEWAY; - rtm.rtm_version = RTM_VERSION; - rtm.rtm_seq = ++seq; - rtm.rtm_addrs = rtm_addrs; - - so_dst.sa_family = AF_INET; - so_mask.sa_family = AF_INET; - - NEXTADDR(RTA_DST, so_dst); - NEXTADDR(RTA_NETMASK, so_mask); - - rtm.rtm_msglen = l = cp - (char *)&m_rtmsg; - - s = socket(PF_ROUTE, SOCK_RAW, 0); - - if (write(s, (char *)&m_rtmsg, l) < 0) { - close(s); - return FAILED; - } - - do { - l = read(s, (char *)&m_rtmsg, sizeof(m_rtmsg)); - } while (l > 0 && (rtm.rtm_seq != seq || rtm.rtm_pid != pid)); - - close(s); - - msg_hdr = &rtm; - - cp = ((char *)(msg_hdr + 1)); - if (msg_hdr->rtm_addrs) { - for (i = 1; i; i <<= 1) - if (i & msg_hdr->rtm_addrs) { - sa = (struct sockaddr *)cp; - if (i == RTA_GATEWAY ) - gate = sa; - - cp += sizeof(struct sockaddr); - } - } else { - return FAILED; - } - - - if (gate != NULL ) { - *addr = ((struct sockaddr_in *)gate)->sin_addr.s_addr; - return SUCCESS; - } else { - return FAILED; - } -} -#endif /* #ifdef USE_SOCKET_ROUTE */ - -#ifdef USE_WIN32_CODE -LIBSPEC int getdefaultgateway(in_addr_t * addr) -{ - HKEY networkCardsKey; - HKEY networkCardKey; - HKEY interfacesKey; - HKEY interfaceKey; - DWORD i = 0; - DWORD numSubKeys = 0; - TCHAR keyName[MAX_KEY_LENGTH]; - DWORD keyNameLength = MAX_KEY_LENGTH; - TCHAR keyValue[MAX_VALUE_LENGTH]; - DWORD keyValueLength = MAX_VALUE_LENGTH; - DWORD keyValueType = REG_SZ; - TCHAR gatewayValue[MAX_VALUE_LENGTH]; - DWORD gatewayValueLength = MAX_VALUE_LENGTH; - DWORD gatewayValueType = REG_MULTI_SZ; - int done = 0; - - //const char * networkCardsPath = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"; - //const char * interfacesPath = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces"; -#ifdef UNICODE - LPCTSTR networkCardsPath = L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"; - LPCTSTR interfacesPath = L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces"; -#define STR_SERVICENAME L"ServiceName" -#define STR_DHCPDEFAULTGATEWAY L"DhcpDefaultGateway" -#define STR_DEFAULTGATEWAY L"DefaultGateway" -#else - LPCTSTR networkCardsPath = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards"; - LPCTSTR interfacesPath = "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces"; -#define STR_SERVICENAME "ServiceName" -#define STR_DHCPDEFAULTGATEWAY "DhcpDefaultGateway" -#define STR_DEFAULTGATEWAY "DefaultGateway" -#endif - // The windows registry lists its primary network devices in the following location: - // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards - // - // Each network device has its own subfolder, named with an index, with various properties: - // -NetworkCards - // -5 - // -Description = Broadcom 802.11n Network Adapter - // -ServiceName = {E35A72F8-5065-4097-8DFE-C7790774EE4D} - // -8 - // -Description = Marvell Yukon 88E8058 PCI-E Gigabit Ethernet Controller - // -ServiceName = {86226414-5545-4335-A9D1-5BD7120119AD} - // - // The above service name is the name of a subfolder within: - // HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces - // - // There may be more subfolders in this interfaces path than listed in the network cards path above: - // -Interfaces - // -{3a539854-6a70-11db-887c-806e6f6e6963} - // -DhcpIPAddress = 0.0.0.0 - // -[more] - // -{E35A72F8-5065-4097-8DFE-C7790774EE4D} - // -DhcpIPAddress = 10.0.1.4 - // -DhcpDefaultGateway = 10.0.1.1 - // -[more] - // -{86226414-5545-4335-A9D1-5BD7120119AD} - // -DhcpIpAddress = 10.0.1.5 - // -DhcpDefaultGateay = 10.0.1.1 - // -[more] - // - // In order to extract this information, we enumerate each network card, and extract the ServiceName value. - // This is then used to open the interface subfolder, and attempt to extract a DhcpDefaultGateway value. - // Once one is found, we're done. - // - // It may be possible to simply enumerate the interface folders until we find one with a DhcpDefaultGateway value. - // However, the technique used is the technique most cited on the web, and we assume it to be more correct. - - if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, // Open registry key or predifined key - networkCardsPath, // Name of registry subkey to open - 0, // Reserved - must be zero - KEY_READ, // Mask - desired access rights - &networkCardsKey)) // Pointer to output key - { - // Unable to open network cards keys - return -1; - } - - if(ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, // Open registry key or predefined key - interfacesPath, // Name of registry subkey to open - 0, // Reserved - must be zero - KEY_READ, // Mask - desired access rights - &interfacesKey)) // Pointer to output key - { - // Unable to open interfaces key - RegCloseKey(networkCardsKey); - return -1; - } - - // Figure out how many subfolders are within the NetworkCards folder - RegQueryInfoKey(networkCardsKey, NULL, NULL, NULL, &numSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - - //printf( "Number of subkeys: %u\n", (unsigned int)numSubKeys); - - // Enumrate through each subfolder within the NetworkCards folder - for(i = 0; i < numSubKeys && !done; i++) - { - keyNameLength = MAX_KEY_LENGTH; - if(ERROR_SUCCESS == RegEnumKeyEx(networkCardsKey, // Open registry key - i, // Index of subkey to retrieve - keyName, // Buffer that receives the name of the subkey - &keyNameLength, // Variable that receives the size of the above buffer - NULL, // Reserved - must be NULL - NULL, // Buffer that receives the class string - NULL, // Variable that receives the size of the above buffer - NULL)) // Variable that receives the last write time of subkey - { - if(RegOpenKeyEx(networkCardsKey, keyName, 0, KEY_READ, &networkCardKey) == ERROR_SUCCESS) - { - keyValueLength = MAX_VALUE_LENGTH; - if(ERROR_SUCCESS == RegQueryValueEx(networkCardKey, // Open registry key - STR_SERVICENAME, // Name of key to query - NULL, // Reserved - must be NULL - &keyValueType, // Receives value type - (LPBYTE)keyValue, // Receives value - &keyValueLength)) // Receives value length in bytes - { -// printf("keyValue: %s\n", keyValue); - if(RegOpenKeyEx(interfacesKey, keyValue, 0, KEY_READ, &interfaceKey) == ERROR_SUCCESS) - { - gatewayValueLength = MAX_VALUE_LENGTH; - if(ERROR_SUCCESS == RegQueryValueEx(interfaceKey, // Open registry key - STR_DHCPDEFAULTGATEWAY, // Name of key to query - NULL, // Reserved - must be NULL - &gatewayValueType, // Receives value type - (LPBYTE)gatewayValue, // Receives value - &gatewayValueLength)) // Receives value length in bytes - { - // Check to make sure it's a string - if((gatewayValueType == REG_MULTI_SZ || gatewayValueType == REG_SZ) && (gatewayValueLength > 1)) - { - //printf("gatewayValue: %s\n", gatewayValue); - done = 1; - } - } - else if(ERROR_SUCCESS == RegQueryValueEx(interfaceKey, // Open registry key - STR_DEFAULTGATEWAY, // Name of key to query - NULL, // Reserved - must be NULL - &gatewayValueType, // Receives value type - (LPBYTE)gatewayValue,// Receives value - &gatewayValueLength)) // Receives value length in bytes - { - // Check to make sure it's a string - if((gatewayValueType == REG_MULTI_SZ || gatewayValueType == REG_SZ) && (gatewayValueLength > 1)) - { - //printf("gatewayValue: %s\n", gatewayValue); - done = 1; - } - } - RegCloseKey(interfaceKey); - } - } - RegCloseKey(networkCardKey); - } - } - } - - RegCloseKey(interfacesKey); - RegCloseKey(networkCardsKey); - - if(done) - { -#if UNICODE - char tmp[32]; - for(i = 0; i < 32; i++) { - tmp[i] = (char)gatewayValue[i]; - if(!tmp[i]) - break; - } - tmp[31] = '\0'; - *addr = inet_addr(tmp); -#else - *addr = inet_addr(gatewayValue); -#endif - return 0; - } - - return -1; -} -#endif /* #ifdef USE_WIN32_CODE */ - -#ifdef USE_WIN32_CODE_2 -int getdefaultgateway(in_addr_t *addr) -{ - MIB_IPFORWARDROW ip_forward; - memset(&ip_forward, 0, sizeof(ip_forward)); - if(GetBestRoute(inet_addr("0.0.0.0"), 0, &ip_forward) != NO_ERROR) - return -1; - *addr = ip_forward.dwForwardNextHop; - return 0; -} -#endif /* #ifdef USE_WIN32_CODE_2 */ - -#ifdef USE_HAIKU_CODE -int getdefaultgateway(in_addr_t *addr) -{ - int fd, ret = -1; - struct ifconf config; - void *buffer = NULL; - struct ifreq *interface; - - if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - return -1; - } - if (ioctl(fd, SIOCGRTSIZE, &config, sizeof(config)) != 0) { - goto fail; - } - if (config.ifc_value < 1) { - goto fail; /* No routes */ - } - if ((buffer = malloc(config.ifc_value)) == NULL) { - goto fail; - } - config.ifc_len = config.ifc_value; - config.ifc_buf = buffer; - if (ioctl(fd, SIOCGRTTABLE, &config, sizeof(config)) != 0) { - goto fail; - } - for (interface = buffer; - (uint8_t *)interface < (uint8_t *)buffer + config.ifc_len; ) { - struct route_entry route = interface->ifr_route; - int intfSize; - if (route.flags & (RTF_GATEWAY | RTF_DEFAULT)) { - *addr = ((struct sockaddr_in *)route.gateway)->sin_addr.s_addr; - ret = 0; - break; - } - intfSize = sizeof(route) + IF_NAMESIZE; - if (route.destination != NULL) { - intfSize += route.destination->sa_len; - } - if (route.mask != NULL) { - intfSize += route.mask->sa_len; - } - if (route.gateway != NULL) { - intfSize += route.gateway->sa_len; - } - interface = (struct ifreq *)((uint8_t *)interface + intfSize); - } -fail: - free(buffer); - close(fd); - return ret; -} -#endif /* #ifdef USE_HAIKU_CODE */ - -#if !defined(USE_PROC_NET_ROUTE) && !defined(USE_SOCKET_ROUTE) && !defined(USE_SYSCTL_NET_ROUTE) && !defined(USE_WIN32_CODE) && !defined(USE_WIN32_CODE_2) && !defined(USE_HAIKU_CODE) -int getdefaultgateway(in_addr_t * addr) -{ - return -1; -} -#endif diff --git a/pkg/hs/natpmp-static/cbits/getgateway.h b/pkg/hs/natpmp-static/cbits/getgateway.h deleted file mode 100644 index 5d3df7312..000000000 --- a/pkg/hs/natpmp-static/cbits/getgateway.h +++ /dev/null @@ -1,49 +0,0 @@ -/* $Id: getgateway.h,v 1.8 2014/04/22 09:15:40 nanard Exp $ */ -/* libnatpmp -Copyright (c) 2007-2014, Thomas BERNARD -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __GETGATEWAY_H__ -#define __GETGATEWAY_H__ - -#ifdef WIN32 -#if !defined(_MSC_VER) || _MSC_VER >= 1600 -#include -#else -typedef unsigned long uint32_t; -typedef unsigned short uint16_t; -#endif -#define in_addr_t uint32_t -#endif -/* #include "declspec.h" */ - -/* getdefaultgateway() : - * return value : - * 0 : success - * -1 : failure */ -/* LIBSPEC */int getdefaultgateway(in_addr_t * addr); - -#endif diff --git a/pkg/hs/natpmp-static/cbits/natpmp.c b/pkg/hs/natpmp-static/cbits/natpmp.c deleted file mode 100644 index 289c36445..000000000 --- a/pkg/hs/natpmp-static/cbits/natpmp.c +++ /dev/null @@ -1,387 +0,0 @@ -/* $Id: natpmp.c,v 1.20 2015/05/27 12:43:15 nanard Exp $ */ -/* libnatpmp -Copyright (c) 2007-2015, Thomas BERNARD -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -*/ -#ifdef __linux__ -#define _BSD_SOURCE 1 -#endif -#include -#include -#if !defined(_MSC_VER) -#include -#endif -#ifdef WIN32 -#include -#include -#include -#include -#define EWOULDBLOCK WSAEWOULDBLOCK -#define ECONNREFUSED WSAECONNREFUSED -#include "wingettimeofday.h" -#define gettimeofday natpmp_gettimeofday -#else -#include -#include -#include -#include -#include -#define closesocket close -#endif -#include "natpmp.h" -#include "getgateway.h" -#include - -LIBSPEC int initnatpmp(natpmp_t * p, int forcegw, in_addr_t forcedgw) -{ -#ifdef WIN32 - u_long ioctlArg = 1; -#else - int flags; -#endif - struct sockaddr_in addr; - if(!p) - return NATPMP_ERR_INVALIDARGS; - memset(p, 0, sizeof(natpmp_t)); - p->s = socket(PF_INET, SOCK_DGRAM, 0); - if(p->s < 0) - return NATPMP_ERR_SOCKETERROR; -#ifdef WIN32 - if(ioctlsocket(p->s, FIONBIO, &ioctlArg) == SOCKET_ERROR) - return NATPMP_ERR_FCNTLERROR; -#else - if((flags = fcntl(p->s, F_GETFL, 0)) < 0) - return NATPMP_ERR_FCNTLERROR; - if(fcntl(p->s, F_SETFL, flags | O_NONBLOCK) < 0) - return NATPMP_ERR_FCNTLERROR; -#endif - - if(forcegw) { - p->gateway = forcedgw; - } else { - if(getdefaultgateway(&(p->gateway)) < 0) - return NATPMP_ERR_CANNOTGETGATEWAY; - } - - memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(NATPMP_PORT); - addr.sin_addr.s_addr = p->gateway; - if(connect(p->s, (struct sockaddr *)&addr, sizeof(addr)) < 0) - return NATPMP_ERR_CONNECTERR; - return 0; -} - -LIBSPEC int closenatpmp(natpmp_t * p) -{ - if(!p) - return NATPMP_ERR_INVALIDARGS; - if(closesocket(p->s) < 0) - return NATPMP_ERR_CLOSEERR; - return 0; -} - -int sendpendingrequest(natpmp_t * p) -{ - int r; -/* struct sockaddr_in addr;*/ - if(!p) - return NATPMP_ERR_INVALIDARGS; -/* memset(&addr, 0, sizeof(addr)); - addr.sin_family = AF_INET; - addr.sin_port = htons(NATPMP_PORT); - addr.sin_addr.s_addr = p->gateway; - r = (int)sendto(p->s, p->pending_request, p->pending_request_len, 0, - (struct sockaddr *)&addr, sizeof(addr));*/ - r = (int)send(p->s, (const char *)p->pending_request, p->pending_request_len, 0); - return (r<0) ? NATPMP_ERR_SENDERR : r; -} - -int sendnatpmprequest(natpmp_t * p) -{ - int n; - if(!p) - return NATPMP_ERR_INVALIDARGS; - /* TODO : check if no request is already pending */ - p->has_pending_request = 1; - p->try_number = 1; - n = sendpendingrequest(p); - gettimeofday(&p->retry_time, NULL); // check errors ! - p->retry_time.tv_usec += 250000; /* add 250ms */ - if(p->retry_time.tv_usec >= 1000000) { - p->retry_time.tv_usec -= 1000000; - p->retry_time.tv_sec++; - } - return n; -} - -LIBSPEC int getnatpmprequesttimeout(natpmp_t * p, struct timeval * timeout) -{ - struct timeval now; - if(!p || !timeout) - return NATPMP_ERR_INVALIDARGS; - if(!p->has_pending_request) - return NATPMP_ERR_NOPENDINGREQ; - if(gettimeofday(&now, NULL) < 0) - return NATPMP_ERR_GETTIMEOFDAYERR; - timeout->tv_sec = p->retry_time.tv_sec - now.tv_sec; - timeout->tv_usec = p->retry_time.tv_usec - now.tv_usec; - if(timeout->tv_usec < 0) { - timeout->tv_usec += 1000000; - timeout->tv_sec--; - } - return 0; -} - -LIBSPEC int sendpublicaddressrequest(natpmp_t * p) -{ - if(!p) - return NATPMP_ERR_INVALIDARGS; - //static const unsigned char request[] = { 0, 0 }; - p->pending_request[0] = 0; - p->pending_request[1] = 0; - p->pending_request_len = 2; - // TODO: return 0 instead of sizeof(request) ?? - return sendnatpmprequest(p); -} - -LIBSPEC int sendnewportmappingrequest(natpmp_t * p, int protocol, - uint16_t privateport, uint16_t publicport, - uint32_t lifetime) -{ - if(!p || (protocol!=NATPMP_PROTOCOL_TCP && protocol!=NATPMP_PROTOCOL_UDP)) - return NATPMP_ERR_INVALIDARGS; - p->pending_request[0] = 0; - p->pending_request[1] = protocol; - p->pending_request[2] = 0; - p->pending_request[3] = 0; - /* break strict-aliasing rules : - *((uint16_t *)(p->pending_request + 4)) = htons(privateport); */ - p->pending_request[4] = (privateport >> 8) & 0xff; - p->pending_request[5] = privateport & 0xff; - /* break stric-aliasing rules : - *((uint16_t *)(p->pending_request + 6)) = htons(publicport); */ - p->pending_request[6] = (publicport >> 8) & 0xff; - p->pending_request[7] = publicport & 0xff; - /* break stric-aliasing rules : - *((uint32_t *)(p->pending_request + 8)) = htonl(lifetime); */ - p->pending_request[8] = (lifetime >> 24) & 0xff; - p->pending_request[9] = (lifetime >> 16) & 0xff; - p->pending_request[10] = (lifetime >> 8) & 0xff; - p->pending_request[11] = lifetime & 0xff; - p->pending_request_len = 12; - return sendnatpmprequest(p); -} - -LIBSPEC int readnatpmpresponse(natpmp_t * p, natpmpresp_t * response) -{ - unsigned char buf[16]; - struct sockaddr_in addr; - socklen_t addrlen = sizeof(addr); - int n; - if(!p) - return NATPMP_ERR_INVALIDARGS; - n = recvfrom(p->s, (char *)buf, sizeof(buf), 0, - (struct sockaddr *)&addr, &addrlen); - if(n<0) -#ifdef WIN32 - switch(WSAGetLastError()) { -#else - switch(errno) { -#endif - /*case EAGAIN:*/ - case EWOULDBLOCK: - n = NATPMP_TRYAGAIN; - break; - case ECONNREFUSED: - n = NATPMP_ERR_NOGATEWAYSUPPORT; - break; - default: - n = NATPMP_ERR_RECVFROM; - } - /* check that addr is correct (= gateway) */ - else if(addr.sin_addr.s_addr != p->gateway) - n = NATPMP_ERR_WRONGPACKETSOURCE; - else { - response->resultcode = ntohs(*((uint16_t *)(buf + 2))); - response->epoch = ntohl(*((uint32_t *)(buf + 4))); - if(buf[0] != 0) - n = NATPMP_ERR_UNSUPPORTEDVERSION; - else if(buf[1] < 128 || buf[1] > 130) - n = NATPMP_ERR_UNSUPPORTEDOPCODE; - else if(response->resultcode != 0) { - switch(response->resultcode) { - case 1: - n = NATPMP_ERR_UNSUPPORTEDVERSION; - break; - case 2: - n = NATPMP_ERR_NOTAUTHORIZED; - break; - case 3: - n = NATPMP_ERR_NETWORKFAILURE; - break; - case 4: - n = NATPMP_ERR_OUTOFRESOURCES; - break; - case 5: - n = NATPMP_ERR_UNSUPPORTEDOPCODE; - break; - default: - n = NATPMP_ERR_UNDEFINEDERROR; - } - } else { - response->type = buf[1] & 0x7f; - if(buf[1] == 128) - //response->publicaddress.addr = *((uint32_t *)(buf + 8)); - response->pnu.publicaddress.addr.s_addr = *((uint32_t *)(buf + 8)); - else { - response->pnu.newportmapping.privateport = ntohs(*((uint16_t *)(buf + 8))); - response->pnu.newportmapping.mappedpublicport = ntohs(*((uint16_t *)(buf + 10))); - response->pnu.newportmapping.lifetime = ntohl(*((uint32_t *)(buf + 12))); - } - n = 0; - } - } - return n; -} - -int readnatpmpresponseorretry(natpmp_t * p, natpmpresp_t * response) -{ - int n; - if(!p || !response) - return NATPMP_ERR_INVALIDARGS; - if(!p->has_pending_request) - return NATPMP_ERR_NOPENDINGREQ; - n = readnatpmpresponse(p, response); - if(n<0) { - if(n==NATPMP_TRYAGAIN) { - struct timeval now; - gettimeofday(&now, NULL); // check errors ! - if(timercmp(&now, &p->retry_time, >=)) { - int delay, r; - // NOTE: This used to be 9, and was changed for the haskell - // bindings to be 5. - if(p->try_number >= 5) { - return NATPMP_ERR_NOGATEWAYSUPPORT; - } - /*printf("retry! %d\n", p->try_number);*/ - - // NOTE: Changed how delays are calculated. Waiting up to four - // minutes for a packet that might never get a response is not - // a good user experience. Instead, retry up to 2 seconds. - // - // delay = 250 * (1<try_number); // ms - delay = 250 * p->try_number; // ms - /*for(i=0; itry_number; i++) - delay += delay;*/ - p->retry_time.tv_sec += (delay / 1000); - p->retry_time.tv_usec += (delay % 1000) * 1000; - if(p->retry_time.tv_usec >= 1000000) { - p->retry_time.tv_usec -= 1000000; - p->retry_time.tv_sec++; - } - p->try_number++; - r = sendpendingrequest(p); - if(r<0) - return r; - } - } - } else { - p->has_pending_request = 0; - } - return n; -} - -#ifdef ENABLE_STRNATPMPERR -LIBSPEC const char * strnatpmperr(int r) -{ - const char * s; - switch(r) { - case NATPMP_ERR_INVALIDARGS: - s = "invalid arguments"; - break; - case NATPMP_ERR_SOCKETERROR: - s = "socket() failed"; - break; - case NATPMP_ERR_CANNOTGETGATEWAY: - s = "cannot get default gateway ip address"; - break; - case NATPMP_ERR_CLOSEERR: -#ifdef WIN32 - s = "closesocket() failed"; -#else - s = "close() failed"; -#endif - break; - case NATPMP_ERR_RECVFROM: - s = "recvfrom() failed"; - break; - case NATPMP_ERR_NOPENDINGREQ: - s = "no pending request"; - break; - case NATPMP_ERR_NOGATEWAYSUPPORT: - s = "the gateway does not support nat-pmp"; - break; - case NATPMP_ERR_CONNECTERR: - s = "connect() failed"; - break; - case NATPMP_ERR_WRONGPACKETSOURCE: - s = "packet not received from the default gateway"; - break; - case NATPMP_ERR_SENDERR: - s = "send() failed"; - break; - case NATPMP_ERR_FCNTLERROR: - s = "fcntl() failed"; - break; - case NATPMP_ERR_GETTIMEOFDAYERR: - s = "gettimeofday() failed"; - break; - case NATPMP_ERR_UNSUPPORTEDVERSION: - s = "unsupported nat-pmp version error from server"; - break; - case NATPMP_ERR_UNSUPPORTEDOPCODE: - s = "unsupported nat-pmp opcode error from server"; - break; - case NATPMP_ERR_UNDEFINEDERROR: - s = "undefined nat-pmp server error"; - break; - case NATPMP_ERR_NOTAUTHORIZED: - s = "not authorized"; - break; - case NATPMP_ERR_NETWORKFAILURE: - s = "network failure"; - break; - case NATPMP_ERR_OUTOFRESOURCES: - s = "nat-pmp server out of resources"; - break; - default: - s = "Unknown libnatpmp error"; - } - return s; -} -#endif - diff --git a/pkg/hs/natpmp-static/cbits/natpmp.h b/pkg/hs/natpmp-static/cbits/natpmp.h deleted file mode 100644 index 3f721b7b9..000000000 --- a/pkg/hs/natpmp-static/cbits/natpmp.h +++ /dev/null @@ -1,221 +0,0 @@ -/* $Id: natpmp.h,v 1.20 2014/04/22 09:15:40 nanard Exp $ */ -/* libnatpmp -Copyright (c) 2007-2014, Thomas BERNARD -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __NATPMP_H__ -#define __NATPMP_H__ - -/* NAT-PMP Port as defined by the NAT-PMP draft */ -#define NATPMP_PORT (5351) - -#define ENABLE_STRNATPMPERR - -#include -#if !defined(_MSC_VER) -#include -#endif /* !defined(_MSC_VER) */ - -#ifdef WIN32 -#include -#if !defined(_MSC_VER) || _MSC_VER >= 1600 -#include -#else /* !defined(_MSC_VER) || _MSC_VER >= 1600 */ -typedef unsigned long uint32_t; -typedef unsigned short uint16_t; -#endif /* !defined(_MSC_VER) || _MSC_VER >= 1600 */ -#define in_addr_t uint32_t -#include "declspec.h" -#else /* WIN32 */ -#define LIBSPEC -#include -#endif /* WIN32 */ - -/* causes problem when installing. Maybe should it be inlined ? */ -/* #include "declspec.h" */ - -typedef struct { - int s; /* socket */ - in_addr_t gateway; /* default gateway (IPv4) */ - int has_pending_request; - unsigned char pending_request[12]; - int pending_request_len; - int try_number; - struct timeval retry_time; -} natpmp_t; - -typedef struct { - uint16_t type; /* NATPMP_RESPTYPE_* */ - uint16_t resultcode; /* NAT-PMP response code */ - uint32_t epoch; /* Seconds since start of epoch */ - union { - struct { - //in_addr_t addr; - struct in_addr addr; - } publicaddress; - struct { - uint16_t privateport; - uint16_t mappedpublicport; - uint32_t lifetime; - } newportmapping; - } pnu; -} natpmpresp_t; - -/* possible values for type field of natpmpresp_t */ -#define NATPMP_RESPTYPE_PUBLICADDRESS (0) -#define NATPMP_RESPTYPE_UDPPORTMAPPING (1) -#define NATPMP_RESPTYPE_TCPPORTMAPPING (2) - -/* Values to pass to sendnewportmappingrequest() */ -#define NATPMP_PROTOCOL_UDP (1) -#define NATPMP_PROTOCOL_TCP (2) - -/* return values */ -/* NATPMP_ERR_INVALIDARGS : invalid arguments passed to the function */ -#define NATPMP_ERR_INVALIDARGS (-1) -/* NATPMP_ERR_SOCKETERROR : socket() failed. check errno for details */ -#define NATPMP_ERR_SOCKETERROR (-2) -/* NATPMP_ERR_CANNOTGETGATEWAY : can't get default gateway IP */ -#define NATPMP_ERR_CANNOTGETGATEWAY (-3) -/* NATPMP_ERR_CLOSEERR : close() failed. check errno for details */ -#define NATPMP_ERR_CLOSEERR (-4) -/* NATPMP_ERR_RECVFROM : recvfrom() failed. check errno for details */ -#define NATPMP_ERR_RECVFROM (-5) -/* NATPMP_ERR_NOPENDINGREQ : readnatpmpresponseorretry() called while - * no NAT-PMP request was pending */ -#define NATPMP_ERR_NOPENDINGREQ (-6) -/* NATPMP_ERR_NOGATEWAYSUPPORT : the gateway does not support NAT-PMP */ -#define NATPMP_ERR_NOGATEWAYSUPPORT (-7) -/* NATPMP_ERR_CONNECTERR : connect() failed. check errno for details */ -#define NATPMP_ERR_CONNECTERR (-8) -/* NATPMP_ERR_WRONGPACKETSOURCE : packet not received from the network gateway */ -#define NATPMP_ERR_WRONGPACKETSOURCE (-9) -/* NATPMP_ERR_SENDERR : send() failed. check errno for details */ -#define NATPMP_ERR_SENDERR (-10) -/* NATPMP_ERR_FCNTLERROR : fcntl() failed. check errno for details */ -#define NATPMP_ERR_FCNTLERROR (-11) -/* NATPMP_ERR_GETTIMEOFDAYERR : gettimeofday() failed. check errno for details */ -#define NATPMP_ERR_GETTIMEOFDAYERR (-12) - -/* */ -#define NATPMP_ERR_UNSUPPORTEDVERSION (-14) -#define NATPMP_ERR_UNSUPPORTEDOPCODE (-15) - -/* Errors from the server : */ -#define NATPMP_ERR_UNDEFINEDERROR (-49) -#define NATPMP_ERR_NOTAUTHORIZED (-51) -#define NATPMP_ERR_NETWORKFAILURE (-52) -#define NATPMP_ERR_OUTOFRESOURCES (-53) - -/* NATPMP_TRYAGAIN : no data available for the moment. try again later */ -#define NATPMP_TRYAGAIN (-100) - -#ifdef __cplusplus -extern "C" { -#endif - -/* initnatpmp() - * initialize a natpmp_t object - * With forcegw=1 the gateway is not detected automaticaly. - * Return values : - * 0 = OK - * NATPMP_ERR_INVALIDARGS - * NATPMP_ERR_SOCKETERROR - * NATPMP_ERR_FCNTLERROR - * NATPMP_ERR_CANNOTGETGATEWAY - * NATPMP_ERR_CONNECTERR */ -LIBSPEC int initnatpmp(natpmp_t * p, int forcegw, in_addr_t forcedgw); - -/* closenatpmp() - * close resources associated with a natpmp_t object - * Return values : - * 0 = OK - * NATPMP_ERR_INVALIDARGS - * NATPMP_ERR_CLOSEERR */ -LIBSPEC int closenatpmp(natpmp_t * p); - -/* sendpublicaddressrequest() - * send a public address NAT-PMP request to the network gateway - * Return values : - * 2 = OK (size of the request) - * NATPMP_ERR_INVALIDARGS - * NATPMP_ERR_SENDERR */ -LIBSPEC int sendpublicaddressrequest(natpmp_t * p); - -/* sendnewportmappingrequest() - * send a new port mapping NAT-PMP request to the network gateway - * Arguments : - * protocol is either NATPMP_PROTOCOL_TCP or NATPMP_PROTOCOL_UDP, - * lifetime is in seconds. - * To remove a port mapping, set lifetime to zero. - * To remove all port mappings to the host, set lifetime and both ports - * to zero. - * Return values : - * 12 = OK (size of the request) - * NATPMP_ERR_INVALIDARGS - * NATPMP_ERR_SENDERR */ -LIBSPEC int sendnewportmappingrequest(natpmp_t * p, int protocol, - uint16_t privateport, uint16_t publicport, - uint32_t lifetime); - -/* getnatpmprequesttimeout() - * fills the timeval structure with the timeout duration of the - * currently pending NAT-PMP request. - * Return values : - * 0 = OK - * NATPMP_ERR_INVALIDARGS - * NATPMP_ERR_GETTIMEOFDAYERR - * NATPMP_ERR_NOPENDINGREQ */ -LIBSPEC int getnatpmprequesttimeout(natpmp_t * p, struct timeval * timeout); - -/* readnatpmpresponseorretry() - * fills the natpmpresp_t structure if possible - * Return values : - * 0 = OK - * NATPMP_TRYAGAIN - * NATPMP_ERR_INVALIDARGS - * NATPMP_ERR_NOPENDINGREQ - * NATPMP_ERR_NOGATEWAYSUPPORT - * NATPMP_ERR_RECVFROM - * NATPMP_ERR_WRONGPACKETSOURCE - * NATPMP_ERR_UNSUPPORTEDVERSION - * NATPMP_ERR_UNSUPPORTEDOPCODE - * NATPMP_ERR_NOTAUTHORIZED - * NATPMP_ERR_NETWORKFAILURE - * NATPMP_ERR_OUTOFRESOURCES - * NATPMP_ERR_UNSUPPORTEDOPCODE - * NATPMP_ERR_UNDEFINEDERROR */ -LIBSPEC int readnatpmpresponseorretry(natpmp_t * p, natpmpresp_t * response); - -#ifdef ENABLE_STRNATPMPERR -LIBSPEC const char * strnatpmperr(int t); -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/pkg/hs/natpmp-static/hsrc_lib/Network/NatPmp.hsc b/pkg/hs/natpmp-static/hsrc_lib/Network/NatPmp.hsc deleted file mode 100644 index f410625d6..000000000 --- a/pkg/hs/natpmp-static/hsrc_lib/Network/NatPmp.hsc +++ /dev/null @@ -1,266 +0,0 @@ -{-# LANGUAGE ForeignFunctionInterface, DeriveDataTypeable #-} - --- | This module is a thin wrapper above libnatpmp.h and getgateway.h. - -module Network.NatPmp (Error(..), - NatPmpResponse(..), - ProtocolType(..), - NatPmpHandle, - Port, - LifetimeSeconds, - initNatPmp, - closeNatPmp, - getDefaultGateway, - getPublicAddress, - setPortMapping) where - -#include - -#include -#include -#include - -import Prelude -import Foreign -import Foreign.C -import Network.Socket - -import Control.Monad.IO.Unlift (MonadIO(..)) - --- Opaque type for the internals of nat pmp -data NatPmpStruct -type NatPmpHandle = Ptr NatPmpStruct - -type Port = Word16 -type LifetimeSeconds = Word32 - --- The response type, in its internal form. This struct is a C tagged union --- with additional data, but we need to read and write from its C form. -data NatPmpResponse - = NatPmpResponsePublicAddress HostAddress - | NatPmpResponseUdpPortMapping Port Port LifetimeSeconds - | NatPmpResponseTcpPortMapping Port Port LifetimeSeconds - deriving (Show) - -instance Storable NatPmpResponse where - sizeOf _ = #{size natpmpresp_t} - alignment _ = alignment (undefined :: CString) - - peek p = do - t <- uintToEnum <$> (#{peek natpmpresp_t, type} p) - case t of - RTPublicAddress -> - NatPmpResponsePublicAddress <$> - (#{peek natpmpresp_t, pnu.publicaddress.addr} p) - RTUdpPortMapping -> - NatPmpResponseUdpPortMapping - <$> (#{peek natpmpresp_t, pnu.newportmapping.privateport} p) - <*> (#{peek natpmpresp_t, pnu.newportmapping.mappedpublicport} p) - <*> (#{peek natpmpresp_t, pnu.newportmapping.lifetime} p) - RTTcpPortMapping -> - NatPmpResponseTcpPortMapping - <$> (#{peek natpmpresp_t, pnu.newportmapping.privateport} p) - <*> (#{peek natpmpresp_t, pnu.newportmapping.mappedpublicport} p) - <*> (#{peek natpmpresp_t, pnu.newportmapping.lifetime} p) - - poke _ _ = error "Responses are an output data structure; poke makes no sense" - -type NatPmpResponseHandle = Ptr NatPmpResponse - -foreign import ccall unsafe "getgateway.h getdefaultgateway" _get_default_gateway :: Ptr CUInt -> IO CInt - -foreign import ccall unsafe "natpmp.h initnatpmp" _init_nat_pmp :: NatPmpHandle -> CInt -> CInt -> IO CInt -foreign import ccall unsafe "natpmp.h closenatpmp" _close_nat_pmp :: NatPmpHandle -> IO CInt -foreign import ccall unsafe "natpmp.h sendpublicaddressrequest" sendPublicAddressRequest :: NatPmpHandle -> IO CInt -foreign import ccall unsafe "natpmp.h sendnewportmappingrequest" sendNewPortMappingRequest :: NatPmpHandle -> CInt -> CUShort -> CUShort -> CUInt -> IO CInt - -foreign import ccall unsafe "binding.h readNatResponseSynchronously" readNatResponseSynchronously :: NatPmpHandle -> NatPmpResponseHandle -> IO CInt - --- Give the type system some help -_peekCUInt :: Ptr CUInt -> IO CUInt -_peekCUInt = peek - -uintToEnum :: Enum e => CUInt -> e -uintToEnum = toEnum . fromIntegral - -intToEnum :: Enum e => CInt -> e -intToEnum = toEnum . fromIntegral - - --- Fetches the default gateway as an ipv4 address -getDefaultGateway :: IO (Maybe HostAddress) -getDefaultGateway = - alloca $ \(pReturnAddr :: Ptr CUInt) -> do - _get_default_gateway pReturnAddr >>= \case - 0 -> (Just . fromIntegral) <$> _peekCUInt pReturnAddr - _ -> pure Nothing - - -data RespType - = RTPublicAddress - | RTUdpPortMapping - | RTTcpPortMapping - deriving (Eq, Show) - -instance Enum RespType where - fromEnum RTPublicAddress = 0 - fromEnum RTUdpPortMapping = 1 - fromEnum RTTcpPortMapping = 2 - - toEnum 0 = RTPublicAddress - toEnum 1 = RTUdpPortMapping - toEnum 2 = RTTcpPortMapping - toEnum unmatched = error ("RespType.toEnum: Cannot match " ++ show unmatched) - - -data ProtocolType - = PTUdp - | PTTcp - deriving (Eq, Show) - -instance Enum ProtocolType where - fromEnum PTUdp = 1 - fromEnum PTTcp = 2 - - toEnum 1 = PTUdp - toEnum 2 = PTTcp - toEnum x = error ("ProtocolType.toEnum: Cannot match " ++ show x) - - -data Error - = ErrInvalidArgs - | ErrSocketError - | ErrCannotGetGateway - | ErrCloseErr - | ErrRecvFrom - | ErrNoPendingReq - | ErrNoGatewaySupport - | ErrConnectErr - | ErrWrongPacketSource - | ErrSendErr - | ErrFcntlError - | ErrGetTimeOfDayError - -- - | ErrUnsuportedVersion - | ErrUnsupportedOpcode - -- - | ErrUndefinedError - | ErrNotAuthorized - | ErrNetworkFailure - | ErrOutOfResources - -- - | ErrTryAgain - | ErrHaskellBindings - deriving (Eq, Show) - -instance Enum Error where - fromEnum ErrInvalidArgs = -1 - fromEnum ErrSocketError = -2 - fromEnum ErrCannotGetGateway = -3 - fromEnum ErrCloseErr = -4 - fromEnum ErrRecvFrom = -5 - fromEnum ErrNoPendingReq = -6 - fromEnum ErrNoGatewaySupport = -7 - fromEnum ErrConnectErr = -8 - fromEnum ErrWrongPacketSource = -9 - fromEnum ErrSendErr = -10 - fromEnum ErrFcntlError = -11 - fromEnum ErrGetTimeOfDayError = -12 - -- - fromEnum ErrUnsuportedVersion = -14 - fromEnum ErrUnsupportedOpcode = -15 - -- - fromEnum ErrUndefinedError = -49 - fromEnum ErrNotAuthorized = -51 - fromEnum ErrNetworkFailure = -52 - fromEnum ErrOutOfResources = -53 - -- - fromEnum ErrTryAgain = -100 - fromEnum ErrHaskellBindings = -200 - - toEnum (-1) = ErrInvalidArgs - toEnum (-2) = ErrSocketError - toEnum (-3) = ErrCannotGetGateway - toEnum (-4) = ErrCloseErr - toEnum (-5) = ErrRecvFrom - toEnum (-6) = ErrNoPendingReq - toEnum (-7) = ErrNoGatewaySupport - toEnum (-8) = ErrConnectErr - toEnum (-9) = ErrWrongPacketSource - toEnum (-10) = ErrSendErr - toEnum (-11) = ErrFcntlError - toEnum (-12) = ErrGetTimeOfDayError - -- - toEnum (-14) = ErrUnsuportedVersion - toEnum (-15) = ErrUnsupportedOpcode - -- - toEnum (-49) = ErrUndefinedError - toEnum (-51) = ErrNotAuthorized - toEnum (-52) = ErrNetworkFailure - toEnum (-53) = ErrOutOfResources - -- - toEnum (-100) = ErrTryAgain - toEnum (-200) = ErrHaskellBindings - toEnum unmatched = error ("Error.toEnum: Cannot match " ++ show unmatched) - - -initNatPmp :: MonadIO m => m (Either Error NatPmpHandle) -initNatPmp = liftIO do - natpmp <- mallocBytes #{size natpmp_t} - ret <- _init_nat_pmp natpmp 0 0 - case ret of - 0 -> pure $ Right natpmp - _ -> do - free natpmp - pure $ Left $ intToEnum ret - - -closeNatPmp :: MonadIO m => NatPmpHandle -> m (Either Error ()) -closeNatPmp handle = liftIO do - ret <- _close_nat_pmp handle - free handle - case ret of - 0 -> pure $ Right () - _ -> pure $ Left $ intToEnum ret - - --- | Public interface for getting the public IPv4 address -getPublicAddress :: MonadIO m => NatPmpHandle -> m (Either Error HostAddress) -getPublicAddress natpmp = liftIO do - sendRetcode <- sendPublicAddressRequest natpmp - case sendRetcode of - 2 -> alloca $ \(pResponse :: NatPmpResponseHandle) -> do - respRetcode <- readNatResponseSynchronously natpmp pResponse - case respRetcode of - 0 -> peek pResponse >>= \case - NatPmpResponsePublicAddress addr -> pure $ Right addr - _ -> pure $ Left ErrHaskellBindings - _ -> pure $ Left $ intToEnum respRetcode - _ -> pure $ Left $ intToEnum sendRetcode - --- | Requests that the router maps the privatePort on our local computer in our --- private network to publicPort on the public internet. -setPortMapping :: MonadIO m - => NatPmpHandle - -> ProtocolType - -> Port - -> Port - -> LifetimeSeconds - -> m (Either Error ()) -setPortMapping natpmp protocol privatePort publicPort lifetime = liftIO do - let protocolNum = fromEnum protocol - sendResp <- - sendNewPortMappingRequest natpmp - (fromIntegral protocolNum) (CUShort privatePort) (CUShort publicPort) - (CUInt lifetime) - - case sendResp of - 12 -> alloca $ \(pResponse :: NatPmpResponseHandle) -> do - respRetcode <- readNatResponseSynchronously natpmp pResponse - case respRetcode of - 0 -> peek pResponse >>= \case - NatPmpResponseUdpPortMapping _ _ _ -> pure $ Right () - NatPmpResponseTcpPortMapping _ _ _ -> pure $ Right () - _ -> pure $ Left ErrHaskellBindings - _ -> pure $ Left $ intToEnum respRetcode - x -> pure $ Left $ intToEnum x diff --git a/pkg/hs/natpmp-static/natpmp-static.cabal b/pkg/hs/natpmp-static/natpmp-static.cabal deleted file mode 100644 index 9ee268ab7..000000000 --- a/pkg/hs/natpmp-static/natpmp-static.cabal +++ /dev/null @@ -1,89 +0,0 @@ -cabal-version: >=1.10 --- Initial package description 'natpmp-static.cabal' generated by 'cabal --- init'. For further documentation, see --- http://haskell.org/cabal/users-guide/ - -name: natpmp-static -version: 0.1.0.0 -synopsis: Haskell bindings to libnatpmp -description: - libnatpmp is a C library to communicate with routers and request - that they port forward traffic from the outside internet to your - program. - . - natpmp-static has Haskell bindings to libnatpmp to allow Haskell - programs to punch NAT holes in routers, containing a vendored copy - of the libnatpmp code so that we build Urbit's "almost static" - builds which we distribute. - . - See for upstream source. - --- bug-reports: -license: BSD3 -license-file: LICENSE -author: Elliot Glaysher -maintainer: elliot@tlon.io -copyright: (c) 2020 Tlon. -stability: experimental -build-type: Simple - -library - hs-Source-Dirs: hsrc_lib - default-language: Haskell2010 - build-depends: base - , network - , unliftio-core - build-tools: hsc2hs - - Include-dirs: cbits - Includes: natpmp.h getgateway.h - C-Sources: cbits/natpmp.c cbits/getgateway.c cbits/binding.c - cc-options: -Wall -Os -g -fPIC - ghc-options: -Wall -fprof-auto -fPIC - - exposed-modules: Network.NatPmp - -- other-modules: - -- other-extensions: - - default-extensions: ApplicativeDo - , BangPatterns - , BlockArguments - , DataKinds - , DefaultSignatures - , DeriveAnyClass - , DeriveDataTypeable - , DeriveFoldable - , DeriveGeneric - , DeriveTraversable - , DerivingStrategies - , EmptyCase - , EmptyDataDecls - , FlexibleContexts - , FlexibleInstances - , FunctionalDependencies - , GADTs - , GeneralizedNewtypeDeriving - , LambdaCase - , MagicHash - , MultiParamTypeClasses - , NamedFieldPuns - , NoImplicitPrelude - , NumericUnderscores - , OverloadedStrings - , PartialTypeSignatures - , PatternSynonyms - , QuasiQuotes - , Rank2Types - , RankNTypes - , RecordWildCards - , ScopedTypeVariables - , StandaloneDeriving - , TemplateHaskell - , TupleSections - , TypeApplications - , TypeFamilies - , TypeOperators - , UnboxedTuples - , UnicodeSyntax - , ViewPatterns - diff --git a/pkg/hs/proto/.gitignore b/pkg/hs/proto/.gitignore deleted file mode 100644 index d1287e423..000000000 --- a/pkg/hs/proto/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.stack-work/ -proto.cabal -*~ \ No newline at end of file diff --git a/pkg/hs/proto/LICENSE b/pkg/hs/proto/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/proto/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/proto/app/Main.hs b/pkg/hs/proto/app/Main.hs deleted file mode 100644 index 4ac595db0..000000000 --- a/pkg/hs/proto/app/Main.hs +++ /dev/null @@ -1,41 +0,0 @@ -module Main where - -import ClassyPrelude - -import Control.Lens ((&)) - -import Untyped.Parser hiding (main) -import Untyped.CST -import Untyped.Hoon -import Untyped.Core -import Nock -import SimpleNoun -import Dashboard - -import Text.Show.Pretty (pPrint) - -import qualified Prelude as P - -------------------------------------------------------------------------------- - -main :: IO () -main = (P.head <$> getArgs) >>= compileHoonTest - -compileHoonTest :: Text -> IO () -compileHoonTest ln = do - cst <- parse ln & \case - Left x -> error (unpack x) - Right x -> pure x - -- pPrint cst - hon <- pure $ hone cst - pPrint hon - exp <- pure $ desugar hon - pPrint exp - nok <- pure $ copy exp - putStrLn "==== input ====" - putStrLn ln - putStrLn "==== nock ====" - pPrint nok - putStrLn "==== output ====" - res <- runCare $ nock (A 140) nok - pPrint res diff --git a/pkg/hs/proto/lib/Dashboard.hs b/pkg/hs/proto/lib/Dashboard.hs deleted file mode 100644 index 9812eb343..000000000 --- a/pkg/hs/proto/lib/Dashboard.hs +++ /dev/null @@ -1,135 +0,0 @@ -module Dashboard - ( pattern FastAtom - , pattern FastHint - , Jet - , Dashboard (match) - , Freeboard - , Hashboard - , Fastboard - , Careboard - , runFree - , runHash - , runFast - , runCare - ) where - -import ClassyPrelude - -import Control.Monad.State.Strict - -import SimpleNoun - -type Jet = Noun -> Noun -type JetName = Atom -type Hash = Int - -pattern FastAtom = 1953718630 -- %fast -pattern FastHint id n = - C (A 11) - (C - (C (A FastAtom) (C (A 1) (A id))) - n) - --- | A context in which to run nock which supports jet lookup. -class Monad m => Dashboard m where - -- | Find the jet associated with the formula represented by the given noun, - -- if any. - match :: Noun -> m (Maybe Jet) - --- | A dashboard which doesn't jet. -newtype Freeboard a = Freeboard (Identity a) - deriving newtype Functor - deriving newtype Applicative - deriving newtype Monad - --- | A dashboard which looks for jets by formula hash -newtype Hashboard a = Hashboard (Identity a) - deriving newtype Functor - deriving newtype Applicative - deriving newtype Monad - --- | A dashboard which checks the head of formulas for "fast --- hints" and uses the name contained in such a hint to look for jets. -newtype Fastboard a = Fastboard (Identity a) - deriving newtype Functor - deriving newtype Applicative - deriving newtype Monad - --- | A dashboard which uses both lookup strategies, checking for consistency --- between them and that each fast hint is applied to a unique formula. --- Violations of these principles are written to standard out. -newtype Careboard a = Careboard (StateT (HashMap JetName Noun) IO a) - deriving newtype Functor - deriving newtype Applicative - deriving newtype Monad - -runFree :: Freeboard a -> a -runFree (Freeboard x) = runIdentity x - -runHash :: Hashboard a -> a -runHash (Hashboard x) = runIdentity x - -runFast :: Fastboard a -> a -runFast (Fastboard x) = runIdentity x - -runCare :: Careboard a -> IO a -runCare (Careboard x) = evalStateT x mempty - -instance Dashboard Freeboard where - match _ = Freeboard $ pure Nothing - -instance Dashboard Hashboard where - match = Hashboard . pure . byHash . hash - -instance Dashboard Fastboard where - match = Fastboard . \case - FastHint id n -> pure (byFast id) - _ -> pure Nothing - --- TODO maybe also detect hash collisions -instance Dashboard Careboard where - match = Careboard . \case - n@(FastHint nm _) -> case namely nm of - Just (h, j) -> do - when (h /= hash n) $ - putStrLn ("careboard: jet " <> tshowA nm <> " should have its hash " - <> "updated from " <> tshow h <> " to " <> tshow (hash n)) - get <&> lookup nm >>= \case - Just n' -> - when (n' /= n) $ - putStrLn ("careboard: jet hint " <> tshowA nm <> " has been " - <> "detected on unequal formulae " <> tshow n - <> " and " <> tshow n' <> ", which is very bad") - Nothing -> modify' (insertMap nm n) - pure (Just j) - Nothing -> do - putStrLn ("careboard: unmatched fast hint: " ++ tshowA nm) - pure $ byHash $ hash n - n -> pure $ byHash $ hash n - -byFast :: JetName -> Maybe Jet -byFast = flip lookup fast - where - fast :: HashMap JetName Jet - fast = mapFromList $ map (\(n, _, j) -> (n, j)) jets - -byHash :: Hash -> Maybe Jet -byHash = flip lookup hash - where - hash :: HashMap Hash Jet - hash = mapFromList $ map (\(_, h, j) -> (h, j)) jets - -namely :: JetName -> Maybe (Hash, Jet) -namely = flip lookup fash - where - fash :: HashMap JetName (Hash, Jet) - fash = mapFromList $ map (\(n, h, j) -> (n, (h, j))) jets - -tx = textToAtom - -type Entry = (JetName, Hash, Jet) --- | Your jets here -jets :: [Entry] -jets = - [ (tx "dec", 1520491622440108403, \(A a) -> trace "jetting" $ A (a - 1)) - ] diff --git a/pkg/hs/proto/lib/Deppy/Core.hs b/pkg/hs/proto/lib/Deppy/Core.hs deleted file mode 100644 index 93a2b3260..000000000 --- a/pkg/hs/proto/lib/Deppy/Core.hs +++ /dev/null @@ -1,302 +0,0 @@ -module Deppy.Core where - -import ClassyPrelude - -import Bound -import Data.Deriving (deriveEq1, deriveOrd1, deriveRead1, deriveShow1) -import Data.Maybe (fromJust) -import Data.Set (isSubsetOf) -import qualified Data.Set as Set -import Numeric.Natural - -type Typ = Exp - -data Exp a - = Var a - -- types - | Typ - | Fun (Abs a) - | Cel (Abs a) - | Wut (Set Tag) - -- introduction forms - | Lam (Abs a) - | Cns (Exp a) (Exp a) - | Tag Tag - -- elimination forms - | App (Exp a) (Exp a) - | Hed (Exp a) - | Tal (Exp a) - | Cas (Typ a) (Exp a) (Map Tag (Exp a)) - -- recursion, flow control - | Let (Exp a) (Scope () Exp a) - | Rec (Abs a) - deriving (Functor, Foldable, Traversable) - -type Tag = Natural - -data Abs a = Abs - { spec :: Typ a - , body :: Scope () Exp a - } - deriving (Functor, Foldable, Traversable) - -deriveEq1 ''Abs -deriveOrd1 ''Abs -deriveRead1 ''Abs -deriveShow1 ''Abs ---makeBound ''Abs - -deriveEq1 ''Exp -deriveOrd1 ''Exp -deriveRead1 ''Exp -deriveShow1 ''Exp ---makeBound ''Exp - -deriving instance Eq a => Eq (Abs a) -deriving instance Ord a => Ord (Abs a) -deriving instance Read a => Read (Abs a) -deriving instance Show a => Show (Abs a) - -deriving instance Eq a => Eq (Exp a) -deriving instance Ord a => Ord (Exp a) -deriving instance Read a => Read (Exp a) -deriving instance Show a => Show (Exp a) - -instance Applicative Exp where - pure = Var - (<*>) = ap - -instance Monad Exp where - return = Var - Var a >>= f = f a - Typ >>= _ = Typ - Fun a >>= f = Fun (bindAbs a f) - Cel a >>= f = Cel (bindAbs a f) - Wut ls >>= _ = Wut ls - Lam a >>= f = Lam (bindAbs a f) - Cns x y >>= f = Cns (x >>= f) (y >>= f) - Tag l >>= _ = Tag l - App x y >>= f = App (x >>= f) (y >>= f) - Hed x >>= f = Hed (x >>= f) - Tal x >>= f = Tal (x >>= f) - Cas t x cs >>= f = Cas (t >>= f) (x >>= f) (cs <&> (>>= f)) - Let a b >>= f = Let (a >>= f) (b >>>= f) - Rec a >>= f = Rec (bindAbs a f) - -bindAbs :: Abs a -> (a -> Exp b) -> Abs b -bindAbs (Abs s b) f = Abs (s >>= f) (b >>>= f) - -lam :: Eq a => a -> Typ a -> Exp a -> Exp a -lam v t e = Lam (Abs t (abstract1 v e)) - -fun :: Eq a => a -> Typ a -> Typ a -> Typ a -fun v t u = Fun (Abs t (abstract1 v u)) - -fun_ :: Typ a -> Typ a -> Typ a -fun_ t u = Fun (Abs t (abstract (const Nothing) u)) - -cel :: Eq a => a -> Typ a -> Typ a -> Typ a -cel v t u = Cel (Abs t (abstract1 v u)) - -cel_ :: Typ a -> Typ a -> Typ a -cel_ t u = Cel (Abs t (abstract (const Nothing) u)) - -rec :: Eq a => a -> Typ a -> Exp a -> Exp a -rec v t e = Rec (Abs t (abstract1 v e)) - -ledt :: Eq a => a -> Exp a -> Exp a -> Exp a -ledt v e e' = Let e (abstract1 v e') - -wut = Wut . setFromList - -cas t e cs = Cas t e (mapFromList cs) - -infixl 9 @: -(@:) = App - --- | typing environment -type Env a = a -> Typ a - -extend :: (b -> Typ a) -> Env a -> Env (Var b a) -extend handleNewBindings oldEnv = \case - -- TODO can we use Scope to decrease the cost of this? - B v -> F <$> handleNewBindings v - F v -> F <$> oldEnv v - -extend1 :: Typ a -> Env a -> Env (Var () a) -extend1 t = extend \() -> t - --- | amber rule assumptions -type Asm a = Set (Typ a, Typ a) - -extendAsm :: (Ord a, Ord b) => Asm a -> Asm (Var b a) -extendAsm = Set.map \(t, u) -> (F <$> t, F <$> u) - --- | Remove types that mention variables that are no longer in scope -retractAsm :: (Ord a, Ord b) => Asm (Var b a) -> Asm a -retractAsm = foldMap wither - where - wither = \case - (cleanTyp -> Just t, cleanTyp -> Just u) -> singleton (t, u) - _ -> mempty - cleanTyp = traverse \case - F v -> pure v - B _ -> Nothing - -type Typing = Maybe - --- TODO --- - better errors --- - state monad for Asm (how to handle polymorphic recursion?) -nest :: (Show a, Ord a) => Env a -> Typ a -> Typ a -> Typing () -nest env = fmap void . go env mempty - where - go :: (Show a, Ord a) => Env a -> Asm a -> Typ a -> Typ a -> Typing (Asm a) - -- FIXME use a better more aggro normal form - go env asm0 (whnf -> t0) (whnf -> u0) = - if t0 == u0 || member (t0, u0) asm0 - then pure asm0 - else let asm = Set.insert (t0, u0) asm0 in - case (t0, u0) of - (Typ, Typ) -> pure asm - -- FIXME yeah actually I think this is wrong - -- we're comaring the type of a type variable with - -- (Var v, u) -> go env asm (env v) u - -- (t, Var v) -> go env asm t (env v) - -- following Cardelli 80something, we check the RHSs assuming - -- the putatively *lesser* of the LHSs for both - (Fun (Abs a b), Fun (Abs a' b')) -> do - asm' <- go env asm a' a - retractAsm <$> - go (extend1 a' env) (extendAsm asm') (fromScope b) (fromScope b') - (Cel (Abs a b), Cel (Abs a' b')) -> do - asm' <- go env asm a a' - retractAsm <$> - go (extend1 a env) (extendAsm asm') (fromScope b) (fromScope b') - (Wut ls, Wut ls') -> do - guard (ls `isSubsetOf` ls') - pure asm - -- TODO put into Typing errors - (Lam{}, _) -> error "nest: lambda" - (_, Lam{}) -> error "nest: lambda" - (Cns{}, _) -> error "nest: cons" - (_, Cns{}) -> error "nest: cons" - (Tag{}, _) -> error "nest: tag" - (_, Tag{}) -> error "nest: tag" - -- Special rule for the Cas eliminator to enable sums and products - (Cas _ e cs, Cas _ e' cs') -> do - guard (whnf e == whnf e') - Wut s <- infer env e - -- TODO I should thread changing asm through the traversal - -- but I can't be bothered right now. Perf regression. - asm <$ traverse_ chk (setToList s) - where - chk tag = case (lookup tag cs, lookup tag cs') of - (Just t, Just u) -> go env asm t u - _ -> error "the Spanish inquisition" - (Cas _ e cs, u) -> do - Wut s <- infer env e - -- TODO thread asms - asm <$ traverse_ - (\tag -> go env asm (fromJust $ lookup tag cs) u) - s - (t, Cas _ e cs) -> do - Wut s <- infer env e - -- TODO thread asms - asm <$ traverse_ - (\tag -> go env asm t (fromJust $ lookup tag cs)) - s - (t@Cas{}, u) -> go env asm (whnf t) u - (t, u@Cas{}) -> go env asm t (whnf u) - (t@(Rec (Abs _ b)), u) -> go env asm (instantiate1 t b) u - (t, u@(Rec (Abs _ b))) -> go env asm t (instantiate1 u b) - _ -> Nothing - -check :: (Show a, Ord a) => Env a -> Exp a -> Typ a -> Typing () -check env e t = do - t' <- infer env e - nest env t' t - -infer :: forall a. (Show a, Ord a) => Env a -> Exp a -> Typing (Typ a) -infer env = \case - Var v -> pure $ env v - Typ -> pure Typ - Fun (Abs t b) -> do - Typ <- infer env t - Typ <- infer (extend1 t env) (fromScope b) - pure Typ - Cel (Abs t b) -> do - Typ <- infer env t - Typ <- infer (extend1 t env) (fromScope b) - pure Typ - Wut _ -> pure Typ - Lam (Abs t b) -> do - -- TODO do I need (whnf -> Typ)? (and elsewhere) - Typ <- infer env t - (toScope -> t') <- infer (extend1 t env) (fromScope b) - pure $ Fun (Abs t t') - Cns x y -> do - -- Infer non-dependent pairs; if you want dependency, you must annotate - t <- infer env x - u <- infer env y - pure $ Cel (Abs t (abstract (const Nothing) u)) - Tag t -> pure $ Wut (singleton t) - App x y -> do - Fun (Abs t b) <- infer env x - check env y t - pure $ whnf (instantiate1 y b) - Hed x -> do - Cel (Abs t _) <- infer env x - pure t - Tal x -> do - Cel (Abs _ u) <- infer env x - pure $ instantiate1 (whnf $ Hed $ x) u - Cas t x cs -> do - Typ <- infer env t - Wut ts <- infer env x - -- pretty restrictive - do we want? - guard (ts == keysSet cs) - traverse_ (\e -> check env e t) cs - pure t - -- Let e b -> do - -- -- TODO is below faster, or infer env (instantiate1 e b)? - -- t <- infer env e - -- instantiate1 e $ infer (extend1 t env) (fromScope b) - Rec (Abs t b) -> do - Typ <- infer env t - -- todo can F <$> be made faster? - check (extend1 t env) (fromScope b) (F <$> t) - pure t - -whnf :: (Show a, Eq a) => Exp a -> Exp a -whnf = \case - App (whnf -> Lam (Abs _ b)) x -> whnf $ instantiate1 x b - Hed (whnf -> Cns x _) -> whnf x - Tal (whnf -> Cns _ y) -> whnf y - Cas _ (whnf -> Tag t) cs -> whnf $ fromJust $ lookup t cs - e@(Rec (Abs _ b)) -> whnf $ instantiate1 e b - e -> trace "sadface" e -{- - = Var a - -- types - | Typ - | Fun (Abs a) - | Cel (Abs a) - | Wut (Set Tag) - -- introduction forms - | Lam (Abs a) - | Cns (Exp a) (Exp a) - | Tag Tag - -- elimination forms - | App (Exp a) (Exp a) - | Hed (Exp a) - | Tal (Exp a) - | Cas (Typ a) (Exp a) (Map Tag (Exp a)) - -- recursion - | Rec (Abs a) --} - -nf :: (Show a, Eq a) => Exp a -> Exp a -nf = traceShowId . \case - Typ -> Typ - _ -> undefined diff --git a/pkg/hs/proto/lib/Nock.hs b/pkg/hs/proto/lib/Nock.hs deleted file mode 100644 index 85190f3fc..000000000 --- a/pkg/hs/proto/lib/Nock.hs +++ /dev/null @@ -1,114 +0,0 @@ -module Nock where - -import ClassyPrelude - -import Dashboard -import SimpleNoun - -data Nock - = NC Nock Nock -- ^ ^: autocons - | N0 Axis -- ^ 0, axis: tree addressing - | N1 Noun -- ^ 1, const - | N2 Nock Nock -- ^ 2, compose: compute subject, formula; apply - | N3 Nock -- ^ 3, is cell - | N4 Nock -- ^ 4, succ - | N5 Nock Nock -- ^ 5, eq - | N6 Nock Nock Nock -- ^ 6, if - | N7 Nock Nock -- ^ 7, then: => - | N8 Nock Nock -- ^ 8, push: =+ - | N9 Axis Nock -- ^ 9, invoke - | N10 (Axis, Nock) Nock -- ^ 10, edit - | N11 Hint Nock -- ^ 11, hint - | N12 Nock Nock -- ^ 12, scry - deriving (Eq, Ord, Read, Generic) - -data Hint - = Tag Atom - | Assoc Atom Nock - deriving (Eq, Ord, Read, Show, Generic) - -instance Hashable Nock -instance Hashable Hint - -instance Show Nock where - show = show . nockToNoun - -nockToNoun :: Nock -> Noun -nockToNoun = go - where - go = \case - NC f g -> C (go f) (go g) - N0 a -> C (A 0) (A a) - N1 n -> C (A 1) n - N2 f g -> C (A 2) (C (go f) (go g)) - N3 f -> C (A 3) (go f) - N4 f -> C (A 4) (go f) - N5 f g -> C (A 5) (C (go f) (go g)) - N6 f g h -> C (A 6) (C (go f) (C (go g) (go h))) - N7 f g -> C (A 7) (C (go f) (go g)) - N8 f g -> C (A 8) (C (go f) (go g)) - N9 a f -> C (A 9) (C (A a) (go f)) - N10 (a, f) g -> C (A 10) (C (C (A a) (go f)) (go g)) - N11 (Tag a) f -> C (A 11) (C (A a) (go f)) - N11 (Assoc a f) g -> C (A 11) (C (C (A a) (go f)) (go g)) - N12 f g -> C (A 12) (C (go f) (go g)) - -nounToNock :: Noun -> Nock -nounToNock = go - where - go = \case - A{} -> error "nounToNock: atom" - C n@C{} m -> NC (go n) (go m) - C (A op) n -> case op of - 0 | (A a) <- n -> N0 a - 1 -> N1 n - 2 | (C m o) <- n -> N2 (go m) (go o) - 3 -> N3 (go n) - 4 -> N4 (go n) - 5 | (C m o) <- n -> N5 (go m) (go o) - 6 | (C m (C o p)) <- n -> N6 (go m) (go o) (go p) - 7 | (C m o) <- n -> N7 (go m) (go o) - 8 | (C m o) <- n -> N8 (go m) (go o) - 9 | (C (A a) m) <- n -> N9 a (go m) - 10 | (C (C (A a) m) o) <- n -> N10 (a, (go m)) (go o) - 11 | (C (C (A a) m) o) <- n -> N11 (Assoc a (go m)) (go o) - | (C (A a) m) <- n -> N11 (Tag a) (go m) - 12 | (C m o) <- n -> N12 (go m) (go o) - _ -> error ("nockToNoun: invalid " <> show op <> " " <> show n) - --- | Nock interpreter -nock :: (Dashboard d) => Noun -> Nock -> d Noun -nock n = \case - NC f g -> C <$> nock n f <*> nock n g - N0 a -> pure $ axis a n - N1 n' -> pure n' - N2 sf ff -> do - s <- nock n sf - f <- nock n ff - match f >>= \case - Just jet -> pure (jet s) - Nothing -> nock s (nounToNock f) - N3 f -> nock n f <&> \case - C{} -> yes - A{} -> no - N4 f -> nock n f <&> \case - C{} -> error "nock: cannot increment cell" - A a -> A (a + 1) - N5 f g -> loob <$> ((==) <$> nock n f <*> nock n g) - N6 f g h -> nock n f >>= \case - (A 0) -> nock n g - (A 1) -> nock n h - _ -> error "nock: invalid test value" - N7 f g -> do - n' <- nock n f - nock n' g - N8 f g -> do - n' <- nock n f - nock (C n' n) g - N9 a f -> do - c <- nock n f - nock c (nounToNock (axis a c)) - N10 (a, f) g -> edit a <$> nock n f <*> nock n g - N11 _ f -> nock n f - N12{} -> error "nock: scrying is not allowed" - diff --git a/pkg/hs/proto/lib/SimpleNoun.hs b/pkg/hs/proto/lib/SimpleNoun.hs deleted file mode 100644 index 1c6294a45..000000000 --- a/pkg/hs/proto/lib/SimpleNoun.hs +++ /dev/null @@ -1,123 +0,0 @@ -module SimpleNoun where - -import ClassyPrelude -import Numeric.Natural - -import qualified Urbit.Noun as N - -type Atom = Natural - -type Noun = Tree Atom -data Tree a - = A !a - | C !(Tree a) !(Tree a) - deriving (Eq, Ord, Read, Functor, Generic) - -instance Hashable a => Hashable (Tree a) - -data Fern a - = FernA !a - | FernF [Fern a] - -toFern :: Tree a -> Fern a -toFern = \case - A a -> FernA a - C h t -> case toFern t of - a@FernA{} -> FernF [toFern h, a] - FernF fs -> FernF (toFern h : fs) - -instance Show a => Show (Fern a) where - show = \case - FernA a -> show a - FernF xs -> "[" <> intercalate " " (map show xs) <> "]" - -instance Show a => Show (Tree a) where - show = show . toFern - -yes, no :: Noun -yes = A 0 -no = A 1 - -loob :: Bool -> Noun -loob = \case - True -> yes - False -> no - -textToAtom :: Text -> Atom -textToAtom t = case N.textToUtf8Atom t of - N.A a -> a - N.C _ _ -> error "textToAtom: nani!?" - -showA :: Atom -> String -showA a = show (N.A a) - -tshowA :: Atom -> Text -tshowA = pack . showA - --- | Tree address -type Axis = Atom - -data Dir = L | R - deriving (Eq, Ord, Enum, Read, Show) -type Path = [Dir] - --- some stuff from hoon.hoon - -cap :: Axis -> Dir -cap = \case - 2 -> L - 3 -> R - a | a <= 1 -> error "cap: bad axis" - | otherwise -> cap (div a 2) - -mas :: Axis -> Axis -mas = \case - 2 -> 1 - 3 -> 1 - a | a <= 1 -> error "mas: bad axis" - | otherwise -> (mod a 2) + 2 * mas (div a 2) - -capMas :: Axis -> (Dir, Axis) -capMas = \case - 2 -> (L, 1) - 3 -> (R, 1) - a | a <= 1 -> error "capMas: bad axis" - | otherwise -> (d, (mod a 2) + 2 * r) - where - (d, r) = capMas (div a 2) - -peg :: Axis -> Axis -> Axis -peg a = \case - 1 -> a - 2 -> a * 2 - 3 -> a * 2 + 1 - b -> (mod b 2) + 2 * peg a (div b 2) - -axis :: Axis -> Tree a -> Tree a -axis 1 n = n -axis (capMas -> (d, r)) (C n m) = case d of - L -> axis r n - R -> axis r m -axis a _ = error ("bad axis: " ++ show a) - -edit :: Axis -> Tree a -> Tree a -> Tree a -edit 1 v n = v -edit (capMas -> (d, r)) v (C n m) = case d of - L -> C (edit r v n) m - R -> C n (edit r v m) -edit a _ _ = error ("bad edit: " ++ show a) - --- Write an axis as a binary number; e.g. 5 as 101. --- The rule is: after droping the 1 in the msb, you read from left to right. --- 0 becomes L and 1 becomes R. So 5 becomes [L,R] -toPath :: Axis -> Path -toPath = \case - 1 -> [] - (capMas -> (d, r)) -> d : toPath r - -toAxis :: Path -> Axis -toAxis = foldl' step 1 - where - step r = \case - L -> 2 * r - R -> 2 * r + 1 diff --git a/pkg/hs/proto/lib/Untyped/CST.hs b/pkg/hs/proto/lib/Untyped/CST.hs deleted file mode 100644 index 5ac2a37ec..000000000 --- a/pkg/hs/proto/lib/Untyped/CST.hs +++ /dev/null @@ -1,54 +0,0 @@ -module Untyped.CST where - -import ClassyPrelude -import Prelude (foldr1) - -import SimpleNoun -import qualified Untyped.Hoon as H -import Untyped.Parser -- remove after we've moved the CST type - -hone :: CST -> H.Hoon Sym -hone = go - where - go = \case - WutCol c d e -> H.WutCol (go c) (go d) (go e) - WutPat c d e -> H.WutPat (go c) (go d) (go e) - WutKet c d e -> H.WutKet (go c) (go d) (go e) - WutPam cs -> foldr H.WutPam (H.HAtom 0) $ map go cs - WutBar cs -> foldr H.WutBar (H.HAtom 1) $ map go cs - WutHep c pcs -> H.WutHep (go c) (map tr pcs) - TisFas s c d -> H.TisFas s (go c) (go d) - ColHep c d -> H.HCons (go c) (go d) - ColLus{} -> error "hone: offensive rune :+ -- use :*" - ColKet{} -> error "hone: offensive rune :^ -- use :*" - ColTar [] -> error "hone: empty :*" - ColTar cs -> foldr1 H.HCons $ map go cs - ColSig cs -> foldr H.HCons (H.HAtom 0) $ map go cs - BarTis s c -> H.BarTis s (go c) - BarHep r v i c -> H.BarHep r v (go i) (go c) - BarCen pcs -> H.BarCen (map tr pcs) - CenHep c d -> H.CenHep (go c) (go d) - CenDot c d -> H.CenDot (go c) (go d) - DotDot s c -> H.DotDot s (go c) - SigFas (go -> H.HAtom a) c -> H.SigFas a (go c) - SigFas{} -> error "hone: invalid ~/ tag" - ZapZap -> H.ZapZap - Tupl cs -> go (ColTar cs) - Var s -> H.HVar s - Atom a -> H.HAtom a - Tag tx -> H.HAtom (textToAtom tx) - Cord tx -> H.HAtom (textToAtom tx) - Tape tx -> error "hone: tapes not implemented" - Incr c -> H.DotLus (go c) - IncrIrr c -> H.DotLus (go c) - AppIrr c d -> H.CenHep (go c) (go d) - IsEq c d -> H.DotTis (go c) (go d) - IsEqIrr c d -> H.DotTis (go c) (go d) - Pam -> H.HAtom 0 - Bar -> H.HAtom 1 - Yes -> H.HAtom 0 - No -> H.HAtom 1 - Sig -> H.HAtom 0 - - tr (PatTar, c) = (H.Wild, go c) - tr (PatTag s, c) = (H.Exact (A $ textToAtom s), go c) diff --git a/pkg/hs/proto/lib/Untyped/Core.hs b/pkg/hs/proto/lib/Untyped/Core.hs deleted file mode 100644 index e70dcebb7..000000000 --- a/pkg/hs/proto/lib/Untyped/Core.hs +++ /dev/null @@ -1,227 +0,0 @@ -module Untyped.Core where - -import ClassyPrelude - -import Bound -import Control.Monad.Writer hiding (fix) -import Data.Deriving (deriveEq1, deriveOrd1, deriveRead1, deriveShow1) -import Data.Maybe (fromJust) -import qualified Data.Set as Set - -import Dashboard (pattern FastAtom) -import Nock -import SimpleNoun - -type Nat = Int - -data Exp a - = Var a - | App (Exp a) (Exp a) - | Lam (Scope () Exp a) - | Atm Atom - | Cel (Exp a) (Exp a) - | IsC (Exp a) - | Suc (Exp a) - | Eql (Exp a) (Exp a) - | Ift (Exp a) (Exp a) (Exp a) - | Let (Exp a) (Scope () Exp a) - | Jet Atom (Exp a) - | Fix (Scope () Exp a) - | Zap - deriving (Functor, Foldable, Traversable) - -deriveEq1 ''Exp -deriveOrd1 ''Exp -deriveRead1 ''Exp -deriveShow1 ''Exp -makeBound ''Exp - -deriving instance Eq a => Eq (Exp a) -deriving instance Ord a => Ord (Exp a) -deriving instance Read a => Read (Exp a) -deriving instance Show a => Show (Exp a) - -lam :: Eq a => a -> Exp a -> Exp a -lam v e = Lam (abstract1 v e) - -ledt :: Eq a => a -> Exp a -> Exp a -> Exp a -ledt v e f = Let e (abstract1 v f) - -fix :: Eq a => a -> Exp a -> Exp a -fix v e = Fix (abstract1 v e) - --- | The expression that returns the given noun as a constant. -con :: Noun -> Exp a -con = \case - A a -> Atm a - C n m -> Cel (con n) (con m) - -data CExp a - = CVar a - | CSef a - | CApp (CExp a) (CExp a) - | CLam [a] (CExp (Var () Int)) - | CAtm Atom - | CCel (CExp a) (CExp a) - | CIsC (CExp a) - | CSuc (CExp a) - | CEql (CExp a) (CExp a) - | CIft (CExp a) (CExp a) (CExp a) - | CLet (CExp a) (CExp (Var () a)) - | CJet Atom (CExp a) - | CFix [a] (CExp (Var () Int)) - | CZap - deriving (Functor, Foldable, Traversable) - -deriveEq1 ''CExp -deriveOrd1 ''CExp -deriveRead1 ''CExp -deriveShow1 ''CExp - -deriving instance Eq a => Eq (CExp a) -deriving instance Ord a => Ord (CExp a) -deriving instance Read a => Read (CExp a) -deriving instance Show a => Show (CExp a) - -data Manner a - = Direct a - | Selfish a - deriving (Functor, Foldable, Traversable) - -rude :: Manner a -> a -rude = \case - Direct x -> x - Selfish x -> x - -toCopy :: Ord a => Exp a -> CExp b -toCopy = fst . runWriter . go \v -> error "toCopy: free variable" - where - go :: Ord a => (a -> Manner c) -> Exp a -> Writer (Set a) (CExp c) - go env = \case - Var v -> do - tell (singleton v) - case env v of - Direct v' -> pure (CVar v') - Selfish v' -> pure (CSef v') - App e f -> CApp <$> go env e <*> go env f - Atm a -> pure (CAtm a) - Cel e f -> CCel <$> go env e <*> go env f - IsC e -> CIsC <$> go env e - Suc e -> CSuc <$> go env e - Eql e f -> CEql <$> go env e <*> go env f - Ift e t f -> CIft <$> go env e <*> go env t <*> go env f - Jet a e -> CJet a <$> go env e - Zap -> pure CZap - Let e s -> do - ce <- go env e - let - env' = \case - B () -> Direct (B ()) - F x -> fmap F (env x) - cf <- retcon removeBound (go env' (fromScope s)) - pure (CLet ce cf) - Fix s -> lam s env CFix Selfish - Lam s -> lam s env CLam Direct - - lam s env ctor manner = - writer - ( ctor (rude . env <$> Set.toAscList usedLexicals) ce - , usedLexicals - ) - where - (ce, usedVars) = runWriter $ go env' $ fromScope s - env' = \case - B () -> manner $ B () - F v -> env v $> F (Set.findIndex v usedLexicals) - usedLexicals = removeBound usedVars - - removeBound :: (Ord a, Ord b) => Set (Var b a) -> Set a - removeBound = mapMaybeSet \case - B _ -> Nothing - F v -> Just v - --- | Like censor, except you can change the type of the log -retcon :: (w -> uu) -> Writer w a -> Writer uu a -retcon f = mapWriter \(a, m) -> (a, f m) - --- I begin to wonder why there aren't primary abstractions around filtering. -mapMaybeSet :: (Ord a, Ord b) => (a -> Maybe b) -> Set a -> Set b -mapMaybeSet f = setFromList . mapMaybe f . toList - --- Possible improvements: --- - a "quote and unquote" framework for nock code generation (maybe) -copyToNock :: CExp a -> Nock -copyToNock = go \v -> error "copyToNock: free variable" - where - -- if you comment out this declaration, you get a type error! - go :: (a -> Path) -> CExp a -> Nock - go env = \case - CVar v -> N0 (toAxis $ env v) - CSef v -> N2 (N0 $ toAxis $ env v) (N0 $ toAxis $ env v) - CApp e f -> N2 (go env f) (go env e) - CAtm a -> N1 (A a) - CCel e f -> cell (go env e) (go env f) - CIsC e -> N3 (go env e) - CSuc e -> N4 (go env e) - CEql e f -> N5 (go env e) (go env f) - CIft e t f -> N6 (go env e) (go env t) (go env f) - CJet a e -> jet a (go env e) - CZap -> N0 0 - CLet e f -> N8 (go env e) (go env' f) - where - env' = \case - B () -> [L] - F v -> R : env v - CLam vs e -> lam (map (go env . CVar) vs) (go (lamEnv vs) e) - CFix vs e -> - N7 - (lam (map (go env . CVar) vs) (go (lamEnv vs) e)) - (N2 (N0 1) (N0 1)) - - lamEnv vs = if null vs - then \case - B () -> [] - F _ -> error "copyToNock: unexpected lexical" - else \case - B () -> [R] - F i -> L : posIn i (length vs) - - jet a ef = - NC - (N1 (A 11)) - (NC - (N1 - (C (A FastAtom) - (C (A 1) (A a)))) - ef) - lam vfs ef = case layOut vfs of - Nothing -> N1 (nockToNoun ef) - Just pr -> NC (N1 (A 8)) $ NC (NC (N1 (A 1)) pr) $ N1 (nockToNoun ef) - -cell :: Nock -> Nock -> Nock -cell (N1 n) (N1 m) = N1 (C n m) -cell ef ff = NC ef ff - -layOut :: [Nock] -> Maybe Nock -layOut = \case - [] -> Nothing - [x] -> Just x - xs -> Just $ NC (fromJust $ layOut l) (fromJust $ layOut r) - where - (l, r) = splitAt (length xs `div` 2) xs - -posIn :: Int -> Int -> Path -posIn 0 1 = [] -posIn i n - | i < 0 || n <= i = error ("posIn: " <> show i <> " out of bound " <> show n) - | i < mid = L : posIn i mid - | otherwise = R : posIn (i - mid) (n - mid) - where mid = n `div` 2 - --- | The proposed new calling convention -copy :: Ord a => Exp a -> Nock -copy = copyToNock . toCopy - --- | Decrements its argument. -decrement :: Exp String -decrement = lam "a" $ App (fix "f" $ lam "b" $ Ift (Eql (Var "a") (Suc (Var "b"))) (Var "b") (App (Var "f") (Suc (Var "b")))) (Atm 0) diff --git a/pkg/hs/proto/lib/Untyped/Hoon.hs b/pkg/hs/proto/lib/Untyped/Hoon.hs deleted file mode 100644 index 89254a461..000000000 --- a/pkg/hs/proto/lib/Untyped/Hoon.hs +++ /dev/null @@ -1,77 +0,0 @@ -module Untyped.Hoon where - -import ClassyPrelude - -import Bound -import Bound.Name - -import SimpleNoun -import Untyped.Core - -data Hoon a - = HVar a - | HAtom Atom - | HCons (Hoon a) (Hoon a) - | BarCen (Cases a) - | BarHep a a (Hoon a) (Hoon a) - | BarTis a (Hoon a) - | CenDot (Hoon a) (Hoon a) - | CenHep (Hoon a) (Hoon a) --- | CenKet (Hoon a) (Hoon a) (Hoon a) --- | CenTar [Hoon a] - | TisFas a (Hoon a) (Hoon a) - | DotDot a (Hoon a) - | DotLus (Hoon a) - | DotTis (Hoon a) (Hoon a) - | SigFas Atom (Hoon a) - | WutBar (Hoon a) (Hoon a) - | WutCol (Hoon a) (Hoon a) (Hoon a) - | WutHep (Hoon a) (Cases a) - | WutKet (Hoon a) (Hoon a) (Hoon a) - | WutPam (Hoon a) (Hoon a) - | WutPat (Hoon a) (Hoon a) (Hoon a) - | ZapZap - deriving (Functor) - -deriving instance Show a => Show (Hoon a) - -type Cases a = [(Pat, Hoon a)] - -data Pat - = Exact Noun - | Wild - deriving (Show) - -desugar :: Eq a => Hoon a -> Exp a -desugar = go - where - go = \case - HVar v -> Var v - HAtom a -> Atm a - HCons h j -> Cel (go h) (go j) - BarCen cs -> Lam $ Scope $ branch (Var . F . go) (Var (B ())) cs - BarHep r s i h -> go $ CenDot i $ DotDot r $ BarTis s $ h - BarTis v h -> lam v (go h) - CenDot h j -> App (go j) (go h) - CenHep h j -> App (go h) (go j) - TisFas v h j -> ledt v (go h) (go j) - DotDot v h -> fix v (go h) - DotLus h -> Suc (go h) - DotTis h j -> Eql (go h) (go j) - SigFas a h -> Jet a (go h) - WutBar h j -> Ift (go h) (Atm 0) (go j) - WutCol h j k -> Ift (go h) (go j) (go k) - -- or branch go (go h) cs - WutHep h cs -> Let (go h) $ Scope $ branch (Var . F . go) (Var (B ())) cs - WutKet h j k -> Ift (IsC (go h)) (go j) (go k) - WutPam h j -> Ift (go h) (go j) (Atm 1) - WutPat h j k -> go $ WutKet h k j - ZapZap -> Zap - -branch :: (Hoon b -> Exp a) -> Exp a -> Cases b -> Exp a -branch go e = foldr f Zap - where - f c acc = case c of - (Exact n, h) -> Ift (Eql e (con n)) (go h) acc - (Wild, h) -> go h - diff --git a/pkg/hs/proto/lib/Untyped/Parser.hs b/pkg/hs/proto/lib/Untyped/Parser.hs deleted file mode 100644 index d012d0a6f..000000000 --- a/pkg/hs/proto/lib/Untyped/Parser.hs +++ /dev/null @@ -1,341 +0,0 @@ -module Untyped.Parser where - -import ClassyPrelude hiding (head, many, some, try) -import Control.Lens -import GHC.Natural - -import Text.Megaparsec -import Text.Megaparsec.Char -import Control.Monad.State.Lazy - -import Data.List.NonEmpty (NonEmpty(..)) -import Data.Void (Void) -import Prelude (head) - -import qualified Prelude - - --- Types ----------------------------------------------------------------------- - -type Nat = Natural -type Sym = Text - - --- CST ------------------------------------------------------------------------- - -data Pat - = PatTar - | PatTag Sym - deriving (Eq, Ord, Show) - -data CST - = WutCol CST CST CST -- ?:(c t f) - | WutPat CST CST CST -- ?@(c t f) - | WutKet CST CST CST -- ?^(c t f) - | WutPam [CST] -- ?&(c cs ...) - | WutBar [CST] -- ?|(c cs ...) - | WutHep CST [(Pat, CST)] -- ?-(c p e ps es ...) - | TisFas Sym CST CST -- =/(x 3 x) - | ColHep CST CST -- :-(a b) - | ColLus CST CST CST -- :+(a b c) - | ColKet CST CST CST CST -- :^(a b c d) - | ColTar [CST] -- :*(a as ...) - | ColSig [CST] -- :~(a as ...) - | BarTis Sym CST -- |=(s h) - | BarHep Sym Sym CST CST -- |-(rec var init body) - | BarCen [(Pat, CST)] -- |% %a 3 == - | CenHep CST CST -- %- f x - | CenDot CST CST -- %. x f - | DotDot Sym CST -- .. $ f - | SigFas CST CST - | ZapZap -- !! - | Tupl [CST] -- [a b ...] - | Var Sym -- a - | Atom Nat -- 3 - | Tag Text -- %asdf - | Cord Text -- 'cord' - | Tape Text -- "tape" - | Incr CST -- .+(3) - | IncrIrr CST -- +(3) - | AppIrr CST CST -- (x y) - | IsEq CST CST -- .=(3 4) - | IsEqIrr CST CST -- =(3 4) - | Pam -- & - | Bar -- | - | Yes -- %.y - | No -- %.n - | Sig -- ~ - deriving (Eq, Ord, Show) - --- Parser Monad ---------------------------------------------------------------- - -data Mode = Wide | Tall - deriving (Eq, Ord, Show) - -type Parser = StateT Mode (Parsec Void Text) - -withLocalState :: Monad m => s -> StateT s m a -> StateT s m a -withLocalState val x = do { old <- get; put val; x <* put old } - -inWideMode :: Parser a -> Parser a -inWideMode = withLocalState Wide - -ace, pal, par :: Parser () -ace = void (char ' ') -pal = void (char '(') -par = void (char ')') - --- Simple Lexers --------------------------------------------------------------- - -gap :: Parser () -gap = choice [ char ' ' >> void (some spaceChar) - , newline >> void (many spaceChar) - ] - -whitespace :: Parser () -whitespace = ace <|> void gap - - --- Literals -------------------------------------------------------------------- - -alpha :: Parser Char -alpha = oneOf (['a'..'z'] ++ ['A'..'Z']) - -sym :: Parser Sym -sym = bucSym <|> pack <$> some alpha - where bucSym = char '$' *> pure "" - -atom :: Parser Nat -atom = do - init <- some digitChar - rest <- many (char '.' *> some digitChar) - guard True -- TODO Validate '.'s - pure (Prelude.read $ concat $ init:rest) - -nat :: Parser Nat -nat = Prelude.read <$> some digitChar - -tape :: Parser Text -tape = do - between (char '"') (char '"') $ - pack <$> many (label "tape char" (anySingleBut '"')) - -cord :: Parser Text -cord = do - between (char '\'') (char '\'') $ - pack <$> many (label "cord char" (anySingleBut '\'')) - -tag :: Parser Text -tag = try (char '%' >> sym) - -literal :: Parser CST -literal = choice - [ Yes <$ string "%.y" - , No <$ string "%.n" - , Var <$> sym - , Atom <$> atom - , Pam <$ char '&' - , Bar <$ char '|' - , Sig <$ char '~' - , Tag <$> tag - , Cord <$> cord - , Tape <$> tape - ] - - --- Rune Helpers ---------------------------------------------------------------- - -{- - - If the parser is in `Wide` mode, only accept the `wide` form. - - If the parser is in `Tall` mode, either - - accept the `tall` form or: - - swich to `Wide` mode and then accept the wide form. --} -parseRune :: Parser a -> Parser a -> Parser a -parseRune tall wide = get >>= \case - Wide -> wide - Tall -> tall <|> inWideMode wide - -rune0 :: a -> Parser a -rune0 = pure - -rune1 :: (a->b) -> Parser a -> Parser b -rune1 node x = parseRune tall wide - where tall = do gap; p<-x; pure (node p) - wide = do pal; p<-x; par; pure (node p) - -rune2 :: (a->b->c) -> Parser a -> Parser b -> Parser c -rune2 node x y = parseRune tall wide - where tall = do gap; p<-x; gap; q<-y; pure (node p q) - wide = do pal; p<-x; ace; q<-y; par; pure (node p q) - -rune3 :: (a->b->c->d) -> Parser a -> Parser b -> Parser c -> Parser d -rune3 node x y z = parseRune tall wide - where tall = do gap; p<-x; gap; q<-y; gap; r<-z; pure (node p q r) - wide = do pal; p<-x; ace; q<-y; ace; r<-z; par; pure (node p q r) - -rune4 :: (a->b->c->d->e) -> Parser a -> Parser b -> Parser c -> Parser d -> Parser e -rune4 node x y z g = parseRune tall wide - where tall = do gap; p<-x; gap; q<-y; gap; r<-z; gap; s<-g; pure (node p q r s) - wide = do pal; p<-x; ace; q<-y; ace; r<-z; ace; s<-g; pure (node p q r s) - -runeN :: ([a]->b) -> Parser a -> Parser b -runeN node elem = node <$> parseRune tall wide - where tall = gap >> elems - where elems = term <|> elemAnd - elemAnd = do x <- elem; gap; xs <- elems; pure (x:xs) - term = string "==" *> pure [] - wide = pal *> option [] elems <* par - where elems = (:) <$> elem <*> many (ace >> elem) - -runeNE :: (NonEmpty a -> b) -> Parser a -> Parser b -runeNE node elem = node <$> parseRune tall wide - where tall = do - let elems = term <|> elemAnd - elemAnd = do x <- elem; gap; xs <- elems; pure (x:xs) - term = string "==" *> pure [] - fst <- gap *> elem - rst <- gap *> elems - pure (fst :| rst) - wide = mzero -- No wide form for cores - --- Irregular Syntax ------------------------------------------------------------ - -inc :: Parser CST -- +(3) -inc = do - string "+(" - h <- cst - char ')' - pure h - -equals :: Parser (CST, CST) -- =(3 4) -equals = do - string "=(" - x <- cst - ace - y <- cst - char ')' - pure (x, y) - -tuple :: forall a. Parser a -> Parser [a] -tuple p = char '[' >> elems - where - xs :: Parser [a] - xs = do { x <- p; (x:) <$> tail } - - tail :: Parser [a] - tail = (pure [] <* char ']') - <|> (ace >> elems) - - elems :: Parser [a] - elems = (pure [] <* char ']') <|> xs - -appIrr :: Parser CST -appIrr = do - char '(' - x <- cst - char ' ' - y <- cst - char ')' - pure (AppIrr x y) - -irregular :: Parser CST -irregular = - inWideMode $ - choice [ Tupl <$> tuple cst - , IncrIrr <$> inc - , uncurry IsEqIrr <$> equals - , appIrr - ] - --- Runes ----------------------------------------------------------------------- - -pat :: Parser Pat -pat = choice [ PatTag <$> tag - , char '*' $> PatTar - ] - -cases :: Parser [(Pat, CST)] -cases = do - mode <- get - guard (mode == Tall) - end <|> lop - where - goo = lop <|> end - end = string "==" $> [] - lop = do { p <- pat; gap; b <- cst; gap; ((p,b):) <$> goo } - -wutHep :: Parser CST -wutHep = do - mode <- get - guard (mode == Tall) - gap - ex <- cst - gap - cs <- cases - pure (WutHep ex cs) - -barCen :: Parser CST -barCen = do - mode <- get - guard (mode == Tall) - gap - cs <- cases - pure (BarCen cs) - -rune :: Parser CST -rune = runeSwitch [ ("|=", rune2 BarTis sym cst) - , ("|-", rune4 BarHep sym sym cst cst) - , (":-", rune2 ColHep cst cst) - , (":+", rune3 ColLus cst cst cst) - , (":^", rune4 ColKet cst cst cst cst) - , (":*", runeN ColTar cst) - , (":~", runeN ColSig cst) - , ("%-", rune2 CenHep cst cst) - , ("%.", rune2 CenDot cst cst) - , ("..", rune2 DotDot sym cst) - , ("!!", rune0 ZapZap) - , ("?:", rune3 WutCol cst cst cst) - , ("?@", rune3 WutPat cst cst cst) - , ("?&", runeN WutPam cst) - , ("?|", runeN WutBar cst) - , ("?^", rune3 WutKet cst cst cst) - , ("=/", rune3 TisFas sym cst cst) - , (".+", rune1 Incr cst) - , (".=", rune2 IsEq cst cst) - , ("?-", wutHep) - , ("|%", barCen) - , ("~/", rune2 SigFas cst cst) - ] - -runeSwitch :: [(Text, Parser a)] -> Parser a -runeSwitch = choice . fmap (\(s, p) -> string s *> p) - - --- CST Parser ------------------------------------------------------------------ - -cst :: Parser CST -cst = irregular <|> rune <|> literal - - --- Entry Point ----------------------------------------------------------------- - -hoonFile :: StateT Mode (Parsec Void Text) CST -hoonFile = do - option () whitespace - h <- cst - option () whitespace - eof - pure h - -parse :: Text -> Either Text CST -parse txt = - runParser (evalStateT hoonFile Tall) "stdin" txt & \case - Left e -> Left (pack $ errorBundlePretty e) - Right x -> pure x - -parseHoonTest :: Text -> IO () -parseHoonTest = parseTest (evalStateT hoonFile Tall) - -main :: IO () -main = (head <$> getArgs) >>= parseHoonTest diff --git a/pkg/hs/proto/lib/Untyped/ShittyCorePrinter.hs b/pkg/hs/proto/lib/Untyped/ShittyCorePrinter.hs deleted file mode 100644 index 6f2ab7346..000000000 --- a/pkg/hs/proto/lib/Untyped/ShittyCorePrinter.hs +++ /dev/null @@ -1,24 +0,0 @@ -module Untyped.ShittyCorePrinter where - --- it's pretty clowny but whatever --- TODO: handle the new cases (maybe don't do) - -import Prelude - -import Bound -import Data.Foldable - -import Untyped.Core - -prettyPrec :: [String] -> Bool -> Int -> Exp String -> ShowS -prettyPrec _ d n (Var a) = showString a -prettyPrec vs d n (App x y) = showParen d $ - prettyPrec vs False n x . showChar ' ' . prettyPrec vs True n y -prettyPrec (v:vs) d n (Lam b) = showParen d $ - showString v . showString ". " . prettyPrec vs False n (instantiate1 (Var v) b) - -prettyWith :: [String] -> Exp String -> String -prettyWith vs t = prettyPrec (filter (`notElem` toList t) vs) False 0 t "" - -pretty :: Exp String -> String -pretty = prettyWith $ [ [i] | i <- ['a'..'z']] ++ [i : show j | j <- [1 :: Int ..], i <- ['a'..'z'] ] diff --git a/pkg/hs/proto/package.yaml b/pkg/hs/proto/package.yaml deleted file mode 100644 index bb8f9e882..000000000 --- a/pkg/hs/proto/package.yaml +++ /dev/null @@ -1,92 +0,0 @@ -name: proto -version: 0.1.0 -license: MIT -license-file: LICENSE - -dependencies: - - base - - bound - - classy-prelude - - containers - - deriving-compat - - lens - - megaparsec - - mtl - - multimap - - para - - pretty-show - - text - - transformers - - transformers-compat - - unordered-containers - - urbit-noun - -default-extensions: - - ApplicativeDo - - BangPatterns - - BlockArguments - - DeriveAnyClass - - DeriveDataTypeable - - DeriveFoldable - - DeriveGeneric - - DeriveTraversable - - DerivingStrategies - - EmptyDataDecls - - FlexibleContexts - - FlexibleInstances - - FunctionalDependencies - - GADTs - - GeneralizedNewtypeDeriving - - LambdaCase - - MultiParamTypeClasses - - NamedFieldPuns - - NoImplicitPrelude - - NumericUnderscores - - OverloadedStrings - - PartialTypeSignatures - - PatternSynonyms - - QuasiQuotes - - Rank2Types - - RankNTypes - - RecordWildCards - - ScopedTypeVariables - - StandaloneDeriving - - TemplateHaskell - - TupleSections - - TypeApplications - - TypeFamilies - - UnicodeSyntax - - ViewPatterns - -library: - source-dirs: lib - ghc-options: - - -fwarn-incomplete-patterns - - -fwarn-unused-binds - - -fwarn-unused-imports - - -Wwarn - - -O2 - -executables: - proto: - main: Main.hs - source-dirs: app - dependencies: - - proto - ghc-options: - - -threaded - - -rtsopts - - -O2 - - "-with-rtsopts=-N" - - -fwarn-incomplete-patterns - -tests: - proto-test: - main: Spec.hs - source-dirs: test - dependencies: - - proto - ghc-options: - - -threaded - - -rtsopts - - -with-rtsopts=-N diff --git a/pkg/hs/proto/test/Spec.hs b/pkg/hs/proto/test/Spec.hs deleted file mode 100644 index 92f77176d..000000000 --- a/pkg/hs/proto/test/Spec.hs +++ /dev/null @@ -1,6 +0,0 @@ -module Main where - -import ClassyPrelude - -main :: IO () -main = putStrLn "Test suite not yet implemented" diff --git a/pkg/hs/racquire/.gitignore b/pkg/hs/racquire/.gitignore deleted file mode 100644 index 65e7ea818..000000000 --- a/pkg/hs/racquire/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.stack-work -*.cabal -test/gold/*.writ diff --git a/pkg/hs/racquire/LICENSE b/pkg/hs/racquire/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/racquire/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/racquire/lib/Data/RAcquire.hs b/pkg/hs/racquire/lib/Data/RAcquire.hs deleted file mode 100644 index 588db777f..000000000 --- a/pkg/hs/racquire/lib/Data/RAcquire.hs +++ /dev/null @@ -1,137 +0,0 @@ -{-| - RAcquire = ReaderT e Acquire a --} -module Data.RAcquire where -{- - ( RAcquire (..) - , Allocated (..) - , with - , mkRAcquire - , ReleaseType (..) - , mkRAcquireType - ) where --} - -import Prelude - -import qualified Control.Exception as E -import qualified Control.Monad.Catch as C () -import qualified Data.Acquire.Internal as Act - -import Control.Monad.IO.Unlift (MonadUnliftIO, withRunInIO) -import Control.Monad.Reader -import Data.Typeable (Typeable) - -import RIO (RIO, runRIO) - --------------------------------------------------------------------------------- - -data ReleaseType - = ReleaseEarly - | ReleaseNormal - | ReleaseException - deriving (Show, Read, Eq, Ord, Enum, Bounded, Typeable) - -data Allocated e a - = Allocated !a !(ReleaseType -> RIO e ()) - -newtype RAcquire e a - = RAcquire ((forall b. RIO e b -> RIO e b) -> RIO e (Allocated e a)) - deriving Typeable - --------------------------------------------------------------------------------- - -class MonadRIO m where - liftRIO :: RIO e a -> m e a - -instance MonadRIO RIO where - liftRIO = id - -class MonadAcquire m where - liftAcquire :: Act.Acquire a -> m a - --------------------------------------------------------------------------------- - -instance Functor (RAcquire e) where - fmap = liftM - -instance Applicative (RAcquire e) where - pure a = RAcquire (\_ -> return (Allocated a (const $ return ()))) - (<*>) = ap - -instance Monad (RAcquire e) where - return = pure - RAcquire f >>= g' = RAcquire $ \restore -> do - env <- ask - Allocated x free1 <- f restore - let RAcquire g = g' x - Allocated y free2 <- liftIO $ E.onException - (runRIO env $ g restore) - (runRIO env $ free1 ReleaseException) - - return $! Allocated y $ \rt -> - liftIO $ E.finally (runRIO env $ free2 rt) - (runRIO env $ free1 rt) - -instance MonadReader e (RAcquire e) where - ask = liftRIO ask - local mod (RAcquire f) = RAcquire $ \restore -> local mod (f restore) - --------------------------------------------------------------------------------- - -instance MonadRIO RAcquire where - liftRIO f = RAcquire $ \restore -> do - x <- restore f - return $! Allocated x (const $ return ()) - -instance MonadIO (RAcquire e) where - liftIO = liftRIO . liftIO - -unTransRIO :: e -> (RIO e a -> RIO e a) -> IO a -> IO a -unTransRIO env trans act = runRIO env $ trans $ liftIO act - -instance MonadAcquire (RAcquire e) where - liftAcquire (Act.Acquire f) = do - env <- liftRIO ask - RAcquire $ \restore -> do - fmap fixAllo $ liftIO $ f $ unTransRIO env restore - where - fixAllo (Act.Allocated x y) = Allocated x $ fmap liftIO (y . fixTy) - - fixTy = \case - ReleaseEarly -> Act.ReleaseEarly - ReleaseNormal -> Act.ReleaseNormal - ReleaseException -> Act.ReleaseException - --------------------------------------------------------------------------------- - -mkRAcquire :: RIO e a - -> (a -> RIO e ()) - -> RAcquire e a -mkRAcquire create free = RAcquire $ \restore -> do - x <- restore create - return $! Allocated x (const $ free x) - -mkRAcquireType - :: RIO e a -- ^ acquire the resource - -> (a -> ReleaseType -> RIO e ()) -- ^ free the resource - -> RAcquire e a -mkRAcquireType create free = RAcquire $ \restore -> do - x <- restore create - return $! Allocated x (free x) - -transRIO :: e -> (IO a -> IO a) -> RIO e a -> RIO e a -transRIO env trans act = liftIO $ trans $ runRIO env act - -rwith :: (MonadUnliftIO (m e), MonadReader e (m e)) - => RAcquire e a - -> (a -> m e b) - -> m e b -rwith (RAcquire f) g = do - env <- ask - withRunInIO $ \run -> E.mask $ \restore -> do - Allocated x free <- runRIO env $ f $ transRIO env restore - res <- E.onException (restore $ run $ g x) - (runRIO env $ free ReleaseException) - runRIO env $ free ReleaseNormal - return res diff --git a/pkg/hs/racquire/package.yaml b/pkg/hs/racquire/package.yaml deleted file mode 100644 index bbaca592c..000000000 --- a/pkg/hs/racquire/package.yaml +++ /dev/null @@ -1,67 +0,0 @@ -name: racquire -version: 0.10.4 -license: MIT -license-file: LICENSE - -library: - source-dirs: lib - ghc-options: - - -Wall - - -Werror - - -Wno-type-defaults - - -Wno-unused-matches - - -Wno-name-shadowing - - -O2 - -dependencies: - - base - - mtl - - unliftio-core - - resourcet - - exceptions - - rio - -default-extensions: - - ApplicativeDo - - BangPatterns - - BlockArguments - - ConstraintKinds - - DataKinds - - DefaultSignatures - - DeriveAnyClass - - DeriveDataTypeable - - DeriveFoldable - - DeriveGeneric - - DeriveTraversable - - DerivingStrategies - - EmptyCase - - EmptyDataDecls - - FlexibleContexts - - FlexibleInstances - - FunctionalDependencies - - GADTs - - GeneralizedNewtypeDeriving - - LambdaCase - - MagicHash - - MultiParamTypeClasses - - NamedFieldPuns - - NoImplicitPrelude - - NumericUnderscores - - OverloadedStrings - - PackageImports - - PartialTypeSignatures - - PatternSynonyms - - QuasiQuotes - - Rank2Types - - RankNTypes - - RecordWildCards - - ScopedTypeVariables - - StandaloneDeriving - - TemplateHaskell - - TupleSections - - TypeApplications - - TypeFamilies - - TypeOperators - - UnboxedTuples - - UnicodeSyntax - - ViewPatterns diff --git a/pkg/hs/stack.yaml b/pkg/hs/stack.yaml deleted file mode 100644 index f9077a35d..000000000 --- a/pkg/hs/stack.yaml +++ /dev/null @@ -1,30 +0,0 @@ -resolver: lts-16.15 - -packages: - - natpmp-static - - racquire - - terminal-progress-bar - - urbit-atom - - urbit-azimuth - - urbit-eventlog-lmdb - - urbit-king - - urbit-termsize - - urbit-noun - - urbit-noun-core - -extra-deps: - - base58-bytestring-0.1.0@sha256:a1da72ee89d5450bac1c792d9fcbe95ed7154ab7246f2172b57bd4fd9b5eab79 - - lock-file-0.7.0.0@sha256:3ad84b5e454145e1d928063b56abb96db24a99a21b493989520e58fa0ab37b00 - - para-1.1@sha256:a90eebb063ad70271e6e2a7f00a93e8e8f8b77273f100f39852fbf8301926f81 - - web3-0.9.1.0@sha256:6b7faac0b63e7d0aae46588dd9a42e11f54ce0fdf4c2744bdf4cc6c5cbf39aa2 - - vinyl-0.12.3@sha256:66553fc71cabfa86837bf5f98558e3e6d1807c47af5f5f1cd758081d3fb023ea - -# This allows building on NixOS. -nix: - packages: - - pkgconfig - - zlib - -# TODO: Why is this here? -ghc-options: - urbit-king: '-optP-Wno-nonportable-include-path' diff --git a/pkg/hs/terminal-progress-bar/LICENSE b/pkg/hs/terminal-progress-bar/LICENSE deleted file mode 120000 index ea5b60640..000000000 --- a/pkg/hs/terminal-progress-bar/LICENSE +++ /dev/null @@ -1 +0,0 @@ -../LICENSE \ No newline at end of file diff --git a/pkg/hs/terminal-progress-bar/README.markdown b/pkg/hs/terminal-progress-bar/README.markdown deleted file mode 120000 index 1691050d1..000000000 --- a/pkg/hs/terminal-progress-bar/README.markdown +++ /dev/null @@ -1 +0,0 @@ -../README.markdown \ No newline at end of file diff --git a/pkg/hs/terminal-progress-bar/Setup.hs b/pkg/hs/terminal-progress-bar/Setup.hs deleted file mode 100644 index 9a994af67..000000000 --- a/pkg/hs/terminal-progress-bar/Setup.hs +++ /dev/null @@ -1,2 +0,0 @@ -import Distribution.Simple -main = defaultMain diff --git a/pkg/hs/terminal-progress-bar/bench/bench.hs b/pkg/hs/terminal-progress-bar/bench/bench.hs deleted file mode 100644 index 9f00ac6bb..000000000 --- a/pkg/hs/terminal-progress-bar/bench/bench.hs +++ /dev/null @@ -1,51 +0,0 @@ -{-# language PackageImports #-} -module Main where - -import "base" Data.Monoid ( (<>) ) -import "criterion" Criterion.Main -import "terminal-progress-bar" System.ProgressBar -import "time" Data.Time.Clock ( UTCTime(..) ) - -main :: IO () -main = defaultMain - [ renderProgressBarBenchmark 10 0 - , renderProgressBarBenchmark 10 50 - , renderProgressBarBenchmark 10 100 - , renderProgressBarBenchmark 100 0 - , renderProgressBarBenchmark 100 50 - , renderProgressBarBenchmark 100 100 - , renderProgressBarBenchmark 200 0 - , renderProgressBarBenchmark 200 50 - , renderProgressBarBenchmark 200 100 - , labelBenchmark "percentage" percentage (Progress 0 100 ()) - , labelBenchmark "percentage" percentage (Progress 50 100 ()) - , labelBenchmark "percentage" percentage (Progress 100 100 ()) - , labelBenchmark "exact" exact (Progress 0 100 ()) - , labelBenchmark "exact" exact (Progress 50 100 ()) - , labelBenchmark "exact" exact (Progress 100 100 ()) - ] - -renderProgressBarBenchmark :: Int -> Int -> Benchmark -renderProgressBarBenchmark width done = - bench name $ nf (\(s, p, t) -> renderProgressBar s p t) - ( defStyle{styleWidth = ConstantWidth width} - , Progress done 100 () - , someTiming - ) - where - name = "progressBar/default - " - <> show width <> " wide - progress " <> show done <> " % 100" - -labelBenchmark :: String -> Label () -> Progress () -> Benchmark -labelBenchmark labelName label progress = - bench name $ nf (\(p, t) -> runLabel label p t) (progress, someTiming) - where - name = "label/" <> labelName <> " " - <> show (progressDone progress) <> " % " - <> show (progressTodo progress) - -someTime :: UTCTime -someTime = UTCTime (toEnum 0) 0 - -someTiming :: Timing -someTiming = Timing someTime someTime diff --git a/pkg/hs/terminal-progress-bar/changelog.md b/pkg/hs/terminal-progress-bar/changelog.md deleted file mode 120000 index 7b91ffb65..000000000 --- a/pkg/hs/terminal-progress-bar/changelog.md +++ /dev/null @@ -1 +0,0 @@ -../changelog.md \ No newline at end of file diff --git a/pkg/hs/terminal-progress-bar/src/System/ProgressBar.hs b/pkg/hs/terminal-progress-bar/src/System/ProgressBar.hs deleted file mode 100644 index a568443c6..000000000 --- a/pkg/hs/terminal-progress-bar/src/System/ProgressBar.hs +++ /dev/null @@ -1,716 +0,0 @@ -{-# language DeriveGeneric #-} -{-# language GeneralizedNewtypeDeriving #-} -{-# language OverloadedStrings #-} -{-# language PackageImports #-} -{-# language ScopedTypeVariables #-} - -{- | -A progress bar in the terminal. - -A progress bar conveys the progress of a task. Use a progress bar to -provide a visual cue that processing is underway. --} -module System.ProgressBar - ( -- * Getting started - -- $start - - -- * Example - -- $example - - -- * Progress bars - ProgressBar - , newProgressBar - , killProgressBar - , hNewProgressBar - , renderProgressBar - , updateProgress - , incProgress - -- * Options - , Style(..) - , EscapeCode - , OnComplete(..) - , defStyle - , ProgressBarWidth(..) - -- * Progress - , Progress(..) - -- * Labels - , Label(..) - , Timing(..) - , msg - , percentage - , exact - , elapsedTime - , remainingTime - , totalTime - , renderDuration - ) where - -import "base" Control.Monad ( when ) -import "base" Data.Int ( Int64 ) -import "base" Data.Monoid ( Monoid, mempty ) -import "base" Data.Ratio ( Ratio, (%) ) -import "base" Data.Semigroup ( Semigroup, (<>) ) -import "base" Data.String ( IsString, fromString ) -import "base" GHC.Generics ( Generic ) -import "deepseq" Control.DeepSeq ( NFData, rnf ) -import qualified "terminal-size" System.Console.Terminal.Size as TS -import qualified "text" Data.Text.Lazy as TL -import qualified "text" Data.Text.Lazy.Builder as TLB -import qualified "text" Data.Text.Lazy.Builder.Int as TLB -import "time" Data.Time.Clock ( UTCTime, NominalDiffTime, diffUTCTime, getCurrentTime ) - -import ClassyPrelude (liftIO, MVar, newMVar, modifyMVar_) - -import RIO (logSticky, logStickyDone, HasLogFunc, RIO, display) - --------------------------------------------------------------------------------- - --- | A terminal progress bar. --- --- A 'ProgressBar' value contains the state of a progress bar. --- --- Create a progress bar with 'newProgressBar' or 'hNewProgressBar'. --- Update a progress bar with 'updateProgress' or 'incProgress'. -data ProgressBar s - = ProgressBar - { pbStyle :: !(Style s) - , pbStateMv :: !(MVar (State s)) - , pbRefreshDelay :: !Double - , pbStartTime :: !UTCTime - } - -instance (NFData s) => NFData (ProgressBar s) where - rnf pb = pbStyle pb - `seq` pbStateMv pb - `seq` pbRefreshDelay pb - `seq` pbStartTime pb - `seq` () - --- | State of a progress bar. -data State s - = State - { stProgress :: !(Progress s) - -- ^ Current progress. - , stRenderTime :: !UTCTime - -- ^ Moment in time of last render. - } - --- | An amount of progress. -data Progress s - = Progress - { progressDone :: !Int - -- ^ Amount of work completed. - , progressTodo :: !Int - -- ^ Total amount of work. - , progressCustom :: !s - -- ^ A value which is used by custom labels. The builtin labels - -- do not care about this field. You can ignore it by using the - -- unit value '()'. - } - -progressFinished :: Progress s -> Bool -progressFinished p = progressDone p >= progressTodo p - --- | Creates a progress bar. --- --- The progress bar is drawn immediately. Update the progress bar with --- 'updateProgress' or 'incProgress'. Do not output anything to your --- terminal between updates. It will mess up the animation. --- --- The progress bar is written to 'stderr'. Write to another handle --- with 'hNewProgressBar'. -newProgressBar - :: HasLogFunc e - => Style s -- ^ Visual style of the progress bar. - -> Double -- ^ Maximum refresh rate in Hertz. - -> Progress s -- ^ Initial progress. - -> RIO e (ProgressBar s) -newProgressBar = hNewProgressBar - --- | Creates a progress bar which outputs to the given handle. --- --- See 'newProgressBar'. -hNewProgressBar - :: HasLogFunc e - => Style s -- ^ Visual style of the progress bar. - -> Double -- ^ Maximum refresh rate in Hertz. - -> Progress s -- ^ Initial progress. - -> RIO e (ProgressBar s) -hNewProgressBar style maxRefreshRate initProgress = do - style' <- updateWidth style - - startTime <- liftIO getCurrentTime - hPutProgressBar style' initProgress (Timing startTime startTime) - - stateMv <- newMVar - State - { stProgress = initProgress - , stRenderTime = startTime - } - pure ProgressBar - { pbStyle = style' - , pbStateMv = stateMv - , pbRefreshDelay = recip maxRefreshRate - , pbStartTime = startTime - } - --- | Update the width based on the current terminal. -updateWidth :: Style s -> RIO e (Style s) -updateWidth style = - case styleWidth style of - ConstantWidth {} -> pure style - TerminalWidth {} -> do - mbWindow <- liftIO TS.size - pure $ case mbWindow of - Nothing -> style - Just window -> style{ styleWidth = TerminalWidth (TS.width window) } - --- | Change the progress of a progress bar. --- --- This function is thread safe. Multiple threads may update a single --- progress bar at the same time. --- --- There is a maximum refresh rate. This means that some updates might not be drawn. -updateProgress - :: forall s e - . HasLogFunc e - => ProgressBar s -- ^ Progress bar to update. - -> (Progress s -> Progress s) -- ^ Function to change the progress. - -> RIO e () -updateProgress progressBar f = do - updateTime <- liftIO getCurrentTime - modifyMVar_ (pbStateMv progressBar) $ renderAndUpdate updateTime - where - renderAndUpdate :: UTCTime -> State s -> RIO e (State s) - renderAndUpdate updateTime state = do - when shouldRender $ - hPutProgressBar (pbStyle progressBar) newProgress timing - pure State - { stProgress = newProgress - , stRenderTime = if shouldRender then updateTime else stRenderTime state - } - where - timing = Timing - { timingStart = pbStartTime progressBar - , timingLastUpdate = updateTime - } - - shouldRender = not tooFast || finished - tooFast = secSinceLastRender <= pbRefreshDelay progressBar - finished = progressFinished newProgress - - newProgress = f $ stProgress state - - -- Amount of time that passed since last render, in seconds. - secSinceLastRender :: Double - secSinceLastRender = realToFrac $ diffUTCTime updateTime (stRenderTime state) - --- | Increment the progress of an existing progress bar. --- --- See 'updateProgress' for more information. -incProgress - :: HasLogFunc e - => ProgressBar s -- ^ Progress bar which needs an update. - -> Int -- ^ Amount by which to increment the progress. - -> RIO e () -incProgress pb n = updateProgress pb $ \p -> p{ progressDone = progressDone p + n } - -killProgressBar :: HasLogFunc e => ProgressBar s -> RIO e () -killProgressBar _ = pure () - -hPutProgressBar :: HasLogFunc e => Style s -> Progress s -> Timing -> RIO e () -hPutProgressBar style progress timing = do - let barStr = (display (renderProgressBar style progress timing)) - logSticky barStr - when (progressFinished progress) $ do - logStickyDone barStr - --- | Renders a progress bar. --- --- >>> let t = UTCTime (ModifiedJulianDay 0) 0 --- >>> renderProgressBar defStyle (Progress 30 100 ()) (Timing t t) --- "[============>..............................] 30%" --- --- Note that this function can not use 'TerminalWidth' because it --- doesn't use 'IO'. Use 'newProgressBar' or 'hNewProgressBar' to get --- automatic width. -renderProgressBar - :: Style s - -> Progress s -- ^ Current progress. - -> Timing -- ^ Timing information. - -> TL.Text -- ^ Textual representation of the 'Progress' in the given 'Style'. -renderProgressBar style progress timing = TL.concat - [ styleEscapePrefix style progress - , prefixLabel - , prefixPad - , styleEscapeOpen style progress - , styleOpen style - , styleEscapeDone style progress - , TL.replicate completed $ TL.singleton $ styleDone style - , styleEscapeCurrent style progress - , if remaining /= 0 && completed /= 0 - then TL.singleton $ styleCurrent style - else "" - , styleEscapeTodo style progress - , TL.replicate - (remaining - if completed /= 0 then 1 else 0) - (TL.singleton $ styleTodo style) - , styleEscapeClose style progress - , styleClose style - , styleEscapePostfix style progress - , postfixPad - , postfixLabel - ] - where - todo = fromIntegral $ progressTodo progress - done = fromIntegral $ progressDone progress - -- Amount of (visible) characters that should be used to display to progress bar. - width = fromIntegral $ getProgressBarWidth $ styleWidth style - - -- Amount of work completed. - fraction :: Ratio Int64 - fraction | todo /= 0 = done % todo - | otherwise = 0 % 1 - - -- Amount of characters available to visualize the progress. - effectiveWidth = max 0 $ width - usedSpace - -- Amount of printing characters needed to visualize everything except the bar . - usedSpace = TL.length (styleOpen style) - + TL.length (styleClose style) - + TL.length prefixLabel - + TL.length postfixLabel - + TL.length prefixPad - + TL.length postfixPad - - -- Number of characters needed to represent the amount of work - -- that is completed. Note that this can not always be represented - -- by an integer. - numCompletedChars :: Ratio Int64 - numCompletedChars = fraction * (effectiveWidth % 1) - - completed, remaining :: Int64 - completed = min effectiveWidth $ floor numCompletedChars - remaining = effectiveWidth - completed - - prefixLabel, postfixLabel :: TL.Text - prefixLabel = runLabel (stylePrefix style) progress timing - postfixLabel = runLabel (stylePostfix style) progress timing - - prefixPad, postfixPad :: TL.Text - prefixPad = pad prefixLabel - postfixPad = pad postfixLabel - -pad :: TL.Text -> TL.Text -pad s | TL.null s = TL.empty - | otherwise = TL.singleton ' ' - --- | Width of progress bar in characters. -data ProgressBarWidth - = ConstantWidth !Int - -- ^ A constant width. - | TerminalWidth !Int - -- ^ Use the entire width of the terminal. - -- - -- Identical to 'ConstantWidth' if the width of the terminal can - -- not be determined. - deriving (Generic) - -instance NFData ProgressBarWidth - -getProgressBarWidth :: ProgressBarWidth -> Int -getProgressBarWidth (ConstantWidth n) = n -getProgressBarWidth (TerminalWidth n) = n - -{- | Visual style of a progress bar. - -The style determines how a progress bar is rendered to text. - -The textual representation of a progress bar follows the following template: - -\<__prefix__>\<__open__>\<__done__>\<__current__>\<__todo__>\<__close__>\<__postfix__> - -Where \<__done__> and \<__todo__> are repeated as often as necessary. - -Consider the following progress bar - -> "Working [=======>.................] 30%" - -This bar can be specified using the following style: - -@ -'Style' -{ 'styleOpen' = \"[" -, 'styleClose' = \"]" -, 'styleDone' = \'=' -, 'styleCurrent' = \'>' -, 'styleTodo' = \'.' -, 'stylePrefix' = 'msg' \"Working" -, 'stylePostfix' = 'percentage' -, 'styleWidth' = 'ConstantWidth' 40 -, 'styleEscapeOpen' = const 'TL.empty' -, 'styleEscapeClose' = const 'TL.empty' -, 'styleEscapeDone' = const 'TL.empty' -, 'styleEscapeCurrent' = const 'TL.empty' -, 'styleEscapeTodo' = const 'TL.empty' -, 'styleEscapePrefix' = const 'TL.empty' -, 'styleEscapePostfix' = const 'TL.empty' -, 'styleOnComplete' = 'WriteNewline' -} -@ --} -data Style s - = Style - { styleOpen :: !TL.Text - -- ^ Bar opening symbol. - , styleClose :: !TL.Text - -- ^ Bar closing symbol - , styleDone :: !Char - -- ^ Completed work. - , styleCurrent :: !Char - -- ^ Symbol used to denote the current amount of work that has been done. - , styleTodo :: !Char - -- ^ Work not yet completed. - , stylePrefix :: Label s - -- ^ Prefixed label. - , stylePostfix :: Label s - -- ^ Postfixed label. - , styleWidth :: !ProgressBarWidth - -- ^ Total width of the progress bar. - , styleEscapeOpen :: EscapeCode s - -- ^ Escape code printed just before the 'styleOpen' symbol. - , styleEscapeClose :: EscapeCode s - -- ^ Escape code printed just before the 'styleClose' symbol. - , styleEscapeDone :: EscapeCode s - -- ^ Escape code printed just before the first 'styleDone' character. - , styleEscapeCurrent :: EscapeCode s - -- ^ Escape code printed just before the 'styleCurrent' character. - , styleEscapeTodo :: EscapeCode s - -- ^ Escape code printed just before the first 'styleTodo' character. - , styleEscapePrefix :: EscapeCode s - -- ^ Escape code printed just before the 'stylePrefix' label. - , styleEscapePostfix :: EscapeCode s - -- ^ Escape code printed just before the 'stylePostfix' label. - , styleOnComplete :: !OnComplete - -- ^ What happens when progress is finished. - } deriving (Generic) - -instance (NFData s) => NFData (Style s) - --- | An escape code is a sequence of bytes which the terminal looks --- for and interprets as commands, not as character codes. --- --- It is vital that the output of this function, when send to the --- terminal, does not result in characters being drawn. -type EscapeCode s - = Progress s -- ^ Current progress bar state. - -> TL.Text -- ^ Resulting escape code. Must be non-printable. - --- | What happens when a progress bar is finished. -data OnComplete - = WriteNewline - -- ^ Write a new line when the progress bar is finished. The - -- completed progress bar will remain visible. - | Clear -- ^ Clear the progress bar once it is finished. - deriving (Generic) - -instance NFData OnComplete - --- | The default style. --- --- This style shows the progress as a percentage. It does not use any --- escape sequences. --- --- Override some fields of the default instead of specifying all the --- fields of a 'Style' record. -defStyle :: Style s -defStyle = - Style - { styleOpen = "[" - , styleClose = "]" - , styleDone = '=' - , styleCurrent = '>' - , styleTodo = '.' - , stylePrefix = mempty - , stylePostfix = percentage - , styleWidth = TerminalWidth 50 - , styleEscapeOpen = const TL.empty - , styleEscapeClose = const TL.empty - , styleEscapeDone = const TL.empty - , styleEscapeCurrent = const TL.empty - , styleEscapeTodo = const TL.empty - , styleEscapePrefix = const TL.empty - , styleEscapePostfix = const TL.empty - , styleOnComplete = WriteNewline - } - --- | A label is a part of a progress bar that changes based on the progress. --- --- Labels can be at the front (prefix) or at the back (postfix) of a progress bar. --- --- Labels can use both the current amount of progress and the timing --- information to generate some text. -newtype Label s = Label{ runLabel :: Progress s -> Timing -> TL.Text } deriving (NFData) - --- | Combining labels combines their output. -instance Semigroup (Label s) where - Label f <> Label g = Label $ \p t -> f p t <> g p t - --- | The mempty label always outputs an empty text. -instance Monoid (Label s) where - mempty = msg TL.empty - mappend = (<>) - --- | Every string is a label which ignores its input and just outputs --- that string. -instance IsString (Label s) where - fromString = msg . TL.pack - --- | Timing information about a 'ProgressBar'. --- --- This information is used by 'Label's to calculate elapsed time, remaining time, total time, etc. --- --- See 'elapsedTime', 'remainingTime' and 'totalTime'. -data Timing - = Timing - { timingStart :: !UTCTime - -- ^ Moment in time when a progress bar was created. See - -- 'newProgressBar'. - , timingLastUpdate :: !UTCTime - -- ^ Moment in time of the most recent progress update. - } - --- | Static text. --- --- The output does not depend on the input. --- --- >>> msg "foo" st --- "foo" -msg :: TL.Text -> Label s -msg s = Label $ \_ _ -> s - --- | Progress as a percentage. --- --- >>> runLabel $ percentage (Progress 30 100 ()) someTiming --- " 30%" --- --- __Note__: if no work is to be done (todo == 0) the percentage will --- be shown as 100%. -percentage :: Label s -percentage = Label render - where - render progress _timing - | todo == 0 = "100%" - | otherwise = TL.justifyRight 4 ' ' $ TLB.toLazyText $ - TLB.decimal (round (done % todo * 100) :: Int) - <> TLB.singleton '%' - where - done = progressDone progress - todo = progressTodo progress - --- | Progress as a fraction of the total amount of work. --- --- >>> runLabel $ exact (Progress 30 100 ()) someTiming --- " 30/100" -exact :: Label s -exact = Label render - where - render progress _timing = - TL.justifyRight (TL.length todoStr) ' ' doneStr <> "/" <> todoStr - where - todoStr = TLB.toLazyText $ TLB.decimal todo - doneStr = TLB.toLazyText $ TLB.decimal done - - done = progressDone progress - todo = progressTodo progress - --- | Amount of time that has elapsed. --- --- Time starts when a progress bar is created. --- --- The user must supply a function which actually renders the amount --- of time that has elapsed. You can use 'renderDuration' or --- @formatTime@ from time >= 1.9. -elapsedTime - :: (NominalDiffTime -> TL.Text) - -> Label s -elapsedTime formatNDT = Label render - where - render _progress timing = formatNDT dt - where - dt :: NominalDiffTime - dt = diffUTCTime (timingLastUpdate timing) (timingStart timing) - --- | Estimated remaining time. --- --- Tells you how much longer some task is expected to take. --- --- This label uses a simple estimation algorithm. It assumes progress --- is linear. To prevent nonsense results it won't estimate remaining --- time until at least 1 second of work has been done. --- --- When it refuses to estimate the remaining time it will show an --- alternative message instead. --- --- The user must supply a function which actually renders the amount --- of time that has elapsed. Use 'renderDuration' or @formatTime@ from --- the time >= 1.9 package. -remainingTime - :: (NominalDiffTime -> TL.Text) - -> TL.Text - -- ^ Alternative message when remaining time can't be - -- calculated (yet). - -> Label s -remainingTime formatNDT altMsg = Label render - where - render progress timing - | dt > 1 = formatNDT estimatedRemainingTime - | progressDone progress <= 0 = altMsg - | otherwise = altMsg - where - estimatedRemainingTime = estimatedTotalTime - dt - estimatedTotalTime = dt * recip progressFraction - - progressFraction :: NominalDiffTime - progressFraction - | progressTodo progress <= 0 = 1 - | otherwise = fromIntegral (progressDone progress) - / fromIntegral (progressTodo progress) - - dt :: NominalDiffTime - dt = diffUTCTime (timingLastUpdate timing) (timingStart timing) - --- | Estimated total time. --- --- This label uses a simple estimation algorithm. It assumes progress --- is linear. To prevent nonsense results it won't estimate the total --- time until at least 1 second of work has been done. --- --- When it refuses to estimate the total time it will show an --- alternative message instead. --- --- The user must supply a function which actually renders the total --- amount of time that a task will take. You can use 'renderDuration' --- or @formatTime@ from the time >= 1.9 package. -totalTime - :: (NominalDiffTime -> TL.Text) - -> TL.Text - -- ^ Alternative message when total time can't be calculated - -- (yet). - -> Label s -totalTime formatNDT altMsg = Label render - where - render progress timing - | dt > 1 = formatNDT estimatedTotalTime - | progressDone progress <= 0 = altMsg - | otherwise = altMsg - where - estimatedTotalTime = dt * recip progressFraction - - progressFraction :: NominalDiffTime - progressFraction - | progressTodo progress <= 0 = 1 - | otherwise = fromIntegral (progressDone progress) - / fromIntegral (progressTodo progress) - - dt :: NominalDiffTime - dt = diffUTCTime (timingLastUpdate timing) (timingStart timing) - --- | Show amount of time. --- --- > renderDuration (fromInteger 42) --- 42 --- --- > renderDuration (fromInteger $ 5 * 60 + 42) --- 05:42 --- --- > renderDuration (fromInteger $ 8 * 60 * 60 + 5 * 60 + 42) --- 08:05:42 --- --- Use the time >= 1.9 package to get a formatTime function which --- accepts 'NominalDiffTime'. -renderDuration :: NominalDiffTime -> TL.Text -renderDuration dt = hTxt <> mTxt <> sTxt - where - hTxt | h == 0 = mempty - | otherwise = renderDecimal h <> ":" - mTxt | m == 0 = mempty - | otherwise = renderDecimal m <> ":" - sTxt = renderDecimal s - - (h, hRem) = ts `quotRem` 3600 - (m, s ) = hRem `quotRem` 60 - - -- Total amount of seconds - ts :: Int - ts = round dt - - renderDecimal n = TL.justifyRight 2 '0' $ TLB.toLazyText $ TLB.decimal n - -{- $start - -You want to perform some task which will take some time. You wish to -show the progress of this task in the terminal. - - 1. Determine the total amount of work - - 2. Create a progress bar with 'newProgressBar' - - 3. For each unit of work: - - 3a. Perform the work - - 3b. Update the progress bar with 'incProgress' - -Explore the 'Style' and the 'Label' types to see various ways in which -you can customize the progress bar. - -You do not have to close the progress bar, or even finish the task. It -is perfectly fine to stop half way (maybe your task throws an -exception). - -Just remember to avoid outputting text to the terminal while a -progress bar is active. It will mess up the output a bit. --} - -{- $example - -Write a function which represents a unit of work. This could be a file -copy operation, a network operation or some other expensive -calculation. This example simply waits 1 second. - -@ - work :: IO () - work = threadDelay 1000000 -- 1 second -@ - -And you define some work to be done. This could be a list of files to -process or some jobs that need to be processed. - -@ - toBeDone :: [()] - toBeDone = replicate 20 () -@ - -Now create the progress bar. Use the default style and choose a -maximum refresh rate of 10 Hz. The initial progress is 0 work done out -of 20. - -@ - pb <- 'newProgressBar' 'defStyle' 10 ('Progress' 0 20 ()) -@ - -Start performing the work while keeping the user informed of the progress: - -@ - for_ toBeDone $ \() -> do - work -- perform 1 unit of work - 'incProgress' pb 1 -- increment progress by 1 -@ - -That's it! You get a nice animated progress bar in your terminal. It -will look like this: - -@ -[==========>................................] 25% -@ --} diff --git a/pkg/hs/terminal-progress-bar/terminal-progress-bar.cabal b/pkg/hs/terminal-progress-bar/terminal-progress-bar.cabal deleted file mode 100644 index 25edd4d2b..000000000 --- a/pkg/hs/terminal-progress-bar/terminal-progress-bar.cabal +++ /dev/null @@ -1,72 +0,0 @@ -name: terminal-progress-bar -version: 0.4.1 -cabal-version: >=1.10 -build-type: Simple -author: Roel van Dijk -maintainer: Roel van Dijk -copyright: 2012–2019 Roel van Dijk -license: BSD3 --- ense-file: LICENSE -category: System, User Interfaces -homepage: https://github.com/roelvandijk/terminal-progress-bar -bug-reports: https://github.com/roelvandijk/terminal-progress-bar/issues -synopsis: A progress bar in the terminal -description: - A progress bar conveys the progress of a task. This package - implements a progress bar that is displayed in a terminal. - . - See the module 'System.ProgressBar' to get started or look at the - terminal-progress-bar-example package. - . - The animated progress bar depends entirely on the interpretation of - the carriage return character (\'\\r\'). If your terminal interprets - it as something else than \"move cursor to beginning of line\", the - animation won't work. - --- ra-source-files: LICENSE, README.markdown, changelog.md - -source-repository head - type: git - location: git://github.com/roelvandijk/terminal-progress-bar.git - -library - hs-source-dirs: src - build-depends: - base >= 4.5 && < 5 - , deepseq >= 1.4.3 - , terminal-size >= 0.3.2 - , text >= 1.2 - , time >= 1.8 - , rio - , classy-prelude - exposed-modules: System.ProgressBar - ghc-options: -Wall - default-language: Haskell2010 - -test-suite test-terminal-progress-bar - type: exitcode-stdio-1.0 - main-is: test.hs - hs-source-dirs: test - ghc-options: -Wall - build-depends: - base >= 4.5 && < 5 - , HUnit >= 1.2.4.2 - , terminal-progress-bar - , test-framework >= 0.3.3 - , test-framework-hunit >= 0.2.6 - , text >= 1.2 - , time >= 1.8 - default-language: Haskell2010 - -benchmark bench-terminal-progress-bar - type: exitcode-stdio-1.0 - main-is: bench.hs - hs-source-dirs: bench - - build-depends: - base >= 4.5 && < 5 - , criterion >= 1.1.4 - , terminal-progress-bar - , time >= 1.8 - ghc-options: -Wall -O2 - default-language: Haskell2010 diff --git a/pkg/hs/terminal-progress-bar/test/test.hs b/pkg/hs/terminal-progress-bar/test/test.hs deleted file mode 100644 index 1cb2c9810..000000000 --- a/pkg/hs/terminal-progress-bar/test/test.hs +++ /dev/null @@ -1,102 +0,0 @@ -{-# language OverloadedStrings #-} -{-# language PackageImports #-} - -module Main where - --------------------------------------------------------------------------------- --- Imports --------------------------------------------------------------------------------- - -import "base" System.Environment ( getArgs ) -import "base" Data.Semigroup ( (<>) ) -import "HUnit" Test.HUnit.Base ( assertEqual ) -import "test-framework" Test.Framework - ( defaultMainWithOpts, interpretArgsOrExit, Test, testGroup ) -import "test-framework-hunit" Test.Framework.Providers.HUnit ( testCase ) -import "terminal-progress-bar" System.ProgressBar -import qualified "text" Data.Text.Lazy as TL -import "time" Data.Time.Clock ( UTCTime(..), NominalDiffTime ) - --------------------------------------------------------------------------------- --- Test suite --------------------------------------------------------------------------------- - -main :: IO () -main = do opts <- interpretArgsOrExit =<< getArgs - defaultMainWithOpts tests opts - -tests :: [Test] -tests = - [ testGroup "Label padding" - [ eqTest "no labels" "[]" mempty mempty 0 $ Progress 0 0 () - , eqTest "pre" "pre []" (msg "pre") mempty 0 $ Progress 0 0 () - , eqTest "post" "[] post" mempty (msg "post") 0 $ Progress 0 0 () - , eqTest "pre & post" "pre [] post" (msg "pre") (msg "post") 0 $ Progress 0 0 () - ] - , testGroup "Bar fill" - [ eqTest "empty" "[....]" mempty mempty 6 $ Progress 0 1 () - , eqTest "almost half" "[=>..]" mempty mempty 6 $ Progress 49 100 () - , eqTest "half" "[==>.]" mempty mempty 6 $ Progress 1 2 () - , eqTest "almost full" "[===>]" mempty mempty 6 $ Progress 99 100 () - , eqTest "full" "[====]" mempty mempty 6 $ Progress 1 1 () - , eqTest "overfull" "[====]" mempty mempty 6 $ Progress 2 1 () - ] - , testGroup "Labels" - [ testGroup "Percentage" - [ eqTest " 0%" " 0% [....]" percentage mempty 11 $ Progress 0 1 () - , eqTest "100%" "100% [====]" percentage mempty 11 $ Progress 1 1 () - , eqTest " 50%" " 50% [==>.]" percentage mempty 11 $ Progress 1 2 () - , eqTest "200%" "200% [====]" percentage mempty 11 $ Progress 2 1 () - , labelTest "0 work todo" percentage (Progress 10 0 ()) "100%" - ] - , testGroup "Exact" - [ eqTest "0/0" "0/0 [....]" exact mempty 10 $ Progress 0 0 () - , eqTest "1/1" "1/1 [====]" exact mempty 10 $ Progress 1 1 () - , eqTest "1/2" "1/2 [==>.]" exact mempty 10 $ Progress 1 2 () - , eqTest "2/1" "2/1 [====]" exact mempty 10 $ Progress 2 1 () - , labelTest "0 work todo" exact (Progress 10 0 ()) "10/0" - ] - , testGroup "Label Semigroup" - [ eqTest "exact <> msg <> percentage" - "1/2 - 50% [===>...]" - (exact <> msg " - " <> percentage) - mempty 20 $ Progress 1 2 () - ] - , testGroup "rendeRuration" - [ renderDurationTest 42 "42" - , renderDurationTest (5 * 60 + 42) "05:42" - , renderDurationTest (8 * 60 * 60 + 5 * 60 + 42) "08:05:42" - , renderDurationTest (123 * 60 * 60 + 59 * 60 + 59) "123:59:59" - ] - ] - ] - -labelTest :: String -> Label () -> Progress () -> TL.Text -> Test -labelTest testName label progress expected = - testCase testName $ assertEqual expectationError expected $ runLabel label progress someTiming - -renderDurationTest :: NominalDiffTime -> TL.Text -> Test -renderDurationTest dt expected = - testCase ("renderDuration " <> show dt) $ assertEqual expectationError expected $ renderDuration dt - -eqTest :: String -> TL.Text -> Label () -> Label () -> Int -> Progress () -> Test -eqTest name expected mkPreLabel mkPostLabel width progress = - testCase name $ assertEqual expectationError expected actual - where - actual = renderProgressBar style progress someTiming - - style :: Style () - style = defStyle - { stylePrefix = mkPreLabel - , stylePostfix = mkPostLabel - , styleWidth = ConstantWidth width - } - -someTime :: UTCTime -someTime = UTCTime (toEnum 0) 0 - -someTiming :: Timing -someTiming = Timing someTime someTime - -expectationError :: String -expectationError = "Expected result doesn't match actual result" diff --git a/pkg/hs/urbit-atom/.gitignore b/pkg/hs/urbit-atom/.gitignore deleted file mode 100644 index 088be03c6..000000000 --- a/pkg/hs/urbit-atom/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -urbit-atom.cabal -dist-newstyle/ diff --git a/pkg/hs/urbit-atom/LICENSE b/pkg/hs/urbit-atom/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/urbit-atom/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/urbit-atom/TODO.md b/pkg/hs/urbit-atom/TODO.md deleted file mode 100644 index c0d8369c9..000000000 --- a/pkg/hs/urbit-atom/TODO.md +++ /dev/null @@ -1,5 +0,0 @@ -- Support big-endian CPUs (CPP flag; use GMP import/export) -- Support `integer-simple`. (Android) -- `atomWords` and `wordsAtom` are unacceptably slow on GHCJS. - - This is only used in `jam`/`cue`, so it doesn't matter for now. -- Understand why my hand rolled import is slower than GMP import. diff --git a/pkg/hs/urbit-atom/bench/Main.hs b/pkg/hs/urbit-atom/bench/Main.hs deleted file mode 100644 index c4fbd225b..000000000 --- a/pkg/hs/urbit-atom/bench/Main.hs +++ /dev/null @@ -1,54 +0,0 @@ -{-# OPTIONS_GHC -Wno-missing-signatures #-} - -module Main (main) where - -import Prelude -import Criterion.Main - -import Data.ByteString (ByteString) -import Urbit.Atom (Atom) - -import qualified Urbit.Atom.Fast as Fast -import qualified Urbit.Atom.Slow as Slow - - --- Examples -------------------------------------------------------------------- - -a64, a32768 :: Atom -a64 = (2^64) - 1 -a32768 = (2^32768)-1 - -bDog, bBigDog :: ByteString -bDog = "The quick brown fox jumps over the lazy dog." -bBigDog = mconcat (replicate 800 bDog) - - --- Benchmarks ------------------------------------------------------------------ - -maiDump = Fast.atomBytes -maiLoad = Fast.bytesAtom -sloDump = Slow.atomBytes -sloLoad = Slow.bytesAtom -gmpDump = Fast.exportBytes -gmpLoad = Fast.importBytes - -main = defaultMain - [ bgroup "lit-dump" [ bench "slo" $ whnf sloDump a64 - , bench "gmp" $ whnf gmpDump a64 - , bench "mai" $ whnf maiDump a64 - ] - - , bgroup "big-dump" [ bench "gmp" $ whnf gmpDump a32768 - , bench "mai" $ whnf maiDump a32768 - ] - - , bgroup "lit-load" [ bench "slo" $ whnf sloLoad bDog - , bench "gmp" $ whnf gmpLoad bDog - , bench "mai" $ whnf maiLoad bDog - ] - - , bgroup "big-load" [ bench "gmp" $ whnf gmpLoad bBigDog - , bench "mai" $ whnf maiLoad bBigDog - ] - ] - diff --git a/pkg/hs/urbit-atom/lib/Urbit/Atom.hs b/pkg/hs/urbit-atom/lib/Urbit/Atom.hs deleted file mode 100644 index d640c2d7c..000000000 --- a/pkg/hs/urbit-atom/lib/Urbit/Atom.hs +++ /dev/null @@ -1,117 +0,0 @@ -{-# LANGUAGE CPP #-} - -{-| - Atom implementation with fast conversions between bytestrings - and atoms. --} - -module Urbit.Atom - ( Atom - , atomBytes - , bytesAtom - , atomWords - , wordsAtom - , utf8Atom - , atomUtf8 - , atomUtf8Exn - , atomUtf8Lenient - ) -where - -import Prelude - -import Data.ByteString (ByteString) -import Data.Vector.Primitive (Vector) -import GHC.Natural (Natural) - -import qualified Data.Text as T -import qualified Data.Text.Encoding as T -import qualified Data.Text.Encoding.Error as T - -#if defined(__GHCJS__) -import qualified Urbit.Atom.Slow as Slow -#endif - -import qualified Urbit.Atom.Fast as A - - --------------------------------------------------------------------------------- - -type Atom = Natural - - --- Choose Implementation Based on Platform ------------------------------------- - -{- | - Convert an Atom to a bytestring. O(n), copies. - - My hand-rolled implementation is faster, but doesn't work on GHCJS. So, - on GHCJS use GMP's `export` routine. - - TODO GMP's `export` routine also handles big endian machines, so use - in that case too. --} -atomBytes :: Atom -> ByteString -atomBytes = -#if defined(__GHCJS__) - A.exportBytes -#else - A.atomBytes -#endif - -{- | - Convert a bytestring to an Atom. O(n), copies. - - This always uses GMP's `export` routine, since it's portable and faster - than my hand-rolled implementation. --} -bytesAtom :: ByteString -> Atom -bytesAtom = A.importBytes - -{- | - Cast an atom to a vector. O(1), does not copy. - - My fast implementation doesn't work on GHCJS, so fallback to the naive - implementation on that platform for now. --} -atomWords :: Atom -> Vector Word -atomWords = -#if defined(__GHCJS__) - Slow.atomWords -#else - A.atomWords -#endif - -{- | - Cast a vector to an atom. O(1), does not copy unless given a slice, - then O(n). - - My fast implementation doesn't work on GHCJS, so fallback to the naive - implementation on that platform for now. --} -wordsAtom :: Vector Word -> Atom -wordsAtom = -#if defined(__GHCJS__) - Slow.wordsAtom -#else - A.wordsAtom -#endif - - --- String/Cord Conversion ------------------------------------------------------ - --- | Encode a utf8-encoded atom from text. -utf8Atom :: T.Text -> Atom -utf8Atom = bytesAtom . T.encodeUtf8 - --- | Interpret an atom as utf8 text. -atomUtf8 :: Atom -> Either T.UnicodeException T.Text -atomUtf8 = T.decodeUtf8' . atomBytes - --- | Interpret an atom as utf8 text, throwing an exception on bad unicode. -atomUtf8Exn :: Atom -> T.Text -atomUtf8Exn = T.decodeUtf8 . atomBytes - --- | Interpret an atom as utf8 text, replacing bad unicode characters. -atomUtf8Lenient :: Atom -> T.Text -atomUtf8Lenient = T.decodeUtf8With T.lenientDecode . atomBytes diff --git a/pkg/hs/urbit-atom/lib/Urbit/Atom/Fast.hs b/pkg/hs/urbit-atom/lib/Urbit/Atom/Fast.hs deleted file mode 100644 index 45ce36479..000000000 --- a/pkg/hs/urbit-atom/lib/Urbit/Atom/Fast.hs +++ /dev/null @@ -1,339 +0,0 @@ -{-# LANGUAGE CPP, UnliftedFFITypes #-} - -{-| - Atom implementation with fast conversions between bytestrings - and atoms. - - TODO Support Big Endian. --} - -module Urbit.Atom.Fast - ( wordsAtom - , bytesAtom - , atomBytes - , atomWords - , exportBytes - , importBytes - , wordBitWidth# - , wordBitWidth - , atomBitWidth# - , atomBitWidth - , takeBitsWord - , bigNatWords - , wordsBigNat - , bit - , byt - ) -where - -import Prelude - -import Control.Monad.Primitive (primitive_) -import Data.Bits (shiftL, shiftR, (.&.), (.|.)) -import Data.ByteString (ByteString) -import Data.Vector.Primitive (Vector(..)) -import Data.Word (Word8) -import GHC.Exts (Ptr(Ptr), sizeofByteArray#) -import GHC.Exts (Int(..)) -import GHC.Integer.GMP.Internals (BigNat(..)) -import GHC.Natural (Natural(..)) -import GHC.Prim (Int#, clz#, minusWord#, plusWord#) -import GHC.Prim (Word#, Addr#, int2Word#, timesWord#) -import GHC.Prim (copyByteArrayToAddr#) -import GHC.Word (Word(..)) -import System.IO.Unsafe (unsafePerformIO) - -import qualified Data.ByteString as BS -import qualified Data.ByteString.Internal as BS -import qualified Data.ByteString.Unsafe as BS -import qualified Data.Primitive.ByteArray as Prim -import qualified Data.Vector.Primitive as VP -import qualified Foreign.ForeignPtr as Ptr -import qualified Foreign.ForeignPtr.Unsafe as Ptr -import qualified GHC.Integer.GMP.Internals as G - - --- Setup BIT and BYT macros. --------------------------------------------------- - -#include - -#if WORD_SIZE_IN_BITS == 64 -#define BIT 64 -#define BYT 8 -#elif WORD_SIZE_IN_BITS == 32 -#define BIT 32 -#define BYT 4 -#else -#error WORD_SIZE_IN_BITS must be either 32 or 64 -#endif - -bit :: Word -bit = BIT - -byt :: Word -byt = BYT - - --------------------------------------------------------------------------------- - -wordBitWidth# :: Word# -> Word# -wordBitWidth# w = minusWord# BIT## (clz# w) - -wordBitWidth :: Word -> Word -wordBitWidth (W# w) = W# (wordBitWidth# w) - -bigNatBitWidth# :: BigNat -> Word# -bigNatBitWidth# nat = - lswBits `plusWord#` ((int2Word# lastIdx) `timesWord#` BIT##) - where - I# lastIdx = (I# (G.sizeofBigNat# nat)) - 1 - lswBits = wordBitWidth# (G.indexBigNat# nat lastIdx) - -atomBitWidth# :: Natural -> Word# -atomBitWidth# (NatS# gl) = wordBitWidth# gl -atomBitWidth# (NatJ# bn) = bigNatBitWidth# bn - -atomBitWidth :: Num a => Natural -> a -atomBitWidth a = fromIntegral (W# (atomBitWidth# a)) - --------------------------------------------------------------------------------- - -{-# INLINE takeBitsWord #-} -takeBitsWord :: Int -> Word -> Word -takeBitsWord wid wor = wor .&. (shiftL 1 wid - 1) - - --------------------------------------------------------------------------------- - -{- - A `Pill` is a bytestring without trailing zeros. --} -newtype Pill = Pill { unPill :: ByteString } - -instance Eq Pill where - (==) x y = pillBytes x == pillBytes y - -instance Show Pill where - show = show . pillBytes - - --------------------------------------------------------------------------------- - -strip :: ByteString -> ByteString -strip buf = BS.take (len - go 0 (len - 1)) buf - where - len = BS.length buf - go n i | i < 0 = n - | 0 == BS.unsafeIndex buf i = go (n + 1) (i - 1) - | otherwise = n - -pillBytes :: Pill -> ByteString -pillBytes = strip . unPill - -bytesPill :: ByteString -> Pill -bytesPill = Pill . strip - - --------------------------------------------------------------------------------- - -{- - Cast a BigNat to a vector without a copy. --} -bigNatWords :: BigNat -> Vector Word -bigNatWords bn | G.isZeroBigNat bn = mempty -bigNatWords bn@(BN# bArr) = - Vector 0 (I# (sizeofByteArray# bArr) `div` BYT) (Prim.ByteArray bArr) - -{-| - Cast a vector to a BigNat. This will not copy. - - TODO Don't crash if given a slice. --} -wordsBigNat :: Vector Word -> BigNat -wordsBigNat v@(Vector off (I# len) (Prim.ByteArray buf)) = case VP.length v of - 0 -> G.zeroBigNat - 1 -> case VP.unsafeIndex v 0 of - W# w -> G.wordToBigNat w - n -> if off /= 0 - then error "words2Nat: bad-vec" - else G.byteArrayToBigNat# buf len - -{-| - More careful version of `wordsBigNat`, but not yet tested. - - Cast a vector to a BigNat. This will not copy unless input is a slice. - - Note that the length of the vector is in words, and the length passed - to `byteArrayToBigNat#` is also in words. --} -_wordsBigNat :: Vector Word -> BigNat -_wordsBigNat v = case VP.length v of - 0 -> G.zeroBigNat - 1 -> G.wordToBigNat w where W# w = VP.unsafeIndex v 0 - n -> if offset v == 0 then extract v else extract (VP.force v) - where - offset (Vector off _ _) = off - - extract (Vector _ (I# len) (Prim.ByteArray buf)) = - G.byteArrayToBigNat# buf len - - --------------------------------------------------------------------------------- - --- | Cast a nat to a vector (no copy) -atomWords :: Natural -> Vector Word -atomWords = bigNatWords . natBigNat - --- | Cast a vector to a nat (no copy) -wordsAtom :: Vector Word -> Natural -wordsAtom = bigNatNat . wordsBigNat - --- | Cast a Nat to a BigNat (no copy). -natBigNat :: Natural -> BigNat -natBigNat (NatS# w ) = G.wordToBigNat w -natBigNat (NatJ# bn) = bn - --- | Cast a BigNat to a Nat (no copy). -bigNatNat :: BigNat -> Natural -bigNatNat bn = case G.sizeofBigNat# bn of - 0# -> 0 - 1# -> NatS# (G.bigNatToWord bn) - _ -> NatJ# bn - - --------------------------------------------------------------------------------- - -_wordBytes :: Word -> ByteString -_wordBytes wor = BS.reverse $ BS.pack $ go 0 [] - where - go i acc | i >= BYT = acc - go i acc | otherwise = go (i + 1) (fromIntegral (shiftR wor (i * BYT)) : acc) - -bytesFirstWord :: ByteString -> Word -bytesFirstWord buf = go 0 0 - where - top = min BYT (BS.length buf) - i idx off = shiftL (fromIntegral $ BS.index buf idx) off - go acc idx = - if idx >= top then acc else go (acc .|. i idx (BYT * idx)) (idx + 1) - - --------------------------------------------------------------------------------- - -_pillWords :: Pill -> Vector Word -_pillWords = bsToWords . pillBytes - -wordsPill :: Vector Word -> Pill -wordsPill = bytesPill . vecBytes . wordsToBytes - - --------------------------------------------------------------------------------- - -wordsToBytes :: Vector Word -> Vector Word8 -wordsToBytes (Vector off sz buf) = Vector (off * BYT) (sz * BYT) buf - -bsToWords :: ByteString -> Vector Word -bsToWords bs = VP.generate (1 + BS.length bs `div` BYT) - $ \i -> bytesFirstWord (BS.drop (i * BYT) bs) - - --------------------------------------------------------------------------------- - -vecBytes :: Vector Word8 -> ByteString -vecBytes (Vector off sz buf) = unsafePerformIO $ do - fp <- BS.mallocByteString sz - let Ptr a = Ptr.unsafeForeignPtrToPtr fp -- Safe b/c returning fp - copyByteArrayToAddr a buf 0 sz - pure (BS.PS fp off sz) - where - unI# :: Int -> Int# - unI# (I# n#) = n# - - -- Hack to get GHCJS build working, since it has an old version of the - -- `primitive` library. - copyByteArrayToAddr dst# (Prim.ByteArray src#) soff sz = - primitive_ (copyByteArrayToAddr# src# (unI# soff) dst# (unI# sz)) - -_bytesVec :: ByteString -> Vector Word8 -_bytesVec bs = VP.generate (BS.length bs) (BS.index bs) - - --------------------------------------------------------------------------------- - -natPill :: Natural -> Pill -natPill = wordsPill . atomWords - -pillAtom :: Pill -> Natural -pillAtom = wordsAtom . bsToWords . pillBytes - --- | Dump an atom to a bytestring. -atomBytes :: Natural -> ByteString -atomBytes = pillBytes . natPill - --- | Load a bytestring into an atom. -bytesAtom :: ByteString -> Natural -bytesAtom = pillAtom . bytesPill - --- Try using GMPs `input/export` feature. -------------------------------------- - --- sizeInBaseInteger i 256# --- sz = sizeInBaseNatural wor 256# --- exportBigNatToAddr :: BigNat -> Addr# -> Int# -> IO Word Source# --- exportWordToAddr :: Word -> Addr# -> Int# -> IO Word - --- Use "sizeInBaseInteger i 256#" to compute the exact number --- of bytes written in advance for i /= 0. In case of i == 0, --- exportIntegerToMutableByteArray will write and report zero bytes written, --- whereas sizeInBaseInteger report one byte. - -sizeInBaseNatural :: Natural -> Int# -> Word# -{-# INLINE sizeInBaseNatural #-} -sizeInBaseNatural (NatS# w) base = G.sizeInBaseWord# w base -sizeInBaseNatural (NatJ# n) base = G.sizeInBaseBigNat n base - -exportNaturalToAddr :: Natural -> Addr# -> Int# -> IO Word -exportNaturalToAddr (NatS# w) = G.exportWordToAddr (W# w) -exportNaturalToAddr (NatJ# n) = G.exportBigNatToAddr n - -exportNaturalToByteString :: Natural -> Int -> ByteString -exportNaturalToByteString nat (I# i#) = unsafePerformIO $ do - let sz# = sizeInBaseNatural nat 256# - let szi = fromIntegral (W# sz#) - fp <- BS.mallocByteString szi - let Ptr a = Ptr.unsafeForeignPtrToPtr fp - exportNaturalToAddr nat a i# - pure (BS.PS fp 0 szi) - -exportBytes :: Natural -> ByteString -exportBytes 0 = mempty -exportBytes n = exportNaturalToByteString n 0 - -bigNatNatural :: BigNat -> Natural -bigNatNatural big = - case G.sizeofBigNat# big of - 0# -> 0 - 1# -> NatS# (G.bigNatToWord big) - _ -> NatJ# big - -stripBytes :: ByteString -> ByteString -stripBytes buf = BS.take (len - go 0 (len - 1)) buf - where - len = BS.length buf - go n i | i < 0 = n - | 0 == BS.unsafeIndex buf i = go (n + 1) (i - 1) - | otherwise = n - - -importBytes :: ByteString -> Natural -importBytes = go . stripBytes - where - go (BS.PS fp 0 sz) = unsafePerformIO $ do - let Ptr a = Ptr.unsafeForeignPtrToPtr fp -- TODO Not safe! - let W# sz# = fromIntegral sz - res <- bigNatNatural <$> G.importBigNatFromAddr a sz# 0# - Ptr.touchForeignPtr fp - pure res - - -- TODO Avoid this extra copy when given a slice. Should be able to - -- just offset the raw pointer. - go bs = importBytes (BS.copy bs) diff --git a/pkg/hs/urbit-atom/lib/Urbit/Atom/Slow.hs b/pkg/hs/urbit-atom/lib/Urbit/Atom/Slow.hs deleted file mode 100644 index 0740c3d6c..000000000 --- a/pkg/hs/urbit-atom/lib/Urbit/Atom/Slow.hs +++ /dev/null @@ -1,85 +0,0 @@ -{-# LANGUAGE CPP #-} - -module Urbit.Atom.Slow - ( wordsAtom - , atomWords - , atomBytes - , bytesAtom - , bit - , byt - ) -where - -import Numeric.Natural -import Prelude -import Data.Bits hiding (bit) -import Data.Word - -import Data.ByteString (ByteString) -import Data.Vector.Primitive (Vector) - -import qualified Data.ByteString as BS -import qualified Data.Vector.Primitive as VP - - --- Setup BIT and BYT macros. --------------------------------------------------- - -#include - -#if WORD_SIZE_IN_BITS == 64 -#define BIT 64 -#define BYT 8 -#elif WORD_SIZE_IN_BITS == 32 -#define BIT 32 -#define BYT 4 -#else -#error WORD_SIZE_IN_BITS must be either 32 or 64 -#endif - -bit :: Word -bit = BIT - -byt :: Word -byt = BYT - - --------------------------------------------------------------------------------- - -{-| - Natural number to LSB-ByteString. --} -atomBytes :: Natural -> ByteString -atomBytes = BS.pack . go [] - where - go acc 0 = reverse acc - go acc n = go (fromIntegral n : acc) (shiftR n 8) - -{-| - LSB-first ByteString to Natural number. --} -bytesAtom :: ByteString -> Natural -bytesAtom = BS.foldr' go 0 - where - go :: Word8 -> Natural -> Natural - go byt acc = shiftL acc 8 .|. fromIntegral byt - - --------------------------------------------------------------------------------- - -{-| - LSW-first Word Vector to Natural number. --} -wordsAtom :: Vector Word -> Natural -wordsAtom = VP.foldr' go 0 - where - go :: Word -> Natural -> Natural - go wor acc = shiftL acc BIT .|. fromIntegral wor - -{-| - Natural number to LSW-first Word Vector. --} -atomWords :: Natural -> Vector Word -atomWords = VP.fromList . go [] - where - go acc 0 = reverse acc - go acc n = go (fromIntegral n : acc) (shiftR n BIT) diff --git a/pkg/hs/urbit-atom/package.yaml b/pkg/hs/urbit-atom/package.yaml deleted file mode 100644 index 088da5055..000000000 --- a/pkg/hs/urbit-atom/package.yaml +++ /dev/null @@ -1,92 +0,0 @@ -name: urbit-atom -version: 0.10.1 -license: MIT -license-file: LICENSE - -ghc-options: - - -Wall - - -Werror - - -Wno-type-defaults - - -Wno-unused-matches - - -Wno-name-shadowing - - -Wno-unbanged-strict-patterns - - -O2 - -library: - source-dirs: lib - dependencies: - - base - - bytestring - - ghc-prim - - integer-gmp - - primitive - - text - - vector - -tests: - urbit-atom-tests: - source-dirs: test - main: Main.hs - ghc-options: "-threaded -rtsopts -with-rtsopts=-N" - dependencies: - - base - - bytestring - - QuickCheck - - text - - urbit-atom - - vector - -benchmarks: - urbit-atom-bench: - source-dirs: bench - main: Main.hs - ghc-options: "-threaded -rtsopts -with-rtsopts=-N" - dependencies: - - base - - bytestring - - criterion - - urbit-atom - -default-extensions: - - ApplicativeDo - - BangPatterns - - BlockArguments - - DataKinds - - DefaultSignatures - - DeriveAnyClass - - DeriveDataTypeable - - DeriveFoldable - - DeriveGeneric - - DeriveTraversable - - DerivingStrategies - - EmptyCase - - EmptyDataDecls - - FlexibleContexts - - FlexibleInstances - - FunctionalDependencies - - GADTs - - GeneralizedNewtypeDeriving - - LambdaCase - - MagicHash - - MultiParamTypeClasses - - NamedFieldPuns - - NoImplicitPrelude - - NumericUnderscores - - OverloadedStrings - - PackageImports - - PartialTypeSignatures - - PatternSynonyms - - QuasiQuotes - - Rank2Types - - RankNTypes - - RecordWildCards - - ScopedTypeVariables - - StandaloneDeriving - - TemplateHaskell - - TupleSections - - TypeApplications - - TypeFamilies - - TypeOperators - - UnboxedTuples - - UnicodeSyntax - - ViewPatterns diff --git a/pkg/hs/urbit-atom/test/Main.hs b/pkg/hs/urbit-atom/test/Main.hs deleted file mode 100644 index 0ba9611cc..000000000 --- a/pkg/hs/urbit-atom/test/Main.hs +++ /dev/null @@ -1,183 +0,0 @@ -{-# OPTIONS_GHC -Wno-deprecations -Wno-orphans #-} - - -module Main (main) where - --------------------------------------------------------------------------------- - -import Data.IORef -import Numeric.Natural -import Prelude -import System.Exit -import System.IO.Unsafe -import Test.QuickCheck - -import Control.Monad (when) -import Data.ByteString (ByteString) -import Data.Vector.Primitive (Prim, Vector) - -import qualified Data.ByteString as BS -import qualified Data.ByteString.Unsafe as BS -import qualified Data.Vector.Primitive as VP -import qualified Urbit.Atom.Fast as F -import qualified Urbit.Atom.Slow as S - - --- Instances ------------------------------------------------------------------- - -instance Arbitrary Natural where - arbitrary = fromInteger . abs <$> arbitrary - -instance Arbitrary ByteString where - arbitrary = BS.pack <$> arbitrary - -instance (Prim a, Arbitrary a) => Arbitrary (Vector a) where - arbitrary = VP.fromList <$> arbitrary - - --- Utils ----------------------------------------------------------------------- - -stripBytes :: ByteString -> ByteString -stripBytes buf = BS.take (len - go 0 (len - 1)) buf - where - len = BS.length buf - go n i | i < 0 = n - | 0 == BS.unsafeIndex buf i = go (n + 1) (i - 1) - | otherwise = n - -stripWords :: Vector Word -> Vector Word -stripWords vec = VP.take (len - go 0 (len - 1)) vec - where - len = VP.length vec - go n i | i < 0 = n - | 0 == VP.unsafeIndex vec i = go (n + 1) (i - 1) - | otherwise = n - -dumpLoad :: Eq i => (i -> o) -> (o -> i) -> (i -> Bool) -dumpLoad dump load x = x == load (dump x) - -loadDump :: Eq o => (o -> i) -> (i -> o) -> (o -> o) -> (o -> Bool) -loadDump load dump norm x = norm x == dump (load x) - - --- Test Reference Implementation ----------------------------------------------- - -prop_atom_bytes_roundtrip :: Natural -> Bool -prop_atom_bytes_roundtrip = dumpLoad S.atomBytes S.bytesAtom - -prop_atom_words_roundtrip :: Natural -> Bool -prop_atom_words_roundtrip = dumpLoad S.atomWords S.wordsAtom - -prop_bytes_atom_roundtrip :: ByteString -> Bool -prop_bytes_atom_roundtrip = loadDump S.bytesAtom S.atomBytes stripBytes - -prop_words_atom_roundtrip :: Vector Word -> Bool -prop_words_atom_roundtrip = loadDump S.wordsAtom S.atomWords stripWords - - --- Test Fast Implementation ---------------------------------------------------- - -prop_fast_atom_bytes_roundtrip :: Natural -> Bool -prop_fast_atom_bytes_roundtrip = dumpLoad F.atomBytes F.bytesAtom - -prop_fast_atom_words_roundtrip :: Natural -> Bool -prop_fast_atom_words_roundtrip = dumpLoad F.atomWords F.wordsAtom - -prop_fast_bytes_atom_roundtrip :: ByteString -> Bool -prop_fast_bytes_atom_roundtrip = loadDump F.bytesAtom F.atomBytes stripBytes - -prop_fast_words_atom_roundtrip :: Vector Word -> Bool -prop_fast_words_atom_roundtrip = loadDump F.wordsAtom F.atomWords stripWords - - --- Fast and Reference Implementations are the Same ----------------------------- - -prop_fast_words_atom_correct :: Vector Word -> Bool -prop_fast_words_atom_correct x = F.wordsAtom x == S.wordsAtom x - -prop_fast_atom_words_correct :: Natural -> Bool -prop_fast_atom_words_correct x = F.atomWords x == S.atomWords x - -prop_fast_bytes_atom_correct :: ByteString -> Bool -prop_fast_bytes_atom_correct x = F.bytesAtom x == S.bytesAtom x - -prop_fast_atom_import_correct :: ByteString -> Bool -prop_fast_atom_import_correct x = F.importBytes x == S.bytesAtom x - -prop_fast_atom_bytes_correct :: Natural -> Bool -prop_fast_atom_bytes_correct x = F.atomBytes x == S.atomBytes x - -prop_fast_atom_export_correct :: Natural -> Bool -prop_fast_atom_export_correct x = F.exportBytes x == S.atomBytes x - - --------------------------------------------------------------------------------- - -failed :: IORef Int -failed = unsafePerformIO (newIORef 0) - -checkProp :: Testable prop => String -> prop -> IO () -checkProp nm chk = do - putStrLn nm - res <- quickCheckResult chk - putStrLn "" - - case res of - Success{} -> pure () - _ -> modifyIORef' failed succ - -main :: IO () -main = do - checkProp "Reference: Atom <-> ByteString roundtrip" - prop_atom_bytes_roundtrip - - checkProp "Reference: Atom <-> Vector Word roundtrip" - prop_atom_words_roundtrip - - checkProp "Reference: ByteString <-> Atom roundtrip" - prop_bytes_atom_roundtrip - - checkProp "Reference: Vector Word <-> Atom roundtrip" - prop_words_atom_roundtrip - - checkProp "Fast: Atom <-> ByteString roundtrip" - prop_fast_atom_bytes_roundtrip - - checkProp "Fast: Atom <-> Vector Word roundtrip" - prop_fast_atom_words_roundtrip - - checkProp "Fast: Bytestring <-> Atom roundtrip" - prop_fast_bytes_atom_roundtrip - - checkProp "Fast: Export->Import roundtrip" $ do - withMaxSuccess 100000 (dumpLoad F.exportBytes F.importBytes) - - checkProp "Fast: Import->Export roundtrip" $ do - withMaxSuccess 10000 (loadDump F.importBytes F.exportBytes stripBytes) - - checkProp "Fast: Vector Word <-> Atom roundtrip" - prop_fast_words_atom_roundtrip - - checkProp "Fast matches reference: Vector Words -> Atom" - (withMaxSuccess 10000 prop_fast_words_atom_correct) - - checkProp "Fast matches reference: Atom -> Vector Word" - (withMaxSuccess 10000 prop_fast_atom_words_correct) - - checkProp "Fast matches reference: ByteString -> Atom" - (withMaxSuccess 10000 prop_fast_bytes_atom_correct) - - checkProp "Fast matches reference: Atom -> ByteString" - (withMaxSuccess 10000 prop_fast_atom_bytes_correct) - - checkProp "Fast matches reference: Atom Import" - (withMaxSuccess 10000 prop_fast_atom_import_correct) - - checkProp "Fast matches reference: Atom Export" - (withMaxSuccess 10000 prop_fast_atom_export_correct) - - res <- readIORef failed - when (res /= 0) $ do - putStrLn $ "FAILURE: " <> show res <> " tests failed." - exitWith (ExitFailure 1) - putStrLn $ "SUCCESS: All tests passed" diff --git a/pkg/hs/urbit-azimuth/.gitignore b/pkg/hs/urbit-azimuth/.gitignore deleted file mode 100644 index 36cb56803..000000000 --- a/pkg/hs/urbit-azimuth/.gitignore +++ /dev/null @@ -1 +0,0 @@ -urbit-azimuth.cabal diff --git a/pkg/hs/urbit-azimuth/LICENSE b/pkg/hs/urbit-azimuth/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/urbit-azimuth/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/urbit-azimuth/Urbit/Azimuth.hs b/pkg/hs/urbit-azimuth/Urbit/Azimuth.hs deleted file mode 100644 index 5cf653601..000000000 --- a/pkg/hs/urbit-azimuth/Urbit/Azimuth.hs +++ /dev/null @@ -1,5 +0,0 @@ -module Urbit.Azimuth where - -import Network.Ethereum.Contract.TH - -[abiFrom|azimuth.json|] diff --git a/pkg/hs/urbit-azimuth/azimuth.json b/pkg/hs/urbit-azimuth/azimuth.json deleted file mode 100644 index 148d1925c..000000000 --- a/pkg/hs/urbit-azimuth/azimuth.json +++ /dev/null @@ -1 +0,0 @@ -[{"constant":true,"inputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"name":"escapeRequestsIndexes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_whose","type":"address"}],"name":"getOwnedPoints","outputs":[{"name":"ownedPoints","type":"uint32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"votingFor","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"rights","outputs":[{"name":"owner","type":"address"},{"name":"managementProxy","type":"address"},{"name":"spawnProxy","type":"address"},{"name":"votingProxy","type":"address"},{"name":"transferProxy","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"transferringFor","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_sponsor","type":"uint32"}],"name":"isSponsor","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getManagementProxy","outputs":[{"name":"manager","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getContinuityNumber","outputs":[{"name":"continuityNumber","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"},{"name":"","type":"uint256"}],"name":"sponsoring","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_whose","type":"address"}],"name":"getOwnedPointCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"}],"name":"doEscape","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_whose","type":"address"},{"name":"_index","type":"uint256"}],"name":"getOwnedPointAtIndex","outputs":[{"name":"point","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getTransferProxy","outputs":[{"name":"transferProxy","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_proxy","type":"address"}],"name":"isSpawnProxy","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"pointsOwnedBy","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"operators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getSpawnCount","outputs":[{"name":"spawnCount","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"},{"name":"_proxy","type":"address"}],"name":"setSpawnProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"},{"name":"_proxy","type":"address"}],"name":"setTransferProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"},{"name":"","type":"uint32"}],"name":"sponsoringIndexes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_proxy","type":"address"}],"name":"isTransferProxy","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getVotingProxy","outputs":[{"name":"voter","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_proxy","type":"address"}],"name":"isManagementProxy","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint32"}],"name":"votingForIndexes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"isLive","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sponsor","type":"uint32"}],"name":"getEscapeRequests","outputs":[{"name":"requests","type":"uint32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getSponsor","outputs":[{"name":"sponsor","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_sponsor","type":"uint32"}],"name":"getEscapeRequestsCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint32"}],"name":"pointOwnerIndexes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_proxy","type":"address"}],"name":"getManagerFor","outputs":[{"name":"mfor","type":"uint32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint32"}],"name":"managerForIndexes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"managerFor","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"isActive","outputs":[{"name":"equals","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getOwner","outputs":[{"name":"owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"}],"name":"points","outputs":[{"name":"encryptionKey","type":"bytes32"},{"name":"authenticationKey","type":"bytes32"},{"name":"hasSponsor","type":"bool"},{"name":"active","type":"bool"},{"name":"escapeRequested","type":"bool"},{"name":"sponsor","type":"uint32"},{"name":"escapeRequestedTo","type":"uint32"},{"name":"cryptoSuiteVersion","type":"uint32"},{"name":"keyRevisionNumber","type":"uint32"},{"name":"continuityNumber","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_proxy","type":"address"}],"name":"getSpawningForCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"hasBeenLinked","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_who","type":"address"}],"name":"canTransfer","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint32"}],"name":"spawningForIndexes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"hasSponsor","outputs":[{"name":"has","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"}],"name":"activatePoint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getSpawned","outputs":[{"name":"spawned","type":"uint32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"},{"name":"_proxy","type":"address"}],"name":"setManagementProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_who","type":"address"}],"name":"canSpawnAs","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getKeyRevisionNumber","outputs":[{"name":"revision","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_who","type":"address"}],"name":"canManage","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_proxy","type":"address"}],"name":"getTransferringFor","outputs":[{"name":"tfor","type":"uint32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getPointSize","outputs":[{"name":"_size","type":"uint8"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_sponsor","type":"uint32"}],"name":"getSponsoringCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_proxy","type":"address"}],"name":"getSpawningFor","outputs":[{"name":"sfor","type":"uint32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"isEscaping","outputs":[{"name":"escaping","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint32"},{"name":"","type":"uint256"}],"name":"escapeRequests","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"},{"name":"_proxy","type":"address"}],"name":"setVotingProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_sponsor","type":"uint32"}],"name":"getSponsoring","outputs":[{"name":"sponsees","type":"uint32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"},{"name":"_sponsor","type":"uint32"}],"name":"setEscapeRequest","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"}],"name":"isOperator","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_who","type":"address"}],"name":"canVoteAs","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_primary","type":"string"},{"name":"_secondary","type":"string"},{"name":"_tertiary","type":"string"}],"name":"setDnsDomains","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"}],"name":"loseSponsor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_operator","type":"address"},{"name":"_approved","type":"bool"}],"name":"setOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"}],"name":"registerSpawned","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getKeys","outputs":[{"name":"crypt","type":"bytes32"},{"name":"auth","type":"bytes32"},{"name":"suite","type":"uint32"},{"name":"revision","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"}],"name":"cancelEscape","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_address","type":"address"}],"name":"isOwner","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_proxy","type":"address"}],"name":"getManagerForCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint32"}],"name":"transferringForIndexes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_proxy","type":"address"}],"name":"getVotingFor","outputs":[{"name":"vfor","type":"uint32[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"spawningFor","outputs":[{"name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"},{"name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_proxy","type":"address"}],"name":"getTransferringForCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_proxy","type":"address"}],"name":"isVotingProxy","outputs":[{"name":"result","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getPrefix","outputs":[{"name":"prefix","type":"uint16"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"dnsDomains","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"}],"name":"incrementContinuityNumber","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getSpawnProxy","outputs":[{"name":"spawnProxy","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"}],"name":"getEscapeRequest","outputs":[{"name":"escape","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_point","type":"uint32"},{"name":"_encryptionKey","type":"bytes32"},{"name":"_authenticationKey","type":"bytes32"},{"name":"_cryptoSuiteVersion","type":"uint32"}],"name":"setKeys","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_proxy","type":"address"}],"name":"getVotingForCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_point","type":"uint32"},{"name":"_sponsor","type":"uint32"}],"name":"isRequestingEscapeTo","outputs":[{"name":"equals","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"owner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"}],"name":"Activated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"prefix","type":"uint32"},{"indexed":true,"name":"child","type":"uint32"}],"name":"Spawned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"sponsor","type":"uint32"}],"name":"EscapeRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"sponsor","type":"uint32"}],"name":"EscapeCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"sponsor","type":"uint32"}],"name":"EscapeAccepted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"sponsor","type":"uint32"}],"name":"LostSponsor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":false,"name":"encryptionKey","type":"bytes32"},{"indexed":false,"name":"authenticationKey","type":"bytes32"},{"indexed":false,"name":"cryptoSuiteVersion","type":"uint32"},{"indexed":false,"name":"keyRevisionNumber","type":"uint32"}],"name":"ChangedKeys","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":false,"name":"number","type":"uint32"}],"name":"BrokeContinuity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"spawnProxy","type":"address"}],"name":"ChangedSpawnProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"transferProxy","type":"address"}],"name":"ChangedTransferProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"managementProxy","type":"address"}],"name":"ChangedManagementProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"point","type":"uint32"},{"indexed":true,"name":"votingProxy","type":"address"}],"name":"ChangedVotingProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"primary","type":"string"},{"indexed":false,"name":"secondary","type":"string"},{"indexed":false,"name":"tertiary","type":"string"}],"name":"ChangedDns","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}] diff --git a/pkg/hs/urbit-azimuth/package.yaml b/pkg/hs/urbit-azimuth/package.yaml deleted file mode 100644 index 86b6e74de..000000000 --- a/pkg/hs/urbit-azimuth/package.yaml +++ /dev/null @@ -1,55 +0,0 @@ -name: urbit-azimuth -version: 0.10.1 -license: MIT -license-file: LICENSE - -library: - source-dirs: . - -dependencies: - - base - - web3 - -default-extensions: - - ApplicativeDo - - BangPatterns - - BlockArguments - - DataKinds - - DefaultSignatures - - DeriveAnyClass - - DeriveDataTypeable - - DeriveFoldable - - DeriveGeneric - - DeriveTraversable - - DerivingStrategies - - EmptyCase - - EmptyDataDecls - - FlexibleContexts - - FlexibleInstances - - FunctionalDependencies - - GADTs - - GeneralizedNewtypeDeriving - - LambdaCase - - MagicHash - - MultiParamTypeClasses - - NamedFieldPuns - - NoImplicitPrelude - - NumericUnderscores - - OverloadedStrings - - PackageImports - - PartialTypeSignatures - - PatternSynonyms - - QuasiQuotes - - Rank2Types - - RankNTypes - - RecordWildCards - - ScopedTypeVariables - - StandaloneDeriving - - TemplateHaskell - - TupleSections - - TypeApplications - - TypeFamilies - - TypeOperators - - UnboxedTuples - - UnicodeSyntax - - ViewPatterns diff --git a/pkg/hs/urbit-eventlog-lmdb/.gitignore b/pkg/hs/urbit-eventlog-lmdb/.gitignore deleted file mode 100644 index 65e7ea818..000000000 --- a/pkg/hs/urbit-eventlog-lmdb/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.stack-work -*.cabal -test/gold/*.writ diff --git a/pkg/hs/urbit-eventlog-lmdb/LICENSE b/pkg/hs/urbit-eventlog-lmdb/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/urbit-eventlog-lmdb/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/urbit-eventlog-lmdb/lib/Urbit/EventLog/Event.hs b/pkg/hs/urbit-eventlog-lmdb/lib/Urbit/EventLog/Event.hs deleted file mode 100644 index 1e0b79e63..000000000 --- a/pkg/hs/urbit-eventlog-lmdb/lib/Urbit/EventLog/Event.hs +++ /dev/null @@ -1,21 +0,0 @@ -module Urbit.EventLog.Event - ( buildLogEvent - , parseLogEvent - ) - where - -import ClassyPrelude -import Data.Serialize -import Urbit.Noun - -buildLogEvent :: Mug -> Noun -> ByteString -buildLogEvent mug noun = (runPut $ putWord32le mug) ++ (jamBS noun) - -parseLogEvent :: MonadIO m => ByteString -> m (Mug, Noun) -parseLogEvent bs = do - let (prefix, suffix) = splitAt 4 bs - let mug = case runGet getWord32le prefix of - Left _ -> error "Impossible misread of word32 in parseLogEvent" - Right x -> x - n <- cueBSExn suffix - pure (mug, n) diff --git a/pkg/hs/urbit-eventlog-lmdb/lib/Urbit/EventLog/LMDB.hs b/pkg/hs/urbit-eventlog-lmdb/lib/Urbit/EventLog/LMDB.hs deleted file mode 100644 index 819078889..000000000 --- a/pkg/hs/urbit-eventlog-lmdb/lib/Urbit/EventLog/LMDB.hs +++ /dev/null @@ -1,466 +0,0 @@ -{-| - High-Level Event-Log Interface - - TODO Effects storage logic is messy. --} - -module Urbit.EventLog.LMDB - ( LogIdentity(..) - , EventLog - , identity - , nextEv - , lastEv - , new - , existing - , streamEvents - , appendEvents - , trimEvents - , streamEffectsRows - , writeEffectsRow - ) -where - -import ClassyPrelude - -import Data.RAcquire -import Database.LMDB.Raw - -import Data.Conduit (ConduitT, yield) -import Foreign.Marshal.Alloc (allocaBytes) -import Foreign.Ptr (Ptr, castPtr, nullPtr) -import Foreign.Storable (peek, poke, sizeOf) -import RIO (HasLogFunc, RIO, display, logDebug, runRIO) -import Urbit.Noun (DecodeErr, Noun, Ship) -import Urbit.Noun (deriveNoun, fromNounExn, toNoun, fromNoun) -import Urbit.Noun (atomBytes, bytesAtom) -import Urbit.Noun.Core (pattern Atom) - - -import qualified Data.ByteString.Unsafe as BU -import qualified Data.Vector as V - - --- Public Types ---------------------------------------------------------------- - -data LogIdentity = LogIdentity - { who :: !Ship - , isFake :: !Bool - , lifecycleLen :: !Word - } deriving (Eq, Ord, Show) - -deriveNoun ''LogIdentity - - --- Types ----------------------------------------------------------------------- - -type Env = MDB_env -type Val = MDB_val -type Txn = MDB_txn -type Dbi = MDB_dbi -type Cur = MDB_cursor - -data EventLog = EventLog - { env :: Env - , _metaTbl :: Dbi - , eventsTbl :: Dbi - , effectsTbl :: Dbi - , identity :: LogIdentity - , numEvents :: TVar Word64 - } - -nextEv :: EventLog -> STM Word64 -nextEv = fmap (+1) . lastEv - -lastEv :: EventLog -> STM Word64 -lastEv = readTVar . numEvents - -data EventLogExn - = NoLogIdentity - | MissingLogVersion - | BadLogVersion Word64 - | MissingEvent Word64 - | BadNounInLogIdentity ByteString DecodeErr ByteString - | BadKeyInEventLog - | BadWriteLogIdentity LogIdentity - | BadWriteEvent Word64 - | BadWriteEffect Word64 - deriving Show - - --- Instances ------------------------------------------------------------------- - -instance Exception EventLogExn where - - --- Utils ----------------------------------------------------------------------- - -io :: MonadIO m => IO a -> m a -io = liftIO - - --- Open/Close an Event Log ----------------------------------------------------- - -rawOpen :: MonadIO m => FilePath -> m Env -rawOpen dir = io $ do - env <- mdb_env_create - mdb_env_set_maxdbs env 3 - mdb_env_set_mapsize env (1024 * 1024 * 1024 * 1024) - mdb_env_open env dir [] - pure env - -create :: HasLogFunc e => FilePath -> LogIdentity -> RIO e EventLog -create dir id = do - logDebug $ display (pack @Text $ "Creating LMDB database: " <> dir) - logDebug $ display (pack @Text $ "Log Identity: " <> show id) - env <- rawOpen dir - (m, e, f) <- createTables env - clearEvents env e - writeIdent env m id - EventLog env m e f id <$> newTVarIO 0 - where - createTables env = - rwith (writeTxn env) $ \txn -> io $ - (,,) <$> mdb_dbi_open txn (Just "META") [MDB_CREATE] - <*> mdb_dbi_open txn (Just "EVENTS") [MDB_CREATE, MDB_INTEGERKEY] - <*> mdb_dbi_open txn (Just "EFFECTS") [MDB_CREATE, MDB_INTEGERKEY] - -open :: HasLogFunc e => FilePath -> RIO e EventLog -open dir = do - logDebug $ display (pack @Text $ "Opening LMDB database: " <> dir) - env <- rawOpen dir - (m, e, f) <- openTables env - id <- getIdent env m - logDebug $ display (pack @Text $ "Log Identity: " <> show id) - numEvs <- getNumEvents env e - EventLog env m e f id <$> newTVarIO numEvs - where - openTables env = - rwith (writeTxn env) $ \txn -> io $ - (,,) <$> mdb_dbi_open txn (Just "META") [] - <*> mdb_dbi_open txn (Just "EVENTS") [MDB_INTEGERKEY] - <*> mdb_dbi_open txn (Just "EFFECTS") [MDB_CREATE, MDB_INTEGERKEY] - -close :: HasLogFunc e => FilePath -> EventLog -> RIO e () -close dir (EventLog env meta events effects _ _) = do - logDebug $ display (pack @Text $ "Closing LMDB database: " <> dir) - io $ do mdb_dbi_close env meta - mdb_dbi_close env events - mdb_dbi_close env effects - mdb_env_sync_flush env - mdb_env_close env - - --- Create a new event log or open an existing one. ----------------------------- - -existing :: HasLogFunc e => FilePath -> RAcquire e EventLog -existing dir = mkRAcquire (open dir) (close dir) - -new :: HasLogFunc e => FilePath -> LogIdentity -> RAcquire e EventLog -new dir id = mkRAcquire (create dir id) (close dir) - - --- Read/Write Log Identity ----------------------------------------------------- - -{-| - A read-only transaction that commits at the end. - - Use this when opening database handles. --} -_openTxn :: Env -> RAcquire e Txn -_openTxn env = mkRAcquire begin commit - where - begin = io $ mdb_txn_begin env Nothing True - commit = io . mdb_txn_commit - -{-| - A read-only transaction that aborts at the end. - - Use this when reading data from already-opened databases. --} -readTxn :: Env -> RAcquire e Txn -readTxn env = mkRAcquire begin abort - where - begin = io $ mdb_txn_begin env Nothing True - abort = io . mdb_txn_abort - -{-| - A read-write transaction that commits upon sucessful completion and - aborts on exception. - - Use this when reading data from already-opened databases. --} -writeTxn :: Env -> RAcquire e Txn -writeTxn env = mkRAcquireType begin finalize - where - begin = io $ mdb_txn_begin env Nothing False - finalize txn = io . \case - ReleaseNormal -> mdb_txn_commit txn - ReleaseEarly -> mdb_txn_commit txn - ReleaseException -> mdb_txn_abort txn - -cursor :: Txn -> Dbi -> RAcquire e Cur -cursor txn dbi = mkRAcquire open close - where - open = io $ mdb_cursor_open txn dbi - close = io . mdb_cursor_close - -getIdent :: HasLogFunc e => Env -> Dbi -> RIO e LogIdentity -getIdent env dbi = do - logDebug "Reading log identity" - getTbl env >>= traverse decodeIdent >>= \case - Nothing -> throwIO NoLogIdentity - Just li -> pure li - where - decodeIdent :: (Noun, Noun, Noun, Noun) -> RIO e LogIdentity - decodeIdent (ver, who, fake, life) = do - -- Verify log version - case fromNoun ver of - Just 1 -> pure () - Just x -> throwIO $ BadLogVersion x - Nothing -> throwIO $ MissingLogVersion - - fromNounExn $ toNoun (who, fake, life) - - getTbl :: Env -> RIO e (Maybe (Noun, Noun, Noun, Noun)) - getTbl env = do - rwith (readTxn env) $ \txn -> do - version <- getMb txn dbi "version" - who <- getMb txn dbi "who" - fake <- getMb txn dbi "fake" - life <- getMb txn dbi "life" - pure $ (,,,) <$> version <*> who <*> fake <*> life - -writeIdent :: HasLogFunc e => Env -> Dbi -> LogIdentity -> RIO e () -writeIdent env metaTbl ident@LogIdentity{..} = do - logDebug "Writing log identity" - let flags = compileWriteFlags [] - rwith (writeTxn env) $ \txn -> do - w <- putAtom flags txn metaTbl "version" (toNoun (1 :: Integer)) - x <- putAtom flags txn metaTbl "who" (toNoun who) - y <- putAtom flags txn metaTbl "fake" (toNoun isFake) - z <- putAtom flags txn metaTbl "life" (toNoun lifecycleLen) - unless (w && x && y && z) $ do - throwIO (BadWriteLogIdentity ident) - - --- Latest Event Number --------------------------------------------------------- - -getNumEvents :: Env -> Dbi -> RIO e Word64 -getNumEvents env eventsTbl = - rwith (readTxn env) $ \txn -> - rwith (cursor txn eventsTbl) $ \cur -> - withKVPtrs' nullVal nullVal $ \pKey pVal -> - io $ mdb_cursor_get MDB_LAST cur pKey pVal >>= \case - False -> pure 0 - True -> peek pKey >>= mdbValToWord64 - - --- Write Events ---------------------------------------------------------------- - -clearEvents :: Env -> Dbi -> RIO e () -clearEvents env eventsTbl = - rwith (writeTxn env) $ \txn -> - rwith (cursor txn eventsTbl) $ \cur -> - withKVPtrs' nullVal nullVal $ \pKey pVal -> do - let loop = io (mdb_cursor_get MDB_LAST cur pKey pVal) >>= \case - False -> pure () - True -> do io $ mdb_cursor_del (compileWriteFlags []) cur - loop - loop - -appendEvents :: EventLog -> Vector ByteString -> RIO e () -appendEvents log !events = do - numEvs <- atomically $ readTVar (numEvents log) - next <- pure (numEvs + 1) - doAppend $ zip [next..] $ toList events - atomically $ writeTVar (numEvents log) (numEvs + word (length events)) - where - flags = compileWriteFlags [MDB_NOOVERWRITE] - doAppend = \kvs -> - rwith (writeTxn $ env log) $ \txn -> - for_ kvs $ \(k,v) -> do - putBytes flags txn (eventsTbl log) k v >>= \case - True -> pure () - False -> throwIO (BadWriteEvent k) - -writeEffectsRow :: MonadIO m => EventLog -> Word64 -> ByteString -> m () -writeEffectsRow log k v = io $ runRIO () $ do - let flags = compileWriteFlags [] - rwith (writeTxn $ env log) $ \txn -> - putBytes flags txn (effectsTbl log) k v >>= \case - True -> pure () - False -> throwIO (BadWriteEffect k) - - --- Read Events ----------------------------------------------------------------- - -trimEvents :: HasLogFunc e => EventLog -> Word64 -> RIO e () -trimEvents log start = do - last <- atomically (lastEv log) - rwith (writeTxn $ env log) $ \txn -> - for_ [start..last] $ \eId -> - withWordPtr eId $ \pKey -> do - let key = MDB_val 8 (castPtr pKey) - found <- io $ mdb_del txn (eventsTbl log) key Nothing - unless found $ - throwIO (MissingEvent eId) - atomically $ writeTVar (numEvents log) (pred start) - -streamEvents :: MonadIO m => EventLog -> Word64 -> ConduitT () ByteString m () -streamEvents log first = do - batch <- io $ runRIO () $ readBatch log first - unless (null batch) $ do - for_ batch yield - streamEvents log (first + word (length batch)) - -streamEffectsRows :: forall e. HasLogFunc e - => EventLog -> Word64 - -> ConduitT () (Word64, ByteString) (RIO e) () -streamEffectsRows log = go - where - go :: Word64 -> ConduitT () (Word64, ByteString) (RIO e) () - go next = do - batch <- lift $ readRowsBatch (env log) (effectsTbl log) next - unless (null batch) $ do - for_ batch yield - go (next + fromIntegral (length batch)) - -{-| - Read 1000 rows from the events table, starting from event `first`. - - Throws `MissingEvent` if an event was missing from the log. --} -readBatch :: EventLog -> Word64 -> RIO e (V.Vector ByteString) -readBatch log first = start - where - start = do - last <- atomically (lastEv log) - if (first > last) - then pure mempty - else readRows $ fromIntegral $ min 1000 $ ((last+1) - first) - - assertFound :: Word64 -> Bool -> RIO e () - assertFound id found = do - unless found $ throwIO $ MissingEvent id - - readRows count = - withWordPtr first $ \pIdx -> - withKVPtrs' (MDB_val 8 (castPtr pIdx)) nullVal $ \pKey pVal -> - rwith (readTxn $ env log) $ \txn -> - rwith (cursor txn $ eventsTbl log) $ \cur -> do - assertFound first =<< io (mdb_cursor_get MDB_SET_KEY cur pKey pVal) - fetchRows count cur pKey pVal - - fetchRows count cur pKey pVal = do - env <- ask - V.generateM count $ \i -> runRIO env $ do - key <- io $ peek pKey >>= mdbValToWord64 - val <- io $ peek pVal >>= mdbValToBytes - idx <- pure (first + word i) - unless (key == idx) $ throwIO $ MissingEvent idx - when (count /= succ i) $ do - assertFound idx =<< io (mdb_cursor_get MDB_NEXT cur pKey pVal) - pure val - -{-| - Read 1000 rows from the database, starting from key `first`. --} -readRowsBatch :: forall e. HasLogFunc e - => Env -> Dbi -> Word64 -> RIO e (V.Vector (Word64, ByteString)) -readRowsBatch env dbi first = readRows - where - readRows = do - logDebug $ display ("(readRowsBatch) From: " <> tshow first) - withWordPtr first $ \pIdx -> - withKVPtrs' (MDB_val 8 (castPtr pIdx)) nullVal $ \pKey pVal -> - rwith (readTxn env) $ \txn -> - rwith (cursor txn dbi) $ \cur -> - io (mdb_cursor_get MDB_SET_RANGE cur pKey pVal) >>= \case - False -> pure mempty - True -> V.unfoldrM (fetchBatch cur pKey pVal) 1000 - - fetchBatch :: Cur -> Ptr Val -> Ptr Val -> Word - -> RIO e (Maybe ((Word64, ByteString), Word)) - fetchBatch cur pKey pVal 0 = pure Nothing - fetchBatch cur pKey pVal n = do - key <- io $ peek pKey >>= mdbValToWord64 - val <- io $ peek pVal >>= mdbValToBytes - io $ mdb_cursor_get MDB_NEXT cur pKey pVal >>= \case - False -> pure $ Just ((key, val), 0) - True -> pure $ Just ((key, val), pred n) - - --- Utils ----------------------------------------------------------------------- - -withKVPtrs' :: (MonadIO m, MonadUnliftIO m) - => Val -> Val -> (Ptr Val -> Ptr Val -> m a) -> m a -withKVPtrs' k v cb = - withRunInIO $ \run -> - withKVPtrs k v $ \x y -> run (cb x y) - -nullVal :: MDB_val -nullVal = MDB_val 0 nullPtr - -word :: Int -> Word64 -word = fromIntegral - -assertExn :: Exception e => Bool -> e -> IO () -assertExn True _ = pure () -assertExn False e = throwIO e - -byteStringAsMdbVal :: ByteString -> (MDB_val -> IO a) -> IO a -byteStringAsMdbVal bs k = - BU.unsafeUseAsCStringLen bs $ \(ptr,sz) -> - k (MDB_val (fromIntegral sz) (castPtr ptr)) - -mdbValToWord64 :: MDB_val -> IO Word64 -mdbValToWord64 (MDB_val sz ptr) = do - assertExn (sz == 8) BadKeyInEventLog - peek (castPtr ptr) - -withWord64AsMDBval :: (MonadIO m, MonadUnliftIO m) - => Word64 -> (MDB_val -> m a) -> m a -withWord64AsMDBval w cb = do - withWordPtr w $ \p -> - cb (MDB_val (fromIntegral (sizeOf w)) (castPtr p)) - -withWordPtr :: (MonadIO m, MonadUnliftIO m) - => Word64 -> (Ptr Word64 -> m a) -> m a -withWordPtr w cb = - withRunInIO $ \run -> - allocaBytes (sizeOf w) (\p -> poke p w >> run (cb p)) - - --- Lower-Level Operations ------------------------------------------------------ - -getMb :: MonadIO m => Txn -> Dbi -> ByteString -> m (Maybe Noun) -getMb txn db key = - io $ - byteStringAsMdbVal key $ \mKey -> - mdb_get txn db mKey >>= traverse (mdbValToNoun key) - -mdbValToBytes :: MDB_val -> IO ByteString -mdbValToBytes (MDB_val sz ptr) = do - BU.unsafePackCStringLen (castPtr ptr, fromIntegral sz) - -mdbValToNoun :: ByteString -> MDB_val -> IO Noun -mdbValToNoun key (MDB_val sz ptr) = do - (Atom . bytesAtom) <$> BU.unsafePackCStringLen (castPtr ptr, fromIntegral sz) - -putAtom :: MonadIO m - => MDB_WriteFlags -> Txn -> Dbi -> ByteString -> Noun -> m Bool -putAtom flags txn db key val = - case val of - Atom a -> io $ - byteStringAsMdbVal key $ \mKey -> - byteStringAsMdbVal (atomBytes a) $ \mVal -> - mdb_put flags txn db mKey mVal - _ -> error "Impossible putAtom received cell" - -putBytes :: MonadIO m - => MDB_WriteFlags -> Txn -> Dbi -> Word64 -> ByteString -> m Bool -putBytes flags txn db id bs = - io $ - withWord64AsMDBval id $ \idVal -> - byteStringAsMdbVal bs $ \mVal -> - mdb_put flags txn db idVal mVal diff --git a/pkg/hs/urbit-eventlog-lmdb/package.yaml b/pkg/hs/urbit-eventlog-lmdb/package.yaml deleted file mode 100644 index 398e69a8b..000000000 --- a/pkg/hs/urbit-eventlog-lmdb/package.yaml +++ /dev/null @@ -1,72 +0,0 @@ -name: urbit-eventlog-lmdb -version: 0.10.4 -license: MIT -license-file: LICENSE - -library: - source-dirs: lib - ghc-options: - - -fwarn-incomplete-patterns - - -fwarn-unused-binds - - -fwarn-unused-imports - - -Werror - - -O2 - -dependencies: - - base - - cereal - - classy-prelude - - stm - - rio - - vector - - bytestring - - lmdb - - conduit - - racquire - - urbit-noun-core - - urbit-noun - -default-extensions: - - ApplicativeDo - - BangPatterns - - BlockArguments - - ConstraintKinds - - DataKinds - - DefaultSignatures - - DeriveAnyClass - - DeriveDataTypeable - - DeriveFoldable - - DeriveGeneric - - DeriveTraversable - - DerivingStrategies - - EmptyCase - - EmptyDataDecls - - FlexibleContexts - - FlexibleInstances - - FunctionalDependencies - - GADTs - - GeneralizedNewtypeDeriving - - LambdaCase - - MagicHash - - MultiParamTypeClasses - - NamedFieldPuns - - NoImplicitPrelude - - NumericUnderscores - - OverloadedStrings - - PackageImports - - PartialTypeSignatures - - PatternSynonyms - - QuasiQuotes - - Rank2Types - - RankNTypes - - RecordWildCards - - ScopedTypeVariables - - StandaloneDeriving - - TemplateHaskell - - TupleSections - - TypeApplications - - TypeFamilies - - TypeOperators - - UnboxedTuples - - UnicodeSyntax - - ViewPatterns diff --git a/pkg/hs/urbit-king/.gitignore b/pkg/hs/urbit-king/.gitignore deleted file mode 100644 index 65e7ea818..000000000 --- a/pkg/hs/urbit-king/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.stack-work -*.cabal -test/gold/*.writ diff --git a/pkg/hs/urbit-king/LICENSE b/pkg/hs/urbit-king/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/urbit-king/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/urbit-king/TODO.md b/pkg/hs/urbit-king/TODO.md deleted file mode 100644 index 2e3be7108..000000000 --- a/pkg/hs/urbit-king/TODO.md +++ /dev/null @@ -1,114 +0,0 @@ -# New IPC Protocol - -Stubbed out: - -- [x] Handle replacement events (stubbed out now b/c interface can't - handle unparsed nouns) -- [x] Handle IPC errors by killing serf process. -- [x] Handle `peek` and `pack` in `swimming` flow. -- [x] Documentation for `Urbit.Vere.Serf.IPC`. -- [x] Unstub slog/stder/dead callbacks on serf config. -- [x] Remove GoodParse hack in newRunCompute. -- [x] Bring back tank printing. -- [x] Handle serf stderr message correctly. -- [x] Bring back `logEvent`. -- [x] Snapshots should block until that event is commited to disk. -- [x] Hook up error callbacks to IO Drivers. -- [x] Do something useful with error callbacks from IO Drivers. - -Bugs: - -- [x] In non-daemon mode, serf slogs/stderr output that happens *before* - the terminal connects should still go to stderr. -- [x] Serf stderr should also be send (along with slogs) to all connected - terminals. -- [x] `king new` should reject pier directories that already exist. -- [x] In non-daemon-mode, ^D doesn't bring down Urbit properly. -- [x] Spinner updated multiple times with the same event, and this causes - logging of events to contain duplicates. - -King-Haskell specific features: - -- [x] Re-implement `collectFX` flow in Serf/Pier. -- [x] Hook up `collectFX` to CLI. -- [ ] Get `collect-all-fx` flow working again. - -Performance: - -- [x] Batching during replay. -- [x] Batching during normal operation. - -Optimization: - -- [x] IO Driver Event Prioritization - -Polish: - -- [x] Cleanup batching flow. -- [x] Think through how to shutdown the serf on exception. -- [x] King should shutdown promptly on ^C. Always takes 2s in practice. -- [x] Bring back progress bars. -- [x] Make sure replay progress bars go to stderr. -- [x] Logging for new IPC flow. -- [x] Logging for boot sequence. -- [x] Take snapshots on clean shutdown. - -# Misc Bugs - -- [ ] `king run --collect-fx` flag does nothing. Remove or implement. -- [x] Handle ^C in connected terminals. It should interrupt current - event (send SIGINT to serf, which will cause the current event to - fail promptly). -- [x] The terminal driver seems to have a race condition when spinner - changed too quickly. - - -# Take Advantage of New IPC Features - -- [ ] Hook up `scry` to drivers. - - Any immediate applications of this? - -- [ ] Allow scrys to go into the %work batching flow for better latency. - -- Handle event errors in other cases: - - [ ] Ames packet failures should print (but not too often). - - [ ] Incoming Http requests should produce 500 responses. - - [ ] Terminal event errors should be printed in connected terminals. - - [ ] Http client responses should be retried. - - -# Further IO Driver Startup Flow Betterment - -Implement Pier-wide process start events - -- [x] Handle %vega and exit effects. -- [x] Handle %trim effect -- [x] Inject entropy event on pier start: ``[//arvo [%wack ENT]]` -- [ ] Verbose flag: `-v` injects `[%verb ~]` - -- CLI event injection: `-I file-path`. The `file-path` is a jammed noun - representing an event: `[wire card]`. - - [x] Just parse it as an `Ev` for now. - - [ ] Make the serf IPC code not care about the shape of events and effects. - - [ ] Support invalid events throughout the system (use `Lenient`?) - -# Polish - -- [x] Goot logging output in non-verbose mode. -- [x] Command-Line flag to re-enable verbose output. - - -# Cleanup - -- [x] ShutdownSTM action that's passed to the terminal driver should - live in `KingEnv` and should be available to all drivers. -- [ ] Break most logic from `Main.hs` out into modules. -- [ ] Simplify `Main.hs` flows. -- [ ] Cleanup Terminal Driver code. -- [x] Spin off `racquire` into it's own package. -- [x] Spin off `urbit-noun-core` and `urbit-noun` packages. -- [x] Spin off `urbit-eventlog-lmdb` into it's own package. -- [ ] Spin off `Urbit.Vere.Serf` into it's own package - - Make it care less about the shape of events and effects. -- [ ] Spin off per-pier logic into it's own package. - - Probably `urbit-pier` diff --git a/pkg/hs/urbit-king/app/Main.hs b/pkg/hs/urbit-king/app/Main.hs deleted file mode 100644 index 8a57e92a7..000000000 --- a/pkg/hs/urbit-king/app/Main.hs +++ /dev/null @@ -1,2 +0,0 @@ -module Main (module Urbit.King.Main) where -import Urbit.King.Main diff --git a/pkg/hs/urbit-king/lib/Urbit/Arvo.hs b/pkg/hs/urbit-king/lib/Urbit/Arvo.hs deleted file mode 100644 index 4b3834528..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Arvo.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Urbit.Arvo - ( module Urbit.Arvo.Common - , module Urbit.Arvo.Effect - , module Urbit.Arvo.Event - , FX - ) where - -import Urbit.Arvo.Common -import Urbit.Arvo.Effect -import Urbit.Arvo.Event -import Urbit.Noun.Conversions (Lenient) - -type FX = [Lenient Ef] diff --git a/pkg/hs/urbit-king/lib/Urbit/Arvo/Common.hs b/pkg/hs/urbit-king/lib/Urbit/Arvo/Common.hs deleted file mode 100644 index 3168ba1e3..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Arvo/Common.hs +++ /dev/null @@ -1,310 +0,0 @@ -{-# LANGUAGE StrictData #-} - --- This is required due to the use of 'Void' in a constructor slot in --- combination with 'deriveNoun' which generates an unreachable pattern. -{-# OPTIONS_GHC -Wno-overlapping-patterns #-} - --- Hack. See comment above instance ToNoun H.StdMethod -{-# OPTIONS_GHC -Wno-orphans #-} - -{-| - Types used in both Events and Effects. --} -module Urbit.Arvo.Common - ( KingId(..), ServId(..) - , Vere(..), Wynn(..) - , Json, JsonNode(..) - , Desk(..), Mime(..) - , Port(..), Turf(..) - , HttpServerConf(..), PEM(..), Key, Cert - , HttpEvent(..), Method, Header(..), ResponseHeader(..) - , ReOrg(..), reorgThroughNoun - , AmesDest, Ipv4(..), Ipv6(..), Patp(..), Galaxy, AmesAddress(..) - ) where - -import Urbit.Prelude - -import Control.Monad.Fail (fail) -import Data.Serialize - -import qualified Network.HTTP.Types.Method as H -import qualified Network.Socket as N -import qualified Urbit.Ob as Ob - - --- Misc Types ------------------------------------------------------------------ - -{-| - Domain Name in TLD order: - - ["org", "urbit", "dns"] -> dns.urbit.org --} -newtype Turf = Turf { unTurf :: [Cord] } - deriving newtype (Eq, Ord, Show, ToNoun, FromNoun) - -newtype KingId = KingId { unKingId :: UV } - deriving newtype (Eq, Ord, Show, Num, Real, Enum, Integral, FromNoun, ToNoun) - -newtype ServId = ServId { unServId :: UV } - deriving newtype (Eq, Ord, Show, Num, Enum, Integral, Real, FromNoun, ToNoun) - --- Arvo Version Negotiation ---------------------------------------------------- - --- Information about the king runtime passed to Arvo. -data Vere = Vere { vereName :: Term, - vereRev :: [Cord], - vereWynn :: Wynn } - deriving (Eq, Ord, Show) - -instance ToNoun Vere where - toNoun Vere{..} = toNoun ((vereName, vereRev), vereWynn) - -instance FromNoun Vere where - parseNoun n = named "Vere" $ do - ((vereName, vereRev), vereWynn) <- parseNoun n - pure $ Vere {..} - --- A list of names and their kelvin numbers, used in version negotiations. -newtype Wynn = Wynn { unWynn :: [(Term, Word)] } - deriving newtype (Eq, Ord, Show, FromNoun, ToNoun) - --- Http Common ----------------------------------------------------------------- - -data Header = Header Cord Bytes - deriving (Eq, Ord, Show) - -data ResponseHeader = ResponseHeader - { statusCode :: Word - , headers :: [Header] - } - deriving (Eq, Ord, Show) - -data HttpEvent - = Start ResponseHeader (Maybe File) Bool - | Continue (Maybe File) Bool - | Cancel () - deriving (Eq, Ord, Show) - -deriveNoun ''ResponseHeader -deriveNoun ''Header -deriveNoun ''HttpEvent - - --- Http Requests --------------------------------------------------------------- - -type Method = H.StdMethod - --- TODO Hack! Don't write instances for library types. Write them for --- our types instead. - -instance ToNoun H.StdMethod where - toNoun = toNoun . MkBytes . H.renderStdMethod - -instance FromNoun H.StdMethod where - parseNoun n = named "StdMethod" $ do - MkBytes bs <- parseNoun n - case H.parseMethod bs of - Left md -> fail ("Unexpected method: " <> unpack (decodeUtf8 md)) - Right m -> pure m - - - --- Http Server Configuration --------------------------------------------------- - -newtype PEM = PEM { unPEM :: Wain } - deriving newtype (Eq, Ord, ToNoun, FromNoun) - -instance Show PEM where - show _ = "\"PEM (secret)\"" - -type Key = PEM -type Cert = PEM - -data HttpServerConf = HttpServerConf - { hscSecure :: Maybe (Key, Cert) - , hscProxy :: Bool - , hscLog :: Bool - , hscRedirect :: Bool - } - deriving (Eq, Ord, Show) - -deriveNoun ''HttpServerConf - - --- Desk and Mime --------------------------------------------------------------- - -newtype Desk = Desk { unDesk :: Cord } - deriving newtype (Eq, Ord, Show, ToNoun, FromNoun, IsString) - -data Mime = Mime Path File - deriving (Eq, Ord, Show) - -deriveNoun ''Mime - - --- Json ------------------------------------------------------------------------ - -type Json = Nullable JsonNode - -data JsonNode - = JNA [Json] - | JNB Bool - | JNO (HoonMap Cord Json) - | JNN Knot - | JNS Cord - deriving (Eq, Ord, Show) - -deriveNoun ''JsonNode - - --- Ames Destinations ------------------------------------------------- - -serializeToNoun :: Serialize a => a -> Noun -serializeToNoun = A . bytesAtom . encode - -serializeParseNoun :: Serialize a => String -> Int -> Noun -> Parser a -serializeParseNoun desc len = named (pack desc) . \case - A (atomBytes -> bs) - -- Atoms lose leading 0s, but since lsb, these become trailing NULs - | length bs <= len -> case decode $ bs <> replicate (len - length bs) 0 of - Right aa -> pure aa - Left msg -> fail msg - | otherwise -> fail ("putative " <> desc <> " " <> show bs <> " too long") - C{} -> fail ("unexpected cell in " <> desc) - -newtype Patp a = Patp { unPatp :: a } - deriving newtype (Eq, Ord, Enum, Real, Integral, Num, ToNoun, FromNoun) - --- Network Port -newtype Port = Port { unPort :: Word16 } - deriving newtype (Eq, Ord, Show, Enum, Real, Integral, Num, ToNoun, FromNoun) - --- @if -newtype Ipv4 = Ipv4 { unIpv4 :: N.HostAddress } - deriving newtype (Eq, Ord, Enum) - -instance Serialize Ipv4 where - get = (\a b c d -> Ipv4 $ N.tupleToHostAddress $ (d, c, b, a)) - <$> getWord8 <*> getWord8 <*> getWord8 <*> getWord8 - put (Ipv4 (N.hostAddressToTuple -> (a, b, c, d))) = for_ [d, c, b, a] putWord8 - -instance ToNoun Ipv4 where - toNoun = serializeToNoun - -instance FromNoun Ipv4 where - parseNoun = serializeParseNoun "Ipv4" 4 - -instance Show Ipv4 where - show (Ipv4 (N.hostAddressToTuple -> (a, b, c, d))) = - show a ++ "." ++ - show b ++ "." ++ - show c ++ "." ++ - show d - --- @is --- should probably use hostAddress6ToTuple here, but no one uses it right now -newtype Ipv6 = Ipv6 { unIpv6 :: Word128 } - deriving newtype (Eq, Ord, Show, Enum, Real, Integral, Num, ToNoun, FromNoun) - -type Galaxy = Patp Word8 - -instance Integral a => Show (Patp a) where - show = show . Ob.renderPatp . Ob.patp . fromIntegral . unPatp - -data AmesAddress = AAIpv4 Ipv4 Port - deriving (Eq, Ord, Show) - -instance Serialize AmesAddress where - get = AAIpv4 <$> get <*> (Port <$> getWord16le) - put (AAIpv4 ip (Port port)) = put ip >> putWord16le port - -instance FromNoun AmesAddress where - parseNoun = serializeParseNoun "AmesAddress" 6 - -instance ToNoun AmesAddress where - toNoun = serializeToNoun - -type AmesDest = Each Galaxy AmesAddress - - --- Path+Tagged Restructuring --------------------------------------------------- - -{-| - This reorganized events and effects to be easier to parse. This is - complicated and gross, and a better way should be found! - - ReOrg takes in nouns with the following shape: - - [[fst snd rest] [tag val]] - - And turns that into: - - ReOrg fst snd tag rest val - - For example, - - [//behn/5 %doze ~ 9999] - - Becomes: - - Reorg "" "behn" "doze" ["5"] 9999 - - This is convenient, since we can then use our head-tag based FromNoun - and ToNoun instances. - - NOTE: - - Also, in the wild, I ran into this event: - - [//term/1 %init] - - So, I rewrite atom-events as follows: - - [x y=@] -> [x [y ~]] - - Which rewrites the %init example to: - - [//term/1 [%init ~]] - - TODO The reverse translation is not done yet. - --} -data ReOrg = ReOrg Cord Cord Cord EvilPath Noun - -instance FromNoun ReOrg where - parseNoun = named "ReOrg" . \case - A _ -> expected "got atom" - C (A _) _ -> expected "empty route" - C h (A a) -> parseNoun (C h (C (A a) (A 0))) - C (C _ (A _)) (C _ _) -> expected "route is too short" - C (C f (C s p)) (C t v) -> do - fst :: Cord <- named "first-route" $ parseNoun f - snd :: Cord <- named "second-route" $ parseNoun s - pax :: EvilPath <- named "rest-of-route" $ parseNoun p - tag :: Cord <- named "tag" $ parseNoun t - val :: Noun <- pure v - pure (ReOrg fst snd tag pax val) - where - expected got = fail ("expected route+tagged; " <> got) - -instance ToNoun ReOrg where - toNoun (ReOrg fst snd tag pax val) = - toNoun ((fst, snd, pax), (tag, val)) - -{-| - Given something parsed from a ReOrg Noun, convert that back to - a ReOrg. - - This code may crash, but only if the FromNoun/ToNoun instances for - the effects are incorrect. --} -reorgThroughNoun :: ToNoun x => (Cord, x) -> ReOrg -reorgThroughNoun = - fromNounCrash . toNoun >>> \case - (f, s, t, p, v) -> ReOrg f s t p v - where - fromNounCrash :: FromNoun a => Noun -> a - fromNounCrash = - fromNounErr >>> \case - Left err -> error (show err) - Right vl -> vl diff --git a/pkg/hs/urbit-king/lib/Urbit/Arvo/Effect.hs b/pkg/hs/urbit-king/lib/Urbit/Arvo/Effect.hs deleted file mode 100644 index 5a5782912..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Arvo/Effect.hs +++ /dev/null @@ -1,296 +0,0 @@ -{-# LANGUAGE StrictData #-} - --- This is required due to the use of 'Void' in a constructor slot in --- combination with 'deriveNoun' which generates an unreachable pattern. -{-# OPTIONS_GHC -Wno-overlapping-patterns #-} - -{-| - Effect Types and Their Noun Conversions --} -module Urbit.Arvo.Effect where - -import Urbit.Noun.Time -import Urbit.Prelude - -import Control.Monad.Fail (fail) -import Numeric.Natural (Natural) -import Urbit.Arvo.Common (KingId(..), ServId(..)) -import Urbit.Arvo.Common (Header, HttpEvent, HttpServerConf, Method, Mime) -import Urbit.Arvo.Common (AmesDest, Turf) -import Urbit.Arvo.Common (ReOrg(..), reorgThroughNoun) -import Urbit.Arvo.Common (Desk, Wynn) - - --- Newt Effects ---------------------------------------------------------------- - -{-| - %turf -- Set which domain names we've bound. - %send -- Send a UDP packet. --} -data NewtEf - = NewtEfTurf (Atom, ()) [Turf] - | NewtEfSend (Atom, ()) AmesDest Bytes - deriving (Eq, Ord, Show) - -deriveNoun ''NewtEf - - --- HTTP Client Effects --------------------------------------------------------- - -data HttpClientReq = HttpClientReq - { method :: Method - , url :: Cord - , headerList :: [Header] - , body :: Maybe Octs - } - deriving (Eq, Ord, Show) - -{-| - %request -- TODO - %cancel-request -- TODO --} -data HttpClientEf - = HCERequest (Atom, ()) Word HttpClientReq - | HCECancelRequest Path Word - deriving (Eq, Ord, Show) - -deriveNoun ''HttpClientReq -deriveNoun ''HttpClientEf - - --- HTTP Server Effects --------------------------------------------------------- - -{-| - %set-config -- Update HTTP server configuration. - %response -- Respond to an active HTTP request. --} -data HttpServerEf - = HSESetConfig (ServId, ()) HttpServerConf - | HSEResponse (ServId, UD, UD, ()) HttpEvent - deriving (Eq, Ord, Show) - -deriveNoun ''HttpServerEf - - --- File System Effects --------------------------------------------------------- - -{-| - %hill -- TODO - %dirk -- mark mount dirty - %ergo -- TODO - %ogre -- TODO --} -data SyncEf - = SyncEfHill () [Desk] - | SyncEfDirk Path Desk - | SyncEfErgo Path Desk [(Path, Maybe Mime)] - | SyncEfOgre Path Desk - deriving (Eq, Ord, Show) - -deriveNoun ''SyncEf - - --- Timer Effects --------------------------------------------------------------- - -{-| - %doze -- Set or clear timer. - %void -- Nasty hack to make the parser not treat this as a record. --} -data BehnEf - = BehnEfDoze (KingId, ()) (Maybe Wen) - | BehnEfVoid Void - deriving (Eq, Ord, Show) - -deriveNoun ''BehnEf - - --- Terminal Effects ------------------------------------------------------------ - -{-| - %bel -- TODO - %clr -- TODO - %hop -- TODO - %lin -- TODO - %mor -- TODO - %sag -- TODO - %sav -- TODO - %url -- TODO --} -data Blit - = Bel () - | Clr () - | Hop Word64 - | Klr Stub - | Lin [Char] - | Mor () - | Sag Path Noun - | Sav Path Atom - | Url Cord - deriving (Eq, Ord) - -data Deco - = DecoBl - | DecoBr - | DecoUn - | DecoNull - deriving (Eq, Ord, Show) - -data Tint - = TintR - | TintG - | TintB - | TintC - | TintM - | TintY - | TintK - | TintW - | TintNull - | TintTrue Word8 Word8 Word8 - deriving (Eq, Ord, Show) - -data Stye = Stye - { deco :: (HoonSet Deco) - , back :: Tint - , fore :: Tint - } - deriving (Eq, Ord, Show) - -newtype Stub = Stub [(Stye, [Char])] - deriving (Eq, Ord, Show) - -instance ToNoun Deco where - toNoun = \case - DecoBl -> toNoun $ Cord "bl" - DecoBr -> toNoun $ Cord "br" - DecoUn -> toNoun $ Cord "un" - DecoNull -> Atom 0 - -instance FromNoun Deco where - parseNoun = named "Deco" . \case - Atom 0 -> pure DecoNull - n -> parseNoun @Cord n <&> unCord >>= \case - "bl" -> pure DecoBl - "br" -> pure DecoBr - "un" -> pure DecoUn - t -> fail ("invalid: " <> unpack t) - -instance ToNoun Tint where - toNoun = \case - TintR -> toNoun $ Cord "r" - TintG -> toNoun $ Cord "g" - TintB -> toNoun $ Cord "b" - TintC -> toNoun $ Cord "c" - TintM -> toNoun $ Cord "m" - TintY -> toNoun $ Cord "y" - TintK -> toNoun $ Cord "k" - TintW -> toNoun $ Cord "w" - TintNull -> Atom 0 - TintTrue r g b -> Cell (atom r) $ Cell (atom g) (atom b) - where atom a = Atom (fromIntegral a :: Natural) - -instance FromNoun Tint where - parseNoun = named "Tint" . \case - Atom 0 -> pure TintNull - Cell (Atom r) (Cell (Atom g) (Atom b)) - -> pure (TintTrue (word r) (word g) (word b)) - where word w = fromIntegral w :: Word8 - n -> parseNoun @Cord n <&> unCord >>= \case - "r" -> pure TintR - "g" -> pure TintG - "b" -> pure TintB - "c" -> pure TintC - "m" -> pure TintM - "y" -> pure TintY - "k" -> pure TintK - "w" -> pure TintW - t -> fail ("invalid: " <> unpack t) - --- Manual instance to not save the noun/atom in Sag/Sav, because these can be --- megabytes and makes king hang. -instance Show Blit where - show (Bel ()) = "Bel ()" - show (Clr ()) = "Clr ()" - show (Hop x) = "Hop " ++ (show x) - show (Klr s) = "Klr " ++ (show s) - show (Lin c) = "Lin " ++ (show c) - show (Mor ()) = "Mor ()" - show (Sag path _) = "Sag " ++ (show path) - show (Sav path _) = "Sav " ++ (show path) - show (Url c) = "Url " ++ (show c) - -{-| - %blip -- TODO - %init -- TODO - %logo -- Shutdown - %mass -- Measure memory usage (unused) --} -data TermEf - = TermEfBlit (UD, ()) [Blit] - | TermEfInit (UD, ()) Ship - | TermEfLogo Path () - | TermEfMass Path Noun -- Irrelevant - deriving (Eq, Ord, Show) - -deriveNoun ''Stye -deriveNoun ''Stub -deriveNoun ''Blit -deriveNoun ''TermEf - - --- IO-Driver Routing ----------------------------------------------------------- - -data VaneEf - = VENewt NewtEf - | VEHttpClient HttpClientEf - | VEHttpServer HttpServerEf - | VEBehn BehnEf - | VETerm TermEf - | VEClay SyncEf - | VESync SyncEf - | VEBoat SyncEf - deriving (Eq, Ord, Show) - -deriveNoun ''VaneEf - - --- Top-Level Ef Type ----------------------------------------------------------- - -data Ef - = EfVane VaneEf - | EfVega Cord EvilPath -- second path component, rest of path - | EfExit Cord EvilPath -- second path component, rest of path - | EfWend Wynn - deriving (Eq, Ord, Show) - --- XX HACK -clip :: Noun -> Noun -clip (C (C _ x) y) = C x y -clip _ = error "misclip" - -tack :: Noun -> Noun -tack (C x y) = C (C (A 0) x) y -tack _ = error "mistack" - -instance ToNoun Ef where - toNoun = clip . \case - EfVane v -> toNoun $ reorgThroughNoun ("", v) - EfExit s p -> toNoun $ ReOrg "" s "exit" p (A 0) - EfVega s p -> toNoun $ ReOrg "" s "vega" p (A 0) - EfWend w -> toNoun $ reorgThroughNoun ("", w) - -instance FromNoun Ef where - parseNoun = tack >>> parseNoun >=> \case - ReOrg "" s "exit" p (A 0) -> pure (EfExit s p) - ReOrg "" s "exit" p _ -> fail "%exit effect expects nil value" - ReOrg "" s "vega" p (A 0) -> pure (EfVega s p) - ReOrg "" s "vega" p _ -> fail "%vega effect expects nil value" - ReOrg "" s "wend" p val -> EfWend <$> parseNoun val - ReOrg "" s tag p val -> EfVane <$> parseNoun (toNoun (s, tag, p, val)) - ReOrg _ _ _ _ _ -> fail "Non-empty first path-element" - -summarizeEffect :: Lenient Ef -> Text -summarizeEffect ef = - fromNoun (toNoun ef) & \case - Nothing -> "//invalid %effect" - Just (pax :: [Cord], tag :: Cord, val :: Noun) -> - "/" <> intercalate "/" (unCord <$> pax) <> " %" <> unCord tag diff --git a/pkg/hs/urbit-king/lib/Urbit/Arvo/Event.hs b/pkg/hs/urbit-king/lib/Urbit/Arvo/Event.hs deleted file mode 100644 index d2f316a53..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Arvo/Event.hs +++ /dev/null @@ -1,422 +0,0 @@ -{-# LANGUAGE StrictData #-} - --- This is required due to the use of 'Void' in a constructor slot in --- combination with 'deriveNoun' which generates an unreachable pattern. -{-# OPTIONS_GHC -Wno-overlapping-patterns #-} - -{-| - Event Types and Noun Conversion --} -module Urbit.Arvo.Event where - -import Urbit.Prelude - -import Control.Monad.Fail (fail) -import Urbit.Arvo.Common (KingId(..), ServId(..), Vere(..)) -import Urbit.Arvo.Common (Desk, Mime) -import Urbit.Arvo.Common (Header(..), HttpEvent) -import Urbit.Arvo.Common (AmesDest, Ipv4, Ipv6, Port, Turf) -import Urbit.Arvo.Common (ReOrg(..), reorgThroughNoun) - -import qualified Crypto.Sign.Ed25519 as Ed -import qualified Data.ByteString as BS -import qualified Data.ByteString.Char8 as C -import qualified Network.HTTP.Types.Method as H - --- Misc Types ------------------------------------------------------------------ - -type Rift = Atom -- Continuity number -type Life = Word -- Number of Azimoth key revs. -type Bloq = Atom -- TODO -type Oath = Atom -- Signature - - --- Parsed URLs ----------------------------------------------------------------- - -type Host = Each Turf Ipv4 -type Hart = (Bool, Maybe Atom, Host) -type Pork = (Maybe Knot, [Cord]) -type Quay = [(Cord, Cord)] - -data PUrl = PUrl Hart Pork Quay - deriving (Eq, Ord, Show) - -deriveNoun ''PUrl - - --- Dawn Records ---------------------------------------------------------------- - -padByteString :: BS.ByteString -> Int -> BS.ByteString -padByteString bs length | remaining > 0 = bs <> (BS.replicate remaining 0) - | otherwise = bs - where remaining = (length - (BS.length bs)) - --- A Pass is the Atom concatenation of 'b', the public encryption key, and the --- public authentication key. (see +pass-from-eth.) -data Pass = Pass { passSign :: Ed.PublicKey, passCrypt :: Ed.PublicKey } - deriving (Eq, Ord, Show) - -passToBS :: Pass -> BS.ByteString -passToBS Pass{..} = C.singleton 'b' <> - (Ed.unPublicKey passSign) <> - (Ed.unPublicKey passCrypt) - -instance ToNoun Pass where - toNoun = Atom . bytesAtom . passToBS - -instance FromNoun Pass where - parseNoun n = named "Pass" $ do - MkBytes unpadded <- parseNoun n - let bs = padByteString unpadded 65 - when ((C.head bs) /= 'b') $ do - fail "Expecting 'b' prefix in public key structure" - let removedPrefix = C.tail bs - let passSign = Ed.PublicKey (take 32 removedPrefix) - let passCrypt = Ed.PublicKey (drop 32 removedPrefix) - unless ((length $ Ed.unPublicKey passSign) == 32) $ - error "Sign pubkey not 32 bytes" - unless ((length $ Ed.unPublicKey passCrypt) == 32) $ - error "Crypt pubkey not 32 bytes" - pure $ Pass{..} - --- A Ring isn't the secret keys: it's the ByteString input which generates both --- the public key and the secret key. A Ring is the concatenation of 'B', the --- encryption key derivation seed, and the authentication key derivation --- seed. These aren't actually private keys, but public/private keypairs which --- can be derived from these seeds. -data Ring = Ring { ringSign :: BS.ByteString, ringCrypt :: BS.ByteString } - deriving (Eq, Ord) - -instance ToNoun Ring where - toNoun Ring{..} = - Atom $ bytesAtom (C.singleton 'B' <> ringSign <> ringCrypt) - -instance FromNoun Ring where - parseNoun n = named "Ring" $ do - MkBytes unpadded <- parseNoun n - let bs = padByteString unpadded 65 - when ((C.head bs) /= 'B') $ do - fail "Expecting 'B' prefix in public key structure" - let removedPrefix = C.tail bs - let ringSign = (take 32 removedPrefix) - let ringCrypt = (drop 32 removedPrefix) - unless ((length ringSign) == 32) $ - error "Sign seed not 32 bytes" - unless ((length ringCrypt) == 32) $ - error "Crypt seed not 32 bytes" - pure $ Ring ringSign ringCrypt - -instance Show Ring where - show r = "(Ring <> <>)" - -data Seed = Seed - { sShip :: Ship - , sLife :: Life - , sRing :: Ring - , sOath :: (Maybe Oath) - } - deriving (Eq, Show) - -data Germs = Germs - { gShip :: Ship - , gFeed :: [Germ] - } - deriving (Eq, Show) - -data Germ = Germ - { gLife :: Life - , gRing :: Ring - } - deriving (Eq, Ord, Show) - -data Feed - = Feed0 Seed - | Feed1 Germs - deriving (Eq, Show) - --- NOTE reify type environment -$(pure []) - -instance ToNoun Feed where - toNoun = \case - Feed0 s -> $(deriveToNounFunc ''Seed) s - Feed1 s -> C (C (A 1) (A 0)) $ $(deriveToNounFunc ''Germs) s - -instance FromNoun Feed where - parseNoun = \case - (C (C (A 1) (A 0)) s) -> Feed1 <$> $(deriveFromNounFunc ''Germs) s - n -> Feed0 <$> $(deriveFromNounFunc ''Seed) n - -type Public = (Life, HoonMap Life Pass) - -data Dnses = Dnses { dPri::Cord, dSec::Cord, dTer::Cord } - deriving (Eq, Ord, Show) - -type EthAddr = Atom --Bytes -- 20 bytes -type ContNum = Word - -data EthPoint = EthPoint - { epOwn :: (EthAddr, EthAddr, EthAddr, EthAddr) - , epNet :: Maybe (Life, Pass, ContNum, (Bool, Ship), Maybe Ship) - , epKid :: Maybe (EthAddr, HoonSet Ship) - } - deriving (Eq, Show) - -data Dawn = MkDawn - { dSeed :: Seed - , dSponsor :: [(Ship, EthPoint)] - , dCzar :: HoonMap Ship (Rift, Life, Pass) - , dTurf :: [Turf] - , dBloq :: Bloq - , dNode :: (Maybe PUrl) - } - deriving (Eq, Show) - -deriveNoun ''Dnses -deriveNoun ''EthPoint -deriveNoun ''Seed -deriveNoun ''Germ -deriveNoun ''Dawn - - --- HTTP ------------------------------------------------------------------------ - -type ServerId = Atom - -data Address - = AIpv4 Ipv4 - | AIpv6 Ipv6 - | AAmes Ship - deriving (Eq, Ord, Show) - -data HttpRequest = HttpRequest - { reqMeth :: H.StdMethod - , reqUrl :: Cord - , reqHead :: [Header] - , reqBody :: Maybe File - } - deriving (Eq, Ord, Show) - -data HttpServerReq = HttpServerReq - { hsrSecure :: Bool - , hsrAddress :: Address - , hsrRequest :: HttpRequest - } - deriving (Eq, Ord, Show) - -data HttpClientEv - = HttpClientEvReceive (KingId, ()) ServerId HttpEvent - | HttpClientEvBorn (KingId, ()) () - | HttpClientEvCrud Path Noun - deriving (Eq, Ord, Show) - -data HttpServerEv - = HttpServerEvRequest (ServId, UD, UD, ()) HttpServerReq - | HttpServerEvCancelRequest (ServId, UD, UD, ()) () - | HttpServerEvRequestLocal (ServId, UD, UD, ()) HttpServerReq - | HttpServerEvLive (ServId, ()) Port (Maybe Port) - | HttpServerEvBorn (KingId, ()) () - | HttpServerEvCrud Path Noun - deriving (Eq, Ord, Show) - -deriveNoun ''Address -deriveNoun ''HttpClientEv -deriveNoun ''HttpRequest -deriveNoun ''HttpServerEv -deriveNoun ''HttpServerReq - - --- Ames ------------------------------------------------------------------------ - -data AmesEv - = AmesEvHear () AmesDest Bytes - | AmesEvHole () AmesDest Bytes - | AmesEvCrud Path Noun - deriving (Eq, Ord, Show) - -deriveNoun ''AmesEv - - --- Arvo Events ----------------------------------------------------------------- - -newtype Entropy = Entropy { entropyBits :: Word512 } - deriving newtype (Eq, Ord, FromNoun, ToNoun) - -instance Show Entropy where - show = const "\"ENTROPY (secret)\"" - - -data ArvoEv - = ArvoEvWhom () Ship - | ArvoEvWack () Entropy - | ArvoEvWyrd () Vere - | ArvoEvCrud Path Noun - | ArvoEvTrim UD - | ArvoEvWhat [Noun] - | ArvoEvWhey () - | ArvoEvVerb (Maybe Bool) - deriving (Eq, Ord, Show) - -deriveNoun ''ArvoEv - - --- Boat Events ----------------------------------------------------------------- - -data BoatEv - = BoatEvBoat () () - | BoatEvCrud Path Noun - deriving (Eq, Ord, Show) - -deriveNoun ''BoatEv - - --- Jael Events ----------------------------------------------------------------- - -data JaelEv - = JaelEvRekey () (Life, Ring) - | JaelEvCrud Path Noun - deriving (Eq, Show) - -deriveNoun ''JaelEv - - --- Timer Events ---------------------------------------------------------------- - -data BehnEv - = BehnEvWake () () - | BehnEvBorn (KingId, ()) () - | BehnEvCrud Path Noun - deriving (Eq, Ord, Show) - -deriveNoun ''BehnEv - - --- Newt Events ----------------------------------------------------------------- - -data NewtEv - = NewtEvBorn (KingId, ()) () - | NewtEvCrud Path Noun - deriving (Eq, Ord, Show) - -deriveNoun ''NewtEv - - --- FileSystem Events ----------------------------------------------------------- - -data SyncEv - = SyncEvInto (Nullable (KingId, ())) Desk Bool [(Path, Maybe Mime)] - | SyncEvCrud Path Noun - deriving (Eq, Ord, Show) - -deriveNoun ''SyncEv - - --- Terminal Events ------------------------------------------------------------- - -data LegacyBootEvent - = Fake Ship - | Dawn Dawn - deriving (Eq, Show) - -data ArrowKey = D | L | R | U - deriving (Eq, Ord, Show) - -data Belt - = Aro ArrowKey - | Bac () - | Ctl Cord - | Del () - | Met Cord - | Ret () - | Txt Tour - deriving (Eq, Ord, Show) - -data TermEv - = TermEvBelt (UD, ()) Belt - | TermEvBlew (UD, ()) Word Word - | TermEvBoot (UD, ()) Bool LegacyBootEvent - | TermEvHail (UD, ()) () - | TermEvCrud Path Noun - deriving (Eq, Show) - -deriveNoun ''LegacyBootEvent -deriveNoun ''ArrowKey -deriveNoun ''Belt -deriveNoun ''TermEv - - --- Events for Device Drivers --------------------------------------------------- - -data BlipEv - = BlipEvAmes AmesEv - | BlipEvArvo ArvoEv - | BlipEvBehn BehnEv - | BlipEvBoat BoatEv - | BlipEvHttpClient HttpClientEv - | BlipEvHttpServer HttpServerEv - | BlipEvJael JaelEv - | BlipEvNewt NewtEv - | BlipEvSync SyncEv - | BlipEvTerm TermEv - deriving (Eq, Show) - -deriveNoun ''BlipEv - - --- The Main Event Type --------------------------------------------------------- - -data Ev - = EvBlip BlipEv - deriving (Eq, Show) - -instance ToNoun Ev where - toNoun = toNoun . \case - EvBlip v@BlipEvAmes{} -> reorgThroughNoun ("ames", v) - EvBlip v@BlipEvArvo{} -> reorgThroughNoun ("", v) - EvBlip v@BlipEvBehn{} -> reorgThroughNoun ("behn", v) - EvBlip v@BlipEvBoat{} -> reorgThroughNoun ("clay", v) - EvBlip v@BlipEvHttpClient{} -> reorgThroughNoun ("iris", v) - EvBlip v@BlipEvHttpServer{} -> reorgThroughNoun ("eyre", v) - EvBlip v@BlipEvJael{} -> reorgThroughNoun ("jael", v) - EvBlip v@BlipEvNewt{} -> reorgThroughNoun ("ames", v) - EvBlip v@BlipEvSync{} -> reorgThroughNoun ("clay", v) - EvBlip v@BlipEvTerm{} -> reorgThroughNoun ("dill", v) - --- XX We really should check the first path element, but since this is used only --- in the event browser, which otherwise is broken, I don't care right now. -instance FromNoun Ev where - parseNoun = parseNoun >=> \case - ReOrg _ s t p v -> fmap EvBlip $ parseNoun $ toNoun (s,t,p,v) - - --- Short Event Names ----------------------------------------------------------- - -{- - In the case of the user hitting enter, the cause is technically a - terminal event, but we don't display any name because the cause is - really the user. --} -getSpinnerNameForEvent :: Ev -> Maybe Text -getSpinnerNameForEvent = \case - EvBlip b -> case b of - BlipEvAmes _ -> Just "ames" - BlipEvArvo _ -> Just "arvo" - BlipEvBehn _ -> Just "behn" - BlipEvBoat _ -> Just "boat" - BlipEvHttpClient _ -> Just "iris" - BlipEvHttpServer _ -> Just "eyre" - BlipEvJael _ -> Just "jael" - BlipEvNewt _ -> Just "newt" - BlipEvSync _ -> Just "clay" - BlipEvTerm t | isRet t -> Nothing - BlipEvTerm t -> Just "term" - where - isRet (TermEvBelt _ (Ret ())) = True - isRet _ = False - -summarizeEvent :: Ev -> Text -summarizeEvent ev = - fromNoun (toNoun ev) & \case - Nothing -> "//invalid %event" - Just (pax :: [Cord], tag :: Cord, val :: Noun) -> - "/" <> intercalate "/" (unCord <$> pax) <> " %" <> unCord tag diff --git a/pkg/hs/urbit-king/lib/Urbit/King/API.hs b/pkg/hs/urbit-king/lib/Urbit/King/API.hs deleted file mode 100644 index 61bf31dfe..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/API.hs +++ /dev/null @@ -1,141 +0,0 @@ -{-| - TODO This has a bunch of stub logic that was intended for an - architecture with a single Urbit daemon running multiple - ships. Do it or strip it out. --} - -module Urbit.King.API - ( King(..) - , TermConn - , TermConnAPI - , kingAPI - , readPortsFile - ) -where - -import RIO.Directory -import Urbit.Prelude - -import Network.Socket (Socket) -import Prelude (read) -import Urbit.King.App (HasPierPath(..)) - -import qualified Network.HTTP.Types as H -import qualified Network.Wai as W -import qualified Network.Wai.Handler.Warp as W -import qualified Network.Wai.Handler.WebSockets as WS -import qualified Network.WebSockets as WS -import qualified Urbit.Vere.NounServ as NounServ -import qualified Urbit.Vere.Term.API as Term - - --- Types ----------------------------------------------------------------------- - -type TermConn = NounServ.Conn Term.ClientTake [Term.Ev] - -type TermConnAPI = TVar (Maybe (TermConn -> STM ())) - -{-| - Daemon state. --} -data King = King - { kServer :: Async () - , kTermConn :: TermConnAPI - } - - --------------------------------------------------------------------------------- - -{-| - Get the filepath of the urbit config directory and the ports file. --} -portsFilePath :: HasPierPath e => RIO e (FilePath, FilePath) -portsFilePath = do - dir <- view pierPathL - fil <- pure (dir ".king.ports") - pure (dir, fil) - -{-| - Write the ports file. --} -portsFile :: HasPierPath e => Word -> RAcquire e (FilePath, FilePath) -portsFile por = - mkRAcquire mkFile (removeFile . snd) - where - mkFile = do - (dir, fil) <- portsFilePath - createDirectoryIfMissing True dir - writeFile fil (encodeUtf8 $ tshow por) - pure (dir, fil) - -{-| - Get the HTTP port for the running Urbit daemon. --} -readPortsFile :: HasPierPath e => RIO e (Maybe Word) -readPortsFile = do - (_, fil) <- portsFilePath - bs <- readFile fil - evaluate (readMay $ unpack $ decodeUtf8 bs) - -kingServer :: HasLogFunc e => (Int, Socket) -> RAcquire e King -kingServer is = - mkRAcquire (startKing is) (cancel . kServer) - where - startKing :: HasLogFunc e => (Int, Socket) -> RIO e King - startKing (port, sock) = do - api <- newTVarIO Nothing - let opts = W.defaultSettings & W.setPort port - env <- ask - tid <- async $ io $ W.runSettingsSocket opts sock $ app env api - pure (King tid api) - -{-| - Start the HTTP server and write to the ports file. --} -kingAPI :: (HasPierPath e, HasLogFunc e) - => RAcquire e King -kingAPI = do - (port, sock) <- io $ W.openFreePort - (dir, fil) <- portsFile (fromIntegral port) - -- lockFile dir - kingServer (port, sock) - -serveTerminal :: HasLogFunc e => e -> TermConnAPI -> Word -> W.Application -serveTerminal env api word = - WS.websocketsOr WS.defaultConnectionOptions wsApp fallback - where - fallback req respond = - respond $ W.responseLBS H.status500 [] - $ "This endpoint uses websockets" - - wsApp pen = - atomically (readTVar api) >>= \case - Nothing -> WS.rejectRequest pen "Ship not running" - Just sp -> do - wsc <- io $ WS.acceptRequest pen - inp <- io $ newTBMChanIO 5 - out <- io $ newTBMChanIO 5 - atomically $ sp $ NounServ.mkConn inp out - let doit = runRIO env - $ NounServ.wsConn "NOUNSERV (wsServ) " inp out wsc - - -- If `wai` kills this thread for any reason, the TBMChans - -- need to be closed. If they are not closed, the - -- terminal will not know that they disconnected. - finally doit $ atomically $ do - closeTBMChan inp - closeTBMChan out - -data BadShip = BadShip Text - deriving (Show, Exception) - -app :: HasLogFunc e => e -> TermConnAPI -> W.Application -app env api req respond = - case W.pathInfo req of - ["terminal", session] -> do - session :: Word <- evaluate $ read $ unpack session - serveTerminal env api session req respond - ["status"] -> - respond $ W.responseLBS H.status200 [] "{}" - _ -> - respond $ W.responseLBS H.status404 [] "No implemented" diff --git a/pkg/hs/urbit-king/lib/Urbit/King/App.hs b/pkg/hs/urbit-king/lib/Urbit/King/App.hs deleted file mode 100644 index 7c2ac9f9e..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/App.hs +++ /dev/null @@ -1,296 +0,0 @@ -{-| - Code for setting up the RIO environment. --} -module Urbit.King.App - ( KingEnv - , runKingEnvStderr - , runKingEnvStderrRaw - , runKingEnvLogFile - , runKingEnvNoLog - , kingEnvKillSignal - , killKingActionL - , onKillKingSigL - , HostEnv - , runHostEnv - , PierEnv - , runPierEnv - , killPierActionL - , onKillPierSigL - , HasStderrLogFunc(..) - , HasKingId(..) - , HasProcId(..) - , HasKingEnv(..) - , HasMultiEyreApi(..) - , HasHostEnv(..) - , HasPierEnv(..) - , module Urbit.King.Config - ) -where - -import Urbit.King.Config -import Urbit.Prelude - -import RIO (logGeneric) -import System.Directory ( createDirectoryIfMissing - , getXdgDirectory - , XdgDirectory(XdgCache) - ) -import System.Posix.Internals (c_getpid) -import System.Posix.Types (CPid(..)) -import System.Random (randomIO) -import Urbit.King.App.Class (HasStderrLogFunc(..)) -import Urbit.Vere.Eyre.Multi (MultiEyreApi) -import Urbit.Vere.Ports (PortControlApi, HasPortControlApi(..)) - - --- KingEnv --------------------------------------------------------------------- - -class HasKingId a where - kingIdL :: Lens' a Word16 - -class HasProcId a where - procIdL :: Lens' a Int32 - -class (HasLogFunc a, HasStderrLogFunc a, HasKingId a, HasProcId a) - => HasKingEnv a - where - kingEnvL :: Lens' a KingEnv - -data KingEnv = KingEnv - { _kingEnvLogFunc :: !LogFunc - , _kingEnvStderrLogFunc :: !LogFunc - , _kingEnvKingId :: !Word16 - , _kingEnvProcId :: !Int32 - , _kingEnvKillSignal :: !(TMVar ()) - } - -makeLenses ''KingEnv - -instance HasKingEnv KingEnv where - kingEnvL = id - -instance HasLogFunc KingEnv where - logFuncL = kingEnvLogFunc - -instance HasStderrLogFunc KingEnv where - stderrLogFuncL = kingEnvStderrLogFunc - -instance HasProcId KingEnv where - procIdL = kingEnvProcId - -instance HasKingId KingEnv where - kingIdL = kingEnvKingId - --- Running KingEnvs ------------------------------------------------------------ - -runKingEnvStderr :: Bool -> LogLevel -> RIO KingEnv a -> IO a -runKingEnvStderr verb lvl inner = do - logOptions <- - logOptionsHandle stderr verb - <&> setLogUseTime True - <&> setLogUseLoc False - <&> setLogMinLevel lvl - withLogFunc logOptions $ \logFunc -> runKingEnv logFunc logFunc inner - -runKingEnvStderrRaw :: Bool -> LogLevel -> RIO KingEnv a -> IO a -runKingEnvStderrRaw verb lvl inner = do - logOptions <- - logOptionsHandle stderr verb - <&> setLogUseTime True - <&> setLogUseLoc False - <&> setLogMinLevel lvl - withLogFunc logOptions $ \logFunc -> - let lf = wrapCarriage logFunc - in runKingEnv lf lf inner - --- XX loses callstack -wrapCarriage :: LogFunc -> LogFunc -wrapCarriage lf = mkLogFunc $ \_ ls ll bldr -> - runRIO lf $ logGeneric ls ll (bldr <> "\r") - -runKingEnvLogFile :: Bool -> LogLevel -> Maybe FilePath -> RIO KingEnv a -> IO a -runKingEnvLogFile verb lvl fileM inner = do - logFile <- case fileM of - Just f -> pure f - Nothing -> defaultLogFile - withLogFileHandle logFile $ \h -> do - logOptions <- - logOptionsHandle h verb - <&> setLogUseTime True - <&> setLogUseLoc False - <&> setLogMinLevel lvl - stderrLogOptions <- - logOptionsHandle stderr verb - <&> setLogUseTime False - <&> setLogUseLoc False - <&> setLogMinLevel lvl - withLogFunc stderrLogOptions $ \stderrLogFunc -> withLogFunc logOptions - $ \logFunc -> runKingEnv logFunc stderrLogFunc inner - -withLogFileHandle :: FilePath -> (Handle -> IO a) -> IO a -withLogFileHandle f act = - withFile f AppendMode $ \handle -> do - hSetBuffering handle LineBuffering - act handle - -defaultLogFile :: IO FilePath -defaultLogFile = do - logDir <- getXdgDirectory XdgCache "urbit" - createDirectoryIfMissing True logDir - logId :: Word32 <- randomIO - pure (logDir "king-" <> show logId <> ".log") - -runKingEnvNoLog :: RIO KingEnv a -> IO a -runKingEnvNoLog act = runKingEnv mempty mempty act - -runKingEnv :: LogFunc -> LogFunc -> RIO KingEnv a -> IO a -runKingEnv logFunc stderr action = do - kid <- randomIO - CPid pid <- c_getpid - kil <- newEmptyTMVarIO - runRIO (KingEnv logFunc stderr kid pid kil) action - - --- KingEnv Utils --------------------------------------------------------------- - -onKillKingSigL :: HasKingEnv e => Getter e (STM ()) -onKillKingSigL = kingEnvL . kingEnvKillSignal . to readTMVar - -killKingActionL :: HasKingEnv e => Getter e (STM ()) -killKingActionL = - kingEnvL . kingEnvKillSignal . to (\kil -> void (tryPutTMVar kil ())) - --- HostEnv ------------------------------------------------------------------ - --- The host environment is everything in King, eyre configuration shared --- across ships, and nat punching data. - -class HasMultiEyreApi a where - multiEyreApiL :: Lens' a MultiEyreApi - -class (HasKingEnv a, HasMultiEyreApi a, HasPortControlApi a) => - HasHostEnv a where - hostEnvL :: Lens' a HostEnv - -data HostEnv = HostEnv - { _hostEnvKingEnv :: !KingEnv - , _hostEnvMultiEyreApi :: !MultiEyreApi - , _hostEnvPortControlApi :: !PortControlApi - } - -makeLenses ''HostEnv - -instance HasKingEnv HostEnv where - kingEnvL = hostEnvKingEnv - -instance HasLogFunc HostEnv where - logFuncL = kingEnvL . logFuncL - -instance HasStderrLogFunc HostEnv where - stderrLogFuncL = kingEnvL . stderrLogFuncL - -instance HasProcId HostEnv where - procIdL = kingEnvL . procIdL - -instance HasKingId HostEnv where - kingIdL = kingEnvL . kingEnvKingId - -instance HasMultiEyreApi HostEnv where - multiEyreApiL = hostEnvMultiEyreApi - -instance HasPortControlApi HostEnv where - portControlApiL = hostEnvPortControlApi - --- Running Running Envs -------------------------------------------------------- - -runHostEnv :: MultiEyreApi -> PortControlApi -> RIO HostEnv a - -> RIO KingEnv a -runHostEnv multi ports action = do - king <- ask - - let hostEnv = HostEnv { _hostEnvKingEnv = king - , _hostEnvMultiEyreApi = multi - , _hostEnvPortControlApi = ports - } - - io (runRIO hostEnv action) - --- PierEnv --------------------------------------------------------------------- - -class (HasKingEnv a, HasHostEnv a, HasPierConfig a, HasNetworkConfig a) => - HasPierEnv a where - pierEnvL :: Lens' a PierEnv - -data PierEnv = PierEnv - { _pierEnvHostEnv :: !HostEnv - , _pierEnvPierConfig :: !PierConfig - , _pierEnvNetworkConfig :: !NetworkConfig - , _pierEnvKillSignal :: !(TMVar ()) - } - -makeLenses ''PierEnv - -instance HasKingEnv PierEnv where - kingEnvL = pierEnvHostEnv . kingEnvL - -instance HasHostEnv PierEnv where - hostEnvL = pierEnvHostEnv - -instance HasMultiEyreApi PierEnv where - multiEyreApiL = pierEnvHostEnv . multiEyreApiL - -instance HasPortControlApi PierEnv where - portControlApiL = pierEnvHostEnv . portControlApiL - -instance HasPierEnv PierEnv where - pierEnvL = id - -instance HasKingId PierEnv where - kingIdL = kingEnvL . kingEnvKingId - -instance HasStderrLogFunc PierEnv where - stderrLogFuncL = kingEnvL . stderrLogFuncL - -instance HasLogFunc PierEnv where - logFuncL = kingEnvL . logFuncL - -instance HasPierPath PierEnv where - pierPathL = pierEnvPierConfig . pierPathL - -instance HasDryRun PierEnv where - dryRunL = pierEnvPierConfig . dryRunL - -instance HasPierConfig PierEnv where - pierConfigL = pierEnvPierConfig - -instance HasNetworkConfig PierEnv where - networkConfigL = pierEnvNetworkConfig - -instance HasProcId PierEnv where - procIdL = kingEnvL . kingEnvProcId - - --- PierEnv Utils --------------------------------------------------------------- - -onKillPierSigL :: HasPierEnv e => Getter e (STM ()) -onKillPierSigL = pierEnvL . pierEnvKillSignal . to readTMVar - -killPierActionL :: HasPierEnv e => Getter e (STM ()) -killPierActionL = - pierEnvL . pierEnvKillSignal . to (\kil -> void (tryPutTMVar kil ())) - - --- Running Pier Envs ----------------------------------------------------------- - -runPierEnv - :: PierConfig -> NetworkConfig -> TMVar () -> RIO PierEnv a -> RIO HostEnv a -runPierEnv pierConfig networkConfig vKill action = do - host <- ask - - let pierEnv = PierEnv { _pierEnvHostEnv = host - , _pierEnvPierConfig = pierConfig - , _pierEnvNetworkConfig = networkConfig - , _pierEnvKillSignal = vKill - } - - io (runRIO pierEnv action) diff --git a/pkg/hs/urbit-king/lib/Urbit/King/App/Class.hs b/pkg/hs/urbit-king/lib/Urbit/King/App/Class.hs deleted file mode 100644 index c4a4ec08b..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/App/Class.hs +++ /dev/null @@ -1,15 +0,0 @@ -{-| - Code for setting up the RIO environment. --} -module Urbit.King.App.Class - ( HasStderrLogFunc(..) - ) -where - -import Urbit.Prelude - - --- KingEnv --------------------------------------------------------------------- - -class HasStderrLogFunc a where - stderrLogFuncL :: Lens' a LogFunc diff --git a/pkg/hs/urbit-king/lib/Urbit/King/CLI.hs b/pkg/hs/urbit-king/lib/Urbit/King/CLI.hs deleted file mode 100644 index 5c1d16fb9..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/CLI.hs +++ /dev/null @@ -1,594 +0,0 @@ -{-# OPTIONS_GHC -Werror -Wall #-} -{-# LANGUAGE CPP #-} - -{-| - Command line parsing. --} -module Urbit.King.CLI where - -import Urbit.Prelude hiding (log, Parser) -import Options.Applicative -import Options.Applicative.Help.Pretty - -import System.Environment (getProgName) - --------------------------------------------------------------------------------- - -data Host = Host - { hSharedHttpPort :: Maybe Word16 - , hSharedHttpsPort :: Maybe Word16 - , hUseNatPmp :: Nat - , hSerfExe :: Maybe Text - } - deriving (Show) - --- | Options for each running pier. -data Opts = Opts - { oQuiet :: Bool - , oHashless :: Bool - , oExit :: Bool - , oDryRun :: Bool - , oDryFrom :: Maybe Word64 - , oVerbose :: Bool - , oAmesPort :: Maybe Word16 - , oNoAmes :: Bool - , oNoHttp :: Bool - , oNoHttps :: Bool - , oTrace :: Bool - , oCollectFx :: Bool - , oLocalhost :: Bool - , oOffline :: Bool - , oFullReplay :: Bool - , oHttpPort :: Maybe Word16 - , oHttpsPort :: Maybe Word16 - , oLoopbackPort :: Maybe Word16 - , oInjectEvents :: [Injection] - } - deriving (Show) - --- | Options for the logging subsystem. -data Log = Log - { lTarget :: Maybe (LogTarget FilePath) - , lLevel :: LogLevel - } - deriving (Show) - -data LogTarget a - = LogOff - | LogStderr - | LogFile a - deriving (Show) - -data BootType - = BootComet - | BootFake Text - | BootFromKeyfile FilePath - deriving (Show) - -data PillSource - = PillSourceFile FilePath - | PillSourceURL String - deriving (Show) - -data Nat - = NatAlways - | NatWhenPrivateNetwork - | NatNever - deriving (Show) - -data Injection - = InjectOneEvent FilePath - | InjectManyEvents FilePath - deriving (Show) - -data New = New - { nPillSource :: PillSource - , nPierPath :: Maybe FilePath -- Derived from ship name if not specified. - , nArvoDir :: Maybe FilePath - , nBootType :: BootType - , nLite :: Bool - , nEthNode :: String - , nSerfExe :: Maybe Text - } - deriving (Show) - -data Run = Run - { rPierPath :: FilePath - } - deriving (Show) - -data Bug - = ValidatePill - { bPillPath :: FilePath - , bPrintPil :: Bool - , bPrintSeq :: Bool - } - | CollectAllFX - { bPierPath :: FilePath - } - | EventBrowser - { bPierPath :: FilePath - } - | ValidateEvents - { bPierPath :: FilePath - , bFirstEvt :: Word64 - , bFinalEvt :: Word64 - } - | ValidateFX - { bPierPath :: FilePath - , bFirstEvt :: Word64 - , bFinalEvt :: Word64 - } - | ReplayEvents - { bPierPath :: FilePath - , bFinalEvt :: Word64 - } - | CheckDawn - { bEthNode :: String - , bKeyfilePath :: FilePath - } - | CheckComet - deriving (Show) - -data Cmd - = CmdNew New Opts - | CmdRun Host [(Run, Opts, Bool)] - | CmdBug Bug - | CmdCon FilePath - deriving (Show) - --------------------------------------------------------------------------------- - -headNote :: String -> Doc -headNote _version = string $ intercalate "\n" - [ "Urbit: a personal server operating function" - , "https://urbit.org" - , "Version " <> VERSION_urbit_king - ] - --- | TODO This needs to be updated. -footNote :: String -> Doc -footNote exe = string $ intercalate "\n" - [ "Development Usage:" - , " To create a development ship, use a fakezod:" - , " $ " <>exe<> " new zod /path/to/pill -F zod -A arvo/folder" - , "" - , "Simple Usage: " - , " $ " <>exe<> " new pier to create a comet (anonymous urbit)" - , " $ " <>exe<> " new pier -k if you own a planet" - , " $ " <>exe<> " run to restart an existing urbit" - , "" - , "For more information about developing on urbit, see:" - , " https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md" - ] - --------------------------------------------------------------------------------- - -parseArgs :: IO (Cmd, Log) -parseArgs = do - nm <- getProgName - - let p = prefs $ showHelpOnError - <> showHelpOnEmpty - <> columns 80 - - let o = info (cmd <**> helper) - $ progDesc "Start an existing Urbit or boot a new one." - <> headerDoc (Just $ headNote "0.9001.0") - <> footerDoc (Just $ footNote nm) - <> fullDesc - - customExecParser p o - --------------------------------------------------------------------------------- - -defaultPillURL :: String -defaultPillURL = "https://bootstrap.urbit.org/urbit-v" <> ver <> ".pill" - where - ver = VERSION_urbit_king - --------------------------------------------------------------------------------- - -newComet :: Parser BootType -newComet = flag' BootComet - ( long "comet" - <> help "Boot a new comet" - ) - -newFakeship :: Parser BootType -newFakeship = BootFake <$> strOption - (short 'F' - <> long "fake" - <> metavar "SHIP" - <> help "Boot a fakeship") - -newFromKeyfile :: Parser BootType -newFromKeyfile = BootFromKeyfile <$> strOption - (short 'k' - <> long "keyfile" - <> metavar "KEYFILE" - <> help "Boot from a keyfile") - -pillFromPath :: Parser PillSource -pillFromPath = PillSourceFile <$> strOption - ( short 'B' - <> long "pill" - <> metavar "PILL" - <> help "Path to pill file") - -pillFromURL :: Parser PillSource -pillFromURL = PillSourceURL <$> strOption - ( short 'u' - <> long "pill-url" - <> metavar "URL" - <> value defaultPillURL - <> help "URL to pill file") - -pierPath :: Parser FilePath -pierPath = strArgument (metavar "PIER" <> help "Path to pier") - -injectEvents :: Parser [Injection] -injectEvents = many $ InjectOneEvent <$> strOption - ( short 'I' - <> long "inject-event" - <> metavar "JAM" - <> help "Path to a jammed event" - <> hidden) - <|> InjectManyEvents <$> strOption - ( long "inject-event-list" - <> metavar "JAM_LIST" - <> help "Path to a jammed list of events" - <> hidden) - -serfExe :: Parser (Maybe Text) -serfExe = optional - $ strOption - $ metavar "PATH" - <> long "serf" - <> help "Path to serf binary to run ships in" - <> hidden - -ethNode :: Parser String -ethNode = strOption - $ short 'e' - <> long "l2-endpoint" - <> value "https://l2.urbit.org/v1/azimuth" --TODO - <> help "Azimuth Layer 2 RPC API endpoint URL" - <> hidden - -new :: Parser New -new = do - nPierPath <- optional pierPath - - nBootType <- newComet <|> newFakeship <|> newFromKeyfile - - nPillSource <- pillFromPath <|> pillFromURL - - nLite <- switch - $ short 'l' - <> long "lite" - <> help "Boots ship in lite mode" - - nArvoDir <- option auto - $ metavar "PATH" - <> short 'A' - <> long "arvo" - <> value Nothing - <> help "Replace initial clay filesys with contents of PATH" - - nEthNode <- ethNode - - nSerfExe <- serfExe - - pure New{..} - -opts :: Parser Opts -opts = do - oAmesPort <- - optional - $ option auto - $ metavar "PORT" - <> short 'p' - <> long "ames" - <> help "Ames port" - <> hidden - - oNoAmes <- - switch - $ long "no-ames" - <> help "Run with Ames disabled." - <> hidden - - oNoHttp <- - switch - $ long "no-http" - <> help "Run with HTTP disabled." - <> hidden - - oNoHttps <- - switch - $ long "no-https" - <> help "Run with HTTPS disabled." - <> hidden - - oHttpPort <- - optional - $ option auto - $ metavar "PORT" - <> long "http-port" - <> help "HTTP port" - <> hidden - - oHttpsPort <- - optional - $ option auto - $ metavar "PORT" - <> long "https-port" - <> help "HTTPS port" - <> hidden - - oLoopbackPort <- - optional - $ option auto - $ metavar "PORT" - <> long "loopback-port" - <> help "Localhost-only HTTP port" - <> hidden - - oInjectEvents <- injectEvents - - oHashless <- switch $ short 'S' - <> long "hashless" - <> help "Disable battery hashing (Ignored for now)" - <> hidden - - oQuiet <- switch $ short 'q' - <> long "quiet" - <> help "Quiet" - <> hidden - - oVerbose <- switch $ short 'v' - <> long "verbose" - <> help "Puts the serf and king into verbose mode" - <> hidden - - oExit <- switch $ short 'x' - <> long "exit" - <> help "Exit immediately" - <> hidden - - oDryRun <- switch $ long "dry-run" - <> help "Persist no events and turn off Ames networking" - <> hidden - - oDryFrom <- optional $ option auto $ metavar "EVENT" - <> long "dry-from" - <> help "Dry run from event number" - <> hidden - - oTrace <- switch $ short 't' - <> long "trace" - <> help "Enable tracing" - <> hidden - - oLocalhost <- switch $ short 'L' - <> long "local" - <> help "Localhost-only networking" - <> hidden - - oCollectFx <- switch $ short 'f' - <> long "collect-fx" - <> help "Write effects to disk for debugging" - <> hidden - - oOffline <- switch $ short 'O' - <> long "offline" - <> help "Run without any networking" - <> hidden - - oFullReplay <- switch - $ long "full-log-replay" - <> help "Ignores snapshot and recomputes state from event log" - <> hidden - - pure (Opts{..}) - -log :: Parser Log -log = do - lTarget <- - optional - $ ( flag' LogStderr - $ long "log-to-stderr" - <> long "stderr" - <> help "Display logs on stderr" - <> hidden - ) - <|> ( fmap LogFile . strOption - $ long "log-to" - <> metavar "LOG_FILE" - <> help "Append logs to the given file" - <> hidden - ) - <|> ( flag' LogOff - $ long "no-logging" - <> help "Disable logging entirely" - <> hidden - ) - - lLevel <- - ( flag' LevelDebug - $ long "log-debug" - <> help "Log errors, warnings, info, and debug messages" - <> hidden - ) - <|> ( flag' LevelInfo - $ long "log-info" - <> help "Log errors, warnings, and info" - <> hidden - ) - <|> ( flag' LevelWarn - $ long "log-warn" - <> help "Log errors and warnings (default)" - <> hidden - ) - <|> ( flag' LevelError - $ long "log-error" - <> help "Log errors only" - <> hidden - ) - <|> pure LevelWarn - - pure (Log{..}) - -newShip :: Parser (Cmd, Log) -newShip = (,) <$> (CmdNew <$> new <*> opts) <*> log - -runOneShip :: Parser (Run, Opts, Bool) -runOneShip = (,,) <$> fmap Run pierPath <*> opts <*> df - where - df = switch (short 'd' <> long "daemon" <> help "Daemon mode" <> hidden) - -host :: Parser Host -host = do - hSharedHttpPort <- - optional - $ option auto - $ metavar "PORT" - <> long "shared-http-port" - <> help "HTTP port" - <> hidden - - hSharedHttpsPort <- - optional - $ option auto - $ metavar "PORT" - <> long "shared-https-port" - <> help "HTTPS port" - <> hidden - - hUseNatPmp <- - ( flag' NatAlways - $ long "port-forwarding" - <> help "Always try to search for a router to forward ames ports" - <> hidden - ) <|> - ( flag' NatNever - $ long "no-port-forwarding" - <> help "Disable trying to ask the router to forward ames ports" - <> hidden - ) <|> - ( flag' NatWhenPrivateNetwork - $ long "port-forwarding-when-internal" - <> help ("Try asking the router to forward when ip is 192.168.0.0/16, " <> - "172.16.0.0/12 or 10.0.0.0/8 (default).") - <> hidden - ) <|> - (pure $ NatWhenPrivateNetwork) - - hSerfExe <- serfExe - - pure (Host{..}) - -runShip :: Parser (Cmd, Log) -runShip = (,) <$> (CmdRun <$> host <*> some runOneShip) <*> log - -valPill :: Parser Bug -valPill = do - bPillPath <- strArgument (metavar "PILL" <> help "Path to pill") - - bPrintPil <- switch $ long "print-pill" - <> help "Print pill" - - bPrintSeq <- switch $ long "print-boot" - <> help "Print boot sequence" - - pure ValidatePill{..} - -keyfilePath :: Parser FilePath -keyfilePath = strArgument (metavar "KEYFILE" <> help "Path to key file") - -firstEv :: Parser Word64 -firstEv = option auto $ long "first" - <> metavar "FST" - <> help "starting from event FST" - <> value 1 - -lastEv :: Parser Word64 -lastEv = option auto $ long "last" - <> metavar "LAS" - <> help "ending with event LAS" - <> value maxBound - -checkEvs :: Parser Bug -checkEvs = ValidateEvents <$> pierPath <*> firstEv <*> lastEv - -checkFx :: Parser Bug -checkFx = ValidateFX <$> pierPath <*> firstEv <*> lastEv - -replayEvs :: Parser Bug -replayEvs = ReplayEvents <$> pierPath <*> lastEv - -browseEvs :: Parser Bug -browseEvs = EventBrowser <$> pierPath - -checkDawn :: Parser Bug -checkDawn = CheckDawn <$> ethNode <*> keyfilePath - -bugCmd :: Parser (Cmd, Log) -bugCmd = (flip (,) <$> log <*>) $ fmap CmdBug - $ subparser - $ command "validate-pill" - ( info (valPill <**> helper) - $ progDesc "Validate a pill file." - ) - <> command "collect-all-fx" - ( info (allFx <**> helper) - $ progDesc "Replay entire event log, collecting all effects" - ) - <> command "validate-events" - ( info (checkEvs <**> helper) - $ progDesc "Parse all data in event log" - ) - <> command "event-browser" - ( info (browseEvs <**> helper) - $ progDesc "Interactively view (and prune) event log" - ) - <> command "validate-effects" - ( info (checkFx <**> helper) - $ progDesc "Parse all data in event log" - ) - <> command "partial-replay" - ( info (replayEvs <**> helper) - $ progDesc "Replay up to N events" - ) - <> command "dawn" - ( info (checkDawn <**> helper) - $ progDesc "Test run dawn" - ) - <> command "comet" - ( info (pure CheckComet) - $ progDesc "Shows the list of stars accepting comets" - ) - -conCmd :: Parser (Cmd, Log) -conCmd = (,) <$> (CmdCon <$> pierPath) <*> log - -allFx :: Parser Bug -allFx = do - bPierPath <- strArgument (metavar "PIER" <> help "Path to pier") - pure CollectAllFX{..} - -cmd :: Parser (Cmd, Log) -cmd = subparser - $ command "new" ( info (newShip <**> helper) - $ progDesc "Boot a new ship." - ) - <> command "run" ( info (runShip <**> helper) - $ progDesc "Run an existing ship." - ) - <> command "bug" ( info (bugCmd <**> helper) - $ progDesc "Run a debugging sub-command." - ) - <> command "con" ( info (conCmd <**> helper) - $ progDesc "Connect a terminal to a running urbit." - ) diff --git a/pkg/hs/urbit-king/lib/Urbit/King/Config.hs b/pkg/hs/urbit-king/lib/Urbit/King/Config.hs deleted file mode 100644 index 4ccece736..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/Config.hs +++ /dev/null @@ -1,61 +0,0 @@ -{-| - Pier Configuration --} -module Urbit.King.Config where - -import Urbit.Prelude - -import qualified Urbit.Vere.Serf as Serf - -{-| - All the configuration data revolving around a ship and the current - execution options. --} -data PierConfig = PierConfig - { _pcPierPath :: FilePath - , _pcDryRun :: Bool - , _pcSerfExe :: Maybe Text - , _pcSerfFlags :: [Serf.Flag] - } deriving (Show) - -makeLenses ''PierConfig - -class HasPierPath a where - pierPathL :: Lens' a FilePath - -class HasDryRun a where - dryRunL :: Lens' a Bool - -class (HasPierPath a, HasDryRun a) => HasPierConfig a where - pierConfigL :: Lens' a PierConfig - -instance HasPierPath PierConfig where - pierPathL = pcPierPath - -instance HasDryRun PierConfig where - dryRunL = pcDryRun - - -------------------------------------------------------------------------------- - -data NetMode - = NMNone - | NMLocalhost - | NMNormal - deriving (Eq, Ord, Show) - -data NetworkConfig = NetworkConfig - { _ncNetMode :: NetMode - , _ncAmesPort :: Maybe Word16 - , _ncNoAmes :: Bool - , _ncNoHttp :: Bool - , _ncNoHttps :: Bool - , _ncHttpPort :: Maybe Word16 - , _ncHttpsPort :: Maybe Word16 - , _ncLocalPort :: Maybe Word16 - } deriving (Show) - -makeLenses ''NetworkConfig - -class HasNetworkConfig env where - networkConfigL :: Lens' env NetworkConfig diff --git a/pkg/hs/urbit-king/lib/Urbit/King/EventBrowser.hs b/pkg/hs/urbit-king/lib/Urbit/King/EventBrowser.hs deleted file mode 100644 index da8fe9515..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/EventBrowser.hs +++ /dev/null @@ -1,194 +0,0 @@ -{-| - Interactive Event-Log Browser - - TODO Handle CTRL-D --} - -module Urbit.King.EventBrowser (run) where - -import Urbit.Prelude - -import Data.Conduit -import Urbit.Arvo -import Urbit.Noun.Time -import Urbit.Vere.Pier.Types - -import Control.Monad.Trans.Maybe (MaybeT(..)) -import Urbit.EventLog.LMDB (EventLog) -import Urbit.EventLog.Event (parseLogEvent) - -import qualified Data.Conduit.Combinators as C -import qualified Urbit.EventLog.LMDB as Log - - --------------------------------------------------------------------------------- - -data Event = Event - { num :: Word64 - , mug :: Mug - , wen :: Wen - , ova :: Ev - } - deriving Show - -data Input = Next | Prev | Quit | Trim | Effs | Init | Last - --------------------------------------------------------------------------------- - -run :: HasLogFunc e => EventLog -> RIO e () -run log = do - hSetBuffering stdin NoBuffering - hSetEcho stdin False - logInfo $ displayShow (Log.identity log) - let cycle = fromIntegral $ lifecycleLen $ Log.identity log - las <- atomically (Log.lastEv log) - loop cycle las las - where - failRead cur = - putStrLn ("ERROR: Failed to read event: " <> tshow cur) - - input cyc las cur mFx = do - getInput las cur >>= \case - Next -> loop cyc las (succ cur) - Prev -> loop cyc las (pred cur) - Init -> loop cyc las 1 - Last -> loop cyc las las - Quit -> pure () - Trim -> trim cyc las cur mFx - Effs -> showEffects mFx >> input cyc las cur mFx - - trim cyc las cur mFx = do - deleteFrom log las cur >>= \case - True -> loop cyc (pred cur) (pred cur) - False -> input cyc las cur mFx - - loop cyc las 0 = loop cyc las 1 - loop cyc las cur | cur > las = loop cyc las las - loop cyc las cur | cyc >= cur = do - putStrLn "" - putStrLn " [EVENT]" - putStrLn "" - putStrLn " Lifecycle Nock" - putStrLn "" - input cyc las cur (Just []) - - loop cyc las cur = do - mEv <- peekEvent log cur - mFx <- peekEffect log cur - - case mEv of - Nothing -> failRead cur - Just ev -> showEvent ev >> showEffectsTeaser mFx - - input cyc las cur mFx - -deleteFrom :: HasLogFunc e => EventLog -> Word64 -> Word64 -> RIO e Bool -deleteFrom log las cur = do - sure <- areYouSure - if sure then doDelete else abortDelete - pure sure - where - abortDelete = do - putStrLn "\n\n [ABORTED]\n" - putStrLn " Aborted delete, no events pruned.\n" - - doDelete = do - Log.trimEvents log cur - putStrLn "\n\n [DELETED]\n" - putStrLn " It's gone forever!\n" - - question = - if las == cur - then mconcat [ " This will permanently delete the last event (#" - , tshow las - , ")\n" ] - else mconcat [ " This will permanently delete all events in (#" - , tshow cur - , " - #" - , tshow las - , ")\n" ] - - areYouSure = do - putStrLn "\n\n ARE YOU SURE????" - putStrLn "" - putStrLn question - putStr "(y|n) " - hFlush stdout - getChar <&> \case - 'y' -> True - _ -> False - -getInput :: Word64 -> Word64 -> RIO e Input -getInput las cur = do - putStr ("(" <> tshow cur <> "/" <> tshow las <> ") ") - hFlush stdout - getChar >>= \case - 'j' -> pure Next - 'k' -> pure Prev - 'q' -> pure Quit - 'f' -> pure Effs - 'x' -> pure Trim - '0' -> pure Init - 'G' -> pure Last - _ -> do putStrLn "\n" - putStrLn help - getInput las cur - where - help = unlines - [ " [HELP]" - , "" - , " k View the previous event" - , " j View the next event" - , " 0 View the first event" - , " G View the last event" - , " q Quit" - , " x Delete (only the last event)" - , " ? Show this help" - ] - -showEffectsTeaser :: Maybe FX -> RIO e () -showEffectsTeaser Nothing = putStrLn " [No collected effects]\n" -showEffectsTeaser (Just []) = putStrLn " [No effects for this event]\n" -showEffectsTeaser (Just fx) = putStrLn $ mconcat - [ " [" - , tshow (length fx) - , " collected effects. Press 'f' to view]\n" - ] - -showEffects :: Maybe FX -> RIO e () -showEffects Nothing = putStrLn " [No collected effects]\n" -showEffects (Just []) = putStrLn " [No effects for this event]\n" -showEffects (Just fx) = do - putStrLn "\n" - putStrLn " [EFFECTS]" - for_ fx $ \ef -> do - putStrLn "" - showEffect ef - putStrLn "" - -showEffect :: Lenient Ef -> RIO e () -showEffect (GoodParse ef) = - putStrLn $ unlines $ fmap (" " <>) $ lines $ pack $ ppShow ef -showEffect (FailParse n) = - putStrLn $ unlines $ fmap (" " <>) $ lines $ pack $ ppShow n - -showEvent :: Event -> RIO e () -showEvent ev = do - putStrLn "\n" - putStrLn " [EVENT]" - putStrLn "" - putStrLn $ unlines $ fmap (" " <>) $ lines $ pack $ ppShow (ova ev) - -peekEffect :: HasLogFunc e => EventLog -> Word64 -> RIO e (Maybe FX) -peekEffect log eId = runMaybeT $ do - (id, bs) <- MaybeT $ runConduit (Log.streamEffectsRows log eId .| C.head) - guard (id == eId) - io $ cueBSExn bs >>= fromNounExn - -peekEvent :: HasLogFunc e => EventLog -> Word64 -> RIO e (Maybe Event) -peekEvent log eId = runMaybeT $ do - octs <- MaybeT $ runConduit (Log.streamEvents log eId .| C.head) - (m,n) <- io $ parseLogEvent octs - (w,e) <- io $ fromNounExn n - ovum <- fromNounExn e - pure (Event eId m w ovum) diff --git a/pkg/hs/urbit-king/lib/Urbit/King/Main.hs b/pkg/hs/urbit-king/lib/Urbit/King/Main.hs deleted file mode 100644 index d7ae6d392..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/Main.hs +++ /dev/null @@ -1,965 +0,0 @@ -{- | - # Signal Handling (SIGTERM, SIGINT) - - We handle SIGTERM by causing the main thread to raise a `UserInterrupt` - exception. This is the same behavior as SIGINT (the signal sent upon - `CTRL-C`). - - The main thread is therefore responsible for handling this exception - and causing everything to shut down properly. - - # Crashing and Shutting Down - - Rule number one: The King never crashes. - - This rule is asperational at the moment, but it needs to become as - close to truth as possible. Shut down ships in extreme cases, but - never let the king go down. --} - -{- - TODO These some old scribbled notes. They don't belong here - anymore. Do something about it. - - # Event Pruning - - - `king discard-events NUM_EVENTS`: Delete the last `n` events from - the event log. - - - `king discard-events-interactive`: Iterate through the events in - the event log, from last to first, pretty-print each event, and - ask if it should be pruned. - - # Implement subcommands to test event and effect parsing. - - - `king * --collect-fx`: All effects that come from the serf get - written into the `effects` LMDB database. - - - `king clear-fx PIER`: Deletes all collected effects. - - - `king full-replay PIER`: Replays the whole event log events, print - any failures. On success, replace the snapshot. - - - # Full Replay -- An Integration Test - - - Copy the event log: - - - Create a new event log at the destination. - - Stream events from the first event log. - - Parse each event. - - Re-Serialize each event. - - Verify that the round-trip was successful. - - Write the event into the new database. - - - Replay the event log at the destination. - - If `--collect-fx` is set, then record effects as well. - - - Snapshot. - - - Verify that the final mug is the same as it was before. - - # Implement Remaining Serf Flags - - - `DebugRam`: Memory debugging. - - `DebugCpu`: Profiling - - `CheckCorrupt`: Heap Corruption Tests - - `CheckFatal`: TODO What is this? - - `Verbose`: TODO Just the `-v` flag? - - `DryRun`: TODO Just the `-N` flag? - - `Quiet`: TODO Just the `-q` flag? - - `Hashless`: Don't use hashboard for jets. --} - -module Urbit.King.Main (main) where - -import Urbit.Prelude - -import Data.Conduit -import Network.HTTP.Client.TLS -import RIO.Directory -import Urbit.Arvo -import Urbit.King.Config -import Urbit.Vere.Dawn -import Urbit.Vere.Pier -import Urbit.Vere.Ports -import Urbit.Vere.Eyre.Multi (multiEyre, MultiEyreConf(..)) -import Urbit.Vere.Pier.Types -import Urbit.Vere.Serf -import Urbit.King.App - -import Control.Concurrent (myThreadId) -import Control.Exception (AsyncException(UserInterrupt)) -import System.Process (system) -import System.IO (hPutStrLn) -import Urbit.Noun.Time (Wen) -import Urbit.Vere.LockFile (lockFile) - -import qualified Data.Set as Set -import qualified Data.Text as T -import qualified Network.HTTP.Client as C -import qualified System.Posix.Signals as Sys -import qualified System.Posix.Resource as Sys -import qualified System.ProgressBar as PB -import qualified System.Random as Sys -import qualified Urbit.EventLog.LMDB as Log -import qualified Urbit.King.CLI as CLI -import qualified Urbit.King.EventBrowser as EventBrowser -import qualified Urbit.Ob as Ob -import qualified Urbit.Vere.Pier as Pier -import qualified Urbit.Vere.Serf as Serf -import qualified Urbit.Vere.Term as Term - - --------------------------------------------------------------------------------- - -removeFileIfExists :: HasLogFunc env => FilePath -> RIO env () -removeFileIfExists pax = do - exists <- doesFileExist pax - when exists $ do - removeFile pax - - --- Compile CLI Flags to Pier Configuration ------------------------------------- - -{- - TODO: This is not all of the flags. - Urbit is basically useless with hashboard, so we ignore that flag. --} -toSerfFlags :: CLI.Opts -> [Serf.Flag] -toSerfFlags CLI.Opts{..} = catMaybes m - where - m = [ setFrom oQuiet Serf.Quiet - , setFrom oTrace Serf.Trace - , setFrom (oHashless || True) Serf.Hashless - , setFrom oQuiet Serf.Quiet - , setFrom oVerbose Serf.Verbose - , setFrom (oDryRun || isJust oDryFrom) Serf.DryRun - ] - setFrom True flag = Just flag - setFrom False _ = Nothing - -toPierConfig :: FilePath -> Maybe Text -> CLI.Opts -> PierConfig -toPierConfig pierPath serfExe o@(CLI.Opts{..}) = PierConfig { .. } - where - _pcPierPath = pierPath - _pcDryRun = oDryRun || isJust oDryFrom - _pcSerfExe = serfExe - _pcSerfFlags = toSerfFlags o - -toNetworkConfig :: CLI.Opts -> NetworkConfig -toNetworkConfig CLI.Opts {..} = NetworkConfig { .. } - where - dryRun = oDryRun || isJust oDryFrom - offline = dryRun || oOffline - - mode = case (dryRun, offline, oLocalhost) of - (True, _ , _ ) -> NMNone - (_ , True, _ ) -> NMNone - (_ , _ , True) -> NMLocalhost - (_ , _ , _ ) -> NMNormal - - _ncNetMode = mode - _ncAmesPort = oAmesPort - _ncHttpPort = oHttpPort - _ncHttpsPort = oHttpsPort - _ncLocalPort = oLoopbackPort - _ncNoAmes = oNoAmes - _ncNoHttp = oNoHttp - _ncNoHttps = oNoHttps - -logStderr :: HasStderrLogFunc e => RIO LogFunc a -> RIO e a -logStderr action = do - logFunc <- view stderrLogFuncL - runRIO logFunc action - -logSlogs :: HasStderrLogFunc e => RIO e (TVar ((Atom, Tank) -> IO ())) -logSlogs = logStderr $ do - env <- ask - newTVarIO (runRIO env . logOther "serf" . display . T.strip . tankToText . snd) - -tryBootFromPill - :: Bool - -> Pill - -> Bool - -> Ship - -> LegacyBootEvent - -> Feed - -> RIO PierEnv () -tryBootFromPill oExit pill lite ship boot feed = do - mStart <- newEmptyMVar - vSlog <- logSlogs - runOrExitImmediately vSlog (bootedPier vSlog) oExit mStart [] - where - bootedPier vSlog = do - view pierPathL >>= lockFile - rio $ logInfo "Starting boot" - sls <- Pier.booted vSlog pill lite ship boot feed - rio $ logInfo "Completed boot" - pure sls - -runOrExitImmediately - :: TVar ((Atom, Tank) -> IO ()) - -> RAcquire PierEnv (Serf, Log.EventLog) - -> Bool - -> MVar () - -> [Ev] - -> RIO PierEnv () -runOrExitImmediately vSlog getPier oExit mStart injected = do - rwith getPier (if oExit then shutdownImmediately else runPier) - where - shutdownImmediately :: (Serf, Log.EventLog) -> RIO PierEnv () - shutdownImmediately (serf, log) = do - logInfo "Sending shutdown signal" - Serf.stop serf - logInfo "Shutdown!" - - runPier :: (Serf, Log.EventLog) -> RIO PierEnv () - runPier serfLog = do - runRAcquire (Pier.pier serfLog vSlog mStart injected) - -tryPlayShip - :: Bool - -> Bool - -> Maybe Word64 - -> MVar () - -> [Ev] - -> RIO PierEnv () -tryPlayShip exitImmediately fullReplay playFrom mStart injected = do - when fullReplay wipeSnapshot - vSlog <- logSlogs - runOrExitImmediately vSlog (resumeShip vSlog) exitImmediately mStart injected - where - wipeSnapshot = do - shipPath <- view pierPathL - logInfo "wipeSnapshot" - logInfo $ display $ pack @Text ("Wiping " <> north shipPath) - logInfo $ display $ pack @Text ("Wiping " <> south shipPath) - removeFileIfExists (north shipPath) - removeFileIfExists (south shipPath) - - north shipPath = shipPath <> "/.urb/chk/north.bin" - south shipPath = shipPath <> "/.urb/chk/south.bin" - - resumeShip :: TVar ((Atom, Tank) -> IO ()) - -> RAcquire PierEnv (Serf, Log.EventLog) - resumeShip vSlog = do - view pierPathL >>= lockFile - rio $ logInfo "RESUMING SHIP" - sls <- Pier.resumed vSlog playFrom - rio $ logInfo "SHIP RESUMED" - pure sls - -runRAcquire :: (MonadUnliftIO (m e), MonadIO (m e), MonadReader e (m e)) - => RAcquire e a -> m e a -runRAcquire act = rwith act pure - - --------------------------------------------------------------------------------- - -checkEvs :: FilePath -> Word64 -> Word64 -> RIO KingEnv () -checkEvs pierPath first last = do - rwith (Log.existing logPath) $ \log -> do - let ident = Log.identity log - let pbSty = PB.defStyle { PB.stylePostfix = PB.exact } - logInfo (displayShow ident) - - last <- atomically $ Log.lastEv log <&> \lastReal -> min last lastReal - - let evCount = fromIntegral (last - first) - - pb <- PB.newProgressBar pbSty 10 (PB.Progress 1 evCount ()) - - runConduit $ Log.streamEvents log first .| showEvents - pb - first - (fromIntegral $ lifecycleLen ident) - where - logPath :: FilePath - logPath = pierPath <> "/.urb/log" - - showEvents - :: PB.ProgressBar () - -> EventId - -> EventId - -> ConduitT ByteString Void (RIO KingEnv) () - showEvents pb eId _ | eId > last = pure () - showEvents pb eId cycle = await >>= \case - Nothing -> do - lift $ PB.killProgressBar pb - lift $ logInfo "Everything checks out." - Just bs -> do - lift $ PB.incProgress pb 1 - lift $ do - n <- io $ cueBSExn bs - when (eId > cycle) $ do - (mug, wen, evNoun) <- unpackJob n - fromNounErr evNoun & \case - Left err -> logError (displayShow (eId, err)) - Right (_ :: Ev) -> pure () - showEvents pb (succ eId) cycle - - unpackJob :: Noun -> RIO KingEnv (Mug, Wen, Noun) - unpackJob = io . fromNounExn - - --------------------------------------------------------------------------------- - -collectAllFx :: FilePath -> RIO KingEnv () -collectAllFx = error "TODO" - -{- -{-| - This runs the serf at `$top/.tmpdir`, but we disable snapshots, - so this should never actually be created. We just do this to avoid - letting the serf use an existing snapshot. --} -collectAllFx :: FilePath -> RIO KingEnv () -collectAllFx top = do - logInfo $ display $ pack @Text top - vSlog <- logSlogs - rwith (collectedFX vSlog) $ \() -> - logInfo "Done collecting effects!" - where - tmpDir :: FilePath - tmpDir = top ".tmpdir" - - collectedFX :: TVar (Text -> IO ()) -> RAcquire KingEnv () - collectedFX vSlog = do - lockFile top - log <- Log.existing (top <> "/.urb/log") - serf <- Pier.runSerf vSlog tmpDir serfFlags - rio $ Serf.collectFX serf log - - serfFlags :: [Serf.Flag] - serfFlags = [Serf.Hashless, Serf.DryRun] --} - - --------------------------------------------------------------------------------- - -replayPartEvs :: FilePath -> Word64 -> RIO KingEnv () -replayPartEvs top last = do - logInfo $ display $ pack @Text top - fetchSnapshot - rwith replayedEvs $ \() -> - logInfo "Done replaying events!" - where - fetchSnapshot :: RIO KingEnv () - fetchSnapshot = do - snap <- Pier.getSnapshot top last - case snap of - Nothing -> pure () - Just sn -> do - liftIO $ system $ "cp -r \"" <> sn <> "\" \"" <> tmpDir <> "\"" - pure () - - tmpDir :: FilePath - tmpDir = top ".partial-replay" show last - - replayedEvs :: RAcquire KingEnv () - replayedEvs = do - lockFile top - log <- Log.existing (top <> "/.urb/log") - let onSlog = print - let onStdr = print - let onDead = error "DIED" - let config = Serf.Config "urbit-worker" tmpDir serfFlags onSlog onStdr onDead - (serf, info) <- io (Serf.start config) - rio $ do - eSs <- Serf.execReplay serf log (Just last) - case eSs of - Left bail -> error (show bail) - Right 0 -> io (Serf.snapshot serf) - Right num -> pure () - io $ threadDelay 500000 -- Copied from runOrExitImmediately - pure () - - serfFlags :: [Serf.Flag] - serfFlags = [Serf.Hashless] - - --------------------------------------------------------------------------------- - -{-| - Interesting --} -testPill :: HasKingEnv e => FilePath -> Bool -> Bool -> RIO e () -testPill pax showPil showSeq = do - logInfo "Reading pill file." - pillBytes <- readFile pax - - logInfo "Cueing pill file." - pillNoun <- io $ cueBS pillBytes & either throwIO pure - - logInfo "Parsing pill file." - pill <- fromNounErr pillNoun & either (throwIO . uncurry ParseErr) pure - - logInfo "Using pill to generate boot sequence." - bootSeq <- genBootSeq - (Ship 0) - pill - False - (Fake (Ship 0)) - (Feed1 $ Germs (Ship 0) []) - - logInfo "Validate jam/cue and toNoun/fromNoun on pill value" - reJam <- validateNounVal pill - - logInfo "Checking if round-trip matches input file:" - unless (reJam == pillBytes) $ do - logInfo " Our jam does not match the file...\n" - logInfo " This is surprising, but it is probably okay." - - when showPil $ do - logInfo "\n\n== Pill ==\n" - io $ pPrint pill - - when showSeq $ do - logInfo "\n\n== Boot Sequence ==\n" - io $ pPrint bootSeq - -validateNounVal :: (HasLogFunc e, Eq a, ToNoun a, FromNoun a) - => a -> RIO e ByteString -validateNounVal inpVal = do - logInfo " jam" - inpByt <- evaluate $ jamBS $ toNoun inpVal - - logInfo " cue" - outNon <- cueBS inpByt & either throwIO pure - - logInfo " fromNoun" - outVal <- fromNounErr outNon & either (throwIO . uncurry ParseErr) pure - - logInfo " toNoun" - outNon <- evaluate (toNoun outVal) - - logInfo " jam" - outByt <- evaluate $ jamBS outNon - - logInfo "Checking if: x == cue (jam x)" - unless (inpVal == outVal) $ - error "Value fails test: x == cue (jam x)" - - logInfo "Checking if: jam x == jam (cue (jam x))" - unless (inpByt == outByt) $ - error "Value fails test: jam x == jam (cue (jam x))" - - pure outByt - - --------------------------------------------------------------------------------- - -pillFrom :: CLI.PillSource -> RIO HostEnv Pill -pillFrom = \case - CLI.PillSourceFile pillPath -> do - logInfo $ display $ "boot: reading pill from " ++ (pack pillPath :: Text) - io (loadFile pillPath >>= either throwIO pure) - - CLI.PillSourceURL url -> do - logInfo $ display $ "boot: retrieving pill from " ++ (pack url :: Text) - -- Get the jamfile with the list of stars accepting comets right now. - manager <- io $ C.newManager tlsManagerSettings - request <- io $ C.parseRequest url - response <- io $ C.httpLbs (C.setRequestCheckStatus request) manager - let body = toStrict $ C.responseBody response - - noun <- cueBS body & either throwIO pure - fromNounErr noun & either (throwIO . uncurry ParseErr) pure - -multiOnFatal :: HasKingEnv e => e -> IO () -multiOnFatal env = runRIO env $ do - (view stderrLogFuncL >>=) $ flip runRIO $ logError - ("Urbit is shutting down because of a problem with the HTTP server.\n" - <> "Please restart it at your leisure.") - view killKingActionL >>= atomically - -newShip :: CLI.New -> CLI.Opts -> RIO KingEnv () -newShip CLI.New{..} opts = do - {- - TODO XXX HACK - - Because the "new ship" flow *may* automatically start the ship, - we need to create this, but it's not actually correct. - - The right solution is to separate out the "new ship" flow from the - "run ship" flow, and possibly sequence them from the outside if - that's really needed. - -} - env <- ask - multi <- multiEyre (multiOnFatal env) (MultiEyreConf Nothing Nothing True) - - -- TODO: We hit the same problem as above: we need a host env to boot a ship - -- because it may autostart the ship, so build an inactive port configuration. - let ports = buildInactivePorts - - -- here we are with a king env, and we now need a multi env. - runHostEnv multi ports $ case nBootType of - CLI.BootComet -> do - pill <- pillFrom nPillSource - putStrLn "boot: retrieving list of stars currently accepting comets" - starList <- dawnCometList - putStrLn ("boot: " ++ (tshow $ length starList) ++ - " star(s) currently accepting comets") - putStrLn "boot: mining a comet" - eny <- io $ Sys.randomIO - let seed = mineComet (Set.fromList starList) eny - putStrLn ("boot: found comet " ++ renderShip (sShip seed)) - putStrLn ("code: " ++ (tshow $ deriveCode $ sRing seed)) - bootFromFeed pill $ Feed0 seed - - CLI.BootFake name -> do - pill <- pillFrom nPillSource - ship <- shipFrom name - runTryBootFromPill pill name ship (Fake ship) (Feed1 $ Germs ship []) - - CLI.BootFromKeyfile keyFile -> do - text <- readFileUtf8 keyFile - asAtom <- case cordToUW (Cord $ T.strip text) of - Nothing -> error "Couldn't parse keyfile. Hint: keyfiles start with 0w?" - Just (UW a) -> pure a - - asNoun <- cueExn asAtom - feed :: Feed <- case fromNoun asNoun of - Nothing -> error "Keyfile does not seem to contain a seed." - Just s -> pure s - - pill <- pillFrom nPillSource - - bootFromFeed pill feed - - where - shipFrom :: Text -> RIO HostEnv Ship - shipFrom name = case Ob.parsePatp name of - Left x -> error "Invalid ship name" - Right p -> pure $ Ship $ fromIntegral $ Ob.fromPatp p - - pierPath :: Text -> FilePath - pierPath name = case nPierPath of - Just x -> x - Nothing -> "./" <> unpack name - - nameFromShip :: HasKingEnv e => Ship -> RIO e Text - nameFromShip s = name - where - nameWithSig = Ob.renderPatp $ Ob.patp $ fromIntegral s - name = case stripPrefix "~" nameWithSig of - Nothing -> error "Urbit.ob didn't produce string with ~" - Just x -> pure x - - bootFromFeed :: Pill -> Feed -> RIO HostEnv () - bootFromFeed pill feed = do - ethReturn <- dawnVent nEthNode feed - - case ethReturn of - Left x -> error $ unpack x - Right dawn -> do - let ship = sShip $ dSeed dawn - name <- nameFromShip ship - runTryBootFromPill pill name ship (Dawn dawn) feed - - -- Now that we have all the information for running an application with a - -- PierConfig, do so. - runTryBootFromPill :: Pill - -> Text - -> Ship - -> LegacyBootEvent - -> Feed - -> RIO HostEnv () - runTryBootFromPill pill name ship bootEvent feed = do - vKill <- view (kingEnvL . kingEnvKillSignal) - let pierConfig = toPierConfig (pierPath name) nSerfExe opts - let networkConfig = toNetworkConfig opts - runPierEnv pierConfig networkConfig vKill $ - tryBootFromPill True pill nLite ship bootEvent feed - -runShipEnv :: Maybe Text -> CLI.Run -> CLI.Opts -> TMVar () -> RIO PierEnv a - -> RIO HostEnv a -runShipEnv serfExe (CLI.Run pierPath) opts vKill act = do - runPierEnv pierConfig netConfig vKill act - where - pierConfig = toPierConfig pierPath serfExe opts - netConfig = toNetworkConfig opts - -runShip - :: CLI.Run -> CLI.Opts -> Bool -> RIO PierEnv () -runShip (CLI.Run pierPath) opts daemon = do - mStart <- newEmptyMVar - if daemon - then runPier mStart - else do - -- Wait until the pier has started up, then connect a terminal. If - -- the terminal ever shuts down, ask the ship to go down. - connectionThread <- async $ do - readMVar mStart - finally (connTerm pierPath) $ do - view killPierActionL >>= atomically - - -- Run the pier until it finishes, and then kill the terminal. - finally (runPier mStart) $ do - cancel connectionThread - where - runPier :: MVar () -> RIO PierEnv () - runPier mStart = do - injections <- loadInjections (CLI.oInjectEvents opts) - tryPlayShip - (CLI.oExit opts) - (CLI.oFullReplay opts) - (CLI.oDryFrom opts) - mStart - injections - - loadInjections :: [CLI.Injection] -> RIO PierEnv [Ev] - loadInjections injections = do - perInjection :: [[Ev]] <- for injections $ \case - CLI.InjectOneEvent filePath -> do - logInfo $ display $ "boot: reading injected event from " ++ - (pack filePath :: Text) - io (loadFile filePath >>= either throwIO (pure . singleton)) - - CLI.InjectManyEvents filePath -> do - logInfo $ display $ "boot: reading injected event list from " ++ - (pack filePath :: Text) - io (loadFile filePath >>= either throwIO pure) - pure $ concat perInjection - - - -buildPortHandler :: HasLogFunc e => CLI.Nat -> RIO e PortControlApi -buildPortHandler CLI.NatNever = pure buildInactivePorts --- TODO: Figure out what to do about logging here. The "port: " messages are --- the sort of thing that should be put on the muxed terminal log, but we don't --- have that at this layer. -buildPortHandler CLI.NatAlways = buildNatPorts (io . hPutStrLn stderr . unpack) -buildPortHandler CLI.NatWhenPrivateNetwork = - buildNatPortsWhenPrivate (io . hPutStrLn stderr . unpack) - -startBrowser :: HasLogFunc e => FilePath -> RIO e () -startBrowser pierPath = runRAcquire $ do - -- lockFile pierPath - log <- Log.existing (pierPath <> "/.urb/log") - rio $ EventBrowser.run log - -checkDawn :: HasLogFunc e => String -> FilePath -> RIO e () -checkDawn provider keyfilePath = do - -- The keyfile is a jammed Seed then rendered in UW format - text <- readFileUtf8 keyfilePath - asAtom <- case cordToUW (Cord $ T.strip text) of - Nothing -> error "Couldn't parse keyfile. Hint: keyfiles start with 0w?" - Just (UW a) -> pure a - - asNoun <- cueExn asAtom - feed :: Feed <- case fromNoun asNoun of - Nothing -> error "Keyfile does not seem to contain a seed." - Just s -> pure s - - print $ show feed - - e <- dawnVent provider feed - print $ show e - - -checkComet :: HasLogFunc e => RIO e () -checkComet = do - starList <- dawnCometList - putStrLn "Stars currently accepting comets:" - let starNames = map (Ob.renderPatp . Ob.patp . fromIntegral) starList - print starNames - putStrLn "Trying to mine a comet..." - eny <- io $ Sys.randomIO - let s = mineComet (Set.fromList starList) eny - print s - -main :: IO () -main = do - (args, log) <- CLI.parseArgs - - hSetBuffering stdout NoBuffering - setupSignalHandlers - setRLimits - - runKingEnv args log $ case args of - CLI.CmdRun ko ships -> runShips ko ships - CLI.CmdNew n o -> newShip n o - CLI.CmdBug (CLI.CollectAllFX pax ) -> collectAllFx pax - CLI.CmdBug (CLI.EventBrowser pax ) -> startBrowser pax - CLI.CmdBug (CLI.ValidatePill pax pil s) -> testPill pax pil s - CLI.CmdBug (CLI.ValidateEvents pax f l) -> checkEvs pax f l - CLI.CmdBug (CLI.ValidateFX pax f l) -> checkFx pax f l - CLI.CmdBug (CLI.ReplayEvents pax l ) -> replayPartEvs pax l - CLI.CmdBug (CLI.CheckDawn provider pax ) -> checkDawn provider pax - CLI.CmdBug CLI.CheckComet -> checkComet - CLI.CmdCon pier -> connTerm pier - - where - runKingEnv args log = - let - verb = verboseLogging args - runStderr = case args of - CLI.CmdRun {} -> runKingEnvStderrRaw - _ -> runKingEnvStderr - CLI.Log {..} = log - in case logTarget lTarget args of - CLI.LogFile f -> runKingEnvLogFile verb lLevel f - CLI.LogStderr -> runStderr verb lLevel - CLI.LogOff -> runKingEnvNoLog - - setupSignalHandlers = do - mainTid <- myThreadId - let onKillSig = throwTo mainTid UserInterrupt - for_ [Sys.sigTERM, Sys.sigINT] $ \sig -> do - Sys.installHandler sig (Sys.Catch onKillSig) Nothing - - setRLimits = do - openFiles <- Sys.getResourceLimit Sys.ResourceOpenFiles - let soft = case Sys.hardLimit openFiles of - Sys.ResourceLimit lim -> Sys.ResourceLimit lim - Sys.ResourceLimitInfinity -> Sys.ResourceLimit 10240 -- macOS - Sys.ResourceLimitUnknown -> Sys.ResourceLimit 10240 - Sys.setResourceLimit Sys.ResourceOpenFiles - openFiles { Sys.softLimit = soft } - - verboseLogging :: CLI.Cmd -> Bool - verboseLogging = \case - CLI.CmdRun ko ships -> any CLI.oVerbose (ships <&> \(_, o, _) -> o) - _ -> False - - -- If the user hasn't specified where to log, what we do depends on what - -- command she has issued. Notably, the LogFile Nothing outcome means that - -- runKingEnvLogFile should run an IO action to get the official app data - -- directory and open a canonically named log file there. - logTarget :: Maybe (CLI.LogTarget FilePath) - -> CLI.Cmd - -> CLI.LogTarget (Maybe FilePath) - logTarget = \case - Just (CLI.LogFile f) -> const $ CLI.LogFile (Just f) - Just CLI.LogStderr -> const $ CLI.LogStderr - Just CLI.LogOff -> const $ CLI.LogOff - Nothing -> \case - CLI.CmdCon _ -> CLI.LogFile Nothing - CLI.CmdRun ko [(_,_,daemon)] | daemon -> CLI.LogStderr - | otherwise -> CLI.LogFile Nothing - CLI.CmdRun ko _ -> CLI.LogStderr - _ -> CLI.LogStderr - -{- - Runs a ship but restarts it if it crashes or shuts down on it's own. - - Once `waitForKillRequ` returns, the ship will be terminated and this - routine will exit. --} -runShipRestarting - :: Maybe Text -> CLI.Run -> CLI.Opts -> RIO HostEnv () -runShipRestarting serfExe r o = do - let pier = pack (CLI.rPierPath r) - loop = runShipRestarting serfExe r o - - onKill <- view onKillKingSigL - vKillPier <- newEmptyTMVarIO - - tid <- asyncBound $ runShipEnv serfExe r o vKillPier $ runShip r o True - - let onShipExit = Left <$> waitCatchSTM tid - onKillRequ = Right <$> onKill - - atomically (onShipExit <|> onKillRequ) >>= \case - Left exit -> do - case exit of - Left err -> logError $ display (tshow err <> ": " <> pier) - Right () -> - logError $ display ("Ship exited on it's own. Why? " <> pier) - threadDelay 250_000 - loop - Right () -> do - logTrace $ display (pier <> " shutdown requested") - atomically $ putTMVar vKillPier () - race_ (wait tid) $ do - threadDelay 5_000_000 - logInfo $ display (pier <> " not down after 5s, killing with fire.") - cancel tid - logTrace $ display ("Ship terminated: " <> pier) - -{- - TODO This is messy and shared a lot of logic with `runShipRestarting`. --} -runShipNoRestart - :: Maybe Text -> CLI.Run -> CLI.Opts -> Bool -> RIO HostEnv () -runShipNoRestart serfExe r o d = do - -- killing ship same as killing king - vKill <- view (kingEnvL . kingEnvKillSignal) - tid <- asyncBound (runShipEnv serfExe r o vKill $ runShip r o d) - onKill <- view onKillKingSigL - - let pier = pack (CLI.rPierPath r) - - let onShipExit = Left <$> waitCatchSTM tid - onKillRequ = Right <$> onKill - - atomically (onShipExit <|> onKillRequ) >>= \case - Left (Left err) -> do - logError $ display (tshow err <> ": " <> pier) - Left (Right ()) -> do - logError $ display (pier <> " exited on it's own. Why?") - Right () -> do - logTrace $ display (pier <> " shutdown requested") - race_ (wait tid) $ do - threadDelay 5_000_000 - logTrace $ display (pier <> " not down after 5s, killing with fire.") - cancel tid - logTrace $ display (pier <> " terminated.") - -runShips :: CLI.Host -> [(CLI.Run, CLI.Opts, Bool)] -> RIO KingEnv () -runShips CLI.Host {..} ships = do - let meConf = MultiEyreConf - { mecHttpPort = fromIntegral <$> hSharedHttpPort - , mecHttpsPort = fromIntegral <$> hSharedHttpsPort - , mecLocalhostOnly = False -- TODO Localhost-only needs to be - -- a king-wide option. - } - - env <- ask - multi <- multiEyre (multiOnFatal env) meConf - - ports <- buildPortHandler hUseNatPmp - - runHostEnv multi ports (go ships) - where - go :: [(CLI.Run, CLI.Opts, Bool)] -> RIO HostEnv () - go = \case - [] -> pure () - [rod] -> runSingleShip hSerfExe rod - ships -> runMultipleShips hSerfExe (ships <&> \(r, o, _) -> (r, o)) - - --- TODO Duplicated logic. -runSingleShip :: Maybe Text -> (CLI.Run, CLI.Opts, Bool) -> RIO HostEnv () -runSingleShip serfExe (r, o, d) = do - shipThread <- async (runShipNoRestart serfExe r o d) - - {- - Wait for the ship to go down. - - Since `waitCatch` will never throw an exception, the `onException` - block will only happen if this thread is killed with an async - exception. The one we expect is `UserInterrupt` which will be raised - on this thread upon SIGKILL or SIGTERM. - - If this thread is killed, we first ask the ship to go down, wait - for the ship to actually go down, and then go down ourselves. - -} - onException (void $ waitCatch shipThread) $ do - logTrace "KING IS GOING DOWN" - atomically =<< view killKingActionL - waitCatch shipThread - pure () - - -runMultipleShips :: Maybe Text -> [(CLI.Run, CLI.Opts)] -> RIO HostEnv () -runMultipleShips serfExe ships = do - shipThreads <- for ships $ \(r, o) -> do - async (runShipRestarting serfExe r o) - - {- - Since `spin` never returns, this will run until the main - thread is killed with an async exception. The one we expect is - `UserInterrupt` which will be raised on this thread upon SIGKILL - or SIGTERM. - - Once that happens, we send a shutdown signal which will cause all - ships to be shut down, and then we `wait` for them to finish before - returning. - - This is different than the single-ship flow, because ships never - go down on their own in this flow. If they go down, they just bring - themselves back up. - -} - let spin = forever (threadDelay maxBound) - finally spin $ do - logTrace "KING IS GOING DOWN" - view killKingActionL >>= atomically - for_ shipThreads waitCatch - - --------------------------------------------------------------------------------- - -connTerm :: forall e. HasLogFunc e => FilePath -> RIO e () -connTerm = Term.runTerminalClient - - --------------------------------------------------------------------------------- - -checkFx :: HasLogFunc e - => FilePath -> Word64 -> Word64 -> RIO e () -checkFx pierPath first last = - rwith (Log.existing logPath) $ \log -> - runConduit $ streamFX log first last - .| tryParseFXStream - where - logPath = pierPath <> "/.urb/log" - -streamFX :: HasLogFunc e - => Log.EventLog -> Word64 -> Word64 - -> ConduitT () ByteString (RIO e) () -streamFX log first last = do - Log.streamEffectsRows log first .| loop - where - loop = await >>= \case Nothing -> pure () - Just (eId, bs) | eId > last -> pure () - Just (eId, bs) -> yield bs >> loop - -tryParseFXStream :: HasLogFunc e => ConduitT ByteString Void (RIO e) () -tryParseFXStream = loop - where - loop = await >>= \case - Nothing -> pure () - Just bs -> do - n <- liftIO (cueBSExn bs) - fromNounErr n & either (logError . displayShow) pure - loop - - -{- -tryCopyLog :: IO () -tryCopyLog = do - let logPath = "/Users/erg/src/urbit/zod/.urb/falselog/" - falselogPath = "/Users/erg/src/urbit/zod/.urb/falselog2/" - - persistQ <- newTQueueIO - releaseQ <- newTQueueIO - (ident, nextEv, events) <- - with (do { log <- Log.existing logPath - ; Pier.runPersist log persistQ (writeTQueue releaseQ) - ; pure log - }) - \log -> do - ident <- pure $ Log.identity log - events <- runConduit (Log.streamEvents log 1 .| consume) - nextEv <- Log.nextEv log - pure (ident, nextEv, events) - - print ident - print nextEv - print (length events) - - persistQ2 <- newTQueueIO - releaseQ2 <- newTQueueIO - with (do { log <- Log.new falselogPath ident - ; Pier.runPersist log persistQ2 (writeTQueue releaseQ2) - ; pure log - }) - $ \log2 -> do - let writs = zip [1..] events <&> \(id, a) -> - (Writ id Nothing a, []) - - print "About to write" - - for_ writs $ \w -> - atomically (writeTQueue persistQ2 w) - - print "About to wait" - - replicateM_ 100 $ do - atomically $ readTQueue releaseQ2 - - print "Done" --} diff --git a/pkg/hs/urbit-king/lib/Urbit/King/Scry.hs b/pkg/hs/urbit-king/lib/Urbit/King/Scry.hs deleted file mode 100644 index 869237477..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/Scry.hs +++ /dev/null @@ -1,33 +0,0 @@ -{-| - Scry helpers --} - -module Urbit.King.Scry - ( scryNow - , module Urbit.Vere.Pier.Types - ) -where - -import Urbit.Prelude -import Urbit.Vere.Serf.Types - -import Urbit.Arvo.Common (Desk) -import Urbit.Vere.Pier.Types (ScryFunc) - -scryNow :: forall e n - . (HasLogFunc e, FromNoun n) - => ScryFunc - -> Term -- ^ vane + care as two-letter string - -> Desk -- ^ desk in scry path - -> [Text] -- ^ resource path to scry for - -> RIO e (Maybe n) -scryNow scry vare desk path = - io (scry Nothing (EachNo $ DemiOnce vare desk (Path $ MkKnot <$> path))) - >>= \case - Just ("omen", fromNoun @(Path, Term, n) -> Just (_,_,v)) -> pure $ Just v - Just (_, fromNoun @n -> Just v) -> pure $ Just v - Just (_, n) -> do - logError $ displayShow ("uncanny scry result", vare, path, n) - pure Nothing - Nothing -> pure Nothing - diff --git a/pkg/hs/urbit-king/lib/Urbit/King/TryJamPill.hs b/pkg/hs/urbit-king/lib/Urbit/King/TryJamPill.hs deleted file mode 100644 index 539638679..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/King/TryJamPill.hs +++ /dev/null @@ -1,51 +0,0 @@ -{-| - Test jam/cue on pills. --} -module Urbit.King.TryJamPill where - -import Control.Lens -import Urbit.Prelude - --------------------------------------------------------------------------------- - -main :: IO () -main = do - print "cue brass" -- void getLine - tryCueJamPill Brass - - print "cue ivory" -- void getLine - tryCueJamPill Ivory - - print "cue solid" -- void getLine - tryCueJamPill Solid - -loadNoun :: FilePath -> IO (Maybe Noun) -loadNoun = fmap (preview _Cue) . readFile - -dumpJam :: FilePath -> Noun -> IO () -dumpJam fp = writeFile fp . view (re _Cue) - -tryCuePill :: PillFile -> IO () -tryCuePill pill = - loadNoun (show pill) >>= \case Nothing -> print "nil" - Just (Atom _) -> print "atom" - Just (Cell _ _) -> print "cell" - -tryCueJamPill :: PillFile -> IO () -tryCueJamPill pill = do - n <- loadNoun (show pill) >>= \case - Nothing -> print "failure" >> pure (Atom 0) - Just n@(Atom _) -> print "atom" >> pure n - Just n@(Cell _ _) -> print "cell" >> pure n - - bs <- evaluate (force (jamBS n)) - - print ("jam size: " <> show (length bs)) - -data PillFile = Brass | Ivory | Solid - -instance Show PillFile where - show = \case - Brass -> "./bin/brass.pill" - Solid -> "./bin/solid.pill" - Ivory -> "./bin/ivory.pill" diff --git a/pkg/hs/urbit-king/lib/Urbit/Prelude.hs b/pkg/hs/urbit-king/lib/Urbit/Prelude.hs deleted file mode 100644 index 8d29b6de6..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Prelude.hs +++ /dev/null @@ -1,72 +0,0 @@ -{-| - Convenient Re-Exports --} - -module Urbit.Prelude - ( module ClassyPrelude - , module Control.Arrow - , module Control.Lens - , module Data.Acquire - , module Data.RAcquire - , module Data.Void - , module Urbit.Noun - , module Text.Show.Pretty - , module Text.Printf - , module RIO - , io, rio - , logTrace - , acquireWorker, acquireWorkerBound - , hark - ) where - -import ClassyPrelude -import Urbit.Noun - -import Control.Arrow ((<<<), (>>>)) -import Control.Lens hiding (Each, Index, cons, index, snoc, uncons, unsnoc, - (<.>), (<|)) -import Data.Acquire (Acquire, mkAcquire, with) -import Data.RAcquire (RAcquire, mkRAcquire, rwith) -import Data.RAcquire (MonadAcquire(..), MonadRIO(..)) -import Data.Void (Void, absurd) -import Text.Printf (printf) -import Text.Show.Pretty (pPrint, ppShow) - -import RIO (RIO, runRIO) -import RIO (Utf8Builder, display, displayShow) -import RIO (threadDelay) -import RIO (HasLogFunc, LogFunc, LogLevel(..), logDebug, logError, logFuncL, - logInfo, logOptionsHandle, logOther, logWarn, mkLogFunc, - setLogMinLevel, setLogUseLoc, setLogUseTime, withLogFunc) - -import qualified RIO - -io :: MonadIO m => IO a -> m a -io = liftIO - -rio :: MonadRIO m => RIO e a -> m e a -rio = liftRIO - -logTrace :: HasLogFunc e => Utf8Builder -> RIO e () -logTrace = logOther "trace" - --- | Composes a log message out of textual components. -hark :: [Text] -> Utf8Builder -hark = RIO.displayBytesUtf8 . foldMap encodeUtf8 - --- Utils for Spawning Worker Threads ------------------------------------------- - -acquireWorker :: HasLogFunc e => Text -> RIO e () -> RAcquire e (Async ()) -acquireWorker nam act = mkRAcquire (async act) kill - where - kill tid = do - logInfo ("Killing worker thread: " <> display nam) - cancel tid - -acquireWorkerBound :: HasLogFunc e => Text -> RIO e () -> RAcquire e (Async ()) -acquireWorkerBound nam act = mkRAcquire (asyncBound act) kill - where - kill tid = do - logInfo ("Killing worker thread: " <> display nam) - cancel tid - diff --git a/pkg/hs/urbit-king/lib/Urbit/Timer.hs b/pkg/hs/urbit-king/lib/Urbit/Timer.hs deleted file mode 100644 index 8664e8e88..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Timer.hs +++ /dev/null @@ -1,45 +0,0 @@ -module Urbit.Timer ( Timer(..), init, stop, start - , Sys.getSystemTime, sysTimeGapMicroSecs - ) where - -import Data.IORef -import Prelude hiding (init) - -import qualified Data.Time.Clock.System as Sys -import qualified GHC.Event as Ev - - --- Timer Stuff ----------------------------------------------------------------- - -data Timer = Timer - { bState :: IORef (Maybe Ev.TimeoutKey) - , bManager :: Ev.TimerManager - } - -init :: IO Timer -init = do - st <- newIORef Nothing - man <- Ev.getSystemTimerManager - pure (Timer st man) - -sysTimeGapMicroSecs :: Sys.SystemTime -> Sys.SystemTime -> Int -sysTimeGapMicroSecs (Sys.MkSystemTime xSec xNs) (Sys.MkSystemTime ySec yNs) = - (+) (1_000_000 * fromIntegral (ySec - xSec)) - ((fromIntegral yNs - fromIntegral xNs) `quot` 1000) - -start :: Timer -> Sys.SystemTime -> IO () -> IO () -start timer@(Timer vSt man) time cb = do - let fire = cb >> stop timer - stop timer - now <- Sys.getSystemTime - let sleep = sysTimeGapMicroSecs now time - -- print (now, time, "->", sleep) - if (sleep <= 0) then fire else do - key <- Ev.registerTimeout man sleep fire - atomicWriteIORef vSt $! Just key - -stop :: Timer -> IO () -stop (Timer vSt man) = - atomicModifyIORef' vSt (Nothing,) >>= \case - Just key -> Ev.unregisterTimeout man key - Nothing -> pure () diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Ames.hs deleted file mode 100644 index af5b9de76..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames.hs +++ /dev/null @@ -1,368 +0,0 @@ --- This is required due to the use of 'Void' in a constructor slot in --- combination with 'deriveNoun' which generates an unreachable pattern. -{-# OPTIONS_GHC -Wno-overlapping-patterns #-} - -{-| - Ames IO Driver --} - -module Urbit.Vere.Ames (ames, ames', PacketOutcome(..)) where - -import Urbit.Prelude - -import Network.Socket -import Urbit.Arvo hiding (Fake) -import Urbit.King.Config -import Urbit.King.Scry -import Urbit.Vere.Ames.LaneCache -import Urbit.Vere.Ames.Packet -import Urbit.Vere.Pier.Types -import Urbit.Vere.Ports - -import Data.Serialize (decode, encode) -import Urbit.King.App (HasKingId(..), HasPierEnv(..)) -import Urbit.Vere.Ames.DNS (NetworkMode(..), ResolvServ(..)) -import Urbit.Vere.Ames.DNS (galaxyPort, resolvServ) -import Urbit.Vere.Ames.UDP (UdpServ(..), fakeUdpServ, realUdpServ) -import Urbit.Vere.Stat (AmesStat(..), bump, bump') - - --- Constants ------------------------------------------------------------------- - --- | How many unprocessed ames packets to allow in the queue before we start --- dropping incoming packets. -queueBound :: Word -queueBound = 1000 - --- | How often, measured in number of packets dropped, we should announce packet --- loss. -packetsDroppedPerComplaint :: Word -packetsDroppedPerComplaint = 1000 - - --- Types ----------------------------------------------------------------------- - -type Version = Word8 - -data AmesDrv = AmesDrv - { aTurfs :: TVar (Maybe [Turf]) - , aVersion :: TVar (Maybe Version) - , aUdpServ :: UdpServ - , aResolvr :: ResolvServ - , aVersTid :: Async () - , aRecvTid :: Async () - } - -data PacketOutcome - = Intake - | Ouster - - --- Utils ----------------------------------------------------------------------- - -listenPort :: NetworkMode -> Ship -> PortNumber -listenPort m s | s < 256 = galaxyPort m (fromIntegral s) -listenPort m _ = 0 -- I don't care, just give me any port. - -localhost :: HostAddress -localhost = tupleToHostAddress (127, 0, 0, 1) - -inaddrAny :: HostAddress -inaddrAny = tupleToHostAddress (0, 0, 0, 0) - - -modeAddress :: NetworkMode -> Maybe HostAddress -modeAddress = \case - Fake -> Just localhost - Localhost -> Just localhost - Real -> Just inaddrAny - NoNetwork -> Nothing - -okFakeAddr :: AmesDest -> Bool -okFakeAddr = \case - EachYes _ -> True - EachNo (AAIpv4 (Ipv4 a) _) -> a == localhost - -localAddr :: NetworkMode -> AmesDest -> SockAddr -localAddr mode = \case - EachYes g -> SockAddrInet (galaxyPort mode g) localhost - EachNo (AAIpv4 _ p) -> SockAddrInet (fromIntegral p) localhost - -bornEv :: KingId -> Ev -bornEv inst = EvBlip $ BlipEvNewt $ NewtEvBorn (fromIntegral inst, ()) () - -hearEv :: PortNumber -> HostAddress -> ByteString -> Ev -hearEv p a bs = - EvBlip $ BlipEvAmes $ AmesEvHear () (ipDest p a) (MkBytes bs) - -ipDest :: PortNumber -> HostAddress -> AmesDest -ipDest p a = EachNo $ AAIpv4 (Ipv4 a) (fromIntegral p) - - --------------------------------------------------------------------------------- - -netMode :: HasNetworkConfig e => Bool -> RIO e NetworkMode -netMode isFake = do - netMode <- view (networkConfigL . ncNetMode) - noAmes <- view (networkConfigL . ncNoAmes) - pure $ case (noAmes, isFake, netMode) of - (True, _ , _ ) -> NoNetwork - (_ , _ , NMNone ) -> NoNetwork - (_ , True, _ ) -> Fake - (_ , _ , NMNormal ) -> Real - (_ , _ , NMLocalhost) -> Localhost - -udpPort :: HasNetworkConfig e => Bool -> Ship -> RIO e PortNumber -udpPort isFake who = do - mode <- netMode isFake - mPort <- view (networkConfigL . ncAmesPort) - pure $ maybe (listenPort mode who) fromIntegral mPort - -udpServ :: (HasLogFunc e, HasNetworkConfig e, HasPortControlApi e) - => Bool - -> Ship - -> AmesStat - -> RIO e UdpServ -udpServ isFake who stat = do - mode <- netMode isFake - port <- udpPort isFake who - case modeAddress mode of - Nothing -> fakeUdpServ - Just host -> realUdpServ port host stat - -_bornFailed :: e -> WorkError -> IO () -_bornFailed env _ = runRIO env $ do - pure () -- TODO What can we do? - -ames' - :: HasPierEnv e - => Ship - -> Bool - -> AmesStat - -> ScryFunc - -> (Text -> RIO e ()) - -> RIO e ([Ev], RAcquire e (DriverApi NewtEf)) -ames' who isFake stat scry stderr = do - -- Unfortunately, we cannot use TBQueue because the only behavior - -- provided for when full is to block the writer. The implementation - -- below uses materially the same data structures as TBQueue, however. - ventQ :: TQueue EvErr <- newTQueueIO - avail :: TVar Word <- newTVarIO queueBound - let - enqueuePacket p = do - vail <- readTVar avail - if vail > 0 - then do - modifyTVar' avail (subtract 1) - writeTQueue ventQ p - pure Intake - else do - _ <- readTQueue ventQ - writeTQueue ventQ p - pure Ouster - dequeuePacket = do - pM <- tryReadTQueue ventQ - when (isJust pM) $ modifyTVar' avail (+ 1) - pure pM - - env <- ask - let (bornEvs, startDriver) = ames env who isFake stat scry enqueuePacket stderr - - let runDriver = do - diOnEffect <- startDriver - let diEventSource = fmap RRWork <$> dequeuePacket - pure (DriverApi {..}) - - pure (bornEvs, runDriver) - - -{-| - inst -- Process instance number. - who -- Which ship are we? - enqueueEv -- Queue-event action. - mPort -- Explicit port override from command line arguments. - - 4096 is a reasonable number for recvFrom. Packets of that size are - not possible on the internet. - - TODO verify that the KingIds match on effects. --} -ames - :: forall e - . (HasLogFunc e, HasNetworkConfig e, HasPortControlApi e, HasKingId e) - => e - -> Ship - -> Bool - -> AmesStat - -> ScryFunc - -> (EvErr -> STM PacketOutcome) - -> (Text -> RIO e ()) - -> ([Ev], RAcquire e (NewtEf -> IO ())) -ames env who isFake stat scry enqueueEv stderr = (initialEvents, runAmes) - where - king = fromIntegral (env ^. kingIdL) - - initialEvents :: [Ev] - initialEvents = [bornEv king] - - runAmes :: RAcquire e (NewtEf -> IO ()) - runAmes = do - mode <- rio (netMode isFake) - drv <- mkRAcquire start stop - pure (handleEffect drv mode) - - start :: RIO e AmesDrv - start = do - mode <- rio (netMode isFake) - cachedScryLane <- cache scryLane - - aTurfs <- newTVarIO Nothing - aVersion <- newTVarIO Nothing - aVersTid <- trackVersionThread aVersion - aUdpServ <- udpServ isFake who stat - aResolvr <- resolvServ aTurfs (usSend aUdpServ) stderr - aRecvTid <- queuePacketsThread - aVersion - cachedScryLane - (send aUdpServ aResolvr mode) - aUdpServ - stat - - pure (AmesDrv { .. }) - - hearFailed AmesStat {..} = runRIO env . \case - RunSwap{} -> bump asSwp - RunBail gs -> do - for gs \(t, es) -> - for es \e -> - logWarn $ hark - ["ames: goof: ", unTerm t, ": ", tankToText e] - bump asBal - RunOkay{} -> bump asOky - - trackVersionThread :: HasLogFunc e => TVar (Maybe Version) -> RIO e (Async ()) - trackVersionThread versSlot = async $ forever do - scryVersion >>= \case - Just v -> do - v0 <- readTVarIO versSlot - atomically $ writeTVar versSlot (Just v) - if (v0 == Just v) - then logInfo $ displayShow ("ames: proto version unchanged at", v) - else stderr ("ames: protocol version now " <> tshow v) - - Nothing -> logError "ames: could not scry for version" - - threadDelay (10 * 60 * 1_000_000) -- 10m - - queuePacketsThread :: HasLogFunc e - => TVar (Maybe Version) - -> (Ship -> RIO e (Maybe [AmesDest])) - -> (AmesDest -> ByteString -> RIO e ()) - -> UdpServ - -> AmesStat - -> RIO e (Async ()) - queuePacketsThread vers lan forward UdpServ{..} s@(AmesStat{..}) = async $ forever $ do - -- port number, host address, bytestring - (p, a, b) <- atomically (bump' asRcv >> usRecv) - ver <- readTVarIO vers - case decode b of - Right (pkt@Packet {..}) | ver == Nothing || ver == Just pktVersion -> do - logDebug $ displayShow ("ames: bon packet", pkt, showUD $ bytesAtom b) - - if pktRcvr == who - then do - bump asSup - serfsUp p a b - else lan pktRcvr >>= \case - Just ls - | dest:_ <- filter notSelf ls - -> do - bump asFwd - forward dest $ encode pkt - { pktOrigin = pktOrigin - <|> Just (AAIpv4 (Ipv4 a) (fromIntegral p)) } - where - notSelf (EachYes g) = who /= Ship (fromIntegral g) - notSelf (EachNo _) = True - - _ -> do - bump asDrt - logInfo $ displayShow ("ames: dropping unroutable", pkt) - - Right pkt -> do - bump asDvr - logInfo $ displayShow ("ames: dropping ill-versed", pkt, ver) - - -- XX better handle misversioned or illegible packets. - -- Remarks from 67f06ce5, pkg/urbit/vere/io/ames.c, L1010: - -- - -- [There are] two protocol-change scenarios [which we must think about]: - -- - -- - packets using old protocol versions from our sponsees - -- these must be let through, and this is a transitive condition; - -- they must also be forwarded where appropriate - -- they can be validated, as we know their semantics - -- - -- - packets using newer protocol versions - -- these should probably be let through, or at least - -- trigger printfs suggesting upgrade. - -- they cannot be filtered, as we do not know their semantics - -- - Left e -> do - bump asDml - logInfo $ displayShow ("ames: dropping malformed", e) - - where - serfsUp p a b = - atomically (enqueueEv (EvErr (hearEv p a b) (hearFailed s))) >>= \case - Intake -> bump asSrf - Ouster -> do - d <- atomically $ do - bump' asQuf - readTVar asQuf - when (d `rem` packetsDroppedPerComplaint == 1) $ - logWarn "ames: queue full; dropping inbound packets" - - stop :: forall e. AmesDrv -> RIO e () - stop AmesDrv {..} = io $ do - usKill aUdpServ - rsKill aResolvr - cancel aVersTid - cancel aRecvTid - - handleEffect :: AmesDrv -> NetworkMode -> NewtEf -> IO () - handleEffect drv@AmesDrv {..} mode = runRIO env . \case - NewtEfTurf (_id, ()) turfs -> do - atomically $ writeTVar aTurfs (Just turfs) - - NewtEfSend (_id, ()) dest (MkBytes bs) -> do - atomically (readTVar aTurfs) >>= \case - Nothing -> stderr "ames: send before turfs" >> pure () - Just turfs -> send aUdpServ aResolvr mode dest bs - - send :: UdpServ - -> ResolvServ - -> NetworkMode - -> AmesDest - -> ByteString - -> RIO e () - send udpServ resolvr mode dest byt = do - let to adr = io (usSend udpServ adr byt) - - case (mode, dest) of - (NoNetwork, _ ) -> pure () - (Fake , _ ) -> when (okFakeAddr dest) $ to (localAddr Fake dest) - (Localhost, _ ) -> to (localAddr Localhost dest) - (Real , ra) -> ra & \case - EachYes gala -> io (rsSend resolvr gala byt) - EachNo addr -> to (ipv4Addr addr) - - scryVersion :: HasLogFunc e => RIO e (Maybe Version) - scryVersion = scryNow scry "ax" "" ["protocol", "version"] - - scryLane :: HasLogFunc e - => Ship - -> RIO e (Maybe [AmesDest]) - scryLane ship = scryNow scry "ax" "" ["peers", tshow ship, "forward-lane"] - - ipv4Addr (AAIpv4 a p) = SockAddrInet (fromIntegral p) (unIpv4 a) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/DNS.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/DNS.hs deleted file mode 100644 index 442e23fac..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/DNS.hs +++ /dev/null @@ -1,217 +0,0 @@ -{-| - Handles sending packets to galaxies. We need to get their IP addresses - from DNS, which is more complicated. - --- Asynchronous thread per galaxy which handles domain resolution, and can --- block its own queue of ByteStrings to send. --- --- Maybe perform the resolution asynchronously, injecting into the resolver --- queue as a message. --- --- TODO: Figure out how the real haskell time library works. - --- We've failed to lookup the IP. Drop the outbound packet --- because we have no IP for our galaxy, including possible --- previous IPs. - -{- -- Sending Packets to Galaxies. - - Each galaxy has it's own DNS resolution thread. - - Initially, no threads are started. - - To send a message to a galaxy, - - Check to see if it already has a resolution thread. - - If it does, pass the packet to that thread. - - If it doesn't, start a new thread and give it the packet. -- Galaxy resolution threads work as follows: - - First, they are given: - - They know which galaxy they are responsible for. - - They have access to the turfs TVar (shared state with Ames driver). - - They can be given packets (to be send to their galaxy). - - They must be given a way to send UDP packets. - - Next, we loop forever - - In the loop we track: - - the last-known IP address. - - the time when we last looked up the IP address. - - We wait to be given a packet. - - We get the IP address. - - If we looked up the IP address in the last 5 minute, use the - cached IP address. - - Just use the one from last time. - - Otherwise, - - Do a DNS lookup. - - Go through the turf list one item at a time. - - Try each one. - - If it resolves to one-or-more IP addresses, - - Use the first one. - - If it resolves to zero IP addresses, move on to the next turf. - - If none of the turfs can be used to resolve the IP address, - then we don't know where the galaxy is. - - Drop the packet. --} --} - -module Urbit.Vere.Ames.DNS - ( NetworkMode(..) - , ResolvServ(..) - , resolvServ - , galaxyPort - , renderGalaxy - ) -where - -import Urbit.Prelude - -import Network.Socket -import Urbit.Arvo hiding (Fake) - -import qualified Data.Map.Strict as M -import qualified Urbit.Noun.Time as Time -import qualified Urbit.Ob as Ob - - --- Types ----------------------------------------------------------------------- - -data NetworkMode = Fake | Localhost | Real | NoNetwork - deriving (Eq, Ord, Show) - -data ResolvServ = ResolvServ - { rsSend :: Galaxy -> ByteString -> IO () - , rsKill :: IO () - } - - --- Utils ----------------------------------------------------------------------- - -galaxyPort :: NetworkMode -> Galaxy -> PortNumber -galaxyPort Fake (Patp g) = fromIntegral g + 31337 -galaxyPort Localhost (Patp g) = fromIntegral g + 13337 -galaxyPort Real (Patp g) = fromIntegral g + 13337 -galaxyPort NoNetwork _ = fromIntegral 0 - -turfText :: Turf -> Text -turfText = intercalate "." . reverse . fmap unCord . unTurf - -renderGalaxy :: Galaxy -> Text -renderGalaxy = Ob.renderPatp . Ob.patp . fromIntegral . unPatp - -galaxyHostname :: Galaxy -> Turf -> Text -galaxyHostname g t = galaName g ++ "." ++ turfText t - where - stripSig :: Text -> Text - stripSig inp = fromMaybe inp (stripPrefix "~" inp) - - galaName :: Galaxy -> Text - galaName = stripSig . renderGalaxy - -resolv :: Galaxy -> [Turf] -> IO (Maybe (Turf, Text, PortNumber, SockAddr)) -resolv gal = go - where - go = \case - [] -> pure Nothing - turf : turfs -> do - let host = galaxyHostname gal turf - port = galaxyPort Real gal - getAddrInfo Nothing (Just (unpack host)) (Just (show port)) >>= \case - [] -> go turfs - ip : _ -> pure $ Just (turf, host, port, addrAddress ip) - -doResolv - :: HasLogFunc e - => Galaxy - -> (Time.Wen, Maybe SockAddr) - -> [Turf] - -> (Text -> RIO e ()) - -> RIO e (Maybe SockAddr, Time.Wen) -doResolv gal (prevWen, prevIP) turfs stderr = do - current <- io $ Time.now - if (Time.gap current prevWen ^. Time.secs) < 300 - then pure (prevIP, prevWen) - else do - tim <- io (Time.now) - io (resolv gal turfs) >>= \case - Nothing -> do - stderr $ "ames: czar at " ++ galStr ++ ": not found" - logInfo $ displayShow ("(ames) Failed to lookup IP for ", gal) - pure (prevIP, tim) - Just (turf, host, port, addr) -> do - when (Just addr /= prevIP) (printCzar addr) - logInfo $ displayShow ("(ames) Looked up ", host, port, turf, addr) - pure (Just addr, tim) - where - galStr = renderGalaxy gal - printCzar addr = stderr $ "ames: czar " ++ galStr ++ ": ip " ++ tshow addr - - -resolvWorker - :: forall e - . HasLogFunc e - => Galaxy - -> TVar (Maybe [Turf]) - -> TVar (Time.Wen, Maybe SockAddr) - -> STM ByteString - -> (SockAddr -> ByteString -> IO ()) - -> (Text -> RIO e ()) - -> RIO e (Async ()) -resolvWorker gal vTurfs vLast waitMsg send stderr = async (forever go) - where - logDrop = - logInfo $ displayShow ("(ames) Dropping packet; no ip for galaxy ", gal) - - go :: RIO e () - go = do - (packt, turfs, (lastTime, lastAddr)) <- atomically - ((,,) <$> waitMsg <*> readTVar vTurfs <*> readTVar vLast) - - (newAddr, newTime) <- doResolv gal - (lastTime, lastAddr) - (fromMaybe [] turfs) - stderr - - maybe logDrop (\ip -> io (send ip packt)) newAddr - - atomically $ writeTVar vLast (newTime, newAddr) - - -resolvServ - :: HasLogFunc e - => TVar (Maybe [Turf]) - -> (SockAddr -> ByteString -> IO ()) - -> (Text -> RIO e ()) - -> RIO e ResolvServ -resolvServ vTurfs send stderr = do - vGala <- newTVarIO (mempty :: Map Galaxy (Async (), TQueue ByteString)) - vDead <- newTVarIO False - envir <- ask - - let spawnWorker :: Galaxy -> IO (Async (), TQueue ByteString) - spawnWorker gal = runRIO envir $ do - que <- newTQueueIO - las <- newTVarIO (Time.unixEpoch, Nothing) - tid <- resolvWorker gal vTurfs las (readTQueue que) send stderr - pure (tid, que) - - let getWorker :: Galaxy -> IO (Async (), TQueue ByteString) - getWorker gal = do - (fmap (lookup gal) $ atomically $ readTVar vGala) >>= \case - Just (tid, que) -> do - pure (tid, que) - Nothing -> do - (tid, que) <- spawnWorker gal - atomically $ modifyTVar' vGala (M.insert gal (tid, que)) - pure (tid, que) - - let doSend :: Galaxy -> ByteString -> IO () - doSend gal byt = do - dead <- atomically (readTVar vDead) - unless dead $ do - (_, que) <- getWorker gal - atomically (writeTQueue que byt) - - let doKill :: IO () - doKill = do - galas <- atomically $ do - writeTVar vDead True - readTVar vGala - for_ galas (cancel . fst) - - pure (ResolvServ doSend doKill) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/LaneCache.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/LaneCache.hs deleted file mode 100644 index b7eb896ed..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/LaneCache.hs +++ /dev/null @@ -1,64 +0,0 @@ -module Urbit.Vere.Ames.LaneCache (cache) where - -import Urbit.Prelude - -import qualified Data.HashPSQ as P - -import Urbit.Noun.Time - -expiry :: Gap -expiry = (2 * 60) ^. from secs - -bound :: Int -bound = 1_000 - --- | An "upside down" time for use as a priority. -newtype New = New Wen - deriving newtype (Eq, Ord) - -new :: Wen -> New -new = New . negate - -wen :: New -> Wen -wen (New w) = negate w - --- | Given a new, find an older new corresponding to `expiry` ago. -lag :: New -> New -lag n = new (addGap (wen n) expiry) - -trim :: (Hashable a, Ord a, Ord b) => P.HashPSQ a b c -> P.HashPSQ a b c -trim p = if P.size p > bound then P.deleteMin p else p - -cache :: forall a b m n - . (Ord a, Hashable a, MonadIO m, MonadIO n) - => (a -> m b) - -> n (a -> m b) -cache act = do - cas <- newTVarIO (P.empty :: P.HashPSQ a New b) - - let fun x = P.lookup x <$> readTVarIO cas >>= \case - Nothing -> thru - Just (n, v) -> do - let t = wen n - t' <- io now - if gap t' t > expiry - then thru - else pure v - where - -- Insert a key into the map, simultaneously removing *all* stale - -- entries. Since insertion is linear in the size of the map, - -- presumably it's not horrible to do it this way. The alternative - -- would be to have a thread doing a purge every 10s or something, and - -- then we'd have to be in RAcquire. - up :: a -> New -> b -> P.HashPSQ a New b -> P.HashPSQ a New b - up k n v ps = trim - $ P.insert k n v - $ snd $ P.atMostView (lag n) ps - thru :: m b - thru = do - n <- new <$> io now - v <- act x - atomically $ modifyTVar' cas $ up x n v - pure v - - pure fun diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/Packet.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/Packet.hs deleted file mode 100644 index ea878d533..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/Packet.hs +++ /dev/null @@ -1,165 +0,0 @@ -{-| - Parsing of Ames packets --} - -module Urbit.Vere.Ames.Packet where - -import Urbit.Prelude - -import Control.Monad.Fail -import Data.Bits -import Data.LargeWord -import Data.List (genericIndex) -import Data.Serialize - -import Urbit.Arvo (AmesAddress(..), Ipv4(..), Port(..)) - -data Packet = Packet - { pktVersion :: Word3 - , pktSndr :: Ship - , pktRcvr :: Ship - , pktSndrTick :: Word4 - , pktRcvrTick :: Word4 - , pktOrigin :: Maybe AmesAddress - , pktContent :: ByteString - } - deriving Eq - -instance Show Packet where - show Packet {..} - = "Packet {pktVersion = " - <> show pktVersion - <> ", pktSndr = " - <> show pktSndr - <> ", pktRcvr = " - <> show pktRcvr - <> ", pktSndrTick = " - <> show pktSndrTick - <> ", pktRcvrTick = " - <> show pktRcvrTick - <> ", pktOrigin = " - <> show pktOrigin - <> ", pktContent = " - <> showUD (bytesAtom pktContent) - <> "}" - -{- --- Wire format -data PacketHeader = PacketHeader - { pktIsAmes :: Bool -- sim_o - , pktVersion :: Word3 -- ver_y - , pktSndrClass :: ShipClass -- sac_y - , pktRcvrClass :: ShipClass -- rac_y - , pktChecksum :: Word20 -- mug_l - , pktIsRelayed :: Bool -- rel_o - } - deriving Eq - -data PacketBody = PacketBody - { pktSndr :: Ship -- sen_d - , pktRcvr :: Ship -- rec_d - , pktSndrTick :: Word4 -- sic_y - , pktRcvrTick :: Word4 -- ric_y - , pktContent :: ByteString -- (con_s, con_y) - , pktOrigin :: Maybe AmesAddress -- rog_d - } - deriving Eq --} - -type Word3 = Word8 -type Word4 = Word8 -type Word20 = Word32 - -data ShipClass - = Lord - | Planet - | Moon - | Comet - deriving (Eq, Show) - -muk :: ByteString -> Word20 -muk bs = mugBS bs .&. (2 ^ 20 - 1) - -putAmesAddress :: Putter AmesAddress -putAmesAddress = \case - AAIpv4 (Ipv4 ip) (Port port) -> putWord32le ip >> putWord16le port - -instance Serialize Packet where - get = do - -- header - head <- getWord32le - -- skip first three bits - let isAmes = testBit head 3 & not - let pktVersion = shiftR head 4 .&. 0b111 & fromIntegral - let sndrRank = shiftR head 7 .&. 0b11 - let rcvrRank = shiftR head 9 .&. 0b11 - let checksum = shiftR head 11 .&. (2 ^ 20 - 1) - let isRelayed = testBit head 31 & not -- loobean - let sndrClass = genericIndex [Lord, Planet, Moon, Comet] sndrRank - let rcvrClass = genericIndex [Lord, Planet, Moon, Comet] rcvrRank - guard isAmes - - pktOrigin <- if isRelayed - then Just <$> get - else pure Nothing - - -- body - lookAhead $ do - len <- remaining - body <- getBytes len - let chk = muk body - when (checksum /= chk) $ - fail ("checksum mismatch: expected " <> show checksum - <> "; got " <> show chk) - - tick <- getWord8 - let pktSndrTick = tick .&. 0b1111 - let pktRcvrTick = shiftR tick 4 - - pktSndr <- getShip sndrClass - pktRcvr <- getShip rcvrClass - - len <- remaining - pktContent <- getBytes len - - pure Packet{..} - where - getShip = fmap Ship . \case - Lord -> fromIntegral <$> getWord16le - Planet -> fromIntegral <$> getWord32le - Moon -> fromIntegral <$> getWord64le - Comet -> LargeKey <$> getWord64le <*> getWord64le - - put Packet{..} = do - let (sndR, putSndr) = putShipGetRank pktSndr - let (rcvR, putRcvr) = putShipGetRank pktRcvr - - let body = runPut $ do - putWord8 $ (pktSndrTick .&. 0b1111) - .|. shiftL (pktRcvrTick .&. 0b1111) 4 - putSndr - putRcvr - putByteString pktContent - - let vers = fromIntegral pktVersion .&. 0b111 - let chek = muk body - - -- skip first 3 bytes, set 4th to yes (0) for "is ames" - let head = shiftL vers 4 - .|. shiftL sndR 7 - .|. shiftL rcvR 9 - .|. shiftL chek 11 - .|. if isJust pktOrigin then 0 else bit 31 - - putWord32le head - case pktOrigin of - Just o -> put o - Nothing -> pure () - putByteString body - - where - putShipGetRank (Ship (LargeKey p q)) = case q of - 0 | p < 2 ^ 16 -> (0, putWord16le $ fromIntegral p) -- lord - | p < 2 ^ 32 -> (1, putWord32le $ fromIntegral p) -- planet - | otherwise -> (2, putWord64le $ fromIntegral p) -- moon - _ -> (3, putWord64le p >> putWord64le q) -- comet diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/UDP.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/UDP.hs deleted file mode 100644 index 018930632..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Ames/UDP.hs +++ /dev/null @@ -1,274 +0,0 @@ -{- | - Raw UDP Server used by Ames driver. - - 1. Opens a UDP socket and makes sure that it stays open. - - - If can't open the port, wait and try again repeatedly. - - If there is an error reading to or writing from the open socket, - close it and open another, making sure, however, to reuse the - same port - NOTE: It's not clear what, if anything, closing and reopening - the socket does. We're keeping this behavior out of conservatism - until we understand it better. - - 2. Receives packets from the socket. - - - When packets come in from the socket, they go into a bounded queue. - - If the queue is full, the packet is dropped. - - If the socket is closed, wait and try again repeatedly. - - `usRecv` gets the first packet from the queue. - - 3. Sends packets to the socket. - - - Packets sent to `usSend` enter a bounded queue. - - If that queue is full, the packet is dropped. - - Packets are taken off the queue one at a time. - - If the socket is closed (or broken), the packet is dropped. - - 4. Runs until `usKill` is run, then all threads are killed and the - socket is closed. --} - -module Urbit.Vere.Ames.UDP - ( UdpServ(..) - , fakeUdpServ - , realUdpServ - ) -where - -import Urbit.Prelude -import Urbit.Vere.Ports - -import Network.Socket - -import Control.Monad.STM (retry) -import Network.Socket.ByteString (recvFrom, sendTo) -import Urbit.Vere.Stat (AmesStat(..), bump) - --- Types ----------------------------------------------------------------------- - -data UdpServ = UdpServ - { usSend :: SockAddr -> ByteString -> IO () - , usRecv :: STM (PortNumber, HostAddress, ByteString) - , usKill :: IO () - } - - --- Utils ----------------------------------------------------------------------- - -{- | - Writes to queue and returns `True` unless the queue is full, then do - nothing and return `False`. --} -tryWriteTBQueue :: TBQueue x -> x -> STM Bool -tryWriteTBQueue q x = do - isFullTBQueue q >>= \case - True -> pure False - False -> writeTBQueue q x $> True - -{- | - Open a UDP socket and bind it to a port --} -doBind :: PortNumber -> HostAddress -> IO (Either IOError Socket) -doBind por hos = tryIOError $ do - sok <- io $ socket AF_INET Datagram defaultProtocol - () <- io $ bind sok (SockAddrInet por hos) - pure sok - -{- | - Open a UDP socket and bind it to a port. - - If this fails, wait 250ms and repeat forever. --} -forceBind :: HasLogFunc e => PortNumber -> HostAddress -> RIO e Socket -forceBind por hos = go - where - go = do - logInfo (display ("AMES: UDP: Opening socket on port " <> tshow por)) - io (doBind por hos) >>= \case - Right sk -> do - logInfo (display ("AMES: UDP: Opened socket on port " <> tshow por)) - pure sk - Left err -> do - logInfo (display ("AMES: UDP: " <> tshow err)) - logInfo ("AMES: UDP: Failed to open UDP socket. Waiting") - threadDelay 250_000 - go - -{- | - Attempt to send a packet to a socket. - - If it fails, return `False`. Otherwise, return `True`. --} -sendPacket :: HasLogFunc e => ByteString -> SockAddr -> Socket -> RIO e Bool -sendPacket fullBytes adr sok = do - logDebug $ displayShow ("AMES", "UDP", "Sending packet.") - res <- io $ tryIOError $ go fullBytes - case res of - Left err -> do - logError $ displayShow ("AMES", "UDP", "Failed to send packet", err) - pure False - Right () -> do - logDebug $ displayShow ("AMES", "UDP", "Packet sent.") - pure True - where - go byt = do - sent <- sendTo sok byt adr - when (sent /= length byt) $ do - go (drop sent byt) - -{- | - Attempt to receive a packet from a socket. - - - If an exception is throw, return `Left exn`. - - If it wasn't an IPv4 packet, return `Right Nothing`. - - Otherwise, return `Right (Just packet)`. --} -recvPacket - :: HasLogFunc e - => Socket - -> RIO e (Either IOError (Maybe (ByteString, PortNumber, HostAddress))) -recvPacket sok = do - io (tryIOError $ recvFrom sok 4096) <&> \case - Left exn -> Left exn - Right (b, SockAddrInet p a) -> Right (Just (b, p, a)) - Right (_, _ ) -> Right Nothing - - --- Fake Server for No-Networking Mode ------------------------------------------ - -{- | - Fake UDP API for no-networking configurations. --} -fakeUdpServ :: HasLogFunc e => RIO e UdpServ -fakeUdpServ = do - logInfo $ displayShow ("AMES", "UDP", "\"Starting\" fake UDP server.") - pure UdpServ { .. } - where - usSend = \_ _ -> pure () - usRecv = retry - usKill = pure () - - --- Real Server ----------------------------------------------------------------- - -{- | - Real UDP server. See module-level docs. --} -realUdpServ - :: forall e - . (HasLogFunc e, HasPortControlApi e) - => PortNumber - -> HostAddress - -> AmesStat - -> RIO e UdpServ -realUdpServ startPort hos sat = do - logInfo $ displayShow ("AMES", "UDP", "Starting real UDP server.") - - env <- ask - - vSock <- newTVarIO Nothing - vFail <- newEmptyTMVarIO - qSend <- newTBQueueIO 100 -- TODO Tuning - qRecv <- newTBQueueIO 100 -- TODO Tuning - - {- - If reading or writing to a socket fails, unbind it and tell the - socket-open thread to close it and open another. - - This is careful about edge-cases. In any of these cases, do nothing. - - - If vSock isn't set to the socket we used, do nothing. - - If vFail is already set (another thread signaled failure already). - -} - let signalBrokenSocket :: Socket -> RIO e () - signalBrokenSocket sock = do - logInfo $ displayShow ("AMES", "UDP" - , "Socket broken. Requesting new socket" - ) - atomically $ do - mSock <- readTVar vSock - mFail <- tryReadTMVar vFail - when (mSock == Just sock && mFail == Nothing) $ do - putTMVar vFail sock - writeTVar vSock Nothing - - enqueueRecvPacket :: PortNumber -> HostAddress -> ByteString -> RIO e () - enqueueRecvPacket p a b = do - did <- atomically (tryWriteTBQueue qRecv (p, a, b)) - when (did == False) $ do - bump (asUqf sat) - logWarn $ displayShow $ ("AMES", "UDP",) - "Dropping inbound packet because queue is full." - - enqueueSendPacket :: SockAddr -> ByteString -> RIO e () - enqueueSendPacket a b = do - did <- atomically (tryWriteTBQueue qSend (a, b)) - when (did == False) $ do - logWarn "AMES: UDP: Dropping outbound packet because queue is full." - let opener por = do - logInfo $ displayShow $ ("AMES", "UDP", "Trying to open socket, port",) - por - sk <- forceBind por hos - sn <- io $ getSocketName sk - sp <- io $ socketPort sk - logInfo $ displayShow $ ("AMES", "UDP", "Got socket", sn, sp) - - let waitForRelease = do - atomically (writeTVar vSock (Just sk)) - broken <- atomically (takeTMVar vFail) - logWarn "AMES: UDP: Closing broken socket." - io (close broken) - - case sn of - (SockAddrInet boundPort _) -> - -- When we're on IPv4, maybe port forward at the NAT. - rwith (requestPortAccess $ fromIntegral boundPort) $ - \() -> waitForRelease - _ -> waitForRelease - - opener sp - - tOpen <- async $ opener startPort - - tSend <- async $ forever $ join $ atomically $ do - (adr, byt) <- readTBQueue qSend - readTVar vSock <&> \case - Nothing -> pure () - Just sk -> do - okay <- sendPacket byt adr sk - unless okay (signalBrokenSocket sk) - - tRecv <- async $ forever $ do - atomically (readTVar vSock) >>= \case - Nothing -> threadDelay 100_000 - Just sk -> do - recvPacket sk >>= \case - Left exn -> do - bump (asUdf sat) - logError "AMES: UDP: Failed to receive packet" - signalBrokenSocket sk - Right Nothing -> do - bump (asUi6 sat) - logError "AMES: UDP: Dropping non-ipv4 packet" - pure () - Right (Just (b, p, a)) -> do - logDebug "AMES: UDP: Received packet." - bump (asUdp sat) - enqueueRecvPacket p a b - - let shutdown = do - logInfo "AMES: UDP: Shutting down. (killing threads)" - cancel tOpen - cancel tSend - cancel tRecv - logInfo "AMES: UDP: Shutting down. (closing socket)" - io $ join $ atomically $ do - res <- readTVar vSock <&> maybe (pure ()) close - writeTVar vSock Nothing - pure res - - pure $ UdpServ { usSend = \a b -> runRIO env (enqueueSendPacket a b) - , usRecv = readTBQueue qRecv - , usKill = runRIO env shutdown - } diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Behn.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Behn.hs deleted file mode 100644 index 0957a8eda..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Behn.hs +++ /dev/null @@ -1,73 +0,0 @@ --- This is required due to the use of 'Void' in a constructor slot in --- combination with 'deriveNoun', which will generate an unreachable pattern. -{-# OPTIONS_GHC -Wno-overlapping-patterns #-} - -{-| - Behn: Timer Driver --} - -module Urbit.Vere.Behn (behn, DriverApi(..), behn') where - -import Data.Time.Clock.System (SystemTime) - -import Urbit.Arvo -import Urbit.Prelude -import Urbit.Vere.Pier.Types - -import Urbit.King.App (HasKingId(..), HasPierEnv(..)) -import Urbit.Noun.Time (Wen) -import Urbit.Timer (Timer) - -import qualified Urbit.Noun.Time as Time -import qualified Urbit.Timer as Timer - - --- Behn Stuff ------------------------------------------------------------------ - -behn' :: HasPierEnv e => RIO e ([Ev], RAcquire e (DriverApi BehnEf)) -behn' = do - env <- ask - pure ([bornEv (fromIntegral (env ^. kingIdL))], runDriver env) - where - runDriver env = do - ventQ :: TQueue EvErr <- newTQueueIO - diOnEffect <- liftAcquire (behn env (writeTQueue ventQ)) - let diEventSource = fmap RRWork <$> tryReadTQueue ventQ - pure (DriverApi {..}) - -bornEv :: KingId -> Ev -bornEv king = EvBlip $ BlipEvBehn $ BehnEvBorn (king, ()) () - -wakeEv :: Ev -wakeEv = EvBlip $ BlipEvBehn $ BehnEvWake () () - -sysTime :: Wen -> SystemTime -sysTime = view Time.systemTime - -wakeErr :: WorkError -> IO () -wakeErr _ = pure () - -behn - :: HasKingId e - => e - -> (EvErr -> STM ()) - -> Acquire (BehnEf -> IO ()) -behn env enqueueEv = runBehn - where - king = fromIntegral (env ^. kingIdL) - - runBehn :: Acquire (BehnEf -> IO ()) - runBehn = do - tim <- mkAcquire Timer.init Timer.stop - pure (runRIO env . handleEf tim) - - handleEf :: Timer -> BehnEf -> RIO e () - handleEf b = io . \case - BehnEfVoid v -> absurd v - BehnEfDoze (i, ()) mWen -> do - when (i == king) (doze b mWen) - - doze :: Timer -> Maybe Wen -> IO () - doze tim = \case - Nothing -> Timer.stop tim - Just t -> Timer.start tim (sysTime t) $ atomically (enqueueEv (EvErr wakeEv wakeErr)) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Clay.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Clay.hs deleted file mode 100644 index e76fdba2c..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Clay.hs +++ /dev/null @@ -1,275 +0,0 @@ -{-| - UNIX Filesystem Driver --} - -module Urbit.Vere.Clay - ( clay - , clay' - ) -where - -import Urbit.Arvo -import Urbit.King.App -import Urbit.Prelude -import Urbit.Vere.Pier.Types - -import Conduit -import RIO.Directory -import RIO.FilePath - -import qualified Data.Conduit.Combinators as CC -import qualified Data.Map.Strict as M -import qualified Data.Set as S - - --------------------------------------------------------------------------------- - -data ClayDrv = ClayDrv - { cdMountPoints :: TVar (Map Desk (Map FilePath Int)) - } - -deskToPath :: Desk -> FilePath -deskToPath (Desk (Cord t)) = unpack t - --- | The hard coded mime type of every file. -textPlain :: Path -textPlain = Path [(MkKnot "text"), (MkKnot "plain")] - --- | Filter for dotfiles, tempfiles and backup files. -validClaySyncPath :: FilePath -> Bool -validClaySyncPath fp = hasPeriod && notTildeFile && notDotFile && notDoubleHash - where - fileName = takeFileName fp - hasPeriod = elem '.' fileName - notTildeFile = not $ "~" `isSuffixOf` fileName - notDotFile = not $ "." `isPrefixOf` fileName - notDoubleHash = - not $ ("#" `isPrefixOf` fileName) && ("#" `isSuffixOf` fileName) - -{-| - Returns a list of the result of running a function on each valid - file in the directory fp. Runnable in IO. --} -foreachFileIn :: (MonadUnliftIO m) - => FilePath -> (FilePath -> (ResourceT m) a) -> m [a] -foreachFileIn fp fun = - runConduitRes $ (sourceDirectoryDeep False fp) - .| filterC validClaySyncPath - .| CC.mapM fun - .| sinkList - -{-| - Note: Vere just reuses +mug, but since the actual hash function is - an implementation detail which doesn't leave the io driver, we just - use the standard hash. --} -getHashOfFile :: (MonadIO m) => FilePath -> m (FilePath, Int) -getHashOfFile fp = do - bs <- readFile fp - let !h = hash bs - pure (fp, h) - -{-| - Takes an initial snapshot of the filesystem, recording what files exist and - what their hashes are. --} -takeFilesystemSnapshot :: FilePath -> RIO e (Map FilePath Int) -takeFilesystemSnapshot fp = do - exists <- doesDirectoryExist fp - if not exists then - pure M.empty - else - M.fromList <$> foreachFileIn fp getHashOfFile - -{-| - Check an existing filepath against a snapshot of files that existed on disk - the last time we checked. Returns Either (unchanged) (new file data). --} -checkFileForUpdates :: (MonadIO m) - => Map FilePath Int -> FilePath - -> m (Either FilePath (FilePath, Mime, Int)) -checkFileForUpdates snapshot fp = do - bs <- readFile fp - let !newHash = hash bs - pure $ case lookup fp snapshot of - -- text/plain is the hardcoded mime type of every file sent to clay. - Nothing -> Right (fp, (Mime textPlain (File (Octs bs))), newHash) - Just i -> if i == newHash then Left fp - else Right (fp, (Mime textPlain (File (Octs bs))), newHash) - -{-| - Given a previous snapshot of the filesystem, produces a list of changes --} -buildActionListFromDifferences :: FilePath -> Map FilePath Int - -> RIO e [(FilePath, Maybe (Mime, Int))] -buildActionListFromDifferences fp snapshot = do - checks <- foreachFileIn fp (checkFileForUpdates snapshot) - - let changedItems = rights checks <&> \(fp, m, i) -> (fp, Just (m, i)) - - let existsSet = S.fromList $ flip map checks $ \case - Left fp -> fp - Right (fp, _, _) -> fp - let deletedSet = S.difference (M.keysSet snapshot) existsSet - let deletedItems = (toList deletedSet) <&> \x -> (x, Nothing) - - pure $ sort (deletedItems ++ changedItems) - --------------------------------------------------------------------------------- - -_boatFailed :: e -> WorkError -> IO () -_boatFailed env _ = runRIO env $ do - pure () -- TODO What can we do? - -clay' - :: HasPierEnv e - => RIO e ([Ev], RAcquire e (DriverApi SyncEf)) -clay' = do - ventQ :: TQueue EvErr <- newTQueueIO - env <- ask - - let (bornEvs, startDriver) = clay env (writeTQueue ventQ) - - let runDriver = do - diOnEffect <- startDriver - let diEventSource = fmap RRWork <$> tryReadTQueue ventQ - pure (DriverApi {..}) - - pure (bornEvs, runDriver) - -clay - :: forall e - . (HasPierConfig e, HasLogFunc e, HasKingId e) - => e - -> (EvErr -> STM ()) - -> ([Ev], RAcquire e (SyncEf -> IO ())) -clay env plan = - (initialEvents, runSync) - where - king = fromIntegral (env ^. kingIdL) - - boatEv = EvBlip $ BlipEvBoat $ BoatEvBoat () () - - -- TODO: In the case of -A, we need to read all the data from the - -- specified directory and shove it into an %into event. - initialEvents = [boatEv] - - runSync :: RAcquire e (SyncEf -> IO ()) - runSync = handleEffect <$> mkRAcquire start stop - - start :: RIO e ClayDrv - start = ClayDrv <$> newTVarIO mempty - stop c = pure () - - handleEffect :: ClayDrv -> SyncEf -> IO () - handleEffect cd = runRIO env . \case - SyncEfHill _ mountPoints -> do - logInfo $ displayShow ("(clay) known mount points:", mountPoints) - pierPath <- view pierPathL - mountPairs <- flip mapM mountPoints $ \desk -> do - ss <- takeFilesystemSnapshot (pierPath (deskToPath desk)) - pure (desk, ss) - atomically $ writeTVar (cdMountPoints cd) (M.fromList mountPairs) - - SyncEfDirk p desk -> do - logInfo $ displayShow ("(clay) dirk:", p, desk) - m <- atomically $ readTVar (cdMountPoints cd) - let snapshot = M.findWithDefault M.empty desk m - pierPath <- view pierPathL - let dir = pierPath deskToPath desk - actions <- buildActionListFromDifferences dir snapshot - - logInfo $ displayShow ("(clay) dirk actions: ", actions) - - let !intoList = map (actionsToInto dir) actions - - let syncEv = EvBlip - $ BlipEvSync - $ SyncEvInto (Some (king, ())) desk False intoList - - let syncFailed _ = pure () - - atomically $ plan (EvErr syncEv syncFailed) - - - atomically $ modifyTVar' - (cdMountPoints cd) - (applyActionsToMountPoints desk actions) - - SyncEfErgo p desk actions -> do - logInfo $ displayShow ("(clay) ergo:", p, desk, actions) - - m <- atomically $ readTVar (cdMountPoints cd) - let mountPoint = M.findWithDefault M.empty desk m - - pierPath <- view pierPathL - let dir = pierPath deskToPath desk - let hashedActions = map (calculateActionHash dir) actions - for_ hashedActions (performAction mountPoint) - - atomically $ modifyTVar' - (cdMountPoints cd) - (applyActionsToMountPoints desk hashedActions) - - SyncEfOgre p desk -> do - logInfo $ displayShow ("(clay) ogre:", p, desk) - pierPath <- view pierPathL - removeDirectoryRecursive $ pierPath deskToPath desk - atomically $ modifyTVar' (cdMountPoints cd) (M.delete desk) - - - -- Change the structures off of the event into something we can work with - -- in Unix. - calculateActionHash :: FilePath -> (Path, Maybe Mime) - -> (FilePath, Maybe (Mime, Int)) - calculateActionHash base (p, Nothing) = (base pathToFilePath p, Nothing) - calculateActionHash base (p, Just (Mime t f)) = - (base pathToFilePath p, Just ((Mime t f), (hash $ unOcts $ unFile f))) - - -- Performs the actions on the actual filesystem - performAction :: (Map FilePath Int) -> (FilePath, Maybe (Mime, Int)) - -> RIO e () - performAction m (fp, Nothing) = do - logInfo $ displayShow ("(clay) deleting file ", fp) - removeFile fp - performAction m (fp, Just ((Mime _ (File (Octs bs)), hash))) - | skip = logInfo $ - displayShow ("(clay) skipping unchanged file update " , fp) - | otherwise = do - logInfo $ displayShow ("(clay) updating file " , fp) - createDirectoryIfMissing True $ takeDirectory fp - writeFile fp bs - where - skip = case M.lookup fp m of - Nothing -> False - Just i -> i == hash - - -- Apply the actions to our internal snapshots - applyActionsToMountPoints :: Desk - -> [(FilePath, Maybe (Mime, Int))] - -> (Map Desk (Map FilePath Int)) - -> (Map Desk (Map FilePath Int)) - applyActionsToMountPoints desk actions m = M.alter change desk m - where - change (Just fileMap) = Just (foldl' applySyncAction fileMap actions) - change Nothing = change (Just M.empty) - - -- Applies the sync mutations specified. - applySyncAction :: (Map FilePath Int) - -> (FilePath, Maybe (Mime, Int)) - -> (Map FilePath Int) - applySyncAction m (fp, Nothing) = M.delete fp m - applySyncAction m (fp, (Just (_, h))) = M.insert fp h m - - -- Changes an action list item into a form injectable into Urbit - actionsToInto :: FilePath -> (FilePath, Maybe (Mime, Int)) - -> (Path, Maybe Mime) - actionsToInto prefix (fp, mybData) = (p, mybOutData) - where - p = filePathToPath strippedFp - strippedFp = case stripPrefix prefix fp of - Nothing -> error "Impossible missing prefix" - Just x -> x - mybOutData = case mybData of - Nothing -> Nothing - Just (m, i) -> Just m diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Dawn.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Dawn.hs deleted file mode 100644 index 9d1475749..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Dawn.hs +++ /dev/null @@ -1,489 +0,0 @@ -{-| - Use L2 to access PKI information. --} - -module Urbit.Vere.Dawn ( dawnVent - , dawnCometList - , renderShip - , mineComet - -- Used only in testing - , mix - , shas - , shaf - , deriveCode - , cometFingerprintBS - , cometFingerprint - ) where - -import Urbit.Arvo.Common -import Urbit.Arvo.Event hiding (Address) -import Urbit.Prelude hiding (rights, to, (.=)) - -import Prelude (read) - -import Data.Bits (xor) -import Data.List (nub) -import Data.Text (splitOn) -import Data.Aeson -import Data.HexString - -import qualified Crypto.Hash.SHA256 as SHA256 -import qualified Crypto.Hash.SHA512 as SHA512 -import qualified Crypto.Sign.Ed25519 as Ed -import qualified Data.Binary as B -import qualified Data.ByteString as BS -import qualified Data.ByteString.Char8 as C -import qualified Data.ByteString.Lazy as L -import qualified Network.HTTP.Client as C -import qualified Urbit.Ob as Ob - -import qualified Network.HTTP.Client.TLS as TLS -import qualified Network.HTTP.Types as HT - --- Conversion Utilities -------------------------------------------------------- - -passFromBytes :: ByteString -> ByteString -> Int -> Pass -passFromBytes enc aut sut - | sut /= 1 = Pass (Ed.PublicKey mempty) (Ed.PublicKey mempty) - | otherwise = Pass (Ed.PublicKey aut) (Ed.PublicKey enc) - -clanFromShip :: Ship -> Ob.Class -clanFromShip = Ob.clan . Ob.patp . fromIntegral - -shipSein :: Ship -> Ship -shipSein = Ship . fromIntegral . Ob.fromPatp . Ob.sein . Ob.patp . fromIntegral - -renderShip :: Ship -> Text -renderShip = Ob.renderPatp . Ob.patp . fromIntegral - -onLeft :: (a -> b) -> Either a c -> Either b c -onLeft fun = bimap fun id - --- Data Validation ------------------------------------------------------------- - --- Derive public key structure from the key derivation seed structure -ringToPass :: Ring -> Pass -ringToPass Ring{..} = Pass{..} - where - passCrypt = decode ringCrypt - passSign = decode ringSign - decode = fst . fromJust . Ed.createKeypairFromSeed_ - fromJust = \case - Nothing -> error "Invalid seed passed to createKeypairFromSeed" - Just x -> x - --- JSONRPC Functions ----------------------------------------------------------- - --- Our use case here is simple enough. --- Network.JSONRPC appeared fragile and has no documentation. --- So, like with Vere, we roll our own. - -dawnSendHTTP :: String -> L.ByteString -> RIO e (Either Int L.ByteString) -dawnSendHTTP endpoint requestData = liftIO do - manager <- C.newManager TLS.tlsManagerSettings - - initialRequest <- C.parseRequest endpoint - let request = initialRequest - { C.method = "POST" - , C.requestBody = C.RequestBodyLBS $ requestData - , C.requestHeaders = [("Accept", "application/json"), - ("Content-Type", "application/json"), - ("Charsets", "utf-8")] - } - - response <- C.httpLbs request manager - - -- Return body if 200. - let code = HT.statusCode $ C.responseStatus response - case code of - 200 -> pure $ Right $ C.responseBody response - _ -> pure $ Left code - -class RequestMethod m where - getRequestMethod :: m -> Text - -data RawResponse r = RawResponse - { rrId :: Int - , rrResult :: r - } - deriving (Show) - -instance FromJSON r => FromJSON (RawResponse r) where - parseJSON = withObject "Response" $ \v -> do - rawId <- v .: "id" - rrResult <- v .: "result" - let rrId = read rawId - pure RawResponse{..} - - --- Given a list of methods and parameters, return a list of decoded responses. -dawnPostRequests :: forall req e resp res - . (ToJSON req, RequestMethod req, FromJSON res) - => String - -> (req -> res -> resp) - -> [req] - -> RIO e [resp] -dawnPostRequests endpoint responseBuilder requests = do - -- Encode our input requests - let requestPayload = - encode $ Array $ fromList $ fmap toFullRequest $ zip [0..] requests - - -- Send to the server - responses <- dawnSendHTTP endpoint requestPayload >>= \case - Left err -> error $ "error fetching " <> endpoint <> ": HTTP " <> (show err) - Right x -> pure x - - -- Get a list of the result texts in the order of the submitted requests - rawSorted <- case decode responses of - Nothing -> error $ "couldn't decode json" - Just x -> pure $ map rrResult $ sortOn rrId x - - -- Build the final result structure by calling the passed in builder with the - -- request (some outputs need data from the request structure, eitherwise, - -- we'd lean on FromJSON). - let results = map (uncurry responseBuilder) (zip requests rawSorted) - pure results - - where - toFullRequest :: (Int, req) -> Value - toFullRequest (rid, req) = object [ "jsonrpc" .= ("2.0" :: Text) - , "method" .= getRequestMethod req - , "params" .= req - , "id" .= (show rid) - ] - --- Azimuth JSON Requests ------------------------------------------------------- - -data PointResponse = PointResponse - -- NOTE also contains dominion and ownership, but not actually used here - { prNetwork :: PointNetwork - } deriving (Show, Eq, Generic) - -instance FromJSON PointResponse where - parseJSON = withObject "PointResponse" $ \o -> do - prNetwork <- o .: "network" - pure PointResponse{..} - -data PointNetwork = PointNetwork - { pnKeys :: PointKeys - , pnSponsor :: PointSponsor - , pnRift :: ContNum - } deriving (Show, Eq, Generic) - -instance FromJSON PointNetwork where - parseJSON = withObject "PointNetwork" $ \o -> do - pnKeys <- o .: "keys" - pnSponsor <- o .: "sponsor" - pnRift <- o .: "rift" - pure PointNetwork{..} - -data PointKeys = PointKeys - { pkLife :: Life - , pkSuite :: Int - , pkAuth :: ByteString - , pkCrypt :: ByteString - } deriving (Show, Eq, Generic) - -instance FromJSON PointKeys where - parseJSON = withObject "PointKeys" $ \o -> do - pkLife <- o .: "life" - pkSuite <- o .: "suite" - rawAuth <- o .: "auth" - rawCrypt <- o .: "crypt" - let pkAuth = parseKey rawAuth - let pkCrypt = parseKey rawCrypt - pure PointKeys{..} - where - parseKey = reverse . toBytes . hexString . removePrefix . encodeUtf8 - -data PointSponsor = PointSponsor - { psHas :: Bool - , psWho :: Text - } deriving (Show, Eq, Generic) - -instance FromJSON PointSponsor where - parseJSON = withObject "PointSponsor" $ \o -> do - psHas <- o .: "has" - psWho <- o .: "who" - pure PointSponsor{..} - -data PointRequest = PointRequest Ship - -instance RequestMethod PointRequest where - getRequestMethod PointRequest{} = "getPoint" - -instance ToJSON PointRequest where - toJSON (PointRequest point) = object [ "ship" .= renderShip point ] - -parseAzimuthPoint :: PointRequest -> PointResponse -> EthPoint -parseAzimuthPoint (PointRequest point) response = EthPoint{..} - where - net = prNetwork response - key = pnKeys net - - -- Vere doesn't set ownership information, neither did the old Dawn.hs - -- implementation. - epOwn = (0, 0, 0, 0) - - sponsorShip = Ob.parsePatp $ psWho $ pnSponsor net - epNet = if pkLife key == 0 - then Nothing - else case sponsorShip of - Left _ -> Nothing - Right s -> Just - ( fromIntegral $ pkLife key - , passFromBytes (pkCrypt key) (pkAuth key) (pkSuite key) - , fromIntegral $ pnRift net - , (psHas $ pnSponsor net, Ship $ fromIntegral $ Ob.fromPatp s) - , Nothing -- NOTE goes unused currently, so we simply put Nothing - ) - - -- I don't know what this is supposed to be, other than the old Dawn.hs and - -- dawn.c do the same thing. - -- zero-fill spawn data - epKid = case clanFromShip (Ship $ fromIntegral point) of - Ob.Galaxy -> Just (0, setToHoonSet mempty) - Ob.Star -> Just (0, setToHoonSet mempty) - _ -> Nothing - --- Preprocess data from a point request into the form used in the galaxy table. -parseGalaxyTableEntry :: PointRequest -> PointResponse -> (Ship, (Rift, Life, Pass)) -parseGalaxyTableEntry (PointRequest point) response = (ship, (rift, life, pass)) - where - net = prNetwork response - keys = pnKeys net - - ship = Ship $ fromIntegral point - rift = fromIntegral $ pnRift net - life = fromIntegral $ pkLife keys - pass = passFromBytes (pkCrypt keys) (pkAuth keys) (pkSuite keys) - -removePrefix :: ByteString -> ByteString -removePrefix withOhEx - | prefix == "0x" = suffix - | otherwise = error "not prefixed with 0x" - where - (prefix, suffix) = splitAt 2 withOhEx - -data TurfRequest = TurfRequest - -instance RequestMethod TurfRequest where - getRequestMethod TurfRequest = "getDns" - -instance ToJSON TurfRequest where - toJSON TurfRequest = object [] -- NOTE getDns takes no parameters - -parseTurfResponse :: TurfRequest -> [Text] -> [Turf] -parseTurfResponse TurfRequest = map turf - where - turf t = Turf $ fmap Cord $ reverse $ splitOn "." t - --- Azimuth Functions ----------------------------------------------------------- - -retrievePoint :: String -> Ship -> RIO e EthPoint -retrievePoint endpoint ship = - dawnPostRequests endpoint parseAzimuthPoint [PointRequest ship] - >>= \case - [x] -> pure x - _ -> error "JSON server returned multiple return values." - -validateFeedAndGetSponsor :: String - -> Feed - -> RIO e (Seed, Ship) -validateFeedAndGetSponsor endpoint = \case - Feed0 s -> do - r <- validateSeed s - case r of - Left e -> error e - Right r -> pure (s, r) - Feed1 s -> validateGerms s - - where - validateGerms Germs{..} = - case gFeed of - [] -> error "no usable keys in keyfile" - (Germ{..}:f) -> do - let seed = Seed gShip gLife gRing Nothing - r :: Either String Ship - <- validateSeed seed - case r of - Left _ -> validateGerms $ Germs gShip f - Right r -> pure (seed, r) - - validateSeed (Seed ship life ring oaf) = do - case clanFromShip ship of - Ob.Comet -> pure validateComet - Ob.Moon -> pure validateMoon - _ -> validateRest - where - cometFromPass = cometFingerprint $ ringToPass ring - validateComet - -- A comet address is the fingerprint of the keypair - | (ship /= cometFromPass) = - Left ("comet name doesn't match fingerprint " <> - show ship <> " vs " <> - show cometFromPass) - | (life /= 1) = - Left "comet can never be re-keyed" - | otherwise = - Right (shipSein ship) - - validateMoon = - -- TODO: The current code in zuse does nothing, but we should be able - -- to try to validate the oath against the current as exists planet - -- on chain. - Right $ shipSein ship - - validateRest = do - putStrLn ("boot: retrieving " <> renderShip ship <> "'s public keys") - - --TODO could cache this lookup - whoP <- retrievePoint endpoint ship - case epNet whoP of - Nothing -> pure $ Left "ship not keyed" - Just (netLife, pass, contNum, (hasSponsor, who), _) -> do - if (netLife /= life) then - pure $ Left ("keyfile life mismatch; keyfile claims life " <> - show life <> ", but Azimuth claims life " <> - show netLife) - else if ((ringToPass ring) /= pass) then - pure $ Left "keyfile does not match Azimuth" - -- TODO: The hoon code does a breach check, but the C code never - -- supplies the data necessary for it to function. - else - pure $ Right who - - --- Walk through the sponsorship chain retrieving the actual sponsorship chain --- as it exists on Azimuth. -getSponsorshipChain :: String -> Ship -> RIO e [(Ship,EthPoint)] -getSponsorshipChain endpoint = loop - where - loop ship = do - putStrLn ("boot: retrieving keys for sponsor " <> renderShip ship) - ethPoint <- retrievePoint endpoint ship - - case (clanFromShip ship, epNet ethPoint) of - (Ob.Comet, _) -> error "Comets cannot be sponsors" - (Ob.Moon, _) -> error "Moons cannot be sponsors" - - (_, Nothing) -> - error $ unpack ("Ship " <> renderShip ship <> " not booted") - - (Ob.Galaxy, Just _) -> pure [(ship, ethPoint)] - - (_, Just (_, _, _, (False, _), _)) -> - error $ unpack ("Ship " <> renderShip ship <> " has no sponsor") - - (_, Just (_, _, _, (True, sponsor), _)) -> do - chain <- loop sponsor - pure $ chain <> [(ship, ethPoint)] - --- Produces either an error or a validated boot event structure. -dawnVent :: HasLogFunc e => String -> Feed -> RIO e (Either Text Dawn) -dawnVent provider feed = - -- The type checker can't figure this out on its own. - (onLeft tshow :: Either SomeException Dawn -> Either Text Dawn) <$> try do - putStrLn ("boot: requesting L2 Azimuth information from " <> pack provider) - - (dSeed, immediateSponsor) - <- validateFeedAndGetSponsor provider feed - dSponsor <- getSponsorshipChain provider immediateSponsor - - putStrLn "boot: retrieving galaxy table" - dCzar <- (mapToHoonMap . mapFromList) <$> - (dawnPostRequests provider parseGalaxyTableEntry (map (PointRequest . Ship . fromIntegral) [0..255])) - - putStrLn "boot: retrieving network domains" - dTurf <- (dawnPostRequests provider parseTurfResponse [TurfRequest]) - >>= \case - [] -> pure [] - [t] -> pure (nub t) - _ -> error "too many turf responses" - - let dNode = Nothing - - -- NOTE blocknum of 0 is fine because jael ignores it. - -- should probably be removed from dawn event. - let dBloq = 0 - - pure MkDawn{..} - - --- Comet List ------------------------------------------------------------------ - -dawnCometList :: RIO e [Ship] -dawnCometList = do - -- Get the jamfile with the list of stars accepting comets right now. - manager <- io $ C.newManager TLS.tlsManagerSettings - request <- io $ C.parseRequest "https://bootstrap.urbit.org/comet-stars.jam" - response <- io $ C.httpLbs (C.setRequestCheckStatus request) manager - let body = toStrict $ C.responseBody response - - noun <- cueBS body & either throwIO pure - fromNounErr noun & either (throwIO . uncurry ParseErr) pure - - --- Comet Mining ---------------------------------------------------------------- - -mix :: BS.ByteString -> BS.ByteString -> BS.ByteString -mix a b = BS.pack $ loop (BS.unpack a) (BS.unpack b) - where - loop [] [] = [] - loop a [] = a - loop [] b = b - loop (x:xs) (y:ys) = (xor x y) : loop xs ys - -shax :: BS.ByteString -> BS.ByteString -shax = SHA256.hash - -shas :: BS.ByteString -> BS.ByteString -> BS.ByteString -shas salt = shax . mix salt . shax - -shaf :: BS.ByteString -> BS.ByteString -> BS.ByteString -shaf salt ruz = (mix a b) - where - haz = shas salt ruz - a = (take 16 haz) - b = (drop 16 haz) - --- Given a ring, derives the network login code. --- --- Note that the network code is a patp, not a patq: the bytes have been --- scrambled. -deriveCode :: Ring -> Ob.Patp -deriveCode Ring {..} = Ob.patp $ - bytesAtom $ - take 8 $ - shaf (C.pack "pass") $ - shax $ - C.singleton 'B' <> ringSign <> ringCrypt - -cometFingerprintBS :: Pass -> ByteString -cometFingerprintBS = (shaf $ C.pack "bfig") . passToBS - -cometFingerprint :: Pass -> Ship -cometFingerprint = Ship . B.decode . fromStrict . reverse . cometFingerprintBS - -tryMineComet :: Set Ship -> Word64 -> Maybe Seed -tryMineComet ships seed = - if member shipSponsor ships - then Just $ Seed shipName 1 ring Nothing - else Nothing - where - -- Hash the incoming seed into a 64 bytes. - baseHash = SHA512.hash $ toStrict $ B.encode seed - signSeed = (take 32 baseHash) - ringSeed = (drop 32 baseHash) - ring = Ring signSeed ringSeed - pass = ringToPass ring - shipName = cometFingerprint pass - shipSponsor = shipSein shipName - -mineComet :: Set Ship -> Word64 -> Seed -mineComet ships = loop - where - loop eny = - case (tryMineComet ships eny) of - Nothing -> loop (eny + 1) - Just x -> x diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre.hs deleted file mode 100644 index b426009f1..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre.hs +++ /dev/null @@ -1,386 +0,0 @@ -{-| - Eyre: Http Server Driver --} - -module Urbit.Vere.Eyre - ( eyre - , eyre' - ) -where - -import Urbit.Prelude hiding (Builder) - -import Urbit.Arvo hiding (ServerId, reqUrl) -import Urbit.King.App ( killKingActionL - , HasKingId(..) - , HasMultiEyreApi(..) - , HasPierEnv(..) - ) -import Urbit.King.Config -import Urbit.Vere.Eyre.Multi -import Urbit.Vere.Eyre.PortsFile -import Urbit.Vere.Eyre.Serv -import Urbit.Vere.Eyre.Service -import Urbit.Vere.Eyre.Wai -import Urbit.Vere.Pier.Types - -import Data.List.NonEmpty (NonEmpty((:|))) -import Data.PEM (pemParseBS, pemWriteBS) -import RIO.Prelude (decodeUtf8Lenient) -import System.Random (randomIO) -import Urbit.Vere.Http (convertHeaders, unconvertHeaders) -import Urbit.Vere.Eyre.KingSubsite (KingSubsite) - -import qualified Network.HTTP.Types as H - - --- Types ----------------------------------------------------------------------- - -type HasShipEnv e = (HasLogFunc e, HasNetworkConfig e, HasPierConfig e) - -type ReqId = UD - -newtype Drv = Drv (MVar (Maybe Serv)) - -data SockOpts = SockOpts - { soLocalhost :: Bool - , soWhich :: ServPort - } - -data PortsToTry = PortsToTry - { pttSec :: SockOpts - , pttIns :: SockOpts - , pttLop :: SockOpts - } - -data Serv = Serv - { sServId :: ServId - , sConfig :: HttpServerConf - , sLop :: ServApi - , sIns :: ServApi - , sSec :: Maybe ServApi - , sPorts :: Ports - , sPortsFile :: FilePath - , sLiveReqs :: TVar LiveReqs - } - - --- Utilities for Constructing Events ------------------------------------------- - -servEv :: HttpServerEv -> Ev -servEv = EvBlip . BlipEvHttpServer - -bornEv :: KingId -> Ev -bornEv king = servEv $ HttpServerEvBorn (king, ()) () - -liveEv :: ServId -> Ports -> Ev -liveEv sId Ports {..} = servEv $ HttpServerEvLive (sId, ()) pHttp pHttps - -cancelEv :: ServId -> ReqId -> EvErr -cancelEv sId reqId = - EvErr (servEv (HttpServerEvCancelRequest (sId, reqId, 1, ()) ())) cancelFailed - -cancelFailed :: WorkError -> IO () -cancelFailed _ = pure () - -reqEv :: ServId -> ReqId -> WhichServer -> Address -> HttpRequest -> Ev -reqEv sId reqId which addr req = case which of - Loopback -> servEv $ HttpServerEvRequestLocal (sId, reqId, 1, ()) - $ HttpServerReq False addr req - _ -> servEv $ HttpServerEvRequest (sId, reqId, 1, ()) - $ HttpServerReq (which == Secure) addr req - - --- Based on Pier+Config, which ports should each server run? ------------------- - -httpServerPorts :: HasShipEnv e => Bool -> RIO e PortsToTry -httpServerPorts fak = do - ins <- view (networkConfigL . ncHttpPort . to (fmap fromIntegral)) - sec <- view (networkConfigL . ncHttpsPort . to (fmap fromIntegral)) - lop <- view (networkConfigL . ncLocalPort . to (fmap fromIntegral)) - localMode <- view (networkConfigL . ncNetMode . to (== NMLocalhost)) - - let local = localMode || fak - - let pttSec = case (sec, fak) of - (Just p , _ ) -> SockOpts local (SPChoices $ singleton p) - (Nothing, False) -> SockOpts local (SPChoices (443 :| [8443 .. 8453])) - (Nothing, True ) -> SockOpts local (SPChoices (8443 :| [8444 .. 8453])) - - let pttIns = case (ins, fak) of - (Just p , _ ) -> SockOpts local (SPChoices $ singleton p) - (Nothing, False) -> SockOpts local (SPChoices (80 :| [8080 .. 8090])) - (Nothing, True ) -> SockOpts local (SPChoices (8080 :| [8081 .. 8090])) - - let pttLop = case (lop, fak) of - (Just p , _) -> SockOpts local (SPChoices $ singleton p) - (Nothing, _) -> SockOpts local SPAnyPort - - pure (PortsToTry { .. }) - - --- Convert Between Urbit and WAI types. ---------------------------------------- - -parseTlsConfig :: (Key, Cert) -> Maybe TlsConfig -parseTlsConfig (PEM key, PEM certs) = do - let (cerByt, keyByt) = (wainBytes certs, wainBytes key) - pems <- pemParseBS cerByt & either (const Nothing) Just - (cert, chain) <- case pems of - [] -> Nothing - p : ps -> pure (pemWriteBS p, pemWriteBS <$> ps) - pure $ TlsConfig keyByt cert chain - where - wainBytes :: Wain -> ByteString - wainBytes = encodeUtf8 . unWain - -parseHttpEvent :: HttpEvent -> [RespAct] -parseHttpEvent = \case - Start h b True -> [RAFull (hSta h) (hHdr h) (fByt $ fromMaybe "" b)] - Start h b False -> [RAHead (hSta h) (hHdr h) (fByt $ fromMaybe "" b)] - Cancel () -> [RADone] - Continue b done -> toList (RABloc . fByt <$> b) - <> if done then [RADone] else [] - where - hHdr :: ResponseHeader -> [H.Header] - hHdr = unconvertHeaders . headers - - hSta :: ResponseHeader -> H.Status - hSta = toEnum . fromIntegral . statusCode - - fByt :: File -> ByteString - fByt = unOcts . unFile - -requestEvent :: ServId -> WhichServer -> Word64 -> ReqInfo -> Ev -requestEvent srvId which reqId ReqInfo{..} = reqEv srvId reqUd which riAdr evReq - where - evBod = bodFile riBod - evHdr = convertHeaders riHdr - evUrl = Cord (decodeUtf8Lenient riUrl) - evReq = HttpRequest riMet evUrl evHdr evBod - reqUd = fromIntegral reqId - - bodFile :: ByteString -> Maybe File - bodFile "" = Nothing - bodFile bs = Just $ File $ Octs bs - - --- Running Servers ------------------------------------------------------------- - -execRespActs :: HasLogFunc e => Drv -> Ship -> Word64 -> HttpEvent -> RIO e () -execRespActs (Drv v) who reqId ev = readMVar v >>= \case - Nothing -> logError "Got a response to a request that does not exist." - Just sv -> do - logDebug $ displayShow ev - for_ (parseHttpEvent ev) $ \act -> do - atomically (routeRespAct who (sLiveReqs sv) reqId act) - -startServ - :: (HasPierConfig e, HasLogFunc e, HasMultiEyreApi e, HasNetworkConfig e) - => Ship - -> Bool - -> HttpServerConf - -> (EvErr -> STM ()) - -> (Text -> RIO e ()) - -> IO () - -> KingSubsite - -> RIO e Serv -startServ who isFake conf plan stderr onFatal sub = do - logInfo (displayShow ("EYRE", "startServ")) - - multi <- view multiEyreApiL - - let vLive = meaLive multi - - srvId <- io $ ServId . UV . fromIntegral <$> (randomIO :: IO Word32) - - let mTls = hscSecure conf >>= parseTlsConfig - - mCre <- mTls & \case - Nothing -> pure Nothing - Just tc -> configCreds tc & \case - Right rs -> pure (Just (tc, rs)) - Left err -> do - logError "Couldn't Load TLS Credentials." - pure Nothing - - ptt <- httpServerPorts isFake - - {- - TODO If configuration requests a redirect, get the HTTPS port (if - configuration specifies a specific port, use that. Otherwise, wait - for the HTTPS server to start and then use the port that it chose). - and run an HTTP server that simply redirects to the HTTPS server. - -} - let secRedi = Nothing - - let soHost :: SockOpts -> ServHost - soHost so = if soLocalhost so then SHLocalhost else SHAnyHostOk - - noHttp <- view (networkConfigL . ncNoHttp) - noHttps <- view (networkConfigL . ncNoHttps) - - let reqEvFailed _ = pure () - - let onReq :: WhichServer -> Ship -> Word64 -> ReqInfo -> STM () - onReq which _ship reqId reqInfo = - plan $ EvErr (requestEvent srvId which reqId reqInfo) reqEvFailed - - let onKilReq :: Ship -> Word64 -> STM () - onKilReq _ship = plan . cancelEv srvId . fromIntegral - - logInfo (displayShow ("EYRE", "joinMultiEyre", who, mTls, mCre)) - - atomically (joinMultiEyre multi who mCre onReq onKilReq sub) - - logInfo $ displayShow ("EYRE", "Starting loopback server") - lop <- serv vLive onFatal $ ServConf - { scHost = soHost (pttLop ptt) - , scPort = soWhich (pttLop ptt) - , scRedi = Nothing - , scFake = False - , scType = STHttp who sub $ ReqApi - { rcReq = onReq Loopback - , rcKil = onKilReq - } - } - - logInfo $ displayShow ("EYRE", "Starting insecure server") - ins <- serv vLive onFatal $ ServConf - { scHost = soHost (pttIns ptt) - , scPort = soWhich (pttIns ptt) - , scRedi = secRedi - , scFake = noHttp - , scType = STHttp who sub $ ReqApi - { rcReq = onReq Insecure - , rcKil = onKilReq - } - } - - mSec <- for mTls $ \tls -> do - logInfo "Starting secure server" - serv vLive onFatal $ ServConf - { scHost = soHost (pttSec ptt) - , scPort = soWhich (pttSec ptt) - , scRedi = Nothing - , scFake = noHttps - , scType = STHttps who tls sub $ ReqApi - { rcReq = onReq Secure - , rcKil = onKilReq - } - } - - pierPath <- view pierPathL - - lopPor <- atomically (fmap fromIntegral $ saPor lop) - insPor <- atomically (fmap fromIntegral $ saPor ins) - secPor <- for mSec (fmap fromIntegral . atomically . saPor) - - let por = Ports secPor insPor lopPor - fil = pierPath <> "/.http.ports" - - logInfo $ displayShow ("EYRE", "All Servers Started.", srvId, por, fil) - for secPor $ \p -> - stderr ("http: secure web interface live on https://localhost:" <> tshow p) - stderr ("http: web interface live on http://localhost:" <> tshow insPor) - stderr ("http: loopback live on http://localhost:" <> tshow lopPor) - - pure (Serv srvId conf lop ins mSec por fil vLive) - - --- Eyre Driver ----------------------------------------------------------------- - -_bornFailed :: e -> WorkError -> IO () -_bornFailed env _ = runRIO env $ do - pure () -- TODO What should this do? - -eyre' - :: (HasPierEnv e, HasMultiEyreApi e) - => Ship - -> Bool - -> (Text -> RIO e ()) - -> KingSubsite - -> RIO e ([Ev], RAcquire e (DriverApi HttpServerEf)) - -eyre' who isFake stderr sub = do - ventQ :: TQueue EvErr <- newTQueueIO - env <- ask - - let (bornEvs, startDriver) = - eyre env who (writeTQueue ventQ) isFake stderr sub - - let runDriver = do - diOnEffect <- startDriver - let diEventSource = fmap RRWork <$> tryReadTQueue ventQ - pure (DriverApi {..}) - - pure (bornEvs, runDriver) - -{-| - Eyre -- HTTP Server Driver - - Inject born events. - Until born events succeeds, ignore effects. - Wait until born event callbacks invoked. - If success, signal success. - If failure, try again several times. - If still failure, bring down ship. - Once born event succeeds: - - Begin normal operation (start accepting requests) --} -eyre - :: forall e - . (HasPierEnv e) - => e - -> Ship - -> (EvErr -> STM ()) - -> Bool - -> (Text -> RIO e ()) - -> KingSubsite - -> ([Ev], RAcquire e (HttpServerEf -> IO ())) -eyre env who plan isFake stderr sub = (initialEvents, runHttpServer) - where - king = fromIntegral (env ^. kingIdL) - multi = env ^. multiEyreApiL - - initialEvents :: [Ev] - initialEvents = [bornEv king] - - runHttpServer :: RAcquire e (HttpServerEf -> IO ()) - runHttpServer = handleEf <$> mkRAcquire - (Drv <$> newMVar Nothing) - (\(Drv v) -> stopService v kill >>= fromEither) - - kill :: HasLogFunc e => Serv -> RIO e () - kill Serv{..} = do - atomically (leaveMultiEyre multi who) - io (saKil sLop) - io (saKil sIns) - io $ for_ sSec (\sec -> (saKil sec)) - io (removePortsFile sPortsFile) - - restart :: Drv -> HttpServerConf -> RIO e Serv - restart (Drv var) conf = do - logInfo "Restarting http server" - let onFatal = runRIO env $ do - -- XX instead maybe restart following logic under HSESetConfig below - stderr "A web server problem has occurred. Please restart your ship." - view killKingActionL >>= atomically - let startAct = startServ who isFake conf plan stderr onFatal sub - res <- fromEither =<< restartService var startAct kill - logInfo "Done restating http server" - pure res - - liveFailed _ = pure () - - handleEf :: Drv -> HttpServerEf -> IO () - handleEf drv = runRIO env . \case - HSESetConfig (i, ()) conf -> do - logInfo (displayShow ("EYRE", "%set-config")) - Serv {..} <- restart drv conf - logInfo (displayShow ("EYRE", "%set-config", "Sending %live")) - atomically $ plan (EvErr (liveEv sServId sPorts) liveFailed) - logInfo "Write ports file" - io (writePortsFile sPortsFile sPorts) - HSEResponse (i, req, _seq, ()) ev -> do - logDebug (displayShow ("EYRE", "%response")) - execRespActs drv who (fromIntegral req) ev diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/KingSubsite.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/KingSubsite.hs deleted file mode 100644 index ae4d59d63..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/KingSubsite.hs +++ /dev/null @@ -1,126 +0,0 @@ -{-| - KingSubsite: runtime-exclusive HTTP request handling, for /~_~ --} - -module Urbit.Vere.Eyre.KingSubsite - ( KingSubsite - , kingSubsite - , runKingSubsite - , fourOhFourSubsite - ) where - -import Urbit.Prelude hiding (Builder) - -import Data.ByteString.Builder -import Urbit.King.Scry - -import Data.Conduit (ConduitT, Flush(..), yield) -import Data.Text.Encoding (encodeUtf8Builder) -import Urbit.Vere.Stat (RenderedStat) - -import qualified Data.Text.Encoding as E -import qualified Network.HTTP.Types as H -import qualified Network.Wai as W -import qualified Network.Wai.Conduit as W - -newtype KingSubsite = KS { runKingSubsite :: W.Application } - -data SlogAction - = KeepAlive - | Slog (Atom, Tank) - -streamSlog :: Monad m => SlogAction -> ConduitT () (Flush Builder) m () -streamSlog a = do - case a of - KeepAlive -> pure () - Slog (_, t) -> for_ (wash (WashCfg 0 80) (tankTree t)) $ \l -> do - yield $ Chunk "data:" - yield $ Chunk $ encodeUtf8Builder $ unTape l - yield $ Chunk "\n" - yield $ Chunk "\n" - yield $ Flush - -kingSubsite :: HasLogFunc e - => Ship - -> ScryFunc - -> IO RenderedStat - -> TVar ((Atom, Tank) -> IO ()) - -> RAcquire e KingSubsite -kingSubsite who scry stat func = do - clients <- newTVarIO (mempty :: Map Word (SlogAction -> IO ())) - nextId <- newTVarIO (0 :: Word) - baton <- newTMVarIO () - env <- ask - - atomically $ writeTVar func $ \s -> readTVarIO clients >>= traverse_ ($ Slog s) - - acquireWorker "Runtime subsite keep-alive" $ forever $ do - threadDelay 20_000_000 - io $ readTVarIO clients >>= traverse_ ($ KeepAlive) - - pure $ KS $ \req respond -> case W.pathInfo req of - ["~_~", "slog"] -> bracket - (do - id <- atomically $ do - id <- readTVar nextId - modifyTVar' nextId (+ 1) - pure id - slogQ <- newTQueueIO - atomically $ - modifyTVar' clients (insertMap id (atomically . writeTQueue slogQ)) - pure (id, slogQ)) - (\(id, _) -> atomically $ modifyTVar' clients (deleteMap id)) - (\(_, q) -> do - authed <- authenticated env req - if not authed - then respond $ emptyResponse 403 "Permission Denied" - else - let loop = yield Flush - >> forever (atomically (readTQueue q) >>= streamSlog) - in respond $ W.responseSource (H.mkStatus 200 "OK") slogHeads loop) - - ["~_~", "stat"] -> do - authed <- authenticated env req - if not authed - then respond $ emptyResponse 403 "Permission Denied" - else do - lines <- stat - let msg = mconcat ((<> "\n") . encodeUtf8Builder <$> lines) - <> "\nRefresh for more current data." - respond $ W.responseBuilder (H.mkStatus 200 "OK") statHeads msg - - _ -> respond $ emptyResponse 404 "Not Found" - - where - slogHeads = [ ("Content-Type", "text/event-stream") - , ("Cache-Control", "no-cache") - , ("Connection", "keep-alive") - ] - - statHeads = [ ("Content-Type", "text/plain") - , ("Cache-Control", "no-cache") - ] - - emptyResponse cod mes = W.responseLBS (H.mkStatus cod mes) [] "" - - authenticated env req = runRIO env - $ (scryAuth $ getCookie req) - >>= pure . fromMaybe False - - getCookie req = intercalate "; " - $ fmap (E.decodeUtf8 . snd) - $ filter ((== "cookie") . fst) - $ W.requestHeaders req - - scryAuth :: HasLogFunc e - => Text - -> RIO e (Maybe Bool) - scryAuth cookie = - scryNow scry "ex" "" ["authenticated", "cookie", textAsT cookie] - -fourOhFourSubsite :: Ship -> KingSubsite -fourOhFourSubsite who = KS $ \req respond -> - respond $ W.responseLBS (H.mkStatus 404 "Not Found") [] body - where - body = toLazyByteString $ foldMap charUtf8 $ msg - msg = "Ship " <> show who <> " not docked." diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Multi.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Multi.hs deleted file mode 100644 index 09d1f974e..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Multi.hs +++ /dev/null @@ -1,143 +0,0 @@ -{-| - Eyre: Http Server Driver --} - -module Urbit.Vere.Eyre.Multi - ( WhichServer(..) - , MultiEyreConf(..) - , OnMultiReq - , OnMultiKil - , MultiEyreApi(..) - , joinMultiEyre - , leaveMultiEyre - , multiEyre - ) -where - -import Urbit.Prelude hiding (Builder) - -import Urbit.Arvo hiding (ServerId, reqUrl) -import Urbit.Vere.Eyre.Serv -import Urbit.Vere.Eyre.Wai - -import Network.TLS (Credential) -import Urbit.Vere.Eyre.KingSubsite (KingSubsite, fourOhFourSubsite) - - --- Types ----------------------------------------------------------------------- - -data WhichServer = Secure | Insecure | Loopback - deriving (Eq) - -data MultiEyreConf = MultiEyreConf - { mecHttpsPort :: Maybe Port - , mecHttpPort :: Maybe Port - , mecLocalhostOnly :: Bool - } - deriving (Show) - -type OnMultiReq = WhichServer -> Ship -> Word64 -> ReqInfo -> STM () - -type OnMultiKil = Ship -> Word64 -> STM () - -data MultiEyreApi = MultiEyreApi - { meaConf :: MultiEyreConf - , meaLive :: TVar LiveReqs - , meaPlan :: TVar (Map Ship OnMultiReq) - , meaCanc :: TVar (Map Ship OnMultiKil) - , meaTlsC :: TVar (Map Ship (TlsConfig, Credential)) - , meaSite :: TVar (Map Ship KingSubsite) - , meaKill :: IO () - } - - --- Multi-Tenet HTTP ------------------------------------------------------------ - -joinMultiEyre - :: MultiEyreApi - -> Ship - -> Maybe (TlsConfig, Credential) - -> OnMultiReq - -> OnMultiKil - -> KingSubsite - -> STM () -joinMultiEyre api who mTls onReq onKil sub = do - modifyTVar' (meaPlan api) (insertMap who onReq) - modifyTVar' (meaCanc api) (insertMap who onKil) - for_ mTls $ \creds -> do - modifyTVar' (meaTlsC api) (insertMap who creds) - modifyTVar' (meaSite api) (insertMap who sub) - -leaveMultiEyre :: MultiEyreApi -> Ship -> STM () -leaveMultiEyre MultiEyreApi {..} who = do - modifyTVar' meaCanc (deleteMap who) - modifyTVar' meaPlan (deleteMap who) - modifyTVar' meaTlsC (deleteMap who) - modifyTVar' meaSite (deleteMap who) - -multiEyre :: HasLogFunc e => IO () -> MultiEyreConf -> RIO e MultiEyreApi -multiEyre onFatal conf@MultiEyreConf {..} = do - logInfo (displayShow ("EYRE", "MULTI", conf)) - - vLive <- io emptyLiveReqs >>= newTVarIO - vPlan <- newTVarIO mempty - vCanc <- newTVarIO (mempty :: Map Ship (Ship -> Word64 -> STM ())) - vTlsC <- newTVarIO mempty - vSite <- newTVarIO mempty - - let site :: Ship -> STM KingSubsite - site who = do - sites <- readTVar vSite - pure $ maybe (fourOhFourSubsite who) id $ lookup who sites - - let host = if mecLocalhostOnly then SHLocalhost else SHAnyHostOk - - let onReq :: WhichServer -> Ship -> Word64 -> ReqInfo -> STM () - onReq which who reqId reqInfo = do - plan <- readTVar vPlan - lookup who plan & \case - Nothing -> pure () - Just cb -> cb which who reqId reqInfo - - let onKil :: Ship -> Word64 -> STM () - onKil who reqId = do - canc <- readTVar vCanc - lookup who canc & \case - Nothing -> pure () - Just cb -> cb who reqId - - mIns <- for mecHttpPort $ \por -> do - logInfo (displayShow ("EYRE", "MULTI", "HTTP", por)) - serv vLive onFatal $ ServConf - { scHost = host - , scPort = SPChoices $ singleton $ fromIntegral por - , scRedi = Nothing -- TODO - , scFake = False - , scType = STMultiHttp site $ ReqApi - { rcReq = onReq Insecure - , rcKil = onKil - } - } - - mSec <- for mecHttpsPort $ \por -> do - logInfo (displayShow ("EYRE", "MULTI", "HTTPS", por)) - serv vLive onFatal $ ServConf - { scHost = host - , scPort = SPChoices $ singleton $ fromIntegral por - , scRedi = Nothing - , scFake = False - , scType = STMultiHttps (MTC vTlsC) site $ ReqApi - { rcReq = onReq Secure - , rcKil = onKil - } - } - - pure $ MultiEyreApi - { meaLive = vLive - , meaPlan = vPlan - , meaCanc = vCanc - , meaTlsC = vTlsC - , meaSite = vSite - , meaConf = conf - , meaKill = traverse_ saKil (toList mIns <> toList mSec) - } diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/PortsFile.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/PortsFile.hs deleted file mode 100644 index 20e073122..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/PortsFile.hs +++ /dev/null @@ -1,44 +0,0 @@ -{-| - Eyre: Http Server Driver --} - -module Urbit.Vere.Eyre.PortsFile - ( Ports(..) - , writePortsFile - , removePortsFile - ) -where - -import Urbit.Prelude - -import System.Directory (doesFileExist, removeFile) -import Urbit.Arvo (Port(unPort)) - - --- Types ----------------------------------------------------------------------- - -data Ports = Ports - { pHttps :: Maybe Port - , pHttp :: Port - , pLoop :: Port - } - deriving (Eq, Ord, Show) - - --- Creating and Deleting `.http.ports` files. ---------------------------------- - -portsFileText :: Ports -> Text -portsFileText Ports {..} = unlines $ catMaybes - [ pHttps <&> \p -> (tshow p <> " secure public") - , Just (tshow (unPort pHttp) <> " insecure public") - , Just (tshow (unPort pLoop) <> " insecure loopback") - ] - -removePortsFile :: FilePath -> IO () -removePortsFile pax = do - doesFileExist pax >>= \case - True -> removeFile pax - False -> pure () - -writePortsFile :: FilePath -> Ports -> IO () -writePortsFile f = writeFile f . encodeUtf8 . portsFileText diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Serv.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Serv.hs deleted file mode 100644 index 2bd8a2264..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Serv.hs +++ /dev/null @@ -1,384 +0,0 @@ -{-| - Runs a single HTTP (or HTTPS) server for the eyre driver. - - A server is given: - - - A port, or a range or ports. - - Opens a socket on one of those ports. - - If this fails, try again repeatedly. - - Once a socket is opened, runs an HTTP server on the specified port. - - Once the server is up, calls a callback with the port that was opened. - - Once we have chosen a port, we commit to that port (ignoring the - original range). - - If the socket ever goes down, keep trying to reopen that port forever. - - When the server is shutdown, make sure the socket is closed. - - TODO How to detect socket closed during server run? --} - -module Urbit.Vere.Eyre.Serv - ( ServApi(..) - , TlsConfig(..) - , MultiTlsConfig(..) - , ReqApi(..) - , ServType(..) - , ServPort(..) - , ServHost(..) - , ServConf(..) - , configCreds - , serv - , fakeServ - ) -where - -import Urbit.Prelude hiding (Builder) - -import Data.Default (def) -import Data.List.NonEmpty (NonEmpty((:|))) -import GHC.IO.Exception (IOException(..), IOErrorType(..)) -import Network.TLS ( Credential - , Credentials(..) - , ServerHooks(..) - ) -import Network.TLS (credentialLoadX509ChainFromMemory) -import RIO.Prelude (decodeUtf8Lenient) -import Urbit.Vere.Eyre.KingSubsite (KingSubsite) - -import qualified Control.Monad.STM as STM -import qualified Data.Char as C -import qualified Network.Socket as Net -import qualified Network.Wai as W -import qualified Network.Wai.Handler.Warp as W -import qualified Network.Wai.Handler.WarpTLS as W -import qualified Urbit.Ob as Ob -import qualified Urbit.Vere.Eyre.Wai as E - - --- Internal Types -------------------------------------------------------------- - -data ServApi = ServApi - { saKil :: IO () - , saPor :: STM W.Port - } - -data TlsConfig = TlsConfig - { tcPrKey :: ByteString - , tcCerti :: ByteString - , tcChain :: [ByteString] - } - deriving (Show) - -newtype MultiTlsConfig = MTC (TVar (Map Ship (TlsConfig, Credential))) - -data ReqApi = ReqApi - { rcReq :: Ship -> Word64 -> E.ReqInfo -> STM () - , rcKil :: Ship -> Word64 -> STM () - } - -data ServType - = STHttp Ship KingSubsite ReqApi - | STHttps Ship TlsConfig KingSubsite ReqApi - | STMultiHttp (Ship -> STM KingSubsite) ReqApi - | STMultiHttps MultiTlsConfig (Ship -> STM KingSubsite) ReqApi - -instance Show ServType where - show = \case - STHttp who _ _ -> "STHttp " <> show who - STHttps who tls _ _ -> "STHttps " <> show who <> " " <> show tls - STMultiHttp _ _ -> "STMultiHttp" - STMultiHttps tls _ _ -> "STMultiHttps" - -data ServPort - = SPAnyPort - | SPChoices (NonEmpty W.Port) - deriving (Show) - -data ServHost - = SHLocalhost - | SHAnyHostOk - deriving (Show) - -data ServConf = ServConf - { scType :: ServType - , scHost :: ServHost - , scPort :: ServPort - , scRedi :: Maybe W.Port - , scFake :: Bool - } - deriving (Show) - - --- Opening Sockets ------------------------------------------------------------- - -getBindAddr :: String -> W.Port -> IO Net.SockAddr -getBindAddr hos por = - Net.getAddrInfo Nothing (Just hos) (Just (show por)) >>= \case - [] -> error "this should never happen." - x : _ -> pure (Net.addrAddress x) - -bindListenPort :: String -> W.Port -> Net.Socket -> IO Net.PortNumber -bindListenPort hos por sok = do - Net.bind sok =<< getBindAddr hos por - Net.listen sok 1 - Net.socketPort sok - -tcpSocket :: IO (Either IOError Net.Socket) -tcpSocket = - tryIOError (Net.socket Net.AF_INET Net.Stream Net.defaultProtocol) - -tryOpen :: String -> W.Port -> IO (Either IOError (W.Port, Net.Socket)) -tryOpen hos por = - tcpSocket >>= \case - Left exn -> pure (Left exn) - Right sok -> tryIOError (bindListenPort hos por sok) >>= \case - Left exn -> Net.close sok $> Left exn - Right por -> pure (Right (fromIntegral por, sok)) - -openFreePort :: String -> IO (Either IOError (W.Port, Net.Socket)) -openFreePort hos = do - tcpSocket >>= \case - Left exn -> pure (Left exn) - Right sok -> tryIOError (doBind sok) >>= \case - Left exn -> Net.close sok $> Left exn - Right ps -> pure (Right ps) - where - doBind sok = do - adr <- - Net.getAddrInfo Nothing (Just hos) Nothing >>= \case - [] -> error ("unable to determine numeric hostname from " ++ hos) - ip : _ -> pure (Net.addrAddress ip) - - Net.bind sok adr - Net.listen sok 1 - port <- Net.socketPort sok - pure (fromIntegral port, sok) - -retry :: HasLogFunc e => RIO e (Either IOError a) -> RIO e a -retry act = act >>= \case - Right res -> pure res - Left exn -> do - logDbg ctx ("Failed to open ports. Waiting 5s, then trying again.", exn) - threadDelay 5_000_000 - retry act - where - ctx = ["EYRE", "SERV", "retry"] - -tryOpenChoices - :: HasLogFunc e - => String - -> NonEmpty W.Port - -> RIO e (Either IOError (W.Port, Net.Socket)) -tryOpenChoices hos = go - where - go (p :| ps) = do - logInfo (displayShow ("EYRE", "Trying to open port.", p)) - io (tryOpen hos p) >>= \case - Left err -> do - logError (displayShow ("EYRE", "Failed to open port.", p)) - case ps of - [] -> pure (Left err) - q : qs -> go (q :| qs) - Right (p, s) -> do - pure (Right (p, s)) - -tryOpenAny - :: HasLogFunc e => String -> RIO e (Either IOError (W.Port, Net.Socket)) -tryOpenAny hos = do - let ctx = ["EYRE", "SERV", "tryOpenAny"] - logDbg ctx "Asking the OS for any free port." - io (openFreePort hos) >>= \case - Left exn -> pure (Left exn) - Right (p, s) -> do - pure (Right (p, s)) - -logDbg :: (HasLogFunc e, Show a) => [Text] -> a -> RIO e () -logDbg ctx msg = logInfo (prefix <> suffix) - where - prefix = display (concat $ fmap (<> ": ") ctx) - suffix = displayShow msg - -forceOpenSocket - :: forall e - . HasLogFunc e - => ServHost - -> ServPort - -> RAcquire e (W.Port, Net.Socket) -forceOpenSocket hos por = mkRAcquire opn kil - where - kil = io . Net.close . snd - - opn = do - let ctx = ["EYRE", "SERV", "forceOpenSocket"] - logDbg ctx (hos, por) - (p, s) <- retry $ case por of - SPAnyPort -> tryOpenAny bind - SPChoices ps -> tryOpenChoices bind ps - logDbg ctx ("Opened port.", p) - pure (p, s) - - bind = case hos of - SHLocalhost -> "127.0.0.1" - SHAnyHostOk -> "0.0.0.0" - - --- Starting WAI ---------------------------------------------------------------- - -hostShip :: Maybe ByteString -> IO Ship -hostShip Nothing = error "Request must contain HOST header." -hostShip (Just bs) = byteShip (hedLabel bs) & \case - Left err -> error ("Bad host prefix. Must be a ship name: " <> unpack err) - Right sp -> pure sp - where - byteShip = fmap (fromIntegral . Ob.fromPatp) . bytePatp - bytePatp = Ob.parsePatp . decodeUtf8Lenient - hedLabel = fst . break (== fromIntegral (C.ord '.')) - -onSniHdr - :: HasLogFunc e => e -> MultiTlsConfig -> Maybe String -> IO Credentials -onSniHdr env (MTC mtls) mHos = do - tabl <- atomically (readTVar mtls) - runRIO env $ logDbg ctx (tabl, mHos) - ship <- hostShip (encodeUtf8 . pack <$> mHos) - runRIO env $ logDbg ctx ship - tcfg <- lookup ship tabl & maybe (notRunning ship) (pure . snd) - runRIO env $ logDbg ctx tcfg - pure (Credentials [tcfg]) - where - notRunning ship = error ("Ship not running: ~" <> show ship) - ctx = ["EYRE", "HTTPS", "SNI"] - -startServer - :: HasLogFunc e - => ServType - -> ServHost - -> W.Port - -> Net.Socket - -> Maybe W.Port - -> TVar E.LiveReqs - -> IO () - -> RIO e () -startServer typ hos por sok red vLive onFatal = do - envir <- ask - - let host = case hos of - SHLocalhost -> "127.0.0.1" - SHAnyHostOk -> "*" - - let handler r e = do - when (isFatal e) $ do - runRIO envir $ logError $ display $ msg r e - onFatal - when (W.defaultShouldDisplayException e) $ do - runRIO envir $ logWarn $ display $ msg r e - - isFatal e - | Just (IOError {ioe_type = ResourceExhausted}) <- fromException e - = True - | otherwise = False - - msg r e = case r of - Just r -> "eyre: failed request from " <> (tshow $ W.remoteHost r) - <> " for " <> (tshow $ W.rawPathInfo r) <> ": " <> tshow e - Nothing -> "eyre: server exception: " <> tshow e - - let opts = - W.defaultSettings - & W.setHost host - & W.setPort (fromIntegral por) - & W.setTimeout 30 - & W.setOnException handler - - -- TODO build Eyre.Site.app in pier, thread through here - let runAppl who = E.app envir who vLive - reqShip = hostShip . W.requestHeaderHost - - case typ of - STHttp who sub api -> do - let app = runAppl who (rcReq api who) (rcKil api who) sub - io (W.runSettingsSocket opts sok app) - - STHttps who TlsConfig {..} sub api -> do - let tls = W.tlsSettingsChainMemory tcCerti tcChain tcPrKey - let app = runAppl who (rcReq api who) (rcKil api who) sub - io (W.runTLSSocket tls opts sok app) - - STMultiHttp fub api -> do - let app req resp = do - who <- reqShip req - sub <- atomically $ fub who - runAppl who (rcReq api who) (rcKil api who) sub req resp - io (W.runSettingsSocket opts sok app) - - STMultiHttps mtls fub api -> do - TlsConfig {..} <- atomically (getFirstTlsConfig mtls) - - let sni = def { onServerNameIndication = onSniHdr envir mtls } - - let tlsSing = (W.tlsSettingsChainMemory tcCerti tcChain tcPrKey) - let tlsMany = tlsSing { W.tlsServerHooks = sni } - - let ctx = ["EYRE", "HTTPS", "REQ"] - - let - app = \req resp -> do - runRIO envir $ logDbg ctx "Got request" - who <- reqShip req - runRIO envir $ logDbg ctx ("Parsed HOST", who) - sub <- atomically $ fub who - runAppl who (rcReq api who) (rcKil api who) sub req resp - - io (W.runTLSSocket tlsMany opts sok app) - - --------------------------------------------------------------------------------- - -configCreds :: TlsConfig -> Either Text Credential -configCreds TlsConfig {..} = - credentialLoadX509ChainFromMemory tcCerti tcChain tcPrKey & \case - Left str -> Left (pack str) - Right rs -> Right rs - -fakeServ :: HasLogFunc e => ServConf -> RIO e ServApi -fakeServ conf = do - let por = fakePort (scPort conf) - logInfo (displayShow ("EYRE", "SERV", "Running Fake Server", por)) - pure $ ServApi - { saKil = pure () - , saPor = pure por - } - where - fakePort :: ServPort -> W.Port - fakePort SPAnyPort = 55555 - fakePort (SPChoices (x :| _)) = x - -getFirstTlsConfig :: MultiTlsConfig -> STM TlsConfig -getFirstTlsConfig (MTC var) = do - map <- readTVar var - case toList map of - [] -> STM.retry - x:_ -> pure (fst x) - -realServ :: HasLogFunc e - => TVar E.LiveReqs -> IO () -> ServConf -> RIO e ServApi -realServ vLive onFatal conf@ServConf {..} = do - logInfo (displayShow ("EYRE", "SERV", "Running Real Server")) - por <- newEmptyTMVarIO - - tid <- async (runServ por) - - pure $ ServApi - { saKil = cancel tid - , saPor = readTMVar por - } - where - runServ vPort = do - logInfo (displayShow ("EYRE", "SERV", "runServ")) - rwith (forceOpenSocket scHost scPort) $ \(por, sok) -> do - atomically (putTMVar vPort por) - startServer scType scHost por sok scRedi vLive onFatal - -serv :: HasLogFunc e => TVar E.LiveReqs -> IO () -> ServConf -> RIO e ServApi -serv vLive onFatal conf = do - if scFake conf - then fakeServ conf - else realServ vLive onFatal conf diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Service.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Service.hs deleted file mode 100644 index af571afc9..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Service.hs +++ /dev/null @@ -1,67 +0,0 @@ -{-| - Eyre: Http Server Driver --} - -module Urbit.Vere.Eyre.Service - ( restartService - , stopService - ) -where - -import Urbit.Prelude - - --- Generic Service Stop/Restart -- Using an MVar for Atomicity ----------------- - -{-| - Restart a running service. - - This can probably be made simpler, but it - - - Sets the MVar to Nothing if there was an exception while starting - or stopping the service. - - - Keeps the MVar lock until the restart process finishes. --} -restartService - :: forall e s - . HasLogFunc e - => MVar (Maybe s) - -> RIO e s - -> (s -> RIO e ()) - -> RIO e (Either SomeException s) -restartService vServ sstart kkill = do - logInfo "restartService" - modifyMVar vServ $ \case - Nothing -> doStart - Just sv -> doRestart sv - where - doRestart :: s -> RIO e (Maybe s, Either SomeException s) - doRestart serv = do - logInfo "doStart" - try (kkill serv) >>= \case - Left exn -> pure (Nothing, Left exn) - Right () -> doStart - - doStart :: RIO e (Maybe s, Either SomeException s) - doStart = do - logInfo "doStart" - try sstart <&> \case - Right s -> (Just s, Right s) - Left exn -> (Nothing, Left exn) - -{-| - Stop a running service. Do nothing if it's already stopped. --} -stopService - :: HasLogFunc e - => MVar (Maybe s) - -> (s -> RIO e ()) - -> RIO e (Either SomeException ()) -stopService vServ kkill = do - logInfo "stopService" - modifyMVar vServ $ \case - Nothing -> pure (Nothing, Right ()) - Just sv -> do - res <- try (kkill sv) - pure (Nothing, res) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Wai.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Wai.hs deleted file mode 100644 index b47725498..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Eyre/Wai.hs +++ /dev/null @@ -1,234 +0,0 @@ -{-| - WAI Application for `eyre` driver. - - # Request Lifecycles - - - Requests come in, are given an identifier and are passed to a callback. - - - When requests timeout, the identifier is passed to anothing callback. - - - The server pulls response actions, and passes them to the associated - request. --} - -module Urbit.Vere.Eyre.Wai - ( RespAct(..) - , RespApi(..) - , LiveReqs(..) - , ReqInfo(..) - , emptyLiveReqs - , routeRespAct - , rmLiveReq - , newLiveReq - , app - ) -where - -import Urbit.Prelude hiding (Builder) - -import Data.Binary.Builder (Builder, fromByteString) -import Data.Bits (shiftL, (.|.)) -import Data.Conduit (ConduitT, Flush(Chunk, Flush), yield) -import Network.Socket (SockAddr(..)) -import System.Random (newStdGen, randoms) -import Urbit.Arvo (Address(..), Ipv4(..), Ipv6(..), Method) -import Urbit.Vere.Eyre.KingSubsite (KingSubsite, runKingSubsite) - -import qualified Network.HTTP.Types as H -import qualified Network.Wai as W -import qualified Network.Wai.Conduit as W - - --- Types ----------------------------------------------------------------------- - -data RespAct - = RAFull H.Status [H.Header] ByteString - | RAHead H.Status [H.Header] ByteString - | RABloc ByteString - | RADone - deriving (Eq, Ord, Show) - -data RespApi = RespApi - { raAct :: RespAct -> STM Bool - , raKil :: STM () - } - -data LiveReqs = LiveReqs - { reqIdSuply :: [Word64] - , activeReqs :: Map Word64 (Ship, RespApi) - } - -data ReqInfo = ReqInfo - { riAdr :: Address - , riMet :: H.StdMethod - , riUrl :: ByteString - , riHdr :: [H.Header] - , riBod :: ByteString - } - - --- Live Requests Table -- All Requests Still Waiting for Responses ------------- - -emptyLiveReqs :: IO LiveReqs -emptyLiveReqs = io $ do - gen <- newStdGen - pure (LiveReqs (randoms gen) mempty) - -routeRespAct :: Ship -> TVar LiveReqs -> Word64 -> RespAct -> STM Bool -routeRespAct who vLiv reqId act = - (lookup reqId . activeReqs <$> readTVar vLiv) >>= \case - Nothing -> pure False - Just (own, tv) -> do - if (who == own) - then raAct tv act - else pure False - -rmLiveReq :: TVar LiveReqs -> Word64 -> STM () -rmLiveReq var reqId = modifyTVar' var - $ \liv -> liv { activeReqs = deleteMap reqId (activeReqs liv) } - -allocateReqId :: TVar LiveReqs -> STM Word64 -allocateReqId var = do - LiveReqs supply tbl <- readTVar var - - let loop :: [Word64] -> (Word64, [Word64]) - loop [] = error "impossible" - loop (x:xs) | member x tbl = loop xs - loop (x:xs) | otherwise = (x, xs) - - let (fresh, supply') = loop supply - writeTVar var (LiveReqs supply' tbl) - pure fresh - -newLiveReq :: Ship -> TVar LiveReqs -> STM (Word64, STM RespAct) -newLiveReq who var = do - tmv <- newTQueue - kil <- newEmptyTMVar - nex <- allocateReqId var - - LiveReqs sup tbl <- readTVar var - - let waitAct = (<|>) (readTMVar kil $> RADone) (readTQueue tmv) - respApi = RespApi - { raKil = putTMVar kil () - , raAct = \act -> tryReadTMVar kil >>= \case - Nothing -> writeTQueue tmv act $> True - Just () -> pure False - } - - - writeTVar var (LiveReqs sup (insertMap nex (who, respApi) tbl)) - - pure (nex, waitAct) - - --- Random Helpers -------------------------------------------------------------- - -cookMeth :: W.Request -> Maybe Method -cookMeth = H.parseMethod . W.requestMethod >>> \case - Left _ -> Nothing - Right m -> Just m - -reqAddr :: W.Request -> Address -reqAddr = W.remoteHost >>> \case - SockAddrInet _ a -> AIpv4 (Ipv4 a) - SockAddrInet6 _ _ a _ -> AIpv6 (mkIpv6 a) - _ -> error "invalid sock addr" - -mkIpv6 :: (Word32, Word32, Word32, Word32) -> Ipv6 -mkIpv6 (p, q, r, s) = Ipv6 (pBits .|. qBits .|. rBits .|. sBits) - where - pBits = shiftL (fromIntegral p) 0 - qBits = shiftL (fromIntegral q) 32 - rBits = shiftL (fromIntegral r) 64 - sBits = shiftL (fromIntegral s) 96 - -reqUrl :: W.Request -> ByteString -reqUrl r = W.rawPathInfo r <> W.rawQueryString r - - --- Responses ------------------------------------------------------------------- - -noHeader :: HasLogFunc e => RIO e a -noHeader = do - logError "Response block with no response header." - error "Bad HttpEvent: Response block with no response header." - -dupHead :: HasLogFunc e => RIO e a -dupHead = do - logError "Multiple %head actions on one request" - error "Bad HttpEvent: Multiple header actions per on one request." - -{-| - - Immediately yield all of the initial chunks - - Yield the data from %bloc action. - - Close the stream when we hit a %done action. --} -streamBlocks - :: HasLogFunc e - => e - -> ByteString - -> STM RespAct - -> ConduitT () (Flush Builder) IO () -streamBlocks env init getAct = send init >> loop - where - loop = atomically getAct >>= \case - RAHead _ _ _ -> runRIO env dupHead - RAFull _ _ _ -> runRIO env dupHead - RADone -> pure () - RABloc c -> send c >> loop - - send "" = pure () - send c = do - runRIO env (logDebug (display ("sending chunk " <> tshow c))) - yield $ Chunk $ fromByteString c - yield Flush - -sendResponse - :: HasLogFunc e - => (W.Response -> IO W.ResponseReceived) - -> STM RespAct - -> RIO e W.ResponseReceived -sendResponse cb waitAct = do - env <- ask - atomically waitAct >>= \case - RADone -> io $ cb $ W.responseLBS (H.mkStatus 444 "No Response") [] "" - RAFull s h b -> io $ cb $ W.responseLBS s h $ fromStrict b - RAHead s h b -> io $ cb $ W.responseSource s h $ streamBlocks env b waitAct - RABloc _ -> noHeader - -liveReq :: Ship -> TVar LiveReqs -> RAcquire e (Word64, STM RespAct) -liveReq who vLiv = mkRAcquire ins del - where - ins = atomically (newLiveReq who vLiv) - del = atomically . rmLiveReq vLiv . fst - -app - :: HasLogFunc e - => e - -> Ship - -> TVar LiveReqs - -> (Word64 -> ReqInfo -> STM ()) - -> (Word64 -> STM ()) - -> KingSubsite - -> W.Application -app env who liv inform cancel sub req respond = - case W.pathInfo req of - ("~_~":_) -> runKingSubsite sub req respond - _ -> - runRIO env $ rwith (liveReq who liv) $ \(reqId, respApi) -> do - bod <- io (toStrict <$> W.strictRequestBody req) - met <- maybe (error "bad method") pure (cookMeth req) - - let adr = reqAddr req - hdr = W.requestHeaders req - url = reqUrl req - - atomically $ inform reqId $ ReqInfo adr met url hdr bod - - try (sendResponse respond respApi) >>= \case - Right rr -> pure rr - Left exn -> do - atomically (cancel reqId) - logError $ display ("Exception during request" <> tshow exn) - throwIO (exn :: SomeException) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Http.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Http.hs deleted file mode 100644 index 54b926cdc..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Http.hs +++ /dev/null @@ -1,24 +0,0 @@ -{-| - HTTP Driver --} - -module Urbit.Vere.Http where - -import Urbit.Prelude -import Urbit.Arvo - -import qualified Data.CaseInsensitive as CI -import qualified Network.HTTP.Types as HT - --------------------------------------------------------------------------------- - -convertHeaders :: [HT.Header] -> [Header] -convertHeaders = fmap f - where - f (k, v) = Header (Cord $ decodeUtf8 $ CI.foldedCase k) - (MkBytes v) - -unconvertHeaders :: [Header] -> [HT.Header] -unconvertHeaders = fmap f - where - f (Header (Cord k) (MkBytes v)) = (CI.mk (encodeUtf8 k), v) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Http/Client.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Http/Client.hs deleted file mode 100644 index 88cddb505..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Http/Client.hs +++ /dev/null @@ -1,218 +0,0 @@ -{-| - Http Client Driver - - TODO When making a request, handle the case where the request id is - already in use. --} - -module Urbit.Vere.Http.Client where - -import Urbit.Prelude hiding (Builder, finally) - -import Urbit.Vere.Http -import Urbit.Vere.Pier.Types -import Urbit.King.App - -import Urbit.Arvo (BlipEv(..), Ev(..), HttpClientEf(..), HttpClientEv(..), - HttpClientReq(..), HttpEvent(..), KingId, ResponseHeader(..)) - -import RIO.Orphans () -import Control.Monad.Catch (finally) - -import qualified Data.Map.Strict as M -import qualified Network.HTTP.Client as H -import qualified Network.HTTP.Client.TLS as TLS -import qualified Network.HTTP.Types as HT - - --- Types ----------------------------------------------------------------------- - -type ReqId = Word - -data HttpClientDrv = HttpClientDrv - { hcdManager :: H.Manager - , hcdLive :: TVar (Map ReqId (Async ())) - } - --------------------------------------------------------------------------------- - -cvtReq :: HttpClientReq -> Maybe H.Request -cvtReq r = - H.parseRequest (unpack (unCord $ url r)) <&> \init -> init - { H.method = encodeUtf8 $ tshow (method r) - , H.requestHeaders = unconvertHeaders (headerList r) - , H.requestBody = - H.RequestBodyBS $ case body r of - Nothing -> "" - Just (Octs bs) -> bs - } - -cvtRespHeaders :: H.Response a -> ResponseHeader -cvtRespHeaders resp = - ResponseHeader (fromIntegral $ HT.statusCode (H.responseStatus resp)) heads - where - heads = convertHeaders (H.responseHeaders resp) - -bornEv :: KingId -> Ev -bornEv king = - EvBlip $ BlipEvHttpClient $ HttpClientEvBorn (king, ()) () - --------------------------------------------------------------------------------- - -_bornFailed :: e -> WorkError -> IO () -_bornFailed env _ = runRIO env $ do - pure () -- TODO What to do in this case? - -client' - :: HasPierEnv e - => RIO e ([Ev], RAcquire e (DriverApi HttpClientEf)) -client' = do - ventQ :: TQueue EvErr <- newTQueueIO - env <- ask - - let (bornEvs, startDriver) = client env (writeTQueue ventQ) - - let runDriver = do - diOnEffect <- startDriver - let diEventSource = fmap RRWork <$> tryReadTQueue ventQ - pure (DriverApi {..}) - - pure (bornEvs, runDriver) - - -{-| - Iris -- HTTP Client Driver - - Until born events succeeds, ignore effects. - Wait until born event callbacks invoked. - If success, signal success. - If failure, try again several times. - If still failure, bring down ship. - Once born event succeeds, hold on to effects. - Once all other drivers have booted: - - Execute stashed effects. - - Begin normal operation (start accepting requests) --} -client - :: forall e - . (HasLogFunc e, HasKingId e) - => e - -> (EvErr -> STM ()) - -> ([Ev], RAcquire e (HttpClientEf -> IO ())) -client env plan = (initialEvents, runHttpClient) - where - kingId = view (kingIdL . to fromIntegral) env - - initialEvents :: [Ev] - initialEvents = [bornEv kingId] - - runHttpClient :: RAcquire e (HttpClientEf -> IO ()) - runHttpClient = handleEffect <$> mkRAcquire start stop - - start :: RIO e (HttpClientDrv) - start = HttpClientDrv <$> - (io $ H.newManager TLS.tlsManagerSettings) <*> - newTVarIO M.empty - - stop :: HttpClientDrv -> RIO e () - stop HttpClientDrv{..} = do - -- Cancel all the outstanding asyncs, ignoring any exceptions. - liveThreads <- atomically $ readTVar hcdLive - mapM_ cancel liveThreads - - handleEffect :: HttpClientDrv -> HttpClientEf -> IO () - handleEffect drv = \case - HCERequest _ id req -> runRIO env (newReq drv id req) - HCECancelRequest _ id -> runRIO env (cancelReq drv id) - - newReq :: HttpClientDrv -> ReqId -> HttpClientReq -> RIO e () - newReq drv id req = do - async <- runReq drv id req - -- If the async has somehow already completed, don't put it in the map, - -- because then it might never get out. - atomically $ pollSTM async >>= \case - Nothing -> modifyTVar' (hcdLive drv) (insertMap id async) - Just _ -> pure () - - -- The problem with the original http client code was that it was written - -- to the idea of what the events "should have" been instead of what they - -- actually were. This means that this driver doesn't run like the vere - -- http client driver. The vere driver was written assuming that parts of - -- events could be compressed together: a Start might contain the only - -- chunk of data and immediately complete, where here the Start event, the - -- Continue (with File) event, and the Continue (completed) event are three - -- separate things. - runReq :: HttpClientDrv -> ReqId -> HttpClientReq -> RIO e (Async ()) - runReq HttpClientDrv{..} id req = async $ flip finally aftr $ - case cvtReq req of - Nothing -> do - logInfo $ displayShow ("(malformed http client request)", id, req) - planEvent id (Cancel ()) - Just r -> do - logDebug $ displayShow ("(http client request)", id, req) - withRunInIO $ \run -> - H.withResponse r hcdManager $ \x -> run (exec x) - where - -- Make sure to remove our entry from hcdLive after we're done so the - -- map doesn't grow without bound. - aftr :: RIO e () - aftr = atomically $ modifyTVar' hcdLive (deleteMap id) - - recv :: H.BodyReader -> RIO e (Maybe ByteString) - recv read = io $ read <&> \case chunk | null chunk -> Nothing - | otherwise -> Just chunk - - exec :: H.Response H.BodyReader -> RIO e () - exec resp = do - let headers = cvtRespHeaders resp - getChunk = recv (H.responseBody resp) - loop = getChunk >>= \case - Nothing -> planEvent id (Continue Nothing True) - Just bs -> do - planEvent id $ - Continue (Just $ File $ Octs bs) False - loop - planEvent id (Start headers Nothing False) - loop - - planEvent :: ReqId -> HttpEvent -> RIO e () - planEvent id ev = do - logDebug $ displayShow ("(http client response)", id, (describe ev)) - - let recvEv = EvBlip - $ BlipEvHttpClient - $ HttpClientEvReceive (kingId, ()) (fromIntegral id) ev - - let recvFailed _ = pure () - - atomically $ plan (EvErr recvEv recvFailed) - - -- show an HttpEvent with byte count instead of raw data - describe :: HttpEvent -> String - describe (Start header Nothing final) = - "(Start " ++ (show header) ++ " ~ " ++ (show final) - describe (Start header (Just (File (Octs bs))) final) = - "(Start " ++ (show header) ++ " (" ++ (show $ length bs) ++ " bytes) " ++ - (show final) - describe (Continue Nothing final) = - "(Continue ~ " ++ (show final) - describe (Continue (Just (File (Octs bs))) final) = - "(Continue (" ++ (show $ length bs) ++ " bytes) " ++ (show final) - describe (Cancel ()) = "(Cancel ())" - - waitCancel :: Async a -> RIO e (Either SomeException a) - waitCancel async = cancel async >> waitCatch async - - cancelThread :: ReqId -> Async a -> RIO e () - cancelThread id = - waitCancel >=> \case Left _ -> planEvent id $ Cancel () - Right _ -> pure () - - cancelReq :: HttpClientDrv -> ReqId -> RIO e () - cancelReq drv id = - join $ atomically $ do - tbl <- readTVar (hcdLive drv) - case lookup id tbl of - Nothing -> pure (pure ()) - Just async -> do writeTVar (hcdLive drv) (deleteMap id tbl) - pure (cancelThread id async) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/LockFile.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/LockFile.hs deleted file mode 100644 index c1aef5d45..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/LockFile.hs +++ /dev/null @@ -1,47 +0,0 @@ -{-| - Acquire and release the vere lockfile. --} - -module Urbit.Vere.LockFile (lockFile) where - -import Urbit.Prelude - -import Urbit.King.App.Class - -import Data.Default (def) -import RIO.Directory (createDirectoryIfMissing) -import System.IO.LockFile.Internal (LockingParameters(..), RetryStrategy(..), - LockingException(..), lock, unlock) - --------------------------------------------------------------------------------- - -lockFile :: (HasLogFunc e, HasStderrLogFunc e) => FilePath -> RAcquire e () -lockFile pax = void $ mkRAcquire start stop - where - fil = pax <> "/.vere.lock" - - stop handle = do - logInfo $ display @Text $ ("Releasing lock file: " <> pack fil) - io $ unlock fil handle - - params = def { retryToAcquireLock = No } - - start = do - createDirectoryIfMissing True pax - logInfo $ display @Text $ ("Taking lock file: " <> pack fil) - handle failure $ io (lock params fil) - - failure (e :: LockingException) = do - logStderr $ logError $ display @Text $ - "Cannot acquire lock file " <> pack fil <> "." - logStderr $ logError $ - "Please make sure there are no other instances of this ship running, " - <> "then try again." - logStderr $ logError $ - "If you are sure, you can delete the file and try again." - throwIO e - -logStderr :: HasStderrLogFunc e => RIO LogFunc a -> RIO e a -logStderr action = do - logFunc <- view stderrLogFuncL - runRIO logFunc action diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/NounServ.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/NounServ.hs deleted file mode 100644 index 4f60929ac..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/NounServ.hs +++ /dev/null @@ -1,186 +0,0 @@ -{-| - Use websockets to pass nouns between a client and server. --} - -module Urbit.Vere.NounServ - ( Conn(..) - , Server(..) - , Client(..) - , wsServer - , wsClient - , testIt - , wsServApp - , mkConn - , wsConn - ) where - -import Urbit.Prelude - -import qualified Network.Wai.Handler.Warp as W -import qualified Network.WebSockets as WS - --------------------------------------------------------------------------------- - -data Conn i o = Conn - { cRecv :: STM (Maybe i) - , cSend :: o -> STM () - } - -mkConn :: TBMChan i -> TBMChan o -> Conn i o -mkConn inp out = Conn (readTBMChan inp) (writeTBMChan out) - --------------------------------------------------------------------------------- - -data Client i o = Client - { cConn :: Conn i o - , cAsync :: Async () - } - -data Server i o a = Server - { sAccept :: STM (Maybe (Conn i o)) - , sAsync :: Async () - , sData :: a - } - --------------------------------------------------------------------------------- - -withRIOThread :: RIO e a -> RIO e (Async a) -withRIOThread act = do - env <- ask - io $ async $ runRIO env $ act - -wsConn :: (FromNoun i, ToNoun o, Show i, Show o, HasLogFunc e) - => Utf8Builder - -> TBMChan i -> TBMChan o - -> WS.Connection - -> RIO e () -wsConn pre inp out wsc = do - logDebug (pre <> "(wcConn) Connected!") - - writer <- withRIOThread $ forever $ do - logDebug (pre <> "(wsConn) Waiting for data.") - byt <- io $ toStrict <$> WS.receiveData wsc - logDebug (pre <> "Got data") - dat <- cueBSExn byt >>= fromNounExn - logDebug (pre <> "(wsConn) Decoded data, writing to chan") - atomically $ writeTBMChan inp dat - - reader <- withRIOThread $ forever $ do - logDebug (pre <> "Waiting for data from chan") - atomically (readTBMChan out) >>= \case - Nothing -> do - logDebug (pre <> "(wsConn) Connection closed") - error "dead-conn" - Just msg -> do - logDebug (pre <> "(wsConn) Got message! " <> displayShow msg) - io $ WS.sendBinaryData wsc $ fromStrict $ jamBS $ toNoun msg - - let cleanup = do - atomically (closeTBMChan inp >> closeTBMChan out) - cancel writer - cancel reader - - flip finally cleanup $ do - res <- atomically (waitCatchSTM writer <|> waitCatchSTM reader) - logInfo $ displayShow (res :: Either SomeException ()) - - --------------------------------------------------------------------------------- - -wsClient :: forall i o e. (ToNoun o, FromNoun i, Show o, Show i, HasLogFunc e) - => Text -> W.Port -> RIO e (Client i o) -wsClient pax por = do - env <- ask - inp <- io $ newTBMChanIO 5 - out <- io $ newTBMChanIO 5 - con <- pure (mkConn inp out) - - logInfo "NOUNSERV (wsClie) Trying to connect" - - tid <- io $ async - $ WS.runClient "127.0.0.1" por (unpack pax) - $ \con -> WS.withPingThread con 15 (pure ()) $ - runRIO env (wsConn "NOUNSERV (wsClie) " inp out con) - - pure $ Client con tid - --------------------------------------------------------------------------------- - -wsServApp :: (HasLogFunc e, ToNoun o, FromNoun i, Show i, Show o) - => (Conn i o -> STM ()) - -> WS.PendingConnection - -> RIO e () -wsServApp cb pen = do - logInfo "NOUNSERV (wsServer) Got connection!" - wsc <- io $ WS.acceptRequest pen - inp <- io $ newTBMChanIO 5 - out <- io $ newTBMChanIO 5 - atomically $ cb (mkConn inp out) - wsConn "NOUNSERV (wsServ) " inp out wsc - -wsServer :: forall i o e. (ToNoun o, FromNoun i, Show i, Show o, HasLogFunc e) - => RIO e (Server i o W.Port) -wsServer = do - con <- io $ newTBMChanIO 5 - - tid <- async $ do - env <- ask - logInfo "NOUNSERV (wsServer) Starting server" - io $ WS.runServer "127.0.0.1" 9999 - $ runRIO env . wsServApp (writeTBMChan con) - logInfo "NOUNSERV (wsServer) Server died" - atomically $ closeTBMChan con - - pure $ Server (readTBMChan con) tid 9999 - - --- Hacky Integration Test ------------------------------------------------------ - -fromJust :: MonadIO m => Text -> Maybe a -> m a -fromJust err Nothing = error (unpack err) -fromJust _ (Just x) = pure x - -type Example = Maybe (Word, (), Word) - -example :: Example -example = Just (99, (), 44) - -testIt :: HasLogFunc e => RIO e () -testIt = do - logDebug "(testIt) Starting Server" - Server{..} <- wsServer @Example @Example - logDebug "(testIt) Connecting" - Client{..} <- wsClient @Example @Example "/" sData - - logDebug "(testIt) Accepting connection" - sConn <- fromJust "accept" =<< atomically sAccept - - let - clientSend = do - logDebug "(testIt) Sending from client" - atomically (cSend cConn example) - logDebug "(testIt) Waiting for response" - res <- atomically (cRecv sConn) - print ("clientSend", res, example) - unless (res == Just example) $ do - error "Bad data" - logDebug "(testIt) Success" - - serverSend = do - logDebug "(testIt) Sending from server" - atomically (cSend sConn example) - logDebug "(testIt) Waiting for response" - res <- atomically (cRecv cConn) - print ("serverSend", res, example) - unless (res == Just example) $ do - error "Bad data" - logDebug "(testIt) Success" - - clientSend - clientSend - clientSend - serverSend - serverSend - - cancel sAsync - cancel cAsync diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Pier.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Pier.hs deleted file mode 100644 index 590267570..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Pier.hs +++ /dev/null @@ -1,702 +0,0 @@ -{-| - Top-Level Pier Management - - This is the code that starts the IO drivers and deals with communication - between the serf, the event log, and the IO drivers. --} -module Urbit.Vere.Pier - ( booted - , runSerf - , resumed - , getSnapshot - , pier - , runPersist - , runCompute - , genBootSeq - ) -where - -import Urbit.Prelude - -import Control.Monad.Trans.Maybe -import RIO.Directory -import Urbit.Arvo -import Urbit.King.App -import Urbit.Vere.Pier.Types -import Urbit.Vere.Stat - -import Control.Monad.STM (retry) -import System.Environment (getExecutablePath) -import System.FilePath (splitFileName) -import System.Posix.Files (ownerModes, setFileMode) -import Urbit.EventLog.LMDB (EventLog) -import Urbit.EventLog.Event (buildLogEvent) -import Urbit.King.API (TermConn) -import Urbit.TermSize (TermSize(..), termSize) -import Urbit.Vere.Serf (Serf) - -import qualified Data.Text as T -import qualified Data.List as L -import qualified System.Entropy as Ent -import qualified Urbit.EventLog.LMDB as Log -import qualified Urbit.King.API as King -import qualified Urbit.Noun.Time as Time -import qualified Urbit.Vere.Ames as Ames -import qualified Urbit.Vere.Behn as Behn -import qualified Urbit.Vere.Clay as Clay -import qualified Urbit.Vere.Eyre as Eyre -import qualified Urbit.Vere.Eyre.KingSubsite as Site -import qualified Urbit.Vere.Http.Client as Iris -import qualified Urbit.Vere.Serf as Serf -import qualified Urbit.Vere.Term as Term -import qualified Urbit.Vere.Term.API as Term -import qualified Urbit.Vere.Term.Demux as Term - - --- Initialize pier directory. -------------------------------------------------- - -data PierDirectoryAlreadyExists = PierDirectoryAlreadyExists - deriving (Show, Exception) - -setupPierDirectory :: FilePath -> RIO e () -setupPierDirectory shipPath = do - -- shipPath will already exist because we put a lock file there. - alreadyExists <- doesPathExist (shipPath ".urb") - when alreadyExists $ do - throwIO PierDirectoryAlreadyExists - for_ ["put", "get", "log", "chk"] $ \seg -> do - let pax = shipPath ".urb" seg - createDirectoryIfMissing True pax - io $ setFileMode pax ownerModes - - --- Load pill into boot sequence. ----------------------------------------------- - -data CannotBootFromIvoryPill = CannotBootFromIvoryPill - deriving (Show, Exception) - -genEntropy :: MonadIO m => m Entropy -genEntropy = Entropy . fromIntegral . bytesAtom <$> io (Ent.getEntropy 64) - -genBootSeq :: HasKingEnv e - => Ship -> Pill -> Bool -> LegacyBootEvent -> Feed -> RIO e BootSeq -genBootSeq _ PillIvory {} _ _ _ = throwIO CannotBootFromIvoryPill -genBootSeq ship PillPill {..} lite boot feed = do - ent <- io genEntropy - wyr <- wyrd - let ova = preKern ent - <> [wyr] - <> pKernelOva - <> postKern - <> extraKeys - <> pUserspaceOva - pure $ BootSeq ident pBootFormulae ova - where - ident = LogIdentity ship isFake (fromIntegral $ length pBootFormulae) - preKern ent = - [ EvBlip $ BlipEvArvo $ ArvoEvWhom () ship - , EvBlip $ BlipEvArvo $ ArvoEvWack () ent - ] - postKern = [EvBlip $ BlipEvTerm $ TermEvBoot (1, ()) lite boot] - isFake = case boot of - Fake _ -> True - _ -> False - extraKeys = case feed of - Feed0 _ -> [] - Feed1 Germs{..} -> fmap rekey gFeed - rekey Germ{..} = EvBlip $ BlipEvJael $ JaelEvRekey () (gLife, gRing) - - --- Write to the log. ----------------------------------------------------------- - --- | Write a batch of jobs to the event log. -writeJobs :: EventLog -> Vector Job -> RIO e () -writeJobs log !jobs = do - expect <- atomically (Log.nextEv log) - events <- fmap fromList $ traverse fromJob (zip [expect ..] $ toList jobs) - Log.appendEvents log events - where - fromJob :: (EventId, Job) -> RIO e ByteString - fromJob (expectedId, job) = do - unless (expectedId == jobId job) $ error $ show - ("bad job id!", expectedId, jobId job) - pure $ buildLogEvent (jobMug job) (jobPayload job) - - jobMug :: Job -> Mug - jobMug (RunNok (LifeCyc _ m _)) = m - jobMug (DoWork (Work _ m _ _)) = m - - jobPayload :: Job -> Noun - jobPayload (RunNok (LifeCyc _ _ n)) = toNoun n - jobPayload (DoWork (Work _ _ d o)) = toNoun (d, o) - - --- Acquire a running serf. ----------------------------------------------------- - -runSerf - :: HasPierEnv e - => TVar ((Atom, Tank) -> IO ()) - -> FilePath - -> RAcquire e Serf -runSerf vSlog pax = do - env <- ask - serfProg <- io getSerfProg - Serf.withSerf (config env serfProg) - where - slog s = atomically (readTVar vSlog) >>= (\f -> f s) - config env serfProg = Serf.Config - { scSerf = env ^. pierConfigL . pcSerfExe . to (maybe serfProg unpack) - , scPier = pax - , scFlag = env ^. pierConfigL . pcSerfFlags - , scSlog = slog - , scStdr = \txt -> slog (0, (textToTank txt)) - , scDead = pure () -- TODO: What can be done? - } - getSerfProg :: IO FilePath - getSerfProg = do - (path, filename) <- splitFileName <$> getExecutablePath - pure $ case filename of - "urbit" -> path "urbit-worker" - "urbit-king" -> path "urbit-worker" - _ -> "urbit-worker" - - --- Boot a new ship. ------------------------------------------------------------ - -booted - :: TVar ((Atom, Tank) -> IO ()) - -> Pill - -> Bool - -> Ship - -> LegacyBootEvent - -> Feed - -> RAcquire PierEnv (Serf, EventLog) -booted vSlog pill lite ship boot feed = do - rio $ bootNewShip pill lite ship boot feed - resumed vSlog Nothing - -bootSeqJobs :: Time.Wen -> BootSeq -> [Job] -bootSeqJobs now (BootSeq ident nocks ovums) = zipWith ($) bootSeqFns [1 ..] - where - wen :: EventId -> Time.Wen - wen off = Time.addGap now ((fromIntegral off - 1) ^. from Time.microSecs) - - bootSeqFns :: [EventId -> Job] - bootSeqFns = fmap nockJob nocks <> fmap ovumJob ovums - where - nockJob nok eId = RunNok $ LifeCyc eId 0 nok - ovumJob ov eId = DoWork $ Work eId 0 (wen eId) ov - -bootNewShip - :: HasPierEnv e - => Pill - -> Bool - -> Ship - -> LegacyBootEvent - -> Feed - -> RIO e () -bootNewShip pill lite ship bootEv feed = do - seq@(BootSeq ident x y) <- genBootSeq ship pill lite bootEv feed - logInfo "BootSeq Computed" - - pierPath <- view pierPathL - - rio (setupPierDirectory pierPath) - logInfo "Directory setup." - - let logPath = (pierPath ".urb/log") - - rwith (Log.new logPath ident) $ \log -> do - logInfo "Event log initialized." - jobs <- (\now -> bootSeqJobs now seq) <$> io Time.now - writeJobs log (fromList jobs) - - logInfo "Finsihed populating event log with boot sequence" - - --- Resume an existing ship. ---------------------------------------------------- - -resumed - :: TVar ((Atom, Tank) -> IO ()) - -> Maybe Word64 - -> RAcquire PierEnv (Serf, EventLog) -resumed vSlog replayUntil = do - rio $ logTrace "Resuming ship" - top <- view pierPathL - tap <- fmap (fromMaybe top) $ rio $ runMaybeT $ do - ev <- MaybeT (pure replayUntil) - MaybeT (getSnapshot top ev) - - rio $ do - logTrace $ display @Text ("pier: " <> pack top) - logTrace $ display @Text ("running serf in: " <> pack tap) - - log <- Log.existing (top ".urb/log") - serf <- runSerf vSlog tap - - rio $ do - logInfo "Replaying events" - Serf.execReplay serf log replayUntil >>= \case - Left err -> error (show err) - Right 0 -> do - logInfo "No work during replay so no snapshot" - pure () - Right _ -> do - logInfo "Taking snapshot" - io (Serf.snapshot serf) - logInfo "SNAPSHOT TAKEN" - - pure (serf, log) - --- | Get a fake pier directory for partial snapshots. -getSnapshot :: forall e . FilePath -> Word64 -> RIO e (Maybe FilePath) -getSnapshot top last = do - lastSnapshot <- lastMay <$> listReplays - pure (replayToPath <$> lastSnapshot) - where - replayDir = top ".partial-replay" - replayToPath eId = replayDir show eId - - listReplays :: RIO e [Word64] - listReplays = do - createDirectoryIfMissing True replayDir - snapshotNums <- mapMaybe readMay <$> listDirectory replayDir - pure $ sort (filter (<= fromIntegral last) snapshotNums) - - --- Run Pier -------------------------------------------------------------------- - -pier - :: (Serf, EventLog) - -> TVar ((Atom, Tank) -> IO ()) - -> MVar () - -> [Ev] - -> RAcquire PierEnv () -pier (serf, log) vSlog startedSig injected = do - let logId = Log.identity log :: LogIdentity - let ship = who logId :: Ship - - -- TODO Instead of using a TMVar, pull directly from the IO driver - -- event sources. - computeQ :: TMVar RunReq <- newEmptyTMVarIO - persistQ :: TBQueue (Fact, FX) <- newTBQueueIO 10 -- TODO tuning? - executeQ :: TBQueue FX <- newTBQueueIO 10 - saveSig :: TMVar () <- newEmptyTMVarIO - kingApi :: King.King <- King.kingAPI - - termApiQ :: TQueue TermConn <- atomically $ do - q <- newTQueue - writeTVar (King.kTermConn kingApi) (Just $ writeTQueue q) - pure q - - initialTermSize <- io $ termSize - - (demux :: Term.Demux, muxed :: Term.Client) <- atomically $ do - res <- Term.mkDemux initialTermSize - pure (res, Term.useDemux res) - - void $ acquireWorker "TERMSERV Listener" $ forever $ do - logInfo "TERMSERV Waiting for external terminal." - atomically $ do - ext <- Term.connClient <$> readTQueue termApiQ - Term.addDemux ext demux - logInfo "TERMSERV External terminal connected." - - scryQ <- newTQueueIO - onKill <- view onKillPierSigL - - -- Our call above to set the logging function which echos errors from the - -- Serf doesn't have the appended \r\n because those \r\n s are added in - -- the c serf code. Logging output from our haskell process must manually - -- add them. - let compute = putTMVar computeQ - let execute = writeTBQueue executeQ - let persist = writeTBQueue persistQ - let sigint = Serf.sendSIGINT serf - let scry = \g r -> do - res <- newEmptyMVar - atomically $ writeTQueue scryQ (g, r, putMVar res) - takeMVar res - - -- Set up the runtime stat counters. - stat <- newStat - - -- Set up the runtime subsite server and its capability to slog - -- and display stats. - siteSlog <- newTVarIO (const $ pure ()) - runtimeSubsite <- Site.kingSubsite ship scry (renderStat stat) siteSlog - - -- Slogs go to stderr, to the runtime subsite, and to the terminal. - env <- ask - atomically $ writeTVar vSlog $ \s@(_, tank) -> runRIO env $ do - atomically $ Term.slog muxed s - io $ readTVarIO siteSlog >>= ($ s) - logOther "serf" (display $ T.strip $ tankToText tank) - - let err = atomically . Term.trace muxed . (<> "\r\n") - (bootEvents, startDrivers) <- do - env <- ask - siz <- atomically $ Term.curDemuxSize demux - let fak = isFake logId - drivers env ship fak compute scry (siz, muxed) err sigint stat runtimeSubsite - - let computeConfig = ComputeConfig { ccOnWork = takeTMVar computeQ - , ccOnKill = onKill - , ccOnSave = takeTMVar saveSig - , ccOnScry = readTQueue scryQ - , ccPutResult = persist - , ccShowSpinner = Term.spin muxed - , ccHideSpinner = Term.stopSpin muxed - , ccLastEvInLog = Log.lastEv log - } - - tSerf <- acquireWorker "Serf" (runCompute serf computeConfig) - - doVersionNegotiation compute err - - -- Run all born events and retry them until they succeed. - wackEv <- EvBlip . BlipEvArvo . ArvoEvWack () <$> genEntropy - rio $ for_ (wackEv : bootEvents) $ \ev -> do - okaySig <- newEmptyMVar - - let inject n = atomically $ compute $ RRWork $ EvErr ev $ cb n - - -- TODO Make sure this dies cleanly. - cb :: Int -> WorkError -> IO () - cb n | n >= 3 = error ("boot event failed: " <> show ev) - cb n = \case - RunOkay _ _ -> putMVar okaySig () - RunSwap _ _ _ _ _ -> putMVar okaySig () - RunBail _ -> inject (n + 1) - - -- logTrace ("[BOOT EVENT]: " <> display (summarizeEvent ev)) - io (inject 0) - - let slog :: Text -> IO () - slog txt = do - fn <- atomically (readTVar vSlog) - fn (0, textToTank txt) - - drivz <- startDrivers - tExec <- acquireWorker "Effects" (router slog (readTBQueue executeQ) drivz) - tDisk <- acquireWorkerBound "Persist" (runPersist log persistQ execute) - - -- Now that the Serf is configured, the IO drivers are hooked up, their - -- starting events have been dispatched, and the terminal is live, we can now - -- handle injecting events requested from the command line. - for_ (zip [1..] injected) $ \(num, ev) -> rio $ do - logTrace $ display @Text ("Injecting event " ++ (tshow num) ++ " of " ++ - (tshow $ length injected) ++ "...") - okaySig :: MVar (Either [Goof] ()) <- newEmptyMVar - - let inject = atomically $ compute $ RRWork $ EvErr ev $ cb - cb :: WorkError -> IO () - cb = \case - RunOkay _ _ -> putMVar okaySig (Right ()) - RunSwap _ _ _ _ _ -> putMVar okaySig (Right ()) - RunBail goofs -> putMVar okaySig (Left goofs) - - io inject - - takeMVar okaySig >>= \case - Left goof -> logError $ display @Text ("Goof in injected event: " <> - tshow goof) - Right () -> pure () - - - let snapshotEverySecs = 120 - - void $ acquireWorker "Save" $ forever $ do - threadDelay (snapshotEverySecs * 1_000_000) - void $ atomically $ tryPutTMVar saveSig () - - putMVar startedSig () - - -- Wait for something to die. - - let ded = asum - [ death "effects thread" tExec - , death "persist thread" tDisk - , death "compute thread" tSerf - ] - - atomically ded >>= \case - Left (tag, exn) -> logError $ displayShow (tag, "crashed", exn) - Right "compute thread" -> pure () - Right tag -> logError $ displayShow (tag, "exited unexpectly") - - atomically $ (Term.spin muxed) (Just "shutdown") - -death :: Text -> Async () -> STM (Either (Text, SomeException) Text) -death tag tid = do - waitCatchSTM tid <&> \case - Left exn -> Left (tag, exn) - Right () -> Right tag - --- %wyrd version negotiation --------------------------------------------------- - -data PierVersionNegotiationFailed = PierVersionNegotiationFailed - deriving (Show, Exception) - -zuseVersion :: Word -zuseVersion = 419 - -wyrd :: HasKingEnv e => RIO e Ev -wyrd = do - king <- tshow <$> view kingIdL - - let k = Wynn [("zuse", zuseVersion), - ("lull", 330), - ("arvo", 240), - ("hoon", 140), - ("nock", 4)] - sen = MkTerm king - v = Vere sen [Cord "king-haskell", Cord "1.0"] k - - pure $ EvBlip $ BlipEvArvo $ ArvoEvWyrd () v - -doVersionNegotiation - :: HasPierEnv e - => (RunReq -> STM ()) - -> (Text -> RIO e ()) - -> RAcquire e () -doVersionNegotiation compute stderr = do - ev <- rio wyrd - - okaySig :: MVar (Either [Goof] FX) <- newEmptyMVar - let inject = atomically $ compute $ RRWork $ EvErr ev $ cb - cb :: WorkError -> IO () - cb = \case - RunOkay _ fx -> putMVar okaySig (Right fx) - RunSwap _ _ _ _ fx -> putMVar okaySig (Right fx) - RunBail goofs -> putMVar okaySig (Left goofs) - - rio $ stderr "vere: checking version compatibility" - io inject - - takeMVar okaySig >>= \case - Left goof -> do - rio $ stderr "pier: version negotation failed" - logError $ display @Text ("Goof in wyrd event: " <> tshow goof) - throwIO PierVersionNegotiationFailed - - Right fx -> do - -- Walk through the returned fx looking for a wend effect. If we find - -- one, check the zuse versions. - rio $ for_ fx $ \case - GoodParse (EfWend (Wynn xs)) -> case L.lookup "zuse" xs of - Nothing -> pure () - Just zuseVerInWynn -> - if zuseVerInWynn /= zuseVersion - then do - rio $ stderr "pier: pier: version negotiation failed; downgrade" - throwIO PierVersionNegotiationFailed - else - pure () - _ -> pure () - - --- Start All Drivers ----------------------------------------------------------- - -data Drivers = Drivers - { dBehn :: BehnEf -> IO () - , dIris :: HttpClientEf -> IO () - , dEyre :: HttpServerEf -> IO () - , dNewt :: NewtEf -> IO () - , dSync :: SyncEf -> IO () - , dTerm :: TermEf -> IO () - } - -drivers - :: HasPierEnv e - => e - -> Ship - -> Bool - -> (RunReq -> STM ()) - -> ScryFunc - -> (TermSize, Term.Client) - -> (Text -> RIO e ()) - -> IO () - -> Stat - -> Site.KingSubsite - -> RAcquire e ([Ev], RAcquire e Drivers) -drivers env who isFake plan scry termSys stderr serfSIGINT stat sub = do - let Stat{..} = stat - - (behnBorn, runBehn) <- rio Behn.behn' - (termBorn, runTerm) <- rio (Term.term' termSys (renderStat stat) serfSIGINT) - (amesBorn, runAmes) <- rio (Ames.ames' who isFake statAmes scry stderr) - (httpBorn, runEyre) <- rio (Eyre.eyre' who isFake stderr sub) - (clayBorn, runClay) <- rio Clay.clay' - (irisBorn, runIris) <- rio Iris.client' - - putStrLn ("ship is " <> tshow who) - - let initialEvents = mconcat [behnBorn,clayBorn,amesBorn,httpBorn,irisBorn,termBorn] - - let runDrivers = do - behn <- runBehn - term <- runTerm - ames <- runAmes - iris <- runIris - eyre <- runEyre - clay <- runClay - - -- Sources lower in the list are starved until sources above them - -- have no events to offer. - acquireWorker "Event Prioritization" $ forever $ atomically $ do - let x = diEventSource - let eventSources = [x term, x clay, x behn, x iris, x eyre, x ames] - pullEvent eventSources >>= \case - Nothing -> retry - Just rr -> plan rr - - pure $ Drivers - { dTerm = diOnEffect term - , dBehn = diOnEffect behn - , dNewt = diOnEffect ames - , dIris = diOnEffect iris - , dEyre = diOnEffect eyre - , dSync = diOnEffect clay - } - - pure (initialEvents, runDrivers) - where - pullEvent :: [STM (Maybe a)] -> STM (Maybe a) - pullEvent [] = pure Nothing - pullEvent (d:ds) = d >>= \case - Just r -> pure (Just r) - Nothing -> pullEvent ds - - --- Route Effects to Drivers ---------------------------------------------------- - -router :: HasPierEnv e => (Text -> IO ()) -> STM FX -> Drivers -> RIO e () -router slog waitFx Drivers {..} = do - kill <- view killPierActionL - let exit = io (slog "<<>>\r\n") >> atomically kill - let vega = io (slog "<<>>\r\n") - forever $ do - fx <- atomically waitFx - for_ fx $ \ef -> do - logEffect ef - case ef of - GoodParse (EfVega _ _ ) -> vega - GoodParse (EfExit _ _ ) -> exit - GoodParse (EfWend _ ) -> pure () - GoodParse (EfVane (VEBehn ef)) -> io (dBehn ef) - GoodParse (EfVane (VEBoat ef)) -> io (dSync ef) - GoodParse (EfVane (VEClay ef)) -> io (dSync ef) - GoodParse (EfVane (VEHttpClient ef)) -> io (dIris ef) - GoodParse (EfVane (VEHttpServer ef)) -> io (dEyre ef) - GoodParse (EfVane (VENewt ef)) -> io (dNewt ef) - GoodParse (EfVane (VESync ef)) -> io (dSync ef) - GoodParse (EfVane (VETerm ef)) -> io (dTerm ef) - FailParse n -> logError $ display $ pack @Text (ppShow n) - - --- Compute (Serf) Thread ------------------------------------------------------- - -logEvent :: HasLogFunc e => Ev -> RIO e () -logEvent ev = do - --logInfo $ "<- " <> display (summarizeEvent ev) - logDebug $ "[EVENT]\n" <> display pretty - where - pretty :: Text - pretty = pack $ unlines $ fmap ("\t" <>) $ lines $ ppShow ev - -logEffect :: HasLogFunc e => Lenient Ef -> RIO e () -logEffect ef = do - --logInfo $ " -> " <> display (summarizeEffect ef) - logDebug $ display $ "[EFFECT]\n" <> pretty ef - where - pretty :: Lenient Ef -> Text - pretty = \case - GoodParse e -> pack $ unlines $ fmap ("\t" <>) $ lines $ ppShow e - FailParse n -> pack $ unlines $ fmap ("\t" <>) $ lines $ ppShow n - -data ComputeConfig = ComputeConfig - { ccOnWork :: STM RunReq - , ccOnKill :: STM () - , ccOnSave :: STM () - , ccOnScry :: STM (Gang, ScryReq, Maybe (Term, Noun) -> IO ()) - , ccPutResult :: (Fact, FX) -> STM () - , ccShowSpinner :: Maybe Text -> STM () - , ccHideSpinner :: STM () - , ccLastEvInLog :: STM EventId - } - -runCompute :: forall e . HasKingEnv e => Serf.Serf -> ComputeConfig -> RIO e () -runCompute serf ComputeConfig {..} = do - logDebug "runCompute" - - let onRR = asum [ ccOnKill <&> Serf.RRKill - , ccOnSave <&> Serf.RRSave - , ccOnWork - , ccOnScry <&> \(g,r,k) -> Serf.RRScry g r k - ] - - vEvProcessing :: TMVar Ev <- newEmptyTMVarIO - - void $ async $ forever (atomically (takeTMVar vEvProcessing) >>= logEvent) - - let onSpin :: Maybe Ev -> STM () - onSpin = \case - Nothing -> ccHideSpinner - Just ev -> do - ccShowSpinner (getSpinnerNameForEvent ev) - putTMVar vEvProcessing ev - - let maxBatchSize = 10 - - io (Serf.run serf maxBatchSize ccLastEvInLog onRR ccPutResult onSpin) - - --- Event-Log Persistence Thread ------------------------------------------------ - -data PersistExn = BadEventId EventId EventId - deriving Show - -instance Exception PersistExn where - displayException (BadEventId expected got) = - unlines [ "Out-of-order event id send to persist thread." - , "\tExpected " <> show expected <> " but got " <> show got - ] - -runPersist - :: forall e - . HasPierEnv e - => EventLog - -> TBQueue (Fact, FX) - -> (FX -> STM ()) - -> RIO e () -runPersist log inpQ out = do - dryRun <- view dryRunL - forever $ do - -- This is not a memory leak because eventually the TBQueue at out will - -- fill up, blocking the loop. - writs <- atomically getBatchFromQueue - events <- validateFactsAndGetBytes (fst <$> toNullable writs) - unless dryRun (Log.appendEvents log events) - atomically $ for_ writs $ \(_, fx) -> do - out fx - - where - validateFactsAndGetBytes :: [Fact] -> RIO e (Vector ByteString) - validateFactsAndGetBytes facts = do - expect <- atomically (Log.nextEv log) - lis <- for (zip [expect ..] facts) $ \(expectedId, Fact eve mug wen non) -> - do - unless (expectedId == eve) $ do - throwIO (BadEventId expectedId eve) - pure $ buildLogEvent mug $ toNoun (wen, non) - pure (fromList lis) - - -- Read as much out of the queue as possible (i.e. the entire contents), - -- blocking if empty. - getBatchFromQueue :: STM (NonNull [(Fact, FX)]) - getBatchFromQueue = readTBQueue inpQ >>= go . singleton - where - go acc = tryReadTBQueue inpQ >>= \case - Nothing -> pure (reverse acc) - Just item -> go (item <| acc) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Pier/Types.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Pier/Types.hs deleted file mode 100644 index 5f3fd11ea..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Pier/Types.hs +++ /dev/null @@ -1,119 +0,0 @@ -{-| - A bunch of common types. - - TODO Most of these could probably find better homes. --} -module Urbit.Vere.Pier.Types - ( module Urbit.Vere.Serf.Types - , LogIdentity(..) - , Pill(..) - , Job(..) - , LifeCyc(..) - , BootSeq(..) - , Work(..) - , jobId - , jobMug - , DriverApi(..) - , ScryFunc - ) -where - -import Urbit.Prelude - -import Urbit.Arvo -import Urbit.Noun.Time -import Urbit.Vere.Serf.Types - -import Urbit.EventLog.LMDB (LogIdentity(..)) - - --- Avoid touching Nock values. ------------------------------------------------- - -{-| - Nock values are raw nouns with tons of duplicated structure, so - printing or comparing them is insane. --} -newtype Nock = Nock Noun - deriving newtype (FromNoun, ToNoun) - -instance Eq Nock where - (==) (Nock x) (Nock y) = jamBS x == jamBS y - -instance Show Nock where - show _ = "Nock" - - --------------------------------------------------------------------------------- - -data Pill - = PillIvory [Noun] - | PillPill - { pName :: Noun - , pBootFormulae :: ![Nock] -- XX not actually nock, semantically - , pKernelOva :: ![Ev] - , pUserspaceOva :: ![Ev] - } - deriving (Eq, Show) - -data BootSeq = BootSeq !LogIdentity ![Nock] ![Ev] - deriving (Eq, Show) - -deriveNoun ''Pill - - --- Jobs ------------------------------------------------------------------------ - -data Work = Work EventId Mug Wen Ev - deriving (Eq, Show) - -data LifeCyc = LifeCyc EventId Mug Nock - deriving (Eq, Show) - -data Job - = DoWork Work - | RunNok LifeCyc - deriving (Eq, Show) - -jobId :: Job -> EventId -jobId (RunNok (LifeCyc eId _ _)) = eId -jobId (DoWork (Work eId _ _ _ )) = eId - -jobMug :: Job -> Mug -jobMug (RunNok (LifeCyc _ mug _)) = mug -jobMug (DoWork (Work _ mug _ _ )) = mug - - --- API To IO Drivers ----------------------------------------------------------- - -data DriverApi ef = DriverApi - { diEventSource :: STM (Maybe RunReq) - , diOnEffect :: ef -> IO () - } - - --- Scrying -------------------------------------------------------------------- - -type ScryFunc = Gang -> ScryReq -> IO (Maybe (Term, Noun)) - --- Instances ------------------------------------------------------------------- - -instance ToNoun Work where - toNoun (Work eid m d o) = toNoun (eid, Jammed (m, d, o)) - -instance FromNoun Work where - parseNoun n = named "Work" $ do - (eid, Jammed (m, d, o)) <- parseNoun n - pure (Work eid m d o) - -instance ToNoun LifeCyc where - toNoun (LifeCyc eid m n) = toNoun (eid, Jammed (m, n)) - -instance FromNoun LifeCyc where - parseNoun n = named "LifeCyc" $ do - (eid, Jammed (m, n)) <- parseNoun n - pure (LifeCyc eid m n) - --- | No FromNoun instance, because it depends on context (lifecycle length) -instance ToNoun Job where - toNoun (DoWork w) = toNoun w - toNoun (RunNok l) = toNoun l diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Ports.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Ports.hs deleted file mode 100644 index 024bd391f..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Ports.hs +++ /dev/null @@ -1,314 +0,0 @@ -module Urbit.Vere.Ports (HasPortControlApi(..), - PortControlApi, - buildInactivePorts, - buildNatPortsWhenPrivate, - buildNatPorts, - requestPortAccess) where - -import Control.Monad.STM (check) -import Urbit.Prelude -import Network.NatPmp -import Data.Time.Clock.POSIX -import Network.Socket - -import qualified Data.Heap as DH - --- This module deals with ports and port requests. When a component wants to --- ensure that it is externally reachable, possibly from outside a NAT, it --- makes a request to this module to hole-punch. - -class HasPortControlApi a where - portControlApiL :: Lens' a PortControlApi - -data PortControlApi = PortControlApi - { pAddPortRequest :: Word16 -> IO () - , pRemovePortRequest :: Word16 -> IO () - } - --- | Builds a PortControlApi struct which does nothing when called. -buildInactivePorts :: PortControlApi -buildInactivePorts = PortControlApi noop noop - where - noop x = pure () - --- | Builds a PortControlApi struct which tries to hole-punch by talking to the --- NAT gateway over NAT-PMP iff we are on a private network ip. -buildNatPortsWhenPrivate :: (HasLogFunc e) - => (Text -> RIO e ()) - -> RIO e PortControlApi -buildNatPortsWhenPrivate stderr = do - behind <- likelyBehindRouter - if behind - then buildNatPorts stderr - else pure buildInactivePorts - --- | Builds a PortControlApi struct which tries to hole-punch by talking to the --- NAT gateway over NAT-PMP. -buildNatPorts :: (HasLogFunc e) - => (Text -> RIO e ()) - -> RIO e PortControlApi -buildNatPorts stderr = do - q <- newTQueueIO - async $ portThread q stderr - - let addRequest port = do - resp <- newEmptyTMVarIO - atomically $ - writeTQueue q (PTMOpen port (putTMVar resp True)) - atomically $ takeTMVar resp - pure () - - let removeRequest port = atomically $ writeTQueue q (PTMClose port) - - pure $ PortControlApi addRequest removeRequest - -portLeaseLifetime :: Word32 -portLeaseLifetime = 15 * 60 - --- Be paranoid and renew leases a full minute before they would naturally expire. -portRenewalTime :: Word32 -portRenewalTime = portLeaseLifetime - 60 - --- Number of retries before we give up on performing nat operations. -maxRetries :: Int -maxRetries = 3 - --- How long to wait between retries. -networkRetryDelay :: Int -networkRetryDelay = 5 * 1_000_000 - --- Messages sent from the main thread to the port mapping communication thread. -data PortThreadMsg - = PTMOpen Word16 (STM ()) - -- ^ Does the open request, and then runs the passed in stm action to - -- signal completion to the main thread. We want to block on the initial - -- setting opening because we want the forwarding set up before we actually - -- start using the port. - - | PTMClose Word16 - -- ^ Close command. No synchronization because there's nothing we can do if - -- it fails. - --- We get requests to acquire a port as an RAII condition, but the actual APIs --- are timeout based, so we have to maintain a heap of the next timer to --- rerequest port access. -data RenewAction = RenewAction Word16 - --- The port thread is an async which reads commands from an STM queue and then --- executes them. This thread is here to bind the semantics that we want to how --- NAT-PMP sees the world. We want for an RAcquire to be able to start a --- request for port forwarding and then to release it when it goes out of --- scope. OTOH, NAT-PMP is all timeout based, and we want that timeout to be --- fairly short, such as 15 minutes, so the portThread needs to keep track of --- the time of the next port request. -portThread :: forall e. (HasLogFunc e) - => TQueue PortThreadMsg - -> (Text -> RIO e ()) - -> RIO e () -portThread q stderr = do - initNatPmp >>= \case - Left ErrCannotGetGateway -> do - assumeOnPublicInternet - Left err -> do - likelyIPAddress >>= \case - Just ip@(192, 168, _, _) -> warnBehindRouterAndErr ip err - Just ip@(172, x, _, _) - | (x >= 16 && x <= 31) -> warnBehindRouterAndErr ip err - Just ip@(10, _, _, _) -> warnBehindRouterAndErr ip err - _ -> assumeOnPublicInternet - Right pmp -> foundRouter pmp - where - warnBehindRouterAndErr (a, b, c, d) err = do - stderr $ "port: you appear to be behind a router since your ip " ++ - "is " ++ (tshow a) ++ "." ++ (tshow b) ++ "." ++ (tshow c) ++ - "." ++ (tshow d) ++ ", but " ++ - "we could not request port forwarding (NAT-PMP error: " ++ - (tshow err) ++ ")" - stderr $ "port: urbit performance will be degregaded unless you " ++ - "manually forward your ames port." - loopErr q - - assumeOnPublicInternet = do - stderr $ "port: couldn't find router; assuming on public internet" - loopErr q - - foundRouter :: NatPmpHandle -> RIO e () - foundRouter pmp = do - getPublicAddress pmp >>= \case - Left ErrCannotGetGateway -> assumeOnPublicInternet - Left ErrNoGatewaySupport -> assumeOnPublicInternet - Left err -> do - stderr $ "port: received error when asking router for public ip: " ++ - (tshow err) - loopErr q - Right addr -> do - let (a, b, c, d) = hostAddressToTuple addr - stderr $ "port: router reports that our public IP is " ++ (tshow a) ++ - "." ++ (tshow b) ++ "." ++ (tshow c) ++ "." ++ (tshow d) - loop pmp mempty - - loop :: NatPmpHandle -> DH.MinPrioHeap POSIXTime RenewAction -> RIO e () - loop pmp nextRenew = do - now <- io $ getPOSIXTime - delay <- case DH.viewHead nextRenew of - Nothing -> newTVarIO False - Just (fireTime, _) -> do - let timeTo = fireTime - now - let ms = round $ timeTo * 1000000 - registerDelay ms - command <- atomically $ - (Left <$> fini delay) <|> (Right <$> readTQueue q) - case command of - Left () -> handleRenew pmp nextRenew - Right msg -> handlePTM pmp msg nextRenew - - handlePTM :: NatPmpHandle - -> PortThreadMsg - -> DH.MinPrioHeap POSIXTime RenewAction - -> RIO e () - handlePTM pmp msg nextRenew = case msg of - PTMOpen p notifyComplete -> do - logInfo $ - displayShow ("port: sending initial request to NAT-PMP for port ", p) - setPortMapping pmp PTUdp p p portLeaseLifetime >>= \case - Left err | isResetAndRetry err -> do - closeNatPmp pmp - attemptReestablishNatPmpThen (\pmp -> handlePTM pmp msg nextRenew) - Left err -> do - logError $ - displayShow ("port: failed to request NAT-PMP for port ", p, - ":", err, ", disabling NAT-PMP") - loopErr q - Right _ -> do - -- Filter any existing references to this port on the heap to ensure - -- we don't double up on tasks. - let filteredHeap = filterPort p nextRenew - now <- io $ getPOSIXTime - let withRenew = - DH.insert (now + fromIntegral portRenewalTime, RenewAction p) - filteredHeap - atomically notifyComplete - loop pmp withRenew - - PTMClose p -> do - logInfo $ - displayShow ("port: releasing lease for ", p) - setPortMapping pmp PTUdp p p 0 - let removed = filterPort p nextRenew - loop pmp removed - - handleRenew :: NatPmpHandle - -> DH.MinPrioHeap POSIXTime RenewAction - -> RIO e () - handleRenew pmp nextRenew = do - case (DH.view nextRenew) of - Nothing -> error "Internal heap managing error." - Just ((_, RenewAction p), rest) -> do - logInfo $ - displayShow ("port: sending renewing request to NAT-PMP for port ", - p) - setPortMapping pmp PTUdp p p portLeaseLifetime >>= \case - Left err | isResetAndRetry err -> do - closeNatPmp pmp - attemptReestablishNatPmpThen (\pmp -> handleRenew pmp nextRenew) - Left err -> do - logError $ - displayShow ("port: failed to request NAT-PMP for port ", p, - ":", err, ". disabling NAT-PMP") - loopErr q - Right _ -> do - -- We don't need to filter the port because we just did. - now <- io $ getPOSIXTime - let withRenew = - DH.insert (now + fromIntegral portRenewalTime, RenewAction p) - rest - loop pmp withRenew - - -- If the internal natpmp socket is closed (laptop lid closed, network - -- change, etc), attempt to reestablish a connection. - attemptReestablishNatPmpThen :: (NatPmpHandle -> RIO e ()) - -> RIO e () - attemptReestablishNatPmpThen andThen = do - logInfo $ - displayShow ("port: network changed. Attempting NAT reconnect"); - loop 0 - where - loop :: Int -> RIO e () - loop tryNum = do - initNatPmp >>= \case - Left err -> do - if tryNum == maxRetries - then do - stderr $ "port: failed to reestablish a connection to your router" - loopErr q - else do - threadDelay networkRetryDelay - loop (tryNum + 1) - Right pmp -> do - andThen pmp - - filterPort :: Word16 - -> DH.MinPrioHeap POSIXTime RenewAction - -> DH.MinPrioHeap POSIXTime RenewAction - filterPort p = DH.filter okPort - where - okPort (_, RenewAction x) = p /= x - - -- block (retry) until the delay TVar is set to True - fini :: TVar Bool -> STM () - fini = check <=< readTVar - - -- The NAT system is considered "off" but we still need to signal back to - -- the main thread that blocking actions are complete. - loopErr q = forever $ do - (atomically $ readTQueue q) >>= \case - PTMOpen _ onComplete -> atomically onComplete - PTMClose _ -> pure () - --- When we were unable to connect to a router, get the ip address on the --- default ipv4 interface to check if we look like we're on an internal network --- or not. -likelyIPAddress :: MonadIO m => m (Maybe (Word8, Word8, Word8, Word8)) -likelyIPAddress = liftIO do - -- Try opening a socket to 1.1.1.1 to get our own IP address. Since UDP is - -- stateless and we aren't sending anything, we aren't actually contacting - -- them in any way. - sock <- socket AF_INET Datagram 0 - connect sock (SockAddrInet 53 (tupleToHostAddress (1, 1, 1, 1))) - sockAddr <- getSocketName sock - case sockAddr of - SockAddrInet _ addr -> pure $ Just $ hostAddressToTuple addr - _ -> pure $ Nothing - -likelyBehindRouter :: MonadIO m => m Bool -likelyBehindRouter = do - likelyIPAddress >>= \case - Just ip@(192, 168, _, _) -> pure True - Just ip@(172, x, _, _) - | (x >= 16 && x <= 31) -> pure True - Just ip@(10, _, _, _) -> pure True - _ -> pure False - --- Some of the errors that we encounter happen when the underlying sockets have --- closed out from under us. When this happens, we want to wait a short time --- and reset the system. -isResetAndRetry :: Error -> Bool -isResetAndRetry ErrRecvFrom = True -isResetAndRetry ErrSendErr = True -isResetAndRetry _ = False - --- Acquire a port for the duration of the RAcquire. -requestPortAccess :: forall e. (HasPortControlApi e) => Word16 -> RAcquire e () -requestPortAccess port = do - mkRAcquire request release - where - request :: RIO e () - request = do - api <- view portControlApiL - io $ pAddPortRequest api port - - release :: () -> RIO e () - release _ = do - api <- view portControlApiL - io $ pRemovePortRequest api port - diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Serf.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Serf.hs deleted file mode 100644 index 42c44df6b..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Serf.hs +++ /dev/null @@ -1,160 +0,0 @@ -{-| - High-Level Serf Interface --} - -module Urbit.Vere.Serf - ( withSerf - , execReplay - , collectFX - , module X - ) -where - -import Urbit.Prelude - -import Data.Conduit -import Urbit.Vere.Pier.Types -import Urbit.Vere.Serf.IPC - -import Control.Monad.Trans.Resource (runResourceT) -import Urbit.Arvo (FX) -import Urbit.King.App.Class (HasStderrLogFunc(..)) -import Urbit.EventLog.Event (parseLogEvent) - -import qualified Data.Conduit.Combinators as CC -import qualified System.ProgressBar as PB -import qualified Urbit.EventLog.LMDB as Log - -import qualified Urbit.Vere.Serf.IPC as X (Config (..), EvErr (..), Flag (..), - RunReq (..), Serf, WorkError (..), - run, sendSIGINT, snapshot, start, - stop) - - --------------------------------------------------------------------------------- - -withSerf :: HasLogFunc e => Config -> RAcquire e Serf -withSerf config = mkRAcquire startup kill - where - startup = do - (serf, st) <- io $ start config - logInfo (displayShow ("serf state", st)) - pure serf - kill serf = do - void $ rio $ stop serf - -execReplay - :: forall e - . (HasLogFunc e, HasStderrLogFunc e) - => Serf - -> Log.EventLog - -> Maybe Word64 - -> RIO e (Either PlayBail Word) -execReplay serf log last = do - lastEventInSnap <- io (serfLastEventBlocking serf) - if lastEventInSnap == 0 then doBoot else doReplay - where - doBoot :: RIO e (Either PlayBail Word) - doBoot = do - logInfo "Beginning boot sequence" - - let bootSeqLen = lifecycleLen (Log.identity log) - - evs <- runConduit $ Log.streamEvents log 1 - .| CC.take (fromIntegral bootSeqLen) - .| CC.mapM (fmap snd . parseLogEvent) - .| CC.sinkList - - let numEvs = fromIntegral (length evs) - - when (numEvs /= bootSeqLen) $ do - throwIO (MissingBootEventsInEventLog numEvs bootSeqLen) - - logInfo $ display ("Sending " <> tshow numEvs <> " boot events to serf") - - io (boot serf evs) >>= \case - Just err -> do - logInfo "Error on replay, exiting" - pure (Left err) - Nothing -> do - logInfo "Finished boot events, moving on to more events from log." - doReplay <&> \case - Left err -> Left err - Right num -> Right (num + numEvs) - - doReplay :: RIO e (Either PlayBail Word) - doReplay = do - logTrace "Beginning event log replay" - - lastEventInSnap <- io (serfLastEventBlocking serf) - - last & \case - Nothing -> pure () - Just lt -> logTrace $ display $ - "User requested to replay up to event #" <> tshow lt - - logLastEv :: Word64 <- atomically $ fromIntegral <$> Log.lastEv log - - logTrace $ display $ "Last event in event log is #" <> tshow logLastEv - - let replayUpTo = min (fromMaybe logLastEv last) logLastEv - - let numEvs :: Int = fromIntegral replayUpTo - fromIntegral lastEventInSnap - - when (numEvs < 0) $ do - throwIO (SnapshotAheadOfLog logLastEv lastEventInSnap) - - incProgress <- logStderr (trackProgress (fromIntegral numEvs)) - - logTrace $ display $ "Replaying up to event #" <> tshow replayUpTo - logTrace $ display $ "Will replay " <> tshow numEvs <> " in total." - - env <- ask - - res <- runResourceT - $ runConduit - $ Log.streamEvents log (lastEventInSnap + 1) - .| CC.take (fromIntegral numEvs) - .| CC.mapM (fmap snd . parseLogEvent) - .| replay 5 incProgress serf - - res & \case - Nothing -> pure (Right $ fromIntegral numEvs) - Just er -> pure (Left er) - -logStderr :: HasStderrLogFunc e => RIO LogFunc a -> RIO e a -logStderr action = do - logFunc <- view stderrLogFuncL - runRIO logFunc action - -trackProgress - :: HasLogFunc e - => Word64 - -> RIO e (Int -> IO ()) -trackProgress = \case - 0 -> pure $ const $ pure () - num -> do - let style = PB.defStyle { PB.stylePostfix = PB.exact } - let refresh = 10 - let init = PB.Progress 0 (fromIntegral num) () - bar <- PB.newProgressBar style refresh init - env <- ask - let incr = PB.incProgress bar - pure (runRIO env . incr) - - --- Collect FX ------------------------------------------------------------------ - -collectFX :: HasLogFunc e => Serf -> Log.EventLog -> RIO e () -collectFX serf log = do - lastEv <- io (serfLastEventBlocking serf) - runResourceT - $ runConduit - $ Log.streamEvents log (lastEv + 1) - .| CC.mapM (parseLogEvent >=> fromNounExn . snd) - .| swim serf - .| persistFX log - -persistFX :: MonadIO m => Log.EventLog -> ConduitT (EventId, FX) Void m () -persistFX log = CC.mapM_ $ \(eId, fx) -> do - Log.writeEffectsRow log eId $ jamBS $ toNoun fx diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/IPC.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/IPC.hs deleted file mode 100644 index 67128821f..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/IPC.hs +++ /dev/null @@ -1,663 +0,0 @@ -{-| - Low-Level IPC flows for interacting with the serf process. - - - Serf process can be started and shutdown with `start` and `stop`. - - You can ask the serf what it's last event was with - `serfLastEventBlocking`. - - A running serf can be asked to compact it's heap or take a snapshot. - - You can scry into a running serf. - - A running serf can be asked to execute a boot sequence, replay from - existing events, and run a ship with `boot`, `replay`, and `run`. - - The `run` and `replay` flows will do batching of events to keep the - IPC pipe full. - - ``` - |% - :: +writ: from king to serf - :: - +$ writ - $% $: %live - $% [%cram eve=@] - [%exit cod=@] - [%save eve=@] - [%meld ~] - [%pack ~] - == == - :: sam=[gang (each path $%([%once @tas @tas path] [beam @tas beam]))] - [%peek mil=@ sam=*] - [%play eve=@ lit=(list ?((pair @da ovum) *))] - [%work mil=@ job=(pair @da ovum)] - == - :: +plea: from serf to king - :: - +$ plea - $% [%live ~] - [%ripe [pro=%1 hon=@ nok=@] eve=@ mug=@] - [%slog pri=@ tank] - [%flog cord] - $: %peek - $% [%done dat=(unit (cask))] - [%bail dud=goof] - == == - $: %play - $% [%done mug=@] - [%bail eve=@ mug=@ dud=goof] - == == - $: %work - $% [%done eve=@ mug=@ fec=(list ovum)] - [%swap eve=@ mug=@ job=(pair @da ovum) fec=(list ovum)] - [%bail lud=(list goof)] - == == - == - -- - ``` --} - -module Urbit.Vere.Serf.IPC - ( Serf - , start - , stop - , serfLastEventBlocking - , snapshot - , compact - , scry - , boot - , replay - , run - , swim - , sendSIGINT - , module Urbit.Vere.Serf.Types - ) -where - -import Urbit.Prelude hiding ((<|)) - -import Data.Bits -import Data.Conduit -import System.Process -import Urbit.Vere.Serf.Types -import Urbit.Vere.Serf.IPC.Types - -import Control.Monad.STM (retry) -import Control.Monad.Trans.Resource (MonadResource, allocate, runResourceT) -import Data.Sequence (Seq((:<|), (:|>))) -import Foreign.Marshal.Alloc (alloca) -import Foreign.Ptr (castPtr) -import Foreign.Storable (peek, poke) -import RIO.Prelude (decodeUtf8Lenient) -import System.Posix.Signals (sigINT, sigKILL, signalProcess) -import Urbit.Arvo (FX) -import Urbit.Arvo.Event -import Urbit.Noun.Time (Wen) - -import qualified Data.ByteString as BS -import qualified Data.ByteString.Unsafe as BS -import qualified System.IO.Error as IO -import qualified Urbit.Noun.Time as Time - - --- Serf API -------------------------------------------------------------------- - -data Serf = Serf - { serfSend :: Handle - , serfRecv :: Handle - , serfProc :: ProcessHandle - , serfSlog :: Slog -> IO () - , serfLock :: MVar (Maybe SerfState) - } - - --- Access Current Serf State --------------------------------------------------- - -serfLastEventBlocking :: Serf -> IO EventId -serfLastEventBlocking Serf{serfLock} = readMVar serfLock >>= \case - Nothing -> throwIO SerfNotRunning - Just ss -> pure (ssLast ss) - - --- Low Level IPC Functions ----------------------------------------------------- - -fromRightExn :: (Exception e, MonadIO m) => Either a b -> (a -> e) -> m b -fromRightExn (Left m) exn = throwIO (exn m) -fromRightExn (Right x) _ = pure x - --- TODO Support Big Endian -sendLen :: Serf -> Int -> IO () -sendLen s i = do - w <- evaluate (fromIntegral i :: Word64) - withWord64AsByteString w (hPut (serfSend s)) - where - withWord64AsByteString :: Word64 -> (ByteString -> IO a) -> IO a - withWord64AsByteString w k = alloca $ \wp -> do - poke wp w - bs <- BS.unsafePackCStringLen (castPtr wp, 8) - k bs - -sendBytes :: Serf -> ByteString -> IO () -sendBytes s bs = handle onIOError $ do - sendLen s (length bs) - hPut (serfSend s) bs - hFlush (serfSend s) - where - onIOError :: IOError -> IO () - onIOError = const (throwIO SerfConnectionClosed) - -recvBytes :: Serf -> Word64 -> IO ByteString -recvBytes serf = BS.hGet (serfRecv serf) . fromIntegral - -recvLen :: Serf -> IO Word64 -recvLen w = do - bs <- BS.hGet (serfRecv w) 8 - case length bs of - 8 -> BS.unsafeUseAsCString bs (peek @Word64 . castPtr) - _ -> throwIO SerfConnectionClosed - -recvResp :: Serf -> IO ByteString -recvResp serf = do - len <- recvLen serf - recvBytes serf len - - --- Send Writ / Recv Plea ------------------------------------------------------- - -sendWrit :: Serf -> Writ -> IO () -sendWrit s = sendBytes s . jamBS . toNoun - -recvPlea :: Serf -> IO Plea -recvPlea w = do - b <- recvResp w - n <- fromRightExn (cueBS b) (const $ BadPleaAtom $ bytesAtom b) - p <- fromRightExn (fromNounErr @Plea n) (\(p, m) -> BadPleaNoun n p m) - pure p - -recvPleaHandlingSlog :: Serf -> IO Plea -recvPleaHandlingSlog serf = loop - where - loop = recvPlea serf >>= \case - PSlog info -> serfSlog serf info >> loop - PFlog (Cord ofni) -> serfSlog serf (0, Tank $ Leaf $ Tape $ ofni) >> loop - other -> pure other - --- Higher-Level IPC Functions -------------------------------------------------- - -recvRipe :: Serf -> IO SerfInfo -recvRipe serf = recvPleaHandlingSlog serf >>= \case - PRipe ripe -> pure ripe - plea -> throwIO (UnexpectedPlea (toNoun plea) "expecting %play") - -recvPlay :: Serf -> IO Play -recvPlay serf = recvPleaHandlingSlog serf >>= \case - PPlay play -> pure play - plea -> throwIO (UnexpectedPlea (toNoun plea) "expecting %play") - -recvLive :: Serf -> IO () -recvLive serf = recvPleaHandlingSlog serf >>= \case - PLive () -> pure () - plea -> throwIO (UnexpectedPlea (toNoun plea) "expecting %live") - -recvWork :: Serf -> IO Work -recvWork serf = do - recvPleaHandlingSlog serf >>= \case - PWork work -> pure work - plea -> throwIO (UnexpectedPlea (toNoun plea) "expecting %work") - -recvPeek :: Serf -> IO (Maybe (Term, Noun)) -recvPeek serf = do - recvPleaHandlingSlog serf >>= \case - PPeek (SDone peek) -> pure peek - -- XX surface error content - PPeek (SBail dud) -> pure Nothing - plea -> throwIO (UnexpectedPlea (toNoun plea) "expecting %peek") - - --- Request-Response Points -- These don't touch the lock ----------------------- - -sendSnapshotRequest :: Serf -> EventId -> IO () -sendSnapshotRequest serf eve = do - sendWrit serf (WLive $ LSave eve) - recvLive serf - -sendCompactionRequest :: Serf -> IO () -sendCompactionRequest serf = do - sendWrit serf (WLive $ LPack ()) - recvLive serf - -sendScryRequest :: Serf -> Gang -> ScryReq -> IO (Maybe (Term, Noun)) -sendScryRequest serf g r = do - sendWrit serf (WPeek 0 g r) - recvPeek serf - -sendShutdownRequest :: Serf -> Atom -> IO () -sendShutdownRequest serf exitCode = do - sendWrit serf (WLive $ LExit exitCode) - pure () - - --- Starting the Serf ----------------------------------------------------------- - -compileFlags :: [Flag] -> Word -compileFlags = foldl' (\acc flag -> setBit acc (fromEnum flag)) 0 - -readStdErr :: Handle -> (Text -> IO ()) -> IO () -> IO () -readStdErr h onLine onClose = loop - where - loop = do - IO.tryIOError (BS.hGetLine h >>= onLine . decodeUtf8Lenient) >>= \case - Left exn -> onClose - Right () -> loop - -start :: Config -> IO (Serf, SerfInfo) -start (Config exePax pierPath flags onSlog onStdr onDead) = do - (Just i, Just o, Just e, p) <- createProcess pSpec - void $ async (readStdErr e onStdr onDead) - vLock <- newEmptyMVar - let serf = Serf i o p onSlog vLock - info <- recvRipe serf - putMVar vLock (Just $ siStat info) - pure (serf, info) - where - diskKey = "" - config = show (compileFlags flags) - rock = "0" -- XX support loading from rock - cache = "50000" -- XX support memo-cache size - args = ["serf", pierPath, diskKey, config, cache, rock] - pSpec = (proc exePax args) { std_in = CreatePipe - , std_out = CreatePipe - , std_err = CreatePipe - } - - --- Taking the SerfState Lock --------------------------------------------------- - -takeLock :: MonadIO m => Serf -> m SerfState -takeLock serf = io $ do - takeMVar (serfLock serf) >>= \case - Nothing -> putMVar (serfLock serf) Nothing >> throwIO SerfNotRunning - Just ss -> pure ss - -serfLockTaken - :: MonadResource m => Serf -> m (IORef (Maybe SerfState), SerfState) -serfLockTaken serf = snd <$> allocate take release - where - take = (,) <$> newIORef Nothing <*> takeLock serf - release (rv, _) = do - mRes <- readIORef rv - when (mRes == Nothing) (forcefullyKillSerf serf) - putMVar (serfLock serf) mRes - -withSerfLock - :: MonadResource m => Serf -> (SerfState -> m (SerfState, a)) -> m a -withSerfLock serf act = do - (vState , initialState) <- serfLockTaken serf - (newState, result ) <- act initialState - writeIORef vState (Just newState) - pure result - -withSerfLockIO :: Serf -> (SerfState -> IO (SerfState, a)) -> IO a -withSerfLockIO s a = runResourceT (withSerfLock s (io . a)) - - --- SIGINT ---------------------------------------------------------------------- - -sendSIGINT :: Serf -> IO () -sendSIGINT serf = do - getPid (serfProc serf) >>= \case - Nothing -> pure () - Just pid -> do - io $ signalProcess sigINT pid - - --- Killing the Serf ------------------------------------------------------------ - - -{-| - Ask the serf to shutdown. If it takes more than 2s, kill it with - SIGKILL. --} -stop :: HasLogFunc e => Serf -> RIO e () -stop serf = do - race_ niceKill (wait2sec >> forceKill) - where - wait2sec = threadDelay 2_000_000 - - niceKill = do - logTrace "Asking serf to shut down" - io (gracefullyKillSerf serf) - logTrace "Serf went down when asked." - - forceKill = do - logTrace "Serf taking too long to go down, kill with fire (SIGTERM)." - io (forcefullyKillSerf serf) - logTrace "Serf process killed with SIGTERM." - -{-| - Kill the serf by taking the lock, then asking for it to exit. --} -gracefullyKillSerf :: Serf -> IO () -gracefullyKillSerf serf@Serf{..} = do - finalState <- takeMVar serfLock - sendShutdownRequest serf 0 - waitForProcess serfProc - pure () - -{-| - Kill the serf by sending it a SIGKILL. --} -forcefullyKillSerf :: Serf -> IO () -forcefullyKillSerf serf = do - getPid (serfProc serf) >>= \case - Nothing -> pure () - Just pid -> do - io $ signalProcess sigKILL pid - io $ void $ waitForProcess (serfProc serf) - - --- Flows for Interacting with the Serf ----------------------------------------- - -{-| - Ask the serf to write a snapshot to disk. --} -snapshot :: Serf -> IO () -snapshot serf = withSerfLockIO serf $ \ss -> do - sendSnapshotRequest serf (ssLast ss) - pure (ss, ()) - -{-| - Ask the serf to de-duplicate and de-fragment it's heap. --} -compact :: Serf -> IO () -compact serf = withSerfLockIO serf $ \ss -> do - sendCompactionRequest serf - pure (ss, ()) - -{-| - Peek into the serf state. --} -scry :: Serf -> Gang -> ScryReq -> IO (Maybe (Term, Noun)) -scry serf g r = withSerfLockIO serf $ \ss -> do - (ss,) <$> sendScryRequest serf g r - -{-| - Given a list of boot events, send them to to the serf in a single - %play message. They must all be sent in a single %play event so that - the serf can determine the length of the boot sequence. --} -boot :: Serf -> [Noun] -> IO (Maybe PlayBail) -boot serf@Serf {..} seq = do - withSerfLockIO serf $ \ss -> do - sendWrit serf (WPlay 1 seq) - recvPlay serf >>= \case - PBail bail -> pure (ss, Just bail) - PDone mug -> pure (SerfState (fromIntegral $ length seq) mug, Nothing) - -{-| - Given a stream of nouns (from the event log), feed them into the serf - in batches of size `batchSize`. - - - On `%bail` response, return early. - - On IPC errors, kill the serf and rethrow. - - On success, return `Nothing`. --} -replay - :: forall m - . (MonadResource m, MonadUnliftIO m, MonadIO m) - => Int - -> (Int -> IO ()) - -> Serf - -> ConduitT Noun Void m (Maybe PlayBail) -replay batchSize cb serf = do - withSerfLock serf $ \ss -> do - (r, ss') <- loop ss - pure (ss', r) - where - loop :: SerfState -> ConduitT Noun Void m (Maybe PlayBail, SerfState) - loop ss@(SerfState lastEve lastMug) = do - awaitBatch batchSize >>= \case - [] -> pure (Nothing, SerfState lastEve lastMug) - evs -> do - let nexEve = lastEve + 1 - let newEve = lastEve + fromIntegral (length evs) - io $ sendWrit serf (WPlay nexEve evs) - io (recvPlay serf) >>= \case - PBail bail -> pure (Just bail, SerfState lastEve lastMug) - PDone newMug -> do - io (cb $ length evs) - loop (SerfState newEve newMug) - -{-| - TODO If this is slow, use a mutable vector instead of reversing a list. --} -awaitBatch :: Monad m => Int -> ConduitT i o m [i] -awaitBatch = go [] - where - go acc 0 = pure (reverse acc) - go acc n = await >>= \case - Nothing -> pure (reverse acc) - Just x -> go (x:acc) (n-1) - - --- Special Replay for Collecting FX -------------------------------------------- - -{-| - This does event-log replay using the running IPC flow so that we - can collect effects. - - We don't tolerate replacement events or bails since we are actually - replaying the log, so we just throw exceptions in those cases. --} -swim - :: forall m - . (MonadIO m, MonadUnliftIO m, MonadResource m) - => Serf - -> ConduitT (Wen, Ev) (EventId, FX) m () -swim serf = do - withSerfLock serf $ \SerfState {..} -> do - (, ()) <$> loop ssHash ssLast - where - loop - :: Mug - -> EventId - -> ConduitT (Wen, Ev) (EventId, FX) m SerfState - loop mug eve = await >>= \case - Nothing -> do - pure (SerfState eve mug) - Just (wen, evn) -> do - io (sendWrit serf (WWork 0 wen evn)) - io (recvWork serf) >>= \case - WBail goofs -> do - throwIO (BailDuringReplay eve goofs) - WSwap eid hash (wen, noun) fx -> do - throwIO (SwapDuringReplay eid hash (wen, noun) fx) - WDone eid hash fx -> do - yield (eid, fx) - loop hash eid - - - --- Running Ship Flow ----------------------------------------------------------- - -{-| - TODO Don't take snapshot until event log has processed current event. --} -run - :: Serf - -> Int - -> STM EventId - -> STM RunReq - -> ((Fact, FX) -> STM ()) - -> (Maybe Ev -> STM ()) - -> IO () -run serf maxBatchSize getLastEvInLog onInput sendOn spin = topLoop - where - topLoop :: IO () - topLoop = atomically onInput >>= \case - RRWork workErr -> doWork workErr - RRSave () -> doSave - RRKill () -> doKill - RRPack () -> doPack - RRScry g r k -> doScry g r k - - doPack :: IO () - doPack = compact serf >> topLoop - - waitForLog :: IO () - waitForLog = do - serfLast <- serfLastEventBlocking serf - atomically $ do - logLast <- getLastEvInLog - when (logLast < serfLast) retry - - doSave :: IO () - doSave = waitForLog >> snapshot serf >> topLoop - - doKill :: IO () - doKill = waitForLog >> snapshot serf >> pure () - - doScry :: Gang -> ScryReq -> (Maybe (Term, Noun) -> IO ()) -> IO () - doScry g r k = (scry serf g r >>= k) >> topLoop - - doWork :: EvErr -> IO () - doWork firstWorkErr = do - que <- newTBMQueueIO 1 - () <- atomically (writeTBMQueue que firstWorkErr) - tWork <- async (processWork serf maxBatchSize que onWorkResp spin) - -- Avoid wrapping all subsequent runs of the event loop in an exception - -- handler which retains tWork. - nexSt <- flip onException (cancel tWork) $ do - nexSt <- workLoop que - wait tWork - pure nexSt - nexSt - - workLoop :: TBMQueue EvErr -> IO (IO ()) - workLoop que = atomically onInput >>= \case - RRKill () -> atomically (closeTBMQueue que) >> pure doKill - RRSave () -> atomically (closeTBMQueue que) >> pure doSave - RRPack () -> atomically (closeTBMQueue que) >> pure doPack - RRScry g r k -> atomically (closeTBMQueue que) >> pure (doScry g r k) - RRWork workErr -> atomically (writeTBMQueue que workErr) >> workLoop que - - onWorkResp :: Wen -> EvErr -> Work -> IO () - onWorkResp wen (EvErr evn err) = \case - WDone eid hash fx -> do - io $ err (RunOkay eid fx) - atomically $ sendOn ((Fact eid hash wen (toNoun evn)), fx) - WSwap eid hash (wen, noun) fx -> do - io $ err (RunSwap eid hash wen noun fx) - atomically $ sendOn (Fact eid hash wen noun, fx) - WBail goofs -> do - io $ err (RunBail goofs) - - -{-| - Given: - - - A stream of incoming requests - - A sequence of in-flight requests that haven't been responded to - - A maximum number of in-flight requests. - - Wait until the number of in-fligh requests is smaller than the maximum, - and then take the next item from the stream of requests. --} -pullFromQueueBounded :: Int -> TVar (Seq a) -> TBMQueue b -> STM (Maybe b) -pullFromQueueBounded maxSize vInFlight queue = do - inFlight <- length <$> readTVar vInFlight - if inFlight >= maxSize - then retry - else readTBMQueue queue - -{-| - Given - - - `maxSize`: The maximum number of jobs to send to the serf before - getting a response. - - `q`: A bounded queue (which can be closed) - - `onResp`: a callback to call for each response from the serf. - - `spin`: a callback to tell the terminal driver which event is - currently being processed. - - Pull jobs from the queue and send them to the serf (eagerly, up to - `maxSize`) and call the callback with each response from the serf. - - When the queue is closed, wait for the serf to respond to all pending - work, and then return. - - Whenever the serf is idle, call `spin Nothing` and whenever the serf - is working on an event, call `spin (Just ev)`. --} -processWork - :: Serf - -> Int - -> TBMQueue EvErr - -> (Wen -> EvErr -> Work -> IO ()) - -> (Maybe Ev -> STM ()) - -> IO () -processWork serf maxSize q onResp spin = do - vDoneFlag <- newTVarIO False - vInFlightQueue <- newTVarIO empty - recvThread <- async (recvLoop serf vDoneFlag vInFlightQueue spin) - flip onException (print "KILLING: processWork" >> cancel recvThread) $ do - loop vInFlightQueue vDoneFlag - wait recvThread - where - loop :: TVar (Seq (Ev, Work -> IO ())) -> TVar Bool -> IO () - loop vInFlight vDone = do - atomically (pullFromQueueBounded maxSize vInFlight q) >>= \case - Nothing -> do - atomically (writeTVar vDone True) - Just evErr@(EvErr ev _) -> do - now <- Time.now - let cb = onResp now evErr - atomically $ modifyTVar' vInFlight (:|> (ev, cb)) - sendWrit serf (WWork 0 now ev) - loop vInFlight vDone - -{-| - Given: - - - `vDone`: A flag that no more work will be sent to the serf. - - - `vWork`: A list of work requests that have been sent to the serf, - haven't been responded to yet. - - If the serf has responded to all work requests, and no more work is - going to be sent to the serf, then return. - - If we are going to send more work to the serf, but the queue is empty, - then wait. - - If work requests have been sent to the serf, take the first one, - wait for a response from the serf, call the associated callback, - and repeat the whole process. --} -recvLoop - :: Serf - -> TVar Bool - -> TVar (Seq (Ev, Work -> IO ())) - -> (Maybe Ev -> STM ()) - -> IO () -recvLoop serf vDone vWork spin = do - withSerfLockIO serf \SerfState {..} -> do - loop ssLast ssHash - where - loop eve mug = do - atomically $ do - whenM (null <$> readTVar vWork) $ do - spin Nothing - atomically takeCallback >>= \case - Nothing -> pure (SerfState eve mug, ()) - Just (curEve, cb) -> do - atomically (spin (Just curEve)) - recvWork serf >>= \case - work@(WDone eid hash _) -> cb work >> loop eid hash - work@(WSwap eid hash _ _) -> cb work >> loop eid hash - work@(WBail _) -> cb work >> loop eve mug - - takeCallback :: STM (Maybe (Ev, Work -> IO ())) - takeCallback = do - ((,) <$> readTVar vDone <*> readTVar vWork) >>= \case - (False, Empty ) -> retry - (True , Empty ) -> pure Nothing - (_ , (e, x) :<| xs) -> writeTVar vWork xs $> Just (e, x) - (_ , _ ) -> error "impossible" diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/IPC/Types.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/IPC/Types.hs deleted file mode 100644 index 09f1b36a9..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/IPC/Types.hs +++ /dev/null @@ -1,59 +0,0 @@ -{-# LANGUAGE StrictData #-} - -module Urbit.Vere.Serf.IPC.Types where - -import Urbit.Prelude hiding ((<|)) -import Urbit.Arvo (Ev, FX) -import Urbit.Noun.Time (Wen) -import Urbit.Vere.Serf.Types - --- Private data structures for Urbit.Vere.Serf.IPC, but made StrictData without --- making the rest of Urbit.Vere.Serf.IPC strict. - -data Live - = LExit Atom -- exit status code - | LSave EventId - | LCram EventId - | LPack () - deriving (Show) - -data Play - = PDone Mug - | PBail PlayBail - deriving (Show) - -data Scry - = SDone (Maybe (Term, Noun)) - | SBail Goof - deriving (Show) - -data Work - = WDone EventId Mug FX - | WSwap EventId Mug (Wen, Noun) FX - | WBail [Goof] - deriving (Show) - -data Writ - = WLive Live - | WPeek Atom Gang ScryReq - | WPlay EventId [Noun] - | WWork Atom Wen Ev - deriving (Show) - -data Plea - = PLive () - | PRipe SerfInfo - | PSlog Slog - | PFlog Cord - | PPeek Scry - | PPlay Play - | PWork Work - deriving (Show) - -deriveNoun ''Live -deriveNoun ''Play -deriveNoun ''Scry -deriveNoun ''Work -deriveNoun ''Writ -deriveNoun ''Plea - diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/Types.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/Types.hs deleted file mode 100644 index c0979a878..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Serf/Types.hs +++ /dev/null @@ -1,135 +0,0 @@ -module Urbit.Vere.Serf.Types where - -import Urbit.Prelude - -import Urbit.Arvo (Desk, Ev, FX) -import Urbit.Noun.Time (Wen) - - --- Types ----------------------------------------------------------------------- - -type EventId = Word64 - -type PlayBail = (EventId, Mug, Goof) - -type Slog = (Atom, Tank) - -data SerfState = SerfState - { ssLast :: !EventId - , ssHash :: !Mug - } - deriving (Show, Eq) - -data RipeInfo = RipeInfo - { riProt :: !Atom - , riHoon :: !Atom - , riNock :: !Atom - } - deriving (Show) - -data SerfInfo = SerfInfo - { siRipe :: !RipeInfo - , siStat :: !SerfState - } - deriving (Show) - -data Fact = Fact - { factEve :: EventId - , factMug :: Mug - , factWen :: Wen - , factNon :: Noun - } - -data Flag - = DebugRam - | DebugCpu - | CheckCorrupt - | CheckFatal - | Verbose - | DryRun - | Quiet - | Hashless - | Trace - deriving (Eq, Ord, Show, Enum, Bounded) - -data Config = Config - { scSerf :: FilePath -- Where is the urbit-worker executable? - , scPier :: FilePath -- Where is the pier directory? - , scFlag :: [Flag] -- Serf execution flags. - , scSlog :: Slog -> IO () -- What to do with slogs? - , scStdr :: Text -> IO () -- What to do with lines from stderr? - , scDead :: IO () -- What to do when the serf process goes down? - } - - --- Serf Commands --------------------------------------------------------------- - -type Gang = Maybe (HoonSet Ship) - -type Goof = (Term, [Tank]) - -data EvErr = EvErr Ev (WorkError -> IO ()) - -{-| - Two types of serf failures. - - - `RunSwap`: Event processing failed, but the serf replaced it with - another event which succeeded. - - - `RunBail`: Event processing failed and all attempt to replace it - with a failure-notice event also caused crashes. We are really fucked. --} -data WorkError -- TODO Rename type and constructors - = RunSwap EventId Mug Wen Noun FX -- TODO Maybe provide less info here? - | RunBail [Goof] - | RunOkay EventId FX - -{- - - RRWork: Ask the serf to do work, will output (Fact, FX) if work - succeeded and call callback on failure. - - RRSave: Wait for the serf to finish all pending work --} -data RunReq - = RRWork EvErr - | RRSave () - | RRKill () - | RRPack () - | RRScry Gang ScryReq (Maybe (Term, Noun) -> IO ()) - -type ScryReq = (Each Path Demi) - -data Demi - = DemiOnce Term Desk Path - | DemiBeam Term Beam - deriving (Show) - --- TODO -type Beam = Void - -deriveNoun ''Demi - - --- Exceptions ------------------------------------------------------------------ - -data SerfExn - = UnexpectedPlea Noun Text - | BadPleaAtom Atom - | BadPleaNoun Noun [Text] Text - | PeekBail Goof - | SerfConnectionClosed - | SerfHasShutdown - | BailDuringReplay EventId [Goof] - | SwapDuringReplay EventId Mug (Wen, Noun) FX - | SerfNotRunning - | MissingBootEventsInEventLog Word Word - | SnapshotAheadOfLog EventId EventId - | BailDuringWyrd [Goof] - | SwapDuringWyrd Mug (Wen, Noun) FX - deriving (Show, Exception) - - --- Instances ------------------------------------------------------------------- - -deriveNoun ''RipeInfo -deriveNoun ''SerfInfo -deriveNoun ''SerfState diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Stat.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Stat.hs deleted file mode 100644 index 910df9c34..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Stat.hs +++ /dev/null @@ -1,75 +0,0 @@ -module Urbit.Vere.Stat where - -import Urbit.Prelude - -data Stat = Stat - { statAmes :: AmesStat - } - -data AmesStat = AmesStat - { asUdp :: TVar Word - , asUqf :: TVar Word - , asUdf :: TVar Word - , asUi6 :: TVar Word - , asRcv :: TVar Word - , asSup :: TVar Word - , asSrf :: TVar Word - , asQuf :: TVar Word - , asFwd :: TVar Word - , asDrt :: TVar Word - , asDvr :: TVar Word - , asDml :: TVar Word - , asSwp :: TVar Word - , asBal :: TVar Word - , asOky :: TVar Word - } - -newStat :: MonadIO m => m Stat -newStat = do - asUdp <- newTVarIO 0 - asUqf <- newTVarIO 0 - asUdf <- newTVarIO 0 - asUi6 <- newTVarIO 0 - asRcv <- newTVarIO 0 - asSup <- newTVarIO 0 - asSrf <- newTVarIO 0 - asQuf <- newTVarIO 0 - asFwd <- newTVarIO 0 - asDrt <- newTVarIO 0 - asDvr <- newTVarIO 0 - asDml <- newTVarIO 0 - asSwp <- newTVarIO 0 - asBal <- newTVarIO 0 - asOky <- newTVarIO 0 - pure Stat{statAmes = AmesStat{..}} - -bump :: MonadIO m => TVar Word -> m () -bump s = atomically $ bump' s - -bump' :: TVar Word -> STM () -bump' s = modifyTVar' s (+ 1) - -type RenderedStat = [Text] - -renderStat :: MonadIO m => Stat -> m RenderedStat -renderStat Stat{statAmes = AmesStat{..}} = - sequence - [ pure "stat:" - , pure " ames:" - , (" udp ingress: " <>) <$> tshow <$> readTVarIO asUdp - , (" udp queue evict: " <>) <$> tshow <$> readTVarIO asUqf - , (" udp recv fail: " <>) <$> tshow <$> readTVarIO asUdf - , (" udp dropped non-ipv4: " <>) <$> tshow <$> readTVarIO asUi6 - , (" driver ingress: " <>) <$> tshow <$> readTVarIO asRcv - , (" enqueued for serf: " <>) <$> tshow <$> readTVarIO asSup - , (" sent to serf: " <>) <$> tshow <$> readTVarIO asSrf - , (" serf queue evict: " <>) <$> tshow <$> readTVarIO asQuf - , (" forwarded: " <>) <$> tshow <$> readTVarIO asFwd - , (" dropped (unroutable): " <>) <$> tshow <$> readTVarIO asDrt - , (" dropped (wrong version): " <>) <$> tshow <$> readTVarIO asDvr - , (" dropped (malformed): " <>) <$> tshow <$> readTVarIO asDml - , (" serf swapped: " <>) <$> tshow <$> readTVarIO asSwp - , (" serf bailed: " <>) <$> tshow <$> readTVarIO asBal - , (" serf okay: " <>) <$> tshow <$> readTVarIO asOky - ] - diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Term.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Term.hs deleted file mode 100644 index 0f86dd253..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Term.hs +++ /dev/null @@ -1,675 +0,0 @@ -{-| - Terminal Driver --} -module Urbit.Vere.Term - ( module Term - , localClient - , connectToRemote - , runTerminalClient - , connClient - , term - , term' - ) where - -import Data.Char -import Foreign.Marshal.Alloc -import Foreign.Ptr -import Foreign.Storable -import RIO.FilePath -import System.Posix.IO -import System.Posix.Terminal -import Urbit.Arvo -import Urbit.King.App -import Urbit.Noun.Time -import Urbit.Prelude hiding (getCurrentTime) -import Urbit.Vere.Pier.Types - -import Data.List ((!!)) -import RIO.Directory (createDirectoryIfMissing) -import Urbit.King.API (readPortsFile) -import Urbit.Vere.Stat (RenderedStat) -import Urbit.TermSize (TermSize(TermSize)) -import Urbit.Vere.Term.API (Client(Client), ClientTake(..)) - -import qualified Data.Set as S -import qualified Data.ByteString.Internal as BS -import qualified Data.ByteString.UTF8 as BS -import qualified System.Console.ANSI as ANSI -import qualified Urbit.TermSize as T -import qualified Urbit.Vere.NounServ as Serv -import qualified Urbit.Vere.Term.API as Term -import qualified Urbit.Vere.Term.Render as T - - --- Types ----------------------------------------------------------------------- - --- | All stateful data in the printing to stdOutput. -data LineState = LineState - { lsLine :: Text - , lsCurPos :: Int - , lsSpinTimer :: Maybe (Async ()) - , lsSpinCause :: Maybe Text - , lsSpinFirstRender :: Bool - , lsSpinFrame :: Int - , lsPrevEndTime :: Wen - } - --- | A record used in reading data from stdInput. -data ReadData = ReadData - { rdBuf :: Ptr Word8 - , rdEscape :: Bool - , rdBracket :: Bool - , rdUTF8 :: ByteString - , rdUTF8width :: Int - } - --- | Private data to the Client that we keep around for stop(). -data Private = Private - { pReaderThread :: Async () - , pWriterThread :: Async () - , pPreviousConfiguration :: TerminalAttributes - } - --- Utils ----------------------------------------------------------------------- - -blewEvent :: Word -> Word -> Ev -blewEvent w h = EvBlip $ BlipEvTerm $ TermEvBlew (UD 1, ()) w h - -initialHail :: Ev -initialHail = EvBlip $ BlipEvTerm $ TermEvHail (UD 1, ()) () - --- Version one of this is punting on the ops_u.dem flag: whether we're running --- in daemon mode. - --------------------------------------------------------------------------------- - -rioAllocaBytes :: (MonadIO m, MonadUnliftIO m) - => Int -> (Ptr a -> m b) -> m b -rioAllocaBytes size action = - withRunInIO $ \run -> - allocaBytes size $ \x -> run (action x) - -{-| - Because of legacy reasons, some file operations are in the terminal - driver. These should be filtered out and handled locally instead of - in any abstractly connected terminal. --} -isTerminalBlit :: Blit -> Bool -isTerminalBlit (Sav _ _) = False -isTerminalBlit (Sag _ _) = False -isTerminalBlit _ = True - --------------------------------------------------------------------------------- - -connClient :: Serv.Conn ClientTake [Term.Ev] -> Client -connClient c = Client - { give = Serv.cSend c - , take = Serv.cRecv c - } - -connectToRemote :: forall e. HasLogFunc e - => Port - -> Client - -> RAcquire e (Async (), Async ()) -connectToRemote port local = mkRAcquire start stop - where - stop (x, y) = cancel x >> cancel y - start = do - Serv.Client{..} <- Serv.wsClient "/terminal/0" (fromIntegral port) - - -- TODO XX Handle disconnect more cleanly. - ferry <- async $ forever $ atomically $ asum - [ Term.take local >>= \case - Nothing -> empty - Just ev -> Serv.cSend cConn ev - , Serv.cRecv cConn >>= \case - Nothing -> empty - Just ev -> Term.give local ev - ] - - pure (ferry, cAsync) - -data HackConfigDir = HCD { _hcdPax :: FilePath } -makeLenses ''HackConfigDir -instance HasPierPath HackConfigDir where pierPathL = hcdPax - -runTerminalClient :: forall e. HasLogFunc e => FilePath -> RIO e () -runTerminalClient pier = runRAcquire $ do - mPort <- runRIO (HCD pier) readPortsFile - port <- maybe (error "Can't connect") pure mPort - mExit <- io newEmptyTMVarIO - cli <- localClient (putTMVar mExit ()) - (tid, sid) <- connectToRemote (Port $ fromIntegral port) cli - atomically $ waitSTM tid <|> waitSTM sid <|> takeTMVar mExit - - where - runRAcquire :: RAcquire e () -> RIO e () - runRAcquire act = rwith act $ const $ pure () - - --- Spinner --------------------------------------------------------------------- - --- Call an STM action after delay of `first` microseconds and then every --- `rest` microseconds after that. -repeatedly :: Int -> Int -> STM () -> IO () -repeatedly first rest action = do - threadDelay first - forever $ do - atomically action - threadDelay rest - -spinners :: [Text] -spinners = ["|", "/", "-", "\\"] - -leftBracket, rightBracket :: Text -leftBracket = "«" -rightBracket = "»" - -_spin_cool_us, _spin_warm_us, _spin_rate_us, _spin_idle_us :: Integral i => i -_spin_cool_us = 500000 -_spin_warm_us = 50000 -_spin_rate_us = 250000 -_spin_idle_us = 500000 - - --- Client ---------------------------------------------------------------------- - -{-| - Initializes the generalized input/output parts of the terminal. --} -localClient :: forall e. HasLogFunc e - => STM () - -> RAcquire e Client -localClient doneSignal = fst <$> mkRAcquire start stop - where - start :: HasLogFunc e => RIO e (Client, Private) - start = do - tsWriteQueue <- newTQueueIO :: RIO e (TQueue [Term.Ev]) - spinnerMVar <- newEmptyTMVarIO :: RIO e (TMVar ()) - - -- Track the terminal size, keeping track of the size of the local - -- terminal for our own printing, as well as putting size changes into an - -- event queue so we can send changes to the terminal muxing system. - tsizeTVar <- newTVarIO (TermSize 80 24) -- Value doesn't matter. - tsSizeChange <- newEmptyTMVarIO - io $ T.liveTermSize (\ts -> atomically $ do - -- We keep track of the console's local size for - -- our own tank washing. - writeTVar tsizeTVar ts - - -- We queue up changes so we can broadcast them - -- to the muxing client. - putTMVar tsSizeChange ts) - - pWriterThread <- asyncBound - (writeTerminal tsWriteQueue spinnerMVar tsizeTVar) - - pPreviousConfiguration <- io $ getTerminalAttributes stdInput - - -- Create a new configuration where we put the terminal in raw mode and - -- disable a bunch of preprocessing. - let newTermSettings = flip withTime 0 - $ flip withMinInput 1 - $ foldl' withoutMode pPreviousConfiguration - $ disabledFlags - - io $ setTerminalAttributes stdInput newTermSettings Immediately - - tsReadQueue <- newTQueueIO - pReaderThread <- asyncBound - (readTerminal tsReadQueue tsWriteQueue (bell tsWriteQueue)) - - let client = Client { take = Just <$> asum - [ readTQueue tsReadQueue <&> ClientTakeBelt, - takeTMVar tsSizeChange <&> ClientTakeSize - ] - , give = writeTQueue tsWriteQueue - } - - pure (client, Private{..}) - - stop :: HasLogFunc e - => (Client, Private) -> RIO e () - stop (Client{..}, Private{..}) = do - -- Note that we don't `cancel pReaderThread` here. This is a deliberate - -- decision because fdRead calls into a native function which the runtime - -- can't kill. If we were to cancel here, the internal `waitCatch` would - -- block until the next piece of keyboard input. Since this only happens - -- at shutdown, just leak the file descriptor. - cancel pWriterThread - - -- inject one final newline, as we're usually on the prompt. - putStr "\r\n" - - -- take the terminal out of raw mode - io $ setTerminalAttributes stdInput pPreviousConfiguration Immediately - - {- - A list of terminal flags that we disable. - - TODO: Terminal library missing CSIZE? - -} - disabledFlags :: [TerminalMode] - disabledFlags = [ StartStopOutput - , KeyboardInterrupts - , EnableEcho - , EchoLF - , ProcessInput - , ExtendedFunctions - , MapCRtoLF - , CheckParity - , StripHighBit - , EnableParity - , ProcessOutput - ] - - - -- Writes data to the terminal. Both the terminal reading, normal logging, - -- and effect handling can all emit bytes which go to the terminal. - writeTerminal :: TQueue [Term.Ev] -> TMVar () -> TVar TermSize -> RIO e () - writeTerminal q spinner termSizeVar = do - currentTime <- io $ now - loop (LineState "" 0 Nothing Nothing True 0 currentTime) - where - writeBlank :: LineState -> RIO e LineState - writeBlank ls = putStr "\r\n" $> ls - - writeTrace :: LineState -> Text -> RIO e LineState - writeTrace ls p = do - putStr "\r" - T.clearLine - putStr p - termRefreshLine ls - - writeSlog :: LineState -> (Atom, Tank) -> RIO e LineState - writeSlog ls slog = do - putStr "\r" - T.clearLine - TermSize width _ <- atomically $ readTVar termSizeVar - -- TODO: Ignoring priority for now. Priority changes the color of, - -- and adds a prefix of '>' to, the output. - let lines = fmap unTape $ wash (WashCfg 0 width) $ tankTree $ snd slog - forM lines $ \line -> putStr (line <> "\r\n") - termRefreshLine ls - - {- - Figure out how long to wait to show the spinner. When we - don't have a vane name to display, we assume its a user - action and trigger immediately. Otherwise, if we receive an - event shortly after a previous spin, use a shorter delay to - avoid giving the impression of a half-idle system. - -} - doSpin :: LineState -> Maybe Text -> RIO e LineState - doSpin ls@LineState{..} mTxt = do - maybe (pure ()) cancel lsSpinTimer - - current <- io $ now - delay <- pure $ case mTxt of - Nothing -> 0 - Just _ -> - if (gap current lsPrevEndTime ^. microSecs) < _spin_idle_us - then _spin_warm_us - else _spin_cool_us - - spinTimer <- io $ async - $ repeatedly delay _spin_rate_us - $ void - $ tryPutTMVar spinner () - - pure $ ls { lsSpinTimer = Just spinTimer - , lsSpinCause = mTxt - , lsSpinFirstRender = True - } - - unspin :: LineState -> RIO e LineState - unspin ls@LineState{..} = do - maybe (pure ()) cancel lsSpinTimer - -- We do a final flush of the spinner mvar to ensure we don't - -- have a lingering signal which will redisplay the spinner after - -- we call termRefreshLine below. - atomically $ tryTakeTMVar spinner - - -- If we ever actually ran the spinner display callback, we need - -- to force a redisplay of the command prompt. - ls <- if not lsSpinFirstRender || True - then termRefreshLine ls - else pure ls - - endTime <- io $ now - pure $ ls { lsSpinTimer = Nothing, lsPrevEndTime = endTime } - - execEv :: LineState -> Term.Ev -> RIO e LineState - execEv ls = \case - Term.Blits bs -> foldM writeBlit ls bs - Term.Trace p -> writeTrace ls (unCord p) - Term.Slog s -> writeSlog ls s - Term.Blank -> writeBlank ls - Term.Spinr (Just txt) -> doSpin ls (unCord <$> txt) - Term.Spinr Nothing -> unspin ls - - -- TODO What does this do? - spin :: LineState -> RIO e LineState - spin ls@LineState{..} = do - let spinner = (spinners !! lsSpinFrame) ++ case lsSpinCause of - Nothing -> "" - Just str -> leftBracket ++ str ++ rightBracket - - putStr (spinner <> pack (ANSI.cursorBackwardCode (length spinner))) - - let newFrame = (lsSpinFrame + 1) `mod` length spinners - - pure $ ls { lsSpinFirstRender = False - , lsSpinFrame = newFrame - } - - loop :: LineState -> RIO e () - loop ls = do - join $ atomically $ asum - [ readTQueue q >>= pure . (foldM execEv ls >=> loop) - , takeTMVar spinner >> pure (spin ls >>= loop) - ] - - -- Writes an individual blit to the screen - writeBlit :: LineState -> Blit -> RIO e LineState - writeBlit ls = \case - Bel () -> T.soundBell $> ls - Clr () -> do T.clearScreen - termRefreshLine ls - Hop w -> termShowCursor ls (fromIntegral w) - Klr s -> do ls2 <- termShowClear ls - termShowStub ls2 s - Lin c -> do ls2 <- termShowClear ls - termShowLine ls2 (pack c) - Mor () -> termShowMore ls - Sag path noun -> pure ls - Sav path atom -> pure ls - Url url -> pure ls - - termRenderDeco :: Deco -> Char - termRenderDeco = \case - DecoBr -> '1' - DecoUn -> '4' - DecoBl -> '5' - DecoNull -> '0' - - termRenderTint :: Tint -> [Char] - termRenderTint = \case - TintK -> ['0'] - TintR -> ['1'] - TintG -> ['2'] - TintY -> ['3'] - TintB -> ['4'] - TintM -> ['5'] - TintC -> ['6'] - TintW -> ['7'] - TintNull -> ['9'] - TintTrue r g b -> - mconcat ["8;2;", show r, ";", show g, ";", show b] - - -- Wraps the appropriate escape sequence around a piece of styled text - termRenderStubSegment :: Stye -> [Char] -> [Char] - termRenderStubSegment Stye {..} tape = - case (S.null decoset, back, fore) of - (True, TintNull, TintNull) -> tape - _ -> styled - where - decoset = setFromHoonSet deco - escape = [chr 27, '['] - - styles = intercalate ";" $ filter (not . null) - [ intersperse ';' $ fmap termRenderDeco $ toList decoset - , case back of - TintNull -> [] - tint -> '4' : termRenderTint tint - , case fore of - TintNull -> [] - tint -> '3' : termRenderTint tint - ] - - styled = mconcat [escape, styles, "m", tape, escape, "0m"] - - -- Displays and sets styled text as the current line - termShowStub :: LineState -> Stub -> RIO e LineState - termShowStub ls (Stub s) = do - let visualLength = sum $ fmap (length . snd) s - let outText = pack $ mconcat $ fmap (uncurry termRenderStubSegment) s - putStr outText - pure ls { lsLine = outText, lsCurPos = visualLength } - - -- Moves the cursor to the requested position - termShowCursor :: LineState -> Int -> RIO e LineState - termShowCursor ls@LineState{..} {-line pos)-} newPos = do - if newPos < lsCurPos then do - T.cursorLeft (lsCurPos - newPos) - pure ls { lsCurPos = newPos } - else if newPos > lsCurPos then do - T.cursorRight (newPos - lsCurPos) - pure ls { lsCurPos = newPos } - else - pure ls - - -- Moves the cursor left without any mutation of the LineState. Used only - -- in cursor spinning. - _termSpinnerMoveLeft :: Int -> RIO e () - _termSpinnerMoveLeft = T.cursorLeft - - -- Displays and sets the current line - termShowLine :: LineState -> Text -> RIO e LineState - termShowLine ls newStr = do - putStr newStr - pure ls { lsLine = newStr, lsCurPos = (length newStr) } - - termShowClear :: LineState -> RIO e LineState - termShowClear ls = do - putStr "\r" - T.clearLine - pure ls { lsLine = "", lsCurPos = 0 } - - -- New Current Line - termShowMore :: LineState -> RIO e LineState - termShowMore ls = do - putStr "\r\n" - pure ls { lsLine = "", lsCurPos = 0 } - - -- Redraw the current LineState, maintaining the current curpos - termRefreshLine :: LineState -> RIO e LineState - termRefreshLine ls@LineState{lsCurPos,lsLine} = do - ls <- termShowClear ls - ls <- termShowLine ls lsLine - termShowCursor ls lsCurPos - - -- ring my bell - bell :: TQueue [Term.Ev] -> RIO e () - bell q = atomically $ writeTQueue q $ [Term.Blits [Bel ()]] - - -- Reads data from stdInput and emit the proper effect - -- - -- This entire path is a divergence from how term.c does things, - -- probably. First, the vtime is 0, not 1 in term.c. So (IIUC), we'll - -- always have a latency of 1/10 of a second. - -- - -- A better way to do this would be to get some sort of epoll on stdInput, - -- since that's kinda closer to what libuv does? - readTerminal :: forall e. HasLogFunc e - => TQueue Belt -> TQueue [Term.Ev] -> (RIO e ()) -> RIO e () - readTerminal rq wq bell = - rioAllocaBytes 1 $ \ buf -> loop (ReadData buf False False mempty 0) - where - loop :: ReadData -> RIO e () - loop rd@ReadData{..} = do - -- The problem with using fdRead raw is that it will text encode - -- things like \ESC instead of 27. That makes it broken for our - -- purposes. - -- - io (try $ fdReadBuf stdInput rdBuf 1) >>= \case - Left (e :: IOException) -> do - -- Ignore EAGAINs when doing reads - loop rd - Right 0 -> loop rd - Right _ -> do - w <- io $ peek rdBuf - -- print ("{" ++ (show w) ++ "}") - let c = BS.w2c w - if rdEscape then - if rdBracket then do - case c of - 'A' -> sendBelt $ Aro U - 'B' -> sendBelt $ Aro D - 'C' -> sendBelt $ Aro R - 'D' -> sendBelt $ Aro L - _ -> bell - loop rd { rdEscape = False, rdBracket = False} - else if isAsciiLower c then do - sendBelt $ Met $ Cord $ pack [c] - loop rd { rdEscape = False } - else if c == '.' then do - sendBelt $ Met $ Cord "dot" - loop rd { rdEscape = False } - else if w == 8 || w == 127 then do - sendBelt $ Met $ Cord "bac" - loop rd { rdEscape = False } - else if c == '[' || c == '0' then do - loop rd { rdBracket = True } - else do - bell - loop rd { rdEscape = False } - else if rdUTF8width /= 0 then do - -- continue reading into the utf8 accumulation buffer - rd@ReadData{..} <- pure rd { rdUTF8 = snoc rdUTF8 w } - if length rdUTF8 /= rdUTF8width then loop rd - else do - case BS.decode rdUTF8 of - Nothing -> - error "empty utf8 accumulation buffer" - Just (c, bytes) | bytes /= rdUTF8width -> - error "utf8 character size mismatch?!" - Just (c, bytes) -> sendBelt $ Txt $ Tour $ [c] - loop rd { rdUTF8 = mempty, rdUTF8width = 0 } - else if w >= 32 && w < 127 then do - sendBelt $ Txt $ Tour $ [c] - loop rd - else if w == 0 then do - bell - loop rd - else if w == 8 || w == 127 then do - sendBelt $ Bac () - loop rd - else if w == 13 then do - sendBelt $ Ret () - loop rd - else if w == 3 then do - -- ETX (^C) - logInfo $ "Ctrl-c interrupt" - atomically $ do - writeTQueue wq [Term.Trace "interrupt\r\n"] - writeTQueue rq $ Ctl $ Cord "c" - loop rd - else if w <= 26 then do - case pack [BS.w2c (w + 97 - 1)] of - c -> do sendBelt $ Ctl $ Cord c - loop rd - else if w == 27 then do - loop rd { rdEscape = True } - else do - -- start the utf8 accumulation buffer - loop rd { rdUTF8 = singleton w, - rdUTF8width = if w < 224 then 2 - else if w < 240 then 3 - else 4 } - - sendBelt :: HasLogFunc e => Belt -> RIO e () - sendBelt b = do - -- logDebug $ displayShow ("terminalBelt", b) - atomically $ writeTQueue rq b - - --------------------------------------------------------------------------------- - -{-| - Terminal Driver - - Until blew/hail events succeeds, ignore effects. - Wait until blew/hail event callbacks invoked. - If success, signal success. - If failure, try again several times. - If still failure, bring down ship. - Don't wait for other drivers to boot - Begin normal operation (start accepting requests) --} -term' - :: HasPierEnv e - => (TermSize, Client) - -> IO RenderedStat - -> IO () - -> RIO e ([Ev], RAcquire e (DriverApi TermEf)) -term' (tsize, client) stat serfSIGINT = do - let TermSize wi hi = tsize - initEv = [blewEvent wi hi, initialHail] - - pure (initEv, runDriver) - where - runDriver = do - env <- ask - ventQ :: TQueue EvErr <- newTQueueIO - diOnEffect <- term env (tsize, client) (writeTQueue ventQ) stat serfSIGINT - - let diEventSource = fmap RRWork <$> tryReadTQueue ventQ - - pure (DriverApi {..}) - -{-| - Terminal Driver --} -term :: forall e. (HasPierEnv e) - => e - -> (TermSize, Client) - -> (EvErr -> STM ()) - -> IO RenderedStat - -> IO () - -> RAcquire e (TermEf -> IO ()) -term env (tsize, Client{..}) plan stat serfSIGINT = runTerm - where - runTerm :: RAcquire e (TermEf -> IO ()) - runTerm = do - tim <- mkRAcquire (async readLoop) cancel - pure (runRIO env . handleEffect) - - {- - Because our terminals are always `Demux`ed, we don't have to - care about disconnections. - -} - readLoop :: RIO e () - readLoop = forever $ do - atomically take >>= \case - Nothing -> pure () - Just (ClientTakeBelt b) -> do - when (b == Ctl (Cord "c")) $ do - io serfSIGINT - let beltEv = EvBlip $ BlipEvTerm $ TermEvBelt (UD 1, ()) $ b - let beltFailed _ = pure () - atomically $ plan (EvErr beltEv beltFailed) - Just (ClientTakeSize ts@(TermSize w h)) -> do - let blewFailed _ = pure () - atomically $ plan (EvErr (blewEvent w h) blewFailed) - - handleEffect :: TermEf -> RIO e () - handleEffect = \case - TermEfInit _ _ -> pure () - TermEfMass _ _ -> pure () - TermEfLogo _ _ -> atomically =<< view killPierActionL - TermEfBlit _ blits -> do - let (termBlits, fsWrites) = partition isTerminalBlit blits - atomically $ give [Term.Blits termBlits] - for_ fsWrites handleFsWrite - - handleFsWrite :: Blit -> RIO e () - handleFsWrite (Sag path noun) = performPut path (jamBS noun) - handleFsWrite (Sav path atom) = performPut path (atomBytes atom) - handleFsWrite _ = pure () - - performPut :: Path -> ByteString -> RIO e () - performPut path bs = do - pierPath <- view pierPathL - let putOutFile = pierPath ".urb" "put" (pathToFilePath path) - createDirectoryIfMissing True (takeDirectory putOutFile) - writeFile putOutFile bs diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Term/API.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Term/API.hs deleted file mode 100644 index 7e65d49e5..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Term/API.hs +++ /dev/null @@ -1,80 +0,0 @@ -{-| - Interface Terminal API. --} -module Urbit.Vere.Term.API (Ev(..), - Client(..), - ClientTake(..), - trace, - slog, - spin, - stopSpin) where - -import Urbit.Prelude hiding (trace) - -import Urbit.Arvo (Belt, Blit) - -import Control.Monad.Fail (fail) -import Urbit.TermSize - --- External Types -------------------------------------------------------------- - -{-| - Input Event for terminal driver: - - %blits -- list of blits from arvo. - %trace -- stderr line from runtime. - %slog -- nock worker logging with priority - %blank -- print a blank line - %spinr -- Start or stop the spinner --} -data Ev = Blits ![Blit] - | Trace !Cord - | Slog !(Atom, Tank) - | Blank - | Spinr !(Maybe (Maybe Cord)) - deriving (Show) - -data ClientTake - = ClientTakeBelt Belt - | ClientTakeSize TermSize - deriving (Show) - -instance ToNoun ClientTake where - toNoun = \case - ClientTakeBelt b -> toNoun $ (Cord "belt", b) - ClientTakeSize (TermSize w h) -> toNoun $ (Cord "size", (w, h)) - -instance FromNoun ClientTake where - parseNoun n = named "ClientTake" $ do - (Cord name, rest) <- parseNoun n - case name of - "belt" -> do - b <- parseNoun rest - pure (ClientTakeBelt b) - "size" -> do - (w, h) <- parseNoun rest - pure (ClientTakeSize (TermSize w h)) - _ -> fail "weird client take" - - -data Client = Client - { take :: STM (Maybe ClientTake) - , give :: [Ev] -> STM () - } - -deriveNoun ''Ev - - --- Utilities ------------------------------------------------------------------- - -trace :: Client -> Text -> STM () -trace ts = give ts . singleton . Trace . Cord - -slog :: Client -> (Atom, Tank) -> STM () -slog ts = give ts . singleton . Slog - -spin :: Client -> Maybe Text -> STM () -spin ts = give ts . singleton . Spinr . Just . fmap Cord - -stopSpin :: Client -> STM () -stopSpin ts = give ts [Spinr Nothing] diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Demux.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Demux.hs deleted file mode 100644 index e9e774867..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Demux.hs +++ /dev/null @@ -1,132 +0,0 @@ -{-| - This allows multiple (zero or more) terminal clients to connect to - the *same* logical arvo terminal. Terminals that connect will be - given full event history since the creation of the demuxer. --} - -module Urbit.Vere.Term.Demux (Demux, - mkDemux, - addDemux, - useDemux, - curDemuxSize) where - -import Urbit.Prelude -import Urbit.TermSize -import Urbit.Vere.Term.API (Client(Client), ClientTake(..)) - -import qualified Urbit.Vere.Term.API as Term -import qualified Urbit.Vere.Term.Logic as Logic - - --- External -------------------------------------------------------------------- - -data KeyedSet a = KeyedSet - { _ksTable :: IntMap a - , _nextKey :: Int - } - -instance Semigroup (KeyedSet a) where - KeyedSet t1 k1 <> KeyedSet t2 k2 = KeyedSet (t1 <> t2) (max k1 k2) - -instance Monoid (KeyedSet a) where - mempty = KeyedSet mempty 0 - -ksInsertKey :: a -> KeyedSet a -> (Int, KeyedSet a) -ksInsertKey x (KeyedSet tbl nex) = - (nex, KeyedSet (insertMap nex x tbl) (succ nex)) - -ksInsert :: a -> KeyedSet a -> KeyedSet a -ksInsert x s = snd $ ksInsertKey x s - -ksDelete :: Int -> KeyedSet a -> KeyedSet a -ksDelete k (KeyedSet t n) = KeyedSet (deleteMap k t) n - --------------------------------------------------------------------------------- - -data Demux = Demux - { dConns :: TVar (KeyedSet Client) - , dSizes :: TVar (IntMap TermSize) - , dStash :: TVar Logic.St - , dMinSize :: TVar TermSize - } - -mkDemux :: TermSize -> STM Demux -mkDemux ts = Demux <$> - newTVar mempty <*> - newTVar mempty <*> - newTVar Logic.init <*> - newTVar ts - -addDemux :: Client -> Demux -> STM () -addDemux conn Demux{..} = do - modifyTVar' dConns (ksInsert conn) - stash <- readTVar dStash - Term.give conn (Logic.toTermEv <$> Logic.drawState stash) - -useDemux :: Demux -> Client -useDemux d = Client { give = dGive d, take = dTake d } - -curDemuxSize :: Demux -> STM TermSize -curDemuxSize Demux{..} = readTVar dMinSize - --- Internal -------------------------------------------------------------------- - -steps :: [Term.Ev] -> Logic.St -> Logic.St -steps termEvs st = foldl' Logic.step st $ concat $ Logic.fromTermEv <$> termEvs - -dGive :: Demux -> [Term.Ev] -> STM () -dGive Demux{..} evs = do - modifyTVar' dStash (force $ steps evs) - conns <- readTVar dConns - for_ (_ksTable conns) $ \c -> Term.give c evs - -{-| - Returns Nothing if any connected client disconnected. A `Demux` - terminal lives forever, so you can continue to call this after it - returns `Nothing`. - - If there are no attached clients, this will not return until one - is attached. --} -dTake :: Demux -> STM (Maybe ClientTake) -dTake Demux{..} = do - conns <- readTVar dConns - waitForTake conns >>= \case - (_, Just (ClientTakeBelt b)) -> pure (Just (ClientTakeBelt b)) - - (k, Just (ClientTakeSize s)) -> do - newSizeTree <- modifyAndReadTVar' dSizes (insertMap k s) - maybeUpdateTerminalSize newSizeTree - - (k, Nothing) -> do - writeTVar dConns (ksDelete k conns) - newSizeTree <- modifyAndReadTVar' dSizes (deleteMap k) - maybeUpdateTerminalSize newSizeTree - - where - waitForTake :: KeyedSet Client -> STM (Int, Maybe ClientTake) - waitForTake ks = asum - $ fmap (\(k,c) -> (k,) <$> Term.take c) - $ mapToList - $ _ksTable ks - - maybeUpdateTerminalSize :: IntMap TermSize -> STM (Maybe ClientTake) - maybeUpdateTerminalSize newSizeTree = do - let termSize = foldr minTermSize (TermSize 1024 1024) newSizeTree - curSize <- readTVar dMinSize - if curSize == termSize - then pure Nothing - else do - writeTVar dMinSize termSize - pure $ Just (ClientTakeSize termSize) - - modifyAndReadTVar' :: TVar a -> (a -> a) -> STM a - modifyAndReadTVar' var fun = do - pre <- readTVar var - let !post = fun pre - writeTVar var post - pure post - - minTermSize :: TermSize -> TermSize -> TermSize - minTermSize (TermSize wa ha) (TermSize wb hb) = - TermSize (min wa wb) (min ha hb) diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Logic.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Logic.hs deleted file mode 100644 index 770742a68..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Logic.hs +++ /dev/null @@ -1,159 +0,0 @@ -{-| - Tracks terminal state so that new terminal connections can be brought - up to speed. --} -module Urbit.Vere.Term.Logic - ( SpinnerCause(..), St, Ev(..), Ef(..) - , init - , step - , drawState - , fromTermEv - , toTermEv - ) where - -import Urbit.Prelude hiding (init) - -import Data.Sequence (Seq((:<|))) - -import qualified Urbit.Arvo as Arvo -import qualified Urbit.Vere.Term.API as Term - - --------------------------------------------------------------------------------- - -data SpinnerCause = User | Event Text - deriving (Show) - -type SpinnerState = Maybe SpinnerCause - -{-| - %line -- Output a line above the edit line. - %spin -- Set the spinner state. - %bell -- Ring a bell (no change to the state). - %draw -- Redraw the current line (no change to the state). - %move -- Move the cursor position. - %edit -- Set the edit line, moving the cursor to the end. - %more -- Write the edit line to history, and clear it. --} -data Ev - = EvLine Text - | EvSlog (Atom, Tank) - | EvSpin SpinnerState - | EvMove Word - | EvBell - | EvDraw - | EvEdit Text - | EvMore - deriving (Show) - -data Ef - = EfClear - | EfWrite Text - | EfShift Int - | EfRing - | EfSpin SpinnerState - deriving (Show) - -data History - = HistoryText !Text - | HistorySlog !(Atom, Tank) - deriving (Show) - -data St = St - { sHistory :: !(Seq History) - , sLine :: !Text - , sCurPos :: !Word - , sSpinner :: !SpinnerState - } - deriving (Show) - --------------------------------------------------------------------------------- - -init :: St -init = St mempty "" 0 Nothing - -{-| - When we process `EvMore`, we need to append a newline to the end of - the current line. During normal play, the ENTER key inserts the - newline for us, so we need to recreate that newline when we rebuild - the state for a new terminal connection. --} -step :: St -> Ev -> St -step st@St{..} = \case - EvLine t -> st & recordText t - EvSlog s -> st & recordSlog s - EvSpin s -> st { sSpinner = s } - EvMove w -> st { sCurPos = min w (word $ length sLine) } - EvEdit t -> st { sLine = t, sCurPos = word (length t) } - EvMore -> st { sLine = "", sCurPos = 0 } & recordText (sLine <> "\n") - EvBell -> st - EvDraw -> st - where - word :: Integral i => i -> Word - word = fromIntegral - - recordText :: Text -> St -> St - recordText !t st@St{..} = st { - sHistory = trim (sHistory |> (HistoryText t)) - } - - recordSlog :: (Atom, Tank) -> St -> St - recordSlog !t st@St{..} = st { - sHistory = trim (sHistory |> (HistorySlog t)) - } - - trim :: Seq a -> Seq a - trim s | length s < 20 = s - trim (_ :<| s) = s - trim s = s - -drawState :: St -> [Ev] -drawState St{..} = hist <> out <> cur <> spin - where - hist = drawHistory <$> toList sHistory - out = if null sLine then [] else [EvEdit sLine] - cur = if 0 == sCurPos then [] else [EvMove $ fromIntegral $ sCurPos] - spin = maybe [] (singleton . EvSpin . Just) sSpinner - - drawHistory (HistoryText t) = EvLine t - drawHistory (HistorySlog s) = EvSlog s - - --- Conversion ------------------------------------------------------------------ - -fromBlit :: Arvo.Blit -> Maybe Ev -fromBlit = \case - Arvo.Hop w -> Just $ EvMove $ fromIntegral w - Arvo.Bel () -> Just EvBell - Arvo.Clr () -> Just EvDraw - Arvo.Lin s -> Just $ EvEdit (pack s) - Arvo.Mor () -> Just EvMore - _ -> Nothing - -toCause :: Maybe Cord -> SpinnerCause -toCause Nothing = User -toCause (Just (Cord c)) = Event c - -fromCause :: SpinnerCause -> Maybe Cord -fromCause User = Nothing -fromCause (Event t) = Just (Cord t) - -fromTermEv :: Term.Ev -> [Ev] -fromTermEv = \case - Term.Blits bs -> catMaybes (fromBlit <$> bs) - Term.Trace t -> [EvLine $ unCord t] - Term.Blank -> [EvLine ""] - Term.Spinr s -> [EvSpin $ toCause <$> s] - Term.Slog s -> [EvSlog s] - -toTermEv :: Ev -> Term.Ev -toTermEv = \case - EvLine "" -> Term.Blank - EvLine t -> Term.Trace (Cord t) - EvSlog s -> Term.Slog s - EvSpin s -> Term.Spinr (fromCause <$> s) - EvMove w -> Term.Blits [Arvo.Hop $ fromIntegral w] - EvBell -> Term.Blits [Arvo.Bel ()] - EvDraw -> Term.Blits [Arvo.Clr ()] - EvEdit t -> Term.Blits [Arvo.Lin $ unpack t] - EvMore -> Term.Blits [Arvo.Mor ()] diff --git a/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Render.hs b/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Render.hs deleted file mode 100644 index f0982dfbe..000000000 --- a/pkg/hs/urbit-king/lib/Urbit/Vere/Term/Render.hs +++ /dev/null @@ -1,32 +0,0 @@ -{-| - Terminal Driver --} -module Urbit.Vere.Term.Render - ( clearScreen - , clearLine - , cursorRight - , cursorLeft - , soundBell - ) where - -import Urbit.Prelude - -import qualified System.Console.ANSI as ANSI - - --- Types ----------------------------------------------------------------------- - -clearScreen :: MonadIO m => m () -clearScreen = liftIO $ ANSI.clearScreen - -clearLine :: MonadIO m => m () -clearLine = liftIO $ ANSI.clearLine - -soundBell :: MonadIO m => m () -soundBell = liftIO $ putStr "\a" - -cursorLeft :: MonadIO m => Int -> m () -cursorLeft = liftIO . ANSI.cursorBackward - -cursorRight :: MonadIO m => Int -> m () -cursorRight = liftIO . ANSI.cursorForward diff --git a/pkg/hs/urbit-king/package.yaml b/pkg/hs/urbit-king/package.yaml deleted file mode 100644 index 4e91c4ccb..000000000 --- a/pkg/hs/urbit-king/package.yaml +++ /dev/null @@ -1,184 +0,0 @@ -name: urbit-king -version: 1.8 -license: MIT -license-file: LICENSE -data-files: - - test/gold/hoontree.gold - - test/gold/hoontree.pill - -library: - source-dirs: lib - ghc-options: - - -Wall - - -Werror - - -Wno-type-defaults - - -Wno-unused-matches - - -Wno-name-shadowing - - -Wno-unused-do-bind - - -O2 - -tests: - urbit-king-tests: - source-dirs: test - main: Main.hs - dependencies: urbit-king - ghc-options: - - -threaded - - -rtsopts - - -with-rtsopts=-N - -dependencies: - - aeson - - ansi-terminal - - async - - base - - base-unicode-symbols - - binary - - bytestring - - case-insensitive - - cereal - - classy-prelude - - conduit - - containers - - cryptohash-sha256 - - cryptohash-sha512 - - data-default - - data-fix - - directory - - ed25519 - - entropy - - exceptions - - extra - - filepath - - fixed-vector - - flat - - ghc-prim - - Glob - - hashable - - hashtables - - heap - - hexstring - - http-client - - http-client-tls - - http-types - - integer-gmp - - iproute - - largeword - - lens - - lock-file - - megaparsec - - memory - - mtl - - multimap - - murmur3 - - natpmp-static - - network - - optparse-applicative - - para - - pem - - pretty-show - - primitive - - process - - psqueues - - QuickCheck - - racquire - - random - - regex-tdfa - - resourcet - - rio - - rio-orphans - - semigroups - - smallcheck - - stm - - stm-chans - - tasty - - tasty-golden - - tasty-hunit - - tasty-quickcheck - - tasty-th - - template-haskell - - terminal-progress-bar - - text - - these - - time - - tls - - transformers - - unix - - unliftio - - unliftio-core - - unordered-containers - - urbit-atom - - urbit-eventlog-lmdb - - urbit-hob - - urbit-noun - - urbit-noun-core - - urbit-termsize - - utf8-string - - vector - - wai - - wai-conduit - - wai-websockets - - warp - - warp-tls - - websockets - -default-extensions: - - ApplicativeDo - - BangPatterns - - BinaryLiterals - - BlockArguments - - ConstraintKinds - - DataKinds - - DefaultSignatures - - DeriveAnyClass - - DeriveDataTypeable - - DeriveFoldable - - DeriveGeneric - - DeriveTraversable - - DerivingStrategies - - EmptyCase - - EmptyDataDecls - - FlexibleContexts - - FlexibleInstances - - FunctionalDependencies - - GADTs - - GeneralizedNewtypeDeriving - - LambdaCase - - MagicHash - - MultiParamTypeClasses - - NamedFieldPuns - - NoImplicitPrelude - - NumericUnderscores - - OverloadedStrings - - PackageImports - - PartialTypeSignatures - - PatternGuards - - PatternSynonyms - - QuasiQuotes - - Rank2Types - - RankNTypes - - RecordWildCards - - ScopedTypeVariables - - StandaloneDeriving - - TemplateHaskell - - TupleSections - - TypeApplications - - TypeFamilies - - TypeOperators - - UnboxedTuples - - UnicodeSyntax - - ViewPatterns - -executables: - urbit-king: - main: Main.hs - source-dirs: app - dependencies: - - urbit-king - ghc-options: - - -threaded - - -rtsopts - - -static - - -O2 - - "-with-rtsopts=-N" - - -fwarn-incomplete-patterns diff --git a/pkg/hs/urbit-king/test/AmesTests.hs b/pkg/hs/urbit-king/test/AmesTests.hs deleted file mode 100644 index 11c31f5c8..000000000 --- a/pkg/hs/urbit-king/test/AmesTests.hs +++ /dev/null @@ -1,117 +0,0 @@ -module AmesTests (tests) where - -import Data.Conduit -import Data.Conduit.List hiding (take) -import Data.Ord.Unicode -import Test.QuickCheck hiding ((.&.)) -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH -import Urbit.Arvo -import Urbit.EventLog.LMDB -import Urbit.King.Config -import Urbit.Noun -import Urbit.Noun.Time -import Urbit.Prelude hiding (elements) -import Urbit.Vere.Ames -import Urbit.Vere.Ames.Packet -import Urbit.Vere.Pier.Types -import Urbit.Vere.Ports - -import Control.Concurrent (runInBoundThread) -import Data.Serialize (decode, encode) -import Data.LargeWord (LargeKey(..)) -import GHC.Natural (Natural) -import Network.Socket (tupleToHostAddress) -import Urbit.King.App (HasKingId(..)) - -import qualified Urbit.EventLog.LMDB as Log -import qualified Urbit.Noun.Time as Time - -packetSplitMorphism :: Packet -> Bool -packetSplitMorphism p = (decode . encode) p == Right p - -tests :: TestTree -tests = - testGroup "Ames" - [ testProperty "Packet coding looks good" $ - packetSplitMorphism - ] - - --- Generate Arbitrary Values --------------------------------------------------- - -arb :: Arbitrary a => Gen a -arb = arbitrary - -instance Arbitrary Ipv4 where arbitrary = Ipv4 <$> arb -instance Arbitrary Port where arbitrary = Port <$> arb -instance Arbitrary Wen where arbitrary = Wen <$> arb -instance Arbitrary Gap where arbitrary = Gap . abs <$> arb -instance Arbitrary Bytes where arbitrary = pure (MkBytes "wtfbbq") - -- MkBytes . take 100 <$> arb - -instance Arbitrary a => Arbitrary (Patp a) where - arbitrary = Patp <$> arb - -instance Arbitrary ByteString where - arbitrary = pack <$> arbitrary - -instance Arbitrary Natural where - arbitrary = fromIntegral . abs <$> (arbitrary :: Gen Integer) - -instance (Arbitrary a, Arbitrary b) => Arbitrary (LargeKey a b) where - arbitrary = LargeKey <$> arb <*> arb - -genIpv4 :: Gen Ipv4 -genIpv4 = do - x <- arbitrary - if (x == 0 || (x≥256 && x≤512)) - then genIpv4 - else pure (Ipv4 x) - -instance Arbitrary Text where - arbitrary = pack <$> arb - -instance Arbitrary Cord where - arbitrary = Cord <$> arb - -instance Arbitrary BigCord where - arbitrary = BigCord <$> arb - -instance Arbitrary AmesDest where - arbitrary = oneof [ EachYes <$> arb - , EachNo <$> arb - ] - -instance Arbitrary a => Arbitrary (Jammed a) where - arbitrary = Jammed <$> arbitrary - -instance Arbitrary AmesAddress where - arbitrary = AAIpv4 <$> arb <*> arb - -instance Arbitrary Ship where - arbitrary = Ship <$> elements - [ 0 - , 42 - , 256 - , 24_530 - , 2_071_856_128 - , 2_824_325_100 - , 430_648_908_188_615_680 - , 2^60 + 1337 - ] - -instance Arbitrary LogIdentity where - arbitrary = LogIdentity <$> arb <*> arb <*> arb - -instance Arbitrary Packet where - arbitrary = do - pktVersion <- suchThat arb (< 8) - pktSndr <- arb - pktRcvr <- arb - pktSndrTick <- suchThat arb (< 16) - pktRcvrTick <- suchThat arb (< 16) - pktOrigin <- arb - pktContent <- arb - pure Packet {..} diff --git a/pkg/hs/urbit-king/test/ArvoTests.hs b/pkg/hs/urbit-king/test/ArvoTests.hs deleted file mode 100644 index 5ac04c1d5..000000000 --- a/pkg/hs/urbit-king/test/ArvoTests.hs +++ /dev/null @@ -1,150 +0,0 @@ -module ArvoTests (tests) where - -import Data.Acquire -import Data.Conduit -import Data.Conduit.List -import Data.Ord.Unicode -import Network.HTTP.Types.Method -import Test.QuickCheck hiding ((.&.)) -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH -import Urbit.Arvo -import Urbit.EventLog.LMDB -import Urbit.Noun.Time -import Urbit.Prelude -import Urbit.Vere.Pier.Types - -import System.IO.Unsafe -import Data.Serialize - -import Control.Concurrent (runInBoundThread, threadDelay) -import Data.LargeWord (LargeKey(..)) -import GHC.Natural (Natural) -import Network.Socket (tupleToHostAddress) - -import qualified Urbit.EventLog.LMDB as Log - - --- Utils ----------------------------------------------------------------------- - -roundTrip :: forall a. (Eq a, ToNoun a, FromNoun a) => a -> Bool -roundTrip x = Just x == fromNoun (toNoun x) - -nounEq :: (ToNoun a, ToNoun b) => a -> b -> Bool -nounEq x y = toNoun x == toNoun y - --------------------------------------------------------------------------------- - -tests :: TestTree -tests = - testGroup "Arvo Events and Effects" - [ testProperty "Round Trip Effect" (roundTrip @Ef) - , testProperty "Round Trip Event" (roundTrip @Ev) - , testProperty "Round Trip AmesDest" (roundTrip @AmesDest) - ] - - --- Arbitrary Instances --------------------------------------------------------- - -instance Arbitrary Natural where - arbitrary = (fromIntegral . abs @Integer) <$> arb - -newtype DumbChar = Dumb { unDumb :: Char } - -instance Arbitrary DumbChar where - arbitrary = Dumb <$> choose ('a', 'z') - -instance Arbitrary Text where - arbitrary = pack . fmap unDumb <$> arbitrary - -instance (Arbitrary a, Arbitrary b) => Arbitrary (LargeKey a b) where - arbitrary = LargeKey <$> arb <*> arb - -instance Arbitrary ByteString where - arbitrary = encodeUtf8 <$> arbitrary - -instance Arbitrary EvilPath where arbitrary = EvilPath <$> arb -instance Arbitrary Path where arbitrary = Path <$> arb -instance Arbitrary Knot where arbitrary = MkKnot <$> arb -instance Arbitrary Tape where arbitrary = Tape <$> arb -instance Arbitrary BigTape where arbitrary = BigTape <$> arb -instance Arbitrary Bytes where arbitrary = MkBytes <$> arb -instance Arbitrary Octs where arbitrary = Octs <$> arb -instance Arbitrary File where arbitrary = File <$> arb -instance Arbitrary Cord where arbitrary = Cord <$> arb -instance Arbitrary Wen where arbitrary = Wen <$> arb -instance Arbitrary Gap where arbitrary = Gap . abs <$> arb -instance Arbitrary Port where arbitrary = Port <$> arb -instance Arbitrary Ship where arbitrary = Ship <$> arb -instance Arbitrary Address where arbitrary = AAmes <$> arb - -instance Arbitrary a => Arbitrary (Patp a) where - arbitrary = Patp <$> arb - -genIpv4 :: Gen Ipv4 -genIpv4 = do - x <- arbitrary - if (x == 0 || (x≥256 && x≤512)) - then genIpv4 - else pure (Ipv4 x) - -instance (Arbitrary a, Arbitrary b) => Arbitrary (Each a b) where - arbitrary = oneof [ EachNo <$> arb, EachYes <$> arb ] - -instance (Arbitrary a) => Arbitrary (Jammed a) where - arbitrary = Jammed <$> arbitrary - -instance Arbitrary Ef where - arbitrary = oneof [ EfVega <$> arb <*> arb - ] - -instance Arbitrary AmesEv where - arbitrary = oneof [ AmesEvHear () <$> arb <*> arb - , AmesEvHole () <$> arb <*> arb - ] - -instance Arbitrary HttpRequest where - arbitrary = HttpRequest <$> arb <*> arb <*> arb <*> arb - -instance Arbitrary HttpServerReq where - arbitrary = HttpServerReq <$> arb <*> arb <*> arb - -instance Arbitrary HttpServerEv where - arbitrary = oneof [ HttpServerEvRequest <$> arb <*> arb - , HttpServerEvLive <$> arb <*> arb <*> arb - ] - -instance Arbitrary BlipEv where - arbitrary = oneof [ BlipEvAmes <$> arb - , BlipEvHttpServer <$> arb - ] - -instance Arbitrary Ev where - arbitrary = oneof [ EvBlip <$> arb - ] - -instance Arbitrary StdMethod where - arbitrary = oneof $ pure <$> [ minBound .. maxBound ] - -instance Arbitrary Header where - arbitrary = Header <$> arb <*> arb - -instance Arbitrary BigCord where - arbitrary = BigCord <$> arb - - -instance Arbitrary ServId where arbitrary = ServId <$> arb - -instance Arbitrary UD where arbitrary = UD <$> arb -instance Arbitrary UV where arbitrary = UV <$> arb - -instance Arbitrary AmesAddress where - arbitrary = AAIpv4 <$> arb <*> arb - -instance Arbitrary Ipv4 where arbitrary = Ipv4 <$> arb - --- Generate Arbitrary Values --------------------------------------------------- - -arb :: Arbitrary a => Gen a -arb = arbitrary diff --git a/pkg/hs/urbit-king/test/BehnTests.hs b/pkg/hs/urbit-king/test/BehnTests.hs deleted file mode 100644 index d8b18cb94..000000000 --- a/pkg/hs/urbit-king/test/BehnTests.hs +++ /dev/null @@ -1,54 +0,0 @@ -module BehnTests (tests) where - -import Data.Acquire -import Data.Conduit -import Data.Conduit.List hiding (take) -import Data.Ord.Unicode -import Test.QuickCheck hiding ((.&.)) -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH -import Urbit.Arvo -import Urbit.EventLog.LMDB -import Urbit.Noun -import Urbit.Noun.Time -import Urbit.Prelude -import Urbit.Vere.Behn -import Urbit.Vere.Pier.Types - -import Control.Concurrent (runInBoundThread, threadDelay) -import Data.LargeWord (LargeKey(..)) -import GHC.Natural (Natural) -import Network.Socket (tupleToHostAddress) -import Urbit.King.App (runKingEnvNoLog, HasKingId(..)) - -import qualified Urbit.EventLog.LMDB as Log -import qualified Urbit.Noun.Time as Time - - --------------------------------------------------------------------------------- - --- TODO Timers always fire immediatly. Something is wrong! -timerFires :: Property -timerFires = forAll arbitrary (ioProperty . runKingEnvNoLog . runTest) - where - runTest :: HasKingId e => () -> RIO e Bool - runTest () = do - envr <- ask - king <- fromIntegral <$> view kingIdL - q <- newTQueueIO - rwith (liftAcquire $ behn envr (writeTQueue q)) $ \cb -> do - io $ cb (BehnEfDoze (king, ()) (Just (2^20))) - t <- atomically $ readTQueue q - pure True - - --- Utils ----------------------------------------------------------------------- - -tests :: TestTree -tests = - testGroup "Behn" - [ localOption (QuickCheckTests 10) $ - testProperty "Behn Timers Fire" $ - timerFires - ] diff --git a/pkg/hs/urbit-king/test/ClayTests.hs b/pkg/hs/urbit-king/test/ClayTests.hs deleted file mode 100644 index a6afc7f7e..000000000 --- a/pkg/hs/urbit-king/test/ClayTests.hs +++ /dev/null @@ -1,28 +0,0 @@ -module ClayTests (tests) where - -import Urbit.Noun.Conversions -import Urbit.Prelude - -import Test.QuickCheck hiding ((.&.)) -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH - -instance Arbitrary Knot where - arbitrary = (MkKnot . pack) <$> sublistOf ['a'..'z'] - -nonEmptyList :: (Arbitrary a) => Gen [a] -nonEmptyList = sized $ \n -> - do k <- choose (1, max 1 n) - vector k - -instance Arbitrary Path where - arbitrary = Path <$> nonEmptyList - -testPathRoundTrip :: Path -> Property -testPathRoundTrip p = - classify (1 == (length $ unPath p)) "singleton" $ - (filePathToPath (pathToFilePath p)) === p - -tests = testGroup "Clay" - [ testProperty "Path round trip" $ testPathRoundTrip ] diff --git a/pkg/hs/urbit-king/test/DawnTests.hs b/pkg/hs/urbit-king/test/DawnTests.hs deleted file mode 100644 index eb8d8e201..000000000 --- a/pkg/hs/urbit-king/test/DawnTests.hs +++ /dev/null @@ -1,88 +0,0 @@ -module DawnTests (tests) where - -import Urbit.Arvo.Event -import Urbit.Noun.Conversions -import Urbit.Prelude - -import Test.Tasty -import Test.Tasty.HUnit - -import qualified Urbit.Ob as Ob -import qualified Urbit.Vere.Dawn as Dawn - --------------------------------------------------------------------------------- - --- These golden cases generated in Urbit from entropy to make sure our +mix, --- +shas, +shaf, etc. were actually calculated correctly. - -cordToAtomBytes :: Text -> ByteString -cordToAtomBytes = atomBytes . cordToAtom - -cordToAtom :: Text -> Atom -cordToAtom t = case cordToUW (Cord t) of - Nothing -> error "Couldn't parse constant embedded in file." - Just (UW a) -> a - -testString = cordToAtomBytes $ concat - [ "0w1.XqnKc.onYJK.0zVOU.Uw142.jNx3C.oWV83.TYt6T.kmHUg.cnoq1.zla6B.bKeNa" - , ".8wUZu.6ZLHJ.c1TKV.KPcb3.9lU3~.p2G8D" - ] - -testSalt = cordToAtomBytes "0wc.~cOwa.Kb-DI.BrjVW.i0U37" - -mixByteStrings = (Dawn.mix testSalt testString) @?= expected - where - expected = cordToAtomBytes $ concat - [ "0w1.XqnKc.onYJK.0zVOU.Uw142.jNx3C.oWV83.TYt6T.kmHUg.cnoq1.zla6B.bKeNa" - , ".8wUZu.6ZLHx.Pd5eP.0UOIL.IeHW5.b2ibw" - ] - -shasByteStrings = (Dawn.shas testSalt testString) @?= expected - where - expected = cordToAtomBytes - "0wfKW.mXzrj.c~IBb.lKd6k.2njoG.bRLcD.9eszA.gSSs8.mHRah" - -shafByteStrings = (Dawn.shaf testSalt testString) @?= expected - where - expected = cordToAtomBytes "0w3h.Bg1Qh.ZZjoJ.23J~p.PHg-D" - --------------------------------------------------------------------------------- - -cometShip :: Ship -cometShip = case Ob.parsePatp cometStr of - Left x -> error "Invalid ship name" - Right p -> Ship $ fromIntegral $ Ob.fromPatp p - where - cometStr = "~radmes-dilsec-sovlup-lagwep--tonred-waldeb-tocseg-marzod" - -cometPass :: Pass -cometPass = case fromNoun (Atom cometPassAtom) of - Nothing -> error "Keyfile does not seem to contain a seed." - Just s -> s - where - cometPassAtom = cordToAtom $ concat - [ "0w99.P80w4.rL7Qt.0i5-h.8yta7.RhgHI.nrXjO.xBCix.Pxx5a.sJ6bv.a-Iwo.OeVBr" - , ".x8-Gs.1LLG~.FgDRk.GML3Y.X3qFZ.jtlpy" - ] - -cometRawBS = cordToAtomBytes "0w39.q35g-.hrd3f.q9UWK.Zxg40" - --- Verifies the internal usage of +shaf in comet derivation gets the right --- answer. -testCometFingerprintBS = (Dawn.cometFingerprintBS cometPass) @?= cometRawBS - --- Tests that the real public interface for fingerprint generation does the --- byte-munging correctly. -testCometFingerprint = (Dawn.cometFingerprint cometPass) @?= cometShip - --------------------------------------------------------------------------------- - -tests :: TestTree -tests = - testGroup "Dawn" - [ testCase "Mix bytestrings of different length" $ mixByteStrings - , testCase "Shas bytestrings" $ shasByteStrings - , testCase "Shaf bytestrings" $ shafByteStrings - , testCase "Fingerprint bytestring derivation" $ testCometFingerprintBS - , testCase "Fingerprint total derivation" $ testCometFingerprint - ] diff --git a/pkg/hs/urbit-king/test/DeriveNounTests.hs b/pkg/hs/urbit-king/test/DeriveNounTests.hs deleted file mode 100644 index d883d29fa..000000000 --- a/pkg/hs/urbit-king/test/DeriveNounTests.hs +++ /dev/null @@ -1,183 +0,0 @@ -module DeriveNounTests (tests) where - -import Data.Acquire -import Data.Conduit -import Data.Conduit.List -import Test.QuickCheck hiding ((.&.)) -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH -import Urbit.EventLog.LMDB -import Urbit.Prelude -import Urbit.Vere.Pier.Types - -import Control.Concurrent (runInBoundThread, threadDelay) -import Data.LargeWord (LargeKey(..)) -import GHC.Natural (Natural) - -import qualified Urbit.EventLog.LMDB as Log - - --- Sum Types ------------------------------------------------------------------- - -data Nums = One | Two | TwentyTwo | NineHundredNintyNine - deriving (Eq, Show, Enum, Bounded) - -data ThreeWords = ThreeWords Word Word Word - deriving (Eq, Show) - -data FooBar = FooBarQueenAlice Word Word - | FooBarBob Word - | FooBarCharlie - deriving (Eq, Show) - -data BarZaz = BZQueenAlice Word Word - | BZBob Word - | BZCharlie - deriving (Eq, Show) - -data ZazBaz = QueenAlice Word Word - | Bob Word - | Charlie - deriving (Eq, Show) - -data Empty - -data Poly a b = PLeft a - | PRite b - deriving (Eq, Show) - -deriveNoun ''Nums -deriveNoun ''ThreeWords -deriveNoun ''FooBar -deriveNoun ''BarZaz -deriveNoun ''ZazBaz -deriveNoun ''Empty -deriveNoun ''Poly - -instance Arbitrary ThreeWords where - arbitrary = ThreeWords <$> arbitrary <*> arbitrary <*> arbitrary - -instance Arbitrary Nums where - arbitrary = oneof (pure <$> [ minBound .. maxBound ]) - -instance Arbitrary FooBar where - arbitrary = oneof [ FooBarQueenAlice <$> arbitrary <*> arbitrary - , FooBarBob <$> arbitrary - , pure FooBarCharlie - ] - -instance Arbitrary BarZaz where - arbitrary = oneof [ BZQueenAlice <$> arbitrary <*> arbitrary - , BZBob <$> arbitrary - , pure BZCharlie - ] - -instance Arbitrary ZazBaz where - arbitrary = oneof [ QueenAlice <$> arbitrary <*> arbitrary - , Bob <$> arbitrary - , pure Charlie - ] - -instance (Arbitrary a, Arbitrary b) => Arbitrary (Poly a b) where - arbitrary = oneof [ PLeft <$> arbitrary - , PRite <$> arbitrary - ] - - --- Utils ----------------------------------------------------------------------- - -roundTrip :: forall a. (Eq a, ToNoun a, FromNoun a) => a -> Bool -roundTrip x = Just x == fromNoun (toNoun x) - -throughNoun :: (ToNoun a, FromNoun b) => a -> Maybe b -throughNoun = fromNoun . toNoun - -nounEquiv :: (Eq a, Eq b, ToNoun a, ToNoun b, FromNoun a, FromNoun b) - => (a -> b) -> a -> Bool -nounEquiv cvt x = - and [ Just x == throughNoun y - , Just y == throughNoun x - ] - where y = cvt x - - --- Sanity Checks --------------------------------------------------------------- - -enumSanity :: Nums -> Bool -enumSanity x = toNoun x == byHand x - where - byHand = \case - One -> toNoun (Cord "one") - Two -> toNoun (Cord "two") - TwentyTwo -> toNoun (Cord "twenty-two") - NineHundredNintyNine -> toNoun (Cord "nine-hundred-ninty-nine") - -recSanity :: ThreeWords -> Bool -recSanity x = toNoun x == byHand x - where - byHand (ThreeWords x y z) = toNoun (x, y, z) - -sumSanity :: ZazBaz -> Bool -sumSanity x = toNoun x == byHand x - where - byHand = \case - QueenAlice x y -> toNoun (Cord "queen-alice", x, y) - Bob x -> toNoun (Cord "bob", x) - Charlie -> toNoun (Cord "charlie") - -abbrPrefixSanity :: BarZaz -> Bool -abbrPrefixSanity x = toNoun x == byHand x - where - byHand = \case - BZQueenAlice x y -> toNoun (Cord "queen-alice", x, y) - BZBob x -> toNoun (Cord "bob", x) - BZCharlie -> toNoun (Cord "charlie") - -typePrefixSanity :: FooBar -> Bool -typePrefixSanity x = toNoun x == byHand x - where - byHand = \case - FooBarQueenAlice x y -> toNoun (Cord "queen-alice", x, y) - FooBarBob x -> toNoun (Cord "bob", x) - FooBarCharlie -> toNoun (Cord "charlie") - - --- Strip Sum Prefixes ---------------------------------------------------------- - -barZazBaz :: BarZaz -> Bool -barZazBaz = nounEquiv $ \case BZQueenAlice x y -> QueenAlice x y - BZBob x -> Bob x - BZCharlie -> Charlie - -fooBarBaz :: FooBar -> Bool -fooBarBaz = nounEquiv $ \case FooBarQueenAlice x y -> QueenAlice x y - FooBarBob x -> Bob x - FooBarCharlie -> Charlie - - --------------------------------------------------------------------------------- - -tests :: TestTree -tests = - testGroup "Log" - [ testProperty "Enum Sanity" $ enumSanity - , testProperty "Sum Sanity" $ sumSanity - , testProperty "Record Sanity" $ recSanity - , testProperty "Type-Prefix Sanity" $ abbrPrefixSanity - , testProperty "Abbrv-Prefix Sanity" $ typePrefixSanity - , testProperty "Round Trip Rec (Poly)" $ roundTrip @(Poly Bool Bool) - , testProperty "Round Trip Rec (ThreeWords)" $ roundTrip @ThreeWords - , testProperty "Round Trip Enum (Nums)" $ roundTrip @Nums - , testProperty "Round Trip Sum (FooBar)" $ roundTrip @FooBar - , testProperty "Round Trip Sum (BarZaz)" $ roundTrip @BarZaz - , testProperty "Round Trip Sum (ZazBaz)" $ roundTrip @ZazBaz - , testProperty "Prefix Test 1" $ barZazBaz - , testProperty "Prefix Test 2" $ fooBarBaz - ] - - --- Generate Arbitrary Values --------------------------------------------------- - -arb :: Arbitrary a => Gen a -arb = arbitrary diff --git a/pkg/hs/urbit-king/test/HoonMapSetTests.hs b/pkg/hs/urbit-king/test/HoonMapSetTests.hs deleted file mode 100644 index 13101ab01..000000000 --- a/pkg/hs/urbit-king/test/HoonMapSetTests.hs +++ /dev/null @@ -1,135 +0,0 @@ -module HoonMapSetTests (tests) where - -import RIO.Directory -import Urbit.Prelude - -import Data.ByteString.Lazy (ByteString) -import Numeric.Natural (Natural) -import Test.QuickCheck hiding ((.&.)) -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH - -import qualified Data.ByteString as ByteString -import qualified Data.ByteString.Lazy as ByteString.Lazy -import qualified Data.Text.Lazy as Text.Lazy -import qualified Data.Text.Lazy.Encoding as Text.Lazy.Encoding -import qualified Paths_urbit_king -import qualified Test.Tasty.Golden as Golden -import qualified Test.Tasty.Golden.Advanced as Golden.Advanced - --- Types ----------------------------------------------------------------------- - -newtype SmallNoun = SN Noun - deriving newtype (Eq, Ord, Show, ToNoun) - -instance Arbitrary SmallNoun where - arbitrary = SN <$> oneof [a, c, ac, ca, cc] - where - a = A . fromIntegral <$> arbitrary @Word8 - c = C <$> a <*> a - ac = C <$> a <*> c - ca = C <$> c <*> a - cc = C <$> c <*> c - -data TreeTest - = TTMap (HoonMap Noun Noun) - | TTSet (HoonSet Noun) - -deriveNoun ''TreeTest - -type TreeTests = [TreeTest] - - --- Utils ----------------------------------------------------------------------- - -roundTrip :: forall a. Eq a => (a -> a) -> a -> Bool -roundTrip f x = f x == x - - --- Props ----------------------------------------------------------------------- - -mapRoundtrip :: Map SmallNoun SmallNoun -> Bool -mapRoundtrip = roundTrip (mapFromHoonMap . mapToHoonMap) - -setRoundtrip :: Set SmallNoun -> Bool -setRoundtrip = roundTrip (setFromHoonSet . setToHoonSet) - --- Golden Tests ---------------------------------------------------------------- - -treeTestsIdentity :: TreeTests -> TreeTests -treeTestsIdentity = fmap go - where - go = \case - TTSet s -> (TTSet . setToHoonSet . setFromHoonSet) s - TTMap m -> (TTMap . mapToHoonMap . mapFromHoonMap) m - -treeRTMug :: FilePath -> IO ByteString.Lazy.ByteString -treeRTMug inp = do - byt <- readFile inp - non <- cueBSExn byt - tee <- fromNounExn non - mug <- evaluate $ mug $ toNoun $ treeTestsIdentity tee - pure $ Text.Lazy.Encoding.encodeUtf8 $ tlshow mug - -goldenPill - :: TestName - -> String - -> (FilePath -> IO ByteString.Lazy.ByteString) - -> TestTree -goldenPill test name action = - goldenVsString test gold (action pill) - where - gold = "test/gold" name <.> "gold" - pill = "test/gold" name <.> "pill" - --- | Compare a given string against the golden file's contents. -goldenVsString - :: TestName - -- ^ Test name - -> String - -- ^ The «golden» file that will be retrieved via 'getDataFileName'. - -> IO ByteString.Lazy.ByteString - -- ^ Action that returns the string for comparison. - -> TestTree - -- ^ Verifies the golden file contents is identical to the returned string. -goldenVsString test name action = - askOption $ \cutoff -> - Golden.Advanced.goldenTest name acquire action (comparator cutoff) update - where - acquire = do - path <- Paths_urbit_king.getDataFileName name - bytes <- ByteString.readFile path - - pure (ByteString.Lazy.fromStrict bytes) - - comparator cutoff x y = - pure $ - if x == y - then Nothing - else Just - ( printf "Test output was different from '%s'. It was:\n" name - <> unpackUTF8 (truncate cutoff y) - ) - - unpackUTF8 = Text.Lazy.unpack . Text.Lazy.Encoding.decodeUtf8 - - truncate (Golden.SizeCutoff cutoff) bytes = - if ByteString.Lazy.length bytes <= cutoff - then bytes - else ByteString.Lazy.take cutoff bytes - <> "" - <> "\nUse --accept or increase --size-cutoff to see full output." - - -- The update function is a noop as we don't have the golden file name. - update _ = pure () - --- Test Tree ------------------------------------------------------------------- - -tests :: TestTree -tests = - testGroup "Map/Set Conversions" - [ goldenPill "Golden Map Roundtrip" "hoontree" treeRTMug - , testProperty "Map Rountrip" mapRoundtrip - , testProperty "Set Rountrip" setRoundtrip - ] diff --git a/pkg/hs/urbit-king/test/JamTests.hs b/pkg/hs/urbit-king/test/JamTests.hs deleted file mode 100644 index fd6b688fd..000000000 --- a/pkg/hs/urbit-king/test/JamTests.hs +++ /dev/null @@ -1,28 +0,0 @@ -module JamTests (tests) where - -import Urbit.Arvo.Event -import Urbit.Noun.Conversions -import Urbit.Noun.Cue -import Urbit.Noun.Jam -import Urbit.Prelude - -import GHC.Natural (Natural(..)) -import Test.QuickCheck hiding ((.&.)) -import Test.QuickCheck.Gen -import Test.QuickCheck.Random -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH - -instance Arbitrary Natural where - arbitrary = arbitrarySizedNatural - -prop_cueJamAtom :: Atom -> Bool -prop_cueJamAtom a = Right (Atom a) == cue (jam (Atom a)) - -prop_cueJamNoun :: Noun -> Bool -prop_cueJamNoun n = Right n == cue (jam n) - -tests :: TestTree -tests = $(testGroupGenerator) - diff --git a/pkg/hs/urbit-king/test/LogTests.hs b/pkg/hs/urbit-king/test/LogTests.hs deleted file mode 100644 index ef34e2c95..000000000 --- a/pkg/hs/urbit-king/test/LogTests.hs +++ /dev/null @@ -1,199 +0,0 @@ -module LogTests (tests) where - -import Data.Acquire -import Data.Conduit -import Data.Conduit.List hiding (filter) -import Test.QuickCheck hiding ((.&.)) -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH -import Urbit.EventLog.LMDB -import Urbit.Prelude -import Urbit.Vere.Pier.Types - -import Control.Concurrent (runInBoundThread, threadDelay) -import Data.LargeWord (LargeKey(..)) -import GHC.Natural (Natural) -import Urbit.King.App (KingEnv, runKingEnvNoLog) - -import qualified Options -import qualified Urbit.EventLog.LMDB as Log - - --- Utils ----------------------------------------------------------------------- - -withTestDir :: (FilePath -> RIO e a) -> RIO e a -withTestDir = withTempDirectory "./" ".testlog." - -data NotEqual = NotEqual String String - deriving (Eq, Ord, Show) - -instance Exception NotEqual where - -assertEqual :: MonadIO m => (Show a, Eq a) => a -> a -> m () -assertEqual x y = do - unless (x == y) $ io $ throwIO $ NotEqual (show x) (show y) - - --- Database Operations --------------------------------------------------------- - -data Db = Db LogIdentity [ByteString] (Map Word64 ByteString) - deriving (Eq, Ord, Show) - -addEvents :: Db -> [ByteString] -> Db -addEvents (Db id evs efs) new = Db id (evs <> new) efs - -readDb :: EventLog -> RIO KingEnv Db -readDb log = do - events <- runConduit (streamEvents log 1 .| consume) - effects <- runConduit (streamEffectsRows log 0 .| consume) - pure $ Db (Log.identity log) events (mapFromList effects) - -withDb :: FilePath -> Db -> (EventLog -> RIO KingEnv a) -> RIO KingEnv a -withDb dir (Db dId dEvs dFx) act = do - rwith (Log.new dir dId) $ \log -> do - Log.appendEvents log (fromList dEvs) - for_ (mapToList dFx) $ \(k,v) -> - Log.writeEffectsRow log k v - act log - --------------------------------------------------------------------------------- - -runApp :: RIO KingEnv a -> IO a -runApp = runKingEnvNoLog - -tryReadIdentity :: Property -tryReadIdentity = forAll arbitrary (ioProperty . runApp . runTest) - where - runTest :: LogIdentity -> RIO KingEnv Bool - runTest ident = do - env <- ask - io $ runInBoundThread $ runRIO env $ - withTestDir $ \dir -> do - rwith (Log.new dir ident) $ \log -> - assertEqual ident (Log.identity log) - rwith (Log.existing dir) $ \log -> - assertEqual ident (Log.identity log) - rwith (Log.existing dir) $ \log -> - assertEqual ident (Log.identity log) - pure True - -tryReadDatabase :: Property -tryReadDatabase = forAll arbitrary (ioProperty . runApp . runTest) - where - runTest :: Db -> RIO KingEnv Bool - runTest db = do - env <- ask - io $ runInBoundThread $ runRIO env $ - withTestDir $ \dir -> do - withDb dir db $ \log -> do - readDb log >>= assertEqual db - pure True - -tryReadDatabaseFuzz :: Property -tryReadDatabaseFuzz = forAll arbitrary (ioProperty . runApp . runTest) - where - runTest :: Db -> RIO KingEnv Bool - runTest db = do - env <- ask - io $ runInBoundThread $ runRIO env $ - withTestDir $ \dir -> do - withDb dir db $ \log -> do - readDb log >>= assertEqual db - rwith (Log.existing dir) $ \log -> do - readDb log >>= assertEqual db - rwith (Log.existing dir) $ \log -> do - readDb log >>= assertEqual db - readDb log >>= assertEqual db - pure True - -tryAppend :: Property -tryAppend = forAll arbitrary (ioProperty . runApp . runTest) - where - runTest :: ([ByteString], Db) -> RIO KingEnv Bool - runTest (extra, db) = do - env <- ask - io $ runInBoundThread $ runRIO env $ - withTestDir $ \dir -> do - db' <- pure (addEvents db extra) - withDb dir db $ \log -> do - readDb log >>= assertEqual db - Log.appendEvents log (fromList extra) - readDb log >>= assertEqual db' - rwith (Log.existing dir) $ \log -> do - readDb log >>= assertEqual db' - pure True - -tryAppendHuge :: Options.Brass -> Property -tryAppendHuge brass = - forAll arbitrary (ioProperty . runApp . runTest) - where - runTest :: ([ByteString], Db) -> RIO KingEnv Bool - runTest (extra, db) = do - env <- ask - io $ runInBoundThread $ runRIO env $ do - extra <- do - b <- readFile =<< Options.getPillPath brass - pure (extra <> [b] <> extra) - withTestDir $ \dir -> do - db' <- pure (addEvents db extra) - withDb dir db $ \log -> do - readDb log >>= assertEqual db - Log.appendEvents log (fromList extra) - readDb log >>= assertEqual db' - rwith (Log.existing dir) $ \log -> do - readDb log >>= assertEqual db' - pure True - - -tests :: TestTree -tests = - testGroup "Log" - [ localOption (QuickCheckTests 10) $ - testProperty "Read/Write Log Identity" $ - tryReadIdentity - , localOption (QuickCheckTests 15) $ - testProperty "Read/Write Database" $ - tryReadDatabase - , localOption (QuickCheckTests 5) $ - testProperty "Read/Write Database Multiple Times" $ - tryReadDatabaseFuzz - , localOption (QuickCheckTests 10) $ - testProperty "Append Random Events" $ - tryAppend - , localOption (QuickCheckTests 1) $ - askOption $ \path -> - testProperty "Append Huge Events" $ - tryAppendHuge path - ] - - --- Generate Arbitrary Values --------------------------------------------------- - -arb :: Arbitrary a => Gen a -arb = arbitrary - -instance Arbitrary ByteString where - arbitrary = pack <$> arbitrary - -instance (Arbitrary a, Arbitrary b) => Arbitrary (LargeKey a b) where - arbitrary = LargeKey <$> arb <*> arb - -instance Arbitrary Ship where - arbitrary = Ship <$> arb - -arbEffects :: [ByteString] -> Gen (Map Word64 ByteString) -arbEffects evs = do - hax <- for (zip [1..] evs) $ \(i, bs) -> do keep :: Bool <- arbitrary - pure (keep, (i, bs)) - pure $ mapFromList $ snd <$> filter fst hax - -instance Arbitrary Db where - arbitrary = do - ident <- arbitrary - evs <- arbitrary - efs <- arbEffects evs - pure (Db ident evs efs) - -instance Arbitrary LogIdentity where - arbitrary = LogIdentity <$> arb <*> arb <*> arb diff --git a/pkg/hs/urbit-king/test/Main.hs b/pkg/hs/urbit-king/test/Main.hs deleted file mode 100644 index f58e2bb4e..000000000 --- a/pkg/hs/urbit-king/test/Main.hs +++ /dev/null @@ -1,48 +0,0 @@ -module Main (main) where - -import ClassyPrelude - -import Control.Concurrent (runInBoundThread) -import Data.Proxy (Proxy (Proxy)) -import RIO.Directory -import Test.QuickCheck hiding ((.&.)) -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH -import Test.Tasty.Options (OptionDescription (Option)) - -import qualified AmesTests -import qualified ArvoTests -import qualified BehnTests -import qualified ClayTests -import qualified DawnTests -import qualified DeriveNounTests -import qualified HoonMapSetTests -import qualified JamTests -import qualified LogTests -import qualified NounConversionTests -import qualified Options -import qualified Test.Tasty.Runners as Runners - -main :: IO () -main = do - let ingredients = - includingOptions - [ Option (Proxy @Options.Brass) - ] : defaultIngredients - - runInBoundThread $ - defaultMainWithIngredients ingredients $ - localOption (Runners.NumThreads 1) $ - testGroup "Urbit" - [ AmesTests.tests - , ArvoTests.tests - , BehnTests.tests - , ClayTests.tests - , DawnTests.tests - , DeriveNounTests.tests - , HoonMapSetTests.tests - , JamTests.tests - , LogTests.tests - , NounConversionTests.tests - ] diff --git a/pkg/hs/urbit-king/test/NounConversionTests.hs b/pkg/hs/urbit-king/test/NounConversionTests.hs deleted file mode 100644 index 901afbcb9..000000000 --- a/pkg/hs/urbit-king/test/NounConversionTests.hs +++ /dev/null @@ -1,70 +0,0 @@ -module NounConversionTests (tests) where - -import Urbit.Arvo.Event -import Urbit.Noun.Conversions -import Urbit.Prelude - -import Data.Maybe -import Test.QuickCheck hiding ((.&.)) -import Test.QuickCheck.Gen -import Test.QuickCheck.Random -import Test.Tasty -import Test.Tasty.QuickCheck -import Test.Tasty.TH - -import qualified Crypto.Sign.Ed25519 as Ed - --- String Representations of Atoms --------------------------------------------- - -instance Arbitrary UV where - arbitrary = UV <$> arbitrarySizedNatural - -instance Arbitrary UW where - arbitrary = UW <$> arbitrarySizedNatural - -vRoundTrip :: UV -> Bool -vRoundTrip uv = Just uv == (fromNoun $ toNoun $ uv) - -wRoundTrip :: UW -> Bool -wRoundTrip uw = Just uw == (fromNoun $ toNoun uw) - --- Cryptographic Point Representations ----------------------------------------- - -data ThirtyTwoByteString = ThirtyTwoByteString ByteString - deriving (Show) - -data KeyPair = KeyPair (Ed.PublicKey, Ed.SecretKey) - deriving (Show) - -instance Arbitrary ThirtyTwoByteString where - arbitrary = (ThirtyTwoByteString . pack) <$> (vector 32) - -instance Arbitrary KeyPair where - arbitrary = - (KeyPair . fromJust . Ed.createKeypairFromSeed_ . pack) <$> (vector 32) - - -passRoundTrip :: KeyPair -> KeyPair -> Bool -passRoundTrip (KeyPair (signPubkey, _)) (KeyPair (cryptPubkey, _)) = - (Just p) == (fromNoun $ toNoun p) - where - p = Pass signPubkey cryptPubkey - - -ringRoundTrip :: ThirtyTwoByteString -> ThirtyTwoByteString -> Bool -ringRoundTrip (ThirtyTwoByteString signSeed) (ThirtyTwoByteString cryptSeed) = - (Just r) == (fromNoun $ toNoun r) - where - r = Ring signSeed cryptSeed - - --------------------------------------------------------------------------------- - -tests :: TestTree -tests = - testGroup "Noun" - [ testProperty "0v0 printing/parsing round trip" $ vRoundTrip - , testProperty "0w0 printing/parsing round trip" $ wRoundTrip - , testProperty "Pass round trip" $ passRoundTrip - , testProperty "Ring round trip" $ ringRoundTrip - ] diff --git a/pkg/hs/urbit-king/test/Options.hs b/pkg/hs/urbit-king/test/Options.hs deleted file mode 100644 index 3b9aa7456..000000000 --- a/pkg/hs/urbit-king/test/Options.hs +++ /dev/null @@ -1,48 +0,0 @@ -module Options - ( Brass - , Pill - , getPillPath - ) where - -import Control.Monad.IO.Class (MonadIO) -import Data.Proxy (Proxy (Proxy)) -import Data.String (IsString) -import GHC.TypeLits (KnownSymbol, Symbol) -import Prelude - -import qualified GHC.TypeLits as TypeLits -import qualified RIO.Directory as Directory -import qualified Test.Tasty as Tasty -import qualified Test.Tasty.Options as Options - -type Brass = Pill "brass" - --- | A file-system path tagged by the pill name. -newtype Pill (name :: Symbol) = Pill FilePath - deriving stock (Eq, Show) - deriving newtype (IsString) - -instance KnownSymbol name => Options.IsOption (Pill name) where - optionName = - pure ( TypeLits.symbolVal (Proxy @name) - ++ "-pill" - ) - - optionHelp = - pure ( "The file path to the " - ++ TypeLits.symbolVal (Proxy @name) - ++ " pill" - ) - - defaultValue = - Pill ( "../../../bin/" - ++ TypeLits.symbolVal (Proxy @name) - ++ ".pill" - ) - - parseValue = \case - "" -> Nothing - path -> Just (Pill path) - -getPillPath :: MonadIO m => Pill name -> m FilePath -getPillPath (Pill path) = Directory.canonicalizePath path diff --git a/pkg/hs/urbit-king/test/gold/hoontree.gold b/pkg/hs/urbit-king/test/gold/hoontree.gold deleted file mode 100644 index 0b4589065..000000000 --- a/pkg/hs/urbit-king/test/gold/hoontree.gold +++ /dev/null @@ -1 +0,0 @@ -233234490 \ No newline at end of file diff --git a/pkg/hs/urbit-king/test/gold/hoontree.pill b/pkg/hs/urbit-king/test/gold/hoontree.pill deleted file mode 100644 index 26f4933c7..000000000 --- a/pkg/hs/urbit-king/test/gold/hoontree.pill +++ /dev/null @@ -1 +0,0 @@ -0xi!Ynh1GQ \ No newline at end of file diff --git a/pkg/hs/urbit-noun-core/.gitignore b/pkg/hs/urbit-noun-core/.gitignore deleted file mode 100644 index 65e7ea818..000000000 --- a/pkg/hs/urbit-noun-core/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.stack-work -*.cabal -test/gold/*.writ diff --git a/pkg/hs/urbit-noun-core/LICENSE b/pkg/hs/urbit-noun-core/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/urbit-noun-core/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Convert.hs b/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Convert.hs deleted file mode 100644 index d9cd3bad4..000000000 --- a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Convert.hs +++ /dev/null @@ -1,126 +0,0 @@ -{-| - Framework for writing conversions between types and nouns. --} -module Urbit.Noun.Convert - ( ToNoun(toNoun) - , FromNoun(parseNoun), fromNoun, fromNounErr, fromNounExn - , Parser(..) - , ParseStack - , parseNounUtf8Atom - , named - ) where - -import ClassyPrelude hiding (hash) - -import Control.Monad.Fail (MonadFail (fail)) -import Urbit.Noun.Core - - --- Types ----------------------------------------------------------------------- - -type ParseStack = [Text] - - --- "Parser" -------------------------------------------------------------------- - -type Failure a = ParseStack -> String -> a -type Success a b = a -> b - -newtype Parser a = Parser { - runParser :: forall r. ParseStack -> Failure r -> Success a r -> r -} - -{-# INLINE named #-} -- keep out of the cost centers -named :: Text -> Parser a -> Parser a -named nm (Parser cb) = - Parser $ \path kf ks -> cb (nm:path) kf ks - -instance Monad Parser where - m >>= g = Parser $ \path kf ks -> let ks' a = runParser (g a) path kf ks - in runParser m path kf ks' - return = pure - -instance MonadFail Parser where - fail msg = Parser $ \path kf _ks -> kf (reverse path) msg - -instance Functor Parser where - fmap f m = Parser $ \path kf ks -> let ks' a = ks (f a) - in runParser m path kf ks' - -apP :: Parser (a -> b) -> Parser a -> Parser b -apP d e = do - b <- d - b <$> e - -instance Applicative Parser where - pure a = Parser $ \_path _kf ks -> ks a - (<*>) = apP - -instance Alternative Parser where - empty = fail "empty" - (<|>) = mplus - -instance MonadPlus Parser where - mzero = fail "mzero" - mplus a b = Parser $ \path kf ks -> let kf' _ _ = runParser b path kf ks - in runParser a path kf' ks - -instance Semigroup (Parser a) where - (<>) = mplus - -instance Monoid (Parser a) where - mempty = fail "mempty" - mappend = (<>) - - --- Conversion ------------------------------------------------------------------ - -class FromNoun a where - parseNoun :: Noun -> Parser a - -class ToNoun a where - toNoun :: a -> Noun - --------------------------------------------------------------------------------- - -fromNoun :: FromNoun a => Noun -> Maybe a -fromNoun n = runParser (parseNoun n) [] onFail onSuccess - where - onFail p m = Nothing - onSuccess !x = Just x - -fromNounErr :: FromNoun a => Noun -> Either ([Text], Text) a -fromNounErr n = runParser (parseNoun n) [] onFail onSuccess - where - onFail p m = Left (p, pack m) - onSuccess !x = Right x - -data BadNoun = BadNoun [Text] String - deriving (Eq, Ord) - -instance Show BadNoun where - show (BadNoun pax msg) = - mconcat [ "(BadNoun " - , show (intercalate "." pax) - , " " - , show msg - , ")" - ] - -instance Exception BadNoun where - -fromNounExn :: MonadIO m => FromNoun a => Noun -> m a -fromNounExn n = runParser (parseNoun n) [] onFail onSuccess - where - onFail p m = throwIO (BadNoun p m) - onSuccess !x = pure x - - --- Cord Conversions ------------------------------------------------------------ - -parseNounUtf8Atom :: Noun -> Parser Text -parseNounUtf8Atom n = - named "utf8-atom" $ do - case utf8AtomToText n of - Left err -> fail (unpack err) - Right tx -> pure tx diff --git a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Core.hs b/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Core.hs deleted file mode 100644 index 0feffcadd..000000000 --- a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Core.hs +++ /dev/null @@ -1,176 +0,0 @@ -{-# OPTIONS_GHC -funbox-strict-fields #-} -{-# LANGUAGE Strict #-} -{-# LANGUAGE StrictData #-} - -{-| - Core Noun Implementation - - Each cell has a pre-calculated hash and a `size` field. The size is - the total number of nodes under the tree of the cell. This is used - as a heuristic to choose a hash-table size for `jam` and `cue`. --} -module Urbit.Noun.Core - ( Noun, nounSize - , pattern Cell, pattern Atom - , pattern C, pattern A - , textToUtf8Atom, utf8AtomToText - , mug - ) where - -import ClassyPrelude hiding (hash) - -import Urbit.Atom -import Urbit.Noun.Mug - -import Data.Bits (xor) -import Data.Function ((&)) -import Data.Hashable (hash) -import GHC.Natural (Natural) -import GHC.Prim (reallyUnsafePtrEquality#) -import Test.QuickCheck.Arbitrary (Arbitrary(arbitrary)) -import Test.QuickCheck.Gen (Gen, getSize, resize, scale) - -import qualified Data.Char as C - - --- Types ----------------------------------------------------------------------- - -data Noun - = NCell ~Mug Word Noun Noun - | NAtom ~Mug Atom - -pattern Cell :: Noun -> Noun -> Noun -pattern Atom :: Atom -> Noun - -pattern Cell x y <- NCell _ _ x y where Cell = mkCell -pattern Atom a <- NAtom _ a where Atom = mkAtom - -{-# COMPLETE Cell, Atom #-} - -pattern C :: Noun -> Noun -> Noun -pattern A :: Atom -> Noun - -pattern C x y <- NCell _ _ x y where C = mkCell -pattern A a <- NAtom _ a where A = mkAtom - -{-# COMPLETE C, A #-} - - --------------------------------------------------------------------------------- - -instance Hashable Noun where - hash = fromIntegral . mug - {-# INLINE hash #-} - hashWithSalt salt x = salt `combine` hash x - {-# INLINE hashWithSalt #-} - -textToUtf8Atom :: Text -> Noun -textToUtf8Atom = Atom . utf8Atom - -utf8AtomToText :: Noun -> Either Text Text -utf8AtomToText = \case - Cell _ _ -> Left "Expected @t, but got ^" - Atom atm -> atomUtf8 atm & \case - Left err -> Left (tshow err) - Right tx -> pure tx - -instance Show Noun where - show = \case Atom a -> showAtom a - Cell x y -> fmtCell (show <$> (x : toTuple y)) - where - fmtCell :: [String] -> String - fmtCell xs = "(" <> intercalate ", " xs <> ")" - - toTuple :: Noun -> [Noun] - toTuple (Cell x xs) = x : toTuple xs - toTuple atom = [atom] - - showAtom :: Atom -> String - showAtom 0 = "0" - showAtom a | a >= 2^1024 = "\"...\"" - showAtom a = - let mTerm = do - t <- utf8AtomToText (Atom a) - let ok = \x -> (C.isPrint x) - if (all ok (t :: Text)) - then pure ("\"" <> unpack t <> "\"") - else Left "Don't show as text." - - in case mTerm of - Left _ -> show a - Right st -> st - -instance Eq Noun where - (==) x y = - case reallyUnsafePtrEquality# x y of - 1# -> True - _ -> case (x, y) of - (NAtom x1 a1, NAtom x2 a2) -> - x1 == x2 && a1 == a2 - (NCell x1 s1 h1 t1, NCell x2 s2 h2 t2) -> - s1==s2 && x1==x2 && h1==h2 && t1==t2 - _ -> - False - {-# INLINE (==) #-} - -instance Ord Noun where - compare x y = - case reallyUnsafePtrEquality# x y of - 1# -> EQ - _ -> case (x, y) of - (Atom _, Cell _ _) -> LT - (Cell _ _, Atom _) -> GT - (Atom a1, Atom a2) -> compare a1 a2 - (Cell h1 t1, Cell h2 t2) -> compare h1 h2 <> compare t1 t2 - {-# INLINE compare #-} - - -instance Arbitrary Noun where - arbitrary = resize 1000 go - where - dub x = Cell x x - go = do - sz <- getSize - (bit, bat :: Bool) <- arbitrary - case (sz, bit, bat) of - ( 0, _, _ ) -> Atom <$> genAtom - ( _, False, _ ) -> Atom <$> genAtom - ( _, True, True ) -> dub <$> arbitrary - ( _, True, _ ) -> scale (\x -> x-10) (Cell <$> go <*> go) - -genNatural :: Gen Natural -genNatural = fromInteger . abs <$> arbitrary - -genAtom :: Gen Atom -genAtom = do - arbitrary >>= \case - False -> genNatural - True -> (`mod` 16) <$> genNatural - --- From http://hackage.haskell.org/package/hashable-1.2.7.0/docs/src/Data-Hashable-Class.html -combine :: Int -> Int -> Int -combine h1 h2 = (h1 * 16777619) `xor` h2 - --------------------------------------------------------------------------------- - -{-# INLINE nounSize #-} -nounSize :: Noun -> Word -nounSize = \case - NCell _ s _ _ -> s - NAtom _ _ -> 1 - -{-# INLINE mug #-} -mug :: Noun -> Mug -mug = \case NCell h _ _ _ -> h - NAtom h _ -> h - -{-# INLINE mkAtom #-} -mkAtom :: Atom -> Noun -mkAtom a = NAtom (mugAtom a) a - -{-# INLINE mkCell #-} -mkCell :: Noun -> Noun -> Noun -mkCell h t = NCell has siz h t - where - siz = nounSize h + nounSize t - has = mugBoth (mug h) (mug t) diff --git a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Cue.hs b/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Cue.hs deleted file mode 100644 index 7fcc79ff4..000000000 --- a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Cue.hs +++ /dev/null @@ -1,394 +0,0 @@ -{-# OPTIONS_GHC -O2 #-} - -{-| - Fast implementation of `cue :: Atom -> Maybe Noun`. - - Implementation is based on the approach used in `flat`. --} -module Urbit.Noun.Cue (cue, cueExn, cueBS, cueBSExn, DecodeErr) where - -import ClassyPrelude - -import Urbit.Atom -import Urbit.Noun.Core - -import Control.Monad.Fail (MonadFail (fail)) -import Data.Bits (shiftL, shiftR, (.&.), (.|.)) -import Data.Function ((&)) -import Foreign.Ptr (Ptr, castPtr, plusPtr, ptrToWordPtr) -import Foreign.Storable (peek) -import GHC.Prim (ctz#) -import GHC.Word (Word(..)) -import System.IO.Unsafe (unsafePerformIO) -import Text.Printf (printf) - -import qualified Data.ByteString.Unsafe as BS -import qualified Data.HashTable.IO as H -import qualified Data.Vector.Primitive as VP - - --------------------------------------------------------------------------------- - -cueBS :: ByteString -> Either DecodeErr Noun -cueBS = doGet dNoun - -cueBSExn :: MonadIO m => ByteString -> m Noun -cueBSExn bs = - cueBS bs & \case - Left e -> throwIO e - Right x -> pure x - -cue :: Atom -> Either DecodeErr Noun -cue = cueBS . atomBytes - -cueExn :: MonadIO m => Atom -> m Noun -cueExn = cueBSExn . atomBytes - - --- Debugging ------------------------------------------------------------------- - -{-# INLINE debugM #-} -debugM :: Monad m => String -> m () -debugM _ = pure () - -{-# INLINE debugMId #-} -debugMId :: (Monad m, Show a) => String -> m a -> m a -debugMId _ a = a - - --- Types ----------------------------------------------------------------------- - -{-| - The decoder state. - - - An array of words (internal structure of our atoms). - - A pointer to the word *after* the last word in the array. - - A pointer into the current word of that array. - - A bit-offset into that word. --} -data S = S - { currPtr :: {-# UNPACK #-} !(Ptr Word) - , usedBits :: {-# UNPACK #-} !Word - , pos :: {-# UNPACK #-} !Word - } deriving (Show,Eq,Ord) - -type Env = (Ptr Word, S) - -data DecodeErr - = InfiniteCue Env - | BadEncoding Env String - deriving (Show, Eq, Ord) - -data GetResult a = GetResult {-# UNPACK #-} !S !a - deriving (Show, Functor) - -newtype Get a = Get - { runGet :: Ptr Word - -> H.BasicHashTable Word Noun - -> S - -> IO (GetResult a) - } - -doGet :: Get a -> ByteString -> Either DecodeErr a -doGet m bs = - unsafePerformIO $ try $ BS.unsafeUseAsCStringLen bs $ \(ptr, len) -> do - let endPtr = ptr `plusPtr` len - let sz = max 50 - $ min 10_000_000 - $ length bs `div` 6 - tbl <- H.newSized sz - GetResult _ r <- runGet m endPtr tbl (S (castPtr ptr) 0 0) - pure r - --------------------------------------------------------------------------------- - -instance Exception DecodeErr - -instance Functor Get where - fmap f g = Get $ \end tbl s -> do - GetResult s' a <- runGet g end tbl s - return $ GetResult s' (f a) - {-# INLINE fmap #-} - -instance Applicative Get where - pure x = Get (\_ _ s -> return $ GetResult s x) - {-# INLINE pure #-} - - Get f <*> Get g = Get $ \end tbl s1 -> do - GetResult s2 f' <- f end tbl s1 - GetResult s3 g' <- g end tbl s2 - return $ GetResult s3 (f' g') - {-# INLINE (<*>) #-} - - Get f *> Get g = Get $ \end tbl s1 -> do - GetResult s2 _ <- f end tbl s1 - g end tbl s2 - {-# INLINE (*>) #-} - -instance Monad Get where - return = pure - {-# INLINE return #-} - - (>>) = (*>) - {-# INLINE (>>) #-} - - Get x >>= f = Get $ \end tbl s -> do - GetResult s' x' <- x end tbl s - runGet (f x') end tbl s' - {-# INLINE (>>=) #-} - -instance MonadFail Get where - fail msg = Get $ \end tbl s -> do - badEncoding end s msg - {-# INLINE fail #-} - -instance MonadIO Get where - liftIO io = Get $ \end tbl s -> GetResult s <$> io - {-# INLINE liftIO #-} - --------------------------------------------------------------------------------- - -{-# INLINE badEncoding #-} -badEncoding :: Ptr Word -> S -> String -> IO a -badEncoding !endPtr s msg = throwIO $ BadEncoding (endPtr,s) msg - --------------------------------------------------------------------------------- - -{-# INLINE getPos #-} -getPos :: Get Word -getPos = Get $ \_ _ s -> - pure (GetResult s (pos s)) - -{-# INLINE insRef #-} -insRef :: Word -> Noun -> Get () -insRef !pos !now = Get $ \_ tbl s -> do - H.insert tbl pos now - pure $ GetResult s () - -{-# INLINE getRef #-} -getRef :: Word -> Get Noun -getRef !ref = Get $ \x tbl s -> do - H.lookup tbl ref >>= \case - Nothing -> runGet (fail ("Invalid Reference: " <> show ref)) x tbl s - Just no -> pure (GetResult s no) - -{-# INLINE advance #-} -advance :: Word -> Get () -advance 0 = debugM "advance: 0" >> pure () -advance !n = Get $ \_ _ s -> do - debugM ("advance: " <> show n) - let newUsed = n + usedBits s - newS = s { pos = pos s + n - , usedBits = newUsed `mod` 64 - , currPtr = plusPtr (currPtr s) - (8 * (fromIntegral (newUsed `div` 64))) - } - - pure (GetResult newS ()) - --------------------------------------------------------------------------------- - -{-# INLINE guardInfinite #-} -guardInfinite :: Ptr Word -> Ptr Word -> S -> IO () -guardInfinite end cur s = - when (cur >= (end `plusPtr` 16)) $ do - throwIO (InfiniteCue (end, s)) - --- TODO Should this be (>= end) or (> end)? -{-# INLINE peekCurWord #-} -peekCurWord :: Get Word -peekCurWord = Get $ \end _ s -> do - debugMId "peekCurWord" $ do - guardInfinite end (currPtr s) s - if ptrToWordPtr (currPtr s) >= ptrToWordPtr end - then pure (GetResult s 0) - else GetResult s <$> peek (currPtr s) - --- TODO Same question as above. -{-# INLINE peekNextWord #-} -peekNextWord :: Get Word -peekNextWord = Get $ \end _ s -> do - debugMId "peekNextWord" $ do - let pTarget = currPtr s `plusPtr` 8 - guardInfinite end pTarget s - if ptrToWordPtr pTarget >= ptrToWordPtr end - then pure (GetResult s 0) - else GetResult s <$> peek pTarget - -{-# INLINE peekUsedBits #-} -peekUsedBits :: Get Word -peekUsedBits = - debugMId "peekUsedBits" $ do - Get $ \_ _ s -> pure (GetResult s (usedBits s)) - -{-| - Get a bit. - - - Peek the current word. - - Right-shift by the bit-offset. - - Mask the high bits. --} -{-# INLINE dBit #-} -dBit :: Get Bool -dBit = do - debugMId "dBit" $ do - wor <- peekCurWord - use <- fromIntegral <$> peekUsedBits - advance 1 - pure (0 /= shiftR wor use .&. 1) - -{-# INLINE dWord #-} -dWord :: Get Word -dWord = do - debugMId "dWord" $ do - res <- peekWord - advance 64 - pure res - -{-| - Get n bits, where n > 64: - - - Get (n/64) words. - - Advance by n bits. - - Calculate an offset (equal to the current bit-offset) - - Calculate the length (equal to n) - - Construct a bit-vector using the buffer*length*offset. --} -{-# INLINE dAtomBits #-} -dAtomBits :: Word -> Get Atom -dAtomBits !(fromIntegral -> bits) = do - debugMId ("dAtomBits(" <> show bits <> ")") $ do - fmap wordsAtom $ - VP.generateM bufSize $ \i -> do - debugM (show i) - if (i == lastIdx && numExtraBits /= 0) - then dWordBits (fromIntegral numExtraBits) - else dWord - where - bufSize = numFullWords + min 1 numExtraBits - lastIdx = bufSize - 1 - numFullWords = bits `div` 64 - numExtraBits = bits `mod` 64 - -{-| - In order to peek at the next Word64: - - - If we are past the end of the buffer: - - Return zero. - - If the bit-offset is zero: - - Just peek. - - If we are pointing to the last word: - - Peek and right-shift by the bit offset. - - Otherwise, - - Peek the current word *and* the next word. - - Right-shift the current word by the bit-offset. - - Left-shift the next word by the bit-offset. - - Binary or the resulting two words. --} -{-# INLINE peekWord #-} -peekWord :: Get Word -peekWord = do - debugMId "peekWord" $ do - off <- peekUsedBits - cur <- peekCurWord - nex <- peekNextWord - let res = swiz off (cur, nex) - debugM ("\t" <> (take 10 $ reverse $ printf "%b" (fromIntegral res :: Integer)) <> "..") - pure res - -{-# INLINE swiz #-} -swiz :: Word -> (Word, Word) -> Word -swiz !(fromIntegral -> off) (!low, !hig) = - (.|.) (shiftR low off) (shiftL hig (64-off)) - -{-# INLINE takeLowBits #-} -takeLowBits :: Word -> Word -> Word -takeLowBits 64 !wor = wor -takeLowBits !wid !wor = (2^wid - 1) .&. wor - -{-| - Make a word from the next n bits (where n <= 64). - - - Peek at the next word. - - Mask the n lowest bits from the word. - - Advance by that number of bits. - - Return the word. --} -{-# INLINE dWordBits #-} -dWordBits :: Word -> Get Word -dWordBits !n = do - debugMId ("dWordBits(" <> show n <> ")") $ do - w <- peekWord - advance n - debugM ("dWordBits: " <> show (takeLowBits n w)) - pure (takeLowBits n w) - - --- Fast Cue -------------------------------------------------------------------- - -{-| - Get the exponent-prefix of an atom: - - - Peek at the next word. - - Calculate the number of least-significant bits in that word (there's - a primitive for this). - - Advance by that number of bits. - - Return the number of bits --} -{-# INLINE dExp #-} -dExp :: Get Word -dExp = do - debugMId "dExp" $ do - W# w <- peekWord - let res = W# (ctz# w) - advance (res+1) - pure res - -{-# INLINE dAtomLen #-} -dAtomLen :: Get Word -dAtomLen = do - debugMId "dAtomLen" $ do - dExp >>= \case - 0 -> pure 0 - e -> do p <- dWordBits (e-1) - pure (2^(e-1) .|. p) - -{-# INLINE dRef #-} -dRef :: Get Word -dRef = debugMId "dRef" (dAtomLen >>= dWordBits) - -{-# INLINE dAtom #-} -dAtom :: Get Atom -dAtom = do - debugMId "dAtom" $ do - dAtomLen >>= \case - 0 -> pure 0 - n -> dAtomBits n - -{-# INLINE dCell #-} -dCell :: Get Noun -dCell = Cell <$> dNoun <*> dNoun - -{-| - Get a Noun. - - - Get a bit - - If it's zero, get an atom. - - Otherwise, get another bit. - - If it's zero, get a cell. - - If it's one, get an atom. --} -dNoun :: Get Noun -dNoun = do - p <- getPos - - let yield r = insRef p r >> pure r - - dBit >>= \case - False -> do debugM "It's an atom" - (Atom <$> dAtom) >>= yield - True -> dBit >>= \case - False -> do debugM "It's a cell" - dCell >>= yield - True -> do debugM "It's a backref" - dRef >>= getRef diff --git a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Jam.hs b/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Jam.hs deleted file mode 100644 index 325bb4cd1..000000000 --- a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Jam.hs +++ /dev/null @@ -1,368 +0,0 @@ -{-# OPTIONS_GHC -O2 #-} - -{-| - Fast implementation of Jam (Noun -> Atom). - - This is based on the implementation of `flat`. --} -module Urbit.Noun.Jam (jam, jamBS) where - -import ClassyPrelude hiding (hash) - -import Urbit.Atom -import Urbit.Noun.Core - -import Data.Bits (clearBit, setBit, shiftL, shiftR, (.|.)) -import Data.Vector.Primitive ((!)) -import Foreign.Marshal.Alloc (callocBytes, free) -import Foreign.Ptr (Ptr, castPtr, plusPtr) -import Foreign.Storable (poke) -import GHC.Int (Int(I#)) -import GHC.Integer.GMP.Internals (BigNat) -import GHC.Natural (Natural(NatJ#, NatS#)) -import GHC.Prim (Word#, plusWord#, word2Int#) -import GHC.Word (Word(W#)) -import System.IO.Unsafe (unsafePerformIO) - -import qualified Urbit.Atom.Fast as Atom -import qualified Data.ByteString.Unsafe as BS -import qualified Data.HashTable.IO as H -import qualified Data.Vector.Primitive as VP - - --- Exports --------------------------------------------------------------------- - -jamBS :: Noun -> ByteString -jamBS n = doPut bt sz (writeNoun n) - where - (sz, bt) = unsafePerformIO (compress n) - -jam :: Noun -> Atom -jam = bytesAtom . jamBS - - --- Types ----------------------------------------------------------------------- - -{-| - The encoder state. - - - ptr: Pointer into the output buffer. - - reg: Next 64 bits of output, partially written. - - off: Number of bits already written into `reg` - - pos: Total number of bits written. --} -data S = S - { ptr :: {-# UNPACK #-} !(Ptr Word) - , reg :: {-# UNPACK #-} !Word - , off :: {-# UNPACK #-} !Int - , pos :: {-# UNPACK #-} !Word - } deriving (Show,Eq,Ord) - -data PutResult a = PutResult {-# UNPACK #-} !S !a - deriving Functor - -newtype Put a = Put - { runPut :: H.CuckooHashTable Word Word - -> S - -> IO (PutResult a) - } - --------------------------------------------------------------------------------- - -{-# INLINE getRef #-} -getRef :: Put (Maybe Word) -getRef = Put $ \tbl s -> PutResult s <$> H.lookup tbl (pos s) - -{-| - 1. Write the register to the output, and increment the output pointer. --} -{-# INLINE flush #-} -flush :: Put () -flush = Put $ \tbl s@S{..} -> do - poke ptr reg - pure $ PutResult (s { ptr = ptr `plusPtr` 8 }) () - -{-# INLINE update #-} -update :: (S -> S) -> Put () -update f = Put $ \tbl s@S{} -> pure (PutResult (f s) ()) - -{-# INLINE setRegOff #-} -setRegOff :: Word -> Int -> Put () -setRegOff r o = update $ \s@S{} -> (s {reg=r, off=o}) - -{-# INLINE setReg #-} -setReg :: Word -> Put () -setReg r = update $ \s@S{} -> (s { reg=r }) - -{-# INLINE getS #-} -getS :: Put S -getS = Put $ \tbl s -> pure (PutResult s s) - -{-# INLINE putS #-} -putS :: S -> Put () -putS s = Put $ \tbl _ -> pure (PutResult s ()) - -{-| - To write a bit: - - | reg |= 1 << off - | off <- (off + 1) % 64 - | if (!off): - | buf[w++] <- reg - | reg <- 0 --} -{-# INLINE writeBit #-} -writeBit :: Bool -> Put () -writeBit b = Put $ \tbl s@S{..} -> do - let s' = s { reg = (if b then setBit else clearBit) reg off - , off = (off + 1) `mod` 64 - , pos = pos + 1 - } - - if off == 63 - then runPut (flush >> setRegOff 0 0) tbl s' - else pure $ PutResult s' () - -{-| - To write a 64bit word: - - | reg |= w << off - | buf[bufI++] = reg - | reg = w >> (64 - off) --} -{-# INLINE writeWord #-} -writeWord :: Word -> Put () -writeWord wor = do - S{..} <- getS - setReg (reg .|. shiftL wor off) - flush - update $ \s -> s { pos = 64 + pos - , reg = shiftR wor (64 - off) - } - -{-| - To write some bits (< 64) from a word: - - | wor = takeBits(wid, wor) - | reg = reg .|. (wor << off) - | off = (off + wid) % 64 - | - | if (off + wid >= 64) - | buf[w] = x - | reg = wor >> (wid - off) --} -{-# INLINE writeBitsFromWord #-} -writeBitsFromWord :: Int -> Word -> Put () -writeBitsFromWord wid wor = do - wor <- pure (Atom.takeBitsWord wid wor) - - oldSt <- getS - - let newSt = oldSt { reg = reg oldSt .|. shiftL wor (off oldSt) - , off = (off oldSt + wid) `mod` 64 - , pos = fromIntegral wid + pos oldSt - } - - putS newSt - - when (wid + off oldSt >= 64) $ do - flush - setReg (shiftR wor (wid - off newSt)) - -{-| - Write all of the the signficant bits of a direct atom. --} -{-# INLINE writeAtomWord# #-} -writeAtomWord# :: Word# -> Put () -writeAtomWord# w = do - writeBitsFromWord (I# (word2Int# (Atom.wordBitWidth# w))) (W# w) - -{-# INLINE writeAtomWord #-} -writeAtomWord :: Word -> Put () -writeAtomWord (W# w) = writeAtomWord# w - -{-| - Write all of the the signficant bits of an indirect atom. - - TODO Use memcpy when the bit-offset of the output is divisible by 8. --} -{-# INLINE writeAtomBigNat #-} -writeAtomBigNat :: BigNat -> Put () -writeAtomBigNat !(Atom.bigNatWords -> words) = do - let lastIdx = VP.length words - 1 - for_ [0..(lastIdx-1)] $ \i -> - writeWord (words ! i) - writeAtomWord (words ! lastIdx) - -{-# INLINE writeAtomBits #-} -writeAtomBits :: Atom -> Put () -writeAtomBits = \case NatS# wd -> writeAtomWord# wd - NatJ# bn -> writeAtomBigNat bn - - --- Put Instances --------------------------------------------------------------- - -instance Functor Put where - fmap f g = Put $ \tbl s -> do - PutResult s' a <- runPut g tbl s - pure $ PutResult s' (f a) - {-# INLINE fmap #-} - -instance Applicative Put where - pure x = Put (\_ s -> return $ PutResult s x) - {-# INLINE pure #-} - - Put f <*> Put g = Put $ \tbl s1 -> do - PutResult s2 f' <- f tbl s1 - PutResult s3 g' <- g tbl s2 - return $ PutResult s3 (f' g') - {-# INLINE (<*>) #-} - - Put f *> Put g = Put $ \tbl s1 -> do - PutResult s2 _ <- f tbl s1 - g tbl s2 - {-# INLINE (*>) #-} - -instance Monad Put where - return = pure - {-# INLINE return #-} - - (>>) = (*>) - {-# INLINE (>>) #-} - - Put x >>= f = Put $ \tbl s -> do - PutResult s' x' <- x tbl s - runPut (f x') tbl s' - {-# INLINE (>>=) #-} - - --------------------------------------------------------------------------------- - -doPut :: H.CuckooHashTable Word Word -> Word -> Put () -> ByteString -doPut !tbl !sz m = - unsafePerformIO $ do - -- traceM "doPut" - buf <- callocBytes (fromIntegral (wordSz*8)) - _ <- runPut (m >> mbFlush) tbl (S buf 0 0 0) - BS.unsafePackCStringFinalizer (castPtr buf) byteSz (free buf) - where - !wordSz = fromIntegral (sz `divUp` 64) - !byteSz = fromIntegral (sz `divUp` 8) - !divUp = \x y -> (x `div` y) + (if x `mod` y == 0 then 0 else 1) - - mbFlush :: Put () - mbFlush = do - shouldFlush <- (/= 0) . off <$> getS - when shouldFlush flush - - --------------------------------------------------------------------------------- - -{-| - TODO Handle back references --} -writeNoun :: Noun -> Put () -writeNoun !n = - getRef >>= \case - Just bk -> writeBackRef bk - Nothing -> case n of Atom a -> writeAtom a - Cell h t -> writeCell h t - -{-# INLINE writeMat #-} -writeMat :: Atom -> Put () -writeMat 0 = writeBit True -writeMat atm = do - writeBitsFromWord (preWid+1) (shiftL 1 preWid) - writeBitsFromWord (preWid-1) atmWid - writeAtomBits atm - where - atmWid = Atom.atomBitWidth atm - preWid = fromIntegral (Atom.wordBitWidth atmWid) - -{-# INLINE writeCell #-} -writeCell :: Noun -> Noun -> Put () -writeCell !h !t = do - writeBit True - writeBit False - writeNoun h - writeNoun t - -{-# INLINE writeAtom #-} -writeAtom :: Atom -> Put () -writeAtom !a = do - writeBit False - writeMat a - -{-# INLINE writeBackRef #-} -writeBackRef :: Word -> Put () -writeBackRef !a = do - p <- pos <$> getS - writeBit True - writeBit True - writeMat (fromIntegral a) - - --- Calculate Jam Size and Backrefs --------------------------------------------- - -{-# INLINE matSz #-} -matSz :: Atom -> Word -matSz !a = W# (matSz# a) - -{-# INLINE matSz# #-} -matSz# :: Atom -> Word# -matSz# 0 = 1## -matSz# a = preW `plusWord#` preW `plusWord#` atmW - where - atmW = Atom.atomBitWidth# a - preW = Atom.wordBitWidth# atmW - -{-# INLINE atomSz #-} -atomSz :: Atom -> Word -atomSz !w = 1 + matSz w - -{-# INLINE refSz #-} -refSz :: Word -> Word -refSz !w = 1 + jamWordSz w - -{-# INLINE jamWordSz #-} -jamWordSz :: Word -> Word -jamWordSz 0 = 2 -jamWordSz (W# w) = 1 + 2*(W# preW) + (W# atmW) - where - atmW = Atom.wordBitWidth# w - preW = Atom.wordBitWidth# atmW - -compress :: Noun -> IO (Word, H.CuckooHashTable Word Word) -compress !top = do - let sz = max 50 - $ min 10_000_000 - $ (2*) $ (10^) $ floor $ logBase 600 $ fromIntegral $ nounSize top - - nodes :: H.BasicHashTable Noun Word <- H.newSized sz - backs :: H.CuckooHashTable Word Word <- H.newSized sz - - let proc :: Word -> Noun -> IO Word - proc !pos = \case - Atom a -> pure (atomSz a) - Cell h t -> do !hSz <- go (pos+2) h - !tSz <- go (pos+2+hSz) t - pure (2+hSz+tSz) - - go :: Word -> Noun -> IO Word - go !p !inp = do - H.lookup nodes inp >>= \case - Nothing -> do - H.insert nodes inp p - proc p inp - Just bak -> do - let rs = refSz bak - doRef = H.insert backs p bak $> rs - noRef = proc p inp - case inp of - Cell _ _ -> doRef - Atom a | rs < atomSz (fromIntegral a) -> doRef - _ -> noRef - - res <- go 0 top - - pure (res, backs) diff --git a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Mug.hs b/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Mug.hs deleted file mode 100644 index 005f82232..000000000 --- a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/Mug.hs +++ /dev/null @@ -1,38 +0,0 @@ -{-# OPTIONS_GHC -O2 #-} - -module Urbit.Noun.Mug where - -import ClassyPrelude - -import Data.Bits -import Data.ByteString.Builder -import Urbit.Atom - -import Data.Hash.Murmur (murmur3) - -type Mug = Word32 - -{-# INLINE mugBS #-} -mugBS :: ByteString -> Word32 -mugBS = mum 0xcafe_babe 0x7fff - --- XX is there a way to do this without copy? -{-# INLINE mugAtom #-} -mugAtom :: Atom -> Word32 -mugAtom = mugBS . atomBytes - -{-# INLINE mugBoth #-} -mugBoth :: Word32 -> Word32 -> Word32 -mugBoth m n = mum 0xdead_beef 0xfffe - $ toStrict $ toLazyByteString (word32LE m <> word32LE n) - -mum :: Word32 -> Word32 -> ByteString -> Word32 -mum syd fal key = go syd 0 - where - go syd 8 = fal - go syd i = - let haz = murmur3 syd key - ham = shiftR haz 31 `xor` (haz .&. 0x7fff_ffff) - in if ham /= 0 - then ham - else go (syd + 1) (i + 1) diff --git a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/TH.hs b/pkg/hs/urbit-noun-core/lib/Urbit/Noun/TH.hs deleted file mode 100644 index c619ab655..000000000 --- a/pkg/hs/urbit-noun-core/lib/Urbit/Noun/TH.hs +++ /dev/null @@ -1,300 +0,0 @@ -{-| - Template Haskell Code to Generate FromNoun and ToNoun Instances --} -module Urbit.Noun.TH (deriveNoun, deriveToNoun, deriveFromNoun, deriveToNounFunc, deriveFromNounFunc) where - -import ClassyPrelude hiding (fromList) -import Control.Monad.Fail (fail) -import Language.Haskell.TH -import Language.Haskell.TH.Syntax -import Urbit.Noun.Convert - -import Urbit.Noun.Core (textToUtf8Atom) - -import qualified Data.Char as C - - --------------------------------------------------------------------------------- - -type ConInfo = (Name, [Type]) - -data Shape - = Vod - | Tup ConInfo - | Sum [(String, Name)] [(String, ConInfo)] - deriving (Eq, Ord, Show) - -typeShape :: Name -> Q ([TyVarBndr], Shape) -typeShape tyName = do - (vars, cs) <- - reify tyName >>= \case - TyConI (DataD _ nm vars _ cs _) -> pure (vars, unpackCon <$> cs) - TyConI (NewtypeD _ nm vars _ c _) -> pure (vars, [unpackCon c]) - TyConI _ -> fail badSynonym - _ -> fail "not type" - - let prefix = getPrefix (nameStr . fst <$> cs) - splits = splitFn ([], []) cs - splitFn (l, r) = \case - [] -> (l, r) - (n,[]) : cs -> splitFn (tagName prefix n:l, r) cs - conInf : cs -> splitFn (l, tagConInfo prefix conInf:r) cs - - pure $ (vars,) $ case cs of - [] -> Vod - [c] -> Tup c - cs -> uncurry Sum splits - - where - badSynonym = "deriveFunctor: tyCon may not be a type synonym." - - tagConInfo :: Int -> ConInfo -> (String, ConInfo) - tagConInfo pre ci@(nm, _) = (tagString pre nm, ci) - - tagName :: Int -> Name -> (String, Name) - tagName pre n = (tagString pre n, n) - - tyStr = nameStr tyName - tyAbbrv = filter C.isUpper tyStr - - typePrefixed = (tyStr `isPrefixOf`) - abbrvPrefixed = (tyAbbrv `isPrefixOf`) - - getPrefix :: [String] -> Int - getPrefix cs | all typePrefixed cs = length tyStr - getPrefix cs | all abbrvPrefixed cs = length tyAbbrv - getPrefix _ = 0 - - unpackCon :: Con -> ConInfo - unpackCon = \case - NormalC nm bangTypes -> (nm, snd <$> bangTypes) - RecC nm varBangTypes -> (nm, varBangTypes <&> (\(_, _, t) -> t)) - InfixC bangType1 nm bangType2 -> error "Infix Cnstrs are not supported" - ForallC tyVarBndrs ctx con -> error "Polymorphic tys are not supported" - GadtC nm bangTypes ty -> error "GADTs are not supported" - RecGadtC nm varBangTypes ty -> error "GADTs are not supported" - --------------------------------------------------------------------------------- - -deriveNoun :: Name -> Q [Dec] -deriveNoun n = (<>) <$> deriveToNoun n <*> deriveFromNoun n - --------------------------------------------------------------------------------- - -deriveToNoun :: Name -> Q [Dec] -deriveToNoun tyName = do - (params, _) <- typeShape tyName - - exp <- deriveToNounFunc tyName - params <- pure $ zip ['a' ..] params <&> \(n,_) -> mkName (singleton n) - - let ty = foldl' (\acc v -> AppT acc (VarT v)) (ConT tyName) params - - let overlap = Nothing - body = NormalB exp - ctx = params <&> \t -> AppT (ConT ''ToNoun) (VarT t) - inst = AppT (ConT ''ToNoun) ty - - pure [InstanceD overlap ctx inst [ValD (VarP 'toNoun) body []]] - -deriveToNounFunc :: Name -> Q Exp -deriveToNounFunc tyName = do - (_, shape) <- typeShape tyName - pure case shape of - Vod -> vodToNoun - Tup con -> tupToNoun con - -- Enu cons -> enumToAtom cons - Sum atoms cells -> sumToNoun atoms cells - --------------------------------------------------------------------------------- - -addErrTag :: String -> Exp -> Exp -addErrTag tag exp = - -- This spurious let is inserted so we can get better cost center data - -- during heap profiling. - LetE [ValD (VarP nom) (NormalB nam) []] - $ InfixE (Just $ VarE nom) (VarE (mkName ".")) (Just exp) - where - -- XX arguably we should use newName rather than mkName here - nom = mkName $ "named_" ++ filter C.isAlphaNum tag - str = LitE $ StringL tag - nam = LamE [VarP $ mkName "x"] $ AppE (AppE (VarE 'named) str) - $ VarE (mkName "x") - -addCostCenter :: String -> Exp -> Exp -addCostCenter tag exp = - LetE [ValD (VarP nom) (NormalB exp) []] (VarE nom) - where - nom = mkName $ "scc_" ++ filter C.isAlphaNum tag - -deriveFromNoun :: Name -> Q [Dec] -deriveFromNoun tyName = do - (params, _) <- typeShape tyName - - exp <- deriveFromNounFunc tyName - params <- pure $ zip ['a' ..] params <&> \(n,_) -> mkName (singleton n) - - let ty = foldl' (\acc v -> AppT acc (VarT v)) (ConT tyName) params - - let overlap = Nothing - body = NormalB (addCostCenter nom $ addErrTag nom exp) - nom = nameStr tyName - ctx = params <&> \t -> AppT (ConT ''FromNoun) (VarT t) - inst = AppT (ConT ''FromNoun) ty - - pure [InstanceD overlap ctx inst [ValD (VarP 'parseNoun) body []]] - -deriveFromNounFunc :: Name -> Q Exp -deriveFromNounFunc tyName = do - (_, shape) <- typeShape tyName - pure case shape of - Vod -> vodFromNoun - Tup con -> tupFromNoun con - -- Enu cons -> enumFromAtom cons - Sum atoms cells -> sumFromNoun atoms cells - -sumFromNoun :: [(String, Name)] -> [(String, ConInfo)] -> Exp -sumFromNoun [] cl = taggedFromNoun cl -sumFromNoun at [] = enumFromAtom at -sumFromNoun at cl = eitherParser (taggedFromNoun cl) (enumFromAtom at) - where - eitherParser :: Exp -> Exp -> Exp - eitherParser x y = - LamE [VarP n] $ - InfixE (Just xCase) (VarE (mkName "<|>")) (Just yCase) - where - xCase = AppE x (VarE n) - yCase = AppE y (VarE n) - n = mkName "atomOrCell" - -enumFromAtom :: [(String, Name)] -> Exp -enumFromAtom cons = LamE [VarP x] body - where - (x, c) = (mkName "x", mkName "c") - getTag = BindS (VarP c) - $ AppE (AppE (VarE 'named) matchFail) - $ AppE (VarE 'parseNounUtf8Atom) (VarE x) - examine = NoBindS $ CaseE (VarE c) (matches ++ [fallback]) - matches = mkMatch <$> cons - fallback = Match WildP (NormalB $ AppE (VarE 'fail) matchFail) [] - body = DoE [getTag, examine] - matchFail = LitE $ StringL ("Expected one of: " <> possible) - possible = intercalate " " (('%':) . fst <$> cons) - mkMatch = \(tag, nm) -> - Match (SigP (LitP $ StringL tag) (ConT ''Text)) - (NormalB $ AppE (VarE 'pure) (ConE nm)) - [] - -applyE :: Exp -> [Exp] -> Exp -applyE e [] = e -applyE e (a:as) = applyE (AppE e a) as - -vodFromNoun :: Exp -vodFromNoun = LamE [WildP] body - where - body = AppE (VarE 'fail) - $ LitE $ StringL "Can't FromNoun on uninhabited data type" - -tupFromNoun :: ConInfo -> Exp -tupFromNoun (n, tys) = LamE [VarP x] body - where - x = mkName "x" - vars = mkName . singleton . fst <$> zip ['a'..] tys - body = DoE [getTup, convert] - convert = NoBindS $ AppE (VarE 'pure) $ applyE (ConE n) (VarE <$> vars) - getTup = BindS (TupP $ VarP <$> vars) $ AppE (VarE 'parseNoun) (VarE x) - -unexpectedTag :: [String] -> Exp -> Exp -unexpectedTag expected got = - applyE (VarE 'mappend) [LitE (StringL prefix), AppE (VarE 'unpack) got] - where - possible = intercalate " " (('%':) <$> expected) - prefix = "Expected one of: " <> possible <> " but got %" - -taggedFromNoun :: [(String, ConInfo)] -> Exp -taggedFromNoun cons = LamE [VarP n] (DoE [getHead, getTag, examine]) - where - (n, h, t, c) = (mkName "noun", mkName "hed", mkName "tel", mkName "tag") - - getHead = BindS (TupP [VarP h, VarP t]) - $ AppE (VarE 'parseNoun) (VarE n) - - getTag = BindS (SigP (VarP c) (ConT ''Text)) - $ AppE (AppE (VarE 'named) tagFail) - $ AppE (VarE 'parseNounUtf8Atom) (VarE h) - - examine = NoBindS - $ CaseE (VarE c) (matches ++ [fallback]) - - matches = mkMatch <$> cons - mkMatch = \(tag, (n, tys)) -> - let body = addCostCenter tag - $ AppE (addErrTag ('%':tag) (tupFromNoun (n, tys))) - (VarE t) - in Match (LitP $ StringL tag) (NormalB body) [] - - fallback = Match WildP (NormalB $ AppE (VarE 'fail) matchFail) [] - matchFail = addCostCenter "matchFail" $ unexpectedTag (fst <$> cons) (VarE c) - - tagFail = LitE $ StringL (intercalate " " (('%':) <$> (fst <$> cons))) - --------------------------------------------------------------------------------- - -tagString :: Int -> Name -> String -tagString prefix = hsToHoon . drop prefix . nameStr - -nameStr :: Name -> String -nameStr (Name (OccName n) _) = n - -tagNoun :: String -> Exp -tagNoun = AppE (VarE 'textToUtf8Atom) - . LitE - . StringL - -tagTup :: String -> [Name] -> Exp -tagTup tag args = AppE (VarE 'toNoun) $ TupE (tagNoun tag : fmap VarE args) - -tup :: [Name] -> Exp -tup = AppE (VarE 'toNoun) . TupE . fmap VarE - --------------------------------------------------------------------------------- - -vodToNoun :: Exp -vodToNoun = LamCaseE [] - -tupToNoun :: ConInfo -> Exp -tupToNoun cons = LamCaseE [mkMatch cons] - where - mkMatch :: ConInfo -> Match - mkMatch (nm, tys) = Match (ConP nm params) (NormalB body) [] - where vars = (zip tys ['a'..]) <&> (mkName . singleton . snd) - params = VarP <$> vars - body = tup vars - -sumToNoun :: [(String, Name)] -> [(String, ConInfo)] -> Exp -sumToNoun a c = - LamCaseE (mixed <&> uncurry mkMatch) - where - mixed = mconcat [ a <&> \(x,y) -> (x, Left y) - , c <&> \(x,y) -> (x, Right y) - ] - - mkMatch :: String -> Either Name ConInfo -> Match - mkMatch tag = \case - Left nm -> Match (ConP nm []) (NormalB $ tagNoun tag) [] - Right (nm, tys) -> Match (ConP nm params) (NormalB body) [] - where vars = (zip tys ['a'..]) <&> (mkName . singleton . snd) - params = VarP <$> vars - body = tagTup tag vars - --------------------------------------------------------------------------------- - -hsToHoon :: String -> String -hsToHoon = go [] - where - go acc [] = intercalate "-" $ reverse acc - go acc (c:cs) = go (elem:acc) remain - where - head = C.toLower c - (tail, remain) = break C.isUpper cs - elem = head:tail diff --git a/pkg/hs/urbit-noun-core/package.yaml b/pkg/hs/urbit-noun-core/package.yaml deleted file mode 100644 index 2d5dfb8a9..000000000 --- a/pkg/hs/urbit-noun-core/package.yaml +++ /dev/null @@ -1,73 +0,0 @@ -name: urbit-noun-core -version: 0.10.4 -license: MIT -license-file: LICENSE - -library: - source-dirs: lib - ghc-options: - - -Wall - - -Werror - - -Wno-type-defaults - - -Wno-unused-matches - - -Wno-name-shadowing - - -O2 - -dependencies: - - base - - QuickCheck - - ghc-prim - - hashable - - urbit-atom - - classy-prelude - - bytestring - - hashtables - - vector - - integer-gmp - - template-haskell - - murmur3 - -default-extensions: - - ApplicativeDo - - BangPatterns - - BlockArguments - - ConstraintKinds - - DataKinds - - DefaultSignatures - - DeriveAnyClass - - DeriveDataTypeable - - DeriveFoldable - - DeriveGeneric - - DeriveTraversable - - DerivingStrategies - - EmptyCase - - EmptyDataDecls - - FlexibleContexts - - FlexibleInstances - - FunctionalDependencies - - GADTs - - GeneralizedNewtypeDeriving - - LambdaCase - - MagicHash - - MultiParamTypeClasses - - NamedFieldPuns - - NoImplicitPrelude - - NumericUnderscores - - OverloadedStrings - - PackageImports - - PartialTypeSignatures - - PatternSynonyms - - QuasiQuotes - - Rank2Types - - RankNTypes - - RecordWildCards - - ScopedTypeVariables - - StandaloneDeriving - - TemplateHaskell - - TupleSections - - TypeApplications - - TypeFamilies - - TypeOperators - - UnboxedTuples - - UnicodeSyntax - - ViewPatterns diff --git a/pkg/hs/urbit-noun/.gitignore b/pkg/hs/urbit-noun/.gitignore deleted file mode 100644 index 65e7ea818..000000000 --- a/pkg/hs/urbit-noun/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.stack-work -*.cabal -test/gold/*.writ diff --git a/pkg/hs/urbit-noun/LICENSE b/pkg/hs/urbit-noun/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/urbit-noun/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/urbit-noun/lib/Urbit/Noun.hs b/pkg/hs/urbit-noun/lib/Urbit/Noun.hs deleted file mode 100644 index 3357e91d9..000000000 --- a/pkg/hs/urbit-noun/lib/Urbit/Noun.hs +++ /dev/null @@ -1,59 +0,0 @@ -{-| - Noun Library - - This module just re-exports things from submodules. --} -module Urbit.Noun - ( module Urbit.Atom - , module Data.Word - , module Urbit.Noun.Conversions - , module Urbit.Noun.Convert - , module Urbit.Noun.Core - , module Urbit.Noun.Cue - , module Urbit.Noun.Jam - , module Urbit.Noun.Mug - , module Urbit.Noun.Tank - , module Urbit.Noun.TH - , module Urbit.Noun.Tree - , _Cue - , LoadErr(..) - , loadFile - ) where - -import ClassyPrelude -import Control.Lens - -import Data.Word -import Urbit.Atom -import Urbit.Noun.Conversions -import Urbit.Noun.Convert -import Urbit.Noun.Core -import Urbit.Noun.Cue -import Urbit.Noun.Jam -import Urbit.Noun.Mug -import Urbit.Noun.Tank -import Urbit.Noun.TH -import Urbit.Noun.Tree - --------------------------------------------------------------------------------- - -_Cue :: Prism' ByteString Noun -_Cue = prism' jamBS (eitherToMaybe . cueBS) - where - eitherToMaybe (Left _) = Nothing - eitherToMaybe (Right x) = Just x - -data LoadErr - = FileErr IOException - | CueErr DecodeErr - | ParseErr [Text] Text - deriving (Show) - -instance Exception LoadErr - -loadFile :: forall a. FromNoun a => FilePath -> IO (Either LoadErr a) -loadFile pax = try $ do - byt <- try (readFile pax) >>= either (throwIO . FileErr) pure - non <- cueBS byt & either (throwIO . CueErr) pure - res <- fromNounErr non & either (throwIO . uncurry ParseErr) pure - pure res diff --git a/pkg/hs/urbit-noun/lib/Urbit/Noun/Conversions.hs b/pkg/hs/urbit-noun/lib/Urbit/Noun/Conversions.hs deleted file mode 100644 index c8be6d0cd..000000000 --- a/pkg/hs/urbit-noun/lib/Urbit/Noun/Conversions.hs +++ /dev/null @@ -1,902 +0,0 @@ -{-# LANGUAGE StrictData #-} - -{-| - Large Library of conversion between various types and Nouns. --} - -module Urbit.Noun.Conversions - ( Nullable(..), Jammed(..), AtomCell(..) - , Word128, Word256, Word512 - , Bytes(..), Octs(..), File(..) - , Cord(..), Knot(..), Term(..), Tape(..), Tour(..) - , BigTape(..), BigCord(..) - , Wain(..), Wall, Each(..) - , UD(..), UV(..), UW(..), cordToUW - , Path(..), EvilPath(..), Ship(..) - , Lenient(..), pathToFilePath, filePathToPath - , showUD, tshowUD - , textAsT - ) where - -import ClassyPrelude hiding (hash) - -import Control.Lens hiding (Each, Index, (<.>)) -import Control.Monad.Fail (fail) -import Data.Void -import Data.Word -import Text.Regex.TDFA -import Text.Regex.TDFA.Text () -import Urbit.Atom -import Urbit.Noun.Convert -import Urbit.Noun.Core -import Urbit.Noun.TH - -import Data.LargeWord (LargeKey(..), Word128, Word256) -import GHC.Exts (chr#, isTrue#, leWord#, word2Int#) -import GHC.Natural (Natural) -import GHC.Types (Char(C#)) -import GHC.Word (Word32(W32#)) -import Prelude ((!!)) -import RIO.FilePath (joinPath, splitDirectories, takeBaseName, - takeDirectory, takeExtension) -import Urbit.Noun.Cue (cue) -import Urbit.Noun.Jam (jam) -import Urbit.Ob (patp) - -import qualified Data.Char as C -import qualified Data.Text as T -import qualified Data.Text.Encoding as T -import qualified Numeric as N - - --- Noun ------------------------------------------------------------------------ - -instance ToNoun Noun where - toNoun = id - -instance FromNoun Noun where - parseNoun = pure - - ---- Atom ----------------------------------------------------------------------- - -instance ToNoun Atom where - toNoun = Atom - -instance FromNoun Atom where - parseNoun = named "Atom" . \case - Atom a -> pure a - Cell _ _ -> fail "Expecting an atom, but got a cell" - - --- Void ------------------------------------------------------------------------ - -instance ToNoun Void where - toNoun = absurd - -instance FromNoun Void where - parseNoun _ = named "Void" $ fail "Can't produce void" - - --- Cord ------------------------------------------------------------------------ - -newtype Cord = Cord { unCord :: Text } - deriving newtype (Eq, Ord, Show, IsString, NFData) - -instance ToNoun Cord where - toNoun = textToUtf8Atom . unCord - -instance FromNoun Cord where - parseNoun = named "Cord" . fmap Cord . parseNounUtf8Atom - - --- Decimal Cords --------------------------------------------------------------- - -newtype UD = UD { unUD :: Word } - deriving newtype (Eq, Ord, Show, Enum, Real, Integral, Num) - -instance ToNoun UD where - toNoun = toNoun . Cord . tshow . unUD - -instance FromNoun UD where - parseNoun n = named "UD" do - Cord t <- parseNoun n - readMay t & \case - Nothing -> fail ("invalid decimal atom: " <> unpack (filter (/= '.') t)) - Just vl -> pure (UD vl) - -showUD :: (Show i, Integral i) => i -> String -showUD = uTypeAddDots 3 . show - -tshowUD :: (Show i, Integral i) => i -> Text -tshowUD = pack . uTypeAddDots 3 . show - - --------------------------------------------------------------------------------- - -uTypeAddDots :: Int -> String -> String -uTypeAddDots n = reverse . go . reverse - where - go s = if null tel then hed - else hed <> "." <> go tel - where - hed = take n s - tel = drop n s - -convertToU :: [Char] -> [Char] -> Atom -> String -convertToU baseMap prefix = go [] - where - go acc 0 = "0" <> prefix <> uTypeAddDots 5 acc - go acc n = go (char n : acc) (n `div` len) - - char n = baseMap !! (fromIntegral (n `mod` len)) - - len = fromIntegral (length baseMap) - -convertFromU :: (Char -> Maybe Atom) -> Char -> Atom -> String -> Maybe Atom -convertFromU fetch prefix length = \case - ('0':prefix:cs) -> go (0, 0) (reverse cs) - _ -> Nothing - where - go (i, acc) [] = pure acc - go (i, acc) ('.' : cs) = go (i, acc) cs - go (i, acc) (c : cs) = do - n <- fetch c - go (i+1, acc+(length^i)*n) cs - - --- @uv -newtype UV = UV { unUV :: Atom } - deriving newtype (Eq, Ord, Show, Num, Enum, Real, Integral) - -instance ToNoun UV where - toNoun = toNoun . Cord . pack . toUV . fromIntegral . unUV - -instance FromNoun UV where - parseNoun n = do - Cord c <- parseNoun n - case fromUV $ unpack c of - Nothing -> fail ("Invalid @uv: " <> unpack c) - Just uv -> pure (UV uv) - -fromUV :: String -> Maybe Atom -fromUV = convertFromU uvCharNum 'v' (fromIntegral $ length base32Chars) - -toUV :: Atom -> String -toUV = convertToU base32Chars "v" - -base32Chars :: [Char] -base32Chars = (['0'..'9'] <> ['a'..'v']) - -uvCharNum :: Char -> Maybe Atom -uvCharNum = \case - '0' -> pure 0 - '1' -> pure 1 - '2' -> pure 2 - '3' -> pure 3 - '4' -> pure 4 - '5' -> pure 5 - '6' -> pure 6 - '7' -> pure 7 - '8' -> pure 8 - '9' -> pure 9 - 'a' -> pure 10 - 'b' -> pure 11 - 'c' -> pure 12 - 'd' -> pure 13 - 'e' -> pure 14 - 'f' -> pure 15 - 'g' -> pure 16 - 'h' -> pure 17 - 'i' -> pure 18 - 'j' -> pure 19 - 'k' -> pure 20 - 'l' -> pure 21 - 'm' -> pure 22 - 'n' -> pure 23 - 'o' -> pure 24 - 'p' -> pure 25 - 'q' -> pure 26 - 'r' -> pure 27 - 's' -> pure 28 - 't' -> pure 29 - 'u' -> pure 30 - 'v' -> pure 31 - _ -> Nothing - --------------------------------------------------------------------------------- - --- @uw -newtype UW = UW { unUW :: Atom } - deriving newtype (Eq, Ord, Show, Num, Enum, Real, Integral) - -instance ToNoun UW where - toNoun = toNoun . Cord . pack . toUW . fromIntegral . unUW - -instance FromNoun UW where - parseNoun n = do - Cord c <- parseNoun n - case fromUW $ unpack c of - Nothing -> fail ("Invalid @uw: " <> unpack c) - Just uw -> pure (UW uw) - -fromUW :: String -> Maybe Atom -fromUW = convertFromU uwCharNum 'w' (fromIntegral $ length base64Chars) - -toUW :: Atom -> String -toUW = convertToU base64Chars "w" - -base64Chars :: [Char] -base64Chars = (['0'..'9'] <> ['a'..'z'] <> ['A'..'Z'] <> ['-', '~']) - -uwCharNum :: Char -> Maybe Atom -uwCharNum = \case - '0' -> pure 0 - '1' -> pure 1 - '2' -> pure 2 - '3' -> pure 3 - '4' -> pure 4 - '5' -> pure 5 - '6' -> pure 6 - '7' -> pure 7 - '8' -> pure 8 - '9' -> pure 9 - 'a' -> pure 10 - 'b' -> pure 11 - 'c' -> pure 12 - 'd' -> pure 13 - 'e' -> pure 14 - 'f' -> pure 15 - 'g' -> pure 16 - 'h' -> pure 17 - 'i' -> pure 18 - 'j' -> pure 19 - 'k' -> pure 20 - 'l' -> pure 21 - 'm' -> pure 22 - 'n' -> pure 23 - 'o' -> pure 24 - 'p' -> pure 25 - 'q' -> pure 26 - 'r' -> pure 27 - 's' -> pure 28 - 't' -> pure 29 - 'u' -> pure 30 - 'v' -> pure 31 - 'w' -> pure 32 - 'x' -> pure 33 - 'y' -> pure 34 - 'z' -> pure 35 - 'A' -> pure 36 - 'B' -> pure 37 - 'C' -> pure 38 - 'D' -> pure 39 - 'E' -> pure 40 - 'F' -> pure 41 - 'G' -> pure 42 - 'H' -> pure 43 - 'I' -> pure 44 - 'J' -> pure 45 - 'K' -> pure 46 - 'L' -> pure 47 - 'M' -> pure 48 - 'N' -> pure 49 - 'O' -> pure 50 - 'P' -> pure 51 - 'Q' -> pure 52 - 'R' -> pure 53 - 'S' -> pure 54 - 'T' -> pure 55 - 'U' -> pure 56 - 'V' -> pure 57 - 'W' -> pure 58 - 'X' -> pure 59 - 'Y' -> pure 60 - 'Z' -> pure 61 - '-' -> pure 62 - '~' -> pure 63 - _ -> Nothing - --- Maybe parses the underlying atom value from a text printed in UW format. -cordToUW :: Cord -> Maybe UW -cordToUW = fromNoun . toNoun - --- Char ------------------------------------------------------------------------ - -instance ToNoun Char where - toNoun = Atom . fromIntegral . C.ord - -{- - Hack: pulled this logic from Data.Char impl. --} -instance FromNoun Char where - parseNoun n = named "Char" $ do - W32# w :: Word32 <- parseNoun n - if isTrue# (w `leWord#` 0x10FFFF##) - then pure (C# (chr# (word2Int# w))) - else fail "Word is not a valid character." - - --- Tour ------------------------------------------------------------------------ - -newtype Tour = Tour [Char] - deriving newtype (Eq, Ord, Show, ToNoun, FromNoun) - - --- Double Jammed --------------------------------------------------------------- - -newtype Jammed a = Jammed a - deriving (Eq, Ord, Show) - -instance ToNoun a => ToNoun (Jammed a) where - toNoun (Jammed a) = Atom $ jam $ toNoun a - -instance FromNoun a => FromNoun (Jammed a) where - parseNoun n = named "Jammed" $ do - a <- parseNoun n - cue a & \case - Left err -> fail (show err) - Right res -> do - Jammed <$> parseNoun res - - --- Atom or Cell ---------------------------------------------------------------- - -type Word512 = LargeKey Word256 Word256 - -data AtomCell a c - = ACAtom a - | ACCell c - deriving (Eq, Ord, Show) - -instance (ToNoun a, ToNoun c) => ToNoun (AtomCell a c) where - toNoun (ACAtom a) = toNoun a - toNoun (ACCell c) = toNoun c - -instance (FromNoun a, FromNoun c) => FromNoun (AtomCell a c) where - parseNoun n = named "(,)" $ case n of - Atom _ -> ACAtom <$> parseNoun n - Cell _ _ -> ACCell <$> parseNoun n - - --- Lenient --------------------------------------------------------------------- - -data Lenient a - = FailParse Noun - | GoodParse a - deriving (Eq, Ord, Show) - -instance FromNoun a => FromNoun (Lenient a) where - parseNoun n = - (GoodParse <$> parseNoun n) <|> fallback - where - fallback = - fromNounErr n & \case - Right x -> pure (GoodParse x) - Left err -> do - -- traceM ("LENIENT.FromNoun: " <> show err) - -- traceM (ppShow n) - pure (FailParse n) - -instance ToNoun a => ToNoun (Lenient a) where - toNoun (FailParse n) = n -- trace ("LENIENT.ToNoun: " <> show n) - toNoun (GoodParse x) = toNoun x - - --- Todo -- Debugging Hack ------------------------------------------------------ - -newtype Todo a = Todo a - deriving newtype (Eq, Ord, ToNoun) - -instance Show (Todo a) where - show (Todo _) = "TODO" - -instance FromNoun a => FromNoun (Todo a) where - parseNoun n = do - fromNounErr n & \case - Right x -> pure (Todo x) - Left er -> fail (show er) - -- traceM ("[TODO]: " <> show er <> "\n" <> ppShow n <> "\n") - - --- Nullable -------------------------------------------------------------------- - -{-| - `Nullable a <-> ?@(~ a)` - - This is distinct from `unit`, since there is no tag on the non-atom - case, therefore `a` must always be cell type. --} -data Nullable a = None | Some a - deriving (Eq, Ord, Show) - -instance ToNoun a => ToNoun (Nullable a) where - toNoun = toNoun . \case None -> ACAtom () - Some x -> ACCell x - -instance FromNoun a => FromNoun (Nullable a) where - parseNoun n = named "Nullable" $ do - parseNoun n >>= \case - (ACAtom ()) -> pure None - (ACCell x) -> pure (Some x) - - --- List ------------------------------------------------------------------------ - -instance ToNoun a => ToNoun [a] where - toNoun xs = nounFromList (toNoun <$> xs) - where - nounFromList :: [Noun] -> Noun - nounFromList [] = Atom 0 - nounFromList (x:xs) = Cell x (nounFromList xs) - -instance FromNoun a => FromNoun [a] where - parseNoun = named "[]" . \case - Atom 0 -> pure [] - Atom _ -> fail "list terminated with non-null atom" - Cell l r -> (:) <$> parseNoun l <*> parseNoun r - - --- Tape ------------------------------------------------------------------------ - -{- - A `tape` is a list of utf8 bytes. --} -newtype Tape = Tape { unTape :: Text } - deriving newtype (Eq, Ord, Show, Semigroup, Monoid, IsString) - -instance ToNoun Tape where - toNoun = toNoun . (unpack :: ByteString -> [Word8]) . encodeUtf8 . unTape - -instance FromNoun Tape where - parseNoun n = named "Tape" $ do - as :: [Word8] <- parseNoun n - T.decodeUtf8' (pack as) & \case - Left err -> fail (show err) - Right tx -> pure (Tape tx) - - --- Wain -- List of Lines ------------------------------------------------------- - -newtype Wain = Wain { unWain :: Text } - deriving newtype (Eq, Ord, Show, IsString, NFData) - -instance ToNoun Wain where - toNoun (Wain t) = toNoun (Cord <$> lines t) - -instance FromNoun Wain where - parseNoun n = named "Wain" $ do - tx :: [Cord] <- parseNoun n - pure $ Wain $ unlines (unCord <$> tx) - - --- Wall -- Text Lines ---------------------------------------------------------- - -type Wall = [Tape] - - --- Big Cord -- Don't Print ----------------------------------------------------- - -newtype BigCord = BigCord Cord - deriving newtype (Eq, Ord, ToNoun, FromNoun, IsString) - -instance Show BigCord where - show (BigCord (Cord t)) = show (take 32 t <> "...") - - --- Big Tape -- Don't Print ----------------------------------------------------- - -newtype BigTape = BigTape Tape - deriving newtype (Eq, Ord, ToNoun, FromNoun, IsString) - -instance Show BigTape where - show (BigTape (Tape t)) = show (take 32 t <> "...") - - --- Bytes ----------------------------------------------------------------------- - -newtype Bytes = MkBytes { unBytes :: ByteString } - deriving newtype (Eq, Ord, Show, IsString) - -instance ToNoun Bytes where - toNoun = Atom . bytesAtom . unBytes - -instance FromNoun Bytes where - parseNoun = named "Bytes" . fmap (MkBytes . atomBytes) . parseNoun - - --- Octs ------------------------------------------------------------------------ - -newtype Octs = Octs { unOcts :: ByteString } - deriving newtype (Eq, Ord, Show, IsString) - -instance ToNoun Octs where - toNoun (Octs bs) = - toNoun (int2Word (length bs), bytesAtom bs) - where - int2Word :: Int -> Word - int2Word = fromIntegral - -instance FromNoun Octs where - parseNoun x = named "Octs" $ do - (word2Int -> len, atom) <- parseNoun x - let bs = atomBytes atom - pure $ Octs $ case compare (length bs) len of - EQ -> bs - LT -> bs <> replicate (len - length bs) 0 - GT -> take len bs - where - word2Int :: Word -> Int - word2Int = fromIntegral - - --- File Contents -- Don't Print ------------------------------------------------ - -newtype File = File { unFile :: Octs } - deriving newtype (Eq, Ord, IsString, ToNoun, FromNoun) - -instance Show File where - show (File (Octs bs)) = show (take 32 bs <> "...") - - --- Knot ------------------------------------------------------------------------ - -{- - Knot (@ta) is an array of Word8 encoding an ASCII string. --} -newtype Knot = MkKnot { unKnot :: Text } - deriving newtype (Eq, Ord, Show, Semigroup, Monoid, IsString) - -instance ToNoun Knot where - toNoun = textToUtf8Atom . unKnot - -instance FromNoun Knot where - parseNoun n = named "Knot" $ do - txt <- parseNounUtf8Atom n - if all C.isAscii txt - then pure (MkKnot txt) - else fail ("Non-ASCII chars in knot: " <> unpack txt) - --- equivalent of (cury scot %t) -textAsT :: Text -> Text -textAsT = ("~~" <>) . concatMap \case - ' ' -> "." - '.' -> "~." - '~' -> "~~" - c -> - if (C.isAlphaNum c && not (C.isUpper c)) || (c == '-') then - T.singleton c - else - if C.ord c < 0x10 then "~0" else "~" - <> (pack $ N.showHex (C.ord c) ".") - --- Term ------------------------------------------------------------------------ - -{- - A Term (@tas) is a Knot satisfying the regular expression: - - ([a-z][a-z0-9]*(-[a-z0-9]+)*)? --} -newtype Term = MkTerm { unTerm :: Text } - deriving newtype (Eq, Ord, Show, Semigroup, Monoid, IsString) - -instance ToNoun Term where -- XX TODO - toNoun = textToUtf8Atom . unTerm - -knotRegex :: Text -knotRegex = "([a-z][a-z0-9]*(-[a-z0-9]+)*)?" - -instance FromNoun Term where -- XX TODO - parseNoun n = named "Term" $ do - MkKnot t <- parseNoun n - if t =~ knotRegex - then pure (MkTerm t) - else fail ("Term not valid symbol: " <> unpack t) - - --- Ship ------------------------------------------------------------------------ - -newtype Ship = Ship Word128 -- @p - deriving newtype (Eq, Ord, Enum, Real, Integral, Num, ToNoun, FromNoun) - -instance Show Ship where - show = show . patp . fromIntegral - -instance Hashable Ship where - hashWithSalt s (Ship (LargeKey a b)) = s `hashWithSalt` a `hashWithSalt` b - - --- Path ------------------------------------------------------------------------ - -newtype Path = Path { unPath :: [Knot] } - deriving newtype (Eq, Ord, Semigroup, Monoid) - -instance Show Path where - show = show . intercalate "/" . ("":) . unPath - -newtype EvilPath = EvilPath { unEvilPath :: [Atom] } - deriving newtype (Eq, Ord, Semigroup, Monoid) - -instance Show EvilPath where - show = show . unEvilPath - -pathToFilePath :: Path -> FilePath -pathToFilePath p = joinPath components - where - elements :: [String] = map (unpack . unKnot) (unPath p) - components = case reverse elements of - [] -> [] - [p] -> [p] - (ext : fname : dirs) -> (reverse dirs) <> [(fname <.> ext)] - --- Takes a filepath and converts it to a clay path, changing the '.' to a '/' --- and removing any prefixed '/'. -filePathToPath :: FilePath -> Path -filePathToPath fp = Path path - where - path = map (MkKnot . pack) (dir ++ file) - dir = case (splitDirectories $ (takeDirectory fp)) of - ["."] -> [] - ("/":xs) -> xs - x -> x - file = if ext /= "" then [takeBaseName fp, ext] else [takeBaseName fp] - ext = case takeExtension fp of - ('.':xs) -> xs - x -> x - - --- Bool ------------------------------------------------------------------------ - -instance ToNoun Bool where - toNoun True = Atom 0 - toNoun False = Atom 1 - -instance FromNoun Bool where - parseNoun = named "Bool" . parse - where - parse n = - parseNoun n >>= \case - (0::Atom) -> pure True - 1 -> pure False - _ -> fail "Atom is not a valid loobean" - - --- Integer --------------------------------------------------------------------- - -instance ToNoun Integer where - toNoun = toNoun . (fromIntegral :: Integer -> Natural) - -instance FromNoun Integer where - parseNoun = named "Integer" . fmap natInt . parseNoun - where - natInt :: Natural -> Integer - natInt = fromIntegral - - --- Words ----------------------------------------------------------------------- - -atomToWord :: forall a. (Bounded a, Integral a) => Atom -> Parser a -atomToWord atom = do - if atom > fromIntegral (maxBound :: a) - then fail "Atom doesn't fit in fixed-size word" - else pure (fromIntegral atom) - -wordToNoun :: Integral a => a -> Noun -wordToNoun = Atom . fromIntegral - -nounToWord :: forall a. (Bounded a, Integral a) => Noun -> Parser a -nounToWord = parseNoun >=> atomToWord - -instance ToNoun Word where toNoun = wordToNoun -instance ToNoun Word8 where toNoun = wordToNoun -instance ToNoun Word16 where toNoun = wordToNoun -instance ToNoun Word32 where toNoun = wordToNoun -instance ToNoun Word64 where toNoun = wordToNoun -instance ToNoun Word128 where toNoun = wordToNoun -instance ToNoun Word256 where toNoun = wordToNoun -instance ToNoun Word512 where toNoun = wordToNoun - -instance FromNoun Word where parseNoun = named "Word" . nounToWord -instance FromNoun Word8 where parseNoun = named "Word8" . nounToWord -instance FromNoun Word16 where parseNoun = named "Word16" . nounToWord -instance FromNoun Word32 where parseNoun = named "Word32" . nounToWord -instance FromNoun Word64 where parseNoun = named "Word64" . nounToWord -instance FromNoun Word128 where parseNoun = named "Word128" . nounToWord -instance FromNoun Word256 where parseNoun = named "Word256" . nounToWord -instance FromNoun Word512 where parseNoun = named "Word512" . nounToWord - - --- Maybe is `unit` ------------------------------------------------------------- - --- TODO Consider enforcing that `a` must be a cell. -instance ToNoun a => ToNoun (Maybe a) where - toNoun Nothing = Atom 0 - toNoun (Just x) = Cell (Atom 0) (toNoun x) - -instance FromNoun a => FromNoun (Maybe a) where - parseNoun = named "Maybe" . \case - Atom 0 -> pure Nothing - Atom n -> unexpected ("atom " <> show n) - Cell (Atom 0) t -> Just <$> parseNoun t - Cell n _ -> unexpected ("cell with head-atom " <> show n) - where - unexpected s = fail ("Expected unit value, but got " <> s) - --- Each is a direct translation of Hoon +each, preserving order -data Each a b - = EachYes a - | EachNo b - deriving (Eq, Ord, Show) - -instance (ToNoun a, ToNoun b) => ToNoun (Each a b) where - toNoun (EachYes x) = C (A 0) (toNoun x) - toNoun (EachNo x) = C (A 1) (toNoun x) - -instance (FromNoun a, FromNoun b) => FromNoun (Each a b) where - parseNoun n = named "Each" $ do - (Atom tag, v) <- parseNoun n - case tag of - 0 -> named "&" (EachYes <$> parseNoun v) - 1 -> named "|" (EachNo <$> parseNoun v) - n -> fail ("Each has invalid head-atom: " <> show n) - - --- Tuple Conversions ----------------------------------------------------------- - -instance ToNoun () where - toNoun () = Atom 0 - -instance FromNoun () where - parseNoun = named "()" . \case - Atom 0 -> pure () - x -> fail ("expecting `~`, but got " <> show x) - -instance (ToNoun a, ToNoun b) => ToNoun (a, b) where - toNoun (x, y) = Cell (toNoun x) (toNoun y) - - -shortRec :: Word -> Parser a -shortRec 0 = fail "expected a record, but got an atom" -shortRec 1 = fail ("record too short, only one cell") -shortRec n = fail ("record too short, only " <> show n <> " cells") - -instance (FromNoun a, FromNoun b) => FromNoun (a, b) where - parseNoun n = named ("(,)") $ do - case n of - A _ -> shortRec 0 - C x y -> do - (,) <$> named "1" (parseNoun x) - <*> named "2" (parseNoun y) - -instance (ToNoun a, ToNoun b, ToNoun c) => ToNoun (a, b, c) where - toNoun (x, y, z) = toNoun (x, (y, z)) - -instance (FromNoun a, FromNoun b, FromNoun c) => FromNoun (a, b, c) where - parseNoun n = named "(,,)" $ do - case n of - A _ -> shortRec 0 - C x (A _) -> shortRec 1 - C x (C y z) -> - (,,) <$> named "1" (parseNoun x) - <*> named "2" (parseNoun y) - <*> named "3" (parseNoun z) - -instance (ToNoun a, ToNoun b, ToNoun c, ToNoun d) => ToNoun (a, b, c, d) where - toNoun (p, q, r, s) = toNoun (p, (q, r, s)) - -instance (FromNoun a, FromNoun b, FromNoun c, FromNoun d) - => FromNoun (a, b, c, d) - where - parseNoun n = named "(,,,)" $ do - case n of - A _ -> shortRec 0 - C _ (A _) -> shortRec 1 - C _ (C _ (A _)) -> shortRec 2 - C p (C q (C r s)) -> - (,,,) <$> named "1" (parseNoun p) - <*> named "2" (parseNoun q) - <*> named "3" (parseNoun r) - <*> named "4" (parseNoun s) - -instance (ToNoun a, ToNoun b, ToNoun c, ToNoun d, ToNoun e) - => ToNoun (a, b, c, d, e) where - toNoun (p, q, r, s, t) = toNoun (p, (q, r, s, t)) - -instance (FromNoun a, FromNoun b, FromNoun c, FromNoun d, FromNoun e) - => FromNoun (a, b, c, d, e) - where - parseNoun n = named "(,,,,)" $ do - case n of - A _ -> shortRec 0 - C _ (A _) -> shortRec 1 - C _ (C _ (A _)) -> shortRec 2 - C _ (C _ (C _ (A _))) -> shortRec 3 - C p (C q (C r (C s t))) -> - (,,,,) <$> named "1" (parseNoun p) - <*> named "2" (parseNoun q) - <*> named "3" (parseNoun r) - <*> named "4" (parseNoun s) - <*> named "5" (parseNoun t) - -instance (ToNoun a, ToNoun b, ToNoun c, ToNoun d, ToNoun e, ToNoun f) - => ToNoun (a, b, c, d, e, f) where - toNoun (p, q, r, s, t, u) = toNoun (p, (q, r, s, t, u)) - -instance ( FromNoun a, FromNoun b, FromNoun c, FromNoun d, FromNoun e - , FromNoun f - ) - => FromNoun (a, b, c, d, e, f) - where - parseNoun n = named "(,,,,,)" $ do - (p, tail) <- parseNoun n - (q, r, s, t, u) <- parseNoun tail - pure (p, q, r, s, t, u) - -instance (ToNoun a, ToNoun b, ToNoun c, ToNoun d, ToNoun e, ToNoun f, ToNoun g) - => ToNoun (a, b, c, d, e, f, g) where - toNoun (p, q, r, s, t, u, v) = toNoun (p, (q, r, s, t, u, v)) - -instance ( FromNoun a, FromNoun b, FromNoun c, FromNoun d, FromNoun e - , FromNoun f, FromNoun g - ) - => FromNoun (a, b, c, d, e, f, g) - where - parseNoun n = named "(,,,,,,)" $ do - (p, tail) <- parseNoun n - (q, r, s, t, u, v) <- parseNoun tail - pure (p, q, r, s, t, u, v) - -instance ( ToNoun a, ToNoun b, ToNoun c, ToNoun d, ToNoun e, ToNoun f, ToNoun g - , ToNoun h - ) - => ToNoun (a, b, c, d, e, f, g, h) where - toNoun (p, q, r, s, t, u, v, w) = toNoun (p, (q, r, s, t, u, v, w)) - -instance ( FromNoun a, FromNoun b, FromNoun c, FromNoun d, FromNoun e - , FromNoun f, FromNoun g, FromNoun h - ) - => FromNoun (a, b, c, d, e, f, g, h) - where - parseNoun n = named "(,,,,,,,)" $ do - (p, tail) <- parseNoun n - (q, r, s, t, u, v, w) <- parseNoun tail - pure (p, q, r, s, t, u, v, w) - -instance ( ToNoun a, ToNoun b, ToNoun c, ToNoun d, ToNoun e, ToNoun f, ToNoun g - , ToNoun h, ToNoun i - ) - => ToNoun (a, b, c, d, e, f, g, h, i) where - toNoun (p, q, r, s, t, u, v, w, x) = toNoun (p, (q, r, s, t, u, v, w, x)) - -instance ( FromNoun a, FromNoun b, FromNoun c, FromNoun d, FromNoun e - , FromNoun f, FromNoun g, FromNoun h, FromNoun i - ) - => FromNoun (a, b, c, d, e, f, g, h, i) - where - parseNoun n = named "(,,,,,,,,)" $ do - (p, tail) <- parseNoun n - (q, r, s, t, u, v, w, x) <- parseNoun tail - pure (p, q, r, s, t, u, v, w, x) - -instance ( ToNoun a, ToNoun b, ToNoun c, ToNoun d, ToNoun e, ToNoun f, ToNoun g - , ToNoun h, ToNoun i, ToNoun j - ) - => ToNoun (a, b, c, d, e, f, g, h, i, j) where - toNoun (p, q, r, s, t, u, v, w, x, y) = - toNoun (p, (q, r, s, t, u, v, w, x, y)) - -instance ( FromNoun a, FromNoun b, FromNoun c, FromNoun d, FromNoun e - , FromNoun f, FromNoun g, FromNoun h, FromNoun i, FromNoun j - ) - => FromNoun (a, b, c, d, e, f, g, h, i, j) - where - parseNoun n = named "(,,,,,,,,,)" $ do - (p, tail) <- parseNoun n - (q, r, s, t, u, v, w, x, y) <- parseNoun tail - pure (p, q, r, s, t, u, v, w, x, y) - - --- Ugg ------------------------------------------------------------------------- - -deriveNoun ''Path -deriveNoun ''EvilPath diff --git a/pkg/hs/urbit-noun/lib/Urbit/Noun/Tank.hs b/pkg/hs/urbit-noun/lib/Urbit/Noun/Tank.hs deleted file mode 100644 index 9dbbdf2f9..000000000 --- a/pkg/hs/urbit-noun/lib/Urbit/Noun/Tank.hs +++ /dev/null @@ -1,303 +0,0 @@ -{-| - Pretty Printer Types --} - -module Urbit.Noun.Tank where - -import ClassyPrelude -import Urbit.Noun.Conversions -import Urbit.Noun.TH -import Urbit.Noun.Convert -import Urbit.Noun.Core - --------------------------------------------------------------------------------- - -type Tang = [Tank] - -data TankTree - = Leaf Tape - | Plum Plum - | Palm (Tape, Tape, Tape, Tape) [TankTree] - | Rose (Tape, Tape, Tape) [TankTree] - deriving (Eq, Ord, Show) - -newtype Tank = Tank { tankTree :: TankTree } - deriving newtype (Eq, Ord, Show) - -instance ToNoun Tank where - toNoun (Tank t) = toNoun t - -instance FromNoun Tank where - parseNoun n@(Atom _) = do - Cord txt <- parseNoun n - pure $ Tank $ Leaf $ Tape txt - parseNoun n = Tank <$> parseNoun n - -data WideFmt = WideFmt { delimit :: Cord, enclose :: Maybe (Cord, Cord) } - deriving (Eq, Ord, Show) - -data TallFmt = TallFmt { intro :: Cord, indef :: Maybe (Cord, Cord) } - deriving (Eq, Ord, Show) - -data PlumFmt = PlumFmt (Maybe WideFmt) (Maybe TallFmt) - deriving (Eq, Ord, Show) - -type Plum = AtomCell Cord PlumTree - -data PlumTree - = Para Cord [Cord] - | Tree PlumFmt [Plum] - | Sbrk Plum - deriving (Eq, Ord, Show) - -deriveNoun ''WideFmt -deriveNoun ''TallFmt -deriveNoun ''PlumFmt -deriveNoun ''TankTree -deriveNoun ''PlumTree - --------------------------------------------------------------------------------- - -data WashCfg = WashCfg - { wcIndent :: Word - , wcWidth :: Word - } - --------------------------------------------------------------------------------- - -wash :: WashCfg -> TankTree -> Wall -wash _cfg t = [ram t] - --- win :: WashCfg -> Tank -> Wall --- win = undefined - -flat :: Plum -> Tape -flat = Tape . tshow - -ram :: TankTree -> Tape -ram = \case - Leaf tape -> tape - Plum plum -> flat plum - Palm (p,q,r,s) kids -> ram (Rose (p, q<>r, s) kids) - Rose (p,q,r) kids -> q <> loop kids - where - loop [] = r - loop [x] = ram x <> r - loop (x:xs) = ram x <> p <> loop xs - -tankToText :: Tank -> Text -tankToText (Tank t) = unlines $ fmap unTape $ wash (WashCfg 0 80) t - -textToTank :: Text -> Tank -textToTank = Tank . Leaf . Tape - -{- - ++ win - |= {tab/@ edg/@} - =. tac (act:ug tac) - %- fix:ug - =+ lug=`wall`~ - |^ |- ^- wall - ?- -.tac - $leaf (rig p.tac) - $plum (turn ~(tall plume p.tac) |=(=cord (trip cord))) - $palm - ?: fit - (rig ram) - ?~ q.tac - (rig q.p.tac) - ?~ t.q.tac - (rig(tab (add 2 tab), lug $(tac i.q.tac)) q.p.tac) - => .(q.tac `(list tank)`q.tac) - =+ lyn=(mul 2 (lent q.tac)) - =+ ^= qyr - |- ^- wall - ?~ q.tac - lug - %= ^$ - tac i.q.tac - tab (add tab (sub lyn 2)) - lug $(q.tac t.q.tac, lyn (sub lyn 2)) - == - (wig(lug qyr) q.p.tac) - :: - $rose - ?: fit - (rig ram) - =. lug - |- ^- wall - ?~ q.tac - ?:(=(~ r.p.tac) lug (rig r.p.tac)) - ^$(tac i.q.tac, lug $(q.tac t.q.tac), tab din) - ?: =(~ q.p.tac) - lug - (wig q.p.tac) - == - :: - ++ din (mod (add 2 tab) (mul 2 (div edg 3))) - ++ fit (lte (lent ram) (sub edg tab)) - ++ rig - |= hom/tape - ^- wall - ?: (lte (lent hom) (sub edg tab)) - [(runt [tab ' '] hom) lug] - => .(tab (add tab 2), edg (sub edg 2)) - =+ mut=(trim (sub edg tab) hom) - :- (runt [(sub tab 2) ' '] ['\\' '/' (weld p.mut `_hom`['\\' '/' ~])]) - => .(hom q.mut) - |- - ?~ hom - :- %+ runt - [(sub tab 2) ' '] - ['\\' '/' (runt [(sub edg tab) ' '] ['\\' '/' ~])] - lug - => .(mut (trim (sub edg tab) hom)) - [(runt [tab ' '] p.mut) $(hom q.mut)] - :: - ++ wig - |= hom/tape - ^- wall - ?~ lug - (rig hom) - =+ lin=(lent hom) - =+ wug=:(add 1 tab lin) - ?. =+ mir=i.lug - |- ?~ mir - | - ?|(=(0 wug) ?&(=(' ' i.mir) $(mir t.mir, wug (dec wug)))) - (rig hom) :: ^ XX regular form? - [(runt [tab ' '] (weld hom `tape`[' ' (slag wug i.lug)])) t.lug] - -- - -- --} - -{- -++ re - |_ tac/tank - ++ ram - ^- tape - ?- -.tac - $leaf p.tac - $plum ~(flat plume p.tac) - $palm ram(tac [%rose [p.p.tac (weld q.p.tac r.p.tac) s.p.tac] q.tac]) - $rose - %+ weld - q.p.tac - |- ^- tape - ?~ q.tac - r.p.tac - =+ voz=$(q.tac t.q.tac) - (weld ram(tac i.q.tac) ?~(t.q.tac voz (weld p.p.tac voz))) - == - :: - ++ ug :: horrible hack - |% - ++ ace :: strip ctrl chars - |= a=tape - ^- tape - ?~ a ~ - ?: |((lth i.a 32) =(127 `@`i.a)) - $(a t.a) - [i.a $(a t.a)] - :: - ++ act :: pretend tapes - |= tac=tank - ^- tank - ?- -.tac - %leaf [%leaf (hew p.tac)] - %plum tac :: XX consider - %palm :+ %palm - [(hew p.p.tac) (hew q.p.tac) (hew r.p.tac) (hew s.p.tac)] - (turn q.tac act) - %rose :+ %rose - [(hew p.p.tac) (hew q.p.tac) (hew r.p.tac)] - (turn q.tac act) - == - :: - ++ fix :: restore tapes - |= wol=wall - %+ turn wol - |=(a=tape (tufa `(list @c)``(list @)`a)) - :: - ++ hew :: pretend tape - |=(a=tape `tape``(list @)`(tuba (ace a))) - -- - :: - ++ win - |= {tab/@ edg/@} - =. tac (act:ug tac) - %- fix:ug - =+ lug=`wall`~ - |^ |- ^- wall - ?- -.tac - $leaf (rig p.tac) - $plum (turn ~(tall plume p.tac) |=(=cord (trip cord))) - $palm - ?: fit - (rig ram) - ?~ q.tac - (rig q.p.tac) - ?~ t.q.tac - (rig(tab (add 2 tab), lug $(tac i.q.tac)) q.p.tac) - => .(q.tac `(list tank)`q.tac) - =+ lyn=(mul 2 (lent q.tac)) - =+ ^= qyr - |- ^- wall - ?~ q.tac - lug - %= ^$ - tac i.q.tac - tab (add tab (sub lyn 2)) - lug $(q.tac t.q.tac, lyn (sub lyn 2)) - == - (wig(lug qyr) q.p.tac) - :: - $rose - ?: fit - (rig ram) - =. lug - |- ^- wall - ?~ q.tac - ?:(=(~ r.p.tac) lug (rig r.p.tac)) - ^$(tac i.q.tac, lug $(q.tac t.q.tac), tab din) - ?: =(~ q.p.tac) - lug - (wig q.p.tac) - == - :: - ++ din (mod (add 2 tab) (mul 2 (div edg 3))) - ++ fit (lte (lent ram) (sub edg tab)) - ++ rig - |= hom/tape - ^- wall - ?: (lte (lent hom) (sub edg tab)) - [(runt [tab ' '] hom) lug] - => .(tab (add tab 2), edg (sub edg 2)) - =+ mut=(trim (sub edg tab) hom) - :- (runt [(sub tab 2) ' '] ['\\' '/' (weld p.mut `_hom`['\\' '/' ~])]) - => .(hom q.mut) - |- - ?~ hom - :- %+ runt - [(sub tab 2) ' '] - ['\\' '/' (runt [(sub edg tab) ' '] ['\\' '/' ~])] - lug - => .(mut (trim (sub edg tab) hom)) - [(runt [tab ' '] p.mut) $(hom q.mut)] - :: - ++ wig - |= hom/tape - ^- wall - ?~ lug - (rig hom) - =+ lin=(lent hom) - =+ wug=:(add 1 tab lin) - ?. =+ mir=i.lug - |- ?~ mir - | - ?|(=(0 wug) ?&(=(' ' i.mir) $(mir t.mir, wug (dec wug)))) - (rig hom) :: ^ XX regular form? - [(runt [tab ' '] (weld hom `tape`[' ' (slag wug i.lug)])) t.lug] - -- - -- --} diff --git a/pkg/hs/urbit-noun/lib/Urbit/Noun/Time.hs b/pkg/hs/urbit-noun/lib/Urbit/Noun/Time.hs deleted file mode 100644 index 1976c11a5..000000000 --- a/pkg/hs/urbit-noun/lib/Urbit/Noun/Time.hs +++ /dev/null @@ -1,165 +0,0 @@ -{-| - TODO This is slow. --} - -module Urbit.Noun.Time where - -import Control.Lens -import Prelude - -import Data.Bits (shiftL, shiftR, (.&.)) -import Data.List (intercalate) -import Data.Time.Calendar (toGregorian) -import Data.Time.Clock (DiffTime, UTCTime(..)) -import Data.Time.Clock (diffTimeToPicoseconds, picosecondsToDiffTime) -import Data.Time.Clock.System (SystemTime(..), getSystemTime) -import Data.Time.Clock.System (systemToUTCTime, utcToSystemTime) -import Data.Time.LocalTime (TimeOfDay(..), timeToTimeOfDay) -import Data.Word (Word64) -import Text.Printf (printf) -import Urbit.Noun (deriveToNoun, FromNoun, ToNoun(..)) - - --- Types ----------------------------------------------------------------------- - -newtype Gap = Gap { _fractoSecs :: Integer } - deriving newtype (Eq, Ord, Show, Num, FromNoun) - -newtype Unix = Unix { _sinceUnixEpoch :: Gap } - deriving newtype (Eq, Ord, Show, FromNoun) - -newtype Wen = Wen { _sinceUrbitEpoch :: Gap } - deriving newtype (Eq, Ord, Show, Num, FromNoun) - -newtype Date = MkDate { _dateWen :: Wen } - deriving newtype (Eq, Ord, Num, FromNoun) - - --- Record Lenses --------------------------------------------------------------- - -makeLenses ''Gap -makeLenses ''Unix -makeLenses ''Wen -makeLenses ''Date - - --- Instances ------------------------------------------------------------------- - -instance ToNoun Gap where - toNoun (reducePrecision -> Gap fs) = toNoun fs - --- | Produce a Gap with fewer digits after the binary point, more --- appropriately capturing the precision our clock gives us. -reducePrecision :: Gap -> Gap -reducePrecision (Gap fs) = Gap (chop fs) - where - chop fs = shiftL (shiftR fs 32) 32 - -deriveToNoun ''Unix -deriveToNoun ''Wen -deriveToNoun ''Date - -instance Show Date where - show (MkDate wen) = if fs == 0 - then printf "~%i.%u.%u..%02u.%02u.%02u" y m d h min s - else printf "~%i.%u.%u..%02u.%02u.%02u..%s" y m d h min s (showGap fs) - where - utc = wen ^. systemTime . to systemToUTCTime - (y, m, d) = toGregorian (utctDay utc) - TimeOfDay h min (floor -> s::Int) = timeToTimeOfDay (utctDayTime utc) - fs = (wen ^. wenFracto . to (fromIntegral @Integer @Word64)) - - wenFracto :: Lens' Wen Integer - wenFracto = sinceUrbitEpoch . fractoSecs - - showGap :: Word64 -> String - showGap gap = intercalate "." (printf "%04x" <$> bs) - where - bs = reverse $ dropWhile (== 0) [b4, b3, b2, b1] - b4 = takeBits 16 gap - b3 = takeBits 16 (shiftR gap 16) - b2 = takeBits 16 (shiftR gap 32) - b1 = takeBits 16 (shiftR gap 48) - - takeBits :: Int -> Word64 -> Word64 - takeBits wid wor = wor .&. (shiftL 1 wid - 1) - - --- Conversion Lenses ----------------------------------------------------------- - -diffTime :: Iso' Gap DiffTime -diffTime = iso fromGap toGap - where - fromGap = picosecondsToDiffTime . view picoSecs - toGap = view (from picoSecs) . diffTimeToPicoseconds - -sysUTC :: Iso' SystemTime UTCTime -sysUTC = iso systemToUTCTime utcToSystemTime - -utcTime :: Iso' Wen UTCTime -utcTime = systemTime . sysUTC - -unixEpoch :: Wen -unixEpoch = Wen (Gap 0x8000_000c_ce9e_0d80_0000_0000_0000_0000) - -unixSystemTime :: Iso' Unix SystemTime -unixSystemTime = iso toSys fromSys - where - toSys (Unix gap) = MkSystemTime (fromInteger sec) (fromInteger ns) - where (sec, ns) = quotRem (gap ^. nanoSecs) 1_000_000_000 - fromSys (MkSystemTime sec ns) = - Unix $ (toInteger sec ^. from secs) - + (toInteger ns ^. from nanoSecs) - -unix :: Iso' Wen Unix -unix = iso toUnix fromUnix - where - toUnix (Wen g) = Unix (g - unWen unixEpoch) - fromUnix (Unix g) = Wen (unWen unixEpoch + g) - unWen (Wen x) = x - -systemTime :: Iso' Wen SystemTime -systemTime = unix . unixSystemTime - - --------------------------------------------------------------------------------- - -toDenomSecs :: Integer -> Gap -> Integer -toDenomSecs denom (Gap g) = shiftR (g * denom) 64 - -fromDenomSecs :: Integer -> Integer -> Gap -fromDenomSecs denom ds = - Gap $ (shiftL ds 64) `div` denom - -picoSecs :: Iso' Gap Integer -picoSecs = iso (toDenomSecs denom) (fromDenomSecs denom) - where denom = 1_000_000_000_000 - -nanoSecs :: Iso' Gap Integer -nanoSecs = iso (toDenomSecs denom) (fromDenomSecs denom) - where denom = 1_000_000_000 - -microSecs :: Iso' Gap Integer -microSecs = iso (toDenomSecs denom) (fromDenomSecs denom) - where denom = 1_000_000 - -milliSecs :: Iso' Gap Integer -milliSecs = iso (toDenomSecs denom) (fromDenomSecs denom) - where denom = 1_000 - -secs :: Iso' Gap Integer -secs = iso (toDenomSecs denom) (fromDenomSecs denom) - where denom = 1 - - --------------------------------------------------------------------------------- - -now :: IO Wen -now = view (from systemTime) <$> getSystemTime - -gap :: Wen -> Wen -> Gap -gap (Wen x) (Wen y) | x > y = x - y - | otherwise = y - x - -addGap :: Wen -> Gap -> Wen -addGap (Wen x) y = Wen (x+y) diff --git a/pkg/hs/urbit-noun/lib/Urbit/Noun/Tree.hs b/pkg/hs/urbit-noun/lib/Urbit/Noun/Tree.hs deleted file mode 100644 index 61a731675..000000000 --- a/pkg/hs/urbit-noun/lib/Urbit/Noun/Tree.hs +++ /dev/null @@ -1,179 +0,0 @@ -{-# LANGUAGE DisambiguateRecordFields #-} -{-# LANGUAGE DuplicateRecordFields #-} - -{-| - Hoon's `map` and `set` types and conversions to/from Nouns. --} -module Urbit.Noun.Tree - ( HoonSet, setToHoonSet, setFromHoonSet - , HoonMap, mapToHoonMap, mapFromHoonMap - ) where - -import ClassyPrelude -import Control.Lens hiding (non) - -import Urbit.Noun.Conversions () -import Urbit.Noun.Convert -import Urbit.Noun.Core -import Urbit.Noun.TH - - --- Types ----------------------------------------------------------------------- - -data NounVal a = NounVal - { non :: !Noun - , val :: !a - } - -data HoonTreeNode a = NTN - { n :: !(NounVal a) - , l :: !(HoonTree a) - , r :: !(HoonTree a) - } - deriving (Eq, Ord, Show) - -data HoonTree a = E | Node (HoonTreeNode a) - deriving (Eq, Ord, Show) - -pattern N :: NounVal a -> HoonTree a -> HoonTree a -> HoonTree a -pattern N n l r = Node (NTN n l r) - -newtype HoonSet a = HoonSet { unHoonSet :: HoonTree a } - deriving newtype (Eq, Ord, Show, FromNoun, ToNoun) - -newtype HoonMap k v = HoonMap { unHoonMap :: HoonTree (k, v) } - deriving newtype (Eq, Ord, Show, FromNoun, ToNoun) - - --- Instances ------------------------------------------------------------------- - -instance Eq (NounVal a) where - (==) = on (==) non - -instance Ord (NounVal a) where - compare = comparing non - -instance ToNoun (NounVal a) where - toNoun = non - -instance Show a => Show (NounVal a) where - show = show . val - -instance FromNoun a => FromNoun (NounVal a) where - parseNoun x = NounVal x <$> parseNoun x - -instance ToNoun a => ToNoun (HoonTree a) where - toNoun E = A 0 - toNoun (Node n) = toNoun n - -instance FromNoun a => FromNoun (HoonTree a) where - parseNoun (A 0) = pure E - parseNoun n = Node <$> parseNoun n - -deriveNoun ''HoonTreeNode - - --- Order ----------------------------------------------------------------------- - -{- - Orders in ascending double mug hash order, collisions fall back to dor. --} -mor :: Noun -> Noun -> Bool -mor a b = if c == d then dor a b else c < d - where - c = mug $ A $ fromIntegral $ mug a - d = mug $ A $ fromIntegral $ mug b - -{- - Orders in ascending tree depth. --} -dor :: Noun -> Noun -> Bool -dor a b | a == b = True -dor (A a) (C _ _) = True -dor (C x y) (A b) = False -dor (A a) (A b) = a < b -dor (C x y) (C p q) | x == p = dor y q -dor (C x y) (C p q) = dor x p - -{- - Orders in ascending +mug hash order. - - Collisions fall back to dor. --} -gor :: Noun -> Noun -> Bool -gor a b = if c==d then dor a b else c NounVal a -> Bool -morVal = on mor non -gorVal = on gor non - - --------------------------------------------------------------------------------- - -nounVal :: ToNoun a => Iso' a (NounVal a) -nounVal = iso to val - where - to x = NounVal (toNoun x) x - -treeToList :: forall a. HoonTree a -> [a] -treeToList = go [] - where - go :: [a] -> HoonTree a -> [a] - go acc = \case - E -> acc - Node (NTN v l r) -> go (go (val v : acc) l) r - -setFromHoonSet :: Ord a => HoonSet a -> Set a -setFromHoonSet = setFromList . treeToList . unHoonSet - -mapFromHoonMap :: Ord k => HoonMap k v -> Map k v -mapFromHoonMap = mapFromList . treeToList . unHoonMap - -setToHoonSet :: forall a. (Ord a, ToNoun a) => Set a -> HoonSet a -setToHoonSet = HoonSet . foldr put E . fmap (view nounVal) . setToList - where - put x = \case - E -> N x E E - Node a | x == n a -> Node a - Node a | gorVal x (n a) -> lef x a - Node a -> rit x a - - rit x a = put x (r a) & \case - E -> error "bad-put-set" - Node c | morVal (n a) (n c) -> N (n a) (l a) (Node c) - Node c -> N (n c) (N (n a) (l a) (l c)) (r c) - - lef x a = put x (l a) & \case - E -> error "bad-put-set" - Node c | morVal (n a) (n c) -> N (n a) (Node c) (r a) - Node c -> N (n c) (l c) (N (n a) (r c) (r a)) - -p :: (ToNoun a, ToNoun b) => NounVal (a,b) -> NounVal a -p = view (from nounVal . to fst . nounVal) - -pq :: (ToNoun a, ToNoun b) => NounVal (a,b) -> (NounVal a, NounVal b) -pq = boof . view (from nounVal) - where - boof (x, y) = (x ^. nounVal, y ^. nounVal) - -mapToHoonMap :: forall k v. (ToNoun k, ToNoun v, Ord k, Ord v) => Map k v -> HoonMap k v -mapToHoonMap = HoonMap . foldr put E . fmap (view nounVal) . mapToList - where - put :: NounVal (k, v) -> HoonTree (k, v) -> HoonTree (k, v) - put kv@(pq -> (b, c)) = \case - E -> N kv E E - Node a | kv == n a -> Node a - Node a | b == p (n a) -> N kv (l a) (r a) - Node a | gorVal b (p $ n a) -> lef kv a - Node a -> rit kv a - - lef kv@(pq -> (b, c)) a = put kv (l a) & \case - E -> error "bad-put-map" - Node d | morVal (p $ n a) (p $ n d) -> N (n a) (Node d) (r a) - Node d -> N (n d) (l d) (N (n a) (r d) (r a)) - - rit kv@(pq -> (b, c)) a = put kv (r a) & \case - E -> error "bad-put-map" - Node d | morVal (p $ n a) (p $ n d) -> N (n a) (l a) (Node d) - Node d -> N (n d) (N (n a) (l a) (l d)) (r d) diff --git a/pkg/hs/urbit-noun/package.yaml b/pkg/hs/urbit-noun/package.yaml deleted file mode 100644 index 2ba714abb..000000000 --- a/pkg/hs/urbit-noun/package.yaml +++ /dev/null @@ -1,75 +0,0 @@ -name: urbit-noun -version: 0.10.4 -license: MIT -license-file: LICENSE - -library: - source-dirs: lib - ghc-options: - - -Wall - - -Werror - - -Wno-type-defaults - - -Wno-unused-matches - - -Wno-name-shadowing - - -Wno-orphans - - -O2 - -dependencies: - - base - - classy-prelude - - ghc-prim - - largeword - - lens - - murmur3 - - regex-tdfa - - rio - - text - - time - - urbit-atom - - urbit-hob - - urbit-noun-core - -default-extensions: - - ApplicativeDo - - BangPatterns - - BlockArguments - - ConstraintKinds - - DataKinds - - DefaultSignatures - - DeriveAnyClass - - DeriveDataTypeable - - DeriveFoldable - - DeriveGeneric - - DeriveTraversable - - DerivingStrategies - - EmptyCase - - EmptyDataDecls - - FlexibleContexts - - FlexibleInstances - - FunctionalDependencies - - GADTs - - GeneralizedNewtypeDeriving - - LambdaCase - - MagicHash - - MultiParamTypeClasses - - NamedFieldPuns - - NoImplicitPrelude - - NumericUnderscores - - OverloadedStrings - - PackageImports - - PartialTypeSignatures - - PatternSynonyms - - QuasiQuotes - - Rank2Types - - RankNTypes - - RecordWildCards - - ScopedTypeVariables - - StandaloneDeriving - - TemplateHaskell - - TupleSections - - TypeApplications - - TypeFamilies - - TypeOperators - - UnboxedTuples - - UnicodeSyntax - - ViewPatterns diff --git a/pkg/hs/urbit-termsize/.gitignore b/pkg/hs/urbit-termsize/.gitignore deleted file mode 100644 index e5904eabe..000000000 --- a/pkg/hs/urbit-termsize/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.stack-work/ -urbit-termsize.cabal -*~ diff --git a/pkg/hs/urbit-termsize/LICENSE b/pkg/hs/urbit-termsize/LICENSE deleted file mode 100644 index bf9294e05..000000000 --- a/pkg/hs/urbit-termsize/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 urbit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/pkg/hs/urbit-termsize/app/Main.hs b/pkg/hs/urbit-termsize/app/Main.hs deleted file mode 100644 index aed583c74..000000000 --- a/pkg/hs/urbit-termsize/app/Main.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Main where - -import Prelude - -import Urbit.TermSize (liveTermSize) - -main :: IO () -main = do - init <- liveTermSize (putStrLn . ("New Size: " <>) . show) - putStrLn ("Initial Size: " <> show init) - _ <- getLine - pure () diff --git a/pkg/hs/urbit-termsize/lib/Urbit/TermSize.hs b/pkg/hs/urbit-termsize/lib/Urbit/TermSize.hs deleted file mode 100644 index af4e1f0b0..000000000 --- a/pkg/hs/urbit-termsize/lib/Urbit/TermSize.hs +++ /dev/null @@ -1,42 +0,0 @@ -{-# LANGUAGE DeriveAnyClass #-} -{-# LANGUAGE LambdaCase #-} -{-# LANGUAGE RecordWildCards #-} - -module Urbit.TermSize - ( TermSize(..) - , termSize - , liveTermSize - ) -where - -import Prelude - -import Data.Functor ((<&>)) -import System.Console.Terminal.Size (Window(..), size) - -import qualified System.Posix.Signals as Sys -import qualified System.Posix.Signals.Exts as Sys - - --- Types ----------------------------------------------------------------------- - -data TermSize = TermSize - { tsWide :: !Word - , tsTall :: !Word - } - deriving (Eq, Ord, Show) - - --- Utilities ------------------------------------------------------------------- - -termSize :: IO TermSize -termSize = size <&> \case - Nothing -> TermSize 80 24 - Just (Window {..}) -> TermSize width height - -liveTermSize :: (TermSize -> IO ()) -> IO TermSize -liveTermSize cb = do - Sys.installHandler Sys.sigWINCH (Sys.Catch (termSize >>= cb)) Nothing - ts <- termSize - cb ts - pure ts diff --git a/pkg/hs/urbit-termsize/package.yaml b/pkg/hs/urbit-termsize/package.yaml deleted file mode 100644 index d63d312f7..000000000 --- a/pkg/hs/urbit-termsize/package.yaml +++ /dev/null @@ -1,28 +0,0 @@ -name: urbit-termsize -version: 0.1.0 -license: MIT -license-file: LICENSE - -dependencies: - - base - - terminal-size - - unix - -ghc-options: - - -Wall - - -Werror - - -Wno-type-defaults - - -Wno-unused-matches - - -Wno-name-shadowing - - -Wno-unused-do-bind - - -O2 - -library: - source-dirs: lib - -executables: - urbit-test-termsize-updates: - main: Main.hs - source-dirs: app - dependencies: - - urbit-termsize diff --git a/pkg/interface/.eslintrc.js b/pkg/interface/.eslintrc.js index 09212671c..b030e20fd 100644 --- a/pkg/interface/.eslintrc.js +++ b/pkg/interface/.eslintrc.js @@ -7,6 +7,7 @@ module.exports = { // Because we use styled system, and use // the convention of each prop on a new line // we probably shouldn't keep this on - 'max-lines-per-function': ['off', {}] + 'max-lines-per-function': ['off', {}], + 'max-lines': ['off', {}] } }; diff --git a/pkg/interface/.nvmrc b/pkg/interface/.nvmrc index 0b77208ae..f040e49ec 100644 --- a/pkg/interface/.nvmrc +++ b/pkg/interface/.nvmrc @@ -1 +1 @@ -16.14.0 \ No newline at end of file +14.19.0 \ No newline at end of file diff --git a/pkg/interface/.tool-versions b/pkg/interface/.tool-versions new file mode 100644 index 000000000..d4e755255 --- /dev/null +++ b/pkg/interface/.tool-versions @@ -0,0 +1 @@ +nodejs 14.19.0 diff --git a/pkg/interface/config/webpack.prod.js b/pkg/interface/config/webpack.prod.js index 8148e270c..e3164571c 100644 --- a/pkg/interface/config/webpack.prod.js +++ b/pkg/interface/config/webpack.prod.js @@ -1,66 +1,71 @@ -const path = require('path'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const webpack = require('webpack'); -const { execSync } = require('child_process'); +const path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const { CleanWebpackPlugin } = require("clean-webpack-plugin"); +const MomentLocalesPlugin = require("moment-locales-webpack-plugin"); +const webpack = require("webpack"); +const { execSync } = require("child_process"); -const GIT_DESC = execSync('git describe --always', { encoding: 'utf8' }).trim(); +const GIT_DESC = execSync("git describe --always", { encoding: "utf8" }).trim(); module.exports = { - mode: 'production', + mode: "production", entry: { - app: './src/index.tsx', - serviceworker: './src/serviceworker.js' + app: "./src/index.tsx", + serviceworker: "./src/serviceworker.js", }, module: { rules: [ { test: /\.(j|t)sx?$/, use: { - loader: 'babel-loader', + loader: "babel-loader", options: { - presets: ['@babel/preset-env', '@babel/typescript', '@babel/preset-react'], + presets: [ + "@babel/preset-env", + "@babel/typescript", + "@babel/preset-react", + ], plugins: [ - 'lodash', - '@babel/transform-runtime', - '@babel/plugin-proposal-object-rest-spread', - '@babel/plugin-proposal-optional-chaining', - '@babel/plugin-proposal-class-properties' - ] - } + "lodash", + "@babel/transform-runtime", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-proposal-optional-chaining", + "@babel/plugin-proposal-class-properties", + ], + }, }, - exclude: /node_modules\/(?!(@tlon\/indigo-dark|@tlon\/indigo-light|@tlon\/indigo-react|@urbit\/api)\/).*/ + exclude: + /node_modules\/(?!(@tlon\/indigo-dark|@tlon\/indigo-light|@tlon\/indigo-react|@urbit\/api)\/).*/, }, { - test: /\.css$/i, + test: /\.css$/i, use: [ // Creates `style` nodes from JS strings - 'style-loader', + "style-loader", // Translates CSS into CommonJS - 'css-loader', + "css-loader", // Compiles Sass to CSS - 'sass-loader' - ] + "sass-loader", + ], }, { test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, use: [ { - loader: 'file-loader', + loader: "file-loader", options: { - name: '[name].[ext]', - outputPath: 'fonts/' - } - } - ] - } - ] + name: "[name].[ext]", + outputPath: "fonts/", + }, + }, + ], + }, + ], }, resolve: { - extensions: ['.js', '.ts', '.tsx'] + extensions: [".js", ".ts", ".tsx"], }, - devtool: 'source-map', + devtool: "source-map", // devServer: { // contentBase: path.join(__dirname, './'), // hot: true, @@ -71,26 +76,30 @@ module.exports = { new MomentLocalesPlugin(), new CleanWebpackPlugin(), new webpack.DefinePlugin({ - 'process.env.LANDSCAPE_STREAM': JSON.stringify(process.env.LANDSCAPE_STREAM), - 'process.env.LANDSCAPE_SHORTHASH': JSON.stringify(GIT_DESC), - 'process.env.LANDSCAPE_STORAGE_VERSION': Date.now().toString(), - 'process.env.LANDSCAPE_LAST_WIPE': '2021-10-20', + "process.env.LANDSCAPE_STREAM": JSON.stringify( + process.env.LANDSCAPE_STREAM + ), + "process.env.LANDSCAPE_SHORTHASH": JSON.stringify(GIT_DESC), + "process.env.LANDSCAPE_STORAGE_VERSION": Date.now().toString(), + "process.env.LANDSCAPE_LAST_WIPE": "2021-10-20", }), new HtmlWebpackPlugin({ - title: 'Groups', - template: './public/index.html', - favicon: './src/assets/img/Favicon.png' - }) + title: "Groups", + template: "./public/index.html", + favicon: "./src/assets/img/favicon.png", + }), ], output: { filename: (pathData) => { - return pathData.chunk.name === 'app' ? 'index.[contenthash].js' : '[name].js'; + return pathData.chunk.name === "app" + ? "index.[contenthash].js" + : "[name].js"; }, - path: path.resolve(__dirname, '../dist'), - publicPath: '/apps/landscape/' + path: path.resolve(__dirname, "../dist"), + publicPath: "/apps/landscape/", }, optimization: { minimize: true, - usedExports: true - } + usedExports: true, + }, }; diff --git a/pkg/interface/dbug/src/css/custom.css b/pkg/interface/dbug/src/css/custom.css index 112ad47eb..00bcd4f4d 100644 --- a/pkg/interface/dbug/src/css/custom.css +++ b/pkg/interface/dbug/src/css/custom.css @@ -158,6 +158,7 @@ a { @media all and (prefers-color-scheme: dark) { body { background-color: #333; + color: white; } .bg-black-d { background-color: black; diff --git a/pkg/interface/package-lock.json b/pkg/interface/package-lock.json index 94fd9adec..517b38583 100644 --- a/pkg/interface/package-lock.json +++ b/pkg/interface/package-lock.json @@ -1,73295 +1,48268 @@ { - "name": "interface", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "interface", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@fingerprintjs/fingerprintjs": "^3.3.3", - "@radix-ui/react-dialog": "^0.1.0", - "@reach/disclosure": "^0.10.5", - "@reach/menu-button": "^0.10.5", - "@reach/tabs": "^0.10.5", - "@react-spring/web": "^9.1.1", - "@tlon/indigo-dark": "^1.0.6", - "@tlon/indigo-light": "^1.0.7", - "@tlon/indigo-react": "^1.2.27", - "@tlon/sigil-js": "^1.4.3", - "@urbit/api": "^2.1.0", - "@urbit/http-api": "^2.1.0", - "any-ascii": "^0.1.7", - "aws-sdk": "^2.830.0", - "big-integer": "^1.6.48", - "classnames": "^2.2.6", - "codemirror": "^5.59.2", - "css-loader": "^3.6.0", - "file-saver": "^2.0.5", - "formik": "^2.1.5", - "fuzzy": "^0.1.3", - "immer": "^9.0.2", - "lodash": "^4.17.21", - "moment": "^2.29.1", - "mousetrap": "^1.6.5", - "mousetrap-global-bind": "^1.1.0", - "normalize-wheel": "1.0.1", - "oembed-parser": "^1.4.5", - "prop-types": "^15.7.2", - "querystring": "^0.2.0", - "react": "^17.0.2", - "react-codemirror2": "^6.0.1", - "react-dom": "^17.0.2", - "react-helmet": "^6.1.0", - "react-markdown": "^4.3.1", - "react-oembed-container": "^1.0.0", - "react-router-dom": "^5.2.0", - "react-use-gesture": "^9.1.3", - "react-virtuoso": "^0.20.3", - "react-visibility-sensor": "^5.1.1", - "remark": "^12.0.0", - "remark-breaks": "^2.0.2", - "remark-disable-tokenizers": "1.1.0", - "stacktrace-js": "^2.0.2", - "style-loader": "^1.3.0", - "styled-components": "^5.1.1", - "styled-system": "^5.1.5", - "suncalc": "^1.8.0", - "unist-util-visit": "^3.0.0", - "urbit-ob": "^5.0.1", - "workbox-core": "^6.0.2", - "workbox-precaching": "^6.0.2", - "workbox-recipes": "^6.0.2", - "workbox-routing": "^6.0.2", - "yup": "^0.29.3", - "zustand": "^3.5.0" - }, - "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.4", - "@storybook/addon-actions": "^6.2.9", - "@storybook/addon-essentials": "^6.2.9", - "@storybook/addon-links": "^6.2.9", - "@storybook/react": "^6.2.9", - "@types/lodash": "^4.14.168", - "@types/react": "^16.14.2", - "@types/react-dom": "^16.9.10", - "@types/react-router-dom": "^5.1.7", - "@types/styled-components": "^5.1.7", - "@types/styled-system": "^5.1.10", - "@types/yup": "^0.29.11", - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.24.0", - "@urbit/eslint-config": "^1.0.0", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.6.3", - "babel-loader": "^8.2.2", - "babel-plugin-lodash": "^3.3.4", - "babel-plugin-root-import": "^6.6.0", - "chromatic": "^5.8.3", - "clean-webpack-plugin": "^3.0.0", - "cross-env": "^7.0.3", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "file-loader": "^6.2.0", - "html-webpack-plugin": "^4.5.1", - "husky": "^6.0.0", - "jest": "^26.6.3", - "lint-staged": "^11.0.0", - "loki": "^0.28.1", - "moment-locales-webpack-plugin": "^1.2.0", - "react-refresh": "^0.11.0", - "sass": "^1.32.5", - "sass-loader": "^8.0.2", - "storybook-addon-designs": "^6.0.0", - "ts-mdast": "^1.0.0", - "typescript": "^4.2.4", - "webpack": "^4.46.0", - "webpack-cli": "^3.3.12", - "webpack-dev-server": "^3.11.2" - }, - "engines": { - "node": "16.14.0" - } - }, - "../npm/api": { - "name": "@urbit/api", - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.16.0", - "big-integer": "^1.6.48", - "core-js": "^3.19.1", - "immer": "^9.0.1", - "urbit-ob": "^5.0.1" - }, - "devDependencies": { - "@babel/core": "^7.16.0", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-node-resolve": "^13.0.6", - "@types/node": "^15.12.5", - "@typescript-eslint/eslint-plugin": "^4.28.2", - "@typescript-eslint/parser": "^4.28.2", - "@urbit/eslint-config": "^1.0.3", - "babel-eslint": "^10.1.0", - "eslint-plugin-react": "^7.24.0", - "rollup": "^2.59.0", - "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", - "typescript": "^4.3.2" - } - }, - "../npm/api/node_modules/@babel/code-frame": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/compat-data": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/core": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "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" - } - }, - "../npm/api/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "../npm/api/node_modules/@babel/generator": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-compilation-targets": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "../npm/api/node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "../npm/api/node_modules/@babel/helper-function-name": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/helpers": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/highlight": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/parser": { - "version": "7.16.2", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "../npm/api/node_modules/@babel/runtime": { - "version": "7.16.0", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/template": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/traverse": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@babel/types": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/api/node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../npm/api/node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/api/node_modules/@rollup/plugin-babel": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "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 - } - } - }, - "../npm/api/node_modules/@rollup/plugin-commonjs": { - "version": "21.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" - } - }, - "../npm/api/node_modules/@rollup/plugin-commonjs/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/@rollup/plugin-node-resolve": { - "version": "13.0.6", - "dev": true, - "license": "MIT", - "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": "^2.42.0" - } - }, - "../npm/api/node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/@types/estree": { - "version": "0.0.39", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/@types/json-schema": { - "version": "7.0.8", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/@types/node": { - "version": "15.14.1", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/@types/resolve": { - "version": "1.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "../npm/api/node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/api/node_modules/@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "../npm/api/node_modules/@typescript-eslint/parser": { - "version": "4.28.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/api/node_modules/@typescript-eslint/scope-manager": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/api/node_modules/@typescript-eslint/types": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/api/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/api/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/api/node_modules/@urbit/eslint-config": { - "resolved": "../npm/eslint-config", - "link": true - }, - "../npm/api/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/api/node_modules/array-includes": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/babel-eslint": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "../npm/api/node_modules/babel-eslint/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/big-integer": { - "version": "1.6.48", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "../npm/api/node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "../npm/api/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "../npm/api/node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/browserslist": { - "version": "4.17.6", - "dev": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "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" - } - }, - "../npm/api/node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/builtin-modules": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/api/node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/caniuse-lite": { - "version": "1.0.30001278", - "dev": true, - "license": "CC-BY-4.0", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "../npm/api/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/api/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "../npm/api/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "../npm/api/node_modules/core-js": { - "version": "3.19.1", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "../npm/api/node_modules/debug": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "../npm/api/node_modules/deepmerge": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../npm/api/node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/electron-to-chromium": { - "version": "1.3.889", - "dev": true, - "license": "ISC" - }, - "../npm/api/node_modules/es-abstract": { - "version": "1.18.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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" - } - }, - "../npm/api/node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/api/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "../npm/api/node_modules/eslint-plugin-react": { - "version": "7.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "../npm/api/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "../npm/api/node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "../npm/api/node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "../npm/api/node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../npm/api/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../npm/api/node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/fast-glob": { - "version": "3.2.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/fastq": { - "version": "1.11.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "../npm/api/node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "../npm/api/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/api/node_modules/fsevents": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "../npm/api/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/api/node_modules/get-intrinsic": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/glob": { - "version": "7.2.0", - "dev": true, - "license": "ISC", - "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" - } - }, - "../npm/api/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "../npm/api/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/api/node_modules/globby": { - "version": "11.0.4", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/graceful-fs": { - "version": "4.2.8", - "dev": true, - "license": "ISC" - }, - "../npm/api/node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "../npm/api/node_modules/has-bigints": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/api/node_modules/has-symbols": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/ignore": { - "version": "5.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../npm/api/node_modules/immer": { - "version": "9.0.6", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "../npm/api/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "../npm/api/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "../npm/api/node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../npm/api/node_modules/is-bigint": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-boolean-object": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-callable": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-core-module": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-date-object": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/is-glob": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/is-module": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "../npm/api/node_modules/is-number-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-reference": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "../npm/api/node_modules/is-regex": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-string": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "../npm/api/node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/api/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "../npm/api/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "../npm/api/node_modules/jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "../npm/api/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/lodash.chunk": { - "version": "4.2.0", - "license": "MIT" - }, - "../npm/api/node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT" - }, - "../npm/api/node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "../npm/api/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/api/node_modules/magic-string": { - "version": "0.25.7", - "dev": true, - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "../npm/api/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/api/node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "../npm/api/node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../npm/api/node_modules/micromatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "../npm/api/node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "../npm/api/node_modules/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/node-releases": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/object-inspect": { - "version": "1.10.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "../npm/api/node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/object.entries": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../npm/api/node_modules/object.fromentries": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/object.values": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "../npm/api/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/api/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/api/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/api/node_modules/picomatch": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "../npm/api/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/prop-types": { - "version": "15.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "../npm/api/node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "../npm/api/node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "../npm/api/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/regenerator-runtime": { - "version": "0.13.9", - "license": "MIT" - }, - "../npm/api/node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "../npm/api/node_modules/resolve": { - "version": "2.0.0-next.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/rollup": { - "version": "2.59.0", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "../npm/api/node_modules/rollup-plugin-analyzer": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "../npm/api/node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/rollup-plugin-typescript2": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^4.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.1.0" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "../npm/api/node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "../npm/api/node_modules/rollup-plugin-typescript2/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.1.0", - "dev": true, - "license": "0BSD" - }, - "../npm/api/node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "../npm/api/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/api/node_modules/serialize-javascript": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "../npm/api/node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/api/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/source-map-support": { - "version": "0.5.20", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "../npm/api/node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/api/node_modules/sourcemap-codec": { - "version": "1.4.8", - "dev": true, - "license": "MIT" - }, - "../npm/api/node_modules/string.prototype.matchall": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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" - } - }, - "../npm/api/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/api/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/api/node_modules/terser": { - "version": "5.9.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/api/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "../npm/api/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/api/node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "../npm/api/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "../npm/api/node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/typescript": { - "version": "4.3.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "../npm/api/node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "../npm/api/node_modules/urbit-ob": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "../npm/api/node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/api/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "../npm/api/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/eslint-config": { - "name": "@urbit/eslint-config", - "version": "1.0.3", - "dev": true, - "license": "MIT", - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.15.0", - "babel-eslint": "^10.1.0", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "typescript": "^4.1.5" - } - }, - "../npm/eslint-config/node_modules/@babel/code-frame": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "../npm/eslint-config/node_modules/@babel/generator": { - "version": "7.14.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "../npm/eslint-config/node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "../npm/eslint-config/node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "../npm/eslint-config/node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "../npm/eslint-config/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/@babel/highlight": { - "version": "7.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "../npm/eslint-config/node_modules/@babel/parser": { - "version": "7.14.3", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "../npm/eslint-config/node_modules/@babel/template": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "../npm/eslint-config/node_modules/@babel/traverse": { - "version": "7.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "../npm/eslint-config/node_modules/@babel/types": { - "version": "7.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "../npm/eslint-config/node_modules/@eslint/eslintrc": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "../npm/eslint-config/node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/eslint-config/node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../npm/eslint-config/node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/eslint-config/node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../npm/eslint-config/node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/eslint-config/node_modules/@types/json-schema": { - "version": "7.0.7", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.24.0", - "@typescript-eslint/scope-manager": "4.24.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/eslint-config/node_modules/@typescript-eslint/experimental-utils": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "../npm/eslint-config/node_modules/@typescript-eslint/parser": { - "version": "4.24.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "debug": "^4.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/eslint-config/node_modules/@typescript-eslint/scope-manager": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/eslint-config/node_modules/@typescript-eslint/types": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/eslint-config/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/eslint-config/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.24.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/eslint-config/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "../npm/eslint-config/node_modules/acorn-jsx": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "../npm/eslint-config/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/ansi-colors": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/eslint-config/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "../npm/eslint-config/node_modules/array-includes": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/babel-eslint": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "../npm/eslint-config/node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/eslint-config/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "../npm/eslint-config/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/eslint-config/node_modules/debug": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "../npm/eslint-config/node_modules/deep-is": { - "version": "0.1.3", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../npm/eslint-config/node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/enquirer": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "../npm/eslint-config/node_modules/es-abstract": { - "version": "1.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.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.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "../npm/eslint-config/node_modules/eslint": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "../npm/eslint-config/node_modules/eslint-plugin-react": { - "version": "7.23.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "../npm/eslint-config/node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "../npm/eslint-config/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "../npm/eslint-config/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/globals": { - "version": "13.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../npm/eslint-config/node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "../npm/eslint-config/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "../npm/eslint-config/node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../npm/eslint-config/node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "../npm/eslint-config/node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../npm/eslint-config/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../npm/eslint-config/node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/fast-glob": { - "version": "3.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/fastq": { - "version": "1.11.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "../npm/eslint-config/node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "../npm/eslint-config/node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "../npm/eslint-config/node_modules/flatted": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "../npm/eslint-config/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/eslint-config/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/get-intrinsic": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/glob": { - "version": "7.1.7", - "dev": true, - "license": "ISC", - "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" - } - }, - "../npm/eslint-config/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "../npm/eslint-config/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/globby": { - "version": "11.0.3", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "../npm/eslint-config/node_modules/has-bigints": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/has-symbols": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/ignore": { - "version": "5.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../npm/eslint-config/node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/eslint-config/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "../npm/eslint-config/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "../npm/eslint-config/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "../npm/eslint-config/node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../npm/eslint-config/node_modules/is-bigint": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-boolean-object": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-callable": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-core-module": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-date-object": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/is-glob": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "../npm/eslint-config/node_modules/is-number-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-regex": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-string": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/eslint-config/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "../npm/eslint-config/node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "../npm/eslint-config/node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../npm/eslint-config/node_modules/lodash.clonedeep": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "../npm/eslint-config/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/eslint-config/node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../npm/eslint-config/node_modules/micromatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "../npm/eslint-config/node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "../npm/eslint-config/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/object-inspect": { - "version": "1.10.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "../npm/eslint-config/node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/object.entries": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../npm/eslint-config/node_modules/object.fromentries": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/object.values": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "../npm/eslint-config/node_modules/optionator": { - "version": "0.9.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "../npm/eslint-config/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/path-parse": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/picomatch": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "../npm/eslint-config/node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "../npm/eslint-config/node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "../npm/eslint-config/node_modules/prop-types": { - "version": "15.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "../npm/eslint-config/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/eslint-config/node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "../npm/eslint-config/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/regexpp": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "../npm/eslint-config/node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../npm/eslint-config/node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "../npm/eslint-config/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/eslint-config/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "../npm/eslint-config/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/eslint-config/node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/eslint-config/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "../npm/eslint-config/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/string.prototype.matchall": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/eslint-config/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/eslint-config/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/table": { - "version": "6.7.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "../npm/eslint-config/node_modules/table/node_modules/ajv": { - "version": "8.4.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/eslint-config/node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "../npm/eslint-config/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "../npm/eslint-config/node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../npm/eslint-config/node_modules/type-fest": { - "version": "0.8.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "../npm/eslint-config/node_modules/typescript": { - "version": "4.2.4", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "../npm/eslint-config/node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "../npm/eslint-config/node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "../npm/eslint-config/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/eslint-config/node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/eslint-config/node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/eslint-config/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "../npm/eslint-config/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/http-api": { - "name": "@urbit/http-api", - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@microsoft/fetch-event-source": "^2.0.0", - "browser-or-node": "^1.3.0", - "core-js": "^3.19.1" - }, - "devDependencies": { - "@babel/core": "^7.15.8", - "@babel/preset-env": "^7.15.8", - "@babel/preset-typescript": "^7.16.0", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-node-resolve": "^13.0.6", - "@types/browser-or-node": "^1.2.0", - "@types/eventsource": "^1.1.5", - "@types/jest": "^26.0.24", - "@types/react": "^16.9.56", - "@typescript-eslint/eslint-plugin": "^4.7.0", - "@typescript-eslint/parser": "^4.7.0", - "babel-jest": "^27.0.6", - "cross-fetch": "^3.1.4", - "event-target-polyfill": "0.0.3", - "fast-text-encoding": "^1.0.3", - "jest": "^27.0.6", - "rollup": "^2.59.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", - "typescript": "^3.9.7", - "util": "^0.12.3", - "web-streams-polyfill": "^3.0.3", - "yet-another-abortcontroller-polyfill": "0.0.4" - } - }, - "../npm/http-api/node_modules/@ampproject/remapping": { - "version": "2.1.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "../npm/http-api/node_modules/@babel/code-frame": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/compat-data": { - "version": "7.17.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/core": { - "version": "7.17.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.3", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "../npm/http-api/node_modules/@babel/generator": { - "version": "7.17.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-module-transforms": { - "version": "7.17.6", - "dev": true, - "license": "MIT", - "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.17.3", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/helpers": { - "version": "7.17.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/highlight": { - "version": "7.16.10", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/parser": { - "version": "7.17.3", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.17.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.17.0", - "@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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-classes": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-literals": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-spread": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-typescript": { - "version": "7.16.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/preset-env": { - "version": "7.16.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.16.8", - "@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.8", - "@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.11", - "@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.8", - "@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.8", - "@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.8", - "@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.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/preset-modules": { - "version": "0.1.5", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@babel/preset-typescript": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/@babel/runtime": { - "version": "7.14.6", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/template": { - "version": "7.16.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/traverse": { - "version": "7.17.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@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.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@babel/types": { - "version": "7.17.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "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" - } - }, - "../npm/http-api/node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/console": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.0.6", - "jest-util": "^27.0.6", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/@jest/console/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/console/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/core": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.0.6", - "@jest/reporters": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@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.0.6", - "jest-config": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-resolve-dependencies": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "jest-watcher": "^27.0.6", - "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", - "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 - } - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/environment": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "jest-mock": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/@jest/environment/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/environment/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@jest/environment/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/environment/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/environment/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/environment/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/environment/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/environment/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/fake-timers": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "@sinonjs/fake-timers": "^7.0.2", - "@types/node": "*", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/@jest/fake-timers/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/fake-timers/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@jest/fake-timers/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/fake-timers/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/fake-timers/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/fake-timers/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/fake-timers/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/fake-timers/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/globals": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.0.6", - "@jest/types": "^27.0.6", - "expect": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/@jest/globals/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/globals/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@jest/globals/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/globals/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/globals/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/globals/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/globals/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/globals/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/reporters": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "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.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.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 - } - } - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/source-map": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/@jest/test-result": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.0.6", - "@jest/types": "^27.0.6", - "@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" - } - }, - "../npm/http-api/node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/test-result/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@jest/test-result/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/test-result/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/test-result/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/test-result/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/test-result/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/test-result/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/test-sequencer": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.0.6", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-runtime": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/@jest/transform": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.0.6", - "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.0.6", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.0.6", - "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" - } - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/types": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "../npm/http-api/node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "../npm/http-api/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "../npm/http-api/node_modules/@microsoft/fetch-event-source": { - "version": "2.0.1", - "license": "MIT" - }, - "../npm/http-api/node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "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 - } - } - }, - "../npm/http-api/node_modules/@rollup/plugin-commonjs": { - "version": "21.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" - } - }, - "../npm/http-api/node_modules/@rollup/plugin-node-resolve": { - "version": "13.1.3", - "dev": true, - "license": "MIT", - "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": "^2.42.0" - } - }, - "../npm/http-api/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "../npm/http-api/node_modules/@sinonjs/fake-timers": { - "version": "7.1.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "../npm/http-api/node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "../npm/http-api/node_modules/@types/babel__core": { - "version": "7.1.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "../npm/http-api/node_modules/@types/babel__generator": { - "version": "7.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "../npm/http-api/node_modules/@types/babel__template": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "../npm/http-api/node_modules/@types/babel__traverse": { - "version": "7.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "../npm/http-api/node_modules/@types/browser-or-node": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/estree": { - "version": "0.0.49", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/eventsource": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "../npm/http-api/node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "../npm/http-api/node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "../npm/http-api/node_modules/@types/jest": { - "version": "26.0.24", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "../npm/http-api/node_modules/@types/json-schema": { - "version": "7.0.8", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/node": { - "version": "16.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/prettier": { - "version": "2.3.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/prop-types": { - "version": "15.7.3", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/react": { - "version": "16.14.10", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "../npm/http-api/node_modules/@types/resolve": { - "version": "1.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "../npm/http-api/node_modules/@types/scheduler": { - "version": "0.16.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@types/yargs": { - "version": "15.0.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/@types/yargs-parser": { - "version": "20.2.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/http-api/node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "../npm/http-api/node_modules/@typescript-eslint/parser": { - "version": "4.28.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/http-api/node_modules/@typescript-eslint/scope-manager": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/http-api/node_modules/@typescript-eslint/types": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/http-api/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../npm/http-api/node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../npm/http-api/node_modules/abab": { - "version": "2.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "../npm/http-api/node_modules/acorn": { - "version": "8.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "../npm/http-api/node_modules/acorn-globals": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "../npm/http-api/node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "../npm/http-api/node_modules/acorn-walk": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "../npm/http-api/node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "../npm/http-api/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/anymatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "../npm/http-api/node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/available-typed-arrays": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/babel-jest": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.6", - "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" - } - }, - "../npm/http-api/node_modules/babel-jest/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/babel-jest/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "../npm/http-api/node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/babel-plugin-jest-hoist": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../npm/http-api/node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/babel-preset-jest": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^27.0.6", - "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" - } - }, - "../npm/http-api/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "../npm/http-api/node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/browser-or-node": { - "version": "1.3.0", - "license": "MIT" - }, - "../npm/http-api/node_modules/browser-process-hrtime": { - "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "../npm/http-api/node_modules/browserslist": { - "version": "4.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001313", - "electron-to-chromium": "^1.4.76", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "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" - } - }, - "../npm/http-api/node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "../npm/http-api/node_modules/buffer-from": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/builtin-modules": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/caniuse-lite": { - "version": "1.0.30001314", - "dev": true, - "license": "CC-BY-4.0", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "../npm/http-api/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/ci-info": { - "version": "3.2.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/cjs-module-lexer": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "../npm/http-api/node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "../npm/http-api/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "../npm/http-api/node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "../npm/http-api/node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/core-js": { - "version": "3.21.1", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "../npm/http-api/node_modules/core-js-compat": { - "version": "3.21.1", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "../npm/http-api/node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "../npm/http-api/node_modules/cross-fetch": { - "version": "3.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "2.6.1" - } - }, - "../npm/http-api/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/cssom": { - "version": "0.4.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/cssstyle": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/csstype": { - "version": "3.0.8", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/data-urls": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/debug": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "../npm/http-api/node_modules/decimal.js": { - "version": "10.3.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/deep-is": { - "version": "0.1.3", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/deepmerge": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../npm/http-api/node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "../npm/http-api/node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/diff-sequences": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "../npm/http-api/node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/domexception": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/electron-to-chromium": { - "version": "1.4.82", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/emittery": { - "version": "0.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "../npm/http-api/node_modules/es-abstract": { - "version": "1.18.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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" - } - }, - "../npm/http-api/node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "../npm/http-api/node_modules/escodegen": { - "version": "2.0.0", - "dev": true, - "license": "BSD-2-Clause", - "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" - } - }, - "../npm/http-api/node_modules/escodegen/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../npm/http-api/node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "../npm/http-api/node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "../npm/http-api/node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../npm/http-api/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../npm/http-api/node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/event-target-polyfill": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "../npm/http-api/node_modules/expect": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-regex-util": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/expect/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/expect/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/expect/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/expect/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/expect/node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/expect/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/expect/node_modules/jest-get-type": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/expect/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/fast-glob": { - "version": "3.2.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/fast-text-encoding": { - "version": "1.0.3", - "dev": true, - "license": "Apache-2.0" - }, - "../npm/http-api/node_modules/fastq": { - "version": "1.11.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "../npm/http-api/node_modules/fb-watchman": { - "version": "2.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "../npm/http-api/node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/find-cache-dir": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/foreach": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/form-data": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "../npm/http-api/node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "../npm/http-api/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/fsevents": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "../npm/http-api/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "../npm/http-api/node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "../npm/http-api/node_modules/get-intrinsic": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "../npm/http-api/node_modules/glob": { - "version": "7.1.7", - "dev": true, - "license": "ISC", - "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" - } - }, - "../npm/http-api/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "../npm/http-api/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/globby": { - "version": "11.0.4", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/graceful-fs": { - "version": "4.2.6", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "../npm/http-api/node_modules/has-bigints": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/has-symbols": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "../npm/http-api/node_modules/https-proxy-agent": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "../npm/http-api/node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "../npm/http-api/node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/ignore": { - "version": "5.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../npm/http-api/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "../npm/http-api/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "../npm/http-api/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/is-arguments": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-bigint": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-boolean-object": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-callable": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-ci": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^3.1.1" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "../npm/http-api/node_modules/is-core-module": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-date-object": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/is-generator-function": { - "version": "1.0.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-glob": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/is-module": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "../npm/http-api/node_modules/is-number-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/is-reference": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "../npm/http-api/node_modules/is-regex": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-string": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-typed-array": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/istanbul-reports": { - "version": "3.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^27.0.6", - "import-local": "^3.0.2", - "jest-cli": "^27.0.6" - }, - "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 - } - } - }, - "../npm/http-api/node_modules/jest-changed-files": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-changed-files/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-circus": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.0.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6", - "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" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-config": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.6", - "@jest/types": "^27.0.6", - "babel-jest": "^27.0.6", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.0.6", - "jest-environment-jsdom": "^27.0.6", - "jest-environment-node": "^27.0.6", - "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.6" - }, - "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 - } - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/jest-get-type": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-diff": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "../npm/http-api/node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-docblock": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-each": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/jest-get-type": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-environment-jsdom": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-environment-jsdom/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-environment-jsdom/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-environment-jsdom/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-environment-jsdom/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-environment-jsdom/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-environment-jsdom/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-environment-jsdom/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-environment-jsdom/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-environment-node": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-environment-node/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-environment-node/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-environment-node/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-environment-node/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-environment-node/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-environment-node/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-environment-node/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-get-type": { - "version": "26.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "../npm/http-api/node_modules/jest-haste-map": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "@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.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", - "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" - } - }, - "../npm/http-api/node_modules/jest-haste-map/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-haste-map/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-haste-map/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-haste-map/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-haste-map/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-haste-map/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-haste-map/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-haste-map/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-jasmine2": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.6", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.0.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-leak-detector": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-leak-detector/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/diff-sequences": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/jest-diff": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/jest-get-type": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-message-util": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.6", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-mock": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-mock/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-mock/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-mock/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-mock/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-mock/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-mock/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-mock/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-mock/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "../npm/http-api/node_modules/jest-regex-util": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-resolve": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "resolve": "^1.20.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-resolve-dependencies": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-resolve-dependencies/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-resolve-dependencies/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-resolve-dependencies/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-resolve-dependencies/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-resolve-dependencies/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-resolve-dependencies/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-resolve-dependencies/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-resolve-dependencies/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-resolve/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-resolve/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runner": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.0.6", - "@jest/environment": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.0.6", - "jest-environment-node": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-leak-detector": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-runner/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-runner/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runtime": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^27.0.6", - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/globals": "^27.0.6", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-runtime/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/jest-serializer": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-snapshot": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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.0.6", - "@jest/types": "^27.0.6", - "@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.0.6", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.6", - "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", - "natural-compare": "^1.4.0", - "pretty-format": "^27.0.6", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-util": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-util/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-util/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-util/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-validate": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "leven": "^3.1.0", - "pretty-format": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/jest-get-type": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/pretty-format": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-watcher": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.0.6", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "../npm/http-api/node_modules/jest-watcher/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest-watcher/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-worker": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "../npm/http-api/node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest/node_modules/@jest/types": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest/node_modules/@types/yargs": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "../npm/http-api/node_modules/jest/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../npm/http-api/node_modules/jest/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "../npm/http-api/node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/import-local": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/jest-cli": { - "version": "27.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - }, - "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 - } - } - }, - "../npm/http-api/node_modules/jest/node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/jest/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest/node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/jest/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/jest/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "../npm/http-api/node_modules/jsdom": { - "version": "16.6.0", - "dev": true, - "license": "MIT", - "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.5", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "../npm/http-api/node_modules/jsdom/node_modules/ws": { - "version": "7.5.3", - "dev": true, - "license": "MIT", - "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 - } - } - }, - "../npm/http-api/node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "../npm/http-api/node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../npm/http-api/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/lodash.debounce": { - "version": "4.0.8", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/magic-string": { - "version": "0.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "../npm/http-api/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/makeerror": { - "version": "1.0.11", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.x" - } - }, - "../npm/http-api/node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/micromatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "../npm/http-api/node_modules/mime-db": { - "version": "1.48.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "../npm/http-api/node_modules/mime-types": { - "version": "2.1.31", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.48.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "../npm/http-api/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "../npm/http-api/node_modules/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/node-fetch": { - "version": "2.6.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "../npm/http-api/node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/node-modules-regexp": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/node-releases": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/nwsapi": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/object-inspect": { - "version": "1.10.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "../npm/http-api/node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "../npm/http-api/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/p-each-series": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/parse5": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/picomatch": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "../npm/http-api/node_modules/pirates": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "../npm/http-api/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "../npm/http-api/node_modules/pretty-format": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "../npm/http-api/node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../npm/http-api/node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../npm/http-api/node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/prompts": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "../npm/http-api/node_modules/psl": { - "version": "1.8.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "../npm/http-api/node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "../npm/http-api/node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/regenerator-runtime": { - "version": "0.13.7", - "license": "MIT" - }, - "../npm/http-api/node_modules/regenerator-transform": { - "version": "0.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "../npm/http-api/node_modules/regexpp": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "../npm/http-api/node_modules/regexpu-core": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/regjsgen": { - "version": "0.6.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/regjsparser": { - "version": "0.8.4", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "../npm/http-api/node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "../npm/http-api/node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/rollup": { - "version": "2.70.0", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "../npm/http-api/node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "../npm/http-api/node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "../npm/http-api/node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/rollup-plugin-typescript2": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^4.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.1.0" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "../npm/http-api/node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "../npm/http-api/node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.1.0", - "dev": true, - "license": "0BSD" - }, - "../npm/http-api/node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "../npm/http-api/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "../npm/http-api/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/saxes": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "../npm/http-api/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/signal-exit": { - "version": "3.0.3", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/source-map-support": { - "version": "0.5.19", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "../npm/http-api/node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/sourcemap-codec": { - "version": "1.4.8", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "../npm/http-api/node_modules/stack-utils": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/string-length/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/supports-hyperlinks": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/symbol-tree": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/terminal-link": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/terser": { - "version": "5.7.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/throat": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/tmpl": { - "version": "1.0.4", - "dev": true, - "license": "BSD-3-Clause" - }, - "../npm/http-api/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "../npm/http-api/node_modules/tough-cookie": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "../npm/http-api/node_modules/tr46": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "../npm/http-api/node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "../npm/http-api/node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../npm/http-api/node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../npm/http-api/node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "../npm/http-api/node_modules/typescript": { - "version": "3.9.10", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "../npm/http-api/node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../npm/http-api/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "../npm/http-api/node_modules/util": { - "version": "0.12.4", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/v8-to-istanbul": { - "version": "8.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "../npm/http-api/node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "../npm/http-api/node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/walker": { - "version": "1.0.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.x" - } - }, - "../npm/http-api/node_modules/web-streams-polyfill": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/webidl-conversions": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, - "../npm/http-api/node_modules/whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "../npm/http-api/node_modules/whatwg-mimetype": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/whatwg-url": { - "version": "8.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "../npm/http-api/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "../npm/http-api/node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../npm/http-api/node_modules/which-typed-array": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../npm/http-api/node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../npm/http-api/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "../npm/http-api/node_modules/xml-name-validator": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0" - }, - "../npm/http-api/node_modules/xmlchars": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "../npm/http-api/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "../npm/http-api/node_modules/yet-another-abortcontroller-polyfill": { - "version": "0.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@actions/core": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@actions/github": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@actions/http-client": "^1.0.8", - "@octokit/core": "^3.0.0", - "@octokit/plugin-paginate-rest": "^2.2.3", - "@octokit/plugin-rest-endpoint-methods": "^4.0.0" - } - }, - "node_modules/@actions/http-client": { - "version": "1.0.11", - "dev": true, - "license": "MIT", - "dependencies": { - "tunnel": "0.0.6" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.14.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.14.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "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.2.3", - "dev": true, - "license": "MIT", - "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-explode-assignable-expression": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.14.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.14.7", - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@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-decorators": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-decorators": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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-default-from": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-default-from": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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-decorators": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "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-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "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-import-meta": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-flow": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "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.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.14.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.6", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.14.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@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.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-flow-strip-types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "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/preset-react": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.16.7", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.14.7", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@base2/pretty-print-object": { - "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@chromaui/localtunnel": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "axios": "0.21.1", - "debug": "4.3.1", - "openurl": "1.1.1", - "yargs": "16.2.0" - }, - "bin": { - "lt": "bin/lt.js" - }, - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/@chromaui/localtunnel/node_modules/debug": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@emotion/cache": { - "version": "10.0.29", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/sheet": "0.9.4", - "@emotion/stylis": "0.8.5", - "@emotion/utils": "0.11.3", - "@emotion/weak-memoize": "0.2.5" - } - }, - "node_modules/@emotion/core": { - "version": "10.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.27", - "@emotion/css": "^10.0.27", - "@emotion/serialize": "^0.11.15", - "@emotion/sheet": "0.9.4", - "@emotion/utils": "0.11.3" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/css": { - "version": "10.0.27", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3", - "babel-plugin-emotion": "^10.0.27" - } - }, - "node_modules/@emotion/hash": { - "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "0.8.8", - "license": "MIT", - "dependencies": { - "@emotion/memoize": "0.7.4" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.4", - "license": "MIT" - }, - "node_modules/@emotion/serialize": { - "version": "0.11.16", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/unitless": "0.7.5", - "@emotion/utils": "0.11.3", - "csstype": "^2.5.7" - } - }, - "node_modules/@emotion/serialize/node_modules/csstype": { - "version": "2.6.17", - "dev": true, - "license": "MIT" - }, - "node_modules/@emotion/sheet": { - "version": "0.9.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@emotion/styled": { - "version": "10.0.27", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/styled-base": "^10.0.27", - "babel-plugin-emotion": "^10.0.27" - }, - "peerDependencies": { - "@emotion/core": "^10.0.27", - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/styled-base": { - "version": "10.0.31", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@emotion/is-prop-valid": "0.8.8", - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3" - }, - "peerDependencies": { - "@emotion/core": "^10.0.28", - "react": ">=16.3.0" - } - }, - "node_modules/@emotion/stylis": { - "version": "0.8.5", - "license": "MIT" - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "license": "MIT" - }, - "node_modules/@emotion/utils": { - "version": "0.11.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.2.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.10.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@figspec/components": { - "version": "0.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-to-clipboard": "^3.0.0", - "lit-element": "^2.4.0" - } - }, - "node_modules/@figspec/react": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@figspec/components": "^0.1.1" - }, - "peerDependencies": { - "react": "^16.14.0 || ^17.0.0" - } - }, - "node_modules/@fingerprintjs/fingerprintjs": { - "version": "3.3.3", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/core/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/core/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "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": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/v8-to-istanbul": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.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": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@loki/browser": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/integration-core": "^0.28.0" - } - }, - "node_modules/@loki/core": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shelljs": "^0.8.3" - } - }, - "node_modules/@loki/diff-graphics-magick": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fs-extra": "^9.1.0", - "gm": "^1.23.1" - } - }, - "node_modules/@loki/diff-looks-same": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fs-extra": "^9.1.0", - "looks-same": "^4.0.0" - } - }, - "node_modules/@loki/diff-pixelmatch": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fs-extra": "^9.1.0", - "pixelmatch": "^5.2.0", - "pngjs": "^4.0.1" - } - }, - "node_modules/@loki/diff-pixelmatch/node_modules/pngjs": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@loki/integration-core": { - "version": "0.28.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@loki/integration-react": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/browser": "^0.28.0" - }, - "peerDependencies": { - "@storybook/react": "^5 || ^6" - }, - "peerDependenciesMeta": { - "@storybook/react": { - "optional": true - } - } - }, - "node_modules/@loki/integration-react-native": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/integration-core": "^0.28.0" - }, - "peerDependencies": { - "@storybook/addons": "^5 || ^6", - "@storybook/react-native": "^5 || ^6" - }, - "peerDependenciesMeta": { - "@storybook/addons": { - "optional": true - }, - "@storybook/react-native": { - "optional": true - } - } - }, - "node_modules/@loki/integration-vue": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/browser": "^0.28.0" - }, - "peerDependencies": { - "@storybook/vue": "^5 || ^6" - }, - "peerDependenciesMeta": { - "@storybook/vue": { - "optional": true - } - } - }, - "node_modules/@loki/target-chrome-app": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/target-chrome-core": "^0.28.0", - "chrome-launcher": "^0.13.4", - "chrome-remote-interface": "^0.29.0", - "debug": "^4.1.1" - } - }, - "node_modules/@loki/target-chrome-aws-lambda": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/core": "^0.28.0", - "aws-sdk": "^2.840.0", - "debug": "^4.1.1" - } - }, - "node_modules/@loki/target-chrome-core": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/browser": "^0.28.0", - "@loki/core": "^0.28.0", - "@loki/integration-core": "^0.28.0", - "debug": "^4.1.1" - } - }, - "node_modules/@loki/target-chrome-docker": { - "version": "0.28.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/core": "^0.28.0", - "@loki/target-chrome-core": "^0.28.0", - "chrome-remote-interface": "^0.29.0", - "debug": "^4.1.1", - "execa": "^5.0.0", - "fs-extra": "^9.1.0", - "get-port": "^5.1.1", - "wait-on": "^5.2.1" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "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/@loki/target-chrome-docker/node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/is-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@loki/target-chrome-docker/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@loki/target-native-android-emulator": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/core": "^0.28.0", - "@loki/target-native-core": "^0.28.0", - "fs-extra": "^9.1.0", - "osnap": "^1.1.0", - "tempy": "^1.0.0" - } - }, - "node_modules/@loki/target-native-core": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/core": "^0.28.0", - "debug": "^4.1.1", - "ws": "^7.2.0" - } - }, - "node_modules/@loki/target-native-ios-simulator": { - "version": "0.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/core": "^0.28.0", - "@loki/target-native-core": "^0.28.0", - "fs-extra": "^9.1.0", - "osnap": "^1.1.0", - "tempy": "^1.0.0" - } - }, - "node_modules/@mdx-js/loader": { - "version": "1.6.22", - "dev": true, - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "1.6.22", - "@mdx-js/react": "1.6.22", - "loader-utils": "2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/loader/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@mdx-js/loader/node_modules/loader-utils": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/is-buffer": { - "version": "2.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@mdx-js/mdx/node_modules/is-plain-obj": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@mdx-js/mdx/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@mdx-js/mdx/node_modules/parse-entities": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@mdx-js/mdx/node_modules/remark-parse": { - "version": "8.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "9.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-is": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-remove-position": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/vfile": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/vfile-location": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/vfile-message": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@octokit/auth-token": { - "version": "2.4.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/core": { - "version": "3.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint/node_modules/is-plain-object": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "4.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "8.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^6.18.0" - }, - "peerDependencies": { - "@octokit/core": ">=2" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "4.15.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^6.13.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/request": { - "version": "5.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/request/node_modules/is-plain-object": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@octokit/types": { - "version": "6.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^8.2.1" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <3.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/html-entities": { - "version": "2.3.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/json5": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/loader-utils": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "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/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@popperjs/core": { - "version": "2.9.2", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@radix-ui/primitive": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-context": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-dialog": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.1.0", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.0", - "@radix-ui/react-dismissable-layer": "0.1.0", - "@radix-ui/react-focus-guards": "0.1.0", - "@radix-ui/react-focus-scope": "0.1.0", - "@radix-ui/react-id": "0.1.0", - "@radix-ui/react-portal": "0.1.0", - "@radix-ui/react-presence": "0.1.0", - "@radix-ui/react-primitive": "0.1.0", - "@radix-ui/react-use-controllable-state": "0.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "^2.4.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll": { - "version": "2.4.3", - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.1.0", - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0", - "use-callback-ref": "^1.2.3", - "use-sidecar": "^1.0.1" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll-bar": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/react-style-singleton": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^1.0.0" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/@radix-ui/react-dialog/node_modules/use-callback-ref": { - "version": "1.2.5", - "license": "MIT", - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.1.0", - "@radix-ui/react-primitive": "0.1.0", - "@radix-ui/react-use-body-pointer-events": "0.1.0", - "@radix-ui/react-use-callback-ref": "0.1.0", - "@radix-ui/react-use-escape-keydown": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-primitive": "0.1.0", - "@radix-ui/react-use-callback-ref": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-id": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "0.1.0", - "@radix-ui/react-use-layout-effect": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0", - "react-dom": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-presence": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-use-layout-effect": "0.1.0" - }, - "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/@radix-ui/react-primitive": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-slot": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-body-pointer-events": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-escape-keydown": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.1.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0" - } - }, - "node_modules/@reach/auto-id": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/descendants": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/disclosure": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@reach/auto-id": "0.10.5", - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/menu-button": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@reach/auto-id": "0.10.5", - "@reach/descendants": "0.10.5", - "@reach/popover": "0.10.5", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/observe-rect": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/@reach/popover": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@reach/portal": "0.10.5", - "@reach/rect": "0.10.5", - "@reach/utils": "0.10.5", - "tabbable": "^4.0.0", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/portal": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/rect": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/router": { - "version": "1.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "create-react-context": "0.3.0", - "invariant": "^2.2.3", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": "15.x || 16.x || 16.4.0-alpha.0911da3", - "react-dom": "15.x || 16.x || 16.4.0-alpha.0911da3" - } - }, - "node_modules/@reach/tabs": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@reach/auto-id": "0.10.5", - "@reach/descendants": "0.10.5", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/utils": { - "version": "0.10.5", - "license": "MIT", - "dependencies": { - "@types/warning": "^3.0.0", - "tslib": "^2.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@react-spring/animated": { - "version": "9.2.3", - "license": "MIT", - "dependencies": { - "@react-spring/shared": "~9.2.0", - "@react-spring/types": "~9.2.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@react-spring/core": { - "version": "9.2.3", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@react-spring/animated": "~9.2.0", - "@react-spring/shared": "~9.2.0", - "@react-spring/types": "~9.2.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@react-spring/rafz": { - "version": "9.2.3", - "license": "MIT" - }, - "node_modules/@react-spring/shared": { - "version": "9.2.3", - "license": "MIT", - "dependencies": { - "@react-spring/rafz": "~9.2.0", - "@react-spring/types": "~9.2.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@react-spring/types": { - "version": "9.2.3", - "license": "MIT" - }, - "node_modules/@react-spring/web": { - "version": "9.2.3", - "license": "MIT", - "dependencies": { - "@react-spring/animated": "~9.2.0", - "@react-spring/core": "~9.2.0", - "@react-spring/shared": "~9.2.0", - "@react-spring/types": "~9.2.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@samverschueren/stream-to-observable": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "any-observable": "^0.3.0" - }, - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "rxjs": { - "optional": true - }, - "zen-observable": { - "optional": true - } - } - }, - "node_modules/@sideway/address": { - "version": "4.1.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@storybook/addon-actions": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "polished": "^4.0.5", - "prop-types": "^15.7.2", - "react-inspector": "^5.1.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "uuid-browser": "^3.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-backgrounds": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-controls": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-docs": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.10", - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/plugin-transform-react-jsx": "^7.12.12", - "@babel/preset-env": "^7.12.11", - "@jest/transform": "^26.6.2", - "@mdx-js/loader": "^1.6.22", - "@mdx-js/mdx": "^1.6.22", - "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/builder-webpack4": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/csf-tools": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/postinstall": "6.3.3", - "@storybook/source-loader": "6.3.3", - "@storybook/theming": "6.3.3", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "core-js": "^3.8.2", - "doctrine": "^3.0.0", - "escodegen": "^2.0.0", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "html-tags": "^3.1.0", - "js-string-escape": "^1.0.1", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "p-limit": "^3.1.0", - "prettier": "~2.2.1", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^14.3.2", - "regenerator-runtime": "^0.13.7", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@storybook/angular": "6.3.3", - "@storybook/vue": "6.3.3", - "@storybook/vue3": "6.3.3", - "@storybook/web-components": "6.3.3", - "lit": "^2.0.0-rc.1", - "lit-html": "^1.4.1 || ^2.0.0-rc.3", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0", - "svelte": "^3.31.2", - "sveltedoc-parser": "^4.1.0", - "vue": "^2.6.10 || ^3.0.0", - "webpack": "*" - }, - "peerDependenciesMeta": { - "@storybook/angular": { - "optional": true - }, - "@storybook/vue": { - "optional": true - }, - "@storybook/vue3": { - "optional": true - }, - "@storybook/web-components": { - "optional": true - }, - "lit": { - "optional": true - }, - "lit-html": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "svelte": { - "optional": true - }, - "sveltedoc-parser": { - "optional": true - }, - "vue": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-docs/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/addon-docs/node_modules/loader-utils": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/@storybook/addon-docs/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/addon-essentials": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addon-actions": "6.3.3", - "@storybook/addon-backgrounds": "6.3.3", - "@storybook/addon-controls": "6.3.3", - "@storybook/addon-docs": "6.3.3", - "@storybook/addon-measure": "^2.0.0", - "@storybook/addon-toolbars": "6.3.3", - "@storybook/addon-viewport": "6.3.3", - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/node-logger": "6.3.3", - "core-js": "^3.8.2", - "regenerator-runtime": "^0.13.7", - "storybook-addon-outline": "^1.4.1", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@babel/core": "^7.9.6", - "@storybook/vue": "6.3.3", - "@storybook/web-components": "6.3.3", - "babel-loader": "^8.0.0", - "lit-html": "^1.4.1 || ^2.0.0-rc.3", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0", - "webpack": "*" - }, - "peerDependenciesMeta": { - "@storybook/vue": { - "optional": true - }, - "@storybook/web-components": { - "optional": true - }, - "lit-html": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-links": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/router": "6.3.3", - "@types/qs": "^6.9.5", - "core-js": "^3.8.2", - "global": "^4.4.0", - "prop-types": "^15.7.2", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-measure": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@storybook/addons": "^6.3.0", - "@storybook/api": "^6.3.0", - "@storybook/components": "^6.3.0", - "@storybook/core-events": "^6.3.0", - "@storybook/theming": "^6.3.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-toolbars": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addon-viewport": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/addons": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/api": "6.3.3", - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/router": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@storybook/api": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@reach/router": "^1.3.4", - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/router": "6.3.3", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.3", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^5.3.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@storybook/api/node_modules/@storybook/semver": { - "version": "7.3.2", - "dev": true, - "license": "ISC", - "dependencies": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/builder-webpack4": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/channel-postmessage": "6.3.3", - "@storybook/channels": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-common": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/router": "6.3.3", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.3", - "@storybook/ui": "6.3.3", - "@types/node": "^14.0.10", - "@types/webpack": "^4.41.26", - "autoprefixer": "^9.8.6", - "babel-loader": "^8.2.2", - "babel-plugin-macros": "^2.8.0", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "dotenv-webpack": "^1.8.0", - "file-loader": "^6.2.0", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^4.1.6", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "global": "^4.4.0", - "html-webpack-plugin": "^4.0.0", - "pnp-webpack-plugin": "1.6.4", - "postcss": "^7.0.36", - "postcss-flexbugs-fixes": "^4.2.1", - "postcss-loader": "^4.2.0", - "raw-loader": "^4.0.2", - "react-dev-utils": "^11.0.3", - "stable": "^0.1.8", - "style-loader": "^1.3.0", - "terser-webpack-plugin": "^4.2.3", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-filter-warnings-plugin": "^1.2.1", - "webpack-hot-middleware": "^2.25.0", - "webpack-virtual-modules": "^0.2.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "dev": true, - "license": "MIT", - "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/@storybook/builder-webpack4/node_modules/@storybook/semver": { - "version": "7.3.2", - "dev": true, - "license": "ISC", - "dependencies": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/@storybook/semver/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/@types/node": { - "version": "14.17.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/builder-webpack4/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/find-up/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/channel-postmessage": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "core-js": "^3.8.2", - "global": "^4.4.0", - "qs": "^6.10.0", - "telejson": "^5.3.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/channels": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/client-api": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/channel-postmessage": "6.3.3", - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@types/qs": "^6.9.5", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "stable": "^0.1.8", - "store2": "^2.12.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@storybook/client-logger": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "core-js": "^3.8.2", - "global": "^4.4.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/components": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@popperjs/core": "^2.6.0", - "@storybook/client-logger": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/theming": "6.3.3", - "@types/color-convert": "^2.0.0", - "@types/overlayscrollbars": "^1.12.0", - "@types/react-syntax-highlighter": "11.0.5", - "color-convert": "^2.0.1", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^7.1.3", - "memoizerific": "^1.11.3", - "overlayscrollbars": "^1.13.1", - "polished": "^4.0.5", - "prop-types": "^15.7.2", - "react-colorful": "^5.1.2", - "react-popper-tooltip": "^3.1.1", - "react-syntax-highlighter": "^13.5.3", - "react-textarea-autosize": "^8.3.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@storybook/components/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@storybook/components/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/core": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/core-client": "6.3.3", - "@storybook/core-server": "6.3.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@storybook/builder-webpack5": "6.3.3", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@storybook/builder-webpack5": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/core-client": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/channel-postmessage": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/ui": "6.3.3", - "airbnb-js-shims": "^2.2.1", - "ansi-to-html": "^0.6.11", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "unfetch": "^4.2.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0", - "webpack": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/core-common": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@babel/register": "^7.12.1", - "@storybook/node-logger": "6.3.3", - "@storybook/semver": "^7.3.2", - "@types/glob-base": "^0.3.0", - "@types/micromatch": "^4.0.1", - "@types/node": "^14.0.10", - "@types/pretty-hrtime": "^1.0.0", - "babel-loader": "^8.2.2", - "babel-plugin-macros": "^3.0.1", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "express": "^4.17.1", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.0.4", - "glob": "^7.1.6", - "glob-base": "^0.3.0", - "interpret": "^2.2.0", - "json5": "^2.1.3", - "lazy-universal-dotenv": "^3.0.1", - "micromatch": "^4.0.2", - "pkg-dir": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/core-common/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "dev": true, - "license": "MIT", - "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/@storybook/core-common/node_modules/@storybook/semver": { - "version": "7.3.2", - "dev": true, - "license": "ISC", - "dependencies": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/core-common/node_modules/@storybook/semver/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "14.17.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/core-common/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/core-common/node_modules/babel-plugin-macros": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/@storybook/core-common/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@storybook/core-common/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/@storybook/core-common/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@storybook/core-common/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/core-common/node_modules/cosmiconfig": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/core-common/node_modules/deepmerge": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@storybook/core-common/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-common/node_modules/find-up/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-common/node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.2.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - } - }, - "node_modules/@storybook/core-common/node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/core-common/node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/core-common/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/core-common/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/core-common/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-common/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-common/node_modules/schema-utils": { - "version": "2.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/@storybook/core-common/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/core-events": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "core-js": "^3.8.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core-server": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/builder-webpack4": "6.3.3", - "@storybook/core-client": "6.3.3", - "@storybook/core-common": "6.3.3", - "@storybook/csf-tools": "6.3.3", - "@storybook/manager-webpack4": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/semver": "^7.3.2", - "@types/node": "^14.0.10", - "@types/node-fetch": "^2.5.7", - "@types/pretty-hrtime": "^1.0.0", - "@types/webpack": "^4.41.26", - "better-opn": "^2.1.1", - "boxen": "^4.2.0", - "chalk": "^4.1.0", - "cli-table3": "0.6.0", - "commander": "^6.2.1", - "compression": "^1.7.4", - "core-js": "^3.8.2", - "cpy": "^8.1.1", - "detect-port": "^1.3.0", - "express": "^4.17.1", - "file-system-cache": "^1.0.5", - "fs-extra": "^9.0.1", - "globby": "^11.0.2", - "ip": "^1.1.5", - "node-fetch": "^2.6.1", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "regenerator-runtime": "^0.13.7", - "serve-favicon": "^2.5.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@storybook/builder-webpack5": "6.3.3", - "@storybook/manager-webpack5": "6.3.3", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@storybook/builder-webpack5": { - "optional": true - }, - "@storybook/manager-webpack5": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/core-server/node_modules/@storybook/semver": { - "version": "7.3.2", - "dev": true, - "license": "ISC", - "dependencies": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "14.17.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/core-server/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/core-server/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/@storybook/core-server/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@storybook/core-server/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/core-server/node_modules/commander": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@storybook/core-server/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@storybook/core-server/node_modules/detect-port": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/@storybook/core-server/node_modules/globby": { - "version": "11.0.4", - "dev": true, - "license": "MIT", - "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/@storybook/core-server/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/core-server/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/core-server/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/csf": { - "version": "0.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/@storybook/csf-tools": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/plugin-transform-react-jsx": "^7.12.12", - "@babel/preset-env": "^7.12.11", - "@babel/traverse": "^7.12.11", - "@babel/types": "^7.12.11", - "@mdx-js/mdx": "^1.6.22", - "@storybook/csf": "^0.0.1", - "core-js": "^3.8.2", - "fs-extra": "^9.0.1", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.20", - "prettier": "~2.2.1", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/manager-webpack4": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.3.3", - "@storybook/core-client": "6.3.3", - "@storybook/core-common": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/theming": "6.3.3", - "@storybook/ui": "6.3.3", - "@types/node": "^14.0.10", - "@types/webpack": "^4.41.26", - "babel-loader": "^8.2.2", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "dotenv-webpack": "^1.8.0", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fs-extra": "^9.0.1", - "html-webpack-plugin": "^4.0.0", - "node-fetch": "^2.6.1", - "pnp-webpack-plugin": "1.6.4", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "style-loader": "^1.3.0", - "telejson": "^5.3.2", - "terser-webpack-plugin": "^4.2.3", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-virtual-modules": "^0.2.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/@types/node": { - "version": "14.17.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/manager-webpack4/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/@storybook/manager-webpack4/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/manager-webpack4/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/node-logger": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/npmlog": "^4.1.2", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "npmlog": "^4.1.2", - "pretty-hrtime": "^1.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/node-logger/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/node-logger/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/@storybook/node-logger/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@storybook/node-logger/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/node-logger/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/node-logger/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/postinstall": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "core-js": "^3.8.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/react": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/preset-flow": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", - "@storybook/addons": "6.3.3", - "@storybook/core": "6.3.3", - "@storybook/core-common": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.253f8c1.0", - "@storybook/semver": "^7.3.2", - "@types/webpack-env": "^1.16.0", - "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-named-asset-import": "^0.3.1", - "babel-plugin-react-docgen": "^4.2.1", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "prop-types": "^15.7.2", - "react-dev-utils": "^11.0.3", - "react-refresh": "^0.8.3", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "webpack": "4" - }, - "bin": { - "build-storybook": "bin/build.js", - "start-storybook": "bin/index.js", - "storybook-server": "bin/index.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@babel/core": "^7.11.5", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/react-docgen-typescript-plugin": { - "version": "1.0.2-canary.253f8c1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "find-cache-dir": "^3.3.1", - "flat-cache": "^3.0.4", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^2.0.0", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "typescript": ">= 3.x", - "webpack": ">= 4" - } - }, - "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-cache-dir": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "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/@storybook/react-docgen-typescript-plugin/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/react/node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-html": "^0.0.7", - "error-stack-parser": "^2.0.6", - "html-entities": "^1.2.1", - "native-url": "^0.2.6", - "schema-utils": "^2.6.5", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.x" - }, - "peerDependencies": { - "@types/webpack": "4.x", - "react-refresh": ">=0.8.3 <0.10.0", - "sockjs-client": "^1.4.0", - "type-fest": "^0.13.1", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@storybook/react/node_modules/@storybook/semver": { - "version": "7.3.2", - "dev": true, - "license": "ISC", - "dependencies": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/react/node_modules/react-refresh": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@storybook/react/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@storybook/react/node_modules/type-fest": { - "version": "0.13.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/router": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@reach/router": "^1.3.4", - "@storybook/client-logger": "6.3.3", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@storybook/source-loader": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/csf": "0.0.1", - "core-js": "^3.8.2", - "estraverse": "^5.2.0", - "global": "^4.4.0", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "prettier": "~2.2.1", - "regenerator-runtime": "^0.13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@storybook/source-loader/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@storybook/source-loader/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/source-loader/node_modules/loader-utils": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/@storybook/theming": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/core": "^10.1.1", - "@emotion/is-prop-valid": "^0.8.6", - "@emotion/styled": "^10.0.27", - "@storybook/client-logger": "6.3.3", - "core-js": "^3.8.2", - "deep-object-diff": "^1.1.0", - "emotion-theming": "^10.0.27", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@storybook/ui": { - "version": "6.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@emotion/core": "^10.1.1", - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/router": "6.3.3", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.3", - "@types/markdown-to-jsx": "^6.11.3", - "copy-to-clipboard": "^3.3.1", - "core-js": "^3.8.2", - "core-js-pure": "^3.8.2", - "downshift": "^6.0.15", - "emotion-theming": "^10.0.27", - "fuse.js": "^3.6.1", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^6.11.4", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "qs": "^6.10.0", - "react-draggable": "^4.4.3", - "react-helmet-async": "^1.0.7", - "react-sizeme": "^3.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "store2": "^2.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/@storybook/ui/node_modules/@storybook/semver": { - "version": "7.3.2", - "dev": true, - "license": "ISC", - "dependencies": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@storybook/ui/node_modules/markdown-to-jsx": { - "version": "6.11.4", - "dev": true, - "license": "MIT", - "dependencies": { - "prop-types": "^15.6.2", - "unquote": "^1.1.0" - }, - "engines": { - "node": ">= 4" - }, - "peerDependencies": { - "react": ">= 0.14.0" - } - }, - "node_modules/@styled-system/background": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/border": { - "version": "5.1.5", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/color": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/core": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1" - } - }, - "node_modules/@styled-system/css": { - "version": "5.1.5", - "license": "MIT" - }, - "node_modules/@styled-system/flexbox": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/grid": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/layout": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/position": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/shadow": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/space": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/typography": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/variant": { - "version": "5.1.5", - "license": "MIT", - "dependencies": { - "@styled-system/core": "^5.1.2", - "@styled-system/css": "^5.1.5" - } - }, - "node_modules/@tlon/indigo-dark": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/@tlon/indigo-light": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/@tlon/indigo-react": { - "version": "1.2.27", - "license": "MIT", - "dependencies": { - "@reach/menu-button": "^0.10.5", - "tslib": "^2.0.1" - }, - "peerDependencies": { - "formik": "^2.1.5", - "react": "^17", - "react-dom": "^17", - "styled-components": "^5.1.1", - "styled-system": "^5.1.5" - } - }, - "node_modules/@tlon/sigil-js": { - "version": "1.4.3", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4", - "svgson": "^4.0.0", - "transformation-matrix": "2.1.1" - }, - "peerDependencies": { - "react": "^16" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.15", - "dev": true, - "license": "MIT", - "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.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/braces": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/color-convert": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/color-name": "*" - } - }, - "node_modules/@types/color-name": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/glob": { - "version": "7.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/glob-base": { - "version": "0.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/is-function": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.8", - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.14.171", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/markdown-to-jsx": { - "version": "6.11.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/mdast": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/micromatch": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/braces": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "16.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node-fetch": { - "version": "2.5.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/npmlog": { - "version": "4.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/overlayscrollbars": { - "version": "1.12.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prettier": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/pretty-hrtime": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.3", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/reach__router": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react": { - "version": "16.14.10", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "16.9.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "^16" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/history": "*", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/react-syntax-highlighter": { - "version": "11.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/styled-components": { - "version": "5.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/styled-system": { - "version": "5.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/tapable": { - "version": "1.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uglify-js": { - "version": "3.13.1", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/@types/unist": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/@types/warning": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/@types/webpack": { - "version": "4.41.30", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-env": { - "version": "1.16.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/webpack-sources": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/yargs": { - "version": "15.0.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yoga-layout": { - "version": "1.9.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yup": { - "version": "0.29.12", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.28.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.0.4", - "dev": true, - "license": "MIT", - "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/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@urbit/api": { - "resolved": "../npm/api", - "link": true - }, - "node_modules/@urbit/eslint-config": { - "resolved": "../npm/eslint-config", - "link": true - }, - "node_modules/@urbit/http-api": { - "resolved": "../npm/http-api", - "link": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "license": "ISC" - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "license": "Apache-2.0" - }, - "node_modules/abab": { - "version": "2.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/accepts": { - "version": "1.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/airbnb-js-shims": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "array.prototype.flatmap": "^1.2.1", - "es5-shim": "^4.5.13", - "es6-shim": "^0.35.5", - "function.prototype.name": "^1.1.0", - "globalthis": "^1.0.0", - "object.entries": "^1.1.0", - "object.fromentries": "^2.0.0 || ^1.0.0", - "object.getownpropertydescriptors": "^2.0.3", - "object.values": "^1.1.0", - "promise.allsettled": "^1.0.0", - "promise.prototype.finally": "^3.1.0", - "string.prototype.matchall": "^4.0.0 || ^3.0.1", - "string.prototype.padend": "^3.0.0", - "string.prototype.padstart": "^3.0.0", - "symbol.prototype.description": "^1.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "license": "MIT", - "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-errors": { - "version": "1.0.1", - "license": "MIT", - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-to-html": { - "version": "0.6.15", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^2.0.0" - }, - "bin": { - "ansi-to-html": "bin/ansi-to-html" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/any-ascii": { - "version": "0.1.7", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/any-observable": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "devOptional": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/app-root-dir": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/aproba": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-hidden": { - "version": "1.1.3", - "license": "ISC", - "dependencies": { - "tslib": "^1.0.0" - }, - "engines": { - "node": ">=8.5.0" - } - }, - "node_modules/aria-hidden/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/array-includes": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-parallel": { - "version": "0.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/array-series": { - "version": "0.1.5", - "dev": true, - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.map": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1": { - "version": "0.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/assert": { - "version": "1.5.0", - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "license": "ISC" - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "license": "MIT", - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types": { - "version": "0.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/async-each": { - "version": "1.0.3", - "devOptional": true, - "license": "MIT" - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/async-retry": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "retry": "0.12.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/auto-bind": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/autoprefixer": { - "version": "9.8.6", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - }, - "node_modules/aws-sdk": { - "version": "2.940.0", - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/aws-sdk/node_modules/querystring": { - "version": "0.2.0", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "dev": true, - "license": "MIT" - }, - "node_modules/axios": { - "version": "0.21.1", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.10.0" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.2.2", - "dev": true, - "license": "MIT", - "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-loader/node_modules/find-cache-dir": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "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/babel-loader/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-add-react-displayname": { - "version": "0.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-emotion": { - "version": "10.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.16", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - } - }, - "node_modules/babel-plugin-emotion/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "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.14.2" - } - }, - "node_modules/babel-plugin-lodash": { - "version": "3.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.0.0-beta.49", - "@babel/types": "^7.0.0-beta.49", - "glob": "^7.1.1", - "lodash": "^4.17.10", - "require-package-name": "^2.0.1" - } - }, - "node_modules/babel-plugin-macros": { - "version": "2.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.7", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-react-docgen": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ast-types": "^0.14.2", - "lodash": "^4.17.15", - "react-docgen": "^5.0.0" - } - }, - "node_modules/babel-plugin-root-import": { - "version": "6.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slash": "^3.0.0" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "1.13.1", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.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", - "license": "MIT" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base": { - "version": "0.11.2", - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", - "dev": true, - "license": "MIT" - }, - "node_modules/batch-processor": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/before-after-hook": { - "version": "2.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/better-opn": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "open": "^7.0.3" - }, - "engines": { - "node": ">8.0.0" - } - }, - "node_modules/big-integer": { - "version": "1.6.48", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "license": "MIT", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.19.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bonjour": { - "version": "3.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/bonjour/node_modules/array-flatten": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/boxen": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.8.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "license": "MIT", - "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", - "license": "MIT", - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "license": "MIT", - "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", - "license": "MIT", - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.2.0", - "license": "MIT" - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "license": "ISC", - "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/bn.js": { - "version": "5.2.0", - "license": "MIT" - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.16.6", - "dev": true, - "license": "MIT", - "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/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "license": "MIT", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/c8": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.2", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.0.2", - "rimraf": "^3.0.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^8.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.7" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/c8/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache": { - "version": "12.0.4", - "license": "ISC", - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/cache-base": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/has-value": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/has-values": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/is-number": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/kind-of": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/unset-value": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelize": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001243", - "dev": true, - "license": "CC-BY-4.0", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/ccount": { - "version": "1.1.0", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "license": "ISC" - }, - "node_modules/chromatic": { - "version": "5.9.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@actions/core": "^1.2.4", - "@actions/github": "^4.0.0", - "@babel/runtime": "^7.12.13", - "@chromaui/localtunnel": "^2.0.2", - "async-retry": "^1.3.1", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.1", - "dotenv": "^8.2.0", - "env-ci": "^5.0.2", - "esm": "^3.2.25", - "execa": "^5.0.0", - "fake-tag": "^2.0.0", - "fs-extra": "^9.1.0", - "https-proxy-agent": "^5.0.0", - "jsonfile": "^6.0.1", - "junit-report-builder": "2.1.0", - "listr": "0.14.3", - "meow": "^8.0.0", - "node-ask": "^1.0.1", - "node-fetch": "^2.6.0", - "node-loggly-bulk": "^2.2.4", - "p-limit": "3.1.0", - "picomatch": "2.2.2", - "pkg-up": "^3.1.0", - "pluralize": "^8.0.0", - "progress-stream": "^2.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "string-argv": "^0.3.1", - "strip-ansi": "6.0.0", - "tmp-promise": "3.0.2", - "tree-kill": "^1.2.2", - "ts-dedent": "^1.0.0", - "util-deprecate": "^1.0.2", - "uuid": "^8.3.2", - "yarn-or-npm": "^3.0.1" - }, - "bin": { - "chroma": "bin/register.js", - "chromatic": "bin/register.js", - "chromatic-cli": "bin/register.js" - } - }, - "node_modules/chromatic/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chromatic/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/chromatic/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chromatic/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/chromatic/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/chromatic/node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "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/chromatic/node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chromatic/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/chromatic/node_modules/is-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/chromatic/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chromatic/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/picomatch": { - "version": "2.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/chromatic/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/chromatic/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chromatic/node_modules/ts-dedent": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/chromatic/node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/chromatic/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/chrome-launcher": { - "version": "0.13.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^1.0.5", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^0.5.3", - "rimraf": "^3.0.2" - } - }, - "node_modules/chrome-launcher/node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chrome-launcher/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/chrome-remote-interface": { - "version": "0.29.0", - "dev": true, - "license": "MIT", - "dependencies": { - "commander": "2.11.x", - "ws": "^7.2.0" - }, - "bin": { - "chrome-remote-interface": "bin/client.js" - } - }, - "node_modules/chrome-remote-interface/node_modules/commander": { - "version": "2.11.0", - "dev": true, - "license": "MIT" - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "dev": true, - "license": "MIT" - }, - "node_modules/class-utils": { - "version": "0.3.6", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/classnames": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/clean-css": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/clean-webpack-plugin": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - }, - "engines": { - "node": ">=8.9.0" - }, - "peerDependencies": { - "webpack": "*" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3": { - "version": "0.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/cli-table3/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-table3/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "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.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-excerpt": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "convert-to-spaces": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/codemirror": { - "version": "5.62.0", - "license": "MIT" - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-diff": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/colors": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "license": "MIT" - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/commondir": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "license": "MIT" - }, - "node_modules/compressible": { - "version": "2.0.18", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/compute-scroll-into-view": { - "version": "1.0.17", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-to-spaces": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/cookie": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-to-clipboard": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "toggle-selection": "^1.0.6" - } - }, - "node_modules/core-js": { - "version": "3.20.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.15.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "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", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.15.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cp-file": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cp-file/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy": { - "version": "8.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^2.0.1", - "cp-file": "^7.0.0", - "globby": "^9.2.0", - "has-glob": "^1.0.0", - "junk": "^3.1.0", - "nested-error-stacks": "^2.1.0", - "p-all": "^2.1.0", - "p-filter": "^2.1.0", - "p-map": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cpy/node_modules/@nodelib/fs.stat": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/cpy/node_modules/array-union": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/dir-glob": { - "version": "2.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cpy/node_modules/fast-glob": { - "version": "2.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/cpy/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/glob-parent": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/cpy/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/globby": { - "version": "9.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cpy/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/cpy/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cpy/node_modules/p-map": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cpy/node_modules/path-type": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cpy/node_modules/path-type/node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/cpy/node_modules/slash": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cpy/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "license": "MIT", - "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", - "license": "MIT", - "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/create-react-context": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "gud": "^1.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/cross-env": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-env/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-env/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-env/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-env/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-env/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-loader": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/css-select": { - "version": "4.1.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.2.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/css-to-react-native": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/css-what": { - "version": "5.0.1", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "dev": true, - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.0.8", - "devOptional": true, - "license": "MIT" - }, - "node_modules/cyclist": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/dashdash": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/date-fns": { - "version": "1.30.1", - "dev": true, - "license": "MIT" - }, - "node_modules/date-format": { - "version": "0.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.2", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-object-diff": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-rename-keys": { - "version": "0.2.1", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2", - "rename-keys": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deepmerge": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/globby": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/node_modules/p-map": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/depd": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/des.js": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/detab": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "license": "MIT", - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "license": "MIT", - "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/dom-serializer/node_modules/domhandler": { - "version": "4.2.0", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "dev": true - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domexception": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "3.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.0.1" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.7.0", - "license": "BSD-2-Clause", - "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/domutils/node_modules/domhandler": { - "version": "4.2.0", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-defaults": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "dotenv": "^6.2.0" - } - }, - "node_modules/dotenv-defaults/node_modules/dotenv": { - "version": "6.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=6" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/dotenv-webpack": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "dotenv-defaults": "^1.0.2" - }, - "peerDependencies": { - "webpack": "^1 || ^2 || ^3 || ^4" - } - }, - "node_modules/downshift": { - "version": "6.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.13.10", - "compute-scroll-into-view": "^1.0.17", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "peerDependencies": { - "react": ">=16.12.0" - } - }, - "node_modules/downshift/node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/duplexer": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/duplexify": { - "version": "3.7.1", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.769", - "dev": true, - "license": "ISC" - }, - "node_modules/elegant-spinner": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/element-resize-detector": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "batch-processor": "1.0.0" - } - }, - "node_modules/elliptic": { - "version": "6.5.4", - "license": "MIT", - "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/emittery": { - "version": "0.7.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emotion-theming": { - "version": "10.0.27", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.5.5", - "@emotion/weak-memoize": "0.2.5", - "hoist-non-react-statics": "^3.3.0" - }, - "peerDependencies": { - "@emotion/core": "^10.0.27", - "react": ">=16.3.0" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/endent": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.5" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "license": "MIT", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/enquirer/node_modules/ansi-colors": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-ci": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "java-properties": "^1.0.0" - }, - "engines": { - "node": ">=10.13" - } - }, - "node_modules/env-ci/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/env-ci/node_modules/execa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/env-ci/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/env-ci/node_modules/is-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/env-ci/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/env-ci/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/env-ci/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/env-ci/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/env-ci/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.0.6", - "license": "MIT", - "dependencies": { - "stackframe": "^1.1.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/es-get-iterator": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-get-iterator/node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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/es5-shim": { - "version": "4.5.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/es6-shim": { - "version": "0.35.6", - "dev": true, - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "dev": true, - "license": "BSD-2-Clause", - "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/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint": { - "version": "7.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "4.0.3", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "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-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.1", - "dev": true, - "license": "MIT", - "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/eslint/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/esm": { - "version": "3.2.25", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-to-babel": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "c8": "^7.6.0" - }, - "engines": { - "node": ">=8.3.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "2.0.3", - "license": "MIT" - }, - "node_modules/events": { - "version": "1.1.1", - "license": "MIT", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/eventsource": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expect": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/express": { - "version": "4.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/qs": { - "version": "6.7.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/fake-tag": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/jaydenseric" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.6", - "dev": true, - "license": "MIT", - "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-json-parse": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.11.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "license": "ISC" - }, - "node_modules/figures": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/file-loader/node_modules/loader-utils": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/file-saver": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/file-system-cache": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "bluebird": "^3.3.5", - "fs-extra": "^0.30.0", - "ramda": "^0.21.0" - } - }, - "node_modules/file-system-cache/node_modules/fs-extra": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/file-system-cache/node_modules/ramda": { - "version": "0.21.0", - "dev": true, - "license": "MIT" - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "license": "MIT", - "optional": true - }, - "node_modules/filesize": { - "version": "6.1.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-root": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findup-sync": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/findup-sync/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/fn-name": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/follow-redirects": { - "version": "1.14.1", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreground-child": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/foreground-child/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "engines": { - "node": ">=6.11.5", - "yarn": ">=1.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/format": { - "version": "0.2.2", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/formik": { - "version": "2.2.9", - "funding": [ - { - "type": "individual", - "url": "https://opencollective.com/formik" - } - ], - "license": "Apache-2.0", - "dependencies": { - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^1.10.0" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/formik/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/forwarded": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "dev": true, - "license": "MIT", - "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/jsonfile": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "dev": true, - "license": "Unlicense" - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fuse.js": { - "version": "3.6.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=6" - } - }, - "node_modules/fuzzy": { - "version": "0.1.3", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/gauge": { - "version": "2.7.4", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "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-nonce": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/github-slugger": { - "version": "1.3.0", - "dev": true, - "license": "ISC", - "dependencies": { - "emoji-regex": ">=6.0.0 <=6.1.1" - } - }, - "node_modules/github-slugger/node_modules/emoji-regex": { - "version": "6.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.1.7", - "license": "ISC", - "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-base": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/glob-parent": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/glob-base/node_modules/is-extglob": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/is-glob": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "devOptional": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-promise": { - "version": "3.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@types/glob": "*" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "glob": "*" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.3.0", - "dev": true, - "license": "BSD" - }, - "node_modules/global": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.0.1", - "dev": true, - "license": "MIT", - "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/gm": { - "version": "1.23.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-parallel": "~0.1.3", - "array-series": "~0.1.5", - "cross-spawn": "^4.0.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/gm/node_modules/cross-spawn": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "node_modules/gm/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/gm/node_modules/lru-cache": { - "version": "4.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/gm/node_modules/yallist": { - "version": "2.1.2", - "dev": true, - "license": "ISC" - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "license": "ISC" - }, - "node_modules/growly": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/gud": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/gzip-size": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/har-schema": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-glob": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-glob": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-glob/node_modules/is-glob": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/has-value": { - "version": "0.3.1", - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/hash.js": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-to-hyperscript/node_modules/unist-util-is": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/is-buffer": { - "version": "2.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hast-util-from-parse5/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/vfile": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/vfile-location": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/vfile-message": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/is-buffer": { - "version": "2.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hast-util-raw/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/vfile": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/vfile-message": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/history": { - "version": "4.10.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "license": "MIT", - "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", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-tags": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/html-to-react": { - "version": "1.4.5", - "license": "MIT", - "dependencies": { - "domhandler": "^3.3.0", - "htmlparser2": "^5.0", - "lodash.camelcase": "^4.3.0", - "ramda": "^0.27.1" - }, - "peerDependencies": { - "react": "^16.0 || ^17.0" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "4.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "engines": { - "node": ">=6.9" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/htmlparser2": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.3.0", - "domutils": "^2.4.2", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/fb55/htmlparser2?sponsor=1" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "1.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "0.19.1", - "dev": true, - "license": "MIT", - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy/node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/http-signature": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/husky": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "4.1.1", - "license": "ISC", - "dependencies": { - "postcss": "^7.0.14" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "license": "BSD-3-Clause" - }, - "node_modules/iferr": { - "version": "0.1.5", - "license": "MIT" - }, - "node_modules/ignore": { - "version": "5.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.5", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-jsx": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^2.0.0", - "find-cache-dir": "^3.2.0", - "make-dir": "^3.0.2", - "resolve-from": "^3.0.0", - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/import-jsx/node_modules/find-cache-dir": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "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/import-jsx/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-jsx/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-jsx/node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-jsx/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/import-local": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "license": "ISC" - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "dev": true, - "license": "ISC" - }, - "node_modules/ink": { - "version": "3.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "auto-bind": "4.0.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", - "indent-string": "^4.0.0", - "is-ci": "^2.0.0", - "lodash": "^4.17.20", - "patch-console": "^1.0.0", - "react-devtools-core": "^4.6.0", - "react-reconciler": "^0.24.0", - "scheduler": "^0.18.0", - "signal-exit": "^3.0.2", - "slice-ansi": "^3.0.0", - "stack-utils": "^2.0.2", - "string-length": "^3.1.0", - "type-fest": "^0.12.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0", - "ws": "^7.2.5", - "yoga-layout-prebuilt": "^1.9.6" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": ">=16.8.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/ink/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink/node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ink/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/ink/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ink/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/ink/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ink/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/scheduler": { - "version": "0.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/ink/node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/string-length": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/string-length/node_modules/ansi-regex": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ink/node_modules/string-length/node_modules/astral-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ink/node_modules/string-length/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ink/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ink/node_modules/type-fest": { - "version": "0.12.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ink/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "dev": true, - "license": "MIT" - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumeric": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "license": "MIT" - }, - "node_modules/is-callable": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-dom": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-object": "^1.0.1", - "is-window": "^1.0.2" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-map": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-observable": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "symbol-observable": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-in-cwd": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-path-inside": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-promise": { - "version": "2.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-window": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/is-windows": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "dev": true, - "license": "BSD-3-Clause", - "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/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "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/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterate-iterator": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/iterate-value": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/java-properties": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-changed-files/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/jest-config": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-config/node_modules/deepmerge": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.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": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-watcher/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/node_modules/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/jest/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/jest-cli": { - "version": "26.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jmespath": { - "version": "0.15.0", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/joi": { - "version": "17.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-string-escape": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/jsdom": { - "version": "16.6.0", - "dev": true, - "license": "MIT", - "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.5", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsdom/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/jsdom/node_modules/tough-cookie": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsdom/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema": { - "version": "0.2.3", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/json3": { - "version": "3.3.3", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.1", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/junit-report-builder": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "0.0.2", - "lodash": "^4.17.15", - "make-dir": "^1.3.0", - "xmlbuilder": "^10.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/junit-report-builder/node_modules/make-dir": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/junit-report-builder/node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/junit-report-builder/node_modules/xmlbuilder": { - "version": "10.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/junk": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/lazy-universal-dotenv": { - "version": "3.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.5.0", - "app-root-dir": "^1.0.2", - "core-js": "^3.0.4", - "dotenv": "^8.0.0", - "dotenv-expand": "^5.1.0" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">=6.0.0", - "yarn": ">=1.0.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lighthouse-logger": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^2.6.8", - "marky": "^1.2.0" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/lint-staged/node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/lint-staged/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/lint-staged/node_modules/cosmiconfig": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lint-staged/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lint-staged/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "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/lint-staged/node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/lint-staged/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/listr": { - "version": "0.14.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/listr-silent-renderer": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer": { - "version": "0.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "listr": "^0.14.2" - } - }, - "node_modules/listr-update-renderer/node_modules/ansi-styles": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/listr-update-renderer/node_modules/chalk": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "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/listr-update-renderer/node_modules/indent-string": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-update-renderer/node_modules/supports-color": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/listr-verbose-renderer": { - "version": "0.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr-verbose-renderer/node_modules/figures": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/listr/node_modules/p-map": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/listr2": { - "version": "3.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - } - }, - "node_modules/listr2/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/log-update": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/listr2/node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lit-element": { - "version": "2.5.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "lit-html": "^1.1.1" - } - }, - "node_modules/lit-html": { - "version": "1.4.1", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "license": "MIT", - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "license": "MIT" - }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "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/log-symbols/node_modules/supports-color": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-update": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/loglevel": { - "version": "1.7.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "node_modules/loki": { - "version": "0.28.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/integration-react": "^0.28.0", - "@loki/integration-react-native": "^0.28.0", - "@loki/integration-vue": "^0.28.0", - "@loki/runner": "^0.28.1", - "@loki/target-chrome-app": "^0.28.0", - "@loki/target-chrome-docker": "^0.28.1", - "@loki/target-native-android-emulator": "^0.28.0", - "@loki/target-native-ios-simulator": "^0.28.0" - }, - "bin": { - "loki": "bin/loki" - }, - "peerDependencies": { - "@storybook/react": "^5 || ^6" - }, - "peerDependenciesMeta": { - "@storybook/react": { - "optional": true - } - } - }, - "node_modules/loki/node_modules/@loki/runner": { - "version": "0.28.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@loki/core": "^0.28.0", - "@loki/diff-graphics-magick": "^0.28.0", - "@loki/diff-looks-same": "^0.28.0", - "@loki/diff-pixelmatch": "^0.28.0", - "@loki/target-chrome-app": "^0.28.0", - "@loki/target-chrome-aws-lambda": "^0.28.0", - "@loki/target-chrome-docker": "^0.28.1", - "@loki/target-native-android-emulator": "^0.28.0", - "@loki/target-native-ios-simulator": "^0.28.0", - "async": "^3.2.0", - "chalk": "^4.1.0", - "ci-info": "^2.0.0", - "cosmiconfig": "^7.0.0", - "fs-extra": "^9.1.0", - "import-jsx": "^4.0.0", - "ink": "^3.0.8", - "minimist": "^1.2.0", - "ramda": "^0.27.1", - "react": "^16.14.0", - "transliteration": "^2.2.0" - }, - "bin": { - "loki": "bin/loki" - } - }, - "node_modules/loki/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/loki/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "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/loki/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/loki/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/loki/node_modules/cosmiconfig": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/loki/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/loki/node_modules/react": { - "version": "16.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loki/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/longest-streak": { - "version": "2.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/looks-same": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-diff": "^1.1.0", - "concat-stream": "^1.6.2", - "lodash": "^4.17.3", - "parse-color": "^1.0.0", - "pngjs": "^3.3.3" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowlight": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.1", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.11", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.x" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-obj": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/map-or-similar": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/map-visit": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/markdown-to-jsx": { - "version": "7.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "react": ">= 0.14.0" - } - }, - "node_modules/marky": { - "version": "1.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/md5.js": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdast-add-list-metadata": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "unist-util-visit-parents": "1.1.2" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-compact": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-compact/node_modules/unist-util-is": { - "version": "4.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-compact/node_modules/unist-util-visit": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-compact/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-is": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-is": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.2.2", - "dev": true, - "license": "Unlicense", - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/memoizerific": { - "version": "1.11.3", - "dev": true, - "license": "MIT", - "dependencies": { - "map-or-similar": "^1.5.0" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/meow": { - "version": "8.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/microevent.ts": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.48.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.31", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.48.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.0.4", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "license": "MIT" - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minimist-options/node_modules/arrify": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minimist-options/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minipass": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mississippi": { - "version": "3.0.0", - "license": "BSD-2-Clause", - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/moment-locales-webpack-plugin": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash.difference": "^4.5.0" - }, - "peerDependencies": { - "moment": "^2.8.0", - "webpack": "^1 || ^2 || ^3 || ^4 || ^5" - } - }, - "node_modules/mousetrap": { - "version": "1.6.5", - "license": "Apache-2.0 WITH LLVM-exception" - }, - "node_modules/mousetrap-global-bind": { - "version": "1.1.0", - "license": "Apache-2.0", - "peerDependencies": { - "mousetrap": "^1.6.0" - } - }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/nan": { - "version": "2.14.2", - "license": "MIT", - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/native-url": { - "version": "0.2.6", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "querystring": "^0.2.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "license": "MIT" - }, - "node_modules/nested-error-stacks": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-ask": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/node-dir": { - "version": "0.1.17", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "license": "MIT", - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "license": "MIT", - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/events": { - "version": "3.3.0", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/node-libs-browser/node_modules/querystring": { - "version": "0.2.0", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/node-libs-browser/node_modules/url": { - "version": "0.11.0", - "license": "MIT", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/node-loggly-bulk": { - "version": "2.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "json-stringify-safe": "5.0.x", - "moment": "^2.18.1", - "request": ">=2.76.0 <3.0.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-notifier/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "1.1.73", - "dev": true, - "license": "MIT" - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-wheel": { - "version": "1.0.1", - "license": "BSD-3-Clause" - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/nth-check": { - "version": "2.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "license": "MIT", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.10.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/objectorarray": { - "version": "1.0.5", - "dev": true, - "license": "ISC" - }, - "node_modules/obuf": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/oembed-parser": { - "version": "1.4.7", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/omit-deep": { - "version": "0.3.0", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.1", - "unset-value": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/openurl": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/opn": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "dev": true, - "license": "MIT", - "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/original": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "url-parse": "^1.4.3" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "license": "MIT" - }, - "node_modules/osnap": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^0.6.3", - "minimist": "^1.2.0", - "pify": "^3.0.0", - "tempfile": "^2.0.0", - "which": "^1.2.14" - }, - "bin": { - "osnap": "bin/osnap" - } - }, - "node_modules/osnap/node_modules/cross-spawn": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/osnap/node_modules/execa": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/osnap/node_modules/get-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/osnap/node_modules/lru-cache": { - "version": "4.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/osnap/node_modules/pify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/osnap/node_modules/yallist": { - "version": "2.1.2", - "dev": true, - "license": "ISC" - }, - "node_modules/overlayscrollbars": { - "version": "1.13.1", - "dev": true, - "license": "MIT" - }, - "node_modules/p-all": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-map": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-all/node_modules/p-map": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-filter": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-map": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-filter/node_modules/p-map": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "retry": "^0.12.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "license": "(MIT AND Zlib)" - }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "license": "ISC", - "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/parse-color": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "~0.5.0" - } - }, - "node_modules/parse-color/node_modules/color-convert": { - "version": "0.5.3", - "dev": true - }, - "node_modules/parse-entities": { - "version": "1.2.2", - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-console": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "license": "MIT", - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pixelmatch": { - "version": "5.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "pngjs": "^4.0.1" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, - "node_modules/pixelmatch/node_modules/pngjs": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/pkg-dir": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver-compare": "^1.0.0" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pngjs": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pnp-webpack-plugin": { - "version": "1.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ts-pnp": "^1.1.6" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/polished": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.14.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "7.0.36", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss": "^7.0.26" - } - }, - "node_modules/postcss-loader": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/postcss-loader/node_modules/loader-utils": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/postcss-loader/node_modules/schema-utils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "2.0.0", - "license": "ISC", - "dependencies": { - "postcss": "^7.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "3.0.3", - "license": "MIT", - "dependencies": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-scope": { - "version": "2.2.0", - "license": "ISC", - "dependencies": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/postcss-modules-values": { - "version": "3.0.0", - "license": "ISC", - "dependencies": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/pretty-error": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/prismjs": { - "version": "1.24.1", - "dev": true, - "license": "MIT" - }, - "node_modules/process": { - "version": "0.11.10", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/progress-stream": { - "version": "2.0.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "speedometer": "~1.0.0", - "through2": "~2.0.3" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/promise.allsettled": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "array.prototype.map": "^1.0.3", - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.0.2", - "iterate-value": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/promise.prototype.finally": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.0", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/prompts": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/property-expr": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/property-information": { - "version": "5.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/psl": { - "version": "1.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "license": "MIT", - "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/pump": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.3.2", - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.10.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.1", - "license": "MIT", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ramda": { - "version": "0.27.1", - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-loader": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/raw-loader/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/raw-loader/node_modules/loader-utils": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/raw-loader/node_modules/schema-utils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/react": { - "version": "17.0.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-codemirror2": { - "version": "6.0.1", - "license": "MIT", - "peerDependencies": { - "codemirror": "5.x", - "react": ">=15.5 <=16.x" - } - }, - "node_modules/react-colorful": { - "version": "5.2.3", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/react-dev-utils": { - "version": "11.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-dev-utils/node_modules/@babel/code-frame": { - "version": "7.10.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/browserslist": { - "version": "4.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - }, - "node_modules/react-dev-utils/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/immer": { - "version": "8.0.1", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/react-dev-utils/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/react-dev-utils/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/react-devtools-core": { - "version": "4.13.5", - "dev": true, - "license": "MIT", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-docgen": { - "version": "5.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.7.5", - "@babel/generator": "^7.12.11", - "@babel/runtime": "^7.7.6", - "ast-types": "^0.14.2", - "commander": "^2.19.0", - "doctrine": "^3.0.0", - "estree-to-babel": "^3.1.0", - "neo-async": "^2.6.1", - "node-dir": "^0.1.10", - "strip-indent": "^3.0.0" - }, - "bin": { - "react-docgen": "bin/react-docgen.js" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/react-docgen-typescript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": ">= 4.3.x" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-draggable": { - "version": "4.4.3", - "dev": true, - "license": "MIT", - "dependencies": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0" - } - }, - "node_modules/react-element-to-jsx-string": { - "version": "14.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@base2/pretty-print-object": "1.0.0", - "is-plain-object": "3.0.1" - }, - "peerDependencies": { - "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1", - "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1" - } - }, - "node_modules/react-element-to-jsx-string/node_modules/is-plain-object": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/react-fast-compare": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/react-helmet": { - "version": "6.1.0", - "license": "MIT", - "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-helmet-async": { - "version": "1.0.9", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0", - "react-dom": "^16.6.0 || ^17.0.0" - } - }, - "node_modules/react-helmet-async/node_modules/react-fast-compare": { - "version": "3.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/react-helmet/node_modules/react-fast-compare": { - "version": "3.2.0", - "license": "MIT" - }, - "node_modules/react-inspector": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.0.0", - "is-dom": "^1.0.0", - "prop-types": "^15.0.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "license": "MIT" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/react-markdown": { - "version": "4.3.1", - "license": "MIT", - "dependencies": { - "html-to-react": "^1.3.4", - "mdast-add-list-metadata": "1.0.1", - "prop-types": "^15.7.2", - "react-is": "^16.8.6", - "remark-parse": "^5.0.0", - "unified": "^6.1.5", - "unist-util-visit": "^1.3.0", - "xtend": "^4.0.1" - }, - "peerDependencies": { - "react": "^15.0.0 || ^16.0.0" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "node_modules/react-markdown/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "license": "MIT", - "dependencies": { - "unist-util-is": "^3.0.0" - } - }, - "node_modules/react-oembed-container": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "react": "^16.2.0", - "react-dom": "^16.2.0" - } - }, - "node_modules/react-popper": { - "version": "2.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "react-fast-compare": "^3.0.1", - "warning": "^4.0.2" - }, - "peerDependencies": { - "@popperjs/core": "^2.0.0", - "react": "^16.8.0 || ^17" - } - }, - "node_modules/react-popper-tooltip": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@popperjs/core": "^2.5.4", - "react-popper": "^2.2.4" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0", - "react-dom": "^16.6.0 || ^17.0.0" - } - }, - "node_modules/react-popper/node_modules/react-fast-compare": { - "version": "3.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/react-reconciler": { - "version": "0.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.18.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^16.0.0" - } - }, - "node_modules/react-reconciler/node_modules/scheduler": { - "version": "0.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-router": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-dom": { - "version": "5.2.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-side-effect": { - "version": "2.1.1", - "license": "MIT", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0" - } - }, - "node_modules/react-sizeme": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "element-resize-detector": "^1.2.2", - "invariant": "^2.2.4", - "shallowequal": "^1.1.0", - "throttle-debounce": "^3.0.1" - }, - "peerDependencies": { - "react": "^0.14.0 || ^15.0.0-0 || ^16.0.0 || ^17.0.0", - "react-dom": "^0.14.0 || ^15.0.0-0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/react-syntax-highlighter": { - "version": "13.5.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.3.1", - "highlight.js": "^10.1.1", - "lowlight": "^1.14.0", - "prismjs": "^1.21.0", - "refractor": "^3.1.0" - }, - "peerDependencies": { - "react": ">= 0.14.0" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/react-use-gesture": { - "version": "9.1.3", - "license": "MIT", - "peerDependencies": { - "react": ">= 16.8.0" - } - }, - "node_modules/react-virtuoso": { - "version": "0.20.3", - "license": "MIT", - "dependencies": { - "resize-observer-polyfill": "^1.5.1", - "tslib": "^1.11.1" - }, - "peerDependencies": { - "react": ">=16" - } - }, - "node_modules/react-virtuoso/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/react-visibility-sensor": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "prop-types": "^15.7.2" - }, - "peerDependencies": { - "react": ">=16.0.0", - "react-dom": ">=16.0.0" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/refractor": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "hastscript": "^6.0.0", - "parse-entities": "^2.0.0", - "prismjs": "~1.24.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/parse-entities": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark": { - "version": "12.0.1", - "license": "MIT", - "dependencies": { - "remark-parse": "^8.0.0", - "remark-stringify": "^8.0.0", - "unified": "^9.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-breaks": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-breaks/node_modules/unist-util-is": { - "version": "4.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-breaks/node_modules/unist-util-visit": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-breaks/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-disable-tokenizers": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "clone": "^2.1.2" - } - }, - "node_modules/remark-external-links": { - "version": "8.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend": "^3.0.0", - "is-absolute-url": "^3.0.0", - "mdast-util-definitions": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-external-links/node_modules/unist-util-is": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-external-links/node_modules/unist-util-visit": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-external-links/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "dev": true, - "license": "MIT" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/is-buffer": { - "version": "2.0.5", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/remark-mdx/node_modules/is-plain-obj": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/remark-mdx/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/remark-mdx/node_modules/parse-entities": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-mdx/node_modules/remark-parse": { - "version": "8.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/unist-util-is": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/unist-util-remove-position": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/unist-util-visit": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/vfile": { - "version": "4.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/vfile-location": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/vfile-message": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "node_modules/remark-slug": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug/node_modules/unist-util-is": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug/node_modules/unist-util-visit": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-slug/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify/node_modules/parse-entities": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark/node_modules/is-buffer": { - "version": "2.0.5", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/remark/node_modules/is-plain-obj": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/remark/node_modules/parse-entities": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark/node_modules/remark-parse": { - "version": "8.0.3", - "license": "MIT", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/unified": { - "version": "9.2.1", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/unist-util-is": { - "version": "4.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/unist-util-remove-position": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/unist-util-visit": { - "version": "2.0.3", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/vfile": { - "version": "4.2.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/vfile-location": { - "version": "3.2.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark/node_modules/vfile-message": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "devOptional": true, - "license": "ISC" - }, - "node_modules/rename-keys": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/renderkid": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.2.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/replace-ext": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/request": { - "version": "2.88.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/require-package-name": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/resize-observer-polyfill": { - "version": "1.5.1", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-dir/node_modules/global-modules": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-dir/node_modules/global-prefix": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "dev": true, - "license": "MIT", - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-queue": { - "version": "1.0.3", - "license": "ISC", - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/sane": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sass": { - "version": "1.35.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/sass-loader": { - "version": "8.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0", - "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.1", - "license": "ISC" - }, - "node_modules/saxes": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "version": "0.20.2", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "license": "MIT", - "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/select-hose": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "1.10.11", - "dev": true, - "license": "MIT", - "dependencies": { - "node-forge": "^0.10.0" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/send": { - "version": "0.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-favicon": { - "version": "2.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-favicon/node_modules/ms": { - "version": "2.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-favicon/node_modules/safe-buffer": { - "version": "5.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-static": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/set-value": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shell-quote": { - "version": "1.7.2", - "dev": true, - "license": "MIT" - }, - "node_modules/shelljs": { - "version": "0.8.4", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shelljs/node_modules/interpret": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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.3", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "0.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.21", - "dev": true, - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs-client": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.9", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/spdy": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/speedometer": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/split-string": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/sshpk": { - "version": "1.16.1", - "dev": true, - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssri": { - "version": "6.0.2", - "license": "ISC", - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "dev": true, - "license": "MIT" - }, - "node_modules/stack-generator": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "stackframe": "^1.1.1" - } - }, - "node_modules/stack-utils": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/stacktrace-gps": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "source-map": "0.5.6", - "stackframe": "^1.1.1" - } - }, - "node_modules/stacktrace-gps/node_modules/source-map": { - "version": "0.5.6", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stacktrace-js": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/store2": { - "version": "2.12.0", - "dev": true, - "license": "(MIT OR GPL-3.0)" - }, - "node_modules/storybook-addon-designs": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@figspec/react": "^0.1.6" - } - }, - "node_modules/storybook-addon-outline": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/addons": "^6.3.0", - "@storybook/api": "^6.3.0", - "@storybook/components": "^6.3.0", - "@storybook/core-events": "^6.3.0", - "ts-dedent": "^2.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-each": { - "version": "1.2.3", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "license": "MIT", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-argv": { - "version": "0.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "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.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.padend": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.padstart": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-entities": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "dev": true, - "license": "BSD-2-Clause", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/style-loader/node_modules/json5": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/style-loader/node_modules/loader-utils": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/styled-components": { - "version": "5.3.0", - "license": "MIT", - "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/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/styled-system": { - "version": "5.1.5", - "license": "MIT", - "dependencies": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" - } - }, - "node_modules/suncalc": { - "version": "1.8.0" - }, - "node_modules/supports-color": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/svgson": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "deep-rename-keys": "^0.2.1", - "omit-deep": "0.3.0", - "xml-reader": "2.4.3" - } - }, - "node_modules/symbol-observable": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/symbol.prototype.description": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.2" - }, - "engines": { - "node": ">= 0.11.15" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synchronous-promise": { - "version": "2.0.15", - "license": "BSD-3-Clause" - }, - "node_modules/tabbable": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/table": { - "version": "6.7.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.1", - "dev": true, - "license": "MIT", - "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/table/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/table/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/table/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/telejson": { - "version": "5.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/is-function": "^1.0.0", - "global": "^4.4.0", - "is-function": "^1.0.2", - "is-regex": "^1.1.2", - "is-symbol": "^1.0.3", - "isobject": "^4.0.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3" - } - }, - "node_modules/telejson/node_modules/isobject": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tempfile": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tempy": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "del": "^6.0.0", - "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/del": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy/node_modules/is-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tempy/node_modules/temp-dir": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/term-size": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "4.8.0", - "license": "BSD-2-Clause", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/cacache": { - "version": "15.2.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/terser-webpack-plugin/node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "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/terser-webpack-plugin/node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser-webpack-plugin/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "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/serialize-javascript": { - "version": "5.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/ssri": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.7.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "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", - "dev": true, - "license": "MIT" - }, - "node_modules/throat": { - "version": "5.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/throttle-debounce": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "license": "MIT", - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tmpl": { - "version": "1.0.4", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toggle-selection": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toposort": { - "version": "2.0.2", - "license": "MIT" - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tr46/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/transformation-matrix": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/transliteration": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yargs": "^16.1.0" - }, - "bin": { - "slugify": "dist/bin/slugify", - "transliterate": "dist/bin/transliterate" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/trim": { - "version": "0.0.1" - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-dedent": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/ts-essentials": { - "version": "2.0.12", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-mdast": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.3", - "@types/unist": "^2.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ts-pnp": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.3.0", - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "0BSD" - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "license": "MIT" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense" - }, - "node_modules/type-check": { - "version": "0.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "2.12.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "optional": true, - "peer": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "license": "MIT" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.3.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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/unfetch": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/unherit": { - "version": "1.1.3", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "license": "ISC", - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^1.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position/node_modules/unist-util-visit": { - "version": "1.4.1", - "license": "MIT", - "dependencies": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "node_modules/unist-util-remove-position/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "license": "MIT", - "dependencies": { - "unist-util-is": "^3.0.0" - } - }, - "node_modules/unist-util-remove/node_modules/unist-util-is": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/unist-util-visit": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/unist-util-visit/node_modules/unist-util-is": { - "version": "5.1.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/universalify": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/unset-value": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/urbit-ob": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "license": "MIT" - }, - "node_modules/url": { - "version": "0.10.3", - "license": "MIT", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader/node_modules/loader-utils": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url/node_modules/querystring": { - "version": "0.2.0", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/use": { - "version": "3.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-composed-ref": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ts-essentials": "^2.0.3" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "use-isomorphic-layout-effect": "^1.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=8.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/use-sidecar/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/util": { - "version": "0.11.1", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/util.promisify": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "license": "ISC" - }, - "node_modules/utila": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.3.2", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuid-browser": { - "version": "3.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "8.0.0", - "dev": true, - "license": "ISC", - "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", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vfile": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.4", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "node_modules/vfile-location": { - "version": "2.0.6", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "unist-util-stringify-position": "^1.1.1" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/wait-on": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "axios": "^0.21.1", - "joi": "^17.3.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^6.6.3" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/walker": { - "version": "1.0.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "license": "ISC", - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "license": "MIT", - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "license": "MIT", - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "license": "MIT", - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "license": "MIT", - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "license": "ISC", - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "license": "MIT", - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "license": "MIT", - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "license": "MIT", - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "license": "MIT", - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "license": "MIT", - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "license": "MIT", - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "4.46.0", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "3.3.12", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "peerDependencies": { - "webpack": "4.x.x" - } - }, - "node_modules/webpack-cli/node_modules/ansi-regex": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/cliui": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/webpack-cli/node_modules/find-up": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/import-local": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-cli/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-cli/node_modules/locate-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/p-locate": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-cli/node_modules/pkg-dir": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/resolve-cwd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-cli/node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-cli/node_modules/string-width": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/wrap-ansi": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/yargs": { - "version": "13.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/webpack-cli/node_modules/yargs-parser": { - "version": "13.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/find-up": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/import-local": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/is-binary-path": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/locate-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/p-locate": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/pkg-dir": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/querystring": { - "version": "0.2.0", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-cwd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-from": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/to-regex-range": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/url": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs": { - "version": "13.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs-parser": { - "version": "13.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/webpack-filter-warnings-plugin": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.3 < 5.0.0 || >= 5.10" - }, - "peerDependencies": { - "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" - } - }, - "node_modules/webpack-hot-middleware": { - "version": "2.25.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-html": "0.0.7", - "html-entities": "^1.2.0", - "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "license": "MIT", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.0.0" - } - }, - "node_modules/webpack-virtual-modules/node_modules/debug": { - "version": "3.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/kind-of": { - "version": "6.0.3", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "license": "MIT", - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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-module": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/wide-align": { - "version": "1.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/widest-line/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.1.5", - "license": "MIT", - "dependencies": { - "workbox-core": "^6.1.5" - } - }, - "node_modules/workbox-core": { - "version": "6.1.5", - "license": "MIT" - }, - "node_modules/workbox-expiration": { - "version": "6.1.5", - "license": "MIT", - "dependencies": { - "workbox-core": "^6.1.5" - } - }, - "node_modules/workbox-precaching": { - "version": "6.1.5", - "license": "MIT", - "dependencies": { - "workbox-core": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5" - } - }, - "node_modules/workbox-recipes": { - "version": "6.1.5", - "license": "MIT", - "dependencies": { - "workbox-cacheable-response": "^6.1.5", - "workbox-core": "^6.1.5", - "workbox-expiration": "^6.1.5", - "workbox-precaching": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5" - } - }, - "node_modules/workbox-routing": { - "version": "6.1.5", - "license": "MIT", - "dependencies": { - "workbox-core": "^6.1.5" - } - }, - "node_modules/workbox-strategies": { - "version": "6.1.5", - "license": "MIT", - "dependencies": { - "workbox-core": "^6.1.5" - } - }, - "node_modules/worker-farm": { - "version": "1.7.0", - "license": "MIT", - "dependencies": { - "errno": "~0.1.7" - } - }, - "node_modules/worker-rpc": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "microevent.ts": "~0.1.1" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "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.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "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.2", - "dev": true, - "license": "MIT", - "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/x-is-string": { - "version": "0.1.0" - }, - "node_modules/xml-lexer": { - "version": "0.2.2", - "license": "MIT", - "dependencies": { - "eventemitter3": "^2.0.0" - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/xml-reader": { - "version": "2.4.3", - "license": "MIT", - "dependencies": { - "eventemitter3": "^2.0.0", - "xml-lexer": "^0.2.2" - } - }, - "node_modules/xml2js": { - "version": "0.4.19", - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "node_modules/xmlbuilder": { - "version": "9.0.7", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/xtend": { - "version": "4.0.2", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "license": "ISC" - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yarn-or-npm": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.5", - "pkg-dir": "^4.2.0" - }, - "bin": { - "yarn-or-npm": "bin/index.js", - "yon": "bin/index.js" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/yarn-or-npm/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoga-layout-prebuilt": { - "version": "1.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yoga-layout": "1.9.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yup": { - "version": "0.29.3", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.5", - "fn-name": "~3.0.0", - "lodash": "^4.17.15", - "lodash-es": "^4.17.11", - "property-expr": "^2.0.2", - "synchronous-promise": "^2.0.13", - "toposort": "^2.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/zustand": { - "version": "3.5.5", - "license": "MIT", - "peerDependencies": { - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - } - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@actions/core": { - "version": "1.4.0", - "dev": true - }, - "@actions/github": { - "version": "4.0.0", - "dev": true, - "requires": { - "@actions/http-client": "^1.0.8", - "@octokit/core": "^3.0.0", - "@octokit/plugin-paginate-rest": "^2.2.3", - "@octokit/plugin-rest-endpoint-methods": "^4.0.0" - } - }, - "@actions/http-client": { - "version": "1.0.11", - "dev": true, - "requires": { - "tunnel": "0.0.6" - } - }, - "@babel/code-frame": { - "version": "7.14.5", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/compat-data": { - "version": "7.14.7", - "dev": true - }, - "@babel/core": { - "version": "7.14.6", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", - "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", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "source-map": { - "version": "0.5.7", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.14.5", - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "dev": true, - "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" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5" - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helpers": { - "version": "7.14.6", - "dev": true, - "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/highlight": { - "version": "7.14.5", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.7" - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-decorators": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-default-from": "^7.14.5" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-flow": "^7.14.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.7", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.14.6", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.14.6", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.6", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/preset-env": { - "version": "7.14.7", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@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.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.15.0", - "semver": "^6.3.0" - } - }, - "@babel/preset-flow": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-flow-strip-types": "^7.14.5" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "dev": true, - "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/preset-react": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - } - }, - "@babel/preset-typescript": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.14.5" - } - }, - "@babel/register": { - "version": "7.14.5", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - } - }, - "@babel/runtime": { - "version": "7.16.7", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.14.5", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.5", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "@base2/pretty-print-object": { - "version": "1.0.0", - "dev": true - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@chromaui/localtunnel": { - "version": "2.0.3", - "dev": true, - "requires": { - "axios": "0.21.1", - "debug": "4.3.1", - "openurl": "1.1.1", - "yargs": "16.2.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "dev": true, - "requires": { - "ms": "2.1.2" - } - } - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@emotion/cache": { - "version": "10.0.29", - "dev": true, - "requires": { - "@emotion/sheet": "0.9.4", - "@emotion/stylis": "0.8.5", - "@emotion/utils": "0.11.3", - "@emotion/weak-memoize": "0.2.5" - } - }, - "@emotion/core": { - "version": "10.1.1", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/cache": "^10.0.27", - "@emotion/css": "^10.0.27", - "@emotion/serialize": "^0.11.15", - "@emotion/sheet": "0.9.4", - "@emotion/utils": "0.11.3" - } - }, - "@emotion/css": { - "version": "10.0.27", - "dev": true, - "requires": { - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3", - "babel-plugin-emotion": "^10.0.27" - } - }, - "@emotion/hash": { - "version": "0.8.0", - "dev": true - }, - "@emotion/is-prop-valid": { - "version": "0.8.8", - "requires": { - "@emotion/memoize": "0.7.4" - } - }, - "@emotion/memoize": { - "version": "0.7.4" - }, - "@emotion/serialize": { - "version": "0.11.16", - "dev": true, - "requires": { - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/unitless": "0.7.5", - "@emotion/utils": "0.11.3", - "csstype": "^2.5.7" - }, - "dependencies": { - "csstype": { - "version": "2.6.17", - "dev": true - } - } - }, - "@emotion/sheet": { - "version": "0.9.4", - "dev": true - }, - "@emotion/styled": { - "version": "10.0.27", - "dev": true, - "requires": { - "@emotion/styled-base": "^10.0.27", - "babel-plugin-emotion": "^10.0.27" - } - }, - "@emotion/styled-base": { - "version": "10.0.31", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/is-prop-valid": "0.8.8", - "@emotion/serialize": "^0.11.15", - "@emotion/utils": "0.11.3" - } - }, - "@emotion/stylis": { - "version": "0.8.5" - }, - "@emotion/unitless": { - "version": "0.7.5" - }, - "@emotion/utils": { - "version": "0.11.3", - "dev": true - }, - "@emotion/weak-memoize": { - "version": "0.2.5", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.2", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.10.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "dev": true - } - } - }, - "@figspec/components": { - "version": "0.1.9", - "dev": true, - "requires": { - "copy-to-clipboard": "^3.0.0", - "lit-element": "^2.4.0" - } - }, - "@figspec/react": { - "version": "0.1.6", - "dev": true, - "requires": { - "@figspec/components": "^0.1.1" - } - }, - "@fingerprintjs/fingerprintjs": { - "version": "3.3.3", - "requires": { - "tslib": "^2.0.1" - } - }, - "@hapi/hoek": { - "version": "9.2.0", - "dev": true - }, - "@hapi/topo": { - "version": "5.1.0", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "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", - "dev": true - }, - "@jest/console": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "26.6.3", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "@jest/environment": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/globals": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - } - }, - "@jest/reporters": { - "version": "26.6.2", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "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": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "v8-to-istanbul": { - "version": "7.1.2", - "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", - "dev": true - } - } - } - } - }, - "@jest/source-map": { - "version": "26.6.2", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - } - }, - "@jest/transform": { - "version": "26.6.2", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.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": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "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", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@loki/browser": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/integration-core": "^0.28.0" - } - }, - "@loki/core": { - "version": "0.28.0", - "dev": true, - "requires": { - "shelljs": "^0.8.3" - } - }, - "@loki/diff-graphics-magick": { - "version": "0.28.0", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "gm": "^1.23.1" - } - }, - "@loki/diff-looks-same": { - "version": "0.28.0", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "looks-same": "^4.0.0" - } - }, - "@loki/diff-pixelmatch": { - "version": "0.28.0", - "dev": true, - "requires": { - "fs-extra": "^9.1.0", - "pixelmatch": "^5.2.0", - "pngjs": "^4.0.1" - }, - "dependencies": { - "pngjs": { - "version": "4.0.1", - "dev": true - } - } - }, - "@loki/integration-core": { - "version": "0.28.0", - "dev": true - }, - "@loki/integration-react": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/browser": "^0.28.0" - } - }, - "@loki/integration-react-native": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/integration-core": "^0.28.0" - } - }, - "@loki/integration-vue": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/browser": "^0.28.0" - } - }, - "@loki/target-chrome-app": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/target-chrome-core": "^0.28.0", - "chrome-launcher": "^0.13.4", - "chrome-remote-interface": "^0.29.0", - "debug": "^4.1.1" - } - }, - "@loki/target-chrome-aws-lambda": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/core": "^0.28.0", - "aws-sdk": "^2.840.0", - "debug": "^4.1.1" - } - }, - "@loki/target-chrome-core": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/browser": "^0.28.0", - "@loki/core": "^0.28.0", - "@loki/integration-core": "^0.28.0", - "debug": "^4.1.1" - } - }, - "@loki/target-chrome-docker": { - "version": "0.28.1", - "dev": true, - "requires": { - "@loki/core": "^0.28.0", - "@loki/target-chrome-core": "^0.28.0", - "chrome-remote-interface": "^0.29.0", - "debug": "^4.1.1", - "execa": "^5.0.0", - "fs-extra": "^9.1.0", - "get-port": "^5.1.1", - "wait-on": "^5.2.1" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "5.1.1", - "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" - } - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "@loki/target-native-android-emulator": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/core": "^0.28.0", - "@loki/target-native-core": "^0.28.0", - "fs-extra": "^9.1.0", - "osnap": "^1.1.0", - "tempy": "^1.0.0" - } - }, - "@loki/target-native-core": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/core": "^0.28.0", - "debug": "^4.1.1", - "ws": "^7.2.0" - } - }, - "@loki/target-native-ios-simulator": { - "version": "0.28.0", - "dev": true, - "requires": { - "@loki/core": "^0.28.0", - "@loki/target-native-core": "^0.28.0", - "fs-extra": "^9.1.0", - "osnap": "^1.1.0", - "tempy": "^1.0.0" - } - }, - "@mdx-js/loader": { - "version": "1.6.22", - "dev": true, - "requires": { - "@mdx-js/mdx": "1.6.22", - "@mdx-js/react": "1.6.22", - "loader-utils": "2.0.0" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "dev": true, - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "is-buffer": { - "version": "2.0.5", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "parse-entities": { - "version": "2.0.0", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "remark-parse": { - "version": "8.0.3", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "semver": { - "version": "5.7.1", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "unified": { - "version": "9.2.0", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unist-util-is": { - "version": "4.1.0", - "dev": true - }, - "unist-util-remove-position": { - "version": "2.0.1", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile": { - "version": "4.2.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0", - "dev": true - }, - "vfile-message": { - "version": "2.0.4", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "dev": true, - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.22", - "dev": true - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.7", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "@octokit/auth-token": { - "version": "2.4.5", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3" - } - }, - "@octokit/core": { - "version": "3.5.1", - "dev": true, - "requires": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/endpoint": { - "version": "6.0.12", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "dev": true - } - } - }, - "@octokit/graphql": { - "version": "4.6.4", - "dev": true, - "requires": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "@octokit/openapi-types": { - "version": "8.2.1", - "dev": true - }, - "@octokit/plugin-paginate-rest": { - "version": "2.14.0", - "dev": true, - "requires": { - "@octokit/types": "^6.18.0" - } - }, - "@octokit/plugin-rest-endpoint-methods": { - "version": "4.15.1", - "dev": true, - "requires": { - "@octokit/types": "^6.13.0", - "deprecation": "^2.3.1" - } - }, - "@octokit/request": { - "version": "5.6.0", - "dev": true, - "requires": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.1", - "universal-user-agent": "^6.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "dev": true - } - } - }, - "@octokit/request-error": { - "version": "2.1.0", - "dev": true, - "requires": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "@octokit/types": { - "version": "6.18.1", - "dev": true, - "requires": { - "@octokit/openapi-types": "^8.2.1" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.5", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.8.1", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "html-entities": { - "version": "2.3.3", - "dev": true - }, - "json5": { - "version": "2.2.1", - "dev": true - }, - "loader-utils": { - "version": "2.0.2", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "schema-utils": { - "version": "3.1.1", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "source-map": { - "version": "0.7.3", - "dev": true - } - } - }, - "@popperjs/core": { - "version": "2.9.2", - "dev": true - }, - "@radix-ui/primitive": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-compose-refs": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-context": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-dialog": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.1.0", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-context": "0.1.0", - "@radix-ui/react-dismissable-layer": "0.1.0", - "@radix-ui/react-focus-guards": "0.1.0", - "@radix-ui/react-focus-scope": "0.1.0", - "@radix-ui/react-id": "0.1.0", - "@radix-ui/react-portal": "0.1.0", - "@radix-ui/react-presence": "0.1.0", - "@radix-ui/react-primitive": "0.1.0", - "@radix-ui/react-use-controllable-state": "0.1.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "^2.4.0" - }, - "dependencies": { - "react-remove-scroll": { - "version": "2.4.3", - "requires": { - "react-remove-scroll-bar": "^2.1.0", - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0", - "use-callback-ref": "^1.2.3", - "use-sidecar": "^1.0.1" - } - }, - "react-remove-scroll-bar": { - "version": "2.2.0", - "requires": { - "react-style-singleton": "^2.1.0", - "tslib": "^1.0.0" - } - }, - "react-style-singleton": { - "version": "2.1.1", - "requires": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^1.0.0" - } - }, - "tslib": { - "version": "1.14.1" - }, - "use-callback-ref": { - "version": "1.2.5", - "requires": {} - } - } - }, - "@radix-ui/react-dismissable-layer": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "0.1.0", - "@radix-ui/react-primitive": "0.1.0", - "@radix-ui/react-use-body-pointer-events": "0.1.0", - "@radix-ui/react-use-callback-ref": "0.1.0", - "@radix-ui/react-use-escape-keydown": "0.1.0" - } - }, - "@radix-ui/react-focus-guards": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-focus-scope": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-primitive": "0.1.0", - "@radix-ui/react-use-callback-ref": "0.1.0" - } - }, - "@radix-ui/react-id": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-portal": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "0.1.0", - "@radix-ui/react-use-layout-effect": "0.1.0" - } - }, - "@radix-ui/react-presence": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0", - "@radix-ui/react-use-layout-effect": "0.1.0" - } - }, - "@radix-ui/react-primitive": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "0.1.0" - } - }, - "@radix-ui/react-slot": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "0.1.0" - } - }, - "@radix-ui/react-use-body-pointer-events": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "0.1.0" - } - }, - "@radix-ui/react-use-callback-ref": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@radix-ui/react-use-controllable-state": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.1.0" - } - }, - "@radix-ui/react-use-escape-keydown": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "0.1.0" - } - }, - "@radix-ui/react-use-layout-effect": { - "version": "0.1.0", - "requires": { - "@babel/runtime": "^7.13.10" - } - }, - "@reach/auto-id": { - "version": "0.10.5", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/descendants": { - "version": "0.10.5", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/disclosure": { - "version": "0.10.5", - "requires": { - "@reach/auto-id": "0.10.5", - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/menu-button": { - "version": "0.10.5", - "requires": { - "@reach/auto-id": "0.10.5", - "@reach/descendants": "0.10.5", - "@reach/popover": "0.10.5", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - } - }, - "@reach/observe-rect": { - "version": "1.2.0" - }, - "@reach/popover": { - "version": "0.10.5", - "requires": { - "@reach/portal": "0.10.5", - "@reach/rect": "0.10.5", - "@reach/utils": "0.10.5", - "tabbable": "^4.0.0", - "tslib": "^2.0.0" - } - }, - "@reach/portal": { - "version": "0.10.5", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/rect": { - "version": "0.10.5", - "requires": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - } - }, - "@reach/router": { - "version": "1.3.4", - "dev": true, - "requires": { - "create-react-context": "0.3.0", - "invariant": "^2.2.3", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4" - } - }, - "@reach/tabs": { - "version": "0.10.5", - "requires": { - "@reach/auto-id": "0.10.5", - "@reach/descendants": "0.10.5", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - } - }, - "@reach/utils": { - "version": "0.10.5", - "requires": { - "@types/warning": "^3.0.0", - "tslib": "^2.0.0", - "warning": "^4.0.3" - } - }, - "@react-spring/animated": { - "version": "9.2.3", - "requires": { - "@react-spring/shared": "~9.2.0", - "@react-spring/types": "~9.2.0" - } - }, - "@react-spring/core": { - "version": "9.2.3", - "requires": { - "@react-spring/animated": "~9.2.0", - "@react-spring/shared": "~9.2.0", - "@react-spring/types": "~9.2.0" - } - }, - "@react-spring/rafz": { - "version": "9.2.3" - }, - "@react-spring/shared": { - "version": "9.2.3", - "requires": { - "@react-spring/rafz": "~9.2.0", - "@react-spring/types": "~9.2.0" - } - }, - "@react-spring/types": { - "version": "9.2.3" - }, - "@react-spring/web": { - "version": "9.2.3", - "requires": { - "@react-spring/animated": "~9.2.0", - "@react-spring/core": "~9.2.0", - "@react-spring/shared": "~9.2.0", - "@react-spring/types": "~9.2.0" - } - }, - "@samverschueren/stream-to-observable": { - "version": "0.3.1", - "dev": true, - "requires": { - "any-observable": "^0.3.0" - } - }, - "@sideway/address": { - "version": "4.1.2", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "dev": true - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@storybook/addon-actions": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "polished": "^4.0.5", - "prop-types": "^15.7.2", - "react-inspector": "^5.1.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "uuid-browser": "^3.1.0" - } - }, - "@storybook/addon-backgrounds": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/addon-controls": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-docs": { - "version": "6.3.3", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/plugin-transform-react-jsx": "^7.12.12", - "@babel/preset-env": "^7.12.11", - "@jest/transform": "^26.6.2", - "@mdx-js/loader": "^1.6.22", - "@mdx-js/mdx": "^1.6.22", - "@mdx-js/react": "^1.6.22", - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/builder-webpack4": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/csf-tools": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/postinstall": "6.3.3", - "@storybook/source-loader": "6.3.3", - "@storybook/theming": "6.3.3", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "core-js": "^3.8.2", - "doctrine": "^3.0.0", - "escodegen": "^2.0.0", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "html-tags": "^3.1.0", - "js-string-escape": "^1.0.1", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "p-limit": "^3.1.0", - "prettier": "~2.2.1", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^14.3.2", - "regenerator-runtime": "^0.13.7", - "remark-external-links": "^8.0.0", - "remark-slug": "^6.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } - } - }, - "@storybook/addon-essentials": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addon-actions": "6.3.3", - "@storybook/addon-backgrounds": "6.3.3", - "@storybook/addon-controls": "6.3.3", - "@storybook/addon-docs": "6.3.3", - "@storybook/addon-measure": "^2.0.0", - "@storybook/addon-toolbars": "6.3.3", - "@storybook/addon-viewport": "6.3.3", - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/node-logger": "6.3.3", - "core-js": "^3.8.2", - "regenerator-runtime": "^0.13.7", - "storybook-addon-outline": "^1.4.1", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-links": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/router": "6.3.3", - "@types/qs": "^6.9.5", - "core-js": "^3.8.2", - "global": "^4.4.0", - "prop-types": "^15.7.2", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/addon-measure": { - "version": "2.0.0", - "dev": true, - "requires": {} - }, - "@storybook/addon-toolbars": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/addon-viewport": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "prop-types": "^15.7.2", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/addons": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/api": "6.3.3", - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/router": "6.3.3", - "@storybook/theming": "6.3.3", - "core-js": "^3.8.2", - "global": "^4.4.0", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/api": { - "version": "6.3.3", - "dev": true, - "requires": { - "@reach/router": "^1.3.4", - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/router": "6.3.3", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.3", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "store2": "^2.12.0", - "telejson": "^5.3.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - } - } - } - }, - "@storybook/builder-webpack4": { - "version": "6.3.3", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/channel-postmessage": "6.3.3", - "@storybook/channels": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-common": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/router": "6.3.3", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.3", - "@storybook/ui": "6.3.3", - "@types/node": "^14.0.10", - "@types/webpack": "^4.41.26", - "autoprefixer": "^9.8.6", - "babel-loader": "^8.2.2", - "babel-plugin-macros": "^2.8.0", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "dotenv-webpack": "^1.8.0", - "file-loader": "^6.2.0", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^4.1.6", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "glob-promise": "^3.4.0", - "global": "^4.4.0", - "html-webpack-plugin": "^4.0.0", - "pnp-webpack-plugin": "1.6.4", - "postcss": "^7.0.36", - "postcss-flexbugs-fixes": "^4.2.1", - "postcss-loader": "^4.2.0", - "raw-loader": "^4.0.2", - "react-dev-utils": "^11.0.3", - "stable": "^0.1.8", - "style-loader": "^1.3.0", - "terser-webpack-plugin": "^4.2.3", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-filter-warnings-plugin": "^1.2.1", - "webpack-hot-middleware": "^2.25.0", - "webpack-virtual-modules": "^0.2.2" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "dev": true, - "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" - } - }, - "@storybook/semver": { - "version": "7.3.2", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - } - } - }, - "@types/node": { - "version": "14.17.4", - "dev": true - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "dependencies": { - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - } - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "@storybook/channel-postmessage": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "core-js": "^3.8.2", - "global": "^4.4.0", - "qs": "^6.10.0", - "telejson": "^5.3.2" - } - }, - "@storybook/channels": { - "version": "6.3.3", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/client-api": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/channel-postmessage": "6.3.3", - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@types/qs": "^6.9.5", - "@types/webpack-env": "^1.16.0", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "stable": "^0.1.8", - "store2": "^2.12.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/client-logger": { - "version": "6.3.3", - "dev": true, - "requires": { - "core-js": "^3.8.2", - "global": "^4.4.0" - } - }, - "@storybook/components": { - "version": "6.3.3", - "dev": true, - "requires": { - "@popperjs/core": "^2.6.0", - "@storybook/client-logger": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/theming": "6.3.3", - "@types/color-convert": "^2.0.0", - "@types/overlayscrollbars": "^1.12.0", - "@types/react-syntax-highlighter": "11.0.5", - "color-convert": "^2.0.1", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^7.1.3", - "memoizerific": "^1.11.3", - "overlayscrollbars": "^1.13.1", - "polished": "^4.0.5", - "prop-types": "^15.7.2", - "react-colorful": "^5.1.2", - "react-popper-tooltip": "^3.1.1", - "react-syntax-highlighter": "^13.5.3", - "react-textarea-autosize": "^8.3.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "dependencies": { - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "@storybook/core": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/core-client": "6.3.3", - "@storybook/core-server": "6.3.3" - } - }, - "@storybook/core-client": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/channel-postmessage": "6.3.3", - "@storybook/client-api": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/csf": "0.0.1", - "@storybook/ui": "6.3.3", - "airbnb-js-shims": "^2.2.1", - "ansi-to-html": "^0.6.11", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "qs": "^6.10.0", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "unfetch": "^4.2.0", - "util-deprecate": "^1.0.2" - } - }, - "@storybook/core-common": { - "version": "6.3.3", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-decorators": "^7.12.12", - "@babel/plugin-proposal-export-default-from": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.12", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@babel/register": "^7.12.1", - "@storybook/node-logger": "6.3.3", - "@storybook/semver": "^7.3.2", - "@types/glob-base": "^0.3.0", - "@types/micromatch": "^4.0.1", - "@types/node": "^14.0.10", - "@types/pretty-hrtime": "^1.0.0", - "babel-loader": "^8.2.2", - "babel-plugin-macros": "^3.0.1", - "babel-plugin-polyfill-corejs3": "^0.1.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "express": "^4.17.1", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.0.4", - "glob": "^7.1.6", - "glob-base": "^0.3.0", - "interpret": "^2.2.0", - "json5": "^2.1.3", - "lazy-universal-dotenv": "^3.0.1", - "micromatch": "^4.0.2", - "pkg-dir": "^5.0.0", - "pretty-hrtime": "^1.0.3", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "4" - }, - "dependencies": { - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "dev": true, - "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" - } - }, - "@storybook/semver": { - "version": "7.3.2", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - } - } - }, - "@types/node": { - "version": "14.17.4", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.0", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "deepmerge": { - "version": "4.2.2", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "dependencies": { - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - } - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.2.12", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "schema-utils": { - "version": "2.7.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@storybook/core-events": { - "version": "6.3.3", - "dev": true, - "requires": { - "core-js": "^3.8.2" - } - }, - "@storybook/core-server": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/builder-webpack4": "6.3.3", - "@storybook/core-client": "6.3.3", - "@storybook/core-common": "6.3.3", - "@storybook/csf-tools": "6.3.3", - "@storybook/manager-webpack4": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/semver": "^7.3.2", - "@types/node": "^14.0.10", - "@types/node-fetch": "^2.5.7", - "@types/pretty-hrtime": "^1.0.0", - "@types/webpack": "^4.41.26", - "better-opn": "^2.1.1", - "boxen": "^4.2.0", - "chalk": "^4.1.0", - "cli-table3": "0.6.0", - "commander": "^6.2.1", - "compression": "^1.7.4", - "core-js": "^3.8.2", - "cpy": "^8.1.1", - "detect-port": "^1.3.0", - "express": "^4.17.1", - "file-system-cache": "^1.0.5", - "fs-extra": "^9.0.1", - "globby": "^11.0.2", - "ip": "^1.1.5", - "node-fetch": "^2.6.1", - "pretty-hrtime": "^1.0.3", - "prompts": "^2.4.0", - "regenerator-runtime": "^0.13.7", - "serve-favicon": "^2.5.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2", - "webpack": "4" - }, - "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - } - }, - "@types/node": { - "version": "14.17.4", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "commander": { - "version": "6.2.1", - "dev": true - }, - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "detect-port": { - "version": "1.3.0", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - } - }, - "globby": { - "version": "11.0.4", - "dev": true, - "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" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@storybook/csf": { - "version": "0.0.1", - "dev": true, - "requires": { - "lodash": "^4.17.15" - } - }, - "@storybook/csf-tools": { - "version": "6.3.3", - "dev": true, - "requires": { - "@babel/generator": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/plugin-transform-react-jsx": "^7.12.12", - "@babel/preset-env": "^7.12.11", - "@babel/traverse": "^7.12.11", - "@babel/types": "^7.12.11", - "@mdx-js/mdx": "^1.6.22", - "@storybook/csf": "^0.0.1", - "core-js": "^3.8.2", - "fs-extra": "^9.0.1", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.20", - "prettier": "~2.2.1", - "regenerator-runtime": "^0.13.7" - } - }, - "@storybook/manager-webpack4": { - "version": "6.3.3", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@storybook/addons": "6.3.3", - "@storybook/core-client": "6.3.3", - "@storybook/core-common": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/theming": "6.3.3", - "@storybook/ui": "6.3.3", - "@types/node": "^14.0.10", - "@types/webpack": "^4.41.26", - "babel-loader": "^8.2.2", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "css-loader": "^3.6.0", - "dotenv-webpack": "^1.8.0", - "express": "^4.17.1", - "file-loader": "^6.2.0", - "file-system-cache": "^1.0.5", - "find-up": "^5.0.0", - "fs-extra": "^9.0.1", - "html-webpack-plugin": "^4.0.0", - "node-fetch": "^2.6.1", - "pnp-webpack-plugin": "1.6.4", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "style-loader": "^1.3.0", - "telejson": "^5.3.2", - "terser-webpack-plugin": "^4.2.3", - "ts-dedent": "^2.0.0", - "url-loader": "^4.1.1", - "util-deprecate": "^1.0.2", - "webpack": "4", - "webpack-dev-middleware": "^3.7.3", - "webpack-virtual-modules": "^0.2.2" - }, - "dependencies": { - "@types/node": { - "version": "14.17.4", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@storybook/node-logger": { - "version": "6.3.3", - "dev": true, - "requires": { - "@types/npmlog": "^4.1.2", - "chalk": "^4.1.0", - "core-js": "^3.8.2", - "npmlog": "^4.1.2", - "pretty-hrtime": "^1.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@storybook/postinstall": { - "version": "6.3.3", - "dev": true, - "requires": { - "core-js": "^3.8.2" - } - }, - "@storybook/react": { - "version": "6.3.3", - "dev": true, - "requires": { - "@babel/preset-flow": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@pmmmwh/react-refresh-webpack-plugin": "^0.4.3", - "@storybook/addons": "6.3.3", - "@storybook/core": "6.3.3", - "@storybook/core-common": "6.3.3", - "@storybook/node-logger": "6.3.3", - "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.253f8c1.0", - "@storybook/semver": "^7.3.2", - "@types/webpack-env": "^1.16.0", - "babel-plugin-add-react-displayname": "^0.0.5", - "babel-plugin-named-asset-import": "^0.3.1", - "babel-plugin-react-docgen": "^4.2.1", - "core-js": "^3.8.2", - "global": "^4.4.0", - "lodash": "^4.17.20", - "prop-types": "^15.7.2", - "react-dev-utils": "^11.0.3", - "react-refresh": "^0.8.3", - "read-pkg-up": "^7.0.1", - "regenerator-runtime": "^0.13.7", - "ts-dedent": "^2.0.0", - "webpack": "4" - }, - "dependencies": { - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.4.3", - "dev": true, - "requires": { - "ansi-html": "^0.0.7", - "error-stack-parser": "^2.0.6", - "html-entities": "^1.2.1", - "native-url": "^0.2.6", - "schema-utils": "^2.6.5", - "source-map": "^0.7.3" - } - }, - "@storybook/semver": { - "version": "7.3.2", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - } - }, - "react-refresh": { - "version": "0.8.3", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "dev": true - }, - "type-fest": { - "version": "0.13.1", - "dev": true, - "optional": true, - "peer": true - } - } - }, - "@storybook/react-docgen-typescript-plugin": { - "version": "1.0.2-canary.253f8c1.0", - "dev": true, - "requires": { - "debug": "^4.1.1", - "endent": "^2.0.1", - "find-cache-dir": "^3.3.1", - "flat-cache": "^3.0.4", - "micromatch": "^4.0.2", - "react-docgen-typescript": "^2.0.0", - "tslib": "^2.0.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "@storybook/router": { - "version": "6.3.3", - "dev": true, - "requires": { - "@reach/router": "^1.3.4", - "@storybook/client-logger": "6.3.3", - "@types/reach__router": "^1.3.7", - "core-js": "^3.8.2", - "fast-deep-equal": "^3.1.3", - "global": "^4.4.0", - "lodash": "^4.17.20", - "memoizerific": "^1.11.3", - "qs": "^6.10.0", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/source-loader": { - "version": "6.3.3", - "dev": true, - "requires": { - "@storybook/addons": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/csf": "0.0.1", - "core-js": "^3.8.2", - "estraverse": "^5.2.0", - "global": "^4.4.0", - "loader-utils": "^2.0.0", - "lodash": "^4.17.20", - "prettier": "~2.2.1", - "regenerator-runtime": "^0.13.7" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "@storybook/theming": { - "version": "6.3.3", - "dev": true, - "requires": { - "@emotion/core": "^10.1.1", - "@emotion/is-prop-valid": "^0.8.6", - "@emotion/styled": "^10.0.27", - "@storybook/client-logger": "6.3.3", - "core-js": "^3.8.2", - "deep-object-diff": "^1.1.0", - "emotion-theming": "^10.0.27", - "global": "^4.4.0", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "resolve-from": "^5.0.0", - "ts-dedent": "^2.0.0" - } - }, - "@storybook/ui": { - "version": "6.3.3", - "dev": true, - "requires": { - "@emotion/core": "^10.1.1", - "@storybook/addons": "6.3.3", - "@storybook/api": "6.3.3", - "@storybook/channels": "6.3.3", - "@storybook/client-logger": "6.3.3", - "@storybook/components": "6.3.3", - "@storybook/core-events": "6.3.3", - "@storybook/router": "6.3.3", - "@storybook/semver": "^7.3.2", - "@storybook/theming": "6.3.3", - "@types/markdown-to-jsx": "^6.11.3", - "copy-to-clipboard": "^3.3.1", - "core-js": "^3.8.2", - "core-js-pure": "^3.8.2", - "downshift": "^6.0.15", - "emotion-theming": "^10.0.27", - "fuse.js": "^3.6.1", - "global": "^4.4.0", - "lodash": "^4.17.20", - "markdown-to-jsx": "^6.11.4", - "memoizerific": "^1.11.3", - "polished": "^4.0.5", - "qs": "^6.10.0", - "react-draggable": "^4.4.3", - "react-helmet-async": "^1.0.7", - "react-sizeme": "^3.0.1", - "regenerator-runtime": "^0.13.7", - "resolve-from": "^5.0.0", - "store2": "^2.12.0" - }, - "dependencies": { - "@storybook/semver": { - "version": "7.3.2", - "dev": true, - "requires": { - "core-js": "^3.6.5", - "find-up": "^4.1.0" - } - }, - "markdown-to-jsx": { - "version": "6.11.4", - "dev": true, - "requires": { - "prop-types": "^15.6.2", - "unquote": "^1.1.0" - } - } - } - }, - "@styled-system/background": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/border": { - "version": "5.1.5", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/color": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/core": { - "version": "5.1.2", - "requires": { - "object-assign": "^4.1.1" - } - }, - "@styled-system/css": { - "version": "5.1.5" - }, - "@styled-system/flexbox": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/grid": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/layout": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/position": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/shadow": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/space": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/typography": { - "version": "5.1.2", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/variant": { - "version": "5.1.5", - "requires": { - "@styled-system/core": "^5.1.2", - "@styled-system/css": "^5.1.5" - } - }, - "@tlon/indigo-dark": { - "version": "1.0.6" - }, - "@tlon/indigo-light": { - "version": "1.0.7" - }, - "@tlon/indigo-react": { - "version": "1.2.27", - "requires": { - "@reach/menu-button": "^0.10.5", - "tslib": "^2.0.1" - } - }, - "@tlon/sigil-js": { - "version": "1.4.3", - "requires": { - "invariant": "^2.2.4", - "svgson": "^4.0.0", - "transformation-matrix": "2.1.1" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.15", - "dev": 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.3", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.1", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/braces": { - "version": "3.0.1", - "dev": true - }, - "@types/color-convert": { - "version": "2.0.0", - "dev": true, - "requires": { - "@types/color-name": "*" - } - }, - "@types/color-name": { - "version": "1.1.1", - "dev": true - }, - "@types/glob": { - "version": "7.1.4", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/glob-base": { - "version": "0.3.0", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/hast": { - "version": "2.3.2", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.9", - "dev": true - }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "dev": true, - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/html-minifier-terser": { - "version": "5.1.2", - "dev": true - }, - "@types/is-function": { - "version": "1.0.0", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.8" - }, - "@types/lodash": { - "version": "4.14.171", - "dev": true - }, - "@types/markdown-to-jsx": { - "version": "6.11.3", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/mdast": { - "version": "3.0.4", - "dev": true, - "requires": { - "@types/unist": "*" - } - }, - "@types/micromatch": { - "version": "4.0.2", - "dev": true, - "requires": { - "@types/braces": "*" - } - }, - "@types/minimatch": { - "version": "3.0.5", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "dev": true - }, - "@types/node": { - "version": "16.0.0", - "dev": true - }, - "@types/node-fetch": { - "version": "2.5.11", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/normalize-package-data": { - "version": "2.4.0", - "dev": true - }, - "@types/npmlog": { - "version": "4.1.2", - "dev": true - }, - "@types/overlayscrollbars": { - "version": "1.12.0", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "dev": true - }, - "@types/parse5": { - "version": "5.0.3", - "dev": true - }, - "@types/prettier": { - "version": "2.3.1", - "dev": true - }, - "@types/pretty-hrtime": { - "version": "1.0.0", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.3", - "devOptional": true - }, - "@types/qs": { - "version": "6.9.6", - "dev": true - }, - "@types/reach__router": { - "version": "1.3.8", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react": { - "version": "16.14.10", - "devOptional": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "16.9.13", - "dev": true, - "requires": { - "@types/react": "^16" - } - }, - "@types/react-router": { - "version": "5.1.15", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*" - } - }, - "@types/react-router-dom": { - "version": "5.1.7", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-syntax-highlighter": { - "version": "11.0.5", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "devOptional": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/styled-components": { - "version": "5.1.11", - "dev": true, - "requires": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "@types/styled-system": { - "version": "5.1.12", - "dev": true, - "requires": { - "csstype": "^3.0.2" - } - }, - "@types/tapable": { - "version": "1.0.8", - "dev": true - }, - "@types/uglify-js": { - "version": "3.13.1", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/unist": { - "version": "2.0.5" - }, - "@types/warning": { - "version": "3.0.0" - }, - "@types/webpack": { - "version": "4.41.30", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-env": { - "version": "1.16.2", - "dev": true - }, - "@types/webpack-sources": { - "version": "2.1.1", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "dev": true - } - } - }, - "@types/yargs": { - "version": "15.0.14", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "dev": true - }, - "@types/yoga-layout": { - "version": "1.9.2", - "dev": true - }, - "@types/yup": { - "version": "0.29.12", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - } - }, - "@typescript-eslint/types": { - "version": "4.28.2", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "globby": { - "version": "11.0.4", - "dev": true, - "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" - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@urbit/api": { - "version": "file:../npm/api", - "requires": { - "@babel/core": "^7.16.0", - "@babel/runtime": "^7.16.0", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-node-resolve": "^13.0.6", - "@types/node": "^15.12.5", - "@typescript-eslint/eslint-plugin": "^4.28.2", - "@typescript-eslint/parser": "^4.28.2", - "@urbit/eslint-config": "^1.0.3", - "babel-eslint": "^10.1.0", - "big-integer": "^1.6.48", - "core-js": "^3.19.1", - "eslint-plugin-react": "^7.24.0", - "immer": "^9.0.1", - "rollup": "^2.59.0", - "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", - "typescript": "^4.3.2", - "urbit-ob": "^5.0.1" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "@babel/compat-data": { - "version": "7.16.0", - "dev": true - }, - "@babel/core": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "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": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/highlight": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.16.2", - "dev": true - }, - "@babel/runtime": { - "version": "7.16.0", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/traverse": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.7", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.0", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-commonjs": { - "version": "21.0.1", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "dependencies": { - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "@rollup/plugin-node-resolve": { - "version": "13.0.6", - "dev": true, - "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" - }, - "dependencies": { - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "dev": true - } - } - }, - "@types/estree": { - "version": "0.0.39", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.8", - "dev": true - }, - "@types/node": { - "version": "15.14.1", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - } - }, - "@typescript-eslint/types": { - "version": "4.28.2", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@urbit/eslint-config": { - "version": "file:../npm/eslint-config", - "requires": { - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.15.0", - "babel-eslint": "^10.1.0", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "typescript": "^4.1.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.14.3", - "dev": true, - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.3", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "0.4.1", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.4", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.6", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - } - }, - "@types/json-schema": { - "version": "7.0.7", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.24.0", - "@typescript-eslint/scope-manager": "4.24.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.24.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" - } - }, - "@typescript-eslint/types": { - "version": "4.24.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "acorn": { - "version": "7.4.1", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "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" - } - }, - "ansi-colors": { - "version": "4.1.1", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-includes": { - "version": "3.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "babel-eslint": { - "version": "10.1.0", - "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", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.1", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.3", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "enquirer": { - "version": "2.3.6", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es-abstract": { - "version": "1.18.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.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.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "eslint": { - "version": "7.26.0", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "globals": { - "version": "13.8.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.23.2", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fastq": { - "version": "1.11.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "glob": { - "version": "7.1.7", - "dev": true, - "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": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.0.3", - "dev": true, - "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" - } - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.2", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "dev": true - }, - "is-core-module": { - "version": "2.4.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "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.3", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "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" - } - }, - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picomatch": { - "version": "2.2.3", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "react-is": { - "version": "16.13.1", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.1.0", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.1", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.4.0", - "dev": true, - "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", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.8.1", - "dev": true - }, - "typescript": { - "version": "4.2.4", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "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" - } - }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-includes": { - "version": "3.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "babel-eslint": { - "version": "10.1.0", - "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", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "big-integer": { - "version": "1.6.48" - }, - "bn.js": { - "version": "4.12.0" - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.17.6", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caniuse-lite": { - "version": "1.0.30001278", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "commander": { - "version": "2.20.3", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-js": { - "version": "3.19.1" - }, - "debug": { - "version": "4.3.2", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deepmerge": { - "version": "4.2.2", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.3.889", - "dev": true - }, - "es-abstract": { - "version": "1.18.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.24.0", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.6", - "dev": true, - "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" - } - }, - "fastq": { - "version": "1.11.1", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "glob": { - "version": "7.2.0", - "dev": true, - "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": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.0.4", - "dev": true, - "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" - } - }, - "graceful-fs": { - "version": "4.2.8", - "dev": true - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "dev": true - }, - "immer": { - "version": "9.0.6" - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.2", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "dev": true - }, - "is-core-module": { - "version": "2.4.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "jest-worker": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.chunk": { - "version": "4.2.0" - }, - "lodash.isequal": { - "version": "4.5.0" - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.7", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "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.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "object.fromentries": { - "version": "2.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prop-types": { - "version": "15.7.2", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react-is": { - "version": "16.13.1", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.9" - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "resolve": { - "version": "2.0.0-next.3", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rollup": { - "version": "2.59.0", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-analyzer": { - "version": "4.0.0", - "dev": true - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - } - }, - "rollup-plugin-typescript2": { - "version": "0.30.0", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.1.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.1.1", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "tslib": { - "version": "2.1.0", - "dev": true - } - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "source-map-support": { - "version": "0.5.20", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "dev": true - }, - "string.prototype.matchall": { - "version": "4.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "terser": { - "version": "5.9.0", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "dev": true - } - } - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "typescript": { - "version": "4.3.5", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "urbit-ob": { - "version": "5.0.1", - "requires": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "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" - } - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "@urbit/eslint-config": { - "version": "file:../npm/eslint-config", - "requires": { - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.15.0", - "babel-eslint": "^10.1.0", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "typescript": "^4.1.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.14.3", - "dev": true, - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.3", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "0.4.1", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.4", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.6", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - } - }, - "@types/json-schema": { - "version": "7.0.7", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.24.0", - "@typescript-eslint/scope-manager": "4.24.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.24.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" - } - }, - "@typescript-eslint/types": { - "version": "4.24.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "acorn": { - "version": "7.4.1", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "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" - } - }, - "ansi-colors": { - "version": "4.1.1", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-includes": { - "version": "3.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "babel-eslint": { - "version": "10.1.0", - "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", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.1", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.3", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "enquirer": { - "version": "2.3.6", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es-abstract": { - "version": "1.18.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.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.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "eslint": { - "version": "7.26.0", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "globals": { - "version": "13.8.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.23.2", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fastq": { - "version": "1.11.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "glob": { - "version": "7.1.7", - "dev": true, - "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": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.0.3", - "dev": true, - "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" - } - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.2", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "dev": true - }, - "is-core-module": { - "version": "2.4.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "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.3", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "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" - } - }, - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picomatch": { - "version": "2.2.3", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "react-is": { - "version": "16.13.1", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.1.0", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.1", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.4.0", - "dev": true, - "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", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.8.1", - "dev": true - }, - "typescript": { - "version": "4.2.4", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "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" - } - }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "@urbit/http-api": { - "version": "file:../npm/http-api", - "requires": { - "@babel/core": "^7.15.8", - "@babel/preset-env": "^7.15.8", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.12.5", - "@microsoft/fetch-event-source": "^2.0.0", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-node-resolve": "^13.0.6", - "@types/browser-or-node": "^1.2.0", - "@types/eventsource": "^1.1.5", - "@types/jest": "^26.0.24", - "@types/react": "^16.9.56", - "@typescript-eslint/eslint-plugin": "^4.7.0", - "@typescript-eslint/parser": "^4.7.0", - "babel-jest": "^27.0.6", - "browser-or-node": "^1.3.0", - "core-js": "^3.19.1", - "cross-fetch": "^3.1.4", - "event-target-polyfill": "0.0.3", - "fast-text-encoding": "^1.0.3", - "jest": "^27.0.6", - "rollup": "^2.59.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", - "typescript": "^3.9.7", - "util": "^0.12.3", - "web-streams-polyfill": "^3.0.3", - "yet-another-abortcontroller-polyfill": "0.0.4" - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.1.2", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.0" - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.17.0", - "dev": true - }, - "@babel/core": { - "version": "7.17.5", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.3", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.17.3", - "dev": true, - "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "dev": true, - "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.17.0", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "dev": true, - "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" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.16.7", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.17.6", - "dev": true, - "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.17.3", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.7", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.16.8", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - } - }, - "@babel/helpers": { - "version": "7.17.2", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" - } - }, - "@babel/highlight": { - "version": "7.16.10", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.17.3", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "dev": true, - "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.8", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "dev": true, - "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.17.6", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@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", - "dev": true, - "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", - "dev": true, - "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", - "dev": true, - "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", - "dev": true, - "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", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "dev": true, - "requires": { - "@babel/compat-data": "^7.17.0", - "@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", - "dev": true, - "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", - "dev": true, - "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.11", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "dev": true, - "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", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.16.7", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.17.3", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "dev": true, - "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.8", - "dev": true, - "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", - "dev": true, - "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", - "dev": true, - "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.8", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.16.7", - "dev": true, - "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", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.16.8", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/preset-env": { - "version": "7.16.11", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.8", - "@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.8", - "@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.11", - "@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.8", - "@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.8", - "@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.8", - "@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.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "dev": true, - "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/preset-typescript": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" - } - }, - "@babel/runtime": { - "version": "7.14.6", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.17.3", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@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.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.17.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "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" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "dev": true - }, - "@jest/console": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.0.6", - "jest-util": "^27.0.6", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/console": "^27.0.6", - "@jest/reporters": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@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.0.6", - "jest-config": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-resolve-dependencies": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "jest-watcher": "^27.0.6", - "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "jest-mock": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/fake-timers": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "@sinonjs/fake-timers": "^7.0.2", - "@types/node": "*", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/globals": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/environment": "^27.0.6", - "@jest/types": "^27.0.6", - "expect": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/reporters": { - "version": "27.0.6", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "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.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "27.0.6", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/console": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/test-sequencer": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/test-result": "^27.0.6", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-runtime": "^27.0.6" - } - }, - "@jest/transform": { - "version": "27.0.6", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.0.6", - "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.0.6", - "jest-regex-util": "^27.0.6", - "jest-util": "^27.0.6", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.5", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.4", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@microsoft/fetch-event-source": { - "version": "2.0.1" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.7", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-commonjs": { - "version": "21.0.2", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "13.1.3", - "dev": true, - "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/pluginutils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "dev": true - }, - "estree-walker": { - "version": "1.0.1", - "dev": true - } - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "7.1.2", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.15", - "dev": 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.3", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/browser-or-node": { - "version": "1.3.0", - "dev": true - }, - "@types/estree": { - "version": "0.0.49", - "dev": true - }, - "@types/eventsource": { - "version": "1.1.6", - "dev": true - }, - "@types/graceful-fs": { - "version": "4.1.5", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jest": { - "version": "26.0.24", - "dev": true, - "requires": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "@types/json-schema": { - "version": "7.0.8", - "dev": true - }, - "@types/node": { - "version": "16.0.0", - "dev": true - }, - "@types/prettier": { - "version": "2.3.2", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.3", - "dev": true - }, - "@types/react": { - "version": "16.14.10", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/resolve": { - "version": "1.17.1", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "dev": true - }, - "@types/yargs": { - "version": "15.0.14", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.1", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - } - }, - "@typescript-eslint/types": { - "version": "4.28.2", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - } - }, - "abab": { - "version": "2.0.5", - "dev": true - }, - "acorn": { - "version": "8.4.1", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.4", - "dev": true - }, - "babel-jest": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.6", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "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": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.0.6", - "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.1", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "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.0.6", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.0.6", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-or-node": { - "version": "1.3.0" - }, - "browser-process-hrtime": { - "version": "1.0.0", - "dev": true - }, - "browserslist": { - "version": "4.20.0", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001313", - "electron-to-chromium": "^1.4.76", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001314", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "ci-info": { - "version": "3.2.0", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.1", - "dev": true - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "core-js": { - "version": "3.21.1" - }, - "core-js-compat": { - "version": "3.21.1", - "dev": true, - "requires": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "dev": true - } - } - }, - "cross-fetch": { - "version": "3.1.4", - "dev": true, - "requires": { - "node-fetch": "2.6.1" - } - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "cssom": { - "version": "0.4.4", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "dev": true - } - } - }, - "csstype": { - "version": "3.0.8", - "dev": true - }, - "data-urls": { - "version": "2.0.0", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.2", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.3.1", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "domexception": { - "version": "2.0.1", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "dev": true - } - } - }, - "electron-to-chromium": { - "version": "1.4.82", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "dev": true - }, - "es-abstract": { - "version": "1.18.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "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": { - "estraverse": { - "version": "5.2.0", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "dev": true, - "optional": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "event-target-polyfill": { - "version": "0.0.3", - "dev": true - }, - "exit": { - "version": "0.1.2", - "dev": true - }, - "expect": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-regex-util": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "5.2.0", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-get-type": { - "version": "27.0.6", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "fast-glob": { - "version": "3.2.6", - "dev": true, - "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" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fast-text-encoding": { - "version": "1.0.3", - "dev": true - }, - "fastq": { - "version": "1.11.1", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fb-watchman": { - "version": "2.0.1", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.1", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "foreach": { - "version": "2.0.5", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "glob": { - "version": "7.1.7", - "dev": true, - "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": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.0.4", - "dev": true, - "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" - } - }, - "graceful-fs": { - "version": "4.2.6", - "dev": true - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "5.1.8", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "is-arguments": { - "version": "1.1.0", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-bigint": { - "version": "1.0.2", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "dev": true - }, - "is-ci": { - "version": "3.0.0", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.4.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "is-generator-function": { - "version": "1.0.9", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.5", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "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", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.0.2", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/core": "^27.0.6", - "import-local": "^3.0.2", - "jest-cli": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "import-local": { - "version": "3.0.2", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "jest-cli": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/core": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "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", - "dev": true - } - } - }, - "jest-changed-files": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "execa": { - "version": "5.1.1", - "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" - } - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-circus": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/environment": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.0.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "27.0.6", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.6", - "@jest/types": "^27.0.6", - "babel-jest": "^27.0.6", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.0.6", - "jest-environment-jsdom": "^27.0.6", - "jest-environment-node": "^27.0.6", - "jest-get-type": "^27.0.6", - "jest-jasmine2": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-runner": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-get-type": { - "version": "27.0.6", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "26.6.2", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.0.6", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-get-type": { - "version": "27.0.6", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6", - "jsdom": "^16.6.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-node": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "jest-mock": "^27.0.6", - "jest-util": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-get-type": { - "version": "26.3.0", - "dev": true - }, - "jest-haste-map": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "@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.0.6", - "jest-serializer": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-jasmine2": { - "version": "27.0.6", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.6", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.0.6", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "pretty-format": "^27.0.6", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "27.0.6", - "dev": true, - "requires": { - "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "5.2.0", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-get-type": { - "version": "27.0.6", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-matcher-utils": { - "version": "27.0.6", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "diff-sequences": { - "version": "27.0.6", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-diff": { - "version": "27.0.6", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" - } - }, - "jest-get-type": { - "version": "27.0.6", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.0.6", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.6", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.6", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "@types/node": "*" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.0.6", - "dev": true - }, - "jest-resolve": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "resolve": "^1.20.0", - "slash": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-snapshot": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runner": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/console": "^27.0.6", - "@jest/environment": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.6", - "jest-environment-jsdom": "^27.0.6", - "jest-environment-node": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-leak-detector": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-runtime": "^27.0.6", - "jest-util": "^27.0.6", - "jest-worker": "^27.0.6", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/console": "^27.0.6", - "@jest/environment": "^27.0.6", - "@jest/fake-timers": "^27.0.6", - "@jest/globals": "^27.0.6", - "@jest/source-map": "^27.0.6", - "@jest/test-result": "^27.0.6", - "@jest/transform": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-mock": "^27.0.6", - "jest-regex-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-snapshot": "^27.0.6", - "jest-util": "^27.0.6", - "jest-validate": "^27.0.6", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.0.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "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", - "dev": true - } - } - }, - "jest-serializer": { - "version": "27.0.6", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.0.6", - "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.0.6", - "@jest/types": "^27.0.6", - "@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.0.6", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.6", - "jest-get-type": "^27.0.6", - "jest-haste-map": "^27.0.6", - "jest-matcher-utils": "^27.0.6", - "jest-message-util": "^27.0.6", - "jest-resolve": "^27.0.6", - "jest-util": "^27.0.6", - "natural-compare": "^1.4.0", - "pretty-format": "^27.0.6", - "semver": "^7.3.2" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "diff-sequences": { - "version": "27.0.6", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-diff": { - "version": "27.0.6", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.6", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.0.6" - } - }, - "jest-get-type": { - "version": "27.0.6", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "picomatch": "^2.2.3" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.6", - "leven": "^3.1.0", - "pretty-format": "^27.0.6" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.0", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-get-type": { - "version": "27.0.6", - "dev": true - }, - "pretty-format": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/types": "^27.0.6", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "27.0.6", - "dev": true, - "requires": { - "@jest/test-result": "^27.0.6", - "@jest/types": "^27.0.6", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.0.6", - "string-length": "^4.0.1" - }, - "dependencies": { - "@jest/types": { - "version": "27.0.6", - "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" - } - }, - "@types/yargs": { - "version": "16.0.4", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "27.0.6", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.6.0", - "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.5", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "ws": { - "version": "7.5.3", - "dev": true, - "requires": {} - } - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "kleur": { - "version": "3.0.3", - "dev": true - }, - "leven": { - "version": "3.1.0", - "dev": true - }, - "levn": { - "version": "0.3.0", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.9", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "makeerror": { - "version": "1.0.11", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.48.0", - "dev": true - }, - "mime-types": { - "version": "2.1.31", - "dev": true, - "requires": { - "mime-db": "1.48.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "node-fetch": { - "version": "2.6.1", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "dev": true - }, - "node-releases": { - "version": "2.0.2", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "dev": true - }, - "nwsapi": { - "version": "2.2.0", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "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" - } - }, - "p-each-series": { - "version": "2.2.0", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "dev": true - }, - "pirates": { - "version": "4.0.1", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "dev": true - }, - "pretty-format": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "prompts": { - "version": "2.4.1", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react-is": { - "version": "17.0.2", - "dev": true - }, - "regenerate": { - "version": "1.4.2", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.0.1", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.7" - }, - "regenerator-transform": { - "version": "0.14.5", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "regexpu-core": { - "version": "5.0.1", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.6.0", - "dev": true - }, - "regjsparser": { - "version": "0.8.4", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rollup": { - "version": "2.70.0", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "rollup-plugin-typescript2": { - "version": "0.30.0", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.1.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.0", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "tslib": { - "version": "2.1.0", - "dev": true - } - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "6.3.0", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "dev": true - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } - } - }, - "string-length": { - "version": "4.0.2", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-bom": { - "version": "4.0.0", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.7.1", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "dev": true - } - } - }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "throat": { - "version": "6.0.1", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "4.0.0", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "dev": true - } - } - }, - "type-check": { - "version": "0.3.2", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.9.10", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "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", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "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", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "util": { - "version": "0.12.4", - "dev": true, - "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" - } - }, - "v8-to-istanbul": { - "version": "8.0.0", - "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", - "dev": true - } - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "web-streams-polyfill": { - "version": "3.0.3", - "dev": true - }, - "webidl-conversions": { - "version": "6.1.0", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "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.4", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } - }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - }, - "yet-another-abortcontroller-polyfill": { - "version": "0.0.4", - "dev": true - } - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0" - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0" - }, - "@xtuc/long": { - "version": "4.2.2" - }, - "abab": { - "version": "2.0.5", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.1", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "acorn-jsx": { - "version": "5.3.1", - "dev": true, - "requires": {} - }, - "acorn-walk": { - "version": "7.2.0", - "dev": true - }, - "address": { - "version": "1.1.2", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "dev": true, - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "airbnb-js-shims": { - "version": "2.2.1", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "array.prototype.flatmap": "^1.2.1", - "es5-shim": "^4.5.13", - "es6-shim": "^0.35.5", - "function.prototype.name": "^1.1.0", - "globalthis": "^1.0.0", - "object.entries": "^1.1.0", - "object.fromentries": "^2.0.0 || ^1.0.0", - "object.getownpropertydescriptors": "^2.0.3", - "object.values": "^1.1.0", - "promise.allsettled": "^1.0.0", - "promise.prototype.finally": "^3.1.0", - "string.prototype.matchall": "^4.0.0 || ^3.0.1", - "string.prototype.padend": "^3.0.0", - "string.prototype.padstart": "^3.0.0", - "symbol.prototype.description": "^1.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "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-errors": { - "version": "1.0.1", - "requires": {} - }, - "ajv-keywords": { - "version": "3.5.2", - "requires": {} - }, - "ansi-align": { - "version": "3.0.0", - "dev": true, - "requires": { - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ansi-colors": { - "version": "3.2.4", - "dev": true - }, - "ansi-escapes": { - "version": "3.2.0", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "dev": true - }, - "ansi-html-community": { - "version": "0.0.8", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansi-to-html": { - "version": "0.6.15", - "dev": true, - "requires": { - "entities": "^2.0.0" - } - }, - "any-ascii": { - "version": "0.1.7" - }, - "any-observable": { - "version": "0.3.0", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "devOptional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "app-root-dir": { - "version": "1.0.2", - "dev": true - }, - "aproba": { - "version": "1.2.0" - }, - "are-we-there-yet": { - "version": "1.1.5", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-hidden": { - "version": "1.1.3", - "requires": { - "tslib": "^1.0.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "arr-diff": { - "version": "4.0.0" - }, - "arr-flatten": { - "version": "1.1.0" - }, - "arr-union": { - "version": "3.1.0" - }, - "array-flatten": { - "version": "1.1.1", - "dev": true - }, - "array-includes": { - "version": "3.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-parallel": { - "version": "0.1.3", - "dev": true - }, - "array-series": { - "version": "0.1.5", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "dev": true - }, - "array-unique": { - "version": "0.3.2" - }, - "array.prototype.flat": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "array.prototype.map": { - "version": "1.0.3", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.5" - } - }, - "arrify": { - "version": "2.0.1", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert": { - "version": "1.5.0", - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1" - }, - "util": { - "version": "0.10.3", - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0" - }, - "ast-types": { - "version": "0.14.2", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "async": { - "version": "3.2.0", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "devOptional": true - }, - "async-limiter": { - "version": "1.0.1", - "dev": true - }, - "async-retry": { - "version": "1.3.1", - "dev": true, - "requires": { - "retry": "0.12.0" - } - }, - "asynckit": { - "version": "0.4.0", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "dev": true - }, - "atob": { - "version": "2.1.2" - }, - "auto-bind": { - "version": "4.0.0", - "dev": true - }, - "autoprefixer": { - "version": "9.8.6", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "aws-sdk": { - "version": "2.940.0", - "requires": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.15.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "uuid": "3.3.2", - "xml2js": "0.4.19" - }, - "dependencies": { - "querystring": { - "version": "0.2.0" - } - } - }, - "aws-sign2": { - "version": "0.7.0", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "dev": true - }, - "axios": { - "version": "0.21.1", - "dev": true, - "requires": { - "follow-redirects": "^1.10.0" - } - }, - "babel-eslint": { - "version": "10.1.0", - "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", - "dev": true - } - } - }, - "babel-jest": { - "version": "26.6.3", - "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.2.2", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "babel-plugin-add-react-displayname": { - "version": "0.0.5", - "dev": true - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "dev": true - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-emotion": { - "version": "10.2.2", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/hash": "0.8.0", - "@emotion/memoize": "0.7.4", - "@emotion/serialize": "^0.11.16", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^1.0.5", - "find-root": "^1.1.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "dev": true - } - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "dev": true - } - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "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": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "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-lodash": { - "version": "3.3.4", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0-beta.49", - "@babel/types": "^7.0.0-beta.49", - "glob": "^7.1.1", - "lodash": "^4.17.10", - "require-package-name": "^2.0.1" - } - }, - "babel-plugin-macros": { - "version": "2.8.0", - "dev": true, - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.7", - "dev": true, - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2" - } - }, - "babel-plugin-react-docgen": { - "version": "4.2.1", - "dev": true, - "requires": { - "ast-types": "^0.14.2", - "lodash": "^4.17.15", - "react-docgen": "^5.0.0" - } - }, - "babel-plugin-root-import": { - "version": "6.6.0", - "dev": true, - "requires": { - "slash": "^3.0.0" - } - }, - "babel-plugin-styled-components": { - "version": "1.13.1", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0" - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "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": "26.6.2", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "bail": { - "version": "1.0.5" - }, - "balanced-match": { - "version": "1.0.2" - }, - "base": { - "version": "0.11.2", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3" - } - } - }, - "base64-js": { - "version": "1.5.1" - }, - "batch": { - "version": "0.6.1", - "dev": true - }, - "batch-processor": { - "version": "1.0.0", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "before-after-hook": { - "version": "2.2.2", - "dev": true - }, - "better-opn": { - "version": "2.1.1", - "dev": true, - "requires": { - "open": "^7.0.3" - } - }, - "big-integer": { - "version": "1.6.48" - }, - "big.js": { - "version": "5.2.2" - }, - "binary-extensions": { - "version": "2.2.0", - "devOptional": true - }, - "bindings": { - "version": "1.5.0", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2" - }, - "bn.js": { - "version": "4.12.0" - }, - "body-parser": { - "version": "1.19.0", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "qs": { - "version": "6.7.0", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "dev": true - } - } - }, - "boolbase": { - "version": "1.0.0", - "dev": true - }, - "boxen": { - "version": "4.2.0", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "dev": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "devOptional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0" - }, - "browser-process-hrtime": { - "version": "1.0.0", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "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", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "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", - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.2.0" - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "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": { - "bn.js": { - "version": "5.2.0" - }, - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.16.6", - "dev": true, - "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" - } - }, - "bser": { - "version": "2.1.1", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1" - }, - "buffer-indexof": { - "version": "1.1.1", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3" - }, - "builtin-status-codes": { - "version": "3.0.0" - }, - "bytes": { - "version": "3.1.0", - "dev": true - }, - "c8": { - "version": "7.7.3", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.2", - "find-up": "^5.0.0", - "foreground-child": "^2.0.0", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-reports": "^3.0.2", - "rimraf": "^3.0.0", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^8.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.7" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "cacache": { - "version": "12.0.4", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1" - } - } - }, - "cache-base": { - "version": "1.0.1", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "has-value": { - "version": "1.0.0", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "unset-value": { - "version": "1.0.0", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4" - } - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "5.3.1" - }, - "camelcase-css": { - "version": "2.0.1", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, - "camelize": { - "version": "1.0.0" - }, - "caniuse-lite": { - "version": "1.0.30001243", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "dev": true - }, - "ccount": { - "version": "1.1.0" - }, - "chalk": { - "version": "2.4.2", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "char-regex": { - "version": "1.0.2", - "dev": true - }, - "character-entities": { - "version": "1.2.4" - }, - "character-entities-html4": { - "version": "1.1.4" - }, - "character-entities-legacy": { - "version": "1.1.4" - }, - "character-reference-invalid": { - "version": "1.1.4" - }, - "chokidar": { - "version": "3.5.2", - "devOptional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4" - }, - "chromatic": { - "version": "5.9.2", - "dev": true, - "requires": { - "@actions/core": "^1.2.4", - "@actions/github": "^4.0.0", - "@babel/runtime": "^7.12.13", - "@chromaui/localtunnel": "^2.0.2", - "async-retry": "^1.3.1", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.1", - "dotenv": "^8.2.0", - "env-ci": "^5.0.2", - "esm": "^3.2.25", - "execa": "^5.0.0", - "fake-tag": "^2.0.0", - "fs-extra": "^9.1.0", - "https-proxy-agent": "^5.0.0", - "jsonfile": "^6.0.1", - "junit-report-builder": "2.1.0", - "listr": "0.14.3", - "meow": "^8.0.0", - "node-ask": "^1.0.1", - "node-fetch": "^2.6.0", - "node-loggly-bulk": "^2.2.4", - "p-limit": "3.1.0", - "picomatch": "2.2.2", - "pkg-up": "^3.1.0", - "pluralize": "^8.0.0", - "progress-stream": "^2.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "string-argv": "^0.3.1", - "strip-ansi": "6.0.0", - "tmp-promise": "3.0.2", - "tree-kill": "^1.2.2", - "ts-dedent": "^1.0.0", - "util-deprecate": "^1.0.2", - "uuid": "^8.3.2", - "yarn-or-npm": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "5.1.1", - "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" - } - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "dev": true - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "ts-dedent": { - "version": "1.2.0", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "chrome-launcher": { - "version": "0.13.4", - "dev": true, - "requires": { - "@types/node": "*", - "escape-string-regexp": "^1.0.5", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^0.5.3", - "rimraf": "^3.0.2" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "chrome-remote-interface": { - "version": "0.29.0", - "dev": true, - "requires": { - "commander": "2.11.x", - "ws": "^7.2.0" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "dev": true - } - } - }, - "chrome-trace-event": { - "version": "1.0.3" - }, - "ci-info": { - "version": "2.0.0", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "0.6.0", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "classnames": { - "version": "2.3.1" - }, - "clean-css": { - "version": "4.2.3", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "dev": true - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - } - }, - "cli-boxes": { - "version": "2.2.1", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-table3": { - "version": "0.6.0", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "cli-truncate": { - "version": "0.2.1", - "dev": true, - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - } - }, - "cliui": { - "version": "7.0.4", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2" - }, - "clone-deep": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "dev": true - } - } - }, - "co": { - "version": "4.6.0", - "dev": true - }, - "code-excerpt": { - "version": "3.0.0", - "dev": true, - "requires": { - "convert-to-spaces": "^1.0.1" - } - }, - "code-point-at": { - "version": "1.1.0", - "dev": true - }, - "codemirror": { - "version": "5.62.0" - }, - "collapse-white-space": { - "version": "1.0.6" - }, - "collect-v8-coverage": { - "version": "1.0.1", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "requires": { - "color-name": "1.1.3" - } - }, - "color-diff": { - "version": "1.2.0", - "dev": true - }, - "color-name": { - "version": "1.1.3" - }, - "colorette": { - "version": "1.2.2", - "dev": true - }, - "colors": { - "version": "1.4.0", - "dev": true, - "optional": true - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "comma-separated-tokens": { - "version": "1.0.8", - "dev": true - }, - "commander": { - "version": "2.20.3" - }, - "common-path-prefix": { - "version": "3.0.0", - "dev": true - }, - "commondir": { - "version": "1.0.1" - }, - "component-emitter": { - "version": "1.3.0" - }, - "compressible": { - "version": "2.0.18", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "dev": true - }, - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "compute-scroll-into-view": { - "version": "1.0.17", - "dev": true - }, - "concat-map": { - "version": "0.0.1" - }, - "concat-stream": { - "version": "1.6.2", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "dev": true - }, - "console-browserify": { - "version": "1.2.0" - }, - "console-control-strings": { - "version": "1.1.0", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0" - }, - "content-disposition": { - "version": "0.5.3", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "convert-to-spaces": { - "version": "1.0.2", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1" - }, - "copy-to-clipboard": { - "version": "3.3.1", - "dev": true, - "requires": { - "toggle-selection": "^1.0.6" - } - }, - "core-js": { - "version": "3.20.2", - "dev": true - }, - "core-js-compat": { - "version": "3.15.2", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.15.2", - "dev": true - }, - "core-util-is": { - "version": "1.0.2" - }, - "cosmiconfig": { - "version": "6.0.0", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "cp-file": { - "version": "7.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" - }, - "dependencies": { - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - } - } - }, - "cpy": { - "version": "8.1.2", - "dev": true, - "requires": { - "arrify": "^2.0.1", - "cp-file": "^7.0.0", - "globby": "^9.2.0", - "has-glob": "^1.0.0", - "junk": "^3.1.0", - "nested-error-stacks": "^2.1.0", - "p-all": "^2.1.0", - "p-filter": "^2.1.0", - "p-map": "^3.0.0" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "1.1.3", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "braces": { - "version": "2.3.2", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "dir-glob": { - "version": "2.2.2", - "dev": true, - "requires": { - "path-type": "^3.0.0" - } - }, - "fast-glob": { - "version": "2.2.7", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "globby": { - "version": "9.2.0", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^1.0.2", - "dir-glob": "^2.2.2", - "fast-glob": "^2.2.6", - "glob": "^7.1.3", - "ignore": "^4.0.3", - "pify": "^4.0.1", - "slash": "^2.0.0" - } - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "p-map": { - "version": "3.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "path-type": { - "version": "3.0.0", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "dev": true - } - } - }, - "slash": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.4", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "create-hash": { - "version": "1.2.0", - "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", - "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" - } - }, - "create-react-context": { - "version": "0.3.0", - "dev": true, - "requires": { - "gud": "^1.0.0", - "warning": "^4.0.3" - } - }, - "cross-env": { - "version": "7.0.3", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "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", - "dev": true - }, - "css-color-keywords": { - "version": "1.0.0" - }, - "css-loader": { - "version": "3.6.0", - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - } - }, - "css-select": { - "version": "4.1.3", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "dependencies": { - "domhandler": { - "version": "4.2.0", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "css-to-react-native": { - "version": "3.0.0", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "css-what": { - "version": "5.0.1", - "dev": true - }, - "cssesc": { - "version": "3.0.0" - }, - "cssom": { - "version": "0.4.4", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "dev": true - } - } - }, - "csstype": { - "version": "3.0.8", - "devOptional": true - }, - "cyclist": { - "version": "1.0.1" - }, - "dashdash": { - "version": "1.14.1", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "2.0.0", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "date-fns": { - "version": "1.30.1", - "dev": true - }, - "date-format": { - "version": "0.0.2", - "dev": true - }, - "debug": { - "version": "4.3.2", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "dev": true - } - } - }, - "decimal.js": { - "version": "10.3.1", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0" - }, - "dedent": { - "version": "0.7.0", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.3", - "dev": true - }, - "deep-object-diff": { - "version": "1.1.0", - "dev": true - }, - "deep-rename-keys": { - "version": "0.2.1", - "requires": { - "kind-of": "^3.0.2", - "rename-keys": "^1.1.2" - } - }, - "deepmerge": { - "version": "2.2.1" - }, - "default-gateway": { - "version": "4.2.0", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3" - } - } - }, - "del": { - "version": "4.1.1", - "dev": true, - "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", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "dev": true, - "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", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "dev": true - }, - "depd": { - "version": "1.1.2", - "dev": true - }, - "deprecation": { - "version": "2.3.1", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "dev": true - }, - "detab": { - "version": "2.0.4", - "dev": true, - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-file": { - "version": "1.0.0", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "dev": true - }, - "detect-node-es": { - "version": "1.1.0" - }, - "detect-port-alt": { - "version": "1.1.6", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "diff-sequences": { - "version": "26.6.2", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "1.3.2", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "domhandler": { - "version": "4.2.0", - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dom-walk": { - "version": "0.1.2", - "dev": true - }, - "domain-browser": { - "version": "1.2.0" - }, - "domelementtype": { - "version": "2.2.0" - }, - "domexception": { - "version": "2.0.1", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "dev": true - } - } - }, - "domhandler": { - "version": "3.3.0", - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.7.0", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "dependencies": { - "domhandler": { - "version": "4.2.0", - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dot-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "8.6.0", - "dev": true - }, - "dotenv-defaults": { - "version": "1.1.1", - "dev": true, - "requires": { - "dotenv": "^6.2.0" - }, - "dependencies": { - "dotenv": { - "version": "6.2.0", - "dev": true - } - } - }, - "dotenv-expand": { - "version": "5.1.0", - "dev": true - }, - "dotenv-webpack": { - "version": "1.8.0", - "dev": true, - "requires": { - "dotenv-defaults": "^1.0.2" - } - }, - "downshift": { - "version": "6.1.3", - "dev": true, - "requires": { - "@babel/runtime": "^7.13.10", - "compute-scroll-into-view": "^1.0.17", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "dependencies": { - "react-is": { - "version": "17.0.2", - "dev": true - } - } - }, - "duplexer": { - "version": "0.1.2", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.769", - "dev": true - }, - "elegant-spinner": { - "version": "1.0.1", - "dev": true - }, - "element-resize-detector": { - "version": "1.2.3", - "dev": true, - "requires": { - "batch-processor": "1.0.0" - } - }, - "elliptic": { - "version": "6.5.4", - "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" - } - }, - "emittery": { - "version": "0.7.2", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "dev": true - }, - "emojis-list": { - "version": "3.0.0" - }, - "emotion-theming": { - "version": "10.0.27", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "@emotion/weak-memoize": "0.2.5", - "hoist-non-react-statics": "^3.3.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "requires": { - "once": "^1.4.0" - } - }, - "endent": { - "version": "2.1.0", - "dev": true, - "requires": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.5" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "enquirer": { - "version": "2.3.6", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "dev": true - } - } - }, - "entities": { - "version": "2.2.0" - }, - "env-ci": { - "version": "5.0.2", - "dev": true, - "requires": { - "execa": "^4.0.0", - "java-properties": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "4.1.0", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "errno": { - "version": "0.1.8", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.0.6", - "requires": { - "stackframe": "^1.1.1" - } - }, - "es-abstract": { - "version": "1.18.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "isarray": { - "version": "2.0.5", - "dev": true - } - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-shim": { - "version": "4.5.15", - "dev": true - }, - "es6-shim": { - "version": "0.35.6", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5" - }, - "escodegen": { - "version": "2.0.0", - "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": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "eslint": { - "version": "7.30.0", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "globals": { - "version": "13.10.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "optionator": { - "version": "0.9.1", - "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" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.24.0", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "esm": { - "version": "3.2.25", - "dev": true - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0" - } - } - }, - "estraverse": { - "version": "4.3.0" - }, - "estree-to-babel": { - "version": "3.2.1", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.6", - "@babel/types": "^7.2.0", - "c8": "^7.6.0" - } - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1", - "dev": true - }, - "eventemitter3": { - "version": "2.0.3" - }, - "events": { - "version": "1.1.1" - }, - "eventsource": { - "version": "1.1.0", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.6", - "dev": true - }, - "execa": { - "version": "1.0.0", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0" - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "expect": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "express": { - "version": "4.17.1", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "dev": true - }, - "qs": { - "version": "6.7.0", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2" - }, - "extend-shallow": { - "version": "3.0.2", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3" - } - } - }, - "extsprintf": { - "version": "1.3.0", - "dev": true - }, - "fake-tag": { - "version": "2.0.0", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3" - }, - "fast-glob": { - "version": "3.2.6", - "dev": true, - "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" - } - }, - "fast-json-parse": { - "version": "1.0.3", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0" - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fastq": { - "version": "1.11.1", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fault": { - "version": "1.0.4", - "dev": true, - "requires": { - "format": "^0.2.0" - } - }, - "faye-websocket": { - "version": "0.11.4", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.1", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "figgy-pudding": { - "version": "3.5.2" - }, - "figures": { - "version": "1.7.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "file-saver": { - "version": "2.0.5" - }, - "file-system-cache": { - "version": "1.0.5", - "dev": true, - "requires": { - "bluebird": "^3.3.5", - "fs-extra": "^0.30.0", - "ramda": "^0.21.0" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "ramda": { - "version": "0.21.0", - "dev": true - } - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "optional": true - }, - "filesize": { - "version": "6.1.0", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "devOptional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0" - }, - "pkg-dir": { - "version": "3.0.0", - "requires": { - "find-up": "^3.0.0" - } - } - } - }, - "find-root": { - "version": "1.1.0", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.2.0", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "fn-name": { - "version": "3.0.0" - }, - "follow-redirects": { - "version": "1.14.1", - "dev": true - }, - "for-in": { - "version": "1.0.2" - }, - "foreground-child": { - "version": "2.0.0", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "forever-agent": { - "version": "0.6.1", - "dev": true - }, - "fork-ts-checker-webpack-plugin": { - "version": "4.1.6", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "chalk": "^2.4.1", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "semver": { - "version": "5.7.1", - "dev": true - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "form-data": { - "version": "3.0.1", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "format": { - "version": "0.2.2", - "dev": true - }, - "formik": { - "version": "2.2.9", - "requires": { - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "forwarded": { - "version": "0.2.0", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "dev": true - }, - "from2": { - "version": "2.3.0", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "9.1.0", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "dependencies": { - "jsonfile": { - "version": "6.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - } - } - }, - "fs-minipass": { - "version": "2.1.0", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0" - }, - "fsevents": { - "version": "2.3.2", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "functions-have-names": { - "version": "1.2.2", - "dev": true - }, - "fuse.js": { - "version": "3.6.1", - "dev": true - }, - "fuzzy": { - "version": "0.1.3" - }, - "gauge": { - "version": "2.7.4", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-nonce": { - "version": "1.0.1" - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, - "get-port": { - "version": "5.1.1", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6" - }, - "getpass": { - "version": "0.1.7", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "github-slugger": { - "version": "1.3.0", - "dev": true, - "requires": { - "emoji-regex": ">=6.0.0 <=6.1.1" - }, - "dependencies": { - "emoji-regex": { - "version": "6.1.1", - "dev": true - } - } - }, - "glob": { - "version": "7.1.7", - "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-base": { - "version": "0.3.0", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, - "glob-parent": { - "version": "5.1.2", - "devOptional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-promise": { - "version": "3.4.0", - "dev": true, - "requires": { - "@types/glob": "*" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "dev": true - }, - "global": { - "version": "4.4.0", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-modules": { - "version": "2.0.0", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "dev": true - } - } - }, - "globals": { - "version": "11.12.0" - }, - "globalthis": { - "version": "1.0.2", - "dev": true, - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.0.1", - "dev": true, - "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" - } - }, - "gm": { - "version": "1.23.1", - "dev": true, - "requires": { - "array-parallel": "~0.1.3", - "array-series": "~0.1.5", - "cross-spawn": "^4.0.0", - "debug": "^3.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "4.0.2", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "lru-cache": { - "version": "4.1.5", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.6" - }, - "growly": { - "version": "1.3.0", - "dev": true, - "optional": true - }, - "gud": { - "version": "1.0.0", - "dev": true - }, - "gzip-size": { - "version": "5.1.1", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - } - }, - "handle-thing": { - "version": "2.0.1", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "hard-rejection": { - "version": "2.1.0", - "dev": true - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "3.0.0" - }, - "has-glob": { - "version": "1.0.0", - "dev": true, - "requires": { - "is-glob": "^3.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "dev": true - }, - "has-value": { - "version": "0.3.1", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4" - }, - "hash-base": { - "version": "3.1.0", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1" - } - } - }, - "hash.js": { - "version": "1.1.7", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hast-to-hyperscript": { - "version": "9.0.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "dev": true - } - } - }, - "hast-util-from-parse5": { - "version": "6.0.1", - "dev": true, - "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "dev": true - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.2" - } - }, - "vfile": { - "version": "4.2.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0", - "dev": true - }, - "vfile-message": { - "version": "2.0.4", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "dev": true - }, - "hast-util-raw": { - "version": "6.0.1", - "dev": true, - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5", - "dev": true - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.2" - } - }, - "vfile": { - "version": "4.2.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-message": { - "version": "2.0.4", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "dev": true, - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hastscript": { - "version": "6.0.0", - "dev": true, - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "dev": true - }, - "highlight.js": { - "version": "10.7.3", - "dev": true - }, - "history": { - "version": "4.10.1", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "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", - "requires": { - "react-is": "^16.7.0" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "1.4.0", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "dev": true - }, - "html-minifier-terser": { - "version": "5.1.1", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "dev": true - } - } - }, - "html-tags": { - "version": "3.1.0", - "dev": true - }, - "html-to-react": { - "version": "1.4.5", - "requires": { - "domhandler": "^3.3.0", - "htmlparser2": "^5.0", - "lodash.camelcase": "^4.3.0", - "ramda": "^0.27.1" - } - }, - "html-void-elements": { - "version": "1.0.5", - "dev": true - }, - "html-webpack-plugin": { - "version": "4.5.2", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - } - }, - "htmlparser2": { - "version": "5.0.1", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.3.0", - "domutils": "^2.4.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "dev": true - } - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0" - }, - "https-proxy-agent": { - "version": "5.0.0", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "1.1.1", - "dev": true - }, - "husky": { - "version": "6.0.0", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "requires": { - "postcss": "^7.0.14" - } - }, - "ieee754": { - "version": "1.1.13" - }, - "iferr": { - "version": "0.1.5" - }, - "ignore": { - "version": "5.1.8", - "dev": true - }, - "immer": { - "version": "9.0.5" - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "dev": true - } - } - }, - "import-jsx": { - "version": "4.0.0", - "dev": true, - "requires": { - "@babel/core": "^7.5.5", - "@babel/plugin-proposal-object-rest-spread": "^7.5.5", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-react-jsx": "^7.3.0", - "caller-path": "^2.0.0", - "find-cache-dir": "^3.2.0", - "make-dir": "^3.0.2", - "resolve-from": "^3.0.0", - "rimraf": "^3.0.0" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "import-local": { - "version": "3.0.2", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "imurmurhash": { - "version": "0.1.4" - }, - "indent-string": { - "version": "4.0.0", - "dev": true - }, - "infer-owner": { - "version": "1.0.4" - }, - "inflight": { - "version": "1.0.6", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4" - }, - "ini": { - "version": "1.3.8", - "dev": true - }, - "ink": { - "version": "3.0.8", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "auto-bind": "4.0.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.0", - "cli-cursor": "^3.1.0", - "cli-truncate": "^2.1.0", - "code-excerpt": "^3.0.0", - "indent-string": "^4.0.0", - "is-ci": "^2.0.0", - "lodash": "^4.17.20", - "patch-console": "^1.0.0", - "react-devtools-core": "^4.6.0", - "react-reconciler": "^0.24.0", - "scheduler": "^0.18.0", - "signal-exit": "^3.0.2", - "slice-ansi": "^3.0.0", - "stack-utils": "^2.0.2", - "string-length": "^3.1.0", - "type-fest": "^0.12.0", - "widest-line": "^3.1.0", - "wrap-ansi": "^6.2.0", - "ws": "^7.2.5", - "yoga-layout-prebuilt": "^1.9.6" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "scheduler": { - "version": "0.18.0", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "slice-ansi": { - "version": "3.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-length": { - "version": "3.1.0", - "dev": true, - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.12.0", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "inline-style-parser": { - "version": "0.1.1", - "dev": true - }, - "internal-ip": { - "version": "4.3.0", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "2.2.0", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.5", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-alphabetical": { - "version": "1.0.4" - }, - "is-alphanumeric": { - "version": "1.0.0" - }, - "is-alphanumerical": { - "version": "1.0.4", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arguments": { - "version": "1.1.0", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "dev": true - }, - "is-bigint": { - "version": "1.0.2", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "devOptional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-buffer": { - "version": "1.1.6" - }, - "is-callable": { - "version": "1.2.3", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.4.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.4", - "dev": true - }, - "is-decimal": { - "version": "1.0.4" - }, - "is-descriptor": { - "version": "0.1.6", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0" - } - } - }, - "is-docker": { - "version": "2.2.1", - "dev": true - }, - "is-dom": { - "version": "1.1.0", - "dev": true, - "requires": { - "is-object": "^1.0.1", - "is-window": "^1.0.2" - } - }, - "is-extendable": { - "version": "0.1.1" - }, - "is-extglob": { - "version": "2.1.1", - "devOptional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-function": { - "version": "1.0.2", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "devOptional": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4" - }, - "is-map": { - "version": "2.0.2", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "devOptional": true - }, - "is-number-object": { - "version": "1.0.5", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "dev": true - }, - "is-object": { - "version": "1.0.2", - "dev": true - }, - "is-observable": { - "version": "1.1.0", - "dev": true, - "requires": { - "symbol-observable": "^1.1.0" - } - }, - "is-path-cwd": { - "version": "2.2.0", - "dev": true - }, - "is-path-in-cwd": { - "version": "2.1.0", - "dev": true, - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0" - }, - "is-plain-object": { - "version": "2.0.4", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "dev": true - }, - "is-promise": { - "version": "2.2.2", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-regexp": { - "version": "1.0.0", - "dev": true - }, - "is-root": { - "version": "2.1.0", - "dev": true - }, - "is-set": { - "version": "2.0.2", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "dev": true - }, - "is-string": { - "version": "1.0.6", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typedarray": { - "version": "1.0.0", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "dev": true - }, - "is-whitespace-character": { - "version": "1.0.4" - }, - "is-window": { - "version": "1.0.2", - "dev": true - }, - "is-windows": { - "version": "1.0.2" - }, - "is-word-character": { - "version": "1.0.4" - }, - "is-wsl": { - "version": "1.1.0" - }, - "isarray": { - "version": "1.0.0" - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isobject": { - "version": "3.0.1" - }, - "isstream": { - "version": "0.1.2", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.2", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "iterate-iterator": { - "version": "1.0.1", - "dev": true - }, - "iterate-value": { - "version": "1.0.2", - "dev": true, - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, - "java-properties": { - "version": "1.0.2", - "dev": true - }, - "jest": { - "version": "26.6.3", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "6.0.0", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "jest-cli": { - "version": "26.6.3", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "jest-changed-files": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "4.1.0", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "jest-config": { - "version": "26.6.3", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "26.6.2", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "26.0.0", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - } - }, - "jest-environment-node": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "jest-get-type": { - "version": "26.3.0", - "dev": true - }, - "jest-haste-map": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "26.6.2", - "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "26.6.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "26.0.0", - "dev": true - }, - "jest-resolve": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - } - }, - "jest-runner": { - "version": "26.6.3", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "26.6.3", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "6.0.0", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "jest-serializer": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-util": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.0", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "jest-worker": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jmespath": { - "version": "0.15.0" - }, - "joi": { - "version": "17.4.0", - "dev": true, - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.0", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-string-escape": { - "version": "1.0.1", - "dev": true - }, - "js-tokens": { - "version": "4.0.0" - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "dev": true - }, - "jsdom": { - "version": "16.6.0", - "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.5", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "8.4.1", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "tough-cookie": { - "version": "4.0.0", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true - } - } - }, - "jsesc": { - "version": "2.5.2" - }, - "json-parse-better-errors": { - "version": "1.0.2" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "dev": true - }, - "json3": { - "version": "3.3.3", - "dev": true - }, - "json5": { - "version": "1.0.1", - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.1", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "junit-report-builder": { - "version": "2.1.0", - "dev": true, - "requires": { - "date-format": "0.0.2", - "lodash": "^4.17.15", - "make-dir": "^1.3.0", - "xmlbuilder": "^10.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "dev": true - }, - "xmlbuilder": { - "version": "10.1.1", - "dev": true - } - } - }, - "junk": { - "version": "3.1.0", - "dev": true - }, - "killable": { - "version": "1.0.1", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - }, - "klaw": { - "version": "1.3.1", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "kleur": { - "version": "3.0.3", - "dev": true - }, - "klona": { - "version": "2.0.4", - "dev": true - }, - "lazy-universal-dotenv": { - "version": "3.0.1", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.0", - "app-root-dir": "^1.0.2", - "core-js": "^3.0.4", - "dotenv": "^8.0.0", - "dotenv-expand": "^5.1.0" - } - }, - "leven": { - "version": "3.1.0", - "dev": true - }, - "levn": { - "version": "0.3.0", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lighthouse-logger": { - "version": "1.2.0", - "dev": true, - "requires": { - "debug": "^2.6.8", - "marky": "^1.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "lines-and-columns": { - "version": "1.1.6", - "dev": true - }, - "lint-staged": { - "version": "11.0.0", - "dev": true, - "requires": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "dedent": "^0.7.0", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "commander": { - "version": "7.2.0", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.0", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "execa": { - "version": "5.1.1", - "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" - } - }, - "get-stream": { - "version": "6.0.1", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "npm-run-path": { - "version": "4.0.1", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "listr": { - "version": "0.14.3", - "dev": true, - "requires": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "dev": true - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "dev": true - }, - "listr-update-renderer": { - "version": "0.5.0", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^2.3.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "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" - } - }, - "indent-string": { - "version": "3.2.0", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "dev": true - } - } - }, - "listr-verbose-renderer": { - "version": "0.5.0", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cli-cursor": "^2.1.0", - "date-fns": "^1.27.2", - "figures": "^2.0.0" - }, - "dependencies": { - "figures": { - "version": "2.0.0", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - } - } - }, - "listr2": { - "version": "3.10.0", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^1.2.2", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cli-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "log-update": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "slice-ansi": { - "version": "3.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "lit-element": { - "version": "2.5.1", - "dev": true, - "requires": { - "lit-html": "^1.1.1" - } - }, - "lit-html": { - "version": "1.4.1", - "dev": true - }, - "loader-runner": { - "version": "2.4.0" - }, - "loader-utils": { - "version": "1.4.0", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21" - }, - "lodash-es": { - "version": "4.17.21" - }, - "lodash.camelcase": { - "version": "4.3.0" - }, - "lodash.chunk": { - "version": "4.2.0" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "dev": true - }, - "lodash.difference": { - "version": "4.5.0", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0" - }, - "lodash.merge": { - "version": "4.6.2", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "dev": true - }, - "log-symbols": { - "version": "1.0.2", - "dev": true, - "requires": { - "chalk": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "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" - } - }, - "supports-color": { - "version": "2.0.0", - "dev": true - } - } - }, - "log-update": { - "version": "2.3.0", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "3.0.1", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - } - } - } - }, - "loglevel": { - "version": "1.7.1", - "dev": true - }, - "loki": { - "version": "0.28.1", - "dev": true, - "requires": { - "@loki/integration-react": "^0.28.0", - "@loki/integration-react-native": "^0.28.0", - "@loki/integration-vue": "^0.28.0", - "@loki/runner": "^0.28.1", - "@loki/target-chrome-app": "^0.28.0", - "@loki/target-chrome-docker": "^0.28.1", - "@loki/target-native-android-emulator": "^0.28.0", - "@loki/target-native-ios-simulator": "^0.28.0" - }, - "dependencies": { - "@loki/runner": { - "version": "0.28.1", - "dev": true, - "requires": { - "@loki/core": "^0.28.0", - "@loki/diff-graphics-magick": "^0.28.0", - "@loki/diff-looks-same": "^0.28.0", - "@loki/diff-pixelmatch": "^0.28.0", - "@loki/target-chrome-app": "^0.28.0", - "@loki/target-chrome-aws-lambda": "^0.28.0", - "@loki/target-chrome-docker": "^0.28.1", - "@loki/target-native-android-emulator": "^0.28.0", - "@loki/target-native-ios-simulator": "^0.28.0", - "async": "^3.2.0", - "chalk": "^4.1.0", - "ci-info": "^2.0.0", - "cosmiconfig": "^7.0.0", - "fs-extra": "^9.1.0", - "import-jsx": "^4.0.0", - "ink": "^3.0.8", - "minimist": "^1.2.0", - "ramda": "^0.27.1", - "react": "^16.14.0", - "transliteration": "^2.2.0" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.0", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "react": { - "version": "16.14.0", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "longest-streak": { - "version": "2.0.4" - }, - "looks-same": { - "version": "4.1.0", - "dev": true, - "requires": { - "color-diff": "^1.1.0", - "concat-stream": "^1.6.2", - "lodash": "^4.17.3", - "parse-color": "^1.0.0", - "pngjs": "^3.3.3" - } - }, - "loose-envify": { - "version": "1.4.0", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lowlight": { - "version": "1.20.0", - "dev": true, - "requires": { - "fault": "^1.0.0", - "highlight.js": "~10.7.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1" - } - } - }, - "makeerror": { - "version": "1.0.11", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2" - }, - "map-obj": { - "version": "4.2.1", - "dev": true - }, - "map-or-similar": { - "version": "1.5.0", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "requires": { - "object-visit": "^1.0.0" - } - }, - "markdown-escapes": { - "version": "1.0.4" - }, - "markdown-table": { - "version": "2.0.0", - "requires": { - "repeat-string": "^1.0.0" - } - }, - "markdown-to-jsx": { - "version": "7.1.3", - "dev": true, - "requires": {} - }, - "marky": { - "version": "1.2.2", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdast-add-list-metadata": { - "version": "1.0.1", - "requires": { - "unist-util-visit-parents": "1.1.2" - } - }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "dev": true, - "requires": { - "unist-util-remove": "^2.0.0" - } - }, - "mdast-util-compact": { - "version": "2.0.1", - "requires": { - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0" - }, - "unist-util-visit": { - "version": "2.0.3", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "mdast-util-definitions": { - "version": "4.0.0", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "dev": true - }, - "unist-util-visit": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "mdast-util-to-hast": { - "version": "10.0.1", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "dev": true - }, - "unist-util-visit": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "mdast-util-to-string": { - "version": "1.1.0", - "dev": true - }, - "mdurl": { - "version": "1.0.1", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "dev": true - }, - "memfs": { - "version": "3.2.2", - "dev": true, - "requires": { - "fs-monkey": "1.0.3" - } - }, - "memoizerific": { - "version": "1.11.3", - "dev": true, - "requires": { - "map-or-similar": "^1.5.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "8.1.2", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.0.2", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.2", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "0.18.1", - "dev": true - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "methods": { - "version": "1.1.2", - "dev": true - }, - "microevent.ts": { - "version": "0.1.1", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "miller-rabin": { - "version": "4.0.1", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "dev": true - }, - "mime-db": { - "version": "1.48.0", - "dev": true - }, - "mime-types": { - "version": "2.1.31", - "dev": true, - "requires": { - "mime-db": "1.48.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "min-indent": { - "version": "1.0.1", - "dev": true - }, - "mini-create-react-context": { - "version": "0.4.1", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "minimalistic-assert": { - "version": "1.0.1" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1" - }, - "minimatch": { - "version": "3.0.4", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5" - }, - "minimist-options": { - "version": "4.1.0", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "dependencies": { - "arrify": { - "version": "1.0.1", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "dev": true - } - } - }, - "minipass": { - "version": "3.1.3", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "requires": { - "minimist": "^1.2.5" - } - }, - "moment": { - "version": "2.29.1" - }, - "moment-locales-webpack-plugin": { - "version": "1.2.0", - "dev": true, - "requires": { - "lodash.difference": "^4.5.0" - } - }, - "mousetrap": { - "version": "1.6.5" - }, - "mousetrap-global-bind": { - "version": "1.1.0", - "requires": {} - }, - "move-concurrently": { - "version": "1.0.1", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.2" - }, - "multicast-dns": { - "version": "6.2.3", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "dev": true - }, - "nan": { - "version": "2.14.2", - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3" - } - } - }, - "native-url": { - "version": "0.2.6", - "dev": true, - "requires": { - "querystring": "^0.2.0" - } - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "dev": true - }, - "neo-async": { - "version": "2.6.2" - }, - "nested-error-stacks": { - "version": "2.1.0", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-ask": { - "version": "1.0.1", - "dev": true - }, - "node-dir": { - "version": "0.1.17", - "dev": true, - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-fetch": { - "version": "2.6.1" - }, - "node-forge": { - "version": "0.10.0", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "events": { - "version": "3.3.0" - }, - "querystring": { - "version": "0.2.0" - }, - "url": { - "version": "0.11.0", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - } - } - }, - "node-loggly-bulk": { - "version": "2.2.5", - "dev": true, - "requires": { - "json-stringify-safe": "5.0.x", - "moment": "^2.18.1", - "request": ">=2.76.0 <3.0.0" - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "dev": true - }, - "node-notifier": { - "version": "8.0.2", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "dev": true, - "optional": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-releases": { - "version": "1.1.73", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0" - }, - "normalize-range": { - "version": "0.1.2", - "dev": true - }, - "normalize-wheel": { - "version": "1.0.1" - }, - "npm-run-path": { - "version": "2.0.2", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "2.0.0", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "dev": true - }, - "nwsapi": { - "version": "2.2.0", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "dev": true - }, - "object-assign": { - "version": "4.1.1" - }, - "object-copy": { - "version": "0.1.0", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-inspect": { - "version": "1.10.3", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "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.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "object.fromentries": { - "version": "2.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "object.pick": { - "version": "1.3.0", - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "objectorarray": { - "version": "1.0.5", - "dev": true - }, - "obuf": { - "version": "1.1.2", - "dev": true - }, - "oembed-parser": { - "version": "1.4.7", - "requires": { - "node-fetch": "^2.6.1" - } - }, - "omit-deep": { - "version": "0.3.0", - "requires": { - "is-plain-object": "^2.0.1", - "unset-value": "^0.1.1" - } - }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "dev": true - }, - "once": { - "version": "1.4.0", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.4.2", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - } - } - }, - "openurl": { - "version": "1.1.1", - "dev": true - }, - "opn": { - "version": "5.5.0", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "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" - } - }, - "original": { - "version": "1.0.2", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0" - }, - "osnap": { - "version": "1.1.0", - "dev": true, - "requires": { - "execa": "^0.6.3", - "minimist": "^1.2.0", - "pify": "^3.0.0", - "tempfile": "^2.0.0", - "which": "^1.2.14" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.6.3", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "pify": { - "version": "3.0.0", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "dev": true - } - } - }, - "overlayscrollbars": { - "version": "1.13.1", - "dev": true - }, - "p-all": { - "version": "2.1.0", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "dev": true - } - } - }, - "p-each-series": { - "version": "2.2.0", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-filter": { - "version": "2.1.0", - "dev": true, - "requires": { - "p-map": "^2.0.0" - }, - "dependencies": { - "p-map": { - "version": "2.1.0", - "dev": true - } - } - }, - "p-finally": { - "version": "1.0.0", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "3.0.1", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-timeout": { - "version": "3.2.0", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0" - }, - "pako": { - "version": "1.0.11" - }, - "parallel-transform": { - "version": "1.2.0", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.4", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "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" - } - }, - "parse-color": { - "version": "1.0.0", - "dev": true, - "requires": { - "color-convert": "~0.5.0" - }, - "dependencies": { - "color-convert": { - "version": "0.5.3", - "dev": true - } - } - }, - "parse-entities": { - "version": "1.2.2", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-passwd": { - "version": "1.0.0", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascalcase": { - "version": "0.1.1" - }, - "patch-console": { - "version": "1.0.0", - "dev": true - }, - "path-browserify": { - "version": "0.0.1" - }, - "path-dirname": { - "version": "1.0.2", - "devOptional": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1" - }, - "path-is-inside": { - "version": "1.0.2", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1" - } - } - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "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", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "devOptional": true - }, - "pify": { - "version": "4.0.1" - }, - "pinkie": { - "version": "2.0.4", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pixelmatch": { - "version": "5.2.1", - "dev": true, - "requires": { - "pngjs": "^4.0.1" - }, - "dependencies": { - "pngjs": { - "version": "4.0.1", - "dev": true - } - } - }, - "pkg-dir": { - "version": "5.0.0", - "dev": true, - "requires": { - "find-up": "^5.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "dev": true - } - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "pluralize": { - "version": "8.0.0", - "dev": true - }, - "pngjs": { - "version": "3.4.0", - "dev": true - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "dev": true, - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "polished": { - "version": "4.1.3", - "dev": true, - "requires": { - "@babel/runtime": "^7.14.0" - } - }, - "portfinder": { - "version": "1.0.28", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1" - }, - "postcss": { - "version": "7.0.36", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.2.1", - "dev": true, - "requires": { - "postcss": "^7.0.26" - } - }, - "postcss-loader": { - "version": "4.3.0", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.4" - }, - "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-selector-parser": { - "version": "6.0.6", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.1.0" - }, - "prelude-ls": { - "version": "1.1.2", - "dev": true - }, - "prettier": { - "version": "2.2.1", - "dev": true - }, - "pretty-error": { - "version": "2.1.2", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "pretty-format": { - "version": "26.6.2", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "dev": true - } - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "dev": true - }, - "prismjs": { - "version": "1.24.1", - "dev": true - }, - "process": { - "version": "0.11.10" - }, - "process-nextick-args": { - "version": "2.0.1" - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "progress-stream": { - "version": "2.0.0", - "dev": true, - "requires": { - "speedometer": "~1.0.0", - "through2": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1" - }, - "promise.allsettled": { - "version": "1.0.4", - "dev": true, - "requires": { - "array.prototype.map": "^1.0.3", - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.0.2", - "iterate-value": "^1.0.2" - } - }, - "promise.prototype.finally": { - "version": "3.1.2", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.0", - "function-bind": "^1.1.1" - } - }, - "prompts": { - "version": "2.4.0", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.7.2", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "property-expr": { - "version": "2.0.4" - }, - "property-information": { - "version": "5.6.0", - "dev": true, - "requires": { - "xtend": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1" - }, - "pseudomap": { - "version": "1.0.2", - "dev": true - }, - "psl": { - "version": "1.8.0", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "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" - } - }, - "pump": { - "version": "3.0.0", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.3.2" - }, - "qs": { - "version": "6.10.1", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystring": { - "version": "0.2.1" - }, - "querystring-es3": { - "version": "0.2.1" - }, - "querystringify": { - "version": "2.2.0", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "quick-lru": { - "version": "4.0.1", - "dev": true - }, - "ramda": { - "version": "0.27.1" - }, - "randombytes": { - "version": "2.1.0", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "raw-loader": { - "version": "4.0.2", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "react": { - "version": "17.0.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-codemirror2": { - "version": "6.0.1", - "requires": {} - }, - "react-colorful": { - "version": "5.2.3", - "dev": true, - "requires": {} - }, - "react-dev-utils": { - "version": "11.0.4", - "dev": true, - "requires": { - "@babel/code-frame": "7.10.4", - "address": "1.1.2", - "browserslist": "4.14.2", - "chalk": "2.4.2", - "cross-spawn": "7.0.3", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.1.0", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "4.1.6", - "global-modules": "2.0.0", - "globby": "11.0.1", - "gzip-size": "5.1.1", - "immer": "8.0.1", - "is-root": "2.1.0", - "loader-utils": "2.0.0", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "prompts": "2.4.0", - "react-error-overlay": "^6.0.9", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "browserslist": { - "version": "4.14.2", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001125", - "electron-to-chromium": "^1.3.564", - "escalade": "^3.0.2", - "node-releases": "^1.1.61" - } - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - }, - "immer": { - "version": "8.0.1", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "react-devtools-core": { - "version": "4.13.5", - "dev": true, - "requires": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "react-docgen": { - "version": "5.4.0", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@babel/generator": "^7.12.11", - "@babel/runtime": "^7.7.6", - "ast-types": "^0.14.2", - "commander": "^2.19.0", - "doctrine": "^3.0.0", - "estree-to-babel": "^3.1.0", - "neo-async": "^2.6.1", - "node-dir": "^0.1.10", - "strip-indent": "^3.0.0" - } - }, - "react-docgen-typescript": { - "version": "2.0.0", - "dev": true, - "requires": {} - }, - "react-dom": { - "version": "17.0.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-draggable": { - "version": "4.4.3", - "dev": true, - "requires": { - "classnames": "^2.2.5", - "prop-types": "^15.6.0" - } - }, - "react-element-to-jsx-string": { - "version": "14.3.2", - "dev": true, - "requires": { - "@base2/pretty-print-object": "1.0.0", - "is-plain-object": "3.0.1" - }, - "dependencies": { - "is-plain-object": { - "version": "3.0.1", - "dev": true - } - } - }, - "react-error-overlay": { - "version": "6.0.9", - "dev": true - }, - "react-fast-compare": { - "version": "2.0.4" - }, - "react-helmet": { - "version": "6.1.0", - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - }, - "dependencies": { - "react-fast-compare": { - "version": "3.2.0" - } - } - }, - "react-helmet-async": { - "version": "1.0.9", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "dependencies": { - "react-fast-compare": { - "version": "3.2.0", - "dev": true - } - } - }, - "react-inspector": { - "version": "5.1.1", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "is-dom": "^1.0.0", - "prop-types": "^15.0.0" - } - }, - "react-is": { - "version": "16.13.1" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "dev": true - }, - "react-markdown": { - "version": "4.3.1", - "requires": { - "html-to-react": "^1.3.4", - "mdast-add-list-metadata": "1.0.1", - "prop-types": "^15.7.2", - "react-is": "^16.8.6", - "remark-parse": "^5.0.0", - "unified": "^6.1.5", - "unist-util-visit": "^1.3.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "unist-util-visit": { - "version": "1.4.1", - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "unist-util-visit-parents": { - "version": "2.1.2", - "requires": { - "unist-util-is": "^3.0.0" - } - } - } - }, - "react-oembed-container": { - "version": "1.0.0", - "requires": { - "prop-types": "^15.6.0" - } - }, - "react-popper": { - "version": "2.2.5", - "dev": true, - "requires": { - "react-fast-compare": "^3.0.1", - "warning": "^4.0.2" - }, - "dependencies": { - "react-fast-compare": { - "version": "3.2.0", - "dev": true - } - } - }, - "react-popper-tooltip": { - "version": "3.1.1", - "dev": true, - "requires": { - "@babel/runtime": "^7.12.5", - "@popperjs/core": "^2.5.4", - "react-popper": "^2.2.4" - } - }, - "react-reconciler": { - "version": "0.24.0", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.18.0" - }, - "dependencies": { - "scheduler": { - "version": "0.18.0", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } - } - }, - "react-refresh": { - "version": "0.11.0", - "dev": true - }, - "react-router": { - "version": "5.2.0", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-dom": { - "version": "5.2.0", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-side-effect": { - "version": "2.1.1", - "requires": {} - }, - "react-sizeme": { - "version": "3.0.1", - "dev": true, - "requires": { - "element-resize-detector": "^1.2.2", - "invariant": "^2.2.4", - "shallowequal": "^1.1.0", - "throttle-debounce": "^3.0.1" - } - }, - "react-syntax-highlighter": { - "version": "13.5.3", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "highlight.js": "^10.1.1", - "lowlight": "^1.14.0", - "prismjs": "^1.21.0", - "refractor": "^3.1.0" - } - }, - "react-textarea-autosize": { - "version": "8.3.3", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" - } - }, - "react-use-gesture": { - "version": "9.1.3", - "requires": {} - }, - "react-virtuoso": { - "version": "0.20.3", - "requires": { - "resize-observer-polyfill": "^1.5.1", - "tslib": "^1.11.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "react-visibility-sensor": { - "version": "5.1.1", - "requires": { - "prop-types": "^15.7.2" - } - }, - "read-pkg": { - "version": "5.2.0", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.7", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "devOptional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "recursive-readdir": { - "version": "2.2.2", - "dev": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "redent": { - "version": "3.0.0", - "dev": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - } - }, - "refractor": { - "version": "3.4.0", - "dev": true, - "requires": { - "hastscript": "^6.0.0", - "parse-entities": "^2.0.0", - "prismjs": "~1.24.0" - }, - "dependencies": { - "parse-entities": { - "version": "2.0.0", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - } - } - }, - "regenerate": { - "version": "1.4.2", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.7" - }, - "regenerator-transform": { - "version": "0.14.5", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "regexpu-core": { - "version": "4.7.1", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "dev": true - }, - "regjsparser": { - "version": "0.6.9", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "dev": true - }, - "remark": { - "version": "12.0.1", - "requires": { - "remark-parse": "^8.0.0", - "remark-stringify": "^8.0.0", - "unified": "^9.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.5" - }, - "is-plain-obj": { - "version": "2.1.0" - }, - "parse-entities": { - "version": "2.0.0", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "remark-parse": { - "version": "8.0.3", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "unified": { - "version": "9.2.1", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unist-util-is": { - "version": "4.1.0" - }, - "unist-util-remove-position": { - "version": "2.0.1", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile": { - "version": "4.2.1", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0" - }, - "vfile-message": { - "version": "2.0.4", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "remark-breaks": { - "version": "2.0.2", - "requires": { - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0" - }, - "unist-util-visit": { - "version": "2.0.3", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "remark-disable-tokenizers": { - "version": "1.1.0", - "requires": { - "clone": "^2.1.2" - } - }, - "remark-external-links": { - "version": "8.0.0", - "dev": true, - "requires": { - "extend": "^3.0.0", - "is-absolute-url": "^3.0.0", - "mdast-util-definitions": "^4.0.0", - "space-separated-tokens": "^1.0.0", - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "dev": true - }, - "unist-util-visit": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "remark-footnotes": { - "version": "2.0.0", - "dev": true - }, - "remark-mdx": { - "version": "1.6.22", - "dev": true, - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "dev": true - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "is-buffer": { - "version": "2.0.5", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "parse-entities": { - "version": "2.0.0", - "dev": true, - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "remark-parse": { - "version": "8.0.3", - "dev": true, - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "semver": { - "version": "5.7.1", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "unified": { - "version": "9.2.0", - "dev": true, - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - }, - "unist-util-is": { - "version": "4.1.0", - "dev": true - }, - "unist-util-remove-position": { - "version": "2.0.1", - "dev": true, - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "vfile": { - "version": "4.2.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0", - "dev": true - }, - "vfile-message": { - "version": "2.0.4", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - } - } - }, - "remark-parse": { - "version": "5.0.0", - "requires": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" - } - }, - "remark-slug": { - "version": "6.0.0", - "dev": true, - "requires": { - "github-slugger": "^1.0.0", - "mdast-util-to-string": "^1.0.0", - "unist-util-visit": "^2.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "dev": true - }, - "unist-util-visit": { - "version": "2.0.3", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "dev": true, - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - } - } - }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "dev": true, - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" - } - }, - "remark-stringify": { - "version": "8.1.1", - "requires": { - "ccount": "^1.0.0", - "is-alphanumeric": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "longest-streak": "^2.0.1", - "markdown-escapes": "^1.0.0", - "markdown-table": "^2.0.0", - "mdast-util-compact": "^2.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "stringify-entities": "^3.0.0", - "unherit": "^1.0.4", - "xtend": "^4.0.1" - }, - "dependencies": { - "parse-entities": { - "version": "2.0.0", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - } - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "devOptional": true - }, - "rename-keys": { - "version": "1.2.0" - }, - "renderkid": { - "version": "2.0.7", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "domhandler": { - "version": "4.2.0", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, - "repeat-element": { - "version": "1.1.4" - }, - "repeat-string": { - "version": "1.6.1" - }, - "replace-ext": { - "version": "1.0.0" - }, - "request": { - "version": "2.88.2", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.2", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "dev": true - }, - "require-package-name": { - "version": "2.0.1", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "dev": true - }, - "resize-observer-polyfill": { - "version": "1.5.1" - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - } - } - }, - "resolve-from": { - "version": "5.0.0", - "dev": true - }, - "resolve-pathname": { - "version": "3.0.0" - }, - "resolve-url": { - "version": "0.2.1" - }, - "restore-cursor": { - "version": "2.0.0", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } - } - }, - "ret": { - "version": "0.1.15" - }, - "retry": { - "version": "0.12.0", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "dev": true - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.7", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.1.2" - }, - "safe-regex": { - "version": "1.1.0", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2" - }, - "sane": { - "version": "4.1.0", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "sass": { - "version": "1.35.1", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0" - } - }, - "sass-loader": { - "version": "8.0.2", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - } - }, - "sax": { - "version": "1.2.1" - }, - "saxes": { - "version": "5.0.1", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.20.2", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "dev": true - }, - "selfsigned": { - "version": "1.10.11", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "6.3.0" - }, - "semver-compare": { - "version": "1.0.0", - "dev": true - }, - "send": { - "version": "0.17.1", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "4.0.0", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-favicon": { - "version": "2.5.0", - "dev": true, - "requires": { - "etag": "~1.8.1", - "fresh": "0.5.2", - "ms": "2.1.1", - "parseurl": "~1.3.2", - "safe-buffer": "5.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "dev": true - } - } - }, - "serve-index": { - "version": "1.9.1", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "dev": true - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5" - }, - "setprototypeof": { - "version": "1.1.1", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "dev": true - } - } - }, - "shallowequal": { - "version": "1.1.0" - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "dev": true - }, - "shelljs": { - "version": "0.8.4", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "dependencies": { - "interpret": { - "version": "1.4.0", - "dev": true - } - } - }, - "shellwords": { - "version": "0.1.1", - "dev": true, - "optional": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "dev": true - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0" - }, - "source-map": { - "version": "0.5.7" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3" - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "requires": { - "kind-of": "^3.2.0" - } - }, - "sockjs": { - "version": "0.3.21", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "dev": true - } - } - }, - "sockjs-client": { - "version": "1.5.1", - "dev": true, - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "source-list-map": { - "version": "2.0.1" - }, - "source-map": { - "version": "0.6.1" - }, - "source-map-resolve": { - "version": "0.5.3", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1" - }, - "space-separated-tokens": { - "version": "1.1.5", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.9", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "speedometer": { - "version": "1.0.0", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.2", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stable": { - "version": "0.1.8", - "dev": true - }, - "stack-generator": { - "version": "2.0.5", - "requires": { - "stackframe": "^1.1.1" - } - }, - "stack-utils": { - "version": "2.0.3", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "dev": true - } - } - }, - "stackframe": { - "version": "1.2.0" - }, - "stacktrace-gps": { - "version": "3.0.4", - "requires": { - "source-map": "0.5.6", - "stackframe": "^1.1.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.6" - } - } - }, - "stacktrace-js": { - "version": "2.0.2", - "requires": { - "error-stack-parser": "^2.0.6", - "stack-generator": "^2.0.5", - "stacktrace-gps": "^3.0.4" - } - }, - "state-toggle": { - "version": "1.0.3" - }, - "static-extend": { - "version": "0.1.2", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "dev": true - }, - "store2": { - "version": "2.12.0", - "dev": true - }, - "storybook-addon-designs": { - "version": "6.0.1", - "dev": true, - "requires": { - "@figspec/react": "^0.1.6" - } - }, - "storybook-addon-outline": { - "version": "1.4.1", - "dev": true, - "requires": { - "@storybook/addons": "^6.3.0", - "@storybook/api": "^6.3.0", - "@storybook/components": "^6.3.0", - "@storybook/core-events": "^6.3.0", - "ts-dedent": "^2.1.1" - } - }, - "stream-browserify": { - "version": "2.0.2", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1" - }, - "string_decoder": { - "version": "1.1.1", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-argv": { - "version": "0.3.1", - "dev": true - }, - "string-length": { - "version": "4.0.2", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string-width": { - "version": "1.0.2", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.padend": { - "version": "3.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "string.prototype.padstart": { - "version": "3.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "stringify-entities": { - "version": "3.1.0", - "requires": { - "character-entities-html4": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "dev": true, - "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", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "dev": true - }, - "strip-indent": { - "version": "3.0.0", - "dev": true, - "requires": { - "min-indent": "^1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "style-loader": { - "version": "1.3.0", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^2.7.0" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "style-to-object": { - "version": "0.3.0", - "dev": true, - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "styled-components": { - "version": "5.3.0", - "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": { - "supports-color": { - "version": "5.5.0", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "styled-system": { - "version": "5.1.5", - "requires": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" - } - }, - "suncalc": { - "version": "1.8.0" - }, - "supports-color": { - "version": "6.1.0", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "svgson": { - "version": "4.1.0", - "requires": { - "deep-rename-keys": "^0.2.1", - "omit-deep": "0.3.0", - "xml-reader": "2.4.3" - } - }, - "symbol-observable": { - "version": "1.2.0", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "dev": true - }, - "symbol.prototype.description": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.2" - } - }, - "synchronous-promise": { - "version": "2.0.15" - }, - "tabbable": { - "version": "4.0.0" - }, - "table": { - "version": "6.7.1", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.1", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "tapable": { - "version": "1.1.3" - }, - "tar": { - "version": "6.1.0", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "dev": true - } - } - }, - "telejson": { - "version": "5.3.3", - "dev": true, - "requires": { - "@types/is-function": "^1.0.0", - "global": "^4.4.0", - "is-function": "^1.0.2", - "is-regex": "^1.1.2", - "is-symbol": "^1.0.3", - "isobject": "^4.0.0", - "lodash": "^4.17.21", - "memoizerific": "^1.11.3" - }, - "dependencies": { - "isobject": { - "version": "4.0.0", - "dev": true - } - } - }, - "temp-dir": { - "version": "1.0.0", - "dev": true - }, - "tempfile": { - "version": "2.0.0", - "dev": true, - "requires": { - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - } - }, - "tempy": { - "version": "1.0.1", - "dev": true, - "requires": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "del": { - "version": "6.0.0", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "is-path-inside": { - "version": "3.0.3", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "temp-dir": { - "version": "2.0.0", - "dev": true - }, - "type-fest": { - "version": "0.16.0", - "dev": true - } - } - }, - "term-size": { - "version": "2.2.1", - "dev": true - }, - "terminal-link": { - "version": "2.1.1", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.2", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "type-fest": { - "version": "0.21.3", - "dev": true - } - } - }, - "terser": { - "version": "4.8.0", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "4.2.3", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "find-cache-dir": "^3.3.1", - "jest-worker": "^26.5.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.4", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "cacache": { - "version": "15.2.0", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chownr": { - "version": "2.0.0", - "dev": true - }, - "find-cache-dir": { - "version": "3.3.1", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "serialize-javascript": { - "version": "5.0.1", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "ssri": { - "version": "8.0.1", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "terser": { - "version": "5.7.1", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "dev": true - } - } - } - } - }, - "test-exclude": { - "version": "6.0.0", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "throat": { - "version": "5.0.0", - "dev": true - }, - "throttle-debounce": { - "version": "3.0.1", - "dev": true - }, - "through": { - "version": "2.3.8", - "dev": true - }, - "through2": { - "version": "2.0.5", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "dev": true - }, - "timers-browserify": { - "version": "2.0.12", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tiny-invariant": { - "version": "1.1.0" - }, - "tiny-warning": { - "version": "1.0.3" - }, - "tmp": { - "version": "0.2.1", - "dev": true, - "requires": { - "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "tmp-promise": { - "version": "3.0.2", - "dev": true, - "requires": { - "tmp": "^0.2.0" - } - }, - "tmpl": { - "version": "1.0.4", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1" - }, - "to-fast-properties": { - "version": "2.0.0" - }, - "to-object-path": { - "version": "0.3.0", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "devOptional": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toggle-selection": { - "version": "1.0.6", - "dev": true - }, - "toidentifier": { - "version": "1.0.0", - "dev": true - }, - "toposort": { - "version": "2.0.2" - }, - "tough-cookie": { - "version": "2.5.0", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "dev": true - } - } - }, - "tr46": { - "version": "2.1.0", - "dev": true, - "requires": { - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "dev": true - } - } - }, - "transformation-matrix": { - "version": "2.1.1" - }, - "transliteration": { - "version": "2.2.0", - "dev": true, - "requires": { - "yargs": "^16.1.0" - } - }, - "tree-kill": { - "version": "1.2.2", - "dev": true - }, - "trim": { - "version": "0.0.1" - }, - "trim-newlines": { - "version": "3.0.1", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.4" - }, - "trough": { - "version": "1.0.5" - }, - "ts-dedent": { - "version": "2.1.1", - "dev": true - }, - "ts-essentials": { - "version": "2.0.12", - "dev": true - }, - "ts-mdast": { - "version": "1.0.0", - "dev": true, - "requires": { - "@types/mdast": "^3.0.3", - "@types/unist": "^2.0.3" - } - }, - "ts-pnp": { - "version": "1.2.0", - "dev": true - }, - "tslib": { - "version": "2.3.0" - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "dev": true - } - } - }, - "tty-browserify": { - "version": "0.0.0" - }, - "tunnel": { - "version": "0.0.6", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "dev": true - }, - "type-fest": { - "version": "2.12.2", - "dev": true, - "optional": true, - "peer": true - }, - "type-is": { - "version": "1.6.18", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.3.5", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unfetch": { - "version": "4.2.0", - "dev": true - }, - "unherit": { - "version": "1.1.3", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "dev": true - }, - "unified": { - "version": "6.2.0", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" - } - }, - "union-value": { - "version": "1.0.1", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-filename": { - "version": "1.1.1", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "2.0.0", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "unist-builder": { - "version": "2.0.3", - "dev": true - }, - "unist-util-generated": { - "version": "1.1.6", - "dev": true - }, - "unist-util-is": { - "version": "3.0.0" - }, - "unist-util-position": { - "version": "3.1.0", - "dev": true - }, - "unist-util-remove": { - "version": "2.1.0", - "dev": true, - "requires": { - "unist-util-is": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "4.1.0", - "dev": true - } - } - }, - "unist-util-remove-position": { - "version": "1.1.4", - "requires": { - "unist-util-visit": "^1.1.0" - }, - "dependencies": { - "unist-util-visit": { - "version": "1.4.1", - "requires": { - "unist-util-visit-parents": "^2.0.0" - } - }, - "unist-util-visit-parents": { - "version": "2.1.2", - "requires": { - "unist-util-is": "^3.0.0" - } - } - } - }, - "unist-util-stringify-position": { - "version": "1.1.2" - }, - "unist-util-visit": { - "version": "3.1.0", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" - }, - "dependencies": { - "unist-util-is": { - "version": "5.1.0" - }, - "unist-util-visit-parents": { - "version": "4.1.1", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" - } - } - } - }, - "unist-util-visit-parents": { - "version": "1.1.2" - }, - "universal-user-agent": { - "version": "6.0.0", - "dev": true - }, - "universalify": { - "version": "2.0.0", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "dev": true - }, - "unset-value": { - "version": "0.1.2", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - } - }, - "upath": { - "version": "1.2.0", - "devOptional": true - }, - "urbit-ob": { - "version": "5.0.1", - "requires": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "uri-js": { - "version": "4.4.1", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1" - } - } - }, - "urix": { - "version": "0.1.0" - }, - "url": { - "version": "0.10.3", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "querystring": { - "version": "0.2.0" - } - } - }, - "url-loader": { - "version": "4.1.1", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "url-parse": { - "version": "1.5.1", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1" - }, - "use-composed-ref": { - "version": "1.1.0", - "dev": true, - "requires": { - "ts-essentials": "^2.0.3" - } - }, - "use-isomorphic-layout-effect": { - "version": "1.1.1", - "dev": true, - "requires": {} - }, - "use-latest": { - "version": "1.2.0", - "dev": true, - "requires": { - "use-isomorphic-layout-effect": "^1.0.0" - } - }, - "use-sidecar": { - "version": "1.0.5", - "requires": { - "detect-node-es": "^1.1.0", - "tslib": "^1.9.3" - }, - "dependencies": { - "tslib": { - "version": "1.14.1" - } - } - }, - "util": { - "version": "0.11.1", - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3" - } - } - }, - "util-deprecate": { - "version": "1.0.2" - }, - "util.promisify": { - "version": "1.0.0", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "dev": true - }, - "uuid": { - "version": "3.3.2" - }, - "uuid-browser": { - "version": "3.1.0", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.0.0", - "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", - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-equal": { - "version": "1.0.1" - }, - "vary": { - "version": "1.1.2", - "dev": true - }, - "verror": { - "version": "1.10.0", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vfile": { - "version": "2.3.0", - "requires": { - "is-buffer": "^1.1.4", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } - }, - "vfile-location": { - "version": "2.0.6" - }, - "vfile-message": { - "version": "1.1.1", - "requires": { - "unist-util-stringify-position": "^1.1.1" - } - }, - "vm-browserify": { - "version": "1.1.2" - }, - "w3c-hr-time": { - "version": "1.0.2", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "wait-on": { - "version": "5.3.0", - "dev": true, - "requires": { - "axios": "^0.21.1", - "joi": "^17.3.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^6.6.3" - } - }, - "walker": { - "version": "1.0.7", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "warning": { - "version": "4.0.3", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "1.7.5", - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "optional": true - }, - "braces": { - "version": "2.3.2", - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "optional": true - }, - "micromatch": { - "version": "3.1.10", - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "web-namespaces": { - "version": "1.1.4", - "dev": true - }, - "webidl-conversions": { - "version": "6.1.0", - "dev": true - }, - "webpack": { - "version": "4.46.0", - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2" - }, - "braces": { - "version": "2.3.2", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3" - }, - "micromatch": { - "version": "3.1.10", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "webpack-cli": { - "version": "3.3.12", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "interpret": { - "version": "1.4.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.11.2", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "dev": true - }, - "braces": { - "version": "2.3.2", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "import-local": { - "version": "2.0.0", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "is-binary-path": { - "version": "1.0.1", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "p-locate": { - "version": "3.0.0", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "dev": true - }, - "readdirp": { - "version": "2.2.1", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "string-width": { - "version": "3.1.0", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "url": { - "version": "0.11.0", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ws": { - "version": "6.2.2", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-filter-warnings-plugin": { - "version": "1.2.1", - "dev": true, - "requires": {} - }, - "webpack-hot-middleware": { - "version": "2.25.0", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "html-entities": "^1.2.0", - "querystring": "^0.2.0", - "strip-ansi": "^3.0.0" - } - }, - "webpack-log": { - "version": "2.0.0", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-sources": { - "version": "1.4.3", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "webpack-virtual-modules": { - "version": "0.2.2", - "dev": true, - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "websocket-driver": { - "version": "0.7.4", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "1.3.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "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-module": { - "version": "2.0.0", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "widest-line": { - "version": "3.1.0", - "dev": true, - "requires": { - "string-width": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "workbox-cacheable-response": { - "version": "6.1.5", - "requires": { - "workbox-core": "^6.1.5" - } - }, - "workbox-core": { - "version": "6.1.5" - }, - "workbox-expiration": { - "version": "6.1.5", - "requires": { - "workbox-core": "^6.1.5" - } - }, - "workbox-precaching": { - "version": "6.1.5", - "requires": { - "workbox-core": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5" - } - }, - "workbox-recipes": { - "version": "6.1.5", - "requires": { - "workbox-cacheable-response": "^6.1.5", - "workbox-core": "^6.1.5", - "workbox-expiration": "^6.1.5", - "workbox-precaching": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5" - } - }, - "workbox-routing": { - "version": "6.1.5", - "requires": { - "workbox-core": "^6.1.5" - } - }, - "workbox-strategies": { - "version": "6.1.5", - "requires": { - "workbox-core": "^6.1.5" - } - }, - "worker-farm": { - "version": "1.7.0", - "requires": { - "errno": "~0.1.7" - } - }, - "worker-rpc": { - "version": "0.1.1", - "dev": true, - "requires": { - "microevent.ts": "~0.1.1" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2" - }, - "write-file-atomic": { - "version": "3.0.3", - "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.2", - "dev": true, - "requires": {} - }, - "x-is-string": { - "version": "0.1.0" - }, - "xml-lexer": { - "version": "0.2.2", - "requires": { - "eventemitter3": "^2.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "dev": true - }, - "xml-reader": { - "version": "2.4.3", - "requires": { - "eventemitter3": "^2.0.0", - "xml-lexer": "^0.2.2" - } - }, - "xml2js": { - "version": "0.4.19", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7" - }, - "xmlchars": { - "version": "2.2.0", - "dev": true - }, - "xtend": { - "version": "4.0.2" - }, - "y18n": { - "version": "4.0.3" - }, - "yallist": { - "version": "4.0.0", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "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" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "dev": true - } - } - }, - "yargs-parser": { - "version": "20.2.9", - "dev": true - }, - "yarn-or-npm": { - "version": "3.0.1", - "dev": true, - "requires": { - "cross-spawn": "^6.0.5", - "pkg-dir": "^4.2.0" - }, - "dependencies": { - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - } - } - }, - "yocto-queue": { - "version": "0.1.0", - "dev": true - }, - "yoga-layout-prebuilt": { - "version": "1.10.0", - "dev": true, - "requires": { - "@types/yoga-layout": "1.9.2" - } - }, - "yup": { - "version": "0.29.3", - "requires": { - "@babel/runtime": "^7.10.5", - "fn-name": "~3.0.0", - "lodash": "^4.17.15", - "lodash-es": "^4.17.11", - "property-expr": "^2.0.2", - "synchronous-promise": "^2.0.13", - "toposort": "^2.0.2" - } - }, - "zustand": { - "version": "3.5.5", - "requires": {} - }, - "zwitch": { - "version": "1.0.5", - "dev": true - } - } + "name": "interface", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "interface", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@fingerprintjs/fingerprintjs": "^3.3.3", + "@radix-ui/react-dialog": "^0.1.0", + "@react-spring/web": "^9.1.1", + "@tlon/indigo-dark": "^1.0.6", + "@tlon/indigo-light": "^1.0.7", + "@tlon/indigo-react": "^1.2.27", + "@tlon/sigil-js": "^1.4.5", + "@urbit/http-api": "2.1.1", + "any-ascii": "^0.1.7", + "aws-sdk": "^2.830.0", + "big-integer": "^1.6.48", + "classnames": "^2.2.6", + "codemirror": "^5.59.2", + "css-loader": "^3.6.0", + "file-saver": "^2.0.5", + "formik": "^2.1.5", + "fuzzy": "^0.1.3", + "immer": "^9.0.2", + "lodash": "^4.17.21", + "moment": "^2.29.1", + "mousetrap": "^1.6.5", + "mousetrap-global-bind": "^1.1.0", + "normalize-wheel": "1.0.1", + "oembed-parser": "^3.0.4", + "prop-types": "^15.7.2", + "querystring": "^0.2.0", + "react": "^17.0.2", + "react-codemirror2-react-17": "^1.0.0", + "react-dom": "^17.0.2", + "react-helmet": "^6.1.0", + "react-markdown": "^5.0.3", + "react-oembed-container": "^1.0.1", + "react-router-dom": "^5.2.0", + "react-use-gesture": "^9.1.3", + "react-virtuoso": "^0.20.3", + "react-visibility-sensor": "^5.1.1", + "remark": "^12.0.0", + "remark-breaks": "^2.0.2", + "remark-disable-tokenizers": "1.1.0", + "stacktrace-js": "^2.0.2", + "style-loader": "^1.3.0", + "styled-components": "^5.1.1", + "styled-system": "^5.1.5", + "suncalc": "^1.8.0", + "unist-util-visit": "^3.0.0", + "urbit-ob": "^5.0.1", + "workbox-core": "^6.0.2", + "workbox-precaching": "^6.0.2", + "workbox-recipes": "^6.0.2", + "workbox-routing": "^6.0.2", + "yup": "^0.29.3", + "zustand": "^3.5.0" + }, + "devDependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-transform-runtime": "^7.12.10", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.4", + "@storybook/addon-actions": "^6.2.9", + "@storybook/addon-essentials": "^6.2.9", + "@storybook/addon-links": "^6.2.9", + "@storybook/react": "^6.2.9", + "@types/lodash": "^4.14.168", + "@types/react": "^16.14.2", + "@types/react-dom": "^16.9.10", + "@types/react-router-dom": "^5.1.7", + "@types/styled-components": "^5.1.7", + "@types/styled-system": "^5.1.10", + "@types/yup": "^0.29.11", + "@typescript-eslint/eslint-plugin": "^4.15.0", + "@typescript-eslint/parser": "^4.24.0", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.6.3", + "babel-loader": "^8.2.2", + "babel-plugin-lodash": "^3.3.4", + "babel-plugin-root-import": "^6.6.0", + "chromatic": "^5.8.3", + "clean-webpack-plugin": "^3.0.0", + "cross-env": "^7.0.3", + "eslint": "^7.26.0", + "eslint-plugin-react": "^7.22.0", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^4.5.1", + "husky": "^6.0.0", + "jest": "^26.6.3", + "lint-staged": "^11.0.0", + "loki": "^0.28.1", + "moment-locales-webpack-plugin": "^1.2.0", + "patch-package": "^6.4.7", + "react-refresh": "^0.11.0", + "sass": "^1.32.5", + "sass-loader": "^8.0.2", + "storybook-addon-designs": "^6.0.0", + "ts-mdast": "^1.0.0", + "typescript": "^4.2.4", + "webpack": "^4.46.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.2" + }, + "engines": { + "node": "14.19.0" + } + }, + "../npm/api": { + "name": "@urbit/api", + "version": "2.1.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.16.0", + "big-integer": "^1.6.48", + "core-js": "^3.19.1", + "immer": "^9.0.1", + "urbit-ob": "^5.0.1" + }, + "devDependencies": { + "@babel/core": "^7.16.0", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.0.6", + "@types/node": "^15.12.5", + "@typescript-eslint/eslint-plugin": "^4.28.2", + "@typescript-eslint/parser": "^4.28.2", + "@urbit/eslint-config": "^1.0.3", + "babel-eslint": "^10.1.0", + "eslint-plugin-react": "^7.24.0", + "rollup": "^2.59.0", + "rollup-plugin-analyzer": "^4.0.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.30.0", + "typescript": "^4.3.2" + } + }, + "../npm/eslint-config": { + "name": "@urbit/eslint-config", + "version": "1.0.3", + "extraneous": true, + "license": "MIT", + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^4.15.0", + "@typescript-eslint/parser": "^4.15.0", + "babel-eslint": "^10.1.0", + "eslint": "^7.26.0", + "eslint-plugin-react": "^7.22.0", + "typescript": "^4.1.5" + } + }, + "../npm/http-api": { + "name": "@urbit/http-api", + "version": "2.2.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@microsoft/fetch-event-source": "^2.0.0", + "browser-or-node": "^1.3.0", + "core-js": "^3.19.1" + }, + "devDependencies": { + "@babel/core": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/preset-typescript": "^7.16.0", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.0.6", + "@types/browser-or-node": "^1.2.0", + "@types/eventsource": "^1.1.5", + "@types/jest": "^26.0.24", + "@types/react": "^16.9.56", + "@typescript-eslint/eslint-plugin": "^4.7.0", + "@typescript-eslint/parser": "^4.7.0", + "babel-jest": "^27.0.6", + "cross-fetch": "^3.1.4", + "event-target-polyfill": "0.0.3", + "fast-text-encoding": "^1.0.3", + "jest": "^27.0.6", + "rollup": "^2.59.0", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.30.0", + "typescript": "^3.9.7", + "util": "^0.12.3", + "web-streams-polyfill": "^3.0.3", + "yet-another-abortcontroller-polyfill": "0.0.4" + } + }, + "node_modules/@actions/core": { + "version": "1.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@actions/http-client": "^2.0.1" + } + }, + "node_modules/@actions/github": { + "version": "5.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@actions/http-client": "^2.0.1", + "@octokit/core": "^3.6.0", + "@octokit/plugin-paginate-rest": "^2.17.0", + "@octokit/plugin-rest-endpoint-methods": "^5.13.0" + } + }, + "node_modules/@actions/http-client": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "tunnel": "^0.0.6" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.2", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "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-environment-visitor": { + "version": "7.18.2", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.17.9", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.17.12", + "license": "MIT", + "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/parser": { + "version": "7.18.5", + "license": "MIT", + "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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@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-decorators": { + "version": "7.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.12", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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-default-from": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-default-from": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@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.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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", + "dev": true, + "license": "MIT", + "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.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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-decorators": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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.18.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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-flow-strip-types": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-flow": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "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.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", + "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.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@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.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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-react-display-name": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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-react-jsx": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.18.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@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", + "dev": true, + "license": "MIT", + "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.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.18.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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.18.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "@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-import-assertions": "^7.17.12", + "@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.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", + "@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.18.2", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-flow-strip-types": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "license": "MIT", + "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/preset-react": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.17.12", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.17.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.17.7", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.3", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "license": "MIT", + "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.18.5", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.4", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@base2/pretty-print-object": { + "version": "1.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@chromaui/localtunnel": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "0.21.4", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/@chromaui/localtunnel/node_modules/axios": { + "version": "0.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/@chromaui/localtunnel/node_modules/debug": { + "version": "4.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.7.4" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.7.5", + "license": "MIT" + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "license": "MIT" + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@figspec/components": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "lit": "^2.1.3" + } + }, + "node_modules/@figspec/react": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@figspec/components": "^1.0.0", + "@lit-labs/react": "^1.0.2" + }, + "peerDependencies": { + "react": "^16.14.0 || ^17.0.0" + } + }, + "node_modules/@fingerprintjs/fingerprintjs": { + "version": "3.3.3", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "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/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/core/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@jest/core/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/environment": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/fake-timers": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/globals": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/reporters": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "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": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "node-notifier": "^8.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "dev": true, + "license": "BSD-3-Clause", + "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/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/v8-to-istanbul": { + "version": "7.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@jest/reporters/node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@jest/source-map": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-result": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.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": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@lit-labs/react": { + "version": "1.0.4", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@lit/reactive-element": { + "version": "1.3.2", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@loki/browser": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/integration-core": "^0.28.0" + } + }, + "node_modules/@loki/core": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shelljs": "^0.8.3" + } + }, + "node_modules/@loki/diff-graphics-magick": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "gm": "^1.23.1" + } + }, + "node_modules/@loki/diff-looks-same": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "looks-same": "^4.0.0" + } + }, + "node_modules/@loki/diff-pixelmatch": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^9.1.0", + "pixelmatch": "^5.2.0", + "pngjs": "^4.0.1" + } + }, + "node_modules/@loki/diff-pixelmatch/node_modules/pngjs": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@loki/integration-core": { + "version": "0.28.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@loki/integration-react": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/browser": "^0.28.0" + }, + "peerDependencies": { + "@storybook/react": "^5 || ^6" + }, + "peerDependenciesMeta": { + "@storybook/react": { + "optional": true + } + } + }, + "node_modules/@loki/integration-react-native": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/integration-core": "^0.28.0" + }, + "peerDependencies": { + "@storybook/addons": "^5 || ^6", + "@storybook/react-native": "^5 || ^6" + }, + "peerDependenciesMeta": { + "@storybook/addons": { + "optional": true + }, + "@storybook/react-native": { + "optional": true + } + } + }, + "node_modules/@loki/integration-vue": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/browser": "^0.28.0" + }, + "peerDependencies": { + "@storybook/vue": "^5 || ^6" + }, + "peerDependenciesMeta": { + "@storybook/vue": { + "optional": true + } + } + }, + "node_modules/@loki/target-chrome-app": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/target-chrome-core": "^0.28.0", + "chrome-launcher": "^0.13.4", + "chrome-remote-interface": "^0.29.0", + "debug": "^4.1.1" + } + }, + "node_modules/@loki/target-chrome-aws-lambda": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/core": "^0.28.0", + "aws-sdk": "^2.840.0", + "debug": "^4.1.1" + } + }, + "node_modules/@loki/target-chrome-core": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/browser": "^0.28.0", + "@loki/core": "^0.28.0", + "@loki/integration-core": "^0.28.0", + "debug": "^4.1.1" + } + }, + "node_modules/@loki/target-chrome-docker": { + "version": "0.28.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/core": "^0.28.0", + "@loki/target-chrome-core": "^0.28.0", + "chrome-remote-interface": "^0.29.0", + "debug": "^4.1.1", + "execa": "^5.0.0", + "fs-extra": "^9.1.0", + "get-port": "^5.1.1", + "wait-on": "^5.2.1" + } + }, + "node_modules/@loki/target-chrome-docker/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@loki/target-chrome-docker/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "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/@loki/target-chrome-docker/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@loki/target-chrome-docker/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@loki/target-chrome-docker/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@loki/target-chrome-docker/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@loki/target-chrome-docker/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@loki/target-chrome-docker/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@loki/target-chrome-docker/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@loki/target-native-android-emulator": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/core": "^0.28.0", + "@loki/target-native-core": "^0.28.0", + "fs-extra": "^9.1.0", + "osnap": "^1.1.0", + "tempy": "^1.0.0" + } + }, + "node_modules/@loki/target-native-core": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/core": "^0.28.0", + "debug": "^4.1.1", + "ws": "^7.2.0" + } + }, + "node_modules/@loki/target-native-core/node_modules/ws": { + "version": "7.5.8", + "dev": true, + "license": "MIT", + "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/@loki/target-native-ios-simulator": { + "version": "0.28.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/core": "^0.28.0", + "@loki/target-native-core": "^0.28.0", + "fs-extra": "^9.1.0", + "osnap": "^1.1.0", + "tempy": "^1.0.0" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/is-buffer": { + "version": "2.0.5", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@mdx-js/mdx/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/remark-parse": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "9.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-builder": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-generated": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-is": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-position": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/react": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@microsoft/fetch-event-source": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", + "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" + }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.scandir/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint/node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "11.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.34.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/request/node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/types": { + "version": "6.34.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.8.1", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <3.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/loader-utils": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-context": { + "version": "0.1.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "0.1.7", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "0.1.0", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-context": "0.1.1", + "@radix-ui/react-dismissable-layer": "0.1.5", + "@radix-ui/react-focus-guards": "0.1.0", + "@radix-ui/react-focus-scope": "0.1.4", + "@radix-ui/react-id": "0.1.5", + "@radix-ui/react-portal": "0.1.4", + "@radix-ui/react-presence": "0.1.2", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-slot": "0.1.2", + "@radix-ui/react-use-controllable-state": "0.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "^2.4.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0", + "react-dom": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "0.1.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "0.1.0", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-use-body-pointer-events": "0.1.1", + "@radix-ui/react-use-callback-ref": "0.1.0", + "@radix-ui/react-use-escape-keydown": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "0.1.4", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-use-callback-ref": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "0.1.5", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "0.1.4", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-use-layout-effect": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0", + "react-dom": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-use-layout-effect": "0.1.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "0.1.4", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "0.1.2" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-body-pointer-events": { + "version": "0.1.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "0.1.0" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "react": "^16.8 || ^17.0" + } + }, + "node_modules/@reach/auto-id": { + "version": "0.10.5", + "license": "MIT", + "dependencies": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@reach/descendants": { + "version": "0.10.5", + "license": "MIT", + "dependencies": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@reach/menu-button": { + "version": "0.10.5", + "license": "MIT", + "dependencies": { + "@reach/auto-id": "0.10.5", + "@reach/descendants": "0.10.5", + "@reach/popover": "0.10.5", + "@reach/utils": "0.10.5", + "prop-types": "^15.7.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@reach/observe-rect": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/@reach/popover": { + "version": "0.10.5", + "license": "MIT", + "dependencies": { + "@reach/portal": "0.10.5", + "@reach/rect": "0.10.5", + "@reach/utils": "0.10.5", + "tabbable": "^4.0.0", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@reach/portal": { + "version": "0.10.5", + "license": "MIT", + "dependencies": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@reach/rect": { + "version": "0.10.5", + "license": "MIT", + "dependencies": { + "@reach/observe-rect": "1.2.0", + "@reach/utils": "0.10.5", + "prop-types": "^15.7.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@reach/utils": { + "version": "0.10.5", + "license": "MIT", + "dependencies": { + "@types/warning": "^3.0.0", + "tslib": "^2.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@react-spring/animated": { + "version": "9.4.5", + "license": "MIT", + "dependencies": { + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || >=17.0.0 || >=18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.4.5", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.4.5", + "@react-spring/rafz": "~9.4.5", + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || >=17.0.0 || >=18.0.0" + } + }, + "node_modules/@react-spring/rafz": { + "version": "9.4.5", + "license": "MIT" + }, + "node_modules/@react-spring/shared": { + "version": "9.4.5", + "license": "MIT", + "dependencies": { + "@react-spring/rafz": "~9.4.5", + "@react-spring/types": "~9.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || >=17.0.0 || >=18.0.0" + } + }, + "node_modules/@react-spring/types": { + "version": "9.4.5", + "license": "MIT" + }, + "node_modules/@react-spring/web": { + "version": "9.4.5", + "license": "MIT", + "dependencies": { + "@react-spring/animated": "~9.4.5", + "@react-spring/core": "~9.4.5", + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || >=17.0.0 || >=18.0.0", + "react-dom": "^16.8.0 || >=17.0.0 || >=18.0.0" + } + }, + "node_modules/@samverschueren/stream-to-observable": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "any-observable": "^0.3.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "rxjs": { + "optional": true + }, + "zen-observable": { + "optional": true + } + } + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@storybook/addon-actions": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-backgrounds": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-controls": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/node-logger": "6.5.8", + "@storybook/store": "6.5.8", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-docs": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.8", + "@storybook/mdx1-csf": "^0.0.1", + "@storybook/node-logger": "6.5.8", + "@storybook/postinstall": "6.5.8", + "@storybook/preview-web": "6.5.8", + "@storybook/source-loader": "6.5.8", + "@storybook/store": "6.5.8", + "@storybook/theming": "6.5.8", + "babel-loader": "^8.0.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/mdx2-csf": "^0.0.3", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@storybook/mdx2-csf": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-essentials": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addon-actions": "6.5.8", + "@storybook/addon-backgrounds": "6.5.8", + "@storybook/addon-controls": "6.5.8", + "@storybook/addon-docs": "6.5.8", + "@storybook/addon-measure": "6.5.8", + "@storybook/addon-outline": "6.5.8", + "@storybook/addon-toolbars": "6.5.8", + "@storybook/addon-viewport": "6.5.8", + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/node-logger": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.9.6" + }, + "peerDependenciesMeta": { + "@storybook/angular": { + "optional": true + }, + "@storybook/builder-manager4": { + "optional": true + }, + "@storybook/builder-manager5": { + "optional": true + }, + "@storybook/builder-webpack4": { + "optional": true + }, + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/html": { + "optional": true + }, + "@storybook/vue": { + "optional": true + }, + "@storybook/vue3": { + "optional": true + }, + "@storybook/web-components": { + "optional": true + }, + "lit": { + "optional": true + }, + "lit-html": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "svelte": { + "optional": true + }, + "sveltedoc-parser": { + "optional": true + }, + "vue": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-links": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.8", + "@types/qs": "^6.9.5", + "core-js": "^3.8.2", + "global": "^4.4.0", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-measure": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-outline": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-toolbars": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-viewport": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addons": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/api": "6.5.8", + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.8", + "@storybook/theming": "6.5.8", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/api": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.8", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/api/node_modules/@storybook/semver": { + "version": "7.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/api/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/api/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/api/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/api/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/channel-postmessage": "6.5.8", + "@storybook/channels": "6.5.8", + "@storybook/client-api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/node-logger": "6.5.8", + "@storybook/preview-web": "6.5.8", + "@storybook/router": "6.5.8", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.8", + "@storybook/theming": "6.5.8", + "@storybook/ui": "6.5.8", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.2.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@storybook/semver": { + "version": "7.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/@storybook/semver/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/acorn": { + "version": "8.7.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/cacache": { + "version": "15.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "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/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "engines": { + "node": ">=6.11.5", + "yarn": ">=1.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/@storybook/builder-webpack4/node_modules/serialize-javascript": { + "version": "5.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/ssri": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/terser": { + "version": "5.14.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/builder-webpack4/node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/channel-postmessage": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^6.0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/channel-websocket": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "core-js": "^3.8.2", + "global": "^4.4.0", + "telejson": "^6.0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/channels": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/client-api": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/channel-postmessage": "6.5.8", + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.8", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/client-logger": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/components": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.8", + "@types/react-syntax-highlighter": "11.0.5", + "core-js": "^3.8.2", + "qs": "^6.10.0", + "react-syntax-highlighter": "^15.4.5", + "regenerator-runtime": "^0.13.7", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/core": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/core-client": "6.5.8", + "@storybook/core-server": "6.5.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "webpack": "*" + }, + "peerDependenciesMeta": { + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/manager-webpack5": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-client": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/channel-postmessage": "6.5.8", + "@storybook/channel-websocket": "6.5.8", + "@storybook/client-api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/preview-web": "6.5.8", + "@storybook/store": "6.5.8", + "@storybook/ui": "6.5.8", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "webpack": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-private-property-in-object": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.5.8", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.7", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-common/node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "dev": true, + "license": "MIT", + "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/@storybook/core-common/node_modules/@storybook/semver": { + "version": "7.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/core-common/node_modules/@storybook/semver/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/core-common/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@storybook/core-common/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/@storybook/core-common/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/core-common/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/core-common/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-common/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-common/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-events": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^3.8.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-webpack4": "6.5.8", + "@storybook/core-client": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/csf-tools": "6.5.8", + "@storybook/manager-webpack4": "6.5.8", + "@storybook/node-logger": "6.5.8", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.8", + "@storybook/telemetry": "6.5.8", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.2", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "globby": "^11.0.2", + "ip": "^2.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "webpack": "4", + "ws": "^8.2.3", + "x-default-browser": "^0.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/manager-webpack5": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/core-server/node_modules/@storybook/semver": { + "version": "7.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/core-server/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/core-server/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/@storybook/core-server/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/core-server/node_modules/commander": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/core-server/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@storybook/core-server/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-server/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/@storybook/csf-tools": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/mdx2-csf": "^0.0.3" + }, + "peerDependenciesMeta": { + "@storybook/mdx2-csf": { + "optional": true + } + } + }, + "node_modules/@storybook/docs-tools": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.8", + "core-js": "^3.8.2", + "doctrine": "^3.0.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager-webpack4": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.5.8", + "@storybook/core-client": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/node-logger": "6.5.8", + "@storybook/theming": "6.5.8", + "@storybook/ui": "6.5.8", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.7", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^6.0.8", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/acorn": { + "version": "8.7.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/cacache": { + "version": "15.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/@storybook/manager-webpack4/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/manager-webpack4/node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "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/@storybook/manager-webpack4/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/@storybook/manager-webpack4/node_modules/serialize-javascript": { + "version": "5.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/ssri": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/terser": { + "version": "5.14.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/manager-webpack4/node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/mdx1-csf": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + } + }, + "node_modules/@storybook/mdx1-csf/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/mdx1-csf/node_modules/loader-utils": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/@storybook/node-logger": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/node-logger/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/node-logger/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/@storybook/node-logger/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/node-logger/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/node-logger/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/node-logger/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/postinstall": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^3.8.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preview-web": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/channel-postmessage": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.8", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/react": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@storybook/addons": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.8", + "@storybook/node-logger": "6.5.8", + "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.8", + "@types/estree": "^0.0.51", + "@types/node": "^14.14.20 || ^16.0.0", + "@types/webpack-env": "^1.16.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-react-docgen": "^4.2.1", + "core-js": "^3.8.2", + "escodegen": "^2.0.0", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.4", + "react-refresh": "^0.11.0", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": ">=4.43.0 <6.0.0" + }, + "bin": { + "build-storybook": "bin/build.js", + "start-storybook": "bin/index.js", + "storybook-server": "bin/index.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.11.5", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "require-from-string": "^2.0.2" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@storybook/builder-webpack4": { + "optional": true + }, + "@storybook/builder-webpack5": { + "optional": true + }, + "@storybook/manager-webpack4": { + "optional": true + }, + "@storybook/manager-webpack5": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin": { + "version": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.1.1", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "typescript": ">= 3.x", + "webpack": ">= 4" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "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/@storybook/react-docgen-typescript-plugin/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react/node_modules/@storybook/semver": { + "version": "7.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/react/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/react/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/react/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/react/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/router": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/source-loader": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/source-loader/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@storybook/source-loader/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/source-loader/node_modules/loader-utils": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/@storybook/store": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "slash": "^3.0.0", + "stable": "^0.1.8", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/telemetry": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "6.5.8", + "@storybook/core-common": "6.5.8", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "isomorphic-unfetch": "^3.1.0", + "nanoid": "^3.3.1", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/@storybook/telemetry/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/telemetry/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/telemetry/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/telemetry/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/theming": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/client-logger": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/ui": { + "version": "6.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/router": "6.5.8", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/ui/node_modules/@storybook/semver": { + "version": "7.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/ui/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/ui/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/ui/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/ui/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@styled-system/background": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/border": { + "version": "5.1.5", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/color": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/core": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1" + } + }, + "node_modules/@styled-system/css": { + "version": "5.1.5", + "license": "MIT" + }, + "node_modules/@styled-system/flexbox": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/grid": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/layout": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/position": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/shadow": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/space": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/typography": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/variant": { + "version": "5.1.5", + "license": "MIT", + "dependencies": { + "@styled-system/core": "^5.1.2", + "@styled-system/css": "^5.1.5" + } + }, + "node_modules/@tlon/indigo-dark": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/@tlon/indigo-light": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/@tlon/indigo-react": { + "version": "1.2.27", + "license": "MIT", + "dependencies": { + "@reach/menu-button": "^0.10.5", + "tslib": "^2.0.1" + }, + "peerDependencies": { + "formik": "^2.1.5", + "react": "^17", + "react-dom": "^17", + "styled-components": "^5.1.1", + "styled-system": "^5.1.5" + } + }, + "node_modules/@tlon/sigil-js": { + "version": "1.4.5", + "license": "MIT", + "dependencies": { + "invariant": "^2.2.4", + "svgson": "^4.0.0", + "transformation-matrix": "2.1.1" + }, + "peerDependencies": { + "react": "^16 || ^17" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.19", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/is-function": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.14.182", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "16.11.39", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node-fetch": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/npmlog": { + "version": "4.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.6.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pretty-hrtime": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "16.14.26", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "16.9.16", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "^16" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/react-syntax-highlighter": { + "version": "11.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "license": "MIT" + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/styled-components": { + "version": "5.1.25", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/styled-system": { + "version": "5.1.15", + "dev": true, + "license": "MIT", + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@types/tapable": { + "version": "1.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uglify-js": { + "version": "3.16.0", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/@types/warning": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/@types/webpack": { + "version": "4.41.32", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/webpack-env": { + "version": "1.17.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/webpack-sources": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.4", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/yargs": { + "version": "15.0.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yoga-layout": { + "version": "1.9.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yup": { + "version": "0.29.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@urbit/http-api": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.1.1.tgz", + "integrity": "sha512-0ZXbBkSqCqFQAYeyjz/2uYlwp6H2UqwPsDS3SUfOa/M/nDCB++7xIWEf1+lR3gwpNyZfEnxrI20IGS5jELIapw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@microsoft/fetch-event-source": "^2.0.0", + "browser-or-node": "^1.3.0", + "core-js": "^3.19.1" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "license": "ISC" + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/airbnb-js-shims": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "license": "MIT", + "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-errors": { + "version": "1.0.1", + "license": "MIT", + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-to-html": { + "version": "0.6.15", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^2.0.0" + }, + "bin": { + "ansi-to-html": "bin/ansi-to-html" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/any-ascii": { + "version": "0.1.7", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/any-observable": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "devOptional": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-root-dir": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/aproba": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-hidden": { + "version": "1.1.3", + "license": "ISC", + "dependencies": { + "tslib": "^1.0.0" + }, + "engines": { + "node": ">=8.5.0" + } + }, + "node_modules/aria-hidden/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-parallel": { + "version": "0.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/array-series": { + "version": "0.1.5", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.map": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "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.reduce": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "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/arrify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/assert": { + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "license": "ISC" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "license": "MIT", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types": { + "version": "0.14.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/async-each": { + "version": "1.0.3", + "devOptional": true, + "license": "MIT" + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/async-retry": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/auto-bind": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.8", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/aws-sdk": { + "version": "2.1152.0", + "license": "Apache-2.0", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/querystring": { + "version": "0.2.0", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "dev": true, + "license": "MIT" + }, + "node_modules/axios": { + "version": "0.27.2", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/babel-jest": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.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-loader/node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "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/babel-loader/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-add-react-displayname": { + "version": "0.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "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": "26.6.2", + "dev": true, + "license": "MIT", + "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.14.2" + } + }, + "node_modules/babel-plugin-lodash": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0-beta.49", + "@babel/types": "^7.0.0-beta.49", + "glob": "^7.1.1", + "lodash": "^4.17.10", + "require-package-name": "^2.0.1" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-react-docgen": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.0" + } + }, + "node_modules/babel-plugin-root-import": { + "version": "6.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slash": "^3.0.0" + } + }, + "node_modules/babel-plugin-styled-components": { + "version": "2.0.7", + "license": "MIT", + "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", + "picomatch": "^2.3.0" + }, + "peerDependencies": { + "styled-components": ">= 2" + } + }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "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": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base": { + "version": "0.11.2", + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/bellajs": { + "version": "11.0.3", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/better-opn": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "open": "^7.0.3" + }, + "engines": { + "node": ">8.0.0" + } + }, + "node_modules/better-opn/node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/better-opn/node_modules/open": { + "version": "7.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.10.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/bonjour": { + "version": "3.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/boxen": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/boxen/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/boxen/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/boxen/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bplist-parser": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "big-integer": "^1.6.7" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/browser-or-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", + "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "license": "MIT", + "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", + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "license": "MIT", + "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", + "license": "MIT", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "license": "ISC", + "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/bn.js": { + "version": "5.2.1", + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "license": "MIT", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.20.4", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/browserslist/node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/bser": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c8": { + "version": "7.11.3", + "dev": true, + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/c8/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "5.1.1", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/has-value": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/has-values": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/is-number": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/kind-of": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/unset-value": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/caller-callsite": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/caller-path": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-callsite": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelcase-keys": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelize": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001352", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/ccount": { + "version": "1.1.0", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities-html4": { + "version": "1.1.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/charcodes": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "license": "ISC" + }, + "node_modules/chromatic": { + "version": "5.10.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@actions/core": "^1.5.0", + "@actions/github": "^5.0.0", + "@babel/preset-typescript": "^7.15.0", + "@babel/runtime": "^7.15.3", + "@chromaui/localtunnel": "^2.0.3", + "async-retry": "^1.3.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "dotenv": "^8.2.0", + "env-ci": "^5.0.2", + "esm": "^3.2.25", + "execa": "^5.0.0", + "fake-tag": "^2.0.0", + "fs-extra": "^10.0.0", + "https-proxy-agent": "^5.0.0", + "jsonfile": "^6.0.1", + "junit-report-builder": "2.1.0", + "listr": "0.14.3", + "meow": "^8.0.0", + "no-proxy": "^1.0.3", + "node-ask": "^1.0.1", + "node-fetch": "2.6.0", + "node-loggly-bulk": "^2.2.4", + "p-limit": "3.1.0", + "picomatch": "2.2.2", + "pkg-up": "^3.1.0", + "pluralize": "^8.0.0", + "progress-stream": "^2.0.0", + "semver": "^7.3.5", + "slash": "^3.0.0", + "string-argv": "^0.3.1", + "strip-ansi": "6.0.0", + "tmp-promise": "3.0.2", + "tree-kill": "^1.2.2", + "ts-dedent": "^1.0.0", + "util-deprecate": "^1.0.2", + "uuid": "^8.3.2", + "yarn-or-npm": "^3.0.1" + }, + "bin": { + "chroma": "bin/register.js", + "chromatic": "bin/register.js", + "chromatic-cli": "bin/register.js" + } + }, + "node_modules/chromatic/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chromatic/node_modules/camelcase-keys": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromatic/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/chromatic/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chromatic/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/chromatic/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/chromatic/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "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/chromatic/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chromatic/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromatic/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromatic/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromatic/node_modules/map-obj": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromatic/node_modules/meow": { + "version": "8.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromatic/node_modules/node-fetch": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/chromatic/node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromatic/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/picomatch": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/chromatic/node_modules/redent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chromatic/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/strip-ansi": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/trim-newlines": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chromatic/node_modules/ts-dedent": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/chromatic/node_modules/type-fest": { + "version": "0.18.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromatic/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/chromatic/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/chrome-launcher": { + "version": "0.13.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^1.0.5", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^0.5.3", + "rimraf": "^3.0.2" + } + }, + "node_modules/chrome-launcher/node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chrome-launcher/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/chrome-remote-interface": { + "version": "0.29.0", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "2.11.x", + "ws": "^7.2.0" + }, + "bin": { + "chrome-remote-interface": "bin/client.js" + } + }, + "node_modules/chrome-remote-interface/node_modules/commander": { + "version": "2.11.0", + "dev": true, + "license": "MIT" + }, + "node_modules/chrome-remote-interface/node_modules/ws": { + "version": "7.5.8", + "dev": true, + "license": "MIT", + "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/chrome-trace-event": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/cjs-module-lexer": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/class-utils": { + "version": "0.3.6", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/classnames": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "4.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clean-webpack-plugin": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + }, + "engines": { + "node": ">=8.9.0" + }, + "peerDependencies": { + "webpack": "*" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3": { + "version": "0.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-excerpt": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codemirror": { + "version": "5.65.5", + "license": "MIT" + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-diff": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "license": "MIT" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/commondir": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-to-spaces": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-concurrently/node_modules/aproba": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.22.8", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.22.8", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.20.3", + "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", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-js-pure": { + "version": "3.22.8", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cp-file": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cp-file/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy": { + "version": "8.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cpy/node_modules/globby": { + "version": "9.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cpy/node_modules/p-map": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cpy/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "license": "MIT", + "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", + "license": "MIT", + "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-env": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-env/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-env/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-env/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-env/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-env/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-loader": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "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", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.0", + "license": "MIT" + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cyclist": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-urls/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "8.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/date-fns": { + "version": "1.30.1", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "0.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-rename-keys": { + "version": "0.2.1", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2", + "rename-keys": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deepmerge": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bplist-parser": "^0.1.0", + "meow": "^3.1.0", + "untildify": "^2.0.0" + }, + "bin": { + "default-browser-id": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "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/globby": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/des.js": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/detect-package-manager": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detect-package-manager/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/detect-package-manager/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "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/detect-package-manager/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/detect-package-manager/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/detect-package-manager/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-package-manager/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-package-manager/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-package-manager/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-package-manager/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/detect-port": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/dir-glob": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dir-glob/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-packet/node_modules/ip": { + "version": "1.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "license": "MIT", + "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/dom-walk": { + "version": "0.1.2", + "dev": true + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "license": "BSD-2-Clause", + "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/dot-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.152", + "dev": true, + "license": "ISC" + }, + "node_modules/elegant-spinner": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", + "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/emittery": { + "version": "0.7.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/endent": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "license": "MIT", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/enhanced-resolve/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/enhanced-resolve/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-ci": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "fromentries": "^1.3.2", + "java-properties": "^1.0.0" + }, + "engines": { + "node": ">=10.17" + } + }, + "node_modules/env-ci/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/env-ci/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "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/env-ci/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/env-ci/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/env-ci/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/env-ci/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/env-ci/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/env-ci/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/es-get-iterator": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "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/es5-shim": { + "version": "4.6.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/es6-shim": { + "version": "0.35.6", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "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/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "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": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "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.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "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-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "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/eslint/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-to-babel": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "2.0.3", + "license": "MIT" + }, + "node_modules/events": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/eventsource": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/express": { + "version": "4.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/qs": { + "version": "6.10.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fake-tag": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jaydenseric" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "2.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-json-parse": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.13.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fetch-retry": { + "version": "5.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "license": "ISC" + }, + "node_modules/figures": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/file-saver": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/file-system-cache": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^10.1.0", + "ramda": "^0.28.0" + } + }, + "node_modules/file-system-cache/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "devOptional": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/find-yarn-workspace-root/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "dev": true, + "license": "ISC" + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/flush-write-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fn-name": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/deepmerge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/format": { + "version": "0.2.2", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/formik": { + "version": "2.2.9", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "license": "Apache-2.0", + "dependencies": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/formik/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fromentries": { + "version": "1.3.2", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "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-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuzzy": { + "version": "0.1.3", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/github-slugger": { + "version": "1.4.0", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "devOptional": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-promise": { + "version": "3.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@types/glob": "*" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "glob": "*" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "dev": true, + "license": "BSD" + }, + "node_modules/global": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-modules/node_modules/global-prefix": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-modules/node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/globby/node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/fast-glob": { + "version": "3.2.11", + "dev": true, + "license": "MIT", + "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.6.0" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globby/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/gm": { + "version": "1.23.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-parallel": "~0.1.3", + "array-series": "~0.1.5", + "cross-spawn": "^4.0.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/gm/node_modules/cross-spawn": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "node_modules/gm/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/gm/node_modules/lru-cache": { + "version": "4.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/gm/node_modules/yallist": { + "version": "2.1.2", + "dev": true, + "license": "ISC" + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/growly": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-glob": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-glob": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-glob/node_modules/is-glob": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/has-value": { + "version": "0.3.1", + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "license": "MIT", + "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", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-to-hyperscript/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-to-hyperscript/node_modules/property-information": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-to-hyperscript/node_modules/space-separated-tokens": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-to-hyperscript/node_modules/unist-util-is": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/property-information": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw/node_modules/unist-util-position": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5/node_modules/property-information": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hastscript/node_modules/property-information": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/hastscript/node_modules/space-separated-tokens": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/history": { + "version": "4.10.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "license": "MIT", + "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", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/html-tags": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-to-react": { + "version": "1.4.8", + "license": "MIT", + "dependencies": { + "domhandler": "^4.0", + "htmlparser2": "^7.0", + "lodash.camelcase": "^4.3.0", + "ramda": "^0.28.0" + }, + "peerDependencies": { + "react": "^16.0 || ^17.0" + } + }, + "node_modules/html-to-react/node_modules/entities": { + "version": "3.0.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-to-react/node_modules/htmlparser2": { + "version": "7.2.0", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "4.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.6", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "dev": true, + "license": "MIT", + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-proxy/node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "4.1.1", + "license": "ISC", + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/idb": { + "version": "6.1.5", + "license": "ISC" + }, + "node_modules/ieee754": { + "version": "1.1.13", + "license": "BSD-3-Clause" + }, + "node_modules/iferr": { + "version": "0.1.5", + "license": "MIT" + }, + "node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.15", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-jsx": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "caller-path": "^3.0.1", + "find-cache-dir": "^3.2.0", + "make-dir": "^3.0.2", + "resolve-from": "^3.0.0", + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/import-jsx/node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "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/import-jsx/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-jsx/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-jsx/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-jsx/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-jsx/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-jsx/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-jsx/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-jsx/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/ink": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "auto-bind": "4.0.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "code-excerpt": "^3.0.0", + "indent-string": "^4.0.0", + "is-ci": "^2.0.0", + "lodash": "^4.17.20", + "patch-console": "^1.0.0", + "react-devtools-core": "^4.19.1", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "stack-utils": "^2.0.2", + "string-width": "^4.2.2", + "type-fest": "^0.12.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "ws": "^7.5.5", + "yoga-layout-prebuilt": "^1.9.6" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": ">=16.8.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/ink/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ink/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/ink/node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ink/node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ink/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/ink/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ink/node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ink/node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ink/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ink/node_modules/type-fest": { + "version": "0.12.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ink/node_modules/ws": { + "version": "7.5.8", + "dev": true, + "license": "MIT", + "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/inline-style-parser": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumeric": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "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-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "devOptional": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "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-buffer": { + "version": "1.1.6", + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-dom": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-object": "^1.0.1", + "is-window": "^1.0.2" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-observable": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "symbol-observable": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-promise": { + "version": "2.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-window": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.0", + "dev": true, + "license": "BSD-3-Clause", + "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-report": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "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/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.4", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterate-iterator": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/iterate-value": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/java-properties": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/jest": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/human-signals": { + "version": "1.1.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-config": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/deepmerge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "26.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-node": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.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": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-haste-map/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-runtime/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-watcher/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/jest/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/jest/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/jest-cli": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest/node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jmespath": { + "version": "0.16.0", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/joi": { + "version": "17.6.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "16.7.0", + "dev": true, + "license": "MIT", + "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/jsdom/node_modules/acorn": { + "version": "8.7.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsdom/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "8.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.8", + "dev": true, + "license": "MIT", + "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/jsesc": { + "version": "2.5.2", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/junit-report-builder": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "0.0.2", + "lodash": "^4.17.15", + "make-dir": "^1.3.0", + "xmlbuilder": "^10.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/junit-report-builder/node_modules/make-dir": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/junit-report-builder/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/junit-report-builder/node_modules/xmlbuilder": { + "version": "10.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/kind-of": { + "version": "3.2.2", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/lazy-universal-dotenv": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.1.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=6.0.0", + "yarn": ">=1.0.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "11.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "2.1.0", + "colorette": "^1.4.0", + "commander": "^8.2.0", + "cosmiconfig": "^7.0.1", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "execa": "^5.1.1", + "listr2": "^3.12.2", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "3.3.0", + "supports-color": "8.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/lint-staged/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/lint-staged/node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "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/lint-staged/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/listr": { + "version": "0.14.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/listr-silent-renderer": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/listr-update-renderer": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "listr": "^0.14.2" + } + }, + "node_modules/listr-update-renderer/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/ansi-styles": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/chalk": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "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/listr-update-renderer/node_modules/indent-string": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/listr-update-renderer/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/supports-color": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/listr-verbose-renderer": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/listr-verbose-renderer/node_modules/figures": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/listr/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/listr2": { + "version": "3.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/colorette": { + "version": "2.0.17", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/log-update": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/rxjs": { + "version": "7.5.5", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lit": { + "version": "2.2.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-element": { + "version": "3.2.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-html": { + "version": "2.2.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "license": "MIT", + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "license": "MIT" + }, + "node_modules/lodash.chunk": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "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/log-symbols/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/log-update": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loglevel": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loki": { + "version": "0.28.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/integration-react": "^0.28.0", + "@loki/integration-react-native": "^0.28.0", + "@loki/integration-vue": "^0.28.0", + "@loki/runner": "^0.28.1", + "@loki/target-chrome-app": "^0.28.0", + "@loki/target-chrome-docker": "^0.28.1", + "@loki/target-native-android-emulator": "^0.28.0", + "@loki/target-native-ios-simulator": "^0.28.0" + }, + "bin": { + "loki": "bin/loki" + }, + "peerDependencies": { + "@storybook/react": "^5 || ^6" + }, + "peerDependenciesMeta": { + "@storybook/react": { + "optional": true + } + } + }, + "node_modules/loki/node_modules/@loki/runner": { + "version": "0.28.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@loki/core": "^0.28.0", + "@loki/diff-graphics-magick": "^0.28.0", + "@loki/diff-looks-same": "^0.28.0", + "@loki/diff-pixelmatch": "^0.28.0", + "@loki/target-chrome-app": "^0.28.0", + "@loki/target-chrome-aws-lambda": "^0.28.0", + "@loki/target-chrome-docker": "^0.28.1", + "@loki/target-native-android-emulator": "^0.28.0", + "@loki/target-native-ios-simulator": "^0.28.0", + "async": "^3.2.0", + "chalk": "^4.1.0", + "ci-info": "^2.0.0", + "cosmiconfig": "^7.0.0", + "fs-extra": "^9.1.0", + "import-jsx": "^4.0.0", + "ink": "^3.0.8", + "minimist": "^1.2.0", + "ramda": "^0.27.1", + "react": "^16.14.0", + "transliteration": "^2.2.0" + }, + "bin": { + "loki": "bin/loki" + } + }, + "node_modules/loki/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/loki/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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/loki/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/loki/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/loki/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/loki/node_modules/ramda": { + "version": "0.27.2", + "dev": true, + "license": "MIT" + }, + "node_modules/loki/node_modules/react": { + "version": "16.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loki/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/looks-same": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-diff": "^1.1.0", + "concat-stream": "^1.6.2", + "lodash": "^4.17.3", + "parse-color": "^1.0.0", + "pngjs": "^3.3.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowlight": { + "version": "1.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-or-similar": { + "version": "1.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/map-visit": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/marky": { + "version": "1.2.4", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/md5.js": { + "version": "1.3.5", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdast-add-list-metadata": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "unist-util-visit-parents": "1.1.2" + } + }, + "node_modules/mdast-add-list-metadata/node_modules/unist-util-visit-parents": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-compact": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-compact/node_modules/unist-util-is": { + "version": "4.1.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-compact/node_modules/unist-util-visit": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-compact/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.4", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoizerific": { + "version": "1.11.3", + "dev": true, + "license": "MIT", + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/memory-fs/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/meow": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/path-type": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/read-pkg": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/microevent.ts": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/micromark": { + "version": "2.11.4", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces": { + "version": "2.3.2", + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/to-regex-range": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-create-react-context": { + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" + }, + "peerDependencies": { + "prop-types": "^15.0.0", + "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "license": "MIT" + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minimist-options/node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "3.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.3", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/moment-locales-webpack-plugin": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.difference": "^4.5.0" + }, + "peerDependencies": { + "moment": "^2.8.0", + "webpack": "^1 || ^2 || ^3 || ^4 || ^5" + } + }, + "node_modules/mousetrap": { + "version": "1.6.5", + "license": "Apache-2.0 WITH LLVM-exception" + }, + "node_modules/mousetrap-global-bind": { + "version": "1.1.0", + "license": "Apache-2.0", + "peerDependencies": { + "mousetrap": "^1.6.0" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/aproba": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "license": "MIT" + }, + "node_modules/nested-error-stacks": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/no-proxy": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "wildcard": "^1.1.2" + }, + "optionalDependencies": { + "url-parse": "^1.2.0" + } + }, + "node_modules/node-ask": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/node-dir": { + "version": "0.1.17", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/events": { + "version": "3.3.0", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/node-libs-browser/node_modules/querystring": { + "version": "0.2.0", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/node-libs-browser/node_modules/url": { + "version": "0.11.0", + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/node-loggly-bulk": { + "version": "2.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "json-stringify-safe": "5.0.x", + "moment": "^2.18.1", + "request": ">=2.76.0 <3.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/node-notifier": { + "version": "8.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "license": "BSD-3-Clause" + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "dev": true, + "license": "MIT" + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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.getownpropertydescriptors": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "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/objectorarray": { + "version": "1.0.5", + "dev": true, + "license": "ISC" + }, + "node_modules/obuf": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/oembed-parser": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "axios": "^0.27.2", + "bellajs": "^11.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/omit-deep": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.1", + "unset-value": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/opn": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "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/os-browserify": { + "version": "0.3.0", + "license": "MIT" + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osnap": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^0.6.3", + "minimist": "^1.2.0", + "pify": "^3.0.0", + "tempfile": "^2.0.0", + "which": "^1.2.14" + }, + "bin": { + "osnap": "bin/osnap" + } + }, + "node_modules/osnap/node_modules/cross-spawn": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/osnap/node_modules/execa": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/osnap/node_modules/get-stream": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/osnap/node_modules/lru-cache": { + "version": "4.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/osnap/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/osnap/node_modules/yallist": { + "version": "2.1.2", + "dev": true, + "license": "ISC" + }, + "node_modules/p-all": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-all/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-event": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-filter": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-filter/node_modules/p-map": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "license": "(MIT AND Zlib)" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/parallel-transform/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "license": "ISC", + "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/parse-color": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "~0.5.0" + } + }, + "node_modules/parse-color/node_modules/color-convert": { + "version": "0.5.3", + "dev": true + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/character-entities": { + "version": "1.2.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-console": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/patch-package": { + "version": "6.4.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/fs-extra": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/patch-package/node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/patch-package/node_modules/open": { + "version": "7.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/patch-package/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "devOptional": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "license": "MIT", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "0.2.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pixelmatch": { + "version": "5.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "pngjs": "^6.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/pkg-dir": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ts-pnp": "^1.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/polished": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "7.0.39", + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^7.0.26" + } + }, + "node_modules/postcss-loader": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-loader/node_modules/loader-utils": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/postcss-loader/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "license": "ISC", + "dependencies": { + "postcss": "^7.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "license": "MIT", + "dependencies": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-scope": { + "version": "2.2.0", + "license": "ISC", + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-values": { + "version": "3.0.0", + "license": "ISC", + "dependencies": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pretty-format/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/prismjs": { + "version": "1.28.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/progress-stream": { + "version": "2.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "speedometer": "~1.0.0", + "through2": "~2.0.3" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/promise.allsettled": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "array.prototype.map": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "iterate-value": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/promise.prototype.finally": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "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/prompts": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prompts/node_modules/kleur": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-expr": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.8.0", + "dev": true, + "license": "MIT" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "license": "MIT", + "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/pump": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.10.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.1", + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ramda": { + "version": "0.28.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/raw-loader/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/raw-loader/node_modules/loader-utils": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/raw-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/react": { + "version": "17.0.2", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-codemirror2-react-17": { + "version": "1.0.0", + "license": "MIT", + "peerDependencies": { + "codemirror": "5.x", + "react": "^17.0.1" + } + }, + "node_modules/react-devtools-core": { + "version": "4.24.7", + "dev": true, + "license": "MIT", + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.8", + "dev": true, + "license": "MIT", + "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/react-docgen": { + "version": "5.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "bin": { + "react-docgen": "bin/react-docgen.js" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/react-docgen-typescript": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">= 4.3.x" + } + }, + "node_modules/react-docgen/node_modules/strip-indent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-element-to-jsx-string": { + "version": "14.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "17.0.2" + }, + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/is-plain-object": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "license": "MIT", + "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-helmet/node_modules/react-fast-compare": { + "version": "3.2.0", + "license": "MIT" + }, + "node_modules/react-inspector": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/react-markdown": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.3", + "@types/unist": "^2.0.3", + "html-to-react": "^1.3.4", + "mdast-add-list-metadata": "1.0.1", + "prop-types": "^15.7.2", + "react-is": "^16.8.6", + "remark-parse": "^9.0.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/react-markdown/node_modules/unist-util-is": { + "version": "4.1.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/unist-util-visit": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-markdown/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/react-oembed-container": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": "^16.2.0 || ^17.0.0", + "react-dom": "^16.2.0 || ^17.0.0" + } + }, + "node_modules/react-reconciler": { + "version": "0.26.2", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^17.0.2" + } + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.4", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.3", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "5.3.3", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.3", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.3", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-side-effect": { + "version": "2.1.1", + "license": "MIT", + "peerDependencies": { + "react": "^16.3.0 || ^17.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-syntax-highlighter": { + "version": "15.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.4.1", + "lowlight": "^1.17.0", + "prismjs": "^1.27.0", + "refractor": "^3.6.0" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/react-use-gesture": { + "version": "9.1.3", + "license": "MIT", + "peerDependencies": { + "react": ">= 16.8.0" + } + }, + "node_modules/react-virtuoso": { + "version": "0.20.3", + "license": "MIT", + "dependencies": { + "resize-observer-polyfill": "^1.5.1", + "tslib": "^1.11.1" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/react-virtuoso/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/react-visibility-sensor": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "devOptional": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/redent": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redent/node_modules/indent-string": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/refractor": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.27.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/prismjs": { + "version": "1.27.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark": { + "version": "12.0.1", + "license": "MIT", + "dependencies": { + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-breaks": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-breaks/node_modules/unist-util-is": { + "version": "4.1.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-breaks/node_modules/unist-util-visit": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-breaks/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-disable-tokenizers": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "clone": "^2.1.2" + } + }, + "node_modules/remark-external-links": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-external-links/node_modules/mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-external-links/node_modules/space-separated-tokens": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-external-links/node_modules/unist-util-is": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-external-links/node_modules/unist-util-visit": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-external-links/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/is-buffer": { + "version": "2.0.5", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/remark-mdx/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/remark-mdx/node_modules/remark-parse": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "9.0.0", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/unist-util-is": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/unist-util-visit": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark/node_modules/remark-parse": { + "version": "8.0.3", + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "devOptional": true, + "license": "ISC" + }, + "node_modules/rename-keys": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/renderkid": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/require-package-name": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/global-modules": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "dev": true, + "license": "MIT", + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/run-queue/node_modules/aproba": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/rxjs": { + "version": "6.6.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sane": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass": { + "version": "1.52.3", + "dev": true, + "license": "MIT", + "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": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "8.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.1", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.20.2", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "license": "MIT", + "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/select-hose": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "1.10.14", + "dev": true, + "license": "MIT", + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-favicon": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-favicon/node_modules/ms": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-favicon/node_modules/safe-buffer": { + "version": "5.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/set-value": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "dev": true, + "license": "MIT" + }, + "node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "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.7", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "0.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "license": "MIT", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/kind-of": { + "version": "6.0.3", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "eventsource": "^2.0.2", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://tidelift.com/funding/github/npm/sockjs-client" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/speedometer": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/split-string": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "6.0.2", + "license": "ISC", + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/stack-generator": { + "version": "2.0.10", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "license": "MIT" + }, + "node_modules/stacktrace-gps": { + "version": "3.1.2", + "license": "MIT", + "dependencies": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + } + }, + "node_modules/stacktrace-gps/node_modules/source-map": { + "version": "0.5.6", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-js": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/store2": { + "version": "2.13.2", + "dev": true, + "license": "(MIT OR GPL-3.0)" + }, + "node_modules/storybook-addon-designs": { + "version": "6.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@figspec/react": "^1.0.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-browserify/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/stream-http/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/string-argv": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.7", + "dev": true, + "license": "MIT", + "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.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "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.padstart": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "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.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "dev": true, + "license": "BSD-2-Clause", + "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": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-loader/node_modules/json5": { + "version": "2.2.1", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/style-loader/node_modules/loader-utils": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/styled-components": { + "version": "5.3.5", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@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-system": { + "version": "5.1.5", + "license": "MIT", + "dependencies": { + "@styled-system/background": "^5.1.2", + "@styled-system/border": "^5.1.5", + "@styled-system/color": "^5.1.2", + "@styled-system/core": "^5.1.2", + "@styled-system/flexbox": "^5.1.2", + "@styled-system/grid": "^5.1.2", + "@styled-system/layout": "^5.1.2", + "@styled-system/position": "^5.1.2", + "@styled-system/shadow": "^5.1.2", + "@styled-system/space": "^5.1.2", + "@styled-system/typography": "^5.1.2", + "@styled-system/variant": "^5.1.5", + "object-assign": "^4.1.1" + } + }, + "node_modules/suncalc": { + "version": "1.9.0" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgson": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "deep-rename-keys": "^0.2.1", + "omit-deep": "0.3.0", + "xml-reader": "2.4.3" + } + }, + "node_modules/symbol-observable": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/symbol.prototype.description": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-symbol-description": "^1.0.0", + "has-symbols": "^1.0.2", + "object.getownpropertydescriptors": "^2.1.2" + }, + "engines": { + "node": ">= 0.11.15" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synchronous-promise": { + "version": "2.0.15", + "license": "BSD-3-Clause" + }, + "node_modules/tabbable": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/table": { + "version": "6.8.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "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/table/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/table/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/table/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/telejson": { + "version": "6.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" + } + }, + "node_modules/telejson/node_modules/isobject": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tempfile": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tempfile/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/tempy": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "del": "^6.0.0", + "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/del": { + "version": "6.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy/node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tempy/node_modules/temp-dir": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link/node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "4.8.0", + "license": "BSD-2-Clause", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "license": "MIT", + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "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", + "dev": true, + "license": "MIT" + }, + "node_modules/throat": { + "version": "5.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "license": "MIT", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tiny-invariant": { + "version": "1.2.0", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/transformation-matrix": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/transliteration": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yargs": "^16.1.0" + }, + "bin": { + "slugify": "dist/bin/slugify", + "transliterate": "dist/bin/transliterate" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim": { + "version": "0.0.1" + }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-mdast": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.3", + "@types/unist": "^2.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "0BSD" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "license": "MIT" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.16.0", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unfetch": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/unherit": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.2", + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-buffer": { + "version": "2.0.5", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-util-is": { + "version": "5.1.1", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-is": { + "version": "4.1.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-visit": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove/node_modules/unist-util-is": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "4.1.1", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/untildify": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/urbit-ob": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.8", + "lodash.chunk": "^4.2.0", + "lodash.isequal": "^4.5.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "license": "MIT" + }, + "node_modules/url": { + "version": "0.10.3", + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/json5": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/url-loader/node_modules/loader-utils": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "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/url-parse": { + "version": "1.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/querystring": { + "version": "0.2.0", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/use": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util": { + "version": "0.11.1", + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "license": "ISC" + }, + "node_modules/utila": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.0.0", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/uuid-browser": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/vfile": { + "version": "4.2.1", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile/node_modules/is-buffer": { + "version": "2.0.5", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wait-on": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^0.21.1", + "joi": "^17.3.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^6.6.3" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/wait-on/node_modules/axios": { + "version": "0.21.4", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "1.7.5", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "license": "ISC", + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "license": "MIT", + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "license": "MIT", + "optional": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "license": "MIT", + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { + "version": "2.0.1", + "license": "MIT", + "optional": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "license": "MIT", + "optional": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "license": "ISC", + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "license": "MIT", + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "license": "MIT", + "optional": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readable-stream": { + "version": "2.3.7", + "license": "MIT", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/watchpack-chokidar2/node_modules/string_decoder": { + "version": "1.1.1", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { + "version": "2.1.1", + "license": "MIT", + "optional": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "4.46.0", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "3.3.12", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "peerDependencies": { + "webpack": "4.x.x" + } + }, + "node_modules/webpack-cli/node_modules/ansi-regex": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/cliui": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/webpack-cli/node_modules/emoji-regex": { + "version": "7.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-cli/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/import-local": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/webpack-cli/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-cli/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/resolve-cwd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-cli/node_modules/string-width": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/supports-color": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/wrap-ansi": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-cli/node_modules/yargs": { + "version": "13.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/webpack-cli/node_modules/yargs-parser": { + "version": "13.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/emoji-regex": { + "version": "7.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/html-entities": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/import-local": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/ip": { + "version": "1.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-dev-server/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/querystring": { + "version": "0.2.0", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/webpack-dev-server/node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/resolve-cwd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/to-regex-range": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/url": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs": { + "version": "13.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs-parser": { + "version": "13.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-filter-warnings-plugin": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.3 < 5.0.0 || >= 5.10" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/webpack-hot-middleware": { + "version": "2.25.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "querystring": "^0.2.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-log/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.0.0" + } + }, + "node_modules/webpack-virtual-modules/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "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-module": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wildcard": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-cacheable-response": { + "version": "6.5.3", + "license": "MIT", + "dependencies": { + "workbox-core": "6.5.3" + } + }, + "node_modules/workbox-core": { + "version": "6.5.3", + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "6.5.3", + "license": "MIT", + "dependencies": { + "idb": "^6.1.4", + "workbox-core": "6.5.3" + } + }, + "node_modules/workbox-precaching": { + "version": "6.5.3", + "license": "MIT", + "dependencies": { + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" + } + }, + "node_modules/workbox-recipes": { + "version": "6.5.3", + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "6.5.3", + "workbox-core": "6.5.3", + "workbox-expiration": "6.5.3", + "workbox-precaching": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" + } + }, + "node_modules/workbox-routing": { + "version": "6.5.3", + "license": "MIT", + "dependencies": { + "workbox-core": "6.5.3" + } + }, + "node_modules/workbox-strategies": { + "version": "6.5.3", + "license": "MIT", + "dependencies": { + "workbox-core": "6.5.3" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "microevent.ts": "~0.1.1" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "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-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "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": "8.8.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/x-default-browser": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "bin": { + "x-default-browser": "bin/x-default-browser.js" + }, + "optionalDependencies": { + "default-browser-id": "^1.0.4" + } + }, + "node_modules/xml-lexer": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "eventemitter3": "^2.0.0" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/xml-reader": { + "version": "2.4.3", + "license": "MIT", + "dependencies": { + "eventemitter3": "^2.0.0", + "xml-lexer": "^0.2.2" + } + }, + "node_modules/xml2js": { + "version": "0.4.19", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "license": "ISC" + }, + "node_modules/yallist": { + "version": "4.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yarn-or-npm": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.5", + "pkg-dir": "^4.2.0" + }, + "bin": { + "yarn-or-npm": "bin/index.js", + "yon": "bin/index.js" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/yarn-or-npm/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yarn-or-npm/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yarn-or-npm/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yarn-or-npm/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yarn-or-npm/node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoga-layout-prebuilt": { + "version": "1.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yoga-layout": "1.9.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yup": { + "version": "0.29.3", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.5", + "fn-name": "~3.0.0", + "lodash": "^4.17.15", + "lodash-es": "^4.17.11", + "property-expr": "^2.0.2", + "synchronous-promise": "^2.0.13", + "toposort": "^2.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/zustand": { + "version": "3.7.2", + "license": "MIT", + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@actions/core": { + "version": "1.8.2", + "dev": true, + "requires": { + "@actions/http-client": "^2.0.1" + } + }, + "@actions/github": { + "version": "5.0.3", + "dev": true, + "requires": { + "@actions/http-client": "^2.0.1", + "@octokit/core": "^3.6.0", + "@octokit/plugin-paginate-rest": "^2.17.0", + "@octokit/plugin-rest-endpoint-methods": "^5.13.0" + } + }, + "@actions/http-client": { + "version": "2.0.1", + "dev": true, + "requires": { + "tunnel": "^0.0.6" + } + }, + "@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@babel/code-frame": { + "version": "7.16.7", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/compat-data": { + "version": "7.18.5", + "dev": true + }, + "@babel/core": { + "version": "7.18.5", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helpers": "^7.18.2", + "@babel/parser": "^7.18.5", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.5", + "@babel/types": "^7.18.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.18.2", + "requires": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.2", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.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.17.12", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "dev": true, + "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" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.2" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-function-name": { + "version": "7.17.9", + "requires": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.0", + "@babel/types": "^7.18.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.2", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.2", + "dev": true, + "requires": { + "@babel/types": "^7.18.2" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.16.7", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7" + }, + "@babel/helper-validator-option": { + "version": "7.16.7", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.16.8", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + } + }, + "@babel/helpers": { + "version": "7.18.2", + "dev": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + } + }, + "@babel/highlight": { + "version": "7.17.12", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.5" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.17.12" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.18.2", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.12", + "charcodes": "^0.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-default-from": "^7.16.7" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.17.10", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.17.12" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-remap-async-to-generator": "^7.16.8" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.4", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-replace-supers": "^7.18.2", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-flow": "^7.17.12" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.16.7", + "dev": true, + "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.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.2", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.5", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.16.7" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.0", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.18.5", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.2", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.18.4", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + } + }, + "@babel/preset-env": { + "version": "7.18.2", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.10", + "@babel/helper-compilation-targets": "^7.18.2", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.17.12", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-async-generator-functions": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-class-static-block": "^7.18.0", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-proposal-logical-assignment-operators": "^7.17.12", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.17.12", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.18.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.17.12", + "@babel/plugin-proposal-private-methods": "^7.17.12", + "@babel/plugin-proposal-private-property-in-object": "^7.17.12", + "@babel/plugin-proposal-unicode-property-regex": "^7.17.12", + "@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-import-assertions": "^7.17.12", + "@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.17.12", + "@babel/plugin-transform-async-to-generator": "^7.17.12", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.17.12", + "@babel/plugin-transform-classes": "^7.17.12", + "@babel/plugin-transform-computed-properties": "^7.17.12", + "@babel/plugin-transform-destructuring": "^7.18.0", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.17.12", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.18.1", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.17.12", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.18.0", + "@babel/plugin-transform-modules-commonjs": "^7.18.2", + "@babel/plugin-transform-modules-systemjs": "^7.18.0", + "@babel/plugin-transform-modules-umd": "^7.18.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.12", + "@babel/plugin-transform-new-target": "^7.17.12", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.17.12", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.18.0", + "@babel/plugin-transform-reserved-words": "^7.17.12", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.17.12", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.18.2", + "@babel/plugin-transform-typeof-symbol": "^7.17.12", + "@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.18.2", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-flow": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-flow-strip-types": "^7.17.12" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "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/preset-react": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-react-display-name": "^7.16.7", + "@babel/plugin-transform-react-jsx": "^7.17.12", + "@babel/plugin-transform-react-jsx-development": "^7.16.7", + "@babel/plugin-transform-react-pure-annotations": "^7.16.7" + } + }, + "@babel/preset-typescript": { + "version": "7.17.12", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.17.12" + } + }, + "@babel/register": { + "version": "7.17.7", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + } + }, + "@babel/runtime": { + "version": "7.18.3", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.16.7", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + } + }, + "@babel/traverse": { + "version": "7.18.5", + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.4", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@base2/pretty-print-object": { + "version": "1.0.1", + "dev": true + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@chromaui/localtunnel": { + "version": "2.0.4", + "dev": true, + "requires": { + "axios": "0.21.4", + "debug": "4.3.1", + "openurl": "1.1.1", + "yargs": "16.2.0" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "debug": { + "version": "4.3.1", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true, + "optional": true + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@emotion/is-prop-valid": { + "version": "1.1.3", + "requires": { + "@emotion/memoize": "^0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.5" + }, + "@emotion/stylis": { + "version": "0.8.5" + }, + "@emotion/unitless": { + "version": "0.7.5" + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "@figspec/components": { + "version": "1.0.1", + "dev": true, + "requires": { + "lit": "^2.1.3" + } + }, + "@figspec/react": { + "version": "1.0.1", + "dev": true, + "requires": { + "@figspec/components": "^1.0.0", + "@lit-labs/react": "^1.0.2" + } + }, + "@fingerprintjs/fingerprintjs": { + "version": "3.3.3", + "requires": { + "tslib": "^2.0.1" + } + }, + "@gar/promisify": { + "version": "1.1.3", + "dev": true + }, + "@hapi/hoek": { + "version": "9.3.0", + "dev": true + }, + "@hapi/topo": { + "version": "5.1.0", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "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" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "dev": true + }, + "@jest/console": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "26.6.3", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "@jest/environment": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "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": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "v8-to-istanbul": { + "version": "7.1.2", + "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.4", + "dev": true + } + } + } + } + }, + "@jest/source-map": { + "version": "26.6.2", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + } + }, + "@jest/transform": { + "version": "26.6.2", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.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": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "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", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7" + }, + "@jridgewell/set-array": { + "version": "1.1.1" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@lit-labs/react": { + "version": "1.0.4", + "dev": true + }, + "@lit/reactive-element": { + "version": "1.3.2", + "dev": true + }, + "@loki/browser": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/integration-core": "^0.28.0" + } + }, + "@loki/core": { + "version": "0.28.0", + "dev": true, + "requires": { + "shelljs": "^0.8.3" + } + }, + "@loki/diff-graphics-magick": { + "version": "0.28.0", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "gm": "^1.23.1" + } + }, + "@loki/diff-looks-same": { + "version": "0.28.0", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "looks-same": "^4.0.0" + } + }, + "@loki/diff-pixelmatch": { + "version": "0.28.0", + "dev": true, + "requires": { + "fs-extra": "^9.1.0", + "pixelmatch": "^5.2.0", + "pngjs": "^4.0.1" + }, + "dependencies": { + "pngjs": { + "version": "4.0.1", + "dev": true + } + } + }, + "@loki/integration-core": { + "version": "0.28.0", + "dev": true + }, + "@loki/integration-react": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/browser": "^0.28.0" + } + }, + "@loki/integration-react-native": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/integration-core": "^0.28.0" + } + }, + "@loki/integration-vue": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/browser": "^0.28.0" + } + }, + "@loki/target-chrome-app": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/target-chrome-core": "^0.28.0", + "chrome-launcher": "^0.13.4", + "chrome-remote-interface": "^0.29.0", + "debug": "^4.1.1" + } + }, + "@loki/target-chrome-aws-lambda": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/core": "^0.28.0", + "aws-sdk": "^2.840.0", + "debug": "^4.1.1" + } + }, + "@loki/target-chrome-core": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/browser": "^0.28.0", + "@loki/core": "^0.28.0", + "@loki/integration-core": "^0.28.0", + "debug": "^4.1.1" + } + }, + "@loki/target-chrome-docker": { + "version": "0.28.1", + "dev": true, + "requires": { + "@loki/core": "^0.28.0", + "@loki/target-chrome-core": "^0.28.0", + "chrome-remote-interface": "^0.29.0", + "debug": "^4.1.1", + "execa": "^5.0.0", + "fs-extra": "^9.1.0", + "get-port": "^5.1.1", + "wait-on": "^5.2.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "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" + } + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "@loki/target-native-android-emulator": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/core": "^0.28.0", + "@loki/target-native-core": "^0.28.0", + "fs-extra": "^9.1.0", + "osnap": "^1.1.0", + "tempy": "^1.0.0" + } + }, + "@loki/target-native-core": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/core": "^0.28.0", + "debug": "^4.1.1", + "ws": "^7.2.0" + }, + "dependencies": { + "ws": { + "version": "7.5.8", + "dev": true, + "requires": {} + } + } + }, + "@loki/target-native-ios-simulator": { + "version": "0.28.0", + "dev": true, + "requires": { + "@loki/core": "^0.28.0", + "@loki/target-native-core": "^0.28.0", + "fs-extra": "^9.1.0", + "osnap": "^1.1.0", + "tempy": "^1.0.0" + } + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "is-buffer": { + "version": "2.0.5", + "dev": true + }, + "json5": { + "version": "2.2.1", + "dev": true + }, + "mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "remark-parse": { + "version": "8.0.3", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "dev": true + }, + "unified": { + "version": "9.2.0", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unist-builder": { + "version": "2.0.3", + "dev": true + }, + "unist-util-generated": { + "version": "1.1.6", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "dev": true + }, + "unist-util-position": { + "version": "3.1.0", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "@mdx-js/react": { + "version": "1.6.22", + "dev": true, + "requires": {} + }, + "@mdx-js/util": { + "version": "1.6.22", + "dev": true + }, + "@microsoft/fetch-event-source": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", + "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + } + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@octokit/auth-token": { + "version": "2.5.0", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/core": { + "version": "3.6.0", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "dev": true + } + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "dev": true, + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "11.2.0", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "dev": true, + "requires": { + "@octokit/types": "^6.34.0" + } + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "dev": true, + "requires": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + } + }, + "@octokit/request": { + "version": "5.6.3", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "dev": true + } + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "6.34.0", + "dev": true, + "requires": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.7", + "dev": true, + "requires": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.8.1", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "source-map": { + "version": "0.7.4", + "dev": true + } + } + }, + "@radix-ui/primitive": { + "version": "0.1.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-compose-refs": { + "version": "0.1.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-context": { + "version": "0.1.1", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-dialog": { + "version": "0.1.7", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "0.1.0", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-context": "0.1.1", + "@radix-ui/react-dismissable-layer": "0.1.5", + "@radix-ui/react-focus-guards": "0.1.0", + "@radix-ui/react-focus-scope": "0.1.4", + "@radix-ui/react-id": "0.1.5", + "@radix-ui/react-portal": "0.1.4", + "@radix-ui/react-presence": "0.1.2", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-slot": "0.1.2", + "@radix-ui/react-use-controllable-state": "0.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "^2.4.0" + } + }, + "@radix-ui/react-dismissable-layer": { + "version": "0.1.5", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "0.1.0", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-use-body-pointer-events": "0.1.1", + "@radix-ui/react-use-callback-ref": "0.1.0", + "@radix-ui/react-use-escape-keydown": "0.1.0" + } + }, + "@radix-ui/react-focus-guards": { + "version": "0.1.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-focus-scope": { + "version": "0.1.4", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-use-callback-ref": "0.1.0" + } + }, + "@radix-ui/react-id": { + "version": "0.1.5", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "0.1.0" + } + }, + "@radix-ui/react-portal": { + "version": "0.1.4", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "0.1.4", + "@radix-ui/react-use-layout-effect": "0.1.0" + } + }, + "@radix-ui/react-presence": { + "version": "0.1.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0", + "@radix-ui/react-use-layout-effect": "0.1.0" + } + }, + "@radix-ui/react-primitive": { + "version": "0.1.4", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "0.1.2" + } + }, + "@radix-ui/react-slot": { + "version": "0.1.2", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "0.1.0" + } + }, + "@radix-ui/react-use-body-pointer-events": { + "version": "0.1.1", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "0.1.0" + } + }, + "@radix-ui/react-use-callback-ref": { + "version": "0.1.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@radix-ui/react-use-controllable-state": { + "version": "0.1.0", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "0.1.0" + } + }, + "@radix-ui/react-use-escape-keydown": { + "version": "0.1.0", + "requires": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "0.1.0" + } + }, + "@radix-ui/react-use-layout-effect": { + "version": "0.1.0", + "requires": { + "@babel/runtime": "^7.13.10" + } + }, + "@reach/auto-id": { + "version": "0.10.5", + "requires": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + } + }, + "@reach/descendants": { + "version": "0.10.5", + "requires": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + } + }, + "@reach/menu-button": { + "version": "0.10.5", + "requires": { + "@reach/auto-id": "0.10.5", + "@reach/descendants": "0.10.5", + "@reach/popover": "0.10.5", + "@reach/utils": "0.10.5", + "prop-types": "^15.7.2", + "tslib": "^2.0.0" + } + }, + "@reach/observe-rect": { + "version": "1.2.0" + }, + "@reach/popover": { + "version": "0.10.5", + "requires": { + "@reach/portal": "0.10.5", + "@reach/rect": "0.10.5", + "@reach/utils": "0.10.5", + "tabbable": "^4.0.0", + "tslib": "^2.0.0" + } + }, + "@reach/portal": { + "version": "0.10.5", + "requires": { + "@reach/utils": "0.10.5", + "tslib": "^2.0.0" + } + }, + "@reach/rect": { + "version": "0.10.5", + "requires": { + "@reach/observe-rect": "1.2.0", + "@reach/utils": "0.10.5", + "prop-types": "^15.7.2", + "tslib": "^2.0.0" + } + }, + "@reach/utils": { + "version": "0.10.5", + "requires": { + "@types/warning": "^3.0.0", + "tslib": "^2.0.0", + "warning": "^4.0.3" + } + }, + "@react-spring/animated": { + "version": "9.4.5", + "requires": { + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" + } + }, + "@react-spring/core": { + "version": "9.4.5", + "requires": { + "@react-spring/animated": "~9.4.5", + "@react-spring/rafz": "~9.4.5", + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" + } + }, + "@react-spring/rafz": { + "version": "9.4.5" + }, + "@react-spring/shared": { + "version": "9.4.5", + "requires": { + "@react-spring/rafz": "~9.4.5", + "@react-spring/types": "~9.4.5" + } + }, + "@react-spring/types": { + "version": "9.4.5" + }, + "@react-spring/web": { + "version": "9.4.5", + "requires": { + "@react-spring/animated": "~9.4.5", + "@react-spring/core": "~9.4.5", + "@react-spring/shared": "~9.4.5", + "@react-spring/types": "~9.4.5" + } + }, + "@samverschueren/stream-to-observable": { + "version": "0.3.1", + "dev": true, + "requires": { + "any-observable": "^0.3.0" + } + }, + "@sideway/address": { + "version": "4.1.4", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "dev": true + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@storybook/addon-actions": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + } + }, + "@storybook/addon-backgrounds": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/addon-controls": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/node-logger": "6.5.8", + "@storybook/store": "6.5.8", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-docs": { + "version": "6.5.8", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@jest/transform": "^26.6.2", + "@mdx-js/react": "^1.6.22", + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.8", + "@storybook/mdx1-csf": "^0.0.1", + "@storybook/node-logger": "6.5.8", + "@storybook/postinstall": "6.5.8", + "@storybook/preview-web": "6.5.8", + "@storybook/source-loader": "6.5.8", + "@storybook/store": "6.5.8", + "@storybook/theming": "6.5.8", + "babel-loader": "^8.0.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/addon-essentials": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addon-actions": "6.5.8", + "@storybook/addon-backgrounds": "6.5.8", + "@storybook/addon-controls": "6.5.8", + "@storybook/addon-docs": "6.5.8", + "@storybook/addon-measure": "6.5.8", + "@storybook/addon-outline": "6.5.8", + "@storybook/addon-toolbars": "6.5.8", + "@storybook/addon-viewport": "6.5.8", + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/node-logger": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-links": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.8", + "@types/qs": "^6.9.5", + "core-js": "^3.8.2", + "global": "^4.4.0", + "prop-types": "^15.7.2", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-measure": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/addon-outline": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/addon-toolbars": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addon-viewport": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "global": "^4.4.0", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/addons": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/api": "6.5.8", + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.8", + "@storybook/theming": "6.5.8", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/api": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.8", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@storybook/builder-webpack4": { + "version": "6.5.8", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/channel-postmessage": "6.5.8", + "@storybook/channels": "6.5.8", + "@storybook/client-api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/node-logger": "6.5.8", + "@storybook/preview-web": "6.5.8", + "@storybook/router": "6.5.8", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.8", + "@storybook/theming": "6.5.8", + "@storybook/ui": "6.5.8", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "autoprefixer": "^9.8.6", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^4.1.6", + "glob": "^7.1.6", + "glob-promise": "^3.4.0", + "global": "^4.4.0", + "html-webpack-plugin": "^4.0.0", + "pnp-webpack-plugin": "1.6.4", + "postcss": "^7.0.36", + "postcss-flexbugs-fixes": "^4.2.1", + "postcss-loader": "^4.2.0", + "raw-loader": "^4.0.2", + "stable": "^0.1.8", + "style-loader": "^1.3.0", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-filter-warnings-plugin": "^1.2.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "acorn": { + "version": "8.7.1", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "chownr": { + "version": "2.0.0", + "dev": true + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "4.1.6", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "chalk": "^2.4.1", + "micromatch": "^3.1.10", + "minimatch": "^3.0.4", + "semver": "^5.6.0", + "tapable": "^1.0.0", + "worker-rpc": "^0.1.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "ssri": { + "version": "8.0.1", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "terser": { + "version": "5.14.1", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + } + } + }, + "@storybook/channel-postmessage": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "core-js": "^3.8.2", + "global": "^4.4.0", + "qs": "^6.10.0", + "telejson": "^6.0.8" + } + }, + "@storybook/channel-websocket": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "core-js": "^3.8.2", + "global": "^4.4.0", + "telejson": "^6.0.8" + } + }, + "@storybook/channels": { + "version": "6.5.8", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-api": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/channel-postmessage": "6.5.8", + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.8", + "@types/qs": "^6.9.5", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-logger": { + "version": "6.5.8", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/components": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.8", + "@types/react-syntax-highlighter": "11.0.5", + "core-js": "^3.8.2", + "qs": "^6.10.0", + "react-syntax-highlighter": "^15.4.5", + "regenerator-runtime": "^0.13.7", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/core-client": "6.5.8", + "@storybook/core-server": "6.5.8" + } + }, + "@storybook/core-client": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/channel-postmessage": "6.5.8", + "@storybook/channel-websocket": "6.5.8", + "@storybook/client-api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/preview-web": "6.5.8", + "@storybook/store": "6.5.8", + "@storybook/ui": "6.5.8", + "airbnb-js-shims": "^2.2.1", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-common": { + "version": "6.5.8", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-decorators": "^7.12.12", + "@babel/plugin-proposal-export-default-from": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-private-property-in-object": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.12", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "@babel/preset-typescript": "^7.12.7", + "@babel/register": "^7.12.1", + "@storybook/node-logger": "6.5.8", + "@storybook/semver": "^7.3.2", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/pretty-hrtime": "^1.0.0", + "babel-loader": "^8.0.0", + "babel-plugin-macros": "^3.0.1", + "babel-plugin-polyfill-corejs3": "^0.1.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "express": "^4.17.1", + "file-system-cache": "^1.0.5", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.0.4", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "handlebars": "^4.7.7", + "interpret": "^2.2.0", + "json5": "^2.1.3", + "lazy-universal-dotenv": "^3.0.1", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": "4" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "dev": true, + "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" + } + }, + "@storybook/semver": { + "version": "7.3.2", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "json5": { + "version": "2.2.1", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@storybook/core-events": { + "version": "6.5.8", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/core-server": { + "version": "6.5.8", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-webpack4": "6.5.8", + "@storybook/core-client": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/csf-tools": "6.5.8", + "@storybook/manager-webpack4": "6.5.8", + "@storybook/node-logger": "6.5.8", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.8", + "@storybook/telemetry": "6.5.8", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/node-fetch": "^2.5.7", + "@types/pretty-hrtime": "^1.0.0", + "@types/webpack": "^4.41.26", + "better-opn": "^2.1.1", + "boxen": "^5.1.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "commander": "^6.2.1", + "compression": "^1.7.4", + "core-js": "^3.8.2", + "cpy": "^8.1.2", + "detect-port": "^1.3.0", + "express": "^4.17.1", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "globby": "^11.0.2", + "ip": "^2.0.0", + "lodash": "^4.17.21", + "node-fetch": "^2.6.7", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "regenerator-runtime": "^0.13.7", + "serve-favicon": "^2.5.0", + "slash": "^3.0.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "webpack": "4", + "ws": "^8.2.3", + "x-default-browser": "^0.4.0" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "commander": { + "version": "6.2.1", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + } + } + }, + "@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "@storybook/csf-tools": { + "version": "6.5.8", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + } + }, + "@storybook/docs-tools": { + "version": "6.5.8", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.8", + "core-js": "^3.8.2", + "doctrine": "^3.0.0", + "lodash": "^4.17.21", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/manager-webpack4": { + "version": "6.5.8", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@storybook/addons": "6.5.8", + "@storybook/core-client": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/node-logger": "6.5.8", + "@storybook/theming": "6.5.8", + "@storybook/ui": "6.5.8", + "@types/node": "^14.0.10 || ^16.0.0", + "@types/webpack": "^4.41.26", + "babel-loader": "^8.0.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "css-loader": "^3.6.0", + "express": "^4.17.1", + "file-loader": "^6.2.0", + "find-up": "^5.0.0", + "fs-extra": "^9.0.1", + "html-webpack-plugin": "^4.0.0", + "node-fetch": "^2.6.7", + "pnp-webpack-plugin": "1.6.4", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0", + "style-loader": "^1.3.0", + "telejson": "^6.0.8", + "terser-webpack-plugin": "^4.2.3", + "ts-dedent": "^2.0.0", + "url-loader": "^4.1.1", + "util-deprecate": "^1.0.2", + "webpack": "4", + "webpack-dev-middleware": "^3.7.3", + "webpack-virtual-modules": "^0.2.2" + }, + "dependencies": { + "acorn": { + "version": "8.7.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cacache": { + "version": "15.3.0", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chownr": { + "version": "2.0.0", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + } + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "ssri": { + "version": "8.0.1", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "terser": { + "version": "5.14.1", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "dev": true, + "requires": { + "cacache": "^15.0.5", + "find-cache-dir": "^3.3.1", + "jest-worker": "^26.5.0", + "p-limit": "^3.0.2", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.3.4", + "webpack-sources": "^1.4.3" + } + } + } + }, + "@storybook/mdx1-csf": { + "version": "0.0.1", + "dev": true, + "requires": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "@storybook/node-logger": { + "version": "6.5.8", + "dev": true, + "requires": { + "@types/npmlog": "^4.1.2", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "npmlog": "^5.0.1", + "pretty-hrtime": "^1.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@storybook/postinstall": { + "version": "6.5.8", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/preview-web": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/channel-postmessage": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/store": "6.5.8", + "ansi-to-html": "^0.6.11", + "core-js": "^3.8.2", + "global": "^4.4.0", + "lodash": "^4.17.21", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "unfetch": "^4.2.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/react": { + "version": "6.5.8", + "dev": true, + "requires": { + "@babel/preset-flow": "^7.12.1", + "@babel/preset-react": "^7.12.10", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@storybook/addons": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core": "6.5.8", + "@storybook/core-common": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/docs-tools": "6.5.8", + "@storybook/node-logger": "6.5.8", + "@storybook/react-docgen-typescript-plugin": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "@storybook/semver": "^7.3.2", + "@storybook/store": "6.5.8", + "@types/estree": "^0.0.51", + "@types/node": "^14.14.20 || ^16.0.0", + "@types/webpack-env": "^1.16.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-react-docgen": "^4.2.1", + "core-js": "^3.8.2", + "escodegen": "^2.0.0", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^14.3.4", + "react-refresh": "^0.11.0", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "webpack": ">=4.43.0 <6.0.0" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "acorn": { + "version": "7.4.1", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@storybook/react-docgen-typescript-plugin": { + "version": "1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0", + "dev": true, + "requires": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.1.1", + "tslib": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "@storybook/router": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/source-loader": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "estraverse": "^5.2.0", + "global": "^4.4.0", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "json5": { + "version": "2.2.1", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "@storybook/store": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "slash": "^3.0.0", + "stable": "^0.1.8", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/telemetry": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.8", + "@storybook/core-common": "6.5.8", + "chalk": "^4.1.0", + "core-js": "^3.8.2", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "isomorphic-unfetch": "^3.1.0", + "nanoid": "^3.3.1", + "read-pkg-up": "^7.0.1", + "regenerator-runtime": "^0.13.7" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@storybook/theming": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/ui": { + "version": "6.5.8", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/channels": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/router": "6.5.8", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "regenerator-runtime": "^0.13.7", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "@storybook/semver": { + "version": "7.3.2", + "dev": true, + "requires": { + "core-js": "^3.6.5", + "find-up": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "@styled-system/background": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/border": { + "version": "5.1.5", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/color": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/core": { + "version": "5.1.2", + "requires": { + "object-assign": "^4.1.1" + } + }, + "@styled-system/css": { + "version": "5.1.5" + }, + "@styled-system/flexbox": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/grid": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/layout": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/position": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/shadow": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/space": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/typography": { + "version": "5.1.2", + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/variant": { + "version": "5.1.5", + "requires": { + "@styled-system/core": "^5.1.2", + "@styled-system/css": "^5.1.5" + } + }, + "@tlon/indigo-dark": { + "version": "1.0.6" + }, + "@tlon/indigo-light": { + "version": "1.0.7" + }, + "@tlon/indigo-react": { + "version": "1.2.27", + "requires": { + "@reach/menu-button": "^0.10.5", + "tslib": "^2.0.1" + } + }, + "@tlon/sigil-js": { + "version": "1.4.5", + "requires": { + "invariant": "^2.2.4", + "svgson": "^4.0.0", + "transformation-matrix": "2.1.1" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.19", + "dev": 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", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.17.1", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/estree": { + "version": "0.0.51", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/hast": { + "version": "2.3.4", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/history": { + "version": "4.7.11", + "dev": true + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "dev": true, + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "@types/html-minifier-terser": { + "version": "5.1.2", + "dev": true + }, + "@types/is-function": { + "version": "1.0.1", + "dev": true + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.11" + }, + "@types/lodash": { + "version": "4.14.182", + "dev": true + }, + "@types/mdast": { + "version": "3.0.10", + "requires": { + "@types/unist": "*" + } + }, + "@types/minimatch": { + "version": "3.0.5", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "dev": true + }, + "@types/node": { + "version": "16.11.39", + "dev": true + }, + "@types/node-fetch": { + "version": "2.6.1", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "dev": true + }, + "@types/npmlog": { + "version": "4.1.4", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "dev": true + }, + "@types/parse5": { + "version": "5.0.3", + "dev": true + }, + "@types/prettier": { + "version": "2.6.3", + "dev": true + }, + "@types/pretty-hrtime": { + "version": "1.0.1", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5" + }, + "@types/qs": { + "version": "6.9.7", + "dev": true + }, + "@types/react": { + "version": "16.14.26", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "16.9.16", + "dev": true, + "requires": { + "@types/react": "^16" + } + }, + "@types/react-router": { + "version": "5.1.18", + "dev": true, + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "@types/react-router-dom": { + "version": "5.3.3", + "dev": true, + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/react-syntax-highlighter": { + "version": "11.0.5", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2" + }, + "@types/source-list-map": { + "version": "0.1.2", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.1", + "dev": true + }, + "@types/styled-components": { + "version": "5.1.25", + "dev": true, + "requires": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, + "@types/styled-system": { + "version": "5.1.15", + "dev": true, + "requires": { + "csstype": "^3.0.2" + } + }, + "@types/tapable": { + "version": "1.0.8", + "dev": true + }, + "@types/trusted-types": { + "version": "2.0.2", + "dev": true + }, + "@types/uglify-js": { + "version": "3.16.0", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "@types/unist": { + "version": "2.0.6" + }, + "@types/warning": { + "version": "3.0.0" + }, + "@types/webpack": { + "version": "4.41.32", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "@types/webpack-env": { + "version": "1.17.0", + "dev": true + }, + "@types/webpack-sources": { + "version": "3.2.0", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "dev": true + } + } + }, + "@types/yargs": { + "version": "15.0.14", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true + }, + "@types/yoga-layout": { + "version": "1.9.2", + "dev": true + }, + "@types/yup": { + "version": "0.29.14", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "ignore": { + "version": "5.2.0", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "@urbit/http-api": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-2.1.1.tgz", + "integrity": "sha512-0ZXbBkSqCqFQAYeyjz/2uYlwp6H2UqwPsDS3SUfOa/M/nDCB++7xIWEf1+lR3gwpNyZfEnxrI20IGS5jELIapw==", + "requires": { + "@babel/runtime": "^7.12.5", + "@microsoft/fetch-event-source": "^2.0.0", + "browser-or-node": "^1.3.0", + "core-js": "^3.19.1" + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0" + }, + "@xtuc/long": { + "version": "4.2.2" + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "dev": true + }, + "abab": { + "version": "2.0.6", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "6.4.2" + }, + "acorn-globals": { + "version": "6.0.0", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "dev": true + }, + "address": { + "version": "1.2.0", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "dev": true, + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "airbnb-js-shims": { + "version": "2.2.1", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", + "array.prototype.flatmap": "^1.2.1", + "es5-shim": "^4.5.13", + "es6-shim": "^0.35.5", + "function.prototype.name": "^1.1.0", + "globalthis": "^1.0.0", + "object.entries": "^1.1.0", + "object.fromentries": "^2.0.0 || ^1.0.0", + "object.getownpropertydescriptors": "^2.0.3", + "object.values": "^1.1.0", + "promise.allsettled": "^1.0.0", + "promise.prototype.finally": "^3.1.0", + "string.prototype.matchall": "^4.0.0 || ^3.0.1", + "string.prototype.padend": "^3.0.0", + "string.prototype.padstart": "^3.0.0", + "symbol.prototype.description": "^1.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "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-errors": { + "version": "1.0.1", + "requires": {} + }, + "ajv-keywords": { + "version": "3.5.2", + "requires": {} + }, + "ansi-align": { + "version": "3.0.1", + "dev": true, + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-colors": { + "version": "3.2.4", + "dev": true + }, + "ansi-escapes": { + "version": "3.2.0", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-to-html": { + "version": "0.6.15", + "dev": true, + "requires": { + "entities": "^2.0.0" + } + }, + "any-ascii": { + "version": "0.1.7" + }, + "any-observable": { + "version": "0.3.0", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "devOptional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-dir": { + "version": "1.0.2", + "dev": true + }, + "aproba": { + "version": "2.0.0", + "dev": true + }, + "are-we-there-yet": { + "version": "2.0.0", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-hidden": { + "version": "1.1.3", + "requires": { + "tslib": "^1.0.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "arr-diff": { + "version": "4.0.0" + }, + "arr-flatten": { + "version": "1.1.0" + }, + "arr-union": { + "version": "3.1.0" + }, + "array-find-index": { + "version": "1.0.2", + "dev": true, + "optional": true + }, + "array-flatten": { + "version": "1.1.1", + "dev": true + }, + "array-includes": { + "version": "3.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-parallel": { + "version": "0.1.3", + "dev": true + }, + "array-series": { + "version": "0.1.5", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "dev": true + }, + "array-unique": { + "version": "0.3.2" + }, + "array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.map": { + "version": "1.0.4", + "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.reduce": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "arrify": { + "version": "2.0.1", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "assert": { + "version": "1.5.0", + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1" + }, + "util": { + "version": "0.10.3", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0" + }, + "ast-types": { + "version": "0.14.2", + "dev": true, + "requires": { + "tslib": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "dev": true + }, + "async": { + "version": "3.2.4", + "dev": true + }, + "async-each": { + "version": "1.0.3", + "devOptional": true + }, + "async-limiter": { + "version": "1.0.1", + "dev": true + }, + "async-retry": { + "version": "1.3.3", + "dev": true, + "requires": { + "retry": "0.13.1" + } + }, + "asynckit": { + "version": "0.4.0" + }, + "at-least-node": { + "version": "1.0.0", + "dev": true + }, + "atob": { + "version": "2.1.2" + }, + "auto-bind": { + "version": "4.0.0", + "dev": true + }, + "autoprefixer": { + "version": "9.8.8", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "aws-sdk": { + "version": "2.1152.0", + "requires": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "8.0.0", + "xml2js": "0.4.19" + }, + "dependencies": { + "querystring": { + "version": "0.2.0" + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "dev": true + }, + "axios": { + "version": "0.27.2", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "babel-eslint": { + "version": "10.1.0", + "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", + "dev": true + } + } + }, + "babel-jest": { + "version": "26.6.3", + "dev": true, + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-loader": { + "version": "8.2.5", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "json5": { + "version": "2.2.1", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "babel-plugin-add-react-displayname": { + "version": "0.0.5", + "dev": true + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + } + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "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": "26.6.2", + "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-lodash": { + "version": "3.3.4", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0-beta.49", + "@babel/types": "^7.0.0-beta.49", + "glob": "^7.1.1", + "lodash": "^4.17.10", + "require-package-name": "^2.0.1" + } + }, + "babel-plugin-macros": { + "version": "3.1.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "babel-plugin-react-docgen": { + "version": "4.2.1", + "dev": true, + "requires": { + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.0" + } + }, + "babel-plugin-root-import": { + "version": "6.6.0", + "dev": true, + "requires": { + "slash": "^3.0.0" + } + }, + "babel-plugin-styled-components": { + "version": "2.0.7", + "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", + "picomatch": "^2.3.0" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0" + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "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": "26.6.2", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "bail": { + "version": "1.0.5" + }, + "balanced-match": { + "version": "1.0.2" + }, + "base": { + "version": "0.11.2", + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3" + } + } + }, + "base64-js": { + "version": "1.5.1" + }, + "batch": { + "version": "0.6.1", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.2.2", + "dev": true + }, + "bellajs": { + "version": "11.0.3" + }, + "better-opn": { + "version": "2.1.1", + "dev": true, + "requires": { + "open": "^7.0.3" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "open": { + "version": "7.4.2", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + } + } + }, + "big-integer": { + "version": "1.6.51" + }, + "big.js": { + "version": "5.2.2" + }, + "binary-extensions": { + "version": "2.2.0", + "devOptional": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2" + }, + "bn.js": { + "version": "4.12.0" + }, + "body-parser": { + "version": "1.20.0", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "qs": { + "version": "6.10.3", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour": { + "version": "3.5.0", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "dev": true + }, + "boxen": { + "version": "5.1.2", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "bplist-parser": { + "version": "0.1.1", + "dev": true, + "optional": true, + "requires": { + "big-integer": "^1.6.7" + } + }, + "brace-expansion": { + "version": "1.1.11", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "devOptional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0" + }, + "browser-or-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", + "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" + }, + "browser-process-hrtime": { + "version": "1.0.0", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "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", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "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", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "5.2.1" + } + } + }, + "browserify-sign": { + "version": "4.2.1", + "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": { + "bn.js": { + "version": "5.2.1" + }, + "safe-buffer": { + "version": "5.2.1" + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.20.4", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001349", + "electron-to-chromium": "^1.4.147", + "escalade": "^3.1.1", + "node-releases": "^2.0.5", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "dev": true + } + } + }, + "bser": { + "version": "2.1.1", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "4.9.2", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2" + }, + "buffer-indexof": { + "version": "1.1.1", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3" + }, + "builtin-status-codes": { + "version": "3.0.0" + }, + "bytes": { + "version": "3.1.2", + "dev": true + }, + "c8": { + "version": "7.11.3", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1" + } + } + }, + "cache-base": { + "version": "1.0.1", + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "has-value": { + "version": "1.0.0", + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "unset-value": { + "version": "1.0.0", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4" + } + } + } + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "dev": true + }, + "caller-callsite": { + "version": "4.1.0", + "dev": true, + "requires": { + "callsites": "^3.1.0" + } + }, + "caller-path": { + "version": "3.0.1", + "dev": true, + "requires": { + "caller-callsite": "^4.1.0" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "5.3.1" + }, + "camelcase-css": { + "version": "2.0.1", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "dev": true, + "optional": true + } + } + }, + "camelize": { + "version": "1.0.0" + }, + "caniuse-lite": { + "version": "1.0.30001352", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "dev": true + }, + "ccount": { + "version": "1.1.0" + }, + "chalk": { + "version": "2.4.2", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "char-regex": { + "version": "1.0.2", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.4" + }, + "character-entities-legacy": { + "version": "1.1.4" + }, + "character-reference-invalid": { + "version": "1.1.4" + }, + "charcodes": { + "version": "0.2.0", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "devOptional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4" + }, + "chromatic": { + "version": "5.10.2", + "dev": true, + "requires": { + "@actions/core": "^1.5.0", + "@actions/github": "^5.0.0", + "@babel/preset-typescript": "^7.15.0", + "@babel/runtime": "^7.15.3", + "@chromaui/localtunnel": "^2.0.3", + "async-retry": "^1.3.3", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "dotenv": "^8.2.0", + "env-ci": "^5.0.2", + "esm": "^3.2.25", + "execa": "^5.0.0", + "fake-tag": "^2.0.0", + "fs-extra": "^10.0.0", + "https-proxy-agent": "^5.0.0", + "jsonfile": "^6.0.1", + "junit-report-builder": "2.1.0", + "listr": "0.14.3", + "meow": "^8.0.0", + "no-proxy": "^1.0.3", + "node-ask": "^1.0.1", + "node-fetch": "2.6.0", + "node-loggly-bulk": "^2.2.4", + "p-limit": "3.1.0", + "picomatch": "2.2.2", + "pkg-up": "^3.1.0", + "pluralize": "^8.0.0", + "progress-stream": "^2.0.0", + "semver": "^7.3.5", + "slash": "^3.0.0", + "string-argv": "^0.3.1", + "strip-ansi": "6.0.0", + "tmp-promise": "3.0.2", + "tree-kill": "^1.2.2", + "ts-dedent": "^1.0.0", + "util-deprecate": "^1.0.2", + "uuid": "^8.3.2", + "yarn-or-npm": "^3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase-keys": { + "version": "6.2.2", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "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" + } + }, + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "map-obj": { + "version": "4.3.0", + "dev": true + }, + "meow": { + "version": "8.1.2", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "node-fetch": { + "version": "2.6.0", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "dev": true + }, + "redent": { + "version": "3.0.0", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-indent": { + "version": "3.0.0", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "trim-newlines": { + "version": "3.0.1", + "dev": true + }, + "ts-dedent": { + "version": "1.2.0", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "dev": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "chrome-launcher": { + "version": "0.13.4", + "dev": true, + "requires": { + "@types/node": "*", + "escape-string-regexp": "^1.0.5", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^0.5.3", + "rimraf": "^3.0.2" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "chrome-remote-interface": { + "version": "0.29.0", + "dev": true, + "requires": { + "commander": "2.11.x", + "ws": "^7.2.0" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "dev": true + }, + "ws": { + "version": "7.5.8", + "dev": true, + "requires": {} + } + } + }, + "chrome-trace-event": { + "version": "1.0.3" + }, + "ci-info": { + "version": "2.0.0", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "cjs-module-lexer": { + "version": "0.6.0", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.3.1" + }, + "clean-css": { + "version": "4.2.4", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "dev": true + }, + "clean-webpack-plugin": { + "version": "3.0.0", + "dev": true, + "requires": { + "@types/webpack": "^4.4.31", + "del": "^4.1.1" + } + }, + "cli-boxes": { + "version": "2.2.1", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-table3": { + "version": "0.6.2", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "0.2.1", + "dev": true, + "requires": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "2.1.2" + }, + "clone-deep": { + "version": "4.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "dev": true + } + } + }, + "co": { + "version": "4.6.0", + "dev": true + }, + "code-excerpt": { + "version": "3.0.0", + "dev": true, + "requires": { + "convert-to-spaces": "^1.0.1" + } + }, + "code-point-at": { + "version": "1.1.0", + "dev": true + }, + "codemirror": { + "version": "5.65.5" + }, + "collapse-white-space": { + "version": "1.0.6" + }, + "collect-v8-coverage": { + "version": "1.0.1", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "requires": { + "color-name": "1.1.3" + } + }, + "color-diff": { + "version": "1.2.0", + "dev": true + }, + "color-name": { + "version": "1.1.3" + }, + "color-support": { + "version": "1.1.3", + "dev": true + }, + "colorette": { + "version": "1.4.0", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3" + }, + "common-path-prefix": { + "version": "3.0.0", + "dev": true + }, + "commondir": { + "version": "1.0.1" + }, + "component-emitter": { + "version": "1.3.0" + }, + "compressible": { + "version": "2.0.18", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1" + }, + "concat-stream": { + "version": "1.6.2", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "dev": true + }, + "console-browserify": { + "version": "1.2.0" + }, + "console-control-strings": { + "version": "1.1.0", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0" + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "convert-to-spaces": { + "version": "1.0.2", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "aproba": { + "version": "1.2.0" + } + } + }, + "copy-descriptor": { + "version": "0.1.1" + }, + "core-js": { + "version": "3.22.8" + }, + "core-js-compat": { + "version": "3.22.8", + "dev": true, + "requires": { + "browserslist": "^4.20.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.22.8", + "dev": true + }, + "core-util-is": { + "version": "1.0.3" + }, + "cosmiconfig": { + "version": "7.0.1", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cp-file": { + "version": "7.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + } + } + }, + "cpy": { + "version": "8.1.2", + "dev": true, + "requires": { + "arrify": "^2.0.1", + "cp-file": "^7.0.0", + "globby": "^9.2.0", + "has-glob": "^1.0.0", + "junk": "^3.1.0", + "nested-error-stacks": "^2.1.0", + "p-all": "^2.1.0", + "p-filter": "^2.1.0", + "p-map": "^3.0.0" + }, + "dependencies": { + "globby": { + "version": "9.2.0", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "p-map": { + "version": "3.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "slash": { + "version": "2.0.0", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "create-hash": { + "version": "1.2.0", + "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", + "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-env": { + "version": "7.0.3", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "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", + "dev": true + }, + "css-color-keywords": { + "version": "1.0.0" + }, + "css-loader": { + "version": "3.6.0", + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + } + }, + "css-select": { + "version": "4.3.0", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-to-react-native": { + "version": "3.0.0", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "css-what": { + "version": "6.1.0", + "dev": true + }, + "cssesc": { + "version": "3.0.0" + }, + "cssom": { + "version": "0.4.4", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "dev": true + } + } + }, + "csstype": { + "version": "3.1.0" + }, + "currently-unhandled": { + "version": "0.4.1", + "dev": true, + "optional": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "1.0.1" + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "dev": true + }, + "tr46": { + "version": "2.1.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + } + } + }, + "date-fns": { + "version": "1.30.1", + "dev": true + }, + "date-format": { + "version": "0.0.2", + "dev": true + }, + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } + }, + "decimal.js": { + "version": "10.3.1", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0" + }, + "dedent": { + "version": "0.7.0", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "deep-rename-keys": { + "version": "0.2.1", + "requires": { + "kind-of": "^3.0.2", + "rename-keys": "^1.1.2" + } + }, + "deepmerge": { + "version": "2.2.1" + }, + "default-browser-id": { + "version": "1.0.4", + "dev": true, + "optional": true, + "requires": { + "bplist-parser": "^0.1.0", + "meow": "^3.1.0", + "untildify": "^2.0.0" + } + }, + "default-gateway": { + "version": "4.2.0", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3" + } + } + }, + "del": { + "version": "4.1.1", + "dev": true, + "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": { + "globby": { + "version": "6.1.0", + "dev": true, + "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", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0" + }, + "delegates": { + "version": "1.0.0", + "dev": true + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detab": { + "version": "2.0.4", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-file": { + "version": "1.0.0", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "dev": true + }, + "detect-node-es": { + "version": "1.1.0" + }, + "detect-package-manager": { + "version": "2.0.1", + "dev": true, + "requires": { + "execa": "^5.1.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "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" + } + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "detect-port": { + "version": "1.3.0", + "dev": true, + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "diff-sequences": { + "version": "26.6.2", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "dev": true, + "requires": { + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "dns-equal": { + "version": "1.0.0", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + }, + "dependencies": { + "ip": { + "version": "1.1.8", + "dev": true + } + } + }, + "dns-txt": { + "version": "2.0.2", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "dev": true + }, + "domain-browser": { + "version": "1.2.0" + }, + "domelementtype": { + "version": "2.3.0" + }, + "domexception": { + "version": "2.0.1", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "dev": true + } + } + }, + "domhandler": { + "version": "4.3.1", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dotenv": { + "version": "8.6.0", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.152", + "dev": true + }, + "elegant-spinner": { + "version": "1.0.1", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "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" + } + }, + "emittery": { + "version": "0.7.2", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true + }, + "emojis-list": { + "version": "3.0.0" + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "requires": { + "once": "^1.4.0" + } + }, + "endent": { + "version": "2.1.0", + "dev": true, + "requires": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "enquirer": { + "version": "2.3.6", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.3", + "dev": true + } + } + }, + "entities": { + "version": "2.2.0" + }, + "env-ci": { + "version": "5.5.0", + "dev": true, + "requires": { + "execa": "^5.0.0", + "fromentries": "^1.3.2", + "java-properties": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "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" + } + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "errno": { + "version": "0.1.8", + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "dev": true + }, + "es-get-iterator": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.0", + "has-symbols": "^1.0.1", + "is-arguments": "^1.1.0", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.5", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "dev": true + } + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-shim": { + "version": "4.6.7", + "dev": true + }, + "es6-shim": { + "version": "0.35.6", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5" + }, + "escodegen": { + "version": "2.0.0", + "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": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "eslint": { + "version": "7.32.0", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "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": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "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.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "globals": { + "version": "13.15.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "optionator": { + "version": "0.9.1", + "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" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-plugin-react": { + "version": "7.30.0", + "dev": true, + "requires": { + "array-includes": "^3.1.5", + "array.prototype.flatmap": "^1.3.0", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.1", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.7" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "resolve": { + "version": "2.0.0-next.3", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + }, + "esm": { + "version": "3.2.25", + "dev": true + }, + "espree": { + "version": "7.3.1", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0" + } + } + }, + "estraverse": { + "version": "4.3.0" + }, + "estree-to-babel": { + "version": "3.2.1", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" + } + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "dev": true + }, + "eventemitter3": { + "version": "2.0.3" + }, + "events": { + "version": "1.1.1" + }, + "eventsource": { + "version": "2.0.2", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exec-sh": { + "version": "0.3.6", + "dev": true + }, + "execa": { + "version": "1.0.0", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0" + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "expect": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + } + } + }, + "express": { + "version": "4.18.1", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true + }, + "qs": { + "version": "6.10.3", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2" + }, + "extend-shallow": { + "version": "3.0.2", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3" + } + } + }, + "extsprintf": { + "version": "1.3.0", + "dev": true + }, + "fake-tag": { + "version": "2.0.0", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3" + }, + "fast-glob": { + "version": "2.2.7", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } + } + }, + "fast-json-parse": { + "version": "1.0.3", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0" + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fault": { + "version": "1.0.4", + "dev": true, + "requires": { + "format": "^0.2.0" + } + }, + "faye-websocket": { + "version": "0.11.4", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fb-watchman": { + "version": "2.0.1", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fetch-retry": { + "version": "5.0.2", + "dev": true + }, + "figgy-pudding": { + "version": "3.5.2" + }, + "figures": { + "version": "1.7.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-saver": { + "version": "2.0.5" + }, + "file-system-cache": { + "version": "1.1.0", + "dev": true, + "requires": { + "fs-extra": "^10.1.0", + "ramda": "^0.28.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "devOptional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0" + }, + "pkg-dir": { + "version": "3.0.0", + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "dev": true, + "requires": { + "micromatch": "^4.0.2" + }, + "dependencies": { + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + } + } + }, + "findup-sync": { + "version": "3.0.0", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.5", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fn-name": { + "version": "3.0.0" + }, + "follow-redirects": { + "version": "1.15.1" + }, + "for-in": { + "version": "1.0.2" + }, + "foreground-child": { + "version": "2.0.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "dev": true + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "cosmiconfig": { + "version": "6.0.0", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "deepmerge": { + "version": "4.2.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "schema-utils": { + "version": "2.7.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "form-data": { + "version": "4.0.0", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "format": { + "version": "0.2.2", + "dev": true + }, + "formik": { + "version": "2.2.9", + "requires": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "forwarded": { + "version": "0.2.0", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "dev": true + }, + "from2": { + "version": "2.3.0", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fromentries": { + "version": "1.3.2", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0" + }, + "fsevents": { + "version": "2.3.2", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "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", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "fuzzy": { + "version": "0.1.3" + }, + "gauge": { + "version": "3.0.2", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-nonce": { + "version": "1.0.1" + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "dev": true + }, + "get-package-type": { + "version": "0.1.0", + "dev": true + }, + "get-port": { + "version": "5.1.1", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6" + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "github-slugger": { + "version": "1.4.0", + "dev": true + }, + "glob": { + "version": "7.2.3", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "devOptional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-promise": { + "version": "3.4.0", + "dev": true, + "requires": { + "@types/glob": "*" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "dev": true + }, + "global": { + "version": "4.4.0", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-modules": { + "version": "2.0.0", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true + } + } + }, + "global-prefix": { + "version": "1.0.2", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0" + }, + "globalthis": { + "version": "1.0.3", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.2.11", + "dev": true, + "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" + } + }, + "ignore": { + "version": "5.2.0", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + } + } + }, + "gm": { + "version": "1.23.1", + "dev": true, + "requires": { + "array-parallel": "~0.1.3", + "array-series": "~0.1.5", + "cross-spawn": "^4.0.0", + "debug": "^3.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "lru-cache": { + "version": "4.1.5", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.10" + }, + "growly": { + "version": "1.3.0", + "dev": true, + "optional": true + }, + "handle-thing": { + "version": "2.0.1", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "hard-rejection": { + "version": "2.1.0", + "dev": true + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "3.0.0" + }, + "has-glob": { + "version": "1.0.0", + "dev": true, + "requires": { + "is-glob": "^3.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "dev": true + }, + "has-value": { + "version": "0.3.1", + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4" + }, + "hash-base": { + "version": "3.1.0", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1" + } + } + }, + "hash.js": { + "version": "1.1.7", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "dependencies": { + "comma-separated-tokens": { + "version": "1.0.8", + "dev": true + }, + "property-information": { + "version": "5.6.0", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "dev": true + } + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "dev": true, + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "dependencies": { + "property-information": { + "version": "5.6.0", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + } + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "dev": true + }, + "hast-util-raw": { + "version": "6.0.1", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "dependencies": { + "unist-util-position": { + "version": "3.1.0", + "dev": true + } + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "dev": true, + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "dependencies": { + "property-information": { + "version": "5.6.0", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + } + } + }, + "hastscript": { + "version": "6.0.0", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "dependencies": { + "comma-separated-tokens": { + "version": "1.0.8", + "dev": true + }, + "property-information": { + "version": "5.6.0", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "dev": true + } + } + }, + "he": { + "version": "1.2.0", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "dev": true + }, + "history": { + "version": "4.10.1", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "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", + "requires": { + "react-is": "^16.7.0" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-entities": { + "version": "2.3.3", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "dev": true + }, + "html-minifier-terser": { + "version": "5.1.1", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "dev": true + } + } + }, + "html-tags": { + "version": "3.2.0", + "dev": true + }, + "html-to-react": { + "version": "1.4.8", + "requires": { + "domhandler": "^4.0", + "htmlparser2": "^7.0", + "lodash.camelcase": "^4.3.0", + "ramda": "^0.28.0" + }, + "dependencies": { + "entities": { + "version": "3.0.1" + }, + "htmlparser2": { + "version": "7.2.0", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + } + } + }, + "html-void-elements": { + "version": "1.0.5", + "dev": true + }, + "html-webpack-plugin": { + "version": "4.5.2", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", + "html-minifier-terser": "^5.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.20", + "pretty-error": "^2.1.1", + "tapable": "^1.1.3", + "util.promisify": "1.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.6", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "dev": true + } + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0" + }, + "https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "husky": { + "version": "6.0.0", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "requires": { + "postcss": "^7.0.14" + } + }, + "idb": { + "version": "6.1.5" + }, + "ieee754": { + "version": "1.1.13" + }, + "iferr": { + "version": "0.1.5" + }, + "ignore": { + "version": "4.0.6", + "dev": true + }, + "immer": { + "version": "9.0.15" + }, + "immutable": { + "version": "4.1.0", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "dev": true + } + } + }, + "import-jsx": { + "version": "4.0.1", + "dev": true, + "requires": { + "@babel/core": "^7.5.5", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-react-jsx": "^7.3.0", + "caller-path": "^3.0.1", + "find-cache-dir": "^3.2.0", + "make-dir": "^3.0.2", + "resolve-from": "^3.0.0", + "rimraf": "^3.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "import-local": { + "version": "3.1.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4" + }, + "indent-string": { + "version": "4.0.0", + "dev": true + }, + "infer-owner": { + "version": "1.0.4" + }, + "inflight": { + "version": "1.0.6", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "ini": { + "version": "1.3.8", + "dev": true + }, + "ink": { + "version": "3.2.0", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "auto-bind": "4.0.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.0", + "cli-cursor": "^3.1.0", + "cli-truncate": "^2.1.0", + "code-excerpt": "^3.0.0", + "indent-string": "^4.0.0", + "is-ci": "^2.0.0", + "lodash": "^4.17.20", + "patch-console": "^1.0.0", + "react-devtools-core": "^4.19.1", + "react-reconciler": "^0.26.2", + "scheduler": "^0.20.2", + "signal-exit": "^3.0.2", + "slice-ansi": "^3.0.0", + "stack-utils": "^2.0.2", + "string-width": "^4.2.2", + "type-fest": "^0.12.0", + "widest-line": "^3.1.0", + "wrap-ansi": "^6.2.0", + "ws": "^7.5.5", + "yoga-layout-prebuilt": "^1.9.6" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cli-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "slice-ansi": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.12.0", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "ws": { + "version": "7.5.8", + "dev": true, + "requires": {} + } + } + }, + "inline-style-parser": { + "version": "0.1.1", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "2.2.0", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "2.0.0", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-alphabetical": { + "version": "1.0.4" + }, + "is-alphanumeric": { + "version": "1.0.0" + }, + "is-alphanumerical": { + "version": "1.0.4", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "devOptional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6" + }, + "is-callable": { + "version": "1.2.4", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.9.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4" + }, + "is-descriptor": { + "version": "0.1.6", + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0" + } + } + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-dom": { + "version": "1.1.0", + "dev": true, + "requires": { + "is-object": "^1.0.1", + "is-window": "^1.0.2" + } + }, + "is-extendable": { + "version": "0.1.1" + }, + "is-extglob": { + "version": "2.1.1", + "devOptional": true + }, + "is-finite": { + "version": "1.1.0", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "is-function": { + "version": "1.0.2", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "devOptional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4" + }, + "is-map": { + "version": "2.0.2", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "devOptional": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "1.0.1", + "dev": true + }, + "is-object": { + "version": "1.0.2", + "dev": true + }, + "is-observable": { + "version": "1.1.0", + "dev": true, + "requires": { + "symbol-observable": "^1.1.0" + } + }, + "is-path-cwd": { + "version": "2.2.0", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "2.1.0" + }, + "is-plain-object": { + "version": "2.0.4", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true + }, + "is-promise": { + "version": "2.2.2", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-regexp": { + "version": "1.0.0", + "dev": true + }, + "is-set": { + "version": "2.0.2", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "dev": true, + "optional": true + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-whitespace-character": { + "version": "1.0.4" + }, + "is-window": { + "version": "1.0.2", + "dev": true + }, + "is-windows": { + "version": "1.0.2" + }, + "is-word-character": { + "version": "1.0.4" + }, + "is-wsl": { + "version": "1.1.0" + }, + "isarray": { + "version": "1.0.0" + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1" + }, + "isomorphic-unfetch": { + "version": "3.1.0", + "dev": true, + "requires": { + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" + } + }, + "isstream": { + "version": "0.1.2", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.0", + "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" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.4", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "iterate-iterator": { + "version": "1.0.2", + "dev": true + }, + "iterate-value": { + "version": "1.0.2", + "dev": true, + "requires": { + "es-get-iterator": "^1.0.2", + "iterate-iterator": "^1.0.1" + } + }, + "java-properties": { + "version": "1.0.2", + "dev": true + }, + "jest": { + "version": "26.6.3", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "jest-cli": { + "version": "26.6.3", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-changed-files": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "4.1.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "jest-config": { + "version": "26.6.3", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "26.6.2", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-docblock": { + "version": "26.0.0", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-environment-jsdom": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + } + }, + "jest-environment-node": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "dev": true + }, + "jest-haste-map": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "dependencies": { + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + } + } + }, + "jest-jasmine2": { + "version": "26.6.3", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-leak-detector": { + "version": "26.6.2", + "dev": true, + "requires": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-matcher-utils": { + "version": "26.6.2", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-message-util": { + "version": "26.6.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-mock": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "26.0.0", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-resolve-dependencies": { + "version": "26.6.3", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + } + }, + "jest-runner": { + "version": "26.6.3", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-runtime": { + "version": "26.6.3", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "6.0.0", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "jest-serializer": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "26.6.2", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-util": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-validate": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-watcher": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "jest-worker": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jmespath": { + "version": "0.16.0" + }, + "joi": { + "version": "17.6.0", + "dev": true, + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-string-escape": { + "version": "1.0.1", + "dev": true + }, + "js-tokens": { + "version": "4.0.0" + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "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" + }, + "dependencies": { + "acorn": { + "version": "8.7.1", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "punycode": { + "version": "2.1.1", + "dev": true + }, + "tough-cookie": { + "version": "4.0.0", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.1.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "webidl-conversions": { + "version": "6.1.0", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, + "ws": { + "version": "7.5.8", + "dev": true, + "requires": {} + } + } + }, + "jsesc": { + "version": "2.5.2" + }, + "json-parse-better-errors": { + "version": "1.0.2" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true + }, + "json5": { + "version": "1.0.1", + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsprim": { + "version": "1.4.2", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "3.3.0", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "object.assign": "^4.1.2" + } + }, + "junit-report-builder": { + "version": "2.1.0", + "dev": true, + "requires": { + "date-format": "0.0.2", + "lodash": "^4.17.15", + "make-dir": "^1.3.0", + "xmlbuilder": "^10.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + }, + "xmlbuilder": { + "version": "10.1.1", + "dev": true + } + } + }, + "junk": { + "version": "3.1.0", + "dev": true + }, + "killable": { + "version": "1.0.1", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "klaw-sync": { + "version": "6.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, + "klona": { + "version": "2.0.5", + "dev": true + }, + "lazy-universal-dotenv": { + "version": "3.0.1", + "dev": true, + "requires": { + "@babel/runtime": "^7.5.0", + "app-root-dir": "^1.0.2", + "core-js": "^3.0.4", + "dotenv": "^8.0.0", + "dotenv-expand": "^5.1.0" + } + }, + "leven": { + "version": "3.1.0", + "dev": true + }, + "levn": { + "version": "0.3.0", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lighthouse-logger": { + "version": "1.3.0", + "dev": true, + "requires": { + "debug": "^2.6.9", + "marky": "^1.2.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "lines-and-columns": { + "version": "1.2.4", + "dev": true + }, + "lint-staged": { + "version": "11.2.6", + "dev": true, + "requires": { + "cli-truncate": "2.1.0", + "colorette": "^1.4.0", + "commander": "^8.2.0", + "cosmiconfig": "^7.0.1", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "execa": "^5.1.1", + "listr2": "^3.12.2", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "3.3.0", + "supports-color": "8.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cli-truncate": { + "version": "2.1.0", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "commander": { + "version": "8.3.0", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "5.1.1", + "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" + } + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "listr": { + "version": "0.14.3", + "dev": true, + "requires": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "listr-silent-renderer": { + "version": "1.1.1", + "dev": true + }, + "listr-update-renderer": { + "version": "0.5.0", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "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" + } + }, + "indent-string": { + "version": "3.2.0", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "dev": true + } + } + }, + "listr-verbose-renderer": { + "version": "0.5.0", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + }, + "dependencies": { + "figures": { + "version": "2.0.0", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + } + } + }, + "listr2": { + "version": "3.14.0", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "cli-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "colorette": { + "version": "2.0.17", + "dev": true + }, + "log-update": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rxjs": { + "version": "7.5.5", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "slice-ansi": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "lit": { + "version": "2.2.5", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + } + }, + "lit-element": { + "version": "3.2.0", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + } + }, + "lit-html": { + "version": "2.2.5", + "dev": true, + "requires": { + "@types/trusted-types": "^2.0.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "dev": true, + "optional": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "dev": true, + "optional": true + } + } + }, + "loader-runner": { + "version": "2.4.0" + }, + "loader-utils": { + "version": "1.4.0", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21" + }, + "lodash-es": { + "version": "4.17.21" + }, + "lodash.camelcase": { + "version": "4.3.0" + }, + "lodash.chunk": { + "version": "4.2.0" + }, + "lodash.debounce": { + "version": "4.0.8", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0" + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "dev": true + }, + "log-symbols": { + "version": "1.0.2", + "dev": true, + "requires": { + "chalk": "^1.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "dev": true + } + } + }, + "log-update": { + "version": "2.3.0", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + } + } + } + }, + "loglevel": { + "version": "1.8.0", + "dev": true + }, + "loki": { + "version": "0.28.1", + "dev": true, + "requires": { + "@loki/integration-react": "^0.28.0", + "@loki/integration-react-native": "^0.28.0", + "@loki/integration-vue": "^0.28.0", + "@loki/runner": "^0.28.1", + "@loki/target-chrome-app": "^0.28.0", + "@loki/target-chrome-docker": "^0.28.1", + "@loki/target-native-android-emulator": "^0.28.0", + "@loki/target-native-ios-simulator": "^0.28.0" + }, + "dependencies": { + "@loki/runner": { + "version": "0.28.1", + "dev": true, + "requires": { + "@loki/core": "^0.28.0", + "@loki/diff-graphics-magick": "^0.28.0", + "@loki/diff-looks-same": "^0.28.0", + "@loki/diff-pixelmatch": "^0.28.0", + "@loki/target-chrome-app": "^0.28.0", + "@loki/target-chrome-aws-lambda": "^0.28.0", + "@loki/target-chrome-docker": "^0.28.1", + "@loki/target-native-android-emulator": "^0.28.0", + "@loki/target-native-ios-simulator": "^0.28.0", + "async": "^3.2.0", + "chalk": "^4.1.0", + "ci-info": "^2.0.0", + "cosmiconfig": "^7.0.0", + "fs-extra": "^9.1.0", + "import-jsx": "^4.0.0", + "ink": "^3.0.8", + "minimist": "^1.2.0", + "ramda": "^0.27.1", + "react": "^16.14.0", + "transliteration": "^2.2.0" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "ramda": { + "version": "0.27.2", + "dev": true + }, + "react": { + "version": "16.14.0", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "longest-streak": { + "version": "2.0.4" + }, + "looks-same": { + "version": "4.1.0", + "dev": true, + "requires": { + "color-diff": "^1.1.0", + "concat-stream": "^1.6.2", + "lodash": "^4.17.3", + "parse-color": "^1.0.0", + "pngjs": "^3.3.3" + } + }, + "loose-envify": { + "version": "1.4.0", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "dev": true, + "optional": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lowlight": { + "version": "1.20.0", + "dev": true, + "requires": { + "fault": "^1.0.0", + "highlight.js": "~10.7.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1" + } + } + }, + "makeerror": { + "version": "1.0.12", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "map-cache": { + "version": "0.2.2" + }, + "map-obj": { + "version": "1.0.1", + "dev": true + }, + "map-or-similar": { + "version": "1.5.0", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "requires": { + "object-visit": "^1.0.0" + } + }, + "markdown-escapes": { + "version": "1.0.4" + }, + "markdown-table": { + "version": "2.0.0", + "requires": { + "repeat-string": "^1.0.0" + } + }, + "marky": { + "version": "1.2.4", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-add-list-metadata": { + "version": "1.0.1", + "requires": { + "unist-util-visit-parents": "1.1.2" + }, + "dependencies": { + "unist-util-visit-parents": { + "version": "1.1.2" + } + } + }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-compact": { + "version": "2.0.1", + "requires": { + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.1.0" + }, + "unist-util-visit": { + "version": "2.0.3", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0" + }, + "mdurl": { + "version": "1.0.1", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.4.4", + "dev": true, + "requires": { + "fs-monkey": "1.0.3" + } + }, + "memoizerific": { + "version": "1.11.3", + "dev": true, + "requires": { + "map-or-similar": "^1.5.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "meow": { + "version": "3.7.0", + "dev": true, + "optional": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "dev": true, + "optional": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "dev": true, + "optional": true + }, + "read-pkg": { + "version": "1.1.0", + "dev": true, + "optional": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "dev": true, + "optional": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "dev": true + }, + "microevent.ts": { + "version": "0.1.1", + "dev": true + }, + "micromark": { + "version": "2.11.4", + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "6.0.3" + }, + "to-regex-range": { + "version": "2.1.1", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0" + }, + "mime-types": { + "version": "2.1.35", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "min-indent": { + "version": "1.0.1", + "dev": true + }, + "mini-create-react-context": { + "version": "0.4.1", + "requires": { + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" + } + }, + "minimalistic-assert": { + "version": "1.0.1" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1" + }, + "minimatch": { + "version": "3.1.2", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6" + }, + "minimist-options": { + "version": "4.1.0", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "arrify": { + "version": "1.0.1", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "dev": true + } + } + }, + "minipass": { + "version": "3.1.6", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.6", + "requires": { + "minimist": "^1.2.6" + } + }, + "moment": { + "version": "2.29.3" + }, + "moment-locales-webpack-plugin": { + "version": "1.2.0", + "dev": true, + "requires": { + "lodash.difference": "^4.5.0" + } + }, + "mousetrap": { + "version": "1.6.5" + }, + "mousetrap-global-bind": { + "version": "1.1.0", + "requires": {} + }, + "move-concurrently": { + "version": "1.0.1", + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + }, + "dependencies": { + "aproba": { + "version": "1.2.0" + } + } + }, + "ms": { + "version": "2.1.2" + }, + "multicast-dns": { + "version": "6.2.3", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "dev": true + }, + "nan": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz", + "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==", + "optional": true + }, + "nanoid": { + "version": "3.3.4", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3" + } + } + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2" + }, + "nested-error-stacks": { + "version": "2.1.1", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "no-proxy": { + "version": "1.0.3", + "dev": true, + "requires": { + "url-parse": "^1.2.0", + "wildcard": "^1.1.2" + } + }, + "node-ask": { + "version": "1.0.1", + "dev": true + }, + "node-dir": { + "version": "0.1.17", + "dev": true, + "requires": { + "minimatch": "^3.0.2" + } + }, + "node-fetch": { + "version": "2.6.7", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "0.10.0", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "events": { + "version": "3.3.0" + }, + "querystring": { + "version": "0.2.0" + }, + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "url": { + "version": "0.11.0", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + } + } + }, + "node-loggly-bulk": { + "version": "2.2.5", + "dev": true, + "requires": { + "json-stringify-safe": "5.0.x", + "moment": "^2.18.1", + "request": ">=2.76.0 <3.0.0" + } + }, + "node-notifier": { + "version": "8.0.2", + "dev": true, + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "dev": true, + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "dev": true, + "optional": true + }, + "which": { + "version": "2.0.2", + "dev": true, + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.5", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0" + }, + "normalize-range": { + "version": "0.1.2", + "dev": true + }, + "normalize-wheel": { + "version": "1.0.1" + }, + "npm-run-path": { + "version": "2.0.2", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "dev": true, + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "dev": true + }, + "nwsapi": { + "version": "2.2.0", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "dev": true + }, + "object-assign": { + "version": "4.1.1" + }, + "object-copy": { + "version": "0.1.0", + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "dev": true, + "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", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.4", + "dev": true, + "requires": { + "array.prototype.reduce": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.1" + } + }, + "object.hasown": { + "version": "1.1.1", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "object.pick": { + "version": "1.3.0", + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "objectorarray": { + "version": "1.0.5", + "dev": true + }, + "obuf": { + "version": "1.1.2", + "dev": true + }, + "oembed-parser": { + "version": "3.0.4", + "requires": { + "axios": "^0.27.2", + "bellajs": "^11.0.2", + "debug": "^4.3.4" + } + }, + "omit-deep": { + "version": "0.3.0", + "requires": { + "is-plain-object": "^2.0.1", + "unset-value": "^0.1.1" + } + }, + "on-finished": { + "version": "2.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "dev": true + }, + "once": { + "version": "1.4.0", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } + } + }, + "openurl": { + "version": "1.1.1", + "dev": true + }, + "opn": { + "version": "5.5.0", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.3", + "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" + } + }, + "os-browserify": { + "version": "0.3.0" + }, + "os-homedir": { + "version": "1.0.2", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "osnap": { + "version": "1.1.0", + "dev": true, + "requires": { + "execa": "^0.6.3", + "minimist": "^1.2.0", + "pify": "^3.0.0", + "tempfile": "^2.0.0", + "which": "^1.2.14" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.6.3", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "dev": true + } + } + }, + "p-all": { + "version": "2.1.0", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "p-each-series": { + "version": "2.2.0", + "dev": true + }, + "p-event": { + "version": "4.2.0", + "dev": true, + "requires": { + "p-timeout": "^3.1.0" + } + }, + "p-filter": { + "version": "2.1.0", + "dev": true, + "requires": { + "p-map": "^2.0.0" + }, + "dependencies": { + "p-map": { + "version": "2.1.0", + "dev": true + } + } + }, + "p-finally": { + "version": "1.0.0", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "3.0.1", + "dev": true, + "requires": { + "retry": "^0.12.0" + }, + "dependencies": { + "retry": { + "version": "0.12.0", + "dev": true + } + } + }, + "p-timeout": { + "version": "3.2.0", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0" + }, + "pako": { + "version": "1.0.11" + }, + "parallel-transform": { + "version": "1.2.0", + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "param-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "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" + } + }, + "parse-color": { + "version": "1.0.0", + "dev": true, + "requires": { + "color-convert": "~0.5.0" + }, + "dependencies": { + "color-convert": { + "version": "0.5.3", + "dev": true + } + } + }, + "parse-entities": { + "version": "2.0.0", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "dependencies": { + "character-entities": { + "version": "1.2.4" + } + } + }, + "parse-json": { + "version": "5.2.0", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-passwd": { + "version": "1.0.0", + "dev": true + }, + "parse5": { + "version": "6.0.1", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1" + }, + "patch-console": { + "version": "1.0.0", + "dev": true + }, + "patch-package": { + "version": "6.4.7", + "dev": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "open": { + "version": "7.4.2", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "slash": { + "version": "2.0.0", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + } + } + }, + "path-browserify": { + "version": "0.0.1" + }, + "path-dirname": { + "version": "1.0.2", + "devOptional": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-is-inside": { + "version": "1.0.2", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1" + } + } + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "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", + "dev": true + }, + "picocolors": { + "version": "0.2.1" + }, + "picomatch": { + "version": "2.3.1" + }, + "pify": { + "version": "4.0.1" + }, + "pinkie": { + "version": "2.0.4", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.5", + "dev": true + }, + "pixelmatch": { + "version": "5.3.0", + "dev": true, + "requires": { + "pngjs": "^6.0.0" + }, + "dependencies": { + "pngjs": { + "version": "6.0.0", + "dev": true + } + } + }, + "pkg-dir": { + "version": "5.0.0", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "pkg-up": { + "version": "3.1.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + } + } + }, + "please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pluralize": { + "version": "8.0.0", + "dev": true + }, + "pngjs": { + "version": "3.4.0", + "dev": true + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "polished": { + "version": "4.2.2", + "dev": true, + "requires": { + "@babel/runtime": "^7.17.8" + } + }, + "portfinder": { + "version": "1.0.28", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1" + }, + "postcss": { + "version": "7.0.39", + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-flexbugs-fixes": { + "version": "4.2.1", + "dev": true, + "requires": { + "postcss": "^7.0.26" + } + }, + "postcss-loader": { + "version": "4.3.0", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "requires": { + "postcss": "^7.0.5" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0" + }, + "prelude-ls": { + "version": "1.1.2", + "dev": true + }, + "prettier": { + "version": "2.3.0", + "dev": true + }, + "pretty-error": { + "version": "2.1.2", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "pretty-format": { + "version": "26.6.2", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "dev": true + } + } + }, + "pretty-hrtime": { + "version": "1.0.3", + "dev": true + }, + "prismjs": { + "version": "1.28.0", + "dev": true + }, + "process": { + "version": "0.11.10" + }, + "process-nextick-args": { + "version": "2.0.1" + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "progress-stream": { + "version": "2.0.0", + "dev": true, + "requires": { + "speedometer": "~1.0.0", + "through2": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1" + }, + "promise.allsettled": { + "version": "1.0.5", + "dev": true, + "requires": { + "array.prototype.map": "^1.0.4", + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "iterate-value": "^1.0.2" + } + }, + "promise.prototype.finally": { + "version": "3.1.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "prompts": { + "version": "2.4.2", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "dependencies": { + "kleur": { + "version": "3.0.3", + "dev": true + } + } + }, + "prop-types": { + "version": "15.8.1", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "property-expr": { + "version": "2.0.5" + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1" + }, + "pseudomap": { + "version": "1.0.2", + "dev": true + }, + "psl": { + "version": "1.8.0", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "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" + } + }, + "pump": { + "version": "3.0.0", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.3.2" + }, + "qs": { + "version": "6.10.5", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring": { + "version": "0.2.1" + }, + "querystring-es3": { + "version": "0.2.1" + }, + "querystringify": { + "version": "2.2.0", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "dev": true + }, + "ramda": { + "version": "0.28.0" + }, + "randombytes": { + "version": "2.1.0", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "raw-loader": { + "version": "4.0.2", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "react": { + "version": "17.0.2", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-codemirror2-react-17": { + "version": "1.0.0", + "requires": {} + }, + "react-devtools-core": { + "version": "4.24.7", + "dev": true, + "requires": { + "shell-quote": "^1.6.1", + "ws": "^7" + }, + "dependencies": { + "ws": { + "version": "7.5.8", + "dev": true, + "requires": {} + } + } + }, + "react-docgen": { + "version": "5.4.1", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "dependencies": { + "strip-indent": { + "version": "3.0.0", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + } + } + }, + "react-docgen-typescript": { + "version": "2.2.2", + "dev": true, + "requires": {} + }, + "react-dom": { + "version": "17.0.2", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-element-to-jsx-string": { + "version": "14.3.4", + "dev": true, + "requires": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "17.0.2" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "dev": true + } + } + }, + "react-fast-compare": { + "version": "2.0.4" + }, + "react-helmet": { + "version": "6.1.0", + "requires": { + "object-assign": "^4.1.1", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.1.1", + "react-side-effect": "^2.1.0" + }, + "dependencies": { + "react-fast-compare": { + "version": "3.2.0" + } + } + }, + "react-inspector": { + "version": "5.1.1", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "is-dom": "^1.0.0", + "prop-types": "^15.0.0" + } + }, + "react-is": { + "version": "16.13.1" + }, + "react-markdown": { + "version": "5.0.3", + "requires": { + "@types/mdast": "^3.0.3", + "@types/unist": "^2.0.3", + "html-to-react": "^1.3.4", + "mdast-add-list-metadata": "1.0.1", + "prop-types": "^15.7.2", + "react-is": "^16.8.6", + "remark-parse": "^9.0.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "unist-util-is": { + "version": "4.1.0" + }, + "unist-util-visit": { + "version": "2.0.3", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "react-oembed-container": { + "version": "1.0.1", + "requires": { + "prop-types": "^15.6.0" + } + }, + "react-reconciler": { + "version": "0.26.2", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-refresh": { + "version": "0.11.0", + "dev": true + }, + "react-remove-scroll": { + "version": "2.5.4", + "requires": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + } + }, + "react-remove-scroll-bar": { + "version": "2.3.3", + "requires": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + } + }, + "react-router": { + "version": "5.3.3", + "requires": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, + "react-router-dom": { + "version": "5.3.3", + "requires": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.3", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, + "react-side-effect": { + "version": "2.1.1", + "requires": {} + }, + "react-style-singleton": { + "version": "2.2.1", + "requires": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + } + }, + "react-syntax-highlighter": { + "version": "15.5.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.1", + "highlight.js": "^10.4.1", + "lowlight": "^1.17.0", + "prismjs": "^1.27.0", + "refractor": "^3.6.0" + } + }, + "react-use-gesture": { + "version": "9.1.3", + "requires": {} + }, + "react-virtuoso": { + "version": "0.20.3", + "requires": { + "resize-observer-polyfill": "^1.5.1", + "tslib": "^1.11.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1" + } + } + }, + "react-visibility-sensor": { + "version": "5.1.1", + "requires": { + "prop-types": "^15.7.2" + } + }, + "read-pkg": { + "version": "5.2.0", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "devOptional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "redent": { + "version": "1.0.0", + "dev": true, + "optional": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "dependencies": { + "indent-string": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "repeating": "^2.0.0" + } + } + } + }, + "refractor": { + "version": "3.6.0", + "dev": true, + "requires": { + "hastscript": "^6.0.0", + "parse-entities": "^2.0.0", + "prismjs": "~1.27.0" + }, + "dependencies": { + "prismjs": { + "version": "1.27.0", + "dev": true + } + } + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9" + }, + "regenerator-transform": { + "version": "0.15.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "regexpu-core": { + "version": "5.0.1", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "dev": true + }, + "remark": { + "version": "12.0.1", + "requires": { + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" + }, + "dependencies": { + "remark-parse": { + "version": "8.0.3", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + } + } + }, + "remark-breaks": { + "version": "2.0.2", + "requires": { + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.1.0" + }, + "unist-util-visit": { + "version": "2.0.3", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "remark-disable-tokenizers": { + "version": "1.1.0", + "requires": { + "clone": "^2.1.2" + } + }, + "remark-external-links": { + "version": "8.0.0", + "dev": true, + "requires": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "remark-footnotes": { + "version": "2.0.0", + "dev": true + }, + "remark-mdx": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "is-buffer": { + "version": "2.0.5", + "dev": true + }, + "json5": { + "version": "2.2.1", + "dev": true + }, + "remark-parse": { + "version": "8.0.3", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "dev": true + }, + "unified": { + "version": "9.2.0", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "remark-parse": { + "version": "9.0.0", + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, + "remark-slug": { + "version": "6.1.0", + "dev": true, + "requires": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "1.1.0", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "remark-stringify": { + "version": "8.1.1", + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "devOptional": true + }, + "rename-keys": { + "version": "1.2.0" + }, + "renderkid": { + "version": "2.0.7", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4" + }, + "repeat-string": { + "version": "1.6.1" + }, + "repeating": { + "version": "2.0.1", + "dev": true, + "optional": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.2", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.3", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "dev": true + }, + "require-package-name": { + "version": "2.0.1", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1" + }, + "resolve": { + "version": "1.22.0", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, + "resolve-pathname": { + "version": "3.0.0" + }, + "resolve-url": { + "version": "0.2.1" + }, + "restore-cursor": { + "version": "2.0.0", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, + "ret": { + "version": "0.1.15" + }, + "retry": { + "version": "0.13.1", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rsvp": { + "version": "4.8.5", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "requires": { + "aproba": "^1.1.1" + }, + "dependencies": { + "aproba": { + "version": "1.2.0" + } + } + }, + "rxjs": { + "version": "6.6.7", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.1.2" + }, + "safe-regex": { + "version": "1.1.0", + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2" + }, + "sane": { + "version": "4.1.0", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "sass": { + "version": "1.52.3", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "8.0.2", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + } + }, + "sax": { + "version": "1.2.1" + }, + "saxes": { + "version": "5.0.1", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "scheduler": { + "version": "0.20.2", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "dev": true + }, + "selfsigned": { + "version": "1.10.14", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "6.3.0" + }, + "semver-compare": { + "version": "1.0.0", + "dev": true + }, + "send": { + "version": "0.18.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-favicon": { + "version": "2.5.0", + "dev": true, + "requires": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5" + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.3", + "dev": true + } + } + }, + "shallowequal": { + "version": "1.1.0" + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "shell-quote": { + "version": "1.7.3", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "dependencies": { + "interpret": { + "version": "1.4.0", + "dev": true + } + } + }, + "shellwords": { + "version": "0.1.1", + "dev": true, + "optional": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "dev": true + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0" + }, + "source-map": { + "version": "0.5.7" + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.3" + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "requires": { + "kind-of": "^3.2.0" + } + }, + "sockjs": { + "version": "0.3.24", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.6.1", + "dev": true, + "requires": { + "debug": "^3.2.7", + "eventsource": "^2.0.2", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "source-list-map": { + "version": "2.0.1" + }, + "source-map": { + "version": "0.6.1" + }, + "source-map-js": { + "version": "1.0.2", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.1" + }, + "spdx-correct": { + "version": "3.1.1", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "speedometer": { + "version": "1.0.0", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + }, + "sshpk": { + "version": "1.17.0", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.2", + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stable": { + "version": "0.1.8", + "dev": true + }, + "stack-generator": { + "version": "2.0.10", + "requires": { + "stackframe": "^1.3.4" + } + }, + "stack-utils": { + "version": "2.0.5", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "dev": true + } + } + }, + "stackframe": { + "version": "1.3.4" + }, + "stacktrace-gps": { + "version": "3.1.2", + "requires": { + "source-map": "0.5.6", + "stackframe": "^1.3.4" + }, + "dependencies": { + "source-map": { + "version": "0.5.6" + } + } + }, + "stacktrace-js": { + "version": "2.0.2", + "requires": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, + "state-toggle": { + "version": "1.0.3" + }, + "static-extend": { + "version": "0.1.2", + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "2.0.1", + "dev": true + }, + "store2": { + "version": "2.13.2", + "dev": true + }, + "storybook-addon-designs": { + "version": "6.3.1", + "dev": true, + "requires": { + "@figspec/react": "^1.0.0" + } + }, + "stream-browserify": { + "version": "2.0.2", + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-each": { + "version": "1.2.3", + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "stream-shift": { + "version": "1.0.1" + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1" + } + } + }, + "string-argv": { + "version": "0.3.1", + "dev": true + }, + "string-length": { + "version": "4.0.2", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.matchall": { + "version": "4.0.7", + "dev": true, + "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.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.padend": { + "version": "3.1.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "string.prototype.padstart": { + "version": "3.1.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "stringify-entities": { + "version": "3.1.0", + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "dev": true, + "optional": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "style-loader": { + "version": "1.3.0", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^2.7.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1" + }, + "loader-utils": { + "version": "2.0.2", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "style-to-object": { + "version": "0.3.0", + "dev": true, + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "styled-components": { + "version": "5.3.5", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@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" + } + }, + "styled-system": { + "version": "5.1.5", + "requires": { + "@styled-system/background": "^5.1.2", + "@styled-system/border": "^5.1.5", + "@styled-system/color": "^5.1.2", + "@styled-system/core": "^5.1.2", + "@styled-system/flexbox": "^5.1.2", + "@styled-system/grid": "^5.1.2", + "@styled-system/layout": "^5.1.2", + "@styled-system/position": "^5.1.2", + "@styled-system/shadow": "^5.1.2", + "@styled-system/space": "^5.1.2", + "@styled-system/typography": "^5.1.2", + "@styled-system/variant": "^5.1.5", + "object-assign": "^4.1.1" + } + }, + "suncalc": { + "version": "1.9.0" + }, + "supports-color": { + "version": "5.5.0", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "svgson": { + "version": "4.1.0", + "requires": { + "deep-rename-keys": "^0.2.1", + "omit-deep": "0.3.0", + "xml-reader": "2.4.3" + } + }, + "symbol-observable": { + "version": "1.2.0", + "dev": true + }, + "symbol-tree": { + "version": "3.2.4", + "dev": true + }, + "symbol.prototype.description": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-symbol-description": "^1.0.0", + "has-symbols": "^1.0.2", + "object.getownpropertydescriptors": "^2.1.2" + } + }, + "synchronous-promise": { + "version": "2.0.15" + }, + "tabbable": { + "version": "4.0.0" + }, + "table": { + "version": "6.8.0", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "tapable": { + "version": "1.1.3" + }, + "tar": { + "version": "6.1.11", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + } + } + }, + "telejson": { + "version": "6.0.8", + "dev": true, + "requires": { + "@types/is-function": "^1.0.0", + "global": "^4.4.0", + "is-function": "^1.0.2", + "is-regex": "^1.1.2", + "is-symbol": "^1.0.3", + "isobject": "^4.0.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3" + }, + "dependencies": { + "isobject": { + "version": "4.0.0", + "dev": true + } + } + }, + "temp-dir": { + "version": "1.0.0", + "dev": true + }, + "tempfile": { + "version": "2.0.0", + "dev": true, + "requires": { + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "dev": true + } + } + }, + "tempy": { + "version": "1.0.1", + "dev": true, + "requires": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "dependencies": { + "del": { + "version": "6.1.1", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "is-path-inside": { + "version": "3.0.3", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "temp-dir": { + "version": "2.0.0", + "dev": true + }, + "type-fest": { + "version": "0.16.0", + "dev": true + } + } + }, + "terminal-link": { + "version": "2.1.1", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "4.3.2", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "type-fest": { + "version": "0.21.3", + "dev": true + } + } + }, + "terser": { + "version": "4.8.0", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "throat": { + "version": "5.0.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "2.0.5", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tiny-invariant": { + "version": "1.2.0" + }, + "tiny-warning": { + "version": "1.0.3" + }, + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "tmp-promise": { + "version": "3.0.2", + "dev": true, + "requires": { + "tmp": "^0.2.0" + } + }, + "tmpl": { + "version": "1.0.5", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1" + }, + "to-fast-properties": { + "version": "2.0.0" + }, + "to-object-path": { + "version": "0.3.0", + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "devOptional": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "toposort": { + "version": "2.0.2" + }, + "tough-cookie": { + "version": "2.5.0", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "dev": true + } + } + }, + "tr46": { + "version": "0.0.3", + "dev": true + }, + "transformation-matrix": { + "version": "2.1.1" + }, + "transliteration": { + "version": "2.2.0", + "dev": true, + "requires": { + "yargs": "^16.1.0" + } + }, + "tree-kill": { + "version": "1.2.2", + "dev": true + }, + "trim": { + "version": "0.0.1" + }, + "trim-newlines": { + "version": "1.0.0", + "dev": true, + "optional": true + }, + "trim-trailing-lines": { + "version": "1.1.4" + }, + "trough": { + "version": "1.0.5" + }, + "ts-dedent": { + "version": "2.2.0", + "dev": true + }, + "ts-mdast": { + "version": "1.0.0", + "dev": true, + "requires": { + "@types/mdast": "^3.0.3", + "@types/unist": "^2.0.3" + } + }, + "ts-pnp": { + "version": "1.2.0", + "dev": true + }, + "tslib": { + "version": "2.4.0" + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "tty-browserify": { + "version": "0.0.0" + }, + "tunnel": { + "version": "0.0.6", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "dev": true + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "optional": true, + "peer": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.3", + "dev": true + }, + "uglify-js": { + "version": "3.16.0", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unfetch": { + "version": "4.2.0", + "dev": true + }, + "unherit": { + "version": "1.1.3", + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "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", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unified": { + "version": "9.2.2", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5" + } + } + }, + "union-value": { + "version": "1.0.1", + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-filename": { + "version": "1.1.1", + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unist-util-is": { + "version": "5.1.1" + }, + "unist-util-remove": { + "version": "2.1.0", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.1.0", + "dev": true + } + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "requires": { + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "4.1.0" + }, + "unist-util-visit": { + "version": "2.0.3", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "3.1.0", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + } + }, + "unist-util-visit-parents": { + "version": "4.1.1", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "dev": true + }, + "unset-value": { + "version": "0.1.2", + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + } + }, + "untildify": { + "version": "2.1.0", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0" + } + }, + "upath": { + "version": "1.2.0", + "devOptional": true + }, + "urbit-ob": { + "version": "5.0.1", + "requires": { + "bn.js": "^4.11.8", + "lodash.chunk": "^4.2.0", + "lodash.isequal": "^4.5.0" + } + }, + "uri-js": { + "version": "4.4.1", + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1" + } + } + }, + "urix": { + "version": "0.1.0" + }, + "url": { + "version": "0.10.3", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "querystring": { + "version": "0.2.0" + } + } + }, + "url-loader": { + "version": "4.1.1", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "2.2.1", + "dev": true + }, + "loader-utils": { + "version": "2.0.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "url-parse": { + "version": "1.5.10", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1" + }, + "use-callback-ref": { + "version": "1.3.0", + "requires": { + "tslib": "^2.0.0" + } + }, + "use-sidecar": { + "version": "1.1.2", + "requires": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + } + }, + "util": { + "version": "0.11.1", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3" + } + } + }, + "util-deprecate": { + "version": "1.0.2" + }, + "util.promisify": { + "version": "1.0.0", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "dev": true + }, + "uuid": { + "version": "8.0.0" + }, + "uuid-browser": { + "version": "3.1.0", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "v8-to-istanbul": { + "version": "9.0.0", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-equal": { + "version": "1.0.1" + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "verror": { + "version": "1.10.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "dev": true + } + } + }, + "vfile": { + "version": "4.2.1", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.5" + } + } + }, + "vfile-location": { + "version": "3.2.0" + }, + "vfile-message": { + "version": "2.0.4", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vm-browserify": { + "version": "1.1.2" + }, + "w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "wait-on": { + "version": "5.3.0", + "dev": true, + "requires": { + "axios": "^0.21.1", + "joi": "^17.3.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^6.6.3" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "dev": true, + "requires": { + "follow-redirects": "^1.14.0" + } + } + } + }, + "walker": { + "version": "1.0.8", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "warning": { + "version": "4.0.3", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "1.7.5", + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "optional": true + }, + "braces": { + "version": "2.3.2", + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "optional": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-namespaces": { + "version": "1.1.4", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "dev": true + }, + "webpack": { + "version": "4.46.0", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "webpack-cli": { + "version": "3.3.12", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "interpret": { + "version": "1.4.0", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.6.0", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.11.3", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "dev": true + }, + "braces": { + "version": "2.3.2", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "html-entities": { + "version": "1.4.0", + "dev": true + }, + "import-local": { + "version": "2.0.0", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "ip": { + "version": "1.1.8", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "3.1.0", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "url": { + "version": "0.11.0", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ws": { + "version": "6.2.2", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-filter-warnings-plugin": { + "version": "1.2.1", + "dev": true, + "requires": {} + }, + "webpack-hot-middleware": { + "version": "2.25.1", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "querystring": "^0.2.0", + "strip-ansi": "^6.0.0" + } + }, + "webpack-log": { + "version": "2.0.0", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "dev": true + } + } + }, + "webpack-sources": { + "version": "1.4.3", + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "webpack-virtual-modules": { + "version": "0.2.2", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "websocket-driver": { + "version": "0.7.4", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "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-module": { + "version": "2.0.0", + "dev": true + }, + "wide-align": { + "version": "1.1.5", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "widest-line": { + "version": "3.1.0", + "dev": true, + "requires": { + "string-width": "^4.0.0" + } + }, + "wildcard": { + "version": "1.1.2", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "dev": true + }, + "workbox-cacheable-response": { + "version": "6.5.3", + "requires": { + "workbox-core": "6.5.3" + } + }, + "workbox-core": { + "version": "6.5.3" + }, + "workbox-expiration": { + "version": "6.5.3", + "requires": { + "idb": "^6.1.4", + "workbox-core": "6.5.3" + } + }, + "workbox-precaching": { + "version": "6.5.3", + "requires": { + "workbox-core": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" + } + }, + "workbox-recipes": { + "version": "6.5.3", + "requires": { + "workbox-cacheable-response": "6.5.3", + "workbox-core": "6.5.3", + "workbox-expiration": "6.5.3", + "workbox-precaching": "6.5.3", + "workbox-routing": "6.5.3", + "workbox-strategies": "6.5.3" + } + }, + "workbox-routing": { + "version": "6.5.3", + "requires": { + "workbox-core": "6.5.3" + } + }, + "workbox-strategies": { + "version": "6.5.3", + "requires": { + "workbox-core": "6.5.3" + } + }, + "worker-farm": { + "version": "1.7.0", + "requires": { + "errno": "~0.1.7" + } + }, + "worker-rpc": { + "version": "0.1.1", + "dev": true, + "requires": { + "microevent.ts": "~0.1.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2" + }, + "write-file-atomic": { + "version": "3.0.3", + "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": "8.8.0", + "dev": true, + "requires": {} + }, + "x-default-browser": { + "version": "0.4.0", + "dev": true, + "requires": { + "default-browser-id": "^1.0.4" + } + }, + "xml-lexer": { + "version": "0.2.2", + "requires": { + "eventemitter3": "^2.0.0" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "dev": true + }, + "xml-reader": { + "version": "2.4.3", + "requires": { + "eventemitter3": "^2.0.0", + "xml-lexer": "^0.2.2" + } + }, + "xml2js": { + "version": "0.4.19", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7" + }, + "xmlchars": { + "version": "2.2.0", + "dev": true + }, + "xtend": { + "version": "4.0.2" + }, + "y18n": { + "version": "4.0.3" + }, + "yallist": { + "version": "4.0.0", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "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" + }, + "dependencies": { + "y18n": { + "version": "5.0.8", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "dev": true + }, + "yarn-or-npm": { + "version": "3.0.1", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "pkg-dir": "^4.2.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true + }, + "yoga-layout-prebuilt": { + "version": "1.10.0", + "dev": true, + "requires": { + "@types/yoga-layout": "1.9.2" + } + }, + "yup": { + "version": "0.29.3", + "requires": { + "@babel/runtime": "^7.10.5", + "fn-name": "~3.0.0", + "lodash": "^4.17.15", + "lodash-es": "^4.17.11", + "property-expr": "^2.0.2", + "synchronous-promise": "^2.0.13", + "toposort": "^2.0.2" + } + }, + "zustand": { + "version": "3.7.2", + "requires": {} + }, + "zwitch": { + "version": "1.0.5", + "dev": true + } + } } diff --git a/pkg/interface/package.json b/pkg/interface/package.json index f9e362bb6..031e7df8e 100644 --- a/pkg/interface/package.json +++ b/pkg/interface/package.json @@ -5,22 +5,19 @@ "main": "index.js", "private": true, "engines": { - "node": "16.14.0" + "node": "14.19.0" }, "dependencies": { "@babel/runtime": "^7.12.5", "@fingerprintjs/fingerprintjs": "^3.3.3", "@radix-ui/react-dialog": "^0.1.0", - "@reach/disclosure": "^0.10.5", - "@reach/menu-button": "^0.10.5", - "@reach/tabs": "^0.10.5", "@react-spring/web": "^9.1.1", "@tlon/indigo-dark": "^1.0.6", "@tlon/indigo-light": "^1.0.7", "@tlon/indigo-react": "^1.2.27", - "@tlon/sigil-js": "^1.4.3", - "@urbit/api": "^2.1.0", - "@urbit/http-api": "^2.1.0", + "@tlon/sigil-js": "^1.4.5", + "@urbit/api": "^2.1.1", + "@urbit/http-api": "2.1.1", "any-ascii": "^0.1.7", "aws-sdk": "^2.830.0", "big-integer": "^1.6.48", @@ -36,15 +33,15 @@ "mousetrap": "^1.6.5", "mousetrap-global-bind": "^1.1.0", "normalize-wheel": "1.0.1", - "oembed-parser": "^1.4.5", + "oembed-parser": "^3.0.4", "prop-types": "^15.7.2", "querystring": "^0.2.0", "react": "^17.0.2", - "react-codemirror2": "^6.0.1", + "react-codemirror2-react-17": "^1.0.0", "react-dom": "^17.0.2", "react-helmet": "^6.1.0", - "react-markdown": "^4.3.1", - "react-oembed-container": "^1.0.0", + "react-markdown": "^5.0.3", + "react-oembed-container": "^1.0.1", "react-router-dom": "^5.2.0", "react-use-gesture": "^9.1.3", "react-virtuoso": "^0.20.3", @@ -107,6 +104,7 @@ "lint-staged": "^11.0.0", "loki": "^0.28.1", "moment-locales-webpack-plugin": "^1.2.0", + "patch-package": "^6.4.7", "react-refresh": "^0.11.0", "sass": "^1.32.5", "sass-loader": "^8.0.2", @@ -131,7 +129,8 @@ "storybook": "start-storybook -p 6006", "build-storybook": "build-storybook", "chromatic": "chromatic --exit-zero-on-changes", - "hook-lint": "eslint --cache --fix" + "hook-lint": "eslint --cache --fix", + "postinstall": "patch-package" }, "author": "", "license": "MIT", diff --git a/pkg/interface/src/logic/lib/suspend.ts b/pkg/interface/src/logic/lib/suspend.ts index 1d6d5f468..63e497afa 100644 --- a/pkg/interface/src/logic/lib/suspend.ts +++ b/pkg/interface/src/logic/lib/suspend.ts @@ -4,7 +4,7 @@ export interface Suspender { read: () => T; } -export function suspend(awaiting: Promise): Suspender { +export function suspend(awaiting: Promise, defaultValue?: any): Suspender { let state: SuspendState = 'pending'; let result: T | null = null; @@ -22,8 +22,10 @@ export function suspend(awaiting: Promise): Suspender { read: () => { if (state === 'result') { return result!; - } else if (state === 'error') { + } else if (state === 'error' && typeof defaultValue === 'undefined') { throw result; + } else if (state === 'error' && typeof defaultValue !== 'undefined') { + return defaultValue; } else { throw promise; } diff --git a/pkg/interface/src/logic/lib/useStorage.ts b/pkg/interface/src/logic/lib/useStorage.ts index e7efbce6a..dca5e68bf 100644 --- a/pkg/interface/src/logic/lib/useStorage.ts +++ b/pkg/interface/src/logic/lib/useStorage.ts @@ -34,7 +34,8 @@ const useStorage = ({ accept = '*' } = { accept: '*' }): IuseStorage => { } client.current = new S3Client({ credentials: s3.credentials, - endpoint: s3.credentials.endpoint + endpoint: s3.credentials.endpoint, + signatureVersion: 'v4' }); } }, [gcp.token, s3.credentials]); diff --git a/pkg/interface/src/logic/lib/workspace.ts b/pkg/interface/src/logic/lib/workspace.ts index 2d8a93b12..30b3e893b 100644 --- a/pkg/interface/src/logic/lib/workspace.ts +++ b/pkg/interface/src/logic/lib/workspace.ts @@ -11,8 +11,7 @@ export function getTitleFromWorkspace( case 'messages': return 'Messages'; case 'group': - const association = associations.groups[workspace.group]; - return association?.metadata?.title || ''; + return associations.groups[workspace.group]?.metadata?.title || 'Groups'; } } diff --git a/pkg/interface/src/logic/state/embed.tsx b/pkg/interface/src/logic/state/embed.tsx index 3edd9bbb6..e47261633 100644 --- a/pkg/interface/src/logic/state/embed.tsx +++ b/pkg/interface/src/logic/state/embed.tsx @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import create from 'zustand'; -import { suspend, Suspender , suspendWithResult } from '../lib/suspend'; +import { suspend, Suspender } from '../lib/suspend'; import { jsonFetch } from '~/logic/lib/util'; export interface EmbedState { @@ -23,17 +23,19 @@ const useEmbedState = create((set, get) => ({ const search = new URLSearchParams({ url }); + const embed = await jsonFetch(`${OEMBED_PROVIDER}?${search.toString()}`); - const { embeds: es } = get(); - set({ embeds: { ...es, [url]: embed } }); return embed; }, getEmbed: (url: string): Suspender => { const { fetch, embeds } = get(); if(url in embeds) { - return suspendWithResult(embeds[url]); + return embeds[url]; } - return suspend(fetch(url)); + const { embeds: es } = get(); + const embed = suspend(fetch(url), {}); + set({ embeds: { ...es, [url]: embed } }); + return embed; } })); diff --git a/pkg/interface/src/views/apps/chat/DmResource.tsx b/pkg/interface/src/views/apps/chat/DmResource.tsx index dfec7c345..1ad9db99a 100644 --- a/pkg/interface/src/views/apps/chat/DmResource.tsx +++ b/pkg/interface/src/views/apps/chat/DmResource.tsx @@ -1,5 +1,6 @@ import { acceptDm, cite, Content, declineDm, deSig, Post } from '@urbit/api'; import React, { useCallback, useEffect } from 'react'; +import Helmet from 'react-helmet'; import _ from 'lodash'; import bigInt from 'big-integer'; import { Box, Row, Col, Text, Center } from '@tlon/indigo-react'; @@ -49,6 +50,21 @@ function quoteReply(post: Post) { return `${reply}\n\n~${post.author}:`; } +export function DmHelmet(props: DmHelmetProps) { + const { ship } = props; + const hark = useHarkDm(ship); + const unreadCount = hark.count; + const contact = useContact(ship); + const { hideNicknames } = useSettingsState(selectCalmState); + const showNickname = !hideNicknames && Boolean(contact); + const nickname = showNickname ? contact!.nickname : cite(ship) ?? ship; + return( + + {unreadCount ? `(${String(unreadCount)}) ` : ''}{ nickname } + + ); +} + export function DmResource(props: DmResourceProps) { const { ship } = props; const dm = useDM(ship); diff --git a/pkg/interface/src/views/apps/chat/components/ChatEditor.tsx b/pkg/interface/src/views/apps/chat/components/ChatEditor.tsx index 094eebfd6..9f2996ee8 100644 --- a/pkg/interface/src/views/apps/chat/components/ChatEditor.tsx +++ b/pkg/interface/src/views/apps/chat/components/ChatEditor.tsx @@ -5,7 +5,7 @@ import 'codemirror/addon/hint/show-hint'; import 'codemirror/lib/codemirror.css'; import 'codemirror/mode/markdown/markdown'; import React, { useRef, ClipboardEvent, useEffect, useImperativeHandle } from 'react'; -import { Controlled as CodeEditor } from 'react-codemirror2'; +import { Controlled as CodeEditor } from 'react-codemirror2-react-17'; import styled from 'styled-components'; import { MOBILE_BROWSER_REGEX } from '~/logic/lib/util'; import useSettingsState from '~/logic/state/settings'; diff --git a/pkg/interface/src/views/apps/links/components/LinkBlockItem.tsx b/pkg/interface/src/views/apps/links/components/LinkBlockItem.tsx index 108298a8d..66419651a 100644 --- a/pkg/interface/src/views/apps/links/components/LinkBlockItem.tsx +++ b/pkg/interface/src/views/apps/links/components/LinkBlockItem.tsx @@ -1,18 +1,17 @@ import React from 'react'; import { Icon, - Center, Row, Text, Col, Box, CenterProps } from '@tlon/indigo-react'; -import { hasProvider } from 'oembed-parser'; -import { AUDIO_REGEX, IMAGE_REGEX } from '~/views/components/RemoteContent'; +import { AUDIO_REGEX, IMAGE_REGEX, validOembedCheck } from '~/views/components/RemoteContent'; import { AudioPlayer } from '~/views/components/AudioPlayer'; import { useHistory } from 'react-router'; import { useHovering } from '~/logic/lib/util'; +import { useEmbed } from '~/logic/state/embed'; import Author from '~/views/components/Author'; import { GraphNode, @@ -38,8 +37,32 @@ export interface LinkBlockItemProps { summary?: boolean; } -export function LinkBlockItem(props: LinkBlockItemProps & CenterProps) { - const { node, summary, size, m, border = 1, objectFit, ...rest } = props; +export const LinkBlockItem = (props: LinkBlockItemProps & CenterProps) => { + const { node, ...rest } = props; + const { post } = node; + const { contents } = post; + + const [{ text: title }, ...content] = contents as [ + TextContent, + UrlContent | ReferenceContent + ]; + let url = ''; + if ('url' in content?.[0]) { + url = content[0].url; + } + + return( + }> + + + ); +} + +function LinkBlockItemInner(props: LinkBlockItemProps & CenterProps) { + const { node, summary, m, border = 1, objectFit, ...rest } = props; const { post, children } = node; const { contents, index, author } = post; @@ -56,8 +79,9 @@ export function LinkBlockItem(props: LinkBlockItemProps & CenterProps) { const isImage = IMAGE_REGEX.test(url); const isAudio = AUDIO_REGEX.test(url); + const oembed = useEmbed(url); + const isOembed = validOembedCheck(oembed, url); - const isOembed = hasProvider(url); const history = useHistory(); const { hovering, bind } = useHovering(); const onClick = () => { @@ -65,70 +89,67 @@ export function LinkBlockItem(props: LinkBlockItemProps & CenterProps) { history.push(`${pathname}/index${index}${search}`); }; return ( -
    - }> - {isReference ? ( - summary ? ( - - ) : ( - - ) - ) : isImage ? ( - - ) : isAudio ? ( - - ) : isOembed ? ( - - ) : ( - - )} - - - - - - {title} - - - - {children.size} + + {isReference ? ( + summary ? ( + + ) : ( + + ) + ) : isImage ? ( + + ) : isAudio ? ( + + ) : isOembed ? ( + + ) : ( + + )} + + + + + {title} + + + + {children.size} + - - - - - - -
    + + + + + + + ); } diff --git a/pkg/interface/src/views/apps/links/components/LinkDetail.tsx b/pkg/interface/src/views/apps/links/components/LinkDetail.tsx index 6981de391..1e3a51bdc 100644 --- a/pkg/interface/src/views/apps/links/components/LinkDetail.tsx +++ b/pkg/interface/src/views/apps/links/components/LinkDetail.tsx @@ -1,4 +1,4 @@ -import { Col, Row, RowProps } from '@tlon/indigo-react'; +import { Center, Col, Row, RowProps } from '@tlon/indigo-react'; import { Association, GraphNode, markEachAsRead, TextContent, UrlContent } from '@urbit/api'; import React, { useEffect } from 'react'; import { useGroup } from '~/logic/state/group'; @@ -27,21 +27,13 @@ export function LinkDetail(props: LinkDetailProps) { return ( /* @ts-ignore indio props?? */ - +
    + +
    { try { - Object.keys(values).forEach((key) => { + for (const key in values) { const newValue = key !== 'color' ? values[key] : uxToHex(values[key]); - if (newValue !== contact[key]) { - if (key === 'isPublic') { - airlock.poke(setPublic(newValue)); - return; - } else if (key === 'groups') { - const toRemove: string[] = _.difference( - contact?.groups || [], - newValue - ); - const toAdd: string[] = _.difference( - newValue, - contact?.groups || [] - ); - toRemove.forEach(e => - airlock.poke(editContact(ship, { 'remove-group': resourceFromPath(e) })) - ); - toAdd.forEach(e => - airlock.poke(editContact(ship, { 'add-group': resourceFromPath(e) })) - ); - } else if (key !== 'last-updated' && key !== 'isPublic') { - airlock.poke(editContact(ship, { [key]: newValue })); - return; + if (newValue === contact[key] || key === 'last-updated') { + continue; + } else if (key === 'isPublic') { + await airlock.poke(setPublic(newValue)); + } else if (key === 'groups') { + const toRemove: string[] = _.difference( + contact?.groups || [], + newValue + ); + const toAdd: string[] = _.difference( + newValue, + contact?.groups || [] + ); + for (const i in toRemove) { + const group = resourceFromPath(toRemove[i]); + await airlock.poke(editContact(ship, { 'remove-group': group })); } + for (const i in toAdd) { + const group = resourceFromPath(toAdd[i]); + await airlock.poke(editContact(ship, { 'add-group': group })); + } + } else { + await airlock.poke(editContact(ship, { [key]: newValue })); } - }); + } history.push(`/~profile/${ship}`); } catch (e) { console.error(e); diff --git a/pkg/interface/src/views/apps/publish/components/MarkdownEditor.tsx b/pkg/interface/src/views/apps/publish/components/MarkdownEditor.tsx index 450bc9682..e22d2f7bb 100644 --- a/pkg/interface/src/views/apps/publish/components/MarkdownEditor.tsx +++ b/pkg/interface/src/views/apps/publish/components/MarkdownEditor.tsx @@ -6,7 +6,7 @@ import 'codemirror/lib/codemirror.css'; import 'codemirror/mode/markdown/markdown'; import { useFormikContext } from 'formik'; import React, { useCallback, useRef } from 'react'; -import { UnControlled as CodeEditor } from 'react-codemirror2'; +import { UnControlled as CodeEditor } from 'react-codemirror2-react-17'; import { Prompt } from 'react-router-dom'; import { useFileUpload } from '~/logic/lib/useFileUpload'; import { IuseStorage } from '~/logic/lib/useStorage'; @@ -23,6 +23,7 @@ interface MarkdownEditorProps { value: string; onChange: (s: string) => void; onBlur?: (e: any) => void; + disabled?: boolean; } const PromptIfDirty = () => { @@ -39,7 +40,7 @@ const PromptIfDirty = () => { export function MarkdownEditor( props: MarkdownEditorProps & PropFunc ) { - const { onBlur, placeholder, value, onChange, ...boxProps } = props; + const { onBlur, placeholder, value, onChange, disabled, ...boxProps } = props; const options = { mode: MARKDOWN_CONFIG, @@ -56,7 +57,9 @@ export function MarkdownEditor( const handleChange = useCallback( (_e, _d, v: string) => { - onChange(v); + if (!disabled) { + onChange(v); + } }, [onChange] ); @@ -93,6 +96,7 @@ export function MarkdownEditor( p={1} border={1} borderColor="lightGray" + backgroundColor={disabled ? 'lightGray' : 'white'} borderRadius={2} height={['calc(100% - 22vh)', '100%']} {...boxProps} diff --git a/pkg/interface/src/views/apps/publish/components/MarkdownField.tsx b/pkg/interface/src/views/apps/publish/components/MarkdownField.tsx index f779b1c6a..20ff071da 100644 --- a/pkg/interface/src/views/apps/publish/components/MarkdownField.tsx +++ b/pkg/interface/src/views/apps/publish/components/MarkdownField.tsx @@ -6,14 +6,17 @@ import { MarkdownEditor } from './MarkdownEditor'; export const MarkdownField = ({ id, + disabled, ...rest -}: { id: string } & Parameters[0]) => { +}: { id: string; disabled?: boolean } & Parameters[0]) => { const [{ value, onBlur }, { error, touched }, { setValue }] = useField(id); const handleBlur = useCallback( (e: any) => { - _.set(e, 'target.id', id); - onBlur && onBlur(e); + if (!disabled) { + _.set(e, 'target.id', id); + onBlur && onBlur(e); + } }, [onBlur, id] ); @@ -23,7 +26,7 @@ export const MarkdownField = ({ return ( {error} diff --git a/pkg/interface/src/views/apps/publish/components/Note.tsx b/pkg/interface/src/views/apps/publish/components/Note.tsx index 988e81eea..b5f7f5f2c 100644 --- a/pkg/interface/src/views/apps/publish/components/Note.tsx +++ b/pkg/interface/src/views/apps/publish/components/Note.tsx @@ -26,6 +26,7 @@ interface NoteProps { } export function NoteContent({ post }) { + console.log(post.contents); return ( diff --git a/pkg/interface/src/views/apps/publish/components/NoteForm.tsx b/pkg/interface/src/views/apps/publish/components/NoteForm.tsx index 42fa905d2..ca484c036 100644 --- a/pkg/interface/src/views/apps/publish/components/NoteForm.tsx +++ b/pkg/interface/src/views/apps/publish/components/NoteForm.tsx @@ -1,5 +1,7 @@ import { - Button, Col, ManagedTextInputField as Input, + Button, + Col, + ManagedTextInputField as Input, Row } from '@tlon/indigo-react'; import { Form, Formik, FormikHelpers } from 'formik'; @@ -31,7 +33,8 @@ export interface PostFormSchema { } export function PostForm(props: PostFormProps) { - const { initial, onSubmit, submitLabel, loadingText, cancel, history } = props; + const { initial, onSubmit, submitLabel, loadingText, cancel, history } = + props; return ( @@ -40,30 +43,49 @@ export function PostForm(props: PostFormProps) { initialValues={initial} onSubmit={onSubmit} > -
    - - - - - {submitLabel} - - {cancel && } + {({ isSubmitting }) => ( + + + + + + {submitLabel} + + {cancel && ( + + )} + - - - + + + )} ); diff --git a/pkg/interface/src/views/components/Author.tsx b/pkg/interface/src/views/components/Author.tsx index c246c4ded..6554a02dc 100644 --- a/pkg/interface/src/views/components/Author.tsx +++ b/pkg/interface/src/views/components/Author.tsx @@ -3,7 +3,7 @@ import moment from 'moment'; import React, { ReactElement, ReactNode } from 'react'; import { Sigil } from '~/logic/lib/sigil'; import { useCopy } from '~/logic/lib/useCopy'; -import { cite, uxToHex } from '~/logic/lib/util'; +import { cite, deSig, uxToHex } from '~/logic/lib/util'; import { useContact } from '~/logic/state/contact'; import { useDark } from '~/logic/state/join'; import useSettingsState, { selectCalmState, useShowNickname } from '~/logic/state/settings'; @@ -52,7 +52,7 @@ function Author(props: AuthorProps & PropFunc): ReactElement { const { hideAvatars } = useSettingsState(selectCalmState); const name = showNickname && contact ? contact.nickname : cite(ship); const stamp = moment(date); - const { copyDisplay, doCopy } = useCopy(`~${ship}`, name); + const { copyDisplay, doCopy } = useCopy(`~${deSig(ship)}`, name); const sigil = fullNotIcon ? ( diff --git a/pkg/interface/src/views/components/RemoteContent/embed.tsx b/pkg/interface/src/views/components/RemoteContent/embed.tsx index caaac93c3..b646b4e17 100644 --- a/pkg/interface/src/views/components/RemoteContent/embed.tsx +++ b/pkg/interface/src/views/components/RemoteContent/embed.tsx @@ -28,7 +28,7 @@ import { Link } from 'react-router-dom'; import { AppPermalink, referenceToPermalink } from '~/logic/lib/permalinks'; import useMetadataState from '~/logic/state/metadata'; import { RemoteContentWrapper } from './wrapper'; -import { useEmbed } from '~/logic/state/embed'; +import { Suspender } from '~/logic/lib/suspend'; import { IS_SAFARI } from '~/logic/lib/platform'; import useDocketState, { useTreaty } from '~/logic/state/docket'; import { AppTile } from '~/views/apps/permalinks/embed'; @@ -97,6 +97,7 @@ export function RemoteContentImageEmbed( objectFit="cover" borderRadius={2} onError={onError} + style={{ imageRendering: '-webkit-optimize-contrast' }} {...props} />
    @@ -319,6 +320,7 @@ type RemoteContentOembedProps = { renderUrl?: boolean; thumbnail?: boolean; tall?: boolean; + oembed: Suspender; } & RemoteContentEmbedProps & PropFunc; @@ -332,10 +334,9 @@ export const RemoteContentOembed = React.forwardRef< HTMLDivElement, RemoteContentOembedProps >((props, ref) => { - const { url, renderUrl = false, thumbnail = false, ...rest } = props; - const oembed = useEmbed(url); + const { url, oembed, renderUrl = false, thumbnail = false, ...rest } = props; + const embed = oembed.read(); - const fallbackError = new Error('fallback'); const [aspect, width, height] = useMemo(() => { if(!('height' in embed && typeof embed.height === 'number' @@ -373,11 +374,9 @@ export const RemoteContentOembed = React.forwardRef< dangerouslySetInnerHTML={{ __html: embed.html }} > - ) : renderUrl ? ( + ) : ( - ) : (() => { - throw fallbackError; -})() + ) } ); diff --git a/pkg/interface/src/views/components/RemoteContent/index.tsx b/pkg/interface/src/views/components/RemoteContent/index.tsx index dc1dbaa8f..826ac9ddd 100644 --- a/pkg/interface/src/views/components/RemoteContent/index.tsx +++ b/pkg/interface/src/views/components/RemoteContent/index.tsx @@ -1,12 +1,17 @@ -import { hasProvider } from 'oembed-parser'; +import { + Box +} from '@tlon/indigo-react'; import React from 'react'; import useSettingsState from '~/logic/state/settings'; import { RemoteContentAudioEmbed, RemoteContentImageEmbed, RemoteContentOembed, - RemoteContentVideoEmbed + RemoteContentVideoEmbed, + RemoteContentEmbedFallback } from './embed'; +import { useEmbed } from '~/logic/state/embed'; +import { Suspender } from '~/logic/lib/suspend'; import { TruncatedText } from '~/views/components/TruncatedText'; import { RemoteContentWrapper } from './wrapper'; import AsyncFallback from '../AsyncFallback'; @@ -43,8 +48,34 @@ export const IMAGE_REGEX = new RegExp( export const AUDIO_REGEX = new RegExp(/(\.mp3|\.wav|\.ogg|\.m4a)$/i); export const VIDEO_REGEX = new RegExp(/(\.mov|\.mp4|\.ogv)$/i); +// This is used to prevent our oembed parser from +// trying to embed facebook/instagram links, which require an API key +const isFacebookGraphDependent = (url: string) => { + const caseDesensitizedURL = url.toLowerCase() + return (caseDesensitizedURL.includes('facebook.com') || caseDesensitizedURL.includes('instagram.com')) +} + +export const validOembedCheck = (embed: Suspender, url: string) => { + if (!isFacebookGraphDependent(url)) { + if (!embed.read().hasOwnProperty("error")) { + return true + } + } + return false +} + +export const RemoteContent = (props: RemoteContentProps) => { + const {url, ...rest} = props + return( + }> + + + ) +} + + const emptyRef = () => {}; -export function RemoteContent(props: RemoteContentProps) { +function RemoteContentInner(props: RemoteContentProps) { const { url, embedRef = emptyRef, @@ -57,45 +88,51 @@ export function RemoteContent(props: RemoteContentProps) { const isImage = IMAGE_REGEX.test(url); const isAudio = AUDIO_REGEX.test(url); const isVideo = VIDEO_REGEX.test(url); - const isOembed = hasProvider(url); + const oembed = useEmbed(url); + const isOembed = validOembedCheck(oembed, url); + const wrapperProps = { url, tall, embedOnly: !renderUrl || tall }; - const fallback = !renderUrl ? null : ( - - {url} - - ); + const fallback = null; if (isImage && remoteContentPolicy.imageShown) { return ( - - - + + + + + ); } else if (isAudio && remoteContentPolicy.audioShown) { return ( - - - + + + + + ); } else if (isVideo && remoteContentPolicy.videoShown) { return ( - } - > - {url} - + + } + > + {url} + + ); } else if (isOembed && remoteContentPolicy.oembedShown) { return ( - - - + + + + + ); } return fallback; diff --git a/pkg/interface/src/views/components/RichText.tsx b/pkg/interface/src/views/components/RichText.tsx index c242e4ab6..f103b8969 100644 --- a/pkg/interface/src/views/components/RichText.tsx +++ b/pkg/interface/src/views/components/RichText.tsx @@ -2,26 +2,12 @@ import { Anchor, Text } from '@tlon/indigo-react'; import { Contact, Group } from '@urbit/api'; import React from 'react'; import ReactMarkdown, { ReactMarkdownProps } from 'react-markdown'; -import RemarkDisableTokenizers from 'remark-disable-tokenizers'; import { isValidPatp } from 'urbit-ob'; import { deSig } from '~/logic/lib/util'; import { PermalinkEmbed } from '~/views/apps/permalinks/embed'; import { Mention } from '~/views/components/MentionText'; import RemoteContent from '~/views/components/RemoteContent'; -const DISABLED_BLOCK_TOKENS = [ - 'indentedCode', - 'atxHeading', - 'thematicBreak', - 'list', - 'setextHeading', - 'html', - 'definition', - 'table' -]; - -const DISABLED_INLINE_TOKENS = []; - type RichTextProps = ReactMarkdownProps & { disableRemoteContent?: boolean; contact?: Contact; @@ -110,10 +96,6 @@ const RichText = React.memo(({ disableRemoteContent = false, ...props }: RichTex return {paraProps.children}; } }} - plugins={[[ - RemarkDisableTokenizers, - { block: DISABLED_BLOCK_TOKENS, inline: DISABLED_INLINE_TOKENS } - ]]} /> )); diff --git a/pkg/interface/src/views/landscape/components/ChannelPopoverRoutes/ChannelPermissions.tsx b/pkg/interface/src/views/landscape/components/ChannelPopoverRoutes/ChannelPermissions.tsx index 0e749625a..e9cfbccfa 100644 --- a/pkg/interface/src/views/landscape/components/ChannelPopoverRoutes/ChannelPermissions.tsx +++ b/pkg/interface/src/views/landscape/components/ChannelPopoverRoutes/ChannelPermissions.tsx @@ -74,7 +74,7 @@ export function GraphPermissions(props: GraphPermissionsProps) { const writers = _.get( group?.tags, ['graph', association.resource, 'writers'], - new Set() + [] ); let [, , hostShip] = association.resource.split('/'); @@ -91,7 +91,7 @@ export function GraphPermissions(props: GraphPermissionsProps) { const initialValues = { writePerms, - writers: Array.from(writers) + writers: [...writers] .filter(x => x !== hostShip), readerComments: association.metadata.vip === 'reader-comments' }; @@ -104,7 +104,7 @@ export function GraphPermissions(props: GraphPermissionsProps) { resource: association.resource, tag: 'writers' }; - const allWriters = Array.from(writers).map(w => `~${w}`); + const allWriters = [...writers].map(w => `~${w}`); if (values.readerComments !== readerComments) { await airlock.poke(metadataEdit(association, { vip: values.readerComments ? 'reader-comments' : '' @@ -170,7 +170,7 @@ export function GraphPermissions(props: GraphPermissionsProps) { diff --git a/pkg/interface/src/views/landscape/components/Graph/GraphContent.tsx b/pkg/interface/src/views/landscape/components/Graph/GraphContent.tsx index da2fa25ee..2c913b42d 100644 --- a/pkg/interface/src/views/landscape/components/Graph/GraphContent.tsx +++ b/pkg/interface/src/views/landscape/components/Graph/GraphContent.tsx @@ -34,26 +34,30 @@ interface GraphMentionNode { ship: string; } -const addEmphasisToMention = (contents: Content[], content: Content, index: number) => { +const addEmphasisToMention = ( + contents: Content[], + content: Content, + index: number +) => { const prevContent = contents[index - 1]; const nextContent = contents[index + 1]; if ( 'text' in content && - (content.text.trim() === '**' || content.text.trim() === '*' ) - ) { + (content.text.trim() === '**' || content.text.trim() === '*') + ) { return { text: '' }; } - if( + if ( 'text' in content && content.text.endsWith('*') && !content.text.startsWith('*') && nextContent !== undefined && 'mention' in nextContent ) { - if (content.text.charAt((content.text.length - 2)) === '*') { + if (content.text.charAt(content.text.length - 2) === '*') { return { text: content.text.slice(0, content.text.length - 2) }; } return { text: content.text.slice(0, content.text.length - 1) }; @@ -116,78 +120,99 @@ const codeToMdAst = (content: CodeContent) => { }; }; -const contentToMdAst = (tall: boolean) => ( - content: Content -): [StitchMode, any] => { - if ('text' in content) { - if (content.text.toString().trim().length === 0) { +const contentToMdAst = + (tall: boolean) => + (content: Content): [StitchMode, any] => { + if ('text' in content) { + if (content.text.toString().trim().length === 0) { + return [ + 'merge', + { type: 'root', children: [{ type: 'paragraph', children: [] }] } + ]; + } return [ 'merge', - { type: 'root', children: [{ type: 'paragraph', children: [] }] } + tall ? parseTall(content.text) : parseWide(content.text) + ] as [StitchMode, any]; + } else if ('code' in content) { + return ['block', codeToMdAst(content)]; + } else if ('reference' in content) { + return [ + 'block', + { + type: 'root', + children: [ + { + type: 'graph-reference', + reference: content.reference + } + ] + } + ]; + } else if ('url' in content) { + const images = ['.jpg', '.jpeg', '.png', '.gif', '.webp']; + return [ + 'inline', + { + type: 'root', + children: [ + { + type: 'link', + url: content.url, + children: [ + { + type: 'text', + value: !images.some(i => content.url.includes(i)) + ? content.url + : '' + } + ] + } + ] + } + ]; + } else if ('mention' in content) { + return [ + 'inline', + { + type: 'root', + children: [ + { + type: 'graph-mention', + ship: content.mention, + emphasis: content.emphasis + } + ] + } ]; } - return [ - 'merge', - tall ? parseTall(content.text) : parseWide(content.text) - ] as [StitchMode, any]; - } else if ('code' in content) { - return ['block', codeToMdAst(content)]; - } else if ('reference' in content) { - return [ - 'block', - { - type: 'root', - children: [ - { - type: 'graph-reference', - reference: content.reference - } - ] - } - ]; - } else if ('url' in content) { - return [ - 'block', - { - type: 'root', - children: [ - { - type: 'graph-url', - url: content.url - } - ] - } - ]; - } else if ('mention' in content) { return [ 'inline', { type: 'root', - children: [ - { - type: 'graph-mention', - ship: content.mention, - emphasis: content.emphasis - } - ] + children: [] } ]; - } - return [ - 'inline', - { - type: 'root', - children: [] - } - ]; -}; + }; function stitchInline(a: any, b: any) { if (!a?.children) { throw new Error('Bad stitchInline call: missing root'); } + const lastParaIdx = a.children.length - 1; const last = a.children[lastParaIdx]; + + // wrap bare link in list-item inside a p node + // for better typography consistency + if (last?.type === 'listItem') { + if (last?.children.length === 0) { + last.children.push({ + type: 'paragraph', + children: [] + }); + } + } if (last?.children) { const ros = { ...a, @@ -217,9 +242,14 @@ function getChildren(node: T): AstContent[] { } export function asParent(node: T): Parent | undefined { - return ['paragraph', 'heading', 'list', 'listItem', 'table'].includes( - node.type - ) + return [ + 'paragraph', + 'heading', + 'list', + 'listItem', + 'table', + 'blockquote' + ].includes(node.type) ? (node as Parent) : undefined; } @@ -241,6 +271,7 @@ function stitchMerge(a: Root, b: Root) { children: [...aChildren.slice(0, -1), mergedPara, ...bChildren.slice(1)] }; } + return { ...a, children: [...aChildren, ...bChildren] }; } @@ -256,10 +287,10 @@ function stitchInlineAfterBlock(a: Root, b: GraphMentionNode[]) { } function stitchAsts(asts: [StitchMode, GraphAstNode][]) { - return _.reduce( + const t = _.reduce( asts, ([prevMode, ast], [mode, val]): [StitchMode, GraphAstNode] => { - if (prevMode === 'block') { + if (prevMode === 'block' || prevMode === 'inline') { if (mode === 'inline') { return [mode, stitchInlineAfterBlock(ast, val?.children ?? [])]; } @@ -283,6 +314,46 @@ function stitchAsts(asts: [StitchMode, GraphAstNode][]) { }, ['block', { type: 'root', children: [] }] as [StitchMode, GraphAstNode] ); + + t[1].children.map((c, idx) => { + const links = []; + function addRichEmbedURL(nodes) { + if (nodes?.children) { + nodes.children.filter(k => { + if (k.type === 'link') { + links.push({ + type: 'root', + children: [ + { + type: 'graph-url', + url: k.url + } + ] + }); + } else if (k?.children) { + k.children.filter(o => { + if (o.type === 'link') { + links.push({ + type: 'root', + children: [ + { + type: 'graph-url', + url: o.url + } + ] + }); + } + }); + } + }); + + nodes.children.push(...links); + } + } + addRichEmbedURL(c); + }); + + return t; } const header = ({ children, depth, ...rest }) => { const level = depth; @@ -392,7 +463,7 @@ const renderers = { ); return tall ? {inner} : inner; }, - link: (props) => { + link: props => { return ( { - return ordered ?
      {children}
    :
      {children}
    ; + return ordered ? ( +
      {children}
    + ) : ( +
      {children}
    + ); }, - 'graph-mention': (obj) => { + 'graph-mention': obj => { return ; }, image: ({ url, tall }) => ( @@ -419,19 +494,13 @@ const renderers = {
    ), 'graph-url': ({ url, tall }) => ( - - - + ), 'graph-reference': ({ reference, transcluded }) => { const { link } = referenceToPermalink({ reference }); return ( - + ); }, @@ -499,19 +568,13 @@ export type GraphContentProps = PropFunc & { showOurContact: boolean; }; -export const GraphContent = React.memo(( - props: GraphContentProps -) => { - const { - contents, - tall = false, - transcluded = 0, - ...rest - } = props; +export const GraphContent = React.memo((props: GraphContentProps) => { + const { contents, tall = false, transcluded = 0, ...rest } = props; const [, ast] = stitchAsts( contents - .map((content, index) => addEmphasisToMention(contents, content, index)) - .map(contentToMdAst(tall))); + .map((content, index) => addEmphasisToMention(contents, content, index)) + .map(contentToMdAst(tall)) + ); return ( diff --git a/pkg/interface/src/views/landscape/components/Graph/blockquote.js b/pkg/interface/src/views/landscape/components/Graph/blockquote.js index bdc819091..04298c232 100644 --- a/pkg/interface/src/views/landscape/components/Graph/blockquote.js +++ b/pkg/interface/src/views/landscape/components/Graph/blockquote.js @@ -1,128 +1,126 @@ /* eslint-disable */ /** pulled from remark-parse - * + * * critical change is that blockquotes require a newline to be continued, see * the `if(!prefixed) conditional */ -'use strict' +"use strict"; -var trim = require('trim') -var interrupt = require('remark-parse/lib/util/interrupt') +var trim = require("trim"); -module.exports = blockquote +module.exports = blockquote; -var lineFeed = '\n' -var tab = '\t' -var space = ' ' -var greaterThan = '>' +var lineFeed = "\n"; +var tab = "\t"; +var space = " "; +var greaterThan = ">"; function blockquote(eat, value, silent) { - var self = this - var offsets = self.offset - var tokenizers = self.blockTokenizers - var interruptors = self.interruptBlockquote - var now = eat.now() - var currentLine = now.line - var length = value.length - var values = [] - var contents = [] - var indents = [] - var add - var index = 0 - var character - var rest - var nextIndex - var content - var line - var startIndex - var prefixed - var exit + var self = this; + var offsets = self.offset; + var tokenizers = self.blockTokenizers; + var interruptors = self.interruptBlockquote; + var now = eat.now(); + var currentLine = now.line; + var length = value.length; + var values = []; + var contents = []; + var indents = []; + var add; + var index = 0; + var character; + var rest; + var nextIndex; + var content; + var line; + var startIndex; + var prefixed; + var exit; while (index < length) { - character = value.charAt(index) + character = value.charAt(index); if (character !== space && character !== tab) { - break + break; } - index++ + index++; } if (value.charAt(index) !== greaterThan) { - return + return; } if (silent) { - return true + return true; } - index = 0 + index = 0; while (index < length) { - nextIndex = value.indexOf(lineFeed, index) - startIndex = index - prefixed = false + nextIndex = value.indexOf(lineFeed, index); + startIndex = index; + prefixed = false; if (nextIndex === -1) { - nextIndex = length + nextIndex = length; } while (index < length) { - character = value.charAt(index) + character = value.charAt(index); if (character !== space && character !== tab) { - break + break; } - index++ + index++; } if (value.charAt(index) === greaterThan) { - index++ - prefixed = true + index++; + prefixed = true; if (value.charAt(index) === space) { - index++ + index++; } } else { - index = startIndex + index = startIndex; } - content = value.slice(index, nextIndex) + content = value.slice(index, nextIndex); if (!prefixed && !trim(content)) { - index = startIndex - break + index = startIndex; + break; } if (!prefixed) { break; } - line = startIndex === index ? content : value.slice(startIndex, nextIndex) + line = startIndex === index ? content : value.slice(startIndex, nextIndex); - indents.push(index - startIndex) - values.push(line) - contents.push(content) + indents.push(index - startIndex); + values.push(line); + contents.push(content); - index = nextIndex + 1 + index = nextIndex + 1; } - const trailingNewline = value.charAt(nextIndex) === '\n'; + const trailingNewline = value.charAt(nextIndex) === "\n"; - index = -1 - length = indents.length - add = eat(values.join(lineFeed)) + index = -1; + length = indents.length; + add = eat(values.join(lineFeed)); while (++index < length) { - offsets[currentLine] = (offsets[currentLine] || 0) + indents[index] - currentLine++ + offsets[currentLine] = (offsets[currentLine] || 0) + indents[index]; + currentLine++; } - exit = self.enterBlock() - contents = self.tokenizeBlock(contents.join(lineFeed), now) - console.log(values); - exit() + exit = self.enterBlock(); + contents = self.tokenizeBlock(contents.join(lineFeed), now); + exit(); - const added = add({type: 'blockquote', children: contents}) - return trailingNewline ? add({ type: 'paragraph', children: [] }) : added; + const added = add({ type: "blockquote", children: contents }); + return trailingNewline ? add({ type: "paragraph", children: [] }) : added; } diff --git a/pkg/interface/src/views/landscape/components/GroupsPane.tsx b/pkg/interface/src/views/landscape/components/GroupsPane.tsx index 55c0f484d..463eda5aa 100644 --- a/pkg/interface/src/views/landscape/components/GroupsPane.tsx +++ b/pkg/interface/src/views/landscape/components/GroupsPane.tsx @@ -8,7 +8,7 @@ import { } from 'react-router-dom'; import { useShortcut } from '~/logic/state/settings'; import { useLocalStorageState } from '~/logic/lib/useLocalStorageState'; -import { getGroupFromWorkspace } from '~/logic/lib/workspace'; +import { getGroupFromWorkspace, getTitleFromWorkspace } from '~/logic/lib/workspace'; import useGroupState from '~/logic/state/group'; import useHarkState from '~/logic/state/hark'; import useMetadataState from '~/logic/state/metadata'; @@ -22,7 +22,7 @@ import { Skeleton } from './Skeleton'; import { EmptyGroupHome } from './Home/EmptyGroupHome'; import { Join } from './Join/Join'; import { Resource } from './Resource'; -import { DmResource } from '~/views/apps/chat/DmResource'; +import { DmResource, DmHelmet } from '~/views/apps/chat/DmResource'; import { UnjoinedResource } from '~/views/components/UnjoinedResource'; import { NewChannel } from './NewChannel'; import { GroupHome } from './Home/GroupHome'; @@ -126,16 +126,18 @@ export function GroupsPane(props: GroupsPaneProps) { const { ship } = match.params as Record; return ( - - - + <> + + + + ); }} /> @@ -180,7 +182,7 @@ export function GroupsPane(props: GroupsPaneProps) { const appPath = `/ship/${host}/${name}`; const association = associations.graph[appPath]; const resourceUrl = `${baseUrl}/join/${app}${appPath}`; - let title = groupAssociation?.metadata?.title ?? 'Groups'; + let title = getTitleFromWorkspace(associations, workspace); if (!association) { return ; @@ -252,7 +254,7 @@ export function GroupsPane(props: GroupsPaneProps) { render={(routeProps) => { const shouldHideSidebar = routeProps.location.pathname.includes('/feed'); - const title = groupAssociation?.metadata?.title ?? 'Groups'; + const title = getTitleFromWorkspace(associations, workspace); return ( <> diff --git a/pkg/interface/src/views/landscape/components/Participants.tsx b/pkg/interface/src/views/landscape/components/Participants.tsx index 5d55622cb..7cfce9bab 100644 --- a/pkg/interface/src/views/landscape/components/Participants.tsx +++ b/pkg/interface/src/views/landscape/components/Participants.tsx @@ -352,7 +352,7 @@ function Participant(props: { - + Send Message diff --git a/pkg/interface/webterm/api.ts b/pkg/interface/webterm/api.ts deleted file mode 100644 index 6679b8403..000000000 --- a/pkg/interface/webterm/api.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Urbit from '@urbit/http-api'; -const api = new Urbit('', '', (window as any).desk); -api.ship = window.ship; -// api.verbose = true; -// @ts-ignore TODO window typings -window.api = api; - -export default api; diff --git a/pkg/interface/webterm/app.tsx b/pkg/interface/webterm/app.tsx deleted file mode 100644 index c8de116fb..000000000 --- a/pkg/interface/webterm/app.tsx +++ /dev/null @@ -1,475 +0,0 @@ -/* eslint-disable max-lines */ -import React, { - useEffect, - useRef, - useCallback -} from 'react'; - -import useTermState from './state'; -import { useDark } from './join'; -import api from './api'; - -import { Terminal, ITerminalOptions, ITheme } from 'xterm'; -import { FitAddon } from 'xterm-addon-fit'; -import { saveAs } from 'file-saver'; - -import { Box, Col, Reset, _dark, _light } from '@tlon/indigo-react'; - -import 'xterm/css/xterm.css'; - -import { - Belt, Blit, Stye, Stub, Tint, Deco, - pokeTask, pokeBelt -} from '@urbit/api/term'; - -import bel from './lib/bel'; -import { ThemeProvider } from 'styled-components'; - -type TermAppProps = { - ship: string; -} - -const makeTheme = (dark: boolean): ITheme => { - let fg, bg: string; - if (dark) { - fg = 'white'; - bg = 'rgb(26,26,26)'; - } else { - fg = 'black'; - bg = 'white'; - } - // TODO indigo colors. - // we can't pluck these from ThemeContext because they have transparency. - // technically xterm supports transparency, but it degrades performance. - return { - foreground: fg, - background: bg, - brightBlack: '#7f7f7f', // NOTE slogs - cursor: fg, - cursorAccent: bg, - selection: fg - }; -}; - -const termConfig: ITerminalOptions = { - logLevel: 'warn', - // - convertEol: true, - // - rows: 24, - cols: 80, - scrollback: 10000, - // - fontFamily: '"Source Code Pro", "Roboto mono", "Courier New", monospace', - fontWeight: 400, - // NOTE theme colors configured dynamically - // - bellStyle: 'sound', - bellSound: bel, - // - // allows text selection by holding modifier (option, or shift) - macOptionClickForcesSelection: true, - // prevent insertion of simulated arrow keys on-altclick - altClickMovesCursor: false -}; - -const csi = (cmd: string, ...args: number[]) => { - return '\x1b[' + args.join(';') + cmd; -}; - -const tint = (t: Tint) => { - switch (t) { - case null: return '9'; - case 'k': return '0'; - case 'r': return '1'; - case 'g': return '2'; - case 'y': return '3'; - case 'b': return '4'; - case 'm': return '5'; - case 'c': return '6'; - case 'w': return '7'; - default: return `8;2;${t.r%256};${t.g%256};${t.b%256}`; - } -}; - -const stye = (s: Stye) => { - let out = ''; - - // text decorations - // - if (s.deco.length > 0) { - out += s.deco.reduce((decs: number[], deco: Deco) => { - /* eslint-disable max-statements-per-line */ - switch (deco) { - case null: decs.push(0); return decs; - case 'br': decs.push(1); return decs; - case 'un': decs.push(4); return decs; - case 'bl': decs.push(5); return decs; - default: console.log('weird deco', deco); return decs; - } - }, []).join(';'); - } - - // background color - // - if (s.back !== null) { - if (out !== '') { - out += ';'; - } - out += '4'; - out += tint(s.back); - } - - // foreground color - // - if (s.fore !== null) { - if (out !== '') { - out += ';'; - } - out += '3'; - out += tint(s.fore); - } - - if (out === '') { - return out; - } - return '\x1b[' + out + 'm'; -}; - -const showBlit = (term: Terminal, blit: Blit) => { - let out = ''; - - if ('bel' in blit) { - out += '\x07'; - } else if ('clr' in blit) { - term.clear(); - out += csi('u'); - } else if ('hop' in blit) { - if (typeof blit.hop === 'number') { - out += csi('H', term.rows, blit.hop + 1); - } else { - out += csi('H', term.rows - blit.hop.r, blit.hop.c + 1); - } - out += csi('s'); // save cursor position - } else if ('put' in blit) { - out += blit.put.join(''); - out += csi('u'); - } else if ('klr' in blit) { - //TODO remove for new backend - { - out += csi('H', term.rows, 1); - out += csi('K'); - } - out += blit.klr.reduce((lin: string, p: Stub) => { - lin += stye(p.stye); - lin += p.text.join(''); - lin += csi('m', 0); - return lin; - }, ''); - out += csi('u'); - } else if ('nel' in blit) { - out += '\n'; - } else if ('sag' in blit || 'sav' in blit) { - const sav = ('sag' in blit) ? blit.sag : blit.sav; - const name = sav.path.split('/').slice(-2).join('.'); - const buff = Buffer.from(sav.file, 'base64'); - const blob = new Blob([buff], { type: 'application/octet-stream' }); - saveAs(blob, name); - } else if ('url' in blit) { - window.open(blit.url); - } else if ('wyp' in blit) { - out += '\r' + csi('K'); - out += csi('u'); - // - //TODO remove for new backend - } else if ('lin' in blit) { - out += csi('H', term.rows, 1); - out += csi('K'); - out += blit.lin.join(''); - } else if ('mor' in blit) { - out += '\n'; - } else { - console.log('weird blit', blit); - } - - term.write(out); -}; - -// NOTE should generally only be passed the default terminal session -const showSlog = (term: Terminal, slog: string) => { - // set scroll region to exclude the bottom line, - // scroll up one line, - // move cursor to start of the newly created whitespace, - // set text to grey, - // print the slog, - // restore color, scroll region, and cursor. - // - term.write(csi('r', 1, term.rows - 1) - + csi('S', 1) - + csi('H', term.rows - 1, 1) - + csi('m', 90) - + slog - + csi('m', 0) - + csi('r') - + csi('u')); -}; - -const readInput = (term: Terminal, e: string): Belt[] => { - const belts: Belt[] = []; - let strap = ''; - - while (e.length > 0) { - let c = e.charCodeAt(0); - - // text input - // - if (c >= 32 && c !== 127) { - strap += e[0]; - e = e.slice(1); - continue; - } else if ('' !== strap) { - belts.push({ txt: strap.split('') }); - strap = ''; - } - - // special keys/characters - // - if (0 === c) { - term.write('\x07'); // bel - } else if (8 === c || 127 === c) { - belts.push({ bac: null }); - } else if (13 === c) { - belts.push({ ret: null }); - } else if (c <= 26) { - let k = String.fromCharCode(96 + c); - //NOTE prevent remote shut-downs - if ('d' !== k) { - belts.push({ ctl: k }); - //TODO for new backend - // belts.push({ mod: { mod: 'ctl', key: k } }); - } - } - - // escape sequences - // - if (27 === c) { // ESC - e = e.slice(1); - c = e.charCodeAt(0); - if (91 === c || 79 === c) { // [ or O - e = e.slice(1); - c = e.charCodeAt(0); - /* eslint-disable max-statements-per-line */ - switch (c) { - case 65: belts.push({ aro: 'u' }); break; - case 66: belts.push({ aro: 'd' }); break; - case 67: belts.push({ aro: 'r' }); break; - case 68: belts.push({ aro: 'l' }); break; - // - case 77: { - const m = e.charCodeAt(1) - 31; - if (1 === m) { - const c = e.charCodeAt(2) - 32; - const r = e.charCodeAt(3) - 32; - //TODO re-enable for new backend - // belts.push({ hit: { r: term.rows - r, c: c - 1 } }); - } - e = e.slice(3); - break; - } - // - default: term.write('\x07'); break; // bel - } - } else if (c >= 97 && c <= 122) { // a <= c <= z - belts.push({ mod: { mod: 'met', key: e[0] } }); - } else if (c === 46) { // . - belts.push({ mod: { mod: 'met', key: '.' } }); - } else if (c === 8 || c === 127) { - belts.push({ mod: { mod: 'met', key: { bac: null } } }); - } else { - term.write('\x07'); break; // bel - } - } - - e = e.slice(1); - } - if ('' !== strap) { - belts.push({ txt: strap.split('') }); - strap = ''; - } - return belts; -}; - -export default function TermApp(props: TermAppProps) { - const container = useRef(null); - // TODO allow switching of selected - const { sessions, selected, slogstream, set } = useTermState(); - const session = sessions[selected]; - const dark = useDark(); - - const setupSlog = useCallback(() => { - console.log('slog: setting up...'); - let available = false; - const slog = new EventSource('/~_~/slog', { withCredentials: true }); - - slog.onopen = (e) => { - console.log('slog: opened stream'); - available = true; - }; - - slog.onmessage = (e) => { - const session = useTermState.getState().sessions['']; - if (!session) { - console.log('default session mia!', 'slog:', slog); - return; - } - showSlog(session.term, e.data); - }; - - slog.onerror = (e) => { - console.error('slog: eventsource error:', e); - if (available) { - window.setTimeout(() => { - if (slog.readyState !== EventSource.CLOSED) { - return; - } - console.log('slog: reconnecting...'); - setupSlog(); - }, 10000); - } - }; - - set((state) => { - state.slogstream = slog; - }); - }, [sessions]); - - const onInput = useCallback((ses: string, e: string) => { - const term = useTermState.getState().sessions[ses].term; - const belts = readInput(term, e); - belts.map((b) => { // NOTE passing api.poke(pokeBelt makes `this` undefined! - //TODO pokeBelt(ses, b); - api.poke({ - app: 'herm', - mark: 'belt', - json: b - }); - }); - }, [sessions]); - - const onResize = useCallback(() => { - // TODO debounce, if it ever becomes a problem - session?.fit.fit(); - }, [session]); - - // on-init, open slogstream - // - useEffect(() => { - if (!slogstream) { - setupSlog(); - } - window.addEventListener('resize', onResize); - return () => { - // TODO clean up subs? - window.removeEventListener('resize', onResize); - }; - }, [onResize, setupSlog]); - - // on dark mode change, change terminals' theme - // - useEffect(() => { - const theme = makeTheme(dark); - for (const ses in sessions) { - sessions[ses].term.setOption('theme', theme); - } - if (container.current) { - container.current.style.backgroundColor = theme.background || ''; - } - }, [dark, sessions]); - - // on selected change, maybe setup the term, or put it into the container - // - useEffect(() => { - let ses = session; - // initialize terminal - // - if (!ses) { - // set up terminal - // - const term = new Terminal(termConfig); - term.setOption('theme', makeTheme(dark)); - const fit = new FitAddon(); - term.loadAddon(fit); - - // start mouse reporting - // - term.write(csi('?9h')); - - // set up event handlers - // - term.onData(e => onInput(selected, e)); - term.onBinary(e => onInput(selected, e)); - term.onResize((e) => { - //TODO re-enable once new backend lands - // api.poke(pokeTask(selected, { blew: { w: e.cols, h: e.rows } })); - }); - - ses = { term, fit }; - - // open subscription - // - api.subscribe({ app: 'herm', path: '/session/'+selected+'/view', - event: (e) => { - const ses = useTermState.getState().sessions[selected]; - if (!ses) { - console.log('on blit: no such session', selected, sessions, useTermState.getState().sessions); - return; - } - showBlit(ses.term, e); - }, - quit: () => { // quit - // TODO show user a message - } - }); - } - - if (container.current && !container.current.contains(ses.term.element || null)) { - ses.term.open(container.current); - ses.fit.fit(); - ses.term.focus(); - } - - set((state) => { - state.sessions[selected] = ses; - }); - - return () => { - // TODO unload term from container - // but term.dispose is too powerful? maybe just empty the container? - }; - }, [set, session, container]); - - return ( - <> - - - - - - - - - ); -} diff --git a/pkg/interface/webterm/config/urbitrc-sample b/pkg/interface/webterm/config/urbitrc-sample deleted file mode 100644 index 871b962ad..000000000 --- a/pkg/interface/webterm/config/urbitrc-sample +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - URBIT_PIERS: [ - "/Users/user/ships/zod/home", - ], - herb: false, - URL: 'http://localhost:80', - /* FLEET: { - 'zod': "http://localhost:8080', - 'bus': 'http://localhost:8081' - } */ -}; diff --git a/pkg/interface/webterm/config/webpack.dev.js b/pkg/interface/webterm/config/webpack.dev.js deleted file mode 100644 index 4f50325fe..000000000 --- a/pkg/interface/webterm/config/webpack.dev.js +++ /dev/null @@ -1,106 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -// const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const urbitrc = require('./urbitrc'); -const _ = require('lodash'); -const { execSync } = require('child_process'); - -const GIT_DESC = execSync('git describe --always', { encoding: 'utf8' }).trim(); - -let devServer = { - contentBase: path.join(__dirname, '../dist'), - hot: true, - port: 9000, - host: '0.0.0.0', - disableHostCheck: true, - historyApiFallback: true, - publicPath: '/apps/webterm/' -}; - -const router = _.mapKeys(urbitrc.FLEET || {}, (value, key) => `${key}.localhost:9000`); - -if(urbitrc.URL) { - devServer = { - ...devServer, - index: 'index.html', - proxy: [{ - changeOrigin: true, - target: urbitrc.URL, - router, - context: (path) => { - return !path.startsWith('/apps/webterm'); - } - }] - }; -} - -module.exports = { - mode: 'development', - entry: { - app: './index.js' - // serviceworker: './src/serviceworker.js' - }, - module: { - rules: [ - { - test: /\.(j|t)sx?$/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env', '@babel/typescript', ['@babel/preset-react', { - runtime: 'automatic', - development: true, - importSource: '@welldone-software/why-did-you-render' - }]], - plugins: [ - '@babel/transform-runtime', - '@babel/plugin-proposal-object-rest-spread', - '@babel/plugin-proposal-optional-chaining', - '@babel/plugin-proposal-class-properties', - 'react-hot-loader/babel' - ] - } - }, - exclude: /node_modules\/(?!(@tlon\/indigo-dark|@tlon\/indigo-light|@tlon\/indigo-react)\/).*/ - }, - { - test: /\.css$/i, - use: [ - // Creates `style` nodes from JS strings - 'style-loader', - // Translates CSS into CommonJS - 'css-loader', - // Compiles Sass to CSS - 'sass-loader' - ] - } - ] - }, - resolve: { - extensions: ['.js', '.ts', '.tsx'] - }, - devtool: 'inline-source-map', - devServer: devServer, - plugins: [ - // new CleanWebpackPlugin(), - new HtmlWebpackPlugin({ - title: 'Terminal', - template: './index.html' - }) - ], - watch: true, - output: { - filename: (pathData) => { - return pathData.chunk.name === 'app' ? 'index.js' : '[name].js'; - }, - chunkFilename: '[name].js', - path: path.resolve(__dirname, '../dist'), - publicPath: '/apps/webterm/', - globalObject: 'this' - }, - optimization: { - minimize: false, - usedExports: true - } -}; diff --git a/pkg/interface/webterm/config/webpack.prod.js b/pkg/interface/webterm/config/webpack.prod.js deleted file mode 100644 index 39ae84230..000000000 --- a/pkg/interface/webterm/config/webpack.prod.js +++ /dev/null @@ -1,77 +0,0 @@ -const path = require('path'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -const MomentLocalesPlugin = require('moment-locales-webpack-plugin'); -const webpack = require('webpack'); -const { execSync } = require('child_process'); - -const GIT_DESC = execSync('git describe --always', { encoding: 'utf8' }).trim(); - -module.exports = { - mode: 'production', - entry: { - app: './index.js', - // serviceworker: './src/serviceworker.js' - }, - module: { - rules: [ - { - test: /\.(j|t)sx?$/, - use: { - loader: 'babel-loader', - options: { - presets: ['@babel/preset-env', '@babel/typescript', '@babel/preset-react'], - plugins: [ - 'lodash', - '@babel/transform-runtime', - '@babel/plugin-proposal-object-rest-spread', - '@babel/plugin-proposal-optional-chaining', - '@babel/plugin-proposal-class-properties' - ] - } - }, - exclude: /node_modules\/(?!(@tlon\/indigo-dark|@tlon\/indigo-light|@tlon\/indigo-react)\/).*/ - }, - { - test: /\.css$/i, - use: [ - // Creates `style` nodes from JS strings - 'style-loader', - // Translates CSS into CommonJS - 'css-loader', - // Compiles Sass to CSS - 'sass-loader' - ] - } - ] - }, - resolve: { - extensions: ['.js', '.ts', '.tsx'] - }, - devtool: 'source-map', - // devServer: { - // contentBase: path.join(__dirname, './'), - // hot: true, - // port: 9000, - // historyApiFallback: true - // }, - plugins: [ - new MomentLocalesPlugin(), - new CleanWebpackPlugin(), - new HtmlWebpackPlugin({ - title: 'Terminal', - template: './index.html' - }) - ], - output: { - filename: (pathData) => { - return pathData.chunk.name === 'app' ? 'index.[contenthash].js' : '[name].js'; - }, - path: path.resolve(__dirname, '../dist'), - publicPath: '/apps/webterm/' - }, - optimization: { - minimize: true, - usedExports: true - } -}; diff --git a/pkg/interface/webterm/index.html b/pkg/interface/webterm/index.html deleted file mode 100644 index 5eaf05c35..000000000 --- a/pkg/interface/webterm/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - Terminal - - - - - - - - - - - - - -
    - - - diff --git a/pkg/interface/webterm/index.js b/pkg/interface/webterm/index.js deleted file mode 100644 index cc1ecc597..000000000 --- a/pkg/interface/webterm/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import * as React from 'react'; -import * as ReactDOM from 'react-dom'; -import TermApp from './App'; - -ReactDOM.render(, document.getElementById('root')); diff --git a/pkg/interface/webterm/join.ts b/pkg/interface/webterm/join.ts deleted file mode 100644 index 957abbd3d..000000000 --- a/pkg/interface/webterm/join.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { useEffect, useState } from 'react'; -import { useTheme } from './settings'; -import useTermState from './state'; - -export function useDark() { - const [osDark, setOsDark] = useState(false); - - useEffect(() => { - const themeWatcher = window.matchMedia('(prefers-color-scheme: dark)'); - const update = (e: MediaQueryListEvent) => { - setOsDark(e.matches); - }; - setOsDark(themeWatcher.matches); - themeWatcher.addListener(update); - - return () => { - themeWatcher.removeListener(update); - } - - }, []); - - const theme = useTermState(s => s.theme); - return theme === 'dark' || (osDark && theme === 'auto'); -} diff --git a/pkg/interface/webterm/lib/bel.ts b/pkg/interface/webterm/lib/bel.ts deleted file mode 100644 index 6de9d6ee3..000000000 --- a/pkg/interface/webterm/lib/bel.ts +++ /dev/null @@ -1 +0,0 @@ -export default 'data:@file/ogg;base64,T2dnUwACAAAAAAAAAAAu9RJ+AAAAAO+u/l4BHgF2b3JiaXMAAAAAAUAfAAAAAAAAYG0AAAAAAACZAU9nZ1MAAAAAAAAAAAAALvUSfgEAAACXEgK4Czv///////////+1A3ZvcmJpcysAAABYaXBoLk9yZyBsaWJWb3JiaXMgSSAyMDEyMDIwMyAoT21uaXByZXNlbnQpAAAAAAEFdm9yYmlzEkJDVgEAAAEADFIUISUZU0pjCJVSUikFHWNQW0cdY9Q5RiFkEFOISRmle08qlVhKyBFSWClFHVNMU0mVUpYpRR1jFFNIIVPWMWWhcxRLhkkJJWxNrnQWS+iZY5YxRh1jzlpKnWPWMUUdY1JSSaFzGDpmJWQUOkbF6GJ8MDqVokIovsfeUukthYpbir3XGlPrLYQYS2nBCGFz7bXV3EpqxRhjjDHGxeJTKILQkFUAAAEAAEAEAUJDVgEACgAAwlAMRVGA0JBVAEAGAIAAFEVxFMdxHEeSJMsCQkNWAQBAAAACAAAojuEokiNJkmRZlmVZlqZ5lqi5qi/7ri7rru3qug6EhqwEAMgAABiGIYfeScyQU5BJJilVzDkIofUOOeUUZNJSxphijFHOkFMMMQUxhtAphRDUTjmlDCIIQ0idZM4gSz3o4GLnOBAasiIAiAIAAIxBjCHGkHMMSgYhco5JyCBEzjkpnZRMSiittJZJCS2V1iLnnJROSialtBZSy6SU1kIrBQAABDgAAARYCIWGrAgAogAAEIOQUkgpxJRiTjGHlFKOKceQUsw5xZhyjDHoIFTMMcgchEgpxRhzTjnmIGQMKuYchAwyAQAAAQ4AAAEWQqEhKwKAOAEAgyRpmqVpomhpmih6pqiqoiiqquV5pumZpqp6oqmqpqq6rqmqrmx5nml6pqiqnimqqqmqrmuqquuKqmrLpqvatumqtuzKsm67sqzbnqrKtqm6sm6qrm27smzrrizbuuR5quqZput6pum6quvasuq6su2ZpuuKqivbpuvKsuvKtq3Ksq5rpum6oqvarqm6su3Krm27sqz7puvqturKuq7Ksu7btq77sq0Lu+i6tq7Krq6rsqzrsi3rtmzbQsnzVNUzTdf1TNN1Vde1bdV1bVszTdc1XVeWRdV1ZdWVdV11ZVv3TNN1TVeVZdNVZVmVZd12ZVeXRde1bVWWfV11ZV+Xbd33ZVnXfdN1dVuVZdtXZVn3ZV33hVm3fd1TVVs3XVfXTdfVfVvXfWG2bd8XXVfXVdnWhVWWdd/WfWWYdZ0wuq6uq7bs66os676u68Yw67owrLpt/K6tC8Or68ax676u3L6Patu+8Oq2Mby6bhy7sBu/7fvGsamqbZuuq+umK+u6bOu+b+u6cYyuq+uqLPu66sq+b+u68Ou+Lwyj6+q6Ksu6sNqyr8u6Lgy7rhvDatvC7tq6cMyyLgy37yvHrwtD1baF4dV1o6vbxm8Lw9I3dr4AAIABBwCAABPKQKEhKwKAOAEABiEIFWMQKsYghBBSCiGkVDEGIWMOSsYclBBKSSGU0irGIGSOScgckxBKaKmU0EoopaVQSkuhlNZSai2m1FoMobQUSmmtlNJaaim21FJsFWMQMuekZI5JKKW0VkppKXNMSsagpA5CKqWk0kpJrWXOScmgo9I5SKmk0lJJqbVQSmuhlNZKSrGl0kptrcUaSmktpNJaSam11FJtrbVaI8YgZIxByZyTUkpJqZTSWuaclA46KpmDkkopqZWSUqyYk9JBKCWDjEpJpbWSSiuhlNZKSrGFUlprrdWYUks1lJJaSanFUEprrbUaUys1hVBSC6W0FkpprbVWa2ottlBCa6GkFksqMbUWY22txRhKaa2kElspqcUWW42ttVhTSzWWkmJsrdXYSi051lprSi3W0lKMrbWYW0y5xVhrDSW0FkpprZTSWkqtxdZaraGU1koqsZWSWmyt1dhajDWU0mIpKbWQSmyttVhbbDWmlmJssdVYUosxxlhzS7XVlFqLrbVYSys1xhhrbjXlUgAAwIADAECACWWg0JCVAEAUAABgDGOMQWgUcsw5KY1SzjknJXMOQggpZc5BCCGlzjkIpbTUOQehlJRCKSmlFFsoJaXWWiwAAKDAAQAgwAZNicUBCg1ZCQBEAQAgxijFGITGIKUYg9AYoxRjECqlGHMOQqUUY85ByBhzzkEpGWPOQSclhBBCKaWEEEIopZQCAAAKHAAAAmzQlFgcoNCQFQFAFAAAYAxiDDGGIHRSOikRhExKJ6WREloLKWWWSoolxsxaia3E2EgJrYXWMmslxtJiRq3EWGIqAADswAEA7MBCKDRkJQCQBwBAGKMUY845ZxBizDkIITQIMeYchBAqxpxzDkIIFWPOOQchhM455yCEEELnnHMQQgihgxBCCKWU0kEIIYRSSukghBBCKaV0EEIIoZRSCgAAKnAAAAiwUWRzgpGgQkNWAgB5AACAMUo5JyWlRinGIKQUW6MUYxBSaq1iDEJKrcVYMQYhpdZi7CCk1FqMtXYQUmotxlpDSq3FWGvOIaXWYqw119RajLXm3HtqLcZac865AADcBQcAsAMbRTYnGAkqNGQlAJAHAEAgpBRjjDmHlGKMMeecQ0oxxphzzinGGHPOOecUY4w555xzjDHnnHPOOcaYc84555xzzjnnoIOQOeecc9BB6JxzzjkIIXTOOecchBAKAAAqcAAACLBRZHOCkaBCQ1YCAOEAAIAxlFJKKaWUUkqoo5RSSimllFICIaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKZVSSimllFJKKaWUUkoppQAg3woHAP8HG2dYSTorHA0uNGQlABAOAAAYwxiEjDknJaWGMQildE5KSSU1jEEopXMSUkopg9BaaqWk0lJKGYSUYgshlZRaCqW0VmspqbWUUigpxRpLSqml1jLnJKSSWkuttpg5B6Wk1lpqrcUQQkqxtdZSa7F1UlJJrbXWWm0tpJRaay3G1mJsJaWWWmupxdZaTKm1FltLLcbWYkutxdhiizHGGgsA4G5wAIBIsHGGlaSzwtHgQkNWAgAhAQAEMko555yDEEIIIVKKMeeggxBCCCFESjHmnIMQQgghhIwx5yCEEEIIoZSQMeYchBBCCCGEUjrnIIRQSgmllFJK5xyEEEIIpZRSSgkhhBBCKKWUUkopIYQQSimllFJKKSWEEEIopZRSSimlhBBCKKWUUkoppZQQQiillFJKKaWUEkIIoZRSSimllFJCCKWUUkoppZRSSighhFJKKaWUUkoJJZRSSimllFJKKSGUUkoppZRSSimlAACAAwcAgAAj6CSjyiJsNOHCAxAAAAACAAJMAIEBgoJRCAKEEQgAAAAAAAgA+AAASAqAiIho5gwOEBIUFhgaHB4gIiQAAAAAAAAAAAAAAAAET2dnUwAE1RQAAAAAAAAu9RJ+AgAAAI+1UkUWbC8oJiQmKTc/RUVKWVRZVFZSUlJUV7qmd+oLx6QAgM0PiQSIMgmD9wDA8XvSzu5GNsva2WY+G85HV47eGBjur0ytj7Wzzewi2GBPz+5b5X5VkUKKy+P8uLzGfVyHdViHddimbdqm+vy4btM2bZ807djY2NjYmGmapmlWldmyNVsAAKbnXqjLAQBgrioAKJAAb4YBnDhIAAC27/UAAAAA45QIAAC7yTUBAADiQvsHAQAAot2slRd+/38AgHMlAEjBmx0AbNebLgAAgELltBYAAKCevTMAAMApA6ZROkjlAADw70oAkIIW6jMGALj7mNICAAC4yb6wAAAA5AL8fgcApk062Be+/wAA/AYAAgwQThMFAACArWpvCQAAdgKupkwAjRoAps1ukZcDAMAtAEAABjMCALC6GAAAgGj+odwAAEAB+7LvDnsP2ACWzMqoP/z7/wWADgBjwHY/xAAAAMy+IgAANBy/qbrb7Pbss8JZflyWAZJLw6WXAQAwDBDkAkwOAwBQfkkAAADcl8vVBAAAmA8+jGyL2BYT0nbND21ideV3xyy/U4qXlgCSSeNKfvjxNQHAMMAMKiBsbroBAABqor8AAAA6aM89+Rq6bvnk8LNKyvW8jyhPT0aIqTiefOpxfN3z2tGPswCGCW+WuQAAVJUF+uoAADx8dxcAAMBXAMBZqNm60vW9d44pypUD2Tl6luUkHdG5J5lxL0aFvMpY9y7OZ7Kj0NP2j2okAQCKCd8aEhwAAAOrCubTAADuuhZTAACwBktTUYYsypUTa++md34yaa8b31WXw4LZ/dB8ts9kOjOBgcl+OxzDxOtjXdfTAQB2C59ZJvj+zwcgKg5g8281AADAO8mGdLGzJy8kGD3ERJHSb8+KRreqsOe5iOA9+xk5RWYymr8t9fFcQ7UYPsf2CXO954oPXuRGAHoJPwokOACABBB9GJcCcDgMkr9TdStxcpHkOhDXOM40AADwtFHUzvluekfz0aP9mJ3KRw3ySu6e3k716lNJD845W/XCUnx96lspKQF7uni6YS5qaskPgwAAbkmqK5Xg958CMAAAlRyw848OAABGZmJHO2stuZprN5F4lw9/TAzNcykrrzAGQKT90Hzs9r7xON7h+h6Zh6owHipmsZi9HkcWrez9yFa25VxKjKcAcgnfCiQ4AIAK4PvQVQCcdOjsxOnO6qfsJ3fjALg3jw8MAAA4+pwLvc++cP6Da+BtgBK2Vchno/edw7oW9qfD6fCyfroxFvJA1J66eKe6X3caZA80fZoqIQBiCluUZIK/vwYgxgAIxWABAACzX87PD/e+ypZoZFzUgnT++Vfp0fDw+dEiJHzSHi4Jx9zOop6xOOLsMJv7o2RE6rgPC7QJCbg+iH2+j5OvYnTfZwBiieULScgAAGICCMAMAJTm0o7SZPPNrK4DMVjQnAAAoNazHL/ohsVDDnj1B1OiRQleU7ja3e2WOJqRCOfRlPtCOd1Xx4golDIpbZ458jXWa69PzEdWAl6L5caU4PODAKhVnoBdv4oBAAAxjs0+Ot/dzjg+fzV8Ll86PhGvL0dScur4fEpmFL7LtyA4Nl/lyJPLSxTD6GB2yR6n0xYDZ/Ki8AelZfcaMgBeiuWCJAzH3QEgRh/Ax9sXACBA5nuEprLWUgjNyZV1K0F59+b2ekLV6ygkgbeuJuF2mIlXES5VwEoYIydHWAcdfNrynQPbVs45Vnz0W5H4NsEAXorpzpTguRsArDEAQsVfDQAAai1bx861KN9Kd+gh5gcxYnuummTspfSig6uKfBD7ktk84S407NtlEEiIwPnIFpc0c1mn6l8NIwrqmFZHTOQGAGKK9H2ZQX8AgOgHABonCQAIoSiMDtY3DcIRbnuH6zxUxkQwrhJ2Fpywr6ZfxvDqKyW58VRo40fXz5/cpf7H3YRUgr9LRT8pNxJaVHecnCt+ZV2tAWJK8dUqwVUdACVGkCL93e/IyMrIukLnyg3MMbZ+9/OKc/Z7JuYqlQlMVOODRxW/vKQqdZPbQui0ML9ZSJo33YhFgCY5BjIkne70UjNULgVNfirfm7+RSw=='; diff --git a/pkg/interface/webterm/package-lock.json b/pkg/interface/webterm/package-lock.json deleted file mode 100644 index 2e42a0ff0..000000000 --- a/pkg/interface/webterm/package-lock.json +++ /dev/null @@ -1,33326 +0,0 @@ -{ - "name": "webterm", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "webterm", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@reach/menu-button": "^0.10.5", - "@tlon/indigo-react": "^1.2.23", - "@urbit/api": "^1.1.1", - "@urbit/http-api": "^1.2.1", - "file-saver": "^2.0.5", - "react": "^16.14.0", - "react-dom": "^16.14.0", - "react-router-dom": "^5.2.0", - "styled-components": "^5.1.1", - "styled-system": "^5.1.5", - "xterm": "^4.15.0", - "xterm-addon-fit": "^0.5.0", - "zustand": "^3.5.0" - }, - "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@types/react": "^16.14.2", - "@types/react-dom": "^16.9.10", - "@types/react-router-dom": "^5.1.7", - "@types/styled-components": "^5.1.7", - "@types/styled-system": "^5.1.10", - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.24.0", - "@urbit/eslint-config": "^1.0.0", - "@welldone-software/why-did-you-render": "^6.1.0", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.6.3", - "babel-loader": "^8.2.2", - "babel-plugin-root-import": "^6.6.0", - "clean-webpack-plugin": "^3.0.0", - "cross-env": "^7.0.3", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "file-loader": "^6.2.0", - "html-webpack-plugin": "^4.5.1", - "husky": "^6.0.0", - "jest": "^26.6.3", - "lint-staged": "^11.0.0", - "react-hot-loader": "^4.13.0", - "typescript": "^4.2.4", - "webpack": "^4.46.0", - "webpack-cli": "^3.3.12", - "webpack-dev-server": "^3.11.2" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.15.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", - "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.4", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.5", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4", - "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==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/core/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", - "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", - "dependencies": { - "@babel/types": "^7.15.4", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/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/@babel/helper-annotate-as-pure": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", - "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", - "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", - "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", - "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "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.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "dev": true, - "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-explode-assignable-expression": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", - "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", - "dependencies": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", - "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", - "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", - "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-simple-access": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", - "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", - "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.15.4", - "@babel/helper-wrap-function": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", - "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", - "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", - "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", - "dependencies": { - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", - "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", - "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", - "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", - "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz", - "integrity": "sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.15.4", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", - "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.15.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", - "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", - "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.15.4", - "@babel/helper-create-class-features-plugin": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", - "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", - "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", - "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "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.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", - "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.15.4", - "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.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", - "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", - "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", - "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", - "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", - "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", - "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", - "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "dev": true, - "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.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz", - "integrity": "sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.4.tgz", - "integrity": "sha512-sM1/FEjwYjXvMwu1PJStH11kJ154zd/lpY56NQJ5qH2D0mabMv1CAy/kdvS9RP4Xgfj9fBBA3JiSLdDHgXdzOA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.6.tgz", - "integrity": "sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", - "@babel/plugin-proposal-async-generator-functions": "^7.15.4", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.15.4", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.15.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@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.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.15.3", - "@babel/plugin-transform-classes": "^7.15.4", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.15.4", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.4", - "@babel/plugin-transform-modules-systemjs": "^7.15.4", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.15.4", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.6", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.16.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "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/preset-react": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", - "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz", - "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "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/@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.9", - "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/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "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": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "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/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/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/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/@jest/core/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/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/@jest/core/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "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/core/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/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "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": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/reporters/node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@jest/reporters/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/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.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": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/@microsoft/fetch-event-source": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", - "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@reach/auto-id": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.10.5.tgz", - "integrity": "sha512-we4/bwjFxJ3F+2eaddQ1HltbKvJ7AB8clkN719El7Zugpn/vOjfPMOVUiBqTmPGLUvkYrq4tpuFwLvk2HyOVHg==", - "dependencies": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/descendants": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.10.5.tgz", - "integrity": "sha512-8HhN4DwS/HsPQ+Ym/Ft/XJ1spXBYdE8hqpnbYR9UcU7Nx3oDbTIdhjA6JXXt23t5avYIx2jRa8YHCtVKSHuiwA==", - "dependencies": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/menu-button": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/menu-button/-/menu-button-0.10.5.tgz", - "integrity": "sha512-PQzFzexk9K7Q5qTGmXcg3qYp+F36H0MaeyzybR5t4lB1e56nAh1u/C2bocwpHssIoy25xOR8Nu+LVMVf6k6cUw==", - "dependencies": { - "@reach/auto-id": "0.10.5", - "@reach/descendants": "0.10.5", - "@reach/popover": "0.10.5", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/observe-rect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", - "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" - }, - "node_modules/@reach/popover": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.10.5.tgz", - "integrity": "sha512-S+qWIsjrN1yMpHjgELhjpdGc4Q3q1plJtXBGGQRxUAjmCUA/5OY7t5w5C8iqMNAEBwCvYXKvK/pLcXFxxLykSw==", - "dependencies": { - "@reach/portal": "0.10.5", - "@reach/rect": "0.10.5", - "@reach/utils": "0.10.5", - "tabbable": "^4.0.0", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/portal": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.10.5.tgz", - "integrity": "sha512-K5K8gW99yqDPDCWQjEfSNZAbGOQWSx5AN2lpuR1gDVoz4xyWpTJ0k0LbetYJTDVvLP/InEcR7AU42JaDYDCXQw==", - "dependencies": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/rect": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.10.5.tgz", - "integrity": "sha512-JBKs2HniYecq5zLO6UFReX28SUBPM3n0aizdNgHuvwZmDcTfNV4jsuJYQLqJ+FbCQsrSHkBxKZqWpfGXY9bUEg==", - "dependencies": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.0" - } - }, - "node_modules/@reach/utils": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.10.5.tgz", - "integrity": "sha512-5E/xxQnUbmpI/LrufBAOXjunl96DnqX6B4zC2MO2KH/dRzLug5gM5VuOwV26egsp0jvsSPxojwciOhS43px3qw==", - "dependencies": { - "@types/warning": "^3.0.0", - "tslib": "^2.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "react": "^16.8.0", - "react-dom": "^16.8.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/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@styled-system/background": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz", - "integrity": "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/border": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz", - "integrity": "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/color": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz", - "integrity": "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz", - "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==", - "dependencies": { - "object-assign": "^4.1.1" - } - }, - "node_modules/@styled-system/css": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz", - "integrity": "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==" - }, - "node_modules/@styled-system/flexbox": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz", - "integrity": "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/grid": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz", - "integrity": "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/layout": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz", - "integrity": "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/position": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz", - "integrity": "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/shadow": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz", - "integrity": "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/space": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz", - "integrity": "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/typography": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz", - "integrity": "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==", - "dependencies": { - "@styled-system/core": "^5.1.2" - } - }, - "node_modules/@styled-system/variant": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz", - "integrity": "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==", - "dependencies": { - "@styled-system/core": "^5.1.2", - "@styled-system/css": "^5.1.5" - } - }, - "node_modules/@tlon/indigo-react": { - "version": "1.2.25", - "resolved": "https://registry.npmjs.org/@tlon/indigo-react/-/indigo-react-1.2.25.tgz", - "integrity": "sha512-4K0MeGqDK6OnqEDq2AHGHNhX4+owqCzhDFCzd81HPwyYy9x6wZB+z+iI36xl+P6Fwhl0I2fIKMG9ioiA1vbiLQ==", - "dependencies": { - "@reach/menu-button": "^0.10.5", - "react": "^16.13.1", - "tslib": "^2.0.1" - }, - "peerDependencies": { - "formik": "^2.1.5", - "styled-components": "^5.1.1", - "styled-system": "^5.1.5" - } - }, - "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.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": 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.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": 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==", - "dev": 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==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", - "dev": true, - "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/history": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.9.tgz", - "integrity": "sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "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/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==", - "dev": true - }, - "node_modules/@types/lodash": { - "version": "4.14.172", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", - "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==" - }, - "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==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", - "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", - "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==", - "dev": true - }, - "node_modules/@types/react": { - "version": "16.14.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.15.tgz", - "integrity": "sha512-jOxlBV9RGZhphdeqJTCv35VZOkjY+XIEY2owwSk84BNDdDv2xS6Csj6fhi+B/q30SR9Tz8lDNt/F2Z5RF3TrRg==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "16.9.14", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.14.tgz", - "integrity": "sha512-FIX2AVmPTGP30OUJ+0vadeIFJJ07Mh1m+U0rxfgyW34p3rTlXI+nlenvAxNn4BP36YyI9IJ/+UJ7Wu22N1pI7A==", - "dev": true, - "dependencies": { - "@types/react": "^16" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.16", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.16.tgz", - "integrity": "sha512-8d7nR/fNSqlTFGHti0R3F9WwIertOaaA1UEB8/jr5l5mDMOs4CidEgvvYMw4ivqrBK+vtVLxyTj2P+Pr/dtgzg==", - "dev": true, - "dependencies": { - "@types/history": "*", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.8.tgz", - "integrity": "sha512-03xHyncBzG0PmDmf8pf3rehtjY0NpUj7TIN46FrT5n1ZWHPZvXz32gUyNboJ+xsL8cpg8bQVLcllptcQHvocrw==", - "dev": true, - "dependencies": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "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==", - "dev": true - }, - "node_modules/@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "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.14", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.14.tgz", - "integrity": "sha512-d6P1/tyNytqKwam3cQXq7a9uPtovc/mdAs7dBiz1YbDdNIT3X4WmuFU78YdSYh84TXVuhOwezZ3EeKuNBhwsHQ==", - "dev": true, - "dependencies": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/styled-system": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/@types/styled-system/-/styled-system-5.1.13.tgz", - "integrity": "sha512-RtpV6zXnnMQNcxKjC06BUM4MUER5o9uZ6b7xAc2OzhWxSsmQ3jXyW8ohuXdEJRKypEe0EqAzbSGx2Im0NXfdKA==", - "dev": true, - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "node_modules/@types/uglify-js": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", - "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/@types/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=" - }, - "node_modules/@types/webpack": { - "version": "4.41.31", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", - "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.7.3" - } - }, - "node_modules/@types/webpack-sources/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/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "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": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.1.tgz", - "integrity": "sha512-UDqhWmd5i0TvPLmbK5xY3UZB0zEGseF+DHPghZ37Sb83Qd3p8ujhvAtkU4OF46Ka5Pm5kWvFIx0cCTBFKo0alA==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.31.1", - "@typescript-eslint/scope-manager": "4.31.1", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/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/@typescript-eslint/experimental-utils": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz", - "integrity": "sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.31.1", - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/typescript-estree": "4.31.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/experimental-utils/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==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.1.tgz", - "integrity": "sha512-dnVZDB6FhpIby6yVbHkwTKkn2ypjVIfAR9nh+kYsA/ZL0JlTsd22BiDjouotisY3Irmd3OW1qlk9EI5R8GrvRQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.31.1", - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/typescript-estree": "4.31.1", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz", - "integrity": "sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/visitor-keys": "4.31.1" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.1.tgz", - "integrity": "sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz", - "integrity": "sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/visitor-keys": "4.31.1", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "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/@typescript-eslint/typescript-estree/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/@typescript-eslint/visitor-keys": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz", - "integrity": "sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.31.1", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@urbit/api": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@urbit/api/-/api-1.4.0.tgz", - "integrity": "sha512-mjNwu+kbYhbDcDPAk3+kEMKHoHa5VtjCcIxBMQSpvy27N9jgS7D1Pn7MDEyDwdsVk9PWWG3ODg6q+yGwLMBuwg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@types/lodash": "^4.14.168", - "@urbit/eslint-config": "^1.0.3", - "big-integer": "^1.6.48", - "immer": "^9.0.1", - "lodash": "^4.17.20", - "urbit-ob": "^5.0.1" - } - }, - "node_modules/@urbit/eslint-config": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@urbit/eslint-config/-/eslint-config-1.0.3.tgz", - "integrity": "sha512-4mGd4GzzF+JMG/eAhjDQBjyVYo0xNbpcC7I16GouINLIuz5LJmNZ98SRQaOpfnsGIfTiZxwyZnfIX20orvWMxQ==" - }, - "node_modules/@urbit/http-api": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-1.3.1.tgz", - "integrity": "sha512-z9giStO48tdIwrZ570jzw9N4cQCVS6ziacNk6UPsXbAA+KPuw+r71ehxgECgVmJdfTqUSUh6u+LIcmz+1yQgJQ==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@microsoft/fetch-event-source": "^2.0.0", - "browser-or-node": "^1.3.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "stream-browserify": "^3.0.0", - "stream-http": "^3.1.1" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@welldone-software/why-did-you-render": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@welldone-software/why-did-you-render/-/why-did-you-render-6.2.1.tgz", - "integrity": "sha512-eIVKeK6ueS3tuzCqMVTaaNrPYvb9cA8NHiNgLA7Op8SD4TiT31zqNjxmhzLEK+y3sBxcwr6YhsiQGX9EThrvaw==", - "dev": true, - "dependencies": { - "lodash": "^4" - }, - "peerDependencies": { - "react": "^16 || ^17" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true - }, - "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/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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-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-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/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "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==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "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": "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/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "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/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "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==", - "dev": true, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "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==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "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-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "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-loader/node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "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/babel-loader/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/babel-loader/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/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==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "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": "^4.0.0", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "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.14.2" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", - "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-root-import": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-root-import/-/babel-plugin-root-import-6.6.0.tgz", - "integrity": "sha512-SPzVOHd7nDh5loZwZBxtX/oOu1MXeKjTkz+1VnnzLWC0dk8sJIGC2IDQ2uWIBjE5mUtXlQ35MTHSqN0Xn7qHrg==", - "dev": true, - "dependencies": { - "slash": "^3.0.0" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz", - "integrity": "sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.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": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "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==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.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/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "engines": { - "node": ">=0.6" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "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/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/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/body-parser/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/body-parser/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/bonjour/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true - }, - "node_modules/browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-rsa/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==", - "dev": true - }, - "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==", - "dev": true, - "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/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==", - "dev": true - }, - "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.17.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", - "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001254", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.830", - "escalade": "^3.1.1", - "node-releases": "^1.1.75" - }, - "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": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "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==", - "dev": true - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base/node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "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.30001257", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz", - "integrity": "sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "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/chalk/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/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/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "dependencies": { - "@types/webpack": "^4.4.31", - "del": "^4.1.1" - }, - "engines": { - "node": ">=8.9.0" - }, - "peerDependencies": { - "webpack": "*" - } - }, - "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/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/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/compression/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/compression/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==", - "dev": true - }, - "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=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/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==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "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=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/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==", - "dev": true - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/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==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.17.3.tgz", - "integrity": "sha512-+in61CKYs4hQERiADCJsdgewpdl/X0GhEX77pjKgbeibXviIt2oxEjTc8O2fqHX8mDdBrDvX8MYD/RYsBv4OiA==", - "dev": true, - "dependencies": { - "browserslist": "^4.17.0", - "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==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-env/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/cross-env/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/cross-env/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/cross-env/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/cross-env/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/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/cross-spawn/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/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==", - "dev": true, - "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/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-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "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-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "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.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", - "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==", - "dev": true - }, - "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "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.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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=", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true, - "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/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "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==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "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-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "dependencies": { - "utila": "~0.4" - } - }, - "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/dom-serializer/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "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/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/domutils/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/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==", - "dev": true - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.3.836", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz", - "integrity": "sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg==", - "dev": true - }, - "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==", - "dev": true, - "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/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "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==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/enhanced-resolve/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/enhanced-resolve/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==", - "dev": true - }, - "node_modules/enhanced-resolve/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.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/enquirer/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/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/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", - "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", - "dev": true, - "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-string": "^1.0.7", - "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-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "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/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz", - "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "estraverse": "^5.2.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "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/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.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-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.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-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/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==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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/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/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/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": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/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/eslint/node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/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/eslint/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/eslint/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/eslint/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/eslint/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/eslint/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/eslint/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/eslint/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "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-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/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/eslint/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/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/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/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/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "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=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dev": true, - "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/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/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/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/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expect/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/expect/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/expect/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/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/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/express/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/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/express/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==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "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-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==", - "dev": true - }, - "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/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "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/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "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/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/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==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/file-loader/node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/file-loader/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==", - "dev": true, - "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/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/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/finalhandler/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/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-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/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/findup-sync/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/flat-cache/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/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/flush-write-stream/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==", - "dev": true - }, - "node_modules/flush-write-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", - "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/formik": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", - "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", - "funding": [ - { - "type": "individual", - "url": "https://opencollective.com/formik" - } - ], - "peer": true, - "dependencies": { - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^1.10.0" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/formik/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/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==", - "dev": true - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/fs-write-stream-atomic/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==", - "dev": true - }, - "node_modules/fs-write-stream-atomic/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.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=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "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==", - "dev": true - }, - "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/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==", - "dev": true, - "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==", - "dev": true, - "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-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==", - "dev": true - }, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "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": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "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==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.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==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "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=", - "dev": true, - "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/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/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==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "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-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "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/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, - "dependencies": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "engines": { - "node": ">=6.9" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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/http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "dependencies": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy-middleware/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-proxy/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "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=", - "dev": true - }, - "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": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "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/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/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", - "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "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/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.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==", - "dev": true, - "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-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "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==", - "dev": true, - "optional": true, - "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==", - "dev": true, - "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-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "path-is-inside": "^1.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "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-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "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=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/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==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files/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/jest-changed-files/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-changed-files/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/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "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/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-config/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==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.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": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "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/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/jest-runtime/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/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/jest-runtime/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "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-runtime/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/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/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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-watcher/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/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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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-watcher/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/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==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/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/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/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/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/jest/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/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/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/jest/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/jest/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/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/jest/node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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/jest/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "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/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/jsdom/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==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsdom/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsdom/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/jsdom/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/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==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "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==", - "dev": true - }, - "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/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "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/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.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/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/lint-staged": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.2.tgz", - "integrity": "sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/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/lint-staged/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/lint-staged/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/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/lint-staged/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/lint-staged/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/lint-staged/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lint-staged/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/lint-staged/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/lint-staged/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/lint-staged/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/lint-staged/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/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/lint-staged/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/lint-staged/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==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/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/lint-staged/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/lint-staged/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/lint-staged/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/lint-staged/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lint-staged/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/lint-staged/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/listr2": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.12.1.tgz", - "integrity": "sha512-oB1DlXlCzGPbvWhqYBZUQEPJKqsmebQWofXG6Mpbe3uIvoNl8mctBEojyF13ZyqwQ91clCWXpwsWp+t98K4FOQ==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^1.4.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - } - }, - "node_modules/listr2/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/listr2/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/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/listr2/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/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/listr2/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/listr2/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/listr2/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/listr2/node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/listr2/node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/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/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "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==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "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==", - "dev": true, - "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-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "peer": true - }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "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=", - "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=" - }, - "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.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - }, - "funding": { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/loglevel" - } - }, - "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/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "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/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/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/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "dependencies": { - "tmpl": "1.0.x" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/memory-fs/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==", - "dev": true - }, - "node_modules/memory-fs/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "dev": true, - "dependencies": { - "mime-db": "1.49.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/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "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==", - "dev": true - }, - "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=", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "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==", - "dev": true - }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "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/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true, - "engines": { - "node": ">= 6.0.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-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/node-libs-browser/node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/node-libs-browser/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/node-libs-browser/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==", - "dev": true - }, - "node_modules/node-libs-browser/node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/node-libs-browser/node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/node-libs-browser/node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-notifier/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, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-notifier/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, - "optional": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/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/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "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-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "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/opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "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/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "dependencies": { - "url-parse": "^1.4.3" - } - }, - "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=", - "dev": true - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "dependencies": { - "retry": "^0.12.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/parallel-transform/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==", - "dev": true - }, - "node_modules/parallel-transform/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "dev": true, - "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/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "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==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "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/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "dependencies": { - "semver-compare": "^1.0.0" - } - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/portfinder/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/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "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/pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format/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/pretty-format/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/pretty-format/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/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/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "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/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "node_modules/prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "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==", - "dev": true, - "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/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "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==", - "dev": true, - "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/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, - "node_modules/react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==", - "peer": true - }, - "node_modules/react-hot-loader": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.0.tgz", - "integrity": "sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==", - "dev": true, - "dependencies": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^3.3.0", - "loader-utils": "^1.1.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "@types/react": "^15.0.0 || ^16.0.0 || ^17.0.0 ", - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 ", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 " - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-hot-loader/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/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-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, - "node_modules/react-router": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.1.tgz", - "integrity": "sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.0.tgz", - "integrity": "sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.1", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "optional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "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==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "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/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "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.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.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==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "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=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/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/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "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-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-dir/node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-dir/node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "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==", - "dev": true, - "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/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/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/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/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.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.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "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==", - "dev": true, - "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/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dev": true, - "dependencies": { - "node-forge": "^0.10.0" - } - }, - "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/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/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/send/node_modules/debug/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/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/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/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/serve-index/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/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "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==", - "dev": true, - "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": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "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.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "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": "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/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/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/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/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/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" - } - }, - "node_modules/sockjs-client/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/sockjs/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.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "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==", - "dev": true - }, - "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/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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==", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, - "node_modules/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "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/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "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-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "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-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-length/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.1.tgz", - "integrity": "sha512-JThv2JRzyH0NOIURrk9iskdxMSAAtCfj/b2Sf1WJaCUsloQkblepy1jaCLX/bYE+mhYo3unmwVSI9I5d9ncSiQ==", - "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/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-system": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", - "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", - "dependencies": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" - } - }, - "node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "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/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/tabbable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz", - "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "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/table/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/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/table/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/table/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/table/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/table/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/table/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==", - "dev": true - }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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/terminal-link/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/terminal-link/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/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.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": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/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==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "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-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "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-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.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/tr46/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "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/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/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "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.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", - "dev": true, - "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==", - "dev": true, - "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": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "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==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/urbit-ob": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-5.0.1.tgz", - "integrity": "sha512-qGNAwu87XNkW3g8ah4fUwmh2EKXtsdhEbyEiE5qX4Op17rhLH3HSkvu8g9z+MhqX51Uz9sf8ktvqJj/IRwETIQ==", - "dependencies": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "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/util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "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.", - "dev": true, - "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/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.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==", - "dev": true - }, - "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.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "optional": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/watchpack-chokidar2/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==", - "dev": true, - "optional": true - }, - "node_modules/watchpack-chokidar2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.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": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "peerDependencies": { - "webpack": "4.x.x" - } - }, - "node_modules/webpack-cli/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/webpack-cli/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-cli/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-cli/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/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/webpack-cli/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-cli/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-cli/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-cli/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/webpack-cli/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "dependencies": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dev": true, - "dependencies": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 6.11.5" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "dependencies": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/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/webpack-dev-server/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/webpack-dev-server/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-dev-server/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==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack-dev-server/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/webpack-dev-server/node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "dependencies": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "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==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/webpack/node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/webpack/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.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-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": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "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==", - "dev": true, - "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-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "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/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "dependencies": { - "errno": "~0.1.7" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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/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/wrap-ansi/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/wrap-ansi/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "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.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "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/xterm": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.15.0.tgz", - "integrity": "sha512-Ik1GoSq1yqKZQ2LF37RPS01kX9t4TP8gpamUYblD09yvWX5mEYuMK4CcqH6+plgiNEZduhTz/UrcaWs97gOlOw==" - }, - "node_modules/xterm-addon-fit": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz", - "integrity": "sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==", - "peerDependencies": { - "xterm": "^4.0.0" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "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/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/zustand": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.5.10.tgz", - "integrity": "sha512-upluvSRWrlCiExu2UbkuMIPJ9AigyjRFoO7O9eUossIj7rPPq7pcJ0NKk6t2P7KF80tg/UdPX6/pNKOSbs9DEg==", - "peerDependencies": { - "react": ">=16.8" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - } - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", - "dev": true - }, - "@babel/core": { - "version": "7.15.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.5.tgz", - "integrity": "sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.4", - "@babel/helpers": "^7.15.4", - "@babel/parser": "^7.15.5", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4", - "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==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", - "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", - "requires": { - "@babel/types": "^7.15.4", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", - "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", - "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", - "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", - "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "dev": true, - "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" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", - "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-function-name": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", - "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", - "requires": { - "@babel/helper-get-function-arity": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", - "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", - "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", - "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-module-imports": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", - "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", - "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.15.4", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-simple-access": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", - "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", - "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.15.4", - "@babel/helper-wrap-function": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", - "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", - "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", - "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", - "dev": true, - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", - "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", - "requires": { - "@babel/types": "^7.15.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", - "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.15.4", - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/helpers": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", - "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", - "dev": true, - "requires": { - "@babel/template": "^7.15.4", - "@babel/traverse": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz", - "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==" - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", - "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.4.tgz", - "integrity": "sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.15.4", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", - "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", - "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.15.4" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", - "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.15.4", - "@babel/helper-create-class-features-plugin": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", - "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", - "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-optimise-call-expression": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", - "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", - "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.15.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", - "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-module-transforms": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", - "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", - "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", - "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", - "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.14.5", - "@babel/types": "^7.14.9" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", - "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.14.5" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", - "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.0.tgz", - "integrity": "sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.4.tgz", - "integrity": "sha512-sM1/FEjwYjXvMwu1PJStH11kJ154zd/lpY56NQJ5qH2D0mabMv1CAy/kdvS9RP4Xgfj9fBBA3JiSLdDHgXdzOA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/preset-env": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.6.tgz", - "integrity": "sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.4", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", - "@babel/plugin-proposal-async-generator-functions": "^7.15.4", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.15.4", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.15.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@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.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.15.3", - "@babel/plugin-transform-classes": "^7.15.4", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.15.4", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.4", - "@babel/plugin-transform-modules-systemjs": "^7.15.4", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.15.4", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.6", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.16.0", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "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/preset-react": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", - "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/plugin-transform-react-jsx-development": "^7.14.5", - "@babel/plugin-transform-react-pure-annotations": "^7.14.5" - } - }, - "@babel/preset-typescript": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz", - "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.15.0" - } - }, - "@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" - } - }, - "@babel/template": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", - "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4" - } - }, - "@babel/traverse": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", - "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.4", - "@babel/helper-function-name": "^7.15.4", - "@babel/helper-hoist-variables": "^7.15.4", - "@babel/helper-split-export-declaration": "^7.15.4", - "@babel/parser": "^7.15.4", - "@babel/types": "^7.15.4", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.15.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", - "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.9", - "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 - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@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": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "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 - }, - "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 - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "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": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.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" - } - }, - "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 - } - } - }, - "@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - } - }, - "@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - } - }, - "@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "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": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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" - } - }, - "v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "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 - } - } - } - } - }, - "@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - } - }, - "@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.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": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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" - } - } - } - }, - "@microsoft/fetch-event-source": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz", - "integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" - }, - "@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==", - "dev": true, - "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==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@reach/auto-id": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.10.5.tgz", - "integrity": "sha512-we4/bwjFxJ3F+2eaddQ1HltbKvJ7AB8clkN719El7Zugpn/vOjfPMOVUiBqTmPGLUvkYrq4tpuFwLvk2HyOVHg==", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/descendants": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.10.5.tgz", - "integrity": "sha512-8HhN4DwS/HsPQ+Ym/Ft/XJ1spXBYdE8hqpnbYR9UcU7Nx3oDbTIdhjA6JXXt23t5avYIx2jRa8YHCtVKSHuiwA==", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/menu-button": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/menu-button/-/menu-button-0.10.5.tgz", - "integrity": "sha512-PQzFzexk9K7Q5qTGmXcg3qYp+F36H0MaeyzybR5t4lB1e56nAh1u/C2bocwpHssIoy25xOR8Nu+LVMVf6k6cUw==", - "requires": { - "@reach/auto-id": "0.10.5", - "@reach/descendants": "0.10.5", - "@reach/popover": "0.10.5", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - } - }, - "@reach/observe-rect": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", - "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" - }, - "@reach/popover": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.10.5.tgz", - "integrity": "sha512-S+qWIsjrN1yMpHjgELhjpdGc4Q3q1plJtXBGGQRxUAjmCUA/5OY7t5w5C8iqMNAEBwCvYXKvK/pLcXFxxLykSw==", - "requires": { - "@reach/portal": "0.10.5", - "@reach/rect": "0.10.5", - "@reach/utils": "0.10.5", - "tabbable": "^4.0.0", - "tslib": "^2.0.0" - } - }, - "@reach/portal": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.10.5.tgz", - "integrity": "sha512-K5K8gW99yqDPDCWQjEfSNZAbGOQWSx5AN2lpuR1gDVoz4xyWpTJ0k0LbetYJTDVvLP/InEcR7AU42JaDYDCXQw==", - "requires": { - "@reach/utils": "0.10.5", - "tslib": "^2.0.0" - } - }, - "@reach/rect": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.10.5.tgz", - "integrity": "sha512-JBKs2HniYecq5zLO6UFReX28SUBPM3n0aizdNgHuvwZmDcTfNV4jsuJYQLqJ+FbCQsrSHkBxKZqWpfGXY9bUEg==", - "requires": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.10.5", - "prop-types": "^15.7.2", - "tslib": "^2.0.0" - } - }, - "@reach/utils": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.10.5.tgz", - "integrity": "sha512-5E/xxQnUbmpI/LrufBAOXjunl96DnqX6B4zC2MO2KH/dRzLug5gM5VuOwV26egsp0jvsSPxojwciOhS43px3qw==", - "requires": { - "@types/warning": "^3.0.0", - "tslib": "^2.0.0", - "warning": "^4.0.3" - } - }, - "@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" - } - }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@styled-system/background": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz", - "integrity": "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/border": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz", - "integrity": "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/color": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz", - "integrity": "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/core": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz", - "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==", - "requires": { - "object-assign": "^4.1.1" - } - }, - "@styled-system/css": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz", - "integrity": "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==" - }, - "@styled-system/flexbox": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz", - "integrity": "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/grid": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz", - "integrity": "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/layout": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz", - "integrity": "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/position": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz", - "integrity": "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/shadow": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz", - "integrity": "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/space": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz", - "integrity": "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/typography": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz", - "integrity": "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==", - "requires": { - "@styled-system/core": "^5.1.2" - } - }, - "@styled-system/variant": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz", - "integrity": "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==", - "requires": { - "@styled-system/core": "^5.1.2", - "@styled-system/css": "^5.1.5" - } - }, - "@tlon/indigo-react": { - "version": "1.2.25", - "resolved": "https://registry.npmjs.org/@tlon/indigo-react/-/indigo-react-1.2.25.tgz", - "integrity": "sha512-4K0MeGqDK6OnqEDq2AHGHNhX4+owqCzhDFCzd81HPwyYy9x6wZB+z+iI36xl+P6Fwhl0I2fIKMG9ioiA1vbiLQ==", - "requires": { - "@reach/menu-button": "^0.10.5", - "react": "^16.13.1", - "tslib": "^2.0.1" - } - }, - "@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.16", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", - "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", - "dev": 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.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": 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==", - "dev": 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==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", - "dev": true, - "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/history": { - "version": "4.7.9", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.9.tgz", - "integrity": "sha512-MUc6zSmU3tEVnkQ78q0peeEjKWPUADMlC/t++2bI8WnAG2tvYRPIgHG8lWkXwqc8MsUF6Z2MOf+Mh5sazOmhiQ==", - "dev": true - }, - "@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==", - "dev": true, - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "@types/html-minifier-terser": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz", - "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "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/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==", - "dev": true - }, - "@types/lodash": { - "version": "4.14.172", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", - "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==" - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/node": { - "version": "16.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", - "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", - "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==", - "dev": true - }, - "@types/react": { - "version": "16.14.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.15.tgz", - "integrity": "sha512-jOxlBV9RGZhphdeqJTCv35VZOkjY+XIEY2owwSk84BNDdDv2xS6Csj6fhi+B/q30SR9Tz8lDNt/F2Z5RF3TrRg==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "16.9.14", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.14.tgz", - "integrity": "sha512-FIX2AVmPTGP30OUJ+0vadeIFJJ07Mh1m+U0rxfgyW34p3rTlXI+nlenvAxNn4BP36YyI9IJ/+UJ7Wu22N1pI7A==", - "dev": true, - "requires": { - "@types/react": "^16" - } - }, - "@types/react-router": { - "version": "5.1.16", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.16.tgz", - "integrity": "sha512-8d7nR/fNSqlTFGHti0R3F9WwIertOaaA1UEB8/jr5l5mDMOs4CidEgvvYMw4ivqrBK+vtVLxyTj2P+Pr/dtgzg==", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*" - } - }, - "@types/react-router-dom": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.8.tgz", - "integrity": "sha512-03xHyncBzG0PmDmf8pf3rehtjY0NpUj7TIN46FrT5n1ZWHPZvXz32gUyNboJ+xsL8cpg8bQVLcllptcQHvocrw==", - "dev": true, - "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@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.14", - "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.14.tgz", - "integrity": "sha512-d6P1/tyNytqKwam3cQXq7a9uPtovc/mdAs7dBiz1YbDdNIT3X4WmuFU78YdSYh84TXVuhOwezZ3EeKuNBhwsHQ==", - "dev": true, - "requires": { - "@types/hoist-non-react-statics": "*", - "@types/react": "*", - "csstype": "^3.0.2" - } - }, - "@types/styled-system": { - "version": "5.1.13", - "resolved": "https://registry.npmjs.org/@types/styled-system/-/styled-system-5.1.13.tgz", - "integrity": "sha512-RtpV6zXnnMQNcxKjC06BUM4MUER5o9uZ6b7xAc2OzhWxSsmQ3jXyW8ohuXdEJRKypEe0EqAzbSGx2Im0NXfdKA==", - "dev": true, - "requires": { - "csstype": "^3.0.2" - } - }, - "@types/tapable": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz", - "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.1.tgz", - "integrity": "sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI=" - }, - "@types/webpack": { - "version": "4.41.31", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.31.tgz", - "integrity": "sha512-/i0J7sepXFIp1ZT7FjUGi1eXMCg8HCCzLJEQkKsOtbJFontsJLolBcDC+3qxn5pPwiCt1G0ZdRmYRzNBtvpuGQ==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/tapable": "^1", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "anymatch": "^3.0.0", - "source-map": "^0.6.0" - } - }, - "@types/webpack-sources": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz", - "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "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 - } - } - }, - "@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "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": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.1.tgz", - "integrity": "sha512-UDqhWmd5i0TvPLmbK5xY3UZB0zEGseF+DHPghZ37Sb83Qd3p8ujhvAtkU4OF46Ka5Pm5kWvFIx0cCTBFKo0alA==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.31.1", - "@typescript-eslint/scope-manager": "4.31.1", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "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" - } - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz", - "integrity": "sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.31.1", - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/typescript-estree": "4.31.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "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==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - } - } - }, - "@typescript-eslint/parser": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.31.1.tgz", - "integrity": "sha512-dnVZDB6FhpIby6yVbHkwTKkn2ypjVIfAR9nh+kYsA/ZL0JlTsd22BiDjouotisY3Irmd3OW1qlk9EI5R8GrvRQ==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.31.1", - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/typescript-estree": "4.31.1", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz", - "integrity": "sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/visitor-keys": "4.31.1" - } - }, - "@typescript-eslint/types": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.31.1.tgz", - "integrity": "sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz", - "integrity": "sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.31.1", - "@typescript-eslint/visitor-keys": "4.31.1", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "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" - } - }, - "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" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.31.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz", - "integrity": "sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.31.1", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@urbit/api": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@urbit/api/-/api-1.4.0.tgz", - "integrity": "sha512-mjNwu+kbYhbDcDPAk3+kEMKHoHa5VtjCcIxBMQSpvy27N9jgS7D1Pn7MDEyDwdsVk9PWWG3ODg6q+yGwLMBuwg==", - "requires": { - "@babel/runtime": "^7.12.5", - "@types/lodash": "^4.14.168", - "@urbit/eslint-config": "^1.0.3", - "big-integer": "^1.6.48", - "immer": "^9.0.1", - "lodash": "^4.17.20", - "urbit-ob": "^5.0.1" - } - }, - "@urbit/eslint-config": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@urbit/eslint-config/-/eslint-config-1.0.3.tgz", - "integrity": "sha512-4mGd4GzzF+JMG/eAhjDQBjyVYo0xNbpcC7I16GouINLIuz5LJmNZ98SRQaOpfnsGIfTiZxwyZnfIX20orvWMxQ==" - }, - "@urbit/http-api": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@urbit/http-api/-/http-api-1.3.1.tgz", - "integrity": "sha512-z9giStO48tdIwrZ570jzw9N4cQCVS6ziacNk6UPsXbAA+KPuw+r71ehxgECgVmJdfTqUSUh6u+LIcmz+1yQgJQ==", - "requires": { - "@babel/runtime": "^7.12.5", - "@microsoft/fetch-event-source": "^2.0.0", - "browser-or-node": "^1.3.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", - "stream-browserify": "^3.0.0", - "stream-http": "^3.1.1" - } - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@welldone-software/why-did-you-render": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@welldone-software/why-did-you-render/-/why-did-you-render-6.2.1.tgz", - "integrity": "sha512-eIVKeK6ueS3tuzCqMVTaaNrPYvb9cA8NHiNgLA7Op8SD4TiT31zqNjxmhzLEK+y3sBxcwr6YhsiQGX9EThrvaw==", - "dev": true, - "requires": { - "lodash": "^4" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@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==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "requires": {} - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "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": "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" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "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" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "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==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "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-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "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" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "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": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "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.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", - "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2" - } - }, - "babel-plugin-root-import": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-root-import/-/babel-plugin-root-import-6.6.0.tgz", - "integrity": "sha512-SPzVOHd7nDh5loZwZBxtX/oOu1MXeKjTkz+1VnnzLWC0dk8sJIGC2IDQ2uWIBjE5mUtXlQ35MTHSqN0Xn7qHrg==", - "dev": true, - "requires": { - "slash": "^3.0.0" - } - }, - "babel-plugin-styled-components": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz", - "integrity": "sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.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": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "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==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "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 - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - } - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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=", - "dev": true - }, - "browser-or-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz", - "integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg==" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "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": { - "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==", - "dev": true - } - } - }, - "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.17.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", - "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001254", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.830", - "escalade": "^3.1.1", - "node-releases": "^1.1.75" - } - }, - "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": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "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==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "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==", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "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 - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "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.30001257", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz", - "integrity": "sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==", - "dev": true - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "requires": { - "rsvp": "^4.8.4" - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "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 - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "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==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clean-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-MciirUH5r+cYLGCOL5JX/ZLzOZbVr1ot3Fw+KcvbhUb6PM+yycqd9ZhIlcigQ5gl+XhppNmw3bEFuaaMNyLj3A==", - "dev": true, - "requires": { - "@types/webpack": "^4.4.31", - "del": "^4.1.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 - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "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==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "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==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "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 - }, - "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==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "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=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "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==", - "dev": true - } - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js-compat": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.17.3.tgz", - "integrity": "sha512-+in61CKYs4hQERiADCJsdgewpdl/X0GhEX77pjKgbeibXviIt2oxEjTc8O2fqHX8mDdBrDvX8MYD/RYsBv4OiA==", - "dev": true, - "requires": { - "browserslist": "^4.17.0", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "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==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "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-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.1" - }, - "dependencies": { - "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" - } - }, - "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 - }, - "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 - }, - "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" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "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==", - "dev": true, - "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" - } - }, - "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-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - }, - "dependencies": { - "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "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-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "dev": true - }, - "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.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", - "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==", - "dev": true - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "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.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "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 - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.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": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "peer": true - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true, - "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=", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "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 - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "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==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "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-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "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" - }, - "dependencies": { - "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "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 - } - } - }, - "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" - }, - "dependencies": { - "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.836", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz", - "integrity": "sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "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" - } - }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.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" - }, - "dependencies": { - "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 - } - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", - "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", - "dev": true, - "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-string": "^1.0.7", - "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-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "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": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "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==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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 - }, - "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" - } - }, - "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": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.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 - } - } - }, - "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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 - }, - "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" - } - }, - "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" - } - }, - "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 - }, - "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 - }, - "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" - } - }, - "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 - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.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" - } - }, - "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-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 - }, - "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" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz", - "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "estraverse": "^5.2.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "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" - } - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "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" - } - } - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "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" - } - }, - "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 - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.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 - } - } - }, - "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" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.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" - } - }, - "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 - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "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 - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - }, - "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==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "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" - } - }, - "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==", - "dev": true - }, - "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 - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "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" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "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" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.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==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.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" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.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 - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.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==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "follow-redirects": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", - "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "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" - } - }, - "formik": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", - "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", - "peer": true, - "requires": { - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "peer": true - } - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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 - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.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==", - "dev": true - }, - "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": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "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": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "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==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "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==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "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==", - "dev": true - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "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" - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "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 - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - } - } - }, - "html-webpack-plugin": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz", - "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^5.0.0", - "@types/tapable": "^1.0.5", - "@types/webpack": "^4.41.8", - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.20", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - } - } - }, - "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" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "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=", - "dev": true - }, - "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": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, - "husky": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", - "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", - "dev": true - }, - "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" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "immer": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", - "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==" - }, - "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.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "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 - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "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==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.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==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "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==", - "dev": true, - "optional": true, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "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==", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "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==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "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-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "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==", - "dev": true, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "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==", - "dev": true, - "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=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "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-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "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=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "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" - } - }, - "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": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "semver": "^6.0.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" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.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 - }, - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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 - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.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" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "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" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "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" - } - }, - "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 - }, - "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 - }, - "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" - } - } - } - }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.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 - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - } - }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - } - }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true - }, - "jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - } - }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "requires": { - "@jest/types": "^26.6.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": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true - }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - } - }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.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 - }, - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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 - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.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" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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" - } - }, - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.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.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "dependencies": { - "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-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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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" - } - }, - "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 - } - } - }, - "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==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "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" - }, - "dependencies": { - "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==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "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" - } - }, - "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 - } - } - }, - "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==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "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==", - "dev": true - }, - "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 - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, - "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" - } - }, - "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "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==", - "dev": true - }, - "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" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "lint-staged": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.2.tgz", - "integrity": "sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w==", - "dev": true, - "requires": { - "chalk": "^4.1.1", - "cli-truncate": "^2.1.0", - "commander": "^7.2.0", - "cosmiconfig": "^7.0.0", - "debug": "^4.3.1", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "listr2": "^3.8.2", - "log-symbols": "^4.1.0", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "please-upgrade-node": "^3.2.0", - "string-argv": "0.3.1", - "stringify-object": "^3.3.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.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 - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "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" - } - }, - "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 - }, - "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" - } - }, - "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 - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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 - }, - "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-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "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" - } - }, - "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 - }, - "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 - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.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" - } - }, - "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" - } - } - } - }, - "listr2": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.12.1.tgz", - "integrity": "sha512-oB1DlXlCzGPbvWhqYBZUQEPJKqsmebQWofXG6Mpbe3uIvoNl8mctBEojyF13ZyqwQ91clCWXpwsWp+t98K4FOQ==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^1.4.0", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rxjs": "^6.6.7", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "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": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.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 - }, - "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 - }, - "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 - }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "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 - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "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-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", - "peer": true - }, - "lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "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=" - }, - "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.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true - }, - "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" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "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" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "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==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "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==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "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==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "dev": true - }, - "mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "dev": true, - "requires": { - "mime-db": "1.49.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 - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "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==", - "dev": true - }, - "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=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "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==", - "dev": true - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "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" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "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 - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "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==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "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-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "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==", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - } - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "optional": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "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-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "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==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "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==", - "dev": true, - "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.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "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" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "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" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.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=", - "dev": true - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.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==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - }, - "dependencies": { - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "dev": true - } - } - }, - "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==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "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==", - "dev": true, - "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" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "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==", - "dev": true - }, - "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=", - "dev": true - }, - "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=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "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==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "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" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "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" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "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 - }, - "pretty-error": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", - "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^2.0.4" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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 - }, - "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 - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "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==", - "dev": true, - "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" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "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==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, - "react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==", - "peer": true - }, - "react-hot-loader": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.0.tgz", - "integrity": "sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==", - "dev": true, - "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^3.3.0", - "loader-utils": "^1.1.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.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 - } - } - }, - "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-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, - "react-router": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.1.tgz", - "integrity": "sha512-lIboRiOtDLFdg1VTemMwud9vRVuOCZmUIT/7lUoZiSpPODiiH1UQlfXy+vPLC/7IWdFYnhRwAyNqA/+I7wnvKQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-dom": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.0.tgz", - "integrity": "sha512-ObVBLjUZsphUUMVycibxgMdh5jJ1e3o+KpAZBVeHcNQZ4W+uUGGWsokurzlF4YOldQYRQL4y6yFRWM4m3svmuQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.2.1", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "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.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "requires": { - "regenerate": "^1.4.0" - } - }, - "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==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "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==", - "dev": true, - "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.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "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=", - "dev": true - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "renderkid": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", - "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "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" - } - } - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "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==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "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-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - } - } - }, - "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-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "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==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "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==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, - "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==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "dev": true, - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "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.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "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==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", - "dev": true, - "requires": { - "node-forge": "^0.10.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 - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.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" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "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" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "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": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.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" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "sockjs-client": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.2.tgz", - "integrity": "sha512-ZzRxPBISQE7RpzlH4tKJMQbHM9pabHluk0WBaxAQ+wm/UieeBVBou0p4wVnSQGN9QmpAZygQ0cDIypWuqOFmFQ==", - "dev": true, - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.3" - }, - "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" - } - } - } - }, - "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==", - "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-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "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 - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "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-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", - "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "xtend": "^4.0.2" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "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" - } - }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true - }, - "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.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.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==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "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.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.1.tgz", - "integrity": "sha512-JThv2JRzyH0NOIURrk9iskdxMSAAtCfj/b2Sf1WJaCUsloQkblepy1jaCLX/bYE+mhYo3unmwVSI9I5d9ncSiQ==", - "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": { - "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-system": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", - "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", - "requires": { - "@styled-system/background": "^5.1.2", - "@styled-system/border": "^5.1.5", - "@styled-system/color": "^5.1.2", - "@styled-system/core": "^5.1.2", - "@styled-system/flexbox": "^5.1.2", - "@styled-system/grid": "^5.1.2", - "@styled-system/layout": "^5.1.2", - "@styled-system/position": "^5.1.2", - "@styled-system/shadow": "^5.1.2", - "@styled-system/space": "^5.1.2", - "@styled-system/typography": "^5.1.2", - "@styled-system/variant": "^5.1.5", - "object-assign": "^4.1.1" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "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": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "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" - } - } - } - }, - "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 - }, - "tabbable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz", - "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==" - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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 - }, - "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 - }, - "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 - }, - "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==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "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" - }, - "dependencies": { - "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" - } - }, - "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 - } - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "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": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "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==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tiny-invariant": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", - "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "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-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "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-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "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==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "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" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "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.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": 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" - } - }, - "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 - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "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.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "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": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "urbit-ob": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/urbit-ob/-/urbit-ob-5.0.1.tgz", - "integrity": "sha512-qGNAwu87XNkW3g8ah4fUwmh2EKXtsdhEbyEiE5qX4Op17rhLH3HSkvu8g9z+MhqX51Uz9sf8ktvqJj/IRwETIQ==", - "requires": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "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 - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "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==", - "dev": true - }, - "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.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "optional": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.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==", - "dev": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "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": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.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 - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "dev": true, - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.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 - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "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==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "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" - } - }, - "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": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "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==", - "dev": true, - "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-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "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 - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "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 - }, - "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 - }, - "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 - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "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.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "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==" - }, - "xterm": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/xterm/-/xterm-4.15.0.tgz", - "integrity": "sha512-Ik1GoSq1yqKZQ2LF37RPS01kX9t4TP8gpamUYblD09yvWX5mEYuMK4CcqH6+plgiNEZduhTz/UrcaWs97gOlOw==" - }, - "xterm-addon-fit": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz", - "integrity": "sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ==", - "requires": {} - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "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 - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "zustand": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-3.5.10.tgz", - "integrity": "sha512-upluvSRWrlCiExu2UbkuMIPJ9AigyjRFoO7O9eUossIj7rPPq7pcJ0NKk6t2P7KF80tg/UdPX6/pNKOSbs9DEg==", - "requires": {} - } - } -} diff --git a/pkg/interface/webterm/package.json b/pkg/interface/webterm/package.json deleted file mode 100644 index e859b4825..000000000 --- a/pkg/interface/webterm/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "webterm", - "version": "1.0.0", - "description": "", - "main": "index.js", - "private": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "@reach/menu-button": "^0.10.5", - "@tlon/indigo-react": "^1.2.23", - "@urbit/api": "^1.1.1", - "@urbit/http-api": "^1.2.1", - "file-saver": "^2.0.5", - "react": "^16.14.0", - "react-dom": "^16.14.0", - "react-router-dom": "^5.2.0", - "styled-components": "^5.1.1", - "styled-system": "^5.1.5", - "xterm": "^4.15.0", - "xterm-addon-fit": "^0.5.0", - "zustand": "^3.5.0" - }, - "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-transform-runtime": "^7.12.10", - "@babel/preset-env": "^7.12.11", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "@types/react": "^16.14.2", - "@types/react-dom": "^16.9.10", - "@types/react-router-dom": "^5.1.7", - "@types/styled-components": "^5.1.7", - "@types/styled-system": "^5.1.10", - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.24.0", - "@urbit/eslint-config": "^1.0.0", - "@welldone-software/why-did-you-render": "^6.1.0", - "babel-eslint": "^10.1.0", - "babel-jest": "^26.6.3", - "babel-loader": "^8.2.2", - "babel-plugin-root-import": "^6.6.0", - "clean-webpack-plugin": "^3.0.0", - "cross-env": "^7.0.3", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "file-loader": "^6.2.0", - "html-webpack-plugin": "^4.5.1", - "husky": "^6.0.0", - "jest": "^26.6.3", - "lint-staged": "^11.0.0", - "react-hot-loader": "^4.13.0", - "typescript": "^4.2.4", - "webpack": "^4.46.0", - "webpack-cli": "^3.3.12", - "webpack-dev-server": "^3.11.2" - }, - "scripts": { - "lint": "eslint ./src/**/*.{ts,tsx}", - "lint-file": "eslint", - "tsc": "tsc", - "tsc:watch": "tsc --watch", - "build:dev": "cross-env NODE_ENV=development webpack --config config/webpack.dev.js", - "build:prod": "cross-env NODE_ENV=production webpack --config config/webpack.prod.js", - "start": "webpack-dev-server --config config/webpack.dev.js", - "test": "tsc && jest", - "jest": "jest", - "hook-lint": "eslint --cache --fix" - }, - "author": "", - "license": "MIT", - "lint-staged": { - "*.{js,ts,tsx}": "eslint --cache --fix" - } -} diff --git a/pkg/interface/webterm/state.ts b/pkg/interface/webterm/state.ts deleted file mode 100644 index 253e7854f..000000000 --- a/pkg/interface/webterm/state.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Terminal } from 'xterm'; -import { FitAddon } from 'xterm-addon-fit'; -import create from 'zustand'; -import produce from 'immer'; - -type Session = { term: Terminal, fit: FitAddon }; -type Sessions = { [id: string]: Session; } - -export interface TermState { - sessions: Sessions, - selected: string, - slogstream: null | EventSource, - theme: 'auto' | 'light' | 'dark' -}; - -const useTermState = create((set, get) => ({ - sessions: {} as Sessions, - selected: '', // empty string is default session - slogstream: null, - theme: 'auto', - set: (f: (draft: TermState) => void) => { - set(produce(f)); - } -} as TermState)); - -export default useTermState; diff --git a/pkg/landscape/app/chat-cli.hoon b/pkg/landscape/app/chat-cli.hoon index 4398cc7e8..a5aa5dee2 100644 --- a/pkg/landscape/app/chat-cli.hoon +++ b/pkg/landscape/app/chat-cli.hoon @@ -16,15 +16,15 @@ +$ card card:shoe :: +$ versioned-state - $% state-3 + $% state-4 + state-3 state-2 state-1 state-0 == :: -+$ state-3 - $: %3 - ::TODO support multiple sessions ++$ state-4 + $: %4 sessions=(map sole-id session) :: sole sessions bound=(map resource glyph) :: bound resource glyphs binds=(jug glyph resource) :: resource glyph lookup @@ -33,7 +33,17 @@ timez=(pair ? @ud) :: timezone adjustment == :: -+$ sole-id @ta ++$ state-3 + $: %3 + sessions=(map @ta session) + bound=(map resource glyph) + binds=(jug glyph resource) + settings=(set term) + width=@ud + timez=(pair ? @ud) + == +:: ++$ sole-id sole-id:shoe +$ session $: viewing=(set resource) :: connected graphs history=(list uid:post) :: scrollback pointers @@ -115,7 +125,7 @@ == :: :: -- -=| state-3 +=| state-4 =* state - :: %- agent:dbug @@ -258,14 +268,14 @@ settings width timez == :: - =^ cards u.old + =^ cards-1 u.old ?. ?=(%2 -.u.old) [~ u.old] :- :~ [%pass /chat-store %agent [our-self %chat-store] %leave ~] [%pass /invites %agent [our.bowl %invite-store] %leave ~] == ^- state-3 :- %3 - :* %+ ~(put in *(map sole-id session)) + :* %+ ~(put in *(map @ta session)) (cat 3 'drum_' (scot %p our.bowl)) :* ~ ~ 0 :: @@ -290,14 +300,29 @@ timez.u.old == :: - ?> ?=(%3 -.u.old) + =^ cards-2 u.old + ?. ?=(%3 -.u.old) [~ u.old] + :- %+ turn ~(tap in ~(key by sessions.u.old)) + |= id=@ta + ^- card:agent:gall + [%give %kick ~[/sole/[id]] ~] + =- u.old(- %4, sessions -) + %- ~(gas by *(map sole-id session)) + %+ murn ~(tap by sessions.u.old) + |= [id=@ta s=session] + (bind (upgrade-id:sole:shoe id) (late s)) + :: + ?> ?=(%4 -.u.old) :_ u.old - %+ welp - cards - ?: %- ~(has by wex.bowl) - [/graph-store our-self %graph-store] - ~ - ~[connect] + ;: welp + cards-1 + cards-2 + :: + ?: %- ~(has by wex.bowl) + [/graph-store our-self %graph-store] + ~ + ~[connect] + == :: +connect: connect to the graph-store :: ++ connect diff --git a/pkg/landscape/app/chat-hook.hoon b/pkg/landscape/app/chat-hook.hoon index f6da35a7d..5d95561bd 100644 --- a/pkg/landscape/app/chat-hook.hoon +++ b/pkg/landscape/app/chat-hook.hoon @@ -49,7 +49,10 @@ =| cards=(list card) |- ?: ?=(%11 -.old) - [cards this(state old)] + :_ this(state old) + :_ cards + :+ %pass /cli-cleanup + [%agent [our.bol %hood] %poke %drum-unlink !>([%$ our.bol %chat-cli])] =. cards :_ cards =- [%pass /self-poke %agent [our.bol %chat-hook] %poke -] diff --git a/pkg/landscape/app/contact-store.hoon b/pkg/landscape/app/contact-store.hoon index e3f750715..bac7cd9ec 100644 --- a/pkg/landscape/app/contact-store.hoon +++ b/pkg/landscape/app/contact-store.hoon @@ -123,7 +123,15 @@ :: ensure difference =/ old=(unit contact:store) (~(get by rolodex) ship) ?. ?| ?=(~ old) - !=(contact(last-updated *@da) u.old(last-updated *@da)) + :: if new contact is before existing contact, no-op + :: + :: NB: last-updated.contact is often *@da, so this + :: effectively stops add from applying if we already have + :: a contact for them + :: + ?& (gth last-updated.contact last-updated.u.old) + !=(contact(last-updated *@da) u.old(last-updated *@da)) + == == [~ state] ~| "cannot add a data url to cover!" diff --git a/pkg/landscape/app/graph-pull-hook.hoon b/pkg/landscape/app/graph-pull-hook.hoon index 1a134e614..364e0d00d 100644 --- a/pkg/landscape/app/graph-pull-hook.hoon +++ b/pkg/landscape/app/graph-pull-hook.hoon @@ -54,12 +54,7 @@ ++ on-pull-nack |= [=resource =tang] ^- (quip card _this) - %- (slog leaf+"nacked {}" tang) - :_ this - ?. (~(has in get-keys:gra) resource) ~ - =- [%pass /pull-nack %agent [our.bowl %graph-store] %poke %graph-update-3 -]~ - !> ^- update:store - [now.bowl [%archive-graph resource]] + `this :: ++ on-pull-kick |= =resource diff --git a/pkg/landscape/app/graph-store.hoon b/pkg/landscape/app/graph-store.hoon index 8ab7ab012..3170ead6e 100644 --- a/pkg/landscape/app/graph-store.hoon +++ b/pkg/landscape/app/graph-store.hoon @@ -11,16 +11,17 @@ [%3 network:one:store] [%4 network:store] [%5 network:store] - state-6 + [%6 network:store] + state-7 == ::- -+$ state-6 [%6 network:store] ++$ state-7 [%7 network:store] ++ orm orm:store ++ orm-log orm-log:store ++ mar %graph-update-3 -- :: -=| state-6 +=| state-7 =* state - :: %- agent:dbug @@ -96,7 +97,43 @@ (scag 2 (tap:orm-log update-log)) == :: - %6 [cards this(state old)] + %6 + =/ old-dms + %- ~(gas by *(map resource:store marked-graph:store)) + %+ skim ~(tap by graphs.old) + |=([r=resource:store *] (is-old-dm:upgrade:store r)) + =/ backup (backup:upgrade:store bowl) + %_ $ + -.old %7 + archive.old ~ + update-logs.old + %- ~(gas by *(map resource:store update-log:store)) + %+ murn ~(tap by update-logs.old) + |= [r=resource:store =update-log:store] + ?: (is-old-dm:upgrade:store r) + ~ + `[r (strip-sigs-log:upgrade:store update-log)] + :: + graphs.old + %- ~(gas by *(map resource:store marked-graph:store)) + %+ murn ~(tap by graphs.old) + |= [r=resource:store =graph:store mar=(unit mark)] + ?: (is-old-dm:upgrade:store r) + ~ + `[r (strip-sigs-graph:upgrade:store graph) mar] + :: + cards + ;: welp + cards + :: + (nuke-groups:upgrade:store bowl) + :: + (turn ~(tap by archive.old) backup) + (turn ~(tap by old-dms) backup) + == + == + :: + %7 [cards this(state old)] == :: ++ on-watch @@ -129,9 +166,21 @@ ?+ mark (on-poke:def mark vase) %graph-update-3 (graph-update !<(update:store vase)) %import (poke-import q.vase) + %migrated (poke-migrated !<(resource:store vase)) == [cards this] :: + ++ poke-migrated + |= r=resource:res + ^- (quip card _state) + =/ =path /(rap 3 'backup-' (scot %p entity.r) '-' name.r ~)/noun + =/ graph (~(got by graphs) r) + :- [%pass /migrate %agent [our.bowl %hood] %poke drum-put+!>([path (jam r graph)])]~ + %_ state + graphs (~(del by graphs) r) + update-logs (~(del by update-logs) r) + == + :: ++ graph-update |= =update:store ^- (quip card _state) @@ -644,6 +693,16 @@ |= =path ^- (unit (unit cage)) ?+ path (on-peek:def path) + [%x %whey ~] + =/ liv=(list mass) + (sort (turn ~(tap by graphs) |=([[* n=term] g=*] n^&+g)) aor) + =/ log=(list mass) + (sort (turn ~(tap by update-logs) |=([[* n=term] l=*] n^&+l)) aor) + =/ sil=(list mass) + (sort (turn ~(tap by archive) |=([[* n=term] g=*] n^&+g)) aor) + :^ ~ ~ %mass + !>(`(list mass)`[live+|+liv logs+|+log ?~(sil ~ [silo+|+sil ~])]) + :: [%x %export ~] ``noun+!>(state) :: [%x %keys ~] @@ -679,20 +738,19 @@ =/ update-log (~(get by update-logs) [ship term]) :- ~ :- ~ :- %noun - !> ?+ t.t.t.t.path (on-peek:def path) ~ - ^- update-log:store + !> ^- update-log:store ?~(update-log *update-log:store u.update-log) :: [%latest ~] - ^- (unit time) + !> ^- (unit time) %+ biff update-log |= =update-log:store (bind (pry:orm-log:store update-log) head) :: [%subset @ @ ~] - ^- update-log:store + !> ^- update-log:store ?~ update-log *update-log:store =* start i.t.t.t.t.t.path =* end i.t.t.t.t.t.t.path diff --git a/pkg/landscape/app/group-pull-hook.hoon b/pkg/landscape/app/group-pull-hook.hoon index f97582e70..aad34e33b 100644 --- a/pkg/landscape/app/group-pull-hook.hoon +++ b/pkg/landscape/app/group-pull-hook.hoon @@ -45,10 +45,7 @@ ++ on-pull-nack |= [=resource =tang] ^- (quip card _this) - %- (slog tang) - :_ this - =- [%pass / %agent [our.bowl %group-store] %poke -]~ - group-update-0+!>([%remove-group resource ~]) + `this :: ++ on-pull-kick |= =resource diff --git a/pkg/landscape/app/group-store.hoon b/pkg/landscape/app/group-store.hoon index f869a4c0a..ae1cbb49c 100644 --- a/pkg/landscape/app/group-store.hoon +++ b/pkg/landscape/app/group-store.hoon @@ -31,13 +31,17 @@ :: /- *group /+ store=group-store, default-agent, verb, dbug, resource, *migrate, agentio +/+ gladio |% +$ card card:agent:gall +++ ota-host ~sogryp-dister-dozzod-dozzod :: +$ versioned-state $% state-zero state-one state-two + state-three + state-four == :: +$ state-zero @@ -52,13 +56,25 @@ $: %2 =groups == +:: ++$ state-three + $: %3 + =groups + wait=(set ship) + == +:: ++$ state-four + $: %4 + =groups + wait=(set ship) + == -- :: -=| state-two +=| state-four =* state - :: %- agent:dbug -%+ verb | +%+ verb & ^- agent:gall =< |_ =bowl:gall @@ -72,10 +88,32 @@ ++ on-load |= =old=vase =/ old !<(versioned-state old-vase) + =| cards=(list card) |^ - ?- -.old - %2 `this(state old) - :: + ?- -.old + %4 [(flop cards) this(state old)] + :: + %3 + %_ $ + old [%4 +.old] + cards + :_ cards + [%pass /pyre/rebuild %agent [our dap]:bowl %poke noun+!>(%rebuild)] + == + :: + %2 + %_ $ + old [%3 groups.old ~] + cards + %- welp + :_ cards + :~ [%pass /pyre/export %agent [our dap]:bowl %poke noun+!>(%export)] + [%pass /pyre/migrate %agent [our dap]:bowl %poke noun+!>(%migrate)] + [%pass / %agent [our %hood]:bowl %poke %kiln-install !>([%groups ota-host %groups])] + [%pass / %agent [our %hood]:bowl %poke %kiln-install !>([%talk ota-host %talk])] + == + == + :: %1 %_ $ -.old %2 @@ -112,6 +150,14 @@ =^ cards state ?+ mark (on-poke:def mark vase) %sane (poke-sane:gc !<(?(%check %fix) vase)) + :: + %noun + ?+ q.vase !! + %migrate poke-migrate:gc + %migrate-my-channels poke-migrate-my-channels:gc + %export poke-export:gc + %rebuild poke-rebuild:gc + == :: ?(%group-update-0 %group-action) (poke-group-update:gc !<(update:store vase)) @@ -125,6 +171,8 @@ |= =path ^- (quip card _this) ?> (team:title our.bowl src.bowl) + ?: ?=([%wait ~] path) + `this ?> ?=([%groups ~] path) :_ this [%give %fact ~ %group-update-0 !>([%initial groups])]~ @@ -135,6 +183,8 @@ |= =path ^- (unit (unit cage)) ?+ path (on-peek:def path) + [%x %wait ~] + ``ships+!>(~(tap in wait)) [%y %groups ~] ``noun+!>(`(set resource)`~(key by groups)) :: @@ -159,28 +209,38 @@ ++ on-agent |= [=wire =sign:agent:gall] ^- (quip card _this) - ?. ?=([%try-rejoin @ *] wire) - (on-agent:def wire sign) - ?> ?=(%poke-ack -.sign) - =/ rid=resource (de-path:resource t.t.wire) - ?~ p.sign - =/ =cage - [%pull-hook-action !>([%add entity.rid rid])] - :_ this - [%pass / %agent [our.bowl %group-pull-hook] %poke cage]~ - =/ nack-count=@ud (slav %ud i.t.wire) - =/ wakeup=@da - (add now.bowl (mul ~s1 (bex (min 19 nack-count)))) - :_ this - [%pass wire %arvo %b %wait wakeup]~ + =^ cards state + ?+ wire [- state]:(on-agent:def wire sign) + [%pyre *] (take-pyre:gc t.wire sign) + [%gladio @ ~] (take-migrate:gc sign) + :: + [%try-rejoin @ *] + ?> ?=(%poke-ack -.sign) + =/ rid=resource (de-path:resource t.t.wire) + ?~ p.sign + =/ =cage + [%pull-hook-action !>([%add entity.rid rid])] + :_ state + [%pass / %agent [our.bowl %group-pull-hook] %poke cage]~ + =/ nack-count=@ud (slav %ud i.t.wire) + =/ wakeup=@da + (add now.bowl (mul ~s1 (bex (min 19 nack-count)))) + :_ state + [%pass wire %arvo %b %wait wakeup]~ + == + [cards this] :: ++ on-arvo - |= [=wire =sign-arvo] + |= [=(pole knot) =sign-arvo] ^- (quip card _this) - ?. ?=([%try-rejoin @ *] wire) - (on-arvo:def wire sign-arvo) - =/ =resource (de-path:resource t.t.wire) - =/ nack-count=@ud (slav %ud i.t.wire) + ?: ?=([%gladio %backoff ship=@ ~] pole) + =^ cards state + (take-backoff:gc (slav %p ship.pole) sign-arvo) + [cards this] + ?. ?=([%try-rejoin count=@ res=*] pole) + (on-arvo:def pole sign-arvo) + =/ =resource (de-path:resource res.pole) + =/ nack-count=@ud (slav %ud count.pole) ?> ?=([%behn %wake *] sign-arvo) ~? ?=(^ error.sign-arvo) "behn errored in backoff timers, continuing anyway" @@ -192,6 +252,111 @@ :: |_ bol=bowl:gall +* io ~(. agentio bol) +++ poke-rebuild + ^- (quip card _state) + |^ + =. wait + put-missing + =^ cards state + rewatch + [cards state] + :: + ++ rewatch + =/ wait ~(tap in wait) + =| cards=(list card) + |- + ?~ wait + [cards state] + =/ wir /gladio/(scot %p i.wait) + =. cards + :_(cards (watch-init-migrate i.wait)) + :: if we have a subscription already, leave first to restart + =? cards + (~(has by wex.bol) [wir i.wait %groups]) + :_(cards [%pass wir %agent [i.wait %groups] %leave ~]) + $(wait t.wait) + :: + ++ put-missing + =/ wex ~(tap by wex.bol) + |- + ?~ wex + wait + =/ [[=wire =ship =term] [acked=? =(pole knot)]] + i.wex + ?. ?=([%gladio ship=@ ~] pole) + $(wex t.wex) + $(wex t.wex, wait (~(put in wait) (slav %p ship.pole))) + -- +:: +++ poke-export + ^- (quip card _state) + :_ state + =; =cage + [%pass /export %agent [our.bol %hood] %poke cage]~ + drum-put+!>([/groups/jam ~(export gladio bol)]) +:: +++ poke-migrate + ^- (quip card _state) + =^ cards-1=(list card) wait + (~(migrate-start gladio bol) wait) + =/ cards-2=(list card) + (turn ~(tap in wait) watch-init-migrate) + =/ cards (welp cards-1 cards-2) + [cards state(wait wait)] +++ poke-migrate-my-channels + ^- (quip card _state) + =/ [cards=(list card) *] (~(migrate-my-channels gladio bol) ~) + [cards state] +:: +++ watch-init-migrate + |= =ship + ^- card + [%pass /gladio/(scot %p ship) %agent [ship %groups] %watch /init] +:: +++ backoff-migrate + |= =ship + ^- card + [%pass /gladio/backoff/(scot %p ship) %arvo %b %wait (add ~h1 now.bol)] +:: +++ take-pyre + |= [=wire =sign:agent:gall] + ^- (quip card _state) + :_ state + ?> ?=(%poke-ack -.sign) + ?~ p.sign + ~ + [%pass / %pyre leaf/"{} failed" u.p.sign]~ +:: +++ take-backoff + |= [=ship sign=sign-arvo] + ^- (quip card _state) + ?> ?=([%behn %wake *] sign) + ?: ?=(^ error.sign) + `state + :_ state + ~[(watch-init-migrate ship)] +:: +++ take-migrate + |= =sign:agent:gall + ^- (quip card _state) + ?. (~(has in wait) src.bol) + :: already succeeded + `state + ?- -.sign + ?(%poke-ack %fact) `state + %kick :_(state (watch-init-migrate src.bol)^~) + %watch-ack + ?~ p.sign + :: they have public release + ~& migrating/src.bol + =. wait (~(del in wait) src.bol) + :_ state + :- [%give %fact ~[/wait] ships+!>(~(tap in wait))] + (~(migrate-ship gladio bol) src.bol) + :_ state + ~[(backoff-migrate src.bol)] + == +:: ++ peek-group |= rid=resource ^- (unit group) @@ -243,8 +408,8 @@ |= arc=* ^- (quip card _state) |^ - =/ sty=state-two - [%2 (remake-groups ;;((tree [resource tree-group]) +.arc))] + =/ sty=state-four + [%4 (remake-groups ;;((tree [resource tree-group]) +.arc)) ~] :_ sty %+ roll ~(tap by groups.sty) |= [[rid=resource grp=group] out=(list card)] diff --git a/pkg/landscape/app/group-view.hoon b/pkg/landscape/app/group-view.hoon index 2b07cbc6a..ec4277c13 100644 --- a/pkg/landscape/app/group-view.hoon +++ b/pkg/landscape/app/group-view.hoon @@ -190,6 +190,11 @@ |% ++ pull-action pull-hook-action+!>([%add ship rid]) :: + ++ listen-hark + |= gr=resource + %+ poke-our:pass:io %hark-graph-hook + hark-graph-hook-action+!>([%listen gr /]) + :: ++ watch-md (watch-our:(jn-pass-io /md) %metadata-store /updates) ++ watch-groups (watch-our:(jn-pass-io /groups) %group-store /groups) ++ watch-md-nacks (watch-our:(jn-pass-io /md-nacks) %metadata-pull-hook /nack) @@ -436,6 +441,9 @@ =? jn-core |(hidden autojoin.request) %- emit-many (turn graphs pull-gra:pass) + =? jn-core hidden + %- emit-many + (turn graphs listen-hark:pass) jn-core :: ++ feed-rid diff --git a/pkg/landscape/app/metadata-pull-hook.hoon b/pkg/landscape/app/metadata-pull-hook.hoon index f2d08fd30..2877a098d 100644 --- a/pkg/landscape/app/metadata-pull-hook.hoon +++ b/pkg/landscape/app/metadata-pull-hook.hoon @@ -321,15 +321,7 @@ ++ on-pull-nack |= [=resource =tang] ^- (quip card _this) - =/ =associations:metadata - (metadata-for-group:met resource) - :_ this - %+ turn ~(tap by associations) - |= [=md-resource:metadata =association:metadata] - %+ poke-our:pass:io:hc %metadata-store - :- %metadata-update-2 - !> ^- update:metadata - [%remove resource md-resource] + `this :: ++ on-pull-kick |= =resource diff --git a/pkg/landscape/app/s3-store.hoon b/pkg/landscape/app/s3-store.hoon index 061a35cf1..cee795389 100644 --- a/pkg/landscape/app/s3-store.hoon +++ b/pkg/landscape/app/s3-store.hoon @@ -9,12 +9,14 @@ +$ card card:agent:gall +$ versioned-state $% state-zero + state-one == :: -+$ state-zero [%0 =credentials =configuration] ++$ state-zero [%0 =credentials:zero:past =configuration:zero:past] ++$ state-one [%1 =credentials =configuration] -- :: -=| state-zero +=| state-one =* state - :: %- agent:dbug @@ -28,8 +30,28 @@ ++ on-init on-init:def ++ on-save !>(state) ++ on-load - |= old-vase=vase - [~ this(state !<(state-zero old-vase))] + |= =vase + =/ old !<(versioned-state vase) + |^ + ?- -.old + %1 `this(state old) + %0 `this(state (state-0-to-1 old)) + == + ++ state-0-to-1 + |= zer=state-zero + ^- state-one + :* %1 + credentials.zer + (configuration-0-to-1 configuration.zer) + == + ++ configuration-0-to-1 + |= conf=configuration:zero:past + ^- ^configuration + :* buckets.conf + current-bucket.conf + '' + == + -- :: ++ on-poke ~/ %s3-poke @@ -56,6 +78,9 @@ :: %set-secret-access-key state(secret-access-key.credentials secret-access-key.act) + :: + %set-region + state(region.configuration region.act) :: %set-current-bucket %_ state diff --git a/pkg/landscape/desk.bill b/pkg/landscape/desk.bill index a050ee619..3a8c88c69 100644 --- a/pkg/landscape/desk.bill +++ b/pkg/landscape/desk.bill @@ -5,7 +5,6 @@ %group-store %invite-store %s3-store - %chat-cli %chat-hook %chat-view %clock @@ -29,7 +28,6 @@ %metadata-hook %metadata-pull-hook %metadata-push-hook - %notify %observe-hook %sane %weather diff --git a/pkg/landscape/desk.docket-0 b/pkg/landscape/desk.docket-0 deleted file mode 100644 index 1efe8f767..000000000 --- a/pkg/landscape/desk.docket-0 +++ /dev/null @@ -1,10 +0,0 @@ -:~ title+'Groups' - info+'A suite of applications to communicate on Urbit' - color+0xee.5432 - glob-http+['https://bootstrap.urbit.org/glob-0v7.bmftr.90ktq.cma0h.da190.bs8b1.glob' 0v7.bmftr.90ktq.cma0h.da190.bs8b1] - - base+'landscape' - version+[1 0 11] - website+'https://tlon.io' - license+'MIT' -== diff --git a/pkg/landscape/gen/s3-store/set-region.hoon b/pkg/landscape/gen/s3-store/set-region.hoon new file mode 100644 index 000000000..d87b09f93 --- /dev/null +++ b/pkg/landscape/gen/s3-store/set-region.hoon @@ -0,0 +1,10 @@ +:: s3-store|set-current-bucket: set current bucket for S3 +:: +/- *s3 +:- %say +|= $: [now=@da eny=@uvJ =beak] + [[region=@t ~] ~] + == +:- %s3-action +^- action +[%set-region region] diff --git a/pkg/landscape/lib/dill.hoon b/pkg/landscape/lib/dill.hoon new file mode 120000 index 000000000..f9c2362f0 --- /dev/null +++ b/pkg/landscape/lib/dill.hoon @@ -0,0 +1 @@ +../../base-dev/lib/dill.hoon \ No newline at end of file diff --git a/pkg/landscape/lib/docket.hoon b/pkg/landscape/lib/docket.hoon deleted file mode 120000 index e0f69ee1e..000000000 --- a/pkg/landscape/lib/docket.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/docket.hoon \ No newline at end of file diff --git a/pkg/landscape/lib/docket.hoon b/pkg/landscape/lib/docket.hoon new file mode 100644 index 000000000..ef39b7fbb --- /dev/null +++ b/pkg/landscape/lib/docket.hoon @@ -0,0 +1,223 @@ +/- *docket +|% +:: +++ mime + |% + +$ draft + $: title=(unit @t) + info=(unit @t) + color=(unit @ux) + glob-http=(unit [=url hash=@uvH]) + glob-ames=(unit [=ship hash=@uvH]) + base=(unit term) + site=(unit path) + image=(unit url) + version=(unit version) + website=(unit url) + license=(unit cord) + == + :: + ++ finalize + |= =draft + ^- (unit docket) + ?~ title.draft ~ + ?~ info.draft ~ + ?~ color.draft ~ + ?~ version.draft ~ + ?~ website.draft ~ + ?~ license.draft ~ + =/ href=(unit href) + ?^ site.draft `[%site u.site.draft] + ?~ base.draft ~ + ?^ glob-http.draft + `[%glob u.base hash.u.glob-http %http url.u.glob-http]:draft + ?~ glob-ames.draft + ~ + `[%glob u.base hash.u.glob-ames %ames ship.u.glob-ames]:draft + ?~ href ~ + =, draft + :- ~ + :* %1 + u.title + u.info + u.color + u.href + image + u.version + u.website + u.license + == + :: + ++ from-clauses + =| =draft + |= cls=(list clause) + ^- (unit docket) + =* loop $ + ?~ cls (finalize draft) + =* clause i.cls + =. draft + ?- -.clause + %title draft(title `title.clause) + %info draft(info `info.clause) + %color draft(color `color.clause) + %glob-http draft(glob-http `[url hash]:clause) + %glob-ames draft(glob-ames `[ship hash]:clause) + %base draft(base `base.clause) + %site draft(site `path.clause) + %image draft(image `url.clause) + %version draft(version `version.clause) + %website draft(website `website.clause) + %license draft(license `license.clause) + == + loop(cls t.cls) + :: + ++ to-clauses + |= d=docket + ^- (list clause) + %- zing + :~ :~ title+title.d + info+info.d + color+color.d + version+version.d + website+website.d + license+license.d + == + ?~ image.d ~ ~[image+u.image.d] + ?: ?=(%site -.href.d) ~[site+path.href.d] + =/ ref=glob-reference glob-reference.href.d + :~ base+base.href.d + ?- -.location.ref + %http [%glob-http url.location.ref hash.ref] + %ames [%glob-ames ship.location.ref hash.ref] + == == == + :: + ++ spit-clause + |= =clause + ^- tape + %+ weld " {(trip -.clause)}+" + ?+ -.clause "'{(trip +.clause)}'" + %color (scow %ux color.clause) + %site (spud path.clause) + :: + %glob-http + "['{(trip url.clause)}' {(scow %uv hash.clause)}]" + :: + %glob-ames + "[{(scow %p ship.clause)} {(scow %uv hash.clause)}]" + :: + %version + =, version.clause + "[{(scow %ud major)} {(scow %ud minor)} {(scow %ud patch)}]" + == + :: + ++ spit-docket + |= dock=docket + ^- tape + ;: welp + ":~\0a" + `tape`(zing (join "\0a" (turn (to-clauses dock) spit-clause))) + "\0a==" + == + -- +:: +++ enjs + =, enjs:format + |% + :: + ++ charge-update + |= u=^charge-update + ^- json + %+ frond -.u + ^- json + ?- -.u + %del-charge s+desk.u + :: + %initial + %- pairs + %+ turn ~(tap by initial.u) + |=([=desk c=^charge] [desk (charge c)]) + :: + %add-charge + %- pairs + :~ desk+s+desk.u + charge+(charge charge.u) + == + == + :: + ++ num + |= a=@u + ^- ^tape + =/ p=json (numb a) + ?> ?=(%n -.p) + (trip p.p) + :: + ++ version + |= v=^version + ^- json + :- %s + %- crip + "{(num major.v)}.{(num minor.v)}.{(num patch.v)}" + :: + ++ merge + |= [a=json b=json] + ^- json + ?> &(?=(%o -.a) ?=(%o -.b)) + [%o (~(uni by p.a) p.b)] + :: + ++ href + |= h=^href + %+ frond -.h + ?- -.h + %site s+(spat path.h) + %glob + %- pairs + :~ base+s+base.h + glob-reference+(glob-reference glob-reference.h) + == + == + :: + ++ glob-reference + |= ref=^glob-reference + %- pairs + :~ hash+s+(scot %uv hash.ref) + location+(glob-location location.ref) + == + :: + ++ glob-location + |= loc=^glob-location + ^- json + %+ frond -.loc + ?- -.loc + %http s+url.loc + %ames s+(scot %p ship.loc) + == + :: + ++ charge + |= c=^charge + %+ merge (docket docket.c) + %- pairs + :~ chad+(chad chad.c) + == + :: + ++ docket + |= d=^docket + ^- json + %- pairs + :~ title+s+title.d + info+s+info.d + color+s+(scot %ux color.d) + href+(href href.d) + image+?~(image.d ~ s+u.image.d) + version+(version version.d) + license+s+license.d + website+s+website.d + == + :: + ++ chad + |= c=^chad + %+ frond -.c + ?+ -.c ~ + %hung s+err.c + == + -- +-- diff --git a/pkg/landscape/lib/gladio.hoon b/pkg/landscape/lib/gladio.hoon new file mode 100644 index 000000000..d352516c3 --- /dev/null +++ b/pkg/landscape/lib/gladio.hoon @@ -0,0 +1,277 @@ +:: Migrate scripts +/- gra=graph-store +/- met=metadata-store +/- grp=group-store +/- i=migrate +/- *group +/+ res=resource +|_ =bowl:gall ++$ card card:agent:gall +:: if false, indicates that OTA should be done in one go, in order to +:: allow for testing on partial testnets +++ split-ota & +++ import-club + |= [=^groups =associations:met =network:gra] + %- ~(gas by *imports:club:i) + %+ murn ~(tap by graphs.network) + |= [=flag:i graph=graph:gra mar=(unit mark)] + ^- (unit [flag:i import:club:i]) + ?. =(mar `%graph-validator-chat) + ~ + ?~ assoc=(~(get by associations) [%graph flag]) + ~& missing-assoc-club/flag + ~ + ?~ group=(~(get by groups) group.u.assoc) + ~& missing-group/[flag group.u.assoc] + ~ + ?. hidden.u.group + ~ + `[flag members.u.group u.assoc graph] +:: +++ import-flags + |= [our=ship =^groups =associations:met =network:gra] + |= =mark + ^- (set flag:i) + %- ~(gas in *(set flag:i)) + %+ skim + ~(tap in ~(key by ((import-for-mark ~ groups associations network) mark))) + |= =flag:i + !=(our p.flag) +:: +++ import-for-mark + |= [her=(unit ship) =^groups =associations:met =network:gra] + |= =mark + ^- imports:graph:i + %- ~(gas by *imports:graph:i) + %+ murn ~(tap by graphs.network) + |= [=flag:i graph=graph:gra mar=(unit ^mark)] + ?. |(=(`p.flag her) =(her ~)) + ~ + ?. =(mar `mark) :: XX: correct detection? + ~ + ?~ assoc=(~(get by associations) [%graph flag]) + ~& missing-assoc/flag^mark + ~ + ?~ group=(~(get by groups) group.u.assoc) + ~& missing-group/[flag group.u.assoc] + ~ + =/ writers=(set ship) + (~(get ju tags.u.group) %graph flag %writers) + ?~ log=(~(get by update-logs.network) flag) + ~& missing-log/flag :: XX: doesn't need to fail, but suspect case + ~ + `[flag writers u.assoc u.log graph] +++ scry + |= [=dude:gall =path] + %- welp + :_ path + /gx/(scot %p our.bowl)/[dude]/(scot %da now.bowl) +++ groups + ~+ .^([@ =^groups *] (scry %group-store /export/noun)) +++ groups-raw + .^(* (scry %group-store /export/noun)) +++ network + ~+ .^([@ =network:gra] (scry %graph-store /export/noun)) +++ network-raw + .^(* (scry %graph-store /export/noun)) +++ associations + ~+ .^([@ =associations:met ~] (scry %metadata-store /export/noun)) +++ my-channels-associations + =/ assoc + .^(associations:met %gx [(scot %p our.bowl) %metadata-store (scot %da now.bowl) %associations %noun ~]) + %- ~(gas by *associations:met) + %+ skim + ~(tap by assoc) + |= [m=md-resource:met [g=resource:res metdat=metadatum:met]] + ?+ config.metdat %.n + [%graph @] + ?& =(| hidden.metdat) + =(name.g name.resource.m) + =(entity.g our.bowl) + !=(%chat module.config.metdat) + == + == +++ associations-raw + .^(* (scry %metadata-store /export/noun)) +++ export + %- jam + ^- * + :~ [%group-store groups-raw] + [%metadata-store associations-raw] + == +++ peers + |= =network:gra + =- (~(del in -) our.bowl) + %- ~(gas in *(set ship)) + (turn ~(tap in ~(key by graphs.network)) head) +++ poke-our + |= [=dude:gall =cage] + [%pass /gladio %agent [our.bowl dude] %poke cage] +++ migrate-start + |= wait=(set ship) + ^- (quip card (set ship)) + =+ network + =+ associations + =+ groups + =/ ships (peers network) + =/ dms (~(get by graphs:network) [our.bowl %dm-inbox]) + =/ import (import-for-mark `our.bowl groups associations network) + =/ clubs (import-club groups associations network) + =/ chats=imports:graph:i + (import %graph-validator-chat) + =/ diarys=imports:graph:i + (import %graph-validator-publish) + =/ links=imports:graph:i + (import %graph-validator-link) + =/ =imports:groups:i + %- ~(gas by *imports:groups:i) + %+ murn ~(tap by groups) + |= [=flag:i =group] + ^- (unit [_flag import:groups:i]) + ?: hidden.group + ~ + ?~ assoc=(~(get by associations) [%groups flag]) + ~& missing-group-assoc/flag + ~ + =/ chans=(map flag:i association:met) + %- ~(gas by *(map flag:i association:met)) + %+ murn ~(tap by associations) + |= [res=md-resource:met ass=association:met] + ^- (unit [flag:i association:met]) + ?. =(group.ass flag) ~ + `[resource.res ass] + =/ roles=(set flag:i) + %- ~(gas in *(set flag:i)) + %+ murn ~(tap by chans) + |= [=flag:i =association:met] + ^- (unit flag:i) + ?^ link=(~(get by links) flag) + ?: =(writers.u.link ~) ~ + `flag + ?^ diary=(~(get by diarys) flag) + ?: =(writers.u.diary ~) ~ + `flag + ?^ chat=(~(get by chats) flag) + ?: =(writers.u.chat ~) ~ + `flag + ~ + `[flag u.assoc chans roles group] + =/ dms (~(get by graphs:network) [our.bowl %dm-inbox]) + =/ flag-importer (import-flags our.bowl groups associations network) + =+ :* chat-flags=(flag-importer %graph-validator-chat) + heap-flags=(flag-importer %graph-validator-link) + diary-flags=(flag-importer %graph-validator-publish) + == + =/ setup=(list card) + %+ welp (migrate-ship our.bowl) + :* (poke-our %groups group-import+!>(imports)) + (poke-our %chat import-flags+!>(chat-flags)) + (poke-our %heap import-flags+!>(heap-flags)) + (poke-our %diary import-flags+!>(diary-flags)) + (poke-our %chat club-imports+!>(clubs)) + ?~ dms ~ + (poke-our %chat dm-imports+!>(p.u.dms))^~ + == + ?. split-ota + :_ ~ + (welp setup (zing (turn ~(tap in (~(del in ships) our.bowl)) migrate-ship))) + [setup (~(uni in ships) wait)] +++ migrate-my-channels + |= wait=(set ship) + ^- (quip card (set ship)) + =+ network + =+ groups + =+ associations + =/ =flag:i [our.bowl %my-channels] + =/ ships (peers network) + =/ import (import-for-mark `our.bowl groups my-channels-associations network) + =/ chats=imports:graph:i + (import %graph-validator-chat) + =/ diarys=imports:graph:i + (import %graph-validator-publish) + =/ links=imports:graph:i + (import %graph-validator-link) + =| assoc=association:met + =/ hoops=imports:groups:i + %- ~(gas by *imports:groups:i) + %+ murn ~(tap by groups) + |= [=flag:i =group] + ^- (unit [_flag import:groups:i]) + =/ nass=(unit association:met) + ?^ (~(get by associations) [%groups flag]) ~ + `assoc(hidden.metadatum |, title.metadatum 'My Channels', creator.metadatum p.flag, group [our.bowl %my-channels]) + ?~ nass ~ + =/ chans=(map flag:i association:met) + %- ~(gas by *(map flag:i association:met)) + %+ murn ~(tap by associations) + |= [res=md-resource:met ass=association:met] + ^- (unit [flag:i association:met]) + ?. =(group.ass flag) ~ + ?. =(entity.group.ass our.bowl) ~ + `[resource.res ass] + =/ roles=(set flag:i) + %- ~(gas in *(set flag:i)) + %+ murn ~(tap by chans) + |= [=flag:i =association:met] + ^- (unit flag:i) + ?. =(group.association flag) ~ + ?. =(entity.group.association our.bowl) ~ + ?^ link=(~(get by links) flag) + ?: =(writers.u.link ~) ~ + `flag + ?^ diary=(~(get by links) flag) + ?: =(writers.u.diary ~) ~ + `flag + ?^ chat=(~(get by chats) flag) + ?: =(writers.u.chat ~) ~ + `flag + ~ + ?~ chans ~ + `[flag u.nass chans roles group] + =/ bigport=import:groups:i + %+ roll ~(val by hoops) + |= [port=import:groups:i newport=import:groups:i] + ^- import:groups:i + :: they should have the same association and group already + :* association.port + (~(uni by chans.port) chans.newport) + (~(uni by roles.port) roles.newport) + group.port + == + ?~ chans.bigport + [~ ~] + =/ mychan-import=imports:groups:i + (~(put by *imports:groups:i) [our.bowl %my-channels] bigport) + :_ ~ + :~ (poke-our %groups group-import+!>(mychan-import)) + (poke-our %chat graph-imports+!>(chats)) + (poke-our %heap graph-imports+!>(links)) + (poke-our %diary graph-imports+!>(diarys)) + == +++ migrate-ship + |= her=ship + ^- (list card) + =+ groups + =+ network + =+ associations + =/ import (import-for-mark `her groups associations network) + =/ chats=imports:graph:i + (import %graph-validator-chat) + =/ diarys=imports:graph:i + (import %graph-validator-publish) + =/ links=imports:graph:i + (import %graph-validator-link) + =/ graph-flags + %. ~(key by links) + =- ~(uni in -) + (~(uni in ~(key by chats)) ~(key by diarys)) + %+ welp + %+ turn ~(tap in graph-flags) + |= =flag:i + ^- card + (poke-our %graph-store migrated+!>(flag)) + :~ (poke-our %chat graph-imports+!>(chats)) + (poke-our %diary graph-imports+!>(diarys)) + (poke-our %heap graph-imports+!>(links)) + == +-- diff --git a/pkg/landscape/lib/graph-store.hoon b/pkg/landscape/lib/graph-store.hoon index df11d0349..d81afb866 100644 --- a/pkg/landscape/lib/graph-store.hoon +++ b/pkg/landscape/lib/graph-store.hoon @@ -528,6 +528,81 @@ :: ++ upgrade |% + ++ is-old-dm |=(r=resource =('dm--' (end [3 4] name.r))) + ++ backup + |= =bowl:gall + |= [r=resource m=marked-graph] + ^- card:agent:gall + =/ pax /(rap 3 'archive-' (scot %p entity.r) '-' name.r ~)/noun + =/ =cage drum-put+!>([pax (jam r m)]) + [%pass /archive %agent [our.bowl %hood] %poke cage] + ++ strip-sigs-graph + |= g=graph + ^+ g + =* loop $ + %+ gas:orm *graph + %+ turn (tap:orm g) + |= [key=@ val=node] :: optional: also strip out deleted messages? + =? children.val ?=(%graph -.children.val) + [%graph loop(g p.children.val)] + :- key + ?. ?=(%& -.post.val) + val + val(signatures.p.post ~) + ++ strip-sigs-log + |= u=update-log + %+ gas:orm-log *update-log + %+ turn (tap:orm-log u) + |= [key=@ upd=logged-update] + :- key + :- p.upd + ?+ -.q.upd q.upd + %add-graph + q.upd(graph (strip-sigs-graph graph.q.upd)) + :: + %add-signatures + q.upd(signatures ~) + :: + %remove-signatures + q.upd(signatures ~) + :: + %add-nodes + %= q.upd + nodes + %- ~(run by nodes.q.upd) + |= =node + ^+ node + %= node + children + ?. ?=(%graph -.children.node) + children.node + [%graph (strip-sigs-graph p.children.node)] + :: + post + ?. ?=(%& -.post.node) + post.node + =. signatures.p.post.node ~ + post.node + == + == + == + :: + ++ nuke-groups + |= =bowl:gall + |^ ^- (list card:agent:gall) + ?. .^(? (gall-scry %u %groups)) + ~ + =+ .^(=desk (gall-scry %d %groups)) + :~ [%pass /nuke %agent [our.bowl %hood] %poke kiln-nuke+!>([desk &])] + [%pass /nuke %agent [our.bowl %docket] %poke docket-uninstall+!>(desk)] + [%pass /nuke %agent [our.bowl %docket] %poke docket-uninstall+!>(%talk)] + == + :: + ++ gall-scry + |= [=care:clay dap=dude:gall] + ^- path + /(cat 3 %g care)/(scot %p our.bowl)/[dap]/(scot %da now.bowl) + -- :: :: +two :: @@ -758,9 +833,9 @@ -- ++ import |= [arc=* our=ship] - ^- (quip card:agent:gall [%6 network]) + ^- (quip card:agent:gall [%7 network]) |^ - =/ sty [%6 (remake-network ;;(tree-network +.arc))] + =/ sty [%7 (remake-network ;;(tree-network +.arc))] :_ sty %+ turn ~(tap by graphs.sty) |= [rid=resource =marked-graph] diff --git a/pkg/landscape/lib/hark-store.hoon b/pkg/landscape/lib/hark-store.hoon deleted file mode 120000 index 9e9e81ee2..000000000 --- a/pkg/landscape/lib/hark-store.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/hark-store.hoon \ No newline at end of file diff --git a/pkg/landscape/lib/hark-store.hoon b/pkg/landscape/lib/hark-store.hoon new file mode 100644 index 000000000..23af6a64d --- /dev/null +++ b/pkg/landscape/lib/hark-store.hoon @@ -0,0 +1,255 @@ +/- sur=hark-store +^? +=, sur +=< [. sur] +|% + +++ enjs + =, enjs:format + |% + ++ update + |= upd=^update + ^- json + %+ frond -.upd + ?+ -.upd a+~ + %added (notification +.upd) + %add-note (add-note +.upd) + %timebox (timebox +.upd) + %more (more +.upd) + %read-each (read-each +.upd) + %read-count (place +.upd) + %unread-each (read-each +.upd) + %unread-count (unread-count +.upd) + %saw-place (saw-place +.upd) + %all-stats (all-stats +.upd) + %del-place (place +.upd) + ::%read-note (index +.upd) + ::%note-read (note-read +.upd) + %archived (archived +.upd) + == + :: + ++ add-note + |= [bi=^bin bo=^body] + %- pairs + :~ bin+(bin bi) + body+(body bo) + == + :: + ++ saw-place + |= [p=^place t=(unit ^time)] + %- pairs + :~ place+(place p) + time+?~(t ~ (time u.t)) + == + :: + ++ archived + |= [t=^time l=^lid n=^notification] + %- pairs + :~ lid+(lid l) + time+s+(scot %ud t) + notification+(notification n) + == + :: + ++ note-read + |= * + (pairs ~) + :: + ++ all-stats + |= places=(map ^place ^stats) + ^- json + :- %a + ^- (list json) + %+ turn ~(tap by places) + |= [p=^place s=^stats] + %- pairs + :~ stats+(stats s) + place+(place p) + + == + :: + ++ stats + |= s=^stats + ^- json + %- pairs + :~ each+a+(turn ~(tap in each.s) (cork spat (lead %s))) + last+(time last.s) + count+(numb count.s) + == + ++ more + |= upds=(list ^update) + ^- json + a+(turn upds update) + :: + ++ place + |= =^place + %- pairs + :~ desk+s+desk.place + path+s+(spat path.place) + == + :: + ++ bin + |= =^bin + %- pairs + :~ place+(place place.bin) + path+s+(spat path.bin) + == + ++ notification + |= ^notification + ^- json + %- pairs + :~ time+(time date) + bin+(^bin bin) + body+(bodies body) + == + ++ bodies + |= bs=(list ^body) + ^- json + a+(turn bs body) + :: + ++ contents + |= cs=(list ^content) + ^- json + a+(turn cs content) + :: + ++ content + |= c=^content + ^- json + %+ frond -.c + ?- -.c + %ship s+(scot %p ship.c) + %text s+cord.c + == + :: + ++ body + |= ^body + ^- json + %- pairs + :~ title+(contents title) + content+(contents content) + time+(^time time) + link+s+(spat link) + == + :: + ++ binned-notification + |= [=^bin =^notification] + %- pairs + :~ bin+(^bin bin) + notification+(^notification notification) + == + ++ lid + |= l=^lid + ^- json + %+ frond -.l + ?- -.l + ?(%seen %unseen) ~ + %archive s+(scot %ud time.l) + == + :: + ++ timebox + |= [li=^lid l=(list ^notification)] + ^- json + %- pairs + :~ lid+(lid li) + notifications+a+(turn l notification) + == + :: + ++ read-each + |= [p=^place pax=^path] + %- pairs + :~ place+(place p) + path+(path pax) + == + :: + ++ unread-count + |= [p=^place inc=? count=@ud] + %- pairs + :~ place+(place p) + inc+b+inc + count+(numb count) + == + -- +++ dejs + =, dejs:format + |% + ++ ship (su ;~(pfix sig fed:ag)) + :: TODO: fix +stab + :: + ++ pa + |= j=json + ^- path + ?> ?=(%s -.j) + ?: =('/' p.j) / + (stab p.j) + :: + ++ place + %- ot + :~ desk+so + path+pa + == + :: + ++ bin + %- ot + :~ path+pa + place+place + == + :: + ++ read-each + %- ot + :~ place+place + path+pa + == + :: + :: parse date as @ud + :: TODO: move to zuse + ++ sd + |= jon=json + ^- @da + ?> ?=(%s -.jon) + `@da`(rash p.jon dem:ag) + :: + ++ lid + %- of + :~ archive+sd + unseen+ul + seen+ul + == + :: + ++ archive + %- ot + :~ lid+lid + bin+bin + == + ++ content + %- of + :~ text+so + ship+ship + == + :: + ++ body + %- ot + :~ title+(ar content) + content+(ar content) + time+di + binned+pa + link+pa + == + :: + ++ add-note + %- ot + :~ bin+bin + body+body + == + :: + ++ action + ^- $-(json ^action) + %- of + :~ archive-all+ul + archive+archive + opened+ul + read-count+place + read-each+read-each + read-note+bin + add-note+add-note + == + -- +-- diff --git a/pkg/landscape/lib/mip.hoon b/pkg/landscape/lib/mip.hoon deleted file mode 120000 index 47b46482a..000000000 --- a/pkg/landscape/lib/mip.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/mip.hoon \ No newline at end of file diff --git a/pkg/landscape/lib/mip.hoon b/pkg/landscape/lib/mip.hoon new file mode 100644 index 000000000..322a4c85f --- /dev/null +++ b/pkg/landscape/lib/mip.hoon @@ -0,0 +1,55 @@ +|% +++ mip :: map of maps + |$ [kex key value] + (map kex (map key value)) +:: +++ bi :: mip engine + =| a=(map * (map)) + |@ + ++ del + |* [b=* c=*] + =+ d=(~(gut by a) b ~) + =+ e=(~(del by d) c) + ?~ e + (~(del by a) b) + (~(put by a) b e) + :: + ++ get + |* [b=* c=*] + => .(b `_?>(?=(^ a) p.n.a)`b, c `_?>(?=(^ a) ?>(?=(^ q.n.a) p.n.q.n.a))`c) + ^- (unit _?>(?=(^ a) ?>(?=(^ q.n.a) q.n.q.n.a))) + (~(get by (~(gut by a) b ~)) c) + :: + ++ got + |* [b=* c=*] + (need (get b c)) + :: + ++ gut + |* [b=* c=* d=*] + (~(gut by (~(gut by a) b ~)) c d) + :: + ++ has + |* [b=* c=*] + !=(~ (get b c)) + :: + ++ key + |* b=* + ~(key by (~(gut by a) b ~)) + :: + ++ put + |* [b=* c=* d=*] + %+ ~(put by a) b + %. [c d] + %~ put by + (~(gut by a) b ~) + :: + ++ tap + ::NOTE naive turn-based implementation find-errors ): + =< $ + =+ b=`_?>(?=(^ a) *(list [x=_p.n.a _?>(?=(^ q.n.a) [y=p v=q]:n.q.n.a)]))`~ + |. ^+ b + ?~ a + b + $(a r.a, b (welp (turn ~(tap by q.n.a) (lead p.n.a)) $(a l.a))) + -- +-- diff --git a/pkg/landscape/lib/s3-json.hoon b/pkg/landscape/lib/s3-json.hoon index e4a531daa..04cf848b9 100644 --- a/pkg/landscape/lib/s3-json.hoon +++ b/pkg/landscape/lib/s3-json.hoon @@ -10,6 +10,7 @@ :~ [%set-endpoint so:dejs] [%set-access-key-id so:dejs] [%set-secret-access-key so:dejs] + [%set-region so:dejs] [%add-bucket so:dejs] [%remove-bucket so:dejs] [%set-current-bucket so:dejs] @@ -25,6 +26,7 @@ :~ ?- -.upd %set-current-bucket [%'setCurrentBucket' s+bucket.upd] %add-bucket [%'addBucket' s+bucket.upd] + %set-region [%'setRegion' s+region.upd] %remove-bucket [%'removeBucket' s+bucket.upd] %set-endpoint [%'setEndpoint' s+endpoint.upd] %set-access-key-id [%'setAccessKeyId' s+access-key-id.upd] @@ -44,6 +46,7 @@ %- pairs:enjs :~ [%buckets a+(turn ~(tap in buckets.configuration.upd) |=(a=@t s+a))] [%'currentBucket' s+current-bucket.configuration.upd] + [%'region' s+region.configuration.upd] == == == diff --git a/pkg/landscape/mar/docket-0.hoon b/pkg/landscape/mar/docket-0.hoon deleted file mode 120000 index 2bb549dd9..000000000 --- a/pkg/landscape/mar/docket-0.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/mar/docket-0.hoon \ No newline at end of file diff --git a/pkg/landscape/mar/docket-0.hoon b/pkg/landscape/mar/docket-0.hoon new file mode 100644 index 000000000..911d34c0d --- /dev/null +++ b/pkg/landscape/mar/docket-0.hoon @@ -0,0 +1,25 @@ +/+ dock=docket +|_ =docket:dock +++ grow + |% + ++ mime + ^- ^mime + [/text/x-docket (as-octt:mimes:html (spit-docket:mime:dock docket))] + ++ noun docket + ++ json (docket:enjs:dock docket) + -- +++ grab + |% + :: + ++ mime + |= [=mite len=@ud tex=@] + ^- docket:dock + %- need + %- from-clauses:mime:dock + !<((list clause:dock) (slap !>(~) (ream tex))) + + :: + ++ noun docket:dock + -- +++ grad %noun +-- diff --git a/pkg/landscape/sur/docket.hoon b/pkg/landscape/sur/docket.hoon deleted file mode 120000 index e13676adb..000000000 --- a/pkg/landscape/sur/docket.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/docket.hoon \ No newline at end of file diff --git a/pkg/landscape/sur/docket.hoon b/pkg/landscape/sur/docket.hoon new file mode 100644 index 000000000..091c8c9f9 --- /dev/null +++ b/pkg/landscape/sur/docket.hoon @@ -0,0 +1,82 @@ +|% +:: ++$ version + [major=@ud minor=@ud patch=@ud] +:: ++$ glob (map path mime) +:: ++$ url cord +:: $glob-location: How to retrieve a glob +:: ++$ glob-reference + [hash=@uvH location=glob-location] +:: ++$ glob-location + $% [%http =url] + [%ames =ship] + == +:: $href: Where a tile links to +:: ++$ href + $% [%glob base=term =glob-reference] + [%site =path] + == +:: $chad: State of a docket +:: ++$ chad + $~ [%install ~] + $% :: Done + [%glob =glob] + [%site ~] + :: Waiting + [%install ~] + [%suspend glob=(unit glob)] + :: Error + [%hung err=cord] + == +:: +:: $charge: A realized $docket +:: ++$ charge + $: =docket + =chad + == +:: +:: $clause: A key and value, as part of a docket +:: +:: Only used to parse $docket +:: ++$ clause + $% [%title title=@t] + [%info info=@t] + [%color color=@ux] + [%glob-http url=cord hash=@uvH] + [%glob-ames =ship hash=@uvH] + [%image =url] + [%site =path] + [%base base=term] + [%version =version] + [%website website=url] + [%license license=cord] + == +:: +:: $docket: A description of JS bundles for a desk +:: ++$ docket + $: %1 + title=@t + info=@t + color=@ux + =href + image=(unit url) + =version + website=url + license=cord + == +:: ++$ charge-update + $% [%initial initial=(map desk charge)] + [%add-charge =desk =charge] + [%del-charge =desk] + == +-- diff --git a/pkg/landscape/sur/hark-store.hoon b/pkg/landscape/sur/hark-store.hoon deleted file mode 120000 index 5d606e793..000000000 --- a/pkg/landscape/sur/hark-store.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/hark-store.hoon \ No newline at end of file diff --git a/pkg/landscape/sur/hark-store.hoon b/pkg/landscape/sur/hark-store.hoon new file mode 100644 index 000000000..457839309 --- /dev/null +++ b/pkg/landscape/sur/hark-store.hoon @@ -0,0 +1,159 @@ +^? +:: +:: %hark-store: Notification, unreads store +:: +:: Timeboxing & binning: +:: +:: Unread notifications accumulate in $unreads. They are grouped by +:: their $bin. A notification may become read by either: +:: a) being read by a %read-count or %read-each or %read-note +:: b) being read by a %seen +:: +:: If a) then we insert the corresponding bin into $reads at the +:: current timestamp +:: If b) then we empty $unreads and move all bins to $reads at the +:: current timestamp +:: +:: Unread tracking: +:: Unread tracking has two 'modes' which may be used concurrently, +:: if necessary. +:: +:: count: +:: This stores the unreads as a simple atom, describing the number +:: of unread items. May be increased with %unread-count and +:: set to zero with %read-count. Ideal for high-frequency linear +:: datastructures, e.g. chat +:: each: +:: This stores the unreads as a set of paths, describing the set of +:: unread items. Unreads may be added to the set with %unread-each +:: and removed with %read-each. Ideal for non-linear, low-frequency +:: datastructures, e.g. blogs +:: +|% +:: $place: A location, under which landscape stores stats +:: +:: .desk must match q.byk.bowl +:: Examples: +:: A chat: +:: [%landscape /~dopzod/urbit-help] +:: A note in a notebook: +:: [%landscape /~darrux-landes/feature-requests/12374893234232] +:: A group: +:: [%hark-group-hook /~bitbet-bolbel/urbit-community] +:: Comments on a link +:: [%landscape /~dabben-larbet/urbit-in-the-news/17014118450499614194868/2] +:: ++$ place [=desk =path] +:: +:: $bin: Identifier for grouping notifications +:: +:: Examples +:: A mention in a chat: +:: [/mention %landscape /~dopzod/urbit-help] +:: New messages in a chat +:: [/message %landscape /~dopzod/urbit-help] +:: A new comment in a notebook: +:: [/comment %landscape /~darrux-landes/feature-requests/12374893234232/2] +:: ++$ bin [=path =place] +:: +:: $lid: Reference to a timebox +:: ++$ lid + $% [%archive =time] + [%seen ~] + [%unseen ~] + == +:: $content: Notification content ++$ content + $% [%ship =ship] + [%text =cord] + == +:: +:: $body: A notification body +:: ++$ body + $: title=(list content) + content=(list content) + =time + binned=path + link=path + == +:: ++$ notification + [date=@da =bin body=(list body)] +:: $timebox: Group of notificatons ++$ timebox + (map bin notification) +:: $archive: Archived notifications, ordered by time ++$ archive + ((mop @da timebox) gth) +:: ++$ action + $% :: hook actions + :: + :: %add-note: add a notification + [%add-note =bin =body] + :: + :: %del-place: Underlying resource disappeared, remove all + :: associated notifications + [%del-place =place] + :: %unread-count: Change unread count by .count + [%unread-count =place inc=? count=@ud] + :: %unread-each: Add .path to list of unreads for .place + [%unread-each =place =path] + :: %saw-place: Update last-updated for .place to now.bowl + [%saw-place =place time=(unit time)] + :: store actions + :: + :: %archive: archive single notification + :: if .time is ~, then archiving unread notification + :: else, archiving read notification + [%archive =lid =bin] + :: %read-count: set unread count to zero + [%read-count =place] + :: %read-each: remove path from unreads for .place + [%read-each =place =path] + :: %read-note: Read note at .bin + [%read-note =bin] + :: %archive-all: Archive all notifications + [%archive-all ~] + :: %opened: User opened notifications, reset timeboxing logic. + :: + [%opened ~] + :: + :: XX: previously in hark-store, now deprecated + :: the hooks responsible for creating notifications may offer pokes + :: similar to this + :: [%read-graph =resource] + :: [%read-group =resource] + :: [%remove-graph =resource] + :: + == +:: .stats: Statistics for a .place +:: ++$ stats + $: count=@ud + each=(set path) + last=@da + timebox=(unit @da) + == +:: ++$ update + $% action + :: %more: more updates + [%archived =time =lid =notification] + [%more more=(list update)] + :: %note-read: note has been read with timestamp + [%note-read =time =bin] + [%added =notification] + :: %timebox: description of timebox. + :: + [%timebox =lid =(list notification)] + :: %place-stats: description of .stats for a .place + [%place-stats =place =stats] + :: %place-stats: stats for all .places + [%all-stats places=(map place stats)] + == +-- + diff --git a/pkg/landscape/sur/migrate.hoon b/pkg/landscape/sur/migrate.hoon new file mode 100644 index 000000000..3bf567298 --- /dev/null +++ b/pkg/landscape/sur/migrate.hoon @@ -0,0 +1,23 @@ +/- met=metadata-store, gra=graph-store +/- *group +|% ++$ flag (pair ship term) +++ graph + |% + +$ import + [writers=(set ship) =association:met =update-log:gra =graph:gra] + +$ imports (map flag import) + -- +:: +++ groups + |% + +$ import [=association:met chans=(map flag =association:met) roles=(set flag) =group] + +$ imports (map flag import) + -- +++ club + |% + +$ import [ships=(set ship) =association:met =graph:gra] + +$ imports (map flag import) + -- +-- + diff --git a/pkg/landscape/sur/s3-0.hoon b/pkg/landscape/sur/s3-0.hoon new file mode 100644 index 000000000..4f0ca04cb --- /dev/null +++ b/pkg/landscape/sur/s3-0.hoon @@ -0,0 +1,27 @@ +|% ++$ credentials + $: endpoint=@t + access-key-id=@t + secret-access-key=@t + == +:: ++$ configuration + $: buckets=(set @t) + current-bucket=@t + == +:: ++$ action + $% [%set-endpoint endpoint=@t] + [%set-access-key-id access-key-id=@t] + [%set-secret-access-key secret-access-key=@t] + [%add-bucket bucket=@t] + [%remove-bucket bucket=@t] + [%set-current-bucket bucket=@t] + == +:: ++$ update + $% [%credentials =credentials] + [%configuration =configuration] + action + == +-- diff --git a/pkg/landscape/sur/s3.hoon b/pkg/landscape/sur/s3.hoon index 4f0ca04cb..a79ca68ce 100644 --- a/pkg/landscape/sur/s3.hoon +++ b/pkg/landscape/sur/s3.hoon @@ -1,4 +1,9 @@ +/- zer=s3-0 |% +++ past + |% + ++ zero zer + -- +$ credentials $: endpoint=@t access-key-id=@t @@ -8,6 +13,7 @@ +$ configuration $: buckets=(set @t) current-bucket=@t + region=@t == :: +$ action @@ -17,6 +23,7 @@ [%add-bucket bucket=@t] [%remove-bucket bucket=@t] [%set-current-bucket bucket=@t] + [%set-region region=@t] == :: +$ update diff --git a/pkg/landscape/sur/settings.hoon b/pkg/landscape/sur/settings.hoon deleted file mode 120000 index c2c70beef..000000000 --- a/pkg/landscape/sur/settings.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/settings.hoon \ No newline at end of file diff --git a/pkg/landscape/sur/settings.hoon b/pkg/landscape/sur/settings.hoon new file mode 100644 index 000000000..53e8691db --- /dev/null +++ b/pkg/landscape/sur/settings.hoon @@ -0,0 +1,44 @@ +/+ *mip +|% +:: +++ settings-0 + =< settings + |% + +$ settings (map key bucket) + +$ bucket (map key val) + +$ val + $% [%s p=@t] + [%b p=?] + [%n p=@] + == + -- +:: +++ settings-1 + =< settings + |% + +$ settings (map key bucket) + -- ++$ bucket (map key val) ++$ key term ++$ val + $~ [%n 0] + $% [%s p=@t] + [%b p=?] + [%n p=@] + [%a p=(list val)] + == +:: ++$ settings (mip desk key bucket) ++$ event + $% [%put-bucket =desk =key =bucket] + [%del-bucket =desk =key] + [%put-entry =desk buc=key =key =val] + [%del-entry =desk buc=key =key] + == ++$ data + $% [%all =settings] + [%bucket =bucket] + [%desk desk=(map key bucket)] + [%entry =val] + == +-- diff --git a/pkg/landscape/sys.kelvin b/pkg/landscape/sys.kelvin index e77a3de08..ea744fdf1 100644 --- a/pkg/landscape/sys.kelvin +++ b/pkg/landscape/sys.kelvin @@ -1 +1,2 @@ -[%zuse 418] +[%zuse 416] +[%zuse 415] diff --git a/pkg/landscape/ted/graph/create.hoon b/pkg/landscape/ted/graph/create.hoon index 3ec7905e5..3d758b1dd 100644 --- a/pkg/landscape/ted/graph/create.hoon +++ b/pkg/landscape/ted/graph/create.hoon @@ -35,6 +35,8 @@ (poke-our %group-store group-update-0+!>([%add-members rid (sy our.bowl ~)])) ;< ~ bind:m (poke-our %group-push-hook push-hook-act) + ;< ~ bind:m + (poke-our %hark-graph-hook hark-graph-hook-action+!>([%listen rid /])) (pure:m rid) -- :: diff --git a/pkg/landscape/ted/graph/recover-archive.hoon b/pkg/landscape/ted/graph/recover-archive.hoon new file mode 100644 index 000000000..455ee9feb --- /dev/null +++ b/pkg/landscape/ted/graph/recover-archive.hoon @@ -0,0 +1,19 @@ +/- spider, graph=graph-store, met=metadata-store, *group, group-store, push-hook +/+ strandio, resource, graph-view +=> +|% +++ strand strand:spider +++ poke poke:strandio +++ poke-our poke-our:strandio +-- +=, strand=strand:spider +^- thread:spider +|= arg=vase +=/ m (strand ,vase) +^- form:m +=+ !<([~ pax=path] arg) +;< =bowl:spider bind:m get-bowl:strandio +=+ .^([rid=resource mar=marked-graph:graph] %cx pax) +;< ~ bind:m + (poke-our:strandio %graph-store %graph-update-3 !>([now.bowl %add-graph p.mar q.mar &])) +(pure:m *vase) diff --git a/pkg/landscape/ted/group/leave.hoon b/pkg/landscape/ted/group/leave.hoon index f4968e077..5b4d314d5 100644 --- a/pkg/landscape/ted/group/leave.hoon +++ b/pkg/landscape/ted/group/leave.hoon @@ -38,4 +38,6 @@ (raw-poke-our %contact-pull-hook pull-hook-act) ;< ~ bind:m (raw-poke-our %group-store remove) +;< ~ bind:m + (raw-poke-our %group-view group-view-action+!>([%done rid])) (pure:m !>(~)) diff --git a/pkg/landscape/ted/keep.hoon b/pkg/landscape/ted/keep.hoon new file mode 100644 index 000000000..3eb758cae --- /dev/null +++ b/pkg/landscape/ted/keep.hoon @@ -0,0 +1,14 @@ +/- spider, docket +/+ strandio +=, strand=strand:spider +^- thread:spider +|= arg=vase +=/ m (strand ,vase) +^- form:m +=+ !<(jim=@ arg) +;< =bowl:spider bind:m get-bowl:strandio +=/ home=path /(scot %p our.bowl)/[q.byk.bowl]/(scot %da now.bowl) +=/ =path /(cat 3 'backup-' (scot %da now.bowl))/noun + :: XX remove prints +;< ~ bind:m (poke-our:strandio %hood drum-put+!>([path jim])) +(pure:m *vase) diff --git a/pkg/landscape/ted/migrate.hoon b/pkg/landscape/ted/migrate.hoon new file mode 100644 index 000000000..ab92d379f --- /dev/null +++ b/pkg/landscape/ted/migrate.hoon @@ -0,0 +1,91 @@ +:: Migrate scripts +/- spider +/- gra=graph-store +/- met=metadata-store +/- grp=group-store +/- i=migrate +/- *group +/+ strandio +=, strand=strand:spider +|% +++ import-for-mark + |= [=groups =associations:met =network:gra] + |= =mark + ^- imports:graph:i + %- ~(gas by *imports:graph:i) + %+ murn ~(tap by graphs.network) + |= [=flag:i graph=graph:gra mar=(unit ^mark)] + ?. =(mar `mark) :: XX: correct detection? + ~ + ?~ assoc=(~(get by associations) [%graph flag]) + ~& missing-assoc/flag^mark + ~ + ?~ group=(~(get by groups) group.u.assoc) + ~& missing-group/[flag group.u.assoc] + ~ + =/ writers=(set ship) + (~(get ju tags.u.group) %graph flag %writers) + ?~ log=(~(get by update-logs.network) flag) + ~& missing-log/flag :: XX: doesn't need to fail, but suspect case + ~ + `[flag writers u.assoc u.log graph] +:: +-- +^- thread:spider +|= arg=vase +=/ m (strand ,vase) +^- form:m +;< =bowl:spider bind:m get-bowl:strandio +;< [%2 =groups] bind:m + (scry:strandio ,[%2 =groups] /gx/group-store/export/noun) +;< [%6 =network:gra] bind:m + (scry:strandio ,[%6 =network:gra] /gx/graph-store/export/noun) +;< =associations:met bind:m + (scry:strandio ,associations:met /gx/metadata-store/associations/noun) +=/ import (import-for-mark groups associations network) +=/ chats=imports:graph:i + (import %graph-validator-chat) +=/ diarys=imports:graph:i + (import %graph-validator-publish) +=/ links=imports:graph:i + (import %graph-validator-link) +=/ =imports:groups:i + %- ~(gas by *imports:groups:i) + %+ murn ~(tap by groups) + |= [=flag:i =group] + ^- (unit [_flag import:groups:i]) + ?~ assoc=(~(get by associations) [%groups flag]) + ~& missing-group-assoc/flag + ~ + =/ chans=(map flag:i association:met) + %- ~(gas by *(map flag:i association:met)) + %+ murn ~(tap by associations) + |= [res=md-resource:met ass=association:met] + ^- (unit [flag:i association:met]) + ?. =(group.ass flag) ~ + `[resource.res ass] + =/ roles=(set flag:i) + %- ~(gas in *(set flag:i)) + %+ murn ~(tap by chans) + |= [=flag:i =association:met] + ^- (unit flag:i) + ?^ link=(~(get by links) flag) + ?: =(writers.u.link ~) ~ + `flag + ?^ diary=(~(get by diarys) flag) + ?: =(writers.u.diary ~) ~ + `flag + ?^ chat=(~(get by chats) flag) + ?: =(writers.u.chat ~) ~ + `flag + ~ + `[flag u.assoc chans roles group] +;< ~ bind:m (poke-our:strandio %groups group-import+!>(imports)) +;< ~ bind:m (poke-our:strandio %chat graph-imports+!>(chats)) +;< ~ bind:m (poke-our:strandio %diary graph-imports+!>(diarys)) +;< ~ bind:m (poke-our:strandio %heap graph-imports+!>(links)) +;< ~ bind:m + ?~ dms=(~(get by graphs.network) [our.bowl %dm-inbox]) + (pure:(strand ,~) ~) + (poke-our:strandio %chat %dm-imports !>(p.u.dms)) +(pure:m *vase) diff --git a/pkg/npm/README.md b/pkg/npm/README.md deleted file mode 100644 index ba1f6d01a..000000000 --- a/pkg/npm/README.md +++ /dev/null @@ -1 +0,0 @@ -Each one of the folders in this directory is published at `@urbit/{folder name}` \ No newline at end of file diff --git a/pkg/npm/api/.babelrc b/pkg/npm/api/.babelrc deleted file mode 100644 index 159540837..000000000 --- a/pkg/npm/api/.babelrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "presets": [ - [ - "@babel/preset-env", - { - "targets": "> 1%", - "useBuiltIns": "usage", - "corejs": "3.19.1" - } - ] - ] -} \ No newline at end of file diff --git a/pkg/npm/api/.eslintrc.js b/pkg/npm/api/.eslintrc.js deleted file mode 100644 index ad4f8c0c9..000000000 --- a/pkg/npm/api/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@urbit' -}; diff --git a/pkg/npm/api/.gitignore b/pkg/npm/api/.gitignore deleted file mode 100644 index 1c2f433de..000000000 --- a/pkg/npm/api/.gitignore +++ /dev/null @@ -1 +0,0 @@ -tmp \ No newline at end of file diff --git a/pkg/npm/api/README.md b/pkg/npm/api/README.md deleted file mode 100644 index c8381a52d..000000000 --- a/pkg/npm/api/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Urbit API in JavaScript - -This package simplifies the process of working with Urbit's APIs into fluent, typed functions organized by app. Pairs well with `@urbit/http-api`. Compare: - -Without: -```ts -import UrbitInterface from '@urbit/http-api'; -const api: UrbitInterface = useApi(); -api.poke({ - app: 'settings-store', - mark: 'settings-event', - json: { - 'put-entry': { - 'bucket-key': bucket, - 'entry-key': key, - 'value': value - } - } -}); -``` - -With: -```ts -import UrbitInterface from '@urbit/http-api'; -import { settings } from '@urbit/api'; -const api: UrbitInterface = useApi(); -api.poke(setings.putEntry(bucket, key, value)); -``` - -You may import single functions -```ts -import { putEntry } from '@urbit/api'; -``` -or whole apps: -```ts -import { settings } from '@urbit/api'; -``` - -This package also provides types and utilities for working with Urbit's internal data structures, such as Nouns, Das, Tas, and so forth. - -This package was originally developed as part of Tlon's Landscape client and therefore the best reference material exists [there](https://github.com/urbit/urbit/tree/master/pkg/interface/src). \ No newline at end of file diff --git a/pkg/npm/api/contacts/index.ts b/pkg/npm/api/contacts/index.ts deleted file mode 100644 index 341e81711..000000000 --- a/pkg/npm/api/contacts/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/pkg/npm/api/contacts/lib.ts b/pkg/npm/api/contacts/lib.ts deleted file mode 100644 index 26b08c6b4..000000000 --- a/pkg/npm/api/contacts/lib.ts +++ /dev/null @@ -1,109 +0,0 @@ - -import { Patp, Poke, Scry } from '../lib'; -import { - Contact, - ContactUpdateAdd, - ContactUpdateEdit, - ContactUpdateRemove, - ContactEditField, - ContactShare, - ContactUpdate, - ContactUpdateAllowShips, - ContactUpdateAllowGroup, - ContactUpdateSetPublic -} from './types'; - -export const CONTACT_UPDATE_VERSION = 0; - -const storeAction = (data: T, version: number = CONTACT_UPDATE_VERSION): Poke => ({ - app: 'contact-store', - mark: `contact-update-${version}`, - json: data -}); - -export { storeAction as contactStoreAction }; - -export const addContact = (ship: Patp, contact: Contact): Poke => { - contact['last-updated'] = Date.now(); - - return storeAction({ - add: { ship, contact } - }); -}; - -export const removeContact = (ship: Patp): Poke => - storeAction({ - remove: { ship } - }); - -export const share = (recipient: Patp, version: number = CONTACT_UPDATE_VERSION): Poke => ({ - app: 'contact-push-hook', - mark: 'contact-share', - json: { share: recipient } -}); - -export const editContact = ( - ship: Patp, - editField: ContactEditField -): Poke => - storeAction({ - edit: { - ship, - 'edit-field': editField, - timestamp: Date.now() - } - }); - -export const allowShips = ( - ships: Patp[] -): Poke => storeAction({ - allow: { - ships - } -}); - -export const allowGroup = ( - ship: string, - name: string -): Poke => storeAction({ - allow: { - group: { ship, name } - } -}); - -export const setPublic = ( - setPublic: any -): Poke => { - return storeAction({ - 'set-public': setPublic - }); -}; - -export const retrieve = ( - ship: string -) => { - const resource = { ship, name: '' }; - return { - app: 'contact-pull-hook', - mark: 'pull-hook-action', - json: { - add: { - resource, - ship - } - } - }; -}; - -export const fetchIsAllowed = ( - entity: string, - name: string, - ship: string, - personal: boolean -): Scry => { - const isPersonal = personal ? 'true' : 'false'; - return { - app: 'contact-store', - path: `/is-allowed/${entity}/${name}/${ship}/${isPersonal}` - }; -}; diff --git a/pkg/npm/api/contacts/types.ts b/pkg/npm/api/contacts/types.ts deleted file mode 100644 index 201aa243b..000000000 --- a/pkg/npm/api/contacts/types.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Path, Patp } from '../lib'; -import { Resource } from '../groups'; - -export type ContactUpdate = - | ContactUpdateAdd - | ContactUpdateRemove - | ContactUpdateEdit - | ContactUpdateInitial - | ContactUpdateAllowGroup - | ContactUpdateAllowShips - | ContactUpdateSetPublic; - - export interface ContactUpdateAdd { - add: { - ship: Patp; - contact: Contact; - }; -} - -export interface ContactUpdateRemove { - remove: { - ship: Patp; - }; -} - -export interface ContactUpdateEdit { - edit: { - ship: Patp; - 'edit-field': ContactEditField; - timestamp: number; - }; -} - -export interface ContactUpdateAllowShips { - allow: { - ships: Patp[]; - } -} - -export interface ContactUpdateAllowGroup { - allow: { - group: Resource; - } -} - -export interface ContactUpdateSetPublic { - 'set-public': boolean; -} - -export interface ContactShare { - share: Patp; -} - -export interface ContactUpdateInitial { - initial: Rolodex; -} - -export type Rolodex = { - [p in Patp]: Contact; -}; - -export type Contacts = Rolodex; - -export interface Contact { - nickname: string; - bio: string; - status: string; - color: string; - avatar: string | null; - cover: string | null; - groups: Path[]; - 'last-updated': number; -} - -type ContactKeys = keyof Contact; - -export type ContactEditFieldPrim = Exclude; - -export type ContactEditField = Partial> & { - 'add-group'?: Resource; - 'remove-group'?: Resource; -}; diff --git a/pkg/npm/api/deps.d.ts b/pkg/npm/api/deps.d.ts deleted file mode 100644 index 0099f33f0..000000000 --- a/pkg/npm/api/deps.d.ts +++ /dev/null @@ -1,8 +0,0 @@ - -declare module 'urbit-ob' { - - /** - * Convert a @p-encoded string to a decimal-encoded string. - */ - function patp2dec(name: string): string -} diff --git a/pkg/npm/api/docket/index.ts b/pkg/npm/api/docket/index.ts deleted file mode 100644 index e06143cf1..000000000 --- a/pkg/npm/api/docket/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib'; -export * from './types'; diff --git a/pkg/npm/api/docket/lib.ts b/pkg/npm/api/docket/lib.ts deleted file mode 100644 index f5c3e255e..000000000 --- a/pkg/npm/api/docket/lib.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Poke, Scry } from '../lib'; -import { Chad } from './types'; - -export function chadIsRunning(chad: Chad) { - return 'glob' in chad || 'site' in chad; -} - -export const scryCharges: Scry = { - app: 'docket', - path: '/charges' -}; - -export const scryDockets: Scry = { - app: 'docket', - path: '/dockets' -}; - -export const scryTreaties: Scry = { - app: 'treaty', - path: '/treaties' -}; - -export const scryDefaultAlly: Scry = { - app: 'treaty', - path: '/default-ally' -}; - -export const scryAllies: Scry = { - app: 'treaty', - path: '/allies' -}; - -export const scryAllyTreaties = (ship: string): Scry => ({ - app: 'treaty', - path: `/treaties/${ship}` -}); - -/** - * Uninstall a desk, and remove docket - */ -export function docketUninstall(desk: string): Poke { - return { - app: 'docket', - mark: 'docket-uninstall', - json: desk - }; -} - -export function docketInstall(ship: string, desk: string): Poke { - return { - app: 'docket', - mark: 'docket-install', - json: `${ship}/${desk}` - }; -} - -export function allyShip(ship: string): Poke { - return { - app: 'treaty', - mark: 'ally-update-0', - json: { - add: ship - } - }; -} diff --git a/pkg/npm/api/docket/types.ts b/pkg/npm/api/docket/types.ts deleted file mode 100644 index c35399b5b..000000000 --- a/pkg/npm/api/docket/types.ts +++ /dev/null @@ -1,135 +0,0 @@ -import { Cass } from '../hood'; -export type DeskStatus = 'active' | 'suspended'; - -export type DocketHref = DocketHrefSite | DocketHrefGlob; - -export interface DocketHrefGlob { - glob: { - base: string; - - } -} - -export interface DocketHrefSite { - site: string; -} - -export interface Docket { - title: string; - info?: string; - color: string; - href: DocketHref; - website: string; - license: string; - version: string; - image?: string; -} - -export interface Charge extends Docket { - chad: Chad; -} - -export type Chad = HungChad | GlobChad | SiteChad | InstallChad | SuspendChad; - -export interface HungChad { - hung: string; -} - -export interface GlobChad { - glob: null; -} -export interface SiteChad { - site: null; -} -export interface InstallChad { - install: null; - -} -export interface SuspendChad { - suspend: null; -} - -export interface Treaty extends Docket { - ship: string; - desk: string; - cass: Cass; - hash: string; -} - -export interface Charges { - [desk: string]: Charge; -} - -export interface Treaties { - [ref: string]: Treaty; -} - -export type Charter = string[]; - -export interface Allies { - [ship: string]: Charter; -} - -export interface Provider { - shipName: string; - nickname?: string; - status?: string; -} - -export type ChargeUpdate = ChargeUpdateInitial | ChargeUpdateAdd | ChargeUpdateDel; - -export interface ChargeUpdateInitial { - initial: { - [desk: string]: Charge; - } -} - -export interface ChargeUpdateAdd { - 'add-charge': { - desk: string; - charge: Charge; - } -} - -export interface ChargeUpdateDel { - 'del-charge': string; -} - -export type AllyUpdate = AllyUpdateIni | AllyUpdateAdd | AllyUpdateDel | AllyUpdateNew; - -export interface AllyUpdateIni { - ini: { - [ship: string]: string[]; - } -} - -export interface AllyUpdateAdd { - add: string; -} - -export interface AllyUpdateDel { - del: string; -} - -export interface AllyUpdateNew { - new: { - ship: string; - alliance: string[]; - } -} - -export type TreatyUpdate = TreatyUpdateIni | TreatyUpdateAdd | TreatyUpdateDel; - -export interface TreatyUpdateIni { - ini: { - [foreignDesk: string]: Treaty; - } -} - -export interface TreatyUpdateAdd { - add: Treaty; -} - -export interface TreatyUpdateDel { - del: string; -} diff --git a/pkg/npm/api/graph/index.ts b/pkg/npm/api/graph/index.ts deleted file mode 100644 index 4fed660f4..000000000 --- a/pkg/npm/api/graph/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib'; -export * from './types'; \ No newline at end of file diff --git a/pkg/npm/api/graph/lib.ts b/pkg/npm/api/graph/lib.ts deleted file mode 100644 index ce187df6a..000000000 --- a/pkg/npm/api/graph/lib.ts +++ /dev/null @@ -1,534 +0,0 @@ -import { GroupPolicy, makeResource, Resource, resourceFromPath } from '../groups'; - -import { decToUd, deSig, unixToDa, Scry } from '../lib'; -import { Enc, Path, Patp, PatpNoSig, Poke, Thread } from '../lib/types'; -import { Content, GraphChildrenPoke, GraphNode, GraphNodePoke, Post } from './types'; -import { patp2dec } from 'urbit-ob'; - -export const GRAPH_UPDATE_VERSION = 3; - -export const createBlankNodeWithChildPost = ( - ship: PatpNoSig, - parentIndex = '', - childIndex = '', - contents: Content[] -): GraphNodePoke => { - const date = unixToDa(Date.now()).toString(); - const nodeIndex = parentIndex + '/' + date; - - const childGraph: GraphChildrenPoke = {}; - childGraph[childIndex] = { - post: { - author: `~${ship}`, - index: nodeIndex + '/' + childIndex, - 'time-sent': Date.now(), - contents, - hash: null, - signatures: [] - }, - children: null - }; - - return { - post: { - author: `~${ship}`, - index: nodeIndex, - 'time-sent': Date.now(), - contents: [], - hash: null, - signatures: [] - }, - children: childGraph - }; -}; - -export const markPending = (nodes: any): any => { - Object.keys(nodes).forEach((key) => { - nodes[key].post.author = deSig(nodes[key].post.author); - nodes[key].post.pending = true; - if (nodes[key].children) { - nodes[key].children = markPending(nodes[key].children); - } - }); - return nodes; -}; - -export const createPost = ( - ship: PatpNoSig, - contents: Content[], - parentIndex = '', - childIndex = 'DATE_PLACEHOLDER' -): Post => { - if (childIndex === 'DATE_PLACEHOLDER') { - childIndex = unixToDa(Date.now()).toString(); - } - return { - author: `~${ship}`, - index: parentIndex + '/' + childIndex, - 'time-sent': Date.now(), - contents, - hash: null, - signatures: [] - }; -}; - -function moduleToMark(mod: string): string | undefined { - if(mod === 'link') { - return 'graph-validator-link'; - } - if(mod === 'publish') { - return 'graph-validator-publish'; - } - if(mod === 'chat') { - return 'graph-validator-chat'; - } - return undefined; -} - -const storeAction = (data: T, version: number = GRAPH_UPDATE_VERSION): Poke => ({ - app: 'graph-store', - mark: `graph-update-${version}`, - json: data -}); - -export { storeAction as graphStoreAction }; - -const viewAction = (threadName: string, action: T): Thread => ({ - inputMark: 'graph-view-action', - outputMark: 'json', - threadName, - body: action -}); - -export { viewAction as graphViewAction }; - -const hookAction = (data: T, version: number = GRAPH_UPDATE_VERSION): Poke => ({ - app: 'graph-push-hook', - mark: `graph-update-${version}`, - json: data -}); - -const dmAction = (data: T): Poke => ({ - app: 'dm-hook', - mark: 'dm-hook-action', - json: data -}); - -export { hookAction as graphHookAction }; - -export const createManagedGraph = ( - ship: PatpNoSig, - name: string, - title: string, - description: string, - group: Path, - mod: string -): Thread => { - const associated = { group: resourceFromPath(group) }; - const resource = makeResource(`~${ship}`, name); - - return viewAction('graph-create', { - create: { - resource, - title, - description, - associated, - module: mod, - mark: moduleToMark(mod) - } - }); -}; - -export const createUnmanagedGraph = ( - ship: PatpNoSig, - name: string, - title: string, - description: string, - policy: Enc, - mod: string -): Thread => viewAction('graph-create', { - create: { - resource: makeResource(`~${ship}`, name), - title, - description, - associated: { policy }, - module: mod, - mark: moduleToMark(mod) - } -}); - -export const joinGraph = ( - ship: Patp, - name: string -): Thread => viewAction('graph-join', { - join: { - resource: makeResource(ship, name), - ship - } -}); - -export const deleteGraph = ( - ship: PatpNoSig, - name: string -): Thread => viewAction('graph-delete', { - 'delete': { - resource: makeResource(`~${ship}`, name) - } -}); - -export const leaveGraph = ( - ship: Patp, - name: string -): Thread => viewAction('graph-leave', { - 'leave': { - resource: makeResource(ship, name) - } -}); - -export const groupifyGraph = ( - ship: Patp, - name: string, - toPath?: string -): Thread => { - const resource = makeResource(ship, name); - const to = toPath && resourceFromPath(toPath); - - return viewAction('graph-groupify', { - groupify: { - resource, - to - } - }); -}; - -export const evalCord = ( - cord: string -): Thread => { - return ({ - inputMark: 'graph-view-action', - outputMark: 'tang', - threadName: 'graph-eval', - body: { - eval: cord - } - }); -}; - -export const addGraph = ( - ship: Patp, - name: string, - graph: any, - mark: any -): Poke => { - return storeAction({ - 'add-graph': { - resource: { ship, name }, - graph, - mark - } - }); -}; - -export const addNodes = ( - ship: Patp, - name: string, - nodes: Object -): Thread => ({ - inputMark: `graph-update-${GRAPH_UPDATE_VERSION}`, - outputMark: 'graph-view-action', - threadName: 'graph-add-nodes', - body: { - 'add-nodes': { - resource: { ship, name }, - nodes - } - } -}); - -export const addPost = ( - ship: Patp, - name: string, - post: Post -): Thread => { - const nodes: Record = {}; - nodes[post.index] = { - post, - children: null - }; - return addNodes(ship, name, nodes); -}; - -export const addNode = ( - ship: Patp, - name: string, - node: GraphNodePoke -): Thread => { - const nodes: Record = {}; - nodes[node.post.index] = node; - - return addNodes(ship, name, nodes); -}; - -export const createGroupFeed = ( - group: Resource, - vip: any = '' -): Thread => ({ - inputMark: 'graph-view-action', - outputMark: 'resource', - threadName: 'graph-create-group-feed', - body: { - 'create-group-feed': { - resource: group, - vip - } - } -}); - -export const disableGroupFeed = ( - group: Resource -): Thread => ({ - inputMark: 'graph-view-action', - outputMark: 'json', - threadName: 'graph-disable-group-feed', - body: { - 'disable-group-feed': { - resource: group - } - } -}); - -/** - * Set dm-hook to screen new DMs or not - * - */ -export const setScreen = (screen: boolean): Poke => dmAction({ screen }); - -/** - * Accept a pending DM request - * - * @param ship the ship to accept - */ -export const acceptDm = (ship: string) => dmAction({ - accept: ship -}); - -/** - * Decline a pending DM request - * - * @param ship the ship to accept - */ -export const declineDm = (ship: string) => dmAction({ - decline: ship -}); - -/** - * Remove posts from a set of indices - * - */ -export const removePosts = ( - ship: Patp, - name: string, - indices: string[] -): Poke => hookAction({ - 'remove-posts': { - resource: { ship, name }, - indices - } -}); - -/** - * Remove a DM message from our inbox - * - * @remarks - * This does not remove the message from the recipients inbox - */ -export const removeDmMessage = ( - our: Patp, - index: string -): Poke => ({ - app: 'graph-store', - mark: `graph-update-${GRAPH_UPDATE_VERSION}`, - json: { - 'remove-posts': { - resource: { ship: our, name: 'dm-inbox' }, - indices: [index] - } - } -}); - -/** - * Send a DM to a ship - * - * @param our sender - * @param ship recipient - * @param contents contents of message - */ -export const addDmMessage = (our: PatpNoSig, ship: Patp, contents: Content[]): Poke => { - const post = createPost(our, contents, `/${patp2dec(ship)}`); - const node: GraphNode = { - post, - children: null - }; - return { - app: 'dm-hook', - mark: `graph-update-${GRAPH_UPDATE_VERSION}`, - json: { - 'add-nodes': { - resource: { ship: `~${our}`, name: 'dm-inbox' }, - nodes: { - [post.index]: node - } - } - } - }; -}; - -const encodeIndex = (idx: string) => idx.split('/').map(decToUd).join('/'); - -/** - * Fetch all graph keys - */ -export const getKeys = (): Scry => ({ - app: 'graph-store', - path: '/keys' -}); - -/** - * Fetch newest (larger keys) nodes in a graph under some index - * - * @param ship ship of graph - * @param name name of graph - * @param count number of nodes to load - * @param index index to query - */ -export const getNewest = ( - ship: string, - name: string, - count: number, - index = '' -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/siblings` + - `/newest/lone/${count}${encodeIndex(index)}` -}); - -/** - * Fetch nodes in a graph that are older (key is smaller) and direct - * siblings of some index - * - * @param ship ship of graph - * @param name name of graph - * @param count number of nodes to load - * @param index index to query - */ -export const getOlderSiblings = ( - ship: string, - name: string, - count: number, - index: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/siblings/older/lone/${count}${encodeIndex(index)}` -}); - -/** - * Fetch nodes in a graph that are younger (key is larger) and direct - * siblings of some index - * - * @param ship ship of graph - * @param name name of graph - * @param count number of nodes to load - * @param index index to query - */ -export const getYoungerSiblings = ( - ship: string, - name: string, - count: number, - index: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/siblings/newer/lone/${count}${encodeIndex(index)}` -}); - -/** - * Fetch all nodes in a graph under some index, without loading children - * - * @param ship ship of graph - * @param name name of graph - * @param index index to query - */ -export const getShallowChildren = (ship: string, name: string, index = '') => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/children/lone/~/~${encodeIndex(index)}` -}); - -/** - * Fetch newest nodes in a graph as a flat map, including children, - * optionally starting at a specified key - * - * @param ship ship of graph - * @param name name of graph - * @param count number of nodes to load - * @param start key to start at - * - */ -export const getDeepOlderThan = ( - ship: string, - name: string, - count: number, - start = '' -) => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/siblings` + - `/${start.length > 0 ? 'older' : 'newest'}` + - `/kith/${count}${encodeIndex(start)}` -}); - -/** - * Fetch a flat map of a nodes ancestors and firstborn children - * - * @param ship ship of graph - * @param name name of graph - * @param index index to query - * - */ -export const getFirstborn = ( - ship: string, - name: string, - index: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/firstborn${encodeIndex(index)}` -}); - -/** - * Fetch a single node, and all it's children - * - * @param ship ship of graph - * @param name name of graph - * @param index index to query - * - */ -export const getNode = ( - ship: string, - name: string, - index: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}/node/index/kith${encodeIndex(index)}` -}); - -/** - * Fetch entire graph - * - * @param ship ship of graph - * @param name name of graph - * - */ -export const getGraph = ( - ship: string, - name: string -): Scry => ({ - app: 'graph-store', - path: `/graph/${ship}/${name}` -}); diff --git a/pkg/npm/api/graph/types.ts b/pkg/npm/api/graph/types.ts deleted file mode 100644 index 2e8816a3c..000000000 --- a/pkg/npm/api/graph/types.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { Patp } from '../lib'; -import { BigIntOrderedMap } from '../lib/BigIntOrderedMap'; -import { BigIntArrayOrderedMap } from '../lib/BigIntArrayOrderedMap'; - -export interface TextContent { - text: string; -} -export interface UrlContent { - url: string; -} -export interface CodeContent { - code: { - expression: string; - output: string[] | undefined; - } -} - -export interface ReferenceContent { - reference: AppReference | GraphReference | GroupReference; -} - -export interface GraphReference { - graph: { - graph: string; - group: string; - index: string; - } -} - -export interface GroupReference { - group: string; -} - -export interface AppReference { - app: { - ship: string; - desk: string; - path: string; - } -} - -export interface MentionContent { - mention: string; - emphasis?: 'bold' | 'italic'; -} -export type Content = - | TextContent - | UrlContent - | CodeContent - | ReferenceContent - | MentionContent; - -export interface Post { - author: Patp; - contents: Content[]; - hash: string | null; - index: string; - pending?: boolean; - signatures: string[]; - 'time-sent': number; -} - -export interface GraphNodePoke { - post: Post; - children: GraphChildrenPoke | null; -} - -export interface GraphChildrenPoke { - [k: string]: GraphNodePoke; -} - -export interface GraphNode { - children: Graph | null; - post: Post; -} - -export interface FlatGraphNode { - children: null; - post: Post; -} - -export type Graph = BigIntOrderedMap; - -export type Graphs = { [rid: string]: Graph }; - -export type FlatGraph = BigIntArrayOrderedMap; - -export type FlatGraphs = { [rid: string]: FlatGraph }; - -export type ThreadGraphs = { - [rid: string]: { - [index: string]: FlatGraph; - } -}; diff --git a/pkg/npm/api/groups/index.ts b/pkg/npm/api/groups/index.ts deleted file mode 100644 index 341e81711..000000000 --- a/pkg/npm/api/groups/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/pkg/npm/api/groups/lib.ts b/pkg/npm/api/groups/lib.ts deleted file mode 100644 index 7e93ad3a4..000000000 --- a/pkg/npm/api/groups/lib.ts +++ /dev/null @@ -1,226 +0,0 @@ -import { deSig } from '../index'; -import { Enc, Path, Patp, PatpNoSig, Poke, Thread } from '../lib/types'; -import { Group, GroupPolicy, GroupPolicyDiff, GroupUpdateAddMembers, GroupUpdateAddTag, GroupUpdateChangePolicy, GroupUpdateRemoveGroup, GroupUpdateRemoveMembers, GroupUpdateRemoveTag, Resource, RoleTags, Tag } from './types'; -import { GroupUpdate } from './update'; - -export const GROUP_UPDATE_VERSION = 0; - -export const proxyAction = (data: T, version: number = GROUP_UPDATE_VERSION): Poke => ({ - app: 'group-push-hook', - mark: `group-update-${version}`, - json: data -}); - -const storeAction = (data: T, version: number = GROUP_UPDATE_VERSION): Poke => ({ - app: 'group-store', - mark: `group-update-${version}`, - json: data -}); - -export { storeAction as groupStoreAction }; - -const viewAction = (data: T): Poke => ({ - app: 'group-view', - mark: 'group-view-action', - json: data -}); - -export { viewAction as groupViewAction }; - -export const viewThread = (thread: string, action: T): Thread => ({ - inputMark: 'group-view-action', - outputMark: 'json', - threadName: thread, - body: action -}); - -export const removeMembers = ( - resource: Resource, - ships: PatpNoSig[] -): Poke => proxyAction({ - removeMembers: { - resource, - ships - } -}); - -export const addTag = ( - resource: Resource, - tag: Tag, - ships: Patp[] -): Poke => proxyAction({ - addTag: { - resource, - tag, - ships - } -}); - -export const removeTag = ( - tag: Tag, - resource: Resource, - ships: PatpNoSig[] -): Poke => proxyAction({ - removeTag: { - tag, - resource, - ships - } -}); - -export const addMembers = ( - resource: Resource, - ships: PatpNoSig[] -): Poke => proxyAction({ - addMembers: { - resource, - ships - } -}); - -export const removeGroup = ( - resource: Resource -): Poke => storeAction({ - removeGroup: { - resource - } -}); - -export const changePolicy = ( - resource: Resource, - diff: Enc -): Poke> => proxyAction({ - changePolicy: { - resource, - diff - } -}); - -export const join = ( - ship: string, - name: string, - app: "groups" | "graph", - autojoin: boolean, - share: boolean -): Poke => viewAction({ - join: { - resource: makeResource(ship, name), - ship, - shareContact: share || false, - app, - autojoin - } -}); - -export const createGroup = ( - name: string, - policy: Enc, - title: string, - description: string -): Thread => viewThread('group-create', { - create: { - name, - policy, - title, - description - } -}); - -export const deleteGroup = ( - ship: string, - name: string -): Thread => viewThread('group-delete', { - remove: makeResource(ship, name) -}); - -export const leaveGroup = ( - ship: string, - name: string -): Thread => viewThread('group-leave', { - leave: makeResource(ship, name) -}); - -export const invite = ( - ship: string, - name: string, - ships: Patp[], - description: string -): Thread => viewThread('group-invite', { - invite: { - resource: makeResource(ship, name), - ships, - description - } -}); - -export const abortJoin = ( - resource: string -): Poke => viewAction({ - abort: resource -}); - -export const roleTags = ['janitor', 'moderator', 'admin']; -// TODO make this type better? - -export const groupBunts = { - group: (): Group => ({ members: [], tags: { role: {} }, hidden: false, policy: groupBunts.policy() }), - policy: (): GroupPolicy => ({ open: { banned: [], banRanks: [] } }) -}; - -export const joinError = ['no-perms', 'strange', 'abort'] as const; -export const joinResult = ['done', ...joinError] as const; -export const joinLoad = ['start', 'added', 'metadata'] as const; -export const joinProgress = [...joinLoad, ...joinResult] as const; - -export function roleForShip( - group: Group, - ship: PatpNoSig -): RoleTags | undefined { - return roleTags.reduce((currRole, role) => { - const roleShips = group?.tags?.role?.[role]; - return roleShips && roleShips.includes(ship) ? role : currRole; - }, undefined as RoleTags | undefined); -}; - -export function resourceFromPath(path: Path): Resource { - const [, , ship, name] = path.split('/'); - return { ship, name }; -} - -export function makeResource(ship: string, name: string) { - return { ship, name }; -} - -export const isWriter = (group: Group, resource: string, ship: string) => { - const graph = group?.tags?.graph; - const writers: string[] | undefined = graph && (graph[resource] as any)?.writers; - const admins = group?.tags?.role?.admin ?? []; - if (typeof writers === 'undefined') { - return true; - } else { - return [...writers].includes(ship) || admins.includes(ship); - } -}; - -export function isChannelAdmin( - group: Group, - resource: string, - ship: string -): boolean { - const role = roleForShip(group, deSig(ship)); - - return ( - isHost(resource, ship) || - role === 'admin' || - role === 'moderator' - ); -} - -export function isHost( - resource: string, - ship: string -): boolean { - const [, , host] = resource.split('/'); - - return ship === host; -} diff --git a/pkg/npm/api/groups/types.ts b/pkg/npm/api/groups/types.ts deleted file mode 100644 index 6197c4f91..000000000 --- a/pkg/npm/api/groups/types.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './update'; -export * from './view'; \ No newline at end of file diff --git a/pkg/npm/api/groups/update.ts b/pkg/npm/api/groups/update.ts deleted file mode 100644 index a25c9a63e..000000000 --- a/pkg/npm/api/groups/update.ts +++ /dev/null @@ -1,175 +0,0 @@ -import { PatpNoSig, Path, ShipRank, Enc } from '../lib'; -import { roleTags } from './index'; - -export type RoleTags = typeof roleTags[number]; -interface RoleTag { - tag: 'admin' | 'moderator' | 'janitor'; -} - -interface AppTag { - app: string; - resource: string; - tag: string; -} - -export type Tag = AppTag | RoleTag; - -export interface InvitePolicy { - invite: { - pending: PatpNoSig[]; - }; -} - -export interface OpenPolicy { - open: { - banned: PatpNoSig[]; - banRanks: ShipRank[]; - }; -} - -export interface Resource { - name: string; - ship: PatpNoSig; -} - -export type OpenPolicyDiff = - | AllowRanksDiff - | BanRanksDiff - | AllowShipsDiff - | BanShipsDiff; - -export interface AllowRanksDiff { - allowRanks: ShipRank[]; -} - -export interface BanRanksDiff { - banRanks: ShipRank[]; -} - -export interface AllowShipsDiff { - allowShips: PatpNoSig[]; -} - -export interface BanShipsDiff { - banShips: PatpNoSig[]; -} - -export type InvitePolicyDiff = AddInvitesDiff | RemoveInvitesDiff; - -export interface AddInvitesDiff { - addInvites: PatpNoSig[]; -} - -export interface RemoveInvitesDiff { - removeInvites: PatpNoSig[]; -} - -export interface ReplacePolicyDiff { - replace: GroupPolicy; -} - -export type GroupPolicyDiff = - | { open: OpenPolicyDiff } - | { invite: InvitePolicyDiff } - | ReplacePolicyDiff; - -export type GroupPolicy = OpenPolicy | InvitePolicy; - -export interface TaggedShips { - [tag: string]: PatpNoSig[]; -} - -export interface Tags { - role: TaggedShips; - [app: string]: TaggedShips; -} - -export interface Group { - members: PatpNoSig[]; - tags: Tags; - policy: GroupPolicy; - hidden: boolean; -} - -export type Groups = { - [p in Path]: Group; -}; - -export interface GroupUpdateInitial { - initial: Enc; -} - -export interface GroupUpdateAddGroup { - addGroup: { - resource: Resource; - policy: Enc; - hidden: boolean; - }; -} - -export interface GroupUpdateAddMembers { - addMembers: { - ships: PatpNoSig[]; - resource: Resource; - }; -} - -export interface GroupUpdateRemoveMembers { - removeMembers: { - ships: PatpNoSig[]; - resource: Resource; - }; -} - -export interface GroupUpdateAddTag { - addTag: { - tag: Tag; - resource: Resource; - ships: PatpNoSig[]; - }; -} - -export interface GroupUpdateRemoveTag { - removeTag: { - tag: Tag; - resource: Resource; - ships: PatpNoSig[]; - }; -} - -export interface GroupUpdateChangePolicy { - changePolicy: { resource: Resource; diff: GroupPolicyDiff }; -} - -export interface GroupUpdateRemoveGroup { - removeGroup: { - resource: Resource; - }; -} - -export interface GroupUpdateExpose { - expose: { - resource: Resource; - }; -} - -export interface GroupUpdateInitialGroup { - initialGroup: { - resource: Resource; - group: Enc; - }; -} - -export type GroupUpdate = - | GroupUpdateInitial - | GroupUpdateAddGroup - | GroupUpdateAddMembers - | GroupUpdateRemoveMembers - | GroupUpdateAddTag - | GroupUpdateRemoveTag - | GroupUpdateChangePolicy - | GroupUpdateRemoveGroup - | GroupUpdateExpose - | GroupUpdateInitialGroup; - -export type GroupAction = Omit; diff --git a/pkg/npm/api/groups/view.ts b/pkg/npm/api/groups/view.ts deleted file mode 100644 index c6e432b24..000000000 --- a/pkg/npm/api/groups/view.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { joinError, joinProgress, joinResult } from "."; -import {Patp} from "../lib"; - -export type JoinError = typeof joinError[number]; - -export type JoinResult = typeof joinResult[number]; - - -export type JoinProgress = typeof joinProgress[number]; - -export interface JoinRequest { - /** - * Whether to display the join request or not - */ - hidden: boolean; - /** - * Timestamp of when the request started - */ - started: number; - ship: Patp; - progress: JoinProgress; - shareContact: boolean; - autojoin: boolean; - app: 'graph' | 'groups'; - invite: string[]; -} - -export interface JoinRequests { - [rid: string]: JoinRequest; -} diff --git a/pkg/npm/api/hark/index.ts b/pkg/npm/api/hark/index.ts deleted file mode 100644 index 341e81711..000000000 --- a/pkg/npm/api/hark/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/pkg/npm/api/hark/lib.ts b/pkg/npm/api/hark/lib.ts deleted file mode 100644 index a470c6711..000000000 --- a/pkg/npm/api/hark/lib.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { BigInteger } from 'big-integer'; - -import { Poke } from '../lib/types'; -import { - HarkBin, - HarkBinId, - HarkBody, - HarkLid, - HarkPlace -} from './types'; -import { decToUd } from '../lib'; - -export const harkAction = (data: T): Poke => ({ - app: 'hark-store', - mark: 'hark-action', - json: data -}); - -const graphHookAction = (data: T): Poke => ({ - app: 'hark-graph-hook', - mark: 'hark-graph-hook-action', - json: data -}); - -export { graphHookAction as harkGraphHookAction }; - -const groupHookAction = (data: T): Poke => ({ - app: 'hark-group-hook', - mark: 'hark-group-hook-action', - json: data -}); - -export { groupHookAction as harkGroupHookAction }; - -export const actOnNotification = ( - frond: string, - intTime: BigInteger, - bin: HarkBin -): Poke => - harkAction({ - [frond]: { - time: decToUd(intTime.toString()), - bin - } - }); - -export const setMentions = (mentions: boolean): Poke => - graphHookAction({ - 'set-mentions': mentions - }); - -export const setWatchOnSelf = (watchSelf: boolean): Poke => - graphHookAction({ - 'set-watch-on-self': watchSelf - }); - -export const setDoNotDisturb = (dnd: boolean): Poke => - harkAction({ - 'set-dnd': dnd - }); - -export const addNote = (bin: HarkBin, body: HarkBody) => - harkAction({ - 'add-note': { - bin, - body - } - }); - -export const archive = (bin: HarkBin, lid: HarkLid): Poke => - harkAction({ - archive: { - lid, - bin - } - }); - -export const opened = harkAction({ - opened: null -}); - -export const markCountAsRead = (place: HarkPlace): Poke => - harkAction({ - 'read-count': place - }); - -export const markEachAsRead = ( - place: HarkPlace, - path: string -): Poke => - harkAction({ - 'read-each': { - place, - path - } - }); - -export const seen = () => harkAction({ seen: null }); - -export const readAll = harkAction({ 'read-all': null }); -export const archiveAll = harkAction({ 'archive-all': null }); - -export const ignoreGroup = (group: string): Poke => - groupHookAction({ - ignore: group - }); - -export const ignoreGraph = (graph: string, index: string): Poke => - graphHookAction({ - ignore: { - graph, - index - } - }); - -export const listenGroup = (group: string): Poke => - groupHookAction({ - listen: group - }); - -export const listenGraph = (graph: string, index: string): Poke => - graphHookAction({ - listen: { - graph, - index - } - }); - -/** - * Read all graphs belonging to a particular group - */ -export const readGroup = (group: string) => - harkAction({ - 'read-group': group - }); - -/** - * Read all unreads in a graph - */ -export const readGraph = (graph: string) => - harkAction({ - 'read-graph': graph - }); - -export function harkBinToId(bin: HarkBin): HarkBinId { - const { place, path } = bin; - return `${place.desk}${place.path}${path}`; -} - -export function harkBinEq(a: HarkBin, b: HarkBin): boolean { - return ( - a.place.path === b.place.path && - a.place.desk === b.place.desk && - a.path === b.path - ); -} - -export function harkLidToId(lid: HarkLid): string { - if('time' in lid) { - return `archive-${lid.time}`; - } - return Object.keys(lid)[0]; -} diff --git a/pkg/npm/api/hark/types.ts b/pkg/npm/api/hark/types.ts deleted file mode 100644 index e52912cbb..000000000 --- a/pkg/npm/api/hark/types.ts +++ /dev/null @@ -1,58 +0,0 @@ - -export interface HarkStats { - count: number; - each: string[]; - last: number; -} - -export interface Timebox { - [binId: string]: Notification; -} - -export type HarkContent = { ship: string; } | { text: string; }; - -export interface HarkBody { - title: HarkContent[]; - time: number; - content: HarkContent[]; - link: string; - binned: string; -} - -export interface HarkPlace { - desk: string; - path: string; -} - -export interface HarkBin { - path: string; - place: HarkPlace; -} - -export type HarkLid = - { unseen: null; } -| { seen: null; } -| { time: string; }; - -export type HarkBinId = string; -export interface Notification { - bin: HarkBin; - time: number; - body: HarkBody[]; -} - -export interface NotificationGraphConfig { - watchOnSelf: boolean; - mentions: boolean; - watching: WatchedIndex[] -} - -export interface Unreads { - [path: string]: HarkStats; -} - -interface WatchedIndex { - graph: string; - index: string; -} -export type GroupNotificationsConfig = string[]; diff --git a/pkg/npm/api/hood/index.ts b/pkg/npm/api/hood/index.ts deleted file mode 100644 index e06143cf1..000000000 --- a/pkg/npm/api/hood/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib'; -export * from './types'; diff --git a/pkg/npm/api/hood/lib.ts b/pkg/npm/api/hood/lib.ts deleted file mode 100644 index 6596d2924..000000000 --- a/pkg/npm/api/hood/lib.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { Poke, Scry } from '../lib'; -import { Vats, Vat } from './types'; - -export const getVats: Scry = { - app: 'hood', - path: '/kiln/vats' -}; - -/** - * Install a foreign desk - */ -export function kilnInstall( - ship: string, - desk: string, - local?: string -): Poke { - return { - app: 'hood', - mark: 'kiln-install', - json: { - ship, - desk, - local: local || desk - } - }; -} - -/** - * Uninstall a desk - */ -export function kilnUninstall( - desk: string -): Poke { - return { - app: 'hood', - mark: 'kiln-uninstall', - json: desk - }; -} - -export function kilnSuspend( - desk: string -): Poke { - return { - app: 'hood', - mark: 'kiln-suspend', - json: desk - }; -} - -export function kilnRevive( - desk: string -): Poke { - return { - app: 'hood', - mark: 'kiln-revive', - json: desk - }; -} - -export function kilnBump(force = false, except = [] as string[]) { - return { - app: 'hood', - mark: 'kiln-bump', - json: { - force, - except - } - }; -} - -export function kilnPause(desk: string) { - return { - app: 'hood', - mark: 'kiln-pause', - json: desk - }; -} - -export function kilnResume(desk: string) { - return { - app: 'hood', - mark: 'kiln-resume', - json: desk - }; -} - -export const scryLag: Scry = ({ app: 'hood', path: '/kiln/lag' }); - -export function getBlockers(vats: Vats): string[] { - const blockers: string[] = []; - const base = vats?.base; - if(!base) { - return blockers; - } - const blockedOn = base.arak.rail?.next?.[0]?.weft?.kelvin; - if(!blockedOn) { - return blockers; - } - - Object.entries(vats) - .filter(([desk]) => desk !== 'base') - .forEach(([desk, vat]) => { - // assuming only %zuse - const woofs = vat.arak.rail?.next || []; - const kelvins = woofs.map(n => n.weft.kelvin); - if(!(kelvins.includes(blockedOn))) { - blockers.push(desk); - } - }); - - return blockers; -} - -export function getVatPublisher(vat: Vat): string | undefined { - if (vat.arak.rail) { - const { rail } = vat.arak; - return (rail?.publisher || rail?.ship || undefined); - } - return undefined; -} diff --git a/pkg/npm/api/hood/types.ts b/pkg/npm/api/hood/types.ts deleted file mode 100644 index 5cf52fc76..000000000 --- a/pkg/npm/api/hood/types.ts +++ /dev/null @@ -1,163 +0,0 @@ - -/** - * A pending commit, awaiting a future kelvin version - */ -interface Woof { - aeon: number; - weft: Weft; -} - -interface Rein { - /** - * Agents not in manifest that should be running - */ - add: string[]; - /** - * Agents in manifest that should not be running - */ - sub: string[]; -} - -export interface Rail { - /** - * Original publisher of desk, if available - */ - publisher: string | null; - /** - * Ship of foreign vat - */ - ship: string; - /** - * Desk of foreign vat - */ - desk: string; - /** - * Aeon (version number) that we currently have synced - */ - aeon: number; - next: Woof[]; - paused: boolean; -} - -/** - * A tracker of a foreign {@link Vat} - * - */ -export interface Arak { - rein: Rein; - rail: Rail | null; -} - -/** - * A component's kelvin version - */ -export interface Weft { - /** - * Name of the component - * - * @remarks - * Usually %zuse, %hoon, or %lull - */ - name: string; - /** - * Kelvin version - * - */ - kelvin: number; -} - -export interface KilnDiffBlock { - block: { - desk: string; - arak: Arak; - weft: Weft; - blockers: string[]; - }; -} - -export interface KilnDiffReset { - reset: { - desk: string; - arak: Arak; - }; -} - -export interface KilnDiffMerge { - merge: { - desk: string; - arak: Arak; - }; -} - -export interface KilnDiffMergeSunk { - 'merge-sunk': { - desk: string; - arak: Arak; - tang: string; - }; -} - -export interface KilnDiffMergeFail { - 'merge-fail': { - desk: string; - arak: Arak; - tang: string; - }; -} - -export type KilnDiff = - | KilnDiffBlock - | KilnDiffReset - | KilnDiffMerge - | KilnDiffMergeSunk - | KilnDiffMergeFail; - -/** - * Cases for revision - * - */ -export interface Cass { - /** - * Revision number - */ - ud: number; - /** - * Timestamp of revision, as stringifed `@da` - * - * @remarks - * If \@da is outside valid positive unix timestamp, value will be zero - */ - da: string; -} - -/** - * A local desk installation - */ -export interface Vat { - /** - * Desk that this Vat describes - */ - desk: string; - /** - * Hash of the desk, rendered as `@uv` - * - * @remarks - * Equivalent to - * ```hoon - * .^(@uv %cz /=desk=) - * ``` - */ - hash: string; - /** - * Current revision - */ - cass: Cass; - /** - * Foreign sync - */ - arak: Arak; -} - -export interface Vats { - [desk: string]: Vat; -} diff --git a/pkg/npm/api/index.ts b/pkg/npm/api/index.ts deleted file mode 100644 index bc9c6e1c6..000000000 --- a/pkg/npm/api/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -export * from './contacts'; -export * as contacts from './contacts'; -export * from './graph'; -export * as graph from './graph'; -export * from './groups'; -export * as groups from './groups'; -export * from './hark'; -export * as hark from './hark'; -export * from './invite'; -// this conflicts with /groups/lib invite -// export * as invite from './invite'; -export * from './metadata'; -export * as metadata from './metadata'; -export * from './settings'; -export * as settings from './settings'; -export * from './s3'; -export * as s3 from './s3'; -export * from './lib'; -export * from './lib/BigIntOrderedMap'; -export * from './lib/BigIntArrayOrderedMap'; -export * as hood from './hood'; -export * from './hood'; -export * as docket from './docket'; -export * from './docket'; diff --git a/pkg/npm/api/invite/index.ts b/pkg/npm/api/invite/index.ts deleted file mode 100644 index 341e81711..000000000 --- a/pkg/npm/api/invite/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/pkg/npm/api/invite/lib.ts b/pkg/npm/api/invite/lib.ts deleted file mode 100644 index a5a5ca94a..000000000 --- a/pkg/npm/api/invite/lib.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Poke, Serial } from "../lib"; -import { InviteUpdate, InviteUpdateAccept, InviteUpdateDecline } from "./types"; - -export const inviteAction = (data: T): Poke => ({ - app: 'invite-store', - mark: 'invite-action', - json: data -}); - -export const accept = ( - app: string, - uid: Serial -): Poke => inviteAction({ - accept: { - term: app, - uid - } -}); - -export const decline = ( - app: string, - uid: Serial -): Poke => inviteAction({ - decline: { - term: app, - uid - } -}); diff --git a/pkg/npm/api/invite/types.ts b/pkg/npm/api/invite/types.ts deleted file mode 100644 index b3515bb43..000000000 --- a/pkg/npm/api/invite/types.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { Serial, PatpNoSig, Path } from '../lib'; -import { Resource } from "../groups"; - -export type InviteUpdate = - InviteUpdateInitial -| InviteUpdateCreate -| InviteUpdateDelete -| InviteUpdateInvite -| InviteUpdateAccept -| InviteUpdateAccepted -| InviteUpdateDecline; - -export interface InviteUpdateAccept { - accept: { - term: string; - uid: Serial; - } -} - -export interface InviteUpdateInitial { - initial: Invites; -} - -export interface InviteUpdateCreate { - create: { - term: string; - }; -} - -export interface InviteUpdateDelete { - delete: { - term: string; - }; -} - -export interface InviteUpdateInvite { - invite: { - term: string; - uid: Serial; - invite: Invite; - }; -} - -export interface InviteUpdateAccepted { - accepted: { - term: string; - uid: Serial; - }; -} - -export interface InviteUpdateDecline { - decline: { - term: string; - uid: Serial; - }; -} - -// actual datastructures - - -export type Invites = { - [p in Path]: AppInvites; -}; - -export type AppInvites = { - [s in Serial]: Invite; -}; - -export interface Invite { - app: string; - recipient: PatpNoSig; - resource: Resource; - ship: PatpNoSig; - text: string; -} diff --git a/pkg/npm/api/lib/BigIntArrayOrderedMap.ts b/pkg/npm/api/lib/BigIntArrayOrderedMap.ts deleted file mode 100644 index 79e998c53..000000000 --- a/pkg/npm/api/lib/BigIntArrayOrderedMap.ts +++ /dev/null @@ -1,152 +0,0 @@ -import produce, { immerable, castDraft, setAutoFreeze, enablePatches } from 'immer'; -import bigInt, { BigInteger } from 'big-integer'; - -setAutoFreeze(false); - -enablePatches(); - -export function stringToArr(str: string) { - return str.split('/').slice(1).map((ind) => { - return bigInt(ind); - }); -} - -export function arrToString(arr: BigInteger[]) { - let string = ''; - arr.forEach((key) => { - string = string + `/${key.toString()}`; - }); - return string; -} - -function sorted(a: BigInteger[], b: BigInteger[], reversed = false) { - const getSort = sortBigIntArr(a, b); - if (reversed) { - return getSort * -1; - } else { - return getSort; - } -} - -export function sortBigIntArr(a: BigInteger[], b: BigInteger[]) { - const aLen = a.length; - const bLen = b.length; - - const aCop = a.slice(0); - const bCop = b.slice(0); - aCop.reverse(); - bCop.reverse(); - - let i = 0; - while (i < aLen && i < bLen) { - if (aCop[i].lt(bCop[i])) { - return 1; - } else if (aCop[i].gt(bCop[i])) { - return -1; - } else { - i++; - } - } - - return bLen - aLen; -} - -export class BigIntArrayOrderedMap implements Iterable<[BigInteger[], V]> { - root: Record = {} - cachedIter: [BigInteger[], V][] | null = null; - [immerable] = true; - reversed = false; - - constructor(items: [BigInteger[], V][] = [], reversed = false) { - items.forEach(([key, val]) => { - this.set(key, val); - }); - this.reversed = reversed; - } - - get size() { - return Object.keys(this.root).length; - } - - get(key: BigInteger[]) { - return this.root[arrToString(key)] ?? null; - } - - gas(items: [BigInteger[], V][]) { - return produce(this, (draft) => { - items.forEach(([key, value]) => { - draft.root[arrToString(key)] = castDraft(value); - }); - draft.generateCachedIter(); - }, - (patches) => { - // console.log(`gassed with ${JSON.stringify(patches, null, 2)}`); - }); - } - - set(key: BigInteger[], value: V) { - return produce(this, (draft) => { - draft.root[arrToString(key)] = castDraft(value); - draft.cachedIter = null; - }); - } - - clear() { - return produce(this, (draft) => { - draft.cachedIter = []; - draft.root = {}; - }); - } - - has(key: BigInteger[]) { - return arrToString(key) in this.root; - } - - delete(key: BigInteger[]) { - const result = produce(this, (draft) => { - delete draft.root[arrToString(key)]; - draft.cachedIter = null; - }); - return result; - } - - [Symbol.iterator](): IterableIterator<[BigInteger[], V]> { - let idx = 0; - const result = this.generateCachedIter(); - return { - [Symbol.iterator]: this[Symbol.iterator], - next: (): IteratorResult<[BigInteger[], V]> => { - if (idx < result.length) { - return { value: result[idx++], done: false }; - } - return { done: true, value: null }; - } - }; - } - - peekLargest() { - const sorted = Array.from(this); - return sorted[0] as [BigInteger[], V] | null; - } - - peekSmallest() { - const sorted = Array.from(this); - return sorted[sorted.length - 1] as [BigInteger[], V] | null; - } - - keys() { - return Array.from(this).map(([k,v]) => k); - } - - generateCachedIter() { - if(this.cachedIter) { - return [...this.cachedIter]; - } - const result = Object.keys(this.root).map((key) => { - return [stringToArr(key), this.root[key]] as [BigInteger[], V]; - }).sort(([a], [b]) => sorted(a, b, this.reversed)); - this.cachedIter = result; - return [...result]; - } -} - diff --git a/pkg/npm/api/lib/BigIntOrderedMap.ts b/pkg/npm/api/lib/BigIntOrderedMap.ts deleted file mode 100644 index 5e3661d19..000000000 --- a/pkg/npm/api/lib/BigIntOrderedMap.ts +++ /dev/null @@ -1,117 +0,0 @@ -import produce, { immerable, castDraft, setAutoFreeze, enablePatches } from 'immer'; -import bigInt, { BigInteger } from 'big-integer'; - -setAutoFreeze(false); - -enablePatches(); - -function sortBigInt(a: BigInteger, b: BigInteger) { - if (a.lt(b)) { - return 1; - } else if (a.eq(b)) { - return 0; - } else { - return -1; - } -} -export class BigIntOrderedMap implements Iterable<[BigInteger, V]> { - root: Record = {} - cachedIter: [BigInteger, V][] | null = null; - [immerable] = true; - - constructor(items: [BigInteger, V][] = []) { - items.forEach(([key, val]) => { - this.set(key, val); - }); - } - - get size() { - if(this.cachedIter) { - return this.cachedIter.length; - } - return this.generateCachedIter().length; - } - - get(key: BigInteger) { - return this.root[key.toString()] ?? null; - } - - gas(items: [BigInteger, V][]) { - return produce(this, (draft) => { - items.forEach(([key, value]) => { - draft.root[key.toString()] = castDraft(value); - }); - draft.cachedIter = null; - }, - (patches) => { - // console.log(`gassed with ${JSON.stringify(patches, null, 2)}`); - }); - } - - set(key: BigInteger, value: V) { - return produce(this, (draft) => { - draft.root[key.toString()] = castDraft(value); - draft.cachedIter = null; - }); - } - - clear() { - return produce(this, (draft) => { - draft.cachedIter = []; - draft.root = {}; - }); - } - - has(key: BigInteger) { - return key.toString() in this.root; - } - - delete(key: BigInteger) { - const result = produce(this, (draft) => { - delete draft.root[key.toString()]; - draft.cachedIter = null; - }); - return result; - } - - [Symbol.iterator](): IterableIterator<[BigInteger, V]> { - let idx = 0; - const result = this.generateCachedIter(); - return { - [Symbol.iterator]: this[Symbol.iterator], - next: (): IteratorResult<[BigInteger, V]> => { - if (idx < result.length) { - return { value: result[idx++], done: false }; - } - return { done: true, value: null }; - } - }; - } - - peekLargest() { - const sorted = Array.from(this); - return sorted[0] as [BigInteger, V] | null; - } - - peekSmallest() { - const sorted = Array.from(this); - return sorted[sorted.length - 1] as [BigInteger, V] | null; - } - - keys() { - return Array.from(this).map(([k,v]) => k); - } - - generateCachedIter() { - if(this.cachedIter) { - return [...this.cachedIter]; - } - const result = Object.keys(this.root).map((key) => { - const num = bigInt(key); - return [num, this.root[key]] as [BigInteger, V]; - }).sort(([a], [b]) => sortBigInt(a,b)); - this.cachedIter = result; - return [...result]; - } -} - diff --git a/pkg/npm/api/lib/index.ts b/pkg/npm/api/lib/index.ts deleted file mode 100644 index 4fed660f4..000000000 --- a/pkg/npm/api/lib/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib'; -export * from './types'; \ No newline at end of file diff --git a/pkg/npm/api/lib/lib.ts b/pkg/npm/api/lib/lib.ts deleted file mode 100644 index c57d0a259..000000000 --- a/pkg/npm/api/lib/lib.ts +++ /dev/null @@ -1,259 +0,0 @@ -import bigInt, { BigInteger } from "big-integer"; - -import { Resource } from "../groups/types"; -import { Post, GraphNode } from "../graph/types"; - -const DA_UNIX_EPOCH = bigInt("170141184475152167957503069145530368000"); // `@ud` ~1970.1.1 - -const DA_SECOND = bigInt("18446744073709551616"); // `@ud` ~s1 - -function chunk(arr: T[], size: number): T[][] { - let chunk: T[] = []; - let newArray = [chunk]; - - for (let i = 0;i < arr.length;i++) { - if (chunk.length < size) { - chunk.push(arr[i]) - } else { - chunk = [arr[i]] - newArray.push(chunk) - } - } - - return newArray; -} - -function dropWhile(arr: T[], pred: (x: T) => boolean): T[] { - const newArray = arr.slice(); - - for (const item of arr) { - if (pred(item)) { - newArray.shift(); - } else { - return newArray; - } - } - - return newArray; -} - -/** - * Given a bigint representing an urbit date, returns a unix timestamp. - * - * @param {BigInteger} da The urbit date - * - * @return {number} The unix timestamp - */ -export function daToUnix(da: BigInteger): number { - // ported from +time:enjs:format in hoon.hoon - const offset = DA_SECOND.divide(bigInt(2000)); - const epochAdjusted = offset.add(da.subtract(DA_UNIX_EPOCH)); - - return Math.round( - epochAdjusted.multiply(bigInt(1000)).divide(DA_SECOND).toJSNumber() - ); -} - -/** - * Given a unix timestamp, returns a bigint representing an urbit date - * - * @param {number} unix The unix timestamp - * - * @return {BigInteger} The urbit date - */ -export function unixToDa(unix: number): BigInteger { - const timeSinceEpoch = bigInt(unix).multiply(DA_SECOND).divide(bigInt(1000)); - return DA_UNIX_EPOCH.add(timeSinceEpoch); -} - - -export function makePatDa(patda: string): BigInteger { - return bigInt(udToDec(patda)); -} - -export function udToDec(ud: string): string { - return ud.replace(/\./g, ""); -} - -export function decToUd(str: string): string { - const transform = chunk(str.split('').reverse(), 3) - .map(group => group.reverse().join('')) - .reverse() - .join('.') - return transform.replace(/^[0\.]+/g, ''); -} - -export function resourceAsPath(resource: Resource): string { - const { name, ship } = resource; - return `/ship/~${ship}/${name}`; -} - -export function uuid(): string { - let str = "0v"; - str += Math.ceil(Math.random() * 8) + "."; - for (let i = 0; i < 5; i++) { - let _str = Math.ceil(Math.random() * 10000000).toString(32); - _str = ("00000" + _str).substr(-5, 5); - str += _str + "."; - } - - return str.slice(0, -1); -} - -/* - Goes from: - ~2018.7.17..23.15.09..5be5 // urbit @da - To: - (javascript Date object) -*/ -export function daToDate(st: string): Date { - const dub = function (n: string) { - return parseInt(n) < 10 ? "0" + parseInt(n) : n.toString(); - }; - const da = st.split(".."); - const bigEnd = da[0].split("."); - const lilEnd = da[1].split("."); - const ds = `${bigEnd[0].slice(1)}-${dub(bigEnd[1])}-${dub(bigEnd[2])}T${dub( - lilEnd[0] - )}:${dub(lilEnd[1])}:${dub(lilEnd[2])}Z`; - return new Date(ds); -} - -/* - Goes from: - (javascript Date object) - To: - ~2018.7.17..23.15.09..5be5 // urbit @da -*/ - -export function dateToDa(d: Date, mil: boolean = false): string { - const fil = function (n: number) { - return n >= 10 ? n : "0" + n; - }; - return ( - `~${d.getUTCFullYear()}.` + - `${d.getUTCMonth() + 1}.` + - `${fil(d.getUTCDate())}..` + - `${fil(d.getUTCHours())}.` + - `${fil(d.getUTCMinutes())}.` + - `${fil(d.getUTCSeconds())}` + - `${mil ? "..0000" : ""}` - ); -} - -export function preSig(ship: string): string { - if (!ship) { - return ''; - } - - if (ship.trim().startsWith('~')) { - return ship.trim(); - } - - return '~'.concat(ship.trim()); -} - -export function deSig(ship: string): string | null { - if (!ship) { - return null; - } - return ship.replace("~", ""); -} - -// trim patps to match dojo, chat-cli -export function cite(ship: string) { - let patp = ship, - shortened = ''; - if (patp === null || patp === '') { - return null; - } - if (patp.startsWith('~')) { - patp = patp.substr(1); - } - // comet - if (patp.length === 56) { - shortened = '~' + patp.slice(0, 6) + '_' + patp.slice(50, 56); - return shortened; - } - // moon - if (patp.length === 27) { - shortened = '~' + patp.slice(14, 20) + '^' + patp.slice(21, 27); - return shortened; - } - return `~${patp}`; -} - - -export function uxToHex(ux: string) { - if (ux.length > 2 && ux.substr(0, 2) === '0x') { - const value = ux.substr(2).replace('.', '').padStart(6, '0'); - return value; - } - - const value = ux.replace('.', '').padStart(6, '0'); - return value; -} - -export const hexToUx = (hex: string): string => { - const nonZeroChars = dropWhile(hex.split(''), y => y === '0'); - const ux = chunk(nonZeroChars.reverse(), 4).map(x => { - return x.reverse().join(''); - }).reverse().join('.') || '0'; - - return `0x${ux}`; -}; - - -// encode the string into @ta-safe format, using logic from +wood. -// for example, 'some Chars!' becomes '~.some.~43.hars~21.' -// -export function stringToTa(str: string): string { - let out = ""; - for (let i = 0; i < str.length; i++) { - const char = str[i]; - let add = ""; - switch (char) { - case " ": - add = "."; - break; - case ".": - add = "~."; - break; - case "~": - add = "~~"; - break; - default: - const charCode = str.charCodeAt(i); - if ( - (charCode >= 97 && charCode <= 122) || // a-z - (charCode >= 48 && charCode <= 57) || // 0-9 - char === "-" - ) { - add = char; - } else { - // TODO behavior for unicode doesn't match +wood's, - // but we can probably get away with that for now. - add = "~" + charCode.toString(16) + "."; - } - } - out = out + add; - } - return "~." + out; -} - -export const buntPost = (): Post => ({ - author: '', - contents: [], - hash: null, - index: '', - signatures: [], - 'time-sent': 0 -}); - -export function makeNodeMap(posts: Post[]): Record { - const nodes: Record = {}; - posts.forEach((p: Post) => { - nodes[String(p.index)] = { children: null, post: p }; - }); - return nodes; -} diff --git a/pkg/npm/api/lib/types.ts b/pkg/npm/api/lib/types.ts deleted file mode 100644 index 4c701ea9e..000000000 --- a/pkg/npm/api/lib/types.ts +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Martian embassy - */ - -import { BigIntOrderedMap } from "./BigIntOrderedMap"; - -// an urbit style path rendered as string -export type Path = string; - -// patp including leading sig -export type Patp = string; - -// patp excluding leading sig -export type PatpNoSig = string; - -// @uvH encoded string -export type Serial = string; - -// jug from hoon -export type Jug = Map>; - -// name of app -export type AppName = 'chat' | 'link' | 'contacts' | 'publish' | 'graph' | 'groups'; - -export type ShipRank = 'czar' | 'king' | 'duke' | 'earl' | 'pawn'; - -export type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete'; - - -export type SetElement = S extends Set<(infer T)> ? T : never; -export type MapKey = M extends Map<(infer K), any> ? K : never; -export type MapValue = M extends Map ? V : never; - -/** - * Turns sets into arrays and maps into objects so we can send them over the wire - */ -export type Enc = - S extends Set ? - Enc>[] : - S extends Map ? - { [s: string]: Enc> } : - S extends object ? - { [K in keyof S]: Enc } : - S extends BigIntOrderedMap ? - { [index: string]: T } : - S; - -export type Mark = string; - -export interface Poke { - ship?: string; // This should be handled by the http library, but is part of the spec - app: string; - mark: Mark; - json: Action; -} - -export interface Scry { - app: string; - path: string; -} - -export interface Thread { - inputMark: string; - outputMark: string; - threadName: string; - body: Action; -} diff --git a/pkg/npm/api/metadata/index.ts b/pkg/npm/api/metadata/index.ts deleted file mode 100644 index 341e81711..000000000 --- a/pkg/npm/api/metadata/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/pkg/npm/api/metadata/lib.ts b/pkg/npm/api/metadata/lib.ts deleted file mode 100644 index ace81e8a3..000000000 --- a/pkg/npm/api/metadata/lib.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { Path, Poke, uxToHex, PatpNoSig } from '../lib'; -import { MdAppName, Association, Metadata, MetadataUpdate, MetadataUpdateAdd, MetadataUpdateRemove, MetadataEditField, MetadataUpdateEdit } from './types'; - -export const METADATA_UPDATE_VERSION = 2; - -export const metadataAction = (data: T, version: number = METADATA_UPDATE_VERSION): Poke => ({ - app: 'metadata-push-hook', - mark: `metadata-update-${version}`, - json: data -}); - -export const add = ( - ship: PatpNoSig, - appName: MdAppName, - resource: Path, - group: Path, - title: string, - description: string, - dateCreated: string, - color: string, - moduleName: string -): Poke => metadataAction({ - add: { - group, - resource: { - resource, - 'app-name': appName - }, - metadata: { - title, - description, - color, - 'date-created': dateCreated, - creator: `~${ship}`, - config: { graph: moduleName }, - picture: '', - hidden: false, - preview: false, - vip: '' - } - } -}); - -export { add as metadataAdd }; - -export const remove = ( - appName: MdAppName, - resource: string, - group: string -): Poke => metadataAction({ - remove: { - group, - resource: { - resource, - 'app-name': appName - } - } -}); - -export { remove as metadataRemove }; - -export const edit = ( - association: Association, - edit: MetadataEditField -): Poke => metadataAction({ - edit: { - group: association.group, - resource: { - resource: association.resource, - 'app-name': association['app-name'] - }, - edit - } -}); - -export { edit as metadataEdit }; - -/** - * @deprecated use {@link edit} instead - */ -export const update = ( - association: Association, - newMetadata: Partial -): Poke => { - const metadata = { ...association.metadata, ...newMetadata }; - metadata.color = uxToHex(metadata.color); - return metadataAction({ - add: { - group: association.group, - resource: { - resource: association.resource, - 'app-name': association['app-name'] - }, - metadata - } - }); -}; - -export { update as metadataUpdate }; diff --git a/pkg/npm/api/metadata/types.ts b/pkg/npm/api/metadata/types.ts deleted file mode 100644 index 828c83b1f..000000000 --- a/pkg/npm/api/metadata/types.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { Path, Patp } from '../lib'; - -export type MdAppName = 'groups' | 'graph'; - -export type MetadataUpdate = - MetadataUpdateInitial -| MetadataUpdateAdd -| MetadataUpdateUpdate -| MetadataUpdateRemove -| MetadataUpdateEdit; - -export interface MetadataUpdateInitial { - associations: ResourceAssociations; -} - -export type ResourceAssociations = { - [p in Path]: Association; -} - -export type MetadataUpdateAdd = { - add: AssociationPoke; -} - -export type MetadataUpdateUpdate = { - update: AssociationPoke; -} - -export interface MetadataUpdateEdit { - edit: { - resource: MdResource; - group: string; - edit: MetadataEditField; - } -} - -export type MetadataEditField = Partial>; - -export type MetadataUpdateRemove = { - remove: { - resource: MdResource; - group: string; - } -} - -export interface MdResource { - resource: string; - 'app-name': MdAppName; -} - -export interface MetadataUpdatePreview { - group: string; - channels: Associations; - 'channel-count': number; - members: number; - metadata: Metadata; -} - -export type Associations = { - groups: AppAssociations - graph: AppAssociations; -} - -export type AppAssociations = { - [p in Path]: Association; -} - -export type Association = MdResource & { - group: Path; - metadata: Metadata; -}; - -export interface AssociationPoke { - group: Path; - resource: MdResource; - metadata: Metadata; -} - -export interface Metadata { - color: string; - creator: Patp; - 'date-created': string; - description: string; - title: string; - config: C; - hidden: boolean; - picture: string; - preview: boolean; - vip: PermVariation; -} - -export type MetadataConfig = GroupConfig | GraphConfig; - -export interface GraphConfig { - graph: string; -} - -export interface GroupConfig { - group: undefined | {} | MdResource; -} - -export type PermVariation = '' | ' ' | 'reader-comments' | 'member-metadata' | 'host-feed' | 'admin-feed'; diff --git a/pkg/npm/api/package-lock.json b/pkg/npm/api/package-lock.json deleted file mode 100644 index 4932fe853..000000000 --- a/pkg/npm/api/package-lock.json +++ /dev/null @@ -1,7587 +0,0 @@ -{ - "name": "@urbit/api", - "version": "2.1.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@urbit/api", - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.16.0", - "big-integer": "^1.6.48", - "core-js": "^3.19.1", - "immer": "^9.0.1", - "urbit-ob": "^5.0.1" - }, - "devDependencies": { - "@babel/core": "^7.16.0", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-node-resolve": "^13.0.6", - "@types/node": "^15.12.5", - "@typescript-eslint/eslint-plugin": "^4.28.2", - "@typescript-eslint/parser": "^4.28.2", - "@urbit/eslint-config": "^1.0.3", - "babel-eslint": "^10.1.0", - "eslint-plugin-react": "^7.24.0", - "rollup": "^2.59.0", - "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", - "typescript": "^4.3.2" - } - }, - "../eslint-config": { - "name": "@urbit/eslint-config", - "version": "1.0.3", - "dev": true, - "license": "MIT", - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.15.0", - "babel-eslint": "^10.1.0", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "typescript": "^4.1.5" - } - }, - "../eslint-config/node_modules/@babel/code-frame": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "../eslint-config/node_modules/@babel/generator": { - "version": "7.14.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "../eslint-config/node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "../eslint-config/node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "../eslint-config/node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.12.13" - } - }, - "../eslint-config/node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/@babel/highlight": { - "version": "7.14.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "../eslint-config/node_modules/@babel/parser": { - "version": "7.14.3", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "../eslint-config/node_modules/@babel/template": { - "version": "7.12.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "../eslint-config/node_modules/@babel/traverse": { - "version": "7.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "../eslint-config/node_modules/@babel/types": { - "version": "7.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "../eslint-config/node_modules/@eslint/eslintrc": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "../eslint-config/node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../eslint-config/node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../eslint-config/node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "../eslint-config/node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../eslint-config/node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "../eslint-config/node_modules/@types/json-schema": { - "version": "7.0.7", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.24.0", - "@typescript-eslint/scope-manager": "4.24.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../eslint-config/node_modules/@typescript-eslint/experimental-utils": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "../eslint-config/node_modules/@typescript-eslint/parser": { - "version": "4.24.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "debug": "^4.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../eslint-config/node_modules/@typescript-eslint/scope-manager": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../eslint-config/node_modules/@typescript-eslint/types": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../eslint-config/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../eslint-config/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.24.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "../eslint-config/node_modules/acorn": { - "version": "7.4.1", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "../eslint-config/node_modules/acorn-jsx": { - "version": "5.3.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "../eslint-config/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/ansi-colors": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../eslint-config/node_modules/ansi-regex": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "../eslint-config/node_modules/array-includes": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/babel-eslint": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/babel-eslint/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "../eslint-config/node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../eslint-config/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "../eslint-config/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/cross-spawn": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "../eslint-config/node_modules/debug": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "../eslint-config/node_modules/deep-is": { - "version": "0.1.3", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../eslint-config/node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/enquirer": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "../eslint-config/node_modules/es-abstract": { - "version": "1.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.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.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/es-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "../eslint-config/node_modules/eslint": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "../eslint-config/node_modules/eslint-plugin-react": { - "version": "7.23.2", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "../eslint-config/node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "../eslint-config/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "../eslint-config/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "../eslint-config/node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "../eslint-config/node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../eslint-config/node_modules/eslint/node_modules/chalk": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../eslint-config/node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../eslint-config/node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "../eslint-config/node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/eslint/node_modules/globals": { - "version": "13.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../eslint-config/node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../eslint-config/node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/espree": { - "version": "7.3.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "../eslint-config/node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/esquery": { - "version": "1.4.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "../eslint-config/node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../eslint-config/node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "../eslint-config/node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../eslint-config/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "../eslint-config/node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/fast-glob": { - "version": "3.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/fastq": { - "version": "1.11.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "../eslint-config/node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "../eslint-config/node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/flat-cache": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "../eslint-config/node_modules/flatted": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "../eslint-config/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "../eslint-config/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/get-intrinsic": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/glob": { - "version": "7.1.7", - "dev": true, - "license": "ISC", - "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" - } - }, - "../eslint-config/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "../eslint-config/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/globby": { - "version": "11.0.3", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "../eslint-config/node_modules/has-bigints": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/has-symbols": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/ignore": { - "version": "5.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "../eslint-config/node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../eslint-config/node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "../eslint-config/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "../eslint-config/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "../eslint-config/node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../eslint-config/node_modules/is-bigint": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-boolean-object": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-callable": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-core-module": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-date-object": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/is-glob": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "../eslint-config/node_modules/is-number-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-regex": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-string": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "../eslint-config/node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "../eslint-config/node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "../eslint-config/node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../eslint-config/node_modules/lodash.clonedeep": { - "version": "4.5.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/lodash.truncate": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "../eslint-config/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "../eslint-config/node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "../eslint-config/node_modules/micromatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "../eslint-config/node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "../eslint-config/node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/object-inspect": { - "version": "1.10.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "../eslint-config/node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/object.entries": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "../eslint-config/node_modules/object.fromentries": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/object.values": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "../eslint-config/node_modules/optionator": { - "version": "0.9.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "../eslint-config/node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/path-parse": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/picomatch": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "../eslint-config/node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "../eslint-config/node_modules/progress": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "../eslint-config/node_modules/prop-types": { - "version": "15.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "../eslint-config/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "../eslint-config/node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "../eslint-config/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/regexpp": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "../eslint-config/node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../eslint-config/node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "../eslint-config/node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "../eslint-config/node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "../eslint-config/node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "../eslint-config/node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "../eslint-config/node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "../eslint-config/node_modules/string-width": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/string.prototype.matchall": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../eslint-config/node_modules/strip-ansi": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../eslint-config/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/table": { - "version": "6.7.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "../eslint-config/node_modules/table/node_modules/ajv": { - "version": "8.4.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "../eslint-config/node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "../eslint-config/node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "../eslint-config/node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "../eslint-config/node_modules/type-fest": { - "version": "0.8.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "../eslint-config/node_modules/typescript": { - "version": "4.2.4", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "../eslint-config/node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "../eslint-config/node_modules/v8-compile-cache": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "../eslint-config/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "../eslint-config/node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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" - } - }, - "../eslint-config/node_modules/word-wrap": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "../eslint-config/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "../eslint-config/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@babel/code-frame": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "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/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "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", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.15.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.16.2", - "dev": true, - "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.16.0", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "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-commonjs": { - "version": "21.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" - } - }, - "node_modules/@rollup/plugin-commonjs/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "13.0.6", - "dev": true, - "license": "MIT", - "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": "^2.42.0" - } - }, - "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "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/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "15.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.28.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@urbit/eslint-config": { - "resolved": "../eslint-config", - "link": true - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/array-includes": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-eslint": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-eslint/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/big-integer": { - "version": "1.6.48", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.17.6", - "dev": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "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/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001278", - "dev": true, - "license": "CC-BY-4.0", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/core-js": { - "version": "3.19.1", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.3.889", - "dev": true, - "license": "ISC" - }, - "node_modules/es-abstract": { - "version": "1.18.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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-to-primitive": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "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/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "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-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-glob": { - "version": "3.2.6", - "dev": true, - "license": "MIT", - "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/fastq": { - "version": "1.11.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "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-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "dev": true, - "license": "ISC", - "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": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "dev": true, - "license": "MIT", - "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/graceful-fs": { - "version": "4.2.8", - "dev": true, - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ignore": { - "version": "5.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.6", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "dev": true, - "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.10.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "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.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prop-types": { - "version": "15.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/resolve": { - "version": "2.0.0-next.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rollup": { - "version": "2.59.0", - "dev": true, - "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-analyzer": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "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-typescript2": { - "version": "0.30.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^4.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.1.0" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/resolve": { - "version": "1.20.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.1.0", - "dev": true, - "license": "0BSD" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "dev": true, - "license": "MIT" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.trimend": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "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", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser": { - "version": "5.9.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "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/typescript": { - "version": "4.3.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "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/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/urbit-ob": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "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/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.0" - } - }, - "@babel/compat-data": { - "version": "7.16.0", - "dev": true - }, - "@babel/core": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-compilation-targets": "^7.16.0", - "@babel/helper-module-transforms": "^7.16.0", - "@babel/helpers": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0", - "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": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/compat-data": "^7.16.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.0", - "@babel/template": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-module-transforms": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-replace-supers": "^7.16.0", - "@babel/helper-simple-access": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/helper-validator-identifier": "^7.15.7", - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.16.0", - "@babel/helper-optimise-call-expression": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.15.7", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "dev": true - }, - "@babel/helpers": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/template": "^7.16.0", - "@babel/traverse": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/highlight": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.16.2", - "dev": true - }, - "@babel/runtime": { - "version": "7.16.0", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0" - } - }, - "@babel/traverse": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "@babel/generator": "^7.16.0", - "@babel/helper-function-name": "^7.16.0", - "@babel/helper-hoist-variables": "^7.16.0", - "@babel/helper-split-export-declaration": "^7.16.0", - "@babel/parser": "^7.16.0", - "@babel/types": "^7.16.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.16.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.15.7", - "to-fast-properties": "^2.0.0" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.7", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.0", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-commonjs": { - "version": "21.0.1", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "dependencies": { - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "@rollup/plugin-node-resolve": { - "version": "13.0.6", - "dev": true, - "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" - }, - "dependencies": { - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "dev": true - } - } - }, - "@types/estree": { - "version": "0.0.39", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.8", - "dev": true - }, - "@types/node": { - "version": "15.14.1", - "dev": true - }, - "@types/resolve": { - "version": "1.17.1", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - } - }, - "@typescript-eslint/types": { - "version": "4.28.2", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - } - }, - "@urbit/eslint-config": { - "version": "file:../eslint-config", - "requires": { - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.15.0", - "babel-eslint": "^10.1.0", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "typescript": "^4.1.5" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/generator": { - "version": "7.14.3", - "dev": true, - "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.3", - "dev": true - }, - "@babel/template": { - "version": "7.12.13", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - } - }, - "@babel/traverse": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.2", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "0.4.1", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.4", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.6", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - } - }, - "@types/json-schema": { - "version": "7.0.7", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.24.0", - "@typescript-eslint/scope-manager": "4.24.0", - "debug": "^4.1.1", - "functional-red-black-tree": "^1.0.1", - "lodash": "^4.17.15", - "regexpp": "^3.0.0", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.24.0", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.24.0", - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/typescript-estree": "4.24.0", - "debug": "^4.1.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0" - } - }, - "@typescript-eslint/types": { - "version": "4.24.0", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "@typescript-eslint/visitor-keys": "4.24.0", - "debug": "^4.1.1", - "globby": "^11.0.1", - "is-glob": "^4.0.1", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.24.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.24.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "acorn": { - "version": "7.4.1", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "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" - } - }, - "ansi-colors": { - "version": "4.1.1", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-includes": { - "version": "3.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "dev": true - }, - "babel-eslint": { - "version": "10.1.0", - "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", - "dev": true - } - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.1", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.3", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "enquirer": { - "version": "2.3.6", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "es-abstract": { - "version": "1.18.0", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.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.0" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "eslint": { - "version": "7.26.0", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.1", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "globals": { - "version": "13.8.0", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.23.2", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "espree": { - "version": "7.3.1", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.5", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "dev": true - }, - "fastq": { - "version": "1.11.0", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "flat-cache": { - "version": "3.0.4", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "glob": { - "version": "7.1.7", - "dev": true, - "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": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.0.3", - "dev": true, - "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" - } - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.2", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "dev": true - }, - "is-core-module": { - "version": "2.4.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "levn": { - "version": "0.4.1", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "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.3", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "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" - } - }, - "parent-module": { - "version": "1.0.1", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picomatch": { - "version": "2.2.3", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "dev": true - }, - "progress": { - "version": "2.0.3", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "react-is": { - "version": "16.13.1", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.1.0", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "dev": true - } - } - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "6.0.0", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.1", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.4.0", - "dev": true, - "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", - "dev": true - } - } - }, - "text-table": { - "version": "0.2.0", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.4.0", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.8.1", - "dev": true - }, - "typescript": { - "version": "4.2.4", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "dev": true - }, - "which": { - "version": "2.0.2", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "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" - } - }, - "word-wrap": { - "version": "1.2.3", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-includes": { - "version": "3.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "2.1.0", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "babel-eslint": { - "version": "10.1.0", - "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", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "balanced-match": { - "version": "1.0.2", - "dev": true - }, - "big-integer": { - "version": "1.6.48" - }, - "bn.js": { - "version": "4.12.0" - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.17.6", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001274", - "electron-to-chromium": "^1.3.886", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caniuse-lite": { - "version": "1.0.30001278", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "commander": { - "version": "2.20.3", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "core-js": { - "version": "3.19.1" - }, - "debug": { - "version": "4.3.2", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deepmerge": { - "version": "4.2.2", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "dir-glob": { - "version": "3.0.1", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "electron-to-chromium": { - "version": "1.3.889", - "dev": true - }, - "es-abstract": { - "version": "1.18.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.24.0", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - } - }, - "eslint-scope": { - "version": "5.1.1", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "3.0.0", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "fast-glob": { - "version": "3.2.6", - "dev": true, - "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" - } - }, - "fastq": { - "version": "1.11.1", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "glob": { - "version": "7.2.0", - "dev": true, - "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": "5.1.2", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "dev": true - }, - "globby": { - "version": "11.0.4", - "dev": true, - "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" - } - }, - "graceful-fs": { - "version": "4.2.8", - "dev": true - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "dev": true - }, - "immer": { - "version": "9.0.6" - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.2", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "dev": true - }, - "is-core-module": { - "version": "2.4.0", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.3", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "jest-worker": { - "version": "26.6.2", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, - "json5": { - "version": "2.2.0", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsx-ast-utils": { - "version": "3.2.0", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.chunk": { - "version": "4.2.0" - }, - "lodash.isequal": { - "version": "4.5.0" - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.7", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-dir": { - "version": "3.1.0", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "dev": true - }, - "ms": { - "version": "2.1.2", - "dev": true - }, - "node-releases": { - "version": "2.0.1", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "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.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "object.fromentries": { - "version": "2.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "dev": true - }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prop-types": { - "version": "15.7.2", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "queue-microtask": { - "version": "1.2.3", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react-is": { - "version": "16.13.1", - "dev": true - }, - "regenerator-runtime": { - "version": "0.13.9" - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "regexpp": { - "version": "3.2.0", - "dev": true - }, - "resolve": { - "version": "2.0.0-next.3", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "reusify": { - "version": "1.0.4", - "dev": true - }, - "rollup": { - "version": "2.59.0", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-analyzer": { - "version": "4.0.0", - "dev": true - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - } - }, - "rollup-plugin-typescript2": { - "version": "0.30.0", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.1.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.1.1", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "resolve": { - "version": "1.20.0", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "tslib": { - "version": "2.1.0", - "dev": true - } - } - }, - "run-parallel": { - "version": "1.2.0", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "semver": { - "version": "7.3.5", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "side-channel": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "dev": true - }, - "source-map-support": { - "version": "0.5.20", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "dev": true - }, - "string.prototype.matchall": { - "version": "4.0.5", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.trimend": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "terser": { - "version": "5.9.0", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "dev": true - } - } - }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "typescript": { - "version": "4.3.5", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "urbit-ob": { - "version": "5.0.1", - "requires": { - "bn.js": "^4.11.8", - "lodash.chunk": "^4.2.0", - "lodash.isequal": "^4.5.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "dev": true, - "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" - } - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "dev": true - } - } -} diff --git a/pkg/npm/api/package.json b/pkg/npm/api/package.json deleted file mode 100644 index e5dc09718..000000000 --- a/pkg/npm/api/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "@urbit/api", - "version": "2.1.1", - "description": "A library that provides bindings and types for Urbit's various userspace desks", - "repository": { - "type": "git", - "url": "ssh://git@github.com/urbit/urbit.git", - "directory": "pkg/npm/api" - }, - "type": "module", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "jsdelivr": "dist/urbit-api.min.js", - "unpkg": "dist/urbit-api.min.js", - "types": "dist/index.d.ts", - "files": [ - "dist/**" - ], - "scripts": { - "test": "echo \"No test specified\" && exit 0", - "build": "npm run clean && rollup -c && npx tsc -p tsconfig.json", - "prepare": "npm run build", - "watch": "rollup -c -w", - "clean": "rm -rf dist/* types/*" - }, - "author": "", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.16.0", - "big-integer": "^1.6.48", - "core-js": "^3.19.1", - "immer": "^9.0.1", - "urbit-ob": "^5.0.1" - }, - "devDependencies": { - "@babel/core": "^7.16.0", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^21.0.1", - "@rollup/plugin-node-resolve": "^13.0.6", - "@types/node": "^15.12.5", - "@typescript-eslint/eslint-plugin": "^4.28.2", - "@typescript-eslint/parser": "^4.28.2", - "@urbit/eslint-config": "^1.0.3", - "babel-eslint": "^10.1.0", - "eslint-plugin-react": "^7.24.0", - "rollup": "^2.59.0", - "rollup-plugin-analyzer": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", - "typescript": "^4.3.2" - } -} diff --git a/pkg/npm/api/rollup.config.ts b/pkg/npm/api/rollup.config.ts deleted file mode 100644 index 449bcc869..000000000 --- a/pkg/npm/api/rollup.config.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { nodeResolve } from '@rollup/plugin-node-resolve'; -import commonJS from '@rollup/plugin-commonjs'; -import { terser } from 'rollup-plugin-terser'; -import babel from '@rollup/plugin-babel'; -import typescript from 'rollup-plugin-typescript2'; -import analyze from 'rollup-plugin-analyzer' - -const input = ['./index.ts']; - -// Skip certain warnings -function onwarn(warning) { - if (warning.code === 'THIS_IS_UNDEFINED') { - return; - } - - console.warn(warning.message); -} - -export default [ - { - input, - onwarn, - plugins: [ - nodeResolve({ - extensions: ['.js', '.jsx', '.ts', '.tsx'] - }), - commonJS(), - typescript(), - babel({ - babelHelpers: 'bundled', - exclude: ['node_modules/**'] - }), - terser({ - ecma: 2017, - compress: true, - mangle: true - }) - ], - output: { - file: 'dist/urbit-api.min.js', - format: 'umd', - name: 'UrbitAPI', // this is the name of the global object - esModule: false, - exports: 'named', - sourcemap: true - } - }, - { - input, - onwarn, - plugins: [ - nodeResolve({ - extensions: ['.js', '.jsx', '.ts', '.tsx'] - }), - commonJS(), - typescript(), - analyze({ - limit: 10 - }) - ], - output: [ - { - dir: 'dist/esm', - format: 'esm', - exports: 'named', - sourcemap: true - }, - { - dir: 'dist/cjs', - format: 'cjs', - exports: 'named', - sourcemap: true - } - ] - } -]; diff --git a/pkg/npm/api/s3/index.ts b/pkg/npm/api/s3/index.ts deleted file mode 100644 index 4fed660f4..000000000 --- a/pkg/npm/api/s3/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './lib'; -export * from './types'; \ No newline at end of file diff --git a/pkg/npm/api/s3/lib.ts b/pkg/npm/api/s3/lib.ts deleted file mode 100644 index 4a114fd98..000000000 --- a/pkg/npm/api/s3/lib.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Poke } from '../lib/types'; -import { S3Update, S3UpdateAccessKeyId, S3UpdateAddBucket, S3UpdateCurrentBucket, S3UpdateEndpoint, S3UpdateRemoveBucket, S3UpdateSecretAccessKey } from './types'; - -const s3Action = ( - data: any -): Poke => ({ - app: 's3-store', - mark: 's3-action', - json: data -}); - -export const setCurrentBucket = ( - bucket: string -): Poke => s3Action({ - 'set-current-bucket': bucket -}); - -export const addBucket = ( - bucket: string -): Poke => s3Action({ - 'add-bucket': bucket -}); - -export const removeBucket = ( - bucket: string -): Poke => s3Action({ - 'remove-bucket': bucket -}); - -export const setEndpoint = ( - endpoint: string -): Poke => s3Action({ - 'set-endpoint': endpoint -}); - -export const setAccessKeyId = ( - accessKeyId: string -): Poke => s3Action({ - 'set-access-key-id': accessKeyId -}); - -export const setSecretAccessKey = ( - secretAccessKey: string -): Poke => s3Action({ - 'set-secret-access-key': secretAccessKey -}); - diff --git a/pkg/npm/api/s3/types.ts b/pkg/npm/api/s3/types.ts deleted file mode 100644 index d9fec2e37..000000000 --- a/pkg/npm/api/s3/types.ts +++ /dev/null @@ -1,60 +0,0 @@ -export interface S3Credentials { - endpoint: string; - accessKeyId: string; - secretAccessKey: string; -} - -export interface S3Configuration { - buckets: Set; - currentBucket: string; -} - -export interface S3State { - configuration: S3Configuration; - credentials: S3Credentials | null; -} - -export interface S3UpdateCredentials { - credentials: S3Credentials; -} - -export interface S3UpdateConfiguration { - configuration: { - buckets: string[]; - currentBucket: string; - } -} - -export interface S3UpdateCurrentBucket { - setCurrentBucket: string; -} - -export interface S3UpdateAddBucket { - addBucket: string; -} - -export interface S3UpdateRemoveBucket { - removeBucket: string; -} - -export interface S3UpdateEndpoint { - setEndpoint: string; -} - -export interface S3UpdateAccessKeyId { - setAccessKeyId: string; -} - -export interface S3UpdateSecretAccessKey { - setSecretAccessKey: string; -} - -export type S3Update = - S3UpdateCredentials -| S3UpdateConfiguration -| S3UpdateCurrentBucket -| S3UpdateAddBucket -| S3UpdateRemoveBucket -| S3UpdateEndpoint -| S3UpdateAccessKeyId -| S3UpdateSecretAccessKey; diff --git a/pkg/npm/api/settings/index.ts b/pkg/npm/api/settings/index.ts deleted file mode 100644 index 341e81711..000000000 --- a/pkg/npm/api/settings/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/pkg/npm/api/settings/lib.ts b/pkg/npm/api/settings/lib.ts deleted file mode 100644 index 94fca9d50..000000000 --- a/pkg/npm/api/settings/lib.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { Poke, Scry } from '../lib'; -import { PutBucket, Key, Bucket, DelBucket, Value, PutEntry, DelEntry, SettingsUpdate } from './types'; - -export const action = (data: T): Poke => ({ - app: 'settings-store', - mark: 'settings-event', - json: data -}); - -export const putBucket = ( - desk: string, - key: Key, - bucket: Bucket -): Poke => action({ - 'put-bucket': { - desk, - 'bucket-key': key, - 'bucket': bucket - } -}); - -export const delBucket = ( - desk: string, - key: Key -): Poke => action({ - 'del-bucket': { - desk, - 'bucket-key': key - } -}); - -export const putEntry = ( - desk: string, - bucket: Key, - key: Key, - value: Value -): Poke => action({ - 'put-entry': { - desk, - 'bucket-key': bucket, - 'entry-key': key, - value: value - } -}); - -export const delEntry = ( - desk: string, - bucket: Key, - key: Key -): Poke => action({ - 'del-entry': { - desk, - 'bucket-key': bucket, - 'entry-key': key - } -}); - -export const getAll: Scry = { - app: 'settings-store', - path: '/all' -}; - -export const getBucket = (desk: string, bucket: string) => ({ - app: 'settings-store', - path: `/bucket/${bucket}` -}); - -export const getEntry = (desk: string, bucket: string, entry: string) => ({ - app: 'settings-store', - path: `/entry/${desk}/${bucket}/${entry}` -}); - -export const getDeskSettings = (desk: string) => ({ - app: 'settings-store', - path: `/desk/${desk}` -}); - -export * from './types'; diff --git a/pkg/npm/api/settings/types.ts b/pkg/npm/api/settings/types.ts deleted file mode 100644 index af02c70b3..000000000 --- a/pkg/npm/api/settings/types.ts +++ /dev/null @@ -1,64 +0,0 @@ -export type Key = string; -export type Value = string | string[] | boolean | number; -export type Bucket = { [key: string]: Value; }; -export type DeskSettings = { [bucket: string]: Bucket; }; -export type Settings = { [desk: string]: Settings; } - -export interface PutBucket { - 'put-bucket': { - desk: string; - 'bucket-key': Key; - 'bucket': Bucket; - }; -} - -export interface DelBucket { - 'del-bucket': { - desk: string; - 'bucket-key': Key; - }; -} - -export interface PutEntry { - 'put-entry': { - 'bucket-key': Key; - 'entry-key': Key; - 'value'?: Value; - }; -} - -export interface DelEntry { - 'del-entry': { - desk: string; - 'bucket-key': Key; - 'entry-key': Key; - }; -} - -export interface AllData { - 'all': Settings; -} - -export interface DeskData { - desk: DeskSettings; -} - -export interface BucketData { - 'bucket': Bucket; -} - -export interface EntryData { - 'entry': Value; -} - -export type SettingsUpdate = - | PutBucket - | DelBucket - | PutEntry - | DelEntry; - -export type SettingsData = - | AllData - | BucketData - | EntryData - | DeskData; diff --git a/pkg/npm/api/term/index.ts b/pkg/npm/api/term/index.ts deleted file mode 100644 index 341e81711..000000000 --- a/pkg/npm/api/term/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './types'; -export * from './lib'; \ No newline at end of file diff --git a/pkg/npm/api/term/lib.ts b/pkg/npm/api/term/lib.ts deleted file mode 100644 index e790ed40b..000000000 --- a/pkg/npm/api/term/lib.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Scry } from '../http-api/src' -import { Poke } from '../http-api/src/types'; -import { Belt, Task, SessionTask } from './types'; - -export const pokeTask = (session: string, task: Task): Poke => ({ - app: 'herm', - mark: 'herm-task', - json: { session, ...task } -}); - -export const pokeBelt = ( - session: string, - belt: Belt -): Poke => pokeTask(session, { belt }); - -//NOTE scry will return string[] -// export const scrySessions = (): Scry => ({ -// app: 'herm', -// path: `/sessions` -// }); -//TODO remove stub once new backend lands -export const scrySessions = (): string[] => ['']; diff --git a/pkg/npm/api/term/types.ts b/pkg/npm/api/term/types.ts deleted file mode 100644 index 2920200aa..000000000 --- a/pkg/npm/api/term/types.ts +++ /dev/null @@ -1,65 +0,0 @@ -// outputs -// - -export type TermUpdate = - | Blit; - -export type Tint = - | null - | 'r' | 'g' | 'b' | 'c' | 'm' | 'y' | 'k' | 'w' - | { r: number, g: number, b: number }; - -export type Deco = null | 'br' | 'un' | 'bl'; - -export type Stye = { - deco: Deco[], - back: Tint, - fore: Tint -}; - -export type Stub = { - stye: Stye, - text: string[] -} - -export type Blit = - | { bel: null } // make a noise - | { clr: null } // clear the screen - | { hop: number | { r: number, c: number } } // set cursor col/pos - | { klr: Stub[] } // put styled - | { put: string[] } // put text at cursor - | { nel: null } // newline - | { sag: { path: string, file: string } } // save to jamfile - | { sav: { path: string, file: string } } // save to file - | { url: string } // activate url - | { wyp: null } // wipe cursor line - // - | { lin: string[] } // legacy put - | { mor: true } // legacy nel - -// inputs -// - -export type Bolt = - | string - | { aro: 'd' | 'l' | 'r' | 'u' } - | { bac: null } - | { del: null } - | { hit: { r: number, c: number } } - | { ret: null } - -export type Belt = - | Bolt - | { mod: { mod: 'ctl' | 'met' | 'hyp', key: Bolt } } - | { txt: Array } - // - | { ctl: string }; // legacy mod - -export type Task = - | { belt: Belt } - | { blew: { w: number, h: number } } - | { flow: { term: string, apps: Array<{ who: string, app: string }> } } - | { hail: null } - | { hook: null } - -export type SessionTask = { session: string } & Task diff --git a/pkg/npm/api/tsconfig.json b/pkg/npm/api/tsconfig.json deleted file mode 100644 index 73498e572..000000000 --- a/pkg/npm/api/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "outDir": "./tmp", - "module": "ESNext", - "noImplicitAny": true, - "target": "ESNext", - "pretty": true, - "moduleResolution": "node", - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "declaration": true, - "sourceMap": true, - "strict": false, - "noErrorTruncation": true - }, - "exclude": [ - "node_modules", - "./dist/**/*", - "./tmp/**/*", - "rollup.config.ts" - ], - "include": ["./*.ts"] -} diff --git a/pkg/npm/eslint-config/index.js b/pkg/npm/eslint-config/index.js deleted file mode 100644 index 1142f70fa..000000000 --- a/pkg/npm/eslint-config/index.js +++ /dev/null @@ -1,204 +0,0 @@ -const env = { - "browser": true, - "es6": true, - "node": true -}; - -const rules = { - "array-bracket-spacing": ["error", "never"], - "arrow-parens": [ - "error", - "as-needed", - { - "requireForBlockBody": true - } - ], - "arrow-spacing": "error", - "@typescript-eslint/ban-ts-comment": [2, - { - 'ts-expect-error': 'allow-with-description', - 'ts-ignore': 'allow-with-description', - 'ts-nocheck': 'allow-with-description', - 'ts-check': 'allow-with-description', - minimumDescriptionLength: 3, - }], - "@typescript-eslint/ban-types": "off", - "block-spacing": ["error", "always"], - "brace-style": ["error", "1tbs"], - "camelcase": [ - "error", - { - "properties": "never" - } - ], - "comma-dangle": ["error", "never"], - "eol-last": ["error", "always"], - "@typescript-eslint/explicit-module-boundary-types": "off", - "func-name-matching": "error", - "indent": [ - "off", - 2, - { - "ArrayExpression": "off", - "SwitchCase": 1, - "CallExpression": { - "arguments": "off" - }, - "FunctionDeclaration": { - "parameters": "off" - }, - "FunctionExpression": { - "parameters": "off" - }, - "MemberExpression": "off", - "ObjectExpression": "off", - "ImportDeclaration": "off" - } - ], - "handle-callback-err": "off", - "linebreak-style": ["error", "unix"], - "max-lines": [ - "warn", - { - "max": 300, - "skipBlankLines": true, - "skipComments": true - } - ], - "max-lines-per-function": [ - "warn", - { - "skipBlankLines": true, - "skipComments": true - } - ], - "max-statements-per-line": [ - "error", - { - "max": 1 - } - ], - "new-cap": [ - "error", - { - "newIsCap": true, - "capIsNew": false - } - ], - "new-parens": "error", - "no-buffer-constructor": "error", - "no-console": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-empty-function": "off", - "no-extra-semi": "off", - "no-fallthrough": "off", - "no-func-assign": "off", - "no-implicit-coercion": "error", - "no-multi-assign": "error", - "no-multiple-empty-lines": [ - "error", - { - "max": 1 - } - ], - "no-nested-ternary": "warn", - "no-param-reassign": "off", - "no-return-assign": "error", - "no-return-await": "off", - "no-shadow-restricted-names": "error", - "no-tabs": "error", - "no-trailing-spaces": "error", - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": [ - "error", - { - "vars": "all", - "args": "none", - "ignoreRestSiblings": false - } - ], - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": [ - "error", - { - "functions": false, - "classes": false - } - ], - "no-useless-escape": "off", - "no-var": "error", - "nonblock-statement-body-position": ["error", "below"], - "object-curly-spacing": ["error", "always"], - "padded-blocks": ["error", "never"], - "prefer-arrow-callback": "error", - "prefer-const": [ - "error", - { - "destructuring": "all", - "ignoreReadBeforeAssign": true - } - ], - "prefer-template": "off", - "quotes": ["error", "single"], - "react/display-name": "off", - "semi": ["error", "always"], - "spaced-comment": [ - "error", - "always", - { - "exceptions": ["!"] - } - ], - "space-before-blocks": "error", - "unicode-bom": ["error", "never"], - "valid-jsdoc": "error", - "wrap-iife": ["error", "inside"], - "react/jsx-closing-bracket-location": 1, - "react/jsx-tag-spacing": 1, - "react/jsx-max-props-per-line": ["error", { "maximum": 2, "when": "multiline" }], - "react/prop-types": 0 -}; - -module.exports = { - "env": env, - "extends": [ - "plugin:react/recommended", - "eslint:recommended", - ], - "settings": { - "react": { - "version": "^16.5.2" - } - }, - "parser": "babel-eslint", - "parserOptions": { - "ecmaVersion": 10, - "requireConfigFile": false, - "sourceType": "module" - }, - "root": true, - "rules": rules, - "overrides": [ - { - "files": ["**/*.ts", "**/*.tsx"], - "env": env, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { "jsx": true }, - "ecmaVersion": 10, - "requireConfigFile": false, - "sourceType": "module" - }, - "plugins": ["@typescript-eslint"], - "rules": { - ...rules, - "valid-jsdoc": "off" - } - } - ] -}; diff --git a/pkg/npm/eslint-config/package-lock.json b/pkg/npm/eslint-config/package-lock.json deleted file mode 100644 index 74e335641..000000000 --- a/pkg/npm/eslint-config/package-lock.json +++ /dev/null @@ -1,1873 +0,0 @@ -{ - "name": "@urbit/eslint-config", - "version": "1.0.3", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "dev": true - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", - "integrity": "sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "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 - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": 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==", - "dev": true, - "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==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@types/json-schema": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", - "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz", - "integrity": "sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.28.2", - "@typescript-eslint/scope-manager": "4.28.2", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz", - "integrity": "sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.2.tgz", - "integrity": "sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.28.2", - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/typescript-estree": "4.28.2", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz", - "integrity": "sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2" - } - }, - "@typescript-eslint/types": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.2.tgz", - "integrity": "sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz", - "integrity": "sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "@typescript-eslint/visitor-keys": "4.28.2", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz", - "integrity": "sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.28.2", - "eslint-visitor-keys": "^2.0.0" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - } - }, - "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-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "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" - } - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" - } - }, - "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==", - "dev": true - }, - "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "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 - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "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 - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "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==", - "dev": true, - "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=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "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" - } - }, - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "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" - } - }, - "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 - }, - "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" - } - }, - "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", - "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-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "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=", - "dev": true - }, - "eslint": { - "version": "7.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.30.0.tgz", - "integrity": "sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.2", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "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": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "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.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "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==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "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-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.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 - } - } - }, - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "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 - }, - "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" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", - "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.5" - }, - "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" - } - } - } - }, - "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==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "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" - } - }, - "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 - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.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 - } - } - }, - "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" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "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==", - "dev": true - }, - "fast-glob": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz", - "integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==", - "dev": true, - "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" - } - }, - "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==", - "dev": true - }, - "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 - }, - "fastq": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", - "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.0.tgz", - "integrity": "sha512-XprP7lDrVT+kE2c2YlfiV+IfS9zxukiIOvNamPNsImNhXadSsQEbosItdL9bUQlCZXR13SvPk20BjWSWLA7m4A==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "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 - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "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": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "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" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "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==", - "dev": true - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - }, - "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" - } - }, - "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=", - "dev": true, - "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==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true - }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "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-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "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==", - "dev": true, - "requires": { - "has-symbols": "^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 - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "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==", - "dev": true - }, - "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 - }, - "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" - } - }, - "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" - } - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "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.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "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==", - "dev": true, - "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" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "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 - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "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==", - "dev": true, - "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.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "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" - } - }, - "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" - } - }, - "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=", - "dev": true - }, - "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==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "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 - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "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==", - "dev": true - }, - "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==", - "dev": true, - "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 - }, - "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==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "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 - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "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" - } - }, - "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 - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^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" - } - }, - "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.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", - "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.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==", - "dev": true, - "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==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "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 - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.1.tgz", - "integrity": "sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ==", - "dev": true, - "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==", - "dev": true - } - } - }, - "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 - }, - "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=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "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" - } - }, - "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-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 - }, - "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "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 - }, - "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==", - "dev": true, - "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" - } - }, - "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 - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "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 - } - } -} diff --git a/pkg/npm/eslint-config/package.json b/pkg/npm/eslint-config/package.json deleted file mode 100644 index b6abd5ffc..000000000 --- a/pkg/npm/eslint-config/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@urbit/eslint-config", - "version": "1.0.3", - "description": "", - "repository": { - "type": "git", - "url": "ssh://git@github.com/urbit/urbit.git", - "directory": "pkg/npm/eslint-config" - }, - "main": "index.js", - "scripts": {}, - "author": "", - "license": "MIT", - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^4.15.0", - "@typescript-eslint/parser": "^4.15.0", - "babel-eslint": "^10.1.0", - "eslint": "^7.26.0", - "eslint-plugin-react": "^7.22.0", - "typescript": "^4.1.5" - } -} diff --git a/pkg/npm/http-api/.babelrc b/pkg/npm/http-api/.babelrc deleted file mode 100644 index ceba9f753..000000000 --- a/pkg/npm/http-api/.babelrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "presets": [ - "@babel/preset-typescript", //needed for .ts jest tests - [ - "@babel/preset-env", - { - "targets": "> 1%", - "useBuiltIns": "usage", - "corejs": "3.19.1" - } - ] - ] -} diff --git a/pkg/npm/http-api/.gitignore b/pkg/npm/http-api/.gitignore deleted file mode 100644 index 81d5c4f80..000000000 --- a/pkg/npm/http-api/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -dist -node_modules -coverage -tmp \ No newline at end of file diff --git a/pkg/npm/http-api/README.md b/pkg/npm/http-api/README.md deleted file mode 100644 index f82185bbc..000000000 --- a/pkg/npm/http-api/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Urbit Connector - -This project allows you to connect to an [Urbit](https://urbit.org) ship via a JavaScript application. - -## Example - -Check out the `example` directory for examples of how to use this code. - -1. Open `example/index.html` in your browser and follow the instructions there, or -2. With a ship running in the same fashion as indicated in the file above, run `node example/index.js` - -The code for either of these can be found in `src/example/browser.js` or `src/example/node.js`, depending on your context. - -## Design - -This library is designed to be useful for node applications that communicate with an urbit running either on the local computer or on a remote one. - -The majority of its methods are asynchronous and return Promises. This is due to the non-blocking nature of JavaScript. If used in a React app, response handlers should be bound with `this` to `setState` after a message is received. - -## NOTE -You must enable CORS requests on your urbit for this library to work in browser context. Use `+cors-registry` to see domains which have made requests to your urbit, and then approve the needed one, e.g. `|cors-approve http://zod.arvo.network`. diff --git a/pkg/npm/http-api/example/browser.js b/pkg/npm/http-api/example/browser.js deleted file mode 100644 index 2dfc71410..000000000 --- a/pkg/npm/http-api/example/browser.js +++ /dev/null @@ -1,3 +0,0 @@ -// import Urbit from '../../dist/browser'; - -// window.Urbit = Urbit; \ No newline at end of file diff --git a/pkg/npm/http-api/example/index.html b/pkg/npm/http-api/example/index.html deleted file mode 100644 index 318e67301..000000000 --- a/pkg/npm/http-api/example/index.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - Demo - - - - -
    - Show instructions -

    Assuming you are running a fakezod on port 8080, run

    - |cors-approve '{window.location.origin}' -

    in its dojo.

    -

    - Press the button to run the code below. Output will be logged. You - should see < ~zod: opening airlock in your dojo. Create - a chat and send a message to see the events logged. -

    -
    -window.airlock = await UrbitHttpApi.Urbit.authenticate({
    -    ship: 'zod',
    -    url: 'localhost:8080',
    -    code: 'lidlut-tabwed-pillex-ridrup',
    -    verbose: true
    -});
    -window.airlock.subscribe({ 
    -  app: 'graph-store', 
    -  path: '/updates',
    -  event: console.log 
    -});
    -
    - - -
    
    -  
    -  
    -
    diff --git a/pkg/npm/http-api/example/node.js b/pkg/npm/http-api/example/node.js
    deleted file mode 100644
    index bbceb0c7b..000000000
    --- a/pkg/npm/http-api/example/node.js
    +++ /dev/null
    @@ -1,14 +0,0 @@
    -// import Urbit from '../../dist/index';
    -
    -// async function blastOff() {
    -//   const airlock = await Urbit.authenticate({
    -//     ship: 'zod',
    -//     url: 'localhost:8080',
    -//     code: 'lidlut-tabwed-pillex-ridrup',
    -//     verbose: true
    -//   });
    -  
    -//   airlock.subscribe('chat-view', '/primary');
    -// }
    -
    -// blastOff();
    diff --git a/pkg/npm/http-api/jest.config.cjs b/pkg/npm/http-api/jest.config.cjs
    deleted file mode 100644
    index 90fdc0fd3..000000000
    --- a/pkg/npm/http-api/jest.config.cjs
    +++ /dev/null
    @@ -1,194 +0,0 @@
    -/*
    - * For a detailed explanation regarding each configuration property and type check, visit:
    - * https://jestjs.io/docs/configuration
    - */
    -
    -module.exports = {
    -  // All imported modules in your tests should be mocked automatically
    -  automock: false,
    -
    -  // Stop running tests after `n` failures
    -  // bail: 0,
    -
    -  // The directory where Jest should store its cached dependency information
    -  // cacheDirectory: "/private/var/folders/7w/hvrpvq7978bbb9kwkbhsn6rr0000gn/T/jest_dx",
    -
    -  // Automatically clear mock calls and instances between every test
    -  clearMocks: true,
    -
    -  // Indicates whether the coverage information should be collected while executing the test
    -  collectCoverage: true,
    -
    -  // An array of glob patterns indicating a set of files for which coverage information should be collected
    -  // collectCoverageFrom: undefined,
    -
    -  // The directory where Jest should output its coverage files
    -  coverageDirectory: 'coverage',
    -
    -  // An array of regexp pattern strings used to skip coverage collection
    -  // coveragePathIgnorePatterns: [
    -  //   "/node_modules/"
    -  // ],
    -
    -  // Indicates which provider should be used to instrument code for coverage
    -  // coverageProvider: "babel",
    -
    -  // A list of reporter names that Jest uses when writing coverage reports
    -  // coverageReporters: [
    -  //   "json",
    -  //   "text",
    -  //   "lcov",
    -  //   "clover"
    -  // ],
    -
    -  // An object that configures minimum threshold enforcement for coverage results
    -  // coverageThreshold: undefined,
    -
    -  // A path to a custom dependency extractor
    -  // dependencyExtractor: undefined,
    -
    -  // Make calling deprecated APIs throw helpful error messages
    -  // errorOnDeprecated: false,
    -
    -  // Force coverage collection from ignored files using an array of glob patterns
    -  // forceCoverageMatch: [],
    -
    -  // A path to a module which exports an async function that is triggered once before all test suites
    -  // globalSetup: undefined,
    -
    -  // A path to a module which exports an async function that is triggered once after all test suites
    -  // globalTeardown: undefined,
    -
    -  // A set of global variables that need to be available in all test environments
    -  // globals: {},
    -
    -  // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
    -  maxWorkers: 1,
    -
    -  // An array of directory names to be searched recursively up from the requiring module's location
    -  // moduleDirectories: [
    -  //   "node_modules"
    -  // ],
    -
    -  // An array of file extensions your modules use
    -  // moduleFileExtensions: [
    -  //   "js",
    -  //   "jsx",
    -  //   "ts",
    -  //   "tsx",
    -  //   "json",
    -  //   "node"
    -  // ],
    -
    -  // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
    -  // moduleNameMapper: {},
    -
    -  // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
    -  // modulePathIgnorePatterns: [],
    -
    -  // Activates notifications for test results
    -  // notify: false,
    -
    -  // An enum that specifies notification mode. Requires { notify: true }
    -  // notifyMode: "failure-change",
    -
    -  // A preset that is used as a base for Jest's configuration
    -  // preset: undefined,
    -
    -  // Run tests from one or more projects
    -  // projects: undefined,
    -
    -  // Use this configuration option to add custom reporters to Jest
    -  // reporters: undefined,
    -
    -  // Automatically reset mock state between every test
    -  // resetMocks: false,
    -
    -  // Reset the module registry before running each individual test
    -  // resetModules: false,
    -
    -  // A path to a custom resolver
    -  // resolver: undefined,
    -
    -  // Automatically restore mock state between every test
    -  // restoreMocks: false,
    -
    -  // The root directory that Jest should scan for tests and modules within
    -  // rootDir: undefined,
    -
    -  // A list of paths to directories that Jest should use to search for files in
    -  // roots: [
    -  //   ""
    -  // ],
    -
    -  // Allows you to use a custom runner instead of Jest's default test runner
    -  // runner: "jest-runner",
    -
    -  // The paths to modules that run some code to configure or set up the testing environment before each test
    -  setupFiles: ['./setupEnv.js'],
    -
    -  // A list of paths to modules that run some code to configure or set up the testing framework before each test
    -  // setupFilesAfterEnv: [],
    -
    -  // The number of seconds after which a test is considered as slow and reported as such in the results.
    -  // slowTestThreshold: 5,
    -
    -  // A list of paths to snapshot serializer modules Jest should use for snapshot testing
    -  // snapshotSerializers: [],
    -
    -  // The test environment that will be used for testing
    -  testEnvironment: 'jsdom',
    -
    -  // Options that will be passed to the testEnvironment
    -  // testEnvironmentOptions: {},
    -
    -  // Adds a location field to test results
    -  // testLocationInResults: false,
    -
    -  // The glob patterns Jest uses to detect test files
    -  // testMatch: [
    -  //   "**/__tests__/**/*.[jt]s?(x)",
    -  //   "**/?(*.)+(spec|test).[tj]s?(x)"
    -  // ],
    -
    -  // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
    -  // testPathIgnorePatterns: [
    -  //   "/node_modules/"
    -  // ],
    -
    -  // The regexp pattern or array of patterns that Jest uses to detect test files
    -  // testRegex: [],
    -
    -  // This option allows the use of a custom results processor
    -  // testResultsProcessor: undefined,
    -
    -  // This option allows use of a custom test runner
    -  // testRunner: "jest-circus/runner",
    -
    -  // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
    -  testURL: 'http://localhost',
    -
    -  // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
    -  // timers: "real",
    -
    -  // A map from regular expressions to paths to transformers
    -  // transform: undefined,
    -
    -  // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
    -  // transformIgnorePatterns: [
    -  //   "/node_modules/",
    -  //   "\\.pnp\\.[^\\/]+$"
    -  // ],
    -
    -  // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
    -  // unmockedModulePathPatterns: undefined,
    -
    -  // Indicates whether each individual test should be reported during the run
    -  // verbose: undefined,
    -
    -  // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
    -  // watchPathIgnorePatterns: [],
    -
    -  // Whether to use watchman for file crawling
    -  // watchman: true,
    -};
    diff --git a/pkg/npm/http-api/package-lock.json b/pkg/npm/http-api/package-lock.json
    deleted file mode 100644
    index 40aff042c..000000000
    --- a/pkg/npm/http-api/package-lock.json
    +++ /dev/null
    @@ -1,18370 +0,0 @@
    -{
    -	"name": "@urbit/http-api",
    -	"version": "2.1.0",
    -	"lockfileVersion": 2,
    -	"requires": true,
    -	"packages": {
    -		"": {
    -			"name": "@urbit/http-api",
    -			"version": "2.1.0",
    -			"license": "MIT",
    -			"dependencies": {
    -				"@babel/runtime": "^7.12.5",
    -				"@microsoft/fetch-event-source": "^2.0.0",
    -				"browser-or-node": "^1.3.0",
    -				"core-js": "^3.19.1"
    -			},
    -			"devDependencies": {
    -				"@babel/core": "^7.15.8",
    -				"@babel/preset-env": "^7.15.8",
    -				"@babel/preset-typescript": "^7.16.0",
    -				"@rollup/plugin-babel": "^5.3.0",
    -				"@rollup/plugin-commonjs": "^21.0.1",
    -				"@rollup/plugin-node-resolve": "^13.0.6",
    -				"@types/browser-or-node": "^1.2.0",
    -				"@types/eventsource": "^1.1.5",
    -				"@types/jest": "^26.0.24",
    -				"@types/react": "^16.9.56",
    -				"@typescript-eslint/eslint-plugin": "^4.7.0",
    -				"@typescript-eslint/parser": "^4.7.0",
    -				"babel-jest": "^27.0.6",
    -				"cross-fetch": "^3.1.4",
    -				"event-target-polyfill": "0.0.3",
    -				"fast-text-encoding": "^1.0.3",
    -				"jest": "^27.0.6",
    -				"rollup": "^2.59.0",
    -				"rollup-plugin-terser": "^7.0.2",
    -				"rollup-plugin-typescript2": "^0.30.0",
    -				"typescript": "^3.9.7",
    -				"util": "^0.12.3",
    -				"web-streams-polyfill": "^3.0.3",
    -				"yet-another-abortcontroller-polyfill": "0.0.4"
    -			}
    -		},
    -		"node_modules/@ampproject/remapping": {
    -			"version": "2.1.2",
    -			"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
    -			"integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jridgewell/trace-mapping": "^0.3.0"
    -			},
    -			"engines": {
    -				"node": ">=6.0.0"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/highlight": "^7.16.7"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/compat-data": {
    -			"version": "7.17.0",
    -			"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz",
    -			"integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/core": {
    -			"version": "7.17.5",
    -			"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
    -			"integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@ampproject/remapping": "^2.1.0",
    -				"@babel/code-frame": "^7.16.7",
    -				"@babel/generator": "^7.17.3",
    -				"@babel/helper-compilation-targets": "^7.16.7",
    -				"@babel/helper-module-transforms": "^7.16.7",
    -				"@babel/helpers": "^7.17.2",
    -				"@babel/parser": "^7.17.3",
    -				"@babel/template": "^7.16.7",
    -				"@babel/traverse": "^7.17.3",
    -				"@babel/types": "^7.17.0",
    -				"convert-source-map": "^1.7.0",
    -				"debug": "^4.1.0",
    -				"gensync": "^1.0.0-beta.2",
    -				"json5": "^2.1.2",
    -				"semver": "^6.3.0"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			},
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/babel"
    -			}
    -		},
    -		"node_modules/@babel/generator": {
    -			"version": "7.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
    -			"integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/types": "^7.17.0",
    -				"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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-create-class-features-plugin": {
    -			"version": "7.17.6",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz",
    -			"integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==",
    -			"dev": true,
    -			"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.17.0",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz",
    -			"integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-annotate-as-pure": "^7.16.7",
    -				"regexpu-core": "^5.0.1"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			},
    -			"peerDependencies": {
    -				"@babel/core": "^7.0.0"
    -			}
    -		},
    -		"node_modules/@babel/helper-define-polyfill-provider": {
    -			"version": "0.3.1",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
    -			"integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
    -			"dev": true,
    -			"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-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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/types": "^7.16.7"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/helper-module-transforms": {
    -			"version": "7.17.6",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz",
    -			"integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==",
    -			"dev": true,
    -			"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.17.3",
    -				"@babel/types": "^7.17.0"
    -			},
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/helper-remap-async-to-generator": {
    -			"version": "7.16.8",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz",
    -			"integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-annotate-as-pure": "^7.16.7",
    -				"@babel/helper-wrap-function": "^7.16.8",
    -				"@babel/types": "^7.16.8"
    -			},
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/helper-wrap-function": {
    -			"version": "7.16.8",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz",
    -			"integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-function-name": "^7.16.7",
    -				"@babel/template": "^7.16.7",
    -				"@babel/traverse": "^7.16.8",
    -				"@babel/types": "^7.16.8"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/helpers": {
    -			"version": "7.17.2",
    -			"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz",
    -			"integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/template": "^7.16.7",
    -				"@babel/traverse": "^7.17.0",
    -				"@babel/types": "^7.17.0"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/highlight": {
    -			"version": "7.16.10",
    -			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
    -			"integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
    -			"dev": true,
    -			"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/parser": {
    -			"version": "7.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz",
    -			"integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz",
    -			"integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/helper-remap-async-to-generator": "^7.16.8",
    -				"@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==",
    -			"dev": true,
    -			"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.17.6",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz",
    -			"integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-create-class-features-plugin": "^7.17.6",
    -				"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz",
    -			"integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/compat-data": "^7.17.0",
    -				"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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.11",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz",
    -			"integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-create-class-features-plugin": "^7.16.10",
    -				"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-plugin-utils": "^7.8.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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"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-async-to-generator": {
    -			"version": "7.16.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz",
    -			"integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-module-imports": "^7.16.7",
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/helper-remap-async-to-generator": "^7.16.8"
    -			},
    -			"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==",
    -			"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-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==",
    -			"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-classes": {
    -			"version": "7.16.7",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz",
    -			"integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==",
    -			"dev": true,
    -			"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==",
    -			"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-destructuring": {
    -			"version": "7.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz",
    -			"integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==",
    -			"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-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==",
    -			"dev": true,
    -			"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==",
    -			"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-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==",
    -			"dev": true,
    -			"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==",
    -			"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-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==",
    -			"dev": true,
    -			"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==",
    -			"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-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==",
    -			"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-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==",
    -			"dev": true,
    -			"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.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz",
    -			"integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz",
    -			"integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==",
    -			"dev": true,
    -			"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==",
    -			"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-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==",
    -			"dev": true,
    -			"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==",
    -			"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-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==",
    -			"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-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==",
    -			"dev": true,
    -			"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==",
    -			"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-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==",
    -			"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-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==",
    -			"dev": true,
    -			"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==",
    -			"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-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==",
    -			"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-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==",
    -			"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-typescript": {
    -			"version": "7.16.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz",
    -			"integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-create-class-features-plugin": "^7.16.7",
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/plugin-syntax-typescript": "^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==",
    -			"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-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==",
    -			"dev": true,
    -			"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.11",
    -			"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz",
    -			"integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/compat-data": "^7.16.8",
    -				"@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.8",
    -				"@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.11",
    -				"@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.8",
    -				"@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.8",
    -				"@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.8",
    -				"@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.8",
    -				"babel-plugin-polyfill-corejs2": "^0.3.0",
    -				"babel-plugin-polyfill-corejs3": "^0.5.0",
    -				"babel-plugin-polyfill-regenerator": "^0.3.0",
    -				"core-js-compat": "^3.20.2",
    -				"semver": "^6.3.0"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			},
    -			"peerDependencies": {
    -				"@babel/core": "^7.0.0-0"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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/preset-typescript": {
    -			"version": "7.16.7",
    -			"resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz",
    -			"integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/helper-validator-option": "^7.16.7",
    -				"@babel/plugin-transform-typescript": "^7.16.7"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			},
    -			"peerDependencies": {
    -				"@babel/core": "^7.0.0-0"
    -			}
    -		},
    -		"node_modules/@babel/runtime": {
    -			"version": "7.14.6",
    -			"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz",
    -			"integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==",
    -			"dependencies": {
    -				"regenerator-runtime": "^0.13.4"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/template": {
    -			"version": "7.16.7",
    -			"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
    -			"integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
    -			"dev": true,
    -			"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.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz",
    -			"integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/code-frame": "^7.16.7",
    -				"@babel/generator": "^7.17.3",
    -				"@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.17.3",
    -				"@babel/types": "^7.17.0",
    -				"debug": "^4.1.0",
    -				"globals": "^11.1.0"
    -			},
    -			"engines": {
    -				"node": ">=6.9.0"
    -			}
    -		},
    -		"node_modules/@babel/types": {
    -			"version": "7.17.0",
    -			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
    -			"integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
    -			"dev": true,
    -			"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/@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/load-nyc-config/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/@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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz",
    -			"integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"jest-message-util": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"slash": "^3.0.0"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/@jest/console/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/console/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/@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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz",
    -			"integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/console": "^27.0.6",
    -				"@jest/reporters": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@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.0.6",
    -				"jest-config": "^27.0.6",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-resolve-dependencies": "^27.0.6",
    -				"jest-runner": "^27.0.6",
    -				"jest-runtime": "^27.0.6",
    -				"jest-snapshot": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"jest-watcher": "^27.0.6",
    -				"micromatch": "^4.0.4",
    -				"p-each-series": "^2.1.0",
    -				"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/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/core/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/@jest/core/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/@jest/core/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/@jest/core/node_modules/strip-ansi": {
    -			"version": "6.0.0",
    -			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -			"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    -			"dev": true,
    -			"dependencies": {
    -				"ansi-regex": "^5.0.0"
    -			},
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz",
    -			"integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/fake-timers": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"jest-mock": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/@jest/environment/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/environment/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/@jest/environment/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/environment/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/environment/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/environment/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/environment/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/@jest/environment/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/fake-timers": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz",
    -			"integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"@sinonjs/fake-timers": "^7.0.2",
    -				"@types/node": "*",
    -				"jest-message-util": "^27.0.6",
    -				"jest-mock": "^27.0.6",
    -				"jest-util": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/@jest/fake-timers/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/fake-timers/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/@jest/fake-timers/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/fake-timers/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/fake-timers/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/fake-timers/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/fake-timers/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/@jest/fake-timers/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/globals": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz",
    -			"integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/environment": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"expect": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/@jest/globals/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/globals/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/@jest/globals/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/globals/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/globals/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/globals/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/globals/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/@jest/globals/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/reporters": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz",
    -			"integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@bcoe/v8-coverage": "^0.2.3",
    -				"@jest/console": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"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.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-worker": "^27.0.6",
    -				"slash": "^3.0.0",
    -				"source-map": "^0.6.0",
    -				"string-length": "^4.0.1",
    -				"terminal-link": "^2.0.0",
    -				"v8-to-istanbul": "^8.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/reporters/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/reporters/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/@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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz",
    -			"integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==",
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz",
    -			"integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/console": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@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-result/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/test-result/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/@jest/test-result/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/test-result/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/test-result/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/test-result/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/test-result/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/@jest/test-result/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/test-sequencer": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz",
    -			"integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/test-result": "^27.0.6",
    -				"graceful-fs": "^4.2.4",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-runtime": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/@jest/transform": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz",
    -			"integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/core": "^7.1.0",
    -				"@jest/types": "^27.0.6",
    -				"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.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"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/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/transform/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/@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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"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": "26.6.2",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
    -			"integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@types/istanbul-lib-coverage": "^2.0.0",
    -				"@types/istanbul-reports": "^3.0.0",
    -				"@types/node": "*",
    -				"@types/yargs": "^15.0.0",
    -				"chalk": "^4.0.0"
    -			},
    -			"engines": {
    -				"node": ">= 10.14.2"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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/@jridgewell/resolve-uri": {
    -			"version": "3.0.5",
    -			"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
    -			"integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=6.0.0"
    -			}
    -		},
    -		"node_modules/@jridgewell/sourcemap-codec": {
    -			"version": "1.4.11",
    -			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
    -			"integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
    -			"dev": true
    -		},
    -		"node_modules/@jridgewell/trace-mapping": {
    -			"version": "0.3.4",
    -			"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
    -			"integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jridgewell/resolve-uri": "^3.0.3",
    -				"@jridgewell/sourcemap-codec": "^1.4.10"
    -			}
    -		},
    -		"node_modules/@microsoft/fetch-event-source": {
    -			"version": "2.0.1",
    -			"resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
    -			"integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA=="
    -		},
    -		"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 8"
    -			}
    -		},
    -		"node_modules/@nodelib/fs.walk": {
    -			"version": "1.2.7",
    -			"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz",
    -			"integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@nodelib/fs.scandir": "2.1.5",
    -				"fastq": "^1.6.0"
    -			},
    -			"engines": {
    -				"node": ">= 8"
    -			}
    -		},
    -		"node_modules/@rollup/plugin-babel": {
    -			"version": "5.3.1",
    -			"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
    -			"integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==",
    -			"dev": true,
    -			"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-commonjs": {
    -			"version": "21.0.2",
    -			"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.2.tgz",
    -			"integrity": "sha512-d/OmjaLVO4j/aQX69bwpWPpbvI3TJkQuxoAk7BH8ew1PyoMBLTOuvJTjzG8oEoW7drIIqB0KCJtfFLu/2GClWg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@rollup/pluginutils": "^3.1.0",
    -				"commondir": "^1.0.1",
    -				"estree-walker": "^2.0.1",
    -				"glob": "^7.1.6",
    -				"is-reference": "^1.2.1",
    -				"magic-string": "^0.25.7",
    -				"resolve": "^1.17.0"
    -			},
    -			"engines": {
    -				"node": ">= 8.0.0"
    -			},
    -			"peerDependencies": {
    -				"rollup": "^2.38.3"
    -			}
    -		},
    -		"node_modules/@rollup/plugin-node-resolve": {
    -			"version": "13.1.3",
    -			"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz",
    -			"integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==",
    -			"dev": true,
    -			"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": "^2.42.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==",
    -			"dev": true,
    -			"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/@rollup/pluginutils/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==",
    -			"dev": true
    -		},
    -		"node_modules/@rollup/pluginutils/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==",
    -			"dev": true
    -		},
    -		"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/fake-timers": {
    -			"version": "7.1.2",
    -			"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz",
    -			"integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@sinonjs/commons": "^1.7.0"
    -			}
    -		},
    -		"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.15",
    -			"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz",
    -			"integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==",
    -			"dev": 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.3",
    -			"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
    -			"integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
    -			"dev": 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==",
    -			"dev": 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==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/types": "^7.3.0"
    -			}
    -		},
    -		"node_modules/@types/browser-or-node": {
    -			"version": "1.3.0",
    -			"resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.0.tgz",
    -			"integrity": "sha512-MVetr65IR7RdJbUxVHsaPFaXAO8fi89zv1g8L/mHygh1Q7xnnK02XZLwfMh57FOpTO6gtnagoPMQ/UOFfctXRQ==",
    -			"dev": true
    -		},
    -		"node_modules/@types/estree": {
    -			"version": "0.0.49",
    -			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.49.tgz",
    -			"integrity": "sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw==",
    -			"dev": true
    -		},
    -		"node_modules/@types/eventsource": {
    -			"version": "1.1.6",
    -			"resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.6.tgz",
    -			"integrity": "sha512-y4xcLJ+lcoZ6mN9ndSdKOWg24Nj5uQc4Z/NRdy3HbiGGt5hfH3RLwAXr6V+RzGzOljAk48a09n6iY4BMNumEng==",
    -			"dev": true
    -		},
    -		"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/istanbul-lib-coverage": {
    -			"version": "2.0.3",
    -			"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
    -			"integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
    -			"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": "26.0.24",
    -			"resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz",
    -			"integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==",
    -			"dev": true,
    -			"dependencies": {
    -				"jest-diff": "^26.0.0",
    -				"pretty-format": "^26.0.0"
    -			}
    -		},
    -		"node_modules/@types/json-schema": {
    -			"version": "7.0.8",
    -			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz",
    -			"integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==",
    -			"dev": true
    -		},
    -		"node_modules/@types/node": {
    -			"version": "16.0.0",
    -			"resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz",
    -			"integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==",
    -			"dev": true
    -		},
    -		"node_modules/@types/prettier": {
    -			"version": "2.3.2",
    -			"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz",
    -			"integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==",
    -			"dev": true
    -		},
    -		"node_modules/@types/prop-types": {
    -			"version": "15.7.3",
    -			"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
    -			"integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==",
    -			"dev": true
    -		},
    -		"node_modules/@types/react": {
    -			"version": "16.14.10",
    -			"resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.10.tgz",
    -			"integrity": "sha512-QadBsMyF6ldjEAXEhsmEW/L0uBDJT8yw7Qoe5sRnEKVrzMkiYoJwqoL5TKJOlArsn/wvIJM/XdVzkdL6+AS64Q==",
    -			"dev": true,
    -			"dependencies": {
    -				"@types/prop-types": "*",
    -				"@types/scheduler": "*",
    -				"csstype": "^3.0.2"
    -			}
    -		},
    -		"node_modules/@types/resolve": {
    -			"version": "1.17.1",
    -			"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
    -			"integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"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/yargs": {
    -			"version": "15.0.14",
    -			"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz",
    -			"integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==",
    -			"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": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz",
    -			"integrity": "sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@typescript-eslint/experimental-utils": "4.28.2",
    -				"@typescript-eslint/scope-manager": "4.28.2",
    -				"debug": "^4.3.1",
    -				"functional-red-black-tree": "^1.0.1",
    -				"regexpp": "^3.1.0",
    -				"semver": "^7.3.5",
    -				"tsutils": "^3.21.0"
    -			},
    -			"engines": {
    -				"node": "^10.12.0 || >=12.0.0"
    -			},
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/typescript-eslint"
    -			},
    -			"peerDependencies": {
    -				"@typescript-eslint/parser": "^4.0.0",
    -				"eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
    -			},
    -			"peerDependenciesMeta": {
    -				"typescript": {
    -					"optional": true
    -				}
    -			}
    -		},
    -		"node_modules/@typescript-eslint/eslint-plugin/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/@typescript-eslint/experimental-utils": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz",
    -			"integrity": "sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@types/json-schema": "^7.0.7",
    -				"@typescript-eslint/scope-manager": "4.28.2",
    -				"@typescript-eslint/types": "4.28.2",
    -				"@typescript-eslint/typescript-estree": "4.28.2",
    -				"eslint-scope": "^5.1.1",
    -				"eslint-utils": "^3.0.0"
    -			},
    -			"engines": {
    -				"node": "^10.12.0 || >=12.0.0"
    -			},
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/typescript-eslint"
    -			},
    -			"peerDependencies": {
    -				"eslint": "*"
    -			}
    -		},
    -		"node_modules/@typescript-eslint/parser": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.2.tgz",
    -			"integrity": "sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w==",
    -			"dev": true,
    -			"dependencies": {
    -				"@typescript-eslint/scope-manager": "4.28.2",
    -				"@typescript-eslint/types": "4.28.2",
    -				"@typescript-eslint/typescript-estree": "4.28.2",
    -				"debug": "^4.3.1"
    -			},
    -			"engines": {
    -				"node": "^10.12.0 || >=12.0.0"
    -			},
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/typescript-eslint"
    -			},
    -			"peerDependencies": {
    -				"eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
    -			},
    -			"peerDependenciesMeta": {
    -				"typescript": {
    -					"optional": true
    -				}
    -			}
    -		},
    -		"node_modules/@typescript-eslint/scope-manager": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz",
    -			"integrity": "sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A==",
    -			"dev": true,
    -			"dependencies": {
    -				"@typescript-eslint/types": "4.28.2",
    -				"@typescript-eslint/visitor-keys": "4.28.2"
    -			},
    -			"engines": {
    -				"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
    -			},
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/typescript-eslint"
    -			}
    -		},
    -		"node_modules/@typescript-eslint/types": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.2.tgz",
    -			"integrity": "sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
    -			},
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/typescript-eslint"
    -			}
    -		},
    -		"node_modules/@typescript-eslint/typescript-estree": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz",
    -			"integrity": "sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@typescript-eslint/types": "4.28.2",
    -				"@typescript-eslint/visitor-keys": "4.28.2",
    -				"debug": "^4.3.1",
    -				"globby": "^11.0.3",
    -				"is-glob": "^4.0.1",
    -				"semver": "^7.3.5",
    -				"tsutils": "^3.21.0"
    -			},
    -			"engines": {
    -				"node": "^10.12.0 || >=12.0.0"
    -			},
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/typescript-eslint"
    -			},
    -			"peerDependenciesMeta": {
    -				"typescript": {
    -					"optional": true
    -				}
    -			}
    -		},
    -		"node_modules/@typescript-eslint/typescript-estree/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/@typescript-eslint/visitor-keys": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz",
    -			"integrity": "sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w==",
    -			"dev": true,
    -			"dependencies": {
    -				"@typescript-eslint/types": "4.28.2",
    -				"eslint-visitor-keys": "^2.0.0"
    -			},
    -			"engines": {
    -				"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
    -			},
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/typescript-eslint"
    -			}
    -		},
    -		"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.4.1",
    -			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
    -			"integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
    -			"dev": true,
    -			"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-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/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-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==",
    -			"dev": true,
    -			"dependencies": {
    -				"color-convert": "^1.9.0"
    -			},
    -			"engines": {
    -				"node": ">=4"
    -			}
    -		},
    -		"node_modules/anymatch": {
    -			"version": "3.1.2",
    -			"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
    -			"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
    -			"dev": true,
    -			"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/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/asynckit": {
    -			"version": "0.4.0",
    -			"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
    -			"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
    -			"dev": true
    -		},
    -		"node_modules/available-typed-arrays": {
    -			"version": "1.0.4",
    -			"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz",
    -			"integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/babel-jest": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz",
    -			"integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/babel__core": "^7.1.14",
    -				"babel-plugin-istanbul": "^6.0.0",
    -				"babel-preset-jest": "^27.0.6",
    -				"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/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/babel-jest/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/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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"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-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==",
    -			"dev": true,
    -			"dependencies": {
    -				"object.assign": "^4.1.0"
    -			}
    -		},
    -		"node_modules/babel-plugin-istanbul": {
    -			"version": "6.0.0",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
    -			"integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
    -			"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": "^4.0.0",
    -				"test-exclude": "^6.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/babel-plugin-jest-hoist": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz",
    -			"integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==",
    -			"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.1",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
    -			"integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/compat-data": "^7.13.11",
    -				"@babel/helper-define-polyfill-provider": "^0.3.1",
    -				"semver": "^6.1.1"
    -			},
    -			"peerDependencies": {
    -				"@babel/core": "^7.0.0-0"
    -			}
    -		},
    -		"node_modules/babel-plugin-polyfill-corejs3": {
    -			"version": "0.5.2",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz",
    -			"integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-define-polyfill-provider": "^0.3.1",
    -				"core-js-compat": "^3.21.0"
    -			},
    -			"peerDependencies": {
    -				"@babel/core": "^7.0.0-0"
    -			}
    -		},
    -		"node_modules/babel-plugin-polyfill-regenerator": {
    -			"version": "0.3.1",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
    -			"integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/helper-define-polyfill-provider": "^0.3.1"
    -			},
    -			"peerDependencies": {
    -				"@babel/core": "^7.0.0-0"
    -			}
    -		},
    -		"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.0.6",
    -			"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz",
    -			"integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==",
    -			"dev": true,
    -			"dependencies": {
    -				"babel-plugin-jest-hoist": "^27.0.6",
    -				"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/balanced-match": {
    -			"version": "1.0.2",
    -			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
    -			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"fill-range": "^7.0.1"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/browser-or-node": {
    -			"version": "1.3.0",
    -			"resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz",
    -			"integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg=="
    -		},
    -		"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/browserslist": {
    -			"version": "4.20.0",
    -			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz",
    -			"integrity": "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"caniuse-lite": "^1.0.30001313",
    -				"electron-to-chromium": "^1.4.76",
    -				"escalade": "^3.1.1",
    -				"node-releases": "^2.0.2",
    -				"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-from": {
    -			"version": "1.1.1",
    -			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
    -			"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=6"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/sindresorhus"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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/caniuse-lite": {
    -			"version": "1.0.30001314",
    -			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz",
    -			"integrity": "sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw==",
    -			"dev": true,
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/browserslist"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"ansi-styles": "^3.2.1",
    -				"escape-string-regexp": "^1.0.5",
    -				"supports-color": "^5.3.0"
    -			},
    -			"engines": {
    -				"node": ">=4"
    -			}
    -		},
    -		"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/ci-info": {
    -			"version": "3.2.0",
    -			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz",
    -			"integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==",
    -			"dev": true
    -		},
    -		"node_modules/cjs-module-lexer": {
    -			"version": "1.2.1",
    -			"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz",
    -			"integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"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=",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"node_modules/commondir": {
    -			"version": "1.0.1",
    -			"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
    -			"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
    -			"dev": true
    -		},
    -		"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=",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"safe-buffer": "~5.1.1"
    -			}
    -		},
    -		"node_modules/convert-source-map/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==",
    -			"dev": true
    -		},
    -		"node_modules/core-js": {
    -			"version": "3.21.1",
    -			"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz",
    -			"integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig==",
    -			"hasInstallScript": true,
    -			"funding": {
    -				"type": "opencollective",
    -				"url": "https://opencollective.com/core-js"
    -			}
    -		},
    -		"node_modules/core-js-compat": {
    -			"version": "3.21.1",
    -			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz",
    -			"integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"bin": {
    -				"semver": "bin/semver.js"
    -			}
    -		},
    -		"node_modules/cross-fetch": {
    -			"version": "3.1.4",
    -			"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz",
    -			"integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"node-fetch": "2.6.1"
    -			}
    -		},
    -		"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/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.8",
    -			"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
    -			"integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==",
    -			"dev": true
    -		},
    -		"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.2",
    -			"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
    -			"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
    -			"dev": true,
    -			"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-is": {
    -			"version": "0.1.3",
    -			"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
    -			"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"object-keys": "^1.0.12"
    -			},
    -			"engines": {
    -				"node": ">= 0.4"
    -			}
    -		},
    -		"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=",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.4.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": "26.6.2",
    -			"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
    -			"integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 10.14.2"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"path-type": "^4.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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/electron-to-chromium": {
    -			"version": "1.4.82",
    -			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.82.tgz",
    -			"integrity": "sha512-Ks+ANzLoIrFDUOJdjxYMH6CMKB8UQo5modAwvSZTxgF+vEs/U7G5IbWFUp6dS4klPkTDVdxbORuk8xAXXhMsWw==",
    -			"dev": true
    -		},
    -		"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/es-abstract": {
    -			"version": "1.18.3",
    -			"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
    -			"integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
    -			"dev": true,
    -			"dependencies": {
    -				"call-bind": "^1.0.2",
    -				"es-to-primitive": "^1.2.1",
    -				"function-bind": "^1.1.1",
    -				"get-intrinsic": "^1.1.1",
    -				"has": "^1.0.3",
    -				"has-symbols": "^1.0.2",
    -				"is-callable": "^1.2.3",
    -				"is-negative-zero": "^2.0.1",
    -				"is-regex": "^1.1.3",
    -				"is-string": "^1.0.6",
    -				"object-inspect": "^1.10.3",
    -				"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-to-primitive": {
    -			"version": "1.2.1",
    -			"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
    -			"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
    -			"dev": true,
    -			"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/escalade": {
    -			"version": "3.1.1",
    -			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
    -			"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
    -			"dev": true,
    -			"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=",
    -			"dev": true,
    -			"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/estraverse": {
    -			"version": "5.2.0",
    -			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
    -			"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=4.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/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==",
    -			"dev": true,
    -			"dependencies": {
    -				"esrecurse": "^4.3.0",
    -				"estraverse": "^4.1.1"
    -			},
    -			"engines": {
    -				"node": ">=8.0.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-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/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/esrecurse": {
    -			"version": "4.3.0",
    -			"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
    -			"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
    -			"dev": true,
    -			"dependencies": {
    -				"estraverse": "^5.2.0"
    -			},
    -			"engines": {
    -				"node": ">=4.0"
    -			}
    -		},
    -		"node_modules/esrecurse/node_modules/estraverse": {
    -			"version": "5.2.0",
    -			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
    -			"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=4.0"
    -			}
    -		},
    -		"node_modules/estraverse": {
    -			"version": "4.3.0",
    -			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
    -			"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=4.0"
    -			}
    -		},
    -		"node_modules/estree-walker": {
    -			"version": "2.0.2",
    -			"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
    -			"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
    -			"dev": true
    -		},
    -		"node_modules/esutils": {
    -			"version": "2.0.3",
    -			"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
    -			"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.10.0"
    -			}
    -		},
    -		"node_modules/event-target-polyfill": {
    -			"version": "0.0.3",
    -			"resolved": "https://registry.npmjs.org/event-target-polyfill/-/event-target-polyfill-0.0.3.tgz",
    -			"integrity": "sha512-ZMc6UuvmbinrCk4RzGyVmRyIsAyxMRlp4CqSrcQRO8Dy0A9ldbiRy5kdtBj4OtP7EClGdqGfIqo9JmOClMsGLQ==",
    -			"dev": true
    -		},
    -		"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.0.6",
    -			"resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz",
    -			"integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-styles": "^5.0.0",
    -				"jest-get-type": "^27.0.6",
    -				"jest-matcher-utils": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-regex-util": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/expect/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/expect/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/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/expect/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/expect/node_modules/chalk/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/expect/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/expect/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/expect/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/expect/node_modules/jest-get-type": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -			"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/expect/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/fast-glob": {
    -			"version": "3.2.6",
    -			"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz",
    -			"integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==",
    -			"dev": true,
    -			"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-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==",
    -			"dev": true
    -		},
    -		"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-text-encoding": {
    -			"version": "1.0.3",
    -			"resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
    -			"integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==",
    -			"dev": true
    -		},
    -		"node_modules/fastq": {
    -			"version": "1.11.1",
    -			"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz",
    -			"integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==",
    -			"dev": true,
    -			"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/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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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-up": {
    -			"version": "4.1.0",
    -			"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
    -			"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
    -			"dev": true,
    -			"dependencies": {
    -				"locate-path": "^5.0.0",
    -				"path-exists": "^4.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/foreach": {
    -			"version": "2.0.5",
    -			"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
    -			"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
    -			"dev": true
    -		},
    -		"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": "8.1.0",
    -			"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
    -			"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
    -			"dev": true,
    -			"dependencies": {
    -				"graceful-fs": "^4.2.0",
    -				"jsonfile": "^4.0.0",
    -				"universalify": "^0.1.0"
    -			},
    -			"engines": {
    -				"node": ">=6 <7 || >=8"
    -			}
    -		},
    -		"node_modules/fs.realpath": {
    -			"version": "1.0.0",
    -			"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
    -			"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
    -			"dev": true
    -		},
    -		"node_modules/fsevents": {
    -			"version": "2.3.2",
    -			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
    -			"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"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/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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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-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/glob": {
    -			"version": "7.1.7",
    -			"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
    -			"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
    -			"dev": true,
    -			"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": "5.1.2",
    -			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
    -			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
    -			"dev": true,
    -			"dependencies": {
    -				"is-glob": "^4.0.1"
    -			},
    -			"engines": {
    -				"node": ">= 6"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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/graceful-fs": {
    -			"version": "4.2.6",
    -			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
    -			"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"function-bind": "^1.1.1"
    -			},
    -			"engines": {
    -				"node": ">= 0.4.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==",
    -			"dev": true,
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/has-flag": {
    -			"version": "3.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
    -			"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=4"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"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/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-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/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/ignore": {
    -			"version": "5.1.8",
    -			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
    -			"integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 4"
    -			}
    -		},
    -		"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=",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"node_modules/is-arguments": {
    -			"version": "1.1.0",
    -			"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
    -			"integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
    -			"dev": true,
    -			"dependencies": {
    -				"call-bind": "^1.0.0"
    -			},
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/is-bigint": {
    -			"version": "1.0.2",
    -			"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
    -			"integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
    -			"dev": true,
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/is-boolean-object": {
    -			"version": "1.1.1",
    -			"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
    -			"integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
    -			"dev": true,
    -			"dependencies": {
    -				"call-bind": "^1.0.2"
    -			},
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/is-callable": {
    -			"version": "1.2.3",
    -			"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
    -			"integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/is-ci": {
    -			"version": "3.0.0",
    -			"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
    -			"integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"ci-info": "^3.1.1"
    -			},
    -			"bin": {
    -				"is-ci": "bin.js"
    -			}
    -		},
    -		"node_modules/is-core-module": {
    -			"version": "2.4.0",
    -			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
    -			"integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
    -			"dev": true,
    -			"dependencies": {
    -				"has": "^1.0.3"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/is-date-object": {
    -			"version": "1.0.4",
    -			"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
    -			"integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
    -			"dev": true,
    -			"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=",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.10.0"
    -			}
    -		},
    -		"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.9",
    -			"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz",
    -			"integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/is-glob": {
    -			"version": "4.0.1",
    -			"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
    -			"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
    -			"dev": true,
    -			"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=",
    -			"dev": true
    -		},
    -		"node_modules/is-negative-zero": {
    -			"version": "2.0.1",
    -			"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
    -			"integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.12.0"
    -			}
    -		},
    -		"node_modules/is-number-object": {
    -			"version": "1.0.5",
    -			"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
    -			"integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"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-reference": {
    -			"version": "1.2.1",
    -			"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
    -			"integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@types/estree": "*"
    -			}
    -		},
    -		"node_modules/is-regex": {
    -			"version": "1.1.3",
    -			"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
    -			"integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"call-bind": "^1.0.2",
    -				"has-symbols": "^1.0.2"
    -			},
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/is-string": {
    -			"version": "1.0.6",
    -			"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
    -			"integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 0.4"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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.5",
    -			"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz",
    -			"integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==",
    -			"dev": true,
    -			"dependencies": {
    -				"available-typed-arrays": "^1.0.2",
    -				"call-bind": "^1.0.2",
    -				"es-abstract": "^1.18.0-next.2",
    -				"foreach": "^2.0.5",
    -				"has-symbols": "^1.0.1"
    -			},
    -			"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/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/istanbul-lib-coverage": {
    -			"version": "3.0.0",
    -			"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
    -			"integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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/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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"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.0",
    -			"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
    -			"integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
    -			"dev": true,
    -			"dependencies": {
    -				"debug": "^4.1.1",
    -				"istanbul-lib-coverage": "^3.0.0",
    -				"source-map": "^0.6.1"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.0.2",
    -			"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
    -			"integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
    -			"dev": true,
    -			"dependencies": {
    -				"html-escaper": "^2.0.0",
    -				"istanbul-lib-report": "^3.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz",
    -			"integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/core": "^27.0.6",
    -				"import-local": "^3.0.2",
    -				"jest-cli": "^27.0.6"
    -			},
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz",
    -			"integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"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-changed-files/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-changed-files/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/jest-changed-files/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-changed-files/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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-changed-files/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-changed-files/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-changed-files/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/jest-changed-files/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/jest-changed-files/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-changed-files/node_modules/is-stream": {
    -			"version": "2.0.0",
    -			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
    -			"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-changed-files/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/jest-changed-files/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-circus": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz",
    -			"integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/environment": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"co": "^4.6.0",
    -				"dedent": "^0.7.0",
    -				"expect": "^27.0.6",
    -				"is-generator-fn": "^2.0.0",
    -				"jest-each": "^27.0.6",
    -				"jest-matcher-utils": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-runtime": "^27.0.6",
    -				"jest-snapshot": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"pretty-format": "^27.0.6",
    -				"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/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-circus/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/jest-circus/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-circus/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-circus/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/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-config": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz",
    -			"integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/core": "^7.1.0",
    -				"@jest/test-sequencer": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"babel-jest": "^27.0.6",
    -				"chalk": "^4.0.0",
    -				"deepmerge": "^4.2.2",
    -				"glob": "^7.1.1",
    -				"graceful-fs": "^4.2.4",
    -				"is-ci": "^3.0.0",
    -				"jest-circus": "^27.0.6",
    -				"jest-environment-jsdom": "^27.0.6",
    -				"jest-environment-node": "^27.0.6",
    -				"jest-get-type": "^27.0.6",
    -				"jest-jasmine2": "^27.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-runner": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"micromatch": "^4.0.4",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"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/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-config/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/jest-config/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-config/node_modules/jest-get-type": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -			"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-config/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-config/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/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": "26.6.2",
    -			"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
    -			"integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
    -			"dev": true,
    -			"dependencies": {
    -				"chalk": "^4.0.0",
    -				"diff-sequences": "^26.6.2",
    -				"jest-get-type": "^26.3.0",
    -				"pretty-format": "^26.6.2"
    -			},
    -			"engines": {
    -				"node": ">= 10.14.2"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz",
    -			"integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==",
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz",
    -			"integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"chalk": "^4.0.0",
    -				"jest-get-type": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-each/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-each/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/jest-each/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-each/node_modules/jest-get-type": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -			"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-each/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-each/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/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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz",
    -			"integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/environment": "^27.0.6",
    -				"@jest/fake-timers": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"jest-mock": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jsdom": "^16.6.0"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-environment-jsdom/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-environment-jsdom/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/jest-environment-jsdom/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-environment-jsdom/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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-environment-jsdom/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-environment-jsdom/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-environment-jsdom/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-environment-jsdom/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-node": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz",
    -			"integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/environment": "^27.0.6",
    -				"@jest/fake-timers": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"jest-mock": "^27.0.6",
    -				"jest-util": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-environment-node/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-environment-node/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/jest-environment-node/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-environment-node/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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-environment-node/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-environment-node/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-environment-node/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-environment-node/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-get-type": {
    -			"version": "26.3.0",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
    -			"integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 10.14.2"
    -			}
    -		},
    -		"node_modules/jest-haste-map": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz",
    -			"integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"@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.0.6",
    -				"jest-serializer": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-worker": "^27.0.6",
    -				"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-haste-map/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-haste-map/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/jest-haste-map/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-haste-map/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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-haste-map/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-haste-map/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-haste-map/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-haste-map/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-jasmine2": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz",
    -			"integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/traverse": "^7.1.0",
    -				"@jest/environment": "^27.0.6",
    -				"@jest/source-map": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"co": "^4.6.0",
    -				"expect": "^27.0.6",
    -				"is-generator-fn": "^2.0.0",
    -				"jest-each": "^27.0.6",
    -				"jest-matcher-utils": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-runtime": "^27.0.6",
    -				"jest-snapshot": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"pretty-format": "^27.0.6",
    -				"throat": "^6.0.1"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-jasmine2/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-jasmine2/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/jest-jasmine2/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-jasmine2/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-jasmine2/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/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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz",
    -			"integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"jest-get-type": "^27.0.6",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-leak-detector/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-leak-detector/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/jest-leak-detector/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-leak-detector/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/jest-leak-detector/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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-leak-detector/node_modules/chalk/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-leak-detector/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-leak-detector/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-leak-detector/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-leak-detector/node_modules/jest-get-type": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -			"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-leak-detector/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-leak-detector/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-matcher-utils": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz",
    -			"integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==",
    -			"dev": true,
    -			"dependencies": {
    -				"chalk": "^4.0.0",
    -				"jest-diff": "^27.0.6",
    -				"jest-get-type": "^27.0.6",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-matcher-utils/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-matcher-utils/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/jest-matcher-utils/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/diff-sequences": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
    -			"integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-matcher-utils/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-matcher-utils/node_modules/jest-diff": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz",
    -			"integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==",
    -			"dev": true,
    -			"dependencies": {
    -				"chalk": "^4.0.0",
    -				"diff-sequences": "^27.0.6",
    -				"jest-get-type": "^27.0.6",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-matcher-utils/node_modules/jest-get-type": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -			"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-matcher-utils/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-matcher-utils/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/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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz",
    -			"integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/code-frame": "^7.12.13",
    -				"@jest/types": "^27.0.6",
    -				"@types/stack-utils": "^2.0.0",
    -				"chalk": "^4.0.0",
    -				"graceful-fs": "^4.2.4",
    -				"micromatch": "^4.0.4",
    -				"pretty-format": "^27.0.6",
    -				"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/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-message-util/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/jest-message-util/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-message-util/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-message-util/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/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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz",
    -			"integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-mock/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-mock/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/jest-mock/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-mock/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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-mock/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-mock/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-mock/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-mock/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-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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz",
    -			"integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-resolve": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz",
    -			"integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"chalk": "^4.0.0",
    -				"escalade": "^3.1.1",
    -				"graceful-fs": "^4.2.4",
    -				"jest-pnp-resolver": "^1.2.2",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"resolve": "^1.20.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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz",
    -			"integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-snapshot": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-resolve-dependencies/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-resolve-dependencies/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/jest-resolve-dependencies/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-dependencies/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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-dependencies/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-dependencies/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-dependencies/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-resolve-dependencies/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-resolve/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-resolve/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/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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz",
    -			"integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/console": "^27.0.6",
    -				"@jest/environment": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"emittery": "^0.8.1",
    -				"exit": "^0.1.2",
    -				"graceful-fs": "^4.2.4",
    -				"jest-docblock": "^27.0.6",
    -				"jest-environment-jsdom": "^27.0.6",
    -				"jest-environment-node": "^27.0.6",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-leak-detector": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-runtime": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-worker": "^27.0.6",
    -				"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/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-runner/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/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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz",
    -			"integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/console": "^27.0.6",
    -				"@jest/environment": "^27.0.6",
    -				"@jest/fake-timers": "^27.0.6",
    -				"@jest/globals": "^27.0.6",
    -				"@jest/source-map": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/yargs": "^16.0.0",
    -				"chalk": "^4.0.0",
    -				"cjs-module-lexer": "^1.0.0",
    -				"collect-v8-coverage": "^1.0.0",
    -				"exit": "^0.1.2",
    -				"glob": "^7.1.3",
    -				"graceful-fs": "^4.2.4",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-mock": "^27.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-snapshot": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"slash": "^3.0.0",
    -				"strip-bom": "^4.0.0",
    -				"yargs": "^16.0.3"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-runtime/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-runtime/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/jest-runtime/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/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/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/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/jest-runtime/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-runtime/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/jest-runtime/node_modules/string-width": {
    -			"version": "4.2.2",
    -			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
    -			"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
    -			"dev": true,
    -			"dependencies": {
    -				"emoji-regex": "^8.0.0",
    -				"is-fullwidth-code-point": "^3.0.0",
    -				"strip-ansi": "^6.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-runtime/node_modules/strip-ansi": {
    -			"version": "6.0.0",
    -			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -			"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    -			"dev": true,
    -			"dependencies": {
    -				"ansi-regex": "^5.0.0"
    -			},
    -			"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-runtime/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/jest-runtime/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/jest-runtime/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/jest-runtime/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/jest-serializer": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz",
    -			"integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==",
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz",
    -			"integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==",
    -			"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.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@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.0.6",
    -				"graceful-fs": "^4.2.4",
    -				"jest-diff": "^27.0.6",
    -				"jest-get-type": "^27.0.6",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-matcher-utils": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"natural-compare": "^1.4.0",
    -				"pretty-format": "^27.0.6",
    -				"semver": "^7.3.2"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-snapshot/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-snapshot/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/jest-snapshot/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/diff-sequences": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
    -			"integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-snapshot/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-snapshot/node_modules/jest-diff": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz",
    -			"integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==",
    -			"dev": true,
    -			"dependencies": {
    -				"chalk": "^4.0.0",
    -				"diff-sequences": "^27.0.6",
    -				"jest-get-type": "^27.0.6",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-snapshot/node_modules/jest-get-type": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -			"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-snapshot/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-snapshot/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/jest-snapshot/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/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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz",
    -			"integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"graceful-fs": "^4.2.4",
    -				"is-ci": "^3.0.0",
    -				"picomatch": "^2.2.3"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-util/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-util/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/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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz",
    -			"integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"camelcase": "^6.2.0",
    -				"chalk": "^4.0.0",
    -				"jest-get-type": "^27.0.6",
    -				"leven": "^3.1.0",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-validate/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-validate/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/jest-validate/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.0",
    -			"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
    -			"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=10"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/sindresorhus"
    -			}
    -		},
    -		"node_modules/jest-validate/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest-validate/node_modules/jest-get-type": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -			"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -			"dev": true,
    -			"engines": {
    -				"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
    -			}
    -		},
    -		"node_modules/jest-validate/node_modules/pretty-format": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -			"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-regex": "^5.0.0",
    -				"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/jest-validate/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/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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz",
    -			"integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"ansi-escapes": "^4.2.1",
    -				"chalk": "^4.0.0",
    -				"jest-util": "^27.0.6",
    -				"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/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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-watcher/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/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.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz",
    -			"integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==",
    -			"dev": true,
    -			"dependencies": {
    -				"@types/node": "*",
    -				"merge-stream": "^2.0.0",
    -				"supports-color": "^8.0.0"
    -			},
    -			"engines": {
    -				"node": ">= 10.13.0"
    -			}
    -		},
    -		"node_modules/jest-worker/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"has-flag": "^4.0.0"
    -			},
    -			"engines": {
    -				"node": ">=10"
    -			},
    -			"funding": {
    -				"url": "https://github.com/chalk/supports-color?sponsor=1"
    -			}
    -		},
    -		"node_modules/jest/node_modules/@jest/types": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -			"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -			"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/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/jest/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/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/jest/node_modules/chalk": {
    -			"version": "4.1.1",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -			"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -			"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/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/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/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/jest/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/jest/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest/node_modules/import-local": {
    -			"version": "3.0.2",
    -			"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
    -			"integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
    -			"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/jest/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/jest/node_modules/jest-cli": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz",
    -			"integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/core": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"chalk": "^4.0.0",
    -				"exit": "^0.1.2",
    -				"graceful-fs": "^4.2.4",
    -				"import-local": "^3.0.2",
    -				"jest-config": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"prompts": "^2.0.1",
    -				"yargs": "^16.0.3"
    -			},
    -			"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/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/jest/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/jest/node_modules/string-width": {
    -			"version": "4.2.2",
    -			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
    -			"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
    -			"dev": true,
    -			"dependencies": {
    -				"emoji-regex": "^8.0.0",
    -				"is-fullwidth-code-point": "^3.0.0",
    -				"strip-ansi": "^6.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/jest/node_modules/strip-ansi": {
    -			"version": "6.0.0",
    -			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -			"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    -			"dev": true,
    -			"dependencies": {
    -				"ansi-regex": "^5.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/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/jest/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/jest/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/jest/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/jest/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/js-tokens": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
    -			"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
    -			"dev": true
    -		},
    -		"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.6.0",
    -			"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz",
    -			"integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==",
    -			"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.5",
    -				"xml-name-validator": "^3.0.0"
    -			},
    -			"engines": {
    -				"node": ">=10"
    -			},
    -			"peerDependencies": {
    -				"canvas": "^2.5.0"
    -			},
    -			"peerDependenciesMeta": {
    -				"canvas": {
    -					"optional": true
    -				}
    -			}
    -		},
    -		"node_modules/jsdom/node_modules/ws": {
    -			"version": "7.5.3",
    -			"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
    -			"integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
    -			"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/jsesc": {
    -			"version": "2.5.2",
    -			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
    -			"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
    -			"dev": true,
    -			"bin": {
    -				"jsesc": "bin/jsesc"
    -			},
    -			"engines": {
    -				"node": ">=4"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"minimist": "^1.2.5"
    -			},
    -			"bin": {
    -				"json5": "lib/cli.js"
    -			},
    -			"engines": {
    -				"node": ">=6"
    -			}
    -		},
    -		"node_modules/jsonfile": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
    -			"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
    -			"dev": true,
    -			"optionalDependencies": {
    -				"graceful-fs": "^4.1.6"
    -			}
    -		},
    -		"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/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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=6"
    -			}
    -		},
    -		"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/locate-path": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
    -			"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"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=",
    -			"dev": true
    -		},
    -		"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.9",
    -			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
    -			"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"sourcemap-codec": "^1.4.8"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"semver": "^6.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/sindresorhus"
    -			}
    -		},
    -		"node_modules/makeerror": {
    -			"version": "1.0.11",
    -			"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
    -			"integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
    -			"dev": true,
    -			"dependencies": {
    -				"tmpl": "1.0.x"
    -			}
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"node_modules/merge2": {
    -			"version": "1.4.1",
    -			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
    -			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"braces": "^3.0.1",
    -				"picomatch": "^2.2.3"
    -			},
    -			"engines": {
    -				"node": ">=8.6"
    -			}
    -		},
    -		"node_modules/mime-db": {
    -			"version": "1.48.0",
    -			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
    -			"integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 0.6"
    -			}
    -		},
    -		"node_modules/mime-types": {
    -			"version": "2.1.31",
    -			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
    -			"integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
    -			"dev": true,
    -			"dependencies": {
    -				"mime-db": "1.48.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/minimatch": {
    -			"version": "3.0.4",
    -			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    -			"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
    -			"dev": true,
    -			"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==",
    -			"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==",
    -			"dev": true
    -		},
    -		"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/node-fetch": {
    -			"version": "2.6.1",
    -			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
    -			"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
    -			"dev": true,
    -			"engines": {
    -				"node": "4.x || >=6.0.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-modules-regexp": {
    -			"version": "1.0.0",
    -			"resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
    -			"integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.10.0"
    -			}
    -		},
    -		"node_modules/node-releases": {
    -			"version": "2.0.2",
    -			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
    -			"integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.10.0"
    -			}
    -		},
    -		"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-inspect": {
    -			"version": "1.10.3",
    -			"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
    -			"integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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/once": {
    -			"version": "1.4.0",
    -			"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
    -			"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
    -			"dev": true,
    -			"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.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/p-each-series": {
    -			"version": "2.2.0",
    -			"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
    -			"integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/sindresorhus"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"p-try": "^2.0.0"
    -			},
    -			"engines": {
    -				"node": ">=6"
    -			},
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"p-limit": "^2.2.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=6"
    -			}
    -		},
    -		"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/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==",
    -			"dev": true,
    -			"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=",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.10.0"
    -			}
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/picocolors": {
    -			"version": "1.0.0",
    -			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
    -			"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8.6"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/jonschlinkert"
    -			}
    -		},
    -		"node_modules/pirates": {
    -			"version": "4.0.1",
    -			"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
    -			"integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
    -			"dev": true,
    -			"dependencies": {
    -				"node-modules-regexp": "^1.0.0"
    -			},
    -			"engines": {
    -				"node": ">= 6"
    -			}
    -		},
    -		"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/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/pretty-format": {
    -			"version": "26.6.2",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
    -			"integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
    -			"dev": true,
    -			"dependencies": {
    -				"@jest/types": "^26.6.2",
    -				"ansi-regex": "^5.0.0",
    -				"ansi-styles": "^4.0.0",
    -				"react-is": "^17.0.1"
    -			},
    -			"engines": {
    -				"node": ">= 10"
    -			}
    -		},
    -		"node_modules/pretty-format/node_modules/ansi-regex": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/pretty-format/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/pretty-format/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/pretty-format/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/prompts": {
    -			"version": "2.4.1",
    -			"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
    -			"integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"kleur": "^3.0.3",
    -				"sisteransi": "^1.0.5"
    -			},
    -			"engines": {
    -				"node": ">= 6"
    -			}
    -		},
    -		"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/punycode": {
    -			"version": "2.1.1",
    -			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
    -			"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=6"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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/randombytes": {
    -			"version": "2.1.0",
    -			"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
    -			"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"safe-buffer": "^5.1.0"
    -			}
    -		},
    -		"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/regenerate": {
    -			"version": "1.4.2",
    -			"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
    -			"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
    -			"dev": true
    -		},
    -		"node_modules/regenerate-unicode-properties": {
    -			"version": "10.0.1",
    -			"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
    -			"integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
    -			"dev": true,
    -			"dependencies": {
    -				"regenerate": "^1.4.2"
    -			},
    -			"engines": {
    -				"node": ">=4"
    -			}
    -		},
    -		"node_modules/regenerator-runtime": {
    -			"version": "0.13.7",
    -			"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
    -			"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
    -		},
    -		"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"@babel/runtime": "^7.8.4"
    -			}
    -		},
    -		"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": "5.0.1",
    -			"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz",
    -			"integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==",
    -			"dev": true,
    -			"dependencies": {
    -				"regenerate": "^1.4.2",
    -				"regenerate-unicode-properties": "^10.0.1",
    -				"regjsgen": "^0.6.0",
    -				"regjsparser": "^0.8.2",
    -				"unicode-match-property-ecmascript": "^2.0.0",
    -				"unicode-match-property-value-ecmascript": "^2.0.0"
    -			},
    -			"engines": {
    -				"node": ">=4"
    -			}
    -		},
    -		"node_modules/regjsgen": {
    -			"version": "0.6.0",
    -			"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
    -			"integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
    -			"dev": true
    -		},
    -		"node_modules/regjsparser": {
    -			"version": "0.8.4",
    -			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
    -			"integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
    -			"dev": true,
    -			"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=",
    -			"dev": true,
    -			"bin": {
    -				"jsesc": "bin/jsesc"
    -			}
    -		},
    -		"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/resolve": {
    -			"version": "1.20.0",
    -			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
    -			"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
    -			"dev": true,
    -			"dependencies": {
    -				"is-core-module": "^2.2.0",
    -				"path-parse": "^1.0.6"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"node_modules/reusify": {
    -			"version": "1.0.4",
    -			"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
    -			"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
    -			"dev": true,
    -			"engines": {
    -				"iojs": ">=1.0.0",
    -				"node": ">=0.10.0"
    -			}
    -		},
    -		"node_modules/rollup": {
    -			"version": "2.70.0",
    -			"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.0.tgz",
    -			"integrity": "sha512-iEzYw+syFxQ0X9RefVwhr8BA2TNJsTaX8L8dhyeyMECDbmiba+8UQzcu+xZdji0+JQ+s7kouQnw+9Oz5M19XKA==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"has-flag": "^4.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/rollup-plugin-typescript2": {
    -			"version": "0.30.0",
    -			"resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz",
    -			"integrity": "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==",
    -			"dev": true,
    -			"dependencies": {
    -				"@rollup/pluginutils": "^4.1.0",
    -				"find-cache-dir": "^3.3.1",
    -				"fs-extra": "8.1.0",
    -				"resolve": "1.20.0",
    -				"tslib": "2.1.0"
    -			},
    -			"peerDependencies": {
    -				"rollup": ">=1.26.3",
    -				"typescript": ">=2.4.0"
    -			}
    -		},
    -		"node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": {
    -			"version": "4.2.0",
    -			"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.0.tgz",
    -			"integrity": "sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA==",
    -			"dev": true,
    -			"dependencies": {
    -				"estree-walker": "^2.0.1",
    -				"picomatch": "^2.2.2"
    -			},
    -			"engines": {
    -				"node": ">= 8.0.0"
    -			}
    -		},
    -		"node_modules/rollup-plugin-typescript2/node_modules/tslib": {
    -			"version": "2.1.0",
    -			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
    -			"integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"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.2.1",
    -			"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
    -			"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
    -			"dev": true,
    -			"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/safer-buffer": {
    -			"version": "2.1.2",
    -			"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
    -			"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
    -			"dev": true
    -		},
    -		"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/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/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/signal-exit": {
    -			"version": "3.0.3",
    -			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
    -			"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
    -			"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": "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/source-map": {
    -			"version": "0.5.7",
    -			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
    -			"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.10.0"
    -			}
    -		},
    -		"node_modules/source-map-support": {
    -			"version": "0.5.19",
    -			"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
    -			"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
    -			"dev": true,
    -			"dependencies": {
    -				"buffer-from": "^1.0.0",
    -				"source-map": "^0.6.0"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=0.10.0"
    -			}
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"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-utils": {
    -			"version": "2.0.3",
    -			"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
    -			"integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
    -			"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/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.0",
    -			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"node_modules/string-length/node_modules/strip-ansi": {
    -			"version": "6.0.0",
    -			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -			"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    -			"dev": true,
    -			"dependencies": {
    -				"ansi-regex": "^5.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"call-bind": "^1.0.2",
    -				"define-properties": "^1.1.3"
    -			},
    -			"funding": {
    -				"url": "https://github.com/sponsors/ljharb"
    -			}
    -		},
    -		"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-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/supports-color": {
    -			"version": "5.5.0",
    -			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
    -			"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
    -			"dev": true,
    -			"dependencies": {
    -				"has-flag": "^3.0.0"
    -			},
    -			"engines": {
    -				"node": ">=4"
    -			}
    -		},
    -		"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/has-flag": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -			"dev": true,
    -			"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/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/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.7.1",
    -			"resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz",
    -			"integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==",
    -			"dev": true,
    -			"dependencies": {
    -				"commander": "^2.20.0",
    -				"source-map": "~0.7.2",
    -				"source-map-support": "~0.5.19"
    -			},
    -			"bin": {
    -				"terser": "bin/terser"
    -			},
    -			"engines": {
    -				"node": ">=10"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 8"
    -			}
    -		},
    -		"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/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/tmpl": {
    -			"version": "1.0.4",
    -			"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
    -			"integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
    -			"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=",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"dependencies": {
    -				"is-number": "^7.0.0"
    -			},
    -			"engines": {
    -				"node": ">=8.0"
    -			}
    -		},
    -		"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/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/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/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/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": "3.9.10",
    -			"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
    -			"integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">=4"
    -			}
    -		},
    -		"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/util": {
    -			"version": "0.12.4",
    -			"resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz",
    -			"integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==",
    -			"dev": true,
    -			"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/v8-to-istanbul": {
    -			"version": "8.0.0",
    -			"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz",
    -			"integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==",
    -			"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/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.7",
    -			"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
    -			"integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
    -			"dev": true,
    -			"dependencies": {
    -				"makeerror": "1.0.x"
    -			}
    -		},
    -		"node_modules/web-streams-polyfill": {
    -			"version": "3.0.3",
    -			"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.0.3.tgz",
    -			"integrity": "sha512-d2H/t0eqRNM4w2WvmTdoeIvzAUSpK7JmATB8Nr2lb7nQ9BTIJVjbQ/TRFVEh2gUH1HwclPdoPtfMoFfetXaZnA==",
    -			"dev": true,
    -			"engines": {
    -				"node": ">= 8"
    -			}
    -		},
    -		"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/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-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==",
    -			"dev": true,
    -			"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.4",
    -			"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz",
    -			"integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==",
    -			"dev": true,
    -			"dependencies": {
    -				"available-typed-arrays": "^1.0.2",
    -				"call-bind": "^1.0.0",
    -				"es-abstract": "^1.18.0-next.1",
    -				"foreach": "^2.0.5",
    -				"function-bind": "^1.1.1",
    -				"has-symbols": "^1.0.1",
    -				"is-typed-array": "^1.1.3"
    -			},
    -			"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/wrappy": {
    -			"version": "1.0.2",
    -			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
    -			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
    -			"dev": true
    -		},
    -		"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/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/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/yet-another-abortcontroller-polyfill": {
    -			"version": "0.0.4",
    -			"resolved": "https://registry.npmjs.org/yet-another-abortcontroller-polyfill/-/yet-another-abortcontroller-polyfill-0.0.4.tgz",
    -			"integrity": "sha512-6do/P+mjm7FDUD+q8FrZ0ClMIbjGuKyWuWm3Vz2O7QmVf73HVLYIDV6toS7T0qoH1yeI2HPb8VgJp7w+zcVWvA==",
    -			"dev": true
    -		}
    -	},
    -	"dependencies": {
    -		"@ampproject/remapping": {
    -			"version": "2.1.2",
    -			"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
    -			"integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
    -			"dev": true,
    -			"requires": {
    -				"@jridgewell/trace-mapping": "^0.3.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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/highlight": "^7.16.7"
    -			}
    -		},
    -		"@babel/compat-data": {
    -			"version": "7.17.0",
    -			"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz",
    -			"integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==",
    -			"dev": true
    -		},
    -		"@babel/core": {
    -			"version": "7.17.5",
    -			"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.5.tgz",
    -			"integrity": "sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==",
    -			"dev": true,
    -			"requires": {
    -				"@ampproject/remapping": "^2.1.0",
    -				"@babel/code-frame": "^7.16.7",
    -				"@babel/generator": "^7.17.3",
    -				"@babel/helper-compilation-targets": "^7.16.7",
    -				"@babel/helper-module-transforms": "^7.16.7",
    -				"@babel/helpers": "^7.17.2",
    -				"@babel/parser": "^7.17.3",
    -				"@babel/template": "^7.16.7",
    -				"@babel/traverse": "^7.17.3",
    -				"@babel/types": "^7.17.0",
    -				"convert-source-map": "^1.7.0",
    -				"debug": "^4.1.0",
    -				"gensync": "^1.0.0-beta.2",
    -				"json5": "^2.1.2",
    -				"semver": "^6.3.0"
    -			}
    -		},
    -		"@babel/generator": {
    -			"version": "7.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz",
    -			"integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/types": "^7.17.0",
    -				"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/compat-data": "^7.16.4",
    -				"@babel/helper-validator-option": "^7.16.7",
    -				"browserslist": "^4.17.5",
    -				"semver": "^6.3.0"
    -			}
    -		},
    -		"@babel/helper-create-class-features-plugin": {
    -			"version": "7.17.6",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz",
    -			"integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==",
    -			"dev": true,
    -			"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.17.0",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz",
    -			"integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-annotate-as-pure": "^7.16.7",
    -				"regexpu-core": "^5.0.1"
    -			}
    -		},
    -		"@babel/helper-define-polyfill-provider": {
    -			"version": "0.3.1",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
    -			"integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
    -			"dev": true,
    -			"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"
    -			}
    -		},
    -		"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/types": "^7.16.7"
    -			}
    -		},
    -		"@babel/helper-module-transforms": {
    -			"version": "7.17.6",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz",
    -			"integrity": "sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==",
    -			"dev": true,
    -			"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.17.3",
    -				"@babel/types": "^7.17.0"
    -			}
    -		},
    -		"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"@babel/helper-remap-async-to-generator": {
    -			"version": "7.16.8",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz",
    -			"integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-annotate-as-pure": "^7.16.7",
    -				"@babel/helper-wrap-function": "^7.16.8",
    -				"@babel/types": "^7.16.8"
    -			}
    -		},
    -		"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"@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==",
    -			"dev": true
    -		},
    -		"@babel/helper-wrap-function": {
    -			"version": "7.16.8",
    -			"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz",
    -			"integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-function-name": "^7.16.7",
    -				"@babel/template": "^7.16.7",
    -				"@babel/traverse": "^7.16.8",
    -				"@babel/types": "^7.16.8"
    -			}
    -		},
    -		"@babel/helpers": {
    -			"version": "7.17.2",
    -			"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz",
    -			"integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/template": "^7.16.7",
    -				"@babel/traverse": "^7.17.0",
    -				"@babel/types": "^7.17.0"
    -			}
    -		},
    -		"@babel/highlight": {
    -			"version": "7.16.10",
    -			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
    -			"integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-validator-identifier": "^7.16.7",
    -				"chalk": "^2.0.0",
    -				"js-tokens": "^4.0.0"
    -			}
    -		},
    -		"@babel/parser": {
    -			"version": "7.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz",
    -			"integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==",
    -			"dev": true
    -		},
    -		"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz",
    -			"integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/helper-remap-async-to-generator": "^7.16.8",
    -				"@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==",
    -			"dev": true,
    -			"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.17.6",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz",
    -			"integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-create-class-features-plugin": "^7.17.6",
    -				"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/plugin-syntax-numeric-separator": "^7.10.4"
    -			}
    -		},
    -		"@babel/plugin-proposal-object-rest-spread": {
    -			"version": "7.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz",
    -			"integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/compat-data": "^7.17.0",
    -				"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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.11",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz",
    -			"integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-create-class-features-plugin": "^7.16.10",
    -				"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-plugin-utils": "^7.8.0"
    -			}
    -		},
    -		"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-plugin-utils": "^7.16.7"
    -			}
    -		},
    -		"@babel/plugin-transform-async-to-generator": {
    -			"version": "7.16.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz",
    -			"integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-module-imports": "^7.16.7",
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/helper-remap-async-to-generator": "^7.16.8"
    -			}
    -		},
    -		"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-plugin-utils": "^7.16.7"
    -			}
    -		},
    -		"@babel/plugin-transform-destructuring": {
    -			"version": "7.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.3.tgz",
    -			"integrity": "sha512-dDFzegDYKlPqa72xIlbmSkly5MluLoaC1JswABGktyt6NTXSBcUuse/kWE/wvKFWJHPETpi158qJZFS3JmykJg==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz",
    -			"integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz",
    -			"integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-plugin-utils": "^7.16.7"
    -			}
    -		},
    -		"@babel/plugin-transform-typescript": {
    -			"version": "7.16.8",
    -			"resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz",
    -			"integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-create-class-features-plugin": "^7.16.7",
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/plugin-syntax-typescript": "^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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-create-regexp-features-plugin": "^7.16.7",
    -				"@babel/helper-plugin-utils": "^7.16.7"
    -			}
    -		},
    -		"@babel/preset-env": {
    -			"version": "7.16.11",
    -			"resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz",
    -			"integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/compat-data": "^7.16.8",
    -				"@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.8",
    -				"@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.11",
    -				"@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.8",
    -				"@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.8",
    -				"@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.8",
    -				"@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.8",
    -				"babel-plugin-polyfill-corejs2": "^0.3.0",
    -				"babel-plugin-polyfill-corejs3": "^0.5.0",
    -				"babel-plugin-polyfill-regenerator": "^0.3.0",
    -				"core-js-compat": "^3.20.2",
    -				"semver": "^6.3.0"
    -			}
    -		},
    -		"@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==",
    -			"dev": true,
    -			"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/preset-typescript": {
    -			"version": "7.16.7",
    -			"resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz",
    -			"integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-plugin-utils": "^7.16.7",
    -				"@babel/helper-validator-option": "^7.16.7",
    -				"@babel/plugin-transform-typescript": "^7.16.7"
    -			}
    -		},
    -		"@babel/runtime": {
    -			"version": "7.14.6",
    -			"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz",
    -			"integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==",
    -			"requires": {
    -				"regenerator-runtime": "^0.13.4"
    -			}
    -		},
    -		"@babel/template": {
    -			"version": "7.16.7",
    -			"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
    -			"integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/code-frame": "^7.16.7",
    -				"@babel/parser": "^7.16.7",
    -				"@babel/types": "^7.16.7"
    -			}
    -		},
    -		"@babel/traverse": {
    -			"version": "7.17.3",
    -			"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz",
    -			"integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/code-frame": "^7.16.7",
    -				"@babel/generator": "^7.17.3",
    -				"@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.17.3",
    -				"@babel/types": "^7.17.0",
    -				"debug": "^4.1.0",
    -				"globals": "^11.1.0"
    -			}
    -		},
    -		"@babel/types": {
    -			"version": "7.17.0",
    -			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
    -			"integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
    -			"dev": true,
    -			"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
    -		},
    -		"@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"
    -			},
    -			"dependencies": {
    -				"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
    -				}
    -			}
    -		},
    -		"@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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.6.tgz",
    -			"integrity": "sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"jest-message-util": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"slash": "^3.0.0"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.6.tgz",
    -			"integrity": "sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/console": "^27.0.6",
    -				"@jest/reporters": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@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.0.6",
    -				"jest-config": "^27.0.6",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-resolve-dependencies": "^27.0.6",
    -				"jest-runner": "^27.0.6",
    -				"jest-runtime": "^27.0.6",
    -				"jest-snapshot": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"jest-watcher": "^27.0.6",
    -				"micromatch": "^4.0.4",
    -				"p-each-series": "^2.1.0",
    -				"rimraf": "^3.0.0",
    -				"slash": "^3.0.0",
    -				"strip-ansi": "^6.0.0"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"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"
    -					}
    -				},
    -				"strip-ansi": {
    -					"version": "6.0.0",
    -					"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -					"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    -					"dev": true,
    -					"requires": {
    -						"ansi-regex": "^5.0.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/environment": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.6.tgz",
    -			"integrity": "sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/fake-timers": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"jest-mock": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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/fake-timers": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.6.tgz",
    -			"integrity": "sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"@sinonjs/fake-timers": "^7.0.2",
    -				"@types/node": "*",
    -				"jest-message-util": "^27.0.6",
    -				"jest-mock": "^27.0.6",
    -				"jest-util": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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/globals": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.6.tgz",
    -			"integrity": "sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/environment": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"expect": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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/reporters": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.6.tgz",
    -			"integrity": "sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==",
    -			"dev": true,
    -			"requires": {
    -				"@bcoe/v8-coverage": "^0.2.3",
    -				"@jest/console": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"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.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-worker": "^27.0.6",
    -				"slash": "^3.0.0",
    -				"source-map": "^0.6.0",
    -				"string-length": "^4.0.1",
    -				"terminal-link": "^2.0.0",
    -				"v8-to-istanbul": "^8.0.0"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.6.tgz",
    -			"integrity": "sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==",
    -			"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.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.6.tgz",
    -			"integrity": "sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/console": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/istanbul-lib-coverage": "^2.0.0",
    -				"collect-v8-coverage": "^1.0.0"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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/test-sequencer": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.6.tgz",
    -			"integrity": "sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/test-result": "^27.0.6",
    -				"graceful-fs": "^4.2.4",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-runtime": "^27.0.6"
    -			}
    -		},
    -		"@jest/transform": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.6.tgz",
    -			"integrity": "sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/core": "^7.1.0",
    -				"@jest/types": "^27.0.6",
    -				"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.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"micromatch": "^4.0.4",
    -				"pirates": "^4.0.1",
    -				"slash": "^3.0.0",
    -				"source-map": "^0.6.1",
    -				"write-file-atomic": "^3.0.0"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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": "26.6.2",
    -			"resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
    -			"integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
    -			"dev": true,
    -			"requires": {
    -				"@types/istanbul-lib-coverage": "^2.0.0",
    -				"@types/istanbul-reports": "^3.0.0",
    -				"@types/node": "*",
    -				"@types/yargs": "^15.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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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"
    -					}
    -				}
    -			}
    -		},
    -		"@jridgewell/resolve-uri": {
    -			"version": "3.0.5",
    -			"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
    -			"integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
    -			"dev": true
    -		},
    -		"@jridgewell/sourcemap-codec": {
    -			"version": "1.4.11",
    -			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
    -			"integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
    -			"dev": true
    -		},
    -		"@jridgewell/trace-mapping": {
    -			"version": "0.3.4",
    -			"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz",
    -			"integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==",
    -			"dev": true,
    -			"requires": {
    -				"@jridgewell/resolve-uri": "^3.0.3",
    -				"@jridgewell/sourcemap-codec": "^1.4.10"
    -			}
    -		},
    -		"@microsoft/fetch-event-source": {
    -			"version": "2.0.1",
    -			"resolved": "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz",
    -			"integrity": "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA=="
    -		},
    -		"@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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"@nodelib/fs.walk": {
    -			"version": "1.2.7",
    -			"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz",
    -			"integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==",
    -			"dev": true,
    -			"requires": {
    -				"@nodelib/fs.scandir": "2.1.5",
    -				"fastq": "^1.6.0"
    -			}
    -		},
    -		"@rollup/plugin-babel": {
    -			"version": "5.3.1",
    -			"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
    -			"integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-module-imports": "^7.10.4",
    -				"@rollup/pluginutils": "^3.1.0"
    -			}
    -		},
    -		"@rollup/plugin-commonjs": {
    -			"version": "21.0.2",
    -			"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.0.2.tgz",
    -			"integrity": "sha512-d/OmjaLVO4j/aQX69bwpWPpbvI3TJkQuxoAk7BH8ew1PyoMBLTOuvJTjzG8oEoW7drIIqB0KCJtfFLu/2GClWg==",
    -			"dev": true,
    -			"requires": {
    -				"@rollup/pluginutils": "^3.1.0",
    -				"commondir": "^1.0.1",
    -				"estree-walker": "^2.0.1",
    -				"glob": "^7.1.6",
    -				"is-reference": "^1.2.1",
    -				"magic-string": "^0.25.7",
    -				"resolve": "^1.17.0"
    -			}
    -		},
    -		"@rollup/plugin-node-resolve": {
    -			"version": "13.1.3",
    -			"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz",
    -			"integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==",
    -			"dev": true,
    -			"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/pluginutils": {
    -			"version": "3.1.0",
    -			"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
    -			"integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
    -			"dev": true,
    -			"requires": {
    -				"@types/estree": "0.0.39",
    -				"estree-walker": "^1.0.1",
    -				"picomatch": "^2.2.2"
    -			},
    -			"dependencies": {
    -				"@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==",
    -					"dev": true
    -				},
    -				"estree-walker": {
    -					"version": "1.0.1",
    -					"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
    -					"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
    -					"dev": true
    -				}
    -			}
    -		},
    -		"@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"
    -			}
    -		},
    -		"@sinonjs/fake-timers": {
    -			"version": "7.1.2",
    -			"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz",
    -			"integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==",
    -			"dev": true,
    -			"requires": {
    -				"@sinonjs/commons": "^1.7.0"
    -			}
    -		},
    -		"@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.15",
    -			"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz",
    -			"integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==",
    -			"dev": 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.3",
    -			"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz",
    -			"integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==",
    -			"dev": 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==",
    -			"dev": 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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/types": "^7.3.0"
    -			}
    -		},
    -		"@types/browser-or-node": {
    -			"version": "1.3.0",
    -			"resolved": "https://registry.npmjs.org/@types/browser-or-node/-/browser-or-node-1.3.0.tgz",
    -			"integrity": "sha512-MVetr65IR7RdJbUxVHsaPFaXAO8fi89zv1g8L/mHygh1Q7xnnK02XZLwfMh57FOpTO6gtnagoPMQ/UOFfctXRQ==",
    -			"dev": true
    -		},
    -		"@types/estree": {
    -			"version": "0.0.49",
    -			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.49.tgz",
    -			"integrity": "sha512-K1AFuMe8a+pXmfHTtnwBvqoEylNKVeaiKYkjmcEAdytMQVJ/i9Fu7sc13GxgXdO49gkE7Hy8SyJonUZUn+eVaw==",
    -			"dev": true
    -		},
    -		"@types/eventsource": {
    -			"version": "1.1.6",
    -			"resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.6.tgz",
    -			"integrity": "sha512-y4xcLJ+lcoZ6mN9ndSdKOWg24Nj5uQc4Z/NRdy3HbiGGt5hfH3RLwAXr6V+RzGzOljAk48a09n6iY4BMNumEng==",
    -			"dev": true
    -		},
    -		"@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/istanbul-lib-coverage": {
    -			"version": "2.0.3",
    -			"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
    -			"integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==",
    -			"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": "26.0.24",
    -			"resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz",
    -			"integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==",
    -			"dev": true,
    -			"requires": {
    -				"jest-diff": "^26.0.0",
    -				"pretty-format": "^26.0.0"
    -			}
    -		},
    -		"@types/json-schema": {
    -			"version": "7.0.8",
    -			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz",
    -			"integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==",
    -			"dev": true
    -		},
    -		"@types/node": {
    -			"version": "16.0.0",
    -			"resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz",
    -			"integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==",
    -			"dev": true
    -		},
    -		"@types/prettier": {
    -			"version": "2.3.2",
    -			"resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz",
    -			"integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==",
    -			"dev": true
    -		},
    -		"@types/prop-types": {
    -			"version": "15.7.3",
    -			"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz",
    -			"integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==",
    -			"dev": true
    -		},
    -		"@types/react": {
    -			"version": "16.14.10",
    -			"resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.10.tgz",
    -			"integrity": "sha512-QadBsMyF6ldjEAXEhsmEW/L0uBDJT8yw7Qoe5sRnEKVrzMkiYoJwqoL5TKJOlArsn/wvIJM/XdVzkdL6+AS64Q==",
    -			"dev": true,
    -			"requires": {
    -				"@types/prop-types": "*",
    -				"@types/scheduler": "*",
    -				"csstype": "^3.0.2"
    -			}
    -		},
    -		"@types/resolve": {
    -			"version": "1.17.1",
    -			"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
    -			"integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"@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/yargs": {
    -			"version": "15.0.14",
    -			"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz",
    -			"integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==",
    -			"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": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.2.tgz",
    -			"integrity": "sha512-PGqpLLzHSxq956rzNGasO3GsAPf2lY9lDUBXhS++SKonglUmJypaUtcKzRtUte8CV7nruwnDxtLUKpVxs0wQBw==",
    -			"dev": true,
    -			"requires": {
    -				"@typescript-eslint/experimental-utils": "4.28.2",
    -				"@typescript-eslint/scope-manager": "4.28.2",
    -				"debug": "^4.3.1",
    -				"functional-red-black-tree": "^1.0.1",
    -				"regexpp": "^3.1.0",
    -				"semver": "^7.3.5",
    -				"tsutils": "^3.21.0"
    -			},
    -			"dependencies": {
    -				"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"
    -					}
    -				}
    -			}
    -		},
    -		"@typescript-eslint/experimental-utils": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.2.tgz",
    -			"integrity": "sha512-MwHPsL6qo98RC55IoWWP8/opTykjTp4JzfPu1VfO2Z0MshNP0UZ1GEV5rYSSnZSUI8VD7iHvtIPVGW5Nfh7klQ==",
    -			"dev": true,
    -			"requires": {
    -				"@types/json-schema": "^7.0.7",
    -				"@typescript-eslint/scope-manager": "4.28.2",
    -				"@typescript-eslint/types": "4.28.2",
    -				"@typescript-eslint/typescript-estree": "4.28.2",
    -				"eslint-scope": "^5.1.1",
    -				"eslint-utils": "^3.0.0"
    -			}
    -		},
    -		"@typescript-eslint/parser": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.2.tgz",
    -			"integrity": "sha512-Q0gSCN51eikAgFGY+gnd5p9bhhCUAl0ERMiDKrTzpSoMYRubdB8MJrTTR/BBii8z+iFwz8oihxd0RAdP4l8w8w==",
    -			"dev": true,
    -			"requires": {
    -				"@typescript-eslint/scope-manager": "4.28.2",
    -				"@typescript-eslint/types": "4.28.2",
    -				"@typescript-eslint/typescript-estree": "4.28.2",
    -				"debug": "^4.3.1"
    -			}
    -		},
    -		"@typescript-eslint/scope-manager": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.2.tgz",
    -			"integrity": "sha512-MqbypNjIkJFEFuOwPWNDjq0nqXAKZvDNNs9yNseoGBB1wYfz1G0WHC2AVOy4XD7di3KCcW3+nhZyN6zruqmp2A==",
    -			"dev": true,
    -			"requires": {
    -				"@typescript-eslint/types": "4.28.2",
    -				"@typescript-eslint/visitor-keys": "4.28.2"
    -			}
    -		},
    -		"@typescript-eslint/types": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.2.tgz",
    -			"integrity": "sha512-Gr15fuQVd93uD9zzxbApz3wf7ua3yk4ZujABZlZhaxxKY8ojo448u7XTm/+ETpy0V0dlMtj6t4VdDvdc0JmUhA==",
    -			"dev": true
    -		},
    -		"@typescript-eslint/typescript-estree": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.2.tgz",
    -			"integrity": "sha512-86lLstLvK6QjNZjMoYUBMMsULFw0hPHJlk1fzhAVoNjDBuPVxiwvGuPQq3fsBMCxuDJwmX87tM/AXoadhHRljg==",
    -			"dev": true,
    -			"requires": {
    -				"@typescript-eslint/types": "4.28.2",
    -				"@typescript-eslint/visitor-keys": "4.28.2",
    -				"debug": "^4.3.1",
    -				"globby": "^11.0.3",
    -				"is-glob": "^4.0.1",
    -				"semver": "^7.3.5",
    -				"tsutils": "^3.21.0"
    -			},
    -			"dependencies": {
    -				"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"
    -					}
    -				}
    -			}
    -		},
    -		"@typescript-eslint/visitor-keys": {
    -			"version": "4.28.2",
    -			"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.2.tgz",
    -			"integrity": "sha512-aT2B4PLyyRDUVUafXzpZFoc0C9t0za4BJAKP5sgWIhG+jHECQZUEjuQSCIwZdiJJ4w4cgu5r3Kh20SOdtEBl0w==",
    -			"dev": true,
    -			"requires": {
    -				"@typescript-eslint/types": "4.28.2",
    -				"eslint-visitor-keys": "^2.0.0"
    -			}
    -		},
    -		"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.4.1",
    -			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz",
    -			"integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==",
    -			"dev": true
    -		},
    -		"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-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"
    -			}
    -		},
    -		"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-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==",
    -			"dev": true,
    -			"requires": {
    -				"color-convert": "^1.9.0"
    -			}
    -		},
    -		"anymatch": {
    -			"version": "3.1.2",
    -			"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
    -			"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
    -			"dev": true,
    -			"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"
    -			}
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"asynckit": {
    -			"version": "0.4.0",
    -			"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
    -			"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
    -			"dev": true
    -		},
    -		"available-typed-arrays": {
    -			"version": "1.0.4",
    -			"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz",
    -			"integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==",
    -			"dev": true
    -		},
    -		"babel-jest": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.6.tgz",
    -			"integrity": "sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/babel__core": "^7.1.14",
    -				"babel-plugin-istanbul": "^6.0.0",
    -				"babel-preset-jest": "^27.0.6",
    -				"chalk": "^4.0.0",
    -				"graceful-fs": "^4.2.4",
    -				"slash": "^3.0.0"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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-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==",
    -			"dev": true,
    -			"requires": {
    -				"object.assign": "^4.1.0"
    -			}
    -		},
    -		"babel-plugin-istanbul": {
    -			"version": "6.0.0",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
    -			"integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
    -			"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": "^4.0.0",
    -				"test-exclude": "^6.0.0"
    -			}
    -		},
    -		"babel-plugin-jest-hoist": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz",
    -			"integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==",
    -			"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.1",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
    -			"integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/compat-data": "^7.13.11",
    -				"@babel/helper-define-polyfill-provider": "^0.3.1",
    -				"semver": "^6.1.1"
    -			}
    -		},
    -		"babel-plugin-polyfill-corejs3": {
    -			"version": "0.5.2",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz",
    -			"integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-define-polyfill-provider": "^0.3.1",
    -				"core-js-compat": "^3.21.0"
    -			}
    -		},
    -		"babel-plugin-polyfill-regenerator": {
    -			"version": "0.3.1",
    -			"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
    -			"integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/helper-define-polyfill-provider": "^0.3.1"
    -			}
    -		},
    -		"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.0.6",
    -			"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz",
    -			"integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==",
    -			"dev": true,
    -			"requires": {
    -				"babel-plugin-jest-hoist": "^27.0.6",
    -				"babel-preset-current-node-syntax": "^1.0.0"
    -			}
    -		},
    -		"balanced-match": {
    -			"version": "1.0.2",
    -			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
    -			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
    -			"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"fill-range": "^7.0.1"
    -			}
    -		},
    -		"browser-or-node": {
    -			"version": "1.3.0",
    -			"resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-1.3.0.tgz",
    -			"integrity": "sha512-0F2z/VSnLbmEeBcUrSuDH5l0HxTXdQQzLjkmBR4cYfvg1zJrKSlmIZFqyFR8oX0NrwPhy3c3HQ6i3OxMbew4Tg=="
    -		},
    -		"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
    -		},
    -		"browserslist": {
    -			"version": "4.20.0",
    -			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.0.tgz",
    -			"integrity": "sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ==",
    -			"dev": true,
    -			"requires": {
    -				"caniuse-lite": "^1.0.30001313",
    -				"electron-to-chromium": "^1.4.76",
    -				"escalade": "^3.1.1",
    -				"node-releases": "^2.0.2",
    -				"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-from": {
    -			"version": "1.1.1",
    -			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
    -			"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
    -			"dev": true
    -		},
    -		"builtin-modules": {
    -			"version": "3.2.0",
    -			"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
    -			"integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
    -			"dev": true
    -		},
    -		"call-bind": {
    -			"version": "1.0.2",
    -			"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
    -			"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
    -			"dev": true,
    -			"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
    -		},
    -		"caniuse-lite": {
    -			"version": "1.0.30001314",
    -			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz",
    -			"integrity": "sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw==",
    -			"dev": true
    -		},
    -		"chalk": {
    -			"version": "2.4.2",
    -			"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
    -			"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
    -			"dev": true,
    -			"requires": {
    -				"ansi-styles": "^3.2.1",
    -				"escape-string-regexp": "^1.0.5",
    -				"supports-color": "^5.3.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
    -		},
    -		"ci-info": {
    -			"version": "3.2.0",
    -			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz",
    -			"integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==",
    -			"dev": true
    -		},
    -		"cjs-module-lexer": {
    -			"version": "1.2.1",
    -			"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz",
    -			"integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"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=",
    -			"dev": true
    -		},
    -		"combined-stream": {
    -			"version": "1.0.8",
    -			"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
    -			"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"commondir": {
    -			"version": "1.0.1",
    -			"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
    -			"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
    -			"dev": true
    -		},
    -		"concat-map": {
    -			"version": "0.0.1",
    -			"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
    -			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"safe-buffer": "~5.1.1"
    -			},
    -			"dependencies": {
    -				"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==",
    -					"dev": true
    -				}
    -			}
    -		},
    -		"core-js": {
    -			"version": "3.21.1",
    -			"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.1.tgz",
    -			"integrity": "sha512-FRq5b/VMrWlrmCzwRrpDYNxyHP9BcAZC+xHJaqTgIE5091ZV1NTmyh0sGOg5XqpnHvR0svdy0sv1gWA1zmhxig=="
    -		},
    -		"core-js-compat": {
    -			"version": "3.21.1",
    -			"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.1.tgz",
    -			"integrity": "sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g==",
    -			"dev": true,
    -			"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==",
    -					"dev": true
    -				}
    -			}
    -		},
    -		"cross-fetch": {
    -			"version": "3.1.4",
    -			"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz",
    -			"integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==",
    -			"dev": true,
    -			"requires": {
    -				"node-fetch": "2.6.1"
    -			}
    -		},
    -		"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"
    -			}
    -		},
    -		"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.8",
    -			"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz",
    -			"integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==",
    -			"dev": true
    -		},
    -		"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.2",
    -			"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
    -			"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
    -			"dev": true,
    -			"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-is": {
    -			"version": "0.1.3",
    -			"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
    -			"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
    -			"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==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"object-keys": "^1.0.12"
    -			}
    -		},
    -		"delayed-stream": {
    -			"version": "1.0.0",
    -			"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
    -			"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
    -			"dev": true
    -		},
    -		"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": "26.6.2",
    -			"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
    -			"integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==",
    -			"dev": true
    -		},
    -		"dir-glob": {
    -			"version": "3.0.1",
    -			"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
    -			"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
    -			"dev": true,
    -			"requires": {
    -				"path-type": "^4.0.0"
    -			}
    -		},
    -		"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
    -				}
    -			}
    -		},
    -		"electron-to-chromium": {
    -			"version": "1.4.82",
    -			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.82.tgz",
    -			"integrity": "sha512-Ks+ANzLoIrFDUOJdjxYMH6CMKB8UQo5modAwvSZTxgF+vEs/U7G5IbWFUp6dS4klPkTDVdxbORuk8xAXXhMsWw==",
    -			"dev": true
    -		},
    -		"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
    -		},
    -		"es-abstract": {
    -			"version": "1.18.3",
    -			"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
    -			"integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
    -			"dev": true,
    -			"requires": {
    -				"call-bind": "^1.0.2",
    -				"es-to-primitive": "^1.2.1",
    -				"function-bind": "^1.1.1",
    -				"get-intrinsic": "^1.1.1",
    -				"has": "^1.0.3",
    -				"has-symbols": "^1.0.2",
    -				"is-callable": "^1.2.3",
    -				"is-negative-zero": "^2.0.1",
    -				"is-regex": "^1.1.3",
    -				"is-string": "^1.0.6",
    -				"object-inspect": "^1.10.3",
    -				"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-to-primitive": {
    -			"version": "1.2.1",
    -			"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
    -			"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
    -			"dev": true,
    -			"requires": {
    -				"is-callable": "^1.1.4",
    -				"is-date-object": "^1.0.1",
    -				"is-symbol": "^1.0.2"
    -			}
    -		},
    -		"escalade": {
    -			"version": "3.1.1",
    -			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
    -			"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
    -			"dev": true
    -		},
    -		"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=",
    -			"dev": true
    -		},
    -		"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": {
    -				"estraverse": {
    -					"version": "5.2.0",
    -					"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
    -					"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
    -					"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
    -				}
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"esrecurse": "^4.3.0",
    -				"estraverse": "^4.1.1"
    -			}
    -		},
    -		"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"
    -			}
    -		},
    -		"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
    -		},
    -		"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
    -		},
    -		"esrecurse": {
    -			"version": "4.3.0",
    -			"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
    -			"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
    -			"dev": true,
    -			"requires": {
    -				"estraverse": "^5.2.0"
    -			},
    -			"dependencies": {
    -				"estraverse": {
    -					"version": "5.2.0",
    -					"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
    -					"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
    -					"dev": true
    -				}
    -			}
    -		},
    -		"estraverse": {
    -			"version": "4.3.0",
    -			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
    -			"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
    -			"dev": true
    -		},
    -		"estree-walker": {
    -			"version": "2.0.2",
    -			"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
    -			"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
    -			"dev": true
    -		},
    -		"esutils": {
    -			"version": "2.0.3",
    -			"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
    -			"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
    -			"dev": true
    -		},
    -		"event-target-polyfill": {
    -			"version": "0.0.3",
    -			"resolved": "https://registry.npmjs.org/event-target-polyfill/-/event-target-polyfill-0.0.3.tgz",
    -			"integrity": "sha512-ZMc6UuvmbinrCk4RzGyVmRyIsAyxMRlp4CqSrcQRO8Dy0A9ldbiRy5kdtBj4OtP7EClGdqGfIqo9JmOClMsGLQ==",
    -			"dev": true
    -		},
    -		"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.0.6",
    -			"resolved": "https://registry.npmjs.org/expect/-/expect-27.0.6.tgz",
    -			"integrity": "sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"ansi-styles": "^5.0.0",
    -				"jest-get-type": "^27.0.6",
    -				"jest-matcher-utils": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-regex-util": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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
    -				},
    -				"chalk": {
    -					"version": "4.1.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"dev": true,
    -					"requires": {
    -						"ansi-styles": "^4.1.0",
    -						"supports-color": "^7.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"
    -							}
    -						}
    -					}
    -				},
    -				"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"jest-get-type": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -					"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -					"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"
    -					}
    -				}
    -			}
    -		},
    -		"fast-glob": {
    -			"version": "3.2.6",
    -			"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.6.tgz",
    -			"integrity": "sha512-GnLuqj/pvQ7pX8/L4J84nijv6sAnlwvSDpMkJi9i7nPmPxGtRPkBSStfvDW5l6nMdX9VWe+pkKWFTgD+vF2QSQ==",
    -			"dev": true,
    -			"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"
    -			}
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"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-text-encoding": {
    -			"version": "1.0.3",
    -			"resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.3.tgz",
    -			"integrity": "sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==",
    -			"dev": true
    -		},
    -		"fastq": {
    -			"version": "1.11.1",
    -			"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz",
    -			"integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==",
    -			"dev": true,
    -			"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"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"commondir": "^1.0.1",
    -				"make-dir": "^3.0.2",
    -				"pkg-dir": "^4.1.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==",
    -			"dev": true,
    -			"requires": {
    -				"locate-path": "^5.0.0",
    -				"path-exists": "^4.0.0"
    -			}
    -		},
    -		"foreach": {
    -			"version": "2.0.5",
    -			"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
    -			"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
    -			"dev": true
    -		},
    -		"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": "8.1.0",
    -			"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
    -			"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
    -			"dev": true,
    -			"requires": {
    -				"graceful-fs": "^4.2.0",
    -				"jsonfile": "^4.0.0",
    -				"universalify": "^0.1.0"
    -			}
    -		},
    -		"fs.realpath": {
    -			"version": "1.0.0",
    -			"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
    -			"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
    -			"dev": true
    -		},
    -		"fsevents": {
    -			"version": "2.3.2",
    -			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
    -			"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
    -			"dev": true,
    -			"optional": true
    -		},
    -		"function-bind": {
    -			"version": "1.1.1",
    -			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
    -			"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
    -			"dev": true
    -		},
    -		"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
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"function-bind": "^1.1.1",
    -				"has": "^1.0.3",
    -				"has-symbols": "^1.0.1"
    -			}
    -		},
    -		"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
    -		},
    -		"glob": {
    -			"version": "7.1.7",
    -			"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
    -			"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
    -			"dev": true,
    -			"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": "5.1.2",
    -			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
    -			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
    -			"dev": true,
    -			"requires": {
    -				"is-glob": "^4.0.1"
    -			}
    -		},
    -		"globals": {
    -			"version": "11.12.0",
    -			"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
    -			"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
    -			"dev": true
    -		},
    -		"globby": {
    -			"version": "11.0.4",
    -			"resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz",
    -			"integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
    -			"dev": true,
    -			"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"
    -			}
    -		},
    -		"graceful-fs": {
    -			"version": "4.2.6",
    -			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
    -			"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
    -			"dev": true
    -		},
    -		"has": {
    -			"version": "1.0.3",
    -			"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
    -			"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
    -			"dev": true,
    -			"requires": {
    -				"function-bind": "^1.1.1"
    -			}
    -		},
    -		"has-bigints": {
    -			"version": "1.0.1",
    -			"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz",
    -			"integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==",
    -			"dev": true
    -		},
    -		"has-flag": {
    -			"version": "3.0.0",
    -			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
    -			"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"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
    -		},
    -		"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-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
    -		},
    -		"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"
    -			}
    -		},
    -		"ignore": {
    -			"version": "5.1.8",
    -			"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
    -			"integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
    -			"dev": true
    -		},
    -		"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=",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"is-arguments": {
    -			"version": "1.1.0",
    -			"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
    -			"integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
    -			"dev": true,
    -			"requires": {
    -				"call-bind": "^1.0.0"
    -			}
    -		},
    -		"is-bigint": {
    -			"version": "1.0.2",
    -			"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
    -			"integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
    -			"dev": true
    -		},
    -		"is-boolean-object": {
    -			"version": "1.1.1",
    -			"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
    -			"integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
    -			"dev": true,
    -			"requires": {
    -				"call-bind": "^1.0.2"
    -			}
    -		},
    -		"is-callable": {
    -			"version": "1.2.3",
    -			"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
    -			"integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
    -			"dev": true
    -		},
    -		"is-ci": {
    -			"version": "3.0.0",
    -			"resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
    -			"integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
    -			"dev": true,
    -			"requires": {
    -				"ci-info": "^3.1.1"
    -			}
    -		},
    -		"is-core-module": {
    -			"version": "2.4.0",
    -			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz",
    -			"integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==",
    -			"dev": true,
    -			"requires": {
    -				"has": "^1.0.3"
    -			}
    -		},
    -		"is-date-object": {
    -			"version": "1.0.4",
    -			"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
    -			"integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
    -			"dev": true
    -		},
    -		"is-extglob": {
    -			"version": "2.1.1",
    -			"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
    -			"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
    -			"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.9",
    -			"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz",
    -			"integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==",
    -			"dev": true
    -		},
    -		"is-glob": {
    -			"version": "4.0.1",
    -			"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
    -			"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
    -			"dev": true,
    -			"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=",
    -			"dev": true
    -		},
    -		"is-negative-zero": {
    -			"version": "2.0.1",
    -			"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
    -			"integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
    -			"dev": true
    -		},
    -		"is-number": {
    -			"version": "7.0.0",
    -			"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
    -			"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
    -			"dev": true
    -		},
    -		"is-number-object": {
    -			"version": "1.0.5",
    -			"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
    -			"integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
    -			"dev": true
    -		},
    -		"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-reference": {
    -			"version": "1.2.1",
    -			"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
    -			"integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
    -			"dev": true,
    -			"requires": {
    -				"@types/estree": "*"
    -			}
    -		},
    -		"is-regex": {
    -			"version": "1.1.3",
    -			"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
    -			"integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
    -			"dev": true,
    -			"requires": {
    -				"call-bind": "^1.0.2",
    -				"has-symbols": "^1.0.2"
    -			}
    -		},
    -		"is-string": {
    -			"version": "1.0.6",
    -			"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
    -			"integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"has-symbols": "^1.0.2"
    -			}
    -		},
    -		"is-typed-array": {
    -			"version": "1.1.5",
    -			"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz",
    -			"integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==",
    -			"dev": true,
    -			"requires": {
    -				"available-typed-arrays": "^1.0.2",
    -				"call-bind": "^1.0.2",
    -				"es-abstract": "^1.18.0-next.2",
    -				"foreach": "^2.0.5",
    -				"has-symbols": "^1.0.1"
    -			}
    -		},
    -		"is-typedarray": {
    -			"version": "1.0.0",
    -			"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
    -			"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
    -			"dev": true
    -		},
    -		"isexe": {
    -			"version": "2.0.0",
    -			"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
    -			"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
    -			"dev": true
    -		},
    -		"istanbul-lib-coverage": {
    -			"version": "3.0.0",
    -			"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
    -			"integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
    -			"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"
    -			}
    -		},
    -		"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": {
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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"
    -					}
    -				}
    -			}
    -		},
    -		"istanbul-lib-source-maps": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
    -			"integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
    -			"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.0.2",
    -			"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
    -			"integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
    -			"dev": true,
    -			"requires": {
    -				"html-escaper": "^2.0.0",
    -				"istanbul-lib-report": "^3.0.0"
    -			}
    -		},
    -		"jest": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest/-/jest-27.0.6.tgz",
    -			"integrity": "sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/core": "^27.0.6",
    -				"import-local": "^3.0.2",
    -				"jest-cli": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"dev": true,
    -					"requires": {
    -						"ansi-styles": "^4.1.0",
    -						"supports-color": "^7.1.0"
    -					}
    -				},
    -				"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"
    -					}
    -				},
    -				"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
    -				},
    -				"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"import-local": {
    -					"version": "3.0.2",
    -					"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
    -					"integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
    -					"dev": true,
    -					"requires": {
    -						"pkg-dir": "^4.2.0",
    -						"resolve-cwd": "^3.0.0"
    -					}
    -				},
    -				"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
    -				},
    -				"jest-cli": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.6.tgz",
    -					"integrity": "sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/core": "^27.0.6",
    -						"@jest/test-result": "^27.0.6",
    -						"@jest/types": "^27.0.6",
    -						"chalk": "^4.0.0",
    -						"exit": "^0.1.2",
    -						"graceful-fs": "^4.2.4",
    -						"import-local": "^3.0.2",
    -						"jest-config": "^27.0.6",
    -						"jest-util": "^27.0.6",
    -						"jest-validate": "^27.0.6",
    -						"prompts": "^2.0.1",
    -						"yargs": "^16.0.3"
    -					}
    -				},
    -				"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
    -				},
    -				"string-width": {
    -					"version": "4.2.2",
    -					"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
    -					"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
    -					"dev": true,
    -					"requires": {
    -						"emoji-regex": "^8.0.0",
    -						"is-fullwidth-code-point": "^3.0.0",
    -						"strip-ansi": "^6.0.0"
    -					}
    -				},
    -				"strip-ansi": {
    -					"version": "6.0.0",
    -					"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -					"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    -					"dev": true,
    -					"requires": {
    -						"ansi-regex": "^5.0.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"
    -					}
    -				},
    -				"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"
    -					}
    -				},
    -				"y18n": {
    -					"version": "5.0.8",
    -					"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
    -					"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
    -					"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
    -				}
    -			}
    -		},
    -		"jest-changed-files": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.6.tgz",
    -			"integrity": "sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"execa": "^5.0.0",
    -				"throat": "^6.0.1"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"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"
    -					}
    -				},
    -				"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"is-stream": {
    -					"version": "2.0.0",
    -					"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
    -					"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
    -					"dev": true
    -				},
    -				"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"
    -					}
    -				},
    -				"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-circus": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.6.tgz",
    -			"integrity": "sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/environment": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"co": "^4.6.0",
    -				"dedent": "^0.7.0",
    -				"expect": "^27.0.6",
    -				"is-generator-fn": "^2.0.0",
    -				"jest-each": "^27.0.6",
    -				"jest-matcher-utils": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-runtime": "^27.0.6",
    -				"jest-snapshot": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"pretty-format": "^27.0.6",
    -				"slash": "^3.0.0",
    -				"stack-utils": "^2.0.3",
    -				"throat": "^6.0.1"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.0.1"
    -					},
    -					"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
    -						}
    -					}
    -				},
    -				"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.6.tgz",
    -			"integrity": "sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/core": "^7.1.0",
    -				"@jest/test-sequencer": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"babel-jest": "^27.0.6",
    -				"chalk": "^4.0.0",
    -				"deepmerge": "^4.2.2",
    -				"glob": "^7.1.1",
    -				"graceful-fs": "^4.2.4",
    -				"is-ci": "^3.0.0",
    -				"jest-circus": "^27.0.6",
    -				"jest-environment-jsdom": "^27.0.6",
    -				"jest-environment-node": "^27.0.6",
    -				"jest-get-type": "^27.0.6",
    -				"jest-jasmine2": "^27.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-runner": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"micromatch": "^4.0.4",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"jest-get-type": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -					"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.0.1"
    -					},
    -					"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
    -						}
    -					}
    -				},
    -				"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": "26.6.2",
    -			"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
    -			"integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
    -			"dev": true,
    -			"requires": {
    -				"chalk": "^4.0.0",
    -				"diff-sequences": "^26.6.2",
    -				"jest-get-type": "^26.3.0",
    -				"pretty-format": "^26.6.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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.6.tgz",
    -			"integrity": "sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==",
    -			"dev": true,
    -			"requires": {
    -				"detect-newline": "^3.0.0"
    -			}
    -		},
    -		"jest-each": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.6.tgz",
    -			"integrity": "sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"chalk": "^4.0.0",
    -				"jest-get-type": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"jest-get-type": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -					"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.0.1"
    -					},
    -					"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
    -						}
    -					}
    -				},
    -				"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.6.tgz",
    -			"integrity": "sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/environment": "^27.0.6",
    -				"@jest/fake-timers": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"jest-mock": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jsdom": "^16.6.0"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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-node": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.6.tgz",
    -			"integrity": "sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/environment": "^27.0.6",
    -				"@jest/fake-timers": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"jest-mock": "^27.0.6",
    -				"jest-util": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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-get-type": {
    -			"version": "26.3.0",
    -			"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
    -			"integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
    -			"dev": true
    -		},
    -		"jest-haste-map": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.6.tgz",
    -			"integrity": "sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"@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.0.6",
    -				"jest-serializer": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-worker": "^27.0.6",
    -				"micromatch": "^4.0.4",
    -				"walker": "^1.0.7"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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-jasmine2": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.6.tgz",
    -			"integrity": "sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/traverse": "^7.1.0",
    -				"@jest/environment": "^27.0.6",
    -				"@jest/source-map": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"co": "^4.6.0",
    -				"expect": "^27.0.6",
    -				"is-generator-fn": "^2.0.0",
    -				"jest-each": "^27.0.6",
    -				"jest-matcher-utils": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-runtime": "^27.0.6",
    -				"jest-snapshot": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"pretty-format": "^27.0.6",
    -				"throat": "^6.0.1"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.0.1"
    -					},
    -					"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
    -						}
    -					}
    -				},
    -				"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.6.tgz",
    -			"integrity": "sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==",
    -			"dev": true,
    -			"requires": {
    -				"jest-get-type": "^27.0.6",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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
    -				},
    -				"chalk": {
    -					"version": "4.1.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"dev": true,
    -					"requires": {
    -						"ansi-styles": "^4.1.0",
    -						"supports-color": "^7.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"
    -							}
    -						}
    -					}
    -				},
    -				"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"jest-get-type": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -					"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.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-matcher-utils": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.6.tgz",
    -			"integrity": "sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==",
    -			"dev": true,
    -			"requires": {
    -				"chalk": "^4.0.0",
    -				"jest-diff": "^27.0.6",
    -				"jest-get-type": "^27.0.6",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"diff-sequences": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
    -					"integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
    -					"dev": true
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"jest-diff": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz",
    -					"integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==",
    -					"dev": true,
    -					"requires": {
    -						"chalk": "^4.0.0",
    -						"diff-sequences": "^27.0.6",
    -						"jest-get-type": "^27.0.6",
    -						"pretty-format": "^27.0.6"
    -					}
    -				},
    -				"jest-get-type": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -					"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.0.1"
    -					},
    -					"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
    -						}
    -					}
    -				},
    -				"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.6.tgz",
    -			"integrity": "sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/code-frame": "^7.12.13",
    -				"@jest/types": "^27.0.6",
    -				"@types/stack-utils": "^2.0.0",
    -				"chalk": "^4.0.0",
    -				"graceful-fs": "^4.2.4",
    -				"micromatch": "^4.0.4",
    -				"pretty-format": "^27.0.6",
    -				"slash": "^3.0.0",
    -				"stack-utils": "^2.0.3"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.0.1"
    -					},
    -					"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
    -						}
    -					}
    -				},
    -				"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.6.tgz",
    -			"integrity": "sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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-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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz",
    -			"integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==",
    -			"dev": true
    -		},
    -		"jest-resolve": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.6.tgz",
    -			"integrity": "sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"chalk": "^4.0.0",
    -				"escalade": "^3.1.1",
    -				"graceful-fs": "^4.2.4",
    -				"jest-pnp-resolver": "^1.2.2",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"resolve": "^1.20.0",
    -				"slash": "^3.0.0"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.6.tgz",
    -			"integrity": "sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-snapshot": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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-runner": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.6.tgz",
    -			"integrity": "sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/console": "^27.0.6",
    -				"@jest/environment": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"emittery": "^0.8.1",
    -				"exit": "^0.1.2",
    -				"graceful-fs": "^4.2.4",
    -				"jest-docblock": "^27.0.6",
    -				"jest-environment-jsdom": "^27.0.6",
    -				"jest-environment-node": "^27.0.6",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-leak-detector": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-runtime": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-worker": "^27.0.6",
    -				"source-map-support": "^0.5.6",
    -				"throat": "^6.0.1"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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-runtime": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.6.tgz",
    -			"integrity": "sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/console": "^27.0.6",
    -				"@jest/environment": "^27.0.6",
    -				"@jest/fake-timers": "^27.0.6",
    -				"@jest/globals": "^27.0.6",
    -				"@jest/source-map": "^27.0.6",
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/transform": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/yargs": "^16.0.0",
    -				"chalk": "^4.0.0",
    -				"cjs-module-lexer": "^1.0.0",
    -				"collect-v8-coverage": "^1.0.0",
    -				"exit": "^0.1.2",
    -				"glob": "^7.1.3",
    -				"graceful-fs": "^4.2.4",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-mock": "^27.0.6",
    -				"jest-regex-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-snapshot": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"jest-validate": "^27.0.6",
    -				"slash": "^3.0.0",
    -				"strip-bom": "^4.0.0",
    -				"yargs": "^16.0.3"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"dev": true,
    -					"requires": {
    -						"ansi-styles": "^4.1.0",
    -						"supports-color": "^7.1.0"
    -					}
    -				},
    -				"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"
    -					}
    -				},
    -				"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
    -				},
    -				"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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
    -				},
    -				"string-width": {
    -					"version": "4.2.2",
    -					"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
    -					"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
    -					"dev": true,
    -					"requires": {
    -						"emoji-regex": "^8.0.0",
    -						"is-fullwidth-code-point": "^3.0.0",
    -						"strip-ansi": "^6.0.0"
    -					}
    -				},
    -				"strip-ansi": {
    -					"version": "6.0.0",
    -					"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -					"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    -					"dev": true,
    -					"requires": {
    -						"ansi-regex": "^5.0.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"
    -					}
    -				},
    -				"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"
    -					}
    -				},
    -				"y18n": {
    -					"version": "5.0.8",
    -					"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
    -					"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
    -					"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
    -				}
    -			}
    -		},
    -		"jest-serializer": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.6.tgz",
    -			"integrity": "sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==",
    -			"dev": true,
    -			"requires": {
    -				"@types/node": "*",
    -				"graceful-fs": "^4.2.4"
    -			}
    -		},
    -		"jest-snapshot": {
    -			"version": "27.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.6.tgz",
    -			"integrity": "sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==",
    -			"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.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@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.0.6",
    -				"graceful-fs": "^4.2.4",
    -				"jest-diff": "^27.0.6",
    -				"jest-get-type": "^27.0.6",
    -				"jest-haste-map": "^27.0.6",
    -				"jest-matcher-utils": "^27.0.6",
    -				"jest-message-util": "^27.0.6",
    -				"jest-resolve": "^27.0.6",
    -				"jest-util": "^27.0.6",
    -				"natural-compare": "^1.4.0",
    -				"pretty-format": "^27.0.6",
    -				"semver": "^7.3.2"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"diff-sequences": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz",
    -					"integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==",
    -					"dev": true
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"jest-diff": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.6.tgz",
    -					"integrity": "sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==",
    -					"dev": true,
    -					"requires": {
    -						"chalk": "^4.0.0",
    -						"diff-sequences": "^27.0.6",
    -						"jest-get-type": "^27.0.6",
    -						"pretty-format": "^27.0.6"
    -					}
    -				},
    -				"jest-get-type": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -					"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.0.1"
    -					},
    -					"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
    -						}
    -					}
    -				},
    -				"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"
    -					}
    -				},
    -				"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.6.tgz",
    -			"integrity": "sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"chalk": "^4.0.0",
    -				"graceful-fs": "^4.2.4",
    -				"is-ci": "^3.0.0",
    -				"picomatch": "^2.2.3"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.6.tgz",
    -			"integrity": "sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^27.0.6",
    -				"camelcase": "^6.2.0",
    -				"chalk": "^4.0.0",
    -				"jest-get-type": "^27.0.6",
    -				"leven": "^3.1.0",
    -				"pretty-format": "^27.0.6"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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"
    -					}
    -				},
    -				"camelcase": {
    -					"version": "6.2.0",
    -					"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
    -					"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
    -					"dev": true
    -				},
    -				"chalk": {
    -					"version": "4.1.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"jest-get-type": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
    -					"integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
    -					"dev": true
    -				},
    -				"pretty-format": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.6.tgz",
    -					"integrity": "sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==",
    -					"dev": true,
    -					"requires": {
    -						"@jest/types": "^27.0.6",
    -						"ansi-regex": "^5.0.0",
    -						"ansi-styles": "^5.0.0",
    -						"react-is": "^17.0.1"
    -					},
    -					"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
    -						}
    -					}
    -				},
    -				"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.6.tgz",
    -			"integrity": "sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/test-result": "^27.0.6",
    -				"@jest/types": "^27.0.6",
    -				"@types/node": "*",
    -				"ansi-escapes": "^4.2.1",
    -				"chalk": "^4.0.0",
    -				"jest-util": "^27.0.6",
    -				"string-length": "^4.0.1"
    -			},
    -			"dependencies": {
    -				"@jest/types": {
    -					"version": "27.0.6",
    -					"resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.6.tgz",
    -					"integrity": "sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==",
    -					"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"
    -					}
    -				},
    -				"@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": "*"
    -					}
    -				},
    -				"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.1",
    -					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
    -					"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
    -					"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
    -				},
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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.0.6",
    -			"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.6.tgz",
    -			"integrity": "sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==",
    -			"dev": true,
    -			"requires": {
    -				"@types/node": "*",
    -				"merge-stream": "^2.0.0",
    -				"supports-color": "^8.0.0"
    -			},
    -			"dependencies": {
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"supports-color": {
    -					"version": "8.1.1",
    -					"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
    -					"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
    -					"dev": true,
    -					"requires": {
    -						"has-flag": "^4.0.0"
    -					}
    -				}
    -			}
    -		},
    -		"js-tokens": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
    -			"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
    -			"dev": true
    -		},
    -		"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.6.0",
    -			"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz",
    -			"integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==",
    -			"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.5",
    -				"xml-name-validator": "^3.0.0"
    -			},
    -			"dependencies": {
    -				"ws": {
    -					"version": "7.5.3",
    -					"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
    -					"integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
    -					"dev": true,
    -					"requires": {}
    -				}
    -			}
    -		},
    -		"jsesc": {
    -			"version": "2.5.2",
    -			"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
    -			"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"minimist": "^1.2.5"
    -			}
    -		},
    -		"jsonfile": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
    -			"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
    -			"dev": true,
    -			"requires": {
    -				"graceful-fs": "^4.1.6"
    -			}
    -		},
    -		"kleur": {
    -			"version": "3.0.3",
    -			"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
    -			"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"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"
    -			}
    -		},
    -		"locate-path": {
    -			"version": "5.0.0",
    -			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
    -			"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"lodash.debounce": {
    -			"version": "4.0.8",
    -			"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
    -			"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
    -			"dev": true
    -		},
    -		"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.9",
    -			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
    -			"integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
    -			"dev": true,
    -			"requires": {
    -				"sourcemap-codec": "^1.4.8"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"semver": "^6.0.0"
    -			}
    -		},
    -		"makeerror": {
    -			"version": "1.0.11",
    -			"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
    -			"integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
    -			"dev": true,
    -			"requires": {
    -				"tmpl": "1.0.x"
    -			}
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"merge2": {
    -			"version": "1.4.1",
    -			"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
    -			"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
    -			"dev": true
    -		},
    -		"micromatch": {
    -			"version": "4.0.4",
    -			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
    -			"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
    -			"dev": true,
    -			"requires": {
    -				"braces": "^3.0.1",
    -				"picomatch": "^2.2.3"
    -			}
    -		},
    -		"mime-db": {
    -			"version": "1.48.0",
    -			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz",
    -			"integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==",
    -			"dev": true
    -		},
    -		"mime-types": {
    -			"version": "2.1.31",
    -			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz",
    -			"integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==",
    -			"dev": true,
    -			"requires": {
    -				"mime-db": "1.48.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
    -		},
    -		"minimatch": {
    -			"version": "3.0.4",
    -			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
    -			"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
    -			"dev": true,
    -			"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==",
    -			"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==",
    -			"dev": true
    -		},
    -		"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-fetch": {
    -			"version": "2.6.1",
    -			"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
    -			"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
    -			"dev": true
    -		},
    -		"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-regexp": {
    -			"version": "1.0.0",
    -			"resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
    -			"integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
    -			"dev": true
    -		},
    -		"node-releases": {
    -			"version": "2.0.2",
    -			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz",
    -			"integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==",
    -			"dev": true
    -		},
    -		"normalize-path": {
    -			"version": "3.0.0",
    -			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
    -			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
    -			"dev": true
    -		},
    -		"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-inspect": {
    -			"version": "1.10.3",
    -			"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz",
    -			"integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==",
    -			"dev": true
    -		},
    -		"object-keys": {
    -			"version": "1.1.1",
    -			"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
    -			"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"call-bind": "^1.0.0",
    -				"define-properties": "^1.1.3",
    -				"has-symbols": "^1.0.1",
    -				"object-keys": "^1.1.1"
    -			}
    -		},
    -		"once": {
    -			"version": "1.4.0",
    -			"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
    -			"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
    -			"dev": true,
    -			"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.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"
    -			}
    -		},
    -		"p-each-series": {
    -			"version": "2.2.0",
    -			"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
    -			"integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
    -			"dev": true
    -		},
    -		"p-limit": {
    -			"version": "2.3.0",
    -			"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
    -			"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
    -			"dev": true,
    -			"requires": {
    -				"p-try": "^2.0.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==",
    -			"dev": true,
    -			"requires": {
    -				"p-limit": "^2.2.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==",
    -			"dev": true
    -		},
    -		"parse5": {
    -			"version": "6.0.1",
    -			"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
    -			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"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=",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"path-type": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
    -			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
    -			"dev": true
    -		},
    -		"picocolors": {
    -			"version": "1.0.0",
    -			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
    -			"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
    -			"dev": true
    -		},
    -		"picomatch": {
    -			"version": "2.3.0",
    -			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
    -			"integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
    -			"dev": true
    -		},
    -		"pirates": {
    -			"version": "4.0.1",
    -			"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
    -			"integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
    -			"dev": true,
    -			"requires": {
    -				"node-modules-regexp": "^1.0.0"
    -			}
    -		},
    -		"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"
    -			}
    -		},
    -		"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
    -		},
    -		"pretty-format": {
    -			"version": "26.6.2",
    -			"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
    -			"integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
    -			"dev": true,
    -			"requires": {
    -				"@jest/types": "^26.6.2",
    -				"ansi-regex": "^5.0.0",
    -				"ansi-styles": "^4.0.0",
    -				"react-is": "^17.0.1"
    -			},
    -			"dependencies": {
    -				"ansi-regex": {
    -					"version": "5.0.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"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
    -				}
    -			}
    -		},
    -		"prompts": {
    -			"version": "2.4.1",
    -			"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz",
    -			"integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==",
    -			"dev": true,
    -			"requires": {
    -				"kleur": "^3.0.3",
    -				"sisteransi": "^1.0.5"
    -			}
    -		},
    -		"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
    -		},
    -		"punycode": {
    -			"version": "2.1.1",
    -			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
    -			"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
    -			"dev": true
    -		},
    -		"queue-microtask": {
    -			"version": "1.2.3",
    -			"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
    -			"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
    -			"dev": true
    -		},
    -		"randombytes": {
    -			"version": "2.1.0",
    -			"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
    -			"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
    -			"dev": true,
    -			"requires": {
    -				"safe-buffer": "^5.1.0"
    -			}
    -		},
    -		"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
    -		},
    -		"regenerate": {
    -			"version": "1.4.2",
    -			"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
    -			"integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
    -			"dev": true
    -		},
    -		"regenerate-unicode-properties": {
    -			"version": "10.0.1",
    -			"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
    -			"integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
    -			"dev": true,
    -			"requires": {
    -				"regenerate": "^1.4.2"
    -			}
    -		},
    -		"regenerator-runtime": {
    -			"version": "0.13.7",
    -			"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
    -			"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
    -		},
    -		"regenerator-transform": {
    -			"version": "0.14.5",
    -			"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
    -			"integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/runtime": "^7.8.4"
    -			}
    -		},
    -		"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": "5.0.1",
    -			"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz",
    -			"integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==",
    -			"dev": true,
    -			"requires": {
    -				"regenerate": "^1.4.2",
    -				"regenerate-unicode-properties": "^10.0.1",
    -				"regjsgen": "^0.6.0",
    -				"regjsparser": "^0.8.2",
    -				"unicode-match-property-ecmascript": "^2.0.0",
    -				"unicode-match-property-value-ecmascript": "^2.0.0"
    -			}
    -		},
    -		"regjsgen": {
    -			"version": "0.6.0",
    -			"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
    -			"integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
    -			"dev": true
    -		},
    -		"regjsparser": {
    -			"version": "0.8.4",
    -			"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
    -			"integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
    -			"dev": true,
    -			"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=",
    -					"dev": true
    -				}
    -			}
    -		},
    -		"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
    -		},
    -		"resolve": {
    -			"version": "1.20.0",
    -			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
    -			"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
    -			"dev": true,
    -			"requires": {
    -				"is-core-module": "^2.2.0",
    -				"path-parse": "^1.0.6"
    -			}
    -		},
    -		"reusify": {
    -			"version": "1.0.4",
    -			"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
    -			"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
    -			"dev": true
    -		},
    -		"rollup": {
    -			"version": "2.70.0",
    -			"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.70.0.tgz",
    -			"integrity": "sha512-iEzYw+syFxQ0X9RefVwhr8BA2TNJsTaX8L8dhyeyMECDbmiba+8UQzcu+xZdji0+JQ+s7kouQnw+9Oz5M19XKA==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"@babel/code-frame": "^7.10.4",
    -				"jest-worker": "^26.2.1",
    -				"serialize-javascript": "^4.0.0",
    -				"terser": "^5.0.0"
    -			},
    -			"dependencies": {
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"dev": true
    -				},
    -				"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==",
    -					"dev": true,
    -					"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==",
    -					"dev": true,
    -					"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==",
    -					"dev": true,
    -					"requires": {
    -						"has-flag": "^4.0.0"
    -					}
    -				}
    -			}
    -		},
    -		"rollup-plugin-typescript2": {
    -			"version": "0.30.0",
    -			"resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz",
    -			"integrity": "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==",
    -			"dev": true,
    -			"requires": {
    -				"@rollup/pluginutils": "^4.1.0",
    -				"find-cache-dir": "^3.3.1",
    -				"fs-extra": "8.1.0",
    -				"resolve": "1.20.0",
    -				"tslib": "2.1.0"
    -			},
    -			"dependencies": {
    -				"@rollup/pluginutils": {
    -					"version": "4.2.0",
    -					"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.0.tgz",
    -					"integrity": "sha512-2WUyJNRkyH5p487pGnn4tWAsxhEFKN/pT8CMgHshd5H+IXkOnKvKZwsz5ZWz+YCXkleZRAU5kwbfgF8CPfDRqA==",
    -					"dev": true,
    -					"requires": {
    -						"estree-walker": "^2.0.1",
    -						"picomatch": "^2.2.2"
    -					}
    -				},
    -				"tslib": {
    -					"version": "2.1.0",
    -					"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
    -					"integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
    -					"dev": true
    -				}
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"queue-microtask": "^1.2.2"
    -			}
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"safer-buffer": {
    -			"version": "2.1.2",
    -			"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
    -			"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
    -			"dev": true
    -		},
    -		"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"
    -			}
    -		},
    -		"semver": {
    -			"version": "6.3.0",
    -			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
    -			"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
    -			"dev": true
    -		},
    -		"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
    -		},
    -		"signal-exit": {
    -			"version": "3.0.3",
    -			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
    -			"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
    -			"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": "3.0.0",
    -			"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
    -			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
    -			"dev": true
    -		},
    -		"source-map": {
    -			"version": "0.5.7",
    -			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
    -			"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
    -			"dev": true
    -		},
    -		"source-map-support": {
    -			"version": "0.5.19",
    -			"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
    -			"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
    -			"dev": true,
    -			"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==",
    -					"dev": true
    -				}
    -			}
    -		},
    -		"sourcemap-codec": {
    -			"version": "1.4.8",
    -			"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
    -			"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
    -			"dev": true
    -		},
    -		"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-utils": {
    -			"version": "2.0.3",
    -			"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
    -			"integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
    -			"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
    -				}
    -			}
    -		},
    -		"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.0",
    -					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
    -					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
    -					"dev": true
    -				},
    -				"strip-ansi": {
    -					"version": "6.0.0",
    -					"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
    -					"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
    -					"dev": true,
    -					"requires": {
    -						"ansi-regex": "^5.0.0"
    -					}
    -				}
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true,
    -			"requires": {
    -				"call-bind": "^1.0.2",
    -				"define-properties": "^1.1.3"
    -			}
    -		},
    -		"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-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
    -		},
    -		"supports-color": {
    -			"version": "5.5.0",
    -			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
    -			"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
    -			"dev": true,
    -			"requires": {
    -				"has-flag": "^3.0.0"
    -			}
    -		},
    -		"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": {
    -				"has-flag": {
    -					"version": "4.0.0",
    -					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
    -					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
    -					"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"
    -					}
    -				}
    -			}
    -		},
    -		"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
    -		},
    -		"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.7.1",
    -			"resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz",
    -			"integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==",
    -			"dev": true,
    -			"requires": {
    -				"commander": "^2.20.0",
    -				"source-map": "~0.7.2",
    -				"source-map-support": "~0.5.19"
    -			},
    -			"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
    -				}
    -			}
    -		},
    -		"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"
    -			}
    -		},
    -		"throat": {
    -			"version": "6.0.1",
    -			"resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz",
    -			"integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==",
    -			"dev": true
    -		},
    -		"tmpl": {
    -			"version": "1.0.4",
    -			"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
    -			"integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
    -			"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=",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"requires": {
    -				"is-number": "^7.0.0"
    -			}
    -		},
    -		"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"
    -			}
    -		},
    -		"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
    -				}
    -			}
    -		},
    -		"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"
    -			}
    -		},
    -		"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
    -		},
    -		"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": "3.9.10",
    -			"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz",
    -			"integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==",
    -			"dev": true
    -		},
    -		"unbox-primitive": {
    -			"version": "1.0.1",
    -			"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
    -			"integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true,
    -			"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==",
    -			"dev": true
    -		},
    -		"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==",
    -			"dev": true
    -		},
    -		"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
    -		},
    -		"util": {
    -			"version": "0.12.4",
    -			"resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz",
    -			"integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==",
    -			"dev": true,
    -			"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"
    -			}
    -		},
    -		"v8-to-istanbul": {
    -			"version": "8.0.0",
    -			"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz",
    -			"integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==",
    -			"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
    -				}
    -			}
    -		},
    -		"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.7",
    -			"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
    -			"integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
    -			"dev": true,
    -			"requires": {
    -				"makeerror": "1.0.x"
    -			}
    -		},
    -		"web-streams-polyfill": {
    -			"version": "3.0.3",
    -			"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.0.3.tgz",
    -			"integrity": "sha512-d2H/t0eqRNM4w2WvmTdoeIvzAUSpK7JmATB8Nr2lb7nQ9BTIJVjbQ/TRFVEh2gUH1HwclPdoPtfMoFfetXaZnA==",
    -			"dev": true
    -		},
    -		"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
    -		},
    -		"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"
    -			}
    -		},
    -		"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==",
    -			"dev": true,
    -			"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.4",
    -			"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz",
    -			"integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==",
    -			"dev": true,
    -			"requires": {
    -				"available-typed-arrays": "^1.0.2",
    -				"call-bind": "^1.0.0",
    -				"es-abstract": "^1.18.0-next.1",
    -				"foreach": "^2.0.5",
    -				"function-bind": "^1.1.1",
    -				"has-symbols": "^1.0.1",
    -				"is-typed-array": "^1.1.3"
    -			}
    -		},
    -		"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
    -		},
    -		"wrappy": {
    -			"version": "1.0.2",
    -			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
    -			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
    -			"dev": true
    -		},
    -		"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"
    -			}
    -		},
    -		"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
    -		},
    -		"yallist": {
    -			"version": "4.0.0",
    -			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
    -			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
    -			"dev": true
    -		},
    -		"yet-another-abortcontroller-polyfill": {
    -			"version": "0.0.4",
    -			"resolved": "https://registry.npmjs.org/yet-another-abortcontroller-polyfill/-/yet-another-abortcontroller-polyfill-0.0.4.tgz",
    -			"integrity": "sha512-6do/P+mjm7FDUD+q8FrZ0ClMIbjGuKyWuWm3Vz2O7QmVf73HVLYIDV6toS7T0qoH1yeI2HPb8VgJp7w+zcVWvA==",
    -			"dev": true
    -		}
    -	}
    -}
    diff --git a/pkg/npm/http-api/package.json b/pkg/npm/http-api/package.json
    deleted file mode 100644
    index 8b5f49767..000000000
    --- a/pkg/npm/http-api/package.json
    +++ /dev/null
    @@ -1,66 +0,0 @@
    -{
    -  "name": "@urbit/http-api",
    -  "version": "2.1.0",
    -  "license": "MIT",
    -  "description": "Library to interact with an Urbit ship over HTTP",
    -  "repository": {
    -    "type": "git",
    -    "url": "ssh://git@github.com/urbit/urbit.git",
    -    "directory": "pkg/npm/http-api"
    -  },
    -  "type": "module",
    -  "main": "dist/cjs/index.js",
    -  "module": "dist/esm/index.js",
    -  "jsdelivr": "dist/urbit-http-api.min.js",
    -  "unpkg": "dist/urbit-http-api.min.js",
    -  "types": "dist/index.d.ts",
    -  "files": [
    -    "dist/**"
    -  ],
    -  "scripts": {
    -    "test": "jest",
    -    "build": "npm run clean && rollup -c && npx tsc -p tsconfig.json",
    -    "prepare": "npm run build",
    -    "watch": "rollup -c -w",
    -    "clean": "rm -rf dist/* types/*"
    -  },
    -  "prettier": {
    -    "printWidth": 80,
    -    "semi": true,
    -    "singleQuote": true,
    -    "trailingComma": "es5"
    -  },
    -  "author": "",
    -  "devDependencies": {
    -    "@babel/core": "^7.15.8",
    -    "@babel/preset-env": "^7.15.8",
    -    "@babel/preset-typescript": "^7.16.0",
    -    "@rollup/plugin-babel": "^5.3.0",
    -    "@rollup/plugin-commonjs": "^21.0.1",
    -    "@rollup/plugin-node-resolve": "^13.0.6",
    -    "@types/browser-or-node": "^1.2.0",
    -    "@types/eventsource": "^1.1.5",
    -    "@types/jest": "^26.0.24",
    -    "@types/react": "^16.9.56",
    -    "@typescript-eslint/eslint-plugin": "^4.7.0",
    -    "@typescript-eslint/parser": "^4.7.0",
    -    "babel-jest": "^27.0.6",
    -    "cross-fetch": "^3.1.4",
    -    "event-target-polyfill": "0.0.3",
    -    "fast-text-encoding": "^1.0.3",
    -    "jest": "^27.0.6",
    -    "rollup": "^2.59.0",
    -    "rollup-plugin-terser": "^7.0.2",
    -    "rollup-plugin-typescript2": "^0.30.0",
    -    "typescript": "^3.9.7",
    -    "util": "^0.12.3",
    -    "web-streams-polyfill": "^3.0.3",
    -    "yet-another-abortcontroller-polyfill": "0.0.4"
    -  },
    -  "dependencies": {
    -    "@babel/runtime": "^7.12.5",
    -    "@microsoft/fetch-event-source": "^2.0.0",
    -    "browser-or-node": "^1.3.0",
    -    "core-js": "^3.19.1"
    -  }
    -}
    diff --git a/pkg/npm/http-api/rollup.config.ts b/pkg/npm/http-api/rollup.config.ts
    deleted file mode 100644
    index 6ad92c7eb..000000000
    --- a/pkg/npm/http-api/rollup.config.ts
    +++ /dev/null
    @@ -1,72 +0,0 @@
    -import { nodeResolve } from '@rollup/plugin-node-resolve';
    -import commonJS from '@rollup/plugin-commonjs';
    -import { terser } from 'rollup-plugin-terser';
    -import babel from '@rollup/plugin-babel';
    -import typescript from 'rollup-plugin-typescript2';
    -
    -const input = ['src/index.ts'];
    -
    -// Skip certain warnings
    -function onwarn(warning) {
    -  if (warning.code === 'THIS_IS_UNDEFINED') {
    -    return;
    -  }
    -
    -  console.warn(warning.message);
    -}
    -
    -export default [
    -  {
    -    input,
    -    onwarn,
    -    plugins: [
    -      nodeResolve({
    -        extensions: ['.js', '.jsx', '.ts', '.tsx'],
    -      }),
    -      commonJS(),
    -      typescript(),
    -      babel({
    -        babelHelpers: 'bundled',
    -        exclude: ['node_modules/**'],
    -      }),
    -      terser({
    -        ecma: 2017,
    -        compress: true,
    -        mangle: true,
    -      }),
    -    ],
    -    output: {
    -      file: `dist/urbit-http-api.min.js`,
    -      format: 'umd',
    -      name: 'UrbitHttpApi', // this is the name of the global object
    -      esModule: false,
    -      exports: 'named',
    -      sourcemap: true,
    -    },
    -  },
    -  {
    -    input,
    -    onwarn,
    -    plugins: [
    -      nodeResolve({
    -        extensions: ['.js', '.jsx', '.ts', '.tsx'],
    -      }),
    -      commonJS(),
    -      typescript(),
    -    ],
    -    output: [
    -      {
    -        dir: 'dist/esm',
    -        format: 'esm',
    -        exports: 'named',
    -        sourcemap: true,
    -      },
    -      {
    -        dir: 'dist/cjs',
    -        format: 'cjs',
    -        exports: 'named',
    -        sourcemap: true,
    -      },
    -    ],
    -  },
    -];
    diff --git a/pkg/npm/http-api/setupEnv.js b/pkg/npm/http-api/setupEnv.js
    deleted file mode 100644
    index d01c0dc31..000000000
    --- a/pkg/npm/http-api/setupEnv.js
    +++ /dev/null
    @@ -1,8 +0,0 @@
    -require('event-target-polyfill');
    -require('yet-another-abortcontroller-polyfill');
    -require('cross-fetch/polyfill');
    -require('fast-text-encoding');
    -require('web-streams-polyfill');
    -
    -global.ReadableStream = require('web-streams-polyfill').ReadableStream; 
    -  
    diff --git a/pkg/npm/http-api/src/Urbit.ts b/pkg/npm/http-api/src/Urbit.ts
    deleted file mode 100644
    index ab473e6d3..000000000
    --- a/pkg/npm/http-api/src/Urbit.ts
    +++ /dev/null
    @@ -1,588 +0,0 @@
    -import { isBrowser, isNode } from 'browser-or-node';
    -import {
    -  fetchEventSource,
    -  EventSourceMessage,
    -} from '@microsoft/fetch-event-source';
    -
    -import {
    -  Scry,
    -  Thread,
    -  AuthenticationInterface,
    -  PokeInterface,
    -  SubscriptionRequestInterface,
    -  headers,
    -  SSEOptions,
    -  PokeHandlers,
    -  Message,
    -  FatalError,
    -} from './types';
    -import { hexString } from './utils';
    -
    -/**
    - * A class for interacting with an urbit ship, given its URL and code
    - */
    -export class Urbit {
    -  /**
    -   * UID will be used for the channel: The current unix time plus a random hex string
    -   */
    -  private uid: string = `${Math.floor(Date.now() / 1000)}-${hexString(6)}`;
    -
    -  /**
    -   * Last Event ID is an auto-updated index of which events have been sent over this channel
    -   */
    -  private lastEventId: number = 0;
    -
    -  private lastAcknowledgedEventId: number = 0;
    -
    -  /**
    -   * SSE Client is null for now; we don't want to start polling until it the channel exists
    -   */
    -  private sseClientInitialized: boolean = false;
    -
    -  /**
    -   * Cookie gets set when we log in.
    -   */
    -  cookie?: string | undefined;
    -
    -  /**
    -   * A registry of requestId to successFunc/failureFunc
    -   *
    -   * These functions are registered during a +poke and are executed
    -   * in the onServerEvent()/onServerError() callbacks. Only one of
    -   * the functions will be called, and the outstanding poke will be
    -   * removed after calling the success or failure function.
    -   */
    -
    -  private outstandingPokes: Map = new Map();
    -
    -  /**
    -   * A registry of requestId to subscription functions.
    -   *
    -   * These functions are registered during a +subscribe and are
    -   * executed in the onServerEvent()/onServerError() callbacks. The
    -   * event function will be called whenever a new piece of data on this
    -   * subscription is available, which may be 0, 1, or many times. The
    -   * disconnect function may be called exactly once.
    -   */
    -  private outstandingSubscriptions: Map =
    -    new Map();
    -
    -  /**
    -   * Our abort controller, used to close the connection
    -   */
    -  private abort = new AbortController();
    -
    -  /**
    -   * Ship can be set, in which case we can do some magic stuff like send chats
    -   */
    -  ship?: string | null;
    -
    -  /**
    -   * If verbose, logs output eagerly.
    -   */
    -  verbose?: boolean;
    -
    -  /**
    -   * number of consecutive errors in connecting to the eventsource
    -   */
    -  private errorCount = 0;
    -
    -  onError?: (error: any) => void = null;
    -
    -  onRetry?: () => void = null;
    -
    -  onOpen?: () => void = null;
    -
    -  /** This is basic interpolation to get the channel URL of an instantiated Urbit connection. */
    -  private get channelUrl(): string {
    -    return `${this.url}/~/channel/${this.uid}`;
    -  }
    -
    -  private get fetchOptions(): any {
    -    const headers: headers = {
    -      'Content-Type': 'application/json',
    -    };
    -    if (!isBrowser) {
    -      headers.Cookie = this.cookie;
    -    }
    -    return {
    -      credentials: 'include',
    -      accept: '*',
    -      headers,
    -      signal: this.abort.signal,
    -    };
    -  }
    -
    -  /**
    -   * Constructs a new Urbit connection.
    -   *
    -   * @param url  The URL (with protocol and port) of the ship to be accessed. If
    -   * the airlock is running in a webpage served by the ship, this should just
    -   * be the empty string.
    -   * @param code The access code for the ship at that address
    -   */
    -  constructor(public url: string, public code?: string, public desk?: string) {
    -    if (isBrowser) {
    -      window.addEventListener('beforeunload', this.delete);
    -    }
    -    return this;
    -  }
    -
    -  /**
    -   * All-in-one hook-me-up.
    -   *
    -   * Given a ship, url, and code, this returns an airlock connection
    -   * that is ready to go. It `|hi`s itself to create the channel,
    -   * then opens the channel via EventSource.
    -   *
    -   */
    -  static async authenticate({
    -    ship,
    -    url,
    -    code,
    -    verbose = false,
    -  }: AuthenticationInterface) {
    -    const airlock = new Urbit(`http://${url}`, code);
    -    airlock.verbose = verbose;
    -    airlock.ship = ship;
    -    await airlock.connect();
    -    await airlock.poke({
    -      app: 'hood',
    -      mark: 'helm-hi',
    -      json: 'opening airlock',
    -    });
    -    await airlock.eventSource();
    -    return airlock;
    -  }
    -
    -  /**
    -   * Connects to the Urbit ship. Nothing can be done until this is called.
    -   * That's why we roll it into this.authenticate
    -   */
    -  async connect(): Promise {
    -    if (this.verbose) {
    -      console.log(
    -        `password=${this.code} `,
    -        isBrowser
    -          ? 'Connecting in browser context at ' + `${this.url}/~/login`
    -          : 'Connecting from node context'
    -      );
    -    }
    -    return fetch(`${this.url}/~/login`, {
    -      method: 'post',
    -      body: `password=${this.code}`,
    -      credentials: 'include',
    -    }).then((response) => {
    -      if (this.verbose) {
    -        console.log('Received authentication response', response);
    -      }
    -      const cookie = response.headers.get('set-cookie');
    -      if (!this.ship) {
    -        this.ship = new RegExp(/urbauth-~([\w-]+)/).exec(cookie)[1];
    -      }
    -      if (!isBrowser) {
    -        this.cookie = cookie;
    -      }
    -    });
    -  }
    -
    -  /**
    -   * Initializes the SSE pipe for the appropriate channel.
    -   */
    -  async eventSource(): Promise {
    -    if (this.sseClientInitialized) {
    -      return Promise.resolve();
    -    }
    -    if (this.lastEventId === 0) {
    -      // Can't receive events until the channel is open,
    -      // so poke and open then
    -      await this.poke({
    -        app: 'hood',
    -        mark: 'helm-hi',
    -        json: 'Opening API channel',
    -      });
    -      return;
    -    }
    -    this.sseClientInitialized = true;
    -    return new Promise((resolve, reject) => {
    -      const sseOptions: SSEOptions = {
    -        headers: {},
    -      };
    -      if (isBrowser) {
    -        sseOptions.withCredentials = true;
    -      } else if (isNode) {
    -        sseOptions.headers.Cookie = this.cookie;
    -      }
    -      fetchEventSource(this.channelUrl, {
    -        ...this.fetchOptions,
    -        openWhenHidden: true,
    -        onopen: async (response) => {
    -          if (this.verbose) {
    -            console.log('Opened eventsource', response);
    -          }
    -          if (response.ok) {
    -            this.errorCount = 0;
    -            this.onOpen && this.onOpen();
    -            resolve();
    -            return; // everything's good
    -          } else {
    -            const err = new Error('failed to open eventsource');
    -            reject(err);
    -          }
    -        },
    -        onmessage: (event: EventSourceMessage) => {
    -          if (this.verbose) {
    -            console.log('Received SSE: ', event);
    -          }
    -          if (!event.id) return;
    -          this.lastEventId = parseInt(event.id, 10);
    -          if (this.lastEventId - this.lastAcknowledgedEventId > 20) {
    -            this.ack(this.lastEventId);
    -          }
    -
    -          if (event.data && JSON.parse(event.data)) {
    -            const data: any = JSON.parse(event.data);
    -
    -            if (
    -              data.response === 'poke' &&
    -              this.outstandingPokes.has(data.id)
    -            ) {
    -              const funcs = this.outstandingPokes.get(data.id);
    -              if (data.hasOwnProperty('ok')) {
    -                funcs.onSuccess();
    -              } else if (data.hasOwnProperty('err')) {
    -                console.error(data.err);
    -                funcs.onError(data.err);
    -              } else {
    -                console.error('Invalid poke response', data);
    -              }
    -              this.outstandingPokes.delete(data.id);
    -            } else if (
    -              data.response === 'subscribe' &&
    -              this.outstandingSubscriptions.has(data.id)
    -            ) {
    -              const funcs = this.outstandingSubscriptions.get(data.id);
    -              if (data.hasOwnProperty('err')) {
    -                console.error(data.err);
    -                funcs.err(data.err, data.id);
    -                this.outstandingSubscriptions.delete(data.id);
    -              }
    -            } else if (
    -              data.response === 'diff' &&
    -              this.outstandingSubscriptions.has(data.id)
    -            ) {
    -              const funcs = this.outstandingSubscriptions.get(data.id);
    -              try {
    -                funcs.event(data.json);
    -              } catch (e) {
    -                console.error('Failed to call subscription event callback', e);
    -              }
    -            } else if (
    -              data.response === 'quit' &&
    -              this.outstandingSubscriptions.has(data.id)
    -            ) {
    -              const funcs = this.outstandingSubscriptions.get(data.id);
    -              funcs.quit(data);
    -              this.outstandingSubscriptions.delete(data.id);
    -            } else {
    -              console.log([...this.outstandingSubscriptions.keys()]);
    -              console.log('Unrecognized response', data);
    -            }
    -          }
    -        },
    -        onerror: (error) => {
    -          console.warn(error);
    -          if (!(error instanceof FatalError) && this.errorCount++ < 4) {
    -            this.onRetry && this.onRetry();
    -            return Math.pow(2, this.errorCount - 1) * 750;
    -          }
    -          this.onError && this.onError(error);
    -          throw error;
    -        },
    -        onclose: () => {
    -          console.log('e');
    -          throw new Error('Ship unexpectedly closed the connection');
    -        },
    -      });
    -    });
    -  }
    -
    -  /**
    -   * Reset airlock, abandoning current subscriptions and wiping state
    -   *
    -   */
    -  reset() {
    -    if(this.verbose) {
    -      console.log('resetting');
    -    }
    -    this.delete();
    -    this.abort.abort();
    -    this.abort = new AbortController();
    -    this.uid = `${Math.floor(Date.now() / 1000)}-${hexString(6)}`;
    -    this.lastEventId = 0;
    -    this.lastAcknowledgedEventId = 0;
    -    this.outstandingSubscriptions = new Map();
    -    this.outstandingPokes = new Map();
    -    this.sseClientInitialized = false;
    -  }
    -
    -  /**
    -   * Autoincrements the next event ID for the appropriate channel.
    -   */
    -  private getEventId(): number {
    -    this.lastEventId = Number(this.lastEventId) + 1;
    -    return this.lastEventId;
    -  }
    -
    -  /**
    -   * Acknowledges an event.
    -   *
    -   * @param eventId The event to acknowledge.
    -   */
    -  private async ack(eventId: number): Promise {
    -    this.lastAcknowledgedEventId = eventId;
    -    const message: Message = {
    -      action: 'ack',
    -      'event-id': eventId,
    -    };
    -    await this.sendJSONtoChannel(message);
    -    return eventId;
    -  }
    -
    -  private async sendJSONtoChannel(...json: Message[]): Promise {
    -    const response = await fetch(this.channelUrl, {
    -      ...this.fetchOptions,
    -      method: 'PUT',
    -      body: JSON.stringify(json),
    -    });
    -    if (!response.ok) {
    -      throw new Error('Failed to PUT channel');
    -    }
    -    if (!this.sseClientInitialized) {
    -      await this.eventSource();
    -    }
    -  }
    -
    -  /**
    -   * Creates a subscription, waits for a fact and then unsubscribes
    -   *
    -   * @param app Name of gall agent to subscribe to
    -   * @param path Path to subscribe to
    -   * @param timeout Optional timeout before ending subscription
    -   *
    -   * @returns The first fact on the subcription
    -   */
    -  async subscribeOnce(app: string, path: string, timeout?: number) {
    -    return new Promise(async (resolve, reject) => {
    -      let done = false;
    -      let id: number | null = null;
    -      const quit = () => {
    -        if (!done) {
    -          reject('quit');
    -        }
    -      };
    -      const event = (e: T) => {
    -        if (!done) {
    -          resolve(e);
    -          this.unsubscribe(id);
    -        }
    -      };
    -      const request = { app, path, event, err: reject, quit };
    -
    -      id = await this.subscribe(request);
    -
    -      if (timeout) {
    -        setTimeout(() => {
    -          if (!done) {
    -            done = true;
    -            reject('timeout');
    -            this.unsubscribe(id);
    -          }
    -        }, timeout);
    -      }
    -    });
    -  }
    -
    -  /**
    -   * Pokes a ship with data.
    -   *
    -   * @param app The app to poke
    -   * @param mark The mark of the data being sent
    -   * @param json The data to send
    -   */
    -  async poke(params: PokeInterface): Promise {
    -    const { app, mark, json, ship, onSuccess, onError } = {
    -      onSuccess: () => {},
    -      onError: () => {},
    -      ship: this.ship,
    -      ...params,
    -    };
    -    const message: Message = {
    -      id: this.getEventId(),
    -      action: 'poke',
    -      ship,
    -      app,
    -      mark,
    -      json,
    -    };
    -    const [send, result] = await Promise.all([
    -      this.sendJSONtoChannel(message),
    -      new Promise((resolve, reject) => {
    -        this.outstandingPokes.set(message.id, {
    -          onSuccess: () => {
    -            onSuccess();
    -            resolve(message.id);
    -          },
    -          onError: (event) => {
    -            onError(event);
    -            reject(event.err);
    -          },
    -        });
    -      }),
    -    ]);
    -    return result;
    -  }
    -
    -  /**
    -   * Subscribes to a path on an app on a ship.
    -   *
    -   *
    -   * @param app The app to subsribe to
    -   * @param path The path to which to subscribe
    -   * @param handlers Handlers to deal with various events of the subscription
    -   */
    -  async subscribe(params: SubscriptionRequestInterface): Promise {
    -    const { app, path, ship, err, event, quit } = {
    -      err: () => {},
    -      event: () => {},
    -      quit: () => {},
    -      ship: this.ship,
    -      ...params,
    -    };
    -
    -    const message: Message = {
    -      id: this.getEventId(),
    -      action: 'subscribe',
    -      ship,
    -      app,
    -      path,
    -    };
    -
    -    this.outstandingSubscriptions.set(message.id, {
    -      app,
    -      path,
    -      err,
    -      event,
    -      quit,
    -    });
    -
    -    await this.sendJSONtoChannel(message);
    -
    -    return message.id;
    -  }
    -
    -  /**
    -   * Unsubscribes to a given subscription.
    -   *
    -   * @param subscription
    -   */
    -  async unsubscribe(subscription: number) {
    -    return this.sendJSONtoChannel({
    -      id: this.getEventId(),
    -      action: 'unsubscribe',
    -      subscription,
    -    }).then(() => {
    -      this.outstandingSubscriptions.delete(subscription);
    -    });
    -  }
    -
    -  /**
    -   * Deletes the connection to a channel.
    -   */
    -  delete() {
    -    if (isBrowser) {
    -      navigator.sendBeacon(
    -        this.channelUrl,
    -        JSON.stringify([
    -          {
    -            action: 'delete',
    -          },
    -        ])
    -      );
    -    } else {
    -      // TODO
    -      // this.sendMessage('delete');
    -    }
    -  }
    -
    -  /**
    -   * Scry into an gall agent at a path
    -   *
    -   * @typeParam T - Type of the scry result
    -   *
    -   * @remarks
    -   *
    -   * Equivalent to
    -   * ```hoon
    -   * .^(T %gx /(scot %p our)/[app]/(scot %da now)/[path]/json)
    -   * ```
    -   * The returned cage must have a conversion to JSON for the scry to succeed
    -   *
    -   * @param params The scry request
    -   * @returns The scry result
    -   */
    -  async scry(params: Scry): Promise {
    -    const { app, path } = params;
    -    const response = await fetch(
    -      `${this.url}/~/scry/${app}${path}.json`,
    -      this.fetchOptions
    -    );
    -    return await response.json();
    -  }
    -
    -  /**
    -   * Run a thread
    -   *
    -   *
    -   * @param inputMark   The mark of the data being sent
    -   * @param outputMark  The mark of the data being returned
    -   * @param threadName  The thread to run
    -   * @param body        The data to send to the thread
    -   * @returns  The return value of the thread
    -   */
    -  async thread(params: Thread): Promise {
    -    const {
    -      inputMark,
    -      outputMark,
    -      threadName,
    -      body,
    -      desk = this.desk,
    -    } = params;
    -    if (!desk) {
    -      throw new Error('Must supply desk to run thread from');
    -    }
    -    const res = await fetch(
    -      `${this.url}/spider/${desk}/${inputMark}/${threadName}/${outputMark}.json`,
    -      {
    -        ...this.fetchOptions,
    -        method: 'POST',
    -        body: JSON.stringify(body),
    -      }
    -    );
    -
    -    return res.json();
    -  }
    -
    -  /**
    -   * Utility function to connect to a ship that has its *.arvo.network domain configured.
    -   *
    -   * @param name Name of the ship e.g. zod
    -   * @param code Code to log in
    -   */
    -  static async onArvoNetwork(ship: string, code: string): Promise {
    -    const url = `https://${ship}.arvo.network`;
    -    return await Urbit.authenticate({ ship, url, code });
    -  }
    -}
    -
    -export default Urbit;
    diff --git a/pkg/npm/http-api/src/index.ts b/pkg/npm/http-api/src/index.ts
    deleted file mode 100644
    index 5c39dfc41..000000000
    --- a/pkg/npm/http-api/src/index.ts
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -export * from './types';
    -import { Urbit } from './Urbit';
    -export { Urbit as default, Urbit };
    diff --git a/pkg/npm/http-api/src/types.ts b/pkg/npm/http-api/src/types.ts
    deleted file mode 100644
    index 22b5be8fd..000000000
    --- a/pkg/npm/http-api/src/types.ts
    +++ /dev/null
    @@ -1,198 +0,0 @@
    -/**
    - * An urbit style path, rendered as a Javascript string
    - * @example
    - * `"/updates"`
    - */
    -export type Path = string;
    -
    -/**
    - * @p including leading sig, rendered as a string
    - *
    - * @example
    - * ```typescript
    - * "~sampel-palnet"
    - * ```
    - *
    - */
    -export type Patp = string;
    -
    -/**
    - * @p not including leading sig, rendered as a string
    - *
    - * @example
    - * ```typescript
    - * "sampel-palnet"
    - * ```
    - *
    - */
    -export type PatpNoSig = string;
    -
    -/**
    - * The name of a clay mark, as a string
    - *
    - * @example
    - * ```typescript
    - * "graph-update"
    - * ```
    - */
    -export type Mark = string;
    -
    -/**
    - * The name of a gall agent, as a string
    - *
    - * @example
    - *
    - * ```typescript
    - * "graph-store"
    - * ```
    - */
    -export type GallAgent = string;
    -
    -/**
    - * Description of an outgoing poke
    - *
    - * @typeParam Action - Typescript type of the data being poked
    - */
    -export interface Poke {
    -  /**
    -   * Ship to poke. If left empty, the api lib will populate it with the ship that it is connected to.
    -   *
    -   * @remarks
    -   *
    -   * This should always be the ship that you are connected to
    -   *
    -   */
    -  ship?: PatpNoSig;
    -  /**
    -   */
    -  app: GallAgent;
    -  /**
    -   * Mark of the cage to be poked
    -   *
    -   */
    -  mark: Mark;
    -  /**
    -   * Vase of the cage of to be poked, as JSON
    -   */
    -  json: Action;
    -}
    -
    -/**
    - * Description of a scry request
    - */
    -export interface Scry {
    -  /** {@inheritDoc GallAgent} */
    -  app: GallAgent;
    -  /** {@inheritDoc Path} */
    -  path: Path;
    -}
    -
    -/**
    - * Description of a thread request
    - *
    - * @typeParam Action - Typescript type of the data being poked
    - */
    -export interface Thread {
    -  /**
    -   * The mark of the input vase
    -   */
    -  inputMark: Mark;
    -  /**
    -   * The mark of the output vase
    -   */
    -  outputMark: Mark;
    -  /**
    -   * Name of the thread
    -   *
    -   * @example
    -   * ```typescript
    -   * "graph-add-nodes"
    -   * ```
    -   */
    -  threadName: string;
    -  /**
    -   * Desk of thread
    -   */
    -  desk?: string;
    -  /**
    -   * Data of the input vase
    -   */
    -  body: Action;
    -}
    -
    -export type Action = 'poke' | 'subscribe' | 'ack' | 'unsubscribe' | 'delete';
    -
    -export interface PokeHandlers {
    -  onSuccess?: () => void;
    -  onError?: (e: any) => void;
    -}
    -
    -export type PokeInterface = PokeHandlers & Poke;
    -
    -export interface AuthenticationInterface {
    -  ship: string;
    -  url: string;
    -  code: string;
    -  verbose?: boolean;
    -}
    -
    -/**
    - * Subscription event handlers
    - *
    - */
    -export interface SubscriptionInterface {
    -  /**
    -   * Handle negative %watch-ack
    -   */
    -  err?(error: any, id: string): void;
    -  /**
    -   * Handle %fact
    -   */
    -  event?(data: any): void;
    -  /**
    -   * Handle %kick
    -   */
    -  quit?(data: any): void;
    -}
    -
    -export type OnceSubscriptionErr = 'quit' | 'nack' | 'timeout';
    -
    -export interface SubscriptionRequestInterface extends SubscriptionInterface {
    -  /**
    -   * The app to subscribe to
    -   * @example
    -   * `"graph-store"`
    -   */
    -  app: GallAgent;
    -  /**
    -   * The path to which to subscribe
    -   * @example
    -   * `"/keys"`
    -   */
    -  path: Path;
    -}
    -
    -export interface headers {
    -  'Content-Type': string;
    -  Cookie?: string;
    -}
    -
    -export interface CustomEventHandler {
    -  (data: any, response: string): void;
    -}
    -
    -export interface SSEOptions {
    -  headers?: {
    -    Cookie?: string;
    -  };
    -  withCredentials?: boolean;
    -}
    -
    -export interface Message extends Record {
    -  action: Action;
    -  id?: number;
    -}
    -
    -export class ResumableError extends Error {}
    -
    -export class FatalError extends Error {}
    diff --git a/pkg/npm/http-api/src/utils.ts b/pkg/npm/http-api/src/utils.ts
    deleted file mode 100644
    index 6145f40fd..000000000
    --- a/pkg/npm/http-api/src/utils.ts
    +++ /dev/null
    @@ -1,53 +0,0 @@
    -export function camelize(str: string) {
    -  return str
    -    .replace(/\s(.)/g, function ($1: string) {
    -      return $1.toUpperCase();
    -    })
    -    .replace(/\s/g, '')
    -    .replace(/^(.)/, function ($1: string) {
    -      return $1.toLowerCase();
    -    });
    -}
    -
    -export function uncamelize(str: string, separator = '-') {
    -  // Replace all capital letters by separator followed by lowercase one
    -  var str = str.replace(/[A-Z]/g, function (letter: string) {
    -    return separator + letter.toLowerCase();
    -  });
    -  return str.replace(new RegExp('^' + separator), '');
    -}
    -
    -/**
    - * Returns a hex string of given length.
    - *
    - * Poached from StackOverflow.
    - *
    - * @param len Length of hex string to return.
    - */
    -export function hexString(len: number): string {
    -  const maxlen = 8;
    -  const min = Math.pow(16, Math.min(len, maxlen) - 1);
    -  const max = Math.pow(16, Math.min(len, maxlen)) - 1;
    -  const n = Math.floor(Math.random() * (max - min + 1)) + min;
    -  let r = n.toString(16);
    -  while (r.length < len) {
    -    r = r + hexString(len - maxlen);
    -  }
    -  return r;
    -}
    -
    -/**
    - * Generates a random UID.
    - *
    - * Copied from https://github.com/urbit/urbit/blob/137e4428f617c13f28ed31e520eff98d251ed3e9/pkg/interface/src/lib/util.js#L3
    - */
    -export function uid(): string {
    -  let str = '0v';
    -  str += Math.ceil(Math.random() * 8) + '.';
    -  for (let i = 0; i < 5; i++) {
    -    let _str = Math.ceil(Math.random() * 10000000).toString(32);
    -    _str = ('00000' + _str).substr(-5, 5);
    -    str += _str + '.';
    -  }
    -  return str.slice(0, -1);
    -}
    diff --git a/pkg/npm/http-api/test/default.test.ts b/pkg/npm/http-api/test/default.test.ts
    deleted file mode 100644
    index 6bf1c9526..000000000
    --- a/pkg/npm/http-api/test/default.test.ts
    +++ /dev/null
    @@ -1,180 +0,0 @@
    -import Urbit from '../src';
    -import 'jest';
    -
    -function fakeSSE(messages = [], timeout = 0) {
    -  const ourMessages = [...messages];
    -  const enc = new TextEncoder();
    -  return new ReadableStream({
    -    start(controller) {
    -      const interval = setInterval(() => {
    -        let message = ':\n';
    -        if (ourMessages.length > 0) {
    -          message = ourMessages.shift();
    -        }
    -
    -        controller.enqueue(enc.encode(message));
    -      }, 50);
    -
    -      if (timeout > 0) {
    -        setTimeout(() => {
    -          controller.close();
    -          clearInterval(interval);
    -          interval;
    -        }, timeout);
    -      }
    -    },
    -  });
    -}
    -
    -const ship = '~sampel-palnet';
    -let eventId = 0;
    -function event(data: any) {
    -  return `id:${eventId++}\ndata:${JSON.stringify(data)}\n\n`;
    -}
    -
    -function fact(id: number, data: any) {
    -  return event({
    -    response: 'diff',
    -    id,
    -    json: data,
    -  });
    -}
    -
    -function ack(id: number, err = false) {
    -  const res = err ? { err: 'Error' } : { ok: true };
    -  return event({ id, response: 'poke', ...res });
    -}
    -const fakeFetch = (body) => () =>
    -  Promise.resolve({
    -    ok: true,
    -    body: body(),
    -  });
    -
    -const wait = (ms: number) => new Promise((res) => setTimeout(res, ms));
    -
    -process.on('unhandledRejection', (error) => {
    -  console.error(error);
    -});
    -
    -describe('Initialisation', () => {
    -  let airlock: Urbit;
    -  let fetchSpy;
    -  beforeEach(() => {
    -    airlock = new Urbit('', '+code');
    -  });
    -  afterEach(() => {
    -    fetchSpy.mockReset();
    -  });
    -  it('should poke & connect upon a 200', async () => {
    -    airlock.onOpen = jest.fn();
    -    fetchSpy = jest.spyOn(window, 'fetch');
    -    fetchSpy
    -      .mockImplementationOnce(() =>
    -        Promise.resolve({ ok: true, body: fakeSSE() })
    -      )
    -      .mockImplementationOnce(() =>
    -        Promise.resolve({ ok: true, body: fakeSSE([ack(1)]) })
    -      );
    -    await airlock.eventSource();
    -
    -    expect(airlock.onOpen).toHaveBeenCalled();
    -  }, 500);
    -  it('should handle failures', async () => {
    -    fetchSpy = jest.spyOn(window, 'fetch');
    -    airlock.onRetry = jest.fn();
    -    airlock.onOpen = jest.fn();
    -    fetchSpy
    -      .mockImplementationOnce(() =>
    -        Promise.resolve({ ok: true, body: fakeSSE() })
    -      )
    -      .mockImplementationOnce(() =>
    -        Promise.resolve({ ok: true, body: fakeSSE([], 100) })
    -      );
    -
    -    airlock.onError = jest.fn();
    -    try {
    -      airlock.eventSource();
    -      await wait(200);
    -    } catch (e) {
    -      expect(airlock.onRetry).toHaveBeenCalled();
    -    }
    -  }, 300);
    -});
    -
    -describe('subscription', () => {
    -  let airlock: Urbit;
    -  let fetchSpy: jest.SpyInstance;
    -  beforeEach(() => {
    -    eventId = 1;
    -  });
    -  afterEach(() => {
    -    fetchSpy.mockReset();
    -  });
    -
    -  it('should subscribe', async () => {
    -    fetchSpy = jest.spyOn(window, 'fetch');
    -    airlock = new Urbit('', '+code');
    -    airlock.onOpen = jest.fn();
    -    const params = {
    -      app: 'app',
    -      path: '/path',
    -      err: jest.fn(),
    -      event: jest.fn(),
    -      quit: jest.fn(),
    -    };
    -    const firstEv = 'one';
    -    const secondEv = 'two';
    -    const events = (id) => [fact(id, firstEv), fact(id, secondEv)];
    -    fetchSpy.mockImplementation(fakeFetch(() => fakeSSE(events(1))));
    -
    -    await airlock.subscribe(params);
    -    await wait(600);
    -
    -    expect(airlock.onOpen).toBeCalled();
    -    expect(params.event).toHaveBeenNthCalledWith(1, firstEv);
    -    expect(params.event).toHaveBeenNthCalledWith(2, secondEv);
    -  }, 800);
    -  it('should poke', async () => {
    -    fetchSpy = jest.spyOn(window, 'fetch');
    -    airlock = new Urbit('', '+code');
    -    airlock.onOpen = jest.fn();
    -    fetchSpy.mockImplementation(fakeFetch(() => fakeSSE([ack(1)])));
    -    const params = {
    -      app: 'app',
    -      mark: 'mark',
    -      json: { poke: 1 },
    -      onSuccess: jest.fn(),
    -      onError: jest.fn(),
    -    };
    -    await airlock.poke(params);
    -    await wait(300);
    -    expect(params.onSuccess).toHaveBeenCalled();
    -  }, 800);
    -
    -  it('should nack poke', async () => {
    -    fetchSpy = jest.spyOn(window, 'fetch');
    -    airlock = new Urbit('', '+code');
    -    airlock.onOpen = jest.fn();
    -    fetchSpy
    -      .mockImplementationOnce(() =>
    -        Promise.resolve({ ok: true, body: fakeSSE() })
    -      )
    -      .mockImplementationOnce(() =>
    -        Promise.resolve({ ok: false, body: fakeSSE([ack(1, true)]) })
    -      );
    -
    -    const params = {
    -      app: 'app',
    -      mark: 'mark',
    -      json: { poke: 1 },
    -      onSuccess: jest.fn(),
    -      onError: jest.fn(),
    -    };
    -    try {
    -      await airlock.poke(params);
    -      await wait(300);
    -    } catch (e) {
    -      expect(true).toBe(true);
    -    }
    -  });
    -});
    diff --git a/pkg/npm/http-api/tsconfig.json b/pkg/npm/http-api/tsconfig.json
    deleted file mode 100644
    index b6e90150c..000000000
    --- a/pkg/npm/http-api/tsconfig.json
    +++ /dev/null
    @@ -1,24 +0,0 @@
    -{
    -  "include": ["src/**/*.ts"],
    -  "exclude": ["node_modules", "dist", "tmp"],
    -  "compilerOptions": {
    -    "outDir": "./tmp",
    -    "module": "ESNext",
    -    "target": "ESNext",
    -    "lib": ["ESNext", "DOM"],
    -    "moduleResolution": "node",
    -    "esModuleInterop": true,
    -    "allowSyntheticDefaultImports": true,
    -    "declaration": true,
    -    "sourceMap": true,
    -    "strict": false,
    -    "pretty": true,
    -    "noImplicitAny": true,
    -    "noErrorTruncation": true,
    -    "allowJs": true,
    -    "baseUrl": ".",
    -    "paths": {
    -      "*": ["./node_modules/@types/*", "*"]
    -    }
    -  }
    -}
    diff --git a/pkg/urbit/.gitattributes b/pkg/urbit/.gitattributes
    deleted file mode 100644
    index def025cbf..000000000
    --- a/pkg/urbit/.gitattributes
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -.gitignore export-ignore
    -.gitattributes export-ignore
    -tests export-ignore
    -hashtable_tests export-ignore
    -shell.nix export-ignore
    -*.patch -text
    diff --git a/pkg/urbit/.gitignore b/pkg/urbit/.gitignore
    deleted file mode 100644
    index f78b9fecd..000000000
    --- a/pkg/urbit/.gitignore
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -# Configuration Result
    -/config.mk
    -/include/config.h
    -/include/ca-bundle.h
    -/include/ivory.h
    diff --git a/pkg/urbit/LICENSE.txt b/pkg/urbit/LICENSE.txt
    deleted file mode 100644
    index 6404c00fb..000000000
    --- a/pkg/urbit/LICENSE.txt
    +++ /dev/null
    @@ -1,21 +0,0 @@
    -The MIT License (MIT)
    -
    -Copyright (c) 2015 Urbit
    -
    -Permission is hereby granted, free of charge, to any person obtaining a copy
    -of this software and associated documentation files (the "Software"), to deal
    -in the Software without restriction, including without limitation the rights
    -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    -copies of the Software, and to permit persons to whom the Software is
    -furnished to do so, subject to the following conditions:
    -
    -The above copyright notice and this permission notice shall be included in all
    -copies or substantial portions of the Software.
    -
    -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    -SOFTWARE.
    \ No newline at end of file
    diff --git a/pkg/urbit/Makefile b/pkg/urbit/Makefile
    deleted file mode 100644
    index 46b90249e..000000000
    --- a/pkg/urbit/Makefile
    +++ /dev/null
    @@ -1,82 +0,0 @@
    -include config.mk
    -include $(foreach dir,$(compat),$(wildcard compat/$(dir)/*.mk))
    -
    -jets = jets/tree.c $(wildcard jets/*/*.c)
    -noun = $(wildcard noun/*.c)
    -ur   = $(wildcard ur/*.c)
    -vere = $(wildcard vere/*.c) $(wildcard vere/*/*.c)
    -daemon = $(wildcard daemon/*.c)
    -worker = $(wildcard worker/*.c)
    -tests  = $(wildcard tests/*.c)
    -bench  = $(wildcard bench/*.c)
    -
    -compat := $(foreach dir,$(compat),$(wildcard compat/$(dir)/*.c))
    -
    -common  = $(jets) $(noun) $(ur) $(vere) $(compat)
    -headers = $(shell find include -type f)
    -
    -common_objs = $(shell echo $(common) | sed 's/\.c/.o/g')
    -daemon_objs = $(shell echo $(daemon) | sed 's/\.c/.o/g')
    -worker_objs = $(shell echo $(worker) | sed 's/\.c/.o/g')
    -
    -all_objs = $(common_objs) $(daemon_objs) $(worker_objs)
    -all_srcs = $(common) $(daemon) $(worker)
    -
    -test_exes  = $(shell echo $(tests) | sed 's/tests\//.\/build\//g' | sed 's/\.c//g')
    -bench_exes = $(shell echo $(bench) | sed 's/bench\//.\/build\//g' | sed 's/\.c//g')
    -all_exes   = $(test_exes) $(bench_exes) ./build/urbit
    -
    -# -Werror promotes all warnings that are enabled into errors (this is on)
    -# -Wall issues all types of errors.  This is off (for now)
    -CFLAGS := $(CFLAGS)
    -
    -################################################################################
    -
    -.PHONY: all test clean mrproper
    -
    -################################################################################
    -
    -all: $(all_exes)
    -
    -test: $(test_exes)
    -	@FAIL=0;                                         \
    -	for x in $^;                                     \
    -	do echo $$'\n'"$$x" && ./$$x;                    \
    -	if [ $$? != 0 ]; then FAIL=1; fi;                \
    -	done;                                            \
    -	if [ $$FAIL != 0 ]; then echo "\n" && exit 1; fi;
    -
    -bench: $(bench_exes)
    -	build/ur_bench
    -
    -clean:
    -	rm -f ./tags $(all_objs) $(all_exes)
    -
    -mrproper: clean
    -	rm -f config.mk include/config.h
    -
    -################################################################################
    -
    -build/ur_bench: $(common_objs) bench/ur_bench.o
    -	@echo CC -o $@
    -	@mkdir -p ./build
    -	@$(CC) $^ $(LDFLAGS) -o $@
    -
    -build/%_tests: $(common_objs) tests/%_tests.o
    -	@echo CC -o $@
    -	@mkdir -p ./build
    -	@$(CC) $^ $(LDFLAGS) -o $@
    -
    -build/urbit: $(common_objs) $(daemon_objs) $(worker_objs)
    -	@echo CC -o $@
    -	@mkdir -p ./build
    -	@$(CC) $^ $(LDFLAGS) -o $@
    -
    -# CCDEPS and CCEXTRA are empty except in MingW build,
    -# which uses them to inject a C source transform step
    -%.o: %.c $(headers) $(CCDEPS)
    -	@echo CC $<
    -	@$(CC) -I./include $(CFLAGS) $< $(CCEXTRA) -c -o $@
    -
    -tags: $(all_srcs) $(headers)
    -	ctags $^
    diff --git a/pkg/urbit/bench/ur_bench.c b/pkg/urbit/bench/ur_bench.c
    deleted file mode 100644
    index 40a4e518c..000000000
    --- a/pkg/urbit/bench/ur_bench.c
    +++ /dev/null
    @@ -1,405 +0,0 @@
    -#include "all.h"
    -#include "vere/vere.h"
    -#include "ur/ur.h"
    -
    -/* _setup(): prepare for tests.
    -*/
    -static void
    -_setup(void)
    -{
    -  u3m_init();
    -  u3m_pave(c3y);
    -}
    -
    -/* _ames_writ_ex(): |hi packet from fake ~zod to fake ~nec
    -*/
    -static u3_noun
    -_ames_writ_ex(void)
    -{
    -  c3_y  bod_y[63] = {
    -    0x30, 0x90, 0x2d,  0x0,  0x0,  0x0,  0x1,  0x0,  0x9, 0xc0, 0xd0,
    -     0x0,  0x4, 0x40, 0x30, 0xf4,  0xa, 0x3d, 0x45, 0x86, 0x66, 0x2c,
    -     0x2, 0x38, 0xf8, 0x72, 0xa3,  0x9, 0xf6,  0x6, 0xf3,  0x0, 0xbe,
    -    0x67, 0x61, 0x49, 0x50,  0x4, 0x3c, 0x13, 0xb2, 0x96, 0x42, 0x1b,
    -    0x62, 0xac, 0x97, 0xff, 0x24, 0xeb, 0x69, 0x1b, 0xb2, 0x60, 0x72,
    -     0xa, 0x53, 0xdf, 0xe8, 0x8a, 0x9c, 0x6f, 0xb3
    -  };
    -  u3_noun lan = u3nc(0, 1);
    -  u3_noun cad = u3nt(c3__send, lan, u3i_bytes(sizeof(bod_y), bod_y));
    -  u3_noun wir = u3nt(c3__newt, 0x1234, u3_nul);
    -  u3_noun ovo = u3nc(u3nc(u3_blip, wir), cad);
    -  u3_noun wen;
    -
    -  {
    -    struct timeval tim_u;
    -    gettimeofday(&tim_u, 0);
    -    wen = u3_time_in_tv(&tim_u);
    -  }
    -
    -  return u3nt(c3__work, 0, u3nc(wen, ovo));
    -}
    -
    -static void
    -_jam_bench(void)
    -{
    -  struct timeval b4, f2, d0;
    -  c3_w  mil_w, i_w, max_w = 10000;
    -  u3_noun wit = _ames_writ_ex();
    -
    -  fprintf(stderr, "\r\njam microbenchmark:\r\n");
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    {
    -      u3i_slab sab_u;
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        u3s_jam_fib(&sab_u, wit);
    -        u3i_slab_free(&sab_u);
    -      }
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  jam og: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    {
    -      c3_d  len_d;
    -      c3_y* byt_y;
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        u3s_jam_xeno(wit, &len_d, &byt_y);
    -        c3_free(byt_y);
    -      }
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  jam xeno: %u ms\r\n", mil_w);
    -  }
    -
    -  while ( 1 ) {
    -    ur_root_t* rot_u = ur_root_init();
    -    c3_d       len_d;
    -    c3_y*      byt_y;
    -    ur_nref      ref;
    -
    -    u3s_jam_xeno(wit, &len_d, &byt_y);
    -    if ( ur_cue_good != ur_cue(rot_u, len_d, byt_y, &ref) ) {
    -      fprintf(stderr, " jam bench: cue failed wtf\r\n");
    -      break;
    -    }
    -
    -    c3_free(byt_y);
    -
    -    {
    -      gettimeofday(&b4, 0);
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        ur_jam(rot_u, ref, &len_d, &byt_y);
    -        c3_free(byt_y);
    -      }
    -
    -      gettimeofday(&f2, 0);
    -      timersub(&f2, &b4, &d0);
    -      mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -      fprintf(stderr, "  jam cons: %u ms\r\n", mil_w);
    -    }
    -
    -    {
    -      gettimeofday(&b4, 0);
    -
    -      {
    -        ur_jam_t *jam_u = ur_jam_init(rot_u);
    -        c3_d      len_d;
    -        c3_y*     byt_y;
    -
    -        for ( i_w = 0; i_w < max_w; i_w++ ) {
    -          ur_jam_with(jam_u, ref, &len_d, &byt_y);
    -          c3_free(byt_y);
    -        }
    -
    -        ur_jam_done(jam_u);
    -      }
    -
    -      gettimeofday(&f2, 0);
    -      timersub(&f2, &b4, &d0);
    -      mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -      fprintf(stderr, "  jam cons with: %u ms\r\n", mil_w);
    -    }
    -
    -    ur_root_free(rot_u);
    -    break;
    -  }
    -
    -  u3z(wit);
    -}
    -
    -static void
    -_cue_bench(void)
    -{
    -  struct timeval b4, f2, d0;
    -  c3_w  mil_w, i_w, max_w = 20000;
    -  u3_atom vat = u3ke_jam(_ames_writ_ex());
    -
    -  fprintf(stderr, "\r\ncue microbenchmark:\r\n");
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    for ( i_w = 0; i_w < max_w; i_w++ ) {
    -      u3z(u3s_cue(vat));
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue og: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    for ( i_w = 0; i_w < max_w; i_w++ ) {
    -      u3z(u3s_cue_atom(vat));
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue atom: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    {
    -      c3_w  len_w = u3r_met(3, vat);
    -      // XX assumes little-endian
    -      //
    -      c3_y* byt_y = ( c3y == u3a_is_cat(vat) )
    -                  ? (c3_y*)&vat
    -                  : (c3_y*)((u3a_atom*)u3a_to_ptr(vat))->buf_w;
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        u3z(u3s_cue_xeno(len_w, byt_y));
    -      }
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue xeno: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    {
    -      u3_cue_xeno* sil_u = u3s_cue_xeno_init();
    -
    -      c3_w  len_w = u3r_met(3, vat);
    -      // XX assumes little-endian
    -      //
    -      c3_y* byt_y = ( c3y == u3a_is_cat(vat) )
    -                  ? (c3_y*)&vat
    -                  : (c3_y*)((u3a_atom*)u3a_to_ptr(vat))->buf_w;
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        u3z(u3s_cue_xeno_with(sil_u, len_w, byt_y));
    -      }
    -
    -      u3s_cue_xeno_done(sil_u);
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue xeno with: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    {
    -      c3_w  len_w = u3r_met(3, vat);
    -      // XX assumes little-endian
    -      //
    -      c3_y* byt_y = ( c3y == u3a_is_cat(vat) )
    -                  ? (c3_y*)&vat
    -                  : (c3_y*)((u3a_atom*)u3a_to_ptr(vat))->buf_w;
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        ur_cue_test(len_w, byt_y);
    -      }
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue test: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    {
    -      ur_cue_test_t *t = ur_cue_test_init();
    -
    -      c3_w  len_w = u3r_met(3, vat);
    -      // XX assumes little-endian
    -      //
    -      c3_y* byt_y = ( c3y == u3a_is_cat(vat) )
    -                  ? (c3_y*)&vat
    -                  : (c3_y*)((u3a_atom*)u3a_to_ptr(vat))->buf_w;
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        ur_cue_test_with(t, len_w, byt_y);
    -      }
    -
    -      ur_cue_test_done(t);
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue test with: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    {
    -      ur_root_t* rot_u = ur_root_init();
    -      ur_nref      ref;
    -      c3_w  len_w = u3r_met(3, vat);
    -      // XX assumes little-endian
    -      //
    -      c3_y* byt_y = ( c3y == u3a_is_cat(vat) )
    -                  ? (c3_y*)&vat
    -                  : (c3_y*)((u3a_atom*)u3a_to_ptr(vat))->buf_w;
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        ur_cue(rot_u, len_w, byt_y, &ref);
    -      }
    -
    -      ur_root_free(rot_u);
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue cons: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    {
    -      ur_root_t* rot_u;
    -      ur_nref      ref;
    -      c3_w  len_w = u3r_met(3, vat);
    -      // XX assumes little-endian
    -      //
    -      c3_y* byt_y = ( c3y == u3a_is_cat(vat) )
    -                  ? (c3_y*)&vat
    -                  : (c3_y*)((u3a_atom*)u3a_to_ptr(vat))->buf_w;
    -
    -      for ( i_w = 0; i_w < max_w; i_w++ ) {
    -        rot_u = ur_root_init();
    -        ur_cue(rot_u, len_w, byt_y, &ref);
    -        ur_root_free(rot_u);
    -      }
    -    }
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue re-cons: %u ms\r\n", mil_w);
    -  }
    -
    -  u3z(vat);
    -}
    -
    -static u3_noun
    -_cue_loop(u3_atom a)
    -{
    -  c3_w i_w, max_w = 20000;
    -
    -  for ( i_w = 0; i_w < max_w; i_w++ ) {
    -    u3z(u3s_cue(a));
    -  }
    -
    -  return u3_blip;
    -}
    -
    -static u3_noun
    -_cue_atom_loop(u3_atom a)
    -{
    -  c3_w i_w, max_w = 20000;
    -
    -  for ( i_w = 0; i_w < max_w; i_w++ ) {
    -    u3z(u3s_cue_atom(a));
    -  }
    -
    -  return u3_blip;
    -}
    -
    -static void
    -_cue_soft_bench(void)
    -{
    -  struct timeval b4, f2, d0;
    -  u3_atom vat = u3ke_jam(_ames_writ_ex());
    -  c3_w  mil_w;
    -
    -  fprintf(stderr, "\r\ncue virtual microbenchmark:\r\n");
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    u3z(u3m_soft(0, _cue_loop, u3k(vat)));
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue virtual og: %u ms\r\n", mil_w);
    -  }
    -
    -  {
    -    gettimeofday(&b4, 0);
    -
    -    u3z(u3m_soft(0, _cue_atom_loop, u3k(vat)));
    -
    -    gettimeofday(&f2, 0);
    -    timersub(&f2, &b4, &d0);
    -    mil_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000);
    -    fprintf(stderr, "  cue virtual atom: %u ms\r\n", mil_w);
    -  }
    -
    -  u3z(vat);
    -}
    -
    -/* main(): run all benchmarks
    -*/
    -int
    -main(int argc, char* argv[])
    -{
    -  _setup();
    -
    -  _jam_bench();
    -  _cue_bench();
    -  _cue_soft_bench();
    -
    -  //  GC
    -  //
    -  u3m_grab(u3_none);
    -
    -  return 0;
    -}
    diff --git a/pkg/urbit/compat/create-include-files.sh b/pkg/urbit/compat/create-include-files.sh
    deleted file mode 100755
    index 34b87cb52..000000000
    --- a/pkg/urbit/compat/create-include-files.sh
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -#!/usr/bin/env bash
    -# support running off a tarball that doesn't contain binary pills
    -(( $($1 ../../bin/ivory.pill) > 512 )) || curl -L https://github.com/urbit/urbit/raw/urbit-v$URBIT_VERSION/bin/ivory.pill > ../../bin/ivory.pill
    -
    -poor_mans_xxd () {
    -  cch=0
    -  echo "unsigned char $2[] = {"
    -  while IFS='' read line
    -  do
    -    for i in $line
    -    do
    -      echo -n " 0x$i,"
    -      cch=$((cch+1))
    -    done
    -    echo
    -  done < <(od -An -v -tx1 $1)
    -  echo "};"
    -  echo "unsigned int $2_len = $cch;"
    -}
    -
    -[ -e include/ca-bundle.h  ] || poor_mans_xxd $2 include_ca_bundle_crt >include/ca-bundle.h
    -[ -e include/ivory_impl.h ] || poor_mans_xxd ../../bin/ivory.pill u3_Ivory_pill >include/ivory_impl.h
    diff --git a/pkg/urbit/compat/m1brew/compat.mk b/pkg/urbit/compat/m1brew/compat.mk
    deleted file mode 100644
    index 5d612ba84..000000000
    --- a/pkg/urbit/compat/m1brew/compat.mk
    +++ /dev/null
    @@ -1,14 +0,0 @@
    -# paths to brew packages
    -CFLAGS  := $(CFLAGS)  -I/opt/homebrew/include
    -LDFLAGS := $(LDFLAGS) -L/opt/homebrew/lib
    -# force linker to use static libraries
    -LDFLAGS := $(shell compat/m1brew/use-static-libs.sh $(LDFLAGS))
    -# add extra osx libraries
    -LDFLAGS := $(LDFLAGS) -framework SystemConfiguration
    -
    -ifdef debug
    -CFLAGS  := $(CFLAGS)  -O0 -g
    -else
    -# clang hangs on noun/allocate.c if -g is specified with -O3
    -CFLAGS  := $(CFLAGS)  -O3
    -endif
    diff --git a/pkg/urbit/compat/m1brew/ent.patch b/pkg/urbit/compat/m1brew/ent.patch
    deleted file mode 100644
    index f26edf7a8..000000000
    --- a/pkg/urbit/compat/m1brew/ent.patch
    +++ /dev/null
    @@ -1,12 +0,0 @@
    -diff --git a/configure b/configure
    ---- a/configure
    -+++ b/configure
    -@@ -15,7 +15,7 @@ do
    -     log "Trying IMPL=$IMPL"
    - 
    -     if IMPL=$impl make >/dev/null 2>/dev/null
    --    then sed -i 's|$(error IMPL must be set)|IMPL='"$impl"'|' Makefile
    -+    then sed -i "" 's|$(error IMPL must be set)|IMPL='"$impl"'|' Makefile
    -          log "IMPL=$IMPL works"
    -          exit 0
    -     else log "IMPL=$IMPL failed"
    diff --git a/pkg/urbit/compat/m1brew/murmur3.patch b/pkg/urbit/compat/m1brew/murmur3.patch
    deleted file mode 100644
    index cd83e9fdd..000000000
    --- a/pkg/urbit/compat/m1brew/murmur3.patch
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -diff --git a/makefile b/makefile
    ---- a/makefile
    -+++ b/makefile
    -@@ -12,5 +12,9 @@ shared: murmur3.c murmur3.h
    - 	$(CC) -fPIC -O3 -c murmur3.c
    - 	$(CC) -shared -Wl,--export-dynamic murmur3.o -o libmurmur3.so
    - 
    -+static: murmur3.c murmur3.h
    -+	$(CC) -fPIC -O3 -c murmur3.c
    -+	$(AR) rcs libmurmur3.a murmur3.o
    -+
    - clean:
    - 	rm -rf example *.o *.so
    diff --git a/pkg/urbit/compat/m1brew/softfloat3.patch b/pkg/urbit/compat/m1brew/softfloat3.patch
    deleted file mode 100644
    index 888d566f4..000000000
    --- a/pkg/urbit/compat/m1brew/softfloat3.patch
    +++ /dev/null
    @@ -1,85 +0,0 @@
    -diff --git a/build/template-FAST_INT64/Makefile b/build/template-FAST_INT64/Makefile
    ---- a/build/template-FAST_INT64/Makefile
    -+++ b/build/template-FAST_INT64/Makefile
    -@@ -34,28 +34,27 @@
    - #
    - #=============================================================================
    - 
    --# Edit lines marked with `==>'.  See "SoftFloat-source.html".
    -+SOURCE_DIR ?= ../../source
    -+SPECIALIZE_TYPE ?= 8086-SSE
    - 
    --==> SOURCE_DIR ?= ../../source
    --==> SPECIALIZE_TYPE ?= 8086
    -+SOFTFLOAT_OPTS ?= \
    -+   -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
    -+   -DSOFTFLOAT_FAST_DIV64TO32
    - 
    --==> SOFTFLOAT_OPTS ?= \
    --==>   -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \
    --==>   -DSOFTFLOAT_FAST_DIV64TO32
    -+DELETE = rm -f
    -+C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
    -+COMPILE_C = \
    -+  cc -c -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@
    -+MAKELIB = ar crs $@
    -+LIBNAME = libsoftfloat3
    - 
    --==> DELETE = rm -f
    --==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include
    --==> COMPILE_C = \
    --==>   cc -c -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@
    --==> MAKELIB = ar crs $@
    -+OBJ = .o
    -+LIB = .a
    - 
    --==> OBJ = .o
    --==> LIB = .a
    --
    --==> OTHER_HEADERS =
    -+OTHER_HEADERS =
    - 
    - .PHONY: all
    --all: softfloat$(LIB)
    -+all: $(LIBNAME)$(LIB)
    - 
    - OBJS_PRIMITIVES = \
    -   s_eq128$(OBJ) \
    -@@ -381,11 +380,11 @@ $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c
    - $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c
    - 	$(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c
    - 
    --softfloat$(LIB): $(OBJS_ALL)
    -+$(LIBNAME)$(LIB): $(OBJS_ALL)
    - 	$(DELETE) $@
    - 	$(MAKELIB) $^
    - 
    - .PHONY: clean
    - clean:
    --	$(DELETE) $(OBJS_ALL) softfloat$(LIB)
    -+	$(DELETE) $(OBJS_ALL) $(LIBNAME)$(LIB)
    - 
    -diff --git a/build/template-FAST_INT64/platform.h b/build/template-FAST_INT64/platform.h
    ---- a/build/template-FAST_INT64/platform.h
    -+++ b/build/template-FAST_INT64/platform.h
    -@@ -34,17 +34,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    - 
    - =============================================================================*/
    - 
    --// Edit lines marked with `==>'.  See "SoftFloat-source.html".
    --
    - /*----------------------------------------------------------------------------
    - *----------------------------------------------------------------------------*/
    --==> #define LITTLEENDIAN 1
    -+#define LITTLEENDIAN 1
    - 
    - /*----------------------------------------------------------------------------
    - *----------------------------------------------------------------------------*/
    --==> #define INLINE inline
    -+#define INLINE inline
    - 
    - /*----------------------------------------------------------------------------
    - *----------------------------------------------------------------------------*/
    --==> #define THREAD_LOCAL _Thread_local
    -+#define THREAD_LOCAL _Thread_local
    - 
    diff --git a/pkg/urbit/compat/m1brew/use-static-libs.sh b/pkg/urbit/compat/m1brew/use-static-libs.sh
    deleted file mode 100755
    index 7f7cf83a1..000000000
    --- a/pkg/urbit/compat/m1brew/use-static-libs.sh
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -#!/bin/bash
    -set -euo pipefail
    -declare -a ldirs
    -for i in $@
    -do
    -  case $i in
    -    -L*) ldirs+=(${i:2});;
    -  esac
    -done
    -for i in $@
    -do
    -  case $i in
    -    -l*)
    -      lib=$(find ${ldirs[@]} -name lib${i:2}.a)
    -      if [ "$lib" != "" ]
    -      then
    -        echo $lib
    -      else
    -        echo $i
    -      fi;;
    -    *)  echo $i;;
    -  esac
    -done
    diff --git a/pkg/urbit/compat/mingw/compat.c b/pkg/urbit/compat/mingw/compat.c
    deleted file mode 100644
    index 4c53e0a23..000000000
    --- a/pkg/urbit/compat/mingw/compat.c
    +++ /dev/null
    @@ -1,367 +0,0 @@
    -#include "c/portable.h"
    -#include 
    -#include 
    -#include 
    -
    -// set default CRT file mode to binary
    -// note that mingw binmode.o does nothing
    -#undef _fmode
    -int _fmode = _O_BINARY;
    -
    -// set standard I/O fds to binary too, because
    -// MSVCRT creates them before MingW sets _fmode
    -static void __attribute__ ((constructor)) _set_stdio_to_binary()
    -{
    -    _setmode(0, _O_BINARY);
    -    _setmode(1, _O_BINARY);
    -    _setmode(2, _O_BINARY);
    -}
    -
    -// from https://github.com/git/git/blob/master/compat/mingw.c
    -// -----------------------------------------------------------------------
    -
    -int err_win_to_posix(DWORD winerr)
    -{
    -	int error = ENOSYS;
    -	switch(winerr) {
    -	case ERROR_ACCESS_DENIED: error = EACCES; break;
    -	case ERROR_ACCOUNT_DISABLED: error = EACCES; break;
    -	case ERROR_ACCOUNT_RESTRICTION: error = EACCES; break;
    -	case ERROR_ALREADY_ASSIGNED: error = EBUSY; break;
    -	case ERROR_ALREADY_EXISTS: error = EEXIST; break;
    -	case ERROR_ARITHMETIC_OVERFLOW: error = ERANGE; break;
    -	case ERROR_BAD_COMMAND: error = EIO; break;
    -	case ERROR_BAD_DEVICE: error = ENODEV; break;
    -	case ERROR_BAD_DRIVER_LEVEL: error = ENXIO; break;
    -	case ERROR_BAD_EXE_FORMAT: error = ENOEXEC; break;
    -	case ERROR_BAD_FORMAT: error = ENOEXEC; break;
    -	case ERROR_BAD_LENGTH: error = EINVAL; break;
    -	case ERROR_BAD_PATHNAME: error = ENOENT; break;
    -	case ERROR_BAD_PIPE: error = EPIPE; break;
    -	case ERROR_BAD_UNIT: error = ENODEV; break;
    -	case ERROR_BAD_USERNAME: error = EINVAL; break;
    -	case ERROR_BROKEN_PIPE: error = EPIPE; break;
    -	case ERROR_BUFFER_OVERFLOW: error = ENAMETOOLONG; break;
    -	case ERROR_BUSY: error = EBUSY; break;
    -	case ERROR_BUSY_DRIVE: error = EBUSY; break;
    -	case ERROR_CALL_NOT_IMPLEMENTED: error = ENOSYS; break;
    -	case ERROR_CANNOT_MAKE: error = EACCES; break;
    -	case ERROR_CANTOPEN: error = EIO; break;
    -	case ERROR_CANTREAD: error = EIO; break;
    -	case ERROR_CANTWRITE: error = EIO; break;
    -	case ERROR_CRC: error = EIO; break;
    -	case ERROR_CURRENT_DIRECTORY: error = EACCES; break;
    -	case ERROR_DEVICE_IN_USE: error = EBUSY; break;
    -	case ERROR_DEV_NOT_EXIST: error = ENODEV; break;
    -	case ERROR_DIRECTORY: error = EINVAL; break;
    -	case ERROR_DIR_NOT_EMPTY: error = ENOTEMPTY; break;
    -	case ERROR_DISK_CHANGE: error = EIO; break;
    -	case ERROR_DISK_FULL: error = ENOSPC; break;
    -	case ERROR_DRIVE_LOCKED: error = EBUSY; break;
    -	case ERROR_ENVVAR_NOT_FOUND: error = EINVAL; break;
    -	case ERROR_EXE_MARKED_INVALID: error = ENOEXEC; break;
    -	case ERROR_FILENAME_EXCED_RANGE: error = ENAMETOOLONG; break;
    -	case ERROR_FILE_EXISTS: error = EEXIST; break;
    -	case ERROR_FILE_INVALID: error = ENODEV; break;
    -	case ERROR_FILE_NOT_FOUND: error = ENOENT; break;
    -	case ERROR_GEN_FAILURE: error = EIO; break;
    -	case ERROR_HANDLE_DISK_FULL: error = ENOSPC; break;
    -	case ERROR_INSUFFICIENT_BUFFER: error = ENOMEM; break;
    -	case ERROR_INVALID_ACCESS: error = EACCES; break;
    -	case ERROR_INVALID_ADDRESS: error = EFAULT; break;
    -	case ERROR_INVALID_BLOCK: error = EFAULT; break;
    -	case ERROR_INVALID_DATA: error = EINVAL; break;
    -	case ERROR_INVALID_DRIVE: error = ENODEV; break;
    -	case ERROR_INVALID_EXE_SIGNATURE: error = ENOEXEC; break;
    -	case ERROR_INVALID_FLAGS: error = EINVAL; break;
    -	case ERROR_INVALID_FUNCTION: error = ENOSYS; break;
    -	case ERROR_INVALID_HANDLE: error = EBADF; break;
    -	case ERROR_INVALID_LOGON_HOURS: error = EACCES; break;
    -	case ERROR_INVALID_NAME: error = EINVAL; break;
    -	case ERROR_INVALID_OWNER: error = EINVAL; break;
    -	case ERROR_INVALID_PARAMETER: error = EINVAL; break;
    -	case ERROR_INVALID_PASSWORD: error = EPERM; break;
    -	case ERROR_INVALID_PRIMARY_GROUP: error = EINVAL; break;
    -	case ERROR_INVALID_SIGNAL_NUMBER: error = EINVAL; break;
    -	case ERROR_INVALID_TARGET_HANDLE: error = EIO; break;
    -	case ERROR_INVALID_WORKSTATION: error = EACCES; break;
    -	case ERROR_IO_DEVICE: error = EIO; break;
    -	case ERROR_IO_INCOMPLETE: error = EINTR; break;
    -	case ERROR_LOCKED: error = EBUSY; break;
    -	case ERROR_LOCK_VIOLATION: error = EACCES; break;
    -	case ERROR_LOGON_FAILURE: error = EACCES; break;
    -	case ERROR_MAPPED_ALIGNMENT: error = EINVAL; break;
    -	case ERROR_META_EXPANSION_TOO_LONG: error = E2BIG; break;
    -	case ERROR_MORE_DATA: error = EPIPE; break;
    -	case ERROR_NEGATIVE_SEEK: error = ESPIPE; break;
    -	case ERROR_NOACCESS: error = EFAULT; break;
    -	case ERROR_NONE_MAPPED: error = EINVAL; break;
    -	case ERROR_NOT_ENOUGH_MEMORY: error = ENOMEM; break;
    -	case ERROR_NOT_READY: error = EAGAIN; break;
    -	case ERROR_NOT_SAME_DEVICE: error = EXDEV; break;
    -	case ERROR_NO_DATA: error = EPIPE; break;
    -	case ERROR_NO_MORE_SEARCH_HANDLES: error = EIO; break;
    -	case ERROR_NO_PROC_SLOTS: error = EAGAIN; break;
    -	case ERROR_NO_SUCH_PRIVILEGE: error = EACCES; break;
    -	case ERROR_OPEN_FAILED: error = EIO; break;
    -	case ERROR_OPEN_FILES: error = EBUSY; break;
    -	case ERROR_OPERATION_ABORTED: error = EINTR; break;
    -	case ERROR_OUTOFMEMORY: error = ENOMEM; break;
    -	case ERROR_PASSWORD_EXPIRED: error = EACCES; break;
    -	case ERROR_PATH_BUSY: error = EBUSY; break;
    -	case ERROR_PATH_NOT_FOUND: error = ENOENT; break;
    -	case ERROR_PIPE_BUSY: error = EBUSY; break;
    -	case ERROR_PIPE_CONNECTED: error = EPIPE; break;
    -	case ERROR_PIPE_LISTENING: error = EPIPE; break;
    -	case ERROR_PIPE_NOT_CONNECTED: error = EPIPE; break;
    -	case ERROR_PRIVILEGE_NOT_HELD: error = EACCES; break;
    -	case ERROR_READ_FAULT: error = EIO; break;
    -	case ERROR_SEEK: error = EIO; break;
    -	case ERROR_SEEK_ON_DEVICE: error = ESPIPE; break;
    -	case ERROR_SHARING_BUFFER_EXCEEDED: error = ENFILE; break;
    -	case ERROR_SHARING_VIOLATION: error = EACCES; break;
    -	case ERROR_STACK_OVERFLOW: error = ENOMEM; break;
    -	case ERROR_SUCCESS: error = 0; break;
    -	case ERROR_SWAPERROR: error = ENOENT; break;
    -	case ERROR_TOO_MANY_MODULES: error = EMFILE; break;
    -	case ERROR_TOO_MANY_OPEN_FILES: error = EMFILE; break;
    -	case ERROR_UNRECOGNIZED_MEDIA: error = ENXIO; break;
    -	case ERROR_UNRECOGNIZED_VOLUME: error = ENODEV; break;
    -	case ERROR_WAIT_NO_CHILDREN: error = ECHILD; break;
    -	case ERROR_WRITE_FAULT: error = EIO; break;
    -	case ERROR_WRITE_PROTECT: error = EROFS; break;
    -	}
    -	return error;
    -}
    -
    -// from msys2 mingw-packages-dev patches
    -// -----------------------------------------------------------------------
    -
    -static DWORD __map_mmap_prot_page(const int prot)
    -{
    -    DWORD protect = 0;
    -
    -    if (prot == PROT_NONE)
    -        return protect;
    -
    -    if ((prot & PROT_EXEC) != 0)
    -    {
    -        protect = ((prot & PROT_WRITE) != 0) ?
    -                    PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ;
    -    }
    -    else
    -    {
    -        protect = ((prot & PROT_WRITE) != 0) ?
    -                    PAGE_READWRITE : PAGE_READONLY;
    -    }
    -
    -    return protect;
    -}
    -
    -static DWORD __map_mmap_prot_file(const int prot)
    -{
    -    DWORD desiredAccess = 0;
    -
    -    if (prot == PROT_NONE)
    -        return desiredAccess;
    -
    -    if ((prot & PROT_READ) != 0)
    -        desiredAccess |= FILE_MAP_READ;
    -    if ((prot & PROT_WRITE) != 0)
    -        desiredAccess |= FILE_MAP_WRITE;
    -    if ((prot & PROT_EXEC) != 0)
    -        desiredAccess |= FILE_MAP_EXECUTE;
    -
    -    return desiredAccess;
    -}
    -
    -void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
    -{
    -    HANDLE fm, h;
    -
    -    void * map = MAP_FAILED;
    -
    -    const DWORD dwFileOffsetLow = (sizeof(off_t) <= sizeof(DWORD)) ?
    -                    (DWORD)off : (DWORD)(off & 0xFFFFFFFFL);
    -    const DWORD dwFileOffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
    -                    (DWORD)0 : (DWORD)((off >> 32) & 0xFFFFFFFFL);
    -    const DWORD protect = __map_mmap_prot_page(prot);
    -    const DWORD desiredAccess = __map_mmap_prot_file(prot);
    -
    -    errno = 0;
    -
    -    if (len == 0
    -        /* Usupported protection combinations */
    -        || prot == PROT_EXEC)
    -    {
    -        errno = EINVAL;
    -        return MAP_FAILED;
    -    }
    -
    -    if ((flags & MAP_ANON) == 0)
    -    {
    -        h = (HANDLE)_get_osfhandle(fildes);
    -
    -        if (h == INVALID_HANDLE_VALUE)
    -        {
    -            errno = EBADF;
    -            return MAP_FAILED;
    -        }
    -    }
    -    else h = INVALID_HANDLE_VALUE;
    -
    -    fm = CreateFileMapping(h, NULL, protect, 0, len, NULL);
    -
    -    if (fm == NULL)
    -    {
    -        errno = err_win_to_posix(GetLastError());
    -        return MAP_FAILED;
    -    }
    -
    -    map = MapViewOfFileEx(fm, desiredAccess, dwFileOffsetHigh, dwFileOffsetLow, len, addr);
    -    errno = err_win_to_posix(GetLastError());
    -
    -    CloseHandle(fm);
    -
    -    if (map == NULL)
    -        return MAP_FAILED;
    -
    -    if ((flags & MAP_FIXED) != 0 && map != addr)
    -    {
    -        UnmapViewOfFile(map);
    -        errno = EEXIST;
    -        return MAP_FAILED;
    -    }
    -
    -    return map;
    -}
    -
    -int munmap(void *addr, size_t len)
    -{
    -    if (UnmapViewOfFile(addr))
    -        return 0;
    -
    -    errno = err_win_to_posix(GetLastError());
    -    return -1;
    -}
    -
    -int msync(void *addr, size_t len, int flags)
    -{
    -    if (FlushViewOfFile(addr, len))
    -        return 0;
    -
    -    errno = err_win_to_posix(GetLastError());
    -    return -1;
    -}
    -
    -// -----------------------------------------------------------------------
    -
    -// vere uses kill() only to kill lockfile owner with SIGTERM or SIGKILL
    -// Windows does not have signals, so I handle SIGKILL as TerminateProcess()
    -// and return an error in all other cases
    -int kill(pid_t pid, int sig)
    -{
    -    if (pid > 0 && sig == SIGKILL) {
    -        HANDLE h = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
    -
    -        if (TerminateProcess(h, -1)) {
    -            CloseHandle(h);
    -            return 0;
    -        }
    -
    -        errno = err_win_to_posix(GetLastError());
    -        CloseHandle(h);
    -        return -1;
    -    }
    -
    -    errno = EINVAL;
    -    return -1;
    -}
    -
    -// libgcc built for mingw has included an implementation of mprotect
    -// via VirtualProtect since olden days, but it takes int rather than size_t
    -// and therefore fails or does unexpected things for >2GB blocks on 64-bit
    -// https://github.com/gcc-mirror/gcc/blob/master/libgcc/libgcc2.c
    -int mprotect (void *addr, size_t len, int prot)
    -{
    -    DWORD np, op;
    -
    -    if (prot == (PROT_READ | PROT_WRITE | PROT_EXEC))
    -        np = PAGE_EXECUTE_READWRITE;
    -    else if (prot == (PROT_READ | PROT_EXEC))
    -        np = PAGE_EXECUTE_READ;
    -    else if (prot == (PROT_EXEC))
    -        np = PAGE_EXECUTE;
    -    else if (prot == (PROT_READ | PROT_WRITE))
    -        np = PAGE_READWRITE;
    -    else if (prot == (PROT_READ))
    -        np = PAGE_READONLY;
    -    else if (prot == 0)
    -        np = PAGE_NOACCESS;
    -    else
    -    {
    -        errno = EINVAL;
    -        return -1;
    -    }
    -
    -    if (VirtualProtect (addr, len, np, &op))
    -        return 0;
    -
    -    // NB: return code of ntdll!RtlGetLastNtStatus() is useful
    -    // for diagnosing obscure VirtualProtect failures
    -    errno = err_win_to_posix(GetLastError());
    -    return -1;
    -}
    -
    -int utimes(const char *path, const struct timeval times[2])
    -{
    -    struct _utimbuf utb = {.actime = times[0].tv_sec, .modtime = times[1].tv_sec};
    -    return _utime(path, &utb);
    -}
    -
    -int fdatasync(int fildes)
    -{
    -    HANDLE h = (HANDLE)_get_osfhandle(fildes);
    -
    -    if (h == INVALID_HANDLE_VALUE)
    -    {
    -        errno = EBADF;
    -        return -1;
    -    }
    -
    -    if (FlushFileBuffers(h))
    -    {
    -        errno = 0;
    -        return 0;
    -    }
    -    else
    -    {
    -        errno = err_win_to_posix(GetLastError());
    -        return -1;
    -    }
    -}
    -
    -intmax_t mdb_get_filesize(HANDLE han_u)
    -{
    -    LARGE_INTEGER li;
    -    GetFileSizeEx(han_u, &li);
    -    return li.QuadPart;
    -}
    -
    -char *realpath(const char *path, char *resolved_path)
    -{
    -  //  XX  MAX_PATH
    -  //
    -  return _fullpath(resolved_path, path, MAX_PATH);
    -}
    -
    -long sysconf(int name)
    -{
    -  SYSTEM_INFO si;
    -
    -  if ( _SC_PAGESIZE != name ) {
    -    return -1;
    -  }
    -  GetNativeSystemInfo(&si);
    -  return si.dwPageSize;
    -}
    diff --git a/pkg/urbit/compat/mingw/compat.h b/pkg/urbit/compat/mingw/compat.h
    deleted file mode 100644
    index 3e5b3bc9e..000000000
    --- a/pkg/urbit/compat/mingw/compat.h
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -#ifndef _MINGW_IO_H
    -#define _MINGW_IO_H
    -
    -#define mkdir(A, B) mkdir(A)
    -
    -char *realpath(const char *path, char *resolved_path);
    -int fdatasync(int fd);
    -int utimes(const char *path, const struct timeval times[2]);
    -long sysconf(int name);
    -
    -int kill(pid_t pid, int signum);
    -
    -#define SIGUSR1       10
    -#define SIGALRM       14
    -#define SIGVTALRM     26
    -#define SIGSTK        31
    -#define SIG_COUNT     32
    -#define _SC_PAGESIZE  29
    -
    -#endif//_MINGW_IO_H
    diff --git a/pkg/urbit/compat/mingw/compat.mk b/pkg/urbit/compat/mingw/compat.mk
    deleted file mode 100644
    index 8add2a3b6..000000000
    --- a/pkg/urbit/compat/mingw/compat.mk
    +++ /dev/null
    @@ -1,17 +0,0 @@
    -# increase default thread stack size and link Windows implibs
    -LDFLAGS := $(LDFLAGS) -static -Wl,--stack,67108864 -lbcrypt -lntdll -lws2_32
    -# libcurl
    -CFLAGS  := $(CFLAGS)  -DCURL_STATICLIB
    -LDFLAGS := $(LDFLAGS) -lzstd -lcrypt32
    -# libh2o
    -CFLAGS  := $(CFLAGS)  -DH2O_NO_UNIX_SOCKETS
    -# libuv
    -LDFLAGS := $(LDFLAGS) -luserenv -liphlpapi -lpsapi
    -# secp256k1, due to _FORTIFY_SOURCE
    -LDFLAGS := $(LDFLAGS) -lssp
    -
    -ifdef debug
    -CFLAGS  := $(CFLAGS)  -O0 -g
    -else
    -CFLAGS  := $(CFLAGS)  -O3 -g
    -endif
    diff --git a/pkg/urbit/compat/mingw/ctrlc.c b/pkg/urbit/compat/mingw/ctrlc.c
    deleted file mode 100644
    index 9be57981b..000000000
    --- a/pkg/urbit/compat/mingw/ctrlc.c
    +++ /dev/null
    @@ -1,7 +0,0 @@
    -#include 
    -
    -// initialize msvcrt signals early, otherwise Ctrl-C does nothing
    -static void __attribute__ ((constructor)) _init_crt_signals()
    -{
    -    signal(SIGINT, SIG_DFL);
    -}
    diff --git a/pkg/urbit/compat/mingw/daemon.c b/pkg/urbit/compat/mingw/daemon.c
    deleted file mode 100644
    index 46e73b0ea..000000000
    --- a/pkg/urbit/compat/mingw/daemon.c
    +++ /dev/null
    @@ -1,116 +0,0 @@
    -#include "all.h"
    -#include "vere/vere.h"
    -
    -/* _dup_std_handle(): creates an inheritable duplicate of a standard handle.
    -*/
    -static BOOL
    -_dup_std_handle(HANDLE* new_u, DWORD typ_u)
    -{
    -  DWORD dum_u;
    -  HANDLE han_u = GetStdHandle(typ_u);
    -  BOOL con_u = GetConsoleMode(han_u, &dum_u);
    -  if ( con_u ) {
    -    han_u = (HANDLE)_get_osfhandle(c3_open(c3_dev_null, O_RDWR, 0));
    -  }
    -
    -  if ( !DuplicateHandle(GetCurrentProcess(), han_u, GetCurrentProcess(), new_u, 0, TRUE, DUPLICATE_SAME_ACCESS) ) {
    -    fprintf(stderr, "vere: DuplicateHandle(%d): %d\r\n", typ_u, GetLastError());
    -    exit(1);
    -  }
    -
    -  return con_u;
    -}
    -
    -/* _on_boot_completed_cb: invoked when the ship has finished booting.
    -*/
    -static void _on_boot_completed_cb() {
    -  HANDLE hin_u = GetStdHandle(STD_INPUT_HANDLE);
    -  SetEvent(hin_u);
    -  CloseHandle(hin_u);
    -}
    -
    -/* u3_daemon_init(): platform-specific daemon mode initialization.
    -*/
    -void
    -u3_daemon_init()
    -{
    -  //  detect if this process is the child daemon process
    -  //
    -  if ( ResetEvent(GetStdHandle(STD_INPUT_HANDLE)) ) {
    -    u3_Host.bot_f = _on_boot_completed_cb;
    -    return;
    -  }
    -
    -  STARTUPINFOW psi_u;
    -  ZeroMemory(&psi_u, sizeof(psi_u));
    -  psi_u.cb = sizeof(psi_u);
    -  psi_u.dwFlags = STARTF_USESTDHANDLES;
    -
    -  //  duplicate standard output and error handles for the child process,
    -  //  replacing any raw console handles with handles to /dev/null
    -  //  print a warning if raw console output detected
    -  //
    -  //  On Windows, console handles become invalid once the console is
    -  //  detached. This will cause urbit terminal output to fail. libuv
    -  //  provides no way of changing the handle of an open uv_pipe_handle,
    -  //  and Windows has no equivalent of dup2() for handles, so I cannot
    -  //  substitute a /dev/null handle once the terminal is initialized.
    -  //  It is possible to create an anonymous pipe and have the child
    -  //  process take over its drain end after it signals that the ship
    -  //  has booted, but -d is intended for background operation anyway
    -  //  and does not seem to warrant the added complexity.
    -  //
    -  if ( _dup_std_handle(&psi_u.hStdOutput, STD_OUTPUT_HANDLE) |
    -       _dup_std_handle(&psi_u.hStdError,  STD_ERROR_HANDLE) )
    -  {
    -    fprintf(stderr, "vere: -d used from a Windows console without redirection\r\n"
    -                    "      no output from the daemon process will be visible\r\n");
    -    fflush(stderr);
    -  }
    -
    -  //  create an event for the child process to signal
    -  //  the parent that the ship has finished booting
    -  //  pass the handle as "stdin" (otherwise unused with -d)
    -  //
    -  SECURITY_ATTRIBUTES sa_u = {sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
    -  if ( !(psi_u.hStdInput = CreateEvent(&sa_u, TRUE, FALSE, NULL)) ) {
    -    fprintf(stderr, "vere: CreateEvent: %d\r\n", GetLastError());
    -    exit(1);
    -  }
    -
    -  //  create the child process with the same command line as parent
    -  //  it will start, re-parse the command line, and call u3_daemon_init
    -  //
    -  PROCESS_INFORMATION ppi_u;
    -  if ( !CreateProcessW(NULL, _wcsdup(GetCommandLineW()), NULL, NULL, TRUE, DETACHED_PROCESS, NULL, NULL, &psi_u, &ppi_u) ) {
    -    fprintf(stderr, "vere: CreateProcess: %d\r\n", GetLastError());
    -    exit(1);
    -  }
    -
    -  CloseHandle(ppi_u.hThread);
    -
    -  //  wait for the child process to exit or to signal the event
    -  //
    -  DWORD exi_u;
    -  HANDLE han_u[2] = {ppi_u.hProcess, psi_u.hStdInput};
    -  switch ( WaitForMultipleObjects(2, han_u, FALSE, INFINITE) ) {
    -  case WAIT_OBJECT_0:
    -    //  the child process exited prematurely, propagate its exit code
    -    //
    -    if ( GetExitCodeProcess(ppi_u.hProcess, &exi_u) ) {
    -      exit(exi_u);
    -    }
    -
    -    fprintf(stderr, "vere: GetExitCodeProcess: %d\r\n", GetLastError());
    -    exit(1);
    -
    -  case WAIT_OBJECT_0 + 1:
    -    //  the child process has finished booting, exit normally
    -    //
    -    exit(0);
    -
    -  default:
    -    fprintf(stderr, "vere: WaitForMultipleObjects: %d\r\n", GetLastError());
    -    exit(1);
    -  }
    -}
    diff --git a/pkg/urbit/compat/mingw/h2o.patch b/pkg/urbit/compat/mingw/h2o.patch
    deleted file mode 100644
    index 1bfc90e4a..000000000
    --- a/pkg/urbit/compat/mingw/h2o.patch
    +++ /dev/null
    @@ -1,1834 +0,0 @@
    -diff --git a/CMakeLists.txt b/CMakeLists.txt
    -index 5a04e1426..9ddad60d1 100644
    ---- a/CMakeLists.txt
    -+++ b/CMakeLists.txt
    -@@ -69,6 +69,18 @@ OPTION(WITH_BUNDLED_SSL "whether or not to use the bundled libressl" ${WITH_BUND
    - 
    - OPTION(WITHOUT_LIBS "skip building libs even when possible" OFF)
    - OPTION(BUILD_SHARED_LIBS "whether to build a shared library" OFF)
    -+OPTION(WITHOUT_FASTCGI "don't include fastcgi" OFF)
    -+OPTION(WITHOUT_MEMCACHED "don't include memcached" OFF)
    -+
    -+IF (MINGW)
    -+    SET(WITHOUT_FASTCGI "ON")
    -+    SET(WITHOUT_MEMCACHED "ON")
    -+    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_POSIX_C_SOURCE -DO_CLOEXEC=0 -DH2O_NO_UNIX_SOCKETS")
    -+ENDIF (MINGW)
    -+
    -+IF (WITHOUT_MEMCACHED)
    -+    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DH2O_NO_MEMCACHED")
    -+ENDIF (WITHOUT_MEMCACHED)
    - 
    - FIND_PROGRAM(RUBY ruby)
    - FIND_PROGRAM(BISON bison)
    -@@ -228,16 +240,7 @@ SET(PICOTLS_SOURCE_FILES
    -     deps/picotls/lib/openssl.c)
    - 
    - SET(LIB_SOURCE_FILES
    --    deps/cloexec/cloexec.c
    -     deps/libgkc/gkc.c
    --    deps/libyrmcds/close.c
    --    deps/libyrmcds/connect.c
    --    deps/libyrmcds/recv.c
    --    deps/libyrmcds/send.c
    --    deps/libyrmcds/send_text.c
    --    deps/libyrmcds/socket.c
    --    deps/libyrmcds/strerror.c
    --    deps/libyrmcds/text_mode.c
    -     deps/picohttpparser/picohttpparser.c
    - 
    -     lib/common/cache.c
    -@@ -245,7 +248,6 @@ SET(LIB_SOURCE_FILES
    -     lib/common/filecache.c
    -     lib/common/hostinfo.c
    -     lib/common/http1client.c
    --    lib/common/memcached.c
    -     lib/common/memory.c
    -     lib/common/multithread.c
    -     lib/common/serverutil.c
    -@@ -272,7 +274,6 @@ SET(LIB_SOURCE_FILES
    -     lib/handler/compress/gzip.c
    -     lib/handler/errordoc.c
    -     lib/handler/expires.c
    --    lib/handler/fastcgi.c
    -     lib/handler/file.c
    -     lib/handler/headers.c
    -     lib/handler/mimemap.c
    -@@ -290,7 +291,6 @@ SET(LIB_SOURCE_FILES
    -     lib/handler/configurator/compress.c
    -     lib/handler/configurator/errordoc.c
    -     lib/handler/configurator/expires.c
    --    lib/handler/configurator/fastcgi.c
    -     lib/handler/configurator/file.c
    -     lib/handler/configurator/headers.c
    -     lib/handler/configurator/proxy.c
    -@@ -314,6 +314,33 @@ SET(LIB_SOURCE_FILES
    -     lib/http2/stream.c
    -     lib/http2/http2_debug_state.c)
    - 
    -+IF (NOT MINGW)
    -+    SET(LIB_SOURCE_FILES
    -+        ${LIB_SOURCE_FILES}
    -+        deps/cloexec/cloexec.c)
    -+ENDIF (NOT MINGW)
    -+
    -+IF (NOT WITHOUT_FASTCGI)
    -+    SET(LIB_SOURCE_FILES
    -+        ${LIB_SOURCE_FILES}
    -+        lib/handler/fastcgi.c
    -+        lib/handler/configurator/fastcgi.c)
    -+ENDIF (NOT WITHOUT_FASTCGI)
    -+
    -+IF (NOT WITHOUT_MEMCACHED)
    -+    SET(LIB_SOURCE_FILES
    -+        ${LIB_SOURCE_FILES}
    -+        deps/libyrmcds/close.c
    -+        deps/libyrmcds/connect.c
    -+        deps/libyrmcds/recv.c
    -+        deps/libyrmcds/send.c
    -+        deps/libyrmcds/send_text.c
    -+        deps/libyrmcds/socket.c
    -+        deps/libyrmcds/strerror.c
    -+        deps/libyrmcds/text_mode.c
    -+        lib/common/memcached.c)
    -+ENDIF (NOT WITHOUT_MEMCACHED)
    -+
    - SET(UNIT_TEST_SOURCE_FILES
    -     ${LIB_SOURCE_FILES}
    -     ${LIBYAML_SOURCE_FILES}
    -diff --git a/examples/libh2o/http1client.c b/examples/libh2o/http1client.c
    -index bcf9b94b2..592376759 100644
    ---- a/examples/libh2o/http1client.c
    -+++ b/examples/libh2o/http1client.c
    -@@ -134,6 +134,11 @@ h2o_http1client_head_cb on_connect(h2o_http1client_t *client, const char *errstr
    - 
    - int main(int argc, char **argv)
    - {
    -+#ifdef _WIN32
    -+    WSADATA wsaData;
    -+    WSAStartup(MAKEWORD(2, 0), &wsaData);
    -+#endif
    -+
    -     h2o_multithread_queue_t *queue;
    -     h2o_multithread_receiver_t getaddr_receiver;
    -     h2o_timeout_t io_timeout;
    -diff --git a/examples/libh2o/simple.c b/examples/libh2o/simple.c
    -index bb72bf60c..be7045d1c 100644
    ---- a/examples/libh2o/simple.c
    -+++ b/examples/libh2o/simple.c
    -@@ -21,11 +21,15 @@
    -  */
    - #include 
    - #include 
    --#include 
    - #include 
    - #include 
    - #include 
    -+#ifdef _WIN32
    -+#include 
    -+#else
    -+#include 
    - #include 
    -+#endif
    - #include 
    - #include "h2o.h"
    - #include "h2o/http1.h"
    -@@ -219,7 +223,12 @@ int main(int argc, char **argv)
    - {
    -     h2o_hostconf_t *hostconf;
    - 
    -+#ifdef _WIN32
    -+    WSADATA wsaData;
    -+    WSAStartup(MAKEWORD(2, 0), &wsaData);
    -+#else
    -     signal(SIGPIPE, SIG_IGN);
    -+#endif
    - 
    -     h2o_config_init(&config);
    -     hostconf = h2o_config_register_host(&config, h2o_iovec_init(H2O_STRLIT("default")), 65535);
    -diff --git a/include/h2o.h b/include/h2o.h
    -index 57877bd12..84822b792 100644
    ---- a/include/h2o.h
    -+++ b/include/h2o.h
    -@@ -32,7 +32,11 @@ extern "C" {
    - #include 
    - #include 
    - #include 
    -+#ifdef _WIN32
    -+#include 
    -+#else
    - #include 
    -+#endif
    - #include 
    - #include 
    - #include 
    -diff --git a/include/h2o/configurator.h b/include/h2o/configurator.h
    -index d1a2e2515..d59d070dd 100644
    ---- a/include/h2o/configurator.h
    -+++ b/include/h2o/configurator.h
    -@@ -145,7 +145,7 @@ int h2o_configurator_apply_commands(h2o_configurator_context_t *ctx, yoml_t *nod
    -  * emits configuration error
    -  */
    - void h2o_configurator_errprintf(h2o_configurator_command_t *cmd, yoml_t *node, const char *reason, ...)
    --    __attribute__((format(printf, 3, 4)));
    -+    __attribute__((format(gnu_printf, 3, 4)));
    - /**
    -  * interprets the configuration value using sscanf, or prints an error upon failure
    -  * @param configurator configurator
    -@@ -154,7 +154,7 @@ void h2o_configurator_errprintf(h2o_configurator_command_t *cmd, yoml_t *node, c
    -  * @return 0 if successful, -1 if not
    -  */
    - int h2o_configurator_scanf(h2o_configurator_command_t *cmd, yoml_t *node, const char *fmt, ...)
    --    __attribute__((format(scanf, 3, 4)));
    -+    __attribute__((format(gnu_scanf, 3, 4)));
    - /**
    -  * interprets the configuration value and returns the index of the matched string within the candidate strings, or prints an error
    -  * upon failure
    -diff --git a/include/h2o/filecache.h b/include/h2o/filecache.h
    -index a000c4c6d..494f61fb1 100644
    ---- a/include/h2o/filecache.h
    -+++ b/include/h2o/filecache.h
    -@@ -61,6 +61,7 @@ void h2o_filecache_destroy(h2o_filecache_t *cache);
    - void h2o_filecache_clear(h2o_filecache_t *cache);
    - 
    - h2o_filecache_ref_t *h2o_filecache_open_file(h2o_filecache_t *cache, const char *path, int oflag);
    -+ssize_t h2o_filecache_read_file(h2o_filecache_ref_t *ref, void *buf, size_t count, off_t offset);
    - void h2o_filecache_close_file(h2o_filecache_ref_t *ref);
    - struct tm *h2o_filecache_get_last_modified(h2o_filecache_ref_t *ref, char *outbuf);
    - size_t h2o_filecache_get_etag(h2o_filecache_ref_t *ref, char *outbuf);
    -diff --git a/include/h2o/hostinfo.h b/include/h2o/hostinfo.h
    -index 14ac30c6c..b39fea520 100644
    ---- a/include/h2o/hostinfo.h
    -+++ b/include/h2o/hostinfo.h
    -@@ -22,13 +22,16 @@
    - #ifndef h2o__hostinfo_h
    - #define h2o__hostinfo_h
    - 
    --#include 
    -+#ifdef _WIN32
    -+#include 
    -+#else
    - #include 
    - #include 
    - #include 
    - #include 
    - #include 
    - #include 
    -+#endif
    - #include "h2o/multithread.h"
    - 
    - typedef struct st_h2o_hostinfo_getaddr_req_t h2o_hostinfo_getaddr_req_t;
    -diff --git a/include/h2o/memory.h b/include/h2o/memory.h
    -index 10c137c88..354fa4359 100644
    ---- a/include/h2o/memory.h
    -+++ b/include/h2o/memory.h
    -@@ -78,8 +78,19 @@ typedef struct st_h2o_buffer_prototype_t h2o_buffer_prototype_t;
    -  * buffer structure compatible with iovec
    -  */
    - typedef struct st_h2o_iovec_t {
    -+#ifdef __MINGW32__
    -+#define H2O_IOVEC_NULL      {0, NULL}
    -+#define H2O_IOVEC_EMPTY     {0, ""}
    -+#define H2O_IOVEC_STRLIT(s) {sizeof(s) - 1, (s)}
    -+    unsigned int len;
    -+    char *base;
    -+#else
    -+#define H2O_IOVEC_NULL      {NULL}
    -+#define H2O_IOVEC_EMPTY     {"", 0}
    -+#define H2O_IOVEC_STRLIT(s) {(s), sizeof(s) - 1}
    -     char *base;
    -     size_t len;
    -+#endif
    - } h2o_iovec_t;
    - 
    - typedef struct st_h2o_mem_recycle_t {
    -diff --git a/include/h2o/socket.h b/include/h2o/socket.h
    -index 58ada8509..268dd8a2e 100644
    ---- a/include/h2o/socket.h
    -+++ b/include/h2o/socket.h
    -@@ -27,7 +27,11 @@ extern "C" {
    - #endif
    - 
    - #include 
    -+#ifdef _WIN32
    -+#include 
    -+#else
    - #include 
    -+#endif
    - #include 
    - #include "h2o/cache.h"
    - #include "h2o/memory.h"
    -diff --git a/include/h2o/socketpool.h b/include/h2o/socketpool.h
    -index cc4161df4..f1c4eb3c3 100644
    ---- a/include/h2o/socketpool.h
    -+++ b/include/h2o/socketpool.h
    -@@ -26,8 +26,10 @@
    - extern "C" {
    - #endif
    - 
    -+#ifndef _WIN32
    - #include 
    - #include 
    -+#endif
    - #include 
    - #include "h2o/linklist.h"
    - #include "h2o/multithread.h"
    -diff --git a/include/h2o/url.h b/include/h2o/url.h
    -index 231c9a263..6a707a567 100644
    ---- a/include/h2o/url.h
    -+++ b/include/h2o/url.h
    -@@ -22,7 +22,9 @@
    - #ifndef h2o__url_h
    - #define h2o__url_h
    - 
    -+#ifndef H2O_NO_UNIX_SOCKETS
    - #include 
    -+#endif
    - #include "h2o/memory.h"
    - 
    - typedef struct st_h2o_url_scheme_t {
    -@@ -92,11 +94,13 @@ static h2o_iovec_t h2o_url_stringify(h2o_mem_pool_t *pool, const h2o_url_t *url)
    -  * copies a URL object (null-terminates all the string elements)
    -  */
    - void h2o_url_copy(h2o_mem_pool_t *pool, h2o_url_t *dest, const h2o_url_t *src);
    -+#ifndef H2O_NO_UNIX_SOCKETS
    - /**
    -  * extracts sockaddr_un from host and returns NULL (or returns an error string if failed)
    -  */
    - const char *h2o_url_host_to_sun(h2o_iovec_t host, struct sockaddr_un *sa);
    - extern const char *h2o_url_host_to_sun_err_is_not_unix_socket;
    -+#endif
    - 
    - /* inline definitions */
    - 
    -diff --git a/lib/common/file.c b/lib/common/file.c
    -index 3cf5ac5d1..d3e0048b6 100644
    ---- a/lib/common/file.c
    -+++ b/lib/common/file.c
    -@@ -25,7 +25,6 @@
    - #include 
    - #include 
    - #include 
    --#include 
    - #include 
    - #include "h2o/file.h"
    - 
    -@@ -33,7 +32,7 @@ h2o_iovec_t h2o_file_read(const char *fn)
    - {
    -     int fd;
    -     struct stat st;
    --    h2o_iovec_t ret = {NULL};
    -+    h2o_iovec_t ret = H2O_IOVEC_NULL;
    - 
    -     /* open */
    -     if ((fd = open(fn, O_RDONLY | O_CLOEXEC)) == -1)
    -@@ -64,5 +63,5 @@ Error:
    -     if (fd != -1)
    -         close(fd);
    -     free(ret.base);
    --    return (h2o_iovec_t){NULL};
    -+    return (h2o_iovec_t)H2O_IOVEC_NULL;
    - }
    -diff --git a/lib/common/filecache.c b/lib/common/filecache.c
    -index 747a1ffa6..e37e1f498 100644
    ---- a/lib/common/filecache.c
    -+++ b/lib/common/filecache.c
    -@@ -136,6 +136,24 @@ Exit:
    -     return ref;
    - }
    - 
    -+ssize_t h2o_filecache_read_file(h2o_filecache_ref_t *ref, void *buf, size_t count, off_t offset)
    -+{
    -+    #ifdef _WIN32
    -+    // h2o reads from h2o_filecache_ref_t.fd only with pread (comment it out to verify)
    -+    // this allows me to ignore the existence of the file pointer position maintained
    -+    // by Windows I/O manager and use NtReadFile() without opening extra file handles
    -+    /*
    -+    #include 
    -+    IO_STATUS_BLOCK sb;
    -+    LARGE_INTEGER li;
    -+    NTSTATUS s = NtReadFile(_get_osfhandle(fd), NULL, NULL, NULL, &sb, buf, count, &li, NULL);
    -+    */
    -+    return -1;
    -+    #else
    -+    return pread(ref->fd, buf, count, offset);
    -+    #endif
    -+}
    -+
    - void h2o_filecache_close_file(h2o_filecache_ref_t *ref)
    - {
    -     if (--ref->_refcnt != 0)
    -diff --git a/lib/common/http1client.c b/lib/common/http1client.c
    -index 8547ea817..a9de3d67d 100644
    ---- a/lib/common/http1client.c
    -+++ b/lib/common/http1client.c
    -@@ -19,12 +19,18 @@
    -  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    -  * IN THE SOFTWARE.
    -  */
    -+#ifdef _WIN32
    -+#include 
    -+#else
    - #include 
    - #include 
    - #include 
    - #include 
    -+#endif
    - #include 
    -+#ifndef H2O_NO_UNIX_SOCKETS
    - #include 
    -+#endif
    - #include "picohttpparser.h"
    - #include "h2o.h"
    - 
    -@@ -535,6 +541,7 @@ void h2o_http1client_connect(h2o_http1client_t **_client, void *data, h2o_http1c
    -             return;
    -         }
    -     }
    -+    #ifndef _WIN32
    -     { /* directly call connect(2) if `host` refers to an UNIX-domain socket */
    -         struct sockaddr_un sa;
    -         const char *to_sa_err;
    -@@ -547,6 +554,7 @@ void h2o_http1client_connect(h2o_http1client_t **_client, void *data, h2o_http1c
    -             return;
    -         }
    -     }
    -+    #endif
    -     /* resolve destination and then connect */
    -     client->_getaddr_req =
    -         h2o_hostinfo_getaddr(ctx->getaddr_receiver, host, h2o_iovec_init(serv, sprintf(serv, "%u", (unsigned)port)), AF_UNSPEC,
    -diff --git a/lib/common/memory.c b/lib/common/memory.c
    -index ba9f2dba2..3a505d8ea 100644
    ---- a/lib/common/memory.c
    -+++ b/lib/common/memory.c
    -@@ -27,7 +27,9 @@
    - #include 
    - #include 
    - #include 
    -+#ifndef _WIN32
    - #include 
    -+#endif
    - #include 
    - #include "h2o/memory.h"
    - 
    -@@ -190,20 +192,24 @@ void h2o_mem_link_shared(h2o_mem_pool_t *pool, void *p)
    -     link_shared(pool, H2O_STRUCT_FROM_MEMBER(struct st_h2o_mem_pool_shared_entry_t, bytes, p));
    - }
    - 
    -+#ifndef _WIN32
    - static size_t topagesize(size_t capacity)
    - {
    -     size_t pagesize = getpagesize();
    -     return (offsetof(h2o_buffer_t, _buf) + capacity + pagesize - 1) / pagesize * pagesize;
    - }
    -+#endif
    - 
    - void h2o_buffer__do_free(h2o_buffer_t *buffer)
    - {
    -     /* caller should assert that the buffer is not part of the prototype */
    -     if (buffer->capacity == buffer->_prototype->_initial_buf.capacity) {
    -         h2o_mem_free_recycle(&buffer->_prototype->allocator, buffer);
    -+    #ifndef _WIN32
    -     } else if (buffer->_fd != -1) {
    -         close(buffer->_fd);
    -         munmap((void *)buffer, topagesize(buffer->capacity));
    -+    #endif
    -     } else {
    -         free(buffer);
    -     }
    -@@ -240,6 +246,7 @@ h2o_iovec_t h2o_buffer_reserve(h2o_buffer_t **_inbuf, size_t min_guarantee)
    -             do {
    -                 new_capacity *= 2;
    -             } while (new_capacity - inbuf->size < min_guarantee);
    -+            #ifndef _WIN32
    -             if (inbuf->_prototype->mmap_settings != NULL && inbuf->_prototype->mmap_settings->threshold <= new_capacity) {
    -                 size_t new_allocsize = topagesize(new_capacity);
    -                 int fd;
    -@@ -287,7 +294,9 @@ h2o_iovec_t h2o_buffer_reserve(h2o_buffer_t **_inbuf, size_t min_guarantee)
    -                     inbuf->capacity = new_capacity;
    -                     inbuf->bytes = newp->_buf + offset;
    -                 }
    --            } else {
    -+            } else
    -+            #endif
    -+            {
    -                 h2o_buffer_t *newp = h2o_mem_alloc(offsetof(h2o_buffer_t, _buf) + new_capacity);
    -                 newp->size = inbuf->size;
    -                 newp->bytes = newp->_buf;
    -@@ -306,10 +315,12 @@ h2o_iovec_t h2o_buffer_reserve(h2o_buffer_t **_inbuf, size_t min_guarantee)
    - 
    -     return ret;
    - 
    -+#ifndef _WIN32
    - MapError:
    -     ret.base = NULL;
    -     ret.len = 0;
    -     return ret;
    -+#endif
    - }
    - 
    - void h2o_buffer_consume(h2o_buffer_t **_inbuf, size_t delta)
    -diff --git a/lib/common/multithread.c b/lib/common/multithread.c
    -index b4e8ba836..9a3dbe7d4 100644
    ---- a/lib/common/multithread.c
    -+++ b/lib/common/multithread.c
    -@@ -22,7 +22,6 @@
    -  */
    - #include 
    - #include 
    --#include "cloexec.h"
    - #include "h2o/multithread.h"
    - 
    - struct st_h2o_multithread_queue_t {
    -@@ -73,6 +72,7 @@ pthread_mutex_t h2o_conn_id_mutex = PTHREAD_MUTEX_INITIALIZER;
    - #if H2O_USE_LIBUV
    - #else
    - 
    -+#include "cloexec.h"
    - #include 
    - #include 
    - #include 
    -diff --git a/lib/common/serverutil.c b/lib/common/serverutil.c
    -index 8226f6efc..a599e7412 100644
    ---- a/lib/common/serverutil.c
    -+++ b/lib/common/serverutil.c
    -@@ -21,26 +21,30 @@
    -  */
    - #include 
    - #include 
    -+#ifndef _WIN32
    - #include 
    --#include 
    - #include 
    --#include 
    - #include 
    -+#include 
    -+#if !defined(_SC_NPROCESSORS_ONLN)
    -+#include 
    -+#endif
    -+#endif
    -+#include 
    -+#include 
    - #include 
    - #include 
    - #include 
    - #include 
    --#include 
    - #include 
    --#if !defined(_SC_NPROCESSORS_ONLN)
    --#include 
    --#endif
    --#include "cloexec.h"
    - #include "h2o/memory.h"
    - #include "h2o/serverutil.h"
    - #include "h2o/socket.h"
    - #include "h2o/string_.h"
    --
    -+#if !H2O_USE_LIBUV
    -+#include "cloexec.h"
    -+#endif
    -+#if 0
    - void h2o_set_signal_handler(int signo, void (*cb)(int signo))
    - {
    -     struct sigaction action;
    -@@ -137,6 +141,7 @@ static char **build_spawn_env(void)
    -     return newenv;
    - }
    - 
    -+#ifndef _WIN32
    - pid_t h2o_spawnp(const char *cmd, char *const *argv, const int *mapped_fds, int cloexec_mutex_is_locked)
    - {
    - #if defined(__linux__)
    -@@ -235,6 +240,7 @@ Error:
    - 
    - #endif
    - }
    -+#endif
    - 
    - int h2o_read_command(const char *cmd, char **argv, h2o_buffer_t **resp, int *child_status)
    - {
    -@@ -315,3 +321,4 @@ size_t h2o_numproc(void)
    -     return 1;
    - #endif
    - }
    -+#endif
    -\ No newline at end of file
    -diff --git a/lib/common/socket.c b/lib/common/socket.c
    -index 5b1c37e04..86ebbd8b4 100644
    ---- a/lib/common/socket.c
    -+++ b/lib/common/socket.c
    -@@ -23,11 +23,18 @@
    - #include 
    - #include 
    - #include 
    -+#ifdef _WIN32
    -+#include 
    -+#include 
    -+#else
    - #include 
    - #include 
    - #include 
    -+#endif
    - #include 
    -+#ifndef H2O_NO_UNIX_SOCKETS
    - #include 
    -+#endif
    - #include 
    - #include 
    - #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
    -@@ -861,12 +868,7 @@ int h2o_socket_compare_address(struct sockaddr *x, struct sockaddr *y)
    - 
    -     CMP(x->sa_family, y->sa_family);
    - 
    --    if (x->sa_family == AF_UNIX) {
    --        struct sockaddr_un *xun = (void *)x, *yun = (void *)y;
    --        int r = strcmp(xun->sun_path, yun->sun_path);
    --        if (r != 0)
    --            return r;
    --    } else if (x->sa_family == AF_INET) {
    -+    if (x->sa_family == AF_INET) {
    -         struct sockaddr_in *xin = (void *)x, *yin = (void *)y;
    -         CMP(ntohl(xin->sin_addr.s_addr), ntohl(yin->sin_addr.s_addr));
    -         CMP(ntohs(xin->sin_port), ntohs(yin->sin_port));
    -@@ -878,6 +880,13 @@ int h2o_socket_compare_address(struct sockaddr *x, struct sockaddr *y)
    -         CMP(ntohs(xin6->sin6_port), ntohs(yin6->sin6_port));
    -         CMP(xin6->sin6_flowinfo, yin6->sin6_flowinfo);
    -         CMP(xin6->sin6_scope_id, yin6->sin6_scope_id);
    -+    #ifndef H2O_NO_UNIX_SOCKETS
    -+    } else if (x->sa_family == AF_UNIX) {
    -+        struct sockaddr_un *xun = (void *)x, *yun = (void *)y;
    -+        int r = strcmp(xun->sun_path, yun->sun_path);
    -+        if (r != 0)
    -+            return r;
    -+    #endif
    -     } else {
    -         assert(!"unknown sa_family");
    -     }
    -@@ -1015,7 +1024,7 @@ static void on_handshake_complete(h2o_socket_t *sock, const char *err)
    - 
    - static void proceed_handshake(h2o_socket_t *sock, const char *err)
    - {
    --    h2o_iovec_t first_input = {NULL};
    -+    h2o_iovec_t first_input = H2O_IOVEC_NULL;
    -     int ret = 0;
    - 
    -     sock->_cb.write = NULL;
    -diff --git a/lib/common/socketpool.c b/lib/common/socketpool.c
    -index da69933f7..730d3d22f 100644
    ---- a/lib/common/socketpool.c
    -+++ b/lib/common/socketpool.c
    -@@ -21,12 +21,18 @@
    -  */
    - #include 
    - #include 
    -+#ifdef _WIN32
    -+#include 
    -+#else
    - #include 
    -+#include 
    - #include 
    - #include 
    -+#endif
    - #include 
    -+#ifndef H2O_NO_UNIX_SOCKETS
    - #include 
    --#include 
    -+#endif
    - #include "h2o/hostinfo.h"
    - #include "h2o/linklist.h"
    - #include "h2o/socketpool.h"
    -@@ -110,11 +116,15 @@ void h2o_socketpool_init_by_address(h2o_socketpool_t *pool, struct sockaddr *sa,
    -     assert(salen <= sizeof(pool->peer.sockaddr.bytes));
    - 
    -     if ((host_len = h2o_socket_getnumerichost(sa, salen, host)) == SIZE_MAX) {
    -+        #ifndef H2O_NO_UNIX_SOCKETS
    -         if (sa->sa_family != AF_UNIX)
    -             h2o_fatal("failed to convert a non-unix socket address to a numerical representation");
    -         /* use the sockaddr_un::sun_path as the SNI indicator (is that the right thing to do?) */
    -         strcpy(host, ((struct sockaddr_un *)sa)->sun_path);
    -         host_len = strlen(host);
    -+        #else
    -+        h2o_fatal("failed to convert a socket address to a numerical representation");
    -+        #endif
    -     }
    - 
    -     common_init(pool, H2O_SOCKETPOOL_TYPE_SOCKADDR, h2o_iovec_init(host, host_len), is_ssl, capacity);
    -diff --git a/lib/common/string.c b/lib/common/string.c
    -index 3c068f3ad..2c33624b7 100644
    ---- a/lib/common/string.c
    -+++ b/lib/common/string.c
    -@@ -441,16 +441,21 @@ const char *h2o_next_token(h2o_iovec_t *iter, int separator, size_t *element_len
    -     *iter = h2o_iovec_init(cur, end - cur);
    -     *element_len = token_end - token_start;
    -     if (value != NULL)
    --        *value = (h2o_iovec_t){NULL};
    -+        *value = (h2o_iovec_t)H2O_IOVEC_NULL;
    -     return token_start;
    - 
    - FindValue:
    -     *iter = h2o_iovec_init(cur, end - cur);
    -     *element_len = token_end - token_start;
    --    if ((value->base = (char *)h2o_next_token(iter, separator, &value->len, NULL)) == NULL) {
    --        *value = (h2o_iovec_t){"", 0};
    --    } else if (h2o_memis(value->base, value->len, H2O_STRLIT(","))) {
    --        *value = (h2o_iovec_t){"", 0};
    -+
    -+    size_t tmp;    
    -+    if ((value->base = (char *)h2o_next_token(iter, separator, &tmp, NULL)) == NULL) {
    -+        *value = (h2o_iovec_t)H2O_IOVEC_EMPTY;
    -+        return token_start;
    -+    }
    -+    value->len = tmp;
    -+    if (h2o_memis(value->base, value->len, H2O_STRLIT(","))) {
    -+        *value = (h2o_iovec_t)H2O_IOVEC_EMPTY;
    -         iter->base -= 1;
    -         iter->len += 1;
    -     }
    -@@ -499,7 +504,7 @@ h2o_iovec_t h2o_htmlescape(h2o_mem_pool_t *pool, const char *src, size_t len)
    -     /* escape and return the result if necessary */
    -     if (add_size != 0) {
    -         /* allocate buffer and fill in the chars that are known not to require escaping */
    --        h2o_iovec_t escaped = {h2o_mem_alloc_pool(pool, len + add_size + 1), 0};
    -+        h2o_iovec_t escaped = h2o_iovec_init(h2o_mem_alloc_pool(pool, len + add_size + 1), 0);
    -         /* fill-in the rest */
    -         for (s = src; s != end; ++s) {
    -             switch (*s) {
    -@@ -529,7 +534,7 @@ h2o_iovec_t h2o_htmlescape(h2o_mem_pool_t *pool, const char *src, size_t len)
    - 
    - h2o_iovec_t h2o_concat_list(h2o_mem_pool_t *pool, h2o_iovec_t *list, size_t count)
    - {
    --    h2o_iovec_t ret = {NULL, 0};
    -+    h2o_iovec_t ret = H2O_IOVEC_NULL;
    -     size_t i;
    - 
    -     /* calc the length */
    -diff --git a/lib/common/url.c b/lib/common/url.c
    -index d65d18fb5..9b9ec85bb 100644
    ---- a/lib/common/url.c
    -+++ b/lib/common/url.c
    -@@ -19,15 +19,21 @@
    -  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    -  * IN THE SOFTWARE.
    -  */
    -+#ifdef _WIN32
    -+#include 
    -+#else
    - #include 
    -+#endif
    - #include 
    -+#ifndef H2O_NO_UNIX_SOCKETS
    - #include 
    -+#endif
    - #include "h2o/memory.h"
    - #include "h2o/string_.h"
    - #include "h2o/url.h"
    - 
    --const h2o_url_scheme_t H2O_URL_SCHEME_HTTP = {{H2O_STRLIT("http")}, 80};
    --const h2o_url_scheme_t H2O_URL_SCHEME_HTTPS = {{H2O_STRLIT("https")}, 443};
    -+const h2o_url_scheme_t H2O_URL_SCHEME_HTTP = {H2O_IOVEC_STRLIT("http"), 80};
    -+const h2o_url_scheme_t H2O_URL_SCHEME_HTTPS = {H2O_IOVEC_STRLIT("https"), 443};
    - 
    - static int decode_hex(int ch)
    - {
    -@@ -277,8 +283,8 @@ int h2o_url_parse_relative(const char *url, size_t url_len, h2o_url_t *parsed)
    -         return parse_authority_and_path(p + 2, url_end, parsed);
    - 
    -     /* reset authority, host, port, and set path */
    --    parsed->authority = (h2o_iovec_t){NULL};
    --    parsed->host = (h2o_iovec_t){NULL};
    -+    parsed->authority = (h2o_iovec_t)H2O_IOVEC_NULL;
    -+    parsed->host = (h2o_iovec_t)H2O_IOVEC_NULL;
    -     parsed->_port = 65535;
    -     parsed->path = h2o_iovec_init(p, url_end - p);
    - 
    -@@ -324,7 +330,7 @@ h2o_iovec_t h2o_url_resolve(h2o_mem_pool_t *pool, const h2o_url_t *base, const h
    -         h2o_url_resolve_path(&base_path, &relative_path);
    -     } else {
    -         assert(relative->path.len == 0);
    --        relative_path = (h2o_iovec_t){NULL};
    -+        relative_path = (h2o_iovec_t)H2O_IOVEC_NULL;
    -     }
    - 
    - Build:
    -@@ -388,6 +394,7 @@ void h2o_url_copy(h2o_mem_pool_t *pool, h2o_url_t *dest, const h2o_url_t *src)
    -     dest->_port = src->_port;
    - }
    - 
    -+#ifndef H2O_NO_UNIX_SOCKETS
    - const char *h2o_url_host_to_sun(h2o_iovec_t host, struct sockaddr_un *sa)
    - {
    - #define PREFIX "unix:"
    -@@ -407,3 +414,4 @@ const char *h2o_url_host_to_sun(h2o_iovec_t host, struct sockaddr_un *sa)
    - }
    - 
    - const char *h2o_url_host_to_sun_err_is_not_unix_socket = "supplied name does not look like an unix-domain socket";
    -+#endif
    -diff --git a/lib/core/config.c b/lib/core/config.c
    -index ce1d32018..267708723 100644
    ---- a/lib/core/config.c
    -+++ b/lib/core/config.c
    -@@ -246,7 +246,7 @@ h2o_hostconf_t *h2o_config_register_host(h2o_globalconf_t *config, h2o_iovec_t h
    -     /* create hostconf */
    -     hostconf = create_hostconf(config);
    -     hostconf->authority.host = host_lc;
    --    host_lc = (h2o_iovec_t){NULL};
    -+    host_lc = (h2o_iovec_t)H2O_IOVEC_NULL;
    -     hostconf->authority.port = port;
    -     if (hostconf->authority.port == 65535) {
    -         hostconf->authority.hostport = hostconf->authority.host;
    -diff --git a/lib/core/context.c b/lib/core/context.c
    -index 8d1101381..f472adbe6 100644
    ---- a/lib/core/context.c
    -+++ b/lib/core/context.c
    -@@ -23,7 +23,6 @@
    - #include 
    - #include 
    - #include "h2o.h"
    --#include "h2o/memcached.h"
    - 
    - void h2o_context_init_pathconf_context(h2o_context_t *ctx, h2o_pathconf_t *pathconf)
    - {
    -@@ -194,7 +193,9 @@ void h2o_context_update_timestamp_cache(h2o_context_t *ctx)
    -         if (ctx->_timestamp_cache.value != NULL)
    -             h2o_mem_release_shared(ctx->_timestamp_cache.value);
    -         ctx->_timestamp_cache.value = h2o_mem_alloc_shared(NULL, sizeof(h2o_timestamp_string_t), NULL);
    --        gmtime_r(&ctx->_timestamp_cache.tv_at.tv_sec, &gmt);
    -+        /* work around pointer type collision in MingW */
    -+        time_t tmp = ctx->_timestamp_cache.tv_at.tv_sec;
    -+        gmtime_r(&tmp, &gmt);
    -         h2o_time2str_rfc1123(ctx->_timestamp_cache.value->rfc1123, &gmt);
    -         h2o_time2str_log(ctx->_timestamp_cache.value->log, ctx->_timestamp_cache.tv_at.tv_sec);
    -     }
    -diff --git a/lib/core/logconf.c b/lib/core/logconf.c
    -index 4d79736cc..74c198ce7 100644
    ---- a/lib/core/logconf.c
    -+++ b/lib/core/logconf.c
    -@@ -597,8 +597,11 @@ char *h2o_log_request(h2o_logconf_t *logconf, h2o_req_t *req, size_t *len, char
    -                 goto EmitNull;
    -             {
    -                 size_t bufsz, len;
    --                if (localt.tm_year == 0)
    --                    localtime_r(&req->processed_at.at.tv_sec, &localt);
    -+                if (localt.tm_year == 0) {
    -+                    /* work around pointer type collision in MingW */
    -+                    time_t tmp = req->processed_at.at.tv_sec;
    -+                    localtime_r(&tmp, &localt);
    -+                }
    -                 for (bufsz = 128;; bufsz *= 2) {
    -                     RESERVE(bufsz);
    -                     if ((len = strftime(pos, bufsz, element->data.name.base, &localt)) != 0)
    -diff --git a/lib/core/proxy.c b/lib/core/proxy.c
    -index edb4baf9d..448dc103d 100644
    ---- a/lib/core/proxy.c
    -+++ b/lib/core/proxy.c
    -@@ -19,10 +19,14 @@
    -  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
    -  * IN THE SOFTWARE.
    -  */
    --#include 
    - #include 
    - #include 
    -+#ifdef _WIN32
    -+#include 
    -+#else
    -+#include 
    - #include 
    -+#endif
    - #include "picohttpparser.h"
    - #include "h2o.h"
    - #include "h2o/http1.h"
    -@@ -79,7 +83,7 @@ static h2o_iovec_t rewrite_location(h2o_mem_pool_t *pool, const char *location,
    -                       h2o_iovec_init(loc_parsed.path.base + match->path.len, loc_parsed.path.len - match->path.len));
    - 
    - NoRewrite:
    --    return (h2o_iovec_t){NULL};
    -+    return (h2o_iovec_t)H2O_IOVEC_NULL;
    - }
    - 
    - static h2o_iovec_t build_request_merge_headers(h2o_mem_pool_t *pool, h2o_iovec_t merged, h2o_iovec_t added, int seperator)
    -@@ -136,7 +140,7 @@ static h2o_iovec_t build_request(h2o_req_t *req, int keepalive, int is_websocket
    -     char remote_addr[NI_MAXHOST];
    -     struct sockaddr_storage ss;
    -     socklen_t sslen;
    --    h2o_iovec_t cookie_buf = {NULL}, xff_buf = {NULL}, via_buf = {NULL};
    -+    h2o_iovec_t cookie_buf = H2O_IOVEC_NULL, xff_buf = H2O_IOVEC_NULL, via_buf = H2O_IOVEC_NULL;
    -     int preserve_x_forwarded_proto = req->conn->ctx->globalconf->proxy.preserve_x_forwarded_proto;
    -     int emit_x_forwarded_headers = req->conn->ctx->globalconf->proxy.emit_x_forwarded_headers;
    -     int emit_via_header = req->conn->ctx->globalconf->proxy.emit_via_header;
    -@@ -202,7 +206,7 @@ static h2o_iovec_t build_request(h2o_req_t *req, int keepalive, int is_websocket
    -     assert(offset <= buf.len);
    -     if (req->entity.base != NULL || req_requires_content_length(req)) {
    -         RESERVE(sizeof("content-length: " H2O_UINT64_LONGEST_STR) - 1);
    --        offset += sprintf(buf.base + offset, "content-length: %zu\r\n", req->entity.len);
    -+        offset += sprintf(buf.base + offset, "content-length: %zu\r\n", (size_t)req->entity.len);
    -     }
    - 
    -     /* rewrite headers if necessary */
    -diff --git a/lib/core/request.c b/lib/core/request.c
    -index 96aabb22d..65810ed91 100644
    ---- a/lib/core/request.c
    -+++ b/lib/core/request.c
    -@@ -22,7 +22,9 @@
    - #include 
    - #include 
    - #include 
    -+#ifndef _WIN32
    - #include 
    -+#endif
    - #include "h2o.h"
    - 
    - #ifndef IOV_MAX
    -@@ -595,10 +597,16 @@ void h2o_req_log_error(h2o_req_t *req, const char *module, const char *fmt, ...)
    -             p += 3;
    -         }
    -         *p++ = ':';
    -+        #ifdef _WIN32
    -+        write(2, prefix, p - prefix);
    -+        write(2, errbuf, errlen);
    -+        write(2, "\n", 1);
    -+        #else
    -         /* use writev(2) to emit error atomically */
    -         struct iovec vecs[] = {{prefix, p - prefix}, {errbuf, errlen}, {"\n", 1}};
    -         H2O_BUILD_ASSERT(sizeof(vecs) / sizeof(vecs[0]) < IOV_MAX);
    -         writev(2, vecs, sizeof(vecs) / sizeof(vecs[0]));
    -+        #endif
    -     }
    - }
    - 
    -@@ -611,8 +619,8 @@ void h2o_send_redirect(h2o_req_t *req, int status, const char *reason, const cha
    -     }
    - 
    -     static h2o_generator_t generator = {NULL, NULL};
    --    static const h2o_iovec_t body_prefix = {H2O_STRLIT("Moved

    The document has moved here")}; -+ static const h2o_iovec_t body_prefix = H2O_IOVEC_STRLIT("Moved

    The document has moved here"); - - /* build and send response */ - h2o_iovec_t bufs[3]; -diff --git a/lib/core/token_table.h b/lib/core/token_table.h -index ae26aa6c4..fa74f1e08 100644 ---- a/lib/core/token_table.h -+++ b/lib/core/token_table.h -@@ -21,68 +21,68 @@ - */ - - /* DO NOT EDIT! generated by tokens.pl */ --h2o_token_t h2o__tokens[] = {{{H2O_STRLIT(":authority")}, 1, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT(":method")}, 2, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT(":path")}, 4, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT(":scheme")}, 6, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT(":status")}, 8, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("accept")}, 19, 0, 0, 0, 0, 1, 0}, -- {{H2O_STRLIT("accept-charset")}, 15, 0, 0, 0, 0, 1, 0}, -- {{H2O_STRLIT("accept-encoding")}, 16, 0, 0, 0, 0, 1, 0}, -- {{H2O_STRLIT("accept-language")}, 17, 0, 0, 0, 0, 1, 0}, -- {{H2O_STRLIT("accept-ranges")}, 18, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("access-control-allow-origin")}, 20, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("age")}, 21, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("allow")}, 22, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("authorization")}, 23, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("cache-control")}, 24, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("cache-digest")}, 0, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("connection")}, 0, 1, 1, 0, 1, 0, 0}, -- {{H2O_STRLIT("content-disposition")}, 25, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("content-encoding")}, 26, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("content-language")}, 27, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("content-length")}, 28, 0, 0, 1, 0, 0, 0}, -- {{H2O_STRLIT("content-location")}, 29, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("content-range")}, 30, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("content-type")}, 31, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("cookie")}, 32, 0, 0, 0, 0, 0, 1}, -- {{H2O_STRLIT("date")}, 33, 0, 1, 0, 0, 0, 0}, -- {{H2O_STRLIT("etag")}, 34, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("expect")}, 35, 0, 0, 1, 0, 0, 0}, -- {{H2O_STRLIT("expires")}, 36, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("from")}, 37, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("host")}, 38, 0, 0, 1, 1, 0, 0}, -- {{H2O_STRLIT("http2-settings")}, 0, 1, 0, 0, 1, 0, 0}, -- {{H2O_STRLIT("if-match")}, 39, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("if-modified-since")}, 40, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("if-none-match")}, 41, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("if-range")}, 42, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("if-unmodified-since")}, 43, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("keep-alive")}, 0, 1, 1, 0, 0, 0, 0}, -- {{H2O_STRLIT("last-modified")}, 44, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("link")}, 45, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("location")}, 46, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("max-forwards")}, 47, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("proxy-authenticate")}, 48, 1, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("proxy-authorization")}, 49, 1, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("range")}, 50, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("referer")}, 51, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("refresh")}, 52, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("retry-after")}, 53, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("server")}, 54, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("set-cookie")}, 55, 0, 0, 0, 0, 0, 1}, -- {{H2O_STRLIT("strict-transport-security")}, 56, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("te")}, 0, 1, 0, 0, 1, 0, 0}, -- {{H2O_STRLIT("transfer-encoding")}, 57, 1, 1, 1, 1, 0, 0}, -- {{H2O_STRLIT("upgrade")}, 0, 1, 1, 1, 1, 0, 0}, -- {{H2O_STRLIT("user-agent")}, 58, 0, 0, 0, 0, 1, 0}, -- {{H2O_STRLIT("vary")}, 59, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("via")}, 60, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("www-authenticate")}, 61, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("x-compress-hint")}, 0, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("x-forwarded-for")}, 0, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("x-reproxy-url")}, 0, 0, 0, 0, 0, 0, 0}, -- {{H2O_STRLIT("x-traffic")}, 0, 0, 0, 0, 0, 0, 0}}; -+h2o_token_t h2o__tokens[] = {{H2O_IOVEC_STRLIT(":authority"), 1, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT(":method"), 2, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT(":path"), 4, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT(":scheme"), 6, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT(":status"), 8, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("accept"), 19, 0, 0, 0, 0, 1, 0}, -+ {H2O_IOVEC_STRLIT("accept-charset"), 15, 0, 0, 0, 0, 1, 0}, -+ {H2O_IOVEC_STRLIT("accept-encoding"), 16, 0, 0, 0, 0, 1, 0}, -+ {H2O_IOVEC_STRLIT("accept-language"), 17, 0, 0, 0, 0, 1, 0}, -+ {H2O_IOVEC_STRLIT("accept-ranges"), 18, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("access-control-allow-origin"), 20, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("age"), 21, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("allow"), 22, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("authorization"), 23, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("cache-control"), 24, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("cache-digest"), 0, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("connection"), 0, 1, 1, 0, 1, 0, 0}, -+ {H2O_IOVEC_STRLIT("content-disposition"), 25, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("content-encoding"), 26, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("content-language"), 27, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("content-length"), 28, 0, 0, 1, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("content-location"), 29, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("content-range"), 30, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("content-type"), 31, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("cookie"), 32, 0, 0, 0, 0, 0, 1}, -+ {H2O_IOVEC_STRLIT("date"), 33, 0, 1, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("etag"), 34, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("expect"), 35, 0, 0, 1, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("expires"), 36, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("from"), 37, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("host"), 38, 0, 0, 1, 1, 0, 0}, -+ {H2O_IOVEC_STRLIT("http2-settings"), 0, 1, 0, 0, 1, 0, 0}, -+ {H2O_IOVEC_STRLIT("if-match"), 39, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("if-modified-since"), 40, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("if-none-match"), 41, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("if-range"), 42, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("if-unmodified-since"), 43, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("keep-alive"), 0, 1, 1, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("last-modified"), 44, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("link"), 45, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("location"), 46, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("max-forwards"), 47, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("proxy-authenticate"), 48, 1, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("proxy-authorization"), 49, 1, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("range"), 50, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("referer"), 51, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("refresh"), 52, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("retry-after"), 53, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("server"), 54, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("set-cookie"), 55, 0, 0, 0, 0, 0, 1}, -+ {H2O_IOVEC_STRLIT("strict-transport-security"), 56, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("te"), 0, 1, 0, 0, 1, 0, 0}, -+ {H2O_IOVEC_STRLIT("transfer-encoding"), 57, 1, 1, 1, 1, 0, 0}, -+ {H2O_IOVEC_STRLIT("upgrade"), 0, 1, 1, 1, 1, 0, 0}, -+ {H2O_IOVEC_STRLIT("user-agent"), 58, 0, 0, 0, 0, 1, 0}, -+ {H2O_IOVEC_STRLIT("vary"), 59, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("via"), 60, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("www-authenticate"), 61, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("x-compress-hint"), 0, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("x-forwarded-for"), 0, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("x-reproxy-url"), 0, 0, 0, 0, 0, 0, 0}, -+ {H2O_IOVEC_STRLIT("x-traffic"), 0, 0, 0, 0, 0, 0, 0}}; - size_t h2o__num_tokens = 62; - - const h2o_token_t *h2o_lookup_token(const char *name, size_t len) -diff --git a/lib/core/util.c b/lib/core/util.c -index 50d2b2493..13c363ee1 100644 ---- a/lib/core/util.c -+++ b/lib/core/util.c -@@ -63,6 +63,7 @@ static void free_accept_data(struct st_h2o_accept_data_t *data) - free(data); - } - -+#ifndef H2O_NO_MEMCACHED - static struct { - h2o_memcached_context_t *memc; - unsigned expiration; -@@ -97,15 +98,18 @@ void h2o_accept_setup_async_ssl_resumption(h2o_memcached_context_t *memc, unsign - async_resumption_context.expiration = expiration; - h2o_socket_ssl_async_resumption_init(async_resumption_get, async_resumption_new); - } -+#endif - - void on_accept_timeout(h2o_timeout_entry_t *entry) - { - /* TODO log */ - struct st_h2o_accept_data_t *data = H2O_STRUCT_FROM_MEMBER(struct st_h2o_accept_data_t, timeout, entry); -+ #ifndef H2O_NO_MEMCACHED - if (data->async_resumption_get_req != NULL) { - h2o_memcached_cancel_get(async_resumption_context.memc, data->async_resumption_get_req); - data->async_resumption_get_req = NULL; - } -+ #endif - h2o_socket_t *sock = data->sock; - free_accept_data(data); - h2o_socket_close(sock); -@@ -158,7 +162,11 @@ static ssize_t parse_proxy_line(char *src, size_t len, struct sockaddr *sa, sock - - char *p = src, *end = p + len; - void *addr; -+ #if _WIN32 -+ u_short *port; -+ #else - in_port_t *port; -+ #endif - - /* "PROXY "*/ - EXPECT_CHAR('P'); -@@ -369,7 +377,7 @@ static void push_one_path(h2o_mem_pool_t *pool, h2o_iovec_vector_t *paths_to_pus - } - - /* check scheme and authority if given URL contains either of the two, or if base is specified */ -- h2o_url_t base = {input_scheme, input_authority, {NULL}, base_path, 65535}; -+ h2o_url_t base = {input_scheme, input_authority, H2O_IOVEC_NULL, base_path, 65535}; - if (base_scheme != NULL) { - base.scheme = base_scheme; - base.authority = *base_authority; -@@ -528,7 +536,7 @@ h2o_iovec_t h2o_build_destination(h2o_req_t *req, const char *prefix, size_t pre - if (req->path.base[0] != '/' && next_unnormalized == 1) { - next_unnormalized = 0; - } -- parts[num_parts++] = (h2o_iovec_t){req->path.base + next_unnormalized, req->path.len - next_unnormalized}; -+ parts[num_parts++] = h2o_iovec_init(req->path.base + next_unnormalized, req->path.len - next_unnormalized); - } - } - -@@ -536,10 +544,7 @@ h2o_iovec_t h2o_build_destination(h2o_req_t *req, const char *prefix, size_t pre - } - - /* h2-14 and h2-16 are kept for backwards compatibility, as they are often used */ --#define ALPN_ENTRY(s) \ -- { \ -- H2O_STRLIT(s) \ -- } -+#define ALPN_ENTRY(s) H2O_IOVEC_STRLIT(s) - #define ALPN_PROTOCOLS_CORE ALPN_ENTRY("h2"), ALPN_ENTRY("h2-16"), ALPN_ENTRY("h2-14") - #define NPN_PROTOCOLS_CORE \ - "\x02" \ -@@ -549,10 +554,10 @@ h2o_iovec_t h2o_build_destination(h2o_req_t *req, const char *prefix, size_t pre - "\x05" \ - "h2-14" - --static const h2o_iovec_t http2_alpn_protocols[] = {ALPN_PROTOCOLS_CORE, {NULL}}; -+static const h2o_iovec_t http2_alpn_protocols[] = {ALPN_PROTOCOLS_CORE, H2O_IOVEC_NULL}; - const h2o_iovec_t *h2o_http2_alpn_protocols = http2_alpn_protocols; - --static const h2o_iovec_t alpn_protocols[] = {ALPN_PROTOCOLS_CORE, {H2O_STRLIT("http/1.1")}, {NULL}}; -+static const h2o_iovec_t alpn_protocols[] = {ALPN_PROTOCOLS_CORE, H2O_IOVEC_STRLIT("http/1.1"), H2O_IOVEC_NULL}; - const h2o_iovec_t *h2o_alpn_protocols = alpn_protocols; - - const char *h2o_http2_npn_protocols = NPN_PROTOCOLS_CORE; -diff --git a/lib/handler/access_log.c b/lib/handler/access_log.c -index 4a7704174..d56c21add 100644 ---- a/lib/handler/access_log.c -+++ b/lib/handler/access_log.c -@@ -22,12 +22,16 @@ - #include - #include - #include -+#include -+#include -+#ifdef _WIN32 -+#include -+#else - #include - #include - #include --#include --#include - #include -+#endif - #include - #include "h2o.h" - #include "h2o/serverutil.h" -@@ -73,6 +77,7 @@ int h2o_access_log_open_log(const char *path) - { - int fd; - -+ #ifndef _WIN32 - if (path[0] == '|') { - int pipefds[2]; - pid_t pid; -@@ -96,7 +101,9 @@ int h2o_access_log_open_log(const char *path) - /* close the read side of the pipefds and return the write side */ - close(pipefds[0]); - fd = pipefds[1]; -- } else { -+ } else -+ #endif -+ { - if ((fd = open(path, O_CREAT | O_WRONLY | O_APPEND | O_CLOEXEC, 0644)) == -1) { - fprintf(stderr, "failed to open log file:%s:%s\n", path, strerror(errno)); - return -1; -diff --git a/lib/handler/configurator/headers_util.c b/lib/handler/configurator/headers_util.c -index c05b9b7c2..56e47842e 100644 ---- a/lib/handler/configurator/headers_util.c -+++ b/lib/handler/configurator/headers_util.c -@@ -87,7 +87,7 @@ static int on_config_header_unset(h2o_configurator_command_t *cmd, h2o_configura - h2o_configurator_errprintf(cmd, node, "invalid header name"); - return -1; - } -- if (add_cmd(cmd, node, H2O_HEADERS_CMD_UNSET, name, (h2o_iovec_t){NULL}, self->get_commands(self->child)) != 0) { -+ if (add_cmd(cmd, node, H2O_HEADERS_CMD_UNSET, name, (h2o_iovec_t)H2O_IOVEC_NULL, self->get_commands(self->child)) != 0) { - if (!h2o_iovec_is_token(name)) - free(name->base); - return -1; -diff --git a/lib/handler/file.c b/lib/handler/file.c -index 5d7c7a2a4..c0bc486ec 100644 ---- a/lib/handler/file.c -+++ b/lib/handler/file.c -@@ -128,7 +128,7 @@ static void do_proceed(h2o_generator_t *_self, h2o_req_t *req) - rlen = self->bytesleft; - if (rlen > MAX_BUF_SIZE) - rlen = MAX_BUF_SIZE; -- while ((rret = pread(self->file.ref->fd, self->buf, rlen, self->file.off)) == -1 && errno == EINTR) -+ while ((rret = h2o_filecache_read_file(self->file.ref, self->buf, rlen, self->file.off)) == -1 && errno == EINTR) - ; - if (rret == -1) { - h2o_send(req, NULL, 0, H2O_SEND_STATE_ERROR); -@@ -177,7 +177,7 @@ static void do_multirange_proceed(h2o_generator_t *_self, h2o_req_t *req) - rlen = self->bytesleft; - if (rlen + used_buf > MAX_BUF_SIZE) - rlen = MAX_BUF_SIZE - used_buf; -- while ((rret = pread(self->file.ref->fd, self->buf + used_buf, rlen, self->file.off)) == -1 && errno == EINTR) -+ while ((rret = h2o_filecache_read_file(self->file.ref, self->buf + used_buf, rlen, self->file.off)) == -1 && errno == EINTR) - ; - if (rret == -1) - goto Error; -@@ -213,7 +213,7 @@ static h2o_send_state_t do_pull(h2o_generator_t *_self, h2o_req_t *req, h2o_iove - - if (self->bytesleft < buf->len) - buf->len = self->bytesleft; -- while ((rret = pread(self->file.ref->fd, buf->base, buf->len, self->file.off)) == -1 && errno == EINTR) -+ while ((rret = h2o_filecache_read_file(self->file.ref, buf->base, buf->len, self->file.off)) == -1 && errno == EINTR) - ; - if (rret <= 0) { - buf->len = 0; -@@ -237,7 +237,7 @@ static struct st_h2o_sendfile_generator_t *create_generator(h2o_req_t *req, cons - { - struct st_h2o_sendfile_generator_t *self; - h2o_filecache_ref_t *fileref; -- h2o_iovec_t content_encoding = (h2o_iovec_t){NULL}; -+ h2o_iovec_t content_encoding = H2O_IOVEC_NULL; - unsigned gunzip = 0; - - *is_dir = 0; -diff --git a/lib/handler/proxy.c b/lib/handler/proxy.c -index 1d87225e1..7de3c4ec5 100644 ---- a/lib/handler/proxy.c -+++ b/lib/handler/proxy.c -@@ -19,7 +19,9 @@ - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -+#ifndef H2O_NO_UNIX_SOCKETS - #include -+#endif - #include "h2o.h" - #include "h2o/socketpool.h" - -@@ -136,29 +138,37 @@ static void on_handler_dispose(h2o_handler_t *_self) - - void h2o_proxy_register_reverse_proxy(h2o_pathconf_t *pathconf, h2o_url_t *upstream, h2o_proxy_config_vars_t *config) - { -- struct sockaddr_un sa; -+ #ifndef H2O_NO_UNIX_SOCKETS - const char *to_sa_err; -+ #endif - struct rp_handler_t *self = (void *)h2o_create_handler(pathconf, sizeof(*self)); - self->super.on_context_init = on_context_init; - self->super.on_context_dispose = on_context_dispose; - self->super.dispose = on_handler_dispose; - self->super.on_req = on_req; -- to_sa_err = h2o_url_host_to_sun(upstream->host, &sa); - if (config->keepalive_timeout != 0) { - self->sockpool = h2o_mem_alloc(sizeof(*self->sockpool)); - int is_ssl = upstream->scheme == &H2O_URL_SCHEME_HTTPS; -+ #ifndef H2O_NO_UNIX_SOCKETS -+ struct sockaddr_un sa; -+ to_sa_err = h2o_url_host_to_sun(upstream->host, &sa); - if (to_sa_err == h2o_url_host_to_sun_err_is_not_unix_socket) { -+ #endif - h2o_socketpool_init_by_hostport(self->sockpool, upstream->host, h2o_url_get_port(upstream), is_ssl, - SIZE_MAX /* FIXME */); -+ #ifndef H2O_NO_UNIX_SOCKETS - } else { - assert(to_sa_err == NULL); - h2o_socketpool_init_by_address(self->sockpool, (void *)&sa, sizeof(sa), is_ssl, SIZE_MAX /* FIXME */); - } -+ #endif - } - h2o_url_copy(NULL, &self->upstream, upstream); -+ #ifndef H2O_NO_UNIX_SOCKETS - if (to_sa_err) { - h2o_strtolower(self->upstream.host.base, self->upstream.host.len); - } -+ #endif - self->config = *config; - if (self->config.ssl_ctx != NULL) - SSL_CTX_up_ref(self->config.ssl_ctx); -diff --git a/lib/handler/redirect.c b/lib/handler/redirect.c -index c8b9c5086..9eb5d4552 100644 ---- a/lib/handler/redirect.c -+++ b/lib/handler/redirect.c -@@ -68,7 +68,7 @@ static void redirect_internally(h2o_redirect_handler_t *self, h2o_req_t *req, h2 - break; - default: - method = h2o_iovec_init(H2O_STRLIT("GET")); -- req->entity = (h2o_iovec_t){NULL}; -+ req->entity = (h2o_iovec_t)H2O_IOVEC_NULL; - break; - } - -diff --git a/lib/handler/reproxy.c b/lib/handler/reproxy.c -index 369386d27..2639045c6 100644 ---- a/lib/handler/reproxy.c -+++ b/lib/handler/reproxy.c -@@ -47,7 +47,7 @@ static void on_setup_ostream(h2o_filter_t *self, h2o_req_t *req, h2o_ostream_t * - break; - default: - method = h2o_iovec_init(H2O_STRLIT("GET")); -- req->entity = (h2o_iovec_t){NULL}; -+ req->entity = (h2o_iovec_t)H2O_IOVEC_NULL; - break; - } - -diff --git a/lib/handler/status.c b/lib/handler/status.c -index 93befed3b..95f9ce823 100644 ---- a/lib/handler/status.c -+++ b/lib/handler/status.c -@@ -95,7 +95,7 @@ static void send_response(struct st_h2o_status_collector_t *collector) - h2o_iovec_t resp[nr_resp]; - - memset(resp, 0, sizeof(resp[0]) * nr_resp); -- resp[cur_resp++] = (h2o_iovec_t){H2O_STRLIT("{\n")}; -+ resp[cur_resp++] = h2o_iovec_init(H2O_STRLIT("{\n")); - - int coma_removed = 0; - for (i = 0; i < req->conn->ctx->globalconf->statuses.size; i++) { -@@ -110,7 +110,7 @@ static void send_response(struct st_h2o_status_collector_t *collector) - coma_removed = 1; - } - } -- resp[cur_resp++] = (h2o_iovec_t){H2O_STRLIT("\n}\n")}; -+ resp[cur_resp++] = h2o_iovec_init(H2O_STRLIT("\n}\n")); - - req->res.status = 200; - h2o_add_header(&req->pool, &req->res.headers, H2O_TOKEN_CONTENT_TYPE, NULL, H2O_STRLIT("text/plain; charset=utf-8")); -@@ -213,7 +213,7 @@ static int on_req(h2o_handler_t *_self, h2o_req_t *req) - } else if (h2o_memis(local_path.base, local_path.len, H2O_STRLIT("/json"))) { - int ret; - /* "/json" maps to the JSON API */ -- h2o_iovec_t status_list = {NULL, 0}; /* NULL means we'll show all statuses */ -+ h2o_iovec_t status_list = H2O_IOVEC_NULL; /* NULL means we'll show all statuses */ - if (req->query_at != SIZE_MAX && (req->path.len - req->query_at > 6)) { - if (h2o_memis(&req->path.base[req->query_at], 6, "?show=", 6)) { - status_list = h2o_iovec_init(&req->path.base[req->query_at + 6], req->path.len - req->query_at - 6); -diff --git a/lib/handler/status/durations.c b/lib/handler/status/durations.c -index f011107bf..0e45e3eed 100644 ---- a/lib/handler/status/durations.c -+++ b/lib/handler/status/durations.c -@@ -203,5 +203,5 @@ void h2o_duration_stats_register(h2o_globalconf_t *conf) - } - - h2o_status_handler_t durations_status_handler = { -- {H2O_STRLIT("durations")}, durations_status_init, durations_status_per_thread, durations_status_final, -+ H2O_IOVEC_STRLIT("durations"), durations_status_init, durations_status_per_thread, durations_status_final, - }; -diff --git a/lib/handler/status/events.c b/lib/handler/status/events.c -index e6ed0b7c6..64fb6546f 100644 ---- a/lib/handler/status/events.c -+++ b/lib/handler/status/events.c -@@ -108,5 +108,5 @@ static h2o_iovec_t events_status_final(void *priv, h2o_globalconf_t *gconf, h2o_ - } - - h2o_status_handler_t events_status_handler = { -- {H2O_STRLIT("events")}, events_status_init, events_status_per_thread, events_status_final, -+ H2O_IOVEC_STRLIT("events"), events_status_init, events_status_per_thread, events_status_final, - }; -diff --git a/lib/handler/status/requests.c b/lib/handler/status/requests.c -index 4854e4a1f..56c28c36c 100644 ---- a/lib/handler/status/requests.c -+++ b/lib/handler/status/requests.c -@@ -123,7 +123,7 @@ static void *requests_status_init(void) - /* log format compilation error is an internal logic flaw, therefore we need not send the details to the client */ - fprintf(stderr, "[lib/handler/status/requests.c] failed to compile log format: %s", errbuf); - -- rsc->req_data = (h2o_iovec_t){NULL}; -+ rsc->req_data = (h2o_iovec_t)H2O_IOVEC_NULL; - pthread_mutex_init(&rsc->mutex, NULL); - - return rsc; -@@ -131,7 +131,7 @@ static void *requests_status_init(void) - - static h2o_iovec_t requests_status_final(void *priv, h2o_globalconf_t *gconf, h2o_req_t *req) - { -- h2o_iovec_t ret = {NULL}; -+ h2o_iovec_t ret = H2O_IOVEC_NULL; - struct st_requests_status_ctx_t *rsc = priv; - - if (rsc->logconf != NULL) { -@@ -147,5 +147,5 @@ static h2o_iovec_t requests_status_final(void *priv, h2o_globalconf_t *gconf, h2 - } - - h2o_status_handler_t requests_status_handler = { -- {H2O_STRLIT("requests")}, requests_status_init, requests_status_per_thread, requests_status_final, -+ H2O_IOVEC_STRLIT("requests"), requests_status_init, requests_status_per_thread, requests_status_final, - }; -diff --git a/lib/http1.c b/lib/http1.c -index 98c4e55ab..b765b8aae 100644 ---- a/lib/http1.c -+++ b/lib/http1.c -@@ -323,7 +323,7 @@ static ssize_t fixup_request(struct st_h2o_http1_conn_t *conn, struct phr_header - h2o_iovec_t *expect) - { - ssize_t entity_header_index; -- h2o_iovec_t connection = {NULL, 0}, host = {NULL, 0}, upgrade = {NULL, 0}; -+ h2o_iovec_t connection = H2O_IOVEC_NULL, host = H2O_IOVEC_NULL, upgrade = H2O_IOVEC_NULL; - - expect->base = NULL; - expect->len = 0; -@@ -406,12 +406,12 @@ static void send_bad_request_on_complete(h2o_socket_t *sock, const char *err) - - static void send_bad_request(struct st_h2o_http1_conn_t *conn) - { -- const static h2o_iovec_t resp = {H2O_STRLIT("HTTP/1.1 400 Bad Request\r\n" -+ const static h2o_iovec_t resp = H2O_IOVEC_STRLIT("HTTP/1.1 400 Bad Request\r\n" - "Content-Type: text/plain; charset=utf-8\r\n" - "Connection: close\r\n" - "Content-Length: 11\r\n" - "\r\n" -- "Bad Request")}; -+ "Bad Request"); - - assert(conn->req.version == 0 && "request has not been parsed successfully"); - assert(conn->req.http1_is_persistent == 0); -@@ -421,7 +421,7 @@ static void send_bad_request(struct st_h2o_http1_conn_t *conn) - - static void handle_incoming_request(struct st_h2o_http1_conn_t *conn) - { -- size_t inreqlen = conn->sock->input->size < H2O_MAX_REQLEN ? conn->sock->input->size : H2O_MAX_REQLEN; -+ size_t methodlen, pathlen, inreqlen = conn->sock->input->size < H2O_MAX_REQLEN ? conn->sock->input->size : H2O_MAX_REQLEN; - int reqlen, minor_version; - struct phr_header headers[H2O_MAX_HEADERS]; - size_t num_headers = H2O_MAX_HEADERS; -@@ -433,8 +433,10 @@ static void handle_incoming_request(struct st_h2o_http1_conn_t *conn) - conn->req.timestamps.request_begin_at = *h2o_get_timestamp(conn->super.ctx, NULL, NULL); - - reqlen = phr_parse_request(conn->sock->input->bytes, inreqlen, (const char **)&conn->req.input.method.base, -- &conn->req.input.method.len, (const char **)&conn->req.input.path.base, &conn->req.input.path.len, -+ &methodlen, (const char **)&conn->req.input.path.base, &pathlen, - &minor_version, headers, &num_headers, conn->_prevreqlen); -+ conn->req.input.method.len = methodlen; -+ conn->req.input.path.len = pathlen; - conn->_prevreqlen = inreqlen; - - switch (reqlen) { -@@ -455,7 +457,7 @@ static void handle_incoming_request(struct st_h2o_http1_conn_t *conn) - return; - } - if (expect.base != NULL) { -- static const h2o_iovec_t res = {H2O_STRLIT("HTTP/1.1 100 Continue\r\n\r\n")}; -+ static const h2o_iovec_t res = H2O_IOVEC_STRLIT("HTTP/1.1 100 Continue\r\n\r\n"); - h2o_socket_write(conn->sock, (void *)&res, 1, on_continue_sent); - /* processing of the incoming entity is postponed until the 100 response is sent */ - h2o_socket_read_stop(conn->sock); -@@ -477,7 +479,7 @@ static void handle_incoming_request(struct st_h2o_http1_conn_t *conn) - /* upgrade to HTTP/2 if the request starts with: PRI * HTTP/2 */ - if (conn->super.ctx->globalconf->http1.upgrade_to_http2) { - /* should check up to the first octet that phr_parse_request returns an error */ -- static const h2o_iovec_t HTTP2_SIG = {H2O_STRLIT("PRI * HTTP/2")}; -+ static const h2o_iovec_t HTTP2_SIG = H2O_IOVEC_STRLIT("PRI * HTTP/2"); - if (conn->sock->input->size >= HTTP2_SIG.len && memcmp(conn->sock->input->bytes, HTTP2_SIG.base, HTTP2_SIG.len) == 0) { - h2o_accept_ctx_t accept_ctx = {conn->super.ctx, conn->super.hosts}; - h2o_socket_t *sock = conn->sock; -@@ -638,7 +640,7 @@ static size_t flatten_headers(char *buf, h2o_req_t *req, const char *connection) - * - https://www.igvita.com/2013/05/01/deploying-webp-via-accept-content-negotiation/ - */ - if (is_msie(req)) { -- static h2o_header_t cache_control_private = {&H2O_TOKEN_CACHE_CONTROL->buf, NULL, {H2O_STRLIT("private")}}; -+ static h2o_header_t cache_control_private = {&H2O_TOKEN_CACHE_CONTROL->buf, NULL, H2O_IOVEC_STRLIT("private")}; - header = &cache_control_private; - } - } -@@ -660,11 +662,11 @@ static size_t flatten_headers(char *buf, h2o_req_t *req, const char *connection) - - static void proceed_pull(struct st_h2o_http1_conn_t *conn, size_t nfilled) - { -- h2o_iovec_t buf = {conn->_ostr_final.pull.buf, nfilled}; -+ h2o_iovec_t buf = h2o_iovec_init(conn->_ostr_final.pull.buf, nfilled); - h2o_send_state_t send_state; - - if (buf.len < MAX_PULL_BUF_SZ) { -- h2o_iovec_t cbuf = {buf.base + buf.len, MAX_PULL_BUF_SZ - buf.len}; -+ h2o_iovec_t cbuf = h2o_iovec_init(buf.base + buf.len, MAX_PULL_BUF_SZ - buf.len); - send_state = h2o_pull(&conn->req, conn->_ostr_final.pull.cb, &cbuf); - if (send_state == H2O_SEND_STATE_ERROR) { - conn->req.http1_is_persistent = 0; -diff --git a/lib/http2/casper.c b/lib/http2/casper.c -index 56e00d71f..e5c9a0ed7 100644 ---- a/lib/http2/casper.c -+++ b/lib/http2/casper.c -@@ -56,7 +56,7 @@ h2o_http2_casper_t *h2o_http2_casper_create(unsigned capacity_bits, unsigned rem - memset(&casper->keys, 0, sizeof(casper->keys)); - casper->capacity_bits = capacity_bits; - casper->remainder_bits = remainder_bits; -- casper->cookie_cache = (h2o_iovec_t){NULL}; -+ casper->cookie_cache = (h2o_iovec_t)H2O_IOVEC_NULL; - - return casper; - } -@@ -89,7 +89,7 @@ int h2o_http2_casper_lookup(h2o_http2_casper_t *casper, const char *path, size_t - - /* we need to set a new value */ - free(casper->cookie_cache.base); -- casper->cookie_cache = (h2o_iovec_t){NULL}; -+ casper->cookie_cache = (h2o_iovec_t)H2O_IOVEC_NULL; - h2o_vector_reserve(NULL, &casper->keys, casper->keys.size + 1); - memmove(casper->keys.entries + i + 1, casper->keys.entries + i, (casper->keys.size - i) * sizeof(casper->keys.entries[0])); - ++casper->keys.size; -@@ -99,7 +99,7 @@ int h2o_http2_casper_lookup(h2o_http2_casper_t *casper, const char *path, size_t - - void h2o_http2_casper_consume_cookie(h2o_http2_casper_t *casper, const char *cookie, size_t cookie_len) - { -- h2o_iovec_t binary = {NULL}; -+ h2o_iovec_t binary = H2O_IOVEC_NULL; - uint64_t tiny_keys_buf[128], *keys = tiny_keys_buf; - - /* check the name of the cookie */ -@@ -177,7 +177,7 @@ h2o_iovec_t h2o_http2_casper_get_cookie(h2o_http2_casper_t *casper) - return casper->cookie_cache; - - if (casper->keys.size == 0) -- return (h2o_iovec_t){NULL}; -+ return (h2o_iovec_t)H2O_IOVEC_NULL; - - /* encode as binary */ - char tiny_bin_buf[128], *bin_buf = tiny_bin_buf; -diff --git a/lib/http2/connection.c b/lib/http2/connection.c -index 2f8cad620..c7ba5d6b2 100644 ---- a/lib/http2/connection.c -+++ b/lib/http2/connection.c -@@ -27,7 +27,7 @@ - #include "h2o/http2.h" - #include "h2o/http2_internal.h" - --static const h2o_iovec_t CONNECTION_PREFACE = {H2O_STRLIT("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n")}; -+static const h2o_iovec_t CONNECTION_PREFACE = H2O_IOVEC_STRLIT("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"); - - const h2o_http2_priority_t h2o_http2_default_priority = { - 0, /* exclusive */ -@@ -43,7 +43,7 @@ const h2o_http2_settings_t H2O_HTTP2_SETTINGS_HOST = { - 16384 /* max_frame_size */ - }; - --static const h2o_iovec_t SETTINGS_HOST_BIN = {H2O_STRLIT("\x00\x00\x0c" /* frame size */ -+static const h2o_iovec_t SETTINGS_HOST_BIN = H2O_IOVEC_STRLIT("\x00\x00\x0c"/* frame size */ - "\x04" /* settings frame */ - "\x00" /* no flags */ - "\x00\x00\x00\x00" /* stream id */ -@@ -51,7 +51,7 @@ static const h2o_iovec_t SETTINGS_HOST_BIN = {H2O_STRLIT("\x00\x00\x0c" /* f - "\x00\x00\x00\x64" /* max_concurrent_streams = 100 */ - "\x00\x04" - "\x01\x00\x00\x00" /* initial_window_size = 16777216 */ -- )}; -+ ); - - static __thread h2o_buffer_prototype_t wbuf_buffer_prototype = {{16}, {H2O_HTTP2_DEFAULT_OUTBUF_SIZE}}; - -@@ -103,7 +103,7 @@ static void graceful_shutdown_resend_goaway(h2o_timeout_entry_t *entry) - for (node = ctx->http2._conns.next; node != &ctx->http2._conns; node = node->next) { - h2o_http2_conn_t *conn = H2O_STRUCT_FROM_MEMBER(h2o_http2_conn_t, _conns, node); - if (conn->state < H2O_HTTP2_CONN_STATE_HALF_CLOSED) { -- enqueue_goaway(conn, H2O_HTTP2_ERROR_NONE, (h2o_iovec_t){NULL}); -+ enqueue_goaway(conn, H2O_HTTP2_ERROR_NONE, (h2o_iovec_t)H2O_IOVEC_NULL); - do_close_stragglers = 1; - } - } -@@ -135,7 +135,7 @@ static void initiate_graceful_shutdown(h2o_context_t *ctx) - h2o_http2_conn_t *conn = H2O_STRUCT_FROM_MEMBER(h2o_http2_conn_t, _conns, node); - if (conn->state < H2O_HTTP2_CONN_STATE_HALF_CLOSED) { - h2o_http2_encode_goaway_frame(&conn->_write.buf, INT32_MAX, H2O_HTTP2_ERROR_NONE, -- (h2o_iovec_t){H2O_STRLIT("graceful shutdown")}); -+ (h2o_iovec_t)H2O_IOVEC_STRLIT("graceful shutdown")); - h2o_http2_conn_request_write(conn); - } - } -@@ -876,7 +876,7 @@ static int parse_input(h2o_http2_conn_t *conn) - } else if (ret < 0) { - if (ret != H2O_HTTP2_ERROR_PROTOCOL_CLOSE_IMMEDIATELY) { - enqueue_goaway(conn, (int)ret, -- err_desc != NULL ? (h2o_iovec_t){(char *)err_desc, strlen(err_desc)} : (h2o_iovec_t){NULL}); -+ err_desc != NULL ? h2o_iovec_init((char *)err_desc, strlen(err_desc)) : (h2o_iovec_t)H2O_IOVEC_NULL); - } - return close_connection(conn); - } -@@ -1046,7 +1046,7 @@ void do_emit_writereq(h2o_http2_conn_t *conn) - - if (conn->_write.buf->size != 0) { - /* write and wait for completion */ -- h2o_iovec_t buf = {conn->_write.buf->bytes, conn->_write.buf->size}; -+ h2o_iovec_t buf = h2o_iovec_init(conn->_write.buf->bytes, conn->_write.buf->size); - h2o_socket_write(conn->sock, &buf, 1, on_write_complete); - conn->_write.buf_in_flight = conn->_write.buf; - h2o_buffer_init(&conn->_write.buf, &wbuf_buffer_prototype); -@@ -1290,7 +1290,7 @@ static void push_path(h2o_req_t *src_req, const char *abspath, size_t abspath_le - h2o_http2_stream_prepare_for_request(conn, stream); - - /* setup request */ -- stream->req.input.method = (h2o_iovec_t){H2O_STRLIT("GET")}; -+ stream->req.input.method = (h2o_iovec_t)H2O_IOVEC_STRLIT("GET"); - stream->req.input.scheme = src_stream->req.input.scheme; - stream->req.input.authority = - h2o_strdup(&stream->req.pool, src_stream->req.input.authority.base, src_stream->req.input.authority.len); -diff --git a/lib/http2/hpack.c b/lib/http2/hpack.c -index 4adb15cd7..f4e4679e2 100644 ---- a/lib/http2/hpack.c -+++ b/lib/http2/hpack.c -@@ -902,7 +902,7 @@ void h2o_hpack_flatten_response(h2o_buffer_t **buf, h2o_hpack_header_table_t *he - if (server_name->len) { - dst = encode_header(header_table, dst, &H2O_TOKEN_SERVER->buf, server_name); - } -- h2o_iovec_t date_value = {ts->str->rfc1123, H2O_TIMESTR_RFC1123_LEN}; -+ h2o_iovec_t date_value = h2o_iovec_init(ts->str->rfc1123, H2O_TIMESTR_RFC1123_LEN); - dst = encode_header(header_table, dst, &H2O_TOKEN_DATE->buf, &date_value); - #endif - size_t i; -diff --git a/lib/http2/hpack_static_table.h b/lib/http2/hpack_static_table.h -index 4c1243103..fae748537 100644 ---- a/lib/http2/hpack_static_table.h -+++ b/lib/http2/hpack_static_table.h -@@ -23,65 +23,65 @@ - /* automatically generated by tokens.pl */ - - static const struct st_h2o_hpack_static_table_entry_t h2o_hpack_static_table[61] = { -- { H2O_TOKEN_AUTHORITY, { H2O_STRLIT("") } }, -- { H2O_TOKEN_METHOD, { H2O_STRLIT("GET") } }, -- { H2O_TOKEN_METHOD, { H2O_STRLIT("POST") } }, -- { H2O_TOKEN_PATH, { H2O_STRLIT("/") } }, -- { H2O_TOKEN_PATH, { H2O_STRLIT("/index.html") } }, -- { H2O_TOKEN_SCHEME, { H2O_STRLIT("http") } }, -- { H2O_TOKEN_SCHEME, { H2O_STRLIT("https") } }, -- { H2O_TOKEN_STATUS, { H2O_STRLIT("200") } }, -- { H2O_TOKEN_STATUS, { H2O_STRLIT("204") } }, -- { H2O_TOKEN_STATUS, { H2O_STRLIT("206") } }, -- { H2O_TOKEN_STATUS, { H2O_STRLIT("304") } }, -- { H2O_TOKEN_STATUS, { H2O_STRLIT("400") } }, -- { H2O_TOKEN_STATUS, { H2O_STRLIT("404") } }, -- { H2O_TOKEN_STATUS, { H2O_STRLIT("500") } }, -- { H2O_TOKEN_ACCEPT_CHARSET, { H2O_STRLIT("") } }, -- { H2O_TOKEN_ACCEPT_ENCODING, { H2O_STRLIT("gzip, deflate") } }, -- { H2O_TOKEN_ACCEPT_LANGUAGE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_ACCEPT_RANGES, { H2O_STRLIT("") } }, -- { H2O_TOKEN_ACCEPT, { H2O_STRLIT("") } }, -- { H2O_TOKEN_ACCESS_CONTROL_ALLOW_ORIGIN, { H2O_STRLIT("") } }, -- { H2O_TOKEN_AGE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_ALLOW, { H2O_STRLIT("") } }, -- { H2O_TOKEN_AUTHORIZATION, { H2O_STRLIT("") } }, -- { H2O_TOKEN_CACHE_CONTROL, { H2O_STRLIT("") } }, -- { H2O_TOKEN_CONTENT_DISPOSITION, { H2O_STRLIT("") } }, -- { H2O_TOKEN_CONTENT_ENCODING, { H2O_STRLIT("") } }, -- { H2O_TOKEN_CONTENT_LANGUAGE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_CONTENT_LENGTH, { H2O_STRLIT("") } }, -- { H2O_TOKEN_CONTENT_LOCATION, { H2O_STRLIT("") } }, -- { H2O_TOKEN_CONTENT_RANGE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_CONTENT_TYPE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_COOKIE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_DATE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_ETAG, { H2O_STRLIT("") } }, -- { H2O_TOKEN_EXPECT, { H2O_STRLIT("") } }, -- { H2O_TOKEN_EXPIRES, { H2O_STRLIT("") } }, -- { H2O_TOKEN_FROM, { H2O_STRLIT("") } }, -- { H2O_TOKEN_HOST, { H2O_STRLIT("") } }, -- { H2O_TOKEN_IF_MATCH, { H2O_STRLIT("") } }, -- { H2O_TOKEN_IF_MODIFIED_SINCE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_IF_NONE_MATCH, { H2O_STRLIT("") } }, -- { H2O_TOKEN_IF_RANGE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_IF_UNMODIFIED_SINCE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_LAST_MODIFIED, { H2O_STRLIT("") } }, -- { H2O_TOKEN_LINK, { H2O_STRLIT("") } }, -- { H2O_TOKEN_LOCATION, { H2O_STRLIT("") } }, -- { H2O_TOKEN_MAX_FORWARDS, { H2O_STRLIT("") } }, -- { H2O_TOKEN_PROXY_AUTHENTICATE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_PROXY_AUTHORIZATION, { H2O_STRLIT("") } }, -- { H2O_TOKEN_RANGE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_REFERER, { H2O_STRLIT("") } }, -- { H2O_TOKEN_REFRESH, { H2O_STRLIT("") } }, -- { H2O_TOKEN_RETRY_AFTER, { H2O_STRLIT("") } }, -- { H2O_TOKEN_SERVER, { H2O_STRLIT("") } }, -- { H2O_TOKEN_SET_COOKIE, { H2O_STRLIT("") } }, -- { H2O_TOKEN_STRICT_TRANSPORT_SECURITY, { H2O_STRLIT("") } }, -- { H2O_TOKEN_TRANSFER_ENCODING, { H2O_STRLIT("") } }, -- { H2O_TOKEN_USER_AGENT, { H2O_STRLIT("") } }, -- { H2O_TOKEN_VARY, { H2O_STRLIT("") } }, -- { H2O_TOKEN_VIA, { H2O_STRLIT("") } }, -- { H2O_TOKEN_WWW_AUTHENTICATE, { H2O_STRLIT("") } } -+ { H2O_TOKEN_AUTHORITY, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_METHOD, H2O_IOVEC_STRLIT("GET") }, -+ { H2O_TOKEN_METHOD, H2O_IOVEC_STRLIT("POST") }, -+ { H2O_TOKEN_PATH, H2O_IOVEC_STRLIT("/") }, -+ { H2O_TOKEN_PATH, H2O_IOVEC_STRLIT("/index.html") }, -+ { H2O_TOKEN_SCHEME, H2O_IOVEC_STRLIT("http") }, -+ { H2O_TOKEN_SCHEME, H2O_IOVEC_STRLIT("https") }, -+ { H2O_TOKEN_STATUS, H2O_IOVEC_STRLIT("200") }, -+ { H2O_TOKEN_STATUS, H2O_IOVEC_STRLIT("204") }, -+ { H2O_TOKEN_STATUS, H2O_IOVEC_STRLIT("206") }, -+ { H2O_TOKEN_STATUS, H2O_IOVEC_STRLIT("304") }, -+ { H2O_TOKEN_STATUS, H2O_IOVEC_STRLIT("400") }, -+ { H2O_TOKEN_STATUS, H2O_IOVEC_STRLIT("404") }, -+ { H2O_TOKEN_STATUS, H2O_IOVEC_STRLIT("500") }, -+ { H2O_TOKEN_ACCEPT_CHARSET, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_ACCEPT_ENCODING, H2O_IOVEC_STRLIT("gzip, deflate") }, -+ { H2O_TOKEN_ACCEPT_LANGUAGE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_ACCEPT_RANGES, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_ACCEPT, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_ACCESS_CONTROL_ALLOW_ORIGIN, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_AGE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_ALLOW, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_AUTHORIZATION, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_CACHE_CONTROL, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_CONTENT_DISPOSITION, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_CONTENT_ENCODING, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_CONTENT_LANGUAGE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_CONTENT_LENGTH, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_CONTENT_LOCATION, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_CONTENT_RANGE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_CONTENT_TYPE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_COOKIE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_DATE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_ETAG, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_EXPECT, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_EXPIRES, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_FROM, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_HOST, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_IF_MATCH, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_IF_MODIFIED_SINCE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_IF_NONE_MATCH, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_IF_RANGE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_IF_UNMODIFIED_SINCE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_LAST_MODIFIED, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_LINK, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_LOCATION, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_MAX_FORWARDS, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_PROXY_AUTHENTICATE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_PROXY_AUTHORIZATION, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_RANGE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_REFERER, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_REFRESH, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_RETRY_AFTER, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_SERVER, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_SET_COOKIE, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_STRICT_TRANSPORT_SECURITY, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_TRANSFER_ENCODING, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_USER_AGENT, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_VARY, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_VIA, H2O_IOVEC_STRLIT("") }, -+ { H2O_TOKEN_WWW_AUTHENTICATE, H2O_IOVEC_STRLIT("") } - }; -diff --git a/lib/http2/http2_debug_state.c b/lib/http2/http2_debug_state.c -index 3ef8de37f..e9245ddcd 100644 ---- a/lib/http2/http2_debug_state.c -+++ b/lib/http2/http2_debug_state.c -@@ -62,7 +62,7 @@ static const char *get_debug_state_string(h2o_http2_stream_t *stream) - return NULL; - } - --__attribute__((format(printf, 3, 4))) static void append_chunk(h2o_mem_pool_t *pool, h2o_iovec_vector_t *chunks, const char *fmt, -+__attribute__((format(gnu_printf, 3, 4))) static void append_chunk(h2o_mem_pool_t *pool, h2o_iovec_vector_t *chunks, const char *fmt, - ...) - { - va_list args; -diff --git a/misc/tokens.pl b/misc/tokens.pl -index 1fcf173fa..1407f6681 100755 ---- a/misc/tokens.pl -+++ b/misc/tokens.pl -@@ -94,7 +94,7 @@ print $fh render_mt(<< 'EOT', \@tokens, LICENSE)->as_string; - /* DO NOT EDIT! generated by tokens.pl */ - h2o_token_t h2o__tokens[] = { - ? for my $i (0..$#$tokens) { -- { { H2O_STRLIT("[$i][0] ?>") }, [$i][$_] } (1..$#{$tokens->[$i]})) ?> } -+ { H2O_IOVEC_STRLIT("[$i][0] ?>"), [$i][$_] } (1..$#{$tokens->[$i]})) ?> } - ? } - }; - size_t h2o__num_tokens = ; -@@ -135,7 +135,7 @@ print $fh render_mt(<< 'EOT', \@hpack, LICENSE)->as_string; - - static const struct st_h2o_hpack_static_table_entry_t h2o_hpack_static_table[] = { - ? for my $i (0..$#$entries) { -- { [$i][0]) ?>, { H2O_STRLIT("[$i][1] || "" ?>") } } -+ { [$i][0]) ?>, H2O_IOVEC_STRLIT("[$i][1] || "" ?>") } - ? } - }; - EOT -diff --git a/src/main.c b/src/main.c -index af0867f29..7c801755d 100644 ---- a/src/main.c -+++ b/src/main.c -@@ -43,7 +43,9 @@ - #include - #include - #include -+#ifndef H2O_NO_UNIX_SOCKETS - #include -+#endif - #include - #include - #include -@@ -886,6 +888,7 @@ Found: - return conf.server_starter.fds[i]; - } - -+#ifndef H2O_NO_UNIX_SOCKETS - static int open_unix_listener(h2o_configurator_command_t *cmd, yoml_t *node, struct sockaddr_un *sa) - { - struct stat st; -@@ -948,6 +951,7 @@ ErrorExit: - close(fd); - return -1; - } -+#endif - - static int open_tcp_listener(h2o_configurator_command_t *cmd, yoml_t *node, const char *hostname, const char *servname, int domain, - int type, int protocol, struct sockaddr *addr, socklen_t addrlen) -@@ -1067,6 +1071,7 @@ static int on_config_listen(h2o_configurator_command_t *cmd, h2o_configurator_co - return -1; - } - -+ #ifndef H2O_NO_UNIX_SOCKETS - if (strcmp(type, "unix") == 0) { - - /* unix socket */ -@@ -1110,7 +1115,9 @@ static int on_config_listen(h2o_configurator_command_t *cmd, h2o_configurator_co - if (listener->hosts != NULL && ctx->hostconf != NULL) - h2o_append_to_null_terminated_list((void *)&listener->hosts, ctx->hostconf); - -- } else if (strcmp(type, "tcp") == 0) { -+ } else -+ #endif -+ if (strcmp(type, "tcp") == 0) { - - /* TCP socket */ - struct addrinfo hints, *res, *ai; -@@ -1712,11 +1719,13 @@ static char **build_server_starter_argv(const char *h2o_cmd, const char *config_ - sprintf(newarg, "--port=%s:%s", host, serv); - } - } break; -+ #ifndef H2O_NO_UNIX_SOCKETS - case AF_UNIX: { - struct sockaddr_un *sa = (void *)&conf.listeners[i]->addr; - newarg = h2o_mem_alloc(sizeof("--path=") + strlen(sa->sun_path)); - sprintf(newarg, "--path=%s", sa->sun_path); - } break; -+ #endif - } - h2o_vector_reserve(NULL, &args, args.size + 1); - args.entries[args.size++] = newarg; diff --git a/pkg/urbit/compat/mingw/lmdb.patch b/pkg/urbit/compat/mingw/lmdb.patch deleted file mode 100644 index e023a7133..000000000 --- a/pkg/urbit/compat/mingw/lmdb.patch +++ /dev/null @@ -1,74 +0,0 @@ -diff --git a/mdb.c b/mdb.c ---- a/mdb.c -+++ b/mdb.c -@@ -1707,28 +1707,27 @@ static char *const mdb_errstr[] = { - "MDB_PROBLEM: Unexpected problem - txn should abort", - }; - --char * --mdb_strerror(int err) -+void -+mdb_logerror(FILE* f, int err, const char* fmt, ...) - { --#ifdef _WIN32 -- /** HACK: pad 4KB on stack over the buf. Return system msgs in buf. -- * This works as long as no function between the call to mdb_strerror -- * and the actual use of the message uses more than 4K of stack. -- */ --#define MSGSIZE 1024 --#define PADSIZE 4096 -- char buf[MSGSIZE+PADSIZE], *ptr = buf; --#endif -+ va_list ap; -+ va_start(ap, fmt); -+ vfprintf(f, fmt, ap); -+ va_end(ap); -+ - int i; - if (!err) -- return ("Successful return: 0"); -+ { -+ fprintf(stderr, ": %s\r\n", "Successful return: 0"); -+ return; -+ } - - if (err >= MDB_KEYEXIST && err <= MDB_LAST_ERRCODE) { - i = err - MDB_KEYEXIST; -- return mdb_errstr[i]; -+ fprintf(stderr, ": %s\r\n", mdb_errstr[i]); -+ return; - } - --#ifdef _WIN32 - /* These are the C-runtime error codes we use. The comment indicates - * their numeric value, and the Win32 error they would correspond to - * if the error actually came from a Win32 API. A major mess, we should -@@ -1742,18 +1741,20 @@ mdb_strerror(int err) - case EBUSY: /* 16, CURRENT_DIRECTORY */ - case EINVAL: /* 22, BAD_COMMAND */ - case ENOSPC: /* 28, OUT_OF_PAPER */ -- return strerror(err); -+ fprintf(stderr, ": %s\r\n", strerror(err)); - default: - ; - } -- buf[0] = 0; -- FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | -+ LPSTR ptr; -+ if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | -+ FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_IGNORE_INSERTS, -- NULL, err, 0, ptr, MSGSIZE, (va_list *)buf+MSGSIZE); -- return ptr; --#else -- return strerror(err); --#endif -+ NULL, err, 0, (LPSTR)&ptr, sizeof (LPSTR), NULL)) -+ { -+ fprintf(stderr, ": %s\r\n", ptr); -+ LocalFree(ptr); -+ } else -+ fprintf(stderr, ": <%d>\r\n", err); - } - - /** assert(3) variant in cursor context */ diff --git a/pkg/urbit/compat/mingw/mman.h b/pkg/urbit/compat/mingw/mman.h deleted file mode 100644 index 965fecfd8..000000000 --- a/pkg/urbit/compat/mingw/mman.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef _SYS_MMAN_H -#define _SYS_MMAN_H - -void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); -int munmap(void *addr, size_t length); -int msync(void *addr, size_t length, int flags); -int mprotect(void *addr, size_t len, int prot); - -#define PROT_NONE 0x00 /* No access. */ -#define PROT_READ 0x01 /* Pages can be read. */ -#define PROT_WRITE 0x02 /* Pages can be written. */ -#define PROT_EXEC 0x04 /* Pages can be executed. */ - -#define MAP_FILE 0x0001 /* Mapped from a file or device. */ -#define MAP_ANON 0x0002 /* Allocated from anonymous virtual memory. */ -#define MAP_TYPE 0x000f /* Mask for type field. */ -#define MAP_SHARED 0x0010 /* Share changes. */ -#define MAP_PRIVATE 0x0000 /* Changes private; copy pages on write. */ -#define MAP_FIXED 0x0100 /* Map address must be exactly as requested. */ -#define MAP_FAILED ((void *) -1) - -#define MS_ASYNC 1 /* Sync memory asynchronously. */ -#define MS_SYNC 0 /* Synchronous memory sync. */ -#define MS_INVALIDATE 2 /* Invalidate the caches. */ - -#endif//_SYS_MMAN_H diff --git a/pkg/urbit/compat/mingw/murmur3.patch b/pkg/urbit/compat/mingw/murmur3.patch deleted file mode 100644 index cd83e9fdd..000000000 --- a/pkg/urbit/compat/mingw/murmur3.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/makefile b/makefile ---- a/makefile -+++ b/makefile -@@ -12,5 +12,9 @@ shared: murmur3.c murmur3.h - $(CC) -fPIC -O3 -c murmur3.c - $(CC) -shared -Wl,--export-dynamic murmur3.o -o libmurmur3.so - -+static: murmur3.c murmur3.h -+ $(CC) -fPIC -O3 -c murmur3.c -+ $(AR) rcs libmurmur3.a murmur3.o -+ - clean: - rm -rf example *.o *.so diff --git a/pkg/urbit/compat/mingw/ptty.c b/pkg/urbit/compat/mingw/ptty.c deleted file mode 100644 index 7ad2962c4..000000000 --- a/pkg/urbit/compat/mingw/ptty.c +++ /dev/null @@ -1,152 +0,0 @@ -/* compat/mingw/ptty.c -** -*/ -#include "all.h" -#include "vere/vere.h" -#include - -/* _ptty_get_type(): detects tty type. -*/ -static DWORD -_ptty_get_type(int fd) -{ - HANDLE h = (HANDLE)_get_osfhandle(fd); - if (h == INVALID_HANDLE_VALUE) - return FILE_TYPE_UNKNOWN; - - DWORD t = GetFileType(h); - if (t != FILE_TYPE_PIPE) - return t ; - - // https://github.com/fusesource/jansi-native/commit/461068c67a38647d2890e96250636fc0117074f5 - ULONG result; - BYTE buffer[1024]; - POBJECT_NAME_INFORMATION nameinfo = (POBJECT_NAME_INFORMATION) buffer; - PWSTR name; - - /* get pipe name */ - if (!NT_SUCCESS(NtQueryObject(h, ObjectNameInformation, buffer, sizeof(buffer) - sizeof(WCHAR), &result))) - return FILE_TYPE_UNKNOWN; - - name = nameinfo->Name.Buffer; - name[nameinfo->Name.Length] = 0; - - // check for popular terminal emulators - // that use named pipes to communicate with subprocesses - if (wcsstr(name, L"\\ConEmu") || - (wcsstr(name, L"msys-") || wcsstr(name, L"cygwin-")) && wcsstr(name, L"-pty")) - return FILE_TYPE_PIPE; - - return FILE_TYPE_UNKNOWN; -} - -/* _ttyf_nop(): stub function. -*/ -static c3_o -_ttyf_nop(u3_utty* uty_u) -{ - return c3y; -} - -/* _ttyf_start_raw_input(): ends raw input on the tty. -*/ -static c3_o -_ttyf_set_normal(u3_utty* uty_u) -{ - c3_i e; - if ( 0 != (e = uv_tty_set_mode(&uty_u->pin_u.tty_u, UV_TTY_MODE_NORMAL)) ) { - fprintf(stderr, "uv_tty_set_mode(UV_TTY_MODE_NORMAL) -> %d\r\n", e); - return c3n; - } - return c3y; -} - -/* _ttyf_start_raw_input(): sets the tty to raw input. -*/ -static c3_o -_ttyf_set_raw(u3_utty* uty_u) -{ - c3_i e; - if ( 0 != (e = uv_tty_set_mode(&uty_u->pin_u.tty_u, UV_TTY_MODE_RAW)) ) { - fprintf(stderr, "uv_tty_set_mode(UV_TTY_MODE_RAW) -> %d\r\n", e); - return c3n; - } - return c3y; -} - -/* _ttyf_get_winsize(): gets the tty window size. -*/ -static c3_o -_ttyf_get_winsize(u3_utty* uty_u, c3_l* col_l, c3_l* row_l) -{ - c3_i col_i, row_i; - if ( 0 != uv_tty_get_winsize(&uty_u->pop_u.tty_u, &col_i, &row_i) ) { - return c3n; - } - - *col_l = col_i; - *row_l = row_i; - return c3y; -} - -/* _ttyf_get_winsize(): gets the tty window size. -*/ -static c3_o -_ttyf_nop_winsize(u3_utty* uty_u, c3_l* col_l, c3_l* row_l) -{ - return c3n; -} - -/* u3_ptty_init(): initialize platform-specific tty. -*/ -u3_utty* -u3_ptty_init(uv_loop_t* lup_u, const c3_c** err_c) -{ - DWORD pip_l = _ptty_get_type(0); - DWORD pop_l = _ptty_get_type(1); - if ( pip_l == FILE_TYPE_UNKNOWN || pop_l == FILE_TYPE_UNKNOWN) { - *err_c = "not a tty"; - return NULL; - } - - if ( pip_l != pop_l ) { - *err_c = "partly redirected"; - return NULL; - } - - c3_i e; - u3_utty* uty_u = c3_calloc(sizeof(u3_utty)); - if ( pip_l == FILE_TYPE_CHAR ) { - if ( 0 == (e = uv_tty_init(lup_u, &uty_u->pin_u.tty_u, 0, 0)) && - 0 == (e = uv_tty_init(lup_u, &uty_u->pop_u.tty_u, 1, 0)) ) - { - SetConsoleOutputCP(CP_UTF8); - uty_u->sta_f = _ttyf_set_raw; - uty_u->sto_f = _ttyf_set_normal; - uty_u->wsz_f = _ttyf_get_winsize; - } - } else { - if ( 0 == (e = uv_pipe_init(lup_u, &uty_u->pin_u.pip_u, 0)) && - 0 == (e = uv_pipe_init(lup_u, &uty_u->pop_u.pip_u, 0)) && - 0 == (e = uv_pipe_open(&uty_u->pin_u.pip_u, 0)) && - 0 == (e = uv_pipe_open(&uty_u->pop_u.pip_u, 1)) ) - { - fprintf(stderr, "vere: running interactive in a terminal emulator is experimental\r\n" - " use -t to disable interactivity or use native Windows console\r\n") ; - uty_u->sta_f = _ttyf_nop; - uty_u->sto_f = _ttyf_nop; - uty_u->wsz_f = _ttyf_nop_winsize; - } - } - - if ( e ) { - *err_c = uv_strerror(e); - c3_free(uty_u); - return NULL; - } - - uty_u->fid_i = 1; - uty_u->hij_f = _ttyf_nop; - uty_u->loj_f = _ttyf_nop; - return uty_u; -} diff --git a/pkg/urbit/compat/mingw/rsignal.c b/pkg/urbit/compat/mingw/rsignal.c deleted file mode 100644 index b49dff515..000000000 --- a/pkg/urbit/compat/mingw/rsignal.c +++ /dev/null @@ -1,167 +0,0 @@ -#include "all.h" -#include "rsignal.h" -#include - -int err_win_to_posix(DWORD winerr); - -// The current implementation of rsignal_ is single-threaded, -// but it can be extended to multi-threaded by replacing these -// static variables with a thread id-based hash map. -// -static __p_sig_fn_t _fns[SIG_COUNT]; -static volatile DWORD _tid; -static HANDLE _hvt; - -void rsignal_install_handler(int sig, __p_sig_fn_t fn) -{ - if (sig < 0 || sig >= SIG_COUNT) - return; - - DWORD newtid = GetCurrentThreadId(); - DWORD oldtid = InterlockedExchange(&_tid, newtid); - if (oldtid != 0 && oldtid != newtid) { - fprintf(stderr, "\r\nrsignal_install_handler: %u -> %u\r\n", oldtid, newtid); - return; - } - - __p_sig_fn_t oldfn = InterlockedExchangePointer((PVOID*)&_fns[sig], fn); - if (fn != 0 && oldfn != 0 && oldfn != fn) { - fprintf(stderr, "\r\nrsignal_install_handler: %p -> %p\r\n", oldfn, fn); - } -} - -void rsignal_deinstall_handler(int sig) -{ - rsignal_install_handler(sig, 0); -} - -void rsignal_raise(int sig) -{ - if (sig < 0 || sig >= SIG_COUNT) - return; - - __p_sig_fn_t oldfn = InterlockedExchangePointer((PVOID*)&_fns[sig], 0); - if (oldfn == 0) - return; - - if (_tid == GetCurrentThreadId()) { - oldfn(sig); - return; - } - - HANDLE hthread = OpenThread(THREAD_ALL_ACCESS, FALSE, _tid); - if (!hthread) { - fprintf(stderr, "\r\nrsignal_raise: OpenThread(%u): %d\r\n", _tid, GetLastError()); - return; - } - - if (SuspendThread(hthread) < 0) { - fprintf(stderr, "\r\nrsignal_raise: SuspendThread(%u): %d\r\n", _tid, GetLastError()); - goto cleanup; - } - - oldfn(sig); - - if (!ResumeThread(hthread)) { - fprintf(stderr, "\r\nrsignal_raise: ResumeThread(%u): %d\r\n", _tid, GetLastError()); - - // abort because the main thread is stuck - abort(); - } - -cleanup: - CloseHandle(hthread); -} - -static void _rsignal_vt_cb(PVOID param, BOOLEAN timedOut) -{ - rsignal_raise(SIGVTALRM); -} - -int rsignal_setitimer(int type, struct itimerval *in, struct itimerval *out) -{ - if (in == 0) { - errno = EFAULT; - return -1; - } - - if (type != ITIMER_VIRTUAL || out != 0) { - errno = ENOTSUP; - return -1; - } - - if (_hvt != NULL) { - DeleteTimerQueueTimer(NULL, _hvt, NULL); - _hvt = NULL; - } - - if (timerisset(&in->it_value) && !CreateTimerQueueTimer(&_hvt, NULL, _rsignal_vt_cb, NULL, - in->it_value.tv_sec * 1000 + in->it_value.tv_usec / 1000, - in->it_interval.tv_sec * 1000 + in->it_interval.tv_usec / 1000, 0)) - { - errno = err_win_to_posix(GetLastError()); - return -1; - } else { - return 0; - } -} - -// direct import from ntdll.dll -extern DWORD64 __imp_KiUserExceptionDispatcher; - -static void _rsignal_longjmp(intptr_t* builtin_jb) -{ - __builtin_longjmp(builtin_jb, 1); -} - -void rsignal_post_longjmp(DWORD tid, intptr_t* builtin_jb) -{ - HANDLE hthread = OpenThread(THREAD_ALL_ACCESS, FALSE, tid); - if (!hthread) { - fprintf(stderr, "\r\nrsignal: OpenThread(%u): %d\r\n", tid, GetLastError()); - return; - } - - CONTEXT context; - context.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER; - if (!GetThreadContext(hthread, &context)) { - fprintf(stderr, "\r\nrsignal: GetThreadContext(%u): %d\r\n", tid, GetLastError()); - goto cleanup; - } - - // see if the thread is currently handling a structured exception - // if so, let the handler (usually the libsigsegv handler) finish - // and set up the the signal to run at the exception resume point - // otherwise, passing a parameter to fn is completely unreliable - // - DWORD64 kibase; - PRUNTIME_FUNCTION ki = RtlLookupFunctionEntry(__imp_KiUserExceptionDispatcher, &kibase, NULL); - CONTEXT c = context; - while (1) - { - DWORD64 base, frame; - PRUNTIME_FUNCTION f = RtlLookupFunctionEntry(c.Rip, &base, NULL); - if (!f) break; - if (f == ki) - { - // KiUserExceptionDispatcher has a "bare" frame - // with $rsp pointing to the CONTEXT structure - // - ((PCONTEXT)c.Rsp)->Rip = (DWORD64)_rsignal_longjmp; - ((PCONTEXT)c.Rsp)->Rcx = (DWORD64)builtin_jb; - goto cleanup; - } - PVOID handler_data; - RtlVirtualUnwind(0, base, c.Rip, f, &c, &handler_data, &frame, NULL); - } - - context.Rip = (DWORD64)_rsignal_longjmp; - context.Rcx = (DWORD64)builtin_jb; - if (!SetThreadContext(hthread, &context)) { - fprintf(stderr, "\r\nrsignal: SetThreadContext(%u): %d\r\n", tid, GetLastError()); - goto cleanup; - } - -cleanup: - CloseHandle(hthread); -} diff --git a/pkg/urbit/compat/mingw/rsignal.h b/pkg/urbit/compat/mingw/rsignal.h deleted file mode 100644 index 5af8e2dcd..000000000 --- a/pkg/urbit/compat/mingw/rsignal.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _RSIGNAL_H -#define _RSIGNAL_H - -typedef struct { - jmp_buf jb; - unsigned long tid; -} rsignal_jmpbuf; - -#define rsignal_setjmp(buf) (buf.tid = GetCurrentThreadId(), setjmp(buf.jb)) -#define rsignal_longjmp(buf, val) if (buf.tid != GetCurrentThreadId()) {buf.jb.retval = (val); rsignal_post_longjmp(buf.tid, buf.jb.buffer);} else longjmp(buf.jb, val) - -void rsignal_raise(int sig); -void rsignal_install_handler(int sig, __p_sig_fn_t fn); -void rsignal_deinstall_handler(int sig); -void rsignal_post_longjmp(unsigned long tid, intptr_t* builtin_jb); - -#define ITIMER_VIRTUAL 1 -struct itimerval { - struct timeval it_value, it_interval; -}; - -int rsignal_setitimer(int type, struct itimerval *in, struct itimerval *out); - -#endif//_RSIGNAL_H diff --git a/pkg/urbit/compat/mingw/seh_handler.c b/pkg/urbit/compat/mingw/seh_handler.c deleted file mode 100644 index ecf59f0a4..000000000 --- a/pkg/urbit/compat/mingw/seh_handler.c +++ /dev/null @@ -1,25 +0,0 @@ -#include "all.h" -#include "rsignal.h" -#include "vere/vere.h" - -/* _mingw_exception_filter: replaces libsigsegv on MingW -*/ -EXCEPTION_DISPOSITION _mingw_exception_filter( - IN PEXCEPTION_RECORD ExceptionRecord, - IN ULONG64 EstablisherFrame, - IN OUT PCONTEXT ContextRecord, - IN OUT PDISPATCHER_CONTEXT DispatcherContext) -{ - if (ExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION && - ExceptionRecord->ExceptionInformation[0] == 1 && - u3e_fault((void*)ExceptionRecord->ExceptionInformation[1], 1)) - { - return ExceptionContinueExecution; - } - - if (ExceptionRecord->ExceptionCode == EXCEPTION_STACK_OVERFLOW) { - rsignal_raise(SIGSTK); - } - - return ExceptionContinueSearch; -} diff --git a/pkg/urbit/compat/mingw/seh_handler_decorator.cc b/pkg/urbit/compat/mingw/seh_handler_decorator.cc deleted file mode 100644 index acc97efcc..000000000 --- a/pkg/urbit/compat/mingw/seh_handler_decorator.cc +++ /dev/null @@ -1,65 +0,0 @@ -#include -#include - -enum { INIT, CPAR, DQ, DQS, SQ, SQS }; -char line[1 << 16]; - -/* seh_handler_decorator: registers u3_exception_handler for all functions in given source file -*/ -int main(int argc, const char* argv[]) -{ - if (argc != 2) - return 1; - - int c, state = INIT, curly = 0, emit = 0; - - while (fgets(line, sizeof(line), stdin)) - { - if (line[0] == '#') - { - emit = !!strstr(line, argv[1]); - fputs(line, stdout); - } - else - for (int i = 0; line[i]; i++) - { - switch (state) { - case INIT: - case CPAR: - switch (line[i]) { - case ' ': - case '\t': - case '\n': - case '\r': - case '\f': break; - case '{': curly++; if (emit && curly == 1 && state == CPAR) goto emit_handler; goto reset; - case '}': curly--; goto reset; - case '"': state = DQ; break; - case '\'': state = SQ; break; - case ')': state = CPAR; break; - reset: - default: state = INIT; break; - } break; - case DQ: - switch (line[i]) { - case '\\': state = DQS; break; - case '"': state = INIT; break; - } break; - case DQS: state = DQ; break; - case SQ: - switch (line[i]) { - case '\\': state = SQS; break; - case '\'': state = INIT; break; - } break; - case SQS: state = SQ; break; - } - fputc(line[i], stdout); - continue; - emit_handler: - fputs("{__asm__(\".seh_handler _mingw_exception_filter,@except\\n\");", stdout); - state = INIT; - } - } - - return 0; -} diff --git a/pkg/urbit/compat/mingw/seh_handler_decorator.mk b/pkg/urbit/compat/mingw/seh_handler_decorator.mk deleted file mode 100644 index aa2a4c37d..000000000 --- a/pkg/urbit/compat/mingw/seh_handler_decorator.mk +++ /dev/null @@ -1,24 +0,0 @@ -# This include file injects a step that transforms vere C source to register -# a SEH exception handler for each function that is declared in a .c file. -# It inserts a .seh_handler directive into each function body with __asm__. -# This directive affects the x64 unwind tables (.pdata and .xdata sections) -# emitted by the compiler. -# -# See gas/config/obj-coff-seh.h in binutils source for .seh_handler, and -# https://docs.microsoft.com/en-us/cpp/build/exception-handling-x64 -# for a description of how stack unwinding and SEH work in x64 Windows. -# -# When this file sets CCEXTRA, the first invocation of $(CC) in Makefile -# writes preprocessor output to stdout (-E -o -), which is piped to a simple -# parser that inserts __asm__ statements to each function in the .c file -# being compiled. The second invocation of $(CC) reads transformed source -# from stdin (-x cpp-output -). $< argument to $(sehdexe) tells the parser -# which .c file is being compiled. - -sehdexe := build/seh_handler_decorator.exe -CCDEPS := $(CCDEPS) $(sehdexe) -CCEXTRA = -E -o -|$(sehdexe) $<|$(CC) $(CFLAGS) -x cpp-output - - -$(sehdexe): compat/mingw/seh_handler_decorator.cc - @mkdir -p ./build - @$(CC) $< -o $@ diff --git a/pkg/urbit/compat/mingw/setjmp.h b/pkg/urbit/compat/mingw/setjmp.h deleted file mode 100644 index 497636872..000000000 --- a/pkg/urbit/compat/mingw/setjmp.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _MINGW_SETJMP_H -#define _MINGW_SETJMP_H - -// msvcrt setjmp/longjmp are broken on 64-bit systems, use gcc builtins -typedef struct jmp_buf { - intptr_t buffer[5]; - int retval; -} jmp_buf; - -#define _setjmp setjmp -#define _longjmp longjmp -#define longjmp(buf, val) {buf.retval = (val); __builtin_longjmp(buf.buffer, 1);} -#define setjmp(buf) (__builtin_setjmp(buf.buffer) ? (buf.retval) : 0) - -#endif//_MINGW_SETJMP_H diff --git a/pkg/urbit/compat/mingw/softfloat3.patch b/pkg/urbit/compat/mingw/softfloat3.patch deleted file mode 100644 index 9f0c5c5e7..000000000 --- a/pkg/urbit/compat/mingw/softfloat3.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/build/Win64-MinGW-w64/Makefile b/build/Win64-MinGW-w64/Makefile ---- a/build/Win64-MinGW-w64/Makefile -+++ b/build/Win64-MinGW-w64/Makefile -@@ -46,7 +46,8 @@ C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include - COMPILE_C = \ - x86_64-w64-mingw32-gcc -c -Werror-implicit-function-declaration \ - -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ --MAKELIB = x86_64-w64-mingw32-ar crs $@ -+MAKELIB = x86_64-w64-mingw32-gcc-ar crs $@ -+LIBNAME = libsoftfloat3 - - OBJ = .o - LIB = .a -@@ -54,7 +55,7 @@ LIB = .a - OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h - - .PHONY: all --all: softfloat$(LIB) -+all: $(LIBNAME)$(LIB) - - OBJS_PRIMITIVES = \ - s_eq128$(OBJ) \ -@@ -380,11 +381,11 @@ $(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - --softfloat$(LIB): $(OBJS_ALL) -+$(LIBNAME)$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - - .PHONY: clean - clean: -- $(DELETE) $(OBJS_ALL) softfloat$(LIB) -+ $(DELETE) $(OBJS_ALL) $(LIBNAME)$(LIB) - diff --git a/pkg/urbit/compat/mingw/uv.patch b/pkg/urbit/compat/mingw/uv.patch deleted file mode 100644 index 1a0a6d694..000000000 --- a/pkg/urbit/compat/mingw/uv.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/src/win/pipe.c b/src/win/pipe.c -index 0f2bb869b..f81245ec6 100644 ---- a/src/win/pipe.c -+++ b/src/win/pipe.c -@@ -270,6 +270,12 @@ static int uv_set_pipe_handle(uv_loop_t* loop, - - if (!SetNamedPipeHandleState(pipeHandle, &mode, NULL, NULL)) { - err = GetLastError(); -+ if ((err == ERROR_INVALID_FUNCTION || err == ERROR_INVALID_PARAMETER) && (duplex_flags & UV_HANDLE_WRITABLE)) { -+ /* -+ * it's not a pipe, but simple writes should be fine -+ * let's trust callers to know what they're doing -+ */ -+ } else - if (err == ERROR_ACCESS_DENIED) { - /* - * SetNamedPipeHandleState can fail if the handle doesn't have either -@@ -1054,7 +1054,6 @@ static DWORD WINAPI uv_pipe_writefile_thread_proc(void* parameter) { - assert(req != NULL); - assert(req->type == UV_WRITE); - assert(handle->type == UV_NAMED_PIPE); -- assert(req->write_buffer.base); - - result = WriteFile(handle->handle, - req->write_buffer.base, -diff --git a/src/win/tty.c b/src/win/tty.c -index c359d5601..1b9d4f853 100644 ---- a/src/win/tty.c -+++ b/src/win/tty.c -@@ -367,7 +367,7 @@ int uv_tty_set_mode(uv_tty_t* tty, uv_tty_mode_t mode) { - flags = ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; - break; - case UV_TTY_MODE_RAW: -- flags = ENABLE_WINDOW_INPUT; -+ flags = ENABLE_WINDOW_INPUT | ENABLE_PROCESSED_INPUT; - break; - case UV_TTY_MODE_IO: - return UV_ENOTSUP; diff --git a/pkg/urbit/compat/poor-mans-nix-shell.sh b/pkg/urbit/compat/poor-mans-nix-shell.sh deleted file mode 100644 index 493b532f6..000000000 --- a/pkg/urbit/compat/poor-mans-nix-shell.sh +++ /dev/null @@ -1,154 +0,0 @@ -declare -a cdirs -declare -a ldirs -declare -a pdirs -declare -A hdeps -sources=(../../nix/sources.json ../../nix/sources-pmnsh.json) -patches=compat/$1 -deriver=urbit-$1-build -markfil=.$1~ -depdirs= -nixpath=${NIX_STORE-../build} - -: "${MAKE:=make}" - -# LDFLAGS doesn't like absolute paths -if [ "${nixpath:0:1}" == "/" ] -then - mkdir -p $nixpath - nixpath=$(realpath --relative-to=. $nixpath) -fi - -hex2nixbase32 () { - local digits='0123456789abcdfghijklmnpqrsvwxyz' - local bits=0 - local left=0 # number of bits left in $bits - local i=0 - while ((1)) - do - while ((left>=5)) - do - echo -n ${digits:$((bits&31)):1} - bits=$((bits>>5)) - left=$((left-5)) - done - if ((i == ${#1})) - then - break - fi - char=0x${1:i:2} - i=$((i+2)) - bits=$((bits|(char<<(left)))) - left=$((left+8)) - done - echo -n ${digits:$bits:1} -} - -buildnixdep () { - echo Building dependency $key... - local cache=https://app.cachix.org/api/v1/cache/${CACHIX_CACHE-} - local hash= - if [ -n "$url" ] - then - hash=${hdeps[$key]} - dir=$nixpath/$hash-$key - if [ -e $dir/$markfil ] - then - # dependency present, don't reupload - hash= - else - # dependency absent, check the binary cache if configured - if [ -n "${CACHIX_CACHE-}" ] - then - echo Checking binary cache for $hash-$key... - narinfo="$cache/${hash}.narinfo" - if curl -fLI "$narinfo" - then - url="$cache/$(curl -fL "$narinfo"|while IFS=: read k v; do if [ "$k" == "URL" ]; then echo $v; fi; done)" - echo Found $url - strip=0 - hash= - fi - fi - mkdir -p $dir - pushd $dir - curl -fL "$url"|(tar --strip $strip -xzf - || true) - popd - fi - else - # local dependency - dir=../$key - fi - - # patch and build the dependency if necessary - if [ ! -e $dir/$markfil ] - then - local patch=$patches/$key.patch - [ -e $patch ] && patch -d $dir -p 1 <$patch - pushd $dir - eval "$cmdprep" - eval ${MAKE} "$cmdmake" - touch $markfil - popd - fi - - # if configured, upload freshly built dependency to binary cache - if [ -n "$hash" -a -n "${CACHIX_AUTH_TOKEN-}" ] - then - ( - echo Uploading freshly built $hash-$key to binary cache... - tar -C $dir -czf $hash.tar . - local size=$(stat -c '%s' $hash.tar) - read filehash _ < <(sha256sum $hash.tar) - curl -fL -H "Content-Type: application/gzip" -H "Authorization: Bearer $CACHIX_AUTH_TOKEN" --data-binary @"$hash.tar" "$cache/nar" - curl -fL -H "Content-Type: application/json" -H "Authorization: Bearer $CACHIX_AUTH_TOKEN" --data-binary @- "$cache/${hash}.narinfo" < - -/* - This is set to the the write-end of a pipe when Urbit is started in - daemon mode. It's meant to be used as a signal to the parent process - that the child process has finished booting. -*/ -static c3_i _child_process_booted_signal_fd = -1; - -/* - This should be called whenever the ship has been booted enough to - handle commands from automation code. Specifically, once the Eyre's - `chis` interface is up and running. - - In daemon mode, this signals to the parent process that it can - exit. Otherwise, it does nothing. - - Once we've sent a signal with `write`, we close the file descriptor - and overwrite the global to make it impossible to accidentally do - this twice. -*/ -static void _on_boot_completed_cb() { - c3_c buf[2] = {0,0}; - - if ( -1 == _child_process_booted_signal_fd ) { - return; - } - - if ( 0 == write(_child_process_booted_signal_fd, buf, 1) ) { - c3_assert(!"_on_boot_completed_cb: Can't write to parent FD"); - } - - close(_child_process_booted_signal_fd); - _child_process_booted_signal_fd = -1; -} - -/* u3_daemon_init(): platform-specific daemon mode initialization. - - We use a pipe to communicate between the child and the parent. The - parent waits for the child to write something to the pipe and - then exits. If the pipe is closed with nothing written to it, get - the exit status from the child process and also exit with that status. - - We want the child to write to the pipe once it's booted, so we put - `_on_boot_completed_cb` into `u3_Host.bot_f`, which is NULL in - non-daemon mode. That gets called once the `chis` service is - available. - - In both processes, we are good fork() citizens, and close all unused - file descriptors. Closing `pipefd[1]` in the parent process is - especially important, since the pipe needs to be closed if the child - process dies. When the pipe is closed, the read fails, and that's - how we know that something went wrong. - - There are some edge cases around `WEXITSTATUS` that are not handled - here, but I don't think it matters. -*/ -void -u3_daemon_init() -{ - c3_i pipefd[2]; - - if ( 0 != pipe(pipefd) ) { - c3_assert(!"Failed to create pipe"); - } - - pid_t childpid = fork(); - - if ( 0 == childpid ) { - close(pipefd[0]); - _child_process_booted_signal_fd = pipefd[1]; - u3_Host.bot_f = _on_boot_completed_cb; - return; - } - - close(pipefd[1]); - close(0); - close(1); - close(2); - - c3_c buf[2] = {0,0}; - if ( 1 == read(pipefd[0], buf, 1) ) { - exit(0); - } - - c3_i status; - wait(&status); - exit(WEXITSTATUS(status)); -} diff --git a/pkg/urbit/compat/posix/ptty.c b/pkg/urbit/compat/posix/ptty.c deleted file mode 100644 index ff42abff9..000000000 --- a/pkg/urbit/compat/posix/ptty.c +++ /dev/null @@ -1,189 +0,0 @@ -/* compat/posix/ptty.c -** -*/ -#include "all.h" -#include "vere/vere.h" -#include -#include - -/* u3_ptty: POSIX terminal extension to u3_utty. -*/ -typedef struct { - u3_utty tty_u; // common tty structure - c3_i cug_i; // blocking fcntl flags - c3_i nob_i; // nonblocking fcntl flags - struct termios bak_u; // cooked terminal state - struct termios raw_u; // raw terminal state -} u3_ptty; - -/* _term_tcsetattr(): tcsetattr w/retry on EINTR. -*/ -static c3_i -_term_tcsetattr(c3_i fil_i, c3_i act_i, const struct termios* tms_u) -{ - c3_i ret_i = 0; - c3_w len_w = 0; - - do { - // abort pathological retry loop - // - if ( 100 == ++len_w ) { - fprintf(stderr, "term: tcsetattr loop: %s\r\n", strerror(errno)); - return -1; - } - ret_i = tcsetattr(fil_i, act_i, tms_u); - } while ( (-1 == ret_i) && (EINTR == errno) ); - - return ret_i; -} - -/* _ttyf_start_raw_input(): sets the tty to raw input. -*/ -static c3_o -_ttyf_start_raw_input(u3_utty* uty_u) -{ - u3_ptty* pty_u = (u3_ptty*)uty_u; - if ( 0 != _term_tcsetattr(uty_u->fid_i, TCSADRAIN, &pty_u->raw_u) ) { - return c3n; - } - if ( -1 == fcntl(uty_u->fid_i, F_SETFL, pty_u->nob_i) ) { - c3_assert(!"init-fcntl"); - } - return c3y; -} - -/* _ttyf_start_raw_input(): ends raw input on the tty. -*/ -static c3_o -_ttyf_end_raw_input(u3_utty* uty_u) -{ - u3_ptty* pty_u = (u3_ptty*)uty_u; - if ( 0 != _term_tcsetattr(uty_u->fid_i, TCSADRAIN, &pty_u->bak_u) ) { - return c3n; - } - if ( -1 == fcntl(uty_u->fid_i, F_SETFL, pty_u->cug_i) ) { - c3_assert(!"exit-fcntl"); - } - return c3y; -} - -/* _ttyf_hija(): hijacks the tty for cooked output. -*/ -static c3_o -_ttyf_hija(u3_utty* uty_u) -{ - u3_ptty* pty_u = (u3_ptty*)uty_u; - if ( 0 != _term_tcsetattr(1, TCSADRAIN, &pty_u->bak_u) ) { - perror("hija-tcsetattr-1"); - c3_assert(!"hija-tcsetattr"); - } - if ( -1 == fcntl(1, F_SETFL, pty_u->cug_i) ) { - perror("hija-fcntl-1"); - c3_assert(!"hija-fcntl"); - } - if ( 0 != _term_tcsetattr(0, TCSADRAIN, &pty_u->bak_u) ) { - perror("hija-tcsetattr-0"); - c3_assert(!"hija-tcsetattr"); - } - if ( -1 == fcntl(0, F_SETFL, pty_u->cug_i) ) { - perror("hija-fcntl-0"); - c3_assert(!"hija-fcntl"); - } - return c3y; -} - -/* _ttyf_loja(): releases the tty from cooked output. -*/ -static c3_o -_ttyf_loja(u3_utty* uty_u) -{ - u3_ptty* pty_u = (u3_ptty*)uty_u; - if ( 0 != _term_tcsetattr(1, TCSADRAIN, &pty_u->raw_u) ) { - perror("loja-tcsetattr-1"); - c3_assert(!"loja-tcsetattr"); - } - if ( -1 == fcntl(1, F_SETFL, pty_u->nob_i) ) { - perror("hija-fcntl-1"); - c3_assert(!"loja-fcntl"); - } - if ( 0 != _term_tcsetattr(0, TCSADRAIN, &pty_u->raw_u) ) { - perror("loja-tcsetattr-0"); - c3_assert(!"loja-tcsetattr"); - } - if ( -1 == fcntl(0, F_SETFL, pty_u->nob_i) ) { - perror("hija-fcntl-0"); - c3_assert(!"loja-fcntl"); - } - return c3y; -} - -/* _ttyf_get_winsize(): gets the tty window size. -*/ -static c3_o -_ttyf_get_winsize(u3_utty* uty_u, c3_l* col_l, c3_l* row_l) -{ - struct winsize siz_u; - if ( 0 == ioctl(uty_u->fid_i, TIOCGWINSZ, &siz_u) ) - { - *col_l = siz_u.ws_col; - *row_l = siz_u.ws_row; - return c3y; - } else { - return c3n; - } -} - -/* u3_ptty_init(): initialize platform-specific tty. -*/ -u3_utty* -u3_ptty_init(uv_loop_t* lup_u, const c3_c** err_c) -{ - u3_ptty* pty_u = c3_calloc(sizeof(u3_ptty)); - u3_utty* uty_u = &pty_u->tty_u; - - if ( !isatty(0) || !isatty(1) ) { - *err_c = "not a tty"; - c3_free(pty_u); - return NULL; - } - - uv_pipe_init(lup_u, &uty_u->pin_u.pip_u, 0); - uv_pipe_init(lup_u, &uty_u->pop_u.pip_u, 0); - uv_pipe_open(&uty_u->pin_u.pip_u, 0); - uv_pipe_open(&uty_u->pop_u.pip_u, 1); - - // Load old terminal state to restore. - // - { - if ( 0 != tcgetattr(uty_u->fid_i, &pty_u->bak_u) ) { - c3_assert(!"init-tcgetattr"); - } - if ( -1 == fcntl(uty_u->fid_i, F_GETFL, &pty_u->cug_i) ) { - c3_assert(!"init-fcntl"); - } - pty_u->cug_i &= ~O_NONBLOCK; // could fix? - pty_u->nob_i = pty_u->cug_i | O_NONBLOCK; // O_NDELAY on older unix - } - - // Construct raw termios configuration. - // - { - pty_u->raw_u = pty_u->bak_u; - - pty_u->raw_u.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN); - pty_u->raw_u.c_iflag &= ~(ICRNL | INPCK | ISTRIP); - pty_u->raw_u.c_cflag &= ~(CSIZE | PARENB); - pty_u->raw_u.c_cflag |= CS8; - pty_u->raw_u.c_oflag &= ~(OPOST); - pty_u->raw_u.c_cc[VMIN] = 0; - pty_u->raw_u.c_cc[VTIME] = 0; - } - - uty_u->fid_i = 1; - uty_u->sta_f = _ttyf_start_raw_input; - uty_u->sto_f = _ttyf_end_raw_input; - uty_u->hij_f = _ttyf_hija; - uty_u->loj_f = _ttyf_loja; - uty_u->wsz_f = _ttyf_get_winsize; - return uty_u; -} diff --git a/pkg/urbit/compat/posix/rsignal.h b/pkg/urbit/compat/posix/rsignal.h deleted file mode 100644 index 276006a18..000000000 --- a/pkg/urbit/compat/posix/rsignal.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _RSIGNAL_H -#define _RSIGNAL_H - -#define rsignal_jmpbuf sigjmp_buf -#define rsignal_setjmp(buf) sigsetjmp((buf), 1) -#define rsignal_longjmp siglongjmp -#define rsignal_install_handler signal -#define rsignal_deinstall_handler(sig) signal((sig), SIG_IGN) -#define rsignal_setitimer setitimer - -#endif//_RSIGNAL_H diff --git a/pkg/urbit/configure b/pkg/urbit/configure deleted file mode 100755 index b5fae7d44..000000000 --- a/pkg/urbit/configure +++ /dev/null @@ -1,202 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -URBIT_VERSION="$(cat ./version)" - -# we require pkg-config metadata to statically link these -# -pkgc_deps=" \ - libcurl \ - libh2o \ - liburcrypt-0 \ - libuv \ - openssl \ -" - -deps=" \ - ent \ - gmp \ - lmdb \ - murmur3 \ - pthread \ - sigsegv \ - softfloat3 \ -" - -echo '#pragma once' >include/config.h - -defmacro () { - echo "#define $1 $2" >>include/config.h -} - -defmacro URBIT_VERSION "\"$URBIT_VERSION\"" - -opt_debug= -opt_static= - -while test $# != 0 -do - case $1 in - --enable-debug) - opt_debug=1 - ;; - --disable-debug) - opt_debug= - ;; - --enable-static) - opt_static=1 - ;; - --enable-shared) - opt_static= - ;; - --disable-static) - opt_static= - ;; - --disable-shared) - opt_static=1 - ;; - *) - echo "unrecognized option: $1" - ;; - esac - shift -done - -[ -n "${MEMORY_DEBUG-}" ] && defmacro U3_MEMORY_DEBUG 1 -[ -n "${MEMORY_LOG-}" ] && defmacro U3_MEMORY_LOG 1 -[ -n "${CPU_DEBUG-}" ] && defmacro U3_CPU_DEBUG 1 -[ -n "${EVENT_TIME_DEBUG-}" ] && defmacro U3_EVENT_TIME_DEBUG 1 - -if [ -n "${HOST-}" ] -then os=$(sed 's$^[^-]*-\([^-]*\)-.*$\1$' <<< "$HOST") - cpu=$(sed 's$-.*$$' <<< ${HOST}) -else os=$(uname -s) - cpu=$(uname -m) -fi - -case $(tr A-Z a-z <<< $cpu) in - unknown) - defmacro U3_OS_ENDIAN_little 1 - ;; - i386) - defmacro U3_OS_ENDIAN_little 1 - ;; - i686) - defmacro U3_OS_ENDIAN_little 1 - ;; - x86_64) - defmacro U3_OS_ENDIAN_little 1 - ;; - arm64|aarch64) - defmacro U3_OS_ENDIAN_little 1 - defmacro U3_CPU_aarch64 1 - ;; - *) - echo "Unknown or unsupported CPU: '$cpu'" >&2 - exit 1 - ;; -esac - -# TODO Determine if the target cpu is little or big endian. -case $(tr A-Z a-z <<< $os) in - *mingw*) - # mingw builds are static-only - # - opt_static=1 - - # ensure required mingw packages are installed - mpkgs=(cmake curl gcc jq make) - pacman -S --needed autoconf automake-wrapper libtool patch ${mpkgs[@]/#/mingw-w64-x86_64-} - - export MAKE=mingw32-make - - . compat/poor-mans-nix-shell.sh mingw - compat/create-include-files.sh 'stat -c %s' /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt - - defmacro U3_OS_mingw 1 - - deps="${deps/sigsegv}" - compat="${compat-} mingw" - ;; - m1brew) - # ensure required packages are installed - brew install -q autoconf automake bash cmake coreutils gmp jq libsigsegv libtool libuv openssl pkgconfig - - if (( ${BASH_VERSION%%.*} < 5 )) - then - echo Running bash version $BASH_VERSION is too low, please restart bash to use freshly installed one - exit 1 - fi - - # for some reason pkg-config does not pick up openssl - export PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig:${PKG_CONFIG_PATH-}" - - . compat/poor-mans-nix-shell.sh m1brew - compat/create-include-files.sh 'stat -f %z' /etc/ssl/cert.pem - - defmacro U3_OS_osx 1 - - compat="${compat-} posix m1brew" - ;; - *linux*) - defmacro U3_OS_linux 1 - defmacro U3_OS_PROF 1 - ;; - *darwin*) - defmacro U3_OS_osx 1 - defmacro U3_OS_PROF 1 - ;; - *apple*) - defmacro U3_OS_osx 1 - defmacro U3_OS_PROF 1 - ;; - *freebsd*) - defmacro U3_OS_bsd 1 - deps="$deps kvm" # XX use new compat.mk pattern - ;; - *openbsd*) - defmacro U3_OS_bsd 1 - ;; - *) - echo "Unknown or unsupported OS: '$os'" >&2 - exit 1 - ;; -esac - -PKG_CONFIG="${PKG_CONFIG-pkg-config}" - -if [ -n "${opt_static-}" ] -then - CFLAGS="${CFLAGS-} -static" - # XX can't set -static here due libuv's -ldl on MacOS - # - # LDFLAGS="${LDFLAGS-} -static" - PKG_CONFIG="$PKG_CONFIG --static" -fi - -CFLAGS="${CFLAGS-} $($PKG_CONFIG --cflags $pkgc_deps)" -LDFLAGS="${LDFLAGS-} $($PKG_CONFIG --libs $pkgc_deps)" - -for dep in $deps; do - LDFLAGS="${LDFLAGS-} -l$dep" -done - -compat="${compat-posix}" -for citem in $compat; do - CFLAGS="${CFLAGS-} -Icompat/$citem" -done - -cat >config.mk <&2 -cat config.mk >&2 - -echo == include/config.h == >&2 -cat include/config.h >&2 diff --git a/pkg/urbit/daemon/main.c b/pkg/urbit/daemon/main.c deleted file mode 100644 index ec871d61c..000000000 --- a/pkg/urbit/daemon/main.c +++ /dev/null @@ -1,1433 +0,0 @@ -/* vere/main.c -** -*/ -#define U3_GLOBAL -#define C3_GLOBAL -#include "all.h" -#include "rsignal.h" -#include -#include "vere/vere.h" -#if !defined(U3_OS_mingw) -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ca-bundle.h" - -// serf module state -// -static u3_serf u3V; // one serf per process -static u3_moat inn_u; // input stream -static u3_mojo out_u; // output stream -static u3_cue_xeno* sil_u; // cue handle - -#undef SERF_TRACE_JAM -#undef SERF_TRACE_CUE - -/* Require unsigned char - */ -STATIC_ASSERT(( 0 == CHAR_MIN && UCHAR_MAX == CHAR_MAX ), - "unsigned char required"); - -/* _main_readw(): parse a word from a string. -*/ -static u3_noun -_main_readw(const c3_c* str_c, c3_w max_w, c3_w* out_w) -{ - c3_c* end_c; - c3_w par_w = strtoul(str_c, &end_c, 0); - - if ( *str_c != '\0' && *end_c == '\0' && par_w < max_w ) { - *out_w = par_w; - return c3y; - } - else return c3n; -} - -/* _main_presig(): prefix optional sig. -*/ -c3_c* -_main_presig(c3_c* txt_c) -{ - c3_c* new_c = c3_malloc(2 + strlen(txt_c)); - - if ( '~' == *txt_c ) { - strcpy(new_c, txt_c); - } else { - new_c[0] = '~'; - strcpy(new_c + 1, txt_c); - } - return new_c; -} - -/* _main_repath(): canonicalize path, using dirname if needed. -*/ -c3_c* -_main_repath(c3_c* pax_c) -{ - c3_c* rel_c; - c3_c* fas_c; - c3_c* dir_c; - c3_w len_w; - c3_i wit_i; - - c3_assert(pax_c); - if ( 0 != (rel_c = realpath(pax_c, 0)) ) { - return rel_c; - } - fas_c = strrchr(pax_c, '/'); - if ( !fas_c ) { - c3_c rec_c[2048]; - - wit_i = snprintf(rec_c, sizeof(rec_c), "./%s", pax_c); - c3_assert(sizeof(rec_c) > wit_i); - return _main_repath(rec_c); - } - c3_assert(u3_unix_cane(fas_c + 1)); - *fas_c = 0; - dir_c = realpath(pax_c, 0); - *fas_c = '/'; - if ( 0 == dir_c ) { - return 0; - } - len_w = strlen(dir_c) + strlen(fas_c) + 1; - rel_c = c3_malloc(len_w); - wit_i = snprintf(rel_c, len_w, "%s%s", dir_c, fas_c); - c3_assert(len_w == wit_i + 1); - c3_free(dir_c); - return rel_c; -} - -/* _main_getopt(): extract option map from command line. -*/ -static u3_noun -_main_getopt(c3_i argc, c3_c** argv) -{ - c3_i ch_i, lid_i; - c3_w arg_w; - - u3_Host.ops_u.abo = c3n; - u3_Host.ops_u.dem = c3n; - u3_Host.ops_u.dry = c3n; - u3_Host.ops_u.gab = c3n; - u3_Host.ops_u.git = c3n; - - // always disable hashboard - // XX temporary, remove once hashes are added - // - u3_Host.ops_u.has = c3y; - - u3_Host.ops_u.net = c3y; - u3_Host.ops_u.lit = c3n; - u3_Host.ops_u.nuu = c3n; - u3_Host.ops_u.pro = c3n; - u3_Host.ops_u.qui = c3n; - u3_Host.ops_u.rep = c3n; - u3_Host.ops_u.tem = c3n; - u3_Host.ops_u.tex = c3n; - u3_Host.ops_u.tra = c3n; - u3_Host.ops_u.veb = c3n; - u3_Host.ops_u.puf_c = "jam"; - u3_Host.ops_u.hap_w = 50000; - u3_Host.ops_u.kno_w = DefaultKernel; - - static struct option lop_u[] = { - { "arvo", required_argument, NULL, 'A' }, - { "abort", no_argument, NULL, 'a' }, - { "bootstrap", required_argument, NULL, 'B' }, - { "http-ip", required_argument, NULL, 'b' }, - { "memo-cache-limit", required_argument, NULL, 'C' }, - { "pier", required_argument, NULL, 'c' }, - { "replay", no_argument, NULL, 'D' }, - { "daemon", no_argument, NULL, 'd' }, - { "ethereum", required_argument, NULL, 'e' }, - { "fake", required_argument, NULL, 'F' }, - { "key-string", required_argument, NULL, 'G' }, - { "gc", no_argument, NULL, 'g' }, - { "dns-root", required_argument, NULL, 'H' }, - { "inject", required_argument, NULL, 'I' }, - { "import", required_argument, NULL, 'i' }, - { "ivory-pill", required_argument, NULL, 'J' }, - { "json-trace", no_argument, NULL, 'j' }, - { "kernel-stage", required_argument, NULL, 'K' }, - { "key-file", required_argument, NULL, 'k' }, - { "local", no_argument, NULL, 'L' }, - { "lite-boot", no_argument, NULL, 'l' }, - { "replay-to", required_argument, NULL, 'n' }, - { "profile", no_argument, NULL, 'P' }, - { "ames-port", required_argument, NULL, 'p' }, - { "http-port", required_argument, NULL, c3__http }, - { "https-port", required_argument, NULL, c3__htls }, - { "no-conn", no_argument, NULL, c3__noco }, - { "quiet", no_argument, NULL, 'q' }, - { "versions", no_argument, NULL, 'R' }, - { "replay-from", required_argument, NULL, 'r' }, - { "skip-battery-hashes", no_argument, NULL, 'S' }, - { "autoselect-pill", no_argument, NULL, 's' }, - { "no-tty", no_argument, NULL, 't' }, - { "bootstrap-url", required_argument, NULL, 'u' }, - { "verbose", no_argument, NULL, 'v' }, - { "name", required_argument, NULL, 'w' }, - { "scry", required_argument, NULL, 'X' }, - { "exit", no_argument, NULL, 'x' }, - { "scry-into", required_argument, NULL, 'Y' }, - { "scry-format", required_argument, NULL, 'Z' }, - { NULL, 0, NULL, 0 }, - }; - - while ( -1 != (ch_i=getopt_long(argc, argv, - "A:B:C:DF:G:H:I:J:K:LPRSX:Y:Z:ab:cde:gi:jk:ln:p:qr:stu:vw:x", - lop_u, &lid_i)) ) - { - switch ( ch_i ) { - case 'X': { - u3_Host.ops_u.pek_c = strdup(optarg); - break; - } - case 'Y': { - u3_Host.ops_u.puk_c = _main_repath(optarg); - break; - } - case 'Z': { - u3_Host.ops_u.puf_c = strdup(optarg); - break; - } - case 'J': { - u3_Host.ops_u.lit_c = _main_repath(optarg); - break; - } - case 'B': { - u3_Host.ops_u.pil_c = _main_repath(optarg); - break; - } - case 'b': { - u3_Host.ops_u.bin_c = strdup(optarg); - break; - } - case 'G': { - u3_Host.ops_u.gen_c = strdup(optarg); - break; - } - case 'A': { - u3_Host.ops_u.arv_c = _main_repath(optarg); - break; - } - case 'H': { - u3_Host.ops_u.dns_c = strdup(optarg); - break; - } - case 'I': { - u3_Host.ops_u.jin_c = _main_repath(optarg); - break; - } - case 'C': { - if ( c3n == _main_readw(optarg, 1000000000, &u3_Host.ops_u.hap_w) ) { - return c3n; - } - break; - } - case 'e': { - u3_Host.ops_u.eth_c = strdup(optarg); - break; - } - case 'F': { - u3_Host.ops_u.fak_c = _main_presig(optarg); - u3_Host.ops_u.net = c3n; - break; - } - case 'w': { - u3_Host.ops_u.who_c = _main_presig(optarg); - u3_Host.ops_u.nuu = c3y; - break; - } - case 'u': { - u3_Host.ops_u.url_c = strdup(optarg); - break; - } - case 'x': { - u3_Host.ops_u.tex = c3y; - break; - } - case 'K': { - if ( c3n == _main_readw(optarg, 256, &u3_Host.ops_u.kno_w) ) { - return c3n; - } - break; - } - case 'k': { - u3_Host.ops_u.key_c = _main_repath(optarg); - break; - } - case 'n': { - u3_Host.ops_u.til_c = strdup(optarg); - break; - } - case 'p': { - if ( c3n == _main_readw(optarg, 65536, &arg_w) ) { - return c3n; - } else u3_Host.ops_u.por_s = arg_w; - break; - } - case c3__http: { - if ( c3n == _main_readw(optarg, 65536, &arg_w) ) { - return c3n; - } else u3_Host.ops_u.per_s = arg_w; - break; - } - case c3__htls: { - if ( c3n == _main_readw(optarg, 65536, &arg_w) ) { - return c3n; - } else u3_Host.ops_u.pes_s = arg_w; - break; - } - case c3__noco: { - u3_Host.ops_u.con = c3n; - break; - } - case 'R': { - u3_Host.ops_u.rep = c3y; - return c3y; - } - case 'r': { - u3_Host.ops_u.roc_c = strdup(optarg); - break; - } - case 'i': { - u3_Host.ops_u.imp_c = _main_repath(optarg); - break; - } - case 'L': { u3_Host.ops_u.net = c3n; break; } - case 'l': { u3_Host.ops_u.lit = c3y; break; } - case 'j': { u3_Host.ops_u.tra = c3y; break; } - case 'a': { u3_Host.ops_u.abo = c3y; break; } - case 'c': { u3_Host.ops_u.nuu = c3y; break; } - case 'd': { u3_Host.ops_u.dem = c3y; break; } - case 'g': { u3_Host.ops_u.gab = c3y; break; } - case 'P': { u3_Host.ops_u.pro = c3y; break; } - case 'D': { u3_Host.ops_u.dry = c3y; break; } - case 'q': { u3_Host.ops_u.qui = c3y; break; } - case 'v': { u3_Host.ops_u.veb = c3y; break; } - case 's': { u3_Host.ops_u.git = c3y; break; } - case 'S': { u3_Host.ops_u.has = c3y; break; } - case 't': { u3_Host.ops_u.tem = c3y; break; } - case '?': default: { - return c3n; - } - } - } - -#if !defined(U3_OS_PROF) - if (u3_Host.ops_u.pro == c3y) { - fprintf(stderr, "profiling isn't yet supported on your OS\r\n"); - return c3n; - } -#endif - - if ( 0 != u3_Host.ops_u.fak_c ) { - if ( 28 < strlen(u3_Host.ops_u.fak_c) ) { - fprintf(stderr, "fake comets are disallowed\r\n"); - return c3n; - } - - u3_Host.ops_u.who_c = strdup(u3_Host.ops_u.fak_c); - u3_Host.ops_u.has = c3y; /* no battery hashing on fake ships. */ - u3_Host.ops_u.net = c3n; /* no networking on fake ships. */ - u3_Host.ops_u.nuu = c3y; - } - - if ( argc != (optind + 1) ) { - if ( u3_Host.ops_u.who_c != 0 ) { - u3_Host.dir_c = strdup(1 + u3_Host.ops_u.who_c); - } - else { - // XX not sure how this might be reachable - return c3n; - } - } - else { - { - c3_c* ash_c; - - if ( (ash_c = strrchr(argv[optind], '/')) && (ash_c[1] == 0) ) { - *ash_c = 0; - } - } - - u3_Host.dir_c = _main_repath(argv[optind]); - } - - // daemon mode (-d) implies disabling terminal assumptions (-t) - // - if ( c3y == u3_Host.ops_u.dem ) { - u3_Host.ops_u.tem = c3y; - } - - // make -c optional, catch invalid boot of existing pier - // - { - struct stat s; - if ( 0 != stat(u3_Host.dir_c, &s) ) { - if ( c3n == u3_Host.ops_u.nuu ) { - u3_Host.ops_u.nuu = c3y; - } - } - else if ( c3y == u3_Host.ops_u.nuu ) { - fprintf(stderr, "tried to create, but %s already exists\n", u3_Host.dir_c); - fprintf(stderr, "normal usage: %s %s\n", argv[0], u3_Host.dir_c); - exit(1); - } - else if ( 0 != access(u3_Host.dir_c, W_OK) ) { - fprintf(stderr, "urbit: write permissions are required for %s\n", u3_Host.dir_c); - exit(1); - } - } - - if ( u3_Host.ops_u.gen_c != 0 && u3_Host.ops_u.nuu == c3n ) { - fprintf(stderr, "-G only makes sense when bootstrapping a new instance\n"); - return c3n; - } - - if ( u3_Host.ops_u.nuu != c3y && u3_Host.ops_u.who_c != 0) { - fprintf(stderr, "-w only makes sense when creating a new ship\n"); - return c3n; - } - - if ( u3_Host.ops_u.nuu != c3y && u3_Host.ops_u.pil_c != 0) { - fprintf(stderr, "-B only makes sense when creating a new ship\n"); - return c3n; - } - - struct sockaddr_in t; - if ( u3_Host.ops_u.bin_c != 0 && inet_pton(AF_INET, u3_Host.ops_u.bin_c, &t.sin_addr) == 0 ) { - fprintf(stderr, "-b invalid IP address\n"); - return c3n; - } - - if ( u3_Host.ops_u.nuu != c3y && u3_Host.ops_u.dns_c != 0) { - fprintf(stderr, "-H only makes sense when bootstrapping a new instance\n"); - return c3n; - } - - if ( u3_Host.ops_u.nuu != c3y && u3_Host.ops_u.pil_c != 0) { - fprintf(stderr, "-B only makes sense when bootstrapping a new instance\n"); - return c3n; - } - - if ( u3_Host.ops_u.nuu != c3y && u3_Host.ops_u.key_c != 0) { - fprintf(stderr, "-k only makes sense when bootstrapping a new instance\n"); - return c3n; - } - - if ( u3_Host.ops_u.nuu != c3y && u3_Host.ops_u.url_c != 0 ) { - fprintf(stderr, "-u only makes sense when bootstrapping a new instance\n"); - return c3n; - } - - if ( u3_Host.ops_u.url_c != 0 && u3_Host.ops_u.pil_c != 0 ) { - fprintf(stderr, "-B and -u cannot be used together\n"); - return c3n; - } - else if ( u3_Host.ops_u.nuu == c3y - && u3_Host.ops_u.url_c == 0 - && u3_Host.ops_u.git == c3n ) { - u3_Host.ops_u.url_c = - "https://bootstrap.urbit.org/urbit-v" URBIT_VERSION ".pill"; - } - else if ( u3_Host.ops_u.nuu == c3y - && u3_Host.ops_u.url_c == 0 - && u3_Host.ops_u.arv_c == 0 ) { - - fprintf(stderr, "-s only makes sense with -A\n"); - return c3n; - } - - if ( u3_Host.ops_u.pil_c != 0 ) { - struct stat s; - if ( stat(u3_Host.ops_u.pil_c, &s) != 0 ) { - fprintf(stderr, "pill %s not found\n", u3_Host.ops_u.pil_c); - return c3n; - } - } - - if ( u3_Host.ops_u.key_c != 0 ) { - struct stat s; - if ( stat(u3_Host.ops_u.key_c, &s) != 0 ) { - fprintf(stderr, "keyfile %s not found\n", u3_Host.ops_u.key_c); - return c3n; - } - } - - return c3y; -} - -/* _cert_store: decoded CA certificates - */ -static STACK_OF(X509_INFO)* _cert_store; - -/* _setup_cert_store(): decodes embedded CA certificates - */ -static void -_setup_cert_store() -{ - BIO* cbio = BIO_new_mem_buf(include_ca_bundle_crt, include_ca_bundle_crt_len); - if ( !cbio || !(_cert_store = PEM_X509_INFO_read_bio(cbio, NULL, NULL, NULL)) ) { - u3l_log("boot: failed to decode embedded CA certificates\r\n"); - exit(1); - } - - BIO_free(cbio); -} - -/* _setup_ssl_x509(): adds embedded CA certificates to a X509_STORE - */ -static void -_setup_ssl_x509(void* arg) -{ - X509_STORE* cts = arg; - int i; - for ( i = 0; i < sk_X509_INFO_num(_cert_store); i++ ) { - X509_INFO *itmp = sk_X509_INFO_value(_cert_store, i); - if(itmp->x509) { - X509_STORE_add_cert(cts, itmp->x509); - } - if(itmp->crl) { - X509_STORE_add_crl(cts, itmp->crl); - } - } -} - -/* _curl_ssl_ctx_cb(): curl SSL context callback - */ -static CURLcode -_curl_ssl_ctx_cb(CURL* curl, SSL_CTX* sslctx, void* param) -{ - X509_STORE* cts = SSL_CTX_get_cert_store(sslctx); - if (!cts || !_cert_store) - return CURLE_ABORTED_BY_CALLBACK; - - _setup_ssl_x509(cts); - return CURLE_OK; -} - -/* _setup_ssl_curl(): adds embedded CA certificates to a curl context - */ -static void -_setup_ssl_curl(void* arg) -{ - CURL* curl = arg; - curl_easy_setopt(curl, CURLOPT_CAINFO, NULL); - curl_easy_setopt(curl, CURLOPT_CAPATH, NULL); - curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, _curl_ssl_ctx_cb); -} - -/* _cw_usage(): print utility usage. -*/ -static void -_cw_usage(c3_c* s) -{ - fprintf(stderr, - "\nutilities:\n" - " %s cram jam state:\n" - " %s grab measure memory usage:\n" - " %s info print pier info:\n" - " %s meld deduplicate snapshot:\n" - " %s pack defragment snapshot:\n" - " %s queu cue state:\n" - "\n run as a 'serf':\n" - " %s serf " -#ifdef U3_OS_mingw - " " -#endif - "\n", - s, s, s, s, s, s, s); -} - -/* u3_ve_usage(): print usage and exit. -*/ -static void -u3_ve_usage(c3_i argc, c3_c** argv) -{ - c3_c *use_c[] = { - "Urbit: a personal server operating function\n", - "https://urbit.org\n", - "Version " URBIT_VERSION "\n", - "\n", - "Usage: %s [options...] ship_name\n", - "where ship_name is a @p phonetic representation of an urbit address\n", - "without the leading '~', and options is some subset of the following:\n", - "\n", - "-A, --arvo DIR Use dir for initial clay sync\n", - "-a, --abort Abort aggressively\n", - "-B, --bootstrap PILL Bootstrap from this pill\n", - "-b, --http-ip IP Bind HTTP server to this IP address\n", - "-C, --memo-cache-limit LIMIT Set memo cache max size; 0 means uncapped\n", - "-c, --pier PIER Create a new urbit in pier/\n", - "-D, --replay Recompute from events\n", - "-d, --daemon Daemon mode; implies -t\n", - "-e, --ethereum URL Ethereum gateway\n", - "-F, --fake SHIP Fake keys; also disables networking\n", - "-G, --key-string STRING Private key string (@uw, see also -k)\n" - "-g, --gc Set GC flag\n", - "-I, --inject FILE Inject event from jamfile\n", - "-i, --import FILE Import pier state from jamfile\n", - "-J, --ivory-pill PILL Use custom ivory pill\n", - "-j, --json-trace Create json trace file in .urb/put/trace\n", - "-K, --kernel-stage STAGE Start at Hoon kernel version stage\n", - "-k, --key-file KEYS Private key file (see also -G)\n", - "-L, --local Local networking only\n", - "-l, --lite-boot Most-minimal startup\n", - "-n, --replay-to NUMBER Replay up to event\n", - "-P, --profile Profiling\n", - "-p, --ames-port PORT Set the ames port to bind to\n", - " --http-port PORT Set the http port to bind to\n", - " --https-port PORT Set the https port to bind to\n", - "-q, --quiet Quiet\n", - "-R, --versions Report urbit build info\n", - "-r, --replay-from NUMBER Load snapshot from event\n", - "-S, --skip-battery-hashes Disable battery hashing\n", - // XX find a way to re-enable - // "-s, --autoselect-pill Pill URL from arvo git hash\n", - "-t, --no-tty Disable terminal/tty assumptions\n", - "-u, --bootstrap-url URL URL from which to download pill\n", - "-v, --verbose Verbose\n", - "-w, --name NAME Boot as ~name\n", - "-X, --scry PATH Scry, write to file, then exit\n", - "-x, --exit Exit immediately\n", - "-Y, --scry-into FILE Optional name of file (for -X)\n", - "-Z, --scry-format FORMAT Optional file format ('jam', or aura, for -X)\n", - " --no-conn Do not run control plane\n", - "\n", - "Development Usage:\n", - " To create a development ship, use a fakezod:\n", - " %s -F zod -A /path/to/arvo/folder -B /path/to/pill -c zod\n", - "\n", - " For more information about developing on urbit, see:\n", - " https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md\n", - "\n", - "Simple Usage: \n", - " %s -c to create a comet (anonymous urbit)\n", - " %s -w -k if you own a planet\n", - " %s to restart an existing urbit\n", - 0 - }; - - c3_i i; - for ( i=0; use_c[i]; i++ ) { - fprintf(stderr, use_c[i], argv[0]); - } - _cw_usage(argv[0]); - exit(1); -} - -#if 0 -/* u3_ve_panic(): panic and exit. -*/ -static void -u3_ve_panic(c3_i argc, c3_c** argv) -{ - fprintf(stderr, "%s: gross system failure\n", argv[0]); - exit(1); -} -#endif - -/* u3_ve_sysopt(): apply option map to system state. -*/ -static void -u3_ve_sysopt() -{ - u3_Local = strdup(u3_Host.dir_c); -} - -static void -report(void) -{ - printf("urbit %s\n", URBIT_VERSION); - printf("gmp: %s\n", gmp_version); -#if !defined(U3_OS_mingw) - printf("sigsegv: %d.%d\n", - (libsigsegv_version >> 8) & 0xff, - libsigsegv_version & 0xff); -#endif - printf("openssl: %s\n", SSLeay_version(SSLEAY_VERSION)); - printf("libuv: %s\n", uv_version_string()); - printf("libh2o: %d.%d.%d\n", - H2O_LIBRARY_VERSION_MAJOR, - H2O_LIBRARY_VERSION_MINOR, - H2O_LIBRARY_VERSION_PATCH); - printf("lmdb: %d.%d.%d\n", - MDB_VERSION_MAJOR, - MDB_VERSION_MINOR, - MDB_VERSION_PATCH); - printf("curl: %d.%d.%d\n", - LIBCURL_VERSION_MAJOR, - LIBCURL_VERSION_MINOR, - LIBCURL_VERSION_PATCH); -} - -/* _stop_exit(): exit immediately. -*/ -static void -_stop_exit(c3_i int_i) -{ - // explicit fprintf to avoid allocation in u3l_log - // - fprintf(stderr, "\r\n[received keyboard stop signal, exiting]\r\n"); - u3_king_bail(); -} - -/* _stop_on_boot_completed_cb(): exit gracefully after boot is complete -*/ -static void -_stop_on_boot_completed_cb() -{ - u3_king_exit(); -} - -/* _cw_serf_fail(): failure stub. -*/ -static void -_cw_serf_fail(void* ptr_v, ssize_t err_i, const c3_c* err_c) -{ - if ( UV_EOF == err_i ) { - fprintf(stderr, "serf: pier unexpectedly shut down\r\n"); - } - else { - fprintf(stderr, "serf: pier error: %s\r\n", err_c); - } - - exit(1); -} - -/* _cw_serf_send(): send plea back to daemon. -*/ -static void -_cw_serf_send(u3_noun pel) -{ - c3_d len_d; - c3_y* byt_y; - -#ifdef SERF_TRACE_JAM - u3t_event_trace("serf ipc jam", 'B'); -#endif - - u3s_jam_xeno(pel, &len_d, &byt_y); - -#ifdef SERF_TRACE_JAM - u3t_event_trace("serf ipc jam", 'E'); -#endif - - u3_newt_send(&out_u, len_d, byt_y); - u3z(pel); -} - -/* _cw_serf_send_slog(): send hint output (hod is [priority tank]). -*/ -static void -_cw_serf_send_slog(u3_noun hod) -{ - _cw_serf_send(u3nc(c3__slog, hod)); -} - -/* _cw_serf_send_stdr(): send stderr output (%flog) -*/ -static void -_cw_serf_send_stdr(c3_c* str_c) -{ - _cw_serf_send(u3nc(c3__flog, u3i_string(str_c))); -} - - -/* _cw_serf_step_trace(): initialize or rotate trace file. -*/ -static void -_cw_serf_step_trace(void) -{ - if ( u3C.wag_w & u3o_trace ) { - if ( u3_Host.tra_u.con_w == 0 && u3_Host.tra_u.fun_w == 0 ) { - u3t_trace_open(u3V.dir_c); - } - else if ( u3_Host.tra_u.con_w >= 100000 ) { - u3t_trace_close(); - u3t_trace_open(u3V.dir_c); - } - } -} - -/* _cw_serf_writ(): process a command from the king. -*/ -static void -_cw_serf_writ(void* vod_p, c3_d len_d, c3_y* byt_y) -{ - u3_weak jar; - u3_noun ret; - - _cw_serf_step_trace(); - -#ifdef SERF_TRACE_CUE - u3t_event_trace("serf ipc cue", 'B'); -#endif - - jar = u3s_cue_xeno_with(sil_u, len_d, byt_y); - -#ifdef SERF_TRACE_CUE - u3t_event_trace("serf ipc cue", 'E'); -#endif - - if ( (u3_none == jar) - || (c3n == u3_serf_writ(&u3V, jar, &ret)) ) - { - _cw_serf_fail(0, -1, "bad jar"); - } - else { - _cw_serf_send(ret); - - // all references must now be counted, and all roots recorded - // - u3_serf_post(&u3V); - } -} - -/* _cw_serf_stdio(): fix up std io handles -*/ -static void -_cw_serf_stdio(c3_i* inn_i, c3_i* out_i) -{ - // the serf is spawned with [FD 0] = events and [FD 1] = effects - // we dup [FD 0 & 1] so we don't accidently use them for something else - // we replace [FD 0] (stdin) with a fd pointing to /dev/null - // we replace [FD 1] (stdout) with a dup of [FD 2] (stderr) - // - c3_i nul_i = c3_open(c3_dev_null, O_RDWR, 0); - - *inn_i = dup(0); - *out_i = dup(1); - - dup2(nul_i, 0); - dup2(2, 1); - - close(nul_i); - - // set stream I/O to unbuffered because it's now a pipe not a console - // - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); -} - -/* _cw_serf_stdio(): cleanup on serf exit. -*/ -static void -_cw_serf_exit(void) -{ - u3s_cue_xeno_done(sil_u); - u3t_trace_close(); -} - -/* _cw_init_io(): initialize i/o streams. -*/ -static void -_cw_init_io(uv_loop_t* lup_u) -{ - // mars is spawned with [FD 0] = events and [FD 1] = effects - // we dup [FD 0 & 1] so we don't accidently use them for something else - // we replace [FD 0] (stdin) with a fd pointing to /dev/null - // we replace [FD 1] (stdout) with a dup of [FD 2] (stderr) - // - c3_i nul_i = c3_open(c3_dev_null, O_RDWR, 0); - c3_i inn_i = dup(0); - c3_i out_i = dup(1); - - dup2(nul_i, 0); - dup2(2, 1); - - close(nul_i); - - // set stream I/O to unbuffered because it's now a pipe not a console - // - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); - - // Ignore SIGPIPE signals. - // -#ifndef U3_OS_mingw - { - struct sigaction sig_s = {{0}}; - sigemptyset(&(sig_s.sa_mask)); - sig_s.sa_handler = SIG_IGN; - sigaction(SIGPIPE, &sig_s, 0); - } -#endif - - // configure pipe to daemon process - // - { - c3_i err_i; - err_i = uv_timer_init(lup_u, &inn_u.tim_u); - c3_assert(!err_i); - err_i = uv_pipe_init(lup_u, &inn_u.pyp_u, 0); - c3_assert(!err_i); - uv_pipe_open(&inn_u.pyp_u, inn_i); - err_i = uv_pipe_init(lup_u, &out_u.pyp_u, 0); - c3_assert(!err_i); - uv_pipe_open(&out_u.pyp_u, out_i); - - uv_stream_set_blocking((uv_stream_t*)&out_u.pyp_u, 1); - } -} - -#ifdef U3_OS_mingw -/* _cw_intr_win_cb(): invoked when urth signals ctrl-c. -*/ -static void -_cw_intr_win_cb(PVOID param, BOOLEAN timedOut) -{ - rsignal_raise(SIGINT); -} - -/* _cw_intr_win(): initialize ctrl-c handling. -*/ -static void -_cw_intr_win(c3_c* han_c) -{ - HANDLE h; - if ( 1 != sscanf(han_c, "%" PRIu64, &h) ) { - fprintf(stderr, "mars: ctrl-c event: bad handle %s: %s\r\n", - han_c, strerror(errno)); - } - else { - if ( !RegisterWaitForSingleObject(&h, h, _cw_intr_win_cb, - NULL, INFINITE, 0) ) - { - fprintf(stderr, - "mars: ctrl-c event: RegisterWaitForSingleObject(%u) failed (%d)\r\n", - h, GetLastError()); - } - } -} -#endif - -/* _cw_serf_commence(); initialize and run serf -*/ -static void -_cw_serf_commence(c3_i argc, c3_c* argv[]) -{ -#ifdef U3_OS_mingw - if ( 8 > argc ) { -#else - if ( 7 > argc ) { -#endif - fprintf(stderr, "serf: missing args\n"); - exit(1); - } - - c3_d eve_d = 0; - uv_loop_t* lup_u = u3_Host.lup_u = uv_default_loop(); - c3_c* dir_c = argv[2]; - c3_c* key_c = argv[3]; // XX use passkey - c3_c* wag_c = argv[4]; - c3_c* hap_c = argv[5]; - c3_c* eve_c = argv[6]; -#ifdef U3_OS_mingw - c3_c* han_c = argv[7]; - _cw_intr_win(han_c); -#endif - - _cw_init_io(lup_u); - - memset(&u3V, 0, sizeof(u3V)); - memset(&u3_Host.tra_u, 0, sizeof(u3_Host.tra_u)); - - // load passkey - // - // XX and then ... use passkey - // - { - sscanf(key_c, "%" PRIx64 ":%" PRIx64 ":%" PRIx64 ":%" PRIx64, - &u3V.key_d[0], - &u3V.key_d[1], - &u3V.key_d[2], - &u3V.key_d[3]); - } - - // load runtime config - // - { - sscanf(wag_c, "%" SCNu32, &u3C.wag_w); - sscanf(hap_c, "%" SCNu32, &u3_Host.ops_u.hap_w); - - if ( 1 != sscanf(eve_c, "%" PRIu64, &eve_d) ) { - fprintf(stderr, "serf: rock: invalid number '%s'\r\n", argv[4]); - } - } - - sil_u = u3s_cue_xeno_init(); - - // set up writing - // - out_u.ptr_v = &u3V; - out_u.bal_f = _cw_serf_fail; - - // set up reading - // - inn_u.ptr_v = &u3V; - inn_u.pok_f = _cw_serf_writ; - inn_u.bal_f = _cw_serf_fail; - - // setup loom - // - { - u3V.dir_c = strdup(dir_c); - u3V.sen_d = u3V.dun_d = u3m_boot(dir_c); - - if ( eve_d ) { - // XX need not be fatal, need a u3m_reboot equivalent - // XX can spuriously fail do to corrupt memory-image checkpoint, - // need a u3m_half_boot equivalent - // workaround is to delete/move the checkpoint in case of corruption - // - if ( c3n == u3u_uncram(u3V.dir_c, eve_d) ) { - fprintf(stderr, "serf (%" PRIu64 "): rock load failed\r\n", eve_d); - exit(1); - } - } - } - - // set up logging - // - // XX must be after u3m_boot due to u3l_log - // - { - u3C.stderr_log_f = _cw_serf_send_stdr; - u3C.slog_f = _cw_serf_send_slog; - } - - u3V.xit_f = _cw_serf_exit; - -#if defined(SERF_TRACE_JAM) || defined(SERF_TRACE_CUE) - u3t_trace_open(u3V.dir_c); -#endif - - // start serf - // - { - _cw_serf_send(u3_serf_init(&u3V)); - } - - // start reading - // - u3_newt_read_sync(&inn_u); - - // enter loop - // - uv_run(lup_u, UV_RUN_DEFAULT); - u3m_stop(); -} - -/* _cw_disk_init(); open event log -*/ -static u3_disk* -_cw_disk_init(c3_c* dir_c) -{ - u3_disk_cb cb_u = {0}; - u3_disk* log_u = u3_disk_init(dir_c, cb_u); - - if ( !log_u ) { - fprintf(stderr, "unable to open event log\n"); - exit(1); - } - - return log_u; -} - -/* _cw_info(); print pier info -*/ -static void -_cw_info(c3_i argc, c3_c* argv[]) -{ - c3_assert( 3 <= argc ); - - c3_c* dir_c = argv[2]; - c3_d eve_d = u3m_boot(dir_c); - u3_disk* log_u = _cw_disk_init(dir_c); - - fprintf(stderr, "\r\nurbit: %s at event %" PRIu64 "\r\n", dir_c, eve_d); - - u3_disk_slog(log_u); - printf("\n"); - u3_lmdb_stat(log_u->mdb_u, stdout); - u3_disk_exit(log_u); - - u3m_stop(); -} - -/* _cw_grab(); gc pier. -*/ -static void -_cw_grab(c3_i argc, c3_c* argv[]) -{ - c3_assert( 3 <= argc ); - - c3_c* dir_c = argv[2]; - u3m_boot(dir_c); - u3C.wag_w |= u3o_hashless; - u3_serf_grab(); - u3m_stop(); -} - -/* _cw_cram(); jam persistent state (rock), and exit. -*/ -static void -_cw_cram(c3_i argc, c3_c* argv[]) -{ - c3_assert( 3 <= argc ); - - c3_c* dir_c = argv[2]; - c3_d eve_d = u3m_boot(dir_c); - u3_disk* log_u = _cw_disk_init(dir_c); // XX s/b try_aquire lock - c3_o ret_o; - - fprintf(stderr, "urbit: cram: preparing\r\n"); - - if ( c3n == (ret_o = u3u_cram(dir_c, eve_d)) ) { - fprintf(stderr, "urbit: cram: unable to jam state\r\n"); - } - else { - fprintf(stderr, "urbit: cram: rock saved at event %" PRIu64 "\r\n", eve_d); - } - - // save even on failure, as we just did all the work of deduplication - // - u3e_save(); - u3_disk_exit(log_u); - - if ( c3n == ret_o ) { - exit(1); - } - - u3m_stop(); -} - -/* _cw_queu(); cue rock, save, and exit. -*/ -static void -_cw_queu(c3_i argc, c3_c* argv[]) -{ - c3_assert( 4 <= argc ); - - c3_c* dir_c = argv[2]; - c3_c* eve_c = argv[3]; - c3_d eve_d; - - if ( 1 != sscanf(eve_c, "%" PRIu64 "", &eve_d) ) { - fprintf(stderr, "urbit: queu: invalid number '%s'\r\n", eve_c); - exit(1); - } - else { - u3_disk* log_u = _cw_disk_init(dir_c); // XX s/b try_aquire lock - - fprintf(stderr, "urbit: queu: preparing\r\n"); - - u3m_boot(dir_c); - - // XX can spuriously fail do to corrupt memory-image checkpoint, - // need a u3m_half_boot equivalent - // workaround is to delete/move the checkpoint in case of corruption - // - if ( c3n == u3u_uncram(dir_c, eve_d) ) { - fprintf(stderr, "urbit: queu: failed\r\n"); - exit(1); - } - - u3e_save(); - u3_disk_exit(log_u); - - fprintf(stderr, "urbit: queu: rock loaded at event %" PRIu64 "\r\n", eve_d); - u3m_stop(); - } -} - -/* _cw_uniq(); deduplicate persistent nouns -*/ -static void -_cw_meld(c3_i argc, c3_c* argv[]) -{ - c3_assert( 3 <= argc ); - - c3_c* dir_c = argv[2]; - u3_disk* log_u = _cw_disk_init(dir_c); // XX s/b try_aquire lock - c3_w pre_w; - - u3C.wag_w |= u3o_hashless; - u3m_boot(dir_c); - - pre_w = u3a_open(u3R); - u3u_meld(); - u3a_print_memory(stderr, "urbit: meld: gained", (u3a_open(u3R) - pre_w)); - - u3e_save(); - u3_disk_exit(log_u); - u3m_stop(); -} - -/* _cw_pack(); compact memory, save, and exit. -*/ -static void -_cw_pack(c3_i argc, c3_c* argv[]) -{ - c3_assert( 3 <= argc ); - - c3_c* dir_c = argv[2]; - u3_disk* log_u = _cw_disk_init(dir_c); // XX s/b try_aquire lock - - u3m_boot(dir_c); - u3a_print_memory(stderr, "urbit: pack: gained", u3m_pack()); - - u3e_save(); - u3_disk_exit(log_u); - u3m_stop(); -} - -/* _cw_utils(): "worker" utilities and "serf" entrypoint -*/ -static c3_i -_cw_utils(c3_i argc, c3_c* argv[]) -{ - // utility commands and positional arguments, by analogy - // - // $@ ~ :: usage - // $% [%cram dir=@t] :: jam state - // [%grab dir=@t] :: gc - // [%info dir=@t] :: print - // [%meld dir=@t] :: deduplicate - // [%pack dir=@t] :: defragment - // [%queu dir=@t eve=@ud] :: cue state - // :: :: ipc: - // [%serf dir=@t key=@t wag=@t hap=@ud eve=@ud] :: compute - // == - // - // NB: don't print to anything other than stderr; - // other streams may be used for ipc. - // - if ( (2 < argc) && 4 == strlen(argv[1]) ) { - c3_m mot_m; - { - c3_c* s = argv[1]; mot_m = c3_s4(s[0], s[1], s[2], s[3]); - } - - switch ( mot_m ) { - case c3__cram: _cw_cram(argc, argv); return 1; - case c3__grab: _cw_grab(argc, argv); return 1; - case c3__info: _cw_info(argc, argv); return 1; - case c3__meld: _cw_meld(argc, argv); return 1; - case c3__pack: _cw_pack(argc, argv); return 1; - case c3__queu: _cw_queu(argc, argv); return 1; - - case c3__serf: _cw_serf_commence(argc, argv); return 1; - } - } - - return 0; -} - -c3_i -main(c3_i argc, - c3_c** argv) -{ - // Parse options. - // - if ( _cw_utils(argc, argv) ) { - return 0; - } - else if ( c3n == _main_getopt(argc, argv) ) { - u3_ve_usage(argc, argv); - return 1; - } - - if ( !u3_Host.wrk_c ) { - u3_Host.wrk_c = strdup(argv[0]); - } - - if ( c3y == u3_Host.ops_u.dem ) { - // In daemon mode, run the urbit as a background process, but don't - // exit from the parent process until the ship is finished booting. - // - u3_daemon_init(); - } - - if ( c3y == u3_Host.ops_u.rep ) { - report(); - return 0; - } - - if ( c3y == u3_Host.ops_u.tex ) { - u3_Host.bot_f = _stop_on_boot_completed_cb; - } - -#if 0 - if ( 0 == getuid() ) { - chroot(u3_Host.dir_c); - u3_Host.dir_c = "/"; - } -#endif - u3_ve_sysopt(); - - // Block profiling signal, which should be delivered to exactly one thread. - // - // XX review, may be unnecessary due to similar in u3m_init() - // -#if defined(U3_OS_PROF) - if ( _(u3_Host.ops_u.pro) ) { - sigset_t set; - - sigemptyset(&set); - sigaddset(&set, SIGPROF); - if ( 0 != pthread_sigmask(SIG_BLOCK, &set, NULL) ) { - u3l_log("boot: thread mask SIGPROF: %s\r\n", strerror(errno)); - exit(1); - } - } -#endif - - #if !defined(U3_OS_mingw) - // Handle SIGTSTP as if it was SIGTERM. - // - // Configured here using signal() so as to be immediately available. - // - signal(SIGTSTP, _stop_exit); - #endif - - printf("~\n"); - // printf("welcome.\n"); - printf("urbit %s\n", URBIT_VERSION); - printf("boot: home is %s\n", u3_Host.dir_c); - // printf("vere: hostname is %s\n", u3_Host.ops_u.nam_c); - - if ( c3y == u3_Host.ops_u.dem ) { - printf("boot: running as daemon\n"); - } - - // Instantiate process globals. - { - /* Boot the image and checkpoint. Set flags. - */ - { - /* Set pier directory. - */ - u3C.dir_c = u3_Host.dir_c; - - /* Logging that doesn't interfere with console output. - */ - u3C.stderr_log_f = u3_term_io_log; - - /* Set GC flag. - */ - if ( _(u3_Host.ops_u.gab) ) { - u3C.wag_w |= u3o_debug_ram; - } - - /* Set profile flag. - */ - if ( _(u3_Host.ops_u.pro) ) { - u3C.wag_w |= u3o_debug_cpu; - } - - /* Set verbose flag. - */ - if ( _(u3_Host.ops_u.veb) ) { - u3C.wag_w |= u3o_verbose; - } - - /* Set quiet flag. - */ - if ( _(u3_Host.ops_u.qui) ) { - u3C.wag_w |= u3o_quiet; - } - - /* Set dry-run flag. - ** - ** XX also exit immediately? - */ - if ( _(u3_Host.ops_u.dry) ) { - u3C.wag_w |= u3o_dryrun; - } - - /* Set hashboard flag - */ - if ( _(u3_Host.ops_u.has) ) { - u3C.wag_w |= u3o_hashless; - } - - /* Set tracing flag - */ - if ( _(u3_Host.ops_u.tra) ) { - u3C.wag_w |= u3o_trace; - u3_Host.tra_u.nid_w = 0; - u3_Host.tra_u.fil_u = NULL; - u3_Host.tra_u.con_w = 0; - u3_Host.tra_u.fun_w = 0; - } - } - -#ifdef U3_OS_mingw - // Initialize event used to transmit Ctrl-C to worker process - // - { - SECURITY_ATTRIBUTES sa = {sizeof(sa), NULL, TRUE}; - if ( NULL == (u3_Host.cev_u = CreateEvent(&sa, FALSE, FALSE, NULL)) ) { - u3l_log("boot: failed to create Ctrl-C event: %d\r\n", GetLastError()); - exit(1); - } - } -#endif - - // starting u3m configures OpenSSL memory functions, so we must do it - // before any OpenSSL allocations - // - u3m_boot_lite(); - - // Initialize OpenSSL for client and server - // - { - SSL_library_init(); - SSL_load_error_strings(); - } - - // initialize curl - // - if ( 0 != curl_global_init(CURL_GLOBAL_DEFAULT) ) { - u3l_log("boot: curl initialization failed\r\n"); - exit(1); - } - - _setup_cert_store(); - u3K.ssl_curl_f = _setup_ssl_curl; - u3K.ssl_x509_f = _setup_ssl_x509; - - u3_king_commence(); - - // uninitialize curl - // - curl_global_cleanup(); - - // uninitialize OpenSSL - // - // see https://wiki.openssl.org/index.php/Library_Initialization - // - { - ENGINE_cleanup(); - CONF_modules_unload(1); - EVP_cleanup(); - CRYPTO_cleanup_all_ex_data(); - SSL_COMP_free_compression_methods(); - ERR_free_strings(); - } - } - - return 0; -} diff --git a/pkg/urbit/include/all.h b/pkg/urbit/include/all.h deleted file mode 100644 index ae647d865..000000000 --- a/pkg/urbit/include/all.h +++ /dev/null @@ -1,32 +0,0 @@ -# include "config.h" - /** c3: C environment. - **/ -# include "c/portable.h" // C and OS portability -# include "c/types.h" // c3 types -# include "c/defs.h" // c3 macros -# include "c/motes.h" // c3 constants - - /** u3: noun environment. - **/ -# include "noun/aliases.h" // general u3 - -# include "noun/allocate.h" // u3a: allocation -# include "noun/events.h" // u3e: persistence -# include "noun/hashtable.h" // u3h: hashtables -# include "noun/imprison.h" // u3i: noun construction -# include "noun/jets.h" // u3j: jet control -# include "noun/log.h" // u3l: logging -# include "noun/manage.h" // u3m: master state -# include "noun/nock.h" // u3n: nock execution -# include "noun/options.h" // u3o: config options -# include "noun/retrieve.h" // u3r: noun access (error returns) -# include "noun/serial.h" // u3s: serialization -# include "noun/trace.h" // u3t: profiling / tracing -# include "noun/xtract.h" // u3x: noun access (error crashes) -# include "noun/urth.h" // u3u: off-loom integration -# include "noun/vortex.h" // u3v: arvo kernel -# include "noun/zave.h" // u3z: memoization - -# include "jets/k.h" // u3k: jets (transfer, args) -# include "jets/q.h" // u3q: jets (retain, args) -# include "jets/w.h" // u3w: jets (retain, core) diff --git a/pkg/urbit/include/c/defs.h b/pkg/urbit/include/c/defs.h deleted file mode 100644 index 29198bc00..000000000 --- a/pkg/urbit/include/c/defs.h +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef C3_DEFS_H -#define C3_DEFS_H - - /** Loobeans - inverse booleans to match nock. - **/ -# define c3y 0 -# define c3n 1 - -# define _(x) (c3y == (x)) -# define __(x) ((x) ? c3y : c3n) -# define c3a(x, y) __(_(x) && _(y)) -# define c3o(x, y) __(_(x) || _(y)) - - - /** Random useful C macros. - **/ - /* Assert. Good to capture. - */ - -# if defined(ASAN_ENABLED) && defined(__clang__) -# define c3_assert(x) \ - do { \ - if (!(x)) { \ - c3_cooked(); \ - assert(x); \ - } \ - } while(0) -# else -# define c3_assert(x) \ - do { \ - if (!(x)) { \ - fflush(stderr); \ - fprintf(stderr, "\rAssertion '%s' " \ - "failed in %s:%d\r\n", \ - #x, __FILE__, __LINE__); \ - c3_cooked(); \ - assert(x); \ - } \ - } while(0) -#endif - - /* Stub. - */ -# define c3_stub c3_assert(!"stub") - - /* Size in words. - */ -# define c3_wiseof(x) (((sizeof (x)) + 3) >> 2) - - /* Bit counting. - */ -# define c3_bits_word(w) ((w) ? (32 - __builtin_clz(w)) : 0) - - /* Min and max. - */ -# define c3_max(x, y) ( ((x) > (y)) ? (x) : (y) ) -# define c3_min(x, y) ( ((x) < (y)) ? (x) : (y) ) - - /* Rotate. - */ -# define c3_rotw(r, x) ( ((x) << (r)) | ((x) >> (32 - (r))) ) - - /* Emergency stdio fix. - */ - int - c3_cooked(); - - /* Fill 16 words (64 bytes) with high-quality entropy. - */ - void - c3_rand(c3_w* rad_w); - - /* Short integers. - */ -# define c3_s1(a) ( (a) ) -# define c3_s2(a, b) ( ((b) << 8) | c3_s1(a) ) -# define c3_s3(a, b, c) ( ((c) << 16) | c3_s2(a, b) ) -# define c3_s4(a, b, c, d) ( ((d) << 24) | c3_s3(a, b, c) ) - -# define c3_s5(a, b, c, d, e) \ - ( ((uint64_t)c3_s1(e) << 32ULL) | c3_s4(a, b, c, d) ) -# define c3_s6(a, b, c, d, e, f) \ - ( ((uint64_t)c3_s2(e, f) << 32ULL) | c3_s4(a, b, c, d) ) -# define c3_s7(a, b, c, d, e, f, g) \ - ( ((uint64_t)c3_s3(e, f, g) << 32ULL) | c3_s4(a, b, c, d) ) -# define c3_s8(a, b, c, d, e, f, g, h) \ - ( ((uint64_t)c3_s4(e, f, g, h) << 32ULL) | c3_s4(a, b, c, d) ) - - /* Byte-order twiddling. - */ -# define c3_flip32(w) \ - ( (((w) >> 24) & 0xff) \ - | (((w) >> 16) & 0xff) << 8 \ - | (((w) >> 8) & 0xff) << 16 \ - | ( (w) & 0xff) << 24 ) - - /* Asserting allocators. - */ -# define c3_free(s) free(s) -# define c3_malloc(s) ({ \ - void* rut = malloc(s); \ - if ( 0 == rut ) { \ - fprintf(stderr, "c3_malloc(%" PRIu64 ") failed\r\n", \ - (c3_d)s); \ - c3_assert(!"memory lost"); \ - } \ - rut;}) -# define c3_calloc(s) ({ \ - void* rut = calloc(1,s); \ - if ( 0 == rut ) { \ - fprintf(stderr, "c3_calloc(%" PRIu64 ") failed\r\n", \ - (c3_d)s); \ - c3_assert(!"memory lost"); \ - } \ - rut;}) -# define c3_realloc(a, b) ({ \ - void* rut = realloc(a, b); \ - if ( 0 == rut ) { \ - fprintf(stderr, "c3_realloc(%" PRIu64 ") failed\r\n", \ - (c3_d)b); \ - c3_assert(!"memory lost"); \ - } \ - rut;}) - - /* Asserting unix fs wrappers. - ** - ** these all crash the process if passed a non-canonical - ** path (i.e., one containing '.', '..', or the empty path - ** component), so make sure you don't pass them one. if you - ** find yourself fighting with them, then please delete them - ** and do a sed search-and-replace to remove the `c3_` from - ** their call sites; their goal is to decrease maintenance - ** burden, not increase it. - */ - // defined in vere/io/unix.c. - c3_t u3_unix_cane(const c3_c* pax_c); -# define c3_open(a, ...) ({ \ - open(a, __VA_ARGS__);}) -# define c3_opendir(a) ({ \ - opendir(a);}) -# define c3_mkdir(a, b) ({ \ - mkdir(a, b);}) -# define c3_rmdir(a) ({ \ - rmdir(a);}) -# define c3_unlink(a) ({ \ - unlink(a);}) -# define c3_fopen(a, b) ({ \ - fopen(a, b);}) - -#endif /* ifndef C3_DEFS_H */ diff --git a/pkg/urbit/include/c/motes.h b/pkg/urbit/include/c/motes.h deleted file mode 100644 index fa428e4b2..000000000 --- a/pkg/urbit/include/c/motes.h +++ /dev/null @@ -1,1333 +0,0 @@ -#ifndef C3_MOTES_H -#define C3_MOTES_H - - /** Definitions. - **/ - -# define c3__a c3_s1('a') -# define c3__a50 c3_s3('a','5','0') -# define c3__abel c3_s4('a','b','e','l') -# define c3__abo c3_s3('a','b','o') -# define c3__actd c3_s4('a','c','t','d') -# define c3__add c3_s3('a','d','d') -# define c3__aka c3_s3('a','k','a') -# define c3__all c3_s3('a','l','l') -# define c3__alrm c3_s4('a','l','r','m') -# define c3__amat c3_s4('a','m','a','t') -# define c3__ames c3_s4('a','m','e','s') -# define c3__and c3_s3('a','n','d') -# define c3__ankh c3_s4('a','n','k','h') -# define c3__any c3_s3('a','n','y') -# define c3__ap c3_s2('a','p') -# define c3__apen c3_s4('a','p','e','n') -# define c3__aro c3_s3('a','r','o') -# define c3__arvo c3_s4('a','r','v','o') -# define c3__ash c3_s3('a','s','h') -# define c3__at c3_s2('a','t') -# define c3__atom c3_s4('a','t','o','m') -# define c3__auth c3_s4('a','u','t','h') -# define c3__auto c3_s4('a','u','t','o') -# define c3__avow c3_s4('a','v','o','w') -# define c3__ax c3_s2('a','x') -# define c3__axe c3_s3('a','x','e') -# define c3__axil c3_s4('a','x','i','l') -# define c3__axis c3_s4('a','x','i','s') -# define c3__b c3_s1('b') -# define c3__bac c3_s3('b','a','c') -# define c3__bach c3_s4('b','a','c','h') -# define c3__bag c3_s3('b','a','g') -# define c3__bail c3_s4('b','a','i','l') -# define c3__ball c3_s4('b','a','l','l') -# define c3__band c3_s4('b','a','n','d') -# define c3__bank c3_s4('b','a','n','k') -# define c3__bar c3_s3('b','a','r') -# define c3__bark c3_s4('b','a','r','k') -# define c3__barn c3_s4('b','a','r','n') -# define c3__base c3_s4('b','a','s','e') -# define c3__bask c3_s4('b','a','s','k') -# define c3__basp c3_s4('b','a','s','p') -# define c3__bbye c3_s4('b','b','y','e') -# define c3__bcbn c3_s4('b','c','b','n') -# define c3__bcbr c3_s4('b','c','b','r') -# define c3__bccb c3_s4('b','c','c','b') -# define c3__bccn c3_s4('b','c','c','n') -# define c3__bcdg c3_s4('b','c','d','g') -# define c3__bcdt c3_s4('b','c','d','t') -# define c3__bckt c3_s4('b','c','k','t') -# define c3__bclc c3_s4('b','c','l','c') -# define c3__bcmt c3_s4('b','c','m','t') -# define c3__bcpm c3_s4('b','c','p','m') -# define c3__bcpt c3_s4('b','c','p','t') -# define c3__bcsg c3_s4('b','c','s','g') -# define c3__bctr c3_s4('b','c','t','r') -# define c3__bcts c3_s4('b','c','t','s') -# define c3__bczp c3_s4('b','c','z','p') -# define c3__bead c3_s4('b','e','a','d') -# define c3__bean c3_s4('b','e','a','n') -# define c3__bear c3_s4('b','e','a','r') -# define c3__bede c3_s4('b','e','d','e') -# define c3__bee c3_s3('b','e','e') -# define c3__behn c3_s4('b','e','h','n') -# define c3__bel c3_s3('b','e','l') -# define c3__belt c3_s4('b','e','l','t') -# define c3__bend c3_s4('b','e','n','d') -# define c3__ber c3_s3('b','e','r') -# define c3__bias c3_s4('b','i','a','s') -# define c3__bic c3_s3('b','i','c') -# define c3__bind c3_s4('b','i','n','d') -# define c3__bink c3_s4('b','i','n','k') -# define c3__bird c3_s4('b','i','r','d') -# define c3__bit c3_s3('b','i','t') -# define c3__bl c3_s2('b','l') -# define c3__blan c3_s4('b','l','a','n') -# define c3__blap c3_s4('b','l','a','p') -# define c3__bleb c3_s4('b','l','e','b') -# define c3__blem c3_s4('b','l','e','m') -# define c3__blew c3_s4('b','l','e','w') -# define c3__blin c3_s4('b','l','i','n') -# define c3__blit c3_s4('b','l','i','t') -# define c3__blob c3_s4('b','l','o','b') -# define c3__blob c3_s4('b','l','o','b') -# define c3__blog c3_s4('b','l','o','g') -# define c3__bloq c3_s4('b','l','o','q') -# define c3__blot c3_s4('b','l','o','t') -# define c3__blow c3_s4('b','l','o','w') -# define c3__blue c3_s4('b','l','u','e') -# define c3__blur c3_s4('b','l','u','r') -# define c3__bndl c3_s4('b','n','d','l') -# define c3__bndp c3_s4('b','n','d','p') -# define c3__bnld c3_s4('b','n','l','d') -# define c3__bnnp c3_s4('b','n','n','p') -# define c3__bnpd c3_s4('b','n','p','d') -# define c3__bnps c3_s4('b','n','p','s') -# define c3__bnsp c3_s4('b','n','s','p') -# define c3__boat c3_s4('b','o','a','t') -# define c3__boce c3_s4('b','o','c','e') -# define c3__boil c3_s4('b','o','i','l') -# define c3__boin c3_s4('b','o','i','n') -# define c3__bolt c3_s4('b','o','l','t') -# define c3__bond c3_s4('b','o','n','d') -# define c3__bone c3_s4('b','o','n','e') -# define c3__bong c3_s4('b','o','n','g') -# define c3__book c3_s4('b','o','o','k') -# define c3__bool c3_s4('b','o','o','l') -# define c3__boot c3_s4('b','o','o','t') -# define c3__born c3_s4('b','o','r','n') -# define c3__both c3_s4('b','o','t','h') -# define c3__bout c3_s4('b','o','u','t') -# define c3__box c3_s3('b','o','x') -# define c3__br c3_s2('b','r') -# define c3__bran c3_s4('b','r','a','n') -# define c3__brax c3_s4('b','r','a','x') -# define c3__brbn c3_s4('b','r','b','n') -# define c3__brcb c3_s4('b','r','c','b') -# define c3__brcl c3_s4('b','r','c','l') -# define c3__brcn c3_s4('b','r','c','n') -# define c3__brcs c3_s4('b','r','c','s') -# define c3__brdg c3_s4('b','r','d','g') -# define c3__brdl c3_s4('b','r','d','l') -# define c3__brdp c3_s4('b','r','d','p') -# define c3__brdt c3_s4('b','r','d','t') -# define c3__brhp c3_s4('b','r','h','p') -# define c3__brip c3_s4('b','r','i','p') -# define c3__brkt c3_s4('b','r','k','t') -# define c3__brlc c3_s4('b','r','l','c') -# define c3__brld c3_s4('b','r','l','d') -# define c3__brls c3_s4('b','r','l','s') -# define c3__brms c3_s4('b','r','m','s') -# define c3__brmt c3_s4('b','r','m','t') -# define c3__brnp c3_s4('b','r','n','p') -# define c3__broc c3_s4('b','r','o','c') -# define c3__bron c3_s4('b','r','o','n') -# define c3__brop c3_s4('b','r','o','p') -# define c3__brov c3_s4('b','r','o','v') -# define c3__brpd c3_s4('b','r','p','d') -# define c3__brps c3_s4('b','r','p','s') -# define c3__brrt c3_s4('b','r','r','t') -# define c3__brsg c3_s4('b','r','s','g') -# define c3__brsp c3_s4('b','r','s','p') -# define c3__brtg c3_s4('b','r','t','g') -# define c3__brtr c3_s4('b','r','t','r') -# define c3__brts c3_s4('b','r','t','s') -# define c3__brvt c3_s4('b','r','v','t') -# define c3__brwt c3_s4('b','r','w','t') -# define c3__brzp c3_s4('b','r','z','p') -# define c3__bud c3_s3('b','u','d') -# define c3__bull c3_s4('b','u','l','l') -# define c3__bump c3_s4('b','u','m','p') -# define c3__bund c3_s4('b','u','n','d') -# define c3__bung c3_s4('b','u','n','g') -# define c3__bunk c3_s4('b','u','n','k') -# define c3__bunt c3_s4('b','u','n','t') -# define c3__bunx c3_s4('b','u','n','x') -# define c3__burn c3_s4('b','u','r','n') -# define c3__busk c3_s4('b','u','s','k') -# define c3__bust c3_s4('b','u','s','t') -# define c3__butt c3_s4('b','u','t','t') -# define c3__by c3_s2('b','y') -# define c3__byte c3_s4('b','y','t','e') -# define c3__c c3_s1('c') -# define c3__cage c3_s4('c','a','g','e') -# define c3__cain c3_s4('c','a','i','n') -# define c3__call c3_s4('c','a','l','l') -# define c3__can c3_s3('c','a','n') -# define c3__cap c3_s3('c','a','p') -# define c3__card c3_s4('c','a','r','d') -# define c3__carp c3_s4('c','a','r','p') -# define c3__cary c3_s4('c','a','r','y') -# define c3__case c3_s4('c','a','s','e') -# define c3__cash c3_s4('c','a','s','h') -# define c3__cast c3_s4('c','a','s','t') -# define c3__cat c3_s3('c','a','t') -# define c3__cato c3_s4('c','a','t','o') -# define c3__cay c3_s3('c','a','y') -# define c3__cbbn c3_s4('c','b','b','n') -# define c3__cbbr c3_s4('c','b','b','r') -# define c3__cbdg c3_s4('c','b','d','g') -# define c3__cbkt c3_s4('c','b','k','t') -# define c3__cblc c3_s4('c','b','l','c') -# define c3__cbmt c3_s4('c','b','m','t') -# define c3__cbpm c3_s4('c','b','p','m') -# define c3__cbtr c3_s4('c','b','t','r') -# define c3__cdr c3_s3('c','d','r') -# define c3__ce c3_s2('c','e') -# define c3__cell c3_s4('c','e','l','l') -# define c3__chaf c3_s4('c','h','a','f') -# define c3__chan c3_s4('c','h','a','n') -# define c3__chew c3_s4('c','h','e','w') -# define c3__chis c3_s4('c','h','i','s') -# define c3__chob c3_s4('c','h','o','b') -# define c3__chug c3_s4('c','h','u','g') -# define c3__claf c3_s4('c','l','a','f') -# define c3__clam c3_s4('c','l','a','m') -# define c3__clap c3_s4('c','l','a','p') -# define c3__clat c3_s4('c','l','a','t') -# define c3__clay c3_s4('c','l','a','y') -# define c3__clcb c3_s4('c','l','c','b') -# define c3__clcn c3_s4('c','l','c','n') -# define c3__clep c3_s4('c','l','e','p') -# define c3__clet c3_s4('c','l','e','t') -# define c3__clhp c3_s4('c','l','h','p') -# define c3__clip c3_s4('c','l','i','p') -# define c3__clkt c3_s4('c','l','k','t') -# define c3__clls c3_s4('c','l','l','s') -# define c3__clms c3_s4('c','l','m','s') -# define c3__clr c3_s3('c','l','r') -# define c3__clsg c3_s4('c','l','s','g') -# define c3__clsp c3_s4('c','l','s','p') -# define c3__cltr c3_s4('c','l','t','r') -# define c3__cnbc c3_s4('c','n','b','c') -# define c3__cnbr c3_s4('c','n','b','r') -# define c3__cncb c3_s4('c','n','c','b') -# define c3__cncl c3_s4('c','n','c','l') -# define c3__cndt c3_s4('c','n','d','t') -# define c3__cnhp c3_s4('c','n','h','p') -# define c3__cnhs c3_s4('c','n','h','s') -# define c3__cnhx c3_s4('c','n','h','x') -# define c3__cnkt c3_s4('c','n','k','t') -# define c3__cnls c3_s4('c','n','l','s') -# define c3__cnms c3_s4('c','n','m','s') -# define c3__cnpm c3_s4('c','n','p','m') -# define c3__cnsg c3_s4('c','n','s','g') -# define c3__cntr c3_s4('c','n','t','r') -# define c3__cnts c3_s4('c','n','t','s') -# define c3__cnzy c3_s4('c','n','z','y') -# define c3__cnzz c3_s4('c','n','z','z') -# define c3__coat c3_s4('c','o','a','t') -# define c3__code c3_s4('c','o','d','e') -# define c3__coin c3_s4('c','o','i','n') -# define c3__colb c3_s4('c','o','l','b') -# define c3__cold c3_s4('c','o','l','d') -# define c3__comb c3_s4('c','o','m','b') -# define c3__come c3_s4('c','o','m','e') -# define c3__con c3_s3('c','o','n') -# define c3__cone c3_s4('c','o','n','e') -# define c3__cong c3_s4('c','o','n','g') -# define c3__conn c3_s4('c','o','n','n') -# define c3__cons c3_s4('c','o','n','s') -# define c3__cook c3_s4('c','o','o','k') -# define c3__cool c3_s4('c','o','o','l') -# define c3__core c3_s4('c','o','r','e') -# define c3__corm c3_s4('c','o','r','m') -# define c3__corp c3_s4('c','o','r','p') -# define c3__corp c3_s4('c','o','r','p') -# define c3__cow c3_s3('c','o','w') -# define c3__cpu c3_s3('c','p','u') -# define c3__crad c3_s4('c','r','a','d') -# define c3__cram c3_s4('c','r','a','m') -# define c3__crap c3_s4('c','r','a','p') -# define c3__cret c3_s4('c','r','e','t') -# define c3__crib c3_s4('c','r','i','b') -# define c3__crof c3_s4('c','r','o','f') -# define c3__crop c3_s4('c','r','o','p') -# define c3__crot c3_s4('c','r','o','t') -# define c3__crud c3_s4('c','r','u','d') -# define c3__csbn c3_s4('c','s','b','n') -# define c3__csbr c3_s4('c','s','b','r') -# define c3__csdg c3_s4('c','s','d','g') -# define c3__csdl c3_s4('c','s','d','l') -# define c3__csdp c3_s4('c','s','d','p') -# define c3__csdt c3_s4('c','s','d','t') -# define c3__csin c3_s4('c','s','i','n') -# define c3__csip c3_s4('c','s','i','p') -# define c3__cslc c3_s4('c','s','l','c') -# define c3__csld c3_s4('c','s','l','d') -# define c3__csnp c3_s4('c','s','n','p') -# define c3__cspm c3_s4('c','s','p','m') -# define c3__csps c3_s4('c','s','p','s') -# define c3__csrt c3_s4('c','s','r','t') -# define c3__cssg c3_s4('c','s','s','g') -# define c3__cssp c3_s4('c','s','s','p') -# define c3__cstg c3_s4('c','s','t','g') -# define c3__cstr c3_s4('c','s','t','r') -# define c3__cszp c3_s4('c','s','z','p') -# define c3__ctl c3_s3('c','t','l') -# define c3__cttp c3_s4('c','t','t','p') -# define c3__cube c3_s4('c','u','b','e') -# define c3__cull c3_s4('c','u','l','l') -# define c3__curd c3_s4('c','u','r','d') -# define c3__cut c3_s3('c','u','t') -# define c3__cyl c3_s3('c','y','l') -# define c3__czar c3_s4('c','z','a','r') -# define c3__d c3_s1('d') -# define c3__da c3_s2('d','a') -# define c3__dago c3_s4('d','a','g','o') -# define c3__dant c3_s4('d','a','n','t') -# define c3__dast c3_s4('d','a','s','t') -# define c3__data c3_s4('d','a','t','a') -# define c3__dawn c3_s4('d','a','w','n') -# define c3__dbug c3_s4('d','b','u','g') -# define c3__dec c3_s3('d','e','c') -# define c3__deem c3_s4('d','e','e','m') -# define c3__deep c3_s4('d','e','e','p') -# define c3__defn c3_s4('d','e','f','n') -# define c3__del c3_s3('d','e','l') -# define c3__delc c3_s4('d','e','l','c') -# define c3__delt c3_s4('d','e','l','t') -# define c3__dept c3_s4('d','e','p','t') -# define c3__dext c3_s4('d','e','x','t') -# define c3__dgdp c3_s4('d','g','d','p') -# define c3__dgkt c3_s4('d','g','k','t') -# define c3__dgnp c3_s4('d','g','n','p') -# define c3__dgpd c3_s4('d','g','p','d') -# define c3__dgps c3_s4('d','g','p','s') -# define c3__dgrt c3_s4('d','g','r','t') -# define c3__dgsg c3_s4('d','g','s','g') -# define c3__dgsp c3_s4('d','g','s','p') -# define c3__dgtg c3_s4('d','g','t','g') -# define c3__dgtr c3_s4('d','g','t','r') -# define c3__dice c3_s4('d','i','c','e') -# define c3__die c3_s3('d','i','e') -# define c3__dill c3_s4('d','i','l','l') -# define c3__dire c3_s4('d','i','r','e') -# define c3__dirk c3_s4('d','i','r','k') -# define c3__dis c3_s3('d','i','s') -# define c3__dish c3_s4('d','i','s','h') -# define c3__disk c3_s4('d','i','s','k') -# define c3__div c3_s3('d','i','v') -# define c3__dmal c3_s4('d','m','a','l') -# define c3__do c3_s2('d','o') -# define c3__doc c3_s3('d','o','c') -# define c3__docs c3_s4('d','o','c','s') -# define c3__dogo c3_s4('d','o','g','o') -# define c3__dojo c3_s4('d','o','j','o') -# define c3__dome c3_s4('d','o','m','e') -# define c3__done c3_s4('d','o','n','e') -# define c3__doom c3_s4('d','o','o','m') -# define c3__door c3_s4('d','o','o','r') -# define c3__dorn c3_s4('d','o','r','n') -# define c3__dost c3_s4('d','o','s','t') -# define c3__dot c3_s3('d','o','t') -# define c3__doze c3_s4('d','o','z','e') -# define c3__drag c3_s4('d','r','a','g') -# define c3__draz c3_s4('d','r','a','z') -# define c3__drib c3_s4('d','r','i','b') -# define c3__drol c3_s4('d','r','o','l') -# define c3__dron c3_s4('d','r','o','n') -# define c3__drop c3_s4('d','r','o','p') -# define c3__drun c3_s4('d','r','u','n') -# define c3__dry c3_s3('d','r','y') -# define c3__dtbn c3_s4('d','t','b','n') -# define c3__dtcs c3_s4('d','t','c','s') -# define c3__dtdt c3_s4('d','t','d','t') -# define c3__dthx c3_s4('d','t','h','x') -# define c3__dtkt c3_s4('d','t','k','t') -# define c3__dtlc c3_s4('d','t','l','c') -# define c3__dtls c3_s4('d','t','l','s') -# define c3__dtpd c3_s4('d','t','p','d') -# define c3__dtps c3_s4('d','t','p','s') -# define c3__dtpt c3_s4('d','t','p','t') -# define c3__dtrt c3_s4('d','t','r','t') -# define c3__dtsg c3_s4('d','t','s','g') -# define c3__dttg c3_s4('d','t','t','g') -# define c3__dttr c3_s4('d','t','t','r') -# define c3__dtts c3_s4('d','t','t','s') -# define c3__dtwt c3_s4('d','t','w','t') -# define c3__dtzy c3_s4('d','t','z','y') -# define c3__dtzz c3_s4('d','t','z','z') -# define c3__dub c3_s3('d','u','b') -# define c3__duct c3_s4('d','u','c','t') -# define c3__duke c3_s4('d','u','k','e') -# define c3__dumb c3_s4('d','u','m','b') -# define c3__dump c3_s4('d','u','m','p') -# define c3__dust c3_s4('d','u','s','t') -# define c3__dxkt c3_s4('d','x','k','t') -# define c3__e c3_s1('e') -# define c3__earl c3_s4('e','a','r','l') -# define c3__east c3_s4('e','a','s','t') -# define c3__echo c3_s4('e','c','h','o') -# define c3__edge c3_s4('e','d','g','e') -# define c3__edit c3_s4('e','d','i','t') -# define c3__elm c3_s3('e','l','m') -# define c3__else c3_s4('e','l','s','e') -# define c3__emph c3_s4('e','m','p','h') -# define c3__end c3_s3('e','n','d') -# define c3__eq c3_s2('e','q') -# define c3__ergo c3_s4('e','r','g','o') -# define c3__esh c3_s3('e','s','h') -# define c3__etch c3_s4('e','t','c','h') -# define c3__ex c3_s2('e','x') -# define c3__exit c3_s4('e','x','i','t') -# define c3__eyre c3_s4('e','y','r','e') -# define c3__f c3_s1('f') -# define c3__fab c3_s3('f','a','b') -# define c3__face c3_s4('f','a','c','e') -# define c3__fail c3_s4('f','a','i','l') -# define c3__fair c3_s4('f','a','i','r') -# define c3__fake c3_s4('f','a','k','e') -# define c3__fan c3_s3('f','a','n') -# define c3__farg c3_s4('f','a','r','g') -# define c3__fast c3_s4('f','a','s','t') -# define c3__fdec c3_s4('f','d','e','c') -# define c3__felk c3_s4('f','e','l','k') -# define c3__feng c3_s4('f','e','n','g') -# define c3__fent c3_s4('f','e','n','t') -# define c3__ferd c3_s4('f','e','r','d') -# define c3__fhex c3_s4('f','h','e','x') -# define c3__file c3_s4('f','i','l','e') -# define c3__film c3_s4('f','i','l','m') -# define c3__find c3_s4('f','i','n','d') -# define c3__fine c3_s4('f','i','n','e') -# define c3__fing c3_s4('f','i','n','g') -# define c3__fink c3_s4('f','i','n','k') -# define c3__fino c3_s4('f','i','n','o') -# define c3__fir c3_s3('f','i','r') -# define c3__fire c3_s4('f','i','r','e') -# define c3__firm c3_s4('f','i','r','m') -# define c3__fish c3_s4('f','i','s','h') -# define c3__fist c3_s4('f','i','s','t') -# define c3__fit c3_s3('f','i','t') -# define c3__fits c3_s4('f','i','t','s') -# define c3__fix c3_s3('f','i','x') -# define c3__fl c3_s2('f','l') -# define c3__flac c3_s4('f','l','a','c') -# define c3__flag c3_s4('f','l','a','g') -# define c3__flat c3_s4('f','l','a','t') -# define c3__flec c3_s4('f','l','e','c') -# define c3__flet c3_s4('f','l','e','t') -# define c3__flic c3_s4('f','l','i','c') -# define c3__flip c3_s4('f','l','i','p') -# define c3__flit c3_s4('f','l','i','t') -# define c3__flog c3_s4('f','l','o','g') -# define c3__flot c3_s4('f','l','o','t') -# define c3__flow c3_s4('f','l','o','w') -# define c3__fon c3_s3('f','o','n') -# define c3__fond c3_s4('f','o','n','d') -# define c3__for c3_s3('f','o','r') -# define c3__forb c3_s4('f','o','r','b') -# define c3__fore c3_s4('f','o','r','e') -# define c3__fork c3_s4('f','o','r','k') -# define c3__form c3_s4('f','o','r','m') -# define c3__forq c3_s4('f','o','r','q') -# define c3__foul c3_s4('f','o','u','l') -# define c3__frag c3_s4('f','r','a','g') -# define c3__free c3_s4('f','r','e','e') -# define c3__frez c3_s4('f','r','e','z') -# define c3__frit c3_s4('f','r','i','t') -# define c3__frog c3_s4('f','r','o','g') -# define c3__from c3_s4('f','r','o','m') -# define c3__fron c3_s4('f','r','o','n') -# define c3__fry c3_s3('f','r','y') -# define c3__fuge c3_s4('f','u','g','e') -# define c3__full c3_s4('f','u','l','l') -# define c3__fume c3_s4('f','u','m','e') -# define c3__fun c3_s3('f','u','n') -# define c3__fund c3_s4('f','u','n','d') -# define c3__fung c3_s4('f','u','n','g') -# define c3__funk c3_s4('f','u','n','k') -# define c3__fuse c3_s4('f','u','s','e') -# define c3__fuss c3_s4('f','u','s','s') -# define c3__fyrd c3_s4('f','y','r','d') -# define c3__gab c3_s3('g','a','b') -# define c3__galb c3_s4('g','a','l','b') -# define c3__gald c3_s4('g','a','l','d') -# define c3__galk c3_s4('g','a','l','k') -# define c3__game c3_s4('g','a','m','e') -# define c3__gamp c3_s4('g','a','m','p') -# define c3__gant c3_s4('g','a','n','t') -# define c3__garc c3_s4('g','a','r','c') -# define c3__gate c3_s4('g','a','t','e') -# define c3__gath c3_s4('g','a','t','h') -# define c3__ge c3_s2('g','e') -# define c3__gear c3_s4('g','e','a','r') -# define c3__gen c3_s3('g','e','n') -# define c3__gene c3_s4('g','e','n','e') -# define c3__germ c3_s4('g','e','r','m') -# define c3__get c3_s3('g','e','t') -# define c3__give c3_s4('g','i','v','e') -# define c3__glax c3_s4('g','l','a','x') -# define c3__glaz c3_s4('g','l','a','z') -# define c3__gleb c3_s4('g','l','e','b') -# define c3__glem c3_s4('g','l','e','m') -# define c3__glid c3_s4('g','l','i','d') -# define c3__glon c3_s4('g','l','o','n') -# define c3__glop c3_s4('g','l','o','p') -# define c3__gluc c3_s4('g','l','u','c') -# define c3__glue c3_s4('g','l','u','e') -# define c3__gnom c3_s4('g','n','o','m') -# define c3__gnum c3_s4('g','n','u','m') -# define c3__go c3_s2('g','o') -# define c3__goat c3_s4('g','o','a','t') -# define c3__gold c3_s4('g','o','l','d') -# define c3__good c3_s4('g','o','o','d') -# define c3__gorm c3_s4('g','o','r','m') -# define c3__goto c3_s4('g','o','t','o') -# define c3__grab c3_s4('g','r','a','b') -# define c3__grad c3_s4('g','r','a','d') -# define c3__gram c3_s4('g','r','a','m') -# define c3__gran c3_s4('g','r','a','n') -# define c3__grat c3_s4('g','r','a','t') -# define c3__gray c3_s4('g','r','a','y') -# define c3__grel c3_s4('g','r','e','l') -# define c3__gret c3_s4('g','r','e','t') -# define c3__grik c3_s4('g','r','i','k') -# define c3__gril c3_s4('g','r','i','l') -# define c3__grip c3_s4('g','r','i','p') -# define c3__grit c3_s4('g','r','i','t') -# define c3__griv c3_s4('g','r','i','v') -# define c3__grix c3_s4('g','r','i','x') -# define c3__grop c3_s4('g','r','o','p') -# define c3__grun c3_s4('g','r','u','n') -# define c3__gt c3_s2('g','t') -# define c3__gulf c3_s4('g','u','l','f') -# define c3__gull c3_s4('g','u','l','l') -# define c3__gult c3_s4('g','u','l','t') -# define c3__gund c3_s4('g','u','n','d') -# define c3__gunn c3_s4('g','u','n','n') -# define c3__hack c3_s4('h','a','c','k') -# define c3__hail c3_s4('h','a','i','l') -# define c3__hair c3_s4('h','a','i','r') -# define c3__hake c3_s4('h','a','k','e') -# define c3__halc c3_s4('h','a','l','c') -# define c3__hand c3_s4('h','a','n','d') -# define c3__hang c3_s4('h','a','n','g') -# define c3__hard c3_s4('h','a','r','d') -# define c3__harm c3_s4('h','a','r','m') -# define c3__harp c3_s4('h','a','r','p') -# define c3__have c3_s4('h','a','v','e') -# define c3__head c3_s4('h','e','a','d') -# define c3__heal c3_s4('h','e','a','l') -# define c3__hear c3_s4('h','e','a','r') -# define c3__hela c3_s4('h','e','l','a') -# define c3__helm c3_s4('h','e','l','m') -# define c3__helo c3_s4('h','e','l','o') -# define c3__help c3_s4('h','e','l','p') -# define c3__hep c3_s3('h','e','p') -# define c3__hept c3_s4('h','e','p','t') -# define c3__herb c3_s4('h','e','r','b') -# define c3__hevy c3_s4('h','e','v','y') -# define c3__hez c3_s3('h','e','z') -# define c3__hide c3_s4('h','i','d','e') -# define c3__high c3_s4('h','i','g','h') -# define c3__hike c3_s4('h','i','k','e') -# define c3__hill c3_s4('h','i','l','l') -# define c3__hind c3_s4('h','i','n','d') -# define c3__hint c3_s4('h','i','n','t') -# define c3__hit c3_s3('h','i','t') -# define c3__hmal c3_s4('h','m','a','l') -# define c3__hold c3_s4('h','o','l','d') -# define c3__hole c3_s4('h','o','l','e') -# define c3__holt c3_s4('h','o','l','t') -# define c3__home c3_s4('h','o','m','e') -# define c3__homp c3_s4('h','o','m','p') -# define c3__hook c3_s4('h','o','o','k') -# define c3__hoon c3_s4('h','o','o','n') -# define c3__hop c3_s3('h','o','p') -# define c3__hosc c3_s4('h','o','s','c') -# define c3__hose c3_s4('h','o','s','e') -# define c3__howl c3_s4('h','o','w','l') -# define c3__hrul c3_s4('h','r','u','l') -# define c3__hsbn c3_s4('h','s','b','n') -# define c3__hsbr c3_s4('h','s','b','r') -# define c3__hscn c3_s4('h','s','c','n') -# define c3__hsdg c3_s4('h','s','d','g') -# define c3__hskt c3_s4('h','s','k','t') -# define c3__hslc c3_s4('h','s','l','c') -# define c3__hsmt c3_s4('h','s','m','t') -# define c3__hspm c3_s4('h','s','p','m') -# define c3__hssg c3_s4('h','s','s','g') -# define c3__hstr c3_s4('h','s','t','r') -# define c3__hsts c3_s4('h','s','t','s') -# define c3__htcn c3_s4('h','t','c','n') -# define c3__htls c3_s4('h','t','l','s') -# define c3__html c3_s4('h','t','m','l') -# define c3__htmt c3_s4('h','t','m','t') -# define c3__http c3_s4('h','t','t','p') -# define c3__hume c3_s4('h','u','m','e') -# define c3__hunk c3_s4('h','u','n','k') -# define c3__hxgl c3_s4('h','x','g','l') -# define c3__hxgr c3_s4('h','x','g','r') -# define c3__hxtr c3_s4('h','x','t','r') -# define c3__hxts c3_s4('h','x','t','s') -# define c3__i c3_s1('i') -# define c3__ic c3_s2('i','c') -# define c3__ice c3_s3('i','c','e') -# define c3__iced c3_s4('i','c','e','d') -# define c3__id c3_s2('i','d') -# define c3__if c3_s2('i','f') -# define c3__ifix c3_s4('i','f','i','x') -# define c3__in c3_s2('i','n') -# define c3__inc c3_s3('i','n','c') -# define c3__info c3_s4('i','n','f','o') -# define c3__init c3_s4('i','n','i','t') -# define c3__ins c3_s3('i','n','s') -# define c3__into c3_s4('i','n','t','o') -# define c3__intr c3_s4('i','n','t','r') -# define c3__inuk c3_s4('i','n','u','k') -# define c3__ipv4 c3_s4('i','p','v','4') -# define c3__iron c3_s4('i','r','o','n') -# define c3__is c3_s2('i','s') -# define c3__item c3_s4('i','t','e','m') -# define c3__ix c3_s2('i','x') -# define c3__j c3_s1('j') -# define c3__jack c3_s4('j','a','c','k') -# define c3__jam c3_s3('j','a','m') -# define c3__jamx c3_s4('j','a','m','x') -# define c3__jamz c3_s4('j','a','m','z') -# define c3__jato c3_s4('j','a','t','o') -# define c3__jet c3_s3('j','e','t') -# define c3__jetd c3_s4('j','e','t','d') -# define c3__just c3_s4('j','u','s','t') -# define c3__k c3_s1('k') -# define c3__khan c3_s4('k','h','a','n') -# define c3__keep c3_s4('k','e','e','p') -# define c3__kern c3_s4('k','e','r','n') -# define c3__kgo c3_s3('k','g','o') -# define c3__kick c3_s4('k','i','c','k') -# define c3__king c3_s4('k','i','n','g') -# define c3__kit c3_s3('k','i','t') -# define c3__klr c3_s3('k','l','r') -# define c3__knit c3_s4('k','n','i','t') -# define c3__kno c3_s3('k','n','o') -# define c3__ktbc c3_s4('k','t','b','c') -# define c3__ktbn c3_s4('k','t','b','n') -# define c3__ktbr c3_s4('k','t','b','r') -# define c3__ktcb c3_s4('k','t','c','b') -# define c3__ktcl c3_s4('k','t','c','l') -# define c3__ktcn c3_s4('k','t','c','n') -# define c3__ktcs c3_s4('k','t','c','s') -# define c3__ktdg c3_s4('k','t','d','g') -# define c3__ktdl c3_s4('k','t','d','l') -# define c3__ktdp c3_s4('k','t','d','p') -# define c3__ktdt c3_s4('k','t','d','t') -# define c3__ktgl c3_s4('k','t','g','l') -# define c3__ktgr c3_s4('k','t','g','r') -# define c3__kthp c3_s4('k','t','h','p') -# define c3__kthx c3_s4('k','t','h','x') -# define c3__ktlc c3_s4('k','t','l','c') -# define c3__ktld c3_s4('k','t','l','d') -# define c3__ktls c3_s4('k','t','l','s') -# define c3__ktms c3_s4('k','t','m','s') -# define c3__ktmt c3_s4('k','t','m','t') -# define c3__ktnp c3_s4('k','t','n','p') -# define c3__ktpd c3_s4('k','t','p','d') -# define c3__ktpm c3_s4('k','t','p','m') -# define c3__ktps c3_s4('k','t','p','s') -# define c3__ktpt c3_s4('k','t','p','t') -# define c3__ktrt c3_s4('k','t','r','t') -# define c3__ktsg c3_s4('k','t','s','g') -# define c3__ktsp c3_s4('k','t','s','p') -# define c3__kttg c3_s4('k','t','t','g') -# define c3__kttr c3_s4('k','t','t','r') -# define c3__ktts c3_s4('k','t','t','s') -# define c3__ktwt c3_s4('k','t','w','t') -# define c3__ktzp c3_s4('k','t','z','p') -# define c3__lamb c3_s4('l','a','m','b') -# define c3__lame c3_s4('l','a','m','e') -# define c3__lang c3_s4('l','a','n','g') -# define c3__lask c3_s4('l','a','s','k') -# define c3__last c3_s4('l','a','s','t') -# define c3__lcdl c3_s4('l','c','d','l') -# define c3__lcdp c3_s4('l','c','d','p') -# define c3__lcld c3_s4('l','c','l','d') -# define c3__lcnp c3_s4('l','c','n','p') -# define c3__lcpd c3_s4('l','c','p','d') -# define c3__lcps c3_s4('l','c','p','s') -# define c3__lcsp c3_s4('l','c','s','p') -# define c3__le c3_s2('l','e') -# define c3__lead c3_s4('l','e','a','d') -# define c3__leaf c3_s4('l','e','a','f') -# define c3__leap c3_s4('l','e','a','p') -# define c3__lect c3_s4('l','e','c','t') -# define c3__lee c3_s3('l','e','e') -# define c3__leg c3_s3('l','e','g') -# define c3__lest c3_s4('l','e','s','t') -# define c3__lg c3_s2('l','g') -# define c3__lib c3_s3('l','i','b') -# define c3__libd c3_s4('l','i','b','d') -# define c3__life c3_s4('l','i','f','e') -# define c3__lift c3_s4('l','i','f','t') -# define c3__like c3_s4('l','i','k','e') -# define c3__limb c3_s4('l','i','m','b') -# define c3__lin c3_s3('l','i','n') -# define c3__line c3_s4('l','i','n','e') -# define c3__link c3_s4('l','i','n','k') -# define c3__lint c3_s4('l','i','n','t') -# define c3__liqd c3_s4('l','i','q','d') -# define c3__lisc c3_s4('l','i','s','c') -# define c3__list c3_s4('l','i','s','t') -# define c3__lite c3_s4('l','i','t','e') -# define c3__live c3_s4('l','i','v','e') -# define c3__load c3_s4('l','o','a','d') -# define c3__loaf c3_s4('l','o','a','f') -# define c3__log c3_s3('l','o','g') -# define c3__logo c3_s4('l','o','g','o') -# define c3__lome c3_s4('l','o','m','e') -# define c3__lond c3_s4('l','o','n','d') -# define c3__lonk c3_s4('l','o','n','k') -# define c3__look c3_s4('l','o','o','k') -# define c3__loop c3_s4('l','o','o','p') -# define c3__lorb c3_s4('l','o','r','b') -# define c3__lord c3_s4('l','o','r','d') -# define c3__lort c3_s4('l','o','r','t') -# define c3__lose c3_s4('l','o','s','e') -# define c3__loss c3_s4('l','o','s','s') -# define c3__lost c3_s4('l','o','s','t') -# define c3__low c3_s3('l','o','w') -# define c3__lsh c3_s3('l','s','h') -# define c3__lt c3_s2('l','t') -# define c3__lull c3_s4('l','u','l','l') -# define c3__lunt c3_s4('l','u','n','t') -# define c3__mach c3_s4('m','a','c','h') -# define c3__mack c3_s4('m','a','c','k') -# define c3__main c3_s4('m','a','i','n') -# define c3__make c3_s4('m','a','k','e') -# define c3__malg c3_s4('m','a','l','g') -# define c3__malk c3_s4('m','a','l','k') -# define c3__mang c3_s4('m','a','n','g') -# define c3__many c3_s4('m','a','n','y') -# define c3__map c3_s3('m','a','p') -# define c3__marg c3_s4('m','a','r','g') -# define c3__mark c3_s4('m','a','r','k') -# define c3__marn c3_s4('m','a','r','n') -# define c3__mash c3_s4('m','a','s','h') -# define c3__mass c3_s4('m','a','s','s') -# define c3__mast c3_s4('m','a','s','t') -# define c3__mate c3_s4('m','a','t','e') -# define c3__mave c3_s4('m','a','v','e') -# define c3__mean c3_s4('m','e','a','n') -# define c3__mega c3_s4('m','e','g','a') -# define c3__meh c3_s3('m','e','h') -# define c3__meld c3_s4('m','e','l','d') -# define c3__melt c3_s4('m','e','l','t') -# define c3__meme c3_s4('m','e','m','e') -# define c3__memo c3_s4('m','e','m','o') -# define c3__menu c3_s4('m','e','n','u') -# define c3__mesh c3_s4('m','e','s','h') -# define c3__met c3_s3('m','e','t') -# define c3__meta c3_s4('m','e','t','a') -# define c3__mill c3_s4('m','i','l','l') -# define c3__mime c3_s4('m','i','m','e') -# define c3__mine c3_s4('m','i','n','e') -# define c3__mint c3_s4('m','i','n','t') -# define c3__mirt c3_s4('m','i','r','t') -# define c3__miss c3_s4('m','i','s','s') -# define c3__mix c3_s3('m','i','x') -# define c3__moat c3_s4('m','o','a','t') -# define c3__mod c3_s3('m','o','d') -# define c3__mold c3_s4('m','o','l','d') -# define c3__mong c3_s4('m','o','n','g') -# define c3__mono c3_s4('m','o','n','o') -# define c3__mook c3_s4('m','o','o','k') -# define c3__moot c3_s4('m','o','o','t') -# define c3__mor c3_s3('m','o','r') -# define c3__move c3_s4('m','o','v','e') -# define c3__moze c3_s4('m','o','z','e') -# define c3__mtbn c3_s4('m','t','b','n') -# define c3__mtbr c3_s4('m','t','b','r') -# define c3__mtdg c3_s4('m','t','d','g') -# define c3__mtdp c3_s4('m','t','d','p') -# define c3__mtdt c3_s4('m','t','d','t') -# define c3__mtkt c3_s4('m','t','k','t') -# define c3__mtlc c3_s4('m','t','l','c') -# define c3__mtnp c3_s4('m','t','n','p') -# define c3__mtpd c3_s4('m','t','p','d') -# define c3__mtps c3_s4('m','t','p','s') -# define c3__mtrt c3_s4('m','t','r','t') -# define c3__mtsg c3_s4('m','t','s','g') -# define c3__mtsp c3_s4('m','t','s','p') -# define c3__mttg c3_s4('m','t','t','g') -# define c3__mttr c3_s4('m','t','t','r') -# define c3__mul c3_s3('m','u','l') -# define c3__mull c3_s4('m','u','l','l') -# define c3__mung c3_s4('m','u','n','g') -# define c3__mut c3_s3('m','u','t') -# define c3__n c3_s1('n') -# define c3__na c3_s2('n','a') -# define c3__nail c3_s4('n','a','i','l') -# define c3__name c3_s4('n','a','m','e') -# define c3__nap c3_s3('n','a','p') -# define c3__nara c3_s4('n','a','r','a') -# define c3__narv c3_s4('n','a','r','v') -# define c3__ne c3_s2('n','e') -# define c3__need c3_s4('n','e','e','d') -# define c3__neft c3_s4('n','e','f','t') -# define c3__nest c3_s4('n','e','s','t') -# define c3__netd c3_s4('n','e','t','d') -# define c3__new c3_s3('n','e','w') -# define c3__news c3_s4('n','e','w','s') -# define c3__newt c3_s4('n','e','w','t') -# define c3__next c3_s4('n','e','x','t') -# define c3__nich c3_s4('n','i','c','h') -# define c3__nick c3_s4('n','i','c','k') -# define c3__nil c3_s3('n','i','l') -# define c3__nilk c3_s4('n','i','l','k') -# define c3__no c3_s2('n','o') -# define c3__noah c3_s4('n','o','a','h') -# define c3__nock c3_s4('n','o','c','k') -# define c3__noco c3_s4('n','o','c','o') -# define c3__none c3_s4('n','o','n','e') -# define c3__noop c3_s4('n','o','o','p') -# define c3__nop c3_s3('n','o','p') -# define c3__norm c3_s4('n','o','r','m') -# define c3__nost c3_s4('n','o','s','t') -# define c3__not c3_s3('n','o','t') -# define c3__note c3_s4('n','o','t','e') -# define c3__noun c3_s4('n','o','u','n') -# define c3__nt c3_s2('n','t') -# define c3__nub c3_s3('n','u','b') -# define c3__null c3_s4('n','u','l','l') -# define c3__nz c3_s2('n','z') -# define c3__oak c3_s3('o','a','k') -# define c3__of c3_s2('o','f') -# define c3__off c3_s3('o','f','f') -# define c3__ogre c3_s4('o','g','r','e') -# define c3__old c3_s3('o','l','d') -# define c3__omen c3_s4('o','m','e','n') -# define c3__on c3_s2('o','n') -# define c3__onan c3_s4('o','n','a','n') -# define c3__once c3_s4('o','n','c','e') -# define c3__one c3_s3('o','n','e') -# define c3__only c3_s4('o','n','l','y') -# define c3__oops c3_s4('o','o','p','s') -# define c3__op c3_s2('o','p') -# define c3__open c3_s4('o','p','e','n') -# define c3__opts c3_s4('o','p','t','s') -# define c3__or c3_s2('o','r') -# define c3__ord c3_s3('o','r','d') -# define c3__orth c3_s4('o','r','t','h') -# define c3__outd c3_s4('o','u','t','d') -# define c3__ov c3_s2('o','v') -# define c3__over c3_s4('o','v','e','r') -# define c3__ovum c3_s4('o','v','u','m') -# define c3__p c3_s1('p') -# define c3__pack c3_s4('p','a','c','k') -# define c3__pair c3_s4('p','a','i','r') -# define c3__palm c3_s4('p','a','l','m') -# define c3__palq c3_s4('p','a','l','q') -# define c3__palt c3_s4('p','a','l','t') -# define c3__pan c3_s3('p','a','n') -# define c3__pane c3_s4('p','a','n','e') -# define c3__pang c3_s4('p','a','n','g') -# define c3__pank c3_s4('p','a','n','k') -# define c3__para c3_s4('p','a','r','a') -# define c3__park c3_s4('p','a','r','k') -# define c3__parq c3_s4('p','a','r','q') -# define c3__part c3_s4('p','a','r','t') -# define c3__pass c3_s4('p','a','s','s') -# define c3__past c3_s4('p','a','s','t') -# define c3__pawn c3_s4('p','a','w','n') -# define c3__peek c3_s4('p','e','e','k') -# define c3__peel c3_s4('p','e','e','l') -# define c3__peep c3_s4('p','e','e','p') -# define c3__peft c3_s4('p','e','f','t') -# define c3__peg c3_s3('p','e','g') -# define c3__peld c3_s4('p','e','l','d') -# define c3__pen c3_s3('p','e','n') -# define c3__per c3_s3('p','e','r') -# define c3__perd c3_s4('p','e','r','d') -# define c3__pesk c3_s4('p','e','s','k') -# define c3__pfix c3_s4('p','f','i','x') -# define c3__pick c3_s4('p','i','c','k') -# define c3__pier c3_s4('p','i','e','r') -# define c3__pike c3_s4('p','i','k','e') -# define c3__pile c3_s4('p','i','l','e') -# define c3__pill c3_s4('p','i','l','l') -# define c3__ping c3_s4('p','i','n','g') -# define c3__pink c3_s4('p','i','n','k') -# define c3__pip c3_s3('p','i','p') -# define c3__pipe c3_s4('p','i','p','e') -# define c3__pith c3_s4('p','i','t','h') -# define c3__pitt c3_s4('p','i','t','t') -# define c3__plac c3_s4('p','l','a','c') -# define c3__plam c3_s4('p','l','a','m') -# define c3__plat c3_s4('p','l','a','t') -# define c3__play c3_s4('p','l','a','y') -# define c3__plaz c3_s4('p','l','a','z') -# define c3__plem c3_s4('p','l','e','m') -# define c3__plet c3_s4('p','l','e','t') -# define c3__plic c3_s4('p','l','i','c') -# define c3__plin c3_s4('p','l','i','n') -# define c3__plom c3_s4('p','l','o','m') -# define c3__plov c3_s4('p','l','o','v') -# define c3__plug c3_s4('p','l','u','g') -# define c3__plus c3_s4('p','l','u','s') -# define c3__pmbn c3_s4('p','m','b','n') -# define c3__pmcl c3_s4('p','m','c','l') -# define c3__pmcn c3_s4('p','m','c','n') -# define c3__pmdg c3_s4('p','m','d','g') -# define c3__pmdp c3_s4('p','m','d','p') -# define c3__pmdt c3_s4('p','m','d','t') -# define c3__pmlc c3_s4('p','m','l','c') -# define c3__pmls c3_s4('p','m','l','s') -# define c3__pmms c3_s4('p','m','m','s') -# define c3__pmmt c3_s4('p','m','m','t') -# define c3__pmpd c3_s4('p','m','p','d') -# define c3__pmps c3_s4('p','m','p','s') -# define c3__pmsp c3_s4('p','m','s','p') -# define c3__pmtr c3_s4('p','m','t','r') -# define c3__pmts c3_s4('p','m','t','s') -# define c3__pmzp c3_s4('p','m','z','p') -# define c3__pnut c3_s4('p','n','u','t') -# define c3__pock c3_s4('p','o','c','k') -# define c3__poke c3_s4('p','o','k','e') -# define c3__poll c3_s4('p','o','l','l') -# define c3__poly c3_s4('p','o','l','y') -# define c3__pont c3_s4('p','o','n','t') -# define c3__poos c3_s4('p','o','o','s') -# define c3__pop c3_s3('p','o','p') -# define c3__port c3_s4('p','o','r','t') -# define c3__pos c3_s3('p','o','s') -# define c3__pose c3_s4('p','o','s','e') -# define c3__post c3_s4('p','o','s','t') -# define c3__pray c3_s4('p','r','a','y') -# define c3__prec c3_s4('p','r','e','c') -# define c3__pret c3_s4('p','r','e','t') -# define c3__prex c3_s4('p','r','e','x') -# define c3__pril c3_s4('p','r','i','l') -# define c3__pro c3_s3('p','r','o') -# define c3__prod c3_s4('p','r','o','d') -# define c3__prof c3_s4('p','r','o','f') -# define c3__prox c3_s4('p','r','o','x') -# define c3__psdg c3_s4('p','s','d','g') -# define c3__puck c3_s4('p','u','c','k') -# define c3__pull c3_s4('p','u','l','l') -# define c3__pult c3_s4('p','u','l','t') -# define c3__pung c3_s4('p','u','n','g') -# define c3__punk c3_s4('p','u','n','k') -# define c3__punt c3_s4('p','u','n','t') -# define c3__pure c3_s4('p','u','r','e') -# define c3__push c3_s4('p','u','s','h') -# define c3__put c3_s3('p','u','t') -# define c3__quac c3_s4('q','u','a','c') -# define c3__qual c3_s4('q','u','a','l') -# define c3__quat c3_s4('q','u','a','t') -# define c3__quax c3_s4('q','u','a','x') -# define c3__quem c3_s4('q','u','e','m') -# define c3__ques c3_s4('q','u','e','s') -# define c3__quet c3_s4('q','u','e','t') -# define c3__queu c3_s4('q','u','e','u') -# define c3__quid c3_s4('q','u','i','d') -# define c3__quil c3_s4('q','u','i','l') -# define c3__quix c3_s4('q','u','i','x') -# define c3__quiz c3_s4('q','u','i','z') -# define c3__quol c3_s4('q','u','o','l') -# define c3__quop c3_s4('q','u','o','p') -# define c3__rack c3_s4('r','a','c','k') -# define c3__rald c3_s4('r','a','l','d') -# define c3__ramp c3_s4('r','a','m','p') -# define c3__rasp c3_s4('r','a','s','p') -# define c3__raw c3_s3('r','a','w') -# define c3__read c3_s4('r','e','a','d') -# define c3__reck c3_s4('r','e','c','k') -# define c3__reef c3_s4('r','e','e','f') -# define c3__resd c3_s4('r','e','s','d') -# define c3__rest c3_s4('r','e','s','t') -# define c3__ret c3_s3('r','e','t') -# define c3__revo c3_s4('r','e','v','o') -# define c3__rez c3_s3('r','e','z') -# define c3__rin c3_s3('r','i','n') -# define c3__ring c3_s4('r','i','n','g') -# define c3__ripe c3_s4('r','i','p','e') -# define c3__rite c3_s4('r','i','t','e') -# define c3__rock c3_s4('r','o','c','k') -# define c3__roll c3_s4('r','o','l','l') -# define c3__rolp c3_s4('r','o','l','p') -# define c3__rond c3_s4('r','o','n','d') -# define c3__root c3_s4('r','o','o','t') -# define c3__rose c3_s4('r','o','s','e') -# define c3__rsh c3_s3('r','s','h') -# define c3__rulf c3_s4('r','u','l','f') -# define c3__run c3_s3('r','u','n') -# define c3__safe c3_s4('s','a','f','e') -# define c3__sag c3_s3('s','a','g') -# define c3__sail c3_s4('s','a','i','l') -# define c3__same c3_s4('s','a','m','e') -# define c3__sand c3_s4('s','a','n','d') -# define c3__sard c3_s4('s','a','r','d') -# define c3__sav c3_s3('s','a','v') -# define c3__save c3_s4('s','a','v','e') -# define c3__scam c3_s4('s','c','a','m') -# define c3__scan c3_s4('s','c','a','n') -# define c3__scry c3_s4('s','c','r','y') -# define c3__scsg c3_s4('s','c','s','g') -# define c3__seal c3_s4('s','e','a','l') -# define c3__seat c3_s4('s','e','a','t') -# define c3__see c3_s3('s','e','e') -# define c3__seed c3_s4('s','e','e','d') -# define c3__seek c3_s4('s','e','e','k') -# define c3__seft c3_s4('s','e','f','t') -# define c3__sell c3_s4('s','e','l','l') -# define c3__semp c3_s4('s','e','m','p') -# define c3__send c3_s4('s','e','n','d') -# define c3__seq c3_s3('s','e','q') -# define c3__serd c3_s4('s','e','r','d') -# define c3__serf c3_s4('s','e','r','f') -# define c3__set c3_s3('s','e','t') -# define c3__sfix c3_s4('s','f','i','x') -# define c3__sgbc c3_s4('s','g','b','c') -# define c3__sgbn c3_s4('s','g','b','n') -# define c3__sgbr c3_s4('s','g','b','r') -# define c3__sgcb c3_s4('s','g','c','b') -# define c3__sgcl c3_s4('s','g','c','l') -# define c3__sgcn c3_s4('s','g','c','n') -# define c3__sgdg c3_s4('s','g','d','g') -# define c3__sgdl c3_s4('s','g','d','l') -# define c3__sgdp c3_s4('s','g','d','p') -# define c3__sgdt c3_s4('s','g','d','t') -# define c3__sgdx c3_s4('s','g','d','x') -# define c3__sgfs c3_s4('s','g','f','s') -# define c3__sggl c3_s4('s','g','g','l') -# define c3__sggr c3_s4('s','g','g','r') -# define c3__sghp c3_s4('s','g','h','p') -# define c3__sghs c3_s4('s','g','h','s') -# define c3__sghx c3_s4('s','g','h','x') -# define c3__sgkt c3_s4('s','g','k','t') -# define c3__sglc c3_s4('s','g','l','c') -# define c3__sgld c3_s4('s','g','l','d') -# define c3__sgls c3_s4('s','g','l','s') -# define c3__sgms c3_s4('s','g','m','s') -# define c3__sgmt c3_s4('s','g','m','t') -# define c3__sgpd c3_s4('s','g','p','d') -# define c3__sgpm c3_s4('s','g','p','m') -# define c3__sgps c3_s4('s','g','p','s') -# define c3__sgsg c3_s4('s','g','s','g') -# define c3__sgsp c3_s4('s','g','s','p') -# define c3__sgts c3_s4('s','g','t','s') -# define c3__sgwt c3_s4('s','g','w','t') -# define c3__sgzp c3_s4('s','g','z','p') -# define c3__shiv c3_s4('s','h','i','v') -# define c3__show c3_s4('s','h','o','w') -# define c3__shud c3_s4('s','h','u','d') -# define c3__shut c3_s4('s','h','u','t') -# define c3__sibl c3_s4('s','i','b','l') -# define c3__sift c3_s4('s','i','f','t') -# define c3__sing c3_s4('s','i','n','g') -# define c3__sist c3_s4('s','i','s','t') -# define c3__site c3_s4('s','i','t','e') -# define c3__sith c3_s4('s','i','t','h') -# define c3__size c3_s4('s','i','z','e') -# define c3__slam c3_s4('s','l','a','m') -# define c3__slap c3_s4('s','l','a','p') -# define c3__slat c3_s4('s','l','a','t') -# define c3__slax c3_s4('s','l','a','x') -# define c3__slem c3_s4('s','l','e','m') -# define c3__slet c3_s4('s','l','e','t') -# define c3__slex c3_s4('s','l','e','x') -# define c3__slid c3_s4('s','l','i','d') -# define c3__slip c3_s4('s','l','i','p') -# define c3__sliv c3_s4('s','l','i','v') -# define c3__sloc c3_s4('s','l','o','c') -# define c3__slog c3_s4('s','l','o','g') -# define c3__slon c3_s4('s','l','o','n') -# define c3__slop c3_s4('s','l','o','p') -# define c3__slos c3_s4('s','l','o','s') -# define c3__slow c3_s4('s','l','o','w') -# define c3__slur c3_s4('s','l','u','r') -# define c3__slux c3_s4('s','l','u','x') -# define c3__sm c3_s2('s','m') -# define c3__smcl c3_s4('s','m','c','l') -# define c3__smdq c3_s4('s','m','d','q') -# define c3__smsg c3_s4('s','m','s','g') -# define c3__smsm c3_s4('s','m','s','m') -# define c3__smts c3_s4('s','m','t','s') -# define c3__snap c3_s4('s','n','a','p') -# define c3__so c3_s2('s','o') -# define c3__sock c3_s4('s','o','c','k') -# define c3__soft c3_s4('s','o','f','t') -# define c3__sole c3_s4('s','o','l','e') -# define c3__some c3_s4('s','o','m','e') -# define c3__sort c3_s4('s','o','r','t') -# define c3__spal c3_s4('s','p','a','l') -# define c3__spar c3_s4('s','p','a','r') -# define c3__spig c3_s4('s','p','i','g') -# define c3__spil c3_s4('s','p','i','l') -# define c3__spin c3_s4('s','p','i','n') -# define c3__spit c3_s4('s','p','i','t') -# define c3__spot c3_s4('s','p','o','t') -# define c3__stam c3_s4('s','t','a','m') -# define c3__star c3_s4('s','t','a','r') -# define c3__stdr c3_s4('s','t','d','r') -# define c3__stem c3_s4('s','t','e','m') -# define c3__step c3_s4('s','t','e','p') -# define c3__stid c3_s4('s','t','i','d') -# define c3__stig c3_s4('s','t','i','g') -# define c3__stil c3_s4('s','t','i','l') -# define c3__stiv c3_s4('s','t','i','v') -# define c3__stix c3_s4('s','t','i','x') -# define c3__stol c3_s4('s','t','o','l') -# define c3__ston c3_s4('s','t','o','n') -# define c3__stop c3_s4('s','t','o','p') -# define c3__stub c3_s4('s','t','u','b') -# define c3__stur c3_s4('s','t','u','r') -# define c3__sub c3_s3('s','u','b') -# define c3__sunt c3_s4('s','u','n','t') -# define c3__sure c3_s4('s','u','r','e') -# define c3__susp c3_s4('s','u','s','p') -# define c3__swap c3_s4('s','w','a','p') -# define c3__sym c3_s3('s','y','m') -# define c3__sync c3_s4('s','y','n','c') -# define c3__sys c3_s3('s','y','s') -# define c3__ta c3_s2('t','a') -# define c3__tab c3_s3('t','a','b') -# define c3__tack c3_s4('t','a','c','k') -# define c3__tag c3_s3('t','a','g') -# define c3__tail c3_s4('t','a','i','l') -# define c3__take c3_s4('t','a','k','e') -# define c3__talk c3_s4('t','a','l','k') -# define c3__tame c3_s4('t','a','m','e') -# define c3__tang c3_s4('t','a','n','g') -# define c3__tank c3_s4('t','a','n','k') -# define c3__tap c3_s3('t','a','p') -# define c3__tarn c3_s4('t','a','r','n') -# define c3__tas c3_s3('t','a','s') -# define c3__tash c3_s4('t','a','s','h') -# define c3__teal c3_s4('t','e','a','l') -# define c3__teck c3_s4('t','e','c','k') -# define c3__tell c3_s4('t','e','l','l') -# define c3__terg c3_s4('t','e','r','g') -# define c3__term c3_s4('t','e','r','m') -# define c3__test c3_s4('t','e','s','t') -# define c3__text c3_s4('t','e','x','t') -# define c3__tgbn c3_s4('t','g','b','n') -# define c3__tgbr c3_s4('t','g','b','r') -# define c3__tgdg c3_s4('t','g','d','g') -# define c3__tgdl c3_s4('t','g','d','l') -# define c3__tgdp c3_s4('t','g','d','p') -# define c3__tgdx c3_s4('t','g','d','x') -# define c3__tgkt c3_s4('t','g','k','t') -# define c3__tglc c3_s4('t','g','l','c') -# define c3__tgld c3_s4('t','g','l','d') -# define c3__tgmt c3_s4('t','g','m','t') -# define c3__tgpd c3_s4('t','g','p','d') -# define c3__tgpm c3_s4('t','g','p','m') -# define c3__tgps c3_s4('t','g','p','s') -# define c3__tgsp c3_s4('t','g','s','p') -# define c3__that c3_s4('t','h','a','t') -# define c3__thee c3_s4('t','h','e','e') -# define c3__then c3_s4('t','h','e','n') -# define c3__they c3_s4('t','h','e','y') -# define c3__thin c3_s4('t','h','i','n') -# define c3__this c3_s4('t','h','i','s') -# define c3__thou c3_s4('t','h','o','u') -# define c3__thud c3_s4('t','h','u','d') -# define c3__thuo c3_s4('t','h','u','o') -# define c3__thus c3_s4('t','h','u','s') -# define c3__tick c3_s4('t','i','c','k') -# define c3__time c3_s4('t','i','m','e') -# define c3__tip c3_s3('t','i','p') -# define c3__tmbn c3_s4('t','m','b','n') -# define c3__tmdg c3_s4('t','m','d','g') -# define c3__tmdp c3_s4('t','m','d','p') -# define c3__tmlc c3_s4('t','m','l','c') -# define c3__tmnp c3_s4('t','m','n','p') -# define c3__tmpd c3_s4('t','m','p','d') -# define c3__tmps c3_s4('t','m','p','s') -# define c3__tmsg c3_s4('t','m','s','g') -# define c3__tmsp c3_s4('t','m','s','p') -# define c3__tmtr c3_s4('t','m','t','r') -# define c3__to c3_s2('t','o') -# define c3__toe c3_s3('t','o','e') -# define c3__tome c3_s4('t','o','m','e') -# define c3__tong c3_s4('t','o','n','g') -# define c3__tool c3_s4('t','o','o','l') -# define c3__top c3_s3('t','o','p') -# define c3__toy c3_s3('t','o','y') -# define c3__trac c3_s4('t','r','a','c') -# define c3__tram c3_s4('t','r','a','m') -# define c3__trap c3_s4('t','r','a','p') -# define c3__trel c3_s4('t','r','e','l') -# define c3__trex c3_s4('t','r','e','x') -# define c3__trib c3_s4('t','r','i','b') -# define c3__trim c3_s4('t','r','i','m') -# define c3__trip c3_s4('t','r','i','p') -# define c3__trol c3_s4('t','r','o','l') -# define c3__trop c3_s4('t','r','o','p') -# define c3__trup c3_s4('t','r','u','p') -# define c3__try c3_s3('t','r','y') -# define c3__tsbn c3_s4('t','s','b','n') -# define c3__tsbr c3_s4('t','s','b','r') -# define c3__tscl c3_s4('t','s','c','l') -# define c3__tscm c3_s4('t','s','c','m') -# define c3__tsdt c3_s4('t','s','d','t') -# define c3__tsgl c3_s4('t','s','g','l') -# define c3__tsgr c3_s4('t','s','g','r') -# define c3__tshp c3_s4('t','s','h','p') -# define c3__tshx c3_s4('t','s','h','x') -# define c3__tsls c3_s4('t','s','l','s') -# define c3__tsms c3_s4('t','s','m','s') -# define c3__tssg c3_s4('t','s','s','g') -# define c3__tstr c3_s4('t','s','t','r') -# define c3__tub c3_s3('t','u','b') -# define c3__tul c3_s3('t','u','l') -# define c3__tule c3_s4('t','u','l','e') -# define c3__tulp c3_s4('t','u','l','p') -# define c3__tune c3_s4('t','u','n','e') -# define c3__tung c3_s4('t','u','n','g') -# define c3__tupl c3_s4('t','u','p','l') -# define c3__turd c3_s4('t','u','r','d') -# define c3__turf c3_s4('t','u','r','f') -# define c3__turn c3_s4('t','u','r','n') -# define c3__twig c3_s4('t','w','i','g') -# define c3__twix c3_s4('t','w','i','x') -# define c3__txt c3_s3('t','x','t') -# define c3__type c3_s4('t','y','p','e') -# define c3__u c3_s1('u') -# define c3__ubin c3_s4('u','b','i','n') -# define c3__ubit c3_s4('u','b','i','t') -# define c3__ud c3_s2('u','d') -# define c3__ulib c3_s4('u','l','i','b') -# define c3__un c3_s2('u','n') -# define c3__uniq c3_s4('u','n','i','q') -# define c3__unix c3_s4('u','n','i','x') -# define c3__unt c3_s3('u','n','t') -# define c3__up c3_s2('u','p') -# define c3__url c3_s3('u','r','l') -# define c3__urth c3_s4('u','r','t','h') -# define c3__use c3_s3('u','s','e') -# define c3__ut c3_s2('u','t') -# define c3__uv c3_s2('u','v') -# define c3__uw c3_s2('u','w') -# define c3__ux c3_s2('u','x') -# define c3__v c3_s1('v') -# define c3__vamp c3_s4('v','a','m','p') -# define c3__vane c3_s4('v','a','n','e') -# define c3__var c3_s3('v','a','r') -# define c3__veal c3_s4('v','e','a','l') -# define c3__veb c3_s3('v','e','b') -# define c3__veck c3_s4('v','e','c','k') -# define c3__veer c3_s4('v','e','e','r') -# define c3__vega c3_s4('v','e','g','a') -# define c3__velt c3_s4('v','e','l','t') -# define c3__vent c3_s4('v','e','n','t') -# define c3__verb c3_s4('v','e','r','b') -# define c3__vern c3_s4('v','e','r','n') -# define c3__very c3_s4('v','e','r','y') -# define c3__view c3_s4('v','i','e','w') -# define c3__vint c3_s4('v','i','n','t') -# define c3__void c3_s4('v','o','i','d') -# define c3__vorp c3_s4('v','o','r','p') -# define c3__wack c3_s4('w','a','c','k') -# define c3__wail c3_s4('w','a','i','l') -# define c3__wake c3_s4('w','a','k','e') -# define c3__walk c3_s4('w','a','l','k') -# define c3__wamp c3_s4('w','a','m','p') -# define c3__want c3_s4('w','a','n','t') -# define c3__warm c3_s4('w','a','r','m') -# define c3__warn c3_s4('w','a','r','n') -# define c3__warx c3_s4('w','a','r','x') -# define c3__wash c3_s4('w','a','s','h') -# define c3__watt c3_s4('w','a','t','t') -# define c3__way c3_s3('w','a','y') -# define c3__weak c3_s4('w','e','a','k') -# define c3__web c3_s3('w','e','b') -# define c3__wend c3_s4('w','e','n','d') -# define c3__werp c3_s4('w','e','r','p') -# define c3__west c3_s4('w','e','s','t') -# define c3__wet c3_s3('w','e','t') -# define c3__what c3_s4('w','h','a','t') -# define c3__whey c3_s4('w','h','e','y') -# define c3__who c3_s3('w','h','o') -# define c3__whom c3_s4('w','h','o','m') -# define c3__wild c3_s4('w','i','l','d') -# define c3__win c3_s3('w','i','n') -# define c3__wing c3_s4('w','i','n','g') -# define c3__wipe c3_s4('w','i','p','e') -# define c3__wise c3_s4('w','i','s','e') -# define c3__wish c3_s4('w','i','s','h') -# define c3__with c3_s4('w','i','t','h') -# define c3__wnut c3_s4('w','n','u','t') -# define c3__wood c3_s4('w','o','o','d') -# define c3__woot c3_s4('w','o','o','t') -# define c3__work c3_s4('w','o','r','k') -# define c3__wost c3_s4('w','o','s','t') -# define c3__wrap c3_s4('w','r','a','p') -# define c3__wtbr c3_s4('w','t','b','r') -# define c3__wtcb c3_s4('w','t','c','b') -# define c3__wtcl c3_s4('w','t','c','l') -# define c3__wtcn c3_s4('w','t','c','n') -# define c3__wtdt c3_s4('w','t','d','t') -# define c3__wtfs c3_s4('w','t','f','s') -# define c3__wtgl c3_s4('w','t','g','l') -# define c3__wtgr c3_s4('w','t','g','r') -# define c3__wthp c3_s4('w','t','h','p') -# define c3__wthx c3_s4('w','t','h','x') -# define c3__wtkt c3_s4('w','t','k','t') -# define c3__wtls c3_s4('w','t','l','s') -# define c3__wtms c3_s4('w','t','m','s') -# define c3__wtpm c3_s4('w','t','p','m') -# define c3__wtpt c3_s4('w','t','p','t') -# define c3__wtsg c3_s4('w','t','s','g') -# define c3__wtts c3_s4('w','t','t','s') -# define c3__wtzp c3_s4('w','t','z','p') -# define c3__wyrd c3_s4('w','y','r','d') -# define c3__yell c3_s4('y','e','l','l') -# define c3__yelp c3_s4('y','e','l','p') -# define c3__z c3_s1('z') -# define c3__zact c3_s4('z','a','c','t') -# define c3__zalt c3_s4('z','a','l','t') -# define c3__zarb c3_s4('z','a','r','b') -# define c3__zect c3_s4('z','e','c','t') -# define c3__zemp c3_s4('z','e','m','p') -# define c3__zero c3_s4('z','e','r','o') -# define c3__zike c3_s4('z','i','k','e') -# define c3__zinc c3_s4('z','i','n','c') -# define c3__zole c3_s4('z','o','l','e') -# define c3__zond c3_s4('z','o','n','d') -# define c3__zoot c3_s4('z','o','o','t') -# define c3__zork c3_s4('z','o','r','k') -# define c3__zpbn c3_s4('z','p','b','n') -# define c3__zpcb c3_s4('z','p','c','b') -# define c3__zpcm c3_s4('z','p','c','m') -# define c3__zpcn c3_s4('z','p','c','n') -# define c3__zpdg c3_s4('z','p','d','g') -# define c3__zpdx c3_s4('z','p','d','x') -# define c3__zpfs c3_s4('z','p','f','s') -# define c3__zpgr c3_s4('z','p','g','r') -# define c3__zphx c3_s4('z','p','h','x') -# define c3__zplc c3_s4('z','p','l','c') -# define c3__zpmc c3_s4('z','p','m','c') -# define c3__zpmt c3_s4('z','p','m','t') -# define c3__zpsg c3_s4('z','p','s','g') -# define c3__zpsk c3_s4('z','p','s','k') -# define c3__zpsm c3_s4('z','p','s','m') -# define c3__zptc c3_s4('z','p','t','c') -# define c3__zptm c3_s4('z','p','t','m') -# define c3__zpts c3_s4('z','p','t','s') -# define c3__zpvn c3_s4('z','p','v','n') -# define c3__zpvt c3_s4('z','p','v','t') -# define c3__zpzp c3_s4('z','p','z','p') -# define c3__zuse c3_s4('z','u','s','e') -# define c3__zush c3_s4('z','u','s','h') - -#endif /* ifndef C3_MOTES_H */ diff --git a/pkg/urbit/include/c/portable.h b/pkg/urbit/include/c/portable.h deleted file mode 100644 index 0f082ccad..000000000 --- a/pkg/urbit/include/c/portable.h +++ /dev/null @@ -1,244 +0,0 @@ -#ifndef C3_PORTABLE_H -#define C3_PORTABLE_H - -#include "config.h" - -# ifndef __GNUC__ -# error "port me" -# endif -# ifndef _GNU_SOURCE -# define _GNU_SOURCE -# endif - - - /** System include files. - *** - *** Do not put include files that are only used in the - *** porting layer here. Include them directly in the - *** C file. - **/ -# if defined(U3_OS_linux) -# ifndef _XOPEN_SOURCE -# define _XOPEN_SOURCE 700 -# endif -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# elif defined(U3_OS_osx) -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# elif defined(U3_OS_bsd) -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include - -# elif defined(U3_OS_mingw) -# define signal mingw_has_no_usable_signal -# define raise mingw_has_no_usable_raise -# define _POSIX -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include "mman.h" -# include "compat.h" - -# else - #error "port: headers" -# endif - -# ifndef __has_feature -# define __has_feature(x) 0 -# endif - -# if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__) -# define ASAN_ENABLED -# endif - - /** Address space layout. - *** - *** NB: 2^29 words == 2GB - **/ -# if defined(U3_OS_linux) -# ifdef __LP64__ -# ifdef ASAN_ENABLED -# define U3_OS_LoomBase 0x10007ffff000 -# else -# define U3_OS_LoomBase 0x200000000 -# endif -# else -# define U3_OS_LoomBase 0x36000000 -# endif -# define U3_OS_LoomBits 29 -# elif defined(U3_OS_mingw) -# define U3_OS_LoomBase 0x28000000000 -# define U3_OS_LoomBits 29 -# elif defined(U3_OS_osx) -# ifdef __LP64__ -# define U3_OS_LoomBase 0x28000000000 -# else -# define U3_OS_LoomBase 0x4000000 -# endif -# define U3_OS_LoomBits 29 -# elif defined(U3_OS_bsd) -# ifdef __LP64__ -# define U3_OS_LoomBase 0x200000000 -# else -# define U3_OS_LoomBase 0x4000000 -# endif -# define U3_OS_LoomBits 29 -# else -# error "port: LoomBase" -# endif - - /** Global variable control. - *** - *** To instantiate globals, #define c3_global as extern. - **/ -# ifndef c3_global -# define c3_global -# endif - - - /** External, OS-independent library dependencies. - **/ - /* The GMP (GNU arbitrary-precision arithmetic) library. - ** (Tested with version 4.0.1.) - */ -# include - - - /** Private C "extensions." - *** - *** Except for these and main(), any function, macro, or structure - *** names must be prefixed either by u3_/U3_ (for public names), - *** or _ (for static and other file-local names). - **/ - /* Endianness. - */ -# define c3_endian_little 0 -# define c3_endian_big 1 - -# ifdef U3_OS_ENDIAN_little -# define c3_endian c3_endian_little -# elif defined(U3_OS_ENDIAN_big) -# define c3_endian c3_endian_big -# else -# error "port: U3_OS_ENDIAN" -# endif - - /* Byte swapping. - */ -# if defined(U3_OS_linux) || defined(U3_OS_bsd) || defined(U3_OS_mingw) -# define c3_bswap_16(x) bswap_16(x) -# define c3_bswap_32(x) bswap_32(x) -# define c3_bswap_64(x) bswap_64(x) -# elif defined(U3_OS_osx) -# define c3_bswap_16(x) NXSwapShort(x) -# define c3_bswap_32(x) NXSwapInt(x) -# define c3_bswap_64(x) NXSwapLongLong(x) -# else -# error "port: byte swap" -# endif - - /* Sync. - */ -# if defined(U3_OS_linux) || defined(U3_OS_mingw) -# define c3_sync(fd) (fdatasync(fd)) -# elif defined(U3_OS_osx) -# define c3_sync(fd) (fcntl(fd, F_FULLFSYNC, 0)) -# elif defined(U3_OS_bsd) -# define c3_sync(fd) (fsync(fd)) -# else -# error "port: sync" -# endif - - /* Purge. - */ -# if defined(U3_OS_linux) -# include -# define c3_fpurge __fpurge -# elif defined(U3_OS_bsd) || defined(U3_OS_osx) || defined(U3_OS_mingw) -# define c3_fpurge fpurge -# else -# error "port: fpurge" -# endif - - /* Stat. - */ -# if defined(U3_OS_linux) || defined(U3_OS_mingw) -# define c3_stat_mtime(dp) (u3_time_t_in_ts((dp)->st_mtime)) -# elif defined(U3_OS_osx) -# define c3_stat_mtime(dp) (u3_time_in_ts(&((dp)->st_mtimespec))) -# define lseek64 lseek -# elif defined(U3_OS_bsd) -# define c3_stat_mtime(dp) (u3_time_in_ts(&((dp)->st_mtim))) -# define lseek64 lseek -# else -# error "port: timeconvert" -# endif - - /* Null. - */ -# if defined(U3_OS_linux) || defined(U3_OS_bsd) || defined(U3_OS_osx) -# define c3_dev_null "/dev/null" -# elif defined(U3_OS_mingw) -# define c3_dev_null "nul" -# else -# error "port: /dev/null" -# endif - - /* Static assertion. - */ -# define ASSERT_CONCAT_(a, b) a##b -# define ASSERT_CONCAT(a, b) ASSERT_CONCAT_(a, b) -# define STATIC_ASSERT(e,m) \ - ;enum { ASSERT_CONCAT(assert_line_, __LINE__) = 1/(int)(!!(e)) } - -#endif /* ifndef C3_PORTABLE_H */ diff --git a/pkg/urbit/include/c/types.h b/pkg/urbit/include/c/types.h deleted file mode 100644 index b333ff115..000000000 --- a/pkg/urbit/include/c/types.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef C3_TYPES_H -#define C3_TYPES_H - - /** Integer typedefs. - **/ - /* Canonical integers. - */ - typedef uint64_t c3_d; - typedef int64_t c3_ds; - typedef uint32_t c3_w; - typedef int32_t c3_ws; - typedef uint16_t c3_s; - typedef int16_t c3_ss; - typedef uint8_t c3_y; // byte - typedef int8_t c3_ys; // signed byte - typedef uint8_t c3_b; // bit - - typedef uint8_t c3_t; // boolean - typedef uint8_t c3_o; // loobean - typedef uint8_t c3_g; // 32-bit log - 0-31 bits - typedef uint32_t c3_l; // little; 31-bit unsigned integer - typedef uint32_t c3_m; // mote; also c3_l; LSB first a-z 4-char string. - - /* Deprecated integers. - */ - typedef char c3_c; // does not match int8_t or uint8_t - typedef int c3_i; // int - really bad - typedef uintptr_t c3_p; // pointer-length uint - really really bad - typedef intptr_t c3_ps; // pointer-length int - really really bad - -#endif /* ifndef C3_TYPES_H */ diff --git a/pkg/urbit/include/jets/k.h b/pkg/urbit/include/jets/k.h deleted file mode 100644 index f8cce61cf..000000000 --- a/pkg/urbit/include/jets/k.h +++ /dev/null @@ -1,164 +0,0 @@ -#ifndef U3_JETS_K_H -#define U3_JETS_K_H - - /** Tier 1. - **/ - u3_noun u3ka_add(u3_noun a, u3_noun b); - u3_noun u3ka_dec(u3_atom a); - u3_noun u3ka_div(u3_noun a, u3_noun b); - u3_noun u3ka_sub(u3_noun a, u3_noun b); - u3_noun u3ka_mod(u3_noun a, u3_noun b); - u3_noun u3ka_mul(u3_noun a, u3_noun b); - u3_noun u3ka_gth(u3_noun a, u3_noun b); - u3_noun u3ka_lte(u3_noun a, u3_noun b); - - /** Tier 2. - **/ - u3_noun u3kb_lent(u3_noun a); - u3_noun u3kb_weld(u3_noun a, u3_noun b); - u3_noun u3kb_flop(u3_noun a); - -/* u3kc: tier 3 functions -*/ - /* u3kc_bex(): binary exponent. - */ - u3_noun - u3kc_bex(u3_atom); - - /* u3kc_con(): binary loobean conjunction. - */ - u3_noun - u3kc_con(u3_noun a, - u3_noun b); - - /* u3kc_mix(): binary xor. - */ - u3_noun - u3kc_mix(u3_atom a, u3_atom b); - - /* u3kc_lsh(): left shift. - */ - u3_noun - u3kc_lsh(u3_noun a, u3_noun b, u3_noun c); - - /* u3kc_rsh(): right shift. - */ - u3_noun - u3kc_rsh(u3_noun a, u3_noun b, u3_noun c); - - /* u3kc_rep(): assemble single. - */ - u3_noun - u3kc_rep(u3_atom a, - u3_atom b, - u3_noun c); - - /* u3kc_rip(): disassemble. - */ - u3_noun - u3kc_rip(u3_atom a, - u3_atom b, - u3_atom c); - - /* u3kc_rev(): reverse block order, accounting for leading zeroes. - */ - u3_noun - u3kc_rev(u3_atom boz, u3_atom len, u3_atom dat); - - /* u3kc_swp(): reverse block order. - */ - u3_noun - u3kc_swp(u3_atom a, u3_atom b); - -/* u3kd: tier 4 functions -*/ - /* u3kdb_get(): map get for key `b` in map `a` with u3_none. - */ - u3_weak - u3kdb_get(u3_noun a, u3_noun b); - - /* u3kdb_got(): map get for key `b` in map `a` with bail. - */ - u3_noun - u3kdb_got(u3_noun a, u3_noun b); - - /* u3kdb_put(): map put for key `b`, value `c` in map `a`. - */ - u3_weak - u3kdb_put(u3_noun a, u3_noun b, u3_noun c); - - /* u3kdb_has(): test for get. - */ - u3_noun - u3kdb_has(u3_noun a, u3_noun b); - - /* u3kdb_gas(): list to map. - */ - u3_noun - u3kdb_gas(u3_noun a, u3_noun b); - - /* u3kdb_uni(): map union. - */ - u3_noun - u3kdb_uni(u3_noun a, u3_noun b); - - /* u3kdi_gas(): list to map. - */ - u3_noun - u3kdi_gas(u3_noun a, u3_noun b); - - /* u3kdi_has(): test for presence. - */ - u3_noun - u3kdi_has(u3_noun a, u3_noun b); - - /* u3kdi_tap(): map/set convert to list. (solves by_tap also.) - */ - u3_noun - u3kdi_tap(u3_noun a); - - /* u3kdi_put(): put in set. - */ - u3_weak - u3kdi_put(u3_noun a, u3_noun b); - - /* u3kdi_uni(): set union. - */ - u3_noun - u3kdi_uni(u3_noun a, u3_noun b); - -# define u3kdb_tap(a) u3kdi_tap(a) - -/* u3ke: tier 5 functions -*/ - /* u3ke_cue(): expand saved pill. - */ - u3_noun - u3ke_cue(u3_atom a); - - /* u3ke_jam(): pack noun as atom. - */ - u3_atom - u3ke_jam(u3_noun a); - - /* u3ke_trip(): atom to tape. - */ - u3_noun - u3ke_trip(u3_noun a); - - /* u3kf_fork(): build %fork span. - */ - u3_noun - u3kf_fork(u3_noun yed); - - /* u3kz_fork(): build %fork span. - */ - u3_noun - u3kz_fork(u3_noun yed); - - /* u3kfu_repo(): - */ - u3_noun - u3kfu_repo(u3_noun, u3_noun); - -#endif /* ifndef U3_JETS_K_H */ diff --git a/pkg/urbit/include/jets/q.h b/pkg/urbit/include/jets/q.h deleted file mode 100644 index 305164fb8..000000000 --- a/pkg/urbit/include/jets/q.h +++ /dev/null @@ -1,244 +0,0 @@ -#ifndef U3_JETS_Q_H -#define U3_JETS_Q_H - - /** Tier 1. - **/ - u3_noun u3qa_add(u3_atom, u3_atom); - u3_noun u3qa_dec(u3_atom); - u3_noun u3qa_div(u3_atom, u3_atom); - u3_noun u3qa_gte(u3_atom, u3_atom); - u3_noun u3qa_gth(u3_atom, u3_atom); - u3_noun u3qa_inc(u3_atom); - u3_noun u3qa_lte(u3_atom, u3_atom); - u3_noun u3qa_lth(u3_atom, u3_atom); - u3_noun u3qa_mod(u3_atom, u3_atom); - u3_noun u3qa_mul(u3_atom, u3_atom); - u3_noun u3qa_sub(u3_atom, u3_atom); - - /** Tier 2. - **/ - u3_noun u3qb_bind(u3_noun, u3_noun); - u3_noun u3qb_clap(u3_noun, u3_noun, u3_noun); - u3_noun u3qb_drop(u3_noun); - u3_noun u3qb_flop(u3_noun); - u3_noun u3qb_lent(u3_noun); - u3_noun u3qb_levy(u3_noun, u3_noun); - u3_noun u3qb_lien(u3_noun, u3_noun); - u3_noun u3qb_murn(u3_noun, u3_noun); - u3_noun u3qb_need(u3_noun); - u3_noun u3qb_reap(u3_atom, u3_noun); - u3_noun u3qb_reel(u3_noun, u3_noun); - u3_noun u3qb_roll(u3_noun, u3_noun); - u3_noun u3qb_skid(u3_noun, u3_noun); - u3_noun u3qb_skim(u3_noun, u3_noun); - u3_noun u3qb_skip(u3_noun, u3_noun); - u3_noun u3qb_scag(u3_atom, u3_noun); - u3_noun u3qb_slag(u3_atom, u3_noun); - u3_noun u3qb_snag(u3_atom, u3_noun); - u3_noun u3qb_sort(u3_noun, u3_noun); - u3_noun u3qb_turn(u3_noun, u3_noun); - u3_noun u3qb_weld(u3_noun, u3_noun); - - /** Tier 3. - **/ - u3_noun u3qc_bex(u3_atom); - u3_noun u3qc_xeb(u3_atom); - u3_noun u3qc_can(u3_atom, u3_noun); - u3_noun u3qc_cap(u3_atom); - u3_noun u3qc_cat(u3_atom, u3_atom, u3_atom); - u3_noun u3qc_con(u3_atom, u3_atom); - u3_noun u3qc_cut(u3_atom, u3_atom, u3_atom, u3_atom); - u3_noun u3qc_dis(u3_atom, u3_atom); - u3_noun u3qc_dor(u3_atom, u3_atom); - u3_noun u3qc_dvr(u3_atom, u3_atom); - u3_noun u3qc_end(u3_atom, u3_atom, u3_atom); - u3_noun u3qc_gor(u3_atom, u3_atom); - u3_noun u3qc_lsh(u3_atom, u3_atom, u3_atom); - u3_noun u3qc_mas(u3_atom); - u3_noun u3qc_met(u3_atom, u3_atom); - u3_noun u3qc_mix(u3_atom, u3_atom); - u3_noun u3qc_mor(u3_atom, u3_atom); - u3_noun u3qc_muk(u3_atom, u3_atom, u3_atom); - u3_noun u3qc_peg(u3_atom, u3_atom); - u3_noun u3qc_pow(u3_atom, u3_atom); - u3_noun u3qc_rap(u3_atom, u3_noun); - u3_noun u3qc_rep(u3_atom, u3_atom, u3_noun); - u3_noun u3qc_rev(u3_atom, u3_atom, u3_atom); - u3_noun u3qc_rip(u3_atom, u3_atom, u3_atom); - u3_noun u3qc_rsh(u3_atom, u3_atom, u3_atom); - u3_noun u3qc_swp(u3_atom, u3_atom); - u3_noun u3qc_sqt(u3_atom); - - u3_noun u3_po_find_prefix(c3_y one, c3_y two, c3_y three); - u3_noun u3_po_find_suffix(c3_y one, c3_y two, c3_y three); - void u3_po_to_prefix(u3_noun id, c3_y* a, c3_y* b, c3_y* c); - void u3_po_to_suffix(u3_noun id, c3_y* a, c3_y* b, c3_y* c); - - /** Tier 4. - **/ - u3_noun u3qdb_all(u3_noun, u3_noun); - u3_noun u3qdb_any(u3_noun, u3_noun); - u3_noun u3qdb_apt(u3_noun); - u3_noun u3qdb_bif(u3_noun, u3_noun); - u3_noun u3qdb_dif(u3_noun, u3_noun); - u3_noun u3qdb_gas(u3_noun, u3_noun); - u3_noun u3qdb_get(u3_noun, u3_noun); - u3_noun u3qdb_has(u3_noun, u3_noun); - u3_noun u3qdb_int(u3_noun, u3_noun); - u3_noun u3qdb_key(u3_noun); - u3_noun u3qdb_put(u3_noun, u3_noun, u3_noun); - u3_noun u3qdb_run(u3_noun, u3_noun); -# define u3qdb_tap u3qdi_tap - u3_noun u3qdb_uni(u3_noun, u3_noun); - u3_noun u3qdb_urn(u3_noun, u3_noun); -# define u3qdb_wyt u3qdi_wyt - - u3_noun u3qdi_apt(u3_noun); - u3_noun u3qdi_bif(u3_noun, u3_noun); - u3_noun u3qdi_dif(u3_noun, u3_noun); - u3_noun u3qdi_gas(u3_noun, u3_noun); - u3_noun u3qdi_has(u3_noun, u3_noun); - u3_noun u3qdi_int(u3_noun, u3_noun); - u3_noun u3qdi_put(u3_noun, u3_noun); - u3_noun u3qdi_rep(u3_noun, u3_noun); - u3_noun u3qdi_run(u3_noun, u3_noun); - u3_noun u3qdi_tap(u3_noun); - u3_noun u3qdi_uni(u3_noun, u3_noun); - u3_noun u3qdi_wyt(u3_noun); - - /** Tier 5. - **/ - u3_noun u3qe_cue(u3_atom); - u3_noun u3qe_jam(u3_atom); - u3_noun u3qe_mat(u3_atom); - u3_noun u3qe_rub(u3_atom, u3_atom); - u3_noun u3qe_leer(u3_atom); - u3_noun u3qe_lore(u3_atom); - u3_noun u3qe_loss(u3_noun, u3_noun); - u3_noun u3qe_lune(u3_atom); - u3_noun u3qe_repg(u3_noun, u3_noun, u3_noun); - u3_noun u3qe_rexp(u3_noun, u3_noun); - u3_noun u3qe_trip(u3_atom); - - u3_noun u3qea_ecba_en(u3_atom, u3_atom); - u3_noun u3qea_ecba_de(u3_atom, u3_atom); - u3_noun u3qea_ecbb_en(u3_atom, u3_atom); - u3_noun u3qea_ecbb_de(u3_atom, u3_atom); - u3_noun u3qea_ecbc_en(u3_atom, u3_atom); - u3_noun u3qea_ecbc_de(u3_atom, u3_atom); - - u3_noun u3qea_cbca_en(u3_atom, u3_atom, u3_atom); - u3_noun u3qea_cbca_de(u3_atom, u3_atom, u3_atom); - u3_noun u3qea_cbcb_en(u3_atom, u3_atom, u3_atom); - u3_noun u3qea_cbcb_de(u3_atom, u3_atom, u3_atom); - u3_noun u3qea_cbcc_en(u3_atom, u3_atom, u3_atom); - u3_noun u3qea_cbcc_de(u3_atom, u3_atom, u3_atom); - - u3_noun u3qea_de(u3_atom, u3_atom); - u3_noun u3qea_en(u3_atom, u3_atom); - - u3_atom u3qe_fein_ob(u3_atom pyn); - u3_atom u3qe_fynd_ob(u3_atom pyn); - - u3_noun u3qe_hmac(u3_noun, u3_atom, u3_atom, - u3_atom, u3_atom, u3_atom, u3_atom); - - u3_noun u3qe_en_base16(u3_atom len, u3_atom dat); - u3_noun u3qe_de_base16(u3_atom inp); - - u3_noun u3qeo_raw(u3_atom, u3_atom); - - u3_noun u3qef_drg(u3_noun, u3_atom); - u3_noun u3qef_lug(u3_noun, u3_noun, u3_atom, u3_atom); - - u3_noun u3qer_add(u3_atom, u3_atom, u3_atom); - u3_noun u3qer_sub(u3_atom, u3_atom, u3_atom); - u3_noun u3qer_mul(u3_atom, u3_atom, u3_atom); - u3_noun u3qer_div(u3_atom, u3_atom, u3_atom); - u3_noun u3qer_sqt(u3_atom, u3_atom); - u3_noun u3qer_fma(u3_atom, u3_atom, u3_atom, u3_atom); - u3_noun u3qer_lth(u3_atom, u3_atom); - u3_noun u3qer_lte(u3_atom, u3_atom); - u3_noun u3qer_equ(u3_atom, u3_atom); - u3_noun u3qer_gte(u3_atom, u3_atom); - u3_noun u3qer_gth(u3_atom, u3_atom); - - u3_noun u3qet_add(u3_atom, u3_atom, u3_atom); - u3_noun u3qet_sub(u3_atom, u3_atom, u3_atom); - u3_noun u3qet_mul(u3_atom, u3_atom, u3_atom); - u3_noun u3qet_div(u3_atom, u3_atom, u3_atom); - u3_noun u3qet_sqt(u3_atom, u3_atom); - u3_noun u3qet_fma(u3_atom, u3_atom, u3_atom, u3_atom); - u3_noun u3qet_lth(u3_atom, u3_atom); - u3_noun u3qet_lte(u3_atom, u3_atom); - u3_noun u3qet_equ(u3_atom, u3_atom); - u3_noun u3qet_gte(u3_atom, u3_atom); - u3_noun u3qet_gth(u3_atom, u3_atom); - - u3_noun u3qeq_add(u3_atom, u3_atom, u3_atom); - u3_noun u3qeq_sub(u3_atom, u3_atom, u3_atom); - u3_noun u3qeq_mul(u3_atom, u3_atom, u3_atom); - u3_noun u3qeq_div(u3_atom, u3_atom, u3_atom); - u3_noun u3qeq_sqt(u3_atom, u3_atom); - u3_noun u3qeq_fma(u3_atom, u3_atom, u3_atom, u3_atom); - u3_noun u3qeq_lth(u3_atom, u3_atom); - u3_noun u3qeq_lte(u3_atom, u3_atom); - u3_noun u3qeq_equ(u3_atom, u3_atom); - u3_noun u3qeq_gte(u3_atom, u3_atom); - u3_noun u3qeq_gth(u3_atom, u3_atom); - - u3_noun u3qes_add(u3_atom, u3_atom, u3_atom); - u3_noun u3qes_sub(u3_atom, u3_atom, u3_atom); - u3_noun u3qes_mul(u3_atom, u3_atom, u3_atom); - u3_noun u3qes_div(u3_atom, u3_atom, u3_atom); - u3_noun u3qes_sqt(u3_atom, u3_atom); - u3_noun u3qes_fma(u3_atom, u3_atom, u3_atom, u3_atom); - u3_noun u3qes_lth(u3_atom, u3_atom); - u3_noun u3qes_lte(u3_atom, u3_atom); - u3_noun u3qes_equ(u3_atom, u3_atom); - u3_noun u3qes_gte(u3_atom, u3_atom); - u3_noun u3qes_gth(u3_atom, u3_atom); - - /** Tier 6. - **/ - u3_noun u3qf_bull(u3_noun, u3_noun); - u3_noun u3qf_cell(u3_noun, u3_noun); - u3_noun u3qf_comb(u3_noun, u3_noun); - u3_noun u3qf_cons(u3_noun, u3_noun); - u3_noun u3qf_core(u3_noun, u3_noun); - u3_noun u3qf_cube(u3_noun, u3_noun); - u3_noun u3qf_face(u3_noun, u3_noun); - u3_noun u3qf_fine(u3_noun, u3_noun, u3_noun); - u3_noun u3qf_fitz(u3_noun, u3_noun); - u3_noun u3qf_flan(u3_noun, u3_noun); - u3_noun u3qf_flay(u3_noun); - u3_noun u3qf_flip(u3_noun); - u3_noun u3qf_flor(u3_noun, u3_noun); - u3_noun u3qf_forq(u3_noun, u3_noun); - u3_noun u3qf_fork(u3_noun); - u3_noun u3qf_grof(u3_noun); - u3_noun u3qf_hint(u3_noun, u3_noun); - u3_noun u3qf_hike(u3_noun, u3_noun); - u3_noun u3qf_look(u3_noun, u3_noun); - u3_noun u3qf_loot(u3_noun, u3_noun); - u3_noun u3qf_slot(u3_atom, u3_noun); - u3_noun u3qf_type(u3_noun); - - u3_noun u3qfl_bunt(u3_noun, u3_noun); - u3_noun u3qfl_whip(u3_noun, u3_noun, u3_noun); - - u3_noun u3qfr_fish(u3_noun, u3_noun, u3_noun, u3_noun); - - u3_noun u3qfp_hack(u3_noun, u3_noun); - u3_noun u3qfp_late(u3_noun); - u3_noun u3qfp_open(u3_noun, u3_noun, u3_noun); - u3_noun u3qfp_nepo(u3_noun, u3_noun); - u3_noun u3qfp_rake(u3_noun); - -# define u3qfu_van_fan 28 -# define u3qfu_van_rib 58 -# define u3qfu_van_vet 59 - - void u3qf_test(const c3_c*, u3_noun); - -#endif /* ifndef U3_JETS_Q_H */ diff --git a/pkg/urbit/include/jets/w.h b/pkg/urbit/include/jets/w.h deleted file mode 100644 index ec66d96b3..000000000 --- a/pkg/urbit/include/jets/w.h +++ /dev/null @@ -1,324 +0,0 @@ -#ifndef U3_JETS_W_H -#define U3_JETS_W_H - - /** Tier 1. - **/ - u3_noun u3wa_add(u3_noun); - u3_noun u3wa_dec(u3_noun); - u3_noun u3wa_div(u3_noun); - u3_noun u3wa_gte(u3_noun); - u3_noun u3wa_gth(u3_noun); - u3_noun u3wa_lte(u3_noun); - u3_noun u3wa_lth(u3_noun); - u3_noun u3wa_mod(u3_noun); - u3_noun u3wa_mul(u3_noun); - u3_noun u3wa_sub(u3_noun); - - /** Tier 2. - **/ - u3_noun u3wb_bind(u3_noun); - u3_noun u3wb_clap(u3_noun); - u3_noun u3wb_drop(u3_noun); - u3_noun u3wb_find(u3_noun); - u3_noun u3wb_flop(u3_noun); - u3_noun u3wb_lent(u3_noun); - u3_noun u3wb_levy(u3_noun); - u3_noun u3wb_lien(u3_noun); - u3_noun u3wb_murn(u3_noun); - u3_noun u3wb_need(u3_noun); - u3_noun u3wb_reap(u3_noun); - u3_noun u3wb_reel(u3_noun); - u3_noun u3wb_roll(u3_noun); - u3_noun u3wb_skid(u3_noun); - u3_noun u3wb_skim(u3_noun); - u3_noun u3wb_skip(u3_noun); - u3_noun u3wb_scag(u3_noun); - u3_noun u3wb_slag(u3_noun); - u3_noun u3wb_snag(u3_noun); - u3_noun u3wb_sort(u3_noun); - u3_noun u3wb_turn(u3_noun); - u3_noun u3wb_weld(u3_noun); -# define u3wb_welp u3wb_weld - u3_noun u3wb_zing(u3_noun); - - /** Tier 3. - **/ - u3_noun u3wc_bex(u3_noun); - u3_noun u3wc_xeb(u3_noun); - u3_noun u3wc_can(u3_noun); - u3_noun u3wc_cap(u3_noun); - u3_noun u3wc_cat(u3_noun); - u3_noun u3wc_con(u3_noun); - u3_noun u3wc_cut(u3_noun); - u3_noun u3wc_dis(u3_noun); - u3_noun u3wc_dor(u3_noun); - u3_noun u3wc_dvr(u3_noun); - u3_noun u3wc_end(u3_noun); - u3_noun u3wc_gor(u3_noun); - u3_noun u3wc_lsh(u3_noun); - u3_noun u3wc_mas(u3_noun); - u3_noun u3wc_met(u3_noun); - u3_noun u3wc_mix(u3_noun); - u3_noun u3wc_mor(u3_noun); - u3_noun u3wc_mug(u3_noun); - u3_noun u3wc_muk(u3_noun); - u3_noun u3wc_peg(u3_noun); - u3_noun u3wc_pow(u3_noun); - u3_noun u3wc_rap(u3_noun); - u3_noun u3wc_rep(u3_noun); - u3_noun u3wc_rev(u3_noun); - u3_noun u3wc_rip(u3_noun); - u3_noun u3wc_rsh(u3_noun); - u3_noun u3wc_swp(u3_noun); - u3_noun u3wc_sqt(u3_noun); - - u3_noun u3wcp_ins(u3_noun); - u3_noun u3wcp_ind(u3_noun); - u3_noun u3wcp_tos(u3_noun); - u3_noun u3wcp_tod(u3_noun); - - /** Tier 4. - **/ - u3_noun u3wdb_all(u3_noun); - u3_noun u3wdb_any(u3_noun); - u3_noun u3wdb_apt(u3_noun); - u3_noun u3wdb_bif(u3_noun); - u3_noun u3wdb_del(u3_noun); - u3_noun u3wdb_dif(u3_noun); - u3_noun u3wdb_gas(u3_noun); - u3_noun u3wdb_get(u3_noun); - u3_noun u3wdb_has(u3_noun); - u3_noun u3wdb_int(u3_noun); - u3_noun u3wdb_jab(u3_noun); - u3_noun u3wdb_key(u3_noun); - u3_noun u3wdb_put(u3_noun); -# define u3wdb_tap u3wdi_tap - u3_noun u3wdb_uni(u3_noun); - u3_noun u3wdb_urn(u3_noun); -# define u3wdb_rep u3wdi_rep - u3_noun u3wdb_run(u3_noun); -# define u3wdb_wyt u3wdi_wyt - - u3_noun u3wdi_apt(u3_noun); - u3_noun u3wdi_bif(u3_noun); - u3_noun u3wdi_del(u3_noun); - u3_noun u3wdi_dif(u3_noun); - u3_noun u3wdi_gas(u3_noun); - u3_noun u3wdi_has(u3_noun); - u3_noun u3wdi_int(u3_noun); - u3_noun u3wdi_put(u3_noun); - u3_noun u3wdi_rep(u3_noun); - u3_noun u3wdi_run(u3_noun); - u3_noun u3wdi_tap(u3_noun); - u3_noun u3wdi_uni(u3_noun); - u3_noun u3wdi_wyt(u3_noun); - - /** Tier 5. - **/ - u3_noun u3we_cue(u3_noun); - u3_noun u3we_jam(u3_noun); - u3_noun u3we_mat(u3_noun); - u3_noun u3we_rub(u3_noun); - u3_noun u3we_leer(u3_noun); - u3_noun u3we_lore(u3_noun); - u3_noun u3we_loss(u3_noun); - u3_noun u3we_lune(u3_noun); - u3_noun u3we_mink(u3_noun); - u3_noun u3we_mole(u3_noun); - u3_noun u3we_mule(u3_noun); - u3_noun u3we_repg(u3_noun); - u3_noun u3we_rexp(u3_noun); - u3_noun u3we_trip(u3_noun); - - u3_noun u3we_scow(u3_noun); - u3_noun u3we_scot(u3_noun); - u3_noun u3we_slaw(u3_noun); - - u3_noun u3we_pfix(u3_noun); - u3_noun u3we_plug(u3_noun); - u3_noun u3we_pose(u3_noun); - u3_noun u3we_sfix(u3_noun); - - u3_noun u3wea_ecba_en(u3_noun); - u3_noun u3wea_ecba_de(u3_noun); - u3_noun u3wea_ecbb_en(u3_noun); - u3_noun u3wea_ecbb_de(u3_noun); - u3_noun u3wea_ecbc_en(u3_noun); - u3_noun u3wea_ecbc_de(u3_noun); - - u3_noun u3wea_cbca_en(u3_noun); - u3_noun u3wea_cbca_de(u3_noun); - u3_noun u3wea_cbcb_en(u3_noun); - u3_noun u3wea_cbcb_de(u3_noun); - u3_noun u3wea_cbcc_en(u3_noun); - u3_noun u3wea_cbcc_de(u3_noun); - - u3_noun u3wea_siva_en(u3_noun); - u3_noun u3wea_siva_de(u3_noun); - u3_noun u3wea_sivb_en(u3_noun); - u3_noun u3wea_sivb_de(u3_noun); - u3_noun u3wea_sivc_en(u3_noun); - u3_noun u3wea_sivc_de(u3_noun); - - u3_noun u3wea_de(u3_noun); - u3_noun u3wea_en(u3_noun); - - u3_noun u3wes_hsh(u3_noun); - u3_noun u3wes_hsl(u3_noun); - u3_noun u3wes_pbk(u3_noun); - u3_noun u3wes_pbl(u3_noun); - - u3_noun u3we_shax(u3_noun); - u3_noun u3we_shay(u3_noun); - u3_noun u3we_shas(u3_noun); - u3_noun u3we_shal(u3_noun); - u3_noun u3we_sha1(u3_noun); - - u3_noun u3we_fein_ob(u3_noun); - u3_noun u3we_fynd_ob(u3_noun); - - u3_noun u3weo_raw(u3_noun); - - u3_noun u3wee_puck(u3_noun); - u3_noun u3wee_sign(u3_noun); - u3_noun u3wee_veri(u3_noun); - u3_noun u3wee_shar(u3_noun); - u3_noun u3wee_point_add(u3_noun); - u3_noun u3wee_scalarmult(u3_noun); - u3_noun u3wee_scalarmult_base(u3_noun); - u3_noun u3wee_add_scalarmult_scalarmult_base(u3_noun); - u3_noun u3wee_add_double_scalarmult(u3_noun); - - u3_noun u3we_hmac(u3_noun); - - u3_noun u3we_kecc224(u3_noun); - u3_noun u3we_kecc256(u3_noun); - u3_noun u3we_kecc384(u3_noun); - u3_noun u3we_kecc512(u3_noun); - - u3_noun u3we_argon2(u3_noun); - - u3_noun u3we_blake(u3_noun); - - u3_noun u3we_ripe(u3_noun); - - u3_noun u3we_make(u3_noun); - u3_noun u3we_sign(u3_noun); - u3_noun u3we_reco(u3_noun); - - u3_noun u3we_sosi(u3_noun); - u3_noun u3we_sove(u3_noun); - - u3_noun u3we_en_base16(u3_noun); - u3_noun u3we_de_base16(u3_noun); - - u3_noun u3we_bend_fun(u3_noun); - u3_noun u3we_cold_fun(u3_noun); - u3_noun u3we_cook_fun(u3_noun); - u3_noun u3we_comp_fun(u3_noun); - u3_noun u3we_easy_fun(u3_noun); - u3_noun u3we_glue_fun(u3_noun); - u3_noun u3we_here_fun(u3_noun); - u3_noun u3we_just_fun(u3_noun); - u3_noun u3we_mask_fun(u3_noun); - u3_noun u3we_shim_fun(u3_noun); - u3_noun u3we_stag_fun(u3_noun); - u3_noun u3we_stew_fun(u3_noun); - u3_noun u3we_stir_fun(u3_noun); - - u3_noun u3wef_drg(u3_noun); - u3_noun u3wef_lug(u3_noun); - - u3_noun u3wer_add(u3_noun); - u3_noun u3wer_sub(u3_noun); - u3_noun u3wer_mul(u3_noun); - u3_noun u3wer_div(u3_noun); - u3_noun u3wer_sqt(u3_noun); - u3_noun u3wer_fma(u3_noun); - u3_noun u3wer_lth(u3_noun); - u3_noun u3wer_lte(u3_noun); - u3_noun u3wer_equ(u3_noun); - u3_noun u3wer_gte(u3_noun); - u3_noun u3wer_gth(u3_noun); - - u3_noun u3wet_add(u3_noun); - u3_noun u3wet_sub(u3_noun); - u3_noun u3wet_mul(u3_noun); - u3_noun u3wet_div(u3_noun); - u3_noun u3wet_sqt(u3_noun); - u3_noun u3wet_fma(u3_noun); - u3_noun u3wet_lth(u3_noun); - u3_noun u3wet_lte(u3_noun); - u3_noun u3wet_equ(u3_noun); - u3_noun u3wet_gte(u3_noun); - u3_noun u3wet_gth(u3_noun); - - u3_noun u3weq_add(u3_noun); - u3_noun u3weq_sub(u3_noun); - u3_noun u3weq_mul(u3_noun); - u3_noun u3weq_div(u3_noun); - u3_noun u3weq_sqt(u3_noun); - u3_noun u3weq_fma(u3_noun); - u3_noun u3weq_lth(u3_noun); - u3_noun u3weq_lte(u3_noun); - u3_noun u3weq_equ(u3_noun); - u3_noun u3weq_gte(u3_noun); - u3_noun u3weq_gth(u3_noun); - - u3_noun u3wes_add(u3_noun); - u3_noun u3wes_sub(u3_noun); - u3_noun u3wes_mul(u3_noun); - u3_noun u3wes_div(u3_noun); - u3_noun u3wes_sqt(u3_noun); - u3_noun u3wes_fma(u3_noun); - u3_noun u3wes_lth(u3_noun); - u3_noun u3wes_lte(u3_noun); - u3_noun u3wes_equ(u3_noun); - u3_noun u3wes_gte(u3_noun); - u3_noun u3wes_gth(u3_noun); - - /** Tier 6. - **/ - u3_noun u3wf_bull(u3_noun); - u3_noun u3wf_cell(u3_noun); - u3_noun u3wf_comb(u3_noun); - u3_noun u3wf_cons(u3_noun); - u3_noun u3wf_core(u3_noun); - u3_noun u3wf_cube(u3_noun); - u3_noun u3wf_face(u3_noun); - u3_noun u3wf_fine(u3_noun); - u3_noun u3wf_fitz(u3_noun); - u3_noun u3wf_flan(u3_noun); - u3_noun u3wf_flay(u3_noun); - u3_noun u3wf_flip(u3_noun); - u3_noun u3wf_flor(u3_noun); - u3_noun u3wf_forq(u3_noun); - u3_noun u3wf_fork(u3_noun); - u3_noun u3wf_hint(u3_noun); - u3_noun u3wf_hike(u3_noun); - u3_noun u3wf_look(u3_noun); - u3_noun u3wf_loot(u3_noun); - - u3_noun u3wfl_bunt(u3_noun); - u3_noun u3wfl_whip(u3_noun); - - u3_noun u3wfp_hack(u3_noun); - u3_noun u3wfp_late(u3_noun); - u3_noun u3wfp_open(u3_noun); - u3_noun u3wfp_rake(u3_noun); - - u3_noun u3wfu_busk(u3_noun); - u3_noun u3wfu_crop(u3_noun); - u3_noun u3wfu_find(u3_noun); - u3_noun u3wfu_fond(u3_noun); - u3_noun u3wfu_fish(u3_noun); - u3_noun u3wfu_fuse(u3_noun); - u3_noun u3wfu_mint(u3_noun); - u3_noun u3wfu_mull(u3_noun); - u3_noun u3wfu_nest_dext(u3_noun); - u3_noun u3wfu_peek(u3_noun); - u3_noun u3wfu_play(u3_noun); - u3_noun u3wfu_repo(u3_noun); - u3_noun u3wfu_rest(u3_noun); - -#endif /* ifndef U3_JETS_W_H */ diff --git a/pkg/urbit/include/noun/aliases.h b/pkg/urbit/include/noun/aliases.h deleted file mode 100644 index 9304563a4..000000000 --- a/pkg/urbit/include/noun/aliases.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef U3_ALIASES_H -#define U3_ALIASES_H - - /** Constants. - **/ - /* u3_none - u3_noun which is not a noun. - */ -# define u3_none (u3_noun)0xffffffff - - /* u3_nul: 0, hoon ~. - */ -# define u3_nul 0 - - /* u3_blip: 0, hoon %$. - */ -# define u3_blip 0 - - - /** Typedefs. - **/ - /* u3_post: pointer offset into u3_Loom; _p suffix; declare as u3p(). - */ - typedef c3_w u3_post; -# define u3p(type) u3_post - - /* u3_noun: tagged noun pointer. - ** - ** If bit 31 is 0, a u3_noun is a direct 31-bit atom ("cat"). - ** If bit 31 is 1 and bit 30 0, an indirect atom ("pug"). - ** If bit 31 is 1 and bit 30 1, an indirect cell ("pom"). - ** - ** Bits 0-29 are a word offset against u3_Loom (u3_post). - */ - typedef c3_w u3_noun; - - /* u3_weak: u3_noun which may be u3_none (not a noun). - */ - typedef u3_noun u3_weak; - - /* u3_atom: u3_noun which must be an atom. - */ - typedef u3_noun u3_atom; - - /* u3_term: u3_noun which must be a term (@tas). - */ - typedef u3_noun u3_term; - - /* u3_cell, u3_trel, u3_qual, u3_quin: cell, triple, quadruple, quintuple. - */ - typedef u3_noun u3_cell; - typedef u3_noun u3_trel; - typedef u3_noun u3_qual; - typedef u3_noun u3_quin; - - /* u3_funk, u3_funq: unary and binary noun functions. - */ - typedef u3_noun (*u3_funk)(u3_noun); - typedef u3_noun (*u3_funq)(u3_noun, u3_noun); - - - /** Macros. - **/ - /* u3_assure(): loobean assert, bailing with %fail. - */ -# define u3_assure(x) if ( !_(x) ) { u3m_bail(c3__fail); } - - /* u3_assert(): loobean assert, bailing with %exit. - */ -# define u3_assent(x) if ( !_(x) ) { u3m_bail(c3__exit); } - - - /** Aliases. - **/ - /* u3h(), u3t(), u3at(): noun fragments. - */ -# define u3h(som) u3x_h(som) -# define u3t(som) u3x_t(som) -# define u3at(axe, som) u3x_at(axe, som) - - /* u3nc(), u3nt(), u3nq(): tuple composition. - */ -# define u3nc(a, b) u3i_cell(a, b) -# define u3nt(a, b, c) u3i_trel(a, b, c) -# define u3nq(a, b, c, d) u3i_qual(a, b, c, d) - - - /* u3nl(), u3_none-terminated varargs list - */ -# define u3nl u3i_list - - /* u3du(), u3ud(): noun/cell test. - */ -# define u3du(som) (u3r_du(som)) -# define u3ud(som) (u3r_ud(som)) - - /* u3k(), u3z(): reference counts. - */ -# define u3k(som) u3a_gain(som) -# define u3z(som) u3a_lose(som) - - /* u3do(), u3dc(), u3dt(), u3dq(): arvo calls. - */ -# define u3do(txt_c, arg) u3v_do(txt_c, arg) -# define u3dc(txt_c, a, b) u3v_do(txt_c, u3nc(a, b)) -# define u3dt(txt_c, a, b, c) u3v_do(txt_c, u3nt(a, b, c)) -# define u3dq(txt_c, a, b, c, d) u3v_do(txt_c, u3nq(a, b, c, d)) - - /* u3to(), u3of(): offset/pointer conversion. - */ -# define u3to(type, x) ((type *) u3a_into(x)) -# define u3tn(type, x) (x == 0) ? (void *)0 : ((type *) u3a_into(x)) -# define u3of(type, x) (u3a_outa((type *)x)) - - -#endif /* ifndef U3_ALIASES_H */ diff --git a/pkg/urbit/include/noun/allocate.h b/pkg/urbit/include/noun/allocate.h deleted file mode 100644 index cc30b18fa..000000000 --- a/pkg/urbit/include/noun/allocate.h +++ /dev/null @@ -1,724 +0,0 @@ -#ifndef U3_ALLOCATE_H -#define U3_ALLOCATE_H - -#include - -#include "manage.h" - - /** Constants. - **/ - /* u3a_bits: number of bits in word-addressed pointer. 29 == 2GB. - */ -# define u3a_bits U3_OS_LoomBits - - /* u3a_page: number of bits in word-addressed page. 12 == 16Kbyte page. - */ -# define u3a_page 12 - - /* u3a_pages: number of pages in memory. - */ -# define u3a_pages (1 << (u3a_bits - u3a_page)) - - /* u3a_words: number of words in memory. - */ -# define u3a_words (1 << u3a_bits) - - /* u3a_bytes: number of bytes in memory. - */ -# define u3a_bytes (c3_w)((1 << (2 + u3a_bits))) - - /* u3a_cells: number of representable cells. - */ -# define u3a_cells (c3_w)(u3a_words / u3a_minimum) - - /* u3a_maximum: maximum loom object size (largest possible atom). - */ -# define u3a_maximum \ - (c3_w)(u3a_words - (c3_wiseof(u3a_box) + c3_wiseof(u3a_atom))) - - /* u3a_minimum: minimum loom object size (actual size of a cell). - */ -# define u3a_minimum (c3_w)(1 + c3_wiseof(u3a_box) + c3_wiseof(u3a_cell)) - - /* u3a_fbox_no: number of free lists per size. - */ -# define u3a_fbox_no 27 - - - /** Structures. - **/ - /* u3a_atom, u3a_cell: logical atom and cell structures. - */ - typedef struct { - c3_w mug_w; - } u3a_noun; - - typedef struct { - c3_w mug_w; - c3_w len_w; - c3_w buf_w[0]; - } u3a_atom; - - typedef struct { - c3_w mug_w; - u3_noun hed; - u3_noun tel; - } u3a_cell; - - /* u3a_box: classic allocation box. - ** - ** The box size is also stored at the end of the box in classic - ** bad ass malloc style. Hence a box is: - ** - ** --- - ** siz_w - ** use_w - ** user data - ** siz_w - ** --- - ** - ** Do not attempt to adjust this structure! - */ - typedef struct _u3a_box { - c3_w siz_w; // size of this box - c3_w use_w; // reference count; free if 0 -# ifdef U3_MEMORY_DEBUG - c3_w eus_w; // recomputed refcount - c3_w cod_w; // tracing code -# endif - } u3a_box; - - /* u3a_fbox: free node in heap. Sets minimum node size. - */ - typedef struct _u3a_fbox { - u3a_box box_u; - u3p(struct _u3a_fbox) pre_p; - u3p(struct _u3a_fbox) nex_p; - } u3a_fbox; - - /* u3a_jets: jet dashboard - */ - typedef struct _u3a_jets { - u3p(u3h_root) hot_p; // hot state (home road only) - u3p(u3h_root) war_p; // warm state - u3p(u3h_root) cod_p; // cold state - u3p(u3h_root) han_p; // hank cache - u3p(u3h_root) bas_p; // battery hashes - } u3a_jets; - - /* u3a_road: contiguous allocation and execution context. - */ - typedef struct _u3a_road { - u3p(struct _u3a_road) par_p; // parent road - u3p(struct _u3a_road) kid_p; // child road list - u3p(struct _u3a_road) nex_p; // sibling road - - u3p(c3_w) cap_p; // top of transient region - u3p(c3_w) hat_p; // top of durable region - u3p(c3_w) mat_p; // bottom of transient region - u3p(c3_w) rut_p; // bottom of durable region - u3p(c3_w) ear_p; // original cap if kid is live - - c3_w fut_w[32]; // futureproof buffer - - struct { // escape buffer - union { - jmp_buf buf; - c3_w buf_w[256]; // futureproofing - }; - } esc; - - struct { // miscellaneous config - c3_w fag_w; // flag bits - } how; // - - struct { // allocation pools - u3p(u3a_fbox) fre_p[u3a_fbox_no]; // heap by node size log - u3p(u3a_fbox) cel_p; // custom cell allocator - c3_w fre_w; // number of free words - c3_w max_w; // maximum allocated - } all; - - u3a_jets jed; // jet dashboard - - struct { // bytecode state - u3p(u3h_root) har_p; // formula->post of bytecode - } byc; - - struct { // namespace - u3_noun gul; // (list $+(* (unit (unit)))) now - } ski; - - struct { // trace stack - u3_noun tax; // (list ,*) - u3_noun mer; // emergency buffer to release - } bug; - - struct { // profile stack - c3_d nox_d; // nock steps - c3_d cel_d; // cell allocations - u3_noun don; // (list batt) - u3_noun trace; // (list trace) - u3_noun day; // doss, only in u3H (moveme) - } pro; - - struct { // memoization - u3p(u3h_root) har_p; // (map (pair term noun) noun) - } cax; - } u3a_road; - typedef u3a_road u3_road; - - /* u3a_flag: flags for how.fag_w. All arena related. - */ - enum u3a_flag { - u3a_flag_sand = 0x1, // bump allocation (XX not impl) - }; - - /* u3a_pile: stack control, abstracted over road direction. - */ - typedef struct _u3a_pile { - c3_ws mov_ws; - c3_ws off_ws; - u3_post top_p; -#ifdef U3_MEMORY_DEBUG - u3a_road* rod_u; -#endif - } u3a_pile; - - /** Macros. Should be better commented. - **/ - /* In and out of the box. - */ -# define u3a_boxed(len_w) (len_w + c3_wiseof(u3a_box) + 1) -# define u3a_boxto(box_v) ( (void *) \ - ( ((c3_w *)(void*)(box_v)) + \ - c3_wiseof(u3a_box) ) ) -# define u3a_botox(tox_v) ( (struct _u3a_box *) \ - (void *) \ - ( ((c3_w *)(void*)(tox_v)) - \ - c3_wiseof(u3a_box) ) ) - /* Inside a noun. - */ - - /* u3a_is_cat(): yes if noun [som] is direct atom. - */ -# define u3a_is_cat(som) (((som) >> 31) ? c3n : c3y) - - /* u3a_is_dog(): yes if noun [som] is indirect noun. - */ -# define u3a_is_dog(som) (((som) >> 31) ? c3y : c3n) - - /* u3a_is_pug(): yes if noun [som] is indirect atom. - */ -# define u3a_is_pug(som) ((0b10 == ((som) >> 30)) ? c3y : c3n) - - /* u3a_is_pom(): yes if noun [som] is indirect cell. - */ -# define u3a_is_pom(som) ((0b11 == ((som) >> 30)) ? c3y : c3n) - - /* u3a_to_off(): mask off bits 30 and 31 from noun [som]. - */ -# define u3a_to_off(som) ((som) & 0x3fffffff) - - /* u3a_to_ptr(): convert noun [som] into generic pointer into loom. - */ -# define u3a_to_ptr(som) (u3a_into(u3a_to_off(som))) - - /* u3a_to_wtr(): convert noun [som] into word pointer into loom. - */ -# define u3a_to_wtr(som) ((c3_w *)u3a_to_ptr(som)) - - /* u3a_to_pug(): set bit 31 of [off]. - */ -# define u3a_to_pug(off) (off | 0x80000000) - - /* u3a_to_pom(): set bits 30 and 31 of [off]. - */ -# define u3a_to_pom(off) (off | 0xc0000000) - - /* u3a_is_atom(): yes if noun [som] is direct atom or indirect atom. - */ -# define u3a_is_atom(som) c3o(u3a_is_cat(som), \ - u3a_is_pug(som)) - /* u3a_is_cell: yes if noun [som] is cell. - */ -# define u3a_is_cell(som) u3a_is_pom(som) - - /* u3a_h(): get head of cell [som]. Bail if [som] is not cell. - */ -# define u3a_h(som) \ - ( _(u3a_is_cell(som)) \ - ? ( ((u3a_cell *)u3a_to_ptr(som))->hed )\ - : u3m_bail(c3__exit) ) - - /* u3a_t(): get tail of cell [som]. Bail if [som] is not cell. - */ -# define u3a_t(som) \ - ( _(u3a_is_cell(som)) \ - ? ( ((u3a_cell *)u3a_to_ptr(som))->tel )\ - : u3m_bail(c3__exit) ) - - /* u3a_into(): convert loom offset [x] into generic pointer. - */ -# define u3a_into(x) ((void *)(u3_Loom + (x))) - - /* u3a_outa(): convert pointer [p] into word offset into loom. - */ -# define u3a_outa(p) (((c3_w*)(void*)(p)) - u3_Loom) - - /* u3a_is_north(): yes if road [r] is north road. - */ -# define u3a_is_north(r) __(r->cap_p > r->hat_p) - - /* u3a_is_south(): yes if road [r] is south road. - */ -# define u3a_is_south(r) !u3a_is_north(r) - - /* u3a_open(): words of contiguous free space in road [r] - */ -# define u3a_open(r) ( (c3y == u3a_is_north(r)) \ - ? (c3_w)(r->cap_p - r->hat_p) \ - : (c3_w)(r->hat_p - r->cap_p) ) - - /* u3a_full(): total words in road [r]; - ** u3a_full(r) == u3a_heap(r) + u3a_temp(r) + u3a_open(r) - */ -# define u3a_full(r) ( (c3y == u3a_is_north(r)) \ - ? (c3_w)(r->mat_p - r->rut_p) \ - : (c3_w)(r->rut_p - r->mat_p) ) - - /* u3a_heap(): words of heap in road [r] - */ -# define u3a_heap(r) ( (c3y == u3a_is_north(r)) \ - ? (c3_w)(r->hat_p - r->rut_p) \ - : (c3_w)(r->rut_p - r->hat_p) ) - - /* u3a_temp(): words of stack in road [r] - */ -# define u3a_temp(r) ( (c3y == u3a_is_north(r)) \ - ? (c3_w)(r->mat_p - r->cap_p) \ - : (c3_w)(r->cap_p - r->mat_p) ) - -# define u3a_north_is_senior(r, dog) \ - __((u3a_to_off(dog) < r->rut_p) || \ - (u3a_to_off(dog) >= r->mat_p)) - -# define u3a_north_is_junior(r, dog) \ - __((u3a_to_off(dog) >= r->cap_p) && \ - (u3a_to_off(dog) < r->mat_p)) - -# define u3a_north_is_normal(r, dog) \ - c3a(!(u3a_north_is_senior(r, dog)), \ - !(u3a_north_is_junior(r, dog))) - -# define u3a_south_is_senior(r, dog) \ - __((u3a_to_off(dog) < r->mat_p) || \ - (u3a_to_off(dog) >= r->rut_p)) - -# define u3a_south_is_junior(r, dog) \ - __((u3a_to_off(dog) < r->cap_p) && \ - (u3a_to_off(dog) >= r->mat_p)) - -# define u3a_south_is_normal(r, dog) \ - c3a(!(u3a_south_is_senior(r, dog)), \ - !(u3a_south_is_junior(r, dog))) - -# define u3a_is_junior(r, som) \ - ( _(u3a_is_cat(som)) \ - ? c3n \ - : _(u3a_is_north(r)) \ - ? u3a_north_is_junior(r, som) \ - : u3a_south_is_junior(r, som) ) - -# define u3a_is_senior(r, som) \ - ( _(u3a_is_cat(som)) \ - ? c3y \ - : _(u3a_is_north(r)) \ - ? u3a_north_is_senior(r, som) \ - : u3a_south_is_senior(r, som) ) - -# define u3a_is_mutable(r, som) \ - ( _(u3a_is_atom(som)) \ - ? c3n \ - : _(u3a_is_senior(r, som)) \ - ? c3n \ - : _(u3a_is_junior(r, som)) \ - ? c3n \ - : (u3a_botox(u3a_to_ptr(som))->use_w == 1) \ - ? c3y : c3n ) - - /** Globals. - **/ - /* u3_Road / u3R: current road (thread-local). - */ - c3_global u3_road* u3a_Road; -# define u3R u3a_Road - - /* u3_Code: memory code. - */ -#ifdef U3_MEMORY_DEBUG - c3_global c3_w u3_Code; -#endif - -# define u3_Loom ((c3_w *)(void *)U3_OS_LoomBase) - - /** inline functions. - **/ - /** road stack. - **/ - /* u3a_drop(): drop a road stack frame per [pil_u]. - */ - inline void - u3a_drop(const u3a_pile* pil_u) - { - u3R->cap_p -= pil_u->mov_ws; - } - - /* u3a_peek(): examine the top of the road stack. - */ - inline void* - u3a_peek(const u3a_pile* pil_u) - { - return u3to(void, (u3R->cap_p + pil_u->off_ws)); - } - - /* u3a_pop(): drop a road stack frame, peek at the new top. - */ - inline void* - u3a_pop(const u3a_pile* pil_u) - { - u3a_drop(pil_u); - return u3a_peek(pil_u); - } - - /* u3a_push(): push a frame onto the road stack, per [pil_u]. - */ - inline void* - u3a_push(const u3a_pile* pil_u) - { - u3R->cap_p += pil_u->mov_ws; - return u3a_peek(pil_u); - } - - /* u3a_pile_sane(): bail on invalid road stack state. - */ - inline void - u3a_pile_sane(const u3a_pile* pil_u) - { - // !off means we're on a north road - // - if ( !pil_u->off_ws ) { - if( !(u3R->cap_p > u3R->hat_p) ) { - u3m_bail(c3__meme); - } -#ifdef U3_MEMORY_DEBUG - c3_assert( pil_u->top_p >= u3R->cap_p ); -#endif - } - else { - if( !(u3R->cap_p < u3R->hat_p) ) { - u3m_bail(c3__meme); - } -#ifdef U3_MEMORY_DEBUG - c3_assert( pil_u->top_p <= u3R->cap_p ); -#endif - } - -#ifdef U3_MEMORY_DEBUG - c3_assert( pil_u->rod_u == u3R ); -#endif - } - - /* u3a_pile_done(): assert valid upon completion. - */ - inline c3_o - u3a_pile_done(const u3a_pile* pil_u) - { - return (pil_u->top_p == u3R->cap_p) ? c3y : c3n; - } - - /** Functions. - **/ - /** Allocation. - **/ - /* Word-aligned allocation. - */ - /* u3a_walloc(): allocate storage measured in words. - */ - void* - u3a_walloc(c3_w len_w); - - /* u3a_celloc(): allocate a cell. Faster, sometimes. - */ - c3_w* - u3a_celloc(void); - - /* u3a_wfree(): free storage. - */ - void - u3a_wfree(void* lag_v); - - /* u3a_wtrim(): trim storage. - */ - void - u3a_wtrim(void* tox_v, c3_w old_w, c3_w len_w); - - /* u3a_wealloc(): word realloc. - */ - void* - u3a_wealloc(void* lag_v, c3_w len_w); - - /* u3a_pile_prep(): initialize stack control. - */ - void - u3a_pile_prep(u3a_pile* pil_u, c3_w len_w); - - /* C-style aligned allocation - *not* compatible with above. - */ - /* u3a_malloc(): aligned storage measured in bytes. - */ - void* - u3a_malloc(size_t len_i); - - /* u3a_malloc_ssl(): openssl-shaped malloc - */ - void* - u3a_malloc_ssl(size_t len_i -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - , const char* file, int line -#endif - ); - - /* u3a_calloc(): aligned storage measured in bytes. - */ - void* - u3a_calloc(size_t num_i, size_t len_i); - - /* u3a_realloc(): aligned realloc in bytes. - */ - void* - u3a_realloc(void* lag_v, size_t len_i); - - /* u3a_realloc2(): gmp-shaped realloc. - */ - void* - u3a_realloc2(void* lag_v, size_t old_i, size_t new_i); - - /* u3a_realloc_ssl(): openssl-shaped realloc. - */ - void* - u3a_realloc_ssl(void* lag_v, size_t len_i -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - , const char* file, int line -#endif - ); - - /* u3a_free(): free for aligned malloc. - */ - void - u3a_free(void* tox_v); - - /* u3a_free2(): gmp-shaped free. - */ - void - u3a_free2(void* tox_v, size_t siz_i); - - /* u3a_free_ssl(): openssl-shaped free. - */ - void - u3a_free_ssl(void* tox_v -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - , const char* file, int line -#endif - ); - - /* Reference and arena control. - */ - /* u3a_gain(): gain a reference count in normal space. - */ - u3_weak - u3a_gain(u3_weak som); - - /* u3a_take(): gain, copying juniors. - */ - u3_noun - u3a_take(u3_noun som); - - /* u3a_left(): true of junior if preserved. - */ - c3_o - u3a_left(u3_noun som); - - /* u3a_lose(): lose a reference. - */ - void - u3a_lose(u3_weak som); - - /* u3a_wash(): wash all lazy mugs in subtree. RETAIN. - */ - void - u3a_wash(u3_noun som); - - /* u3a_use(): reference count. - */ - c3_w - u3a_use(u3_noun som); - - /* u3a_wed(): unify noun references. - */ - void - u3a_wed(u3_noun* a, u3_noun* b); - - /* u3a_luse(): check refcount sanity. - */ - void - u3a_luse(u3_noun som); - - /* u3a_mark_ptr(): mark a pointer for gc. Produce size. - */ - c3_w - u3a_mark_ptr(void* ptr_v); - - /* u3a_mark_mptr(): mark a u3_malloc-allocated ptr for gc. - */ - c3_w - u3a_mark_mptr(void* ptr_v); - - /* u3a_mark_noun(): mark a noun for gc. Produce size. - */ - c3_w - u3a_mark_noun(u3_noun som); - - /* u3a_mark_road(): mark ad-hoc persistent road structures. - */ - c3_w - u3a_mark_road(FILE* fil_u); - - /* u3a_reclaim(): clear ad-hoc persistent caches to reclaim memory. - */ - void - u3a_reclaim(void); - - /* u3a_rewrite_compact(): rewrite pointers in ad-hoc persistent road structures. - */ - void - u3a_rewrite_compact(void); - - /* u3a_rewrite_ptr(): mark a pointer as already having been rewritten - */ - c3_o - u3a_rewrite_ptr(void* ptr_v); - - /* u3a_rewrite_noun(): rewrite a noun for compaction. - */ - void - u3a_rewrite_noun(u3_noun som); - - /* u3a_rewritten(): rewrite a pointer for compaction. - */ - u3_post - u3a_rewritten(u3_post som_p); - - /* u3a_rewritten(): rewritten noun pointer for compaction. - */ - u3_noun - u3a_rewritten_noun(u3_noun som); - - /* u3a_count_noun(): count size of noun. - */ - c3_w - u3a_count_noun(u3_noun som); - - /* u3a_discount_noun(): clean up after counting a noun. - */ - c3_w - u3a_discount_noun(u3_noun som); - - /* u3a_count_ptr(): count a pointer for gc. Produce size. */ - c3_w - u3a_count_ptr(void* ptr_v); - - /* u3a_discount_ptr(): discount a pointer for gc. Produce size. */ - c3_w - u3a_discount_ptr(void* ptr_v); - - /* u3a_idle(): measure free-lists in [rod_u] - */ - c3_w - u3a_idle(u3a_road* rod_u); - - /* u3a_sweep(): sweep a fully marked road. - */ - c3_w - u3a_sweep(void); - - /* u3a_pack_seek(): sweep the heap, modifying boxes to record new addresses. - */ - void - u3a_pack_seek(u3a_road* rod_u); - - /* u3a_pack_move(): sweep the heap, moving boxes to new addresses. - */ - void - u3a_pack_move(u3a_road* rod_u); - - /* u3a_sane(): check allocator sanity. - */ - void - u3a_sane(void); - - /* u3a_lush(): leak push. - */ - c3_w - u3a_lush(c3_w lab_w); - - /* u3a_lop(): leak pop. - */ - void - u3a_lop(c3_w lab_w); - - /* u3a_print_time: print microsecond time. - */ - void - u3a_print_time(c3_c* str_c, c3_c* cap_c, c3_d mic_d); - - /* u3a_print_memory(): print memory amount. - */ - void - u3a_print_memory(FILE* fil_u, c3_c* cap_c, c3_w wor_w); - - /* u3a_maid(): maybe print memory. - */ - c3_w - u3a_maid(FILE* fil_u, c3_c* cap_c, c3_w wor_w); - - /* u3a_deadbeef(): write 0xdeadbeef from hat to cap. - */ - void - u3a_deadbeef(void); - - /* u3a_walk_fore(): preorder traversal, visits ever limb of a noun. - ** - ** cells are visited *before* their heads and tails - ** and can shortcircuit traversal by returning [c3n] - */ - void - u3a_walk_fore(u3_noun a, - void* ptr_v, - void (*pat_f)(u3_atom, void*), - c3_o (*cel_f)(u3_noun, void*)); - - /* u3a_walk_fore_unsafe(): u3a_walk_fore(), without overflow checks - */ - void - u3a_walk_fore_unsafe(u3_noun a, - void* ptr_v, - void (*pat_f)(u3_atom, void*), - c3_o (*cel_f)(u3_noun, void*)); - - /* u3a_string(): `a` as an on-loom c-string. - */ - c3_c* - u3a_string(u3_atom a); - -#endif /* ifndef U3_ALLOCATE_H */ diff --git a/pkg/urbit/include/noun/events.h b/pkg/urbit/include/noun/events.h deleted file mode 100644 index f44a94e57..000000000 --- a/pkg/urbit/include/noun/events.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef U3_EVENTS_H -#define U3_EVENTS_H - - /** Data structures. - **/ - /* u3e_line: control line. - */ - typedef struct _u3e_line { - c3_w pag_w; - c3_w mug_w; - } u3e_line; - - /* u3e_control: memory change, control file. - */ - typedef struct _u3e_control { - c3_w ver_y; // version number - c3_w nor_w; // new page count north - c3_w sou_w; // new page count south - c3_w pgs_w; // number of changed pages - u3e_line mem_u[0]; // per page - } u3e_control; - - /* u3_cs_patch: memory change, top level. - */ - typedef struct _u3_cs_patch { - c3_i ctl_i; - c3_i mem_i; - u3e_control* con_u; - } u3_ce_patch; - - /* u3e_image: memory segment, open file. - */ - typedef struct _u3e_image { - c3_c* nam_c; // segment name - c3_i fid_i; // open file, or 0 - c3_w pgs_w; // length in pages - } u3e_image; - - /* u3e_pool: entire memory system. - */ - typedef struct _u3e_pool { - c3_c* dir_c; // path to - c3_w dit_w[u3a_pages >> 5]; // touched since last save - u3e_image nor_u; // north segment - u3e_image sou_u; // south segment - } u3e_pool; - - - /** Globals. - **/ - /* u3_Pool / u3P: global memory control. - */ - c3_global u3e_pool u3e_Pool; -# define u3P u3e_Pool - - /** Constants. - **/ -# define u3e_version 1 - - /** Functions. - **/ - /* u3e_fault(): handle a memory event with libsigsegv protocol. - */ - c3_i - u3e_fault(void* adr_v, c3_i ser_i); - - /* u3e_save(): - */ - void - u3e_save(void); - - /* u3e_live(): start the persistence system. Return c3y if no image. - */ - c3_o - u3e_live(c3_o nuu_o, c3_c* dir_c); - - /* u3e_yolo(): disable dirty page tracking, read/write whole loom. - */ - c3_o - u3e_yolo(void); - - /* u3e_foul(): dirty all the pages of the loom. - */ - void - u3e_foul(void); - -#endif /* ifndef U3_EVENTS_H */ diff --git a/pkg/urbit/include/noun/hashtable.h b/pkg/urbit/include/noun/hashtable.h deleted file mode 100644 index 8c69b13b9..000000000 --- a/pkg/urbit/include/noun/hashtable.h +++ /dev/null @@ -1,185 +0,0 @@ -#ifndef U3_HASHTABLE_H -#define U3_HASHTABLE_H - - /** Data structures. - **/ - /** Straightforward implementation of the classic Bagwell - *** HAMT (hash array mapped trie), using a mug hash. - *** - *** Because a mug is 31 bits, the root table has 64 slots. - *** The 31 bits of a mug are divided into the first lookup, - *** which is 6 bits (corresponding to the 64 entries in the - *** root table), followed by 5 more branchings of 5 bits each, - *** corresponding to the 32-slot nodes for everything under - *** the root node. - *** - *** We store an extra "freshly warm" bit for a simple - *** clock-algorithm reclamation policy, not yet implemented. - *** Search "clock algorithm" to figure it out. - **/ - /* u3h_slot: map slot. - ** - ** Either a key-value cell or a loom offset, decoded as a pointer - ** to a u3h_node, or a u3h_buck at the bottom. Matches the u3_noun - ** format - coordinate with allocate.h. The top two bits are: - ** - ** 00 - empty (in the root table only) - ** 01 - table - ** 02 - entry, stale - ** 03 - entry, fresh - */ - typedef c3_w u3h_slot; - - /* u3h_node: map node. - */ - typedef struct { - c3_w map_w; // bitmap for [sot_w] - u3h_slot sot_w[0]; // filled slots - } u3h_node; - - /* u3h_root: hash root table - */ - typedef struct { - c3_w max_w; // number of cache lines (0 for no trimming) - c3_w use_w; // number of lines currently filled - struct { - c3_w mug_w; // current hash - c3_w inx_w; // index into current hash bucket - c3_o buc_o; // XX remove - } arm_u; // clock arm - u3h_slot sot_w[64]; // slots - } u3h_root; - - /* u3h_buck: bottom bucket. - */ - typedef struct { - c3_w len_w; // length of [sot_w] - u3h_slot sot_w[0]; // filled slots - } u3h_buck; - - /** HAMT macros. - *** - *** Coordinate with u3_noun definition! - **/ - /* u3h_slot_is_null(): yes iff slot is empty - ** u3h_slot_is_noun(): yes iff slot contains a key/value cell - ** u3h_slot_is_node(): yes iff slot contains a subtable/bucket - ** u3h_slot_is_warm(): yes iff fresh bit is set - ** u3h_slot_to_node(): slot to node pointer - ** u3h_node_to_slot(): node pointer to slot - ** u3h_slot_to_noun(): slot to cell - ** u3h_noun_to_slot(): cell to slot - ** u3h_noun_be_warm(): warm mutant - ** u3h_noun_be_cold(): cold mutant - */ -# define u3h_slot_is_null(sot) ((0 == ((sot) >> 30)) ? c3y : c3n) -# define u3h_slot_is_node(sot) ((1 == ((sot) >> 30)) ? c3y : c3n) -# define u3h_slot_is_noun(sot) ((1 == ((sot) >> 31)) ? c3y : c3n) -# define u3h_slot_is_warm(sot) (((sot) & 0x40000000) ? c3y : c3n) -# define u3h_slot_to_node(sot) (u3a_into((sot) & 0x3fffffff)) -# define u3h_node_to_slot(ptr) (u3a_outa(ptr) | 0x40000000) -# define u3h_noun_be_warm(sot) ((sot) | 0x40000000) -# define u3h_noun_be_cold(sot) ((sot) & ~0x40000000) -# define u3h_slot_to_noun(sot) (0x40000000 | (sot)) -# define u3h_noun_to_slot(som) (u3h_noun_be_warm(som)) - - /** Functions. - *** - *** Needs: delete and merge functions; clock reclamation function. - **/ - /* u3h_new_cache(): create hashtable with bounded size. - */ - u3p(u3h_root) - u3h_new_cache(c3_w clk_w); - - /* u3h_new(): create hashtable. - */ - u3p(u3h_root) - u3h_new(void); - - /* u3h_put(): insert in hashtable. - ** - ** `key` is RETAINED; `val` is transferred. - */ - void - u3h_put(u3p(u3h_root) har_p, u3_noun key, u3_noun val); - - /* u3h_uni(): unify hashtables, copying [rah_p] into [har_p] - */ - void - u3h_uni(u3p(u3h_root) har_p, u3p(u3h_root) rah_p); - - /* u3h_get(): read from hashtable. - ** - ** `key` is RETAINED; result is PRODUCED. - */ - u3_weak - u3h_get(u3p(u3h_root) har_p, u3_noun key); - - /* u3h_git(): read from hashtable, retaining result. - ** - ** `key` is RETAINED; result is RETAINED. - */ - u3_weak - u3h_git(u3p(u3h_root) har_p, u3_noun key); - - /* u3h_trim_to(): trim to n key-value pairs - */ - void - u3h_trim_to(u3p(u3h_root) har_p, c3_w n_w); - - /* u3h_free(): free hashtable. - */ - void - u3h_free(u3p(u3h_root) har_p); - - /* u3h_mark(): mark hashtable for gc. - */ - c3_w - u3h_mark(u3p(u3h_root) har_p); - - /* u3h_rewrite(): rewrite hashtable for compaction. - */ - void - u3h_rewrite(u3p(u3h_root) har_p); - - /* u3h_count(): count hashtable for gc. - */ - c3_w - u3h_count(u3p(u3h_root) har_p); - - /* u3h_discount(): discount hashtable for gc. - */ - c3_w - u3h_discount(u3p(u3h_root) har_p); - - /* u3h_walk_with(): traverse hashtable with key, value fn and data - * argument; RETAINS. - */ - void - u3h_walk_with(u3p(u3h_root) har_p, - void (*fun_f)(u3_noun, void*), - void* wit); - - /* u3h_walk(): u3h_walk_with, but with no data argument - */ - void - u3h_walk(u3p(u3h_root) har_p, void (*fun_f)(u3_noun)); - - /* u3h_take_with(): gain hashtable, copying junior keys - ** and calling [fun_f] on values - */ - u3p(u3h_root) - u3h_take_with(u3p(u3h_root) har_p, u3_funk fun_f); - - /* u3h_take(): gain hashtable, copying junior nouns - */ - u3p(u3h_root) - u3h_take(u3p(u3h_root) har_p); - - /* u3h_wyt(): number of entries - */ - c3_w - u3h_wyt(u3p(u3h_root) har_p); - -#endif /* ifndef U3_HASHTABLE_H */ diff --git a/pkg/urbit/include/noun/imprison.h b/pkg/urbit/include/noun/imprison.h deleted file mode 100644 index 2123fb813..000000000 --- a/pkg/urbit/include/noun/imprison.h +++ /dev/null @@ -1,159 +0,0 @@ -#ifndef U3_IMPRISON_H -#define U3_IMPRISON_H - - /** Structures. - **/ - /* u3i_slab: atom builder. - */ - typedef struct _u3i_slab { - struct { // internals - u3a_atom* _vat_u; // heap atom (nullable) - c3_w _sat_w; // static storage - } _; // - union { // - c3_y* buf_y; // bytes - c3_w* buf_w; // words - }; // - c3_w len_w; // word length - } u3i_slab; - - /* staged atom-building api - */ - /* u3i_slab_init(): configure bloq-length slab, zero-initialize. - */ - void - u3i_slab_init(u3i_slab* sab_u, c3_g met_g, c3_d len_d); - - /* u3i_slab_bare(): configure bloq-length slab, uninitialized. - */ - void - u3i_slab_bare(u3i_slab* sab_u, c3_g met_g, c3_d len_d); - - /* u3i_slab_from(): configure bloq-length slab, initialize with [a]. - */ - void - u3i_slab_from(u3i_slab* sab_u, u3_atom a, c3_g met_g, c3_d len_d); - - /* u3i_slab_grow(): resize slab, zero-initializing new space. - */ - void - u3i_slab_grow(u3i_slab* sab_u, c3_g met_g, c3_d len_d); - - /* u3i_slab_free(): dispose memory backing slab. - */ - void - u3i_slab_free(u3i_slab* sab_u); - - /* u3i_slab_mint(): produce atom from slab, trimming. - */ - u3_atom - u3i_slab_mint(u3i_slab* sab_u); - - /* u3i_slab_moot(): produce atom from slab, no trimming. - */ - u3_atom - u3i_slab_moot(u3i_slab* sab_u); - - /* u3i_slab_mint_bytes(): produce atom from byte-slab, trimming. - ** XX assumes little-endian, implement swap to support big-endian - */ -# define u3i_slab_mint_bytes u3i_slab_mint - - /* u3i_slab_moot_bytes(): produce atom from byte-slab, no trimming. - ** XX assumes little-endian, implement swap to support big-endian - */ -# define u3i_slab_moot_bytes u3i_slab_moot - - /* General constructors. - */ - /* u3i_word(): construct u3_atom from c3_w. - */ - u3_atom - u3i_word(c3_w dat_w); - - /* u3i_chub(): construct u3_atom from c3_d. - */ - u3_atom - u3i_chub(c3_d dat_d); - - /* u3i_bytes(): Copy [a] bytes from [b] to an LSB first atom. - */ - u3_atom - u3i_bytes(c3_w a_w, - const c3_y* b_y); - - /* u3i_words(): Copy [a] words from [b] into an atom. - */ - u3_atom - u3i_words(c3_w a_w, - const c3_w* b_w); - - /* u3i_chubs(): Copy [a] chubs from [b] into an atom. - */ - u3_atom - u3i_chubs(c3_w a_w, - const c3_d* b_d); - - /* u3i_mp(): Copy the GMP integer [a] into an atom, and clear it. - */ - u3_atom - u3i_mp(mpz_t a_mp); - - /* u3i_vint(): increment [a]. - */ - u3_atom - u3i_vint(u3_noun a); - - /* u3i_cell(): Produce the cell `[a b]`. - */ - u3_noun - u3i_cell(u3_noun a, u3_noun b); - - /* u3i_defcons(): allocate cell for deferred construction. - ** NB: [hed] and [tel] pointers MUST be filled. - */ - u3_cell - u3i_defcons(u3_noun** hed, u3_noun** tel); - - /* u3i_trel(): Produce the triple `[a b c]`. - */ - u3_noun - u3i_trel(u3_noun a, u3_noun b, u3_noun c); - - /* u3i_qual(): Produce the cell `[a b c d]`. - */ - u3_noun - u3i_qual(u3_noun a, u3_noun b, u3_noun c, u3_noun d); - - /* u3i_string(): Produce an LSB-first atom from the C string [a]. - */ - u3_atom - u3i_string(const c3_c* a_c); - - /* u3i_tape(): from a C string, to a list of bytes. - */ - u3_noun - u3i_tape(const c3_c* txt_c); - - /* u3i_list(): list from `u3_none`-terminated varargs. - */ - u3_noun - u3i_list(u3_weak som, ...); - - /* u3i_edit(): - ** - ** Mutate `big` at axis `axe` with new value `som` - ** `axe` is RETAINED. - */ - u3_noun - u3i_edit(u3_noun big, u3_noun axe, u3_noun som); - - /* u3i_molt(): - ** - ** Mutate `som` with a 0-terminated list of axis, noun pairs. - ** Axes must be cats (31 bit). - */ - u3_noun - u3i_molt(u3_noun som, ...); - -#endif /* ifndef U3_IMPRISON_H */ diff --git a/pkg/urbit/include/noun/jets.h b/pkg/urbit/include/noun/jets.h deleted file mode 100644 index 5b1c4f03c..000000000 --- a/pkg/urbit/include/noun/jets.h +++ /dev/null @@ -1,304 +0,0 @@ -#ifndef U3_JETS_H -#define U3_JETS_H - - /** Noun semantics. - **/ -#if 0 -+= location $: pattern=(each static dynamic) - name=term - hooks=(map term axis) - == -+= static (each payload=* parent=location) -+= dynamic [where=axis parent=location] -:: -+= registry [roots=(map * location) parents=(list parent)] -+= parent (pair axis (map location location)) -:: -+= activation $: hot-index=@ud - drivers=(map axis @ud) - label=path - jit=* :: FIXME: should probably be (map battery *) - :: since there can be multiple batteries per location - == -+= hot-info $: reg=registry - hot-index=@ud - drivers=(map axis @ud) - label=path - == -+= bash @ :: battery hash (sha-256 based) -:: -+= hot (map bash hot-info) -+= cold (map battery=^ (pair bash registry)) -+= warm (map location activation) -#endif - - /** Data structures. - *** - *** All of these are transient structures allocated with malloc. - **/ - /* u3j_harm: jet arm. - */ - typedef struct _u3j_harm { - c3_c* fcs_c; // `.axe` or name - u3_noun (*fun_f)(u3_noun); // compute or 0 / semitransfer - // c3_o (*val_f)(u3_noun); // validate or 0 / retain - c3_o ice; // perfect (don't test) - c3_o tot; // total (never punts) - c3_o liv; // live (enabled) - c3_l axe_l; // computed/discovered axis - struct _u3j_core* cop_u; // containing core - } u3j_harm; - - /* u3j_hood: hook description. - */ - typedef struct _u3j_hood { - c3_c* nam_c; // hook name - c3_l axe_l; // hook axis (XX: direct) - c3_o kic_o; // hook is kick (vs. fragment) - c3_l sax_l; // hook subject axis (XX: direct) - } u3j_hood; - - /* u3j_core: driver definition. - */ - typedef struct _u3j_core { - c3_c* cos_c; // control string - c3_l axe_l; // axis to parent - struct _u3j_harm* arm_u; // blank-terminated static list - struct _u3j_core* dev_u; // blank-terminated static list - c3_c** bas_u; // blank-terminated static list - struct _u3j_hood* huc_u; // blank-terminated static list - struct _u3j_core* par_u; // dynamic parent pointer - c3_l jax_l; // index in global dashboard - } u3j_core; - - /* u3j_dash, u3_Dash, u3D: jet dashboard singleton - */ - typedef struct _u3j_dash { - u3j_core* dev_u; // null-terminated static list - c3_l len_l; // dynamic array length - c3_l all_l; // allocated length - u3j_core* ray_u; // dynamic array by axis - } u3j_dash; - - /* u3j_fist: a single step in a fine check. - */ - typedef struct { - u3_noun bat; // battery - u3_noun pax; // parent axis - } u3j_fist; - - /* u3j_fink: (fine check) enough data to verify a located core. - */ - typedef struct { - c3_w len_w; // number of fists - u3_noun sat; // static noun at end of check - u3j_fist fis_u[0]; // fists - } u3j_fink; - - /* u3j_rite: site of a %fast, used to skip re-mining. - */ - typedef struct { - c3_o own_o; // rite owns fink? - u3_weak clu; // cached product of clue formula - u3p(u3j_fink) fin_p; // fine check - } u3j_rite; - - /* u3j_site: site of a kick (nock 9), used to cache call target. - */ - struct _u3n_prog; - typedef struct { - u3p(struct _u3n_prog) pog_p; // program for formula - u3_noun axe; // axis - u3_weak bat; // battery (for verification) - u3_weak bas; // hash of battery (for hot find) - u3_weak loc; // location (for reaming) - c3_o jet_o; // have jet driver? - c3_o fon_o; // site owns fink? - u3_weak lab; // label (for tracing) - u3j_core* cop_u; // jet core - u3j_harm* ham_u; // jet arm - u3p(u3j_fink) fin_p; // fine check - } u3j_site; - - /** Globals. - **/ - /* u3_Dash: jet dashboard. - */ - extern u3j_dash u3j_Dash; -# define u3D u3j_Dash - - /** Functions. - **/ - /* u3j_boot(): initialize jet system. - */ - c3_w - u3j_boot(c3_o nuu_o); - - /* u3j_clear(): clear jet table to re-register. - */ - void - u3j_clear(void); - - /* u3j_cook(): - ** - ** Execute hook from core, call site cached by arbitrary c string - */ - u3_noun - u3j_cook(const c3_c* key_c, - u3_noun cor, - const c3_c* tam_c); - - /* u3j_hook(): - ** - ** Execute hook from core. - */ - u3_noun - u3j_hook(u3_noun cor, - const c3_c* tam_c); - - /* u3j_soft(): - ** - ** Execute hook from core, without jet. - */ - u3_noun - u3j_soft(u3_noun cor, - const c3_c* tam_c); - - /* u3j_kick(): try to kick by jet. If no kick, produce u3_none. - ** - ** `axe` is RETAINED by the caller; `cor` is RETAINED iff there - ** is no kick, TRANSFERRED if one. - */ - u3_weak - u3j_kick(u3_noun cor, u3_noun axe); - - /* u3j_kink(): kick either by jet or by nock. - */ - u3_noun - u3j_kink(u3_noun cor, - u3_noun axe); - - /* u3j_mine(): register core for jets. - */ - void - u3j_mine(u3_noun clu, - u3_noun cor); - - /* u3j_ream(): refresh after restoring from checkpoint. - */ - void - u3j_ream(void); - - /* u3j_stay(): extract cold state - */ - u3_noun - u3j_stay(void); - - /* u3j_load(): inject cold state - */ - void - u3j_load(u3_noun rel); - - /* u3j_reap(): promote jet state. - */ - void - u3j_reap(u3a_jets jed_u); - - /* u3j_take(): copy junior jet state. - */ - u3a_jets - u3j_take(u3a_jets jed_u); - - /* u3j_rite_mine(): mine cor with clu, using u3j_rite for caching - */ - void - u3j_rite_mine(u3j_rite* rit_u, u3_noun clu, u3_noun cor); - - /* u3j_rite_take(): copy junior rite references from src_u to dst_u. - */ - void - u3j_rite_take(u3j_rite* dst_u, u3j_rite* src_u); - - /* u3j_rite_merge(): copy rite references from src_u to dst_u, - ** losing old references - */ - void - u3j_rite_merge(u3j_rite* dst_u, u3j_rite* src_u); - - /* u3j_site_take(): copy junior site references. - */ - void - u3j_site_take(u3j_site* dst_u, u3j_site* src_u); - - /* u3j_site_merge(): copy site references from src_u to dst_u, - ** losing old references - */ - void - u3j_site_merge(u3j_site* dst_u, u3j_site* src_u); - - /* u3j_site_ream(): refresh u3j_site after restoring from checkpoint - */ - void - u3j_site_ream(u3j_site* sit_u); - - /* u3j_site_kick(): kick a core with a u3j_site cache. - */ - u3_weak - u3j_site_kick(u3_noun cor, u3j_site* sit_u); - - /* u3j_gate_prep(): prepare a locally cached gate to call repeatedly. - */ - void - u3j_gate_prep(u3j_site* sit_u, u3_noun cor); - - /* u3j_gate_slam(): slam a site prepared by u3j_gate_find() with sample. - */ - u3_noun - u3j_gate_slam(u3j_site* sit_u, u3_noun sam); - - /* u3j_gate_lose(): clean up site prepared by u3j_gate_find(). - */ - void - u3j_gate_lose(u3j_site* sit_u); - - /* u3j_rite_mark(): mark u3j_rite for gc. - */ - c3_w - u3j_rite_mark(u3j_rite* rit_u); - - /* u3j_rite_lose(): lose references of u3j_rite (but do not free). - */ - void - u3j_rite_lose(u3j_rite* rit_u); - - /* u3j_site_lose(): lose references of u3j_site (but do not free). - */ - void - u3j_site_lose(u3j_site* sit_u); - - /* u3j_site_mark(): mark u3j_site for gc. - */ - c3_w - u3j_site_mark(u3j_site* sit_u); - - /* u3j_mark(): mark jet state for gc. - */ - c3_w - u3j_mark(FILE* fil_u); - - /* u3j_free(): free jet state. - */ - void - u3j_free(void); - - /* u3j_reclaim(): clear ad-hoc persistent caches to reclaim memory. - */ - void - u3j_reclaim(void); - - /* u3j_rewrite_compact(): rewrite jet state for compaction. - */ - void - u3j_rewrite_compact(); - -#endif /* ifndef U3_JETS_H */ diff --git a/pkg/urbit/include/noun/log.h b/pkg/urbit/include/noun/log.h deleted file mode 100644 index e786eff5f..000000000 --- a/pkg/urbit/include/noun/log.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef U3_LOG_H -#define U3_LOG_H - -/* u3l_log(): logs to stderr or redirects to configured function. -*/ - void - u3l_log(const char* format, ...) - __attribute__ ((format (printf, 1, 2))); - -/* u3l_punt(): condtionally logs a named punt - * (e.g. "mint-punt" for the `name` "mint") - * when `pro` is u3_none, and returns pro. - * For use when a jet driver declines to handle - * a core, when the user should be somehow notified - * (e.g. in a cryptographic jet). - */ - u3_weak - u3l_punt(const char* name, u3_weak pro); - -#endif /* ifndef U3_LOG_H */ diff --git a/pkg/urbit/include/noun/manage.h b/pkg/urbit/include/noun/manage.h deleted file mode 100644 index 5c522bcd1..000000000 --- a/pkg/urbit/include/noun/manage.h +++ /dev/null @@ -1,152 +0,0 @@ -#ifndef U3_MANAGE_H -#define U3_MANAGE_H - - /** System management. - **/ - /* u3m_boot(): start the u3 system. return next event, starting from 1. - */ - c3_d - u3m_boot(c3_c* dir_c); - - /* u3m_boot_lite(): start without checkpointing. - */ - c3_d - u3m_boot_lite(void); - - /* u3m_stop(): graceful shutdown cleanup. */ - void - u3m_stop(void); - - /* u3m_bail(): bail out. Does not return. - ** - ** Bail motes: - ** - ** %exit :: semantic failure - ** %evil :: bad crypto - ** %intr :: interrupt - ** %fail :: execution failure - ** %foul :: assert failure - ** %need :: network block - ** %meme :: out of memory - ** %time :: timed out - ** %oops :: assertion failure - */ - c3_i - u3m_bail(c3_m how_m) __attribute__((noreturn)); - - /* u3m_init(): start the environment. - */ - void - u3m_init(); - - /* u3m_pave(): instantiate or activate image. - */ - void - u3m_pave(c3_o nuu_o); - - /* u3m_file(): load file, as atom, or bail. - */ - u3_noun - u3m_file(c3_c* pas_c); - - /* u3m_error(): bail out with %exit, ct_pushing error. - */ - c3_i - u3m_error(c3_c* str_c); - - /* u3m_hate(): new, integrated leap mechanism (enter). - */ - void - u3m_hate(c3_w pad_w); - - /* u3m_love(): return product from leap. - */ - u3_noun - u3m_love(u3_noun pro); - - /* u3m_soft(): system soft wrapper. unifies unix and nock errors. - ** - ** Produces [%$ result] or [%error (list tank)]. - */ - u3_noun - u3m_soft(c3_w mil_w, u3_funk fun_f, u3_noun arg); - - /* u3m_soft_slam: top-level call. - */ - u3_noun - u3m_soft_slam(u3_noun gat, u3_noun sam); - - /* u3m_soft_nock: top-level nock. - */ - u3_noun - u3m_soft_nock(u3_noun bus, u3_noun fol); - - /* u3m_soft_sure(): top-level call assumed correct. - */ - u3_noun - u3m_soft_sure(u3_funk fun_f, u3_noun arg); - - /* u3m_soft_run(): descend into virtualization context. - */ - u3_noun - u3m_soft_run(u3_noun gul, - u3_funq fun_f, - u3_noun aga, - u3_noun agb); - - /* u3m_soft_esc(): namespace lookup to (unit ,*). - */ - u3_noun - u3m_soft_esc(u3_noun ref, u3_noun sam); - - /* u3m_mark(): mark all nouns in the road. - */ - c3_w - u3m_mark(FILE* fil_u); - - /* u3m_grab(): garbage-collect the world, plus extra roots. - */ - void - u3m_grab(u3_noun som, ...); // terminate with u3_none - - /* u3m_water(): produce high and low watermarks. Asserts u3R == u3H. - */ - void - u3m_water(c3_w *low_w, c3_w *hig_w); - - /* u3m_pretty(): dumb prettyprint to string. RETAIN. - */ - c3_c* - u3m_pretty(u3_noun som); - - /* u3m_pretty_path(): prettyprint a path to string. RETAIN. - */ - c3_c* - u3m_pretty_path(u3_noun som); - - /* u3m_p(): dumb print with caption. RETAIN. - */ - void - u3m_p(const c3_c* cap_c, u3_noun som); - - /* u3m_tape(): dump a tape to stdout. - */ - void - u3m_tape(u3_noun tep); - - /* u3m_wall(): dump a wall to stdout. - */ - void - u3m_wall(u3_noun wol); - - /* u3m_reclaim: clear persistent caches to reclaim memory - */ - void - u3m_reclaim(void); - - /* u3m_pack: compact (defragment) memory. - */ - c3_w - u3m_pack(void); - -#endif /* ifndef U3_MANAGE_H */ diff --git a/pkg/urbit/include/noun/nock.h b/pkg/urbit/include/noun/nock.h deleted file mode 100644 index 561cb7585..000000000 --- a/pkg/urbit/include/noun/nock.h +++ /dev/null @@ -1,139 +0,0 @@ -#ifndef U3_NOCK_H -#define U3_NOCK_H - - /** Data structures. - *** - **/ - - /* u3n_memo: %memo hint space - */ - typedef struct { - c3_l sip_l; - u3_noun key; - } u3n_memo; - - /* u3n_prog: program compiled from nock - */ - typedef struct _u3n_prog { - struct { - c3_o own_o; // program owns ops_y? - c3_w len_w; // length of bytecode (bytes) - c3_y* ops_y; // actual array of bytes - } byc_u; // bytecode - struct { - c3_w len_w; // number of literals - u3_noun* non; // array of literals - } lit_u; // literals - struct { - c3_w len_w; // number of memo slots - u3n_memo* sot_u; // array of memo slots - } mem_u; // memo slot data - struct { - c3_w len_w; // number of calls sites - u3j_site* sit_u; // array of sites - } cal_u; // call site data - struct { - c3_w len_w; // number of registration sites - u3j_rite* rit_u; // array of sites - } reg_u; // registration site data - } u3n_prog; - - /** Functions. - **/ - /* u3n_nock_on(): produce .*(bus fol). - */ - u3_noun - u3n_nock_on(u3_noun bus, u3_noun fol); - - /* u3n_find(): return prog for given formula, - * split by key (u3_nul for none). RETAIN. - */ - u3p(u3n_prog) - u3n_find(u3_noun key, u3_noun fol); - - /* u3n_burn(): execute u3n_prog with bus as subject. - */ - u3_noun - u3n_burn(u3p(u3n_prog) pog_p, u3_noun bus); - - /* u3n_slam_on(): produce (gat sam). - */ - u3_noun - u3n_slam_on(u3_noun gat, u3_noun sam); - - /* u3n_kick_on(): fire `gat` without changing the sample. - */ - u3_noun - u3n_kick_on(u3_noun gat); - - /* u3n_nock_in(): produce .*(bus fol), as ++toon, in namespace. - */ - u3_noun - u3n_nock_in(u3_noun fly, u3_noun bus, u3_noun fol); - - /* u3n_nock_it(): produce .*(bus fol), as ++toon, in namespace. - */ - u3_noun - u3n_nock_it(u3_noun sea, u3_noun bus, u3_noun fol); - - /* u3n_nock_et(): produce .*(bus fol), as ++toon, in namespace. - */ - u3_noun - u3n_nock_et(u3_noun gul, u3_noun bus, u3_noun fol); - - /* u3n_slam_in(): produce (gat sam), as ++toon, in namespace. - */ - u3_noun - u3n_slam_in(u3_noun fly, u3_noun gat, u3_noun sam); - - /* u3n_slam_it(): produce (gat sam), as ++toon, in namespace. - */ - u3_noun - u3n_slam_it(u3_noun sea, u3_noun gat, u3_noun sam); - - /* u3n_slam_et(): produce (gat sam), as ++toon, in namespace. - */ - u3_noun - u3n_slam_it(u3_noun gul, u3_noun gat, u3_noun sam); - - /* u3n_nock_an(): as slam_in(), but with empty fly. - */ - u3_noun - u3n_nock_an(u3_noun bus, u3_noun fol); - - /* u3n_reap(): promote bytecode state. - */ - void - u3n_reap(u3p(u3h_root) har_p); - - /* u3n_take(): copy junior bytecode state. - */ - u3p(u3h_root) - u3n_take(u3p(u3h_root) har_p); - - /* u3n_mark(): mark bytecode cache. - */ - c3_w - u3n_mark(FILE* fil_u); - - /* u3n_reclaim(): clear ad-hoc persistent caches to reclaim memory. - */ - void - u3n_reclaim(void); - - /* u3n_rewrite_compact(): rewrite bytecode cache for compaction. - */ - void - u3n_rewrite_compact(); - - /* u3n_free(): free bytecode cache. - */ - void - u3n_free(void); - - /* u3n_ream(): refresh after restoring from checkpoint. - */ - void - u3n_ream(void); - -#endif /* ifndef U3_NOCK_H */ diff --git a/pkg/urbit/include/noun/options.h b/pkg/urbit/include/noun/options.h deleted file mode 100644 index f73dba264..000000000 --- a/pkg/urbit/include/noun/options.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef U3_OPTIONS_H -#define U3_OPTIONS_H - - /** Data structures. - **/ - /* u3o_config: process / system configuration. - */ - typedef struct _u3o_config { - u3_noun who; // single identity - c3_c* dir_c; // execution directory (pier) - c3_w wag_w; // flags (both ways) - void (*stderr_log_f)(c3_c*); // errors from c code - void (*slog_f)(u3_noun); // function pointer for slog - void (*sign_hold_f)(void); // suspend system signal regime - void (*sign_move_f)(void); // restore system signal regime - } u3o_config; - - /* u3o_flag: process/system flags. - ** - ** _debug flags are set outside u3 and heard inside it. - ** _check flags are set inside u3 and heard outside it. - */ - enum u3o_flag { // execution flags - u3o_debug_ram = 0x1, // debug: gc - u3o_debug_cpu = 0x2, // debug: profile - u3o_check_corrupt = 0x4, // check: gc memory - u3o_check_fatal = 0x8, // check: unrecoverable - u3o_verbose = 0x10, // be remarkably wordy - u3o_dryrun = 0x20, // don't touch checkpoint - u3o_quiet = 0x40, // disable ~& - u3o_hashless = 0x80, // disable hashboard - u3o_trace = 0x100 // enables trace dumping - }; - - /** Globals. - **/ - /* u3_Config / u3C: global memory control. - */ - c3_global u3o_config u3o_Config; -# define u3C u3o_Config - - -#endif /* ifndef U3_OPTIONS_H */ diff --git a/pkg/urbit/include/noun/retrieve.h b/pkg/urbit/include/noun/retrieve.h deleted file mode 100644 index edd2275bf..000000000 --- a/pkg/urbit/include/noun/retrieve.h +++ /dev/null @@ -1,465 +0,0 @@ -#ifndef U3_RETRIEVE_H -#define U3_RETRIEVE_H - - /** u3r_*: read without ever crashing. - **/ -#if 1 -# define u3r_du(a) u3a_is_cell(a) -# define u3r_ud(a) u3a_is_atom(a) -#else - /* u3r_du(): c3y iff `a` is cell. - */ - c3_o - u3r_du(u3_noun a); - - /* u3r_ud(): c3n iff `a` is cell. - */ - c3_o - u3r_ud(u3_noun a); -#endif - - /* u3r_at(): fragment `a` of `b`, or u3_none. - */ - u3_weak - u3r_at(u3_atom a, u3_weak b); - - /* u3r_mean(): - ** - ** Attempt to deconstruct `a` by axis, noun pairs; 0 terminates. - ** Axes must be sorted in tree order. - */ - c3_o - u3r_vmean(u3_noun a, va_list ap); - c3_o - u3r_mean(u3_noun a, ...); - - /* u3r_mug_both(): Join two mugs. - */ - c3_l - u3r_mug_both(c3_w lef_w, c3_w rit_w); - - /* u3r_mug_bytes(): Compute the mug of `buf`, `len`, LSW first. - */ - c3_l - u3r_mug_bytes(const c3_y *buf_y, - c3_w len_w); - - /* u3r_mug_c(): Compute the mug of `a`, LSB first. - */ - c3_l - u3r_mug_c(const c3_c *a_c); - - /* u3r_mug_cell(): Compute the mug of the cell `[hed tel]`. - */ - c3_l - u3r_mug_cell(u3_noun hed, - u3_noun tel); - - /* u3r_mug_chub(): Compute the mug of `num`, LSW first. - */ - c3_l - u3r_mug_chub(c3_d num_d); - - /* u3r_mug_words(): 31-bit nonzero MurmurHash3 on raw words. - */ - c3_l - u3r_mug_words(const c3_w* key_w, c3_w len_w); - - /* u3r_mug(): statefully mug a noun with 31-bit murmur3. - */ - c3_l - u3r_mug(u3_noun veb); - - /* u3r_fing(): - ** - ** Yes iff (a) and (b) are the same copy of the same noun. - ** (Ie, by pointer equality - u3r_sing with false negatives.) - */ - c3_o - u3r_fing(u3_noun a, - u3_noun b); - - /* u3r_fing_cell(): - ** - ** Yes iff `[p q]` and `b` are the same copy of the same noun. - */ - c3_o - u3r_fing_cell(u3_noun p, - u3_noun q, - u3_noun b); - - /* u3r_fing_mixt(): - ** - ** Yes iff `[p q]` and `b` are the same copy of the same noun. - */ - c3_o - u3r_fing_mixt(const c3_c* p_c, - u3_noun q, - u3_noun b); - - /* u3r_fing_trel(): - ** - ** Yes iff `[p q r]` and `b` are the same copy of the same noun. - */ - c3_o - u3r_fing_trel(u3_noun p, - u3_noun q, - u3_noun r, - u3_noun b); - - /* u3r_fing_qual(): - ** - ** Yes iff `[p q r s]` and `b` are the same copy of the same noun. - */ - c3_o - u3r_fing_qual(u3_noun p, - u3_noun q, - u3_noun r, - u3_noun s, - u3_noun b); - - /* u3r_sing(): noun value equality. - ** - ** Unifies noun pointers on inner roads. - */ - c3_o - u3r_sing(u3_noun a, u3_noun b); - - /* u3r_sing_c(): cord/C-string value equivalence. - */ - c3_o - u3r_sing_c(const c3_c* a_c, - u3_noun b); - - /* u3r_sing_cell(): - ** - ** Yes iff `[p q]` and `b` are the same noun. - */ - c3_o - u3r_sing_cell(u3_noun p, - u3_noun q, - u3_noun b); - - /* u3r_sing_mixt(): - ** - ** Yes iff `[p q]` and `b` are the same noun. - */ - c3_o - u3r_sing_mixt(const c3_c* p_c, - u3_noun q, - u3_noun b); - - /* u3r_sing_trel(): - ** - ** Yes iff `[p q r]` and `b` are the same noun. - */ - c3_o - u3r_sing_trel(u3_noun p, - u3_noun q, - u3_noun r, - u3_noun b); - - /* u3r_sing_qual(): - ** - ** Yes iff `[p q r s]` and `b` are the same noun. - */ - c3_o - u3r_sing_qual(u3_noun p, - u3_noun q, - u3_noun r, - u3_noun s, - u3_noun b); - - /* u3r_nord(): - ** - ** Return 0, 1 or 2 if `a` is below, equal to, or above `b`. - */ - u3_atom - u3r_nord(u3_noun a, - u3_noun b); - - /* u3r_mold(): - ** - ** Divide `a` as a mold `[b.[p q] c]`. - */ - c3_o - u3r_mold(u3_noun a, - u3_noun* b, - u3_noun* c); - - /* u3r_bite(): retrieve/default $bloq and $step from $bite. - */ - c3_o - u3r_bite(u3_noun bite, u3_atom* bloq, u3_atom *step); - - /* u3r_cell(): - ** - ** Divide `a` as a cell `[b c]`. - */ - c3_o - u3r_cell(u3_noun a, - u3_noun* b, - u3_noun* c); - - /* u3r_trel(): - ** - ** Divide `a` as a trel `[b c d]`. - */ - c3_o - u3r_trel(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d); - - /* u3r_qual(): - ** - ** Divide (a) as a qual [b c d e]. - */ - c3_o - u3r_qual(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e); - - /* u3r_quil(): - ** - ** Divide (a) as a quil [b c d e f]. - */ - c3_o - u3r_quil(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f); - - /* u3r_hext(): - ** - ** Divide (a) as a hext [b c d e f g]. - */ - c3_o - u3r_hext(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f, - u3_noun* g); - - /* u3r_p(): - ** - ** & [0] if [a] is of the form [b *c]. - */ - c3_o - u3r_p(u3_noun a, - u3_noun b, - u3_noun* c); - - /* u3r_bush(): - ** - ** Factor [a] as a bush [b.[p q] c]. - */ - c3_o - u3r_bush(u3_noun a, - u3_noun* b, - u3_noun* c); - - /* u3r_pq(): - ** - ** & [0] if [a] is of the form [b *c d]. - */ - c3_o - u3r_pq(u3_noun a, - u3_noun b, - u3_noun* c, - u3_noun* d); - - /* u3r_pqr(): - ** - ** & [0] if [a] is of the form [b *c *d *e]. - */ - c3_o - u3r_pqr(u3_noun a, - u3_noun b, - u3_noun* c, - u3_noun* d, - u3_noun* e); - - /* u3r_pqrs(): - ** - ** & [0] if [a] is of the form [b *c *d *e *f]. - */ - c3_o - u3r_pqrs(u3_noun a, - u3_noun b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f); - - /* u3r_met(): - ** - ** Return the size of (b) in bits, rounded up to - ** (1 << a_y). - ** - ** For example, (a_y == 3) returns the size in bytes. - */ - c3_w - u3r_met(c3_y a_y, - u3_atom b); - - /* u3r_bit(): - ** - ** Return bit (a_w) of (b). - */ - c3_b - u3r_bit(c3_w a_w, - u3_atom b); - - /* u3r_byte(): - ** - ** Return byte (a_w) of (b). - */ - c3_y - u3r_byte(c3_w a_w, - u3_atom b); - - /* u3r_bytes(): - ** - ** Copy bytes (a_w) through (a_w + b_w - 1) from (d) to (c). - */ - void - u3r_bytes(c3_w a_w, - c3_w b_w, - c3_y* c_y, - u3_atom d); - - /* u3r_bytes_fit(): - ** - ** Copy (len_w) bytes of (a) into (buf_y) if it fits, returning overage. - */ - c3_w - u3r_bytes_fit(c3_w len_w, - c3_y* buf_y, - u3_atom a); - - /* u3r_bytes_alloc(): - ** - ** Copy (len_w) bytes starting at (a_w) from (b) into a fresh allocation. - */ - c3_y* - u3r_bytes_alloc(c3_w a_w, - c3_w len_w, - u3_atom b); - - /* u3r_bytes_all(): - ** - ** Allocate and return a new byte array with all the bytes of (a), - ** storing the length in (len_w). - */ - c3_y* - u3r_bytes_all(c3_w* len_w, - u3_atom a); - - /* u3r_chop(): - ** - ** Into the bloq space of `met`, from position `fum` for a - ** span of `wid`, to position `tou`, XOR from atom `src` - ** into ray `dst`. - */ - void - u3r_chop(c3_g met_g, - c3_w fum_w, - c3_w wid_w, - c3_w tou_w, - c3_w* dst_w, - u3_atom src); - - /* u3r_mp(): - ** - ** Copy (b) into (a_mp). - */ - void - u3r_mp(mpz_t a_mp, - u3_atom b); - - /* u3r_short(): - ** - ** Return short (a_w) of (b). - */ - c3_s - u3r_short(c3_w a_w, - u3_atom b); - - /* u3r_word(): - ** - ** Return word (a_w) of (b). - */ - c3_w - u3r_word(c3_w a_w, - u3_atom b); - - - /* u3r_word_fit(): - ** - ** Fill (out_w) with (a) if it fits, returning success. - */ - c3_t - u3r_word_fit(c3_w* out_w, - u3_atom a); - - /* u3r_chub(): - ** - ** Return double-word (a_w) of (b). - */ - c3_d - u3r_chub(c3_w a_w, - u3_atom b); - - /* u3r_words(): - ** - ** Copy words (a_w) through (a_w + b_w - 1) from (d) to (c). - */ - void - u3r_words(c3_w a_w, - c3_w b_w, - c3_w* c_w, - u3_atom d); - - /* u3r_chubs(): - ** - ** Copy double-words (a_w) through (a_w + b_w - 1) from (d) to (c). - */ - void - u3r_chubs(c3_w a_w, - c3_w b_w, - c3_d* c_d, - u3_atom d); - - /* u3r_safe_byte(): validate and retrieve byte. - */ - c3_o - u3r_safe_byte(u3_noun dat, c3_y* out_y); - - /* u3r_safe_word(): validate and retrieve word. - */ - c3_o - u3r_safe_word(u3_noun dat, c3_w* out_w); - - /* u3r_safe_chub(): validate and retrieve chub. - */ - c3_o - u3r_safe_chub(u3_noun dat, c3_d* out_d); - - /* u3r_string(): `a`, a text atom, as malloced C string. - */ - c3_c* - u3r_string(u3_atom a); - - /* u3r_tape(): `a`, a list of bytes, as malloced C string. - */ - c3_y* - u3r_tape(u3_noun a); - -#endif /* ifndef U3_RETRIEVE_H */ diff --git a/pkg/urbit/include/noun/serial.h b/pkg/urbit/include/noun/serial.h deleted file mode 100644 index 89a835b99..000000000 --- a/pkg/urbit/include/noun/serial.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef U3_SERIAL_H -#define U3_SERIAL_H - - /* opaque handles - */ - /* u3_cue_xeno: handle for cue-ing with an off-loom dictionary. - */ - typedef struct _u3_cue_xeno u3_cue_xeno; - - /* Noun serialization. All noun arguments RETAINED. - */ - - /* u3s_jam_fib(): jam without atom allocation. - ** - ** returns atom-suitable words, and *bit_w will have - ** the length (in bits). return should be freed with u3a_wfree(). - */ - c3_w - u3s_jam_fib(u3i_slab* sab_u, u3_noun a); - - /* u3s_jam_xeno(): jam with off-loom buffer (re-)allocation. - */ - c3_d - u3s_jam_xeno(u3_noun a, c3_d* len_d, c3_y** byt_y); - - /* u3s_cue(): cue [a] - */ - u3_noun - u3s_cue(u3_atom a); - - /* u3s_cue_xeno_init_with(): initialize a cue_xeno handle as specified. - */ - u3_cue_xeno* - u3s_cue_xeno_init_with(c3_d pre_d, c3_d siz_d); - - /* u3s_cue_xeno_init(): initialize a cue_xeno handle. - */ - u3_cue_xeno* - u3s_cue_xeno_init(void); - - /* u3s_cue_xeno_init(): cue on-loom, with off-loom dictionary in handle. - */ - u3_weak - u3s_cue_xeno_with(u3_cue_xeno* sil_u, - c3_d len_d, - const c3_y* byt_y); - - /* u3s_cue_xeno_init(): dispose cue_xeno handle. - */ - void - u3s_cue_xeno_done(u3_cue_xeno* sil_u); - - /* u3s_cue_xeno(): cue on-loom, with off-loom dictionary. - */ - u3_weak - u3s_cue_xeno(c3_d len_d, - const c3_y* byt_y); - - /* u3s_cue_bytes(): cue bytes onto the loom. - */ - u3_noun - u3s_cue_bytes(c3_d len_d, const c3_y* byt_y); - - /* u3s_cue_atom(): cue atom. - */ - u3_noun - u3s_cue_atom(u3_atom a); - - /* u3s_sift_ud_bytes: parse @ud. - */ - u3_weak - u3s_sift_ud_bytes(c3_w len_w, c3_y* byt_y); - - /* u3s_sift_ud: parse @ud. - */ - u3_weak - u3s_sift_ud(u3_atom a); - -#endif /* ifndef U3_SERIAL_H */ diff --git a/pkg/urbit/include/noun/trace.h b/pkg/urbit/include/noun/trace.h deleted file mode 100644 index e887feb3a..000000000 --- a/pkg/urbit/include/noun/trace.h +++ /dev/null @@ -1,165 +0,0 @@ -#ifndef U3_TRACE_H -#define U3_TRACE_H - - /** Data structures. - **/ - /* u3t_trace: fast execution flags. - */ - typedef struct _u3t_trace { - c3_o noc_o; // now executing in nock interpreter - c3_o glu_o; // now executing in jet glue - c3_o mal_o; // now executing in allocator - c3_o far_o; // now executing in fragmentor - c3_o coy_o; // now executing in copy - c3_o euq_o; // now executing in equal - } u3t_trace; - - /** Macros. - **/ -# ifdef U3_CPU_DEBUG -# define u3t_on(var) \ - (u3T.var = (u3C.wag_w & u3o_debug_cpu) \ - ? (c3n == u3T.var) ? c3y : (abort(), 0) \ - : u3T.var) -# else -# define u3t_on(var) -#endif - -# ifdef U3_CPU_DEBUG -# define u3t_off(var) \ - (u3T.var = (u3C.wag_w & u3o_debug_cpu) \ - ? (c3y == u3T.var) ? c3n : (abort(), 0) \ - : u3T.var) -# else -# define u3t_off(var) -#endif - - - /** Functions. - **/ - /* u3t_init(): initialize tracing layer. - */ - void - u3t_init(void); - - /* u3t_push(): push on trace stack. - */ - void - u3t_push(u3_noun mon); - - /* u3t_mean(): push `[%mean roc]` on trace stack. - */ - void - u3t_mean(u3_noun roc); - - /* u3t_drop(): drop from meaning stack. - */ - void - u3t_drop(void); - - /* u3t_slog(): print directly. - */ - void - u3t_slog(u3_noun hod); - - /* u3t_heck(): profile point. - */ - void - u3t_heck(u3_atom cog); - - /* u3t_samp(): sample. - */ - void - u3t_samp(void); - - /* u3t_come(): push on profile stack; return yes if active push. RETAIN. - */ - c3_o - u3t_come(u3_noun bat); - - /* u3t_flee(): pop off profile stack. - */ - void - u3t_flee(void); - - /* u3t_trace_open(): opens the path for writing tracing information. - */ - void - u3t_trace_open(); - - /* u3t_trace_close(): closes the trace file. optional. - */ - void - u3t_trace_close(); - - /* u3t_trace_time(): returns current time since system epoc, - * whatever it is per system, in microseconds. - */ - c3_d - u3t_trace_time(); - - /* u3t_nock_trace_push(): pushes a frame onto the trace stack; - * return yes if active push. - */ - c3_o - u3t_nock_trace_push(u3_noun lab); - - /* u3t_nock_trace_pop(): pop off trace stack. - */ - void - u3t_nock_trace_pop(); - - /* u3t_event_trace(): record a lifecycle event. - */ - void - u3t_event_trace(const c3_c* name, c3_c type); - - /* u3t_damp(): print and clear profile data. - */ - void - u3t_damp(FILE* fil_u); - - /* u3t_boff(): turn profile sampling off. - */ - void - u3t_boff(void); - - /* u3t_boot(): turn sampling on. - */ - void - u3t_boot(void); - - /* u3t_slog_cap(): slog a tank with a caption with - ** a given priority c3_l (assumed 0-3). - */ - void - u3t_slog_cap(c3_l pri_l, u3_noun cap, u3_noun tan); - - /* u3t_slog_trace(): given a c3_l priority pri and a raw stack tax - ** flop the order into start-to-end, render, and slog each item - ** until done. - */ - void - u3t_slog_trace(c3_l pri_l, u3_noun tax); - - /* u3t_slog_nara(): slog only the deepest road's trace with - ** c3_l priority pri - */ - void - u3t_slog_nara(c3_l pri_l); - - /* u3t_slog_hela(): join all roads' traces together into one tax - ** and pass it to slog_trace along with the given c3_l priority pri_l - */ - void - u3t_slog_hela(c3_l pri_l); - - /** Globals. - **/ - /* u3_Trace / u3C: global memory control. - */ - c3_global u3t_trace u3t_Trace; -# define u3T u3t_Trace - - -#endif /* ifndef U3_TRACE_H */ diff --git a/pkg/urbit/include/noun/urth.h b/pkg/urbit/include/noun/urth.h deleted file mode 100644 index 3fe29792e..000000000 --- a/pkg/urbit/include/noun/urth.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef U3_URTH_H -#define U3_URTH_H - - /** Functions. - **/ - /* u3u_meld(): globally deduplicate memory. - */ - void - u3u_meld(void); - - /* u3u_cram(): globably deduplicate memory, and write a rock to disk. - */ - c3_o - u3u_cram(c3_c* dir_c, c3_d eve_d); - /* u3u_uncram(): restore persistent state from a rock. - */ - c3_o - u3u_uncram(c3_c* dir_c, c3_d eve_d); - - /* u3u_mmap_read(): open and mmap the file at [pat_c] for reading. - */ - c3_o - u3u_mmap_read(c3_c* cap_c, c3_c* pat_c, c3_d* out_d, c3_y** out_y); - - /* u3u_mmap(): open/create file-backed mmap at [pat_c] for read/write. - */ - c3_o - u3u_mmap(c3_c* cap_c, c3_c* pat_c, c3_d len_d, c3_y** out_y); - - /* u3u_mmap_save(): sync file-backed mmap. - */ - c3_o - u3u_mmap_save(c3_c* cap_c, c3_c* pat_c, c3_d len_d, c3_y* byt_y); - - /* u3u_munmap(): unmap the region at [byt_y]. - */ - c3_o - u3u_munmap(c3_d len_d, c3_y* byt_y); - -#endif /* ifndef U3_URTH_H */ diff --git a/pkg/urbit/include/noun/vortex.h b/pkg/urbit/include/noun/vortex.h deleted file mode 100644 index 3e8f01484..000000000 --- a/pkg/urbit/include/noun/vortex.h +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef U3_VORTEX_H -#define U3_VORTEX_H - - /** Data structures. - **/ - /* u3v_arvo: modern arvo structure. - ** NB: packed to perserve word alignment given [eve_d] - */ - typedef struct __attribute__((__packed__)) _u3v_arvo { - c3_d eve_d; // event number - u3_noun yot; // cached gates - u3_noun now; // current time - u3_noun roc; // kernel core - } u3v_arvo; - - /* u3v_home: all internal (within image) state. - ** NB: version must be last for discriminability in north road - */ - typedef struct _u3v_home { - u3a_road rod_u; // storage state - u3v_arvo arv_u; // arvo state - c3_w ver_w; // version number - } u3v_home; - - - /** Globals. - **/ - /* u3_Home / u3H: root of thread. - */ - c3_global u3v_home* u3v_Home; -# define u3H u3v_Home -# define u3A (&(u3v_Home->arv_u)) - - /** Constants. - **/ -# define u3v_version 1 - - /** Functions. - **/ - /* u3v_life(): execute initial lifecycle, producing Arvo core. - */ - u3_noun - u3v_life(u3_noun eve); - - /* u3v_boot(): evaluate boot sequence, making a kernel - */ - c3_o - u3v_boot(u3_noun eve); - - /* u3v_boot_lite(): light bootstrap sequence, just making a kernel. - */ - c3_o - u3v_boot_lite(u3_noun lit); - - /* u3v_do(): use a kernel function. - */ - u3_noun - u3v_do(const c3_c* txt_c, u3_noun arg); - - /* u3v_wish(): text expression with cache. - */ - u3_noun - u3v_wish(const c3_c* str_c); - - /* u3v_time(): set the reck time. - */ - void - u3v_time(u3_noun now); - - /* u3v_lily(): parse little atom. - */ - c3_o - u3v_lily(u3_noun fot, u3_noun txt, c3_l* tid_l); - - /* u3v_peek(): query the reck namespace. - */ - u3_noun - u3v_peek(u3_noun hap); - - /* u3v_poke(): insert and apply an input ovum (protected). - */ - u3_noun - u3v_poke(u3_noun ovo); - - /* u3v_tank(): dump single tank. - */ - void - u3v_tank(u3_noun blu, c3_l tab_l, u3_noun tac); - - /* u3v_punt(): dump tank list. - */ - void - u3v_punt(u3_noun blu, c3_l tab_l, u3_noun tac); - - /* u3v_sway(): print trace. - */ - void - u3v_sway(u3_noun blu, c3_l tab_l, u3_noun tax); - - /* u3v_plan(): queue ovum (external). - */ - void - u3v_plan(u3_noun pax, u3_noun fav); - - /* u3v_mark(): mark arvo kernel. - */ - c3_w - u3v_mark(FILE* fil_u); - - /* u3v_reclaim(): clear ad-hoc persistent caches to reclaim memory. - */ - void - u3v_reclaim(void); - - /* u3v_rewrite_compact(): rewrite arvo kernel for compaction. - */ - void - u3v_rewrite_compact(); - -#endif /* ifndef U3_VORTEX_H */ diff --git a/pkg/urbit/include/noun/xtract.h b/pkg/urbit/include/noun/xtract.h deleted file mode 100644 index 3c26e5e4c..000000000 --- a/pkg/urbit/include/noun/xtract.h +++ /dev/null @@ -1,160 +0,0 @@ -#ifndef U3_XTRACT_H -#define U3_XTRACT_H - - /** Constants. - **/ - /* Conventional axes for gate call. - */ -# define u3x_pay 3 // payload -# define u3x_sam 6 // sample -# define u3x_sam_1 6 -# define u3x_sam_2 12 -# define u3x_sam_3 13 -# define u3x_sam_4 24 -# define u3x_sam_5 25 -# define u3x_sam_6 26 -# define u3x_sam_12 52 -# define u3x_sam_13 53 -# define u3x_sam_7 27 -# define u3x_sam_14 54 -# define u3x_sam_15 55 -# define u3x_sam_30 110 -# define u3x_sam_31 111 -# define u3x_sam_62 222 -# define u3x_sam_63 223 -# define u3x_con 7 // context -# define u3x_con_2 14 // context -# define u3x_con_3 15 // context -# define u3x_con_sam 30 // sample in gate context -# define u3x_con_sam_2 60 -# define u3x_con_sam_3 61 -# define u3x_bat 2 // battery - - - /** Macros. - **/ - /* Word axis macros. For 31-bit axes only. - */ - /* u3x_dep(): number of axis bits. - */ -# define u3x_dep(a_w) (c3_bits_word(a_w) - 1) - - /* u3x_cap(): root axis, 2 or 3. - */ -# define u3x_cap(a_w) ({ \ - c3_assert( 1 < a_w ); \ - (0x2 | (a_w >> (u3x_dep(a_w) - 1))); }) - - /* u3x_mas(): remainder after cap. - */ -# define u3x_mas(a_w) ({ \ - c3_assert( 1 < a_w ); \ - ( (a_w & ~(1 << u3x_dep(a_w))) | (1 << (u3x_dep(a_w) - 1)) ); }) - - /* u3x_peg(): connect two axes. - */ -# define u3x_peg(a_w, b_w) \ - ( (a_w << u3x_dep(b_w)) | (b_w &~ (1 << u3x_dep(b_w))) ) - - /* u3x_atom(): atom or exit. - */ -# define u3x_atom(a) \ - ( (c3y == u3a_is_cell(a)) ? u3m_bail(c3__exit) : a ) - - /** Functions. - **/ - /** u3x_*: read, but bail with c3__exit on a crash. - **/ -#if 1 -# define u3x_h(som) u3a_h(som) -# define u3x_t(som) u3a_t(som) -#else - /* u3x_h (u3h): head. - */ - u3_noun - u3x_h(u3_noun som); - - /* u3x_t (u3t): tail. - */ - u3_noun - u3x_t(u3_noun som); -#endif - /* u3x_good(): test for u3_none. - */ - u3_noun - u3x_good(u3_weak som); - - /* u3x_at (u3at): fragment. - */ - u3_noun - u3x_at(u3_noun axe, u3_noun som); - - /* u3x_mean(): - ** - ** Attempt to deconstruct `a` by axis, noun pairs; 0 terminates. - ** Axes must be sorted in tree order. - */ - void - u3x_mean(u3_noun a, ...); - - /* u3x_bite(): xtract/default $bloq and $step from $bite. - */ - void - u3x_bite(u3_noun bite, u3_atom* bloq, u3_atom *step); - - /* u3x_cell(): - ** - ** Divide `a` as a cell `[b c]`. - */ - void - u3x_cell(u3_noun a, - u3_noun* b, - u3_noun* c); - - /* u3x_trel(): - ** - ** Divide `a` as a trel `[b c d]`, or bail. - */ - void - u3x_trel(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d); - - /* u3x_qual(): - ** - ** Divide `a` as a quadruple `[b c d e]`. - */ - void - u3x_qual(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e); - - /* u3x_quil(): - ** - ** Divide `a` as a quintuple `[b c d e f]`. - */ - void - u3x_quil(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f); - - /* u3x_hext(): - ** - ** Divide `a` as a hextuple `[b c d e f g]`. - */ - void - u3x_hext(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f, - u3_noun* g); - -#endif /* ifndef U3_XTRACT_H */ diff --git a/pkg/urbit/include/noun/zave.h b/pkg/urbit/include/noun/zave.h deleted file mode 100644 index 2f637c0ea..000000000 --- a/pkg/urbit/include/noun/zave.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef U3_ZAVE_H -#define U3_ZAVE_H - - /** Memoization. - *** - *** The memo cache is keyed by an arbitrary symbolic function - *** and a noun argument to that (logical) function. Functions - *** are predefined by C-level callers, but 0 means nock. - *** - *** The memo cache is within its road and dies when it falls. - *** - *** Memo functions RETAIN keys and transfer values. - **/ - /* u3z_key*(): construct a memo cache-key. Arguments retained. - */ - u3_noun u3z_key(c3_m, u3_noun); - u3_noun u3z_key_2(c3_m, u3_noun, u3_noun); - u3_noun u3z_key_3(c3_m, u3_noun, u3_noun, u3_noun); - u3_noun u3z_key_4(c3_m, u3_noun, u3_noun, u3_noun, u3_noun); - u3_noun u3z_key_5(c3_m, u3_noun, u3_noun, u3_noun, u3_noun, u3_noun); - - /* u3z_find*(): find in memo cache. Arguments retained - */ - u3_weak u3z_find(u3_noun key); - u3_weak u3z_find_m(c3_m fun_m, u3_noun one); - - /* u3z_save(): save in memo cache. TRANSFER key; RETAIN val; - */ - u3_noun u3z_save(u3_noun key, u3_noun val); - - /* u3z_save_m(): save in memo cache. Arguments retained - */ - u3_noun u3z_save_m(c3_m fun_m, u3_noun one, u3_noun val); - - /* u3z_uniq(): uniquify with memo cache. - */ - u3_noun - u3z_uniq(u3_noun som); - -#endif /* ifndef U3_ZAVE_H */ diff --git a/pkg/urbit/include/ur/bitstream.h b/pkg/urbit/include/ur/bitstream.h deleted file mode 100644 index 8e7ae7f94..000000000 --- a/pkg/urbit/include/ur/bitstream.h +++ /dev/null @@ -1,235 +0,0 @@ -#ifndef UR_BITSTREAM_H -#define UR_BITSTREAM_H - -#include - -/* -** stateful bitstream reader, backed by a byte-buffer, -** maintaing a 64-bit bit-cursor, and supporting a variety -** of read sizes and patterns. -** -** NB: ur_bsr*_any() functions behave as if the stream were infinite, -** subject to the overall limit of the bit-cursor. -** -*/ -typedef struct ur_bsr_s { - uint64_t left; - uint64_t bits; - uint8_t off; - const uint8_t *bytes; -} ur_bsr_t; - -/* -** generalized bitstream-reader/cue response enum -*/ -typedef enum { - ur_cue_good = 0, // successful read - ur_cue_back = 1, // missing backreference - ur_cue_gone = 2, // read off the end of the stream - ur_cue_meme = 3 // exceeded memory representation -} ur_cue_res_e; - -/* -** jam/cue type tag enumeration -*/ -typedef enum { - ur_jam_atom = 0, - ur_jam_cell = 1, - ur_jam_back = 2 -} ur_cue_tag_e; - -/* -** stateful bitstream writer, backed by a byte-buffer automatically -** reallocated with fibonacc growth, maintaing a 64-bit bit-cursor, -** and supporting a variety of write sizes and patterns. -** -*/ -typedef struct ur_bsw_s { - uint64_t prev; - uint64_t size; - uint64_t fill; - uint64_t bits; - uint8_t off; - uint8_t *bytes; -} ur_bsw_t; - -/* -** initialize bitstream-reader and check for 64-bit bit-cursor overflow. -*/ -ur_cue_res_e -ur_bsr_init(ur_bsr_t *bsr, uint64_t len, const uint8_t *bytes); - -/* -** validate bitstream-reader invariants. -*/ -ur_bool_t -ur_bsr_sane(ur_bsr_t *bsr); - -/* -** read a bit, failing at EOS -*/ -ur_cue_res_e -ur_bsr_bit(ur_bsr_t *bsr, uint8_t *out); - -/* -** read a bit -*/ -uint8_t -ur_bsr_bit_any(ur_bsr_t *bsr); - -/* -** read N (up to 8) bits into a uint8. -*/ -uint8_t -ur_bsr8_any(ur_bsr_t *bsr, uint8_t len); - -/* -** read N (up to 32) bits into a uint32. -*/ -uint32_t -ur_bsr32_any(ur_bsr_t *bsr, uint8_t len); - -/* -** read N (up to 64) bits into a uint64. -*/ -uint64_t -ur_bsr64_any(ur_bsr_t *bsr, uint8_t len); - -/* -** read N bits into a zero-initialized byte array. -*/ -void -ur_bsr_bytes_any(ur_bsr_t *bsr, uint64_t len, uint8_t *out); - -/* -** advance the bitstream cursor as if we had read N bits. -*/ -void -ur_bsr_skip_any(ur_bsr_t *bsr, uint64_t len); - -/* -** read a jam/cue type tag. -*/ -ur_cue_res_e -ur_bsr_tag(ur_bsr_t *bsr, ur_cue_tag_e *out); - -/* -** read a binary exponent, producing the binary log. -** -** read N (up to 255) zero bits followed by a 1, produce N. -*/ -ur_cue_res_e -ur_bsr_log(ur_bsr_t *bsr, uint8_t *out); - -/* -** read an atomic run-length (a la +rub). -** -** read a binary log N, then read N (up to 64) bits, -** produce (N-bits ^ (1 << N)) -*/ -ur_cue_res_e -ur_bsr_rub_len(ur_bsr_t *bsr, uint64_t *out); - -/* -** initialize bitstream-writer with prev/size for fibonacci growth. -*/ -void -ur_bsw_init(ur_bsw_t *bsw, uint64_t prev, uint64_t size); - -/* -** reallocate bitstream write buffer with max(fibonacci, step) growth. -*/ -void -ur_bsw_grow(ur_bsw_t *bsw, uint64_t step); - -/* -** validate bitstream-writer invariants. -*/ -ur_bool_t -ur_bsw_sane(ur_bsw_t *bsw); - -/* -** return bit-length, produce byte-buffer. -*/ -uint64_t -ur_bsw_done(ur_bsw_t *bsw, uint64_t *len, uint8_t **byt); - -/* -** write a bit -*/ -void -ur_bsw_bit(ur_bsw_t *bsw, uint8_t bit); - -/* -** write N (up to 8) bits of a uint8. -*/ -void -ur_bsw8(ur_bsw_t *bsw, uint8_t len, uint8_t byt); - -/* -** write N (up to 32) bits of a uint32. -*/ -void -ur_bsw32(ur_bsw_t *bsw, uint8_t len, uint32_t val); - -/* -** write N (up to 64) bits of a uint64. -*/ -void -ur_bsw64(ur_bsw_t *bsw, uint8_t len, uint64_t val); - -/* -** write N bits of a byte array. -** -** NB: [byt] must contain at least N bits. -*/ -void -ur_bsw_bytes(ur_bsw_t *bsw, uint64_t len, uint8_t *byt); - -/* -** write a binary exponent (N zero bits, followed by a 1). -*/ -void -ur_bsw_bex(ur_bsw_t *bsw, uint8_t n); - -/* -** write N (up to 64) run-length prefixed bits (a la +mat). -*/ -void -ur_bsw_mat64(ur_bsw_t *bsw, uint8_t len, uint64_t val); - -/* -** write N run-length prefixed bits (a la +mat). -** -** NB: [byt] must contain at least N bits. -*/ -void -ur_bsw_mat_bytes(ur_bsw_t *bsw, uint64_t len, uint8_t *byt); - -/* -** write a backref tag (1, 1) and N (up to 64) run-length prefixed bits. -*/ -void -ur_bsw_back64(ur_bsw_t *bsw, uint8_t len, uint64_t val); - -/* -** write an atom tag (0) and N (up to 64) run-length prefixed bits. -*/ -void -ur_bsw_atom64(ur_bsw_t *bsw, uint8_t len, uint64_t val); - -/* -** write an atom tag (0) and N run-length prefixed bits. -** -** NB: [byt] must contain at least N bits. -*/ -void -ur_bsw_atom_bytes(ur_bsw_t *bsw, uint64_t len, uint8_t *byt); - -/* -** write a cell tag (1, 0) -*/ -void -ur_bsw_cell(ur_bsw_t *bsw); - -#endif diff --git a/pkg/urbit/include/ur/defs.h b/pkg/urbit/include/ur/defs.h deleted file mode 100644 index f6c0b00cd..000000000 --- a/pkg/urbit/include/ur/defs.h +++ /dev/null @@ -1,84 +0,0 @@ -#ifndef UR_DEFS_H -#define UR_DEFS_H - -#include -#include -#include - -typedef uint8_t ur_bool_t; - -#define ur_min(a, b) ( ((a) < (b)) ? (a) : (b) ) -#define ur_max(a, b) ( ((a) > (b)) ? (a) : (b) ) - -/* -** fibonacci constants, for convenient initialization of -** objects intended to be reallocated with fibonacci growth -*/ -#define ur_fib10 55 -#define ur_fib11 89 -#define ur_fib12 144 -#define ur_fib27 196418 -#define ur_fib28 317811 -#define ur_fib33 3524578 -#define ur_fib34 5702887 - -/* -** bit-masking helpers -*/ -#define ur_mask_3(a) (a & 0x7) -#define ur_mask_8(a) (a & 0xff) -#define ur_mask_31(a) (a & 0x7fffffff) -#define ur_mask_62(a) (a & 0x3fffffffffffffffULL) - -/* -** bloq (binary exponent) conversions -*/ -#define ur_bloq_up1(a) ( (a + 0x1) >> 1 ) -#define ur_bloq_up2(a) ( (a + 0x3) >> 2 ) -#define ur_bloq_up3(a) ( (a + 0x7) >> 3 ) - -/* -** atom measurement -*/ -#if (32 == (CHAR_BIT * __SIZEOF_INT__)) -# define ur_lz32 __builtin_clz -# define ur_tz32 __builtin_ctz -#elif (32 == (CHAR_BIT * __SIZEOF_LONG__)) -# define ur_lz32 __builtin_clzl -# define ur_tz32 __builtin_ctzl -#else -# error "port me" -#endif - -#if (64 == (CHAR_BIT * __SIZEOF_LONG__)) -# define ur_lz64 __builtin_clzl -# define ur_tz64 __builtin_ctzl -#elif (64 == (CHAR_BIT * __SIZEOF_LONG_LONG__)) -# define ur_lz64 __builtin_clzll -# define ur_tz64 __builtin_ctzll -#else -# error "port me" -#endif - -#define ur_lz8(a) ( ur_lz32(a) - 24 ) -#define ur_tz8 ur_tz32 - -#define ur_met0_8(a) ( (a) ? 8 - ur_lz8(a) : 0 ) -#define ur_met0_32(a) ( (a) ? 32 - ur_lz32(a) : 0 ) -#define ur_met0_64(a) ( (a) ? 64 - ur_lz64(a) : 0 ) - -/* -** unsafe wrt trailing null bytes, which are invalid -*/ -inline uint64_t -ur_met0_bytes_unsafe(uint64_t len, uint8_t *byt) -{ - uint64_t last = len - 1; - return (last << 3) + ur_met0_8(byt[last]); -} - -#define ur_met3_8(a) ur_bloq_up3(ur_met0_8(a)) -#define ur_met3_32(a) ur_bloq_up3(ur_met0_32(a)) -#define ur_met3_64(a) ur_bloq_up3(ur_met0_64(a)) - -#endif /* ifndef UR_DEFS_H */ diff --git a/pkg/urbit/include/ur/hashcons.h b/pkg/urbit/include/ur/hashcons.h deleted file mode 100644 index f1d5b075f..000000000 --- a/pkg/urbit/include/ur/hashcons.h +++ /dev/null @@ -1,257 +0,0 @@ -#ifndef UR_HASHCONS_H -#define UR_HASHCONS_H - -#include -#include -#include -#include - -#include "ur/defs.h" - -/* -** 64-bit noun references, with the top 2 bits reserved for type tags. -*/ -typedef uint64_t ur_nref; - -typedef enum { - ur_direct = 0, - ur_iatom = 1, - ur_icell = 2, -} ur_tag; - -#define ur_nref_tag(ref) ( ref >> 62 ) -#define ur_nref_idx(ref) ur_mask_62(ref) - -/* -** 31-bit, non-zero, murmur3-based noun hash. -*/ -typedef uint32_t ur_mug; - -/* -** associative structures (dictionaries) of noun references, -** distributed by mug across fixed-size buckets (pails), -** reallocated with fibonacci growth once a bucket is full. -** -** - ur_dict_t: set of noun references -** - ur_dict32_t: map from noun reference to uint32 -** - ur_dict32_t: map from noun reference to uint64 -*/ - -#define ur_pail_max 10 - -typedef struct ur_pail32_s { - ur_nref refs[ur_pail_max]; - uint32_t vals[ur_pail_max]; -} ur_pail32_t; - -typedef struct ur_dict32_s { - uint64_t prev; - uint64_t size; - uint8_t *fills; - ur_pail32_t *buckets; -} ur_dict32_t; - -typedef struct ur_pail64_s { - ur_nref refs[ur_pail_max]; - uint64_t vals[ur_pail_max]; -} ur_pail64_t; - -typedef struct ur_dict64_s { - uint64_t prev; - uint64_t size; - uint8_t *fills; - ur_pail64_t *buckets; -} ur_dict64_t; - -typedef struct ur_pail_s { - ur_nref refs[ur_pail_max]; -} ur_pail_t; - -typedef struct ur_dict_s { - uint64_t prev; - uint64_t size; - uint8_t *fills; - ur_pail_t *buckets; -} ur_dict_t; - -/* -** cells are hash-consed, atoms are deduplicated (byte-array comparison), -** mug hashes are stored, and noun references are unique within a root. -*/ -typedef struct ur_cells_s { - ur_dict_t dict; - uint64_t prev; - uint64_t size; - uint64_t fill; - ur_mug *mugs; - ur_nref *heads; - ur_nref *tails; -} ur_cells_t; - -typedef struct ur_atoms_s { - ur_dict_t dict; - uint64_t prev; - uint64_t size; - uint64_t fill; - ur_mug *mugs; - uint8_t **bytes; - uint64_t *lens; -} ur_atoms_t; - -typedef struct ur_root_s { - ur_cells_t cells; - ur_atoms_t atoms; -} ur_root_t; - -/* -** a vector of noun references. -*/ -typedef struct ur_nvec_s { - uint64_t fill; - ur_nref* refs; -} ur_nvec_t; - -/* -** opaque handle for repeated traversal. -*/ -typedef struct ur_walk_fore_s ur_walk_fore_t; - -/* -** type-specific dictionary operations. -** -** NB: [r] is only used to retrieve the stored mug of cells and -** indirect atoms. If all references are direct atoms (62-bits or less), -** [r] can be null. This option is used extensively in cue (de-serialization) -** implementations, where the dictionary keys are bit-cursors. -*/ -void -ur_dict32_grow(ur_root_t *r, ur_dict32_t *dict, uint64_t prev, uint64_t size); - -ur_bool_t -ur_dict32_get(ur_root_t *r, ur_dict32_t *dict, ur_nref ref, uint32_t *out); - -void -ur_dict32_put(ur_root_t *r, ur_dict32_t *dict, ur_nref ref, uint32_t val); - -void -ur_dict32_wipe(ur_dict32_t *dict); - -void -ur_dict64_grow(ur_root_t *r, ur_dict64_t *dict, uint64_t prev, uint64_t size); - -ur_bool_t -ur_dict64_get(ur_root_t *r, ur_dict64_t *dict, ur_nref ref, uint64_t *out); - -void -ur_dict64_put(ur_root_t *r, ur_dict64_t *dict, ur_nref ref, uint64_t val); - -void -ur_dict64_wipe(ur_dict64_t *dict); - -void -ur_dict_grow(ur_root_t *r, ur_dict_t *dict, uint64_t prev, uint64_t size); - -ur_bool_t -ur_dict_get(ur_root_t *r, ur_dict_t *dict, ur_nref ref); - -void -ur_dict_put(ur_root_t *r, ur_dict_t *dict, ur_nref ref); - -void -ur_dict_wipe(ur_dict_t *dict); - -/* -** free the buckets of any dictionary (cast to ur_dict_t*). -*/ -void -ur_dict_free(ur_dict_t *dict); - -/* -** measure the bloq (binary-exponent) length of an atom in [r] -*/ -uint64_t -ur_met(ur_root_t *r, uint8_t bloq, ur_nref ref); - -/* -** find or allocate an atom in [r] -** -** unsafe variant is unsafe wrt allocation (byte arrays must be -** allocated with system malloc) and trailing null bytes (not allowed). -*/ -ur_nref -ur_coin_bytes_unsafe(ur_root_t *r, uint64_t len, uint8_t *byt); - -ur_nref -ur_coin_bytes(ur_root_t *r, uint64_t len, uint8_t *byt); - -ur_nref -ur_coin64(ur_root_t *r, uint64_t n); - -/* -** find or construct a cell in [r] -*/ -ur_nref -ur_cons(ur_root_t *r, ur_nref hed, ur_nref tal); - -/* -** calculate the mug of [ref], or produce the stored value in [r]. -*/ -ur_mug -ur_nref_mug(ur_root_t *r, ur_nref ref); - -/* -** initialize a noun arena (root). -*/ -ur_root_t* -ur_root_init(void); - -/* -** print root details to [f] -*/ -void -ur_root_info(FILE *f, ur_root_t *r); - -/* -** dispose all allocations in [r] -*/ -void -ur_root_free(ur_root_t *r); - -/* -** initialize or dispose a vector of noun references -*/ -void -ur_nvec_init(ur_nvec_t *v, uint64_t size); - -void -ur_nvec_free(ur_nvec_t *v); - -/* -** depth-first, pre-order noun traversal, cells can short-circuit. -*/ -void -ur_walk_fore(ur_root_t *r, - ur_nref ref, - void *v, - void (*atom)(ur_root_t*, ur_nref, void*), - ur_bool_t (*cell)(ur_root_t*, ur_nref, void*)); - -ur_walk_fore_t* -ur_walk_fore_init_with(ur_root_t *r, - uint32_t s_prev, - uint32_t s_size); - -ur_walk_fore_t* -ur_walk_fore_init(ur_root_t *r); - -void -ur_walk_fore_with(ur_walk_fore_t *w, - ur_nref ref, - void *v, - void (*atom)(ur_root_t*, ur_nref, void*), - ur_bool_t (*cell)(ur_root_t*, ur_nref, void*)); - -void -ur_walk_fore_done(ur_walk_fore_t *w); - -#endif /* ifndef UR_HASHCONS_H */ diff --git a/pkg/urbit/include/ur/serial.h b/pkg/urbit/include/ur/serial.h deleted file mode 100644 index 6010df6b6..000000000 --- a/pkg/urbit/include/ur/serial.h +++ /dev/null @@ -1,111 +0,0 @@ -#ifndef UR_SERIAL_H -#define UR_SERIAL_H - -#include -#include -#include -#include - -/* -** bit-wise serialization of a noun into a byte-buffer. -** supports up to 64-bits of bit-addressed output (nearly 2 EiB). -** (as this is an impractical volume data, cursor overflow is not checked.) -** -** jam_with* api factors out stack/dict (re)allocation, -** for better performance inside hot loops. -** -*/ - -typedef struct ur_jam_s ur_jam_t; - -uint64_t -ur_jam_unsafe(ur_root_t *r, - ur_nref ref, - ur_dict64_t *dict, - uint64_t *len, - uint8_t **byt); - -uint64_t -ur_jam(ur_root_t *r, - ur_nref ref, - uint64_t *len, - uint8_t **byt); - -ur_jam_t* -ur_jam_init_with(ur_root_t *r, - uint64_t d_prev, - uint64_t d_size, - uint32_t s_prev, - uint32_t s_size); - -ur_jam_t* -ur_jam_init(ur_root_t *r); - -uint64_t -ur_jam_with(ur_jam_t *j, - ur_nref ref, - uint64_t *len, - uint8_t **byt); -void -ur_jam_done(ur_jam_t *j); - -/* -** bitwise deserialization of a byte-buffer into a noun. -** supports up to 62-bits of bit-addressed input (511 PiB). -** returns [ur_cue_good] on success. -** -** cue_with factors out stack/dict (re)allocation, -** for better performance of hot loops. -** -** cue_test does not allocate nouns, but merely parses the input; -** cue_test_with* api factors out stack/dict (re)allocation, -** for better performance of repeated tests. -** -*/ - -typedef struct ur_cue_test_s ur_cue_test_t; -typedef struct ur_cue_s ur_cue_t; - -ur_cue_res_e -ur_cue(ur_root_t *r, uint64_t len, const uint8_t *byt, ur_nref *out); - -ur_cue_t* -ur_cue_init_with(ur_root_t *r, - uint64_t d_prev, - uint64_t d_size, - uint32_t s_prev, - uint32_t s_size); - -ur_cue_t* -ur_cue_init(ur_root_t *r); - -ur_cue_res_e -ur_cue_with(ur_cue_t *c, - uint64_t len, - const uint8_t *byt, - ur_nref *out); - -void -ur_cue_done(ur_cue_t *c); - -ur_bool_t -ur_cue_test(uint64_t len, const uint8_t *byt); - -ur_cue_test_t* -ur_cue_test_init_with(uint64_t d_prev, - uint64_t d_size, - uint32_t s_prev, - uint32_t s_size); - -ur_cue_test_t* -ur_cue_test_init(void); - -ur_bool_t -ur_cue_test_with(ur_cue_test_t *t, - uint64_t len, - const uint8_t *byt); - -void -ur_cue_test_done(ur_cue_test_t *t); - -#endif /* ifndef UR_SERIAL_H */ diff --git a/pkg/urbit/include/ur/ur.h b/pkg/urbit/include/ur/ur.h deleted file mode 100644 index 5665a3cc4..000000000 --- a/pkg/urbit/include/ur/ur.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef UR_H -#define UR_H - -#include "ur/defs.h" -#include "ur/bitstream.h" -#include "ur/hashcons.h" -#include "ur/serial.h" - -#endif /* ifndef UR_H */ diff --git a/pkg/urbit/include/vere/db/lmdb.h b/pkg/urbit/include/vere/db/lmdb.h deleted file mode 100644 index 573a68fa4..000000000 --- a/pkg/urbit/include/vere/db/lmdb.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef U3_VERE_DB_LMDB_H -#define U3_VERE_DB_LMDB_H - -#include - - /* lmdb api wrapper - */ - - /* u3_lmdb_init(): open lmdb at [pax_c], mmap up to [siz_i]. - */ - MDB_env* - u3_lmdb_init(const c3_c* pax_c, size_t siz_i); - - /* u3_lmdb_exit(): close lmdb. - */ - void - u3_lmdb_exit(MDB_env* env_u); - - - /* u3_lmdb_stat(): print env stats. - */ - void - u3_lmdb_stat(MDB_env* env_u, FILE* fil_u); - - /* u3_lmdb_gulf(): read first and last event numbers. - */ - c3_o - u3_lmdb_gulf(MDB_env* env_u, c3_d* low_d, c3_d* hig_d); - - /* u3_lmdb_read(): read [len_d] events starting at [eve_d]. - */ - c3_o - u3_lmdb_read(MDB_env* env_u, - void* ptr_v, - c3_d eve_d, - c3_d len_d, - c3_o (*read_f)(void*, c3_d, size_t , void*)); - - /* u3_lmdb_save(): save [len_d] events starting at [eve_d]. - */ - c3_o - u3_lmdb_save(MDB_env* env_u, - c3_d eve_d, - c3_d len_d, - void** byt_p, - size_t* siz_i); - - /* u3_lmdb_read_meta(): read by string from the META db. - */ - void - u3_lmdb_read_meta(MDB_env* env_u, - void* ptr_v, - const c3_c* key_c, - void (*read_f)(void*, size_t, void*)); - - /* u3_lmdb_save_meta(): save by string into the META db. - */ - c3_o - u3_lmdb_save_meta(MDB_env* env_u, - const c3_c* key_c, - size_t val_i, - void* val_p); - -#endif /* ifndef U3_VERE_DB_LMDB_H */ diff --git a/pkg/urbit/include/vere/ivory.h b/pkg/urbit/include/vere/ivory.h deleted file mode 100644 index 8ebc94c92..000000000 --- a/pkg/urbit/include/vere/ivory.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef U3_IVORY_H -#define U3_IVORY_H - -extern unsigned char u3_Ivory_pill[]; -extern unsigned int u3_Ivory_pill_len; - -#endif diff --git a/pkg/urbit/include/vere/serf.h b/pkg/urbit/include/vere/serf.h deleted file mode 100644 index 5808f362e..000000000 --- a/pkg/urbit/include/vere/serf.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef U3_VERE_SERF_H -#define U3_VERE_SERF_H - - /** Data types. - **/ - /* u3_serf: worker-process state - */ - typedef struct _u3_serf { - c3_d key_d[4]; // disk key - c3_c* dir_c; // execution directory (pier) - c3_d sen_d; // last event requested - c3_d dun_d; // last event processed - c3_l mug_l; // hash of state - c3_o pac_o; // pack kernel - c3_o rec_o; // reclaim cache - c3_o mut_o; // mutated kerne - u3_noun sac; // space measurementl - void (*xit_f)(void); // exit callback - } u3_serf; - - /** Functions. - **/ - /* u3_serf_init(): init or restore, producing status. - */ - u3_noun - u3_serf_init(u3_serf* sef_u); - - /* u3_serf_writ(): apply writ [wit], producing plea [*pel] on c3y. - */ - c3_o - u3_serf_writ(u3_serf* sef_u, u3_noun wit, u3_noun* pel); - - /* u3_serf_live(): apply %live command [com], producing *ret on c3y. - */ - c3_o - u3_serf_live(u3_serf* sef_u, u3_noun com, u3_noun* ret); - - /* u3_serf_peek(): read namespace. - */ - u3_noun - u3_serf_peek(u3_serf* sef_u, c3_w mil_w, u3_noun sam); - - /* u3_serf_play(): apply event list, producing status. - */ - u3_noun - u3_serf_play(u3_serf* sef_u, c3_d eve_d, u3_noun lit); - - /* u3_serf_work(): apply event, producing effects. - */ - u3_noun - u3_serf_work(u3_serf* sef_u, c3_w mil_w, u3_noun job); - - /* u3_serf_post(): update serf state post-writ. - */ - void - u3_serf_post(u3_serf* sef_u); - - /* u3_serf_grab(): garbage collect. - */ - void - u3_serf_grab(void); - -#endif /* ifndef U3_VERE_SERF_H */ diff --git a/pkg/urbit/include/vere/vere.h b/pkg/urbit/include/vere/vere.h deleted file mode 100644 index ef0028955..000000000 --- a/pkg/urbit/include/vere/vere.h +++ /dev/null @@ -1,1445 +0,0 @@ -#ifndef U3_VERE_H -#define U3_VERE_H - -#include - - /** Quasi-tunable parameters. - **/ - /* First kernel this executable can boot. - */ -# define FirstKernel 164 -# define DefaultKernel 164 - - /** Data types. - **/ - - /* u3_hhed: http header. - */ - typedef struct _u3_hhed { - struct _u3_hhed* nex_u; - c3_w nam_w; - c3_c* nam_c; - c3_w val_w; - c3_c* val_c; - } u3_hhed; - - /* u3_hbod: http body block. Also used for responses. - */ - typedef struct _u3_hbod { - struct _u3_hbod* nex_u; - c3_w len_w; - c3_y hun_y[0]; - } u3_hbod; - - /* u3_lane: ames lane (IP address and port) - */ - typedef struct _u3_lane { - c3_w pip_w; // target IPv4 address - c3_s por_s; // target port - } u3_lane; - - /* u3_moor_poke: poke callback function. - */ - typedef void (*u3_moor_poke)(void*, c3_d, c3_y*); - - /* u3_moor_bail: bailout callback function. - */ - typedef void (*u3_moor_bail)(void*, ssize_t err_i, const c3_c* err_c); - - /* u3_meat: blob message block. - */ - typedef struct _u3_meat { - struct _u3_meat* nex_u; - c3_d len_d; - c3_y hun_y[0]; - } u3_meat; - - /* u3_mess_type: in-process message type. - */ - typedef enum { - u3_mess_head = 0, // awaiting header - u3_mess_tail = 1 // awaiting body - } u3_mess_type; - - /* u3_mess: blob message in process. - */ - typedef struct _u3_mess { - u3_mess_type sat_e; // msg type - union { // - struct { // awaiting header: - c3_y hed_y[5]; // header bytes - c3_y has_y; // length - } hed_u; // - struct { // awaiting body - u3_meat* met_u; // partial message - c3_d has_d; // length - } tal_u; // - }; - } u3_mess; - - /* u3_moat: inbound message stream. - */ - typedef struct _u3_moat { - uv_pipe_t pyp_u; // input stream - u3_moor_bail bal_f; // error response function - void* ptr_v; // callback pointer - u3_moor_poke pok_f; // action function - u3_mess mes_u; // message in progress - uv_timer_t tim_u; // queue timer - u3_meat* ent_u; // entry of message queue - u3_meat* ext_u; // exit of message queue - } u3_moat; - - /* u3_mojo: outbound message stream. - */ - typedef struct _u3_mojo { - uv_pipe_t pyp_u; // output stream - u3_moor_bail bal_f; // error response function - void* ptr_v; // callback pointer - } u3_mojo; - - /* u3_moor: two-way message stream, linked list */ - typedef struct _u3_moor { - uv_pipe_t pyp_u; // duplex stream - u3_moor_bail bal_f; // error response function - void* ptr_v; // callback pointer - u3_moor_poke pok_f; // action function - u3_mess mes_u; // message in progress - uv_timer_t tim_u; // queue timer - u3_meat* ent_u; // entry of message queue - u3_meat* ext_u; // exit of message queue - struct _u3_moor* nex_u; // next in list - } u3_moor; - - /* u3_dent: directory entry. - */ - typedef struct _u3_dent { - c3_c* nam_c; - struct _u3_dent* nex_u; - } u3_dent; - - /* u3_dire: simple directory state. - */ - typedef struct _u3_dire { - c3_c* pax_c; // path of directory - uv_file fil_u; // file, opened read-only to fsync - u3_dent* all_u; // file list - } u3_dire; - - /* u3_save: checkpoint control. - */ - typedef struct _u3_save { - uv_timer_t tim_u; // checkpoint timer - uv_signal_t sil_u; // child signal - c3_d req_d; // requested at evt_d - c3_d dun_d; // completed at evt_d - c3_w pid_w; // pid of checkpoint process - } u3_save; - - /* u3_utat: unix terminal state. - */ - typedef struct { - struct { - c3_l col_l; // columns - c3_l row_l; // rows - } siz; - - struct { - c3_y* lin_y; // current line (utf8) - c3_w byt_w; // utf8 line-length - c3_w wor_w; // utf32 line-length - c3_w sap_w; // escape chars in line - c3_w cus_w; // cursor position - } mir; - - struct { // escape code control - c3_o ape; // escape received - c3_o bra; // bracket or O received - } esc; - - struct { - c3_y syb_y[5]; // utf8 code buffer - c3_w len_w; // present length - c3_w wid_w; // total width - } fut; - - struct { - uv_timer_t tim_u; // spinner timeout - c3_o diz_o; // spinner activated - c3_d eve_d; // spin count - c3_d end_d; // spinner end tick (ms) - c3_c why_c[5]; // spinner label - } sun_u; - } u3_utat; - - /* u3_usig: receive signals. - */ - typedef struct _u3_usig { - uv_signal_t sil_u; - c3_i num_i; - struct _u3_usig* nex_u; - } u3_usig; - - /* u2_utfo: unix terminfo strings. - */ - typedef struct { - // disabled, currently unused - // - // struct { - // uv_buf_t kcuu1_u; // key_up - // uv_buf_t kcud1_u; // key_down - // uv_buf_t kcub1_u; // key_back - // uv_buf_t kcuf1_u; // key_forward - // } inn; - struct { - uv_buf_t clear_u; // clear_screen - uv_buf_t el_u; // clr_bol clear to beginning - // uv_buf_t el1_u; // clr_eol clear to end - uv_buf_t ed_u; // clear to end of screen - uv_buf_t bel_u; // bel sound bell - uv_buf_t cub1_u; // parm_left - uv_buf_t cuf1_u; // parm_right - uv_buf_t cuu1_u; // parm_up - uv_buf_t cud1_u; // parm_down - // uv_buf_t cub_u; // parm_left_cursor #num - // uv_buf_t cuf_u; // parm_right_cursor #num - } out; - } u3_utfo; - -#if 0 - /* u3_uwen: unix alarm. - */ - typedef struct _u3_uwen { - c3_y* pax_y; // printed path - c3_d wen_d[2]; // timer expire - }; - - /* u3_utim: unix timer control. - */ - typedef struct _u3_utim { - uv_timer_t wat_u; // timer control - u3_uwen* wen_u; // timers in ascending order - }; -#endif - - /* u3_utty: unix tty. - */ - struct _u3_utty; - - /* u3_ustm: uv stream. - */ - typedef union _u3_ustm { - uv_pipe_t pip_u; - uv_tty_t tty_u; - } u3_ustm; - - /* u3_ttyf: simple unix tty function. - */ - typedef c3_o (*u3_ttyf)(struct _u3_utty* uty_u); - - /* u3_utty: unix tty. - */ - typedef struct _u3_utty { - u3_ustm pin_u; // input stream - u3_ustm pop_u; // output stream - struct _u3_utty* nex_u; // next in host list - u3_ttyf sta_f; // start tty - u3_ttyf sto_f; // clean up tty - u3_ttyf hij_f; // hijack tty for cooked print - u3_ttyf loj_f; // release tty from cooked print - c3_o (*wsz_f) - (struct _u3_utty* uty_u, - c3_l* col_l, - c3_l* row_l); // return tty window size - c3_i fid_i; // file descriptor - c3_w tid_l; // terminal identity number - u3_utfo ufo_u; // terminfo strings - u3_utat tat_u; // control state - struct _u3_auto* car_u; // driver hack - } u3_utty; - - /* u3_trac: tracing information. - */ - typedef struct _u3_trac { - c3_w nid_w; // nock pid - FILE* fil_u; // trace file (json) - c3_w con_w; // trace counter - c3_w fun_w; // file counter - } u3_trac; - - /* u3_opts: command line configuration. - */ - typedef struct _u3_opts { - c3_c* arv_c; // -A, initial sync from - c3_o abo; // -a, abort aggressively - c3_c* pil_c; // -B, bootstrap from - c3_c* bin_c; // -b, http server bind ip - c3_w hap_w; // -C, cap memo cache - c3_o nuu; // -c, new pier - c3_o dry; // -D, dry compute, no checkpoint - c3_o dem; // -d, daemon - c3_c* eth_c; // -e, ethereum node url - c3_c* fak_c; // -F, fake ship - c3_c* gen_c; // -G, czar generator - c3_o gab; // -g, test garbage collection - c3_c* dns_c; // -H, ames bootstrap domain - c3_c* jin_c; // -I, inject raw event - c3_c* imp_c; // -i, import pier state - c3_c* lit_c; // -J, ivory (fastboot) kernel - c3_o tra; // -j, json trace - c3_w kno_w; // -K, kernel version - c3_c* key_c; // -k, private key file - c3_o net; // -L, local-only networking - c3_o lit; // -l, lite mode - c3_c* til_c; // -n, play till eve_d - c3_o pro; // -P, profile - c3_s per_s; // http port - c3_s pes_s; // https port - c3_s por_s; // -p, ames port - c3_o qui; // -q, quiet - c3_o rep; // -R, report build info - c3_c* roc_c; // -r, load rock by eve_d - c3_o has; // -S, Skip battery hashes - c3_o git; // -s, pill url from arvo git hash - c3_o tem; // -t, Disable terminal/tty assumptions - c3_c* url_c; // -u, pill url - c3_o veb; // -v, verbose (inverse of -q) - c3_c* who_c; // -w, begin with ticket - c3_c* pek_c; // -X, scry path (/vc/desk/path) - c3_o tex; // -x, exit after loading - c3_c* puk_c; // -Y, scry result filename - c3_c* puf_c; // -Z, scry result format - c3_o con; // run conn - } u3_opts; - - /* u3_host: entire host. - */ - typedef struct _u3_host { - c3_w kno_w; // current executing stage - c3_c* dir_c; // pier path (no trailing /) - c3_c* wrk_c; // worker executable path - c3_d now_d; // event tick - uv_loop_t* lup_u; // libuv event loop - u3_usig* sig_u; // signal list - #if defined(U3_OS_mingw) - HANDLE cev_u; // Ctrl-C event handle - #endif - u3_utty* uty_u; // linked terminal list - u3_opts ops_u; // commandline options - c3_i xit_i; // exit code for shutdown - u3_trac tra_u; // tracing information - void (*bot_f)(); // call when chis is up - } u3_host; // host == computer == process - - /** Pier system. - **/ - /* u3_ovum_news: u3_ovum lifecycle events - */ - typedef enum { - u3_ovum_drop = 0, // unplanned - u3_ovum_work = 1, // begun - u3_ovum_done = 2 // complete - } u3_ovum_news; - - struct _u3_ovum; - - /* u3_ovum_peer: news callback - */ - typedef void (*u3_ovum_peer)(struct _u3_ovum*, u3_ovum_news); - - /* u3_ovum_bail: failure callback - */ - typedef void (*u3_ovum_bail)(struct _u3_ovum*, u3_noun); - - /* u3_ovum: potential event - */ - typedef struct _u3_ovum { - void* ptr_v; // context - c3_w try_w; // retry count - c3_w mil_w; // timeout ms - u3_noun tar; // target (in arvo) - u3_noun wir; // wire - u3_noun cad; // card - struct { // spinner: - u3_atom lab; // label - c3_o del_o; // delay (c3y) - } pin_u; // - struct { // optional callbacks: - u3_ovum_peer news_f; // progress - u3_ovum_bail bail_f; // failure - } cb_u; // - struct _u3_ovum* pre_u; // previous ovum - struct _u3_ovum* nex_u; // next ovum - struct _u3_auto* car_u; // backpointer to i/o driver - } u3_ovum; - - /* u3_fact: completed event - */ - typedef struct _u3_fact { - c3_d eve_d; // event number - c3_l mug_l; // kernel mug after - u3_noun job; // (pair date ovum) - struct _u3_fact* nex_u; // next in queue - } u3_fact; - - /* u3_gift: effects - */ - typedef struct _u3_gift { - c3_d eve_d; // causal event number - u3_noun act; // (list ovum) - struct _u3_gift* nex_u; // next in queue - } u3_gift; - - /* u3_info: ordered, contiguous slice of facts - */ - typedef struct _u3_info { - u3_fact* ent_u; // queue entry (highest) - u3_fact* ext_u; // queue exit (lowest) - } u3_info; - - /* u3_peek_cb: namespace read response callback. - */ - typedef void (*u3_peek_cb)(void*, u3_noun); - - /* u3_pico_type: kinds of proto-peek - */ - typedef enum { - u3_pico_full = 0, - u3_pico_once = 1 - } u3_pico_type; - - /* u3_pico: proto-peek - */ - typedef struct _u3_pico { - struct _u3_pico* nex_u; // next in queue - void* ptr_v; // context - u3_peek_cb fun_f; // callback - u3_noun gan; // leakset - u3_pico_type typ_e; // type-tagged - union { // - u3_noun ful; // (each path [%beam term beam]) - struct { // once: - c3_m car_m; // care - u3_atom des; // desk - u3_noun pax; // /path - } las_u; - }; - } u3_pico; - - /* u3_peek: namespace read request - */ - typedef struct _u3_peek { - void* ptr_v; // context - u3_peek_cb fun_f; // callback - u3_pico_type typ_e; // type - u3_noun sam; // +peek sample - } u3_peek; - - /* u3_writ_type: king->serf ipc message types - */ - typedef enum { - u3_writ_work = 0, - u3_writ_peek = 1, - u3_writ_play = 2, - u3_writ_save = 3, - u3_writ_cram = 4, - u3_writ_meld = 5, - u3_writ_pack = 6, - u3_writ_exit = 7 - } u3_writ_type; - - /* u3_writ: ipc message from king to serf - */ - typedef struct _u3_writ { - struct _u3_writ* nex_u; // next in queue - u3_writ_type typ_e; // type-tagged - union { // - struct { // work: - u3_ovum* egg_u; // origin - u3_noun job; // (pair date ovum) - } wok_u; // - u3_peek* pek_u; // peek - u3_info fon_u; // recompute - c3_d eve_d; // save/pack at - }; - } u3_writ; - - /* u3_lord_cb: u3_lord callbacks - */ - typedef struct _u3_lord_cb { - void* ptr_v; - void (*live_f)(void*); - void (*slog_f)(void*, c3_w, u3_noun); - void (*spin_f)(void*, u3_atom, c3_o); - void (*spun_f)(void*); - void (*play_done_f)(void*, u3_info, c3_l mug_l); - void (*play_bail_f)(void*, u3_info, c3_l mug_l, c3_d eve_d, u3_noun dud); - void (*work_done_f)(void*, u3_ovum*, u3_fact*, u3_gift*); - void (*work_bail_f)(void*, u3_ovum*, u3_noun lud); - void (*save_f)(void*); - void (*cram_f)(void*); - void (*bail_f)(void*); - void (*exit_f)(void*); - } u3_lord_cb; - - /* u3_lord: serf controller. - */ - typedef struct _u3_lord { - uv_process_t cub_u; // process handle - uv_process_options_t ops_u; // process configuration - uv_stdio_container_t cod_u[3]; // process options - u3_cue_xeno* sil_u; // cue handle - time_t wen_t; // process creation time - u3_mojo inn_u; // client's stdin - u3_moat out_u; // client's stdout - uv_pipe_t err_u; // client's stderr - c3_w wag_w; // config flags - c3_c* bin_c; // binary path - c3_c* pax_c; // directory - c3_d key_d[4]; // image key - c3_o liv_o; // live - c3_y hon_y; // hoon kelvin - c3_y noc_y; // nock kelvin - c3_d eve_d; // last event completed - c3_l mug_l; // mug at eve_d - u3_lord_cb cb_u; // callbacks - c3_o pin_o; // spinning - c3_w dep_w; // queue depth - struct _u3_writ* ent_u; // queue entry - struct _u3_writ* ext_u; // queue exit - } u3_lord; - - /* u3_read: event log read request - */ - typedef struct _u3_read { - union { // read timer/handle - uv_timer_t tim_u; // - uv_handle_t had_u; // - }; // - c3_d eve_d; // first event - c3_d len_d; // read stride - struct _u3_fact* ent_u; // response entry - struct _u3_fact* ext_u; // response exit - struct _u3_read* nex_u; // next read - struct _u3_read* pre_u; // previous read - struct _u3_disk* log_u; // disk backpointer - } u3_read; - - /* u3_disk_cb: u3_disk callbacks - */ - typedef struct _u3_disk_cb { - void* ptr_v; - void (*read_done_f)(void*, u3_info); - void (*read_bail_f)(void*, c3_d eve_d); - void (*write_done_f)(void*, c3_d eve_d); - void (*write_bail_f)(void*, c3_d eve_d); - } u3_disk_cb; - - /* u3_disk: manage event persistence. - */ - typedef struct _u3_disk { - u3_dire* dir_u; // main pier directory - u3_dire* urb_u; // urbit system data - u3_dire* com_u; // log directory - c3_o liv_o; // live - void* mdb_u; // lmdb environment. - c3_d sen_d; // commit requested - c3_d dun_d; // committed - u3_disk_cb cb_u; // callbacks - u3_read* red_u; // read requests - union { // write thread/request - uv_work_t ted_u; // - uv_req_t req_u; // - }; // - c3_o ted_o; // c3y == active - u3_info put_u; // write queue - } u3_disk; - - /* u3_psat: pier state. - */ - typedef enum { - u3_psat_init = 0, // initialized - u3_psat_boot = 1, // bootstrap - u3_psat_play = 2, // replaying - u3_psat_wyrd = 3, // versioning - u3_psat_work = 4, // working - u3_psat_done = 5 // shutting down - } u3_psat; - - /* u3_boot: bootstrap event sequence - */ - typedef struct _u3_boot { - u3_noun bot; // boot formulas - u3_noun mod; // module ova - u3_noun use; // userpace ova - } u3_boot; - - /* u3_play: replay control. - */ - typedef struct _u3_play { - c3_d eve_d; // target - c3_d req_d; // last read requested - c3_d sen_d; // last sent - u3_fact* ent_u; // queue entry - u3_fact* ext_u; // queue exit - struct _u3_pier* pir_u; // pier backpointer - } u3_play; - - /* u3_auto_cb: i/o driver callbacks - */ - typedef struct _u3_auto_cb { - void (*talk_f)(struct _u3_auto*); - u3_noun (*info_f)(struct _u3_auto*); - void (*slog_f)(struct _u3_auto*); - c3_o (*kick_f)(struct _u3_auto*, u3_noun, u3_noun); - void (*exit_f)(struct _u3_auto*); // XX close_cb? - } u3_auto_cb; - - /* u3_auto: abstract i/o driver - */ - typedef struct _u3_auto { - c3_m nam_m; - c3_o liv_o; - u3_auto_cb io; // XX io_u; - c3_w dep_w; - struct _u3_ovum* ent_u; - struct _u3_ovum* ext_u; - struct _u3_auto* nex_u; - struct _u3_pier* pir_u; - } u3_auto; - - /* u3_wall: pier barrier - */ - typedef struct _u3_wall { - void* ptr_v; - c3_d eve_d; - void (*wal_f)(void*, c3_d); - struct _u3_wall* nex_u; - } u3_wall; - - /* u3_work: normal operation. - */ - typedef struct _u3_work { - u3_auto* car_u; // i/o drivers - u3_wall* wal_u; // barriers - struct { // finished event queue: - c3_d rel_d; // last released - u3_gift* ent_u; // entry - u3_gift* ext_u; // exit - } fec_u; // - uv_prepare_t pep_u; // pre-loop - uv_check_t cek_u; // post-loop - uv_idle_t idl_u; // catchall XX uv_async_t? - struct _u3_pier* pir_u; // pier backpointer - } u3_work; - - /* u3_pier: ship controller. - */ - typedef struct _u3_pier { - c3_c* pax_c; // pier directory - c3_w lif_w; // lifecycle barrier - c3_d who_d[2]; // identity - c3_o fak_o; // yes iff fake security - c3_o liv_o; // fully live - u3_disk* log_u; // event log - u3_lord* god_u; // computer - u3_psat sat_e; // type-tagged - union { // - u3_boot* bot_u; // bootstrap - u3_play* pay_u; // recompute - u3_work* wok_u; // work - }; - struct { - u3_pico* ent_u; - u3_pico* ext_u; - } pec_u; - void* sop_p; // slog stream data - void (*sog_f) // slog stream callback - (void*, c3_w, u3_noun);// - // XX remove - c3_s per_s; // http port - c3_s pes_s; // htls port - c3_s por_s; // ames port - u3_save* sav_u; // autosave - // XX end remove - struct _u3_pier* nex_u; // next in list - } u3_pier; - - /* u3_king: all executing piers. - */ - typedef struct _u3_king { - void (*ssl_curl_f)(void*); // setup ssl CAs in CURL* - void (*ssl_x509_f)(void*); // setup ssl CAs in X509_STORE* - u3_pier* pir_u; // pier list - uv_timer_t tim_u; // gc timer - } u3_king; - - /* u3_pier_spin(): (re-)activate idle handler - */ - void - u3_pier_spin(u3_pier* pir_u); - -# define u3L u3_Host.lup_u // global event loop -# define u3K u3_King - - /** Global variables. - **/ - c3_global u3_host u3_Host; - c3_global c3_c* u3_Local; - c3_global u3_king u3_King; - - /** Functions. - **/ - /* Urbit time: 128 bits, leap-free. - ** - ** High 64 bits: 0x8000.000c.cea3.5380 + Unix time at leap 25 (Jul 2012) - ** Low 64 bits: 1/2^64 of a second. - ** - ** Seconds per Gregorian 400-block: 12.622.780.800 - ** 400-blocks from 0 to 0AD: 730.692.561 - ** Years from 0 to 0AD: 292.277.024.400 - ** Seconds from 0 to 0AD: 9.223.372.029.693.628.800 - ** Seconds between 0A and Unix epoch: 62.167.219.200 - ** Seconds before Unix epoch: 9.223.372.091.860.848.000 - ** The same, in C hex notation: 0x8000000cce9e0d80ULL - ** - ** XX: needs to be adjusted to implement Google leap-smear time. - */ - /* u3_time_sec_in(): urbit seconds from unix time. - ** - ** Adjust (externally) for future leap secs! - */ - c3_d - u3_time_sec_in(c3_w unx_w); - - /* u3_time_sec_out(): unix time from urbit seconds. - ** - ** Adjust (externally) for future leap secs! - */ - c3_w - u3_time_sec_out(c3_d urs_d); - - /* u3_time_fsc_in(): urbit fracto-seconds from unix microseconds. - */ - c3_d - u3_time_fsc_in(c3_w usc_w); - - /* u3_time_fsc_out: unix microseconds from urbit fracto-seconds. - */ - c3_w - u3_time_fsc_out(c3_d ufc_d); - - /* u3_time_in_tv(): urbit time from struct timeval. - */ - u3_atom - u3_time_in_tv(struct timeval* tim_tv); - - /* u3_time_out_tv(): struct timeval from urbit time. - */ - void - u3_time_out_tv(struct timeval* tim_tv, u3_noun now); - - /* u3_time_in_ts(): urbit time from struct timespec. - */ - u3_atom - u3_time_in_ts(struct timespec* tim_ts); -#if defined(U3_OS_linux) || defined(U3_OS_mingw) - /* u3_time_t_in_ts(): urbit time from time_t. - */ - u3_atom - u3_time_t_in_ts(time_t tim); -#endif - - /* u3_time_out_ts(): struct timespec from urbit time. - */ - void - u3_time_out_ts(struct timespec* tim_ts, u3_noun now); - - /* u3_time_gap_ms(): (wen - now) in ms. - */ - c3_d - u3_time_gap_ms(u3_noun now, u3_noun wen); - - /** Common structure lifecycle. - **/ - /* u3_dent_init(): initialize file record. - */ - u3_dent* - u3_dent_init(const c3_c* nam_c); - - /* u3_dent_free(): dispose file record. - */ - void - u3_dent_free(u3_dent *det_u); - - /* u3_dire_init(): initialize directory record. - */ - u3_dire* - u3_dire_init(const c3_c* pax_c); - - /* u3_dire_free(): dispose directory record. - */ - void - u3_dire_free(u3_dire *dir_u); - - /* u3_fact_init(): initialize completed event. - */ - u3_fact* - u3_fact_init(c3_d eve_d, c3_l mug_l, u3_noun job); - - /* u3_fact_free(): dispose completed event. - */ - void - u3_fact_free(u3_fact *tac_u); - - /* u3_gift_init(): initialize effect list. - */ - u3_gift* - u3_gift_init(c3_d eve_d, u3_noun act); - - /* u3_gift_free(): dispose effect list. - */ - void - u3_gift_free(u3_gift* gif_u); - - /* u3_ovum_init: initialize an unlinked potential event - */ - u3_ovum* - u3_ovum_init(c3_w mil_w, - u3_noun tar, - u3_noun wir, - u3_noun cad); - - /* u3_ovum_free: dispose an unlinked potential event - */ - void - u3_ovum_free(u3_ovum *egg_u); - - /* u3_pico_init(): initialize a scry request struct - */ - u3_pico* - u3_pico_init(); - - /* u3_pico_free(): dispose a scry request struct - */ - void - u3_pico_free(u3_pico* pic_u); - - /* u3_mcut_char(): measure/cut character. - */ - c3_w - u3_mcut_char(c3_c* buf_c, c3_w len_w, c3_c chr_c); - - /* u3_mcut_cord(): measure/cut cord. - */ - c3_w - u3_mcut_cord(c3_c* buf_c, c3_w len_w, u3_noun san); - - /* u3_mcut_path(): measure/cut cord list. - */ - c3_w - u3_mcut_path(c3_c* buf_c, c3_w len_w, c3_c sep_c, u3_noun pax); - - /* u3_mcut_host(): measure/cut host. - */ - c3_w - u3_mcut_host(c3_c* buf_c, c3_w len_w, u3_noun hot); - - /** IO drivers. - **/ - /* u3_auto_init(): initialize all drivers. - */ - u3_auto* - u3_auto_init(u3_pier* pir_u); - - /* u3_auto_info(): status info as a (list mass), all drivers. - */ - u3_noun - u3_auto_info(u3_auto* car_u); - - /* u3_auto_slog(): print status info. - */ - void - u3_auto_slog(u3_auto* car_u); - - /* u3_auto_exit(): close all drivers. - */ - void - u3_auto_exit(u3_auto* car_u); - - /* u3_auto_talk(): start all drivers. - */ - void - u3_auto_talk(u3_auto* car_u); - - /* u3_auto_live(): check if all drivers are live. - */ - c3_o - u3_auto_live(u3_auto* car_u); - - /* u3_auto_kick(): route effects to a linked driver. RETAIN - */ - void - u3_auto_kick(u3_auto* car_u, u3_noun act); - - /* u3_auto_next(): select an ovum, dequeue and construct. - */ - u3_ovum* - u3_auto_next(u3_auto* car_u, u3_noun* ovo); - - /* u3_auto_drop(): dequeue and dispose an ovum. - */ - void - u3_auto_drop(u3_auto* car_u, u3_ovum* egg_u); - - /* u3_auto_work(): notify driver of [egg_u] commencement. - */ - void - u3_auto_work(u3_ovum* egg_u); - - /* u3_auto_done(): notify driver of [egg_u] completion. - */ - void - u3_auto_done(u3_ovum* egg_u); - - /* u3_auto_bail(): notify driver that [egg_u] crashed. - */ - void - u3_auto_bail(u3_ovum* egg_u, u3_noun lud); - - /* u3_auto_bail_slog(): print a bail notification. - */ - void - u3_auto_bail_slog(u3_ovum* egg_u, u3_noun lud); - - /* u3_auto_plan(): enqueue an ovum. - */ - u3_ovum* - u3_auto_plan(u3_auto* car_u, u3_ovum* egg_u); - - /* u3_auto_redo(): retry an ovum. - */ - u3_ovum* - u3_auto_redo(u3_auto* car_u, u3_ovum* egg_u); - - /* u3_auto_peer(): subscribe to updates. - */ - void - u3_auto_peer(u3_ovum* egg_u, - void* ptr_v, - u3_ovum_peer news_f, - u3_ovum_bail bail_f); - - /* u3_disk_init(): load or create pier directories and event log. - */ - u3_disk* - u3_disk_init(c3_c* pax_c, u3_disk_cb cb_u); - - /* u3_disk_info(): status info as $mass. - */ - u3_noun - u3_disk_info(u3_disk* log_u); - - /* u3_disk_slog(): print status info. - */ - void - u3_disk_slog(u3_disk* log_u); - - /* u3_disk_exit(): close [log_u] and dispose. - */ - void - u3_disk_exit(u3_disk* log_u); - - /* u3_disk_read_meta(): read metadata. - */ - c3_o - u3_disk_read_meta(u3_disk* log_u, - c3_d* who_d, - c3_o* fak_o, - c3_w* lif_w); - - /* u3_disk_save_meta(): save metadata. - */ - c3_o - u3_disk_save_meta(u3_disk* log_u, - c3_d who_d[2], - c3_o fak_o, - c3_w lif_w); - - /* u3_disk_read(): read [len_d] events starting at [eve_d]. - */ - void - u3_disk_read(u3_disk* log_u, c3_d eve_d, c3_d len_d); - - /* u3_disk_boot_plan(): enqueue boot sequence, without autocommit. - */ - void - u3_disk_boot_plan(u3_disk* log_u, u3_noun job); - - /* u3_disk_boot_save(): commit boot sequence. - */ - void - u3_disk_boot_save(u3_disk* log_u); - - /* u3_disk_plan(): enqueue completed event for persistence. - */ - void - u3_disk_plan(u3_disk* log_u, u3_fact* tac_u); - - /* u3_lord_init(): start serf. - */ - u3_lord* - u3_lord_init(c3_c* pax_c, - c3_w wag_w, - c3_d key_d[4], - u3_lord_cb cb_u); - - /* u3_lord_info(): status info as a $mass. - */ - u3_noun - u3_lord_info(u3_lord* god_u); - - /* u3_lord_slog(): print status info. - */ - void - u3_lord_slog(u3_lord* god_u); - - /* u3_lord_exit(): shutdown gracefully. - */ - void - u3_lord_exit(u3_lord* god_u); - - /* u3_lord_stall(): send SIGINT - */ - void - u3_lord_stall(u3_lord* god_u); - - /* u3_lord_halt(): shutdown immediately - */ - void - u3_lord_halt(u3_lord* god_u); - - /* u3_lord_save(): save a snapshot. - */ - c3_o - u3_lord_save(u3_lord* god_u); - - /* u3_lord_cram(): save portable state. - */ - c3_o - u3_lord_cram(u3_lord* god_u); - - /* u3_lord_meld(): globally deduplicate persistent state. - */ - void - u3_lord_meld(u3_lord* god_u); - - /* u3_lord_pack(): defragment persistent state. - */ - void - u3_lord_pack(u3_lord* god_u); - - /* u3_lord_work(): attempt work. - */ - void - u3_lord_work(u3_lord* god_u, u3_ovum* egg_u, u3_noun job); - - /* u3_lord_play(): recompute batch. - */ - void - u3_lord_play(u3_lord* god_u, u3_info fon_u); - - /* u3_lord_peek(): read namespace, injecting what's missing. - */ - void - u3_lord_peek(u3_lord* god_u, u3_pico* pic_u); - - /** Filesystem (async). - **/ - /* u3_foil_folder(): load directory, blockingly. create if nonexistent. - */ - u3_dire* - u3_foil_folder(const c3_c* pax_c); // directory object, or 0 - - /** Terminal. - **/ - /* u3_term_start_spinner(): prepare spinner state. RETAIN. - */ - void - u3_term_start_spinner(u3_noun say, c3_o del_o); - - /* u3_term_stop_spinner(): reset spinner state and restore input line. - */ - void - u3_term_stop_spinner(void); - - /* u3_term_get_blew(): return window size [columns rows]. - */ - u3_noun - u3_term_get_blew(c3_l tid_l); - - /* u3_term_ef_winc(): window change. - */ - void - u3_term_ef_winc(void); - - /* u3_term_ef_ctlc(): send ^C. - */ - void - u3_term_ef_ctlc(void); - - /* u3_term_io_init(): initialize terminal I/O. - */ - u3_auto* - u3_term_io_init(u3_pier* pir_u); - - /* u3_term_io_hija(): hijack console for cooked print. - */ - FILE* - u3_term_io_hija(void); - - /* u3_term_it_log(): writes a log message - */ - void - u3_term_io_log(c3_c* line); - - /* u3_term_io_loja(): release console from cooked print. - */ - void - u3_term_io_loja(int x); - - /* u3_term_log_init(): initialize terminal for logging - */ - void - u3_term_log_init(void); - - /* u3_term_log_exit(): clean up terminal. - */ - void - u3_term_log_exit(void); - - /* u3_ptty_init(): initialize platform-specific tty. - */ - u3_utty* - u3_ptty_init(uv_loop_t* lup_u, const c3_c** err_c); - - - /** Ames, packet networking. - **/ - /* u3_ames_io_init(): initialize ames I/O. - */ - u3_auto* - u3_ames_io_init(u3_pier* pir_u); - - /* u3_ames_decode_lane(): destructure lane from noun - */ - u3_lane - u3_ames_decode_lane(u3_noun); - - /* u3_ames_encode_lane(): encode lane as noun - */ - u3_noun - u3_ames_encode_lane(u3_lane); - - /** Autosave. - **/ - /* u3_save_ef_chld(): report SIGCHLD. - */ - void - u3_save_ef_chld(u3_pier *pir_u); - - /* u3_save_io_init(): initialize autosave. - */ - void - u3_save_io_init(u3_pier *pir_u); - - /* u3_save_io_exit(): terminate autosave. - */ - void - u3_save_io_exit(u3_pier *pir_u); - - - /** Storage. - **/ - /* u3_unix_save(): save file undir .../.urb/put or bail. - */ - void - u3_unix_save(c3_c* pax_c, u3_atom pad); - - /* u3_unix_cane(): true iff (unix) path is canonical. - */ - c3_t - u3_unix_cane(const c3_c* pax_c); - - /* u3_unix_initial_into_card(): create initial filesystem sync card. - */ - u3_noun - u3_unix_initial_into_card(c3_c* arv_c); - - /* u3_unix_io_init(): initialize storage. - */ - u3_auto* - u3_unix_io_init(u3_pier* pir_u); - - /** behn, just a timer. - **/ - /* u3_behn_io_init(): initialize behn timer. - */ - u3_auto* - u3_behn_io_init(u3_pier* pir_u); - - /** HTTP server. - **/ - /* u3_http_io_init(): initialize http I/O. - */ - u3_auto* - u3_http_io_init(u3_pier* pir_u); - - /** HTTP client. - **/ - /* u3_cttp_io_init(): initialize cttp I/O. - */ - u3_auto* - u3_cttp_io_init(u3_pier* pir_u); - - /** Control plane. - **/ - /* u3_conn_io_init(): initialize control plane I/O. - */ - u3_auto* - u3_conn_io_init(u3_pier* pir_u); - - /** fore, first events. - **/ - /* u3_hind_io_init(): initialize fore - */ - u3_auto* - u3_fore_io_init(u3_pier* pir_u); - - /** hind, defaults. - **/ - /* u3_hind_io_init(): initialize hint - */ - u3_auto* - u3_hind_io_init(u3_pier* pir_u); - - /** Stream messages. - **/ - /* u3_newt_decode(): decode a (partial) length-prefixed byte buffer - */ - c3_o - u3_newt_decode(u3_moat* mot_u, c3_y* buf_y, c3_d len_d); - - /* u3_newt_send(): write buffer to stream. - */ - void - u3_newt_send(u3_mojo* moj_u, c3_d len_d, c3_y* byt_y); - - /* u3_newt_read_sync(): start reading; multiple msgs synchronous. - */ - void - u3_newt_read_sync(u3_moat* mot_u); - - /* u3_newt_read(): start reading; each msg asynchronous. - */ - void - u3_newt_read(u3_moat* mot_u); - - /* u3_newt_moat_info(): status info as $mass. - */ - u3_noun - u3_newt_moat_info(u3_moat* mot_u); - - /* u3_newt_moat_slog(); print status info. - */ - void - u3_newt_moat_slog(u3_moat* mot_u); - - /* u3_newt_moat_stop(); newt stop/close input stream. - */ - void - u3_newt_moat_stop(u3_moat* mot_u, u3_moor_bail bal_f); - - /* u3_newt_mojo_stop(); newt stop/close output stream. - */ - void - u3_newt_mojo_stop(u3_mojo* moj_u, u3_moor_bail bal_f); - - /** Pier scries. - **/ - /* u3_pier_peek(): read namespace. - */ - void - u3_pier_peek(u3_pier* pir_u, - u3_noun gan, - u3_noun ful, - void* ptr_v, - u3_peek_cb fun_f); - - /* u3_pier_peek_last(): read namespace, injecting ship and case. - */ - void - u3_pier_peek_last(u3_pier* pir_u, - u3_noun gan, - c3_m car_m, - u3_atom des, - u3_noun pax, - void* ptr_v, - u3_peek_cb fun_f); - - /** Pier control. - **/ - /* u3_pier_exit(): trigger a gentle shutdown. - */ - void - u3_pier_exit(u3_pier* pir_u); - - /* u3_pier_bail(): immediately shutdown.. - */ - void - u3_pier_bail(u3_pier* pir_u); - - /* u3_pier_save(): request checkpoint. - */ - c3_o - u3_pier_save(u3_pier* pir_u); - - /* u3_pier_cram(): save a portable snapshot. - */ - c3_o - u3_pier_cram(u3_pier* pir_u); - - /* u3_pier_meld(): globally deduplicate persistent state. - */ - void - u3_pier_meld(u3_pier* pir_u); - - /* u3_pier_pack(): defragment persistent state. - */ - void - u3_pier_pack(u3_pier* pir_u); - - /* u3_pier_info(): pier status info as $mass. - */ - u3_noun - u3_pier_info(u3_pier* pir_u); - - /* u3_pier_slog(): print pier status info. - */ - void - u3_pier_slog(u3_pier* pir_u); - - /* u3_pier_boot(): start the pier. - */ - u3_pier* - u3_pier_boot(c3_w wag_w, // config flags - u3_noun who, // identity - u3_noun ven, // boot event - u3_noun pil, // type-of/path-to pill - u3_noun pax, // path to pier - u3_weak fed); // extra private keys - - /* u3_pier_stay(): restart the pier. - */ - u3_pier* - u3_pier_stay(c3_w wag_w, u3_noun pax); - - /* u3_pier_tank(): dump single tank. - */ - void - u3_pier_tank(c3_l tab_l, c3_w pri_w, u3_noun tac); - - /* u3_pier_punt(): dump tank list. - */ - void - u3_pier_punt(c3_l tab_l, u3_noun tac); - - /* u3_pier_punt_goof(): dump a [mote tang] crash report. - */ - void - u3_pier_punt_goof(const c3_c* cap_c, u3_noun dud); - - /* u3_pier_punt_ovum(): print ovum details. - */ - void - u3_pier_punt_ovum(const c3_c* cap_c, u3_noun wir, u3_noun tag); - - /* u3_pier_sway(): print trace. - */ - void - u3_pier_sway(c3_l tab_l, u3_noun tax); - - /* u3_pier_mark(): mark all Loom allocations in all u3_pier structs. - */ - c3_w - u3_pier_mark(FILE* fil_u); - - /* u3_pier_mase(): construct a $mass leaf. - */ - u3_noun - u3_pier_mase(c3_c* cod_c, u3_noun dat); - - /* u3_pier_mass(): construct a $mass branch with noun/list. - */ - u3_noun - u3_pier_mass(u3_atom cod, u3_noun lit); - - /* u3_dawn_come(): mine a comet - */ - u3_noun - u3_dawn_come(void); - - /* u3_dawn_vent(): validated boot event - */ - u3_noun - u3_dawn_vent(u3_noun ship, u3_noun seed); - - /* u3_king_commence(): start the daemon - */ - void - u3_king_commence(); - - /* u3_king_stub(): get the One Pier for unreconstructed code. - */ - u3_pier* - u3_king_stub(void); - - /* u3_king_slog(): print status info. - */ - void - u3_king_slog(void); - - /* u3_king_done(): all piers closed - */ - void - u3_king_done(void); - - /* u3_king_exit(): shutdown gracefully - */ - void - u3_king_exit(void); - - /* u3_king_bail(): immediately shutdown. - */ - void - u3_king_bail(void); - - /* u3_king_grab(): gc the daemon - */ - void - u3_king_grab(void* ptr_v); - - /* u3_daemon_init(): platform-specific daemon mode initialization. - */ - void - u3_daemon_init(); - - /* u3_write_fd(): retry interrupts, continue partial writes, assert errors. - */ - void - u3_write_fd(c3_i fid_i, const void* buf_v, size_t len_i); - - c3_w - u3_readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); - -#endif /* ifndef U3_VERE_H */ diff --git a/pkg/urbit/jets/a/add.c b/pkg/urbit/jets/a/add.c deleted file mode 100644 index 0bcf608ee..000000000 --- a/pkg/urbit/jets/a/add.c +++ /dev/null @@ -1,56 +0,0 @@ -/* j/1/add.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qa_add(u3_atom a, - u3_atom b) - { - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - c3_w c = a + b; - - return u3i_words(1, &c); - } - else if ( 0 == a ) { - return u3k(b); - } - else { - mpz_t a_mp, b_mp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - mpz_add(a_mp, a_mp, b_mp); - mpz_clear(b_mp); - - return u3i_mp(a_mp); - } - } - u3_noun - u3wa_add(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b) && a != 0) ) - { - return u3m_bail(c3__exit); - } else { - return u3qa_add(a, b); - } - } - - u3_noun - u3ka_add(u3_noun a, - u3_noun b) - { - u3_noun c = u3qa_add(a, b); - - u3z(a); u3z(b); - return c; - } diff --git a/pkg/urbit/jets/a/dec.c b/pkg/urbit/jets/a/dec.c deleted file mode 100644 index 7ad2f170c..000000000 --- a/pkg/urbit/jets/a/dec.c +++ /dev/null @@ -1,56 +0,0 @@ -/* j/1/dec.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qa_inc(u3_atom a) - { - return u3i_vint(u3k(a)); - } - - u3_noun - u3qa_dec(u3_atom a) - { - if ( 0 == a ) { - return u3m_error("decrement-underflow"); - } - else { - if ( _(u3a_is_cat(a)) ) { - return a - 1; - } - else { - mpz_t a_mp; - - u3r_mp(a_mp, a); - mpz_sub_ui(a_mp, a_mp, 1); - - return u3i_mp(a_mp); - } - } - } - - u3_noun - u3wa_dec(u3_noun cor) - { - u3_noun a; - - if ( (u3_none == (a = u3r_at(u3x_sam, cor))) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qa_dec(a); - } - } - - u3_noun - u3ka_dec(u3_atom a) - { - u3_noun b = u3qa_dec(a); - u3z(a); - return b; - } diff --git a/pkg/urbit/jets/a/div.c b/pkg/urbit/jets/a/div.c deleted file mode 100644 index 9ac4eeb5f..000000000 --- a/pkg/urbit/jets/a/div.c +++ /dev/null @@ -1,56 +0,0 @@ -/* j/1/div.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qa_div(u3_atom a, - u3_atom b) - { - if ( 0 == b ) { - return u3m_error("divide-by-zero"); - } - else { - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - return a / b; - } - else { - mpz_t a_mp, b_mp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - mpz_tdiv_q(a_mp, a_mp, b_mp); - mpz_clear(b_mp); - - return u3i_mp(a_mp); - } - } - } - u3_noun - u3wa_div(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qa_div(a, b); - } - } - - -u3_noun -u3ka_div(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qa_div(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/a/gte.c b/pkg/urbit/jets/a/gte.c deleted file mode 100644 index 9e2eee7fe..000000000 --- a/pkg/urbit/jets/a/gte.c +++ /dev/null @@ -1,56 +0,0 @@ -/* j/1/gte.c -** -*/ -#include "all.h" - -u3_noun -u3qa_gte(u3_atom a, u3_atom b) -{ - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - return __(a >= b); - } - else if ( 0 == a ) { - return c3n; - } - else if ( 0 == b ) { - return c3y; - } - else { - c3_w a_w = u3r_met(0, a); - c3_w b_w = u3r_met(0, b); - - if ( a_w != b_w ) { - return __(a_w >= b_w); - } - else { - mpz_t a_mp, b_mp; - u3_noun cmp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - cmp = (mpz_cmp(a_mp, b_mp) >= 0) ? c3y : c3n; - - mpz_clear(a_mp); - mpz_clear(b_mp); - - return cmp; - } - } -} - -u3_noun -u3wa_gte(u3_noun cor) -{ - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) - || (c3n == u3ud(b) && 0 != a) - || (c3n == u3ud(a) && 0 != b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qa_gte(a, b); - } -} diff --git a/pkg/urbit/jets/a/gth.c b/pkg/urbit/jets/a/gth.c deleted file mode 100644 index 3396b1633..000000000 --- a/pkg/urbit/jets/a/gth.c +++ /dev/null @@ -1,64 +0,0 @@ -/* j/1/gth.c -** -*/ -#include "all.h" - -u3_noun -u3qa_gth(u3_atom a, u3_atom b) -{ - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - return __(a > b); - } - else if ( 0 == a ) { - return c3n; - } - else if ( 0 == b ) { - return c3y; - } - else { - c3_w a_w = u3r_met(0, a); - c3_w b_w = u3r_met(0, b); - - if ( a_w != b_w ) { - return __(a_w > b_w); - } - else { - mpz_t a_mp, b_mp; - u3_noun cmp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - cmp = (mpz_cmp(a_mp, b_mp) > 0) ? c3y : c3n; - - mpz_clear(a_mp); - mpz_clear(b_mp); - - return cmp; - } - } -} - -u3_noun -u3wa_gth(u3_noun cor) -{ - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) - || (c3n == u3ud(b) && 0 != a) - || (c3n == u3ud(a) && 0 != b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qa_gth(a, b); - } -} - -u3_noun -u3ka_gth(u3_noun a, u3_noun b) -{ - u3_noun c = u3qa_gth(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/a/lte.c b/pkg/urbit/jets/a/lte.c deleted file mode 100644 index cb639773d..000000000 --- a/pkg/urbit/jets/a/lte.c +++ /dev/null @@ -1,64 +0,0 @@ -/* j/1/lte.c -** -*/ -#include "all.h" - -u3_noun -u3qa_lte(u3_atom a, u3_atom b) -{ - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - return __(a <= b); - } - else if ( 0 == a ) { - return c3y; - } - else if ( 0 == b ) { - return c3n; - } - else { - c3_w a_w = u3r_met(0, a); - c3_w b_w = u3r_met(0, b); - - if ( a_w != b_w ) { - return __(a_w <= b_w); - } - else { - mpz_t a_mp, b_mp; - u3_noun cmp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - cmp = (mpz_cmp(a_mp, b_mp) <= 0) ? c3y : c3n; - - mpz_clear(a_mp); - mpz_clear(b_mp); - - return cmp; - } - } -} - -u3_noun -u3wa_lte(u3_noun cor) -{ - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) - || (c3n == u3ud(b) && 0 != a) - || (c3n == u3ud(a) && 0 != b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qa_lte(a, b); - } -} - -u3_noun -u3ka_lte(u3_noun a, u3_noun b) -{ - u3_noun c = u3qa_lte(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/a/lth.c b/pkg/urbit/jets/a/lth.c deleted file mode 100644 index 0e58418e6..000000000 --- a/pkg/urbit/jets/a/lth.c +++ /dev/null @@ -1,56 +0,0 @@ -/* j/1/lth.c -** -*/ -#include "all.h" - -u3_noun -u3qa_lth(u3_atom a, u3_atom b) -{ - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - return __(a < b); - } - else if ( 0 == a ) { - return c3y; - } - else if ( 0 == b ) { - return c3n; - } - else { - c3_w a_w = u3r_met(0, a); - c3_w b_w = u3r_met(0, b); - - if ( a_w != b_w ) { - return __(a_w < b_w); - } - else { - mpz_t a_mp, b_mp; - u3_noun cmp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - cmp = (mpz_cmp(a_mp, b_mp) < 0) ? c3y : c3n; - - mpz_clear(a_mp); - mpz_clear(b_mp); - - return cmp; - } - } -} - -u3_noun -u3wa_lth(u3_noun cor) -{ - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) - || (c3n == u3ud(b) && 0 != a) - || (c3n == u3ud(a) && 0 != b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qa_lth(a, b); - } -} diff --git a/pkg/urbit/jets/a/mod.c b/pkg/urbit/jets/a/mod.c deleted file mode 100644 index af9f6662b..000000000 --- a/pkg/urbit/jets/a/mod.c +++ /dev/null @@ -1,52 +0,0 @@ -/* j/1/mod.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qa_mod(u3_atom a, - u3_atom b) - { - if ( 0 == b ) { - return u3m_bail(c3__exit); - } else if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - return a % b; - } else { - mpz_t a_mp, b_mp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - mpz_tdiv_r(a_mp, a_mp, b_mp); - mpz_clear(b_mp); - - return u3i_mp(a_mp); - } - } - - u3_noun - u3wa_mod(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qa_mod(a, b); - } - } - -u3_noun -u3ka_mod(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qa_mod(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/a/mul.c b/pkg/urbit/jets/a/mul.c deleted file mode 100644 index e8eacdbd4..000000000 --- a/pkg/urbit/jets/a/mul.c +++ /dev/null @@ -1,56 +0,0 @@ -/* j/1/mul.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qa_mul(u3_atom a, - u3_atom b) - { - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - c3_d c = ((c3_d) a) * ((c3_d) b); - - return u3i_chubs(1, &c); - } - else if ( 0 == a ) { - return 0; - } - else { - mpz_t a_mp, b_mp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - mpz_mul(a_mp, a_mp, b_mp); - mpz_clear(b_mp); - - return u3i_mp(a_mp); - } - } - u3_noun - u3wa_mul(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b) && a != 0) ) - { - return u3m_bail(c3__exit); - } else { - return u3qa_mul(a, b); - } - } - u3_noun - u3ka_mul(u3_noun a, - u3_noun b) - { - u3_noun c = u3qa_mul(a, b); - - u3z(a); u3z(b); - return c; - } - diff --git a/pkg/urbit/jets/a/sub.c b/pkg/urbit/jets/a/sub.c deleted file mode 100644 index 7af71f96c..000000000 --- a/pkg/urbit/jets/a/sub.c +++ /dev/null @@ -1,64 +0,0 @@ -/* j/1/sub.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qa_sub(u3_atom a, - u3_atom b) - { - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - if ( a < b ) { - return u3m_error("subtract-underflow"); - } - else return (a - b); - } - else if ( 0 == b ) { - return u3k(a); - } - else { - mpz_t a_mp, b_mp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - if ( mpz_cmp(a_mp, b_mp) < 0 ) { - mpz_clear(a_mp); - mpz_clear(b_mp); - - return u3m_error("subtract-underflow"); - } - mpz_sub(a_mp, a_mp, b_mp); - mpz_clear(b_mp); - - return u3i_mp(a_mp); - } - } - - u3_noun - u3wa_sub(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(b)) || - (c3n == u3ud(a) && b != 0) ) - { - return u3m_bail(c3__exit); - } else { - return u3qa_sub(a, b); - } - } - - u3_noun - u3ka_sub(u3_noun a, - u3_noun b) - { - u3_noun c = u3qa_sub(a, b); - - u3z(a); u3z(b); - return c; - } diff --git a/pkg/urbit/jets/b/bind.c b/pkg/urbit/jets/b/bind.c deleted file mode 100644 index f0421664e..000000000 --- a/pkg/urbit/jets/b/bind.c +++ /dev/null @@ -1,30 +0,0 @@ -/* j/2/bind.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qb_bind(u3_noun a, - u3_noun b) - { - if ( 0 == a ) { - return 0; - } else { - return u3nc(0, u3n_slam_on(u3k(b), u3k(u3t(a)))); - } - } - u3_noun - u3wb_bind(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qb_bind(a, b); - } - } - diff --git a/pkg/urbit/jets/b/clap.c b/pkg/urbit/jets/b/clap.c deleted file mode 100644 index a4a8c6085..000000000 --- a/pkg/urbit/jets/b/clap.c +++ /dev/null @@ -1,36 +0,0 @@ -/* j/2/clap.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qb_clap(u3_noun a, - u3_noun b, - u3_noun c) - { - if ( 0 == a ) { - return u3k(b); - } - else if ( 0 == b ) { - return u3k(a); - } - else { - return u3nc(0, u3n_slam_on(u3k(c), u3nc(u3k(u3t(a)), u3k(u3t(b))))); - } - } - u3_noun - u3wb_clap(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, - u3x_sam_6, &b, - u3x_sam_7, &c, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qb_clap(a, b, c); - } - } diff --git a/pkg/urbit/jets/b/drop.c b/pkg/urbit/jets/b/drop.c deleted file mode 100644 index 2048210c3..000000000 --- a/pkg/urbit/jets/b/drop.c +++ /dev/null @@ -1,30 +0,0 @@ -/* j/2/drop.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qb_drop(u3_noun a) - { - if ( 0 == a ) { - return u3_nul; - } - else { - return u3nc(0, u3k(u3t(a))); - } - } - u3_noun - u3wb_drop(u3_noun cor) - { - u3_noun a; - - if ( u3_none == (a = u3r_at(u3x_sam, cor)) ) { - return u3_none; - } else { - return u3qb_drop(a); - } - } - diff --git a/pkg/urbit/jets/b/find.c b/pkg/urbit/jets/b/find.c deleted file mode 100644 index 2a632366d..000000000 --- a/pkg/urbit/jets/b/find.c +++ /dev/null @@ -1,48 +0,0 @@ -/* j/2/find.c -** -*/ -#include "all.h" - -STATIC_ASSERT( (UINT32_MAX > u3a_cells), - "list index precision" ); - -u3_noun -u3qb_find(u3_noun nedl, u3_noun hstk) -{ - if ( u3_nul != nedl ) { - c3_w i_w = 0; - - while ( u3_nul != hstk ) { - u3_noun i_h, t_h = hstk; - u3_noun i_n, t_n = nedl; - u3x_cell(t_h, &i_h, &t_h); - u3x_cell(t_n, &i_n, &t_n); - - while ( c3y == u3r_sing(i_n, i_h) ) { - if ( u3_nul == t_n ) { - return u3nc(u3_nul, u3i_word(i_w)); - } - else if ( u3_nul == t_h ) { - break; - } - else { - u3x_cell(t_h, &i_h, &t_h); - u3x_cell(t_n, &i_n, &t_n); - } - } - - hstk = u3t(hstk); - i_w++; - } - } - - return u3_nul; -} - -u3_noun -u3wb_find(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - return u3qb_find(a, b); -} diff --git a/pkg/urbit/jets/b/flop.c b/pkg/urbit/jets/b/flop.c deleted file mode 100644 index 296c134c2..000000000 --- a/pkg/urbit/jets/b/flop.c +++ /dev/null @@ -1,31 +0,0 @@ -/* j/2/flop.c -** -*/ -#include "all.h" - -u3_noun -u3qb_flop(u3_noun a) -{ - u3_noun i, t = a, b = u3_nul; - - while ( u3_nul != t ) { - u3x_cell(t, &i, &t); - b = u3nc(u3k(i), b); - } - - return b; -} - -u3_noun -u3wb_flop(u3_noun cor) -{ - return u3qb_flop(u3x_at(u3x_sam, cor)); -} - -u3_noun -u3kb_flop(u3_noun a) -{ - u3_noun b = u3qb_flop(a); - u3z(a); - return b; -} diff --git a/pkg/urbit/jets/b/lent.c b/pkg/urbit/jets/b/lent.c deleted file mode 100644 index f0320c03f..000000000 --- a/pkg/urbit/jets/b/lent.c +++ /dev/null @@ -1,34 +0,0 @@ -/* j/2/lent.c -** -*/ -#include "all.h" - -STATIC_ASSERT( (UINT32_MAX > u3a_cells), - "length precision" ); - -u3_noun -u3qb_lent(u3_noun a) -{ - c3_w len_w = 0; - - while ( u3_nul != a ) { - a = u3t(a); - len_w++; - } - - return u3i_word(len_w); -} - -u3_noun -u3wb_lent(u3_noun cor) -{ - return u3qb_lent(u3x_at(u3x_sam, cor)); -} - -u3_noun -u3kb_lent(u3_noun a) -{ - u3_noun b = u3qb_lent(a); - u3z(a); - return b; -} diff --git a/pkg/urbit/jets/b/levy.c b/pkg/urbit/jets/b/levy.c deleted file mode 100644 index 3f4978b79..000000000 --- a/pkg/urbit/jets/b/levy.c +++ /dev/null @@ -1,49 +0,0 @@ -/* j/2/levy.c -** -*/ -#include "all.h" - - static u3_noun - _levy_in(u3j_site* sit_u, u3_noun a) - { - if ( 0 == a ) { - return c3y; - } else { - u3_noun loz; - - if ( c3n == u3du(a) ) { - return u3m_bail(c3__exit); - } - else switch ( (loz = u3j_gate_slam(sit_u, u3k(u3h(a)))) ) { - case c3y: return _levy_in(sit_u, u3t(a)); - case c3n: return c3n; - default: u3z(loz); - return u3m_bail(c3__exit); - } - } - } - -/* functions -*/ - u3_noun - u3qb_levy(u3_noun a, - u3_noun b) - { - u3_noun pro; - u3j_site sit_u; - u3j_gate_prep(&sit_u, u3k(b)); - pro = _levy_in(&sit_u, a); - u3j_gate_lose(&sit_u); - return pro; - } - u3_noun - u3wb_levy(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qb_levy(a, b); - } - } diff --git a/pkg/urbit/jets/b/lien.c b/pkg/urbit/jets/b/lien.c deleted file mode 100644 index c37b1ee8f..000000000 --- a/pkg/urbit/jets/b/lien.c +++ /dev/null @@ -1,49 +0,0 @@ -/* j/2/lien.c -** -*/ -#include "all.h" - - static u3_noun - _lien_in(u3j_site* sit_u, u3_noun a) - { - if ( 0 == a ) { - return c3n; - } else { - u3_noun loz; - - if ( c3n == u3du(a) ) { - return u3m_bail(c3__exit); - } - else switch ( (loz = u3j_gate_slam(sit_u, u3k(u3h(a)))) ) { - case c3y: return c3y; - case c3n: return _lien_in(sit_u, u3t(a)); - default: u3z(loz); - return u3m_bail(c3__exit); - } - } - } - -/* functions -*/ - u3_noun - u3qb_lien(u3_noun a, - u3_noun b) - { - u3_noun pro; - u3j_site sit_u; - u3j_gate_prep(&sit_u, u3k(b)); - pro = _lien_in(&sit_u, a); - u3j_gate_lose(&sit_u); - return pro; - } - u3_noun - u3wb_lien(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qb_lien(a, b); - } - } diff --git a/pkg/urbit/jets/b/murn.c b/pkg/urbit/jets/b/murn.c deleted file mode 100644 index fa04ecc7b..000000000 --- a/pkg/urbit/jets/b/murn.c +++ /dev/null @@ -1,48 +0,0 @@ -/* j/2/murn.c -** -*/ -#include "all.h" - -u3_noun -u3qb_murn(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3_noun* lit = &pro; - - if ( u3_nul != a ) { - u3_noun* hed; - u3_noun* tel; - u3_noun res, i, t = a; - u3j_site sit_u; - - u3j_gate_prep(&sit_u, u3k(b)); - - do { - u3x_cell(t, &i, &t); - - res = u3j_gate_slam(&sit_u, u3k(i)); - - if ( u3_nul != res ) { - *lit = u3i_defcons(&hed, &tel); - *hed = u3k(u3t(res)); - lit = tel; - u3z(res); - } - } - while ( u3_nul != t ); - - u3j_gate_lose(&sit_u); - } - - *lit = u3_nul; - - return pro; -} - -u3_noun -u3wb_murn(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - return u3qb_murn(a, b); -} diff --git a/pkg/urbit/jets/b/need.c b/pkg/urbit/jets/b/need.c deleted file mode 100644 index 6e0e47d25..000000000 --- a/pkg/urbit/jets/b/need.c +++ /dev/null @@ -1,30 +0,0 @@ -/* j/2/need.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qb_need(u3_noun a) - { - if ( 0 == a ) { - return u3m_bail(c3__exit); - } - else { - return u3k(u3t(a)); - } - } - u3_noun - u3wb_need(u3_noun cor) - { - u3_noun a; - - if ( u3_none == (a = u3r_at(u3x_sam, cor)) ) { - return u3m_bail(c3__exit); - } else { - return u3qb_need(a); - } - } - diff --git a/pkg/urbit/jets/b/reap.c b/pkg/urbit/jets/b/reap.c deleted file mode 100644 index 683d3f172..000000000 --- a/pkg/urbit/jets/b/reap.c +++ /dev/null @@ -1,41 +0,0 @@ -/* j/2/reap.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qb_reap(u3_atom a, - u3_noun b) - { - if ( !_(u3a_is_cat(a)) ) { - return u3m_bail(c3__fail); - } - else { - u3_noun acc = u3_nul; - c3_w i_w = a; - - while ( i_w ) { - acc = u3nc(u3k(b), acc); - i_w--; - } - - return acc; - } - } - - u3_noun - u3wb_reap(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qb_reap(a, b); - } - } diff --git a/pkg/urbit/jets/b/reel.c b/pkg/urbit/jets/b/reel.c deleted file mode 100644 index 2292db1a9..000000000 --- a/pkg/urbit/jets/b/reel.c +++ /dev/null @@ -1,53 +0,0 @@ -/* j/2/reel.c -** -*/ -#include "all.h" - -/* functions -*/ - u3_noun - u3qb_reel(u3_noun a, - u3_noun b) - { - u3_noun pro = u3k(u3x_at(u3x_sam_3, b)); - - if ( u3_nul != a ) { - u3a_pile pil_u; - u3j_site sit_u; - u3_noun* top; - u3_noun i, t = a; - - u3a_pile_prep(&pil_u, sizeof(u3_noun)); - - // push list onto road stack - // - do { - u3x_cell(t, &i, &t); - top = u3a_push(&pil_u); - *top = i; - } while ( u3_nul != t ); - - u3a_pile_sane(&pil_u); - u3j_gate_prep(&sit_u, u3k(b)); - - while ( c3n == u3a_pile_done(&pil_u) ) { - pro = u3j_gate_slam(&sit_u, u3nc(u3k(*top), pro)); - top = u3a_pop(&pil_u); - } - - u3j_gate_lose(&sit_u); - } - - return pro; - } - u3_noun - u3wb_reel(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qb_reel(a, b); - } - } diff --git a/pkg/urbit/jets/b/roll.c b/pkg/urbit/jets/b/roll.c deleted file mode 100644 index 72f334f55..000000000 --- a/pkg/urbit/jets/b/roll.c +++ /dev/null @@ -1,38 +0,0 @@ -/* j/2/roll.c -** -*/ -#include "all.h" - -/* functions -*/ - u3_noun - u3qb_roll(u3_noun a, - u3_noun b) - { - u3_noun pro = u3k(u3x_at(u3x_sam_3, b)); - - if ( u3_nul != a ) { - u3j_site sit_u; - u3_noun i, t = a; - u3j_gate_prep(&sit_u, u3k(b)); - do { - u3x_cell(t, &i, &t); - pro = u3j_gate_slam(&sit_u, u3nc(u3k(i), pro)); - } while ( u3_nul != t ); - u3j_gate_lose(&sit_u); - } - - return pro; - } - u3_noun - u3wb_roll(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qb_roll(a, b); - } - } - diff --git a/pkg/urbit/jets/b/scag.c b/pkg/urbit/jets/b/scag.c deleted file mode 100644 index dd66f6954..000000000 --- a/pkg/urbit/jets/b/scag.c +++ /dev/null @@ -1,51 +0,0 @@ -/* j/2/scag.c -** -*/ -#include "all.h" - -u3_noun -u3qb_scag(u3_atom a, u3_noun b) -{ - if ( u3_nul == b ) { - return u3_nul; - } - else if ( !_(u3a_is_cat(a)) ) { - return u3m_bail(c3__fail); - } - else { - u3_noun pro; - u3_noun* lit = &pro; - - { - c3_w len_w = (c3_w)a; - u3_noun* hed; - u3_noun* tel; - u3_noun i, t = b; - - while ( len_w-- && (u3_nul != t) ) { - u3x_cell(t, &i, &t); - - *lit = u3i_defcons(&hed, &tel); - *hed = u3k(i); - lit = tel; - } - } - - *lit = u3_nul; - - return pro; - } -} - -u3_noun -u3wb_scag(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - - if ( (c3n == u3ud(a)) && (u3_nul != b) ) { - return u3m_bail(c3__exit); - } - - return u3qb_scag(a, b); -} diff --git a/pkg/urbit/jets/b/skid.c b/pkg/urbit/jets/b/skid.c deleted file mode 100644 index 4f1a7818b..000000000 --- a/pkg/urbit/jets/b/skid.c +++ /dev/null @@ -1,56 +0,0 @@ -/* j/2/skid.c -** -*/ -#include "all.h" - -u3_noun -u3qb_skid(u3_noun a, u3_noun b) -{ - u3_noun l, r; - u3_noun* lef = &l; - u3_noun* rig = &r; - - if ( u3_nul != a) { - u3_noun i, t = a; - u3_noun* hed; - u3_noun* tel; - u3j_site sit_u; - u3j_gate_prep(&sit_u, u3k(b)); - - do { - u3x_cell(t, &i, &t); - - switch ( u3j_gate_slam(&sit_u, u3k(i)) ) { - case c3y: { - *lef = u3i_defcons(&hed, &tel); - *hed = u3k(i); - lef = tel; - } break; - - case c3n: { - *rig = u3i_defcons(&hed, &tel); - *hed = u3k(i); - rig = tel; - } break; - - default: u3m_bail(c3__exit); - } - } - while ( u3_nul != t ); - - u3j_gate_lose(&sit_u); - } - - *lef = u3_nul; - *rig = u3_nul; - - return u3nc(l, r); -} - -u3_noun -u3wb_skid(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - return u3qb_skid(a, b); -} diff --git a/pkg/urbit/jets/b/skim.c b/pkg/urbit/jets/b/skim.c deleted file mode 100644 index c83c2ad70..000000000 --- a/pkg/urbit/jets/b/skim.c +++ /dev/null @@ -1,50 +0,0 @@ -/* j/2/skim.c -** -*/ -#include "all.h" - -u3_noun -u3qb_skim(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3_noun* lit = &pro; - - if ( u3_nul != a) { - u3_noun i, t = a; - u3_noun* hed; - u3_noun* tel; - u3j_site sit_u; - u3j_gate_prep(&sit_u, u3k(b)); - - do { - u3x_cell(t, &i, &t); - - switch ( u3j_gate_slam(&sit_u, u3k(i)) ) { - case c3y: { - *lit = u3i_defcons(&hed, &tel); - *hed = u3k(i); - lit = tel; - } break; - - case c3n: break; - - default: u3m_bail(c3__exit); - } - } - while ( u3_nul != t ); - - u3j_gate_lose(&sit_u); - } - - *lit = u3_nul; - - return pro; -} - -u3_noun -u3wb_skim(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - return u3qb_skim(a, b); -} diff --git a/pkg/urbit/jets/b/skip.c b/pkg/urbit/jets/b/skip.c deleted file mode 100644 index 5d72796b3..000000000 --- a/pkg/urbit/jets/b/skip.c +++ /dev/null @@ -1,50 +0,0 @@ -/* j/2/skip.c -** -*/ -#include "all.h" - -u3_noun -u3qb_skip(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3_noun* lit = &pro; - - if ( u3_nul != a) { - u3_noun i, t = a; - u3_noun* hed; - u3_noun* tel; - u3j_site sit_u; - u3j_gate_prep(&sit_u, u3k(b)); - - do { - u3x_cell(t, &i, &t); - - switch ( u3j_gate_slam(&sit_u, u3k(i)) ) { - case c3y: break; - - case c3n: { - *lit = u3i_defcons(&hed, &tel); - *hed = u3k(i); - lit = tel; - } break; - - default: u3m_bail(c3__exit); - } - } - while ( u3_nul != t ); - - u3j_gate_lose(&sit_u); - } - - *lit = u3_nul; - - return pro; -} - -u3_noun -u3wb_skip(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - return u3qb_skip(a, b); -} diff --git a/pkg/urbit/jets/b/slag.c b/pkg/urbit/jets/b/slag.c deleted file mode 100644 index 5a14b0beb..000000000 --- a/pkg/urbit/jets/b/slag.c +++ /dev/null @@ -1,43 +0,0 @@ -/* j/2/slag.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qb_slag(u3_atom a, u3_noun b) - { - if ( u3_nul == b ) { - return u3_nul; - } - else if ( !_(u3a_is_cat(a)) ) { - return u3m_bail(c3__fail); - } - else { - c3_w len_w = a; - - while ( len_w ) { - if ( c3n == u3du(b) ) { - return u3_nul; - } - b = u3t(b); - len_w--; - } - return u3k(b); - } - } - u3_noun - u3wb_slag(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a) && u3_nul != b) ) - { - return u3m_bail(c3__exit); - } else { - return u3qb_slag(a, b); - } - } diff --git a/pkg/urbit/jets/b/snag.c b/pkg/urbit/jets/b/snag.c deleted file mode 100644 index 6a0003404..000000000 --- a/pkg/urbit/jets/b/snag.c +++ /dev/null @@ -1,44 +0,0 @@ -/* j/2/snag.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qb_snag(u3_atom a, - u3_noun b) - { - if ( !_(u3a_is_cat(a)) ) { - return u3m_bail(c3__fail); - } - else { - c3_w len_w = a; - - while ( len_w ) { - if ( c3n == u3du(b) ) { - return u3m_bail(c3__exit); - } - b = u3t(b); - len_w--; - } - if ( c3n == u3du(b) ) { - return u3m_bail(c3__exit); - } - return u3k(u3h(b)); - } - } - u3_noun - u3wb_snag(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qb_snag(a, b); - } - } diff --git a/pkg/urbit/jets/b/sort.c b/pkg/urbit/jets/b/sort.c deleted file mode 100644 index 51d02c05a..000000000 --- a/pkg/urbit/jets/b/sort.c +++ /dev/null @@ -1,88 +0,0 @@ -/* j/2/sort.c -** -*/ -#include "all.h" - - -/* functions -*/ - // like skid, except its callback is $-([* *] ?) and it takes the second - // argument so that it calls its callback with [i.list, second] - // - // all args are RETAINED - static u3_noun - _split_in(u3j_site* sit_u, - u3_noun a, - u3_noun second) - { - if ( 0 == a ) { - return u3nc(u3_nul, u3_nul); - } - else if ( c3n == u3du(a) ) { - return u3m_bail(c3__exit); - } else { - u3_noun acc = _split_in(sit_u, u3t(a), second); - u3_noun hoz = u3j_gate_slam(sit_u, u3nc(u3k(u3h(a)), u3k(second))); - u3_noun nex; - - if ( c3y == hoz ) { - nex = u3nc(u3nc(u3k(u3h(a)), u3k(u3h(acc))), u3k(u3t(acc))); - } - else { - nex = u3nc(u3k(u3h(acc)), u3nc(u3k(u3h(a)), u3k(u3t(acc)))); - } - u3z(hoz); - u3z(acc); - - return nex; - } - } - - static u3_noun - _sort_in(u3j_site* sit_u, u3_noun list) - { - if ( 0 == list ) { - return u3_nul; - } - else if ( c3n == u3du(list) ) { - return u3m_bail(c3__exit); - } else { - u3_noun hed, tal; - u3x_cell(list, &hed, &tal); - - u3_noun split = _split_in(sit_u, tal, hed); - u3_noun lhs = _sort_in(sit_u, u3h(split)); - u3_noun rhs = u3nc(u3k(hed), _sort_in(sit_u, u3t(split))); - - u3_noun ret = u3qb_weld(lhs, rhs); - u3z(lhs); - u3z(rhs); - u3z(split); - - return ret; - } - } - - u3_noun - u3qb_sort(u3_noun a, - u3_noun b) - { - u3_noun pro; - u3j_site sit_u; - u3j_gate_prep(&sit_u, u3k(b)); - pro = _sort_in(&sit_u, a); - u3j_gate_lose(&sit_u); - return pro; - } - u3_noun - u3wb_sort(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qb_sort(a, b); - } - } - diff --git a/pkg/urbit/jets/b/turn.c b/pkg/urbit/jets/b/turn.c deleted file mode 100644 index 1af14d7e3..000000000 --- a/pkg/urbit/jets/b/turn.c +++ /dev/null @@ -1,43 +0,0 @@ -/* j/2/turn.c -** -*/ -#include "all.h" - -u3_noun -u3qb_turn(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3_noun* lit = &pro; - - if ( u3_nul != a ) { - u3_noun* hed; - u3_noun* tel; - u3_noun i, t = a; - u3j_site sit_u; - - u3j_gate_prep(&sit_u, u3k(b)); - - do { - u3x_cell(t, &i, &t); - - *lit = u3i_defcons(&hed, &tel); - *hed = u3j_gate_slam(&sit_u, u3k(i)); - lit = tel; - } - while ( u3_nul != t ); - - u3j_gate_lose(&sit_u); - } - - *lit = u3_nul; - - return pro; -} - -u3_noun -u3wb_turn(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - return u3qb_turn(a, b); -} diff --git a/pkg/urbit/jets/b/weld.c b/pkg/urbit/jets/b/weld.c deleted file mode 100644 index c01470b45..000000000 --- a/pkg/urbit/jets/b/weld.c +++ /dev/null @@ -1,45 +0,0 @@ -/* j/2/weld.c -** -*/ -#include "all.h" - -u3_noun -u3qb_weld(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3_noun* lit = &pro; - - { - u3_noun* hed; - u3_noun* tel; - u3_noun i, t = a; - - while ( u3_nul != t ) { - u3x_cell(t, &i, &t); - - *lit = u3i_defcons(&hed, &tel); - *hed = u3k(i); - lit = tel; - } - } - - *lit = u3k(b); - - return pro; -} - -u3_noun -u3wb_weld(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - return u3qb_weld(a, b); -} - -u3_noun -u3kb_weld(u3_noun a, u3_noun b) -{ - u3_noun c = u3qb_weld(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/b/zing.c b/pkg/urbit/jets/b/zing.c deleted file mode 100644 index 3239e2bb3..000000000 --- a/pkg/urbit/jets/b/zing.c +++ /dev/null @@ -1,45 +0,0 @@ -/* j/2/zing.c -** -*/ -#include "all.h" - -u3_noun -u3qb_zing(u3_noun a) -{ - u3_noun pro; - u3_noun* lit = &pro; - - if ( u3_nul == a ) { - *lit = u3_nul; - } - else { - u3_noun i, t = a; - u3x_cell(t, &i, &t); - - while ( u3_nul != t ) { - u3_noun* hed; - u3_noun* tel; - u3_noun i_i, t_i = i; - - while ( u3_nul != t_i ) { - u3x_cell(t_i, &i_i, &t_i); - - *lit = u3i_defcons(&hed, &tel); - *hed = u3k(i_i); - lit = tel; - } - - u3x_cell(t, &i, &t); - } - - *lit = u3k(i); - } - - return pro; -} - -u3_noun -u3wb_zing(u3_noun cor) -{ - return u3qb_zing(u3x_at(u3x_sam, cor)); -} diff --git a/pkg/urbit/jets/c/bex.c b/pkg/urbit/jets/c/bex.c deleted file mode 100644 index baf75e485..000000000 --- a/pkg/urbit/jets/c/bex.c +++ /dev/null @@ -1,35 +0,0 @@ -/* j/3/bex.c -** -*/ -#include "all.h" - -u3_noun -u3qc_bex(u3_atom a) -{ - mpz_t a_mp; - - if ( !_(u3a_is_cat(a)) ) { - return u3m_bail(c3__fail); - } - else { - mpz_init_set_ui(a_mp, 1); - mpz_mul_2exp(a_mp, a_mp, a); - - return u3i_mp(a_mp); - } -} - -u3_noun -u3kc_bex(u3_atom a) -{ - u3_noun b = u3qc_bex(a); - u3z(a); - return b; -} - -u3_noun -u3wc_bex(u3_noun cor) -{ - u3_noun a = u3x_at(u3x_sam, cor); - return u3qc_bex(u3x_atom(a)); -} diff --git a/pkg/urbit/jets/c/c0n.c b/pkg/urbit/jets/c/c0n.c deleted file mode 100644 index 841d2cc2e..000000000 --- a/pkg/urbit/jets/c/c0n.c +++ /dev/null @@ -1,54 +0,0 @@ -/* j/3/con.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_con(u3_atom a, - u3_atom b) - { - c3_w lna_w = u3r_met(5, a); - c3_w lnb_w = u3r_met(5, b); - - if ( (lna_w == 0) && (lnb_w == 0) ) { - return 0; - } - else { - c3_w len_w = c3_max(lna_w, lnb_w); - c3_w i_w; - u3i_slab sab_u; - u3i_slab_from(&sab_u, a, 5, len_w); - - for ( i_w = 0; i_w < lnb_w; i_w++ ) { - sab_u.buf_w[i_w] |= u3r_word(i_w, b); - } - - return u3i_slab_mint(&sab_u); - } - } - u3_noun - u3wc_con(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_con(a, b); - } - } - -u3_noun -u3kc_con(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qc_con(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/c/can.c b/pkg/urbit/jets/c/can.c deleted file mode 100644 index 7ee8aef45..000000000 --- a/pkg/urbit/jets/c/can.c +++ /dev/null @@ -1,85 +0,0 @@ -/* j/3/can.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_can(u3_atom a, - u3_noun b) - { - if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return u3m_bail(c3__fail); - } - else { - c3_g a_g = a; - c3_w tot_w = 0; - u3i_slab sab_u; - - /* Measure and validate the slab required. - */ - { - u3_noun cab = b; - - while ( 1 ) { - u3_noun i_cab, pi_cab, qi_cab; - - if ( 0 == cab ) { - break; - } - if ( c3n == u3du(cab) ) return u3m_bail(c3__fail); - i_cab = u3h(cab); - if ( c3n == u3du(i_cab) ) return u3m_bail(c3__fail); - pi_cab = u3h(i_cab); - qi_cab = u3t(i_cab); - if ( c3n == u3a_is_cat(pi_cab) ) return u3m_bail(c3__fail); - if ( c3n == u3ud(qi_cab) ) return u3m_bail(c3__fail); - if ( (tot_w + pi_cab) < tot_w ) return u3m_bail(c3__fail); - - tot_w += pi_cab; - cab = u3t(cab); - } - - if ( 0 == tot_w ) { - return 0; - } - - u3i_slab_init(&sab_u, a_g, tot_w); - } - - /* Chop the list atoms in. - */ - { - u3_noun cab = b; - c3_w pos_w = 0; - - while ( 0 != cab ) { - u3_noun i_cab = u3h(cab); - u3_atom pi_cab = u3h(i_cab); - u3_atom qi_cab = u3t(i_cab); - - u3r_chop(a_g, 0, pi_cab, pos_w, sab_u.buf_w, qi_cab); - pos_w += pi_cab; - cab = u3t(cab); - } - } - - return u3i_slab_mint(&sab_u); - } - } - u3_noun - u3wc_can(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__fail); - } else { - return u3qc_can(a, b); - } - } - diff --git a/pkg/urbit/jets/c/cap.c b/pkg/urbit/jets/c/cap.c deleted file mode 100644 index fdda353da..000000000 --- a/pkg/urbit/jets/c/cap.c +++ /dev/null @@ -1,36 +0,0 @@ -/* j/3/cap.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_cap(u3_atom a) - { - c3_w met_w = u3r_met(0, a); - - if ( met_w < 2 ) { - return u3m_bail(c3__exit); - } - else if ( (1 == u3r_bit((met_w - 2), a)) ) { - return 3; - } else { - return 2; - } - } - u3_noun - u3wc_cap(u3_noun cor) - { - u3_noun a; - - if ( (u3_none == (a = u3r_at(u3x_sam, cor))) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_cap(a); - } - } - diff --git a/pkg/urbit/jets/c/cat.c b/pkg/urbit/jets/c/cat.c deleted file mode 100644 index 2648c2303..000000000 --- a/pkg/urbit/jets/c/cat.c +++ /dev/null @@ -1,54 +0,0 @@ -/* j/3/cat.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_cat(u3_atom a, - u3_atom b, - u3_atom c) - { - if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return u3m_bail(c3__fail); - } - else { - c3_g a_g = a; - c3_w lew_w = u3r_met(a_g, b); - c3_w ler_w = u3r_met(a_g, c); - c3_w all_w = (lew_w + ler_w); - - if ( 0 == all_w ) { - return 0; - } - else { - u3i_slab sab_u; - u3i_slab_from(&sab_u, b, a_g, all_w); - - u3r_chop(a_g, 0, ler_w, lew_w, sab_u.buf_w, c); - - return u3i_slab_mint(&sab_u); - } - } - } - - u3_noun - u3wc_cat(u3_noun cor) - { - u3_noun a, b, c; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, - u3x_sam_6, &b, - u3x_sam_7, &c, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) || - (c3n == u3ud(c)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_cat(a, b, c); - } - } - diff --git a/pkg/urbit/jets/c/cut.c b/pkg/urbit/jets/c/cut.c deleted file mode 100644 index 08b7d55e5..000000000 --- a/pkg/urbit/jets/c/cut.c +++ /dev/null @@ -1,69 +0,0 @@ -/* j/3/cut.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_cut(u3_atom a, - u3_atom b, - u3_atom c, - u3_atom d) - { - if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return u3m_bail(c3__fail); - } - if ( !_(u3a_is_cat(b)) ) { - return 0; - } - if ( !_(u3a_is_cat(c)) ) { - c = 0x7fffffff; - } - - { - c3_g a_g = a; - c3_w b_w = b; - c3_w c_w = c; - c3_w len_w = u3r_met(a_g, d); - - if ( (0 == c_w) || (b_w >= len_w) ) { - return 0; - } - if ( b_w + c_w > len_w ) { - c_w = (len_w - b_w); - } - if ( (b_w == 0) && (c_w == len_w) ) { - return u3k(d); - } - else { - u3i_slab sab_u; - u3i_slab_init(&sab_u, a_g, c_w); - - u3r_chop(a_g, b_w, c_w, 0, sab_u.buf_w, d); - - return u3i_slab_mint(&sab_u); - } - } - } - u3_noun - u3wc_cut(u3_noun cor) - { - u3_noun a, b, c, d; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, - u3x_sam_12, &b, - u3x_sam_13, &c, - u3x_sam_7, &d, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) || - (c3n == u3ud(c)) || - (c3n == u3ud(d)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_cut(a, b, c, d); - } - } - diff --git a/pkg/urbit/jets/c/dis.c b/pkg/urbit/jets/c/dis.c deleted file mode 100644 index c9cd74f34..000000000 --- a/pkg/urbit/jets/c/dis.c +++ /dev/null @@ -1,46 +0,0 @@ -/* j/3/dis.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_dis(u3_atom a, - u3_atom b) - { - c3_w lna_w = u3r_met(5, a); - c3_w lnb_w = u3r_met(5, b); - - if ( (lna_w == 0) && (lnb_w == 0) ) { - return 0; - } - else { - c3_w len_w = c3_max(lna_w, lnb_w); - c3_w i_w; - u3i_slab sab_u; - u3i_slab_from(&sab_u, a, 5, len_w); - - for ( i_w = 0; i_w < len_w; i_w++ ) { - sab_u.buf_w[i_w] &= u3r_word(i_w, b); - } - - return u3i_slab_mint(&sab_u); - } - } - u3_noun - u3wc_dis(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_dis(a, b); - } - } - diff --git a/pkg/urbit/jets/c/dor.c b/pkg/urbit/jets/c/dor.c deleted file mode 100644 index 3f4842c14..000000000 --- a/pkg/urbit/jets/c/dor.c +++ /dev/null @@ -1,49 +0,0 @@ -/* j/3/dor.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_dor(u3_atom a, - u3_atom b) - { - if ( c3y == u3r_sing(a, b) ) { - return c3y; - } - else { - if ( c3y == u3ud(a) ) { - if ( c3y == u3ud(b) ) { - return u3qa_lth(a, b); - } - else { - return c3y; - } - } - else { - if ( c3y == u3ud(b) ) { - return c3n; - } - else { - if ( c3y == u3r_sing(u3h(a), u3h(b)) ) { - return u3qc_dor(u3t(a), u3t(b)); - } - else return u3qc_dor(u3h(a), u3h(b)); - } - } - } - } - u3_noun - u3wc_dor(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qc_dor(a, b); - } - } - diff --git a/pkg/urbit/jets/c/dvr.c b/pkg/urbit/jets/c/dvr.c deleted file mode 100644 index 826631c99..000000000 --- a/pkg/urbit/jets/c/dvr.c +++ /dev/null @@ -1,45 +0,0 @@ -/* j/3/dvr.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_dvr(u3_atom a, - u3_atom b) - { - if ( 0 == b ) { - return u3m_error("divide-by-zero"); - } - else { - if ( _(u3a_is_cat(a)) && _(u3a_is_cat(b)) ) { - return u3nc(a / b, a % b); - } - else { - mpz_t a_mp, b_mp; - - u3r_mp(a_mp, a); - u3r_mp(b_mp, b); - - mpz_tdiv_qr(a_mp, b_mp, a_mp, b_mp); - - return u3nc(u3i_mp(a_mp), u3i_mp(b_mp)); - } - } - } - u3_noun - u3wc_dvr(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_dvr(a, b); - } - } - diff --git a/pkg/urbit/jets/c/end.c b/pkg/urbit/jets/c/end.c deleted file mode 100644 index c63451d8f..000000000 --- a/pkg/urbit/jets/c/end.c +++ /dev/null @@ -1,49 +0,0 @@ -/* j/3/end.c -** -*/ -#include "all.h" - -u3_noun -u3qc_end(u3_atom a, - u3_atom b, - u3_atom c) -{ - if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return u3m_bail(c3__fail); - } - else if ( !_(u3a_is_cat(b)) ) { - return u3k(c); - } - else { - c3_g a_g = a; - c3_w b_w = b; - c3_w len_w = u3r_met(a_g, c); - - if ( 0 == b_w ) { - return 0; - } - else if ( b_w >= len_w ) { - return u3k(c); - } - else { - u3i_slab sab_u; - u3i_slab_init(&sab_u, a_g, b_w); - - u3r_chop(a_g, 0, b_w, 0, sab_u.buf_w, c); - - return u3i_slab_mint(&sab_u); - } - } -} - -u3_noun -u3wc_end(u3_noun cor) -{ - u3_atom bloq, step; - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, - u3x_sam_3, &b, 0); - u3x_bite(a, &bloq, &step); - - return u3qc_end(bloq, step, u3x_atom(b)); -} diff --git a/pkg/urbit/jets/c/gor.c b/pkg/urbit/jets/c/gor.c deleted file mode 100644 index 8e89b5e8c..000000000 --- a/pkg/urbit/jets/c/gor.c +++ /dev/null @@ -1,32 +0,0 @@ -/* j/3/gor.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_gor(u3_noun a, - u3_noun b) - { - c3_w c_w = u3r_mug(a); - c3_w d_w = u3r_mug(b); - - if ( c_w == d_w ) { - return u3qc_dor(a, b); - } - else return (c_w < d_w) ? c3y : c3n; - } - u3_noun - u3wc_gor(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ) { - return u3m_bail(c3__exit); - } else { - return u3qc_gor(a, b); - } - } - diff --git a/pkg/urbit/jets/c/lsh.c b/pkg/urbit/jets/c/lsh.c deleted file mode 100644 index 7ef4f3635..000000000 --- a/pkg/urbit/jets/c/lsh.c +++ /dev/null @@ -1,60 +0,0 @@ -/* j/3/lsh.c -** -*/ -#include "all.h" - -u3_noun -u3qc_lsh(u3_atom a, - u3_atom b, - u3_atom c) -{ - if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return u3m_bail(c3__fail); - } - else if ( !_(u3a_is_cat(b)) ) { - return u3m_bail(c3__fail); - } - else { - c3_g a_g = a; - c3_w b_w = b; - c3_w len_w = u3r_met(a_g, c); - - if ( 0 == len_w ) { - return 0; - } - else if ( (b_w + len_w) < len_w ) { - return u3m_bail(c3__exit); - } - else { - u3i_slab sab_u; - u3i_slab_init(&sab_u, a_g, (b_w + len_w)); - - u3r_chop(a_g, 0, len_w, b_w, sab_u.buf_w, c); - - return u3i_slab_mint(&sab_u); - } - } -} - -u3_noun -u3wc_lsh(u3_noun cor) -{ - u3_atom bloq, step; - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, - u3x_sam_3, &b, 0); - u3x_bite(a, &bloq, &step); - - return u3qc_lsh(bloq, step, u3x_atom(b)); -} - -u3_noun -u3kc_lsh(u3_noun a, - u3_noun b, - u3_noun c) -{ - u3_noun d = u3qc_lsh(a, b, c); - - u3z(a); u3z(b); u3z(c); - return d; -} diff --git a/pkg/urbit/jets/c/mas.c b/pkg/urbit/jets/c/mas.c deleted file mode 100644 index 81ee41407..000000000 --- a/pkg/urbit/jets/c/mas.c +++ /dev/null @@ -1,45 +0,0 @@ -/* j/3/mas.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_mas(u3_atom a) - { - c3_w b_w; - u3_atom c, d, e, f; - - b_w = u3r_met(0, a); - if ( b_w < 2 ) { - return u3m_bail(c3__exit); - } - else { - c = u3qc_bex((b_w - 1)); - d = u3qc_bex((b_w - 2)); - e = u3qa_sub(a, c); - f = u3qc_con(e, d); - - u3z(c); - u3z(d); - u3z(e); - - return f; - } - } - u3_noun - u3wc_mas(u3_noun cor) - { - u3_noun a; - - if ( (u3_none == (a = u3r_at(u3x_sam, cor))) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_mas(a); - } - } - diff --git a/pkg/urbit/jets/c/met.c b/pkg/urbit/jets/c/met.c deleted file mode 100644 index aff53da18..000000000 --- a/pkg/urbit/jets/c/met.c +++ /dev/null @@ -1,42 +0,0 @@ -/* j/3/met.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_met(u3_atom a, - u3_atom b) - { - if ( 0 == b ) { - return 0; - } - else if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return 1; - } - else { - c3_w met_w = u3r_met(a, b); - - if ( !_(u3a_is_cat(met_w)) ) { - return u3i_words(1, &met_w); - } - else return met_w; - } - } - u3_noun - u3wc_met(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(b)) || - (c3n == u3ud(a) && 0 != b) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_met(a, b); - } - } - diff --git a/pkg/urbit/jets/c/mix.c b/pkg/urbit/jets/c/mix.c deleted file mode 100644 index ccb008c05..000000000 --- a/pkg/urbit/jets/c/mix.c +++ /dev/null @@ -1,55 +0,0 @@ -/* j/3/mix.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_mix(u3_atom a, - u3_atom b) - { - c3_w lna_w = u3r_met(5, a); - c3_w lnb_w = u3r_met(5, b); - - if ( (lna_w == 0) && (lnb_w == 0) ) { - return 0; - } - else { - c3_w len_w = c3_max(lna_w, lnb_w); - c3_w i_w; - u3i_slab sab_u; - u3i_slab_from(&sab_u, a, 5, len_w); - - // XX use u3r_chop for XOR? - // - for ( i_w = 0; i_w < lnb_w; i_w++ ) { - sab_u.buf_w[i_w] ^= u3r_word(i_w, b); - } - - return u3i_slab_mint(&sab_u); - } - } - u3_noun - u3wc_mix(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_mix(a, b); - } - } - u3_noun - u3kc_mix(u3_atom a, - u3_atom b) - { - u3_noun res = u3qc_mix(a, b); - u3z(a); u3z(b); - return res; - } diff --git a/pkg/urbit/jets/c/mor.c b/pkg/urbit/jets/c/mor.c deleted file mode 100644 index 1c0fec930..000000000 --- a/pkg/urbit/jets/c/mor.c +++ /dev/null @@ -1,31 +0,0 @@ -/* j/3/mor.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_mor(u3_atom a, - u3_atom b) - { - c3_w c_w = u3r_mug(u3r_mug(a)); - c3_w d_w = u3r_mug(u3r_mug(b)); - - if ( c_w == d_w ) { - return u3qc_dor(a, b); - } - else return (c_w < d_w) ? c3y : c3n; - } - u3_noun - u3wc_mor(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) ) { - return u3m_bail(c3__exit); - } else { - return u3qc_mor(a, b); - } - } diff --git a/pkg/urbit/jets/c/mug.c b/pkg/urbit/jets/c/mug.c deleted file mode 100644 index 22aceee01..000000000 --- a/pkg/urbit/jets/c/mug.c +++ /dev/null @@ -1,19 +0,0 @@ -/* j/3/mug.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3wc_mug(u3_noun cor) - { - u3_noun sam; - - if ( u3_none == (sam = u3r_at(u3x_sam, cor)) ) { - return u3m_bail(c3__exit); - } else { - return u3r_mug(sam); - } - } diff --git a/pkg/urbit/jets/c/muk.c b/pkg/urbit/jets/c/muk.c deleted file mode 100644 index b20f2b264..000000000 --- a/pkg/urbit/jets/c/muk.c +++ /dev/null @@ -1,76 +0,0 @@ -/* j/c/muk.c -** -*/ -#include "all.h" -#include - -/* functions -*/ -u3_noun -u3qc_muk(u3_atom sed, - u3_atom len, - u3_atom key) -{ - if ( c3n == u3a_is_cat(len) ) { - return u3m_bail(c3__fail); - } - else { - c3_w len_w = (c3_w)len; - c3_w key_w = u3r_met(3, key); - - // NB: this condition is implicit in the pad subtraction - // - if ( key_w > len_w ) { - return u3m_bail(c3__exit); - } - else { - c3_w sed_w = u3r_word(0, sed); - c3_o loc_o = c3n; - c3_y* key_y = 0; - c3_w out_w; - - // if we're hashing more bytes than we have, allocate and copy - // to ensure trailing null bytes - // - if ( len_w > key_w ) { - loc_o = c3y; - key_y = u3a_calloc(sizeof(c3_y), len_w); - u3r_bytes(0, len_w, key_y, key); - } - else if ( len_w > 0 ) { - // XX assumes little-endian - // - key_y = ( c3y == u3a_is_cat(key) ) - ? (c3_y*)&key - : (c3_y*)((u3a_atom*)u3a_to_ptr(key))->buf_w; - } - - MurmurHash3_x86_32(key_y, len_w, sed_w, &out_w); - - if ( c3y == loc_o ) { - u3a_free(key_y); - } - - return u3i_words(1, &out_w); - } - } -} - -u3_noun -u3wc_muk(u3_noun cor) -{ - u3_noun sed, len, key; - u3x_mean(cor, u3x_sam_2, &sed, - u3x_sam_6, &len, - u3x_sam_7, &key, 0); - - if ( (c3n == u3ud(sed)) - || (c3n == u3ud(len)) - || (c3n == u3ud(key)) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qc_muk(sed, len, key); - } -} diff --git a/pkg/urbit/jets/c/peg.c b/pkg/urbit/jets/c/peg.c deleted file mode 100644 index f55696a26..000000000 --- a/pkg/urbit/jets/c/peg.c +++ /dev/null @@ -1,50 +0,0 @@ -/* j/3/peg.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_peg(u3_atom a, - u3_atom b) - { - if ( 1 == b ) { - return u3k(a); - } - - u3_atom c, d, e, f, g, h; - - c = u3r_met(0, b); - d = u3qa_dec(c); - e = u3qc_lsh(0, d, 1); - f = u3qa_sub(b, e); - g = u3qc_lsh(0, d, a); - h = u3qa_add(f, g); - - u3z(c); - u3z(d); - u3z(e); - u3z(f); - u3z(g); - - return h; - } - u3_noun - u3wc_peg(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (0 == a) || - (0 == b) || - (c3n == u3ud(b)) || - (c3n == u3ud(a) && b != 1) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_peg(a, b); - } - } - diff --git a/pkg/urbit/jets/c/po.c b/pkg/urbit/jets/c/po.c deleted file mode 100644 index c907ad48a..000000000 --- a/pkg/urbit/jets/c/po.c +++ /dev/null @@ -1,1425 +0,0 @@ -/* j/3/po.c -** -*/ -#include "all.h" - -u3_noun -u3_po_find_prefix(c3_y one, c3_y two, c3_y three) { - switch (one) { - case 'b': switch (two) { - case 'a': switch (three) { - case 'c': return u3nc(0, 238); - case 'l': return u3nc(0, 107); - case 'n': return u3nc(0, 92); - case 'r': return u3nc(0, 183); - case 't': return u3nc(0, 172); - default: return 0; - } - case 'i': switch (three) { - case 'c': return u3nc(0, 56); - case 'd': return u3nc(0, 106); - case 'l': return u3nc(0, 144); - case 'n': return u3nc(0, 2); - case 's': return u3nc(0, 60); - case 't': return u3nc(0, 182); - default: return 0; - } - case 'o': switch (three) { - case 'l': return u3nc(0, 45); - case 'n': return u3nc(0, 244); - case 'r': return u3nc(0, 188); - case 's': return u3nc(0, 171); - case 't': return u3nc(0, 98); - default: return 0; - } - default: return 0; - } - case 'd': switch (two) { - case 'a': switch (three) { - case 'b': return u3nc(0, 181); - case 'c': return u3nc(0, 117); - case 'l': return u3nc(0, 37); - case 'n': return u3nc(0, 234); - case 'p': return u3nc(0, 66); - case 'r': return u3nc(0, 23); - case 's': return u3nc(0, 61); - case 't': return u3nc(0, 215); - case 'v': return u3nc(0, 105); - default: return 0; - } - case 'i': switch (three) { - case 'b': return u3nc(0, 179); - case 'f': return u3nc(0, 57); - case 'g': return u3nc(0, 193); - case 'l': return u3nc(0, 49); - case 'n': return u3nc(0, 217); - case 'r': return u3nc(0, 11); - case 's': return u3nc(0, 129); - case 'v': return u3nc(0, 116); - default: return 0; - } - case 'o': switch (three) { - case 'c': return u3nc(0, 146); - case 'l': return u3nc(0, 102); - case 'n': return u3nc(0, 233); - case 'p': return u3nc(0, 18); - case 'r': return u3nc(0, 24); - case 's': return u3nc(0, 187); - case 't': return u3nc(0, 47); - case 'v': return u3nc(0, 236); - case 'z': return u3nc(0, 0); - default: return 0; - } - default: return 0; - } - case 'f': switch (two) { - case 'a': switch (three) { - case 'b': return u3nc(0, 120); - case 'd': return u3nc(0, 206); - case 'l': return u3nc(0, 152); - case 'm': return u3nc(0, 214); - case 'n': return u3nc(0, 158); - case 's': return u3nc(0, 195); - default: return 0; - } - case 'i': switch (three) { - case 'd': return u3nc(0, 8); - case 'g': return u3nc(0, 138); - case 'l': return u3nc(0, 194); - case 'n': return u3nc(0, 90); - case 'p': return u3nc(0, 255); - case 'r': return u3nc(0, 169); - case 't': return u3nc(0, 226); - default: return 0; - } - case 'o': switch (three) { - case 'd': return u3nc(0, 247); - case 'g': return u3nc(0, 20); - case 'l': return u3nc(0, 27); - case 'n': return u3nc(0, 91); - case 'p': return u3nc(0, 213); - case 'r': return u3nc(0, 50); - case 's': return u3nc(0, 46); - case 't': return u3nc(0, 221); - default: return 0; - } - default: return 0; - } - case 'h': switch (two) { - case 'a': switch (three) { - case 'b': return u3nc(0, 209); - case 'c': return u3nc(0, 174); - case 'd': return u3nc(0, 145); - case 'l': return u3nc(0, 203); - case 'n': return u3nc(0, 41); - case 'p': return u3nc(0, 156); - case 'r': return u3nc(0, 198); - case 's': return u3nc(0, 170); - case 't': return u3nc(0, 218); - case 'v': return u3nc(0, 176); - default: return 0; - } - case 'i': switch (three) { - case 'd': return u3nc(0, 7); - case 'l': return u3nc(0, 190); - case 'n': return u3nc(0, 200); - default: return 0; - } - case 'o': switch (three) { - case 'b': return u3nc(0, 197); - case 'c': return u3nc(0, 223); - case 'd': return u3nc(0, 26); - case 'l': return u3nc(0, 32); - case 'p': return u3nc(0, 22); - case 's': return u3nc(0, 180); - default: return 0; - } - default: return 0; - } - case 'l': switch (two) { - case 'a': switch (three) { - case 'b': return u3nc(0, 161); - case 'c': return u3nc(0, 34); - case 'd': return u3nc(0, 235); - case 'g': return u3nc(0, 205); - case 'n': return u3nc(0, 232); - case 'p': return u3nc(0, 240); - case 'r': return u3nc(0, 225); - case 's': return u3nc(0, 128); - case 't': return u3nc(0, 134); - case 'v': return u3nc(0, 252); - default: return 0; - } - case 'i': switch (three) { - case 'b': return u3nc(0, 39); - case 'd': return u3nc(0, 21); - case 'g': return u3nc(0, 111); - case 'n': return u3nc(0, 178); - case 's': return u3nc(0, 9); - case 't': return u3nc(0, 5); - case 'v': return u3nc(0, 36); - default: return 0; - } - case 'o': switch (three) { - case 'c': return u3nc(0, 69); - case 'd': return u3nc(0, 186); - case 'm': return u3nc(0, 166); - case 'n': return u3nc(0, 135); - case 'p': return u3nc(0, 63); - case 'r': return u3nc(0, 25); - case 's': return u3nc(0, 48); - default: return 0; - } - default: return 0; - } - case 'm': switch (two) { - case 'a': switch (three) { - case 'c': return u3nc(0, 191); - case 'g': return u3nc(0, 103); - case 'l': return u3nc(0, 110); - case 'p': return u3nc(0, 130); - case 'r': return u3nc(0, 1); - case 's': return u3nc(0, 202); - case 't': return u3nc(0, 253); - default: return 0; - } - case 'i': switch (three) { - case 'c': return u3nc(0, 157); - case 'd': return u3nc(0, 62); - case 'g': return u3nc(0, 199); - case 'l': return u3nc(0, 212); - case 'n': return u3nc(0, 79); - case 'p': return u3nc(0, 254); - case 'r': return u3nc(0, 31); - case 's': return u3nc(0, 126); - case 't': return u3nc(0, 196); - default: return 0; - } - case 'o': switch (three) { - case 'c': return u3nc(0, 148); - case 'd': return u3nc(0, 19); - case 'g': return u3nc(0, 162); - case 'l': return u3nc(0, 67); - case 'n': return u3nc(0, 122); - case 'p': return u3nc(0, 208); - case 'r': return u3nc(0, 93); - case 's': return u3nc(0, 231); - case 't': return u3nc(0, 82); - default: return 0; - } - default: return 0; - } - case 'n': switch (two) { - case 'a': switch (three) { - case 'c': return u3nc(0, 219); - case 'l': return u3nc(0, 230); - case 'm': return u3nc(0, 243); - case 'p': return u3nc(0, 87); - case 'r': return u3nc(0, 65); - case 't': return u3nc(0, 77); - case 'v': return u3nc(0, 137); - default: return 0; - } - case 'i': switch (three) { - case 'b': return u3nc(0, 140); - case 'd': return u3nc(0, 72); - case 'l': return u3nc(0, 210); - case 'm': return u3nc(0, 224); - case 's': return u3nc(0, 124); - default: return 0; - } - case 'o': switch (three) { - case 'c': return u3nc(0, 250); - case 'd': return u3nc(0, 136); - case 'l': return u3nc(0, 216); - case 'm': return u3nc(0, 139); - case 'p': return u3nc(0, 88); - case 'r': return u3nc(0, 97); - case 's': return u3nc(0, 211); - case 'v': return u3nc(0, 70); - default: return 0; - } - default: return 0; - } - case 'p': switch (two) { - case 'a': switch (three) { - case 'c': return u3nc(0, 149); - case 'd': return u3nc(0, 114); - case 'g': return u3nc(0, 141); - case 'l': return u3nc(0, 127); - case 'n': return u3nc(0, 78); - case 'r': return u3nc(0, 185); - case 's': return u3nc(0, 33); - case 't': return u3nc(0, 159); - default: return 0; - } - case 'i': switch (three) { - case 'c': return u3nc(0, 104); - case 'd': return u3nc(0, 43); - case 'l': return u3nc(0, 51); - case 'n': return u3nc(0, 165); - case 't': return u3nc(0, 242); - default: return 0; - } - case 'o': switch (three) { - case 'c': return u3nc(0, 173); - case 'd': return u3nc(0, 81); - case 'l': return u3nc(0, 239); - case 'n': return u3nc(0, 248); - case 's': return u3nc(0, 86); - default: return 0; - } - default: return 0; - } - case 'r': switch (two) { - case 'a': switch (three) { - case 'b': return u3nc(0, 131); - case 'c': return u3nc(0, 184); - case 'd': return u3nc(0, 201); - case 'g': return u3nc(0, 204); - case 'l': return u3nc(0, 143); - case 'm': return u3nc(0, 52); - case 'n': return u3nc(0, 123); - case 'p': return u3nc(0, 228); - case 'v': return u3nc(0, 150); - default: return 0; - } - case 'i': switch (three) { - case 'b': return u3nc(0, 222); - case 'c': return u3nc(0, 167); - case 'd': return u3nc(0, 147); - case 'g': return u3nc(0, 16); - case 'l': return u3nc(0, 64); - case 'n': return u3nc(0, 28); - case 'p': return u3nc(0, 151); - case 's': return u3nc(0, 220); - case 't': return u3nc(0, 80); - case 'v': return u3nc(0, 237); - default: return 0; - } - case 'o': switch (three) { - case 'c': return u3nc(0, 58); - case 'l': return u3nc(0, 133); - case 'n': return u3nc(0, 96); - case 'p': return u3nc(0, 75); - case 's': return u3nc(0, 245); - case 'v': return u3nc(0, 35); - default: return 0; - } - default: return 0; - } - case 's': switch (two) { - case 'a': switch (three) { - case 'b': return u3nc(0, 13); - case 'l': return u3nc(0, 115); - case 'm': return u3nc(0, 4); - case 'n': return u3nc(0, 68); - case 'p': return u3nc(0, 177); - case 'r': return u3nc(0, 229); - case 't': return u3nc(0, 38); - case 'v': return u3nc(0, 85); - default: return 0; - } - case 'i': switch (three) { - case 'b': return u3nc(0, 15); - case 'c': return u3nc(0, 74); - case 'd': return u3nc(0, 119); - case 'g': return u3nc(0, 6); - case 'l': return u3nc(0, 30); - case 'm': return u3nc(0, 163); - case 'p': return u3nc(0, 95); - case 't': return u3nc(0, 71); - case 'v': return u3nc(0, 112); - default: return 0; - } - case 'o': switch (three) { - case 'c': return u3nc(0, 100); - case 'g': return u3nc(0, 10); - case 'l': return u3nc(0, 17); - case 'm': return u3nc(0, 89); - case 'n': return u3nc(0, 164); - case 'p': return u3nc(0, 142); - case 'r': return u3nc(0, 251); - case 'v': return u3nc(0, 249); - default: return 0; - } - default: return 0; - } - case 't': switch (two) { - case 'a': switch (three) { - case 'b': return u3nc(0, 40); - case 'c': return u3nc(0, 160); - case 'd': return u3nc(0, 55); - case 'g': return u3nc(0, 113); - case 'l': return u3nc(0, 241); - case 'm': return u3nc(0, 83); - case 'n': return u3nc(0, 118); - case 'p': return u3nc(0, 168); - case 'r': return u3nc(0, 121); - case 's': return u3nc(0, 109); - default: return 0; - } - case 'i': switch (three) { - case 'c': return u3nc(0, 42); - case 'd': return u3nc(0, 175); - case 'l': return u3nc(0, 154); - case 'm': return u3nc(0, 108); - case 'n': return u3nc(0, 155); - case 'p': return u3nc(0, 73); - case 'r': return u3nc(0, 53); - default: return 0; - } - case 'o': switch (three) { - case 'b': return u3nc(0, 132); - case 'c': return u3nc(0, 189); - case 'd': return u3nc(0, 153); - case 'g': return u3nc(0, 29); - case 'l': return u3nc(0, 84); - case 'm': return u3nc(0, 192); - case 'n': return u3nc(0, 246); - case 'p': return u3nc(0, 207); - case 'r': return u3nc(0, 44); - default: return 0; - } - default: return 0; - } - case 'w': switch (two) { - case 'a': switch (three) { - case 'c': return u3nc(0, 12); - case 'l': return u3nc(0, 227); - case 'n': return u3nc(0, 3); - case 't': return u3nc(0, 101); - default: return 0; - } - case 'i': switch (three) { - case 'c': return u3nc(0, 99); - case 'd': return u3nc(0, 59); - case 'n': return u3nc(0, 54); - case 's': return u3nc(0, 14); - case 't': return u3nc(0, 76); - default: return 0; - } - case 'o': switch (three) { - case 'l': return u3nc(0, 125); - case 'r': return u3nc(0, 94); - default: return 0; - } - default: return 0; - } - default: return 0; - } -} - -void -u3_po_to_prefix(u3_noun id, c3_y* a, c3_y* b, c3_y* c) -{ - switch (id) { - case 0: *a = 'd'; *b = 'o'; *c = 'z'; break; - case 1: *a = 'm'; *b = 'a'; *c = 'r'; break; - case 2: *a = 'b'; *b = 'i'; *c = 'n'; break; - case 3: *a = 'w'; *b = 'a'; *c = 'n'; break; - case 4: *a = 's'; *b = 'a'; *c = 'm'; break; - case 5: *a = 'l'; *b = 'i'; *c = 't'; break; - case 6: *a = 's'; *b = 'i'; *c = 'g'; break; - case 7: *a = 'h'; *b = 'i'; *c = 'd'; break; - case 8: *a = 'f'; *b = 'i'; *c = 'd'; break; - case 9: *a = 'l'; *b = 'i'; *c = 's'; break; - case 10: *a = 's'; *b = 'o'; *c = 'g'; break; - case 11: *a = 'd'; *b = 'i'; *c = 'r'; break; - case 12: *a = 'w'; *b = 'a'; *c = 'c'; break; - case 13: *a = 's'; *b = 'a'; *c = 'b'; break; - case 14: *a = 'w'; *b = 'i'; *c = 's'; break; - case 15: *a = 's'; *b = 'i'; *c = 'b'; break; - case 16: *a = 'r'; *b = 'i'; *c = 'g'; break; - case 17: *a = 's'; *b = 'o'; *c = 'l'; break; - case 18: *a = 'd'; *b = 'o'; *c = 'p'; break; - case 19: *a = 'm'; *b = 'o'; *c = 'd'; break; - case 20: *a = 'f'; *b = 'o'; *c = 'g'; break; - case 21: *a = 'l'; *b = 'i'; *c = 'd'; break; - case 22: *a = 'h'; *b = 'o'; *c = 'p'; break; - case 23: *a = 'd'; *b = 'a'; *c = 'r'; break; - case 24: *a = 'd'; *b = 'o'; *c = 'r'; break; - case 25: *a = 'l'; *b = 'o'; *c = 'r'; break; - case 26: *a = 'h'; *b = 'o'; *c = 'd'; break; - case 27: *a = 'f'; *b = 'o'; *c = 'l'; break; - case 28: *a = 'r'; *b = 'i'; *c = 'n'; break; - case 29: *a = 't'; *b = 'o'; *c = 'g'; break; - case 30: *a = 's'; *b = 'i'; *c = 'l'; break; - case 31: *a = 'm'; *b = 'i'; *c = 'r'; break; - case 32: *a = 'h'; *b = 'o'; *c = 'l'; break; - case 33: *a = 'p'; *b = 'a'; *c = 's'; break; - case 34: *a = 'l'; *b = 'a'; *c = 'c'; break; - case 35: *a = 'r'; *b = 'o'; *c = 'v'; break; - case 36: *a = 'l'; *b = 'i'; *c = 'v'; break; - case 37: *a = 'd'; *b = 'a'; *c = 'l'; break; - case 38: *a = 's'; *b = 'a'; *c = 't'; break; - case 39: *a = 'l'; *b = 'i'; *c = 'b'; break; - case 40: *a = 't'; *b = 'a'; *c = 'b'; break; - case 41: *a = 'h'; *b = 'a'; *c = 'n'; break; - case 42: *a = 't'; *b = 'i'; *c = 'c'; break; - case 43: *a = 'p'; *b = 'i'; *c = 'd'; break; - case 44: *a = 't'; *b = 'o'; *c = 'r'; break; - case 45: *a = 'b'; *b = 'o'; *c = 'l'; break; - case 46: *a = 'f'; *b = 'o'; *c = 's'; break; - case 47: *a = 'd'; *b = 'o'; *c = 't'; break; - case 48: *a = 'l'; *b = 'o'; *c = 's'; break; - case 49: *a = 'd'; *b = 'i'; *c = 'l'; break; - case 50: *a = 'f'; *b = 'o'; *c = 'r'; break; - case 51: *a = 'p'; *b = 'i'; *c = 'l'; break; - case 52: *a = 'r'; *b = 'a'; *c = 'm'; break; - case 53: *a = 't'; *b = 'i'; *c = 'r'; break; - case 54: *a = 'w'; *b = 'i'; *c = 'n'; break; - case 55: *a = 't'; *b = 'a'; *c = 'd'; break; - case 56: *a = 'b'; *b = 'i'; *c = 'c'; break; - case 57: *a = 'd'; *b = 'i'; *c = 'f'; break; - case 58: *a = 'r'; *b = 'o'; *c = 'c'; break; - case 59: *a = 'w'; *b = 'i'; *c = 'd'; break; - case 60: *a = 'b'; *b = 'i'; *c = 's'; break; - case 61: *a = 'd'; *b = 'a'; *c = 's'; break; - case 62: *a = 'm'; *b = 'i'; *c = 'd'; break; - case 63: *a = 'l'; *b = 'o'; *c = 'p'; break; - case 64: *a = 'r'; *b = 'i'; *c = 'l'; break; - case 65: *a = 'n'; *b = 'a'; *c = 'r'; break; - case 66: *a = 'd'; *b = 'a'; *c = 'p'; break; - case 67: *a = 'm'; *b = 'o'; *c = 'l'; break; - case 68: *a = 's'; *b = 'a'; *c = 'n'; break; - case 69: *a = 'l'; *b = 'o'; *c = 'c'; break; - case 70: *a = 'n'; *b = 'o'; *c = 'v'; break; - case 71: *a = 's'; *b = 'i'; *c = 't'; break; - case 72: *a = 'n'; *b = 'i'; *c = 'd'; break; - case 73: *a = 't'; *b = 'i'; *c = 'p'; break; - case 74: *a = 's'; *b = 'i'; *c = 'c'; break; - case 75: *a = 'r'; *b = 'o'; *c = 'p'; break; - case 76: *a = 'w'; *b = 'i'; *c = 't'; break; - case 77: *a = 'n'; *b = 'a'; *c = 't'; break; - case 78: *a = 'p'; *b = 'a'; *c = 'n'; break; - case 79: *a = 'm'; *b = 'i'; *c = 'n'; break; - case 80: *a = 'r'; *b = 'i'; *c = 't'; break; - case 81: *a = 'p'; *b = 'o'; *c = 'd'; break; - case 82: *a = 'm'; *b = 'o'; *c = 't'; break; - case 83: *a = 't'; *b = 'a'; *c = 'm'; break; - case 84: *a = 't'; *b = 'o'; *c = 'l'; break; - case 85: *a = 's'; *b = 'a'; *c = 'v'; break; - case 86: *a = 'p'; *b = 'o'; *c = 's'; break; - case 87: *a = 'n'; *b = 'a'; *c = 'p'; break; - case 88: *a = 'n'; *b = 'o'; *c = 'p'; break; - case 89: *a = 's'; *b = 'o'; *c = 'm'; break; - case 90: *a = 'f'; *b = 'i'; *c = 'n'; break; - case 91: *a = 'f'; *b = 'o'; *c = 'n'; break; - case 92: *a = 'b'; *b = 'a'; *c = 'n'; break; - case 93: *a = 'm'; *b = 'o'; *c = 'r'; break; - case 94: *a = 'w'; *b = 'o'; *c = 'r'; break; - case 95: *a = 's'; *b = 'i'; *c = 'p'; break; - case 96: *a = 'r'; *b = 'o'; *c = 'n'; break; - case 97: *a = 'n'; *b = 'o'; *c = 'r'; break; - case 98: *a = 'b'; *b = 'o'; *c = 't'; break; - case 99: *a = 'w'; *b = 'i'; *c = 'c'; break; - case 100: *a = 's'; *b = 'o'; *c = 'c'; break; - case 101: *a = 'w'; *b = 'a'; *c = 't'; break; - case 102: *a = 'd'; *b = 'o'; *c = 'l'; break; - case 103: *a = 'm'; *b = 'a'; *c = 'g'; break; - case 104: *a = 'p'; *b = 'i'; *c = 'c'; break; - case 105: *a = 'd'; *b = 'a'; *c = 'v'; break; - case 106: *a = 'b'; *b = 'i'; *c = 'd'; break; - case 107: *a = 'b'; *b = 'a'; *c = 'l'; break; - case 108: *a = 't'; *b = 'i'; *c = 'm'; break; - case 109: *a = 't'; *b = 'a'; *c = 's'; break; - case 110: *a = 'm'; *b = 'a'; *c = 'l'; break; - case 111: *a = 'l'; *b = 'i'; *c = 'g'; break; - case 112: *a = 's'; *b = 'i'; *c = 'v'; break; - case 113: *a = 't'; *b = 'a'; *c = 'g'; break; - case 114: *a = 'p'; *b = 'a'; *c = 'd'; break; - case 115: *a = 's'; *b = 'a'; *c = 'l'; break; - case 116: *a = 'd'; *b = 'i'; *c = 'v'; break; - case 117: *a = 'd'; *b = 'a'; *c = 'c'; break; - case 118: *a = 't'; *b = 'a'; *c = 'n'; break; - case 119: *a = 's'; *b = 'i'; *c = 'd'; break; - case 120: *a = 'f'; *b = 'a'; *c = 'b'; break; - case 121: *a = 't'; *b = 'a'; *c = 'r'; break; - case 122: *a = 'm'; *b = 'o'; *c = 'n'; break; - case 123: *a = 'r'; *b = 'a'; *c = 'n'; break; - case 124: *a = 'n'; *b = 'i'; *c = 's'; break; - case 125: *a = 'w'; *b = 'o'; *c = 'l'; break; - case 126: *a = 'm'; *b = 'i'; *c = 's'; break; - case 127: *a = 'p'; *b = 'a'; *c = 'l'; break; - case 128: *a = 'l'; *b = 'a'; *c = 's'; break; - case 129: *a = 'd'; *b = 'i'; *c = 's'; break; - case 130: *a = 'm'; *b = 'a'; *c = 'p'; break; - case 131: *a = 'r'; *b = 'a'; *c = 'b'; break; - case 132: *a = 't'; *b = 'o'; *c = 'b'; break; - case 133: *a = 'r'; *b = 'o'; *c = 'l'; break; - case 134: *a = 'l'; *b = 'a'; *c = 't'; break; - case 135: *a = 'l'; *b = 'o'; *c = 'n'; break; - case 136: *a = 'n'; *b = 'o'; *c = 'd'; break; - case 137: *a = 'n'; *b = 'a'; *c = 'v'; break; - case 138: *a = 'f'; *b = 'i'; *c = 'g'; break; - case 139: *a = 'n'; *b = 'o'; *c = 'm'; break; - case 140: *a = 'n'; *b = 'i'; *c = 'b'; break; - case 141: *a = 'p'; *b = 'a'; *c = 'g'; break; - case 142: *a = 's'; *b = 'o'; *c = 'p'; break; - case 143: *a = 'r'; *b = 'a'; *c = 'l'; break; - case 144: *a = 'b'; *b = 'i'; *c = 'l'; break; - case 145: *a = 'h'; *b = 'a'; *c = 'd'; break; - case 146: *a = 'd'; *b = 'o'; *c = 'c'; break; - case 147: *a = 'r'; *b = 'i'; *c = 'd'; break; - case 148: *a = 'm'; *b = 'o'; *c = 'c'; break; - case 149: *a = 'p'; *b = 'a'; *c = 'c'; break; - case 150: *a = 'r'; *b = 'a'; *c = 'v'; break; - case 151: *a = 'r'; *b = 'i'; *c = 'p'; break; - case 152: *a = 'f'; *b = 'a'; *c = 'l'; break; - case 153: *a = 't'; *b = 'o'; *c = 'd'; break; - case 154: *a = 't'; *b = 'i'; *c = 'l'; break; - case 155: *a = 't'; *b = 'i'; *c = 'n'; break; - case 156: *a = 'h'; *b = 'a'; *c = 'p'; break; - case 157: *a = 'm'; *b = 'i'; *c = 'c'; break; - case 158: *a = 'f'; *b = 'a'; *c = 'n'; break; - case 159: *a = 'p'; *b = 'a'; *c = 't'; break; - case 160: *a = 't'; *b = 'a'; *c = 'c'; break; - case 161: *a = 'l'; *b = 'a'; *c = 'b'; break; - case 162: *a = 'm'; *b = 'o'; *c = 'g'; break; - case 163: *a = 's'; *b = 'i'; *c = 'm'; break; - case 164: *a = 's'; *b = 'o'; *c = 'n'; break; - case 165: *a = 'p'; *b = 'i'; *c = 'n'; break; - case 166: *a = 'l'; *b = 'o'; *c = 'm'; break; - case 167: *a = 'r'; *b = 'i'; *c = 'c'; break; - case 168: *a = 't'; *b = 'a'; *c = 'p'; break; - case 169: *a = 'f'; *b = 'i'; *c = 'r'; break; - case 170: *a = 'h'; *b = 'a'; *c = 's'; break; - case 171: *a = 'b'; *b = 'o'; *c = 's'; break; - case 172: *a = 'b'; *b = 'a'; *c = 't'; break; - case 173: *a = 'p'; *b = 'o'; *c = 'c'; break; - case 174: *a = 'h'; *b = 'a'; *c = 'c'; break; - case 175: *a = 't'; *b = 'i'; *c = 'd'; break; - case 176: *a = 'h'; *b = 'a'; *c = 'v'; break; - case 177: *a = 's'; *b = 'a'; *c = 'p'; break; - case 178: *a = 'l'; *b = 'i'; *c = 'n'; break; - case 179: *a = 'd'; *b = 'i'; *c = 'b'; break; - case 180: *a = 'h'; *b = 'o'; *c = 's'; break; - case 181: *a = 'd'; *b = 'a'; *c = 'b'; break; - case 182: *a = 'b'; *b = 'i'; *c = 't'; break; - case 183: *a = 'b'; *b = 'a'; *c = 'r'; break; - case 184: *a = 'r'; *b = 'a'; *c = 'c'; break; - case 185: *a = 'p'; *b = 'a'; *c = 'r'; break; - case 186: *a = 'l'; *b = 'o'; *c = 'd'; break; - case 187: *a = 'd'; *b = 'o'; *c = 's'; break; - case 188: *a = 'b'; *b = 'o'; *c = 'r'; break; - case 189: *a = 't'; *b = 'o'; *c = 'c'; break; - case 190: *a = 'h'; *b = 'i'; *c = 'l'; break; - case 191: *a = 'm'; *b = 'a'; *c = 'c'; break; - case 192: *a = 't'; *b = 'o'; *c = 'm'; break; - case 193: *a = 'd'; *b = 'i'; *c = 'g'; break; - case 194: *a = 'f'; *b = 'i'; *c = 'l'; break; - case 195: *a = 'f'; *b = 'a'; *c = 's'; break; - case 196: *a = 'm'; *b = 'i'; *c = 't'; break; - case 197: *a = 'h'; *b = 'o'; *c = 'b'; break; - case 198: *a = 'h'; *b = 'a'; *c = 'r'; break; - case 199: *a = 'm'; *b = 'i'; *c = 'g'; break; - case 200: *a = 'h'; *b = 'i'; *c = 'n'; break; - case 201: *a = 'r'; *b = 'a'; *c = 'd'; break; - case 202: *a = 'm'; *b = 'a'; *c = 's'; break; - case 203: *a = 'h'; *b = 'a'; *c = 'l'; break; - case 204: *a = 'r'; *b = 'a'; *c = 'g'; break; - case 205: *a = 'l'; *b = 'a'; *c = 'g'; break; - case 206: *a = 'f'; *b = 'a'; *c = 'd'; break; - case 207: *a = 't'; *b = 'o'; *c = 'p'; break; - case 208: *a = 'm'; *b = 'o'; *c = 'p'; break; - case 209: *a = 'h'; *b = 'a'; *c = 'b'; break; - case 210: *a = 'n'; *b = 'i'; *c = 'l'; break; - case 211: *a = 'n'; *b = 'o'; *c = 's'; break; - case 212: *a = 'm'; *b = 'i'; *c = 'l'; break; - case 213: *a = 'f'; *b = 'o'; *c = 'p'; break; - case 214: *a = 'f'; *b = 'a'; *c = 'm'; break; - case 215: *a = 'd'; *b = 'a'; *c = 't'; break; - case 216: *a = 'n'; *b = 'o'; *c = 'l'; break; - case 217: *a = 'd'; *b = 'i'; *c = 'n'; break; - case 218: *a = 'h'; *b = 'a'; *c = 't'; break; - case 219: *a = 'n'; *b = 'a'; *c = 'c'; break; - case 220: *a = 'r'; *b = 'i'; *c = 's'; break; - case 221: *a = 'f'; *b = 'o'; *c = 't'; break; - case 222: *a = 'r'; *b = 'i'; *c = 'b'; break; - case 223: *a = 'h'; *b = 'o'; *c = 'c'; break; - case 224: *a = 'n'; *b = 'i'; *c = 'm'; break; - case 225: *a = 'l'; *b = 'a'; *c = 'r'; break; - case 226: *a = 'f'; *b = 'i'; *c = 't'; break; - case 227: *a = 'w'; *b = 'a'; *c = 'l'; break; - case 228: *a = 'r'; *b = 'a'; *c = 'p'; break; - case 229: *a = 's'; *b = 'a'; *c = 'r'; break; - case 230: *a = 'n'; *b = 'a'; *c = 'l'; break; - case 231: *a = 'm'; *b = 'o'; *c = 's'; break; - case 232: *a = 'l'; *b = 'a'; *c = 'n'; break; - case 233: *a = 'd'; *b = 'o'; *c = 'n'; break; - case 234: *a = 'd'; *b = 'a'; *c = 'n'; break; - case 235: *a = 'l'; *b = 'a'; *c = 'd'; break; - case 236: *a = 'd'; *b = 'o'; *c = 'v'; break; - case 237: *a = 'r'; *b = 'i'; *c = 'v'; break; - case 238: *a = 'b'; *b = 'a'; *c = 'c'; break; - case 239: *a = 'p'; *b = 'o'; *c = 'l'; break; - case 240: *a = 'l'; *b = 'a'; *c = 'p'; break; - case 241: *a = 't'; *b = 'a'; *c = 'l'; break; - case 242: *a = 'p'; *b = 'i'; *c = 't'; break; - case 243: *a = 'n'; *b = 'a'; *c = 'm'; break; - case 244: *a = 'b'; *b = 'o'; *c = 'n'; break; - case 245: *a = 'r'; *b = 'o'; *c = 's'; break; - case 246: *a = 't'; *b = 'o'; *c = 'n'; break; - case 247: *a = 'f'; *b = 'o'; *c = 'd'; break; - case 248: *a = 'p'; *b = 'o'; *c = 'n'; break; - case 249: *a = 's'; *b = 'o'; *c = 'v'; break; - case 250: *a = 'n'; *b = 'o'; *c = 'c'; break; - case 251: *a = 's'; *b = 'o'; *c = 'r'; break; - case 252: *a = 'l'; *b = 'a'; *c = 'v'; break; - case 253: *a = 'm'; *b = 'a'; *c = 't'; break; - case 254: *a = 'm'; *b = 'i'; *c = 'p'; break; - case 255: *a = 'f'; *b = 'i'; *c = 'p'; break; - default: u3m_bail(c3__exit); - } -} - -u3_noun -u3_po_find_suffix(c3_y one, c3_y two, c3_y three) { - switch (one) { - case 'b': switch (two) { - case 'e': switch (three) { - case 'c': return u3nc(0, 238); - case 'l': return u3nc(0, 107); - case 'n': return u3nc(0, 92); - case 'p': return u3nc(0, 183); - case 'r': return u3nc(0, 172); - case 's': return u3nc(0, 56); - case 't': return u3nc(0, 106); - case 'x': return u3nc(0, 144); - default: return 0; - } - case 'u': switch (three) { - case 'd': return u3nc(0, 2); - case 'r': return u3nc(0, 60); - case 's': return u3nc(0, 182); - default: return 0; - } - case 'y': switch (three) { - case 'l': return u3nc(0, 176); - case 'n': return u3nc(0, 45); - case 'r': return u3nc(0, 244); - case 't': return u3nc(0, 188); - default: return 0; - } - default: return 0; - } - case 'd': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 171); - case 'c': return u3nc(0, 98); - case 'f': return u3nc(0, 181); - case 'g': return u3nc(0, 117); - case 'l': return u3nc(0, 37); - case 'm': return u3nc(0, 234); - case 'n': return u3nc(0, 66); - case 'p': return u3nc(0, 23); - case 'r': return u3nc(0, 61); - case 's': return u3nc(0, 215); - case 't': return u3nc(0, 105); - case 'v': return u3nc(0, 179); - case 'x': return u3nc(0, 57); - default: return 0; - } - case 'u': switch (three) { - case 'c': return u3nc(0, 193); - case 'l': return u3nc(0, 49); - case 'n': return u3nc(0, 217); - case 'r': return u3nc(0, 11); - case 's': return u3nc(0, 129); - case 't': return u3nc(0, 116); - case 'x': return u3nc(0, 146); - default: return 0; - } - case 'y': switch (three) { - case 'l': return u3nc(0, 102); - case 'n': return u3nc(0, 233); - case 'r': return u3nc(0, 18); - case 's': return u3nc(0, 24); - case 't': return u3nc(0, 187); - default: return 0; - } - default: return 0; - } - case 'f': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 47); - case 'd': return u3nc(0, 236); - case 'l': return u3nc(0, 120); - case 'n': return u3nc(0, 206); - case 'p': return u3nc(0, 152); - case 'r': return u3nc(0, 158); - case 's': return u3nc(0, 255); - case 't': return u3nc(0, 214); - case 'x': return u3nc(0, 195); - default: return 0; - } - case 'u': switch (three) { - case 'l': return u3nc(0, 8); - case 'n': return u3nc(0, 138); - case 'r': return u3nc(0, 194); - case 's': return u3nc(0, 90); - default: return 0; - } - case 'y': switch (three) { - case 'l': return u3nc(0, 169); - case 'n': return u3nc(0, 226); - case 'r': return u3nc(0, 247); - default: return 0; - } - default: return 0; - } - case 'h': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 20); - case 'c': return u3nc(0, 27); - case 'p': return u3nc(0, 91); - case 's': return u3nc(0, 213); - case 't': return u3nc(0, 50); - case 'x': return u3nc(0, 46); - default: return 0; - } - case 'u': switch (three) { - case 'l': return u3nc(0, 221); - case 's': return u3nc(0, 209); - case 't': return u3nc(0, 174); - default: return 0; - } - default: return 0; - } - case 'l': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 145); - case 'c': return u3nc(0, 203); - case 'd': return u3nc(0, 41); - case 'g': return u3nc(0, 156); - case 'n': return u3nc(0, 198); - case 'p': return u3nc(0, 170); - case 'r': return u3nc(0, 218); - case 't': return u3nc(0, 7); - case 'v': return u3nc(0, 190); - case 'x': return u3nc(0, 200); - default: return 0; - } - case 'u': switch (three) { - case 'c': return u3nc(0, 197); - case 'd': return u3nc(0, 223); - case 'g': return u3nc(0, 26); - case 'n': return u3nc(0, 32); - case 'p': return u3nc(0, 22); - case 'r': return u3nc(0, 180); - case 's': return u3nc(0, 161); - case 't': return u3nc(0, 34); - case 'x': return u3nc(0, 235); - default: return 0; - } - case 'y': switch (three) { - case 'd': return u3nc(0, 205); - case 'n': return u3nc(0, 232); - case 'r': return u3nc(0, 240); - case 's': return u3nc(0, 225); - case 't': return u3nc(0, 128); - case 'x': return u3nc(0, 134); - default: return 0; - } - default: return 0; - } - case 'm': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 114); - case 'c': return u3nc(0, 141); - case 'd': return u3nc(0, 127); - case 'g': return u3nc(0, 78); - case 'l': return u3nc(0, 185); - case 'p': return u3nc(0, 33); - case 'r': return u3nc(0, 159); - case 's': return u3nc(0, 104); - case 't': return u3nc(0, 43); - case 'v': return u3nc(0, 51); - case 'x': return u3nc(0, 165); - default: return 0; - } - case 'u': switch (three) { - case 'd': return u3nc(0, 242); - case 'g': return u3nc(0, 173); - case 'l': return u3nc(0, 81); - case 'n': return u3nc(0, 239); - case 'r': return u3nc(0, 248); - case 's': return u3nc(0, 93); - case 't': return u3nc(0, 86); - default: return 0; - } - case 'y': switch (three) { - case 'l': return u3nc(0, 191); - case 'n': return u3nc(0, 103); - case 'r': return u3nc(0, 110); - default: return 0; - } - default: return 0; - } - case 'n': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 130); - case 'c': return u3nc(0, 1); - case 'd': return u3nc(0, 202); - case 'l': return u3nc(0, 253); - case 'm': return u3nc(0, 157); - case 'p': return u3nc(0, 62); - case 'r': return u3nc(0, 199); - case 's': return u3nc(0, 212); - case 't': return u3nc(0, 79); - case 'v': return u3nc(0, 254); - case 'x': return u3nc(0, 31); - default: return 0; - } - case 'u': switch (three) { - case 'b': return u3nc(0, 126); - case 'l': return u3nc(0, 196); - case 'm': return u3nc(0, 148); - case 'p': return u3nc(0, 19); - case 's': return u3nc(0, 162); - case 't': return u3nc(0, 67); - case 'x': return u3nc(0, 122); - default: return 0; - } - case 'y': switch (three) { - case 'd': return u3nc(0, 208); - case 'l': return u3nc(0, 231); - case 'm': return u3nc(0, 82); - case 'r': return u3nc(0, 219); - case 's': return u3nc(0, 230); - case 't': return u3nc(0, 243); - case 'x': return u3nc(0, 87); - default: return 0; - } - default: return 0; - } - case 'p': switch (two) { - case 'e': switch (three) { - case 'c': return u3nc(0, 252); - case 'd': return u3nc(0, 39); - case 'g': return u3nc(0, 21); - case 'l': return u3nc(0, 111); - case 'm': return u3nc(0, 178); - case 'n': return u3nc(0, 9); - case 'r': return u3nc(0, 5); - case 's': return u3nc(0, 36); - case 't': return u3nc(0, 69); - case 'x': return u3nc(0, 186); - default: return 0; - } - case 'u': switch (three) { - case 'b': return u3nc(0, 166); - case 'n': return u3nc(0, 135); - case 'r': return u3nc(0, 63); - case 't': return u3nc(0, 25); - default: return 0; - } - case 'y': switch (three) { - case 'l': return u3nc(0, 48); - case 'x': return u3nc(0, 149); - default: return 0; - } - default: return 0; - } - case 'r': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 65); - case 'c': return u3nc(0, 77); - case 'd': return u3nc(0, 137); - case 'f': return u3nc(0, 140); - case 'g': return u3nc(0, 72); - case 'l': return u3nc(0, 210); - case 'm': return u3nc(0, 224); - case 'n': return u3nc(0, 124); - case 'p': return u3nc(0, 250); - case 's': return u3nc(0, 136); - case 't': return u3nc(0, 216); - case 'v': return u3nc(0, 139); - case 'x': return u3nc(0, 88); - default: return 0; - } - case 'u': switch (three) { - case 'c': return u3nc(0, 97); - case 'd': return u3nc(0, 211); - case 'l': return u3nc(0, 70); - case 'm': return u3nc(0, 131); - case 'n': return u3nc(0, 184); - case 'p': return u3nc(0, 201); - case 's': return u3nc(0, 143); - case 't': return u3nc(0, 52); - case 'x': return u3nc(0, 123); - default: return 0; - } - case 'y': switch (three) { - case 'c': return u3nc(0, 228); - case 'd': return u3nc(0, 204); - case 'g': return u3nc(0, 150); - case 'l': return u3nc(0, 222); - case 'm': return u3nc(0, 167); - case 'n': return u3nc(0, 147); - case 'p': return u3nc(0, 16); - case 's': return u3nc(0, 64); - case 't': return u3nc(0, 28); - case 'x': return u3nc(0, 151); - default: return 0; - } - default: return 0; - } - case 's': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 220); - case 'c': return u3nc(0, 80); - case 'd': return u3nc(0, 237); - case 'f': return u3nc(0, 58); - case 'g': return u3nc(0, 133); - case 'l': return u3nc(0, 96); - case 'm': return u3nc(0, 75); - case 'n': return u3nc(0, 245); - case 'p': return u3nc(0, 35); - case 'r': return u3nc(0, 13); - case 't': return u3nc(0, 115); - case 'v': return u3nc(0, 4); - default: return 0; - } - case 'u': switch (three) { - case 'b': return u3nc(0, 68); - case 'd': return u3nc(0, 177); - case 'g': return u3nc(0, 229); - case 'l': return u3nc(0, 38); - case 'm': return u3nc(0, 85); - case 'n': return u3nc(0, 15); - case 'p': return u3nc(0, 74); - case 'r': return u3nc(0, 119); - case 't': return u3nc(0, 6); - default: return 0; - } - case 'y': switch (three) { - case 'd': return u3nc(0, 30); - case 'l': return u3nc(0, 163); - case 'm': return u3nc(0, 95); - case 'n': return u3nc(0, 71); - case 'p': return u3nc(0, 112); - case 'r': return u3nc(0, 100); - case 't': return u3nc(0, 10); - case 'x': return u3nc(0, 17); - default: return 0; - } - default: return 0; - } - case 't': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 89); - case 'c': return u3nc(0, 164); - case 'd': return u3nc(0, 142); - case 'g': return u3nc(0, 251); - case 'l': return u3nc(0, 249); - case 'm': return u3nc(0, 40); - case 'n': return u3nc(0, 160); - case 'p': return u3nc(0, 55); - case 'r': return u3nc(0, 113); - case 's': return u3nc(0, 241); - case 'v': return u3nc(0, 83); - case 'x': return u3nc(0, 118); - default: return 0; - } - case 'u': switch (three) { - case 'c': return u3nc(0, 168); - case 'd': return u3nc(0, 121); - case 'g': return u3nc(0, 109); - case 'l': return u3nc(0, 42); - case 'n': return u3nc(0, 175); - case 's': return u3nc(0, 154); - case 'x': return u3nc(0, 108); - default: return 0; - } - case 'y': switch (three) { - case 'c': return u3nc(0, 155); - case 'd': return u3nc(0, 73); - case 'l': return u3nc(0, 53); - case 'n': return u3nc(0, 132); - case 'p': return u3nc(0, 189); - case 'r': return u3nc(0, 153); - case 'v': return u3nc(0, 29); - default: return 0; - } - default: return 0; - } - case 'w': switch (two) { - case 'e': switch (three) { - case 'b': return u3nc(0, 84); - case 'd': return u3nc(0, 192); - case 'g': return u3nc(0, 246); - case 'l': return u3nc(0, 207); - case 'n': return u3nc(0, 44); - case 'p': return u3nc(0, 12); - case 'r': return u3nc(0, 227); - case 's': return u3nc(0, 3); - case 't': return u3nc(0, 101); - case 'x': return u3nc(0, 99); - default: return 0; - } - case 'y': switch (three) { - case 'c': return u3nc(0, 59); - case 'd': return u3nc(0, 54); - case 'l': return u3nc(0, 14); - case 'n': return u3nc(0, 76); - case 't': return u3nc(0, 125); - case 'x': return u3nc(0, 94); - default: return 0; - } - default: return 0; - } - case 'z': switch (two) { - case 'o': switch (three) { - case 'd': return u3nc(0, 0); - default: return 0; - } - default: return 0; - } - default: return 0; - } -} - -void -u3_po_to_suffix(u3_noun id, c3_y* a, c3_y* b, c3_y* c) -{ - switch (id) { - case 0: *a = 'z'; *b = 'o'; *c = 'd'; break; - case 1: *a = 'n'; *b = 'e'; *c = 'c'; break; - case 2: *a = 'b'; *b = 'u'; *c = 'd'; break; - case 3: *a = 'w'; *b = 'e'; *c = 's'; break; - case 4: *a = 's'; *b = 'e'; *c = 'v'; break; - case 5: *a = 'p'; *b = 'e'; *c = 'r'; break; - case 6: *a = 's'; *b = 'u'; *c = 't'; break; - case 7: *a = 'l'; *b = 'e'; *c = 't'; break; - case 8: *a = 'f'; *b = 'u'; *c = 'l'; break; - case 9: *a = 'p'; *b = 'e'; *c = 'n'; break; - case 10: *a = 's'; *b = 'y'; *c = 't'; break; - case 11: *a = 'd'; *b = 'u'; *c = 'r'; break; - case 12: *a = 'w'; *b = 'e'; *c = 'p'; break; - case 13: *a = 's'; *b = 'e'; *c = 'r'; break; - case 14: *a = 'w'; *b = 'y'; *c = 'l'; break; - case 15: *a = 's'; *b = 'u'; *c = 'n'; break; - case 16: *a = 'r'; *b = 'y'; *c = 'p'; break; - case 17: *a = 's'; *b = 'y'; *c = 'x'; break; - case 18: *a = 'd'; *b = 'y'; *c = 'r'; break; - case 19: *a = 'n'; *b = 'u'; *c = 'p'; break; - case 20: *a = 'h'; *b = 'e'; *c = 'b'; break; - case 21: *a = 'p'; *b = 'e'; *c = 'g'; break; - case 22: *a = 'l'; *b = 'u'; *c = 'p'; break; - case 23: *a = 'd'; *b = 'e'; *c = 'p'; break; - case 24: *a = 'd'; *b = 'y'; *c = 's'; break; - case 25: *a = 'p'; *b = 'u'; *c = 't'; break; - case 26: *a = 'l'; *b = 'u'; *c = 'g'; break; - case 27: *a = 'h'; *b = 'e'; *c = 'c'; break; - case 28: *a = 'r'; *b = 'y'; *c = 't'; break; - case 29: *a = 't'; *b = 'y'; *c = 'v'; break; - case 30: *a = 's'; *b = 'y'; *c = 'd'; break; - case 31: *a = 'n'; *b = 'e'; *c = 'x'; break; - case 32: *a = 'l'; *b = 'u'; *c = 'n'; break; - case 33: *a = 'm'; *b = 'e'; *c = 'p'; break; - case 34: *a = 'l'; *b = 'u'; *c = 't'; break; - case 35: *a = 's'; *b = 'e'; *c = 'p'; break; - case 36: *a = 'p'; *b = 'e'; *c = 's'; break; - case 37: *a = 'd'; *b = 'e'; *c = 'l'; break; - case 38: *a = 's'; *b = 'u'; *c = 'l'; break; - case 39: *a = 'p'; *b = 'e'; *c = 'd'; break; - case 40: *a = 't'; *b = 'e'; *c = 'm'; break; - case 41: *a = 'l'; *b = 'e'; *c = 'd'; break; - case 42: *a = 't'; *b = 'u'; *c = 'l'; break; - case 43: *a = 'm'; *b = 'e'; *c = 't'; break; - case 44: *a = 'w'; *b = 'e'; *c = 'n'; break; - case 45: *a = 'b'; *b = 'y'; *c = 'n'; break; - case 46: *a = 'h'; *b = 'e'; *c = 'x'; break; - case 47: *a = 'f'; *b = 'e'; *c = 'b'; break; - case 48: *a = 'p'; *b = 'y'; *c = 'l'; break; - case 49: *a = 'd'; *b = 'u'; *c = 'l'; break; - case 50: *a = 'h'; *b = 'e'; *c = 't'; break; - case 51: *a = 'm'; *b = 'e'; *c = 'v'; break; - case 52: *a = 'r'; *b = 'u'; *c = 't'; break; - case 53: *a = 't'; *b = 'y'; *c = 'l'; break; - case 54: *a = 'w'; *b = 'y'; *c = 'd'; break; - case 55: *a = 't'; *b = 'e'; *c = 'p'; break; - case 56: *a = 'b'; *b = 'e'; *c = 's'; break; - case 57: *a = 'd'; *b = 'e'; *c = 'x'; break; - case 58: *a = 's'; *b = 'e'; *c = 'f'; break; - case 59: *a = 'w'; *b = 'y'; *c = 'c'; break; - case 60: *a = 'b'; *b = 'u'; *c = 'r'; break; - case 61: *a = 'd'; *b = 'e'; *c = 'r'; break; - case 62: *a = 'n'; *b = 'e'; *c = 'p'; break; - case 63: *a = 'p'; *b = 'u'; *c = 'r'; break; - case 64: *a = 'r'; *b = 'y'; *c = 's'; break; - case 65: *a = 'r'; *b = 'e'; *c = 'b'; break; - case 66: *a = 'd'; *b = 'e'; *c = 'n'; break; - case 67: *a = 'n'; *b = 'u'; *c = 't'; break; - case 68: *a = 's'; *b = 'u'; *c = 'b'; break; - case 69: *a = 'p'; *b = 'e'; *c = 't'; break; - case 70: *a = 'r'; *b = 'u'; *c = 'l'; break; - case 71: *a = 's'; *b = 'y'; *c = 'n'; break; - case 72: *a = 'r'; *b = 'e'; *c = 'g'; break; - case 73: *a = 't'; *b = 'y'; *c = 'd'; break; - case 74: *a = 's'; *b = 'u'; *c = 'p'; break; - case 75: *a = 's'; *b = 'e'; *c = 'm'; break; - case 76: *a = 'w'; *b = 'y'; *c = 'n'; break; - case 77: *a = 'r'; *b = 'e'; *c = 'c'; break; - case 78: *a = 'm'; *b = 'e'; *c = 'g'; break; - case 79: *a = 'n'; *b = 'e'; *c = 't'; break; - case 80: *a = 's'; *b = 'e'; *c = 'c'; break; - case 81: *a = 'm'; *b = 'u'; *c = 'l'; break; - case 82: *a = 'n'; *b = 'y'; *c = 'm'; break; - case 83: *a = 't'; *b = 'e'; *c = 'v'; break; - case 84: *a = 'w'; *b = 'e'; *c = 'b'; break; - case 85: *a = 's'; *b = 'u'; *c = 'm'; break; - case 86: *a = 'm'; *b = 'u'; *c = 't'; break; - case 87: *a = 'n'; *b = 'y'; *c = 'x'; break; - case 88: *a = 'r'; *b = 'e'; *c = 'x'; break; - case 89: *a = 't'; *b = 'e'; *c = 'b'; break; - case 90: *a = 'f'; *b = 'u'; *c = 's'; break; - case 91: *a = 'h'; *b = 'e'; *c = 'p'; break; - case 92: *a = 'b'; *b = 'e'; *c = 'n'; break; - case 93: *a = 'm'; *b = 'u'; *c = 's'; break; - case 94: *a = 'w'; *b = 'y'; *c = 'x'; break; - case 95: *a = 's'; *b = 'y'; *c = 'm'; break; - case 96: *a = 's'; *b = 'e'; *c = 'l'; break; - case 97: *a = 'r'; *b = 'u'; *c = 'c'; break; - case 98: *a = 'd'; *b = 'e'; *c = 'c'; break; - case 99: *a = 'w'; *b = 'e'; *c = 'x'; break; - case 100: *a = 's'; *b = 'y'; *c = 'r'; break; - case 101: *a = 'w'; *b = 'e'; *c = 't'; break; - case 102: *a = 'd'; *b = 'y'; *c = 'l'; break; - case 103: *a = 'm'; *b = 'y'; *c = 'n'; break; - case 104: *a = 'm'; *b = 'e'; *c = 's'; break; - case 105: *a = 'd'; *b = 'e'; *c = 't'; break; - case 106: *a = 'b'; *b = 'e'; *c = 't'; break; - case 107: *a = 'b'; *b = 'e'; *c = 'l'; break; - case 108: *a = 't'; *b = 'u'; *c = 'x'; break; - case 109: *a = 't'; *b = 'u'; *c = 'g'; break; - case 110: *a = 'm'; *b = 'y'; *c = 'r'; break; - case 111: *a = 'p'; *b = 'e'; *c = 'l'; break; - case 112: *a = 's'; *b = 'y'; *c = 'p'; break; - case 113: *a = 't'; *b = 'e'; *c = 'r'; break; - case 114: *a = 'm'; *b = 'e'; *c = 'b'; break; - case 115: *a = 's'; *b = 'e'; *c = 't'; break; - case 116: *a = 'd'; *b = 'u'; *c = 't'; break; - case 117: *a = 'd'; *b = 'e'; *c = 'g'; break; - case 118: *a = 't'; *b = 'e'; *c = 'x'; break; - case 119: *a = 's'; *b = 'u'; *c = 'r'; break; - case 120: *a = 'f'; *b = 'e'; *c = 'l'; break; - case 121: *a = 't'; *b = 'u'; *c = 'd'; break; - case 122: *a = 'n'; *b = 'u'; *c = 'x'; break; - case 123: *a = 'r'; *b = 'u'; *c = 'x'; break; - case 124: *a = 'r'; *b = 'e'; *c = 'n'; break; - case 125: *a = 'w'; *b = 'y'; *c = 't'; break; - case 126: *a = 'n'; *b = 'u'; *c = 'b'; break; - case 127: *a = 'm'; *b = 'e'; *c = 'd'; break; - case 128: *a = 'l'; *b = 'y'; *c = 't'; break; - case 129: *a = 'd'; *b = 'u'; *c = 's'; break; - case 130: *a = 'n'; *b = 'e'; *c = 'b'; break; - case 131: *a = 'r'; *b = 'u'; *c = 'm'; break; - case 132: *a = 't'; *b = 'y'; *c = 'n'; break; - case 133: *a = 's'; *b = 'e'; *c = 'g'; break; - case 134: *a = 'l'; *b = 'y'; *c = 'x'; break; - case 135: *a = 'p'; *b = 'u'; *c = 'n'; break; - case 136: *a = 'r'; *b = 'e'; *c = 's'; break; - case 137: *a = 'r'; *b = 'e'; *c = 'd'; break; - case 138: *a = 'f'; *b = 'u'; *c = 'n'; break; - case 139: *a = 'r'; *b = 'e'; *c = 'v'; break; - case 140: *a = 'r'; *b = 'e'; *c = 'f'; break; - case 141: *a = 'm'; *b = 'e'; *c = 'c'; break; - case 142: *a = 't'; *b = 'e'; *c = 'd'; break; - case 143: *a = 'r'; *b = 'u'; *c = 's'; break; - case 144: *a = 'b'; *b = 'e'; *c = 'x'; break; - case 145: *a = 'l'; *b = 'e'; *c = 'b'; break; - case 146: *a = 'd'; *b = 'u'; *c = 'x'; break; - case 147: *a = 'r'; *b = 'y'; *c = 'n'; break; - case 148: *a = 'n'; *b = 'u'; *c = 'm'; break; - case 149: *a = 'p'; *b = 'y'; *c = 'x'; break; - case 150: *a = 'r'; *b = 'y'; *c = 'g'; break; - case 151: *a = 'r'; *b = 'y'; *c = 'x'; break; - case 152: *a = 'f'; *b = 'e'; *c = 'p'; break; - case 153: *a = 't'; *b = 'y'; *c = 'r'; break; - case 154: *a = 't'; *b = 'u'; *c = 's'; break; - case 155: *a = 't'; *b = 'y'; *c = 'c'; break; - case 156: *a = 'l'; *b = 'e'; *c = 'g'; break; - case 157: *a = 'n'; *b = 'e'; *c = 'm'; break; - case 158: *a = 'f'; *b = 'e'; *c = 'r'; break; - case 159: *a = 'm'; *b = 'e'; *c = 'r'; break; - case 160: *a = 't'; *b = 'e'; *c = 'n'; break; - case 161: *a = 'l'; *b = 'u'; *c = 's'; break; - case 162: *a = 'n'; *b = 'u'; *c = 's'; break; - case 163: *a = 's'; *b = 'y'; *c = 'l'; break; - case 164: *a = 't'; *b = 'e'; *c = 'c'; break; - case 165: *a = 'm'; *b = 'e'; *c = 'x'; break; - case 166: *a = 'p'; *b = 'u'; *c = 'b'; break; - case 167: *a = 'r'; *b = 'y'; *c = 'm'; break; - case 168: *a = 't'; *b = 'u'; *c = 'c'; break; - case 169: *a = 'f'; *b = 'y'; *c = 'l'; break; - case 170: *a = 'l'; *b = 'e'; *c = 'p'; break; - case 171: *a = 'd'; *b = 'e'; *c = 'b'; break; - case 172: *a = 'b'; *b = 'e'; *c = 'r'; break; - case 173: *a = 'm'; *b = 'u'; *c = 'g'; break; - case 174: *a = 'h'; *b = 'u'; *c = 't'; break; - case 175: *a = 't'; *b = 'u'; *c = 'n'; break; - case 176: *a = 'b'; *b = 'y'; *c = 'l'; break; - case 177: *a = 's'; *b = 'u'; *c = 'd'; break; - case 178: *a = 'p'; *b = 'e'; *c = 'm'; break; - case 179: *a = 'd'; *b = 'e'; *c = 'v'; break; - case 180: *a = 'l'; *b = 'u'; *c = 'r'; break; - case 181: *a = 'd'; *b = 'e'; *c = 'f'; break; - case 182: *a = 'b'; *b = 'u'; *c = 's'; break; - case 183: *a = 'b'; *b = 'e'; *c = 'p'; break; - case 184: *a = 'r'; *b = 'u'; *c = 'n'; break; - case 185: *a = 'm'; *b = 'e'; *c = 'l'; break; - case 186: *a = 'p'; *b = 'e'; *c = 'x'; break; - case 187: *a = 'd'; *b = 'y'; *c = 't'; break; - case 188: *a = 'b'; *b = 'y'; *c = 't'; break; - case 189: *a = 't'; *b = 'y'; *c = 'p'; break; - case 190: *a = 'l'; *b = 'e'; *c = 'v'; break; - case 191: *a = 'm'; *b = 'y'; *c = 'l'; break; - case 192: *a = 'w'; *b = 'e'; *c = 'd'; break; - case 193: *a = 'd'; *b = 'u'; *c = 'c'; break; - case 194: *a = 'f'; *b = 'u'; *c = 'r'; break; - case 195: *a = 'f'; *b = 'e'; *c = 'x'; break; - case 196: *a = 'n'; *b = 'u'; *c = 'l'; break; - case 197: *a = 'l'; *b = 'u'; *c = 'c'; break; - case 198: *a = 'l'; *b = 'e'; *c = 'n'; break; - case 199: *a = 'n'; *b = 'e'; *c = 'r'; break; - case 200: *a = 'l'; *b = 'e'; *c = 'x'; break; - case 201: *a = 'r'; *b = 'u'; *c = 'p'; break; - case 202: *a = 'n'; *b = 'e'; *c = 'd'; break; - case 203: *a = 'l'; *b = 'e'; *c = 'c'; break; - case 204: *a = 'r'; *b = 'y'; *c = 'd'; break; - case 205: *a = 'l'; *b = 'y'; *c = 'd'; break; - case 206: *a = 'f'; *b = 'e'; *c = 'n'; break; - case 207: *a = 'w'; *b = 'e'; *c = 'l'; break; - case 208: *a = 'n'; *b = 'y'; *c = 'd'; break; - case 209: *a = 'h'; *b = 'u'; *c = 's'; break; - case 210: *a = 'r'; *b = 'e'; *c = 'l'; break; - case 211: *a = 'r'; *b = 'u'; *c = 'd'; break; - case 212: *a = 'n'; *b = 'e'; *c = 's'; break; - case 213: *a = 'h'; *b = 'e'; *c = 's'; break; - case 214: *a = 'f'; *b = 'e'; *c = 't'; break; - case 215: *a = 'd'; *b = 'e'; *c = 's'; break; - case 216: *a = 'r'; *b = 'e'; *c = 't'; break; - case 217: *a = 'd'; *b = 'u'; *c = 'n'; break; - case 218: *a = 'l'; *b = 'e'; *c = 'r'; break; - case 219: *a = 'n'; *b = 'y'; *c = 'r'; break; - case 220: *a = 's'; *b = 'e'; *c = 'b'; break; - case 221: *a = 'h'; *b = 'u'; *c = 'l'; break; - case 222: *a = 'r'; *b = 'y'; *c = 'l'; break; - case 223: *a = 'l'; *b = 'u'; *c = 'd'; break; - case 224: *a = 'r'; *b = 'e'; *c = 'm'; break; - case 225: *a = 'l'; *b = 'y'; *c = 's'; break; - case 226: *a = 'f'; *b = 'y'; *c = 'n'; break; - case 227: *a = 'w'; *b = 'e'; *c = 'r'; break; - case 228: *a = 'r'; *b = 'y'; *c = 'c'; break; - case 229: *a = 's'; *b = 'u'; *c = 'g'; break; - case 230: *a = 'n'; *b = 'y'; *c = 's'; break; - case 231: *a = 'n'; *b = 'y'; *c = 'l'; break; - case 232: *a = 'l'; *b = 'y'; *c = 'n'; break; - case 233: *a = 'd'; *b = 'y'; *c = 'n'; break; - case 234: *a = 'd'; *b = 'e'; *c = 'm'; break; - case 235: *a = 'l'; *b = 'u'; *c = 'x'; break; - case 236: *a = 'f'; *b = 'e'; *c = 'd'; break; - case 237: *a = 's'; *b = 'e'; *c = 'd'; break; - case 238: *a = 'b'; *b = 'e'; *c = 'c'; break; - case 239: *a = 'm'; *b = 'u'; *c = 'n'; break; - case 240: *a = 'l'; *b = 'y'; *c = 'r'; break; - case 241: *a = 't'; *b = 'e'; *c = 's'; break; - case 242: *a = 'm'; *b = 'u'; *c = 'd'; break; - case 243: *a = 'n'; *b = 'y'; *c = 't'; break; - case 244: *a = 'b'; *b = 'y'; *c = 'r'; break; - case 245: *a = 's'; *b = 'e'; *c = 'n'; break; - case 246: *a = 'w'; *b = 'e'; *c = 'g'; break; - case 247: *a = 'f'; *b = 'y'; *c = 'r'; break; - case 248: *a = 'm'; *b = 'u'; *c = 'r'; break; - case 249: *a = 't'; *b = 'e'; *c = 'l'; break; - case 250: *a = 'r'; *b = 'e'; *c = 'p'; break; - case 251: *a = 't'; *b = 'e'; *c = 'g'; break; - case 252: *a = 'p'; *b = 'e'; *c = 'c'; break; - case 253: *a = 'n'; *b = 'e'; *c = 'l'; break; - case 254: *a = 'n'; *b = 'e'; *c = 'v'; break; - case 255: *a = 'f'; *b = 'e'; *c = 's'; break; - default: u3m_bail(c3__exit); - } -} - -u3_noun -u3qc_po_ins(u3_noun a) -{ - c3_y byt_y[3]; - u3r_bytes(0, 3, byt_y, a); - - return u3_po_find_prefix(byt_y[0], byt_y[1], byt_y[2]); -} - -u3_noun -u3wcp_ins(u3_noun cor) -{ - u3_noun a; - u3x_mean(cor, u3x_sam, &a, 0); - - if ( c3n == u3ud(a) ) { - return u3m_bail(c3__fail); - } - - return u3qc_po_ins(a); -} - -u3_noun -u3qc_po_ind(u3_noun a) -{ - c3_y byt_y[3]; - u3r_bytes(0, 3, byt_y, a); - - return u3_po_find_suffix(byt_y[0], byt_y[1], byt_y[2]); -} - -u3_noun -u3wcp_ind(u3_noun cor) -{ - u3_noun a; - u3x_mean(cor, u3x_sam, &a, 0); - - if ( c3n == u3ud(a) ) { - return u3m_bail(c3__fail); - } - - return u3qc_po_ind(a); -} - -u3_noun -u3wcp_tos(u3_noun cor) -{ - u3_noun a; - - if ( (c3n == u3r_mean(cor, u3x_sam, &a, 0)) || - (c3n == u3ud(a)) || - (a >= 256) ) - { - return u3m_bail(c3__exit); - } - else { - c3_y byt_y[3]; - u3_po_to_prefix(a, &byt_y[0], &byt_y[1], &byt_y[2]); - return (byt_y[0] | (byt_y[1] << 8) | (byt_y[2] << 16)); - } -} - -u3_noun -u3wcp_tod(u3_noun cor) -{ - u3_noun a; - - if ( (c3n == u3r_mean(cor, u3x_sam, &a, 0)) || - (c3n == u3ud(a)) || - (a >= 256) ) - { - return u3m_bail(c3__exit); - } else { - c3_y byt_y[3]; - u3_po_to_suffix(a, &byt_y[0], &byt_y[1], &byt_y[2]); - return (byt_y[0] | (byt_y[1] << 8) | (byt_y[2] << 16)); - } -} diff --git a/pkg/urbit/jets/c/pow.c b/pkg/urbit/jets/c/pow.c deleted file mode 100644 index 541500f21..000000000 --- a/pkg/urbit/jets/c/pow.c +++ /dev/null @@ -1,38 +0,0 @@ -/* j/3/pow.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_pow(u3_atom a, - u3_atom b) - { - if ( !_(u3a_is_cat(b)) ) { - return u3m_bail(c3__fail); - } - else { - mpz_t a_mp; - - u3r_mp(a_mp, a); - mpz_pow_ui(a_mp, a_mp, b); - - return u3i_mp(a_mp); - } - } - u3_noun - u3wc_pow(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_pow(a, b); - } - } - diff --git a/pkg/urbit/jets/c/rap.c b/pkg/urbit/jets/c/rap.c deleted file mode 100644 index 6daf6555c..000000000 --- a/pkg/urbit/jets/c/rap.c +++ /dev/null @@ -1,88 +0,0 @@ -/* j/3/rap.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_rap(u3_atom a, - u3_noun b) - { - if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return u3m_bail(c3__fail); - } - else { - c3_g a_g = a; - c3_w tot_w = 0; - u3i_slab sab_u; - - /* Measure and validate the slab required. - */ - { - u3_noun cab = b; - - while ( 1 ) { - u3_noun h_cab; - c3_w len_w; - - if ( 0 == cab ) { - break; - } - else if ( c3n == u3du(cab) ) { - return u3m_bail(c3__exit); - } - else if ( c3n == u3ud(h_cab = u3h(cab)) ) { - return u3m_bail(c3__exit); - } - else if ( (tot_w + (len_w = u3r_met(a_g, h_cab))) < tot_w ) { - return u3m_bail(c3__fail); - } - tot_w += len_w; - cab = u3t(cab); - } - - if ( 0 == tot_w ) { - return 0; - } - - u3i_slab_init(&sab_u, a_g, tot_w); - } - - /* Chop the list atoms in. - */ - { - u3_noun cab = b; - c3_w pos_w = 0; - - while ( 0 != cab ) { - u3_noun h_cab = u3h(cab); - c3_w len_w = u3r_met(a_g, h_cab); - - u3r_chop(a_g, 0, len_w, pos_w, sab_u.buf_w, h_cab); - pos_w += len_w; - cab = u3t(cab); - } - } - - return u3i_slab_mint(&sab_u); - } - } - u3_noun - u3wc_rap(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - u3_noun pro; - - pro = u3qc_rap(a, b); - return pro; - } - } - diff --git a/pkg/urbit/jets/c/rep.c b/pkg/urbit/jets/c/rep.c deleted file mode 100644 index 48ac5f868..000000000 --- a/pkg/urbit/jets/c/rep.c +++ /dev/null @@ -1,196 +0,0 @@ -/* j/3/rep.c -** -*/ -#include "all.h" - -/* - Get the lowest `n` bits of a word `w` using a bitmask. -*/ -#define TAKEBITS(n,w) \ - ((n)==32) ? (w) : \ - ((n)==0) ? 0 : \ - ((w) & ((1 << (n)) - 1)) - -/* - Divide, rounding up. -*/ -#define DIVCEIL(x,y) \ - (x==0) ? 0 : \ - 1 + ((x - 1) / y); - -static u3_noun -_bit_rep(u3_atom bits, u3_noun blox) -{ - if ( (c3n == u3a_is_cat(bits) || bits==0 || bits>31) ) { - return u3m_bail(c3__fail); - } - - // - // Calculate input and output size. - // - c3_w num_blox_w = u3qb_lent(blox); - c3_w bit_widt_w = num_blox_w * bits; - c3_w wor_widt_w = DIVCEIL(bit_widt_w, 32); - u3i_slab sab_u; - u3i_slab_bare(&sab_u, 5, wor_widt_w); - - // - // Fill the atom buffer with bits from each block. - // - // Bits are pushed into the `acc_w` register and flushed to the buffer - // once full. - // - // acc_w register - // use_w number of register bits filled (used) - // cur_w next buffer word to flush into. - // - { - c3_w acc_w=0, use_w=0, *cur_w=sab_u.buf_w; - -# define FLUSH() *cur_w++=acc_w; acc_w=use_w=0 -# define SLICE(sz,off,val) TAKEBITS(sz, val) << off - - for (c3_w i=0; i> rem_in_acc_w; - FLUSH(); - } - } - } - - // - // If the last word isn't fully used, it will still need to be - // flushed. - // - if (use_w) { - FLUSH(); - } - } - - return u3i_slab_mint(&sab_u); -} - -static u3_noun -_block_rep(u3_atom a, - u3_noun b) -{ - if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return u3m_bail(c3__fail); - } - else { - c3_g a_g = a; - c3_w tot_w = 0; - u3i_slab sab_u; - - /* Measure and validate the slab required. - */ - { - u3_noun cab = b; - - while ( 1 ) { - u3_noun h_cab; - c3_w len_w; - - if ( 0 == cab ) { - break; - } - else if ( c3n == u3du(cab) ) { - return u3m_bail(c3__exit); - } - else if ( c3n == u3ud(h_cab = u3h(cab)) ) { - return u3m_bail(c3__exit); - } - else if ( (tot_w + (len_w = u3r_met(a_g, h_cab))) < tot_w ) { - return u3m_bail(c3__fail); - } - tot_w++; - cab = u3t(cab); - } - - if ( 0 == tot_w ) { - return 0; - } - - u3i_slab_init(&sab_u, a_g, tot_w); - } - - /* Chop the list atoms in. - */ - { - u3_noun cab = b; - c3_w pos_w = 0; - - while ( 0 != cab ) { - u3_noun h_cab = u3h(cab); - - u3r_chop(a_g, 0, 1, pos_w, sab_u.buf_w, h_cab); - pos_w++; - cab = u3t(cab); - } - } - - return u3i_slab_mint(&sab_u); - } -} - -u3_noun -u3qc_rep(u3_atom a, - u3_atom b, - u3_noun c) -{ - if ( 1 == b ) { - return _block_rep(a, c); - } - - if ( 0 == a ) { - return _bit_rep(b, c); - } - - u3l_log("rep: stub\r\n"); - return u3_none; -} - -u3_noun -u3wc_rep(u3_noun cor) -{ - u3_atom bloq, step; - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, - u3x_sam_3, &b, 0); - u3x_bite(a, &bloq, &step); - - return u3qc_rep(bloq, step, b); -} - -u3_noun -u3kc_rep(u3_atom a, - u3_atom b, - u3_noun c) -{ - u3_noun res = u3qc_rep(a, b, c); - u3z(a); u3z(b); u3z(c); - return res; -} diff --git a/pkg/urbit/jets/c/rev.c b/pkg/urbit/jets/c/rev.c deleted file mode 100644 index 73ece5baa..000000000 --- a/pkg/urbit/jets/c/rev.c +++ /dev/null @@ -1,50 +0,0 @@ -/* j/3/rev.c -** -*/ -#include "all.h" - -/* functions -*/ - - u3_noun - u3qc_rev(u3_atom boz, - u3_atom len, - u3_atom dat) - { - if ( !_(u3a_is_cat(boz)) || (boz >= 32) || - !_(u3a_is_cat(len)) ) { - return u3m_bail(c3__fail); - } - - dat = u3qc_end(boz, len, dat); - c3_w met = u3r_met(boz, dat); - return u3kc_lsh(boz, (len - met), u3kc_swp(boz, dat)); - } - - u3_noun - u3wc_rev(u3_noun cor) - { - u3_noun boz, len, dat; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &boz, - u3x_sam_6, &len, - u3x_sam_7, &dat, 0)) || - (c3n == u3ud(boz)) || - (c3n == u3ud(len)) || - (c3n == u3ud(dat)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_rev(boz, len, dat); - } - } - - u3_noun - u3kc_rev(u3_atom boz, - u3_atom len, - u3_atom dat) - { - u3_noun res = u3qc_rev(boz, len, dat); - u3z(boz); u3z(len); u3z(dat); - return res; - } diff --git a/pkg/urbit/jets/c/rip.c b/pkg/urbit/jets/c/rip.c deleted file mode 100644 index 0a21a3b02..000000000 --- a/pkg/urbit/jets/c/rip.c +++ /dev/null @@ -1,186 +0,0 @@ -#include "all.h" - -/* - Get the lowest `n` bits of a word `w` using a bitmask. -*/ -#define TAKEBITS(n,w) \ - ((n)==32) ? (w) : \ - ((n)==0) ? 0 : \ - ((w) & ((1 << (n)) - 1)) - -/* - Divide, rounding up. -*/ -#define DIVCEIL(x,y) \ - (x==0) ? 0 : \ - 1 + ((x - 1) / y); - -/* - `ripn` breaks `atom` into a list of blocks, of bit-width `bits`. The - resulting list will be least-significant block first. - - XX TODO This only handles cases where the bit-width is <= 32. - - For each block we produce, we need to grab the relevant words inside - `atom`, so we first compute their indicies. - - `ins_idx` is the word-index of the least-significant word we - care about, and `sig_idx` is the word after that. - - Next we grab those words (`ins_word` and `sig_word`) from the atom - using `u3r_word`. Note that `sig_idx` might be out-of-bounds for the - underlying array of `atom`, but `u3r_word` returns 0 in that case, - which is exatly what we want. - - Now, we need to grab the relevant bits out of both words, and combine - them. `bits_rem_in_ins_word` is the number of remaining (insignificant) - bits in `ins_word`, `nbits_ins` is the number of bits we want from the - less-significant word, and `nbits_sig` from the more-significant one. - - Take the least significant `nbits_sig` bits from `sig_word`, and take - the slice we care about from `ins_word`. In order to take that slice, - we drop `bits_rem_in_ins_word` insignificant bits, and then take the - `nbits_sig` most-significant bits. - - Last, we slice out those bits from the two words, combine them into - one word, and cons them onto the front of the result. -*/ -static u3_noun -_bit_rip(u3_atom bits, u3_atom atom) -{ - if ( !_(u3a_is_cat(bits) || bits==0 || bits>31) ) { - return u3m_bail(c3__fail); - } - - c3_w bit_width = u3r_met(0, atom); - c3_w num_blocks = DIVCEIL(bit_width, bits); - - u3_noun res = u3_nul; - - for ( c3_w blk = 0; blk < num_blocks; blk++ ) { - c3_w next_blk = blk + 1; - c3_w blks_rem = num_blocks - next_blk; - c3_w bits_rem = blks_rem * bits; - c3_w ins_idx = bits_rem / 32; - c3_w sig_idx = ins_idx + 1; - - c3_w bits_rem_in_ins_word = bits_rem % 32; - - c3_w ins_word = u3r_word(ins_idx, atom); - c3_w sig_word = u3r_word(sig_idx, atom); - c3_w nbits_ins = c3_min(bits, 32 - bits_rem_in_ins_word); - c3_w nbits_sig = bits - nbits_ins; - - c3_w ins_word_bits = TAKEBITS(nbits_ins, ins_word >> bits_rem_in_ins_word); - c3_w sig_word_bits = TAKEBITS(nbits_sig, sig_word); - - c3_w item = ins_word_bits | (sig_word_bits << nbits_ins); - - res = u3nc(item, res); - } - - return res; -} - -static u3_noun -_block_rip(u3_atom bloq, u3_atom b) -{ - if ( !_(u3a_is_cat(bloq)) || (bloq >= 32) ) { - return u3m_bail(c3__fail); - } - - c3_g bloq_g = bloq; - - /* - This is a fast-path for the case where all the resulting blocks will - fit in 31-bit direct atoms. - */ - if ( bloq_g < 5 ) { // produce direct atoms - u3_noun acc = u3_nul; - - c3_w met_w = u3r_met(bloq_g, b); // num blocks in atom - c3_w nbits_w = 1 << bloq_g; // block size in bits - c3_w bmask_w = (1 << nbits_w) - 1; // result mask - - for ( c3_w i_w = 0; i_w < met_w; i_w++ ) { // `i_w` is block index - c3_w nex_w = i_w + 1; // next block - c3_w pat_w = met_w - nex_w; // blks left after this - c3_w bit_w = pat_w << bloq_g; // bits left after this - c3_w wor_w = bit_w >> 5; // wrds left after this - c3_w sif_w = bit_w & 31; // bits left in word - c3_w src_w = u3r_word(wor_w, b); // find word by index - c3_w rip_w = (src_w >> sif_w) & bmask_w; // get item from word - - acc = u3nc(rip_w, acc); - } - - return acc; - } - - u3_noun acc = u3_nul; - c3_w met_w = u3r_met(bloq_g, b); - c3_w len_w = u3r_met(5, b); - c3_g san_g = (bloq_g - 5); - c3_w san_w = 1 << san_g; - c3_w dif_w = (met_w << san_g) - len_w; - c3_w tub_w = ((dif_w == 0) ? san_w : (san_w - dif_w)); - - for ( c3_w i_w = 0; i_w < met_w; i_w++ ) { - c3_w pat_w = (met_w - (i_w + 1)); - c3_w wut_w = (pat_w << san_g); - c3_w sap_w = ((0 == i_w) ? tub_w : san_w); - c3_w j_w; - u3_atom rip; - u3i_slab sab_u; - u3i_slab_bare(&sab_u, 5, sap_w); - - for ( j_w = 0; j_w < sap_w; j_w++ ) { - sab_u.buf_w[j_w] = u3r_word(wut_w + j_w, b); - } - - rip = u3i_slab_mint(&sab_u); - acc = u3nc(rip, acc); - len_w -= san_w; - } - - return acc; -} - -u3_noun -u3qc_rip(u3_atom a, - u3_atom b, - u3_atom c) -{ - if ( 1 == b ) { - return _block_rip(a, c); - } - - if ( 0 == a ) { - return _bit_rip(b, c); - } - - u3l_log("rip: stub\r\n"); - return u3_none; -} - -u3_noun -u3wc_rip(u3_noun cor) -{ - u3_atom bloq, step; - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, - u3x_sam_3, &b, 0); - u3x_bite(a, &bloq, &step); - - return u3qc_rip(bloq, step, u3x_atom(b)); -} - -u3_noun -u3kc_rip(u3_atom a, - u3_atom b, - u3_atom c) -{ - u3_noun pro = u3qc_rip(a, b, c); - u3z(a); u3z(b); u3z(c); - return pro; -} diff --git a/pkg/urbit/jets/c/rsh.c b/pkg/urbit/jets/c/rsh.c deleted file mode 100644 index 4922e0c58..000000000 --- a/pkg/urbit/jets/c/rsh.c +++ /dev/null @@ -1,57 +0,0 @@ -/* j/3/rsh.c -** -*/ -#include "all.h" - -u3_noun -u3qc_rsh(u3_atom a, - u3_atom b, - u3_atom c) -{ - if ( !_(u3a_is_cat(a)) || (a >= 32) ) { - return u3m_bail(c3__fail); - } - else if ( !_(u3a_is_cat(b)) ) { - return 0; - } - else { - c3_g a_g = a; - c3_w b_w = b; - c3_w len_w = u3r_met(a_g, c); - - if ( b_w >= len_w ) { - return 0; - } - else { - u3i_slab sab_u; - u3i_slab_init(&sab_u, a_g, (len_w - b_w)); - - u3r_chop(a_g, b_w, (len_w - b_w), 0, sab_u.buf_w, c); - - return u3i_slab_mint(&sab_u); - } - } -} - -u3_noun -u3wc_rsh(u3_noun cor) -{ - u3_atom bloq, step; - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, - u3x_sam_3, &b, 0); - u3x_bite(a, &bloq, &step); - - return u3qc_rsh(bloq, step, u3x_atom(b)); -} - -u3_noun -u3kc_rsh(u3_noun a, - u3_noun b, - u3_noun c) -{ - u3_noun d = u3qc_rsh(a, b, c); - - u3z(a); u3z(b); u3z(c); - return d; -} diff --git a/pkg/urbit/jets/c/sqt.c b/pkg/urbit/jets/c/sqt.c deleted file mode 100644 index 160967d60..000000000 --- a/pkg/urbit/jets/c/sqt.c +++ /dev/null @@ -1,33 +0,0 @@ -/* j/3/sqt.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_sqt(u3_atom a) - { - mpz_t a_mp, b_mp; - - u3r_mp(a_mp, a); - mpz_init(b_mp); - mpz_sqrtrem(a_mp, b_mp, a_mp); - - return u3nc(u3i_mp(a_mp), u3i_mp(b_mp)); - } - u3_noun - u3wc_sqt(u3_noun cor) - { - u3_noun a; - - if ( (u3_none == (a = u3r_at(u3x_sam, cor))) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_sqt(a); - } - } - diff --git a/pkg/urbit/jets/c/swp.c b/pkg/urbit/jets/c/swp.c deleted file mode 100644 index 9f7a68c9a..000000000 --- a/pkg/urbit/jets/c/swp.c +++ /dev/null @@ -1,37 +0,0 @@ -/* j/3/swp.c -** -*/ -#include "all.h" - -u3_noun -u3qc_swp(u3_atom a, - u3_atom b) -{ - //XX write a proper c-style swp, maybe - // - return u3kc_rep(u3k(a), 1, u3kb_flop(u3qc_rip(a, 1, b))); -} - -u3_noun -u3wc_swp(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - - if ( (c3n == u3ud(a)) - || (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } - - return u3qc_swp(a, b); - } - -u3_noun -u3kc_swp(u3_atom a, - u3_atom b) -{ - u3_noun pro = u3qc_swp(a, b); - u3z(a); u3z(b); - return pro; -} diff --git a/pkg/urbit/jets/c/xeb.c b/pkg/urbit/jets/c/xeb.c deleted file mode 100644 index f0a191fcb..000000000 --- a/pkg/urbit/jets/c/xeb.c +++ /dev/null @@ -1,32 +0,0 @@ -/* j/3/xeb.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qc_xeb(u3_atom a) - { - c3_w met_w = u3r_met(0, a); - - if ( !_(u3a_is_cat(met_w)) ) { - return u3i_words(1, &met_w); - } - else return met_w; - } - u3_noun - u3wc_xeb(u3_noun cor) - { - u3_noun a; - - if ( (u3_none == (a = u3r_at(u3x_sam, cor))) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return u3qc_xeb(a); - } - } - diff --git a/pkg/urbit/jets/d/by_all.c b/pkg/urbit/jets/d/by_all.c deleted file mode 100644 index 2a800f5d9..000000000 --- a/pkg/urbit/jets/d/by_all.c +++ /dev/null @@ -1,49 +0,0 @@ -/* j/4/by_all.c -** -*/ -#include "all.h" - -static u3_noun -_by_all(u3_noun a, u3j_site* sit_u) -{ - if ( u3_nul == a ) { - return c3y; - } - else { - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - switch ( u3j_gate_slam(sit_u, u3k(u3t(n_a))) ) { - case c3y: break; - case c3n: return c3n; - default: return u3m_bail(c3__exit); - } - - if ( c3n == _by_all(l_a, sit_u) ) { - return c3n; - } - - return _by_all(r_a, sit_u); - } -} - -u3_noun -u3qdb_all(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3j_site sit_u; - - u3j_gate_prep(&sit_u, u3k(b)); - pro = _by_all(a, &sit_u); - u3j_gate_lose(&sit_u); - - return pro; -} - -u3_noun -u3wdb_all(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_all(a, b); -} diff --git a/pkg/urbit/jets/d/by_any.c b/pkg/urbit/jets/d/by_any.c deleted file mode 100644 index 047eb505c..000000000 --- a/pkg/urbit/jets/d/by_any.c +++ /dev/null @@ -1,49 +0,0 @@ -/* j/4/by_any.c -** -*/ -#include "all.h" - -static u3_noun -_by_any(u3_noun a, u3j_site* sit_u) -{ - if ( u3_nul == a ) { - return c3n; - } - else { - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - switch ( u3j_gate_slam(sit_u, u3k(u3t(n_a))) ) { - case c3y: return c3y; - case c3n: break; - default: return u3m_bail(c3__exit); - } - - if ( c3y == _by_any(l_a, sit_u) ) { - return c3y; - } - - return _by_any(r_a, sit_u); - } -} - -u3_noun -u3qdb_any(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3j_site sit_u; - - u3j_gate_prep(&sit_u, u3k(b)); - pro = _by_any(a, &sit_u); - u3j_gate_lose(&sit_u); - - return pro; -} - -u3_noun -u3wdb_any(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_any(a, b); -} diff --git a/pkg/urbit/jets/d/by_apt.c b/pkg/urbit/jets/d/by_apt.c deleted file mode 100644 index e85bc7f9c..000000000 --- a/pkg/urbit/jets/d/by_apt.c +++ /dev/null @@ -1,76 +0,0 @@ -/* j/4/by_apt.c -** -*/ -#include "all.h" - -static c3_o -_by_apt(u3_noun a, u3_weak l, u3_weak r) -{ - if ( u3_nul == a ) { - return c3y; - } - else { - u3_noun p_n_a, l_a, r_a; - { - u3_noun n_a; - u3x_trel(a, &n_a, &l_a, &r_a); - p_n_a = u3h(n_a); - } - - if ( u3_none != l ) { - if ( (c3n == u3qc_gor(p_n_a, l)) - || (c3y == u3r_sing(p_n_a, l)) ) - { - return c3n; - } - } - - if ( u3_none != r ) { - if ( (c3n == u3qc_gor(r, p_n_a)) - || (c3y == u3r_sing(r, p_n_a)) ) - { - return c3n; - } - } - - if ( u3_nul != l_a ) { - u3_noun p_n_l_a = u3h(u3h(l_a)); - - if ( (c3n == u3qc_mor(p_n_a, p_n_l_a)) - || (c3y == u3r_sing(p_n_a, p_n_l_a)) ) - { - return c3n; - } - - if ( c3n == _by_apt(l_a, p_n_a, r) ) { - return c3n; - } - } - - if ( u3_nul != r_a ) { - u3_noun p_n_r_a = u3h(u3h(r_a)); - - if ( (c3n == u3qc_mor(p_n_a, p_n_r_a)) - || (c3y == u3r_sing(p_n_a, p_n_r_a)) ) - { - return c3n; - } - - return _by_apt(r_a, l, p_n_a); - } - - return c3y; - } -} - -u3_noun -u3qdb_apt(u3_noun a) -{ - return _by_apt(a, u3_none, u3_none); -} - -u3_noun -u3wdb_apt(u3_noun cor) -{ - return u3qdb_apt(u3x_at(u3x_con_sam, cor)); -} diff --git a/pkg/urbit/jets/d/by_bif.c b/pkg/urbit/jets/d/by_bif.c deleted file mode 100644 index 0edd9f8b1..000000000 --- a/pkg/urbit/jets/d/by_bif.c +++ /dev/null @@ -1,76 +0,0 @@ -/* jets/d/by_bif.c -** -*/ -#include "all.h" - -/* internal functions -*/ -static u3_noun -_b_bif_putroot(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a ) { - return u3nt(u3k(b), u3_nul, u3_nul); - } - else { - u3_noun n_a, l_a, r_a; - u3_noun p_n_a, q_n_a; - u3_noun p_b, q_b; - u3x_trel(a, &n_a, &l_a, &r_a); - u3x_cell(b, &p_b, &q_b); - u3x_cell(n_a, &p_n_a, &q_n_a); - - if ( c3y == u3r_sing(p_b, p_n_a) ) { - return u3nt(u3k(b), u3k(l_a), u3k(r_a)); - } - else { - u3_noun c, n_c, l_c, r_c; - u3_noun d; - - if ( c3y == u3qc_gor(p_b, p_n_a) ) { - c = _b_bif_putroot(l_a, b); - u3r_trel(c, &n_c, &l_c, &r_c); - d = u3nt(u3k(n_c), - u3k(l_c), - u3nt(u3k(n_a), u3k(r_c), u3k(r_a)) - ); - u3z(c); - return d; - } - else { - c = _b_bif_putroot(r_a, b); - u3r_trel(c, &n_c, &l_c, &r_c); - d = u3nt(u3k(n_c), - u3nt(u3k(n_a), u3k(l_a), u3k(l_c)), - u3k(r_c) - ); - u3z(c); - return d; - } - } - } -} - -/* functions -*/ -u3_noun -u3wdb_bif(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_bif(a, b); -} - -u3_noun -u3qdb_bif(u3_noun a, - u3_noun b) -{ - u3_noun c, n_c, l_c, r_c; - u3_noun d; - - c = _b_bif_putroot(a, b); - u3r_trel(c, &n_c, &l_c, &r_c); - d = u3nc(u3k(l_c), u3k(r_c)); - u3z(c); - return d; -} diff --git a/pkg/urbit/jets/d/by_del.c b/pkg/urbit/jets/d/by_del.c deleted file mode 100644 index 1dc719c0a..000000000 --- a/pkg/urbit/jets/d/by_del.c +++ /dev/null @@ -1,93 +0,0 @@ -/* j/4/by_del.c -** -*/ -#include "all.h" - -/* functions -*/ -static u3_noun -_rebalance(u3_noun a) -{ - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - if ( u3_nul == l_a) { - return u3k(r_a); - } - else if ( u3_nul == r_a) { - return u3k(l_a); - } - else { - u3_noun n_l_a, l_l_a, r_l_a; - u3_noun n_r_a, l_r_a, r_r_a; - u3x_trel(l_a, &n_l_a, &l_l_a, &r_l_a); - u3x_trel(r_a, &n_r_a, &l_r_a, &r_r_a); - - if ( c3y == u3qc_mor(u3h(n_l_a), u3h(n_r_a)) ) { - u3_noun new_right = u3nt(u3k(n_a), - u3k(r_l_a), - u3k(r_a)); - - u3_noun ret = u3nt(u3k(n_l_a), - u3k(l_l_a), - _rebalance(new_right)); - u3z(new_right); - - return ret; - } - else { - u3_noun new_left = u3nt(u3k(n_a), - u3k(l_a), - u3k(l_r_a)); - - u3_noun ret = u3nt(u3k(n_r_a), - _rebalance(new_left), - u3k(r_r_a)); - u3z(new_left); - - return ret; - } - } -} - -u3_noun -u3qdb_del(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a ) { - return u3_nul; - } - else { - u3_noun n_a, lr_a; - u3_noun pn_a; - u3x_cell(a, &n_a, &lr_a); - u3x_cell(n_a, &pn_a, 0); - - if ( c3y == u3r_sing(pn_a, b) ) { - return _rebalance(a); - } - else { - u3_noun l_a, r_a; - u3x_cell(lr_a, &l_a, &r_a); - - if ( c3y == u3qc_gor(b, pn_a) ) { - return u3nt(u3k(n_a), - u3qdb_del(l_a, b), - u3k(r_a)); - } - else { - return u3nt(u3k(n_a), - u3k(l_a), - u3qdb_del(r_a, b)); - } - } - } -} - -u3_noun -u3wdb_del(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_del(a, b); -} diff --git a/pkg/urbit/jets/d/by_dif.c b/pkg/urbit/jets/d/by_dif.c deleted file mode 100644 index 69b6413e8..000000000 --- a/pkg/urbit/jets/d/by_dif.c +++ /dev/null @@ -1,82 +0,0 @@ -/* jets/d/by_dif.c -** -*/ -#include "all.h" - -/* internal functions -*/ - -/* RETAIN -*/ -static u3_noun -_b_dif_join(u3_noun d, - u3_noun e) -{ - if ( u3_nul == d ) { - return u3k(e); - } - else if ( u3_nul == e ) { - return u3k(d); - } - else { - u3_noun n_d, lr_d; - u3_noun n_e, lr_e; - u3x_cell(d, &n_d, &lr_d); - u3x_cell(e, &n_e, &lr_e); - - if ( c3y == u3qc_mor(u3h(n_d), u3h(n_e)) ) { - u3_noun l_d, r_d; - u3x_cell(lr_d, &l_d, &r_d); - - return u3nt(u3k(n_d), - u3k(l_d), - _b_dif_join(r_d, e)); - } - else { - u3_noun l_e, r_e; - u3x_cell(lr_e, &l_e, &r_e); - - return u3nt(u3k(n_e), - _b_dif_join(d, l_e), - u3k(r_e)); - } - } -} - -/* functions -*/ -u3_noun -u3wdb_dif(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_dif(a, b); -} - -u3_noun -u3qdb_dif(u3_noun a, - u3_noun b) -{ - if ( u3_nul == b ) { - return u3k(a); - } - else { - u3_noun n_b, l_b, r_b; - u3_noun c, l_c, r_c; - u3x_trel(b, &n_b, &l_b, &r_b); - - c = u3qdb_bif(a, n_b); - u3x_cell(c, &l_c, &r_c); - - u3_noun d = u3qdb_dif(l_c, l_b); - u3_noun e = u3qdb_dif(r_c, r_b); - - u3z(c); - - u3_noun pro = _b_dif_join(d, e); - u3z(d); - u3z(e); - - return pro; - } -} diff --git a/pkg/urbit/jets/d/by_gas.c b/pkg/urbit/jets/d/by_gas.c deleted file mode 100644 index e14c9833c..000000000 --- a/pkg/urbit/jets/d/by_gas.c +++ /dev/null @@ -1,43 +0,0 @@ -/* j/4/gas.c -** -*/ -#include "all.h" - -/* functions -*/ -u3_noun -u3qdb_gas(u3_noun a, - u3_noun b) -{ - if ( u3_nul == b ) { - return u3k(a); - } - else { - u3_noun i_b, t_b, - pi_b, qi_b; - u3x_cell(b, &i_b, &t_b); - u3x_cell(i_b, &pi_b, &qi_b); - - u3_noun c = u3qdb_put(a, pi_b, qi_b); - u3_noun d = u3qdb_gas(c, t_b); - u3z(c); - return d; - } -} - -u3_noun -u3wdb_gas(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_gas(a, b); -} - -u3_noun -u3kdb_gas(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qdb_gas(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/d/by_get.c b/pkg/urbit/jets/d/by_get.c deleted file mode 100644 index cecd15d67..000000000 --- a/pkg/urbit/jets/d/by_get.c +++ /dev/null @@ -1,62 +0,0 @@ -/* j/4/by_get.c -** -*/ -#include "all.h" - -/* functions -*/ -u3_noun -u3qdb_get(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a ) { - return u3_nul; - } - else { - u3_noun n_a, lr_a; - u3_noun pn_a, qn_a; - u3x_cell(a, &n_a, &lr_a); - u3x_cell(n_a, &pn_a, &qn_a); - - if ( (c3y == u3r_sing(b, pn_a)) ) { - return u3nc(u3_nul, u3k(qn_a)); - } - else { - return ( c3y == u3qc_gor(b, pn_a) ) ? u3qdb_get(u3h(lr_a), b) - : u3qdb_get(u3t(lr_a), b); - } - } -} - -u3_noun -u3wdb_get(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_get(a, b); -} - -u3_weak -u3kdb_get(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qdb_get(a, b); - u3z(a); u3z(b); - - if ( c3n == u3r_du(c) ) { - u3z(c); - return u3_none; - } - else { - u3_noun pro = u3k(u3t(c)); - u3z(c); - return pro; - } -} - -u3_noun -u3kdb_got(u3_noun a, - u3_noun b) -{ - return u3x_good(u3kdb_get(a, b)); -} diff --git a/pkg/urbit/jets/d/by_has.c b/pkg/urbit/jets/d/by_has.c deleted file mode 100644 index 702c38931..000000000 --- a/pkg/urbit/jets/d/by_has.c +++ /dev/null @@ -1,46 +0,0 @@ -/* j/4/by_has.c -** -*/ -#include "all.h" - -/* functions -*/ -u3_noun -u3qdb_has(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a ) { - return c3n; - } - else { - u3_noun n_a, lr_a; - u3_noun pn_a; - u3x_cell(a, &n_a, &lr_a); - u3x_cell(n_a, &pn_a, 0); - - if ( (c3y == u3r_sing(b, pn_a)) ) { - return c3y; - } - else { - return ( c3y == u3qc_gor(b, pn_a) ) ? u3qdb_has(u3h(lr_a), b) - : u3qdb_has(u3t(lr_a), b); - } - } -} - -u3_noun -u3wdb_has(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_has(a, b); -} - -u3_noun -u3kdb_has(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qdb_has(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/d/by_int.c b/pkg/urbit/jets/d/by_int.c deleted file mode 100644 index f5eb59a15..000000000 --- a/pkg/urbit/jets/d/by_int.c +++ /dev/null @@ -1,69 +0,0 @@ -/* j/4/by_int.c -** -*/ -#include "all.h" - -u3_noun -u3qdb_int(u3_noun a, u3_noun b) -{ - if ( (u3_nul == a) - || (u3_nul == b) ) - { - return u3_nul; - } - else { - u3_noun n_a, l_a, r_a; - u3_noun n_b, l_b, r_b; - u3_noun p_n_a, q_n_a; - u3_noun p_n_b, q_n_b; - u3x_trel(a, &n_a, &l_a, &r_a); - u3x_trel(b, &n_b, &l_b, &r_b); - u3x_cell(n_a, &p_n_a, &q_n_a); - u3x_cell(n_b, &p_n_b, &q_n_b); - - if ( c3y == u3qc_mor(p_n_a, p_n_b) ) { - if ( c3y == u3r_sing(p_n_b, p_n_a) ) { - return u3nt(u3k(n_b), u3qdb_int(l_a, l_b), u3qdb_int(r_a, r_b)); - } - else if ( c3y == u3qc_gor(p_n_b, p_n_a) ) { - u3_noun new_l_b = u3nt(u3k(n_b), u3k(l_b), u3_nul); - u3_noun new_a = u3qdb_int(l_a, new_l_b); - - u3z(new_l_b); - return u3kdb_uni(new_a, u3qdb_int(a, r_b)); - } - else { - u3_noun new_r_b = u3nt(u3k(n_b), u3_nul, u3k(r_b)); - u3_noun new_a = u3qdb_int(r_a, new_r_b); - - u3z(new_r_b); - return u3kdb_uni(new_a, u3qdb_int(a, l_b)); - } - } - else if ( c3y == u3r_sing(p_n_a, p_n_b) ) { - return u3nt(u3k(n_b), u3qdb_int(l_a, l_b), u3qdb_int(r_a, r_b)); - } - else if ( c3y == u3qc_gor(p_n_a, p_n_b) ) { - u3_noun new_l_a = u3nt(u3k(n_a), u3k(l_a), u3_nul); - u3_noun new_a = u3qdb_int(new_l_a, l_b); - - u3z(new_l_a); - return u3kdb_uni(new_a, u3qdb_int(r_a, b)); - } - else { - u3_noun new_r_a = u3nt(u3k(n_a), u3_nul, u3k(r_a)); - u3_noun new_a = u3qdb_int(new_r_a, r_b); - - u3z(new_r_a); - return u3kdb_uni(new_a, u3qdb_int(l_a, b)); - } - } -} - -u3_noun -u3wdb_int(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_int(a, b); -} diff --git a/pkg/urbit/jets/d/by_jab.c b/pkg/urbit/jets/d/by_jab.c deleted file mode 100644 index 7b926d35a..000000000 --- a/pkg/urbit/jets/d/by_jab.c +++ /dev/null @@ -1,46 +0,0 @@ -/* j/4/by_jab.c -** -*/ -#include "all.h" - -/* functions -*/ -u3_noun -u3qdb_jab(u3_noun a, - u3_noun key, - u3_noun fun) -{ - if ( u3_nul == a ) { - return u3m_bail(c3__exit); - } - else { - u3_noun n_a, lr_a; - u3_noun pn_a, qn_a; - u3x_cell(a, &n_a, &lr_a); - u3x_cell(n_a, &pn_a, &qn_a); - - if ( (c3y == u3r_sing(key, pn_a)) ) { - u3_noun value = u3n_slam_on(u3k(fun), u3k(qn_a)); - return u3nc(u3nc(u3k(pn_a), value), u3k(u3t(a))); - } - else { - u3_noun l_a, r_a; - u3x_cell(lr_a, &l_a, &r_a); - - return ( c3y == u3qc_gor(key, pn_a) ) - ? u3nt(u3k(n_a), u3qdb_jab(l_a, key, fun), u3k(r_a)) - : u3nt(u3k(n_a), u3k(l_a), u3qdb_jab(r_a, key, fun)); - } - } -} - -u3_noun -u3wdb_jab(u3_noun cor) -{ - u3_noun a, key, fun; - u3x_mean(cor, u3x_sam_2, &key, - u3x_sam_3, &fun, - u3x_con_sam, &a, 0); - - return u3qdb_jab(a, key, fun); -} diff --git a/pkg/urbit/jets/d/by_key.c b/pkg/urbit/jets/d/by_key.c deleted file mode 100644 index e194d71c5..000000000 --- a/pkg/urbit/jets/d/by_key.c +++ /dev/null @@ -1,40 +0,0 @@ -/* j/4/by_run.c -** -*/ -#include "all.h" - -// [a] is RETAINED, [set] is TRANSFERRED -// -static u3_noun -_by_key(u3_noun a, u3_noun set) -{ - if ( u3_nul == a ) { - return set; - } - else { - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - { - u3_noun new = u3qdi_put(set, u3h(n_a)); - u3z(set); - set = new; - } - - set = _by_key(l_a, set); - - return _by_key(r_a, set); - } -} - -u3_noun -u3qdb_key(u3_noun a) -{ - return _by_key(a, u3_nul); -} - -u3_noun -u3wdb_key(u3_noun cor) -{ - return u3qdb_key(u3x_at(u3x_con_sam, cor)); -} diff --git a/pkg/urbit/jets/d/by_put.c b/pkg/urbit/jets/d/by_put.c deleted file mode 100644 index 3734c8adf..000000000 --- a/pkg/urbit/jets/d/by_put.c +++ /dev/null @@ -1,101 +0,0 @@ -/* j/4/put.c -** -*/ -#include "all.h" - -/* functions -*/ -u3_noun -u3qdb_put(u3_noun a, - u3_noun b, - u3_noun c) -{ - if ( u3_nul == a ) { - return u3nt(u3nc(u3k(b), u3k(c)), - u3_nul, - u3_nul); - } - else { - u3_noun n_a, l_a, r_a; - u3_noun pn_a, qn_a; - u3x_trel(a, &n_a, &l_a, &r_a); - u3x_cell(n_a, &pn_a, &qn_a); - - if ( c3y == u3r_sing(pn_a, b) ) { - if ( c3y == u3r_sing(qn_a, c) ) { - return u3k(a); - } - else { - return u3nt(u3nc(u3k(b), u3k(c)), - u3k(l_a), - u3k(r_a)); - } - } - else { - u3_noun d, n_d, l_d, r_d; - - if ( c3y == u3qc_gor(b, pn_a) ) { - d = u3qdb_put(l_a, b, c); - - if ( c3y == u3qc_mor(pn_a, u3h(u3h(d))) ) { - return u3nt(u3k(n_a), - d, - u3k(r_a)); - } - else { - u3r_trel(d, &n_d, &l_d, &r_d); - - u3_noun e = u3nt(u3k(n_d), - u3k(l_d), - u3nt(u3k(n_a), - u3k(r_d), - u3k(r_a))); - - u3z(d); - return e; - } - } - else { - d = u3qdb_put(r_a, b, c); - - if ( c3y == u3qc_mor(pn_a, u3h(u3h(d))) ) { - return u3nt(u3k(n_a), - u3k(l_a), - d); - } - else { - u3r_trel(d, &n_d, &l_d, &r_d); - - u3_noun e = u3nt(u3k(n_d), - u3nt(u3k(n_a), - u3k(l_a), - u3k(l_d)), - u3k(r_d)); - - u3z(d); - return e; - } - } - } - } -} - -u3_noun -u3wdb_put(u3_noun cor) -{ - u3_noun a, b, c; - u3x_mean(cor, u3x_sam_2, &b, - u3x_sam_3, &c, - u3x_con_sam, &a, 0); - return u3qdb_put(a, b, c); -} - -u3_noun -u3kdb_put(u3_noun a, - u3_noun b, - u3_noun c) -{ - u3_noun pro = u3qdb_put(a, b, c); - u3z(a); u3z(b); u3z(c); - return pro; -} diff --git a/pkg/urbit/jets/d/by_run.c b/pkg/urbit/jets/d/by_run.c deleted file mode 100644 index f2710e7fb..000000000 --- a/pkg/urbit/jets/d/by_run.c +++ /dev/null @@ -1,43 +0,0 @@ -/* j/4/by_run.c -** -*/ -#include "all.h" - -static u3_noun -_by_run(u3_noun a, u3j_site* sit_u) -{ - if ( u3_nul == a ) { - return u3_nul; - } - else { - u3_noun n_a, l_a, r_a; - u3_noun p_n_a, q_n_a; - u3x_trel(a, &n_a, &l_a, &r_a); - u3x_cell(n_a, &p_n_a, &q_n_a); - - return u3nt(u3nc(u3k(p_n_a), u3j_gate_slam(sit_u, u3k(q_n_a))), - _by_run(l_a, sit_u), - _by_run(r_a, sit_u)); - } -} - -u3_noun -u3qdb_run(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3j_site sit_u; - - u3j_gate_prep(&sit_u, u3k(b)); - pro = _by_run(a, &sit_u); - u3j_gate_lose(&sit_u); - - return pro; -} - -u3_noun -u3wdb_run(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_run(a, b); -} diff --git a/pkg/urbit/jets/d/by_uni.c b/pkg/urbit/jets/d/by_uni.c deleted file mode 100644 index 49761b390..000000000 --- a/pkg/urbit/jets/d/by_uni.c +++ /dev/null @@ -1,98 +0,0 @@ -/* j/4/by_uni.c - */ -#include "all.h" - -u3_noun -u3qdb_uni(u3_noun a, u3_noun b) -{ - if ( u3_nul == b ) { - return u3k(a); - } - else if ( u3_nul == a ) { - return u3k(b); - } - else { - u3_noun n_a, l_a, r_a; - u3_noun n_b, l_b, r_b; - u3_noun p_n_a, q_n_a; - u3_noun p_n_b, q_n_b; - u3x_trel(a, &n_a, &l_a, &r_a); - u3x_trel(b, &n_b, &l_b, &r_b); - u3x_cell(n_a, &p_n_a, &q_n_a); - u3x_cell(n_b, &p_n_b, &q_n_b); - - if ( c3y == u3r_sing(p_n_a, p_n_b) ) { - return u3nt(u3k(n_b), - u3qdb_uni(l_a, l_b), - u3qdb_uni(r_a, r_b)); - } - else if ( c3y == u3qc_mor(p_n_a, p_n_b) ) { - u3_noun new_a, old_b; - - if ( c3y == u3qc_gor(p_n_b, p_n_a) ) { - u3_noun new_b = u3nt(u3k(n_b), u3k(l_b), u3_nul); - u3_noun new_la = u3qdb_uni(l_a, new_b); - u3z(new_b); - - new_a = u3nt(u3k(n_a), new_la, u3k(r_a)); - old_b = r_b; - } - else { - u3_noun new_b = u3nt(u3k(n_b), u3_nul, u3k(r_b)); - u3_noun new_ra = u3qdb_uni(r_a, new_b); - u3z(new_b); - - new_a = u3nt(u3k(n_a), u3k(l_a), new_ra); - old_b = l_b; - } - - { - u3_noun pro = u3qdb_uni(new_a, old_b); - u3z(new_a); - return pro; - } - } - else { - u3_noun old_a, new_b; - - if ( c3y == u3qc_gor(p_n_a, p_n_b) ) { - u3_noun new_a = u3nt(u3k(n_a), u3k(l_a), u3_nul); - u3_noun new_lb = u3qdb_uni(new_a, l_b); - u3z(new_a); - - new_b = u3nt(u3k(n_b), new_lb, u3k(r_b)); - old_a = r_a; - } - else { - u3_noun new_a = u3nt(u3k(n_a), u3_nul, u3k(r_a)); - u3_noun new_rb = u3qdb_uni(new_a, r_b); - u3z(new_a); - - new_b = u3nt(u3k(n_b), u3k(l_b), new_rb); - old_a = l_a; - } - - { - u3_noun pro = u3qdb_uni(old_a, new_b); - u3z(new_b); - return pro; - } - } - } -} - -u3_noun -u3wdb_uni(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_uni(a, b); -} - -u3_noun -u3kdb_uni(u3_noun a, u3_noun b) -{ - u3_noun pro = u3qdb_uni(a, b); - u3z(a); u3z(b); - return pro; -} diff --git a/pkg/urbit/jets/d/by_urn.c b/pkg/urbit/jets/d/by_urn.c deleted file mode 100644 index 35ccfa5f3..000000000 --- a/pkg/urbit/jets/d/by_urn.c +++ /dev/null @@ -1,41 +0,0 @@ -/* j/4/by_urn.c -** -*/ -#include "all.h" - -static u3_noun -_by_urn(u3_noun a, u3j_site* sit_u) -{ - if ( u3_nul == a ) { - return u3_nul; - } - else { - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - return u3nt(u3nc(u3k(u3h(n_a)), u3j_gate_slam(sit_u, u3k(n_a))), - _by_urn(l_a, sit_u), - _by_urn(r_a, sit_u)); - } -} - -u3_noun -u3qdb_urn(u3_noun a, u3_noun b) -{ - u3_noun pro; - u3j_site sit_u; - - u3j_gate_prep(&sit_u, u3k(b)); - pro = _by_urn(a, &sit_u); - u3j_gate_lose(&sit_u); - - return pro; -} - -u3_noun -u3wdb_urn(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdb_urn(a, b); -} diff --git a/pkg/urbit/jets/d/in_apt.c b/pkg/urbit/jets/d/in_apt.c deleted file mode 100644 index c3276bc4a..000000000 --- a/pkg/urbit/jets/d/in_apt.c +++ /dev/null @@ -1,56 +0,0 @@ -/* j/4/in_apt.c -** -*/ -#include "all.h" - -static c3_o -_in_apt(u3_noun a, u3_weak l, u3_weak r) -{ - if ( u3_nul == a ) { - return c3y; - } - else { - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - if ( (u3_none != l) && (c3n == u3qc_gor(n_a, l)) ) { - return c3n; - } - - if ( (u3_none != r) && (c3n == u3qc_gor(r, n_a)) ) { - return c3n; - } - - if ( u3_nul != l_a ) { - if ( c3n == u3qc_mor(n_a, u3h(l_a)) ) { - return c3n; - } - - if ( c3n == _in_apt(l_a, n_a, r) ) { - return c3n; - } - } - - if ( u3_nul != r_a ) { - if ( c3n == u3qc_mor(n_a, u3h(r_a)) ) { - return c3n; - } - - return _in_apt(r_a, l, n_a); - } - - return c3y; - } -} - -u3_noun -u3qdi_apt(u3_noun a) -{ - return _in_apt(a, u3_none, u3_none); -} - -u3_noun -u3wdi_apt(u3_noun cor) -{ - return u3qdi_apt(u3x_at(u3x_con_sam, cor)); -} diff --git a/pkg/urbit/jets/d/in_bif.c b/pkg/urbit/jets/d/in_bif.c deleted file mode 100644 index 643cd7a29..000000000 --- a/pkg/urbit/jets/d/in_bif.c +++ /dev/null @@ -1,72 +0,0 @@ -/* jets/d/in_bif.c -** -*/ -#include "all.h" - -/* internal functions -*/ -static u3_noun -_i_bif_putroot(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a) { - return u3nt(u3k(b), u3_nul, u3_nul); - } - else { - u3_noun n_a, lr_a; - u3x_cell(a, &n_a, &lr_a); - - if ( c3y == u3r_sing(b, n_a) ) { - return u3k(a); - } - else { - u3_noun c, n_c, l_c, r_c; - u3_noun d; - u3_noun l_a, r_a; - u3x_cell(lr_a, &l_a, &r_a); - - if ( c3y == u3qc_gor(b, n_a) ) { - c = _i_bif_putroot(l_a, b); - u3r_trel(c, &n_c, &l_c, &r_c); - d = u3nt(u3k(n_c), - u3k(l_c), - u3nt(u3k(n_a), u3k(r_c), u3k(r_a))); - u3z(c); - return d; - } - else { - c = _i_bif_putroot(r_a, b); - u3r_trel(c, &n_c, &l_c, &r_c); - d = u3nt(u3k(n_c), - u3nt(u3k(n_a), u3k(l_a), u3k(l_c)), - u3k(r_c)); - u3z(c); - return d; - } - } - } -} - -/* functions -*/ -u3_noun -u3wdi_bif(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_bif(a, b); -} - -u3_noun -u3qdi_bif(u3_noun a, - u3_noun b) -{ - u3_noun c, n_c, l_c, r_c; - u3_noun d; - - c = _i_bif_putroot(a, b); - u3r_trel(c, &n_c, &l_c, &r_c); - d = u3nc(u3k(l_c), u3k(r_c)); - u3z(c); - return d; -} diff --git a/pkg/urbit/jets/d/in_del.c b/pkg/urbit/jets/d/in_del.c deleted file mode 100644 index 0d8539efd..000000000 --- a/pkg/urbit/jets/d/in_del.c +++ /dev/null @@ -1,88 +0,0 @@ -/* j/4/in_del.c -** -*/ -#include "all.h" - -/* functions -*/ -static u3_noun -_rebalance(u3_noun a) -{ - u3_noun l_a, n_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - if ( u3_nul == l_a) { - return u3k(r_a); - } - else if ( u3_nul == r_a) { - return u3k(l_a); - } - else { - u3_noun n_l_a, l_l_a, r_l_a; - u3_noun n_r_a, l_r_a, r_r_a; - u3x_trel(l_a, &n_l_a, &l_l_a, &r_l_a); - u3x_trel(r_a, &n_r_a, &l_r_a, &r_r_a); - - if ( c3y == u3qc_mor(n_l_a, n_r_a) ) { - u3_noun new_right = u3nt(u3k(n_a), - u3k(r_l_a), - u3k(r_a)); - - u3_noun ret = u3nt(u3k(n_l_a), - u3k(l_l_a), - _rebalance(new_right)); - u3z(new_right); - - return ret; - } - else { - u3_noun new_left = u3nt(u3k(n_a), - u3k(l_a), - u3k(l_r_a)); - - u3_noun ret = u3nt(u3k(n_r_a), - _rebalance(new_left), - u3k(r_r_a)); - u3z(new_left); - - return ret; - } - } -} - -u3_noun -u3qdi_del(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a ) { - return u3_nul; - } - else { - u3_noun l_a, n_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - if ( c3y == u3r_sing(n_a, b) ) { - return _rebalance(a); - } - else { - if ( c3y == u3qc_gor(b, n_a) ) { - return u3nt(u3k(n_a), - u3qdi_del(l_a, b), - u3k(r_a)); - } - else { - return u3nt(u3k(n_a), - u3k(l_a), - u3qdi_del(r_a, b)); - } - } - } -} - -u3_noun -u3wdi_del(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_del(a, b); -} diff --git a/pkg/urbit/jets/d/in_dif.c b/pkg/urbit/jets/d/in_dif.c deleted file mode 100644 index 05981e287..000000000 --- a/pkg/urbit/jets/d/in_dif.c +++ /dev/null @@ -1,82 +0,0 @@ -/* jets/d/in_dif.c -** -*/ -#include "all.h" - -/* internal functions -*/ - -/* RETAIN -*/ -static u3_noun -_i_dif_join(u3_noun d, - u3_noun e) -{ - if ( u3_nul == d ) { - return u3k(e); - } - else if ( u3_nul == e ) { - return u3k(d); - } - else { - u3_noun n_d, lr_d; - u3_noun n_e, lr_e; - u3x_cell(d, &n_d, &lr_d); - u3x_cell(e, &n_e, &lr_e); - - if ( c3y == u3qc_mor(n_d, n_e) ) { - u3_noun l_d, r_d; - u3x_cell(lr_d, &l_d, &r_d); - - return u3nt(u3k(n_d), - u3k(l_d), - _i_dif_join(r_d, e)); - } - else { - u3_noun l_e, r_e; - u3x_cell(lr_e, &l_e, &r_e); - - return u3nt(u3k(n_e), - _i_dif_join(d, l_e), - u3k(r_e)); - } - } -} - -/* functions -*/ -u3_noun -u3wdi_dif(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_dif(a, b); -} - -u3_noun -u3qdi_dif(u3_noun a, - u3_noun b) -{ - if ( u3_nul == b ) { - return u3k(a); - } - else { - u3_noun n_b, l_b, r_b; - u3_noun c, l_c, r_c; - u3_noun d, e; - - u3x_trel(b, &n_b, &l_b, &r_b); - c = u3qdi_bif(a, n_b); - u3x_cell(c, &l_c, &r_c); - - d = u3qdi_dif(l_c, l_b); - e = u3qdi_dif(r_c, r_b); - u3z(c); - - u3_noun pro = _i_dif_join(d, e); - u3z(d); - u3z(e); - - return pro; - } -} diff --git a/pkg/urbit/jets/d/in_gas.c b/pkg/urbit/jets/d/in_gas.c deleted file mode 100644 index b31982de8..000000000 --- a/pkg/urbit/jets/d/in_gas.c +++ /dev/null @@ -1,41 +0,0 @@ -/* j/4/gas.c -** -*/ -#include "all.h" - -/* functions -*/ -u3_noun -u3qdi_gas(u3_noun a, - u3_noun b) -{ - if ( u3_nul == b ) { - return u3k(a); - } - else { - u3_noun i_b, t_b; - u3x_cell(b, &i_b, &t_b); - - u3_noun c = u3qdi_put(a, i_b); - u3_noun d = u3qdi_gas(c, t_b); - u3z(c); - return d; - } -} - -u3_noun -u3wdi_gas(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_gas(a, b); -} - -u3_noun -u3kdi_gas(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qdi_gas(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/d/in_has.c b/pkg/urbit/jets/d/in_has.c deleted file mode 100644 index 9e1b1b977..000000000 --- a/pkg/urbit/jets/d/in_has.c +++ /dev/null @@ -1,44 +0,0 @@ -/* j/4/in_has.c -** -*/ -#include "all.h" - -/* functions -*/ -u3_noun -u3qdi_has(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a ) { - return c3n; - } - else { - u3_noun n_a, lr_a; - u3x_cell(a, &n_a, &lr_a); - - if ( (c3y == u3r_sing(b, n_a)) ) { - return c3y; - } - else { - return ( c3y == u3qc_gor(b, n_a) ) ? u3qdi_has(u3h(lr_a), b) - : u3qdi_has(u3t(lr_a), b); - } - } -} - -u3_noun -u3wdi_has(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_has(a, b); -} - -u3_noun -u3kdi_has(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qdi_has(a, b); - u3z(a); u3z(b); - return c; -} diff --git a/pkg/urbit/jets/d/in_int.c b/pkg/urbit/jets/d/in_int.c deleted file mode 100644 index 85cfc3bb4..000000000 --- a/pkg/urbit/jets/d/in_int.c +++ /dev/null @@ -1,62 +0,0 @@ -/* j/4/in_int.c -** -*/ -#include "all.h" - -u3_noun -u3qdi_int(u3_noun a, u3_noun b) -{ - if ( (u3_nul == a) - || (u3_nul == b) ) - { - return u3_nul; - } - else { - u3_noun n_a, l_a, r_a; - u3_noun n_b, l_b, r_b; - - { - u3_noun lr_a, lr_b; - u3x_cell(a, &n_a, &lr_a); - u3x_cell(b, &n_b, &lr_b); - - if ( c3y == u3qc_mor(n_a, n_b) ) { - u3_noun c; - c = a; a = b; b = c; - c = n_a; n_a = n_b; n_b = c; - c = lr_a; lr_a = lr_b; lr_b = c; - } - - u3x_cell(lr_a, &l_a, &r_a); - u3x_cell(lr_b, &l_b, &r_b); - } - - if ( c3y == u3r_sing(n_b, n_a) ) { - return u3nt(u3k(n_a), - u3qdi_int(l_a, l_b), - u3qdi_int(r_a, r_b)); - } - else if ( c3y == u3qc_gor(n_b, n_a) ) { - u3_noun new_l_b = u3nt(u3k(n_b), u3k(l_b), u3_nul); - u3_noun new_a = u3qdi_int(l_a, new_l_b); - - u3z(new_l_b); - return u3kdi_uni(new_a, u3qdi_int(a, r_b)); - } - else { - u3_noun new_r_b = u3nt(u3k(n_b), u3_nul, u3k(r_b)); - u3_noun new_a = u3qdi_int(r_a, new_r_b); - - u3z(new_r_b); - return u3kdi_uni(new_a, u3qdi_int(a, l_b)); - } - } -} - -u3_noun -u3wdi_int(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_int(a, b); -} diff --git a/pkg/urbit/jets/d/in_put.c b/pkg/urbit/jets/d/in_put.c deleted file mode 100644 index 2f6301035..000000000 --- a/pkg/urbit/jets/d/in_put.c +++ /dev/null @@ -1,86 +0,0 @@ -/* j/4/in_put.c -** -*/ -#include "all.h" - -/* functions -*/ -u3_noun -u3qdi_put(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a ) { - return u3nt(u3k(b), u3_nul, u3_nul); - } - else { - u3_noun n_a, lr_a; - u3x_cell(a, &n_a, &lr_a); - - if ( c3y == u3r_sing(n_a, b) ) { - return u3k(a); - } - else { - u3_noun c, n_c, l_c, r_c; - u3_noun l_a, r_a; - u3x_cell(lr_a, &l_a, &r_a); - - if ( c3y == u3qc_gor(b, n_a) ) { - c = u3qdi_put(l_a, b); - - if ( c3y == u3qc_mor(n_a, u3h(c)) ) { - return u3nt(u3k(n_a), - c, - u3k(r_a)); - } - else { - u3r_trel(c, &n_c, &l_c, &r_c); - { - u3_noun d = u3nt(u3k(n_c), - u3k(l_c), - u3nt(u3k(n_a), u3k(r_c), u3k(r_a))); - - u3z(c); - return d; - } - } - } - else { - c = u3qdi_put(r_a, b); - - if ( c3y == u3qc_mor(n_a, u3h(c)) ) { - return u3nt(u3k(n_a), - u3k(l_a), - c); - } - else { - u3r_trel(c, &n_c, &l_c, &r_c); - { - u3_noun d = u3nt(u3k(n_c), - u3nt(u3k(n_a), u3k(l_a), u3k(l_c)), - u3k(r_c)); - - u3z(c); - return d; - } - } - } - } - } -} - -u3_noun -u3wdi_put(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_put(a, b); -} - -u3_noun -u3kdi_put(u3_noun a, - u3_noun b) -{ - u3_noun pro = u3qdi_put(a, b); - u3z(a); u3z(b); - return pro; -} diff --git a/pkg/urbit/jets/d/in_rep.c b/pkg/urbit/jets/d/in_rep.c deleted file mode 100644 index 7af3c5d9e..000000000 --- a/pkg/urbit/jets/d/in_rep.c +++ /dev/null @@ -1,44 +0,0 @@ -/* j/4/in_rep.c -** -*/ -#include "all.h" - -// [a] is RETAINED, [out] is TRANSFERRED -// -static void -_in_rep(u3_noun a, u3j_site* sit_u, u3_noun* out) -{ - if ( u3_nul == a ) { - return; - } - else { - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - *out = u3j_gate_slam(sit_u, u3nc(u3k(n_a), *out)); - - _in_rep(l_a, sit_u, out); - _in_rep(r_a, sit_u, out); - } -} - -u3_noun -u3qdi_rep(u3_noun a, u3_noun b) -{ - u3_noun out = u3k(u3x_at(u3x_sam_3, b)); - u3j_site sit_u; - - u3j_gate_prep(&sit_u, u3k(b)); - _in_rep(a, &sit_u, &out); - u3j_gate_lose(&sit_u); - - return out; -} - -u3_noun -u3wdi_rep(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_rep(a, b); -} diff --git a/pkg/urbit/jets/d/in_run.c b/pkg/urbit/jets/d/in_run.c deleted file mode 100644 index 2a9747241..000000000 --- a/pkg/urbit/jets/d/in_run.c +++ /dev/null @@ -1,51 +0,0 @@ -/* j/4/in_run.c -** -*/ -#include "all.h" - -// [a] is RETAINED, [out] is TRANSFERRED -// -static void -_in_run(u3_noun a, u3j_site* sit_u, u3_noun* out) -{ - if ( u3_nul == a ) { - return; - } - else { - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - { - u3_noun new = u3j_gate_slam(sit_u, u3k(n_a)); - u3_noun pro = u3qdi_put(*out, new); - - u3z(new); - u3z(*out); - *out = pro; - } - - _in_run(l_a, sit_u, out); - _in_run(r_a, sit_u, out); - } -} - -u3_noun -u3qdi_run(u3_noun a, u3_noun b) -{ - u3_noun out = u3_nul; - u3j_site sit_u; - - u3j_gate_prep(&sit_u, u3k(b)); - _in_run(a, &sit_u, &out); - u3j_gate_lose(&sit_u); - - return out; -} - -u3_noun -u3wdi_run(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_run(a, b); -} diff --git a/pkg/urbit/jets/d/in_tap.c b/pkg/urbit/jets/d/in_tap.c deleted file mode 100644 index 648753091..000000000 --- a/pkg/urbit/jets/d/in_tap.c +++ /dev/null @@ -1,45 +0,0 @@ -/* j/4/in_tap.c -** -*/ -#include "all.h" - -/* functions -*/ -static u3_noun -_tap_in(u3_noun a, - u3_noun b) -{ - if ( u3_nul == a ) { - return b; - } - else { - u3_noun n_a, l_a, r_a; - u3x_trel(a, &n_a, &l_a, &r_a); - - return _tap_in(r_a, - u3nc(u3k(n_a), - _tap_in(l_a, b))); - } -} - -u3_noun -u3qdi_tap(u3_noun a) -{ - return _tap_in(a, u3_nul); -} - -u3_noun -u3wdi_tap(u3_noun cor) -{ - u3_noun a; - u3x_mean(cor, u3x_con_sam, &a, 0); - return u3qdi_tap(a); -} - -u3_noun -u3kdi_tap(u3_noun a) -{ - u3_noun b = u3qdi_tap(a); - u3z(a); - return b; -} diff --git a/pkg/urbit/jets/d/in_uni.c b/pkg/urbit/jets/d/in_uni.c deleted file mode 100644 index cc18ecd37..000000000 --- a/pkg/urbit/jets/d/in_uni.c +++ /dev/null @@ -1,97 +0,0 @@ -/* j/4/in_uni.c -** -*/ -#include "all.h" - -/* internal functions -*/ -static u3_noun -_in_uni(u3_noun a, u3_noun b) -{ - if ( u3_nul == a ) { - return u3k(b); - } - else if ( u3_nul == b ) { - return u3k(a); - } - else { - u3_noun n_a, l_a, r_a, - n_b, l_b, r_b, - neb, sub, naw, pro; - u3x_trel(a, &n_a, &l_a, &r_a); - u3x_trel(b, &n_b, &l_b, &r_b); - - if ( c3n == u3qc_mor(n_a, n_b) ) { - if ( c3y == u3r_sing(n_a, n_b) ) { - return u3nt(u3k(n_b), _in_uni(l_a, l_b), _in_uni(r_a, r_b)); - } - else if ( c3y == u3qc_gor(n_a, n_b) ) { - naw = u3nt(u3k(n_a), u3k(l_a), u3_nul); - sub = _in_uni(naw, l_b); - neb = u3nt(u3k(n_b), sub, u3k(r_b)); - pro = _in_uni(r_a, neb); - u3z(naw); u3z(neb); - return pro; - } - else { - naw = u3nt(u3k(n_a), u3_nul, u3k(r_a)); - sub = _in_uni(naw, r_b); - neb = u3nt(u3k(n_b), u3k(l_b), sub); - pro = _in_uni(l_a, neb); - u3z(naw); u3z(neb); - return pro; - } - } - else if ( c3y == u3r_sing(n_b, n_a) ) { - return u3nt(u3k(n_b), _in_uni(l_a, l_b), _in_uni(r_a, r_b)); - } - else if ( c3y == u3qc_gor(n_b, n_a) ) { - neb = u3nt(u3k(n_b), u3k(l_b), u3_nul); - sub = _in_uni(l_a, neb); - naw = u3nt(u3k(n_a), sub, u3k(r_a)); - pro = _in_uni(naw, r_b); - u3z(neb); u3z(naw); - return pro; - } - else { - neb = u3nt(u3k(n_b), u3_nul, u3k(r_b)); - sub = _in_uni(r_a, neb); - naw = u3nt(u3k(n_a), u3k(l_a), sub); - pro = _in_uni(naw, l_b); - u3z(neb); u3z(naw); - return pro; - } - } -} - -/* functions -*/ -u3_noun -u3kdi_uni(u3_noun a, - u3_noun b) -{ - u3_noun c = u3qdi_uni(a, b); - u3z(a); u3z(b); - return c; -} - -u3_noun -u3qdi_uni(u3_noun a, - u3_noun b) -{ - if ( c3y == u3r_sing(a, b) ) { - return u3k(a); - } - else { - return _in_uni(a, b); - } -} - -u3_noun -u3wdi_uni(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0); - return u3qdi_uni(a, b); -} - diff --git a/pkg/urbit/jets/d/in_wyt.c b/pkg/urbit/jets/d/in_wyt.c deleted file mode 100644 index d28fbac16..000000000 --- a/pkg/urbit/jets/d/in_wyt.c +++ /dev/null @@ -1,33 +0,0 @@ -/* jets/d/in_wyt.c -** -*/ -#include "all.h" - -STATIC_ASSERT( (UINT32_MAX > u3a_cells), - "width precision" ); - -static c3_w -_wyt_in(u3_noun a) -{ - if ( u3_nul == a ) { - return 0; - } - else { - u3_noun l_a, r_a; - u3x_trel(a, 0, &l_a, &r_a); - - return 1 + _wyt_in(l_a) + _wyt_in(r_a); - } -} - -u3_noun -u3qdi_wyt(u3_noun a) -{ - return u3i_word(_wyt_in(a)); -} - -u3_noun -u3wdi_wyt(u3_noun cor) -{ - return u3qdi_wyt(u3x_at(u3x_con_2, cor)); -} diff --git a/pkg/urbit/jets/e/aes_cbc.c b/pkg/urbit/jets/e/aes_cbc.c deleted file mode 100644 index b561efa44..000000000 --- a/pkg/urbit/jets/e/aes_cbc.c +++ /dev/null @@ -1,182 +0,0 @@ -/* j/5/aes_cbc.c -** -*/ -#include "all.h" -#include - -/* All of the CBC hoon truncates its key and prv inputs by passing them to - * the ECB functions, which truncate them, hence the raw u3r_bytes unpacking. - */ - -typedef int (*urcrypt_cbc)(c3_y**, - size_t*, - c3_y*, - c3_y*, - urcrypt_realloc_t); - -/* functions -*/ - static u3_atom - _cqea_cbc_help(c3_y* key_y, u3_atom iv, u3_atom msg, urcrypt_cbc low_f) - { - u3_atom ret; - c3_w met_w; - c3_y iv_y[16]; - c3_y* msg_y = u3r_bytes_all(&met_w, msg); - size_t len = met_w; - - u3r_bytes(0, 16, iv_y, iv); - if ( 0 != (*low_f)(&msg_y, &len, key_y, iv_y, &u3a_realloc) ) { - ret = u3_none; - } - else { - ret = u3i_bytes(len, msg_y); - } - u3a_free(msg_y); - - return ret; - } - - static u3_atom - _cqea_cbca_en(u3_atom key, - u3_atom iv, - u3_atom msg) - { - c3_y key_y[16]; - u3r_bytes(0, 16, key_y, key); - return _cqea_cbc_help(key_y, iv, msg, &urcrypt_aes_cbca_en); - } - - u3_noun - u3wea_cbca_en(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam, &c, 60, &a, 61, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("cbca-en", _cqea_cbca_en(a, b, c)); - } - } - - static u3_atom - _cqea_cbca_de(u3_atom key, - u3_atom iv, - u3_atom msg) - { - c3_y key_y[16]; - u3r_bytes(0, 16, key_y, key); - return _cqea_cbc_help(key_y, iv, msg, &urcrypt_aes_cbca_de); - } - - u3_noun - u3wea_cbca_de(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam, &c, 60, &a, 61, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("cbca-de", _cqea_cbca_de(a, b, c)); - } - } - - static u3_atom - _cqea_cbcb_en(u3_atom key, - u3_atom iv, - u3_atom msg) - { - c3_y key_y[24]; - u3r_bytes(0, 24, key_y, key); - return _cqea_cbc_help(key_y, iv, msg, &urcrypt_aes_cbcb_en); - } - - u3_noun - u3wea_cbcb_en(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam, &c, 60, &a, 61, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("cbcb-en", _cqea_cbcb_en(a, b, c)); - } - } - - static u3_atom - _cqea_cbcb_de(u3_atom key, - u3_atom iv, - u3_atom msg) - { - c3_y key_y[24]; - u3r_bytes(0, 24, key_y, key); - return _cqea_cbc_help(key_y, iv, msg, &urcrypt_aes_cbcb_de); - } - - u3_noun - u3wea_cbcb_de(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam, &c, 60, &a, 61, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("cbcb-de", _cqea_cbcb_de(a, b, c)); - } - } - - static u3_atom - _cqea_cbcc_en(u3_atom key, - u3_atom iv, - u3_atom msg) - { - c3_y key_y[32]; - u3r_bytes(0, 32, key_y, key); - return _cqea_cbc_help(key_y, iv, msg, &urcrypt_aes_cbcc_en); - } - - u3_noun - u3wea_cbcc_en(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam, &c, 60, &a, 61, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("cbcc-en", _cqea_cbcc_en(a, b, c)); - } - } - - static u3_atom - _cqea_cbcc_de(u3_atom key, - u3_atom iv, - u3_atom msg) - { - c3_y key_y[32]; - u3r_bytes(0, 32, key_y, key); - return _cqea_cbc_help(key_y, iv, msg, &urcrypt_aes_cbcc_de); - } - - u3_noun - u3wea_cbcc_de(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam, &c, 60, &a, 61, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("cbcc-de", _cqea_cbcc_de(a, b, c)); - } - } diff --git a/pkg/urbit/jets/e/aes_ecb.c b/pkg/urbit/jets/e/aes_ecb.c deleted file mode 100644 index d350bc808..000000000 --- a/pkg/urbit/jets/e/aes_ecb.c +++ /dev/null @@ -1,166 +0,0 @@ -/* j/5/aes_ecb.c -** -*/ -#include "all.h" -#include - -typedef int (*urcrypt_ecb)(c3_y*, c3_y[16], c3_y[16]); - -/* functions -*/ - - /* All of the ECB hoon truncates its key and blk inputs with +fe, in these - * jets we unpack with an unconditional u3r_bytes */ - - static u3_atom - _cqea_ecb_help(c3_y* key_y, u3_atom blk, urcrypt_ecb low_f) - { - c3_y blk_y[16], out_y[16]; - - u3r_bytes(0, 16, blk_y, blk); - - if ( 0 != (*low_f)(key_y, blk_y, out_y) ) { - return u3_none; - } - else { - return u3i_bytes(16, out_y); - } - } - - static u3_atom - _cqea_ecba_en(u3_atom key, - u3_atom blk) - { - c3_y key_y[16]; - u3r_bytes(0, 16, key_y, key); - return _cqea_ecb_help(key_y, blk, &urcrypt_aes_ecba_en); - } - - u3_noun - u3wea_ecba_en(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("ecba-en", _cqea_ecba_en(a, b)); - } - } - - static u3_atom - _cqea_ecba_de(u3_atom key, - u3_atom blk) - { - c3_y key_y[16]; - u3r_bytes(0, 16, key_y, key); - return _cqea_ecb_help(key_y, blk, &urcrypt_aes_ecba_de); - } - - u3_noun - u3wea_ecba_de(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("ecba-de", _cqea_ecba_de(a, b)); - } - } - - static u3_atom - _cqea_ecbb_en(u3_atom key, - u3_atom blk) - { - c3_y key_y[24]; - u3r_bytes(0, 24, key_y, key); - return _cqea_ecb_help(key_y, blk, &urcrypt_aes_ecbb_en); - } - - u3_noun - u3wea_ecbb_en(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("ecbb-en", _cqea_ecbb_en(a, b)); - } - } - - static u3_atom - _cqea_ecbb_de(u3_atom key, - u3_atom blk) - { - c3_y key_y[24]; - u3r_bytes(0, 24, key_y, key); - return _cqea_ecb_help(key_y, blk, &urcrypt_aes_ecbb_de); - } - - u3_noun - u3wea_ecbb_de(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("ecbb-de", _cqea_ecbb_de(a, b)); - } - } - - static u3_atom - _cqea_ecbc_en(u3_atom key, - u3_atom blk) - { - c3_y key_y[32]; - u3r_bytes(0, 32, key_y, key); - return _cqea_ecb_help(key_y, blk, &urcrypt_aes_ecbc_en); - } - - u3_noun - u3wea_ecbc_en(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("ecbc-en", _cqea_ecbc_en(a, b)); - } - } - - static u3_atom - _cqea_ecbc_de(u3_atom key, - u3_atom blk) - { - c3_y key_y[32]; - u3r_bytes(0, 32, key_y, key); - return _cqea_ecb_help(key_y, blk, &urcrypt_aes_ecbc_de); - } - - u3_noun - u3wea_ecbc_de(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("ecbc-de", _cqea_ecbc_de(a, b)); - } - } diff --git a/pkg/urbit/jets/e/aes_siv.c b/pkg/urbit/jets/e/aes_siv.c deleted file mode 100644 index a891eb431..000000000 --- a/pkg/urbit/jets/e/aes_siv.c +++ /dev/null @@ -1,368 +0,0 @@ -/* j/5/aes_ecb.c -** -*/ -#include "all.h" -#include - -typedef int (*urcrypt_siv)(c3_y*, size_t, - urcrypt_aes_siv_data*, size_t, - c3_y*, c3_y[16], c3_y*); - -/* functions -*/ - -// soc_w = number of items -// mat_w = size in bytes of assoc array -// dat_w = size of allocation (array + atom storage) -static void -_cqea_measure_ads(u3_noun ads, c3_w* soc_w, c3_w *mat_w, c3_w *dat_w) -{ - u3_noun i, t; - c3_w a_w, b_w, tmp_w, met_w; - - for ( a_w = b_w = 0, t = ads; u3_nul != t; ++a_w ) { - u3x_cell(t, &i, &t); - if ( c3n == u3ud(i) ) { - u3m_bail(c3__exit); - return; - } - else { - tmp_w = b_w; - b_w += u3r_met(3, i); - if ( b_w < tmp_w ) { - u3m_bail(c3__fail); - return; - } - } - } - - // check for size overflows - tmp_w = a_w * sizeof(urcrypt_aes_siv_data); - if ( (tmp_w / a_w) != sizeof(urcrypt_aes_siv_data) ) { - u3m_bail(c3__fail); - } - else if ( (*dat_w = tmp_w + b_w) < tmp_w ) { - u3m_bail(c3__fail); - } - else { - *soc_w = a_w; - *mat_w = tmp_w; - } -} - -// assumes ads is a valid (list @) because it's already been measured -static void -_cqea_encode_ads(u3_noun ads, - c3_w mat_w, - urcrypt_aes_siv_data *dat_u) -{ - c3_w met_w; - u3_noun i, t; - urcrypt_aes_siv_data *cur_u; - c3_y *dat_y = ((c3_y*) dat_u) + mat_w; - - for ( cur_u = dat_u, t = ads; u3_nul != t; t = u3t(t), ++cur_u ) { - i = u3h(t); - met_w = u3r_met(3, i); - u3r_bytes(0, met_w, dat_y, i); - cur_u->length = met_w; - cur_u->bytes = dat_y; - dat_y += met_w; - } -} - -static void -_cqea_ads_free(urcrypt_aes_siv_data *dat_u) -{ - if ( NULL != dat_u ) { - u3a_free(dat_u); - } -} - -static urcrypt_aes_siv_data* -_cqea_ads_alloc(u3_noun ads, c3_w *soc_w) -{ - if ( !ads ) { - *soc_w = 0; - return NULL; - } - else { - c3_w mat_w, dat_w; - urcrypt_aes_siv_data *dat_u; - - _cqea_measure_ads(ads, soc_w, &mat_w, &dat_w); - dat_u = u3a_malloc(dat_w); - _cqea_encode_ads(ads, mat_w, dat_u); - return dat_u; - } -} - -static u3_noun -_cqea_siv_en(c3_y* key_y, - c3_w key_w, - u3_noun ads, - u3_atom txt, - urcrypt_siv low_f) -{ - u3_noun ret; - c3_w txt_w, soc_w; - c3_y *txt_y, *out_y, iv_y[16]; - urcrypt_aes_siv_data *dat_u; - - dat_u = _cqea_ads_alloc(ads, &soc_w); - txt_y = u3r_bytes_all(&txt_w, txt); - out_y = u3a_malloc(txt_w); - - ret = ( 0 != (*low_f)(txt_y, txt_w, dat_u, soc_w, key_y, iv_y, out_y) ) - ? u3_none - : u3nt(u3i_bytes(16, iv_y), - u3i_words(1, &txt_w), - u3i_bytes(txt_w, out_y)); - - u3a_free(txt_y); - u3a_free(out_y); - _cqea_ads_free(dat_u); - return ret; -} - -static u3_noun -_cqea_siv_de(c3_y* key_y, - c3_w key_w, - u3_noun ads, - u3_atom iv, - u3_atom len, - u3_atom txt, - urcrypt_siv low_f) -{ - c3_w txt_w; - if ( !u3r_word_fit(&txt_w, len) ) { - return u3m_bail(c3__fail); - } - else { - u3_noun ret; - c3_w soc_w; - c3_y *txt_y, *out_y, iv_y[16]; - urcrypt_aes_siv_data *dat_u; - - u3r_bytes(0, 16, iv_y, iv); - dat_u = _cqea_ads_alloc(ads, &soc_w); - txt_y = u3r_bytes_alloc(0, txt_w, txt); - out_y = u3a_malloc(txt_w); - - ret = ( 0 != (*low_f)(txt_y, txt_w, dat_u, soc_w, key_y, iv_y, out_y) ) - ? u3_none - : u3nc(0, u3i_bytes(txt_w, out_y)); - - u3a_free(txt_y); - u3a_free(out_y); - _cqea_ads_free(dat_u); - - return ret; - } -} - -// the siv* hoon doesn't explicitly check keysizes, but all of these functions -// have fixed maximum keysizes, so we will punt if we get a key that is too -// large. - -static u3_noun -_cqea_siva_en(u3_atom key, - u3_noun ads, - u3_atom txt) -{ - if ( u3r_met(3, key) > 32 ) { - return u3_none; - } - else { - c3_y key_y[32]; - u3r_bytes(0, 32, key_y, key); - return _cqea_siv_en(key_y, 32, ads, txt, &urcrypt_aes_siva_en); - } -} - -u3_noun -u3wea_siva_en(u3_noun cor) -{ - u3_noun key, ads, txt; - - if ( c3n == u3r_mean(cor, u3x_sam, &txt, - u3x_con_sam_2, &key, - u3x_con_sam_3, &ads, 0) || - c3n == u3ud(key) || - c3n == u3ud(txt) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("siva-en", _cqea_siva_en(key, ads, txt)); - } -} - -static u3_noun -_cqea_siva_de(u3_atom key, - u3_noun ads, - u3_atom iv, - u3_atom len, - u3_atom txt) -{ - if ( u3r_met(3, key) > 32 ) { - return u3_none; - } - else { - c3_y key_y[32]; - u3r_bytes(0, 32, key_y, key); - return _cqea_siv_de(key_y, 32, ads, iv, len, txt, &urcrypt_aes_siva_de); - } -} - -u3_noun -u3wea_siva_de(u3_noun cor) -{ - u3_noun key, ads, iv, len, txt; - - if ( c3n == u3r_mean(cor, - u3x_sam_2, &iv, - u3x_sam_6, &len, - u3x_sam_7, &txt, - u3x_con_sam_2, &key, - u3x_con_sam_3, &ads, 0) || - c3n == u3ud(key) || - c3n == u3ud(txt) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("siva-de", _cqea_siva_de(key, ads, iv, len, txt)); - } -} - -static u3_noun -_cqea_sivb_en(u3_atom key, - u3_noun ads, - u3_atom txt) -{ - if ( u3r_met(3, key) > 48 ) { - return u3_none; - } - else { - c3_y key_y[48]; - u3r_bytes(0, 48, key_y, key); - return _cqea_siv_en(key_y, 48, ads, txt, &urcrypt_aes_sivb_en); - } -} - - -u3_noun -u3wea_sivb_en(u3_noun cor) -{ - u3_noun key, ads, txt; - - if ( c3n == u3r_mean(cor, u3x_sam, &txt, - u3x_con_sam_2, &key, - u3x_con_sam_3, &ads, 0) || - c3n == u3ud(key) || - c3n == u3ud(txt) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("sivb-en", _cqea_sivb_en(key, ads, txt)); - } -} - -static u3_noun -_cqea_sivb_de(u3_atom key, - u3_noun ads, - u3_atom iv, - u3_atom len, - u3_atom txt) -{ - if ( u3r_met(3, key) > 48 ) { - return u3_none; - } - else { - c3_y key_y[48]; - u3r_bytes(0, 48, key_y, key); - return _cqea_siv_de(key_y, 48, ads, iv, len, txt, &urcrypt_aes_sivb_de); - } -} - -u3_noun -u3wea_sivb_de(u3_noun cor) -{ - u3_noun key, ads, iv, len, txt; - - if ( c3n == u3r_mean(cor, - u3x_sam_2, &iv, - u3x_sam_6, &len, - u3x_sam_7, &txt, - u3x_con_sam_2, &key, - u3x_con_sam_3, &ads, 0) || - c3n == u3ud(key) || - c3n == u3ud(txt) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("sivb-de", _cqea_sivb_de(key, ads, iv, len, txt)); - } -} - -static u3_noun -_cqea_sivc_en(u3_atom key, - u3_noun ads, - u3_atom txt) -{ - if ( u3r_met(3, key) > 64 ) { - return u3_none; - } - else { - c3_y key_y[64]; - u3r_bytes(0, 64, key_y, key); - return _cqea_siv_en(key_y, 64, ads, txt, &urcrypt_aes_sivc_en); - } -} - -u3_noun -u3wea_sivc_en(u3_noun cor) -{ - u3_noun key, ads, txt; - - if ( c3n == u3r_mean(cor, u3x_sam, &txt, - u3x_con_sam_2, &key, - u3x_con_sam_3, &ads, 0) || - c3n == u3ud(key) || - c3n == u3ud(txt) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("sivc-en", _cqea_sivc_en(key, ads, txt)); - } -} - -static u3_noun -_cqea_sivc_de(u3_atom key, - u3_noun ads, - u3_atom iv, - u3_atom len, - u3_atom txt) -{ - if ( u3r_met(3, key) > 64 ) { - return u3_none; - } - else { - c3_y key_y[64]; - u3r_bytes(0, 64, key_y, key); - return _cqea_siv_de(key_y, 64, ads, iv, len, txt, &urcrypt_aes_sivc_de); - } -} - -u3_noun -u3wea_sivc_de(u3_noun cor) -{ - u3_noun key, ads, iv, len, txt; - - if ( c3n == u3r_mean(cor, - u3x_sam_2, &iv, - u3x_sam_6, &len, - u3x_sam_7, &txt, - u3x_con_sam_2, &key, - u3x_con_sam_3, &ads, 0) || - c3n == u3ud(key) || - c3n == u3ud(txt) ) { - return u3m_bail(c3__exit); - } else { - return u3l_punt("sivc-de", _cqea_sivc_de(key, ads, iv, len, txt)); - } -} diff --git a/pkg/urbit/jets/e/argon2.c b/pkg/urbit/jets/e/argon2.c deleted file mode 100644 index 6f4316ad1..000000000 --- a/pkg/urbit/jets/e/argon2.c +++ /dev/null @@ -1,151 +0,0 @@ -/* j/5/argon2.c -** -*/ -#include "all.h" -#include - -/* helpers -*/ - - static int - argon2_alloc(uint8_t** output, size_t bytes) - { - *output = u3a_malloc(bytes); - return 1; - } - - static void - argon2_free(uint8_t* memory, size_t bytes) - { - u3a_free(memory); - } - - static c3_t - _cqear_unpack_type(c3_y* out, u3_atom in) - { - switch ( in ) { - default: - return 0; - case c3__d: - *out = urcrypt_argon2_d; - return 1; - case c3__i: - *out = urcrypt_argon2_i; - return 1; - case c3__id: - *out = urcrypt_argon2_id; - return 1; - case c3__u: - *out = urcrypt_argon2_u; - return 1; - } - } - -/* functions -*/ - - static u3_atom - _cqe_argon2( // configuration params, - u3_atom out, u3_atom type, u3_atom version, - u3_atom threads, u3_atom mem_cost, u3_atom time_cost, - u3_atom wik, u3_atom key, u3_atom wix, u3_atom extra, - // input params - u3_atom wid, u3_atom dat, u3_atom wis, u3_atom sat ) - { - c3_y typ_u; - c3_w out_w, wik_w, wix_w, wid_w, wis_w, ver_w, ted_w, mem_w, tim_w; - - if ( !(u3r_word_fit(&out_w, out) && - u3r_word_fit(&wik_w, wik) && - u3r_word_fit(&wix_w, wix) && - u3r_word_fit(&wid_w, wid) && - u3r_word_fit(&wis_w, wis)) ) { - // too big to allocate - return u3m_bail(c3__fail); - } - else if ( !(_cqear_unpack_type(&typ_u, type) && - u3r_word_fit(&ver_w, version) && - u3r_word_fit(&ted_w, threads) && - u3r_word_fit(&mem_w, mem_cost) && - u3r_word_fit(&tim_w, time_cost)) ) { - return u3_none; - } - else { - u3_atom ret; - c3_y *key_y = u3r_bytes_alloc(0, wik_w, key), - *ex_y = u3r_bytes_alloc(0, wix_w, extra), - *dat_y = u3r_bytes_alloc(0, wid_w, dat), - *sat_y = u3r_bytes_alloc(0, wis_w, sat), - *out_y = u3a_malloc(out_w); - - const c3_c* err_c = urcrypt_argon2( - typ_u, ver_w, ted_w, mem_w, tim_w, - wik_w, key_y, - wix_w, ex_y, - wid_w, dat_y, - wis_w, sat_y, - out_w, out_y, - &argon2_alloc, - &argon2_free); - - u3a_free(key_y); - u3a_free(ex_y); - u3a_free(dat_y); - u3a_free(sat_y); - - if ( NULL == err_c ) { - ret = u3i_bytes(out_w, out_y); - } - else { - ret = u3_none; - u3l_log("argon2-error: %s\r\n", err_c); - } - - u3a_free(out_y); - return ret; - } - } - - u3_noun - u3we_argon2(u3_noun cor) - { - u3_noun // configuration params - out, type, version, - threads, mem_cost, time_cost, - wik, key, wix, extra, - // input params - wid, dat, wis, sat, - // for use during unpacking - wmsg, wsat, arg, brg, wkey, wext; - - // the hoon code for argon2 takes configuration parameters, - // and then produces a gate. we jet that inner gate. - // this does mean that the config params have gotten buried - // pretty deep in the subject, hence the +510. - if ( c3n == u3r_mean(cor, u3x_sam_2, &wmsg, - u3x_sam_3, &wsat, - 510, &arg, 0) || - u3r_cell(wmsg, &wid, &dat) || u3ud(wid) || u3ud(dat) || - u3r_cell(wsat, &wis, &sat) || u3ud(wis) || u3ud(sat) || - // - u3r_qual(arg, &out, &type, &version, &brg) || - u3ud(out) || u3ud(type) || u3ud(version) || - // - u3r_qual(brg, &threads, &mem_cost, &time_cost, &arg) || - u3ud(threads) || u3ud(mem_cost) || u3ud(time_cost) || - // - u3r_cell(arg, &wkey, &wext) || - u3r_cell(wkey, &wik, &key) || u3ud(wik) || u3ud(key) || - u3r_cell(wext, &wix, &extra) || u3ud(wix) || u3ud(extra) - ) - { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("argon2", - _cqe_argon2(out, type, version, - threads, mem_cost, time_cost, - wik, key, wix, extra, - wid, dat, wis, sat)); - } - } diff --git a/pkg/urbit/jets/e/base.c b/pkg/urbit/jets/e/base.c deleted file mode 100644 index 021b055cc..000000000 --- a/pkg/urbit/jets/e/base.c +++ /dev/null @@ -1,153 +0,0 @@ -/* j/5/base.c -** -*/ -#include "all.h" - -const c3_y hex_y[16] = { '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - -u3_noun -u3qe_en_base16(u3_atom len, u3_atom dat) -{ - if ( c3n == u3a_is_cat(len) ) { - return u3m_bail(c3__fail); - } - else { - c3_w len_w = (c3_w)len; - u3i_slab sab_u; - - u3i_slab_bare(&sab_u, 4, len_w); - sab_u.buf_w[sab_u.len_w - 1] = 0; - - { - c3_y* buf_y = sab_u.buf_y; - c3_y inp_y; - - while ( len_w-- ) { - inp_y = u3r_byte(len_w, dat); - - *buf_y++ = hex_y[inp_y >> 4]; - *buf_y++ = hex_y[inp_y & 0xf]; - } - } - - return u3i_slab_moot_bytes(&sab_u); - } -} - -static inline c3_o -_of_hex_digit(c3_y inp_y, c3_y* out_y) -{ - if ( inp_y >= '0' && inp_y <= '9' ) { - *out_y = inp_y - '0'; - return c3y; - } - else if ( inp_y >= 'a' && inp_y <= 'f' ) { - *out_y = inp_y - 87; - return c3y; - } - else if ( inp_y >= 'A' && inp_y <= 'F' ) { - *out_y = inp_y - 55; - return c3y; - } - - return c3n; -} - -static inline c3_o -_of_hex_odd(u3_atom inp, c3_w len_w, c3_w byt_w, c3_y* buf_y) -{ - c3_y low_y, hig_y, lit_y, hit_y; - - hig_y = u3r_byte(--byt_w, inp); - - while ( --len_w ) { - low_y = u3r_byte(--byt_w, inp); - - if ( (c3n == _of_hex_digit(low_y, &lit_y)) - || (c3n == _of_hex_digit(hig_y, &hit_y)) ) - { - return c3n; - } - else { - *buf_y++ = (hit_y & 0xf) ^ (lit_y << 4); - } - - hig_y = u3r_byte(--byt_w, inp); - } - - if ( c3n == _of_hex_digit(hig_y, &hit_y) ) { - return c3n; - } - else { - *buf_y = hit_y & 0xf; - } - - return c3y; -} - -static inline c3_o -_of_hex_even(u3_atom inp, c3_w len_w, c3_y* buf_y) -{ - c3_y lit_y, hit_y; - c3_s inp_s; - - while ( len_w-- ) { - inp_s = u3r_short(len_w, inp); - - if ( (c3n == _of_hex_digit(inp_s & 0xff, &lit_y)) - || (c3n == _of_hex_digit(inp_s >> 8, &hit_y)) ) - { - return c3n; - } - else { - *buf_y++ = (hit_y & 0xf) ^ (lit_y << 4); - } - } - - return c3y; -} - -u3_noun -u3qe_de_base16(u3_atom inp) -{ - c3_w len_w = u3r_met(4, inp); - u3i_slab sab_u; - - u3i_slab_bare(&sab_u, 3, len_w); - sab_u.buf_w[sab_u.len_w - 1] = 0; - - // even byte-length input can be parsed in aligned, 16-bit increments, - // but odd byte-length input cannot, and is expressed more simply in bytes. - // - { - c3_w byt_w = u3r_met(3, inp); - c3_o ret_o = ( byt_w & 1 ) - ? _of_hex_odd(inp, len_w, byt_w, sab_u.buf_y) - : _of_hex_even(inp, len_w, sab_u.buf_y); - - if ( c3n == ret_o ) { - u3i_slab_free(&sab_u); - return u3_nul; - } - else { - u3_noun dat = u3i_slab_mint_bytes(&sab_u); - return u3nt(u3_nul, u3i_word(len_w), dat); - } - } -} - -u3_noun -u3we_en_base16(u3_noun cor) -{ - u3_noun a, b; - u3x_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0); - return u3qe_en_base16(u3x_atom(a), u3x_atom(b)); -} - -u3_noun -u3we_de_base16(u3_noun cor) -{ - u3_noun sam = u3x_at(u3x_sam, cor); - return u3qe_de_base16(u3x_atom(sam)); -} diff --git a/pkg/urbit/jets/e/blake.c b/pkg/urbit/jets/e/blake.c deleted file mode 100644 index 1770a3f89..000000000 --- a/pkg/urbit/jets/e/blake.c +++ /dev/null @@ -1,60 +0,0 @@ -/* j/5/blake.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - - static u3_atom - _cqe_blake(u3_atom wid, u3_atom dat, - u3_atom wik, u3_atom dak, - u3_atom out) - { - c3_w wid_w; - if ( !u3r_word_fit(&wid_w, wid) ) { - // impossible to represent an atom this large - return u3m_bail(c3__fail); - } - else { - // the hoon adjusts these widths to its liking - int err; - u3_atom ret; - c3_y out_y[64], dak_y[64]; - c3_w wik_w = c3_min(wik, 64), - out_w = c3_max(1, c3_min(out, 64)); - c3_y *dat_y = u3r_bytes_alloc(0, wid_w, dat); - - u3r_bytes(0, wik_w, dak_y, dak); - err = urcrypt_blake2(wid_w, dat_y, wik_w, dak_y, out_w, out_y); - u3a_free(dat_y); - - if ( 0 == err ) { - return u3i_bytes(out_w, out_y); - } - else { - return u3_none; - } - } - } - - u3_noun - u3we_blake(u3_noun cor) - { - u3_noun msg, key, out, // arguments - wid, dat, // destructured msg - wik, dak; // destructured key - - if ( c3n == u3r_mean(cor, u3x_sam_2, &msg, - u3x_sam_6, &key, - u3x_sam_7, &out, 0) || - u3r_cell(msg, &wid, &dat) || u3ud(wid) || u3ud(dat) || - u3r_cell(key, &wik, &dak) || u3ud(wik) || u3ud(dak) || - u3ud(out) ) - { - return u3m_bail(c3__exit); - } else { - return u3l_punt("blake", _cqe_blake(wid, dat, wik, dak, out)); - } - } diff --git a/pkg/urbit/jets/e/cue.c b/pkg/urbit/jets/e/cue.c deleted file mode 100644 index eab7ac031..000000000 --- a/pkg/urbit/jets/e/cue.c +++ /dev/null @@ -1,24 +0,0 @@ -/* j/5/cue.c -** -*/ -#include "all.h" - -u3_noun -u3qe_cue(u3_atom a) -{ - return u3s_cue_atom(a); -} - -u3_noun -u3we_cue(u3_noun cor) -{ - return u3qe_cue(u3x_at(u3x_sam, cor)); -} - -u3_noun -u3ke_cue(u3_atom a) -{ - u3_noun b = u3qe_cue(a); - u3z(a); - return b; -} diff --git a/pkg/urbit/jets/e/ed_add_double_scalarmult.c b/pkg/urbit/jets/e/ed_add_double_scalarmult.c deleted file mode 100644 index e3f01950d..000000000 --- a/pkg/urbit/jets/e/ed_add_double_scalarmult.c +++ /dev/null @@ -1,47 +0,0 @@ -/* gen164/5/ed_add_double_scalarmult.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_atom - _cqee_add_double_scalarmult(u3_atom a, - u3_atom b, - u3_atom c, - u3_atom d) - { - c3_y a_y[32], b_y[32], c_y[32], d_y[32], out_y[32]; - - if ( (0 != u3r_bytes_fit(32, a_y, a)) || - (0 != u3r_bytes_fit(32, b_y, b)) || - (0 != u3r_bytes_fit(32, c_y, c)) || - (0 != u3r_bytes_fit(32, d_y, d)) || - (0 != urcrypt_ed_add_double_scalarmult(a_y, b_y, c_y, d_y, out_y)) ) { - return u3_none; - } - else { - return u3i_bytes(32, out_y); - } - } - - u3_noun - u3wee_add_double_scalarmult(u3_noun cor) - { - u3_noun a, b, c, d; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, - u3x_sam_6, &b, - u3x_sam_14, &c, - u3x_sam_15, &d, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) || - (c3n == u3ud(c)) ) - { - return u3m_bail(c3__exit); - } else { - return u3l_punt("add-double-scalarmult", - _cqee_add_double_scalarmult(a, b, c, d)); - } - } diff --git a/pkg/urbit/jets/e/ed_add_scalarmult_scalarmult_base.c b/pkg/urbit/jets/e/ed_add_scalarmult_scalarmult_base.c deleted file mode 100644 index 26dd69994..000000000 --- a/pkg/urbit/jets/e/ed_add_scalarmult_scalarmult_base.c +++ /dev/null @@ -1,44 +0,0 @@ -/* gen164/5/ed_double_scalarmult.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_atom - _cqee_add_scalarmult_scalarmult_base(u3_atom a, - u3_atom b, - u3_atom c) - { - c3_y a_y[32], b_y[32], c_y[32], out_y[32]; - - if ( (0 != u3r_bytes_fit(32, a_y, a)) || - (0 != u3r_bytes_fit(32, b_y, b)) || - (0 != u3r_bytes_fit(32, c_y, c)) || - (0 != urcrypt_ed_add_scalarmult_scalarmult_base(a_y, b_y, c_y, out_y)) ) { - return u3_none; - } - else { - return u3i_bytes(32, out_y); - } - } - - u3_noun - u3wee_add_scalarmult_scalarmult_base(u3_noun cor) - { - u3_noun a, b, c; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, - u3x_sam_6, &b, - u3x_sam_7, &c, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) || - (c3n == u3ud(c)) ) - { - return u3m_bail(c3__exit); - } else { - return u3l_punt("add-scalarmult-scalarmult-base", - _cqee_add_scalarmult_scalarmult_base(a, b, c)); - } - } diff --git a/pkg/urbit/jets/e/ed_point_add.c b/pkg/urbit/jets/e/ed_point_add.c deleted file mode 100644 index dfa52502e..000000000 --- a/pkg/urbit/jets/e/ed_point_add.c +++ /dev/null @@ -1,40 +0,0 @@ -/* gen164/5/ed_point_add.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - - static u3_atom - _cqee_point_add(u3_atom a, - u3_atom b) - { - c3_y a_y[32], b_y[32], out_y[32]; - - if ( (0 != u3r_bytes_fit(32, a_y, a)) || - (0 != u3r_bytes_fit(32, b_y, b)) || - (0 != urcrypt_ed_point_add(a_y, b_y, out_y)) ) { - return u3_none; - } - else { - return u3i_bytes(32, out_y); - } - } - - u3_noun - u3wee_point_add(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, - u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return u3l_punt("point-add", _cqee_point_add(a, b)); - } - } diff --git a/pkg/urbit/jets/e/ed_puck.c b/pkg/urbit/jets/e/ed_puck.c deleted file mode 100644 index 436650e1a..000000000 --- a/pkg/urbit/jets/e/ed_puck.c +++ /dev/null @@ -1,36 +0,0 @@ -/* gen164/5/ed_puck.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_atom - _cqee_puck(u3_atom sed) - { - c3_y sed_y[32]; - - if ( 0 != u3r_bytes_fit(32, sed_y, sed) ) { - // hoon explicitly crashes on mis-size - return u3m_bail(c3__exit); - } - else { - c3_y pub_y[32]; - urcrypt_ed_puck(sed_y, pub_y); - return u3i_bytes(32, pub_y); - } - } - - u3_noun - u3wee_puck(u3_noun cor) - { - u3_noun a = u3r_at(u3x_sam, cor); - - if ( (u3_none == a) || (c3n == u3ud(a)) ) { - return u3m_bail(c3__exit); - } - else { - return _cqee_puck(a); - } - } diff --git a/pkg/urbit/jets/e/ed_scalarmult.c b/pkg/urbit/jets/e/ed_scalarmult.c deleted file mode 100644 index 136d51af2..000000000 --- a/pkg/urbit/jets/e/ed_scalarmult.c +++ /dev/null @@ -1,40 +0,0 @@ -/* gen164/5/ed_scalarmult.c -** -*/ -#include "all.h" -#include "urcrypt.h" - -/* functions -*/ - static u3_atom - _cqee_scalarmult(u3_atom a, - u3_atom b) - { - c3_y a_y[32], b_y[32], out_y[32]; - - if ( (0 != u3r_bytes_fit(32, a_y, a)) || - (0 != u3r_bytes_fit(32, b_y, b)) || - (0 != urcrypt_ed_scalarmult(a_y, b_y, out_y)) ) { - // hoon does not check size of inputs - return u3_none; - } - else { - return u3i_bytes(32, out_y); - } - } - - u3_noun - u3wee_scalarmult(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, - u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return u3l_punt("scalarmult", _cqee_scalarmult(a, b)); - } - } diff --git a/pkg/urbit/jets/e/ed_scalarmult_base.c b/pkg/urbit/jets/e/ed_scalarmult_base.c deleted file mode 100644 index 965ba8b22..000000000 --- a/pkg/urbit/jets/e/ed_scalarmult_base.c +++ /dev/null @@ -1,35 +0,0 @@ -/* gen164/5/ed_scalarmult_base.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_atom - _cqee_scalarmult_base(u3_atom a) - { - c3_y a_y[32]; - - if ( 0 != u3r_bytes_fit(32, a_y, a) ) { - return u3_none; - } - else { - c3_y out_y[32]; - urcrypt_ed_scalarmult_base(a_y, out_y); - return u3i_bytes(32, out_y); - } - } - - u3_noun - u3wee_scalarmult_base(u3_noun cor) - { - u3_noun a = u3r_at(u3x_sam, cor); - - if ( (u3_none == a) || (c3n == u3ud(a)) ) { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("scalarmult-base", _cqee_scalarmult_base(a)); - } - } diff --git a/pkg/urbit/jets/e/ed_shar.c b/pkg/urbit/jets/e/ed_shar.c deleted file mode 100644 index e26b0627c..000000000 --- a/pkg/urbit/jets/e/ed_shar.c +++ /dev/null @@ -1,40 +0,0 @@ -/* j/5/shar.c -** -*/ -#include "all.h" -#include - - static u3_atom - _cqee_shar(u3_atom pub, u3_atom sek) - { - c3_y pub_y[32], sek_y[32]; - - if ( 0 != u3r_bytes_fit(32, pub_y, pub) ) { - // pub is not size checked in the hoon - return u3_none; - } - else if ( 0 != u3r_bytes_fit(32, sek_y, sek) ) { - // sek explicitly bails through suck - return u3m_bail(c3__exit); - } - else { - c3_y shr_y[32]; - urcrypt_ed_shar(pub_y, sek_y, shr_y); - return u3i_bytes(32, shr_y); - } - } - - u3_noun - u3wee_shar(u3_noun cor) - { - u3_noun pub, sek; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &pub, u3x_sam_3, &sek, 0)) || - (c3n == u3ud(pub)) || - (c3n == u3ud(sek)) ) - { - return u3m_bail(c3__exit); - } else { - return u3l_punt("shar", _cqee_shar(pub, sek)); - } - } diff --git a/pkg/urbit/jets/e/ed_sign.c b/pkg/urbit/jets/e/ed_sign.c deleted file mode 100644 index 09fd317d0..000000000 --- a/pkg/urbit/jets/e/ed_sign.c +++ /dev/null @@ -1,41 +0,0 @@ -/* gen164/5/ed_sign.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_atom - _cqee_sign(u3_noun a, - u3_noun b) - { - c3_y sed_y[32]; - - if ( 0 != u3r_bytes_fit(32, sed_y, b) ) { - // hoon calls suck, which calls puck, which crashes - return u3m_bail(c3__exit); - } - else { - c3_y sig_y[64]; - c3_w met_w; - c3_y* mes_y = u3r_bytes_all(&met_w, a); - - urcrypt_ed_sign(mes_y, met_w, sed_y, sig_y); - u3a_free(mes_y); - - return u3i_bytes(64, sig_y); - } - } - - u3_noun - u3wee_sign(u3_noun cor) - { - u3_noun a, b; - if ( c3n == u3r_mean(cor, - u3x_sam_2, &a, u3x_sam_3, &b, 0) ) { - return u3m_bail(c3__fail); - } else { - return _cqee_sign(a, b); - } - } diff --git a/pkg/urbit/jets/e/ed_veri.c b/pkg/urbit/jets/e/ed_veri.c deleted file mode 100644 index 51ac20c13..000000000 --- a/pkg/urbit/jets/e/ed_veri.c +++ /dev/null @@ -1,42 +0,0 @@ -/* gen164/5/ed_veri.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_atom - _cqee_veri(u3_noun s, - u3_noun m, - u3_noun pk) - { - c3_y sig_y[64], pub_y[32]; - - if ( (0 != u3r_bytes_fit(64, sig_y, s)) || - (0 != u3r_bytes_fit(32, pub_y, pk)) ) { - // hoon checks sizes, but weirdly and without crashes - return u3_none; - } - else { - c3_w met_w; - c3_y* mes_y = u3r_bytes_all(&met_w, m); - c3_t val_t = urcrypt_ed_veri(mes_y, met_w, pub_y, sig_y); - u3a_free(mes_y); - - return val_t ? c3y : c3n; - } - } - - u3_noun - u3wee_veri(u3_noun cor) - { - u3_noun a, b, c; - if ( c3n == u3r_mean(cor, - u3x_sam_2, &a, u3x_sam_6, &b, - u3x_sam_7, &c, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3l_punt("veri", _cqee_veri(a, b, c)); - } - } diff --git a/pkg/urbit/jets/e/fein_ob.c b/pkg/urbit/jets/e/fein_ob.c deleted file mode 100644 index 80e113512..000000000 --- a/pkg/urbit/jets/e/fein_ob.c +++ /dev/null @@ -1,88 +0,0 @@ -/* j/3/fein.c -** -*/ -#include "all.h" -#include - -// +feis:ob constant parameters to +fe:ob -// -static const c3_w a_w = 0xffff; -static const c3_w b_w = 0x10000; -static const c3_w k_w = 0xffff0000; - -// +raku:ob -// -static const c3_w rak_w[4] = { 0xb76d5eed, 0xee281300, 0x85bcae01, 0x4b387af7 }; - -/* _fe_ob(): +fe:ob, with constant parameters factored out. -** correct over the domain [0x0, 0xfffe.ffff] -*/ -static c3_w -_fe_ob(c3_w m_w) -{ - c3_w l_w = m_w % a_w; - c3_w r_w = m_w / a_w; - c3_w f_w, t_w; - c3_y j_y, k_y[2]; - - for ( j_y = 0; j_y < 4; j_y++ ) { - k_y[0] = r_w & 0xff; - k_y[1] = (r_w >> 8) & 0xff; - - MurmurHash3_x86_32(k_y, 2, rak_w[j_y], &f_w); - - // NB: this addition can overflow a c3_w (before mod) - // - t_w = ((c3_d)f_w + l_w) % (!(j_y & 1) ? a_w : b_w); - l_w = r_w; - r_w = t_w; - } - - // legendary @max19 - // - return ( a_w == r_w ) - ? (r_w * a_w) + l_w - : (l_w * a_w) + r_w; -} - -/* _feis_ob(): +feis:ob, also offsetting by 0x1.000 (as in +fein:ob). -** correct over the domain [0x1.0000, 0xffff.ffff] -*/ -static c3_w -_feis_ob(c3_w m_w) -{ - c3_w c_w = _fe_ob(m_w - b_w); - return b_w + (( c_w < k_w ) ? c_w : _fe_ob(c_w)); -} - -u3_atom -u3qe_fein_ob(u3_atom pyn) -{ - c3_w sor_w = u3r_met(4, pyn); - - if ( (sor_w < 2) || (sor_w > 4) ) { - return u3k(pyn); - } - - if ( 2 == sor_w ) { - return u3i_word(_feis_ob(u3r_word(0, pyn))); - } - else { - c3_w pyn_w[2]; - u3r_words(0, 2, pyn_w, pyn); - - if ( pyn_w[0] < b_w ) { - return u3k(pyn); - } - else { - pyn_w[0] = _feis_ob(pyn_w[0]); - return u3i_words(2, pyn_w); - } - } -} - -u3_noun -u3we_fein_ob(u3_noun cor) -{ - return u3qe_fein_ob(u3x_atom(u3x_at(u3x_sam, cor))); -} diff --git a/pkg/urbit/jets/e/fl.c b/pkg/urbit/jets/e/fl.c deleted file mode 100644 index 5b759dd27..000000000 --- a/pkg/urbit/jets/e/fl.c +++ /dev/null @@ -1,441 +0,0 @@ -/* j/e/fl.c -** -*/ -#include "all.h" - -/* structures -*/ - typedef struct _flOptions { - c3_w precision; - mpz_t minExp; - mpz_t expWidth; - c3_w rMode; - c3_w eMode; - } flOptions; - - typedef struct _ea { - mpz_t e; - mpz_t a; - } ea; - -/* functions -*/ - static void - _satom_to_mp(mpz_t a_mp, - u3_atom b) - { - if ( _(u3a_is_cat(b)) ) { - c3_ws c = (b + 1) >> 1; - if ( (b & 1) ) { - c = -c; - } - mpz_init_set_si(a_mp, c); - } - else { - u3r_mp(a_mp, b); - c3_t x = mpz_odd_p(a_mp); - mpz_add_ui(a_mp, a_mp, 1); - mpz_tdiv_q_2exp(a_mp, a_mp, 1); - if ( x ) { - mpz_neg(a_mp, a_mp); - } - } - } - - static u3_noun - _mp_to_satom(mpz_t a_mp) - { - c3_ws b = mpz_sgn(a_mp); - switch ( b ) { - default: return u3m_bail(c3__fail); - case 0: { - mpz_clear(a_mp); - return 0; - } - case 1: { - mpz_mul_2exp(a_mp, a_mp, 1); - return u3i_mp(a_mp); - } - case -1: { - mpz_abs(a_mp, a_mp); - mpz_mul_2exp(a_mp, a_mp, 1); - mpz_sub_ui(a_mp, a_mp, 1); - return u3i_mp(a_mp); - } - } - } - - static void - _noun_to_flOptions(flOptions* a, - u3_noun b) - { - u3_noun c; - u3_atom d, e, f, g, h; - u3x_trel(b, &c, &d, &e); - u3x_trel(c, &f, &g, &h); - - mpz_t i; - u3r_mp(i, f); - if ( !mpz_fits_uint_p(i) ) { - mpz_clear(i); - u3m_bail(c3__exit); - } - a->precision = mpz_get_ui(i); - mpz_clear(i); - - if ( a->precision < 2 ) u3m_bail(c3__exit); - - _satom_to_mp(a->minExp, g); - u3r_mp(a->expWidth, h); - - if ( !(_(u3a_is_cat(d)) && _(u3a_is_cat(e))) ) { - mpz_clear(a->minExp); - mpz_clear(a->expWidth); - u3m_bail(c3__exit); - } - a->rMode = d; - a->eMode = e; - } - - static void - _noun_to_ea(ea* a, - u3_noun b) - { - u3_atom c, d; - u3x_cell(b, &c, &d); - - if ( !(_(u3a_is_cat(c))) ) { - u3m_bail(c3__exit); - } - - _satom_to_mp(a->e, c); - u3r_mp(a->a, d); - } - - static u3_noun - _ea_to_noun(ea* a) - { - u3_atom b = _mp_to_satom(a->e); - u3_atom c = u3i_mp(a->a); - - return u3nc(b, c); - } - - static void - _xpd(ea* a, - flOptions* b) - { - size_t z = mpz_sizeinbase(a->a, 2); - if ( z >= b->precision ) return; - c3_w c = b->precision - z; - - if ( b->eMode != c3__i ) { - mpz_t i; - mpz_init_set(i, a->e); - mpz_sub(i, i, b->minExp); - if ( mpz_sgn(i) < 0 ) { - c = 0; - } - else if ( mpz_fits_uint_p(i) ) - { - c3_w d = mpz_get_ui(i); - c = c3_min(c, d); - } - mpz_clear(i); - } - - mpz_mul_2exp(a->a, a->a, c); - mpz_sub_ui(a->e, a->e, c); - } - - /* a: floating point number, b: flOptions, i: rounding mode, j: sticky bit */ - u3_noun - u3qef_lug(u3_noun a, - u3_noun b, - u3_atom i, - u3_atom j) - { - mpz_t v, g, h; - ea c; - flOptions d; - _noun_to_ea(&c, a); - _noun_to_flOptions(&d, b); - if ( mpz_sgn(c.a) == 0 ) { - mpz_clear(d.minExp); mpz_clear(d.expWidth); - mpz_clear(c.a); mpz_clear(c.e); - return u3m_bail(c3__exit); - } - size_t m = mpz_sizeinbase(c.a, 2); - if ( !_(j) && (m <= d.precision) ) { - mpz_clear(d.minExp); mpz_clear(d.expWidth); - mpz_clear(c.a); mpz_clear(c.e); - return u3m_bail(c3__exit); - } - c3_w q = 0; - c3_w f = (m > d.precision) ? m - d.precision : 0; - mpz_init(g); - if ( (d.eMode != c3__i) && - (mpz_cmp(c.e, d.minExp) < 0) ) { - mpz_sub(g, d.minExp, c.e); - if ( !mpz_fits_uint_p(g) ) { - mpz_clear(g); - mpz_clear(d.minExp); mpz_clear(d.expWidth); - mpz_clear(c.a); mpz_clear(c.e); - return u3m_bail(c3__exit); - } - q = mpz_get_ui(g); - } - q = c3_max(f, q); - mpz_init(v); - mpz_tdiv_r_2exp(v, c.a, q); - mpz_tdiv_q_2exp(c.a, c.a, q); - mpz_add_ui(c.e, c.e, q); - mpz_init_set_ui(h, 1); - if ( q > 0 ) mpz_mul_2exp(h, h, q - 1); - - if ( mpz_sgn(c.a) == 0 ) { - c3_t y; - switch ( i ) { - default: - mpz_clear(v); mpz_clear(h); mpz_clear(g); - mpz_clear(d.minExp); mpz_clear(d.expWidth); - mpz_clear(c.a); mpz_clear(c.e); - return u3m_bail(c3__exit); - case c3__fl: - case c3__sm: - mpz_set_ui(c.a, 0); - mpz_set_ui(c.e, 0); - mpz_clear(v); mpz_clear(h); mpz_clear(g); - break; - case c3__ce: - case c3__lg: - mpz_set_ui(c.a, 1); - mpz_set(c.e, d.minExp); - mpz_clear(v); mpz_clear(h); mpz_clear(g); - break; - case c3__ne: - case c3__nt: - case c3__na: - if ( (i != c3__na) && _(j) ) { - y = (mpz_cmp(v, h) <= 0); - } else { - y = (mpz_cmp(v, h) < 0); - } - if ( y ) { - mpz_set_ui(c.a, 0); - mpz_set_ui(c.e, 0); - } else { - mpz_set_ui(c.a, 1); - mpz_set(c.e, d.minExp); - } - mpz_clear(v); mpz_clear(h); mpz_clear(g); - break; - } - goto end; - } - _xpd(&c, &d); - switch ( i ) { - c3_ws x; - default: - mpz_clear(v); mpz_clear(h); mpz_clear(g); - mpz_clear(d.minExp); mpz_clear(d.expWidth); - mpz_clear(c.a); mpz_clear(c.e); - return u3m_bail(c3__exit); - case c3__fl: - break; - case c3__lg: - mpz_add_ui(c.a, c.a, 1); - break; - case c3__sm: - if ( (mpz_sgn(v) != 0) || !_(j) ) break; - if ( (mpz_cmp(c.e, d.minExp) == 0) && (d.eMode != c3__i) ) { - mpz_sub_ui(c.a, c.a, 1); - break; - } - mpz_mul_2exp(g, c.a, 1); - mpz_sub_ui(g, g, 1); - if ( mpz_sizeinbase(g, 2) <= d.precision ) { - mpz_sub_ui(c.e, c.e, 1); - mpz_set(c.a, g); - } else { - mpz_sub_ui(c.a, c.a, 1); - } - break; - case c3__ce: - if ( (mpz_sgn(v) != 0) || !_(j) ) { - mpz_add_ui(c.a, c.a, 1); - } - break; - case c3__ne: - if ( mpz_sgn(v) == 0 ) break; - x = mpz_cmp(v, h); - if ( (x == 0) && _(j) ) { - if ( mpz_odd_p(c.a) ) { - mpz_add_ui(c.a, c.a, 1); - } - } - else if ( x >= 0 ) { - mpz_add_ui(c.a, c.a, 1); - } - break; - case c3__na: - case c3__nt: - if ( mpz_sgn(v) == 0 ) break; - x = mpz_cmp(v, h); - if ( (x < 0) ) break; - if ( (i == c3__nt) && (x == 0) ) { - if (!_(j)) mpz_add_ui(c.a, c.a, 1); - } else { - mpz_add_ui(c.a, c.a, 1); - } - break; - } - if ( mpz_sizeinbase(c.a, 2) == (d.precision + 1) ) { - mpz_tdiv_q_2exp(c.a, c.a, 1); - mpz_add_ui(c.e, c.e, 1); - } - if ( mpz_sgn(c.a) == 0 ) { - mpz_set_ui(c.e, 0); - mpz_clear(v); mpz_clear(h); mpz_clear(g); - goto end; - } - mpz_set(g, d.minExp); - mpz_add(g, g, d.expWidth); - if ( (d.eMode != c3__i) && (mpz_cmp(g, c.e) < 0) ) { - mpz_clear(v); mpz_clear(h); mpz_clear(g); - mpz_clear(d.minExp); mpz_clear(d.expWidth); - mpz_clear(c.a); mpz_clear(c.e); - return u3nc(c3__i, c3y); - } - mpz_clear(v); mpz_clear(h); mpz_clear(g); - - // all mpz except in c, d structures cleared; c contains result - end: - if ( d.eMode == c3__f ) { - if ( mpz_sizeinbase(c.a, 2) != d.precision ) { - mpz_set_ui(c.a, 0); - mpz_set_ui(c.e, 0); - } - } - u3_noun ret = u3nq(c3__f, c3y, _mp_to_satom(c.e), u3i_mp(c.a)); - mpz_clear(d.minExp); mpz_clear(d.expWidth); - return ret; - } - - u3_noun - u3wef_lug(u3_noun cor) - { - u3_noun a, b, c, d, e; - a = u3x_at(u3x_sam, cor); - b = u3x_at(30, cor); - u3x_trel(a, &c, &d, &e); - - return u3qef_lug(d, b, c, e); - } - - u3_noun - u3qef_drg(u3_noun a, - u3_noun b) - { - ea c; - flOptions d; - _noun_to_ea(&c, a); - _noun_to_flOptions(&d, b); - if ( mpz_sgn(c.a) == 0 ) { - mpz_clear(d.minExp); mpz_clear(d.expWidth); - mpz_clear(c.a); mpz_clear(c.e); - u3m_bail(c3__exit); - } - _xpd(&c, &d); - if ( !mpz_fits_sint_p(c.e) ) { - mpz_clear(d.minExp); mpz_clear(d.expWidth); - mpz_clear(c.a); mpz_clear(c.e); - u3m_bail(c3__exit); - } - mpz_t r, s, mn, mp, i, j, u, o; - mpz_init_set(r, c.a); - mpz_init_set_ui(s, 1); - mpz_init_set_ui(mn, 1); - mpz_init(i); - mpz_init(j); - c3_w se = mpz_sgn(c.e); - if ( se == 1 ) { - mpz_mul_2exp(r, r, mpz_get_ui(c.e)); - mpz_mul_2exp(mn, mn, mpz_get_ui(c.e)); - } - else if ( se == -1 ) { - mpz_mul_2exp(s, s, mpz_get_ui(c.e)); - } - mpz_init_set(mp, mn); - mpz_set_ui(i, 1); - mpz_mul_2exp(i, i, d.precision - 1); - if ( (mpz_cmp(c.a, i) == 0) && - ((mpz_cmp(c.e, d.minExp) != 0 ) || - (d.eMode == c3__i)) ) { - mpz_mul_2exp(mp, mp, 1); - mpz_mul_2exp(r, r, 1); - mpz_mul_2exp(s, s, 1); - } - mpz_cdiv_q_ui(i, s, 10); - mpz_set_ui(c.e, 0); - while ( mpz_cmp(r, i) < 0 ) { - mpz_sub_ui(c.e, c.e, 1); - mpz_mul_ui(r, r, 10); - mpz_mul_ui(mn, mn, 10); - mpz_mul_ui(mp, mp, 10); - } - while ( 1 ) { - mpz_mul_2exp(i, r, 1); - mpz_add(i, i, mp); - mpz_mul_2exp(j, s, 1); - if ( mpz_cmp(i, j) < 0 ) { - break; - } - mpz_mul_ui(s, s, 10); - mpz_add_ui(c.e, c.e, 1); - } - mpz_init(u); - mpz_init_set_ui(o, 0); - while ( 1 ) { - mpz_sub_ui(c.e, c.e, 1); - mpz_mul_ui(r, r, 10); - mpz_mul_ui(mn, mn, 10); - mpz_mul_ui(mp, mp, 10); - mpz_tdiv_qr(u, r, r, s); - mpz_mul_2exp(i, r, 1); - mpz_mul_2exp(j, s, 1); - c3_t l = mpz_cmp(i, mn) < 0; - c3_t h = mpz_cmp(j, mp) < 0; - if ( !h ) { - mpz_sub(j, j, mp); - h = mpz_cmp(i, j) > 0; - } - if ( l || h ) { - mpz_mul_ui(o, o, 10); - mpz_add(o, o, u); - if ( h && (!l || (mpz_cmp(i, s) > 0)) ) { - mpz_add_ui(o, o, 1); - } - break; - } - mpz_mul_ui(o, o, 10); - mpz_add(o, o, u); - } - mpz_set(c.a, o); - mpz_clear(r); mpz_clear(s); - mpz_clear(mn); mpz_clear(mp); - mpz_clear(i); mpz_clear(j); mpz_clear(u); - mpz_clear(o); mpz_clear(d.minExp); mpz_clear(d.expWidth); - - return _ea_to_noun(&c); - } - - u3_noun - u3wef_drg(u3_noun cor) - { - u3_noun a, b; - a = u3x_at(u3x_sam, cor); - b = u3x_at(30, cor); - - return u3qef_drg(a, b); - } diff --git a/pkg/urbit/jets/e/fynd_ob.c b/pkg/urbit/jets/e/fynd_ob.c deleted file mode 100644 index 203d94f4d..000000000 --- a/pkg/urbit/jets/e/fynd_ob.c +++ /dev/null @@ -1,92 +0,0 @@ -/* j/3/fein.c -** -*/ -#include "all.h" -#include - -// +tail:ob constant parameters to +fe:ob -// -static const c3_w a_w = 0xffff; -static const c3_w b_w = 0x10000; -static const c3_w k_w = 0xffff0000; - -// (flop raku:ob) -// -static const c3_w kar_w[4] = { 0x4b387af7, 0x85bcae01, 0xee281300, 0xb76d5eed }; - -/* _fen_ob(): +fen:ob, with constant parameters factored out. -** correct over the domain [0x0 ... 0xfffe.ffff] -*/ -static c3_w -_fen_ob(c3_w m_w) -{ - c3_w l_w = m_w / a_w; - c3_w r_w = m_w % a_w; - c3_w f_w, t_w; - c3_y j_y, k_y[2]; - - // legendary @max19 - // - if ( a_w == l_w ) { - t_w = l_w; - l_w = r_w; - r_w = t_w; - } - - for ( j_y = 0; j_y < 4; j_y++ ) { - k_y[0] = l_w & 0xff; - k_y[1] = (l_w >> 8) & 0xff; - - MurmurHash3_x86_32(k_y, 2, kar_w[j_y], &f_w); - - t_w = ( j_y & 1 ) - ? ((r_w + a_w) - (f_w % a_w)) % a_w - : ((r_w + b_w) - (f_w % b_w)) % b_w; - r_w = l_w; - l_w = t_w; - } - - return (r_w * a_w) + l_w; -} - -/* _tail_ob(): +feis:ob, also offsetting by 0x1.000 (as in +fynd:ob). -** correct over the domain [0x1.0000, 0xffff.ffff] -*/ -static c3_w -_tail_ob(c3_w m_w) -{ - c3_w c_w = _fen_ob(m_w - b_w); - return b_w + (( c_w < k_w ) ? c_w : _fen_ob(c_w)); -} - -u3_atom -u3qe_fynd_ob(u3_atom pyn) -{ - c3_w sor_w = u3r_met(4, pyn); - - if ( (sor_w < 2) || (sor_w > 4) ) { - return u3k(pyn); - } - - if ( 2 == sor_w ) { - return u3i_word(_tail_ob(u3r_word(0, pyn))); - } - else { - c3_w pyn_w[2]; - u3r_words(0, 2, pyn_w, pyn); - - if ( pyn_w[0] < b_w ) { - return u3k(pyn); - } - else { - pyn_w[0] = _tail_ob(pyn_w[0]); - return u3i_words(2, pyn_w); - } - } -} - -u3_noun -u3we_fynd_ob(u3_noun cor) -{ - return u3qe_fynd_ob(u3x_atom(u3x_at(u3x_sam, cor))); -} diff --git a/pkg/urbit/jets/e/hmac.c b/pkg/urbit/jets/e/hmac.c deleted file mode 100644 index 8585f57d7..000000000 --- a/pkg/urbit/jets/e/hmac.c +++ /dev/null @@ -1,93 +0,0 @@ -/* j/5/hmac.c -** -*/ -#include "all.h" - -/* functions -*/ - - u3_noun - u3qe_hmac(u3_noun haj, - u3_atom boq, - u3_atom out, - u3_atom wik, - u3_atom key, - u3_atom wid, - u3_atom dat) - { - c3_assert(_(u3a_is_cat(boq)) && _(u3a_is_cat(wik)) && _(u3a_is_cat(wid))); - - // prep the hashing gate - u3j_site sit_u; - u3j_gate_prep(&sit_u, u3k(haj)); - - // ensure key and message fit signaled lengths - key = u3qc_end(3, wik, key); - dat = u3qc_end(3, wid, dat); - - // keys longer than block size are shortened by hashing - if (wik > boq) { - key = u3j_gate_slam(&sit_u, u3nc(wik, key)); - wik = out; - } - - // keys shorter than block size are right-padded - if (wik < boq) { - key = u3kc_lsh(3, (boq - wik), key); - } - - // pad key, inner and outer - c3_y trail = (boq % 4); - c3_y padwords = (boq / 4) + (trail == 0 ? 0 : 1); - c3_w innpad[padwords], outpad[padwords]; - memset(innpad, 0x36, padwords * 4); - memset(outpad, 0x5c, padwords * 4); - if ( trail > 0 ) { - innpad[padwords-1] = 0x36363636 >> (8 * (4 - trail)); - outpad[padwords-1] = 0x5c5c5c5c >> (8 * (4 - trail)); - } - u3_atom innkey = u3kc_mix(u3k(key), u3i_words(padwords, innpad)); - u3_atom outkey = u3kc_mix( key , u3i_words(padwords, outpad)); - - // append inner padding to message, then hash - u3_atom innmsg = u3ka_add(u3kc_lsh(3, wid, innkey), dat); - u3_atom innhaj = u3j_gate_slam(&sit_u, u3nc((wid + boq), innmsg)); - - // prepend outer padding to result, hash again - u3_atom outmsg = u3ka_add(u3kc_lsh(3, out, outkey), innhaj); - u3_atom outhaj = u3j_gate_slam(&sit_u, u3nc((out + boq), outmsg)); - - u3j_gate_lose(&sit_u); - return outhaj; - } - - u3_noun - u3we_hmac(u3_noun cor) - { - u3_noun haj, boq, out, wik, key, wid, dat; - - // sample is [[haj boq out] [wik key] [wid dat]] - if ( (c3n == u3r_mean(cor, u3x_sam_4, &haj, - 50, &boq, // +<->- - 51, &out, // +<->+ - u3x_sam_12, &wik, - u3x_sam_13, &key, - u3x_sam_14, &wid, - u3x_sam_15, &dat, 0)) || - (c3n == u3ud(boq)) || - (c3n == u3a_is_cat(boq)) || - (c3n == u3ud(out)) || - (c3n == u3a_is_cat(out)) || - (c3n == u3ud(wik)) || - (c3n == u3a_is_cat(wik)) || - (c3n == u3ud(key)) || - (c3n == u3ud(wid)) || - (c3n == u3a_is_cat(wid)) || - (c3n == u3ud(dat)) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qe_hmac(haj, boq, out, wik, key, wid, dat); - } - } diff --git a/pkg/urbit/jets/e/jam.c b/pkg/urbit/jets/e/jam.c deleted file mode 100644 index c07ab80ad..000000000 --- a/pkg/urbit/jets/e/jam.c +++ /dev/null @@ -1,57 +0,0 @@ -/* j/5/jam.c -** -*/ -#include "all.h" - -u3_noun -u3qe_jam(u3_atom a) -{ -#if 0 - if (c3y == u3du(a) && 1337 == u3h(a)) { - c3_w siz_w, tot_w = 0; - u3_noun som; - for ( som = u3t(a); c3y == u3du(som); som = u3t(som) ) { - siz_w = u3a_count_noun(u3h(som)); - tot_w += siz_w; - if ( 0 == siz_w ) { - u3l_log("item: B/0\r\n"); - } - else { - u3a_print_memory(stderr, "item", siz_w); - } - } - if ( u3_blip != som ) { - u3l_log("forgot to terminate list!\r\n"); - } - c3_w mem_w = u3h_count(u3R->cax.har_p); - - for ( som = u3t(a); c3y == u3du(som); som = u3t(som) ) u3a_discount_noun(u3h(som)); - u3h_discount(u3R->cax.har_p); - - u3a_print_memory(stderr, "total", tot_w); - u3a_print_memory(stderr, "memoization cache", mem_w); - u3h_root* har_u = u3to(u3h_root, u3R->cax.har_p); - u3l_log("memoization entries: %d\r\n", har_u->use_w); - u3a_print_memory(stderr, "unused free", u3a_open(u3R)); - return tot_w; - } -#endif - - u3i_slab sab_u; - u3s_jam_fib(&sab_u, a); - return u3i_slab_mint(&sab_u); -} - -u3_noun -u3we_jam(u3_noun cor) -{ - return u3qe_jam(u3x_at(u3x_sam, cor)); -} - -u3_atom -u3ke_jam(u3_noun a) -{ - u3_atom b = u3qe_jam(a); - u3z(a); - return b; -} diff --git a/pkg/urbit/jets/e/keccak.c b/pkg/urbit/jets/e/keccak.c deleted file mode 100644 index 236780593..000000000 --- a/pkg/urbit/jets/e/keccak.c +++ /dev/null @@ -1,39 +0,0 @@ -/* jets/e/keccak.c -*/ -#include "all.h" -#include - -#define defw(bits,byts) \ - u3_atom \ - _kecc_##bits(c3_w len_w, u3_atom a) \ - { \ - c3_y out[byts]; \ - c3_y* buf_y = u3r_bytes_alloc(0, len_w, a); \ - if ( 0 != urcrypt_keccak_##bits(buf_y, len_w, out) ) { \ - /* urcrypt_keccac_##bits always succeeds when called correctly */ \ - return u3m_bail(c3__oops); \ - } \ - else { \ - u3_atom pro = u3i_bytes(byts, out); \ - u3a_free(buf_y); \ - return pro; \ - } \ - } \ - \ - u3_weak \ - u3we_kecc##bits(u3_noun cor) \ - { \ - c3_w len_w; \ - u3_noun len, tom; \ - u3x_mean(cor, u3x_sam_2, &len, u3x_sam_3, &tom, 0); \ - return ( (c3n == u3ud(len)) || (c3n == u3ud(tom)) ) \ - ? u3m_bail(c3__exit) \ - : (!u3r_word_fit(&len_w, len)) \ - ? u3m_bail(c3__fail) \ - : _kecc_##bits(len_w, tom); \ - } - -defw(224, 28) -defw(256, 32) -defw(384, 48) -defw(512, 64) diff --git a/pkg/urbit/jets/e/leer.c b/pkg/urbit/jets/e/leer.c deleted file mode 100644 index a880f69be..000000000 --- a/pkg/urbit/jets/e/leer.c +++ /dev/null @@ -1,128 +0,0 @@ -/* j/5/leer.c -** -*/ -#include "all.h" - -static u3_atom -_leer_cut(c3_w pos_w, c3_w len_w, u3_atom src) -{ - if ( 0 == len_w ) { - return 0; - } - else { - u3i_slab sab_u; - u3i_slab_bare(&sab_u, 3, len_w); - sab_u.buf_w[sab_u.len_w - 1] = 0; - - u3r_bytes(pos_w, len_w, sab_u.buf_y, src); - - return u3i_slab_mint_bytes(&sab_u); - } -} - -// Leaving the lore jet in place for backwards compatibility. -// TODO: remove u3[qw]e_lore (also from jet tree) - -u3_noun -u3qe_lore(u3_atom lub) -{ - c3_w len_w = u3r_met(3, lub); - c3_w pos_w = 0; - u3_noun tez = u3_nul; - - while ( 1 ) { - c3_w meg_w = 0; - c3_y end_y; - - c3_y byt_y; - while ( 1 ) { - if ( pos_w >= len_w ) { - byt_y = 0; - end_y = c3y; - break; - } - byt_y = u3r_byte(pos_w + meg_w, lub); - - if ( (10 == byt_y) || (0 == byt_y) ) { - end_y = __(byt_y == 0); - break; - } else meg_w++; - } - - if ((byt_y == 0) && ((pos_w + meg_w + 1) < len_w)) { - return u3m_bail(c3__exit); - } - - if ( !_(end_y) && pos_w >= len_w ) { - return u3kb_flop(tez); - } - else { - tez = u3nc(_leer_cut(pos_w, meg_w, lub), tez); - if ( _(end_y) ) { - return u3kb_flop(tez); - } - pos_w += (meg_w + 1); - } - } -} - -u3_noun -u3we_lore(u3_noun cor) -{ - u3_noun lub; - - if ( (u3_none == (lub = u3r_at(u3x_sam, cor))) || - (c3n == u3ud(lub)) ) - { - return u3m_bail(c3__fail); - } else { - return u3qe_lore(lub); - } -} - -u3_noun -u3qe_leer(u3_atom txt) -{ - u3_noun pro; - u3_noun* lit = &pro; - - { - c3_w pos_w, i_w = 0, len_w = u3r_met(3, txt); - u3_noun* hed; - u3_noun* tel; - - while ( i_w < len_w ) { - // scan till end or newline - // - for ( pos_w = i_w; i_w < len_w; ++i_w ) { - if ( 10 == u3r_byte(i_w, txt) ) { - break; - } - } - - // append to list - // - *lit = u3i_defcons(&hed, &tel); - *hed = _leer_cut(pos_w, i_w - pos_w, txt); - lit = tel; - - i_w++; - } - } - - *lit = u3_nul; - - return pro; -} - -u3_noun -u3we_leer(u3_noun cor) -{ - u3_noun txt = u3x_at(u3x_sam, cor); - - if ( c3n == u3ud(txt) ) { - return u3m_bail(c3__fail); - } - - return u3qe_leer(txt); -} diff --git a/pkg/urbit/jets/e/loss.c b/pkg/urbit/jets/e/loss.c deleted file mode 100644 index 6f581c0ae..000000000 --- a/pkg/urbit/jets/e/loss.c +++ /dev/null @@ -1,296 +0,0 @@ -/* j/5/loss.c -** -*/ -#include "all.h" - - -/* functions -*/ - typedef struct _u3_loss { // loss problem - u3_noun hel; // a as a list - c3_w lel_w; // length of a - c3_w lev_w; // length of b - u3_noun* hev; // b as an array - u3_noun sev; // b as a set of lists - c3_w kct_w; // candidate count - u3_noun* kad; // candidate array - } u3_loss; - - // free loss object - // - static void - _flem(u3_loss* loc_u) - { - u3z(loc_u->sev); - { - c3_w i_w; - - for ( i_w = 0; i_w < loc_u->kct_w; i_w++ ) { - u3z(loc_u->kad[i_w]); - } - } - u3a_free(loc_u->hev); - u3a_free(loc_u->kad); - } - - // extract lcs - XX don't use the stack like this - // - static u3_noun - _lext(u3_loss* loc_u, - u3_noun kad) - { - if ( u3_nul == kad ) { - return u3_nul; - } else { - return u3nc(u3k(loc_u->hev[u3r_word(0, u3h(kad))]), - _lext(loc_u, u3t(kad))); - } - } - - // extract lcs - // - static u3_noun - _lexs(u3_loss* loc_u) - { - if ( 0 == loc_u->kct_w ) { - return u3_nul; - } else return u3kb_flop(_lext(loc_u, loc_u->kad[loc_u->kct_w - 1])); - } - - // initialize loss object - // - static void - _lemp(u3_loss* loc_u, - u3_noun hel, - u3_noun hev) - { - loc_u->hel = hel; - loc_u->lel_w = u3kb_lent(u3k(hel)); - - // Read hev into array. - { - c3_w i_w; - - loc_u->hev = u3a_malloc(u3kb_lent(u3k(hev)) * sizeof(u3_noun)); - - for ( i_w = 0; u3_nul != hev; i_w++ ) { - loc_u->hev[i_w] = u3h(hev); - hev = u3t(hev); - } - loc_u->lev_w = i_w; - } - loc_u->kct_w = 0; - loc_u->kad = u3a_malloc((1 + c3_min(loc_u->lev_w, loc_u->lel_w)) * - sizeof(u3_noun)); - - // Compute equivalence classes. - // - loc_u->sev = u3_nul; - { - c3_w i_w; - - for ( i_w = 0; i_w < loc_u->lev_w; i_w++ ) { - u3_noun how = loc_u->hev[i_w]; - u3_noun hav; - u3_noun teg; - - hav = u3kdb_get(u3k(loc_u->sev), u3k(how)); - teg = u3nc(u3i_words(1, &i_w), - (hav == u3_none) ? u3_nul : hav); - loc_u->sev = u3kdb_put(loc_u->sev, u3k(how), teg); - } - } - } - - // apply - // - static void - _lune(u3_loss* loc_u, - c3_w inx_w, - c3_w goy_w) - { - u3_noun kad; - - kad = u3nc(u3i_words(1, &goy_w), - (inx_w == 0) ? u3_nul - : u3k(loc_u->kad[inx_w - 1])); - if ( loc_u->kct_w == inx_w ) { - c3_assert(loc_u->kct_w < (1 << 31)); - loc_u->kct_w++; - } else { - u3z(loc_u->kad[inx_w]); - } - loc_u->kad[inx_w] = kad; - } - - // extend fits top - // - static u3_noun - _hink(u3_loss* loc_u, - c3_w inx_w, - c3_w goy_w) - { - return __ - ( (loc_u->kct_w == inx_w) || - (u3r_word(0, u3h(loc_u->kad[inx_w])) > goy_w) ); - } - - // extend fits bottom - // - static u3_noun - _lonk(u3_loss* loc_u, - c3_w inx_w, - c3_w goy_w) - { - return __ - ( (0 == inx_w) || - (u3r_word(0, u3h(loc_u->kad[inx_w - 1])) < goy_w) ); - } - -#if 0 - // search for first index >= inx_w and <= max_w that fits - // the hink and lonk criteria. - // - static u3_noun - _binka(u3_loss* loc_u, - c3_w* inx_w, - c3_w max_w, - c3_w goy_w) - { - while ( *inx_w <= max_w ) { - if ( c3n == _lonk(loc_u, *inx_w, goy_w) ) { - return c3n; - } - if ( c3y == _hink(loc_u, *inx_w, goy_w) ) { - return c3y; - } - else ++*inx_w; - } - return c3n; - } -#endif - - // search for lowest index >= inx_w and <= max_w for which - // both hink(inx_w) and lonk(inx_w) are true. lonk is false - // if inx_w is too high, hink is false if it is too low. - // - static u3_noun - _bink(u3_loss* loc_u, - c3_w* inx_w, - c3_w max_w, - c3_w goy_w) - { - c3_assert(max_w >= *inx_w); - - if ( max_w == *inx_w ) { - if ( c3n == _lonk(loc_u, *inx_w, goy_w) ) { - return c3n; - } - if ( c3y == _hink(loc_u, *inx_w, goy_w) ) { - return c3y; - } - else { - ++*inx_w; - return c3n; - } - } - else { - c3_w mid_w = *inx_w + ((max_w - *inx_w) / 2); - - if ( (c3n == _lonk(loc_u, mid_w, goy_w)) || - (c3y == _hink(loc_u, mid_w, goy_w)) ) - { - return _bink(loc_u, inx_w, mid_w, goy_w); - } else { - *inx_w = mid_w + 1; - return _bink(loc_u, inx_w, max_w, goy_w); - } - } - } - - - static void - _merg(u3_loss* loc_u, - c3_w inx_w, - u3_noun gay) - { - if ( (u3_nul == gay) || (inx_w > loc_u->kct_w) ) { - return; - } - else { - u3_noun i_gay = u3h(gay); - c3_w goy_w = u3r_word(0, i_gay); - u3_noun bik; - - bik = _bink(loc_u, &inx_w, loc_u->kct_w, goy_w); - - if ( c3y == bik ) { - _merg(loc_u, inx_w + 1, u3t(gay)); - _lune(loc_u, inx_w, goy_w); - } - else { - _merg(loc_u, inx_w, u3t(gay)); - } - } - } - - // compute lcs - // - static void - _loss(u3_loss* loc_u) - { - while ( u3_nul != loc_u->hel ) { - u3_noun i_hel = u3h(loc_u->hel); - u3_noun guy = u3kdb_get(u3k(loc_u->sev), u3k(i_hel)); - - if ( u3_none != guy ) { - u3_noun gay = u3kb_flop(guy); - - _merg(loc_u, 0, gay); - u3z(gay); - } - - loc_u->hel = u3t(loc_u->hel); - } - } - - u3_noun - u3qe_loss(u3_noun hel, - u3_noun hev) - { - u3_loss loc_u; - u3_noun lcs; - - _lemp(&loc_u, hel, hev); - _loss(&loc_u); - lcs = _lexs(&loc_u); - - _flem(&loc_u); - return lcs; - } - - static u3_noun - _listp(u3_noun lix) - { - while ( 1 ) { - if ( u3_nul == lix ) return c3y; - if ( c3n == u3du(lix) ) return c3n; - lix = u3t(lix); - } - } - - u3_noun - u3we_loss(u3_noun cor) - { - u3_noun hel, hev; - - if ( (u3_none == (hel = u3r_at(u3x_sam_2, cor))) || - (u3_none == (hev = u3r_at(u3x_sam_3, cor))) || - (c3n == _listp(hel)) || - (c3n == _listp(hev)) ) - { - return u3m_bail(c3__fail); - } else { - return u3qe_loss(hel, hev); - } - } diff --git a/pkg/urbit/jets/e/lune.c b/pkg/urbit/jets/e/lune.c deleted file mode 100644 index 7d173d47a..000000000 --- a/pkg/urbit/jets/e/lune.c +++ /dev/null @@ -1,55 +0,0 @@ -/* j/5/lune.c -** -*/ -#include "all.h" - - - u3_noun - u3qe_lune(u3_atom lub) - { - if (lub == 0) { - return u3_nul; - } - - { - c3_w end_w = u3r_met(3, lub) - 1; - c3_w pos_w = end_w; - u3_noun lin = u3_nul; - - if (u3r_byte(pos_w, lub) != 10) { - return u3m_error("noeol"); - } - - if (pos_w == 0) { - return u3nc(u3_nul, lin); - } - - while (--pos_w) { - if (u3r_byte(pos_w, lub) == 10) { - lin = u3nc(u3qc_cut(3, (pos_w + 1), (end_w - pos_w - 1), lub), lin); - end_w = pos_w; - } - } - - if (u3r_byte(pos_w, lub) == 10) { - return u3nc(u3_nul, - u3nc(u3qc_cut(3, (pos_w + 1), (end_w - pos_w - 1), lub), lin)); - } - - return u3nc(u3qc_cut(3, pos_w, (end_w - pos_w), lub), lin); - } - } - - u3_noun - u3we_lune(u3_noun cor) - { - u3_noun lub; - - if ( (u3_none == (lub = u3r_at(u3x_sam, cor))) || - (c3n == u3ud(lub)) ) - { - return u3m_bail(c3__fail); - } else { - return u3qe_lune(lub); - } - } diff --git a/pkg/urbit/jets/e/mat.c b/pkg/urbit/jets/e/mat.c deleted file mode 100644 index 7a9232602..000000000 --- a/pkg/urbit/jets/e/mat.c +++ /dev/null @@ -1,50 +0,0 @@ -/* j/3/mat.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qe_mat(u3_atom a) - { - if ( 0 == a ) { - return u3nc(1, 1); - } else { - u3_atom b = u3qc_met(0, a); - u3_atom c = u3qc_met(0, b); - u3_atom u, v, w, x, y, z; - u3_atom p, q; - - u = u3qa_dec(c); - v = u3qa_add(c, c); - w = u3qc_bex(c); - x = u3qc_end(0, u, b); - y = u3qc_lsh(0, u, a); - z = u3qc_mix(x, y); - - p = u3qa_add(v, b); - q = u3qc_cat(0, w, z); - - u3z(u); - u3z(v); - u3z(w); - u3z(x); - u3z(y); - u3z(z); - - return u3nc(p, q); - } - } - u3_noun - u3we_mat(u3_noun cor) - { - u3_noun a; - - if ( (u3_none == (a = u3r_at(u3x_sam, cor))) ) { - return u3m_bail(c3__fail); - } else { - return u3qe_mat(a); - } - } diff --git a/pkg/urbit/jets/e/mink.c b/pkg/urbit/jets/e/mink.c deleted file mode 100644 index c17a02427..000000000 --- a/pkg/urbit/jets/e/mink.c +++ /dev/null @@ -1,25 +0,0 @@ -/* j/5/mink.c -** -*/ -#include "all.h" - - u3_noun - u3we_mink(u3_noun cor) - { - u3_noun bus, fol, gul; - - if ( c3n == u3r_mean(cor, u3x_sam_4, &bus, - u3x_sam_5, &fol, - u3x_sam_3, &gul, - 0) ) - { - return u3m_bail(c3__exit); - } - else { - u3_noun som; - - som = u3n_nock_et(u3k(gul), u3k(bus), u3k(fol)); - - return som; - } - } diff --git a/pkg/urbit/jets/e/mole.c b/pkg/urbit/jets/e/mole.c deleted file mode 100644 index ee32472ec..000000000 --- a/pkg/urbit/jets/e/mole.c +++ /dev/null @@ -1,16 +0,0 @@ -/* j/5/mule.c -** -*/ -#include "all.h" - -u3_noun -u3we_mole(u3_noun cor) -{ - u3_noun hok = u3j_cook("u3we_mole-mure", u3k(cor), "mure"); - - // just like +mule and +mute, this takes advantage of the fact that - // +mure's result is identical to that of +mole, and safely produces - // a statically-typed value while only evaluating the trap once. - // - return u3n_slam_on(hok, u3k(u3x_at(u3x_sam, cor))); -} diff --git a/pkg/urbit/jets/e/mule.c b/pkg/urbit/jets/e/mule.c deleted file mode 100644 index f27b294fa..000000000 --- a/pkg/urbit/jets/e/mule.c +++ /dev/null @@ -1,17 +0,0 @@ -/* j/5/mule.c -** -*/ -#include "all.h" - -u3_noun -u3we_mule(u3_noun cor) -{ - u3_noun hok = u3j_cook("u3we_mule-mute", u3k(cor), "mute"); - - - // this takes advantage of the fact that +mute's result is - // identical to that of +mule, and safely produces a statically-typed - // value while only evaluating the trap once. - // - return u3n_slam_on(hok, u3k(u3x_at(u3x_sam, cor))); -} diff --git a/pkg/urbit/jets/e/parse.c b/pkg/urbit/jets/e/parse.c deleted file mode 100644 index 8befe6a80..000000000 --- a/pkg/urbit/jets/e/parse.c +++ /dev/null @@ -1,1018 +0,0 @@ -/* j/5/parse.c -** -*/ -#include "all.h" - - - static u3_noun - _slip(u3_noun weq, - u3_noun naz) - { - u3_noun p_naz, q_naz; - - u3x_cell(naz, &p_naz, &q_naz); - if ( 10 == weq ) { - return u3nc(u3x_good(u3i_vint(u3k(p_naz))), - 1); - } else { - return u3nc(u3k(p_naz), - u3x_good(u3i_vint(u3k(q_naz)))); - } - } - - static u3_noun - _fail(u3_noun tub) - { - u3_noun p_tub, q_tub; - - u3x_cell(tub, &p_tub, &q_tub); - return u3nc(u3k(p_tub), u3_nul); - } - - static u3_noun - _last(u3_noun zyc, - u3_noun naz) - { - u3_noun p_zyc, q_zyc, p_naz, q_naz; - - u3x_cell(zyc, &p_zyc, &q_zyc); - u3x_cell(naz, &p_naz, &q_naz); - - if ( !_(u3a_is_cat(p_zyc)) || !_(u3a_is_cat(q_zyc)) || - !_(u3a_is_cat(p_naz)) || !_(u3a_is_cat(q_naz)) ) - { - return u3m_bail(c3__fail); - } else { - if ( p_zyc == p_naz ) { - return (q_zyc > q_naz) ? u3k(zyc) : u3k(naz); - } - else { - return (p_zyc > p_naz) ? u3k(zyc) : u3k(naz); - } - } - } - - static u3_noun - _last_k(u3_noun zyc, u3_noun naz) - { - u3_noun pro = _last(zyc, naz); - u3z(zyc); u3z(naz); - return pro; - } - - static u3_noun - _next(u3_noun tub) - { - u3_noun p_tub, q_tub; - u3_noun zac; - - u3x_cell(tub, &p_tub, &q_tub); - if ( c3n == u3du(q_tub) ) { - return _fail(tub); - } - else { - u3_noun iq_tub = u3h(q_tub); - u3_noun tq_tub = u3t(q_tub); - - zac = _slip(iq_tub, p_tub); - - return u3nc(zac, - u3nq(u3_nul, - u3k(iq_tub), - u3k(zac), - u3k(tq_tub))); - } - } - -/* bend -*/ - static u3_noun - _cqe_bend_fun(u3_noun raq, - u3_noun vex, - u3_noun sab) - { - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - if ( c3n == u3du(q_vex) ) { - return u3k(vex); - } else { - u3_noun uq_vex = u3t(q_vex); - u3_noun puq_vex, quq_vex; - u3_noun yit, yur; - u3_noun p_yit, q_yit; - u3_noun ret; - - u3x_cell(uq_vex, &puq_vex, &quq_vex); - yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); - - u3x_cell(yit, &p_yit, &q_yit); - yur = _last(p_vex, p_yit); - - if ( c3n == u3du(q_yit) ) { - ret = u3nc(yur, u3k(q_vex)); - } - else { - u3_noun uq_yit = u3t(q_yit); - u3_noun puq_yit, quq_yit; - u3_noun vux; - - u3x_cell(uq_yit, &puq_yit, &quq_yit); - - vux = u3x_good(u3n_slam_on(u3k(raq), - u3nc(u3k(puq_vex), - u3k(puq_yit)))); - if ( u3_nul == vux ) { - ret = u3nc(yur, u3k(q_vex)); - } - else { - ret = u3nq(yur, - u3_nul, - u3k(u3t(vux)), - u3k(quq_yit)); - u3z(vux); - } - } - u3z(yit); - return ret; - } - } - - u3_noun - u3we_bend_fun(u3_noun cor) - { - u3_noun van, raq, vex, sab; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, - u3x_sam_3, &sab, - u3x_con, &van, 0)) || - (u3_none == (raq = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_bend_fun(raq, vex, sab); - } - } - -/* cold -*/ - static u3_noun - _cqe_cold_fun(u3_noun cus, - u3_noun sef, - u3_noun tub) - { - u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub))); - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - - if ( c3n == u3du(q_vex) ) { - return vex; - } - else { - u3_noun uq_vex = u3t(q_vex); - u3_noun quq_vex; - u3_noun ret; - - u3x_cell(uq_vex, 0, &quq_vex); - ret = u3nq(u3k(p_vex), - u3_nul, - u3k(cus), - u3k(quq_vex)); - - u3z(vex); - return ret; - } - } - - u3_noun - u3we_cold_fun(u3_noun cor) - { - u3_noun van, cus, sef, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (c3n == u3r_mean(van, u3x_sam_2, &cus, u3x_sam_3, &sef, 0)) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_cold_fun(cus, sef, tub); - } - } - -/* cook -*/ - static u3_noun - _cqe_cook_fun(u3_noun poq, - u3_noun sef, - u3_noun tub) - { - u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub))); - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - - if ( c3n == u3du(q_vex) ) { - return vex; - } - else { - u3_noun uq_vex = u3t(q_vex); - u3_noun puq_vex, quq_vex; - u3_noun wag; - u3_noun ret; - - u3x_cell(uq_vex, &puq_vex, &quq_vex); - wag = u3x_good(u3n_slam_on(u3k(poq), u3k(puq_vex))); - ret = u3nq(u3k(p_vex), - u3_nul, - wag, - u3k(quq_vex)); - - u3z(vex); - return ret; - } - } - - u3_noun - u3we_cook_fun(u3_noun cor) - { - u3_noun van, poq, sef, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (c3n == u3r_mean(van, u3x_sam_2, &poq, u3x_sam_3, &sef, 0)) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_cook_fun(poq, sef, tub); - } - } - -/* comp -*/ - static u3_noun - _cqe_comp_fun(u3_noun raq, - u3_noun vex, - u3_noun sab) - { - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - if ( c3n == u3du(q_vex) ) { - return u3k(vex); - } else { - u3_noun uq_vex = u3t(q_vex); - u3_noun puq_vex, quq_vex; - u3_noun yit, yur; - u3_noun p_yit, q_yit; - u3_noun ret; - - u3x_cell(uq_vex, &puq_vex, &quq_vex); - yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); - - u3x_cell(yit, &p_yit, &q_yit); - yur = _last(p_vex, p_yit); - - if ( c3n == u3du(q_yit) ) { - ret = u3nc(yur, u3k(q_yit)); - } - else { - u3_noun uq_yit = u3t(q_yit); - u3_noun puq_yit, quq_yit; - - u3x_cell(uq_yit, &puq_yit, &quq_yit); - ret = u3nq(yur, - u3_nul, - u3x_good(u3n_slam_on(u3k(raq), - u3nc(u3k(puq_vex), - u3k(puq_yit)))), - u3k(quq_yit)); - } - u3z(yit); - return ret; - } - } - - u3_noun - u3we_comp_fun(u3_noun cor) - { - u3_noun van, raq, vex, sab; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, - u3x_sam_3, &sab, - u3x_con, &van, 0)) || - (u3_none == (raq = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_comp_fun(raq, vex, sab); - } - } - -/* easy -*/ - static u3_noun - _cqe_easy_fun(u3_noun huf, - u3_noun tub) - { - u3_noun p_tub, q_tub; - - u3x_cell(tub, &p_tub, &q_tub); - return u3nq(u3k(p_tub), - u3_nul, - u3k(huf), - u3k(tub)); - } - - u3_noun - u3we_easy_fun(u3_noun cor) - { - u3_noun van, huf, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (u3_none == (huf = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_easy_fun(huf, tub); - } - } - -/* glue -*/ - static u3_noun - _cqe_glue_fun(u3_noun bus, - u3_noun vex, - u3_noun sab) - { - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - if ( c3n == u3du(q_vex) ) { - return u3k(vex); - } - else { - u3_noun uq_vex = u3t(q_vex); - u3_noun puq_vex, quq_vex; - u3_noun yit, yur; - u3_noun p_yit, q_yit; - u3_noun ret; - - u3x_cell(uq_vex, &puq_vex, &quq_vex); - yit = u3x_good(u3n_slam_on(u3k(bus), u3k(quq_vex))); - - u3x_cell(yit, &p_yit, &q_yit); - yur = _last(p_vex, p_yit); - - if ( c3n == u3du(q_yit) ) { - ret = u3nc(yur, u3_nul); - } - else { - u3_noun uq_yit = u3t(q_yit); - u3_noun puq_yit, quq_yit; - u3_noun wam, p_wam, q_wam, goy; - - u3x_cell(uq_yit, &puq_yit, &quq_yit); - wam = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_yit))); - - u3x_cell(wam, &p_wam, &q_wam); - goy = _last(yur, p_wam); - u3z(yur); - - if ( c3n == u3du(q_wam) ) { - ret = u3nc(goy, u3_nul); - } else { - u3_noun uq_wam = u3t(q_wam); - u3_noun puq_wam, quq_wam; - - u3x_cell(uq_wam, &puq_wam, &quq_wam); - ret = u3nq(goy, - u3_nul, - u3nc(u3k(puq_vex), - u3k(puq_wam)), - u3k(quq_wam)); - } - u3z(wam); - } - u3z(yit); - return ret; - } - } - - u3_noun - u3we_glue_fun(u3_noun cor) - { - u3_noun van, bus, vex, sab; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, - u3x_sam_3, &sab, - u3x_con, &van, 0)) || - (u3_none == (bus = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_glue_fun(bus, vex, sab); - } - } - -/* here -*/ - static u3_noun - _cqe_here_fun(u3_noun hez, - u3_noun sef, - u3_noun tub) - { - u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub))); - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - - if ( c3n == u3du(q_vex) ) { - return vex; - } - else { - u3_noun uq_vex = u3t(q_vex); - u3_noun p_tub, q_tub; - u3_noun puq_vex, quq_vex, pquq_vex; - u3_noun gud, wag; - u3_noun ret; - - u3x_cell(tub, &p_tub, &q_tub); - u3x_cell(uq_vex, &puq_vex, &quq_vex); - u3x_cell(quq_vex, &pquq_vex, 0); - gud = u3nc( - u3nc(u3k(p_tub), - u3k(pquq_vex)), - u3k(puq_vex)); - - wag = u3x_good(u3n_slam_on(u3k(hez), gud)); - ret = u3nq(u3k(p_vex), - u3_nul, - wag, - u3k(quq_vex)); - - u3z(vex); - return ret; - } - } - - u3_noun - u3we_here_fun(u3_noun cor) - { - u3_noun van, hez, sef, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (c3n == u3r_mean(van, u3x_sam_2, &hez, u3x_sam_3, &sef, 0)) ) - { - return u3m_bail(c3__fail); - } - else { - return _cqe_here_fun(hez, sef, tub); - } - } - -/* just -*/ - static u3_noun - _cqe_just_fun(u3_noun daf, - u3_noun tub) - { - u3_noun p_tub, q_tub; - - u3x_cell(tub, &p_tub, &q_tub); - - if ( c3n == u3du(q_tub) ) { - return _fail(tub); - } - else { - u3_noun iq_tub = u3h(q_tub); - - if ( c3y == u3r_sing(daf, iq_tub) ) { - return _next(tub); - } - else return _fail(tub); - } - } - u3_noun - u3we_just_fun(u3_noun cor) - { - u3_noun van, daf, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (u3_none == (daf = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_just_fun(daf, tub); - } - } - -/* mask -*/ - static u3_noun - _cqe_mask_fun(u3_noun bud, - u3_noun tub) - { - u3_noun p_tub, q_tub; - - u3x_cell(tub, &p_tub, &q_tub); - - if ( c3n == u3du(q_tub) ) { - return _fail(tub); - } - else { - u3_noun iq_tub = u3h(q_tub); - - while ( c3y == u3du(bud) ) { - if ( c3y == u3r_sing(u3h(bud), iq_tub) ) { - return _next(tub); - } - bud = u3t(bud); - } - return _fail(tub); - } - } - u3_noun - u3we_mask_fun(u3_noun cor) - { - u3_noun van, bud, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (u3_none == (bud = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_mask_fun(bud, tub); - } - } -/* pfix -*/ - static u3_noun - _cqe_pfix(u3_noun vex, - u3_noun sab) - { - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - if ( c3n == u3du(q_vex) ) { - return u3k(vex); - } - else { - u3_noun uq_vex = u3t(q_vex); - u3_noun puq_vex, quq_vex; - u3_noun yit, p_yit, q_yit; - u3_noun ret; - - u3x_cell(uq_vex, &puq_vex, &quq_vex); - yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); - - u3x_cell(yit, &p_yit, &q_yit); - ret = u3nc(_last(p_vex, p_yit), - u3k(q_yit)); - - u3z(yit); - return ret; - } - } - u3_noun - u3we_pfix(u3_noun cor) - { - u3_noun vex, sab; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) { - return u3m_bail(c3__exit); - } else { - return _cqe_pfix(vex, sab); - } - } - -/* plug -*/ - static u3_noun - _cqe_plug(u3_noun vex, - u3_noun sab) - { - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - if ( c3n == u3du(q_vex) ) { - return u3k(vex); - } - else { - u3_noun uq_vex = u3t(q_vex); - u3_noun puq_vex, quq_vex; - u3_noun yit, yur; - u3_noun p_yit, q_yit; - u3_noun ret; - - u3x_cell(uq_vex, &puq_vex, &quq_vex); - yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); - - u3x_cell(yit, &p_yit, &q_yit); - yur = _last(p_vex, p_yit); - - if ( c3n == u3du(q_yit) ) { - ret = u3nc(yur, u3k(q_yit)); - } - else { - u3_noun uq_yit = u3t(q_yit); - u3_noun puq_yit, quq_yit; - - u3x_cell(uq_yit, &puq_yit, &quq_yit); - ret = u3nq(yur, - u3_nul, - u3nc(u3k(puq_vex), - u3k(puq_yit)), - u3k(quq_yit)); - } - u3z(yit); - return ret; - } - } - u3_noun - u3we_plug(u3_noun cor) - { - u3_noun vex, sab; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) { - return u3m_bail(c3__exit); - } else { - return _cqe_plug(vex, sab); - } - } - -/* pose -*/ - u3_noun - u3qe_pose(u3_noun vex, - u3_noun sab) - { - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - if ( c3y == u3du(q_vex) ) { - return u3k(vex); - } else { - u3_noun roq = u3x_good(u3n_kick_on(u3k(sab))); - u3_noun p_roq, q_roq; - u3_noun ret; - - u3x_cell(roq, &p_roq, &q_roq); - ret = u3nc(_last(p_vex, p_roq), - u3k(q_roq)); - - u3z(roq); - return ret; - } - } - u3_noun - u3we_pose(u3_noun cor) - { - u3_noun vex, sab; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) { - return u3m_bail(c3__exit); - } else { - return u3qe_pose(vex, sab); - } - } - -/* sfix -*/ - static u3_noun - _cqe_sfix(u3_noun vex, - u3_noun sab) - { - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - if ( c3n == u3du(q_vex) ) { - return u3k(vex); - } - else { - u3_noun uq_vex = u3t(q_vex); - u3_noun puq_vex, quq_vex; - u3_noun yit, p_yit, q_yit, yur; - u3_noun ret; - - u3x_cell(uq_vex, &puq_vex, &quq_vex); - yit = u3x_good(u3n_slam_on(u3k(sab), u3k(quq_vex))); - - u3x_cell(yit, &p_yit, &q_yit); - yur = _last(p_vex, p_yit); - - if ( c3n == u3du(q_yit) ) { - ret = u3nc(yur, u3_nul); - } - else { - u3_noun uq_yit = u3t(q_yit); - u3_noun puq_yit, quq_yit; - - u3x_cell(uq_yit, &puq_yit, &quq_yit); - - ret = u3nq(yur, - u3_nul, - u3k(puq_vex), - u3k(quq_yit)); - } - u3z(yit); - return ret; - } - } - u3_noun - u3we_sfix(u3_noun cor) - { - u3_noun vex, sab; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &vex, u3x_sam_3, &sab, 0)) ) { - return u3m_bail(c3__exit); - } else { - return _cqe_sfix(vex, sab); - } - } - -/* shim -*/ - static u3_noun - _cqe_shim_fun(u3_noun zep, - u3_noun tub) - { - u3_noun p_tub, q_tub; - - u3x_cell(tub, &p_tub, &q_tub); - - if ( c3n == u3du(q_tub) ) { - return _fail(tub); - } - else { - u3_noun p_zep, q_zep; - u3_noun iq_tub = u3h(q_tub); - - u3x_cell(zep, &p_zep, &q_zep); - if ( _(u3a_is_cat(p_zep)) && - _(u3a_is_cat(q_zep)) && - _(u3a_is_cat(iq_tub)) ) - { - if ( (iq_tub >= p_zep) && (iq_tub <= q_zep) ) { - return _next(tub); - } - else return _fail(tub); - } - else { - return u3m_bail(c3__fail); - } - } - } - u3_noun - u3we_shim_fun(u3_noun cor) - { - u3_noun van, zep, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (u3_none == (zep = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_shim_fun(zep, tub); - } - } - -/* stag -*/ - static u3_noun - _cqe_stag_fun(u3_noun gob, - u3_noun sef, - u3_noun tub) - { - u3_noun vex = u3x_good(u3n_slam_on(u3k(sef), u3k(tub))); - u3_noun p_vex, q_vex; - - u3x_cell(vex, &p_vex, &q_vex); - - if ( c3n == u3du(q_vex) ) { - return vex; - } - else { - u3_noun uq_vex = u3t(q_vex); - u3_noun puq_vex, quq_vex; - u3_noun wag; - u3_noun ret; - - u3x_cell(uq_vex, &puq_vex, &quq_vex); - wag = u3nc(u3k(gob), u3k(puq_vex)); - ret = u3nq(u3k(p_vex), - u3_nul, - wag, - u3k(quq_vex)); - - u3z(vex); - return ret; - } - } - - u3_noun - u3we_stag_fun(u3_noun cor) - { - u3_noun van, gob, sef, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (c3n == u3r_mean(van, u3x_sam_2, &gob, u3x_sam_3, &sef, 0)) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_stag_fun(gob, sef, tub); - } - } - -/* stew -*/ - static u3_noun - _stew_wor(u3_noun ort, - u3_noun wan) - { - if ( !_(u3a_is_cat(ort)) ) { - return u3m_bail(c3__fail); - } - else { - if ( c3n == u3du(wan) ) { - if ( !_(u3a_is_cat(wan)) ) { - return u3m_bail(c3__fail); - } - else return (ort < wan) ? c3y : c3n; - } - else { - u3_noun h_wan = u3h(wan); - - if ( !_(u3a_is_cat(h_wan)) ) { - return u3m_bail(c3__fail); - } - else return (ort < h_wan) ? c3y : c3n; - } - } - } - - static u3_noun - _cqe_stew_fun(u3_noun hel, - u3_noun tub) - { - u3_noun p_tub, q_tub; - - u3x_cell(tub, &p_tub, &q_tub); - if ( c3n == u3du(q_tub) ) { - return _fail(tub); - } - else { - u3_noun iq_tub = u3h(q_tub); - - if ( !_(u3a_is_cat(iq_tub)) ) { - return u3m_bail(c3__fail); - } - else while ( 1 ) { - if ( c3n == u3du(hel) ) { - return _fail(tub); - } - else { - u3_noun n_hel, l_hel, r_hel; - u3_noun pn_hel, qn_hel; - c3_o bit_o; - - u3x_trel(hel, &n_hel, &l_hel, &r_hel); - u3x_cell(n_hel, &pn_hel, &qn_hel); - - if ( (c3n == u3du(pn_hel)) ) { - bit_o = __((iq_tub == pn_hel)); - } - else { - u3_noun hpn_hel = u3h(pn_hel); - u3_noun tpn_hel = u3t(pn_hel); - - if ( !_(u3a_is_cat(hpn_hel)) || - !_(u3a_is_cat(tpn_hel)) ) { - return _fail(tub); - } - else bit_o = __((iq_tub >= hpn_hel) && (iq_tub <= tpn_hel)); - } - - if ( c3y == bit_o ) { - return u3x_good - (u3n_slam_on(u3k(qn_hel), u3k(tub))); - } else { - if ( c3y == _stew_wor(iq_tub, pn_hel) ) { - hel = l_hel; - } - else hel = r_hel; - } - } - } - } - } - u3_noun - u3we_stew_fun(u3_noun cor) - { - u3_noun con, hel, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &con, 0)) || - (u3_none == (hel = u3r_at(2, con))) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_stew_fun(hel, tub); - } - } - -/* _stir_pair(): stack frame recording intermediate parse results -*/ - typedef struct { - u3_noun har; // hair, p_vex - u3_noun res; // parse-result, puq_vex - } _stir_pair; - -/* stir -*/ - static u3_noun - _cqe_stir_fun(u3_noun rud, - u3_noun raq, - u3_noun fel, - u3_noun tub) - { - // pil_u: stack control structure - // par_u: frame pointer - // wag: initial accumulator (deconstructed) - // - u3a_pile pil_u; - _stir_pair* par_u; - u3_noun p_wag, puq_wag, quq_wag; - - u3a_pile_prep(&pil_u, sizeof(*par_u)); - - // push incremental, successful [fel] parse results onto road stack - // - { - u3_noun vex, p_vex, q_vex, puq_vex, quq_vex; - u3j_site fel_u; - u3j_gate_prep(&fel_u, u3k(fel)); - - vex = u3j_gate_slam(&fel_u, u3k(tub)); - u3x_cell(vex, &p_vex, &q_vex); - - u3k(tub); - - while ( u3_nul != q_vex ) { - u3x_trel(q_vex, 0, &puq_vex, &quq_vex); - - par_u = u3a_push(&pil_u); - par_u->har = u3k(p_vex); - par_u->res = u3k(puq_vex); - - u3z(tub); - tub = u3k(quq_vex); - - u3z(vex); - vex = u3j_gate_slam(&fel_u, u3k(tub)); - u3x_cell(vex, &p_vex, &q_vex); - } - - p_wag = u3k(p_vex); - puq_wag = u3k(rud); - quq_wag = tub; - - u3z(vex); - u3j_gate_lose(&fel_u); - } - - // unwind the stack, folding parse results into [wag] by way of [raq] - // - if ( c3n == u3a_pile_done(&pil_u) ) { - u3j_site raq_u; - u3j_gate_prep(&raq_u, u3k(raq)); - - // check for stack overflow - // - u3a_pile_sane(&pil_u); - - while ( c3n == u3a_pile_done(&pil_u) ) { - p_wag = _last_k(par_u->har, p_wag); - puq_wag = u3j_gate_slam(&raq_u, u3nc(par_u->res, puq_wag)); - par_u = u3a_pop(&pil_u); - } - - u3j_gate_lose(&raq_u); - } - - return u3nq(p_wag, u3_nul, puq_wag, quq_wag); - } - - u3_noun - u3we_stir_fun(u3_noun cor) - { - u3_noun van, rud, raq, fel, tub; - - if ( (c3n == u3r_mean(cor, u3x_sam, &tub, u3x_con, &van, 0)) || - (c3n == u3r_mean(van, u3x_sam_2, &rud, - u3x_sam_6, &raq, - u3x_sam_7, &fel, - 0)) ) - { - return u3m_bail(c3__fail); - } else { - return _cqe_stir_fun(rud, raq, fel, tub); - } - } diff --git a/pkg/urbit/jets/e/rd.c b/pkg/urbit/jets/e/rd.c deleted file mode 100644 index d4b44f778..000000000 --- a/pkg/urbit/jets/e/rd.c +++ /dev/null @@ -1,390 +0,0 @@ -/* j/e/rd.c -** -*/ -#include "all.h" -#include - -#define DOUBNAN 0x7ff8000000000000 - - union doub { - float64_t d; - c3_d c; - }; - -/* functions -*/ - static inline c3_t - _nan_test(float64_t a) - { - return !f64_eq(a, a); - } - - static inline float64_t - _nan_unify(float64_t a) - { - if ( _nan_test(a) ) - { - *(c3_d*)(&a) = DOUBNAN; - } - return a; - } - - static inline void - _set_rounding(c3_w a) - { - switch ( a ) - { - default: - u3m_bail(c3__fail); - break; - case c3__n: - softfloat_roundingMode = softfloat_round_near_even; - break; - case c3__z: - softfloat_roundingMode = softfloat_round_minMag; - break; - case c3__u: - softfloat_roundingMode = softfloat_round_max; - break; - case c3__d: - softfloat_roundingMode = softfloat_round_min; - break; - } - } - -/* add -*/ - u3_noun - u3qer_add(u3_atom a, - u3_atom b, - u3_atom r) - { - union doub c, d, e; - _set_rounding(r); - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - e.d = _nan_unify(f64_add(c.d, d.d)); - - return u3i_chubs(1, &e.c); - } - - u3_noun - u3wer_add(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_add(a, b, u3x_at(30, cor)); - } - } - -/* sub -*/ - u3_noun - u3qer_sub(u3_atom a, - u3_atom b, - u3_atom r) - { - union doub c, d, e; - _set_rounding(r); - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - e.d = _nan_unify(f64_sub(c.d, d.d)); - - return u3i_chubs(1, &e.c); - } - - u3_noun - u3wer_sub(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_sub(a, b, u3x_at(30, cor)); - } - } - -/* mul -*/ - u3_noun - u3qer_mul(u3_atom a, - u3_atom b, - u3_atom r) - { - union doub c, d, e; - _set_rounding(r); - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - e.d = _nan_unify(f64_mul(c.d, d.d)); - - return u3i_chubs(1, &e.c); - } - - u3_noun - u3wer_mul(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_mul(a, b, u3x_at(30, cor)); - } - } - -/* div -*/ - u3_noun - u3qer_div(u3_atom a, - u3_atom b, - u3_atom r) - { - union doub c, d, e; - _set_rounding(r); - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - e.d = _nan_unify(f64_div(c.d, d.d)); - - return u3i_chubs(1, &e.c); - } - - u3_noun - u3wer_div(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_div(a, b, u3x_at(30, cor)); - } - } - -/* sqt -*/ - u3_noun - u3qer_sqt(u3_atom a, - u3_atom r) - { - union doub c, d; - _set_rounding(r); - c.c = u3r_chub(0, a); - d.d = _nan_unify(f64_sqrt(c.d)); - - return u3i_chubs(1, &d.c); - } - - u3_noun - u3wer_sqt(u3_noun cor) - { - u3_noun a; - - if ( c3n == (a = u3r_at(u3x_sam, cor)) || - c3n == u3ud(a) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_sqt(a, u3x_at(30, cor)); - } - } - -/* fma -*/ - u3_noun - u3qer_fma(u3_atom a, - u3_atom b, - u3_atom c, - u3_atom r) - { - union doub d, e, f, g; - _set_rounding(r); - d.c = u3r_chub(0, a); - e.c = u3r_chub(0, b); - f.c = u3r_chub(0, c); - g.d = _nan_unify(f64_mulAdd(d.d, e.d, f.d)); - - return u3i_chubs(1, &g.c); - } - - u3_noun - u3wer_fma(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_6, &b, u3x_sam_7, &c, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) || - c3n == u3ud(c) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_fma(a, b, c, u3x_at(30, cor)); - } - } - -/* lth -*/ - u3_noun - u3qer_lth(u3_atom a, - u3_atom b) - { - union doub c, d; - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - - return __(f64_lt(c.d, d.d)); - } - - u3_noun - u3wer_lth(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_lth(a, b); - } - } - -/* lte -*/ - u3_noun - u3qer_lte(u3_atom a, - u3_atom b) - { - union doub c, d; - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - - return __(f64_le(c.d, d.d)); - } - - u3_noun - u3wer_lte(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_lte(a, b); - } - } - -/* equ -*/ - u3_noun - u3qer_equ(u3_atom a, - u3_atom b) - { - union doub c, d; - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - - return __(f64_eq(c.d, d.d)); - } - - u3_noun - u3wer_equ(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_equ(a, b); - } - } - -/* gte -*/ - u3_noun - u3qer_gte(u3_atom a, - u3_atom b) - { - union doub c, d; - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - - return __(f64_le(d.d, c.d)); - } - - u3_noun - u3wer_gte(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_gte(a, b); - } - } - -/* gth -*/ - u3_noun - u3qer_gth(u3_atom a, - u3_atom b) - { - union doub c, d; - c.c = u3r_chub(0, a); - d.c = u3r_chub(0, b); - - return __(f64_lt(d.d, c.d)); - } - - u3_noun - u3wer_gth(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qer_gth(a, b); - } - } diff --git a/pkg/urbit/jets/e/rh.c b/pkg/urbit/jets/e/rh.c deleted file mode 100644 index 472de374a..000000000 --- a/pkg/urbit/jets/e/rh.c +++ /dev/null @@ -1,390 +0,0 @@ -/* j/e/rh.c -** -*/ -#include "all.h" -#include - -#define HALFNAN 0x7e00 - - union half { - float16_t h; - c3_s c; - }; - -/* functions -*/ - static inline c3_t - _nan_test(float16_t a) - { - return !f16_eq(a, a); - } - - static inline float16_t - _nan_unify(float16_t a) - { - if ( _nan_test(a) ) - { - *(c3_s*)(&a) = HALFNAN; - } - return a; - } - - static inline void - _set_rounding(c3_w a) - { - switch ( a ) - { - default: - u3m_bail(c3__fail); - break; - case c3__n: - softfloat_roundingMode = softfloat_round_near_even; - break; - case c3__z: - softfloat_roundingMode = softfloat_round_minMag; - break; - case c3__u: - softfloat_roundingMode = softfloat_round_max; - break; - case c3__d: - softfloat_roundingMode = softfloat_round_min; - break; - } - } - -/* add -*/ - u3_noun - u3qes_add(u3_atom a, - u3_atom b, - u3_atom r) - { - union half c, d, e; - _set_rounding(r); - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - e.h = _nan_unify(f16_add(c.h, d.h)); - - return e.c; - } - - u3_noun - u3wes_add(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_add(a, b, u3x_at(30, cor)); - } - } - -/* sub -*/ - u3_noun - u3qes_sub(u3_atom a, - u3_atom b, - u3_atom r) - { - union half c, d, e; - _set_rounding(r); - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - e.h = _nan_unify(f16_sub(c.h, d.h)); - - return e.c; - } - - u3_noun - u3wes_sub(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_sub(a, b, u3x_at(30, cor)); - } - } - -/* mul -*/ - u3_noun - u3qes_mul(u3_atom a, - u3_atom b, - u3_atom r) - { - union half c, d, e; - _set_rounding(r); - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - e.h = _nan_unify(f16_mul(c.h, d.h)); - - return e.c; - } - - u3_noun - u3wes_mul(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_mul(a, b, u3x_at(30, cor)); - } - } - -/* div -*/ - u3_noun - u3qes_div(u3_atom a, - u3_atom b, - u3_atom r) - { - union half c, d, e; - _set_rounding(r); - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - e.h = _nan_unify(f16_div(c.h, d.h)); - - return e.c; - } - - u3_noun - u3wes_div(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_div(a, b, u3x_at(30, cor)); - } - } - -/* sqt -*/ - u3_noun - u3qes_sqt(u3_atom a, - u3_atom r) - { - union half c, d; - _set_rounding(r); - c.c = u3r_word(0, a); - d.h = _nan_unify(f16_sqrt(c.h)); - - return d.c; - } - - u3_noun - u3wes_sqt(u3_noun cor) - { - u3_noun a; - - if ( c3n == (a = u3r_at(u3x_sam, cor)) || - c3n == u3ud(a) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_sqt(a, u3x_at(30, cor)); - } - } - -/* fma -*/ - u3_noun - u3qes_fma(u3_atom a, - u3_atom b, - u3_atom c, - u3_atom r) - { - union half d, e, f, g; - _set_rounding(r); - d.c = u3r_word(0, a); - e.c = u3r_word(0, b); - f.c = u3r_word(0, c); - g.h = _nan_unify(f16_mulAdd(d.h, e.h, f.h)); - - return g.c; - } - - u3_noun - u3wes_fma(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_6, &b, u3x_sam_7, &c, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) || - c3n == u3ud(c) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_fma(a, b, c, u3x_at(30, cor)); - } - } - -/* lth -*/ - u3_noun - u3qes_lth(u3_atom a, - u3_atom b) - { - union half c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f16_lt(c.h, d.h)); - } - - u3_noun - u3wes_lth(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_lth(a, b); - } - } - -/* lte -*/ - u3_noun - u3qes_lte(u3_atom a, - u3_atom b) - { - union half c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f16_le(c.h, d.h)); - } - - u3_noun - u3wes_lte(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_lte(a, b); - } - } - -/* equ -*/ - u3_noun - u3qes_equ(u3_atom a, - u3_atom b) - { - union half c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f16_eq(c.h, d.h)); - } - - u3_noun - u3wes_equ(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_equ(a, b); - } - } - -/* gte -*/ - u3_noun - u3qes_gte(u3_atom a, - u3_atom b) - { - union half c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f16_le(d.h, c.h)); - } - - u3_noun - u3wes_gte(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_gte(a, b); - } - } - -/* gth -*/ - u3_noun - u3qes_gth(u3_atom a, - u3_atom b) - { - union half c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f16_lt(d.h, c.h)); - } - - u3_noun - u3wes_gth(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qes_gth(a, b); - } - } diff --git a/pkg/urbit/jets/e/ripe.c b/pkg/urbit/jets/e/ripe.c deleted file mode 100644 index 457068d47..000000000 --- a/pkg/urbit/jets/e/ripe.c +++ /dev/null @@ -1,45 +0,0 @@ -/* j/5/ripe.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_atom - _cqe_ripe(u3_atom wid, u3_atom dat) - { - c3_w len_w; - if ( !u3r_word_fit(&len_w, wid) ) { - return u3m_bail(c3__fail); - } - else { - u3_atom ret; - c3_y out_y[20]; - c3_y *dat_y = u3r_bytes_alloc(0, len_w, dat); - - ret = ( 0 == urcrypt_ripemd160(dat_y, len_w, out_y) ) - ? u3i_bytes(20, out_y) - : u3_none; - - u3a_free(dat_y); - return ret; - } - } - - u3_noun - u3we_ripe(u3_noun cor) - { - u3_noun wid, dat; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &wid, - u3x_sam_3, &dat, 0) || - u3ud(wid) || u3ud(dat)) - ) - { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("ripe", _cqe_ripe(wid, dat)); - } - } diff --git a/pkg/urbit/jets/e/rq.c b/pkg/urbit/jets/e/rq.c deleted file mode 100644 index 19af6acc6..000000000 --- a/pkg/urbit/jets/e/rq.c +++ /dev/null @@ -1,446 +0,0 @@ -/* j/e/rq.c -** -*/ -#include "all.h" -#include - -#define QUADNAN 0x7fff800000000000 - - union quad { - float128_t* q; - c3_w* c; - }; - -/* functions -*/ - static inline c3_t - _nan_test(float128_t* a) - { - return !f128M_eq(a, a); - } - - static inline void - _nan_unify(float128_t* a) - { - if ( _nan_test(a) ) - { - *( (c3_d*)a) = 0; - *(((c3_d*)a)+1) = QUADNAN; - } - } - - static inline void - _set_rounding(c3_w a) - { - switch ( a ) - { - default: - u3m_bail(c3__fail); - break; - case c3__n: - softfloat_roundingMode = softfloat_round_near_even; - break; - case c3__z: - softfloat_roundingMode = softfloat_round_minMag; - break; - case c3__u: - softfloat_roundingMode = softfloat_round_max; - break; - case c3__d: - softfloat_roundingMode = softfloat_round_min; - break; - } - } - -/* add -*/ - u3_noun - u3qeq_add(u3_atom a, - u3_atom b, - u3_atom r) - { - union quad c, d, e; - _set_rounding(r); - c.c = alloca(16); - d.c = alloca(16); - e.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - f128M_add(c.q, d.q, e.q); - _nan_unify(e.q); - - u3_atom f = u3i_words(4, e.c); - return f; - } - - u3_noun - u3weq_add(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_add(a, b, u3x_at(30, cor)); - } - } - -/* sub -*/ - u3_noun - u3qeq_sub(u3_atom a, - u3_atom b, - u3_atom r) - { - union quad c, d, e; - _set_rounding(r); - c.c = alloca(16); - d.c = alloca(16); - e.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - f128M_sub(c.q, d.q, e.q); - _nan_unify(e.q); - - u3_atom f = u3i_words(4, e.c); - return f; - } - - u3_noun - u3weq_sub(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_sub(a, b, u3x_at(30, cor)); - } - } - -/* mul -*/ - u3_noun - u3qeq_mul(u3_atom a, - u3_atom b, - u3_atom r) - { - union quad c, d, e; - _set_rounding(r); - c.c = alloca(16); - d.c = alloca(16); - e.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - f128M_mul(c.q, d.q, e.q); - _nan_unify(e.q); - - u3_atom f = u3i_words(4, e.c); - return f; - } - - u3_noun - u3weq_mul(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_mul(a, b, u3x_at(30, cor)); - } - } - -/* div -*/ - u3_noun - u3qeq_div(u3_atom a, - u3_atom b, - u3_atom r) - { - union quad c, d, e; - _set_rounding(r); - c.c = alloca(16); - d.c = alloca(16); - e.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - f128M_div(c.q, d.q, e.q); - _nan_unify(e.q); - - u3_atom f = u3i_words(4, e.c); - return f; - } - - u3_noun - u3weq_div(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_div(a, b, u3x_at(30, cor)); - } - } - -/* sqt -*/ - u3_noun - u3qeq_sqt(u3_atom a, - u3_atom r) - { - union quad c, d; - _set_rounding(r); - c.c = alloca(16); - d.c = alloca(16); - - u3r_words(0, 4, c.c, a); - f128M_sqrt(c.q, d.q); - _nan_unify(d.q); - - u3_atom e = u3i_words(4, d.c); - return e; - } - - u3_noun - u3weq_sqt(u3_noun cor) - { - u3_noun a; - - if ( c3n == (a = u3r_at(u3x_sam, cor)) || - c3n == u3ud(a) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_sqt(a, u3x_at(30, cor)); - } - } - -/* fma -*/ - u3_noun - u3qeq_fma(u3_atom a, - u3_atom b, - u3_atom c, - u3_atom r) - { - union quad d, e, f, g; - _set_rounding(r); - d.c = alloca(16); - e.c = alloca(16); - f.c = alloca(16); - g.c = alloca(16); - - u3r_words(0, 4, d.c, a); - u3r_words(0, 4, e.c, b); - u3r_words(0, 4, f.c, c); - f128M_mulAdd(d.q, e.q, f.q, g.q); - _nan_unify(g.q); - - u3_atom h = u3i_words(4, g.c); - return h; - } - - u3_noun - u3weq_fma(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_6, &b, u3x_sam_7, &c, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) || - c3n == u3ud(c) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_fma(a, b, c, u3x_at(30, cor)); - } - } - -/* lth -*/ - u3_noun - u3qeq_lth(u3_atom a, - u3_atom b) - { - union quad c, d; - c.c = alloca(16); - d.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - c3_o e = __(f128M_lt(c.q, d.q)); - - return e; - } - - u3_noun - u3weq_lth(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_lth(a, b); - } - } - -/* lte -*/ - u3_noun - u3qeq_lte(u3_atom a, - u3_atom b) - { - union quad c, d; - c.c = alloca(16); - d.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - c3_o e = __(f128M_le(c.q, d.q)); - - return e; - } - - u3_noun - u3weq_lte(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_lte(a, b); - } - } - -/* equ -*/ - u3_noun - u3qeq_equ(u3_atom a, - u3_atom b) - { - union quad c, d; - c.c = alloca(16); - d.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - c3_o e = __(f128M_eq(c.q, d.q)); - - return e; - } - - u3_noun - u3weq_equ(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_equ(a, b); - } - } - -/* gte -*/ - u3_noun - u3qeq_gte(u3_atom a, - u3_atom b) - { - union quad c, d; - c.c = alloca(16); - d.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - c3_o e = __(f128M_le(d.q, c.q)); - - return e; - } - - u3_noun - u3weq_gte(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_gte(a, b); - } - } - -/* gth -*/ - u3_noun - u3qeq_gth(u3_atom a, - u3_atom b) - { - union quad c, d; - c.c = alloca(16); - d.c = alloca(16); - - u3r_words(0, 4, c.c, a); - u3r_words(0, 4, d.c, b); - c3_o e = __(f128M_lt(d.q, c.q)); - - return e; - } - - u3_noun - u3weq_gth(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qeq_gth(a, b); - } - } diff --git a/pkg/urbit/jets/e/rs.c b/pkg/urbit/jets/e/rs.c deleted file mode 100644 index b0f2a4574..000000000 --- a/pkg/urbit/jets/e/rs.c +++ /dev/null @@ -1,390 +0,0 @@ -/* j/e/rs.c -** -*/ -#include "all.h" -#include - -#define SINGNAN 0x7fc00000 - - union sing { - float32_t s; - c3_w c; - }; - -/* functions -*/ - static inline c3_t - _nan_test(float32_t a) - { - return !f32_eq(a, a); - } - - static inline float32_t - _nan_unify(float32_t a) - { - if ( _nan_test(a) ) - { - *(c3_w*)(&a) = SINGNAN; - } - return a; - } - - static inline void - _set_rounding(c3_w a) - { - switch ( a ) - { - default: - u3m_bail(c3__fail); - break; - case c3__n: - softfloat_roundingMode = softfloat_round_near_even; - break; - case c3__z: - softfloat_roundingMode = softfloat_round_minMag; - break; - case c3__u: - softfloat_roundingMode = softfloat_round_max; - break; - case c3__d: - softfloat_roundingMode = softfloat_round_min; - break; - } - } - -/* add -*/ - u3_noun - u3qet_add(u3_atom a, - u3_atom b, - u3_atom r) - { - union sing c, d, e; - _set_rounding(r); - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - e.s = _nan_unify(f32_add(c.s, d.s)); - - return u3i_words(1, &e.c); - } - - u3_noun - u3wet_add(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_add(a, b, u3x_at(30, cor)); - } - } - -/* sub -*/ - u3_noun - u3qet_sub(u3_atom a, - u3_atom b, - u3_atom r) - { - union sing c, d, e; - _set_rounding(r); - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - e.s = _nan_unify(f32_sub(c.s, d.s)); - - return u3i_words(1, &e.c); - } - - u3_noun - u3wet_sub(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_sub(a, b, u3x_at(30, cor)); - } - } - -/* mul -*/ - u3_noun - u3qet_mul(u3_atom a, - u3_atom b, - u3_atom r) - { - union sing c, d, e; - _set_rounding(r); - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - e.s = _nan_unify(f32_mul(c.s, d.s)); - - return u3i_words(1, &e.c); - } - - u3_noun - u3wet_mul(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_mul(a, b, u3x_at(30, cor)); - } - } - -/* div -*/ - u3_noun - u3qet_div(u3_atom a, - u3_atom b, - u3_atom r) - { - union sing c, d, e; - _set_rounding(r); - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - e.s = _nan_unify(f32_div(c.s, d.s)); - - return u3i_words(1, &e.c); - } - - u3_noun - u3wet_div(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_div(a, b, u3x_at(30, cor)); - } - } - -/* sqt -*/ - u3_noun - u3qet_sqt(u3_atom a, - u3_atom r) - { - union sing c, d; - _set_rounding(r); - c.c = u3r_word(0, a); - d.s = _nan_unify(f32_sqrt(c.s)); - - return u3i_words(1, &d.c); - } - - u3_noun - u3wet_sqt(u3_noun cor) - { - u3_noun a; - - if ( c3n == (a = u3r_at(u3x_sam, cor)) || - c3n == u3ud(a) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_sqt(a, u3x_at(30, cor)); - } - } - -/* fma -*/ - u3_noun - u3qet_fma(u3_atom a, - u3_atom b, - u3_atom c, - u3_atom r) - { - union sing d, e, f, g; - _set_rounding(r); - d.c = u3r_word(0, a); - e.c = u3r_word(0, b); - f.c = u3r_word(0, c); - g.s = _nan_unify(f32_mulAdd(d.s, e.s, f.s)); - - return u3i_words(1, &g.c); - } - - u3_noun - u3wet_fma(u3_noun cor) - { - u3_noun a, b, c; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_6, &b, u3x_sam_7, &c, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) || - c3n == u3ud(c) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_fma(a, b, c, u3x_at(30, cor)); - } - } - -/* lth -*/ - u3_noun - u3qet_lth(u3_atom a, - u3_atom b) - { - union sing c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f32_lt(c.s, d.s)); - } - - u3_noun - u3wet_lth(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_lth(a, b); - } - } - -/* lte -*/ - u3_noun - u3qet_lte(u3_atom a, - u3_atom b) - { - union sing c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f32_le(c.s, d.s)); - } - - u3_noun - u3wet_lte(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_lte(a, b); - } - } - -/* equ -*/ - u3_noun - u3qet_equ(u3_atom a, - u3_atom b) - { - union sing c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f32_eq(c.s, d.s)); - } - - u3_noun - u3wet_equ(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_equ(a, b); - } - } - -/* gte -*/ - u3_noun - u3qet_gte(u3_atom a, - u3_atom b) - { - union sing c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f32_le(d.s, c.s)); - } - - u3_noun - u3wet_gte(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_gte(a, b); - } - } - -/* gth -*/ - u3_noun - u3qet_gth(u3_atom a, - u3_atom b) - { - union sing c, d; - c.c = u3r_word(0, a); - d.c = u3r_word(0, b); - - return __(f32_lt(d.s, c.s)); - } - - u3_noun - u3wet_gth(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0) || - c3n == u3ud(a) || - c3n == u3ud(b) ) - { - return u3m_bail(c3__exit); - } - else { - return u3qet_gth(a, b); - } - } diff --git a/pkg/urbit/jets/e/rub.c b/pkg/urbit/jets/e/rub.c deleted file mode 100644 index 641e53035..000000000 --- a/pkg/urbit/jets/e/rub.c +++ /dev/null @@ -1,85 +0,0 @@ -/* j/3/rub.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qe_rub(u3_atom a, - u3_atom b) - { - u3_atom c, d, e; - u3_atom w, x, y, z; - u3_atom p, q; - - u3_atom m; - { - c3_w bit_w = u3r_met(0, b); - u3_noun bit = u3i_words(1, &bit_w); - m = u3qa_add(a, bit); - u3z(bit); - } - - // Compute c and d. - { - x = u3k(a); - - while ( 0 == u3qc_cut(0, x, 1, b) ) { - u3_atom y = u3qa_inc(x); - - // Sanity check: crash if decoding more bits than available - if ( c3y == u3qa_gth(x, m)) { - // u3l_log("[%%rub-hard %d %d %d]\r\n", a, x, m); - return u3m_bail(c3__exit); - } - - u3z(x); - x = y; - } - if ( c3y == u3r_sing(x, a) ) { - u3z(x); - return u3nc(1, 0); - } - c = u3qa_sub(x, a); - d = u3qa_inc(x); - - u3z(x); - } - - // Compute e, p, q. - { - x = u3qa_dec(c); - y = u3qc_bex(x); - z = u3qc_cut(0, d, x, b); - - e = u3qa_add(y, z); - u3z(y); u3z(z); - - w = u3qa_add(c, c); - y = u3qa_add(w, e); - z = u3qa_add(d, x); - - p = u3qa_add(w, e); - q = u3qc_cut(0, z, e, b); - - u3z(w); u3z(x); u3z(y); u3z(z); - - return u3nc(p, q); - } - } - u3_noun - u3we_rub(u3_noun cor) - { - u3_noun a, b; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0)) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__fail); - } else { - return u3qe_rub(a, b); - } - } diff --git a/pkg/urbit/jets/e/scow.c b/pkg/urbit/jets/e/scow.c deleted file mode 100644 index 2d4150292..000000000 --- a/pkg/urbit/jets/e/scow.c +++ /dev/null @@ -1,389 +0,0 @@ -/* j/3/scow.c -** -*/ -#include "all.h" - -#include - -static -c3_y to_digit(c3_y tig) -{ - if (tig >= 10) { - return 87 + tig; - } else { - return '0' + tig; - } -} - -static -c3_y to_w_digit(c3_y tig) -{ - if (tig == 63) { - return '~'; - } else if (tig == 62) { - return '-'; - } else if (tig >= 36) { - return 29 + tig; - } else if (tig >= 10) { - return 87 + tig; - } else { - return '0' + tig; - } -} - -// gives the characters for a four 'digit' small hex atom. -static -void -_x_co_four(c3_w src, c3_y* a, c3_y* b, c3_y* c, c3_y* d) -{ - *d = to_digit(src & 0xF); - src >>= 4; - *c = to_digit(src & 0xF); - src >>= 4; - *b = to_digit(src & 0xF); - src >>= 4; - *a = to_digit(src & 0xF); -} - -// The parser always prints two digits on 0 in y-co. -static -void -_y_co_two(c3_w src, c3_y* a, c3_y* b) -{ - *b = to_digit(src % 10); - *a = to_digit(src / 10); -} - -// -static -u3_noun -_add_year(c3_w year, u3_noun out) -{ - while (year > 0) { - out = u3nc(to_digit(year % 10), out); - year = year / 10; - } - - return out; -} - -static -u3_noun -_print_da(u3_noun cor, u3_atom raw_da) -{ - u3_noun hok = u3j_cook("u3we_scow_print_da", u3k(cor), "yore"); - u3_noun yod = u3n_slam_on(hok, u3k(raw_da)); - - u3_noun out = 0; - - u3_atom age, year, month, day, hour, min, sec, f; - if (c3n == u3r_mean(yod, 4, &age, - 5, &year, - 6, &month, - 14, &day, - 30, &hour, - 62, &min, - 126, &sec, - 127, &f, - 0)) { - return u3m_bail(c3__exit); - } - - if (f != 0) { - u3_noun f_list = u3qb_flop(f); - - for (u3_noun cur = f_list; - _(u3a_is_cell(cur)); - cur = u3t(cur)) { - if (_(u3a_is_cat(u3h(cur)))) { - c3_y a, b, c, d; - _x_co_four(u3h(cur), &a, &b, &c, &d); - out = u3nq('.', a, b, u3nt(c, d, out)); - } else { - // No way to deal with big atoms. fall back. - u3z(yod); - u3z(out); - u3z(f_list); - return u3_none; - } - } - - u3z(f_list); - out = u3nc('.', out); - } - - // if there isn't a hex list and the h/m/s are all 0, skip printing hours. - if (f != 0 || hour != 0 || min != 0 || sec != 0) { - if (!_(u3a_is_cat(hour)) || - !_(u3a_is_cat(min)) || - !_(u3a_is_cat(sec))) { - // Input is weird, fallback to nock. - u3z(yod); - u3z(out); - return u3_none; - } - - c3_y sa, sb, ma, mb, ha, hb; - _y_co_two(sec, &sa, &sb); - out = u3nq('.', sa, sb, out); - - _y_co_two(min, &ma, &mb); - out = u3nq('.', ma, mb, out); - - _y_co_two(hour, &ha, &hb); - out = u3nq('.', ha, hb, out); - - out = u3nc('.', out); - } - - // We always print the Y.M.D. Unlike others, these numbers are unconstrained - // by length, but in practice, the month number and day number can only be up - // to two digits because of +yore. We still need to remove 0 prefixes, - // though. - if (!_(u3a_is_cat(day)) || day > 99 || - !_(u3a_is_cat(month)) || month > 99 || - !_(u3a_is_cat(year))) { - // Input is weird, fallback to nock. - u3z(yod); - u3z(out); - return u3_none; - } - - c3_y da, db; - _y_co_two(day, &da, &db); - out = u3nc(db, out); - if (da != '0') { - out = u3nc(da, out); - } - out = u3nc('.', out); - - c3_y ma, mb; - _y_co_two(month, &ma, &mb); - out = u3nc(mb, out); - if (ma != '0') { - out = u3nc(ma, out); - } - out = u3nc('.', out); - - // suffix the year with a '-' for BC dates - if (age == c3n) { - out = u3nc('-', out); - } - - // The year part is the only place where we have to explicitly loop over the - // input because it can be arbitrarily large or small. - out = _add_year(year, out); - - out = u3nc('~', out); - - u3z(yod); - return out; -} - -static -u3_noun -_print_p(u3_atom cor, u3_atom p) -{ - // Scramble the raw number to the concealed version. - u3_noun ob = u3j_cook("u3we_scow_ob_p", u3k(cor), "ob"); - u3_noun hok = u3j_cook("u3we_scow_fein_p", ob, "fein"); - u3_atom sxz = u3n_slam_on(hok, u3k(p)); - - // Simple galaxy case - if (c3y == u3qa_lth(sxz, 256)) { - c3_y a, b, c; - u3_po_to_suffix(sxz, &a, &b, &c); - u3z(sxz); - return u3nq('~', a, b, u3nc(c, 0)); - } - - u3_atom dyy = u3qc_met(4, sxz); - if (!_(u3a_is_cat(dyy))) { - u3z(sxz); - u3z(dyy); - return u3_none; - } - - u3_noun list = 0; - for (c3_w imp = 0; imp != dyy; ++imp) { - c3_w log = u3qc_end(4, 1, sxz); - c3_w prefix = u3qc_rsh(3, 1, log); - c3_w suffix = u3qc_end(3, 1, log); - - c3_y a, b, c, d, e, f; - u3_po_to_prefix(prefix, &a, &b, &c); - u3_po_to_suffix(suffix, &d, &e, &f); - - if (imp % 4 == 0) { - if (imp != 0) { - list = u3nt('-', '-', list); - } - } else { - list = u3nc('-', list); - } - - list = u3nq(a, b, c, u3nq(d, e, f, list)); - - sxz = u3qc_rsh(4, 1, sxz); - } - - u3z(sxz); - return u3nc('~', list); -} - -static -u3_noun -_print_ud(u3_atom ud) -{ - // number of characters printed "between" periods. - c3_i between = 0; - u3_noun list = 0; - - // increase input refcount to be consumed in u3ka_div(), which will free each - // intermediary state. - u3k(ud); - - do { - if (between == 3) { - list = u3nc('.', list); - between = 0; - } - - list = u3nc(u3ka_add(u3qa_mod(ud, 10), '0'), list); - between++; - ud = u3ka_div(ud, 10); - } while (ud != 0); - - return list; -} - -static -u3_noun -_print_uv(u3_atom uv) -{ - // number of characters printed "between" periods. - c3_i between = 0; - u3_noun list = 0; - - // increase input refcount to be consumed in u3ka_div(), which will free each - // intermediary state. - u3k(uv); - - do { - if (between == 5) { - list = u3nc('.', list); - between = 0; - } - - c3_y tig = u3qa_mod(uv, 32); - list = u3nc(to_digit(tig), list); - between++; - uv = u3ka_div(uv, 32); - } while (uv != 0); - - return u3nt('0', 'v', list); -} - -static -u3_noun -_print_uw(u3_atom uw) -{ - // number of characters printed "between" periods. - c3_i between = 0; - u3_noun list = 0; - - // increase input refcount to be consumed in u3ka_div(), which will free each - // intermediary state. - u3k(uw); - - do { - if (between == 5) { - list = u3nc('.', list); - between = 0; - } - - c3_y tig = u3qa_mod(uw, 64); - list = u3nc(to_w_digit(tig), list); - between++; - uw = u3ka_div(uw, 64); - } while (uw != 0); - - return u3nt('0', 'w', list); -} - -u3_noun -u3we_scow(u3_noun cor) -{ - u3_atom mod; - u3_atom atom; - - if (c3n == u3r_mean(cor, u3x_sam_2, &mod, - u3x_sam_3, &atom, 0)) { - return u3m_bail(c3__exit); - } - - switch (mod) { - case c3__da: - return _print_da(cor, atom); - - case 'p': - return _print_p(cor, atom); - - case c3__ud: - return _print_ud(atom); - - case c3__uv: - return _print_uv(atom); - - case c3__uw: - return _print_uw(atom); - - default: - return u3_none; - } -} - -u3_noun -u3we_scot(u3_noun cor) -{ - u3_atom mod; - u3_atom atom; - - if (c3n == u3r_mean(cor, u3x_sam_2, &mod, - u3x_sam_3, &atom, 0)) { - return u3m_bail(c3__exit); - } - - u3_noun tape; - switch (mod) { - case c3__da: - tape = _print_da(cor, atom); - break; - - case 'p': - tape = _print_p(cor, atom); - break; - - case c3__ud: - tape = _print_ud(atom); - break; - - case c3__uv: - tape = _print_uv(atom); - break; - - case c3__uw: - tape = _print_uw(atom); - break; - - default: - return u3_none; - } - - if (tape == u3_none) { - return tape; - } - u3_noun ret = u3qc_rap(3, tape); - u3z(tape); - return ret; -} diff --git a/pkg/urbit/jets/e/scr.c b/pkg/urbit/jets/e/scr.c deleted file mode 100644 index 0a04925de..000000000 --- a/pkg/urbit/jets/e/scr.c +++ /dev/null @@ -1,227 +0,0 @@ -/* j/5/scr.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_weak - _cqes_hs(u3_atom p, c3_w pwd_w, - u3_atom s, c3_w sal_w, - u3_atom n, - u3_atom r, - u3_atom z, - u3_atom d) - { - u3_noun chk; - c3_w out_w; - - if ( !u3r_word_fit(&out_w, d) ) { - return u3m_bail(c3__fail); - } - if ( 0 == r || 0 == z ) { - return u3m_bail(c3__exit); - } - chk = u3qc_bex(31); - if ( (c3n == u3qa_lth(pwd_w, chk)) || - (c3n == u3qa_lth(sal_w, chk)) ) { - return u3m_bail(c3__exit); - } - u3z(chk); - chk = u3kc_bex(u3ka_dec(u3qc_xeb(n))); - if ( c3n == u3r_sing(n, chk) ) { - return u3m_bail(c3__exit); - } - u3z(chk); - if ( c3n == u3ka_lte( - u3ka_mul(u3qa_mul(128, r), u3ka_dec(u3qa_add(n, z))), - u3qc_bex(30)) ) { - return u3m_bail(c3__exit); - } - - if ( (u3r_met(6, n) > 1) || - (u3r_met(5, r) > 1) || - (u3r_met(5, z) > 1) ) { - return u3_none; - } - else { - u3_noun pro; - c3_d n_d = u3r_chub(0, n); - c3_w r_w = u3r_word(0, r), - z_w = u3r_word(0, z); - c3_y *pwd_y = u3a_malloc(pwd_w), - *sal_y = u3a_malloc(sal_w), - *out_y = u3a_malloc(d); - u3r_bytes(0, pwd_w, pwd_y, p); - u3r_bytes(0, sal_w, sal_y, s); - pro = ( 0 == urcrypt_scrypt(pwd_y, pwd_w, - sal_y, sal_w, - n_d, r_w, z_w, - out_w, out_y) ) - ? u3i_bytes(out_w, out_y) - : u3_none; - u3a_free(pwd_y); - u3a_free(sal_y); - u3a_free(out_y); - return pro; - } - } - - static u3_weak - _cqes_hsl(u3_atom p, u3_atom pl, - u3_atom s, u3_atom sl, - u3_atom n, - u3_atom r, - u3_atom z, - u3_atom d) - { - c3_w pwd_w, sal_w; - if ( !(u3r_word_fit(&pwd_w, pl) && - u3r_word_fit(&sal_w, sl)) ) { - return u3m_bail(c3__fail); - } - else { - return _cqes_hs(p, pwd_w, s, sal_w, n, r, z, d); - } - } - - u3_noun - u3wes_hsl(u3_noun cor) - { - u3_noun p, pl, s, sl, n, r, z, d; - u3_noun q; - - u3x_quil(u3x_at(u3x_sam, cor), &p, &pl, &s, &sl, &q); - u3x_qual(q, &n, &r, &z, &d); - - if ( !(_(u3a_is_atom(p)) && _(u3a_is_atom(pl)) && - _(u3a_is_atom(s)) && _(u3a_is_atom(sl)) && - _(u3a_is_atom(n)) && _(u3a_is_atom(r)) && - _(u3a_is_atom(z)) && _(u3a_is_atom(d))) ) { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("scr-hsl", _cqes_hsl(p, pl, s, sl, n, r, z, d)); - } - } - - static u3_weak - _cqes_hsh(u3_atom p, - u3_atom s, - u3_atom n, - u3_atom r, - u3_atom z, - u3_atom d) - { - return _cqes_hs(p, u3r_met(3, p), - s, u3r_met(3, s), - n, r, z, d); - } - - u3_noun - u3wes_hsh(u3_noun cor) - { - u3_noun p, s, n, r, z, d; - u3_noun q; - - u3x_quil(u3x_at(u3x_sam, cor), &p, &s, &n, &r, &q); - u3x_cell(q, &z, &d); - - if ( !(_(u3a_is_atom(p)) && _(u3a_is_atom(s)) && - _(u3a_is_atom(n)) && _(u3a_is_atom(r)) && - _(u3a_is_atom(z)) && _(u3a_is_atom(d))) ) { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("scr-hsh", _cqes_hsh(p, s, n, r, z, d)); - } - } - - static u3_atom - _cqes_pb(u3_atom p, c3_w pwd_w, - u3_atom s, c3_w sal_w, - u3_atom c, - u3_atom d) - { - if ( (c > (1 << 28)) || - (d > (1 << 30)) ) { - // max key length 1gb - // max iterations 2^28 - return u3m_bail(c3__exit); - } - else { - u3_noun pro; - c3_w out_w; - c3_y *pwd_y = u3a_malloc(pwd_w), - *sal_y = u3a_malloc(sal_w), - *out_y = u3a_malloc(d); - u3r_bytes(0, pwd_w, pwd_y, p); - u3r_bytes(0, sal_w, sal_y, s); - urcrypt_scrypt_pbkdf_sha256(pwd_y, pwd_w, sal_y, sal_w, c, d, out_y); - pro = u3i_bytes(d, out_y); - u3a_free(pwd_y); - u3a_free(sal_y); - u3a_free(out_y); - return pro; - } - } - - static u3_noun - _cqes_pbl(u3_atom p, u3_atom pl, - u3_atom s, u3_atom sl, - u3_atom c, - u3_atom d) - { - c3_w pwd_w, sal_w; - if ( !(u3r_word_fit(&pwd_w, pl) && - u3r_word_fit(&sal_w, sl)) ) { - return u3m_bail(c3__fail); - } - else { - return _cqes_pb(p, pwd_w, s, sal_w, c, d); - } - } - - u3_noun - u3wes_pbl(u3_noun cor) - { - u3_noun p, pl, s, sl, c, d; - u3_noun q; - - u3x_quil(u3x_at(u3x_sam, cor), &p, &pl, &s, &sl, &q); - u3x_cell(q, &c, &d); - - if ( !(_(u3a_is_atom(p)) && _(u3a_is_atom(s)) && - _(u3a_is_atom(pl)) && _(u3a_is_atom(sl)) && - _(u3a_is_atom(c)) && _(u3a_is_atom(d))) ) { - return u3m_bail(c3__exit); - } - else { - return _cqes_pbl(p, pl, s, sl, c, d); - } - } - - static u3_atom - _cqes_pbk(u3_atom p, u3_atom s, u3_atom c, u3_atom d) - { - return _cqes_pb(p, u3r_met(3, p), - s, u3r_met(3, s), - c, d); - } - - u3_noun - u3wes_pbk(u3_noun cor) - { - u3_noun p, s, c, d; - - u3x_qual(u3x_at(u3x_sam, cor), &p, &s, &c, &d); - - if ( !(_(u3a_is_atom(p)) && _(u3a_is_atom(s)) && - _(u3a_is_atom(c)) && _(u3a_is_atom(d))) ) { - return u3m_bail(c3__exit); - } - else { - return _cqes_pbk(p, s, c, d); - } - } diff --git a/pkg/urbit/jets/e/secp.c b/pkg/urbit/jets/e/secp.c deleted file mode 100644 index 21569603c..000000000 --- a/pkg/urbit/jets/e/secp.c +++ /dev/null @@ -1,297 +0,0 @@ - /* j/5/secp.c -** -*/ -#include "all.h" -#include "urcrypt.h" -#include - -static urcrypt_secp_context* sec_u; - -/* call at process start */ -void -u3je_secp_init() -{ - c3_y ent_y[32]; - ent_getentropy(ent_y, 32); - sec_u = malloc(urcrypt_secp_prealloc_size()); - - if ( 0 != urcrypt_secp_init(sec_u, ent_y) ) { - u3l_log("u3e_secp_init failed\r\n"); - abort(); - } -} - -/* call at process end */ -void -u3je_secp_stop() -{ - urcrypt_secp_destroy(sec_u); - free(sec_u); - sec_u = NULL; -} - -/* util funcs - */ -static c3_t -_cqes_in_order(u3_atom a) -{ - // this is the "n" parameter of the secp256k1 curve - static const c3_w now_w[8] = { - 0xd0364141, 0xbfd25e8c, 0xaf48a03b, 0xbaaedce6, - 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff - }; - - if ( 0 == a ) { - return 0; - } - else if ( c3y == u3a_is_cat(a) ) { - return 1; - } - else { - u3a_atom* a_u = u3a_to_ptr(a); - c3_w len_w = a_u->len_w; - - if ( len_w < 8 ) { - return 1; - } - else if ( len_w > 8 ) { - return 0; - } - else { - c3_y i_y; - c3_w *buf_w = a_u->buf_w; - // loop from most to least significant words - for ( i_y = 8; i_y > 0; ) { - c3_w b_w = buf_w[i_y], - o_w = now_w[--i_y]; - if ( b_w < o_w ) { - return 1; - } - else if ( b_w > o_w ) { - return 0; - } - } - return 1; - } - } -} - -static void -_cqes_unpack_fe(u3_atom k, c3_y out_y[32]) -{ - if ( _cqes_in_order(k) ) { - u3r_bytes(0, 32, out_y, k); - } - else { - u3m_bail(c3__exit); - } -} - -/* sign hash with priv key - */ -static u3_noun -_cqes_sign(u3_atom has, - u3_atom prv) -{ - c3_y has_y[32]; - - if ( 0 != u3r_bytes_fit(32, has_y, has) ) { - return u3m_bail(c3__exit); - } - else { - c3_y prv_y[32], v_y, r_y[32], s_y[32]; - _cqes_unpack_fe(prv, prv_y); - - return( 0 == urcrypt_secp_sign(sec_u, has_y, prv_y, &v_y, r_y, s_y) ) - ? u3nt(v_y, u3i_bytes(32, r_y), u3i_bytes(32, s_y)) - : u3_none; - } -} - -u3_noun -u3we_sign(u3_noun cor) -{ - - u3_noun has, prv; - - if ( (c3n == u3r_mean(cor, - u3x_sam_2, &has, - u3x_sam_3, &prv, - 0)) || - (c3n == u3ud(has)) || - (c3n == u3ud(prv))) { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("secp-sign", _cqes_sign(has, prv)); - } -} - -/* recover pubkey from signature (which is how we verify signatures) -*/ -static u3_noun -_cqes_reco(u3_atom has, - u3_atom siv, /* signature: v */ - u3_atom sir, /* signature: r */ - u3_atom sis) /* signature: s */ -{ - c3_y has_y[32]; - if ( !((siv < 4) && (0 == u3r_bytes_fit(32, has_y, has)) ) ) { - return u3m_bail(c3__exit); - } - else { - c3_y sir_y[32], sis_y[32], x_y[32], y_y[32]; - c3_y siv_y = (c3_y) siv; - _cqes_unpack_fe(sir, sir_y); - _cqes_unpack_fe(sis, sis_y); - return - ( 0 == urcrypt_secp_reco(sec_u, has_y, siv, sir_y, sis_y, x_y, y_y) ) - ? u3nc(u3i_bytes(32, x_y), u3i_bytes(32, y_y)) - : u3_none; - } -} - -u3_noun -u3we_reco(u3_noun cor) -{ - u3_noun has, /* hash */ - siv, sir, sis; /* signature: v, r, s */ - - if ( (c3n == u3r_mean(cor, - u3x_sam_2, &has, - u3x_sam_6, &siv, - u3x_sam_14, &sir, - u3x_sam_15, &sis, - 0)) || - (c3n == u3ud(has)) || - (c3n == u3ud(siv)) || - (c3n == u3ud(sir)) || - (c3n == u3ud(sis)) ) { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("secp-reco", _cqes_reco(has, siv, sir, sis)); - } -} - -static u3_atom -_cqes_make(u3_atom has, - u3_atom prv) -{ - c3_y has_y[32]; - - if ( 0 != u3r_bytes_fit(32, has_y, has) ) { - return u3m_bail(c3__exit); - } - else { - c3_y prv_y[32], out_y[32]; - _cqes_unpack_fe(prv, prv_y); - return ( 0 == urcrypt_secp_make(has_y, prv_y, out_y) ) - ? u3i_bytes(32, out_y) - : u3_none; - } -} - -u3_noun -u3we_make(u3_noun cor) -{ - u3_noun has, prv; - if ( (c3n == u3r_mean(cor, - u3x_sam_2, &has, - u3x_sam_3, &prv, - 0)) || - (c3n == u3ud(has)) || - (c3n == u3ud(prv)) ) { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("secp-make", _cqes_make(has, prv)); - } -} - -/* create a schnorr signature -*/ -static u3_weak -_cqes_sosi(u3_atom sk, u3_atom m, u3_atom a) -{ - c3_y key_y[32]; - c3_y mes_y[32]; - c3_y aux_y[32]; - - if ( (0 != u3r_bytes_fit(32, key_y, sk)) || - (0 != u3r_bytes_fit(32, mes_y, m)) || - (0 != u3r_bytes_fit(32, aux_y, a)) ) - { - return u3m_bail(c3__exit); - } - else { - c3_y sig_y[64]; - - return - ( 0 == urcrypt_secp_schnorr_sign(sec_u, key_y, mes_y, aux_y, sig_y) ) - ? u3i_bytes(64, sig_y) - : u3_none; - } -} - -u3_noun -u3we_sosi(u3_noun cor) -{ - u3_noun key, mes, aux; - - if ( (c3n == u3r_mean(cor, - u3x_sam_2, &key, - u3x_sam_6, &mes, - u3x_sam_7, &aux, - 0)) || - (c3n == u3ud(key)) || - (c3n == u3ud(mes)) || - (c3n == u3ud(aux)) ) - { - return u3m_bail(c3__exit); - } - else { - return u3l_punt("secp-sosi", _cqes_sosi(key, mes, aux)); - } -} - -/* verify a schnorr signature -*/ -static u3_atom -_cqes_sove(u3_atom pk, u3_atom m, u3_atom sig) -{ - c3_y pub_y[32]; - c3_y mes_y[32]; - c3_y sig_y[64]; - - if ( (0 != u3r_bytes_fit(32, pub_y, pk)) || - (0 != u3r_bytes_fit(32, mes_y, m)) || - (0 != u3r_bytes_fit(64, sig_y, sig)) ) - { - return u3m_bail(c3__exit); - } - else { - return __(urcrypt_secp_schnorr_veri(sec_u, sig_y, mes_y, pub_y)); - } -} - -u3_noun -u3we_sove(u3_noun cor) -{ - u3_noun pub, mes, sig; - - if ( (c3n == u3r_mean(cor, - u3x_sam_2, &pub, - u3x_sam_6, &mes, - u3x_sam_7, &sig, - 0)) || - (c3n == u3ud(pub)) || - (c3n == u3ud(mes)) || - (c3n == u3ud(sig)) ) - { - return u3m_bail(c3__exit); - } - else { - return _cqes_sove(pub, mes, sig); - } -} diff --git a/pkg/urbit/jets/e/sha1.c b/pkg/urbit/jets/e/sha1.c deleted file mode 100644 index 1423e5299..000000000 --- a/pkg/urbit/jets/e/sha1.c +++ /dev/null @@ -1,40 +0,0 @@ -/* j/5/sha1.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - static u3_noun - _cqe_sha1(u3_atom wid, u3_atom dat) - { - c3_w len_w; - if ( !u3r_word_fit(&len_w, wid) ) { - return u3m_bail(c3__fail); - } - else { - c3_y out_y[20]; - c3_y *dat_y = u3r_bytes_alloc(0, len_w, dat); - - urcrypt_sha1(dat_y, len_w, out_y); - u3a_free(dat_y); - return u3i_bytes(20, out_y); - } - } - - u3_noun - u3we_sha1(u3_noun cor) - { - u3_noun wid, dat; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &wid, u3x_sam_3, &dat, 0)) || - (c3n == u3ud(wid)) || - (c3n == u3ud(dat)) ) - { - return u3m_bail(c3__exit); - } - else { - return _cqe_sha1(wid, dat); - } - } diff --git a/pkg/urbit/jets/e/shax.c b/pkg/urbit/jets/e/shax.c deleted file mode 100644 index 29945ee82..000000000 --- a/pkg/urbit/jets/e/shax.c +++ /dev/null @@ -1,193 +0,0 @@ -/* j/5/shax.c -** -*/ -#include "all.h" -#include - -/* functions -*/ - - static u3_atom - _cqe_shay(u3_atom wid, - u3_atom dat) - { - c3_w len_w; - if ( !u3r_word_fit(&len_w, wid) ) { - return u3m_bail(c3__fail); - } - else { - c3_y out_y[32]; - c3_y* dat_y = u3r_bytes_alloc(0, len_w, dat); - urcrypt_shay(dat_y, len_w, out_y); - u3a_free(dat_y); - return u3i_bytes(32, out_y); - } - } - - static u3_atom - _cqe_shax(u3_atom a) - { - c3_w len_w; - c3_y out_y[32]; - c3_y* dat_y = u3r_bytes_all(&len_w, a); - urcrypt_shay(dat_y, len_w, out_y); - u3a_free(dat_y); - return u3i_bytes(32, out_y); - } - - static u3_atom - _cqe_shal(u3_atom wid, - u3_atom dat) - { - c3_w len_w; - if ( !u3r_word_fit(&len_w, wid) ) { - return u3m_bail(c3__fail); - } - else { - c3_y out_y[64]; - c3_y* dat_y = u3r_bytes_alloc(0, len_w, dat); - urcrypt_shal(dat_y, len_w, out_y); - u3a_free(dat_y); - return u3i_bytes(64, out_y); - } - } - - static u3_atom - _cqe_shas(u3_atom sal, - u3_atom ruz) - { - c3_w sal_w, ruz_w; - c3_y *sal_y, *ruz_y, out_y[32]; - - sal_y = u3r_bytes_all(&sal_w, sal); - ruz_y = u3r_bytes_all(&ruz_w, ruz); - urcrypt_shas(sal_y, sal_w, ruz_y, ruz_w, out_y); - u3a_free(sal_y); - u3a_free(ruz_y); - return u3i_bytes(32, out_y); - } - - u3_noun - u3we_shax(u3_noun cor) - { - u3_noun a; - - if ( (u3_none == (a = u3r_at(u3x_sam, cor))) || - (c3n == u3ud(a)) ) - { - return u3m_bail(c3__exit); - } else { - return _cqe_shax(a); - } - } - - u3_noun - u3we_shay(u3_noun cor) - { - u3_noun a, b; - - if ( (u3_none == (a = u3r_at(u3x_sam_2, cor))) || - (u3_none == (b = u3r_at(u3x_sam_3, cor))) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return _cqe_shay(a, b); - } - } - - u3_noun - u3we_shal(u3_noun cor) - { - u3_noun a, b; - - if ( (u3_none == (a = u3r_at(u3x_sam_2, cor))) || - (u3_none == (b = u3r_at(u3x_sam_3, cor))) || - (c3n == u3ud(a)) || - (c3n == u3ud(b)) ) - { - return u3m_bail(c3__exit); - } else { - return _cqe_shal(a, b); - } - } - - u3_noun - u3we_shas(u3_noun cor) - { - u3_noun sal, ruz; - - if ( (u3_none == (sal = u3r_at(u3x_sam_2, cor))) || - (u3_none == (ruz = u3r_at(u3x_sam_3, cor))) || - (c3n == u3ud(sal)) || - (c3n == u3ud(ruz)) ) - { - return u3m_bail(c3__exit); - } else { - return _cqe_shas(sal, ruz); - } - } - - static u3_noun - _og_list(u3_noun a, - u3_noun b, - u3_noun c) - { - u3_noun l = u3_nul; - - if ( !_(u3a_is_cat(b)) ) { - return u3m_bail(c3__fail); - } - while ( 0 != b ) { - u3_noun x = u3qc_mix(a, c); - u3_noun y = u3qc_mix(b, x); - u3_noun d = _cqe_shas(c3_s4('o','g','-','b'), y); - u3_noun m; - - u3z(x); u3z(y); - - if ( b < 256 ) { - u3_noun e = u3qc_end(0, b, d); - - u3z(d); - m = u3nc(b, e); - b = 0; - } else { - m = u3nc(256, d); - c = d; - - b -= 256; - } - l = u3nc(m, l); - } - return u3kb_flop(l); - } - - u3_noun - u3qeo_raw(u3_atom a, - u3_atom b) - { - u3_noun x = u3qc_mix(b, a); - u3_noun c = _cqe_shas(c3_s4('o','g','-','a'), x); - u3_noun l = _og_list(a, b, c); - u3_noun r = u3qc_can(0, l); - - u3z(l); - u3z(c); - u3z(x); - - return r; - } - - u3_noun - u3weo_raw(u3_noun cor) - { - u3_noun a, b; - - if ( c3n == u3r_mean(cor, u3x_sam, &b, u3x_con_sam, &a, 0) ) { - return u3m_bail(c3__exit); - } else { - return u3qeo_raw(a, b); - } - } diff --git a/pkg/urbit/jets/e/slaw.c b/pkg/urbit/jets/e/slaw.c deleted file mode 100644 index 09c470043..000000000 --- a/pkg/urbit/jets/e/slaw.c +++ /dev/null @@ -1,474 +0,0 @@ -/* j/3/slaw.c -** -*/ -#include "all.h" - -#include - -static inline u3_noun -_parse_ud(u3_noun a) -{ - u3_weak pro; - - if ( u3_none == (pro = u3s_sift_ud(u3x_atom(a))) ) { - return u3_nul; - } - - return u3nc(u3_nul, pro); -} - -static -u3_noun get_syllable(c3_c** cur_ptr, c3_c* one, c3_c* two, c3_c* three) { - if (islower((*cur_ptr)[0]) && islower((*cur_ptr)[1]) && - islower((*cur_ptr)[2])) { - *one = (*cur_ptr)[0]; - *two = (*cur_ptr)[1]; - *three = (*cur_ptr)[2]; - (*cur_ptr) += 3; - return c3y; - } else { - return c3n; - } -} - -static u3_noun -combine(u3_noun p, u3_noun q) -{ - if ( (c3y == u3a_is_atom(p)) || (c3y == u3a_is_atom(q)) ) { - return 0; - } - - u3_noun lef = u3qa_mul(256, u3t(q)); - u3_noun ret = u3nc(0, u3qa_add(u3t(p), lef)); - u3z(lef); - u3z(p); u3z(q); - - return ret; -} - -#define ENSURE_NOT_END() do { \ - if (*cur == 0) { \ - u3a_free(c); \ - return u3_none; \ - } \ - } while (0) - -#define CONSUME(x) do { \ - if (*cur != x) { \ - u3a_free(c); \ - return u3_none; \ - } \ - cur++; \ - } while (0) - -#define TRY_GET_SYLLABLE(prefix) \ - c3_c prefix##_one, prefix##_two, prefix##_three; \ - if (c3n == get_syllable(&cur, & prefix##_one, & prefix##_two, & prefix##_three)) { \ - u3a_free(c); \ - return u3_none; \ - } - -u3_noun -_parse_p(u3_noun cor, u3_noun txt) { - c3_c* c = u3a_string(txt); - - c3_c* cur = c; - CONSUME('~'); - - // We at least have a sig prefix. We're now going to parse tuples of three - // lowercase letters. Our naming pattern for the pieces we read is [a b c d - // ...] as we read them. - TRY_GET_SYLLABLE(a); - - // There was only one syllable. If it's a valid suffix syllable, then - // it's a galaxy. We don't even have to run this through the scrambler or - // check for validity since its already a (unit @). - if (*cur == 0) { - u3a_free(c); - return u3_po_find_suffix(a_one, a_two, a_three); - } - - TRY_GET_SYLLABLE(b); - - // There were only two syllables. If they are a valid prefix and suffix, then - // it's a star. - if (*cur == 0) { - u3_noun a_part = u3_po_find_prefix(a_one, a_two, a_three); - u3_noun b_part = u3_po_find_suffix(b_one, b_two, b_three); - u3_atom combined = combine(b_part, a_part); - u3a_free(c); - return combined; - } - - // There must now be a - or it is invalid - CONSUME('-'); - - TRY_GET_SYLLABLE(c); - - ENSURE_NOT_END(); - - TRY_GET_SYLLABLE(d); - - if (*cur == 0) { - u3_noun a_part = u3_po_find_prefix(a_one, a_two, a_three); - u3_noun b_part = u3_po_find_suffix(b_one, b_two, b_three); - u3_noun c_part = u3_po_find_prefix(c_one, c_two, c_three); - u3_noun d_part = u3_po_find_suffix(d_one, d_two, d_three); - - u3_noun m = combine(d_part, combine(c_part, combine(b_part, a_part))); - u3a_free(c); - - if (_(u3a_is_atom(m))) { - return 0; - } - - u3_atom raw = u3k(u3t(m)); - u3z(m); - - u3_noun ob = u3j_cook("u3we_slaw_ob_p", u3k(cor), "ob"); - u3_noun hok = u3j_cook("u3we_slaw_fynd_p", ob, "fynd"); - return u3nc(0, u3n_slam_on(hok, raw)); - } - - // There must now be a - or it is invalid. - CONSUME('-'); - - // The next possible case is a "short" moon. (~ab-cd-ef) - TRY_GET_SYLLABLE(e); - - ENSURE_NOT_END(); - - TRY_GET_SYLLABLE(f); - - if (*cur == 0) { - u3_noun a_part = u3_po_find_prefix(a_one, a_two, a_three); - u3_noun b_part = u3_po_find_suffix(b_one, b_two, b_three); - u3_noun c_part = u3_po_find_prefix(c_one, c_two, c_three); - u3_noun d_part = u3_po_find_suffix(d_one, d_two, d_three); - u3_noun e_part = u3_po_find_prefix(e_one, e_two, e_three); - u3_noun f_part = u3_po_find_suffix(f_one, f_two, f_three); - - u3_noun m = combine(f_part, combine(e_part, combine(d_part, - combine(c_part, combine(b_part, a_part))))); - u3a_free(c); - - if (_(u3a_is_atom(m))) { - return 0; - } - - u3_atom raw = u3k(u3t(m)); - u3z(m); - u3_noun ob = u3j_cook("u3we_slaw_ob_p", u3k(cor), "ob"); - u3_noun hok = u3j_cook("u3we_slaw_fynd_p", ob, "fynd"); - return u3nc(0, u3n_slam_on(hok, raw)); - } - - // There must now be a - or it is invalid. - CONSUME('-'); - - // The next possible case is a "long" moon. (~ab-cd-ef-gh) - TRY_GET_SYLLABLE(g); - - ENSURE_NOT_END(); - - TRY_GET_SYLLABLE(h); - - if (*cur == 0) { - u3_noun a_part = u3_po_find_prefix(a_one, a_two, a_three); - u3_noun b_part = u3_po_find_suffix(b_one, b_two, b_three); - u3_noun c_part = u3_po_find_prefix(c_one, c_two, c_three); - u3_noun d_part = u3_po_find_suffix(d_one, d_two, d_three); - u3_noun e_part = u3_po_find_prefix(e_one, e_two, e_three); - u3_noun f_part = u3_po_find_suffix(f_one, f_two, f_three); - u3_noun g_part = u3_po_find_prefix(g_one, g_two, g_three); - u3_noun h_part = u3_po_find_suffix(h_one, h_two, h_three); - - u3_noun m = combine(h_part, combine(g_part, combine(f_part, - combine(e_part, combine(d_part, combine(c_part, - combine(b_part, a_part))))))); - u3a_free(c); - - if (_(u3a_is_atom(m))) { - return 0; - } - - u3_atom raw = u3k(u3t(m)); - u3z(m); - u3_noun ob = u3j_cook("u3we_slaw_ob_p", u3k(cor), "ob"); - u3_noun hok = u3j_cook("u3we_slaw_fynd_p", ob, "fynd"); - return u3nc(0, u3n_slam_on(hok, raw)); - } - - // At this point, the only thing it could be is a long comet, of the form - // ~ab-cd-ef-gh--ij-kl-mn-op - - CONSUME('-'); - CONSUME('-'); - - TRY_GET_SYLLABLE(i); - ENSURE_NOT_END(); - TRY_GET_SYLLABLE(j); - CONSUME('-'); - TRY_GET_SYLLABLE(k); - ENSURE_NOT_END(); - TRY_GET_SYLLABLE(l); - CONSUME('-'); - TRY_GET_SYLLABLE(m); - ENSURE_NOT_END(); - TRY_GET_SYLLABLE(n); - CONSUME('-'); - TRY_GET_SYLLABLE(o); - ENSURE_NOT_END(); - TRY_GET_SYLLABLE(p); - - if (*cur != 0) { - // We've parsed all of a comet shape, and there's still more in the - // string. Bail back to the interpreter. - u3a_free(c); - return u3_none; - } - - // We have a long comet. Time to jam it all together. We rely on combine() - // for the error checking and we don't have to scramble comet names. - u3_noun a_part = u3_po_find_prefix(a_one, a_two, a_three); - u3_noun b_part = u3_po_find_suffix(b_one, b_two, b_three); - u3_noun c_part = u3_po_find_prefix(c_one, c_two, c_three); - u3_noun d_part = u3_po_find_suffix(d_one, d_two, d_three); - u3_noun e_part = u3_po_find_prefix(e_one, e_two, e_three); - u3_noun f_part = u3_po_find_suffix(f_one, f_two, f_three); - u3_noun g_part = u3_po_find_prefix(g_one, g_two, g_three); - u3_noun h_part = u3_po_find_suffix(h_one, h_two, h_three); - u3_noun i_part = u3_po_find_prefix(i_one, i_two, i_three); - u3_noun j_part = u3_po_find_suffix(j_one, j_two, j_three); - u3_noun k_part = u3_po_find_prefix(k_one, k_two, k_three); - u3_noun l_part = u3_po_find_suffix(l_one, l_two, l_three); - u3_noun m_part = u3_po_find_prefix(m_one, m_two, m_three); - u3_noun n_part = u3_po_find_suffix(n_one, n_two, n_three); - u3_noun o_part = u3_po_find_prefix(o_one, o_two, o_three); - u3_noun p_part = u3_po_find_suffix(p_one, p_two, p_three); - - u3a_free(c); - - return combine(p_part, combine(o_part, combine(n_part, combine(m_part, - combine(l_part, combine(k_part, combine(j_part, combine(i_part, - combine(h_part, combine(g_part, combine(f_part, combine(e_part, - combine(d_part, combine(c_part, combine(b_part, a_part))))))))))))))); -} - -#define PARSE_NONZERO_NUMBER(numname) \ - c3_w numname = 0; \ - do { \ - if (cur[0] > '9' || cur[0] < '1') { \ - u3a_free(c); \ - return u3_none; \ - } \ - numname = cur[0] - '0'; \ - cur++; \ - while (isdigit(cur[0])) { \ - numname = u3ka_mul(numname, 10); \ - numname = u3ka_add(numname, cur[0] - '0'); \ - cur++; \ - } \ - } while (0) - -#define PARSE_INCLUDING_ZERO_NUMBER(numname) \ - c3_w numname = 0; \ - do { \ - if (cur[0] > '9' || cur[0] < '0') { \ - u3a_free(c); \ - return u3_none; \ - } \ - numname = cur[0] - '0'; \ - cur++; \ - while (isdigit(cur[0])) { \ - numname = u3ka_mul(numname, 10); \ - numname = u3ka_add(numname, cur[0] - '0'); \ - cur++; \ - } \ - } while (0) - -#define PARSE_HEX_DIGIT(out) \ - do { \ - if (cur[0] >= '0' && cur[0] <= '9') { \ - out = cur[0] - '0'; \ - } else if (cur[0] >= 'a' && cur[0] <= 'f') { \ - out = 10 + cur[0] - 'a'; \ - } else { \ - u3a_free(c); \ - return u3_none; \ - } \ - cur++; \ - } while(0) - - -u3_noun -_parse_da(u3_noun cor, u3_noun txt) { - c3_c* c = u3a_string(txt); - - c3_c* cur = c; - CONSUME('~'); - - // Parse out an arbitrary year number. Starts with a nonzero digit followed - // by a series of any digits. - PARSE_NONZERO_NUMBER(year); - - // Parse the optional negative sign for BC dates. - u3_noun bc = c3y; - if (cur[0] == '-') { - bc = c3n; - cur++; - } - - CONSUME('.'); - - // Parse out a two digit month (mot:ag). Either a single digit 1-9 or 1[012]. - c3_y month; - if (cur[0] == '1') { - if (cur[1] <= '2' && cur[1] >= '0') { - // This is a two number month. - month = 10 + cur[1] - '0'; - cur += 2; - } else { - // This is January. - month = 1; - cur++; - } - } else if (cur[0] <= '9' && cur[0] >= '2') { - month = cur[0] - '0'; - cur++; - } else { - u3a_free(c); - return u3_none; - } - - CONSUME('.'); - - // Parse out a two digit day (dip:ag). This number can be really big, so we - // can track number of days since September 1993. - PARSE_NONZERO_NUMBER(day); - - if (cur[0] == 0) { - u3a_free(c); - u3_noun hok = u3j_cook("u3we_slaw_parse_da", u3k(cor), "year"); - u3_noun res = u3n_slam_on(hok, - u3nt(u3nc(bc, year), month, - u3nc(day, u3nq(0, 0, 0, 0)))); - return u3nc(0, res); - } - - CONSUME('.'); - CONSUME('.'); - - PARSE_INCLUDING_ZERO_NUMBER(hour); - CONSUME('.'); - PARSE_INCLUDING_ZERO_NUMBER(minute); - CONSUME('.'); - PARSE_INCLUDING_ZERO_NUMBER(second); - - if (cur[0] == 0) { - u3a_free(c); - u3_noun hok = u3j_cook("u3we_slaw_parse_da", u3k(cor), "year"); - u3_noun res = u3n_slam_on(hok, - u3nt(u3nc(bc, year), month, - u3nc(day, u3nq(hour, minute, second, 0)))); - return u3nc(0, res); - } - - CONSUME('.'); - CONSUME('.'); - - // Now we have to parse a list of hexidecimal numbers 0-f of length 4 only - // (zero padded otherwise) separated by dots. - u3_noun list = 0; - while (1) { - // Parse 4 hex digits - c3_y one, two, three, four; - PARSE_HEX_DIGIT(one); - PARSE_HEX_DIGIT(two); - PARSE_HEX_DIGIT(three); - PARSE_HEX_DIGIT(four); - - c3_w current = (one << 12) + (two << 8) + (three << 4) + four; - list = u3nc(u3i_words(1, ¤t), list); - - if (cur[0] == 0) { - u3a_free(c); - - u3_noun flopped = u3qb_flop(list); - u3z(list); - - u3_noun hok = u3j_cook("u3we_slaw_parse_da", u3k(cor), "year"); - u3_noun res = u3n_slam_on(hok, - u3nt(u3nc(bc, year), month, - u3nc(day, - u3nq(hour, minute, second, flopped)))); - return u3nc(0, res); - } - - CONSUME('.'); - } -} - -#undef ENSURE_NOT_END -#undef CONSUME -#undef TRY_GET_SYLLABLE -#undef PARSE_NONZERO_NUMBER -#undef PARSE_HEX_DIGIT - -u3_noun -_parse_tas(u3_noun txt) { - // For any symbol which matches, txt will return itself as a - // value. Therefore, this is mostly checking validity. - c3_c* c = u3a_string(txt); - - // First character must represent a lowercase letter - c3_c* cur = c; - if (!islower(cur[0])) { - u3a_free(c); - return 0; - } - cur++; - - while (cur[0] != 0) { - if (!(islower(cur[0]) || isdigit(cur[0]) || cur[0] == '-')) { - u3a_free(c); - return 0; - } - - cur++; - } - - u3a_free(c); - return u3nc(0, u3k(txt)); -} - -u3_noun -u3we_slaw(u3_noun cor) -{ - u3_noun mod; - u3_noun txt; - - if (c3n == u3r_mean(cor, u3x_sam_2, &mod, - u3x_sam_3, &txt, 0)) { - return u3m_bail(c3__exit); - } - - switch (mod) { - case c3__da: - return _parse_da(cor, txt); - - case 'p': - return _parse_p(cor, txt); - - case c3__ud: - return _parse_ud(txt); - - // %ta is used once in link.hoon. don't bother. - - case c3__tas: - return _parse_tas(txt); - - default: - return u3_none; - } -} diff --git a/pkg/urbit/jets/e/tape.c b/pkg/urbit/jets/e/tape.c deleted file mode 100644 index 022b09d92..000000000 --- a/pkg/urbit/jets/e/tape.c +++ /dev/null @@ -1,53 +0,0 @@ -/* j/3/tape.c -** -*/ -#include "all.h" - - -/* functions -*/ - static u3_noun - _norm(u3_noun a) - { - if ( c3n == u3du(a) ) { - return u3_nul; - } else { - return u3nc(((c3y == u3du(u3h(a))) ? u3_nul : u3k(u3h(a))), - _norm(u3t(a))); - } - } - - static u3_noun - _good(u3_noun a) - { - while ( 1 ) { - if ( u3_nul == a ) { - return c3y; - } - if ( c3n == u3ud(u3h(a)) ) { - return c3n; - } - a = u3t(a); - } - } - - u3_noun - u3qe_tape(u3_noun a) - { - if ( c3y == _good(a) ) { - return u3k(a); - } else { - return _norm(a); - } - } - u3_noun - u3we_tape(u3_noun cor) - { - u3_noun a; - - if ( (u3_none == (a = u3r_at(u3x_sam, cor))) ) { - return u3m_bail(c3__fail); - } else { - return u3qe_tape(a); - } - } diff --git a/pkg/urbit/jets/e/trip.c b/pkg/urbit/jets/e/trip.c deleted file mode 100644 index 6f986cb7c..000000000 --- a/pkg/urbit/jets/e/trip.c +++ /dev/null @@ -1,30 +0,0 @@ -/* j/5/trip.c -** -*/ -#include "all.h" - -u3_noun -u3qe_trip(u3_atom a) -{ - return u3qc_rip(3, 1, a); -} - -u3_noun -u3we_trip(u3_noun cor) -{ - u3_noun a = u3x_at(u3x_sam, cor); - - if ( c3n == u3ud(a) ) { - return u3m_bail(c3__exit); - } - - return u3qe_trip(a); -} - -u3_atom -u3ke_trip(u3_noun a) -{ - u3_atom pro = u3qe_trip(a); - u3z(a); - return pro; -} diff --git a/pkg/urbit/jets/f/ap.c b/pkg/urbit/jets/f/ap.c deleted file mode 100644 index ac6554803..000000000 --- a/pkg/urbit/jets/f/ap.c +++ /dev/null @@ -1,1081 +0,0 @@ -/* j/6/ap.c -** -*/ -#include "all.h" - - -/** forward declares -**/ - u3_noun u3wfp_rake(u3_noun); - u3_noun u3wfp_open(u3_noun); - u3_noun u3wfp_hack(u3_noun); - - static u3_noun - _ap_open_l(u3_noun, u3_noun, u3_noun); - - // make sure these match the array below! - // -# define _ap_jet_open 0 -# define _ap_jet_rake 1 -# define _ap_jet_hack 2 - -#if 0 - static u3_noun - _open_in(u3_noun ter, u3_noun gen); - /* ~(. al gen) - */ - static u3_noun - _al_bore(u3_noun ter, - u3_noun gen) - { - u3_noun gat = u3j_hook(u3k(ter), "al"); - - return u3i_molt(gat, u3x_sam, u3nc(c3__herb, u3k(gen)), 0); - } - /* ~(. al gen) - */ - static u3_noun - _al_core(u3_noun ter, - u3_noun gen) - { - u3_noun gat = u3j_hook(u3k(ter), "al"); - - return u3i_molt(gat, u3x_sam, u3k(gen), 0); - } - - /* van is transferred, gen is retained - */ - static u3_noun - _ap_bunt(u3_noun van, - u3_noun gen) - { - u3_noun pro = u3qfl_bunt(van, gen); - - u3z(van); - return pro; - } - -/** open cases -**/ - -#define _open_do_p(stem) \ - static u3_noun _open_in_##stem \ - ( u3_noun ter, u3_noun p_gen) - -#define _open_do_pq(stem) \ - static u3_noun _open_in_##stem \ - ( u3_noun ter, u3_noun p_gen, u3_noun q_gen) - -#define _open_do_pqr(stem) \ - static u3_noun _open_in_##stem \ - ( u3_noun ter, u3_noun p_gen, u3_noun q_gen, u3_noun r_gen) - -#define _open_do_pqrs(stem) \ - static u3_noun _open_in_##stem \ - ( u3_noun ter, u3_noun p_gen, u3_noun q_gen, u3_noun r_gen, \ - u3_noun s_gen) - -/*** -**** -***/ - _open_do_pq(tsbr) // =: - { - return u3nt(c3__tsls, - _ap_bunt(_al_core(ter, p_gen), p_gen), - u3k(q_gen)); - } - _open_do_pq(tscl) // =: - { - return u3nt(c3__tsgr, - u3nt(c3__cncb, - u3nc(u3nc(u3_nul, 1), - u3_nul), - u3k(p_gen)), - u3k(q_gen)); - } - _open_do_pqr(tsdt) // =. - { - return u3nt(c3__tsgr, - u3nt(c3__cncb, - u3nc(u3nc(u3_nul, 1), - u3_nul), - u3nc(u3nc(u3k(p_gen), - u3k(q_gen)), - u3_nul)), - u3k(r_gen)); - } - _open_do_pq(tsgl) // =< - { - return u3nt(c3__tsgr, - u3k(q_gen), - u3k(p_gen)); - } - _open_do_pq(tshp) // =- - { - return u3nt(c3__tsls, - u3k(q_gen), - u3k(p_gen)); - } - _open_do_pq(tsls) // =+ - { - return u3nt(c3__tsgr, - u3nc(u3k(p_gen), - u3nc(u3_nul, 1)), - u3k(q_gen)); - } - _open_do_p(tssg) // =~ - { - if ( !_(u3du(p_gen)) ) { - return u3nc(0, 1); - } else { - u3_noun tp_gen = u3t(p_gen); - u3_noun ip_gen = u3h(p_gen); - - if ( (u3_nul == p_gen) ) { - return u3nc(u3_blip, 1); - } - else if ( (u3_nul == tp_gen) ) { - return u3k(ip_gen); - } - else { - return u3nt(c3__tsgr, - u3k(ip_gen), - _open_in_tssg(ter, tp_gen)); - } - } - } -/*** -**** -***/ - _open_do_p(bccb) // $_ - { - return _ap_bunt(_al_core(ter, p_gen), p_gen); - } - _open_do_p(bctr) // $* - { - return - u3nc(c3__ktsg, - _ap_bunt(_al_core(ter, p_gen), - p_gen)); - } - _open_do_p(bczp) // $! - { - return u3nt(c3__bccb, - c3__axil, - u3k(p_gen)); - } -/*** -**** -***/ - _open_do_p(brhp) // |- - { - return u3nt(c3__tsgl, - u3nc(c3__cnzy, u3_blip), - u3nc(c3__brdt, u3k(p_gen))); - } - _open_do_p(brdt) // |. - { - return u3nc(c3__brcn, - u3nt(u3nt(u3_blip, c3__ash, u3k(p_gen)), - u3_nul, - u3_nul)); - } - -/*** -**** -***/ - _open_do_p(wtbr) // ?| - { - if ( (u3_nul == p_gen) ) { - return u3nt(c3__dtzz, 'f', c3n); - } - else { - u3_noun ip_gen = u3h(p_gen); - u3_noun tp_gen = u3t(p_gen); - - return u3nq(c3__wtcl, - u3k(ip_gen), - u3nt(c3__dtzz, 'f', c3y), - _open_in_wtbr(ter, tp_gen)); - } - } - _open_do_pqr(wtkt) // ?^ - { - return u3nq(c3__wtcl, - u3nt(c3__wtts, - u3nt(c3__axil, c3__atom, u3_blip), - u3k(p_gen)), - u3k(r_gen), - u3k(q_gen)); - } - _open_do_pq(wtgl) // ?< - { - return u3nq(c3__wtcl, - u3k(p_gen), - u3nc(c3__zpzp, u3_nul), - u3k(q_gen)); - } - _open_do_pqr(wtdt) // ?. - { - return u3nq(c3__wtcl, - u3k(p_gen), - u3k(r_gen), - u3k(q_gen)); - } - _open_do_pq(wtgr) // ?> - { - return u3nq(c3__wtcl, - u3k(p_gen), - u3k(q_gen), - u3nc(c3__zpzp, u3_nul)); - } - _open_do_pq(wthp) // ?- - { - if ( (u3_nul == q_gen) ) { - return u3nc(c3__zpfs, - u3nc(c3__cnzz, - u3k(p_gen))); - } - else { - u3_noun iq_gen = u3h(q_gen); - u3_noun tq_gen = u3t(q_gen); - u3_noun piq_gen = u3h(iq_gen); - u3_noun qiq_gen = u3t(iq_gen); - - return u3nq(c3__wtcl, - u3nt(c3__wtts, - u3k(piq_gen), - u3k(p_gen)), - u3k(qiq_gen), - _open_in_wthp(ter, p_gen, tq_gen)); - } - } - _open_do_p(wtpm) // ?& - { - if ( (u3_nul == p_gen) ) { - return u3nt(c3__dtzz, 'f', c3y); - } - else { - u3_noun ip_gen = u3h(p_gen); - u3_noun tp_gen = u3t(p_gen); - - return u3nq(c3__wtcl, - u3k(ip_gen), - _open_in_wtpm(ter, tp_gen), - u3nt(c3__dtzz, 'f', c3n)); - } - } - _open_do_pqr(wtls) // ?+ - { u3_noun tul = u3nc(u3nc(u3nc(c3__axil, c3__noun), - u3k(q_gen)), - u3_nul); - u3_noun zal = u3qb_weld(r_gen, tul); - u3_noun ret = u3nt(c3__wthp, u3k(p_gen), zal); - - u3z(tul); - return ret; - - } - _open_do_pqr(wtpt) // ?@ - { - return u3nq(c3__wtcl, - u3nt(c3__wtts, - u3nt(c3__axil, - c3__atom, - u3_blip), - u3k(p_gen)), - u3k(q_gen), - u3k(r_gen)); - } - _open_do_pqr(wtsg) // ?~ - { - return u3nq(c3__wtcl, - u3nt(c3__wtts, - u3nc(c3__axil, c3__null), - u3k(p_gen)), - u3k(q_gen), - u3k(r_gen)); - } - _open_do_p(wtzp) // ?! - { - return u3nq(c3__wtcl, - u3k(p_gen), - u3nt(c3__dtzz, 'f', c3n), - u3nt(c3__dtzz, 'f', c3y)); - } -/*** -**** -***/ - _open_do_pq(zpcb) // !_ - { - return u3k(q_gen); - } - _open_do_p(zpgr) // !> - { - return u3nq(c3__cnhp, - u3nc(c3__cnzy, c3__onan), - u3nt(c3__zpsm, - u3nc(c3__bctr, - u3nc(c3__herb, - u3nc(c3__cnzy, - c3__abel))), - u3k(p_gen)), - u3_nul); - } -/*** -**** -***/ - _open_do_pq(clhp) // :- - { - return u3nc(u3k(p_gen), - u3k(q_gen)); - } - _open_do_pq(clcb) // :_ - { - return u3nc(u3k(q_gen), - u3k(p_gen)); - } - _open_do_p(clcn) // :% - { - return u3nc(u3nc(c3__clsg, - u3k(p_gen)), - u3nc(c3__bczp, c3__null)); - } - _open_do_pqrs(clkt) // :^ - { - return u3nq(u3k(p_gen), - u3k(q_gen), - u3k(r_gen), - u3k(s_gen)); - } - _open_do_pqr(clls) // :+ - { - return u3nt(u3k(p_gen), - u3k(q_gen), - u3k(r_gen)); - } - _open_do_p(clsg) // :~ - { - if ( (u3_nul == p_gen) ) { - return u3nt(c3__dtzz, 'n', u3_nul); - } - else { - u3_noun ip_gen = u3h(p_gen); - u3_noun tp_gen = u3t(p_gen); - - return u3nc(u3k(ip_gen), - _open_in_clsg(ter, tp_gen)); - } - } - _open_do_p(cltr) // :* - { - if ( (u3_nul == p_gen) ) { - return u3nc(c3__zpzp, u3_nul); - } - else { - u3_noun ip_gen = u3h(p_gen); - u3_noun tp_gen = u3t(p_gen); - - if ( (u3_nul == tp_gen) ) { - return u3k(ip_gen); - } else { - return u3nc(u3k(ip_gen), - _open_in_cltr(ter, tp_gen)); - } - } - } -/*** -**** -***/ - _open_do_pq(cncb) // %_ - { - return u3nc(c3__ktls, - u3nq(u3nc(c3__cnzz, u3k(p_gen)), - c3__cnts, - u3k(p_gen), - u3k(q_gen))); - } -#if 0 - _open_do_pq(cncl) // %: - { - return u3nq - (c3__cnsg, - u3nc(u3_blip, u3_nul), - u3k(p_gen), - u3k(q_gen)); - } -#endif - _open_do_pq(cndt) // %. - { - return u3nt(c3__cnhp, - u3k(q_gen), - u3nc(u3k(p_gen), u3_nul)); - } - _open_do_pqrs(cnkt) // %^ - { - return u3nq(c3__cnhp, - u3k(p_gen), - u3k(q_gen), - u3nt(u3k(r_gen), - u3k(s_gen), - u3_nul)); - } - _open_do_pq(cnhp) // %- - { - if ( (u3_nul == q_gen) ) { - return u3nt(c3__tsgr, - u3k(p_gen), - u3nc(c3__cnzy, u3_blip)); - } else { - return u3nq(c3__cncl, - u3k(p_gen), - c3__cltr, - u3k(q_gen)); - } - } - _open_do_pqr(cnls) // %+ - { - return u3nc(c3__cnhp, - u3nq(u3k(p_gen), - u3k(q_gen), - u3k(r_gen), - u3_nul)); - } - _open_do_pqr(cnsg) // %~ - { - return u3nq(c3__cntr, - u3k(p_gen), - u3k(q_gen), - u3nc(u3nc(u3nc(u3nc(u3_nul, 6), 0), u3k(r_gen)), 0)); - } - _open_do_p(cnzy) // %cnzy - { - return u3nt(c3__cnts, - u3nc(u3k(p_gen), u3_nul), - u3_nul); - } - _open_do_p(cnzz) // %cnzz - { - return u3nt(c3__cnts, u3k(p_gen), u3_nul); - } -/*** -**** -***/ - _open_do_p(hxgl) // #< - { - return u3nq(c3__cnhp, - u3nc(c3__cnzy, c3__noah), - u3nc(c3__zpgr, - u3nc(c3__cltr, u3k(p_gen))), - u3_nul); - } - _open_do_p(hxgr) // #> - { - return u3nq(c3__cnhp, - u3nc(c3__cnzy, c3__cain), - u3nc(c3__zpgr, - u3nc(c3__cltr, u3k(p_gen))), - u3_nul); - } -/*** -**** -***/ - _open_do_pq(ktdt) // ^. - { - return u3nt(c3__ktls, - u3nq(c3__cnhp, u3k(p_gen), u3k(q_gen), u3_nul), - u3k(q_gen)); - } -#if 0 - _open_do_pq(kthp) // ^- - { - return u3nt(c3__ktls, - _ap_bunt(_al_bore(ter, p_gen), p_gen), - u3k(q_gen)); - } -#endif -/*** -**** -***/ - _open_do_pq(brcb) // |_ - { - return u3nt(c3__tsls, - u3nc(c3__bctr, u3k(p_gen)), - u3nc(c3__brcn, u3k(q_gen))); - } - _open_do_pq(brkt) // |^ - { - u3_noun diz = u3nc(c3__ash, u3k(p_gen)); - u3_noun ret = u3nt(c3__tsgr, - u3nc(c3__brcn, - u3qdb_put(q_gen, u3_blip, diz)), - u3nc(c3__cnzy, u3_blip)); - - c3_assert(0); - u3z(diz); - return ret; - } - _open_do_pq(brls) // |+ - { - return u3nc(c3__ktbr, - u3nt(c3__brts, - u3k(p_gen), - u3k(q_gen))); - } - _open_do_p(brwt) // |? - { - return u3nt(c3__ktwt, - c3__brdt, - u3k(p_gen)); - } -/*** -**** -***/ - _open_do_pq(sgts) // ~= - { - return u3nt(c3__sggr, - u3nc(c3__germ, u3k(p_gen)), - u3k(q_gen)); - } -#if 0 - _open_do_pq(sgbr) // ~| - { - return u3nt - (c3__sggr, - u3nc(c3__mean, u3k(p_gen)), - u3k(q_gen)); - } -#endif - _open_do_pq(sggl) // ~> - { - return u3nt(c3__tsgl, - u3nq(c3__sggr, u3k(p_gen), u3_nul, 1), - u3k(q_gen)); - } - _open_do_pq(sgbc) // ~$ - { - return u3nt(c3__sggr, - u3nq(c3__live, - c3__dtzz, - u3_blip, - u3k(p_gen)), - u3k(q_gen)); - } - _open_do_pq(sgcb) // ~_ - { - return u3nt(c3__sggr, - u3nc(c3__mean, - u3nc(c3__brdt, - u3k(p_gen))), - u3k(q_gen)); - } - static u3_noun - _sgcn_a(u3_noun r_gen, - u3_noun nob) - { - if ( c3n == u3du(r_gen) ) { - return u3k(nob); - } else { - u3_noun ir_gen = u3h(r_gen); - u3_noun tr_gen = u3t(r_gen); - u3_noun pir_gen, qir_gen; - - u3x_cell(ir_gen, &pir_gen, &qir_gen); - - return u3nc(u3nc(u3nt(c3__dtzz, u3_blip, u3k(pir_gen)), - u3nc(c3__zpts, u3k(qir_gen))), - _sgcn_a(tr_gen, nob)); - } - } - _open_do_pqrs(sgcn) // ~% - { - return u3nt(c3__sggl, - u3nq(c3__sgcn, - c3__clls, - u3nt(c3__dtzz, u3_blip, u3k(p_gen)), - u3nt(u3nc(c3__zpts, u3k(q_gen)), - c3__clsg, - _sgcn_a(r_gen, u3_nul))), - u3k(s_gen)); - } - _open_do_pq(sgfs) // ~/ - { - return u3nc(c3__sgcn, - u3nq(u3k(p_gen), - u3nc(u3_nul, 7), - u3_nul, - u3k(q_gen))); - } - _open_do_pq(sgls) // ~+ - { - return u3nt(c3__sggr, - u3nq(c3__sgls, c3__dtzz, u3_blip, u3k(p_gen)), - u3k(q_gen)); - } - _open_do_pqr(sgpm) // ~& - { - return u3nt(c3__sggr, - u3nt(c3__slog, - u3nt(c3__dtzy, u3_blip, u3k(p_gen)), - u3nq(c3__cnhp, u3nc(c3__cnzy, c3__cain), - u3nc(c3__zpgr, u3k(q_gen)), u3_nul)), - u3k(r_gen)); - } - _open_do_pqrs(sgwt) // ~? - { - return u3nt(c3__tsls, - u3nq(c3__wtdt, - u3k(q_gen), - u3nc(c3__bczp, c3__null), - u3nc(u3nc(c3__bczp, c3__null), u3k(r_gen))), - u3nq(c3__wtsg, - u3nc(u3nc(u3_nul, 2),u3_nul), - u3nt(c3__tsgr, - u3nc(u3_nul, 3), - u3k(s_gen)), - u3nq(c3__sgpm, - u3k(p_gen), - u3nc(u3_nul, 5), - u3nt(c3__tsgr, - u3nc(u3_nul, 3), - u3k(s_gen))))); - } -/*** -**** -***/ - static u3_noun - _smcl_in(u3_noun q_gen) - { - u3_noun hq_gen = u3h(q_gen); - u3_noun tq_gen = u3t(q_gen); - - if ( c3n == u3du(tq_gen) ) { - return u3nt(c3__tsgr, - u3nc(u3_nul, 3), - u3k(hq_gen)); - } else { - return u3nc(c3__cnhp, - u3nq(u3nc(u3_nul, 2), - u3nt(c3__tsgr, - u3nc(u3_nul, 3), - u3k(hq_gen)), - _smcl_in(tq_gen), - u3_nul)); - } - } - _open_do_pq(smcl) - { - if ( c3n == u3du(q_gen) ) { - return u3nc(c3__zpzp, u3_nul); - } - else if ( u3_nul == u3t(q_gen) ) { - return u3k(u3h(q_gen)); - } - else { - return u3nt(c3__tsls, - u3k(p_gen), - _smcl_in(q_gen)); - } - } -#if 0 - _open_do_pq(smsm) - { - return - u3nt(c3__tsgr, u3nq(c3__ktts, c3__v, u3_nul, 1), - u3nt(c3__tsls, - u3nt(c3__ktts, c3__a, - u3nt(c3__tsgr, u3nc(c3__cnzy, c3__v), - u3k(p_gen))), - u3nt(c3__tsls, - u3nt(c3__ktts, c3__b, - u3nt(c3__tsgr, - u3nc(c3__cnzy, c3__v), - u3k(q_gen))), - u3nt(c3__tsls, - u3nt(c3__ktts, c3__c, - u3nq(c3__cnhp, - u3nc(c3__cnzy, c3__a), - u3nc(c3__cnzy, c3__b), - u3_nul)), - u3nt(c3__wtgr, - u3nt(c3__dtts, - u3nc(c3__cnzy, c3__c), - u3nc(c3__cnzy, c3__b)), - u3nc(c3__cnzy, c3__c)))))); - } -#endif - -/* functions -*/ - /** open - **/ - static u3_noun - _open_in(u3_noun ter, - u3_noun gen) - { - u3_noun p_gen, q_gen, r_gen, s_gen; - - return u3_none; - - if ( c3y == u3ud(gen) ) { - // printf("studly\n"); - // u3_err("stud m", gen); - return u3m_bail(c3__exit); - - return u3nt(c3__cnts, - u3nc(u3k(gen), u3_nul), - u3_nul); - } - else switch ( u3h(gen) ) { - default: return u3_none; - - case u3_nul: { - return u3nt(c3__cnts, - u3nc(u3k(gen), u3_nul), - u3_nul); - } - -# define _open_p(stem) \ - case c3__##stem: \ - return _open_in_##stem(ter, u3t(gen)); \ - -# define _open_pq(stem) \ - case c3__##stem: \ - if ( c3n == u3r_cell(u3t(gen), &p_gen, &q_gen) ) { \ - return u3m_bail(c3__fail); \ - } else return _open_in_##stem(ter, p_gen, q_gen); - -# define _open_pqr(stem) \ - case c3__##stem: \ - if ( c3n == u3r_trel(u3t(gen), &p_gen, &q_gen, &r_gen) ) { \ - return u3m_bail(c3__fail); \ - } else return _open_in_##stem(ter, p_gen, q_gen, r_gen); - -# define _open_pqrs(stem) \ - case c3__##stem: \ - if ( c3n == u3r_qual\ - (u3t(gen), &p_gen, &q_gen, &r_gen, &s_gen) )\ - { \ - return u3m_bail(c3__fail); \ - } else return _open_in_##stem(ter, p_gen, q_gen, r_gen, s_gen); - - _open_p (bccb); - _open_p (bctr); - _open_p (bczp); - - _open_p (brdt); - _open_pq (brcb); - _open_p (brhp); - _open_pq (brkt); - _open_pq (brls); - _open_p (brwt); - - _open_pq (clcb); - _open_p (clcn); - _open_pq (clhp); - _open_pqrs(clkt); - _open_pqr (clls); - _open_p (cltr); - _open_p (clsg); - _open_pq (cncb); - // _open_pq (cncl); - _open_pq (cndt); - _open_pqrs(cnkt); - _open_pq (cnhp); - _open_pqr (cnls); - _open_pqr (cnsg); - _open_p (cnzy); - _open_p (cnzz); - - _open_p (hxgl); - _open_p (hxgr); - - _open_pq (ktdt); -// _open_pq (kthp); - - _open_pq (sgts); -// _open_pq (sgbr); - _open_pq (sggl); - _open_pq (sgbc); - _open_pq (sgcb); - _open_pqrs(sgcn); - _open_pq (sgfs); - _open_pq (sgls); - _open_pqr (sgpm); - _open_pqrs(sgwt); - - _open_pq (smcl); - // _open_pq (smsm); - - _open_pq (tsbr); - _open_pq (tscl); - _open_pqr (tsdt); - _open_pq (tsgl); - _open_pq (tshp); - _open_pq (tsls); - _open_p (tssg); - - _open_pqr (wtdt); - _open_pq (wtgl); - _open_pqr (wtpt); - _open_pqr (wtsg); - _open_p (wtzp); - _open_p (wtbr); - _open_pq (wthp); - _open_pq (wtgr); - _open_pqr (wtls); - _open_pqr (wtkt); - _open_p (wtpm); - - _open_pq (zpcb); - _open_p (zpgr); - } - } - - /** rake - **/ - u3_noun - u3qfp_rake(u3_noun gen) - { - u3_noun p_gen, q_gen; - - if ( c3y == u3ud(gen) ) { - return u3nc(u3k(gen), u3_nul); - } - else switch ( u3h(gen) ) { - default: return u3m_error("rake-twig"); - - case u3_nul: return u3nc(u3k(gen), u3_nul); - - case c3__cnzy: { - return u3nc(u3k(u3t(gen)), u3_nul); - } - case c3__cnzz: { - return u3k(u3t(gen)); - } - case c3__cnts: { - if ( c3n == u3r_cell(u3t(gen), &p_gen, &q_gen) ) { - return u3m_bail(c3__fail); - } - else { - if ( u3_nul != q_gen ) { - return u3m_bail(c3__fail); - } - else { - return u3k(p_gen); - } - } - } - case c3__zpcb: { - if ( c3n == u3r_cell(u3t(gen), &p_gen, &q_gen) ) { - return u3m_bail(c3__fail); - } - else return u3qfp_rake(q_gen); - } - } - } - u3_noun - u3wfp_rake(u3_noun cor) - { - u3_noun gen; - - if ( u3_none == (gen = u3r_at(u3x_sam, cor)) ) { - return u3m_bail(c3__fail); - } else { - return u3qfp_rake(gen); - } - } - - /** hack - **/ - u3_noun - u3qfp_hack(u3_noun ter, - u3_noun gen) - { - u3_noun p_gen, q_gen; - u3_noun ret; - - if ( c3y == u3du(u3h(gen)) ) { - return u3nt(c3y, - u3k(u3h(gen)), - u3k(u3t(gen))); - } - else switch ( u3h(gen) ) { - case c3__tsgr: u3x_cell(u3t(gen), &p_gen, &q_gen); - { - if ( (c3n == u3du(p_gen)) || (u3_nul != u3h(p_gen)) ) { - return u3nc(c3n, u3k(gen)); - } - else { - u3_noun pyr = u3qfp_hack(ter, q_gen); - - if ( c3y == u3h(pyr) ) { - ret = u3nt(c3y, - u3nt(c3__tsgr, - u3k(p_gen), - u3k(u3h(u3t(pyr)))), - u3nt(c3__tsgr, - u3k(p_gen), - u3k(u3t(u3t(pyr))))); - } - else { - ret = u3nc(c3n, - u3nt(c3__tsgr, - u3k(p_gen), - u3k(u3t(pyr)))); - } - u3z(pyr); - return ret; - } - } - case c3__zpcb: u3x_cell(u3t(gen), &p_gen, &q_gen); - { - u3_noun pyr = u3qfp_hack(ter, q_gen); - - if ( c3y == u3h(pyr) ) { - ret = u3nt(c3y, - u3nt(c3__zpcb, - u3k(p_gen), - u3k(u3h(u3t(pyr)))), - u3nt(c3__zpcb, - u3k(p_gen), - u3k(u3t(u3t(pyr))))); - } - else { - ret = u3nc(c3n, - u3nt(c3__zpcb, - u3k(p_gen), - u3k(u3t(pyr)))); - } - u3z(pyr); - return ret; - } - default: break; - } - - { - u3_noun voq = _ap_open_l(ter, gen); - - if ( u3_none == voq ) { - return u3nc(c3n, u3k(gen)); - } - else if ( c3y == u3r_sing(voq, gen) ) { - return u3nc(c3n, voq); - } - else { - ret = u3qfp_hack(ter, voq); - - u3z(voq); - return ret; - } - } - } - - u3_noun - u3wfp_hack(u3_noun cor) - { - u3_noun gen; - - if ( u3_none == (gen = u3r_at(u3x_sam, cor)) ) { - return u3m_bail(c3__fail); - } else { - u3_noun ter = u3r_at(u3x_con, cor); - - return u3qfp_hack(ter, gen); - } - } -#endif - -/* boilerplate -*/ - static u3_noun - _ap_core(u3_noun ter, - u3_noun gen) - { - u3_noun gat = u3j_cook("_ap_core-ap", u3k(ter), "ap"); - - return u3i_molt(gat, u3x_sam, u3k(gen), 0); - } - - static u3_noun - _ar_core(u3_noun van, - u3_noun ref, - u3_noun syn) - { - u3_noun gat = u3j_hook(u3k(van), "ar"); - - return u3i_molt(gat, u3x_sam, u3nc(u3k(ref), u3k(syn)), 0); - } - -/* fish -*/ - u3_noun - u3qfr_fish(u3_noun van, - u3_noun ref, - u3_noun syn, - u3_noun axe) - { - u3_noun gat = u3j_soft(_ar_core(van, ref, syn), "fish"); - - return u3n_kick_on(u3i_molt(gat, - u3x_sam, - u3k(axe), - 0)); - } - -/* open -*/ - static u3_noun - _ap_open_n(u3_noun ter, - u3_noun fab, - u3_noun gen) - { - u3_noun cor = _ap_core(ter, gen); - -#if 1 - if ( c3n == fab ) { - cor = u3i_molt(cor, 14, c3n, 0); - } -#endif - return u3j_soft(cor, "open"); - } - static u3_noun - _ap_open_l(u3_noun ter, - u3_noun fab, - u3_noun gen) - { -#if 0 - u3_noun pro = _open_in(ter, gen); - - if ( u3_none != pro ) { - return pro; - } else { - return _ap_open_n(ter, gen); - } -#else - return _ap_open_n(ter, fab, gen); -#endif - } - - u3_noun - u3qfp_open(u3_noun ter, - u3_noun fab, - u3_noun gen) - { - return _ap_open_l(ter, fab, gen); - } - - u3_noun - u3wfp_open(u3_noun cor) - { - u3_noun gen; - - if ( u3_none == (gen = u3r_at(u3x_sam, cor)) ) { - return u3m_bail(c3__fail); - } else { - u3_noun ter = u3r_at(u3x_con, cor); - - return u3qfp_open(ter, c3y, gen); - } - } - diff --git a/pkg/urbit/jets/f/cell.c b/pkg/urbit/jets/f/cell.c deleted file mode 100644 index f4987eb8b..000000000 --- a/pkg/urbit/jets/f/cell.c +++ /dev/null @@ -1,29 +0,0 @@ -/* j/6/cell.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_cell(u3_noun hed, - u3_noun tal) - { - if ( (c3__void == hed) || (c3__void == tal) ) { - return c3__void; - } else { - return u3nt(c3__cell, u3k(hed), u3k(tal)); - } - } - u3_noun - u3wf_cell(u3_noun cor) - { - u3_noun hed, tal; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &hed, u3x_sam_3, &tal, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_cell(hed, tal); - } - } diff --git a/pkg/urbit/jets/f/comb.c b/pkg/urbit/jets/f/comb.c deleted file mode 100644 index eeb136fc1..000000000 --- a/pkg/urbit/jets/f/comb.c +++ /dev/null @@ -1,70 +0,0 @@ -/* j/6/comb.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_comb(u3_noun mal, - u3_noun buz) - { - if ( (u3_none == mal) || (u3_none == buz) ) { - return u3_none; - } - else { - u3_noun p_mal, q_mal, p_buz, q_buz, pp_buz, pq_buz; - - if ( (c3y == u3r_p(mal, 0, &p_mal)) && (0 != p_mal) ) { - if ( (c3y == u3r_p(buz, 0, &p_buz)) && (0 != p_buz) ) { - return u3nc(0, - u3qc_peg(p_mal, p_buz)); - } - else if ( c3y == u3r_pq(buz, 2, &p_buz, &q_buz) && - c3y == u3r_p(p_buz, 0, &pp_buz) && - c3y == u3r_p(q_buz, 0, &pq_buz) ) - { - return u3nt(2, - u3nc(0, - u3qc_peg(p_mal, pp_buz)), - u3nc(0, - u3qc_peg(p_mal, pq_buz))); - } - else return u3nt(7, - u3k(mal), - u3k(buz)); - } -#if 1 - else if ( (c3y == u3r_bush(mal, &p_mal, &q_mal)) && - (c3y == u3du(p_mal)) && - (c3y == u3du(q_mal)) && - (0 == u3h(q_mal)) && - (1 == u3t(q_mal)) ) - { - return u3nt(8, - u3k(p_mal), - u3k(buz)); - } -#endif - else if ( (c3y == u3r_p(buz, 0, &p_buz)) && - (c3y == u3r_sing(1, p_buz)) ) - { - return u3k(mal); - } - else return u3nt(7, - u3k(mal), - u3k(buz)); - } - } - u3_noun - u3wf_comb(u3_noun cor) - { - u3_noun mal, buz; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &mal, u3x_sam_3, &buz, 0) ) { - return u3_none; - } else { - return u3qf_comb(mal, buz); - } - } diff --git a/pkg/urbit/jets/f/cons.c b/pkg/urbit/jets/f/cons.c deleted file mode 100644 index be34fffd2..000000000 --- a/pkg/urbit/jets/f/cons.c +++ /dev/null @@ -1,54 +0,0 @@ -/* j/6/cons.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_cons(u3_noun vur, - u3_noun sed) - { - u3_noun p_vur, p_sed; - - if ( c3y == u3r_p(vur, 1, &p_vur) && - c3y == u3r_p(sed, 1, &p_sed) ) { - return u3nt(1, - u3k(p_vur), - u3k(p_sed)); - } -#if 0 - else if ( c3y == u3r_p(vur, 0, &p_vur) && - c3y == u3r_p(sed, 0, &p_sed) && - !(c3y == u3r_sing(1, p_vur)) && - !(c3y == u3r_sing(p_vur, p_sed)) && - (0 == u3r_nord(p_vur, p_sed)) ) - { - u3_atom fub = u3qa_div(p_vur, 2); - u3_atom nof = u3qa_div(p_sed, 2); - - if ( c3y == u3r_sing(fub, nof) ) { - u3z(nof); - - return u3nc(0, fub); - } - else { - u3z(fub); - u3z(nof); - } - } -#endif - return u3nc(u3k(vur), u3k(sed)); - } - u3_noun - u3wf_cons(u3_noun cor) - { - u3_noun vur, sed; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &vur, u3x_sam_3, &sed, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_cons(vur, sed); - } - } diff --git a/pkg/urbit/jets/f/core.c b/pkg/urbit/jets/f/core.c deleted file mode 100644 index 753ea74de..000000000 --- a/pkg/urbit/jets/f/core.c +++ /dev/null @@ -1,118 +0,0 @@ -/* j/6/core.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_core(u3_noun pac, - u3_noun con) - { - if ( (c3__void == pac) ) { - return c3__void; - } else { - { - u3_noun p_con, q_con, r_con, hr_con, tr_con; - - u3r_trel(con, &p_con, &q_con, &r_con); - u3r_cell(r_con, &hr_con, &tr_con); - if ( (c3y == u3du(hr_con)) && - (u3_nul == u3h(hr_con)) && - (u3_nul == u3t(hr_con)) ) - { - u3l_log("old core\r\n"); - abort(); - } - } - return u3nt(c3__core, u3k(pac), u3k(con)); - } - } - u3_noun - u3wf_core(u3_noun cor) - { - u3_noun pac, con; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &pac, u3x_sam_3, &con, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_core(pac, con); - } - } - -#if 0 - static void - _fork_test(const c3_c *lab_c, u3_noun set) - { - if ( u3_nul == set ) { - return; - } else { - u3_noun n_set, l_set, r_set; - - u3x_trel(set, &n_set, &l_set, &r_set); - - u3qf_test(lab_c, n_set); - _fork_test(lab_c, l_set); - _fork_test(lab_c, r_set); - } - } - void - u3qf_test(const c3_c* lab_c, u3_noun sut) - { - u3_noun p_sut, q_sut; - - if ( c3n == u3du(sut) ) switch ( sut ) { - default: u3m_bail(c3__fail); return; - - case c3__noun: - { - return; - } - case c3__void: - { - return; - } - } - else switch ( u3h(sut) ) { - default: u3m_bail(c3__fail); return; - - case c3__atom: u3x_cell(u3t(sut), &p_sut, &q_sut); - { - return; - } - case c3__cell: u3x_cell(u3t(sut), &p_sut, &q_sut); - { - u3qf_test(lab_c, p_sut); - u3qf_test(lab_c, q_sut); - return; - } - case c3__core: u3x_cell(u3t(sut), &p_sut, &q_sut); - { - u3qf_test(lab_c, p_sut); - return; - } - case c3__face: u3x_cell(u3t(sut), &p_sut, &q_sut); - { - u3qf_test(lab_c, q_sut); - return; - } - case c3__fork: p_sut = u3t(sut); - { - _fork_test(lab_c, p_sut); - return; - } - case c3__hint: u3x_cell(u3t(sut), &p_sut, &q_sut); - { - u3qf_test(lab_c, q_sut); - u3qf_test(lab_c, u3h(p_sut)); - return; - } - case c3__hold: u3x_cell(u3t(sut), &p_sut, &q_sut); - { - u3qf_test(lab_c, p_sut); - return; - } - } - } -#endif diff --git a/pkg/urbit/jets/f/face.c b/pkg/urbit/jets/f/face.c deleted file mode 100644 index 4e7fe7fda..000000000 --- a/pkg/urbit/jets/f/face.c +++ /dev/null @@ -1,31 +0,0 @@ -/* j/6/face.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_face(u3_noun sag, - u3_noun tip) - { - if ( c3__void == tip ) { - return c3__void; - } - else return u3nt(c3__face, - u3k(sag), - u3k(tip)); - } - u3_noun - u3wf_face(u3_noun cor) - { - u3_noun sag, tip; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &sag, u3x_sam_3, &tip, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_face(sag, tip); - } - } - diff --git a/pkg/urbit/jets/f/fine.c b/pkg/urbit/jets/f/fine.c deleted file mode 100644 index 24f40ae3f..000000000 --- a/pkg/urbit/jets/f/fine.c +++ /dev/null @@ -1,35 +0,0 @@ -/* j/6/fine.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_fine(u3_noun fuv, - u3_noun lup, - u3_noun mar) - { - if ( (c3__void == lup) || (c3__void == mar) ) { - return c3__void; - } else { - return u3nq(c3__fine, - u3k(fuv), - u3k(lup), - u3k(mar)); - } - } - u3_noun - u3wf_fine(u3_noun cor) - { - u3_noun fuv, lup, mar; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &fuv, - u3x_sam_6, &lup, - u3x_sam_7, &mar, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_fine(fuv, lup, mar); - } - } diff --git a/pkg/urbit/jets/f/fitz.c b/pkg/urbit/jets/f/fitz.c deleted file mode 100644 index 9350098a9..000000000 --- a/pkg/urbit/jets/f/fitz.c +++ /dev/null @@ -1,67 +0,0 @@ -/* j/6/fitz.c -** -*/ -#include "all.h" - - -/* functions -*/ - static u3_noun - _fitz_fiz(u3_noun yaz, - u3_noun wix) - { - c3_w yaz_w = u3r_met(3, yaz); - c3_w wix_w = u3r_met(3, wix); - c3_y yaz_y, wix_y; - - yaz_y = (0 == yaz_w) ? 0 : u3r_byte((yaz_w - 1), yaz); - if ( (yaz_y < 'A') || (yaz_y > 'Z') ) yaz_y = 0; - - wix_y = (0 == wix_w) ? 0 : u3r_byte((wix_w - 1), wix); - if ( (wix_y < 'A') || (wix_y > 'Z') ) wix_y = 0; - - if ( yaz_y && wix_y ) { - if ( !wix_y || (wix_y > yaz_y) ) { - return c3n; - } - } - return c3y; - } - - u3_noun - u3qf_fitz(u3_noun yaz, - u3_noun wix) - { - c3_w i_w, met_w = c3_min(u3r_met(3, yaz), u3r_met(3, wix)); - - if ( c3n == _fitz_fiz(yaz, wix) ) { - return c3n; - } - for ( i_w = 0; i_w < met_w; i_w++ ) { - c3_y yaz_y = u3r_byte(i_w, yaz); - c3_y wix_y = u3r_byte(i_w, wix); - - if ( (yaz_y >= 'A') && (yaz_y <= 'Z') ) yaz_y = 0; - if ( (wix_y >= 'A') && (wix_y <= 'Z') ) wix_y = 0; - - if ( yaz_y && wix_y && (yaz_y != wix_y) ) { - return c3n; - } - } - return c3y; - } - - u3_noun - u3wf_fitz(u3_noun cor) - { - u3_noun yaz, wix; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &yaz, u3x_sam_3, &wix, 0)) || - (c3n == u3ud(yaz)) || - (c3n == u3ud(wix)) ) - { - return u3m_bail(c3__fail); - } else { - return u3qf_fitz(yaz, wix); - } - } diff --git a/pkg/urbit/jets/f/flan.c b/pkg/urbit/jets/f/flan.c deleted file mode 100644 index 203336881..000000000 --- a/pkg/urbit/jets/f/flan.c +++ /dev/null @@ -1,47 +0,0 @@ -/* j/6/flan.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_flan(u3_noun bos, - u3_noun nif) - { - if ( c3y == u3r_sing(bos, nif) ) { - return u3k(bos); - } - if ( c3y == u3r_sing(1, u3h(bos)) ) { - if ( (u3_nul == u3t(bos)) ) { - return u3k(nif); - } - else return u3k(bos); - } - else { - if ( c3y == u3r_sing(1, u3h(nif)) ) { - if ( (u3_nul == u3t(nif)) ) { - return u3k(bos); - } - else return u3k(nif); - } - else { - return u3nq(6, - u3k(bos), - u3k(nif), - u3nc(1, c3n)); - } - } - } - u3_noun - u3wf_flan(u3_noun cor) - { - u3_noun bos, nif; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &bos, u3x_sam_3, &nif, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_flan(bos, nif); - } - } diff --git a/pkg/urbit/jets/f/flip.c b/pkg/urbit/jets/f/flip.c deleted file mode 100644 index 32f489061..000000000 --- a/pkg/urbit/jets/f/flip.c +++ /dev/null @@ -1,39 +0,0 @@ -/* j/6/flip.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_flip(u3_noun hel) - { - if ( c3y == u3r_sing(1, u3h(hel)) ) { - if ( (c3y == u3t(hel)) ) { - return u3nc(1, c3n); - } - else { - c3_assert((c3n == u3t(hel))); - - return u3nc(1, c3y); - } - } - else { - return u3nq(6, - u3k(hel), - u3nc(1, c3n), - u3nc(1, c3y)); - } - } - u3_noun - u3wf_flip(u3_noun cor) - { - u3_noun hel; - - if ( u3_none == (hel = u3r_at(u3x_sam, cor)) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_flip(hel); - } - } diff --git a/pkg/urbit/jets/f/flor.c b/pkg/urbit/jets/f/flor.c deleted file mode 100644 index ba728c696..000000000 --- a/pkg/urbit/jets/f/flor.c +++ /dev/null @@ -1,47 +0,0 @@ -/* j/6/flor.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_flor(u3_noun bos, - u3_noun nif) - { - if ( c3y == u3r_sing(bos, nif) ) { - return u3k(bos); - } - if ( c3y == u3r_sing(1, u3h(bos)) ) { - if ( (u3_nul == u3t(bos)) ) { - return u3k(bos); - } - else return u3k(nif); - } - else { - if ( c3y == u3r_sing(1, u3h(nif)) ) { - if ( (u3_nul == u3t(nif)) ) { - return u3k(nif); - } - else return u3k(bos); - } - else { - return u3nq(6, - u3k(bos), - u3nc(1, c3y), - u3k(nif)); - } - } - } - u3_noun - u3wf_flor(u3_noun cor) - { - u3_noun bos, nif; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &bos, u3x_sam_3, &nif, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_flor(bos, nif); - } - } diff --git a/pkg/urbit/jets/f/fork.c b/pkg/urbit/jets/f/fork.c deleted file mode 100644 index 54f6f52c2..000000000 --- a/pkg/urbit/jets/f/fork.c +++ /dev/null @@ -1,78 +0,0 @@ -/* j/6/fork.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_forq(u3_noun hoz, - u3_noun bur) - { - if ( c3y == u3r_sing(hoz, bur) ) { - return u3k(hoz); - } - else if ( c3__void == bur ) { - return u3k(hoz); - } - else if ( c3__void == hoz ) { - return u3k(bur); - } - else return u3kf_fork(u3nt(u3k(hoz), u3k(bur), u3_nul)); - } - - u3_noun - u3qf_fork(u3_noun yed) - { - u3_noun lez = u3_nul; - - while ( u3_nul != yed ) { - u3_noun i_yed = u3h(yed); - - if ( c3__void != i_yed ) { - if ( (c3y == u3du(i_yed)) && (c3__fork == u3h(i_yed)) ) { - lez = u3kdi_uni(lez, u3k(u3t(i_yed))); - } - else { - lez = u3kdi_put(lez, u3k(i_yed)); - } - } - - yed = u3t(yed); - } - - if ( u3_nul == lez ) { - return c3__void; - } - else if ( (u3_nul == u3h(u3t(lez))) && (u3_nul == u3t(u3t(lez))) ) { - u3_noun ret = u3k(u3h(lez)); - - u3z(lez); - return ret; - } - else { - return u3nc(c3__fork, lez); - } - } - - u3_noun - u3wf_fork(u3_noun cor) - { - u3_noun yed; - - if ( c3n == u3r_mean(cor, u3x_sam, &yed, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_fork(yed); - } - } - - u3_noun - u3kf_fork(u3_noun yed) - { - u3_noun ret = u3qf_fork(yed); - - u3z(yed); - return ret; - } diff --git a/pkg/urbit/jets/f/help.c b/pkg/urbit/jets/f/help.c deleted file mode 100644 index e657e2d3b..000000000 --- a/pkg/urbit/jets/f/help.c +++ /dev/null @@ -1,31 +0,0 @@ -/* j/6/help.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_help(u3_noun sag, - u3_noun tip) - { - if ( c3__void == tip ) { - return c3__void; - } - else return u3nt(c3__help, - u3k(sag), - u3k(tip)); - } - u3_noun - u3wf_help(u3_noun cor) - { - u3_noun sag, tip; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &sag, u3x_sam_3, &tip, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_help(sag, tip); - } - } - diff --git a/pkg/urbit/jets/f/hike.c b/pkg/urbit/jets/f/hike.c deleted file mode 100644 index 6b1bb5b36..000000000 --- a/pkg/urbit/jets/f/hike.c +++ /dev/null @@ -1,137 +0,0 @@ -/* j/6/hike.c -** -*/ -#include "all.h" - - -/* internal tools -*/ - /* _lily_hike_belt_root(): convert (pac) to a list of root tools. - */ - static u3_noun - _lily_hike_belt_root(u3_noun pac) - { - if ( (u3_nul == pac) ) { - return u3_nul; - } - else { - u3_atom axis = u3h(u3h(pac)); - u3_noun tool = u3t(u3h(pac)); - u3_noun list_tool = _lily_hike_belt_root(u3t(pac)); - - if ( c3y == u3r_sing(1, axis) ) { - return u3nc(u3k(tool), - list_tool); - } - else return list_tool; - } - } - - /* _lily_hike_belt_l(): factor (pac) left. - */ - static u3_noun - _lily_hike_belt_l(u3_noun pac) - { - if ( (u3_nul == pac) ) { - return u3_nul; - } - else { - u3_atom axis = u3h(u3h(pac)); - u3_noun tool = u3t(u3h(pac)); - u3_noun belt_l = _lily_hike_belt_l(u3t(pac)); - - { - if ( (1 != axis) && - (c3y == u3r_sing(2, u3qc_cap(axis))) ) - { - u3_atom axis_tap = u3qc_mas(axis); - - return u3nc(u3nc(u3k(axis_tap), - u3k(tool)), - belt_l); - } - else return belt_l; - } - } - } - - /* _lily_hike_belt_r(): factor (pac) right. - */ - static u3_noun - _lily_hike_belt_r(u3_noun pac) - { - if ( (u3_nul == pac) ) { - return u3_nul; - } - else { - u3_atom axis = u3h(u3h(pac)); - u3_noun tool = u3t(u3h(pac)); - u3_noun belt_r = _lily_hike_belt_r(u3t(pac)); - - { - if ( (1 != axis) && - (c3y == u3r_sing(3, u3qc_cap(axis))) ) - { - u3_atom axis_tap = u3qc_mas(axis); - - return u3nc(u3nc(u3k(axis_tap), - u3k(tool)), - belt_r); - } - else return belt_r; - } - } - } - -/* functions -*/ - u3_noun - u3qf_hike(u3_noun axe, - u3_noun pac) - { - c3_assert(0); - if ( (u3_nul == pac) ) { - return u3nc(0, u3k(axe)); - } - else { - u3_noun zet = _lily_hike_belt_root(pac); - - if ( u3_nul != zet ) { - u3_noun fol = u3k(u3h(zet)); - - u3z(zet); - return fol; - } - else { - u3_noun tum = _lily_hike_belt_l(pac); - u3_noun gam = _lily_hike_belt_r(pac); - u3_noun hax = u3qc_peg(axe, 2); - u3_noun moz = u3qc_peg(axe, 3); - u3_noun zip = u3qf_hike(hax, tum); - u3_noun dof = u3qf_hike(moz, gam); - u3_noun fol = u3qf_cons(zip, dof); - - u3z(tum); - u3z(gam); - u3z(hax); - u3z(moz); - u3z(zip); - u3z(dof); - - return fol; - } - } - } - u3_noun - u3wf_hike(u3_noun cor) - { - u3_noun axe, pac; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &axe, u3x_sam_3, &pac, 0)) || - (c3n == u3ud(axe)) ) - { - return u3m_bail(c3__fail); - } else { - return u3qf_hike(axe, pac); - } - } diff --git a/pkg/urbit/jets/f/hint.c b/pkg/urbit/jets/f/hint.c deleted file mode 100644 index de3159255..000000000 --- a/pkg/urbit/jets/f/hint.c +++ /dev/null @@ -1,32 +0,0 @@ -/* j/6/help.c -** -*/ -#include "all.h" - - -/* functions -*/ - u3_noun - u3qf_hint(u3_noun sag, - u3_noun tip) - { - if ( c3__void == tip ) { - return c3__void; - } - if ( c3__noun == tip ) { - return c3__noun; - } - else return u3nt(c3__hint, u3k(sag), u3k(tip)); - } - u3_noun - u3wf_hint(u3_noun cor) - { - u3_noun sag, tip; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &sag, u3x_sam_3, &tip, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_hint(sag, tip); - } - } - diff --git a/pkg/urbit/jets/f/look.c b/pkg/urbit/jets/f/look.c deleted file mode 100644 index e54091b0b..000000000 --- a/pkg/urbit/jets/f/look.c +++ /dev/null @@ -1,134 +0,0 @@ -/* j/6/look.c -** -*/ -#include "all.h" - - -/* internals -*/ - static u3_noun - _look_in(u3_noun cog, - u3_noun dab, - u3_atom axe) - { - if ( u3_nul == dab ) { - return u3_nul; - } - else { - u3_noun n_dab, l_dab, r_dab; - - u3r_trel(dab, &n_dab, &l_dab, &r_dab); - if ( c3n == u3du(n_dab) ) { - // return u3m_bail(c3__fail); - u3l_log("bad look\r\n"); - return u3m_bail(c3__exit) ; - } - else { - u3_noun pn_dab = u3h(n_dab); - u3_noun qn_dab = u3t(n_dab); - - if ( (u3_nul == l_dab) && (u3_nul == r_dab) ) { - if ( (c3y == u3du(qn_dab)) && - (c3y == u3r_sing(cog, pn_dab)) ) { - return u3nt(u3_nul, - u3k(axe), - u3k(qn_dab)); - } - else { - return u3_nul; - } - } - else if ( (u3_nul == l_dab) ) { - if ( (c3y == u3du(qn_dab)) && - (c3y == u3r_sing(cog, pn_dab)) ) { - return u3nt(u3_nul, - u3qc_peg(axe, 2), - u3k(qn_dab)); - } - else { - if ( c3y == u3qc_gor(cog, pn_dab) ) { - return u3_nul; - } - else { - u3_noun pro; - - axe = u3qc_peg(axe, 3); - pro = _look_in(cog, r_dab, axe); - u3z(axe); - return pro; - } - } - } - else if ( (u3_nul == r_dab) ) { - if ( (c3y == u3du(qn_dab)) && - (c3y == u3r_sing(cog, pn_dab)) ) { - return u3nt(u3_nul, - u3qc_peg(axe, 2), - u3k(qn_dab)); - } - else { - if ( c3y == u3qc_gor(cog, pn_dab) ) { - u3_noun pro; - - axe = u3qc_peg(axe, 3); - pro = _look_in(cog, l_dab, axe); - u3z(axe); - return pro; - } - else { - return u3_nul; - } - } - } - else { - if ( (c3y == u3du(qn_dab)) && - (c3y == u3r_sing(cog, pn_dab)) ) { - return u3nt(u3_nul, - u3qc_peg(axe, 2), - u3k(qn_dab)); - } - else { - if ( c3y == u3qc_gor(cog, pn_dab) ) { - u3_noun pro; - - axe = u3qc_peg(axe, 6); - pro = _look_in(cog, l_dab, axe); - u3z(axe); - return pro; - } - else { - u3_noun pro; - - axe = u3qc_peg(axe, 7); - pro = _look_in(cog, r_dab, axe); - u3z(axe); - return pro; - } - } - } - } - } - } - - - - -/* functions -*/ - u3_noun - u3qf_look(u3_noun cog, - u3_noun dab) - { - return _look_in(cog, dab, 1); - } - u3_noun - u3wf_look(u3_noun cor) - { - u3_noun cog, dab; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &cog, u3x_sam_3, &dab, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_look(cog, dab); - } - } diff --git a/pkg/urbit/jets/f/loot.c b/pkg/urbit/jets/f/loot.c deleted file mode 100644 index fa0b5e680..000000000 --- a/pkg/urbit/jets/f/loot.c +++ /dev/null @@ -1,133 +0,0 @@ -/* j/6/loot.c -** -*/ -#include "all.h" - - -/* internals -*/ - static u3_noun - _loot_in(u3_noun cog, - u3_noun dom, - u3_atom axe) - { - if ( u3_nul == dom ) { - return u3_nul; - } - else { - u3_noun n_dom, l_dom, r_dom; - - u3r_trel(dom, &n_dom, &l_dom, &r_dom); - if ( c3n == u3du(n_dom) ) { - return u3m_bail(c3__fail); - } - else { - u3_noun qqn_dom = u3t(u3t(n_dom)); - u3_noun yep = u3qf_look(cog, qqn_dom); - - if ( (u3_nul == l_dom) && (u3_nul == r_dom) ) { - if ( u3_nul == yep ) { - return u3_nul; - } else { - u3_noun u_yep = u3t(yep); - u3_noun pro; - - pro = u3nt(u3_nul, u3qc_peg(axe, u3h(u_yep)), u3k(u3t(u_yep))); - u3z(yep); - return pro; - } - } - else if ( (u3_nul == l_dom) ) { - if ( u3_nul == yep ) { - u3_noun nax = u3qc_peg(axe, 3); - u3_noun pro; - - pro = _loot_in(cog, r_dom, nax); - u3z(nax); - return pro; - } - else { - u3_noun u_yep = u3t(yep); - u3_noun nax = u3qc_peg(axe, 2); - u3_noun pro; - - pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep))); - u3z(nax); - u3z(yep); - return pro; - } - } - else if ( (u3_nul == r_dom) ) { - if ( u3_nul == yep ) { - u3_noun nax = u3qc_peg(axe, 3); - u3_noun pro; - - pro = _loot_in(cog, l_dom, nax); - u3z(nax); - return pro; - } - else { - u3_noun u_yep = u3t(yep); - u3_noun nax = u3qc_peg(axe, 2); - u3_noun pro; - - pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep))); - u3z(nax); - u3z(yep); - return pro; - } - } - else { - if ( u3_nul == yep ) { - u3_noun nax = u3qc_peg(axe, 6); - u3_noun pey; - - pey = _loot_in(cog, l_dom, nax); - u3z(nax); - - if ( u3_nul != pey ) { - return pey; - } - else { - u3_noun nax = u3qc_peg(axe, 7); - u3_noun pro; - - pro = _loot_in(cog, r_dom, nax); - u3z(nax); - return pro; - } - } - else { - u3_noun u_yep = u3t(yep); - u3_noun nax = u3qc_peg(axe, 2); - u3_noun pro; - - pro = u3nt(u3_nul, u3qc_peg(nax, u3h(u_yep)), u3k(u3t(u_yep))); - u3z(nax); - u3z(yep); - return pro; - } - } - } - } - } - -/* functions -*/ - u3_noun - u3qf_loot(u3_noun cog, - u3_noun dom) - { - return _loot_in(cog, dom, 1); - } - u3_noun - u3wf_loot(u3_noun cor) - { - u3_noun cog, dom; - - if ( c3n == u3r_mean(cor, u3x_sam_2, &cog, u3x_sam_3, &dom, 0) ) { - return u3m_bail(c3__fail); - } else { - return u3qf_loot(cog, dom); - } - } diff --git a/pkg/urbit/jets/f/ut_crop.c b/pkg/urbit/jets/f/ut_crop.c deleted file mode 100644 index 68ea2beea..000000000 --- a/pkg/urbit/jets/f/ut_crop.c +++ /dev/null @@ -1,32 +0,0 @@ -/* j/6/crop.c -** -*/ -#include "all.h" - -u3_noun -u3wfu_crop(u3_noun cor) -{ - u3_noun bat, sut, ref, van; - - if ( (c3n == u3r_mean(cor, u3x_sam, &ref, u3x_con, &van, 0)) - || (u3_none == (bat = u3r_at(u3x_bat, van))) - || (u3_none == (sut = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } - else { - u3_weak vet = u3r_at(u3qfu_van_vet, van); - c3_m fun_m = 141 + c3__crop + ((!!vet) << 8); - u3_noun key = u3z_key_3(fun_m, sut, ref, bat); - u3_weak pro = u3z_find(key); - - if ( u3_none != pro ) { - u3z(key); - return pro; - } - else { - pro = u3n_nock_on(u3k(cor), u3k(u3x_at(u3x_bat, cor))); - return u3z_save(key, pro); - } - } -} diff --git a/pkg/urbit/jets/f/ut_fish.c b/pkg/urbit/jets/f/ut_fish.c deleted file mode 100644 index 2feb98990..000000000 --- a/pkg/urbit/jets/f/ut_fish.c +++ /dev/null @@ -1,33 +0,0 @@ -/* j/6/fish.c -** -*/ -#include "all.h" - -u3_noun -u3wfu_fish(u3_noun cor) -{ - u3_noun bat, sut, axe, van; - - if ( (c3n == u3r_mean(cor, u3x_sam, &axe, u3x_con, &van, 0)) - || (c3n == u3ud(axe)) - || (u3_none == (bat = u3r_at(u3x_bat, van))) - || (u3_none == (sut = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } - else { - u3_weak vet = u3r_at(u3qfu_van_vet, van); - c3_m fun_m = 141 + c3__fish + ((!!vet) << 8); - u3_noun key = u3z_key_3(fun_m, sut, axe, bat); - u3_weak pro = u3z_find(key); - - if ( u3_none != pro ) { - u3z(key); - return pro; - } - else { - pro = u3n_nock_on(u3k(cor), u3k(u3x_at(u3x_bat, cor))); - return u3z_save(key, pro); - } - } -} diff --git a/pkg/urbit/jets/f/ut_fuse.c b/pkg/urbit/jets/f/ut_fuse.c deleted file mode 100644 index 06eaecb4b..000000000 --- a/pkg/urbit/jets/f/ut_fuse.c +++ /dev/null @@ -1,32 +0,0 @@ -/* j/6/fuse.c -** -*/ -#include "all.h" - -u3_noun -u3wfu_fuse(u3_noun cor) -{ - u3_noun bat, sut, ref, van; - - if ( (c3n == u3r_mean(cor, u3x_sam, &ref, u3x_con, &van, 0)) - || (u3_none == (bat = u3r_at(u3x_bat, van))) - || (u3_none == (sut = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } - else { - u3_weak vet = u3r_at(u3qfu_van_vet, van); - c3_m fun_m = 141 + c3__fuse + ((!!vet) << 8); - u3_noun key = u3z_key_3(fun_m, sut, ref, bat); - u3_weak pro = u3z_find(key); - - if ( u3_none != pro ) { - u3z(key); - return pro; - } - else { - pro = u3n_nock_on(u3k(cor), u3k(u3x_at(u3x_bat, cor))); - return u3z_save(key, pro); - } - } -} diff --git a/pkg/urbit/jets/f/ut_mint.c b/pkg/urbit/jets/f/ut_mint.c deleted file mode 100644 index b3446f0e0..000000000 --- a/pkg/urbit/jets/f/ut_mint.c +++ /dev/null @@ -1,34 +0,0 @@ -/* j/6/mint.c -** -*/ -#include "all.h" - -u3_noun -u3wfu_mint(u3_noun cor) -{ - u3_noun bat, sut, gol, gen, van; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &gol, - u3x_sam_3, &gen, - u3x_con, &van, 0)) - || (u3_none == (bat = u3r_at(u3x_bat, van))) - || (u3_none == (sut = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } - else { - c3_m fun_m = 141 + c3__mint; - u3_noun vet = u3r_at(u3qfu_van_vet, van); - u3_noun key = u3z_key_5(fun_m, vet, sut, gol, gen, bat); - u3_weak pro = u3z_find(key); - - if ( u3_none != pro ) { - u3z(key); - return pro; - } - else { - pro = u3n_nock_on(u3k(cor), u3k(u3x_at(u3x_bat, cor))); - return u3z_save(key, pro); - } - } -} diff --git a/pkg/urbit/jets/f/ut_mull.c b/pkg/urbit/jets/f/ut_mull.c deleted file mode 100644 index c100b3658..000000000 --- a/pkg/urbit/jets/f/ut_mull.c +++ /dev/null @@ -1,35 +0,0 @@ -/* j/6/mull.c -** -*/ -#include "all.h" - -u3_noun -u3wfu_mull(u3_noun cor) -{ - u3_noun bat, sut, gol, dox, gen, van; - - if ( (c3n == u3r_mean(cor, u3x_sam_2, &gol, - u3x_sam_6, &dox, - u3x_sam_7, &gen, - u3x_con, &van, 0)) - || (u3_none == (bat = u3r_at(u3x_bat, van))) - || (u3_none == (sut = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } - else { - u3_weak vet = u3r_at(u3qfu_van_vet, van); - c3_m fun_m = 141 + c3__mull + ((!!vet) << 8); - u3_noun key = u3z_key_5(fun_m, sut, gol, dox, gen, bat); - u3_weak pro = u3z_find(key); - - if ( u3_none != pro ) { - u3z(key); - return pro; - } - else { - pro = u3n_nock_on(u3k(cor), u3k(u3x_at(u3x_bat, cor))); - return u3z_save(key, pro); - } - } -} diff --git a/pkg/urbit/jets/f/ut_nest.c b/pkg/urbit/jets/f/ut_nest.c deleted file mode 100644 index 27aa504f9..000000000 --- a/pkg/urbit/jets/f/ut_nest.c +++ /dev/null @@ -1,48 +0,0 @@ -/* j/6/ut_nest.c -** -*/ -#include "all.h" - -u3_noun -u3wfu_nest_dext(u3_noun dext_core) -{ - u3_noun nest_in_core, nest_core; - u3_noun bat, sut, ref, van, seg, reg, gil; - - if ( (u3_none == (nest_in_core = u3r_at(3, dext_core))) - || (c3n == u3r_mean(nest_in_core, u3x_sam_2, &seg, - u3x_sam_6, ®, - u3x_sam_7, &gil, - u3x_con, &nest_core, 0)) - || (c3n == u3r_mean(nest_core, u3x_sam_3, &ref, - u3x_con, &van, 0)) - || (u3_none == (bat = u3r_at(u3x_bat, van))) - || (u3_none == (sut = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } - else { - u3_weak vet = u3r_at(u3qfu_van_vet, van); - c3_m fun_m = 141 + c3__dext + ((!!vet) << 8); - u3_noun key = u3z_key_3(fun_m, sut, ref, bat); - u3_weak pro = u3z_find(key); - - if ( u3_none != pro ) { - u3z(key); - return pro; - } - else { - pro = u3n_nock_on(u3k(dext_core), u3k(u3x_at(u3x_bat, dext_core))); - - if ( ((c3y == pro) && (u3_nul == reg)) || - ((c3n == pro) && (u3_nul == seg)) ) - { - return u3z_save(key, pro); - } - else { - u3z(key); - return pro; - } - } - } -} diff --git a/pkg/urbit/jets/f/ut_rest.c b/pkg/urbit/jets/f/ut_rest.c deleted file mode 100644 index c683a4155..000000000 --- a/pkg/urbit/jets/f/ut_rest.c +++ /dev/null @@ -1,32 +0,0 @@ -/* j/6/ut_rest.c -** -*/ -#include "all.h" - -u3_noun -u3wfu_rest(u3_noun cor) -{ - u3_noun bat, sut, leg, van; - - if ( (c3n == u3r_mean(cor, u3x_sam, &leg, u3x_con, &van, 0)) - || (u3_none == (bat = u3r_at(u3x_bat, van))) - || (u3_none == (sut = u3r_at(u3x_sam, van))) ) - { - return u3m_bail(c3__fail); - } - else { - u3_weak vet = u3r_at(u3qfu_van_vet, van); - c3_m fun_m = 141 + c3__rest + ((!!vet) << 8); - u3_noun key = u3z_key_3(fun_m, sut, leg, bat); - u3_weak pro = u3z_find(key); - - if ( u3_none != pro ) { - u3z(key); - return pro; - } - else { - pro = u3n_nock_on(u3k(cor), u3k(u3x_at(u3x_bat, cor))); - return u3z_save(key, pro); - } - } -} diff --git a/pkg/urbit/jets/tree.c b/pkg/urbit/jets/tree.c deleted file mode 100644 index 2e796035f..000000000 --- a/pkg/urbit/jets/tree.c +++ /dev/null @@ -1,2215 +0,0 @@ -/* - To generate the hashes, take the sha256 of the jammed battery. For example: - - ``` - > `@ux`(shax (jam -:rip)) - 0x2759.a693.1e9e.f9a5.2c8e.ee43.1088.43d9.4d39.32a6.b04f.86cb.6ba1.5553.4329.3a28 - ``` - - Becomes: - - ``` - 2759a6931e9ef9a52c8eee43108843d94d3932a6b04f86cb6ba1555343293a28 - ``` -*/ - -#include "all.h" - -static c3_c* no_hashes[] = { 0 }; - -static u3j_harm _140_hex_mimes_base16_en_a[] = {{".2", u3we_en_base16}, {}}; -static c3_c* _140_hex_mimes_base16_en_ha[] = { - "669807766b6802719769fcbfe149d77fb352fcf0922afaf35dc4ab8c201d84e5", - 0 -}; - -static u3j_harm _140_hex_mimes_base16_de_a[] = {{".2", u3we_de_base16}, {}}; -static c3_c* _140_hex_mimes_base16_de_ha[] = { - "f1e04d0f452f2783e17b3bd5bbbcf95a651624fe7a2aca28dd9a7feae1319734", - 0 -}; - -static u3j_core _140_hex_mimes_base16_d[] = - { { "en", 7, _140_hex_mimes_base16_en_a, 0, _140_hex_mimes_base16_en_ha }, - { "de", 7, _140_hex_mimes_base16_de_a, 0, _140_hex_mimes_base16_de_ha }, - {} - }; -static c3_c* _140_hex_mimes_base16_ha[] = { - "c71bdcc8542fd49aa307f296ac097e300a714fb3b3d1e475426f0916fa61f12c", - 0 -}; - -static u3j_core _140_hex_mimes_d[] = - { { "base16", 3, 0, _140_hex_mimes_base16_d, _140_hex_mimes_base16_ha }, - {} - }; -static c3_c* _140_hex_mimes_ha[] = { - "bca2510fd7172643812f9d224deb95ddd69400c990db3d8cfb517a7292e8f06e", - 0 -}; - -static u3j_harm _140_hex_aes_ecba_en_a[] = {{".2", u3wea_ecba_en}, {}}; -static c3_c* _140_hex_aes_ecba_en_ha[] = { - "d7674ad72666a787580c52785c5d4d37ca462ba05e904efbeded5d1bd8b02b4b", - 0 -}; -static u3j_harm _140_hex_aes_ecba_de_a[] = {{".2", u3wea_ecba_de}, {}}; -static c3_c* _140_hex_aes_ecba_de_ha[] = { - "6e6599e93bea2e4297b621814bfb17a9b10849f920d50b14e808ef2e4fe62383", - 0 -}; -static u3j_harm _140_hex_aes_ecbb_en_a[] = {{".2", u3wea_ecbb_en}, {}}; -static c3_c* _140_hex_aes_ecbb_en_ha[] = { - "2c0e3c8f4d741b37324563ecd0ab8fbf87721d1e017f1eeeaf8b6a60515c483b", - 0 -}; -static u3j_harm _140_hex_aes_ecbb_de_a[] = {{".2", u3wea_ecbb_de}, {}}; -static c3_c* _140_hex_aes_ecbb_de_ha[] = { - "cf78f314a1dbbc53b28d6405b98c66a4451350757872d8f7cf0477411e731acc", - 0 -}; -static u3j_harm _140_hex_aes_ecbc_en_a[] = {{".2", u3wea_ecbc_en}, {}}; -static c3_c* _140_hex_aes_ecbc_en_ha[] = { - "f56450f2662082e27ba1aecd2fe04c66aa8641d6eb155f8d3707e242a1e1cf1c", - 0 -}; -static u3j_harm _140_hex_aes_ecbc_de_a[] = {{".2", u3wea_ecbc_de}, {}}; -static c3_c* _140_hex_aes_ecbc_de_ha[] = { - "28c8c44002799fbe94d4aa07922f2b74dbbf234c84684cd8c3187622b4be6a5f", - 0 -}; - -static u3j_harm _140_hex_aes_cbca_en_a[] = {{".2", u3wea_cbca_en}, {}}; -static c3_c* _140_hex_aes_cbca_en_ha[] = { - "f85366d520b3179c5dabfb58ee1fa0554f5044f676340439db875841cd4058de", - 0 -}; -static u3j_harm _140_hex_aes_cbca_de_a[] = {{".2", u3wea_cbca_de}, {}}; -static c3_c* _140_hex_aes_cbca_de_ha[] = { - "8b876fbdb1849d8fbabba5e143aea0532a0e5dfff1c784d7ad15fd497ea376b1", - 0 -}; -static u3j_harm _140_hex_aes_cbcb_en_a[] = {{".2", u3wea_cbcb_en}, {}}; -static c3_c* _140_hex_aes_cbcb_en_ha[] = { - "6f961e0629c5efce47793e6a352220d355bb8fba6656c6941a68efb3ba10999d", - 0 -}; -static u3j_harm _140_hex_aes_cbcb_de_a[] = {{".2", u3wea_cbcb_de}, {}}; -static c3_c* _140_hex_aes_cbcb_de_ha[] = { - "7ee2f33f80612e91fda1fd84201266dea6cab596a4e23a535d1a14fb0763f1a3", - 0 -}; -static u3j_harm _140_hex_aes_cbcc_en_a[] = {{".2", u3wea_cbcc_en}, {}}; -static c3_c* _140_hex_aes_cbcc_en_ha[] = { - "b2578cf17a3095f48cc96cf7690dd7ab4f4e0b76b2578eadc1dce31a075f5b12", - 0 -}; -static u3j_harm _140_hex_aes_cbcc_de_a[] = {{".2", u3wea_cbcc_de}, {}}; -static c3_c* _140_hex_aes_cbcc_de_ha[] = { - "36586f89d702bedb8c2a01ea3614f61627e762488e373106cbb1b27c46e3493c", - 0 -}; -static u3j_harm _140_hex_aes_siva_en_a[] = {{".2", u3wea_siva_en}, {}}; -static c3_c* _140_hex_aes_siva_en_ha[] = { - "2a137039301788b8540ed81cbfafe450c9306348d02a6576f5c14f6d6f20ba81", - 0 -}; -static u3j_harm _140_hex_aes_siva_de_a[] = {{".2", u3wea_siva_de}, {}}; -static c3_c* _140_hex_aes_siva_de_ha[] = { - "d0130e9229e71c589429dd87843dc104bc4ee5b426400a547081d8c91a548eaa", - 0 -}; -static u3j_harm _140_hex_aes_sivb_en_a[] = {{".2", u3wea_sivb_en}, {}}; -static c3_c* _140_hex_aes_sivb_en_ha[] = { - "1638f56e8728f285e4175c7b514c5a4e1a24205acf33e105f0513cad7ae843cf", - 0 -}; -static u3j_harm _140_hex_aes_sivb_de_a[] = {{".2", u3wea_sivb_de}, {}}; -static c3_c* _140_hex_aes_sivb_de_ha[] = { - "64c9b199fffd6d31baf7457bf27d5a510121be45201b2ae5cc1d9565c0bdd0ff", - 0 -}; -static u3j_harm _140_hex_aes_sivc_en_a[] = {{".2", u3wea_sivc_en}, {}}; -static c3_c* _140_hex_aes_sivc_en_ha[] = { - "d721486dea943efd52d9e6450f4f48dd191c89637a2f842d3ff6edfd3beecbb9", - 0 -}; -static u3j_harm _140_hex_aes_sivc_de_a[] = {{".2", u3wea_sivc_de}, {}}; -static c3_c* _140_hex_aes_sivc_de_ha[] = { - "3ded831b992ea100582229a4d1d9b5c80380128ae6b59b5bb36403ed13dc5d55", - 0 -}; - -static u3j_core _140_hex_aes_ecba_d[] = - { { "en", 7, _140_hex_aes_ecba_en_a, 0, _140_hex_aes_ecba_en_ha }, - { "de", 7, _140_hex_aes_ecba_de_a, 0, _140_hex_aes_ecba_de_ha }, - {} - }; -static c3_c* _140_hex_aes_ecba_ha[] = { - "693409d27b777f73ce92cebd38e9ebceebe1e9c27ad8c9de9afc091e31bd7d9f", - 0 -}; - -static u3j_core _140_hex_aes_ecbb_d[] = - { { "en", 7, _140_hex_aes_ecbb_en_a, 0, _140_hex_aes_ecbb_en_ha }, - { "de", 7, _140_hex_aes_ecbb_de_a, 0, _140_hex_aes_ecbb_de_ha }, - {} - }; -static c3_c* _140_hex_aes_ecbb_ha[] = { - "7255c39f10e068007d0d64dd40e4f6e83492ed2e3222919440be0d28fd42a5e3", - 0 -}; - -static u3j_core _140_hex_aes_ecbc_d[] = - { { "en", 7, _140_hex_aes_ecbc_en_a, 0, _140_hex_aes_ecbc_en_ha }, - { "de", 7, _140_hex_aes_ecbc_de_a, 0, _140_hex_aes_ecbc_de_ha }, - {} - }; -static c3_c* _140_hex_aes_ecbc_ha[] = { - "65da73b8de06a6660ca2d36be881b708362e1f8bc12c01290aed90fdb2977667", - 0 -}; - -static u3j_core _140_hex_aes_cbca_d[] = - { { "en", 7, _140_hex_aes_cbca_en_a, 0, _140_hex_aes_cbca_en_ha }, - { "de", 7, _140_hex_aes_cbca_de_a, 0, _140_hex_aes_cbca_de_ha }, - {} - }; -static c3_c* _140_hex_aes_cbca_ha[] = { - "420d04c03b7816b656fe4e8d9fce04f7e6d51d3d274c6511e89cfdb43ebf107e", - 0 -}; - -static u3j_core _140_hex_aes_cbcb_d[] = - { { "en", 7, _140_hex_aes_cbcb_en_a, 0, _140_hex_aes_cbcb_en_ha }, - { "de", 7, _140_hex_aes_cbcb_de_a, 0, _140_hex_aes_cbcb_de_ha }, - {} - }; -static c3_c* _140_hex_aes_cbcb_ha[] = { - "1b84daab497795f2afd7238a6a6090be68b78eb6051b0ffa076b2ed9fedeebe5", - 0 -}; - -static u3j_core _140_hex_aes_cbcc_d[] = - { { "en", 7, _140_hex_aes_cbcc_en_a, 0, _140_hex_aes_cbcc_en_ha }, - { "de", 7, _140_hex_aes_cbcc_de_a, 0, _140_hex_aes_cbcc_de_ha }, - {} - }; -static c3_c* _140_hex_aes_cbcc_ha[] = { - "3bab1a59c7673afeb659821d54754e8e5e281243e79624fdbe4d7f85cae192c5", - 0 -}; - -static u3j_core _140_hex_aes_siva_d[] = - { { "en", 7, _140_hex_aes_siva_en_a, 0, _140_hex_aes_siva_en_ha }, - { "de", 7, _140_hex_aes_siva_de_a, 0, _140_hex_aes_siva_de_ha }, - {} - }; -static c3_c* _140_hex_aes_siva_ha[] = { - "435c5c769d2522d71ab60332bb57440d69c6803d5ca9a5faae88c825cb55d72e", - 0 -}; -static u3j_core _140_hex_aes_sivb_d[] = - { { "en", 7, _140_hex_aes_sivb_en_a, 0, _140_hex_aes_sivb_en_ha }, - { "de", 7, _140_hex_aes_sivb_de_a, 0, _140_hex_aes_sivb_de_ha }, - {} - }; -static c3_c* _140_hex_aes_sivb_ha[] = { - "0683f3f9067c2a16f68805c778c404179dc5df9019bbbe0f8d680a99a69e61fc", - 0 -}; -static u3j_core _140_hex_aes_sivc_d[] = - { { "en", 7, _140_hex_aes_sivc_en_a, 0, _140_hex_aes_sivc_en_ha }, - { "de", 7, _140_hex_aes_sivc_de_a, 0, _140_hex_aes_sivc_de_ha }, - {} - }; -static c3_c* _140_hex_aes_sivc_ha[] = { - "23ef582f110d28aff82b0795305b02e5a718d667bcae97091c08bc26790e7176", - 0 -}; - -static u3j_core _140_hex_aes_d[] = - { { "ecba", 7, 0, _140_hex_aes_ecba_d, _140_hex_aes_ecba_ha }, - { "ecbb", 7, 0, _140_hex_aes_ecbb_d, _140_hex_aes_ecbb_ha }, - { "ecbc", 7, 0, _140_hex_aes_ecbc_d, _140_hex_aes_ecbc_ha }, - { "cbca", 7, 0, _140_hex_aes_cbca_d, _140_hex_aes_cbca_ha }, - { "cbcb", 7, 0, _140_hex_aes_cbcb_d, _140_hex_aes_cbcb_ha }, - { "cbcc", 7, 0, _140_hex_aes_cbcc_d, _140_hex_aes_cbcc_ha }, - { "siva", 7, 0, _140_hex_aes_siva_d, _140_hex_aes_siva_ha }, - { "sivb", 7, 0, _140_hex_aes_sivb_d, _140_hex_aes_sivb_ha }, - { "sivc", 7, 0, _140_hex_aes_sivc_d, _140_hex_aes_sivc_ha }, - {} - }; -static c3_c* _140_hex_aes_ha[] = { - "ca4c1b0cff03db74ceca1b844f0223d669aa42934152a784d431469f0eb71527", - 0 -}; - -static u3j_harm _140_hex_leer_a[] = {{".2", u3we_leer}, {}}; -static c3_c* _140_hex_leer_ha[] = { - "8a4486bb09639f6b8cf7631f9bf883256529c6d7d9aa320ab6dfa5517611f0d7", - 0 -}; -static u3j_harm _140_hex_lore_a[] = {{".2", u3we_lore}, {}}; -static c3_c* _140_hex_lore_ha[] = { - "19b13cfea49fd14aafbb20b8b888ba454f809c3f50a7cfeebd43f87336fe052d", - 0 -}; -static u3j_harm _140_hex_loss_a[] = {{".2", u3we_loss}, {}}; -static c3_c* _140_hex_loss_ha[] = { - "67aacd21484078828ad4342297d44c38d9213b8809f83f695c2996378a92dc2a", - 0 -}; -static u3j_harm _140_hex_lune_a[] = {{".2", u3we_lune}, {}}; -static c3_c* _140_hex_lune_ha[] = { - "417472f35b885fe6dd0715e78fd0920cb59f68b738aadc9768e73bc5efa0e570", - 0 -}; - -static u3j_harm _140_hex_coed__ed_puck_a[] = {{".2", u3wee_puck}, {}}; -static c3_c* _140_hex_coed__ed_puck_ha[] = { - "1bc694675842345c50b0e20a2193bb5bcbb42f163fc832431a3d1822a81e4c98", - 0 -}; -static u3j_harm _140_hex_coed__ed_sign_a[] = {{".2", u3wee_sign}, {}}; -static c3_c* _140_hex_coed__ed_sign_ha[] = { - "34ad749bf8443611cbf1f7de90a066318bd12be36f2f7f6f55281f6f7ed79754", - 0 -}; -static u3j_harm _140_hex_coed__ed_veri_a[] = {{".2", u3wee_veri}, {}}; -static c3_c* _140_hex_coed__ed_veri_ha[] = { - "047a7eeccb2e68aeeee631b6db86e11a5a3aa9e179660553eca6304327612dcf", - 0 -}; -static u3j_harm _140_hex_coed__ed_shar_a[] = {{".2", u3wee_shar}, {}}; -static c3_c* _140_hex_coed__ed_shar_ha[] = { - "52d3b0a2f51f2b0a9dd72bb33db38c73dc873029c365d871d0559a1472a80e72", - 0 -}; - -static u3j_harm _140_hex_coed__ed_point_add_a[] = - {{".2", u3wee_point_add}, {}}; - -static u3j_harm _140_hex_coed__ed_scalarmult_a[] = - {{".2", u3wee_scalarmult}, {}}; -static c3_c* _140_hex_coed__ed_scalarmult_ha[] = { - "72e71cd3aa3af429cd65baa78632500c60edd1d4c82a39d3ba7f231ef97e6316", - 0 -}; - -static u3j_harm _140_hex_coed__ed_scalarmult_base_a[] = - {{".2", u3wee_scalarmult_base}, {}}; -static c3_c* _140_hex_coed__ed_scalarmult_base_ha[] = { - "976fdb8251f9b767af689a0d2c41b88941921bf53777c1ceeb5297511021f9d8", - 0 -}; - -static u3j_harm _140_hex_coed__ed_add_scalarmult_scalarmult_base_a[] = - {{".2", u3wee_add_scalarmult_scalarmult_base}, {}}; -static c3_c* _140_hex_coed__ed_add_scalarmult_scalarmult_base_ha[] = { - "11819071c24a2d7b36daea6e16c78b2e05f9ca3e857cf4815ffe652ce677a61a", - 0 -}; - -static u3j_harm _140_hex_coed__ed_add_double_scalarmult_a[] = - {{".2", u3wee_add_double_scalarmult}, {}}; -static c3_c* _140_hex_coed__ed_add_double_scalarmult_ha[] = { - "0fab78a1e890e53cecade1c22b95813db77e066044e33417a0919695b6cde9ba", - 0 -}; - -static u3j_core _140_hex_coed__ed_d[] = - { { "sign", 7, _140_hex_coed__ed_sign_a, 0, _140_hex_coed__ed_sign_ha }, - { "puck", 7, _140_hex_coed__ed_puck_a, 0, _140_hex_coed__ed_puck_ha }, - { "veri", 7, _140_hex_coed__ed_veri_a, 0, _140_hex_coed__ed_veri_ha }, - { "shar", 7, _140_hex_coed__ed_shar_a, 0, _140_hex_coed__ed_shar_ha }, - { "point-add", 7, _140_hex_coed__ed_point_add_a, 0, 0 }, - { "scalarmult", 7, _140_hex_coed__ed_scalarmult_a, 0, - _140_hex_coed__ed_scalarmult_ha }, - { "scalarmult-base", 7, _140_hex_coed__ed_scalarmult_base_a, 0, - _140_hex_coed__ed_scalarmult_base_ha }, - { "add-scalarmult-scalarmult-base", 7, - _140_hex_coed__ed_add_scalarmult_scalarmult_base_a, 0, - _140_hex_coed__ed_add_scalarmult_scalarmult_base_ha }, - { "add-double-scalarmult", 7, - _140_hex_coed__ed_add_double_scalarmult_a, 0, - _140_hex_coed__ed_add_double_scalarmult_ha }, - {} - }; -static c3_c* _140_hex_coed__ed_ha[] = { - "7a44a962aa72933588b5c99a8b68ebac21ce3c4710c081cb66b3599b45af9ced", - 0 -}; - -static u3j_core _140_hex_coed_d[] = -{ { "ed", 3, 0, _140_hex_coed__ed_d, _140_hex_coed__ed_ha }, - {} -}; -static c3_c* _140_hex_coed_ha[] = { - "4be0254f06d953b69509eb15550595ffad8767d3c3dc2dafcd7c22f92f7704c4", - 0 -}; - - static u3j_harm _140_hex_hmac_hmac_a[] = {{".2", u3we_hmac}, {}}; - static c3_c* _140_hex_hmac_hmac_ha[] = { - "d0dbd778156aef21d18f44a8cffd87296826120af5a4af020dd7aff0f95f03b1", - 0 - }; -static u3j_core _140_hex_hmac_d[] = - { { "hmac", 7, _140_hex_hmac_hmac_a, 0, _140_hex_hmac_hmac_ha }, - {} - }; -static c3_c* _140_hex_hmac_ha[] = { - "976bb4508dbe659eb12aa32d4a481dbd885e40f8a15c505762f1acf43b744234", - 0 -}; - - static u3j_harm _140_hex_argon2_a[] = {{".2", u3we_argon2}, {}}; - static c3_c* _140_hex_argon2_ha[] = { - "4df7cec141ffa2cc76b058846474ca42cc9840666ee3e7e80e565803e83ea98b", - 0 - }; -static u3j_core _140_hex_argon_d[] = - { { "argon2", 511, _140_hex_argon2_a, 0, _140_hex_argon2_ha }, - {} - }; -static c3_c* _140_hex_argon_ha[] = { - "dc704c786192ecd09d4c206a8f28db3202b6e0eb03e3ce63a95987510ac312d6", - 0 -}; - -static c3_c* _140_hex_scr_pbk_ha[] = { 0 }; -static u3j_harm _140_hex_scr_pbk_a[] = {{".2", u3wes_pbk, c3y}, {}}; -static c3_c* _140_hex_scr_pbl_ha[] = { 0 }; -static u3j_harm _140_hex_scr_pbl_a[] = {{".2", u3wes_pbl, c3y}, {}}; -static c3_c* _140_hex_scr_hsh_ha[] = { 0 }; -static u3j_harm _140_hex_scr_hsh_a[] = {{".2", u3wes_hsh, c3y}, {}}; -static c3_c* _140_hex_scr_hsl_ha[] = { 0 }; -static u3j_harm _140_hex_scr_hsl_a[] = {{".2", u3wes_hsl, c3y}, {}}; - -static c3_c* _140_hex_scr_ha[] = { 0 }; -static u3j_core _140_hex_scr_d[] = - { { "pbk", 7, _140_hex_scr_pbk_a, 0, _140_hex_scr_pbk_ha }, - { "pbl", 7, _140_hex_scr_pbl_a, 0, _140_hex_scr_pbl_ha }, - { "hsh", 7, _140_hex_scr_hsh_a, 0, _140_hex_scr_hsh_ha }, - { "hsl", 7, _140_hex_scr_hsl_a, 0, _140_hex_scr_hsl_ha }, - {} - }; - -static c3_c* _140_hex_secp_secp256k1_make_ha[] = { 0 }; -static u3j_harm _140_hex_secp_secp256k1_make_a[] = {{".2", u3we_make, c3y}, {}}; -static c3_c* _140_hex_secp_secp256k1_sign_ha[] = { 0 }; -static u3j_harm _140_hex_secp_secp256k1_sign_a[] = {{".2", u3we_sign, c3y}, {}}; -static c3_c* _140_hex_secp_secp256k1_reco_ha[] = { 0 }; -static u3j_harm _140_hex_secp_secp256k1_reco_a[] = {{".2", u3we_reco, c3y}, {}}; - -static c3_c* _140_hex_secp_secp256k1_schnorr_sosi_ha[] = { 0 }; -static u3j_harm _140_hex_secp_secp256k1_schnorr_sosi_a[] = - {{".2", u3we_sosi}, {}}; -static c3_c* _140_hex_secp_secp256k1_schnorr_sove_ha[] = { 0 }; -static u3j_harm _140_hex_secp_secp256k1_schnorr_sove_a[] = - {{".2", u3we_sove}, {}}; - -static c3_c* _140_hex_secp_secp256k1_schnorr_ha[] = { 0 }; -static u3j_core _140_hex_secp_secp256k1_schnorr_d[] = - { { "sosi", 7, - _140_hex_secp_secp256k1_schnorr_sosi_a, 0, - _140_hex_secp_secp256k1_schnorr_sosi_ha }, - { "sove", 7, - _140_hex_secp_secp256k1_schnorr_sove_a, 0, - _140_hex_secp_secp256k1_schnorr_sove_ha }, - {} - }; - -static c3_c* _140_hex_secp_secp256k1_ha[] = { - "e7fc0971a970aba7ded43bd89e9c82623eb2f346c9c720c63b22f2a646927861", - 0 -}; -static u3j_core _140_hex_secp_secp256k1_d[] = - { { "make", 7, _140_hex_secp_secp256k1_make_a, 0, _140_hex_secp_secp256k1_make_ha }, - { "sign", 7, _140_hex_secp_secp256k1_sign_a, 0, _140_hex_secp_secp256k1_sign_ha }, - { "reco", 7, _140_hex_secp_secp256k1_reco_a, 0, _140_hex_secp_secp256k1_reco_ha }, - { "schnorr", 7, 0, - _140_hex_secp_secp256k1_schnorr_d, - _140_hex_secp_secp256k1_schnorr_ha }, - {} - }; - -static c3_c* _140_hex_secp_ha[] = { - "9f5c23f0e7923b6cf1603388ba52401b6e43881be3560b3acfaab20b25071792", - 0 -}; -static u3j_core _140_hex_secp_d[] = - { { "secp256k1", 3, 0, _140_hex_secp_secp256k1_d, _140_hex_secp_secp256k1_ha }, - {} - }; - - static u3j_harm _140_hex_blake2b_a[] = {{".2", u3we_blake, c3y}, {}}; - static c3_c* _140_hex_blake2b_ha[] = { - "c432216ca53b5ad2284259167952761bb1046e280268c4d3b9ca70a2024e1934", - 0 - }; -static u3j_core _140_hex_blake_d[] = - { { "blake2b", 7, _140_hex_blake2b_a, 0, _140_hex_blake2b_ha }, - {} - }; -static c3_c* _140_hex_blake_ha[] = { - "ff30d99ffb3e13d8aa50b2b8461c8edfabf0e76de22312d16d1d6daaf3636b5f", - 0 -}; - - static u3j_harm _140_hex_kecc_k224_a[] = - {{".2", u3we_kecc224, c3y, c3y, c3y}, {}}; - - static u3j_harm _140_hex_kecc_k256_a[] = - {{".2", u3we_kecc256, c3y, c3y, c3y}, {}}; - - static u3j_harm _140_hex_kecc_k384_a[] = - {{".2", u3we_kecc384, c3y, c3y, c3y}, {}}; - - static u3j_harm _140_hex_kecc_k512_a[] = - {{".2", u3we_kecc512, c3y, c3y, c3y}, {}}; - -static u3j_core _140_hex_kecc_d[] = - { { "k224", 7, _140_hex_kecc_k224_a, 0, no_hashes }, - { "k256", 7, _140_hex_kecc_k256_a, 0, no_hashes }, - { "k384", 7, _140_hex_kecc_k384_a, 0, no_hashes }, - { "k512", 7, _140_hex_kecc_k512_a, 0, no_hashes }, - {} - }; - - static u3j_harm _140_hex_ripemd_160_a[] = {{".2", u3we_ripe, c3y}, {}}; - static c3_c* _140_hex_ripemd_160_ha[] = { - "176684b29926a01f5c60fa584e4691b0cbdc9b93608dcbe7d0cf3585683fa42f", - 0 - }; -static u3j_core _140_hex_ripe_d[] = - { { "ripemd160", 7, _140_hex_ripemd_160_a, 0, _140_hex_ripemd_160_ha }, - {} - }; -static c3_c* _140_hex_ripe_ha[] = { - "b0cb16bf206c0496bb480e5759ea1afa7dee1748b64e5243c23fddb09720ebd0", - 0 -}; - - -static u3j_core _140_hex_d[] = -{ { "lore", 63, _140_hex_lore_a, 0, _140_hex_lore_ha }, - { "leer", 63, _140_hex_leer_a, 0, _140_hex_leer_ha }, - { "loss", 63, _140_hex_loss_a, 0, _140_hex_loss_ha }, - { "lune", 127, _140_hex_lune_a, 0, _140_hex_lune_ha }, - - { "coed", 63, 0, _140_hex_coed_d, _140_hex_coed_ha }, - { "aes", 31, 0, _140_hex_aes_d, _140_hex_aes_ha }, - - { "hmac", 63, 0, _140_hex_hmac_d, _140_hex_hmac_ha }, - { "argon", 31, 0, _140_hex_argon_d, _140_hex_argon_ha }, - { "blake", 31, 0, _140_hex_blake_d, _140_hex_blake_ha }, - { "kecc", 31, 0, _140_hex_kecc_d, no_hashes }, - { "ripemd", 31, 0, _140_hex_ripe_d, _140_hex_ripe_ha }, - { "scr", 31, 0, _140_hex_scr_d, _140_hex_scr_ha }, - { "secp", 6, 0, _140_hex_secp_d, _140_hex_secp_ha }, - { "mimes", 31, 0, _140_hex_mimes_d, _140_hex_mimes_ha }, - {} -}; -static c3_c* _140_hex_ha[] = { - "7e393356dd7ac64eed5cd9f5cf0e320d401ca36a0a0ce0f954e7538824114844", - 0 -}; - -/* layer five -*/ -static u3j_harm _140_pen_cell_a[] = {{".2", u3wf_cell}, {}}; -static c3_c* _140_pen_cell_ha[] = { - "411649e69ff5c5d4a2976b300d213b99af3de724cec0e95f48404b808fc4f428", - 0 -}; -static u3j_harm _140_pen_comb_a[] = {{".2", u3wf_comb}, {}}; -static c3_c* _140_pen_comb_ha[] = { - "f9e37c3b3d5036c31af60f7047391594068638b54db7cf94bfea9dabbdffa547", - 0 -}; -static u3j_harm _140_pen_cons_a[] = {{".2", u3wf_cons}, {}}; -static c3_c* _140_pen_cons_ha[] = { - "b698cc6bc49ea0473e344c784075e99a433b4c5738f90fc58ab17c3eaa44b2e9", - 0 -}; -static u3j_harm _140_pen_core_a[] = {{".2", u3wf_core}, {}}; -static c3_c* _140_pen_core_ha[] = { - "1180e9371cf3465783ef192f9a7f580cd90533f5b52b77b456287f1d580a3535", - 0 -}; -static u3j_harm _140_pen_face_a[] = {{".2", u3wf_face}, {}}; -static c3_c* _140_pen_face_ha[] = { - "a184c44d57f5c94b84a3258b05bf891f3c96a4a4bbff3a8934d11cad0efa81d8", - 0 -}; -static u3j_harm _140_pen_fitz_a[] = {{".2", u3wf_fitz}, {}}; -static c3_c* _140_pen_fitz_ha[] = { - "469abe976ec15eeff9a87bce385f2c87c9bd89814ce2858aa9fee094beea1e5d", - 0 -}; -static u3j_harm _140_pen_flan_a[] = {{".2", u3wf_flan}, {}}; -static c3_c* _140_pen_flan_ha[] = { - "cc00cb9373b0274af4e17d7acd77f65d8a2fa886e422c949c12d9d9e7cb3525b", - 0 -}; -static u3j_harm _140_pen_flip_a[] = {{".2", u3wf_flip}, {}}; -static c3_c* _140_pen_flip_ha[] = { - "6e97fab9d039e715a30af5da93ef97389babfdcae7ef87655d278e77a1af0f0c", - 0 -}; -static u3j_harm _140_pen_flor_a[] = {{".2", u3wf_flor}, {}}; -static c3_c* _140_pen_flor_ha[] = { - "ab5360aacf0c9a325727e90e1caea9c42f5d94ccc248c9e1f253b0922b4c4e63", - 0 -}; -static u3j_harm _140_pen_fork_a[] = {{".2", u3wf_fork}, {}}; -static c3_c* _140_pen_fork_ha[] = { - "36f0ea0e2eb30328b8b83ed43a81c8c9a1f5b4c5a03fd68fd25701991a40b9dd", - 0 -}; - -// hike disabled while implementing edit -// static u3j_harm _140_pen_hike_a[] = {{".2", u3wf_hike}, {}}; -// static c3_c* _140_pen_hike_ha[] = {0}; - -static u3j_harm _140_pen_look_a[] = {{".2", u3wf_look}, {}}; -static c3_c* _140_pen_look_ha[] = { - "fdda2166a2b9e1a9bda6ab375dd6fb6c610e18f54636a5e89896b45fd0a7169b", - 0 -}; -static u3j_harm _140_pen_loot_a[] = {{".2", u3wf_loot}, {}}; -static c3_c* _140_pen_loot_ha[] = { - "e275da4562ae6da9bd333aeae6b9829e886874c8b891898c0ef5306268eb45c1", - 0 -}; - - static u3j_harm _140_pen__ut_crop_a[] = {{".2", u3wfu_crop}, {}}; - static c3_c* _140_pen__ut_crop_ha[] = { - "e2c6fc3e714a3a98ccd28423dcb9f2c6480935e26b54dd0581eb2ad7e5b16d6f", - 0 - }; - static u3j_harm _140_pen__ut_fish_a[] = {{".2", u3wfu_fish}, {}}; - static c3_c* _140_pen__ut_fish_ha[] = { - "080caee60b5ee4616bf9568bdbceabbf044379c47466e0ae3968cb0146049a84", - 0 - }; - static u3j_harm _140_pen__ut_fuse_a[] = {{".2", u3wfu_fuse}, {}}; - static c3_c* _140_pen__ut_fuse_ha[] = { - "519aac7b40b7018d5df00ddf3977c2ebe0c2e05bcee34796d56a1d54c15e0c84", - 0 - }; - static u3j_harm _140_pen__ut_mint_a[] = {{".2", u3wfu_mint}, {}}; - static c3_c* _140_pen__ut_mint_ha[] = { - "7d980f7425b51bb10fbbd8b465b5d83f5dd4cb6e66d88758a9f7490b812a765e", - 0 - }; - static u3j_harm _140_pen__ut_mull_a[] = {{".2", u3wfu_mull}, {}}; - static c3_c* _140_pen__ut_mull_ha[] = { - "c806329aefd920501ea0faa0cfb0ce3280a74408782efe6d82878ec43ec44fb7", - 0 - }; - - static u3j_harm _140_pen__ut_nest_dext_a[] = {{".2", u3wfu_nest_dext}, {}}; - static c3_c* _140_pen__ut_nest_dext_ha[] = { - "72f33df96800034fc63531293f9b110e6505027195bf8a10ff94b9a1f1ef719b", - 0 - }; - static u3j_core _140_pen__ut_nest_in_d[] = - { - { "nest-dext", 3, _140_pen__ut_nest_dext_a, 0, _140_pen__ut_nest_dext_ha }, - {} - }; - static c3_c* _140_pen__ut_nest_in_ha[] = { - "68378dfa1d1fee0b1cd9593fb561234cec2ae9371a5ffa287c3d2ab9620e198c", - 0 - }; - - static u3j_core _140_pen__ut_nest_d[] = - { - { "nest-in", 7, 0, _140_pen__ut_nest_in_d, _140_pen__ut_nest_in_ha }, - {} - }; - static c3_c* _140_pen__ut_nest_ha[] = { - "1e8de5d1225facc1158c92c2ea5e0dc84129cbb317fde3691e224b8c2550d950", - 0 - }; - - static u3j_harm _140_pen__ut_rest_a[] = {{".2", u3wfu_rest}, {}}; - static c3_c* _140_pen__ut_rest_ha[] = { - "b4a83073f4cb03898ef099fab5722a046122dc96a5332ffc82f988df6c186e74", - 0 - }; - -static u3j_core _140_pen__ut_d[] = - { - { "crop", 7, _140_pen__ut_crop_a, 0, _140_pen__ut_crop_ha }, - { "fish", 7, _140_pen__ut_fish_a, 0, _140_pen__ut_fish_ha }, - { "fuse", 7, _140_pen__ut_fuse_a, 0, _140_pen__ut_fuse_ha }, - { "mint", 7, _140_pen__ut_mint_a, 0, _140_pen__ut_mint_ha }, - { "mull", 7, _140_pen__ut_mull_a, 0, _140_pen__ut_mull_ha }, - { "nest", 7, 0, _140_pen__ut_nest_d, _140_pen__ut_nest_ha }, - { "rest", 7, _140_pen__ut_rest_a, 0, _140_pen__ut_rest_ha }, - {} - }; - -static c3_c* _140_pen__ut_ha[] = { - "50c79204c82a3ba8f01e085a2e27e7716e5c7ab1929f94423ef1da92cf5ac631", - 0 -}; - -static u3j_hood _140_pen__ut_ho[] = { - { "ar", 12282 }, - { "fan", 28, c3n }, - { "rib", 58, c3n }, - { "vet", 59, c3n }, - - { "blow", 6015 }, - { "burp", 342 }, - { "busk", 1373 }, - { "buss", 374 }, - { "crop", 1494 }, - { "duck", 1524 }, - { "dune", 2991 }, - { "dunk", 3066 }, - { "epla", 12206 }, - { "emin", 1534 }, - { "emul", 6134 }, - { "feel", 1502 }, - { "felt", 94 }, - { "fine", 49086 }, - { "fire", 4 }, - { "fish", 6006 }, - { "fond", 12283 }, - { "fund", 6014 }, - // XX +funk is not part of +ut, and this hook appears to be unused - // remove from here and the +ut hint - // - { "funk", 0xbefafa, c3y, 31 }, - { "fuse", 24021 }, - { "gain", 380 }, - { "lose", 0x2fefe }, - { "mile", 382 }, - { "mine", 372 }, - { "mint", 49083 }, - { "moot", 0x2feff }, - { "mull", 24020 }, - { "nest", 92 }, - { "peel", 1526 }, - { "play", 3006 }, - { "peek", 1532 }, - { "repo", 22 }, - { "rest", 6102 }, - { "tack", 6007 }, - { "toss", 24540 }, - { "wrap", 6140 }, - {}, -}; - -// XX unused, hook removed, delete source -// -#if 0 -static u3j_harm _140_pen__ap_a[] = - { {"open", u3wfp_open}, - {"rake", u3wfp_rake}, - {} - }; -static c3_c* _140_pen__ap_ha[] = {0}; -#endif - -static u3j_core _140_pen_d[] = -{ { "hex", 7, 0, _140_hex_d, _140_hex_ha }, - - { "cell", 7, _140_pen_cell_a, 0, _140_pen_cell_ha }, - { "comb", 7, _140_pen_comb_a, 0, _140_pen_comb_ha }, - { "cons", 7, _140_pen_cons_a, 0, _140_pen_cons_ha }, - { "core", 7, _140_pen_core_a, 0, _140_pen_core_ha }, - { "face", 7, _140_pen_face_a, 0, _140_pen_face_ha }, - { "fitz", 7, _140_pen_fitz_a, 0, _140_pen_fitz_ha }, - { "flan", 7, _140_pen_flan_a, 0, _140_pen_flan_ha }, - { "flip", 7, _140_pen_flip_a, 0, _140_pen_flip_ha }, - { "flor", 7, _140_pen_flor_a, 0, _140_pen_flor_ha }, - { "fork", 7, _140_pen_fork_a, 0, _140_pen_fork_ha }, - // XX implementation obsolete, update or remove - // - // { "hike", 7, _140_pen_hike_a, 0, _140_pen_hike_ha }, - { "look", 7, _140_pen_look_a, 0, _140_pen_look_ha }, - { "loot", 7, _140_pen_loot_a, 0, _140_pen_loot_ha }, - - // XX unused, hook removed, delete source - // - // { "ap", 7, _140_pen__ap_a, 0, _140_pen__ap_ha }, - { "ut", 15, 0, _140_pen__ut_d, _140_pen__ut_ha, _140_pen__ut_ho }, - {} -}; -static c3_c* _140_pen_ha[] = { - "e6c9e2362bdf2d1f9a2837a0efa154c0b8b9d51aea03a86b5aece573ff423cb1", - 0 -}; - -static u3j_hood _140_pen_ho[] = { - { "ap", 22 }, - { "ut", 86 }, - {}, -}; - -/* layer four -*/ -static u3j_harm _140_qua_trip_a[] = {{".2", u3we_trip}, {}}; -static c3_c* _140_qua_trip_ha[] = { - "05423b940d10d03891cc23f36eea14b233e5884ef539de3d985d6818dd427b05", - 0 -}; - -static u3j_harm _140_qua_slaw_a[] = {{".2", u3we_slaw}, {}}; -static c3_c* _140_qua_slaw_ha[] = { - "306c9692f48e2700675ed6581e9df4feaee951e1bed3cad7f89aab392e80000f", - 0 -}; -static u3j_harm _140_qua_scot_a[] = {{".2", u3we_scot}, {}}; -static c3_c* _140_qua_scot_ha[] = { - 0 -}; -static u3j_harm _140_qua_scow_a[] = {{".2", u3we_scow}, {}}; -static c3_c* _140_qua_scow_ha[] = { - 0 -}; - -static u3j_harm _140_qua__po_ind_a[] = {{".2", u3wcp_ind}, {}}; -static c3_c* _140_qua__po_ind_ha[] = { - "95bbe9867dbbd1b9ce12671d64cf7b1dee8d987c6770955a83c73291c4537a61", - 0 -}; -static u3j_harm _140_qua__po_ins_a[] = {{".2", u3wcp_ins}, {}}; -static c3_c* _140_qua__po_ins_ha[] = { - "aae783fb258dff7f8ade49756e01f96a2d2100411a88a886732270dcf9f174f0", - 0 -}; -static u3j_harm _140_qua__po_tod_a[] = {{".2", u3wcp_tod}, {}}; -static c3_c* _140_qua__po_tod_ha[] = { - "153aeba45ca2a87aa918e9cea1b26e8104a6e4395979257b075546c1e2654a17", - 0 -}; -static u3j_harm _140_qua__po_tos_a[] = {{".2", u3wcp_tos}, {}}; -static c3_c* _140_qua__po_tos_ha[] = { - "7c5ffad03bcf8b4ea9bdf0c7f7500351923bc0431f3d62d6ce0472790f668fb4", - 0 -}; - static u3j_core _140_qua__po_d[] = - { { "ind", 7, _140_qua__po_ind_a, 0, _140_qua__po_ind_ha }, - { "ins", 7, _140_qua__po_ins_a, 0, _140_qua__po_ins_ha }, - { "tod", 7, _140_qua__po_tod_a, 0, _140_qua__po_tod_ha }, - { "tos", 7, _140_qua__po_tos_a, 0, _140_qua__po_tos_ha }, - {} - }; - static c3_c* _140_qua__po_ha[] = { - "efc5fa7c0efedd490e9a270bb5cf9f90809e6b224f8a381a6b8a481253b237a1", - 0 - }; - -static u3j_harm _140_qua__bend_fun_a[] = {{".2", u3we_bend_fun}, {}}; -static c3_c* _140_qua__bend_fun_ha[] = { - "e6ea05e3d765a005fccde9eb88fb93e06f0b6ea198afa8ed599b056ba179396a", - 0 -}; - static u3j_core _140_qua__bend_d[] = - { { "fun", 7, _140_qua__bend_fun_a, 0, _140_qua__bend_fun_ha }, - {} - }; - static c3_c* _140_qua__bend_ha[] = { - "adc59c6db6d5b26122bc6c04e25c3efe830c9eef68ecf81c492a59ee5e9e20a2", - 0 - }; - -static u3j_harm _140_qua__cold_fun_a[] = {{".2", u3we_cold_fun}, {}}; -static c3_c* _140_qua__cold_fun_ha[] = { - "ad5a0ab7405be9ffda0a9dd34580c6039f6bbb0301920fb2df0c31be3c72c58e", - 0 -}; - static u3j_core _140_qua__cold_d[] = - { { "fun", 7, _140_qua__cold_fun_a, 0, _140_qua__cold_fun_ha }, - {} - }; - static c3_c* _140_qua__cold_ha[] = { - "06c49d8dab6cb057e3ae1d1164e96950944ea48e54ad72347239ea434f1d4b9c", - 0 - }; - -static u3j_harm _140_qua__cook_fun_a[] = {{".2", u3we_cook_fun}, {}}; -static c3_c* _140_qua__cook_fun_ha[] = { - "f2a45612ad9c279b723334ab0915d3ed3ece7727309968c2555f45e0668eeb27", - 0 -}; - static u3j_core _140_qua__cook_d[] = - { { "fun", 7, _140_qua__cook_fun_a, 0, _140_qua__cook_fun_ha }, - {} - }; - static c3_c* _140_qua__cook_ha[] = { - "3ccd46dd21828d7be11f8c093536e305b1df982393a69c40ea73f63a574b3bb1", - 0 - }; - -static u3j_harm _140_qua__comp_fun_a[] = {{".2", u3we_comp_fun}, {}}; -static c3_c* _140_qua__comp_fun_ha[] = { - "bd7fdba84b05b00a63c24d19a03b882578ee9a3b922a3a688f7827c6e64daf96", - 0 -}; - static u3j_core _140_qua__comp_d[] = - { { "fun", 7, _140_qua__comp_fun_a, 0, _140_qua__comp_fun_ha }, - {} - }; - static c3_c* _140_qua__comp_ha[] = { - "7baad25ba87bcbba8ce4fe328280a799765dcf62a8bb761ffd87b939dd8734f2", - 0 - }; - -static u3j_harm _140_qua__easy_fun_a[] = {{".2", u3we_easy_fun}, {}}; -static c3_c* _140_qua__easy_fun_ha[] = { - "4bbbc43ece463d961e572301d0824d3e3cab3ba09ec2756cbefae63ee106044b", - 0 -}; - static u3j_core _140_qua__easy_d[] = - { { "fun", 7, _140_qua__easy_fun_a, 0, _140_qua__easy_fun_ha }, - {} - }; - static c3_c* _140_qua__easy_ha[] = { - "fdcf833943e24323deb6b071497498933ce6c4ba7d4742f2752b6ddb7fb9634e", - 0 - }; - -static u3j_harm _140_qua__glue_fun_a[] = {{".2", u3we_glue_fun}, {}}; -static c3_c* _140_qua__glue_fun_ha[] = { - "ffe0fe8815a2298c51a58e963efbbb7af90830abf11ce50bf9a47f479ce452fb", - 0 -}; - static u3j_core _140_qua__glue_d[] = - { { "fun", 7, _140_qua__glue_fun_a, 0, _140_qua__glue_fun_ha }, - {} - }; - static c3_c* _140_qua__glue_ha[] = { - "079c8a395428c2921b266a84bcf271fbe62f3d873b26680661e13a78df1a3989", - 0 - }; - -static u3j_harm _140_qua__here_fun_a[] = {{".2", u3we_here_fun}, {}}; -static c3_c* _140_qua__here_fun_ha[] = { - "47ec445fcfa89d266dae3c3590ed041d1b05f92d1bce360f232da5d496e4f2eb", - 0 -}; - static u3j_core _140_qua__here_d[] = - { { "fun", 7, _140_qua__here_fun_a, 0, _140_qua__here_fun_ha }, - {} - }; - static c3_c* _140_qua__here_ha[] = { - "4600093be5becba9a65a14b67624e3d9e4c66e0c97ba57b2bc271907eea32ffe", - 0 - }; - -static u3j_harm _140_qua__just_fun_a[] = {{".2", u3we_just_fun}, {}}; -static c3_c* _140_qua__just_fun_ha[] = { - "38bf1fb843bc29837868f2828f32d7e2bbb419b0cb9a1236adea28dfc6ce1040", - 0 -}; - static u3j_core _140_qua__just_d[] = - { { "fun", 7, _140_qua__just_fun_a, 0, _140_qua__just_fun_ha }, - {} - }; - static c3_c* _140_qua__just_ha[] = { - "7d6b2165e52dec478d96cf72478a35b7a92b014e6a15f046f026c0c8cb07679b", - 0 - }; - -static u3j_harm _140_qua__mask_fun_a[] = {{".2", u3we_mask_fun}, {}}; -static c3_c* _140_qua__mask_fun_ha[] = { - "892dfcd5f3d90981fa6e7608e93f0517000d316e7d9c07b3bd390c4966c97f5f", - 0 -}; - static u3j_core _140_qua__mask_d[] = - { { "fun", 7, _140_qua__mask_fun_a, 0, _140_qua__mask_fun_ha }, - {} - }; - static c3_c* _140_qua__mask_ha[] = { - "48e11fc12d7c453cda6ca42577d68e968446aa4d0ad3b99cc674affc7f4507b4", - 0 - }; - -static u3j_harm _140_qua__shim_fun_a[] = {{".2", u3we_shim_fun}, {}}; -static c3_c* _140_qua__shim_fun_ha[] = { - "4e26a0e98adb13ee6718fd68d90910c630df9bb7023b3e3ef40cda6710075fc9", - 0 -}; - static u3j_core _140_qua__shim_d[] = - { { "fun", 7, _140_qua__shim_fun_a, 0, _140_qua__shim_fun_ha }, - {} - }; - static c3_c* _140_qua__shim_ha[] = { - "226b96d1a59daada23a1ea80227c2dbf32ddd748d4c6363f316147ab7f292ced", - 0 - }; - -static u3j_harm _140_qua__stag_fun_a[] = {{".2", u3we_stag_fun}, {}}; -static c3_c* _140_qua__stag_fun_ha[] = { - "f76c7205c23e77809af793bc506f4727071fd029d234317fe78a7f65e2b7d6ea", - 0 -}; - static u3j_core _140_qua__stag_d[] = - { { "fun", 7, _140_qua__stag_fun_a, 0, _140_qua__stag_fun_ha }, - {} - }; - static c3_c* _140_qua__stag_ha[] = { - "fc978af18fb13dc0d77501b6f3eeb538b079b4345eb9195c3dd44c516e69424a", - 0 - }; - -static u3j_harm _140_qua__stew_fun_a[] = {{".2", u3we_stew_fun}, {}}; -static c3_c* _140_qua__stew_fun_ha[] = { - "a700f6bdfdb83ba33b2a3fe92fda3cb1bbfe95e595401538c8371b55fcc61447", - 0 -}; - static u3j_core _140_qua__stew_d[] = - { { "fun", 31, _140_qua__stew_fun_a, 0, _140_qua__stew_fun_ha }, - {} - }; - static c3_c* _140_qua__stew_ha[] = { - "29303fd6ab78cbbccdfc5bcf23d0bff126a0ef2bf4fa11ce70fcf4e6aa5fe60b", - 0 - }; - -static u3j_harm _140_qua__stir_fun_a[] = {{".2", u3we_stir_fun}, {}}; -static c3_c* _140_qua__stir_fun_ha[] = { - "6251308ea3c741e76ef9cb2dc5a71c9d8706d6cce6fdb420fef12915e0c032d6", - 0 -}; - static u3j_core _140_qua__stir_d[] = - { { "fun", 7, _140_qua__stir_fun_a, 0, _140_qua__stir_fun_ha }, - {} - }; - static c3_c* _140_qua__stir_ha[] = { - "4e466aef4d91f0ced008c00e8a4330afb3a43ef81dc1a6d93f1853685f69b9ca", - 0 - }; - -static u3j_harm _140_qua_pfix_a[] = {{".2", u3we_pfix}, {}}; -static c3_c* _140_qua_pfix_ha[] = { - "f7019bccc8b3b04a969878ffed84c9eba4dfa60ee32f984119cacb0c2381656b", - 0 -}; - -static u3j_harm _140_qua_plug_a[] = {{".2", u3we_plug}, {}}; -static c3_c* _140_qua_plug_ha[] = { - "5f5a9824e0952fd565748cc0a20f96cf883a41e2f5707c8a7797e6edd617b79c", - 0 -}; -static u3j_harm _140_qua_pose_a[] = {{".2", u3we_pose}, {}}; -static c3_c* _140_qua_pose_ha[] = { - "5c77203f288ef0f7bcd87871c69673db7fc804b647ecc42992707dc32f0f4611", - 0 -}; - -static u3j_harm _140_qua_sfix_a[] = {{".2", u3we_sfix}, {}}; -static c3_c* _140_qua_sfix_ha[] = { - "00987ed37104b902c5264d4d013826d762bfa80a6b29cfe4b7fa61b1ddd9cfac", - 0 -}; - -static u3j_harm _140_qua_mink_a[] = {{".2", u3we_mink}, {}}; -static c3_c* _140_qua_mink_ha[] = { - "99b653da6a21fa3375424811af288f59164592ece4a072abc460df03e81abcaf", - 0 -}; -static u3j_harm _140_qua_mole_a[] = {{".2", u3we_mole}, {}}; -static c3_c* _140_qua_mole_ha[] = { - "029c1acaff1911c54ce31a3693397394604ea970bf076078c1a1cfa23d2fa74e", - 0 -}; -static u3j_harm _140_qua_mule_a[] = {{".2", u3we_mule}, {}}; -static c3_c* _140_qua_mule_ha[] = { - "d54688d726565ddade7f2636741cad7209ea40fab28d3335555d8a02ff6001c4", - 0 -}; - -static u3j_core _140_qua_d[] = -{ { "pen", 3, 0, _140_pen_d, _140_pen_ha, _140_pen_ho }, - - { "po", 7, 0, _140_qua__po_d, _140_qua__po_ha }, - - { "trip", 7, _140_qua_trip_a, 0, _140_qua_trip_ha }, - - { "bend", 7, 0, _140_qua__bend_d, _140_qua__bend_ha }, - { "cold", 7, 0, _140_qua__cold_d, _140_qua__cold_ha }, - { "comp", 7, 0, _140_qua__comp_d, _140_qua__comp_ha }, - { "cook", 7, 0, _140_qua__cook_d, _140_qua__cook_ha }, - { "easy", 7, 0, _140_qua__easy_d, _140_qua__easy_ha }, - { "glue", 7, 0, _140_qua__glue_d, _140_qua__glue_ha }, - { "here", 7, 0, _140_qua__here_d, _140_qua__here_ha }, - { "just", 7, 0, _140_qua__just_d, _140_qua__just_ha }, - { "mask", 7, 0, _140_qua__mask_d, _140_qua__mask_ha }, - { "shim", 7, 0, _140_qua__shim_d, _140_qua__shim_ha }, - { "stag", 7, 0, _140_qua__stag_d, _140_qua__stag_ha }, - { "stew", 7, 0, _140_qua__stew_d, _140_qua__stew_ha }, - { "stir", 7, 0, _140_qua__stir_d, _140_qua__stir_ha }, - - { "pfix", 7, _140_qua_pfix_a, 0, _140_qua_pfix_ha }, - { "plug", 7, _140_qua_plug_a, 0, _140_qua_plug_ha }, - { "pose", 7, _140_qua_pose_a, 0, _140_qua_pose_ha }, - { "sfix", 7, _140_qua_sfix_a, 0, _140_qua_sfix_ha }, - - { "mink", 7, _140_qua_mink_a, 0, _140_qua_mink_ha }, - { "mole", 7, _140_qua_mole_a, 0, _140_qua_mole_ha }, - { "mule", 7, _140_qua_mule_a, 0, _140_qua_mule_ha }, - - // XX disabled, implicated in memory corruption - // write tests and re-enable - // - // { "scot", 7, _140_qua_scot_a, 0, _140_qua_scot_ha }, - // { "scow", 7, _140_qua_scow_a, 0, _140_qua_scow_ha }, - { "slaw", 7, _140_qua_slaw_a, 0, _140_qua_slaw_ha }, - {} -}; -static c3_c* _140_qua_ha[] = { - "db9b4b21c0a8a8324105cbccc1421ef2a715ef0562c280b943fe1d96651cd9cc", - 0 -}; - -static u3j_hood _140_qua_ho[] = { - { "mute", 0x2fbabe }, - { "show", 24406 }, - { "mure", 1404 }, - {}, -}; - -/* layer three -*/ - static u3j_harm _140_tri__cofl__drg_a[] = {{".2", u3wef_drg}, {}}; - static c3_c* _140_tri__cofl__drg_ha[] = { - "6063adb8cac639f7b20d5e7700c8108266be04f99cce4434f906240b424bf36d", - 0 - }; - static u3j_harm _140_tri__cofl__lug_a[] = {{".2", u3wef_lug}, {}}; - static c3_c* _140_tri__cofl__lug_ha[] = { - "f146a84731447e5c4b1e7b6e9331b33d1babed09bb0618e134c9535062154a87", - 0 - }; -static u3j_core _140_tri__cofl_d[] = - { { "drg", 7, _140_tri__cofl__drg_a, 0, _140_tri__cofl__drg_ha }, - { "lug", 7, _140_tri__cofl__lug_a, 0, _140_tri__cofl__lug_ha }, - {} - }; -static c3_c* _140_tri__cofl_ha[] = { - "f320c5bf51db85f55b900f4160f7e0ab9ef267f43ddb698900de034c6e2600d5", - 0 -}; - - static u3j_harm _140_tri__rd_add_a[] = {{".2", u3wer_add}, {}}; - static c3_c* _140_tri__rd_add_ha[] = { - "90dfaaadb2878d6d89a808ce4199e5bb239fa981e1c2edf24dc54aa3fcab55a5", - 0 - }; - static u3j_harm _140_tri__rd_sub_a[] = {{".2", u3wer_sub}, {}}; - static c3_c* _140_tri__rd_sub_ha[] = { - "5898a2424ba815d66d83917953f01860e63207f4200a447f632d9a5cc77a8a9c", - 0 - }; - static u3j_harm _140_tri__rd_mul_a[] = {{".2", u3wer_mul}, {}}; - static c3_c* _140_tri__rd_mul_ha[] = { - "a3af44ef4cd89afe78f1088bddb7d56dfa7fc209153256557c98ff34b67976bc", - 0 - }; - static u3j_harm _140_tri__rd_div_a[] = {{".2", u3wer_div}, {}}; - static c3_c* _140_tri__rd_div_ha[] = { - "9be3b38b9b4b0b0cd0bb060529c8f439cb0589aa9c3528efc519fbcc6845e98d", - 0 - }; - static u3j_harm _140_tri__rd_sqt_a[] = {{".2", u3wer_sqt}, {}}; - static c3_c* _140_tri__rd_sqt_ha[] = { - "0413678ac8ec89c3425ba762cd24b2a8a455543ec9b5dd719524e6b834e0c99c", - 0 - }; - static u3j_harm _140_tri__rd_fma_a[] = {{".2", u3wer_fma}, {}}; - static c3_c* _140_tri__rd_fma_ha[] = { - "7c920238dd42fb645c057cc950ed7ece775d5f502a0faf6ef5d17d348e0fc3e3", - 0 - }; - static u3j_harm _140_tri__rd_lth_a[] = {{".2", u3wer_lth}, {}}; - static c3_c* _140_tri__rd_lth_ha[] = { - "a108f1ac15c1d4e2c86457c9afc97a97a5954003c709c3c19c722b37255bcba9", - 0 - }; - static u3j_harm _140_tri__rd_lte_a[] = {{".2", u3wer_lte}, {}}; - static c3_c* _140_tri__rd_lte_ha[] = { - "ef9a6b2c5cdd0d4de550a32679d242693131cdc3cf40ac914eadfa7d6d9f1bac", - 0 - }; - static u3j_harm _140_tri__rd_equ_a[] = {{".2", u3wer_equ}, {}}; - static c3_c* _140_tri__rd_equ_ha[] = { - "c93cdb951dca3b0ac61070780f95e1baa3718fe519d0268305c032cf14a21e39", - 0 - }; - static u3j_harm _140_tri__rd_gte_a[] = {{".2", u3wer_gte}, {}}; - static c3_c* _140_tri__rd_gte_ha[] = { - "6857077d97e2fc203b555dc20748c33d34b694d33c48f628543bea6491e722a6", - 0 - }; - static u3j_harm _140_tri__rd_gth_a[] = {{".2", u3wer_gth}, {}}; - static c3_c* _140_tri__rd_gth_ha[] = { - "87fd815913fa590c715d3a96ada5bae6298f3e7823af90ffcdf235f493c56330", - 0 - }; -static u3j_core _140_tri__rd_d[] = - { { "add", 7, _140_tri__rd_add_a, 0, _140_tri__rd_add_ha }, - { "sub", 7, _140_tri__rd_sub_a, 0, _140_tri__rd_sub_ha }, - { "mul", 7, _140_tri__rd_mul_a, 0, _140_tri__rd_mul_ha }, - { "div", 7, _140_tri__rd_div_a, 0, _140_tri__rd_div_ha }, - { "sqt", 7, _140_tri__rd_sqt_a, 0, _140_tri__rd_sqt_ha }, - { "fma", 7, _140_tri__rd_fma_a, 0, _140_tri__rd_fma_ha }, - { "lth", 7, _140_tri__rd_lth_a, 0, _140_tri__rd_lth_ha }, - { "lte", 7, _140_tri__rd_lte_a, 0, _140_tri__rd_lte_ha }, - { "equ", 7, _140_tri__rd_equ_a, 0, _140_tri__rd_equ_ha }, - { "gte", 7, _140_tri__rd_gte_a, 0, _140_tri__rd_gte_ha }, - { "gth", 7, _140_tri__rd_gth_a, 0, _140_tri__rd_gth_ha }, - {} - }; -static c3_c* _140_tri__rd_ha[] = { - "0afab285837f9c88faff3ac8f3f49b5e259da253e0505cd823a53d4e826261f7", - 0 -}; - - static u3j_harm _140_tri__rs_add_a[] = {{".2", u3wet_add}, {}}; - static c3_c* _140_tri__rs_add_ha[] = { - "b89a1e348628fd9b4fd520aabbf6c53e12be5bbf661b9094f7a9841be3f51de9", - 0 - }; - static u3j_harm _140_tri__rs_sub_a[] = {{".2", u3wet_sub}, {}}; - static c3_c* _140_tri__rs_sub_ha[] = { - "9d13b86d17908830f93b920e80e1a985105583597f6fb640f175c98052e357f1", - 0 - }; - static u3j_harm _140_tri__rs_mul_a[] = {{".2", u3wet_mul}, {}}; - static c3_c* _140_tri__rs_mul_ha[] = { - "5c61a9e335f6c139332523d871ca5773ab476365b623444370474fde08639061", - 0 - }; - static u3j_harm _140_tri__rs_div_a[] = {{".2", u3wet_div}, {}}; - static c3_c* _140_tri__rs_div_ha[] = { - "a7147a81be3ef5a1c0de6587edb2990e30057d7871d73632eabc8dc567e751c8", - 0 - }; - static u3j_harm _140_tri__rs_sqt_a[] = {{".2", u3wet_sqt}, {}}; - static c3_c* _140_tri__rs_sqt_ha[] = { - "c403bb48d78bcfa9cd4128b7f9eb362e71e5269ab6578fb0bb5e70b4244c5781", - 0 - }; - static u3j_harm _140_tri__rs_fma_a[] = {{".2", u3wet_fma}, {}}; - static c3_c* _140_tri__rs_fma_ha[] = { - "afc14914eb8f579a0c6620db69bc951329325747a8ef01c2d0e5feb29e9a9ddd", - 0 - }; - static u3j_harm _140_tri__rs_lth_a[] = {{".2", u3wet_lth}, {}}; - static c3_c* _140_tri__rs_lth_ha[] = { - "e7efa422def6b6dbd25b5f664462adb3895b8b45f9531877c9dbfe40a96612bf", - 0 - }; - static u3j_harm _140_tri__rs_lte_a[] = {{".2", u3wet_lte}, {}}; - static c3_c* _140_tri__rs_lte_ha[] = { - "b45e1ef16c47dc9b99865c7e75d4c2094c0e206ed538818a38da0adb7fbe2ce3", - 0 - }; - static u3j_harm _140_tri__rs_equ_a[] = {{".2", u3wet_equ}, {}}; - static c3_c* _140_tri__rs_equ_ha[] = { - "8c1178311ded837292c297380e48cf7e0bc4d83962dadcafda0c9ef9f20e39f2", - 0 - }; - static u3j_harm _140_tri__rs_gte_a[] = {{".2", u3wet_gte}, {}}; - static c3_c* _140_tri__rs_gte_ha[] = { - "50f5eb237b74e772eb6a3257441078461450cd4a25cf9bd97cb1a5e00f4ff4d2", - 0 - }; - static u3j_harm _140_tri__rs_gth_a[] = {{".2", u3wet_gth}, {}}; - static c3_c* _140_tri__rs_gth_ha[] = { - "505842ff486f0bb8fa63f04d2fd6f806dc760f9b4a12a3bf2d57da92f560785b", - 0 - }; -static u3j_core _140_tri__rs_d[] = - { { "add", 7, _140_tri__rs_add_a, 0, _140_tri__rs_add_ha }, - { "sub", 7, _140_tri__rs_sub_a, 0, _140_tri__rs_sub_ha }, - { "mul", 7, _140_tri__rs_mul_a, 0, _140_tri__rs_mul_ha }, - { "div", 7, _140_tri__rs_div_a, 0, _140_tri__rs_div_ha }, - { "sqt", 7, _140_tri__rs_sqt_a, 0, _140_tri__rs_sqt_ha }, - { "fma", 7, _140_tri__rs_fma_a, 0, _140_tri__rs_fma_ha }, - { "lth", 7, _140_tri__rs_lth_a, 0, _140_tri__rs_lth_ha }, - { "lte", 7, _140_tri__rs_lte_a, 0, _140_tri__rs_lte_ha }, - { "equ", 7, _140_tri__rs_equ_a, 0, _140_tri__rs_equ_ha }, - { "gte", 7, _140_tri__rs_gte_a, 0, _140_tri__rs_gte_ha }, - { "gth", 7, _140_tri__rs_gth_a, 0, _140_tri__rs_gth_ha }, - {} - }; - static c3_c* _140_tri__rs_ha[] = { - "6c7027c5de34540a4b1548039e5423fb44727079af054b7135a3e961ec8dede8", - 0 - }; - - static u3j_harm _140_tri__rq_add_a[] = {{".2", u3weq_add}, {}}; - static c3_c* _140_tri__rq_add_ha[] = { - "9c4c2a37550930605495401886d41fb9fbc2eba487e0ba845130fe88e4c52a01", - 0 - }; - static u3j_harm _140_tri__rq_sub_a[] = {{".2", u3weq_sub}, {}}; - static c3_c* _140_tri__rq_sub_ha[] = { - "f3b027090a1bb5af74234301facfbf64503b3e0599501ade12cb05aa158a79a3", - 0 - }; - static u3j_harm _140_tri__rq_mul_a[] = {{".2", u3weq_mul}, {}}; - static c3_c* _140_tri__rq_mul_ha[] = { - "15c03b1f3081514c4767d86297aaebf1d62af7f3437f30821f011b17ed769f3a", - 0 - }; - static u3j_harm _140_tri__rq_div_a[] = {{".2", u3weq_div}, {}}; - static c3_c* _140_tri__rq_div_ha[] = { - "094105c77e37e548ea1b8d49a132ab97d90a0ab5f329340400c381bcd44de347", - 0 - }; - static u3j_harm _140_tri__rq_sqt_a[] = {{".2", u3weq_sqt}, {}}; - static c3_c* _140_tri__rq_sqt_ha[] = { - "a031cd5b8e05f997323b0ca1ca9d2419401d7d2acc2da6fc6387fe57701b84b0", - 0 - }; - static u3j_harm _140_tri__rq_fma_a[] = {{".2", u3weq_fma}, {}}; - static c3_c* _140_tri__rq_fma_ha[] = { - "871664a9305808a671aacf1de0e83f8e951611033170d86370352afb363b79bc", - 0 - }; - static u3j_harm _140_tri__rq_lth_a[] = {{".2", u3weq_lth}, {}}; - static c3_c* _140_tri__rq_lth_ha[] = { - "b10822caa442c8e9f6b9eb52aac5796a42bed5ae0eef7fe49d4075b38bf78ddd", - 0 - }; - static u3j_harm _140_tri__rq_lte_a[] = {{".2", u3weq_lte}, {}}; - static c3_c* _140_tri__rq_lte_ha[] = { - "3316346be3e9464fbb5b0feff16cd2252086004229d08f8eaa320f9509d6a029", - 0 - }; - static u3j_harm _140_tri__rq_equ_a[] = {{".2", u3weq_equ}, {}}; - static c3_c* _140_tri__rq_equ_ha[] = { - "154be82a7b8ecf4571015d9ef6c0e90ffd8c3e8803441d9c2df5a4ea484ccf3b", - 0 - }; - static u3j_harm _140_tri__rq_gte_a[] = {{".2", u3weq_gte}, {}}; - static c3_c* _140_tri__rq_gte_ha[] = { - "edbe94f9cfefa89deef7f6c11f4ce8240fd93970dbd6130e632d0447452a612a", - 0 - }; - static u3j_harm _140_tri__rq_gth_a[] = {{".2", u3weq_gth}, {}}; - static c3_c* _140_tri__rq_gth_ha[] = { - "50e85936cfad61659ed1bfdab26fda2b2696571b9aa4b4c55dc5c0d919edc296", - 0 - }; -static u3j_core _140_tri__rq_d[] = - { { "add", 7, _140_tri__rq_add_a, 0, _140_tri__rq_add_ha }, - { "sub", 7, _140_tri__rq_sub_a, 0, _140_tri__rq_sub_ha }, - { "mul", 7, _140_tri__rq_mul_a, 0, _140_tri__rq_mul_ha }, - { "div", 7, _140_tri__rq_div_a, 0, _140_tri__rq_div_ha }, - { "sqt", 7, _140_tri__rq_sqt_a, 0, _140_tri__rq_sqt_ha }, - { "fma", 7, _140_tri__rq_fma_a, 0, _140_tri__rq_fma_ha }, - { "lth", 7, _140_tri__rq_lth_a, 0, _140_tri__rq_lth_ha }, - { "lte", 7, _140_tri__rq_lte_a, 0, _140_tri__rq_lte_ha }, - { "equ", 7, _140_tri__rq_equ_a, 0, _140_tri__rq_equ_ha }, - { "gte", 7, _140_tri__rq_gte_a, 0, _140_tri__rq_gte_ha }, - { "gth", 7, _140_tri__rq_gth_a, 0, _140_tri__rq_gth_ha }, - {} - }; -static c3_c* _140_tri__rq_ha[] = { - "b772cd5901a18dc91852fada74c2a1e4b1bbf4e7465451b0d8bdcc86d2288c22", - 0 -}; - - static u3j_harm _140_tri__rh_add_a[] = {{".2", u3wes_add}, {}}; - static c3_c* _140_tri__rh_add_ha[] = { - "7e2b600eced08d774800a6a3d82e18189db85010b870c26905ee38008d3d301e", - 0 - }; - static u3j_harm _140_tri__rh_sub_a[] = {{".2", u3wes_sub}, {}}; - static c3_c* _140_tri__rh_sub_ha[] = { - "827dfb41660cb4743a88d921b4185bd2000ee6f0708ec36ac8aba2e4e19c0875", - 0 - }; - static u3j_harm _140_tri__rh_mul_a[] = {{".2", u3wes_mul}, {}}; - static c3_c* _140_tri__rh_mul_ha[] = { - "ec2a010128aca0a6f74196f3de4fe7b6617fd810d3b19f7bf5878afb787e8b86", - 0 - }; - static u3j_harm _140_tri__rh_div_a[] = {{".2", u3wes_div}, {}}; - static c3_c* _140_tri__rh_div_ha[] = { - "067a3dafb0158bc2441729beb2c0934c6c6ccf0a9b5193db9c16f22b490b27c6", - 0 - }; - static u3j_harm _140_tri__rh_sqt_a[] = {{".2", u3wes_sqt}, {}}; - static c3_c* _140_tri__rh_sqt_ha[] = { - "3fdbba47626d91d41fcdf460ad38018c78b0233d7ec4d0fac406a8c5357a2384", - 0 - }; - static u3j_harm _140_tri__rh_fma_a[] = {{".2", u3wes_fma}, {}}; - static c3_c* _140_tri__rh_fma_ha[] = { - "ada2adf5a88ba61759219926aef950e72ae6926c6e10c30ecd0f9c99e79beca0", - 0 - }; - static u3j_harm _140_tri__rh_lth_a[] = {{".2", u3wes_lth}, {}}; - static c3_c* _140_tri__rh_lth_ha[] = { - "70c9bc0073d23371d8155c28795f5acbff1a9504a5a3881c8693aa7c1f3d35d4", - 0 - }; - static u3j_harm _140_tri__rh_lte_a[] = {{".2", u3wes_lte}, {}}; - static c3_c* _140_tri__rh_lte_ha[] = { - "6157e766050f9697c05b111ad2a582459a63a98b3b1ec70881f9ad943f951a0d", - 0 - }; - static u3j_harm _140_tri__rh_equ_a[] = {{".2", u3wes_equ}, {}}; - static c3_c* _140_tri__rh_equ_ha[] = { - "72664392e2a00137383aa5a55e947c5e95c7b3172f71a7238dc0d55050196884", - 0 - }; - static u3j_harm _140_tri__rh_gte_a[] = {{".2", u3wes_gte}, {}}; - static c3_c* _140_tri__rh_gte_ha[] = { - "145355b13712b9471031e755d0ab271907efdb9a287b1bacb2f1d0338d28dbf6", - 0 - }; - static u3j_harm _140_tri__rh_gth_a[] = {{".2", u3wes_gth}, {}}; - static c3_c* _140_tri__rh_gth_ha[] = { - "d53219ee10acdd291a1e2b34fa5f543c780a0301357e93cfebd466e556f9824e", - 0 - }; -static u3j_core _140_tri__rh_d[] = - { { "add", 7, _140_tri__rh_add_a, 0, _140_tri__rh_add_ha }, - { "sub", 7, _140_tri__rh_sub_a, 0, _140_tri__rh_sub_ha }, - { "mul", 7, _140_tri__rh_mul_a, 0, _140_tri__rh_mul_ha }, - { "div", 7, _140_tri__rh_div_a, 0, _140_tri__rh_div_ha }, - { "sqt", 7, _140_tri__rh_sqt_a, 0, _140_tri__rh_sqt_ha }, - { "fma", 7, _140_tri__rh_fma_a, 0, _140_tri__rh_fma_ha }, - { "lth", 7, _140_tri__rh_lth_a, 0, _140_tri__rh_lth_ha }, - { "lte", 7, _140_tri__rh_lte_a, 0, _140_tri__rh_lte_ha }, - { "equ", 7, _140_tri__rh_equ_a, 0, _140_tri__rh_equ_ha }, - { "gte", 7, _140_tri__rh_gte_a, 0, _140_tri__rh_gte_ha }, - { "gth", 7, _140_tri__rh_gth_a, 0, _140_tri__rh_gth_ha }, - {} - }; -static c3_c* _140_tri__rh_ha[] = { - "c38f8c0a7e2f1fccb52c459f60a30ec5d21635cafaf1aa120b70c1fa91cf7da5", - 0 -}; - - static u3j_harm _140_tri__og_raw_a[] = {{".2", u3weo_raw}, {}}; - static c3_c* _140_tri__og_raw_ha[] = { - "bbcbefc237dbebf6c141ba14fd9e0464a836127fd123d10da5f121e82d49ebdb", - 0 - }; -static u3j_core _140_tri__og_d[] = - { { "raw", 7, _140_tri__og_raw_a, 0, _140_tri__og_raw_ha }, - {} - }; -static c3_c* _140_tri__og_ha[] = { - "74b9ae67eeabbffcff969ac7fdc7f4f0f4f67af64931e969bcac50d084e15fc0", - 0 -}; - - static u3j_harm _140_tri__sha_sha1_a[] = {{".2", u3we_sha1}, {}}; - static c3_c* _140_tri__sha_sha1_ha[] = { - "75aababa0688619d9df36238269119302a64ad2e3c69c53bd0057fe6b1abaf0c", - 0 - }; -static u3j_core _140_tri__sha_d[] = - { { "sha1", 7, _140_tri__sha_sha1_a, 0, _140_tri__sha_sha1_ha }, - {} - }; -static c3_c* _140_tri__sha_ha[] = { - "3c22d2f8719cb626e8dfe1a4206bcbc14b678c1422c48322054b40f84416d557", - 0 -}; - -static u3j_harm _140_tri_shax_a[] = {{".2", u3we_shax}, {}}; -static c3_c* _140_tri_shax_ha[] = { - "0fc53de3ddc8b8f84a46136f1728fa3ed66a5113888d14907589d16bf5927ad8", - 0 -}; -static u3j_harm _140_tri_shay_a[] = {{".2", u3we_shay}, {}}; -static c3_c* _140_tri_shay_ha[] = { - "b6dbc72e15c2204f83f902619b7a60328f29c9d302ddb35c435111dea28c5470", - 0 -}; -static u3j_harm _140_tri_shas_a[] = {{".2", u3we_shas}, {}}; -static c3_c* _140_tri_shas_ha[] = { - "5230583767b7625b3496248ed03b6b94c1d4ee9b26342f9390bf999ec9b6cfdb", - 0 -}; -static u3j_harm _140_tri_shal_a[] = {{".2", u3we_shal}, {}}; -static c3_c* _140_tri_shal_ha[] = { - "3242912e29e3e1ed8d1a395cc860a82d78961b4278ed79bbdeb37cb5615bbf20", - 0 -}; - -static u3j_harm _140_ob_fein_a[] = {{".2", u3we_fein_ob}, {}}; -static c3_c* _140_ob_fein_ha[] = { - 0 -}; - -static u3j_harm _140_ob_fynd_a[] = {{".2", u3we_fynd_ob}, {}}; -static c3_c* _140_ob_fynd_ha[] = { - 0 -}; - - -static u3j_core _140_ob_d[] = { - { "fein", 7, _140_ob_fein_a, 0, _140_ob_fein_ha }, - { "fynd", 7, _140_ob_fynd_a, 0, _140_ob_fynd_ha }, - {} -}; -static c3_c* _140_ob_ha[] = { - "13ebfbdee69396bc1d980fc4dcbcdaa9cc3fb9c011e6cf188e71311a8bffc8e6", - 0 -}; -static u3j_hood _140_ob_ho[] = { - { "fein", 42 }, - { "fynd", 20 }, - {}, -}; - -static u3j_core _140_tri_d[] = -{ { "qua", 3, 0, _140_qua_d, _140_qua_ha, _140_qua_ho }, - { "cofl", 7, 0, _140_tri__cofl_d, _140_tri__cofl_ha }, - { "rd", 7, 0, _140_tri__rd_d, _140_tri__rd_ha }, - { "rs", 7, 0, _140_tri__rs_d, _140_tri__rs_ha }, - { "rq", 7, 0, _140_tri__rq_d, _140_tri__rq_ha }, - { "rh", 7, 0, _140_tri__rh_d, _140_tri__rh_ha }, - { "og", 7, 0, _140_tri__og_d, _140_tri__og_ha }, - - { "sha", 7, 0, _140_tri__sha_d, _140_tri__sha_ha }, - { "shax", 7, _140_tri_shax_a, 0, _140_tri_shax_ha }, - { "shay", 7, _140_tri_shay_a, 0, _140_tri_shay_ha }, - { "shas", 7, _140_tri_shas_a, 0, _140_tri_shas_ha }, - { "shal", 7, _140_tri_shal_a, 0, _140_tri_shal_ha }, - { "ob", 3, 0, _140_ob_d, _140_ob_ha, _140_ob_ho }, - {} -}; -static c3_c* _140_tri_ha[] = { - "e7339eb317038f64555717c5624e4571fe9654d471c1a78454129afdbcad9b53", - 0 -}; - -static u3j_hood _140_tri_ho[] = { - { "ob", 20 }, - { "yore", 5462 }, - { "year", 44975 }, - {}, -}; - -/* layer two -*/ -static u3j_harm _140_two_find_a[] = {{".2", u3wb_find, c3y}, {}}; -static c3_c* _140_two_find_ha[] = { - "cab18d537962b48d38fa061844f44c4635ee11c74fdf403aa80d3a6d1b15c177", - 0 -}; -static u3j_harm _140_two_flop_a[] = {{".2", u3wb_flop, c3y}, {}}; -static c3_c* _140_two_flop_ha[] = { - "73d496aac2ce6fd9475645c76f949ae0228f8f5ae6738529b08ed9aeb58255fe", - 0 -}; -static u3j_harm _140_two_lent_a[] = {{".2", u3wb_lent, c3y}, {}}; -static c3_c* _140_two_lent_ha[] = { - "1b98ab19350f6a6753ea4bd6daf4509a7c5681b7ac20c83204fe62846d46c2c3", - 0 -}; -static u3j_harm _140_two_levy_a[] = {{".2", u3wb_levy, c3y}, {}}; -static c3_c* _140_two_levy_ha[] = { - "634f1f506b17b4b50e6902f6e21b290ffc5305d1546075cba745c9e195fcc56b", - 0 -}; -static u3j_harm _140_two_lien_a[] = {{".2", u3wb_lien, c3y}, {}}; -static c3_c* _140_two_lien_ha[] = { - "2ffb70864f2be120b48869b27c614aadeed1390bde497d8940fe85b7861093ea", - 0 -}; -static u3j_harm _140_two_murn_a[] = {{".2", u3wb_murn, c3y}, {}}; -static c3_c* _140_two_murn_ha[] = { - "53257aaee131c2a892529c2ee75271160811814086456e8fdf249eebdf31b990", - 0 -}; -static u3j_harm _140_two_need_a[] = {{".2", u3wb_need, c3y}, {}}; -static c3_c* _140_two_need_ha[] = { - "bfdd39af478811efe816e69e8c9202d10c41f646c0d27f39c23e4fe1aec807dd", - 0 -}; -static u3j_harm _140_two_reap_a[] = {{".2", u3wb_reap, c3y}, {}}; -static c3_c* _140_two_reap_ha[] = { - "cf6bd10b97b418b67c645374712c768d9e7e9809c14ecf36a5c507e5fc4b4039", - 0 -}; -static u3j_harm _140_two_reel_a[] = {{".2", u3wb_reel, c3y}, {}}; -static c3_c* _140_two_reel_ha[] = { - "36108d1ba09617cf62e739e0ff2dcf9286f322ca0e8faa3521ef127e9840eebf", - 0 -}; -static u3j_harm _140_two_roll_a[] = {{".2", u3wb_roll, c3y}, {}}; -static c3_c* _140_two_roll_ha[] = { - "42abc6b3defd7c5eb8f6d14d57a14ba2a02d559907c03141c70a65e0803c01e5", - 0 -}; -static u3j_harm _140_two_skid_a[] = {{".2", u3wb_skid, c3y}, {}}; -static c3_c* _140_two_skid_ha[] = { - "832366432a85005f9a9849d6de9a9045c8f9a591050519b06aec6a9a1a54c360", - 0 -}; -static u3j_harm _140_two_skim_a[] = {{".2", u3wb_skim, c3y}, {}}; -static c3_c* _140_two_skim_ha[] = { - "ccbecb459b90d05ed6c1073859a58987bf9a479820b5550fa75f37b95f98a279", - 0 -}; -static u3j_harm _140_two_skip_a[] = {{".2", u3wb_skip, c3y}, {}}; -static c3_c* _140_two_skip_ha[] = { - "873e3e4d6b8f16212911aa982065dd0d36b1f6e8834828d5eb5d59afa9da2384", - 0 -}; -static u3j_harm _140_two_scag_a[] = {{".2", u3wb_scag, c3y}, {}}; -static c3_c* _140_two_scag_ha[] = { - "ddba868a28eb9655c9f6e06cfecb4ec9e9ff78277290579b9bb9b25339bb4ab9", - 0 -}; -static u3j_harm _140_two_slag_a[] = {{".2", u3wb_slag, c3y}, {}}; -static c3_c* _140_two_slag_ha[] = { - "811f7f67de7ab3f33b85198a69b1bf344498cd4922b0273d918a48b803b7877d", - 0 -}; -static u3j_harm _140_two_snag_a[] = {{".2", u3wb_snag, c3y}, {}}; -static c3_c* _140_two_snag_ha[] = { - "12a1d53541d4df9be60bda45f2dae6c6e6381f85edd4de062af23c6654860591", - 0 -}; -static u3j_harm _140_two_sort_a[] = {{".2", u3wb_sort, c3y}, {}}; -static c3_c* _140_two_sort_ha[] = { - "dc14f91fdedacd3b77bdf241d22555fe2bf0a231e9cab58b4ae779791e54c4e7", - 0 -}; -static u3j_harm _140_two_turn_a[] = {{".2", u3wb_turn, c3y}, {}}; -static c3_c* _140_two_turn_ha[] = { - "e13d9f52434ba810e182017f50a73d4d44eaa298a833231e90353f2a32ea6a78", - 0 -}; -static u3j_harm _140_two_weld_a[] = {{".2", u3wb_weld, c3y}, {}}; -static c3_c* _140_two_weld_ha[] = { - "d855628821d57392f575c5da000c7326eaaa19e08cda967a4772859269669df2", - 0 -}; -static u3j_harm _140_two_welp_a[] = {{".2", u3wb_welp, c3y}, {}}; -static c3_c* _140_two_welp_ha[] = { - "0bccae6625e62ce622c62f9e828a2a6469e2fbf42342d95e23c3b926f340140d", - 0 -}; -static u3j_harm _140_two_zing_a[] = {{".2", u3wb_zing, c3y}, {}}; -static c3_c* _140_two_zing_ha[] = { - "113bdea043e9e05cf4a63dac793caf34634bc58414d00250af87139405521b9d", - 0 -}; - -static u3j_harm _140_two_bex_a[] = {{".2", u3wc_bex, c3y}, {}}; -static c3_c* _140_two_bex_ha[] = { - "ee7a095ea21b6438ec19ab235e73877b96108f0a14cae02cecbd8a48c44e70e3", - 0 -}; -static u3j_harm _140_two_can_a[] = {{".2", u3wc_can, c3y}, {}}; -static c3_c* _140_two_can_ha[] = { - "c49ee52487369ba17a0105a61aa658df60e7a537e3e8737ab582644fe00b3938", - 0 -}; -static u3j_harm _140_two_cat_a[] = {{".2", u3wc_cat, c3y}, {}}; -static c3_c* _140_two_cat_ha[] = { - "467f007931110ac0755dcd44c5aaee65785a63b9042b8eea6a7838fa86cc5d8f", - 0 -}; -static u3j_harm _140_two_con_a[] = {{".2", u3wc_con, c3y}, {}}; -static c3_c* _140_two_con_ha[] = { - "d20f091bd4f28d37c1a78373df939f3d3a41e025129e9a2bb5e2b9a710358965", - 0 -}; -static u3j_harm _140_two_cut_a[] = {{".2", u3wc_cut, c3y}, {}}; -static c3_c* _140_two_cut_ha[] = { - "96bb4e9a259d6a1ede5461956b6a6fb73f05cb8e745c4803c2bae4ec0b7f0800", - 0 -}; -static u3j_harm _140_two_dis_a[] = {{".2", u3wc_dis, c3y}, {}}; -static c3_c* _140_two_dis_ha[] = { - "4b3987314451e20a45d2c7baff51d5d39be57e5970f23f86df4dd6569826ddff", - 0 -}; -static u3j_harm _140_two_dor_a[] = {{".2", u3wc_dor, c3y}, {}}; -static c3_c* _140_two_dor_ha[] = { - "277927a2e49e4d942e81ffc7740a71e68a7b732df886a9f84dc7d914be911879", - 0 -}; -static u3j_harm _140_two_end_a[] = {{".2", u3wc_end, c3y}, {}}; -static c3_c* _140_two_end_ha[] = { - "403c9f12f2481966ffb07842006713149960c67c6bcad8edd78cdf837bc0d854", - 0 -}; -static u3j_harm _140_two_gor_a[] = {{".2", u3wc_gor, c3y}, {}}; -static c3_c* _140_two_gor_ha[] = { - "8a1e3ed1de749ff2ff61d489466df618e4e0773498cb9693ec2e612e9733385c", - 0 -}; -static u3j_harm _140_two_lsh_a[] = {{".2", u3wc_lsh, c3y}, {}}; -static c3_c* _140_two_lsh_ha[] = { - "3db89b02bc596a57c7fb72a991c9fbf3197de501c56b3d1df26911b664c45f3d", - 0 -}; -static u3j_harm _140_two_met_a[] = {{".2", u3wc_met, c3y}, {}}; -static c3_c* _140_two_met_ha[] = { - "39dc9b1d10d9e93414b43f315f9a375596c99b4e8172d71d26759996bb7bab08", - 0 -}; -static u3j_harm _140_two_mix_a[] = {{".2", u3wc_mix, c3y}, {}}; -static c3_c* _140_two_mix_ha[] = { - "c84b3e487850d73dd5e4af18fb54b623028be3c45ae9b712718754233057fbc3", - 0 -}; -static u3j_harm _140_two_mor_a[] = {{".2", u3wc_mor, c3y}, {}}; -static c3_c* _140_two_mor_ha[] = { - "7c2d86e952606e571e5bcd988e70ded072c0eaa45d1fd958849d76360a763ddf", - 0 -}; -static u3j_harm _140_two_mug_a[] = {{".2", u3wc_mug, c3y}, {}}; -static c3_c* _140_two_mug_ha[] = { - "6da3f3aa1e951ef2d00e5131945d140fb52728558867237891e029160b7f5010", - 0 -}; -static u3j_harm _140_two_muk_a[] = {{".2", u3wc_muk, c3y}, {}}; -static c3_c* _140_two_muk_ha[] = { - "5a04a09bf7d22c8ef048ba2cc86be8f3a02066eab84cf4a45bbdf2bf534ff9f6", - 0 -}; -static u3j_harm _140_two_pow_a[] = {{".2", u3wc_pow, c3y}, {}}; -static c3_c* _140_two_pow_ha[] = { - "6cfcb9da6ad812eb72788e22e1370b4ab1b6ab64ab0628dfdff78ccead325406", - 0 -}; -static u3j_harm _140_two_rap_a[] = {{".2", u3wc_rap, c3y}, {}}; -static c3_c* _140_two_rap_ha[] = { - "f694f96bcbf97b339285d6c73ed5d33d112b911f7a991acefdef223ff01d8834", - 0 -}; -static u3j_harm _140_two_rep_a[] = {{".2", u3wc_rep, c3y}, {}}; -static c3_c* _140_two_rep_ha[] = { - "25aa2f1746e1cf2235117f22a3db152fa86e003d9bf9f9cfcda79e76e51f382f", - 0 -}; -static u3j_harm _140_two_rev_a[] = {{".2", u3wc_rev, c3y}, {}}; -static c3_c* _140_two_rev_ha[] = { - "15e20592ac1d9c0c80d99589e67cadb4ed7566be1d21844bbe7ef936e0db4524", - 0 -}; -static u3j_harm _140_two_rip_a[] = {{".2", u3wc_rip, c3y}, {}}; -static c3_c* _140_two_rip_ha[] = { - "16026c27499953978f69dbf81c1530b2dec8d5a2403c5561f7a5afcc180e129e", - 0 -}; -static u3j_harm _140_two_rsh_a[] = {{".2", u3wc_rsh, c3y}, {}}; -static c3_c* _140_two_rsh_ha[] = { - "55bd777f239a2a7c849e0c7a35bb967b79279c79bbd985f31ba272761f97928f", - 0 -}; -static u3j_harm _140_two_swp_a[] = {{".2", u3wc_swp, c3y}, {}}; -static c3_c* _140_two_swp_ha[] = { - "2c4583c36d73c9c2857052b893b87e1170a794e0edbbdba9d767ba7639e7c1ec", - 0 -}; -static u3j_harm _140_two_sqt_a[] = {{".2", u3wc_sqt, c3y}, {}}; -static c3_c* _140_two_sqt_ha[] = { - "fc28ff327ae69f55ccf257b69a1477b845552ef9e615e85718902c249bdeca6f", - 0 -}; -static u3j_harm _140_two_xeb_a[] = {{".2", u3wc_xeb, c3y}, {}}; -static c3_c* _140_two_xeb_ha[] = { - "41403aafe1e2ccb1a02edde96fe742085feffe028d02529eb2b13f925884a499", - 0 -}; - - static u3j_harm _140_two__in_apt_a[] = {{".2", u3wdi_apt}, {}}; - static c3_c* _140_two__in_apt_ha[] = { - "a40812fa255f13afdaf196bff38d2d9bfcb38f09c48ace9139a2701a555a0c9a", - 0 - }; - static u3j_harm _140_two__in_bif_a[] = {{".2", u3wdi_bif}, {}}; - static c3_c* _140_two__in_bif_ha[] = { - "edd0d727b9099e75c3e5b73b3025ad9737136eacedc2f8088b6edb02dbe06cb3", - 0 - }; - static u3j_harm _140_two__in_del_a[] = {{".2", u3wdi_del}, {}}; - static c3_c* _140_two__in_del_ha[] = { - "33a21e7aaf71105e2d48e1af61ff463fb8a0b7e04f8a8c30a6f6a2d1f967795f", - 0 - }; - static u3j_harm _140_two__in_dif_a[] = {{".2", u3wdi_dif}, {}}; - static c3_c* _140_two__in_dif_ha[] = { - "a488f0be5adbb1c04e2038a2315ac065591e7daadcafc1d47aea272979680468", - 0 - }; - static u3j_harm _140_two__in_gas_a[] = {{".2", u3wdi_gas}, {}}; - static c3_c* _140_two__in_gas_ha[] = { - "223a60a43a10f1f90a3b205ecfce8e17af1adfcf9dbf3cff9b8b1362656b1af1", - 0 - }; - static u3j_harm _140_two__in_has_a[] = {{".2", u3wdi_has}, {}}; - static c3_c* _140_two__in_has_ha[] = { - "a65e666e92176401040a883801e4f05bd650fe6c094a6c8d7f4afcaee9cf55ad", - 0 - }; - - static u3j_harm _140_two__in_int_a[] = {{".2", u3wdi_int}, {}}; - static c3_c* _140_two__in_int_ha[] = { - "a71b0e355fa02d18447c02922f69096f42043da451e8c79e7a9270460c3a44e6", - 0 - }; - - static u3j_harm _140_two__in_put_a[] = {{".2", u3wdi_put}, {}}; - static c3_c* _140_two__in_put_ha[] = { - "19b27267e18ef156d85d84d37e02692a17fec0b7a2a0fe4120a3ae02b841c8f4", - 0 - }; - static u3j_harm _140_two__in_rep_a[] = {{".2", u3wdi_rep}, {}}; - static c3_c* _140_two__in_rep_ha[] = { - "05bfb84a52ed8ccc330a96faca29a49afd28300960ac089d00dba32212b971a7", - 0 - }; - static u3j_harm _140_two__in_run_a[] = {{".2", u3wdi_run}, {}}; - static c3_c* _140_two__in_run_ha[] = { - "7f2061dbee19fa20925bd5a80cc41ed71e462e0f49ee6e845fd750c219734864", - 0 - }; - static u3j_harm _140_two__in_tap_a[] = {{".2", u3wdi_tap}, {}}; - static c3_c* _140_two__in_tap_ha[] = { - "7dde59e2bd7684e785ce9787bc394571bd1216d7a62398c703447fc951c6b352", - 0 - }; - static u3j_harm _140_two__in_wyt_a[] = {{".2", u3wdi_wyt}, {}}; - static c3_c* _140_two__in_wyt_ha[] = { - "fac9248ebd1defade9df695cd81f94355bebb271f85b164ff34658a5f45c71a0", - 0 - }; - static u3j_harm _140_two__in_uni_a[] = {{".2", u3wdi_uni}, {}}; - static c3_c* _140_two__in_uni_ha[] = { - "6bd72ef1fb12482a839f4435a2b163ace1b56036297a3cec6968be33d6863096", - 0 - }; - -static u3j_core _140_two__in_d[] = - { { "apt", 7, _140_two__in_apt_a, 0, _140_two__in_apt_ha }, - { "bif", 7, _140_two__in_bif_a, 0, _140_two__in_bif_ha }, - { "del", 7, _140_two__in_del_a, 0, _140_two__in_del_ha }, - { "dif", 7, _140_two__in_dif_a, 0, _140_two__in_dif_ha }, - { "gas", 7, _140_two__in_gas_a, 0, _140_two__in_gas_ha }, - { "has", 7, _140_two__in_has_a, 0, _140_two__in_has_ha }, - { "int", 7, _140_two__in_int_a, 0, _140_two__in_int_ha }, - { "put", 7, _140_two__in_put_a, 0, _140_two__in_put_ha }, - { "rep", 7, _140_two__in_rep_a, 0, _140_two__in_rep_ha }, - { "run", 7, _140_two__in_run_a, 0, _140_two__in_run_ha }, - { "tap", 7, _140_two__in_tap_a, 0, _140_two__in_tap_ha }, - { "uni", 7, _140_two__in_uni_a, 0, _140_two__in_uni_ha }, - { "wyt", 3, _140_two__in_wyt_a, 0, _140_two__in_wyt_ha }, - {} - }; -static c3_c* _140_two__in_ha[] = { - "8bbb90ce0a49d627194aa267f6cf1fd78df677111b553ce03119fea19f9d763c", - 0 -}; - static u3j_harm _140_two__by_all_a[] = {{".2", u3wdb_all, c3y}, {}}; - static c3_c* _140_two__by_all_ha[] = { - "c2e87d0047c14b4488d03aad98fa43080c736d86d2ff723a037aaf1843aa9285", - 0 - }; - static u3j_harm _140_two__by_any_a[] = {{".2", u3wdb_any, c3y}, {}}; - static c3_c* _140_two__by_any_ha[] = { - "96b95c942dcbc97f5291fa6f7342c3e19a87d69cc254965b0f75d95133a19301", - 0 - }; - static u3j_harm _140_two__by_apt_a[] = {{".2", u3wdb_apt, c3y}, {}}; - static c3_c* _140_two__by_apt_ha[] = { - "1f0a6f8b945b243520b77069060589938d9e651e34b24924db9528d02a98014f", - 0 - }; - static u3j_harm _140_two__by_bif_a[] = {{".2", u3wdb_bif, c3y}, {}}; - static c3_c* _140_two__by_bif_ha[] = { - "d377a032a3866e76f6f5217c7c0ed0519b768d8b1c5107e35f7dbf18d8f60880", - 0 - }; - static u3j_harm _140_two__by_del_a[] = {{".2", u3wdb_del, c3y}, {}}; - static c3_c* _140_two__by_del_ha[] = { - "09f78d6235d3fce8303c7bc663988349b7d4592abdacfb09b833d2f43629b6b6", - 0 - }; - static u3j_harm _140_two__by_dif_a[] = {{".2", u3wdb_dif, c3y}, {}}; - static c3_c* _140_two__by_dif_ha[] = { - "0334e6df6fd0bd5013b94a1b22c29e4c436da0a2d5573f1992faad1c8a059cc7", - 0 - }; - static u3j_harm _140_two__by_gas_a[] = {{".2", u3wdb_gas, c3y}, {}}; - static c3_c* _140_two__by_gas_ha[] = { - "43046602e0b9e568b09448cfe18527e2331f3393a2f32e485d9707a14c346698", - 0 - }; - static u3j_harm _140_two__by_get_a[] = {{".2", u3wdb_get, c3y}, {}}; - static c3_c* _140_two__by_get_ha[] = { - "4de4cea8fa98ef48e9faae10c90ba5bd77971670030ffb00483d0608af4c466f", - 0 - }; - static u3j_harm _140_two__by_has_a[] = {{".2", u3wdb_has, c3y}, {}}; - static c3_c* _140_two__by_has_ha[] = { - "04ecc67ab25961bee1b7c9dbcf42965d16f32474b9bbdd2b286983f998e3957a", - 0 - }; - - static u3j_harm _140_two__by_int_a[] = {{".2", u3wdb_int, c3y}, {}}; - static c3_c* _140_two__by_int_ha[] = { - "a2345429482c271a1668f3c0675a559452bb7b13cb7393c3acb7de44c603aef9", - 0 - }; - - static u3j_harm _140_two__by_jab_a[] = {{".2", u3wdb_jab, c3y}, {}}; - static c3_c* _140_two__by_jab_ha[] = { - "48930133d9b26e912dce54d1bc486cfe9dcb32bb3c2b1ad76143382799aec156", - 0 - }; - static u3j_harm _140_two__by_key_a[] = {{".2", u3wdb_key, c3y}, {}}; - static c3_c* _140_two__by_key_ha[] = { - "0096c77b93e9fe36b98d9f433eb73300f024283b93b3d73a4001afb9f9804d1b", - 0 - }; - static u3j_harm _140_two__by_put_a[] = {{".2", u3wdb_put, c3y}, {}}; - static c3_c* _140_two__by_put_ha[] = { - "b7307589fed604bfb92e8ad5ffad611c82d835baf02a86c6911b279930f4e8d7", - 0 - }; - static u3j_harm _140_two__by_rep_a[] = {{".2", u3wdb_rep, c3y}, {}}; - static c3_c* _140_two__by_rep_ha[] = { - "05bfb84a52ed8ccc330a96faca29a49afd28300960ac089d00dba32212b971a7", - 0 - }; - static u3j_harm _140_two__by_run_a[] = {{".2", u3wdb_run, c3y}, {}}; - static c3_c* _140_two__by_run_ha[] = { - "adea01e9036e0b40e4969814d4eed935d7d69a52e4a55de5520df2fa5204d8e7", - 0 - }; - static u3j_harm _140_two__by_tap_a[] = {{".2", u3wdb_tap, c3y}, {}}; - static c3_c* _140_two__by_tap_ha[] = { - "7dde59e2bd7684e785ce9787bc394571bd1216d7a62398c703447fc951c6b352", - 0 - }; - static u3j_harm _140_two__by_uni_a[] = {{".2", u3wdb_uni, c3y}, {}}; - static c3_c* _140_two__by_uni_ha[] = { - "f18bc4dac19abe14a6f56afc15d838b7394d48969156f4b37c3c84edd5d46752", - 0 - }; - static u3j_harm _140_two__by_urn_a[] = {{".2", u3wdb_urn, c3y}, {}}; - static c3_c* _140_two__by_urn_ha[] = { - "a409cf78e7f1c2ce8440115730f74367839b658cde2d6a1daa8af067b790eb83", - 0 - }; - static u3j_harm _140_two__by_wyt_a[] = {{".2", u3wdb_wyt, c3y}, {}}; - static c3_c* _140_two__by_wyt_ha[] = { - "fac9248ebd1defade9df695cd81f94355bebb271f85b164ff34658a5f45c71a0", - 0 - }; - -static u3j_core _140_two__by_d[] = - { { "all", 7, _140_two__by_all_a, 0, _140_two__by_all_ha }, - { "any", 7, _140_two__by_any_a, 0, _140_two__by_any_ha }, - { "apt", 7, _140_two__by_apt_a, 0, _140_two__by_apt_ha }, - { "bif", 7, _140_two__by_bif_a, 0, _140_two__by_bif_ha }, - { "del", 7, _140_two__by_del_a, 0, _140_two__by_del_ha }, - { "dif", 7, _140_two__by_dif_a, 0, _140_two__by_dif_ha }, - { "gas", 7, _140_two__by_gas_a, 0, _140_two__by_gas_ha }, - { "get", 7, _140_two__by_get_a, 0, _140_two__by_get_ha }, - { "has", 7, _140_two__by_has_a, 0, _140_two__by_has_ha }, - { "int", 7, _140_two__by_int_a, 0, _140_two__by_int_ha }, - { "jab", 7, _140_two__by_jab_a, 0, _140_two__by_jab_ha }, - { "key", 7, _140_two__by_key_a, 0, _140_two__by_key_ha }, - { "put", 7, _140_two__by_put_a, 0, _140_two__by_put_ha }, - { "rep", 7, _140_two__by_rep_a, 0, _140_two__by_rep_ha }, - { "run", 7, _140_two__by_run_a, 0, _140_two__by_run_ha }, - { "tap", 7, _140_two__by_tap_a, 0, _140_two__by_tap_ha }, - { "uni", 7, _140_two__by_uni_a, 0, _140_two__by_uni_ha }, - { "urn", 7, _140_two__by_urn_a, 0, _140_two__by_urn_ha }, - { "wyt", 3, _140_two__by_wyt_a, 0, _140_two__by_wyt_ha }, - {} - }; -static c3_c* _140_two__by_ha[] = { - "9c70e973de46335405a7ff932d4742743f54db579f2584758ef2b02afd4fbfe8", - 0 -}; - -static u3j_harm _140_two_cue_a[] = {{".2", u3we_cue}, {}}; -static c3_c* _140_two_cue_ha[] = { - "a52b584c5a92fc653e47f50c3389caf3427e13d20ddb8bd701a2d7bca12cb742", - 0 -}; -static u3j_harm _140_two_jam_a[] = {{".2", u3we_jam}, {}}; -static c3_c* _140_two_jam_ha[] = { - "61f86be74cb1fd5a1d7f531cc9588f8f34a972be8de487c93d25c8e026592ed2", - 0 -}; -static u3j_harm _140_two_mat_a[] = {{".2", u3we_mat}, {}}; -static c3_c* _140_two_mat_ha[] = { - "b5cd9fd1eded54fcb9bfd06af3c34460c1aa4cfc46f1ee9bd3f6476aa8fbb8c8", - 0 -}; -static u3j_harm _140_two_rub_a[] = {{".2", u3we_rub}, {}}; -static c3_c* _140_two_rub_ha[] = { - "87fcf40fb6fce8c3cb778373670d0682785ae650f785531db8ff69d431bc14c6", - 0 -}; - -static u3j_core _140_two_d[] = -{ { "tri", 3, 0, _140_tri_d, _140_tri_ha, _140_tri_ho }, - - { "find", 7, _140_two_find_a, 0, _140_two_find_ha }, - { "flop", 7, _140_two_flop_a, 0, _140_two_flop_ha }, - { "lent", 7, _140_two_lent_a, 0, _140_two_lent_ha }, - { "levy", 7, _140_two_levy_a, 0, _140_two_levy_ha }, - { "lien", 7, _140_two_lien_a, 0, _140_two_lien_ha }, - { "murn", 7, _140_two_murn_a, 0, _140_two_murn_ha }, - { "need", 7, _140_two_need_a, 0, _140_two_need_ha }, - { "reap", 7, _140_two_reap_a, 0, _140_two_reap_ha }, - { "reel", 7, _140_two_reel_a, 0, _140_two_reel_ha }, - { "roll", 7, _140_two_roll_a, 0, _140_two_roll_ha }, - { "skid", 7, _140_two_skid_a, 0, _140_two_skid_ha }, - { "skim", 7, _140_two_skim_a, 0, _140_two_skim_ha }, - { "skip", 7, _140_two_skip_a, 0, _140_two_skip_ha }, - { "scag", 7, _140_two_scag_a, 0, _140_two_scag_ha }, - { "slag", 7, _140_two_slag_a, 0, _140_two_slag_ha }, - { "snag", 7, _140_two_snag_a, 0, _140_two_snag_ha }, - { "sort", 7, _140_two_sort_a, 0, _140_two_sort_ha }, - { "turn", 7, _140_two_turn_a, 0, _140_two_turn_ha }, - { "weld", 7, _140_two_weld_a, 0, _140_two_weld_ha }, - { "welp", 7, _140_two_welp_a, 0, _140_two_welp_ha }, - { "zing", 7, _140_two_zing_a, 0, _140_two_zing_ha }, - - { "bex", 7, _140_two_bex_a, 0, _140_two_bex_ha }, - { "cat", 7, _140_two_cat_a, 0, _140_two_cat_ha }, - { "can", 7, _140_two_can_a, 0, _140_two_can_ha }, - { "con", 7, _140_two_con_a, 0, _140_two_con_ha }, - { "cue", 7, _140_two_cue_a, 0, _140_two_cue_ha }, - { "cut", 7, _140_two_cut_a, 0, _140_two_cut_ha }, - { "dis", 7, _140_two_dis_a, 0, _140_two_dis_ha }, - { "dor", 7, _140_two_dor_a, 0, _140_two_dor_ha }, - { "end", 7, _140_two_end_a, 0, _140_two_end_ha }, - { "gor", 7, _140_two_gor_a, 0, _140_two_gor_ha }, - { "jam", 7, _140_two_jam_a, 0, _140_two_jam_ha }, - { "lsh", 7, _140_two_lsh_a, 0, _140_two_lsh_ha }, - { "mat", 7, _140_two_mat_a, 0, _140_two_mat_ha }, - { "met", 7, _140_two_met_a, 0, _140_two_met_ha }, - { "mix", 7, _140_two_mix_a, 0, _140_two_mix_ha }, - { "mor", 7, _140_two_mor_a, 0, _140_two_mor_ha }, - { "mug", 7, _140_two_mug_a, 0, _140_two_mug_ha }, - { "muk", 59, _140_two_muk_a, 0, _140_two_muk_ha }, - { "rap", 7, _140_two_rap_a, 0, _140_two_rap_ha }, - { "rep", 7, _140_two_rep_a, 0, _140_two_rep_ha }, - { "rev", 7, _140_two_rev_a, 0, _140_two_rev_ha }, - { "rip", 7, _140_two_rip_a, 0, _140_two_rip_ha }, - { "rsh", 7, _140_two_rsh_a, 0, _140_two_rsh_ha }, - { "swp", 7, _140_two_swp_a, 0, _140_two_swp_ha }, - { "rub", 7, _140_two_rub_a, 0, _140_two_rub_ha }, - { "pow", 7, _140_two_pow_a, 0, _140_two_pow_ha }, - { "sqt", 7, _140_two_sqt_a, 0, _140_two_sqt_ha }, - { "xeb", 7, _140_two_xeb_a, 0, _140_two_xeb_ha }, - - { "by", 7, 0, _140_two__by_d, _140_two__by_ha }, - { "in", 7, 0, _140_two__in_d, _140_two__in_ha }, - {} -}; -static c3_c* _140_two_ha[] = { - "f693e1f5ff57ec741fe28a48a18252b3e12dead2bfe3bcd4ea8e904a36905c0b", - 0 -}; - -/* layer one -*/ -static u3j_harm _140_one_add_a[] = {{".2", u3wa_add, c3y}, {}}; -static c3_c* _140_one_add_ha[] = { - "46407e27fe5d7c20b3ba25c02657c227b37217ddab8501b2d3b70b818aca7a44", - 0 -}; -static u3j_harm _140_one_dec_a[] = {{".2", u3wa_dec, c3y}, {}}; -static c3_c* _140_one_dec_ha[] = { - "6345d28d34c62c4b4f9da98828574bc9060ff0869789968d9045d90faeb3580c", - 0 -}; -static u3j_harm _140_one_div_a[] = {{".2", u3wa_div, c3y}, {}}; -static c3_c* _140_one_div_ha[] = { - "e3292e76feb274b9314e7693827de11e96677629c556b3a6c72cc15ebad45113", - 0 -}; -static u3j_harm _140_one_dvr_a[] = {{".2", u3wc_dvr, c3y}, {}}; -static c3_c* _140_one_dvr_ha[] = { - "fc259f46d770f82767163544f3662dfd45b1484a7bcffad396c7420651f092a4", - 0 -}; -static u3j_harm _140_one_gte_a[] = {{".2", u3wa_gte, c3y}, {}}; -static c3_c* _140_one_gte_ha[] = { - "f3ff2c0fc1f386226183e8834cff87420a1206583f8710e1e75f0e34ed8df5fe", - 0 -}; -static u3j_harm _140_one_gth_a[] = {{".2", u3wa_gth, c3y}, {}}; -static c3_c* _140_one_gth_ha[] = { - "62692d64c8166c7d48bb2a00713064846da9629a1dd2d924c3b15cfd18a5912a", - 0 -}; -static u3j_harm _140_one_lte_a[] = {{".2", u3wa_lte, c3y}, {}}; -static c3_c* _140_one_lte_ha[] = { - "6ca61752aa27b453f28f20e12f652610d45695c3bd965190d5b4fa8b9daa518c", - 0 -}; -static u3j_harm _140_one_lth_a[] = {{".2", u3wa_lth, c3y}, {}}; -static c3_c* _140_one_lth_ha[] = { - "39260325faffbbf5bd88c4abb3efb09c5a7e1deb81a2126498d6c0f49474955e", - 0 -}; -static u3j_harm _140_one_mod_a[] = {{".2", u3wa_mod, c3y}, {}}; -static c3_c* _140_one_mod_ha[] = { - "374d2f3cd0ece33f680bd7103b99891d7dae03590f9eb9faac03a4a501f17038", - 0 -}; -static u3j_harm _140_one_mul_a[] = {{".2", u3wa_mul, c3y}, {}}; -static c3_c* _140_one_mul_ha[] = { - "51e45dbea29cf65a5c26ead095a20eb12ba078840652c88b9c1997820e670bc6", - 0 -}; -static u3j_harm _140_one_sub_a[] = {{".2", u3wa_sub, c3y}, {}}; -static c3_c* _140_one_sub_ha[] = { - "016695719ffe93c177e8a03afa5d29fc428ff596bb8962ace50f7706cd6e53a6", - 0 -}; - -static u3j_harm _140_one_cap_a[] = {{".2", u3wc_cap, c3y}, {}}; -static c3_c* _140_one_cap_ha[] = { - "407e764ee978c712b81c9c3452932e0f7d33faeda36dfe99aaf81d543db16254", - 0 -}; -static u3j_harm _140_one_peg_a[] = {{".2", u3wc_peg, c3y}, {}}; -static c3_c* _140_one_peg_ha[] = { - "8b608d2d2e2eccec3e2fc8cd2d92fd69504c72b26581bb9cbfa4ff51f997251f", - 0 -}; -static u3j_harm _140_one_mas_a[] = {{".2", u3wc_mas, c3y}, {}}; -static c3_c* _140_one_mas_ha[] = { - "1439dcd809f0819b09fb5fe7e83bc1292ca6fd33b5819d78e706d402c053b02a", - 0 -}; - -static u3j_core _140_one_d[] = -{ { "two", 3, 0, _140_two_d, _140_two_ha }, - - { "add", 7, _140_one_add_a, 0, _140_one_add_ha }, - { "dec", 7, _140_one_dec_a, 0, _140_one_dec_ha }, - { "div", 7, _140_one_div_a, 0, _140_one_div_ha }, - { "dvr", 7, _140_one_dvr_a, 0, _140_one_dvr_ha }, - { "gte", 7, _140_one_gte_a, 0, _140_one_gte_ha }, - { "gth", 7, _140_one_gth_a, 0, _140_one_gth_ha }, - { "lte", 7, _140_one_lte_a, 0, _140_one_lte_ha }, - { "lth", 7, _140_one_lth_a, 0, _140_one_lth_ha }, - { "mod", 7, _140_one_mod_a, 0, _140_one_mod_ha }, - { "mul", 7, _140_one_mul_a, 0, _140_one_mul_ha }, - { "sub", 7, _140_one_sub_a, 0, _140_one_sub_ha }, - - { "cap", 7, _140_one_cap_a, 0, _140_one_cap_ha }, - { "mas", 7, _140_one_mas_a, 0, _140_one_mas_ha }, - { "peg", 7, _140_one_peg_a, 0, _140_one_peg_ha }, - {} -}; -static c3_c* _140_one_ha[] = { - "2501f8dbe62384d144ab0f805501ed66325bd77a733eca0c80d1da673e4b16fb", - 0 -}; - -u3j_core _k140_d[] = -{ { "one", 3, 0, _140_one_d, _140_one_ha }, - {} -}; -static c3_c* _k140_ha[] = { - "9b82a903093c077afb3f0b9d4e95e1a9c9789d1ca605b57bbacf79857e3d5c52", - 0 -}; - - -// TODO: probably need different ha hashes - -static u3j_core _a50_two__by_d[] = - { { "apt", 7, _140_two__by_apt_a, 0, _140_two__by_apt_ha }, - { "del", 7, _140_two__by_del_a, 0, _140_two__by_del_ha }, - { "get", 7, _140_two__by_get_a, 0, _140_two__by_get_ha }, - { "has", 7, _140_two__by_has_a, 0, _140_two__by_has_ha }, - { "put", 7, _140_two__by_put_a, 0, _140_two__by_put_ha }, - {} - }; - -static u3j_core _a50_two__in_d[] = - { { "apt", 7, _140_two__in_apt_a, 0, _140_two__in_apt_ha }, - { "del", 7, _140_two__in_del_a, 0, _140_two__in_del_ha }, - { "put", 7, _140_two__in_put_a, 0, _140_two__in_put_ha }, - {} - }; - -u3j_core _a50_d[] = -{ { "add", 7, _140_one_add_a, 0, _140_one_add_ha }, - { "dec", 7, _140_one_dec_a, 0, _140_one_dec_ha }, - { "div", 7, _140_one_div_a, 0, _140_one_div_ha }, - { "dvr", 7, _140_one_dvr_a, 0, _140_one_dvr_ha }, - { "gte", 7, _140_one_gte_a, 0, _140_one_gte_ha }, - { "gth", 7, _140_one_gth_a, 0, _140_one_gth_ha }, - { "lte", 7, _140_one_lte_a, 0, _140_one_lte_ha }, - { "lth", 7, _140_one_lth_a, 0, _140_one_lth_ha }, - { "mod", 7, _140_one_mod_a, 0, _140_one_mod_ha }, - { "mul", 7, _140_one_mul_a, 0, _140_one_mul_ha }, - { "sub", 7, _140_one_sub_a, 0, _140_one_sub_ha }, - - { "bex", 7, _140_two_bex_a, 0, _140_two_bex_ha }, - { "cat", 7, _140_two_cat_a, 0, _140_two_cat_ha }, - { "can", 7, _140_two_can_a, 0, _140_two_can_ha }, - { "con", 7, _140_two_con_a, 0, _140_two_con_ha }, - { "cut", 7, _140_two_cut_a, 0, _140_two_cut_ha }, - { "dis", 7, _140_two_dis_a, 0, _140_two_dis_ha }, - { "dor", 7, _140_two_dor_a, 0, _140_two_dor_ha }, - { "end", 7, _140_two_end_a, 0, _140_two_end_ha }, - { "gor", 7, _140_two_gor_a, 0, _140_two_gor_ha }, - { "lsh", 7, _140_two_lsh_a, 0, _140_two_lsh_ha }, - { "met", 7, _140_two_met_a, 0, _140_two_met_ha }, - { "mix", 7, _140_two_mix_a, 0, _140_two_mix_ha }, - { "mor", 7, _140_two_mor_a, 0, _140_two_mor_ha }, - { "mug", 7, _140_two_mug_a, 0, _140_two_mug_ha }, - { "muk", 59, _140_two_muk_a, 0, _140_two_muk_ha }, // TODO: why 59? - { "rep", 7, _140_two_rep_a, 0, _140_two_rep_ha }, - { "rip", 7, _140_two_rip_a, 0, _140_two_rip_ha }, - { "rsh", 7, _140_two_rsh_a, 0, _140_two_rsh_ha }, - { "swp", 7, _140_two_swp_a, 0, _140_two_swp_ha }, - - { "flop", 7, _140_two_flop_a, 0, _140_two_flop_ha }, - { "lent", 7, _140_two_lent_a, 0, _140_two_lent_ha }, - { "levy", 7, _140_two_levy_a, 0, _140_two_levy_ha }, - { "reap", 7, _140_two_reap_a, 0, _140_two_reap_ha }, - { "slag", 7, _140_two_slag_a, 0, _140_two_slag_ha }, - { "snag", 7, _140_two_snag_a, 0, _140_two_snag_ha }, - { "turn", 7, _140_two_turn_a, 0, _140_two_turn_ha }, - { "welp", 7, _140_two_welp_a, 0, _140_two_welp_ha }, - - { "by", 7, 0, _a50_two__by_d, _140_two__by_ha }, - { "in", 7, 0, _a50_two__in_d, _140_two__in_ha }, - {} -}; - -static u3j_core _d[] = { - { "k140", 0, 0, _k140_d, _k140_ha, 0, (u3j_core*) 140, 0 }, - { "a50", 0, 0, _a50_d, _k140_ha, 0, (u3j_core*) c3__a50, 0 }, - {} -}; - -u3j_dash -u3j_Dash = { - _d, - 0, - 0 -}; diff --git a/pkg/urbit/noun/allocate.c b/pkg/urbit/noun/allocate.c deleted file mode 100644 index ddee5451b..000000000 --- a/pkg/urbit/noun/allocate.c +++ /dev/null @@ -1,2719 +0,0 @@ -/* g/a.c -** -*/ -#include "all.h" - -// declarations of inline functions -// -void -u3a_drop(const u3a_pile* pil_u); -void* -u3a_peek(const u3a_pile* pil_u); -void* -u3a_pop(const u3a_pile* pil_u); -void* -u3a_push(const u3a_pile* pil_u); -void -u3a_pile_sane(const u3a_pile* pil_u); -c3_o -u3a_pile_done(const u3a_pile* pil_u); - -/* _box_count(): adjust memory count. -*/ -#ifdef U3_CPU_DEBUG -static void -_box_count(c3_ws siz_ws) -{ - u3R->all.fre_w += siz_ws; - - { - c3_w end_w = u3a_heap(u3R); - c3_w all_w = (end_w - u3R->all.fre_w); - - if ( all_w > u3R->all.max_w ) { - u3R->all.max_w = all_w; - } - } -} -#else -static void -_box_count(c3_ws siz_ws) { } -#endif - -/* _box_slot(): select the right free list to search for a block. -*/ -static c3_w -_box_slot(c3_w siz_w) -{ - if ( siz_w < u3a_minimum ) { - return 0; - } - else { - c3_w i_w = 1; - - while ( 1 ) { - if ( i_w == u3a_fbox_no ) { - return (i_w - 1); - } - if ( siz_w < 16 ) { - return i_w; - } - siz_w = (siz_w + 1) >> 1; - i_w += 1; - } - } -} - -/* _box_make(): construct a box. -*/ -static u3a_box* -_box_make(void* box_v, c3_w siz_w, c3_w use_w) -{ - u3a_box* box_u = box_v; - c3_w* box_w = box_v; - - c3_assert(siz_w >= u3a_minimum); - - box_w[0] = siz_w; - box_w[siz_w - 1] = siz_w; - box_u->use_w = use_w; - -# ifdef U3_MEMORY_DEBUG - box_u->cod_w = u3_Code; - box_u->eus_w = 0; -# endif - - return box_u; -} - -/* _box_attach(): attach a box to the free list. -*/ -static void -_box_attach(u3a_box* box_u) -{ - c3_assert(box_u->siz_w >= (1 + c3_wiseof(u3a_fbox))); - c3_assert(0 != u3of(u3a_fbox, box_u)); - -#if 0 - // For debugging, fill the box with beef. - { - c3_w* box_w = (void *)box_u; - c3_w i_w; - - for ( i_w = c3_wiseof(u3a_box); (i_w + 1) < box_u->siz_w; i_w++ ) { - box_w[i_w] = 0xdeadbeef; - } - } -#endif - - _box_count(box_u->siz_w); - { - c3_w sel_w = _box_slot(box_u->siz_w); - u3p(u3a_fbox) fre_p = u3of(u3a_fbox, box_u); - u3p(u3a_fbox)* pfr_p = &u3R->all.fre_p[sel_w]; - u3p(u3a_fbox) nex_p = *pfr_p; - - u3to(u3a_fbox, fre_p)->pre_p = 0; - u3to(u3a_fbox, fre_p)->nex_p = nex_p; - if ( u3to(u3a_fbox, fre_p)->nex_p ) { - u3to(u3a_fbox, u3to(u3a_fbox, fre_p)->nex_p)->pre_p = fre_p; - } - (*pfr_p) = fre_p; - } -} - -/* _box_detach(): detach a box from the free list. -*/ -static void -_box_detach(u3a_box* box_u) -{ - u3p(u3a_fbox) fre_p = u3of(u3a_fbox, box_u); - u3p(u3a_fbox) pre_p = u3to(u3a_fbox, fre_p)->pre_p; - u3p(u3a_fbox) nex_p = u3to(u3a_fbox, fre_p)->nex_p; - - _box_count(-(box_u->siz_w)); - - if ( nex_p ) { - if ( u3to(u3a_fbox, nex_p)->pre_p != fre_p ) { - c3_assert(!"loom: corrupt"); - } - u3to(u3a_fbox, nex_p)->pre_p = pre_p; - } - if ( pre_p ) { - if( u3to(u3a_fbox, pre_p)->nex_p != fre_p ) { - c3_assert(!"loom: corrupt"); - } - u3to(u3a_fbox, pre_p)->nex_p = nex_p; - } - else { - c3_w sel_w = _box_slot(box_u->siz_w); - - if ( fre_p != u3R->all.fre_p[sel_w] ) { - c3_assert(!"loom: corrupt"); - } - u3R->all.fre_p[sel_w] = nex_p; - } -} - -/* _box_free(): free and coalesce. -*/ -static void -_box_free(u3a_box* box_u) -{ - c3_w* box_w = (c3_w *)(void *)box_u; - - c3_assert(box_u->use_w != 0); - box_u->use_w -= 1; - if ( 0 != box_u->use_w ) { - return; - } - -#if 0 - /* Clear the contents of the block, for debugging. - */ - { - c3_w i_w; - - for ( i_w = c3_wiseof(u3a_box); (i_w + 1) < box_u->siz_w; i_w++ ) { - box_w[i_w] = 0xdeadbeef; - } - } -#endif - - if ( c3y == u3a_is_north(u3R) ) { - /* Try to coalesce with the block below. - */ - if ( box_w != u3a_into(u3R->rut_p) ) { - c3_w laz_w = *(box_w - 1); - u3a_box* pox_u = (u3a_box*)(void *)(box_w - laz_w); - - if ( 0 == pox_u->use_w ) { - _box_detach(pox_u); - _box_make(pox_u, (laz_w + box_u->siz_w), 0); - - box_u = pox_u; - box_w = (c3_w*)(void *)pox_u; - } - } - - /* Try to coalesce with the block above, or the wilderness. - */ - if ( (box_w + box_u->siz_w) == u3a_into(u3R->hat_p) ) { - u3R->hat_p = u3a_outa(box_w); - } - else { - u3a_box* nox_u = (u3a_box*)(void *)(box_w + box_u->siz_w); - - if ( 0 == nox_u->use_w ) { - _box_detach(nox_u); - _box_make(box_u, (box_u->siz_w + nox_u->siz_w), 0); - } - _box_attach(box_u); - } - } - else { - /* Try to coalesce with the block above. - */ - if ( (box_w + box_u->siz_w) != u3a_into(u3R->rut_p) ) { - u3a_box* nox_u = (u3a_box*)(void *)(box_w + box_u->siz_w); - - if ( 0 == nox_u->use_w ) { - _box_detach(nox_u); - _box_make(box_u, (box_u->siz_w + nox_u->siz_w), 0); - } - } - - /* Try to coalesce with the block below, or with the wilderness. - */ - if ( box_w == u3a_into(u3R->hat_p) ) { - u3R->hat_p = u3a_outa(box_w + box_u->siz_w); - } - else { - c3_w laz_w = *(box_w - 1); - u3a_box* pox_u = (u3a_box*)(void *)(box_w - laz_w); - - if ( 0 == pox_u->use_w ) { - _box_detach(pox_u); - _box_make(pox_u, (laz_w + box_u->siz_w), 0); - box_u = pox_u; - } - _box_attach(box_u); - } - } -} - -/* _me_align_pad(): pad to first point after pos_p aligned at (ald_w, alp_w). -*/ -static __inline__ c3_w -_me_align_pad(u3_post pos_p, c3_w ald_w, c3_w alp_w) -{ - c3_w adj_w = (ald_w - (alp_w + 1)); - c3_p off_p = (pos_p + adj_w); - c3_p orp_p = off_p &~ (ald_w - 1); - c3_p fin_p = orp_p + alp_w; - c3_w pad_w = (fin_p - pos_p); - - return pad_w; -} - -/* _me_align_dap(): pad to last point before pos_p aligned at (ald_w, alp_w). -*/ -static __inline__ c3_w -_me_align_dap(u3_post pos_p, c3_w ald_w, c3_w alp_w) -{ - c3_w adj_w = alp_w; - c3_p off_p = (pos_p - adj_w); - c3_p orp_p = (off_p &~ (ald_w - 1)); - c3_p fin_p = orp_p + alp_w; - c3_w pad_w = (pos_p - fin_p); - - return pad_w; -} - -/* _ca_box_make_hat(): in u3R, allocate directly on the hat. -*/ -static u3a_box* -_ca_box_make_hat(c3_w len_w, c3_w ald_w, c3_w alp_w, c3_w use_w) -{ - c3_w pad_w, siz_w; - u3_post all_p; - - if ( c3y == u3a_is_north(u3R) ) { - all_p = u3R->hat_p; - pad_w = _me_align_pad(all_p, ald_w, alp_w); - siz_w = (len_w + pad_w); - - // hand-inlined: siz_w >= u3a_open(u3R) - // - if ( (siz_w >= (u3R->cap_p - u3R->hat_p)) ) { - return 0; - } - u3R->hat_p = (all_p + siz_w); - } - else { - all_p = (u3R->hat_p - len_w); - pad_w = _me_align_dap(all_p, ald_w, alp_w); - siz_w = (len_w + pad_w); - all_p -= pad_w; - - // hand-inlined: siz_w >= u3a_open(u3R) - // - if ( siz_w >= (u3R->hat_p - u3R->cap_p) ) { - return 0; - } - u3R->hat_p = all_p; - } - return _box_make(u3a_into(all_p), siz_w, use_w); -} - -#if 0 -/* _me_road_all_hat(): in u3R, allocate directly on the hat. -*/ -static u3a_box* -_ca_box_make_hat(c3_w len_w, c3_w alm_w, c3_w use_w) -{ - return _box_make(_me_road_all_hat(len_w), len_w, use_w); -} -#endif - -#if 0 // not yet used -/* _me_road_all_cap(): in u3R, allocate directly on the cap. -*/ -static c3_w* -_me_road_all_cap(c3_w len_w) -{ - if ( len_w > u3a_open(u3R) ) { - u3m_bail(c3__meme); return 0; - } - - if ( c3y == u3a_is_north(u3R) ) { - u3R->cap_p -= len_w; - return u3a_into(u3R->cap_p); - } - else { - u3_post all_p; - - all_p = u3R->cap_p; - u3R->cap_p += len_w; - return u3a_into(all_p); - } -} -#endif - -#if 0 -/* u3a_sane(): check allocator sanity. -*/ -void -u3a_sane(void) -{ - c3_w i_w; - - for ( i_w = 0; i_w < u3a_fbox_no; i_w++ ) { - u3a_fbox* fre_u = u3R->all.fre_u[i_w]; - - while ( fre_u ) { - if ( fre_u == u3R->all.fre_u[i_w] ) { - c3_assert(fre_u->pre_u == 0); - } - else { - c3_assert(fre_u->pre_u != 0); - c3_assert(fre_u->pre_u->nex_u == fre_u); - if ( fre_u->nex_u != 0 ) { - c3_assert(fre_u->nex_u->pre_u == fre_u); - } - } - fre_u = fre_u->nex_u; - } - } -} -#endif - -/* u3a_reflux(): dump 1K cells from the cell list into regular memory. -*/ -void -u3a_reflux(void) -{ - c3_w i_w; - - for ( i_w = 0; u3R->all.cel_p && (i_w < 1024); i_w++ ) { - u3_post cel_p = u3R->all.cel_p; - u3a_box* box_u = &(u3to(u3a_fbox, cel_p)->box_u); - - u3R->all.cel_p = u3to(u3a_fbox, cel_p)->nex_p; - - // otherwise _box_free() will double-count it - // - _box_count(-(u3a_minimum)); - _box_free(box_u); - - } -} - -/* _ca_reclaim_half(): reclaim from memoization cache. -*/ -static void -_ca_reclaim_half(void) -{ - // XX u3l_log avoid here, as it can - // cause problems when handling errors - - if ( (0 == u3R->cax.har_p) || - (0 == u3to(u3h_root, u3R->cax.har_p)->use_w) ) - { - fprintf(stderr, "allocate: reclaim: memo cache: empty\r\n"); - u3m_bail(c3__meme); - } - -#if 1 - fprintf(stderr, "allocate: reclaim: half of %d entries\r\n", - u3to(u3h_root, u3R->cax.har_p)->use_w); - - u3h_trim_to(u3R->cax.har_p, u3to(u3h_root, u3R->cax.har_p)->use_w / 2); -#else - /* brutal and guaranteed effective - */ - u3h_free(u3R->cax.har_p); - u3R->cax.har_p = u3h_new(); -#endif -} - -/* _ca_willoc(): u3a_walloc() internals. -*/ -static void* -_ca_willoc(c3_w len_w, c3_w ald_w, c3_w alp_w) -{ - c3_w siz_w = c3_max(u3a_minimum, u3a_boxed(len_w)); - c3_w sel_w = _box_slot(siz_w); - - alp_w = (alp_w + c3_wiseof(u3a_box)) % ald_w; - - // XX: this logic is totally bizarre, but preserve it. - // - if ( (sel_w != 0) && (sel_w != u3a_fbox_no - 1) ) { - sel_w += 1; - } - - // u3l_log("walloc %d: *pfr_p %x\n", len_w, u3R->all.fre_p[sel_w]); - while ( 1 ) { - u3p(u3a_fbox) *pfr_p = &u3R->all.fre_p[sel_w]; - - while ( 1 ) { - if ( 0 == *pfr_p ) { - if ( sel_w < (u3a_fbox_no - 1) ) { - sel_w += 1; - break; - } - else { - // nothing in top free list; chip away at the hat - // - u3a_box* box_u; - - // memory nearly empty; reclaim; should not be needed - // - // if ( (u3a_open(u3R) + u3R->all.fre_w) < 65536 ) { _ca_reclaim_half(); } - box_u = _ca_box_make_hat(siz_w, ald_w, alp_w, 1); - - /* Flush a bunch of cell cache, then try again. - */ - if ( 0 == box_u ) { - if ( u3R->all.cel_p ) { - u3a_reflux(); - - return _ca_willoc(len_w, ald_w, alp_w); - } - else { - _ca_reclaim_half(); - return _ca_willoc(len_w, ald_w, alp_w); - } - } - else return u3a_boxto(box_u); - } - } - else { - c3_w pad_w = _me_align_pad(*pfr_p, ald_w, alp_w); - - if ( 1 == ald_w ) c3_assert(0 == pad_w); - - if ( (siz_w + pad_w) > u3to(u3a_fbox, *pfr_p)->box_u.siz_w ) { - /* This free block is too small. Continue searching. - */ - pfr_p = &(u3to(u3a_fbox, *pfr_p)->nex_p); - continue; - } - else { - u3a_box* box_u = &(u3to(u3a_fbox, *pfr_p)->box_u); - - /* We have found a free block of adequate size. Remove it - ** from the free list. - */ - siz_w += pad_w; - _box_count(-(box_u->siz_w)); - { - if ( (0 != u3to(u3a_fbox, *pfr_p)->pre_p) && - (u3to(u3a_fbox, u3to(u3a_fbox, *pfr_p)->pre_p)->nex_p - != (*pfr_p)) ) - { - c3_assert(!"loom: corrupt"); - } - - if( (0 != u3to(u3a_fbox, *pfr_p)->nex_p) && - (u3to(u3a_fbox, u3to(u3a_fbox, *pfr_p)->nex_p)->pre_p - != (*pfr_p)) ) - { - c3_assert(!"loom: corrupt"); - } - - if ( 0 != u3to(u3a_fbox, *pfr_p)->nex_p ) { - u3to(u3a_fbox, u3to(u3a_fbox, *pfr_p)->nex_p)->pre_p = - u3to(u3a_fbox, *pfr_p)->pre_p; - } - *pfr_p = u3to(u3a_fbox, *pfr_p)->nex_p; - } - - /* If we can chop off another block, do it. - */ - if ( (siz_w + u3a_minimum) <= box_u->siz_w ) { - /* Split the block. - */ - c3_w* box_w = ((c3_w *)(void *)box_u); - c3_w* end_w = box_w + siz_w; - c3_w lef_w = (box_u->siz_w - siz_w); - - _box_attach(_box_make(end_w, lef_w, 0)); - return u3a_boxto(_box_make(box_w, siz_w, 1)); - } - else { - c3_assert(0 == box_u->use_w); - box_u->use_w = 1; - -#ifdef U3_MEMORY_DEBUG - box_u->cod_w = u3_Code; -#endif - return u3a_boxto(box_u); - } - } - } - } - } -} - -/* _ca_walloc(): u3a_walloc() internals. -*/ -static void* -_ca_walloc(c3_w len_w, c3_w ald_w, c3_w alp_w) -{ - void* ptr_v; - - while ( 1 ) { - ptr_v = _ca_willoc(len_w, ald_w, alp_w); - if ( 0 != ptr_v ) { - break; - } - _ca_reclaim_half(); - } - return ptr_v; -} - -/* u3a_walloc(): allocate storage words on hat heap. -*/ -void* -u3a_walloc(c3_w len_w) -{ - void* ptr_v; - - ptr_v = _ca_walloc(len_w, 1, 0); - -#if 0 - if ( (703 == u3_Code) && - u3a_botox(ptr_v) == (u3a_box*)(void *)0x200dfe3e4 ) { - static int xuc_i; - - u3l_log("xuc_i %d\r\n", xuc_i); - if ( 1 == xuc_i ) { - u3a_box* box_u = u3a_botox(ptr_v); - - box_u->cod_w = 999; - } - xuc_i++; - } -#endif - return ptr_v; -} - -/* u3a_wealloc(): realloc in words. -*/ -void* -u3a_wealloc(void* lag_v, c3_w len_w) -{ - if ( !lag_v ) { - return u3a_malloc(len_w); - } - else { - u3a_box* box_u = u3a_botox(lag_v); - c3_w* old_w = lag_v; - c3_w tiz_w = c3_min(box_u->siz_w, len_w); - { - c3_w* new_w = u3a_walloc(len_w); - c3_w i_w; - - for ( i_w = 0; i_w < tiz_w; i_w++ ) { - new_w[i_w] = old_w[i_w]; - } - u3a_wfree(lag_v); - return new_w; - } - } -} - -/* u3a_pile_prep(): initialize stack control. -*/ -void -u3a_pile_prep(u3a_pile* pil_u, c3_w len_w) -{ - // frame size, in words - // - c3_w wor_w = (len_w + 3) >> 2; - c3_o nor_o = u3a_is_north(u3R); - - pil_u->mov_ws = (c3y == nor_o) ? -wor_w : wor_w; - pil_u->off_ws = (c3y == nor_o) ? 0 : -wor_w; - pil_u->top_p = u3R->cap_p; - -#ifdef U3_MEMORY_DEBUG - pil_u->rod_u = u3R; -#endif -} - -/* u3a_wfree(): free storage. -*/ -void -u3a_wfree(void* tox_v) -{ - _box_free(u3a_botox(tox_v)); -} - -/* u3a_wtrim(): trim storage. -*/ -void -u3a_wtrim(void* tox_v, c3_w old_w, c3_w len_w) -{ - c3_w* nov_w = tox_v; - - if ( (old_w > len_w) - && ((old_w - len_w) >= u3a_minimum) ) - { - c3_w* box_w = (void *)u3a_botox(nov_w); - c3_w* end_w = (nov_w + len_w + 1); - c3_w asz_w = (end_w - box_w); - c3_w bsz_w = box_w[0] - asz_w; - - _box_attach(_box_make(end_w, bsz_w, 0)); - - box_w[0] = asz_w; - box_w[asz_w - 1] = asz_w; - } -} - -/* u3a_calloc(): allocate and zero-initialize array -*/ -void* -u3a_calloc(size_t num_i, size_t len_i) -{ - size_t byt_i = num_i * len_i; - c3_w* out_w; - - c3_assert(byt_i / len_i == num_i); - out_w = u3a_malloc(byt_i); - memset(out_w, 0, byt_i); - - return out_w; -} - -/* u3a_malloc(): aligned storage measured in bytes. -*/ -void* -u3a_malloc(size_t len_i) -{ - c3_w len_w = (c3_w)((len_i + 3) >> 2); - c3_w* ptr_w = _ca_walloc(len_w + 1, 4, 3); - u3_post ptr_p = u3a_outa(ptr_w); - c3_w pad_w = _me_align_pad(ptr_p, 4, 3); - c3_w* out_w = u3a_into(ptr_p + pad_w + 1); - -#if 0 - if ( u3a_botox(out_w) == (u3a_box*)(void *)0x3bdd1c80) { - static int xuc_i = 0; - - u3l_log("xuc_i %d\r\n", xuc_i); - // if ( 1 == xuc_i ) { abort(); } - xuc_i++; - } -#endif - out_w[-1] = pad_w; - - return out_w; -} - -/* u3a_malloc_ssl(): openssl-shaped malloc -*/ -void* -u3a_malloc_ssl(size_t len_i -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - , const char* file, int line -#endif - ) -{ - return u3a_malloc(len_i); -} - -/* u3a_cellblock(): allocate a block of cells on the hat. -*/ -static c3_o -u3a_cellblock(c3_w num_w) -{ - u3p(u3a_fbox) fre_p; - c3_w i_w; - - if ( c3y == u3a_is_north(u3R) ) { - if ( u3R->cap_p <= (u3R->hat_p + (num_w * u3a_minimum)) ) { - return c3n; - } - else { - u3_post hat_p = u3R->hat_p; - u3_post cel_p = u3R->all.cel_p; - - for ( i_w = 0; i_w < num_w; i_w++) { - u3_post all_p = hat_p; - void* box_v = u3a_into(all_p); - u3a_box* box_u = box_v; - c3_w* box_w = box_v; - - // hand inline of _box_make(u3a_into(all_p), u3a_minimum, 1) - { - box_w[0] = u3a_minimum; - box_w[u3a_minimum - 1] = u3a_minimum; - box_u->use_w = 1; -#ifdef U3_MEMORY_DEBUG - box_u->cod_w = 0; - box_u->eus_w = 0; -#endif - } - hat_p += u3a_minimum; - - fre_p = u3of(u3a_fbox, box_u); - u3to(u3a_fbox, fre_p)->nex_p = cel_p; - cel_p = fre_p; - } - u3R->hat_p = hat_p; - u3R->all.cel_p = cel_p; - } - } - else { - if ( (u3R->cap_p + (num_w * u3a_minimum)) >= u3R->hat_p ) { - return c3n; - } - else { - u3_post hat_p = u3R->hat_p; - u3_post cel_p = u3R->all.cel_p; - - for ( i_w = 0; i_w < num_w; i_w++ ) { - u3_post all_p = (hat_p -= u3a_minimum); - void* box_v = u3a_into(all_p); - u3a_box* box_u = box_v; - c3_w* box_w = box_v; - - // hand inline of _box_make(u3a_into(all_p), u3a_minimum, 1); - { - box_w[0] = u3a_minimum; - box_w[u3a_minimum - 1] = u3a_minimum; - box_u->use_w = 1; -# ifdef U3_MEMORY_DEBUG - box_u->cod_w = 0; - box_u->eus_w = 0; -# endif - } - fre_p = u3of(u3a_fbox, box_u); - u3to(u3a_fbox, fre_p)->nex_p = cel_p; - cel_p = fre_p; - } - u3R->hat_p = hat_p; - u3R->all.cel_p = cel_p; - } - } - _box_count(num_w * u3a_minimum); - return c3y; -} - -/* u3a_celloc(): allocate a cell. -*/ -c3_w* -u3a_celloc(void) -{ -#ifdef U3_CPU_DEBUG - u3R->pro.cel_d++; -#endif - -#ifdef U3_MEMORY_DEBUG - if ( u3C.wag_w & u3o_debug_ram ) { - return u3a_walloc(c3_wiseof(u3a_cell)); - } -#endif - - u3p(u3a_fbox) cel_p; - - if ( !(cel_p = u3R->all.cel_p) ) { - if ( u3R == &(u3H->rod_u) ) { - // no cell allocator on home road - // - return u3a_walloc(c3_wiseof(u3a_cell)); - } - else { - if ( c3n == u3a_cellblock(4096) ) { - return u3a_walloc(c3_wiseof(u3a_cell)); - } - cel_p = u3R->all.cel_p; - } - } - - { - u3a_box* box_u = &(u3to(u3a_fbox, cel_p)->box_u); - - - box_u->use_w = 1; - u3R->all.cel_p = u3to(u3a_fbox, cel_p)->nex_p; - - _box_count(-(u3a_minimum)); - - return u3a_boxto(box_u); - } -} - -/* u3a_cfree(): free a cell. -*/ -void -u3a_cfree(c3_w* cel_w) -{ -#ifdef U3_MEMORY_DEBUG - if ( u3C.wag_w & u3o_debug_ram ) { - return u3a_wfree(cel_w); - } -#endif - - if ( u3R == &(u3H->rod_u) ) { - return u3a_wfree(cel_w); - } - else { - u3a_box* box_u = u3a_botox(cel_w); - u3p(u3a_fbox) fre_p = u3of(u3a_fbox, box_u); - - _box_count(u3a_minimum); - - u3to(u3a_fbox, fre_p)->nex_p = u3R->all.cel_p; - u3R->all.cel_p = fre_p; - } -} - -/* u3a_realloc(): aligned realloc in bytes. -*/ -void* -u3a_realloc(void* lag_v, size_t len_i) -{ - if ( !lag_v ) { - return u3a_malloc(len_i); - } - else { - c3_w len_w = (c3_w)((len_i + 3) >> 2); - c3_w* lag_w = lag_v; - c3_w pad_w = lag_w[-1]; - c3_w* org_w = lag_w - (pad_w + 1); - u3a_box* box_u = u3a_botox((void *)org_w); - c3_w* old_w = lag_v; - c3_w tiz_w = c3_min(box_u->siz_w, len_w); - { - c3_w* new_w = u3a_malloc(len_i); - c3_w i_w; - - for ( i_w = 0; i_w < tiz_w; i_w++ ) { - new_w[i_w] = old_w[i_w]; - } - u3a_wfree(org_w); - return new_w; - } - } - c3_w len_w = (c3_w)len_i; - - return u3a_wealloc(lag_v, (len_w + 3) >> 2); -} - -/* u3a_realloc2(): gmp-shaped realloc. -*/ -void* -u3a_realloc2(void* lag_v, size_t old_i, size_t new_i) -{ - return u3a_realloc(lag_v, new_i); -} - -/* u3a_realloc_ssl(): openssl-shaped realloc. -*/ -void* -u3a_realloc_ssl(void* lag_v, size_t len_i -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - , const char* file, int line -#endif - ) -{ - return u3a_realloc(lag_v, len_i); -} - -/* u3a_free(): free for aligned malloc. -*/ -void -u3a_free(void* tox_v) -{ - if (NULL == tox_v) - return; - - c3_w* tox_w = tox_v; - c3_w pad_w = tox_w[-1]; - c3_w* org_w = tox_w - (pad_w + 1); - - // u3l_log("free %p %p\r\n", org_w, tox_w); - u3a_wfree(org_w); -} - -/* u3a_free2(): gmp-shaped free. -*/ -void -u3a_free2(void* tox_v, size_t siz_i) -{ - return u3a_free(tox_v); -} - -/* u3a_free_ssl(): openssl-shaped free. -*/ -void -u3a_free_ssl(void* tox_v -#if OPENSSL_VERSION_NUMBER >= 0x10100000L - , const char* file, int line -#endif - ) -{ - return u3a_free(tox_v); -} - -/* _me_wash_north(): clean up mug slots after copy. -*/ -static void _me_wash_north(u3_noun dog); -static void -_me_wash_north_in(u3_noun som) -{ - if ( _(u3a_is_cat(som)) ) return; - if ( !_(u3a_north_is_junior(u3R, som)) ) return; - - _me_wash_north(som); -} -static void -_me_wash_north(u3_noun dog) -{ - c3_assert(c3y == u3a_is_dog(dog)); - // c3_assert(c3y == u3a_north_is_junior(u3R, dog)); - { - u3a_noun* dog_u = u3a_to_ptr(dog); - - if ( dog_u->mug_w == 0 ) return; - - dog_u->mug_w = 0; // power wash - // if ( dog_u->mug_w >> 31 ) { dog_u->mug_w = 0; } - - if ( _(u3a_is_pom(dog)) ) { - u3a_cell* god_u = (u3a_cell *)(void *)dog_u; - - _me_wash_north_in(god_u->hed); - _me_wash_north_in(god_u->tel); - } - } -} - -/* _me_wash_south(): clean up mug slots after copy. -*/ -static void _me_wash_south(u3_noun dog); -static void -_me_wash_south_in(u3_noun som) -{ - if ( _(u3a_is_cat(som)) ) return; - if ( !_(u3a_south_is_junior(u3R, som)) ) return; - - _me_wash_south(som); -} -static void -_me_wash_south(u3_noun dog) -{ - c3_assert(c3y == u3a_is_dog(dog)); - // c3_assert(c3y == u3a_south_is_junior(u3R, dog)); - { - u3a_noun* dog_u = u3a_to_ptr(dog); - - if ( dog_u->mug_w == 0 ) return; - - dog_u->mug_w = 0; // power wash - // if ( dog_u->mug_w >> 31 ) { dog_u->mug_w = 0; } - - if ( _(u3a_is_pom(dog)) ) { - u3a_cell* god_u = (u3a_cell *)(void *)dog_u; - - _me_wash_south_in(god_u->hed); - _me_wash_south_in(god_u->tel); - } - } -} - -/* u3a_wash(): wash all lazy mugs. RETAIN. -*/ -void -u3a_wash(u3_noun som) -{ - if ( _(u3a_is_cat(som)) ) { - return; - } - if ( _(u3a_is_north(u3R)) ) { - if ( _(u3a_north_is_junior(u3R, som)) ) { - _me_wash_north(som); - } - } - else { - if ( _(u3a_south_is_junior(u3R, som)) ) { - _me_wash_south(som); - } - } -} - -/* _me_gain_use(): increment use count. -*/ -static void -_me_gain_use(u3_noun dog) -{ - c3_w* dog_w = u3a_to_ptr(dog); - u3a_box* box_u = u3a_botox(dog_w); - - if ( 0x7fffffff == box_u->use_w ) { - u3l_log("fail in _me_gain_use"); - u3m_bail(c3__fail); - } - else { - if ( box_u->use_w == 0 ) { - u3m_bail(c3__foul); - } - box_u->use_w += 1; - -#ifdef U3_MEMORY_DEBUG - // enable to (maybe) help track down leaks - // - // if ( u3_Code && !box_u->cod_w ) { box_u->cod_w = u3_Code; } -#endif - } -} - -#undef VERBOSE_TAKE - -/* _ca_take_atom(): reallocate an indirect atom off the stack. -*/ -static inline u3_atom -_ca_take_atom(u3a_atom* old_u) -{ - c3_w* new_w = u3a_walloc(old_u->len_w + c3_wiseof(u3a_atom)); - u3a_atom* new_u = (u3a_atom*)(void *)new_w; - u3_noun new = u3a_to_pug(u3a_outa(new_u)); - -#ifdef VERBOSE_TAKE - u3l_log("%s: atom %p to %p\r\n", ( c3y == u3a_is_north(u3R) ) - ? "north" - : "south", - old_u, - new_u); -#endif - - // XX use memcpy? - // - new_u->mug_w = old_u->mug_w; - new_u->len_w = old_u->len_w; - { - c3_w i_w; - - for ( i_w=0; i_w < old_u->len_w; i_w++ ) { - new_u->buf_w[i_w] = old_u->buf_w[i_w]; - } - } - - // borrow mug slot to record new destination in [old_u] - // - old_u->mug_w = new; - - return new; -} - -/* _ca_take_cell(): reallocate a cell off the stack. -*/ -static inline u3_cell -_ca_take_cell(u3a_cell* old_u, u3_noun hed, u3_noun tel) -{ - // XX use u3a_celloc? - // - c3_w* new_w = u3a_walloc(c3_wiseof(u3a_cell)); - u3a_cell* new_u = (u3a_cell*)(void *)new_w; - u3_cell new = u3a_to_pom(u3a_outa(new_u)); - -#ifdef VERBOSE_TAKE - u3l_log("%s: cell %p to %p\r\n", ( c3y == u3a_is_north(u3R) ) - ? "north" - : "south", - old_u, - new_u); -#endif - - new_u->mug_w = old_u->mug_w; - new_u->hed = hed; - new_u->tel = tel; - - // borrow mug slot to record new destination in [old_u] - // - old_u->mug_w = new; - - return new; -} - -/* _ca_take: stack frame for recording cell travesal -** (u3_none == hed) == head-frame -*/ -typedef struct _ca_take -{ - u3_weak hed; // taken head - u3_cell old; // old cell -} _ca_take; - -/* _ca_take_next_south: take next noun, pushing cells on stack. -*/ -static inline u3_noun -_ca_take_next_north(u3a_pile* pil_u, u3_noun veb) -{ - while ( 1 ) { - // direct atoms and senior refs are not counted. - // - if ( (c3y == u3a_is_cat(veb)) - || (c3y == u3a_north_is_senior(u3R, veb)) ) - { - return veb; - } - // not junior; normal (heap) refs on our road are counted. - // - else if ( c3n == u3a_north_is_junior(u3R, veb) ) { - _me_gain_use(veb); // bypass branches in u3k() - return veb; - } - // junior (stack) refs are copied. - // - else { - u3a_noun* veb_u = u3a_to_ptr(veb); - - // 32-bit mug_w: already copied [veb] and [mug_w] is the new ref. - // - if ( veb_u->mug_w >> 31 ) { - u3_noun nov = (u3_noun)veb_u->mug_w; - - c3_assert( c3y == u3a_north_is_normal(u3R, nov) ); - -#ifdef VERBOSE_TAKE - u3l_log("north: %p is already %p\r\n", veb_u, u3a_to_ptr(nov)); -#endif - - _me_gain_use(nov); // bypass branches in u3k() - return nov; - } - else if ( c3y == u3a_is_atom(veb) ) { - return _ca_take_atom((u3a_atom*)veb_u); - } - else { - u3a_cell* old_u = (u3a_cell*)veb_u; - _ca_take* fam_u = u3a_push(pil_u); - u3a_pile_sane(pil_u); - - fam_u->hed = u3_none; - fam_u->old = veb; - - veb = old_u->hed; - continue; - } - } - } -} - -/* _ca_take_next_south: take next noun, pushing cells on stack. -*/ -static inline u3_noun -_ca_take_next_south(u3a_pile* pil_u, u3_noun veb) -{ - while ( 1 ) { - // direct atoms and senior refs are not counted. - // - if ( (c3y == u3a_is_cat(veb)) - || (c3y == u3a_south_is_senior(u3R, veb)) ) - { - return veb; - } - // not junior; a normal pointer in our road -- refcounted - // - else if ( c3n == u3a_south_is_junior(u3R, veb) ) { - _me_gain_use(veb); // bypass branches in u3k() - return veb; - } - // junior (stack) refs are copied. - // - else { - u3a_noun* veb_u = u3a_to_ptr(veb); - - // 32-bit mug_w: already copied [veb] and [mug_w] is the new ref. - // - if ( veb_u->mug_w >> 31 ) { - u3_noun nov = (u3_noun)veb_u->mug_w; - - c3_assert( c3y == u3a_south_is_normal(u3R, nov) ); - -#ifdef VERBOSE_TAKE - u3l_log("south: %p is already %p\r\n", veb_u, u3a_to_ptr(nov)); -#endif - - _me_gain_use(nov); // bypass branches in u3k() - return nov; - } - else if ( c3y == u3a_is_atom(veb) ) { - return _ca_take_atom((u3a_atom*)veb_u); - } - else { - u3a_cell* old_u = (u3a_cell*)veb_u; - _ca_take* fam_u = u3a_push(pil_u); - u3a_pile_sane(pil_u); - - fam_u->hed = u3_none; - fam_u->old = veb; - - veb = old_u->hed; - continue; - } - } - } -} - -/* _ca_take_north(): in a north road, gain, copying juniors (from stack). -*/ -static u3_noun -_ca_take_north(u3_noun veb) -{ - u3_noun pro; - _ca_take* fam_u; - u3a_pile pil_u; - u3a_pile_prep(&pil_u, sizeof(*fam_u)); - - // commence taking - // - pro = _ca_take_next_north(&pil_u, veb); - - // process cell results - // - if ( c3n == u3a_pile_done(&pil_u) ) { - fam_u = u3a_peek(&pil_u); - - do { - // head-frame: stash copy and continue into the tail - // - if ( u3_none == fam_u->hed ) { - u3a_cell* old_u = u3a_to_ptr(fam_u->old); - fam_u->hed = pro; - pro = _ca_take_next_north(&pil_u, old_u->tel); - fam_u = u3a_peek(&pil_u); - } - // tail-frame: copy cell and pop the stack - // - else { - u3a_cell* old_u = u3a_to_ptr(fam_u->old); - pro = _ca_take_cell(old_u, fam_u->hed, pro); - fam_u = u3a_pop(&pil_u); - } - } while ( c3n == u3a_pile_done(&pil_u) ); - } - - return pro; -} -/* _ca_take_south(): in a south road, gain, copying juniors (from stack). -*/ -static u3_noun -_ca_take_south(u3_noun veb) -{ - u3_noun pro; - _ca_take* fam_u; - u3a_pile pil_u; - u3a_pile_prep(&pil_u, sizeof(*fam_u)); - - // commence taking - // - pro = _ca_take_next_south(&pil_u, veb); - - // process cell results - // - if ( c3n == u3a_pile_done(&pil_u) ) { - fam_u = u3a_peek(&pil_u); - - do { - // head-frame: stash copy and continue into the tail - // - if ( u3_none == fam_u->hed ) { - u3a_cell* old_u = u3a_to_ptr(fam_u->old); - fam_u->hed = pro; - pro = _ca_take_next_south(&pil_u, old_u->tel); - fam_u = u3a_peek(&pil_u); - } - // tail-frame: copy cell and pop the stack - // - else { - u3a_cell* old_u = u3a_to_ptr(fam_u->old); - pro = _ca_take_cell(old_u, fam_u->hed, pro); - fam_u = u3a_pop(&pil_u); - } - } while ( c3n == u3a_pile_done(&pil_u) ); - } - - return pro; -} - -/* u3a_take(): gain, copying juniors. -*/ -u3_noun -u3a_take(u3_noun veb) -{ - u3_noun pro; - u3t_on(coy_o); - - c3_assert(u3_none != veb); - - pro = ( c3y == u3a_is_north(u3R) ) - ? _ca_take_north(veb) - : _ca_take_south(veb); - - u3t_off(coy_o); - return pro; -} - -/* u3a_left(): true of junior if preserved. -*/ -c3_o -u3a_left(u3_noun som) -{ - if ( _(u3a_is_cat(som)) || - !_(u3a_is_junior(u3R, som)) ) - { - return c3y; - } - else { - u3a_noun* dog_u = u3a_to_ptr(som); - - return __(0 != (dog_u->mug_w >> 31)); - } -} - -/* _me_gain_north(): gain on a north road. -*/ -static u3_noun -_me_gain_north(u3_noun dog) -{ - if ( c3y == u3a_north_is_senior(u3R, dog) ) { - /* senior pointers are not refcounted - */ - return dog; - } - else { - /* junior nouns are disallowed - */ - c3_assert(!_(u3a_north_is_junior(u3R, dog))); - - /* normal pointers are refcounted - */ - _me_gain_use(dog); - return dog; - } -} - -/* _me_gain_south(): gain on a south road. -*/ -static u3_noun -_me_gain_south(u3_noun dog) -{ - if ( c3y == u3a_south_is_senior(u3R, dog) ) { - /* senior pointers are not refcounted - */ - return dog; - } - else { - /* junior nouns are disallowed - */ - c3_assert(!_(u3a_south_is_junior(u3R, dog))); - - /* normal nouns are refcounted - */ - _me_gain_use(dog); - return dog; - } -} - -/* _me_lose_north(): lose on a north road. -*/ -static void -_me_lose_north(u3_noun dog) -{ -top: - if ( c3y == u3a_north_is_normal(u3R, dog) ) { - c3_w* dog_w = u3a_to_ptr(dog); - u3a_box* box_u = u3a_botox(dog_w); - - if ( box_u->use_w > 1 ) { - box_u->use_w -= 1; - } - else { - if ( 0 == box_u->use_w ) { - u3m_bail(c3__foul); - } - else { - if ( _(u3a_is_pom(dog)) ) { - u3a_cell* dog_u = (void *)dog_w; - u3_noun h_dog = dog_u->hed; - u3_noun t_dog = dog_u->tel; - - if ( !_(u3a_is_cat(h_dog)) ) { - _me_lose_north(h_dog); - } - u3a_cfree(dog_w); - if ( !_(u3a_is_cat(t_dog)) ) { - dog = t_dog; - goto top; - } - } - else { - u3a_wfree(dog_w); - } - } - } - } -} - -/* _me_lose_south(): lose on a south road. -*/ -static void -_me_lose_south(u3_noun dog) -{ -top: - if ( c3y == u3a_south_is_normal(u3R, dog) ) { - c3_w* dog_w = u3a_to_ptr(dog); - u3a_box* box_u = u3a_botox(dog_w); - - if ( box_u->use_w > 1 ) { - box_u->use_w -= 1; - } - else { - if ( 0 == box_u->use_w ) { - u3m_bail(c3__foul); - } - else { - if ( _(u3a_is_pom(dog)) ) { - u3a_cell* dog_u = (void *)dog_w; - u3_noun h_dog = dog_u->hed; - u3_noun t_dog = dog_u->tel; - - if ( !_(u3a_is_cat(h_dog)) ) { - _me_lose_south(h_dog); - } - u3a_cfree(dog_w); - if ( !_(u3a_is_cat(t_dog)) ) { - dog = t_dog; - goto top; - } - } - else { - u3a_wfree(dog_w); - } - } - } - } -} - -/* u3a_gain(): gain a reference count in normal space. -*/ -u3_noun -u3a_gain(u3_noun som) -{ - u3t_on(mal_o); - c3_assert(u3_none != som); - - if ( !_(u3a_is_cat(som)) ) { - som = _(u3a_is_north(u3R)) - ? _me_gain_north(som) - : _me_gain_south(som); - } - u3t_off(mal_o); - - return som; -} - -/* u3a_lose(): lose a reference count. -*/ -void -u3a_lose(u3_noun som) -{ - u3t_on(mal_o); - if ( !_(u3a_is_cat(som)) ) { - if ( _(u3a_is_north(u3R)) ) { - _me_lose_north(som); - } else { - _me_lose_south(som); - } - } - u3t_off(mal_o); -} - -/* u3a_use(): reference count. -*/ -c3_w -u3a_use(u3_noun som) -{ - if ( _(u3a_is_cat(som)) ) { - return 1; - } - else { - c3_w* dog_w = u3a_to_ptr(som); - u3a_box* box_u = u3a_botox(dog_w); - - return box_u->use_w; - } -} - -/* _ca_wed_who(): unify [a] and [b] on [rod_u], keeping the senior -** -** NB: this leaks a reference when it unifies in a senior road -*/ -static c3_o -_ca_wed_who(u3a_road* rod_u, u3_noun* a, u3_noun* b) -{ - c3_t asr_t = ( c3y == u3a_is_senior(rod_u, *a) ); - c3_t bsr_t = ( c3y == u3a_is_senior(rod_u, *b) ); - c3_t nor_t = ( c3y == u3a_is_north(rod_u) ); - c3_t own_t = ( rod_u == u3R ); - - // both are on [rod_u]; gain a reference to whichever we keep - // - if ( !asr_t && !bsr_t ) { - // keep [a]; it's deeper in the heap - // - // (N && >) || (S && <) - // - if ( (*a > *b) == nor_t ) { - _me_gain_use(*a); - if ( own_t ) { u3z(*b); } - *b = *a; - } - // keep [b]; it's deeper in the heap - // - else { - _me_gain_use(*b); - if ( own_t ) { u3z(*a); } - *a = *b; - } - - return c3y; - } - // keep [a]; it's senior - // - else if ( asr_t && !bsr_t ) { - if ( own_t ) { u3z(*b); } - *b = *a; - return c3y; - } - // keep [b]; it's senior - // - else if ( !asr_t && bsr_t ) { - if ( own_t ) { u3z(*a); } - *a = *b; - return c3y; - } - - // both [a] and [b] are senior; we can't unify on [rod_u] - // - return c3n; -} - -/* u3a_wed(): unify noun references. -*/ -void -u3a_wed(u3_noun* a, u3_noun* b) -{ - if ( *a != *b ) { - u3_road* rod_u = u3R; - - // while not at home, attempt to unify - // - // we try to unify on our road, and retry on senior roads - // until we succeed or reach the home road. - // - // we can't perform this kind of butchery on the home road, - // where asynchronous things can allocate. - // (XX anything besides u3t_samp?) - // - // when unifying on a higher road, we can't free nouns, - // because we can't track junior nouns that point into - // that road. - // - // this is just an implementation issue -- we could set use - // counts to 0 without actually freeing. but the allocator - // would have to be actually designed for this. - // (alternately, we could keep a deferred free-list) - // - // not freeing may generate spurious leaks, so we disable - // senior unification when debugging memory. this will - // cause a very slow boot process as the compiler compiles - // itself, constantly running into duplicates. - // - while ( (rod_u != &u3H->rod_u) && - (c3n == _ca_wed_who(rod_u, a, b)) ) - { -#ifdef U3_MEMORY_DEBUG - break; -#else - rod_u = u3to(u3_road, rod_u->par_p); -#endif - } - } -} - -/* u3a_luse(): check refcount sanity. -*/ -void -u3a_luse(u3_noun som) -{ - if ( 0 == u3a_use(som) ) { - fprintf(stderr, "loom: insane %d 0x%x\r\n", som, som); - abort(); - } - if ( _(u3du(som)) ) { - u3a_luse(u3h(som)); - u3a_luse(u3t(som)); - } -} - -/* u3a_mark_ptr(): mark a pointer for gc. Produce size if first mark. -*/ -c3_w -u3a_mark_ptr(void* ptr_v) -{ - if ( _(u3a_is_north(u3R)) ) { - if ( !((ptr_v >= u3a_into(u3R->rut_p)) && - (ptr_v < u3a_into(u3R->hat_p))) ) - { - return 0; - } - } - else { - if ( !((ptr_v >= u3a_into(u3R->hat_p)) && - (ptr_v < u3a_into(u3R->rut_p))) ) - { - return 0; - } - } - { - u3a_box* box_u = u3a_botox(ptr_v); - c3_w siz_w; - -#ifdef U3_MEMORY_DEBUG - if ( 0 == box_u->eus_w ) { - siz_w = box_u->siz_w; - } - else if ( 0xffffffff == box_u->eus_w ) { // see _raft_prof() - siz_w = 0xffffffff; - box_u->eus_w = 0; - } - else { - siz_w = 0; - } - box_u->eus_w += 1; -#else - c3_ws use_ws = (c3_ws)box_u->use_w; - - if ( use_ws == 0 ) { - fprintf(stderr, "%p is bogus\r\n", ptr_v); - siz_w = 0; - } - else { - c3_assert(use_ws != 0); - - if ( 0x80000000 == (c3_w)use_ws ) { // see _raft_prof() - use_ws = -1; - siz_w = 0xffffffff; - } - else if ( use_ws < 0 ) { - use_ws -= 1; - siz_w = 0; - } - else { - use_ws = -1; - siz_w = box_u->siz_w; - } - box_u->use_w = (c3_w)use_ws; - } -#endif - return siz_w; - } -} - -u3_post -u3a_rewritten(u3_post ptr_v) -{ - u3a_box* box_u = u3a_botox(u3a_into(ptr_v)); - c3_w* box_w = (c3_w*) box_u; - return (u3_post)box_w[box_u->siz_w - 1]; -} - -u3_noun -u3a_rewritten_noun(u3_noun som) -{ - if ( c3y == u3a_is_cat(som) ) { - return som; - } - u3_post som_p = u3a_rewritten(u3a_to_off(som)); - if ( c3y == u3a_is_pug(som) ) { - return u3a_to_pug(som_p); - } - else { - return u3a_to_pom(som_p); - } -} - -/* u3a_mark_mptr(): mark a malloc-allocated ptr for gc. -*/ -c3_w -u3a_mark_mptr(void* ptr_v) -{ - c3_w* ptr_w = ptr_v; - c3_w pad_w = ptr_w[-1]; - c3_w* org_w = ptr_w - (pad_w + 1); - - return u3a_mark_ptr(org_w); -} - -/* u3a_mark_noun(): mark a noun for gc. Produce size. -*/ -c3_w -u3a_mark_noun(u3_noun som) -{ - c3_w siz_w = 0; - - while ( 1 ) { - if ( _(u3a_is_senior(u3R, som)) ) { - return siz_w; - } - else { - c3_w* dog_w = u3a_to_ptr(som); - c3_w new_w = u3a_mark_ptr(dog_w); - - if ( 0 == new_w || 0xffffffff == new_w ) { // see u3a_mark_ptr() - return siz_w; - } - else { - siz_w += new_w; - if ( _(u3du(som)) ) { - siz_w += u3a_mark_noun(u3h(som)); - som = u3t(som); - } - else return siz_w; - } - } - } -} - -/* u3a_count_noun(): count size of pointer. -*/ -c3_w -u3a_count_ptr(void* ptr_v) -{ - if ( _(u3a_is_north(u3R)) ) { - if ( !((ptr_v >= u3a_into(u3R->rut_p)) && - (ptr_v < u3a_into(u3R->hat_p))) ) - { - return 0; - } - } - else { - if ( !((ptr_v >= u3a_into(u3R->hat_p)) && - (ptr_v < u3a_into(u3R->rut_p))) ) - { - return 0; - } - } - { - u3a_box* box_u = u3a_botox(ptr_v); - c3_w siz_w; - - c3_ws use_ws = (c3_ws)box_u->use_w; - - if ( use_ws == 0 ) { - fprintf(stderr, "%p is bogus\r\n", ptr_v); - siz_w = 0; - } - else { - c3_assert(use_ws != 0); - - if ( use_ws < 0 ) { - siz_w = 0; - } - else { - use_ws = -use_ws; - siz_w = box_u->siz_w; - } - box_u->use_w = (c3_w)use_ws; - } - return siz_w; - } -} - -/* u3a_count_noun(): count size of noun. -*/ -c3_w -u3a_count_noun(u3_noun som) -{ - c3_w siz_w = 0; - - while ( 1 ) { - if ( _(u3a_is_senior(u3R, som)) ) { - return siz_w; - } - else { - c3_w* dog_w = u3a_to_ptr(som); - c3_w new_w = u3a_count_ptr(dog_w); - - if ( 0 == new_w ) { - return siz_w; - } - else { - siz_w += new_w; - if ( _(u3du(som)) ) { - siz_w += u3a_count_noun(u3h(som)); - som = u3t(som); - } - else return siz_w; - } - } - } -} - -/* u3a_discount_ptr(): clean up after counting a pointer. -*/ -c3_w -u3a_discount_ptr(void* ptr_v) -{ - if ( _(u3a_is_north(u3R)) ) { - if ( !((ptr_v >= u3a_into(u3R->rut_p)) && - (ptr_v < u3a_into(u3R->hat_p))) ) - { - return 0; - } - } - else { - if ( !((ptr_v >= u3a_into(u3R->hat_p)) && - (ptr_v < u3a_into(u3R->rut_p))) ) - { - return 0; - } - } - u3a_box* box_u = u3a_botox(ptr_v); - c3_w siz_w; - - c3_ws use_ws = (c3_ws)box_u->use_w; - - if ( use_ws == 0 ) { - fprintf(stderr, "%p is bogus\r\n", ptr_v); - siz_w = 0; - } - else { - c3_assert(use_ws != 0); - - if ( use_ws < 0 ) { - use_ws = -use_ws; - siz_w = box_u->siz_w; - } - else { - siz_w = 0; - } - box_u->use_w = (c3_w)use_ws; - } - - return siz_w; -} - -/* u3a_discount_noun(): clean up after counting a noun. -*/ -c3_w -u3a_discount_noun(u3_noun som) -{ - c3_w siz_w = 0; - - while ( 1 ) { - if ( _(u3a_is_senior(u3R, som)) ) { - return siz_w; - } - else { - c3_w* dog_w = u3a_to_ptr(som); - c3_w new_w = u3a_discount_ptr(dog_w); - - if ( 0 == new_w ) { - return siz_w; - } - else { - siz_w += new_w; - if ( _(u3du(som)) ) { - siz_w += u3a_discount_noun(u3h(som)); - som = u3t(som); - } - else return siz_w; - } - } - } -} - -/* u3a_print_time: print microsecond time. -*/ -void -u3a_print_time(c3_c* str_c, c3_c* cap_c, c3_d mic_d) -{ - c3_assert( 0 != str_c ); - - c3_w sec_w = (mic_d / 1000000); - c3_w mec_w = (mic_d % 1000000) / 1000; - c3_w mic_w = (mic_d % 1000); - - if ( sec_w ) { - sprintf(str_c, "%s s/%d.%03d.%03d", cap_c, sec_w, mec_w, mic_w); - } - else if ( mec_w ) { - sprintf(str_c, "%s ms/%d.%03d", cap_c, mec_w, mic_w); - } - else { - sprintf(str_c, "%s \xc2\xb5s/%d", cap_c, mic_w); - } -} - -/* u3a_print_memory: print memory amount. -*/ -void -u3a_print_memory(FILE* fil_u, c3_c* cap_c, c3_w wor_w) -{ - c3_assert( 0 != fil_u ); - - c3_w byt_w = (wor_w * 4); - c3_w gib_w = (byt_w / 1000000000); - c3_w mib_w = (byt_w % 1000000000) / 1000000; - c3_w kib_w = (byt_w % 1000000) / 1000; - c3_w bib_w = (byt_w % 1000); - - if ( byt_w ) { - if ( gib_w ) { - fprintf(fil_u, "%s: GB/%d.%03d.%03d.%03d\r\n", - cap_c, gib_w, mib_w, kib_w, bib_w); - } - else if ( mib_w ) { - fprintf(fil_u, "%s: MB/%d.%03d.%03d\r\n", cap_c, mib_w, kib_w, bib_w); - } - else if ( kib_w ) { - fprintf(fil_u, "%s: KB/%d.%03d\r\n", cap_c, kib_w, bib_w); - } - else if ( bib_w ) { - fprintf(fil_u, "%s: B/%d\r\n", cap_c, bib_w); - } - } -} - -/* u3a_maid(): maybe print memory. -*/ -c3_w -u3a_maid(FILE* fil_u, c3_c* cap_c, c3_w wor_w) -{ - if ( 0 != fil_u ) { - u3a_print_memory(fil_u, cap_c, wor_w); - } - return wor_w; -} - -/* u3a_mark_road(): mark ad-hoc persistent road structures. -*/ -c3_w -u3a_mark_road(FILE* fil_u) -{ - c3_w tot_w = 0; - tot_w += u3a_maid(fil_u, " namespace", u3a_mark_noun(u3R->ski.gul)); - tot_w += u3a_maid(fil_u, " trace stack", u3a_mark_noun(u3R->bug.tax)); - tot_w += u3a_maid(fil_u, " trace buffer", u3a_mark_noun(u3R->bug.mer)); - tot_w += u3a_maid(fil_u, " profile batteries", u3a_mark_noun(u3R->pro.don)); - tot_w += u3a_maid(fil_u, " profile doss", u3a_mark_noun(u3R->pro.day)); - tot_w += u3a_maid(fil_u, " new profile trace", u3a_mark_noun(u3R->pro.trace)); - tot_w += u3a_maid(fil_u, " memoization cache", u3h_mark(u3R->cax.har_p)); - return u3a_maid(fil_u, "total road stuff", tot_w); -} - -/* u3a_reclaim(): clear ad-hoc persistent caches to reclaim memory. -*/ -void -u3a_reclaim(void) -{ - // clear the memoization cache - // - u3h_free(u3R->cax.har_p); - u3R->cax.har_p = u3h_new(); -} - -/* u3a_rewrite_compact(): rewrite pointers in ad-hoc persistent road structures. -*/ -void -u3a_rewrite_compact(void) -{ - u3a_rewrite_noun(u3R->ski.gul); - u3a_rewrite_noun(u3R->bug.tax); - u3a_rewrite_noun(u3R->bug.mer); - u3a_rewrite_noun(u3R->pro.don); - u3a_rewrite_noun(u3R->pro.day); - u3a_rewrite_noun(u3R->pro.trace); - u3h_rewrite(u3R->cax.har_p); - - u3R->ski.gul = u3a_rewritten_noun(u3R->ski.gul); - u3R->bug.tax = u3a_rewritten_noun(u3R->bug.tax); - u3R->bug.mer = u3a_rewritten_noun(u3R->bug.mer); - u3R->pro.don = u3a_rewritten_noun(u3R->pro.don); - u3R->pro.day = u3a_rewritten_noun(u3R->pro.day); - u3R->pro.trace = u3a_rewritten_noun(u3R->pro.trace); - u3R->cax.har_p = u3a_rewritten(u3R->cax.har_p); -} - -/* _ca_print_box(): heuristically print the contents of an allocation box. -*/ -static c3_c* -_ca_print_box(u3a_box* box_u) -{ - // the loom offset pointing to the contents of box_u - // - c3_w box_w = u3a_outa(u3a_boxto(box_u)); - // box_u might not be a cell, we use the struct to inspect further - // - u3a_cell* cel_u = (u3a_cell*)box_u; - - if ( // a cell will never be bigger than the minimum allocation size - // - (u3a_minimum < box_u->siz_w) || - // this condition being true potentially corresponds to - // box_u containing an indirect atom of only one word. - // if the condition is false, we know box_u contains a cell. - // - ( (1 == (c3_w)cel_u->hed) && - (0x80000000 & (c3_w)cel_u->tel) ) ) - { - // box_u might not be an indirect atom, - // but it's always safe to print it as if it is one - // - u3a_atom* vat_u = (u3a_atom*)box_u; - u3_atom veb = u3a_to_pug(box_w); - - // skip atoms larger than 10 words - // XX print mugs or something - // - if ( 10 > vat_u->len_w ) { -#if 0 - /* For those times when you've really just got to crack open - * the box and see what's inside - */ - { - int i; - for ( i = 0; i < box_u->siz_w; i++ ) { - fprintf(stderr, "%08x ", (unsigned int)(((c3_w*)box_u)[i])); - } - fprintf(stderr, "\r\n"); - } -#endif - return 0; - } - - return u3m_pretty(veb); - } - else { - // box_u is definitely a cell - // - return u3m_pretty(u3a_to_pom(box_w)); - } -} - -/* _ca_print_leak(): print the details of a leaked allocation box. -*/ -#ifdef U3_MEMORY_DEBUG - -static void -_ca_print_leak(c3_c* cap_c, u3a_box* box_u, c3_w eus_w, c3_w use_w) -{ - fprintf(stderr, "%s: %p mug=%x (marked=%u swept=%u)\r\n", - cap_c, - box_u, - ((u3a_noun *)(u3a_boxto(box_u)))->mug_w, - eus_w, - use_w); - - if ( box_u->cod_w ) { - c3_c* cod_c = u3m_pretty(box_u->cod_w); - fprintf(stderr, "code: %s\r\n", cod_c); - c3_free(cod_c); - } - - u3a_print_memory(stderr, " size", box_u->siz_w); - - { - c3_c* dat_c = _ca_print_box(box_u); - fprintf(stderr, " data: %s\r\n", dat_c); - c3_free(dat_c); - } -} - -#else - -static void -_ca_print_leak(c3_c* cap_c, u3a_box* box_u, c3_ws use_ws) -{ - fprintf(stderr, "%s: %p mug=%x swept=%d\r\n", - cap_c, - box_u, - ((u3a_noun *)(u3a_boxto(box_u)))->mug_w, - use_ws); - - u3a_print_memory(stderr, " size", box_u->siz_w); - - { - c3_c* dat_c = _ca_print_box(box_u); - fprintf(stderr, " data: %s\r\n", dat_c); - c3_free(dat_c); - } -} - -#endif - -/* u3a_idle(): measure free-lists in [rod_u] -*/ -c3_w -u3a_idle(u3a_road* rod_u) -{ - u3a_fbox* fox_u; - c3_w i_w, fre_w = 0; - - for ( i_w = 0; i_w < u3a_fbox_no; i_w++ ) { - u3p(u3a_fbox) fre_p = rod_u->all.fre_p[i_w]; - - while ( fre_p ) { - u3a_fbox* fox_u = u3to(u3a_fbox, fre_p); - - fre_w += fox_u->box_u.siz_w; - fre_p = fox_u->nex_p; - } - } - - return fre_w; -} - -/* u3a_sweep(): sweep a fully marked road. -*/ -c3_w -u3a_sweep(void) -{ - c3_w neg_w, pos_w, leq_w, weq_w; - - /* Measure allocated memory by counting the free list. - */ - { - c3_w end_w = u3a_heap(u3R); - c3_w fre_w = u3a_idle(u3R); - -#ifdef U3_CPU_DEBUG - if ( fre_w != u3R->all.fre_w ) { - fprintf(stderr, "fre discrepancy (%x): %x, %x, %x\r\n", u3R->par_p, - fre_w, u3R->all.fre_w, (u3R->all.fre_w - fre_w)); - } -#endif - neg_w = (end_w - fre_w); - } - - /* Sweep through the arena, repairing and counting leaks. - */ - pos_w = leq_w = weq_w = 0; - { - u3_post box_p = _(u3a_is_north(u3R)) ? u3R->rut_p : u3R->hat_p; - u3_post end_p = _(u3a_is_north(u3R)) ? u3R->hat_p : u3R->rut_p; - c3_w* box_w = u3a_into(box_p); - c3_w* end_w = u3a_into(end_p); - - while ( box_w < end_w ) { - u3a_box* box_u = (void *)box_w; - -#ifdef U3_MEMORY_DEBUG - /* I suspect these printfs fail hilariously in the case - * of non-direct atoms. We shouldn't unconditionally run - * u3a_to_pom(). In general, the condition - * box_u->siz_w > u3a_minimum is sufficient, but not necessary, - * for the box to represent an atom. The atoms between - * 2^31 and 2^32 are the exceptions. - * - * Update: so, apparently u3.md is incorrect, and a pug is just - * an indirect atom. This code should be altered to handle - * that. - */ - if ( box_u->use_w != box_u->eus_w ) { - if ( box_u->eus_w != 0 ) { - if ( box_u->use_w == 0 ) { - _ca_print_leak("dank", box_u, box_u->eus_w, box_u->use_w); - } - else { - _ca_print_leak("weak", box_u, box_u->eus_w, box_u->use_w); - } - - weq_w += box_u->siz_w; - } - else { - _ca_print_leak("leak", box_u, box_u->eus_w, box_u->use_w); - - leq_w += box_u->siz_w; - } - - box_u->use_w = box_u->eus_w; - } - else { - if ( box_u->use_w ) { - pos_w += box_u->siz_w; - } - } - box_u->eus_w = 0; -#else - c3_ws use_ws = (c3_ws)box_u->use_w; - - if ( use_ws > 0 ) { - _ca_print_leak("leak", box_u, use_ws); - - leq_w += box_u->siz_w; - box_u->use_w = 0; - - _box_attach(box_u); - } - else if ( use_ws < 0 ) { - pos_w += box_u->siz_w; - box_u->use_w = (c3_w)(0 - use_ws); - } -#endif - box_w += box_u->siz_w; - } - } - -#ifdef U3_MEMORY_DEBUG - { - c3_w tot_w = u3a_full(u3R); - c3_w caf_w = u3a_temp(u3R); - -#ifdef U3_CPU_DEBUG - if ( (0 != u3R->par_p) && (u3R->all.max_w > 1000000) ) { - u3a_print_memory(stderr, "available", (tot_w - pos_w)); - u3a_print_memory(stderr, "allocated", pos_w); - u3a_print_memory(stderr, "volatile", caf_w); - - u3a_print_memory(stderr, "maximum", u3R->all.max_w); - } -#endif - -#if 0 - u3a_print_memory(stderr, "available", (tot_w - pos_w)); - u3a_print_memory(stderr, "allocated", pos_w); - u3a_print_memory(stderr, "volatile", caf_w); -#endif - } -#endif - - u3a_print_memory(stderr, "leaked", leq_w); - u3a_print_memory(stderr, "weaked", weq_w); - - c3_assert( (pos_w + leq_w + weq_w) == neg_w ); - c3_assert( (0 == leq_w) && (0 == weq_w) ); - - return neg_w; -} - -/* u3a_pack_seek(): sweep the heap, modifying boxes to record new addresses. -*/ -void -u3a_pack_seek(u3a_road* rod_u) -{ - // the heap in [rod_u] is swept from "front" to "back". - // new locations are calculated for each in-use allocation box - // (simply the "deepest" linearly-available location), - // and stored in the box itself - // - // box_w: front of the heap - // end_w: back of the heap - // new_p: initial new location (data of first box) - // - c3_w* box_w = u3a_into(rod_u->rut_p); - c3_w* end_w = u3a_into(rod_u->hat_p); - u3_post new_p = (rod_u->rut_p + c3_wiseof(u3a_box)); - u3a_box* box_u; - c3_w siz_w; - - if ( c3y == u3a_is_north(rod_u) ) { - // north roads are swept low to high - // - // new locations are recorded in the trailing size word - // - while ( box_w < end_w ) { - box_u = (void *)box_w; - siz_w = box_u->siz_w; - - if ( box_u->use_w ) { - box_w[siz_w - 1] = new_p; - new_p += siz_w; - } - - box_w += siz_w; - } - } - // XX untested! - // - else { - // south roads are swept high to low - // - // new locations are recorded in the leading size word - // - // since we traverse backward, [siz_w] holds the size of the next box, - // and we must initially offset to point to the head of the first box - // - siz_w = box_w[-1]; - box_w -= siz_w; - new_p -= siz_w; - - while ( end_w < box_w ) { - box_u = (void *)box_w; - siz_w = box_w[-1]; - - if ( box_u->use_w ) { - box_u->siz_w = new_p; - new_p -= siz_w; - } - - box_w -= siz_w; - } - } -} -static u3_post -_ca_pack_move_north(c3_w* box_w, c3_w* end_w, u3_post new_p) -{ - u3a_box* old_u; - c3_w siz_w; - - // relocate allocation boxes - // - // new locations have been recorded in the trailing size word, - // and are recalculated and asserted to ensure sanity - // - while ( box_w < end_w ) { - old_u = (void *)box_w; - siz_w = old_u->siz_w; - - old_u->use_w &= 0x7fffffff; - - if ( old_u->use_w ) { - c3_w* new_w = (void*)u3a_botox(u3a_into(new_p)); - - c3_assert( box_w[siz_w - 1] == new_p ); - - // note: includes leading size - // - if ( new_w < box_w ) { - c3_w i_w; - - for ( i_w = 0; i_w < siz_w - 1; i_w++ ) { - new_w[i_w] = box_w[i_w]; - } - } - else { - c3_assert( new_w == box_w ); - } - - // restore trailing size - // - new_w[siz_w - 1] = siz_w; - - new_p += siz_w; - } - - box_w += siz_w; - } - - return new_p; -} - -// XX untested! -// -static u3_post -_ca_pack_move_south(c3_w* box_w, c3_w* end_w, u3_post new_p) -{ - u3a_box* old_u; - c3_w siz_w; - c3_o yuz_o; - - // offset initial addresses (point to the head of the first box) - // - siz_w = box_w[-1]; - box_w -= siz_w; - new_p -= siz_w; - - // relocate allocation boxes - // - // new locations have been recorded in the leading size word, - // and are recalculated and asserted to ensure sanity - // - while ( 1 ) { - old_u = (void *)box_w; - - old_u->use_w &= 0x7fffffff; - - if ( old_u->use_w ) { - c3_w* new_w = (void*)u3a_botox(u3a_into(new_p)); - - c3_assert( old_u->siz_w == new_p ); - - // note: includes trailing size - // - if ( new_w > box_w ) { - c3_w i_w; - - for ( i_w = 1; i_w < siz_w; i_w++ ) { - new_w[i_w] = box_w[i_w]; - } - } - else { - c3_assert( new_w == box_w ); - } - - // restore leading size - // - new_w[0] = siz_w; - - yuz_o = c3y; - } - else { - yuz_o = c3n; - } - - // move backwards only if there is more work to be done - // - if ( box_w > end_w ) { - siz_w = box_w[-1]; - box_w -= siz_w; - - if ( c3y == yuz_o ) { - new_p -= siz_w; - } - } - else { - c3_assert( end_w == box_w ); - break; - } - } - - return new_p; -} - -/* u3a_pack_move(): sweep the heap, moving boxes to new addresses. -*/ -void -u3a_pack_move(u3a_road* rod_u) -{ - // box_w: front of the heap - // end_w: back of the heap - // new_p: initial new location (data of first box) - // las_p: newly calculated last location - // - c3_w* box_w = u3a_into(rod_u->rut_p); - c3_w* end_w = u3a_into(rod_u->hat_p); - u3_post new_p = (rod_u->rut_p + c3_wiseof(u3a_box)); - u3_post las_p = ( c3y == u3a_is_north(rod_u) ) - ? _ca_pack_move_north(box_w, end_w, new_p) - : _ca_pack_move_south(box_w, end_w, new_p); - - rod_u->hat_p = (las_p - c3_wiseof(u3a_box)); - - // clear free lists and cell allocator - // - { - c3_w i_w; - for ( i_w = 0; i_w < u3a_fbox_no; i_w++ ) { - u3R->all.fre_p[i_w] = 0; - } - - u3R->all.fre_w = 0; - u3R->all.cel_p = 0; - } -} - -/* u3a_rewrite_ptr(): mark a pointer as already having been rewritten -*/ -c3_o -u3a_rewrite_ptr(void* ptr_v) -{ - u3a_box* box_u = u3a_botox(ptr_v); - if ( box_u->use_w & 0x80000000 ) { - /* Already rewritten. - */ - return c3n; - } - box_u->use_w |= 0x80000000; - return c3y; -} - -void -u3a_rewrite_noun(u3_noun som) -{ - if ( c3n == u3a_is_cell(som) ) { - return; - } - - if ( c3n == u3a_rewrite_ptr(u3a_to_ptr((som))) ) return; - - u3a_cell* cel = u3a_to_ptr(som); - - u3a_rewrite_noun(cel->hed); - u3a_rewrite_noun(cel->tel); - - cel->hed = u3a_rewritten_noun(cel->hed); - cel->tel = u3a_rewritten_noun(cel->tel); -} - -#if 0 -/* _ca_detect(): in u3a_detect(). -*/ -static c3_d -_ca_detect(u3p(u3h_root) har_p, u3_noun fum, u3_noun som, c3_d axe_d) -{ - while ( 1 ) { - if ( som == fum ) { - return axe_d; - } - else if ( !_(u3du(fum)) || (u3_none != u3h_get(har_p, fum)) ) { - return 0; - } - else { - c3_d eax_d; - - u3h_put(har_p, fum, 0); - - if ( 0 != (eax_d = _ca_detect(har_p, u3h(fum), som, 2ULL * axe_d)) ) { - return c3y; - } - else { - fum = u3t(fum); - axe_d = (2ULL * axe_d) + 1; - } - } - } -} - -/* u3a_detect(): for debugging, check if (som) is referenced from (fum). -** -** (som) and (fum) are both RETAINED. -*/ -c3_d -u3a_detect(u3_noun fum, u3_noun som) -{ - u3p(u3h_root) har_p = u3h_new(); - c3_o ret_o; - - ret_o = _ca_detect(har_p, fum, som, 1); - u3h_free(har_p); - - return ret_o; -} -#endif - -#ifdef U3_MEMORY_DEBUG -/* u3a_lush(): leak push. -*/ -c3_w -u3a_lush(c3_w lab_w) -{ - c3_w cod_w = u3_Code; - - u3_Code = lab_w; - return cod_w; -} - -/* u3a_lop(): leak pop. -*/ -void -u3a_lop(c3_w lab_w) -{ - u3_Code = lab_w; -} -#else -/* u3a_lush(): leak push. -*/ -c3_w -u3a_lush(c3_w lab_w) -{ - return 0; -} - -/* u3a_lop(): leak pop. -*/ -void -u3a_lop(c3_w lab_w) -{ -} -#endif - -/* u3a_walk_fore(): preorder traversal, visits ever limb of a noun. -** -** cells are visited *before* their heads and tails -** and can shortcircuit traversal by returning [c3n] -*/ -void -u3a_walk_fore(u3_noun a, - void* ptr_v, - void (*pat_f)(u3_atom, void*), - c3_o (*cel_f)(u3_noun, void*)) -{ - u3_noun* top; - u3a_pile pil_u; - - // initialize stack control; push argument - // - u3a_pile_prep(&pil_u, sizeof(u3_noun)); - top = u3a_push(&pil_u); - *top = a; - - while ( c3n == u3a_pile_done(&pil_u) ) { - // visit an atom, then pop the stack - // - if ( c3y == u3a_is_atom(a) ) { - pat_f(a, ptr_v); - top = u3a_pop(&pil_u); - } - // vist a cell, if c3n, pop the stack - // - else if ( c3n == cel_f(a, ptr_v) ) { - top = u3a_pop(&pil_u); - } - // otherwise, push the tail and continue into the head - // - else { - *top = u3t(a); - top = u3a_push(&pil_u); - u3a_pile_sane(&pil_u); - *top = u3h(a); - } - - a = *top; - } -} - -/* u3a_walk_fore_unsafe(): u3a_walk_fore(), without overflow checks -*/ -void -u3a_walk_fore_unsafe(u3_noun a, - void* ptr_v, - void (*pat_f)(u3_atom, void*), - c3_o (*cel_f)(u3_noun, void*)) -{ - u3_noun* top; - u3a_pile pil_u; - - // initialize stack control; push argument - // - u3a_pile_prep(&pil_u, sizeof(u3_noun)); - top = u3a_push(&pil_u); - *top = a; - - while ( c3n == u3a_pile_done(&pil_u) ) { - // visit an atom, then pop the stack - // - if ( c3y == u3a_is_atom(a) ) { - pat_f(a, ptr_v); - top = u3a_pop(&pil_u); - } - // vist a cell, if c3n, pop the stack - // - else if ( c3n == cel_f(a, ptr_v) ) { - top = u3a_pop(&pil_u); - } - // otherwise, push the tail and continue into the head - // - else { - *top = u3t(a); - // NB: overflow check elided here - // - top = u3a_push(&pil_u); - *top = u3h(a); - } - - a = *top; - } -} - -/* u3a_string(): `a` as an on-loom c-string. -*/ -c3_c* -u3a_string(u3_atom a) -{ - c3_w met_w = u3r_met(3, a); - c3_c* str_c = u3a_malloc(met_w + 1); - - u3r_bytes(0, met_w, (c3_y*)str_c, a); - str_c[met_w] = 0; - return str_c; -} diff --git a/pkg/urbit/noun/events.c b/pkg/urbit/noun/events.c deleted file mode 100644 index e37fdf0ee..000000000 --- a/pkg/urbit/noun/events.c +++ /dev/null @@ -1,1038 +0,0 @@ -//! @file events.c -//! -//! incremental, orthogonal, paginated loom snapshots -//! -//! ### components -//! -//! - page: 16KB chunk of the loom. -//! - north segment (u3e_image, north.bin): low contiguous loom pages, -//! (in practice, the home road heap). indexed from low to high: -//! in-order on disk. -//! - south segment (u3e_image, south.bin): high contiguous loom pages, -//! (in practice, the home road stack). indexed from high to low: -//! reversed on disk. -//! - patch memory (memory.bin): new or changed pages since the last snapshot -//! - patch control (u3e_control control.bin): patch metadata, watermarks, -//! and indices/mugs for pages in patch memory. -//! -//! ### initialization (u3e_live()) -//! -//! - with the loom already mapped, all pages are marked dirty in a bitmap. -//! - if snapshot is missing or partial, empty segments are created. -//! - if a patch is present, it's applied (crash recovery). -//! - snapshot segments are copied onto the loom; all included pages -//! are marked clean and protected (read-only). -//! -//! #### page faults (u3e_fault()) -//! -//! - stores into protected pages generate faults (currently SIGSEGV, -//! handled outside this module). -//! - faults are handled by dirtying the page and switching protections to -//! read/write. -//! -//! ### updates (u3e_save()) -//! -//! - all updates to a snapshot are made through a patch. -//! - high/low watermarks for the north/south segments are established, -//! and dirty pages below/above them are added to the patch. -//! - modifications have been caught by the fault handler. -//! - newly-used pages are automatically included (preemptively dirtied). -//! - unused, innermost pages are reclaimed (segments are truncated to the -//! high/low watermarks; the last page in each is always adjacent to the -//! contiguous free space). -//! - patch pages are written to memory.bin, metadata to control.bin. -//! - the patch is applied to the snapshot segments, in-place. -//! - patch files are deleted. -//! -//! ### limitations -//! -//! - loom page size is fixed (16 KB), and must be a multiple of the -//! system page size. (can the size vary at runtime give south.bin's -//! reversed order? alternately, if system page size > ours, the fault -//! handler could dirty N pages at a time.) -//! - update atomicity is suspect: patch application must either -//! completely succeed or leave on-disk segments intact. unapplied -//! patches can be discarded (triggering event replay), but once -//! patch application begins it must succeed (can fail if disk is full). -//! may require integration into the overall signal-handling regime. -//! - any errors are handled with assertions; failed/partial writes are not -//! retried. -//! -//! ### enhancements -//! -//! - use platform specific page fault mechanism (mach rpc, userfaultfd, &c). -//! - implement demand paging / heuristic page-out. -//! - add a guard page in the middle of the loom to reactively handle stack overflow. -//! - parallelism -//! - -#include "all.h" -#include -#include -#include - -#ifdef U3_SNAPSHOT_VALIDATION -/* Image check. -*/ -struct { - c3_w nor_w; - c3_w sou_w; - c3_w mug_w[u3a_pages]; -} u3K; - -/* _ce_check_page(): checksum page. -*/ -static c3_w -_ce_check_page(c3_w pag_w) -{ - c3_w* mem_w = u3_Loom + (pag_w << u3a_page); - c3_w mug_w = u3r_mug_words(mem_w, (1 << u3a_page)); - - return mug_w; -} - -/* u3e_check(): compute a checksum on all memory within the watermarks. -*/ -void -u3e_check(c3_c* cap_c) -{ - c3_w nor_w = 0; - c3_w sou_w = 0; - - { - c3_w nwr_w, swu_w; - - u3m_water(&nwr_w, &swu_w); - - nor_w = (nwr_w + ((1 << u3a_page) - 1)) >> u3a_page; - sou_w = (swu_w + ((1 << u3a_page) - 1)) >> u3a_page; - } - - /* Count dirty pages. - */ - { - c3_w i_w, sum_w, mug_w; - - sum_w = 0; - for ( i_w = 0; i_w < nor_w; i_w++ ) { - mug_w = _ce_check_page(i_w); - if ( strcmp(cap_c, "boot") ) { - c3_assert(mug_w == u3K.mug_w[i_w]); - } - sum_w += mug_w; - } - for ( i_w = 0; i_w < sou_w; i_w++ ) { - mug_w = _ce_check_page((u3a_pages - (i_w + 1))); - if ( strcmp(cap_c, "boot") ) { - c3_assert(mug_w == u3K.mug_w[(u3a_pages - (i_w + 1))]); - } - sum_w += mug_w; - } - u3l_log("%s: sum %x (%x, %x)\r\n", cap_c, sum_w, nor_w, sou_w); - } -} - -/* _ce_maplloc(): crude off-loom allocator. -*/ -static void* -_ce_maplloc(c3_w len_w) -{ - void* map_v; - - map_v = mmap(0, - len_w, - (PROT_READ | PROT_WRITE), - (MAP_ANON | MAP_PRIVATE), - -1, 0); - - if ( -1 == (c3_ps)map_v ) { - c3_assert(0); - } - else { - c3_w* map_w = map_v; - - map_w[0] = len_w; - - return map_w + 1; - } -} - -/* _ce_mapfree(): crude off-loom allocator. -*/ -static void -_ce_mapfree(void* map_v) -{ - c3_w* map_w = map_v; - c3_i res_i; - - map_w -= 1; - res_i = munmap(map_w, map_w[0]); - - c3_assert(0 == res_i); -} -#endif - -/* u3e_fault(): handle a memory event with libsigsegv protocol. -*/ -c3_i -u3e_fault(void* adr_v, c3_i ser_i) -{ - // Let the stack overflow handler run. - if ( 0 == ser_i ) { - return 0; - } - - // XX u3l_log avoid here, as it can - // cause problems when handling errors - - c3_w* adr_w = (c3_w*) adr_v; - - if ( (adr_w < u3_Loom) || (adr_w >= (u3_Loom + u3a_words)) ) { - fprintf(stderr, "address %p out of loom!\r\n", adr_w); - fprintf(stderr, "loom: [%p : %p)\r\n", u3_Loom, u3_Loom + u3a_words); - c3_assert(0); - return 0; - } - else { - c3_w off_w = u3a_outa(adr_w); - c3_w pag_w = off_w >> u3a_page; - c3_w blk_w = (pag_w >> 5); - c3_w bit_w = (pag_w & 31); - -#if 0 - if ( pag_w == 131041 ) { - u3l_log("dirty page %d (at %p); unprotecting %p to %p\r\n", - pag_w, - adr_v, - (u3_Loom + (pag_w << u3a_page)), - (u3_Loom + (pag_w << u3a_page) + (1 << u3a_page))); - } -#endif - - if ( 0 != (u3P.dit_w[blk_w] & (1 << bit_w)) ) { - fprintf(stderr, "strange page: %d, at %p, off %x\r\n", - pag_w, adr_w, off_w); - c3_assert(0); - return 0; - } - - u3P.dit_w[blk_w] |= (1 << bit_w); - - if ( -1 == mprotect((void *)(u3_Loom + (pag_w << u3a_page)), - (1 << (u3a_page + 2)), - (PROT_READ | PROT_WRITE)) ) - { - fprintf(stderr, "loom: fault mprotect: %s\r\n", strerror(errno)); - c3_assert(0); - return 0; - } - } - return 1; -} - -/* _ce_image_open(): open or create image. -*/ -static c3_o -_ce_image_open(u3e_image* img_u) -{ - c3_i mod_i = O_RDWR | O_CREAT; - c3_c ful_c[8193]; - - snprintf(ful_c, 8192, "%s", u3P.dir_c); - c3_mkdir(ful_c, 0700); - - snprintf(ful_c, 8192, "%s/.urb", u3P.dir_c); - c3_mkdir(ful_c, 0700); - - snprintf(ful_c, 8192, "%s/.urb/chk", u3P.dir_c); - c3_mkdir(ful_c, 0700); - - snprintf(ful_c, 8192, "%s/.urb/chk/%s.bin", u3P.dir_c, img_u->nam_c); - if ( -1 == (img_u->fid_i = c3_open(ful_c, mod_i, 0666)) ) { - fprintf(stderr, "loom: c3_open %s: %s\r\n", ful_c, strerror(errno)); - return c3n; - } - else { - struct stat buf_u; - - if ( -1 == fstat(img_u->fid_i, &buf_u) ) { - fprintf(stderr, "loom: stat %s: %s\r\n", ful_c, strerror(errno)); - c3_assert(0); - return c3n; - } - else { - c3_d siz_d = buf_u.st_size; - c3_d pgs_d = (siz_d + (c3_d)((1 << (u3a_page + 2)) - 1)) >> - (c3_d)(u3a_page + 2); - - if ( !siz_d ) { - return c3y; - } - else { - if ( siz_d != (pgs_d << (c3_d)(u3a_page + 2)) ) { - fprintf(stderr, "%s: corrupt size %" PRIx64 "\r\n", ful_c, siz_d); - return c3n; - } - img_u->pgs_w = (c3_w) pgs_d; - c3_assert(pgs_d == (c3_d)img_u->pgs_w); - - return c3y; - } - } - } -} - -/* _ce_patch_write_control(): write control block file. -*/ -static void -_ce_patch_write_control(u3_ce_patch* pat_u) -{ - c3_w len_w = sizeof(u3e_control) + - (pat_u->con_u->pgs_w * sizeof(u3e_line)); - - if ( len_w != write(pat_u->ctl_i, pat_u->con_u, len_w) ) { - c3_assert(0); - } -} - -/* _ce_patch_read_control(): read control block file. -*/ -static c3_o -_ce_patch_read_control(u3_ce_patch* pat_u) -{ - c3_w len_w; - - c3_assert(0 == pat_u->con_u); - { - struct stat buf_u; - - if ( -1 == fstat(pat_u->ctl_i, &buf_u) ) { - c3_assert(0); - return c3n; - } - len_w = (c3_w) buf_u.st_size; - } - - pat_u->con_u = c3_malloc(len_w); - if ( (len_w != read(pat_u->ctl_i, pat_u->con_u, len_w)) || - (len_w != sizeof(u3e_control) + - (pat_u->con_u->pgs_w * sizeof(u3e_line))) ) - { - c3_free(pat_u->con_u); - pat_u->con_u = 0; - return c3n; - } - return c3y; -} - -/* _ce_patch_create(): create patch files. -*/ -static void -_ce_patch_create(u3_ce_patch* pat_u) -{ - c3_c ful_c[8193]; - - snprintf(ful_c, 8192, "%s", u3P.dir_c); - c3_mkdir(ful_c, 0700); - - snprintf(ful_c, 8192, "%s/.urb", u3P.dir_c); - c3_mkdir(ful_c, 0700); - - snprintf(ful_c, 8192, "%s/.urb/chk/control.bin", u3P.dir_c); - if ( -1 == (pat_u->ctl_i = c3_open(ful_c, O_RDWR | O_CREAT | O_EXCL, 0600)) ) { - fprintf(stderr, "loom: patch c3_open control.bin: %s\r\n", strerror(errno)); - c3_assert(0); - } - - snprintf(ful_c, 8192, "%s/.urb/chk/memory.bin", u3P.dir_c); - if ( -1 == (pat_u->mem_i = c3_open(ful_c, O_RDWR | O_CREAT | O_EXCL, 0600)) ) { - fprintf(stderr, "loom: patch c3_open memory.bin: %s\r\n", strerror(errno)); - c3_assert(0); - } -} - -/* _ce_patch_delete(): delete a patch. -*/ -static void -_ce_patch_delete(void) -{ - c3_c ful_c[8193]; - - snprintf(ful_c, 8192, "%s/.urb/chk/control.bin", u3P.dir_c); - c3_unlink(ful_c); - - snprintf(ful_c, 8192, "%s/.urb/chk/memory.bin", u3P.dir_c); - c3_unlink(ful_c); -} - -/* _ce_patch_verify(): check patch data mug. -*/ -static c3_o -_ce_patch_verify(u3_ce_patch* pat_u) -{ - c3_w i_w; - - if ( u3e_version != pat_u->con_u->ver_y ) { - fprintf(stderr, "loom: patch version mismatch: have %u, need %u\r\n", - pat_u->con_u->ver_y, - u3e_version); - return c3n; - } - - for ( i_w = 0; i_w < pat_u->con_u->pgs_w; i_w++ ) { - c3_w pag_w = pat_u->con_u->mem_u[i_w].pag_w; - c3_w mug_w = pat_u->con_u->mem_u[i_w].mug_w; - c3_w mem_w[1 << u3a_page]; - - if ( -1 == lseek(pat_u->mem_i, (i_w << (u3a_page + 2)), SEEK_SET) ) { - fprintf(stderr, "loom: patch seek: %s\r\n", strerror(errno)); - return c3n; - } - if ( -1 == read(pat_u->mem_i, mem_w, (1 << (u3a_page + 2))) ) { - fprintf(stderr, "loom: patch read: %s\r\n", strerror(errno)); - return c3n; - } - { - c3_w nug_w = u3r_mug_words(mem_w, (1 << u3a_page)); - - if ( mug_w != nug_w ) { - fprintf(stderr, "loom: patch mug mismatch %d/%d; (%x, %x)\r\n", - pag_w, i_w, mug_w, nug_w); - return c3n; - } -#if 0 - else { - u3l_log("verify: patch %d/%d, %x\r\n", pag_w, i_w, mug_w); - } -#endif - } - } - return c3y; -} - -/* _ce_patch_free(): free a patch. -*/ -static void -_ce_patch_free(u3_ce_patch* pat_u) -{ - c3_free(pat_u->con_u); - close(pat_u->ctl_i); - close(pat_u->mem_i); - c3_free(pat_u); -} - -/* _ce_patch_open(): open patch, if any. -*/ -static u3_ce_patch* -_ce_patch_open(void) -{ - u3_ce_patch* pat_u; - c3_c ful_c[8193]; - c3_i ctl_i, mem_i; - - snprintf(ful_c, 8192, "%s", u3P.dir_c); - c3_mkdir(ful_c, 0700); - - snprintf(ful_c, 8192, "%s/.urb", u3P.dir_c); - c3_mkdir(ful_c, 0700); - - snprintf(ful_c, 8192, "%s/.urb/chk/control.bin", u3P.dir_c); - if ( -1 == (ctl_i = c3_open(ful_c, O_RDWR)) ) { - return 0; - } - - snprintf(ful_c, 8192, "%s/.urb/chk/memory.bin", u3P.dir_c); - if ( -1 == (mem_i = c3_open(ful_c, O_RDWR)) ) { - close(ctl_i); - - _ce_patch_delete(); - return 0; - } - pat_u = c3_malloc(sizeof(u3_ce_patch)); - pat_u->ctl_i = ctl_i; - pat_u->mem_i = mem_i; - pat_u->con_u = 0; - - if ( c3n == _ce_patch_read_control(pat_u) ) { - close(pat_u->ctl_i); - close(pat_u->mem_i); - c3_free(pat_u); - - _ce_patch_delete(); - return 0; - } - if ( c3n == _ce_patch_verify(pat_u) ) { - _ce_patch_free(pat_u); - _ce_patch_delete(); - return 0; - } - return pat_u; -} - -/* _ce_patch_write_page(): write a page of patch memory. -*/ -static void -_ce_patch_write_page(u3_ce_patch* pat_u, - c3_w pgc_w, - c3_w* mem_w) -{ - if ( -1 == lseek(pat_u->mem_i, (pgc_w << (u3a_page + 2)), SEEK_SET) ) { - c3_assert(0); - } - if ( (1 << (u3a_page + 2)) != - write(pat_u->mem_i, mem_w, (1 << (u3a_page + 2))) ) - { - c3_assert(0); - } -} - -/* _ce_patch_count_page(): count a page, producing new counter. -*/ -static c3_w -_ce_patch_count_page(c3_w pag_w, - c3_w pgc_w) -{ - c3_w blk_w = (pag_w >> 5); - c3_w bit_w = (pag_w & 31); - - if ( u3P.dit_w[blk_w] & (1 << bit_w) ) { - pgc_w += 1; - } - return pgc_w; -} - -/* _ce_patch_save_page(): save a page, producing new page counter. -*/ -static c3_w -_ce_patch_save_page(u3_ce_patch* pat_u, - c3_w pag_w, - c3_w pgc_w) -{ - c3_w blk_w = (pag_w >> 5); - c3_w bit_w = (pag_w & 31); - - if ( u3P.dit_w[blk_w] & (1 << bit_w) ) { - c3_w* mem_w = u3_Loom + (pag_w << u3a_page); - - pat_u->con_u->mem_u[pgc_w].pag_w = pag_w; - pat_u->con_u->mem_u[pgc_w].mug_w = u3r_mug_words(mem_w, - (1 << u3a_page)); - -#if 0 - u3l_log("protect a: page %d\r\n", pag_w); -#endif - _ce_patch_write_page(pat_u, pgc_w, mem_w); - - if ( -1 == mprotect(u3_Loom + (pag_w << u3a_page), - (1 << (u3a_page + 2)), - PROT_READ) ) - { - c3_assert(0); - } - - u3P.dit_w[blk_w] &= ~(1 << bit_w); - pgc_w += 1; - } - return pgc_w; -} - -/* _ce_patch_compose(): make and write current patch. -*/ -static u3_ce_patch* -_ce_patch_compose(void) -{ - c3_w pgs_w = 0; - c3_w nor_w = 0; - c3_w sou_w = 0; - - /* Calculate number of saved pages, north and south. - */ - { - c3_w nwr_w, swu_w; - - u3m_water(&nwr_w, &swu_w); - - nor_w = (nwr_w + ((1 << u3a_page) - 1)) >> u3a_page; - sou_w = (swu_w + ((1 << u3a_page) - 1)) >> u3a_page; - } - -#ifdef U3_SNAPSHOT_VALIDATION - u3K.nor_w = nor_w; - u3K.sou_w = sou_w; -#endif - - /* Count dirty pages. - */ - { - c3_w i_w; - - for ( i_w = 0; i_w < nor_w; i_w++ ) { - pgs_w = _ce_patch_count_page(i_w, pgs_w); - } - for ( i_w = 0; i_w < sou_w; i_w++ ) { - pgs_w = _ce_patch_count_page((u3a_pages - (i_w + 1)), pgs_w); - } - } - - if ( !pgs_w ) { - return 0; - } - else { - u3_ce_patch* pat_u = c3_malloc(sizeof(u3_ce_patch)); - c3_w i_w, pgc_w; - - _ce_patch_create(pat_u); - pat_u->con_u = c3_malloc(sizeof(u3e_control) + (pgs_w * sizeof(u3e_line))); - pat_u->con_u->ver_y = u3e_version; - pgc_w = 0; - - for ( i_w = 0; i_w < nor_w; i_w++ ) { - pgc_w = _ce_patch_save_page(pat_u, i_w, pgc_w); - } - for ( i_w = 0; i_w < sou_w; i_w++ ) { - pgc_w = _ce_patch_save_page(pat_u, (u3a_pages - (i_w + 1)), pgc_w); - } - - pat_u->con_u->nor_w = nor_w; - pat_u->con_u->sou_w = sou_w; - pat_u->con_u->pgs_w = pgc_w; - - _ce_patch_write_control(pat_u); - return pat_u; - } -} - -/* _ce_patch_sync(): make sure patch is synced to disk. -*/ -static void -_ce_patch_sync(u3_ce_patch* pat_u) -{ - if ( -1 == c3_sync(pat_u->ctl_i) ) { - fprintf(stderr, "loom: control file sync failed: %s\r\n", - strerror(errno)); - c3_assert(!"loom: control sync"); - } - - if ( -1 == c3_sync(pat_u->mem_i) ) { - fprintf(stderr, "loom: patch file sync failed: %s\r\n", - strerror(errno)); - c3_assert(!"loom: patch sync"); - } -} - -/* _ce_image_sync(): make sure image is synced to disk. -*/ -static void -_ce_image_sync(u3e_image* img_u) -{ - if ( -1 == c3_sync(img_u->fid_i) ) { - fprintf(stderr, "loom: image (%s) sync failed: %s\r\n", - img_u->nam_c, - strerror(errno)); - c3_assert(!"loom: image sync"); - } -} - -/* _ce_image_resize(): resize image, truncating if it shrunk. -*/ -static void -_ce_image_resize(u3e_image* img_u, c3_w pgs_w) -{ - if ( img_u->pgs_w > pgs_w ) { - if ( ftruncate(img_u->fid_i, pgs_w << (u3a_page + 2)) ) { - fprintf(stderr, "loom: image truncate %s: %s\r\n", - img_u->nam_c, - strerror(errno)); - c3_assert(0); - } - } - - img_u->pgs_w = pgs_w; -} - -/* _ce_patch_apply(): apply patch to images. -*/ -static void -_ce_patch_apply(u3_ce_patch* pat_u) -{ - c3_w i_w; - - // resize images - // - _ce_image_resize(&u3P.nor_u, pat_u->con_u->nor_w); - _ce_image_resize(&u3P.sou_u, pat_u->con_u->sou_w); - - // seek to begining of patch and images - // - if ( (-1 == lseek(pat_u->mem_i, 0, SEEK_SET)) - || (-1 == lseek(u3P.nor_u.fid_i, 0, SEEK_SET)) - || (-1 == lseek(u3P.sou_u.fid_i, 0, SEEK_SET)) ) - { - fprintf(stderr, "loom: patch apply seek 0: %s\r\n", strerror(errno)); - c3_assert(0); - } - - // write patch pages into the appropriate image - // - for ( i_w = 0; i_w < pat_u->con_u->pgs_w; i_w++ ) { - c3_w pag_w = pat_u->con_u->mem_u[i_w].pag_w; - c3_w mem_w[1 << u3a_page]; - c3_i fid_i; - c3_w off_w; - - if ( pag_w < pat_u->con_u->nor_w ) { - fid_i = u3P.nor_u.fid_i; - off_w = pag_w; - } - else { - fid_i = u3P.sou_u.fid_i; - off_w = (u3a_pages - (pag_w + 1)); - } - - if ( -1 == read(pat_u->mem_i, mem_w, (1 << (u3a_page + 2))) ) { - fprintf(stderr, "loom: patch apply read: %s\r\n", strerror(errno)); - c3_assert(0); - } - else { - if ( -1 == lseek(fid_i, (off_w << (u3a_page + 2)), SEEK_SET) ) { - fprintf(stderr, "loom: patch apply seek: %s\r\n", strerror(errno)); - c3_assert(0); - } - if ( -1 == write(fid_i, mem_w, (1 << (u3a_page + 2))) ) { - fprintf(stderr, "loom: patch apply write: %s\r\n", strerror(errno)); - c3_assert(0); - } - } -#if 0 - u3l_log("apply: %d, %x\n", pag_w, u3r_mug_words(mem_w, (1 << u3a_page))); -#endif - } -} - -/* _ce_image_blit(): apply image to memory. -*/ -static void -_ce_image_blit(u3e_image* img_u, - c3_w* ptr_w, - c3_ws stp_ws) -{ - if ( 0 == img_u->pgs_w ) { - return; - } - - c3_w i_w; - c3_w siz_w = 1 << (u3a_page + 2); - - lseek(img_u->fid_i, 0, SEEK_SET); - for ( i_w = 0; i_w < img_u->pgs_w; i_w++ ) { - if ( -1 == read(img_u->fid_i, ptr_w, siz_w) ) { - fprintf(stderr, "loom: image blit read: %s\r\n", strerror(errno)); - c3_assert(0); - } - - if ( 0 != mprotect(ptr_w, siz_w, PROT_READ) ) { - fprintf(stderr, "loom: live mprotect: %s\r\n", strerror(errno)); - c3_assert(0); - } - - c3_w pag_w = u3a_outa(ptr_w) >> u3a_page; - c3_w blk_w = pag_w >> 5; - c3_w bit_w = pag_w & 31; - u3P.dit_w[blk_w] &= ~(1 << bit_w); - - ptr_w += stp_ws; - } -} - -#ifdef U3_SNAPSHOT_VALIDATION -/* _ce_image_fine(): compare image to memory. -*/ -static void -_ce_image_fine(u3e_image* img_u, - c3_w* ptr_w, - c3_ws stp_ws) -{ - c3_w i_w; - c3_w buf_w[1 << u3a_page]; - - lseek(img_u->fid_i, 0, SEEK_SET); - for ( i_w=0; i_w < img_u->pgs_w; i_w++ ) { - c3_w mem_w, fil_w; - - if ( -1 == read(img_u->fid_i, buf_w, (1 << (u3a_page + 2))) ) { - fprintf(stderr, "loom: image fine read: %s\r\n", strerror(errno)); - c3_assert(0); - } - mem_w = u3r_mug_words(ptr_w, (1 << u3a_page)); - fil_w = u3r_mug_words(buf_w, (1 << u3a_page)); - - if ( mem_w != fil_w ) { - c3_w pag_w = (ptr_w - u3_Loom) >> u3a_page; - - fprintf(stderr, "mismatch: page %d, mem_w %x, fil_w %x, K %x\r\n", - pag_w, - mem_w, - fil_w, - u3K.mug_w[pag_w]); - abort(); - } - ptr_w += stp_ws; - } -} -#endif - -/* _ce_image_copy(): -*/ -static c3_o -_ce_image_copy(u3e_image* fom_u, u3e_image* tou_u) -{ - c3_w i_w; - - // resize images - // - _ce_image_resize(tou_u, fom_u->pgs_w); - - // seek to begining of patch and images - // - if ( (-1 == lseek(fom_u->fid_i, 0, SEEK_SET)) - || (-1 == lseek(tou_u->fid_i, 0, SEEK_SET)) ) - { - fprintf(stderr, "loom: image copy seek 0: %s\r\n", strerror(errno)); - return c3n; - } - - // copy pages into destination image - // - for ( i_w = 0; i_w < fom_u->pgs_w; i_w++ ) { - c3_w mem_w[1 << u3a_page]; - c3_w off_w = i_w; - - if ( -1 == read(fom_u->fid_i, mem_w, (1 << (u3a_page + 2))) ) { - fprintf(stderr, "loom: image copy read: %s\r\n", strerror(errno)); - return c3n; - } - else { - if ( -1 == lseek(tou_u->fid_i, (off_w << (u3a_page + 2)), SEEK_SET) ) { - fprintf(stderr, "loom: image copy seek: %s\r\n", strerror(errno)); - return c3n; - } - if ( -1 == write(tou_u->fid_i, mem_w, (1 << (u3a_page + 2))) ) { - fprintf(stderr, "loom: image copy write: %s\r\n", strerror(errno)); - return c3n; - } - } - } - - return c3y; -} - -/* _ce_backup(); -*/ -static void -_ce_backup(void) -{ - u3e_image nop_u = { .nam_c = "north", .pgs_w = 0 }; - u3e_image sop_u = { .nam_c = "south", .pgs_w = 0 }; - c3_i mod_i = O_RDWR | O_CREAT; - c3_c ful_c[8193]; - - snprintf(ful_c, 8192, "%s/.urb/bhk", u3P.dir_c); - - if ( c3_mkdir(ful_c, 0700) ) { - if ( EEXIST != errno ) { - fprintf(stderr, "loom: image backup: %s\r\n", strerror(errno)); - } - return; - } - - snprintf(ful_c, 8192, "%s/.urb/bhk/%s.bin", u3P.dir_c, nop_u.nam_c); - - if ( -1 == (nop_u.fid_i = c3_open(ful_c, mod_i, 0666)) ) { - fprintf(stderr, "loom: c3_open %s: %s\r\n", ful_c, strerror(errno)); - return; - } - - snprintf(ful_c, 8192, "%s/.urb/bhk/%s.bin", u3P.dir_c, sop_u.nam_c); - - if ( -1 == (sop_u.fid_i = c3_open(ful_c, mod_i, 0666)) ) { - fprintf(stderr, "loom: c3_open %s: %s\r\n", ful_c, strerror(errno)); - return; - } - - if ( (c3n == _ce_image_copy(&u3P.nor_u, &nop_u)) - || (c3n == _ce_image_copy(&u3P.sou_u, &sop_u)) ) - { - - c3_unlink(ful_c); - snprintf(ful_c, 8192, "%s/.urb/bhk/%s.bin", u3P.dir_c, nop_u.nam_c); - c3_unlink(ful_c); - snprintf(ful_c, 8192, "%s/.urb/bhk", u3P.dir_c); - c3_rmdir(ful_c); - } - - close(nop_u.fid_i); - close(sop_u.fid_i); -} - -/* - u3e_save(): save current changes. - - If we are in dry-run mode, do nothing. - - First, call `_ce_patch_compose` to write all dirty pages to disk and - clear protection and dirty bits. If there were no dirty pages to write, - then we're done. - - - Sync the patch files to disk. - - Verify the patch (because why not?) - - Write the patch data into the image file (This is idempotent.). - - Sync the image file. - - Delete the patchfile and free it. - - Once we've written the dirty pages to disk (and have reset their dirty bits - and protection flags), we *could* handle the rest of the checkpointing - process in a separate thread, but we'd need to wait until that finishes - before we try to make another snapshot. -*/ -void -u3e_save(void) -{ - u3_ce_patch* pat_u; - - if ( u3C.wag_w & u3o_dryrun ) { - return; - } - - if ( !(pat_u = _ce_patch_compose()) ) { - return; - } - - // u3a_print_memory(stderr, "sync: save", 4096 * pat_u->con_u->pgs_w); - - _ce_patch_sync(pat_u); - - if ( c3n == _ce_patch_verify(pat_u) ) { - c3_assert(!"loom: save failed"); - } - - _ce_patch_apply(pat_u); - -#ifdef U3_SNAPSHOT_VALIDATION - { - _ce_image_fine(&u3P.nor_u, - u3_Loom, - (1 << u3a_page)); - - _ce_image_fine(&u3P.sou_u, - (u3_Loom + (1 << u3a_bits) - (1 << u3a_page)), - -(1 << u3a_page)); - - c3_assert(u3P.nor_u.pgs_w == u3K.nor_w); - c3_assert(u3P.sou_u.pgs_w == u3K.sou_w); - } -#endif - - _ce_image_sync(&u3P.nor_u); - _ce_image_sync(&u3P.sou_u); - _ce_patch_free(pat_u); - _ce_patch_delete(); - - _ce_backup(); -} - -/* u3e_live(): start the checkpointing system. -*/ -c3_o -u3e_live(c3_o nuu_o, c3_c* dir_c) -{ - // require that our page size is a multiple of the system page size. - // - c3_assert(0 == (1 << (2 + u3a_page)) % sysconf(_SC_PAGESIZE)); - - u3P.dir_c = dir_c; - u3P.nor_u.nam_c = "north"; - u3P.sou_u.nam_c = "south"; - - // XX review dryrun requirements, enable or remove - // -#if 0 - if ( u3C.wag_w & u3o_dryrun ) { - return c3y; - } else -#endif - { - // Open image files. - // - if ( (c3n == _ce_image_open(&u3P.nor_u)) || - (c3n == _ce_image_open(&u3P.sou_u)) ) - { - fprintf(stderr, "boot: image failed\r\n"); - exit(1); - } - else { - u3_ce_patch* pat_u; - - /* Load any patch files; apply them to images. - */ - if ( 0 != (pat_u = _ce_patch_open()) ) { - _ce_patch_apply(pat_u); - _ce_image_sync(&u3P.nor_u); - _ce_image_sync(&u3P.sou_u); - _ce_patch_free(pat_u); - _ce_patch_delete(); - } - - // mark all pages dirty (pages in the snapshot will be marked clean) - // - u3e_foul(); - - /* Write image files to memory; reinstate protection. - */ - { - _ce_image_blit(&u3P.nor_u, - u3_Loom, - (1 << u3a_page)); - - _ce_image_blit(&u3P.sou_u, - (u3_Loom + (1 << u3a_bits) - (1 << u3a_page)), - -(1 << u3a_page)); - - u3l_log("boot: protected loom\r\n"); - } - - /* If the images were empty, we are logically booting. - */ - if ( (0 == u3P.nor_u.pgs_w) && (0 == u3P.sou_u.pgs_w) ) { - u3l_log("live: logical boot\r\n"); - nuu_o = c3y; - } - else { - u3a_print_memory(stderr, "live: loaded", - (u3P.nor_u.pgs_w + u3P.sou_u.pgs_w) << u3a_page); - } - } - } - return nuu_o; -} - -/* u3e_yolo(): disable dirty page tracking, read/write whole loom. -*/ -c3_o -u3e_yolo(void) -{ - // NB: u3e_save() will reinstate protection flags - // - if ( 0 != mprotect((void *)u3_Loom, u3a_bytes, (PROT_READ | PROT_WRITE)) ) { - return c3n; - } - - return c3y; -} - -/* u3e_foul(): dirty all the pages of the loom. -*/ -void -u3e_foul(void) -{ - memset((void*)u3P.dit_w, 0xff, sizeof(u3P.dit_w)); -} diff --git a/pkg/urbit/noun/hashtable.c b/pkg/urbit/noun/hashtable.c deleted file mode 100644 index 63b3df87f..000000000 --- a/pkg/urbit/noun/hashtable.c +++ /dev/null @@ -1,1223 +0,0 @@ -/* g/h.c -** -*/ -#include "all.h" - -/* CUT_END(): extract [b_w] low bits from [a_w] -*/ -#define CUT_END(a_w, b_w) (a_w & ((1 << b_w) - 1)) - -/* BIT_SET(): [1] if bit [b_w] is set in [a_w] -*/ -#define BIT_SET(a_w, b_w) (a_w & (1 << b_w)) - -static c3_o -_ch_trim_slot(u3h_root* har_u, u3h_slot *sot_w, c3_w lef_w, c3_w rem_w); - -c3_w -_ch_skip_slot(c3_w mug_w, c3_w lef_w); - -/* u3h_new_cache(): create hashtable with bounded size. -*/ -u3p(u3h_root) -u3h_new_cache(c3_w max_w) -{ - u3h_root* har_u = u3a_walloc(c3_wiseof(u3h_root)); - u3p(u3h_root) har_p = u3of(u3h_root, har_u); - c3_w i_w; - - har_u->max_w = max_w; - har_u->use_w = 0; - har_u->arm_u.mug_w = 0; - har_u->arm_u.inx_w = 0; - - for ( i_w = 0; i_w < 64; i_w++ ) { - har_u->sot_w[i_w] = 0; - } - return har_p; -} - -/* u3h_new(): create hashtable. -*/ -u3p(u3h_root) -u3h_new(void) -{ - return u3h_new_cache(0); -} - -/* _ch_popcount(): number of bits set in word. A standard intrinsic. -*/ -static c3_w -_ch_popcount(c3_w num_w) -{ - return __builtin_popcount(num_w); -} - -/* _ch_buck_new(): create new bucket. -*/ -static u3h_buck* -_ch_buck_new(c3_w len_w) -{ - u3h_buck* hab_u = u3a_walloc(c3_wiseof(u3h_buck) + - (len_w * c3_wiseof(u3h_slot))); - hab_u->len_w = len_w; - return hab_u; -} - -/* _ch_node_new(): create new node. -*/ -static u3h_node* -_ch_node_new(c3_w len_w) -{ - u3h_node* han_u = u3a_walloc(c3_wiseof(u3h_node) + - (len_w * c3_wiseof(u3h_slot))); - han_u->map_w = 0; - return han_u; -} - -static void _ch_slot_put(u3h_slot*, u3_noun, c3_w, c3_w, c3_w*); - -/* _ch_node_add(): add to node. -*/ -static u3h_node* -_ch_node_add(u3h_node* han_u, c3_w lef_w, c3_w rem_w, u3_noun kev, c3_w *use_w) -{ - c3_w bit_w, inx_w, map_w, i_w; - - lef_w -= 5; - bit_w = (rem_w >> lef_w); - rem_w = CUT_END(rem_w, lef_w); - map_w = han_u->map_w; - inx_w = _ch_popcount(CUT_END(map_w, bit_w)); - - if ( BIT_SET(map_w, bit_w) ) { - _ch_slot_put(&(han_u->sot_w[inx_w]), kev, lef_w, rem_w, use_w); - return han_u; - } - else { - // nothing was at this slot. - // Optimize: use u3a_wealloc. - // - c3_w len_w = _ch_popcount(map_w); - u3h_node* nah_u = _ch_node_new(1 + len_w); - nah_u->map_w = han_u->map_w | (1 << bit_w); - - for ( i_w = 0; i_w < inx_w; i_w++ ) { - nah_u->sot_w[i_w] = han_u->sot_w[i_w]; - } - nah_u->sot_w[inx_w] = u3h_noun_be_warm(u3h_noun_to_slot(kev)); - for ( i_w = inx_w; i_w < len_w; i_w++ ) { - nah_u->sot_w[i_w + 1] = han_u->sot_w[i_w]; - } - - u3a_wfree(han_u); - *use_w += 1; - return nah_u; - } -} - -/* ch_buck_add(): add to bucket. -*/ -static u3h_buck* -_ch_buck_add(u3h_buck* hab_u, u3_noun kev, c3_w *use_w) -{ - c3_w i_w; - - // if our key is equal to any of the existing keys in the bucket, - // then replace that key-value pair with kev. - // - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - u3_noun kov = u3h_slot_to_noun(hab_u->sot_w[i_w]); - if ( c3y == u3r_sing(u3h(kev), u3h(kov)) ) { - hab_u->sot_w[i_w] = u3h_noun_to_slot(kev); - u3z(kov); - return hab_u; - } - } - - // create mutant bucket with added key-value pair. - // Optimize: use u3a_wealloc(). - { - u3h_buck* bah_u = _ch_buck_new(1 + hab_u->len_w); - bah_u->sot_w[0] = u3h_noun_be_warm(u3h_noun_to_slot(kev)); - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - bah_u->sot_w[i_w + 1] = hab_u->sot_w[i_w]; - } - - u3a_wfree(hab_u); - *use_w += 1; - return bah_u; - } -} - -/* _ch_some_add(): add to node or bucket. -*/ -static void* -_ch_some_add(void* han_v, c3_w lef_w, c3_w rem_w, u3_noun kev, c3_w *use_w) -{ - if ( 0 == lef_w ) { - return _ch_buck_add((u3h_buck*)han_v, kev, use_w); - } - else return _ch_node_add((u3h_node*)han_v, lef_w, rem_w, kev, use_w); -} - -/* _ch_two(): create a new node with two leaves underneath -*/ -u3h_slot -_ch_two(u3h_slot had_w, u3h_slot add_w, c3_w lef_w, c3_w ham_w, c3_w mad_w) -{ - void* ret; - - if ( 0 == lef_w ) { - u3h_buck* hab_u = _ch_buck_new(2); - ret = hab_u; - hab_u->sot_w[0] = had_w; - hab_u->sot_w[1] = add_w; - } - else { - c3_w hop_w, tad_w; - lef_w -= 5; - hop_w = ham_w >> lef_w; - tad_w = mad_w >> lef_w; - if ( hop_w == tad_w ) { - // fragments collide: store in a child node. - u3h_node* han_u = _ch_node_new(1); - ret = han_u; - han_u->map_w = 1 << hop_w; - ham_w = CUT_END(ham_w, lef_w); - mad_w = CUT_END(mad_w, lef_w); - han_u->sot_w[0] = _ch_two(had_w, add_w, lef_w, ham_w, mad_w); - } - else { - u3h_node* han_u = _ch_node_new(2); - ret = han_u; - han_u->map_w = (1 << hop_w) | (1 << tad_w); - // smaller mug fragments go in earlier slots - if ( hop_w < tad_w ) { - han_u->sot_w[0] = had_w; - han_u->sot_w[1] = add_w; - } - else { - han_u->sot_w[0] = add_w; - han_u->sot_w[1] = had_w; - } - } - } - - return u3h_node_to_slot(ret); -} - -/* _ch_slot_put(): store a key-value pair in a non-null slot -*/ -static void -_ch_slot_put(u3h_slot* sot_w, u3_noun kev, c3_w lef_w, c3_w rem_w, c3_w* use_w) -{ - if ( c3n == u3h_slot_is_noun(*sot_w) ) { - void* hav_v = _ch_some_add(u3h_slot_to_node(*sot_w), - lef_w, - rem_w, - kev, - use_w); - - c3_assert( c3y == u3h_slot_is_node(*sot_w) ); - *sot_w = u3h_node_to_slot(hav_v); - } - else { - u3_noun kov = u3h_slot_to_noun(*sot_w); - u3h_slot add_w = u3h_noun_be_warm(u3h_noun_to_slot(kev)); - if ( c3y == u3r_sing(u3h(kev), u3h(kov)) ) { - // replace old value - u3z(kov); - *sot_w = add_w; - } - else { - c3_w ham_w = CUT_END(u3r_mug(u3h(kov)), lef_w); - *sot_w = _ch_two(*sot_w, add_w, lef_w, ham_w, rem_w); - *use_w += 1; - } - } -} - -/* u3h_put(): insert in hashtable. -** -** `key` is RETAINED; `val` is transferred. -*/ -void -u3h_put(u3p(u3h_root) har_p, u3_noun key, u3_noun val) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - u3_noun kev = u3nc(u3k(key), val); - c3_w mug_w = u3r_mug(key); - c3_w inx_w = (mug_w >> 25); // 6 bits - c3_w rem_w = CUT_END(mug_w, 25); - u3h_slot* sot_w = &(har_u->sot_w[inx_w]); - - if ( c3y == u3h_slot_is_null(*sot_w) ) { - *sot_w = u3h_noun_be_warm(u3h_noun_to_slot(kev)); - har_u->use_w += 1; - } - else { - _ch_slot_put(sot_w, kev, 25, rem_w, &(har_u->use_w)); - } - - if ( har_u->max_w > 0 ) { - u3h_trim_to(har_p, har_u->max_w); - } -} - -/* _ch_uni_with(): key/value callback, put into [*wit] -*/ -static void -_ch_uni_with(u3_noun kev, void* wit) -{ - u3p(u3h_root) har_p = *(u3p(u3h_root)*)wit; - u3_noun key, val; - u3x_cell(kev, &key, &val); - - u3h_put(har_p, key, u3k(val)); -} - -/* u3h_uni(): unify hashtables, copying [rah_p] into [har_p] -*/ -void -u3h_uni(u3p(u3h_root) har_p, u3p(u3h_root) rah_p) -{ - u3h_walk_with(rah_p, _ch_uni_with, &har_p); -} - -/* _ch_trim_node(): trim one entry from a node slot or its children -*/ -static c3_o -_ch_trim_node(u3h_root* har_u, u3h_slot* sot_w, c3_w lef_w, c3_w rem_w) -{ - c3_w bit_w, map_w, inx_w; - u3h_slot* tos_w; - u3h_node* han_u = (u3h_node*) u3h_slot_to_node(*sot_w); - - lef_w -= 5; - bit_w = (rem_w >> lef_w); - map_w = han_u->map_w; - - if ( !BIT_SET(map_w, bit_w) ) { - har_u->arm_u.mug_w = _ch_skip_slot(har_u->arm_u.mug_w, lef_w); - return c3n; - } - - rem_w = CUT_END(rem_w, lef_w); - inx_w = _ch_popcount(CUT_END(map_w, bit_w)); - tos_w = &(han_u->sot_w[inx_w]); - - if ( c3n == _ch_trim_slot(har_u, tos_w, lef_w, rem_w) ) { - // nothing trimmed - return c3n; - } - else if ( 0 != *tos_w ) { - // something trimmed, but slot still has value - return c3y; - } - else { - // shrink! - c3_w i_w, ken_w, len_w = _ch_popcount(map_w); - u3h_slot kes_w; - - if ( 2 == len_w && ((ken_w = (0 == inx_w) ? 1 : 0), - (kes_w = han_u->sot_w[ken_w]), - (c3y == u3h_slot_is_noun(kes_w))) ) { - // only one side left, and the other is a noun. debucketize. - *sot_w = kes_w; - u3a_wfree(han_u); - } - else { - // shrink node in place; don't reallocate, we could be low on memory - // - han_u->map_w &= ~(1 << bit_w); - --len_w; - - for ( i_w = inx_w; i_w < len_w; i_w++ ) { - han_u->sot_w[i_w] = han_u->sot_w[i_w + 1]; - } - } - return c3y; - } -} - -/* _ch_trim_kev(): trim a single entry slot -*/ -static c3_o -_ch_trim_kev(u3h_slot *sot_w) -{ - if ( _(u3h_slot_is_warm(*sot_w)) ) { - *sot_w = u3h_noun_be_cold(*sot_w); - return c3n; - } - else { - u3_noun kev = u3h_slot_to_noun(*sot_w); - *sot_w = 0; - u3z(kev); - return c3y; - } -} - -/* _ch_trim_node(): trim one entry from a bucket slot -*/ -static c3_o -_ch_trim_buck(u3h_root* har_u, u3h_slot* sot_w) -{ - c3_w i_w, len_w; - u3h_buck* hab_u = u3h_slot_to_node(*sot_w); - - for ( len_w = hab_u->len_w; - har_u->arm_u.inx_w < len_w; - har_u->arm_u.inx_w += 1 ) - { - if ( c3y == _ch_trim_kev(&(hab_u->sot_w[har_u->arm_u.inx_w])) ) { - if ( 2 == len_w ) { - // 2 things in bucket: debucketize to key-value pair, the next - // run will point at this pair (same mug_w, no longer in bucket) - *sot_w = hab_u->sot_w[ (0 == har_u->arm_u.inx_w) ? 1 : 0 ]; - u3a_wfree(hab_u); - har_u->arm_u.inx_w = 0; - } - else { - // shrink bucket in place; don't reallocate, we could be low on memory - hab_u->len_w = --len_w; - - for ( i_w = har_u->arm_u.inx_w; i_w < len_w; ++i_w ) { - hab_u->sot_w[i_w] = hab_u->sot_w[i_w + 1]; - } - // leave the arm pointing at the next index in the bucket - ++(har_u->arm_u.inx_w); - } - return c3y; - } - } - - har_u->arm_u.mug_w = (har_u->arm_u.mug_w + 1) & 0x7FFFFFFF; // modulo 2^31 - har_u->arm_u.inx_w = 0; - return c3n; -} - -/* _ch_trim_some(): trim one entry from a bucket or node slot -*/ -static c3_o -_ch_trim_some(u3h_root* har_u, u3h_slot* sot_w, c3_w lef_w, c3_w rem_w) -{ - if ( 0 == lef_w ) { - return _ch_trim_buck(har_u, sot_w); - } - else { - return _ch_trim_node(har_u, sot_w, lef_w, rem_w); - } -} - -/* _ch_skip_slot(): increment arm over hash prefix. -*/ -c3_w -_ch_skip_slot(c3_w mug_w, c3_w lef_w) -{ - c3_w hig_w = mug_w >> lef_w; - c3_w new_w = CUT_END(hig_w + 1, (31 - lef_w)); // modulo 2^(31 - lef_w) - return new_w << lef_w; -} - -/* _ch_trim_slot(): trim one entry from a non-bucket slot -*/ -static c3_o -_ch_trim_slot(u3h_root* har_u, u3h_slot *sot_w, c3_w lef_w, c3_w rem_w) -{ - if ( c3y == u3h_slot_is_noun(*sot_w) ) { - har_u->arm_u.mug_w = _ch_skip_slot(har_u->arm_u.mug_w, lef_w); - return _ch_trim_kev(sot_w); - } - else { - return _ch_trim_some(har_u, sot_w, lef_w, rem_w); - } -} - -/* _ch_trim_root(): trim one entry from a hashtable -*/ -static c3_o -_ch_trim_root(u3h_root* har_u) -{ - c3_w mug_w = har_u->arm_u.mug_w; - c3_w inx_w = mug_w >> 25; // 6 bits - u3h_slot* sot_w = &(har_u->sot_w[inx_w]); - - if ( c3y == u3h_slot_is_null(*sot_w) ) { - har_u->arm_u.mug_w = _ch_skip_slot(har_u->arm_u.mug_w, 25); - return c3n; - } - - return _ch_trim_slot(har_u, sot_w, 25, CUT_END(mug_w, 25)); -} - -/* u3h_trim_to(): trim to n key-value pairs -*/ -void -u3h_trim_to(u3p(u3h_root) har_p, c3_w n_w) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - - while ( har_u->use_w > n_w ) { - if ( c3y == _ch_trim_root(har_u) ) { - har_u->use_w -= 1; - } - } -} - -/* _ch_buck_hum(): read in bucket. -*/ -static c3_o -_ch_buck_hum(u3h_buck* hab_u, c3_w mug_w) -{ - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - if ( mug_w == u3r_mug(u3h(u3h_slot_to_noun(hab_u->sot_w[i_w]))) ) { - return c3y; - } - } - return c3n; -} - -/* _ch_node_hum(): read in node. -*/ -static c3_o -_ch_node_hum(u3h_node* han_u, c3_w lef_w, c3_w rem_w, c3_w mug_w) -{ - c3_w bit_w, map_w; - - lef_w -= 5; - bit_w = (rem_w >> lef_w); - rem_w = CUT_END(rem_w, lef_w); - map_w = han_u->map_w; - - if ( !BIT_SET(map_w, bit_w) ) { - return c3n; - } - else { - c3_w inx_w = _ch_popcount(CUT_END(map_w, bit_w)); - c3_w sot_w = han_u->sot_w[inx_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - if ( mug_w == u3r_mug(u3h(kev)) ) { - return c3y; - } - else { - return c3n; - } - } - else { - void* hav_v = u3h_slot_to_node(sot_w); - - if ( 0 == lef_w ) { - return _ch_buck_hum(hav_v, mug_w); - } - else return _ch_node_hum(hav_v, lef_w, rem_w, mug_w); - } - } -} - -/* u3h_hum(): check presence in hashtable. -** -** `key` is RETAINED. -*/ -c3_o -u3h_hum(u3p(u3h_root) har_p, c3_w mug_w) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - c3_w inx_w = (mug_w >> 25); - c3_w rem_w = CUT_END(mug_w, 25); - c3_w sot_w = har_u->sot_w[inx_w]; - - if ( _(u3h_slot_is_null(sot_w)) ) { - return c3n; - } - else if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - if ( mug_w == u3r_mug(u3h(kev)) ) { - return c3y; - } - else { - return c3n; - } - } - else { - u3h_node* han_u = u3h_slot_to_node(sot_w); - - return _ch_node_hum(han_u, 25, rem_w, mug_w); - } -} - -/* _ch_buck_git(): read in bucket. -*/ -static u3_weak -_ch_buck_git(u3h_buck* hab_u, u3_noun key) -{ - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - u3_noun kev = u3h_slot_to_noun(hab_u->sot_w[i_w]); - if ( _(u3r_sing(key, u3h(kev))) ) { - return u3t(kev); - } - } - return u3_none; -} - -/* _ch_node_git(): read in node. -*/ -static u3_weak -_ch_node_git(u3h_node* han_u, c3_w lef_w, c3_w rem_w, u3_noun key) -{ - c3_w bit_w, map_w; - - lef_w -= 5; - bit_w = (rem_w >> lef_w); - rem_w = CUT_END(rem_w, lef_w); - map_w = han_u->map_w; - - if ( !BIT_SET(map_w, bit_w) ) { - return u3_none; - } - else { - c3_w inx_w = _ch_popcount(CUT_END(map_w, bit_w)); - c3_w sot_w = han_u->sot_w[inx_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - if ( _(u3r_sing(key, u3h(kev))) ) { - return u3t(kev); - } - else { - return u3_none; - } - } - else { - void* hav_v = u3h_slot_to_node(sot_w); - - if ( 0 == lef_w ) { - return _ch_buck_git(hav_v, key); - } - else return _ch_node_git(hav_v, lef_w, rem_w, key); - } - } -} - -/* u3h_git(): read from hashtable. -** -** `key` is RETAINED; result is RETAINED. -*/ -u3_weak -u3h_git(u3p(u3h_root) har_p, u3_noun key) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - c3_w mug_w = u3r_mug(key); - c3_w inx_w = (mug_w >> 25); - c3_w rem_w = CUT_END(mug_w, 25); - c3_w sot_w = har_u->sot_w[inx_w]; - - if ( _(u3h_slot_is_null(sot_w)) ) { - return u3_none; - } - else if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - if ( _(u3r_sing(key, u3h(kev))) ) { - har_u->sot_w[inx_w] = u3h_noun_be_warm(sot_w); - return u3t(kev); - } - else { - return u3_none; - } - } - else { - u3h_node* han_u = u3h_slot_to_node(sot_w); - - return _ch_node_git(han_u, 25, rem_w, key); - } -} - -/* u3h_get(): read from hashtable, incrementing refcount. -** -** `key` is RETAINED; result is PRODUCED. -*/ -u3_weak -u3h_get(u3p(u3h_root) har_p, u3_noun key) -{ - u3_noun pro = u3h_git(har_p, key); - - if ( u3_none != pro ) { - u3k(pro); - } - return pro; -} - -/* _ch_free_buck(): free bucket -*/ -static void -_ch_free_buck(u3h_buck* hab_u) -{ - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - u3z(u3h_slot_to_noun(hab_u->sot_w[i_w])); - } - u3a_wfree(hab_u); -} - -/* _ch_free_node(): free node. -*/ -static void -_ch_free_node(u3h_node* han_u, c3_w lef_w) -{ - c3_w len_w = _ch_popcount(han_u->map_w); - c3_w i_w; - - lef_w -= 5; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w sot_w = han_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3z(u3h_slot_to_noun(sot_w)); - } - else { - void* hav_v = u3h_slot_to_node(sot_w); - - if ( 0 == lef_w ) { - _ch_free_buck(hav_v); - } else { - _ch_free_node(hav_v, lef_w); - } - } - } - u3a_wfree(han_u); -} - -/* u3h_free(): free hashtable. -*/ -void -u3h_free(u3p(u3h_root) har_p) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - c3_w i_w; - - for ( i_w = 0; i_w < 64; i_w++ ) { - c3_w sot_w = har_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3z(u3h_slot_to_noun(sot_w)); - } - else if ( _(u3h_slot_is_node(sot_w)) ) { - u3h_node* han_u = u3h_slot_to_node(sot_w); - - _ch_free_node(han_u, 25); - } - } - u3a_wfree(har_u); -} - -/* _ch_walk_buck(): walk bucket for gc. -*/ -static void -_ch_walk_buck(u3h_buck* hab_u, void (*fun_f)(u3_noun, void*), void* wit) -{ - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - fun_f(u3h_slot_to_noun(hab_u->sot_w[i_w]), wit); - } -} - -/* _ch_walk_node(): walk node for gc. -*/ -static void -_ch_walk_node(u3h_node* han_u, c3_w lef_w, void (*fun_f)(u3_noun, void*), void* wit) -{ - c3_w len_w = _ch_popcount(han_u->map_w); - c3_w i_w; - - lef_w -= 5; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w sot_w = han_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - fun_f(kev, wit); - } - else { - void* hav_v = u3h_slot_to_node(sot_w); - - if ( 0 == lef_w ) { - _ch_walk_buck(hav_v, fun_f, wit); - } else { - _ch_walk_node(hav_v, lef_w, fun_f, wit); - } - } - } -} - -/* u3h_walk_with(): traverse hashtable with key, value fn and data - * argument; RETAINS. -*/ -void -u3h_walk_with(u3p(u3h_root) har_p, - void (*fun_f)(u3_noun, void*), - void* wit) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - c3_w i_w; - - for ( i_w = 0; i_w < 64; i_w++ ) { - c3_w sot_w = har_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - fun_f(kev, wit); - } - else if ( _(u3h_slot_is_node(sot_w)) ) { - u3h_node* han_u = u3h_slot_to_node(sot_w); - - _ch_walk_node(han_u, 25, fun_f, wit); - } - } -} - -/* _ch_walk_plain(): use plain u3_noun fun_f for each node - */ -static void -_ch_walk_plain(u3_noun kev, void* wit) -{ - void (*fun_f)(u3_noun) = wit; - fun_f(kev); -} - -/* u3h_walk(): u3h_walk_with, but with no data argument -*/ -void -u3h_walk(u3p(u3h_root) har_p, void (*fun_f)(u3_noun)) -{ - u3h_walk_with(har_p, _ch_walk_plain, fun_f); -} - -/* _ch_take_noun(): take key and call [fun_f] on val. -*/ -static u3h_slot -_ch_take_noun(u3h_slot sot_w, u3_funk fun_f) -{ - u3_noun kov = u3h_slot_to_noun(sot_w); - u3_noun kev = u3nc(u3a_take(u3h(kov)), - fun_f(u3t(kov))); - - return u3h_noun_to_slot(kev); -} - -/* _ch_take_buck(): take bucket and contents -*/ -static u3h_slot -_ch_take_buck(u3h_slot sot_w, u3_funk fun_f) -{ - u3h_buck* hab_u = u3h_slot_to_node(sot_w); - u3h_buck* bah_u = _ch_buck_new(hab_u->len_w); - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - bah_u->sot_w[i_w] = _ch_take_noun(hab_u->sot_w[i_w], fun_f); - } - - return u3h_node_to_slot(bah_u); -} - -/* _ch_take_node(): take node and contents -*/ -static u3h_slot -_ch_take_node(u3h_slot sot_w, c3_w lef_w, u3_funk fun_f) -{ - u3h_node* han_u = u3h_slot_to_node(sot_w); - c3_w len_w = _ch_popcount(han_u->map_w); - u3h_node* nah_u = _ch_node_new(len_w); - c3_w i_w; - - nah_u->map_w = han_u->map_w; - lef_w -= 5; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w tos_w = han_u->sot_w[i_w]; - nah_u->sot_w[i_w] = ( c3y == u3h_slot_is_noun(tos_w) ) - ? _ch_take_noun(tos_w, fun_f) - : ( 0 == lef_w ) - ? _ch_take_buck(tos_w, fun_f) - : _ch_take_node(tos_w, lef_w, fun_f); - } - - return u3h_node_to_slot(nah_u); -} - -/* u3h_take_with(): gain hashtable, copying junior keys -** and calling [fun_f] on values -*/ -u3p(u3h_root) -u3h_take_with(u3p(u3h_root) har_p, u3_funk fun_f) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - u3p(u3h_root) rah_p = u3h_new_cache(har_u->max_w); - u3h_root* rah_u = u3to(u3h_root, rah_p); - c3_w i_w; - - rah_u->use_w = har_u->use_w; - rah_u->arm_u = har_u->arm_u; - - for ( i_w = 0; i_w < 64; i_w++ ) { - c3_w sot_w = har_u->sot_w[i_w]; - rah_u->sot_w[i_w] = ( c3y == u3h_slot_is_noun(sot_w) ) - ? _ch_take_noun(sot_w, fun_f) - : _ch_take_node(sot_w, 25, fun_f); - } - - return rah_p; -} - -/* u3h_take(): gain hashtable, copying junior nouns -*/ -u3p(u3h_root) -u3h_take(u3p(u3h_root) har_p) -{ - return u3h_take_with(har_p, u3a_take); -} - -/* _ch_mark_buck(): mark bucket for gc. -*/ -c3_w -_ch_mark_buck(u3h_buck* hab_u) -{ - c3_w tot_w = 0; - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - tot_w += u3a_mark_noun(u3h_slot_to_noun(hab_u->sot_w[i_w])); - } - tot_w += u3a_mark_ptr(hab_u); - - return tot_w; -} - -/* _ch_mark_node(): mark node for gc. -*/ -c3_w -_ch_mark_node(u3h_node* han_u, c3_w lef_w) -{ - c3_w tot_w = 0; - c3_w len_w = _ch_popcount(han_u->map_w); - c3_w i_w; - - lef_w -= 5; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w sot_w = han_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - tot_w += u3a_mark_noun(kev); - } - else { - void* hav_v = u3h_slot_to_node(sot_w); - - if ( 0 == lef_w ) { - tot_w += _ch_mark_buck(hav_v); - } else { - tot_w += _ch_mark_node(hav_v, lef_w); - } - } - } - - tot_w += u3a_mark_ptr(han_u); - - return tot_w; -} - -/* u3h_mark(): mark hashtable for gc. -*/ -c3_w -u3h_mark(u3p(u3h_root) har_p) -{ - c3_w tot_w = 0; - u3h_root* har_u = u3to(u3h_root, har_p); - c3_w i_w; - - for ( i_w = 0; i_w < 64; i_w++ ) { - c3_w sot_w = har_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - tot_w += u3a_mark_noun(kev); - } - else if ( _(u3h_slot_is_node(sot_w)) ) { - u3h_node* han_u = u3h_slot_to_node(sot_w); - - tot_w += _ch_mark_node(han_u, 25); - } - } - - tot_w += u3a_mark_ptr(har_u); - - return tot_w; -} - -/* _ch_rewrite_buck(): rewrite buck for compaction. -*/ -void -_ch_rewrite_buck(u3h_buck* hab_u) -{ - if ( c3n == u3a_rewrite_ptr(hab_u) ) return; - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - u3_noun som = u3h_slot_to_noun(hab_u->sot_w[i_w]); - hab_u->sot_w[i_w] = u3h_noun_to_slot(u3a_rewritten_noun(som)); - u3a_rewrite_noun(som); - } -} - -/* _ch_rewrite_node(): rewrite node for compaction. -*/ -void -_ch_rewrite_node(u3h_node* han_u, c3_w lef_w) -{ - if ( c3n == u3a_rewrite_ptr(han_u) ) return; - - c3_w len_w = _ch_popcount(han_u->map_w); - c3_w i_w; - - lef_w -= 5; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w sot_w = han_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - han_u->sot_w[i_w] = u3h_noun_to_slot(u3a_rewritten_noun(kev)); - - u3a_rewrite_noun(kev); - } - else { - void* hav_v = u3h_slot_to_node(sot_w); - u3h_node* nod_u = u3to(u3h_node,u3a_rewritten(u3of(u3h_node,hav_v))); - han_u->sot_w[i_w] = u3h_node_to_slot(nod_u); - - if ( 0 == lef_w ) { - _ch_rewrite_buck(hav_v); - } else { - _ch_rewrite_node(hav_v, lef_w); - } - } - } -} - -/* u3h_rewrite(): rewrite pointers during compaction. -*/ -void -u3h_rewrite(u3p(u3h_root) har_p) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - c3_w i_w; - - if ( c3n == u3a_rewrite_ptr(har_u) ) return; - - for ( i_w = 0; i_w < 64; i_w++ ) { - c3_w sot_w = har_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - har_u->sot_w[i_w] = u3h_noun_to_slot(u3a_rewritten_noun(kev)); - - u3a_rewrite_noun(kev); - } - else if ( _(u3h_slot_is_node(sot_w)) ) { - u3h_node* han_u = u3h_slot_to_node(sot_w); - u3h_node* nod_u = u3to(u3h_node,u3a_rewritten(u3of(u3h_node,han_u))); - har_u->sot_w[i_w] = u3h_node_to_slot(nod_u); - - _ch_rewrite_node(han_u, 25); - } - } -} - -/* _ch_count_buck(): count bucket for gc. -*/ -c3_w -_ch_count_buck(u3h_buck* hab_u) -{ - c3_w tot_w = 0; - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - tot_w += u3a_count_noun(u3h_slot_to_noun(hab_u->sot_w[i_w])); - } - tot_w += u3a_count_ptr(hab_u); - - return tot_w; -} - -/* _ch_count_node(): count node for gc. -*/ -c3_w -_ch_count_node(u3h_node* han_u, c3_w lef_w) -{ - c3_w tot_w = 0; - c3_w len_w = _ch_popcount(han_u->map_w); - c3_w i_w; - - lef_w -= 5; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w sot_w = han_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - tot_w += u3a_count_noun(kev); - } - else { - void* hav_v = u3h_slot_to_node(sot_w); - - if ( 0 == lef_w ) { - tot_w += _ch_count_buck(hav_v); - } else { - tot_w += _ch_count_node(hav_v, lef_w); - } - } - } - - tot_w += u3a_count_ptr(han_u); - - return tot_w; -} - -/* u3h_count(): count hashtable for gc. -*/ -c3_w -u3h_count(u3p(u3h_root) har_p) -{ - c3_w tot_w = 0; - u3h_root* har_u = u3to(u3h_root, har_p); - c3_w i_w; - - for ( i_w = 0; i_w < 64; i_w++ ) { - c3_w sot_w = har_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - tot_w += u3a_count_noun(kev); - } - else if ( _(u3h_slot_is_node(sot_w)) ) { - u3h_node* han_u = u3h_slot_to_node(sot_w); - - tot_w += _ch_count_node(han_u, 25); - } - } - - tot_w += u3a_count_ptr(har_u); - - return tot_w; -} - -/* _ch_discount_buck(): discount bucket for gc. -*/ -c3_w -_ch_discount_buck(u3h_buck* hab_u) -{ - c3_w tot_w = 0; - c3_w i_w; - - for ( i_w = 0; i_w < hab_u->len_w; i_w++ ) { - tot_w += u3a_discount_noun(u3h_slot_to_noun(hab_u->sot_w[i_w])); - } - tot_w += u3a_discount_ptr(hab_u); - - return tot_w; -} - -/* _ch_discount_node(): discount node for gc. -*/ -c3_w -_ch_discount_node(u3h_node* han_u, c3_w lef_w) -{ - c3_w tot_w = 0; - c3_w len_w = _ch_popcount(han_u->map_w); - c3_w i_w; - - lef_w -= 5; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w sot_w = han_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - tot_w += u3a_discount_noun(kev); - } - else { - void* hav_v = u3h_slot_to_node(sot_w); - - if ( 0 == lef_w ) { - tot_w += _ch_discount_buck(hav_v); - } else { - tot_w += _ch_discount_node(hav_v, lef_w); - } - } - } - - tot_w += u3a_discount_ptr(han_u); - - return tot_w; -} - -/* u3h_discount(): discount hashtable for gc. -*/ -c3_w -u3h_discount(u3p(u3h_root) har_p) -{ - c3_w tot_w = 0; - u3h_root* har_u = u3to(u3h_root, har_p); - c3_w i_w; - - for ( i_w = 0; i_w < 64; i_w++ ) { - c3_w sot_w = har_u->sot_w[i_w]; - - if ( _(u3h_slot_is_noun(sot_w)) ) { - u3_noun kev = u3h_slot_to_noun(sot_w); - - tot_w += u3a_discount_noun(kev); - } - else if ( _(u3h_slot_is_node(sot_w)) ) { - u3h_node* han_u = u3h_slot_to_node(sot_w); - - tot_w += _ch_discount_node(han_u, 25); - } - } - - tot_w += u3a_discount_ptr(har_u); - - return tot_w; -} - -/* u3h_wyt(): number of entries -*/ -c3_w -u3h_wyt(u3p(u3h_root) har_p) -{ - u3h_root* har_u = u3to(u3h_root, har_p); - return har_u->use_w; -} diff --git a/pkg/urbit/noun/imprison.c b/pkg/urbit/noun/imprison.c deleted file mode 100644 index b34b9d884..000000000 --- a/pkg/urbit/noun/imprison.c +++ /dev/null @@ -1,838 +0,0 @@ -/* noun/imprison.c -** -*/ -#include "all.h" - -/* _ci_slab_size(): calculate slab bloq-size, checking for overflow. -*/ -static c3_w -_ci_slab_size(c3_g met_g, c3_d len_d) -{ - c3_d bit_d = len_d << met_g; - c3_d wor_d = (bit_d + 0x1f) >> 5; - c3_w wor_w = (c3_w)wor_d; - - if ( (wor_w != wor_d) - || (len_d != (bit_d >> met_g)) ) - { - return (c3_w)u3m_bail(c3__fail); - } - - return wor_w; -} - -/* _ci_slab_init(): initialize slab with heap allocation. -** NB: callers must ensure [len_w] >0 -*/ -static void -_ci_slab_init(u3i_slab* sab_u, c3_w len_w) -{ - c3_w* nov_w = u3a_walloc(len_w + c3_wiseof(u3a_atom)); - u3a_atom* vat_u = (void *)nov_w; - - vat_u->mug_w = 0; - vat_u->len_w = len_w; - -#ifdef U3_MEMORY_DEBUG - c3_assert( len_w ); -#endif - - sab_u->_._vat_u = vat_u; - sab_u->buf_w = vat_u->buf_w; - sab_u->len_w = len_w; -} - -/* _ci_slab_grow(): update slab with heap reallocation. -*/ -static void -_ci_slab_grow(u3i_slab* sab_u, c3_w len_w) -{ - c3_w* old_w = (void*)sab_u->_._vat_u; - // XX implement a more efficient u3a_wealloc() - // - c3_w* nov_w = u3a_wealloc(old_w, len_w + c3_wiseof(u3a_atom)); - u3a_atom* vat_u = (void *)nov_w; - - vat_u->len_w = len_w; - - sab_u->_._vat_u = vat_u; - sab_u->buf_w = vat_u->buf_w; - sab_u->len_w = len_w; -} - -/* _ci_atom_mint(): finalize a heap-allocated atom at specified length. -*/ -static u3_atom -_ci_atom_mint(u3a_atom* vat_u, c3_w len_w) -{ - c3_w* nov_w = (void*)vat_u; - - if ( 0 == len_w ) { - u3a_wfree(nov_w); - return (u3_atom)0; - } - else if ( 1 == len_w ) { - c3_w dat_w = *vat_u->buf_w; - - if ( c3y == u3a_is_cat(dat_w) ) { - u3a_wfree(nov_w); - return (u3_atom)dat_w; - } - } - - // try to strip a block off the end - // - { - c3_w old_w = vat_u->len_w; - - if ( old_w > len_w ) { - c3_y wiz_y = c3_wiseof(u3a_atom); - u3a_wtrim(nov_w, old_w + wiz_y, len_w + wiz_y); - } - } - - vat_u->len_w = len_w; - - return u3a_to_pug(u3a_outa(nov_w)); -} - -/* u3i_slab_init(): configure bloq-length slab, zero-initialize. -*/ -void -u3i_slab_init(u3i_slab* sab_u, c3_g met_g, c3_d len_d) -{ - u3i_slab_bare(sab_u, met_g, len_d); - - u3t_on(mal_o); - memset(sab_u->buf_y, 0, (size_t)sab_u->len_w * 4); - u3t_off(mal_o); -} - -/* u3i_slab_bare(): configure bloq-length slab, uninitialized. -*/ -void -u3i_slab_bare(u3i_slab* sab_u, c3_g met_g, c3_d len_d) -{ - u3t_on(mal_o); - { - c3_w wor_w = _ci_slab_size(met_g, len_d); - - // if we only need one word, use the static storage in [sab_u] - // - if ( (0 == wor_w) || (1 == wor_w) ) { - sab_u->_._vat_u = 0; - sab_u->buf_w = &sab_u->_._sat_w; - sab_u->len_w = 1; - } - // allocate an indirect atom - // - else { - _ci_slab_init(sab_u, wor_w); - } - } - u3t_off(mal_o); -} - -/* u3i_slab_from(): configure bloq-length slab, initialize with [a]. -*/ -void -u3i_slab_from(u3i_slab* sab_u, u3_atom a, c3_g met_g, c3_d len_d) -{ - u3i_slab_bare(sab_u, met_g, len_d); - - // copies [a], zero-initializes any additional space - // - u3r_words(0, sab_u->len_w, sab_u->buf_w, a); -} - -/* u3i_slab_grow(): resize slab, zero-initializing new space. -*/ -void -u3i_slab_grow(u3i_slab* sab_u, c3_g met_g, c3_d len_d) -{ - c3_w old_w = sab_u->len_w; - - u3t_on(mal_o); - { - c3_w wor_w = _ci_slab_size(met_g, len_d); - - // XX actually shrink? - // - if ( wor_w <= old_w ) { - sab_u->len_w = wor_w; - } - else { - // upgrade from static storage - // - if ( 1 == old_w ) { - c3_w dat_w = *sab_u->buf_w; - - _ci_slab_init(sab_u, wor_w); - sab_u->buf_w[0] = dat_w; - } - // reallocate - // - else { - _ci_slab_grow(sab_u, wor_w); - } - - { - c3_y* buf_y = (void*)(sab_u->buf_w + old_w); - size_t dif_i = wor_w - old_w; - memset(buf_y, 0, dif_i * 4); - } - } - } - u3t_off(mal_o); -} - -/* u3i_slab_free(): dispose memory backing slab. -*/ -void -u3i_slab_free(u3i_slab* sab_u) -{ - c3_w len_w = sab_u->len_w; - u3a_atom* vat_u = sab_u->_._vat_u; - - u3t_on(mal_o); - - if ( 1 == len_w ) { - c3_assert( !vat_u ); - } - else { - c3_w* tav_w = (sab_u->buf_w - c3_wiseof(u3a_atom)); - c3_assert( tav_w == (c3_w*)vat_u ); - u3a_wfree(vat_u); - } - - u3t_off(mal_o); -} - -/* u3i_slab_mint(): produce atom from slab, trimming. -*/ -u3_atom -u3i_slab_mint(u3i_slab* sab_u) -{ - c3_w len_w = sab_u->len_w; - u3a_atom* vat_u = sab_u->_._vat_u; - u3_atom pro; - - u3t_on(mal_o); - - if ( 1 == len_w ) { - c3_w dat_w = *sab_u->buf_w; - - c3_assert( !vat_u ); - - u3t_off(mal_o); - pro = u3i_word(dat_w); - u3t_on(mal_o); - } - else { - u3a_atom* vat_u = sab_u->_._vat_u; - c3_w* tav_w = (sab_u->buf_w - c3_wiseof(u3a_atom)); - c3_assert( tav_w == (c3_w*)vat_u ); - - // trim trailing zeros - // - while ( len_w && !(sab_u->buf_w[len_w - 1]) ) { - len_w--; - } - - pro = _ci_atom_mint(vat_u, len_w); - } - - u3t_off(mal_o); - - return pro; -} - -/* u3i_slab_moot(): produce atom from slab, no trimming. -*/ -u3_atom -u3i_slab_moot(u3i_slab* sab_u) -{ - c3_w len_w = sab_u->len_w; - u3a_atom* vat_u = sab_u->_._vat_u; - u3_atom pro; - - u3t_on(mal_o); - - if ( 1 == len_w) { - c3_w dat_w = *sab_u->buf_w; - - c3_assert( !sab_u->_._vat_u ); - - u3t_off(mal_o); - pro = u3i_word(dat_w); - u3t_on(mal_o); - } - else { - u3a_atom* vat_u = sab_u->_._vat_u; - c3_w* tav_w = (sab_u->buf_w - c3_wiseof(u3a_atom)); - c3_assert( tav_w == (c3_w*)vat_u ); - - pro = _ci_atom_mint(vat_u, len_w); - } - - u3t_off(mal_o); - - return pro; -} - -/* u3i_word(): construct u3_atom from c3_w. -*/ -u3_atom -u3i_word(c3_w dat_w) -{ - u3_atom pro; - - u3t_on(mal_o); - - if ( c3y == u3a_is_cat(dat_w) ) { - pro = (u3_atom)dat_w; - } - else { - c3_w* nov_w = u3a_walloc(1 + c3_wiseof(u3a_atom)); - u3a_atom* vat_u = (void *)nov_w; - - vat_u->mug_w = 0; - vat_u->len_w = 1; - vat_u->buf_w[0] = dat_w; - - pro = u3a_to_pug(u3a_outa(nov_w)); - } - - u3t_off(mal_o); - - return pro; -} - -/* u3i_chub(): construct u3_atom from c3_d. -*/ -u3_atom -u3i_chub(c3_d dat_d) -{ - if ( c3y == u3a_is_cat(dat_d) ) { - return (u3_atom)dat_d; - } - else { - c3_w dat_w[2] = { - dat_d & 0xffffffffULL, - dat_d >> 32 - }; - - return u3i_words(2, dat_w); - } -} - -/* u3i_bytes(): Copy [a] bytes from [b] to an LSB first atom. -*/ -u3_atom -u3i_bytes(c3_w a_w, - const c3_y* b_y) -{ - // strip trailing zeroes. - // - while ( a_w && !b_y[a_w - 1] ) { - a_w--; - } - - if ( !a_w ) { - return (u3_atom)0; - } - else { - u3i_slab sab_u; - - u3i_slab_bare(&sab_u, 3, a_w); - - u3t_on(mal_o); - { - // zero-initialize last word - // - sab_u.buf_w[sab_u.len_w - 1] = 0; - memcpy(sab_u.buf_y, b_y, a_w); - } - u3t_off(mal_o); - - return u3i_slab_moot_bytes(&sab_u); - } -} - -/* u3i_words(): Copy [a] words from [b] into an atom. -*/ -u3_atom -u3i_words(c3_w a_w, - const c3_w* b_w) -{ - // strip trailing zeroes. - // - while ( a_w && !b_w[a_w - 1] ) { - a_w--; - } - - if ( !a_w ) { - return (u3_atom)0; - } - else { - u3i_slab sab_u; - u3i_slab_bare(&sab_u, 5, a_w); - - u3t_on(mal_o); - memcpy(sab_u.buf_w, b_w, (size_t)4 * a_w); - u3t_off(mal_o); - - return u3i_slab_moot(&sab_u); - } -} - -/* u3i_chubs(): Copy [a] chubs from [b] into an atom. -*/ -u3_atom -u3i_chubs(c3_w a_w, - const c3_d* b_d) -{ - // strip trailing zeroes. - // - while ( a_w && !b_d[a_w - 1] ) { - a_w--; - } - - if ( !a_w ) { - return (u3_atom)0; - } - else if ( 1 == a_w ) { - return u3i_chub(b_d[0]); - } - else { - u3i_slab sab_u; - u3i_slab_bare(&sab_u, 6, a_w); - - u3t_on(mal_o); - { - c3_w* buf_w = sab_u.buf_w; - c3_w i_w; - c3_d i_d; - - for ( i_w = 0; i_w < a_w; i_w++ ) { - i_d = b_d[i_w]; - *buf_w++ = i_d & 0xffffffffULL; - *buf_w++ = i_d >> 32; - } - } - u3t_off(mal_o); - - return u3i_slab_mint(&sab_u); - } -} - -/* u3i_mp(): Copy the GMP integer [a] into an atom, and clear it. -*/ -u3_atom -u3i_mp(mpz_t a_mp) -{ - size_t siz_i = mpz_sizeinbase(a_mp, 2); - u3i_slab sab_u; - u3i_slab_init(&sab_u, 0, siz_i); - - mpz_export(sab_u.buf_w, 0, -1, sizeof(c3_w), 0, 0, a_mp); - mpz_clear(a_mp); - - // per the mpz_export() docs: - // - // > If op is non-zero then the most significant word produced - // > will be non-zero. - // - return u3i_slab_moot(&sab_u); -} - -/* u3i_vint(): increment [a]. -*/ -u3_atom -u3i_vint(u3_noun a) -{ - c3_assert(u3_none != a); - - if ( _(u3a_is_cat(a)) ) { - return ( a == 0x7fffffff ) ? u3i_word(a + 1) : (a + 1); - } - else if ( _(u3a_is_cell(a)) ) { - return u3m_bail(c3__exit); - } - else { - mpz_t a_mp; - - u3r_mp(a_mp, a); - u3z(a); - - mpz_add_ui(a_mp, a_mp, 1); - return u3i_mp(a_mp); - } -} - -/* u3i_defcons(): allocate cell for deferred construction. -** NB: [hed] and [tel] pointers MUST be filled. -*/ -u3_cell -u3i_defcons(u3_noun** hed, u3_noun** tel) -{ - u3_noun pro; - - u3t_on(mal_o); - { - c3_w* nov_w = u3a_celloc(); - u3a_cell* nov_u = (void *)nov_w; - - nov_u->mug_w = 0; - -#ifdef U3_MEMORY_DEBUG - nov_u->hed = u3_none; - nov_u->tel = u3_none; -#endif - - *hed = &nov_u->hed; - *tel = &nov_u->tel; - - pro = u3a_to_pom(u3a_outa(nov_w)); - } - u3t_off(mal_o); - - return pro; -} - -/* u3i_cell(): Produce the cell `[a b]`. -*/ -u3_noun -u3i_cell(u3_noun a, u3_noun b) -{ - u3_noun pro; - - u3t_on(mal_o); - { - c3_w* nov_w = u3a_celloc(); - u3a_cell* nov_u = (void *)nov_w; - - nov_u->mug_w = 0; - nov_u->hed = a; - nov_u->tel = b; - - pro = u3a_to_pom(u3a_outa(nov_w)); - } - u3t_off(mal_o); - - return pro; -} - -/* u3i_trel(): Produce the triple `[a b c]`. -*/ -u3_noun -u3i_trel(u3_noun a, u3_noun b, u3_noun c) -{ - return u3i_cell(a, u3i_cell(b, c)); -} - -/* u3i_qual(): Produce the cell `[a b c d]`. -*/ -u3_noun -u3i_qual(u3_noun a, u3_noun b, u3_noun c, u3_noun d) -{ - return u3i_cell(a, u3i_trel(b, c, d)); -} - -/* u3i_string(): Produce an LSB-first atom from the C string [a]. -*/ -u3_atom -u3i_string(const c3_c* a_c) -{ - return u3i_bytes(strlen(a_c), (c3_y *)a_c); -} - -/* u3i_tape(): from a C string, to a list of bytes. -*/ -u3_noun -u3i_tape(const c3_c* txt_c) -{ - if ( !*txt_c ) { - return u3_nul; - } else return u3i_cell(*txt_c, u3i_tape(txt_c + 1)); -} - -/* u3i_list(): list from `u3_none`-terminated varargs. -*/ -u3_noun -u3i_list(u3_weak som, ...) -{ - u3_noun lit = u3_nul; - va_list ap; - - if ( u3_none == som ) { - return lit; - } - else { - lit = u3nc(som, lit); - } - - { - u3_noun tem; - - va_start(ap, som); - while ( 1 ) { - if ( u3_none == (tem = va_arg(ap, u3_weak)) ) { - break; - } - else { - lit = u3nc(tem, lit); - } - } - va_end(ap); - } - - return u3kb_flop(lit); -} - -static u3_noun -_edit_cat(u3_noun big, c3_l axe_l, u3_noun som) -{ - if ( c3n == u3du(big) ) { - return u3m_bail(c3__exit); - } - else { - u3_noun pro; - switch ( axe_l ) { - case 2: - pro = u3nc(som, u3k(u3t(big))); - break; - case 3: - pro = u3nc(u3k(u3h(big)), som); - break; - default: { - c3_l mor_l = u3x_mas(axe_l); - pro = ( 2 == u3x_cap(axe_l) ) - ? u3nc(_edit_cat(u3k(u3h(big)), mor_l, som), u3k(u3t(big))) - : u3nc(u3k(u3h(big)), _edit_cat(u3k(u3t(big)), mor_l, som)); - break; - } - } - u3z(big); - return pro; - } -} - -static u3_noun -_edit(u3_noun big, u3_noun axe, u3_noun som) -{ - if ( c3y == u3a_is_cat(axe) ) { - return _edit_cat(big, (c3_l) axe, som); - } - else if ( c3n == u3du(big) ) { - return u3m_bail(c3__exit); - } - else { - u3_noun mor = u3qc_mas(axe), - pro = ( 2 == u3qc_cap(axe) ) - ? u3nc(_edit(u3k(u3h(big)), mor, som), u3k(u3t(big))) - : u3nc(u3k(u3h(big)), _edit(u3k(u3t(big)), mor, som)); - u3z(mor); - u3z(big); - return pro; - } -} - -static u3_noun _edit_or_mutate_cat(u3_noun, c3_l, u3_noun); -static u3_noun _edit_or_mutate(u3_noun, u3_noun, u3_noun); - -static void -_mutate_cat(u3_noun big, c3_l axe_l, u3_noun som) -{ - if ( c3n == u3du(big) ) { - u3m_bail(c3__exit); - } - else { - u3a_cell* cel_u = (void*) u3a_to_ptr(big); - switch ( axe_l ) { - case 2: - u3z(cel_u->hed); - cel_u->hed = som; - break; - case 3: - u3z(cel_u->tel); - cel_u->tel = som; - break; - default: { - u3_noun* tar = ( 2 == u3x_cap(axe_l) ) - ? &(cel_u->hed) - : &(cel_u->tel); - *tar = _edit_or_mutate_cat(*tar, u3x_mas(axe_l), som); - } - } - cel_u->mug_w = 0; - } -} - -static void -_mutate(u3_noun big, u3_noun axe, u3_noun som) -{ - if ( c3y == u3a_is_cat(axe) ) { - _mutate_cat(big, (c3_l) axe, som); - } - else if ( c3n == u3du(big) ) { - u3m_bail(c3__exit); - } - else { - u3a_cell* cel_u = (void*) u3a_to_ptr(big); - u3_noun mor = u3qc_mas(axe); - u3_noun* tar = ( 2 == u3qc_cap(axe) ) - ? &(cel_u->hed) - : &(cel_u->tel); - *tar = _edit_or_mutate(*tar, mor, som); - cel_u->mug_w = 0; - u3z(mor); - } -} - -static u3_noun -_edit_or_mutate_cat(u3_noun big, c3_l axe_l, u3_noun som) -{ - if ( c3y == u3a_is_mutable(u3R, big) ) { - _mutate_cat(big, axe_l, som); - return big; - } - else { - return _edit_cat(big, axe_l, som); - } -} - -static u3_noun -_edit_or_mutate(u3_noun big, u3_noun axe, u3_noun som) -{ - if ( c3y == u3a_is_cat(axe) ) { - return _edit_or_mutate_cat(big, (c3_l) axe, som); - } - else if ( c3y == u3a_is_mutable(u3R, big) ) { - _mutate(big, axe, som); - return big; - } - else { - return _edit(big, axe, som); - } -} - -/* u3i_edit(): -** -** Mutate `big` at axis `axe` with new value `som`. -** `axe` is RETAINED. -*/ -u3_noun -u3i_edit(u3_noun big, u3_noun axe, u3_noun som) -{ - switch ( axe ) { - case 0: - return u3m_bail(c3__exit); - case 1: - u3z(big); - return som; - default: - return _edit_or_mutate(big, axe, som); - } -} - -/* u3i_molt(): -** -** Mutate `som` with a 0-terminated list of axis, noun pairs. -** Axes must be cats (31 bit). -*/ - struct _molt_pair { - c3_w axe_w; - u3_noun som; - }; - - static c3_w - _molt_cut(c3_w len_w, - struct _molt_pair* pms_m) - { - c3_w i_w, cut_t, cut_w; - - cut_t = 0; - cut_w = 0; - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w axe_w = pms_m[i_w].axe_w; - - if ( (cut_t == 0) && (3 == u3x_cap(axe_w)) ) { - cut_t = 1; - cut_w = i_w; - } - pms_m[i_w].axe_w = u3x_mas(axe_w); - } - return cut_t ? cut_w : i_w; - } - - static u3_noun // transfer - _molt_apply(u3_noun som, // retain - c3_w len_w, - struct _molt_pair* pms_m) // transfer - { - if ( len_w == 0 ) { - return u3k(som); - } - else if ( (len_w == 1) && (1 == pms_m[0].axe_w) ) { - return pms_m[0].som; - } - else { - c3_w cut_w = _molt_cut(len_w, pms_m); - - if ( c3n == u3a_is_cell(som) ) { - return u3m_bail(c3__exit); - } - else { - return u3i_cell - (_molt_apply(u3a_h(som), cut_w, pms_m), - _molt_apply(u3a_t(som), (len_w - cut_w), (pms_m + cut_w))); - } - } - } - -u3_noun -u3i_molt(u3_noun som, ...) -{ - va_list ap; - c3_w len_w; - struct _molt_pair* pms_m; - u3_noun pro; - - // Count. - // - len_w = 0; - { - va_start(ap, som); - while ( 1 ) { - if ( 0 == va_arg(ap, c3_w) ) { - break; - } - va_arg(ap, u3_weak*); - len_w++; - } - va_end(ap); - } - - c3_assert( 0 != len_w ); - pms_m = alloca(len_w * sizeof(struct _molt_pair)); - - // Install. - // - { - c3_w i_w; - - va_start(ap, som); - for ( i_w = 0; i_w < len_w; i_w++ ) { - pms_m[i_w].axe_w = va_arg(ap, c3_w); - pms_m[i_w].som = va_arg(ap, u3_noun); - } - va_end(ap); - } - - // Apply. - // - pro = _molt_apply(som, len_w, pms_m); - u3z(som); - return pro; -} diff --git a/pkg/urbit/noun/jets.c b/pkg/urbit/noun/jets.c deleted file mode 100644 index 357e94bd8..000000000 --- a/pkg/urbit/noun/jets.c +++ /dev/null @@ -1,2399 +0,0 @@ -/* g/j.c -** -*/ -#include "all.h" -#include - -/** Data structures. -**/ - -/* _cj_hank: cached hook information. - */ -typedef struct { - u3_weak hax; // axis of hooked inner core - u3j_site sit_u; // call-site data -} _cj_hank; - -/** Functions. -**/ - -/* _cj_count(): count and link dashboard entries. -*/ -static c3_w -_cj_count(u3j_core* par_u, u3j_core* dev_u) -{ - c3_w len_l = 0; - c3_w i_w; - - if ( dev_u ) { - for ( i_w = 0; 0 != dev_u[i_w].cos_c; i_w++ ) { - u3j_core* kid_u = &dev_u[i_w]; - - if ( par_u ) { - kid_u->par_u = par_u; - } - len_l += _cj_count(kid_u, kid_u->dev_u); - } - } - return 1 + len_l; -} - -/* _cj_core_loc(): location noun from u3j_core. - */ -static u3_noun -_cj_core_loc(u3_noun pel, u3j_core* cop_u) -{ - c3_w i_w; - u3_noun nam = u3i_string(cop_u->cos_c), - huc = u3_nul, - pat; - - if ( cop_u->huc_u ) { - for ( i_w = 0; 0 != cop_u->huc_u[i_w].nam_c; ++i_w ) { - u3j_hood* huc_u = &(cop_u->huc_u[i_w]); - u3_noun fol = ( c3n == huc_u->kic_o ) - ? u3nc(0, huc_u->axe_l) - : u3nt(9, huc_u->axe_l, u3nc(0, - (0 == huc_u->sax_l) ? 1 : huc_u->sax_l)); - huc = u3kdb_put(huc, u3i_string(huc_u->nam_c), fol); - } - } - - pat = ( 0 == cop_u->axe_l ) - ? u3nt(c3y, c3y, pel) - : ( (3 == cop_u->axe_l) && (c3y == u3h(u3h(pel))) ) - ? u3nt(c3y, c3n, pel) - : u3nt(c3n, cop_u->axe_l, pel); - - return u3nt(pat, nam, huc); -} - -/* _cj_hash(): noun from pasted-in battery hash - */ -static u3_noun -_cj_hash(c3_c* has_c) -{ - c3_w i_w, len_w = strlen(has_c); - if ( 64 != len_w ) { - u3l_log("bash not 64 characters: %s\r\n", has_c); - c3_assert(0); - } - c3_assert( 64 == len_w ); - c3_y dig_y[32]; - for ( i_w = 0; i_w < 64; ) { - c3_y hi_y = has_c[i_w++], - lo_y = has_c[i_w++], - hid_y = hi_y >= 'a' ? (hi_y - 'a') + 10 : hi_y - '0', - lod_y = lo_y >= 'a' ? (lo_y - 'a') + 10 : lo_y - '0'; - dig_y[32-(i_w>>1)] = hid_y << 4 | lod_y; - } - u3_noun pro = u3i_bytes(32, dig_y); - return pro; -} - -// in the jam jet file -c3_w* u3qe_jam_buf(u3_noun, c3_w* bit_w); - -/* _cj_bash(): battery hash. RETAIN. - */ -static u3_noun -_cj_bash(u3_noun bat) -{ - if ( u3C.wag_w & u3o_hashless ) { - return u3_nul; - } - - u3_weak pro; - u3a_road* rod_u = u3R; - while ( 1 ) { - pro = u3h_get(rod_u->jed.bas_p, bat); - - if ( u3_none != pro ) { - break; - } - - if ( rod_u->par_p ) { - rod_u = u3to(u3_road, rod_u->par_p); - } - else { - u3i_slab sab_u; - c3_w bit_w = u3s_jam_fib(&sab_u, bat); - c3_w met_w = (bit_w + 0x7) >> 3; - // XX assumes little-endian - // - c3_y* fat_y = sab_u.buf_y; - c3_y dig_y[32]; - urcrypt_shay(fat_y, met_w, dig_y); - - pro = u3i_bytes(32, dig_y); - u3h_put(u3R->jed.bas_p, bat, u3k(pro)); - u3i_slab_free(&sab_u); - break; - } - } - return pro; -} - -/* _cj_mine_par_old(): register hooks and parent location within existing - * axis in ancestor list or u3_none. - */ -static u3_weak -_cj_mine_par_old(u3_noun lan, u3_noun axe, u3_noun pel, u3_noun loc) -{ - u3_noun par; - u3_weak pro; - - if ( u3_nul == lan ) { - pro = u3_none; - u3z(axe); u3z(pel); u3z(loc); - } - else if ( c3y == u3r_sing(axe, u3h(par = u3h(lan))) ) { - u3_noun lol = u3kdb_put(u3k(u3t(par)), pel, loc), - rap = u3nc(axe, lol); - pro = u3nc(rap, u3k(u3t(lan))); - } - else { - u3_weak nex = _cj_mine_par_old(u3k(u3t(lan)), axe, pel, loc); - if ( u3_none == nex ) { - pro = u3_none; - } - else { - pro = u3nc(u3k(par), nex); - } - } - - u3z(lan); - return pro; -} - -/* _cj_mine_par_new(): insert ancestor within lan at sorted index. - */ -static u3_noun -_cj_mine_par_new(u3_noun lan, u3_noun axe, u3_noun pel, u3_noun loc) -{ - u3_weak pro; - - if ( (u3_nul == lan) || (c3y == u3qa_lth(axe, u3h(u3h(lan)))) ) { - u3_noun par = u3nc(axe, u3kdb_put(u3_nul, pel, loc)); - pro = u3nc(par, lan); - } - else { - pro = u3nc(u3k(u3h(lan)), - _cj_mine_par_new(u3k(u3t(lan)), axe, pel, loc)); - u3z(lan); - } - - return pro; -} - -/* _cj_mine_par(): register a location as an ancestor - * in a list of ancestors. - */ -static u3_noun -_cj_mine_par(u3_noun lan, u3_noun axe, u3_noun pel, u3_noun loc) -{ - u3_weak old = _cj_mine_par_old(u3k(lan), u3k(axe), u3k(pel), u3k(loc)); - if ( u3_none != old ) { - u3z(lan); u3z(axe); u3z(pel); u3z(loc); - return old; - } - else { - return _cj_mine_par_new(lan, axe, pel, loc); - } -} - - -/* _cj_gust(): add location to registry. -*/ -static u3_noun -_cj_gust(u3_weak reg, u3_noun axe, u3_noun pel, u3_noun loc) -{ - u3_noun ger; - if ( u3_none == reg ) { - reg = u3nc(u3_nul, u3_nul); - } - - ger = ( 0 == axe ) - ? u3nc(u3kdb_put(u3k(u3h(reg)), pel, loc), u3k(u3t(reg))) - : u3nc(u3k(u3h(reg)), _cj_mine_par(u3k(u3t(reg)), axe, pel, loc)); - - u3z(reg); - return ger; -} - -/* _cj_axis(): axis from formula, or 0. `fol` is RETAINED. -*/ -static c3_l -_cj_axis(u3_noun fol) -{ - u3_noun p_fol, q_fol, r_fol; - - while ( _(u3du(fol)) && (11 == u3h(fol)) ) - { fol = u3t(u3t(fol)); } - - if ( !_(u3r_trel(fol, &p_fol, &q_fol, &r_fol)) ) { - if ( !_(u3r_cell(fol, &p_fol, &q_fol)) || - (0 != p_fol) || - (!_(u3a_is_cat(q_fol))) ) - { - u3l_log("axis: bad a\r\n"); - return 0; - } - return q_fol; - } - else { - if ( 9 != p_fol ) - { u3l_log("axis: bad b\r\n"); return 0; } - if ( !_(u3a_is_cat(q_fol)) ) - { u3l_log("axis: bad c\r\n"); return 0; } - if ( !_(u3du(r_fol)) || (0 != u3h(r_fol)) || (1 != u3t(r_fol)) ) - { u3l_log("axis: bad d\r\n"); return 0; } - - return q_fol; - } -} - -/* _cj_warm_hump(): generate axis-to-arm map. RETAIN. -*/ -static u3_noun -_cj_warm_hump(c3_l jax_l, u3_noun huc) -{ - u3_noun hap = u3_nul; - u3j_core* cop_u; - - /* Compute axes of all correctly declared arms. - */ - if ( jax_l && (cop_u = &u3D.ray_u[jax_l])->arm_u ) { - u3j_harm* jet_u; - c3_l i_l; - - for ( i_l = 0; (jet_u = &cop_u->arm_u[i_l])->fcs_c; i_l++ ) { - c3_l axe_l = 0; - - if ( '.' == *(jet_u->fcs_c) ) { - c3_d axe_d = 0; - - if ( (1 != sscanf(jet_u->fcs_c+1, "%" SCNu64, &axe_d)) || - axe_d >> 32ULL || - ((1 << 31) & (axe_l = (c3_w)axe_d)) || - (axe_l < 2) ) - { - u3l_log("jets: activate: bad fcs %s\r\n", jet_u->fcs_c); - } - } - else { - u3_noun nam = u3i_string(jet_u->fcs_c); - u3_noun fol = u3kdb_get(u3k(huc), nam); - - if ( u3_none == fol ) { - u3l_log("jets: activate: bad fcs %s\r\n", jet_u->fcs_c); - } - else { - axe_l = _cj_axis(fol); - u3z(fol); - } - } - if ( 0 != axe_l ) { - hap = u3kdb_put(hap, axe_l, i_l); - } - } - } - return hap; -} - -/* _cj_install(): install dashboard entries. -*/ -static c3_w -_cj_install(u3j_core* ray_u, c3_w jax_l, u3_noun pel, u3_noun lab, u3j_core* dev_u) -{ - c3_w i_w; - c3_assert(u3R == &(u3H->rod_u)); - - if ( dev_u ) { - for ( i_w = 0; 0 != dev_u[i_w].cos_c; i_w++ ) { - u3j_core* kid_u = &dev_u[i_w]; - u3_noun loc = _cj_core_loc(u3k(pel), kid_u), - bal = u3nc(u3k(u3h(u3t(loc))), u3k(lab)); - - kid_u->jax_l = jax_l; - ray_u[jax_l] = *kid_u; - - if ( kid_u->bas_u ) { - c3_w j_w; - for ( j_w = 0; 0 != kid_u->bas_u[j_w]; j_w++ ) { - u3_noun key = _cj_hash(kid_u->bas_u[j_w]), - hot = u3h_get(u3R->jed.hot_p, key), - old = ( u3_none == hot ) ? u3_none : u3k(u3h(hot)), - reg = _cj_gust(old, kid_u->axe_l, u3k(pel), u3k(loc)), - huc = u3t(u3t(loc)), - hap = _cj_warm_hump(jax_l, huc), - toh = u3nq(reg, jax_l, hap, u3k(bal)); - - u3h_put(u3R->jed.hot_p, key, toh); - u3z(key); u3z(hot); - } - } - - jax_l = _cj_install(ray_u, ++jax_l, loc, bal, kid_u->dev_u); - } - } - u3z(pel); - u3z(lab); - return jax_l; -} - -#if 0 -/* _cj_by_gut(): (~(get by a) b), unifying; RETAINS a, b, AND result. -*/ -static u3_weak -_cj_by_gut(u3_noun a, u3_noun b) -{ - if ( u3_nul == a ) { - return u3_none; - } - else { - u3_noun l_a, n_a, r_a; - u3_noun pn_a, qn_a; - - u3x_trel(a, &n_a, &l_a, &r_a); - u3x_cell(n_a, &pn_a, &qn_a); - { - if ( (c3y == u3r_sing(b, pn_a)) ) { - return qn_a; - } - else { - if ( c3y == u3qc_gor(b, pn_a) ) { - return _cj_by_gut(l_a, b); - } - else return _cj_by_gut(r_a, b); - } - } - } -} -#endif - -/* _cj_chum(): decode chum as string. -*/ -static c3_c* -_cj_chum(u3_noun chu) -{ - if ( _(u3ud(chu)) ) { - return u3r_string(chu); - } - else { - u3_noun h_chu = u3h(chu); - u3_noun t_chu = u3t(chu); - - if ( !_(u3a_is_cat(t_chu)) ) { - return 0; - } else { - c3_c* h_chu_c = u3r_string(h_chu); - c3_c buf[33]; - - memset(buf, 0, 33); - snprintf(buf, 32, "%s%d", h_chu_c, t_chu); - - c3_free(h_chu_c); - return strdup(buf); - } - } -} - -/* _cj_je_fsck: fsck:je, or none. -*/ -static u3_noun -_cj_je_fsck(u3_noun clu) -{ - u3_noun p_clu, q_clu, r_clu; - u3_noun huk; - c3_c* nam_c; - c3_l axe_l; - - if ( c3n == u3r_trel(clu, &p_clu, &q_clu, &r_clu) ) { - u3z(clu); return u3_none; - } - if ( 0 == (nam_c = _cj_chum(p_clu)) ) { - u3z(clu); return u3_none; - } - while ( _(u3du(q_clu)) && (11 == u3h(q_clu)) ) { - q_clu = u3t(u3t(q_clu)); - } - if ( !_(u3du(q_clu)) ) { - u3z(clu); c3_free(nam_c); return u3_none; - } - - if ( (1 == u3h(q_clu)) && (0 == u3t(q_clu)) ) { - axe_l = 0; - } - else { - if ( (0 != u3h(q_clu)) || !_(u3a_is_cat(axe_l = u3t(q_clu))) ) { - u3z(clu); c3_free(nam_c); return u3_none; - } - } - - { - huk = 0; - - while ( _(u3du(r_clu)) ) { - u3_noun ir_clu, tr_clu, pir_clu, qir_clu; - - if ( (c3n == u3r_cell(r_clu, &ir_clu, &tr_clu)) || - (c3n == u3r_cell(ir_clu, &pir_clu, &qir_clu)) || - (c3n == u3ud(pir_clu)) ) - { - u3z(huk); u3z(clu); c3_free(nam_c); return u3_none; - } - huk = u3kdb_put(huk, u3k(pir_clu), u3k(qir_clu)); - r_clu = tr_clu; - } - } - u3z(clu); - - { - u3_noun pro = u3nt(u3i_string(nam_c), axe_l, huk); - c3_free(nam_c); - return pro; - } -} - -/* _cj_find_cold(): search cold state for `bat`s [bash registry]. - * RETAIN. - */ -static u3_weak -_cj_find_cold(u3_noun bat) -{ - u3a_road* rod_u = u3R; - - while ( 1 ) { - u3_weak bar = u3h_get(rod_u->jed.cod_p, bat); - - if ( u3_none != bar ) { - return bar; - } - - if ( rod_u->par_p ) { - rod_u = u3to(u3_road, rod_u->par_p); - } - else return u3_none; - } -} - -/* _cj_find_warm(): search warm state for `loc`s activation. - * RETAIN. - */ -static u3_weak -_cj_find_warm(u3_noun loc) -{ - u3a_road* rod_u = u3R; - - while ( 1 ) { - u3_weak ank = u3h_get(rod_u->jed.war_p, loc); - - if ( u3_none != ank ) { - return ank; - } - - if ( rod_u->par_p ) { - rod_u = u3to(u3_road, rod_u->par_p); - } - else return u3_none; - } -} - -static u3_weak _cj_spot(u3_noun cor, u3_weak* bas); - -/* _cj_reg_find(): locate core within registry. RETAIN. - */ -static u3_weak -_cj_reg_find(u3_noun reg, u3_noun cor) -{ - u3_noun rut = u3h(reg), - pas = u3t(reg), - rum = u3qdb_get(rut, u3t(cor)); - if ( u3_nul != rum ) { - u3_noun loc = u3k(u3t(rum)); - u3z(rum); - return loc; - } - else { - while ( u3_nul != pas ) { - u3_noun pap = u3h(pas), - axe = u3h(pap), - lol = u3t(pap); - u3_weak par = u3r_at(axe, cor), - pel; - if ( u3_none != par ) { - pel = _cj_spot(par, NULL); - if ( u3_none != pel ) { - u3_noun nit = u3qdb_get(lol, pel); - u3z(pel); - if ( u3_nul != nit ) { - u3_noun loc = u3k(u3t(nit)); - u3z(nit); - return loc; - } - } - } - pas = u3t(pas); - } - return u3_none; - } -} - -/* _cj_jit(): generate arbitrary warm jet-associated data. RETAIN. -*/ -static u3_noun -_cj_jit(c3_l jax_l, u3_noun bat) -{ - return u3_nul; -} - -/* _cj_loc_axe(): axis-within-core from location (0 for root). RETAIN. - */ -static u3_noun -_cj_loc_axe(u3_noun loc) -{ - u3_noun pat = u3h(loc); - return ( c3n == u3h(pat) ) - ? u3k(u3h(u3t(pat))) - : (c3y == u3h(u3t(pat))) ? 0 : 3; -} - -/* _cj_loc_pel(): parent location (or root noun, if root) of loc. RETAIN. - */ -static u3_noun -_cj_loc_pel(u3_noun loc) -{ - return u3k(u3t(u3t(u3h(loc)))); -} - -/* _cj_spot_cold(): spot, cold dashboard only. *bar is set to - * the [bash registry] found for battery. RETAIN. - */ -static u3_weak -_cj_spot_cold(u3_noun cor, u3_weak* bar) -{ - *bar = _cj_find_cold(u3h(cor)); - if ( u3_none == *bar ) { - return u3_none; - } - else { - return _cj_reg_find(u3t(*bar), cor); - } -} - -/* _cj_spot_hot(): try to locate core by hot dashboard. if found, - * the activation (warm state) is returned and the - * location is produced at *loc. RETAIN. - */ -static u3_weak -_cj_spot_hot(u3_noun cor, u3_noun bas, u3_noun* loc) -{ - u3_noun bat = u3h(cor); - u3_weak act = u3_none, - hot = u3h_get(u3H->rod_u.jed.hot_p, bas); - if ( u3_none != hot ) { - u3_noun reg, jax, hap, bal; - c3_l jax_l; - u3x_qual(hot, ®, &jax, &hap, &bal); - jax_l = (c3_l) jax; - if ( u3_none != (*loc = _cj_reg_find(reg, cor)) ) { - act = u3nq(jax_l, u3k(hap), u3k(bal), _cj_jit(jax_l, bat)); - } - u3z(hot); - } - return act; -} - -/* _cj_spot(): find location of cor. expensive. RETAIN. - * bas is complicated to make it easy to cache bashes. - * you can safely ignore it by passing NULL. Otherwise, - * if it points to u3_none, and no location is found, - * a bash will be PRODUCED there. if it contains a bash, - * that will be used instead of calling _cj_bash. - */ -static u3_weak -_cj_spot(u3_noun cor, u3_weak* bas) -{ - u3_weak bak = u3_none, - bar = u3_none, - reg = u3_none, - loc = _cj_spot_cold(cor, &bar); - - if ( NULL == bas ) { - bas = &bak; - } - - if ( u3_none != bar ) { - if ( (u3_none == *bas) ) { - *bas = u3k(u3h(bar)); - } - reg = u3k(u3t(bar)); - u3z(bar); - } - - if ( u3_none == loc ) { - if ( u3_none == *bas ) { - *bas = _cj_bash(u3h(cor)); - } - - if ( !(u3C.wag_w & u3o_hashless) ) { - u3_weak act = _cj_spot_hot(cor, *bas, &loc); - if ( u3_none != act ) { - reg = _cj_gust(reg, _cj_loc_axe(loc), _cj_loc_pel(loc), u3k(loc)); - u3h_put(u3R->jed.cod_p, u3h(cor), u3nc(u3k(*bas), u3k(reg))); - /* caution: could overwrites old value, debug batteries etc. - ** old value contains old _cj_jit (from different - ** battery). if we change jit to (map battery *), - ** will need to merge with that map here. - */ - u3h_put(u3R->jed.war_p, loc, act); - } - } - } - if ( u3_none != bak ) { - u3z(bak); - } - if ( u3_none != reg ) { - u3z(reg); - } - return loc; -} - -/* _cj_cast(): create a u3j_fink that can be used to efficiently verify - * that another core is located where this one is. RETAIN. - */ -static u3p(u3j_fink) -_cj_cast(u3_noun cor, u3_noun loc) -{ - c3_w i_w = 0; - u3_noun j, par, bat, dyn, pax, - rev = u3_nul, - pat = u3h(loc); - u3j_fink* fin_u; - - while ( c3n == u3h(pat) ) { - bat = u3h(cor); - dyn = u3t(pat); - pax = u3h(dyn); - loc = u3t(dyn); - pat = u3h(loc); - rev = u3nc(u3nc(u3k(bat), u3k(pax)), rev); - // pax already known-valid - cor = u3r_at(pax, cor); - ++i_w; - } - - fin_u = u3a_walloc(c3_wiseof(u3j_fink) + - (i_w * c3_wiseof(u3j_fist))); - fin_u->len_w = i_w; - fin_u->sat = u3k(cor); - for ( j = rev; i_w-- > 0; j = u3t(j) ) { - u3j_fist* fis_u = &(fin_u->fis_u[i_w]); - par = u3h(j); - fis_u->bat = u3k(u3h(par)); - fis_u->pax = u3k(u3t(par)); - } - u3z(rev); - c3_assert( u3_nul == j ); - - return u3of(u3j_fink, fin_u); -} - -/* _cj_fine(): check that a core matches a u3j_fink. RETAIN. - */ -static c3_o -_cj_fine(u3_noun cor, u3p(u3j_fink) fin_p) -{ - u3j_fink* fin_u = u3to(u3j_fink, fin_p); - c3_w i_w; - for ( i_w = 0; i_w < fin_u->len_w; ++i_w ) { - u3j_fist* fis_u = &(fin_u->fis_u[i_w]); - if ( c3n == u3r_sing(fis_u->bat, u3h(cor)) ) { - return c3n; - } - else { - cor = u3r_at(fis_u->pax, cor); - } - } - return u3r_sing(fin_u->sat, cor); -} - -/* _cj_nail(): resolve hot state for arm at axis within cores located - * at loc. a label will be PRODUCED at *lab, unconditionally. - * Arguments are RETAINED. Return value is yes if a jet driver - * is present. - */ -static c3_o -_cj_nail(u3_noun loc, u3_noun axe, - u3_noun* lab, u3j_core** cop_u, u3j_harm** ham_u) -{ - c3_o ret_o; - u3_noun jax, hap, bal, jit; - u3_weak act; - act = _cj_find_warm(loc); - c3_assert(u3_none != act); - u3x_qual(act, &jax, &hap, &bal, &jit); - - *lab = u3k(bal); - if ( 0 == jax ) { - ret_o = c3n; - } - else { - u3_weak inx = u3kdb_get(u3k(hap), u3k(axe)); - if ( u3_none == inx ) { - ret_o = c3n; - } - else { - c3_l jax_l = jax, - inx_l = inx; - *cop_u = &(u3D.ray_u[jax_l]); - *ham_u = &((*cop_u)->arm_u[inx_l]); - ret_o = c3y; - } - } - - u3z(act); - return ret_o; -} - -/* _cj_hot_mean(): in parent, declare a core. RETAINS. -*/ -static c3_l -_cj_hot_mean(c3_l par_l, u3_noun nam) -{ - u3j_core* par_u; - u3j_core* dev_u; - - if ( 0 != par_l ) { - par_u = &u3D.ray_u[par_l]; - dev_u = par_u->dev_u; - } - else { - par_u = 0; - dev_u = u3D.dev_u; - } - - { - c3_w i_l = 0; - u3j_core* cop_u; - - while ( (cop_u = &dev_u[i_l])->cos_c ) { - if ( _(u3r_sing_c(cop_u->cos_c, nam)) ) { -#if 0 - u3l_log("hot: bound jet %d/%s/%s/\r\n", - cop_u->jax_l, - cop_u->cos_c, - par_u ? par_u->cos_c : "~"); -#endif - return cop_u->jax_l; - } - i_l++; - } - } - return 0; -} - -/* u3j_boot(): initialize jet system. -*/ -c3_w -u3j_boot(c3_o nuu_o) -{ - c3_assert(u3R == &(u3H->rod_u)); - - u3D.len_l =_cj_count(0, u3D.dev_u); - u3D.all_l = (2 * u3D.len_l) + 1024; // horrid heuristic - - u3D.ray_u = c3_malloc(u3D.all_l * sizeof(u3j_core)); - memset(u3D.ray_u, 0, (u3D.all_l * sizeof(u3j_core))); - - if ( c3n == nuu_o ) { - u3h_free(u3R->jed.hot_p); - } - u3R->jed.hot_p = u3h_new(); - - return _cj_install(u3D.ray_u, 1, - (c3_l) (long long) u3D.dev_u[0].par_u, - u3_nul, - u3D.dev_u); -} - -/* _cj_soft(): kick softly by arm axis. -*/ -static u3_noun -_cj_soft(u3_noun cor, u3_noun axe) -{ - u3_noun arm = u3x_at(axe, cor); - - return u3n_nock_on(cor, u3k(arm)); -} - - void - find_error(u3_noun cor, - u3_noun old, - u3_noun new); - -/* _cj_kick_z(): try to kick by jet. If no kick, produce u3_none. -** -** `cor` is RETAINED iff there is no kick, TRANSFERRED if one. -** `axe` is RETAINED. -*/ -static u3_weak -_cj_kick_z(u3_noun cor, u3j_core* cop_u, u3j_harm* ham_u, u3_atom axe) -{ - if ( 0 == ham_u->fun_f ) { - return u3_none; - } - - if ( !_(ham_u->liv) ) { - return u3_none; - } - else { -#ifdef U3_MEMORY_DEBUG - c3_w cod_w; - - { - char soc_c[5]; - - memset(soc_c, 0, 5); - strncpy(soc_c, cop_u->cos_c, 4); - soc_c[4] = 0; - cod_w = u3i_string(soc_c); - cod_w = u3a_lush(cod_w); - } -#endif - - if ( _(ham_u->ice) ) { - u3_weak pro = ham_u->fun_f(cor); - -#ifdef U3_MEMORY_DEBUG - u3a_lop(cod_w); -#endif - if ( u3_none != pro ) { - u3z(cor); - return pro; - } - } - else { - u3_weak pro, ame; - - ham_u->ice = c3y; - pro = ham_u->fun_f(cor); - ham_u->ice = c3n; - -#ifdef U3_MEMORY_DEBUG - u3a_lop(cod_w); -#endif - if ( u3_none == pro ) { - u3z(cor); - return pro; - } - ham_u->liv = c3n; - ame = _cj_soft(cor, axe); - ham_u->liv = c3y; - - if ( c3n == u3r_sing(ame, pro) ) { - u3l_log("test: %s %s: mismatch: good %x, bad %x\r\n", - cop_u->cos_c, - (!strcmp(".2", ham_u->fcs_c)) ? "$" : ham_u->fcs_c, - u3r_mug(ame), - u3r_mug(pro)); - ham_u->liv = c3n; - - return u3m_bail(c3__fail); - } - else { - -#if 0 - u3l_log("test: %s %s\r\n", - cop_u->cos_c, - (!strcmp(".2", ham_u->fcs_c)) ? "$" : ham_u->fcs_c); -#endif - u3z(ame); - return pro; - } - } - return u3_none; - } -} - -/* _cj_hook_in(): execute hook from core, or fail. -*/ -static u3_noun -_cj_hook_in(u3_noun cor, - const c3_c* tam_c, - c3_o jet_o) -{ - u3_weak loc, col; - u3_noun roc, tem, got, pat, nam, huc; - - if ( c3n == u3du(cor) ) { - u3l_log("_cj_hook_in failure: c3n == u3du(cor)\r\n"); - return u3m_bail(c3__fail); - } - - loc = _cj_spot(cor, NULL); - if ( u3_none == loc ) { - u3l_log("_cj_hook_in failure: u3_none == loc\r\n"); - return u3m_bail(c3__fail); - } - - tem = u3i_string(tam_c); - while ( 1 ) { - u3x_trel(loc, &pat, &nam, &huc); - got = u3qdb_get(huc, tem); - if ( u3_nul != got ) { - c3_l axe_l; - u3_noun pro, fol; - u3j_core* cop_u; - - u3z(tem); - fol = u3k(u3t(got)); - u3z(got); - axe_l = _cj_axis(fol); - if ( 0 == axe_l ) { - u3t_off(glu_o); - pro = u3n_nock_on(cor, fol); - u3t_on(glu_o); - } - else { - c3_l jax_l, inx_l; - u3_noun hap, act; - - u3z(fol); - act = _cj_find_warm(loc); - jax_l = u3h(act); - hap = u3h(u3t(act)); - cop_u = &u3D.ray_u[jax_l]; - - // Tricky: the above case would work here too, but would - // disable jet_o and create some infinite recursions. - // - u3t_off(glu_o); - if ( (c3n == jet_o) || - (u3_none == (inx_l = u3kdb_get(u3k(hap), axe_l))) || - (u3_none == (pro = _cj_kick_z(cor, - cop_u, - &cop_u->arm_u[inx_l], - axe_l))) ) { - pro = u3n_nock_on(cor, u3k(u3x_at(axe_l, cor))); - } - u3t_on(glu_o); - u3z(act); - } - u3z(loc); - return pro; - } - else if ( c3n == u3h(pat) ) { - u3_noun dyn = u3t(pat), - axe = u3h(dyn), - pel = u3t(dyn); - // axe already known-valid - roc = u3k(u3r_at(axe, cor)); - u3z(cor); - cor = roc; - col = u3k(pel); - u3z(loc); - loc = col; - } - else { - u3_noun sat = u3t(pat); - if ( c3y == u3h(sat) ) { - u3l_log("_cj_hook_in failure: c3y == u3h(sat)\r\n"); - return u3m_bail(c3__fail); - } - else { - col = u3k(u3t(sat)); - u3z(loc); - loc = col; - roc = u3k(u3t(cor)); - u3z(cor); - cor = roc; - } - } - } -} - -/* u3j_soft(): execute soft hook. -*/ -u3_noun -u3j_soft(u3_noun cor, - const c3_c* tam_c) -{ - u3_noun pro; - u3t_on(glu_o); - pro = _cj_hook_in(cor, tam_c, c3n); - u3t_off(glu_o); - return pro; -} - -/* u3j_hook(): execute hook from core, or fail. -*/ -u3_noun -u3j_hook(u3_noun cor, - const c3_c* tam_c) -{ - u3_noun pro; - u3t_on(glu_o); - pro = _cj_hook_in(cor, tam_c, c3y); - u3t_off(glu_o); - return pro; -} - -/* _cj_prog(): stop tracing glu and find a nock program - */ -static u3p(u3n_prog) -_cj_prog(u3_weak loc, u3_noun fol) -{ - u3p(u3n_prog) pog_p; - u3t_off(glu_o); - pog_p = u3n_find((loc == u3_none ? u3_nul : loc), fol); - u3t_on(glu_o); - return pog_p; -} - -/* cj_hank_find(): find cached hook information, keyed by arbitrary - * prefix and term cords. RETAIN. - */ -static _cj_hank* -_cj_hank_find(u3_noun pre, u3_noun tam) -{ - u3_noun key = u3nc(u3k(pre), u3k(tam)); - u3_noun got = u3h_git(u3R->jed.han_p, key); - - if ( u3_none != got ) { - u3z(key); - return u3to(_cj_hank, got); - } - else { - _cj_hank* new_u = u3a_walloc(c3_wiseof(_cj_hank)); - u3a_road* rod_u = u3R; - - while ( rod_u->par_p && u3_none == got ) { - rod_u = u3to(u3a_road, rod_u->par_p); - got = u3h_git(rod_u->jed.han_p, key); - } - - if ( u3_none == got ) { - new_u->hax = u3_none; - } - else { - _cj_hank* old_u = u3to(_cj_hank, got); - if ( u3_none != (new_u->hax = old_u->hax) ) { - // it's unusual but safe to "take" here, because - // u3a_take will no-op on senior nouns (just as u3k would) - // - u3j_site_take(&(new_u->sit_u), &(old_u->sit_u)); - } - } - - u3h_put(u3R->jed.han_p, key, u3of(_cj_hank, new_u)); - u3z(key); - return new_u; - } -} - -/* _cj_hank_fine(): check that cached hook information is valid - * for given core. *inn will point to the hooked - * core on return if valid. RETAIN. - */ -static c3_o -_cj_hank_fine(_cj_hank* han_u, u3_noun cor, u3_noun *inn) -{ - u3_noun hax = han_u->hax; - if ( u3_none == hax ) { - return c3n; - } - else { - *inn = u3r_at(hax, cor); - if ( u3_none == *inn ) { - return c3n; - } - else { - u3j_site* sit_u = &(han_u->sit_u); - c3_assert(u3_none != sit_u->loc); - return _cj_fine(*inn, sit_u->fin_p); - } - } -} - -/* _cj_hank_lose(): release memory maintained in a hook cache. -*/ -static void -_cj_hank_lose(_cj_hank* han_u) -{ - if ( u3_none != han_u->hax ) { - u3z(han_u->hax); - u3j_site_lose(&(han_u->sit_u)); - } -} - -/* _cj_hank_fill(): slow path, populate han_u. - */ -static u3_noun -_cj_hank_fill(_cj_hank* han_u, u3_noun tam, u3_noun cor) -{ - u3_weak loc, col; - u3_noun got, pat, nam, huc; - u3_noun hax = 1; - u3j_site* sit_u = &(han_u->sit_u); - - if ( c3n == u3du(cor) ) { - u3l_log("fail in _cj_hank_fill (c3n == u3du(cor))"); - return u3m_bail(c3__fail); - } - - sit_u->bas = u3_none; - if ( u3_none == (col = loc = _cj_spot(cor, NULL)) ) { - u3l_log("fail in _cj_hank_fill (_cj_spot(cor, NULL))"); - return u3m_bail(c3__fail); - } - - while ( 1 ) { - u3x_trel(loc, &pat, &nam, &huc); - got = u3qdb_get(huc, tam); - if ( u3_nul != got ) { - u3_noun fol = u3k(u3t(got)); - u3z(got); - sit_u->bat = u3k(u3h(cor)); - sit_u->loc = u3k(loc); - sit_u->fin_p = _cj_cast(cor, loc); - sit_u->fon_o = c3y; - if ( 0 == (sit_u->axe = _cj_axis(fol)) ) { - sit_u->jet_o = c3n; - sit_u->pog_p = _cj_prog(loc, fol); - } - else { - // loc already known-valid - han_u->sit_u.pog_p = _cj_prog(loc, u3r_at(sit_u->axe, cor)); - han_u->sit_u.jet_o = _cj_nail(loc, sit_u->axe, - &(sit_u->lab), &(sit_u->cop_u), &(sit_u->ham_u)); - } - u3z(fol); - u3z(col); - han_u->hax = hax; - return cor; - } - else if ( c3n == u3h(pat) ) { - u3_noun dyn = u3t(pat), - axe = u3h(dyn), - xah; - // axe already known-valid - cor = u3r_at(axe, cor); - loc = u3t(dyn); - xah = u3qc_peg(axe, hax); - u3z(hax); - hax = xah; - } - else { - u3_noun sat = u3t(pat); - if ( c3y == u3h(sat) ) { - u3l_log("fail in _cj_hank_fill (c3y == u3h(sat))"); - return u3m_bail(c3__fail); - } - else { - u3_noun xah; - cor = u3t(cor); - loc = u3t(sat); - xah = u3qc_peg(3, hax); - u3z(hax); - hax = xah; - } - } - } -} - -/* _cj_sink(): kick by nock. - */ -static u3_noun -_cj_sink(u3_noun cor, u3_noun axe) -{ - u3_noun fol = u3x_at(axe, cor); - u3z(axe); - return u3n_nock_on(cor, u3k(fol)); -} - -/* u3j_kick(): new kick. -** -** `axe` is RETAINED by the caller; `cor` is RETAINED iff there -** is no kick, TRANSFERRED if one. -*/ -u3_weak -u3j_kick(u3_noun cor, u3_noun axe) -{ - u3t_on(glu_o); - u3_weak loc = _cj_spot(cor, NULL); - if ( u3_none == loc ) { - u3t_off(glu_o); - return u3_none; - } - else { - u3_weak act = _cj_find_warm(loc); - u3z(loc); - if ( u3_none == act ) { - u3t_off(glu_o); - return u3_none; - } - else { - c3_l jax_l; - u3_noun hap, bal, jit, inx; - - u3x_qual(act, &jax_l, &hap, &bal, &jit); - - if ( u3_none == (inx = u3kdb_get(u3k(hap), u3k(axe))) ) { - u3t_off(glu_o); - { - c3_o pof_o = __(u3C.wag_w & u3o_debug_cpu); - c3_o trc_o = __(u3C.wag_w & u3o_trace); - - if ( _(pof_o) ) { - pof_o = u3t_come(bal); - } - if ( _(trc_o) ) { - trc_o = u3t_nock_trace_push(bal); - } - u3z(act); - if ( _(pof_o) || _(trc_o) ) { - u3_noun pro = _cj_sink(cor, u3k(axe)); - - if (_(pof_o)) { - u3t_flee(); - } - if ( _(trc_o) ) { - u3t_nock_trace_pop(); - } - return pro; - } - else { - return u3_none; - } - } - } - else { - u3j_core* cop_u = &u3D.ray_u[jax_l]; - c3_l inx_l = inx; - u3j_harm* ham_u = &cop_u->arm_u[inx_l]; - c3_o pof_o = __(u3C.wag_w & u3o_debug_cpu); - c3_o trc_o = __(u3C.wag_w & u3o_trace); - u3_noun pro; - - if ( _(pof_o) ) { - pof_o = u3t_come(bal); - } - if ( _(trc_o) ) { - trc_o = u3t_nock_trace_push(bal); - } - u3z(act); - u3t_off(glu_o); - pro = _cj_kick_z(cor, cop_u, ham_u, axe); - - if ( u3_none == pro ) { - if ( _(pof_o) || _(trc_o) ) { - pro = _cj_sink(cor, u3k(axe)); - - if (_(pof_o)) { - u3t_flee(); - } - if ( _(trc_o) ) { - u3t_nock_trace_pop(); - } - } - return pro; - } - else { - if ( _(pof_o) ) { - u3t_flee(); - } - if ( _(trc_o) ) { - u3t_nock_trace_pop(); - } - return pro; - } - } - } - } -} - -/* _cj_fink_take(): copy u3j_fink from junior road. -*/ -static u3j_fink* -_cj_fink_take(u3j_fink* jun_u) -{ - c3_w i_w, len_w = jun_u->len_w; - u3j_fink* fin_u = u3a_walloc(c3_wiseof(u3j_fink) + - (len_w * c3_wiseof(u3j_fist))); - - fin_u->len_w = len_w; - fin_u->sat = u3a_take(jun_u->sat); - for ( i_w = 0; i_w < len_w; ++i_w ) { - u3j_fist* fis_u = &(fin_u->fis_u[i_w]); - u3j_fist* sif_u = &(jun_u->fis_u[i_w]); - fis_u->bat = u3a_take(sif_u->bat); - fis_u->pax = u3a_take(sif_u->pax); - } - return fin_u; -} - -/* _cj_fink_free(): lose and free everything in a u3j_fink. -*/ -static void -_cj_fink_free(u3p(u3j_fink) fin_p) -{ - c3_w i_w; - u3j_fink* fin_u = u3to(u3j_fink, fin_p); - u3z(fin_u->sat); - for ( i_w = 0; i_w < fin_u->len_w; ++i_w ) { - u3j_fist* fis_u = &(fin_u->fis_u[i_w]); - u3z(fis_u->bat); - u3z(fis_u->pax); - } - u3a_wfree(fin_u); -} - -/* u3j_rite_take(): copy junior rite references. [dst_u] is uninitialized -*/ -void -u3j_rite_take(u3j_rite* dst_u, u3j_rite* src_u) -{ - if ( u3_none == src_u->clu ) { - dst_u->clu = u3_none; - dst_u->fin_p = 0; - dst_u->own_o = c3n; - } - else { - dst_u->clu = u3a_take(src_u->clu); - dst_u->own_o = src_u->own_o; - dst_u->fin_p = ( c3n == src_u->own_o ) - ? src_u->fin_p - : u3of(u3j_fink, _cj_fink_take(u3to(u3j_fink, src_u->fin_p))); - } -} - -/* u3j_rite_merge(): copy rite references from src_u to dst_u, -** losing old references -*/ -void -u3j_rite_merge(u3j_rite* dst_u, u3j_rite* src_u) -{ - if ( u3_none != src_u->clu ) { - if ( u3_none != dst_u->clu ) { - u3z(dst_u->clu); - } - - dst_u->clu = src_u->clu; - - if ( dst_u->fin_p != src_u->fin_p ) { - if ( c3y == dst_u->own_o ) { - _cj_fink_free(dst_u->fin_p); - } - - dst_u->fin_p = src_u->fin_p; - dst_u->own_o = src_u->own_o; - } - } -} - -/* u3j_site_take(): copy junior site references. [dst_u] is uninitialized -*/ -void -u3j_site_take(u3j_site* dst_u, u3j_site* src_u) -{ - dst_u->axe = u3a_take(src_u->axe); - dst_u->bat = u3_none; - dst_u->bas = u3_none; - dst_u->pog_p = 0; - - if ( u3_none == src_u->loc ) { - dst_u->loc = u3_none; - dst_u->lab = u3_none; - dst_u->jet_o = c3n; - dst_u->cop_u = NULL; - dst_u->ham_u = NULL; - dst_u->fin_p = 0; - dst_u->fon_o = c3n; - } - else { - dst_u->loc = u3a_take(src_u->loc); - dst_u->lab = u3a_take(src_u->lab); - dst_u->jet_o = src_u->jet_o; - dst_u->cop_u = src_u->cop_u; - dst_u->ham_u = src_u->ham_u; - - if ( c3y == src_u->fon_o ) { - dst_u->fin_p = u3of(u3j_fink, _cj_fink_take(u3to(u3j_fink, src_u->fin_p))); - dst_u->fon_o = c3y; - } - else { - dst_u->fin_p = src_u->fin_p; - dst_u->fon_o = c3n; - } - } -} - -/* u3j_site_merge(): copy site references from src_u to dst_u, -** losing old references -*/ -void -u3j_site_merge(u3j_site* dst_u, u3j_site* src_u) -{ - u3z(dst_u->axe); - dst_u->axe = src_u->axe; - - if ( u3_none != src_u->loc ) { - u3z(dst_u->loc); - u3z(dst_u->lab); - dst_u->loc = src_u->loc; - dst_u->lab = src_u->lab; - dst_u->cop_u = src_u->cop_u; - dst_u->ham_u = src_u->ham_u; - dst_u->jet_o = src_u->jet_o; - - if ( dst_u->fin_p != src_u->fin_p ) { - if ( c3y == dst_u->fon_o ) { - _cj_fink_free(dst_u->fin_p); - } - - dst_u->fin_p = src_u->fin_p; - dst_u->fon_o = src_u->fon_o; - } - } -} - -/* u3j_site_ream(): refresh u3j_site after restoring from checkpoint -*/ -void -u3j_site_ream(u3j_site* sit_u) -{ - if ( u3_none != sit_u->loc ) { - u3z(sit_u->lab); - sit_u->jet_o = _cj_nail(sit_u->loc, sit_u->axe, - &(sit_u->lab), &(sit_u->cop_u), &(sit_u->ham_u)); - } -} - -/* _cj_site_lock(): ensure site has a valid program pointer - */ -static void -_cj_site_lock(u3_noun loc, u3_noun cor, u3j_site* sit_u) -{ - if ( (u3_none != sit_u->bat) && - (c3y == u3r_sing(sit_u->bat, u3h(cor))) ) { - return; - } - sit_u->pog_p = _cj_prog(loc, u3x_at(sit_u->axe, cor)); - if ( u3_none != sit_u->bat ) { - u3z(sit_u->bat); - } - sit_u->bat = u3k(u3h(cor)); -} - -/* _cj_burn(): stop tracing glu and call a nock program - */ -static u3_noun -_cj_burn(u3p(u3n_prog) pog_p, u3_noun cor) -{ - u3_noun pro; - u3t_off(glu_o); - pro = u3n_burn(pog_p, cor); - u3t_on(glu_o); - return pro; -} - -/* _cj_site_kick_hot(): execute site's kick on located core -** (no validity checks). -*/ -static u3_weak -_cj_site_kick_hot(u3_noun loc, u3_noun cor, u3j_site* sit_u, c3_o lok_o) -{ - u3_weak pro = u3_none; - c3_o jet_o = sit_u->jet_o; - c3_o pof_o = __(u3C.wag_w & u3o_debug_cpu); - c3_o trc_o = __(u3C.wag_w & u3o_trace); - - if ( c3n == pof_o && c3n == trc_o ) { - if ( c3y == jet_o ) { - u3t_off(glu_o); - pro = _cj_kick_z(cor, sit_u->cop_u, sit_u->ham_u, sit_u->axe); - u3t_on(glu_o); - } - if ( u3_none == pro ) { - if ( c3y == lok_o ) { - _cj_site_lock(loc, cor, sit_u); - } - } - } - else { - if ( _(pof_o) ) { - pof_o = u3t_come(sit_u->lab); - } - if ( _(trc_o) ) { - trc_o = u3t_nock_trace_push(sit_u->lab); - } - - if ( c3y == jet_o ) { - u3t_off(glu_o); - pro = _cj_kick_z(cor, sit_u->cop_u, sit_u->ham_u, sit_u->axe); - u3t_on(glu_o); - } - if ( u3_none == pro ) { - if ( c3y == lok_o ) { - _cj_site_lock(loc, cor, sit_u); - } - pro = _cj_burn(sit_u->pog_p, cor); - } - - if ( c3y == pof_o ) { - u3t_flee(); - } - if ( c3y == trc_o ) { - u3t_nock_trace_pop(); - } - } - - return pro; -} - -/* _cj_site_kick(): execute site's kick on core. - */ -static u3_weak -_cj_site_kick(u3_noun cor, u3j_site* sit_u) -{ - u3_weak loc, pro; - - loc = pro = u3_none; - - if ( u3_none != sit_u->loc ) { - if ( c3y == _cj_fine(cor, sit_u->fin_p) ) { - loc = sit_u->loc; - pro = _cj_site_kick_hot(loc, cor, sit_u, c3y); - } - } - - if ( u3_none == loc ) { - loc = _cj_spot(cor, &(sit_u->bas)); - if ( u3_none != loc ) { - u3p(u3j_fink) fon_p = 0; - u3_weak lod = u3_none; - u3_weak lob = u3_none; - - if ( u3_none != sit_u->loc ) { - lod = sit_u->loc; - lob = sit_u->lab; - if ( c3y == sit_u->fon_o ) { - fon_p = sit_u->fin_p; - } - } - - sit_u->loc = loc; - sit_u->fin_p = _cj_cast(cor, loc); - sit_u->fon_o = c3y; - sit_u->jet_o = _cj_nail(loc, sit_u->axe, - &(sit_u->lab), &(sit_u->cop_u), &(sit_u->ham_u)); - pro = _cj_site_kick_hot(loc, cor, sit_u, c3y); - - if ( u3_none != lod ) { - u3z(lod); - u3z(lob); - if ( 0 != fon_p ) { - _cj_fink_free(fon_p); - } - } - } - } - - if ( u3_none == pro ) { - _cj_site_lock(loc, cor, sit_u); - } - - return pro; -} - -/* u3j_site_kick(): kick a core with a u3j_site cache. - */ -u3_weak -u3j_site_kick(u3_noun cor, u3j_site* sit_u) -{ - u3_weak pro; - u3t_on(glu_o); - pro = _cj_site_kick(cor, sit_u); - u3t_off(glu_o); - return pro; -} - -/* u3j_cook(): Execute hook from core, call site cached by arbitrary c string -*/ -u3_noun -u3j_cook(const c3_c* key_c, - u3_noun cor, - const c3_c* tam_c) -{ - u3_noun pro, key, tam, inn; - _cj_hank* han_u; - - u3t_on(glu_o); - key = u3i_string(key_c); - tam = u3i_string(tam_c); - han_u = _cj_hank_find(key, tam); - if ( c3n == _cj_hank_fine(han_u, cor, &inn) ) { - _cj_hank_lose(han_u); - inn = _cj_hank_fill(han_u, tam, cor); - } - pro = _cj_site_kick(u3k(inn), &(han_u->sit_u)); - if ( u3_none == pro ) { - pro = _cj_burn(han_u->sit_u.pog_p, inn); - } - u3z(cor); - - u3z(key); - u3z(tam); - u3t_off(glu_o); - return pro; -} - -/* u3j_kink(): kick either by jet or by nock. -*/ -u3_noun -u3j_kink(u3_noun cor, u3_noun axe) -{ - u3_weak pro = u3j_kick(cor, axe); - - if ( u3_none != pro ) { - return pro; - } - else { - return _cj_sink(cor, axe); - } -} - -/* u3j_gate_prep(): prepare a locally cached gate to call repeatedly. - * core is TRANSFERRED. - */ -void -u3j_gate_prep(u3j_site* sit_u, u3_noun cor) -{ - u3_noun loc; - u3t_on(glu_o); - if ( c3n == u3du(cor) || c3n == u3du(u3t(cor)) ) { - u3m_bail(c3__exit); - return; - } - sit_u->bas = u3_none; - sit_u->axe = 2; - sit_u->bat = cor; // a lie, this isn't really the battery! - sit_u->loc = loc = _cj_spot(cor, &(sit_u->bas)); - sit_u->pog_p = _cj_prog(loc, u3h(cor)); - if ( u3_none != loc ) { - u3_noun pax = _cj_loc_axe(loc), - pay = u3qc_cap(pax), - pam = u3qc_mas(pax); - if ( 3 != pay || 2 == pam || (3 != pam && 3 != u3qc_cap(pam)) ) { - u3l_log("u3j_gate_prep(): parent axis includes sample\r\n"); - u3m_p("axis", pax); - u3_weak act = _cj_find_warm(loc); - c3_assert( u3_none != act ); - sit_u->jet_o = c3n; - sit_u->lab = u3k(u3h(u3t(u3t(act)))); - u3z(act); - } - else { - sit_u->jet_o = _cj_nail(loc, 2, - &(sit_u->lab), &(sit_u->cop_u), &(sit_u->ham_u)); - } - u3z(pam); u3z(pax); - } - u3t_off(glu_o); -} - -/* u3j_gate_slam(): slam a site prepared by u3j_gate_find() with sample. - * sam is TRANSFERRED. - */ -u3_noun -u3j_gate_slam(u3j_site* sit_u, u3_noun sam) -{ - u3_weak pro; - u3_noun cor; - - u3t_on(glu_o); - pro = u3_none; - cor = u3nt(u3k(u3h(sit_u->bat)), - sam, - u3k(u3t(u3t(sit_u->bat)))); - if ( u3_none != sit_u->loc ) { - pro = _cj_site_kick_hot(sit_u->loc, cor, sit_u, c3n); - } - if ( u3_none == pro ) { - pro = _cj_burn(sit_u->pog_p, cor); - } - u3t_off(glu_o); - return pro; -} - -/* u3j_gate_lose(): clean up site prepared by u3j_gate_find(). - */ -void -u3j_gate_lose(u3j_site* sit_u) -{ - u3z(sit_u->bat); - u3z(sit_u->bas); - if ( u3_none != sit_u->loc ) { - u3z(sit_u->loc); - u3z(sit_u->lab); - } -} - -/* _cj_minx(): produce location of core from fsck'd clue. RETAIN. - */ -static u3_weak -_cj_minx(u3_noun cey, u3_noun cor) -{ - u3_noun nam, axe, huc; - u3x_trel(cey, &nam, &axe, &huc); - - if ( 0 == axe ) { - return u3nt(u3nt(c3y, c3y, u3k(u3t(cor))), u3k(nam), u3k(huc)); - } - else { - u3_weak par, pel; - u3_noun pat; - - par = u3r_at(axe, cor); - if ( u3_none == par || c3n == u3du(par) ) { - u3l_log("fund: %s is bogus\r\n", u3r_string(nam)); - return u3_none; - } - pel = _cj_spot(par, NULL); - if ( u3_none == pel ) { - u3l_log("fund: in %s, parent %x not found at %d\r\n", - u3r_string(nam), - u3r_mug(u3h(par)), - axe); - return u3_none; - } - pat = ( ( 3 == axe ) && (c3y == u3h(u3h(pel))) ) - ? u3nt(c3y, c3n, pel) - : u3nt(c3n, u3k(axe), pel); - return u3nt(pat, u3k(nam), u3k(huc)); - } -} - -static void -_cj_print_tas(u3_noun tas) -{ - c3_w met_w = u3r_met(3, tas); - c3_c* str_c = alloca(met_w + 1); - u3r_bytes(0, met_w, (c3_y*)str_c, tas); - str_c[met_w] = 0; - u3l_log("/%s", str_c); -} - -/* _cj_mine(): declare a core and produce location. RETAIN. -*/ -static u3_weak -_cj_mine(u3_noun cey, u3_noun cor, u3_noun bas) -{ - u3_weak loc = _cj_minx(cey, cor); - if ( u3_none != loc ) { - c3_l par_l, jax_l; - u3_noun pel = _cj_loc_pel(loc), - axe = _cj_loc_axe(loc), - bat = u3h(cor), - nam = u3h(u3t(loc)), - bar = _cj_find_cold(bat), - reg, hap, bal, act; - if ( u3_none == bar ) { - reg = u3_none; - } - else { - reg = u3k(u3t(bar)); - u3z(bar); - } - reg = _cj_gust(reg, u3k(axe), u3k(pel), u3k(loc)); - if ( 0 == axe ) { - par_l = 0; - bal = u3nc(u3k(nam), u3_nul); - } - else { - u3_weak pac = _cj_find_warm(pel); - c3_assert(u3_none != pac); - par_l = u3h(pac); - bal = u3nc(u3k(nam), u3k(u3h(u3t(u3t(pac))))); - u3z(pac); - } - jax_l = _cj_hot_mean(par_l, nam); -#if 0 - u3m_p("new jet", bal); - u3l_log(" bat %x, jax %d\r\n", u3r_mug(bat), jax_l); -#endif - - if ( !(u3C.wag_w & u3o_hashless) ) { - if ( jax_l ) { - c3_y dig_y[32]; - c3_w i_w; - u3_noun i = bal; - u3l_log("hot jet: "); - while ( i != u3_nul ) { - _cj_print_tas(u3h(i)); - i = u3t(i); - } - u3l_log("\r\n axe %d, jax %d,\r\n bash ", axe, jax_l); - u3r_bytes(0, 32, dig_y, bas); - for ( i_w = 32; i_w > 0; ) { - u3l_log("%02x", dig_y[--i_w]); - } - u3l_log("\r\n"); - } - } - - hap = _cj_warm_hump(jax_l, u3t(u3t(loc))); - act = u3nq(jax_l, hap, bal, _cj_jit(jax_l, bat)); - u3h_put(u3R->jed.cod_p, bat, u3nc(u3k(bas), reg)); - u3h_put(u3R->jed.war_p, loc, act); // see note in _cj_spot - u3z(pel); u3z(axe); - } - - return loc; -#if 0 - { - u3_noun bas = _cj_bash(bat), - hot = u3h_get(u3D.hot_p, bas); - c3_o hav_o = c3n; - - if ( u3_none != hot ) { - u3_noun her = u3h(hot), - hol = _cj_reg_find(her, cor); - if ( hol != u3_none ) { - hav_o = c3y; - u3z(hol); - } - u3z(hot); - } - - if ( c3n == hav_o ) { - u3m_p("unregistered battery", bal); - u3l_log("hash: %x\r\n", bas); - } - u3z(bas); - } -#endif -} - -static void -_cj_audit(u3_noun loc, u3_noun cey, u3_noun cor) -{ - u3_noun pat, nam, huc, cax, can, cuc, pax; - - u3x_trel(loc, &pat, &nam, &huc); - u3x_trel(cey, &can, &cax, &cuc); - - pax = _cj_loc_axe(loc); - - if ( (c3n == u3r_sing(nam, can)) || - (c3n == u3r_sing(pax, cax)) || - (c3n == u3r_sing(huc, cuc)) ) { - u3_noun mix = _cj_minx(cey, cor); - u3m_p("bad audit", loc); - u3m_p("hint says", mix); - u3z(mix); - } - - u3z(pax); -} - -/* _cj_mile(): register core for jets, returning location. -*/ -static u3_weak -_cj_mile(u3_noun clu, u3_noun cor) -{ - u3_weak loc = u3_none; - if ( c3n == u3du(cor) ) { - u3z(clu); - u3z(cor); - } - else { - u3_weak cey = _cj_je_fsck(clu); - if ( u3_none != cey ) { - u3_weak bas = u3_none; - loc = _cj_spot(cor, &bas); - if ( u3_none == loc ) { - loc = _cj_mine(cey, cor, bas); - } - else { - _cj_audit(loc, cey, cor); - } - u3z(cey); - if ( u3_none != bas ) { - u3z(bas); - } - } - u3z(cor); - } - return loc; -} - -/* u3j_mine(): register core for jets. -*/ -void -u3j_mine(u3_noun clu, u3_noun cor) -{ - u3_weak loc; - u3t_on(glu_o); - loc = _cj_mile(clu, cor); - u3z(loc); - u3t_off(glu_o); -} - -/* u3j_rite_mine(): mine cor with clue, using u3j_rite for caching -*/ -void -u3j_rite_mine(u3j_rite* rit_u, u3_noun clu, u3_noun cor) -{ - c3_t non_t; - u3t_on(glu_o); - - non_t = (u3_none == rit_u->clu); - - if ( non_t || - c3n == u3r_sing(rit_u->clu, clu) || - c3n == _cj_fine(cor, rit_u->fin_p) ) { - u3_weak loc = _cj_mile(u3k(clu), u3k(cor)); - if ( u3_none != loc ) { - u3p(u3j_fink) fon_p = rit_u->fin_p; - u3_noun old = rit_u->clu; - c3_o own_o = rit_u->own_o; - rit_u->own_o = c3y; - rit_u->clu = u3k(clu); - rit_u->fin_p = _cj_cast(cor, loc); - u3z(loc); - - if ( !non_t && (c3y == own_o) ) { - u3z(old); - _cj_fink_free(fon_p); - } - } - } - u3z(clu); - u3z(cor); - u3t_off(glu_o); -} - -/* _cj_take_hank_cb(): u3h_take_with cb for taking hanks -*/ -static u3p(_cj_hank) -_cj_take_hank_cb(u3p(_cj_hank) nah_p) -{ - _cj_hank* nah_u = u3to(_cj_hank, nah_p); - _cj_hank* han_u = u3a_walloc(c3_wiseof(_cj_hank)); - - if ( u3_none == nah_u->hax ) { - han_u->hax = u3_none; - // han_u->sit_u left uninitialized, will be ignored - } - else { - han_u->hax = u3a_take(nah_u->hax); - u3j_site_take(&(han_u->sit_u), &(nah_u->sit_u)); - } - - return u3of(_cj_hank, han_u); -} - -/* u3j_take(): copy junior jet state. -*/ -u3a_jets -u3j_take(u3a_jets jed_u) -{ - jed_u.war_p = u3h_take(jed_u.war_p); - jed_u.cod_p = u3h_take(jed_u.cod_p); - jed_u.han_p = u3h_take_with(jed_u.han_p, _cj_take_hank_cb); - jed_u.bas_p = u3h_take(jed_u.bas_p); - return jed_u; -} - -/* _cj_merge_hank_cb(): u3h_uni_with cb for integrating taken hanks -** NB "transfers" or frees hanks in jed_u.han_p -*/ -static void -_cj_merge_hank_cb(u3_noun kev, void* wit) -{ - u3p(u3h_root) han_p = *(u3p(u3h_root)*)wit; - _cj_hank* nah_u; - u3_noun key; - u3p(_cj_hank) nah_p; - u3x_cell(kev, &key, &nah_p); - - nah_u = u3to(_cj_hank, nah_p); - - if ( u3_none == nah_u->hax ) { - u3a_wfree(nah_u); - } - else { - _cj_hank* han_u; - u3_weak got = u3h_git(u3R->jed.han_p, key); - - if ( u3_none == got ) { - han_u = nah_u; - } - else { - han_u = u3to(_cj_hank, got); - - if ( u3_none != han_u->hax ) { - u3z(han_u->hax); - } - han_u->hax = nah_u->hax; - - u3j_site_merge(&(han_u->sit_u), &(nah_u->sit_u)); - u3a_wfree(nah_u); - } - - u3h_put(han_p, key, u3of(_cj_hank, han_u)); - } -} - -/* u3j_reap(): promote jet state. -*/ -void -u3j_reap(u3a_jets jed_u) -{ - u3h_uni(u3R->jed.war_p, jed_u.war_p); - u3h_free(jed_u.war_p); - - u3h_uni(u3R->jed.cod_p, jed_u.cod_p); - u3h_free(jed_u.cod_p); - - u3h_walk_with(jed_u.han_p, _cj_merge_hank_cb, &u3R->jed.han_p); - u3h_free(jed_u.han_p); - - u3h_uni(u3R->jed.bas_p, jed_u.bas_p); - u3h_free(jed_u.bas_p); -} - -/* _cj_ream(): ream list of battery [bash registry] pairs. RETAIN. - */ -static void -_cj_ream(u3_noun all) -{ - c3_l par_l, jax_l; - u3_noun i, j, k, rul, loc, bal, act, lop, kev, rut, hap, - pat, reg, pol, rem, rec, bat, pel, nam, huc; - u3_weak pac; - - for ( i = all, lop = u3_nul; i != u3_nul; i = u3t(i) ) { - kev = u3h(i); - bat = u3h(kev); - reg = u3t(u3t(kev)); - rut = u3h(reg); - - // register roots - rul = u3qdb_tap(rut); - for ( j = rul; j != u3_nul; j = u3t(j) ) { - loc = u3t(u3h(j)); - u3x_trel(loc, &pat, &nam, &huc); - bal = u3nc(u3k(nam), u3_nul); - jax_l = _cj_hot_mean(0, nam); - hap = _cj_warm_hump(jax_l, huc); - act = u3nq(jax_l, hap, bal, _cj_jit(jax_l, bat)); -#if 0 - u3m_p("old jet", bal); - u3l_log(" bat %x, jax %d\r\n", u3r_mug(bat), jax_l); -#endif - u3h_put(u3R->jed.war_p, loc, act); - } - u3z(rul); - - // put ancestors in lop (list [battery=^ parent=location this=location]) - for ( j = u3t(reg); j != u3_nul; j = u3t(j) ) { - pol = lop; - lop = u3qdb_tap(u3t(u3h(j))); - for ( k = lop; u3_nul != k; k = u3t(k) ) { - pol = u3nc(u3nc(u3k(bat), u3k(u3h(k))), pol); - } - u3z(lop); - lop = pol; - } - } - - // ordering is random so we need to push onto rem when parent - // isn't yet present in the warm state - while ( u3_nul != lop ) { - rem = u3_nul; - for ( i = lop; u3_nul != i; i = u3t(i) ) { - rec = u3h(i); - u3x_trel(rec, &bat, &pel, &loc); - pac = _cj_find_warm(pel); - if ( u3_none == pac ) { - rem = u3nc(u3k(rec), rem); - } - else { - u3x_trel(loc, &pat, &nam, &huc); - par_l = u3h(pac); - jax_l = _cj_hot_mean(par_l, nam); - bal = u3nc(u3k(nam), u3k(u3h(u3t(u3t(pac))))); - hap = _cj_warm_hump(jax_l, huc), - u3z(pac); - act = u3nq(jax_l, hap, bal, _cj_jit(jax_l, bat)); -#if 0 - u3m_p("old jet", bal); - u3l_log(" bat %x, jax %d\r\n", u3r_mug(bat), jax_l); -#endif - u3h_put(u3R->jed.war_p, loc, act); - } - } - u3z(lop); - lop = rem; - } -} - -/* _cj_warm_tap(): tap war_p to rel -*/ -static void -_cj_warm_tap(u3_noun kev, void* wit) -{ - u3_noun* rel = wit; - *rel = u3nc(u3k(kev), *rel); -} - -/* _cj_ream_hank(): clear hot state out of hook sites. -*/ -static void -_cj_ream_hank(u3_noun kev) -{ - u3j_site_ream(&(u3to(_cj_hank, u3t(kev))->sit_u)); -} - -/* u3j_ream(): rebuild warm state -*/ -void -u3j_ream(void) -{ - u3_noun rel = u3_nul; - c3_assert(u3R == &(u3H->rod_u)); - u3h_free(u3R->jed.war_p); - u3R->jed.war_p = u3h_new(); - u3h_walk_with(u3R->jed.cod_p, _cj_warm_tap, &rel); - _cj_ream(rel); - u3z(rel); - - u3h_walk(u3R->jed.han_p, _cj_ream_hank); -} - -/* u3j_stay(): extract cold state -*/ -u3_noun -u3j_stay(void) -{ - u3_noun rel = u3_nul; - c3_assert(u3R == &(u3H->rod_u)); - u3h_walk_with(u3R->jed.cod_p, _cj_warm_tap, &rel); - return rel; -} - -/* u3j_load(): inject cold state -*/ -void -u3j_load(u3_noun rel) -{ - u3_noun ler = rel; - u3_noun lor; - - while ( u3_nul != ler ) { - u3x_cell(ler, &lor, &ler); - u3h_put(u3R->jed.cod_p, u3h(lor), u3k(u3t(lor))); - } - - u3z(rel); -} - -/* _cj_fink_mark(): mark a u3j_fink for gc. -*/ -static c3_w -_cj_fink_mark(u3j_fink* fin_u) -{ - c3_w i_w, tot_w = u3a_mark_noun(fin_u->sat); - for ( i_w = 0; i_w < fin_u->len_w; ++i_w ) { - u3j_fist* fis_u = &(fin_u->fis_u[i_w]); - tot_w += u3a_mark_noun(fis_u->bat); - tot_w += u3a_mark_noun(fis_u->pax); - } - tot_w += u3a_mark_ptr(fin_u); - return tot_w; -} - -/* u3j_site_lose(): lose references of u3j_site (but do not free). - */ -void -u3j_site_lose(u3j_site* sit_u) -{ - u3z(sit_u->axe); - if ( u3_none != sit_u->bat ) { - u3z(sit_u->bat); - } - if ( u3_none != sit_u->bas ) { - u3z(sit_u->bas); - } - if ( u3_none != sit_u->loc ) { - u3z(sit_u->loc); - u3z(sit_u->lab); - if ( c3y == sit_u->fon_o ) { - _cj_fink_free(sit_u->fin_p); - } - } -} - -/* u3j_rite_lose(): lose references of u3j_rite (but do not free). - */ -void -u3j_rite_lose(u3j_rite* rit_u) -{ - if ( (c3y == rit_u->own_o) && u3_none != rit_u->clu ) { - u3z(rit_u->clu); - _cj_fink_free(rit_u->fin_p); - } -} - -/* u3j_rite_mark(): mark u3j_rite for gc. -*/ -c3_w -u3j_rite_mark(u3j_rite* rit_u) -{ - c3_w tot_w = 0; - if ( (c3y == rit_u->own_o) && u3_none != rit_u->clu ) { - tot_w += u3a_mark_noun(rit_u->clu); - tot_w += _cj_fink_mark(u3to(u3j_fink, rit_u->fin_p)); - } - return tot_w; -} - -/* u3j_site_mark(): mark u3j_site for gc. -*/ -c3_w -u3j_site_mark(u3j_site* sit_u) -{ - c3_w tot_w = u3a_mark_noun(sit_u->axe); - if ( u3_none != sit_u->bat ) { - tot_w += u3a_mark_noun(sit_u->bat); - } - if ( u3_none != sit_u->bas ) { - tot_w += u3a_mark_noun(sit_u->bas); - } - if ( u3_none != sit_u->loc ) { - tot_w += u3a_mark_noun(sit_u->loc); - tot_w += u3a_mark_noun(sit_u->lab); - if ( c3y == sit_u->fon_o ) { - tot_w += _cj_fink_mark(u3to(u3j_fink, sit_u->fin_p)); - } - } - return tot_w; -} - -/* _cj_mark_hank(): mark hank cache for gc. -*/ -static void -_cj_mark_hank(u3_noun kev, void* dat) -{ - c3_w* tot_w = (c3_w*) dat; - _cj_hank* han_u = u3to(_cj_hank, u3t(kev)); - *tot_w += u3a_mark_ptr(han_u); - if ( u3_none != han_u->hax ) { - *tot_w += u3a_mark_noun(han_u->hax); - *tot_w += u3j_site_mark(&(han_u->sit_u)); - } -} - -/* u3j_mark(): mark jet state for gc. -*/ -c3_w -u3j_mark(FILE* fil_u) -{ - c3_w tot_w = 0; - - tot_w += u3a_maid(fil_u, " warm jet state", u3h_mark(u3R->jed.war_p)); - tot_w += u3a_maid(fil_u, " cold jet state", u3h_mark(u3R->jed.cod_p)); - tot_w += u3a_maid(fil_u, " hank cache", u3h_mark(u3R->jed.han_p)); - tot_w += u3a_maid(fil_u, " battery hash cache", u3h_mark(u3R->jed.bas_p)); - - { - c3_w han_w = 0; - u3h_walk_with(u3R->jed.han_p, _cj_mark_hank, &han_w); - tot_w += u3a_maid(fil_u, " call site cache", han_w); - } - - if ( u3R == &(u3H->rod_u) ) { - tot_w += u3a_maid(fil_u, " hot jet state", u3h_mark(u3R->jed.hot_p)); - } - - return u3a_maid(fil_u, "total jet stuff", tot_w); -} - -/* _cj_free_hank(): free an entry from the hank cache. -*/ -static void -_cj_free_hank(u3_noun kev) -{ - _cj_hank* han_u = u3to(_cj_hank, u3t(kev)); - if ( u3_none != han_u->hax ) { - u3z(han_u->hax); - u3j_site_lose(&(han_u->sit_u)); - } - u3a_wfree(han_u); -} - -/* u3j_free(): free jet state. -*/ -void -u3j_free(void) -{ - u3h_walk(u3R->jed.han_p, _cj_free_hank); - u3h_free(u3R->jed.war_p); - u3h_free(u3R->jed.cod_p); - u3h_free(u3R->jed.han_p); - u3h_free(u3R->jed.bas_p); - if ( u3R == &(u3H->rod_u) ) { - u3h_free(u3R->jed.hot_p); - } -} - -/* u3j_reclaim(): clear ad-hoc persistent caches to reclaim memory. -*/ -void -u3j_reclaim(void) -{ - // re-establish the warm jet state - // - // XX might this reduce fragmentation? - // - // if ( &(u3H->rod_u) == u3R ) { - // u3j_ream(); - // } - - // clear the jet hank cache - // - u3h_walk(u3R->jed.han_p, _cj_free_hank); - u3h_free(u3R->jed.han_p); - u3R->jed.han_p = u3h_new(); -} - -/* u3j_rewrite_compact(): rewrite jet state for compaction. - * - * NB: u3R->jed.han_p *must* be cleared (currently via u3j_reclaim above) - * since it contains hanks which are not nouns but have loom pointers. - * Alternately, rewrite the entries with u3h_walk, using u3j_mark as a - * template for how to walk. There's an untested attempt at this in git - * history at e8a307a. -*/ -void -u3j_rewrite_compact() -{ - u3h_rewrite(u3R->jed.war_p); - u3h_rewrite(u3R->jed.cod_p); - u3h_rewrite(u3R->jed.han_p); - u3h_rewrite(u3R->jed.bas_p); - - if ( u3R == &(u3H->rod_u) ) { - u3h_rewrite(u3R->jed.hot_p); - u3R->jed.hot_p = u3a_rewritten(u3R->jed.hot_p); - } - - u3R->jed.war_p = u3a_rewritten(u3R->jed.war_p); - u3R->jed.cod_p = u3a_rewritten(u3R->jed.cod_p); - u3R->jed.han_p = u3a_rewritten(u3R->jed.han_p); - u3R->jed.bas_p = u3a_rewritten(u3R->jed.bas_p); -} diff --git a/pkg/urbit/noun/log.c b/pkg/urbit/noun/log.c deleted file mode 100644 index 866a7430e..000000000 --- a/pkg/urbit/noun/log.c +++ /dev/null @@ -1,37 +0,0 @@ -/* noun/log.c -** -*/ -#include "all.h" - -#include - -void -u3l_log(const char* format, ...) -{ - va_list myargs; - va_start(myargs, format); - - if (u3C.stderr_log_f) { - // the user set their own logging function. render the line and redirect - // to them. - // - char msg[4096]; - vsnprintf(msg, 4096, format, myargs); - u3C.stderr_log_f(msg); - } else { - // this process did not set a logging function, fallback to stderr - // - vfprintf(stderr, format, myargs); - } - - va_end(myargs); -} - -u3_weak -u3l_punt(const char* name, u3_weak pro) -{ - if ( u3_none == pro ) { - u3l_log("%s-punt\r\n", name); - } - return pro; -} diff --git a/pkg/urbit/noun/manage.c b/pkg/urbit/noun/manage.c deleted file mode 100644 index 5ac556823..000000000 --- a/pkg/urbit/noun/manage.c +++ /dev/null @@ -1,1905 +0,0 @@ -/* n/m.c -** -*/ -#include "all.h" -#include "rsignal.h" -#include "vere/vere.h" -#include -#include -#include -#include -#include -#include - -// XX stack-overflow recovery should be gated by -a -// -#undef NO_OVERFLOW - - /* (u3_noun)setjmp(u3R->esc.buf): setjmp within road. - */ -#if 0 - c3_o - u3m_trap(void); -#else -# define u3m_trap() (u3_noun)(_setjmp(u3R->esc.buf)) -#endif - - /* u3m_signal(): treat a nock-level exception as a signal interrupt. - */ - void - u3m_signal(u3_noun sig_l); - - /* u3m_dump(): dump the current road to stderr. - */ - void - u3m_dump(void); - - /* u3m_fall(): return to parent road. - */ - void - u3m_fall(void); - - /* u3m_leap(): in u3R, create a new road within the existing one. - */ - void - u3m_leap(c3_w pad_w); - - /* u3m_golf(): record cap length for u3m_flog(). - */ - c3_w - u3m_golf(void); - - /* u3m_flog(): pop the cap. - ** - ** A common sequence for inner allocation is: - ** - ** c3_w gof_w = u3m_golf(); - ** u3m_leap(); - ** // allocate some inner stuff... - ** u3m_fall(); - ** // inner stuff is still valid, but on cap - ** u3m_flog(gof_w); - ** - ** u3m_flog(0) simply clears the cap. - */ - void - u3m_flog(c3_w gof_w); - - /* u3m_soft_top(): top-level safety wrapper. - */ - u3_noun - u3m_soft_top(c3_w mil_w, // timer ms - c3_w pad_w, // base memory pad - u3_funk fun_f, - u3_noun arg); - - -// u3m_signal uses restricted functionality signals for compatibility reasons: -// some platforms may not provide true POSIX asynchronous signals and their -// compat layer will then implement this restricted functionality subset. -// u3m_signal never needs to interrupt I/O operations, its signal handlers -// do not manipulate signals, do not modify shared state, and always either -// return or longjmp. -// -static rsignal_jmpbuf u3_Signal; - -#if !defined(U3_OS_mingw) -#include - -#ifndef SIGSTKSZ -# define SIGSTKSZ 16384 -#endif -#ifndef NO_OVERFLOW -static uint8_t Sigstk[SIGSTKSZ]; -#endif -#endif - -#if 0 -/* _cm_punt(): crudely print trace. -*/ -static void -_cm_punt(u3_noun tax) -{ - u3_noun xat; - - for ( xat = tax; xat; xat = u3t(xat) ) { - u3m_p("&", u3h(xat)); - } -} -#endif - -/* _cm_emergency(): write emergency text to stderr, never failing. -*/ -static void -_cm_emergency(c3_c* cap_c, c3_l sig_l) -{ - c3_i ret_i; - - ret_i = write(2, "\r\n", 2); - ret_i = write(2, cap_c, strlen(cap_c)); - - if ( sig_l ) { - ret_i = write(2, ": ", 2); - ret_i = write(2, &sig_l, 4); - } - - ret_i = write(2, "\r\n", 2); -} - -static void _cm_overflow(void *arg1, void *arg2, void *arg3) -{ - (void)(arg1); - (void)(arg2); - (void)(arg3); - u3m_signal(c3__over); -} - -/* _cm_signal_handle(): handle a signal in general. -*/ -static void -_cm_signal_handle(c3_l sig_l) -{ -#ifndef U3_OS_mingw - if ( c3__over == sig_l ) { -#ifndef NO_OVERFLOW - sigsegv_leave_handler(_cm_overflow, NULL, NULL, NULL); -#endif - } else -#endif - { - u3m_signal(sig_l); - } -} - -#ifndef NO_OVERFLOW -static void -#ifndef U3_OS_mingw -_cm_signal_handle_over(int emergency, stackoverflow_context_t scp) -#else -_cm_signal_handle_over(int x) -#endif -{ - _cm_signal_handle(c3__over); -} -#endif - -static void -_cm_signal_handle_term(int x) -{ - // Ignore if we are using base memory from work memory, very rare. - // - if ( (0 != u3H->rod_u.kid_p) && (&(u3H->rod_u) == u3R) ) { - _cm_emergency("ignored", c3__term); - } - else { - _cm_signal_handle(c3__term); - } -} - -static void -_cm_signal_handle_intr(int x) -{ - // Interrupt: stop work. Ignore if not working, or (rarely) using base. - // - if ( &(u3H->rod_u) == u3R ) { - _cm_emergency("ignored", c3__intr); - } - else { - _cm_signal_handle(c3__intr); - } -} - -static void -_cm_signal_handle_alrm(int x) -{ - _cm_signal_handle(c3__alrm); -} - -/* _cm_signal_reset(): reset top road after signal longjmp. -*/ -static void -_cm_signal_reset(void) -{ - u3R = &u3H->rod_u; - u3R->cap_p = u3R->mat_p; - u3R->ear_p = 0; - u3R->kid_p = 0; -} - -#if 0 -/* _cm_stack_recover(): recover stack trace, with lacunae. -*/ -static u3_noun -_cm_stack_recover(u3a_road* rod_u) -{ - c3_w len_w; - - len_w = 0; - { - u3_noun tax = rod_u->bug.tax; - - while ( tax ) { - len_w++; - tax = u3t(tax); - } - - if ( len_w < 4096 ) { - return u3a_take(rod_u->bug.tax); - } - else { - u3_noun beg, fin; - c3_w i_w; - - tax = rod_u->bug.tax; - beg = u3_nul; - for ( i_w = 0; i_w < 2048; i_w++ ) { - beg = u3nc(u3a_take(u3h(tax)), beg); - tax = u3t(tax); - } - beg = u3kb_flop(beg); - - for ( i_w = 0; i_w < (len_w - 4096); i_w++ ) { - tax = u3t(tax); - } - fin = u3nc(u3nc(c3__lose, c3__over), u3a_take(tax)); - - return u3kb_weld(beg, fin); - } - } -} -#endif - -/* _cm_stack_unwind(): unwind to the top level, preserving all frames. -*/ -static u3_noun -_cm_stack_unwind(void) -{ - u3_noun tax; - - while ( u3R != &(u3H->rod_u) ) { - u3_noun yat = u3m_love(u3R->bug.tax); - - u3R->bug.tax = u3kb_weld(yat, u3R->bug.tax); - } - tax = u3R->bug.tax; - - u3R->bug.tax = 0; - return tax; -} - -/* _cm_signal_recover(): recover from a deep signal, after longjmp. Free arg. -*/ -static u3_noun -_cm_signal_recover(c3_l sig_l, u3_noun arg) -{ - u3_noun tax; - - // Unlikely to be set, but it can be made to happen. - // - tax = u3H->rod_u.bug.tax; - u3H->rod_u.bug.tax = 0; - - if ( &(u3H->rod_u) == u3R ) { - // A top-level crash - rather odd. We should GC. - // - _cm_emergency("recover: top", sig_l); - u3C.wag_w |= u3o_check_corrupt; - - // Reset the top road - the problem could be a fat cap. - // - _cm_signal_reset(); - - if ( (c3__meme == sig_l) && (u3a_open(u3R) <= 256) ) { - // Out of memory at the top level. Error becomes c3__full, - // and we release the emergency buffer. To continue work, - // we need to readjust the image, eg, migrate to 64 bit. - // - u3z(u3R->bug.mer); - u3R->bug.mer = 0; - sig_l = c3__full; - } - return u3nt(3, sig_l, tax); - } - else { - u3_noun pro; - - // A signal was generated while we were within Nock. - // - _cm_emergency("recover: dig", sig_l); - -#if 0 - // Descend to the innermost trace, collecting stack. - // - { - u3a_road* rod_u; - - u3R = &(u3H->rod_u); - rod_u = u3R; - - while ( rod_u->kid_p ) { -#if 0 - u3l_log("collecting %d frames\r\n", - u3kb_lent((u3to(u3_road, rod_u->kid_p)->bug.tax)); -#endif - tax = u3kb_weld(_cm_stack_recover(u3to(u3_road, rod_u->kid_p)), tax); - rod_u = u3to(u3_road, rod_u->kid_p); - } - } -#else - tax = _cm_stack_unwind(); -#endif - pro = u3nt(3, sig_l, tax); - _cm_signal_reset(); - - u3z(arg); - return pro; - } -} - -/* _cm_signal_deep(): start deep processing; set timer for [mil_w] or 0. -*/ -static void -_cm_signal_deep(c3_w mil_w) -{ - // disable outer system signal handling - // - if ( 0 != u3C.sign_hold_f ) { - u3C.sign_hold_f(); - } - -#ifndef NO_OVERFLOW -#ifndef U3_OS_mingw - stackoverflow_install_handler(_cm_signal_handle_over, Sigstk, SIGSTKSZ); -#else - rsignal_install_handler(SIGSTK, _cm_signal_handle_over); -#endif -#endif - rsignal_install_handler(SIGINT, _cm_signal_handle_intr); - rsignal_install_handler(SIGTERM, _cm_signal_handle_term); - - // Provide a little emergency memory, for use in case things - // go utterly haywire. - // - if ( 0 == u3H->rod_u.bug.mer ) { - u3H->rod_u.bug.mer = u3i_string("emergency buffer"); - } - - if ( mil_w ) { - struct itimerval itm_u; - - timerclear(&itm_u.it_interval); - itm_u.it_value.tv_sec = (mil_w / 1000); - itm_u.it_value.tv_usec = 1000 * (mil_w % 1000); - - if ( rsignal_setitimer(ITIMER_VIRTUAL, &itm_u, 0) ) { - u3l_log("loom: set timer failed %s\r\n", strerror(errno)); - } - else { - rsignal_install_handler(SIGVTALRM, _cm_signal_handle_alrm); - } - } - - u3t_boot(); -} - -/* _cm_signal_done(): -*/ -static void -_cm_signal_done() -{ - rsignal_deinstall_handler(SIGINT); - rsignal_deinstall_handler(SIGTERM); - rsignal_deinstall_handler(SIGVTALRM); - -#ifndef NO_OVERFLOW -#ifndef U3_OS_mingw - stackoverflow_deinstall_handler(); -#else - rsignal_deinstall_handler(SIGSTK); -#endif -#endif - { - struct itimerval itm_u; - - timerclear(&itm_u.it_interval); - timerclear(&itm_u.it_value); - - if ( rsignal_setitimer(ITIMER_VIRTUAL, &itm_u, 0) ) { - u3l_log("loom: clear timer failed %s\r\n", strerror(errno)); - } - } - - // restore outer system signal handling - // - if ( 0 != u3C.sign_move_f ) { - u3C.sign_move_f(); - } - - u3t_boff(); -} - -/* u3m_signal(): treat a nock-level exception as a signal interrupt. -*/ -void -u3m_signal(u3_noun sig_l) -{ - rsignal_longjmp(u3_Signal, sig_l); -} - -/* u3m_file(): load file, as atom, or bail. -*/ -u3_noun -u3m_file(c3_c* pas_c) -{ - struct stat buf_b; - c3_i fid_i = c3_open(pas_c, O_RDONLY, 0644); - c3_w fln_w, red_w; - c3_y* pad_y; - - if ( (fid_i < 0) || (fstat(fid_i, &buf_b) < 0) ) { - u3l_log("%s: %s\r\n", pas_c, strerror(errno)); - return u3m_bail(c3__fail); - } - fln_w = buf_b.st_size; - pad_y = c3_malloc(buf_b.st_size); - - red_w = read(fid_i, pad_y, fln_w); - close(fid_i); - - if ( fln_w != red_w ) { - c3_free(pad_y); - return u3m_bail(c3__fail); - } - else { - u3_noun pad = u3i_bytes(fln_w, (c3_y *)pad_y); - c3_free(pad_y); - - return pad; - } -} - -/* u3m_mark(): mark all nouns in the road. -*/ -c3_w -u3m_mark(FILE* fil_u) -{ - c3_w tot_w = 0; - tot_w += u3v_mark(fil_u); - tot_w += u3j_mark(fil_u); - tot_w += u3n_mark(fil_u); - tot_w += u3a_mark_road(fil_u); - return tot_w; -} - -/* _pave_parts(): build internal tables. -*/ -static void -_pave_parts(void) -{ - u3R->cax.har_p = u3h_new_cache(u3_Host.ops_u.hap_w); - u3R->jed.war_p = u3h_new(); - u3R->jed.cod_p = u3h_new(); - u3R->jed.han_p = u3h_new(); - u3R->jed.bas_p = u3h_new(); - u3R->byc.har_p = u3h_new(); -} - -/* _pave_road(): initialize road boundaries -*/ -static u3_road* -_pave_road(c3_w* rut_w, c3_w* mat_w, c3_w* cap_w, c3_w siz_w) -{ - u3_road* rod_u = (void*) mat_w; - - // enable in case of corruption - // - // memset(mem_w, 0, 4 * len_w); - memset(rod_u, 0, 4 * siz_w); - - // the top and bottom of the heap are initially the same - // - rod_u->rut_p = u3of(c3_w, rut_w); - rod_u->hat_p = u3of(c3_w, rut_w); - - - rod_u->mat_p = u3of(c3_w, mat_w); // stack bottom - rod_u->cap_p = u3of(c3_w, cap_w); // stack top - - return rod_u; -} - -/* _pave_north(): calculate boundaries and initialize north road. -*/ -static u3_road* -_pave_north(c3_w* mem_w, c3_w siz_w, c3_w len_w) -{ - // in a north road, the heap is low and the stack is high - // - // the heap starts at the base memory pointer [mem_w]; - // the stack starts at the end of the memory segment, - // minus space for the road structure [siz_w] - // - c3_w* rut_w = mem_w; - c3_w* mat_w = ((mem_w + len_w) - siz_w); - c3_w* cap_w = mat_w; - - return _pave_road(rut_w, mat_w, cap_w, siz_w); -} - -/* _pave_south(): calculate boundaries and initialize south road. -*/ -static u3_road* -_pave_south(c3_w* mem_w, c3_w siz_w, c3_w len_w) -{ - // in a south road, the heap is high and the stack is low - // - // the heap starts at the end of the memory segment; - // the stack starts at the base memory pointer [mem_w], - // and ends after the space for the road structure [siz_w] - // - c3_w* rut_w = (mem_w + len_w); - c3_w* mat_w = mem_w; - c3_w* cap_w = mat_w + siz_w; - - return _pave_road(rut_w, mat_w, cap_w, siz_w); -} - -/* _pave_home(): initialize pristine home road. -*/ -static void -_pave_home(void) -{ - c3_w* mem_w = u3_Loom + 1; - c3_w siz_w = c3_wiseof(u3v_home); - c3_w len_w = u3a_words - 1; - - u3H = (void *)_pave_north(mem_w, siz_w, len_w); - u3H->ver_w = u3v_version; - u3R = &u3H->rod_u; - - _pave_parts(); -} - -STATIC_ASSERT( ((c3_wiseof(u3v_home) * 4) == sizeof(u3v_home)), - "home road alignment" ); - -/* _find_home(): in restored image, point to home road. -*/ -static void -_find_home(void) -{ - // NB: the home road is always north - // - c3_w* mem_w = u3_Loom + 1; - c3_w siz_w = c3_wiseof(u3v_home); - c3_w len_w = u3a_words - 1; - - { - c3_w ver_w = *((mem_w + len_w) - 1); - - if ( u3v_version != ver_w ) { - fprintf(stderr, "loom: checkpoint version mismatch: " - "have %u, need %u\r\n", - ver_w, - u3v_version); - abort(); - } - } - - u3H = (void *)((mem_w + len_w) - siz_w); - u3R = &u3H->rod_u; -} - -/* u3m_pave(): instantiate or activate image. -*/ -void -u3m_pave(c3_o nuu_o) -{ - if ( c3y == nuu_o ) { - _pave_home(); - } - else { - _find_home(); - } -} - -#if 0 -/* u3m_clear(): clear all allocated data in road. -*/ -void -u3m_clear(void) -{ - u3h_free(u3R->cax.har_p); - u3j_free(); - u3n_free(); -} - -void -u3m_dump(void) -{ - c3_w hat_w; - c3_w fre_w = 0; - c3_w i_w; - - hat_w = _(u3a_is_north(u3R)) ? u3R->hat_w - u3R->rut_w - : u3R->rut_w - u3R->hat_w; - - for ( i_w = 0; i_w < u3_cc_fbox_no; i_w++ ) { - u3a_fbox* fre_u = u3R->all.fre_u[i_w]; - - while ( fre_u ) { - fre_w += fre_u->box_u.siz_w; - fre_u = fre_u->nex_u; - } - } - u3l_log("dump: hat_w %x, fre_w %x, allocated %x\n", - hat_w, fre_w, (hat_w - fre_w)); - - if ( 0 != (hat_w - fre_w) ) { - c3_w* box_w = _(u3a_is_north(u3R)) ? u3R->rut_w : u3R->hat_w; - c3_w mem_w = 0; - - while ( box_w < (_(u3a_is_north(u3R)) ? u3R->hat_w : u3R->rut_w) ) { - u3a_box* box_u = (void *)box_w; - - if ( 0 != box_u->use_w ) { -#ifdef U3_MEMORY_DEBUG - // u3l_log("live %d words, code %x\n", box_u->siz_w, box_u->cod_w); -#endif - mem_w += box_u->siz_w; - } - box_w += box_u->siz_w; - } - - u3l_log("second count: %x\n", mem_w); - } -} -#endif - -/* u3m_bail(): bail out. Does not return. -** -** Bail motes: -** -** %evil :: erroneous cryptography -** %exit :: semantic failure -** %oops :: assertion failure -** %intr :: interrupt -** %fail :: computability failure -** %over :: stack overflow (a kind of %fail) -** %meme :: out of memory -** -** These are equivalents of the full exception noun, the error ball: -** -** $% [%0 success] -** [%1 paths] -** [%2 trace] -** [%3 code trace] -** == -** -** XX several of these abort() calls should be gated by -a -*/ -c3_i -u3m_bail(u3_noun how) -{ - if ( &(u3H->rod_u) == u3R ) { - // XX set exit code - // - fprintf(stderr, "home: bailing out\r\n"); - abort(); - } - - /* Printf some metadata. - */ - if ( c3__exit != how && (_(u3ud(how)) || 1 != u3h(how)) ) { - if ( _(u3ud(how)) ) { - c3_c str_c[5]; - - str_c[0] = ((how >> 0) & 0xff); - str_c[1] = ((how >> 8) & 0xff); - str_c[2] = ((how >> 16) & 0xff); - str_c[3] = ((how >> 24) & 0xff); - str_c[4] = 0; - fprintf(stderr, "\r\nbail: %s\r\n", str_c); - } - else { - c3_assert(_(u3ud(u3h(how)))); - fprintf(stderr, "\r\nbail: %d\r\n", u3h(how)); - } - } - - // intercept fatal errors - // - switch ( how ) { - case c3__foul: - case c3__oops: { - // XX set exit code - // - fprintf(stderr, "bailing out\r\n"); - abort(); - } - } - - if ( &(u3H->rod_u) == u3R ) { - // For top-level errors, which shouldn't happen often, we have no - // choice but to use the signal process; and we require the flat - // form of how. - // - // XX JB: these seem unrecoverable, at least wrt memory management, - // so they've been disabled above for now - // - c3_assert(_(u3a_is_cat(how))); - u3m_signal(how); - } - - /* Reconstruct a correct error ball. - */ - if ( _(u3ud(how)) ) { - switch ( how ) { - case c3__exit: { - how = u3nc(2, u3R->bug.tax); - } break; - - default: { - how = u3nt(3, how, u3R->bug.tax); - } break; - } - } - - /* Longjmp, with an underscore. - */ - _longjmp(u3R->esc.buf, how); -} - -int c3_cooked() { return u3m_bail(c3__oops); } - -/* u3m_error(): bail out with %exit, ct_pushing error. -*/ -c3_i -u3m_error(c3_c* str_c) -{ - u3t_mean(u3i_string(str_c)); - return u3m_bail(c3__exit); -} - -/* u3m_leap(): in u3R, create a new road within the existing one. -*/ -void -u3m_leap(c3_w pad_w) -{ - c3_w len_w; - u3_road* rod_u; - - /* Measure the pad - we'll need it. - */ - { -#if 0 - if ( pad_w < u3R->all.fre_w ) { - pad_w = 0; - } - else { - pad_w -= u3R->all.fre_w; - } -#endif - if ( (pad_w + c3_wiseof(u3a_road)) >= u3a_open(u3R) ) { - u3m_bail(c3__meme); - } - len_w = u3a_open(u3R) - (pad_w + c3_wiseof(u3a_road)); - } - - /* Allocate a region on the cap. - */ - { - u3p(c3_w) bot_p; - - if ( c3y == u3a_is_north(u3R) ) { - bot_p = (u3R->cap_p - len_w); - u3R->cap_p -= len_w; - - rod_u = _pave_south(u3a_into(bot_p), c3_wiseof(u3a_road), len_w); -#if 0 - fprintf(stderr, "leap: from north %p (cap 0x%x), to south %p\r\n", - u3R, - u3R->cap_p + len_w, - rod_u); -#endif - } - else { - bot_p = u3R->cap_p; - u3R->cap_p += len_w; - - rod_u = _pave_north(u3a_into(bot_p), c3_wiseof(u3a_road), len_w); -#if 0 - fprintf(stderr, "leap: from south %p (cap 0x%x), to north %p\r\n", - u3R, - u3R->cap_p - len_w, - rod_u); -#endif - } - } - - /* Attach the new road to its parents. - */ - { - c3_assert(0 == u3R->kid_p); - rod_u->par_p = u3of(u3_road, u3R); - u3R->kid_p = u3of(u3_road, rod_u); - } - - /* Set up the new road. - */ - { - u3R = rod_u; - _pave_parts(); - } -#ifdef U3_MEMORY_DEBUG - rod_u->all.fre_w = 0; -#endif -} - -void -_print_diff(c3_c* cap_c, c3_w a, c3_w b) -{ - c3_w diff = apar_p); - -#if 0 - /* If you're printing a lot of these you need to change - * u3a_print_memory from fprintf to u3l_log - */ - fprintf(stderr, "fall: from %s %p, to %s %p (cap 0x%x, was 0x%x)\r\n", - _(u3a_is_north(u3R)) ? "north" : "south", - u3R, - _(u3a_is_north(u3to(u3_road, u3R->par_p))) ? "north" : "south", - u3to(u3_road, u3R->par_p), - u3R->hat_p, - u3R->rut_p); - _print_diff("unused free", u3R->hat_p, u3R->cap_p); - _print_diff("freeing", u3R->rut_p, u3R->hat_p); - _print_diff("stack", u3R->cap_p, u3R->mat_p); - static c3_w wat_w = 500000000; - if (u3to(u3_road, u3R->par_p) == &u3H->rod_u) { - wat_w = 500000000; - } - else { - wat_w = c3_min(wat_w, - u3R->hat_p < u3R->cap_p ? - u3R->cap_p - u3R->hat_p : - u3R->hat_p - u3R->cap_p); - } - u3a_print_memory(stderr, "low water mark", wat_w); - -#endif - - u3to(u3_road, u3R->par_p)->pro.nox_d += u3R->pro.nox_d; - u3to(u3_road, u3R->par_p)->pro.cel_d += u3R->pro.cel_d; - - /* The new cap is the old hat - it's as simple as that. - */ - u3to(u3_road, u3R->par_p)->cap_p = u3R->hat_p; - - /* And, we're back home. - */ - u3R = u3to(u3_road, u3R->par_p); - u3R->kid_p = 0; -} - -/* u3m_hate(): new, integrated leap mechanism (enter). -*/ -void -u3m_hate(c3_w pad_w) -{ - c3_assert(0 == u3R->ear_p); - - u3R->ear_p = u3R->cap_p; - u3m_leap(pad_w); -} - -/* u3m_love(): return product from leap. -*/ -u3_noun -u3m_love(u3_noun pro) -{ - // save cache pointers from current road - // - u3p(u3h_root) byc_p = u3R->byc.har_p; - u3a_jets jed_u = u3R->jed; - - // fallback to parent road (child heap on parent's stack) - // - u3m_fall(); - - // copy product and caches off our stack - // - pro = u3a_take(pro); - jed_u = u3j_take(jed_u); - byc_p = u3n_take(byc_p); - - // pop the stack - // - u3R->cap_p = u3R->ear_p; - u3R->ear_p = 0; - - // integrate junior caches - // - u3j_reap(jed_u); - u3n_reap(byc_p); - - return pro; -} - -/* u3m_golf(): record cap_p length for u3m_flog(). -*/ -c3_w -u3m_golf(void) -{ - if ( c3y == u3a_is_north(u3R) ) { - return u3R->mat_p - u3R->cap_p; - } - else { - return u3R->cap_p - u3R->mat_p; - } -} - -/* u3m_flog(): reset cap_p. -*/ -void -u3m_flog(c3_w gof_w) -{ - // Enable memsets in case of memory corruption. - // - if ( c3y == u3a_is_north(u3R) ) { - u3_post bot_p = (u3R->mat_p - gof_w); - // c3_w len_w = (bot_w - u3R->cap_w); - - // memset(u3R->cap_w, 0, 4 * len_w); - u3R->cap_p = bot_p; - } - else { - u3_post bot_p = u3R->mat_p + gof_w; - // c3_w len_w = (u3R->cap_w - bot_w); - - // memset(bot_w, 0, 4 * len_w); // - u3R->cap_p = bot_p; - } -} - -/* u3m_water(): produce watermarks. -*/ -void -u3m_water(c3_w* low_w, c3_w* hig_w) -{ - c3_assert(u3R == &u3H->rod_u); - - *low_w = u3a_heap(u3R); - *hig_w = u3a_temp(u3R) + c3_wiseof(u3v_home); -} - -/* u3m_soft_top(): top-level safety wrapper. -*/ -u3_noun -u3m_soft_top(c3_w mil_w, // timer ms - c3_w pad_w, // base memory pad - u3_funk fun_f, - u3_noun arg) -{ - u3_noun why, pro; - c3_l sig_l; - - /* Enter internal signal regime. - */ - _cm_signal_deep(mil_w); - - if ( 0 != (sig_l = rsignal_setjmp(u3_Signal)) ) { - // reinitialize trace state - // - u3t_init(); - - // return to blank state - // - _cm_signal_done(); - - // recover memory state from the top down - // - return _cm_signal_recover(sig_l, arg); - } - - /* Record the cap, and leap. - */ - u3m_hate(pad_w); - - /* Trap for ordinary nock exceptions. - */ - if ( 0 == (why = (u3_noun)_setjmp(u3R->esc.buf)) ) { - pro = fun_f(arg); - - /* Make sure the inner routine did not create garbage. - */ - if ( u3C.wag_w & u3o_debug_ram ) { -#ifdef U3_CPU_DEBUG - if ( u3R->all.max_w > 1000000 ) { - u3a_print_memory(stderr, "execute: top", u3R->all.max_w); - } -#endif - u3m_grab(pro, u3_none); - } - - /* Revert to external signal regime. - */ - _cm_signal_done(); - - /* Produce success, on the old road. - */ - pro = u3nc(0, u3m_love(pro)); - } - else { - /* Overload the error result. - */ - pro = u3m_love(why); - } - - /* Revert to external signal regime. - */ - _cm_signal_done(); - - /* Free the argument. - */ - u3z(arg); - - /* Return the product. - */ - return pro; -} - -/* u3m_soft_sure(): top-level call assumed correct. -*/ -u3_noun -u3m_soft_sure(u3_funk fun_f, u3_noun arg) -{ - u3_noun pro, pru = u3m_soft_top(0, (1 << 18), fun_f, arg); - - c3_assert(_(u3du(pru))); - pro = u3k(u3t(pru)); - u3z(pru); - - return pro; -} - -/* u3m_soft_slam: top-level call. -*/ -u3_noun _cm_slam(u3_noun arg) { return u3n_slam_on(u3h(arg), u3t(arg)); } -u3_noun -u3m_soft_slam(u3_noun gat, u3_noun sam) -{ - return u3m_soft_sure(_cm_slam, u3nc(gat, sam)); -} - -/* u3m_soft_nock: top-level nock. -*/ -u3_noun _cm_nock(u3_noun arg) { return u3n_nock_on(u3h(arg), u3t(arg)); } -u3_noun -u3m_soft_nock(u3_noun bus, u3_noun fol) -{ - return u3m_soft_sure(_cm_nock, u3nc(bus, fol)); -} - -/* u3m_soft_run(): descend into virtualization context. -*/ -u3_noun -u3m_soft_run(u3_noun gul, - u3_funq fun_f, - u3_noun aga, - u3_noun agb) -{ - u3_noun why = 0, pro; - - /* Record the cap, and leap. - */ - u3m_hate(1 << 18); - - /* Configure the new road. - */ - { - u3R->ski.gul = u3nc(gul, u3to(u3_road, u3R->par_p)->ski.gul); - u3R->pro.don = u3to(u3_road, u3R->par_p)->pro.don; - u3R->pro.trace = u3to(u3_road, u3R->par_p)->pro.trace; - u3R->bug.tax = 0; - } - u3t_on(coy_o); - - /* Trap for exceptions. - */ - if ( 0 == (why = (u3_noun)_setjmp(u3R->esc.buf)) ) { - u3t_off(coy_o); - pro = fun_f(aga, agb); - -#ifdef U3_CPU_DEBUG - if ( u3R->all.max_w > 1000000 ) { - u3a_print_memory(stderr, "execute: run", u3R->all.max_w); - } -#endif - - /* Today you can't run -g without memory debug, but you should be - * able to. - */ -#ifdef U3_MEMORY_DEBUG - if ( u3C.wag_w & u3o_debug_ram ) { - u3m_grab(pro, u3_none); - } -#endif - - /* Produce success, on the old road. - */ - pro = u3nc(0, u3m_love(pro)); - } - else { - u3t_init(); - - /* Produce - or fall again. - */ - { - c3_assert(_(u3du(why))); - switch ( u3h(why) ) { - default: c3_assert(0); return 0; - - case 0: { // unusual: bail with success. - pro = u3m_love(why); - } break; - - case 1: { // blocking request - pro = u3m_love(why); - } break; - - case 2: { // true exit - pro = u3m_love(why); - } break; - - case 3: { // failure; rebail w/trace - u3_noun yod = u3m_love(u3t(why)); - - u3m_bail - (u3nt(3, - u3a_take(u3h(yod)), - u3kb_weld(u3t(yod), u3k(u3R->bug.tax)))); - } break; - - case 4: { // meta-bail - u3m_bail(u3m_love(u3t(why))); - } break; - } - } - } - - /* Release the arguments. - */ - { - u3z(gul); - u3z(aga); - u3z(agb); - } - - /* Return the product. - */ - return pro; -} - -/* u3m_soft_esc(): namespace lookup. Produces direct result. -*/ -u3_noun -u3m_soft_esc(u3_noun ref, u3_noun sam) -{ - u3_noun why, gul, pro; - - /* Assert preconditions. - */ - { - c3_assert(0 != u3R->ski.gul); - gul = u3h(u3R->ski.gul); - } - - /* Record the cap, and leap. - */ - u3m_hate(1 << 18); - - /* Configure the new road. - */ - { - u3R->ski.gul = u3t(u3to(u3_road, u3R->par_p)->ski.gul); - u3R->pro.don = u3to(u3_road, u3R->par_p)->pro.don; - u3R->pro.trace = u3to(u3_road, u3R->par_p)->pro.trace; - u3R->bug.tax = 0; - } - - /* Trap for exceptions. - */ - if ( 0 == (why = (u3_noun)_setjmp(u3R->esc.buf)) ) { - pro = u3n_slam_on(gul, u3nc(ref, sam)); - - /* Fall back to the old road, leaving temporary memory intact. - */ - pro = u3m_love(pro); - } - else { - u3t_init(); - - /* Push the error back up to the calling context - not the run we - ** are in, but the caller of the run, matching pure nock semantics. - */ - u3m_bail(u3nc(4, u3m_love(why))); - } - - /* Release the sample. Note that we used it above, but in a junior - ** road, so its refcount is intact. - */ - u3z(ref); - u3z(sam); - - /* Return the product. - */ - return pro; -} - -/* u3m_grab(): garbage-collect the world, plus extra roots. -*/ -void -u3m_grab(u3_noun som, ...) // terminate with u3_none -{ - // u3h_free(u3R->cax.har_p); - // u3R->cax.har_p = u3h_new(); - - u3m_mark(0); - { - va_list vap; - u3_noun tur; - - va_start(vap, som); - - if ( som != u3_none ) { - u3a_mark_noun(som); - - while ( u3_none != (tur = va_arg(vap, u3_noun)) ) { - u3a_mark_noun(tur); - } - } - va_end(vap); - } - u3a_sweep(); -} - -/* u3m_soft(): top-level wrapper. -** -** Produces [0 product] or [%error (list tank)], top last. -*/ -u3_noun -u3m_soft(c3_w mil_w, - u3_funk fun_f, - u3_noun arg) -{ - u3_noun why; - - why = u3m_soft_top(mil_w, (1 << 20), fun_f, arg); // 2MB pad - - if ( 0 == u3h(why) ) { - return why; - } - else { - // don't use .^ at the top level! - // - c3_assert(1 != u3h(why)); - - // don't call +mook if we have no kernel - // - // This is required to soft the boot sequence. - // XX produce specific error motes instead of %2? - // - if ( 0 == u3A->roc ) { - u3_noun tax = u3t(why); - - u3m_p("tone", u3h(why)); - - while ( u3_nul != tax ) { - u3_noun dat, mot, val; - u3x_cell(tax, &dat, &tax); - - if ( c3y == u3r_cell(dat, &mot, &val) ) { - if ( c3__spot == mot ) { - u3m_p("tax", val); - } - else if ( (c3__mean == mot) - && (c3y == u3a_is_atom(val)) ) - { - u3m_p("men", val); - } - else { - u3m_p("mot", mot); - } - } - } - - u3z(why); - return u3nc(c3__fail, u3_nul); - } - else { - u3_noun tax, cod, pro, mok; - - if ( 2 == u3h(why) ) { - cod = c3__exit; - tax = u3k(u3t(why)); - } - else { - c3_assert(3 == u3h(why)); - - cod = u3k(u3h(u3t(why))); - tax = u3k(u3t(u3t(why))); - } - - mok = u3dc("mook", 2, tax); - pro = u3nc(cod, u3k(u3t(mok))); - - u3z(mok); - u3z(why); - - return pro; - } - } -} - -/* _cm_is_tas(): yes iff som (RETAIN) is @tas. -*/ -static c3_o -_cm_is_tas(u3_atom som, c3_w len_w) -{ - c3_w i_w; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_c c_c = u3r_byte(i_w, som); - - if ( islower(c_c) || - (isdigit(c_c) && (0 != i_w) && ((len_w - 1) != i_w)) - || '-' == c_c ) - { - continue; - } - return c3n; - } - return c3y; -} - -/* _cm_is_ta(): yes iff som (RETAIN) is @ta. -*/ -static c3_o -_cm_is_ta(u3_noun som, c3_w len_w) -{ - c3_w i_w; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_c c_c = u3r_byte(i_w, som); - - if ( (c_c < 32) || (c_c > 127) ) { - return c3n; - } - } - return c3y; -} - -/* _cm_hex(): hex byte. -*/ -c3_y _cm_hex(c3_y c_y) -{ - if ( c_y < 10 ) - return '0' + c_y; - else return 'a' + (c_y - 10); -} - -/* _cm_in_pretty: measure/cut prettyprint. -*/ -static c3_w -_cm_in_pretty(u3_noun som, c3_o sel_o, c3_c* str_c) -{ - if ( _(u3du(som)) ) { - c3_w sel_w, one_w, two_w; - - sel_w = 0; - if ( _(sel_o) ) { - if ( str_c ) { *(str_c++) = '['; } - sel_w += 1; - } - - one_w = _cm_in_pretty(u3h(som), c3y, str_c); - if ( str_c ) { - str_c += one_w; - *(str_c++) = ' '; - } - two_w = _cm_in_pretty(u3t(som), c3n, str_c); - if ( str_c ) { str_c += two_w; } - - if ( _(sel_o) ) { - if ( str_c ) { *(str_c++) = ']'; } - sel_w += 1; - } - return one_w + two_w + 1 + sel_w; - } - else { - if ( som < 65536 ) { - c3_c buf_c[6]; - c3_w len_w; - - snprintf(buf_c, 6, "%d", som); - len_w = strlen(buf_c); - - if ( str_c ) { strcpy(str_c, buf_c); str_c += len_w; } - return len_w; - } - else { - c3_w len_w = u3r_met(3, som); - - if ( _(_cm_is_tas(som, len_w)) ) { - c3_w len_w = u3r_met(3, som); - - if ( str_c ) { - *(str_c++) = '%'; - u3r_bytes(0, len_w, (c3_y *)str_c, som); - str_c += len_w; - } - return len_w + 1; - } - else if ( _(_cm_is_ta(som, len_w)) ) { - if ( str_c ) { - *(str_c++) = '\''; - u3r_bytes(0, len_w, (c3_y *)str_c, som); - str_c += len_w; - *(str_c++) = '\''; - } - return len_w + 2; - } - else { - c3_w len_w = u3r_met(3, som); - c3_c *buf_c = c3_malloc(2 + (2 * len_w) + 1); - c3_w i_w = 0; - c3_w a_w = 0; - - buf_c[a_w++] = '0'; - buf_c[a_w++] = 'x'; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_y c_y = u3r_byte(len_w - (i_w + 1), som); - - if ( (i_w == 0) && (c_y <= 0xf) ) { - buf_c[a_w++] = _cm_hex(c_y); - } else { - buf_c[a_w++] = _cm_hex(c_y >> 4); - buf_c[a_w++] = _cm_hex(c_y & 0xf); - } - } - buf_c[a_w] = 0; - len_w = a_w; - - if ( str_c ) { strcpy(str_c, buf_c); str_c += len_w; } - - c3_free(buf_c); - return len_w; - } - } - } -} - -/* u3m_pretty(): dumb prettyprint to string. -*/ -c3_c* -u3m_pretty(u3_noun som) -{ - c3_w len_w = _cm_in_pretty(som, c3y, 0); - c3_c* pre_c = c3_malloc(len_w + 1); - - _cm_in_pretty(som, c3y, pre_c); - pre_c[len_w] = 0; - return pre_c; -} - -/* _cm_in_pretty_path: measure/cut prettyprint. - * - * Modeled after _cm_in_pretty(), the backend to u3m_p(), but with the - * assumption that we're always displaying a path. - */ -static c3_w -_cm_in_pretty_path(u3_noun som, c3_c* str_c) -{ - if ( _(u3du(som)) ) { - c3_w sel_w, one_w, two_w; - if ( str_c ) { - *(str_c++) = '/'; - } - sel_w = 1; - - one_w = _cm_in_pretty_path(u3h(som), str_c); - if ( str_c ) { - str_c += one_w; - } - - two_w = _cm_in_pretty_path(u3t(som), str_c); - if ( str_c ) { - str_c += two_w; - } - - return sel_w + one_w + two_w; - } - else { - c3_w len_w = u3r_met(3, som); - if ( str_c && len_w ) { - u3r_bytes(0, len_w, (c3_y *)str_c, som); - str_c += len_w; - } - return len_w; - } -} - -/* u3m_pretty_path(): prettyprint a path to string. -*/ -c3_c* -u3m_pretty_path(u3_noun som) -{ - c3_w len_w = _cm_in_pretty_path(som, NULL); - c3_c* pre_c = c3_malloc(len_w + 1); - - _cm_in_pretty_path(som, pre_c); - pre_c[len_w] = 0; - return pre_c; -} - -/* u3m_p(): dumb print with caption. -*/ -void -u3m_p(const c3_c* cap_c, u3_noun som) -{ - c3_c* pre_c = u3m_pretty(som); - - u3l_log("%s: %s\r\n", cap_c, pre_c); - c3_free(pre_c); -} - -/* u3m_tape(): dump a tape to stdout. -*/ -void -u3m_tape(u3_noun tep) -{ - u3_noun tap = tep; - - while ( u3_nul != tap ) { - c3_c car_c; - - if ( u3h(tap) >= 127 ) { - car_c = '?'; - } else car_c = u3h(tap); - - putc(car_c, stdout); - tap = u3t(tap); - } - u3z(tep); -} - -/* u3m_wall(): dump a wall to stdout. -*/ -void -u3m_wall(u3_noun wol) -{ - u3_noun wal = wol; - - while ( u3_nul != wal ) { - u3m_tape(u3k(u3h(wal))); - - putc(13, stdout); - putc(10, stdout); - - wal = u3t(wal); - } - u3z(wol); -} - -/* _cm_limits(): set up global modes and limits. -*/ -static void -_cm_limits(void) -{ -# ifdef U3_OS_mingw - // Windows doesn't have rlimits. Default maximum thread - // stack size is set in the executable file header. -# else - struct rlimit rlm; - - // Moar stack. - // - { - c3_assert( 0 == getrlimit(RLIMIT_STACK, &rlm) ); - - rlm.rlim_cur = c3_min(rlm.rlim_max, (65536 << 10)); - - if ( 0 != setrlimit(RLIMIT_STACK, &rlm) ) { - u3l_log("boot: stack size: %s\r\n", strerror(errno)); - exit(1); - } - } - - // Moar filez. - // - { - getrlimit(RLIMIT_NOFILE, &rlm); - - #ifdef U3_OS_osx - rlm.rlim_cur = c3_min(OPEN_MAX, rlm.rlim_max); - #else - rlm.rlim_cur = rlm.rlim_max; - #endif - - // no exit, not a critical limit - // - if ( 0 != setrlimit(RLIMIT_NOFILE, &rlm) ) { - u3l_log("boot: open file limit: %s\r\n", strerror(errno)); - } - } - - // Moar core. - // -# ifndef ASAN_ENABLED - { - getrlimit(RLIMIT_CORE, &rlm); - rlm.rlim_cur = RLIM_INFINITY; - - // no exit, not a critical limit - // - if ( 0 != setrlimit(RLIMIT_CORE, &rlm) ) { - u3l_log("boot: core limit: %s\r\n", strerror(errno)); - } - } -# endif -# endif -} - -/* _cm_signals(): set up interrupts, etc. -*/ -static void -_cm_signals(void) -{ -# if defined(U3_OS_mingw) - // vere using libsigsegv on MingW is very slow, because libsigsegv - // works by installing a top-level SEH unhandled exception filter. - // The top-level filter runs only after Windows walks the whole stack, - // looking up registered exception filters for every stack frame, and - // finds no filter to handle the exception. - // Instead of libsigsegv, all vere functions register a SEH exception - // filter (see compat/mingw/seh_handler.c) that handles both memory - // access and stack overflow exceptions. It calls u3e_fault directly. -# else - if ( 0 != sigsegv_install_handler(u3e_fault) ) { - u3l_log("boot: sigsegv install failed\n"); - exit(1); - } -# endif - -# if defined(U3_OS_PROF) - // Block SIGPROF, so that if/when we reactivate it on the - // main thread for profiling, we won't get hits in parallel - // on other threads. - if ( u3C.wag_w & u3o_debug_cpu ) { - sigset_t set; - - sigemptyset(&set); - sigaddset(&set, SIGPROF); - - if ( 0 != pthread_sigmask(SIG_BLOCK, &set, NULL) ) { - u3l_log("boot: thread mask SIGPROF: %s\r\n", strerror(errno)); - exit(1); - } - } -# endif -} - -extern void u3je_secp_init(void); -extern void u3je_secp_stop(void); - -static void -_cm_crypto() -{ - /* Initialize OpenSSL with loom allocation functions. */ - if ( 0 == CRYPTO_set_mem_functions(&u3a_malloc_ssl, - &u3a_realloc_ssl, - &u3a_free_ssl) ) { - u3l_log("%s\r\n", "openssl initialization failed"); - abort(); - } - - u3je_secp_init(); -} - -/* u3m_init(): start the environment. -*/ -void -u3m_init(void) -{ - _cm_limits(); - _cm_signals(); - _cm_crypto(); - - /* Make sure GMP uses our malloc. - */ - mp_set_memory_functions(u3a_malloc, u3a_realloc2, u3a_free2); - - /* Map at fixed address. - */ - { - c3_w len_w = u3a_bytes; - void* map_v; - - map_v = mmap((void *)u3_Loom, - len_w, - (PROT_READ | PROT_WRITE), - (MAP_ANON | MAP_FIXED | MAP_PRIVATE), - -1, 0); - - if ( -1 == (c3_ps)map_v ) { - void* dyn_v = mmap((void *)0, - len_w, - PROT_READ, - MAP_ANON | MAP_PRIVATE, - -1, 0); - - u3l_log("boot: mapping %dMB failed\r\n", (len_w / (1024 * 1024))); - u3l_log("see urbit.org/using/install/#about-swap-space" - " for adding swap space\r\n"); - if ( -1 != (c3_ps)dyn_v ) { - u3l_log("if porting to a new platform, try U3_OS_LoomBase %p\r\n", - dyn_v); - } - exit(1); - } - - u3l_log("loom: mapped %dMB\r\n", len_w >> 20); - } -} - -/* u3m_stop(): graceful shutdown cleanup. */ -void -u3m_stop() -{ - u3je_secp_stop(); -} - -/* u3m_boot(): start the u3 system. return next event, starting from 1. -*/ -c3_d -u3m_boot(c3_c* dir_c) -{ - c3_o nuu_o; - - /* Activate the loom. - */ - u3m_init(); - - /* Activate the storage system. - */ - nuu_o = u3e_live(c3n, dir_c); - - /* Activate tracing. - */ - u3C.slog_f = 0; - u3C.sign_hold_f = 0; - u3C.sign_move_f = 0; - u3t_init(); - - /* Construct or activate the allocator. - */ - u3m_pave(nuu_o); - - /* Initialize the jet system. - */ - { - c3_w len_w = u3j_boot(nuu_o); - u3l_log("boot: installed %d jets\r\n", len_w); - } - - /* Reactivate jets on old kernel. - */ - if ( c3n == nuu_o ) { - u3j_ream(); - u3n_ream(); - - return u3A->eve_d; - } - else { - /* Basic initialization. - */ - memset(u3A, 0, sizeof(*u3A)); - return 0; - } -} - -/* u3m_boot_lite(): start without checkpointing. -*/ -c3_d -u3m_boot_lite(void) -{ - /* Activate the loom. - */ - u3m_init(); - - /* Activate tracing. - */ - u3C.slog_f = 0; - u3C.sign_hold_f = 0; - u3C.sign_move_f = 0; - u3t_init(); - - /* Construct or activate the allocator. - */ - u3m_pave(c3y); - - /* Initialize the jet system. - */ - u3j_boot(c3y); - - /* Basic initialization. - */ - memset(u3A, 0, sizeof(*u3A)); - return 0; -} - -/* u3m_reclaim: clear persistent caches to reclaim memory -*/ -void -u3m_reclaim(void) -{ - u3v_reclaim(); - u3j_reclaim(); - u3n_reclaim(); - u3a_reclaim(); -} - -/* _cm_pack_rewrite(): trace through arena, rewriting pointers. -*/ -static void -_cm_pack_rewrite(void) -{ - // XX fix u3a_rewrit* to support south roads - // - c3_assert( &(u3H->rod_u) == u3R ); - - // NB: these implementations must be kept in sync with u3m_reclaim(); - // anything not reclaimed must be rewritable - // - u3v_rewrite_compact(); - u3j_rewrite_compact(); - u3n_rewrite_compact(); - u3a_rewrite_compact(); -} - -/* u3m_pack: compact (defragment) memory. -*/ -c3_w -u3m_pack(void) -{ - c3_w pre_w = u3a_open(u3R); - - // reclaim first, to free space, and discard anything we can't/don't rewrite - // - u3m_reclaim(); - - // sweep the heap, finding and saving new locations - // - u3a_pack_seek(u3R); - - // trace roots, rewriting inner pointers - // - _cm_pack_rewrite(); - - // sweep the heap, relocating objects to their new locations - // - u3a_pack_move(u3R); - - return (u3a_open(u3R) - pre_w); -} diff --git a/pkg/urbit/noun/nock.c b/pkg/urbit/noun/nock.c deleted file mode 100644 index 6aef6e065..000000000 --- a/pkg/urbit/noun/nock.c +++ /dev/null @@ -1,2989 +0,0 @@ -/* g/n.c -** -*/ -#include "all.h" - -// define to have each opcode printed as it executes, -// along with some other debugging info -# undef VERBOSE_BYTECODE - -#if 0 -// Retained for debugging purposes. -static u3_noun _n_nock_on(u3_noun bus, u3_noun fol); - -/* _n_hint(): process hint. -*/ -static u3_noun -_n_hint(u3_noun zep, - u3_noun hod, - u3_noun bus, - u3_noun nex) -{ - switch ( zep ) { - default: { - // u3m_p("weird zep", zep); - u3a_lose(zep); - u3a_lose(hod); - - return _n_nock_on(bus, nex); - } - - case c3__hunk: - case c3__lose: - case c3__mean: - case c3__spot: { - u3_noun tac = u3nc(zep, hod); - u3_noun pro; - - u3t_push(tac); -#if 0 - { - static int low_i; - - if ( !low_i ) { - low_i = 1; - if ( 0 == (u3R->pro.nox_d % 65536ULL) ) { - if ( c3__spot == zep ) { - u3l_log("spot %d/%d : %d/%d\r\n", - u3h(u3h(u3t(hod))), - u3t(u3h(u3t(hod))), - u3h(u3t(u3t(hod))), - u3t(u3t(u3t(hod)))); - } - } - low_i = 0; - } - } -#endif - pro = _n_nock_on(bus, nex); - u3t_drop(); - - return pro; - } - - case c3__live: { - if ( c3y == u3ud(hod) ) { - u3t_off(noc_o); - u3t_heck(hod); - u3t_on(noc_o); - } else { - u3z(hod); - } - return _n_nock_on(bus, nex); - } - - case c3__slog: { - if ( !(u3C.wag_w & u3o_quiet) ) { - u3t_off(noc_o); - u3t_slog(hod); - u3t_on(noc_o); - } - return _n_nock_on(bus, nex); - } - - case c3__germ: { - u3_noun pro = _n_nock_on(bus, nex); - - if ( c3y == u3r_sing(pro, hod) ) { - u3z(pro); return hod; - } else { - u3z(hod); return pro; - } - } - - case c3__fast: { - u3_noun pro = _n_nock_on(bus, nex); - - u3t_off(noc_o); - u3j_mine(hod, u3k(pro)); - u3t_on(noc_o); - - return pro; - } - - case c3__memo: { - u3z(hod); -#if 0 - return _n_nock_on(bus, nex); -#else - { - u3_noun pro = u3z_find_2(144 + c3__nock, bus, nex); - - if ( pro != u3_none ) { - u3z(bus); u3z(nex); - return pro; - } - pro = _n_nock_on(u3k(bus), u3k(nex)); - - if ( &(u3H->rod_u) != u3R ) { - u3z_save_2(144 + c3__nock, bus, nex, pro); - } - - u3z(bus); u3z(nex); - - return pro; - } -#endif - } - - case c3__sole: { - u3z(hod); - { - u3_noun pro = _n_nock_on(bus, nex); - - // return u3z_uniq(pro); - return pro; - } - } - } -} - -/* _n_nock_on(): produce .*(bus fol). Do not virtualize. -*/ -static u3_noun -_n_nock_on(u3_noun bus, u3_noun fol) -{ - u3_noun hib, gal; - - while ( 1 ) { - hib = u3h(fol); - gal = u3t(fol); - -#ifdef U3_CPU_DEBUG - u3R->pro.nox_d += 1; -#endif - - if ( c3y == u3r_du(hib) ) { - u3_noun poz, riv; - - poz = _n_nock_on(u3k(bus), u3k(hib)); - riv = _n_nock_on(bus, u3k(gal)); - - u3a_lose(fol); - return u3i_cell(poz, riv); - } - else switch ( hib ) { - default: return u3m_bail(c3__exit); - - case 0: { - if ( c3n == u3r_ud(gal) ) { - return u3m_bail(c3__exit); - } - else { - u3_noun pro = u3k(u3at(gal, bus)); - - u3a_lose(bus); u3a_lose(fol); - return pro; - } - } - c3_assert(!"not reached"); - - case 1: { - u3_noun pro = u3k(gal); - - u3a_lose(bus); u3a_lose(fol); - return pro; - } - c3_assert(!"not reached"); - - case 2: { - u3_noun nex = _n_nock_on(u3k(bus), u3k(u3t(gal))); - u3_noun seb = _n_nock_on(bus, u3k(u3h(gal))); - - u3a_lose(fol); - bus = seb; - fol = nex; - continue; - } - c3_assert(!"not reached"); - - case 3: { - u3_noun gof, pro; - - gof = _n_nock_on(bus, u3k(gal)); - pro = u3r_du(gof); - - u3a_lose(gof); u3a_lose(fol); - return pro; - } - c3_assert(!"not reached"); - - case 4: { - u3_noun gof, pro; - - gof = _n_nock_on(bus, u3k(gal)); - pro = u3i_vint(gof); - - u3a_lose(fol); - return pro; - } - c3_assert(!"not reached"); - - case 5: { - u3_noun wim = _n_nock_on(bus, u3k(gal)); - u3_noun pro = u3r_sing(u3h(wim), u3t(wim)); - - u3a_lose(wim); u3a_lose(fol); - return pro; - } - c3_assert(!"not reached"); - - case 6: { - u3_noun b_gal, c_gal, d_gal; - - u3x_trel(gal, &b_gal, &c_gal, &d_gal); - { - u3_noun tys = _n_nock_on(u3k(bus), u3k(b_gal)); - u3_noun nex; - - if ( 0 == tys ) { - nex = u3k(c_gal); - } else if ( 1 == tys ) { - nex = u3k(d_gal); - } else return u3m_bail(c3__exit); - - u3a_lose(fol); - fol = nex; - continue; - } - } - c3_assert(!"not reached"); - - case 7: { - u3_noun b_gal, c_gal; - - u3x_cell(gal, &b_gal, &c_gal); - { - u3_noun bod = _n_nock_on(bus, u3k(b_gal)); - u3_noun nex = u3k(c_gal); - - u3a_lose(fol); - bus = bod; - fol = nex; - continue; - } - } - c3_assert(!"not reached"); - - case 8: { - u3_noun b_gal, c_gal; - - u3x_cell(gal, &b_gal, &c_gal); - { - u3_noun heb = _n_nock_on(u3k(bus), u3k(b_gal)); - u3_noun bod = u3nc(heb, bus); - u3_noun nex = u3k(c_gal); - - u3a_lose(fol); - bus = bod; - fol = nex; - continue; - } - } - c3_assert(!"not reached"); - - case 9: { - u3_noun b_gal, c_gal; - - u3x_cell(gal, &b_gal, &c_gal); - { - u3_noun seb = _n_nock_on(bus, u3k(c_gal)); - u3_noun pro; - - u3t_off(noc_o); - pro = u3j_kick(seb, b_gal); - u3t_on(noc_o); - - if ( u3_none != pro ) { - u3a_lose(fol); - return pro; - } - else { - if ( c3n == u3r_ud(b_gal) ) { - return u3m_bail(c3__exit); - } - else { - u3_noun nex = u3k(u3at(b_gal, seb)); - - u3a_lose(fol); - bus = seb; - fol = nex; - continue; - } - } - } - } - c3_assert(!"not reached"); - - case 10: { - u3_noun p_gal, q_gal; - - u3x_cell(gal, &p_gal, &q_gal); - { - u3_noun zep, hod, nex; - - if ( c3y == u3r_du(p_gal) ) { - u3_noun b_gal = u3h(p_gal); - u3_noun c_gal = u3t(p_gal); - u3_noun d_gal = q_gal; - - zep = u3k(b_gal); - hod = _n_nock_on(u3k(bus), u3k(c_gal)); - nex = u3k(d_gal); - } - else { - u3_noun b_gal = p_gal; - u3_noun c_gal = q_gal; - - zep = u3k(b_gal); - hod = u3_nul; - nex = u3k(c_gal); - } - - u3a_lose(fol); - return _n_hint(zep, hod, bus, nex); - } - } - - case 11: { - u3_noun ref = _n_nock_on(u3k(bus), u3k(u3h(gal))); - u3_noun gof = _n_nock_on(bus, u3k(u3t(gal))); - u3_noun val; - - u3t_off(noc_o); - val = u3m_soft_esc(u3k(ref), u3k(gof)); - u3t_on(noc_o); - - if ( !_(u3du(val)) ) { - u3m_bail(u3nt(1, gof, 0)); - } - if ( !_(u3du(u3t(val))) ) { - // - // replace with proper error stack push - // - u3t_push(u3nt(c3__hunk, ref, gof)); - return u3m_bail(c3__exit); - } - else { - u3_noun pro; - - u3z(ref); - u3z(gof); - u3z(fol); - pro = u3k(u3t(u3t(val))); - u3z(val); - - return pro; - } - } - c3_assert(!"not reached"); - } - } -} -#endif - -// Several opcodes "overflow" (from byte to short index) to their successor, so -// order can matter here. -// Note that we use an X macro (https://en.wikipedia.org/wiki/X_Macro) to unify -// the opcode's enum name, string representation, and computed goto into a -// single structure. -#define OPCODES \ - /* general purpose */ \ - X(HALT, "halt", &&do_halt), /* 0 */ \ - X(BAIL, "bail", &&do_bail), /* 1 */ \ - X(COPY, "copy", &&do_copy), /* 2 */ \ - X(SWAP, "swap", &&do_swap), /* 3 */ \ - X(TOSS, "toss", &&do_toss), /* 4 */ \ - X(AUTO, "auto", &&do_auto), /* 5 */ \ - X(AULT, "ault", &&do_ault), /* 6 */ \ - X(SNOC, "snoc", &&do_snoc), /* 7 */ \ - X(SNOL, "snol", &&do_snol), /* 8 */ \ - X(HEAD, "head", &&do_head), /* 9 */ \ - X(HELD, "held", &&do_held), /* 10 */ \ - X(TAIL, "tail", &&do_tail), /* 11 */ \ - X(TALL, "tall", &&do_tall), /* 12 */ \ - /* fragment (keep) */ \ - X(FABK, "fabk", &&do_fabk), /* 13 */ \ - X(FASK, "fask", &&do_fask), /* 14 */ \ - X(FIBK, "fibk", &&do_fibk), /* 15 */ \ - X(FISK, "fisk", &&do_fisk), /* 16 */ \ - /* fragment (lose) */ \ - X(FABL, "fabl", &&do_fabl), /* 17 */ \ - X(FASL, "fasl", &&do_fasl), /* 18 */ \ - X(FIBL, "fibl", &&do_fibl), /* 19 */ \ - X(FISL, "fisl", &&do_fisl), /* 20 */ \ - /* literal (keep) */ \ - X(LIT0, "lit0", &&do_lit0), /* 21 */ \ - X(LIT1, "lit1", &&do_lit1), /* 22 */ \ - X(LITB, "litb", &&do_litb), /* 23 */ \ - X(LITS, "lits", &&do_lits), /* 24 */ \ - X(LIBK, "libk", &&do_libk), /* 25 */ \ - X(LISK, "lisk", &&do_lisk), /* 26 */ \ - /* literal (lose) */ \ - X(LIL0, "lil0", &&do_lil0), /* 27 */ \ - X(LIL1, "lil1", &&do_lil1), /* 28 */ \ - X(LILB, "lilb", &&do_lilb), /* 29 */ \ - X(LILS, "lils", &&do_lils), /* 30 */ \ - X(LIBL, "libl", &&do_libl), /* 31 */ \ - X(LISL, "lisl", &&do_lisl), /* 32 */ \ - /* nock */ \ - X(NOLK, "nolk", &&do_nolk), /* 33 */ \ - X(NOCT, "noct", &&do_noct), /* 34 */ \ - X(NOCK, "nock", &&do_nock), /* 35 */ \ - /* 3 & 4 */ \ - X(DEEP, "deep", &&do_deep), /* 36 */ \ - X(BUMP, "bump", &&do_bump), /* 37 */ \ - /* equality */ \ - X(SAM0, "sam0", &&do_sam0), /* 38 */ \ - X(SAM1, "sam1", &&do_sam1), /* 39 */ \ - X(SAMB, "samb", &&do_samb), /* 40 */ \ - X(SAMS, "sams", &&do_sams), /* 41 */ \ - X(SANB, "sanb", &&do_sanb), /* 42 */ \ - X(SANS, "sans", &&do_sans), /* 43 */ \ - X(SAME, "same", &&do_same), /* 44 */ \ - X(SALM, "salm", &&do_salm), /* 45 */ \ - X(SAMC, "samc", &&do_samc), /* 46 */ \ - /* unconditional skips */ \ - X(SBIP, "sbip", &&do_sbip), /* 47 */ \ - X(SIPS, "sips", &&do_sips), /* 48 */ \ - X(SWIP, "swip", &&do_swip), /* 49 */ \ - /* conditional skips */ \ - X(SBIN, "sbin", &&do_sbin), /* 50 */ \ - X(SINS, "sins", &&do_sins), /* 51 */ \ - X(SWIN, "swin", &&do_swin), /* 52 */ \ - /* nock 9 */ \ - X(KICB, "kicb", &&do_kicb), /* 53 */ \ - X(KICS, "kics", &&do_kics), /* 54 */ \ - X(TICB, "ticb", &&do_ticb), /* 55 */ \ - X(TICS, "tics", &&do_tics), /* 56 */ \ - /* nock 12 */ \ - X(WILS, "wils", &&do_wils), /* 57 */ \ - X(WISH, "wish", &&do_wish), /* 58 */ \ - /* hint processing */ \ - X(BUSH, "bush", &&do_bush), /* 59 */ \ - X(SUSH, "sush", &&do_sush), /* 60 */ \ - X(DROP, "drop", &&do_drop), /* 61 */ \ - X(HECK, "heck", &&do_heck), /* 62 */ \ - X(SLOG, "slog", &&do_slog), /* 63 */ \ - /* fast (keep) */ \ - X(BAST, "bast", &&do_bast), /* 64 */ \ - X(SAST, "sast", &&do_sast), /* 65 */ \ - /* fast (lose) */ \ - X(BALT, "balt", &&do_balt), /* 66 */ \ - X(SALT, "salt", &&do_salt), /* 67 */ \ - /* memo (keep) */ \ - X(SKIB, "skib", &&do_skib), /* 68 */ \ - X(SKIS, "skis", &&do_skis), /* 69 */ \ - /* memo (lose) */ \ - X(SLIB, "slib", &&do_slib), /* 70 */ \ - X(SLIS, "slis", &&do_slis), /* 71 */ \ - X(SAVE, "save", &&do_save), /* 72 */ \ - /* before formula */ \ - X(HILB, "hilb", &&do_hilb), /* 73: atomic, byte */ \ - X(HILS, "hils", &&do_hils), /* 74: atomic, short */ \ - X(HINB, "hinb", &&do_hinb), /* 75: arbitrary, byte */ \ - X(HINS, "hins", &&do_hins), /* 76: arbitrary, short */ \ - /* after formula */ \ - X(HILK, "hilk", &&do_hilk), /* 77: atomic, keep */ \ - X(HILL, "hill", &&do_hill), /* 78: atomic, lose */ \ - X(HINK, "hink", &&do_hink), /* 79: arbitrary, keep */ \ - X(HINL, "hinl", &&do_hinl), /* 80: arbitrary, lose */ \ - /* nock 10 */ \ - X(MUTH, "muth", &&do_muth), /* 81 */ \ - X(KUTH, "kuth", &&do_kuth), /* 82 */ \ - X(MUTT, "mutt", &&do_mutt), /* 83 */ \ - X(KUTT, "kutt", &&do_kutt), /* 84 */ \ - X(MUSM, "musm", &&do_musm), /* 85 */ \ - X(KUSM, "kusm", &&do_kusm), /* 86 */ \ - X(MUTB, "mutb", &&do_mutb), /* 87 */ \ - X(MUTS, "muts", &&do_muts), /* 88 */ \ - X(MITB, "mitb", &&do_mitb), /* 89 */ \ - X(MITS, "mits", &&do_mits), /* 90 */ \ - X(KUTB, "kutb", &&do_kutb), /* 91 */ \ - X(KUTS, "kuts", &&do_kuts), /* 92 */ \ - X(KITB, "kitb", &&do_kitb), /* 93 */ \ - X(KITS, "kits", &&do_kits), /* 94 */ \ - X(LAST, NULL, NULL), /* 95 */ - -// Opcodes. Define X to select the enum name from OPCODES. -#define X(opcode, name, indirect_jump) opcode -enum { OPCODES }; -#undef X - -/* _n_arg(): return the size (in bytes) of an opcode's argument - */ -static inline c3_y -_n_arg(c3_y cod_y) -{ - switch ( cod_y ) { - case FABK: case FABL: case FIBL: case FIBK: - case LILB: case LITB: case LIBL: case LIBK: - case SAMB: case SANB: case SBIP: case SBIN: - case SLIB: case SKIB: case KICB: case TICB: - case BUSH: case BAST: case BALT: - case MUTB: case KUTB: case MITB: case KITB: - return sizeof(c3_y); - - case FASK: case FASL: case FISL: case FISK: - case LILS: case LITS: case LISL: case LISK: - case SAMS: case SANS: case SIPS: case SINS: - case SLIS: case SKIS: case KICS: case TICS: - case SUSH: case SAST: case SALT: - case MUTS: case KUTS: case MITS: case KITS: - return sizeof(c3_s); - - case SWIP: case SWIN: - return sizeof(c3_l); - - default: - c3_assert( cod_y < LAST ); - return 0; - } -} - - -/* _n_melt(): measure space for list of ops (from _n_comp) */ -static u3_noun -_n_melt(u3_noun ops, c3_w* byc_w, c3_w* cal_w, - c3_w* reg_w, c3_w* lit_w, c3_w* mem_w) -{ - c3_w len_w = u3qb_lent(ops), - i_w = len_w - 1, - a_w; - c3_y cod_y; - c3_y* siz_y = u3a_malloc(len_w); - u3_noun op, sip = u3_nul; - - while ( u3_nul != ops ) { - op = u3h(ops); - if ( c3n == u3du(op) ) { - switch ( op ) { - default: - siz_y[i_w] = 1; - break; - - case BAST: case BALT: - a_w = (*reg_w)++; - if ( a_w <= 0xFF ) { - siz_y[i_w] = 2; - } - else if ( a_w <= 0xFFFF ) { - siz_y[i_w] = 3; - } - else { - fprintf(stderr, "_n_melt(): over 2^16 registration sites.\r\n"); - c3_assert(0); - } - break; - } - } - else { - cod_y = u3h(op); - - switch ( cod_y ) { - default: - siz_y[i_w] = 1 + _n_arg(cod_y); - break; - - case SBIP: case SBIN: { - c3_l tot_l = 0, - sip_l = u3t(op); - c3_w j_w, k_w = i_w; - for ( j_w = 0; j_w < sip_l; ++j_w ) { - tot_l += siz_y[++k_w]; - } - sip = u3nc(tot_l, sip); - siz_y[i_w] = tot_l <= 0xFF ? 2 : tot_l <= 0xFFFF ? 3 : 5; - break; - } - - case SKIB: case SLIB: { - c3_l tot_l = 0, - sip_l = u3h(u3t(op)); - c3_w j_w, k_w = i_w; - for ( j_w = 0; j_w < sip_l; ++j_w ) { - tot_l += siz_y[++k_w]; - } - sip = u3nc(tot_l, sip); - a_w = (*mem_w)++; - if ( a_w <= 0xFF ) { - siz_y[i_w] = 2; - } - else if ( a_w <= 0xFFFF ) { - siz_y[i_w] = 3; - } - else { - fprintf(stderr, "_n_melt(): over 2^16 memos.\r\n"); - c3_assert(0); - } - break; - } - - case SIPS: case SINS: case SWIP: case SWIN: - case SAST: case SALT: case KICS: case TICS: - case FISK: case FISL: case SUSH: case SANS: - case LISL: case LISK: case SKIS: case SLIS: - case HILS: case HINS: - c3_assert(0); //overflows - break; - - case KICB: case TICB: - a_w = (*cal_w)++; - if ( a_w <= 0xFF ) { - siz_y[i_w] = 2; - } - else if ( a_w <= 0xFFFF ) { - siz_y[i_w] = 3; - } - else { - fprintf(stderr, "_n_melt(): over 2^16 call sites.\r\n"); - c3_assert(0); - } - break; - - case BUSH: case FIBK: case FIBL: - case SANB: case LIBL: case LIBK: - case KITB: case MITB: - case HILB: case HINB: - a_w = (*lit_w)++; - if ( a_w <= 0xFF ) { - siz_y[i_w] = 2; - } - else if ( a_w <= 0xFFFF ) { - siz_y[i_w] = 3; - } - else { - fprintf(stderr, "_n_melt(): over 2^16 literals.\r\n"); - c3_assert(0); - } - break; - } - } - - *(byc_w) += siz_y[i_w--]; - ops = u3t(ops); - } - - u3a_free(siz_y); - return u3kb_flop(sip); -} - -/* _n_prog_dat(): return pointer to program's data segment - */ -static void* -_n_prog_dat(u3n_prog* pog_u) -{ - return ((void*) pog_u) + sizeof(u3n_prog); -} - -/* _n_prog_new(): allocate and set up pointers for u3n_prog - */ -static u3n_prog* -_n_prog_new(c3_w byc_w, c3_w cal_w, - c3_w reg_w, c3_w lit_w, c3_w mem_w) -{ - c3_w cab_w = (sizeof(u3j_site) * cal_w), - reb_w = (sizeof(u3j_rite) * reg_w), - lib_w = (sizeof(u3_noun) * lit_w), - meb_w = (sizeof(u3n_memo) * mem_w), - dat_w = byc_w + cab_w + reb_w + lib_w + meb_w; - - u3n_prog* pog_u = u3a_malloc(sizeof(u3n_prog) + dat_w); - pog_u->byc_u.own_o = c3y; - pog_u->byc_u.len_w = byc_w; - pog_u->byc_u.ops_y = (c3_y*) _n_prog_dat(pog_u); - - pog_u->lit_u.len_w = lit_w; - pog_u->lit_u.non = (u3_noun*) (pog_u->byc_u.ops_y + pog_u->byc_u.len_w); - - pog_u->mem_u.len_w = mem_w; - pog_u->mem_u.sot_u = (u3n_memo*) (pog_u->lit_u.non + pog_u->lit_u.len_w); - - pog_u->cal_u.len_w = cal_w; - pog_u->cal_u.sit_u = (u3j_site*) (pog_u->mem_u.sot_u + pog_u->mem_u.len_w); - - pog_u->reg_u.len_w = reg_w; - pog_u->reg_u.rit_u = (u3j_rite*) (pog_u->cal_u.sit_u + pog_u->cal_u.len_w); - - return pog_u; -} - -/* _n_prog_old(): as _n_prog_new(), - * but leech off senior program's data segment - */ -static u3n_prog* -_n_prog_old(u3n_prog* sep_u) -{ - c3_w cab_w = sizeof(u3j_site) * sep_u->cal_u.len_w, - reb_w = sizeof(u3j_rite) * sep_u->reg_u.len_w, - lib_w = sizeof(u3_noun) * sep_u->lit_u.len_w, - meb_w = sizeof(u3n_memo) * sep_u->mem_u.len_w, - dat_w = cab_w + reb_w + lib_w + meb_w; - - u3n_prog* pog_u = u3a_malloc(sizeof(u3n_prog) + dat_w); - pog_u->byc_u.own_o = c3n; - pog_u->byc_u.len_w = sep_u->byc_u.len_w; - pog_u->byc_u.ops_y = sep_u->byc_u.ops_y; - - pog_u->lit_u.len_w = sep_u->lit_u.len_w; - pog_u->lit_u.non = (u3_noun*) _n_prog_dat(pog_u); - - pog_u->mem_u.len_w = sep_u->mem_u.len_w; - pog_u->mem_u.sot_u = (u3n_memo*) (pog_u->lit_u.non + pog_u->lit_u.len_w); - - pog_u->cal_u.len_w = sep_u->cal_u.len_w; - pog_u->cal_u.sit_u = (u3j_site*) (pog_u->mem_u.sot_u + pog_u->mem_u.len_w); - - pog_u->reg_u.len_w = sep_u->reg_u.len_w; - pog_u->reg_u.rit_u = (u3j_rite*) (pog_u->cal_u.sit_u + pog_u->cal_u.len_w); - - memcpy(pog_u->lit_u.non, sep_u->lit_u.non, dat_w); - return pog_u; -} - -/* _n_prog_asm_inx(): write an index to the bytestream with overflow - */ -static void -_n_prog_asm_inx(c3_y* buf_y, c3_w* i_w, c3_s inx_s, c3_y cod) -{ - if ( inx_s <= 0xFF ) { - buf_y[(*i_w)--] = (c3_y) (inx_s); - buf_y[*i_w] = (c3_y) cod; - } - else { - buf_y[(*i_w)--] = (c3_y) (inx_s >> 8); - buf_y[(*i_w)--] = (c3_y) (inx_s); - // the short-index versions of these opcodes must immediately - // follow the byte-index versions because of this convention - buf_y[(*i_w)] = cod + 1; - } -} - -/* _n_prog_asm(): assemble list of ops (from _n_comp) into u3n_prog - */ -static void -_n_prog_asm(u3_noun ops, u3n_prog* pog_u, u3_noun sip) -{ - u3_noun top = ops; - c3_y* buf_y = pog_u->byc_u.ops_y; - c3_s lit_s = 0, - cal_s = 0, - mem_s = 0, - reg_s = 0; - c3_w i_w = pog_u->byc_u.len_w-1; - - buf_y[i_w] = HALT; - - while ( i_w-- > 0 ) { - u3_noun op = u3h(ops); - if ( c3y == u3ud(op) ) { - switch ( op ) { - default: - buf_y[i_w] = (c3_y) u3h(ops); - break; - - /* registration site index args */ - case BAST: case BALT: { - _n_prog_asm_inx(buf_y, &i_w, reg_s, op); - u3j_rite* rit_u = &(pog_u->reg_u.rit_u[reg_s++]); - rit_u->own_o = c3n; - rit_u->clu = u3_none; - rit_u->fin_p = 0; - break; - } - } - } - else { - u3_noun cod = u3h(op); - switch ( cod ) { - default: - c3_assert(0); - return; - - /* memo index args */ - case SKIB: case SLIB: { - u3n_memo* mem_u; - c3_l sip_l = u3h(sip); - u3_noun tmp = sip; - sip = u3k(u3t(sip)); - u3z(tmp); - _n_prog_asm_inx(buf_y, &i_w, mem_s, cod); - mem_u = &(pog_u->mem_u.sot_u[mem_s++]); - mem_u->sip_l = sip_l; - mem_u->key = u3k(u3t(u3t(op))); - break; - } - - /* skips */ - case SBIP: case SBIN: { - c3_l sip_l = u3h(sip); - u3_noun tmp = sip; - sip = u3k(u3t(sip)); - u3z(tmp); - if ( sip_l <= 0xFF ) { - buf_y[i_w--] = (c3_y) sip_l; - buf_y[i_w] = (c3_y) cod; - } - else if ( sip_l <= 0xFFFF ) { - buf_y[i_w--] = (c3_y) (sip_l >> 8); - buf_y[i_w--] = (c3_y) sip_l; - buf_y[i_w] = (c3_y) cod + 1; - } - else { - buf_y[i_w--] = (c3_y) (sip_l >> 24); - buf_y[i_w--] = (c3_y) (sip_l >> 16); - buf_y[i_w--] = (c3_y) (sip_l >> 8); - buf_y[i_w--] = (c3_y) sip_l; - buf_y[i_w] = (c3_y) cod + 2; - } - break; - } - - /* 8-bit direct args */ - case FABK: case FABL: - case LITB: case LILB: - case MUTB: case KUTB: - case SAMB: - buf_y[i_w--] = (c3_y) u3t(op); - buf_y[i_w] = (c3_y) cod; - break; - - /* 16-bit direct args */ - case FASK: case FASL: - case LILS: case LITS: - case MUTS: case KUTS: - case SAMS: case SIPS: case SINS: { - c3_s off_s = u3t(op); - buf_y[i_w--] = (c3_y) (off_s >> 8); - buf_y[i_w--] = (c3_y) off_s; - buf_y[i_w] = (c3_y) cod; - break; - } - - /* 31-bit direct args */ - case SWIP: case SWIN: { - c3_w off_l = u3t(op); - buf_y[i_w--] = (c3_y) (off_l >> 24); - buf_y[i_w--] = (c3_y) (off_l >> 16); - buf_y[i_w--] = (c3_y) (off_l >> 8); - buf_y[i_w--] = (c3_y) off_l; - buf_y[i_w] = (c3_y) cod; - break; - } - - /* literal index args */ - case FIBK: case FIBL: - case LIBK: case LIBL: - case BUSH: case SANB: - case KITB: case MITB: - case HILB: case HINB: - _n_prog_asm_inx(buf_y, &i_w, lit_s, cod); - pog_u->lit_u.non[lit_s++] = u3k(u3t(op)); - break; - - /* call site index args */ - case TICB: case KICB: { - _n_prog_asm_inx(buf_y, &i_w, cal_s, cod); - u3j_site* sit_u = &(pog_u->cal_u.sit_u[cal_s++]); - sit_u->axe = u3k(u3t(op)); - sit_u->pog_p = 0; - sit_u->bat = u3_none; - sit_u->bas = u3_none; - sit_u->loc = u3_none; - sit_u->lab = u3_none; - sit_u->jet_o = c3n; - sit_u->fon_o = c3n; - sit_u->cop_u = NULL; - sit_u->ham_u = NULL; - sit_u->fin_p = 0; - break; - } - } - } - ops = u3t(ops); - } - u3z(top); - // this assert will fail if we overflow a c3_w worth of instructions - c3_assert(u3_nul == ops); - // this is just a sanity check - c3_assert(u3_nul == sip); -} - -/* _n_prog_from_ops(): new program from _n_comp() product - */ -static u3n_prog* -_n_prog_from_ops(u3_noun ops) -{ - u3_noun sip; - u3n_prog* pog_u; - c3_w byc_w = 1, // HALT - cal_w = 0, - reg_w = 0, - lit_w = 0, - mem_w = 0; - - sip = _n_melt(ops, &byc_w, &cal_w, ®_w, &lit_w, &mem_w); - pog_u = _n_prog_new(byc_w, cal_w, reg_w, lit_w, mem_w); - _n_prog_asm(ops, pog_u, sip); - return pog_u; -} - -#if 0 -/* _n_print_stack(): print out the cap stack up to a designated "empty" - * used only for debugging - */ -static void _n_print_stack(u3p(u3_noun) empty) { - c3_w cur_p = u3R->cap_p; - fprintf(stderr, "["); - int first = 1; - while ( cur_p != empty ) { - if ( first ) { - first = 0; - } - else { - fprintf(stderr, " "); - } - if ( c3y == u3a_is_north(u3R) ) { - fprintf(stderr, "%u", *(u3to(u3_noun, cur_p))); - cur_p++; - } - else { - fprintf(stderr, "%u", *(u3to(u3_noun, cur_p-1))); - cur_p--; - } - } - fprintf(stderr, "]\r\n"); -} -#endif - -#ifdef VERBOSE_BYTECODE -// Define X to select the opcode string representation from OPCODES. -# define X(opcode, name, indirect_jump) name -static c3_c* opcode_names[] = { OPCODES }; -# undef X -#endif - -/* _n_apen(): emit the instructions contained in src to dst - */ -static inline void -_n_apen(u3_noun* dst, u3_noun src) -{ - *dst = u3kb_weld(src, *dst); -} - -/* _n_emit(): emit a single instruction to ops - */ -static inline void -_n_emit(u3_noun *ops, u3_noun op) -{ - *ops = u3nc(op, *ops); -} - -static c3_w _n_comp(u3_noun*, u3_noun, c3_o, c3_o); - -/* _n_bint(): hint-processing helper for _n_comp. - * hif: hint-formula (first part of 11). RETAIN. - * nef: next-formula (second part of 11). RETAIN. - */ -static c3_w -_n_bint(u3_noun* ops, u3_noun hif, u3_noun nef, c3_o los_o, c3_o tel_o) -{ - c3_w tot_w = 0; - - if ( c3n == u3du(hif) ) { - // compile whitelisted atomic hints to dispatch protocol; - // compute and drop all others; - // - switch ( hif ) { - default: { - return _n_comp(ops, nef, los_o, tel_o); - } - case c3__nara: - case c3__hela: - case c3__bout: { - u3_noun fen = u3_nul; - c3_w nef_w = _n_comp(&fen, nef, los_o, c3n); - // add appropriate hind opcode - ++nef_w; _n_emit(&fen, ( c3y == los_o ) ? HILL : HILK); - // skip over the cleanup opcode - ++nef_w; _n_emit(&fen, u3nc(SBIP, 1)); - - // call hilt_fore - // HILB overflows to HILS - ++tot_w; _n_emit(ops, u3nc(HILB, u3nc(u3k(hif), u3k(nef)))); - // if fore return c3n, skip fen - ++tot_w; _n_emit(ops, u3nc(SBIN, nef_w)); - tot_w += nef_w; _n_apen(ops, fen); - // post-skip cleanup opcode - ++tot_w; _n_emit(ops, ( c3y == los_o ) ? TOSS : SWAP); - } break; - } - } - else { - u3_noun zep, hod; - u3x_cell(hif, &zep, &hod); - - switch ( zep ) { - default: { - // compile whitelisted dynamic hints to dispatch protocol; - // compute and drop all others; - // - switch ( zep ) { - default: { - tot_w += _n_comp(ops, hod, c3n, c3n); - ++tot_w; _n_emit(ops, TOSS); - tot_w += _n_comp(ops, nef, los_o, tel_o); - } break; - case c3__nara: - case c3__hela: - case c3__bout: { - u3_noun fen = u3_nul; - c3_w nef_w = _n_comp(&fen, nef, los_o, c3n); - // add appropriate hind opcode - ++nef_w; _n_emit(&fen, ( c3y == los_o ) ? HINL : HINK); - // skip over the cleanup opcode - ++nef_w; _n_emit(&fen, u3nc(SBIP, 1)); - - // push clue - tot_w += _n_comp(ops, hod, c3n, c3n); - // call hint_fore - // HINB overflows to HINS - ++tot_w; _n_emit(ops, u3nc(HINB, u3nc(u3k(zep), u3k(nef)))); - // if fore return c3n, skip fen - ++tot_w; _n_emit(ops, u3nc(SBIN, nef_w)); - tot_w += nef_w; _n_apen(ops, fen); - // post-skip cleanup opcode - ++tot_w; _n_emit(ops, ( c3y == los_o ) ? TOSS : SWAP); - } break; - } - } break; - - case c3__hunk: - case c3__lose: - case c3__mean: - case c3__spot: - tot_w += _n_comp(ops, hod, c3n, c3n); - ++tot_w; _n_emit(ops, u3nc(BUSH, zep)); // overflows to SUSH - tot_w += _n_comp(ops, nef, los_o, c3n); - ++tot_w; _n_emit(ops, DROP); - break; - - case c3__live: - tot_w += _n_comp(ops, hod, c3n, c3n); - ++tot_w; _n_emit(ops, HECK); - tot_w += _n_comp(ops, nef, los_o, tel_o); - break; - - case c3__slog: - tot_w += _n_comp(ops, hod, c3n, c3n); - ++tot_w; _n_emit(ops, SLOG); - tot_w += _n_comp(ops, nef, los_o, tel_o); - break; - - // germ and sole are unused... - - case c3__fast: - tot_w += _n_comp(ops, hod, c3n, c3n); - ++tot_w; _n_emit(ops, SWAP); - tot_w += _n_comp(ops, nef, c3n, c3n); - // overflows to SALT / SAST - ++tot_w; _n_emit(ops, (c3y == los_o) ? BALT : BAST); - break; - - case c3__memo: { - u3_noun mem = u3_nul; - c3_w mem_w = 0; - c3_y op_y; - - // we just throw away the hint (why is this not a static hint?) - tot_w += _n_comp(ops, hod, c3n, c3n); - ++tot_w; _n_emit(ops, TOSS); - - // memoizing code always loses TOS because SAVE needs [pro key] - mem_w += _n_comp(&mem, nef, c3y, c3n); - ++mem_w; _n_emit(&mem, SAVE); - - op_y = (c3y == los_o) ? SLIB : SKIB; // overflows to SLIS / SKIS - ++tot_w; _n_emit(ops, u3nt(op_y, mem_w, u3k(nef))); - tot_w += mem_w; _n_apen(ops, mem); - break; - } - } - } - - return tot_w; -} - -static c3_t -_n_formulaic(u3_noun fol) -{ - u3_noun op, ar, a, b, c; - if ( c3n == u3r_cell(fol, &op, &ar) ) { - return 0; - } - if ( c3y == u3du(op) ) { - return _n_formulaic(op) && _n_formulaic(ar); - } - else switch ( op ) { - case 0: - return ( c3y == u3ud(ar) ); - case 1: - return 1; - case 3: - case 4: - return _n_formulaic(ar); - case 2: - case 5: - case 7: - case 8: - case 12: - return (c3y == u3r_cell(ar, &a, &b)) - && _n_formulaic(a) && _n_formulaic(b); - case 6: - return ( c3y == u3r_trel(ar, &a, &b, &c) ) - && _n_formulaic(a) && - (_n_formulaic(b) || _n_formulaic(c)); - case 9: - return (c3y == u3r_cell(ar, &a, &b)) - && (c3y == u3ud(a)) - && _n_formulaic(b); - case 10: - if ( c3n == u3r_cell(ar, &a, &b) ) { - return 0; - } - if ( c3n == u3du(a) ) { - return 0; - } - if ( c3n == u3ud(u3h(a)) ) { - return 0; - } - return _n_formulaic(u3t(a)) && _n_formulaic(b); - case 11: - if ( c3n == u3r_cell(ar, &a, &b) ) { - return 0; - } - if ( !_n_formulaic(b) ) { - return 0; - } - if ( c3y == u3ud(a) ) { - return 1; - } - else { - return ( c3y == u3ud(u3h(a)) ) && _n_formulaic(u3t(a)); - } - default: - return 0; - } -} - -/* _n_comp(): compile nock formula to reversed opcode list - * ops is a pointer to a list (to be emitted to) - * fol is the nock formula to compile. RETAIN. - * los_o indicates whether we should remove our - * subject from the stack - * tel_o is yes if this formula is in tail position - * return: number of instructions added to the opcode list - */ -static c3_w -_n_comp(u3_noun* ops, u3_noun fol, c3_o los_o, c3_o tel_o) -{ - c3_y op_y; - c3_w tot_w = 0; - u3_noun cod, arg, hed, tel; - u3x_cell(fol, &cod, &arg); - if ( c3y == u3du(cod) ) { - tot_w += _n_comp(ops, cod, c3n, c3n); - ++tot_w; _n_emit(ops, SWAP); - tot_w += _n_comp(ops, arg, c3n, c3n); - ++tot_w; _n_emit(ops, (c3y == los_o ) ? AULT : AUTO); - } - else switch ( cod ) { - case 0: - if ( c3n == u3ud(arg) ) { - u3m_bail(c3__exit); - return 0; - } - switch ( arg ) { - case 0: - ++tot_w; _n_emit(ops, BAIL); - break; - case 1: - if ( c3n == los_o ) { - ++tot_w; _n_emit(ops, COPY); - } - break; - case 2: - ++tot_w; _n_emit(ops, (c3y == los_o) ? HELD : HEAD); - break; - case 3: - ++tot_w; _n_emit(ops, (c3y == los_o) ? TALL : TAIL); - break; - default: - op_y = (c3y == los_o) - ? (arg <= 0xFF ? FABL : arg <= 0xFFFF ? FASL : FIBL) // overflows to FISL - : (arg <= 0xFF ? FABK : arg <= 0xFFFF ? FASK : FIBK); // overflows to FISK - ++tot_w; _n_emit(ops, u3nc(op_y, u3k(arg))); - break; - } - break; - - case 1: - switch ( arg ) { - case 0: - ++tot_w; _n_emit(ops, (c3y == los_o) ? LIL0 : LIT0); - break; - case 1: - ++tot_w; _n_emit(ops, (c3y == los_o) ? LIL1 : LIT1); - break; - default: - op_y = (c3y == los_o) - ? (arg <= 0xFF ? LILB : arg <= 0xFFFF ? LILS : LIBL) // overflows to LISL - : (arg <= 0xFF ? LITB : arg <= 0xFFFF ? LITS : LIBK); // overflows to LISK - ++tot_w; _n_emit(ops, u3nc(op_y, u3k(arg))); - break; - } - break; - - case 2: - u3x_cell(arg, &hed, &tel); - tot_w += _n_comp(ops, hed, c3n, c3n); - ++tot_w; _n_emit(ops, SWAP); - tot_w += _n_comp(ops, tel, c3n, c3n); - /* things in tail position replace (so, lose) top of stack, - * so NOCT "loses" and there is no non-losing version */ - op_y = (c3y == tel_o) ? NOCT - : ((c3y == los_o) ? NOLK : NOCK); - ++tot_w; _n_emit(ops, op_y); - break; - - case 3: - tot_w += _n_comp(ops, arg, los_o, c3n); - ++tot_w; _n_emit(ops, DEEP); - break; - - case 4: - tot_w += _n_comp(ops, arg, los_o, c3n); - ++tot_w; _n_emit(ops, BUMP); - break; - - case 5: { - u3x_cell(arg, &hed, &tel); - - if ( c3n == u3du(hed) ) { - u3m_bail(c3__exit); - return 0; - } - else { - c3_t hec_t, tec_t; - hec_t = (1 == u3h(hed)); - if ( c3n == u3du(tel) ) { - u3m_bail(c3__exit); - break; - } - else { - tec_t = (1 == u3h(tel)); - } - if ( hec_t && tec_t ) { - if ( c3y == u3r_sing(u3t(hed), u3t(tel)) ) { - ++tot_w; _n_emit(ops, (c3y == los_o) ? LIL0 : LIT0); - } - else { - ++tot_w; _n_emit(ops, (c3y == los_o) ? LIL1 : LIT1); - } - } - else if ( !hec_t && !tec_t ) { - tot_w += _n_comp(ops, hed, c3n, c3n); - ++tot_w; _n_emit(ops, SWAP); - tot_w += _n_comp(ops, tel, c3n, c3n); - ++tot_w; _n_emit(ops, (c3y == los_o) ? SALM : SAME); - } - else { - tot_w += _n_comp(ops, (hec_t ? tel : hed), los_o, c3n); - u3_noun lit = u3t(hec_t ? hed : tel); - switch ( lit ) { - case 0: - ++tot_w; _n_emit(ops, SAM0); - break; - case 1: - ++tot_w; _n_emit(ops, SAM1); - break; - default: - // overflows to SANS - op_y = lit <= 0xFF ? SAMB : lit <= 0xFFFF ? SAMS : SANB; - ++tot_w; _n_emit(ops, u3nc(op_y, u3k(lit))); - } - } - } - break; - } - - case 6: { - u3_noun mid, - yep = u3_nul, - nop = u3_nul; - c3_w yep_w, nop_w; - c3_t yep_t, nop_t; - u3x_trel(arg, &hed, &mid, &tel); - - tot_w += _n_comp(ops, hed, c3n, c3n); - yep_t = _n_formulaic(mid); - nop_t = _n_formulaic(tel); - - if ( !yep_t && !nop_t ) { - u3m_bail(c3__exit); - break; - } - - if ( yep_t ) { - yep_w = _n_comp(&yep, mid, los_o, tel_o); - } - else { - yep_w = 1; _n_emit(&yep, BAIL); - } - - if ( nop_t ) { - nop_w = _n_comp(&nop, tel, los_o, tel_o); - } - else { - nop_w = 1; _n_emit(&nop, BAIL); - } - - // SBIP and SBIN get sized during assembly - ++yep_w; _n_emit(&yep, u3nc(SBIP, nop_w)); - ++tot_w; _n_emit(ops, u3nc(SBIN, yep_w)); - tot_w += yep_w; _n_apen(ops, yep); - tot_w += nop_w; _n_apen(ops, nop); - break; - } - - case 7: - u3x_cell(arg, &hed, &tel); - tot_w += _n_comp(ops, hed, los_o, c3n); - tot_w += _n_comp(ops, tel, c3y, tel_o); - break; - - case 8: - u3x_cell(arg, &hed, &tel); - tot_w += _n_comp(ops, hed, c3n, c3n); - ++tot_w; _n_emit(ops, (c3y == los_o) ? SNOL : SNOC); - tot_w += _n_comp(ops, tel, c3y, tel_o); - break; - - case 9: - u3x_cell(arg, &hed, &tel); - if ( (1 == hed) || (3 == u3qc_cap(hed)) ) { - u3_noun mac = u3nq(7, u3k(tel), 2, u3nt(u3nc(0, 1), 0, u3k(hed))); - tot_w += _n_comp(ops, mac, los_o, tel_o); - u3z(mac); - } - else { - tot_w += _n_comp(ops, tel, (c3y == tel_o ? c3y : los_o), c3n); - op_y = (c3y == tel_o) ? TICB : KICB; // overflows to TICS/KICS - ++tot_w; _n_emit(ops, u3nc(op_y, u3k(hed))); - } - break; - - case 10: { - u3_noun axe, nef; - u3x_cell(arg, &hed, &tel); - u3x_cell(hed, &axe, &nef); - tot_w += _n_comp(ops, tel, c3n, c3n); - ++tot_w; _n_emit(ops, SWAP); - tot_w += _n_comp(ops, nef, c3n, c3n); - - ++tot_w; - switch ( axe ) { - case 2: - _n_emit(ops, (c3y == los_o) ? MUTH : KUTH); - break; - - case 3: - _n_emit(ops, (c3y == los_o) ? MUTT : KUTT); - break; - - case u3x_sam: - _n_emit(ops, (c3y == los_o) ? MUSM : KUSM); - break; - - default: - op_y = (c3y == los_o) - ? (axe <= 0xFF) ? MUTB : (axe <= 0xFFFF) ? MUTS : MITB // overflows to MITS - : (axe <= 0xFF) ? KUTB : (axe <= 0xFFFF) ? KUTS : KITB; // overflows to KITS - _n_emit(ops, u3nc(op_y, u3k(axe))); - break; - } - break; - } - - case 11: - u3x_cell(arg, &hed, &tel); - tot_w += _n_bint(ops, hed, tel, los_o, tel_o); - break; - - case 12: - u3x_cell(arg, &hed, &tel); - tot_w += _n_comp(ops, hed, c3n, c3n); - ++tot_w; _n_emit(ops, SWAP); - tot_w += _n_comp(ops, tel, c3n, c3n); - ++tot_w; _n_emit(ops, (c3y == los_o) ? WILS : WISH); - break; - - default: - u3m_bail(c3__exit); - return 0; - } - return tot_w; -} - -/* _n_push(): push a noun onto the stack. RETAIN - * mov: -1 north, 1 south - * off: 0 north, -1 south - */ -static inline void -_n_push(c3_ys mov, c3_ys off, u3_noun a) -{ - u3R->cap_p += mov; - - // XX stack sanity-check disabled for performance - // -#if 0 - if ( 0 == off ) { - if( !(u3R->cap_p > u3R->hat_p) ) { - u3m_bail(c3__meme); - } - } - else { - if( !(u3R->cap_p < u3R->hat_p) ) { - u3m_bail(c3__meme); - } - } -#endif - - u3_noun* p = u3to(u3_noun, u3R->cap_p + off); - *p = a; -} - -/* _n_peek(): pointer to noun at top of stack - * off: 0 north, -1 south - */ -static inline u3_noun* -_n_peek(c3_ys off) -{ - return u3to(u3_noun, u3R->cap_p + off); -} - -/* _n_peet(): address of the next-to-top of stack - * mov: -1 north, 1 south - * off: 0 north, -1 south - */ -static inline u3_noun* -_n_peet(c3_ys mov, c3_ys off) -{ - return u3to(u3_noun, (u3R->cap_p - mov) + off); -} - -/* _n_pop(): pop a noun from the cap stack - * mov: -1 north, 1 south - */ -static inline void -_n_pop(c3_ys mov) -{ - u3R->cap_p -= mov; -} - -/* _n_pep(): pop and return noun from the cap stack - * mov: -1 north, 1 south - * off: 0 north, -1 south - */ -static inline u3_noun -_n_pep(c3_ys mov, c3_ys off) -{ - u3_noun r = *(_n_peek(off)); - _n_pop(mov); - return r; -} - -/* _n_toss(): pep and lose - */ -static inline void -_n_toss(c3_ys mov, c3_ys off) -{ - u3z(_n_pep(mov, off)); -} - -/* _n_resh(): read a c3_s from the bytecode stream - */ -static inline c3_s -_n_resh(c3_y* buf, c3_w* ip_w) -{ - c3_y les = buf[(*ip_w)++]; - c3_y mos = buf[(*ip_w)++]; - return les | (mos << 8); -} - -/* _n_rewo(): read a c3_w from the bytecode stream. - */ -static inline c3_w -_n_rewo(c3_y* buf, c3_w* ip_w) -{ - c3_y one = buf[(*ip_w)++], - two = buf[(*ip_w)++], - tre = buf[(*ip_w)++], - qua = buf[(*ip_w)++]; - return one | (two << 8) | (tre << 16) | (qua << 24); -} - -/* _n_swap(): swap two items on the top of the stack, return pointer to top - */ -static inline u3_noun* -_n_swap(c3_ys mov, c3_ys off) -{ - u3_noun* top = _n_peek(off); - u3_noun* up = _n_peet(mov, off); - u3_noun tmp = *up; - *up = *top; - *top = tmp; - return top; -} - -#ifdef VERBOSE_BYTECODE -/* _n_print_byc(): print bytecode. used for debugging. - */ -static void -_n_print_byc(c3_y* pog, c3_w her_w) -{ - c3_w ip_w = 0; - if ( her_w == 0 ) { - fprintf(stderr, "begin: {"); - } - else { - fprintf(stderr, "resume: {"); - } - int first = 1; - while ( pog[ip_w] ) { - if ( first ) { - first = 0; - } - else if (ip_w == her_w) { - fprintf(stderr, " [*]"); - } - else { - fprintf(stderr, " "); - } - switch ( _n_arg(pog[ip_w]) ) { - case 0: - fprintf(stderr, "%s", opcode_names[pog[ip_w++]]); - break; - - case 1: - fprintf(stderr, "[%s ", opcode_names[pog[ip_w++]]); - fprintf(stderr, "%u]", pog[ip_w++]); - break; - - case 2: - fprintf(stderr, "[%s ", opcode_names[pog[ip_w++]]); - fprintf(stderr, "%u]", _n_resh(pog, &ip_w)); - break; - - case 4: - fprintf(stderr, "[%s", opcode_names[pog[ip_w++]]); - fprintf(stderr, "%u]", _n_rewo(pog, &ip_w)); - break; - default: - c3_assert(0); - break; - } - } - fprintf(stderr, " halt}\r\n"); -} -#endif - -/* _n_bite(): compile a nock formula to bytecode. RETAIN. - */ -static inline u3n_prog* -_n_bite(u3_noun fol) { - u3_noun ops = u3_nul; - _n_comp(&ops, fol, c3y, c3y); - return _n_prog_from_ops(ops); -} - -/* _n_find(): return prog for given formula with prefix (u3_nul for none). - * RETAIN. - */ -static u3n_prog* -_n_find(u3_noun pre, u3_noun fol) -{ - u3_noun key = u3nc(u3k(pre), u3k(fol)); - u3_weak pog = u3h_git(u3R->byc.har_p, key); - if ( u3_none != pog ) { - u3z(key); - return u3to(u3n_prog, pog); - } - else if ( u3R != &u3H->rod_u ) { - u3a_road* rod_u = u3R; - while ( rod_u->par_p ) { - rod_u = u3to(u3a_road, rod_u->par_p); - pog = u3h_git(rod_u->byc.har_p, key); - if ( u3_none != pog ) { - c3_w i_w; - u3n_prog* old = _n_prog_old(u3to(u3n_prog, pog)); - for ( i_w = 0; i_w < old->reg_u.len_w; ++i_w ) { - u3j_rite* rit_u = &(old->reg_u.rit_u[i_w]); - rit_u->own_o = c3n; - } - for ( i_w = 0; i_w < old->cal_u.len_w; ++i_w ) { - u3j_site* sit_u = &(old->cal_u.sit_u[i_w]); - sit_u->bat = u3_none; - sit_u->pog_p = 0; - sit_u->fon_o = c3n; - } - u3h_put(u3R->byc.har_p, key, u3a_outa(old)); - u3z(key); - return old; - } - } - } - - { - u3n_prog* gop = _n_bite(fol); - u3h_put(u3R->byc.har_p, key, u3a_outa(gop)); - u3z(key); - return gop; - } -} - -/* u3n_find(): return prog for given formula, - * split by key (u3_nul for no key). RETAIN. - */ -u3p(u3n_prog) -u3n_find(u3_noun key, u3_noun fol) -{ - u3p(u3n_prog) pog_p; - u3t_on(noc_o); - pog_p = u3of(u3n_prog, _n_find(key, fol)); - u3t_off(noc_o); - return pog_p; -} - -/* _n_hilt_fore(): literal (atomic) dynamic hint, before formula evaluation. -** hin: [hint-atom, formula]. TRANSFER -** bus: subject. RETAIN -** out: token for _n_hilt_hind(); convention: -** [hint-atom] or [hint-atom data], ~ if unused. -** -** any hints herein must be whitelisted in _n_burn(). -*/ -static c3_o -_n_hilt_fore(u3_noun hin, u3_noun bus, u3_noun* out) -{ - u3_noun tag, fol; - u3x_cell(hin, &tag, &fol); - - switch ( tag ) { - case c3__bout: { - u3_atom now = u3i_chub(u3t_trace_time()); - *out = u3i_cell(tag, now); - } break; - - case c3__nara : { - u3t_slog_nara(0); - *out = u3_nul; - } break; - - case c3__hela : { - u3t_slog_hela(0); - *out = u3_nul; - } break; - - default: { - *out = u3_nul; - } break; - } - - u3z(hin); - return c3y; -} - -/* _n_hilt_hind(): literal (atomic) dynamic hint, after formula evaluation. -** tok: token from _n_hilt_fore(). TRANSFER -** pro: product of formula evaluation. RETAIN -*/ -static void -_n_hilt_hind(u3_noun tok, u3_noun pro) -{ - u3_noun p_tok, q_tok; - if ( (c3y == u3r_cell(tok, &p_tok, &q_tok)) && (c3__bout == p_tok) ) { - u3_atom delta = u3ka_sub(u3i_chub(u3t_trace_time()), u3k(q_tok)); - c3_c str_c[64]; - u3a_print_time(str_c, "took", u3r_chub(0, delta)); - u3t_slog(u3nc(0, u3i_string(str_c))); - u3z(delta); - } - else { - c3_assert( u3_nul == tok ); - } - - u3z(tok); -} - -/* _n_hint_fore(): arbitrary dynamic hint, before formula evaluation -** hin: [hint-atom, formula]. TRANSFER -** bus: subject. RETAIN -** clu: product of the hint-formula. TRANSFER -** also, token for _n_hilt_hind(); convention: -** [hint-atom] or [hint-atom data], ~ if unused. -** -** any hints herein must be whitelisted in _n_burn(). -*/ -static c3_o -_n_hint_fore(u3_cell hin, u3_noun bus, u3_noun* clu) -{ - u3_noun tag, fol; - u3x_cell(hin, &tag, &fol); - - switch ( tag ) { - case c3__bout: { - u3_atom now = u3i_chub(u3t_trace_time()); - *clu = u3nt(u3k(tag), *clu, now); - } break; - - case c3__nara: { - u3_noun pri, tan; - if ( c3y == u3r_cell(*clu, &pri, &tan) ) { - c3_l pri_l = c3y == u3a_is_cat(pri) ? pri : 0; - u3t_slog_cap(pri_l, u3i_string("trace of"), u3k(tan)); - u3t_slog_nara(pri_l); - } - u3z(*clu); - *clu = u3_nul; - } break; - - case c3__hela: { - u3_noun pri, tan; - if ( c3y == u3r_cell(*clu, &pri, &tan) ) { - c3_l pri_l = c3y == u3a_is_cat(pri) ? pri : 0; - u3t_slog_cap(pri_l, u3i_string("trace of"), u3k(tan)); - u3t_slog_hela(pri_l); - } - u3z(*clu); - *clu = u3_nul; - } break; - - default: { - u3z(*clu); - *clu = u3_nul; - } break; - } - - u3z(hin); - return c3y; -} - -/* _n_hint_hind(): arbitrary dynamic hint, after formula evaluation. -** tok: token from _n_hint_fore(). TRANSFER -** pro: product of formula evaluation. RETAIN -*/ -static void -_n_hint_hind(u3_noun tok, u3_noun pro) -{ - u3_noun p_tok, q_tok, r_tok; - if ( (c3y == u3r_trel(tok, &p_tok, &q_tok, &r_tok)) && (c3__bout == p_tok) ) { - // get the microseconds elapsed - u3_atom delta = u3ka_sub(u3i_chub(u3t_trace_time()), u3k(r_tok)); - - // unpack q_tok to get the priority integer and the tank - // p_q_tok is the priority, q_q_tok is the tank we will work with - u3_noun p_q_tok, q_q_tok; - c3_assert(c3y == u3r_cell(q_tok, &p_q_tok, &q_q_tok)); - - // format the timing report - c3_c str_c[64]; - u3a_print_time(str_c, "took", u3r_chub(0, delta)); - - // join the timing report with the original tank from q_q_tok like so: - // "q_q_tok: report" - // prepend the priority to form a cell of the same shape q_tok - // send this to ut3_slog so that it can be logged out - c3_l pri_l = c3y == u3a_is_cat(p_q_tok) ? p_q_tok : 0; - u3t_slog_cap(pri_l, u3k(q_q_tok), u3i_string(str_c)); - u3z(delta); - } - else { - c3_assert( u3_nul == tok ); - } - - u3z(tok); -} - -/* _n_kick(): stop tracing noc and kick a u3j_site. - */ -static u3_weak -_n_kick(u3_noun cor, u3j_site* sit_u) -{ - u3_weak pro; - u3t_off(noc_o); - pro = u3j_site_kick(cor, sit_u); - u3t_on(noc_o); - return pro; -} - -/* _n_kale(): bail(exit) if not cell - */ -static inline u3_noun -_n_kale(u3_noun a) -{ - if ( c3n == u3du(a) ) { - u3m_bail(c3__exit); - } - return a; -} - -typedef struct { - u3n_prog* pog_u; - c3_w ip_w; -} burnframe; - -/* _n_burn(): pog: program - * bus: subject (TRANSFER) - * mov: -1 north, 1 south - * off: 0 north, -1 south - */ -static u3_noun -_n_burn(u3n_prog* pog_u, u3_noun bus, c3_ys mov, c3_ys off) -{ - - // Opcode jump table. Define X to select the opcode computed goto from - // OPCODES. -# define X(opcode, name, indirect_jump) indirect_jump - static void* lab[] = { OPCODES }; -# undef X - - u3j_site* sit_u; - u3j_rite* rit_u; - u3n_memo* mem_u; - c3_y *pog = pog_u->byc_u.ops_y; - c3_w sip_w, ip_w = 0; - u3_noun* top; - u3_noun x, o; - u3p(void) empty; - burnframe* fam; - - empty = u3R->cap_p; - _n_push(mov, off, bus); - -#ifdef U3_CPU_DEBUG - u3R->pro.nox_d += 1; -#endif -#ifdef VERBOSE_BYTECODE - #define BURN() fprintf(stderr, "%s ", opcode_names[pog[ip_w]]); goto *lab[pog[ip_w++]] -#else - #define BURN() goto *lab[pog[ip_w++]] -#endif - BURN(); - { - do_halt: // [product ...burnframes...] - x = _n_pep(mov, off); -#ifdef VERBOSE_BYTECODE - fprintf(stderr, "return\r\n"); -#endif - if ( empty == u3R->cap_p ) { - return x; - } - else { - fam = u3to(burnframe, u3R->cap_p) + off; - pog_u = fam->pog_u; - pog = pog_u->byc_u.ops_y; - ip_w = fam->ip_w; - - u3R->cap_p = u3of(burnframe, fam - (mov+off)); - _n_push(mov, off, x); -#ifdef VERBOSE_BYTECODE - _n_print_byc(pog, ip_w); -#endif - BURN(); - } - - do_bail: - u3m_bail(c3__exit); - return u3_none; - - do_copy: - top = _n_peek(off); - _n_push(mov, off, u3k(*top)); - BURN(); - - do_swap: - _n_swap(mov, off); - BURN(); - - do_toss: - _n_toss(mov, off); - BURN(); - - do_auto: // [tel bus hed] - x = _n_pep(mov, off); // [bus hed] - top = _n_swap(mov, off); // [hed bus] - *top = u3nc(*top, x); // [pro bus] - BURN(); - - do_ault: // [tel bus hed] - x = _n_pep(mov, off); // [bus hed] - _n_toss(mov, off); // [hed] - top = _n_peek(off); - *top = u3nc(*top, x); // [pro] - BURN(); - - do_snoc: // [hed tel] - x = _n_pep(mov, off); - top = _n_peek(off); - _n_push(mov, off, u3nc(x, u3k(*top))); - BURN(); - - do_snol: - x = _n_pep(mov, off); - top = _n_peek(off); - *top = u3nc(x, *top); - BURN(); - - do_head: - top = _n_peek(off); - _n_push(mov, off, u3k(u3h(_n_kale(*top)))); - BURN(); - - do_held: - top = _n_peek(off); - o = _n_kale(*top); - *top = u3k(u3h(o)); - u3z(o); - BURN(); - - do_tail: - top = _n_peek(off); - _n_push(mov, off, u3k(u3t(_n_kale(*top)))); - BURN(); - - do_tall: - top = _n_peek(off); - o = _n_kale(*top); - *top = u3k(u3t(o)); - u3z(o); - BURN(); - - do_fisk: - x = pog_u->lit_u.non[_n_resh(pog, &ip_w)]; - goto frag_in; - - do_fibk: - x = pog_u->lit_u.non[pog[ip_w++]]; - goto frag_in; - - do_fask: - x = _n_resh(pog, &ip_w); - goto frag_in; - - do_fabk: - x = pog[ip_w++]; - frag_in: - top = _n_peek(off); - _n_push(mov, off, u3k(u3x_at(x, *top))); - BURN(); - - do_fisl: - x = pog_u->lit_u.non[_n_resh(pog, &ip_w)]; - goto flag_in; - - do_fibl: - x = pog_u->lit_u.non[pog[ip_w++]]; - goto flag_in; - - do_fasl: - x = _n_resh(pog, &ip_w); - goto flag_in; - - do_fabl: - x = pog[ip_w++]; - flag_in: - top = _n_peek(off); - o = *top; - *top = u3k(u3x_at(x, o)); - u3z(o); - BURN(); - - do_lit0: - _n_push(mov, off, 0); - BURN(); - - do_lit1: - _n_push(mov, off, 1); - BURN(); - - do_litb: - _n_push(mov, off, pog[ip_w++]); - BURN(); - - do_lits: - _n_push(mov, off, _n_resh(pog, &ip_w)); - BURN(); - - do_libk: - _n_push(mov, off, u3k(pog_u->lit_u.non[pog[ip_w++]])); - BURN(); - - do_lisk: - _n_push(mov, off, u3k(pog_u->lit_u.non[_n_resh(pog, &ip_w)])); - BURN(); - - do_lil1: - x = 1; - goto lil_in; - - do_lilb: - x = pog[ip_w++]; - goto lil_in; - - do_lils: - x = _n_resh(pog, &ip_w); - goto lil_in; - - do_libl: - x = u3k(pog_u->lit_u.non[pog[ip_w++]]); - goto lil_in; - - do_lisl: - x = u3k(pog_u->lit_u.non[_n_resh(pog, &ip_w)]); - goto lil_in; - - do_lil0: - x = 0; - lil_in: - top = _n_peek(off); - u3z(*top); - *top = x; - BURN(); - - do_noct: // [fol old bus] - o = _n_pep(mov, off); // [old bus] - _n_toss(mov, off); // [bus] - goto nock_out; - - do_nolk: // [fol old bus] - o = _n_pep(mov, off); // [old bus] - _n_toss(mov, off); // [bus] - goto nock_in; - - do_nock: // [fol old bus] - o = _n_pep(mov, off); // [old bus] - _n_swap(mov, off); // [bus old] - nock_in: - x = _n_pep(mov, off); - fam = u3to(burnframe, u3R->cap_p) + off + mov; - u3R->cap_p = u3of(burnframe, fam - off); - fam->ip_w = ip_w; - fam->pog_u = pog_u; - _n_push(mov, off, x); - nock_out: - pog_u = _n_find(u3_nul, o); - pog = pog_u->byc_u.ops_y; - ip_w = 0; -#ifdef U3_CPU_DEBUG - u3R->pro.nox_d += 1; -#endif -#ifdef VERBOSE_BYTECODE - fprintf(stderr, "\r\nnock jump: %u\r\n", o); - _n_print_byc(pog, ip_w); -#endif - u3z(o); - BURN(); - - do_deep: - top = _n_peek(off); - o = *top; - *top = u3du(o); - u3z(o); - BURN(); - - do_bump: - top = _n_peek(off); - *top = u3i_vint(*top); - BURN(); - - do_sam0: - top = _n_peek(off); - if ( *top == 0 ) { - *top = c3y; - } - else { - u3z(*top); - *top = c3n; - } - BURN(); - - do_sam1: - top = _n_peek(off); - if ( *top == 1 ) { - *top = c3y; - } - else { - u3z(*top); - *top = c3n; - } - BURN(); - - do_samb: - top = _n_peek(off); - if ( *top == pog[ip_w++] ) { - *top = c3y; - } - else { - u3z(*top); - *top = c3n; - } - BURN(); - - do_sams: - top = _n_peek(off); - if ( *top == _n_resh(pog, &ip_w) ) { - *top = c3y; - } - else { - u3z(*top); - *top = c3n; - } - BURN(); - - do_sans: - x = pog_u->lit_u.non[_n_resh(pog, &ip_w)]; - goto samn_in; - do_sanb: - x = pog_u->lit_u.non[pog[ip_w++]]; - samn_in: - top = _n_peek(off); - o = *top; - *top = u3r_sing(o, x); - u3z(o); - BURN(); - - do_same: - x = _n_pep(mov, off); - _n_swap(mov, off); - goto same_in; - - do_salm: - x = _n_pep(mov, off); - _n_toss(mov, off); - goto same_in; - - same_in: - top = _n_peek(off); - o = *top; - *top = u3r_sing(x, o); - u3z(o); - u3z(x); - BURN(); - - do_samc: - top = _n_peek(off); - o = *top; - *top = u3r_sing(u3h(o), u3t(o)); - u3z(o); - BURN(); - - do_sbip: - sip_w = pog[ip_w++]; - ip_w += sip_w; - BURN(); - - do_sips: - sip_w = _n_resh(pog, &ip_w); - ip_w += sip_w; - BURN(); - - do_swip: - sip_w = _n_rewo(pog, &ip_w); - ip_w += sip_w; - BURN(); - - do_swin: - sip_w = _n_rewo(pog, &ip_w); - goto skin_in; - - do_sins: - sip_w = _n_resh(pog, &ip_w); - goto skin_in; - - do_sbin: - sip_w = pog[ip_w++]; - skin_in: - x = _n_pep(mov, off); - if ( c3n == x ) { - ip_w += sip_w; - } - else if ( c3y != x ) { - u3m_bail(c3__exit); - return u3_none; - } - BURN(); - - do_kics: - x = _n_resh(pog, &ip_w); - goto kick_in; - - do_kicb: - x = pog[ip_w++]; - kick_in: - sit_u = &(pog_u->cal_u.sit_u[x]); - top = _n_peek(off); - o = *top; - *top = _n_kick(o, sit_u); - if ( u3_none == *top ) { - _n_toss(mov, off); - - fam = u3to(burnframe, u3R->cap_p) + off + mov; - u3R->cap_p = u3of(burnframe, fam - off); - fam->ip_w = ip_w; - fam->pog_u = pog_u; - - pog_u = u3to(u3n_prog, sit_u->pog_p); - pog = pog_u->byc_u.ops_y; - ip_w = 0; -#ifdef U3_CPU_DEBUG - u3R->pro.nox_d += 1; -#endif -#ifdef VERBOSE_BYTECODE - fprintf(stderr, "\r\nhead kick jump: %u, sp: %p\r\n", u3r_at(sit_u->axe, cor), top); - _n_print_byc(pog, ip_w); -#endif - _n_push(mov, off, o); - } -#ifdef VERBOSE_BYTECODE - else { - fprintf(stderr, "head jet\r\n"); - } -#endif - BURN(); - - do_tics: - x = _n_resh(pog, &ip_w); - goto tick_in; - - do_ticb: - x = pog[ip_w++]; - tick_in: - sit_u = &(pog_u->cal_u.sit_u[x]); - top = _n_peek(off); - o = *top; - *top = _n_kick(o, sit_u); - if ( u3_none == *top ) { - *top = o; - pog_u = u3to(u3n_prog, sit_u->pog_p); - pog = pog_u->byc_u.ops_y; - ip_w = 0; -#ifdef U3_CPU_DEBUG - u3R->pro.nox_d += 1; -#endif -#ifdef VERBOSE_BYTECODE - fprintf(stderr, "\r\ntail kick jump: %u, sp: %p\r\n", u3x_at(sit_u->axe, o);, top); - _n_print_byc(pog, ip_w); -#endif - } -#ifdef VERBOSE_BYTECODE - else { - fprintf(stderr, "tail jet\r\n"); - } -#endif - BURN(); - - do_wils: // [gof bus ref] - o = _n_pep(mov,off); // [bus ref] - _n_toss(mov, off); // [ref] - top = _n_peek(off); - goto wish_in; - - do_wish: // [gof bus ref] - o = _n_pep(mov,off); // [bus ref] - top = _n_swap(mov, off); // [ref bus] - wish_in: - u3t_off(noc_o); - x = u3m_soft_esc(u3k(*top), u3k(o)); - u3t_on(noc_o); - - if ( c3n == u3du(x) ) { - u3m_bail(u3nc(1, o)); - return u3_none; - } - else if ( c3n == u3du(u3t(x)) ) { - u3t_push(u3nt(c3__hunk, *top, o)); - u3m_bail(c3__exit); - return u3_none; - } - else { - u3z(o); - u3z(*top); - *top = u3k(u3t(u3t(x))); - u3z(x); - BURN(); - } - - do_sush: - x = _n_resh(pog, &ip_w); - goto cush_in; - - do_bush: - x = pog[ip_w++]; - cush_in: - x = u3k(pog_u->lit_u.non[x]); - o = _n_pep(mov, off); - u3t_push(u3nc(x, o)); - BURN(); - - do_drop: - u3t_drop(); - BURN(); - - do_heck: - x = _n_pep(mov, off); - if ( c3y == u3ud(x) ) { - u3t_off(noc_o); - u3t_heck(x); - u3t_on(noc_o); - } - else { - u3z(x); - } - BURN(); - - do_slog: - x = _n_pep(mov, off); - if ( !(u3C.wag_w & u3o_quiet) ) { - u3t_off(noc_o); - u3t_slog(x); - u3t_on(noc_o); - } - else { - u3z(x); - } - BURN(); - - - do_sast: - x = _n_resh(pog, &ip_w); - goto fast_in; - - do_bast: - x = pog[ip_w++]; - goto fast_in; - - do_salt: - x = _n_resh(pog, &ip_w); - goto falt_in; - do_balt: - x = pog[ip_w++]; - falt_in: // [pro bus clu] - o = _n_pep(mov, off); // [bus clu] - _n_toss(mov, off); // [clu] - top = _n_peek(off); - goto fast_out; - - fast_in: // [pro bus clu] - o = _n_pep(mov, off); // [bus clu] - top = _n_swap(mov, off); // [clu bus] - fast_out: - rit_u = &(pog_u->reg_u.rit_u[x]); - u3t_off(noc_o); - u3j_rite_mine(rit_u, *top, u3k(o)); - u3t_on(noc_o); - *top = o; - BURN(); - - do_skis: - x = _n_resh(pog, &ip_w); - goto skim_in; - - do_skib: - x = pog[ip_w++]; - skim_in: - mem_u = &(pog_u->mem_u.sot_u[x]); - top = _n_peek(off); - x = u3k(*top); - goto skim_out; - - do_slis: - x = _n_resh(pog, &ip_w); - goto slim_in; - - do_slib: - x = pog[ip_w++]; - slim_in: - mem_u = &(pog_u->mem_u.sot_u[x]); - x = _n_pep(mov, off); - skim_out: - o = u3k(mem_u->key); - x = u3nc(x, o); - o = u3z_find_m(144 + c3__nock, x); - if ( u3_none == o ) { - _n_push(mov, off, x); - _n_push(mov, off, u3k(u3h(x))); - } - else { - ip_w += mem_u->sip_l; - _n_push(mov, off, o); - u3z(x); - } - BURN(); - - do_save: - x = _n_pep(mov, off); - top = _n_peek(off); - o = *top; - if ( &(u3H->rod_u) != u3R ) { - u3z_save_m(144 + c3__nock, o, x); - } - *top = x; - u3z(o); - BURN(); - - do_hilb: - x = pog[ip_w++]; - goto hilt_fore_in; - - do_hils: - x = _n_resh(pog, &ip_w); - hilt_fore_in: - x = u3k(pog_u->lit_u.non[x]); - top = _n_peek(off); // bus - x = _n_hilt_fore(x, *top, &o); - _n_push(mov, off, o); - _n_swap(mov, off); // bus - _n_push(mov, off, x); // shortcircuit if c3n - BURN(); - - do_hinb: - x = pog[ip_w++]; - goto hint_fore_in; - - do_hins: - x = _n_resh(pog, &ip_w); - hint_fore_in: // [clu bus] - x = u3k(pog_u->lit_u.non[x]); - o = _n_pep(mov, off); // [bus] - top = _n_peek(off); - x = _n_hint_fore(x, *top, &o); - _n_push(mov, off, o); // [tok bus] - _n_swap(mov, off); // [bus tok] - _n_push(mov, off, x); // [kip bus tok] - BURN(); - - do_hilk: // [pro bus tok] - x = _n_pep(mov, off); // [bus tok] - _n_swap(mov, off); // [tok bus] - o = _n_pep(mov, off); // [bus] - _n_push(mov, off, x); // [pro bus] - _n_hilt_hind(o, x); - BURN(); - - do_hill: // [pro tok] - top = _n_swap(mov, off); // [tok pro] - o = _n_pep(mov, off); // [pro] - top = _n_peek(off); - _n_hilt_hind(o, *top); - BURN(); - - do_hink: // [pro bus tok] - x = _n_pep(mov, off); // [bus tok] - _n_swap(mov, off); // [tok bus] - o = _n_pep(mov, off); // [bus] - _n_push(mov, off, x); // [pro bus] - _n_hint_hind(o, x); - BURN(); - - do_hinl: // [pro tok] - top = _n_swap(mov, off); // [tok pro] - o = _n_pep(mov, off); // [pro] - top = _n_peek(off); - _n_hint_hind(o, *top); - BURN(); - - do_kuth: - x = _n_pep(mov, off); - top = _n_swap(mov, off); - goto muth_in; - do_muth: - x = _n_pep(mov, off); - _n_toss(mov, off); - top = _n_peek(off); - muth_in: - o = *top; - *top = u3nc(x, u3k(u3t(o))); - u3z(o); - BURN(); - - do_kutt: - x = _n_pep(mov, off); - top = _n_swap(mov, off); - goto mutt_in; - do_mutt: - x = _n_pep(mov, off); - _n_toss(mov, off); - top = _n_peek(off); - mutt_in: - o = *top; - *top = u3nc(u3k(u3h(o)), x); - u3z(o); - BURN(); - - do_kusm: - x = _n_pep(mov, off); - top = _n_swap(mov, off); - goto musm_in; - do_musm: - x = _n_pep(mov, off); - _n_toss(mov, off); - top = _n_peek(off); - musm_in: - o = *top; - *top = u3nt(u3k(u3h(o)), x, u3k(u3t(u3t(o)))); - u3z(o); - BURN(); - - do_kitb: - x = pog_u->lit_u.non[pog[ip_w++]]; - goto kut_in; - - do_kits: - x = pog_u->lit_u.non[_n_resh(pog, &ip_w)]; - goto kut_in; - - do_kuts: - x = _n_resh(pog, &ip_w); - goto kut_in; - - do_kutb: - x = pog[ip_w++]; - kut_in: - o = _n_pep(mov, off); - top = _n_swap(mov, off); - goto edit_in; - - do_mitb: - x = pog_u->lit_u.non[pog[ip_w++]]; - goto mut_in; - - do_mits: - x = pog_u->lit_u.non[_n_resh(pog, &ip_w)]; - goto mut_in; - - do_muts: - x = _n_resh(pog, &ip_w); - goto mut_in; - - do_mutb: - x = pog[ip_w++]; - mut_in: - o = _n_pep(mov, off); - _n_toss(mov, off); - top = _n_peek(off); - edit_in: - *top = u3i_edit(*top, x, o); - BURN(); - } -} - -/* _n_burn_out(): execute u3n_prog with bus as subject. - */ -static u3_noun -_n_burn_out(u3_noun bus, u3n_prog* pog_u) -{ - c3_ys mov, off; - if ( c3y == u3a_is_north(u3R) ) { - mov = -1; - off = 0; - } - else { - mov = 1; - off = -1; - } - return _n_burn(pog_u, bus, mov, off); -} - -/* u3n_burn(): execute u3n_prog with bus as subject. - */ -u3_noun -u3n_burn(u3p(u3n_prog) pog_p, u3_noun bus) -{ - u3_noun pro; - u3t_on(noc_o); - pro = _n_burn_out(bus, u3to(u3n_prog, pog_p)); - u3t_off(noc_o); - return pro; -} - -/* _n_burn_on(): produce .*(bus fol) with bytecode interpreter - */ -static u3_noun -_n_burn_on(u3_noun bus, u3_noun fol) -{ - u3n_prog* pog_u = _n_find(u3_nul, fol); - - u3z(fol); - return _n_burn_out(bus, pog_u); -} - -/* u3n_nock_on(): produce .*(bus fol). Do not virtualize. -*/ -u3_noun -u3n_nock_on(u3_noun bus, u3_noun fol) -{ - u3_noun pro; - - u3t_on(noc_o); -#if 0 - pro = _n_nock_on(bus, fol); -#else - pro = _n_burn_on(bus, fol); -#endif - u3t_off(noc_o); - - return pro; -} - -/* _n_prog_free(): free memory retained by program -*/ -static void -_n_prog_free(u3n_prog* pog_u) -{ - c3_w i_w; - - for ( i_w = 0; i_w < pog_u->lit_u.len_w; ++i_w ) { - u3z(pog_u->lit_u.non[i_w]); - } - - for ( i_w = 0; i_w < pog_u->mem_u.len_w; ++i_w ) { - u3z(pog_u->mem_u.sot_u[i_w].key); - } - - for ( i_w = 0; i_w < pog_u->cal_u.len_w; ++i_w ) { - u3j_site_lose(&(pog_u->cal_u.sit_u[i_w])); - } - - for ( i_w = 0; i_w < pog_u->reg_u.len_w; ++i_w ) { - u3j_rite_lose(&(pog_u->reg_u.rit_u[i_w])); - } - - u3a_free(pog_u); -} - -/* _cn_take_prog_dat(): take references from junior u3n_prog. -*/ -static void -_cn_take_prog_dat(u3n_prog* dst_u, u3n_prog* src_u) -{ - c3_w i_w; - - for ( i_w = 0; i_w < src_u->lit_u.len_w; ++i_w ) { - dst_u->lit_u.non[i_w] = u3a_take(src_u->lit_u.non[i_w]); - } - - for ( i_w = 0; i_w < src_u->mem_u.len_w; ++i_w ) { - u3n_memo* emo_u = &(src_u->mem_u.sot_u[i_w]); - u3n_memo* ome_u = &(dst_u->mem_u.sot_u[i_w]); - ome_u->sip_l = emo_u->sip_l; - ome_u->key = u3a_take(emo_u->key); - } - - for ( i_w = 0; i_w < src_u->cal_u.len_w; ++i_w ) { - u3j_site_take(&(dst_u->cal_u.sit_u[i_w]), - &(src_u->cal_u.sit_u[i_w])); - } - - for ( i_w = 0; i_w < src_u->reg_u.len_w; ++i_w ) { - u3j_rite_take(&(dst_u->reg_u.rit_u[i_w]), - &(src_u->reg_u.rit_u[i_w])); - } -} - -/* _cn_take_prog_cb(): u3h_take_with cb for taking junior u3n_prog's. -*/ -static u3p(u3n_prog) -_cn_take_prog_cb(u3p(u3n_prog) pog_p) -{ - u3n_prog* pog_u = u3to(u3n_prog, pog_p); - u3n_prog* gop_u; - - if ( c3y == pog_u->byc_u.own_o ) { - gop_u = _n_prog_new(pog_u->byc_u.len_w, - pog_u->cal_u.len_w, - pog_u->reg_u.len_w, - pog_u->lit_u.len_w, - pog_u->mem_u.len_w); - memcpy(gop_u->byc_u.ops_y, pog_u->byc_u.ops_y, pog_u->byc_u.len_w); - } - else { - gop_u = _n_prog_old(pog_u); - } - - _cn_take_prog_dat(gop_u, pog_u); - // _n_prog_take_dat(gop_u, pog_u, c3n); - - return u3of(u3n_prog, gop_u); -} - -/* u3n_take(): copy junior bytecode state. -*/ -u3p(u3h_root) -u3n_take(u3p(u3h_root) har_p) -{ - return u3h_take_with(har_p, _cn_take_prog_cb); -} - -/* _cn_merge_prog_dat(): copy references from src_u u3n_prog to dst_u. -*/ -static void -_cn_merge_prog_dat(u3n_prog* dst_u, u3n_prog* src_u) -{ - c3_w i_w; - - for ( i_w = 0; i_w < src_u->lit_u.len_w; ++i_w ) { - u3z(dst_u->lit_u.non[i_w]); - dst_u->lit_u.non[i_w] = src_u->lit_u.non[i_w]; - } - - for ( i_w = 0; i_w < src_u->mem_u.len_w; ++i_w ) { - u3n_memo* emo_u = &(dst_u->mem_u.sot_u[i_w]); - u3n_memo* ome_u = &(src_u->mem_u.sot_u[i_w]); - u3z(emo_u->key); - emo_u->sip_l = ome_u->sip_l; - emo_u->key = ome_u->key; - } - - for ( i_w = 0; i_w < src_u->cal_u.len_w; ++i_w ) { - u3j_site_merge(&(dst_u->cal_u.sit_u[i_w]), - &(src_u->cal_u.sit_u[i_w])); - } - - for ( i_w = 0; i_w < src_u->reg_u.len_w; ++i_w ) { - u3j_rite_merge(&(dst_u->reg_u.rit_u[i_w]), - &(src_u->reg_u.rit_u[i_w])); - } -} - -/* _cn_merge_prog_cb(): u3h_walk_with cb for integrating taken u3n_prog's. -*/ -static void -_cn_merge_prog_cb(u3_noun kev, void* wit) -{ - u3p(u3h_root) har_p = *(u3p(u3h_root)*)wit; - u3n_prog* pog_u; - u3_weak got; - u3_noun key; - u3p(u3n_prog) pog_p; - u3x_cell(kev, &key, &pog_p); - - pog_u = u3to(u3n_prog, pog_p); - got = u3h_git(har_p, key); - - if ( u3_none != got ) { - u3n_prog* sep_u = u3to(u3n_prog, got); - _cn_merge_prog_dat(sep_u, pog_u); - u3a_free(pog_u); - pog_u = sep_u; - } - - u3h_put(har_p, key, u3of(u3n_prog, pog_u)); -} - -/* u3n_reap(): promote bytecode state. -*/ -void -u3n_reap(u3p(u3h_root) har_p) -{ - u3h_walk_with(har_p, _cn_merge_prog_cb, &u3R->byc.har_p); - // NB *not* u3n_free, _cn_merge_prog_cb() transfers u3n_prog's - u3h_free(har_p); -} - -/* _n_ream(): ream program call sites -*/ -void -_n_ream(u3_noun kev) -{ - c3_w i_w; - u3n_prog* pog_u = u3to(u3n_prog, u3t(kev)); - - // fix up pointers for loom portability - pog_u->byc_u.ops_y = (c3_y*) _n_prog_dat(pog_u); - pog_u->lit_u.non = (u3_noun*) (pog_u->byc_u.ops_y + pog_u->byc_u.len_w); - pog_u->mem_u.sot_u = (u3n_memo*) (pog_u->lit_u.non + pog_u->lit_u.len_w); - pog_u->cal_u.sit_u = (u3j_site*) (pog_u->mem_u.sot_u + pog_u->mem_u.len_w); - pog_u->reg_u.rit_u = (u3j_rite*) (pog_u->cal_u.sit_u + pog_u->cal_u.len_w); - - for ( i_w = 0; i_w < pog_u->cal_u.len_w; ++i_w ) { - u3j_site_ream(&(pog_u->cal_u.sit_u[i_w])); - } -} - -/* u3n_ream(): refresh after restoring from checkpoint. -*/ -void -u3n_ream() -{ - c3_assert(u3R == &(u3H->rod_u)); - u3h_walk(u3R->byc.har_p, _n_ream); -} - -/* _n_prog_mark(): mark program for gc. -*/ -static c3_w -_n_prog_mark(u3n_prog* pog_u) -{ - c3_w i_w, tot_w = u3a_mark_mptr(pog_u); - - for ( i_w = 0; i_w < pog_u->lit_u.len_w; ++i_w ) { - tot_w += u3a_mark_noun(pog_u->lit_u.non[i_w]); - } - - for ( i_w = 0; i_w < pog_u->mem_u.len_w; ++i_w ) { - tot_w += u3a_mark_noun(pog_u->mem_u.sot_u[i_w].key); - } - - for ( i_w = 0; i_w < pog_u->cal_u.len_w; ++i_w ) { - tot_w += u3j_site_mark(&(pog_u->cal_u.sit_u[i_w])); - } - - for ( i_w = 0; i_w < pog_u->reg_u.len_w; ++i_w ) { - tot_w += u3j_rite_mark(&(pog_u->reg_u.rit_u[i_w])); - } - - return tot_w; -} - -/* _n_bam(): u3h_walk_with helper for u3n_mark - */ -static void -_n_bam(u3_noun kev, void* dat) -{ - c3_w* bam_w = dat; - u3n_prog* pog = u3to(u3n_prog, u3t(kev)); - *bam_w += _n_prog_mark(pog); -} - -/* u3n_mark(): mark the bytecode cache for gc. - */ -c3_w -u3n_mark(FILE* fil_u) -{ - c3_w bam_w = 0, har_w = 0; - u3p(u3h_root) har_p = u3R->byc.har_p; - u3h_walk_with(har_p, _n_bam, &bam_w); - - bam_w = u3a_maid(fil_u, " bytecode programs", bam_w); - har_w = u3a_maid(fil_u, " bytecode cache", u3h_mark(har_p)); - return u3a_maid(fil_u, "total nock stuff", bam_w + har_w); -} - -/* u3n_reclaim(): clear ad-hoc persistent caches to reclaim memory. -*/ -void -u3n_reclaim(void) -{ - // clear the bytecode cache - // - // We can't just u3h_free() -- the value is a post to a u3n_prog. - // Note that the hank cache *must* also be freed (in u3j_reclaim()) - // - u3n_free(); - u3R->byc.har_p = u3h_new(); -} - -/* u3n_rewrite_compact(): rewrite the bytecode cache for compaction. - * - * NB: u3R->byc.har_p *must* be cleared (currently via u3n_reclaim above), - * since it contains things that look like nouns but aren't. - * Specifically, it contains "cells" where the tail is a - * pointer to a u3a_malloc'ed block that contains loom pointers. - * - * You should be able to walk this with u3h_walk and rewrite the - * pointers, but you need to be careful to handle that u3a_malloc - * pointers can't be turned into a box by stepping back two words. You - * must step back one word to get the padding, step then step back that - * many more words (plus one?). - */ -void -u3n_rewrite_compact() -{ - u3h_rewrite(u3R->byc.har_p); - u3R->byc.har_p = u3a_rewritten(u3R->byc.har_p); -} - - -/* _n_feb(): u3h_walk helper for u3n_free - */ -static void -_n_feb(u3_noun kev) -{ - _n_prog_free(u3to(u3n_prog, u3t(kev))); -} - -/* u3n_free(): free bytecode cache - */ -void -u3n_free() -{ - u3p(u3h_root) har_p = u3R->byc.har_p; - u3h_walk(har_p, _n_feb); - u3h_free(har_p); -} - -/* u3n_kick_on(): fire `gat` without changing the sample. -*/ -u3_noun -u3n_kick_on(u3_noun gat) -{ - return u3j_kink(gat, 2); -} - -c3_w exc_w; - -/* u3n_slam_on(): produce (gat sam). -*/ -u3_noun -u3n_slam_on(u3_noun gat, u3_noun sam) -{ - u3_noun cor = u3nc(u3k(u3h(gat)), u3nc(sam, u3k(u3t(u3t(gat))))); - -#if 0 - if ( &u3H->rod_u == u3R ) { - if ( exc_w == 1 ) { - c3_assert(0); - } - exc_w++; - } -#endif - u3z(gat); - return u3n_kick_on(cor); -} - -/* u3n_nock_et(): produce .*(bus fol), as ++toon, in namespace. -*/ -u3_noun -u3n_nock_et(u3_noun gul, u3_noun bus, u3_noun fol) -{ - return u3m_soft_run(gul, u3n_nock_on, bus, fol); -} - -/* u3n_slam_et(): produce (gat sam), as ++toon, in namespace. -*/ -u3_noun -u3n_slam_et(u3_noun gul, u3_noun gat, u3_noun sam) -{ - return u3m_soft_run(gul, u3n_slam_on, gat, sam); -} - -/* u3n_nock_an(): as slam_in(), but with empty fly. -*/ -u3_noun -u3n_nock_an(u3_noun bus, u3_noun fol) -{ - u3_noun gul = u3nt(u3nt(1, 0, 0), 0, 0); // |=(a/{* *} ~) - - return u3n_nock_et(gul, bus, fol); -} diff --git a/pkg/urbit/noun/retrieve.c b/pkg/urbit/noun/retrieve.c deleted file mode 100644 index 2a09ccd0e..000000000 --- a/pkg/urbit/noun/retrieve.c +++ /dev/null @@ -1,1797 +0,0 @@ -/* g/r.c -** -*/ -#include "all.h" -#include - -/* _frag_word(): fast fragment/branch prediction for top word. -*/ -static u3_weak -_frag_word(c3_w a_w, u3_noun b) -{ - c3_assert(0 != a_w); - - { - c3_w dep_w = u3x_dep(a_w); - - while ( dep_w ) { - if ( c3n == u3a_is_cell(b) ) { - return u3_none; - } - else { - u3a_cell* b_u = u3a_to_ptr(b); - - b = *(((u3_noun*)&(b_u->hed)) + (1 & (a_w >> (dep_w - 1)))); - dep_w--; - } - } - return b; - } -} - -/* _frag_deep(): fast fragment/branch for deep words. -*/ -static u3_weak -_frag_deep(c3_w a_w, u3_noun b) -{ - c3_w dep_w = 32; - - while ( dep_w ) { - if ( c3n == u3a_is_cell(b) ) { - return u3_none; - } - else { - u3a_cell* b_u = u3a_to_ptr(b); - - b = *(((u3_noun*)&(b_u->hed)) + (1 & (a_w >> (dep_w - 1)))); - dep_w--; - } - } - return b; -} - -/* u3r_at(): -** -** Return fragment (a) of (b), or u3_none if not applicable. -*/ -u3_weak -u3r_at(u3_atom a, u3_noun b) -{ - c3_assert(u3_none != a); - c3_assert(u3_none != b); - - u3t_on(far_o); - - if ( 0 == a ) { - u3t_off(far_o); - return u3_none; - } - - if ( _(u3a_is_cat(a)) ) { - u3t_off(far_o); - return _frag_word(a, b); - } - else { - if ( !_(u3a_is_pug(a)) ) { - u3t_off(far_o); - return u3_none; - } - else { - u3a_atom* a_u = u3a_to_ptr(a); - c3_w len_w = a_u->len_w; - - b = _frag_word(a_u->buf_w[len_w - 1], b); - len_w -= 1; - - if ( u3_none == b ) { - u3t_off(far_o); - return b; - } - - while ( len_w ) { - b = _frag_deep(a_u->buf_w[len_w - 1], b); - - if ( u3_none == b ) { - u3t_off(far_o); - - return b; - } else { - len_w--; - } - } - u3t_off(far_o); - - return b; - } - } -} - -/* u3r_mean(): -** -** Attempt to deconstruct `a` by axis, noun pairs; 0 terminates. -** Axes must be sorted in tree order. -*/ - struct _mean_pair { - c3_w axe_w; - u3_noun* som; - }; - - static c3_w - _mean_cut(c3_w len_w, - struct _mean_pair* prs_m) - { - c3_w i_w, cut_t, cut_w; - - cut_t = 0; - cut_w = 0; - for ( i_w = 0; i_w < len_w; i_w++ ) { - c3_w axe_w = prs_m[i_w].axe_w; - - if ( (cut_t == 0) && (3 == u3x_cap(axe_w)) ) { - cut_t = 1; - cut_w = i_w; - } - prs_m[i_w].axe_w = u3x_mas(axe_w); - } - return cut_t ? cut_w : i_w; - } - - static c3_o - _mean_extract(u3_noun som, - c3_w len_w, - struct _mean_pair* prs_m) - { - if ( len_w == 0 ) { - return c3y; - } - else if ( (len_w == 1) && (1 == prs_m[0].axe_w) ) { - *prs_m->som = som; - return c3y; - } - else { - if ( c3n == u3a_is_cell(som) ) { - return c3n; - } else { - c3_w cut_w = _mean_cut(len_w, prs_m); - - return c3a - (_mean_extract(u3a_h(som), cut_w, prs_m), - _mean_extract(u3a_t(som), (len_w - cut_w), (prs_m + cut_w))); - } - } - } - -c3_o -u3r_vmean(u3_noun som, va_list ap) -{ - va_list aq; - c3_w len_w; - struct _mean_pair* prs_m; - - c3_assert(u3_none != som); - - // traverse copy of va_list for alloca - // - va_copy(aq, ap); - len_w = 0; - - while ( 1 ) { - if ( 0 == va_arg(aq, c3_w) ) { - break; - } - va_arg(aq, u3_noun*); - len_w++; - } - - va_end(aq); - - c3_assert( 0 != len_w ); - prs_m = alloca(len_w * sizeof(struct _mean_pair)); - - // traverse va_list and extract args - // - { - c3_w i_w; - - for ( i_w = 0; i_w < len_w; i_w++ ) { - prs_m[i_w].axe_w = va_arg(ap, c3_w); - prs_m[i_w].som = va_arg(ap, u3_noun*); - } - - va_end(ap); - } - - // extract axis from som - // - return _mean_extract(som, len_w, prs_m); -} - -c3_o -u3r_mean(u3_noun som, ...) -{ - c3_o ret_o; - va_list ap; - - va_start(ap, som); - ret_o = u3r_vmean(som, ap); - va_end(ap); - - return ret_o; -} - -// stack frame for tracking noun comparison and unification -// -// we always compare arbitrary nouns in a none-frame. -// when we compare two cells, we change the none-frame to a head-frame -// and push a new none-frame for their heads. if the heads are equal, -// we get the cells from the head-frame and unify their head pointers. -// then, we convert the head-frame to a tail-frame and repeat with -// the tails, mutatis mutandis. -// -// in Hoon, this structure would be: -// -// $% [%none a=* b=*] -// [%head a=^ b=^] -// [%tail a=^ b=^] -// == -// -#define SING_NONE 0 -#define SING_HEAD 1 -#define SING_TAIL 2 - -typedef struct { - c3_y sat_y; - u3_noun a; - u3_noun b; -} eqframe; - -/* _cr_sing_push(): push a new stack frame, initialized as SING_NONE. -*/ -static inline eqframe* -_cr_sing_push(u3a_pile* pil_u, u3_noun a, u3_noun b) -{ - eqframe* fam_u = u3a_push(pil_u); - fam_u->sat_y = SING_NONE; - fam_u->a = a; - fam_u->b = b; - return fam_u; -} - -/* _cr_sing_mug(): short-circuit comparison if mugs are present and not equal. -*/ -static inline c3_o -_cr_sing_mug(u3a_noun* a_u, u3a_noun* b_u) -{ - // XX add debug assertions that both mugs are 31-bit - // (ie, not u3a_take() relocation references) - // - if ( a_u->mug_w && b_u->mug_w && (a_u->mug_w != b_u->mug_w) ) { - return c3n; - } - - return c3y; -} - -/* _cr_sing_atom(): check if atom [a] is indirect and equal to noun [b] -*/ -static inline c3_o -_cr_sing_atom(u3_atom a, u3_noun b) -{ - // [a] is an atom, not pointer-equal to noun [b]. - // if they're not both indirect atoms, they can't be equal. - // - if ( (c3n == u3a_is_pug(a)) - || (c3n == u3a_is_pug(b)) ) - { - return c3n; - } - else { - u3a_atom* a_u = u3a_to_ptr(a); - u3a_atom* b_u = u3a_to_ptr(b); - - // [a] and [b] are not equal if their mugs are present and not equal. - // - if ( c3n == _cr_sing_mug((u3a_noun*)a_u, (u3a_noun*)b_u) ) { - return c3n; - } - else { - c3_w a_w = a_u->len_w; - c3_w b_w = b_u->len_w; - - // [a] and [b] are not equal if their lengths are not equal - // - if ( a_w != b_w ) { - return c3n; - } - else { - c3_w i_w; - - // XX memcmp - // - for ( i_w = 0; i_w < a_w; i_w++ ) { - if ( a_u->buf_w[i_w] != b_u->buf_w[i_w] ) { - return c3n; - } - } - } - } - } - - return c3y; -} - -/* _cr_sing_cape_test(): check for previous comparison of [a] and [b]. -*/ -static inline c3_o -_cr_sing_cape_test(u3p(u3h_root) har_p, u3_noun a, u3_noun b) -{ - u3_noun key = u3nc(u3a_to_off(a), u3a_to_off(b)); - u3_noun val; - - u3t_off(euq_o); - val = u3h_git(har_p, key); - u3t_on(euq_o); - - u3z(key); - return ( u3_none != val ) ? c3y : c3n; -} - -/* _cr_sing_cape_keep(): store [a] and [b] to short-circuit subsequent tests. -** NB: [a] and [b] (which MUST be equal nouns) -** are cons'd as offsets (direct atoms) to avoid refcount churn. -*/ -static inline void -_cr_sing_cape_keep(u3p(u3h_root) har_p, u3_noun a, u3_noun b) -{ - // only store if [a] and [b] are copies of each other - // - if ( a != b ) { - u3_noun key = u3nc(u3a_to_off(a), u3a_to_off(b)); - u3t_off(euq_o); - u3h_put(har_p, key, c3y); - u3t_on(euq_o); - u3z(key); - } -} - -/* _cr_sing_cape(): unifying equality with comparison deduplication - * (tightly coupled to _cr_sing) - */ -static c3_o -_cr_sing_cape(u3a_pile* pil_u, u3p(u3h_root) har_p) -{ - eqframe* fam_u = u3a_peek(pil_u); - u3_noun a, b, key; - u3_weak got; - u3a_cell* a_u; - u3a_cell* b_u; - - // loop while arguments remain on the stack - // - do { - a = fam_u->a; - b = fam_u->b; - - switch ( fam_u->sat_y ) { - - // [a] and [b] are arbitrary nouns - // - case SING_NONE: { - if ( a == b ) { - break; - } - else if ( c3y == u3a_is_atom(a) ) { - if ( c3n == _cr_sing_atom(a, b) ) { - return c3n; - } - else { - break; - } - } - else if ( c3y == u3a_is_atom(b) ) { - return c3n; - } - // [a] and [b] are cells - // - else { - a_u = u3a_to_ptr(a); - b_u = u3a_to_ptr(b); - - // short-circuiting mug check - // - if ( c3n == _cr_sing_mug((u3a_noun*)a_u, (u3a_noun*)b_u) ) { - return c3n; - } - // short-circuiting re-comparison check - // - else if ( c3y == _cr_sing_cape_test(har_p, a, b) ) { - fam_u = u3a_pop(pil_u); - continue; - } - // upgrade none-frame to head-frame, check heads - // - else { - fam_u->sat_y = SING_HEAD; - fam_u = _cr_sing_push(pil_u, a_u->hed, b_u->hed); - continue; - } - } - } break; - - // cells [a] and [b] have equal heads - // - case SING_HEAD: { - a_u = u3a_to_ptr(a); - b_u = u3a_to_ptr(b); - u3a_wed(&(a_u->hed), &(b_u->hed)); - - // upgrade head-frame to tail-frame, check tails - // - fam_u->sat_y = SING_TAIL; - fam_u = _cr_sing_push(pil_u, a_u->tel, b_u->tel); - continue; - } - - // cells [a] and [b] are equal - // - case SING_TAIL: { - a_u = u3a_to_ptr(a); - b_u = u3a_to_ptr(b); - u3a_wed(&(a_u->tel), &(b_u->tel)); - } break; - - default: { - c3_assert(0); - } break; - } - - // track equal pairs to short-circuit possible (re-)comparison - // - _cr_sing_cape_keep(har_p, a, b); - - fam_u = u3a_pop(pil_u); - } - while ( c3n == u3a_pile_done(pil_u) ); - - return c3y; -} - -/* _cr_sing(): unifying equality. -*/ -static c3_o -_cr_sing(u3_noun a, u3_noun b) -{ - c3_s ovr_s = 0; - u3a_cell* a_u; - u3a_cell* b_u; - eqframe* fam_u; - u3a_pile pil_u; - - // initialize stack control, push arguments onto the stack (none-frame) - // - u3a_pile_prep(&pil_u, sizeof(eqframe)); - fam_u = _cr_sing_push(&pil_u, a, b); - - // loop while arguments are on the stack - // - while ( c3n == u3a_pile_done(&pil_u) ) { - a = fam_u->a; - b = fam_u->b; - - switch ( fam_u->sat_y ) { - - // [a] and [b] are arbitrary nouns - // - case SING_NONE: { - if ( a == b ) { - break; - } - else if ( c3y == u3a_is_atom(a) ) { - if ( c3n == _cr_sing_atom(a, b) ) { - u3R->cap_p = pil_u.top_p; - return c3n; - } - else { - break; - } - } - else if ( c3y == u3a_is_atom(b) ) { - u3R->cap_p = pil_u.top_p; - return c3n; - } - // [a] and [b] are cells - // - else { - a_u = u3a_to_ptr(a); - b_u = u3a_to_ptr(b); - - // short-circuiting mug check - // - if ( c3n == _cr_sing_mug((u3a_noun*)a_u, (u3a_noun*)b_u) ) { - u3R->cap_p = pil_u.top_p; - return c3n; - } - // upgrade none-frame to head-frame, check heads - // - else { - fam_u->sat_y = SING_HEAD; - fam_u = _cr_sing_push(&pil_u, a_u->hed, b_u->hed); - continue; - } - } - } break; - - // cells [a] and [b] have equal heads - // - case SING_HEAD: { - a_u = u3a_to_ptr(a); - b_u = u3a_to_ptr(b); - u3a_wed(&(a_u->hed), &(b_u->hed)); - - // upgrade head-frame to tail-frame, check tails - // - fam_u->sat_y = SING_TAIL; - fam_u = _cr_sing_push(&pil_u, a_u->tel, b_u->tel); - continue; - } - - // cells [a] and [b] are equal - // - case SING_TAIL: { - a_u = u3a_to_ptr(a); - b_u = u3a_to_ptr(b); - u3a_wed(&(a_u->tel), &(b_u->tel)); - } break; - - default: { - c3_assert(0); - } break; - } - - // [ovr_s] counts comparisons, if it overflows, we've likely hit - // a pathological case (highly duplicated tree), so we de-duplicate - // subsequent comparisons by maintaining a set of equal pairs. - // - if ( 0 == ++ovr_s ) { - u3p(u3h_root) har_p = u3h_new(); - c3_o ret_o = _cr_sing_cape(&pil_u, har_p); - u3h_free(har_p); - u3R->cap_p = pil_u.top_p; - return ret_o; - } - - fam_u = u3a_pop(&pil_u); - } - - return c3y; -} - -/* u3r_sing(): Yes iff [a] and [b] are the same noun. -*/ -c3_o -u3r_sing(u3_noun a, u3_noun b) -{ - c3_o ret_o; - u3t_on(euq_o); - ret_o = _cr_sing(a, b); - u3t_off(euq_o); - return ret_o; -} - -c3_o -u3r_fing(u3_noun a, - u3_noun b) -{ - return (a == b) ? c3y : c3n; -} - -/* u3r_sing_cell(): -** -** Yes iff `[p q]` and `b` are the same noun. -*/ -c3_o -u3r_sing_cell(u3_noun p, - u3_noun q, - u3_noun b) -{ - return c3a(_(u3a_is_cell(b)), - c3a(u3r_sing(p, u3a_h(b)), - u3r_sing(q, u3a_t(b)))); -} -c3_o -u3r_fing_cell(u3_noun p, - u3_noun q, - u3_noun b) -{ - return c3a(_(u3a_is_cell(b)), - c3a(u3r_fing(p, u3a_h(b)), - u3r_fing(q, u3a_t(b)))); -} - -/* u3r_sing_mixt(): -** -** Yes iff `[p q]` and `b` are the same noun. -*/ -c3_o -u3r_sing_mixt(const c3_c* p_c, - u3_noun q, - u3_noun b) -{ - return c3a(_(u3a_is_cell(b)), - c3a(u3r_sing_c(p_c, u3a_h(b)), - u3r_sing(q, u3a_t(b)))); -} -c3_o -u3r_fing_mixt(const c3_c* p_c, - u3_noun q, - u3_noun b) -{ - return c3a(_(u3a_is_cell(b)), - c3a(u3r_sing_c(p_c, u3a_h(b)), - u3r_fing(q, u3a_t(b)))); -} - -/* u3r_sing_trel(): -** -** Yes iff `[p q r]` and `b` are the same noun. -*/ -c3_o -u3r_sing_trel(u3_noun p, - u3_noun q, - u3_noun r, - u3_noun b) -{ - return c3a(_(u3a_is_cell(b)), - c3a(u3r_sing(p, u3a_h(b)), - u3r_sing_cell(q, r, u3a_t(b)))); -} -c3_o -u3r_fing_trel(u3_noun p, - u3_noun q, - u3_noun r, - u3_noun b) -{ - return c3a(_(u3a_is_cell(b)), - c3a(u3r_fing(p, u3a_h(b)), - u3r_fing_cell(q, r, u3a_t(b)))); -} - -/* u3r_sing_qual(): -** -** Yes iff `[p q r]` and `b` are the same noun. -*/ -c3_o -u3r_sing_qual(u3_noun p, - u3_noun q, - u3_noun r, - u3_noun s, - u3_noun b) -{ - return c3a(_(u3a_is_cell(b)), - c3a(u3r_sing(p, u3a_h(b)), - u3r_sing_trel(q, r, s, u3a_t(b)))); -} -c3_o -u3r_fing_qual(u3_noun p, - u3_noun q, - u3_noun r, - u3_noun s, - u3_noun b) -{ - return c3a(_(u3a_is_cell(b)), - c3a(u3r_fing(p, u3a_h(b)), - u3r_fing_trel(q, r, s, u3a_t(b)))); -} - -/* u3r_nord(): -** -** Return 0, 1 or 2 if `a` is below, equal to, or above `b`. -*/ -u3_atom -u3r_nord(u3_noun a, - u3_noun b) -{ - c3_assert(u3_none != a); - c3_assert(u3_none != b); - - if ( a == b ) { - return 1; - } - else { - if ( _(u3a_is_atom(a)) ) { - if ( !_(u3a_is_atom(b)) ) { - return 0; - } else { - if ( _(u3a_is_cat(a)) ) { - if ( _(u3a_is_cat(b)) ) { - return (a < b) ? 0 : 2; - } - else return 0; - } - else if ( _(u3a_is_cat(b)) ) { - return 2; - } - else { - u3a_atom* a_u = u3a_to_ptr(a); - u3a_atom* b_u = u3a_to_ptr(b); - - c3_w w_rez = a_u->len_w; - c3_w w_mox = b_u->len_w; - - if ( w_rez != w_mox ) { - return (w_rez < w_mox) ? 0 : 2; - } - else { - c3_w i_w; - - for ( i_w = 0; i_w < w_rez; i_w++ ) { - c3_w ai_w = a_u->buf_w[i_w]; - c3_w bi_w = b_u->buf_w[i_w]; - - if ( ai_w != bi_w ) { - return (ai_w < bi_w) ? 0 : 2; - } - } - return 1; - } - } - } - } else { - if ( _(u3a_is_atom(b)) ) { - return 2; - } else { - u3_atom c = u3r_nord(u3a_h(a), u3a_h(b)); - - if ( 1 == c ) { - return u3r_nord(u3a_t(a), u3a_t(b)); - } else { - return c; - } - } - } - } -} - -/* u3r_sing_c(): cord/C-string value equivalence. -*/ -c3_o -u3r_sing_c(const c3_c* a_c, - u3_noun b) -{ - c3_assert(u3_none != b); - - if ( !_(u3a_is_atom(b)) ) { - return c3n; - } - else { - c3_w w_sof = strlen(a_c); - c3_w i_w; - - if ( w_sof != u3r_met(3, b) ) { - return c3n; - } - for ( i_w = 0; i_w < w_sof; i_w++ ) { - if ( u3r_byte(i_w, b) != a_c[i_w] ) { - return c3n; - } - } - return c3y; - } -} - -/* u3r_bush(): -** -** Factor [a] as a bush [b.[p q] c]. -*/ -c3_o -u3r_bush(u3_noun a, - u3_noun* b, - u3_noun* c) -{ - c3_assert(u3_none != a); - - if ( _(u3a_is_atom(a)) ) { - return c3n; - } - else { - *b = u3a_h(a); - - if ( _(u3a_is_atom(*b)) ) { - return c3n; - } else { - *c = u3a_t(a); - return c3y; - } - } -} - -/* u3r_bite(): retrieve/default $bloq and $step from $bite. -*/ -c3_o -u3r_bite(u3_noun bite, u3_atom* bloq, u3_atom *step) -{ - u3_noun hed, tal; - - if ( c3n == u3r_cell(bite, &hed, &tal) ) { - *bloq = bite; - *step = 1; - return c3y; - } - else if ( (c3n == u3a_is_atom(hed)) - || (c3n == u3a_is_atom(tal)) ) - { - return c3n; - } - else { - *bloq = hed; - *step = tal; - return c3y; - } -} - -/* u3r_cell(): -** -** Factor (a) as a cell (b c). -*/ -c3_o -u3r_cell(u3_noun a, - u3_noun* b, - u3_noun* c) -{ - c3_assert(u3_none != a); - - if ( _(u3a_is_atom(a)) ) { - return c3n; - } - else { - if ( b ) *b = u3a_h(a); - if ( c ) *c = u3a_t(a); - return c3y; - } -} - -/* u3r_p(): -** -** & [0] if [a] is of the form [b *c]. -*/ -c3_o -u3r_p(u3_noun a, - u3_noun b, - u3_noun* c) -{ - u3_noun feg, nux; - - if ( (c3y == u3r_cell(a, &feg, &nux)) && - (c3y == u3r_sing(feg, b)) ) - { - *c = nux; - return c3y; - } - else return c3n; -} - -/* u3r_pq(): -** -** & [0] if [a] is of the form [b *c d]. -*/ -c3_o -u3r_pq(u3_noun a, - u3_noun b, - u3_noun* c, - u3_noun* d) -{ - u3_noun nux; - - if ( (c3y == u3r_p(a, b, &nux)) && - (c3y == u3r_cell(nux, c, d)) ) - { - return c3y; - } - else return c3n; -} - -/* u3r_pqr(): -** -** & [0] if [a] is of the form [b *c *d *e]. -*/ -c3_o -u3r_pqr(u3_noun a, - u3_noun b, - u3_noun* c, - u3_noun* d, - u3_noun* e) -{ - u3_noun nux; - - if ( (c3y == u3r_p(a, b, &nux)) && - (c3y == u3r_trel(nux, c, d, e)) ) - { - return c3y; - } - else return c3n; -} - -/* u3r_pqrs(): -** -** & [0] if [a] is of the form [b *c *d *e *f]. -*/ -c3_o -u3r_pqrs(u3_noun a, - u3_noun b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f) -{ - u3_noun nux; - - if ( (c3y == u3r_p(a, b, &nux)) && - (c3y == u3r_qual(nux, c, d, e, f)) ) - { - return c3y; - } - else return c3n; -} - -/* u3r_trel(): -** -** Factor (a) as a trel (b c d). -*/ -c3_o -u3r_trel(u3_noun a, - u3_noun *b, - u3_noun *c, - u3_noun *d) -{ - u3_noun guf; - - if ( (c3y == u3r_cell(a, b, &guf)) && - (c3y == u3r_cell(guf, c, d)) ) { - return c3y; - } - else { - return c3n; - } -} - -/* u3r_qual(): -** -** Factor (a) as a qual (b c d e). -*/ -c3_o -u3r_qual(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e) -{ - u3_noun guf; - - if ( (c3y == u3r_cell(a, b, &guf)) && - (c3y == u3r_trel(guf, c, d, e)) ) { - return c3y; - } - else return c3n; -} - -/* u3r_quil(): -** -** Factor (a) as a quil (b c d e f). -*/ -c3_o -u3r_quil(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f) -{ - u3_noun guf; - - if ( (c3y == u3r_cell(a, b, &guf)) && - (c3y == u3r_qual(guf, c, d, e, f)) ) { - return c3y; - } - else return c3n; -} - -/* u3r_hext(): -** -** Factor (a) as a hext (b c d e f g) -*/ -c3_o -u3r_hext(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f, - u3_noun* g) -{ - u3_noun guf; - - if ( (c3y == u3r_cell(a, b, &guf)) && - (c3y == u3r_quil(guf, c, d, e, f, g)) ) { - return c3y; - } - else return c3n; -} - -/* u3r_met(): -** -** Return the size of (b) in bits, rounded up to -** (1 << a_y). -** -** For example, (a_y == 3) returns the size in bytes. -*/ -c3_w -u3r_met(c3_y a_y, - u3_atom b) -{ - c3_assert(u3_none != b); - c3_assert(_(u3a_is_atom(b))); - - if ( b == 0 ) { - return 0; - } - else { - /* gal_w: number of words besides (daz_w) in (b). - ** daz_w: top word in (b). - */ - c3_w gal_w; - c3_w daz_w; - - if ( _(u3a_is_cat(b)) ) { - gal_w = 0; - daz_w = b; - } - else { - u3a_atom* b_u = u3a_to_ptr(b); - - gal_w = (b_u->len_w) - 1; - daz_w = b_u->buf_w[gal_w]; - } - - switch ( a_y ) { - case 0: - case 1: - case 2: { - /* col_w: number of bits in (daz_w) - ** bif_w: number of bits in (b) - */ - c3_w bif_w, col_w; - - col_w = c3_bits_word(daz_w); - bif_w = col_w + (gal_w << 5); - - return (bif_w + ((1 << a_y) - 1)) >> a_y; - } - case 3: { - return (gal_w << 2) - + ((daz_w >> 24) ? 4 : (daz_w >> 16) ? 3 : (daz_w >> 8) ? 2 : 1); - } - case 4: { - return (gal_w << 1) - + ((daz_w >> 16) ? 2 : 1); - } - default: { - c3_y gow_y = (a_y - 5); - - return ((gal_w + 1) + ((1 << gow_y) - 1)) >> gow_y; - } - } - } -} - -/* u3r_bit(): -** -** Return bit (a_w) of (b). -*/ -c3_b -u3r_bit(c3_w a_w, - u3_atom b) -{ - c3_assert(u3_none != b); - c3_assert(_(u3a_is_atom(b))); - - if ( _(u3a_is_cat(b)) ) { - if ( a_w >= 31 ) { - return 0; - } - else return (1 & (b >> a_w)); - } - else { - u3a_atom* b_u = u3a_to_ptr(b); - c3_y vut_y = (a_w & 31); - c3_w pix_w = (a_w >> 5); - - if ( pix_w >= b_u->len_w ) { - return 0; - } - else { - c3_w nys_w = b_u->buf_w[pix_w]; - - return (1 & (nys_w >> vut_y)); - } - } -} - -/* u3r_byte(): -** -** Return byte (a_w) of (b). -*/ -c3_y -u3r_byte(c3_w a_w, - u3_atom b) -{ - c3_assert(u3_none != b); - c3_assert(_(u3a_is_atom(b))); - - if ( _(u3a_is_cat(b)) ) { - if ( a_w > 3 ) { - return 0; - } - else return (255 & (b >> (a_w << 3))); - } - else { - u3a_atom* b_u = u3a_to_ptr(b); - c3_y vut_y = (a_w & 3); - c3_w pix_w = (a_w >> 2); - - if ( pix_w >= b_u->len_w ) { - return 0; - } - else { - c3_w nys_w = b_u->buf_w[pix_w]; - - return (255 & (nys_w >> (vut_y << 3))); - } - } -} - -/* u3r_bytes(): -** -** Copy bytes (a_w) through (a_w + b_w - 1) from (d) to (c). -*/ -void -u3r_bytes(c3_w a_w, - c3_w b_w, - c3_y* c_y, - u3_atom d) -{ - c3_assert(u3_none != d); - c3_assert(_(u3a_is_atom(d))); - - if ( _(u3a_is_cat(d)) ) { - c3_w e_w = d >> (c3_min(a_w, 4) << 3); - c3_w m_w = c3_min(b_w, 4); - memcpy(c_y, (c3_y*)&e_w, m_w); - if ( b_w > 4 ) { - memset(c_y + 4, 0, b_w - 4); - } - } - else { - u3a_atom* d_u = u3a_to_ptr(d); - c3_w n_w = d_u->len_w << 2; - c3_y* x_y = (c3_y*)d_u->buf_w + a_w; - - if ( a_w >= n_w ) { - memset(c_y, 0, b_w); - } - else { - c3_w z_w = c3_min(b_w, n_w - a_w); - memcpy(c_y, x_y, z_w); - if ( b_w > n_w - a_w ) { - memset(c_y + z_w, 0, b_w + a_w - n_w); - } - } - } -} - -/* u3r_bytes_fit(): -** -** Copy (len_w) bytes of (a) into (buf_y) if it fits, returning overage -*/ -c3_w -u3r_bytes_fit(c3_w len_w, c3_y *buf_y, u3_atom a) -{ - c3_w met_w = u3r_met(3, a); - if ( met_w <= len_w ) { - u3r_bytes(0, len_w, buf_y, a); - return 0; - } - else { - return len_w - met_w; - } -} - -/* u3r_bytes_alloc(): -** -** Copy (len_w) bytes starting at (a_w) from (b) into a fresh allocation. -*/ -c3_y* -u3r_bytes_alloc(c3_w a_w, - c3_w len_w, - u3_atom b) -{ - c3_y* b_y = u3a_malloc(len_w); - u3r_bytes(a_w, a_w + len_w, b_y, b); - return b_y; -} - -/* u3r_bytes_all(): -** -** Allocate and return a new byte array with all the bytes of (a), -** storing the length in (len_w). -*/ -c3_y* -u3r_bytes_all(c3_w* len_w, u3_atom a) -{ - c3_w met_w = *len_w = u3r_met(3, a); - return u3r_bytes_alloc(0, met_w, a); -} - -/* u3r_mp(): -** -** Copy (b) into (a_mp). -*/ -void -u3r_mp(mpz_t a_mp, - u3_atom b) -{ - c3_assert(u3_none != b); - c3_assert(_(u3a_is_atom(b))); - - if ( _(u3a_is_cat(b)) ) { - mpz_init_set_ui(a_mp, b); - } - else { - u3a_atom* b_u = u3a_to_ptr(b); - c3_w len_w = b_u->len_w; - c3_d bit_d = (c3_d)len_w << 5; - - // avoid reallocation on import, if possible - // - mpz_init2(a_mp, (c3_w)c3_min(bit_d, UINT32_MAX)); - mpz_import(a_mp, len_w, -1, sizeof(c3_w), 0, 0, b_u->buf_w); - } -} - -/* u3r_short(): -** -** Return short (a_w) of (b). -*/ -c3_s -u3r_short(c3_w a_w, - u3_atom b) -{ - c3_assert( u3_none != b ); - c3_assert( c3y == u3a_is_atom(b) ); - - if ( c3y == u3a_is_cat(b) ) { - switch ( a_w ) { - case 0: return b & 0xffff; - case 1: return b >> 16; - default: return 0; - } - } - else { - u3a_atom* b_u = u3a_to_ptr(b); - c3_w nix_w = a_w >> 1; - - if ( nix_w >= b_u->len_w ) { - return 0; - } - else { - c3_w wor_w = b_u->buf_w[nix_w]; - - return ( a_w & 1 ) ? (wor_w >> 16) : (wor_w & 0xffff); - } - } -} - -/* u3r_word(): -** -** Return word (a_w) of (b). -*/ -c3_w -u3r_word(c3_w a_w, - u3_atom b) -{ - c3_assert(u3_none != b); - c3_assert(_(u3a_is_atom(b))); - - if ( _(u3a_is_cat(b)) ) { - if ( a_w > 0 ) { - return 0; - } - else return b; - } - else { - u3a_atom* b_u = u3a_to_ptr(b); - - if ( a_w >= b_u->len_w ) { - return 0; - } - else return b_u->buf_w[a_w]; - } -} - -/* u3r_word_fit(): -** -** Fill (out_w) with (a) if it fits, returning success. -*/ -c3_t -u3r_word_fit(c3_w *out_w, u3_atom a) -{ - if ( u3r_met(5, a) > 1 ) { - return 0; - } - else { - *out_w = u3r_word(0, a); - return 1; - } -} - -/* u3r_chub(): -** -** Return double-word (a_w) of (b). -*/ -c3_d -u3r_chub(c3_w a_w, - u3_atom b) -{ - c3_w wlo_w = u3r_word(a_w * 2, b); - c3_w whi_w = u3r_word(1 + (a_w * 2), b); - - return (((uint64_t)whi_w) << 32ULL) | ((uint64_t)wlo_w); -} - -/* u3r_words(): -** -** Copy words (a_w) through (a_w + b_w - 1) from (d) to (c). -*/ -void -u3r_words(c3_w a_w, - c3_w b_w, - c3_w* c_w, - u3_atom d) -{ - c3_assert(u3_none != d); - c3_assert(_(u3a_is_atom(d))); - - if ( b_w == 0 ) { - return; - } - if ( _(u3a_is_cat(d)) ) { - if ( a_w == 0 ) { - *c_w = d; - memset((c3_y*)(c_w + 1), 0, (b_w - 1) << 2); - } - else { - memset((c3_y*)c_w, 0, b_w << 2); - } - } - else { - u3a_atom* d_u = u3a_to_ptr(d); - if ( a_w >= d_u->len_w ) { - memset((c3_y*)c_w, 0, b_w << 2); - } - else { - c3_w z_w = c3_min(b_w, d_u->len_w - a_w); - c3_w* x_w = d_u->buf_w + a_w; - memcpy((c3_y*)c_w, (c3_y*)x_w, z_w << 2); - if ( b_w > d_u->len_w - a_w ) { - memset((c3_y*)(c_w + z_w), 0, (b_w + a_w - d_u->len_w) << 2); - } - } - } -} - -/* u3r_chubs(): -** -** Copy double-words (a_w) through (a_w + b_w - 1) from (d) to (c). -*/ -void -u3r_chubs(c3_w a_w, - c3_w b_w, - c3_d* c_d, - u3_atom d) -{ - /* XX: assumes little-endian - */ - u3r_words(a_w * 2, b_w * 2, (c3_w *)c_d, d); -} - -/* u3r_safe_byte(): validate and retrieve byte. -*/ -c3_o -u3r_safe_byte(u3_noun dat, c3_y* out_y) -{ - if ( (c3n == u3a_is_atom(dat)) - || (1 < u3r_met(3, dat)) ) - { - return c3n; - } - - *out_y = u3r_byte(0, dat); - return c3y; -} - -/* u3r_safe_word(): validate and retrieve word. -*/ -c3_o -u3r_safe_word(u3_noun dat, c3_w* out_w) -{ - if ( (c3n == u3a_is_atom(dat)) - || (1 < u3r_met(5, dat)) ) - { - return c3n; - } - - *out_w = u3r_word(0, dat); - return c3y; -} - -/* u3r_safe_chub(): validate and retrieve chub. -*/ -c3_o -u3r_safe_chub(u3_noun dat, c3_d* out_d) -{ - if ( (c3n == u3a_is_atom(dat)) - || (1 < u3r_met(6, dat)) ) - { - return c3n; - } - - *out_d = u3r_chub(0, dat); - return c3y; -} - -/* u3r_chop(): -** -** Into the bloq space of `met`, from position `fum` for a -** span of `wid`, to position `tou`, XOR from atom `src` -** into `dst_w`. -*/ -void -u3r_chop(c3_g met_g, - c3_w fum_w, - c3_w wid_w, - c3_w tou_w, - c3_w* dst_w, - u3_atom src) -{ - c3_w i_w; - c3_w len_w; - c3_w* buf_w; - - c3_assert(u3_none != src); - c3_assert(_(u3a_is_atom(src))); - - if ( _(u3a_is_cat(src)) ) { - len_w = src ? 1 : 0; - buf_w = &src; - } - else { - u3a_atom* src_u = u3a_to_ptr(src); - - len_w = src_u->len_w; - buf_w = src_u->buf_w; - } - - if ( met_g < 5 ) { - c3_w san_w = (1 << met_g); - c3_w mek_w = ((1 << san_w) - 1); - c3_w baf_w = (fum_w << met_g); - c3_w bat_w = (tou_w << met_g); - - // XX: efficiency: poor. Iterate by words. - // - for ( i_w = 0; i_w < wid_w; i_w++ ) { - c3_w waf_w = (baf_w >> 5); - c3_g raf_g = (baf_w & 31); - c3_w wat_w = (bat_w >> 5); - c3_g rat_g = (bat_w & 31); - c3_w hop_w; - - hop_w = (waf_w >= len_w) ? 0 : buf_w[waf_w]; - hop_w = (hop_w >> raf_g) & mek_w; - - dst_w[wat_w] ^= (hop_w << rat_g); - - baf_w += san_w; - bat_w += san_w; - } - } - else { - c3_g hut_g = (met_g - 5); - c3_w san_w = (1 << hut_g); - c3_w j_w; - - for ( i_w = 0; i_w < wid_w; i_w++ ) { - c3_w wuf_w = (fum_w + i_w) << hut_g; - c3_w wut_w = (tou_w + i_w) << hut_g; - - for ( j_w = 0; j_w < san_w; j_w++ ) { - dst_w[wut_w + j_w] ^= - ((wuf_w + j_w) >= len_w) - ? 0 - : buf_w[wuf_w + j_w]; - } - } - } -} - -/* u3r_string(): `a` as malloced C string. -*/ -c3_c* -u3r_string(u3_atom a) -{ - c3_w met_w = u3r_met(3, a); - c3_c* str_c = c3_malloc(met_w + 1); - - u3r_bytes(0, met_w, (c3_y*)str_c, a); - str_c[met_w] = 0; - return str_c; -} - -/* u3r_tape(): `a`, a list of bytes, as malloced C string. -*/ -c3_y* -u3r_tape(u3_noun a) -{ - u3_noun b; - c3_w i_w; - c3_y *a_y; - - for ( i_w = 0, b=a; c3y == u3a_is_cell(b); i_w++, b=u3a_t(b) ) - ; - a_y = c3_malloc(i_w + 1); - - for ( i_w = 0, b=a; c3y == u3a_is_cell(b); i_w++, b=u3a_t(b) ) { - a_y[i_w] = u3a_h(b); - } - a_y[i_w] = 0; - - return a_y; -} - -/* u3r_mug_both(): Join two mugs. -*/ -c3_l -u3r_mug_both(c3_l lef_l, c3_l rit_l) -{ - c3_y len_y = 4 + ((c3_bits_word(rit_l) + 0x7) >> 3); - c3_w syd_w = 0xdeadbeef; - c3_w i_w = 0; - c3_y buf_y[8]; - - buf_y[0] = lef_l & 0xff; - buf_y[1] = (lef_l >> 8) & 0xff; - buf_y[2] = (lef_l >> 16) & 0xff; - buf_y[3] = (lef_l >> 24) & 0xff; - buf_y[4] = rit_l & 0xff; - buf_y[5] = (rit_l >> 8) & 0xff; - buf_y[6] = (rit_l >> 16) & 0xff; - buf_y[7] = (rit_l >> 24) & 0xff; - - while ( i_w < 8 ) { - c3_w haz_w; - c3_l ham_l; - - MurmurHash3_x86_32(buf_y, len_y, syd_w, &haz_w); - ham_l = (haz_w >> 31) ^ (haz_w & 0x7fffffff); - - if ( 0 == ham_l ) { - syd_w++; i_w++; - } - else { - return ham_l; - } - } - - return 0xfffe; -} - -/* u3r_mug_bytes(): Compute the mug of `buf`, `len`, LSW first. -*/ -c3_l -u3r_mug_bytes(const c3_y *buf_y, - c3_w len_w) -{ - c3_w syd_w = 0xcafebabe; - c3_w i_w = 0; - - while ( i_w < 8 ) { - c3_w haz_w; - c3_l ham_l; - - MurmurHash3_x86_32(buf_y, len_w, syd_w, &haz_w); - ham_l = (haz_w >> 31) ^ (haz_w & 0x7fffffff); - - if ( 0 == ham_l ) { - syd_w++; i_w++; - } - else { - return ham_l; - } - } - - return 0x7fff; -} - -/* u3r_mug_c(): Compute the mug of `a`, LSB first. -*/ -c3_l -u3r_mug_c(const c3_c* a_c) -{ - return u3r_mug_bytes((c3_y*)a_c, strlen(a_c)); -} - -/* u3r_mug_cell(): Compute the mug of the cell `[hed tel]`. -*/ -c3_l -u3r_mug_cell(u3_noun hed, - u3_noun tel) -{ - c3_w lus_w = u3r_mug(hed); - c3_w biq_w = u3r_mug(tel); - - return u3r_mug_both(lus_w, biq_w); -} - -/* u3r_mug_chub(): Compute the mug of `num`, LSW first. -*/ -c3_l -u3r_mug_chub(c3_d num_d) -{ - c3_w buf_w[2]; - - buf_w[0] = (c3_w)(num_d & 0xffffffffULL); - buf_w[1] = (c3_w)(num_d >> 32); - - return u3r_mug_words(buf_w, 2); -} - -/* u3r_mug_words(): 31-bit nonzero MurmurHash3 on raw words. -*/ -c3_l -u3r_mug_words(const c3_w* key_w, c3_w len_w) -{ - c3_w byt_w; - - // ignore trailing zeros - // - while ( len_w && !key_w[len_w - 1] ) { - len_w--; - } - - // calculate byte-width a la u3r_met(3, ...) - // - if ( !len_w ) { - byt_w = 0; - } - else { - c3_w gal_w = len_w - 1; - c3_w daz_w = key_w[gal_w]; - - byt_w = (gal_w << 2) - + ((daz_w >> 24) ? 4 : (daz_w >> 16) ? 3 : (daz_w >> 8) ? 2 : 1); - - } - - // XX: assumes little-endian - // - return u3r_mug_bytes((c3_y*)key_w, byt_w); -} - -/* _cr_mug: stack frame for recording cell traversal -** !mug == head-frame -*/ -typedef struct { - c3_l mug_l; - u3_cell cel; -} _cr_mugf; - -/* _cr_mug_next(): advance mug calculation, pushing cells onto the stack. -*/ -static inline c3_l -_cr_mug_next(u3a_pile* pil_u, u3_noun veb) -{ - while ( 1 ) { - // veb is a direct atom, mug is not memoized - // - if ( c3y == u3a_is_cat(veb) ) { - return (c3_l)u3r_mug_words(&veb, 1); - } - // veb is indirect, a pointer into the loom - // - else { - u3a_noun* veb_u = u3a_to_ptr(veb); - - // veb has already been mugged, return memoized value - // - // XX add debug assertion that mug is 31-bit? - // - if ( veb_u->mug_w ) { - return (c3_l)veb_u->mug_w; - } - // veb is an indirect atom, mug its bytes and memoize - // - else if ( c3y == u3a_is_atom(veb) ) { - u3a_atom* vat_u = (u3a_atom*)veb_u; - c3_l mug_l = u3r_mug_words(vat_u->buf_w, vat_u->len_w); - vat_u->mug_w = mug_l; - return mug_l; - } - // veb is a cell, push a stack frame to mark head-recursion - // and read the head - // - else { - u3a_cell* cel_u = (u3a_cell*)veb_u; - _cr_mugf* fam_u = u3a_push(pil_u); - - // check for overflow - // - u3a_pile_sane(pil_u); - - fam_u->mug_l = 0; - fam_u->cel = veb; - - veb = cel_u->hed; - continue; - } - } - } -} - -/* u3r_mug(): statefully mug a noun with 31-bit murmur3. -*/ -c3_l -u3r_mug(u3_noun veb) -{ - u3a_pile pil_u; - _cr_mugf* fam_u; - c3_l mug_l; - - // sanity check - // - c3_assert( u3_none != veb ); - - u3a_pile_prep(&pil_u, sizeof(*fam_u)); - - // commence mugging - // - mug_l = _cr_mug_next(&pil_u, veb); - - // process cell results - // - if ( c3n == u3a_pile_done(&pil_u) ) { - fam_u = u3a_peek(&pil_u); - - do { - // head-frame: stash mug and continue into the tail - // - if ( !fam_u->mug_l ) { - u3a_cell* cel_u = u3a_to_ptr(fam_u->cel); - - fam_u->mug_l = mug_l; - mug_l = _cr_mug_next(&pil_u, cel_u->tel); - fam_u = u3a_peek(&pil_u); - } - // tail-frame: calculate/memoize cell mug and pop the stack - // - else { - u3a_cell* cel_u = u3a_to_ptr(fam_u->cel); - - mug_l = u3r_mug_both(fam_u->mug_l, mug_l); - cel_u->mug_w = mug_l; - fam_u = u3a_pop(&pil_u); - } - } - while ( c3n == u3a_pile_done(&pil_u) ); - } - - return mug_l; -} diff --git a/pkg/urbit/noun/serial.c b/pkg/urbit/noun/serial.c deleted file mode 100644 index ae0a78310..000000000 --- a/pkg/urbit/noun/serial.c +++ /dev/null @@ -1,982 +0,0 @@ -/* noun/serial.c -** -*/ - -#include "all.h" -#include "ur/ur.h" -#include -#include - -/* _cs_jam_buf: struct for tracking the fibonacci-allocated jam of a noun -*/ -struct _cs_jam_fib { - u3i_slab* sab_u; - u3p(u3h_root) har_p; - c3_w a_w; - c3_w b_w; - c3_w bit_w; -}; - -/* _cs_jam_fib_grow(): reallocate buffer with fibonacci growth -*/ -static void -_cs_jam_fib_grow(struct _cs_jam_fib* fib_u, c3_w mor_w) -{ - c3_w wan_w = fib_u->bit_w + mor_w; - - // check for c3_w overflow - // - if ( wan_w < mor_w ) { - u3m_bail(c3__fail); - } - - if ( wan_w > fib_u->a_w ) { - c3_w old_w = fib_u->sab_u->len_w; - c3_w c_w = 0; - - // fibonacci growth - // - while ( c_w < wan_w ) { - c_w = fib_u->a_w + fib_u->b_w; - fib_u->b_w = fib_u->a_w; - fib_u->a_w = c_w; - } - - u3i_slab_grow(fib_u->sab_u, 0, c_w); - } -} - -/* _cs_jam_fib_chop(): chop [met_w] bits of [a] into [fib_u] -*/ -static void -_cs_jam_fib_chop(struct _cs_jam_fib* fib_u, c3_w met_w, u3_noun a) -{ - c3_w bit_w = fib_u->bit_w; - _cs_jam_fib_grow(fib_u, met_w); - fib_u->bit_w += met_w; - - { - c3_w* buf_w = fib_u->sab_u->buf_w; - u3r_chop(0, 0, met_w, bit_w, buf_w, a); - } -} - -/* _cs_jam_fib_mat(): length-prefixed encode (mat) [a] into [fib_u] -*/ -static void -_cs_jam_fib_mat(struct _cs_jam_fib* fib_u, u3_noun a) -{ - if ( 0 == a ) { - _cs_jam_fib_chop(fib_u, 1, 1); - } - else { - c3_w a_w = u3r_met(0, a); - c3_w b_w = c3_bits_word(a_w); - - _cs_jam_fib_chop(fib_u, b_w+1, 1 << b_w); - _cs_jam_fib_chop(fib_u, b_w-1, a_w & ((1 << (b_w-1)) - 1)); - _cs_jam_fib_chop(fib_u, a_w, a); - } -} - -/* _cs_jam_fib_atom_cb(): encode atom or backref -*/ -static void -_cs_jam_fib_atom_cb(u3_atom a, void* ptr_v) -{ - struct _cs_jam_fib* fib_u = ptr_v; - u3_weak b = u3h_git(fib_u->har_p, a); - - // if [a] has no backref, encode atom and put cursor into [har_p] - // - if ( u3_none == b ) { - u3h_put(fib_u->har_p, a, u3i_words(1, &(fib_u->bit_w))); - _cs_jam_fib_chop(fib_u, 1, 0); - _cs_jam_fib_mat(fib_u, a); - } - else { - c3_w a_w = u3r_met(0, a); - c3_w b_w = u3r_met(0, b); - - // if [a] is smaller than the backref, encode atom - // - if ( a_w <= b_w ) { - _cs_jam_fib_chop(fib_u, 1, 0); - _cs_jam_fib_mat(fib_u, a); - } - // otherwise, encode backref - // - else { - _cs_jam_fib_chop(fib_u, 2, 3); - _cs_jam_fib_mat(fib_u, b); - } - } -} - -/* _cs_jam_fib_cell_cb(): encode cell or backref -*/ -static c3_o -_cs_jam_fib_cell_cb(u3_noun a, void* ptr_v) -{ - struct _cs_jam_fib* fib_u = ptr_v; - u3_weak b = u3h_git(fib_u->har_p, a); - - // if [a] has no backref, encode cell and put cursor into [har_p] - // - if ( u3_none == b ) { - u3h_put(fib_u->har_p, a, u3i_words(1, &(fib_u->bit_w))); - _cs_jam_fib_chop(fib_u, 2, 1); - return c3y; - } - // otherwise, encode backref and shortcircuit traversal - // - else { - _cs_jam_fib_chop(fib_u, 2, 3); - _cs_jam_fib_mat(fib_u, b); - return c3n; - } -} - -/* u3s_jam_fib(): jam without atom allocation. -** -** returns atom-suitable words, and *bit_w will have -** the length (in bits). return should be freed with u3a_wfree(). -*/ -c3_w -u3s_jam_fib(u3i_slab* sab_u, u3_noun a) -{ - struct _cs_jam_fib fib_u; - fib_u.har_p = u3h_new(); - fib_u.sab_u = sab_u; - - // fib(12) is small enough to be reasonably fast to allocate. - // fib(11) is needed to get fib(13). - // - // - fib_u.a_w = ur_fib12; - fib_u.b_w = ur_fib11; - fib_u.bit_w = 0; - u3i_slab_init(sab_u, 0, fib_u.a_w); - - // as this is a hot path, we unsafely elide overflow checks - // - // a page-fault overflow detection system is urgently needed ... - // - u3a_walk_fore_unsafe(a, &fib_u, _cs_jam_fib_atom_cb, - _cs_jam_fib_cell_cb); - - u3h_free(fib_u.har_p); - - return fib_u.bit_w; -} - -typedef struct _jam_xeno_s { - u3p(u3h_root) har_p; - ur_bsw_t rit_u; -} _jam_xeno_t; - -/* _cs_coin_chub(): shortcircuit u3i_chubs(). -*/ -static inline u3_atom -_cs_coin_chub(c3_d a_d) -{ - return ( 0x7fffffffULL >= a_d ) ? a_d : u3i_chubs(1, &a_d); -} - -/* _cs_jam_xeno_atom(): encode in/direct atom in bitstream. -*/ -static inline void -_cs_jam_bsw_atom(ur_bsw_t* rit_u, c3_w met_w, u3_atom a) -{ - if ( c3y == u3a_is_cat(a) ) { - // XX need a ur_bsw_atom32() - // - ur_bsw_atom64(rit_u, (c3_y)met_w, (c3_d)a); - } - else { - u3a_atom* vat_u = u3a_to_ptr(a); - // XX assumes little-endian - // XX need a ur_bsw_atom_words() - // - c3_y* byt_y = (c3_y*)vat_u->buf_w; - ur_bsw_atom_bytes(rit_u, (c3_d)met_w, byt_y); - } -} - -/* _cs_jam_bsw_back(): encode in/direct backref in bitstream. -*/ -static inline void -_cs_jam_bsw_back(ur_bsw_t* rit_u, c3_w met_w, u3_atom a) -{ - c3_d bak_d = ( c3y == u3a_is_cat(a) ) - ? (c3_d)a - : u3r_chub(0, a); - - // XX need a ur_bsw_back32() - // - ur_bsw_back64(rit_u, (c3_y)met_w, bak_d); -} - -/* _cs_jam_xeno_atom(): encode atom or backref in bitstream. -*/ -static void -_cs_jam_xeno_atom(u3_atom a, void* ptr_v) -{ - _jam_xeno_t* jam_u = ptr_v; - ur_bsw_t* rit_u = &(jam_u->rit_u); - u3_weak bak = u3h_git(jam_u->har_p, a); - c3_w met_w = u3r_met(0, a); - - if ( u3_none == bak ) { - u3h_put(jam_u->har_p, a, _cs_coin_chub(rit_u->bits)); - _cs_jam_bsw_atom(rit_u, met_w, a); - } - else { - c3_w bak_w = u3r_met(0, bak); - - if ( met_w <= bak_w ) { - _cs_jam_bsw_atom(rit_u, met_w, a); - } - else { - _cs_jam_bsw_back(rit_u, bak_w, bak); - } - } -} - -/* _cs_jam_xeno_cell(): encode cell or backref in bitstream. -*/ -static c3_o -_cs_jam_xeno_cell(u3_noun a, void* ptr_v) -{ - _jam_xeno_t* jam_u = ptr_v; - ur_bsw_t* rit_u = &(jam_u->rit_u); - u3_weak bak = u3h_git(jam_u->har_p, a); - - if ( u3_none == bak ) { - u3h_put(jam_u->har_p, a, _cs_coin_chub(rit_u->bits)); - ur_bsw_cell(rit_u); - return c3y; - } - else { - _cs_jam_bsw_back(rit_u, u3r_met(0, bak), bak); - return c3n; - } -} - -/* u3s_jam_xeno(): jam with off-loom buffer (re-)allocation. -*/ -c3_d -u3s_jam_xeno(u3_noun a, c3_d* len_d, c3_y** byt_y) -{ - _jam_xeno_t jam_u = {0}; - ur_bsw_init(&jam_u.rit_u, ur_fib11, ur_fib12); - - jam_u.har_p = u3h_new(); - - // as this is a hot path, we unsafely elide overflow checks - // - // a page-fault overflow detection system is urgently needed ... - // - u3a_walk_fore_unsafe(a, &jam_u, _cs_jam_xeno_atom, - _cs_jam_xeno_cell); - - u3h_free(jam_u.har_p); - - return ur_bsw_done(&jam_u.rit_u, len_d, byt_y); -} - -/* _cs_cue: stack frame for tracking intermediate cell results -*/ -typedef struct _cs_cue { - u3_weak hed; // head of a cell or u3_none - u3_atom wid; // bitwidth of [hed] or 0 - u3_atom cur; // bit-cursor position -} _cs_cue; - -/* _cs_rub: rub, TRANSFER [cur], RETAIN [a] -*/ -static inline u3_noun -_cs_rub(u3_atom cur, u3_atom a) -{ - u3_noun pro = u3qe_rub(cur, a); - u3z(cur); - return pro; -} - -/* _cs_cue_next(): advance into [a], reading next value -** TRANSFER [cur], RETAIN [a] -*/ -static inline u3_noun -_cs_cue_next(u3a_pile* pil_u, - u3p(u3h_root) har_p, - u3_atom cur, - u3_atom a, - u3_atom* wid) -{ - while ( 1 ) { - // read tag bit at cur - // - c3_y tag_y = u3qc_cut(0, cur, 1, a); - - // low bit unset, (1 + cur) points to an atom - // - // produce atom and the width we read - // - if ( 0 == tag_y ) { - u3_noun bur = _cs_rub(u3i_vint(cur), a); - u3_noun pro = u3k(u3t(bur)); - - u3h_put(har_p, cur, u3k(pro)); - *wid = u3qa_inc(u3h(bur)); - - u3z(bur); - return pro; - } - else { - // read tag bit at (1 + cur) - // - { - u3_noun x = u3qa_inc(cur); - tag_y = u3qc_cut(0, x, 1, a); - u3z(x); - } - - // next bit set, (2 + cur) points to a backref - // - // produce referenced value and the width we read - // - if ( 1 == tag_y ) { - u3_noun bur = _cs_rub(u3ka_add(2, cur), a); - u3_noun pro = u3x_good(u3h_get(har_p, u3t(bur))); - - *wid = u3qa_add(2, u3h(bur)); - - u3z(bur); - return pro; - } - // next bit unset, (2 + cur) points to the head of a cell - // - // push a head-frame onto the road stack and read the head - // - else { - _cs_cue* fam_u = u3a_push(pil_u); - u3a_pile_sane(pil_u); - - // NB: fam_u->wid unused in head-frame - // - fam_u->hed = u3_none; - fam_u->cur = cur; - - cur = u3qa_add(2, cur); - continue; - } - } - } -} - -u3_noun -u3s_cue(u3_atom a) -{ - // pro: cue'd noun product - // wid: bitwidth read to produce [pro] - // fam_u: stack frame - // har_p: backreference table - // pil_u: stack control structure - // - u3_noun pro; - u3_atom wid, cur = 0; - _cs_cue* fam_u; - u3p(u3h_root) har_p = u3h_new(); - u3a_pile pil_u; - - // initialize stack control - // - u3a_pile_prep(&pil_u, sizeof(*fam_u)); - - // commence cueing at bit-position 0 - // - pro = _cs_cue_next(&pil_u, har_p, 0, a, &wid); - - // process cell results - // - if ( c3n == u3a_pile_done(&pil_u) ) { - fam_u = u3a_peek(&pil_u); - - do { - // head-frame: stash [pro] and [wid]; continue into the tail - // - if ( u3_none == fam_u->hed ) { - // NB: fam_u->wid unused in head-frame - // - fam_u->hed = pro; - fam_u->wid = wid; - - // continue reading at the bit-position after [pro] - { - u3_noun cur = u3ka_add(2, u3qa_add(wid, fam_u->cur)); - pro = _cs_cue_next(&pil_u, har_p, cur, a, &wid); - } - - fam_u = u3a_peek(&pil_u); - } - // tail-frame: cons cell, recalculate [wid], and pop the stack - // - else { - pro = u3nc(fam_u->hed, pro); - u3h_put(har_p, fam_u->cur, u3k(pro)); - u3z(fam_u->cur); - wid = u3ka_add(2, u3ka_add(wid, fam_u->wid)); - fam_u = u3a_pop(&pil_u); - } - } while ( c3n == u3a_pile_done(&pil_u) ); - } - - u3z(wid); - u3h_free(har_p); - - return pro; -} - -/* -** stack frame for recording head vs tail iteration -** -** $? [u3_none bits=@] -** [hed=* bits=@] -*/ -typedef struct _cue_frame_s { - u3_weak ref; - c3_d bit_d; -} _cue_frame_t; - -/* _cs_cue_xeno_next(): read next value from bitstream, dictionary off-loom. -*/ -static inline ur_cue_res_e -_cs_cue_xeno_next(u3a_pile* pil_u, - ur_bsr_t* red_u, - ur_dict32_t* dic_u, - u3_noun* out) -{ - ur_root_t* rot_u = 0; - - while ( 1 ) { - c3_d len_d, bit_d = red_u->bits; - ur_cue_tag_e tag_e; - ur_cue_res_e res_e; - - if ( ur_cue_good != (res_e = ur_bsr_tag(red_u, &tag_e)) ) { - return res_e; - } - - switch ( tag_e ) { - default: c3_assert(0); - - case ur_jam_cell: { - _cue_frame_t* fam_u = u3a_push(pil_u); - u3a_pile_sane(pil_u); - - fam_u->ref = u3_none; - fam_u->bit_d = bit_d; - continue; - } - - case ur_jam_back: { - if ( ur_cue_good != (res_e = ur_bsr_rub_len(red_u, &len_d)) ) { - return res_e; - } - else if ( 62 < len_d ) { - return ur_cue_meme; - } - else { - c3_d bak_d = ur_bsr64_any(red_u, len_d); - c3_w bak_w; - - if ( !ur_dict32_get(rot_u, dic_u, bak_d, &bak_w) ) { - return ur_cue_back; - } - - *out = u3k((u3_noun)bak_w); - return ur_cue_good; - } - } - - case ur_jam_atom: { - if ( ur_cue_good != (res_e = ur_bsr_rub_len(red_u, &len_d)) ) { - return res_e; - } - - if ( 31 >= len_d ) { - *out = (u3_noun)ur_bsr32_any(red_u, len_d); - } - else { - c3_d byt_d = (len_d + 0x7) >> 3; - u3i_slab sab_u; - - if ( 0xffffffffULL < byt_d) { - return ur_cue_meme; - } - else { - u3i_slab_init(&sab_u, 3, byt_d); - ur_bsr_bytes_any(red_u, len_d, sab_u.buf_y); - *out = u3i_slab_mint_bytes(&sab_u); - } - } - - ur_dict32_put(rot_u, dic_u, bit_d, *out); - return ur_cue_good; - } - } - } -} - -struct _u3_cue_xeno { - ur_dict32_t dic_u; -}; - -/* _cs_cue_xeno(): cue on-loom, with off-loom dictionary in handle. -*/ -static u3_weak -_cs_cue_xeno(u3_cue_xeno* sil_u, - c3_d len_d, - const c3_y* byt_y) -{ - ur_bsr_t red_u = {0}; - ur_dict32_t* dic_u = &sil_u->dic_u; - u3a_pile pil_u; - _cue_frame_t* fam_u; - ur_cue_res_e res_e; - u3_noun ref; - - // initialize stack control - // - u3a_pile_prep(&pil_u, sizeof(*fam_u)); - - // init bitstream-reader - // - if ( ur_cue_good != (res_e = ur_bsr_init(&red_u, len_d, byt_y)) ) { - return c3n; - } - // bit-cursor (and backreferences) must fit in 62-bit direct atoms - // - else if ( 0x7ffffffffffffffULL < len_d ) { - return c3n; - } - - // advance into stream - // - res_e = _cs_cue_xeno_next(&pil_u, &red_u, dic_u, &ref); - - // process cell results - // - if ( (c3n == u3a_pile_done(&pil_u)) - && (ur_cue_good == res_e) ) - { - fam_u = u3a_peek(&pil_u); - - do { - // f is a head-frame; stash result and read the tail from the stream - // - if ( u3_none == fam_u->ref ) { - fam_u->ref = ref; - res_e = _cs_cue_xeno_next(&pil_u, &red_u, dic_u, &ref); - fam_u = u3a_peek(&pil_u); - } - // f is a tail-frame; pop the stack and continue - // - else { - ur_root_t* rot_u = 0; - - ref = u3nc(fam_u->ref, ref); - ur_dict32_put(rot_u, dic_u, fam_u->bit_d, ref); - fam_u = u3a_pop(&pil_u); - } - } - while ( (c3n == u3a_pile_done(&pil_u)) - && (ur_cue_good == res_e) ); - } - - if ( ur_cue_good == res_e ) { - return ref; - } - // on failure, unwind the stack and dispose of intermediate nouns - // - else if ( c3n == u3a_pile_done(&pil_u) ) { - do { - if ( u3_none != fam_u->ref ) { - u3z(fam_u->ref); - } - fam_u = u3a_pop(&pil_u); - } - while ( c3n == u3a_pile_done(&pil_u) ); - } - - return u3_none; -} - -/* u3s_cue_xeno_init_with(): initialize a cue_xeno handle as specified. -*/ -u3_cue_xeno* -u3s_cue_xeno_init_with(c3_d pre_d, c3_d siz_d) -{ - u3_cue_xeno* sil_u; - - c3_assert( &(u3H->rod_u) == u3R ); - - sil_u = c3_calloc(sizeof(*sil_u)); - ur_dict32_grow((ur_root_t*)0, &sil_u->dic_u, pre_d, siz_d); - - return sil_u; -} - -/* u3s_cue_xeno_init(): initialize a cue_xeno handle. -*/ -u3_cue_xeno* -u3s_cue_xeno_init(void) -{ - return u3s_cue_xeno_init_with(ur_fib10, ur_fib11); -} - -/* u3s_cue_xeno_init(): cue on-loom, with off-loom dictionary in handle. -*/ -u3_weak -u3s_cue_xeno_with(u3_cue_xeno* sil_u, - c3_d len_d, - const c3_y* byt_y) -{ - u3_weak som; - - c3_assert( &(u3H->rod_u) == u3R ); - - som = _cs_cue_xeno(sil_u, len_d, byt_y); - ur_dict32_wipe(&sil_u->dic_u); - return som; -} - -/* u3s_cue_xeno_init(): dispose cue_xeno handle. -*/ -void -u3s_cue_xeno_done(u3_cue_xeno* sil_u) -{ - ur_dict_free((ur_dict_t*)&sil_u->dic_u); - c3_free(sil_u); -} - -/* u3s_cue_xeno(): cue on-loom, with off-loom dictionary. -*/ -u3_weak -u3s_cue_xeno(c3_d len_d, - const c3_y* byt_y) -{ - u3_cue_xeno* sil_u; - u3_weak som; - - c3_assert( &(u3H->rod_u) == u3R ); - - sil_u = u3s_cue_xeno_init(); - som = _cs_cue_xeno(sil_u, len_d, byt_y); - u3s_cue_xeno_done(sil_u); - return som; -} - -/* _cs_cue_need(): bail on ur_cue_* read failures. -*/ -static inline void -_cs_cue_need(ur_cue_res_e res_e) -{ - if ( ur_cue_good == res_e ) { - return; - } - else { - c3_m mot_m = (ur_cue_meme == res_e) ? c3__meme : c3__exit; - u3m_bail(mot_m); - } -} - -/* _cs_cue_get(): u3h_get wrapper handling allocation and refcounts. -*/ -static inline u3_weak -_cs_cue_get(u3p(u3h_root) har_p, c3_d key_d) -{ - u3_atom key = _cs_coin_chub(key_d); - u3_weak pro = u3h_get(har_p, key); - u3z(key); - return pro; -} - -/* _cs_cue_put(): u3h_put wrapper handling allocation and refcounts. -*/ -static inline u3_noun -_cs_cue_put(u3p(u3h_root) har_p, c3_d key_d, u3_noun val) -{ - u3_atom key = _cs_coin_chub(key_d); - u3h_put(har_p, key, u3k(val)); - u3z(key); - return val; -} - -/* _cs_cue_bytes_next(): read next value from bitstream. -*/ -static inline u3_noun -_cs_cue_bytes_next(u3a_pile* pil_u, - u3p(u3h_root) har_p, - ur_bsr_t* red_u) -{ - while ( 1 ) { - c3_d len_d, bit_d = red_u->bits; - ur_cue_tag_e tag_e; - - _cs_cue_need(ur_bsr_tag(red_u, &tag_e)); - - switch ( tag_e ) { - default: c3_assert(0); - - case ur_jam_cell: { - _cue_frame_t* fam_u = u3a_push(pil_u); - u3a_pile_sane(pil_u); - - fam_u->ref = u3_none; - fam_u->bit_d = bit_d; - continue; - } - - case ur_jam_back: { - _cs_cue_need(ur_bsr_rub_len(red_u, &len_d)); - - if ( 62 < len_d ) { - return u3m_bail(c3__meme); - } - else { - c3_d bak_d = ur_bsr64_any(red_u, len_d); - u3_weak bak = _cs_cue_get(har_p, bak_d); - return u3x_good(bak); - } - } - - case ur_jam_atom: { - u3_atom vat; - - _cs_cue_need(ur_bsr_rub_len(red_u, &len_d)); - - if ( 31 >= len_d ) { - vat = (u3_noun)ur_bsr32_any(red_u, len_d); - } - else { - u3i_slab sab_u; - u3i_slab_init(&sab_u, 0, len_d); - - ur_bsr_bytes_any(red_u, len_d, sab_u.buf_y); - vat = u3i_slab_mint_bytes(&sab_u); - } - - return _cs_cue_put(har_p, bit_d, vat); - } - } - } -} - -/* u3s_cue_bytes(): cue bytes onto the loom. -*/ -u3_noun -u3s_cue_bytes(c3_d len_d, const c3_y* byt_y) -{ - ur_bsr_t red_u = {0}; - u3a_pile pil_u; - _cue_frame_t* fam_u; - u3p(u3h_root) har_p; - u3_noun ref; - - // initialize stack control - // - u3a_pile_prep(&pil_u, sizeof(*fam_u)); - - // initialize a hash table for dereferencing backrefs - // - har_p = u3h_new(); - - // init bitstream-reader - // - _cs_cue_need(ur_bsr_init(&red_u, len_d, byt_y)); - - // bit-cursor (and backreferences) must fit in 62-bit direct atoms - // - if ( 0x7ffffffffffffffULL < len_d ) { - return u3m_bail(c3__meme); - } - - // advance into stream - // - ref = _cs_cue_bytes_next(&pil_u, har_p, &red_u); - - // process cell results - // - if ( c3n == u3a_pile_done(&pil_u) ) { - fam_u = u3a_peek(&pil_u); - - do { - // f is a head-frame; stash result and read the tail from the stream - // - if ( u3_none == fam_u->ref ) { - fam_u->ref = ref; - ref = _cs_cue_bytes_next(&pil_u, har_p, &red_u); - fam_u = u3a_peek(&pil_u); - } - // f is a tail-frame; pop the stack and continue - // - else { - ref = u3nc(fam_u->ref, ref); - _cs_cue_put(har_p, fam_u->bit_d, ref); - fam_u = u3a_pop(&pil_u); - } - } - while ( c3n == u3a_pile_done(&pil_u) ); - } - - u3h_free(har_p); - - return ref; -} - -/* u3s_cue_atom(): cue atom. -*/ -u3_noun -u3s_cue_atom(u3_atom a) -{ - c3_w len_w = u3r_met(3, a); - c3_y* byt_y; - - // XX assumes little-endian - // - if ( c3y == u3a_is_cat(a) ) { - byt_y = (c3_y*)&a; - } - else { - u3a_atom* vat_u = u3a_to_ptr(a); - byt_y = (c3_y*)vat_u->buf_w; - } - - return u3s_cue_bytes((c3_d)len_w, byt_y); -} - -#define DIGIT(a) ( ((a) >= '0') && ((a) <= '9') ) -#define BLOCK(a) ( ('.' == (a)[0]) \ - && DIGIT(a[1]) \ - && DIGIT(a[2]) \ - && DIGIT(a[3]) ) - -/* u3s_sift_ud_bytes: parse @ud -*/ -u3_weak -u3s_sift_ud_bytes(c3_w len_w, c3_y* byt_y) -{ - c3_y num_y = len_w % 4; // leading digits length - c3_s val_s = 0; // leading digits value - - // +ape:ag: just 0 - // - if ( !len_w ) return u3_none; - if ( '0' == *byt_y ) return ( 1 == len_w ) ? (u3_noun)0 : u3_none; - - // +ted:ab: leading nonzero (checked above), plus up to 2 digits - // -#define NEXT() do { \ - if ( !DIGIT(*byt_y) ) return u3_none; \ - val_s *= 10; \ - val_s += *byt_y++ - '0'; \ - } while (0) - - switch ( num_y ) { - case 3: NEXT(); - case 2: NEXT(); - case 1: NEXT(); break; - case 0: return u3_none; - } - -#undef NEXT - - len_w -= num_y; - - // +tid:ab: dot-prefixed 3-digit blocks - // - // avoid gmp allocation if possible - // - 19 decimal digits fit in 64 bits - // - 18 digits is 24 bytes with separators - // - if ( ((1 == num_y) && (24 >= len_w)) - || (20 >= len_w) ) - { - c3_d val_d = val_s; - - while ( len_w ) { - if ( !BLOCK(byt_y) ) return u3_none; - - byt_y++; - - val_d *= 10; - val_d += *byt_y++ - '0'; - val_d *= 10; - val_d += *byt_y++ - '0'; - val_d *= 10; - val_d += *byt_y++ - '0'; - - len_w -= 4; - } - - return u3i_chub(val_d); - } - - { - // avoid gmp realloc if possible - // - mpz_t a_mp; - { - c3_d bit_d = (c3_d)(len_w / 4) * 10; - mpz_init2(a_mp, (c3_w)c3_min(bit_d, UINT32_MAX)); - mpz_set_ui(a_mp, val_s); - } - - while ( len_w ) { - if ( !BLOCK(byt_y) ) { - mpz_clear(a_mp); - return u3_none; - } - - byt_y++; - - val_s = *byt_y++ - '0'; - val_s *= 10; - val_s += *byt_y++ - '0'; - val_s *= 10; - val_s += *byt_y++ - '0'; - - mpz_mul_ui(a_mp, a_mp, 1000); - mpz_add_ui(a_mp, a_mp, val_s); - - len_w -= 4; - } - - return u3i_mp(a_mp); - } -} - -#undef BLOCK -#undef DIGIT - -/* u3s_sift_ud: parse @ud. -*/ -u3_weak -u3s_sift_ud(u3_atom a) -{ - c3_w len_w = u3r_met(3, a); - c3_y* byt_y; - - // XX assumes little-endian - // - if ( c3y == u3a_is_cat(a) ) { - byt_y = (c3_y*)&a; - } - else { - u3a_atom* vat_u = u3a_to_ptr(a); - byt_y = (c3_y*)vat_u->buf_w; - } - - return u3s_sift_ud_bytes(len_w, byt_y); -} diff --git a/pkg/urbit/noun/trace.c b/pkg/urbit/noun/trace.c deleted file mode 100644 index 79d290930..000000000 --- a/pkg/urbit/noun/trace.c +++ /dev/null @@ -1,675 +0,0 @@ -/* g/t.c - -** -** This file is in the public domain. -*/ -#include "all.h" -#include "vere/vere.h" -#include -#include -#include - -static c3_o _ct_lop_o; - -/* u3t_push(): push on trace stack. -*/ -void -u3t_push(u3_noun mon) -{ - u3R->bug.tax = u3nc(mon, u3R->bug.tax); -} - -/* u3t_mean(): push `[%mean roc]` on trace stack. -*/ -void -u3t_mean(u3_noun roc) -{ - u3R->bug.tax = u3nc(u3nc(c3__mean, roc), u3R->bug.tax); -} - -/* u3t_drop(): drop from meaning stack. -*/ -void -u3t_drop(void) -{ - c3_assert(_(u3du(u3R->bug.tax))); - { - u3_noun tax = u3R->bug.tax; - - u3R->bug.tax = u3k(u3t(tax)); - u3z(tax); - } -} - -/* u3t_slog(): print directly. -*/ -void -u3t_slog(u3_noun hod) -{ - if ( 0 != u3C.slog_f ) { - u3C.slog_f(hod); - } - else { - u3z(hod); - } -} - -/* u3t_heck(): profile point. -*/ -void -u3t_heck(u3_atom cog) -{ -#if 0 - u3R->pro.cel_d++; -#else - c3_w len_w = u3r_met(3, cog); - c3_c* str_c = alloca(1 + len_w); - - u3r_bytes(0, len_w, (c3_y *)str_c, cog); - str_c[len_w] = 0; - - // Profile sampling, because it allocates on the home road, - // only works on when we're not at home. - // - if ( &(u3H->rod_u) != u3R ) { - u3a_road* rod_u; - - rod_u = u3R; - u3R = &(u3H->rod_u); - { - if ( 0 == u3R->pro.day ) { - u3R->pro.day = u3do("doss", 0); - } - u3R->pro.day = u3dc("pi-heck", u3i_string(str_c), u3R->pro.day); - } - u3R = rod_u; - } -#endif -} - -#if 0 -static void -_ct_sane(u3_noun lab) -{ - if ( u3_nul != lab ) { - c3_assert(c3y == u3du(lab)); - c3_assert(c3y == u3ud(u3h(lab))); - _ct_sane(u3t(lab)); - } -} -#endif - -#if 1 -/* _t_samp_process(): process raw sample data from live road. -*/ -static u3_noun -_t_samp_process(u3_road* rod_u) -{ - u3_noun pef = u3_nul; // (list (pair path (map path ,@ud))) - u3_noun muf = u3_nul; // (map path ,@ud) - c3_w len_w = 0; - - // Accumulate a label/map stack which collapses recursive segments. - // - while ( rod_u ) { - u3_noun don = rod_u->pro.don; - - while ( u3_nul != don ) { - // Get surface allocated label - // - // u3_noun lab = u3nc(u3i_string("foobar"), 0); - u3_noun laj = u3h(don), - lab = u3a_take(laj); - u3a_wash(laj); - - // Add the label to the traced label stack, trimming recursion. - // - { - u3_noun old; - - if ( u3_none == (old = u3kdb_get(u3k(muf), u3k(lab))) ) { - muf = u3kdb_put(muf, u3k(lab), len_w); - pef = u3nc(u3nc(lab, u3k(muf)), pef); - len_w += 1; - } - else { - u3_assure(u3a_is_cat(old)); - - u3z(muf); - while ( len_w > (old + 1) ) { - u3_noun t_pef = u3k(u3t(pef)); - - len_w -= 1; - u3z(pef); - pef = t_pef; - } - muf = u3k(u3t(u3h(pef))); - u3z(lab); - } - } - don = u3t(don); - } - rod_u = u3tn(u3_road, rod_u->par_p); - } - u3z(muf); - - // Lose the maps and save a pure label stack in original order. - // - { - u3_noun pal = u3_nul; - - while ( u3_nul != pef ) { - u3_noun h_pef = u3h(pef); - u3_noun t_pef = u3k(u3t(pef)); - - pal = u3nc(u3k(u3h(h_pef)), pal); - - u3z(pef); - pef = t_pef; - } - - // u3l_log("sample: stack length %d\r\n", u3kb_lent(u3k(pal))); - return pal; - } -} -#endif - -/* u3t_samp(): sample. -*/ -void -u3t_samp(void) -{ - if ( c3y == _ct_lop_o ) { - // _ct_lop_o here is a mutex for modifying pro.don. we - // do not want to sample in the middle of doing that, as - // it can cause memory errors. - return; - } - - c3_w old_wag = u3C.wag_w; - u3C.wag_w &= ~u3o_debug_cpu; - u3C.wag_w &= ~u3o_trace; - - static int home = 0; - static int away = 0; - - // Profile sampling, because it allocates on the home road, - // only works on when we're not at home. - // - if ( &(u3H->rod_u) != u3R ) { - home++; - c3_l mot_l; - u3a_road* rod_u; - - if ( _(u3T.mal_o) ) { - mot_l = c3_s3('m','a','l'); - } - else if ( _(u3T.coy_o) ) { - mot_l = c3_s3('c','o','y'); - } - else if ( _(u3T.euq_o) ) { - mot_l = c3_s3('e','u','q'); - } - else if ( _(u3T.far_o) ) { - mot_l = c3_s3('f','a','r'); - } - else if ( _(u3T.noc_o) ) { - c3_assert(!_(u3T.glu_o)); - mot_l = c3_s3('n','o','c'); - } - else if ( _(u3T.glu_o) ) { - mot_l = c3_s3('g','l','u'); - } - else { - mot_l = c3_s3('f','u','n'); - } - - rod_u = u3R; - u3R = &(u3H->rod_u); - { - u3_noun lab = _t_samp_process(rod_u); - - c3_assert(u3R == &u3H->rod_u); - if ( 0 == u3R->pro.day ) { - /* bunt a +doss - */ - u3R->pro.day = u3nt(u3nq(0, 0, 0, u3nq(0, 0, 0, 0)), 0, 0); - } - u3R->pro.day = u3dt("pi-noon", mot_l, lab, u3R->pro.day); - } - u3R = rod_u; - } - else { - away++; - // fprintf(stderr,"home: %06d away: %06d\r\n", home, away); - } - u3C.wag_w = old_wag; -} - -/* u3t_come(): push on profile stack; return yes if active push. RETAIN. -*/ -c3_o -u3t_come(u3_noun lab) -{ - if ( (u3_nul == u3R->pro.don) || !_(u3r_sing(lab, u3h(u3R->pro.don))) ) { - u3a_gain(lab); - _ct_lop_o = c3y; - u3R->pro.don = u3nc(lab, u3R->pro.don); - _ct_lop_o = c3n; - return c3y; - } - else return c3n; -} - -/* u3t_flee(): pop off profile stack. -*/ -void -u3t_flee(void) -{ - _ct_lop_o = c3y; - u3_noun don = u3R->pro.don; - u3R->pro.don = u3k(u3t(don)); - _ct_lop_o = c3n; - u3z(don); -} - -/* u3t_trace_open(): opens a trace file and writes the preamble. -*/ -void -u3t_trace_open(c3_c* dir_c) -{ - c3_c fil_c[2048]; - snprintf(fil_c, 2048, "%s/.urb/put/trace", dir_c); - - struct stat st; - if ( -1 == stat(fil_c, &st) ) { - c3_mkdir(fil_c, 0700); - } - - c3_c lif_c[2056]; - snprintf(lif_c, 2056, "%s/%d.json", fil_c, u3_Host.tra_u.fun_w); - - u3_Host.tra_u.fil_u = c3_fopen(lif_c, "w"); - u3_Host.tra_u.nid_w = (int)getpid(); - - fprintf(u3_Host.tra_u.fil_u, "[ "); - - // We have two "threads", the event processing and the nock stuff. - // tid 1 = event processing - // tid 2 = nock processing - fprintf(u3_Host.tra_u.fil_u, - "{\"name\": \"process_name\", \"ph\": \"M\", \"pid\": %d, \"args\": " - "{\"name\": \"urbit\"}},\n", - u3_Host.tra_u.nid_w); - fprintf(u3_Host.tra_u.fil_u, - "{\"name\": \"thread_name\", \"ph\": \"M\", \"pid\": %d, \"tid\": 1, " - "\"args\": {\"name\": \"Event Processing\"}},\n", - u3_Host.tra_u.nid_w); - fprintf(u3_Host.tra_u.fil_u, - "{\"name\": \"thread_sort_index\", \"ph\": \"M\", \"pid\": %d, " - "\"tid\": 1, \"args\": {\"sort_index\": 1}},\n", - u3_Host.tra_u.nid_w); - fprintf(u3_Host.tra_u.fil_u, - "{\"name\": \"thread_name\", \"ph\": \"M\", \"pid\": %d, \"tid\": 2, " - "\"args\": {\"name\": \"Nock\"}},\n", - u3_Host.tra_u.nid_w); - fprintf(u3_Host.tra_u.fil_u, - "{\"name\": \"thread_sort_index\", \"ph\": \"M\", \"pid\": %d, " - "\"tid\": 2, \"args\": {\"sort_index\": 2}},\n", - u3_Host.tra_u.nid_w); - u3_Host.tra_u.con_w = 5; -} - -/* u3t_trace_close(): closes a trace file. optional. -*/ -void -u3t_trace_close() -{ - if (!u3_Host.tra_u.fil_u) - return; - - // We don't terminate the JSON because of the file format. - fclose(u3_Host.tra_u.fil_u); - u3_Host.tra_u.con_w = 0; - u3_Host.tra_u.fun_w++; -} - -/* u3t_trace_time(): microsecond clock -*/ -c3_d u3t_trace_time() -{ - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - return 1000000ULL * tim_tv.tv_sec + tim_tv.tv_usec; -} - -/* u3t_nock_trace_push(): push a trace onto the trace stack; returns yes if pushed. - * - * The trace stack is a stack of [path time-entered]. - */ -c3_o -u3t_nock_trace_push(u3_noun lab) -{ - if (!u3_Host.tra_u.fil_u) - return c3n; - - if ( (u3_nul == u3R->pro.trace) || - !_(u3r_sing(lab, u3h(u3h(u3R->pro.trace)))) ) { - u3a_gain(lab); - c3_d time = u3t_trace_time(); - u3R->pro.trace = u3nc(u3nc(lab, u3i_chubs(1, &time)), u3R->pro.trace); - return c3y; - } - else { - return c3n; - } -} - -/* u3t_nock_trace_pop(): pops a trace from the trace stack. - * - * When we remove the trace from the stack, we check to see if the sample is - * large enough to process, as we'll otherwise keep track of individual +add - * calls. If it is, we write it out to the tracefile. - */ -void -u3t_nock_trace_pop() -{ - if (!u3_Host.tra_u.fil_u) - return; - - u3_noun trace = u3R->pro.trace; - u3R->pro.trace = u3k(u3t(trace)); - - u3_noun item = u3h(trace); - u3_noun lab = u3h(item); - c3_d start_time = u3r_chub(0, u3t(item)); - - // 33microseconds (a 30th of a millisecond). - c3_d duration = u3t_trace_time() - start_time; - if (duration > 33) { - c3_c* name = u3m_pretty_path(lab); - - fprintf(u3_Host.tra_u.fil_u, - "{\"cat\": \"nock\", \"name\": \"%s\", \"ph\":\"%c\", \"pid\": %d, " - "\"tid\": 2, \"ts\": %" PRIu64 ", \"dur\": %" PRIu64 "}, \n", - name, - 'X', - u3_Host.tra_u.nid_w, - start_time, - duration); - - c3_free(name); - u3_Host.tra_u.con_w++; - } - - u3z(trace); -} - -/* u3t_event_trace(): dumps a simple event from outside nock. -*/ -void -u3t_event_trace(const c3_c* name, c3_c type) -{ - if (!u3_Host.tra_u.fil_u) - return; - - fprintf(u3_Host.tra_u.fil_u, - "{\"cat\": \"event\", \"name\": \"%s\", \"ph\":\"%c\", \"pid\": %d, " - "\"tid\": 1, \"ts\": %" PRIu64 ", \"id\": \"0x100\"}, \n", - name, - type, - u3_Host.tra_u.nid_w, - u3t_trace_time()); - u3_Host.tra_u.con_w++; -} - -/* u3t_print_steps: print step counter. -*/ -void -u3t_print_steps(FILE* fil_u, c3_c* cap_c, c3_d sep_d) -{ - c3_assert( 0 != fil_u ); - - c3_w gib_w = (sep_d / 1000000000ULL); - c3_w mib_w = (sep_d % 1000000000ULL) / 1000000ULL; - c3_w kib_w = (sep_d % 1000000ULL) / 1000ULL; - c3_w bib_w = (sep_d % 1000ULL); - - // XX prints to stderr since it's called on shutdown, daemon may be gone - // - if ( sep_d ) { - if ( gib_w ) { - fprintf(fil_u, "%s: G/%d.%03d.%03d.%03d\r\n", - cap_c, gib_w, mib_w, kib_w, bib_w); - } - else if ( mib_w ) { - fprintf(fil_u, "%s: M/%d.%03d.%03d\r\n", cap_c, mib_w, kib_w, bib_w); - } - else if ( kib_w ) { - fprintf(fil_u, "%s: K/%d.%03d\r\n", cap_c, kib_w, bib_w); - } - else if ( bib_w ) { - fprintf(fil_u, "%s: %d\r\n", cap_c, bib_w); - } - } -} - -/* u3t_damp(): print and clear profile data. -*/ -void -u3t_damp(FILE* fil_u) -{ - c3_assert( 0 != fil_u ); - - if ( 0 != u3R->pro.day ) { - u3_noun wol = u3do("pi-tell", u3R->pro.day); - - // XX prints to stderr since it's called on shutdown, daemon may be gone - // - { - u3_noun low = wol; - - while ( u3_nul != low ) { - c3_c* str_c = (c3_c*)u3r_tape(u3h(low)); - fputs(str_c, fil_u); - fputs("\r\n", fil_u); - - c3_free(str_c); - low = u3t(low); - } - - u3z(wol); - } - - /* bunt a +doss - */ - u3R->pro.day = u3nt(u3nq(0, 0, 0, u3nq(0, 0, 0, 0)), 0, 0); - } - - u3t_print_steps(fil_u, "nocks", u3R->pro.nox_d); - u3t_print_steps(fil_u, "cells", u3R->pro.cel_d); - - u3R->pro.nox_d = 0; - u3R->pro.cel_d = 0; -} - -/* _ct_sigaction(): profile sigaction callback. -*/ -void _ct_sigaction(c3_i x_i) -{ - u3t_samp(); -} - -/* u3t_init(): initialize tracing layer. -*/ -void -u3t_init(void) -{ - u3T.noc_o = c3n; - u3T.glu_o = c3n; - u3T.mal_o = c3n; - u3T.far_o = c3n; - u3T.coy_o = c3n; - u3T.euq_o = c3n; -} - -/* u3t_boot(): turn sampling on. -*/ -void -u3t_boot(void) -{ - if ( u3C.wag_w & u3o_debug_cpu ) { - _ct_lop_o = c3n; -#if defined(U3_OS_PROF) - // skip profiling if we don't yet have an arvo kernel - // - if ( 0 == u3A->roc ) { - return; - } - - // Register _ct_sigaction to be called on `SIGPROF`. - { - struct sigaction sig_s = {{0}}; - sig_s.sa_handler = _ct_sigaction; - sigemptyset(&(sig_s.sa_mask)); - sigaction(SIGPROF, &sig_s, 0); - } - - // Unblock `SIGPROF` for this thread (we will block it again when `u3t_boff` is called). - { - sigset_t set; - sigemptyset(&set); - sigaddset(&set, SIGPROF); - if ( 0 != pthread_sigmask(SIG_UNBLOCK, &set, NULL) ) { - u3l_log("trace: thread mask SIGPROF: %s\r\n", strerror(errno)); - } - } - - // Ask for SIGPROF to be sent every 10ms. - { - struct itimerval itm_v = {{0}}; - itm_v.it_interval.tv_usec = 10000; - itm_v.it_value = itm_v.it_interval; - setitimer(ITIMER_PROF, &itm_v, 0); - } -#endif - } -} - -/* u3t_boff(): turn profile sampling off. -*/ -void -u3t_boff(void) -{ - if ( u3C.wag_w & u3o_debug_cpu ) { -#if defined(U3_OS_PROF) - // Mask SIGPROF signals in this thread (and this is the only - // thread that unblocked them). - { - sigset_t set; - sigemptyset(&set); - sigaddset(&set, SIGPROF); - if ( 0 != pthread_sigmask(SIG_BLOCK, &set, NULL) ) { - u3l_log("trace: thread mask SIGPROF: %s\r\n", strerror(errno)); - } - } - - // Disable the SIGPROF timer. - { - struct itimerval itm_v = {{0}}; - setitimer(ITIMER_PROF, &itm_v, 0); - } - - // Ignore SIGPROF signals. - { - struct sigaction sig_s = {{0}}; - sigemptyset(&(sig_s.sa_mask)); - sig_s.sa_handler = SIG_IGN; - sigaction(SIGPROF, &sig_s, 0); - } -#endif - } -} - - -/* u3t_slog_cap(): slog a tank with a caption with -** a given priority c3_l (assumed 0-3). -*/ -void -u3t_slog_cap(c3_l pri_l, u3_noun cap, u3_noun tan) -{ - u3t_slog( - u3nc( - pri_l, - u3nt( - c3__rose, - u3nt(u3nt(':', ' ', u3_nul), u3_nul, u3_nul), - u3nt(cap, tan, u3_nul) - ) - ) - ); -} - - -/* u3t_slog_trace(): given a c3_l priority pri and a raw stack tax -** flop the order into start-to-end, render, and slog each item -** until done. -*/ -void -u3t_slog_trace(c3_l pri_l, u3_noun tax) -{ - // render the stack - // Note: ton is a reference to a data struct - // we have just allocated - // lit is a used as a moving cursor pointer through - // that allocated struct - // once we finish lit will be null, but ton will still - // point to the whole valid allocated data structure - // and thus we can free it safely at the end of the func - // to clean up after ourselves. - // Note: flop reverses the stack trace list 'tax' - u3_noun ton = u3dc("mook", 2, u3kb_flop(tax)); - u3_noun lit = u3t(ton); - - // print the stack one stack item at a time - while ( u3_nul != lit ) { - u3t_slog(u3nc(pri_l, u3k(u3h(lit)) )); - lit = u3t(lit); - } - - u3z(ton); -} - - -/* u3t_slog_nara(): slog only the deepest road's trace with -** c3_l priority pri -*/ -void -u3t_slog_nara(c3_l pri_l) -{ - u3_noun tax = u3k(u3R->bug.tax); - u3t_slog_trace(pri_l, tax); -} - - -/* u3t_slog_hela(): join all roads' traces together into one tax -** and pass it to slog_trace along with the given c3_l priority pri_l -*/ -void -u3t_slog_hela(c3_l pri_l) -{ - // rod_u protects us from mutating the global state - u3_road* rod_u = u3R; - - // inits to the the current road's trace - u3_noun tax = u3k(rod_u->bug.tax); - - // while there is a parent road ref ... - while ( &(u3H->rod_u) != rod_u ) { - // ... point at the next road and append its stack to tax - rod_u = u3tn(u3_road, rod_u->par_p); - tax = u3kb_weld(tax, u3k(rod_u->bug.tax)); - } - - u3t_slog_trace(pri_l, tax); -} - diff --git a/pkg/urbit/noun/urth.c b/pkg/urbit/noun/urth.c deleted file mode 100644 index 30ab44817..000000000 --- a/pkg/urbit/noun/urth.c +++ /dev/null @@ -1,908 +0,0 @@ -/* noun/urth.c -** -*/ -#include "all.h" -#include "ur/ur.h" -#include -#include -#include -#include - -/* _cu_atom_to_ref(): allocate indirect atom off-loom. -*/ -static inline ur_nref -_cu_atom_to_ref(ur_root_t* rot_u, u3a_atom* vat_u) -{ - ur_nref ref; - c3_d val_d; - - switch ( vat_u->len_w ) { - case 2: { - val_d = ((c3_d)vat_u->buf_w[1]) << 32 - | ((c3_d)vat_u->buf_w[0]); - ref = ur_coin64(rot_u, val_d); - } break; - - case 1: { - val_d = (c3_d)vat_u->buf_w[0]; - ref = ur_coin64(rot_u, val_d); - } break; - - default: { - // XX assumes little-endian - // - c3_y* byt_y = (c3_y*)vat_u->buf_w; - c3_d len_d = ((c3_d)vat_u->len_w) << 2; - - c3_assert( len_d ); - - // NB: this call will account for any trailing null bytes - // caused by an overestimate in [len_d] - // - ref = ur_coin_bytes(rot_u, len_d, byt_y); - } break; - } - - return ref; -} - -/* _cu_box_check(): check loom allocation box for relocation pointer. -*/ -static inline c3_o -_cu_box_check(u3a_noun* som_u, ur_nref* ref) -{ - u3a_box* box_u = u3a_botox(som_u); - c3_w* box_w = (void*)box_u; - - if ( 0xffffffff == box_w[0] ) { - *ref = ( ((c3_d)box_w[2]) << 32 - | ((c3_d)box_w[1]) ); - return c3y; - } - - return c3n; -} - -/* _cu_box_stash(): overwrite an allocation box with relocation pointer. -*/ -static inline void -_cu_box_stash(u3a_noun* som_u, ur_nref ref) -{ - u3a_box* box_u = u3a_botox(som_u); - c3_w* box_w = (void*)box_u; - - // overwrite u3a_atom with reallocated reference - // - box_w[0] = 0xffffffff; - box_w[1] = ref & 0xffffffff; - box_w[2] = ref >> 32; -} - -/* -** stack frame for recording head vs tail iteration -** -** $? [LOM_HEAD cell=*] -** [ref=* cell=*] -*/ - -#define LOM_HEAD 0xffffffffffffffffULL - -typedef struct _cu_frame_s -{ - ur_nref ref; - u3a_cell* cel_u; -} _cu_frame; - -typedef struct _cu_stack_s -{ - c3_w pre_w; - c3_w siz_w; - c3_w fil_w; - _cu_frame* fam_u; -} _cu_stack; - -/* _cu_from_loom_next(): advance off-loom reallocation traversal. -*/ -static inline ur_nref -_cu_from_loom_next(_cu_stack* tac_u, ur_root_t* rot_u, u3_noun a) -{ - while ( 1 ) { - // u3 direct == ur direct - // - if ( c3y == u3a_is_cat(a) ) { - return (ur_nref)a; - } - else { - u3a_noun* som_u = u3a_to_ptr(a); - ur_nref ref; - - // check for relocation pointers - // - if ( c3y == _cu_box_check(som_u, &ref) ) { - return ref; - } - // reallocate indirect atoms, stashing relocation pointers - // - else if ( c3y == u3a_is_atom(a) ) { - ref = _cu_atom_to_ref(rot_u, (u3a_atom*)som_u); - _cu_box_stash(som_u, ref); - return ref; - } - else { - u3a_cell* cel_u = (u3a_cell*)som_u; - - // reallocate the stack if full - // - if ( tac_u->fil_w == tac_u->siz_w ) { - c3_w nex_w = tac_u->pre_w + tac_u->siz_w; - tac_u->fam_u = c3_realloc(tac_u->fam_u, nex_w * sizeof(*tac_u->fam_u)); - tac_u->pre_w = tac_u->siz_w; - tac_u->siz_w = nex_w; - } - - // push a head-frame and continue into the head - // - { - _cu_frame* fam_u = &(tac_u->fam_u[tac_u->fil_w++]); - fam_u->ref = LOM_HEAD; - fam_u->cel_u = cel_u; - } - - a = cel_u->hed; - continue; - } - } - } -} - -/* _cu_from_loom(): reallocate [a] off loom, in [r]. -*/ -static ur_nref -_cu_from_loom(ur_root_t* rot_u, u3_noun a) -{ - _cu_stack tac_u = {0}; - ur_nref ref; - - tac_u.pre_w = ur_fib10; - tac_u.siz_w = ur_fib11; - tac_u.fam_u = c3_malloc(tac_u.siz_w * sizeof(*tac_u.fam_u)); - - ref = _cu_from_loom_next(&tac_u, rot_u, a); - - // incorporate reallocated ref, accounting for cells - // - while ( tac_u.fil_w ) { - // peek at the top of the stack - // - _cu_frame* fam_u = &(tac_u.fam_u[tac_u.fil_w - 1]); - - // [fam_u] is a head-frame; stash ref and continue into the tail - // - if ( LOM_HEAD == fam_u->ref ) { - fam_u->ref = ref; - ref = _cu_from_loom_next(&tac_u, rot_u, fam_u->cel_u->tel); - } - // [fam_u] is a tail-frame; cons refs and pop the stack - // - else { - ref = ur_cons(rot_u, fam_u->ref, ref); - _cu_box_stash((u3a_noun*)fam_u->cel_u, ref); - tac_u.fil_w--; - } - } - - c3_free(tac_u.fam_u); - - return ref; -} - -/* _cu_vec: parameters for cold-state hamt walk. -*/ -typedef struct _cu_vec_s { - ur_nvec_t* vec_u; - ur_root_t* rot_u; -} _cu_vec; - -/* _cu_hamt_walk(): reallocate key/value pair in hamt walk. -*/ -static void -_cu_hamt_walk(u3_noun kev, void* ptr) -{ - _cu_vec* dat_u = (_cu_vec*)ptr; - ur_nvec_t* vec_u = dat_u->vec_u; - ur_root_t* rot_u = dat_u->rot_u; - - vec_u->refs[vec_u->fill++] = _cu_from_loom(rot_u, kev); -} - -/* _cu_all_from_loom(): reallocate essential persistent state off-loom. -** -** NB: destroys the loom. -*/ -static ur_nref -_cu_all_from_loom(ur_root_t* rot_u, ur_nvec_t* cod_u) -{ - ur_nref ken = _cu_from_loom(rot_u, u3A->roc); - c3_w cod_w = u3h_wyt(u3R->jed.cod_p); - _cu_vec dat_u = { .vec_u = cod_u, .rot_u = rot_u }; - - ur_nvec_init(cod_u, cod_w); - u3h_walk_with(u3R->jed.cod_p, _cu_hamt_walk, &dat_u); - - return ken; -} - -typedef struct _cu_loom_s { - ur_dict32_t map_u; // direct->indirect mapping - u3_atom *vat; // indirect atoms - u3_noun *cel; // cells -} _cu_loom; - -/* _cu_ref_to_noun(): lookup/allocate [ref] on the loom. -*/ -static u3_noun -_cu_ref_to_noun(ur_root_t* rot_u, ur_nref ref, _cu_loom* lom_u) -{ - switch ( ur_nref_tag(ref) ) { - default: c3_assert(0); - - // all ur indirect atoms have been pre-reallocated on the loom. - // - case ur_iatom: return lom_u->vat[ur_nref_idx(ref)]; - - - // cells were allocated off-loom in cons-order, and are traversed - // in the same order: we've already relocated any one we could need here. - // - case ur_icell: return lom_u->cel[ur_nref_idx(ref)]; - - // u3 direct atoms are 31-bit, while ur direct atoms are 62-bit; - // we use a hashtable to deduplicate the non-overlapping space - // - case ur_direct: { - u3_atom vat; - - if ( 0x7fffffffULL >= ref ) { - return (u3_atom)ref; - } - else if ( ur_dict32_get(rot_u, &lom_u->map_u, ref, (c3_w*)&vat) ) { - return vat; - } - else { - { - c3_w wor_w[2] = { ref & 0xffffffff, ref >> 32 }; - vat = (c3_w)u3i_words(2, wor_w); - } - - ur_dict32_put(0, &lom_u->map_u, ref, (c3_w)vat); - return vat; - } - } break; - } -} - -/* _cu_all_to_loom(): reallocate all of [rot_u] on the loom, restore roots. -** NB: requires all roots to be cells -** does *not* track refcounts, which must be -** subsequently reconstructed via tracing. -*/ -static void -_cu_all_to_loom(ur_root_t* rot_u, ur_nref ken, ur_nvec_t* cod_u) -{ - _cu_loom lom_u = {0}; - c3_d i_d, fil_d; - - ur_dict32_grow(0, &lom_u.map_u, ur_fib11, ur_fib12); - - // allocate all atoms on the loom. - // - { - c3_d* len_d = rot_u->atoms.lens; - c3_y** byt_y = rot_u->atoms.bytes; - - fil_d = rot_u->atoms.fill; - lom_u.vat = calloc(fil_d, sizeof(u3_atom)); - - for ( i_d = 0; i_d < fil_d; i_d++ ) { - lom_u.vat[i_d] = u3i_bytes(len_d[i_d], byt_y[i_d]); - } - } - - // allocate all cells on the loom. - // - { - ur_nref* hed = rot_u->cells.heads; - ur_nref* tal = rot_u->cells.tails; - u3_noun cel; - - fil_d = rot_u->cells.fill; - lom_u.cel = c3_calloc(fil_d * sizeof(u3_noun)); - - for ( i_d = 0; i_d < fil_d; i_d++ ) { - cel = u3nc(_cu_ref_to_noun(rot_u, hed[i_d], &lom_u), - _cu_ref_to_noun(rot_u, tal[i_d], &lom_u)); - lom_u.cel[i_d] = cel; - u3r_mug(cel); - } - } - - // restore kernel reference (always a cell) - // - u3A->roc = lom_u.cel[ur_nref_idx(ken)]; - - // restore cold jet state (always cells) - // - { - c3_d max_d = cod_u->fill; - c3_d i_d; - ur_nref ref; - u3_noun kev; - - for ( i_d = 0; i_d < max_d; i_d++) { - ref = cod_u->refs[i_d]; - kev = lom_u.cel[ur_nref_idx(ref)]; - u3h_put(u3R->jed.cod_p, u3h(kev), u3k(u3t(kev))); - u3z(kev); - } - } - - // dispose of relocation pointers - // - c3_free(lom_u.cel); - c3_free(lom_u.vat); - ur_dict_free((ur_dict_t*)&lom_u.map_u); -} - -/* _cu_realloc(): hash-cons roots off-loom, reallocate on loom. -*/ -static ur_nref -_cu_realloc(FILE* fil_u, ur_root_t** tor_u, ur_nvec_t* doc_u) -{ -#ifdef U3_MEMORY_DEBUG - c3_assert(0); -#endif - - // bypassing page tracking as an optimization - // - // NB: u3e_yolo() will mark all as dirty, and - // u3e_save() will reinstate protection flags - // - if ( c3n == u3e_yolo() ) { - if ( fil_u ) { - fprintf(fil_u, "uniq: unable to bypass page tracking, continuing\r\n"); - } - } - - // stash event number - // - c3_d eve_d = u3A->eve_d; - - // reallocate kernel and cold jet state - // - ur_root_t* rot_u = ur_root_init(); - ur_nvec_t cod_u; - ur_nref ken = _cu_all_from_loom(rot_u, &cod_u); - - // print [rot_u] measurements - // - if ( fil_u ) { - ur_root_info(fil_u, rot_u); - fprintf(fil_u, "\r\n"); - } - - // reinitialize loom - // - // NB: hot jet state is not yet re-established - // - u3m_pave(c3y); - - // reallocate all nouns on the loom - // - _cu_all_to_loom(rot_u, ken, &cod_u); - - // allocate new hot jet state - // - u3j_boot(c3y); - - // establish correct refcounts via tracing - // - u3m_grab(u3_none); - - // re-establish warm jet state - // - u3j_ream(); - - // restore event number - // - u3A->eve_d = eve_d; - - // mark all pages dirty - // - u3e_foul(); - - *tor_u = rot_u; - *doc_u = cod_u; - - return ken; -} - -/* u3u_meld(): globally deduplicate memory. -*/ -#ifdef U3_MEMORY_DEBUG -void -u3u_meld(void) -{ - fprintf(stderr, "u3: unable to meld under U3_MEMORY_DEBUG\r\n"); -} -#else -void -u3u_meld(void) -{ - ur_root_t* rot_u; - ur_nvec_t cod_u; - - c3_assert( &(u3H->rod_u) == u3R ); - - _cu_realloc(stderr, &rot_u, &cod_u); - - // dispose off-loom structures - // - ur_nvec_free(&cod_u); - ur_root_free(rot_u); -} -#endif - -/* _cu_rock_path(): format rock path. -*/ -static c3_o -_cu_rock_path(c3_c* dir_c, c3_d eve_d, c3_c** out_c) -{ - c3_w nam_w = 1 + snprintf(0, 0, "%s/.urb/roc/%" PRIu64 ".jam", dir_c, eve_d); - c3_c* nam_c = c3_malloc(nam_w); - c3_i ret_i; - - ret_i = snprintf(nam_c, nam_w, "%s/.urb/roc/%" PRIu64 ".jam", dir_c, eve_d); - - if ( ret_i < 0 ) { - fprintf(stderr, "rock: path format failed (%s, %" PRIu64 "): %s\r\n", - dir_c, eve_d, strerror(errno)); - c3_free(nam_c); - return c3n; - } - else if ( ret_i >= nam_w ) { - fprintf(stderr, "rock: path format failed (%s, %" PRIu64 "): truncated\r\n", - dir_c, eve_d); - c3_free(nam_c); - return c3n; - } - - *out_c = nam_c; - return c3y; -} - -/* _cu_rock_path_make(): format rock path, creating directory if necessary.. -*/ -static c3_o -_cu_rock_path_make(c3_c* dir_c, c3_d eve_d, c3_c** out_c) -{ - c3_w nam_w = 1 + snprintf(0, 0, "%s/.urb/roc/%" PRIu64 ".jam", dir_c, eve_d); - c3_c* nam_c = c3_malloc(nam_w); - c3_i ret_i; - - // create $pier/.urb/roc, if it doesn't exist - // - // NB, $pier/.urb is guaranteed to already exist - // - { - ret_i = snprintf(nam_c, nam_w, "%s/.urb/roc", dir_c); - - if ( ret_i < 0 ) { - fprintf(stderr, "rock: path format failed (%s, %" PRIu64 "): %s\r\n", - dir_c, eve_d, strerror(errno)); - c3_free(nam_c); - return c3n; - } - else if ( ret_i >= nam_w ) { - fprintf(stderr, "rock: path format failed (%s, %" PRIu64 "): truncated\r\n", - dir_c, eve_d); - c3_free(nam_c); - return c3n; - } - - if ( c3_mkdir(nam_c, 0700) - && (EEXIST != errno) ) - { - fprintf(stderr, "rock: directory create failed (%s, %" PRIu64 "): %s\r\n", - dir_c, eve_d, strerror(errno)); - c3_free(nam_c); - return c3n; - } - } - - ret_i = snprintf(nam_c, nam_w, "%s/.urb/roc/%" PRIu64 ".jam", dir_c, eve_d); - - if ( ret_i < 0 ) { - fprintf(stderr, "rock: path format failed (%s, %" PRIu64 "): %s\r\n", - dir_c, eve_d, strerror(errno)); - c3_free(nam_c); - return c3n; - } - else if ( ret_i >= nam_w ) { - fprintf(stderr, "rock: path format failed (%s, %" PRIu64 "): truncated\r\n", - dir_c, eve_d); - c3_free(nam_c); - return c3n; - } - - *out_c = nam_c; - return c3y; -} - -static c3_o -_cu_rock_save(c3_c* dir_c, c3_d eve_d, c3_d len_d, c3_y* byt_y) -{ - c3_i fid_i; - - // open rock file, creating the containing directory if necessary - // - { - c3_c* nam_c; - - if ( c3n == _cu_rock_path_make(dir_c, eve_d, &nam_c) ) { - return c3n; - } - - if ( -1 == (fid_i = c3_open(nam_c, O_RDWR | O_CREAT | O_TRUNC, 0644)) ) { - fprintf(stderr, "rock: c3_open failed (%s, %" PRIu64 "): %s\r\n", - dir_c, eve_d, strerror(errno)); - c3_free(nam_c); - return c3n; - } - - c3_free(nam_c); - } - - // write jam-buffer into [fid_i] - // - // XX deduplicate with _write() wrapper in term.c - // - { - ssize_t ret_i; - - while ( len_d > 0 ) { - c3_w lop_w = 0; - // retry interrupt/async errors - // - do { - // abort pathological retry loop - // - if ( 100 == ++lop_w ) { - fprintf(stderr, "rock: write loop: %s\r\n", strerror(errno)); - close(fid_i); - // XX unlink file? - // - return c3n; - } - - ret_i = write(fid_i, byt_y, len_d); - } - while ( (ret_i < 0) - && ( (errno == EINTR) - || (errno == EAGAIN) - || (errno == EWOULDBLOCK) )); - - // assert on true errors - // - // NB: can't call u3l_log here or we would re-enter _write() - // - if ( ret_i < 0 ) { - fprintf(stderr, "rock: write failed %s\r\n", strerror(errno)); - close(fid_i); - // XX unlink file? - // - return c3n; - } - // continue partial writes - // - else { - len_d -= ret_i; - byt_y += ret_i; - } - } - } - - close(fid_i); - - return c3y; -} - -/* u3u_cram(): globably deduplicate memory, and write a rock to disk. -*/ -#ifdef U3_MEMORY_DEBUG -c3_o -u3u_cram(c3_c* dir_c, c3_d eve_d) -{ - fprintf(stderr, "u3: unable to cram under U3_MEMORY_DEBUG\r\n"); - return c3n; -} -#else -c3_o -u3u_cram(c3_c* dir_c, c3_d eve_d) -{ - c3_o ret_o = c3y; - c3_d len_d; - c3_y* byt_y; - - c3_assert( &(u3H->rod_u) == u3R ); - - { - ur_root_t* rot_u; - ur_nvec_t cod_u; - ur_nref ken = _cu_realloc(stderr, &rot_u, &cod_u); - - { - ur_nref roc = u3_nul; - c3_d max_d = cod_u.fill; - c3_d i_d; - - // cons vector of cold jet-state entries onto a list - // - for ( i_d = 0; i_d < max_d; i_d++) { - roc = ur_cons(rot_u, cod_u.refs[i_d], roc); - } - - { - c3_c* has_c = "hashboard"; - ur_nref has = ur_coin_bytes(rot_u, strlen(has_c), (c3_y*)has_c); - roc = ur_cons(rot_u, has, roc); - } - - roc = ur_cons(rot_u, ur_coin64(rot_u, c3__arvo), - ur_cons(rot_u, ken, roc)); - - ur_jam(rot_u, roc, &len_d, &byt_y); - } - - // dispose off-loom structures - // - ur_nvec_free(&cod_u); - ur_root_free(rot_u); - } - - // write jam-buffer into pier - // - if ( c3n == _cu_rock_save(dir_c, eve_d, len_d, byt_y) ) { - ret_o = c3n; - } - - c3_free(byt_y); - - return ret_o; -} -#endif - -/* u3u_mmap_read(): open and mmap the file at [pat_c] for reading. -*/ -c3_o -u3u_mmap_read(c3_c* cap_c, c3_c* pat_c, c3_d* out_d, c3_y** out_y) -{ - c3_i fid_i; - c3_d len_d; - - // open file - // - if ( -1 == (fid_i = c3_open(pat_c, O_RDONLY, 0644)) ) { - fprintf(stderr, "%s: c3_open failed (%s): %s\r\n", - cap_c, pat_c, strerror(errno)); - return c3n; - } - - // measure file - // - { - struct stat buf_b; - - if ( -1 == fstat(fid_i, &buf_b) ) { - fprintf(stderr, "%s: stat failed (%s): %s\r\n", - cap_c, pat_c, strerror(errno)); - close(fid_i); - return c3n; - } - - len_d = buf_b.st_size; - } - - // mmap file - // - { - void* ptr_v; - - if ( MAP_FAILED == (ptr_v = mmap(0, len_d, PROT_READ, MAP_SHARED, fid_i, 0)) ) { - fprintf(stderr, "%s: mmap failed (%s): %s\r\n", - cap_c, pat_c, strerror(errno)); - close(fid_i); - return c3n; - } - - *out_d = len_d; - *out_y = (c3_y*)ptr_v; - } - - // close file - // - close(fid_i); - - return c3y; -} - -/* u3u_mmap(): open/create file-backed mmap at [pat_c] for read/write. -*/ -c3_o -u3u_mmap(c3_c* cap_c, c3_c* pat_c, c3_d len_d, c3_y** out_y) -{ - c3_i fid_i; - - // open file - // - if ( -1 == (fid_i = c3_open(pat_c, O_RDWR | O_CREAT | O_TRUNC, 0644)) ) { - fprintf(stderr, "%s: c3_open failed (%s): %s\r\n", - cap_c, pat_c, strerror(errno)); - return c3n; - } - - // grow [fid_i] to [len_w] - // - // XX build with _FILE_OFFSET_BITS == 64 ? - // - if ( 0 != ftruncate(fid_i, len_d) ) { - fprintf(stderr, "%s: ftruncate grow %s: %s\r\n", - cap_c, pat_c, strerror(errno)); - close(fid_i); - return c3n; - } - - // mmap file - // - { - void* ptr_v; - - if ( MAP_FAILED == (ptr_v = mmap(0, len_d, PROT_READ|PROT_WRITE, MAP_SHARED, fid_i, 0)) ) { - fprintf(stderr, "%s: mmap failed (%s): %s\r\n", - cap_c, pat_c, strerror(errno)); - close(fid_i); - return c3n; - } - - *out_y = (c3_y*)ptr_v; - } - - // close file - // - close(fid_i); - - return c3y; -} - -/* u3u_mmap_save(): sync file-backed mmap. -*/ -c3_o -u3u_mmap_save(c3_c* cap_c, c3_c* pat_c, c3_d len_d, c3_y* byt_y) -{ - if ( 0 != msync(byt_y, len_d, MS_SYNC) ) { - fprintf(stderr, "%s: msync %s: %s\r\n", cap_c, pat_c, strerror(errno)); - return c3n; - } - - return c3y; -} - -/* u3u_munmap(): unmap the region at [byt_y]. -*/ -c3_o -u3u_munmap(c3_d len_d, c3_y* byt_y) -{ - if ( 0 != munmap(byt_y, len_d) ) { - return c3n; - } - - return c3y; -} - -/* u3u_uncram(): restore persistent state from a rock. -*/ -c3_o -u3u_uncram(c3_c* dir_c, c3_d eve_d) -{ - c3_c* nam_c; - c3_d len_d; - c3_y* byt_y; - - // load rock file into buffer - // - if ( c3n == _cu_rock_path(dir_c, eve_d, &nam_c) ) { - fprintf(stderr, "uncram: failed to make rock path (%s, %" PRIu64 ")\r\n", - dir_c, eve_d); - return c3n; - } - else if ( c3n == u3u_mmap_read("rock", nam_c, &len_d, &byt_y) ) { - c3_free(nam_c); - return c3n; - } - - // bypassing page tracking as an optimization - // - // NB: u3e_yolo() will mark all as dirty, and - // u3e_save() will reinstate protection flags - // - if ( c3n == u3e_yolo() ) { - fprintf(stderr, "uncram: unable to bypass page tracking, continuing\r\n"); - } - - // reinitialize loom - // - // NB: hot jet state is not yet re-established - // - u3m_pave(c3y); - - // cue rock, restore persistent state - // - // XX errors are fatal, barring a full "u3m_reboot"-type operation. - // - { - // XX tune the initial dictionary size for less reallocation - // - u3_cue_xeno* sil_u = u3s_cue_xeno_init_with(ur_fib33, ur_fib34); - u3_weak ref = u3s_cue_xeno_with(sil_u, len_d, byt_y); - u3_noun roc, doc, tag, cod; - - u3s_cue_xeno_done(sil_u); - - if ( u3_none == ref ) { - fprintf(stderr, "uncram: failed to cue rock\r\n"); - c3_free(nam_c); - return c3n; - } - else if ( c3n == u3r_pq(ref, c3__arvo, &roc, &doc) - || (c3n == u3r_cell(doc, &tag, &cod)) - || (c3n == u3r_sing_c("hashboard", tag)) ) - { - fprintf(stderr, "uncram: failed: invalid rock format\r\n"); - u3z(ref); - c3_free(nam_c); - return c3n; - } - - u3A->roc = u3k(roc); - u3j_load(u3k(cod)); - - u3z(ref); - } - - u3u_munmap(len_d, byt_y); - - // allocate new hot jet state; re-establish warm - // - u3j_boot(c3y); - u3j_ream(); - - // restore event number - // - u3A->eve_d = eve_d; - - // mark all pages dirty - // - u3e_foul(); - - // leave rocks on disk - // - // if ( 0 != c3_unlink(nam_c) ) { - // fprintf(stderr, "uncram: failed to delete rock (%s, %" PRIu64 "): %s\r\n", - // dir_c, eve_d, strerror(errno)); - // c3_free(nam_c); - // return c3n; - // } - - c3_free(nam_c); - - return c3y; -} diff --git a/pkg/urbit/noun/vortex.c b/pkg/urbit/noun/vortex.c deleted file mode 100644 index 03d174e1f..000000000 --- a/pkg/urbit/noun/vortex.c +++ /dev/null @@ -1,323 +0,0 @@ -/* g/v.c -** -*/ -#include "all.h" -#include - -#define _CVX_LOAD 4 -#define _CVX_PEEK 22 -#define _CVX_POKE 23 -#define _CVX_WISH 10 - -/* u3v_life(): execute initial lifecycle, producing Arvo core. -*/ -u3_noun -u3v_life(u3_noun eve) -{ - u3_noun lyf = u3nt(2, u3nc(0, 3), u3nc(0, 2)); - u3_noun gat = u3n_nock_on(eve, lyf); - u3_noun cor = u3k(u3x_at(7, gat)); - - u3z(gat); - return cor; -} - -/* u3v_boot(): evaluate boot sequence, making a kernel -*/ -c3_o -u3v_boot(u3_noun eve) -{ - // ensure zero-initialized kernel - // - u3A->roc = 0; - - { - u3_noun pro = u3m_soft(0, u3v_life, eve); - - if ( u3_blip != u3h(pro) ) { - u3z(pro); - return c3n; - } - - u3A->roc = u3k(u3t(pro)); - u3z(pro); - } - - return c3y; -} - -/* _cv_lite(): load lightweight, core-only pill. -*/ -static u3_noun -_cv_lite(u3_noun pil) -{ - u3_noun eve, pro; - - { - u3_noun hed, tal; - u3x_cell(pil, &hed, &tal); - u3_assent( u3r_sing_c("ivory", hed) ); - eve = tal; - } - - u3l_log("lite: arvo formula %x\r\n", u3r_mug(pil)); - pro = u3v_life(u3k(eve)); - u3l_log("lite: core %x\r\n", u3r_mug(pro)); - - u3z(pil); - return pro; -} - -/* u3v_boot_lite(): light bootstrap sequence, just making a kernel. -*/ -c3_o -u3v_boot_lite(u3_noun pil) -{ - // ensure zero-initialized kernel - // - u3A->roc = 0; - - { - u3_noun pro = u3m_soft(0, _cv_lite, pil); - - if ( u3_blip != u3h(pro) ) { - u3z(pro); - return c3n; - } - - u3A->roc = u3k(u3t(pro)); - u3z(pro); - } - - u3l_log("lite: final state %x\r\n", u3r_mug(u3A->roc)); - - return c3y; -} - -/* _cv_nock_wish(): call wish through hardcoded interface. -*/ -static u3_noun -_cv_nock_wish(u3_noun txt) -{ - u3_noun fun, pro; - - fun = u3n_nock_on(u3k(u3A->roc), u3k(u3x_at(_CVX_WISH, u3A->roc))); - pro = u3n_slam_on(fun, txt); - - return pro; -} - -/* u3v_wish(): text expression with cache. -*/ -u3_noun -u3v_wish(const c3_c* str_c) -{ - u3t_event_trace("u3v_wish", 'b'); - u3_noun txt = u3i_string(str_c); - u3_weak exp = u3kdb_get(u3k(u3A->yot), u3k(txt)); - - if ( u3_none == exp ) { - exp = _cv_nock_wish(u3k(txt)); - - // It's probably not a good idea to use u3v_wish() - // outside the top level... (as the result is uncached) - // - if ( u3R == &u3H->rod_u ) { - u3A->yot = u3kdb_put(u3A->yot, u3k(txt), u3k(exp)); - } - } - - u3t_event_trace("u3v_wish", 'e'); - - u3z(txt); - return exp; -} - -/* u3v_do(): use a kernel gate. -*/ -u3_noun -u3v_do(const c3_c* txt_c, u3_noun sam) -{ - u3_noun gat = u3v_wish(txt_c); - u3_noun pro; - -#if 0 - if ( &u3H->rod_u == u3R ) { - pro = u3m_soft_slam(gat, sam); - } - else { - pro = u3n_slam_on(gat, sam); - } -#else - pro = u3n_slam_on(gat, sam); -#endif - - return pro; -} - -/* _cv_scot(): print atom. -*/ -static u3_noun -_cv_scot(u3_noun dim) -{ - return u3do("scot", dim); -} - -/* u3v_time(): set the reck time. -*/ -void -u3v_time(u3_noun now) -{ - u3z(u3A->now); - u3A->now = now; -} - -#if 0 -/* _cv_time_bump(): advance the reck time by a small increment. -*/ -static void -_cv_time_bump(u3_reck* rec_u) -{ - c3_d bum_d = (1ULL << 48ULL); - - u3A->now = u3ka_add(u3A->now, u3i_chubs(1, &bum_d)); -} -#endif - -/* u3v_lily(): parse little atom. -*/ -c3_o -u3v_lily(u3_noun fot, u3_noun txt, c3_l* tid_l) -{ - c3_w wad_w; - u3_noun uco = u3dc("slaw", fot, u3k(txt)); - u3_noun p_uco, q_uco; - - if ( (c3n == u3r_cell(uco, &p_uco, &q_uco)) || - (u3_nul != p_uco) || - (c3n == u3r_safe_word(q_uco, &wad_w)) || - (wad_w & 0x80000000) ) - { - u3l_log("strange lily %s\n", u3r_string(txt)); - u3z(txt); u3z(uco); return c3n; - } - else { - *tid_l = (c3_l)wad_w; - u3z(txt); u3z(uco); return c3y; - } -} - -/* u3v_peek(): query the reck namespace (protected). -*/ -u3_noun -u3v_peek(u3_noun sam) -{ - u3_noun fun = u3n_nock_on(u3k(u3A->roc), u3k(u3x_at(_CVX_PEEK, u3A->roc))); - return u3n_slam_on(fun, sam); -} - -/* u3v_poke(): insert and apply an input ovum (protected). -*/ -u3_noun -u3v_poke(u3_noun ovo) -{ - u3_noun fun = u3n_nock_on(u3k(u3A->roc), u3k(u3x_at(_CVX_POKE, u3A->roc))); - u3_noun sam = u3nc(u3k(u3A->now), ovo); - u3_noun pro; - - { - c3_w cod_w = u3a_lush(u3h(u3t(ovo))); - pro = u3n_slam_on(fun, sam); - u3a_lop(cod_w); - } - - return pro; -} - -/* u3v_tank(): dump single tank. -*/ -void -u3v_tank(u3_noun blu, c3_l tab_l, u3_noun tac) -{ - u3v_punt(blu, tab_l, u3nc(tac, u3_nul)); -} - -/* u3v_punt(): dump tank list. -*/ -void -u3v_punt(u3_noun blu, c3_l tab_l, u3_noun tac) -{ -#if 0 - u3_noun blu = u3_term_get_blew(0); -#endif - c3_l col_l = u3h(blu); - u3_noun cat = tac; - - // We are calling nock here, but hopefully need no protection. - // - while ( c3y == u3r_du(cat) ) { - u3_noun wol = u3dc("wash", u3nc(tab_l, col_l), u3k(u3h(cat))); - - u3m_wall(wol); - cat = u3t(cat); - } - u3z(tac); - u3z(blu); -} - -/* u3v_sway(): print trace. -*/ -void -u3v_sway(u3_noun blu, c3_l tab_l, u3_noun tax) -{ - u3_noun mok = u3dc("mook", 2, tax); - - u3v_punt(blu, tab_l, u3k(u3t(mok))); - u3z(mok); -} - -/* u3v_mark(): mark arvo kernel. -*/ -c3_w -u3v_mark(FILE* fil_u) -{ - u3v_arvo* arv_u = &(u3H->arv_u); - c3_w tot_w = 0; - - tot_w += u3a_maid(fil_u, " kernel", u3a_mark_noun(arv_u->roc)); - tot_w += u3a_maid(fil_u, " date", u3a_mark_noun(arv_u->now)); - tot_w += u3a_maid(fil_u, " wish cache", u3a_mark_noun(arv_u->yot)); - return u3a_maid(fil_u, "total arvo stuff", tot_w); -} - -/* u3v_reclaim(): clear ad-hoc persistent caches to reclaim memory. -*/ -void -u3v_reclaim(void) -{ - // clear the u3v_wish cache - // - // NB: this would leak if not on the home road - // - if ( &(u3H->rod_u) == u3R ) { - u3z(u3A->yot); - u3A->yot = u3_nul; - } -} - -/* u3v_rewrite_compact(): rewrite arvo kernel for compaction. -*/ -void -u3v_rewrite_compact() -{ - u3v_arvo* arv_u = &(u3H->arv_u); - - u3a_rewrite_noun(arv_u->roc); - u3a_rewrite_noun(arv_u->now); - u3a_rewrite_noun(arv_u->yot); - - arv_u->roc = u3a_rewritten_noun(arv_u->roc); - arv_u->now = u3a_rewritten_noun(arv_u->now); - arv_u->yot = u3a_rewritten_noun(arv_u->yot); -} - diff --git a/pkg/urbit/noun/xtract.c b/pkg/urbit/noun/xtract.c deleted file mode 100644 index dd3fd0f9d..000000000 --- a/pkg/urbit/noun/xtract.c +++ /dev/null @@ -1,131 +0,0 @@ -/* g/x.c -** -*/ -#include "all.h" - -/* u3x_good(): test for u3_none. -*/ -u3_noun -u3x_good(u3_weak som) -{ - return ( u3_none == som ) ? u3m_bail(c3__exit) : som; -} - -/* u3x_at (u3at): fragment. -*/ -u3_noun -u3x_at(u3_noun axe, u3_noun som) -{ - return u3x_good(u3r_at(axe, som)); -} - -/* u3x_mean(): -** -** Attempt to deconstruct `a` by axis, noun pairs; 0 terminates. -** Axes must be sorted in tree order. -*/ -void -u3x_mean(u3_noun som, ...) -{ - c3_o ret_o; - va_list ap; - - va_start(ap, som); - ret_o = u3r_vmean(som, ap); - va_end(ap); - - if ( c3n == ret_o ) { - u3m_bail(c3__exit); - } -} - -/* u3x_bite(): xtract/default $bloq and $step from $bite. -*/ -void -u3x_bite(u3_noun bite, u3_atom* bloq, u3_atom *step) -{ - if ( c3n == u3r_bite(bite, bloq, step) ) { - u3m_bail(c3__exit); - } -} - -/* u3x_cell(): -** -** Divide `a` as a cell `[b c]`. -*/ -void -u3x_cell(u3_noun a, - u3_noun* b, - u3_noun* c) -{ - if ( c3n == u3r_cell(a, b, c) ) { - u3m_bail(c3__exit); - } -} - -/* u3x_trel(): -** -** Divide `a` as a trel `[b c d]`, or bail. -*/ -void -u3x_trel(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d) -{ - if ( c3n == u3r_trel(a, b, c, d) ) { - u3m_bail(c3__exit); - } -} - -/* u3x_qual(): -** -** Divide `a` as a quadruple `[b c d e]`. -*/ -void -u3x_qual(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e) -{ - if ( c3n == u3r_qual(a, b, c, d, e) ) { - u3m_bail(c3__exit); - } -} - -/* u3x_quil(): -** -** Divide `a` as a quintuple `[b c d e f]`. -*/ -void -u3x_quil(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f) -{ - if ( c3n == u3r_quil(a, b, c, d, e, f) ) { - u3m_bail(c3__exit); - } -} - -/* u3x_hext(): -** -** Divide `a` as a hextuple `[b c d e f g]`. -*/ -void -u3x_hext(u3_noun a, - u3_noun* b, - u3_noun* c, - u3_noun* d, - u3_noun* e, - u3_noun* f, - u3_noun* g) -{ - if ( c3n == u3r_hext(a, b, c, d, e, f, g) ) { - u3m_bail(c3__exit); - } -} - diff --git a/pkg/urbit/noun/zave.c b/pkg/urbit/noun/zave.c deleted file mode 100644 index ec42c8929..000000000 --- a/pkg/urbit/noun/zave.c +++ /dev/null @@ -1,89 +0,0 @@ -/* g/z.c -** -*/ -#include "all.h" - -/* u3z_key(): construct a memo cache-key. Arguments retained. -*/ -u3_noun -u3z_key(c3_m fun, u3_noun one) -{ - return u3nc(fun, u3k(one)); -} -u3_noun -u3z_key_2(c3_m fun, u3_noun one, u3_noun two) -{ - return u3nt(fun, u3k(one), u3k(two)); -} -u3_noun -u3z_key_3(c3_m fun, u3_noun one, u3_noun two, u3_noun tri) -{ - return u3nq(fun, u3k(one), u3k(two), u3k(tri)); -} -u3_noun -u3z_key_4(c3_m fun, u3_noun one, u3_noun two, u3_noun tri, u3_noun qua) -{ - return u3nc(fun, u3nq(u3k(one), u3k(two), u3k(tri), u3k(qua))); -} -u3_noun -u3z_key_5(c3_m fun, u3_noun one, u3_noun two, u3_noun tri, u3_noun qua, u3_noun qin) -{ - return u3nc(fun, u3nq(u3k(one), u3k(two), u3k(tri), u3nc(u3k(qua), u3k(qin)))); -} - -/* u3z_find(): find in memo cache. Arguments retained. -*/ -u3_weak -u3z_find(u3_noun key) -{ - return u3h_get(u3R->cax.har_p, key); -} -u3_weak -u3z_find_m(c3_m fun, u3_noun one) -{ - u3_noun key = u3nc(fun, u3k(one)); - u3_weak val; - - val = u3h_get(u3R->cax.har_p, key); - u3z(key); - return val; -} - -/* u3z_save(): save in memo cache. TRANSFER key; RETAIN val -*/ -u3_noun -u3z_save(u3_noun key, u3_noun val) -{ - u3h_put(u3R->cax.har_p, key, u3k(val)); - u3z(key); - return val; -} - -/* u3z_save_m(): save in memo cache. Arguments retained. -*/ -u3_noun -u3z_save_m(c3_m fun, u3_noun one, u3_noun val) -{ - u3_noun key = u3nc(fun, u3k(one)); - - u3h_put(u3R->cax.har_p, key, u3k(val)); - u3z(key); - return val; -} - -/* u3z_uniq(): uniquify with memo cache. -*/ -u3_noun -u3z_uniq(u3_noun som) -{ - u3_noun key = u3nc(c3__uniq, u3k(som)); - u3_noun val = u3h_get(u3R->cax.har_p, key); - - if ( u3_none != val ) { - u3z(key); u3z(som); return val; - } - else { - u3h_put(u3R->cax.har_p, key, u3k(som)); - return som; - } -} diff --git a/pkg/urbit/shell.nix b/pkg/urbit/shell.nix deleted file mode 100644 index 62e0f72cd..000000000 --- a/pkg/urbit/shell.nix +++ /dev/null @@ -1,8 +0,0 @@ -let - - pkgs = import ../../default.nix { }; - -in pkgs.shellFor { - name = "urbit"; - packages = ps: [ ps.urbit ]; -} diff --git a/pkg/urbit/tests/ames_tests.c b/pkg/urbit/tests/ames_tests.c deleted file mode 100644 index 69ed7b9b9..000000000 --- a/pkg/urbit/tests/ames_tests.c +++ /dev/null @@ -1,48 +0,0 @@ -#include "all.h" -#include "vere/vere.h" - -/* _setup(): prepare for tests. -*/ -static void -_setup(void) -{ - u3m_init(); - u3m_pave(c3y); -} - -/* _test_ames(): spot check ames helpers -*/ -static void -_test_ames(void) -{ - u3_lane lan_u; - lan_u.pip_w = 0x7f000001; - lan_u.por_s = 12345; - - u3_noun lan = u3_ames_encode_lane(lan_u); - u3_lane nal_u = u3_ames_decode_lane(u3k(lan)); - u3_lane nal_u2 = u3_ames_decode_lane(lan); - - if ( !(lan_u.pip_w == nal_u.pip_w && lan_u.por_s == nal_u.por_s) ) { - fprintf(stderr, "ames: lane fail (a)\r\n"); - fprintf(stderr, "pip: %d, por: %d\r\n", nal_u.pip_w, nal_u.por_s); - exit(1); - } -} - -/* main(): run all test cases. -*/ -int -main(int argc, char* argv[]) -{ - _setup(); - - _test_ames(); - - // GC - // - u3m_grab(u3_none); - - fprintf(stderr, "ames okeedokee\n"); - return 0; -} diff --git a/pkg/urbit/tests/hashtable_tests.c b/pkg/urbit/tests/hashtable_tests.c deleted file mode 100644 index 6322a331c..000000000 --- a/pkg/urbit/tests/hashtable_tests.c +++ /dev/null @@ -1,245 +0,0 @@ -#include "all.h" -#include "vere/vere.h" - -// defined in noun/hashtable.c -c3_w _ch_skip_slot(c3_w mug_w, c3_w lef_w); - -/* _setup(): prepare for tests. -*/ -static void -_setup(void) -{ - u3m_init(); - u3m_pave(c3y); -} - -/* _test_bit_manipulation(): -*/ -static c3_i -_test_bit_manipulation() -{ - c3_i ret_i = 1; - - if ( sizeof(u3_noun) != sizeof(u3h_slot) ) { - fprintf(stderr, "bit manipulation: wrong size\r\n"); - ret_i = 0; - } - - u3h_slot a = 0; - - if (u3h_slot_is_null(a) != c3y) { - fprintf(stderr, "bit manipulation: nullity\r\n"); - ret_i = 0; - } - - a = u3h_noun_be_warm(a); - if (u3h_slot_is_warm(a) != c3y) { - fprintf(stderr, "bit manipulation: warmth\r\n"); - ret_i = 0; - } - - if (u3h_slot_is_null(a) != c3n) { - fprintf(stderr, "bit manipulation: nullity 2\r\n"); - ret_i = 0; - } - - a = u3h_noun_be_cold(a); - if (u3h_slot_is_warm(a) != c3n) { - fprintf(stderr, "bit manipulation: coldness\r\n"); - ret_i = 0; - } - - return ret_i; -} - -/* _test_no_cache(): test a hashtable without caching. -*/ -static c3_i -_test_no_cache(void) -{ - c3_i ret_i = 1; - c3_w max_w = 1000; - c3_w i_w; - - u3p(u3h_root) har_p = u3h_new(); - - for ( i_w = 0; i_w < max_w; i_w++ ) { - u3h_put(har_p, i_w, i_w + max_w); - } - - for ( i_w = 0; i_w < max_w; i_w++ ) { - if ( (i_w + max_w) != u3h_get(har_p, i_w) ) { - fprintf(stderr, "bit test_no_cache: get failed\r\n"); - ret_i = 0; - } - } - - u3h_free(har_p); - return ret_i; -} - -/* _test_skip_slot(): -*/ -static c3_i -_test_skip_slot(void) -{ - c3_i ret_i = 1; - - // root table - { - c3_w mug_w = 0x17 << 25; - c3_w res_w = _ch_skip_slot(mug_w, 25); - - if ( (0x18 << 25) != res_w ) { - fprintf(stderr, "bit skip_slot (a): failed\r\n"); - ret_i = 0; - } - } - - { - c3_w mug_w = 63 << 25; // 6 bits, all ones - c3_w res_w = _ch_skip_slot(mug_w, 25); - - if ( 0 != res_w ) { - fprintf(stderr, "bit skip_slot (b): failed\r\n"); - ret_i = 0; - } - } - - // child nodes - { - c3_w mug_w = 17 << 20; - c3_w res_w = _ch_skip_slot(mug_w, 20); - - if ( (18 << 20) != res_w ) { - fprintf(stderr, "bit skip_slot (c): failed\r\n"); - ret_i = 0; - } - } - - { - c3_w mug_w = 31 << 20; // 5 bits, all ones - c3_w res_w = _ch_skip_slot(mug_w, 20); - c3_assert((1 << 25) == res_w); - - if ( (1 << 25) != res_w ) { - fprintf(stderr, "bit skip_slot (d): failed\r\n"); - ret_i = 0; - } - } - - return ret_i; -} - -/* _test_cache_trimming(): ensure a caching hashtable removes stale items. -*/ -static c3_i -_test_cache_trimming(void) -{ - c3_i ret_i = 1; - c3_w max_w = 2000000; // big number - //c3_w max_w = 348000; // caused a leak before - c3_w i_w, fil_w = max_w / 10; - - u3p(u3h_root) har_p = u3h_new_cache(fil_w); - u3h_root* har_u = u3to(u3h_root, har_p); - - for ( i_w = 0; i_w < max_w; i_w++ ) { - u3_noun cel = u3nc(i_w, i_w); - u3h_put(har_p, cel, cel); - } - - { - // last thing we put in is still there - c3_w las_w = max_w - 1; - u3_noun key = u3nc(las_w, las_w); - u3_noun val = u3h_get(har_p, key); - u3z(key); - - if ( las_w != u3t(val) ) { - fprintf(stderr, "cache_trimming (a): fail\r\n"); - ret_i = 0; - } - - if ( fil_w != har_u->use_w ) { - fprintf(stderr, "cache_trimming (b): fail %d != %d\r\n", - fil_w, har_u->use_w ); - ret_i = 0; - } - - u3z(val); - } - - u3h_free(har_p); - return ret_i; -} - -/* _test_cache_replace_value(): -*/ -static c3_i -_test_cache_replace_value(void) -{ - c3_i ret_i = 1; - c3_w max_w = 100; - c3_w i_w; - - u3p(u3h_root) har_p = u3h_new_cache(max_w); - u3h_root* har_u = u3to(u3h_root, har_p); - - for ( i_w = 0; i_w < max_w; i_w++ ) { - u3h_put(har_p, i_w, i_w + max_w); - } - - for ( i_w = 0; i_w < max_w; i_w++ ) { - u3h_put(har_p, i_w, i_w + max_w + 1); - } - - if ( (2 * max_w) != u3h_get(har_p, max_w - 1) ) { - fprintf(stderr, "cache_replace (a): fail\r\n"); - ret_i = 0; - } - if ( max_w != har_u->use_w ) { - fprintf(stderr, "cache_replace (b): fail\r\n"); - fprintf(stderr, "cache_replace (b): fail %d %d\r\n", - max_w, har_u->use_w ); - ret_i = 0; - } - - u3h_free(har_p); - return ret_i; -} - -static c3_i -_test_hashtable(void) -{ - c3_i ret_i = 1; - - ret_i &= _test_bit_manipulation(); - ret_i &= _test_no_cache(); - ret_i &= _test_skip_slot(); - ret_i &= _test_cache_trimming(); - ret_i &= _test_cache_replace_value(); - - return ret_i; -} - -/* main(): run all test cases. -*/ -int -main(int argc, char* argv[]) -{ - _setup(); - - if ( !_test_hashtable() ) { - fprintf(stderr, "test_hashtable: failed\r\n"); - exit(1); - } - - // GC - // - u3m_grab(u3_none); - - fprintf(stderr, "test_hashtable: ok\r\n"); - - return 0; -} diff --git a/pkg/urbit/tests/jam_tests.c b/pkg/urbit/tests/jam_tests.c deleted file mode 100644 index eebc27fc1..000000000 --- a/pkg/urbit/tests/jam_tests.c +++ /dev/null @@ -1,264 +0,0 @@ -#include "all.h" -#include "ur/ur.h" - -/* _setup(): prepare for tests. -*/ -static void -_setup(void) -{ - u3m_init(); - u3m_pave(c3y); -} - -static void -_byte_print(c3_d out_d, - c3_y* out_y, - c3_w len_w, - const c3_y* byt_y) -{ - c3_d i_d; - - fprintf(stderr, " actual: { "); - for ( i_d = 0; i_d < out_d; i_d++ ) { - fprintf(stderr, "0x%x, ", out_y[i_d]); - } - fprintf(stderr, "}\r\n"); - fprintf(stderr, " expect: { "); - for ( i_d = 0; i_d < len_w; i_d++ ) { - fprintf(stderr, "0x%x, ", byt_y[i_d]); - } - fprintf(stderr, "}\r\n"); -} - -static c3_i -_test_jam_spec(const c3_c* cap_c, - u3_noun ref, - c3_w len_w, - const c3_y* byt_y) -{ - c3_i ret_i = 1; - c3_d out_d; - c3_y* out_y; - - { - u3s_jam_xeno(ref, &out_d, &out_y); - - if ( 0 != memcmp(out_y, byt_y, len_w) ) { - fprintf(stderr, "\033[31mjam xeno %s fail\033[0m\r\n", cap_c); - _byte_print(out_d, out_y, len_w, byt_y); - ret_i = 0; - } - - free(out_y); - } - - { - u3i_slab sab_u; - c3_w bit_w = u3s_jam_fib(&sab_u, ref); - - out_d = ((c3_d)bit_w + 0x7) >> 3; - // XX assumes little-endian - // - out_y = sab_u.buf_y; - - if ( 0 != memcmp(out_y, byt_y, len_w) ) { - fprintf(stderr, "\033[31mjam fib %s fail\033[0m\r\n", cap_c); - _byte_print(out_d, out_y, len_w, byt_y); - ret_i = 0; - } - - u3i_slab_free(&sab_u); - } - - return ret_i; -} - -static c3_i -_test_cue_spec(const c3_c* cap_c, - u3_noun ref, - c3_w len_w, - const c3_y* byt_y) -{ - c3_i ret_i = 1; - - { - u3_noun pro = u3m_soft(0, u3s_cue_atom, u3i_bytes(len_w, byt_y)); - u3_noun tag, out; - - u3x_cell(pro, &tag, &out); - - if ( u3_blip != tag ) { - fprintf(stderr, "\033[31mcue %s fail 1\033[0m\r\n", cap_c); - ret_i = 0; - } - else if ( c3n == u3r_sing(ref, out) ) { - fprintf(stderr, "\033[31mcue %s fail 2\033[0m\r\n", cap_c); - u3m_p("ref", ref); - u3m_p("out", out); - ret_i = 0; - } - - u3z(pro); - } - - { - u3_noun out; - - if ( u3_none == (out = u3s_cue_xeno(len_w, byt_y)) ) { - fprintf(stderr, "\033[31mcue %s fail 3\033[0m\r\n", cap_c); - ret_i = 0; - } - else if ( c3n == u3r_sing(ref, out) ) { - fprintf(stderr, "\033[31mcue %s fail 4\033[0m\r\n", cap_c); - u3m_p("ref", ref); - u3m_p("out", out); - ret_i = 0; - } - - u3z(out); - } - - return ret_i; -} - -static c3_i -_test_jam_roundtrip(void) -{ - c3_i ret_i = 1; - -# define TEST_CASE(a, b) \ - const c3_c* cap_c = a; \ - u3_noun ref = b; \ - ret_i &= _test_jam_spec(cap_c, ref, sizeof(res_y), res_y); \ - ret_i &= _test_cue_spec(cap_c, ref, sizeof(res_y), res_y); \ - u3z(ref); - - { - c3_y res_y[1] = { 0x2 }; - TEST_CASE("0", 0); - } - - { - c3_y res_y[1] = { 0xc }; - TEST_CASE("1", 1); - } - - { - c3_y res_y[1] = { 0x48 }; - TEST_CASE("2", 2); - } - - { - c3_y res_y[6] = { 0xc0, 0x37, 0xb, 0x9b, 0xa3, 0x3 }; - TEST_CASE("%fast", c3__fast); - } - - { - c3_y res_y[6] = { 0xc0, 0x37, 0xab, 0x63, 0x63, 0x3 }; - TEST_CASE("%full", c3__full); - } - - { - c3_y res_y[1] = { 0x29 }; - TEST_CASE("[0 0]", u3nc(0, 0)); - } - - { - c3_y res_y[2] = { 0x31, 0x3 }; - TEST_CASE("[1 1]", u3nc(1, 1)); - } - - { - c3_y res_y[2] = { 0x31, 0x12 }; - TEST_CASE("[1 2]", u3nc(1, 2)); - } - - { - c3_y res_y[2] = { 0x21, 0xd1 }; - TEST_CASE("[2 3]", u3nc(2, 3)); - } - - { - c3_y res_y[11] = { 0x1, 0xdf, 0x2c, 0x6c, 0x8e, 0xe, 0x7c, 0xb3, 0x3a, 0x36, 0x36 }; - TEST_CASE("[%fast %full]", u3nc(c3__fast, c3__full)); - } - - { - c3_y res_y[2] = { 0x71, 0xcc }; - TEST_CASE("[1 1 1]", u3nc(1, u3nc(1, 1))); - } - - { - c3_y res_y[3] = { 0x71, 0x48, 0x34 }; - TEST_CASE("[1 2 3]", u3nt(1, 2, 3)); - } - - { - c3_y res_y[12] = { 0x1, 0xdf, 0x2c, 0x6c, 0x8e, 0x1e, 0xf0, 0xcd, 0xea, 0xd8, 0xd8, 0x93 }; - TEST_CASE("[%fast %full %fast]", u3nc(c3__fast, u3nc(c3__full, c3__fast))); - } - - { - c3_y res_y[3] = { 0xc5, 0x48, 0x34 }; - TEST_CASE("[[1 2] 3]", u3nc(u3nc(1, 2), 3)); - } - - { - c3_y res_y[5] = { 0xc5, 0xc8, 0x26, 0x27, 0x1 }; - TEST_CASE("[[1 2] [1 2] 1 2]", u3nt(u3nc(1, 2), u3nc(1, 2), u3nc(1, 2))); - } - - { - c3_y res_y[6] = { 0xa5, 0x35, 0x19, 0xf3, 0x18, 0x5 }; - TEST_CASE("[[0 0] [[0 0] 1 1] 1 1]", u3nc(u3nc(0, 0), u3nc(u3nc(u3nc(0, 0), u3nc(1, 1)), u3nc(1, 1)))); - } - - { - c3_y res_y[14] = { 0x15, 0x17, 0xb2, 0xd0, 0x85, 0x59, 0xb8, 0x61, 0x87, 0x5f, 0x10, 0x54, 0x55, 0x5 }; - TEST_CASE("deep", u3nc(u3nc(u3nc(1, u3nc(u3nc(2, u3nc(u3nc(3, u3nc(u3nc(4, u3nc(u3nt(5, 6, u3nc(7, u3nc(u3nc(8, 0), 0))), 0)), 0)), 0)), 0)), 0), 0)); - } - - { - c3_y inp_y[33] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; - c3_y res_y[35] = { 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; - TEST_CASE("wide", u3i_bytes(sizeof(inp_y), inp_y)); - } - - { - c3_y inp_y[16] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xa8, 0xab, 0x60, 0xef, 0x2d, 0xd, 0x0, 0x0, 0x80 }; - c3_y res_y[19] = { 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x50, 0x57, 0xc1, 0xde, 0x5b, 0x1a, 0x0, 0x0, 0x0, 0x1 }; - TEST_CASE("date", u3i_bytes(sizeof(inp_y), inp_y)); - } - - { - u3_noun a = u3i_string("abcdefjhijklmnopqrstuvwxyz"); - c3_y res_y[32] = { - 0x1, 0xf8, 0xc, 0x13, 0x1b, 0x23, 0x2b, 0x33, 0x53, 0x43, 0x4b, - 0x53, 0x5b, 0x63, 0x6b, 0x73, 0x7b, 0x83, 0x8b, 0x93, 0x9b, 0xa3, - 0xab, 0xb3, 0xbb, 0xc3, 0xcb, 0xd3, 0x87, 0xc, 0x3d, 0x9 - }; - TEST_CASE("alpha", u3nq(u3k(a), 2, 3, a)); - } - - return ret_i; -} - -/* main(): run all test cases. -*/ -int -main(int argc, char* argv[]) -{ - _setup(); - - if ( !_test_jam_roundtrip() ) { - fprintf(stderr, "test jam: failed\r\n"); - exit(1); - } - - // GC - // - u3m_grab(u3_none); - - fprintf(stderr, "test jam: ok\r\n"); - return 0; -} diff --git a/pkg/urbit/tests/jet_tests.c b/pkg/urbit/tests/jet_tests.c deleted file mode 100644 index 2e96f2305..000000000 --- a/pkg/urbit/tests/jet_tests.c +++ /dev/null @@ -1,541 +0,0 @@ -#include "all.h" - -/* _setup(): prepare for tests. -*/ -static void -_setup(void) -{ - u3m_init(); - u3m_pave(c3y); -} - -static inline c3_i -_ud_good(c3_w num_w, const c3_c* num_c) -{ - u3_weak out; - if ( num_w != (out = u3s_sift_ud_bytes(strlen(num_c), (c3_y*)num_c)) ) { - if ( u3_none == out ) { - fprintf(stderr, "sift_ud: %s fail; expected %u\r\n", num_c, num_w); - } - else { - fprintf(stderr, "sift_ud: %s wrong; expected %u: actual %u\r\n", num_c, num_w, out); - } - return 0; - } - - return 1; -} - -static inline c3_i -_ud_fail(const c3_c* num_c) -{ - u3_weak out; - if ( u3_none != (out = u3s_sift_ud_bytes(strlen(num_c), (c3_y*)num_c)) ) { - u3m_p("out", out); - fprintf(stderr, "sift_ud: %s expected fail\r\n", num_c); - return 0; - } - - return 1; -} - -static c3_i -_test_sift_ud(void) -{ - c3_i ret_i = 1; - - ret_i &= _ud_good(0, "0"); - ret_i &= _ud_good(1, "1"); - ret_i &= _ud_good(12, "12"); - ret_i &= _ud_good(123, "123"); - ret_i &= _ud_good(1234, "1.234"); - ret_i &= _ud_good(12345, "12.345"); - ret_i &= _ud_good(123456, "123.456"); - ret_i &= _ud_good(1234567, "1.234.567"); - ret_i &= _ud_good(12345678, "12.345.678"); - ret_i &= _ud_good(123456789, "123.456.789"); - ret_i &= _ud_good(100000000, "100.000.000"); - ret_i &= _ud_good(101101101, "101.101.101"); - ret_i &= _ud_good(201201201, "201.201.201"); - ret_i &= _ud_good(302201100, "302.201.100"); - - ret_i &= _ud_fail("01"); - ret_i &= _ud_fail("02"); - ret_i &= _ud_fail("003"); - ret_i &= _ud_fail("1234"); - ret_i &= _ud_fail("1234.5"); - ret_i &= _ud_fail("1234.567.8"); - ret_i &= _ud_fail("1234.56..78."); - ret_i &= _ud_fail("123.45a"); - ret_i &= _ud_fail(".123.456"); - - { - c3_c* num_c = "4.294.967.296"; - u3_weak out = u3s_sift_ud_bytes(strlen(num_c), (c3_y*)num_c); - u3_atom pro = u3qc_bex(32); - - if ( u3_none == out ) { - fprintf(stderr, "sift_ud: (bex 32) fail\r\n"); - ret_i = 0; - } - - if ( c3n == u3r_sing(pro, out) ) { - u3m_p("out", out); - fprintf(stderr, "sift_ud: (bex 32) wrong\r\n"); - ret_i = 0; - } - - u3z(out); u3z(pro); - } - - - { - c3_c* num_c = "340.282.366.920.938.463.463.374.607.431.768.211.456"; - u3_weak out = u3s_sift_ud_bytes(strlen(num_c), (c3_y*)num_c); - u3_atom pro = u3qc_bex(128); - - if ( u3_none == out ) { - fprintf(stderr, "sift_ud: (bex 128) fail\r\n"); - ret_i = 0; - } - - if ( c3n == u3r_sing(pro, out) ) { - u3m_p("out", out); - fprintf(stderr, "sift_ud: (bex 128) wrong\r\n"); - ret_i = 0; - } - - u3z(out); u3z(pro); - } - - return ret_i; -} - -static c3_i -_test_en_base16(void) -{ - c3_i ret_i = 1; - - { - u3_atom dat = 0xaa; - u3_atom pro = u3qe_en_base16(u3r_met(3, dat), dat); - - if ( c3n == u3r_sing_c("aa", pro) ) { - fprintf(stderr, "en_base16: fail (a)\r\n"); - ret_i = 0; - } - - u3z(pro); - } - - { - u3_atom dat = 0x1234; - u3_atom pro = u3qe_en_base16(u3r_met(3, dat), dat); - - if ( c3n == u3r_sing_c("1234", pro) ) { - fprintf(stderr, "en_base16: fail (b)\r\n"); - ret_i = 0; - } - - u3z(pro); - } - - { - u3_atom dat = 0xf012; - u3_atom pro = u3qe_en_base16(u3r_met(3, dat), dat); - - if ( c3n == u3r_sing_c("f012", pro) ) { - fprintf(stderr, "en_base16: fail (c)\r\n"); - ret_i = 0; - } - - u3z(pro); - } - - { - u3_atom dat = 0x10b; - u3_atom pro = u3qe_en_base16(u3r_met(3, dat), dat); - - if ( c3n == u3r_sing_c("010b", pro) ) { - fprintf(stderr, "en_base16: fail (d)\r\n"); - ret_i = 0; - } - - u3z(pro); - } - - { - u3_atom pro = u3qe_en_base16(3, 0x1234); - - if ( c3n == u3r_sing_c("001234", pro) ) { - fprintf(stderr, "en_base16: fail (e)\r\n"); - ret_i = 0; - } - - u3z(pro); - } - - { - u3_atom pro = u3qe_en_base16(1, 0x1234); - - if ( c3n == u3r_sing_c("34", pro) ) { - fprintf(stderr, "en_base16: fail (f)\r\n"); - ret_i = 0; - } - - u3z(pro); - } - - return ret_i; -} - - -static c3_i -_test_de_base16(void) -{ - c3_i ret_i = 1; - - { - u3_noun inp = u3i_string("aa"); - u3_noun pro = u3qe_de_base16(inp); - u3_atom len, dat; - - if ( c3n == u3r_pq(pro, u3_nul, &len, &dat) ) { - fprintf(stderr, "de_base16: fail cell (a)\r\n"); - ret_i = 0; - } - - if ( 1 != len ) { - fprintf(stderr, "de_base16: fail len (a)\r\n"); - ret_i = 0; - } - - if ( 0xaa != dat ) { - fprintf(stderr, "de_base16: fail dat (a)\r\n"); - ret_i = 0; - } - - u3z(inp); u3z(pro); - } - - { - u3_noun inp = u3i_string("1234"); - u3_noun pro = u3qe_de_base16(inp); - u3_atom len, dat; - - if ( c3n == u3r_pq(pro, u3_nul, &len, &dat) ) { - fprintf(stderr, "de_base16: fail cell (b)\r\n"); - ret_i = 0; - } - - if ( 2 != len ) { - fprintf(stderr, "de_base16: fail len (b)\r\n"); - ret_i = 0; - } - - if ( 0x1234 != dat ) { - fprintf(stderr, "de_base16: fail dat (b)\r\n"); - ret_i = 0; - } - - u3z(inp); u3z(pro); - } - - { - u3_noun inp = u3i_string("f012"); - u3_noun pro = u3qe_de_base16(inp); - u3_atom len, dat; - - if ( c3n == u3r_pq(pro, u3_nul, &len, &dat) ) { - fprintf(stderr, "de_base16: fail cell (c)\r\n"); - ret_i = 0; - } - - if ( 2 != len ) { - fprintf(stderr, "de_base16: fail len (c)\r\n"); - ret_i = 0; - } - - if ( 0xf012 != dat ) { - fprintf(stderr, "de_base16: fail dat (c)\r\n"); - ret_i = 0; - } - - u3z(inp); u3z(pro); - } - - { - u3_noun inp = u3i_string("010b"); - u3_noun pro = u3qe_de_base16(inp); - u3_atom len, dat; - - if ( c3n == u3r_pq(pro, u3_nul, &len, &dat) ) { - fprintf(stderr, "de_base16: fail cell (d)\r\n"); - ret_i = 0; - } - - if ( 2 != len ) { - fprintf(stderr, "de_base16: fail len (d)\r\n"); - ret_i = 0; - } - - if ( 0x10b != dat ) { - fprintf(stderr, "de_base16: fail dat (d)\r\n"); - ret_i = 0; - } - - u3z(inp); u3z(pro); - } - - { - u3_noun inp = u3i_string("10b"); - u3_noun pro = u3qe_de_base16(inp); - u3_atom len, dat; - - if ( c3n == u3r_pq(pro, u3_nul, &len, &dat) ) { - fprintf(stderr, "de_base16: fail cell (e)\r\n"); - ret_i = 0; - } - - if ( 2 != len ) { - fprintf(stderr, "de_base16: fail len (e)\r\n"); - ret_i = 0; - } - - if ( 0x10b != dat ) { - fprintf(stderr, "de_base16: fail dat (e)\r\n"); - ret_i = 0; - } - - u3z(inp); u3z(pro); - } - - { - u3_noun inp = u3i_string("001234"); - u3_noun pro = u3qe_de_base16(inp); - u3_atom len, dat; - - if ( c3n == u3r_pq(pro, u3_nul, &len, &dat) ) { - fprintf(stderr, "de_base16: fail cell (f)\r\n"); - ret_i = 0; - } - - if ( 3 != len ) { - fprintf(stderr, "de_base16: fail len (f)\r\n"); - ret_i = 0; - } - - if ( 0x1234 != dat ) { - fprintf(stderr, "de_base16: fail dat (f)\r\n"); - ret_i = 0; - } - - u3z(inp); u3z(pro); - } - - return ret_i; -} - -static c3_i -_test_base16(void) -{ - c3_i ret_i = 1; - - ret_i &= _test_en_base16(); - ret_i &= _test_de_base16(); - - return ret_i; -} - -static c3_w -_fein_ob_w(c3_w inp_w) -{ - u3_atom inp = u3i_word(inp_w); - u3_atom act = u3qe_fein_ob(inp); - c3_w act_w = u3r_word(0, act); - u3z(inp); u3z(act); - return act_w; -} - -static c3_i -_expect_fein_ob_w(c3_w inp_w, c3_w exp_w) -{ - c3_w act_w = _fein_ob_w(inp_w); - - if ( act_w != exp_w ) { - fprintf(stderr, "fein: inp=0x%08x exp=0x%08x act=0x%08x\n", - inp_w, exp_w, act_w); - return 0; - } - - return 1; -} - -static c3_i -_test_fein_ob(void) -{ - c3_i ret_i = 1; - - ret_i &= _expect_fein_ob_w(0, 0); - ret_i &= _expect_fein_ob_w(0xffff, 0xffff); - ret_i &= _expect_fein_ob_w(0x1b08f, 0x76b920e5); - ret_i &= _expect_fein_ob_w(0x10000, 0x423e60bf); - ret_i &= _expect_fein_ob_w(0x10001, 0xd4400acb); - ret_i &= _expect_fein_ob_w(0x10002, 0xf429043); - ret_i &= _expect_fein_ob_w(0x10000000, 0xa04bc7fa); - ret_i &= _expect_fein_ob_w(0x1234abcd, 0x686f6c25); - ret_i &= _expect_fein_ob_w(0xabcd1234, 0x4a220c8); - ret_i &= _expect_fein_ob_w(0xdeadbeef, 0x909bc4a9); - ret_i &= _expect_fein_ob_w(0xfffff, 0x6746b96b); - ret_i &= _expect_fein_ob_w(0xffffffff, 0xbba4dcce); - - return ret_i; -} - -static c3_w -_fynd_ob_w(c3_w inp_w) -{ - u3_atom inp = u3i_word(inp_w); - u3_atom act = u3qe_fynd_ob(inp); - c3_w act_w = u3r_word(0, act); - u3z(inp); u3z(act); - return act_w; -} - -static c3_i -_expect_fynd_ob_w(c3_w exp_w, c3_w inp_w) -{ - c3_w act_w = _fynd_ob_w(inp_w); - - if ( act_w != exp_w ) { - fprintf(stderr, "fynd: inp=0x%08x exp=0x%08x act=0x%08x\n", - inp_w, exp_w, act_w); - return 0; - } - - return 1; -} - -static c3_i -_test_fynd_ob(void) -{ - c3_i ret_i = 1; - - ret_i &= _expect_fynd_ob_w(0, 0); - ret_i &= _expect_fynd_ob_w(0xffff, 0xffff); - ret_i &= _expect_fynd_ob_w(0x10000, 0x423e60bf); - ret_i &= _expect_fynd_ob_w(0x10001, 0xd4400acb); - ret_i &= _expect_fynd_ob_w(0x10002, 0xf429043); - ret_i &= _expect_fynd_ob_w(0x10000000, 0xa04bc7fa); - ret_i &= _expect_fynd_ob_w(0x1234abcd, 0x686f6c25); - ret_i &= _expect_fynd_ob_w(0xabcd1234, 0x4a220c8); - ret_i &= _expect_fynd_ob_w(0xdeadbeef, 0x909bc4a9); - ret_i &= _expect_fynd_ob_w(0xfffff, 0x6746b96b); - ret_i &= _expect_fynd_ob_w(0xffffffff, 0xbba4dcce); - - return ret_i; -} - -static c3_i -_exhaust_roundtrip_fein_fynd_ob(void) -{ - c3_i ret_i = 1; - c3_w fyn_w, i_w; - - { - u3_atom fen, fyn; - - for ( i_w = 0x10000; i_w < 0x80000000; i_w++ ) { - fen = u3qe_fein_ob(i_w); - fyn = u3qe_fynd_ob(fen); - fyn_w = u3r_word(0, fyn); - - if ( i_w != fyn_w ) { - fprintf(stderr, "fein/fynd: inp=0x%08x fein=0x%08x fynd=0x%08x\n", - i_w, u3r_word(0, fen), fyn_w); - ret_i = 0; - } - u3z(fen); u3z(fyn); - - if ( !(i_w % 0x1000000) ) { - fprintf(stderr, "fein/fynd: 0x%x done\n", i_w); - } - } - } - - { - c3_w fen_w; - - do { - fen_w = _fein_ob_w(i_w); - fyn_w = _fynd_ob_w(fen_w); - if ( i_w != fyn_w ) { - fprintf(stderr, "fein/fynd: inp=0x%08x fein=0x%08x fynd=0x%08x\n", - i_w, fen_w, fyn_w); - ret_i = 0; - } - - if ( !(i_w % 0x1000000) ) { - fprintf(stderr, "fein/fynd: 0x%x done\n", i_w); - } - } - while ( ++i_w ); - } - - return ret_i; -} - -static c3_i -_test_ob(void) -{ - c3_i ret_i = 1; - ret_i &= _test_fein_ob(); - ret_i &= _test_fynd_ob(); - // disabled, takes almost ~m15 - // - // ret_i &= _exhaust_roundtrip_fein_fynd_ob(); - return ret_i; -} - -static c3_i -_test_jets(void) -{ - c3_i ret_i = 1; - - if ( !_test_sift_ud() ) { - fprintf(stderr, "test jets: sift_ud: failed\r\n"); - ret_i = 0; - } - - if ( !_test_base16() ) { - fprintf(stderr, "test jets: base16: failed\r\n"); - ret_i = 0; - } - - if ( !_test_ob() ) { - fprintf(stderr, "test jets: ob: failed\r\n"); - ret_i = 0; - } - - return ret_i; -} - -/* main(): run all test cases. -*/ -int -main(int argc, char* argv[]) -{ - _setup(); - - if ( !_test_jets() ) { - fprintf(stderr, "test jets: failed\r\n"); - exit(1); - } - - // GC - // - u3m_grab(u3_none); - - fprintf(stderr, "test jets: ok\r\n"); - return 0; -} diff --git a/pkg/urbit/tests/mug_tests.c b/pkg/urbit/tests/mug_tests.c deleted file mode 100644 index 7ac9783d2..000000000 --- a/pkg/urbit/tests/mug_tests.c +++ /dev/null @@ -1,245 +0,0 @@ -#include "all.h" - -/* _setup(): prepare for tests. -*/ -static void -_setup(void) -{ - u3m_init(); - u3m_pave(c3y); -} - -/* _test_mug(): spot check u3r_mug hashes. -*/ -static c3_i -_test_mug(void) -{ - c3_i ret_i = 1; - - if ( 0x4d441035 != u3r_mug_c("Hello, world!") ) { - fprintf(stderr, "fail (a)\r\n"); - ret_i = 0; - } - - { - u3_noun a = u3i_string("Hello, world!"); - - if ( 0x4d441035 != u3r_mug(a) ) { - fprintf(stderr, "fail (b)\r\n"); - ret_i = 0; - } - - u3z(a); - } - - { - c3_y byt_y[1]; - - if ( 0x79ff04e8 != u3r_mug_bytes(0, 0) ) { - fprintf(stderr, "fail (c) (0)\r\n"); - ret_i = 0; - } - - byt_y[0] = 1; - - if ( 0x715c2a60 != u3r_mug_bytes(byt_y, 1) ) { - fprintf(stderr, "fail (c) (1)\r\n"); - ret_i = 0; - } - - byt_y[0] = 2; - - if ( 0x718b9468 != u3r_mug_bytes(byt_y, 1) ) { - fprintf(stderr, "fail (c) (2)\r\n"); - ret_i = 0; - } - } - - if ( 0x3a811aec != u3r_mug_both(0x715c2a60, u3r_mug_cell(2, 3)) ) { - fprintf(stderr, "fail (d)\r\n"); - ret_i = 0; - } - - - { - if ( 0x192f5588 != u3r_mug_cell(0, 0) ) { - fprintf(stderr, "fail (e) (1)\r\n"); - ret_i = 0; - } - - if ( 0x6b32ec46 != u3r_mug_cell(1, 1) ) { - fprintf(stderr, "fail (e) (2)\r\n"); - ret_i = 0; - } - - if ( 0x2effe10 != u3r_mug_cell(2, 2) ) { - fprintf(stderr, "fail (e) (3)\r\n"); - ret_i = 0; - } - } - - { - u3_noun a = u3i_string("xxxxxxxxxxxxxxxxxxxxxxxxxxxx"); - - if ( 0x64dfda5c != u3r_mug(a) ) { - fprintf(stderr, "fail (f)\r\n"); - ret_i = 0; - } - - u3z(a); - } - - { - u3_noun a = u3qc_bex(32); - - if ( 0x7cefb7f != u3r_mug_cell(0, a) ) { - fprintf(stderr, "fail (g)\r\n"); - ret_i = 0; - } - - u3z(a); - } - - { - u3_noun a = u3ka_dec(u3qc_bex(128)); - - if ( 0x2aa06bfc != u3r_mug_cell(a, 1) ) { - fprintf(stderr, "fail (h)\r\n"); - ret_i = 0; - } - - u3z(a); - } - - { - // stick some zero bytes in a string - // - u3_noun str = u3kc_lsh(3, 1, - u3kc_mix(u3qc_bex(212), - u3i_string("abcdefjhijklmnopqrstuvwxyz"))); - - c3_w byt_w = u3r_met(3, str); - c3_w wor_w = u3r_met(5, str); - c3_y* str_y = c3_malloc(byt_w); - c3_w* str_w = c3_malloc(4 * wor_w); - c3_d str_d = 0; - - u3r_bytes(0, byt_w, str_y, str); - u3r_words(0, wor_w, str_w, str); - - str_d |= str_w[0]; - str_d |= ((c3_d)str_w[1] << 32ULL); - - if ( 0x34d08717 != u3r_mug(str) ) { - fprintf(stderr, "fail (i) (1) \r\n"); - ret_i = 0; - } - if ( 0x34d08717 != u3r_mug_bytes(str_y, byt_w) ) { - fprintf(stderr, "fail (i) (2)\r\n"); - ret_i = 0; - } - if ( 0x34d08717 != u3r_mug_words(str_w, wor_w) ) { - fprintf(stderr, "fail (i) (3)\r\n"); - ret_i = 0; - } - if ( u3r_mug_words(str_w, 2) != u3r_mug_chub(str_d) ) { - fprintf(stderr, "fail (i) (4)\r\n"); - ret_i = 0; - } - - c3_free(str_y); - c3_free(str_w); - u3z(str); - } - - { - c3_w som_w[4] = { 0, 0, 0, 1 }; - u3_noun som = u3i_words(4, som_w); - - if ( 0x519bd45c != u3r_mug(som) ) { - fprintf(stderr, "fail (j) (1)\r\n"); - ret_i = 0; - } - - if ( 0x519bd45c != u3r_mug_words(som_w, 4) ) { - fprintf(stderr, "fail (j) (2)\r\n"); - ret_i = 0; - } - - u3z(som); - } - - { - c3_w som_w[4] = { 0, 1, 0, 1 }; - u3_noun som = u3i_words(4, som_w); - - if ( 0x540eb8a9 != u3r_mug(som) ) { - fprintf(stderr, "fail (k) (1)\r\n"); - ret_i = 0; - } - - if ( 0x540eb8a9 != u3r_mug_words(som_w, 4) ) { - fprintf(stderr, "fail (k) (2)\r\n"); - ret_i = 0; - } - - u3z(som); - } - - { - c3_w som_w[4] = { 1, 1, 0, 1 }; - u3_noun som = u3i_words(4, som_w); - - if ( 0x319d28f9 != u3r_mug(som) ) { - fprintf(stderr, "fail (l) (1)\r\n"); - ret_i = 0; - } - - if ( 0x319d28f9 != u3r_mug_words(som_w, 4) ) { - fprintf(stderr, "fail (l) (2)\r\n"); - ret_i = 0; - } - - u3z(som); - } - - { - c3_w som_w[4] = { 0, 0, 0, 0xffff }; - u3_noun som = u3i_words(4, som_w); - - if ( 0x5230a260 != u3r_mug(som) ) { - fprintf(stderr, "fail (m) (1)\r\n"); - ret_i = 0; - } - - if ( 0x5230a260 != u3r_mug_words(som_w, 4) ) { - fprintf(stderr, "fail (m) (2)\r\n"); - ret_i = 0; - } - - u3z(som); - } - - return ret_i; -} - -/* main(): run all test cases. -*/ -int -main(int argc, char* argv[]) -{ - _setup(); - - if ( !_test_mug() ) { - fprintf(stderr, "test_mug: failed\r\n"); - exit(1); - } - - // GC - // - u3m_grab(u3_none); - - fprintf(stderr, "test_mug: ok\n"); - - return 0; -} diff --git a/pkg/urbit/tests/newt_tests.c b/pkg/urbit/tests/newt_tests.c deleted file mode 100644 index 043151784..000000000 --- a/pkg/urbit/tests/newt_tests.c +++ /dev/null @@ -1,353 +0,0 @@ -#include "all.h" -#include "vere/vere.h" - -/* _setup(): prepare for tests. -*/ -static void -_setup(void) -{ - u3m_init(); - u3m_pave(c3y); -} - -/* _newt_encode(): synchronous serialization into a single buffer, for test purposes -*/ -static c3_y* -_newt_encode(u3_atom mat, c3_w* len_w) -{ - c3_w met_w = u3r_met(3, mat); - c3_y* buf_y; - - *len_w = 5 + met_w; - buf_y = c3_malloc(*len_w); - - // write header - // - buf_y[0] = 0x0; - buf_y[1] = ( met_w & 0xff); - buf_y[2] = ((met_w >> 8) & 0xff); - buf_y[3] = ((met_w >> 16) & 0xff); - buf_y[4] = ((met_w >> 24) & 0xff); - - u3r_bytes(0, met_w, buf_y + 5, mat); - u3z(mat); - - return buf_y; -} - -static c3_w -_moat_length(u3_moat* mot_u) -{ - u3_meat* met_u = mot_u->ext_u; - c3_w len_w = 0; - - while ( met_u ) { - met_u = met_u->nex_u; - len_w++; - } - - return len_w; -} - -/* _test_newt_smol(): various scenarios with small messages -*/ -static void -_test_newt_smol(void) -{ - // =(2 (jam 0)) - // - u3_atom a = u3ke_jam(0); - u3_moat mot_u; - c3_w len_w; - c3_y* buf_y; - - memset(&mot_u, 0, sizeof(u3_moat)); - - // one message one buffer - // - { - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - u3_newt_decode(&mot_u, buf_y, len_w); - - if ( 1 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt smol fail (a)\n"); - exit(1); - } - } - - // two messages one buffer - // - { - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - - buf_y = c3_realloc(buf_y, 2 * len_w); - memcpy(buf_y + len_w, buf_y, len_w); - len_w = 2 * len_w; - - u3_newt_decode(&mot_u, buf_y, len_w); - - if ( 2 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt smol fail (b)\n"); - exit(1); - } - } - - // one message two buffers - // - { - c3_y* end_y; - - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - - end_y = c3_malloc(1); - end_y[0] = buf_y[len_w - 1]; - - u3_newt_decode(&mot_u, buf_y, len_w - 1); - - if ( 0 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt smol fail (c)\n"); - exit(1); - } - - u3_newt_decode(&mot_u, end_y, 1); - - if ( 1 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt smol fail (d)\n"); - exit(1); - } - } - - // two messages two buffers (overlapping length) - // - { - c3_y* haf_y; - c3_w haf_w, dub_w; - - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - - dub_w = 2 * len_w; - haf_w = len_w / 2; - - // buf_y is all of message one, half of message two (not a full length) - // - buf_y = c3_realloc(buf_y, dub_w - haf_w); - memcpy(buf_y + len_w, buf_y, len_w - haf_w); - - // haf_y is the second half of message two - // - haf_y = c3_malloc(haf_w); - memcpy(haf_y, buf_y + (len_w - haf_w), haf_w); - - u3_newt_decode(&mot_u, buf_y, dub_w - haf_w); - - if ( 1 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt smol fail (e)\n"); - exit(1); - } - - u3_newt_decode(&mot_u, haf_y, haf_w); - - if ( 2 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt smol fail (f)\n"); - exit(1); - } - } - - u3z(a); -} - -/* _test_newt_vast(): various scenarios with larger messages -*/ -static void -_test_newt_vast(void) -{ - // =(53 (met 3 (jam "abcdefghijklmnopqrstuvwxyz"))) - // - u3_atom a = u3ke_jam(u3i_tape("abcdefghijklmnopqrstuvwxyz")); - u3_moat mot_u; - c3_w len_w; - c3_y* buf_y; - - memset(&mot_u, 0, sizeof(u3_moat)); - - // one message one buffer - // - { - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - u3_newt_decode(&mot_u, buf_y, len_w); - - if ( 1 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt vast fail (a)\n"); - exit(1); - } - } - - // two messages one buffer - // - { - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - - buf_y = c3_realloc(buf_y, 2 * len_w); - memcpy(buf_y + len_w, buf_y, len_w); - len_w = 2 * len_w; - - u3_newt_decode(&mot_u, buf_y, len_w); - - if ( 2 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt vast fail (b)\n"); - exit(1); - } - } - - // one message many buffers - // - { - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - - { - c3_y* cop_y = c3_malloc(len_w); - c3_w haf_w = len_w / 2; - memcpy(cop_y, buf_y, len_w); - - u3_newt_decode(&mot_u, buf_y, haf_w); - - while ( haf_w < len_w ) { - c3_y* end_y = c3_malloc(1); - end_y[0] = cop_y[haf_w]; - - if ( 0 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt vast fail (c) %u\n", haf_w); - exit(1); - } - - u3_newt_decode(&mot_u, end_y, 1); - haf_w++; - } - - c3_free(cop_y); - } - - if ( 1 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt vast fail (d)\n"); - exit(1); - } - } - - // two messages two buffers - // - { - c3_y* haf_y; - c3_w haf_w, dub_w; - - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - - dub_w = 2 * len_w; - haf_w = len_w / 2; - - // buf_y is all of message one, half of message two - // - buf_y = c3_realloc(buf_y, dub_w - haf_w); - memcpy(buf_y + len_w, buf_y, len_w - haf_w); - - // haf_y is the second half of message two - // - haf_y = c3_malloc(haf_w); - memcpy(haf_y, buf_y + (len_w - haf_w), haf_w); - - u3_newt_decode(&mot_u, buf_y, dub_w - haf_w); - - if ( 1 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt vast fail (e)\n"); - exit(1); - } - - u3_newt_decode(&mot_u, haf_y, haf_w); - - if ( 2 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt vast fail (f)\n"); - exit(1); - } - } - - // two messages many buffers - // - { - c3_w dub_w; - - mot_u.ent_u = mot_u.ext_u = 0; - - buf_y = _newt_encode(u3k(a), &len_w); - - dub_w = 2 * len_w; - - // buf_y is two copies of message - // - buf_y = c3_realloc(buf_y, dub_w); - memcpy(buf_y + len_w, buf_y, len_w); - - { - c3_y* cop_y = c3_malloc(dub_w); - c3_w haf_w = len_w + 1; - memcpy(cop_y, buf_y, dub_w); - - u3_newt_decode(&mot_u, buf_y, haf_w); - - while ( haf_w < dub_w ) { - c3_y* end_y = c3_malloc(1); - end_y[0] = cop_y[haf_w]; - - if ( 1 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt vast fail (g) %u\n", haf_w); - exit(1); - } - - u3_newt_decode(&mot_u, end_y, 1); - haf_w++; - } - - c3_free(cop_y); - } - - if ( 2 != _moat_length(&mot_u) ) { - fprintf(stderr, "newt vast fail (h)\n"); - exit(1); - } - } - - u3z(a); -} - -/* main(): run all test cases. -*/ -int -main(int argc, char* argv[]) -{ - _setup(); - - _test_newt_smol(); - _test_newt_vast(); - - // GC - // - u3m_grab(u3_none); - - fprintf(stderr, "test_newt: ok\n"); - - return 0; -} diff --git a/pkg/urbit/tests/noun_tests.c b/pkg/urbit/tests/noun_tests.c deleted file mode 100644 index b84b61865..000000000 --- a/pkg/urbit/tests/noun_tests.c +++ /dev/null @@ -1,1706 +0,0 @@ -#include "all.h" -#include "ur/ur.h" -#include "vere/ivory.h" -#include "vere/vere.h" - -#define TRUE 1 -#define FALSE 0 - -/* _setup(): prepare for tests. -*/ -static void -_setup(void) -{ - c3_d len_d = u3_Ivory_pill_len; - c3_y* byt_y = u3_Ivory_pill; - u3_cue_xeno* sil_u; - u3_weak pil; - - u3C.wag_w |= u3o_hashless; - u3m_boot_lite(); - sil_u = u3s_cue_xeno_init_with(ur_fib27, ur_fib28); - if ( u3_none == (pil = u3s_cue_xeno_with(sil_u, len_d, byt_y)) ) { - printf("*** fail _setup 1\n"); - exit(1); - } - u3s_cue_xeno_done(sil_u); - if ( c3n == u3v_boot_lite(pil) ) { - printf("*** fail _setup 2\n"); - exit(1); - } -} - -/* _util_rand_string(): dynamically allocated len_w random string -*/ -static c3_y* -_util_rand_string(c3_w len_w) -{ - c3_c* choice_c = - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - c3_w choice_len_w = strlen(choice_c); - - c3_y* out_y = c3_malloc(len_w + 1); - - c3_w i_w; - for (i_w = 0; i_w < len_w; i_w ++){ - out_y[i_w] = choice_c[ (c3_w) rand() % choice_len_w ]; - } - out_y[i_w] = 0; - - return out_y; -} - -/* _test_noun_bits_helper(): -*/ -static void -_test_noun_bits_helper(u3_noun a, int direct_o, - int indirect_o, - int indirect_atom_o, - int cell_o) -{ -#if 0 - printf("=========== %u\n", a); - printf(" 31 bit %u\n", a & ( ((c3_w)1) << 31)); - printf(" 30 bit %u\n", a & ( ((c3_w)1) << 30)); - printf(" dir %x\n", c3y == u3a_is_cat(a)); - printf(" ind %x\n", c3y == u3a_is_dog(a)); - printf(" i cell %x\n", c3y == u3a_is_cell(a)); - printf(" i atom %x\n", c3y == u3a_is_pug(a)); -#endif - - if ( direct_o != (c3y == u3a_is_cat(a)) ) { - printf("*** _test_noun_bits_one() fail: u3a_is_direct\r\n"); - } - - if ( indirect_o != (c3y == u3a_is_dog(a)) ) { - printf("*** fail-2 u3a_is_indirect %d\r\n", c3n == u3a_is_cat(a)); - } - - if ( cell_o != (c3y == u3a_is_cell(a)) ) { - printf("*** fail-4 u3a_is_cell\r\n"); - } - - if ( indirect_atom_o != (c3y == u3a_is_pug(a)) ) { - printf("*** fail-3 u3a_is_indirect_atom\r\n"); - } -} - -/* _test_noun_bits_set(): allocate.h level 1a -*/ -static void -_test_noun_bits_set() -{ - u3_noun a = 1; - - // flip indirect bit on - a |= (1 << 31); - if ( c3n == u3a_is_dog(a) ) { - printf("*** fail-5a turn indirect bit on\r\n"); - } - - if ( c3y == u3a_is_cell(a) ) { - printf("*** fail-5b turn indirect bit on\r\n"); - } - - if ( c3n == u3a_is_pug(a) ) { - printf("*** fail-5c turn indirect bit on\r\n"); - } - - // flip all bits off - a = u3a_to_off(a); - - if ( c3y == u3a_is_dog(a) ) { - printf("*** fail-5d turn indirect bit off\r\n"); - } - - if ( c3y == u3a_is_cell(a) ) { - printf("*** fail-5e turn indirect bit on\r\n"); - } - - if ( c3y == u3a_is_pug(a)) { - printf("*** fail-5f turn indirect bit on\r\n"); - } - - // flip indirect & cell bit on - a = u3a_to_pom(a); - - if ( c3n == u3a_is_dog(a) ) { - printf("*** fail-5g turn indirect bit on\r\n"); - } - - if ( c3n == u3a_is_cell(a) ) { - printf("*** fail-5h turn indirect bit on\r\n"); - } - - if ( c3y == u3a_is_pug(a) ) { - printf("*** fail-5i turn indirect bit on\r\n"); - } -} - -/* _test_noun_bits_read(): allocate.h level 1 -*/ -static void -_test_noun_bits_read() -{ - - u3_noun a = (u3_noun)0x1; // direct atom - u3_noun b = u3a_to_pug(0x2); // indirect atom - u3_noun c = u3a_to_pom(0x3); // indirect cell - - // direct indirect indirect-atom indirect-cell - //---------------------------------------- - _test_noun_bits_helper(a, TRUE, FALSE, FALSE, FALSE); - _test_noun_bits_helper(b, FALSE, TRUE, TRUE, FALSE); - _test_noun_bits_helper(c, FALSE, TRUE, FALSE, TRUE); -} - -/* _test_imprison(): test basic data into / out of nouns -** insert and retrieve bytes with u3i_bytes()/u3r_bytes() -*/ -static void -_test_imprison() -{ - c3_c* input_c = "abcdefghij"; - c3_w out_len_w = 300; - c3_y * output_y = c3_malloc(out_len_w); - u3_noun a; - - // size 1, direct - a = u3i_bytes(1, (c3_y*)input_c); - memset(output_y, 0, out_len_w); - u3r_bytes(0, 1, output_y, a); - if (0 != memcmp(output_y, "a", 1)) { - printf("*** _test_imprison: fail-1\n"); - } - - // size 2, direct - a = u3i_bytes(2, (c3_y*)input_c); - memset(output_y, 0, out_len_w); - u3r_bytes(0, 2, output_y, a); - if (0 != memcmp(output_y, "ab", 2)) { - printf("*** _test_imprison: fail-2\n"); - } - - // size 6, direct (taken from an actual issue) - { - c3_y data_y[] = { 0x1, 0x1f, 0x8e, 0x2d, 0x2c, 0x2f }; - a = u3i_bytes(6, data_y); - memset(output_y, 0, out_len_w); - u3r_bytes(0, 6, output_y, a); - int ret; - ret = memcmp(output_y, data_y, 6); - if (0 != ret) { - printf("*** _test_imprison: fail-2.5 %x\n", ret); - printf(" %x %x %x %x %x %x\n", output_y[0], - output_y[1], - output_y[2], - output_y[3], - output_y[4], - output_y[5]); - } - } - - // size 8, direct - a = u3i_bytes(8, (c3_y*)input_c); - memset(output_y, 0, out_len_w); - u3r_bytes(0, 8, output_y, a); - if (0 != memcmp(output_y, "abcdefgh", 8)) { - printf("*** _test_imprison: fail-3\n"); - } - - // size 10, indirect - a = u3i_bytes(10, (c3_y*)input_c); - memset(output_y, 0, out_len_w); - u3r_bytes(0, 10, output_y, a); - if (0 != memcmp(output_y, "abcdefghij", 10)) { - printf("*** _test_imprison: fail-4\n"); - } - - // size 200, indirect - c3_y * rand_y = _util_rand_string(200); - a = u3i_bytes(200, rand_y); - memset(output_y, 0, out_len_w); - u3r_bytes(0, 200, output_y, a); - if (0 != memcmp(output_y, rand_y, 200)) { - printf("*** _test_imprison: fail-5\n"); - } - - c3_free(rand_y); - c3_free(output_y); -} - -/* _test_cells(): build and inspect cells: u3i_cell(), u3h(), u3t() -*/ -static void -_test_cells() -{ - // very simple cell - { - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = u3i_cell(a, b); - - u3_noun a2 = u3h(c); - if (a2 != a){ - printf("*** _test_cells: fail-1\n"); - } - - u3_noun b2 = u3t(c); - if (b2 != b){ - printf("*** _test_cells: fail-2\n"); - } - } - - // very simple cell with indirect atoms - { - c3_w out_len_w = 200; - c3_y * rand_a = _util_rand_string(out_len_w); - c3_y * rand_b = _util_rand_string(out_len_w); - - u3_noun a = u3i_bytes(200, rand_a); - u3_noun b = u3i_bytes(200, rand_b); - u3_noun c = u3i_cell(a, b); - -#if 0 - printf("a = %x\n", a); - printf("b = %x\n", b); - printf("c = %x\n", c); - printf("a_rand = %s\n", rand_a); - printf("b_rand = %s\n", rand_b); -#endif - - u3_noun a2 = u3h(c); - c3_y * output_y = c3_malloc(out_len_w + 1); - memset(output_y, 0, out_len_w + 1); - u3r_bytes(0, out_len_w, output_y, a); - - if (0 != memcmp(output_y, rand_a, out_len_w)) { - printf("*** _test_imprison: fail-3\n"); - } - - u3_noun b2 = u3h(c); - memset(output_y, 0, out_len_w + 1); - u3r_bytes(0, out_len_w, output_y, b); - - if (0 != memcmp(output_y, rand_b, out_len_w)) { - printf("*** _test_imprison: fail-4\n"); - } - - c3_free(output_y); - c3_free(rand_a); - c3_free(rand_b); - } - - // medium complicated cell - // q - // / \ - // a1 r - // / \ - // b2 s - // / \ - // c3 d4 - { - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - u3_noun d = (u3_noun) 0x4; - - u3_noun s = u3i_cell(c, d); - u3_noun r = u3i_cell(b, s); - u3_noun q = u3i_cell(a, r); - - u3_noun a2 = u3h(q); - u3_noun r2 = u3t(q); - if (a2 != a){ - printf("*** _test_cells: complicated a\n"); - } - - u3_noun b2 = u3h(r2); - u3_noun s2 = u3t(r2); - if (b2 != b){ - printf("*** _test_cells: complicated b\n"); - } - - - u3_noun c2 = u3h(s2); - u3_noun d2 = u3t(s2); - if (c2 != c){ - printf("*** _test_cells: complicated c\n"); - } - - if (d2 != d){ - printf("*** _test_cells: complicated d\n"); - } - - a2 = 0; - u3r_mean(q, 2, &a2, 0); - if (a2 != a){ - printf("*** _test_cells: complicated (via u3r_mean) a\n"); - } - } - - // trel - { - // q - // / \ - // a ? - // / \ - // b c - - // Produce the triple `[a b c]`. - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - - u3_noun trel = u3i_trel(a, b, c); - - u3_noun a2 = u3h(trel); - u3_noun b2 = u3h(u3t(trel)); - u3_noun c2 = u3t(u3t(trel)); - - if (a2 != a){ - printf("*** trel: 1 a\n"); - } - if (b2 != b){ - printf("*** trel: 2 a\n"); - } - if (c2 != c){ - printf("*** trel: 3 a\n"); - } - } - - // qual - { - // q - // / \ - // a ? - // / \ - // b ? - // / \ - // c d - // - - // Produce the triple `[a b c]`. - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - u3_noun d = (u3_noun) 0x4; - - u3_noun qual = u3i_qual(a, b, c, d); - - u3_noun a2 = u3h(qual); - u3_noun b2 = u3h(u3t(qual)); - u3_noun c2 = u3h(u3t(u3t(qual))); - u3_noun d2 = u3t(u3t(u3t(qual))); - - if (a2 != a){ - printf("*** qual: 1 \n"); - } - if (b2 != b){ - printf("*** qual: 2 \n"); - } - if (c2 != c){ - printf("*** qual: 3 \n"); - } - if (d2 != d){ - printf("*** qual: 4 \n"); - } - } -} - -/* _test_cells_complex(): build cells with more complex methods -*/ -static void -_test_cells_complex() -{ - // trel - { - // q - // / \ - // a ? - // / \ - // b c - - // Produce the triple `[a b c]`. - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - - u3_noun q = u3i_trel(a, b, c); - - u3_noun a2 = 0; - u3_noun b2 = 0; - u3_noun c2 = 0; - - u3x_trel(q, &a2, &b2, &c2); - - if (a2 != a){ - printf("*** _test_cells_complex: trel() 1 a\n"); - } - if (b2 != b){ - printf("*** _test_cells_complex: trel() 2 a\n"); - } - if (c2 != c){ - printf("*** _test_cells_complex: trel() 3 a\n"); - } - } - - // qual - { - // q - // / \ - // a ? - // / \ - // b z - // / \ - // c d - - // Produce the qual `[a b c d]`. - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - u3_noun d = (u3_noun) 0x4; - - u3_noun z = u3i_cell(c, d); - u3_noun q = u3i_trel(a, b, z); - - u3_noun a2 = 0; - u3_noun b2 = 0; - u3_noun c2 = 0; - u3_noun d2 = 0; - - u3x_qual(q, &a2, &b2, &c2, &d2); - - if (a2 != a){ - printf("*** _test_cells_complex: qual() a\n"); - } - if (b2 != b){ - printf("*** _test_cells_complex: qual() b\n"); - } - if (c2 != c){ - printf("*** _test_cells_complex: qual() c\n"); - } - if (d2 != d){ - printf("*** _test_cells_complex: qual() d\n"); - } - } - - // quil - { - // q - // / \ - // a ? - // / \ - // b z - // / \ - // c ? - // / \ - // d e - - // Produce `[a b c d e]`. - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - u3_noun d = (u3_noun) 0x4; - u3_noun e = (u3_noun) 0x5; - - u3_noun z = u3i_trel(c, d, e); - u3_noun q = u3i_trel(a, b, z); - - u3_noun a2 = 0; - u3_noun b2 = 0; - u3_noun c2 = 0; - u3_noun d2 = 0; - u3_noun e2 = 0; - - u3x_quil(q, &a2, &b2, &c2, &d2, &e2); - - if (a2 != a){ - printf("*** _test_cells_complex: quil() a\n"); - } - if (b2 != b){ - printf("*** _test_cells_complex: quil() b\n"); - } - if (c2 != c){ - printf("*** _test_cells_complex: quil() c\n"); - } - if (d2 != d){ - printf("*** _test_cells_complex: quil() d\n"); - } - if (e2 != e){ - printf("*** _test_cells_complex: quil() e\n"); - } - } - - // hext - { - // q - // / \ - // a ? - // / \ - // b z - // / \ - // c ? - // / \ - // d . - // / \ - // e f - // - // Produce `[a b c d e f]`. - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - u3_noun d = (u3_noun) 0x4; - u3_noun e = (u3_noun) 0x5; - u3_noun f = (u3_noun) 0x6; - - u3_noun z = u3i_trel(d, e, f); - u3_noun q = u3i_qual(a, b, c, z); - - u3_noun a2 = 0; - u3_noun b2 = 0; - u3_noun c2 = 0; - u3_noun d2 = 0; - u3_noun e2 = 0; - u3_noun f2 = 0; - - u3x_hext(q, &a2, &b2, &c2, &d2, &e2, &f2); - - if (a2 != a){ - printf("*** _test_cells_complex: hext() a\n"); - } - if (b2 != b){ - printf("*** _test_cells_complex: hext() b\n"); - } - if (c2 != c){ - printf("*** _test_cells_complex: hext() c\n"); - } - if (d2 != d){ - printf("*** _test_cells_complex: hext() d\n"); - } - if (e2 != e){ - printf("*** _test_cells_complex: hext() e - e2 = %i\n", e2); - } - if (f2 != f){ - printf("*** _test_cells_complex: hext() f - f2 = %i\n", f2); - } - } -} - -/* _test_imprison_complex(): more complicated into/out-of nouns -*/ -static void -_test_imprison_complex() -{ - // vint - { - u3_noun a = 1; - - u3_noun b= u3i_vint(a); - if (2 != b){ - printf("*** vint 1\n"); - } - - u3_noun c = u3i_vint(b); - if (3 != c){ - printf("*** vint 2\n"); - } - - // XX disabled, 64-bit - // -#if 0 - { - c3_d d = 1ULL << 50; - a = u3i_chubs(1, &d); - b = u3i_vint(a); - - if ((a + 1) != b){ - printf("*** vint 3\n"); - } - } -#endif - } - - // bytes - { - c3_y in_y[10] = { 10, 20, 0xff}; - u3_noun a = u3i_bytes(3, in_y); - - c3_w out_a = u3r_byte(0, a); - if (10 != out_a ){ - printf("*** u3r_byte 1\n"); - } - - c3_w out_b = u3r_byte(1, a); - if (20 != out_b ){ - printf("*** u3r_byte 2\n"); - } - - c3_w out_c = u3r_byte(2, a); - if (0xff != out_c ){ - printf("*** u3r_byte 3\n"); - } - - c3_y out_y[10]; - memset(out_y, 0, 10 * sizeof(c3_y)); - u3r_bytes(0, 3, out_y, a); - - if (10 != out_y[0] || - 20 != out_y[1] || - 0xff != out_y[2] || - 0 != out_y[3] - ){ - printf("*** u3r_byte 4\n"); - } - } - - // words - { - c3_w in_w[10] = {10, 20, 0xffffffff}; - u3_noun noun = u3i_words(3, in_w); - - - c3_w out_a = u3r_word(0, noun); - if (10 != out_a ){ - printf("*** u3r_word 1\n"); - } - - c3_w out_b = u3r_word(1, noun); - if (20 != out_b ){ - printf("*** u3r_word 2\n"); - } - - c3_w out_c = u3r_word(2, noun); - if (0xffffffff != out_c ){ - printf("*** u3r_word 3\n"); - } - - c3_w out_w[10]; - memset(out_w, 0, 10 * sizeof(c3_w)); - u3r_words(0, 3, out_w, noun); - - if (10 != out_w[0] || - 20 != out_w[1] || - 0xffffffff != out_w[2] || - 0 != out_w[3] - ){ - printf("*** u3r_word 4\n"); - } - } - - // chubs - { - c3_d in_d[10] = {1, 2, 0xffffffffffffffffULL}; - - c3_d out_d[10]; - - u3_noun a = u3i_chubs(1, & in_d[0]); - memset(out_d, 0, sizeof(c3_d) * 10); - u3r_chubs(0, 1, out_d, a); - if (1 != out_d[0] ){ - printf("*** u3r_chubs 1\n"); - } - - - u3_noun b = u3i_chubs(1, & in_d[1]); - memset(out_d, 0, sizeof(c3_d) * 10); - u3r_chubs(0, 1, out_d, b); - if (2 != out_d[0] ){ - printf("*** u3r_chubs 2\n"); - } - - u3_noun c = u3i_chubs(1, & in_d[2]); - memset(out_d, 0, sizeof(c3_d) * 10); - u3r_chubs(0, 1, out_d, c); - if (0xffffffffffffffffULL != out_d[0] ){ - printf("*** u3r_chubs 3\n"); - } - - u3_noun d = u3i_chubs(3, in_d); - memset(out_d, 0, sizeof(c3_d) * 10); - u3r_chubs(0, 3, out_d, d); - if (1 != out_d[0] ){ - printf("*** u3r_chubs 4-a\n"); - } - if (2 != out_d[1] ){ - printf("*** u3r_chubs 4-b\n"); - } - if (0xffffffffffffffffULL != out_d[2] ){ - printf("*** u3r_chubs 4-c\n"); - } - } - - // string - { - c3_c * in_c = "a"; - u3_noun noun = u3i_string(in_c); - c3_c* out_c = u3r_string(noun); - - if (0 != strcmp(in_c, out_c)){ - printf("*** u3r_string: in '%s'; out '%s'\n", in_c, out_c); - } - - c3_free(out_c); - in_c = "ab"; - noun = u3i_string(in_c); - out_c = u3r_string(noun); - - if (0 != strcmp(in_c, out_c)){ - printf("*** u3r_string: in '%s'; out '%s'\n", in_c, out_c); - } - - c3_free(out_c); - in_c = "abcd"; - noun = u3i_string(in_c); - out_c = u3r_string(noun); - - if (0 != strcmp(in_c, out_c)){ - printf("*** u3r_string: in '%s'; out '%s'\n", in_c, out_c); - } - - c3_free(out_c); - in_c = "this is a test"; - noun = u3i_string(in_c); - out_c = u3r_string(noun); - - if (0 != strcmp(in_c, out_c)){ - printf("*** u3r_string: in '%s'; out '%s'\n", in_c, out_c); - } - - c3_free(out_c); - } - - // tape - { - c3_c* in_c = "this is a test"; - u3_noun noun = u3i_tape(in_c); - - c3_y* out_y = u3r_tape(noun); - - if (0 != memcmp(in_c, out_y, strlen(in_c))){ - printf("*** u3r_tape 1\n"); - } - - c3_free(out_y); - - // tape stores each byte in the string as one atom in the tree - u3_noun lent = u3qb_lent(noun); - if ( (c3_w)lent != strlen(in_c) ){ - printf("*** u3r_tape 2\n"); - } - } - - // edit - { - - // q - // / \ - // a1 r - // / \ - // b2 s - // / \ - // c3 d4 - - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - u3_noun d = (u3_noun) 0x4; - - u3_noun s = u3i_cell(c, d); - u3_noun r = u3i_cell(b, s); - u3_noun q = u3i_cell(a, r); - - u3_noun axis = 2; - u3_noun newval = 99; - u3_noun hacked = u3i_edit(q, axis, newval); - - u3_noun read_1; - u3r_mean(hacked, axis, &read_1, 0); - - if (newval != read_1){ - printf("*** u3i_edit 1\n"); - } - } - - // molt - { - - // q - // / \ - // a1 r - // / \ - // b2 s - // / \ - // c3 d4 - - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x2; - u3_noun c = (u3_noun) 0x3; - u3_noun d = (u3_noun) 0x4; - - u3_noun s = u3i_cell(c, d); - u3_noun r = u3i_cell(b, s); - u3_noun q = u3i_cell(a, r); - - u3_noun axis_1 = 2; - u3_noun newval_1 = 99; - - u3_noun axis_2 = 6; - u3_noun newval_2 = 777; - - u3_noun hacked = u3i_molt(q, axis_1, newval_1, axis_2, newval_2, 0); - - u3_noun read_1; - u3_noun read_2; - u3r_mean(hacked, axis_1, &read_1, axis_2, &read_2, 0); - - if (newval_1 != read_1){ - printf("*** u3i_molt 1\n"); - } - - if (newval_2 != read_2){ - printf("*** u3i_molt 2\n"); - } - } -} - -/* _test_sing(): Yes iff (a) and (b) are the same noun. -*/ -static void -_test_sing() -{ - // direct noun - // - { - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x1; - u3_noun c = (u3_noun) 0x2; - - if (c3y != u3r_sing(a, a)) { - printf("*** sing direct: 1 \n"); - } - - if (c3y != u3r_sing(a, b)) { - printf("*** sing direct: 2 \n"); - } - - if (c3n != u3r_sing(a, c)) { - printf("*** sing direct: 3 \n"); - } - } - - // indirect - // - { - c3_c* in_alpha_c = "abcdefghijklmnopqrstuvwxyz"; - c3_c* in_numer_c = "0123456789001234567890"; - - - u3_noun a = u3i_string(in_alpha_c); - u3_noun b = u3i_string(in_alpha_c); - u3_noun c = u3i_string(in_numer_c); - - if (c3y != u3r_sing(a, a)) { - printf("*** sing indirect: 1 \n"); - } - - if (c3y != u3r_sing(a, b)) { - printf("*** sing indirect: 2 \n"); - } - - if (c3n != u3r_sing(a, c)) { - printf("*** sing indirect: \n"); - } - } -} - -/* _test_fing(): yes same copy of the same noun (ie, pointer equality) -*/ -static void -_test_fing() -{ - // direct noun - // - { - u3_noun a = (u3_noun) 0x1; - u3_noun b = (u3_noun) 0x1; - u3_noun c = (u3_noun) 0x2; - - if (c3y != u3r_fing(a, a)) { - printf("*** fing direct: 1 \n"); - } - - if (c3y != u3r_fing(a, b)) { - printf("*** fing direct: 2 \n"); - } - - if (c3n != u3r_fing(a, c)) { - printf("*** fing direct: 3 \n"); - } - } - - // indirect - // - { - c3_c* in_alpha_c = "abcdefghijklmnopqrstuvwxyz"; - c3_c* in_numer_c = "0123456789001234567890"; - - - u3_noun a = u3i_string(in_alpha_c); - u3_noun b = u3i_string(in_alpha_c); - u3_noun c = u3i_string(in_numer_c); - - if (c3y != u3r_fing(a, a)) { - printf("*** fing indirect: 1 \n"); - } - - if (c3n != u3r_fing(a, b)) { - printf("*** fing indirect: 2 \n"); - } - - if (c3n != u3r_fing(a, c)) { - printf("*** fing indirect: \n"); - } - } -} - -/* _test_met(): 'met' = measure / take size -*/ -static void -_test_met() -{ - c3_w ret_w; - u3_atom atom; - - // 1 - { - atom = 1; - - ret_w = u3r_met(0, atom); - if (1 != ret_w){ - printf("*** _test_met bit of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(3, atom); - if (1 != ret_w){ - printf("*** _test_met byte of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(4, atom); - if (1 != ret_w){ - printf("*** _test_met _w of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(5, atom); - if (1 != ret_w){ - printf("*** _test_met _d of 1 = %d \n", ret_w); - } - } - - // 2 = 0b10 - { - atom = 2; - - ret_w = u3r_met(0, atom); - if (2 != ret_w){ - printf("*** _test_met bit of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(3, atom); - if (1 != ret_w){ - printf("*** _test_met byte of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(5, atom); - if (1 != ret_w){ - printf("*** _test_met _w of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(6, atom); - if (1 != ret_w){ - printf("*** _test_met _d of 1 = %d \n", ret_w); - } - } - - // 8=0b1000 - { - atom = 8; - - ret_w = u3r_met(0, atom); - if (4 != ret_w){ - printf("*** _test_met bit of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(3, atom); - if (1 != ret_w){ - printf("*** _test_met byte of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(5, atom); - if (1 != ret_w){ - printf("*** _test_met _w of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(6, atom); - if (1 != ret_w){ - printf("*** _test_met _d of 1 = %d \n", ret_w); - } - } - - // 0xff = 255 =0b 1111 1111 - { - atom = 0xff; - - ret_w = u3r_met(0, atom); - if (8 != ret_w){ - printf("*** _test_met bit of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(3, atom); - if (1 != ret_w){ - printf("*** _test_met byte of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(5, atom); - if (1 != ret_w){ - printf("*** _test_met _w of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(6, atom); - if (1 != ret_w){ - printf("*** _test_met _d of 1 = %d \n", ret_w); - } - } - - // 0x100 = 256 =0b 0001 1111 1111 - { - atom = 0x100; - - ret_w = u3r_met(0, atom); - if (9 != ret_w){ - printf("*** _test_met bit of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(3, atom); - if (2 != ret_w){ - printf("*** _test_met byte of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(5, atom); - if (1 != ret_w){ - printf("*** _test_met _w of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(6, atom); - if (1 != ret_w){ - printf("*** _test_met _d of 1 = %d \n", ret_w); - } - } - - // XX disabled, 64-bit - // -#if 0 - // 32 bit direct - // 0x ff ff ff ff - { - atom = 0xffffffffULL; - - ret_w = u3r_met(0, atom); - if (32 != ret_w){ - printf("*** _test_met bit of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(3, atom); - if (4 != ret_w){ - printf("*** _test_met byte of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(5, atom); - if (1 != ret_w){ - printf("*** _test_met _w of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(6, atom); - if (1 != ret_w){ - printf("*** _test_met _d of 1 = %d \n", ret_w); - } - } -#endif - - // 4 words x 32 bits each = 128 bits = 16 bytes = 4 words = 2 doubles - // - { - c3_w data_w[4] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }; - atom = u3i_words(4, data_w); - - ret_w = u3r_met(0, atom); - if (128 != ret_w){ - printf("*** _test_met bit of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(3, atom); - if (16 != ret_w){ - printf("*** _test_met byte of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(5, atom); - if (4 != ret_w){ - printf("*** _test_met _w of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(6, atom); - if (2 != ret_w){ - printf("*** _test_met _d of 1 = %d \n", ret_w); - } - } - - // 4 words (top word is '1' ) - // - { - c3_w data_w[4] = { 0xffffffff, 0xffffffff, 0xffffffff, 1 }; - atom = u3i_words(4, data_w); - - ret_w = u3r_met(0, atom); - if (97 != ret_w){ - printf("*** _test_met bit of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(3, atom); - if (13 != ret_w){ - printf("*** _test_met byte of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(5, atom); - if (4 != ret_w){ - printf("*** _test_met _w of 1 = %d \n", ret_w); - } - - ret_w = u3r_met(6, atom); - if (2 != ret_w){ - printf("*** _test_met _d of 1 = %d \n", ret_w); - } - } -} - -/* _test_u3r_at(): inspect cells at arbitrary axis locations -** [ and utility function u3x_dep() ] -*/ -static void -_test_u3r_at() -{ - c3_w a_w = u3x_dep(0); - - if (0xffffffff != a_w) { printf("*** u3x_dep() \n"); } - - a_w = u3x_dep(1); - if (0 != a_w) { printf("*** u3x_dep() \n"); } - - a_w = u3x_dep(0b10); - if (1 != a_w) { printf("*** u3x_dep() \n"); } - - a_w = u3x_dep(0b11); - if (1 != a_w) { printf("*** u3x_dep() \n"); } - - a_w = u3x_dep(0b100); - if (2 != a_w) { printf("*** u3x_dep() \n"); } - - a_w = u3x_dep(0b110); - if (2 != a_w) { printf("*** u3x_dep() \n"); } - - a_w = u3x_dep(0b111); - if (2 != a_w) { printf("*** u3x_dep() \n"); } - - a_w = u3x_dep( ((c3_w) (((c3_d) 1 << 32) - 1)) ); - if (31 != a_w) { printf("*** u3x_dep() \n"); } - - - // XX disabled, 64-bit - // -#if 0 - a_w = u3x_dep_d(0); - a_w = u3x_dep_d(1); - a_w = u3x_dep_d(0b10); - a_w = u3x_dep_d(0b11); - a_w = u3x_dep_d(0b100); - a_w = u3x_dep_d( ((c3_w) (((c3_d) 1 << 32) - 1)) ); - a_w = u3x_dep_d( ((c3_w) (((c3_d) 1 << 33) - 1)) ); - a_w = u3x_dep_d( ((c3_d) (((c3_d) 1 << 64) - 1)) ); -#endif - - u3_weak ret; - - // addr 1 in atom == atom value - u3_noun tree = 1; - ret = u3r_at( 1, tree); - if (1 != ret) { printf("*** u3r_at()\n"); } - - // addr 1 in atom == atom value - tree = 2; - ret = u3r_at( 1, tree); - if (2 != ret) { printf("*** u3r_at \n"); } - - // illegal - ret = u3r_at( 2, tree); - if (u3_none != ret) { printf("*** u3r_at \n"); } - - - // simple tree [ 1 2] - tree = u3i_cell(10, 20); - ret = u3r_at( 1, tree); - if (tree != ret) { printf("*** u3r_at \n"); } - - ret = u3r_at( 2, tree); - if (10 != ret) { printf("*** u3r_at \n"); } - ret = u3r_at( 3, tree); - if (20 != ret) { printf("*** u3r_at \n"); } - - // simple tree [ 1 ] - c3_w in_w[10] = {10, 20, 0xffffffff}; - u3_noun bignum = u3i_words(3, in_w); - - tree = u3i_cell(99, bignum); - ret = u3r_at( 2, tree); - if (99 != ret) { printf("*** u3r_at \n"); } - ret = u3r_at( 3, tree); - if (bignum != ret) { printf("*** u3r_at \n"); } -} - -/* _test_u3r_chop: "extract bit slices from atom" -*/ -static void -_test_u3r_chop() -{ - c3_w dst_w = 0; - - // read 1 bit bloq - { - // read 1 bit from pos=0 (far right) - u3_atom src = 0b11011; - - c3_g bloqsize_g = 0; - - - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0x1 != dst_w) { printf("*** test_u3r_chop \n"); } - - - // read 1 bit from pos=1 - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 1, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0x1 != dst_w) { printf("*** test_u3r_chop 2\n"); } - - // read 1 bit from pos=2 - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 2, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0x0 != dst_w) { printf("*** test_u3r_chop 3\n"); } - - // read 4 x 1 bit bloq from pos=0 - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 4, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b1011 != dst_w) { printf("*** test_u3r_chop 4\n"); } - - - // read 1 x 1 bit bloq from pos=0 into offset 1 - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 4, // count of bloqs - 1, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b10110 != dst_w) { printf("*** test_u3r_chop 5\n"); } - - - - } - - // read 2 bit bloq - { - u3_atom src = 0b11011; - - c3_g bloqsize_g = 1; - - // read 2 bit from pos=0 (far right) - - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b11 != dst_w) { printf("*** test_u3r_chop 2.1\n"); } - - - // read 2 bit from pos=1 (1 bloq over ) - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 1, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b10 != dst_w) { printf("*** test_u3r_chop 2.2\n"); } - - // read 2 bit from pos=2 (2 bloq over) - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 2, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b01 != dst_w) { printf("*** test_u3r_chop 2.3\n"); } - - } - - // read 8 bit bloq - { - u3_atom src = 0b11011; - - c3_g bloqsize_g = 3; // 2^3 = 8 bits - - // pos=0 (far right) - - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b11011 != dst_w) { printf("*** test_u3r_chop 8.1\n"); } - } - - // read 1,8,16 bit bloqs from an indirect atom - { - // build an indirect noun 'src' - - c3_c* input_c = "abcdefghij"; - u3_noun src = u3i_bytes(10, (c3_y*)input_c); - - - c3_g bloqsize_g = 0; // 2^0 = 1 bit - - // 1 x 1 bit pos=0 (far right) - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b1 != dst_w) { - printf("*** test_u3r_chop indirect.1\n"); - } - - // 8 x 1 bit pos=0 (far right) - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 8, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b1100001 != dst_w) { - printf("*** test_u3r_chop indirect.2\n"); - } - - // 1 x 1 byte = 8 bit, pos=0 (far right) - bloqsize_g = 3; // 2^3 = 1 byte - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b1100001 != dst_w) { - printf("*** test_u3r_chop indirect.3\n"); - } - - // 1 x 16 bit bloq, pos = 0 - bloqsize_g = 4; // 2^4 = 2 bytes - - dst_w = 0; - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 1, // count of bloqs - 0, // end index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b0110001001100001 != dst_w) { - printf("*** test_u3r_chop indirect.4\n"); - } - } - - // read lots of bits from a direct noun which holds 64 bits of data - // makes sure that we handle top 32 / bottom 32 correctly - { - // build an indirect noun 'src' - - c3_c input_c[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; - u3_noun src = u3i_bytes(8, (c3_y*)input_c); - - c3_g bloqsize_g = 0; // 2^0 = 1 bit - - c3_w dst_w[2]; - memset(dst_w, 0, 2 * sizeof(c3_w)); - - u3r_chop(bloqsize_g, /// bloq size - 0, // start index - 63, // count of bloqs - 0, // offset on out index - dst_w, // where bytes go to - src); // where bytes come from - - } - - // as above (read lots of bits from a direct noun which holds 64 bits of data - // makes sure that we handle top 32 / bottom 32 correctly) - // but with a bit more nuance - { - // least significant most - c3_c input_c[8] = { 0x0, 0x0, 0x0, 0xaa, 0xff, 0x0, 0x0, 0x0 }; - u3_noun src = u3i_bytes(8, (c3_y*)input_c); - - c3_g bloqsize_g = 0; // 2^0 = 1 bit - - c3_w dst_w = 0; - - u3r_chop(bloqsize_g, /// bloq size - 24, // start index - 16, // count of bloqs - 0, // offset on out index - & dst_w, // where bytes go to - src); // where bytes come from - - if (0b1111111110101010 != dst_w) { - printf("*** test_u3r_chop indirect. 6\n"); - } - } -} - -// XX disabled, static functions -// -#if 0 -void _n_push(c3_ys mov, c3_ys off, u3_noun a); -u3_noun * _n_peek(c3_ys off); -u3_noun* _n_peet(c3_ys mov, c3_ys off); -void _n_pop(c3_ys mov); -u3_noun _n_pep(c3_ys mov, c3_ys off); -void _n_toss(c3_ys mov, c3_ys off); -u3_noun* _n_swap(c3_ys mov, c3_ys off); - -/* _test_nvm_stack_inner(): -*/ -void -_test_nvm_stack_inner(c3_ys mov, c3_ys off) -{ - u3_noun * peek; - - // push 1, peek, pop - if(1) { - _n_push(mov, off, 0x1122334455667788); - peek = _n_peek(off); - if (0x1122334455667788 != *peek) { printf("*** test_nvm_stack 1\n"); } - _n_pop(mov); - } - - // push 2, peek, pop, peek, pop - if(1) { - _n_push(mov, off, 88); - _n_push(mov, off, 99); - peek = _n_peek(off); - if (99 != *peek) { printf("*** test_nvm_stack 2\n"); } - _n_pop(mov); - peek = _n_peek(off); - if (88 != *peek) { printf("*** test_nvm_stack 3\n"); } - _n_pop(mov); - } - - // 100 x (push, peek, pop) - { - int ii; - for (ii=0; ii <= 100; ii++){ - _n_push(mov, off, (u3_noun) ii); - } - for (ii=100; ii >= 0; ii--){ - peek = _n_peek(off); - if (ii != *peek) { printf("*** test_nvm_stack 4\n"); } - _n_pop(mov); - } - } - - // peet() - { - _n_push(mov, off, 333); - _n_push(mov, off, 444); - - peek = _n_peet(mov, off); - if (333 != *peek) { printf("*** test_nvm_stack 5\n"); } - - _n_push(mov, off, 555); - peek = _n_peet(mov, off); - if (444 != *peek) { printf("*** test_nvm_stack 6\n"); } - } - - // pep() - { - _n_push(mov, off, 777); - u3_noun ret = _n_pep(mov, off); - if (777 != ret) { printf("*** test_nvm_stack 7\n"); } - - - _n_push(mov, off, 777); - _n_push(mov, off, 888); - ret = _n_pep(mov, off); - if (888 != ret) { printf("*** test_nvm_stack 8\n"); } - ret = _n_pep(mov, off); - if (777 != ret) { printf("*** test_nvm_stack 9\n"); } - - } - - // toss - { - _n_push(mov, off, 2777); - _n_push(mov, off, 3888); - _n_toss(mov, off); - u3_noun ret = _n_pep(mov, off); - if (2777 != ret) { printf("*** test_nvm_stack 10\n"); } - - } - - // swap - { - _n_push(mov, off, 2002); - _n_push(mov, off, 3003); - _n_swap(mov, off); - u3_noun ret = _n_pep(mov, off); - if (2002 != ret) { printf("*** test_nvm_stack 11\n"); } - ret = _n_pep(mov, off); - if (3003 != ret) { printf("*** test_nvm_stack 12\n"); } - - } -} - -/* _test_nvm_stack_south(): test the stack usage in an inner, south road -*/ -u3_noun -_test_nvm_stack_south(u3_noun arg) -{ - c3_ys mov = 2; - c3_ys off = -2; - - _test_nvm_stack_inner(mov, off); - - return u3_nul; -} -#endif - -/* _test_nvm_stack(): test the stack usage of the bytecode interpreter -** (growing in both directions: N and S) -*/ -static void -_test_nvm_stack() -{ - // XX disabled, static functions - // XX rewrite to use u3a_push/u3a_pop? - // -#if 0 - // north road - c3_ys mov = -2; - c3_ys off = 0; - _test_nvm_stack_inner(mov, off); - - // south road - u3m_soft(100, &_test_nvm_stack_south, 0); -#endif -} - -/* _test_lily(): test small noun parsing. -*/ -static void -_test_lily() -{ - c3_l lit_l; - c3_w big_w[] = {0, 0, 1}; - u3_noun big = u3i_words(3, big_w); - u3_noun cod = u3dc("scot", c3__uv, big); - - if ( c3y == u3v_lily(c3__uv, cod, &lit_l) ) { - printf("*** fail _test_lily-1\n"); - exit(1); - } - cod = u3dc("scot", c3__ud, 0x7fffffff); - if ( (c3n == u3v_lily(c3__ud, cod, &lit_l)) || - (0x7fffffff != lit_l) ) { - printf("*** fail _test_lily-2a\n"); - exit(1); - } - cod = u3dc("scot", c3__ux, u3i_word(0x80000000)); - if ( c3y == u3v_lily(c3__ux, cod, &lit_l) ) { - printf("*** fail _test_lily-2b\n"); - exit(1); - } -} - -/* main(): run all test cases. -*/ -int -main(int argc, char* argv[]) -{ - _setup(); - - _test_noun_bits_set(); - _test_noun_bits_read(); - _test_u3r_chop(); - _test_imprison(); - _test_imprison_complex(); - _test_sing(); - _test_fing(); - _test_met(); - _test_cells(); - _test_cells_complex(); - _test_u3r_at(); - _test_nvm_stack(); - _test_lily(); - - fprintf(stderr, "test_noun: ok\n"); - - return 0; -} diff --git a/pkg/urbit/tests/unix_tests.c b/pkg/urbit/tests/unix_tests.c deleted file mode 100644 index ca247f5ef..000000000 --- a/pkg/urbit/tests/unix_tests.c +++ /dev/null @@ -1,65 +0,0 @@ -#include "all.h" -#include "vere/vere.h" - -/* _setup(): prepare for tests. -*/ -static void -_setup(void) -{ -} - -/* _test_safe(): -*/ -static c3_i -_test_safe() -{ - c3_i ret_i = 1; - - if ( !u3_unix_cane("/") || - !u3_unix_cane("~.") || - !u3_unix_cane("a") || - !u3_unix_cane("a/b") || - !u3_unix_cane("a/b/c/defg/h/ijklmnop") ) - { - fprintf(stderr, "_safe fail 1\n"); - ret_i = 0; - } - - if ( u3_unix_cane("") || - u3_unix_cane(".") || - u3_unix_cane("..") || - u3_unix_cane("/.") || - u3_unix_cane("a/b/c//") || - u3_unix_cane("a/b/.") || - u3_unix_cane("/././../.") || - u3_unix_cane("/../etc") ) - { - fprintf(stderr, "_safe fail 2\r\n"); - ret_i = 0; - } - - if ( !u3_unix_cane(".a") || - !u3_unix_cane("/.a.b.c/..c") ) - { - fprintf(stderr, "_safe fail 3\r\n"); - ret_i = 0; - } - - return ret_i; -} - -/* main(): run all test cases. -*/ -int -main(int argc, char* argv[]) -{ - _setup(); - - if ( !_test_safe() ) { - fprintf(stderr, "test unix: failed\r\n"); - exit(1); - } - - fprintf(stderr, "test unix: ok\r\n"); - return 0; -} diff --git a/pkg/urbit/tests/ur_tests.c b/pkg/urbit/tests/ur_tests.c deleted file mode 100644 index 1e590e572..000000000 --- a/pkg/urbit/tests/ur_tests.c +++ /dev/null @@ -1,1860 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include "ur/ur.h" - -/* -** initialize helper for bitstream-writer tests. -*/ -static void -_bsw_reinit(ur_bsw_t *bsw, uint64_t prev, uint64_t size) -{ - bsw->prev = prev; - bsw->size = size; - bsw->bits = 0; - bsw->fill = 0; - bsw->off = 0; - - free(bsw->bytes); - bsw->bytes = calloc(size, 1); -} - -/* -** check bitstream-writer test invariants. -*/ -static int -_bsw_bit_check(const char* cap, ur_bsw_t *bsw, uint8_t byt, uint8_t off) -{ - int ret = 1; - - if ( !ur_bsw_sane(bsw) ) { - fprintf(stderr, "%s: insane off=%u fill=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, bsw->off, bsw->fill, bsw->bits); - ret = 0; - } - - if ( byt != bsw->bytes[0] ) { - fprintf(stderr, "%s: bytes fail (%u, %u)\r\n", cap, byt, bsw->bytes[0]); - ret = 0; - } - - if ( off != bsw->off ) { - fprintf(stderr, "%s: offset fail (%u, %u)\r\n", cap, off, bsw->off); - ret = 0; - } - - return ret; -} - -/* -** test 8 sequential writes of a set bit. -*/ -static int -_test_bsw_bit_ones(void) -{ - int ret = 1; - ur_bsw_t bsw = {0}; - _bsw_reinit(&bsw, 1, 1); - - ret &= _bsw_bit_check("bsw ones init", &bsw, 0x0, 0); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw ones a", &bsw, 0x1, 1); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw ones b", &bsw, 0x3, 2); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw ones c", &bsw, 0x7, 3); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw ones d", &bsw, 0xf, 4); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw ones e", &bsw, 0x1f, 5); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw ones f", &bsw, 0x3f, 6); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw ones g", &bsw, 0x7f, 7); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw ones h", &bsw, 0xff, 0); - - if ( bsw.size != 2 ) { - fprintf(stderr, "bsw ones grow: fail\r\n"); - ret = 0; - } - - free(bsw.bytes); - - return ret; -} - -/* -** test 8 sequential writes of 1 null bit. -*/ -static int -_test_bsw_bit_zeros(void) -{ - int ret = 1; - ur_bsw_t bsw = {0}; - _bsw_reinit(&bsw, 1, 1); - - ret &= _bsw_bit_check("bsw zeros init", &bsw, 0x0, 0); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw zeros a", &bsw, 0x0, 1); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw zeros b", &bsw, 0x0, 2); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw zeros c", &bsw, 0x0, 3); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw zeros d", &bsw, 0x0, 4); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw zeros e", &bsw, 0x0, 5); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw zeros f", &bsw, 0x0, 6); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw zeros g", &bsw, 0x0, 7); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw zeros h", &bsw, 0x0, 0); - - if ( bsw.size != 2 ) { - fprintf(stderr, "bsw zeros grow: fail\r\n"); - ret = 0; - } - - free(bsw.bytes); - - return ret; -} - -/* -** test 8 sequential writes of alternating bits. -*/ -static int -_test_bsw_bit_alt(void) -{ - int ret = 1; - ur_bsw_t bsw = {0}; - _bsw_reinit(&bsw, 1, 1); - - ret &= _bsw_bit_check("bsw alt init", &bsw, 0x0, 0); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw alt a", &bsw, 0x0, 1); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw alt b", &bsw, 0x2, 2); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw alt c", &bsw, 0x2, 3); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw alt d", &bsw, 0xa, 4); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw alt e", &bsw, 0xa, 5); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw alt f", &bsw, 0x2a, 6); - - ur_bsw_bit(&bsw, 0); - ret &= _bsw_bit_check("bsw alt g", &bsw, 0x2a, 7); - - ur_bsw_bit(&bsw, 1); - ret &= _bsw_bit_check("bsw alt h", &bsw, 0xaa, 0); - - if ( bsw.size != 2 ) { - fprintf(stderr, "bsw alt grow: fail\r\n"); - ret = 0; - } - - free(bsw.bytes); - - return ret; -} - -static int -_test_bsw_bit(void) -{ - return _test_bsw_bit_ones() - & _test_bsw_bit_zeros() - & _test_bsw_bit_alt(); -} - -/* -** subsequents bitstream-writer tests assume the correctnesss of -** ur_bsw_bit(), and compare the output of a bit-at-a-time -** "golden master" with that of the relevant, higher-level operation. -** -** XX the "golden" master implementations shouldn't be in bitstream module, -** as we don't intend to run them, but it's kind of weird implement them -** in the test itself. -** -*/ -static int -_bsw_cmp_check(const char* cap, uint8_t val, uint8_t off, uint8_t len, ur_bsw_t *a, ur_bsw_t *b) -{ - int ret = 1; - - if ( !ur_bsw_sane(a) ) { - fprintf(stderr, "%s: val 0x%02x off %u, len %u: a insane off=%u fill=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, val, off, len, a->off, a->fill, a->bits); - ret = 0; - } - if ( !ur_bsw_sane(b) ) { - fprintf(stderr, "%s: val 0x%02x off %u len %u: b insane off=%u fill=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, val, off, len, b->off, b->fill, b->bits); - ret = 0; - } - - if ( a->off != b->off ) { - fprintf(stderr, "%s: val 0x%02x off %u len %u: offset fail (%u, %u)\r\n", - cap, val, off, len, a->off, b->off); - ret = 0; - } - - if ( a->fill != b->fill ) { - fprintf(stderr, "%s: val 0x%02x off %u len %u: fill fail (%" PRIu64 ", %" PRIu64 ")\r\n", - cap, val, off, len, a->fill, b->fill); - ret = 0; - } - - { - uint64_t k, len_byt = a->fill + !!a->off; - - if ( memcmp(a->bytes, b->bytes, len_byt) ) { - fprintf(stderr, "%s: val 0x%02x off %u, len %u not equal off=%u fill=%" PRIu64 "\r\n", - cap, val, off, len, b->off, b->fill); - fprintf(stderr, " a: { "); - for ( k = 0; k < len_byt; k++ ) { - fprintf(stderr, "%02x, ", a->bytes[k]); - } - fprintf(stderr, "}\r\n"); - fprintf(stderr, " b: { "); - for ( k = 0; k < len_byt; k++ ) { - fprintf(stderr, "%02x, ", b->bytes[k]); - } - fprintf(stderr, "}\r\n"); - ret = 0; - } - } - - return ret; -} - -/* -** ur_bsw8 golden master -*/ -static void -_bsw8_slow(ur_bsw_t *bsw, uint8_t len, uint8_t byt) -{ - len = ur_min(8, len); - - while ( len ) { - ur_bsw_bit(bsw, byt); - byt >>= 1; - len--; - } -} - -/* -** at varying offsets, write varying numbers of bits via -** ur_bsw8 and master, comparing the result each time. -*/ -static int -_test_bsw8_loop(const char* cap, uint8_t val) -{ - int ret = 1; - ur_bsw_t a = {0}; - ur_bsw_t b = {0}; - uint8_t i, j; - - for ( i = 0; i < 8; i++) { - for ( j = 0; j <= 8; j++ ) { - _bsw_reinit(&a, 1, 1); - _bsw_reinit(&b, 1, 1); - a.off = a.bits = b.off = b.bits = i; - - _bsw8_slow(&a, j, val); - ur_bsw8(&b, j, val); - - ret &= _bsw_cmp_check(cap, val, i, j, &a, &b); - } - } - - return ret; -} - -static int -_test_bsw8(void) -{ - return _test_bsw8_loop("bsw bits ones", 0xff) - & _test_bsw8_loop("bsw bits zeros", 0x0) - & _test_bsw8_loop("bsw bits alt 1", 0xaa) - & _test_bsw8_loop("bsw bits alt 2", 0x55); -} - -/* -** ur_bsw32 golden master -*/ -static void -_bsw32_slow(ur_bsw_t *bsw, uint8_t len, uint32_t val) -{ - len = ur_min(32, len); - - while ( len ) { - ur_bsw_bit(bsw, val & 0xff); - val >>= 1; - len--; - } -} - -/* -** at varying offsets, write varying numbers of bits via -** ur_bsw32 and master, comparing the result each time. -*/ -static int -_test_bsw32_loop(const char* cap, uint32_t val) -{ - int ret = 1; - ur_bsw_t a = {0}; - ur_bsw_t b = {0}; - uint8_t i, j; - - for ( i = 0; i < 8; i++) { - for ( j = 0; j <= 32; j++ ) { - _bsw_reinit(&a, 1, 1); - _bsw_reinit(&b, 1, 1); - a.off = a.bits = b.off = b.bits = i; - - _bsw32_slow(&a, j, val); - ur_bsw32(&b, j, val); - - ret &= _bsw_cmp_check(cap, val, i, j, &a, &b); - } - } - - return ret; -} - -static int -_test_bsw32(void) -{ - return _test_bsw32_loop("bsw 32 ones", 0xffffffff) - & _test_bsw32_loop("bsw 32 zeros", 0x0) - & _test_bsw32_loop("bsw 32 alt 1", 0xaaaaaaaa) - & _test_bsw32_loop("bsw 32 alt 2", 0x55555555); -} - -/* -** ur_bsw64 golden master -*/ -static void -_bsw64_slow(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - len = ur_min(64, len); - - while ( len ) { - ur_bsw_bit(bsw, val & 0xff); - val >>= 1; - len--; - } -} - -/* -** at varying offsets, write varying numbers of bits via -** ur_bsw64 and master, comparing the result each time. -*/ -static int -_test_bsw64_loop(const char* cap, uint64_t val) -{ - int ret = 1; - ur_bsw_t a = {0}; - ur_bsw_t b = {0}; - uint8_t i, j; - - for ( i = 0; i < 8; i++) { - for ( j = 0; j <= 64; j++ ) { - _bsw_reinit(&a, 1, 1); - _bsw_reinit(&b, 1, 1); - a.off = a.bits = b.off = b.bits = i; - - _bsw64_slow(&a, j, val); - ur_bsw64(&b, j, val); - - ret &= _bsw_cmp_check(cap, val, i, j, &a, &b); - } - } - - return ret; -} - -static int -_test_bsw64(void) -{ - return _test_bsw64_loop("bsw 64 ones", 0xffffffffffffffffULL) - & _test_bsw64_loop("bsw 64 zeros", 0x0ULL) - & _test_bsw64_loop("bsw 64 alt 1", 0xaaaaaaaaaaaaaaaaULL) - & _test_bsw64_loop("bsw 64 alt 2", 0x5555555555555555ULL); -} - -/* -** ur_bsw_bytes() golden master -*/ -static void -_bsw_bytes_slow(ur_bsw_t *bsw, uint64_t len, uint8_t *byt) -{ - uint64_t i, len_byt = len >> 3; - - for ( i = 0; i < len_byt; i++ ) { - _bsw8_slow(bsw, 8, byt[i]); - len -= 8; - } - - _bsw8_slow(bsw, len, byt[len_byt]); -} - -/* -** at varying offsets, write varying numbers of bits via -** ur_bsw_bytes and master, comparing the result each time. -*/ -static int -_test_bsw_bytes_loop(const char* cap, uint64_t len, uint8_t val) -{ - int ret = 1; - ur_bsw_t a = {0}; - ur_bsw_t b = {0}; - uint8_t i, j, *byt; - uint64_t len_bit = len << 3; - - byt = malloc(len); - memset(byt, val, len); - - for ( i = 0; i < 8; i++) { - for ( j = 0; j < len_bit; j++ ) { - _bsw_reinit(&a, 1, 1); - _bsw_reinit(&b, 1, 1); - a.off = a.bits = b.off = b.bits = i; - - _bsw_bytes_slow(&a, j, byt); - ur_bsw_bytes(&b, j, byt); - - ret &= _bsw_cmp_check(cap, val, i, j, &a, &b); - } - } - - free(byt); - - return ret; -} - -static int -_test_bsw_bytes(void) -{ - return _test_bsw_bytes_loop("bsw bytes nought", 0, 0x0) - & _test_bsw_bytes_loop("bsw bytes ones odd", 3, 0xff) - & _test_bsw_bytes_loop("bsw bytes ones even", 4, 0xff) - & _test_bsw_bytes_loop("bsw bytes zeros odd", 5, 0x0) - & _test_bsw_bytes_loop("bsw bytes zeros even", 6, 0x0) - & _test_bsw_bytes_loop("bsw bytes alt 1 odd", 7, 0xaa) - & _test_bsw_bytes_loop("bsw bytes alt 1 even", 8, 0xaa) - & _test_bsw_bytes_loop("bsw bytes alt 2 odd", 9, 0x55) - & _test_bsw_bytes_loop("bsw bytes alt 2 even", 10, 0x55); -} - -/* -** ur_bsw_bex golden master -*/ -static void -_bsw_bex_slow(ur_bsw_t *bsw, uint8_t n) -{ - while ( n >= 64 ) { - _bsw64_slow(bsw, 64, 0); - n -= 64; - } - - _bsw64_slow(bsw, n + 1, 1ULL << n); -} - -/* -** at varying offsets, write varying numbers of bits via -** ur_bsw_bex and master, comparing the result each time. -*/ -static int -_test_bsw_bex() -{ - int ret = 1; - ur_bsw_t a = {0}; - ur_bsw_t b = {0}; - uint8_t i; - uint32_t j; - - for ( i = 0; i < 8; i++) { - for ( j = 0; j < 256; j++ ) { - _bsw_reinit(&a, 1, 1); - _bsw_reinit(&b, 1, 1); - a.off = a.bits = b.off = b.bits = i; - - _bsw_bex_slow(&a, j); - ur_bsw_bex(&b, j); - - ret &= _bsw_cmp_check("bsw bex", j, i, j + 1, &a, &b); - } - } - - return ret; -} - -static int -_test_bsw(void) -{ - return _test_bsw_bit() - & _test_bsw8() - & _test_bsw32() - & _test_bsw64() - & _test_bsw_bytes() - & _test_bsw_bex(); -} - -/* -** check bitstream-reader test invariants. -*/ -static int -_bsr_bit_check(const char *cap, - ur_bsr_t *bsr, - uint8_t off, - uint64_t bits, - uint8_t exp, - uint8_t val, - ur_cue_res_e ser, - ur_cue_res_e res) -{ - int ret = 1; - - if ( !ur_bsr_sane(bsr) ) { - fprintf(stderr, "%s: insane off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, bsr->off, bsr->left, bsr->bits); - ret = 0; - } - - if ( ser != res ) { - fprintf(stderr, "%s: res not equal (%s, %s) off=%u left=%" PRIu64 " byte=%02x bits=%" PRIu64 "\r\n", - cap, (ur_cue_good == ser) ? "good" : "gone", - (ur_cue_good == res) ? "good" : "gone", - bsr->off, bsr->left, bsr->left ? bsr->bytes[0] : 0, bsr->bits); - ret = 0; - } - - if ( (ur_cue_good == res) && (exp != val) ) { - fprintf(stderr, "%s: val not equal (%02x, %02x) off=%u left=%" PRIu64 " byte=%02x bits=%" PRIu64 "\r\n", - cap, exp, val, bsr->off, bsr->left, bsr->left ? bsr->bytes[0] : 0, bsr->bits); - ret = 0; - } - - if ( off != bsr->off ) { - fprintf(stderr, "%s: offset fail (%u, %u)\r\n", cap, off, bsr->off); - ret = 0; - } - - if ( bits != bsr->bits ) { - fprintf(stderr, "%s: bits fail (%" PRIu64 ", %" PRIu64 ")\r\n", cap, bits, bsr->bits); - ret = 0; - } - - return ret; -} - -/* -** read a bit 8 times from a bitstream initialized to all ones, -** checking invariants and result after each read. -*/ -static int -_test_bsr_bit_ones(void) -{ - int ret = 1; - uint8_t ones[1] = { 0xff }; - ur_bsr_t bsr = { .left = sizeof(ones), .bytes = ones }; - uint8_t out; - ur_cue_res_e res; - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 1", &bsr, 1, 1, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 2", &bsr, 2, 2, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 3", &bsr, 3, 3, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 4", &bsr, 4, 4, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 5", &bsr, 5, 5, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 6", &bsr, 6, 6, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 7", &bsr, 7, 7, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 8", &bsr, 0, 8, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 9", &bsr, 0, 8, ur_cue_gone, res, 0, 0); - - return ret; -} - -/* -** read a bit 8 times from a bitstream initialized to all zeros, -** checking invariants and result after each read. -*/ -static int -_test_bsr_bit_zeros(void) -{ - int ret = 1; - uint8_t ones[1] = { 0x0 }; - ur_bsr_t bsr = { .left = sizeof(ones), .bytes = ones }; - uint8_t out; - ur_cue_res_e res; - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 1", &bsr, 1, 1, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 2", &bsr, 2, 2, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 3", &bsr, 3, 3, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 4", &bsr, 4, 4, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 5", &bsr, 5, 5, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 6", &bsr, 6, 6, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 7", &bsr, 7, 7, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 8", &bsr, 0, 8, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 9", &bsr, 0, 8, ur_cue_gone, res, 0, 0); - - return ret; -} - -/* -** read a bit 8 times from a bitstream initialized to alternating zeros and ones, -** checking invariants and result after each read. -*/ -static int -_test_bsr_bit_alt(void) -{ - int ret = 1; - uint8_t ones[1] = { 0xaa }; - ur_bsr_t bsr = { .left = sizeof(ones), .bytes = ones }; - uint8_t out; - ur_cue_res_e res; - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 1", &bsr, 1, 1, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 2", &bsr, 2, 2, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 3", &bsr, 3, 3, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 4", &bsr, 4, 4, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 5", &bsr, 5, 5, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 6", &bsr, 6, 6, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 7", &bsr, 7, 7, ur_cue_good, res, 0, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 8", &bsr, 0, 8, ur_cue_good, res, 1, out); - - res = ur_bsr_bit(&bsr, &out); - ret &= _bsr_bit_check("bsr bit ones 9", &bsr, 0, 8, ur_cue_gone, res, 0, 0); - - return ret; -} - -static int -_test_bsr_bit(void) -{ - return _test_bsr_bit_ones() - & _test_bsr_bit_zeros() - & _test_bsr_bit_alt(); -} - -/* -** check bitstream-reader test invariants, after (maybe) reading -** of the end of the stream. -*/ -static int -_bsr_bit_any_check(const char* cap, ur_bsr_t *bsr, uint8_t off, uint64_t bits, uint8_t exp, uint8_t val) -{ - int ret = 1; - - if ( !ur_bsr_sane(bsr) ) { - fprintf(stderr, "%s: insane off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, bsr->off, bsr->left, bsr->bits); - ret = 0; - } - - if ( exp != val ) { - fprintf(stderr, "%s: not equal (%02x, %02x) off=%u left=%" PRIu64 " byte=%02x bits=%" PRIu64 "\r\n", - cap, exp, val, bsr->off, bsr->left, bsr->left ? bsr->bytes[0] : 0, bsr->bits); - ret = 0; - } - - if ( off != bsr->off ) { - fprintf(stderr, "%s: offset fail (%u, %u)\r\n", cap, off, bsr->off); - ret = 0; - } - - if ( bits != bsr->bits ) { - fprintf(stderr, "%s: bits fail (%" PRIu64 ", %" PRIu64 ")\r\n", cap, bits, bsr->bits); - ret = 0; - } - - return ret; -} - -/* -** read a bit 17 times from a bitstream initialized to 8 ones, -** checking invariants and result after each read. -*/ -static int -_test_bsr_bit_any_ones(void) -{ - int ret = 1; - uint8_t ones[1] = { 0xff }; - ur_bsr_t bsr = { .left = sizeof(ones), .bytes = ones }; - uint8_t out; - - ret &= _bsr_bit_any_check("bsr bit-any ones init", &bsr, 0, 0, 0, 0); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones 1", &bsr, 1, 1, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones 2", &bsr, 2, 2, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones 3", &bsr, 3, 3, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones 4", &bsr, 4, 4, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones 5", &bsr, 5, 5, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones 6", &bsr, 6, 6, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones 7", &bsr, 7, 7, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones 8", &bsr, 0, 8, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 9", &bsr, 0, 9, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 10", &bsr, 0, 10, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 11", &bsr, 0, 11, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 12", &bsr, 0, 12, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 13", &bsr, 0, 13, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 14", &bsr, 0, 14, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 15", &bsr, 0, 15, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 16", &bsr, 0, 16, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any ones off 17", &bsr, 0, 17, 0, out); - - return ret; -} - -/* -** read a bit 17 times from a bitstream initialized to 8 zeros, -** checking invariants and result after each read. -*/ -static int -_test_bsr_bit_any_zeros(void) -{ - int ret = 1; - uint8_t ones[1] = { 0x0 }; - ur_bsr_t bsr = { .left = sizeof(ones), .bytes = ones }; - uint8_t out; - - ret &= _bsr_bit_any_check("bsr bit-any zeros init", &bsr, 0, 0, 0, 0); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros 1", &bsr, 1, 1, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros 2", &bsr, 2, 2, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros 3", &bsr, 3, 3, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros 4", &bsr, 4, 4, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros 5", &bsr, 5, 5, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros 6", &bsr, 6, 6, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros 7", &bsr, 7, 7, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros 8", &bsr, 0, 8, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 9", &bsr, 0, 9, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 10", &bsr, 0, 10, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 11", &bsr, 0, 11, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 12", &bsr, 0, 12, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 13", &bsr, 0, 13, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 14", &bsr, 0, 14, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 15", &bsr, 0, 15, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 16", &bsr, 0, 16, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any zeros off 17", &bsr, 0, 17, 0, out); - - return ret; -} - -/* -** read a bit 17 times from a bitstream initialized to 8 bits of alternating, -** ones and zeros, checking invariants and result after each read. -*/ -static int -_test_bsr_bit_any_alt(void) -{ - int ret = 1; - uint8_t ones[1] = { 0xaa }; - ur_bsr_t bsr = { .left = sizeof(ones), .bytes = ones }; - uint8_t out; - - ret &= _bsr_bit_any_check("bsr bit-any alt init", &bsr, 0, 0, 0, 0); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt 1", &bsr, 1, 1, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt 2", &bsr, 2, 2, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt 3", &bsr, 3, 3, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt 4", &bsr, 4, 4, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt 5", &bsr, 5, 5, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt 6", &bsr, 6, 6, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt 7", &bsr, 7, 7, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt 8", &bsr, 0, 8, 1, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 9", &bsr, 0, 9, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 10", &bsr, 0, 10, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 11", &bsr, 0, 11, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 12", &bsr, 0, 12, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 13", &bsr, 0, 13, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 14", &bsr, 0, 14, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 15", &bsr, 0, 15, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 16", &bsr, 0, 16, 0, out); - - out = ur_bsr_bit_any(&bsr); - ret &= _bsr_bit_any_check("bsr bit-any alt off 17", &bsr, 0, 17, 0, out); - - return ret; -} - -static int -_test_bsr_bit_any(void) -{ - return _test_bsr_bit_any_ones() - & _test_bsr_bit_any_zeros() - & _test_bsr_bit_any_alt(); -} - -/* -** subsequents bitstream-reader tests assume the correctnesss of -** ur_bsr_bit_any(), and compare the output of a bit-at-a-time -** "golden master" with that of the relevant, higher-level operation. -** -** XX the "golden" master implementations shouldn't be in bitstream module, -** as we don't intend to run them, but it's kind of weird implement them -** in the test itself. -** -*/ -static int -_bsr_cmp_any_check(const char* cap, uint8_t off, uint8_t len, ur_bsr_t *a, ur_bsr_t *b) -{ - int ret = 1; - - if ( !ur_bsr_sane(a) ) { - fprintf(stderr, "%s: off %u, len %u a insane off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, off, len, a->off, a->left, a->bits); - ret = 0; - } - - if ( !ur_bsr_sane(b) ) { - fprintf(stderr, "%s: off %u, len %u a insane off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, off, len, b->off, b->left, b->bits); - ret = 0; - } - - if ( a->off != b->off ) { - fprintf(stderr, "%s: off %u len %u: offset fail (%u, %u)\r\n", - cap, off, len, a->off, b->off); - ret = 0; - } - - if ( a->left != b->left ) { - fprintf(stderr, "%s: off %u len %u: left fail (%" PRIu64 ", %" PRIu64 ")\r\n", - cap, off, len, a->left, b->left); - ret = 0; - } - - if ( a->bits != b->bits ) { - fprintf(stderr, "%s: off %u len %u: bits fail (%" PRIu64 ", %" PRIu64 ")\r\n", - cap, off, len, a->bits, b->bits); - ret = 0; - } - - if ( a->bytes != b->bytes ) { - fprintf(stderr, "%s: off %u len %u: bytes fail (%p, %p)\r\n", - cap, off, len, a->bytes, b->bytes); - ret = 0; - } - - return ret; -} - -/* -** ur_bsr8_any golden master -*/ -static uint8_t -_bsr8_any_slow(ur_bsr_t *bsr, uint8_t len) -{ - uint8_t i, out = 0; - - len = ur_min(8, len); - - for ( i = 0; i < len; i++ ) { - out ^= ur_bsr_bit_any(bsr) << i; - } - - return out; -} - -/* -** from a bitstream-reader initialized with varying values/lengths/offsets, -** read a varying numbers of bits via ur_bsr8_any and master, comparing -** the results and respective states each time. -*/ -static int -_test_bsr8_loop(const char *cap, uint8_t len, uint8_t val) -{ - int ret = 1; - uint8_t *bytes; - ur_bsr_t a, b; - uint8_t c, d, i, j; - - bytes = malloc(len); - memset(bytes, val, len); - - for ( i = 0; i < 8; i++) { - for ( j = 0; j <= 8; j++ ) { - a.left = b.left = len; - a.bytes = b.bytes = bytes; - a.off = a.bits = b.off = b.bits = i; - - c = _bsr8_any_slow(&a, j); - d = ur_bsr8_any(&b, j); - - ret &= _bsr_cmp_any_check(cap, i, j, &a, &b); - - if ( c != d ) { - fprintf(stderr, "%s: off %u, len %u not equal (%02x, %02x) off=%u left=%" PRIu64 " byte=%02x bits=%" PRIu64 "\r\n", - cap, i, j, c, d, b.off, b.left, b.left ? b.bytes[0] : 0, b.bits); - ret = 0; - } - } - } - - free(bytes); - - return ret; -} - -static int -_test_bsr8(void) -{ - return _test_bsr8_loop("bsr8 ones 1", 1, 0xff) - & _test_bsr8_loop("bsr8 ones 2", 2, 0xff) - & _test_bsr8_loop("bsr8 zeros 1", 1, 0x0) - & _test_bsr8_loop("bsr8 zeros 2", 2, 0x0) - & _test_bsr8_loop("bsr8 alt-1 1", 1, 0xaa) - & _test_bsr8_loop("bsr8 alt-1 2", 2, 0xaa) - & _test_bsr8_loop("bsr8 alt-2 1", 1, 0x55) - & _test_bsr8_loop("bsr8 alt-2 2", 2, 0x55); -} - -/* -** ur_bsr32_any golden master -*/ -static uint32_t -_bsr32_any_slow(ur_bsr_t *bsr, uint8_t len) -{ - uint32_t out = 0; - uint8_t i; - - len = ur_min(32, len); - - for ( i = 0; i < len; i++ ) { - out ^= (uint32_t)ur_bsr_bit_any(bsr) << i; - } - - return out; -} - -/* -** from a bitstream-reader initialized with varying values/lengths/offsets, -** read a varying numbers of bits via ur_bsr32_any and master, comparing -** the results and respective states each time. -*/ -static int -_test_bsr32_loop(const char *cap, uint8_t len, uint8_t val) -{ - int ret = 1; - uint8_t *bytes; - ur_bsr_t a, b; - uint32_t c, d; - uint8_t i, j; - - bytes = malloc(len); - memset(bytes, val, len); - - for ( i = 0; i < 8; i++) { - for ( j = 0; j <= 32; j++ ) { - a.left = b.left = len; - a.bytes = b.bytes = bytes; - a.off = a.bits = b.off = b.bits = i; - - c = _bsr32_any_slow(&a, j); - d = ur_bsr32_any(&b, j); - - ret &= _bsr_cmp_any_check(cap, i, j, &a, &b); - - if ( c != d ) { - fprintf(stderr, "%s: off %u, len %u not equal (%08x, %08x) off=%u left=%" PRIu64 " byte=%02x bits=%" PRIu64 "\r\n", - cap, i, j, c, d, b.off, b.left, b.left ? b.bytes[0] : 0, b.bits); - ret = 0; - } - } - } - - free(bytes); - - return ret; -} - -static int -_test_bsr32(void) -{ - return _test_bsr32_loop("bsr32 ones 1", 1, 0xff) - & _test_bsr32_loop("bsr32 ones 2", 2, 0xff) - & _test_bsr32_loop("bsr32 ones 3", 3, 0xff) - & _test_bsr32_loop("bsr32 ones 4", 4, 0xff) - & _test_bsr32_loop("bsr32 zeros 1", 1, 0x0) - & _test_bsr32_loop("bsr32 zeros 2", 2, 0x0) - & _test_bsr32_loop("bsr32 zeros 3", 3, 0x0) - & _test_bsr32_loop("bsr32 zeros 4", 4, 0x0) - & _test_bsr32_loop("bsr32 alt-1 1", 1, 0xaa) - & _test_bsr32_loop("bsr32 alt-1 2", 2, 0xaa) - & _test_bsr32_loop("bsr32 alt-1 3", 3, 0xaa) - & _test_bsr32_loop("bsr32 alt-1 4", 4, 0xaa) - & _test_bsr32_loop("bsr32 alt-2 1", 1, 0x55) - & _test_bsr32_loop("bsr32 alt-2 2", 2, 0x55) - & _test_bsr32_loop("bsr32 alt-2 3", 3, 0x55) - & _test_bsr32_loop("bsr32 alt-2 4", 4, 0x55); -} - -/* -** ur_bsr64_any golden master -*/ -static uint64_t -_bsr64_any_slow(ur_bsr_t *bsr, uint8_t len) -{ - uint64_t out = 0; - uint8_t i; - - len = ur_min(64, len); - - for ( i = 0; i < len; i++ ) { - out ^= (uint64_t)ur_bsr_bit_any(bsr) << i; - } - - return out; -} - -/* -** from a bitstream-reader initialized with varying values/lengths/offsets, -** read a varying numbers of bits via ur_bsr64_any and master, comparing -** the results and respective states each time. -*/ -static int -_test_bsr64_loop(const char *cap, uint8_t len, uint8_t val) -{ - int ret = 1; - uint8_t *bytes; - ur_bsr_t a, b; - uint64_t c, d; - uint8_t i, j; - - bytes = malloc(len); - memset(bytes, val, len); - - for ( i = 0; i < 8; i++) { - for ( j = 0; j <= 64; j++ ) { - a.left = b.left = len; - a.bytes = b.bytes = bytes; - a.off = a.bits = b.off = b.bits = i; - - c = _bsr64_any_slow(&a, j); - d = ur_bsr64_any(&b, j); - - ret &= _bsr_cmp_any_check(cap, i, j, &a, &b); - - if ( c != d ) { - fprintf(stderr, "%s: off %u, len %u not equal (%016" PRIx64", %016" PRIx64") off=%u left=%" PRIu64 " byte=%02x bits=%" PRIu64 "\r\n", - cap, i, j, c, d, b.off, b.left, b.left ? b.bytes[0] : 0, b.bits); - ret = 0; - } - } - } - - free(bytes); - - return ret; -} - -static int -_test_bsr64(void) -{ - return _test_bsr64_loop("bsr64 ones 1", 1, 0xff) - & _test_bsr64_loop("bsr64 ones 2", 2, 0xff) - & _test_bsr64_loop("bsr64 ones 3", 3, 0xff) - & _test_bsr64_loop("bsr64 ones 4", 4, 0xff) - & _test_bsr64_loop("bsr64 ones 5", 5, 0xff) - & _test_bsr64_loop("bsr64 ones 6", 6, 0xff) - & _test_bsr64_loop("bsr64 ones 7", 7, 0xff) - & _test_bsr64_loop("bsr64 ones 8", 8, 0xff) - & _test_bsr64_loop("bsr64 zeros 1", 1, 0x0) - & _test_bsr64_loop("bsr64 zeros 2", 2, 0x0) - & _test_bsr64_loop("bsr64 zeros 3", 3, 0x0) - & _test_bsr64_loop("bsr64 zeros 4", 4, 0x0) - & _test_bsr64_loop("bsr64 zeros 5", 5, 0x0) - & _test_bsr64_loop("bsr64 zeros 6", 6, 0x0) - & _test_bsr64_loop("bsr64 zeros 7", 7, 0x0) - & _test_bsr64_loop("bsr64 zeros 8", 8, 0x0) - & _test_bsr64_loop("bsr64 alt-1 1", 1, 0xaa) - & _test_bsr64_loop("bsr64 alt-1 2", 2, 0xaa) - & _test_bsr64_loop("bsr64 alt-1 3", 3, 0xaa) - & _test_bsr64_loop("bsr64 alt-1 4", 4, 0xaa) - & _test_bsr64_loop("bsr64 alt-1 5", 5, 0xaa) - & _test_bsr64_loop("bsr64 alt-1 6", 6, 0xaa) - & _test_bsr64_loop("bsr64 alt-1 7", 7, 0xaa) - & _test_bsr64_loop("bsr64 alt-1 8", 8, 0xaa) - & _test_bsr64_loop("bsr64 alt-2 1", 1, 0x55) - & _test_bsr64_loop("bsr64 alt-2 2", 2, 0x55) - & _test_bsr64_loop("bsr64 alt-2 3", 3, 0x55) - & _test_bsr64_loop("bsr64 alt-2 4", 4, 0x55) - & _test_bsr64_loop("bsr64 alt-2 5", 5, 0x55) - & _test_bsr64_loop("bsr64 alt-2 6", 6, 0x55) - & _test_bsr64_loop("bsr64 alt-2 7", 7, 0x55) - & _test_bsr64_loop("bsr64 alt-2 8", 8, 0x55); -} - -/* -** ur_bsr_bytes_any golden master -*/ -static void -_bsr_bytes_any_slow(ur_bsr_t *bsr, uint64_t len, uint8_t *out) -{ - uint64_t i, len_byt = len >> 3, len_bit = ur_mask_3(len); - - for ( i = 0; i < len_byt; i++ ) { - out[i] = _bsr8_any_slow(bsr, 8); - } - - if ( len_bit ) { - out[len_byt] = _bsr8_any_slow(bsr, len_bit); - } -} - -/* -** from a bitstream-reader initialized with varying values/lengths/offsets, -** read a varying numbers of bits via ur_bsr_bytes_any and master, comparing -** the results and respective states each time. -*/ -static int -_test_bsr_bytes_any_loop(const char *cap, uint8_t len, uint8_t val) -{ - int ret = 1; - uint64_t max = (len << 3) + 7; - ur_bsr_t a, b; - uint8_t *bytes, *c, *d; - uint8_t i, j, k; - - c = malloc(1 + len); - d = malloc(1 + len); - bytes = malloc(len); - memset(bytes, val, len); - - for ( i = 0; i < 8; i++) { - for ( j = 1; j <= max; j++ ) { - a.left = b.left = len; - a.bytes = b.bytes = len ? bytes : 0; - a.off = b.off = len ? i : 0; - a.bits = b.bits = i; - memset(c, 0x0, len); - memset(d, 0x0, len); - - _bsr_bytes_any_slow(&a, j, c); - ur_bsr_bytes_any(&b, j, d); - - ret &= _bsr_cmp_any_check(cap, i, j, &a, &b); - - if ( memcmp(c, d, len) ) { - fprintf(stderr, "%s: off %u, len %u not equal off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, i, j, b.off, b.left, b.bits); - fprintf(stderr, " a: { "); - for ( k = 0; k < len; k++ ) { - fprintf(stderr, "%02x, ", c[k]); - } - fprintf(stderr, "}\r\n"); - fprintf(stderr, " b: { "); - for ( k = 0; k < len; k++ ) { - fprintf(stderr, "%02x, ", d[k]); - } - fprintf(stderr, "}\r\n"); - ret = 0; - } - } - } - - free(bytes); - free(d); - free(c); - - return ret; -} - -static int -_test_bsr_bytes_any(void) -{ - return _test_bsr_bytes_any_loop("bsr bytes nought", 0, 0x0) - & _test_bsr_bytes_any_loop("bsr bytes ones odd", 3, 0xff) - & _test_bsr_bytes_any_loop("bsr bytes ones even", 4, 0xff) - & _test_bsr_bytes_any_loop("bsr bytes zeros odd", 5, 0x0) - & _test_bsr_bytes_any_loop("bsr bytes zeros even", 6, 0x0) - & _test_bsr_bytes_any_loop("bsr bytes alt 1 odd", 7, 0xaa) - & _test_bsr_bytes_any_loop("bsr bytes alt 1 even", 8, 0xaa) - & _test_bsr_bytes_any_loop("bsr bytes alt 2 odd", 9, 0x55) - & _test_bsr_bytes_any_loop("bsr bytes alt 2 even", 10, 0x55); -} - -/* -** from a bitstream-reader initialized with varying values/lengths/offsets, -** skip a varying numbers of bits via ur_bsr_skip_any and read the same via -** ur_bsr_bytes_any master, comparing the respective states each time. -*/ -static int -_test_bsr_skip_any_loop(const char *cap, uint8_t len, uint8_t val) -{ - int ret = 1; - uint64_t max = (len << 3) + 7; - ur_bsr_t a, b; - uint8_t *bytes, *c; - uint8_t i, j; - - c = malloc(1 + len); - bytes = malloc(len); - memset(bytes, val, len); - - for ( i = 0; i < 8; i++) { - for ( j = 1; j <= max; j++ ) { - a.left = b.left = len; - a.bytes = b.bytes = len ? bytes : 0; - a.off = b.off = len ? i : 0; - a.bits = b.bits = i; - memset(c, 0x0, len); - - _bsr_bytes_any_slow(&a, j, c); - ur_bsr_skip_any(&b, j); - - ret &= _bsr_cmp_any_check(cap, i, j, &a, &b); - } - } - - free(bytes); - free(c); - - return ret; -} - -static int -_test_bsr_skip_any(void) -{ - return _test_bsr_skip_any_loop("bsr skip nought", 0, 0x0) - & _test_bsr_skip_any_loop("bsr skip ones odd", 3, 0xff) - & _test_bsr_skip_any_loop("bsr skip ones even", 4, 0xff) - & _test_bsr_skip_any_loop("bsr skip zeros odd", 5, 0x0) - & _test_bsr_skip_any_loop("bsr skip zeros even", 6, 0x0) - & _test_bsr_skip_any_loop("bsr skip alt 1 odd", 7, 0xaa) - & _test_bsr_skip_any_loop("bsr skip alt 1 even", 8, 0xaa) - & _test_bsr_skip_any_loop("bsr skip alt 2 odd", 9, 0x55) - & _test_bsr_skip_any_loop("bsr skip alt 2 even", 10, 0x55); -} - -/* -** compare the result and state of two reads (that were not permitted -** to read past the end of the stream). -*/ -static int -_bsr_cmp_check(const char* cap, - uint8_t off, - uint8_t len, - ur_bsr_t *a, - ur_bsr_t *b, - uint8_t c, - uint8_t d, - ur_cue_res_e e, - ur_cue_res_e f) -{ - int ret = 1; - - if ( !ur_bsr_sane(a) ) { - fprintf(stderr, "%s: off %u, len %u a insane off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, off, len, a->off, a->left, a->bits); - ret = 0; - } - - if ( !ur_bsr_sane(b) ) { - fprintf(stderr, "%s: off %u, len %u a insane off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, off, len, b->off, b->left, b->bits); - ret = 0; - } - - if ( e != f ) { - fprintf(stderr, "%s: off %u, len %u ret not equal (%s, %s) off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, off, len, - (ur_cue_good == e) ? "good" : "gone", - (ur_cue_good == f) ? "good" : "gone", - b->off, b->left, b->bits); - ret = 0; - } - - if ( (ur_cue_good == e) && (c != d) ) { - fprintf(stderr, "%s: off %u, len %u val not equal (%02x, %02x) off=%u left=%" PRIu64 " bits=%" PRIu64 "\r\n", - cap, off, len, c, d, b->off, b->left, b->bits); - ret = 0; - } - - if ( a->off != b->off ) { - fprintf(stderr, "%s: off %u len %u: offset fail (%u, %u)\r\n", - cap, off, len, a->off, b->off); - ret = 0; - } - - if ( a->left != b->left ) { - fprintf(stderr, "%s: off %u len %u: left fail (%" PRIu64 ", %" PRIu64 ")\r\n", - cap, off, len, a->left, b->left); - ret = 0; - } - - if ( a->bits != b->bits ) { - fprintf(stderr, "%s: off %u len %u: bits fail (%" PRIu64 ", %" PRIu64 ")\r\n", - cap, off, len, a->bits, b->bits); - ret = 0; - } - - if ( a->bytes != b->bytes ) { - fprintf(stderr, "%s: off %u len %u: bytes fail (%p, %p)\r\n", - cap, off, len, a->bytes, b->bytes); - ret = 0; - } - - - return ret; -} - -/* -** ur_bsr_log golden master -*/ -static ur_cue_res_e -_bsr_log_slow(ur_bsr_t *bsr, uint8_t *out) -{ - ur_cue_res_e res; - uint8_t bit, i = 0; - - do { - if ( ur_cue_good != (res = ur_bsr_bit(bsr, &bit)) ) { - return res; - } - else if ( bit ) { - *out = i; - return ur_cue_good; - } - } - while ( ++i ); - - return ur_cue_meme; -} - -/* -** from a bitstream-reader initialized with varying values/lengths/offsets, -** read a varying numbers of bits via ur_bsr_log and master, comparing -** the results and respective states each time. -*/ -static int -_test_bsr_log_loop(const char *cap, uint8_t len, uint8_t val) -{ - int ret = 1; - ur_bsr_t a, b; - uint8_t *bytes, c, d; - uint8_t i, j; - ur_cue_res_e e, f; - - bytes = malloc(len); - - for ( i = 0; i < 8; i++) { - for ( j = 0; j < len; j++ ) { - a.left = b.left = len; - a.bytes = b.bytes = bytes; - a.off = a.bits = b.off = b.bits = i; - - memset(bytes, 0x0, j); - memset(bytes + j, val, len - j); - - e = _bsr_log_slow(&a, &c); - f = ur_bsr_log(&b, &d); - - ret &= _bsr_cmp_check(cap, i, j, &a, &b, c, d, e, f); - } - } - - free(bytes); - - return ret; -} - -static int -_test_bsr_log(void) -{ - int ret = _test_bsr_log_loop("bsr log nought", 0, 0x0) - & _test_bsr_log_loop("bsr log ones odd", 3, 0xff) - & _test_bsr_log_loop("bsr log ones even", 4, 0xff) - & _test_bsr_log_loop("bsr log ones big", 50, 0xff) - & _test_bsr_log_loop("bsr log zeros odd", 5, 0x0) - & _test_bsr_log_loop("bsr log zeros even", 6, 0x0) - & _test_bsr_log_loop("bsr log zeros big", 50, 0x0); - - { - uint8_t i, j = 5; - char cap[1024]; - - for ( i = 0; i < 8; i++ ) { - snprintf(cap, 1000, "bsr log 1<<%u odd", i); - ret &= _test_bsr_log_loop((const char*)cap, j++, 0x1 << i); - - snprintf(cap, 1000, "bsr log 1<<%u even", i); - ret &= _test_bsr_log_loop((const char*)cap, j++, 0x1 << i); - - snprintf(cap, 1000, "bsr log 1<<%u big", i); - ret &= _test_bsr_log_loop((const char*)cap, 50, 0x1 << i); - } - } - - return ret; -} - -/* -** ur_bsr_tag golden master -*/ -static ur_cue_res_e -_bsr_tag_slow(ur_bsr_t *bsr, ur_cue_tag_e *out) -{ - ur_cue_res_e res; - uint8_t bit; - - if ( ur_cue_good != (res = ur_bsr_bit(bsr, &bit)) ) { - return res; - } - else if ( 0 == bit ) { - *out = ur_jam_atom; - return ur_cue_good; - } - else if ( ur_cue_good != (res = ur_bsr_bit(bsr, &bit)) ) { - return res; - } - - *out = ( 0 == bit ) ? ur_jam_cell : ur_jam_back; - return ur_cue_good; -} - -/* -** from a bitstream-reader initialized with varying values/lengths/offsets, -** read a jam type tag via ur_bsr_tag and master, comparing the results and -** respective states each time. -*/ -static int -_test_bsr_tag_loop(const char *cap, uint8_t len, uint8_t val) -{ - int ret = 1; - ur_bsr_t a, b; - uint8_t *bytes; - ur_cue_tag_e c, d; - uint8_t i, j; - ur_cue_res_e e, f; - - bytes = malloc(len); - - for ( i = 0; i < 8; i++) { - for ( j = 0; j < len; j++ ) { - a.left = b.left = len; - a.bytes = b.bytes = bytes; - a.off = a.bits = b.off = b.bits = i; - - memset(bytes, 0x0, j); - memset(bytes + j, val, len - j); - - e = _bsr_tag_slow(&a, &c); - f = ur_bsr_tag(&b, &d); - - ret &= _bsr_cmp_check(cap, i, j, &a, &b, c, d, e, f); - } - } - - free(bytes); - - return ret; -} - -static int -_test_bsr_tag(void) -{ - return _test_bsr_tag_loop("bsr tag nought", 0, 0x0) - & _test_bsr_tag_loop("bsr tag ones 1", 1, 0xff) - & _test_bsr_tag_loop("bsr tag ones 2", 2, 0xff) - & _test_bsr_tag_loop("bsr tag zeros 1", 1, 0x0) - & _test_bsr_tag_loop("bsr tag zeros 2", 2, 0x0) - & _test_bsr_tag_loop("bsr tag alt-1 1", 1, 0xaa) - & _test_bsr_tag_loop("bsr tag alt-1 2", 2, 0xaa) - & _test_bsr_tag_loop("bsr tag alt-2 1", 1, 0x55) - & _test_bsr_tag_loop("bsr tag alt-2 2", 2, 0x55); -} - -static int -_test_bsr(void) -{ - return _test_bsr_bit() - & _test_bsr_bit_any() - & _test_bsr_bytes_any() - & _test_bsr_skip_any() - & _test_bsr8() - & _test_bsr32() - & _test_bsr64() - & _test_bsr_log() - & _test_bsr_tag(); -} - -static int -_test_jam_spec(const char *cap, - ur_root_t *r, - ur_nref ref, - size_t len, - const uint8_t *res) -{ - uint64_t i, out_len; - uint8_t *out; - int ret; - - ur_jam(r, ref, &out_len, &out); - - if ( 0 != memcmp(out, res, len) ) { - fprintf(stderr, "\033[31mjam %s fail\033[0m\r\n", cap); - - fprintf(stderr, " actual: { "); - for ( i = 0; i < out_len; i++ ) { - fprintf(stderr, "0x%x, ", out[i]); - } - fprintf(stderr, "}\r\n"); - fprintf(stderr, " expect: { "); - for ( i = 0; i < len; i++ ) { - fprintf(stderr, "0x%x, ", res[i]); - } - fprintf(stderr, "}\r\n"); - - ret = 0; - } - else { - ret = 1; - } - - free(out); - - return ret; -} - -static int -_test_cue_spec(const char *cap, - ur_root_t* r, - ur_nref ref, - size_t len, - const uint8_t *res) -{ - int ret = 1; - ur_nref out; - - if ( !ur_cue_test(len, res) ) { - fprintf(stderr, "\033[31mcue %s fail 1\033[0m\r\n", cap); - ret = 0; - } - - if ( ur_cue_good != ur_cue(r, len, res, &out) ) { - fprintf(stderr, "\033[31mcue %s fail 2\033[0m\r\n", cap); - ret = 0; - } - else if ( ref != out ) { - fprintf(stderr, "\033[31mcue %s fail 3 ref=%" PRIu64 " out=%" PRIu64 " \033[0m\r\n", cap, ref, out); - ret = 0; - } - - return ret; -} - -/* -** test jam/cue correctness and roundtrips across a variety of inputs -*/ -static int -_test_jam_cue(void) -{ - ur_root_t *r = ur_root_init(); - int ret = 1; - -# define NC(a, b) ur_cons(r, a, b) -# define NT(a, b, c) NC(a, NC(b, c)) - -# define FAST 0x74736166 -# define FULL 0x6c6c7566 - -# define TEST_CASE(a, b) \ - const char* cap = a; \ - ur_nref ref = b; \ - ret &= _test_jam_spec(cap, r, ref, sizeof(res), res); \ - ret &= _test_cue_spec(cap, r, ref, sizeof(res), res); \ - - { - uint8_t res[1] = { 0x2 }; - TEST_CASE("0", 0); - } - - { - uint8_t res[1] = { 0xc }; - TEST_CASE("1", 1); - } - - { - uint8_t res[1] = { 0x48 }; - TEST_CASE("2", 2); - } - - { - uint8_t res[6] = { 0xc0, 0x37, 0xb, 0x9b, 0xa3, 0x3 }; - TEST_CASE("%fast", FAST); - } - - { - uint8_t res[6] = { 0xc0, 0x37, 0xab, 0x63, 0x63, 0x3 }; - TEST_CASE("%full", FULL); - } - - { - uint8_t res[1] = { 0x29 }; - TEST_CASE("[0 0]", NC(0, 0)); - } - - { - uint8_t res[2] = { 0x31, 0x3 }; - TEST_CASE("[1 1]", NC(1, 1)); - } - - { - uint8_t res[2] = { 0x21, 0xd1 }; - TEST_CASE("[2 3]", NC(2, 3)); - } - - { - uint8_t res[11] = { 0x1, 0xdf, 0x2c, 0x6c, 0x8e, 0xe, 0x7c, 0xb3, 0x3a, 0x36, 0x36 }; - TEST_CASE("[%fast %full]", NC(FAST, FULL)); - } - - { - uint8_t res[2] = { 0x71, 0xcc }; - TEST_CASE("[1 1 1]", NC(1, NC(1, 1))); - } - - { - uint8_t res[12] = { 0x1, 0xdf, 0x2c, 0x6c, 0x8e, 0x1e, 0xf0, 0xcd, 0xea, 0xd8, 0xd8, 0x93 }; - TEST_CASE("[%fast %full %fast]", NC(FAST, NC(FULL, FAST))); - } - - { - uint8_t res[6] = { 0xa5, 0x35, 0x19, 0xf3, 0x18, 0x5 }; - TEST_CASE("[[0 0] [[0 0] 1 1] 1 1]", NC(NC(0, 0), NC(NC(NC(0, 0), NC(1, 1)), NC(1, 1)))); - } - - { - uint8_t res[14] = { 0x15, 0x17, 0xb2, 0xd0, 0x85, 0x59, 0xb8, 0x61, 0x87, 0x5f, 0x10, 0x54, 0x55, 0x5 }; - TEST_CASE("deep", NC(NC(NC(1, NC(NC(2, NC(NC(3, NC(NC(4, NC(NT(5, 6, NC(7, NC(NC(8, 0), 0))), 0)), 0)), 0)), 0)), 0), 0)); - } - - { - uint8_t inp[33] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; - uint8_t res[35] = { 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; - TEST_CASE("wide", ur_coin_bytes(r, sizeof(inp), inp)); - } - - { - uint8_t inp[16] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0xa8, 0xab, 0x60, 0xef, 0x2d, 0xd, 0x0, 0x0, 0x80 }; - uint8_t res[19] = { 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x50, 0x57, 0xc1, 0xde, 0x5b, 0x1a, 0x0, 0x0, 0x0, 0x1 }; - TEST_CASE("date", ur_coin_bytes(r, sizeof(inp), inp)); - } - - ur_root_free(r); - - return ret; -} - -static int -_test_ur(void) -{ - int ret = 1; - - if ( !_test_bsw() ) { - fprintf(stderr, "ur test bsw failed\r\n"); - ret = 0; - } - - if ( !_test_bsr() ) { - fprintf(stderr, "ur test bsr failed\r\n"); - ret = 0; - } - - if ( !_test_jam_cue() ) { - fprintf(stderr, "ur test jam/cue failed\r\n"); - ret = 0; - } - - return ret; -} - -int -main(int argc, char* argv[]) -{ - if ( !_test_ur() ) { - fprintf(stderr, "ur test failed\r\n"); - return 1; - } - - fprintf(stderr, "ur ok\n"); - return 0; -} diff --git a/pkg/urbit/ur/bitstream.c b/pkg/urbit/ur/bitstream.c deleted file mode 100644 index dfc42393b..000000000 --- a/pkg/urbit/ur/bitstream.c +++ /dev/null @@ -1,1291 +0,0 @@ -#include -#include -#include -#include - -#include "ur/defs.h" -#include "ur/bitstream.h" - -ur_cue_res_e -ur_bsr_init(ur_bsr_t *bsr, uint64_t len, const uint8_t *bytes) -{ - // check for overflow - // - if ( (len << 3) < len ) { - return ur_cue_meme; - } - - bsr->left = len; - bsr->bytes = bytes; - - return ur_cue_good; -} - -ur_bool_t -ur_bsr_sane(ur_bsr_t *bsr) -{ - ur_bool_t ret = 8 > bsr->off; - - if ( !bsr->left ) { - ret = ret && (!bsr->off && !bsr->bytes); - } - - return ret; -} - -ur_cue_res_e -ur_bsr_bit(ur_bsr_t *bsr, uint8_t *out) -{ - uint64_t left = bsr->left; - - if ( !left ) { - return ur_cue_gone; - } - else { - const uint8_t *b = bsr->bytes; - uint8_t off = bsr->off; - uint8_t bit = (b[0] >> off) & 1; - - if ( 7 == off ) { - bsr->bytes = ( --left ) ? (b + 1) : 0; - bsr->left = left; - bsr->off = 0; - } - else { - bsr->off = 1 + off; - } - - bsr->bits++; - - *out = bit; - return ur_cue_good; - } -} - -uint8_t -ur_bsr_bit_any(ur_bsr_t *bsr) -{ - uint64_t left = bsr->left; - - bsr->bits++; - - if ( !left ) { - return 0; - } - else { - const uint8_t *b = bsr->bytes; - uint8_t off = bsr->off; - uint8_t bit = (b[0] >> off) & 1; - - if ( 7 == off ) { - bsr->bytes = ( --left ) ? (b + 1) : 0; - bsr->left = left; - bsr->off = 0; - } - else { - bsr->off = 1 + off; - } - - return bit; - } -} - -uint8_t -ur_bsr8_any(ur_bsr_t *bsr, uint8_t len) -{ - uint64_t left = bsr->left; - - len = ur_min(8, len); - - bsr->bits += len; - - if ( !left ) { - return 0; - } - else { - uint8_t off = bsr->off; - uint8_t rest = 8 - off; - const uint8_t *b = bsr->bytes; - uint8_t m = b[0] >> off; - - if ( len < rest ) { - bsr->off = off + len; - return m & ((1 << len) - 1); - } - else if ( 1 == left ) { - bsr->off = 0; - bsr->left = 0; - bsr->bytes = 0; - return m; - } - else { - off = len - rest; - - bsr->off = off; - bsr->left--; - bsr->bytes++; - - { - uint8_t l = b[1] & ((1 << off) - 1); - return m ^ (l << rest); - } - } - } -} - -uint32_t -ur_bsr32_any(ur_bsr_t *bsr, uint8_t len) -{ - uint64_t left = bsr->left; - - len = ur_min(32, len); - - bsr->bits += len; - - if ( !left ) { - return 0; - } - else { - uint8_t off = bsr->off; - uint8_t rest = 8 - off; - uint32_t m = bsr->bytes[0] >> off; - - if ( len < rest ) { - bsr->off = off + len; - return m & ((1 << len) - 1); - } - else { - const uint8_t *b; - uint8_t mask, len_byt; - uint32_t l; - - len -= rest; - left--; - b = ++bsr->bytes; - - len_byt = len >> 3; - - if ( len_byt >= left ) { - len_byt = left; - bsr->off = off = 0; - bsr->left = 0; - bsr->bytes = 0; - } - else { - bsr->off = off = ur_mask_3(len); - bsr->left = left - len_byt; - bsr->bytes += len_byt; - } - - mask = (1 << off) - 1; - - switch ( len_byt ) { - default: assert(0); - - case 4: { - l = (uint32_t)b[0] - ^ (uint32_t)b[1] << 8 - ^ (uint32_t)b[2] << 16 - ^ (uint32_t)b[3] << 24; - } break; - - case 3: { - l = (uint32_t)b[0] - ^ (uint32_t)b[1] << 8 - ^ (uint32_t)b[2] << 16; - - if ( mask ) { - l ^= (uint32_t)(b[3] & mask) << 24; - } - } break; - - case 2: { - l = (uint32_t)b[0] - ^ (uint32_t)b[1] << 8; - - if ( mask ) { - l ^= (uint32_t)(b[2] & mask) << 16; - } - } break; - - case 1: { - l = (uint32_t)b[0]; - - if ( mask ) { - l ^= (uint32_t)(b[1] & mask) << 8; - } - } break; - - case 0: { - l = ( mask ) ? (uint32_t)(b[0] & mask) : 0; - } break; - } - - return m ^ (l << rest); - } - } -} - -uint64_t -ur_bsr64_any(ur_bsr_t *bsr, uint8_t len) -{ - uint64_t left = bsr->left; - - len = ur_min(64, len); - - bsr->bits += len; - - if ( !left ) { - return 0; - } - else { - uint8_t off = bsr->off; - uint8_t rest = 8 - off; - uint64_t m = bsr->bytes[0] >> off; - - if ( len < rest ) { - bsr->off = off + len; - return m & ((1 << len) - 1); - } - else { - const uint8_t *b; - uint8_t mask, len_byt; - uint64_t l; - - len -= rest; - left--; - b = ++bsr->bytes; - - len_byt = len >> 3; - - if ( len_byt >= left ) { - len_byt = left; - bsr->off = off = 0; - bsr->left = 0; - bsr->bytes = 0; - } - else { - bsr->off = off = ur_mask_3(len); - bsr->left = left - len_byt; - bsr->bytes += len_byt; - } - - mask = (1 << off) - 1; - - switch ( len_byt ) { - case 8: { - l = (uint64_t)b[0] - ^ (uint64_t)b[1] << 8 - ^ (uint64_t)b[2] << 16 - ^ (uint64_t)b[3] << 24 - ^ (uint64_t)b[4] << 32 - ^ (uint64_t)b[5] << 40 - ^ (uint64_t)b[6] << 48 - ^ (uint64_t)b[7] << 56; - } break; - - case 7: { - l = (uint64_t)b[0] - ^ (uint64_t)b[1] << 8 - ^ (uint64_t)b[2] << 16 - ^ (uint64_t)b[3] << 24 - ^ (uint64_t)b[4] << 32 - ^ (uint64_t)b[5] << 40 - ^ (uint64_t)b[6] << 48; - - if ( mask ) { - l ^= (uint64_t)(b[7] & mask) << 56; - } - } break; - - case 6: { - l = (uint64_t)b[0] - ^ (uint64_t)b[1] << 8 - ^ (uint64_t)b[2] << 16 - ^ (uint64_t)b[3] << 24 - ^ (uint64_t)b[4] << 32 - ^ (uint64_t)b[5] << 40; - - if ( mask ) { - l ^= (uint64_t)(b[6] & mask) << 48; - } - } break; - - case 5: { - l = (uint64_t)b[0] - ^ (uint64_t)b[1] << 8 - ^ (uint64_t)b[2] << 16 - ^ (uint64_t)b[3] << 24 - ^ (uint64_t)b[4] << 32; - - if ( mask ) { - l ^= (uint64_t)(b[5] & mask) << 40; - } - } break; - - case 4: { - l = (uint64_t)b[0] - ^ (uint64_t)b[1] << 8 - ^ (uint64_t)b[2] << 16 - ^ (uint64_t)b[3] << 24; - - if ( mask ) { - l ^= (uint64_t)(b[4] & mask) << 32; - } - } break; - - case 3: { - l = (uint64_t)b[0] - ^ (uint64_t)b[1] << 8 - ^ (uint64_t)b[2] << 16; - - if ( mask ) { - l ^= (uint64_t)(b[3] & mask) << 24; - } - } break; - - case 2: { - l = (uint64_t)b[0] - ^ (uint64_t)b[1] << 8; - - if ( mask ) { - l ^= (uint64_t)(b[2] & mask) << 16; - } - } break; - - case 1: { - l = (uint64_t)b[0]; - - if ( mask ) { - l ^= (uint64_t)(b[1] & mask) << 8; - } - } break; - - case 0: { - l = ( mask ) ? (uint64_t)(b[0] & mask) : 0; - } break; - } - - return m ^ (l << rest); - } - } -} - -void -ur_bsr_bytes_any(ur_bsr_t *bsr, uint64_t len, uint8_t *out) -{ - uint64_t left = bsr->left; - - bsr->bits += len; - - if ( !left ) { - return; - } - else { - const uint8_t *b = bsr->bytes; - uint8_t off = bsr->off; - uint64_t len_byt = len >> 3; - uint8_t len_bit = ur_mask_3(len); - uint64_t need = len_byt + !!len_bit; - - if ( !off ) { - if ( need > left ) { - memcpy(out, b, left); - left = 0; - bsr->bytes = 0; - } - else { - memcpy(out, b, len_byt); - off = len_bit; - - if ( off ) { - out[len_byt] = b[len_byt] & ((1 << off) - 1); - } - - left -= len_byt; - bsr->bytes = ( left ) ? b + len_byt : 0; - } - } - // the most-significant bits from a byte in the stream - // become the least-significant bits of an output byte, and vice-versa - // - else { - uint8_t rest = 8 - off; - uint8_t mask = (1 << off) - 1; - uint8_t byt, l, m = *b >> off; - uint64_t last = left - 1; - - // loop over all the bytes we need (or all that remain) - // - // [l] holds [off] bits - // [m] holds [rest] bits - // - { - uint64_t max = ur_min(last, len_byt); - uint64_t i; - - for ( i = 0; i < max; i++ ) { - byt = *++b; - l = byt & mask; - out[i] = m ^ (l << rest); - m = byt >> off; - } - } - - // we're reading into or beyond the last byte [bsr] - // - // [m] holds all the remaining bits in [bsr], - // but we might not need all of it - // - if ( need >= left ) { - uint8_t bits = len - (last << 3); - - if ( bits < rest ) { - out[last] = m & ((1 << bits) - 1); - bsr->bytes = b; - left = 1; - off += len_bit; - } - else { - out[last] = m; - bsr->bytes = 0; - left = 0; - off = 0; - } - } - // we need less than a byte, but it might span multiple bytes - // - else { - uint8_t bits = off + len_bit; - uint8_t step = !!(bits >> 3); - - bsr->bytes = b + step; - left -= len_byt + step; - off = ur_mask_3(bits); - - if ( len_bit ) { - if ( len_bit <= rest ) { - out[len_byt] = m & ((1 << len_bit) - 1); - } - else { - l = *++b & ((1 << off) - 1); - out[len_byt] = m ^ (l << rest); - } - } - } - } - - bsr->off = off; - bsr->left = left; - } -} - -void -ur_bsr_skip_any(ur_bsr_t *bsr, uint64_t len) -{ - uint64_t left = bsr->left; - - bsr->bits += len; - - if ( !left ) { - return; - } - else { - const uint8_t *b = bsr->bytes; - uint8_t off = bsr->off; - uint64_t len_byt = len >> 3; - uint8_t len_bit = ur_mask_3(len); - uint64_t need = len_byt + !!len_bit; - uint8_t rest = 8 - off; - uint64_t last = left - 1; - - b += ur_min(last, len_byt) + 1; - - if ( need >= left ) { - uint8_t bits = len - (last << 3); - - if ( bits < rest ) { - bsr->bytes = b - 1; - left = 1; - off += len_bit; - } - else { - bsr->bytes = 0; - left = 0; - off = 0; - } - } - else { - uint8_t bits = off + len_bit; - uint8_t step = !!(bits >> 3); - - bsr->bytes = b - (1 - step); - left -= len_byt + step; - off = ur_mask_3(bits); - } - - bsr->off = off; - bsr->left = left; - } -} - -static inline ur_cue_res_e -_bsr_set_gone(ur_bsr_t *bsr, uint8_t bits) -{ - bsr->bits += bits; - bsr->bytes = 0; - bsr->left = 0; - bsr->off = 0; - return ur_cue_gone; -} - -ur_cue_res_e -ur_bsr_tag(ur_bsr_t *bsr, ur_cue_tag_e *out) -{ - uint64_t left = bsr->left; - - if ( !left ) { - return ur_cue_gone; - } - else { - const uint8_t *b = bsr->bytes; - uint8_t off = bsr->off; - uint8_t bit = (b[0] >> off) & 1; - uint8_t len = 1; - - if ( 0 == bit ) { - *out = ur_jam_atom; - } - else { - if ( 7 == off ) { - if ( 1 == left ) { - return _bsr_set_gone(bsr, 1); - } - - bit = b[1] & 1; - } - else { - bit = (b[0] >> (off + 1)) & 1; - } - - len++; - *out = ( 0 == bit ) ? ur_jam_cell : ur_jam_back; - } - - { - uint8_t bits = off + len; - uint8_t bytes = bits >> 3; - - left -= bytes; - - if ( !left ) { - bsr->bytes = 0; - bsr->left = 0; - bsr->off = 0; - } - else { - bsr->bytes += bytes; - bsr->left = left; - bsr->off = ur_mask_3(bits); - } - - bsr->bits += len; - - return ur_cue_good; - } - } -} - -static inline ur_cue_res_e -_bsr_log_meme(ur_bsr_t *bsr) -{ - bsr->bits += 256; - bsr->bytes += 32; - bsr->left -= 32; - return ur_cue_meme; -} - -ur_cue_res_e -ur_bsr_log(ur_bsr_t *bsr, uint8_t *out) -{ - uint64_t left = bsr->left; - - if ( !left ) { - return ur_cue_gone; - } - else { - uint8_t off = bsr->off; - const uint8_t *b = bsr->bytes; - uint8_t byt = b[0] >> off; - uint8_t skip = 0; - - while ( !byt ) { - if ( 32 == skip ) { - return _bsr_log_meme(bsr); - } - - byt = b[++skip]; - - if ( skip == left ) { - return _bsr_set_gone(bsr, (skip << 3) - off); - } - } - - { - uint32_t zeros = ur_tz8(byt) + (skip ? ((skip << 3) - off) : 0); - - if ( 255 < zeros ) { - return _bsr_log_meme(bsr); - } - else { - uint32_t bits = off + 1 + zeros; - uint8_t bytes = bits >> 3; - - left -= bytes; - - bsr->bytes = left ? (b + bytes) : 0; - bsr->bits += 1 + zeros; - bsr->left = left; - bsr->off = ur_mask_3(bits); - - *out = zeros; - return ur_cue_good; - } - } - } -} - -ur_cue_res_e -ur_bsr_rub_len(ur_bsr_t *bsr, uint64_t *out) -{ - ur_cue_res_e res; - uint8_t len; - - if ( ur_cue_good != (res = ur_bsr_log(bsr, &len)) ) { - return res; - } - else if ( 64 <= len ) { - return ur_cue_meme; - } - - switch ( len ) { - case 0: { - *out = 0; - } break; - - case 1: { - *out = 1; - } break; - - default: { - len--; - *out = ur_bsr64_any(bsr, len) ^ (1ULL << len); - } break; - } - - return ur_cue_good; -} - -/* -** bitstream-writer operations follow a pattern of an unsafe (inline) -** implementation, unsafe wrt to buffer size and reallocation, -** wrapped in a public function with buffer size checks. -** -** higher-level operations made up of multiple discrete writes check -** the buffer size once for all involved writes. -** -** this pattern should be easily adaptable to an alternate bitstream-writer -** implementation that flushes accumulated output periodically instead -** of reallocating the output buffer. -*/ - -void -ur_bsw_init(ur_bsw_t *bsw, uint64_t prev, uint64_t size) -{ - bsw->prev = prev; - bsw->size = size; - bsw->bytes = calloc(size, 1); - - if ( !bsw->bytes ) { - fprintf(stderr, - "ur: bitstream-init allocation failed, out of memory\r\n"); - abort(); - } -} - -void -ur_bsw_grow(ur_bsw_t *bsw, uint64_t step) -{ - uint64_t size = bsw->size; - uint64_t next = size + step; - - bsw->bytes = realloc(bsw->bytes, next); - - if ( !bsw->bytes ) { - fprintf(stderr, - "ur: bitstream-write allocation failed, out of memory\r\n"); - abort(); - } - - memset(bsw->bytes + size, 0, step); - - bsw->prev = size; - bsw->size = next; -} - -ur_bool_t -ur_bsw_sane(ur_bsw_t *bsw) -{ - return ( (8 > bsw->off) - && ((bsw->fill << 3) + bsw->off == bsw->bits) ); -} - -uint64_t -ur_bsw_done(ur_bsw_t *bsw, uint64_t *len, uint8_t **byt) -{ - uint64_t bits = bsw->bits; - - *len = bsw->fill + !!bsw->off; - *byt = bsw->bytes; - - memset(bsw, 0, sizeof(*bsw)); - - return bits; -} - -static inline void -_bsw_bit_unsafe(ur_bsw_t *bsw, uint8_t bit) -{ - uint64_t fill = bsw->fill; - uint8_t off = bsw->off; - - bsw->bytes[fill] ^= (bit & 1) << off; - - if ( 7 == off ) { - bsw->fill = 1 + fill; - bsw->off = 0; - } - else { - bsw->off = 1 + off; - } - - bsw->bits++; -} - -void -ur_bsw_bit(ur_bsw_t *bsw, uint8_t bit) -{ - if ( (7 == bsw->off) - && ((1 + bsw->fill) == bsw->size) ) - { - ur_bsw_grow(bsw, bsw->prev); - } - - _bsw_bit_unsafe(bsw, bit); -} - -static inline void -_bsw8_unsafe(ur_bsw_t *bsw, uint8_t len, uint8_t byt) -{ - uint64_t fill = bsw->fill; - uint8_t off = bsw->off; - uint8_t rest = 8 - off; - uint8_t l, m; - - // the least-significant bits of the input become the - // most-significant bits of a byte in the output stream - // - if ( len < rest ) { - l = byt & ((1 << len) - 1); - - bsw->bytes[fill] ^= l << off; - bsw->off = off + len; - } - // and vice-versa - // - else { - l = byt & ((1 << rest) - 1); - m = byt >> rest; - - bsw->bytes[fill++] ^= l << off; - off = len - rest; - bsw->bytes[fill] = m & ((1 << off) - 1); - - bsw->fill = fill; - bsw->off = off; - } - - bsw->bits += len; -} - -void -ur_bsw8(ur_bsw_t *bsw, uint8_t len, uint8_t byt) -{ - len = ur_min(8, len); - - if ( bsw->fill + !!((bsw->off + len) >> 3) >= bsw->size ) { - ur_bsw_grow(bsw, bsw->prev); - } - - _bsw8_unsafe(bsw, len, byt); -} - -static inline void -_bsw32_unsafe(ur_bsw_t *bsw, uint8_t len, uint32_t val) -{ - uint64_t fill = bsw->fill; - uint8_t off = bsw->off; - uint8_t *bytes = bsw->bytes; - - bsw->bits += len; - - if ( off ) { - uint8_t rest = 8 - off; - - if ( len < rest ) { - bytes[fill] ^= (val & ((1 << len) - 1)) << off; - bsw->off = off + len; - return; - } - - bytes[fill++] ^= (val & ((1 << rest) - 1)) << off; - val >>= rest; - len -= rest; - } - - switch ( len >> 3 ) { - case 4: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - bytes[fill++] = ur_mask_8(val >> 16); - bytes[fill++] = ur_mask_8(val >> 24); - - // no offset is possible here - // - bsw->fill = fill; - bsw->off = 0; - return; - } - - case 3: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - bytes[fill++] = ur_mask_8(val >> 16); - val >>= 24; - } break; - - case 2: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - val >>= 16; - } break; - - case 1: { - bytes[fill++] = ur_mask_8(val); - val >>= 8; - } break; - } - - off = ur_mask_3(len); - - if ( off ) { - bytes[fill] = (uint8_t)(val & ((1 << off) - 1)); - } - - bsw->fill = fill; - bsw->off = off; -} - -void -ur_bsw32(ur_bsw_t *bsw, uint8_t len, uint32_t val) -{ - uint8_t need; - - len = ur_min(32, len); - need = ur_bloq_up3( bsw->off + len ); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw32_unsafe(bsw, len, val); -} - -static inline void -_bsw64_unsafe(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - uint64_t fill = bsw->fill; - uint8_t off = bsw->off; - uint8_t *bytes = bsw->bytes; - - bsw->bits += len; - - if ( off ) { - uint8_t rest = 8 - off; - - if ( len < rest ) { - bytes[fill] ^= (val & ((1 << len) - 1)) << off; - bsw->off = off + len; - return; - } - - bytes[fill++] ^= (val & ((1 << rest) - 1)) << off; - val >>= rest; - len -= rest; - } - - switch ( len >> 3 ) { - case 8: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - bytes[fill++] = ur_mask_8(val >> 16); - bytes[fill++] = ur_mask_8(val >> 24); - bytes[fill++] = ur_mask_8(val >> 32); - bytes[fill++] = ur_mask_8(val >> 40); - bytes[fill++] = ur_mask_8(val >> 48); - bytes[fill++] = ur_mask_8(val >> 56); - - // no offset is possible here - // - bsw->fill = fill; - bsw->off = 0; - return; - } - - case 7: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - bytes[fill++] = ur_mask_8(val >> 16); - bytes[fill++] = ur_mask_8(val >> 24); - bytes[fill++] = ur_mask_8(val >> 32); - bytes[fill++] = ur_mask_8(val >> 40); - bytes[fill++] = ur_mask_8(val >> 48); - val >>= 56; - } break; - - case 6: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - bytes[fill++] = ur_mask_8(val >> 16); - bytes[fill++] = ur_mask_8(val >> 24); - bytes[fill++] = ur_mask_8(val >> 32); - bytes[fill++] = ur_mask_8(val >> 40); - val >>= 48; - } break; - - case 5: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - bytes[fill++] = ur_mask_8(val >> 16); - bytes[fill++] = ur_mask_8(val >> 24); - bytes[fill++] = ur_mask_8(val >> 32); - val >>= 40; - } break; - - case 4: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - bytes[fill++] = ur_mask_8(val >> 16); - bytes[fill++] = ur_mask_8(val >> 24); - val >>= 32; - } break; - - case 3: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - bytes[fill++] = ur_mask_8(val >> 16); - val >>= 24; - } break; - - case 2: { - bytes[fill++] = ur_mask_8(val); - bytes[fill++] = ur_mask_8(val >> 8); - val >>= 16; - } break; - - case 1: { - bytes[fill++] = ur_mask_8(val); - val >>= 8; - } break; - } - - off = ur_mask_3(len); - - if ( off ) { - bytes[fill] = (uint8_t)(val & ((1 << off) - 1)); - } - - bsw->fill = fill; - bsw->off = off; -} - -void -ur_bsw64(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - uint8_t need; - - len = ur_min(64, len); - need = ur_bloq_up3( bsw->off + len ); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw64_unsafe(bsw, len, val); -} - -static inline void -_bsw_bytes_unsafe(ur_bsw_t *bsw, uint64_t len, uint8_t *byt) -{ - uint64_t len_byt = len >> 3; - uint8_t len_bit = ur_mask_3(len); - uint64_t fill = bsw->fill; - uint8_t off = bsw->off; - - if ( !off ) { - memcpy(bsw->bytes + fill, byt, len_byt); - fill += len_byt; - off = len_bit; - - if ( off ) { - bsw->bytes[fill] = byt[len_byt] & ((1 << off) - 1); - } - } - // the least-significant bits of the input become the - // most-significant bits of a byte in the output stream, and vice-versa - // - else { - uint8_t rest = 8 - off; - uint8_t mask = (1 << rest) - 1; - uint8_t l, m = bsw->bytes[fill]; - uint64_t i; - - for ( i = 0; i < len_byt; i++ ) { - l = byt[i] & mask; - bsw->bytes[fill++] = m ^ (l << off); - m = byt[i] >> rest; - } - - // no trailing bits; we need only write the rest of the last byte. - // - // NB: while semantically equivalent to the subsequent block, - // this case must be separate to avoid reading off the end of [byt] - // - if ( !len_bit ) { - bsw->bytes[fill] = m; - } - // trailing bits fit into the current output byte. - // - else if ( len_bit < rest ) { - l = byt[len_byt] & ((1 << len_bit) - 1); - bsw->bytes[fill] = m ^ (l << off); - off += len_bit; - } - // trailing bits extend into the next output byte. - // - else { - l = byt[len_byt] & mask; - bsw->bytes[fill++] = m ^ (l << off); - - m = byt[len_byt] >> rest; - - off = len_bit - rest; - bsw->bytes[fill] = m & ((1 << off) - 1); - } - } - - bsw->off = off; - bsw->fill = fill; - bsw->bits += len; -} - -void -ur_bsw_bytes(ur_bsw_t *bsw, uint64_t len, uint8_t *byt) -{ - uint64_t need = ur_bloq_up3(len + bsw->off); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw_bytes_unsafe(bsw, len, byt); -} - -static inline void -_bsw_bex_unsafe(ur_bsw_t *bsw, uint8_t n) -{ - uint64_t fill = bsw->fill; - uint8_t off = bsw->off; - uint32_t bits = n + off; - - fill += bits >> 3; - off = ur_mask_3(bits); - - bsw->bytes[fill] ^= 1 << off; - - if ( 7 == off ) { - bsw->off = 0; - bsw->fill = 1 + fill; - } - else { - bsw->off = 1 + off; - bsw->fill = fill; - } - - bsw->bits += 1 + n; -} - -void -ur_bsw_bex(ur_bsw_t *bsw, uint8_t n) -{ - uint64_t need = ur_bloq_up3(1 + n + bsw->off); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw_bex_unsafe(bsw, n); -} - -static inline void -_bsw_mat64_unsafe(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - if ( 0 == len ) { - _bsw_bit_unsafe(bsw, 1); - } - else { - { - uint8_t nel = ur_met0_64(len); - _bsw_bex_unsafe(bsw, nel); - _bsw64_unsafe(bsw, nel - 1, len); - } - - _bsw64_unsafe(bsw, len, val); - } -} - -/* -* the length of a "mat" run-length encoded atom of [len] bits -*/ -#define MAT_LEN(len) ( ( 0 == len ) ? 1 : len + (2 * ur_met0_64((uint64_t)len)) ) - -void -ur_bsw_mat64(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - uint8_t need; - - len = ur_min(64, len); - need = ur_bloq_up3( bsw->off + MAT_LEN(len) ); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw_mat64_unsafe(bsw, len, val); -} - -static inline void -_bsw_mat_bytes_unsafe(ur_bsw_t *bsw, uint64_t len, uint8_t *byt) -{ - if ( 0 == len ) { - _bsw_bit_unsafe(bsw, 1); - } - else { - // write run-length - // - { - uint8_t nel = ur_met0_64(len); - _bsw_bex_unsafe(bsw, nel); - _bsw64_unsafe(bsw, nel - 1, len); - } - - _bsw_bytes_unsafe(bsw, len, byt); - } -} - -void -ur_bsw_mat_bytes(ur_bsw_t *bsw, uint64_t len, uint8_t *byt) -{ - uint64_t need = ur_bloq_up3( bsw->off + MAT_LEN(len) ); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw_mat_bytes_unsafe(bsw, len, byt); -} - -static inline void -_bsw_back64(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - _bsw8_unsafe(bsw, 2, 3); - _bsw_mat64_unsafe(bsw, len, val); -} - -void -ur_bsw_back64(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - uint8_t need; - - len = ur_min(64, len); - need = ur_bloq_up3( 2 + bsw->off + MAT_LEN(len) ); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw_back64(bsw, len, val); -} - -static inline void -_bsw_atom64(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - _bsw_bit_unsafe(bsw, 0); - _bsw_mat64_unsafe(bsw, len, val); -} - -void -ur_bsw_atom64(ur_bsw_t *bsw, uint8_t len, uint64_t val) -{ - uint8_t need; - - len = ur_min(64, len); - need = ur_bloq_up3( 1 + bsw->off + MAT_LEN(len) ); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw_atom64(bsw, len, val); -} - -static inline void -_bsw_atom_bytes_unsafe(ur_bsw_t *bsw, uint64_t len, uint8_t *byt) -{ - _bsw_bit_unsafe(bsw, 0); - _bsw_mat_bytes_unsafe(bsw, len, byt); -} - -void -ur_bsw_atom_bytes(ur_bsw_t *bsw, uint64_t len, uint8_t *byt) -{ - uint64_t need = ur_bloq_up3( 1 + bsw->off + MAT_LEN(len) ); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw_atom_bytes_unsafe(bsw, len, byt); -} - -void -ur_bsw_cell(ur_bsw_t *bsw) -{ - uint8_t need = ur_bloq_up3( 2 + bsw->off ); - - if ( bsw->fill + need >= bsw->size ) { - ur_bsw_grow(bsw, ur_max(need, bsw->prev)); - } - - _bsw8_unsafe(bsw, 2, 1); -} diff --git a/pkg/urbit/ur/hashcons.c b/pkg/urbit/ur/hashcons.c deleted file mode 100644 index a2dd691d7..000000000 --- a/pkg/urbit/ur/hashcons.c +++ /dev/null @@ -1,1025 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include "ur/defs.h" -#include "ur/hashcons.h" - -// declarations of inline functions -// -uint64_t -ur_met0_bytes_unsafe(uint64_t len, uint8_t *byt); - -static void* -_oom(const char* cap, void* v) -{ - if ( !v ) { - fprintf(stderr, - "ur: hashcons: %s: allocation failed, out of memory\r\n", cap); - abort(); - } - - return v; -} - -void -ur_dict32_grow(ur_root_t *r, ur_dict32_t *dict, uint64_t prev, uint64_t size) -{ - ur_pail32_t *buckets, *old_buckets = dict->buckets; - uint8_t *fills, *old_fills = dict->fills; - uint64_t old_size = dict->size; - uint64_t i, next = prev + size; - - buckets = _oom("dict32_grow", calloc(next, sizeof(*buckets))); - fills = _oom("dict32_grow", calloc(next, sizeof(*fills))); - - if ( old_buckets ) { - for ( i = 0; i < old_size; i++ ) { - ur_pail32_t *old_bucket = &(old_buckets[i]); - uint8_t j, old_fill = old_fills[i]; - - for ( j = 0; j < old_fill; j++ ) { - uint32_t val = old_bucket->vals[j]; - ur_nref ref = old_bucket->refs[j]; - ur_mug mug = ur_nref_mug(r, ref); - - uint64_t idx = ( mug % next ); - ur_pail32_t *bucket = &(buckets[idx]); - uint8_t new_fill = fills[idx]; - - if ( ur_pail_max == new_fill ) { - free(buckets); - free(fills); - return ur_dict32_grow(r, dict, size, next); - } - - bucket->refs[new_fill] = ref; - bucket->vals[new_fill] = val; - fills[idx] = 1 + new_fill; - } - } - - free(old_buckets); - free(old_fills); - } - - dict->prev = size; - dict->size = next; - dict->fills = fills; - dict->buckets = buckets; -} - -ur_bool_t -ur_dict32_get(ur_root_t *r, ur_dict32_t *dict, ur_nref ref, uint32_t *out) -{ - ur_mug mug = ur_nref_mug(r, ref); - uint64_t idx = ( mug % dict->size ); - - ur_pail32_t *bucket = &(dict->buckets[idx]); - uint8_t i, fill = dict->fills[idx]; - - for ( i = 0; i < fill; i++ ) { - if ( ref == bucket->refs[i] ) { - *out = bucket->vals[i]; - return 1; - } - } - - return 0; -} - -void -ur_dict32_put(ur_root_t *r, ur_dict32_t *dict, ur_nref ref, uint32_t val) -{ - ur_mug mug = ur_nref_mug(r, ref); - - while ( 1 ) { - uint64_t idx = ( mug % dict->size ); - ur_pail32_t *bucket = &(dict->buckets[idx]); - uint8_t i, fill = dict->fills[idx]; - - for ( i = 0; i < fill; i++ ) { - if ( ref == bucket->refs[i] ) { - bucket->vals[i] = val; - return; - } - } - - if ( ur_pail_max == fill ) { - ur_dict32_grow(r, dict, dict->prev, dict->size); - continue; - } - - bucket->refs[fill] = ref; - bucket->vals[fill] = val; - dict->fills[idx] = 1 + fill; - break; - } -} - -void -ur_dict32_wipe(ur_dict32_t *dict) -{ - uint8_t *fills = dict->fills; - uint64_t size = dict->size; - - memset(fills, 0, sizeof(*fills) * size); -} - -void -ur_dict64_grow(ur_root_t *r, ur_dict64_t *dict, uint64_t prev, uint64_t size) -{ - ur_pail64_t *buckets, *old_buckets = dict->buckets; - uint8_t *fills, *old_fills = dict->fills; - uint64_t old_size = dict->size; - uint64_t i, next = prev + size; - - buckets = _oom("dict64_grow", calloc(next, sizeof(*buckets))); - fills = _oom("dict64_grow", calloc(next, sizeof(*fills))); - - if ( old_buckets ) { - for ( i = 0; i < old_size; i++ ) { - ur_pail64_t *old_bucket = &(old_buckets[i]); - uint8_t j, old_fill = old_fills[i]; - - for ( j = 0; j < old_fill; j++ ) { - uint64_t val = old_bucket->vals[j]; - ur_nref ref = old_bucket->refs[j]; - ur_mug mug = ur_nref_mug(r, ref); - - uint64_t idx = ( mug % next ); - ur_pail64_t *bucket = &(buckets[idx]); - uint8_t new_fill = fills[idx]; - - if ( ur_pail_max == new_fill ) { - free(buckets); - free(fills); - return ur_dict64_grow(r, dict, size, next); - } - - bucket->refs[new_fill] = ref; - bucket->vals[new_fill] = val; - fills[idx] = 1 + new_fill; - } - } - - free(old_buckets); - free(old_fills); - } - - dict->prev = size; - dict->size = next; - dict->fills = fills; - dict->buckets = buckets; -} - -ur_bool_t -ur_dict64_get(ur_root_t *r, ur_dict64_t *dict, ur_nref ref, uint64_t *out) -{ - ur_mug mug = ur_nref_mug(r, ref); - uint64_t idx = ( mug % dict->size ); - - ur_pail64_t *bucket = &(dict->buckets[idx]); - uint8_t i, fill = dict->fills[idx]; - - for ( i = 0; i < fill; i++ ) { - if ( ref == bucket->refs[i] ) { - *out = bucket->vals[i]; - return 1; - } - } - - return 0; -} - -void -ur_dict64_put(ur_root_t *r, ur_dict64_t *dict, ur_nref ref, uint64_t val) -{ - ur_mug mug = ur_nref_mug(r, ref); - - while ( 1 ) { - uint64_t idx = ( mug % dict->size ); - ur_pail64_t *bucket = &(dict->buckets[idx]); - uint8_t i, fill = dict->fills[idx]; - - for ( i = 0; i < fill; i++ ) { - if ( ref == bucket->refs[i] ) { - bucket->vals[i] = val; - return; - } - } - - if ( ur_pail_max == fill ) { - ur_dict64_grow(r, dict, dict->prev, dict->size); - continue; - } - - bucket->refs[fill] = ref; - bucket->vals[fill] = val; - dict->fills[idx] = 1 + fill; - break; - } -} - -void -ur_dict64_wipe(ur_dict64_t *dict) -{ - uint8_t *fills = dict->fills; - uint64_t size = dict->size; - - memset(fills, 0, sizeof(*fills) * size); -} - -void -ur_dict_grow(ur_root_t *r, ur_dict_t *dict, uint64_t prev, uint64_t size) -{ - ur_pail_t *buckets, *old_buckets = dict->buckets; - uint8_t *fills, *old_fills = dict->fills; - uint64_t old_size = dict->size; - uint64_t i, next = prev + size; - - buckets = _oom("dict_grow", calloc(next, sizeof(*buckets))); - fills = _oom("dict_grow", calloc(next, sizeof(*fills))); - - if ( old_buckets ) { - for ( i = 0; i < old_size; i++ ) { - ur_pail_t *old_bucket = &(old_buckets[i]); - uint8_t j, old_fill = old_fills[i]; - - for ( j = 0; j < old_fill; j++ ) { - ur_nref ref = old_bucket->refs[j]; - ur_mug mug = ur_nref_mug(r, ref); - - uint64_t idx = ( mug % next ); - ur_pail_t *bucket = &(buckets[idx]); - uint8_t new_fill = fills[idx]; - - if ( ur_pail_max == new_fill ) { - free(buckets); - free(fills); - return ur_dict_grow(r, dict, size, next); - } - - bucket->refs[new_fill] = ref; - fills[idx] = 1 + new_fill; - } - } - - free(old_buckets); - free(old_fills); - } - - dict->prev = size; - dict->size = next; - dict->fills = fills; - dict->buckets = buckets; -} - -ur_bool_t -ur_dict_get(ur_root_t *r, ur_dict_t *dict, ur_nref ref) -{ - ur_mug mug = ur_nref_mug(r, ref); - uint64_t idx = ( mug % dict->size ); - - ur_pail_t *bucket = &(dict->buckets[idx]); - uint8_t i, fill = dict->fills[idx]; - - for ( i = 0; i < fill; i++ ) { - if ( ref == bucket->refs[i] ) { - return 1; - } - } - - return 0; -} - -void -ur_dict_put(ur_root_t *r, ur_dict_t *dict, ur_nref ref) -{ - ur_mug mug = ur_nref_mug(r, ref); - - while ( 1 ) { - uint64_t idx = ( mug % dict->size ); - ur_pail_t *bucket = &(dict->buckets[idx]); - uint8_t i, fill = dict->fills[idx]; - - for ( i = 0; i < fill; i++ ) { - if ( ref == bucket->refs[i] ) { - return; - } - } - - if ( ur_pail_max == fill ) { - ur_dict_grow(r, dict, dict->prev, dict->size); - continue; - } - - bucket->refs[fill] = ref; - dict->fills[idx] = 1 + fill; - break; - } -} - -void -ur_dict_wipe(ur_dict_t *dict) -{ - uint8_t *fills = dict -> fills; - uint64_t size = dict->size; - - memset(fills, 0, sizeof(*fills) * size); -} - -void -ur_dict_free(ur_dict_t *dict) -{ - free(dict->buckets); - free(dict->fills); - dict->buckets = 0; -} - -ur_mug -ur_mug_bytes(const uint8_t *byt, uint64_t len) -{ - uint32_t seed = 0xcafebabe; - uint8_t i = 0; - - while ( i < 8 ) { - ur_mug mug; - uint32_t raw; - MurmurHash3_x86_32(byt, len, seed, &raw); - mug = (raw >> 31) ^ ( ur_mask_31(raw) ); - - if ( 0 == mug ) { - seed++; i++; - } - else { - return mug; - } - } - - return (ur_mug)0x7fff; -} - -ur_mug -ur_mug32(uint32_t x) -{ - uint8_t byt[4] = { - ur_mask_8(x >> 0), - ur_mask_8(x >> 8), - ur_mask_8(x >> 16), - ur_mask_8(x >> 24) - }; - - return ur_mug_bytes(byt, ur_met3_32(x)); -} - -ur_mug -ur_mug64(uint64_t x) -{ - uint8_t byt[8] = { - ur_mask_8(x >> 0), - ur_mask_8(x >> 8), - ur_mask_8(x >> 16), - ur_mask_8(x >> 24), - ur_mask_8(x >> 32), - ur_mask_8(x >> 40), - ur_mask_8(x >> 48), - ur_mask_8(x >> 56) - }; - - return ur_mug_bytes(byt, ur_met3_64(x)); -} - -ur_mug -ur_mug_both(ur_mug hed, ur_mug tal) -{ - uint32_t seed = 0xdeadbeef; - uint8_t len = 4 + ur_bloq_up3(ur_met0_32(tal)); - uint8_t i = 0; - uint8_t byt[8] = { - ur_mask_8(hed >> 0), - ur_mask_8(hed >> 8), - ur_mask_8(hed >> 16), - ur_mask_8(hed >> 24), - ur_mask_8(tal >> 0), - ur_mask_8(tal >> 8), - ur_mask_8(tal >> 16), - ur_mask_8(tal >> 24) - }; - - while ( i < 8 ) { - ur_mug mug; - uint32_t raw; - MurmurHash3_x86_32(byt, len, seed, &raw); - mug = (raw >> 31) ^ ( ur_mask_31(raw) ); - - if ( 0 == mug ) { - seed++; i++; - } - else { - return mug; - } - } - - return (ur_mug)0xfffe; -} - -ur_mug -ur_nref_mug(ur_root_t *r, ur_nref ref) -{ - switch ( ur_nref_tag(ref) ) { - default: assert(0); - - case ur_direct: return ur_mug64(ref); - case ur_iatom: return r->atoms.mugs[ur_nref_idx(ref)]; - case ur_icell: return r->cells.mugs[ur_nref_idx(ref)]; - } -} - -ur_bool_t -ur_deep(ur_nref ref) -{ - return ur_icell == ur_nref_tag(ref); -} - -ur_nref -ur_head(ur_root_t *r, ur_nref ref) -{ - assert( ur_deep(ref) ); - return r->cells.heads[ur_nref_idx(ref)]; -} - -ur_nref -ur_tail(ur_root_t *r, ur_nref ref) -{ - assert( ur_deep(ref) ); - return r->cells.tails[ur_nref_idx(ref)]; -} - -void -ur_atoms_grow(ur_atoms_t *atoms) -{ - uint64_t prev = atoms->prev; - uint64_t size = atoms->size; - uint64_t next = prev + size; - uint8_t **bytes = atoms->bytes; - uint64_t *lens = atoms->lens; - ur_mug *mugs = atoms->mugs; - - atoms->bytes = _oom("atoms_grow", malloc(next * ( sizeof(*atoms->bytes) - + sizeof(*atoms->lens) - + sizeof(*atoms->mugs) ))); - atoms->lens = (void*)((char*)atoms->bytes + (next * sizeof(*atoms->bytes))); - atoms->mugs = (void*)((char*)atoms->lens + (next * sizeof(*atoms->lens))); - - if ( bytes ) { - memcpy(atoms->bytes, bytes, size * (sizeof(*bytes))); - memcpy(atoms->lens, lens, size * (sizeof(*lens))); - memcpy(atoms->mugs, mugs, size * (sizeof(*mugs))); - - free(bytes); - } - - atoms->prev = size; - atoms->size = next; -} - -void -ur_cells_grow(ur_cells_t *cells) -{ - uint64_t prev = cells->prev; - uint64_t size = cells->size; - uint64_t next = prev + size; - ur_nref *heads = cells->heads; - ur_nref *tails = cells->tails; - ur_mug *mugs = cells->mugs; - - cells->heads = _oom("cells_grow", malloc(next * ( sizeof(*cells->heads) - + sizeof(*cells->heads) - + sizeof(*cells->mugs) ))); - cells->tails = (void*)((char*)cells->heads + (next * sizeof(*cells->heads))); - cells->mugs = (void*)((char*)cells->tails + (next * sizeof(*cells->tails))); - - if ( heads ) { - memcpy(cells->heads, heads, size * (sizeof(*heads))); - memcpy(cells->tails, tails, size * (sizeof(*tails))); - memcpy(cells->mugs, mugs, size * (sizeof(*mugs))); - - free(heads); - } - - cells->prev = size; - cells->size = next; -} - -void -ur_bytes(ur_root_t *r, ur_nref ref, uint8_t **byt, uint64_t *len) -{ - assert( !ur_deep(ref) ); - switch ( ur_nref_tag(ref) ) { - default: assert(0); - - case ur_direct: { - *len = ur_met3_64(ref); - // XX little-endian - // - *byt = (uint8_t*)&ref; - } break; - - case ur_iatom: { - uint64_t idx = ur_nref_idx(ref); - *len = r->atoms.lens[idx]; - *byt = r->atoms.bytes[idx]; - } break; - } -} - -uint64_t -ur_met(ur_root_t *r, uint8_t bloq, ur_nref ref) -{ - uint64_t m_bit; - - // XX return bool for cells, length in out parameter - // - assert( !ur_deep(ref) ); - - if ( ur_direct == ur_nref_tag(ref) ) { - m_bit = ur_met0_64(ref); - } - else { - uint64_t idx = ur_nref_idx(ref); - uint64_t len = r->atoms.lens[idx]; - uint8_t *byt = r->atoms.bytes[idx]; - - m_bit = ur_met0_bytes_unsafe(len, byt); - } - - switch ( bloq ) { - case 0: return m_bit; - case 1: return ur_bloq_up1(m_bit); - case 2: return ur_bloq_up2(m_bit); - case 3: return ur_bloq_up3(m_bit); - - default: { - uint64_t m_byt = ur_bloq_up3(m_bit); - uint8_t off = (bloq - 3); - return (m_byt + ((1ULL << off) - 1)) >> off; - } - } -} - -static ur_nref -_coin_unsafe(ur_atoms_t *atoms, ur_mug mug, uint64_t len, uint8_t *byt) -{ - uint64_t fill = atoms->fill; - ur_tag tag = ur_iatom; - ur_nref tom = ( fill | ((uint64_t)tag << 62) ); - - // XX necessary? - // - assert( 62 >= ur_met0_64(fill) ); - - atoms->bytes[fill] = byt; - atoms->lens[fill] = len; - atoms->mugs[fill] = mug; - atoms->fill = 1 + fill; - - return tom; -} - -static ur_nref -_cons_unsafe(ur_cells_t *cells, ur_mug mug, ur_nref hed, ur_nref tal) -{ - uint64_t fill = cells->fill; - ur_tag tag = ur_icell; - ur_nref cel = ( fill | ((uint64_t)tag << 62) ); - - // XX necessary? - // - assert( 62 >= ur_met0_64(fill) ); - - cells->mugs[fill] = mug; - cells->heads[fill] = hed; - cells->tails[fill] = tal; - cells->fill = 1 + fill; - - return cel; -} - -ur_nref -ur_coin_bytes_unsafe(ur_root_t *r, uint64_t len, uint8_t *byt) -{ - ur_atoms_t *atoms = &(r->atoms); - ur_dict_t *dict = &(atoms->dict); - ur_mug mug = ur_mug_bytes(byt, len); - - while ( 1 ) { - uint64_t idx = ( mug % dict->size ); - ur_pail_t *bucket = &(dict->buckets[idx]); - uint8_t i, b_fill = dict->fills[idx]; - ur_nref tom; - - for ( i = 0; i < b_fill; i++ ) { - uint8_t *t_byt; - uint64_t t_len; - tom = bucket->refs[i]; - - ur_bytes(r, tom, &t_byt, &t_len); - - if ( (t_len == len) - && (0 == memcmp(t_byt, byt, len)) ) - { - return tom; - } - } - - if ( ur_pail_max == b_fill ) { - ur_dict_grow(r, dict, dict->prev, dict->size); - continue; - } - - if ( atoms->fill == atoms->size ) { - ur_atoms_grow(atoms); - } - - tom = _coin_unsafe(atoms, mug, len, byt); - - bucket->refs[b_fill] = tom; - dict->fills[idx] = 1 + b_fill; - - return tom; - } -} - -ur_nref -ur_coin_bytes(ur_root_t *r, uint64_t len, uint8_t *byt) -{ - // strip trailing zeroes - // - while ( len && !byt[len - 1] ) { - len--; - } - - // produce a direct atom if possible - // - if ( 62 >= ur_met0_bytes_unsafe(len, byt) ) { - uint64_t i, direct = 0; - - for ( i = 0; i < len; i++ ) { - direct |= byt[i] << (8 * i); - } - - return (ur_nref)direct; - } - else { - uint8_t *copy = _oom("coin_bytes", malloc(len)); - memcpy(copy, byt, len); - - return ur_coin_bytes_unsafe(r, len, copy); - } -} - -ur_nref -ur_coin64(ur_root_t *r, uint64_t n) -{ - if ( ur_direct == ur_nref_tag(n) ) { - return n; - } - else { - uint8_t *byt; - assert( 8 == ur_met3_64(n) ); - - byt = _oom("coin64", malloc(8)); - - byt[0] = ur_mask_8(n); - byt[1] = ur_mask_8(n >> 8); - byt[2] = ur_mask_8(n >> 16); - byt[3] = ur_mask_8(n >> 24); - byt[4] = ur_mask_8(n >> 32); - byt[5] = ur_mask_8(n >> 40); - byt[6] = ur_mask_8(n >> 48); - byt[7] = ur_mask_8(n >> 56); - - return ur_coin_bytes_unsafe(r, 8, byt); - } -} - -ur_nref -ur_cons(ur_root_t *r, ur_nref hed, ur_nref tal) -{ - ur_cells_t *cells = &(r->cells); - ur_dict_t *dict = &(cells->dict); - ur_mug mug = ur_mug_both(ur_nref_mug(r, hed), - ur_nref_mug(r, tal)); - - while ( 1 ) { - uint64_t idx = ( mug % dict->size ); - ur_pail_t *bucket = &(dict->buckets[idx]); - uint8_t i, b_fill = dict->fills[idx]; - ur_nref cel; - - for ( i = 0; i < b_fill; i++ ) { - cel = bucket->refs[i]; - - if ( (hed == ur_head(r, cel)) - && (tal == ur_tail(r, cel)) ) - { - return cel; - } - } - - if ( ur_pail_max == b_fill ) { - ur_dict_grow(r, dict, dict->prev, dict->size); - continue; - } - - if ( cells->fill == cells->size ) { - ur_cells_grow(cells); - } - - cel = _cons_unsafe(cells, mug, hed, tal); - - bucket->refs[b_fill] = cel; - dict->fills[idx] = 1 + b_fill; - - return cel; - } -} - -static void -_print_memory(FILE *f, const char *c, uint64_t bytes) -{ - if ( !bytes ) { - fprintf(f, "%s: B/0\r\n", c); - } - else { - uint32_t g = (bytes / 1000000000); - uint32_t m = (bytes % 1000000000) / 1000000; - uint32_t k = (bytes % 1000000) / 1000; - uint32_t b = (bytes % 1000); - - if ( g ) { - fprintf(f, "%s: GB/%d.%03d.%03d.%03d\r\n", c, g, m, k, b); - } - else if ( m ) { - fprintf(f, "%s: MB/%d.%03d.%03d\r\n", c, m, k, b); - } - else if ( k ) { - fprintf(f, "%s: KB/%d.%03d\r\n", c, k, b); - } - else if ( b ) { - fprintf(f, "%s: B/%d\r\n", c, b); - } - } -} - -static uint64_t -_dict_info(FILE *f, ur_dict_t *dict) -{ - uint64_t data = dict->size * sizeof(*dict->buckets); - _print_memory(f, " dict", data); - return data; -} - -static uint64_t -_atoms_info(FILE *f, ur_atoms_t *atoms) -{ - uint64_t total = 0; - uint64_t size = atoms->size; - uint64_t fill = atoms->fill; - uint64_t refs = size * ( sizeof(*atoms->bytes) - + sizeof(*atoms->lens) - + sizeof(*atoms->mugs) ); - uint64_t i, data = 0; - - fprintf(f, " atoms (%" PRIu64 "):\r\n", fill); - - _print_memory(f, " refs", refs); - total += refs; - - for ( i = 0; i < fill; i++ ) { - data += atoms->lens[i]; - } - _print_memory(f, " data", data); - total += data; - - total += _dict_info(f, &(atoms->dict)); - _print_memory(f, " total", total); - return total; -} - -static uint64_t -_cells_info(FILE *f, ur_cells_t *cells) -{ - uint64_t total = 0; - uint64_t size = cells->size; - uint64_t fill = cells->fill; - uint64_t refs = size * ( sizeof(*cells->heads) - + sizeof(*cells->heads) - + sizeof(*cells->mugs) ); - - fprintf(f, " cells (%" PRIu64 "):\r\n", fill); - - _print_memory(f, " refs", refs); - total += refs; - - total += _dict_info(f, &(cells->dict)); - _print_memory(f, " total", total); - return total; -} - -void -ur_root_info(FILE *f, ur_root_t *r) -{ - uint64_t total = 0; - - fprintf(stderr, "hash-cons arena:\r\n"); - - { - uint64_t root = sizeof(*r); - _print_memory(f, " root", root); - total += root; - } - - total += _atoms_info(f, &(r->atoms)); - total += _cells_info(f, &(r->cells)); - - _print_memory(f, "total", total); -} - -static void -_atoms_free(ur_atoms_t *atoms) -{ - uint8_t **bytes = atoms->bytes; - uint64_t i, fill = atoms->fill; - - for ( i = 0; i < fill; i++ ) { - free(bytes[i]); - } - - ur_dict_free(&(atoms->dict)); - free(bytes); -} - -static void -_cells_free(ur_cells_t *cells) -{ - ur_dict_free(&(cells->dict)); - free(cells->heads); -} - -void -ur_root_free(ur_root_t *r) -{ - _atoms_free(&(r->atoms)); - _cells_free(&(r->cells)); - free(r); -} - -ur_root_t* -ur_root_init(void) -{ - ur_root_t *r = _oom("root_init", calloc(1, sizeof(*r))); - - { - ur_dict_t *dict; - - // allocate atom storage - // - r->atoms.prev = ur_fib11; - r->atoms.size = ur_fib12; - ur_atoms_grow(&(r->atoms)); - - // allocate atom hashtable - // - dict = &(r->atoms.dict); - ur_dict_grow(r, dict, ur_fib11, ur_fib12); - - // allocate cell storage - // - r->cells.prev = ur_fib11; - r->cells.size = ur_fib12; - ur_cells_grow(&(r->cells)); - - // allocate cell hashtable - // - dict = &(r->cells.dict); - ur_dict_grow(r, dict, ur_fib11, ur_fib12); - } - - return r; -} - -void -ur_nvec_free(ur_nvec_t *v) -{ - free(v->refs); -} - -void -ur_nvec_init(ur_nvec_t *v, uint64_t size) -{ - v->fill = 0; - v->refs = _oom("nvec_init", calloc(size, sizeof(ur_nref))); -} - -/* -** define opaque struct ur_walk_fore_s (ie, ur_walk_fore_t) -*/ -struct ur_walk_fore_s { - ur_root_t *r; - uint32_t prev; - uint32_t size; - ur_nref *top; -}; - -ur_walk_fore_t* -ur_walk_fore_init_with(ur_root_t *r, - uint32_t s_prev, - uint32_t s_size) -{ - ur_walk_fore_t *w = _oom("walk_fore", malloc(sizeof(*w))); - w->top = _oom("walk_fore", malloc(s_size * sizeof(*w->top))); - w->prev = s_prev; - w->size = s_size; - w->r = r; - - return w; -} - -ur_walk_fore_t* -ur_walk_fore_init(ur_root_t *r) -{ - return ur_walk_fore_init_with(r, ur_fib10, ur_fib11); -} - -void -ur_walk_fore_with(ur_walk_fore_t *w, - ur_nref ref, - void *v, - void (*atom)(ur_root_t*, ur_nref, void*), - ur_bool_t (*cell)(ur_root_t*, ur_nref, void*)) -{ - ur_root_t *r = w->r; - uint32_t fill = 1; - - *w->top = ref; - - do { - // visit atom, pop stack - // - if ( !ur_deep(ref) ) { - atom(r, ref, v); - fill--; - } - // visit cell, pop stack if false - // - else if ( !cell(r, ref, v) ) { - fill--; - } - // push the tail, continue into the head - // - else { - w->top[fill++] = ur_tail(r, ref); - - // reallocate "stack" if full - // - if ( w->size == fill ) { - uint32_t next = w->prev + w->size; - w->top = _oom("walk_fore", realloc(w->top, next * sizeof(*w->top))); - w->prev = w->size; - w->size = next; - } - - w->top[fill] = ur_head(r, ref); - } - - ref = w->top[fill]; - } while ( fill ); -} - -void -ur_walk_fore_done(ur_walk_fore_t *w) -{ - free(w->top); - free(w); -} - -void -ur_walk_fore(ur_root_t *r, - ur_nref ref, - void *v, - void (*atom)(ur_root_t*, ur_nref, void*), - ur_bool_t (*cell)(ur_root_t*, ur_nref, void*)) -{ - ur_walk_fore_t *w = ur_walk_fore_init(r); - ur_walk_fore_with(w, ref, v, atom, cell); - ur_walk_fore_done(w); -} diff --git a/pkg/urbit/ur/serial.c b/pkg/urbit/ur/serial.c deleted file mode 100644 index 2bdfa2f4b..000000000 --- a/pkg/urbit/ur/serial.c +++ /dev/null @@ -1,586 +0,0 @@ -#include -#include - -#include "ur/ur.h" - -static void* -_oom(const char* cap, void* v) -{ - if ( !v ) { - fprintf(stderr, - "ur: hashcons: %s: allocation failed, out of memory\r\n", cap); - abort(); - } - - return v; -} - -static inline void -_bsw_atom(ur_root_t *r, ur_nref ref, ur_bsw_t *bsw, uint64_t len) -{ - switch ( ur_nref_tag(ref) ) { - default: assert(0); - - case ur_direct: return ur_bsw_atom64(bsw, len, ref); - - case ur_iatom: { - uint8_t *byt = r->atoms.bytes[ur_nref_idx(ref)]; - return ur_bsw_atom_bytes(bsw, len, byt); - } - } -} - -/* -** define opaque struct ur_jam_s (ie, ur_jam_t) -*/ -struct ur_jam_s { - ur_root_t *r; - ur_walk_fore_t *w; - ur_dict64_t dict; - ur_bsw_t bsw; -}; - -static void -_jam_atom(ur_root_t *r, ur_nref ref, void *ptr) -{ - ur_jam_t *j = ptr; - ur_dict64_t *dict = &j->dict; - ur_bsw_t *bsw = &j->bsw; - uint64_t bak, len = ur_met(r, 0, ref); - - if ( !ur_dict64_get(r, dict, ref, &bak) ) { - ur_dict64_put(r, dict, ref, bsw->bits); - - _bsw_atom(r, ref, bsw, len); - } - else { - uint64_t len_bak = ur_met0_64(bak); - - if ( len <= len_bak ) { - _bsw_atom(r, ref, bsw, len); - } - else { - ur_bsw_back64(bsw, len_bak, bak); - } - } -} - -static ur_bool_t -_jam_cell(ur_root_t *r, ur_nref ref, void *ptr) -{ - ur_jam_t *j = ptr; - ur_dict64_t *dict = &j->dict; - ur_bsw_t *bsw = &j->bsw; - uint64_t bak; - - if ( !ur_dict64_get(r, dict, ref, &bak) ) { - ur_dict64_put(r, dict, ref, bsw->bits); - - ur_bsw_cell(bsw); - return 1; - } - else { - ur_bsw_back64(bsw, ur_met0_64(bak), bak); - return 0; - } -} - -static uint64_t -_jam(ur_jam_t *j, - ur_nref ref, - uint64_t *len, - uint8_t **byt) -{ - ur_bsw_init(&j->bsw, ur_fib11, ur_fib12); - ur_walk_fore_with(j->w, ref, j, _jam_atom, _jam_cell); - return ur_bsw_done(&j->bsw, len, byt); -} - -ur_jam_t* -ur_jam_init_with(ur_root_t *r, - uint64_t d_prev, - uint64_t d_size, - uint32_t s_prev, - uint32_t s_size) -{ - ur_jam_t *j = _oom("jam_init", calloc(sizeof(*j), 1)); - j->w = ur_walk_fore_init_with(r, s_prev, s_size); - j->r = r; - - ur_dict64_grow(r, &j->dict, d_prev, d_size); - - return j; -} - -ur_jam_t* -ur_jam_init(ur_root_t *r) -{ - return ur_jam_init_with(r, ur_fib11, ur_fib12, // dict sizes - ur_fib10, ur_fib11); // stack sizes -} - -uint64_t -ur_jam_with(ur_jam_t *j, - ur_nref ref, - uint64_t *len, - uint8_t **byt) -{ - uint64_t bits = _jam(j, ref, len, byt); - ur_dict64_wipe(&j->dict); - return bits; -} - -void -ur_jam_done(ur_jam_t *j) -{ - ur_dict_free((ur_dict_t*)&j->dict); - ur_walk_fore_done(j->w); - free(j); -} - -uint64_t -ur_jam(ur_root_t *r, - ur_nref ref, - uint64_t *len, - uint8_t **byt) -{ - ur_jam_t *j = ur_jam_init(r); - uint64_t bits = _jam(j, ref, len, byt); - ur_jam_done(j); - return bits; -} - -/* -** stack frame for recording head vs tail iteration -** -** $? [CUE_HEAD bits=@] -** [hed=* bits=@] -*/ - -#define CUE_HEAD 0xffffffffffffffffULL - -typedef struct _cue_frame_s { - uint64_t ref; - uint64_t bits; -} _cue_frame_t; - -typedef struct _cue_stack_s { - uint32_t prev; - uint32_t size; - uint32_t fill; - _cue_frame_t* f; -} _cue_stack_t; - -static inline ur_cue_res_e -_cue_next(ur_root_t *r, - _cue_stack_t *s, - ur_bsr_t *bsr, - ur_dict64_t *dict, - ur_nref *out) -{ - while ( 1 ) { - uint64_t len, bits = bsr->bits; - ur_cue_tag_e tag; - ur_cue_res_e res; - - if ( ur_cue_good != (res = ur_bsr_tag(bsr, &tag)) ) { - return res; - } - - switch ( tag ) { - default: assert(0); - - case ur_jam_cell: { - // reallocate the stack if full - // - if ( s->fill == s->size ) { - uint32_t next = s->prev + s->size; - s->f = _oom("cue_next stack", realloc(s->f, next * sizeof(*s->f))); - s->prev = s->size; - s->size = next; - } - - // save a head-frame and read the head from the stream - // - { - _cue_frame_t* f = &(s->f[s->fill++]); - f->ref = CUE_HEAD; - f->bits = bits; - } - continue; - } - - case ur_jam_back: { - if ( ur_cue_good != (res = ur_bsr_rub_len(bsr, &len)) ) { - return res; - } - else if ( 62 < len ) { - return ur_cue_meme; - } - else { - uint64_t val, bak = ur_bsr64_any(bsr, len); - - if ( !ur_dict64_get(r, dict, bak, &val) ) { - return ur_cue_back; - } - - *out = (ur_nref)val; - return ur_cue_good; - } - } - - case ur_jam_atom: { - if ( ur_cue_good != (res = ur_bsr_rub_len(bsr, &len)) ) { - return res; - } - else if ( 62 >= len ) { - *out = (ur_nref)ur_bsr64_any(bsr, len); - } - else { - uint64_t len_byt = (len >> 3) + !!ur_mask_3(len); - uint8_t *byt = _oom("cue_next bytes", calloc(len_byt, 1)); - - ur_bsr_bytes_any(bsr, len, byt); - - // strip trailing zeroes - // - while ( len_byt && !byt[len_byt - 1] ) { - len_byt--; - } - - *out = ur_coin_bytes_unsafe(r, len_byt, byt); - } - - ur_dict64_put(r, dict, bits, (uint64_t)*out); - return ur_cue_good; - } - } - } -} - -/* -** define opaque struct ur_cue_s (ie, ur_cue_t) -*/ -struct ur_cue_s { - ur_root_t *r; - _cue_stack_t s; - ur_dict64_t dict; -}; - -static ur_cue_res_e -_cue(ur_cue_t *c, - uint64_t len, - const uint8_t *byt, - ur_nref *out) -{ - ur_bsr_t bsr = {0}; - ur_root_t *r = c->r; - _cue_stack_t *s = &c->s; - ur_dict64_t *dict = &c->dict; - ur_cue_res_e res; - ur_nref ref; - - // init bitstream-reader - // - if ( ur_cue_good != (res = ur_bsr_init(&bsr, len, byt)) ) { - return res; - } - // bit-cursor (and backreferences) must fit in 62-bit direct atoms - // - else if ( 0x7ffffffffffffffULL < len ) { - return ur_cue_meme; - } - - // advance into stream - // - res = _cue_next(r, s, &bsr, dict, &ref); - - // process result - // - while ( s->fill && (ur_cue_good == res) ) { - // peek at the top of the stack - // - _cue_frame_t *f = &(s->f[s->fill - 1]); - - // f is a head-frame; stash result and read the tail from the stream - // - if ( CUE_HEAD == f->ref ) { - f->ref = ref; - res = _cue_next(r, s, &bsr, dict, &ref); - } - // f is a tail-frame; pop the stack and continue - // - else { - ref = ur_cons(r, f->ref, ref); - ur_dict64_put(r, dict, f->bits, (uint64_t)ref); - s->fill--; - } - } - - if ( ur_cue_good == res ) { - *out = ref; - } - return res; -} - -ur_cue_t* -ur_cue_init_with(ur_root_t *r, - uint64_t d_prev, - uint64_t d_size, - uint32_t s_prev, - uint32_t s_size) -{ - ur_cue_t* c = _oom("cue_init", calloc(sizeof(*c), 1)); - c->r = r; - - ur_dict64_grow(r, &c->dict, d_prev, d_size); - - c->s.prev = s_prev; - c->s.size = s_size; - c->s.f = _oom("cue_test_init", malloc(s_size * sizeof(*c->s.f))); - - return c; -} - -ur_cue_t* -ur_cue_init(ur_root_t *r) -{ - return ur_cue_init_with(r, ur_fib11, ur_fib12, // dict sizes - ur_fib10, ur_fib11); // stack sizes -} - -ur_cue_res_e -ur_cue_with(ur_cue_t *c, - uint64_t len, - const uint8_t *byt, - ur_nref *out) -{ - ur_cue_res_e res = _cue(c, len, byt, out); - - // XX check size, shrink if above threshold - // - ur_dict64_wipe(&c->dict); - c->s.fill = 0; - - return res; -} - -void -ur_cue_done(ur_cue_t *c) -{ - - ur_dict_free((ur_dict_t*)&c->dict); - free(c->s.f); - free(c); -} - -ur_cue_res_e -ur_cue(ur_root_t *r, - uint64_t len, - const uint8_t *byt, - ur_nref *out) -{ - ur_cue_t *c = ur_cue_init(r); - ur_cue_res_e res = _cue(c, len, byt, out); - - ur_cue_done(c); - return res; -} - -/* -** stack frame for recording head vs tail iteration -** -** [hed=? bits=@] -** -*/ - -typedef struct _cue_test_frame_s { - ur_bool_t tal; - uint64_t bits; -} _cue_test_frame_t; - -typedef struct _cue_test_stack_s { - uint32_t prev; - uint32_t size; - uint32_t fill; - _cue_test_frame_t* f; -} _cue_test_stack_t; - -static inline ur_cue_res_e -_cue_test_next(_cue_test_stack_t *s, - ur_bsr_t *bsr, - ur_dict_t *dict) -{ - while ( 1 ) { - uint64_t len, bits = bsr->bits; - ur_cue_tag_e tag; - ur_cue_res_e res; - - if ( ur_cue_good != (res = ur_bsr_tag(bsr, &tag)) ) { - return res; - } - - switch ( tag ) { - default: assert(0); - - case ur_jam_cell: { - // reallocate the stack if full - // - if ( s->fill == s->size ) { - uint32_t next = s->prev + s->size; - s->f = _oom("cue_test", realloc(s->f, next * sizeof(*s->f))); - s->prev = s->size; - s->size = next; - } - - // save a head-frame and read the head from the stream - // - { - _cue_test_frame_t* f = &(s->f[s->fill++]); - f->tal = 0; - f->bits = bits; - } - continue; - } - - case ur_jam_back: { - if ( ur_cue_good != (res = ur_bsr_rub_len(bsr, &len)) ) { - return res; - } - else if ( 62 < len ) { - return ur_cue_meme; - } - else { - uint64_t bak = ur_bsr64_any(bsr, len); - return ur_dict_get((ur_root_t*)0, dict, bak) - ? ur_cue_good - : ur_cue_back; - } - } - - case ur_jam_atom: { - if ( ur_cue_good != (res = ur_bsr_rub_len(bsr, &len)) ) { - return res; - } - - ur_bsr_skip_any(bsr, len); - ur_dict_put((ur_root_t*)0, dict, bits); - return ur_cue_good; - } - } - } -} - -/* -** define opaque struct ur_cue_test_s (ie, ur_cue_test_t) -*/ -struct ur_cue_test_s { - _cue_test_stack_t s; - ur_dict_t dict; -}; - -static ur_cue_res_e -_cue_test(ur_cue_test_t *t, - uint64_t len, - const uint8_t *byt) -{ - ur_bsr_t bsr = {0}; - _cue_test_stack_t *s = &t->s; - ur_dict_t *dict = &t->dict; - ur_cue_res_e res; - - // init bitstream-reader - // - if ( ur_cue_good != (res = ur_bsr_init(&bsr, len, byt)) ) { - return res; - } - // bit-cursor (and backreferences) must fit in 62-bit direct atoms - // - else if ( 0x7ffffffffffffffULL < len ) { - return ur_cue_meme; - } - - // advance into stream - // - res = _cue_test_next(s, &bsr, dict); - - // process result - // - while ( s->fill && (ur_cue_good == res) ) { - // peek at the top of the stack - // - _cue_test_frame_t *f = &(s->f[s->fill - 1]); - - // f is a head-frame; stash result and read the tail from the stream - // - if ( !f->tal ) { - f->tal = 1; - res = _cue_test_next(s, &bsr, dict); - } - // f is a tail-frame; pop the stack and continue - // - else { - ur_dict_put((ur_root_t*)0, dict, f->bits); - s->fill--; - } - } - - return res; -} - -ur_cue_test_t* -ur_cue_test_init_with(uint64_t d_prev, - uint64_t d_size, - uint32_t s_prev, - uint32_t s_size) -{ - ur_cue_test_t* t = _oom("cue_test_init", calloc(sizeof(*t), 1)); - - ur_dict_grow((ur_root_t*)0, &t->dict, d_prev, d_size); - - t->s.prev = s_prev; - t->s.size = s_size; - t->s.f = _oom("cue_test_init", malloc(s_size * sizeof(*t->s.f))); - - return t; -} - -ur_cue_test_t* -ur_cue_test_init(void) -{ - return ur_cue_test_init_with(ur_fib11, ur_fib12, // dict sizes - ur_fib10, ur_fib11); // stack sizes -} - -ur_bool_t -ur_cue_test_with(ur_cue_test_t *t, - uint64_t len, - const uint8_t *byt) -{ - ur_bool_t ret = ur_cue_good == _cue_test(t, len, byt); - - // XX check size, shrink if above threshold - // - ur_dict_wipe(&t->dict); - t->s.fill = 0; - - return ret; -} - -void -ur_cue_test_done(ur_cue_test_t *t) -{ - ur_dict_free(&t->dict); - free(t->s.f); - free(t); -} - -ur_bool_t -ur_cue_test(uint64_t len, const uint8_t *byt) -{ - ur_cue_test_t *t = ur_cue_test_init(); - ur_bool_t ret = ur_cue_good == _cue_test(t, len, byt); - - ur_cue_test_done(t); - return ret; -} diff --git a/pkg/urbit/vere/auto.c b/pkg/urbit/vere/auto.c deleted file mode 100644 index c03cd93e2..000000000 --- a/pkg/urbit/vere/auto.c +++ /dev/null @@ -1,442 +0,0 @@ -/* vere/auto.c -*/ -#include "all.h" -#include "vere/vere.h" - -/* u3_auto_plan(): enqueue an ovum. -*/ -u3_ovum* -u3_auto_plan(u3_auto* car_u, u3_ovum *egg_u) -{ - egg_u->car_u = car_u; - - if ( !car_u->ent_u ) { - c3_assert(!car_u->ext_u); - - egg_u->pre_u = egg_u->nex_u = 0; - car_u->ent_u = car_u->ext_u = egg_u; - car_u->dep_w = 1; - } - // enqueue at driver entry (back of the line) - // - // [pre_u] points towards [ext_u] (back in time) - // [nex_u] points towards [ent_u] (forward in time) - // - else { - egg_u->nex_u = 0; - egg_u->pre_u = car_u->ent_u; - - car_u->ent_u->nex_u = egg_u; - car_u->ent_u = egg_u; - car_u->dep_w++; - } - - u3_pier_spin(car_u->pir_u); - - return egg_u; -} - -/* u3_auto_redo(): retry an ovum. -*/ -u3_ovum* -u3_auto_redo(u3_auto* car_u, u3_ovum *egg_u) -{ - c3_assert( egg_u->car_u == car_u ); - - egg_u->try_w++; - - if ( !car_u->ent_u ) { - c3_assert(!car_u->ext_u); - - egg_u->pre_u = egg_u->nex_u = 0; - car_u->ent_u = car_u->ext_u = egg_u; - car_u->dep_w = 1; - } - // enqueue at driver exit (front of the line) - // - else { - egg_u->nex_u = car_u->ext_u; - egg_u->pre_u = 0; - - car_u->ext_u->pre_u = egg_u; - car_u->ext_u = egg_u; - car_u->dep_w++; - } - - u3_pier_spin(car_u->pir_u); - - return egg_u; -} - -/* u3_auto_peer(): subscribe to updates. -*/ -void -u3_auto_peer(u3_ovum* egg_u, - void* ptr_v, - u3_ovum_peer news_f, - u3_ovum_bail bail_f) -{ - egg_u->ptr_v = ptr_v; - egg_u->cb_u.news_f = news_f; - egg_u->cb_u.bail_f = bail_f; -} - -/* u3_auto_bail_slog(): print a bail notification. -*/ -void -u3_auto_bail_slog(u3_ovum* egg_u, u3_noun lud) -{ - c3_c* car_c = u3r_string(egg_u->car_u->nam_m); - u3_noun dul = lud; - c3_w len_w = 1; - - while ( u3_nul != dul ) { - u3l_log("%s: bail %u\r\n", car_c, len_w++); - u3_pier_punt_goof(car_c, u3k(u3h(dul))); - - dul = u3t(dul); - } - - u3_pier_punt_ovum(car_c, u3k(egg_u->wir), u3k(u3h(egg_u->cad))); - - u3z(lud); - c3_free(car_c); -} - -/* u3_auto_bail(): notify driver that [egg_u] crashed. -*/ -void -u3_auto_bail(u3_ovum* egg_u, u3_noun lud) -{ - // optional - // - if ( egg_u->cb_u.bail_f ) { - c3_l cod_l = u3a_lush(egg_u->car_u->nam_m); - egg_u->cb_u.bail_f(egg_u, lud); - u3a_lop(cod_l); - } - else { - u3_auto_bail_slog(egg_u, lud); - u3_ovum_free(egg_u); - } -} - -/* _auto_news(): notify driver of ovum status -*/ -static void -_auto_news(u3_ovum* egg_u, u3_ovum_news new_e) -{ - // optional - // - if ( egg_u->cb_u.news_f ) { - c3_l cod_l = u3a_lush(egg_u->car_u->nam_m); - egg_u->cb_u.news_f(egg_u, new_e); - u3a_lop(cod_l); - } -} - -/* u3_auto_done(): notify driver of [egg_u] completion. -*/ -void -u3_auto_done(u3_ovum* egg_u) -{ - _auto_news(egg_u, u3_ovum_done); - u3_ovum_free(egg_u); -} - -/* u3_auto_work(): notify driver of [egg_u] commencement. -*/ -void -u3_auto_work(u3_ovum* egg_u) -{ - _auto_news(egg_u, u3_ovum_work); -} - -/* u3_auto_drop(): dequeue and dispose an ovum. -*/ -void -u3_auto_drop(u3_auto* car_u, u3_ovum* egg_u) -{ - { - c3_assert( egg_u->car_u ); - - // the previous ovum (or [ext_u]) will point to our next ovum - // - if ( !egg_u->pre_u ) { - egg_u->car_u->ext_u = egg_u->nex_u; - } - else { - egg_u->pre_u->nex_u = egg_u->nex_u; - } - - // the next ovum (or [ent_u]) will point to our previous ovum - // - if ( !egg_u->nex_u ) { - egg_u->car_u->ent_u = egg_u->pre_u; - } - else { - egg_u->nex_u->pre_u = egg_u->pre_u; - } - - egg_u->car_u->dep_w--; - - egg_u->nex_u = egg_u->pre_u = 0; - } - - // notify driver if not self-caused - // - if ( egg_u->car_u && ( car_u != egg_u->car_u ) ) { - _auto_news(egg_u, u3_ovum_drop); - } - - u3_ovum_free(egg_u); -} - -/* u3_auto_next(): select an ovum, dequeue and construct. -*/ -u3_ovum* -u3_auto_next(u3_auto* car_u, u3_noun* ovo) -{ - while ( car_u ) { - if ( !car_u->ext_u ) { - car_u = car_u->nex_u; - continue; - } - else { - u3_ovum* egg_u = car_u->ext_u; - - c3_assert( !egg_u->pre_u ); - - if ( egg_u->nex_u ) { - egg_u->nex_u->pre_u = 0; - car_u->ext_u = egg_u->nex_u; - car_u->dep_w--; - } - else { - car_u->ent_u = car_u->ext_u = 0; - car_u->dep_w = 0; - } - - egg_u->nex_u = 0; - - u3_auto_work(egg_u); - - *ovo = u3nc(u3nc(u3k(egg_u->tar), u3k(egg_u->wir)), - u3k(egg_u->cad)); - - return egg_u; - } - } - - return 0; -} - -/* _auto_kick_lost(): print details of unroutable effect. RETAIN -*/ -static void -_auto_kick_lost(u3_noun pax, u3_noun fav) -{ - u3_noun tox = u3do("spat", u3k(pax)); - c3_c* tag_c = u3r_string(u3h(fav)); - c3_c* pax_c = u3r_string(tox); - - u3l_log("kick: lost %%%s on %s\n", tag_c, pax_c); - - c3_free(pax_c); - c3_free(tag_c); - u3z(tox); -} - -/* _auto_kick(): kick with leak label. -*/ -static c3_o -_auto_kick(u3_auto* car_u, u3_noun pax, u3_noun fav) -{ - c3_l cod_l = u3a_lush(car_u->nam_m); - c3_o kik_o = car_u->io.kick_f(car_u, pax, fav); - u3a_lop(cod_l); - return kik_o; -} - -/* u3_auto_kick(): route effects to a linked driver. RETAIN -*/ -void -u3_auto_kick(u3_auto* car_u, u3_noun act) -{ - u3_auto* rac_u = car_u; - u3_noun fec, pax, wir, cad; - - while ( u3_nul != act ) { - fec = u3h(act); - u3x_cell(fec, &pax, &cad); - - // XX temporary backwards compatibility, remove - // - if ( c3n == u3r_p(pax, u3_blip, &wir) ) { - wir = pax; - } - - while ( c3n == _auto_kick(car_u, u3k(wir), u3k(cad)) ) { - if ( car_u->nex_u ) { - car_u = car_u->nex_u; - continue; - } - else { - _auto_kick_lost(wir, cad); - break; - } - } - - car_u = rac_u; - act = u3t(act); - } -} - -/* u3_auto_live(): check if all drivers are live. -*/ -c3_o -u3_auto_live(u3_auto* car_u) -{ - while ( car_u ) { - if ( c3n == car_u->liv_o ) { - return c3n; - } - - car_u = car_u->nex_u; - } - - return c3y; -} - -/* u3_auto_talk(): start all drivers. -*/ -void -u3_auto_talk(u3_auto* car_u) -{ - c3_l cod_l; - - while ( car_u ) { - cod_l = u3a_lush(car_u->nam_m); - car_u->io.talk_f(car_u); - u3a_lop(cod_l); - car_u = car_u->nex_u; - } -} - -/* u3_auto_exit(): close all drivers. -*/ -void -u3_auto_exit(u3_auto* car_u) -{ - u3_auto* nex_u; - c3_l cod_l; - - while ( car_u ) { - nex_u = car_u->nex_u; - - { - u3_ovum *egg_u = car_u->ext_u; - u3_ovum *xen_u; - - while ( egg_u ) { - xen_u = egg_u->nex_u; - u3_ovum_free(egg_u); - egg_u = xen_u; - } - } - - cod_l = u3a_lush(car_u->nam_m); - car_u->io.exit_f(car_u); - u3a_lop(cod_l); - - car_u = nex_u; - } -} - -/* u3_auto_info(): status info as a (list mass), all drivers. -*/ -u3_noun -u3_auto_info(u3_auto* car_u) -{ - u3_noun lit = u3_nul; - - while ( car_u ) { - if ( car_u->io.info_f ) { - lit = u3nc(u3_pier_mass(car_u->nam_m, car_u->io.info_f(car_u)), lit); - } - car_u = car_u->nex_u; - } - return u3kb_flop(lit); -} - -/* u3_auto_slog(): print status info. -*/ -void -u3_auto_slog(u3_auto* car_u) -{ - u3_auto* nex_u; - - u3l_log(" drivers:\n"); - - while ( car_u ) { - nex_u = car_u->nex_u; - - u3l_log(" %.*s: live=%s, queue=%u\n", - u3r_met(3, car_u->nam_m), - (c3_c*)&car_u->nam_m, - ( c3y == car_u->liv_o ) ? "&" : "|", - car_u->dep_w); - - // XX details - // - if ( car_u->io.slog_f ) { - c3_l cod_l = u3a_lush(car_u->nam_m); - car_u->io.slog_f(car_u); - u3a_lop(cod_l); - } - - car_u = nex_u; - } -} - -/* _auto_link(): validate and link initalized [car_u] -*/ -static u3_auto* -_auto_link(u3_auto* car_u, u3_pier* pir_u, u3_auto* nex_u) -{ - // skip null drivers - // - if ( !car_u ) { - return nex_u; - } - - // assert that io callbacks are present (info_f and slog_f are optional) - // - c3_assert( car_u->io.talk_f ); - c3_assert( car_u->io.kick_f ); - c3_assert( car_u->io.exit_f ); - - car_u->pir_u = pir_u; - car_u->nex_u = nex_u; - return car_u; -} - -/* u3_auto_init(): initialize all drivers. -*/ -u3_auto* -u3_auto_init(u3_pier* pir_u) -{ - u3_auto* car_u = 0; - - car_u = _auto_link(u3_hind_io_init(pir_u), pir_u, car_u); - car_u = _auto_link(u3_behn_io_init(pir_u), pir_u, car_u); - car_u = _auto_link(u3_conn_io_init(pir_u), pir_u, car_u); - car_u = _auto_link(u3_ames_io_init(pir_u), pir_u, car_u); - car_u = _auto_link(u3_http_io_init(pir_u), pir_u, car_u); - car_u = _auto_link(u3_cttp_io_init(pir_u), pir_u, car_u); - car_u = _auto_link(u3_unix_io_init(pir_u), pir_u, car_u); - car_u = _auto_link(u3_term_io_init(pir_u), pir_u, car_u); - car_u = _auto_link(u3_fore_io_init(pir_u), pir_u, car_u); - - return car_u; -} diff --git a/pkg/urbit/vere/dawn.c b/pkg/urbit/vere/dawn.c deleted file mode 100644 index ca6eb31a7..000000000 --- a/pkg/urbit/vere/dawn.c +++ /dev/null @@ -1,491 +0,0 @@ -/* vere/dawn.c -** -** ethereum-integrated pre-boot validation -*/ -#include "all.h" -#include "vere/vere.h" -#include -#include - -/* _dawn_oct_to_buf(): +octs to uv_buf_t -*/ -static uv_buf_t -_dawn_oct_to_buf(u3_noun oct) -{ - if ( c3n == u3a_is_cat(u3h(oct)) ) { - exit(1); - } - - c3_w len_w = u3h(oct); - c3_y* buf_y = c3_malloc(1 + len_w); - buf_y[len_w] = 0; - - u3r_bytes(0, len_w, buf_y, u3t(oct)); - - u3z(oct); - return uv_buf_init((void*)buf_y, len_w); -} - -/* _dawn_buf_to_oct(): uv_buf_t to +octs -*/ -static u3_noun -_dawn_buf_to_oct(uv_buf_t buf_u) -{ - u3_noun len = u3i_words(1, (c3_w*)&buf_u.len); - - if ( c3n == u3a_is_cat(len) ) { - exit(1); - } - - return u3nc(len, u3i_bytes(buf_u.len, (const c3_y*)buf_u.base)); -} - - -/* _dawn_curl_alloc(): allocate a response buffer for curl -*/ -static size_t -_dawn_curl_alloc(void* dat_v, size_t uni_t, size_t mem_t, void* buf_v) -{ - uv_buf_t* buf_u = buf_v; - - size_t siz_t = uni_t * mem_t; - buf_u->base = c3_realloc(buf_u->base, 1 + siz_t + buf_u->len); - - memcpy(buf_u->base + buf_u->len, dat_v, siz_t); - buf_u->len += siz_t; - buf_u->base[buf_u->len] = 0; - - return siz_t; -} - -/* _dawn_post_json(): POST JSON to url_c -*/ -static uv_buf_t -_dawn_post_json(c3_c* url_c, uv_buf_t lod_u) -{ - CURL *curl; - CURLcode result; - long cod_l; - struct curl_slist* hed_u = 0; - - uv_buf_t buf_u = uv_buf_init(c3_malloc(1), 0); - - if ( !(curl = curl_easy_init()) ) { - u3l_log("failed to initialize libcurl\n"); - exit(1); - } - - hed_u = curl_slist_append(hed_u, "Accept: application/json"); - hed_u = curl_slist_append(hed_u, "Content-Type: application/json"); - hed_u = curl_slist_append(hed_u, "charsets: utf-8"); - - // XX require TLS, pin default cert? - // - u3K.ssl_curl_f(curl); - curl_easy_setopt(curl, CURLOPT_URL, url_c); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _dawn_curl_alloc); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&buf_u); - curl_easy_setopt(curl, CURLOPT_HTTPHEADER, hed_u); - - // note: must be terminated! - curl_easy_setopt(curl, CURLOPT_POSTFIELDS, lod_u.base); - - result = curl_easy_perform(curl); - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &cod_l); - - // XX retry? - if ( CURLE_OK != result ) { - u3l_log("failed to fetch %s: %s\n", - url_c, curl_easy_strerror(result)); - exit(1); - } - if ( 300 <= cod_l ) { - u3l_log("error fetching %s: HTTP %ld\n", url_c, cod_l); - exit(1); - } - - curl_easy_cleanup(curl); - curl_slist_free_all(hed_u); - - return buf_u; -} - -/* _dawn_get_jam(): GET a jammed noun from url_c -*/ -static u3_noun -_dawn_get_jam(c3_c* url_c) -{ - CURL *curl; - CURLcode result; - long cod_l; - - uv_buf_t buf_u = uv_buf_init(c3_malloc(1), 0); - - if ( !(curl = curl_easy_init()) ) { - u3l_log("failed to initialize libcurl\n"); - exit(1); - } - - // XX require TLS, pin default cert? - // - u3K.ssl_curl_f(curl); - curl_easy_setopt(curl, CURLOPT_URL, url_c); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _dawn_curl_alloc); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&buf_u); - - result = curl_easy_perform(curl); - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &cod_l); - - // XX retry? - if ( CURLE_OK != result ) { - u3l_log("failed to fetch %s: %s\n", - url_c, curl_easy_strerror(result)); - exit(1); - } - if ( 300 <= cod_l ) { - u3l_log("error fetching %s: HTTP %ld\n", url_c, cod_l); - exit(1); - } - - curl_easy_cleanup(curl); - - // throw away the length from the octs - // - u3_noun octs = _dawn_buf_to_oct(buf_u); - u3_noun jammed = u3k(u3t(octs)); - u3z(octs); - - c3_free(buf_u.base); - - return u3ke_cue(jammed); -} - -/* _dawn_eth_rpc(): ethereum JSON RPC with request/response as +octs -*/ -static u3_noun -_dawn_eth_rpc(c3_c* url_c, u3_noun oct) -{ - uv_buf_t buf_u = _dawn_post_json(url_c, _dawn_oct_to_buf(oct)); - u3_noun pro = _dawn_buf_to_oct(buf_u); - - c3_free(buf_u.base); - - return pro; -} - -/* _dawn_fail(): pre-boot validation failed -*/ -static void -_dawn_fail(u3_noun who, u3_noun rac, u3_noun sas) -{ - u3_noun how = u3dc("scot", 'p', u3k(who)); - c3_c* how_c = u3r_string(u3k(how)); - - c3_c* rac_c; - - switch (rac) { - default: c3_assert(0); - case c3__czar: { - rac_c = "galaxy"; - break; - } - case c3__king: { - rac_c = "star"; - break; - } - case c3__duke: { - rac_c = "planet"; - break; - } - case c3__earl: { - rac_c = "moon"; - break; - } - case c3__pawn: { - rac_c = "comet"; - break; - } - } - - u3l_log("boot: invalid keys for %s '%s'\r\n", rac_c, how_c); - - // XX deconstruct sas, print helpful error messages - while ( u3_nul != sas ) { - u3m_p("pre-boot error", u3h(sas)); - sas = u3t(sas); - } - - u3z(how); - c3_free(how_c); - exit(1); -} - -/* _dawn_need_unit(): produce a value or print error and exit -*/ -static u3_noun -_dawn_need_unit(u3_noun nit, c3_c* msg_c) -{ - if ( u3_nul == nit ) { - u3l_log("%s\r\n", msg_c); - exit(1); - } - else { - u3_noun pro = u3k(u3t(nit)); - u3z(nit); - return pro; - } -} - -/* _dawn_turf(): override contract domains with -H -*/ -static u3_noun -_dawn_turf(c3_c* dns_c) -{ - u3_noun tuf; - - u3_noun par = u3v_wish("thos:de-purl:html"); - u3_noun dns = u3i_string(dns_c); - u3_noun rul = u3dc("rush", u3k(dns), u3k(par)); - - if ( (u3_nul == rul) || (c3n == u3h(u3t(rul))) ) { - u3l_log("boot: invalid domain specified with -H %s\r\n", dns_c); - exit(1); - } - else { - u3l_log("boot: overriding network domains with %s\r\n", dns_c); - u3_noun dom = u3t(u3t(rul)); - tuf = u3nc(u3k(dom), u3_nul); - } - - u3z(par); u3z(dns); u3z(rul); - - return tuf; -} - -/* _dawn_sponsor(): retrieve sponsor from point -*/ -static u3_noun -_dawn_sponsor(u3_noun who, u3_noun rac, u3_noun pot) -{ - u3_noun uni = u3dc("sponsor:dawn", u3k(who), u3k(pot)); - - if ( c3n == u3h(uni) ) { - _dawn_fail(who, rac, u3nc(u3t(uni), u3_nul)); - return u3_none; - } - - u3_noun pos = u3k(u3t(uni)); - - u3z(who); u3z(rac); u3z(pot); u3z(uni); - - return pos; -} - -/* u3_dawn_vent(): validated boot event -*/ -u3_noun -u3_dawn_vent(u3_noun ship, u3_noun feed) -{ - u3_noun sed, pos, pon, zar, tuf; - - u3_noun rank = u3do("clan:title", u3k(ship)); - - c3_c* url_c = ( 0 != u3_Host.ops_u.eth_c ) ? - u3_Host.ops_u.eth_c : - "https://roller.urbit.org/v1/azimuth"; - - { - // +point:azimuth: on-chain state - // - u3_noun pot; - - if ( c3__pawn == rank ) { - // irrelevant, just bunt +point - // - pot = u3v_wish("*point:azimuth"); - } - else if ( c3__earl == rank ) { - pot = u3v_wish("*point:azimuth"); - } - else { - u3l_log("boot: retrieving %s's public keys\r\n", - u3_Host.ops_u.who_c); - - { - u3_noun oct = u3do("point:give:dawn", u3k(ship)); - u3_noun luh = _dawn_eth_rpc(url_c, u3k(oct)); - - pot = _dawn_need_unit(u3dc("point:take:dawn", u3k(ship), u3k(luh)), - "boot: failed to retrieve public keys"); - u3z(oct); u3z(luh); - } - } - - // +live:dawn: network state - // XX actually make request - // - u3_noun liv = u3_nul; - // u3_noun liv = _dawn_get_json(parent, /some/url) - - u3l_log("boot: verifying keys\r\n"); - - // (each seed (lest error=@tas)) - // - sed = u3dq("veri:dawn", u3k(ship), u3k(feed), u3k(pot), u3k(liv)); - - if ( c3n == u3h(sed) ) { - // bails, won't return - _dawn_fail(ship, rank, u3t(sed)); - return u3_none; - } - - u3l_log("boot: getting sponsor\r\n"); - pos = _dawn_sponsor(u3k(ship), u3k(rank), u3k(pot)); - u3z(pot); u3z(liv); - } - - - // (map ship [=life =pass]): galaxy table - // - { - u3l_log("boot: retrieving galaxy table\r\n"); - - u3_noun oct = u3v_wish("czar:give:dawn"); - u3_noun raz = _dawn_eth_rpc(url_c, u3k(oct)); - - zar = _dawn_need_unit(u3do("czar:take:dawn", u3k(raz)), - "boot: failed to retrieve galaxy table"); - u3z(oct); u3z(raz); - } - - // (list turf): ames domains - // - if ( 0 != u3_Host.ops_u.dns_c ) { - tuf = _dawn_turf(u3_Host.ops_u.dns_c); - } - else { - u3l_log("boot: retrieving network domains\r\n"); - - u3_noun oct = u3v_wish("turf:give:dawn"); - u3_noun fut = _dawn_eth_rpc(url_c, u3k(oct)); - - tuf = _dawn_need_unit(u3do("turf:take:dawn", u3k(fut)), - "boot: failed to retrieve network domains"); - u3z(oct); u3z(fut); - } - - pon = u3_nul; - while (c3__czar != rank) { - u3_noun son; - // print message - // - { - u3_noun who = u3dc("scot", 'p', u3k(pos)); - c3_c* who_c = u3r_string(who); - u3l_log("boot: retrieving keys for sponsor %s\r\n", who_c); - u3z(who); - c3_free(who_c); - } - - // retrieve +point:azimuth of pos (sponsor of ship) - // - { - u3_noun oct = u3do("point:give:dawn", u3k(pos)); - u3_noun luh = _dawn_eth_rpc(url_c, u3k(oct)); - - son = _dawn_need_unit(u3dc("point:take:dawn", u3k(pos), u3k(luh)), - "boot: failed to retrieve sponsor keys"); - // append to sponsor chain list - // - pon = u3nc(u3nc(u3k(pos), u3k(son)), pon); - u3z(oct); u3z(luh); - } - - // find next sponsor - // - u3z(ship); u3z(rank); - ship = pos; - rank = u3do("clan:title", u3k(ship)); - pos = _dawn_sponsor(u3k(ship), u3k(rank), u3k(son)); - - u3z(son); - } - - // [%dawn seed sponsors galaxies domains block eth-url snap] - // - //NOTE blocknum of 0 is fine because jael ignores it. - // should probably be removed from dawn event. - u3_noun ven = u3nc(c3__dawn, - u3nq(u3k(u3t(sed)), pon, zar, u3nt(tuf, 0, u3_nul))); - - u3z(sed); u3z(rank); u3z(pos); u3z(ship); u3z(feed); - - return ven; -} - -/* _dawn_come(): mine a comet under a list of stars -*/ -static u3_noun -_dawn_come(u3_noun stars) -{ - u3_noun seed; - { - c3_w eny_w[16]; - u3_noun eny; - - c3_rand(eny_w); - eny = u3i_words(16, eny_w); - - u3l_log("boot: mining a comet. May take up to an hour.\r\n"); - u3l_log("If you want to boot faster, get an Urbit identity.\r\n"); - - seed = u3dc("come:dawn", u3k(stars), u3k(eny)); - u3z(eny); - } - - { - u3_noun who = u3dc("scot", 'p', u3k(u3h(seed))); - c3_c* who_c = u3r_string(who); - - u3l_log("boot: found comet %s\r\n", who_c); - - // enable to print and save comet private key for future reuse - // -#if 0 - { - u3_noun key = u3dc("scot", c3__uw, u3qe_jam(seed)); - c3_c* key_c = u3r_string(key); - - u3l_log("boot: comet private key\n %s\n", key_c); - - { - c3_c pat_c[64]; - snprintf(pat_c, 64, "%s.key", who_c + 1); - - FILE* fil_u = c3_fopen(pat_c, "w"); - fprintf(fil_u, "%s\n", key_c); - fclose(fil_u); - } - - c3_free(key_c); - u3z(key); - } -#endif - - c3_free(who_c); - u3z(who); - } - - u3z(stars); - - return seed; -} - -/* u3_dawn_come(): mine a comet under a list of stars we download -*/ -u3_noun -u3_dawn_come() -{ - return _dawn_come( - _dawn_get_jam("https://bootstrap.urbit.org/comet-stars.jam")); -} diff --git a/pkg/urbit/vere/db/lmdb.c b/pkg/urbit/vere/db/lmdb.c deleted file mode 100644 index a6acbba6d..000000000 --- a/pkg/urbit/vere/db/lmdb.c +++ /dev/null @@ -1,519 +0,0 @@ -/* vere/db/lmdb.c -*/ -#include "c/portable.h" -#include "c/types.h" -#include "c/defs.h" -#include "vere/db/lmdb.h" -#include - -/* mdb_logerror(): writes an error message and lmdb error code to f. -*/ -void mdb_logerror(FILE* f, int err, const char* fmt, ...); - -/* mdb_get_filesize(): gets the size of a lmdb database file on disk. -*/ -intmax_t mdb_get_filesize(mdb_filehandle_t han_u); - -// lmdb api wrapper -// -// this module implements a simple persistence api on top of lmdb. -// outside of its use of c3 type definitions, this module has no -// dependence on anything u3, or on any library besides lmdb itself. -// -// urbit requires very little from a persist store -- it merely -// needs to store variable-length buffers in: -// -// - a metadata store with c3_c (unsigned char) keys -// - an event store with contiguous c3_d (uint64_t) keys -// -// supported operations are as follows -// -// - open/close an environment -// - read/save metadata -// - read the first and last event numbers -// - read/save ranges of events -// - -/* u3_lmdb_init(): open lmdb at [pax_c], mmap up to [siz_i]. -*/ -MDB_env* -u3_lmdb_init(const c3_c* pax_c, size_t siz_i) -{ - MDB_env* env_u; - c3_w ret_w; - - if ( (ret_w = mdb_env_create(&env_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: init fail"); - return 0; - } - - // Our databases have two tables: META and EVENTS - // - if ( (ret_w = mdb_env_set_maxdbs(env_u, 2)) ) { - mdb_logerror(stderr, ret_w, "lmdb: failed to set number of databases"); - // XX dispose env_u - // - return 0; - } - - if ( (ret_w = mdb_env_set_mapsize(env_u, siz_i)) ) { - mdb_logerror(stderr, ret_w, "lmdb: failed to set database size"); - // XX dispose env_u - // - return 0; - } - - if ( (ret_w = mdb_env_open(env_u, pax_c, 0, 0664)) ) { - mdb_logerror(stderr, ret_w, "lmdb: failed to open event log"); - // XX dispose env_u - // - return 0; - } - - return env_u; -} - -/* u3_lmdb_exit(): close lmdb. -*/ -void -u3_lmdb_exit(MDB_env* env_u) -{ - mdb_env_close(env_u); -} - -/* u3_lmdb_stat(): print env stats. -*/ -void -u3_lmdb_stat(MDB_env* env_u, FILE* fil_u) -{ - size_t siz_i; - - fprintf(fil_u, "lmdb info:\n"); - - { - MDB_stat mst_u; - MDB_envinfo mei_u; - - (void)mdb_env_stat(env_u, &mst_u); - (void)mdb_env_info(env_u, &mei_u); - - fprintf(fil_u, " map size: %zu\n", mei_u.me_mapsize); - fprintf(fil_u, " page size: %u\n", mst_u.ms_psize); - fprintf(fil_u, " max pages: %zu\n", mei_u.me_mapsize / mst_u.ms_psize); - fprintf(fil_u, " number of pages used: %zu\n", mei_u.me_last_pgno+1); - fprintf(fil_u, " last transaction ID: %zu\n", mei_u.me_last_txnid); - fprintf(fil_u, " max readers: %u\n", mei_u.me_maxreaders); - fprintf(fil_u, " number of readers used: %u\n", mei_u.me_numreaders); - - siz_i = mst_u.ms_psize * (mei_u.me_last_pgno+1); - } - - { - mdb_filehandle_t han_u; - mdb_env_get_fd(env_u, &han_u); - - intmax_t dis_i = mdb_get_filesize(han_u); - - if ( siz_i != dis_i ) { - fprintf(fil_u, "MISMATCH:\n"); - } - - fprintf(fil_u, " file size (page): %zu\n", siz_i); - fprintf(fil_u, " file size (stat): %jd\n", dis_i); - } -} - -/* u3_lmdb_gulf(): read first and last event numbers. -*/ -c3_o -u3_lmdb_gulf(MDB_env* env_u, c3_d* low_d, c3_d* hig_d) -{ - MDB_txn* txn_u; - MDB_dbi mdb_u; - c3_w ret_w; - - // create a read-only transaction. - // - // XX why no MDB_RDONLY? - // - if ( (ret_w = mdb_txn_begin(env_u, 0, 0, &txn_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: gulf: txn_begin fail"); - return c3n; - } - - // open the database in the transaction - // - { - c3_w ops_w = MDB_CREATE | MDB_INTEGERKEY; - - if ( (ret_w = mdb_dbi_open(txn_u, "EVENTS", ops_w, &mdb_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: gulf: dbi_open fail"); - // XX confirm - // - mdb_txn_abort(txn_u); - return c3n; - } - } - - { - MDB_cursor* cur_u; - MDB_val key_u; - MDB_val val_u; - c3_d fir_d, las_d; - - // creates a cursor to point to the last event - // - if ( (ret_w = mdb_cursor_open(txn_u, mdb_u, &cur_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: gulf: cursor_open fail"); - // XX confirm - // - mdb_txn_abort(txn_u); - return c3n; - } - - // read with the cursor from the start of the database - // - ret_w = mdb_cursor_get(cur_u, &key_u, &val_u, MDB_FIRST); - - if ( MDB_NOTFOUND == ret_w ) { - *low_d = 0; - *hig_d = 0; - mdb_cursor_close(cur_u); - mdb_txn_abort(txn_u); - return c3y; - } - else if ( ret_w ) { - mdb_logerror(stderr, ret_w, "lmdb: gulf: head fail"); - mdb_cursor_close(cur_u); - mdb_txn_abort(txn_u); - return c3n; - } - else { - fir_d = *(c3_d*)key_u.mv_data; - } - - // read with the cursor from the end of the database - // - ret_w = mdb_cursor_get(cur_u, &key_u, &val_u, MDB_LAST); - - if ( !ret_w ) { - las_d = *(c3_d*)key_u.mv_data; - } - - // clean up unconditionally, we're done - // - mdb_cursor_close(cur_u); - mdb_txn_abort(txn_u); - - if ( ret_w ) { - mdb_logerror(stderr, ret_w, "lmdb: gulf: last fail"); - return c3n; - } - else { - *low_d = fir_d; - *hig_d = las_d; - return c3y; - } - } -} - -/* u3_lmdb_read(): read [len_d] events starting at [eve_d]. -*/ -c3_o -u3_lmdb_read(MDB_env* env_u, - void* ptr_v, - c3_d eve_d, - c3_d len_d, - c3_o (*read_f)(void*, c3_d, size_t, void*)) -{ - MDB_txn* txn_u; - MDB_dbi mdb_u; - c3_w ret_w; - - // create a read-only transaction. - // - if ( (ret_w = mdb_txn_begin(env_u, 0, MDB_RDONLY, &txn_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: read txn_begin fail"); - return c3n; - } - - // open the database in the transaction - // - { - c3_w ops_w = MDB_CREATE | MDB_INTEGERKEY; - - if ( (ret_w = mdb_dbi_open(txn_u, "EVENTS", ops_w, &mdb_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: read: dbi_open fail"); - // XX confirm - // - mdb_txn_abort(txn_u); - return c3n; - } - } - - - { - MDB_cursor* cur_u; - MDB_val val_u; - // set the initial key to [eve_d] - // - MDB_val key_u = { .mv_size = sizeof(c3_d), .mv_data = &eve_d }; - - // creates a cursor to iterate over keys starting at [eve_d] - // - if ( (ret_w = mdb_cursor_open(txn_u, mdb_u, &cur_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: read: cursor_open fail"); - // XX confirm - // - mdb_txn_abort(txn_u); - return c3n; - } - - // set the cursor to the position of [eve_d] - // - if ( (ret_w = mdb_cursor_get(cur_u, &key_u, &val_u, MDB_SET_KEY)) ) { - mdb_logerror(stderr, ret_w, "lmdb: read: initial cursor_get failed at %" PRIu64, eve_d); - mdb_cursor_close(cur_u); - // XX confirm - // - mdb_txn_abort(txn_u); - return c3n; - } - - // load up to [len_d] events, iterating forward across the cursor. - // - { - c3_o ret_o = c3y; - c3_d i_d; - - for ( i_d = 0; (ret_w != MDB_NOTFOUND) && (i_d < len_d); ++i_d) { - c3_d cur_d = (eve_d + i_d); - if ( sizeof(c3_d) != key_u.mv_size ) { - fprintf(stderr, "lmdb: read: invalid key size\r\n"); - ret_o = c3n; - break; - } - - // sanity check: ensure contiguous event numbers - // - if ( *(c3_d*)key_u.mv_data != cur_d ) { - fprintf(stderr, "lmdb: read gap: expected %" PRIu64 - ", received %" PRIu64 "\r\n", - cur_d, - *(c3_d*)key_u.mv_data); - ret_o = c3n; - break; - } - - // invoke read callback with [val_u] - // - if ( c3n == read_f(ptr_v, cur_d, val_u.mv_size, val_u.mv_data) ) { - ret_o = c3n; - break; - } - - // read the next event from the cursor - // - if ( (ret_w = mdb_cursor_get(cur_u, &key_u, &val_u, MDB_NEXT)) - && (MDB_NOTFOUND != ret_w) ) - { - mdb_logerror(stderr, ret_w, "lmdb: read: error"); - ret_o = c3n; - break; - } - } - - mdb_cursor_close(cur_u); - - // read-only transactions are aborted when complete - // - mdb_txn_abort(txn_u); - - return ret_o; - } - } -} - -/* u3_lmdb_save(): save [len_d] events starting at [eve_d]. -*/ -c3_o -u3_lmdb_save(MDB_env* env_u, - c3_d eve_d, // first event - c3_d len_d, // number of events - void** byt_p, // array of bytes - size_t* siz_i) // array of lengths -{ - MDB_txn* txn_u; - MDB_dbi mdb_u; - c3_w ret_w; - - // create a write transaction - // - if ( (ret_w = mdb_txn_begin(env_u, 0, 0, &txn_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: write: txn_begin fail"); - return c3n; - } - - // opens the database in the transaction - // - { - c3_w ops_w = MDB_CREATE | MDB_INTEGERKEY; - - if ( (ret_w = mdb_dbi_open(txn_u, "EVENTS", ops_w, &mdb_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: write: dbi_open fail"); - mdb_txn_abort(txn_u); - return c3n; - } - } - - // write every event in the batch - // - { - c3_w ops_w = MDB_NOOVERWRITE; - c3_d las_d = (eve_d + len_d); - c3_d key_d, i_d; - - for ( i_d = 0; i_d < len_d; ++i_d) { - key_d = eve_d + i_d; - - { - MDB_val key_u = { .mv_size = sizeof(c3_d), .mv_data = &key_d }; - MDB_val val_u = { .mv_size = siz_i[i_d], .mv_data = byt_p[i_d] }; - - if ( (ret_w = mdb_put(txn_u, mdb_u, &key_u, &val_u, ops_w)) ) { - fprintf(stderr, "lmdb: write failed on event %" PRIu64 "\r\n", key_d); - mdb_txn_abort(txn_u); - return c3n; - } - } - } - } - - // commit transaction - // - if ( (ret_w = mdb_txn_commit(txn_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: write failed"); - return c3n; - } - - return c3y; -} - -/* u3_lmdb_read_meta(): read by string from the META db. -*/ -void -u3_lmdb_read_meta(MDB_env* env_u, - void* ptr_v, - const c3_c* key_c, - void (*read_f)(void*, size_t, void*)) -{ - MDB_txn* txn_u; - MDB_dbi mdb_u; - c3_w ret_w; - - // create a read transaction - // - if ( (ret_w = mdb_txn_begin(env_u, 0, MDB_RDONLY, &txn_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: meta read: txn_begin fail"); - return read_f(ptr_v, 0, 0); - } - - // open the database in the transaction - // - if ( (ret_w = mdb_dbi_open(txn_u, "META", 0, &mdb_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: meta read: dbi_open fail"); - mdb_txn_abort(txn_u); - return read_f(ptr_v, 0, 0); - } - - // read by string key, invoking callback with result - { - MDB_val key_u = { .mv_size = strlen(key_c), .mv_data = (void*)key_c }; - MDB_val val_u; - - if ( (ret_w = mdb_get(txn_u, mdb_u, &key_u, &val_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: read failed"); - mdb_txn_abort(txn_u); - return read_f(ptr_v, 0, 0); - } - else { - read_f(ptr_v, val_u.mv_size, val_u.mv_data); - - // read-only transactions are aborted when complete - // - mdb_txn_abort(txn_u); - } - } -} - -/* u3_lmdb_save_meta(): save by string into the META db. -*/ -c3_o -u3_lmdb_save_meta(MDB_env* env_u, - const c3_c* key_c, - size_t val_i, - void* val_p) -{ - MDB_txn* txn_u; - MDB_dbi mdb_u; - c3_w ret_w; - - // create a write transaction - // - if ( (ret_w = mdb_txn_begin(env_u, 0, 0, &txn_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: meta write: txn_begin fail"); - return c3n; - } - - // opens the database in the transaction - // - if ( (ret_w = mdb_dbi_open(txn_u, "META", MDB_CREATE, &mdb_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: meta write: dbi_open fail"); - mdb_txn_abort(txn_u); - return c3n; - } - - // put value by string key - // - { - MDB_val key_u = { .mv_size = strlen(key_c), .mv_data = (void*)key_c }; - MDB_val val_u = { .mv_size = val_i, .mv_data = val_p }; - - if ( (ret_w = mdb_put(txn_u, mdb_u, &key_u, &val_u, 0)) ) { - mdb_logerror(stderr, ret_w, "lmdb: write failed"); - mdb_txn_abort(txn_u); - return c3n; - } - } - - // commit txn - // - if ( (ret_w = mdb_txn_commit(txn_u)) ) { - mdb_logerror(stderr, ret_w, "lmdb: meta write: commit failed"); - return c3n; - } - - return c3y; -} - -#if !defined(U3_OS_mingw) -/* mdb_logerror(): writes an error message and lmdb error code to f. -*/ -void mdb_logerror(FILE* f, int err, const char* fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vfprintf(f, fmt, ap); - va_end(ap); - fprintf(f, ": %s\r\n", mdb_strerror(err)); -} - -/* mdb_get_filesize(): gets the size of a lmdb database file on disk. -*/ -intmax_t mdb_get_filesize(mdb_filehandle_t han_u) -{ - struct stat sat_u; - fstat(han_u, &sat_u); - return (intmax_t)sat_u.st_size; -} -#endif diff --git a/pkg/urbit/vere/disk.c b/pkg/urbit/vere/disk.c deleted file mode 100644 index 8a17b397c..000000000 --- a/pkg/urbit/vere/disk.c +++ /dev/null @@ -1,927 +0,0 @@ -/* vere/disk.c -*/ -#include "all.h" -#include "vere/vere.h" -#include - -struct _cd_read { - uv_timer_t tim_u; - c3_d eve_d; - c3_d len_d; - struct _u3_fact* ent_u; // queue entry - struct _u3_fact* ext_u; // queue exit - struct _u3_disk* log_u; -}; - -struct _cd_save { - c3_o ret_o; // result - c3_d eve_d; // first event - c3_d len_d; // number of events - c3_y** byt_y; // array of bytes - size_t* siz_i; // array of lengths - struct _u3_disk* log_u; -}; - -#undef VERBOSE_DISK -#undef DISK_TRACE_JAM -#undef DISK_TRACE_CUE - -static void -_disk_commit(u3_disk* log_u); - -/* _disk_free_save(): free write batch -*/ -static void -_disk_free_save(struct _cd_save* req_u) -{ - while ( req_u->len_d-- ) { - c3_free(req_u->byt_y[req_u->len_d]); - } - - c3_free(req_u->byt_y); - c3_free(req_u->siz_i); - c3_free(req_u); -} - -/* _disk_commit_done(): commit complete. - */ -static void -_disk_commit_done(struct _cd_save* req_u) -{ - u3_disk* log_u = req_u->log_u; - c3_d eve_d = req_u->eve_d; - c3_d len_d = req_u->len_d; - c3_o ret_o = req_u->ret_o; - - if ( c3n == ret_o ) { - log_u->cb_u.write_bail_f(log_u->cb_u.ptr_v, eve_d + (len_d - 1ULL)); - -#ifdef VERBOSE_DISK - if ( 1ULL == len_d ) { - fprintf(stderr, "disk: (%" PRIu64 "): commit: failed\r\n", eve_d); - } - else { - fprintf(stderr, "disk: (%" PRIu64 "-%" PRIu64 "): commit: failed\r\n", - eve_d, - eve_d + (len_d - 1ULL)); - } -#endif - } - else { - log_u->dun_d = eve_d + (len_d - 1ULL); - log_u->cb_u.write_done_f(log_u->cb_u.ptr_v, log_u->dun_d); - -#ifdef VERBOSE_DISK - if ( 1ULL == len_d ) { - fprintf(stderr, "disk: (%" PRIu64 "): commit: complete\r\n", eve_d); - } - else { - fprintf(stderr, "disk: (%" PRIu64 "-%" PRIu64 "): commit: complete\r\n", - eve_d, - eve_d + (len_d - 1ULL)); - } -#endif - } - - { - u3_fact* tac_u = log_u->put_u.ext_u; - - while ( tac_u && (tac_u->eve_d <= log_u->dun_d) ) { - log_u->put_u.ext_u = tac_u->nex_u; - u3_fact_free(tac_u); - tac_u = log_u->put_u.ext_u; - } - } - - if ( !log_u->put_u.ext_u ) { - log_u->put_u.ent_u = 0; - } - - _disk_free_save(req_u); - - _disk_commit(log_u); -} - -/* _disk_commit_after_cb(): on the main thread, finish write -*/ -static void -_disk_commit_after_cb(uv_work_t* ted_u, c3_i sas_i) -{ - struct _cd_save* req_u = ted_u->data; - - if ( UV_ECANCELED == sas_i ) { - _disk_free_save(req_u); - } - else { - ted_u->data = 0; - req_u->log_u->ted_o = c3n; - _disk_commit_done(req_u); - } -} - -/* _disk_commit_cb(): off the main thread, write event-batch. -*/ -static void -_disk_commit_cb(uv_work_t* ted_u) -{ - struct _cd_save* req_u = ted_u->data; - req_u->ret_o = u3_lmdb_save(req_u->log_u->mdb_u, - req_u->eve_d, - req_u->len_d, - (void**)req_u->byt_y, // XX safe? - req_u->siz_i); -} - -/* _disk_commit_start(): queue async event-batch write. -*/ -static void -_disk_commit_start(struct _cd_save* req_u) -{ - u3_disk* log_u = req_u->log_u; - - c3_assert( c3n == log_u->ted_o ); - log_u->ted_o = c3y; - log_u->ted_u.data = req_u; - - // queue asynchronous work to happen on another thread - // - uv_queue_work(u3L, &log_u->ted_u, _disk_commit_cb, - _disk_commit_after_cb); -} - -/* _disk_serialize_v1(): serialize events in format v1. -*/ -static c3_w -_disk_serialize_v1(u3_fact* tac_u, c3_y** out_y) -{ -#ifdef DISK_TRACE_JAM - u3t_event_trace("king disk jam", 'B'); -#endif - - { - u3_atom mat = u3qe_jam(tac_u->job); - c3_w len_w = u3r_met(3, mat); - c3_y* dat_y = c3_malloc(4 + len_w); - dat_y[0] = tac_u->mug_l & 0xff; - dat_y[1] = (tac_u->mug_l >> 8) & 0xff; - dat_y[2] = (tac_u->mug_l >> 16) & 0xff; - dat_y[3] = (tac_u->mug_l >> 24) & 0xff; - u3r_bytes(0, len_w, dat_y + 4, mat); - -#ifdef DISK_TRACE_JAM - u3t_event_trace("king disk jam", 'E'); -#endif - - u3z(mat); - - *out_y = dat_y; - return len_w + 4; - } -} - -/* _disk_batch(): create a write batch -*/ -static struct _cd_save* -_disk_batch(u3_disk* log_u, c3_d len_d) -{ - u3_fact* tac_u = log_u->put_u.ext_u; - - c3_assert( (1ULL + log_u->dun_d) == tac_u->eve_d ); - c3_assert( log_u->sen_d == log_u->put_u.ent_u->eve_d ); - - struct _cd_save* req_u = c3_malloc(sizeof(*req_u)); - req_u->log_u = log_u; - req_u->ret_o = c3n; - req_u->eve_d = tac_u->eve_d; - req_u->len_d = len_d; - req_u->byt_y = c3_malloc(len_d * sizeof(c3_y*)); - req_u->siz_i = c3_malloc(len_d * sizeof(size_t)); - - for ( c3_d i_d = 0ULL; i_d < len_d; ++i_d) { - c3_assert( (req_u->eve_d + i_d) == tac_u->eve_d ); - - req_u->siz_i[i_d] = _disk_serialize_v1(tac_u, &req_u->byt_y[i_d]); - - tac_u = tac_u->nex_u; - } - - return req_u; -} - -/* _disk_commit(): commit all available events, if idle. -*/ -static void -_disk_commit(u3_disk* log_u) -{ - if ( (c3n == log_u->ted_o) - && (log_u->sen_d > log_u->dun_d) ) - { - c3_d len_d = log_u->sen_d - log_u->dun_d; - struct _cd_save* req_u = _disk_batch(log_u, len_d); - -#ifdef VERBOSE_DISK - if ( 1ULL == len_d ) { - fprintf(stderr, "disk: (%" PRIu64 "): commit: request\r\n", - req_u->eve_d); - } - else { - fprintf(stderr, "disk: (%" PRIu64 "-%" PRIu64 "): commit: request\r\n", - req_u->eve_d, - (req_u->eve_d + len_d - 1ULL)); - } -#endif - - _disk_commit_start(req_u); - } -} - -/* u3_disk_plan(): enqueue completed event for persistence. -*/ -void -u3_disk_plan(u3_disk* log_u, u3_fact* tac_u) -{ - c3_assert( (1ULL + log_u->sen_d) == tac_u->eve_d ); - log_u->sen_d++; - - if ( !log_u->put_u.ent_u ) { - c3_assert( !log_u->put_u.ext_u ); - log_u->put_u.ent_u = log_u->put_u.ext_u = tac_u; - } - else { - log_u->put_u.ent_u->nex_u = tac_u; - log_u->put_u.ent_u = tac_u; - } - - _disk_commit(log_u); -} - -/* u3_disk_boot_plan(): enqueue boot sequence, without autocommit. -*/ -void -u3_disk_boot_plan(u3_disk* log_u, u3_noun job) -{ - // NB, boot mugs are 0 - // - u3_fact* tac_u = u3_fact_init(++log_u->sen_d, 0, job); - - if ( !log_u->put_u.ent_u ) { - c3_assert( !log_u->put_u.ext_u ); - c3_assert( 1ULL == log_u->sen_d ); - - log_u->put_u.ent_u = log_u->put_u.ext_u = tac_u; - } - else { - log_u->put_u.ent_u->nex_u = tac_u; - log_u->put_u.ent_u = tac_u; - } - -#ifdef VERBOSE_DISK - fprintf(stderr, "disk: (%" PRIu64 "): db boot plan\r\n", tac_u->eve_d); -#endif -} - -/* u3_disk_boot_save(): commit boot sequence. -*/ -void -u3_disk_boot_save(u3_disk* log_u) -{ - c3_assert( !log_u->dun_d ); - _disk_commit(log_u); -} - -static void -_disk_read_free(u3_read* red_u) -{ - // free facts (if the read failed) - // - { - u3_fact* tac_u = red_u->ext_u; - u3_fact* nex_u; - - while ( tac_u ) { - nex_u = tac_u->nex_u; - u3_fact_free(tac_u); - tac_u = nex_u; - } - } - - c3_free(red_u); -} - -/* _disk_read_close_cb(): -*/ -static void -_disk_read_close_cb(uv_handle_t* had_u) -{ - u3_read* red_u = had_u->data; - _disk_read_free(red_u); -} - -static void -_disk_read_close(u3_read* red_u) -{ - u3_disk* log_u = red_u->log_u; - - // unlink request - // - { - if ( red_u->pre_u ) { - red_u->pre_u->nex_u = red_u->nex_u; - } - else { - log_u->red_u = red_u->nex_u; - } - - if ( red_u->nex_u ) { - red_u->nex_u->pre_u = red_u->pre_u; - } - } - - uv_close(&red_u->had_u, _disk_read_close_cb); -} - -/* _disk_read_done_cb(): finalize read, invoke callback with response. -*/ -static void -_disk_read_done_cb(uv_timer_t* tim_u) -{ - u3_read* red_u = tim_u->data; - u3_disk* log_u = red_u->log_u; - u3_info pay_u = { .ent_u = red_u->ent_u, .ext_u = red_u->ext_u }; - - c3_assert( red_u->ent_u ); - c3_assert( red_u->ext_u ); - red_u->ent_u = 0; - red_u->ext_u = 0; - - log_u->cb_u.read_done_f(log_u->cb_u.ptr_v, pay_u); - _disk_read_close(red_u); -} - -/* _disk_read_one_cb(): lmdb read callback, invoked for each event in order -*/ -static c3_o -_disk_read_one_cb(void* ptr_v, c3_d eve_d, size_t val_i, void* val_p) -{ - u3_read* red_u = ptr_v; - u3_disk* log_u = red_u->log_u; - u3_fact* tac_u; - - if ( 4 >= val_i ) { - return c3n; - } - - { - u3_noun job; - c3_y* dat_y = val_p; - c3_l mug_l = dat_y[0] - ^ (dat_y[1] << 8) - ^ (dat_y[2] << 16) - ^ (dat_y[3] << 24); - -#ifdef DISK_TRACE_CUE - u3t_event_trace("king disk cue", 'B'); -#endif - - // XX u3m_soft? - // - job = u3ke_cue(u3i_bytes(val_i - 4, dat_y + 4)); - -#ifdef DISK_TRACE_CUE - u3t_event_trace("king disk cue", 'E'); -#endif - - tac_u = u3_fact_init(eve_d, mug_l, job); - } - - if ( !red_u->ent_u ) { - c3_assert( !red_u->ext_u ); - - c3_assert( red_u->eve_d == eve_d ); - red_u->ent_u = red_u->ext_u = tac_u; - } - else { - c3_assert( (1ULL + red_u->ent_u->eve_d) == eve_d ); - red_u->ent_u->nex_u = tac_u; - red_u->ent_u = tac_u; - } - - return c3y; -} - -/* _disk_read_start_cb(): the read from the db, trigger response -*/ -static void -_disk_read_start_cb(uv_timer_t* tim_u) -{ - u3_read* red_u = tim_u->data; - u3_disk* log_u = red_u->log_u; - - // read events synchronously - // - if ( c3n == u3_lmdb_read(log_u->mdb_u, - red_u, - red_u->eve_d, - red_u->len_d, - _disk_read_one_cb) ) - { - log_u->cb_u.read_bail_f(log_u->cb_u.ptr_v, red_u->eve_d); - _disk_read_close(red_u); - } - // finish the read asynchronously - // - else { - uv_timer_start(&red_u->tim_u, _disk_read_done_cb, 0, 0); - } -} - -/* u3_disk_read(): read [len_d] events starting at [eve_d]. -*/ -void -u3_disk_read(u3_disk* log_u, c3_d eve_d, c3_d len_d) -{ - u3_read* red_u = c3_malloc(sizeof(*red_u)); - red_u->log_u = log_u; - red_u->eve_d = eve_d; - red_u->len_d = len_d; - red_u->ent_u = red_u->ext_u = 0; - red_u->pre_u = 0; - red_u->nex_u = log_u->red_u; - - if ( log_u->red_u ) { - log_u->red_u->pre_u = red_u; - } - log_u->red_u = red_u; - - // perform the read asynchronously - // - uv_timer_init(u3L, &red_u->tim_u); - - red_u->tim_u.data = red_u; - uv_timer_start(&red_u->tim_u, _disk_read_start_cb, 0, 0); -} - -/* _disk_save_meta(): serialize atom, save as metadata at [key_c]. -*/ -static c3_o -_disk_save_meta(u3_disk* log_u, const c3_c* key_c, u3_atom dat) -{ - c3_w len_w = u3r_met(3, dat); - c3_y* byt_y = c3_malloc(len_w); - u3r_bytes(0, len_w, byt_y, dat); - - { - c3_o ret_o = u3_lmdb_save_meta(log_u->mdb_u, key_c, len_w, byt_y); - c3_free(byt_y); - return ret_o; - } -} - -/* u3_disk_save_meta(): save metadata. -*/ -c3_o -u3_disk_save_meta(u3_disk* log_u, - c3_d who_d[2], - c3_o fak_o, - c3_w lif_w) -{ - c3_assert( c3y == u3a_is_cat(lif_w) ); - - if ( (c3n == _disk_save_meta(log_u, "version", 1)) - || (c3n == _disk_save_meta(log_u, "who", u3i_chubs(2, who_d))) - || (c3n == _disk_save_meta(log_u, "fake", fak_o)) - || (c3n == _disk_save_meta(log_u, "life", lif_w)) ) - { - return c3n; - } - - return c3y; -} - -/* _disk_meta_read_cb(): copy [val_p] to atom [ptr_v] if present. -*/ -static void -_disk_meta_read_cb(void* ptr_v, size_t val_i, void* val_p) -{ - u3_weak* mat = ptr_v; - - if ( val_p ) { - *mat = u3i_bytes(val_i, val_p); - } -} - -/* _disk_read_meta(): read metadata at [key_c], deserialize. -*/ -static u3_weak -_disk_read_meta(u3_disk* log_u, const c3_c* key_c) -{ - u3_weak dat = u3_none; - u3_lmdb_read_meta(log_u->mdb_u, &dat, key_c, _disk_meta_read_cb); - return dat; -} - -/* u3_disk_read_meta(): read metadata. -*/ -c3_o -u3_disk_read_meta(u3_disk* log_u, - c3_d* who_d, - c3_o* fak_o, - c3_w* lif_w) -{ - u3_weak ver, who, fak, lif; - - if ( u3_none == (ver = _disk_read_meta(log_u, "version")) ) { - fprintf(stderr, "disk: read meta: no version\r\n"); - return c3n; - } - if ( u3_none == (who = _disk_read_meta(log_u, "who")) ) { - fprintf(stderr, "disk: read meta: no indentity\r\n"); - return c3n; - } - if ( u3_none == (fak = _disk_read_meta(log_u, "fake")) ) { - fprintf(stderr, "disk: read meta: no fake bit\r\n"); - return c3n; - } - if ( u3_none == (lif = _disk_read_meta(log_u, "life")) ) { - fprintf(stderr, "disk: read meta: no lifecycle length\r\n"); - return c3n; - } - - { - c3_o val_o = c3y; - - if ( 1 != ver ) { - fprintf(stderr, "disk: read meta: unknown version %u\r\n", ver); - val_o = c3n; - } - else if ( !((c3y == fak ) || (c3n == fak )) ) { - fprintf(stderr, "disk: read meta: invalid fake bit\r\n"); - val_o = c3n; - } - else if ( c3n == u3a_is_cat(lif) ) { - fprintf(stderr, "disk: read meta: invalid lifecycle length\r\n"); - val_o = c3n; - } - - if ( c3n == val_o ) { - u3z(ver); u3z(who); u3z(fak); u3z(lif); - return c3n; - } - } - - if ( who_d ) { - u3r_chubs(0, 2, who_d, who); - } - - if ( fak_o ) { - *fak_o = fak; - } - - if ( lif_w ) { - *lif_w = lif; - } - - u3z(who); - return c3y; -} - -/* _disk_lock(): lockfile path. -*/ -static c3_c* -_disk_lock(c3_c* pax_c) -{ - c3_w len_w = strlen(pax_c) + sizeof("/.vere.lock"); - c3_c* paf_c = c3_malloc(len_w); - c3_i wit_i; - - wit_i = snprintf(paf_c, len_w, "%s/.vere.lock", pax_c); - c3_assert(wit_i + 1 == len_w); - return paf_c; -} - -/* u3_disk_acquire(): acquire a lockfile, killing anything that holds it. -*/ -static void -u3_disk_acquire(c3_c* pax_c) -{ - c3_c* paf_c = _disk_lock(pax_c); - c3_w pid_w; - FILE* loq_u; - - if ( NULL != (loq_u = c3_fopen(paf_c, "r")) ) { - if ( 1 != fscanf(loq_u, "%" SCNu32, &pid_w) ) { - u3l_log("lockfile %s is corrupt!\n", paf_c); - kill(getpid(), SIGTERM); - sleep(1); c3_assert(0); - } - else if (pid_w != getpid()) { - c3_w i_w; - - if ( -1 != kill(pid_w, SIGTERM) ) { - u3l_log("disk: stopping process %d, live in %s...\n", - pid_w, pax_c); - - for ( i_w = 0; i_w < 16; i_w++ ) { - sleep(1); - if ( -1 == kill(pid_w, SIGTERM) ) { - break; - } - } - if ( 16 == i_w ) { - for ( i_w = 0; i_w < 16; i_w++ ) { - if ( -1 == kill(pid_w, SIGKILL) ) { - break; - } - sleep(1); - } - } - if ( 16 == i_w ) { - u3l_log("disk: process %d seems unkillable!\n", pid_w); - c3_assert(0); - } - u3l_log("disk: stopped old process %u\n", pid_w); - } - } - fclose(loq_u); - c3_unlink(paf_c); - } - - if ( NULL == (loq_u = c3_fopen(paf_c, "w")) ) { - u3l_log("disk: unable to open %s\n", paf_c); - c3_assert(0); - } - - fprintf(loq_u, "%u\n", getpid()); - - { - c3_i fid_i = fileno(loq_u); - c3_sync(fid_i); - } - - fclose(loq_u); - c3_free(paf_c); -} - -/* u3_disk_release(): release a lockfile. -*/ -static void -u3_disk_release(c3_c* pax_c) -{ - c3_c* paf_c = _disk_lock(pax_c); - - c3_unlink(paf_c); - c3_free(paf_c); -} - -/* u3_disk_exit(): close the log. -*/ -void -u3_disk_exit(u3_disk* log_u) -{ - // cancel all outstanding reads - // - { - u3_read* red_u = log_u->red_u; - - while ( red_u ) { - _disk_read_close(red_u); - red_u = red_u->nex_u; - } - } - - // cancel write thread - // - // XX can deadlock when called from signal handler - // XX revise SIGTSTP handling - // - if ( c3y == log_u->ted_o ) { - c3_i sas_i; - - do { - sas_i = uv_cancel(&log_u->req_u); - } - while ( UV_EBUSY == sas_i ); - } - - // close database - // - u3_lmdb_exit(log_u->mdb_u); - - // dispose planned writes - // - - { - u3_fact* tac_u = log_u->put_u.ext_u; - u3_fact* nex_u; - - while ( tac_u ) { - nex_u = tac_u->nex_u; - u3_fact_free(tac_u); - tac_u = nex_u; - } - } - - u3_disk_release(log_u->dir_u->pax_c); - - u3_dire_free(log_u->dir_u); - u3_dire_free(log_u->urb_u); - u3_dire_free(log_u->com_u); - - c3_free(log_u); - -#if defined(DISK_TRACE_JAM) || defined(DISK_TRACE_CUE) - u3t_trace_close(); -#endif -} - -/* u3_disk_info(): status info as a (list mass). -*/ -u3_noun -u3_disk_info(u3_disk* log_u) -{ - u3_read* red_u = log_u->red_u; - u3_noun red = u3_nul; - u3_noun lit = u3i_list( - u3_pier_mase("live", log_u->liv_o), - u3_pier_mase("event", u3i_chub(log_u->dun_d)), - u3_none); - - if ( log_u->put_u.ext_u ) { - lit = u3nc( - u3_pier_mass( - c3__save, - u3i_list( - u3_pier_mase("save-start", u3i_chub(log_u->put_u.ext_u->eve_d)), - u3_pier_mase("save-final", u3i_chub(log_u->put_u.ent_u->eve_d)), - u3_none)), - lit); - } - - while ( red_u ) { - red = u3nc( - u3_pier_mass( - u3dc("scot", c3__ux, u3i_chub((c3_d)red_u)), - u3i_list( - u3_pier_mase("start", u3i_chub(red_u->eve_d)), - u3_pier_mase("final", u3i_chub(red_u->eve_d + red_u->len_d - 1)), - u3_none)), - red); - red_u = red_u->nex_u; - } - lit = u3nc(u3_pier_mass(c3__read, red), lit); - return u3_pier_mass(c3__disk, lit); -} - -/* u3_disk_slog(): print status info. -*/ -void -u3_disk_slog(u3_disk* log_u) -{ - u3l_log(" disk: live=%s, event=%" PRIu64 "\n", - ( c3y == log_u->liv_o ) ? "&" : "|", - log_u->dun_d); - - { - u3_read* red_u = log_u->red_u; - - while ( red_u ) { - u3l_log(" read: %" PRIu64 "-%" PRIu64 "\n", - red_u->eve_d, - (red_u->eve_d + red_u->len_d) - 1); - red_u = red_u->nex_u; - } - } - - if ( log_u->put_u.ext_u ) { - if ( log_u->put_u.ext_u != log_u->put_u.ent_u ) { - u3l_log(" save: %" PRIu64 "-%" PRIu64 "\n", - log_u->put_u.ext_u->eve_d, - log_u->put_u.ent_u->eve_d); - } - else { - u3l_log(" save: %" PRIu64 "\n", log_u->put_u.ext_u->eve_d); - } - } -} - -/* u3_disk_init(): load or create pier directories and event log. -*/ -u3_disk* -u3_disk_init(c3_c* pax_c, u3_disk_cb cb_u) -{ - u3_disk* log_u = c3_calloc(sizeof(*log_u)); - log_u->liv_o = c3n; - log_u->ted_o = c3n; - log_u->cb_u = cb_u; - log_u->red_u = 0; - log_u->put_u.ent_u = log_u->put_u.ext_u = 0; - - // create/load pier directory - // - { - if ( 0 == (log_u->dir_u = u3_foil_folder(pax_c)) ) { - fprintf(stderr, "disk: failed to load pier at %s\r\n", pax_c); - c3_free(log_u); - return 0; - } - } - - // acquire lockfile. - // - u3_disk_acquire(pax_c); - - // create/load $pier/.urb - // - { - c3_c* urb_c = c3_malloc(6 + strlen(pax_c)); - - strcpy(urb_c, pax_c); - strcat(urb_c, "/.urb"); - - if ( 0 == (log_u->urb_u = u3_foil_folder(urb_c)) ) { - fprintf(stderr, "disk: failed to load /.urb in %s\r\n", pax_c); - c3_free(urb_c); - c3_free(log_u); - return 0; - } - c3_free(urb_c); - } - - // create/load $pier/.urb/put and $pier/.urb/get - // - { - c3_c* dir_c = c3_malloc(10 + strlen(pax_c)); - - strcpy(dir_c, pax_c); - strcat(dir_c, "/.urb/put"); - c3_mkdir(dir_c, 0700); - - strcpy(dir_c, pax_c); - strcat(dir_c, "/.urb/get"); - c3_mkdir(dir_c, 0700); - - c3_free(dir_c); - } - - // create/load $pier/.urb/log, initialize db - // - { - c3_c* log_c = c3_malloc(10 + strlen(pax_c)); - - strcpy(log_c, pax_c); - strcat(log_c, "/.urb/log"); - - if ( 0 == (log_u->com_u = u3_foil_folder(log_c)) ) { - fprintf(stderr, "disk: failed to load /.urb/log in %s\r\n", pax_c); - c3_free(log_c); - c3_free(log_u); - return 0; - } - - // Arbitrarily choosing 1TB as a "large enough" mapsize - // - // per the LMDB docs: - // "[..] on 64-bit there is no penalty for making this huge (say 1TB)." - // - { - const size_t siz_i = - #if (defined(U3_CPU_aarch64) && defined(U3_OS_linux)) || defined(U3_OS_mingw) - 0xf00000000; - #else - 0x10000000000; - #endif - - if ( 0 == (log_u->mdb_u = u3_lmdb_init(log_c, siz_i)) ) { - fprintf(stderr, "disk: failed to initialize database\r\n"); - c3_free(log_c); - c3_free(log_u); - return 0; - } - } - - c3_free(log_c); - } - - // get the latest event number from the db - // - { - log_u->dun_d = 0; - c3_d fir_d; - - if ( c3n == u3_lmdb_gulf(log_u->mdb_u, &fir_d, &log_u->dun_d) ) { - fprintf(stderr, "disk: failed to load latest event from database\r\n"); - c3_free(log_u); - return 0; - } - - log_u->sen_d = log_u->dun_d; - } - - log_u->liv_o = c3y; - -#if defined(DISK_TRACE_JAM) || defined(DISK_TRACE_CUE) - u3t_trace_open(pax_c); -#endif - - return log_u; -} diff --git a/pkg/urbit/vere/foil.c b/pkg/urbit/vere/foil.c deleted file mode 100644 index 1d844f5d4..000000000 --- a/pkg/urbit/vere/foil.c +++ /dev/null @@ -1,146 +0,0 @@ -/* vere/foil.c -** -** This file is in the public domain. -*/ - -#include "all.h" -#include "vere/vere.h" - - /* assumptions: - ** all measurements are in chubs (double-words, c3_d, uint64_t). - ** little-endian addressing is ASSUMED. - ** - ** framing: - ** the last two chubs of a frame: - ** - ** { - ** 64-bit frame length - ** { - ** (high 32 bits) mug of frame - ** (low 32 bits) mug of current address - ** } - ** } - ** - ** we can scan for one of these frames with very low probability - ** of a false positive. we always write to and read from the end - ** of a file. a frame position points to its end. - ** - ** protocol: - ** once the callback is called, all results are fully fsynced. - ** all callbacks are optional and can be passed 0. - */ - -/* _foil_fail(): fail with error. -*/ -static void -_foil_fail(const c3_c* why_c, c3_i err_i) -{ - if ( err_i ) { - u3l_log("%s: error: %s\r\n", why_c, uv_strerror(err_i)); - c3_assert(0); - } else { - u3l_log("%s: file error\r\n", why_c); - } - exit(1); -} - -/* _foil_close(): close file, blockingly. -*/ -static void -_foil_close(uv_file fil_f) -{ - c3_i err_i; - uv_fs_t ruq_u; - - if ( 0 != (err_i = uv_fs_close(u3L, &ruq_u, fil_f, 0)) ) { - _foil_fail("uv_fs_close", err_i); - } -} - -/* _foil_path(): allocate path. -*/ -static c3_c* -_foil_path(u3_dire* dir_u, - const c3_c* nam_c) -{ - c3_w len_w = strlen(dir_u->pax_c); - c3_c* pax_c; - - pax_c = c3_malloc(1 + len_w + 1 + strlen(nam_c)); - strcpy(pax_c, dir_u->pax_c); - pax_c[len_w] = '/'; - strcpy(pax_c + len_w + 1, nam_c); - - return pax_c; -} - -/* u3_foil_folder(): load directory, blockingly. null if nonexistent. -*/ -u3_dire* -u3_foil_folder(const c3_c* pax_c) -{ - u3_dire* dir_u; - uv_fs_t ruq_u; - uv_dirent_t den_u; - c3_i err_i; - - /* open directory, synchronously - */ - { - err_i = uv_fs_scandir(u3L, &ruq_u, pax_c, 0, 0); - - if ( err_i < 0 ) { - if ( UV_ENOENT != err_i ) { - _foil_fail(pax_c, err_i); - return 0; - } - else { - if ( 0 != (err_i = uv_fs_mkdir(u3L, &ruq_u, pax_c, 0700, 0)) ) { - _foil_fail(pax_c, err_i); - return 0; - } - else { - uv_fs_req_cleanup(&ruq_u); - return u3_foil_folder(pax_c); - } - } - } - - dir_u = u3_dire_init(pax_c); - } - - /* create entries for all files - */ - while ( UV_EOF != uv_fs_scandir_next(&ruq_u, &den_u) ) { - if ( UV_DIRENT_FILE == den_u.type ) { - u3_dent* det_u = u3_dent_init(den_u.name); - det_u->nex_u = dir_u->all_u; - dir_u->all_u = det_u; - } - } - - /* clean up request - */ - { - uv_fs_req_cleanup(&ruq_u); - } - - /* open directory file for reading, to fsync - */ - { - if ( 0 > (err_i = uv_fs_open(u3L, - &ruq_u, - pax_c, - O_RDONLY, - 0600, - 0)) ) - { - _foil_fail("open directory", err_i); - return 0; - } - dir_u->fil_u = ruq_u.result; - - uv_fs_req_cleanup(&ruq_u); - } - return dir_u; -} diff --git a/pkg/urbit/vere/io/ames.c b/pkg/urbit/vere/io/ames.c deleted file mode 100644 index 400bca7ad..000000000 --- a/pkg/urbit/vere/io/ames.c +++ /dev/null @@ -1,1603 +0,0 @@ -/* vere/ames.c -** -*/ -#include "all.h" -#include "vere/vere.h" -#include "ur/serial.h" - -/* u3_pact: outbound ames packet. -*/ - typedef struct _u3_pact { - uv_udp_send_t snd_u; // udp send request - u3_lane lan_u; // destination lane - c3_w len_w; // length in bytes - c3_y* hun_y; // packet buffer - c3_y imp_y; // galaxy number (optional) - c3_c* dns_c; // galaxy fqdn (optional) - struct _u3_ames* sam_u; // ames backpointer - } u3_pact; - -/* u3_ames: ames networking. -*/ - typedef struct _u3_ames { // packet network state - u3_auto car_u; // driver - u3_pier* pir_u; // pier - union { // uv udp handle - uv_udp_t wax_u; // - uv_handle_t had_u; // - }; // - c3_l sev_l; // instance number - ur_cue_test_t* tes_u; // cue-test handle - u3_cue_xeno* sil_u; // cue handle - c3_c* dns_c; // domain XX multiple/fallback - c3_y ver_y; // protocol version - u3p(u3h_root) lax_p; // lane scry cache - struct _u3_panc* pac_u; // packets pending forwards - c3_w imp_w[256]; // imperial IPs - time_t imp_t[256]; // imperial IP timestamps - c3_o imp_o[256]; // imperial print status - struct { // config: - c3_o net_o; // can send - c3_o see_o; // can scry - c3_o fit_o; // filtering active - } fig_u; // - struct { // stats: - c3_d dop_d; // drop count - c3_d fal_d; // crash count - c3_d saw_d; // successive scry failures - c3_d hed_d; // failed to read header - c3_d vet_d; // version mismatches filtered - c3_d mut_d; // invalid mugs filtered - c3_d bod_d; // failed to read body - c3_d foq_d; // forward queue size - c3_d fow_d; // forwarded count - c3_d fod_d; // forwards dropped count - } sat_u; // - } u3_ames; - -/* u3_head: ames packet header -*/ - typedef struct _u3_head { - c3_o sim_o; // is ames protocol? - c3_y ver_y; // protocol version - c3_y sac_y; // sender class - c3_y rac_y; // receiver class - c3_l mug_l; // truncated mug hash of u3_body - c3_o rel_o; // relayed? - } u3_head; - -/* u3_body: ames packet body -*/ - typedef struct _u3_body { - c3_d sen_d[2]; // sender - c3_d rec_d[2]; // receiver - c3_y sic_y; // sender life tick - c3_y ric_y; // receiver life tick - c3_s con_s; // content size - c3_y* con_y; // content - c3_d rog_d; // origin lane (optional) - c3_l mug_l; // checksum - } u3_body; - -/* u3_panc: deconstructed incoming packet -*/ - typedef struct _u3_panc { - u3_ames* sam_u; // ames backpointer - struct _u3_panc* pre_u; // previous packet - struct _u3_panc* nex_u; // next packet - u3_lane ore_u; // origin lane - u3_head hed_u; // header - u3_body bod_u; // body - void* ptr_v; // buffer (to free) - } u3_panc; - -/* _ames_alloc(): libuv buffer allocator. -*/ -static void -_ames_alloc(uv_handle_t* had_u, - size_t len_i, - uv_buf_t* buf - ) -{ - // we allocate 2K, which gives us plenty of space - // for a single ames packet (max size 1060 bytes) - // - void* ptr_v = c3_malloc(2048); - *buf = uv_buf_init(ptr_v, 2048); -} - -/* _ames_pact_free(): free packet struct. -*/ -static void -_ames_pact_free(u3_pact* pac_u) -{ - c3_free(pac_u->hun_y); - c3_free(pac_u->dns_c); - c3_free(pac_u); -} - -/* _ames_panc_free(): remove references, lose refcounts and free struct -*/ -static void -_ames_panc_free(u3_panc* pac_u) -{ - if ( 0 != pac_u->nex_u ) { - pac_u->nex_u->pre_u = pac_u->pre_u; - } - - if ( 0 != pac_u->pre_u ) { - pac_u->pre_u->nex_u = pac_u->nex_u; - } - else { - c3_assert(pac_u == pac_u->sam_u->pac_u); - pac_u->sam_u->pac_u = pac_u->nex_u; - } - - c3_free(pac_u->ptr_v); - c3_free(pac_u); -} - -/* _ames_sift_head(): parse packet header. -*/ -static c3_o -_ames_sift_head(u3_head* hed_u, c3_y buf_y[4]) -{ - c3_w hed_w = buf_y[0] - | (buf_y[1] << 8) - | (buf_y[2] << 16) - | (buf_y[3] << 24); - - // first three bits are reserved - // - hed_u->sim_o = (hed_w >> 3) & 0x1; - hed_u->ver_y = (hed_w >> 4) & 0x7; - hed_u->sac_y = (hed_w >> 7) & 0x3; - hed_u->rac_y = (hed_w >> 9) & 0x3; - hed_u->mug_l = (hed_w >> 11) & 0xfffff; // 20 bits - hed_u->rel_o = (hed_w >> 31) & 0x1; - - // reject packets that don't even claim to be ames packets - // - return hed_u->sim_o; -} - - -/* _ames_chub_bytes(): c3_y[8] to c3_d -** XX factor out, deduplicate with other conversions -*/ -static inline c3_d -_ames_chub_bytes(c3_y byt_y[8]) -{ - return (c3_d)byt_y[0] - | (c3_d)byt_y[1] << 8 - | (c3_d)byt_y[2] << 16 - | (c3_d)byt_y[3] << 24 - | (c3_d)byt_y[4] << 32 - | (c3_d)byt_y[5] << 40 - | (c3_d)byt_y[6] << 48 - | (c3_d)byt_y[7] << 56; -} - -/* _ames_ship_to_chubs(): pack [len_y] bytes into c3_d[2] -*/ -static inline void -_ames_ship_to_chubs(c3_d sip_d[2], c3_y len_y, c3_y* buf_y) -{ - c3_y sip_y[16] = {0}; - memcpy(sip_y, buf_y, c3_min(16, len_y)); - - sip_d[0] = _ames_chub_bytes(sip_y); - sip_d[1] = _ames_chub_bytes(sip_y + 8); -} - -/* _ames_chub_bytes(): c3_d to c3_y[8] -** XX factor out, deduplicate with other conversions -*/ -static inline void -_ames_bytes_chub(c3_y byt_y[8], c3_d num_d) -{ - byt_y[0] = num_d & 0xff; - byt_y[1] = (num_d >> 8) & 0xff; - byt_y[2] = (num_d >> 16) & 0xff; - byt_y[3] = (num_d >> 24) & 0xff; - byt_y[4] = (num_d >> 32) & 0xff; - byt_y[5] = (num_d >> 40) & 0xff; - byt_y[6] = (num_d >> 48) & 0xff; - byt_y[7] = (num_d >> 56) & 0xff; -} - -/* _ames_ship_of_chubs(): unpack c3_d[2] into [len_y] bytes. -*/ -static inline void -_ames_ship_of_chubs(c3_d sip_d[2], c3_y len_y, c3_y* buf_y) -{ - c3_y sip_y[16] = {0}; - - _ames_bytes_chub(sip_y, sip_d[0]); - _ames_bytes_chub(sip_y + 8, sip_d[1]); - - memcpy(buf_y, sip_y, c3_min(16, len_y)); -} - -/* _ames_sift_body(): parse packet body. -*/ -static c3_o -_ames_sift_body(u3_head* hed_u, - u3_body* bod_u, - c3_w len_w, - c3_y* bod_y) -{ - c3_y rog_y, sen_y, rec_y; - - rog_y = ( c3y == hed_u->rel_o )? 6 : 0; - - sen_y = 2 << hed_u->sac_y; - rec_y = 2 << hed_u->rac_y; - - if ( (1 + sen_y + rec_y + rog_y) >= len_w ) { - return c3n; - } - else { - c3_y* gob_y; - c3_s gob_s; - - if ( rog_y) { - c3_y rag_y[8] = {0}; - memcpy(rag_y, bod_y, rog_y); - bod_u->rog_d = _ames_chub_bytes(rag_y); - } - else { - bod_u->rog_d = 0; - } - - gob_y = bod_y + rog_y; - gob_s = len_w - rog_y; - - bod_u->mug_l = u3r_mug_bytes(gob_y, gob_s) & 0xfffff; - - bod_u->sic_y = gob_y[0] & 0xf; - bod_u->ric_y = (gob_y[0] >> 4) & 0xf; - - _ames_ship_to_chubs(bod_u->sen_d, sen_y, gob_y + 1); - _ames_ship_to_chubs(bod_u->rec_d, rec_y, gob_y + 1 + sen_y); - - bod_u->con_s = gob_s - 1 - sen_y - rec_y; - bod_u->con_y = gob_y + 1 + sen_y + rec_y; - - return c3y; - } -} - -/* _ames_etch_head(): serialize packet header. -*/ -static void -_ames_etch_head(u3_head* hed_u, c3_y buf_y[4]) -{ - c3_w hed_w = ((hed_u->sim_o & 0x1) << 3) - ^ ((hed_u->ver_y & 0x7) << 4) - ^ ((hed_u->sac_y & 0x3) << 7) - ^ ((hed_u->rac_y & 0x3) << 9) - ^ ((hed_u->mug_l & 0xfffff) << 11) - ^ ((hed_u->rel_o & 0x1) << 31); - - // only version 0 currently recognized - // - c3_assert( 0 == hed_u->ver_y ); // XX remove after testing - - buf_y[0] = hed_w & 0xff; - buf_y[1] = (hed_w >> 8) & 0xff; - buf_y[2] = (hed_w >> 16) & 0xff; - buf_y[3] = (hed_w >> 24) & 0xff; -} - -/* _ames_etch_pack(): serialize packet header and body. -*/ -static c3_w -_ames_etch_pack(u3_head* hed_u, - u3_body* bod_u, - c3_y** out_y) -{ - c3_y sen_y = 2 << hed_u->sac_y; // sender len - c3_y rec_y = 2 << hed_u->rac_y; // receiver len - c3_y rog_y = ( c3y == hed_u->rel_o )? 6 : 0; // origin len - c3_w bod_w = rog_y + 1 + sen_y + rec_y + bod_u->con_s; // body len - c3_w len_w = 4 + bod_w; // packet len - c3_y* pac_y = c3_malloc(len_w); // output buf - c3_y* bod_y = pac_y + 4; // body cursor - c3_y* gob_y = bod_y + rog_y; // after origin - - // serialize the head - // - _ames_etch_head(hed_u, pac_y); - - // serialize the origin, if present - // - if ( rog_y ) { - c3_y rag_y[8] = {0}; - _ames_bytes_chub(rag_y, bod_u->rog_d); - memcpy(bod_y, rag_y, rog_y); - } - - // serialize the body - // - gob_y[0] = (bod_u->sic_y & 0xf) ^ ((bod_u->ric_y & 0xf) << 4); - - _ames_ship_of_chubs(bod_u->sen_d, sen_y, gob_y + 1); - _ames_ship_of_chubs(bod_u->rec_d, rec_y, gob_y + 1 + sen_y); - - memcpy(gob_y + 1 + sen_y + rec_y, bod_u->con_y, bod_u->con_s); - - *out_y = pac_y; - return len_w; -} - -/* _ames_send_cb(): send callback. -*/ -static void -_ames_send_cb(uv_udp_send_t* req_u, c3_i sas_i) -{ - u3_pact* pac_u = (u3_pact*)req_u; - u3_ames* sam_u = pac_u->sam_u; - - if ( sas_i && (c3y == sam_u->fig_u.net_o) ) { - u3l_log("ames: send fail: %s\n", uv_strerror(sas_i)); - sam_u->fig_u.net_o = c3n; - } - else { - sam_u->fig_u.net_o = c3y; - } - - _ames_pact_free(pac_u); -} - -/* _ames_send(): send buffer to address on port. -*/ -static void -_ames_send(u3_pact* pac_u) -{ - u3_ames* sam_u = pac_u->sam_u; - - if ( !pac_u->hun_y ) { - _ames_pact_free(pac_u); - return; - } - else { - struct sockaddr_in add_u; - - memset(&add_u, 0, sizeof(add_u)); - add_u.sin_family = AF_INET; - add_u.sin_addr.s_addr = htonl(pac_u->lan_u.pip_w); - add_u.sin_port = htons(pac_u->lan_u.por_s); - - { - uv_buf_t buf_u = uv_buf_init((c3_c*)pac_u->hun_y, pac_u->len_w); - c3_i sas_i = uv_udp_send(&pac_u->snd_u, - &sam_u->wax_u, - &buf_u, 1, - (const struct sockaddr*)&add_u, - _ames_send_cb); - - if ( sas_i ) { - if ( c3y == sam_u->fig_u.net_o ) { - u3l_log("ames: send fail: %s\n", uv_strerror(sas_i)); - sam_u->fig_u.net_o = c3n; - } - - _ames_pact_free(pac_u); - } - } - } -} - -/* u3_ames_decode_lane(): deserialize noun to lane; 0.0.0.0:0 if invalid -*/ -u3_lane -u3_ames_decode_lane(u3_atom lan) { - u3_lane lan_u; - c3_d lan_d; - - if ( c3n == u3r_safe_chub(lan, &lan_d) || (lan_d >> 48) != 0 ) { - return (u3_lane){0, 0}; - } - - u3z(lan); - - lan_u.pip_w = (c3_w)lan_d; - lan_u.por_s = (c3_s)(lan_d >> 32); - return lan_u; -} - -/* u3_ames_lane_to_chub(): serialize lane to double-word -*/ -c3_d -u3_ames_lane_to_chub(u3_lane lan) { - return ((c3_d)lan.por_s << 32) ^ (c3_d)lan.pip_w; -} - -/* u3_ames_encode_lane(): serialize lane to noun -*/ -u3_atom -u3_ames_encode_lane(u3_lane lan) { - return u3i_chub(u3_ames_lane_to_chub(lan)); -} - -/* _ames_lane_into_cache(): put las for who into cache, including timestamp -*/ -static void -_ames_lane_into_cache(u3p(u3h_root) lax_p, u3_noun who, u3_noun las) { - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - u3_noun now = u3_time_in_tv(&tim_tv); - u3_noun val = u3nc(las, now); - u3h_put(lax_p, who, val); - u3z(who); -} - -/* _ames_lane_from_cache(): retrieve lane for who from cache, if any & fresh -*/ -static u3_weak -_ames_lane_from_cache(u3p(u3h_root) lax_p, u3_noun who) { - u3_weak lac = u3h_git(lax_p, who); - - if ( u3_none != lac ) { - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - u3_noun now = u3_time_in_tv(&tim_tv); - u3_noun den = u3t(lac); - - // consider entries older than 2 minutes stale, ignore them - // - if ( 120000 > u3_time_gap_ms(u3k(den), now) ) { - lac = u3k(u3h(lac)); - } else { - lac = u3_none; - } - } - - u3z(who); - return lac; -} - -/* _ames_serialize_packet(): u3_panc to atom, updating the origin lane if dop_o -** (retains pac_u) -*/ -static u3_noun -_ames_serialize_packet(u3_panc* pac_u, c3_o dop_o) -{ - // update the body's lane, if: - // - we're supposed to (dop_o) - // - it hasn't already been updated (rel_o) - // - sender is not a galaxy - // - if ( c3y == dop_o - && c3n == pac_u->hed_u.rel_o - && !( ( 256 > pac_u->bod_u.sen_d[0] ) - && ( 0 == pac_u->bod_u.sen_d[1] ) ) ) - { - pac_u->hed_u.rel_o = c3y; - pac_u->bod_u.rog_d = u3_ames_lane_to_chub(pac_u->ore_u); - } - - // serialize the packet - // - // XX serialize on stack? - // - { - u3_noun pac; - c3_y* pac_y; - c3_w len_w = _ames_etch_pack(&pac_u->hed_u, - &pac_u->bod_u, - &pac_y); - pac = u3i_bytes(len_w, pac_y); - c3_free(pac_y); - - return pac; - } -} - -/* _ames_czar_port(): udp port for galaxy. -*/ -static c3_s -_ames_czar_port(c3_y imp_y) -{ - if ( c3n == u3_Host.ops_u.net ) { - return 31337 + imp_y; - } - else { - return 13337 + imp_y; - } -} - -/* _ames_czar_gone(): galaxy address resolution failed. -*/ -static void -_ames_czar_gone(u3_pact* pac_u, time_t now) -{ - u3_ames* sam_u = pac_u->sam_u; - - if ( c3y == sam_u->imp_o[pac_u->imp_y] ) { - u3l_log("ames: czar at %s: not found (b)\n", pac_u->dns_c); - sam_u->imp_o[pac_u->imp_y] = c3n; - } - - if ( (0 == sam_u->imp_w[pac_u->imp_y]) || - (0xffffffff == sam_u->imp_w[pac_u->imp_y]) ) - { - sam_u->imp_w[pac_u->imp_y] = 0xffffffff; - } - - // keep existing ip for 5 more minutes - // - sam_u->imp_t[pac_u->imp_y] = now; - - _ames_pact_free(pac_u); -} - -/* _ames_czar_here(): galaxy address resolution succeeded. -*/ -static void -_ames_czar_here(u3_pact* pac_u, time_t now, struct sockaddr_in* add_u) -{ - u3_ames* sam_u = pac_u->sam_u; - c3_w old_w = sam_u->imp_w[pac_u->imp_y]; - c3_w pip_w = ntohl(add_u->sin_addr.s_addr); - - if ( pip_w != old_w ) { - u3_noun nam = u3dc("scot", c3__if, u3i_word(pip_w)); - c3_c* nam_c = u3r_string(nam); - - u3l_log("ames: czar %s: ip %s\n", pac_u->dns_c, nam_c); - - c3_free(nam_c); - u3z(nam); - } - - sam_u->imp_w[pac_u->imp_y] = pip_w; - sam_u->imp_t[pac_u->imp_y] = now; - sam_u->imp_o[pac_u->imp_y] = c3y; - - pac_u->lan_u.pip_w = pip_w; - _ames_send(pac_u); -} - -/* _ames_czar_cb(): galaxy address resolution callback. -*/ -static void -_ames_czar_cb(uv_getaddrinfo_t* adr_u, - c3_i sas_i, - struct addrinfo* aif_u) -{ - { - u3_pact* pac_u = (u3_pact*)adr_u->data; - struct addrinfo* rai_u = aif_u; - time_t now = time(0); - - while ( rai_u ) { - if ( (AF_INET == rai_u->ai_family) ) { - _ames_czar_here(pac_u, now, (struct sockaddr_in *)rai_u->ai_addr); - break; - } - else { - rai_u = rai_u->ai_next; - } - } - - if ( !rai_u ) { - _ames_czar_gone(pac_u, now); - } - } - - c3_free(adr_u); - uv_freeaddrinfo(aif_u); -} - -/* _ames_czar(): galaxy address resolution. -*/ -static void -_ames_czar(u3_pact* pac_u) -{ - u3_ames* sam_u = pac_u->sam_u; - - pac_u->lan_u.por_s = _ames_czar_port(pac_u->imp_y); - - if ( c3n == u3_Host.ops_u.net ) { - pac_u->lan_u.pip_w = 0x7f000001; - _ames_send(pac_u); - return; - } - - // if we don't have a galaxy domain, no-op - // - if ( !sam_u->dns_c ) { - u3_noun nam = u3dc("scot", 'p', pac_u->imp_y); - c3_c* nam_c = u3r_string(nam); - u3l_log("ames: no galaxy domain for %s, no-op\r\n", nam_c); - - c3_free(nam_c); - u3z(nam); - return; - } - - { - c3_w pip_w = sam_u->imp_w[pac_u->imp_y]; - time_t wen = sam_u->imp_t[pac_u->imp_y]; - time_t now = time(0); - - // backoff for 5 minutes after failed lookup - // - if ( ( now < wen ) // time shenanigans! - || ( (0xffffffff == pip_w) // sentinal ip address - && ((now - wen) < 300) ) ) - { - _ames_pact_free(pac_u); - return; - } - // cached addresses have a 5 minute TTL - // - else if ( (0 != pip_w) && ((now - wen) < 300) ) { - pac_u->lan_u.pip_w = pip_w; - _ames_send(pac_u); - return; - } - else { - c3_i sas_i; - - { - u3_noun nam = u3dc("scot", 'p', pac_u->imp_y); - c3_c* nam_c = u3r_string(nam); - - // NB: . separator not counted, as [nam_c] includes a ~ that we skip - // - pac_u->dns_c = c3_malloc(1 + strlen(nam_c) + strlen(sam_u->dns_c)); - sas_i = snprintf(pac_u->dns_c, 255, "%s.%s", nam_c + 1, sam_u->dns_c); - - c3_free(nam_c); - u3z(nam); - } - - if ( 255 <= sas_i ) { - u3l_log("ames: czar: galaxy domain %s truncated\n", sam_u->dns_c); - _ames_pact_free(pac_u); - return; - } - - { - uv_getaddrinfo_t* adr_u = c3_malloc(sizeof(*adr_u)); - adr_u->data = pac_u; - - if ( 0 != (sas_i = uv_getaddrinfo(u3L, adr_u, - _ames_czar_cb, - pac_u->dns_c, 0, 0)) ) - { - u3l_log("ames: %s\n", uv_strerror(sas_i)); - _ames_czar_gone(pac_u, now); - return; - } - } - } - } -} - -/* _ames_ef_send(): send packet to network (v4). -*/ -static void -_ames_ef_send(u3_ames* sam_u, u3_noun lan, u3_noun pac) -{ - if ( c3n == sam_u->car_u.liv_o ) { - u3l_log("ames: not yet live, dropping outbound\r\n"); - u3z(lan); u3z(pac); - return; - } - - u3_pact* pac_u = c3_calloc(sizeof(*pac_u)); - pac_u->sam_u = sam_u; - pac_u->len_w = u3r_met(3, pac); - pac_u->hun_y = c3_malloc(pac_u->len_w); - - u3r_bytes(0, pac_u->len_w, pac_u->hun_y, pac); - - u3_noun tag, val; - u3x_cell(lan, &tag, &val); - c3_assert( (c3y == tag) || (c3n == tag) ); - - // galaxy lane; do DNS lookup and send packet - // - if ( c3y == tag ) { - c3_assert( c3y == u3a_is_cat(val) ); - c3_assert( val < 256 ); - - pac_u->imp_y = val; - _ames_czar(pac_u); - } - // non-galaxy lane - // - else { - u3_lane lan_u = u3_ames_decode_lane(u3k(val)); - // convert incoming localhost to outgoing localhost - // - lan_u.pip_w = ( 0 == lan_u.pip_w )? 0x7f000001 : lan_u.pip_w; - // if in local-only mode, don't send remote packets - // - if ( (c3n == u3_Host.ops_u.net) && (0x7f000001 != lan_u.pip_w) ) { - _ames_pact_free(pac_u); - } - // if the lane is uninterpretable, silently drop the packet - // - else if ( 0 == lan_u.por_s ) { - if ( u3C.wag_w & u3o_verbose ) { - u3l_log("ames: inscrutable lane\n"); - } - _ames_pact_free(pac_u); - } - // otherwise, mutate destination and send packet - // - else { - pac_u->lan_u = lan_u; - _ames_send(pac_u); - } - } - u3z(lan); u3z(pac); -} - -/* _ames_cap_queue(): cap ovum queue at 1k, dropping oldest packets. -*/ -static void -_ames_cap_queue(u3_ames* sam_u) -{ - u3_ovum* egg_u = sam_u->car_u.ext_u; - - while ( egg_u && (1000 < sam_u->car_u.dep_w) ) { - u3_ovum* nex_u = egg_u->nex_u; - - if ( c3__hear == u3h(egg_u->cad) ) { - u3_auto_drop(&sam_u->car_u, egg_u); - sam_u->sat_u.dop_d++; - - if ( u3C.wag_w & u3o_verbose ) { - u3l_log("ames: packet dropped (%" PRIu64 " total)\n", sam_u->sat_u.dop_d); - } - } - - egg_u = nex_u; - } - - if ( (sam_u->sat_u.dop_d && (0 == (sam_u->sat_u.dop_d % 1000))) - && !(u3C.wag_w & u3o_verbose) ) - { - u3l_log("ames: packet dropped (%" PRIu64 " total)\n", sam_u->sat_u.dop_d); - } -} - -/* _ames_punt_goof(): print %bail error report(s). -*/ -static void -_ames_punt_goof(u3_noun lud) -{ - if ( 2 == u3qb_lent(lud) ) { - u3_pier_punt_goof("hear", u3k(u3h(lud))); - u3_pier_punt_goof("crud", u3k(u3h(u3t(lud)))); - } - else { - u3_noun dul = lud; - c3_w len_w = 1; - - while ( u3_nul != dul ) { - u3l_log("ames: bail %u\r\n", len_w++); - u3_pier_punt_goof("ames", u3k(u3h(dul))); - dul = u3t(dul); - } - } - - u3z(lud); -} - -/* _ames_hear_bail(): handle packet failure. -*/ -static void -_ames_hear_bail(u3_ovum* egg_u, u3_noun lud) -{ - u3_ames* sam_u = (u3_ames*)egg_u->car_u; - sam_u->sat_u.fal_d++; - - if ( (u3C.wag_w & u3o_verbose) - || (0 == (sam_u->sat_u.fal_d % 1000)) ) - { - _ames_punt_goof(lud); - u3l_log("ames: packet failed (%" PRIu64 " total)\n\n", sam_u->sat_u.fal_d); - } - else { - u3z(lud); - - if ( 0 == (sam_u->sat_u.fal_d % 1000) ) { - u3l_log("ames: packet failed (%" PRIu64 " total)\n\n", sam_u->sat_u.fal_d); - } - } - - u3_ovum_free(egg_u); -} - -/* _ames_put_packet(): add packet to queue, drop old packets on pressure -*/ -static void -_ames_put_packet(u3_ames* sam_u, - u3_noun msg, - u3_lane lan_u) -{ - u3_noun wir = u3nc(c3__ames, u3_nul); - u3_noun cad = u3nt(c3__hear, u3nc(c3n, u3_ames_encode_lane(lan_u)), msg); - - u3_auto_peer( - u3_auto_plan(&sam_u->car_u, - u3_ovum_init(0, c3__a, wir, cad)), - 0, 0, _ames_hear_bail); - - _ames_cap_queue(sam_u); -} - -/* _ames_forward(): forward pac_u onto the (list lane) las, then free pac_u -*/ -static void -_ames_forward(u3_panc* pac_u, u3_noun las) -{ - u3_ames* sam_u = pac_u->sam_u; - - sam_u->sat_u.fow_d++; - if ( 0 == (sam_u->sat_u.fow_d % 1000000) ) { - u3l_log("ames: forwarded %" PRIu64 " total\n", sam_u->sat_u.fow_d); - } - - if ( u3C.wag_w & u3o_verbose ) { - u3_noun sen = u3dc("scot", 'p', u3i_chubs(2, pac_u->bod_u.sen_d)); - u3_noun rec = u3dc("scot", 'p', u3i_chubs(2, pac_u->bod_u.rec_d)); - c3_c* sen_c = u3r_string(sen); - c3_c* rec_c = u3r_string(rec); - c3_y* pip_y = (c3_y*)&pac_u->ore_u.pip_w; - - u3l_log("ames: forwarding for %s to %s from %d.%d.%d.%d:%d\n", - sen_c, rec_c, - pip_y[0], pip_y[1], pip_y[2], pip_y[3], - pac_u->ore_u.por_s); - - c3_free(sen_c); c3_free(rec_c); - u3z(sen); u3z(rec); - } - - { - u3_noun pac = _ames_serialize_packet(pac_u, c3y); - u3_noun tag, dat, lan, t = las; - - while ( u3_nul != t ) { - u3x_cell(t, &lan, &t); - - // validate lane and skip self if galaxy - // - if ( c3n == u3r_cell(lan, &tag, &dat) ) { - u3l_log("ames: bogus lane\n"); - u3m_p("lan", lan); - } - else { - c3_o sen_o = c3y; - c3_d who_d[2]; - - if ( c3y == tag ) { - u3r_chubs(0, 2, who_d, dat); - - if ( (who_d[0] == sam_u->pir_u->who_d[0]) - && (who_d[1] == sam_u->pir_u->who_d[1]) ) - { - sen_o = c3n; - if ( u3C.wag_w & u3o_verbose ) { - u3l_log("ames: forward skipping self\n"); - } - } - } - - if ( c3y == sen_o ) { - _ames_ef_send(sam_u, u3k(lan), u3k(pac)); - } - } - } - - u3z(pac); - } - - _ames_panc_free(pac_u); - u3z(las); -} - -/* _ames_lane_scry_cb(): learn lane to forward packet on -*/ -static void -_ames_lane_scry_cb(void* vod_p, u3_noun nun) -{ - u3_panc* pac_u = vod_p; - u3_ames* sam_u = pac_u->sam_u; - u3_weak las = u3r_at(7, nun); - - sam_u->sat_u.foq_d--; - - // if scry fails, remember we can't scry, and just inject the packet - // - if ( u3_none == las ) { - if ( 5 < ++sam_u->sat_u.saw_d ) { - u3l_log("ames: giving up scry\n"); - sam_u->fig_u.see_o = c3n; - } - _ames_put_packet(sam_u, _ames_serialize_packet(pac_u, c3n), pac_u->ore_u); - _ames_panc_free(pac_u); - } - else { - sam_u->sat_u.saw_d = 0; - - // cache the scry result for later use - // - _ames_lane_into_cache(sam_u->lax_p, - u3i_chubs(2, pac_u->bod_u.rec_d), - u3k(las)); - - // if there is no lane, drop the packet - // - if ( u3_nul == las ) { - _ames_panc_free(pac_u); - } - // if there is a lane, forward the packet on it - // - else { - _ames_forward(pac_u, u3k(las)); - } - } - - u3z(nun); -} - -/* _ames_try_forward(): try to forward a packet for another ship. -*/ -static void -_ames_try_forward(u3_ames* sam_u, - u3_lane* lan_u, - u3_head* hed_u, - u3_body* bod_u, - c3_y* hun_y) -{ - u3_weak lac; - - // if the recipient is a galaxy, their lane is always &+~gax - // - if ( (256 > bod_u->rec_d[0]) - && (0 == bod_u->rec_d[1]) ) - { - lac = u3nc(c3y, (c3_y)bod_u->rec_d[0]); - } - // otherwise, try to get the lane from cache - // - else { - lac = _ames_lane_from_cache(sam_u->lax_p, u3i_chubs(2, bod_u->rec_d)); - - // if we don't know the lane, and the scry queue is full, - // just drop the packet - // - //TODO drop oldest item in forward queue in favor of this one. - // ames.c doesn't/shouldn't know about the shape of scry events, - // so can't pluck these out of the event queue like it does in - // _ames_cap_queue. as such, blocked on u3_lord_peek_cancel or w/e. - // - if ( (u3_none == lac) && (1000 < sam_u->sat_u.foq_d) ) { - sam_u->sat_u.fod_d++; - if ( 0 == (sam_u->sat_u.fod_d % 10000) ) { - u3l_log("ames: dropped %" PRIu64 " forwards total\n", - sam_u->sat_u.fod_d); - } - - c3_free(hun_y); - return; - } - // if we know there's no lane, drop the packet - // - else if ( u3_nul == lac ) { - c3_free(hun_y); - return; - } - } - - // proceed with forwarding - // - { - // store the packet details for later processing - // - // XX allocates unnecessarily when we know the lane - // - u3_panc* pac_u = c3_calloc(sizeof(*pac_u)); - pac_u->sam_u = sam_u; - pac_u->hed_u = *hed_u; - pac_u->bod_u = *bod_u; - pac_u->ore_u = *lan_u; - pac_u->ptr_v = hun_y; - - if ( 0 != sam_u->pac_u ) { - pac_u->nex_u = sam_u->pac_u; - sam_u->pac_u->pre_u = pac_u; - } - sam_u->pac_u = pac_u; - - // if we already know the lane, just forward - // - if ( u3_none != lac ) { - _ames_forward(pac_u, lac); - } - // otherwise, there's space in the scry queue; scry the lane out of ames - // - else { - sam_u->sat_u.foq_d++; - u3_noun pax = u3nq(u3i_string("peers"), - u3dc("scot", 'p', u3i_chubs(2, bod_u->rec_d)), - u3i_string("forward-lane"), - u3_nul); - u3_pier_peek_last(sam_u->pir_u, u3_nul, c3__ax, - u3_nul, pax, pac_u, _ames_lane_scry_cb); - } - } -} - -#undef AMES_SKIP -#ifdef AMES_SKIP -/* _ames_skip(): decide whether to skip this packet, for rescue -*/ -static c3_o -_ames_skip(u3_body* bod_u) { - if ( bod_u->sen_d[1] == 0 && - ( bod_u->sen_d[0] == 0x743a17a6 - || bod_u->sen_d[0] == 0xea99acb6 - || bod_u->sen_d[0] == 0x10100 - ) ) { - return c3n; - } - else { - return c3y; - } -} -#endif - -/* _ames_hear(): parse a (potential) packet, dispatch appropriately. -*/ -static void -_ames_hear(u3_ames* sam_u, - u3_lane* lan_u, - c3_w len_w, - c3_y* hun_y) -{ - u3_head hed_u; - u3_body bod_u; - - // XX packet filtering needs to revised for two protocol-change scenarios - // - // - packets using old protocol versions from our sponsees - // these must be let through, and this is a transitive condition; - // they must also be forwarded where appropriate - // they can be validated, as we know their semantics - // - // - packets using newer protocol versions - // these should probably be let through, or at least - // trigger printfs suggesting upgrade. - // they cannot be filtered, as we do not know their semantics - // - - // unpack header, ensuring buffer is large enough - // - if ( (4 > len_w) - || (c3n == _ames_sift_head(&hed_u, hun_y)) ) - { - sam_u->sat_u.hed_d++; - if ( 0 == (sam_u->sat_u.hed_d % 100000) ) { - u3l_log("ames: %" PRIu64 " dropped, failed to read header\n", - sam_u->sat_u.hed_d); - } - - c3_free(hun_y); - return; - } - - // ensure the protocol version matches ours - // - // XX rethink use of [fit_o] here and elsewhere - // - if ( (c3y == sam_u->fig_u.fit_o) - && (sam_u->ver_y != hed_u.ver_y) ) - { - sam_u->sat_u.vet_d++; - if ( 0 == (sam_u->sat_u.vet_d % 100000) ) { - u3l_log("ames: %" PRIu64 " dropped for version mismatch\n", - sam_u->sat_u.vet_d); - } - - c3_free(hun_y); - return; - } - - { - c3_w bod_w = len_w - 4; - c3_y* bod_y = hun_y + 4; - - // unpack and validate the body - // - if ( (c3n == _ames_sift_body(&hed_u, &bod_u, bod_w, bod_y)) ) { - sam_u->sat_u.bod_d++; - if ( 0 == (sam_u->sat_u.bod_d % 100) ) { - u3l_log("ames: %" PRIu64 " dropped, failed to read body\n", - sam_u->sat_u.bod_d); - } - - c3_free(hun_y); - return; - } - - // ensure the mug is valid - // - if ( bod_u.mug_l != hed_u.mug_l ) { - sam_u->sat_u.mut_d++; - if ( 0 == (sam_u->sat_u.mut_d % 100000) ) { - u3l_log("ames: %" PRIu64 " dropped for invalid mug\n", - sam_u->sat_u.mut_d); - } - - c3_free(hun_y); - return; - } - } - - // if we can scry, - // and we are not the recipient, - // we might want to forward statelessly - // - if ( (c3y == sam_u->fig_u.see_o) - && ( (bod_u.rec_d[0] != sam_u->pir_u->who_d[0]) - || (bod_u.rec_d[1] != sam_u->pir_u->who_d[1]) ) ) - { - _ames_try_forward(sam_u, lan_u, &hed_u, &bod_u, hun_y); - } - // otherwise, inject the packet as an event - // - else { - u3_noun msg = u3i_bytes(len_w, hun_y); - c3_free(hun_y); -#ifdef AMES_SKIP - if (_ames_skip(&bod_u) == c3y ) { - u3z(msg); - } - else { -#endif - _ames_put_packet(sam_u, msg, *lan_u); -#ifdef AMES_SKIP - } -#endif - } -} - -/* _ames_recv_cb(): udp message receive callback. -*/ -static void -_ames_recv_cb(uv_udp_t* wax_u, - ssize_t nrd_i, - const uv_buf_t * buf_u, - const struct sockaddr* adr_u, - unsigned flg_i) -{ - if ( 0 > nrd_i ) { - if ( u3C.wag_w & u3o_verbose ) { - u3l_log("ames: recv: fail: %s\n", uv_strerror(nrd_i)); - } - c3_free(buf_u->base); - } - else if ( 0 == nrd_i ) { - c3_free(buf_u->base); - } - else if ( flg_i & UV_UDP_PARTIAL ) { - if ( u3C.wag_w & u3o_verbose ) { - u3l_log("ames: recv: fail: message truncated\n"); - } - c3_free(buf_u->base); - } - else { - u3_ames* sam_u = wax_u->data; - struct sockaddr_in* add_u = (struct sockaddr_in*)adr_u; - u3_lane lan_u; - - lan_u.por_s = ntohs(add_u->sin_port); - lan_u.pip_w = ntohl(add_u->sin_addr.s_addr); - - // NB: [nrd_i] will never exceed max length from _ames_alloc() - // - _ames_hear(sam_u, &lan_u, (c3_w)nrd_i, (c3_y*)buf_u->base); - } -} - -/* _ames_io_start(): initialize ames I/O. -*/ -static void -_ames_io_start(u3_ames* sam_u) -{ - c3_s por_s = sam_u->pir_u->por_s; - u3_noun who = u3i_chubs(2, sam_u->pir_u->who_d); - u3_noun rac = u3do("clan:title", u3k(who)); - c3_i ret_i; - - if ( c3__czar == rac ) { - c3_y num_y = (c3_y)sam_u->pir_u->who_d[0]; - c3_s zar_s = _ames_czar_port(num_y); - - if ( 0 == por_s ) { - por_s = zar_s; - } - else if ( por_s != zar_s ) { - u3l_log("ames: czar: overriding port %d with -p %d\n", zar_s, por_s); - u3l_log("ames: czar: WARNING: %d required for discoverability\n", zar_s); - } - } - - // Bind and stuff. - { - struct sockaddr_in add_u; - c3_i add_i = sizeof(add_u); - - memset(&add_u, 0, sizeof(add_u)); - add_u.sin_family = AF_INET; - add_u.sin_addr.s_addr = _(u3_Host.ops_u.net) ? - htonl(INADDR_ANY) : - htonl(INADDR_LOOPBACK); - add_u.sin_port = htons(por_s); - - if ( (ret_i = uv_udp_bind(&sam_u->wax_u, - (const struct sockaddr*)&add_u, 0)) != 0 ) - { - u3l_log("ames: bind: %s\n", uv_strerror(ret_i)); - - if ( (c3__czar == rac) && - (UV_EADDRINUSE == ret_i) ) - { - u3l_log(" ...perhaps you've got two copies of vere running?\n"); - } - - // XX revise - // - u3_pier_bail(u3_king_stub()); - } - - uv_udp_getsockname(&sam_u->wax_u, (struct sockaddr *)&add_u, &add_i); - c3_assert(add_u.sin_port); - - sam_u->pir_u->por_s = ntohs(add_u.sin_port); - } - - if ( c3y == u3_Host.ops_u.net ) { - u3l_log("ames: live on %d\n", sam_u->pir_u->por_s); - } - else { - u3l_log("ames: live on %d (localhost only)\n", sam_u->pir_u->por_s); - } - - uv_udp_recv_start(&sam_u->wax_u, _ames_alloc, _ames_recv_cb); - - sam_u->car_u.liv_o = c3y; - u3z(rac); - u3z(who); -} - -/* _ames_ef_turf(): initialize ames I/O on domain(s). -*/ -static void -_ames_ef_turf(u3_ames* sam_u, u3_noun tuf) -{ - if ( u3_nul != tuf ) { - // XX save all for fallback, not just first - // - u3_noun hot = u3k(u3h(tuf)); - c3_w len_w = u3_mcut_host(0, 0, u3k(hot)); - - sam_u->dns_c = c3_malloc(1 + len_w); - u3_mcut_host(sam_u->dns_c, 0, hot); - sam_u->dns_c[len_w] = 0; - - // XX invalidate sam_u->imp_w &c ? - // - - u3z(tuf); - } - else if ( (c3n == sam_u->pir_u->fak_o) && (0 == sam_u->dns_c) ) { - u3l_log("ames: turf: no domains\n"); - } - - // XX is this ever necessary? - // - if ( c3n == sam_u->car_u.liv_o ) { - _ames_io_start(sam_u); - } -} - -/* _ames_prot_scry_cb(): receive protocol version -*/ -static void -_ames_prot_scry_cb(void* vod_p, u3_noun nun) -{ - u3_ames* sam_u = vod_p; - u3_weak ver = u3r_at(7, nun); - - if ( u3_none == ver ) { - // assume protocol version 0 - // - sam_u->ver_y = 0; - } - else if ( (c3n == u3a_is_cat(ver)) - || (7 < ver) ) { - u3m_p("ames: strange protocol", nun); - sam_u->ver_y = 0; - } - else { - sam_u->ver_y = ver; - } - - // XX revise: filtering should probably be disabled if - // we get a protocol version above the latest one we know - // - sam_u->fig_u.fit_o = c3y; - u3z(nun); -} - -/* _ames_io_talk(): start receiving ames traffic. -*/ -static void -_ames_io_talk(u3_auto* car_u) -{ - u3_ames* sam_u = (u3_ames*)car_u; - _ames_io_start(sam_u); - - // send born event - // - { - // XX remove [sev_l] - // - u3_noun wir = u3nt(c3__newt, - u3dc("scot", c3__uv, sam_u->sev_l), - u3_nul); - u3_noun cad = u3nc(c3__born, u3_nul); - - u3_auto_plan(car_u, u3_ovum_init(0, c3__a, wir, cad)); - } - - // scry the protocol version out of arvo - // - // XX this should be re-triggered periodically, - // or, better yet, %ames should emit a %turf - // (or some other reconfig) effect when it is reset. - // - u3_pier_peek_last(car_u->pir_u, u3_nul, c3__ax, u3_nul, - u3nt(u3i_string("protocol"), u3i_string("version"), u3_nul), - sam_u, _ames_prot_scry_cb); -} - -/* _ames_kick_newt(): apply packet network outputs. -*/ -static c3_o -_ames_kick_newt(u3_ames* sam_u, u3_noun tag, u3_noun dat) -{ - c3_o ret_o; - - switch ( tag ) { - default: { - ret_o = c3n; - } break; - - case c3__send: { - u3_noun lan = u3k(u3h(dat)); - u3_noun pac = u3k(u3t(dat)); - _ames_ef_send(sam_u, lan, pac); - ret_o = c3y; - } break; - - case c3__turf: { - _ames_ef_turf(sam_u, u3k(dat)); - ret_o = c3y; - } break; - } - - u3z(tag); u3z(dat); - return ret_o; -} - -/* _ames_io_kick(): apply effects -*/ -static c3_o -_ames_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_ames* sam_u = (u3_ames*)car_u; - - u3_noun tag, dat, i_wir; - c3_o ret_o; - - if ( (c3n == u3r_cell(wir, &i_wir, 0)) - || (c3n == u3r_cell(cad, &tag, &dat)) ) - { - ret_o = c3n; - } - else { - switch ( i_wir ) { - default: { - ret_o = c3n; - } break; - - // XX should also be c3__ames - // - case c3__newt: { - ret_o = _ames_kick_newt(sam_u, u3k(tag), u3k(dat)); - } break; - - // XX obsolete - // - // used to also handle %west and %woot for tcp proxy setup - // - case c3__ames: { - ret_o = _( c3__init == tag); - } break; - - // this can return through dill due to our fscked up boot sequence - // - // XX s/b obsolete, verify - // - case c3__term: { - if ( c3__send != tag ) { - ret_o = c3n; - } - else { - u3l_log("kick: strange send\r\n"); - ret_o = _ames_kick_newt(sam_u, u3k(tag), u3k(dat)); - } - } break; - } - } - - u3z(wir); u3z(cad); - return ret_o; -} - -/* _ames_exit_cb(): dispose resources aftr close. -*/ -static void -_ames_exit_cb(uv_handle_t* had_u) -{ - u3_ames* sam_u = had_u->data; - - u3_panc* pac_u = sam_u->pac_u; - while (0 != pac_u) { - u3_panc* nex_u = pac_u->nex_u; - _ames_panc_free(pac_u); - pac_u = nex_u; - } - - u3h_free(sam_u->lax_p); - - u3s_cue_xeno_done(sam_u->sil_u); - ur_cue_test_done(sam_u->tes_u); - - c3_free(sam_u); -} - -/* _ames_io_exit(): terminate ames I/O. -*/ -static void -_ames_io_exit(u3_auto* car_u) -{ - u3_ames* sam_u = (u3_ames*)car_u; - uv_close(&sam_u->had_u, _ames_exit_cb); -} - -/* _ames_io_info(): produce status info. -*/ -static u3_noun -_ames_io_info(u3_auto* car_u) -{ - u3_ames* sam_u = (u3_ames*)car_u; - - return u3i_list( - u3_pier_mase("filtering", sam_u->fig_u.fit_o), - u3_pier_mase("can-send", sam_u->fig_u.net_o), - u3_pier_mase("can-scry", sam_u->fig_u.see_o), - u3_pier_mase("dropped", u3i_chub(sam_u->sat_u.dop_d)), - u3_pier_mase("forwards-dropped", u3i_chub(sam_u->sat_u.fod_d)), - u3_pier_mase("forwards-pending", u3i_chub(sam_u->sat_u.foq_d)), - u3_pier_mase("forwarded", u3i_chub(sam_u->sat_u.fow_d)), - u3_pier_mase("filtered-hed", u3i_chub(sam_u->sat_u.hed_d)), - u3_pier_mase("filtered-ver", u3i_chub(sam_u->sat_u.vet_d)), - u3_pier_mase("filtered-mug", u3i_chub(sam_u->sat_u.mut_d)), - u3_pier_mase("filtered-bod", u3i_chub(sam_u->sat_u.bod_d)), - u3_pier_mase("crashed", u3i_chub(sam_u->sat_u.fal_d)), - u3_pier_mase("cached-lanes", u3i_word(u3h_wyt(sam_u->lax_p))), - u3_none); -} - -/* _ames_io_slog(): print status info. -*/ -static void -_ames_io_slog(u3_auto* car_u) -{ - u3_ames* sam_u = (u3_ames*)car_u; - -# define FLAG(a) ( (c3y == a) ? "&" : "|" ) - - // TODO rewrite in terms of info_f - // - u3l_log(" config:\n"); - u3l_log(" filtering: %s\n", FLAG(sam_u->fig_u.fit_o)); - u3l_log(" can send: %s\n", FLAG(sam_u->fig_u.net_o)); - u3l_log(" can scry: %s\n", FLAG(sam_u->fig_u.see_o)); - u3l_log(" counters:\n"); - u3l_log(" dropped: %" PRIu64 "\n", sam_u->sat_u.dop_d); - u3l_log(" forwards dropped: %" PRIu64 "\n", sam_u->sat_u.fod_d); - u3l_log(" forwards pending: %" PRIu64 "\n", sam_u->sat_u.foq_d); - u3l_log(" forwarded: %" PRIu64 "\n", sam_u->sat_u.fow_d); - u3l_log(" filtered (hed): %" PRIu64 "\n", sam_u->sat_u.hed_d); - u3l_log(" filtered (ver): %" PRIu64 "\n", sam_u->sat_u.vet_d); - u3l_log(" filtered (mug): %" PRIu64 "\n", sam_u->sat_u.mut_d); - u3l_log(" filtered (bod): %" PRIu64 "\n", sam_u->sat_u.bod_d); - u3l_log(" crashed: %" PRIu64 "\n", sam_u->sat_u.fal_d); - u3l_log(" cached lanes: %u\n", u3h_wyt(sam_u->lax_p)); -} - -/* u3_ames_io_init(): initialize ames I/O. -*/ -u3_auto* -u3_ames_io_init(u3_pier* pir_u) -{ - u3_ames* sam_u = c3_calloc(sizeof(*sam_u)); - sam_u->pir_u = pir_u; - sam_u->fig_u.net_o = c3y; - sam_u->fig_u.see_o = c3y; - sam_u->fig_u.fit_o = c3n; - - //NOTE some numbers on memory usage for the lane cache - // - // assuming we store: - // a (list lane) with 1 item, 1+8 + 1 + (6*2) = 22 words - // and a @da as timestamp, 8 words - // consed together, 6 words - // with worst-case (128-bit) @p keys, 8 words - // and an additional cell for the k-v pair, 6 words - // that makes for a per-entry memory use of 50 words => 200 bytes - // - // the 500k entries below would take about 100mb (in the worst case, but - // not accounting for hashtable overhead). - // we could afford more, but 500k entries is more than we'll likely use - // in the near future. - // - sam_u->lax_p = u3h_new_cache(500000); - - c3_assert( !uv_udp_init(u3L, &sam_u->wax_u) ); - sam_u->wax_u.data = sam_u; - - sam_u->sil_u = u3s_cue_xeno_init(); - sam_u->tes_u = ur_cue_test_init(); - - // Disable networking for fake ships - // - if ( c3y == sam_u->pir_u->fak_o ) { - u3_Host.ops_u.net = c3n; - } - - u3_auto* car_u = &sam_u->car_u; - car_u->nam_m = c3__ames; - car_u->liv_o = c3n; - car_u->io.talk_f = _ames_io_talk; - car_u->io.info_f = _ames_io_info; - car_u->io.slog_f = _ames_io_slog; - car_u->io.kick_f = _ames_io_kick; - car_u->io.exit_f = _ames_io_exit; - - { - u3_noun now; - struct timeval tim_u; - gettimeofday(&tim_u, 0); - - now = u3_time_in_tv(&tim_u); - sam_u->sev_l = u3r_mug(now); - u3z(now); - } - - return car_u; -} diff --git a/pkg/urbit/vere/io/behn.c b/pkg/urbit/vere/io/behn.c deleted file mode 100644 index 45a434773..000000000 --- a/pkg/urbit/vere/io/behn.c +++ /dev/null @@ -1,254 +0,0 @@ -/* vere/behn.c -** -*/ -#include "all.h" -#include "vere/vere.h" - -/* u3_behn: just a timer for ever -*/ - typedef struct _u3_behn { - u3_auto car_u; // driver - uv_timer_t tim_u; // behn timer - c3_o alm_o; // alarm - c3_l sev_l; // instance numbers - } u3_behn; - -// XX review, move -// -/* _behn_bail_dire(): c3y if fatal error. RETAIN -*/ -static c3_o -_behn_bail_dire(u3_noun lud) -{ - u3_noun mot = u3r_at(4, lud); - - if ( (c3__meme == mot) - || (c3__intr == mot) ) - { - return c3n; - } - - return c3y; -} - -/* _behn_wake_bail(): %wake is essential, retry failures. -*/ -static void -_behn_wake_bail(u3_ovum* egg_u, u3_noun lud) -{ - u3_auto* car_u = egg_u->car_u; - - if ( (2 > egg_u->try_w) - && (c3n == _behn_bail_dire(lud)) ) - { - u3z(lud); - u3_auto_redo(car_u, egg_u); - } - else { - u3_auto_bail_slog(egg_u, lud); - u3_ovum_free(egg_u); - - u3l_log("behn: timer failed; queue blocked\n"); - - // XX review, add flag to continue? - // - u3_pier_bail(car_u->pir_u); - } -} - -/* _behn_time_cb(): timer callback. -*/ -static void -_behn_time_cb(uv_timer_t* tim_u) -{ - u3_behn* teh_u = tim_u->data; - teh_u->alm_o = c3n; - - // start another timer for 10 minutes - // - // This is a backstop to deal with the case where a %doze is not - // properly sent, for example after a crash. If the timer continues - // to fail, we can't proceed with the timers, but if it was a - // transient error, this will get us past it. - // - { - c3_d gap_d = 10 * 60 * 1000; - teh_u->alm_o = c3y; - uv_timer_start(&teh_u->tim_u, _behn_time_cb, gap_d, 0); - } - - // send timer event - // - { - u3_noun wir = u3nc(c3__behn, u3_nul); - u3_noun cad = u3nc(c3__wake, u3_nul); - - u3_auto_peer( - u3_auto_plan(&teh_u->car_u, u3_ovum_init(0, c3__b, wir, cad)), - 0, 0, _behn_wake_bail); - } -} - -/* u3_behn_ef_doze(): set or cancel timer -*/ -static void -_behn_ef_doze(u3_behn* teh_u, u3_noun wen) -{ - if ( c3n == teh_u->car_u.liv_o ) { - teh_u->car_u.liv_o = c3y; - } - - if ( c3y == teh_u->alm_o ) { - uv_timer_stop(&teh_u->tim_u); - teh_u->alm_o = c3n; - } - - if ( (u3_nul != wen) && - (c3y == u3du(wen)) && - (c3y == u3ud(u3t(wen))) ) - { - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - - u3_noun now = u3_time_in_tv(&tim_tv); - c3_d gap_d = u3_time_gap_ms(now, u3k(u3t(wen))); - - teh_u->alm_o = c3y; - uv_timer_start(&teh_u->tim_u, _behn_time_cb, gap_d, 0); - } - - u3z(wen); -} - -/* _behn_born_news(): initialization complete on %born. -*/ -static void -_behn_born_news(u3_ovum* egg_u, u3_ovum_news new_e) -{ - u3_auto* car_u = egg_u->car_u; - - if ( u3_ovum_done == new_e ) { - car_u->liv_o = c3y; - } -} - -/* _behn_born_bail(): %born is essential, retry failures. -*/ -static void -_behn_born_bail(u3_ovum* egg_u, u3_noun lud) -{ - u3_auto* car_u = egg_u->car_u; - - if ( (2 > egg_u->try_w) - && (c3n == _behn_bail_dire(lud)) ) - { - u3z(lud); - u3_auto_redo(car_u, egg_u); - } - else { - u3_auto_bail_slog(egg_u, lud); - u3_ovum_free(egg_u); - - u3l_log("behn: initialization failed\n"); - - // XX review, add flag to continue? - // - u3_pier_bail(car_u->pir_u); - } -} -/* _behn_io_talk(): notify %behn that we're live -*/ -static void -_behn_io_talk(u3_auto* car_u) -{ - u3_behn* teh_u = (u3_behn*)car_u; - - // XX remove [sev_l] - // - u3_noun wir = u3nt(c3__behn, - u3dc("scot", c3__uv, teh_u->sev_l), - u3_nul); - u3_noun cad = u3nc(c3__born, u3_nul); - - u3_auto_peer( - u3_auto_plan(car_u, u3_ovum_init(0, c3__b, wir, cad)), - 0, - _behn_born_news, - _behn_born_bail); -} - -/* _behn_io_kick(): apply effects. -*/ -static c3_o -_behn_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_behn* teh_u = (u3_behn*)car_u; - - u3_noun tag, dat, i_wir; - c3_o ret_o; - - if ( (c3n == u3r_cell(wir, &i_wir, 0)) - || (c3n == u3r_cell(cad, &tag, &dat)) - || (c3__behn != i_wir) - || (c3__doze != tag) ) - { - ret_o = c3n; - } - else { - ret_o = c3y; - _behn_ef_doze(teh_u, u3k(dat)); - } - - u3z(wir); u3z(cad); - return ret_o; -} - -/* _behn_exit_cb(); -*/ -static void -_behn_exit_cb(uv_timer_t* tim_u) -{ - u3_behn* teh_u = tim_u->data; - c3_free(teh_u); -} - -/* _behn_io_exit(): terminate timer. -*/ -static void -_behn_io_exit(u3_auto* car_u) -{ - u3_behn* teh_u = (u3_behn*)car_u; - uv_close((uv_handle_t*)&teh_u->tim_u, (uv_close_cb)_behn_exit_cb); -} - -/* u3_behn(): initialize time timer. -*/ -u3_auto* -u3_behn_io_init(u3_pier* pir_u) -{ - u3_behn* teh_u = c3_calloc(sizeof(*teh_u)); - teh_u->alm_o = c3n; - - uv_timer_init(u3L, &teh_u->tim_u); - teh_u->tim_u.data = teh_u; - - u3_auto* car_u = &teh_u->car_u; - car_u->nam_m = c3__behn; - - car_u->liv_o = c3n; - car_u->io.talk_f = _behn_io_talk; - car_u->io.kick_f = _behn_io_kick; - car_u->io.exit_f = _behn_io_exit; - - { - u3_noun now; - struct timeval tim_u; - gettimeofday(&tim_u, 0); - - now = u3_time_in_tv(&tim_u); - teh_u->sev_l = u3r_mug(now); - u3z(now); - } - - return car_u; -} diff --git a/pkg/urbit/vere/io/conn.c b/pkg/urbit/vere/io/conn.c deleted file mode 100644 index ab717dd1e..000000000 --- a/pkg/urbit/vere/io/conn.c +++ /dev/null @@ -1,920 +0,0 @@ -/* vere/conn.c -** -** implements the control plane: a socket that can be used to -** query and interact with an urbit ship from earth. -** -** the control plane nominally consumes input described by: -** -** $: request-id=@ :: id for response -** $% [%fyrd fyrd-args=*] :: run a thread -** [%peek peek-args=*] :: scry -** [%peel peel-args=*] :: runtime peek -** [%ovum ovum-args=*] :: inject raw ovum -** [%urth urth-args=*] :: runtime command -** == == :: -** -** request-id is a client-supplied atomic identifier that will -** be returned along with the response, to allow correlating -** responses with requests. -** -** responses are [request-id=@ data=*]. if the driver encounters -** an error, then it will try to send a %bail response with -** request-id set to 0, i.e.: -** -** [0 %bail error-code=@ error-string=@t] -** -** and subsequently close the connection. -** -** %fyrd is a request to run a thread. its arguments are -** described in the ++khan section of sys/lull.hoon. to -** summarize: -** -** +$ task $%(... [%fyrd p=(fyrd cast)]) :: -** +$ bear $@(desk beak) :: partial $beak -** +$ cast (pair mark page) :: output mark +input -** ++ fyrd |$ [a] [=bear name=term args=a] :: thread run request -** -** the cast's mark is applied to the output. the page (untyped -** cage, or pair of mark and noun) in args contains the input -** mark. e.g. to run -hi with the ship ~zod as input, receiving -** output as a tape, with request-id set to 32, send the +jam of -** this noun over the socket with newt framing: -** -** [32 %fyrd [%base %hi %tape [%ship ~zod]]] -** -** responses to %fyrd are: -** -** +$ gift $%(... [%avow p=(avow page)]) :: -** ++ avow |$ [a] (each a goof) :: -** -** %peek is a namespace read request (aka scry), and will be -** forwarded directly to arvo. its arguments are the nom of the -** external peek interface in arvo, at arm 22. (lyc is always -** `~, i.e. request from self.) that is: -** -** $+ each path -** $% [%once vis=view syd=desk tyl=spur] -** [%beam vis=view bem=beam] -** == -** -** %peel is a runtime "peek". it exposes an unprincipled -** scry-like namespace allowing querying of various metrics -** about the state of vere. it accepts $path-like arguments, -** i.e. nul-terminated lists of $knot. it responds with a -** (unit). -** -** the %peel path /help produces a list of available commands. -** /info produces runtime metrics at the moment in time that the -** request was received. the type produced by /info is $mass: -** -** +$ mass (pair cord (each * (list mass))) -** -** where the leaves are conventionally @ud, but the -** precise interpretation depends on the metric (e.g. -** loobean settings or integer counters.) it is acceptable -** to flatten the list by prepending the parent cord -** to each child element with a separator, e.g.: -** [%pier %| [%ames %| [%packets-sent %& 37] ~] ~] could be -** rendered as 'pier-ames-packets-sent'. this transformation is -** guaranteed to result in unique names. -** -** %ovum is a raw kernel move, to be injected directly into -** arvo. needless to say this will void your warranty. usually -** you want to use %fyrd instead. an update will be sent: %done -** on successful completion, %bail with a stack trace on error, -** or %drop if the ovum is dropped. -** -** %urth is a command for the runtime. these are acked with %.y -** on receipt. no further updates are provided. -** -** messages use newt framing. because the framing begins with -** a tag byte, any messages that do not contain that byte are -** reserved for future use. -** -*/ -#include -#include -#include -#include -#include -#include - -#include "all.h" -#include "vere/vere.h" - -/* u3_cran: control plane request. -*/ - typedef struct _u3_cran { - u3_atom rid; // client-supplied request id - struct _u3_chan* can_u; // connection backpointer - struct _u3_cran* nex_u; // next pointer - } u3_cran; - -/* u3_chan: incoming control plane connection. -*/ - typedef struct _u3_chan { - struct _u3_moor mor_u; // message handler - c3_l coq_l; // connection number - c3_o liv_o; // connection live - struct _u3_shan* san_u; // server backpointer - struct _u3_cran* ran_u; // request list - } u3_chan; - -/* u3_shan: control plane server. -*/ - typedef struct _u3_shan { - uv_pipe_t pyp_u; // server stream handler - c3_l nex_l; // next connection number - struct _u3_conn* con_u; // device backpointer - struct _u3_chan* can_u; // connection list - } u3_shan; - -/* u3_conn: control plane device. -*/ - typedef struct _u3_conn { - u3_auto car_u; // driver - c3_l sev_l; // instance number - struct _u3_shan* san_u; // server reference - u3_cue_xeno* sil_u; // cue handle - c3_o kan_o; // %khan present? - } u3_conn; - -static const c3_c URB_SOCK_PATH[] = ".urb/conn.sock"; - -/* _conn_close_cb(): socket close callback. -*/ -static void -_conn_close_cb(uv_handle_t* had_u) -{ - c3_free(had_u); -} - -/* _conn_mote_free(): u3_moat-shaped close callback. -*/ -static void -_conn_moat_free(void* ptr_v, ssize_t err_i, const c3_c* err_c) -{ - c3_free(ptr_v); -} - -/* _conn_send_noun(): jam and send noun over chan. -*/ -static void -_conn_send_noun(u3_chan* can_u, u3_noun nun) -{ - c3_y* byt_y; - c3_d len_d; - - u3s_jam_xeno(nun, &len_d, &byt_y); - u3z(nun); - u3_newt_send((u3_mojo*)&can_u->mor_u, len_d, byt_y); -} - -/* _conn_find_chan(): lookup channel by connection number. -*/ -static u3_chan* -_conn_find_chan(u3_conn* con_u, c3_l sev_l, c3_l coq_l) -{ - u3_chan* ret_u; - - for ( ret_u = con_u->san_u->can_u; - ret_u; - ret_u = (u3_chan*)ret_u->mor_u.nex_u ) { - if ( coq_l == ret_u->coq_l ) { - return ret_u; - } - } - return 0; -} - -/* _conn_read_wire(): check tag, decompose wire into /sev/coq/rid -*/ -static c3_o -_conn_read_wire(u3_noun wir, - c3_l tag_l, - c3_l* sev_l, - c3_l* coq_l, - u3_atom* rid) -{ - u3_noun i_wir, t_wir; - - if ( (c3n == u3r_cell(wir, &i_wir, &t_wir)) || - (tag_l != i_wir) ) - { - u3z(wir); return c3n; - } - else { - u3_noun pud = t_wir; - u3_noun p_pud, t_pud, tt_pud, q_pud, r_pud, s_pud, - uco, p_uco, q_uco; - - if ( (c3n == u3r_cell(pud, &p_pud, &t_pud)) || - (c3n == u3v_lily(c3__uv, u3k(p_pud), sev_l)) ) - { - u3z(wir); return c3n; - } - if ( u3_nul == t_pud ) { - *coq_l = 0; *rid = 0; - } - else { - if ( (c3n == u3r_cell(t_pud, &q_pud, &tt_pud)) || - (c3n == u3v_lily(c3__ud, u3k(q_pud), coq_l)) ) - { - u3z(wir); return c3n; - } - if ( u3_nul == tt_pud ) { - *rid = 0; - } - else { - if ( (c3n == u3r_cell(tt_pud, &r_pud, &s_pud)) || - (u3_nul != s_pud) || - (c3n == u3ud(r_pud)) ) - { - u3z(wir); return c3n; - } - uco = u3dc("slaw", c3__uv, u3k(r_pud)); - if ( (c3n == u3r_cell(uco, &p_uco, &q_uco)) || - (u3_nul != p_uco) ) - { - u3z(uco); u3z(wir); return c3n; - } - *rid = u3k(q_uco); - u3z(uco); - } - } - u3z(wir); return c3y; - } -} - -/* _conn_poke_bail(): error function on failed %fyrd. -*/ -static void -_conn_poke_bail(u3_ovum* egg_u, u3_noun lud) -{ - u3_conn* con_u = (u3_conn*)egg_u->car_u; - u3_chan* can_u; - u3_noun wir = egg_u->wir; - c3_l sev_l, coq_l; - u3_atom rid; - - u3_auto_bail_slog(egg_u, u3k(lud)); - if ( (c3n == _conn_read_wire(u3k(wir), c3__khan, &sev_l, &coq_l, &rid)) || - (con_u->sev_l != sev_l) ) - { - // wtf? - // - c3_assert(!"not reached"); - u3z(lud); return; - } - can_u = _conn_find_chan(con_u, sev_l, coq_l); - if ( can_u ) { - _conn_send_noun(can_u, u3nt(rid, c3__bail, lud)); - } - else { - u3z(rid); u3z(lud); - } - u3_ovum_free(egg_u); -} - -/* _conn_close_chan(): close given channel, freeing. -*/ -static void -_conn_close_chan(u3_shan* san_u, u3_chan* can_u) -{ - u3_conn* con_u = san_u->con_u; - u3_chan* inn_u; - u3_cran* ran_u; - - // unset chan on all pending requests. - // - for ( ran_u = can_u->ran_u; ran_u; ran_u = ran_u->nex_u ) { - ran_u->can_u = 0; - } - - // remove chan from server's connection list. - // - if ( san_u->can_u == can_u ) { - san_u->can_u = (u3_chan*)can_u->mor_u.nex_u; - } - else { - for ( inn_u = san_u->can_u; inn_u; inn_u = (u3_chan*)inn_u->mor_u.nex_u ) { - if ( (u3_chan*)inn_u->mor_u.nex_u == can_u ) { - inn_u->mor_u.nex_u = can_u->mor_u.nex_u; - break; - } - } - } - can_u->mor_u.nex_u = NULL; - - // send a close event to arvo and stop reading. - // - if ( _(con_u->kan_o) ) { - u3_noun wir, cad; - - wir = u3nq(c3__khan, - u3dc("scot", c3__uv, con_u->sev_l), - u3dc("scot", c3__ud, can_u->coq_l), - u3_nul); - cad = u3nc(c3__done, u3_nul); - u3_auto_peer( - u3_auto_plan(&con_u->car_u, - u3_ovum_init(0, c3__k, wir, cad)), - 0, 0, _conn_poke_bail); - } - u3_newt_moat_stop((u3_moat*)&can_u->mor_u, _conn_moat_free); -} - -/* _conn_moor_bail(): error callback for u3_moor. -*/ -static void -_conn_moor_bail(void* ptr_v, ssize_t err_i, const c3_c* err_c) -{ - u3_chan* can_u = (u3_chan*)ptr_v; - u3_shan* san_u = can_u->san_u; - - if ( err_i != UV_EOF ) { - u3l_log("conn: moor bail %zd %s\n", err_i, err_c); - if ( _(can_u->liv_o) ) { - _conn_send_noun(can_u, u3nq(0, c3__bail, u3i_word(err_i), - u3i_string(err_c))); - can_u->liv_o = c3n; - } - } - _conn_close_chan(san_u, can_u); -} - -/* _conn_drop_cran(): finalize/remove request from chan (does not u3z rid.) -*/ -static void -_conn_drop_cran(u3_chan* can_u, u3_cran* ran_u) -{ - u3_cran* inn_u; - - // remove from pending list, special-case for head. - // - if ( ran_u == can_u->ran_u ) { - can_u->ran_u = ran_u->nex_u; - } - else { - for ( inn_u = can_u->ran_u; inn_u; inn_u = inn_u->nex_u ) { - if ( ran_u == inn_u->nex_u ) { - inn_u->nex_u = ran_u->nex_u; - break; - } - } - } - c3_free(ran_u); -} - -/* _conn_peek_cb(): scry result handler. -*/ -static void -_conn_peek_cb(void* ptr_v, u3_noun res) -{ - u3_cran* ran_u = (u3_cran*)ptr_v; - u3_chan* can_u = ran_u->can_u; - - if ( !can_u ) { - // chan was closed; noop. - // - u3z(ran_u->rid); c3_free(ran_u); - u3z(res); return; - } - _conn_send_noun(can_u, u3nt(ran_u->rid, c3__peek, res)); - _conn_drop_cran(can_u, ran_u); -} - -/* _conn_ovum_bail(): bail callback on injected event. -*/ -static void -_conn_ovum_bail(u3_ovum* egg_u, u3_noun lud) -{ - u3_cran* ran_u = egg_u->ptr_v; - u3_chan* can_u = ran_u->can_u; - - u3_auto_bail_slog(egg_u, u3k(lud)); - if ( !can_u ) { - // chan was closed; noop. - // - u3z(ran_u->rid); c3_free(ran_u); - u3z(lud); return; - } - _conn_send_noun(can_u, u3nt(ran_u->rid, c3__bail, lud)); - _conn_drop_cran(can_u, ran_u); - u3_ovum_free(egg_u); -} - -/* _conn_ovum_news(): lifecycle callback for injected events. -*/ -static void -_conn_ovum_news(u3_ovum* egg_u, u3_ovum_news new_e) -{ - u3_cran* ran_u = egg_u->ptr_v; - u3_chan* can_u = ran_u->can_u; - - if ( u3_ovum_done == new_e || - u3_ovum_drop == new_e ) - { - if ( can_u ) { - _conn_send_noun(can_u, - u3nt(ran_u->rid, c3__news, - ( u3_ovum_done == new_e - ? c3__done - : c3__drop ))); - _conn_drop_cran(can_u, ran_u); - } - else { - u3z(ran_u->rid); c3_free(ran_u); - } - } -} - -/* _conn_read_peel(): response to a %peel request, sans rid. -*/ -static u3_noun -_conn_read_peel(u3_conn* con_u, u3_noun dat) -{ - u3_pier* pir_u = con_u->car_u.pir_u; - u3_noun i_dat, t_dat, it_dat, tt_dat; - u3_noun res; - - if ( c3n == u3r_cell(dat, &i_dat, &t_dat) ) { - res = u3_nul; - } - else if ( u3_nul == t_dat ) { - // zero-argument requests. - // - switch (i_dat) { - default: { - res = u3_nul; - } break; - // command list. - // - case c3__help: { - res = u3nc( - u3_nul, - u3i_list(u3nc(c3__help, u3_nul), u3nc(c3__info, u3_nul), - u3nc(c3__khan, u3_nul), u3nc(c3__live, u3_nul), - u3nc(c3__mass, u3_nul), - u3nc(c3__port, - u3i_list(c3__ames, c3__htls, c3__http, u3_none)), - u3nc(c3__v, u3_nul), u3nc(c3__who, u3_nul), - u3_none)); - } break; - // simple health check. - // - case c3__live: { - res = u3nc(u3_nul, pir_u->liv_o); - } break; - // true iff the %khan vane is live (meaning %fyrd is supported.) - // - case c3__khan: { - res = u3nc(u3_nul, con_u->kan_o); - } break; - // |mass output - // - case c3__mass: { - // TODO |mass - // - res = u3_nul; - } break; - // runtime metrics. - // - case c3__info: { - res = u3nc(u3_nul, u3_pier_info(pir_u)); - } break; - // vere version. - // - case c3__v: { - res = u3nc(u3_nul, u3i_string(URBIT_VERSION)); - } break; - // current ship. - // - case c3__who: { - res = u3nc(u3_nul, u3i_chubs(2, pir_u->who_d)); - } - } - } - else if ( c3n == u3r_cell(t_dat, &it_dat, &tt_dat) ) { - res = u3_nul; - } - else if ( u3_nul == tt_dat ) { - // one-argument requests. - // - switch (i_dat) { - default: { - res = u3_nul; - } break; - case c3__port: { - switch (it_dat) { - default: { - res = u3_nul; - } break; - case c3__ames: { - res = u3nc(u3_nul, pir_u->por_s); - } break; - case c3__htls: { - res = u3nc(u3_nul, pir_u->pes_s); - } break; - case c3__http: { - res = u3nc(u3_nul, pir_u->per_s); - } break; - } - } break; - } - } - else { - res = u3_nul; - } - u3z(dat); return res; -} - -/* _conn_make_cran(): alloc/init new request. -*/ -static u3_cran* -_conn_make_cran(u3_chan* can_u, u3_atom rid) -{ - u3_cran* ran_u = c3_calloc(sizeof(*ran_u)); - - ran_u->rid = rid; - ran_u->can_u = can_u; - ran_u->nex_u = can_u->ran_u; - can_u->ran_u = ran_u; - return ran_u; -} - -/* _conn_moor_poke(): called on message read from u3_moor. -*/ -static void -_conn_moor_poke(void* ptr_v, c3_d len_d, c3_y* byt_y) -{ - u3_weak jar; - u3_noun can, rid, tag, dat, rud = u3_nul, tar, wir, cad; - u3_chan* can_u = (u3_chan*)ptr_v; - u3_conn* con_u = can_u->san_u->con_u; - c3_i err_i = 0; - c3_c* err_c; - c3_c* tag_c; - c3_c* rid_c; - - jar = u3s_cue_xeno_with(con_u->sil_u, len_d, byt_y); - if ( u3_none == jar ) { - can_u->mor_u.bal_f(can_u, -1, "cue-none"); - return; - } - if ( (c3n == u3r_cell(jar, &rid, &can)) || - (c3n == u3r_cell(can, &tag, &dat)) || - (c3n == u3ud(rid)) ) - { - err_i = -2; err_c = "jar-bad"; - goto _moor_poke_out; - } - - rud = u3dc("scot", c3__uv, u3k(rid)); - tag_c = u3r_string(tag); - rid_c = u3r_string(rud); - u3l_log("conn: %s %s\n", tag_c, rid_c); - c3_free(tag_c); c3_free(rid_c); - - switch (tag) { - default: { - err_i = -3; err_c = "tag-unknown"; - goto _moor_poke_out; - } break; - - case c3__fyrd: { - if ( c3n == con_u->kan_o ) { - err_i = -8; err_c = "khan-miss"; - goto _moor_poke_out; - } - wir = u3nc(c3__khan, - u3nq(u3dc("scot", c3__uv, con_u->sev_l), - u3dc("scot", c3__ud, can_u->coq_l), u3k(rud), u3_nul)); - u3_auto_peer( - u3_auto_plan(&con_u->car_u, - u3_ovum_init(0, c3__k, wir, u3k(can))), - 0, 0, _conn_poke_bail); - } break; - - case c3__peek: { - u3_pier_peek(con_u->car_u.pir_u, u3nc(u3_nul, u3_nul), u3k(dat), - _conn_make_cran(can_u, u3k(rid)), _conn_peek_cb); - } break; - - case c3__peel: { - _conn_send_noun( - can_u, u3nc(u3k(rid), _conn_read_peel(con_u, u3k(dat)))); - } break; - - case c3__ovum: { - if ( (c3n == u3r_trel(dat, &tar, &wir, &cad)) ) { - err_i = -6; err_c = "ovum-bad"; - goto _moor_poke_out; - } - u3_auto_peer( - u3_auto_plan(&con_u->car_u, - u3_ovum_init(0, u3k(tar), u3k(wir), u3k(cad))), - _conn_make_cran(can_u, u3k(rid)), _conn_ovum_news, _conn_ovum_bail); - } break; - - case c3__urth: { - switch (dat) { - default: { - err_i = -7; err_c = "urth-bad"; - goto _moor_poke_out; - } break; - case c3__meld: { - _conn_send_noun(can_u, u3nc(u3k(rid), c3y)); - u3_pier_meld(con_u->car_u.pir_u); - } break; - case c3__pack: { - _conn_send_noun(can_u, u3nc(u3k(rid), c3y)); - u3_pier_pack(con_u->car_u.pir_u); - } break; - } - } break; - } -_moor_poke_out: - u3z(rud); u3z(jar); - if ( 0 != err_i ) { - can_u->mor_u.bal_f(can_u, err_i, err_c); - } -} - -/* _conn_sock_cb(): socket connection callback. -*/ -static void -_conn_sock_cb(uv_stream_t* sem_u, c3_i tas_i) -{ - u3_shan* san_u = (u3_shan*)sem_u; - u3_conn* con_u = san_u->con_u; - u3_chan* can_u; - c3_i err_i; - - can_u = c3_calloc(sizeof(u3_chan)); - can_u->mor_u.ptr_v = can_u; - can_u->mor_u.pok_f = _conn_moor_poke; - can_u->mor_u.bal_f = _conn_moor_bail; - can_u->coq_l = san_u->nex_l++; - can_u->san_u = san_u; - err_i = uv_timer_init(u3L, &can_u->mor_u.tim_u); - c3_assert(!err_i); - err_i = uv_pipe_init(u3L, &can_u->mor_u.pyp_u, 0); - c3_assert(!err_i); - err_i = uv_accept(sem_u, (uv_stream_t*)&can_u->mor_u.pyp_u); - c3_assert(!err_i); - u3_newt_read((u3_moat*)&can_u->mor_u); - can_u->mor_u.nex_u = (u3_moor*)san_u->can_u; - san_u->can_u = can_u; -} - -/* _conn_init_sock(): initialize socket device. -*/ -static void -_conn_init_sock(u3_shan* san_u) -{ -#ifdef _WIN32 - u3_pier* pir_u = san_u->con_u->car_u.pir_u; - u3_atom who = u3dc("scot", c3__p, u3i_chubs(2, pir_u->who_d)); - c3_c* who_c = u3r_string(who); - c3_c pip_c[256]; - c3_i ret_i; - - u3z(who); - ret_i = snprintf(pip_c, sizeof(pip_c), "\\\\.\\pipe\\urbit-conn-%s", who_c + 1); - c3_assert(19 + strlen(who_c) == ret_i); - c3_free(who_c); - ret_i = uv_pipe_init(u3L, &san_u->pyp_u, 0); - c3_assert(!ret_i); - ret_i = uv_pipe_bind(&san_u->pyp_u, pip_c); - c3_assert(!ret_i); - ret_i = uv_listen((uv_stream_t*)&san_u->pyp_u, 0, _conn_sock_cb); - c3_assert(!ret_i); - u3l_log("conn: listening on %s\n", pip_c); - -#else // _WIN32 - // the full socket path is limited to about 108 characters, - // and we want it to be relative to the pier. save our current - // path, chdir to the pier, open the socket at the desired - // path, then chdir back. hopefully there aren't any threads. - // - c3_c pax_c[2048]; - c3_i err_i; - - if ( NULL == getcwd(pax_c, sizeof(pax_c)) ) { - u3l_log("conn: getcwd: %s\n", uv_strerror(errno)); - u3_king_bail(); - } - if ( 0 != chdir(u3_Host.dir_c) ) { - u3l_log("conn: chdir: %s\n", uv_strerror(errno)); - u3_king_bail(); - } - if ( 0 != unlink(URB_SOCK_PATH) && errno != ENOENT ) { - u3l_log("conn: unlink: %s\n", uv_strerror(errno)); - goto _conn_sock_err_chdir; - } - if ( 0 != (err_i = uv_pipe_init(u3L, &san_u->pyp_u, 0)) ) { - u3l_log("conn: uv_pipe_init: %s\n", uv_strerror(err_i)); - goto _conn_sock_err_chdir; - } - if ( 0 != (err_i = uv_pipe_bind(&san_u->pyp_u, URB_SOCK_PATH)) ) { - u3l_log("conn: uv_pipe_bind: %s\n", uv_strerror(err_i)); - goto _conn_sock_err_chdir; - } - if ( 0 != (err_i = uv_listen((uv_stream_t*)&san_u->pyp_u, 0, - _conn_sock_cb)) ) { - u3l_log("conn: uv_listen: %s\n", uv_strerror(err_i)); - goto _conn_sock_err_unlink; - } - if ( 0 != chdir(pax_c) ) { - u3l_log("conn: chdir: %s\n", uv_strerror(errno)); - goto _conn_sock_err_close; - } - u3l_log("conn: listening on %s/%s\n", u3_Host.dir_c, URB_SOCK_PATH); - return; - -_conn_sock_err_close: - uv_close((uv_handle_t*)&san_u->pyp_u, _conn_close_cb); -_conn_sock_err_unlink: - if ( 0 != unlink(URB_SOCK_PATH) ) { - u3l_log("conn: unlink: %s\n", uv_strerror(errno)); - } -_conn_sock_err_chdir: - if ( 0 != chdir(pax_c) ) { - u3l_log("conn: chdir: %s\n", uv_strerror(errno)); - } - u3_king_bail(); -#endif // _WIN32 -} - -/* _conn_born_news(): initialization complete; %khan available. -*/ -static void -_conn_born_news(u3_ovum* egg_u, u3_ovum_news new_e) -{ - u3_conn* con_u = (u3_conn*)egg_u->car_u; - - if ( u3_ovum_done == new_e ) { - con_u->kan_o = c3y; - } -} - -/* _conn_born_bail(): nonessential failure; log it and keep going. -*/ -static void -_conn_born_bail(u3_ovum* egg_u, u3_noun lud) -{ - u3l_log("conn: %%born failure; %%fyrd not supported\n"); - u3z(lud); - u3_ovum_free(egg_u); -} - -/* _conn_io_talk(): open socket and notify %khan that we're live. -*/ -static void -_conn_io_talk(u3_auto* car_u) -{ - u3_conn* con_u = (u3_conn*)car_u; - u3_shan* san_u; - u3_noun wir = u3nt(c3__khan, - u3dc("scot", c3__uv, con_u->sev_l), - u3_nul); - u3_noun cad = u3nc(c3__born, u3_nul); - - u3_auto_peer( - u3_auto_plan(car_u, u3_ovum_init(0, c3__k, wir, cad)), - 0, - _conn_born_news, - _conn_born_bail); - - // initialize server, opening socket. - // - c3_assert(!con_u->san_u); - san_u = c3_calloc(sizeof(*san_u)); - san_u->nex_l = 1; - san_u->con_u = con_u; - con_u->san_u = san_u; - _conn_init_sock(san_u); - car_u->liv_o = c3y; -} - -/* _conn_ef_handle(): handle result. -*/ -static void -_conn_ef_handle(u3_conn* con_u, - c3_l sev_l, - c3_l coq_l, - u3_atom rid, - u3_noun tag, - u3_noun dat) -{ - u3_chan* can_u; - - if ( 0 != (can_u = _conn_find_chan(con_u, sev_l, coq_l)) ) { - if ( c3__avow == tag ) { - _conn_send_noun(can_u, u3nt(u3k(rid), c3__avow, u3k(dat))); - } - else { - can_u->mor_u.bal_f(can_u, -4, "handle-unknown"); - u3_king_bail(); - } - } - else { - u3l_log("conn: handle-no-coq %" PRIx32 " %" PRIu32 "\n", - sev_l, coq_l); - } - u3z(rid); u3z(tag); u3z(dat); -} - -/* _conn_io_kick(): apply effects. -*/ -static c3_o -_conn_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_conn* con_u = (u3_conn*)car_u; - u3_noun tag, dat; - c3_l sev_l, coq_l; - u3_atom rid; - - if ( c3n == _conn_read_wire(wir, c3__khan, &sev_l, &coq_l, &rid) ) { - u3z(cad); return c3n; - } - if ( (con_u->sev_l != sev_l) || - (c3n == u3r_cell(cad, &tag, &dat)) ) - { - u3z(rid); u3z(cad); return c3n; - } - - _conn_ef_handle(con_u, sev_l, coq_l, rid, u3k(tag), u3k(dat)); - u3z(cad); return c3y; -} - -/* _conn_io_exit(): unlink socket, shut down connections. -*/ -static void -_conn_io_exit(u3_auto* car_u) -{ - u3_conn* con_u = (u3_conn*)car_u; - c3_c* pax_c = u3_Host.dir_c; - c3_w len_w = strlen(pax_c) + 1 + sizeof(URB_SOCK_PATH); - c3_c* paf_c = c3_malloc(len_w); - c3_i wit_i; - - wit_i = snprintf(paf_c, len_w, "%s/%s", pax_c, URB_SOCK_PATH); - c3_assert(wit_i > 0); - c3_assert(len_w == (c3_w)wit_i + 1); - - if ( 0 != unlink(paf_c) ) { - if ( ENOENT != errno ) { - u3l_log("conn: failed to unlink socket: %s\n", uv_strerror(errno)); - } - } - else { - // u3l_log("conn: unlinked %s\n", paf_c); - } - c3_free(paf_c); - - { - u3_shan* san_u = con_u->san_u; - - if ( san_u ) { - while ( san_u->can_u ) { - _conn_close_chan(san_u, san_u->can_u); - } - uv_close((uv_handle_t*)&san_u->pyp_u, _conn_close_cb); - } - } - - u3s_cue_xeno_done(con_u->sil_u); - c3_free(con_u); -} - -/* u3_conn(): initialize control plane socket. -*/ -u3_auto* -u3_conn_io_init(u3_pier* pir_u) -{ - u3_conn* con_u; - u3_auto* car_u; - u3_noun now; - struct timeval tim_u; - - if ( c3n == u3_Host.ops_u.con ) { - return NULL; - } - con_u = c3_calloc(sizeof(*con_u)); - con_u->sil_u = u3s_cue_xeno_init(); - con_u->kan_o = c3n; - car_u = &con_u->car_u; - car_u->nam_m = c3__conn; - car_u->liv_o = c3n; - car_u->io.talk_f = _conn_io_talk; - car_u->io.kick_f = _conn_io_kick; - car_u->io.exit_f = _conn_io_exit; - - gettimeofday(&tim_u, 0); - now = u3_time_in_tv(&tim_u); - con_u->sev_l = u3r_mug(now); - u3z(now); - return car_u; -} diff --git a/pkg/urbit/vere/io/cttp.c b/pkg/urbit/vere/io/cttp.c deleted file mode 100644 index 1f19c3e41..000000000 --- a/pkg/urbit/vere/io/cttp.c +++ /dev/null @@ -1,1170 +0,0 @@ -/* vere/cttp.c -** -*/ -#include "all.h" -#include "vere/vere.h" -#include -#include - -/* u3_csat: client connection state. -*/ - typedef enum { - u3_csat_init = 0, // initialized - u3_csat_addr = 1, // address resolution begun - u3_csat_quit = 2, // cancellation requested - u3_csat_conn = 3, // sync connect phase - u3_csat_ripe = 4 // passed to libh2o - } u3_csat; - -/* u3_cres: response to http client. -*/ - typedef struct _u3_cres { - c3_w sas_w; // status code - u3_noun hed; // headers - u3_hbod* bod_u; // exit of body queue - u3_hbod* dob_u; // entry of body queue - } u3_cres; - -/* u3_creq: outgoing http request. -*/ - typedef struct _u3_creq { // client request - c3_l num_l; // request number - h2o_http1client_t* cli_u; // h2o client - u3_csat sat_e; // connection state - c3_o sec; // yes == https - c3_w ipf_w; // IP - c3_c* ipf_c; // IP (string) - c3_c* hot_c; // host - c3_s por_s; // port - c3_c* por_c; // port (string) - c3_c* met_c; // method - c3_c* url_c; // url - u3_hhed* hed_u; // headers - u3_hbod* bod_u; // body - u3_hbod* rub_u; // exit of send queue - u3_hbod* bur_u; // entry of send queue - h2o_iovec_t* vec_u; // send-buffer array - u3_cres* res_u; // nascent response - struct _u3_creq* nex_u; // next in list - struct _u3_creq* pre_u; // previous in list - struct _u3_cttp* ctp_u; // cttp backpointer - } u3_creq; - -/* u3_cttp: http client. -*/ - typedef struct _u3_cttp { - u3_auto car_u; // driver - c3_l sev_l; // instance number - u3_creq* ceq_u; // request list - uv_async_t nop_u; // unused handle (async close) - h2o_timeout_t tim_u; // request timeout - h2o_http1client_ctx_t // - ctx_u; // h2o client ctx - void* tls_u; // client SSL_CTX* - } u3_cttp; - -// XX deduplicate with _http_vec_to_atom -/* _cttp_vec_to_atom(): convert h2o_iovec_t to atom (cord) -*/ -static u3_noun -_cttp_vec_to_atom(h2o_iovec_t vec_u) -{ - return u3i_bytes(vec_u.len, (const c3_y*)vec_u.base); -} - -/* _cttp_bods_free(): free body structure. -*/ -static void -_cttp_bods_free(u3_hbod* bod_u) -{ - while ( bod_u ) { - u3_hbod* nex_u = bod_u->nex_u; - - c3_free(bod_u); - bod_u = nex_u; - } -} - -/* _cttp_bod_new(): create a data buffer -*/ -static u3_hbod* -_cttp_bod_new(c3_w len_w, c3_c* hun_c) -{ - u3_hbod* bod_u = c3_malloc(1 + len_w + sizeof(*bod_u)); - bod_u->hun_y[len_w] = 0; - bod_u->len_w = len_w; - memcpy(bod_u->hun_y, (const c3_y*)hun_c, len_w); - - bod_u->nex_u = 0; - return bod_u; -} - -/* _cttp_bod_from_hed(): create a data buffer from a header -*/ -static u3_hbod* -_cttp_bod_from_hed(u3_hhed* hed_u) -{ - c3_w len_w = hed_u->nam_w + 2 + hed_u->val_w + 2; - u3_hbod* bod_u = c3_malloc(1 + len_w + sizeof(*bod_u)); - bod_u->hun_y[len_w] = 0; - - memcpy(bod_u->hun_y, hed_u->nam_c, hed_u->nam_w); - memcpy(bod_u->hun_y + hed_u->nam_w, ": ", 2); - memcpy(bod_u->hun_y + hed_u->nam_w + 2, hed_u->val_c, hed_u->val_w); - memcpy(bod_u->hun_y + hed_u->nam_w + 2 + hed_u->val_w, "\r\n", 2); - - bod_u->len_w = len_w; - bod_u->nex_u = 0; - - return bod_u; -} - -/* _cttp_bods_to_octs: translate body buffer into octet-stream noun. -*/ -static u3_noun -_cttp_bods_to_octs(u3_hbod* bod_u) -{ - c3_w len_w; - c3_y* buf_y; - u3_noun cos; - - { - u3_hbod* bid_u = bod_u; - - len_w = 0; - while ( bid_u ) { - len_w += bid_u->len_w; - bid_u = bid_u->nex_u; - } - } - buf_y = c3_malloc(1 + len_w); - buf_y[len_w] = 0; - - { - c3_y* ptr_y = buf_y; - - while ( bod_u ) { - memcpy(ptr_y, bod_u->hun_y, bod_u->len_w); - ptr_y += bod_u->len_w; - bod_u = bod_u->nex_u; - } - } - cos = u3i_bytes(len_w, buf_y); - c3_free(buf_y); - return u3nc(len_w, cos); -} - -/* _cttp_bod_from_octs(): translate octet-stream noun into body. -*/ -static u3_hbod* -_cttp_bod_from_octs(u3_noun oct) -{ - c3_w len_w; - - if ( !_(u3a_is_cat(u3h(oct))) ) { // 2GB max - u3m_bail(c3__fail); return 0; - } - len_w = u3h(oct); - - { - u3_hbod* bod_u = c3_malloc(1 + len_w + sizeof(*bod_u)); - bod_u->hun_y[len_w] = 0; - bod_u->len_w = len_w; - u3r_bytes(0, len_w, bod_u->hun_y, u3t(oct)); - - bod_u->nex_u = 0; - - u3z(oct); - return bod_u; - } -} - -/* _cttp_bods_to_vec(): translate body buffers to array of h2o_iovec_t -*/ -static h2o_iovec_t* -_cttp_bods_to_vec(u3_hbod* bod_u, c3_w* tot_w) -{ - h2o_iovec_t* vec_u; - c3_w len_w; - - { - u3_hbod* bid_u = bod_u; - len_w = 0; - - while( bid_u ) { - len_w++; - bid_u = bid_u->nex_u; - } - } - - if ( 0 == len_w ) { - *tot_w = len_w; - return 0; - } - - vec_u = c3_malloc(sizeof(h2o_iovec_t) * len_w); - len_w = 0; - - while( bod_u ) { - vec_u[len_w] = h2o_iovec_init(bod_u->hun_y, bod_u->len_w); - len_w++; - bod_u = bod_u->nex_u; - } - - *tot_w = len_w; - - return vec_u; -} - -// XX deduplicate with _http_heds_free -/* _cttp_heds_free(): free header linked list -*/ -static void -_cttp_heds_free(u3_hhed* hed_u) -{ - while ( hed_u ) { - u3_hhed* nex_u = hed_u->nex_u; - - c3_free(hed_u->nam_c); - c3_free(hed_u->val_c); - c3_free(hed_u); - hed_u = nex_u; - } -} - -// XX deduplicate with _http_hed_new -/* _cttp_hed_new(): create u3_hhed from nam/val cords -*/ -static u3_hhed* -_cttp_hed_new(u3_atom nam, u3_atom val) -{ - c3_w nam_w = u3r_met(3, nam); - c3_w val_w = u3r_met(3, val); - u3_hhed* hed_u = c3_malloc(sizeof(*hed_u)); - - hed_u->nam_c = c3_malloc(1 + nam_w); - hed_u->val_c = c3_malloc(1 + val_w); - hed_u->nam_c[nam_w] = 0; - hed_u->val_c[val_w] = 0; - hed_u->nex_u = 0; - hed_u->nam_w = nam_w; - hed_u->val_w = val_w; - - u3r_bytes(0, nam_w, (c3_y*)hed_u->nam_c, nam); - u3r_bytes(0, val_w, (c3_y*)hed_u->val_c, val); - - return hed_u; -} - -// XX deduplicate with _http_heds_from_noun -/* _cttp_heds_from_noun(): convert (list (pair @t @t)) to u3_hhed -*/ -static u3_hhed* -_cttp_heds_from_noun(u3_noun hed) -{ - u3_noun deh = hed; - u3_noun i_hed; - - u3_hhed* hed_u = 0; - - while ( u3_nul != hed ) { - i_hed = u3h(hed); - u3_hhed* nex_u = _cttp_hed_new(u3h(i_hed), u3t(i_hed)); - nex_u->nex_u = hed_u; - - hed_u = nex_u; - hed = u3t(hed); - } - - u3z(deh); - return hed_u; -} - -// XX deduplicate with _http_heds_to_noun -/* _cttp_heds_to_noun(): convert h2o_header_t to (list (pair @t @t)) -*/ -static u3_noun -_cttp_heds_to_noun(h2o_header_t* hed_u, c3_d hed_d) -{ - u3_noun hed = u3_nul; - c3_d dex_d = hed_d; - - h2o_header_t deh_u; - - while ( 0 < dex_d ) { - deh_u = hed_u[--dex_d]; - hed = u3nc(u3nc(_cttp_vec_to_atom(*deh_u.name), - _cttp_vec_to_atom(deh_u.value)), hed); - } - - return hed; -} - -/* _cttp_cres_free(): free a u3_cres. -*/ -static void -_cttp_cres_free(u3_cres* res_u) -{ - _cttp_bods_free(res_u->bod_u); - c3_free(res_u); -} - -/* _cttp_cres_new(): create a response -*/ -static void -_cttp_cres_new(u3_creq* ceq_u, c3_w sas_w) -{ - ceq_u->res_u = c3_calloc(sizeof(*ceq_u->res_u)); - ceq_u->res_u->sas_w = sas_w; -} - -/* _cttp_cres_fire_body(): attach response body buffer -*/ -static void -_cttp_cres_fire_body(u3_cres* res_u, u3_hbod* bod_u) -{ - c3_assert(!bod_u->nex_u); - - if ( !(res_u->bod_u) ) { - res_u->bod_u = res_u->dob_u = bod_u; - } - else { - res_u->dob_u->nex_u = bod_u; - res_u->dob_u = bod_u; - } -} - -/* _cttp_mcut_pork(): measure/cut path/extension. -*/ -static c3_w -_cttp_mcut_pork(c3_c* buf_c, c3_w len_w, u3_noun pok) -{ - u3_noun h_pok = u3h(pok); - u3_noun t_pok = u3t(pok); - - len_w = u3_mcut_path(buf_c, len_w, '/', u3k(t_pok)); - if ( u3_nul != h_pok ) { - len_w = u3_mcut_char(buf_c, len_w, '.'); - len_w = u3_mcut_cord(buf_c, len_w, u3k(u3t(h_pok))); - } - u3z(pok); - return len_w; -} - -/* _cttp_mcut_quay(): measure/cut query. -*/ -static c3_w -_cttp_mcut_quay(c3_c* buf_c, c3_w len_w, u3_noun quy) -{ - u3_noun yuq = quy; - c3_o fir_o = c3y; - - while ( u3_nul != quy ) { - if ( c3y == fir_o ) { - len_w = u3_mcut_char(buf_c, len_w, '?'); - fir_o = c3n; - } - else { - len_w = u3_mcut_char(buf_c, len_w, '&'); - } - - { - u3_noun i_quy, t_quy; - u3_noun pi_quy, qi_quy; - u3x_cell(quy, &i_quy, &t_quy); - u3x_cell(i_quy, &pi_quy, &qi_quy); - - len_w = u3_mcut_cord(buf_c, len_w, u3k(pi_quy)); - len_w = u3_mcut_char(buf_c, len_w, '='); - len_w = u3_mcut_cord(buf_c, len_w, u3k(qi_quy)); - - quy = t_quy; - } - } - - u3z(yuq); - return len_w; -} - -/* _cttp_mcut_url(): measure/cut purl, producing relative URL. -*/ -static c3_w -_cttp_mcut_url(c3_c* buf_c, c3_w len_w, u3_noun pul) -{ - u3_noun q_pul = u3h(u3t(pul)); - u3_noun r_pul = u3t(u3t(pul)); - - len_w = u3_mcut_char(buf_c, len_w, '/'); - len_w = _cttp_mcut_pork(buf_c, len_w, u3k(q_pul)); - - if ( u3_nul != r_pul ) { - len_w = _cttp_mcut_quay(buf_c, len_w, u3k(r_pul)); - } - u3z(pul); - return len_w; -} - -/* _cttp_creq_port(): stringify port -*/ -static c3_c* -_cttp_creq_port(c3_s por_s) -{ - c3_c* por_c = c3_malloc(8); - snprintf(por_c, 7, "%d", 0xffff & por_s); - return por_c; -} - -/* _cttp_creq_url(): construct url from noun. -*/ -static c3_c* -_cttp_creq_url(u3_noun pul) -{ - c3_w len_w = _cttp_mcut_url(0, 0, u3k(pul)); - c3_c* url_c = c3_malloc(1 + len_w); - - _cttp_mcut_url(url_c, 0, pul); - url_c[len_w] = 0; - - return url_c; -} - -/* _cttp_creq_host(): construct host from noun. -*/ -static c3_c* -_cttp_creq_host(u3_noun hot) -{ - c3_w len_w = u3_mcut_host(0, 0, u3k(hot)); - c3_c* hot_c = c3_malloc(1 + len_w); - - u3_mcut_host(hot_c, 0, hot); - hot_c[len_w] = 0; - - return hot_c; -} - -/* _cttp_creq_ip(): stringify ip -*/ -static c3_c* -_cttp_creq_ip(c3_w ipf_w) -{ - c3_c* ipf_c = c3_malloc(17); - snprintf(ipf_c, 16, "%d.%d.%d.%d", (ipf_w >> 24), - ((ipf_w >> 16) & 255), - ((ipf_w >> 8) & 255), - (ipf_w & 255)); - return ipf_c; -} - -/* _cttp_creq_find(): find a request by number in the client -*/ -static u3_creq* -_cttp_creq_find(u3_cttp* ctp_u, c3_l num_l) -{ - u3_creq* ceq_u = ctp_u->ceq_u; - - // XX glories of linear search - // - while ( ceq_u ) { - if ( num_l == ceq_u->num_l ) { - return ceq_u; - } - ceq_u = ceq_u->nex_u; - } - return 0; -} - -/* _cttp_creq_link(): link request to client -*/ -static void -_cttp_creq_link(u3_cttp* ctp_u, u3_creq* ceq_u) -{ - ceq_u->nex_u = ctp_u->ceq_u; - - if ( 0 != ceq_u->nex_u ) { - ceq_u->nex_u->pre_u = ceq_u; - } - - ceq_u->ctp_u = ctp_u; - ctp_u->ceq_u = ceq_u; -} - -/* _cttp_creq_unlink(): unlink request from client -*/ -static void -_cttp_creq_unlink(u3_creq* ceq_u) -{ - u3_cttp* ctp_u = ceq_u->ctp_u; - - if ( ceq_u->pre_u ) { - ceq_u->pre_u->nex_u = ceq_u->nex_u; - - if ( 0 != ceq_u->nex_u ) { - ceq_u->nex_u->pre_u = ceq_u->pre_u; - } - } - else { - ctp_u->ceq_u = ceq_u->nex_u; - - if ( 0 != ceq_u->nex_u ) { - ceq_u->nex_u->pre_u = 0; - } - } -} - -/* _cttp_creq_free(): free a u3_creq. -*/ -static void -_cttp_creq_free(u3_creq* ceq_u) -{ - _cttp_creq_unlink(ceq_u); - - _cttp_heds_free(ceq_u->hed_u); - // Note: ceq_u->bod_u is covered here - _cttp_bods_free(ceq_u->rub_u); - - if ( ceq_u->res_u ) { - _cttp_cres_free(ceq_u->res_u); - } - - c3_free(ceq_u->hot_c); - c3_free(ceq_u->ipf_c); - c3_free(ceq_u->por_c); - c3_free(ceq_u->met_c); - c3_free(ceq_u->url_c); - c3_free(ceq_u->vec_u); - c3_free(ceq_u); -} - -/* _cttp_creq_new(): create a u3_creq from an +http-request - * - * If we were rewriting all of this from scratch, this isn't how we'd do it. - * - * We start with the (?? - JB) - */ -static u3_creq* -_cttp_creq_new(u3_cttp* ctp_u, c3_l num_l, u3_noun hes) -{ - u3_creq* ceq_u = c3_calloc(sizeof(*ceq_u)); - - u3_noun method, url, headers, body; - if (c3n == u3r_qual(hes, &method, &url, &headers, &body)) { - u3z(hes); - return 0; - } - - // parse the url out of the new style url passed to us. - // - u3_noun unit_pul = u3do("de-purl:html", u3k(url)); - - if ( c3n == u3r_du(unit_pul) ) { - c3_c* url_c = u3r_string(url); - u3l_log("cttp: unable to parse url:\n %s\n", url_c); - c3_free(url_c); - u3z(hes); - return 0; - } - - u3_noun pul = u3t(unit_pul); - - u3_noun hat = u3h(pul); // +hart - u3_noun sec = u3h(hat); - u3_noun por = u3h(u3t(hat)); - u3_noun hot = u3t(u3t(hat)); // +host - - ceq_u->sat_e = u3_csat_init; - ceq_u->num_l = num_l; - ceq_u->sec = sec; - - if ( c3y == u3h(hot) ) { - ceq_u->hot_c = _cttp_creq_host(u3k(u3t(hot))); - } else { - ceq_u->ipf_w = u3r_word(0, u3t(hot)); - ceq_u->ipf_c = _cttp_creq_ip(ceq_u->ipf_w); - } - - if ( u3_nul != por ) { - ceq_u->por_s = u3t(por); - ceq_u->por_c = _cttp_creq_port(ceq_u->por_s); - } - - // XX this should be checked against a whitelist - // - c3_assert( c3y == u3ud(method) ); - ceq_u->met_c = u3r_string(method); - ceq_u->url_c = _cttp_creq_url(u3k(pul)); - - ceq_u->hed_u = _cttp_heds_from_noun(u3k(headers)); - - if ( u3_nul != body ) { - ceq_u->bod_u = _cttp_bod_from_octs(u3k(u3t(body))); - } - - _cttp_creq_link(ctp_u, ceq_u); - - u3z(unit_pul); - u3z(hes); - - return ceq_u; -} - -/* _cttp_creq_fire_body(): attach body to request buffers. -*/ -static void -_cttp_creq_fire_body(u3_creq* ceq_u, u3_hbod *rub_u) -{ - c3_assert(!rub_u->nex_u); - - if ( !(ceq_u->rub_u) ) { - ceq_u->rub_u = ceq_u->bur_u = rub_u; - } - else { - ceq_u->bur_u->nex_u = rub_u; - ceq_u->bur_u = rub_u; - } -} - -/* _cttp_creq_fire_str(): attach string to request buffers. -*/ -static void -_cttp_creq_fire_str(u3_creq* ceq_u, c3_c* str_c) -{ - _cttp_creq_fire_body(ceq_u, _cttp_bod_new(strlen(str_c), str_c)); - c3_free(str_c); -} - -/* _cttp_creq_fire_heds(): attach output headers. -*/ -static void -_cttp_creq_fire_heds(u3_creq* ceq_u, u3_hhed* hed_u) -{ - while ( hed_u ) { - _cttp_creq_fire_body(ceq_u, _cttp_bod_from_hed(hed_u)); - hed_u = hed_u->nex_u; - } -} - -/* _cttp_creq_fire(): load request data for into buffers. -*/ -static void -_cttp_creq_fire(u3_creq* ceq_u) -{ - { - c3_w len_w = strlen(ceq_u->met_c) + 1 + strlen(ceq_u->url_c) + 12; - c3_c* lin_c = c3_malloc(len_w); - - len_w = snprintf(lin_c, len_w, "%s %s HTTP/1.1\r\n", - ceq_u->met_c, - ceq_u->url_c); - _cttp_creq_fire_str(ceq_u, lin_c); - } - - { - c3_c* hot_c = ceq_u->hot_c ? ceq_u->hot_c : ceq_u->ipf_c; - c3_c* hos_c; - c3_w len_w; - - if ( ceq_u->por_c ) { - len_w = 6 + strlen(hot_c) + 1 + strlen(ceq_u->por_c) + 3; - hos_c = c3_malloc(len_w); - len_w = snprintf(hos_c, len_w, "Host: %s:%s\r\n", hot_c, ceq_u->por_c); - } - else { - len_w = 6 + strlen(hot_c) + 3; - hos_c = c3_malloc(len_w); - len_w = snprintf(hos_c, len_w, "Host: %s\r\n", hot_c); - } - - _cttp_creq_fire_body(ceq_u, _cttp_bod_new(len_w, hos_c)); - c3_free(hos_c); - } - - _cttp_creq_fire_heds(ceq_u, ceq_u->hed_u); - - if ( !ceq_u->bod_u ) { - _cttp_creq_fire_body(ceq_u, _cttp_bod_new(2, "\r\n")); - } - else { - c3_c len_c[41]; - c3_w len_w = snprintf(len_c, 40, "Content-Length: %u\r\n\r\n", - ceq_u->bod_u->len_w); - - _cttp_creq_fire_body(ceq_u, _cttp_bod_new(len_w, len_c)); - _cttp_creq_fire_body(ceq_u, ceq_u->bod_u); - } -} - -/* _cttp_creq_quit(): cancel a u3_creq -*/ -static void -_cttp_creq_quit(u3_creq* ceq_u) -{ - if ( u3_csat_addr == ceq_u->sat_e ) { - ceq_u->sat_e = u3_csat_quit; - return; // wait to be called again on address resolution - } - - if ( ceq_u->cli_u ) { - h2o_http1client_cancel(ceq_u->cli_u); - } - - _cttp_creq_free(ceq_u); -} - -static void -_cttp_http_client_receive(u3_creq* ceq_u, c3_w sas_w, u3_noun mes, u3_noun uct) -{ - u3_cttp* ctp_u = ceq_u->ctp_u; - - // XX inject partial responses as separate events - // - u3_noun wir = u3nt(u3i_string("http-client"), - u3dc("scot", c3__uv, ctp_u->sev_l), - u3_nul); - u3_noun cad = u3nt(u3i_string("receive"), - ceq_u->num_l, - u3nq(u3i_string("start"), u3nc(sas_w, mes), uct, c3y)); - - u3_auto_plan(&ctp_u->car_u, u3_ovum_init(0, c3__i, wir, cad)); -} - -/* _cttp_creq_fail(): dispatch error response -*/ -static void -_cttp_creq_fail(u3_creq* ceq_u, const c3_c* err_c) -{ - // XX anything other than a 504? - c3_w cod_w = 504; - - u3l_log("http: fail (%d, %d): %s\r\n", ceq_u->num_l, cod_w, err_c); - - // XX include err_c as response body? - _cttp_http_client_receive(ceq_u, cod_w, u3_nul, u3_nul); - _cttp_creq_free(ceq_u); -} - -/* _cttp_creq_respond(): dispatch response -*/ -static void -_cttp_creq_respond(u3_creq* ceq_u) -{ - u3_cres* res_u = ceq_u->res_u; - - _cttp_http_client_receive(ceq_u, res_u->sas_w, res_u->hed, - ( !res_u->bod_u ) ? u3_nul : - u3nc(u3_nul, _cttp_bods_to_octs(res_u->bod_u))); - - _cttp_creq_free(ceq_u); -} - -// XX research: may be called with closed client? -/* _cttp_creq_on_body(): cb invoked by h2o upon receiving a response body -*/ -static c3_i -_cttp_creq_on_body(h2o_http1client_t* cli_u, const c3_c* err_c) -{ - u3_creq* ceq_u = (u3_creq *)cli_u->data; - - if ( 0 != err_c && h2o_http1client_error_is_eos != err_c ) { - _cttp_creq_fail(ceq_u, err_c); - return -1; - } - - h2o_buffer_t* buf_u = cli_u->sock->input; - - if ( buf_u->size ) { - _cttp_cres_fire_body(ceq_u->res_u, - _cttp_bod_new(buf_u->size, buf_u->bytes)); - h2o_buffer_consume(&cli_u->sock->input, buf_u->size); - } - - // We're using the end of stream thing here to queue event to urbit. we'll - // need to separate this into our own timer for partial progress sends. - if ( h2o_http1client_error_is_eos == err_c ) { - _cttp_creq_respond(ceq_u); - } - - return 0; -} - -/* _cttp_creq_on_head(): cb invoked by h2o upon receiving response headers -*/ -static h2o_http1client_body_cb -_cttp_creq_on_head(h2o_http1client_t* cli_u, const c3_c* err_c, c3_i ver_i, - c3_i sas_i, h2o_iovec_t sas_u, h2o_header_t* hed_u, - size_t hed_t, c3_i len_i) -{ - u3_creq* ceq_u = (u3_creq *)cli_u->data; - - if ( 0 != err_c && h2o_http1client_error_is_eos != err_c ) { - _cttp_creq_fail(ceq_u, err_c); - return 0; - } - - _cttp_cres_new(ceq_u, (c3_w)sas_i); - ceq_u->res_u->hed = _cttp_heds_to_noun(hed_u, hed_t); - - if ( h2o_http1client_error_is_eos == err_c ) { - _cttp_creq_respond(ceq_u); - return 0; - } - - return _cttp_creq_on_body; -} - -/* _cttp_creq_on_connect(): cb invoked by h2o upon successful connection -*/ -static h2o_http1client_head_cb -_cttp_creq_on_connect(h2o_http1client_t* cli_u, const c3_c* err_c, - h2o_iovec_t** vec_u, size_t* vec_i, c3_i* hed_i) -{ - u3_creq* ceq_u = (u3_creq *)cli_u->data; - - if ( 0 != err_c ) { - // if synchronously connecting, caller will cleanup - // - if ( u3_csat_conn == ceq_u->sat_e ) { - ceq_u->sat_e = u3_csat_quit; - } - else { - c3_assert( u3_csat_ripe == ceq_u->sat_e ); - _cttp_creq_fail(ceq_u, err_c); - } - return 0; - } - - // serialize request (populate rub_u) - // - _cttp_creq_fire(ceq_u); - - { - c3_w len_w; - ceq_u->vec_u = _cttp_bods_to_vec(ceq_u->rub_u, &len_w); - - *vec_i = len_w; - *vec_u = ceq_u->vec_u; - *hed_i = (0 == strcmp(ceq_u->met_c, "HEAD")); - } - - return _cttp_creq_on_head; -} - -/* _cttp_creq_connect(): establish connection -*/ -static void -_cttp_creq_connect(u3_creq* ceq_u) -{ - c3_assert( u3_csat_conn == ceq_u->sat_e ); - c3_assert( ceq_u->ipf_c ); - - // connect by ip/port, avoiding synchronous getaddrinfo() - // - { - h2o_iovec_t ipf_u = h2o_iovec_init(ceq_u->ipf_c, strlen(ceq_u->ipf_c)); - c3_t tls_t = ( c3y == ceq_u->sec ); - c3_s por_s = ( ceq_u->por_s ) - ? ceq_u->por_s - : ( tls_t ) ? 443 : 80; - - h2o_http1client_connect(&ceq_u->cli_u, ceq_u, &ceq_u->ctp_u->ctx_u, - ipf_u, por_s, tls_t, _cttp_creq_on_connect); - } - - // connect() failed, cb invoked synchronously - // - if ( u3_csat_conn != ceq_u->sat_e ) { - c3_assert( u3_csat_quit == ceq_u->sat_e ); - // only one such failure case - // - _cttp_creq_fail(ceq_u, "socket create error"); - } - else { - ceq_u->sat_e = u3_csat_ripe; - - // fixup hostname for TLS handshake - // - // must be synchronous, after successfull connect() call - // - if ( ceq_u->hot_c && (c3y == ceq_u->sec) ) { - c3_assert( ceq_u->cli_u ); - c3_free(ceq_u->cli_u->ssl.server_name); - ceq_u->cli_u->ssl.server_name = strdup(ceq_u->hot_c); - } - } -} - -/* _cttp_creq_resolve_cb(): cb upon IP address resolution -*/ -static void -_cttp_creq_resolve_cb(uv_getaddrinfo_t* adr_u, - c3_i sas_i, - struct addrinfo* aif_u) -{ - u3_creq* ceq_u = adr_u->data; - - if ( u3_csat_quit == ceq_u->sat_e ) { - _cttp_creq_quit(ceq_u);; - } - else if ( 0 != sas_i ) { - _cttp_creq_fail(ceq_u, uv_strerror(sas_i)); - } - else { - // XX traverse struct a la _ames_czar_cb - ceq_u->ipf_w = ntohl(((struct sockaddr_in *)aif_u->ai_addr)->sin_addr.s_addr); - ceq_u->ipf_c = _cttp_creq_ip(ceq_u->ipf_w); - - ceq_u->sat_e = u3_csat_conn; - _cttp_creq_connect(ceq_u); - } - - c3_free(adr_u); - uv_freeaddrinfo(aif_u); -} - -/* _cttp_creq_resolve(): resolve hostname to IP address -*/ -static void -_cttp_creq_resolve(u3_creq* ceq_u) -{ - c3_assert(u3_csat_addr == ceq_u->sat_e); - c3_assert(ceq_u->hot_c); - - uv_getaddrinfo_t* adr_u = c3_malloc(sizeof(*adr_u)); - adr_u->data = ceq_u; - - struct addrinfo hin_u; - memset(&hin_u, 0, sizeof(struct addrinfo)); - - hin_u.ai_family = PF_INET; - hin_u.ai_socktype = SOCK_STREAM; - hin_u.ai_protocol = IPPROTO_TCP; - - // XX is this necessary? - c3_c* por_c = ceq_u->por_c ? ceq_u->por_c : - ( c3y == ceq_u->sec ) ? "443" : "80"; - - c3_i sas_i; - - if ( 0 != (sas_i = uv_getaddrinfo(u3L, adr_u, _cttp_creq_resolve_cb, - ceq_u->hot_c, por_c, &hin_u)) ) { - _cttp_creq_fail(ceq_u, uv_strerror(sas_i)); - } -} - -/* _cttp_creq_start(): start a request -*/ -static void -_cttp_creq_start(u3_creq* ceq_u) -{ - if ( ceq_u->ipf_c ) { - ceq_u->sat_e = u3_csat_conn; - _cttp_creq_connect(ceq_u); - } else { - ceq_u->sat_e = u3_csat_addr; - _cttp_creq_resolve(ceq_u); - } -} - -/* _cttp_init_tls: initialize OpenSSL context -*/ -static SSL_CTX* -_cttp_init_tls(void) -{ - // XX require 1.1.0 and use TLS_client_method() - SSL_CTX* tls_u = SSL_CTX_new(SSLv23_client_method()); - // XX use SSL_CTX_set_max_proto_version() and SSL_CTX_set_min_proto_version() - SSL_CTX_set_options(tls_u, SSL_OP_NO_SSLv2 | - SSL_OP_NO_SSLv3 | - // SSL_OP_NO_TLSv1 | // XX test - SSL_OP_NO_COMPRESSION); - - u3K.ssl_x509_f(SSL_CTX_get_cert_store(tls_u)); - SSL_CTX_set_verify(tls_u, SSL_VERIFY_PEER, 0); - SSL_CTX_set_session_cache_mode(tls_u, SSL_SESS_CACHE_OFF); - SSL_CTX_set_cipher_list(tls_u, - "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:" - "ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:" - "RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS"); - - return tls_u; -} - -/* _cttp_ef_http_client(): send an %http-client (outgoing request) to cttp. -*/ -static c3_o -_cttp_ef_http_client(u3_cttp* ctp_u, u3_noun tag, u3_noun dat) -{ - u3_creq* ceq_u; - c3_o ret_o; - - if ( c3y == u3r_sing_c("request", tag) ) { - u3_noun num, req; - c3_l num_l; - - if ( (c3n == u3r_cell(dat, &num, &req)) - || (c3n == u3r_safe_word(num, &num_l)) ) - { - u3l_log("cttp: strange request\n"); - ret_o = c3n; - } - else if ( (ceq_u = _cttp_creq_new(ctp_u, num_l, u3k(req))) ) { - _cttp_creq_start(ceq_u); - ret_o = c3y; - } - else { - ret_o = c3n; - } - } - else if ( c3y == u3r_sing_c("cancel-request", tag) ) { - c3_l num_l; - - if ( c3n == u3r_safe_word(dat, &num_l) ) { - u3l_log("cttp: strange cancel-request\n"); - ret_o = c3n; - } - else if ( (ceq_u =_cttp_creq_find(ctp_u, num_l)) ) { - _cttp_creq_quit(ceq_u); - ret_o = c3y; - } - else { - // accepted whether or not request exists - // - ret_o = c3y; - } - } - else { - u3l_log("cttp: strange effect (unknown type)\n"); - ret_o = c3n; - } - - u3z(tag); u3z(dat); - return ret_o; -} - -/* _cttp_io_talk(): notify that we're live. -*/ -static void -_cttp_io_talk(u3_auto* car_u) -{ - u3_cttp* ctp_u = (u3_cttp*)car_u; - - // XX remove u3A->sen - // - u3_noun wir = u3nt(u3i_string("http-client"), - u3dc("scot", c3__uv, ctp_u->sev_l), - u3_nul); - u3_noun cad = u3nc(c3__born, u3_nul); - - u3_auto_plan(car_u, u3_ovum_init(0, c3__i, wir, cad)); -} - -/* _cttp_io_kick(): apply effects -*/ -static c3_o -_cttp_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_cttp* ctp_u = (u3_cttp*)car_u; - - u3_noun tag, dat, i_wir; - c3_o ret_o; - - if ( (c3n == u3r_cell(wir, &i_wir, 0)) - || (c3n == u3r_cell(cad, &tag, &dat)) - || (c3n == u3r_sing_c("http-client", i_wir)) ) - { - ret_o = c3n; - } - else { - ret_o = _cttp_ef_http_client(ctp_u, u3k(tag), u3k(dat)); - } - - u3z(wir); u3z(cad); - return ret_o; -} - -/* _cttp_io_exit_cb(): free cttp. -*/ -static void -_cttp_io_exit_cb(uv_handle_t* han_u) -{ - u3_cttp* ctp_u = han_u->data; - - SSL_CTX_free(ctp_u->tls_u); - c3_free(ctp_u); -} - -/* _cttp_io_exit(): shut down cttp. -*/ -static void -_cttp_io_exit(u3_auto* car_u) -{ - u3_cttp* ctp_u = (u3_cttp*)car_u; - - // close unused handle to free [ctp_u] after h2o is done - // - uv_close((uv_handle_t*)&ctp_u->nop_u, _cttp_io_exit_cb); - - // cancel requests - // - { - u3_creq* ceq_u = ctp_u->ceq_u; - - while ( ceq_u ) { - _cttp_creq_quit(ceq_u); - ceq_u = ceq_u->nex_u; - } - } - - h2o_timeout_dispose(u3L, &ctp_u->tim_u); -} - -/* u3_cttp_io_init(): initialize http client I/O. -*/ -u3_auto* -u3_cttp_io_init(u3_pier* pir_u) -{ - u3_cttp* ctp_u = c3_calloc(sizeof(*ctp_u)); - - // link to event loop - // - ctp_u->ctx_u.loop = u3L; - - // unused handle for async close - // - uv_async_init(u3L, &ctp_u->nop_u, 0); - ctp_u->nop_u.data = ctp_u; - - // link to initialized request timeout - // - h2o_timeout_init(u3L, &ctp_u->tim_u, 300 * 1000); - ctp_u->ctx_u.io_timeout = &ctp_u->tim_u; - - // link to initialized tls ctx - // - ctp_u->tls_u = _cttp_init_tls(); - ctp_u->ctx_u.ssl_ctx = ctp_u->tls_u; - - u3_auto* car_u = &ctp_u->car_u; - car_u->nam_m = c3__cttp; - - // XX set in done_cb for %born - // - car_u->liv_o = c3y; - car_u->io.talk_f = _cttp_io_talk; - car_u->io.kick_f = _cttp_io_kick; - car_u->io.exit_f = _cttp_io_exit; - // XX retry up to N? - // - // car_u->ev.bail_f = ...; - - { - u3_noun now; - struct timeval tim_u; - gettimeofday(&tim_u, 0); - - now = u3_time_in_tv(&tim_u); - ctp_u->sev_l = u3r_mug(now); - u3z(now); - } - - return car_u; -} diff --git a/pkg/urbit/vere/io/fore.c b/pkg/urbit/vere/io/fore.c deleted file mode 100644 index 7354a8225..000000000 --- a/pkg/urbit/vere/io/fore.c +++ /dev/null @@ -1,168 +0,0 @@ -/* vere/root.c -** -*/ -#include "all.h" -#include "vere/vere.h" - -/* _fore_inject_bail(): handle failure on arbitrary injection. -*/ -static void -_fore_inject_bail(u3_ovum* egg_u, u3_noun lud) -{ - u3_auto_bail_slog(egg_u, lud); - u3l_log("pier: injected event failed\n"); - - u3_ovum_free(egg_u); -} - -/* _fore_import_bail(): handle failure on arbitrary injection. -*/ -static void -_fore_import_bail(u3_ovum* egg_u, u3_noun lud) -{ - u3_auto_bail_slog(egg_u, lud); - u3l_log("pier: import failed\n"); - - u3_ovum_free(egg_u); -} - -/* _fore_inject(): inject an arbitrary ovum from a jammed file at [pax_c]. -*/ -static void -_fore_inject(u3_auto* car_u, c3_c* pax_c) -{ - // XX soft - // - u3_noun ovo = u3ke_cue(u3m_file(pax_c)); - u3_noun riw, cad, tar, wir; - - if ( c3n == u3r_cell(ovo, &riw, &cad) ) { - u3l_log("pier: invalid ovum in -I\n"); - } - else if ( (c3n == u3a_is_cell(cad)) - || (c3n == u3a_is_atom(u3h(cad))) ) - { - u3l_log("pier: invalid card in -I ovum\n"); - } - else if ( c3n == u3r_cell(riw, &tar, &wir) ) { - u3l_log("pier: invalid wire in -I ovum\n"); - } - else if ( (c3n == u3a_is_atom(tar)) - || (4 < u3r_met(3, tar)) ) - { - u3l_log("pier: invalid target in -I wire\n"); - } - else { - { - c3_c* tag_c = u3r_string(u3h(cad)); - u3_noun ser = u3do("spat", u3k(riw)); - c3_c* wir_c = u3r_string(ser); - - u3l_log("pier: injecting %%%s event on %s\n", tag_c, wir_c); - - c3_free(tag_c); - c3_free(wir_c); - u3z(ser); - } - - u3_auto_peer( - u3_auto_plan(car_u, u3_ovum_init(0, u3k(tar), u3k(wir), u3k(cad))), - 0, 0, _fore_inject_bail); - } - - u3z(ovo); -} - -/* _fore_import(): form an ovum from jammed archive at [pax_c] and inject it. -*/ -static void -_fore_import(u3_auto* car_u, c3_c* pax_c) -{ - u3_noun arc = u3ke_cue(u3m_file(pax_c)); - u3_noun imp = u3dt("cat", 3, u3i_string("#import_"), arc); - u3_noun siz = u3r_met(3, imp); - u3_noun dat = u3nt(u3_nul, siz, imp); - - u3_noun req = u3nt(c3n, - u3nc(u3i_string("ipv4"), u3i_word(0x7f000001)), - u3nq(u3i_string("POST"), u3i_string("/"), u3_nul, dat)); - u3_noun wir = u3nc(u3i_string("http-server"), u3_nul); - u3_noun cad = u3nc(u3i_string("request-local"), req); - u3_auto_peer( - u3_auto_plan(car_u, u3_ovum_init(0, c3__e, wir, cad)), - 0, 0, _fore_import_bail); -} - -/* _fore_io_talk(): -*/ -static void -_fore_io_talk(u3_auto* car_u) -{ - u3_noun wir, cad; - - // inject fresh entropy - // - { - c3_w eny_w[16]; - c3_rand(eny_w); - - wir = u3nc(c3__arvo, u3_nul); - cad = u3nc(c3__wack, u3i_words(16, eny_w)); - - u3_auto_plan(car_u, u3_ovum_init(0, u3_blip, wir, cad)); - } - - // set verbose as per -v - // - { - c3_o lac_o = ( c3y == u3_Host.ops_u.veb ) ? c3n : c3y; - wir = u3nc(c3__arvo, u3_nul); - cad = u3nt(c3__verb, u3_nul, lac_o); - u3_auto_plan(car_u, u3_ovum_init(0, u3_blip, wir, cad)); - } - - // inject arbitrary - // - if ( u3_Host.ops_u.jin_c ) { - _fore_inject(car_u, u3_Host.ops_u.jin_c); - } - - if ( u3_Host.ops_u.imp_c ) { - _fore_import(car_u, u3_Host.ops_u.imp_c); - } -} - -/* _fore_io_kick(): handle no effects. -*/ -static c3_o -_fore_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3z(wir); u3z(cad); - return c3n; -} - -/* _fore_io_exit(): -*/ -static void -_fore_io_exit(u3_auto* car_u) -{ - c3_free(car_u); -} - -/* u3_fore_io_init(): initialize fore -*/ -u3_auto* -u3_fore_io_init(u3_pier* pir_u) -{ - u3_auto* car_u = c3_calloc(sizeof(*car_u)); - car_u->nam_m = c3__fore; - // XX set in done_cb for %wack - // - car_u->liv_o = c3y; - car_u->io.talk_f = _fore_io_talk; - car_u->io.kick_f = _fore_io_kick; - car_u->io.exit_f = _fore_io_exit; - // car_u->ev.bail_f = ...; - - return car_u; -} diff --git a/pkg/urbit/vere/io/hind.c b/pkg/urbit/vere/io/hind.c deleted file mode 100644 index b0d207e83..000000000 --- a/pkg/urbit/vere/io/hind.c +++ /dev/null @@ -1,86 +0,0 @@ -/* vere/root.c -** -*/ -#include "all.h" -#include "vere/vere.h" - -/* _hind_io_talk(): -*/ -static void -_hind_io_talk(u3_auto* car_u) -{ -} - -/* _hind_io_kick(): handle generic effects, by tag -*/ -static c3_o -_hind_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_noun tag, dat; - c3_o ret_o; - - if ( c3n == u3r_cell(cad, &tag, &dat) ) { - ret_o = c3n; - } - else { - switch ( tag ) { - default: { - ret_o = c3n; - } break; - - case c3__exit: { - ret_o = c3y; - u3l_log("<<>>\n"); - u3_pier_exit(car_u->pir_u); - } break; - - // XX fake effect, check //arvo wire? - // - case c3__trim: { - ret_o = c3y; - u3_auto_plan(car_u, u3_ovum_init(0, u3_blip, - u3nc(c3__arvo, u3_nul), u3k(cad))); - } break; - - case c3__vega: { - ret_o = c3y; - u3l_log("<<>>\n"); - } break; - - // NB: startup explicitly handled in pier.c - // - // XX review arvo upgrade scenaria - // - case c3__wend: { - ret_o = c3y; - } break; - } - } - - u3z(wir); u3z(cad); - return ret_o; -} - -/* _hind_io_exit(): -*/ -static void -_hind_io_exit(u3_auto* car_u) -{ - c3_free(car_u); -} - -/* u3_hind_io_init(): -*/ -u3_auto* -u3_hind_io_init(u3_pier* pir_u) -{ - u3_auto* car_u = c3_calloc(sizeof(*car_u)); - car_u->nam_m = c3__hind; - car_u->liv_o = c3y; - car_u->io.talk_f = _hind_io_talk; - car_u->io.kick_f = _hind_io_kick; - car_u->io.exit_f = _hind_io_exit; - // car_u->ev.bail_f = ...; - - return car_u; -} diff --git a/pkg/urbit/vere/io/http.c b/pkg/urbit/vere/io/http.c deleted file mode 100644 index 403a9c35e..000000000 --- a/pkg/urbit/vere/io/http.c +++ /dev/null @@ -1,2292 +0,0 @@ -/* vere/http.c -** -*/ -#include "all.h" -#include "vere/vere.h" -#include -#include -#include - -typedef struct _u3_h2o_serv { - h2o_globalconf_t fig_u; // h2o global config - h2o_context_t ctx_u; // h2o ctx - h2o_accept_ctx_t cep_u; // h2o accept ctx - h2o_hostconf_t* hos_u; // h2o host config - h2o_handler_t* han_u; // h2o request handler -} u3_h2o_serv; - -/* u3_rsat: http request state. -*/ - typedef enum { - u3_rsat_init = 0, // initialized - u3_rsat_plan = 1, // planned - u3_rsat_ripe = 2 // responded - } u3_rsat; - -/* u3_hreq: incoming http request. -*/ - typedef struct _u3_hreq { - h2o_req_t* rec_u; // h2o request - c3_w seq_l; // sequence within connection - u3_rsat sat_e; // request state - uv_timer_t* tim_u; // timeout - void* gen_u; // response generator - struct _u3_hcon* hon_u; // connection backlink - struct _u3_hreq* nex_u; // next in connection's list - struct _u3_hreq* pre_u; // next in connection's list - } u3_hreq; - -/* u3_hcon: incoming http connection. -*/ - typedef struct _u3_hcon { - uv_tcp_t wax_u; // client stream handler - h2o_conn_t* con_u; // h2o connection - h2o_socket_t* sok_u; // h2o connection socket - c3_w ipf_w; // client ipv4 - c3_w coq_l; // connection number - c3_w seq_l; // next request number - struct _u3_http* htp_u; // server backlink - struct _u3_hreq* req_u; // request list - struct _u3_hcon* nex_u; // next in server's list - struct _u3_hcon* pre_u; // next in server's list - } u3_hcon; - -/* u3_http: http server. -*/ - typedef struct _u3_http { - uv_tcp_t wax_u; // server stream handler - void* h2o_u; // libh2o configuration - c3_w sev_l; // server number - c3_w coq_l; // next connection number - c3_s por_s; // running port - c3_o dis; // manually-configured port - c3_o sec; // logically secure - c3_o lop; // loopback-only - c3_o liv; // c3n == shutdown - struct _u3_hcon* hon_u; // connection list - struct _u3_http* nex_u; // next in list - struct _u3_httd* htd_u; // device backpointer - } u3_http; - -/* u3_form: http config from %eyre -*/ - typedef struct _u3_form { - c3_o pro; // proxy - c3_o log; // keep access log - c3_o red; // redirect to HTTPS - uv_buf_t key_u; // PEM RSA private key - uv_buf_t cer_u; // PEM certificate chain - } u3_form; - -/* u3_hfig: general http configuration -*/ - typedef struct _u3_hfig { - u3_form* for_u; // config from %eyre - struct _u3_hreq* seq_u; // open slog requests - uv_timer_t* sit_u; // slog stream heartbeat - } u3_hfig; - -/* u3_httd: general http device -*/ -typedef struct _u3_httd { - u3_auto car_u; // driver - c3_l sev_l; // instance number - u3_hfig fig_u; // http configuration - u3_http* htp_u; // http servers - SSL_CTX* tls_u; // server SSL_CTX* -} u3_httd; - -static void _http_serv_free(u3_http* htp_u); -static void _http_serv_start_all(u3_httd* htd_u); -static void _http_form_free(u3_httd* htd_u); - -static const c3_i TCP_BACKLOG = 16; -static const c3_w HEARTBEAT_TIMEOUT = 20 * 1000; - -/* _http_close_cb(): uv_close_cb that just free's handle -*/ -static void -_http_close_cb(uv_handle_t* han_u) -{ - c3_free(han_u); -} - -/* _http_vec_to_meth(): convert h2o_iovec_t to meth -*/ -static u3_weak -_http_vec_to_meth(h2o_iovec_t vec_u) -{ - return ( 0 == strncmp(vec_u.base, "GET", vec_u.len) ) ? u3i_string("GET") : - ( 0 == strncmp(vec_u.base, "PUT", vec_u.len) ) ? u3i_string("PUT") : - ( 0 == strncmp(vec_u.base, "POST", vec_u.len) ) ? u3i_string("POST") : - ( 0 == strncmp(vec_u.base, "HEAD", vec_u.len) ) ? u3i_string("HEAD") : - ( 0 == strncmp(vec_u.base, "CONNECT", vec_u.len) ) ? u3i_string("CONNECT") : - ( 0 == strncmp(vec_u.base, "DELETE", vec_u.len) ) ? u3i_string("DELETE") : - ( 0 == strncmp(vec_u.base, "OPTIONS", vec_u.len) ) ? u3i_string("OPTIONS") : - ( 0 == strncmp(vec_u.base, "TRACE", vec_u.len) ) ? u3i_string("TRACE") : - // TODO ?? - // ( 0 == strncmp(vec_u.base, "PATCH", vec_u.len) ) ? c3__patc : - u3_none; -} - -/* _http_vec_to_atom(): convert h2o_iovec_t to atom (cord) -*/ -static u3_noun -_http_vec_to_atom(h2o_iovec_t vec_u) -{ - return u3i_bytes(vec_u.len, (const c3_y*)vec_u.base); -} - -/* _http_vec_to_octs(): convert h2o_iovec_t to (unit octs) -*/ -static u3_noun -_http_vec_to_octs(h2o_iovec_t vec_u) -{ - if ( 0 == vec_u.len ) { - return u3_nul; - } - - // XX correct size_t -> atom? - return u3nt(u3_nul, u3i_chubs(1, (const c3_d*)&vec_u.len), - _http_vec_to_atom(vec_u)); -} - -/* _cttp_bods_free(): free body structure. -*/ -static void -_cttp_bods_free(u3_hbod* bod_u) -{ - while ( bod_u ) { - u3_hbod* nex_u = bod_u->nex_u; - - c3_free(bod_u); - bod_u = nex_u; - } -} - -/* _cttp_bod_from_octs(): translate octet-stream noun into body. -*/ -static u3_hbod* -_cttp_bod_from_octs(u3_noun oct) -{ - c3_w len_w; - - if ( !_(u3a_is_cat(u3h(oct))) ) { // 2GB max - u3m_bail(c3__fail); return 0; - } - len_w = u3h(oct); - - { - u3_hbod* bod_u = c3_malloc(1 + len_w + sizeof(*bod_u)); - bod_u->hun_y[len_w] = 0; - bod_u->len_w = len_w; - u3r_bytes(0, len_w, bod_u->hun_y, u3t(oct)); - - bod_u->nex_u = 0; - - u3z(oct); - return bod_u; - } -} - -/* _cttp_bods_to_vec(): translate body buffers to array of h2o_iovec_t -*/ -static h2o_iovec_t* -_cttp_bods_to_vec(u3_hbod* bod_u, c3_w* tot_w) -{ - h2o_iovec_t* vec_u; - c3_w len_w; - - { - u3_hbod* bid_u = bod_u; - len_w = 0; - - while( bid_u ) { - len_w++; - bid_u = bid_u->nex_u; - } - } - - vec_u = c3_malloc(sizeof(h2o_iovec_t) * len_w); - len_w = 0; - - while( bod_u ) { - vec_u[len_w] = h2o_iovec_init(bod_u->hun_y, bod_u->len_w); - len_w++; - bod_u = bod_u->nex_u; - } - - *tot_w = len_w; - - return vec_u; -} - -/* _http_heds_to_noun(): convert h2o_header_t to (list (pair @t @t)) -*/ -static u3_noun -_http_heds_to_noun(h2o_header_t* hed_u, c3_d hed_d) -{ - u3_noun hed = u3_nul; - c3_d dex_d = hed_d; - - h2o_header_t deh_u; - - while ( 0 < dex_d ) { - deh_u = hed_u[--dex_d]; - hed = u3nc(u3nc(_http_vec_to_atom(*deh_u.name), - _http_vec_to_atom(deh_u.value)), hed); - } - - return hed; -} - -/* _http_heds_free(): free header linked list -*/ -static void -_http_heds_free(u3_hhed* hed_u) -{ - while ( hed_u ) { - u3_hhed* nex_u = hed_u->nex_u; - - c3_free(hed_u->nam_c); - c3_free(hed_u->val_c); - c3_free(hed_u); - hed_u = nex_u; - } -} - -/* _http_hed_new(): create u3_hhed from nam/val cords -*/ -static u3_hhed* -_http_hed_new(u3_atom nam, u3_atom val) -{ - c3_w nam_w = u3r_met(3, nam); - c3_w val_w = u3r_met(3, val); - u3_hhed* hed_u = c3_malloc(sizeof(*hed_u)); - - hed_u->nam_c = c3_malloc(1 + nam_w); - hed_u->val_c = c3_malloc(1 + val_w); - hed_u->nam_c[nam_w] = 0; - hed_u->val_c[val_w] = 0; - hed_u->nex_u = 0; - hed_u->nam_w = nam_w; - hed_u->val_w = val_w; - - u3r_bytes(0, nam_w, (c3_y*)hed_u->nam_c, nam); - u3r_bytes(0, val_w, (c3_y*)hed_u->val_c, val); - - return hed_u; -} - -/* _http_heds_from_noun(): convert (list (pair @t @t)) to u3_hhed -*/ -static u3_hhed* -_http_heds_from_noun(u3_noun hed) -{ - u3_noun deh = hed; - u3_noun i_hed; - - u3_hhed* hed_u = 0; - - while ( u3_nul != hed ) { - i_hed = u3h(hed); - u3_hhed* nex_u = _http_hed_new(u3h(i_hed), u3t(i_hed)); - nex_u->nex_u = hed_u; - - hed_u = nex_u; - hed = u3t(hed); - } - - u3z(deh); - return hed_u; -} - -/* _http_req_find(): find http request in connection by sequence. -*/ -static u3_hreq* -_http_req_find(u3_hcon* hon_u, c3_w seq_l) -{ - u3_hreq* req_u = hon_u->req_u; - - // XX glories of linear search - // - while ( req_u ) { - if ( seq_l == req_u->seq_l ) { - return req_u; - } - req_u = req_u->nex_u; - } - return 0; -} - -/* _http_req_link(): link http request to connection -*/ -static void -_http_req_link(u3_hcon* hon_u, u3_hreq* req_u) -{ - req_u->hon_u = hon_u; - req_u->seq_l = hon_u->seq_l++; - req_u->nex_u = hon_u->req_u; - - if ( 0 != req_u->nex_u ) { - req_u->nex_u->pre_u = req_u; - } - hon_u->req_u = req_u; -} - -/* _http_req_unlink(): remove http request from connection -*/ -static void -_http_req_unlink(u3_hreq* req_u) -{ - if ( 0 != req_u->pre_u ) { - req_u->pre_u->nex_u = req_u->nex_u; - - if ( 0 != req_u->nex_u ) { - req_u->nex_u->pre_u = req_u->pre_u; - } - } - else { - req_u->hon_u->req_u = req_u->nex_u; - - if ( 0 != req_u->nex_u ) { - req_u->nex_u->pre_u = 0; - } - } -} - -/* _http_seq_link(): store slog stream request in state -*/ -static void -_http_seq_link(u3_hcon* hon_u, u3_hreq* req_u) -{ - u3_hfig* fig_u = &hon_u->htp_u->htd_u->fig_u; - req_u->hon_u = hon_u; - req_u->seq_l = hon_u->seq_l++; - req_u->nex_u = fig_u->seq_u; - - if ( 0 != req_u->nex_u ) { - req_u->nex_u->pre_u = req_u; - } - fig_u->seq_u = req_u; -} - -/* _http_seq_unlink(): remove slog stream request from state -*/ -static void -_http_seq_unlink(u3_hreq* req_u) -{ - u3_hfig* fig_u = &req_u->hon_u->htp_u->htd_u->fig_u; - if ( 0 != req_u->pre_u ) { - req_u->pre_u->nex_u = req_u->nex_u; - - if ( 0 != req_u->nex_u ) { - req_u->nex_u->pre_u = req_u->pre_u; - } - } - else { - fig_u->seq_u = req_u->nex_u; - - if ( 0 != req_u->nex_u ) { - req_u->nex_u->pre_u = 0; - } - } -} - -/* _http_req_to_duct(): translate srv/con/req to duct -*/ -static u3_noun -_http_req_to_duct(u3_hreq* req_u) -{ - return u3nc(u3i_string("http-server"), - u3nq(u3dc("scot", c3__uv, req_u->hon_u->htp_u->sev_l), - u3dc("scot", c3__ud, req_u->hon_u->coq_l), - u3dc("scot", c3__ud, req_u->seq_l), - u3_nul)); -} - -/* _http_req_kill(): kill http request in %eyre. -*/ -static void -_http_req_kill(u3_hreq* req_u) -{ - u3_httd* htd_u = req_u->hon_u->htp_u->htd_u; - u3_noun wir = _http_req_to_duct(req_u); - u3_noun cad = u3nc(u3i_string("cancel-request"), u3_nul); - - u3_auto_plan(&htd_u->car_u, u3_ovum_init(0, c3__e, wir, cad)); -} - -typedef struct _u3_hgen { - h2o_generator_t neg_u; // response callbacks - c3_o red; // ready to send - c3_o dun; // done sending - u3_hbod* bod_u; // pending body - u3_hbod* nud_u; // pending free - u3_hhed* hed_u; // pending free - u3_hreq* req_u; // originating request -} u3_hgen; - -/* _http_req_close(): clean up & deallocate request -*/ -static void -_http_req_close(u3_hreq* req_u) -{ - // client canceled request before response - // - if ( u3_rsat_plan == req_u->sat_e ) { - _http_req_kill(req_u); - } - - if ( 0 != req_u->tim_u ) { - uv_close((uv_handle_t*)req_u->tim_u, _http_close_cb); - req_u->tim_u = 0; - } -} - -/* _http_req_done(): request finished, deallocation callback -*/ -static void -_http_req_done(void* ptr_v) -{ - u3_hreq* req_u = (u3_hreq*)ptr_v; - _http_req_close(req_u); - _http_req_unlink(req_u); -} - -/* _http_seq_done(): slog stream request finished, deallocation callback -*/ -static void -_http_seq_done(void* ptr_v) -{ - u3_hreq* seq_u = (u3_hreq*)ptr_v; - _http_req_close(seq_u); - _http_seq_unlink(seq_u); -} - -/* _http_req_timer_cb(): request timeout callback -*/ -static void -_http_req_timer_cb(uv_timer_t* tim_u) -{ - u3_hreq* req_u = tim_u->data; - - if ( u3_rsat_plan == req_u->sat_e ) { - _http_req_kill(req_u); - req_u->sat_e = u3_rsat_ripe; - - c3_c* msg_c = "gateway timeout"; - h2o_send_error_generic(req_u->rec_u, 504, msg_c, msg_c, 0); - } -} - -/* _http_req_new(): receive standard http request. -*/ -static u3_hreq* -_http_req_new(u3_hcon* hon_u, h2o_req_t* rec_u) -{ - u3_hreq* req_u = h2o_mem_alloc_shared(&rec_u->pool, sizeof(*req_u), - _http_req_done); - req_u->rec_u = rec_u; - req_u->sat_e = u3_rsat_init; - req_u->tim_u = 0; - req_u->gen_u = 0; - req_u->pre_u = 0; - - _http_req_link(hon_u, req_u); - - return req_u; -} - -/* _http_seq_new(): receive slog stream http request. -*/ -static u3_hreq* -_http_seq_new(u3_hcon* hon_u, h2o_req_t* rec_u) -{ - u3_hreq* req_u = h2o_mem_alloc_shared(&rec_u->pool, sizeof(*req_u), - _http_seq_done); - req_u->rec_u = rec_u; - req_u->sat_e = u3_rsat_plan; - req_u->tim_u = 0; - req_u->gen_u = 0; - req_u->pre_u = 0; - - _http_seq_link(hon_u, req_u); - - return req_u; -} - -/* _http_req_dispatch(): dispatch http request to %eyre -*/ -static void -_http_req_dispatch(u3_hreq* req_u, u3_noun req) -{ - c3_assert(u3_rsat_init == req_u->sat_e); - req_u->sat_e = u3_rsat_plan; - - { - u3_http* htp_u = req_u->hon_u->htp_u; - u3_httd* htd_u = htp_u->htd_u; - u3_noun wir = _http_req_to_duct(req_u); - u3_noun cad; - - { - u3_noun adr = u3nc(c3__ipv4, u3i_words(1, &req_u->hon_u->ipf_w)); - // XX loopback automatically secure too? - // - u3_noun dat = u3nt(htp_u->sec, adr, req); - - cad = ( c3y == req_u->hon_u->htp_u->lop ) - ? u3nc(u3i_string("request-local"), dat) - : u3nc(u3i_string("request"), dat); - } - - u3_auto_plan(&htd_u->car_u, u3_ovum_init(0, c3__e, wir, cad)); - } -} - -/* _http_hgen_dispose(): dispose response generator and buffers -*/ -static void -_http_hgen_dispose(void* ptr_v) -{ - u3_hgen* gen_u = (u3_hgen*)ptr_v; - _http_heds_free(gen_u->hed_u); - gen_u->hed_u = 0; - _cttp_bods_free(gen_u->nud_u); - gen_u->nud_u = 0; - _cttp_bods_free(gen_u->bod_u); - gen_u->bod_u = 0; -} - -static void -_http_hgen_send(u3_hgen* gen_u) -{ - c3_assert( c3y == gen_u->red ); - - u3_hreq* req_u = gen_u->req_u; - h2o_req_t* rec_u = req_u->rec_u; - - c3_w len_w; - h2o_iovec_t* vec_u = _cttp_bods_to_vec(gen_u->bod_u, &len_w); - - // not ready again until _proceed - // - gen_u->red = c3n; - - // stash [bod_u] to free later - // - _cttp_bods_free(gen_u->nud_u); - gen_u->nud_u = gen_u->bod_u; - gen_u->bod_u = 0; - - if ( c3n == gen_u->dun ) { - h2o_send(rec_u, vec_u, len_w, H2O_SEND_STATE_IN_PROGRESS); - uv_timer_start(req_u->tim_u, _http_req_timer_cb, 45 * 1000, 0); - } - else { - // close connection if shutdown pending - // - u3_h2o_serv* h2o_u = req_u->hon_u->htp_u->h2o_u; - - if ( 0 != h2o_u->ctx_u.shutdown_requested ) { - rec_u->http1_is_persistent = 0; - } - - h2o_send(rec_u, vec_u, len_w, H2O_SEND_STATE_FINAL); - } - - c3_free(vec_u); -} - -/* _http_hgen_stop(): h2o is closing an in-progress response. -*/ -static void -_http_hgen_stop(h2o_generator_t* neg_u, h2o_req_t* rec_u) -{ - u3_hgen* gen_u = (u3_hgen*)neg_u; - - // response not complete, enqueue cancel - // - if ( c3n == gen_u->dun ) { - _http_req_kill(gen_u->req_u); - } -} - -/* _http_hgen_proceed(): h2o is ready for more response data. -*/ -static void -_http_hgen_proceed(h2o_generator_t* neg_u, h2o_req_t* rec_u) -{ - u3_hgen* gen_u = (u3_hgen*)neg_u; - u3_hreq* req_u = gen_u->req_u; - - // sanity check - c3_assert( rec_u == req_u->rec_u ); - - gen_u->red = c3y; - - if ( 0 != gen_u->bod_u || c3y == gen_u->dun ) { - _http_hgen_send(gen_u); - } -} - -/* _http_start_respond(): write a [%http-response %start ...] to h2o_req_t->res -*/ -static void -_http_start_respond(u3_hreq* req_u, - u3_noun status, - u3_noun headers, - u3_noun data, - u3_noun complete) -{ - // u3l_log("start\n"); - - if ( u3_rsat_plan != req_u->sat_e ) { - //u3l_log("duplicate response\n"); - return; - } - - req_u->sat_e = u3_rsat_ripe; - - uv_timer_stop(req_u->tim_u); - - h2o_req_t* rec_u = req_u->rec_u; - - rec_u->res.status = status; - rec_u->res.reason = (status < 200) ? "weird" : - (status < 300) ? "ok" : - (status < 400) ? "moved" : - (status < 500) ? "missing" : - "hosed"; - - u3_hhed* hed_u = _http_heds_from_noun(u3k(headers)); - u3_hhed* deh_u = hed_u; - - c3_i has_len_i = 0; - - while ( 0 != hed_u ) { - if ( 0 == strncmp(hed_u->nam_c, "content-length", 14) ) { - has_len_i = 1; - } - else { - h2o_add_header_by_str(&rec_u->pool, &rec_u->res.headers, - hed_u->nam_c, hed_u->nam_w, 0, 0, - hed_u->val_c, hed_u->val_w); - } - - hed_u = hed_u->nex_u; - } - - u3_hgen* gen_u = h2o_mem_alloc_shared(&rec_u->pool, sizeof(*gen_u), - _http_hgen_dispose); - gen_u->neg_u = (h2o_generator_t){ _http_hgen_proceed, _http_hgen_stop }; - gen_u->red = c3y; - gen_u->dun = complete; - gen_u->bod_u = ( u3_nul == data ) ? - 0 : _cttp_bod_from_octs(u3k(u3t(data))); - gen_u->nud_u = 0; - gen_u->hed_u = deh_u; - gen_u->req_u = req_u; - - // if we don't explicitly set this field, h2o will send with - // transfer-encoding: chunked - // - if ( 1 == has_len_i ) { - rec_u->res.content_length = ( 0 == gen_u->bod_u ) ? - 0 : gen_u->bod_u->len_w; - } - - req_u->gen_u = gen_u; - - h2o_start_response(rec_u, &gen_u->neg_u); - - _http_hgen_send(gen_u); - - u3z(status); u3z(headers); u3z(data); u3z(complete); -} - -/* _http_continue_respond(): write a [%http-response %continue ...] to - * h2o_req_t->res -*/ -static void -_http_continue_respond(u3_hreq* req_u, - /* u3_noun status, */ - /* u3_noun headers, */ - u3_noun data, - u3_noun complete) -{ - // u3l_log("continue\n"); - - // XX add sequence numbers for %continue effects? - // Arvo does not (currently) guarantee effect idempotence!! - - // response has not yet been started - if ( u3_rsat_ripe != req_u->sat_e ) { - // u3l_log("duplicate response\n"); - return; - } - - u3_hgen* gen_u = req_u->gen_u; - - uv_timer_stop(req_u->tim_u); - - // XX proposed sequence number safety check - // if ( sequence <= gen_u->sequence ) { - // return; - // } - // - // c3_assert( sequence == ++gen_u->sequence ); - - gen_u->dun = complete; - - if ( u3_nul != data ) { - u3_hbod* bod_u = _cttp_bod_from_octs(u3k(u3t(data))); - - if ( 0 == gen_u->bod_u ) { - gen_u->bod_u = bod_u; - } - else { - u3_hbod* pre_u = gen_u->bod_u; - - while ( 0 != pre_u->nex_u ) { - pre_u = pre_u->nex_u; - } - - pre_u->nex_u = bod_u; - } - } - - if ( c3y == gen_u->red ) { - _http_hgen_send(gen_u); - } - - u3z(data); u3z(complete); -} - -/* _http_rec_to_httq(): convert h2o_req_t to httq -*/ -static u3_weak -_http_rec_to_httq(h2o_req_t* rec_u) -{ - u3_noun med = _http_vec_to_meth(rec_u->method); - - if ( u3_none == med ) { - return u3_none; - } - - u3_noun url = _http_vec_to_atom(rec_u->path); - u3_noun hed = _http_heds_to_noun(rec_u->headers.entries, - rec_u->headers.size); - - // restore host header - hed = u3nc(u3nc(u3i_string("host"), - _http_vec_to_atom(rec_u->authority)), - hed); - - u3_noun bod = _http_vec_to_octs(rec_u->entity); - - return u3nq(med, url, hed, bod); -} - -typedef struct _h2o_uv_sock { // see private st_h2o_uv_socket_t - h2o_socket_t sok_u; // socket - uv_stream_t* han_u; // client stream handler (u3_hcon) -} h2o_uv_sock; - -/* _http_rec_sock(): u3 http connection from h2o request; hacky. -*/ -static u3_hcon* -_http_rec_sock(h2o_req_t* rec_u) -{ - h2o_uv_sock* suv_u = (h2o_uv_sock*)rec_u->conn-> - callbacks->get_socket(rec_u->conn); - u3_hcon* hon_u = (u3_hcon*)suv_u->han_u; - - // sanity check - // - c3_assert( hon_u->sok_u == &suv_u->sok_u ); - - return hon_u; -} - -/* _http_req_prepare(): creates u3 req from h2o req and initializes its timer -*/ -static u3_hreq* -_http_req_prepare(h2o_req_t* rec_u, - u3_hreq* (*new_f)(u3_hcon*, h2o_req_t*)) -{ - u3_hcon* hon_u = _http_rec_sock(rec_u); - u3_hreq* seq_u = new_f(hon_u, rec_u); - - seq_u->tim_u = c3_malloc(sizeof(*seq_u->tim_u)); - seq_u->tim_u->data = seq_u; - uv_timer_init(u3L, seq_u->tim_u); - uv_timer_start(seq_u->tim_u, _http_req_timer_cb, 600 * 1000, 0); - - return seq_u; -} - -/* _http_seq_continue(): respond to slogstream request based on auth scry result -*/ -static void -_http_seq_continue(void* vod_p, u3_noun nun) -{ - h2o_req_t* rec_u = vod_p; - u3_weak aut = u3r_at(7, nun); - - // if the request is authenticated properly, send slogstream/sse headers - // - //TODO authentication might expire after the connection has been opened! - // eyre could notify us about this, or we could re-check periodically. - // - if ( c3y == aut ) { - u3_hreq* req_u = _http_req_prepare(rec_u, _http_seq_new); - u3_noun hed = u3nl(u3nc(u3i_string("Content-Type"), - u3i_string("text/event-stream")), - u3nc(u3i_string("Cache-Control"), - u3i_string("no-cache")), - u3nc(u3i_string("Connection"), - u3i_string("keep-alive")), - u3_none); - - _http_start_respond(req_u, 200, hed, u3_nul, c3n); - } - // if the scry failed, the result is unexpected, or there is no auth, - // respond with the appropriate status code - // - else { - //NOTE we use req_new because we don't want to consider this a slog stream - // request, but this means we need to manually skip past the "in event - // queue" state on the hreq. - u3_hreq* req_u = _http_req_prepare(rec_u, _http_req_new); - req_u->sat_e = u3_rsat_plan; - - if ( c3n == aut ) { - _http_start_respond(req_u, 403, u3_nul, u3_nul, c3y); - } - else if ( u3_none == aut ) { - u3l_log("http: authentication scry failed\n"); - _http_start_respond(req_u, 500, u3_nul, u3_nul, c3y); - } - else { - u3m_p("http: weird authentication scry result", aut); - _http_start_respond(req_u, 500, u3_nul, u3_nul, c3y); - } - } - - u3z(nun); -} - -/* _http_seq_accept(): handle incoming http request on slogstream endpoint -*/ -static c3_i -_http_seq_accept(h2o_handler_t* han_u, h2o_req_t* rec_u) -{ - // try to find a cookie header - // - u3_weak coo = u3_none; - { - //TODO http2 allows the client to put multiple 'cookie' headers - ssize_t hin_i = h2o_find_header_by_str(&rec_u->headers, "cookie", 6, -1); - if ( hin_i != -1 ) { - coo = _http_vec_to_atom(rec_u->headers.entries[hin_i].value); - } - } - - // if there is no cookie header, it can't possibly be authenticated - // - if ( u3_none == coo ) { - u3_hreq* req_u = _http_req_prepare(rec_u, _http_req_new); - req_u->sat_e = u3_rsat_plan; - _http_start_respond(req_u, 403, u3_nul, u3_nul, c3y); - } - // if there is a cookie, scry to see if it constitutes authentication - // - else { - u3_hcon* hon_u = _http_rec_sock(rec_u); - - u3_noun pax = u3nq(u3i_string("authenticated"), - u3i_string("cookie"), - u3dc("scot", 't', coo), - u3_nul); - u3_pier_peek_last(hon_u->htp_u->htd_u->car_u.pir_u, u3_nul, c3__ex, - u3_nul, pax, rec_u, _http_seq_continue); - } - - return 0; -} - -/* _http_sat_accept(): handle incoming http request on status endpoint -*/ -static c3_i -_http_sat_accept(h2o_handler_t* han_u, h2o_req_t* rec_u) -{ - c3_o bus_o; - { - u3_hcon* hon_u = _http_rec_sock(rec_u); - u3_httd* htd_u = hon_u->htp_u->htd_u; - u3_pier* pir_u = htd_u->car_u.pir_u; - bus_o = pir_u->god_u->pin_o; - } - - if ( c3y == bus_o ) { - rec_u->res.status = 429; - rec_u->res.reason = "busy"; - } - else { - rec_u->res.status = 204; - rec_u->res.reason = "no content"; - } - - rec_u->res.content_length = 0; - h2o_send_inline(rec_u, NULL, 0); - - return 0; -} - -/* _http_rec_accept(); handle incoming http request from h2o. -*/ -static c3_i -_http_rec_accept(h2o_handler_t* han_u, h2o_req_t* rec_u) -{ - u3_weak req = _http_rec_to_httq(rec_u); - - if ( u3_none == req ) { - if ( (u3C.wag_w & u3o_verbose) ) { - u3l_log("strange %.*s request\n", (c3_i)rec_u->method.len, - rec_u->method.base); - } - c3_c* msg_c = "bad request"; - h2o_send_error_generic(rec_u, 400, msg_c, msg_c, 0); - } - else { - u3_hreq* req_u = _http_req_prepare(rec_u, _http_req_new); - _http_req_dispatch(req_u, req); - } - - return 0; -} - -/* _http_conn_find(): find http connection in server by sequence. -*/ -static u3_hcon* -_http_conn_find(u3_http *htp_u, c3_w coq_l) -{ - u3_hcon* hon_u = htp_u->hon_u; - - // XX glories of linear search - // - while ( hon_u ) { - if ( coq_l == hon_u->coq_l ) { - return hon_u; - } - hon_u = hon_u->nex_u; - } - return 0; -} - -/* _http_conn_link(): link http request to connection -*/ -static void -_http_conn_link(u3_http* htp_u, u3_hcon* hon_u) -{ - hon_u->htp_u = htp_u; - hon_u->coq_l = htp_u->coq_l++; - hon_u->nex_u = htp_u->hon_u; - - if ( 0 != hon_u->nex_u ) { - hon_u->nex_u->pre_u = hon_u; - } - htp_u->hon_u = hon_u; -} - -/* _http_conn_unlink(): remove http request from connection -*/ -static void -_http_conn_unlink(u3_hcon* hon_u) -{ - if ( 0 != hon_u->pre_u ) { - hon_u->pre_u->nex_u = hon_u->nex_u; - - if ( 0 != hon_u->nex_u ) { - hon_u->nex_u->pre_u = hon_u->pre_u; - } - } - else { - hon_u->htp_u->hon_u = hon_u->nex_u; - - if ( 0 != hon_u->nex_u ) { - hon_u->nex_u->pre_u = 0; - } - } -} - -/* _http_conn_free(): free http connection on close. -*/ -static void -_http_conn_free(uv_handle_t* han_t) -{ - u3_hcon* hon_u = (u3_hcon*)han_t; - u3_http* htp_u = hon_u->htp_u; - u3_h2o_serv* h2o_u = htp_u->h2o_u; - - c3_assert( 0 == hon_u->req_u ); - -#if 0 - { - c3_w len_w = 0; - - u3_hcon* noh_u = htp_u->hon_u; - - while ( 0 != noh_u ) { - len_w++; - noh_u = noh_u->nex_u; - } - - u3l_log("http conn free %d of %u server %d\n", hon_u->coq_l, len_w, htp_u->sev_l); - } -#endif - - _http_conn_unlink(hon_u); - -#if 0 - { - c3_w len_w = 0; - - u3_hcon* noh_u = htp_u->hon_u; - - while ( 0 != noh_u ) { - len_w++; - noh_u = noh_u->nex_u; - } - - u3l_log("http conn free %u remaining\n", len_w); - } -#endif - - if ( (0 == htp_u->hon_u) && (0 != h2o_u->ctx_u.shutdown_requested) ) { -#if 0 - u3l_log("http conn free %d free server %d\n", hon_u->coq_l, htp_u->sev_l); -#endif - _http_serv_free(htp_u); - } - - c3_free(hon_u); -} - -/* _http_conn_new(): create and accept http connection. -*/ -static u3_hcon* -_http_conn_new(u3_http* htp_u) -{ - u3_hcon* hon_u = c3_malloc(sizeof(*hon_u)); - hon_u->seq_l = 1; - hon_u->ipf_w = 0; - hon_u->req_u = 0; - hon_u->sok_u = 0; - hon_u->con_u = 0; - hon_u->pre_u = 0; - - _http_conn_link(htp_u, hon_u); - -#if 0 - u3l_log("http conn neww %d server %d\n", hon_u->coq_l, htp_u->sev_l); -#endif - - return hon_u; -} - -/* _http_serv_find(): find http server by sequence. -*/ -static u3_http* -_http_serv_find(u3_httd* htd_u, c3_l sev_l) -{ - u3_http* htp_u = htd_u->htp_u; - - // XX glories of linear search - // - while ( htp_u ) { - if ( sev_l == htp_u->sev_l ) { - return htp_u; - } - htp_u = htp_u->nex_u; - } - return 0; -} - -/* _http_serv_link(): link http server to global state. -*/ -static void -_http_serv_link(u3_httd* htd_u, u3_http* htp_u) -{ - // XX link elsewhere initially, relink on start? - - if ( 0 != htd_u->htp_u ) { - htp_u->sev_l = 1 + htd_u->htp_u->sev_l; - } - else { - htp_u->sev_l = htd_u->sev_l; - } - - htp_u->nex_u = htd_u->htp_u; - htp_u->htd_u = htd_u; - htd_u->htp_u = htp_u; -} - -/* _http_serv_unlink(): remove http server from global state. -*/ -static void -_http_serv_unlink(u3_http* htp_u) -{ - // XX link elsewhere initially, relink on start? -#if 0 - u3l_log("http serv unlink %d\n", htp_u->sev_l); -#endif - u3_http* pre_u = htp_u->htd_u->htp_u; - - if ( pre_u == htp_u ) { - pre_u = htp_u->nex_u; - } - else { - // XX glories of linear search - // - while ( pre_u ) { - if ( pre_u->nex_u == htp_u ) { - pre_u->nex_u = htp_u->nex_u; - } - else pre_u = pre_u->nex_u; - } - } -} - -/* _http_h2o_context_dispose(): h2o_context_dispose, inlined and cleaned up. -*/ -static void -_http_h2o_context_dispose(h2o_context_t* ctx) -{ - h2o_globalconf_t *config = ctx->globalconf; - size_t i, j; - - for (i = 0; config->hosts[i] != NULL; ++i) { - h2o_hostconf_t *hostconf = config->hosts[i]; - for (j = 0; j != hostconf->paths.size; ++j) { - h2o_pathconf_t *pathconf = hostconf->paths.entries + j; - h2o_context_dispose_pathconf_context(ctx, pathconf); - } - h2o_context_dispose_pathconf_context(ctx, &hostconf->fallback_path); - } - - c3_free(ctx->_pathconfs_inited.entries); - c3_free(ctx->_module_configs); - - h2o_timeout_dispose(ctx->loop, &ctx->zero_timeout); - h2o_timeout_dispose(ctx->loop, &ctx->hundred_ms_timeout); - h2o_timeout_dispose(ctx->loop, &ctx->handshake_timeout); - h2o_timeout_dispose(ctx->loop, &ctx->http1.req_timeout); - h2o_timeout_dispose(ctx->loop, &ctx->http2.idle_timeout); - - // NOTE: linked in http2/connection, never unlinked - h2o_timeout_unlink(&ctx->http2._graceful_shutdown_timeout); - - h2o_timeout_dispose(ctx->loop, &ctx->http2.graceful_shutdown_timeout); - h2o_timeout_dispose(ctx->loop, &ctx->proxy.io_timeout); - h2o_timeout_dispose(ctx->loop, &ctx->one_sec_timeout); - - h2o_filecache_destroy(ctx->filecache); - ctx->filecache = NULL; - - /* clear storage */ - for (i = 0; i != ctx->storage.size; ++i) { - h2o_context_storage_item_t *item = ctx->storage.entries + i; - if (item->dispose != NULL) { - item->dispose(item->data); - } - } - - c3_free(ctx->storage.entries); - - h2o_multithread_unregister_receiver(ctx->queue, &ctx->receivers.hostinfo_getaddr); - h2o_multithread_destroy_queue(ctx->queue); - - if (ctx->_timestamp_cache.value != NULL) { - h2o_mem_release_shared(ctx->_timestamp_cache.value); - } - - // NOTE: explicit uv_run removed -} - -/* _http_serv_really_free(): free http server. -*/ -static void -_http_serv_really_free(u3_http* htp_u) -{ - c3_assert( 0 == htp_u->hon_u ); - - if ( 0 != htp_u->h2o_u ) { - u3_h2o_serv* h2o_u = htp_u->h2o_u; - - if ( 0 != h2o_u->cep_u.ssl_ctx ) { - SSL_CTX_free(h2o_u->cep_u.ssl_ctx); - } - - h2o_config_dispose(&h2o_u->fig_u); - - // XX h2o_cleanup_thread if not restarting? - - c3_free(htp_u->h2o_u); - htp_u->h2o_u = 0; - } - - _http_serv_unlink(htp_u); - c3_free(htp_u); -} - -/* http_serv_free_cb(): timer callback for freeing http server. -*/ -static void -http_serv_free_cb(uv_timer_t* tim_u) -{ - u3_http* htp_u = tim_u->data; - -#if 0 - u3l_log("http serv free cb %d\n", htp_u->sev_l); -#endif - - _http_serv_really_free(htp_u); - - uv_close((uv_handle_t*)tim_u, _http_close_cb); -} - -/* _http_serv_free(): begin to free http server. -*/ -static void -_http_serv_free(u3_http* htp_u) -{ -#if 0 - u3l_log("http serv free %d\n", htp_u->sev_l); -#endif - - c3_assert( 0 == htp_u->hon_u ); - - if ( 0 == htp_u->h2o_u ) { - _http_serv_really_free(htp_u); - } - else { - u3_h2o_serv* h2o_u = htp_u->h2o_u; - - _http_h2o_context_dispose(&h2o_u->ctx_u); - - // NOTE: free deferred to allow timers to be closed - // this is a heavy-handed workaround for the lack of - // close callbacks in h2o_timer_t - // it's unpredictable how many event-loop turns will - // be required to finish closing the underlying uv_timer_t - // and we can't free until that's done (or we have UB) - // testing reveals 5s to be a long enough deferral - uv_timer_t* tim_u = c3_malloc(sizeof(*tim_u)); - - tim_u->data = htp_u; - - uv_timer_init(u3L, tim_u); - uv_timer_start(tim_u, http_serv_free_cb, 5000, 0); - } -} - -/* _http_serv_close_cb(): http server uv_close callback. -*/ -static void -_http_serv_close_cb(uv_handle_t* han_u) -{ - u3_http* htp_u = (u3_http*)han_u; - u3_httd* htd_u = htp_u->htd_u; - htp_u->liv = c3n; - - // otherwise freed by the last linked connection - if ( 0 == htp_u->hon_u ) { - _http_serv_free(htp_u); - } - - // restart if all linked servers have been shutdown - { - htp_u = htd_u->htp_u; - c3_o res = c3y; - - while ( 0 != htp_u ) { - if ( c3y == htp_u->liv ) { - res = c3n; - } - htp_u = htp_u->nex_u; - } - - if ( (c3y == res) && (0 != htd_u->fig_u.for_u) ) { - _http_serv_start_all(htd_u); - } - } -} - -/* _http_serv_close(): close http server gracefully. -*/ -static void -_http_serv_close(u3_http* htp_u) -{ - u3_h2o_serv* h2o_u = htp_u->h2o_u; - h2o_context_request_shutdown(&h2o_u->ctx_u); - -#if 0 - u3l_log("http serv close %d %p\n", htp_u->sev_l, &htp_u->wax_u); -#endif - - uv_close((uv_handle_t*)&htp_u->wax_u, _http_serv_close_cb); -} - -/* _http_serv_new(): create new http server. -*/ -static u3_http* -_http_serv_new(u3_httd* htd_u, c3_s por_s, c3_o dis, c3_o sec, c3_o lop) -{ - u3_http* htp_u = c3_malloc(sizeof(*htp_u)); - - htp_u->coq_l = 1; - htp_u->por_s = por_s; - htp_u->dis = dis; - htp_u->sec = sec; - htp_u->lop = lop; - htp_u->liv = c3y; - htp_u->h2o_u = 0; - htp_u->hon_u = 0; - htp_u->nex_u = 0; - - _http_serv_link(htd_u, htp_u); - - return htp_u; -} - -/* _http_serv_accept(): accept new http connection. -*/ -static void -_http_serv_accept(u3_http* htp_u) -{ - u3_hcon* hon_u = _http_conn_new(htp_u); - - uv_tcp_init(u3L, &hon_u->wax_u); - - c3_i sas_i; - - if ( 0 != (sas_i = uv_accept((uv_stream_t*)&htp_u->wax_u, - (uv_stream_t*)&hon_u->wax_u)) ) { - if ( (u3C.wag_w & u3o_verbose) ) { - u3l_log("http: accept: %s\n", uv_strerror(sas_i)); - } - - uv_close((uv_handle_t*)&hon_u->wax_u, _http_conn_free); - return; - } - - hon_u->sok_u = h2o_uv_socket_create((uv_stream_t*)&hon_u->wax_u, - _http_conn_free); - - h2o_accept(&((u3_h2o_serv*)htp_u->h2o_u)->cep_u, hon_u->sok_u); - - // capture h2o connection (XX fragile) - hon_u->con_u = (h2o_conn_t*)hon_u->sok_u->data; - - struct sockaddr_in adr_u; - h2o_socket_getpeername(hon_u->sok_u, (struct sockaddr*)&adr_u); - hon_u->ipf_w = ( adr_u.sin_family != AF_INET ) ? - 0 : ntohl(adr_u.sin_addr.s_addr); -} - -/* _http_serv_listen_cb(): uv_connection_cb for uv_listen -*/ -static void -_http_serv_listen_cb(uv_stream_t* str_u, c3_i sas_i) -{ - u3_http* htp_u = (u3_http*)str_u; - - if ( 0 != sas_i ) { - u3l_log("http: listen_cb: %s\n", uv_strerror(sas_i)); - } - else { - _http_serv_accept(htp_u); - } -} - -/* _http_serv_init_h2o(): initialize h2o ctx and handlers for server. -*/ -static u3_h2o_serv* -_http_serv_init_h2o(SSL_CTX* tls_u, c3_o log, c3_o red) -{ - u3_h2o_serv* h2o_u = c3_calloc(sizeof(*h2o_u)); - - h2o_config_init(&h2o_u->fig_u); - h2o_u->fig_u.server_name = h2o_iovec_init( - H2O_STRLIT("urbit/vere-" URBIT_VERSION)); - - // set maximum request size to 512 MiB - // - h2o_u->fig_u.max_request_entity_size = 512 * 1024 * 1024; - - // XX default pending vhost/custom-domain design - // XX revisit the effect of specifying the port - h2o_u->hos_u = h2o_config_register_host(&h2o_u->fig_u, - h2o_iovec_init(H2O_STRLIT("default")), - 65535); - - h2o_u->cep_u.ctx = (h2o_context_t*)&h2o_u->ctx_u; - h2o_u->cep_u.hosts = h2o_u->fig_u.hosts; - h2o_u->cep_u.ssl_ctx = tls_u; - - h2o_u->han_u = h2o_create_handler(&h2o_u->hos_u->fallback_path, - sizeof(*h2o_u->han_u)); - if ( c3y == red ) { - // XX h2o_redirect_register - h2o_u->han_u->on_req = _http_rec_accept; - } - else { - h2o_u->han_u->on_req = _http_rec_accept; - } - - // register runtime endpoints - // - { - h2o_pathconf_t* pac_u; - h2o_handler_t* han_u; - - // slog stream - // - pac_u = h2o_config_register_path(h2o_u->hos_u, "/~_~/slog", 0); - han_u = h2o_create_handler(pac_u, sizeof(*han_u)); - han_u->on_req = _http_seq_accept; - - // status (per spinner) - // - pac_u = h2o_config_register_path(h2o_u->hos_u, "/~_~/healthz", 0); - han_u = h2o_create_handler(pac_u, sizeof(*han_u)); - han_u->on_req = _http_sat_accept; - } - - if ( c3y == log ) { - // XX move this to post serv_start and put the port in the name -#if 0 - c3_c* pax_c = u3_Host.dir_c; - u3_noun now = u3dc("scot", c3__da, u3k(u3A->now)); - c3_c* now_c = u3r_string(now); - c3_c* nam_c = ".access.log"; - c3_w len_w = 1 + strlen(pax_c) + 1 + strlen(now_c) + strlen(nam_c); - - c3_c* paf_c = c3_malloc(len_w); - snprintf(paf_c, len_w, "%s/%s%s", pax_c, now_c, nam_c); - - h2o_access_log_filehandle_t* fil_u = - h2o_access_log_open_handle(paf_c, 0, H2O_LOGCONF_ESCAPE_APACHE); - - h2o_access_log_register(&h2o_u->hos_u->fallback_path, fil_u); - - c3_free(paf_c); - c3_free(now_c); - u3z(now); -#endif - } - - // XX h2o_compress_register - - h2o_context_init(&h2o_u->ctx_u, u3L, &h2o_u->fig_u); - - return h2o_u; -} - -/* _http_serv_start(): start http server. -*/ -static void -_http_serv_start(u3_http* htp_u) -{ - u3_pier* pir_u = htp_u->htd_u->car_u.pir_u; - struct sockaddr_in adr_u; - - memset(&adr_u, 0, sizeof(adr_u)); - adr_u.sin_family = AF_INET; - adr_u.sin_addr.s_addr = ( c3y == htp_u->lop ) ? - htonl(INADDR_LOOPBACK) : - INADDR_ANY; - - if ( 0 != u3_Host.ops_u.bin_c && c3n == htp_u->lop ) { - inet_pton(AF_INET, u3_Host.ops_u.bin_c, &adr_u.sin_addr); - } - - uv_tcp_init(u3L, &htp_u->wax_u); - - /* Try ascending ports. - */ - while ( 1 ) { - c3_i sas_i; - - adr_u.sin_port = htons(htp_u->por_s); - - if ( 0 != (sas_i = uv_tcp_bind(&htp_u->wax_u, - (const struct sockaddr*)&adr_u, 0)) || - 0 != (sas_i = uv_listen((uv_stream_t*)&htp_u->wax_u, - TCP_BACKLOG, _http_serv_listen_cb)) ) { - if ( UV_EADDRNOTAVAIL == sas_i ) { - u3l_log("http: ip address not available\n"); - u3_king_bail(); - } - if ( c3y == htp_u->dis ) { - u3l_log("http: listen (%" PRIu16 "): %s\n", htp_u->por_s, - uv_strerror(sas_i)); - u3_king_bail(); - } - if ( (UV_EADDRINUSE == sas_i) || (UV_EACCES == sas_i) ) { - if ( (c3y == htp_u->sec) && (443 == htp_u->por_s) ) { - htp_u->por_s = 8443; - } - else if ( (c3n == htp_u->sec) && (80 == htp_u->por_s) ) { - htp_u->por_s = 8080; - } - else { - htp_u->por_s++; - // XX - // - if ( c3n == htp_u->lop ) { - if ( c3y == htp_u->sec ) { - pir_u->pes_s = htp_u->por_s; - } - else { - pir_u->per_s = htp_u->por_s; - } - } - } - - continue; - } - - u3l_log("http: listen: %s\n", uv_strerror(sas_i)); - - _http_serv_free(htp_u); - return; - } - - u3l_log("http: %s live on %s://localhost:%d\n", - (c3y == htp_u->lop) ? "loopback" : "web interface", - (c3y == htp_u->sec) ? "https" : "http", - htp_u->por_s); - - break; - } -} - -static uv_buf_t -_http_wain_to_buf(u3_noun wan) -{ - c3_w len_w = u3_mcut_path(0, 0, (c3_c)10, u3k(wan)); - c3_c* buf_c = c3_malloc(1 + len_w); - - u3_mcut_path(buf_c, 0, (c3_c)10, wan); - buf_c[len_w] = 0; - - return uv_buf_init(buf_c, len_w); -} - -/* _http_init_tls: initialize OpenSSL context -*/ -static SSL_CTX* -_http_init_tls(uv_buf_t key_u, uv_buf_t cer_u) -{ - // XX require 1.1.0 and use TLS_server_method() - SSL_CTX* tls_u = SSL_CTX_new(SSLv23_server_method()); - // XX use SSL_CTX_set_max_proto_version() and SSL_CTX_set_min_proto_version() - SSL_CTX_set_options(tls_u, SSL_OP_NO_SSLv2 | - SSL_OP_NO_SSLv3 | - // SSL_OP_NO_TLSv1 | // XX test - SSL_OP_NO_COMPRESSION); - - SSL_CTX_set_default_verify_paths(tls_u); - SSL_CTX_set_session_cache_mode(tls_u, SSL_SESS_CACHE_OFF); - SSL_CTX_set_cipher_list(tls_u, - "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:" - "ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:" - "RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS"); - - // enable ALPN for HTTP 2 support -#if 0 //H2O_USE_ALPN - { - SSL_CTX_set_ecdh_auto(tls_u, 1); - h2o_ssl_register_alpn_protocols(tls_u, h2o_http2_alpn_protocols); - } -#endif - - { - BIO* bio_u = BIO_new_mem_buf(key_u.base, key_u.len); - EVP_PKEY* pky_u = PEM_read_bio_PrivateKey(bio_u, 0, 0, 0); - c3_i sas_i = SSL_CTX_use_PrivateKey(tls_u, pky_u); - - EVP_PKEY_free(pky_u); - BIO_free(bio_u); - - if( 0 == sas_i ) { - u3l_log("http: load private key failed:\n"); - ERR_print_errors_fp(u3_term_io_hija()); - u3_term_io_loja(1); - - SSL_CTX_free(tls_u); - - return 0; - } - } - - { - BIO* bio_u = BIO_new_mem_buf(cer_u.base, cer_u.len); - X509* xer_u = PEM_read_bio_X509_AUX(bio_u, 0, 0, 0); - c3_i sas_i = SSL_CTX_use_certificate(tls_u, xer_u); - - X509_free(xer_u); - - if( 0 == sas_i ) { - u3l_log("http: load certificate failed:\n"); - ERR_print_errors_fp(u3_term_io_hija()); - u3_term_io_loja(1); - - BIO_free(bio_u); - SSL_CTX_free(tls_u); - - return 0; - } - - // get any additional CA certs, ignoring errors - while ( 0 != (xer_u = PEM_read_bio_X509(bio_u, 0, 0, 0)) ) { - // XX require 1.0.2 or newer and use SSL_CTX_add0_chain_cert - SSL_CTX_add_extra_chain_cert(tls_u, xer_u); - } - - BIO_free(bio_u); - } - - return tls_u; -} - -/* _http_write_ports_file(): update .http.ports -*/ -static void -_http_write_ports_file(u3_httd* htd_u, c3_c *pax_c) -{ - c3_c* nam_c = ".http.ports"; - c3_w len_w = 1 + strlen(pax_c) + 1 + strlen(nam_c); - - c3_c* paf_c = c3_malloc(len_w); - snprintf(paf_c, len_w, "%s/%s", pax_c, nam_c); - - c3_i por_i = c3_open(paf_c, O_WRONLY | O_CREAT | O_TRUNC, 0666); - c3_free(paf_c); - - u3_http* htp_u = htd_u->htp_u; - u3_pier* pir_u = htd_u->car_u.pir_u; - - c3_c temp[32]; - while ( 0 != htp_u ) { - if ( 0 < htp_u->por_s ) { - u3_write_fd(por_i, temp, snprintf(temp, 32, "%u %s %s\n", htp_u->por_s, - (c3y == htp_u->sec) ? "secure" : "insecure", - (c3y == htp_u->lop) ? "loopback" : "public")); - } - - htp_u = htp_u->nex_u; - } - - c3_sync(por_i); - close(por_i); -} - -/* _http_release_ports_file(): remove .http.ports -*/ -static void -_http_release_ports_file(c3_c *pax_c) -{ - c3_c* nam_c = ".http.ports"; - c3_w len_w = 1 + strlen(pax_c) + 1 + strlen(nam_c); - c3_c* paf_c = c3_malloc(len_w); - c3_i wit_i; - - wit_i = snprintf(paf_c, len_w, "%s/%s", pax_c, nam_c); - c3_assert(wit_i > 0); - c3_assert(len_w == (c3_w)wit_i + 1); - - c3_unlink(paf_c); - c3_free(paf_c); -} - -static u3_hreq* -_http_search_req(u3_httd* htd_u, - c3_l sev_l, - c3_l coq_l, - c3_l seq_l) -{ - u3_http* htp_u; - u3_hcon* hon_u; - u3_hreq* req_u; - c3_w bug_w = u3C.wag_w & u3o_verbose; - - if ( !(htp_u = _http_serv_find(htd_u, sev_l)) ) { - if ( bug_w ) { - u3l_log("http: server not found: %x\r\n", sev_l); - } - return 0; - } - else if ( !(hon_u = _http_conn_find(htp_u, coq_l)) ) { - if ( bug_w ) { - u3l_log("http: connection not found: %x/%d\r\n", sev_l, coq_l); - } - return 0; - } - else if ( !(req_u = _http_req_find(hon_u, seq_l)) ) { - if ( bug_w ) { - u3l_log("http: request not found: %x/%d/%d\r\n", - sev_l, coq_l, seq_l); - } - return 0; - } - - return req_u; -} - -/* _http_serv_start_all(): initialize and start servers based on saved config. -*/ -static void -_http_serv_start_all(u3_httd* htd_u) -{ - u3_http* htp_u; - u3_pier* pir_u = htd_u->car_u.pir_u; - c3_s por_s; - u3_noun sec = u3_nul; - u3_noun non = u3_none; - u3_noun dis; - u3_form* for_u = htd_u->fig_u.for_u; - - c3_assert( 0 != for_u ); - - // if the SSL_CTX existed, it'll be freed with the servers - htd_u->tls_u = 0; - - // HTTPS server. - if ( (0 != for_u->key_u.base) && (0 != for_u->cer_u.base) ) { - htd_u->tls_u = _http_init_tls(for_u->key_u, for_u->cer_u); - - // Note: if tls_u is used for additional servers, - // its reference count must be incremented with SSL_CTX_up_ref - - if ( 0 != htd_u->tls_u ) { - if ( 0 == pir_u->pes_s ) { - por_s = ( c3y == for_u->pro ) ? 8443 : 443; - dis = c3n; - } - else { - por_s = pir_u->pes_s; - dis = c3y; - } - htp_u = _http_serv_new(htd_u, por_s, dis, c3y, c3n); - htp_u->h2o_u = _http_serv_init_h2o(htd_u->tls_u, for_u->log, for_u->red); - - _http_serv_start(htp_u); - sec = u3nc(u3_nul, htp_u->por_s); - } - } - - // HTTP server. - { - if ( 0 == pir_u->per_s ) { - por_s = ( c3y == for_u->pro ) ? 8080 : 80; - dis = c3n; - } - else { - por_s = pir_u->per_s; - dis = c3y; - } - htp_u = _http_serv_new(htd_u, por_s, dis, c3n, c3n); - htp_u->h2o_u = _http_serv_init_h2o(0, for_u->log, for_u->red); - - _http_serv_start(htp_u); - non = htp_u->por_s; - } - - // Loopback server. - { - por_s = 12321; - htp_u = _http_serv_new(htd_u, por_s, c3n, c3n, c3y); - htp_u->h2o_u = _http_serv_init_h2o(0, for_u->log, for_u->red); - - _http_serv_start(htp_u); - } - - // send listening ports to %eyre - { - c3_assert( u3_none != non ); - - // XX remove [sen] - // - u3_noun wir = u3nt(u3i_string("http-server"), - u3dc("scot", c3__uv, htd_u->sev_l), - u3_nul); - u3_noun cad = u3nt(c3__live, non, sec); - - u3_auto_plan(&htd_u->car_u, u3_ovum_init(0, c3__e, wir, cad)); - } - - _http_write_ports_file(htd_u, u3_Host.dir_c); - _http_form_free(htd_u); -} - -/* _http_serv_restart(): gracefully shutdown, then start servers. -*/ -static void -_http_serv_restart(u3_httd* htd_u) -{ - u3_http* htp_u = htd_u->htp_u; - - if ( 0 == htp_u ) { - _http_serv_start_all(htd_u); - } - else { - u3l_log("http: restarting servers to apply configuration\n"); - - while ( 0 != htp_u ) { - if ( c3y == htp_u->liv ) { - _http_serv_close(htp_u); - } - htp_u = htp_u->nex_u; - } - - _http_release_ports_file(u3_Host.dir_c); - } -} - -/* _http_form_free(): free and unlink saved config. -*/ -static void -_http_form_free(u3_httd* htd_u) -{ - u3_form* for_u = htd_u->fig_u.for_u; - - if ( 0 == for_u ) { - return; - } - - if ( 0 != for_u->key_u.base ) { - c3_free(for_u->key_u.base); - } - - if ( 0 != for_u->cer_u.base ) { - c3_free(for_u->cer_u.base); - } - - c3_free(for_u); - htd_u->fig_u.for_u = 0; -} - -/* u3_http_ef_form(): apply configuration, restart servers. -*/ -void -u3_http_ef_form(u3_httd* htd_u, u3_noun fig) -{ - u3_noun sec, pro, log, red; - - if ( (c3n == u3r_qual(fig, &sec, &pro, &log, &red) ) || - // confirm sec is a valid (unit ^) - !( u3_nul == sec || ( c3y == u3du(sec) && - c3y == u3du(u3t(sec)) && - u3_nul == u3h(sec) ) ) || - // confirm valid flags ("loobeans") - !( c3y == pro || c3n == pro ) || - !( c3y == log || c3n == log ) || - !( c3y == red || c3n == red ) ) { - u3l_log("http: form: invalid card\n"); - u3z(fig); - return; - } - - u3_form* for_u = c3_malloc(sizeof(*for_u)); - for_u->pro = (c3_o)pro; - for_u->log = (c3_o)log; - for_u->red = (c3_o)red; - - if ( u3_nul != sec ) { - u3_noun key = u3h(u3t(sec)); - u3_noun cer = u3t(u3t(sec)); - - for_u->key_u = _http_wain_to_buf(u3k(key)); - for_u->cer_u = _http_wain_to_buf(u3k(cer)); - } - else { - for_u->key_u = uv_buf_init(0, 0); - for_u->cer_u = uv_buf_init(0, 0); - } - - u3z(fig); - _http_form_free(htd_u); - - htd_u->fig_u.for_u = for_u; - - _http_serv_restart(htd_u); - - htd_u->car_u.liv_o = c3y; -} - -/* _http_io_talk(): start http I/O. -*/ -static void -_http_io_talk(u3_auto* car_u) -{ - u3_httd* htd_u = (u3_httd*)car_u; - - // XX remove [sen] - // - u3_noun wir = u3nt(u3i_string("http-server"), - u3dc("scot", c3__uv, htd_u->sev_l), - u3_nul); - u3_noun cad = u3nc(c3__born, u3_nul); - - u3_auto_plan(car_u, u3_ovum_init(0, c3__e, wir, cad)); - - // XX set liv_o on done/swap? - // -} - -/* _http_ef_http_server(): dispatch an %http-server effect from %light. -*/ -void -_http_ef_http_server(u3_httd* htd_u, - c3_l sev_l, - c3_l coq_l, - c3_l seq_l, - u3_noun tag, - u3_noun dat) -{ - u3_hreq* req_u; - - // sets server configuration - // - if ( c3y == u3r_sing_c("set-config", tag) ) { - u3_http_ef_form(htd_u, u3k(dat)); - } - // responds to an open request - // - else if ( 0 != (req_u = _http_search_req(htd_u, sev_l, coq_l, seq_l)) ) { - if ( c3y == u3r_sing_c("response", tag) ) { - u3_noun response = dat; - - if ( c3y == u3r_sing_c("start", u3h(response)) ) { - // Separate the %start message into its components. - // - u3_noun response_header, data, complete; - u3_noun status, headers; - u3x_trel(u3t(response), &response_header, &data, &complete); - u3x_cell(response_header, &status, &headers); - - _http_start_respond(req_u, u3k(status), u3k(headers), u3k(data), - u3k(complete)); - } - else if ( c3y == u3r_sing_c("continue", u3h(response)) ) { - // Separate the %continue message into its components. - // - u3_noun data, complete; - u3x_cell(u3t(response), &data, &complete); - - _http_continue_respond(req_u, u3k(data), u3k(complete)); - } - else if (c3y == u3r_sing_c("cancel", u3h(response))) { - u3l_log("http: %%cancel not handled yet\n"); - } - else { - u3l_log("http: strange response\n"); - } - } - else { - u3l_log("http: strange response\n"); - } - } - - u3z(tag); - u3z(dat); -} - -/* _http_stream_slog(): emit slog to open connections -*/ -static void -_http_stream_slog(void* vop_p, c3_w pri_w, u3_noun tan) -{ - u3_httd* htd_u = (u3_httd*)vop_p; - u3_hreq* seq_u = htd_u->fig_u.seq_u; - - // only do the work if there are open slog streams - // - if ( 0 != seq_u ) { - u3_weak data = u3_none; - - if ( c3y == u3a_is_atom(tan) ) { - u3_noun lin = u3i_list(u3i_string("data:"), - u3k(tan), - c3_s2('\n', '\n'), - u3_none); - u3_atom txt = u3qc_rap(3, lin); - data = u3nt(u3_nul, u3r_met(3, txt), txt); - u3z(lin); - } - else { - u3_weak wol = u3_none; - - // if we have no arvo kernel and can't evaluate nock, - // only send %leaf tanks - // - if ( 0 == u3A->roc ) { - if ( c3__leaf == u3h(tan) ) { - wol = u3nc(u3k(u3t(tan)), u3_nul); - } - } - else { - u3_noun blu = u3_term_get_blew(0); - c3_l col_l = u3h(blu); - wol = u3dc("wash", u3nc(0, col_l), u3k(tan)); - u3z(blu); - } - - if ( u3_none != wol ) { - u3_noun low = wol; - u3_noun paz = u3_nul; - while ( u3_nul != low ) { - u3_noun lin = u3i_list(u3i_string("data:"), - u3qc_rap(3, u3h(low)), - c3_s2('\n', '\n'), - u3_none); - paz = u3kb_weld(paz, lin); - low = u3t(low); - } - u3_atom txt = u3qc_rap(3, paz); - data = u3nt(u3_nul, u3r_met(3, txt), txt); - u3z(paz); - } - - u3z(wol); - } - - if ( u3_none != data ) { - while ( 0 != seq_u ) { - _http_continue_respond(seq_u, u3k(data), c3n); - seq_u = seq_u->nex_u; - } - } - - u3z(data); - } - - u3z(tan); -} - -/* _http_seq_heartbeat_cb(): send heartbeat to slog streams and restart timer -*/ -static void -_http_seq_heartbeat_cb(uv_timer_t* tim_u) -{ - u3_httd* htd_u = tim_u->data; - u3_hreq* seq_u = htd_u->fig_u.seq_u; - - if ( 0 != seq_u ) { - u3_noun dat = u3nt(u3_nul, 1, c3_s1('\n')); - while ( 0 != seq_u ) { - _http_continue_respond(seq_u, u3k(dat), c3n); - seq_u = seq_u->nex_u; - } - u3z(dat); - } - - uv_timer_start(htd_u->fig_u.sit_u, _http_seq_heartbeat_cb, - HEARTBEAT_TIMEOUT, 0); -} - -/* _http_io_kick(): apply effects. -*/ -static c3_o -_http_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_httd* htd_u = (u3_httd*)car_u; - - u3_noun tag, dat, i_wir, t_wir; - - if ( (c3n == u3r_cell(wir, &i_wir, &t_wir)) - || (c3n == u3r_cell(cad, &tag, &dat)) - || (c3n == u3r_sing_c("http-server", i_wir)) ) - { - u3z(wir); u3z(cad); - return c3n; - } - - // XX this needs to be rewritten, it defers (c3n) in cases it should not - // - { - u3_noun pud = t_wir; - u3_noun p_pud, t_pud, tt_pud, q_pud, r_pud, s_pud; - c3_l sev_l, coq_l, seq_l; - - - if ( (c3n == u3r_cell(pud, &p_pud, &t_pud)) || - (c3n == u3v_lily(c3__uv, u3k(p_pud), &sev_l)) ) - { - u3z(wir); u3z(cad); - return c3n; - } - - if ( u3_nul == t_pud ) { - coq_l = seq_l = 0; - } - else { - if ( (c3n == u3r_cell(t_pud, &q_pud, &tt_pud)) || - (c3n == u3v_lily(c3__ud, u3k(q_pud), &coq_l)) ) - { - u3z(wir); u3z(cad); - return c3n; - } - - if ( u3_nul == tt_pud ) { - seq_l = 0; - } else { - if ( (c3n == u3r_cell(tt_pud, &r_pud, &s_pud)) || - (u3_nul != s_pud) || - (c3n == u3v_lily(c3__ud, u3k(r_pud), &seq_l)) ) - { - u3z(wir); u3z(cad); - return c3n; - } - } - } - - _http_ef_http_server(htd_u, sev_l, coq_l, seq_l, u3k(tag), u3k(dat)); - u3z(wir); u3z(cad); - return c3y; - } -} - -/* _http_io_exit(): shut down http. -*/ -static void -_http_io_exit(u3_auto* car_u) -{ - u3_httd* htd_u = (u3_httd*)car_u; - - // dispose of configuration to avoid restarts - // - _http_form_free(htd_u); - - // close all servers - // - // XX broken - // - // for ( u3_http* htp_u = htd_u->htp_u; htp_u; htp_u = htp_u->nex_u ) { - // _http_serv_close(htp_u); - // } - - { - u3_atom lin = u3i_string("data:urbit shutting down\n\n"); - u3_noun dat = u3nt(u3_nul, u3r_met(3, lin), lin); - u3_hreq* seq_u = htd_u->fig_u.seq_u; - while ( 0 != seq_u ) { - _http_continue_respond(seq_u, u3k(dat), c3y); - seq_u = seq_u->nex_u; - } - u3z(dat); - } - - _http_release_ports_file(u3_Host.dir_c); -} - -/* _http_io_info(): produce status info. -*/ -static u3_noun -_http_io_info(u3_auto* car_u) -{ - u3_httd* htd_u = (u3_httd*)car_u; - u3_http* htp_u = htd_u->htp_u; - c3_w sec_w = 0; - u3_hreq* seq_u = htd_u->fig_u.seq_u; - u3_noun res; - - // XX review: metrics - // - while ( 0 != seq_u ) { - sec_w++; - seq_u = seq_u->nex_u; - } - res = u3i_list( - u3_pier_mase("instance", htd_u->sev_l), - u3_pier_mase("open-slogstreams", u3i_word(sec_w)), - u3_none); - - while ( 0 != htp_u ) { - res = u3nc( - u3_pier_mass( - u3dc("scot", c3__uv, htp_u->sev_l), - u3i_list( - u3_pier_mase("secure", htp_u->sec), - u3_pier_mase("loopback", htp_u->lop), - u3_pier_mase("live", htp_u->liv), - u3_pier_mase("port", htp_u->por_s), - u3_pier_mase("connections", htp_u->coq_l), - u3_none)), - res); - htp_u = htp_u->nex_u; - } - return u3kb_flop(res); -} - -/* _http_io_slog(): print status info. -*/ -static void -_http_io_slog(u3_auto* car_u) -{ - u3_httd* htd_u = (u3_httd*)car_u; - c3_y sec_y = 0; - u3_hreq* seq_u = htd_u->fig_u.seq_u; - while ( 0 != seq_u ) { - sec_y++; - seq_u = seq_u->nex_u; - } - u3l_log(" open slogstreams: %d\n", sec_y); -} - -/* u3_http_io_init(): initialize http I/O. -*/ -u3_auto* -u3_http_io_init(u3_pier* pir_u) -{ - u3_httd* htd_u = c3_calloc(sizeof(*htd_u)); - - u3_auto* car_u = &htd_u->car_u; - car_u->nam_m = c3__http; - car_u->liv_o = c3n; - car_u->io.talk_f = _http_io_talk; - car_u->io.info_f = _http_io_info; - car_u->io.slog_f = _http_io_slog; - car_u->io.kick_f = _http_io_kick; - car_u->io.exit_f = _http_io_exit; - - pir_u->sop_p = htd_u; - pir_u->sog_f = _http_stream_slog; - - uv_timer_t* sit_u = c3_malloc(sizeof(*sit_u)); - sit_u->data = htd_u; - uv_timer_init(u3L, sit_u); - uv_timer_start(sit_u, _http_seq_heartbeat_cb, HEARTBEAT_TIMEOUT, 0); - htd_u->fig_u.sit_u = sit_u; - - { - u3_noun now; - struct timeval tim_u; - gettimeofday(&tim_u, 0); - - now = u3_time_in_tv(&tim_u); - htd_u->sev_l = u3r_mug(now); - u3z(now); - } - - // XX retry up to N? - // - // car_u->ev.bail_f = ...; - - return car_u; -} diff --git a/pkg/urbit/vere/io/term.c b/pkg/urbit/vere/io/term.c deleted file mode 100644 index 0dbf2b1dc..000000000 --- a/pkg/urbit/vere/io/term.c +++ /dev/null @@ -1,1688 +0,0 @@ -/* vere/term.c -** -*/ -#include "all.h" -#include "vere/vere.h" - -// macros for string literal args/buffers -// -// since (sizeof(s) - 1) is used for vector length, parameters -// must be appropriately typed. use with care! -// -#define TERM_LIT(s) sizeof(s) - 1, (const c3_y*)(s) -#define TERM_LIT_BUF(s) uv_buf_init(s, sizeof(s) - 1) - -static u3_utty* _term_main(); -static void _term_read_cb(uv_stream_t* tcp_u, - ssize_t siz_i, - const uv_buf_t* buf_u); - -/* u3_write_fd(): retry interrupts, continue partial writes, assert errors. -*/ -void -u3_write_fd(c3_i fid_i, const void* buf_v, size_t len_i) -{ - ssize_t ret_i; - - while ( len_i > 0 ) { - c3_w lop_w = 0; - // retry interrupt/async errors - // - do { - // abort pathological retry loop - // - if ( 100 == ++lop_w ) { - fprintf(stderr, "term: write loop: %s\r\n", strerror(errno)); - return; - } - ret_i = write(fid_i, buf_v, len_i); - } - while ( (ret_i < 0) - && ( (errno == EINTR) - || (errno == EAGAIN) - || (errno == EWOULDBLOCK) )); - - // assert on true errors - // - // NB: can't call u3l_log here or we would re-enter u3_write_fd() - // - if ( ret_i < 0 ) { - fprintf(stderr, "term: write failed %s\r\n", strerror(errno)); - c3_assert(0); - } - // continue partial writes - // - else { - len_i -= ret_i; - buf_v += ret_i; - } - } -} - -/* _term_msc_out_host(): unix microseconds from current host time. -*/ -static c3_d -_term_msc_out_host() -{ - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - return 1000000ULL * tim_tv.tv_sec + tim_tv.tv_usec; -} - -/* _term_alloc(): libuv buffer allocator. -*/ -static void -_term_alloc(uv_handle_t* had_u, - size_t len_i, - uv_buf_t* buf - ) -{ - // this read can range from a single byte to a paste buffer - // 123 bytes has been chosen because its not a power of 2 - // this is probably still broken - // - void* ptr_v = c3_malloc(123); - *buf = uv_buf_init(ptr_v, 123); -} - -// XX unused, but %hook is in %zuse. -// implement or remove -// -#if 0 -/* _term_close_cb(): free terminal. -*/ -static void -_term_close_cb(uv_handle_t* han_t) -{ - u3_utty* tty_u = (void*) han_t; - if ( u3_Host.uty_u == tty_u ) { - u3_Host.uty_u = tty_u->nex_u; - } - else { - u3_utty* uty_u; - for (uty_u = u3_Host.uty_u; uty_u; uty_u = uty_u->nex_u ) { - if ( uty_u->nex_u == tty_u ) { - uty_u->nex_u = tty_u->nex_u; - break; - } - } - } - - { - u3_noun tid = u3dc("scot", c3__ud, tty_u->tid_l); - u3_noun pax = u3nq(u3_blip, c3__term, tid, u3_nul); - u3_pier_plan(u3k(pax), u3nc(c3__hook, u3_nul)); - u3z(pax); - } - c3_free(tty_u); -} -#endif - -/* u3_term_log_init(): initialize terminal for logging -*/ -void -u3_term_log_init(void) -{ - u3_utty* uty_u; - - if ( c3y == u3_Host.ops_u.tem ) { - uty_u = c3_calloc(sizeof(u3_utty)); - uty_u->fid_i = 1; - - uv_pipe_init(u3L, &(uty_u->pin_u.pip_u), 0); - uv_pipe_init(u3L, &(uty_u->pop_u.pip_u), 0); - uv_pipe_open(&(uty_u->pop_u.pip_u), uty_u->fid_i); - } - else { - // Initialize event processing. Rawdog it. - // - const c3_c* err_c; - if ( NULL == (uty_u = u3_ptty_init(u3L, &err_c)) ) { - fprintf(stderr, "vere: unable to initialize terminal (%s)\r\n" - " use -t to disable interactivity\r\n", err_c); - u3_king_bail(); - } - - // configure output escape sequences - // - // our requirements are minimal here, so we bypass terminfo - // and simply use constant sequences. - // - { - uty_u->ufo_u.out.clear_u = TERM_LIT_BUF("\033[H\033[2J"); - uty_u->ufo_u.out.el_u = TERM_LIT_BUF("\033[K"); - // uty_u->ufo_u.out.el1_u = TERM_LIT_BUF("\033[1K"); - uty_u->ufo_u.out.ed_u = TERM_LIT_BUF("\033[J"); - uty_u->ufo_u.out.bel_u = TERM_LIT_BUF("\x7"); - uty_u->ufo_u.out.cub1_u = TERM_LIT_BUF("\x8"); - uty_u->ufo_u.out.cuf1_u = TERM_LIT_BUF("\033[C"); - uty_u->ufo_u.out.cuu1_u = TERM_LIT_BUF("\033[A"); - uty_u->ufo_u.out.cud1_u = TERM_LIT_BUF("\xa"); - // uty_u->ufo_u.out.cub_u = TERM_LIT_BUF("\033[%p1%dD"); - // uty_u->ufo_u.out.cuf_u = TERM_LIT_BUF("\033[%p1%dC"); - } - - // configure input escape sequences - // - // NB: terminfo reports the wrong sequence for arrow keys on xterms. - // disabled, currently unused - // { - // uty_u->ufo_u.inn.kcuu1_u = TERM_LIT_BUF("\033[A"); // terminfo reports "\033OA" - // uty_u->ufo_u.inn.kcud1_u = TERM_LIT_BUF("\033[B"); // terminfo reports "\033OB" - // uty_u->ufo_u.inn.kcuf1_u = TERM_LIT_BUF("\033[C"); // terminfo reports "\033OC" - // uty_u->ufo_u.inn.kcub1_u = TERM_LIT_BUF("\033[D"); // terminfo reports "\033OD" - // } - - // Initialize mirror and accumulator state. - // - { - uty_u->tat_u.mir.lin_y = 0; - uty_u->tat_u.mir.byt_w = 0; - uty_u->tat_u.mir.wor_w = 0; - uty_u->tat_u.mir.sap_w = 0; - uty_u->tat_u.mir.cus_w = 0; - - uty_u->tat_u.esc.ape = c3n; - uty_u->tat_u.esc.bra = c3n; - - uty_u->tat_u.fut.len_w = 0; - uty_u->tat_u.fut.wid_w = 0; - } - - // default size - // - { - uty_u->tat_u.siz.col_l = 80; - uty_u->tat_u.siz.row_l = 24; - } - - // initialize spinner state - // - { - uty_u->tat_u.sun_u.diz_o = c3n; - uty_u->tat_u.sun_u.eve_d = 0; - uty_u->tat_u.sun_u.end_d = 0; - } - } - - // This is terminal 1, linked in host. - // - { - uty_u->tid_l = 1; - uty_u->nex_u = 0; - u3_Host.uty_u = uty_u; - } - - // Disable I/O buffering on terminal streams. - // This is not necessary if output is a tty, - // but helps when output is redirected. - // - { - fflush(stdout); - fflush(stderr); - setvbuf(stdout, NULL, _IONBF, 0); - setvbuf(stderr, NULL, _IONBF, 0); - } - - // if terminal/tty is enabled - // - if ( c3n == u3_Host.ops_u.tem ) { - // Start raw input. - // - if ( c3n == uty_u->sta_f(uty_u) ) { - c3_assert(!"init-tcsetattr"); - } - - // initialize spinner timeout - // - { - uv_timer_init(u3L, &uty_u->tat_u.sun_u.tim_u); - uty_u->tat_u.sun_u.tim_u.data = uty_u; - } - } -} - -/* u3_term_log_exit(): clean up terminal. -*/ -void -u3_term_log_exit(void) -{ - if ( c3n == u3_Host.ops_u.tem ) { - u3_utty* uty_u; - - for ( uty_u = u3_Host.uty_u; uty_u; uty_u = uty_u->nex_u ) { - if ( uty_u->fid_i == -1 ) { continue; } - if ( c3n == uty_u->sto_f(uty_u) ) { - c3_assert(!"exit-tcsetattr"); - } - u3_write_fd(uty_u->fid_i, "\r\n", 2); - } - } - - if ( u3_Host.uty_u ) { - uv_close((uv_handle_t*)&u3_Host.uty_u->pin_u, 0); - uv_close((uv_handle_t*)&u3_Host.uty_u->pop_u, 0); - } -} - -/* _term_it_write_cb(): general write callback. -*/ -static void -_term_it_write_cb(uv_write_t* wri_u, c3_i sas_i) -{ - // write failure is logged, but otherwise ignored. - // - if ( 0 != sas_i ) { - u3l_log("term: write: %s\n", uv_strerror(sas_i)); - } - - c3_free(wri_u->data); - c3_free(wri_u); -} - -/* _term_it_write(): write libuv buffer, freeing pointer. -*/ -static void -_term_it_write(u3_utty* uty_u, - uv_buf_t* buf_u, - void* ptr_v) -{ - // work off a local copy of the buffer, in case we need - // to manipulate the length/pointer - // - uv_buf_t fub_u = { .base = buf_u->base, .len = buf_u->len }; - uv_stream_t* han_u = (uv_stream_t*)&(uty_u->pop_u); - c3_i ret_i; - - // try to write synchronously - // - while ( 1 ) { - ret_i = uv_try_write(han_u, &fub_u, 1); - - if ( (ret_i > 0) && (ret_i < fub_u.len) ) { - fub_u.len -= ret_i; - fub_u.base += ret_i; - continue; - } - else { - break; - } - } - - // cue an async write if necessary - // - if ( UV_EAGAIN == ret_i ) { - uv_write_t* wri_u = c3_malloc(sizeof(*wri_u)); - wri_u->data = ptr_v; - - // invoke callback manually on error - // - if ( (ret_i = uv_write(wri_u, han_u, &fub_u, 1, _term_it_write_cb)) ) { - _term_it_write_cb(wri_u, ret_i); - } - } - else { - // synchronous write failure is logged, but otherwise ignored - // - if ( ret_i < 0 ) { - u3l_log("term: write: %s\n", uv_strerror(ret_i)); - } - - c3_free(ptr_v); - } -} - -/* _term_it_dump_buf(): write static buffer. -*/ -static void -_term_it_dump_buf(u3_utty* uty_u, - uv_buf_t* buf_u) -{ - if ( buf_u->len ) { - _term_it_write(uty_u, buf_u, 0); - } -} - -/* _term_it_dump(): write static vector. -*/ -static void -_term_it_dump(u3_utty* uty_u, - c3_w len_w, - const c3_y* hun_y) -{ - uv_buf_t buf_u = uv_buf_init((c3_c*)hun_y, len_w); - _term_it_dump_buf(uty_u, &buf_u); -} - -/* _term_it_send(): write dynamic vector, freeing pointer. -*/ -static void -_term_it_send(u3_utty* uty_u, - c3_w len_w, - c3_y* hun_y) -{ - if ( len_w ) { - uv_buf_t buf_u = uv_buf_init((c3_c*)hun_y, len_w); - _term_it_write(uty_u, &buf_u, (void*)hun_y); - } - else { - c3_free(hun_y); - } -} - -/* _term_it_send_cord(): write a cord. -*/ -static void -_term_it_send_cord(u3_utty* uty_u, - u3_atom txt) -{ - c3_w len_w = u3r_met(3, txt); - c3_y* hun_y = c3_malloc(len_w); - u3r_bytes(0, len_w, hun_y, txt); - - _term_it_send(uty_u, len_w, hun_y); - - u3z(txt); -} - -/* _term_it_show_clear(): clear to the beginning of the current line. -*/ -static void -_term_it_show_clear(u3_utty* uty_u) -{ - if ( uty_u->tat_u.siz.col_l ) { - _term_it_dump(uty_u, TERM_LIT("\r")); - _term_it_dump_buf(uty_u, &uty_u->ufo_u.out.el_u); - - uty_u->tat_u.mir.wor_w = 0; - uty_u->tat_u.mir.cus_w = 0; - } -} - -/* _term_it_show_blank(): blank the screen. -*/ -static void -_term_it_show_blank(u3_utty* uty_u) -{ - _term_it_dump_buf(uty_u, &uty_u->ufo_u.out.clear_u); -} - -/* _term_it_show_cursor(): set current line, transferring pointer. -*/ -static void -_term_it_show_cursor(u3_utty* uty_u, c3_w cur_w) -{ - c3_w cus_w = uty_u->tat_u.mir.cus_w; - c3_w dif_w; - - //NOTE assumes all styled text precedes the cursor. drum enforces this. - // - cur_w += uty_u->tat_u.mir.sap_w; - - if ( cur_w < cus_w ) { - dif_w = cus_w - cur_w; - - while ( dif_w-- ) { - _term_it_dump_buf(uty_u, &uty_u->ufo_u.out.cub1_u); - } - } - else if ( cur_w > cus_w ) { - dif_w = cur_w - cus_w; - - while ( dif_w-- ) { - _term_it_dump_buf(uty_u, &uty_u->ufo_u.out.cuf1_u); - } - } - - uty_u->tat_u.mir.cus_w = cur_w; -} - -/* _term_it_show_line(): render current line. -*/ -static void -_term_it_show_line(u3_utty* uty_u, c3_w wor_w, c3_w sap_w) -{ - u3_utat* tat_u = &uty_u->tat_u; - - // we have to reallocate the current line on write, - // or we have a data race if a) the write is async, - // and b) a new output line arrives before the write completes. - // - { - c3_w len_w = tat_u->mir.byt_w; - c3_y* hun_y = c3_malloc(len_w); - memcpy(hun_y, tat_u->mir.lin_y, len_w); - - _term_it_send(uty_u, len_w, hun_y); - } - - // XX refactor to avoid updating state - // - tat_u->mir.cus_w += wor_w; - tat_u->mir.wor_w = wor_w; - tat_u->mir.sap_w = sap_w; -} - -/* _term_it_refresh_line(): refresh current line. -*/ -static void -_term_it_refresh_line(u3_utty* uty_u) -{ - u3_utat* tat_u = &uty_u->tat_u; - c3_w wor_w = tat_u->mir.wor_w; - c3_w sap_w = tat_u->mir.sap_w; - c3_w cus_w = tat_u->mir.cus_w; - - _term_it_show_clear(uty_u); - _term_it_show_line(uty_u, wor_w, sap_w); - _term_it_show_cursor(uty_u, cus_w); -} - -/* _term_it_set_line(): set current line. -*/ -static void -_term_it_set_line(u3_utty* uty_u, - c3_w* lin_w, - c3_w wor_w, - c3_w sap_w) -{ - u3_utat* tat_u = &uty_u->tat_u; - c3_y* hun_y = (c3_y*)lin_w; - c3_w byt_w = 0; - - // convert lin_w in-place from utf-32 to utf-8 - // - // (this is just a hand-translation of +tuft) - // XX refactor for use here and in a jet - // - { - c3_w car_w, i_w; - - for ( i_w = 0; i_w < wor_w; i_w++ ) { - car_w = lin_w[i_w]; - - if ( 0x7f >= car_w ) { - hun_y[byt_w++] = car_w; - } - else if ( 0x7ff >= car_w ) { - hun_y[byt_w++] = 0xc0 ^ ((car_w >> 6) & 0x1f); - hun_y[byt_w++] = 0x80 ^ (car_w & 0x3f); - } - else if ( 0xffff >= car_w ) { - hun_y[byt_w++] = 0xe0 ^ ((car_w >> 12) & 0xf); - hun_y[byt_w++] = 0x80 ^ ((car_w >> 6) & 0x3f); - hun_y[byt_w++] = 0x80 ^ (car_w & 0x3f); - } - else { - hun_y[byt_w++] = 0xf0 ^ ((car_w >> 18) & 0x7); - hun_y[byt_w++] = 0x80 ^ ((car_w >> 12) & 0x3f); - hun_y[byt_w++] = 0x80 ^ ((car_w >> 6) & 0x3f); - hun_y[byt_w++] = 0x80 ^ (car_w & 0x3f); - } - } - } - - c3_free(tat_u->mir.lin_y); - tat_u->mir.lin_y = hun_y; - tat_u->mir.byt_w = byt_w; - tat_u->mir.wor_w = wor_w; - tat_u->mir.sap_w = sap_w; - - _term_it_show_line(uty_u, wor_w, sap_w); -} - -/* _term_it_show_more(): new current line. -*/ -static void -_term_it_show_more(u3_utty* uty_u) -{ - if ( c3y == u3_Host.ops_u.tem ) { - _term_it_dump(uty_u, TERM_LIT("\n")); - } - else { - _term_it_dump(uty_u, TERM_LIT("\r\n")); - } - - uty_u->tat_u.mir.cus_w = 0; -} - -/* _term_it_path(): path for console file. -*/ -static c3_c* -_term_it_path(u3_noun pax) -{ - c3_w len_w = 0; - c3_c *pas_c; - - // measure - // - { - u3_noun wiz = pax; - - while ( u3_nul != wiz ) { - len_w += (1 + u3r_met(3, u3h(wiz))); - wiz = u3t(wiz); - } - } - - // cut - // - pas_c = c3_malloc(len_w + 1); - pas_c[len_w] = '\0'; - { - u3_noun wiz = pax; - c3_c* waq_c = pas_c; - - while ( u3_nul != wiz ) { - c3_w tis_w = u3r_met(3, u3h(wiz)); - - if ( (u3_nul == u3t(wiz)) ) { - *waq_c++ = '.'; - } else *waq_c++ = '/'; - - u3r_bytes(0, tis_w, (c3_y*)waq_c, u3h(wiz)); - waq_c += tis_w; - - wiz = u3t(wiz); - } - *waq_c = 0; - } - u3z(pax); - return pas_c; -} - -/* _term_it_save(): save file by path. -*/ -static void -_term_it_save(u3_noun pax, u3_noun pad) -{ - c3_c* pax_c = _term_it_path(pax); - - u3_unix_save(pax_c, pad); - c3_free(pax_c); -} - -/* _term_ovum_plan(): plan term ovums, configuring spinner. -*/ -static u3_ovum* -_term_ovum_plan(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_ovum* egg_u = u3_auto_plan(car_u, u3_ovum_init(0, c3__d, wir, cad)); - - // term events have no spinner label - // - u3z(egg_u->pin_u.lab); - egg_u->pin_u.lab = u3_blip; - - return egg_u; -} - -/* _term_io_belt(): send belt. -*/ -static void -_term_io_belt(u3_utty* uty_u, u3_noun blb) -{ - // XX s/b u3dc("scot", c3__ud, uty_u->tid_l) - // - u3_noun wir = u3nt(c3__term, '1', u3_nul); - u3_noun cad = u3nc(c3__belt, blb); - - c3_assert( 1 == uty_u->tid_l ); - c3_assert( uty_u->car_u ); - - { - u3_ovum* egg_u = _term_ovum_plan(uty_u->car_u, wir, cad); - - // no spinner delay on %ret - // - if ( c3__ret == u3h(blb) ) { - egg_u->pin_u.del_o = c3n; - } - } -} - -/* _term_io_suck_char(): process a single character. -*/ -static void -_term_io_suck_char(u3_utty* uty_u, c3_y cay_y) -{ - u3_utat* tat_u = &uty_u->tat_u; - - if ( c3y == tat_u->esc.ape ) { - if ( c3y == tat_u->esc.bra ) { - switch ( cay_y ) { - default: { - _term_it_dump_buf(uty_u, &uty_u->ufo_u.out.bel_u); - break; - } - case 'A': _term_io_belt(uty_u, u3nc(c3__aro, 'u')); break; - case 'B': _term_io_belt(uty_u, u3nc(c3__aro, 'd')); break; - case 'C': _term_io_belt(uty_u, u3nc(c3__aro, 'r')); break; - case 'D': _term_io_belt(uty_u, u3nc(c3__aro, 'l')); break; - } - tat_u->esc.ape = tat_u->esc.bra = c3n; - } - else { - if ( (cay_y >= 'a') && (cay_y <= 'z') ) { - tat_u->esc.ape = c3n; - _term_io_belt(uty_u, u3nc(c3__met, cay_y)); - } - else if ( '.' == cay_y ) { - tat_u->esc.ape = c3n; - _term_io_belt(uty_u, u3nc(c3__met, c3__dot)); - } - else if ( 8 == cay_y || 127 == cay_y ) { - tat_u->esc.ape = c3n; - _term_io_belt(uty_u, u3nc(c3__met, c3__bac)); - } - else if ( ('[' == cay_y) || ('O' == cay_y) ) { - tat_u->esc.bra = c3y; - } - else { - tat_u->esc.ape = c3n; - - _term_it_dump_buf(uty_u, &uty_u->ufo_u.out.bel_u); - } - } - } - else if ( 0 != tat_u->fut.wid_w ) { - tat_u->fut.syb_y[tat_u->fut.len_w++] = cay_y; - - if ( tat_u->fut.len_w == tat_u->fut.wid_w ) { - u3_noun huv = u3i_bytes(tat_u->fut.wid_w, tat_u->fut.syb_y); - u3_noun wug; - - // XX implement directly here and jet - // - wug = u3do("taft", huv); - - tat_u->fut.len_w = tat_u->fut.wid_w = 0; - _term_io_belt(uty_u, u3nt(c3__txt, wug, u3_nul)); - } - } - else { - if ( (cay_y >= 32) && (cay_y < 127) ) { - _term_io_belt(uty_u, u3nt(c3__txt, cay_y, u3_nul)); - } - else if ( 0 == cay_y ) { - _term_it_dump_buf(uty_u, &uty_u->ufo_u.out.bel_u); - } - else if ( 8 == cay_y || 127 == cay_y ) { - _term_io_belt(uty_u, u3nc(c3__bac, u3_nul)); - } - else if ( 13 == cay_y || 10 == cay_y ) { - _term_io_belt(uty_u, u3nc(c3__ret, u3_nul)); - } -#if 0 - else if ( 6 == cay_y ) { - _term_io_flow(uty_u); // XX hack - } -#endif - else if ( cay_y <= 26 ) { - _term_io_belt(uty_u, u3nc(c3__ctl, ('a' + (cay_y - 1)))); - } - else if ( 27 == cay_y ) { - tat_u->esc.ape = c3y; - } - else if ( cay_y >= 128 ) { - tat_u->fut.len_w = 1; - tat_u->fut.syb_y[0] = cay_y; - - if ( cay_y < 224 ) { - tat_u->fut.wid_w = 2; - } else if ( cay_y < 240 ) { - tat_u->fut.wid_w = 3; - } else tat_u->fut.wid_w = 4; - } - } -} - -/* _term_suck(): process a chunk of input -*/ - -/* - * `nread` (siz_w) is > 0 if there is data available, 0 if libuv is done reading for - * now, or < 0 on error. - * - * The callee is responsible for closing the stream when an error happens - * by calling uv_close(). Trying to read from the stream again is undefined. - * - * The callee is responsible for freeing the buffer, libuv does not reuse it. - * The buffer may be a null buffer (where buf->base=NULL and buf->len=0) on - * error. - */ - -static inline void -_term_suck(u3_utty* uty_u, const c3_y* buf, ssize_t siz_i) -{ - { - if ( siz_i == UV_EOF ) { - // We hear EOF (on the third read callback) if - // 2x the _term_alloc() buffer size is pasted. - // The process hangs if we do nothing (and ctrl-z - // then corrupts the event log), so we force shutdown. - // - u3l_log("term: hangup (EOF)\r\n"); - - // XX revise - // - u3_pier_bail(u3_king_stub()); - } - else if ( siz_i < 0 ) { - u3l_log("term %d: read: %s\n", uty_u->tid_l, uv_strerror(siz_i)); - } - else { - c3_i i; - - for ( i=0; i < siz_i; i++ ) { - _term_io_suck_char(uty_u, buf[i]); - } - } - } -} - -/* _term_read_cb(): server read callback. -*/ -static void -_term_read_cb(uv_stream_t* tcp_u, - ssize_t siz_i, - const uv_buf_t * buf_u) -{ - u3_utty* uty_u = (u3_utty*)(void*)tcp_u; - _term_suck(uty_u, (const c3_y*)buf_u->base, siz_i); - c3_free(buf_u->base); -} - -/* _term_spin_step(): advance spinner state and (re-)render. -*/ -static void -_term_spin_step(u3_utty* uty_u) -{ - u3_utat* tat_u = &uty_u->tat_u; - c3_w bac_w; - - // calculate backoff from end of line, or bail out - // - { - c3_w cus_w = tat_u->mir.cus_w; - c3_l col_l = tat_u->siz.col_l; - - if ( cus_w >= col_l ) { // shenanigans! - return; - } - - bac_w = col_l - 1 - cus_w; - } - - c3_d lag_d = tat_u->sun_u.eve_d++; - const c3_c daz_c[] = "|/-\\"; - // | + « + why + » + \0 - c3_c buf_c[1 + 2 + 4 + 2 + 1]; - c3_c* cur_c = buf_c; - c3_w sol_w = 1; // spinner length (utf-32) - - // set spinner char - // - *cur_c++ = daz_c[lag_d % (sizeof(daz_c) - 1)]; - - // if we have a spinner, add it between brackets - // - if ( tat_u->sun_u.why_c[0] ) { - *cur_c++ = '\xc2'; - *cur_c++ = '\xab'; - sol_w++; - - { - c3_c* why_c = tat_u->sun_u.why_c; - *cur_c++ = *why_c++; - *cur_c++ = *why_c++; - *cur_c++ = *why_c++; - *cur_c++ = *why_c; - // XX assumes one glyph per char - // - sol_w += 4; - } - - *cur_c++ = '\xc2'; - *cur_c++ = '\xbb'; - sol_w++; - } - - *cur_c = '\0'; - - // write spinner, adjusting cursor as needed - // - // NB: we simply bail out if anything goes wrong - // - { - uv_buf_t lef_u = uty_u->ufo_u.out.cub1_u; - c3_i fid_i = uty_u->fid_i; - - // One-time cursor backoff. - // - if ( c3n == tat_u->sun_u.diz_o ) { - c3_w i_w; - - for ( i_w = bac_w; i_w < sol_w; i_w++ ) { - if ( lef_u.len != write(fid_i, lef_u.base, lef_u.len) ) { - return; - } - } - - tat_u->sun_u.diz_o = c3y; - } - - { - c3_w len_w = cur_c - buf_c; - if ( len_w != write(fid_i, buf_c, len_w) ) { - return; - } - } - - // Cursor stays on spinner. - // - while ( sol_w-- ) { - if ( lef_u.len != write(fid_i, lef_u.base, lef_u.len) ) { - return; - } - } - } -} - -/* _term_spin_timer_cb(): render spinner -*/ -static void -_term_spin_timer_cb(uv_timer_t* tim_u) -{ - u3_utty* uty_u = tim_u->data; - _term_spin_step(uty_u); -} - -#define _SPIN_COOL_US 500UL // spinner activation delay when cool -#define _SPIN_WARM_US 50UL // spinner activation delay when warm -#define _SPIN_RATE_US 250UL // spinner rate (ms/frame) -#define _SPIN_IDLE_US 500UL // spinner cools down if stopped this long - -/* u3_term_start_spinner(): prepare spinner state. RETAIN. -*/ -void -u3_term_start_spinner(u3_atom say, c3_o del_o) -{ - if ( c3n == u3_Host.ops_u.tem ) { - u3_utty* uty_u = _term_main(); - u3_utat* tat_u = &uty_u->tat_u; - - tat_u->sun_u.why_c[4] = 0; - u3r_bytes(0, 4, (c3_y*)tat_u->sun_u.why_c, say); - - tat_u->sun_u.eve_d = 0; - // XX must be c3n for cursor backoff from EOL? - tat_u->sun_u.diz_o = c3n; - - { - c3_d now_d = _term_msc_out_host(); - c3_d end_d = tat_u->sun_u.end_d; - c3_d wen_d = (c3n == del_o) ? 0UL : - (now_d - end_d < _SPIN_IDLE_US) ? - _SPIN_WARM_US : _SPIN_COOL_US; - - uv_timer_start(&tat_u->sun_u.tim_u, - _term_spin_timer_cb, - wen_d, _SPIN_RATE_US); - } - } -} - -/* u3_term_stop_spinner(): reset spinner state and restore input line. -*/ -void -u3_term_stop_spinner(void) -{ - if ( c3n == u3_Host.ops_u.tem ) { - u3_utty* uty_u = _term_main(); - u3_utat* tat_u = &uty_u->tat_u; - - memset(tat_u->sun_u.why_c, 0, 5); - - uv_timer_stop(&tat_u->sun_u.tim_u); - - if ( c3y == tat_u->sun_u.diz_o ) { - _term_it_refresh_line(uty_u); - tat_u->sun_u.end_d = _term_msc_out_host(); - tat_u->sun_u.diz_o = c3n; - } - else { - tat_u->sun_u.end_d = 0; - } - } -} - -/* _term_main(): return main or console terminal. -*/ -static u3_utty* -_term_main() -{ - u3_utty* uty_u; - - for ( uty_u = u3_Host.uty_u; uty_u; uty_u = uty_u->nex_u ) { - if ( (uty_u->fid_i != -1) && (uty_u->fid_i <= 2) ) { - return uty_u; - } - } - return u3_Host.uty_u; -} - -/* _term_ef_get(): terminal by id. -*/ -static u3_utty* -_term_ef_get(c3_l tid_l) -{ - if ( 0 != tid_l ) { - u3_utty* uty_u; - - for ( uty_u = u3_Host.uty_u; uty_u; uty_u = uty_u->nex_u ) { - if ( tid_l == uty_u->tid_l ) { - return uty_u; - } - } - } - return _term_main(); -} - -/* u3_term_get_blew(): return window size [columns rows]. -*/ -u3_noun -u3_term_get_blew(c3_l tid_l) -{ - u3_utty* uty_u = _term_ef_get(tid_l); - c3_l col_l, row_l; - - if ( (c3y == u3_Host.ops_u.tem) || !uty_u || - (c3y != uty_u->wsz_f(uty_u, &col_l, &row_l)) ) - { - col_l = 80; - row_l = 24; - } - - if ( uty_u ) { - uty_u->tat_u.siz.col_l = col_l; - uty_u->tat_u.siz.row_l = row_l; - } - - return u3nc(col_l, row_l); -} - -/* u3_term_ef_winc(): window change. Just console right now. -*/ -void -u3_term_ef_winc(void) -{ - // XX groace, this should be a global handler sent to each pier - // - if ( u3_Host.uty_u->car_u ) { - u3_noun wir = u3nt(c3__term, '1', u3_nul); - u3_noun cad = u3nc(c3__blew, u3_term_get_blew(1)); - - c3_assert( 1 == u3_Host.uty_u->tid_l ); - - _term_ovum_plan(u3_Host.uty_u->car_u, wir, cad); - } -} - -/* u3_term_ef_ctlc(): send ^C on console. -*/ -void -u3_term_ef_ctlc(void) -{ - u3_utty* uty_u = _term_main(); - - { - u3_noun wir = u3nt(c3__term, '1', u3_nul); - u3_noun cad = u3nt(c3__belt, c3__ctl, 'c'); - - c3_assert( 1 == uty_u->tid_l ); - c3_assert( uty_u->car_u ); - - _term_ovum_plan(uty_u->car_u, wir, cad); - } - - _term_it_refresh_line(uty_u); -} - -/* _term_it_put_value(): put numeric color value on lin_w. -*/ -static c3_w -_term_it_put_value(c3_w* lin_w, - u3_atom val) -{ - c3_c str_c[4]; - c3_w len = snprintf(str_c, 4, "%d", val % 256); - for ( c3_w i_w = 0; i_w < len; i_w++ ) { - lin_w[i_w] = str_c[i_w]; - } - u3z(val); - return len; -} - -/* _term_it_put_tint(): put ansi color id on lin_w. RETAINS col. -*/ -static c3_w -_term_it_put_tint(c3_w* lin_w, - u3_noun col) -{ - u3_noun red, gre, blu; - c3_o tru = u3r_trel(col, &red, &gre, &blu); - - // 24-bit color - // - if ( c3y == tru ) { - c3_w n = 0; - - *lin_w++ = '8'; - *lin_w++ = ';'; - *lin_w++ = '2'; - *lin_w++ = ';'; - - c3_w m = _term_it_put_value(lin_w, red); - n += m; - lin_w += m; - - *lin_w++ = ';'; - - m = _term_it_put_value(lin_w, gre); - n += m; - lin_w += m; - - *lin_w++ = ';'; - - n += _term_it_put_value(lin_w, blu); - - return n + 6; - } - // standard color - // - else { - switch ( col ) { - default: - case u3_nul: *lin_w = '9'; break; - case 'k': *lin_w = '0'; break; - case 'r': *lin_w = '1'; break; - case 'g': *lin_w = '2'; break; - case 'y': *lin_w = '3'; break; - case 'b': *lin_w = '4'; break; - case 'm': *lin_w = '5'; break; - case 'c': *lin_w = '6'; break; - case 'w': *lin_w = '7'; break; - } - return 1; - } -} - -/* _term_it_put_deco(): put ansi sgr code on lin_w. RETAINS dec. -*/ -static void -_term_it_put_deco(c3_w* lin_w, - u3_noun dec) -{ - switch ( dec ) { - default: - case u3_nul: *lin_w = '0'; break; - case c3__br: *lin_w = '1'; break; - case c3__un: *lin_w = '4'; break; - case c3__bl: *lin_w = '5'; break; - } -} - -/* _term_it_show_stub(): send styled text to terminal as ansi escape sequences -*/ -static void -_term_it_show_stub(u3_utty* uty_u, - u3_noun tub) -{ - c3_w tuc_w = u3qb_lent(tub); - - // count the amount of characters across all stubs - // - c3_w lec_w = 0; - { - u3_noun nub = tub; - while ( u3_nul != nub ) { - u3_noun nib = u3t(u3h(nub)); - lec_w = lec_w + u3qb_lent(nib); - nub = u3t(nub); - } - } - - // allocate enough memory for every display character, plus styles - // - //NOTE we use max 31 characters per styl for escape codes: - // 3 for opening, 4 for decorations, 15 for colors, 4 for closing, - // and 5 as separators between decorations and colors. - // - c3_w* lin_w = c3_malloc( sizeof(c3_w) * (lec_w + (31 * tuc_w)) ); - - // write the contents to the buffer, - // tracking total and escape characters written - // - c3_w i_w = 0; - c3_w sap_w = 0; - { - u3_noun nub = tub; - while ( u3_nul != nub ) { - u3_noun tyl, nib, dec, bag, fog; - u3x_cell(u3h(nub), &tyl, &nib); - u3x_trel(tyl, &dec, &bag, &fog); - - c3_o tyl_o = c3n; - if ( ( c3n == u3_Host.ops_u.tem ) && - ( (u3_nul != dec) || (u3_nul != bag) || (u3_nul != fog) ) ) { - tyl_o = c3y; - } - - // write style escape sequences - // - if ( c3y == tyl_o ) { - c3_o mor_o = c3n; - lin_w[i_w++] = 27; - lin_w[i_w++] = '['; - sap_w += 2; - - // text decorations - // - { - u3_noun dos = u3qdi_tap(dec); - u3_noun des = dos; - while ( u3_nul != des ) { - if ( c3y == mor_o ) { - lin_w[i_w++] = ';'; - sap_w++; - } - _term_it_put_deco(&lin_w[i_w++], u3h(des)); - sap_w++; - mor_o = c3y; - des = u3t(des); - } - u3z(dos); - } - - // background color - // - if ( u3_nul != bag ) { - if ( c3y == mor_o ) { - lin_w[i_w++] = ';'; - sap_w++; - } - lin_w[i_w++] = '4'; - c3_w put_w = _term_it_put_tint(&lin_w[i_w], bag); - i_w += put_w; - sap_w += ++put_w; - mor_o = c3y; - } - - // foreground color - // - if ( u3_nul != fog ) { - if ( c3y == mor_o ) { - lin_w[i_w++] = ';'; - sap_w++; - } - lin_w[i_w++] = '3'; - c3_w put_w = _term_it_put_tint(&lin_w[i_w], fog); - i_w += put_w; - sap_w += ++put_w; - mor_o = c3y; - } - - lin_w[i_w++] = 'm'; - sap_w++; - } - - // write the text itself - // - for ( i_w = i_w; u3_nul != nib; i_w++, nib = u3t(nib) ) { - lin_w[i_w] = u3r_word(0, u3h(nib)); - } - - // if we applied any styles, toggle them off - // - if ( c3y == tyl_o ) { - lin_w[i_w++] = 27; - lin_w[i_w++] = '['; - lin_w[i_w++] = '0'; - lin_w[i_w++] = 'm'; - sap_w += 4; - } - - nub = u3t(nub); - } - } - - _term_it_set_line(uty_u, lin_w, i_w, sap_w); - - u3z(tub); -} - -/* _term_it_show_tour(): send utf32 to terminal. -*/ -static void -_term_it_show_tour(u3_utty* uty_u, - u3_noun lin) -{ - c3_w len_w = u3qb_lent(lin); - c3_w* lin_w = c3_malloc( sizeof(c3_w) * len_w ); - - { - c3_w i_w; - - for ( i_w = 0; u3_nul != lin; i_w++, lin = u3t(lin) ) { - lin_w[i_w] = u3r_word(0, u3h(lin)); - } - } - - _term_it_set_line(uty_u, lin_w, len_w, 0); - - u3z(lin); -} - -/* _term_ef_blit(): send blit to terminal. -*/ -static void -_term_ef_blit(u3_utty* uty_u, - u3_noun blt) -{ - switch ( u3h(blt) ) { - default: break; - - case c3__bel: { - if ( c3n == u3_Host.ops_u.tem ) { - _term_it_dump_buf(uty_u, &uty_u->ufo_u.out.bel_u); - } - } break; - - case c3__clr: { - if ( c3n == u3_Host.ops_u.tem ) { - _term_it_show_blank(uty_u); - _term_it_refresh_line(uty_u); - } - } break; - - case c3__hop: { - if ( c3n == u3_Host.ops_u.tem ) { - _term_it_show_cursor(uty_u, u3t(blt)); - } - } break; - - case c3__klr: { - if ( c3n == u3_Host.ops_u.tem ) { - _term_it_show_clear(uty_u); - } - _term_it_show_stub(uty_u, u3k(u3t(blt))); - } break; - - case c3__lin: { - if ( c3n == u3_Host.ops_u.tem ) { - _term_it_show_clear(uty_u); - } - _term_it_show_tour(uty_u, u3k(u3t(blt))); - } break; - - case c3__mor: { - _term_it_show_more(uty_u); - } break; - - case c3__sav: { - u3_noun pax, dat; - u3x_cell(u3t(blt), &pax, &dat); - - _term_it_save(u3k(pax), u3k(dat)); - } break; - - case c3__sag: { - u3_noun pax, dat; - u3x_cell(u3t(blt), &pax, &dat); - - _term_it_save(u3k(pax), u3qe_jam(dat)); - } break; - - case c3__url: { - u3_noun txt = u3t(blt); - - // XX check u3_Host.ops_u.tem ? - // XX this looks to be broken, - // multiple calls to _show_clear will discard the mirror state - // - if ( c3y == u3a_is_atom(txt) ) { - _term_it_show_clear(uty_u); - - _term_it_send_cord(uty_u, u3k(txt)); - - _term_it_show_more(uty_u); - _term_it_refresh_line(uty_u); - } - } break; - } - - u3z(blt); -} - -/* u3_term_io_hija(): hijack console for fprintf, returning FILE*. -*/ -FILE* -u3_term_io_hija(void) -{ - u3_utty* uty_u = _term_main(); - - if ( uty_u ) { - if ( uty_u->fid_i > 2 ) { - // We *should* in fact, produce some kind of fake FILE* for - // non-console terminals. If we use this interface enough... - // - c3_assert(0); - } - else { - if ( c3n == u3_Host.ops_u.tem ) { - if ( c3y != uty_u->hij_f(uty_u) ) { - c3_assert(!"hija-tcsetattr"); - } - u3_write_fd(uty_u->fid_i, "\r", 1); - { - uv_buf_t* buf_u = &uty_u->ufo_u.out.el_u; - u3_write_fd(uty_u->fid_i, buf_u->base, buf_u->len); - } - } - } - } - return stdout; -} - -/* u3_term_io_loja(): release console from fprintf. -*/ -void -u3_term_io_loja(int x) -{ - u3_utty* uty_u = _term_main(); - - if ( uty_u ) { - if ( uty_u->fid_i > 2 ) { - // We *should* in fact, produce some kind of fake FILE* for - // non-console terminals. If we use this interface enough... - // - c3_assert(0); - } - else { - if ( c3y == u3_Host.ops_u.tem ) { - fflush(stdout); - } else { - if ( c3y != uty_u->loj_f(uty_u) ) { - c3_assert(!"loja-tcsetattr"); - } - _term_it_refresh_line(uty_u); - } - } - } -} - -/* u3_term_it_log(): writes a log message -*/ -void -u3_term_io_log(c3_c* line) -{ - FILE* stream = u3_term_io_hija(); - u3_term_io_loja(fprintf(stream, "%s", line)); -} - -/* u3_term_tape_to(): dump a tape to a file. -*/ -void -u3_term_tape_to(FILE *fil_f, u3_noun tep) -{ - u3_noun tap = tep; - - while ( u3_nul != tap ) { - c3_c car_c; - - if ( u3h(tap) >= 127 ) { - car_c = '?'; - } else car_c = u3h(tap); - - putc(car_c, fil_f); - tap = u3t(tap); - } - u3z(tep); -} - -/* u3_term_tape(): dump a tape to stdout. -*/ -void -u3_term_tape(u3_noun tep) -{ - FILE* fil_f = u3_term_io_hija(); - - u3_term_tape_to(fil_f, tep); - - u3_term_io_loja(0); -} - -/* u3_term_wall(): dump a wall to stdout. -*/ -void -u3_term_wall(u3_noun wol) -{ - FILE* fil_f = u3_term_io_hija(); - u3_noun wal = wol; - - while ( u3_nul != wal ) { - u3_term_tape_to(fil_f, u3k(u3h(wal))); - - putc(13, fil_f); - putc(10, fil_f); - - wal = u3t(wal); - } - u3_term_io_loja(0); - - u3z(wol); -} - -/* _term_io_talk(): -*/ -static void -_term_io_talk(u3_auto* car_u) -{ - if ( c3n == u3_Host.ops_u.tem ) { - u3_utty* uty_u = _term_main(); - - uv_read_start((uv_stream_t*)&(uty_u->pin_u), - _term_alloc, - _term_read_cb); - } - - // XX groace hardcoded terminal number - // - u3_noun wir = u3nt(c3__term, '1', u3_nul); - u3_noun cad; - - // send terminal dimensions - // - { - cad = u3nc(c3__blew, u3_term_get_blew(1)); - _term_ovum_plan(car_u, u3k(wir), cad); - } - - // NB, term.c used to also start :dojo - // - // u3nq(c3__flow, c3__seat, c3__dojo, u3_nul) - - // refresh terminal state - // - { - cad = u3nc(c3__hail, u3_nul); - _term_ovum_plan(car_u, wir, cad); - } -} - -/* _reck_orchid(): parses only a number as text - * - * Parses a text string which contains a decimal number. In practice, this - * number is always '1'. - */ -static u3_noun -_reck_orchid(u3_noun fot, u3_noun txt, c3_l* tid_l) -{ - c3_c* str = u3r_string(txt); - c3_d ato_d = strtol(str, NULL, 10); - c3_free(str); - - if ( ato_d >= 0x80000000ULL ) { - return c3n; - } else { - *tid_l = (c3_l) ato_d; - - return c3y; - } -} - -/* _term_io_kick(): apply effects. -*/ -static c3_o -_term_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_noun tag, dat, i_wir, t_wir; - c3_o ret_o; - - if ( (c3n == u3r_cell(wir, &i_wir, &t_wir)) - || (c3n == u3r_cell(cad, &tag, &dat)) - || (c3__term != i_wir) ) - { - ret_o = c3n; - } - else { - u3_noun pud = t_wir; - u3_noun p_pud, q_pud; - c3_l tid_l; - - if ( (c3n == u3r_cell(pud, &p_pud, &q_pud)) - || (u3_nul != q_pud) - || (c3n == _reck_orchid(c3__ud, u3k(p_pud), &tid_l)) ) - { - u3l_log("term: bad tire\n"); - ret_o = c3n; - } - else { - switch ( tag ) { - default: { - ret_o = c3n; - } break; - - // XX review, accepted and ignored - // - case c3__bbye: { - ret_o = c3y; - } break; - - case c3__blit: { - ret_o = c3y; - - { - u3_utty* uty_u = _term_ef_get(tid_l); - if ( 0 == uty_u ) { - // u3l_log("no terminal %d\n", tid_l); - // u3l_log("uty_u %p\n", u3_Host.uty_u); - } - else { - u3_noun bis = dat; - - while ( c3y == u3du(bis) ) { - _term_ef_blit(uty_u, u3k(u3h(bis))); - bis = u3t(bis); - } - } - } - } break; - - // XX obsolete %ames - // - // case c3__send: - - case c3__logo: { - ret_o = c3y; - u3_pier_exit(car_u->pir_u); - // XX validate? ignore? - // - u3_Host.xit_i = dat; - } break; - - case c3__mass: { - ret_o = c3y; - - // gc the daemon area - // - // XX disabled due to known leaks; uncomment for dev - // - // uv_timer_start(&u3K.tim_u, (uv_timer_cb)u3_king_grab, 0, 0); - } break; - - case c3__meld: { - ret_o = c3y; - u3_pier_meld(car_u->pir_u); - } break; - - case c3__pack: { - ret_o = c3y; - u3_pier_pack(car_u->pir_u); - } break; - } - } - } - - u3z(wir); u3z(cad); - return ret_o; -} - -static void -_term_io_exit_cb(uv_handle_t* han_u) -{ - u3_auto* car_u = han_u->data; - c3_free(car_u); -} - -/* _term_io_exit(): clean up terminal. -*/ -static void -_term_io_exit(u3_auto* car_u) -{ - u3_utty* uty_u = _term_main(); - - if ( c3n == u3_Host.ops_u.tem ) { - // NB, closed in u3_term_log_exit() - // - uv_read_stop((uv_stream_t*)&(uty_u->pin_u)); - - uv_timer_t* han_u = &(uty_u->tat_u.sun_u.tim_u); - han_u->data = car_u; - - uv_close((uv_handle_t*)han_u, _term_io_exit_cb); - } - else { - c3_free(car_u); - } -} - -/* u3_term_io_init(): initialize terminal -*/ -u3_auto* -u3_term_io_init(u3_pier* pir_u) -{ - u3_auto* car_u = c3_calloc(sizeof(*car_u)); - - c3_assert( u3_Host.uty_u ); - u3_Host.uty_u->car_u = car_u; - - car_u->nam_m = c3__term; - car_u->liv_o = c3y; - car_u->io.talk_f = _term_io_talk; - car_u->io.kick_f = _term_io_kick; - car_u->io.exit_f = _term_io_exit; - - return car_u; -} diff --git a/pkg/urbit/vere/io/unix.c b/pkg/urbit/vere/io/unix.c deleted file mode 100644 index f9e175b5d..000000000 --- a/pkg/urbit/vere/io/unix.c +++ /dev/null @@ -1,1600 +0,0 @@ -/* vere/unix.c -** -** this file is responsible for maintaining a bidirectional -** mapping between the contents of a clay desk and a directory -** in a unix filesystem. -** -** TODO this driver is crufty and overdue for a rewrite. -** aspirationally, the rewrite should do sanity checking and -** transformations at the noun level to convert messages from -** arvo into sets of fs operations on trusted inputs, and -** inverse transformations and checks for fs contents to arvo -** messages. -** -** the two relevant transformations to apply are: -** -** 1. bidirectionally map file contents to atoms -** 2. bidirectionally map arvo $path <-> unix relative paths -** -** the first transform is trivial. the second poses some -** challenges: an arvo $path is a list of $knot, and the $knot -** space intersects with invalid unix paths in the three cases -** of: %$ (the empty knot), '.', and '..'. we escape these by -** prepending a '!' to the filename corresponding to the $knot, -** yielding unix files named '!', '!.', and '!..'. -** -** there is also the case of the empty path. we elide empty -** paths from this wrapper, which always uses the last path -** component as the file extension/mime-type. -** -** these transforms are implemented, but they ought to be -** implemented in one place, prior to any fs calls; as-is, they -** are sprinkled throughout the file updating code. -** -*/ -#include "all.h" -#include -#include "vere/vere.h" - -struct _u3_umon; -struct _u3_udir; -struct _u3_ufil; - -/* u3_unod: file or directory. -*/ - typedef struct _u3_unod { - c3_o dir; // c3y if dir, c3n if file - c3_o dry; // ie, unmodified - c3_c* pax_c; // absolute path - struct _u3_udir* par_u; // parent - struct _u3_unod* nex_u; // internal list - } u3_unod; - -/* u3_ufil: synchronized file. -*/ - typedef struct _u3_ufil { - c3_o dir; // c3y if dir, c3n if file - c3_o dry; // ie, unmodified - c3_c* pax_c; // absolute path - struct _u3_udir* par_u; // parent - struct _u3_unod* nex_u; // internal list - c3_w gum_w; // mug of last %ergo - } u3_ufil; - -/* u3_ufil: synchronized directory. -*/ - typedef struct _u3_udir { - c3_o dir; // c3y if dir, c3n if file - c3_o dry; // ie, unmodified - c3_c* pax_c; // absolute path - struct _u3_udir* par_u; // parent - struct _u3_unod* nex_u; // internal list - u3_unod* kid_u; // subnodes - } u3_udir; - -/* u3_ufil: synchronized mount point. -*/ - typedef struct _u3_umon { - u3_udir dir_u; // root directory, must be first - c3_c* nam_c; // mount point name - struct _u3_umon* nex_u; // internal list - } u3_umon; - -/* u3_unix: clay support system, also -*/ - typedef struct _u3_unix { - u3_auto car_u; - c3_l sev_l; // instance number - u3_umon* mon_u; // mount points - c3_c* pax_c; // pier directory - c3_o alm; // timer set - c3_o dyr; // ready to update - u3_noun sat; // (sane %ta) handle -#ifdef SYNCLOG - c3_w lot_w; // sync-slot - struct _u3_sylo { - c3_o unx; // from unix - c3_m wer_m; // mote saying where - c3_m wot_m; // mote saying what - c3_c* pax_c; // path - } sylo[1024]; -#endif - } u3_unix; - -void -u3_unix_ef_look(u3_unix* unx_u, u3_noun mon, u3_noun all); - -/* u3_unix_cane(): true iff (unix) path is canonical. -*/ -c3_t -u3_unix_cane(const c3_c* pax_c) -{ - if ( 0 == pax_c ) { - return 0; - } - // allow absolute paths. - // - if ( '/' == *pax_c ) { - pax_c++; - // allow root. - // - if ( 0 == *pax_c ) { - return 1; - } - } - do { - if ( 0 == *pax_c - || 0 == strcmp(".", pax_c) - || 0 == strcmp("..", pax_c) - || 0 == strncmp("/", pax_c, 1) - || 0 == strncmp("./", pax_c, 2) - || 0 == strncmp("../", pax_c, 3) ) - { - return 0; - } - pax_c = strchr(pax_c, '/'); - } while ( 0 != pax_c++ ); - return 1; -} - -/* _unix_sane_ta(): true iff pat is a valid @ta -** -** %ta is parsed by: -** (star ;~(pose nud low hep dot sig cab)) -*/ -static c3_t -_unix_sane_ta(u3_unix* unx_u, u3_atom pat) -{ - return _(u3n_slam_on(u3k(unx_u->sat), pat)); -} - -/* u3_readdir_r(): -*/ -c3_w -u3_readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result) -{ - errno = 0; - struct dirent * tmp_u = readdir(dirp); - - if (NULL == tmp_u){ - *result = NULL; - return (errno); // either success or error code - } else { - memcpy(entry, tmp_u, sizeof(struct dirent)); - *result = entry; - } - - return(0); -} - -/* _unix_string_to_knot(): convert c unix path component to $knot -*/ -static u3_atom -_unix_string_to_knot(c3_c* pax_c) -{ - c3_assert(pax_c); - // XX this can happen if we encounter a file without an extension. - // - // c3_assert(*pax_c); - c3_assert(!strchr(pax_c, '/')); - // XX horrible - // -# ifdef _WIN32 - c3_assert(!strchr(pax_c, '\\')); -# endif - if ( '!' == *pax_c ) { - pax_c++; - } - return u3i_string(pax_c); -} - -/* _unix_knot_to_string(): convert $knot to c unix path component. RETAIN. -*/ -static c3_c* -_unix_knot_to_string(u3_atom pon) -{ - c3_c* ret_c; - - if ( u3_nul != pon - && c3_s1('.') != pon - && c3_s2('.','.') != pon - && '!' != u3r_byte(0, pon) ) - { - ret_c = u3r_string(pon); - } - else { - c3_w met_w = u3r_met(3, pon); - - ret_c = c3_malloc(met_w + 2); - *ret_c = '!'; - u3r_bytes(0, met_w, (c3_y*)ret_c + 1, pon); - ret_c[met_w + 1] = 0; - } - c3_assert(!strchr(ret_c, '/')); -# ifdef _WIN32 - c3_assert(!strchr(ret_c, '\\')); -# endif - return ret_c; -} - -/* _unix_down(): descend path. -*/ -static c3_c* -_unix_down(c3_c* pax_c, c3_c* sub_c) -{ - c3_w pax_w = strlen(pax_c); - c3_w sub_w = strlen(sub_c); - c3_c* don_c = c3_malloc(pax_w + sub_w + 2); - - strcpy(don_c, pax_c); - don_c[pax_w] = '/'; - strcpy(don_c + pax_w + 1, sub_c); - don_c[pax_w + 1 + sub_w] = '\0'; - - return don_c; -} - -/* _unix_string_to_path(): convert c string to u3_noun $path -** -** c string must begin with the pier path plus mountpoint -*/ -static u3_noun -_unix_string_to_path_helper(c3_c* pax_c) -{ - u3_noun not; - - c3_assert(pax_c[-1] == '/'); - c3_c* end_c = strchr(pax_c, '/'); - if ( !end_c ) { - end_c = strrchr(pax_c, '.'); - if ( !end_c ) { - return u3nc(_unix_string_to_knot(pax_c), u3_nul); - } - else { - *end_c = 0; - not = _unix_string_to_knot(pax_c); - *end_c = '.'; - return u3nt(not, _unix_string_to_knot(end_c + 1), u3_nul); - } - } - else { - *end_c = 0; - not = _unix_string_to_knot(pax_c); - *end_c = '/'; - return u3nc(not, _unix_string_to_path_helper(end_c + 1)); - } -} -static u3_noun -_unix_string_to_path(u3_unix* unx_u, c3_c* pax_c) -{ - pax_c += strlen(unx_u->pax_c) + 1; - c3_c* pox_c = strchr(pax_c, '/'); - if ( !pox_c ) { - pox_c = strchr(pax_c, '.'); - if ( !pox_c ) { - return u3_nul; - } - else { - return u3nc(_unix_string_to_knot(pox_c + 1), u3_nul); - } - } - else { - return _unix_string_to_path_helper(pox_c + 1); - } -} - -/* _unix_mkdirp(): recursive mkdir of dirname of pax_c. -*/ -static void -_unix_mkdirp(c3_c* pax_c) -{ - c3_c* fas_c = strchr(pax_c + 1, '/'); - - while ( fas_c ) { - *fas_c = 0; - if ( 0 != mkdir(pax_c, 0777) && EEXIST != errno ) { - u3l_log("unix: mkdir %s: %s\n", pax_c, strerror(errno)); - u3m_bail(c3__fail); - } - *fas_c++ = '/'; - fas_c = strchr(fas_c, '/'); - } -} - -/* u3_unix_save(): save file under .../.urb/put or bail. -** -** XX this is quite bad, and doesn't share much in common with -** the rest of unix.c. a refactor would probably share common -** logic with _unix_sync_change, perhaps using openat, making -** unx_u optional, and/or having a flag to not track the file -** for future changes. -*/ -void -u3_unix_save(c3_c* pax_c, u3_atom pad) -{ - c3_i fid_i; - c3_w lod_w, len_w, fln_w, rit_w; - c3_y* pad_y; - c3_c* ful_c; - - if ( !u3_unix_cane(pax_c) ) { - u3l_log("%s: non-canonical path\n", pax_c); - u3z(pad); u3m_bail(c3__fail); - } - if ( '/' == *pax_c) { - pax_c++; - } - lod_w = strlen(u3_Host.dir_c); - len_w = lod_w + sizeof("/.urb/put/") + strlen(pax_c); - ful_c = c3_malloc(len_w); - rit_w = snprintf(ful_c, len_w, "%s/.urb/put/%s", u3_Host.dir_c, pax_c); - c3_assert(len_w == rit_w + 1); - - _unix_mkdirp(ful_c); - fid_i = c3_open(ful_c, O_WRONLY | O_CREAT | O_TRUNC, 0666); - if ( fid_i < 0 ) { - u3l_log("%s: %s\n", ful_c, strerror(errno)); - c3_free(ful_c); - u3z(pad); u3m_bail(c3__fail); - } - - fln_w = u3r_met(3, pad); - pad_y = c3_malloc(fln_w); - u3r_bytes(0, fln_w, pad_y, pad); - u3z(pad); - rit_w = write(fid_i, pad_y, fln_w); - close(fid_i); - c3_free(pad_y); - - if ( rit_w != fln_w ) { - u3l_log("%s: %s\n", ful_c, strerror(errno)); - c3_free(ful_c); - u3m_bail(c3__fail); - } - c3_free(ful_c); -} - -/* _unix_rm_r_cb(): callback to delete individual files/directories -*/ -static c3_i -_unix_rm_r_cb(const c3_c* pax_c, - const struct stat* buf_u, - c3_i typeflag, - struct FTW* ftw_u) -{ - switch ( typeflag ) { - default: - u3l_log("bad file type in rm_r: %s\r\n", pax_c); - break; - case FTW_F: - if ( 0 != c3_unlink(pax_c) && ENOENT != errno ) { - u3l_log("error unlinking (in rm_r) %s: %s\n", - pax_c, strerror(errno)); - c3_assert(0); - } - break; - case FTW_D: - u3l_log("shouldn't have gotten pure directory: %s\r\n", pax_c); - break; - case FTW_DNR: - u3l_log("couldn't read directory: %s\r\n", pax_c); - break; - case FTW_NS: - u3l_log("couldn't stat path: %s\r\n", pax_c); - break; - case FTW_DP: - if ( 0 != c3_rmdir(pax_c) && ENOENT != errno ) { - u3l_log("error rmdiring %s: %s\n", pax_c, strerror(errno)); - c3_assert(0); - } - break; - case FTW_SL: - u3l_log("got symbolic link: %s\r\n", pax_c); - break; - case FTW_SLN: - u3l_log("got nonexistent symbolic link: %s\r\n", pax_c); - break; - } - - return 0; -} - -/* _unix_rm_r(): rm -r directory -*/ -static void -_unix_rm_r(c3_c* pax_c) -{ - if ( 0 > nftw(pax_c, _unix_rm_r_cb, 100, FTW_DEPTH | FTW_PHYS ) - && ENOENT != errno) { - u3l_log("rm_r error on %s: %s\r\n", pax_c, strerror(errno)); - } -} - -/* _unix_mkdir(): mkdir, asserting. -*/ -static void -_unix_mkdir(c3_c* pax_c) -{ - if ( 0 != c3_mkdir(pax_c, 0755) && EEXIST != errno) { - u3l_log("error mkdiring %s: %s\n", pax_c, strerror(errno)); - c3_assert(0); - } -} - -/* _unix_write_file_hard(): write to a file, overwriting what's there -*/ -static c3_w -_unix_write_file_hard(c3_c* pax_c, u3_noun mim) -{ - c3_i fid_i = c3_open(pax_c, O_WRONLY | O_CREAT | O_TRUNC, 0666); - c3_w len_w, rit_w, siz_w, mug_w = 0; - c3_y* dat_y; - - u3_noun dat = u3t(u3t(mim)); - - if ( fid_i < 0 ) { - u3l_log("error opening %s for writing: %s\r\n", - pax_c, strerror(errno)); - u3z(mim); - return 0; - } - - siz_w = u3h(u3t(mim)); - len_w = u3r_met(3, dat); - dat_y = c3_calloc(siz_w); - - u3r_bytes(0, len_w, dat_y, dat); - u3z(mim); - - rit_w = write(fid_i, dat_y, siz_w); - - if ( rit_w != siz_w ) { - u3l_log("error writing %s: %s\r\n", - pax_c, strerror(errno)); - mug_w = 0; - } - else { - mug_w = u3r_mug_bytes(dat_y, len_w); - } - - close(fid_i); - c3_free(dat_y); - - return mug_w; -} - -/* _unix_write_file_soft(): write to a file, not overwriting if it's changed -*/ -static void -_unix_write_file_soft(u3_ufil* fil_u, u3_noun mim) -{ - struct stat buf_u; - c3_i fid_i = c3_open(fil_u->pax_c, O_RDONLY, 0644); - c3_ws len_ws, red_ws; - c3_w old_w; - c3_y* old_y; - - if ( fid_i < 0 || fstat(fid_i, &buf_u) < 0 ) { - if ( ENOENT == errno ) { - goto _unix_write_file_soft_go; - } - else { - u3l_log("error opening file (soft) %s: %s\r\n", - fil_u->pax_c, strerror(errno)); - u3z(mim); - return; - } - } - - len_ws = buf_u.st_size; - old_y = c3_malloc(len_ws); - - red_ws = read(fid_i, old_y, len_ws); - - if ( close(fid_i) < 0 ) { - u3l_log("error closing file (soft) %s: %s\r\n", - fil_u->pax_c, strerror(errno)); - } - - if ( len_ws != red_ws ) { - if ( red_ws < 0 ) { - u3l_log("error reading file (soft) %s: %s\r\n", - fil_u->pax_c, strerror(errno)); - } - else { - u3l_log("wrong # of bytes read in file %s: %d %d\r\n", - fil_u->pax_c, len_ws, red_ws); - } - c3_free(old_y); - u3z(mim); - return; - } - - old_w = u3r_mug_bytes(old_y, len_ws); - - if ( old_w != fil_u->gum_w ) { - fil_u->gum_w = u3r_mug(u3t(u3t(mim))); // XXX this might fail with - c3_free(old_y); // trailing zeros - u3z(mim); - return; - } - - c3_free(old_y); - -_unix_write_file_soft_go: - fil_u->gum_w = _unix_write_file_hard(fil_u->pax_c, mim); -} - -static void -_unix_watch_dir(u3_udir* dir_u, u3_udir* par_u, c3_c* pax_c); -static void -_unix_watch_file(u3_unix* unx_u, u3_ufil* fil_u, u3_udir* par_u, c3_c* pax_c); - -/* _unix_get_mount_point(): retrieve or create mount point -*/ -static u3_umon* -_unix_get_mount_point(u3_unix* unx_u, u3_noun mon) -{ - if ( c3n == u3ud(mon) ) { - c3_assert(!"mount point must be an atom"); - u3z(mon); - return NULL; - } - - c3_c* nam_c = _unix_knot_to_string(mon); - u3_umon* mon_u; - - for ( mon_u = unx_u->mon_u; - mon_u && 0 != strcmp(nam_c, mon_u->nam_c); - mon_u = mon_u->nex_u ) - { - } - - if ( !mon_u ) { - mon_u = c3_malloc(sizeof(u3_umon)); - mon_u->nam_c = nam_c; - mon_u->dir_u.dir = c3y; - mon_u->dir_u.dry = c3n; - mon_u->dir_u.pax_c = strdup(unx_u->pax_c); - mon_u->dir_u.par_u = NULL; - mon_u->dir_u.nex_u = NULL; - mon_u->dir_u.kid_u = NULL; - mon_u->nex_u = unx_u->mon_u; - unx_u->mon_u = mon_u; - } - else { - c3_free(nam_c); - } - - u3z(mon); - - return mon_u; -} - -/* _unix_scan_mount_point(): scan unix for already-existing mount point -*/ -static void -_unix_scan_mount_point(u3_unix* unx_u, u3_umon* mon_u) -{ - DIR* rid_u = c3_opendir(mon_u->dir_u.pax_c); - if ( !rid_u ) { - u3l_log("error opening pier directory: %s: %s\r\n", - mon_u->dir_u.pax_c, strerror(errno)); - return; - } - - c3_w len_w = strlen(mon_u->nam_c); - - while ( 1 ) { - struct dirent ent_u; - struct dirent* out_u; - c3_w err_w; - - if ( 0 != (err_w = u3_readdir_r(rid_u, &ent_u, &out_u)) ) { - u3l_log("erroring loading pier directory %s: %s\r\n", - mon_u->dir_u.pax_c, strerror(errno)); - - c3_assert(0); - } - else if ( !out_u ) { - break; - } - else if ( '.' == out_u->d_name[0] ) { // unnecessary, but consistency - continue; - } - else if ( 0 != strncmp(mon_u->nam_c, out_u->d_name, len_w) ) { - continue; - } - else { - c3_c* pax_c = _unix_down(mon_u->dir_u.pax_c, out_u->d_name); - - struct stat buf_u; - - if ( 0 != stat(pax_c, &buf_u) ) { - u3l_log("can't stat pier directory %s: %s\r\n", - mon_u->dir_u.pax_c, strerror(errno)); - c3_free(pax_c); - continue; - } - if ( S_ISDIR(buf_u.st_mode) ) { - if ( out_u->d_name[len_w] != '\0' ) { - c3_free(pax_c); - continue; - } - else { - u3_udir* dir_u = c3_malloc(sizeof(u3_udir)); - _unix_watch_dir(dir_u, &mon_u->dir_u, pax_c); - } - } - else { - if ( '.' != out_u->d_name[len_w] - || '\0' == out_u->d_name[len_w + 1] - || '~' == out_u->d_name[strlen(out_u->d_name) - 1] - || !_unix_sane_ta(unx_u, _unix_string_to_knot(out_u->d_name)) ) - { - c3_free(pax_c); - continue; - } - else { - u3_ufil* fil_u = c3_malloc(sizeof(u3_ufil)); - _unix_watch_file(unx_u, fil_u, &mon_u->dir_u, pax_c); - } - } - - c3_free(pax_c); - } - } -} - -static u3_noun _unix_free_node(u3_unix* unx_u, u3_unod* nod_u); - -/* _unix_free_file(): free file, unlinking it -*/ -static void -_unix_free_file(u3_ufil *fil_u) -{ - if ( 0 != c3_unlink(fil_u->pax_c) && ENOENT != errno ) { - u3l_log("error unlinking %s: %s\n", fil_u->pax_c, strerror(errno)); - c3_assert(0); - } - - c3_free(fil_u->pax_c); - c3_free(fil_u); -} - -/* _unix_free_dir(): free directory, deleting everything within -*/ -static void -_unix_free_dir(u3_udir *dir_u) -{ - _unix_rm_r(dir_u->pax_c); - - if ( dir_u->kid_u ) { - fprintf(stderr, "don't kill me, i've got a family %s\r\n", dir_u->pax_c); - } - else { - // fprintf(stderr, "i'm a lone, lonely loner %s\r\n", dir_u->pax_c); - } - c3_free(dir_u->pax_c); - c3_free(dir_u); // XXX this might be too early, how do we - // know we've freed all the children? - // i suspect we should do this only if - // our kid list is empty -} - -/* _unix_free_node(): free node, deleting everything within -** -** also deletes from parent list if in it -*/ -static u3_noun -_unix_free_node(u3_unix* unx_u, u3_unod* nod_u) -{ - u3_noun can; - if ( nod_u->par_u ) { - u3_unod* don_u = nod_u->par_u->kid_u; - - if ( !don_u ) { - } - else if ( nod_u == don_u ) { - nod_u->par_u->kid_u = nod_u->par_u->kid_u->nex_u; - } - else { - for ( ; don_u->nex_u && nod_u != don_u->nex_u; don_u = don_u->nex_u ) { - } - if ( don_u->nex_u ) { - don_u->nex_u = don_u->nex_u->nex_u; - } - } - } - - if ( c3y == nod_u->dir ) { - can = u3_nul; - u3_unod* nud_u = ((u3_udir*) nod_u)->kid_u; - while ( nud_u ) { - u3_unod* nex_u = nud_u->nex_u; - can = u3kb_weld(_unix_free_node(unx_u, nud_u), can); - nud_u = nex_u; - } - _unix_free_dir((u3_udir *)nod_u); - } - else { - can = u3nc(u3nc(_unix_string_to_path(unx_u, nod_u->pax_c), u3_nul), - u3_nul); - _unix_free_file((u3_ufil *)nod_u); - } - - return can; -} - -/* _unix_free_mount_point(): free mount point -** -** this process needs to happen in a very careful order. in -** particular, we must recurse before we get to the callback, so -** that libuv does all the child directories before it does us. -** -** tread carefully -*/ -static void -_unix_free_mount_point(u3_unix* unx_u, u3_umon* mon_u) -{ - u3_unod* nod_u; - for ( nod_u = mon_u->dir_u.kid_u; nod_u; ) { - u3_unod* nex_u = nod_u->nex_u; - u3z(_unix_free_node(unx_u, nod_u)); - nod_u = nex_u; - } - - c3_free(mon_u->dir_u.pax_c); - c3_free(mon_u->nam_c); - c3_free(mon_u); -} - -/* _unix_delete_mount_point(): remove mount point from list and free -*/ -static void -_unix_delete_mount_point(u3_unix* unx_u, u3_noun mon) -{ - if ( c3n == u3ud(mon) ) { - c3_assert(!"mount point must be an atom"); - u3z(mon); - return; - } - - c3_c* nam_c = _unix_knot_to_string(mon); - u3_umon* mon_u; - u3_umon* tem_u; - - mon_u = unx_u->mon_u; - if ( !mon_u ) { - u3l_log("mount point already gone: %s\r\n", nam_c); - goto _delete_mount_point_out; - } - if ( 0 == strcmp(nam_c, mon_u->nam_c) ) { - unx_u->mon_u = mon_u->nex_u; - _unix_free_mount_point(unx_u, mon_u); - goto _delete_mount_point_out; - } - - for ( ; - mon_u->nex_u && 0 != strcmp(nam_c, mon_u->nex_u->nam_c); - mon_u = mon_u->nex_u ) - { - } - - if ( !mon_u->nex_u ) { - u3l_log("mount point already gone: %s\r\n", nam_c); - goto _delete_mount_point_out; - } - - tem_u = mon_u->nex_u; - mon_u->nex_u = mon_u->nex_u->nex_u; - _unix_free_mount_point(unx_u, tem_u); - -_delete_mount_point_out: - c3_free(nam_c); - u3z(mon); -} - -/* _unix_commit_mount_point: commit from mount point -*/ -static void -_unix_commit_mount_point(u3_unix* unx_u, u3_noun mon) -{ - unx_u->dyr = c3y; - u3_unix_ef_look(unx_u, mon, c3n); - return; -} - -/* _unix_watch_file(): initialize file -*/ -static void -_unix_watch_file(u3_unix* unx_u, u3_ufil* fil_u, u3_udir* par_u, c3_c* pax_c) -{ - // initialize fil_u - - fil_u->dir = c3n; - fil_u->dry = c3n; - fil_u->pax_c = c3_malloc(1 + strlen(pax_c)); - strcpy(fil_u->pax_c, pax_c); - fil_u->par_u = par_u; - fil_u->nex_u = NULL; - fil_u->gum_w = 0; - - if ( par_u ) { - fil_u->nex_u = par_u->kid_u; - par_u->kid_u = (u3_unod*) fil_u; - } -} - -/* _unix_watch_dir(): initialize directory -*/ -static void -_unix_watch_dir(u3_udir* dir_u, u3_udir* par_u, c3_c* pax_c) -{ - // initialize dir_u - - dir_u->dir = c3y; - dir_u->dry = c3n; - dir_u->pax_c = c3_malloc(1 + strlen(pax_c)); - strcpy(dir_u->pax_c, pax_c); - dir_u->par_u = par_u; - dir_u->nex_u = NULL; - dir_u->kid_u = NULL; - - if ( par_u ) { - dir_u->nex_u = par_u->kid_u; - par_u->kid_u = (u3_unod*) dir_u; - } -} - -/* _unix_create_dir(): create unix directory and watch it -*/ -static void -_unix_create_dir(u3_udir* dir_u, u3_udir* par_u, u3_noun nam) -{ - c3_c* nam_c = _unix_knot_to_string(nam); - c3_w nam_w = strlen(nam_c); - c3_w pax_w = strlen(par_u->pax_c); - c3_c* pax_c = c3_malloc(pax_w + 1 + nam_w + 1); - - strcpy(pax_c, par_u->pax_c); - pax_c[pax_w] = '/'; - strcpy(pax_c + pax_w + 1, nam_c); - pax_c[pax_w + 1 + nam_w] = '\0'; - - c3_free(nam_c); - u3z(nam); - - _unix_mkdir(pax_c); - _unix_watch_dir(dir_u, par_u, pax_c); -} - -static u3_noun _unix_update_node(u3_unix* unx_u, u3_unod* nod_u); - -/* _unix_update_file(): update file, producing list of changes -** -** when scanning through files, if dry, do nothing. otherwise, -** mark as dry, then check if file exists. if not, remove -** self from node list and add path plus sig to %into event. -** otherwise, read the file and get a mug checksum. if same as -** gum_w, move on. otherwise, overwrite add path plus data to -** %into event. -*/ -static u3_noun -_unix_update_file(u3_unix* unx_u, u3_ufil* fil_u) -{ - c3_assert( c3n == fil_u->dir ); - - if ( c3y == fil_u->dry ) { - return u3_nul; - } - - fil_u->dry = c3n; - - struct stat buf_u; - c3_i fid_i = c3_open(fil_u->pax_c, O_RDONLY, 0644); - c3_ws len_ws, red_ws; - c3_y* dat_y; - - if ( fid_i < 0 || fstat(fid_i, &buf_u) < 0 ) { - if ( ENOENT == errno ) { - return u3nc(u3nc(_unix_string_to_path(unx_u, fil_u->pax_c), u3_nul), u3_nul); - } - else { - u3l_log("error opening file %s: %s\r\n", - fil_u->pax_c, strerror(errno)); - return u3_nul; - } - } - - len_ws = buf_u.st_size; - dat_y = c3_malloc(len_ws); - - red_ws = read(fid_i, dat_y, len_ws); - - if ( close(fid_i) < 0 ) { - u3l_log("error closing file %s: %s\r\n", - fil_u->pax_c, strerror(errno)); - } - - if ( len_ws != red_ws ) { - if ( red_ws < 0 ) { - u3l_log("error reading file %s: %s\r\n", - fil_u->pax_c, strerror(errno)); - } - else { - u3l_log("wrong # of bytes read in file %s: %d %d\r\n", - fil_u->pax_c, len_ws, red_ws); - } - c3_free(dat_y); - return u3_nul; - } - else { - c3_w mug_w = u3r_mug_bytes(dat_y, len_ws); - if ( mug_w == fil_u->gum_w ) { - c3_free(dat_y); - return u3_nul; - } - else { - u3_noun pax = _unix_string_to_path(unx_u, fil_u->pax_c); - u3_noun mim = u3nt(c3__text, u3i_string("plain"), u3_nul); - u3_noun dat = u3nt(mim, len_ws, u3i_bytes(len_ws, dat_y)); - - c3_free(dat_y); - return u3nc(u3nt(pax, u3_nul, dat), u3_nul); - } - } -} - -/* _unix_update_dir(): update directory, producing list of changes -** -** when changing this, consider whether to also change -** _unix_initial_update_dir() -*/ -static u3_noun -_unix_update_dir(u3_unix* unx_u, u3_udir* dir_u) -{ - u3_noun can = u3_nul; - - c3_assert( c3y == dir_u->dir ); - - if ( c3y == dir_u->dry ) { - return u3_nul; - } - - dir_u->dry = c3n; - - // Check that old nodes are still there - - u3_unod* nod_u = dir_u->kid_u; - - if ( nod_u ) { - while ( nod_u ) { - if ( c3y == nod_u->dry ) { - nod_u = nod_u->nex_u; - } - else { - if ( c3y == nod_u->dir ) { - DIR* red_u = c3_opendir(nod_u->pax_c); - if ( 0 == red_u ) { - u3_unod* nex_u = nod_u->nex_u; - can = u3kb_weld(_unix_free_node(unx_u, nod_u), can); - nod_u = nex_u; - } - else { - closedir(red_u); - nod_u = nod_u->nex_u; - } - } - else { - struct stat buf_u; - c3_i fid_i = c3_open(nod_u->pax_c, O_RDONLY, 0644); - - if ( (fid_i < 0) || (fstat(fid_i, &buf_u) < 0) ) { - if ( ENOENT != errno ) { - u3l_log("_unix_update_dir: error opening file %s: %s\r\n", - nod_u->pax_c, strerror(errno)); - } - - u3_unod* nex_u = nod_u->nex_u; - can = u3kb_weld(_unix_free_node(unx_u, nod_u), can); - nod_u = nex_u; - } - else { - if ( close(fid_i) < 0 ) { - u3l_log("_unix_update_dir: error closing file %s: %s\r\n", - nod_u->pax_c, strerror(errno)); - } - - nod_u = nod_u->nex_u; - } - } - } - } - } - - // Check for new nodes - - DIR* rid_u = c3_opendir(dir_u->pax_c); - if ( !rid_u ) { - u3l_log("error opening directory %s: %s\r\n", - dir_u->pax_c, strerror(errno)); - c3_assert(0); - } - - while ( 1 ) { - struct dirent ent_u; - struct dirent* out_u; - c3_w err_w; - - - if ( (err_w = u3_readdir_r(rid_u, &ent_u, &out_u)) != 0 ) { - u3l_log("error loading directory %s: %s\r\n", - dir_u->pax_c, strerror(err_w)); - c3_assert(0); - } - else if ( !out_u ) { - break; - } - else if ( '.' == out_u->d_name[0] ) { - continue; - } - else { - c3_c* pax_c = _unix_down(dir_u->pax_c, out_u->d_name); - - struct stat buf_u; - - if ( 0 != stat(pax_c, &buf_u) ) { - u3l_log("can't stat %s: %s\r\n", pax_c, strerror(errno)); - c3_free(pax_c); - continue; - } - else { - u3_unod* nod_u; - for ( nod_u = dir_u->kid_u; nod_u; nod_u = nod_u->nex_u ) { - if ( 0 == strcmp(pax_c, nod_u->pax_c) ) { - if ( S_ISDIR(buf_u.st_mode) ) { - if ( c3n == nod_u->dir ) { - u3l_log("not a directory: %s\r\n", nod_u->pax_c); - c3_assert(0); - } - } - else { - if ( c3y == nod_u->dir ) { - u3l_log("not a file: %s\r\n", nod_u->pax_c); - c3_assert(0); - } - } - break; - } - } - - if ( !nod_u ) { - if ( !S_ISDIR(buf_u.st_mode) ) { - if ( !strchr(out_u->d_name,'.') - || '~' == out_u->d_name[strlen(out_u->d_name) - 1] - || !_unix_sane_ta(unx_u, _unix_string_to_knot(out_u->d_name)) ) - { - c3_free(pax_c); - continue; - } - - u3_ufil* fil_u = c3_malloc(sizeof(u3_ufil)); - _unix_watch_file(unx_u, fil_u, dir_u, pax_c); - } - else { - u3_udir* dis_u = c3_malloc(sizeof(u3_udir)); - _unix_watch_dir(dis_u, dir_u, pax_c); - can = u3kb_weld(_unix_update_dir(unx_u, dis_u), can); // XXX unnecessary? - } - } - } - - c3_free(pax_c); - } - } - - if ( closedir(rid_u) < 0 ) { - u3l_log("error closing directory %s: %s\r\n", - dir_u->pax_c, strerror(errno)); - } - - if ( !dir_u->kid_u ) { - return u3kb_weld(_unix_free_node(unx_u, (u3_unod*) dir_u), can); - } - - // get change list - - for ( nod_u = dir_u->kid_u; nod_u; nod_u = nod_u->nex_u ) { - can = u3kb_weld(_unix_update_node(unx_u, nod_u), can); - } - - return can; -} - -/* _unix_update_node(): update node, producing list of changes -*/ -static u3_noun -_unix_update_node(u3_unix* unx_u, u3_unod* nod_u) -{ - if ( c3y == nod_u->dir ) { - return _unix_update_dir(unx_u, (void*)nod_u); - } - else { - return _unix_update_file(unx_u, (void*)nod_u); - } -} - -/* _unix_update_mount(): update mount point -*/ -static void -_unix_update_mount(u3_unix* unx_u, u3_umon* mon_u, u3_noun all) -{ - if ( c3n == mon_u->dir_u.dry ) { - u3_noun can = u3_nul; - u3_unod* nod_u; - for ( nod_u = mon_u->dir_u.kid_u; nod_u; nod_u = nod_u->nex_u ) { - can = u3kb_weld(_unix_update_node(unx_u, nod_u), can); - } - - { - // XX remove u3A->sen - // - u3_noun wir = u3nt(c3__sync, - u3dc("scot", c3__uv, unx_u->sev_l), - u3_nul); - u3_noun cad = u3nq(c3__into, _unix_string_to_knot(mon_u->nam_c), all, - can); - - u3_auto_plan(&unx_u->car_u, u3_ovum_init(0, c3__c, wir, cad)); - } - } -} - -/* _unix_initial_update_file(): read file, but don't watch -** XX deduplicate with _unix_update_file() -*/ -static u3_noun -_unix_initial_update_file(c3_c* pax_c, c3_c* bas_c) -{ - struct stat buf_u; - c3_i fid_i = c3_open(pax_c, O_RDONLY, 0644); - c3_ws len_ws, red_ws; - c3_y* dat_y; - - if ( fid_i < 0 || fstat(fid_i, &buf_u) < 0 ) { - if ( ENOENT == errno ) { - return u3_nul; - } - else { - u3l_log("error opening initial file %s: %s\r\n", - pax_c, strerror(errno)); - return u3_nul; - } - } - - len_ws = buf_u.st_size; - dat_y = c3_malloc(len_ws); - - red_ws = read(fid_i, dat_y, len_ws); - - if ( close(fid_i) < 0 ) { - u3l_log("error closing initial file %s: %s\r\n", - pax_c, strerror(errno)); - } - - if ( len_ws != red_ws ) { - if ( red_ws < 0 ) { - u3l_log("error reading initial file %s: %s\r\n", - pax_c, strerror(errno)); - } - else { - u3l_log("wrong # of bytes read in initial file %s: %d %d\r\n", - pax_c, len_ws, red_ws); - } - c3_free(dat_y); - return u3_nul; - } - else { - u3_noun pax = _unix_string_to_path_helper(pax_c - + strlen(bas_c) - + 1); /* XX slightly less VERY BAD than before*/ - u3_noun mim = u3nt(c3__text, u3i_string("plain"), u3_nul); - u3_noun dat = u3nt(mim, len_ws, u3i_bytes(len_ws, dat_y)); - - c3_free(dat_y); - return u3nc(u3nt(pax, u3_nul, dat), u3_nul); - } -} - -/* _unix_initial_update_dir(): read directory, but don't watch -** XX deduplicate with _unix_update_dir() -*/ -static u3_noun -_unix_initial_update_dir(c3_c* pax_c, c3_c* bas_c) -{ - u3_noun can = u3_nul; - - DIR* rid_u = c3_opendir(pax_c); - if ( !rid_u ) { - u3l_log("error opening initial directory: %s: %s\r\n", - pax_c, strerror(errno)); - return u3_nul; - } - - while ( 1 ) { - struct dirent ent_u; - struct dirent* out_u; - c3_w err_w; - - if ( 0 != (err_w = u3_readdir_r(rid_u, &ent_u, &out_u)) ) { - u3l_log("error loading initial directory %s: %s\r\n", - pax_c, strerror(errno)); - - c3_assert(0); - } - else if ( !out_u ) { - break; - } - else if ( '.' == out_u->d_name[0] ) { - continue; - } - else { - c3_c* pox_c = _unix_down(pax_c, out_u->d_name); - - struct stat buf_u; - - if ( 0 != stat(pox_c, &buf_u) ) { - u3l_log("initial can't stat %s: %s\r\n", - pox_c, strerror(errno)); - c3_free(pox_c); - continue; - } - else { - if ( S_ISDIR(buf_u.st_mode) ) { - can = u3kb_weld(_unix_initial_update_dir(pox_c, bas_c), can); - } - else { - can = u3kb_weld(_unix_initial_update_file(pox_c, bas_c), can); - } - c3_free(pox_c); - } - } - } - - if ( closedir(rid_u) < 0 ) { - u3l_log("error closing initial directory %s: %s\r\n", - pax_c, strerror(errno)); - } - - return can; -} - -/* u3_unix_initial_into_card(): create initial filesystem sync card. -*/ -u3_noun -u3_unix_initial_into_card(c3_c* arv_c) -{ - u3_noun can = _unix_initial_update_dir(arv_c, arv_c); - - return u3nc(u3nt(c3__c, c3__sync, u3_nul), - u3nq(c3__into, u3_nul, c3y, can)); -} - -/* _unix_sync_file(): sync file to unix -*/ -static void -_unix_sync_file(u3_unix* unx_u, u3_udir* par_u, u3_noun nam, u3_noun ext, u3_noun mim) -{ - c3_assert( par_u ); - c3_assert( c3y == par_u->dir ); - - // form file path - - c3_c* nam_c = _unix_knot_to_string(nam); - c3_c* ext_c = _unix_knot_to_string(ext); - c3_w par_w = strlen(par_u->pax_c); - c3_w nam_w = strlen(nam_c); - c3_w ext_w = strlen(ext_c); - c3_c* pax_c = c3_malloc(par_w + 1 + nam_w + 1 + ext_w + 1); - - strcpy(pax_c, par_u->pax_c); - pax_c[par_w] = '/'; - strcpy(pax_c + par_w + 1, nam_c); - pax_c[par_w + 1 + nam_w] = '.'; - strcpy(pax_c + par_w + 1 + nam_w + 1, ext_c); - pax_c[par_w + 1 + nam_w + 1 + ext_w] = '\0'; - - c3_free(nam_c); c3_free(ext_c); - u3z(nam); u3z(ext); - - // check whether we already know about this file - - u3_unod* nod_u; - for ( nod_u = par_u->kid_u; - ( nod_u && - ( c3y == nod_u->dir || - 0 != strcmp(nod_u->pax_c, pax_c) ) ); - nod_u = nod_u->nex_u ) - { } - - // apply change - - if ( u3_nul == mim ) { - if ( nod_u ) { - u3z(_unix_free_node(unx_u, nod_u)); - } - } - else { - - if ( !nod_u ) { - c3_w gum_w = _unix_write_file_hard(pax_c, u3k(u3t(mim))); - u3_ufil* fil_u = c3_malloc(sizeof(u3_ufil)); - _unix_watch_file(unx_u, fil_u, par_u, pax_c); - fil_u->gum_w = gum_w; - goto _unix_sync_file_out; - } - else { - _unix_write_file_soft((u3_ufil*) nod_u, u3k(u3t(mim))); - } - } - - c3_free(pax_c); - -_unix_sync_file_out: - u3z(mim); -} - -/* _unix_sync_change(): sync single change to unix -*/ -static void -_unix_sync_change(u3_unix* unx_u, u3_udir* dir_u, u3_noun pax, u3_noun mim) -{ - c3_assert( c3y == dir_u->dir ); - - if ( c3n == u3du(pax) ) { - if ( u3_nul == pax ) { - u3l_log("can't sync out file as top-level, strange\r\n"); - } - else { - u3l_log("sync out: bad path\r\n"); - } - u3z(pax); u3z(mim); - return; - } - else if ( c3n == u3du(u3t(pax)) ) { - u3l_log("can't sync out file as top-level, strangely\r\n"); - u3z(pax); u3z(mim); - } - else { - u3_noun i_pax = u3h(pax); - u3_noun t_pax = u3t(pax); - u3_noun it_pax = u3h(t_pax); - u3_noun tt_pax = u3t(t_pax); - - if ( u3_nul == tt_pax ) { - _unix_sync_file(unx_u, dir_u, u3k(i_pax), u3k(it_pax), mim); - } - else { - c3_c* nam_c = _unix_knot_to_string(i_pax); - c3_w pax_w = strlen(dir_u->pax_c); - u3_unod* nod_u; - - for ( nod_u = dir_u->kid_u; - ( nod_u && - ( c3n == nod_u->dir || - 0 != strcmp(nod_u->pax_c + pax_w + 1, nam_c) ) ); - nod_u = nod_u->nex_u ) - { } - - if ( !nod_u ) { - nod_u = c3_malloc(sizeof(u3_udir)); - _unix_create_dir((u3_udir*) nod_u, dir_u, u3k(i_pax)); - } - - if ( c3n == nod_u->dir ) { - u3l_log("weird, we got a file when we weren't expecting to\r\n"); - c3_assert(0); - } - - _unix_sync_change(unx_u, (u3_udir*) nod_u, u3k(t_pax), mim); - } - } - u3z(pax); -} - -/* _unix_sync_ergo(): sync list of changes to unix -*/ -static void -_unix_sync_ergo(u3_unix* unx_u, u3_umon* mon_u, u3_noun can) -{ - u3_noun nac = can; - u3_noun nam = _unix_string_to_knot(mon_u->nam_c); - - while ( u3_nul != nac) { - _unix_sync_change(unx_u, &mon_u->dir_u, - u3nc(u3k(nam), u3k(u3h(u3h(nac)))), - u3k(u3t(u3h(nac)))); - nac = u3t(nac); - } - - u3z(nam); - u3z(can); -} - -/* u3_unix_ef_dirk(): commit mount point -*/ -void -u3_unix_ef_dirk(u3_unix* unx_u, u3_noun mon) -{ - _unix_commit_mount_point(unx_u, mon); -} - -/* u3_unix_ef_ergo(): update filesystem from urbit -*/ -void -u3_unix_ef_ergo(u3_unix* unx_u, u3_noun mon, u3_noun can) -{ - u3_umon* mon_u = _unix_get_mount_point(unx_u, mon); - - _unix_sync_ergo(unx_u, mon_u, can); -} - -/* u3_unix_ef_ogre(): delete mount point -*/ -void -u3_unix_ef_ogre(u3_unix* unx_u, u3_noun mon) -{ - _unix_delete_mount_point(unx_u, mon); -} - -/* u3_unix_ef_hill(): enumerate mount points -*/ -void -u3_unix_ef_hill(u3_unix* unx_u, u3_noun hil) -{ - u3_noun mon; - - for ( mon = hil; c3y == u3du(mon); mon = u3t(mon) ) { - u3_umon* mon_u = _unix_get_mount_point(unx_u, u3k(u3h(mon))); - _unix_scan_mount_point(unx_u, mon_u); - } - - unx_u->car_u.liv_o = c3y; - - u3z(hil); -} - -/* u3_unix_ef_look(): update the root of a specific mount point. -*/ -void -u3_unix_ef_look(u3_unix* unx_u, u3_noun mon, u3_noun all) -{ - if ( c3y == unx_u->dyr ) { - c3_c* nam_c = _unix_knot_to_string(mon); - - unx_u->dyr = c3n; - u3_umon* mon_u = unx_u->mon_u; - while ( mon_u && 0 != strcmp(nam_c, mon_u->nam_c) ) { - mon_u = mon_u->nex_u; - } - c3_free(nam_c); - if ( mon_u ) { - _unix_update_mount(unx_u, mon_u, all); - } - } - u3z(mon); -} - -/* _unix_io_talk(): start listening for fs events. -*/ -static void -_unix_io_talk(u3_auto* car_u) -{ - // XX review wire - // - u3_noun wir = u3nc(c3__boat, u3_nul); - u3_noun cad = u3nc(c3__boat, u3_nul); - - u3_auto_plan(car_u, u3_ovum_init(0, c3__c, wir, cad)); -} - -/* _unix_io_kick(): apply effects. -*/ -static c3_o -_unix_io_kick(u3_auto* car_u, u3_noun wir, u3_noun cad) -{ - u3_unix* unx_u = (u3_unix*)car_u; - - u3_noun tag, dat, i_wir; - c3_o ret_o; - - if ( (c3n == u3r_cell(wir, &i_wir, 0)) - || (c3n == u3r_cell(cad, &tag, &dat)) - || ( (c3__clay != i_wir) - && (c3__boat != i_wir) - && (c3__sync != i_wir) ) ) - { - ret_o = c3n; - } - else { - switch ( tag ) { - default: { - ret_o = c3n; - } break; - - case c3__dirk: { - u3_unix_ef_dirk(unx_u, u3k(dat)); - ret_o = c3y; - } break; - - case c3__ergo: { - u3_noun mon = u3k(u3h(dat)); - u3_noun can = u3k(u3t(dat)); - u3_unix_ef_ergo(unx_u, mon, can); - - ret_o = c3y; - } break; - - case c3__ogre: { - u3_unix_ef_ogre(unx_u, u3k(dat)); - ret_o = c3y; - } break; - - case c3__hill: { - u3_unix_ef_hill(unx_u, u3k(dat)); - ret_o = c3y; - } break; - } - } - - u3z(wir); u3z(cad); - return ret_o; -} - -/* _unix_io_exit(): terminate unix I/O. -*/ -static void -_unix_io_exit(u3_auto* car_u) -{ - u3_unix* unx_u = (u3_unix*)car_u; - - u3z(unx_u->sat); - c3_free(unx_u->pax_c); - c3_free(unx_u); -} - -/* u3_unix_io_init(): initialize unix sync. -*/ -u3_auto* -u3_unix_io_init(u3_pier* pir_u) -{ - u3_unix* unx_u = c3_calloc(sizeof(*unx_u)); - unx_u->mon_u = 0; - unx_u->pax_c = strdup(pir_u->pax_c); - unx_u->alm = c3n; - unx_u->dyr = c3n; - unx_u->sat = u3do("sane", c3__ta); - - u3_auto* car_u = &unx_u->car_u; - car_u->nam_m = c3__unix; - car_u->liv_o = c3n; - car_u->io.talk_f = _unix_io_talk; - car_u->io.kick_f = _unix_io_kick; - car_u->io.exit_f = _unix_io_exit; - // XX wat do - // - // car_u->ev.bail_f = ...l; - - { - u3_noun now; - struct timeval tim_u; - gettimeofday(&tim_u, 0); - - now = u3_time_in_tv(&tim_u); - unx_u->sev_l = u3r_mug(now); - u3z(now); - } - - return car_u; -} diff --git a/pkg/urbit/vere/ivory.c b/pkg/urbit/vere/ivory.c deleted file mode 100644 index 370f8c4ab..000000000 --- a/pkg/urbit/vere/ivory.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "vere/ivory.h" - -#include "ivory_impl.h" diff --git a/pkg/urbit/vere/king.c b/pkg/urbit/vere/king.c deleted file mode 100644 index fe1e0f9d4..000000000 --- a/pkg/urbit/vere/king.c +++ /dev/null @@ -1,960 +0,0 @@ -/* vere/daemon.c -** -** the main loop of the daemon process -*/ -#include "all.h" -#include "ur/ur.h" -#include "vere/ivory.h" -#include "vere/vere.h" -#include -#include - -// stash config flags for worker -// -static c3_w sag_w; - -/* -:: skeleton client->king protocol -:: -|% -:: +doom: daemon command -:: -:: Should require auth to the daemon itself -:: -+$ doom - $% :: boot - :: - :: p: boot procedure - :: q: pill specifier - :: r: path to pier - :: - [%boot p=boot q=pill r=@t] - :: end the daemon - :: - :: XX not implemented - :: - [%exit ~] - :: acquire a pier - :: - :: XX used for restart, may not be right - :: - [%pier p=(unit @t)] - :: admin ship actions - :: - :: XX not implemented - :: - [%root p=ship q=wyrd] - == -:: +boot: boot procedures -:: -+$ boot - $% :: mine a comet - :: - :: p: optionally under a specific star - :: - [%come p=(unit ship)] - :: boot with real keys - :: - :: And perform pre-boot validation, retrieve snapshot, etc. - :: - [%dawn p=seed] - :: boot with fake keys - :: - :: p: identity - :: - [%fake p=ship] - == -:: +pill: boot-sequence ingredients -:: -:: p: jammed pill -:: q: optional %into ovum overriding that of .p -:: -+$ pill [p=@ q=(unit ovum)] --- -*/ - -void _king_doom(u3_noun doom); - void _king_boot(u3_noun boot); - void _king_come(u3_noun star, u3_noun pill, u3_noun path); - void _king_dawn(u3_noun seed, u3_noun pill, u3_noun path); - void _king_fake(u3_noun ship, u3_noun pill, u3_noun path); - void _king_pier(u3_noun pier); - -/* _king_defy_fate(): invalid fate -*/ -void -_king_defy_fate() -{ - exit(1); -} - -/* _king_doom(): doom parser -*/ -void -_king_doom(u3_noun doom) -{ - u3_noun load; - void (*next)(u3_noun); - - c3_assert(_(u3a_is_cell(doom))); - c3_assert(_(u3a_is_cat(u3h(doom)))); - - switch ( u3h(doom) ) { - case c3__boot: - next = _king_boot; - break; - case c3__pier: - next = _king_pier; - break; - default: - _king_defy_fate(); - } - - load = u3k(u3t(doom)); - u3z(doom); - next(load); -} - -/* _king_boot(): boot parser -*/ -void -_king_boot(u3_noun bul) -{ - u3_noun boot, pill, path; - void (*next)(u3_noun, u3_noun, u3_noun); - - c3_assert(_(u3a_is_cell(bul))); - u3x_trel(bul, &boot, &pill, &path); - c3_assert(_(u3a_is_cat(u3h(boot)))); - - switch ( u3h(boot) ) { - case c3__fake: { - next = _king_fake; - break; - } - case c3__come: { - next = _king_come; - break; - } - case c3__dawn: { - next = _king_dawn; - break; - } - default: - return _king_defy_fate(); - } - - next(u3k(u3t(boot)), u3k(pill), u3k(path)); - u3z(bul); -} - -/* _king_fake(): boot with fake keys -*/ -void -_king_fake(u3_noun ship, u3_noun pill, u3_noun path) -{ - // XX link properly - // - u3_noun vent = u3nc(c3__fake, u3k(ship)); - u3K.pir_u = u3_pier_boot(sag_w, ship, vent, pill, path, u3_none); -} - -/* _king_come(): mine a comet under star (unit) -** -** XX revise to exclude star argument -*/ -void -_king_come(u3_noun star, u3_noun pill, u3_noun path) -{ - _king_dawn(u3_dawn_come(), pill, path); -} - -static void -_king_slog(u3_noun hod) -{ - u3_pier_tank(0, 0, u3k(u3t(hod))); - u3z(hod); -} - -/* _king_dawn(): boot from keys, validating -*/ -void -_king_dawn(u3_noun feed, u3_noun pill, u3_noun path) -{ - // enable ivory slog printfs - // - u3C.slog_f = _king_slog; - - u3_noun ship = ( c3y == u3a_is_cell(u3h(feed)) ) - ? u3h(u3t(feed)) - : u3h(feed); - u3_noun vent = u3_dawn_vent(u3k(ship), u3k(feed)); - // XX link properly - // - u3K.pir_u = u3_pier_boot(sag_w, u3k(ship), vent, pill, path, feed); - - // disable ivory slog printfs - // - u3C.slog_f = 0; -} - -/* _king_pier(): pier parser -*/ -void -_king_pier(u3_noun pier) -{ - if ( (c3n == u3du(pier)) || - (c3n == u3ud(u3t(pier))) ) { - u3m_p("daemon: invalid pier", pier); - exit(1); - } - - u3K.pir_u = u3_pier_stay(sag_w, u3k(u3t(pier))); - u3z(pier); -} - -/* _king_curl_alloc(): allocate a response buffer for curl -** XX deduplicate with dawn.c -*/ -static size_t -_king_curl_alloc(void* dat_v, size_t uni_t, size_t mem_t, void* buf_v) -{ - uv_buf_t* buf_u = buf_v; - - size_t siz_t = uni_t * mem_t; - buf_u->base = c3_realloc(buf_u->base, 1 + siz_t + buf_u->len); - - memcpy(buf_u->base + buf_u->len, dat_v, siz_t); - buf_u->len += siz_t; - buf_u->base[buf_u->len] = 0; - - return siz_t; -} - -/* _king_get_atom(): HTTP GET url_c, produce the response body as an atom. -** XX deduplicate with dawn.c -*/ -static u3_noun -_king_get_atom(c3_c* url_c) -{ - CURL *curl; - CURLcode result; - long cod_l; - - uv_buf_t buf_u = uv_buf_init(c3_malloc(1), 0); - - if ( !(curl = curl_easy_init()) ) { - u3l_log("failed to initialize libcurl\n"); - exit(1); - } - - u3K.ssl_curl_f(curl); - curl_easy_setopt(curl, CURLOPT_URL, url_c); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, _king_curl_alloc); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&buf_u); - - result = curl_easy_perform(curl); - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &cod_l); - - // XX retry? - // - if ( CURLE_OK != result ) { - u3l_log("failed to fetch %s: %s\n", - url_c, curl_easy_strerror(result)); - u3_king_bail(); - exit(1); - } - if ( 300 <= cod_l ) { - u3l_log("error fetching %s: HTTP %ld\n", url_c, cod_l); - u3_king_bail(); - exit(1); - } - - curl_easy_cleanup(curl); - - { - u3_noun pro = u3i_bytes(buf_u.len, (const c3_y*)buf_u.base); - - c3_free(buf_u.base); - - return pro; - } -} - -/* _get_cmd_output(): Run a shell command and capture its output. - Exits with an error if the command fails or produces no output. - The 'out_c' parameter should be an array of sufficient length to hold - the command's output, up to a max of len_c characters. -*/ -static void -_get_cmd_output(c3_c *cmd_c, c3_c *out_c, c3_w len_c) -{ - FILE *fp = popen(cmd_c, "r"); - if ( NULL == fp ) { - u3l_log("'%s' failed\n", cmd_c); - exit(1); - } - - if ( NULL == fgets(out_c, len_c, fp) ) { - u3l_log("'%s' produced no output\n", cmd_c); - exit(1); - } - - pclose(fp); -} - -/* _arvo_hash(): get a shortened hash of the last git commit - that modified the sys/ directory in arvo. - hax_c must be an array with length >= 11. -*/ -static void -_arvo_hash(c3_c *out_c, c3_c *arv_c) -{ - c3_c cmd_c[2048]; - - sprintf(cmd_c, "git -C %s log -1 HEAD --format=%%H -- sys/", arv_c); - _get_cmd_output(cmd_c, out_c, 11); - - out_c[10] = 0; // end with null-byte -} - -/* _git_pill_url(): produce a URL from which to download a pill - based on the location of an arvo git repository. -*/ -static void -_git_pill_url(c3_c *out_c, c3_c *arv_c) -{ - c3_c hax_c[11]; - - assert(NULL != arv_c); - - if ( 0 != system("which git >> /dev/null") ) { - u3l_log("boot: could not find git executable\r\n"); - exit(1); - } - - _arvo_hash(hax_c, arv_c); - sprintf(out_c, "https://bootstrap.urbit.org/git-%s.pill", hax_c); -} - -/* _boothack_pill(): parse CLI pill arguments into +pill specifier -*/ -static u3_noun -_boothack_pill(void) -{ - u3_noun arv = u3_nul; - u3_noun pil; - - if ( 0 != u3_Host.ops_u.pil_c ) { - u3l_log("boot: loading pill %s\r\n", u3_Host.ops_u.pil_c); - pil = u3m_file(u3_Host.ops_u.pil_c); - } - else { - c3_c url_c[2048]; - - if ( (c3y == u3_Host.ops_u.git) && - (0 != u3_Host.ops_u.arv_c) ) - { - _git_pill_url(url_c, u3_Host.ops_u.arv_c); - } - else { - c3_assert( 0 != u3_Host.ops_u.url_c ); - strcpy(url_c, u3_Host.ops_u.url_c); - } - - u3l_log("boot: downloading pill %s\r\n", url_c); - pil = _king_get_atom(url_c); - } - - if ( 0 != u3_Host.ops_u.arv_c ) { - u3l_log("boot: preparing filesystem from %s\r\n", - u3_Host.ops_u.arv_c); - arv = u3nc(u3_nul, u3_unix_initial_into_card(u3_Host.ops_u.arv_c)); - } - - return u3nc(pil, arv); -} - -/* _boothack_key(): parse a private key file or value -*/ -static u3_noun -_boothack_key(u3_noun kef) -{ - u3_noun seed; - u3_weak ship = u3_none; - - { - u3_noun des = u3dc("slaw", c3__uw, u3k(kef)); - - if ( u3_nul == des ) { - c3_c* kef_c = u3r_string(kef); - u3l_log("dawn: invalid private keys: %s\r\n", kef_c); - c3_free(kef_c); - exit(1); - } - - // +feed:able:jael: keyfile - // - u3_noun pro = u3m_soft(0, u3ke_cue, u3k(u3t(des))); - if ( u3_blip != u3h(pro) ) { - u3l_log("dawn: unable to cue keyfile\r\n"); - exit(1); - } - seed = u3k(u3t(pro)); - u3z(pro); - - // if it's a single seed, we can trivially sanity-check early - // - if ( c3y == u3ud(u3h(seed)) ) { - // local reference, not counted - // - ship = u3h(seed); - } - - u3z(des); - u3z(kef); - } - - if ( 0 != u3_Host.ops_u.who_c ) { - u3_noun woh = u3i_string(u3_Host.ops_u.who_c); - u3_noun whu = u3dc("slaw", 'p', u3k(woh)); - - if ( u3_nul == whu ) { - u3l_log("dawn: invalid ship specified with -w %s\r\n", - u3_Host.ops_u.who_c); - exit(1); - } - - if ( (u3_none != ship) && - (c3n == u3r_sing(ship, u3t(whu))) ) - { - u3_noun how = u3dc("scot", 'p', u3k(ship)); - c3_c* how_c = u3r_string(u3k(how)); - u3l_log("dawn: mismatch between -w %s and -K %s\r\n", - u3_Host.ops_u.who_c, how_c); - - u3z(how); - c3_free(how_c); - exit(1); - } - - u3z(woh); - u3z(whu); - } - - return seed; -} - -/* _boothack_doom(): parse CLI arguments into $doom -*/ -static u3_noun -_boothack_doom(void) -{ - u3_noun pax = u3i_string(u3_Host.dir_c); - u3_noun bot; - - if ( c3n == u3_Host.ops_u.nuu ) { - return u3nt(c3__pier, u3_nul, pax); - } - else if ( 0 != u3_Host.ops_u.fak_c ) { - u3_noun fak = u3i_string(u3_Host.ops_u.fak_c); - u3_noun whu = u3dc("slaw", 'p', u3k(fak)); - - if ( u3_nul == whu ) { - u3l_log("boot: malformed -F ship %s\r\n", u3_Host.ops_u.fak_c); - exit(1); - } - - bot = u3nc(c3__fake, u3k(u3t(whu))); - - u3z(whu); - u3z(fak); - } - else if ( 0 != u3_Host.ops_u.who_c ) { - u3_noun kef; - - if ( 0 != u3_Host.ops_u.key_c ) { - kef = u3m_file(u3_Host.ops_u.key_c); - - // handle trailing newline - // - { - c3_c* key_c = u3r_string(kef); - c3_w len_w = strlen(key_c); - - if (len_w && (key_c[len_w - 1] == '\n')) { - key_c[len_w - 1] = '\0'; - u3z(kef); - kef = u3i_string(key_c); - } - - c3_free(key_c); - } - } - else if ( 0 != u3_Host.ops_u.gen_c ) { - kef = u3i_string(u3_Host.ops_u.gen_c); - } - else { - u3l_log("boot: must specify a key with -k or -G\r\n"); - exit(1); - } - - bot = u3nc(c3__dawn, _boothack_key(kef)); - } - else { - // XX allow parent star to be specified? - // - bot = u3nc(c3__come, u3_nul); - } - - return u3nq(c3__boot, bot, _boothack_pill(), pax); -} - -/* _king_sign_init(): initialize daemon signal handlers -*/ -static void -_king_sign_init(void) -{ - // gracefully shutdown on SIGTERM - // - { - u3_usig* sig_u; - - sig_u = c3_malloc(sizeof(u3_usig)); - uv_signal_init(u3L, &sig_u->sil_u); - - sig_u->num_i = SIGTERM; - sig_u->nex_u = u3_Host.sig_u; - u3_Host.sig_u = sig_u; - } - - // forward SIGINT to worker - // - { - u3_usig* sig_u; - - sig_u = c3_malloc(sizeof(u3_usig)); - uv_signal_init(u3L, &sig_u->sil_u); - - sig_u->num_i = SIGINT; - sig_u->nex_u = u3_Host.sig_u; - u3_Host.sig_u = sig_u; - } - - // inject new dimensions after terminal resize - // - { - u3_usig* sig_u; - - sig_u = c3_malloc(sizeof(u3_usig)); - uv_signal_init(u3L, &sig_u->sil_u); - - sig_u->num_i = SIGWINCH; - sig_u->nex_u = u3_Host.sig_u; - u3_Host.sig_u = sig_u; - } - - // handle SIGINFO (if available) - // -#ifdef SIGINFO - { - u3_usig* sig_u; - - sig_u = c3_malloc(sizeof(u3_usig)); - uv_signal_init(u3L, &sig_u->sil_u); - - sig_u->num_i = SIGINFO; - sig_u->nex_u = u3_Host.sig_u; - u3_Host.sig_u = sig_u; - } -#endif - - // handle SIGUSR1 (fallback for SIGINFO) - // - { - u3_usig* sig_u; - - sig_u = c3_malloc(sizeof(u3_usig)); - uv_signal_init(u3L, &sig_u->sil_u); - - sig_u->num_i = SIGUSR1; - sig_u->nex_u = u3_Host.sig_u; - u3_Host.sig_u = sig_u; - } -} - -/* _king_sign_cb: signal callback. -*/ -static void -_king_sign_cb(uv_signal_t* sil_u, c3_i num_i) -{ - switch ( num_i ) { - default: { - u3l_log("\r\nmysterious signal %d\r\n", num_i); - break; - } - - case SIGTERM: { - u3_king_exit(); - break; - } - - case SIGINT: { - u3l_log("\r\ninterrupt\r\n"); - u3_term_ef_ctlc(); - -#ifdef U3_OS_mingw - PulseEvent(u3_Host.cev_u); -#endif - break; - } - - case SIGWINCH: { - u3_term_ef_winc(); - break; - } - - // fallthru if defined - // -#ifdef SIGINFO - case SIGINFO: -#endif - case SIGUSR1: { - u3_king_slog(); - break; - } - } -} - -/* _king_sign_move(): enable daemon signal handlers -*/ -static void -_king_sign_move(void) -{ - u3_usig* sig_u; - - for ( sig_u = u3_Host.sig_u; sig_u; sig_u = sig_u->nex_u ) { - uv_signal_start(&sig_u->sil_u, _king_sign_cb, sig_u->num_i); - } -} - -/* _king_sign_hold(): disable daemon signal handlers -*/ -static void -_king_sign_hold(void) -{ - u3_usig* sig_u; - - for ( sig_u = u3_Host.sig_u; sig_u; sig_u = sig_u->nex_u ) { - uv_signal_stop(&sig_u->sil_u); - } -} - -/* _king_sign_close(): dispose daemon signal handlers -*/ -static void -_king_sign_close(void) -{ - u3_usig* sig_u; - - for ( sig_u = u3_Host.sig_u; sig_u; sig_u = sig_u->nex_u ) { - uv_close((uv_handle_t*)&sig_u->sil_u, (uv_close_cb)free); - } -} -/* _boothack_cb(): setup pier via message as if from client. -*/ -void -_boothack_cb(uv_timer_t* tim_u) -{ - _king_doom(_boothack_doom()); -} - -/* _king_loop_init(): stuff that comes before the event loop -*/ -void -_king_loop_init() -{ - // initialize terminal/logging - // - u3_term_log_init(); - - // start signal handlers - // - _king_sign_init(); - _king_sign_move(); - - // async "boothack" - // / - uv_timer_start(&u3K.tim_u, _boothack_cb, 0, 0); -} - -/* _king_loop_exit(): cleanup after event loop -*/ -void -_king_loop_exit() -{ -} - -static void -_king_boot_ivory(void) -{ - c3_d len_d; - c3_y* byt_y; - - if ( u3_Host.ops_u.lit_c ) { - if ( c3n == u3u_mmap_read("lite", u3_Host.ops_u.lit_c, &len_d, &byt_y) ) { - u3l_log("lite: unable to load ivory pill at %s\n", - u3_Host.ops_u.lit_c); - exit(1); - } - } - else { - len_d = u3_Ivory_pill_len; - byt_y = u3_Ivory_pill; - } - - { - u3_cue_xeno* sil_u = u3s_cue_xeno_init_with(ur_fib27, ur_fib28); - u3_weak pil; - - if ( u3_none == (pil = u3s_cue_xeno_with(sil_u, len_d, byt_y)) ) { - u3l_log("lite: unable to cue ivory pill\r\n"); - exit(1); - } - - u3s_cue_xeno_done(sil_u); - - if ( c3n == u3v_boot_lite(pil)) { - u3l_log("lite: boot failed\r\n"); - exit(1); - } - } - - if ( u3_Host.ops_u.lit_c ) { - if ( c3n == u3u_munmap(len_d, byt_y) ) { - u3l_log("lite: unable to unmap ivory pill at %s\n", - u3_Host.ops_u.lit_c); - exit(1); - } - } -} - -/* u3_king_commence(): start the daemon -*/ -void -u3_king_commence() -{ - u3_Host.lup_u = uv_default_loop(); - - // initialize top-level timer - // - uv_timer_init(u3L, &u3K.tim_u); - - // start up a "fast-compile" arvo for internal use only - // (with hashboard and sample-profiling always disabled) - // - sag_w = u3C.wag_w; - u3C.wag_w |= u3o_hashless; - u3C.wag_w &= ~u3o_debug_cpu; - - // wire up signal controls - // - u3C.sign_hold_f = _king_sign_hold; - u3C.sign_move_f = _king_sign_move; - - // Ignore SIGPIPE signals. - #ifndef U3_OS_mingw - { - struct sigaction sig_s = {{0}}; - sigemptyset(&(sig_s.sa_mask)); - sig_s.sa_handler = SIG_IGN; - sigaction(SIGPIPE, &sig_s, 0); - } - #endif - - // boot the ivory pill - // - _king_boot_ivory(); - - // disable core dumps (due to lmdb size) - // - #ifndef U3_OS_mingw - { - struct rlimit rlm; - - getrlimit(RLIMIT_CORE, &rlm); - rlm.rlim_cur = 0; - - if ( 0 != setrlimit(RLIMIT_CORE, &rlm) ) { - u3l_log("king: unable to disable core dumps: %s\r\n", strerror(errno)); - exit(1); - } - } - #endif - - // run the loop - // - _king_loop_init(); - uv_run(u3L, UV_RUN_DEFAULT); - _king_loop_exit(); - u3m_stop(); -} - -/* u3_king_stub(): get the One Pier for unreconstructed code. -*/ -u3_pier* -u3_king_stub(void) -{ - if ( !u3K.pir_u ) { - c3_assert(!"king: no pier"); - } - else { - return u3K.pir_u; - } -} - -/* _king_forall(): run on all piers -*/ -static void -_king_forall(void (*pir_f)(u3_pier*)) -{ - u3_pier* pir_u = u3K.pir_u; - - while ( pir_u ) { - pir_f(pir_u); - pir_u = pir_u->nex_u; - } -} - -/* u3_king_slog(): print status info. -*/ -void -u3_king_slog(void) -{ - _king_forall(u3_pier_slog); -} - -/* _king_forall_unlink(): run on all piers, unlinking from king. -*/ -static void -_king_forall_unlink(void (*pir_f)(u3_pier*)) -{ - u3_pier* pir_u = u3K.pir_u; - - while ( u3K.pir_u ) { - u3_pier* pir_u = u3K.pir_u; - u3K.pir_u = pir_u->nex_u; - pir_f(pir_u); - } -} - -/* _king_done_cb(): -*/ -static void -_king_done_cb(uv_handle_t* han_u) -{ - if( UV_EBUSY == uv_loop_close(u3L) ) { - // XX uncomment to debug - // - // fprintf(stderr, "\r\nking: open libuv handles\r\n"); - // uv_print_all_handles(u3L, stderr); - // fprintf(stderr, "\r\nking: force shutdown\r\n"); - - uv_stop(u3L); - } -} - -/* u3_king_done(): all piers closed. s/b callback -*/ -void -u3_king_done(void) -{ - uv_handle_t* han_u = (uv_handle_t*)&u3K.tim_u; - - // XX hack, if pier's are still linked, we're not actually done - // - if ( !u3K.pir_u && !uv_is_closing(han_u) ) { - uv_close((uv_handle_t*)&u3K.tim_u, _king_done_cb); - _king_sign_close(); - - u3_term_log_exit(); - fflush(stdout); - } -} - -/* u3_king_exit(): shutdown gracefully -*/ -void -u3_king_exit(void) -{ - _king_forall(u3_pier_exit); -} - -/* u3_king_bail(): immediately shutdown. -*/ -void -u3_king_bail(void) -{ - _king_forall_unlink(u3_pier_bail); - _king_loop_exit(); - u3_king_done(); - exit(1); -} - -/* u3_king_grab(): gc the daemon -*/ -void -u3_king_grab(void* vod_p) -{ - c3_w tot_w = 0; - FILE* fil_u; - - c3_assert( u3R == &(u3H->rod_u) ); - -#ifdef U3_MEMORY_LOG - { - // XX date will not match up with that of the worker - // - u3_noun wen = u3dc("scot", c3__da, u3k(u3A->now)); - c3_c* wen_c = u3r_string(wen); - - c3_c nam_c[2048]; - snprintf(nam_c, 2048, "%s/.urb/put/mass", u3_king_stub()->pax_c); - - struct stat st; - if ( -1 == stat(nam_c, &st) ) { - c3_mkdir(nam_c, 0700); - } - - c3_c man_c[2048]; - snprintf(man_c, 2048, "%s/%s-daemon.txt", nam_c, wen_c); - - fil_u = c3_fopen(man_c, "w"); - fprintf(fil_u, "%s\r\n", wen_c); - - c3_free(wen_c); - u3z(wen); - } -#else - { - fil_u = u3_term_io_hija(); - fprintf(fil_u, "measuring daemon:\r\n"); - } -#endif - - tot_w += u3m_mark(fil_u); - tot_w += u3_pier_mark(fil_u); - - u3a_print_memory(fil_u, "total marked", tot_w); - u3a_print_memory(fil_u, "sweep", u3a_sweep()); - -#ifdef U3_MEMORY_LOG - { - fclose(fil_u); - } -#else - { - u3_term_io_loja(0); - } -#endif -} diff --git a/pkg/urbit/vere/lord.c b/pkg/urbit/vere/lord.c deleted file mode 100644 index cc7af14f6..000000000 --- a/pkg/urbit/vere/lord.c +++ /dev/null @@ -1,1256 +0,0 @@ -/* vere/lord.c -*/ -#include "all.h" -#include "vere/vere.h" -#include "ur/hashcons.h" - -#undef LORD_TRACE_JAM -#undef LORD_TRACE_CUE - -/* -|% -:: +writ: from king to serf -:: -+$ writ - $% $: %live - $% [%cram eve=@] - [%exit cod=@] - [%save eve=@] - [%meld ~] - [%pack ~] - == == - [%peek mil=@ sam=*] :: gang (each path $%([%once @tas @tas path] [%beam @tas beam])) - [%play eve=@ lit=(list ?((pair @da ovum) *))] - [%work mil=@ job=(pair @da ovum)] - == -:: +plea: from serf to king -:: -+$ plea - $% [%live ~] - [%ripe [pro=%1 hon=@ nok=@] eve=@ mug=@] - [%slog pri=@ tank] - [%flog cord] - $: %peek - $% [%done dat=(unit (cask))] - [%bail dud=goof] - == == - $: %play - $% [%done mug=@] - [%bail eve=@ mug=@ dud=goof] - == == - $: %work - $% [%done eve=@ mug=@ fec=(list ovum)] - [%swap eve=@ mug=@ job=(pair @da ovum) fec=(list ovum)] - [%bail lud=(list goof)] - == == - == --- -*/ - -/* _lord_stop_cb(): finally all done. -*/ -static void -_lord_stop_cb(void* ptr_v, - ssize_t err_i, - const c3_c* err_c) -{ - u3_lord* god_u = ptr_v; - - void (*exit_f)(void*) = god_u->cb_u.exit_f; - void* exit_v = god_u->cb_u.ptr_v; - - u3s_cue_xeno_done(god_u->sil_u); - c3_free(god_u); - - if ( exit_f ) { - exit_f(exit_v); - } -} - -/* _lord_writ_free(): dispose of pending writ. -*/ -static void -_lord_writ_free(u3_writ* wit_u) -{ - switch ( wit_u->typ_e ) { - default: c3_assert(0); - - case u3_writ_work: { - // XX confirm - // - u3_ovum* egg_u = wit_u->wok_u.egg_u; - u3_auto_drop(egg_u->car_u, egg_u); - u3z(wit_u->wok_u.job); - } break; - - case u3_writ_peek: { - u3z(wit_u->pek_u->sam); - } break; - - case u3_writ_play: { - u3_fact* tac_u = wit_u->fon_u.ext_u; - u3_fact* nex_u; - - while ( tac_u ) { - nex_u = tac_u->nex_u; - u3_fact_free(tac_u); - tac_u = nex_u; - } - } break; - - case u3_writ_save: - case u3_writ_cram: - case u3_writ_meld: - case u3_writ_pack: - case u3_writ_exit: { - } break; - } - - c3_free(wit_u); -} - -/* _lord_bail_noop(): ignore subprocess error on shutdown -*/ -static void -_lord_bail_noop(void* ptr_v, - ssize_t err_i, - const c3_c* err_c) -{ -} - -/* _lord_stop(): close and dispose all resources. -*/ -static void -_lord_stop(u3_lord* god_u) -{ - // dispose outstanding writs - // - { - u3_writ* wit_u = god_u->ext_u; - u3_writ* nex_u; - - while ( wit_u ) { - nex_u = wit_u->nex_u; - _lord_writ_free(wit_u); - wit_u = nex_u; - } - - god_u->ent_u = god_u->ext_u = 0; - } - - u3_newt_moat_stop(&god_u->out_u, _lord_stop_cb); - u3_newt_mojo_stop(&god_u->inn_u, _lord_bail_noop); - - uv_read_stop((uv_stream_t*)&(god_u->err_u)); - - uv_close((uv_handle_t*)&god_u->cub_u, 0); - -#if defined(LORD_TRACE_JAM) || defined(LORD_TRACE_CUE) - u3t_trace_close(); -#endif -} - -/* _lord_bail(): serf/lord error. -*/ -static void -_lord_bail(u3_lord* god_u) -{ - void (*bail_f)(void*) = god_u->cb_u.bail_f; - void* bail_v = god_u->cb_u.ptr_v; - - u3_lord_halt(god_u); - bail_f(bail_v); -} - -/* _lord_writ_pop(): pop the writ stack. -*/ -static u3_writ* -_lord_writ_pop(u3_lord* god_u) -{ - u3_writ* wit_u = god_u->ext_u; - - c3_assert( wit_u ); - - if ( !wit_u->nex_u ) { - god_u->ent_u = god_u->ext_u = 0; - } - else { - god_u->ext_u = wit_u->nex_u; - wit_u->nex_u = 0; - } - - god_u->dep_w--; - - return wit_u; -} - -/* _lord_writ_str(): writ labels for printing. -*/ -static inline const c3_c* -_lord_writ_str(u3_writ_type typ_e) -{ - switch ( typ_e ) { - default: c3_assert(0); - - case u3_writ_work: return "work"; - case u3_writ_peek: return "peek"; - case u3_writ_play: return "play"; - case u3_writ_save: return "save"; - case u3_writ_cram: return "cram"; - case u3_writ_meld: return "meld"; - case u3_writ_pack: return "pack"; - case u3_writ_exit: return "exit"; - } -} - -/* _lord_writ_need(): require writ type. -*/ -static u3_writ* -_lord_writ_need(u3_lord* god_u, u3_writ_type typ_e) -{ - u3_writ* wit_u = _lord_writ_pop(god_u); - - if ( typ_e != wit_u->typ_e ) { - fprintf(stderr, "lord: unexpected %%%s, expected %%%s\r\n", - _lord_writ_str(typ_e), - _lord_writ_str(wit_u->typ_e)); - _lord_bail(god_u); - return 0; - } - - return wit_u; -} - -/* _lord_plea_foul(): -*/ -static void -_lord_plea_foul(u3_lord* god_u, c3_m mot_m, u3_noun dat) -{ - if ( u3_blip == mot_m ) { - fprintf(stderr, "lord: received invalid $plea\r\n"); - } - else { - fprintf(stderr, "lord: received invalid %%%.4s $plea\r\n", (c3_c*)&mot_m); - } - - // XX can't unconditionally print - // - // u3m_p("plea", dat); - - _lord_bail(god_u); -} - -/* _lord_plea_live(): hear serf %live ack -*/ -static void -_lord_plea_live(u3_lord* god_u, u3_noun dat) -{ - u3_writ* wit_u = _lord_writ_pop(god_u); - - if( u3_nul != dat ) { - return _lord_plea_foul(god_u, c3__live, dat); - } - - switch ( wit_u->typ_e ) { - default: { - return _lord_plea_foul(god_u, c3__live, dat); - } break; - - case u3_writ_save: { - god_u->cb_u.save_f(god_u->cb_u.ptr_v); - } break; - - case u3_writ_cram: { - god_u->cb_u.cram_f(god_u->cb_u.ptr_v); - } break; - - case u3_writ_meld: { - // XX wire into cb - // - u3l_log("pier: meld complete\n"); - } break; - - case u3_writ_pack: { - // XX wire into cb - // - u3l_log("pier: pack complete\n"); - } break; - } - - c3_free(wit_u); -} - -/* _lord_plea_ripe(): hear serf startup state -*/ -static void -_lord_plea_ripe(u3_lord* god_u, u3_noun dat) -{ - if ( c3y == god_u->liv_o ) { - fprintf(stderr, "lord: received unexpected %%ripe\n"); - _lord_bail(god_u); - return; - } - - { - u3_noun ver, pro, hon, noc, eve, mug; - c3_y pro_y, hon_y, noc_y; - c3_d eve_d; - c3_l mug_l; - - if ( (c3n == u3r_trel(dat, &ver, &eve, &mug)) - || (c3n == u3r_trel(ver, &pro, &hon, &noc)) - || (c3n == u3r_safe_byte(pro, &pro_y)) - || (c3n == u3r_safe_byte(hon, &hon_y)) - || (c3n == u3r_safe_byte(noc, &noc_y)) - || (c3n == u3r_safe_chub(eve, &eve_d)) - || (c3n == u3r_safe_word(mug, &mug_l)) ) - { - return _lord_plea_foul(god_u, c3__ripe, dat); - } - - if ( 1 != pro_y ) { - fprintf(stderr, "pier: unsupported ipc protocol version %u\r\n", pro_y); - _lord_bail(god_u); - return; - } - - god_u->eve_d = eve_d; - god_u->mug_l = mug_l; - god_u->hon_y = hon_y; - god_u->noc_y = noc_y; - } - - god_u->liv_o = c3y; - god_u->cb_u.live_f(god_u->cb_u.ptr_v); - - u3z(dat); -} - -/* _lord_plea_slog(): hear serf debug output -*/ -static void -_lord_plea_slog(u3_lord* god_u, u3_noun dat) -{ - u3_noun pri, tan; - c3_w pri_w; - - if ( (c3n == u3r_cell(dat, &pri, &tan)) - || (c3n == u3r_safe_word(pri, &pri_w)) ) - { - return _lord_plea_foul(god_u, c3__slog, dat); - } - - // XX per-writ slog_f? - // - - god_u->cb_u.slog_f(god_u->cb_u.ptr_v, pri_w, u3k(tan)); - u3z(dat); -} - -/* _lord_plea_flog(): hear serf debug output -*/ -static void -_lord_plea_flog(u3_lord* god_u, u3_noun dat) -{ - u3_pier* pir_u = god_u->cb_u.ptr_v; - - if ( c3n == u3a_is_atom(dat) ) { - return _lord_plea_foul(god_u, c3__flog, dat); - } - - c3_c* tan_c = u3r_string(dat); - u3C.stderr_log_f(tan_c); - c3_free(tan_c); - - if ( 0 != pir_u->sog_f ) { - pir_u->sog_f(pir_u->sop_p, 0, u3k(dat)); - } - u3z(dat); -} - -/* _lord_plea_peek_bail(): hear serf %peek %bail -*/ -static void -_lord_plea_peek_bail(u3_lord* god_u, u3_peek* pek_u, u3_noun dud) -{ - u3_pier_punt_goof("peek", dud); - - pek_u->fun_f(pek_u->ptr_v, u3_nul); - - u3z(pek_u->sam); - c3_free(pek_u); -} - -/* _lord_plea_peek_done(): hear serf %peek %done -*/ -static void -_lord_plea_peek_done(u3_lord* god_u, u3_peek* pek_u, u3_noun rep) -{ - // XX review - // - if ( (u3_pico_once == pek_u->typ_e) - && (u3_nul != rep) ) - { - u3_noun dat; - - if ( c3y == u3r_pq(u3t(rep), c3__omen, 0, &dat) ) { - u3k(dat); - u3z(rep); - rep = u3nc(u3_nul, dat); - } - } - - // XX cache [dat] (unless last) - // - pek_u->fun_f(pek_u->ptr_v, rep); - - u3z(pek_u->sam); - c3_free(pek_u); -} - -/* _lord_plea_peek(): hear serf %peek response -*/ -static void -_lord_plea_peek(u3_lord* god_u, u3_noun dat) -{ - u3_peek* pek_u; - { - u3_writ* wit_u = _lord_writ_need(god_u, u3_writ_peek); - pek_u = wit_u->pek_u; - c3_free(wit_u); - } - - if ( c3n == u3a_is_cell(dat) ) { - return _lord_plea_foul(god_u, c3__peek, dat); - } - - switch ( u3h(dat) ) { - default: { - return _lord_plea_foul(god_u, c3__peek, dat); - } - - case c3__done: { - _lord_plea_peek_done(god_u, pek_u, u3k(u3t(dat))); - } break; - - case c3__bail: { - _lord_plea_peek_bail(god_u, pek_u, u3k(u3t(dat))); - } break; - } - - u3z(dat); -} - -/* _lord_plea_play_bail(): hear serf %play %bail -*/ -static void -_lord_plea_play_bail(u3_lord* god_u, u3_info fon_u, u3_noun dat) -{ - u3_noun eve, mug, dud; - c3_d eve_d; - c3_l mug_l; - - if ( (c3n == u3r_trel(dat, &eve, &mug, &dud)) - || (c3n == u3r_safe_chub(eve, &eve_d)) - || (c3n == u3r_safe_word(mug, &mug_l)) - || (c3n == u3a_is_cell(dud)) ) - { - fprintf(stderr, "lord: invalid %%play\r\n"); - return _lord_plea_foul(god_u, c3__bail, dat); - } - - god_u->eve_d = (eve_d - 1ULL); - god_u->mug_l = mug_l; - - god_u->cb_u.play_bail_f(god_u->cb_u.ptr_v, - fon_u, mug_l, eve_d, u3k(dud)); - - u3z(dat); -} -/* _lord_plea_play_done(): hear serf %play %done -*/ -static void -_lord_plea_play_done(u3_lord* god_u, u3_info fon_u, u3_noun dat) -{ - c3_l mug_l; - - if ( c3n == u3r_safe_word(dat, &mug_l) ) { - fprintf(stderr, "lord: invalid %%play\r\n"); - return _lord_plea_foul(god_u, c3__done, dat); - } - - god_u->eve_d = fon_u.ent_u->eve_d; - god_u->mug_l = mug_l; - - god_u->cb_u.play_done_f(god_u->cb_u.ptr_v, fon_u, mug_l); - - u3z(dat); -} - -/* _lord_plea_play(): hear serf %play response -*/ -static void -_lord_plea_play(u3_lord* god_u, u3_noun dat) -{ - u3_info fon_u; - { - u3_writ* wit_u = _lord_writ_need(god_u, u3_writ_play); - fon_u = wit_u->fon_u; - c3_free(wit_u); - } - - if ( c3n == u3a_is_cell(dat) ) { - return _lord_plea_foul(god_u, c3__play, dat); - } - - switch ( u3h(dat) ) { - default: { - return _lord_plea_foul(god_u, c3__play, dat); - } - - case c3__done: { - _lord_plea_play_done(god_u, fon_u, u3k(u3t(dat))); - } break; - - case c3__bail: { - _lord_plea_play_bail(god_u, fon_u, u3k(u3t(dat))); - } break; - } - - u3z(dat); -} - -/* _lord_work_spin(): update spinner if more work is in progress. - */ - static void -_lord_work_spin(u3_lord* god_u) -{ - u3_writ* wit_u = god_u->ext_u; - - // complete spinner - // - c3_assert( c3y == god_u->pin_o ); - god_u->cb_u.spun_f(god_u->cb_u.ptr_v); - god_u->pin_o = c3n; - - // restart spinner if more work - // - while ( wit_u ) { - if ( u3_writ_work != wit_u->typ_e ) { - wit_u = wit_u->nex_u; - } - else { - u3_ovum* egg_u = wit_u->wok_u.egg_u; - - god_u->cb_u.spin_f(god_u->cb_u.ptr_v, - egg_u->pin_u.lab, - egg_u->pin_u.del_o); - god_u->pin_o = c3y; - break; - } - } -} - -/* _lord_work_done(): -*/ -static void -_lord_work_done(u3_lord* god_u, - u3_ovum* egg_u, - c3_d eve_d, - c3_l mug_l, - u3_noun job, - u3_noun act) -{ - u3_fact* tac_u = u3_fact_init(eve_d, mug_l, job); - god_u->mug_l = mug_l; - god_u->eve_d = eve_d; - - u3_gift* gif_u = u3_gift_init(eve_d, act); - - _lord_work_spin(god_u); - - god_u->cb_u.work_done_f(god_u->cb_u.ptr_v, egg_u, tac_u, gif_u); -} - - -/* _lord_plea_work_bail(): hear serf %work %bail -*/ -static void -_lord_plea_work_bail(u3_lord* god_u, u3_ovum* egg_u, u3_noun lud) -{ - _lord_work_spin(god_u); - - god_u->cb_u.work_bail_f(god_u->cb_u.ptr_v, egg_u, lud); -} - -/* _lord_plea_work_swap(): hear serf %work %swap -*/ -static void -_lord_plea_work_swap(u3_lord* god_u, u3_ovum* egg_u, u3_noun dat) -{ - u3_noun eve, mug, job, act; - c3_d eve_d; - c3_l mug_l; - - if ( (c3n == u3r_qual(dat, &eve, &mug, &job, &act)) - || (c3n == u3r_safe_chub(eve, &eve_d)) - || (c3n == u3r_safe_word(mug, &mug_l)) - || (c3n == u3a_is_cell(job)) ) - { - u3z(job); - u3_ovum_free(egg_u); - fprintf(stderr, "lord: invalid %%work\r\n"); - return _lord_plea_foul(god_u, c3__swap, dat); - } - else { - u3k(job); u3k(act); - u3z(dat); - _lord_work_done(god_u, egg_u, eve_d, mug_l, job, act); - } -} - -/* _lord_plea_work_done(): hear serf %work %done -*/ -static void -_lord_plea_work_done(u3_lord* god_u, - u3_ovum* egg_u, - u3_noun job, - u3_noun dat) -{ - u3_noun eve, mug, act; - c3_d eve_d; - c3_l mug_l; - - if ( (c3n == u3r_trel(dat, &eve, &mug, &act)) - || (c3n == u3r_safe_chub(eve, &eve_d)) - || (c3n == u3r_safe_word(mug, &mug_l)) ) - { - u3z(job); - u3_ovum_free(egg_u); - fprintf(stderr, "lord: invalid %%work\r\n"); - return _lord_plea_foul(god_u, c3__done, dat); - } - else { - u3k(act); - u3z(dat); - _lord_work_done(god_u, egg_u, eve_d, mug_l, job, act); - } -} - -/* _lord_plea_work(): hear serf %work response -*/ -static void -_lord_plea_work(u3_lord* god_u, u3_noun dat) -{ - u3_ovum* egg_u; - u3_noun job; - - { - u3_writ* wit_u = _lord_writ_need(god_u, u3_writ_work); - egg_u = wit_u->wok_u.egg_u; - job = wit_u->wok_u.job; - c3_free(wit_u); - } - - if ( c3n == u3a_is_cell(dat) ) { - u3z(job); - u3_ovum_free(egg_u); - return _lord_plea_foul(god_u, c3__work, dat); - } - - switch ( u3h(dat) ) { - default: { - u3z(job); - u3_ovum_free(egg_u); - return _lord_plea_foul(god_u, c3__work, dat); - } break; - - case c3__done: { - _lord_plea_work_done(god_u, egg_u, job, u3k(u3t(dat))); - } break; - - case c3__swap: { - u3z(job); - _lord_plea_work_swap(god_u, egg_u, u3k(u3t(dat))); - } break; - - case c3__bail: { - u3z(job); - _lord_plea_work_bail(god_u, egg_u, u3k(u3t(dat))); - } break; - } - - u3z(dat); -} - -/* _lord_on_plea(): handle plea from serf. -*/ -static void -_lord_on_plea(void* ptr_v, c3_d len_d, c3_y* byt_y) -{ - u3_lord* god_u = ptr_v; - u3_noun tag, dat; - u3_weak jar; - -#ifdef LORD_TRACE_CUE - u3t_event_trace("king ipc cue", 'B'); -#endif - - jar = u3s_cue_xeno_with(god_u->sil_u, len_d, byt_y); - -#ifdef LORD_TRACE_CUE - u3t_event_trace("king ipc cue", 'E'); -#endif - - if ( u3_none == jar ) { - return _lord_plea_foul(god_u, 0, u3_blip); - } - else if ( c3n == u3r_cell(jar, &tag, &dat) ) { - return _lord_plea_foul(god_u, 0, jar); - } - - switch ( tag ) { - default: { - return _lord_plea_foul(god_u, 0, jar); - } - - case c3__work: { - _lord_plea_work(god_u, u3k(dat)); - } break; - - case c3__peek: { - _lord_plea_peek(god_u, u3k(dat)); - } break; - - case c3__slog: { - _lord_plea_slog(god_u, u3k(dat)); - } break; - - case c3__flog: { - _lord_plea_flog(god_u, u3k(dat)); - } break; - - case c3__play: { - _lord_plea_play(god_u, u3k(dat)); - } break; - - case c3__live: { - _lord_plea_live(god_u, u3k(dat)); - } break; - - case c3__ripe: { - _lord_plea_ripe(god_u, u3k(dat)); - } break; - } - - u3z(jar); -} - -/* _lord_writ_new(): allocate a new writ. -*/ -static u3_writ* -_lord_writ_new(u3_lord* god_u) -{ - u3_writ* wit_u = c3_calloc(sizeof(*wit_u)); - return wit_u; -} - -/* _lord_writ_make(): cons writ. -*/ -static u3_noun -_lord_writ_make(u3_lord* god_u, u3_writ* wit_u) -{ - u3_noun msg; - - switch ( wit_u->typ_e ) { - default: c3_assert(0); - - case u3_writ_work: { - u3_noun mil = u3i_words(1, &wit_u->wok_u.egg_u->mil_w); - msg = u3nt(c3__work, mil, u3k(wit_u->wok_u.job)); - } break; - - case u3_writ_peek: { - // XX support timeouts, - // - msg = u3nc(c3__peek, u3nc(0, u3k(wit_u->pek_u->sam))); - } break; - - case u3_writ_play: { - u3_fact* tac_u = wit_u->fon_u.ext_u; - c3_d eve_d = tac_u->eve_d; - u3_noun lit = u3_nul; - - while ( tac_u ) { - lit = u3nc(u3k(tac_u->job), lit); - tac_u = tac_u->nex_u; - } - - msg = u3nt(c3__play, u3i_chubs(1, &eve_d), u3kb_flop(lit)); - - } break; - - case u3_writ_save: { - msg = u3nt(c3__live, c3__save, u3i_chubs(1, &god_u->eve_d)); - } break; - - case u3_writ_cram: { - msg = u3nt(c3__live, c3__cram, u3i_chubs(1, &god_u->eve_d)); - } break; - - case u3_writ_meld: { - msg = u3nt(c3__live, c3__meld, u3_nul); - } break; - - case u3_writ_pack: { - msg = u3nt(c3__live, c3__pack, u3_nul); - } break; - - case u3_writ_exit: { - // requested exit code is always 0 - // - msg = u3nt(c3__live, c3__exit, 0); - } break; - } - - return msg; -} - -/* _lord_writ_send(): send writ to serf. -*/ -static void -_lord_writ_send(u3_lord* god_u, u3_writ* wit_u) -{ - // exit expected - // - if ( u3_writ_exit == wit_u->typ_e ) { - god_u->out_u.bal_f = _lord_bail_noop; - god_u->inn_u.bal_f = _lord_bail_noop; - } - - { - u3_noun jar = _lord_writ_make(god_u, wit_u); - c3_d len_d; - c3_y* byt_y; - -#ifdef LORD_TRACE_JAM - u3t_event_trace("king ipc jam", 'B'); -#endif - - u3s_jam_xeno(jar, &len_d, &byt_y); - -#ifdef LORD_TRACE_JAM - u3t_event_trace("king ipc jam", 'E'); -#endif - - u3_newt_send(&god_u->inn_u, len_d, byt_y); - u3z(jar); - } -} - -/* _lord_writ_plan(): enqueue a writ and send. -*/ -static void -_lord_writ_plan(u3_lord* god_u, u3_writ* wit_u) -{ - if ( !god_u->ent_u ) { - c3_assert( !god_u->ext_u ); - c3_assert( !god_u->dep_w ); - god_u->dep_w = 1; - god_u->ent_u = god_u->ext_u = wit_u; - } - else { - god_u->dep_w++; - god_u->ent_u->nex_u = wit_u; - god_u->ent_u = wit_u; - } - - _lord_writ_send(god_u, wit_u); -} - -/* u3_lord_peek(): read namespace, injecting what's missing. -*/ -void -u3_lord_peek(u3_lord* god_u, u3_pico* pic_u) -{ - u3_writ* wit_u = _lord_writ_new(god_u); - wit_u->typ_e = u3_writ_peek; - wit_u->pek_u = c3_calloc(sizeof(*wit_u->pek_u)); - wit_u->pek_u->ptr_v = pic_u->ptr_v; - wit_u->pek_u->fun_f = pic_u->fun_f; - wit_u->pek_u->typ_e = pic_u->typ_e; - - // construct the full scry path - // - { - u3_noun sam; - switch ( pic_u->typ_e ) { - default: c3_assert(0); - - case u3_pico_full: { - sam = u3k(pic_u->ful); - } break; - - case u3_pico_once: { - sam = u3nc(c3n, u3nq(c3__once, - pic_u->las_u.car_m, - u3k(pic_u->las_u.des), - u3k(pic_u->las_u.pax))); - } break; - } - - wit_u->pek_u->sam = u3nc(u3k(pic_u->gan), sam); - } - - // XX cache check, unless last - // - _lord_writ_plan(god_u, wit_u); -} - -/* u3_lord_play(): recompute batch. -*/ -void -u3_lord_play(u3_lord* god_u, u3_info fon_u) -{ - u3_writ* wit_u = _lord_writ_new(god_u); - wit_u->typ_e = u3_writ_play; - wit_u->fon_u = fon_u; - - // XX wat do? - // - // c3_assert( !pay_u.ent_u->nex_u ); - - _lord_writ_plan(god_u, wit_u); -} - -/* u3_lord_work(): attempt work. -*/ -void -u3_lord_work(u3_lord* god_u, u3_ovum* egg_u, u3_noun job) -{ - u3_writ* wit_u = _lord_writ_new(god_u); - wit_u->typ_e = u3_writ_work; - wit_u->wok_u.egg_u = egg_u; - wit_u->wok_u.job = job; - - // if not spinning, start - // - if ( c3n == god_u->pin_o ) { - god_u->cb_u.spin_f(god_u->cb_u.ptr_v, - egg_u->pin_u.lab, - egg_u->pin_u.del_o); - god_u->pin_o = c3y; - } - - _lord_writ_plan(god_u, wit_u); -} - -/* u3_lord_save(): save a snapshot. -*/ -c3_o -u3_lord_save(u3_lord* god_u) -{ - if ( god_u->dep_w ) { - return c3n; - } - else { - u3_writ* wit_u = _lord_writ_new(god_u); - wit_u->typ_e = u3_writ_save; - _lord_writ_plan(god_u, wit_u); - return c3y; - } -} - -/* u3_lord_cram(): save portable state. -*/ -c3_o -u3_lord_cram(u3_lord* god_u) -{ - if ( god_u->dep_w ) { - return c3n; - } - else { - u3_writ* wit_u = _lord_writ_new(god_u); - wit_u->typ_e = u3_writ_cram; - _lord_writ_plan(god_u, wit_u); - return c3y; - } -} - -/* u3_lord_meld(): globally deduplicate persistent state. -*/ -void -u3_lord_meld(u3_lord* god_u) -{ - u3_writ* wit_u = _lord_writ_new(god_u); - wit_u->typ_e = u3_writ_meld; - _lord_writ_plan(god_u, wit_u); -} - -/* u3_lord_pack(): defragment persistent state. -*/ -void -u3_lord_pack(u3_lord* god_u) -{ - u3_writ* wit_u = _lord_writ_new(god_u); - wit_u->typ_e = u3_writ_pack; - _lord_writ_plan(god_u, wit_u); -} - -/* u3_lord_exit(): shutdown gracefully. -*/ -void -u3_lord_exit(u3_lord* god_u) -{ - u3_writ* wit_u = _lord_writ_new(god_u); - wit_u->typ_e = u3_writ_exit; - _lord_writ_plan(god_u, wit_u); - - // XX set timer, then halt -} - -/* u3_lord_stall(): send SIGINT -*/ -void -u3_lord_stall(u3_lord* god_u) -{ - uv_process_kill(&god_u->cub_u, SIGINT); -} - -/* u3_lord_halt(): shutdown immediately -*/ -void -u3_lord_halt(u3_lord* god_u) -{ - // no exit callback on halt - // - god_u->cb_u.exit_f = 0; - - uv_process_kill(&god_u->cub_u, SIGKILL); - _lord_stop(god_u); -} - -/* _lord_serf_err_alloc(): libuv buffer allocator. -*/ -static void -_lord_serf_err_alloc(uv_handle_t* had_u, size_t len_i, uv_buf_t* buf) -{ - // error/info messages as a rule don't exceed one line - // - *buf = uv_buf_init(c3_malloc(80), 80); -} - -/* _lord_on_serf_err_cb(): subprocess stderr callback. -*/ -static void -_lord_on_serf_err_cb(uv_stream_t* pyp_u, - ssize_t siz_i, - const uv_buf_t* buf_u) -{ - if ( siz_i >= 0 ) { - // serf used to write to 2 directly - // this can't be any worse than that - // - u3_write_fd(2, buf_u->base, siz_i); - } else { - uv_read_stop(pyp_u); - - if ( siz_i != UV_EOF ) { - u3l_log("lord: serf stderr: %s\r\n", uv_strerror(siz_i)); - } - } - - if ( buf_u->base != NULL ) { - c3_free(buf_u->base); - } -} - - -/* _lord_on_serf_exit(): handle subprocess exit. -*/ -static void -_lord_on_serf_exit(uv_process_t* req_u, - c3_ds sas_i, - c3_i sig_i) -{ - - u3_lord* god_u = (void*)req_u; - - if ( !god_u->ext_u - || !(u3_writ_exit == god_u->ext_u->typ_e) ) - { - fprintf(stderr, "pier: work exit: status %" PRId64 ", signal %d\r\n", - sas_i, sig_i); - _lord_bail(god_u); - } - else { - _lord_stop(god_u); - } -} - -/* _lord_on_serf_bail(): handle subprocess error. -*/ -static void -_lord_on_serf_bail(void* ptr_v, - ssize_t err_i, - const c3_c* err_c) -{ - u3_lord* god_u = ptr_v; - - if ( UV_EOF == err_i ) { - u3l_log("pier: serf unexpectedly shut down\r\n"); - } - else { - u3l_log("pier: serf error: %s\r\n", err_c); - } - - _lord_bail(god_u); -} - -/* u3_lord_info(): status info as $mass. -*/ -u3_noun -u3_lord_info(u3_lord* god_u) -{ - return u3_pier_mass( - c3__lord, - u3i_list( - u3_pier_mase("live", god_u->liv_o), - u3_pier_mase("event", u3i_chub(god_u->eve_d)), - u3_pier_mase("mug", god_u->mug_l), - u3_pier_mase("queue", u3i_word(god_u->dep_w)), - u3_newt_moat_info(&god_u->out_u), - u3_none)); -} - -/* u3_lord_slog(): print status info. -*/ -void -u3_lord_slog(u3_lord* god_u) -{ - u3l_log(" lord: live=%s, event=%" PRIu64 ", mug=%x, queue=%u\n", - ( c3y == god_u->liv_o ) ? "&" : "|", - god_u->eve_d, - god_u->mug_l, - god_u->dep_w); - u3_newt_moat_slog(&god_u->out_u); -} - -/* u3_lord_init(): instantiate child process. -*/ -u3_lord* -u3_lord_init(c3_c* pax_c, c3_w wag_w, c3_d key_d[4], u3_lord_cb cb_u) -{ - u3_lord* god_u = c3_calloc(sizeof *god_u); - god_u->liv_o = c3n; - god_u->pin_o = c3n; - god_u->wag_w = wag_w; - god_u->bin_c = u3_Host.wrk_c; // XX strcopy - god_u->pax_c = pax_c; // XX strcopy - god_u->cb_u = cb_u; - - god_u->key_d[0] = key_d[0]; - god_u->key_d[1] = key_d[1]; - god_u->key_d[2] = key_d[2]; - god_u->key_d[3] = key_d[3]; - - // spawn new process and connect to it - // - { - c3_c* arg_c[8]; - c3_c key_c[256]; - c3_c wag_c[11]; - c3_c hap_c[11]; - c3_c cev_c[11]; - c3_i err_i; - - sprintf(key_c, "%" PRIx64 ":%" PRIx64 ":%" PRIx64 ":%" PRIx64 "", - god_u->key_d[0], - god_u->key_d[1], - god_u->key_d[2], - god_u->key_d[3]); - - sprintf(wag_c, "%u", god_u->wag_w); - - sprintf(hap_c, "%u", u3_Host.ops_u.hap_w); - - arg_c[0] = god_u->bin_c; // executable - arg_c[1] = "serf"; // protocol - arg_c[2] = god_u->pax_c; // path to checkpoint directory - arg_c[3] = key_c; // disk key - arg_c[4] = wag_c; // runtime config - arg_c[5] = hap_c; // hash table size - - if ( u3_Host.ops_u.roc_c ) { - // XX validate - // - arg_c[6] = u3_Host.ops_u.roc_c; - } - else { - arg_c[6] = "0"; - } - -#ifdef U3_OS_mingw - sprintf(cev_c, "%" PRIu64, u3_Host.cev_u); - arg_c[7] = cev_c; - arg_c[8] = 0; -#else - arg_c[7] = 0; -#endif - - uv_pipe_init(u3L, &god_u->inn_u.pyp_u, 0); - uv_timer_init(u3L, &god_u->out_u.tim_u); - uv_pipe_init(u3L, &god_u->out_u.pyp_u, 0); - uv_pipe_init(u3L, &god_u->err_u, 0); - - god_u->cod_u[0].flags = UV_CREATE_PIPE | UV_READABLE_PIPE; - god_u->cod_u[0].data.stream = (uv_stream_t *)&god_u->inn_u; - - god_u->cod_u[1].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - god_u->cod_u[1].data.stream = (uv_stream_t *)&god_u->out_u; - - god_u->cod_u[2].flags = UV_CREATE_PIPE | UV_WRITABLE_PIPE; - god_u->cod_u[2].data.stream = (uv_stream_t *)&god_u->err_u; - - god_u->ops_u.stdio = god_u->cod_u; - god_u->ops_u.stdio_count = 3; - - // if any fds are inherited, libuv ignores UV_PROCESS_WINDOWS_HIDE* - god_u->ops_u.flags = UV_PROCESS_WINDOWS_HIDE; - god_u->ops_u.exit_cb = _lord_on_serf_exit; - god_u->ops_u.file = arg_c[0]; - god_u->ops_u.args = arg_c; - - if ( (err_i = uv_spawn(u3L, &god_u->cub_u, &god_u->ops_u)) ) { - fprintf(stderr, "spawn: %s: %s\r\n", arg_c[0], uv_strerror(err_i)); - - return 0; - } - - uv_read_start((uv_stream_t *)&god_u->err_u, _lord_serf_err_alloc, _lord_on_serf_err_cb); - } - -#if defined(LORD_TRACE_JAM) || defined(LORD_TRACE_CUE) - u3t_trace_open(god_u->pax_c); -#endif - - { - god_u->sil_u = u3s_cue_xeno_init(); - } - - // start reading from proc - // - { - god_u->out_u.ptr_v = god_u; - god_u->out_u.pok_f = _lord_on_plea; - god_u->out_u.bal_f = _lord_on_serf_bail; - - // XX distinguish from out_u.bal_f ? - // - god_u->inn_u.ptr_v = god_u; - god_u->inn_u.bal_f = _lord_on_serf_bail; - - u3_newt_read(&god_u->out_u); - } - return god_u; -} diff --git a/pkg/urbit/vere/newt.c b/pkg/urbit/vere/newt.c deleted file mode 100644 index 02dd23b10..000000000 --- a/pkg/urbit/vere/newt.c +++ /dev/null @@ -1,480 +0,0 @@ -/* vere/newt.c -** -** implements noun blob messages with trivial framing. -** -** framing is 5 bytes long. first byte is a version tag; a -** character that should never otherwise appear in a message -** intended for urbit. right now we use 0x0. next 32 bits are -** little-endian byte count. after that is the indicated number -** of bytes, which are the +jam of a noun. -** -** the implementation is relatively inefficient and could -** lose a few copies, mallocs, etc. -*/ -#include "all.h" -#include "vere/vere.h" - -/* _newt_mess_head(): await next msg header. -*/ -static void -_newt_mess_head(u3_mess* mes_u) -{ - mes_u->sat_e = u3_mess_head; - mes_u->hed_u.has_y = 0; -} - -/* _newt_mess_tail(): await msg body. -*/ -static void -_newt_mess_tail(u3_mess* mes_u, c3_d len_d) -{ - u3_meat* met_u = c3_malloc(len_d + sizeof(*met_u)); - met_u->nex_u = 0; - met_u->len_d = len_d; - - mes_u->sat_e = u3_mess_tail; - mes_u->tal_u.has_d = 0; - mes_u->tal_u.met_u = met_u; -} - -/* _newt_meat_plan(): enqueue complete msg. -*/ -static void -_newt_meat_plan(u3_moat* mot_u, u3_meat* met_u) -{ - if ( mot_u->ent_u ) { - mot_u->ent_u->nex_u = met_u; - mot_u->ent_u = met_u; - } - else { - mot_u->ent_u = mot_u->ext_u = met_u; - } -} - -/* _newt_meat_poke(): deliver completed msg. -*/ -static void -_newt_meat_poke(u3_moat* mot_u, u3_meat* met_u) -{ - mot_u->pok_f(mot_u->ptr_v, met_u->len_d, met_u->hun_y); - c3_free(met_u); -} - -/* _newt_meat_next_sync(): deliver completed msgs, synchronously. -*/ -static void -_newt_meat_next_sync(u3_moat* mot_u) -{ - u3_meat* met_u = mot_u->ext_u; - - while ( met_u ) { - u3_meat* nex_u = met_u->nex_u; - _newt_meat_poke(mot_u, met_u); - met_u = nex_u; - } - - mot_u->ent_u = mot_u->ext_u = 0; -} - -static void -_newt_meat_next_cb(uv_timer_t* tim_u); - -/* _newt_meat_next(): deliver completed msgs, asynchronously. -*/ -static void -_newt_meat_next(u3_moat* mot_u) -{ - u3_meat* met_u = mot_u->ext_u; - - if ( met_u ) { - mot_u->ext_u = met_u->nex_u; - - if ( mot_u->ext_u ) { - uv_timer_start(&mot_u->tim_u, _newt_meat_next_cb, 0, 0); - } - else { - mot_u->ent_u = 0; - } - - _newt_meat_poke(mot_u, met_u); - } -} - -/* _newt_meat_next_cb(): handle next msg after timer. -*/ -static void -_newt_meat_next_cb(uv_timer_t* tim_u) -{ - u3_moat* mot_u = tim_u->data; - _newt_meat_next(mot_u); -} - -/* u3_newt_decode(): decode a (partial) length-prefixed byte buffer -*/ -c3_o -u3_newt_decode(u3_moat* mot_u, c3_y* buf_y, c3_d len_d) -{ - u3_mess* mes_u = &mot_u->mes_u; - - while ( len_d ) { - switch( mes_u->sat_e ) { - - // read up to 5 bytes as needed - // - case u3_mess_head: { - c3_y* hed_y = mes_u->hed_u.hed_y; - c3_y has_y = mes_u->hed_u.has_y; - c3_y ned_y = sizeof(mes_u->hed_u.hed_y) - has_y; - c3_y cop_y = c3_min(ned_y, len_d); - - memcpy(hed_y + has_y, buf_y, cop_y); - buf_y += cop_y; - len_d -= cop_y; - ned_y -= cop_y; - - // moar bytes needed, yield - // - if ( ned_y ) { - mes_u->hed_u.has_y = (has_y + cop_y); - } - // length known, allocate message - // - else { - c3_d met_d = (((c3_d)hed_y[1]) << 0) - | (((c3_d)hed_y[2]) << 8) - | (((c3_d)hed_y[3]) << 16) - | (((c3_d)hed_y[4]) << 24); - - // check for version tag and nonzero length - // - if ( 0x0 != hed_y[0] || !met_d ) { - return c3n; - } - - // await body - // - _newt_mess_tail(mes_u, met_d); - } - } break; - - case u3_mess_tail: { - u3_meat* met_u = mes_u->tal_u.met_u; - c3_d has_d = mes_u->tal_u.has_d; - c3_d ned_d = met_u->len_d - has_d; - c3_d cop_d = c3_min(ned_d, len_d); - - memcpy(met_u->hun_y + has_d, buf_y, cop_d); - buf_y += cop_d; - len_d -= cop_d; - ned_d -= cop_d; - - // moar bytes needed, yield - // - if ( ned_d ) { - mes_u->tal_u.has_d = (has_d + cop_d); - } - // message completed, enqueue and await next header - // - else { - _newt_meat_plan(mot_u, met_u); - _newt_mess_head(mes_u); - } - } break; - } - } - return c3y; -} - -/* _newt_read(): handle async read result. -*/ -static c3_o -_newt_read(u3_moat* mot_u, - ssize_t len_i, - const uv_buf_t* buf_u) -{ - if ( 0 > len_i ) { - c3_free(buf_u->base); - uv_read_stop((uv_stream_t*)&mot_u->pyp_u); - - if ( UV_EOF != len_i ) { - fprintf(stderr, "newt: read failed %s\r\n", uv_strerror(len_i)); - } - - mot_u->bal_f(mot_u->ptr_v, len_i, uv_strerror(len_i)); - return c3n; - } - // EAGAIN/EWOULDBLOCK - // - else if ( 0 == len_i ) { - c3_free(buf_u->base); - return c3n; - } - else { - if ( c3n == u3_newt_decode(mot_u, (c3_y*)buf_u->base, (c3_d)len_i) ) { - mot_u->bal_f(mot_u->ptr_v, -1, "newt-decode"); - c3_free(buf_u->base); - return c3n; - } - c3_free(buf_u->base); - return c3y; - } -} - -/* _newt_read_sync_cb(): async read callback, sync msg delivery. -*/ -static void -_newt_read_sync_cb(uv_stream_t* str_u, - ssize_t len_i, - const uv_buf_t* buf_u) -{ - u3_moat* mot_u = (void *)str_u; - - if ( c3y == _newt_read(mot_u, len_i, buf_u) ) { - _newt_meat_next_sync(mot_u); - } -} - -/* _newt_read_cb(): async read callback, async msg delivery. -*/ -static void -_newt_read_cb(uv_stream_t* str_u, - ssize_t len_i, - const uv_buf_t* buf_u) -{ - u3_moat* mot_u = (void *)str_u; - - if ( c3y == _newt_read(mot_u, len_i, buf_u) ) { - _newt_meat_next(mot_u); - } -} - -/* _newt_alloc(): libuv-style allocator. -*/ -static void -_newt_alloc(uv_handle_t* had_u, - size_t len_i, - uv_buf_t* buf_u) -{ - // XX pick an appropriate size - // - void* ptr_v = c3_malloc(len_i); - - *buf_u = uv_buf_init(ptr_v, len_i); -} - -static void -_newt_read_init(u3_moat* mot_u, uv_read_cb read_cb_f) -{ - // zero-initialize completed msg queue - // - mot_u->ent_u = mot_u->ext_u = 0; - - // store pointer for libuv handle callback - // - mot_u->pyp_u.data = mot_u; - mot_u->tim_u.data = mot_u; - - // await next msg header - // - _newt_mess_head(&mot_u->mes_u); - - { - c3_i sas_i; - - if ( 0 != (sas_i = uv_read_start((uv_stream_t*)&mot_u->pyp_u, - _newt_alloc, - read_cb_f)) ) - { - fprintf(stderr, "newt: read failed %s\r\n", uv_strerror(sas_i)); - mot_u->bal_f(mot_u->ptr_v, sas_i, uv_strerror(sas_i)); - } - } -} - -/* _moat_stop_cb(): finalize stop/close input stream.. -*/ -static void -_moat_stop_cb(uv_handle_t* han_u) -{ - u3_moat* mot_u = han_u->data; - mot_u->bal_f(mot_u->ptr_v, -1, ""); -} - -/* u3_newt_moat_stop(); newt stop/close input stream. -*/ -void -u3_newt_moat_stop(u3_moat* mot_u, u3_moor_bail bal_f) -{ - mot_u->pyp_u.data = mot_u; - - if ( bal_f ) { - mot_u->bal_f = bal_f; - } - - uv_close((uv_handle_t*)&mot_u->pyp_u, _moat_stop_cb); - uv_close((uv_handle_t*)&mot_u->tim_u, 0); - - // dispose in-process message - // - if ( u3_mess_tail == mot_u->mes_u.sat_e ) { - c3_free(mot_u->mes_u.tal_u.met_u); - _newt_mess_head(&mot_u->mes_u); - } - - // dispose pending messages - { - u3_meat* met_u = mot_u->ext_u; - u3_meat* nex_u; - - while ( met_u ) { - nex_u = met_u->nex_u; - c3_free(met_u); - met_u = nex_u; - } - - mot_u->ent_u = mot_u->ext_u = 0; - } -} - -/* u3_newt_read_sync(): start reading; multiple msgs synchronous. -*/ -void -u3_newt_read_sync(u3_moat* mot_u) -{ - _newt_read_init(mot_u, _newt_read_sync_cb); -} - -/* u3_newt_read(): start reading; each msg asynchronous. -*/ -void -u3_newt_read(u3_moat* mot_u) -{ - _newt_read_init(mot_u, _newt_read_cb); -} - -/* u3_newt_moat_info(): status info as $mass. -*/ -u3_noun -u3_newt_moat_info(u3_moat* mot_u) -{ - u3_meat* met_u = mot_u->ext_u; - c3_w len_w = 0; - - while ( met_u ) { - len_w++; - met_u = met_u->nex_u; - } - return u3_pier_mass( - c3__moat, - u3i_list(u3_pier_mase("pending-inbound", u3i_word(len_w)), - u3_none)); -} - -/* u3_newt_moat_slog(); print status info. -*/ -void -u3_newt_moat_slog(u3_moat* mot_u) -{ - u3_meat* met_u = mot_u->ext_u; - c3_w len_w = 0; - - while ( met_u ) { - len_w++; - met_u = met_u->nex_u; - } - - if ( len_w ) { - u3l_log(" newt: %u inbound ipc messages pending\n", len_w); - } -} - -/* n_req: write request for newt -*/ -typedef struct _n_req { - uv_write_t wri_u; - u3_mojo* moj_u; - c3_y* buf_y; - c3_y hed_y[5]; -} n_req; - -/* _newt_write_cb(): generic write callback. -*/ -static void -_newt_write_cb(uv_write_t* wri_u, c3_i sas_i) -{ - n_req* req_u = (n_req*)wri_u; - u3_mojo* moj_u = req_u->moj_u; - - c3_free(req_u->buf_y); - c3_free(req_u); - - if ( 0 != sas_i ) { - if ( UV_ECANCELED == sas_i ) { - fprintf(stderr, "newt: write canceled\r\n"); - } - else { - fprintf(stderr, "newt: write failed %s\r\n", uv_strerror(sas_i)); - moj_u->bal_f(moj_u->ptr_v, sas_i, uv_strerror(sas_i)); - } - } -} - -/* _mojo_stop_cb(): finalize stop/close output stream.. -*/ -static void -_mojo_stop_cb(uv_handle_t* han_u) -{ - u3_mojo* moj_u = han_u->data; - moj_u->bal_f(moj_u->ptr_v, -1, ""); -} - -/* u3_newt_mojo_stop(); newt stop/close output stream. -*/ -void -u3_newt_mojo_stop(u3_mojo* moj_u, u3_moor_bail bal_f) -{ - moj_u->pyp_u.data = moj_u; - - if ( bal_f ) { - moj_u->bal_f = bal_f; - } - - uv_close((uv_handle_t*)&moj_u->pyp_u, _mojo_stop_cb); -} - -/* u3_newt_send(): write buffer to stream. -*/ -void -u3_newt_send(u3_mojo* moj_u, c3_d len_d, c3_y* byt_y) -{ - n_req* req_u = c3_malloc(sizeof(*req_u)); - req_u->moj_u = moj_u; - req_u->buf_y = byt_y; - - // write header - // - req_u->hed_y[0] = 0x0; - req_u->hed_y[1] = ( len_d & 0xff); - req_u->hed_y[2] = ((len_d >> 8) & 0xff); - req_u->hed_y[3] = ((len_d >> 16) & 0xff); - req_u->hed_y[4] = ((len_d >> 24) & 0xff); - - { - uv_buf_t buf_u[2] = { - uv_buf_init((c3_c*)req_u->hed_y, sizeof(req_u->hed_y)), - uv_buf_init((c3_c*)req_u->buf_y, len_d) - }; - - c3_i sas_i; - - if ( 0 != (sas_i = uv_write(&req_u->wri_u, - (uv_stream_t*)&moj_u->pyp_u, - buf_u, 2, - _newt_write_cb)) ) - { - c3_free(req_u); - fprintf(stderr, "newt: write failed %s\r\n", uv_strerror(sas_i)); - moj_u->bal_f(moj_u->ptr_v, sas_i, uv_strerror(sas_i)); - } - } -} diff --git a/pkg/urbit/vere/pier.c b/pkg/urbit/vere/pier.c deleted file mode 100644 index 2734c4d75..000000000 --- a/pkg/urbit/vere/pier.c +++ /dev/null @@ -1,2450 +0,0 @@ -/* vere/pier.c -*/ -#include "all.h" -#include "vere/vere.h" -#include "vere/db/lmdb.h" -#include - -#define PIER_READ_BATCH 1000ULL -#define PIER_PLAY_BATCH 500ULL -#define PIER_WORK_BATCH 10ULL - -#undef VERBOSE_PIER - -/* _pier_peek_plan(): add a u3_pico to the peek queue -*/ -static void -_pier_peek_plan(u3_pier* pir_u, u3_pico* pic_u) -{ - if (!pir_u->pec_u.ent_u) { - c3_assert( !pir_u->pec_u.ext_u ); - pir_u->pec_u.ent_u = pir_u->pec_u.ext_u = pic_u; - } - else { - pir_u->pec_u.ent_u->nex_u = pic_u; - pir_u->pec_u.ent_u = pic_u; - } - - u3_pier_spin(pir_u); -} - -/* _pier_peek_next(): pop u3_pico off of peek queue -*/ -static u3_pico* -_pier_peek_next(u3_pier* pir_u) -{ - u3_pico* pic_u = pir_u->pec_u.ext_u; - - if (pic_u) { - pir_u->pec_u.ext_u = pic_u->nex_u; - if (!pir_u->pec_u.ext_u) { - pir_u->pec_u.ent_u = 0; - } - - pic_u->nex_u = 0; - } - - return pic_u; -} - -/* _pier_work_send(): send new events for processing -*/ -static void -_pier_work_send(u3_work* wok_u) -{ - u3_auto* car_u = wok_u->car_u; - u3_pier* pir_u = wok_u->pir_u; - u3_lord* god_u = pir_u->god_u; - c3_w len_w = 0; - - // calculate work batch size - { - u3_wall* wal_u = wok_u->wal_u; - - if ( !wal_u ) { - // XX work depth, or full lord send-stack depth? - // - if ( PIER_WORK_BATCH > god_u->dep_w ) { - len_w = PIER_WORK_BATCH - god_u->dep_w; - } - } - else { - c3_d sen_d = god_u->eve_d + god_u->dep_w; - if ( wal_u->eve_d > sen_d ) { - len_w = wal_u->eve_d - sen_d; - } - } - } - - // send batch - // - { - u3_ovum* egg_u; - u3_pico* pic_u; - u3_noun ovo, now, bit = u3qc_bex(48); - - { - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - now = u3_time_in_tv(&tim_tv); - } - - while ( len_w && car_u && (egg_u = u3_auto_next(car_u, &ovo)) ) { - len_w--; - u3_lord_work(god_u, egg_u, u3nc(u3k(now), ovo)); - now = u3ka_add(now, u3k(bit)); - - // queue events depth first - // - car_u = egg_u->car_u; - - // interleave scry requests - // - if ( len_w && (pic_u = _pier_peek_next(pir_u)) ) - { - len_w--; - u3_lord_peek(god_u, pic_u); - u3_pico_free(pic_u); - } - } - - // if there's room left in the batch, fill it up with remaining scries - // - while ( len_w-- && (pic_u = _pier_peek_next(pir_u)) ) - { - u3_lord_peek(god_u, pic_u); - u3_pico_free(pic_u); - } - - u3z(now); u3z(bit); - } -} - -/* _pier_gift_plan(): enqueue effects. -*/ -static void -_pier_gift_plan(u3_work* wok_u, u3_gift* gif_u) -{ - c3_assert( gif_u->eve_d > wok_u->fec_u.rel_d ); - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): compute: complete\r\n", gif_u->eve_d); -#endif - - gif_u->nex_u = 0; - - if ( !wok_u->fec_u.ent_u ) { - c3_assert( !wok_u->fec_u.ext_u ); - wok_u->fec_u.ent_u = wok_u->fec_u.ext_u = gif_u; - } - else { - wok_u->fec_u.ent_u->nex_u = gif_u; - wok_u->fec_u.ent_u = gif_u; - } -} - -/* _pier_gift_next(): dequeue effect. -*/ -static u3_gift* -_pier_gift_next(u3_work* wok_u) -{ - u3_pier* pir_u = wok_u->pir_u; - u3_disk* log_u = pir_u->log_u; - u3_gift* gif_u = wok_u->fec_u.ext_u; - - if ( !gif_u || (gif_u->eve_d > log_u->dun_d) ) { - return 0; - } - else { - wok_u->fec_u.ext_u = gif_u->nex_u; - - if ( !wok_u->fec_u.ext_u ) { - wok_u->fec_u.ent_u = 0; - } - - c3_assert( (1ULL + wok_u->fec_u.rel_d) == gif_u->eve_d ); - wok_u->fec_u.rel_d = gif_u->eve_d; - - return gif_u; - } -} - -/* _pier_gift_kick(): apply effects. -*/ -static void -_pier_gift_kick(u3_work* wok_u) -{ - u3_gift* gif_u; - - while ( (gif_u = _pier_gift_next(wok_u)) ) { -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): compute: release\r\n", gif_u->eve_d); -#endif - - u3_auto_kick(wok_u->car_u, gif_u->act); - u3_gift_free(gif_u); - } -} - -/* _pier_wall_plan(): enqueue a barrier. -*/ -static void -_pier_wall_plan(u3_pier* pir_u, c3_d eve_d, - void* ptr_v, void (*wal_f)(void*, c3_d)) -{ - c3_assert( u3_psat_work == pir_u->sat_e ); - - u3_wall* wal_u = c3_malloc(sizeof(*wal_u)); - wal_u->ptr_v = ptr_v; - wal_u->eve_d = eve_d; - wal_u->wal_f = wal_f; - - // insert into [pir_u->wal_u], preserving stable sort by [eve_d] - // - { - u3_wall** las_u = &pir_u->wok_u->wal_u; - - while ( *las_u && (eve_d <= (*las_u)->eve_d) ) { - las_u = &(*las_u)->nex_u; - } - - wal_u->nex_u = *las_u; - *las_u = wal_u; - } -} - -/* _pier_wall(): process a barrier if possible. -*/ -static void -_pier_wall(u3_work* wok_u) -{ - u3_lord* god_u = wok_u->pir_u->god_u; - u3_disk* log_u = wok_u->pir_u->log_u; - - if ( god_u->eve_d == log_u->dun_d ) { - u3_wall* wal_u; - - while ( (wal_u = wok_u->wal_u) - && !god_u->dep_w - && (wal_u->eve_d <= god_u->eve_d) ) - { - wok_u->wal_u = wal_u->nex_u; - wal_u->wal_f(wal_u->ptr_v, god_u->eve_d); - c3_free(wal_u); - } - } -} - -/* _pier_work(): advance event processing. -*/ -static void -_pier_work(u3_work* wok_u) -{ - u3_pier* pir_u = wok_u->pir_u; - - if ( c3n == pir_u->liv_o ) { - pir_u->liv_o = u3_auto_live(wok_u->car_u); - - // all i/o drivers are fully initialized - // - if ( c3y == pir_u->liv_o ) { - // XX this is when "boot" is actually complete - // XX even better would be after neighboring with our sponsor - // - u3l_log("pier (%" PRIu64 "): live\r\n", pir_u->god_u->eve_d); - - // XX move callbacking to king - // - if ( u3_Host.bot_f ) { - u3_Host.bot_f(); - } - } - } - - _pier_gift_kick(wok_u); - _pier_wall(wok_u); - - if ( u3_psat_work == pir_u->sat_e ) { - _pier_work_send(wok_u); - } - else { - c3_assert( u3_psat_done == pir_u->sat_e ); - } -} - -/* _pier_on_lord_work_spin(): start spinner -*/ -static void -_pier_on_lord_work_spin(void* ptr_v, u3_atom pin, c3_o del_o) -{ - u3_pier* pir_u = ptr_v; - - c3_assert( (u3_psat_wyrd == pir_u->sat_e) - || (u3_psat_work == pir_u->sat_e) - || (u3_psat_done == pir_u->sat_e) ); - - u3_term_start_spinner(pin, del_o); -} - -/* _pier_on_lord_work_spin(): stop spinner -*/ -static void -_pier_on_lord_work_spun(void* ptr_v) -{ - u3_pier* pir_u = ptr_v; - - c3_assert( (u3_psat_wyrd == pir_u->sat_e) - || (u3_psat_work == pir_u->sat_e) - || (u3_psat_done == pir_u->sat_e) ); - - u3_term_stop_spinner(); -} - -/* _pier_on_lord_work_done(): event completion from worker. -*/ -static void -_pier_on_lord_work_done(void* ptr_v, - u3_ovum* egg_u, - u3_fact* tac_u, - u3_gift* gif_u) -{ - u3_pier* pir_u = ptr_v; - - c3_assert( (u3_psat_work == pir_u->sat_e) - || (u3_psat_done == pir_u->sat_e) ); - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier (%" PRIu64 "): work: done\r\n", tac_u->eve_d); -#endif - - // XX this is a departure from the general organization of this file - // - u3_disk_plan(pir_u->log_u, tac_u); - - u3_auto_done(egg_u); - - _pier_gift_plan(pir_u->wok_u, gif_u); - _pier_work(pir_u->wok_u); -} - -/* _pier_on_lord_work_bail(): event failure from worker. -*/ -static void -_pier_on_lord_work_bail(void* ptr_v, u3_ovum* egg_u, u3_noun lud) -{ - u3_pier* pir_u = ptr_v; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: work: bail\r\n"); -#endif - - c3_assert( (u3_psat_work == pir_u->sat_e) - || (u3_psat_done == pir_u->sat_e) ); - - u3_auto_bail(egg_u, lud); - - // XX groace - // - if ( pir_u->wok_u ) { - _pier_work(pir_u->wok_u); - } -} - -/* _pier_work_time(): set time. -*/ -static void -_pier_work_time(u3_pier* pir_u) -{ - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - - // XX save to pier - // - u3v_time(u3_time_in_tv(&tim_tv)); -} - -/* _pier_work_fore_cb(): run on every loop iteration before i/o polling. -*/ -static void -_pier_work_fore_cb(uv_prepare_t* pep_u) -{ - u3_work* wok_u = pep_u->data; - _pier_work_time(wok_u->pir_u); -} - -/* _pier_work_afte_cb(): run on every loop iteration after i/o polling. -*/ -static void -_pier_work_afte_cb(uv_check_t* cek_u) -{ - u3_work* wok_u = cek_u->data; - _pier_work(wok_u); -} - -/* _pier_work_idle_cb(): run on next loop iteration. -*/ -static void -_pier_work_idle_cb(uv_idle_t* idl_u) -{ - u3_work* wok_u = idl_u->data; - _pier_work(wok_u); - uv_idle_stop(idl_u); -} - -/* u3_pier_spin(): (re-)activate idle handler -*/ -void -u3_pier_spin(u3_pier* pir_u) -{ - // XX return c3n instead? - // - if ( u3_psat_work == pir_u->sat_e - || u3_psat_done == pir_u->sat_e ) - { - u3_work* wok_u = pir_u->wok_u; - - if ( !uv_is_active((uv_handle_t*)&wok_u->idl_u) ) { - uv_idle_start(&wok_u->idl_u, _pier_work_idle_cb); - } - } -} - -/* u3_pier_peek(): read namespace. -*/ -void -u3_pier_peek(u3_pier* pir_u, - u3_noun gan, - u3_noun ful, - void* ptr_v, - u3_peek_cb fun_f) -{ - u3_pico* pic_u = u3_pico_init(); - - pic_u->ptr_v = ptr_v; - pic_u->fun_f = fun_f; - pic_u->gan = gan; - // - pic_u->typ_e = u3_pico_full; - pic_u->ful = ful; - - _pier_peek_plan(pir_u, pic_u); -} - -/* u3_pier_peek_last(): read namespace, injecting ship and case. -*/ -void -u3_pier_peek_last(u3_pier* pir_u, - u3_noun gan, - c3_m car_m, - u3_atom des, - u3_noun pax, - void* ptr_v, - u3_peek_cb fun_f) -{ - u3_pico* pic_u = u3_pico_init(); - - pic_u->ptr_v = ptr_v; - pic_u->fun_f = fun_f; - pic_u->gan = gan; - // - pic_u->typ_e = u3_pico_once; - pic_u->las_u.car_m = car_m; - pic_u->las_u.des = des; - pic_u->las_u.pax = pax; - - _pier_peek_plan(pir_u, pic_u); -} - -/* _pier_stab(): parse path -*/ -static u3_noun -_pier_stab(u3_noun pac) -{ - return u3do("stab", pac); -} - -/* _pier_on_scry_done(): scry callback. -*/ -static void -_pier_on_scry_done(void* ptr_v, u3_noun nun) -{ - u3_pier* pir_u = ptr_v; - u3_weak res = u3r_at(7, nun); - - if (u3_none == res) { - u3l_log("pier: scry failed\n"); - } - else { - u3_weak out, pad; - c3_c *ext_c, *pac_c; - - u3l_log("pier: scry succeeded\n"); - - if ( u3_Host.ops_u.puk_c ) { - pac_c = u3_Host.ops_u.puk_c; - } - else { - pac_c = u3_Host.ops_u.pek_c; - } - - // try to serialize as requested - // - { - u3_atom puf = u3i_string(u3_Host.ops_u.puf_c); - if ( c3y == u3r_sing(c3__jam, puf) ) { - out = u3qe_jam(res); - ext_c = "jam"; - } - else if ( c3y == u3a_is_atom(res) ) { - out = u3dc("scot", u3k(puf), u3k(res)); - ext_c = "txt"; - } - else { - u3l_log("pier: cannot export cell as %s\n", u3_Host.ops_u.puf_c); - out = u3_none; - } - u3z(puf); - } - - // try to build export target path - // - { - u3_noun pro = u3m_soft(0, _pier_stab, u3i_string(pac_c)); - if ( 0 == u3h(pro) ) { - c3_w len_w = u3kb_lent(u3k(u3t(pro))); - pad = u3nt(c3_s4('.', 'u', 'r', 'b'), - c3_s3('p', 'u', 't'), - u3qb_scag(len_w - 1, u3t(pro))); - } - else { - u3l_log("pier: invalid export path %s\n", pac_c); - pad = u3_none; - } - u3z(pro); - } - - // if serialization and export path succeeded, write to disk - // - if ( (u3_none != out) && (u3_none != pad) ) { - c3_c fil_c[256]; - snprintf(fil_c, 256, "%s.%s", pac_c + 1, ext_c); - - u3_unix_save(fil_c, pad); - u3l_log("pier: scry result in %s/.urb/put/%s\n", u3_Host.dir_c, fil_c); - } - } - - u3l_log("pier: exit\n"); - u3_pier_exit(pir_u); - - u3z(nun); -} - -/* _pier_work_init(): begin processing new events -*/ -static void -_pier_work_init(u3_pier* pir_u) -{ - u3_work* wok_u; - - c3_assert( u3_psat_wyrd == pir_u->sat_e ); - - pir_u->sat_e = u3_psat_work; - pir_u->wok_u = wok_u = c3_calloc(sizeof(*wok_u)); - wok_u->pir_u = pir_u; - wok_u->fec_u.rel_d = pir_u->log_u->dun_d; - - _pier_work_time(pir_u); - - // XX plan kelvin event - // - - // XX snapshot timer - // XX moveme - // - { - c3_l cod_l = u3a_lush(c3__save); - u3_save_io_init(pir_u); - u3a_lop(cod_l); - } - - // initialize pre i/o polling handle - // - uv_prepare_init(u3L, &wok_u->pep_u); - wok_u->pep_u.data = wok_u; - uv_prepare_start(&wok_u->pep_u, _pier_work_fore_cb); - - // initialize post i/o polling handle - // - uv_check_init(u3L, &wok_u->cek_u); - wok_u->cek_u.data = wok_u; - uv_check_start(&wok_u->cek_u, _pier_work_afte_cb); - - // initialize idle i/o polling handle - // - // NB, not started - // - uv_idle_init(u3L, &wok_u->idl_u); - wok_u->idl_u.data = wok_u; - - // // setup u3_lord work callbacks - // // - // u3_lord_work_cb cb_u = { - // .ptr_v = wok_u, - // .spin_f = _pier_on_lord_work_spin, - // .spun_f = _pier_on_lord_work_spun, - // .done_f = _pier_on_lord_work_done, - // .bail_f = _pier_on_lord_work_bail - // }; - // u3_lord_work_init(pir_u->god_u, cb_u); - - // XX this is messy, revise - // - if ( u3_Host.ops_u.pek_c ) { - u3_noun pex = u3do("stab", u3i_string(u3_Host.ops_u.pek_c)); - u3_noun car; - u3_noun dek; - u3_noun pax; - if ( c3n == u3r_trel(pex, &car, &dek, &pax) - || c3n == u3a_is_cat(car) ) - { - u3m_p("pier: invalid scry", pex); - _pier_on_scry_done(pir_u, u3_nul); - } else { - // run the requested scry, jam to disk, then exit - // - u3l_log("pier: scry\n"); - u3_pier_peek_last(pir_u, u3_nul, u3k(car), u3k(dek), u3k(pax), - pir_u, _pier_on_scry_done); - } - u3z(pex); - } - else { - // initialize i/o drivers - // - wok_u->car_u = u3_auto_init(pir_u); - u3_auto_talk(wok_u->car_u); - } - - _pier_work(wok_u); -} - -/* _pier_wyrd_good(): %wyrd version negotation succeeded. -*/ -static void -_pier_wyrd_good(u3_pier* pir_u, u3_ovum* egg_u) -{ - // restore event callbacks - // - { - u3_lord* god_u = pir_u->god_u; - god_u->cb_u.work_done_f = _pier_on_lord_work_done; - god_u->cb_u.work_bail_f = _pier_on_lord_work_bail; - } - - // initialize i/o drivers - // - _pier_work_init(pir_u); - - // free %wyrd driver and ovum - // - { - u3_auto* car_u = egg_u->car_u; - u3_auto_done(egg_u); - c3_free(car_u); - } -} - -/* _pier_wyrd_fail(): %wyrd version negotation failed. -*/ -static void -_pier_wyrd_fail(u3_pier* pir_u, u3_ovum* egg_u, u3_noun lud) -{ - // XX version negotiation failed, print upgrade message - // - u3l_log("pier: version negotation failed\n\n"); - - // XX only print trace with -v ? - // - if ( u3_nul != lud ) { - u3_auto_bail_slog(egg_u, u3k(u3t(lud))); - } - - u3z(lud); - - // free %wyrd driver and ovum - // - { - u3_auto* car_u = egg_u->car_u; - u3_auto_done(egg_u); - c3_free(car_u); - } - - u3_pier_bail(pir_u); -} - -// XX organizing version constants -// -#define VERE_NAME "vere" -#define VERE_ZUSE 418 -#define VERE_LULL 329 - -/* _pier_wyrd_aver(): check for %wend effect and version downgrade. RETAIN -*/ -static c3_o -_pier_wyrd_aver(u3_noun act) -{ - u3_noun fec, kel, ver; - - // XX review, %wend re: %wyrd optional? - // - while ( u3_nul != act ) { - u3x_cell(act, &fec, &act); - - if ( c3__wend == u3h(fec) ) { - kel = u3t(fec); - - // traverse $wynn, check for downgrades - // - while ( u3_nul != kel ) { - u3x_cell(kel, &ver, &kel); - - // check for %zuse downgrade - // - if ( (c3__zuse == u3h(ver)) - && (VERE_ZUSE != u3t(ver)) ) - { - return c3n; - } - - // XX in the future, send %wend to serf - // to also negotiate downgrade of nock/hoon/&c? - // (we don't want to have to filter effects) - // - } - } - } - - return c3y; -} - -/* _pier_on_lord_wyrd_done(): callback for successful %wyrd event. -*/ -static void -_pier_on_lord_wyrd_done(void* ptr_v, - u3_ovum* egg_u, - u3_fact* tac_u, - u3_gift* gif_u) -{ - u3_pier* pir_u = ptr_v; - - c3_assert( u3_psat_wyrd == pir_u->sat_e ); - - // arvo's side of version negotiation succeeded - // traverse [gif_y] and validate - // - if ( c3n == _pier_wyrd_aver(gif_u->act) ) { - u3_fact_free(tac_u); - u3_gift_free(gif_u); - - // XX messaging, cli argument to bypass - // - u3l_log("pier: version negotiation failed; downgrade\n"); - _pier_wyrd_fail(pir_u, egg_u, u3_nul); - } - else { - // enqueue %wyrd event-log commit - // - u3_disk_plan(pir_u->log_u, tac_u); - - // finalize %wyrd success - // - _pier_wyrd_good(pir_u, egg_u); - - // plan %wyrd effects - // - _pier_gift_plan(pir_u->wok_u, gif_u); - } -} - -/* _pier_on_lord_wyrd_bail(): callback for failed %wyrd event. -*/ -static void -_pier_on_lord_wyrd_bail(void* ptr_v, u3_ovum* egg_u, u3_noun lud) -{ - u3_pier* pir_u = ptr_v; - - c3_assert( u3_psat_wyrd == pir_u->sat_e ); - - // XX add cli argument to bypass negotiation failure - // -#if 1 - // print %wyrd failure and exit - // - // XX check bail mote, retry on %intr, %meme, &c - // - _pier_wyrd_fail(pir_u, egg_u, lud); -#else - // XX temporary hack to fake %wyrd success - // - { - _pier_wyrd_good(pir_u, egg_u); - u3z(lud); - } -#endif -} - -/* _pier_wyrd_init(): construct %wyrd. -*/ -static u3_noun -_pier_wyrd_card(u3_pier* pir_u) -{ - u3_lord* god_u = pir_u->god_u; - u3_noun sen; - - _pier_work_time(pir_u); - - { - c3_l sev_l; - u3_noun now; - struct timeval tim_u; - gettimeofday(&tim_u, 0); - - now = u3_time_in_tv(&tim_u); - sev_l = u3r_mug(now); - sen = u3dc("scot", c3__uv, sev_l); - - u3z(now); - } - - // XX god_u not necessarily available yet, refactor call sites - // - u3_noun ver = u3nt(u3i_string(VERE_NAME), - u3dc("scot", c3__ta, u3i_string(URBIT_VERSION)), - u3_nul); - u3_noun kel = u3nl(u3nc(c3__zuse, VERE_ZUSE), // XX from both king and serf? - u3nc(c3__lull, VERE_LULL), // XX from both king and serf? - u3nc(c3__arvo, 240), // XX from both king and serf? - u3nc(c3__hoon, 140), // god_u->hon_y - u3nc(c3__nock, 4), // god_u->noc_y - u3_none); - u3_noun wir = u3nc(c3__arvo, u3_nul); - return u3nt(c3__wyrd, u3nc(sen, ver), kel); -} - -/* _pier_wyrd_init(): send %wyrd. -*/ -static void -_pier_wyrd_init(u3_pier* pir_u) -{ - u3_noun cad = _pier_wyrd_card(pir_u); - u3_noun wir = u3nc(c3__arvo, u3_nul); - - pir_u->sat_e = u3_psat_wyrd; - - u3l_log("vere: checking version compatibility\n"); - - { - u3_lord* god_u = pir_u->god_u; - u3_auto* car_u = c3_calloc(sizeof(*car_u)); - u3_ovum* egg_u = u3_ovum_init(0, u3_blip, wir, cad); - u3_noun ovo; - - car_u->pir_u = pir_u; - car_u->nam_m = c3__wyrd; - - u3_auto_plan(car_u, egg_u); - - // instead of subscribing with u3_auto_peer(), - // we swizzle the [god_u] callbacks for full control - // - god_u->cb_u.work_done_f = _pier_on_lord_wyrd_done; - god_u->cb_u.work_bail_f = _pier_on_lord_wyrd_bail; - - c3_assert( u3_auto_next(car_u, &ovo) == egg_u ); - - { - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - u3_lord_work(god_u, egg_u, u3nc(u3_time_in_tv(&tim_tv), ovo)); - } - } -} - -/* _pier_play_plan(): enqueue events for replay. -*/ -static void -_pier_play_plan(u3_play* pay_u, u3_info fon_u) -{ - u3_fact** ext_u; - c3_d old_d; - - if ( !pay_u->ext_u ) { - c3_assert( !pay_u->ent_u ); - ext_u = &pay_u->ext_u; - old_d = pay_u->sen_d; - } - else { - ext_u = &pay_u->ent_u->nex_u; - old_d = pay_u->ent_u->eve_d; - } - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: play plan %" PRIu64 "-%" PRIu64 " at %" PRIu64 "\r\n", - fon_u.ext_u->eve_d, - fon_u.ent_u->eve_d, - old_d); -#endif - - c3_assert( (1ULL + old_d) == fon_u.ext_u->eve_d ); - - *ext_u = fon_u.ext_u; - pay_u->ent_u = fon_u.ent_u; -} - -/* _pier_play_send(): detach a batch of up to [len_w] events from queue. -*/ -static u3_info -_pier_play_next(u3_play* pay_u, c3_w len_w) -{ - u3_fact* tac_u = pay_u->ext_u; - u3_info fon_u; - - // XX just share batch with lord, save last sent to pay_u->sen_u - // - - // set batch entry and exit pointers - // - { - fon_u.ext_u = tac_u; - - while ( len_w-- && tac_u->nex_u ) { - tac_u = tac_u->nex_u; - } - - fon_u.ent_u = tac_u; - } - - // detatch batch from queue - // - if ( tac_u->nex_u ) { - pay_u->ext_u = tac_u->nex_u; - tac_u->nex_u = 0; - } - else { - pay_u->ent_u = pay_u->ext_u = 0; - } - - return fon_u; -} - -/* _pier_play_send(): send a batch of events to the worker for replay. -*/ -static void -_pier_play_send(u3_play* pay_u) -{ - u3_pier* pir_u = pay_u->pir_u; - c3_w len_w; - - // awaiting read - // - if ( !pay_u->ext_u ) { - return; - } - - // XX fill the pipe how much? - // (god_u->dep_w > PIER_WORK_BATCH) ) - // - - // the first batch must be >= the lifecycle barrier - // - if ( !pay_u->sen_d ) { - len_w = c3_max(pir_u->lif_w, PIER_PLAY_BATCH); - } - else { - c3_d lef_d = (pay_u->eve_d - pay_u->sen_d); - len_w = c3_min(lef_d, PIER_PLAY_BATCH); - } - - { - u3_info fon_u = _pier_play_next(pay_u, len_w); - - // bump sent counter - // - pay_u->sen_d = fon_u.ent_u->eve_d; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: play send %" PRIu64 "-%" PRIu64 "\r\n", fon_u.ext_u->eve_d, fon_u.ent_u->eve_d); -#endif - - u3_lord_play(pir_u->god_u, fon_u); - } -} - -/* _pier_play_read(): read events from disk for replay. -*/ -static void -_pier_play_read(u3_play* pay_u) -{ - u3_pier* pir_u = pay_u->pir_u; - c3_d las_d; - - if ( pay_u->ent_u ) { - las_d = pay_u->ent_u->eve_d; - - // cap the pir_u->pay_u queue depth - // - if ( (las_d - pay_u->ext_u->eve_d) >= PIER_PLAY_BATCH ) { - return; - } - } - else { - las_d = pay_u->sen_d; - } - - { - c3_d nex_d = (1ULL + las_d); - c3_d len_d = c3_min(pay_u->eve_d - las_d, PIER_READ_BATCH); - - if ( len_d - && (nex_d > pay_u->req_d) ) - { - u3_disk_read(pir_u->log_u, nex_d, len_d); - pay_u->req_d = nex_d; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: play read %" PRIu64 " at %" PRIu64 "\r\n", len_d, nex_d); -#endif - } - } -} - -/* _pier_play(): send a batch of events to the worker for log replay. -*/ -static void -_pier_play(u3_play* pay_u) -{ - u3_pier* pir_u = pay_u->pir_u; - u3_lord* god_u = pir_u->god_u; - u3_disk* log_u = pir_u->log_u; - - if ( god_u->eve_d == pay_u->eve_d ) { - // XX should be play_cb - // - u3l_log("---------------- playback complete ----------------\r\n"); - u3_term_stop_spinner(); - - if ( pay_u->eve_d < log_u->dun_d ) { - // u3l_log("pier: replay barrier reached, shutting down\r\n"); - // // XX graceful shutdown - // // - // u3_lord_save(pir_u->god_u); - // u3_pier_bail(pir_u); - // exit(0); - - // XX temporary hack - // - u3l_log("pier: replay barrier reached, cramming\r\n"); - u3_pier_cram(pir_u); - } - else if ( pay_u->eve_d == log_u->dun_d ) { - u3_lord_save(pir_u->god_u); - _pier_wyrd_init(pir_u); - } - } - else { - c3_assert( god_u->eve_d < pay_u->eve_d ); - _pier_play_send(pay_u); - _pier_play_read(pay_u); - } -} - -/* _pier_on_lord_play_done(): log replay batch completion from worker. -*/ -static void -_pier_on_lord_play_done(void* ptr_v, u3_info fon_u, c3_l mug_l) -{ - u3_pier* pir_u = ptr_v; - u3_fact* tac_u = fon_u.ent_u; - u3_fact* nex_u; - - c3_assert( u3_psat_play == pir_u->sat_e ); - - u3l_log("pier: (%" PRIu64 "): play: done\r\n", tac_u->eve_d); - - // XX optional - // - if ( tac_u->mug_l && (tac_u->mug_l != mug_l) ) { - u3l_log("pier: (%" PRIu64 "): play: mug mismatch %x %x\r\n", - tac_u->eve_d, - tac_u->mug_l, - mug_l); - // u3_pier_bail(pir_u); - } - - // dispose successful - // - { - tac_u = fon_u.ext_u; - - while ( tac_u ) { - nex_u = tac_u->nex_u; - u3_fact_free(tac_u); - tac_u = nex_u; - } - } - - _pier_play(pir_u->pay_u); -} - -/* _pier_on_lord_play_bail(): log replay batch failure from worker. -*/ -static void -_pier_on_lord_play_bail(void* ptr_v, u3_info fon_u, - c3_l mug_l, c3_d eve_d, u3_noun dud) -{ - u3_pier* pir_u = ptr_v; - - c3_assert( u3_psat_play == pir_u->sat_e ); - - { - u3_fact* tac_u = fon_u.ext_u; - u3_fact* nex_u; - c3_l las_l = 0; - - // dispose successful - // - while ( tac_u->eve_d <= eve_d ) { - nex_u = tac_u->nex_u; - las_l = tac_u->mug_l; - u3_fact_free(tac_u); - tac_u = nex_u; - } - - // XX optional - // - if ( las_l && (las_l != mug_l) ) { - u3l_log("pier: (%" PRIu64 "): play bail: mug mismatch %x %x\r\n", - (c3_d)(eve_d - 1ULL), - las_l, - mug_l); - // u3_pier_bail(pir_u); - } - - // XX enable to retry - // -#if 0 - { - u3l_log("pier: (%" PRIu64 "): play: retry\r\n", eve_d); - - fon_u.ext_u = tac_u; - - // we're enqueuing here directly onto the exit. - // like, _pier_play_plan() in reverse - // - if ( !pay_u->ext_u ) { - pay_u->ext_u = fon_u.ext_u; - pay_u->ent_u = fon_u.ent_u; - } - else { - fon_u.ent_u->nex_u = pay_u->ext_u; - pay_u->ext_u = fon_u.ext_u; - } - - _pier_play(pir_u->pay_u); - u3z(dud); - } -#else - { - u3l_log("pier: (%" PRIu64 "): play: bail\r\n", eve_d); - u3_pier_punt_goof("play", dud); - { - u3_noun wir, tag; - u3x_qual(tac_u->job, 0, &wir, &tag, 0); - u3_pier_punt_ovum("play", u3k(wir), u3k(tag)); - } - - u3_pier_bail(pir_u); - exit(1); - } -#endif - } -} - -/* _pier_play_init(): begin boot/replay up to [eve_d]. -*/ -static void -_pier_play_init(u3_pier* pir_u, c3_d eve_d) -{ - u3_lord* god_u = pir_u->god_u; - u3_disk* log_u = pir_u->log_u; - u3_play* pay_u; - - c3_assert( (u3_psat_init == pir_u->sat_e) - || (u3_psat_boot == pir_u->sat_e) ); - - c3_assert( eve_d > god_u->eve_d ); - c3_assert( eve_d <= log_u->dun_d ); - - pir_u->sat_e = u3_psat_play; - pir_u->pay_u = pay_u = c3_calloc(sizeof(*pay_u)); - pay_u->pir_u = pir_u; - pay_u->eve_d = eve_d; - pay_u->sen_d = god_u->eve_d; - - u3l_log("---------------- playback starting ----------------\r\n"); - if ( (1ULL + god_u->eve_d) == eve_d ) { - u3l_log("pier: replaying event %" PRIu64 "\r\n", eve_d); - } - else { - u3l_log("pier: replaying events %" PRIu64 "-%" PRIu64 "\r\n", - (c3_d)(1ULL + god_u->eve_d), - eve_d); - } - - u3_term_start_spinner(c3__play, c3n); - - _pier_play(pay_u); -} - -/* _pier_on_disk_read_done(): event log read success. -*/ -static void -_pier_on_disk_read_done(void* ptr_v, u3_info fon_u) -{ - u3_pier* pir_u = ptr_v; - - c3_assert( u3_psat_play == pir_u->sat_e ); - - _pier_play_plan(pir_u->pay_u, fon_u); - _pier_play(pir_u->pay_u); -} - -/* _pier_on_disk_read_bail(): event log read failure. -*/ -static void -_pier_on_disk_read_bail(void* ptr_v, c3_d eve_d) -{ - u3_pier* pir_u = ptr_v; - - c3_assert( u3_psat_play == pir_u->sat_e ); - - // XX s/b play_bail_cb - // - fprintf(stderr, "pier: disk read bail\r\n"); - u3_term_stop_spinner(); - u3_pier_bail(pir_u); -} - -/* _pier_on_disk_write_done(): event log write success. -*/ -static void -_pier_on_disk_write_done(void* ptr_v, c3_d eve_d) -{ - u3_pier* pir_u = ptr_v; - u3_disk* log_u = pir_u->log_u; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): db commit: complete\r\n", eve_d); -#endif - - if ( u3_psat_boot == pir_u->sat_e ) { - // lord already live - // - if ( c3y == pir_u->god_u->liv_o ) { - // XX print bootstrap commit complete - // XX s/b boot_complete_cb - // - _pier_play_init(pir_u, log_u->dun_d); - } - } - else { - c3_assert( (u3_psat_work == pir_u->sat_e) - || (u3_psat_done == pir_u->sat_e) ); - - _pier_work(pir_u->wok_u); - } -} - -/* _pier_on_disk_write_bail(): event log write failure. -*/ -static void -_pier_on_disk_write_bail(void* ptr_v, c3_d eve_d) -{ - u3_pier* pir_u = ptr_v; - - if ( u3_psat_boot == pir_u->sat_e ) { - // XX nice message - // - } - - // XX - // - fprintf(stderr, "pier: disk write bail\r\n"); - u3_pier_bail(pir_u); -} - -/* _pier_on_lord_slog(): debug printf from worker. -*/ -static void -_pier_on_lord_slog(void* ptr_v, c3_w pri_w, u3_noun tan) -{ - u3_pier* pir_u = ptr_v; - - if ( 0 != pir_u->sog_f ) { - pir_u->sog_f(pir_u->sop_p, pri_w, u3k(tan)); - } - - u3_pier_tank(0, pri_w, tan); -} - -/* _pier_on_lord_save(): worker (non-portable) snapshot complete. -*/ -static void -_pier_on_lord_save(void* ptr_v) -{ - u3_pier* pir_u = ptr_v; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): lord: save\r\n", pir_u->god_u->eve_d); -#endif - - // _pier_next(pir_u); -} - -/* _pier_on_lord_cram(): worker state-export complete (portable snapshot). -*/ -static void -_pier_on_lord_cram(void* ptr_v) -{ - u3_pier* pir_u = ptr_v; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): lord: cram\r\n", pir_u->god_u->eve_d); -#endif - - // XX temporary hack - // - if ( u3_psat_play == pir_u->sat_e ) { - u3l_log("pier: cram complete, shutting down\r\n"); - u3_pier_bail(pir_u); - exit(0); - } - - // if ( u3_psat_done == pir_u->sat_e ) { - // fprintf(stderr, "snap cb exit\r\n"); - // u3_lord_exit(pir_u->god_u); - // } - // else { - // _pier_next(pir_u); - // } -} - -static void -_pier_done(u3_pier* pir_u); - -/* _pier_on_lord_exit(): worker shutdown. -*/ -static void -_pier_on_lord_exit(void* ptr_v) -{ - u3_pier* pir_u = ptr_v; - - // the lord has already gone - // - pir_u->god_u = 0; - - if ( u3_psat_done != pir_u->sat_e ) { - u3l_log("pier: serf shutdown unexpected\r\n"); - u3_pier_bail(pir_u); - } - // if we made it all the way here, it's our jab to wrap up - // - else { - _pier_done(pir_u); - } -} - -/* _pier_on_lord_bail(): worker error. -*/ -static void -_pier_on_lord_bail(void* ptr_v) -{ - u3_pier* pir_u = ptr_v; - - // the lord has already gone - // - pir_u->god_u = 0; - - u3_pier_bail(pir_u); -} - -/* _pier_on_lord_live(): worker is ready. -*/ -static void -_pier_on_lord_live(void* ptr_v) -{ - u3_pier* pir_u = ptr_v; - u3_lord* god_u = pir_u->god_u; - u3_disk* log_u = pir_u->log_u; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): boot at mug %x\r\n", god_u->eve_d, god_u->mug_l); -#endif - - c3_assert( god_u->eve_d <= log_u->dun_d ); - - if ( u3_psat_boot == pir_u->sat_e ) { - // boot-sequence commit complete - // - if ( log_u->sen_d - && (log_u->sen_d == log_u->dun_d) ) { - // XX print bootstrap commit complete - // XX s/b boot_complete_cb - // - _pier_play_init(pir_u, log_u->dun_d); - } - } - else { - c3_assert( u3_psat_init == pir_u->sat_e ); - c3_assert( log_u->sen_d == log_u->dun_d ); - - if ( god_u->eve_d < log_u->dun_d ) { - c3_d eve_d; - - // XX revisit - // - if ( u3_Host.ops_u.til_c ) { - if ( 1 == sscanf(u3_Host.ops_u.til_c, "%" PRIu64 "", &eve_d) ) { - u3l_log("pier: replay till %" PRIu64 "\r\n", eve_d); - } - else { - u3l_log("pier: ignoring invalid replay barrier '%s'\r\n", - u3_Host.ops_u.til_c); - eve_d = log_u->dun_d; - } - } - else { - eve_d = log_u->dun_d; - } - - _pier_play_init(pir_u, eve_d); - } - else { - _pier_wyrd_init(pir_u); - } - } -} - -/* u3_pier_mass(): construct a $mass branch with noun/list. -*/ -u3_noun -u3_pier_mass(u3_atom cod, u3_noun lit) -{ - return u3nt(cod, c3n, lit); -} - -/* u3_pier_mase(): construct a $mass leaf. -*/ -u3_noun -u3_pier_mase(c3_c* cod_c, u3_noun dat) -{ - return u3nt(u3i_string(cod_c), c3y, dat); -} - -/* u3_pier_info(): pier status info as noun. -*/ -u3_noun -u3_pier_info(u3_pier* pir_u) -{ - u3_noun nat; - - switch (pir_u->sat_e) { - default: { - nat = u3_pier_mass(u3i_string("state-unknown"), u3_nul); - } break; - - case u3_psat_init: { - nat = u3_pier_mass(c3__init, u3_nul); - } break; - - case u3_psat_boot: { - nat = u3_pier_mass(c3__boot, u3_nul); - } break; - - case u3_psat_play: { - u3_play* pay_u = pir_u->pay_u; - - nat = u3_pier_mass(c3__play, - u3i_list( - u3_pier_mase("target", u3i_chub(pay_u->eve_d)), - u3_pier_mase("sent", u3i_chub(pay_u->sen_d)), - u3_pier_mase("read", u3i_chub(pay_u->req_d)), - u3_none)); - } break; - - case u3_psat_work: { - u3_work* wok_u = pir_u->wok_u; - - nat = u3_pier_mass(c3__work, - u3i_list( - u3_pier_mase("effects-released", u3i_chub(wok_u->fec_u.rel_d)), - u3_pier_mase("pending-any", __(wok_u->fec_u.ext_u)), - u3_pier_mase("pending-start", - ( wok_u->fec_u.ext_u - ? u3i_chub(wok_u->fec_u.ext_u->eve_d) - : 0 )), - u3_pier_mase("pending-final", - ( wok_u->fec_u.ent_u - ? u3i_chub(wok_u->fec_u.ent_u->eve_d) - : 0 )), - u3_pier_mase("wall-any", __(wok_u->wal_u)), - u3_pier_mase("wall-event", - ( wok_u->wal_u - ? u3i_chub(wok_u->wal_u->eve_d) - : 0)), - u3_pier_mass(c3__auto, u3_auto_info(wok_u->car_u)), - u3_none)); - } break; - - case u3_psat_done: { - nat = u3_pier_mass(c3__done, u3_nul); - } break; - } - - return u3_pier_mass( - c3__pier, - u3i_list( - nat, - u3_disk_info(pir_u->log_u), - u3_lord_info(pir_u->god_u), - u3_none)); -} - -/* u3_pier_slog(): print status info. -*/ -void -u3_pier_slog(u3_pier* pir_u) -{ - switch ( pir_u->sat_e ) { - default: { - u3l_log("pier: unknown state: %u\r\n", pir_u->sat_e); - } break; - - case u3_psat_init: { - u3l_log("pier: init\n"); - } break; - - case u3_psat_boot: { - u3l_log("pier: boot\n"); - } break; - - case u3_psat_play: { - u3l_log("pier: play\n"); - - { - u3_play* pay_u = pir_u->pay_u; - - u3l_log(" target: %" PRIu64 "\n", pay_u->eve_d); - u3l_log(" sent: %" PRIu64 "\n", pay_u->sen_d); - u3l_log(" read: %" PRIu64 "\n", pay_u->req_d); - } - } break; - - case u3_psat_work: { - u3l_log("pier: work\n"); - - { - u3_work* wok_u = pir_u->wok_u; - - u3l_log(" effects: released=%" PRIu64 "\n", wok_u->fec_u.rel_d); - - if ( wok_u->fec_u.ext_u ) { - if ( wok_u->fec_u.ext_u != wok_u->fec_u.ent_u ) { - u3l_log(" pending %" PRIu64 "-%" PRIu64 "\n", - wok_u->fec_u.ext_u->eve_d, - wok_u->fec_u.ent_u->eve_d); - - } - else { - u3l_log(" pending %" PRIu64 "\n", wok_u->fec_u.ext_u->eve_d); - } - } - - if ( wok_u->wal_u ) { - u3l_log(" wall: %" PRIu64 "\n", wok_u->wal_u->eve_d); - } - - if ( wok_u->car_u ) { - u3_auto_slog(wok_u->car_u); - } - } - } break; - - case u3_psat_done: { - u3l_log("pier: done\n"); - } break; - } - - if ( pir_u->log_u ) { - u3_disk_slog(pir_u->log_u); - } - - if ( pir_u->god_u ) { - u3_lord_slog(pir_u->god_u); - } -} - -/* _pier_init(): create a pier, loading existing. -*/ -static u3_pier* -_pier_init(c3_w wag_w, c3_c* pax_c) -{ - // create pier - // - u3_pier* pir_u = c3_calloc(sizeof(*pir_u)); - - pir_u->pax_c = pax_c; - pir_u->sat_e = u3_psat_init; - pir_u->liv_o = c3n; - - // XX remove - // - pir_u->per_s = u3_Host.ops_u.per_s; - pir_u->pes_s = u3_Host.ops_u.pes_s; - pir_u->por_s = u3_Host.ops_u.por_s; - pir_u->sav_u = c3_calloc(sizeof(u3_save)); - - // initialize persistence - // - { - // XX load/set secrets - // - u3_disk_cb cb_u = { - .ptr_v = pir_u, - .read_done_f = _pier_on_disk_read_done, - .read_bail_f = _pier_on_disk_read_bail, - .write_done_f = _pier_on_disk_write_done, - .write_bail_f = _pier_on_disk_write_bail - }; - - if ( !(pir_u->log_u = u3_disk_init(pax_c, cb_u)) ) { - c3_free(pir_u); - return 0; - } - } - - // initialize compute - // - { - // XX load/set secrets - // - c3_d tic_d[1]; // ticket (unstretched) - c3_d sec_d[1]; // generator (unstretched) - c3_d key_d[4]; // secret (stretched) - - key_d[0] = key_d[1] = key_d[2] = key_d[3] = 0; - - u3_lord_cb cb_u = { - .ptr_v = pir_u, - .live_f = _pier_on_lord_live, - .spin_f = _pier_on_lord_work_spin, - .spun_f = _pier_on_lord_work_spun, - .slog_f = _pier_on_lord_slog, - .play_done_f = _pier_on_lord_play_done, - .play_bail_f = _pier_on_lord_play_bail, - .work_done_f = _pier_on_lord_work_done, - .work_bail_f = _pier_on_lord_work_bail, - .save_f = _pier_on_lord_save, - .cram_f = _pier_on_lord_cram, - .bail_f = _pier_on_lord_bail, - .exit_f = _pier_on_lord_exit - }; - - if ( !(pir_u->god_u = u3_lord_init(pax_c, wag_w, key_d, cb_u)) ) - { - // u3_disk_exit(pir_u->log_u) - c3_free(pir_u); - return 0; - } - } - - return pir_u; -} - -/* u3_pier_stay(): restart an existing pier. -*/ -u3_pier* -u3_pier_stay(c3_w wag_w, u3_noun pax) -{ - u3_pier* pir_u; - - if ( !(pir_u = _pier_init(wag_w, u3r_string(pax))) ) { - fprintf(stderr, "pier: stay: init fail\r\n"); - u3_king_bail(); - return 0; - } - - if ( c3n == u3_disk_read_meta(pir_u->log_u, pir_u->who_d, - &pir_u->fak_o, &pir_u->lif_w) ) - { - fprintf(stderr, "pier: disk read meta fail\r\n"); - // XX dispose - // - u3_pier_bail(pir_u); - exit(1); - } - - if ( c3y == u3_Host.ops_u.veb ) { - FILE* fil_u = u3_term_io_hija(); - u3_lmdb_stat(pir_u->log_u->mdb_u, fil_u); - u3_term_io_loja(1); - } - - u3z(pax); - - return pir_u; -} - -/* _pier_pill_parse(): extract boot formulas and module/userspace ova from pill -*/ -static u3_boot -_pier_pill_parse(u3_noun pil) -{ - u3_boot bot_u; - u3_noun pil_p, pil_q; - - c3_assert( c3y == u3du(pil) ); - u3x_cell(pil, &pil_p, &pil_q); - - { - // XX use faster cue - // - u3_noun pro = u3m_soft(0, u3ke_cue, u3k(pil_p)); - u3_noun mot, tag, dat; - - if ( (c3n == u3r_trel(pro, &mot, &tag, &dat)) - || (u3_blip != mot) ) - { - u3m_p("mot", u3h(pro)); - fprintf(stderr, "boot: failed: unable to parse pill\r\n"); - u3_king_bail(); - exit(1); - } - - if ( c3y == u3r_sing_c("ivory", tag) ) { - fprintf(stderr, "boot: failed: unable to boot from ivory pill\r\n"); - u3_king_bail(); - exit(1); - } - else if ( c3__pill != tag ) { - if ( c3y == u3a_is_atom(tag) ) { - u3m_p("pill", tag); - } - fprintf(stderr, "boot: failed: unrecognized pill\r\n"); - u3_king_bail(); - exit(1); - } - - { - u3_noun typ; - c3_c* typ_c; - - if ( c3n == u3r_qual(dat, &typ, &bot_u.bot, &bot_u.mod, &bot_u.use) ) { - fprintf(stderr, "boot: failed: unable to extract pill\r\n"); - u3_king_bail(); - exit(1); - } - - if ( c3y == u3a_is_atom(typ) ) { - c3_c* typ_c = u3r_string(typ); - fprintf(stderr, "boot: parsing %%%s pill\r\n", typ_c); - c3_free(typ_c); - } - } - - u3k(bot_u.bot); u3k(bot_u.mod); u3k(bot_u.use); - u3z(pro); - } - - // optionally replace filesystem in userspace - // - if ( u3_nul != pil_q ) { - c3_w len_w = 0; - u3_noun ova = bot_u.use; - u3_noun new = u3_nul; - u3_noun ovo; - - while ( u3_nul != ova ) { - ovo = u3h(ova); - - u3_noun tag = u3h(u3t(ovo)); - if ( ( c3__into == tag ) || ( c3__park == tag ) ) { - c3_assert( 0 == len_w ); - len_w++; - ovo = u3t(pil_q); - } - - new = u3nc(u3k(ovo), new); - ova = u3t(ova); - } - - c3_assert( 1 == len_w ); - - u3z(bot_u.use); - bot_u.use = u3kb_flop(new); - } - - u3z(pil); - - return bot_u; -} - -/* _pier_boot_make(): construct boot sequence -*/ -static u3_boot -_pier_boot_make(u3_noun who, - u3_noun wyr, - u3_noun ven, - u3_noun pil, - u3_weak fed) -{ - u3_boot bot_u = _pier_pill_parse(pil); // transfer - - // prepend entropy and identity to the module sequence - // - { - u3_noun cad, wir = u3nt(u3_blip, c3__arvo, u3_nul); - c3_w eny_w[16]; - c3_rand(eny_w); - - cad = u3nt(c3__verb, u3_nul, ( c3y == u3_Host.ops_u.veb ) ? c3n : c3y); - bot_u.mod = u3nc(u3nc(u3k(wir), cad), bot_u.mod); - - cad = u3nc(c3__wack, u3i_words(16, eny_w)); - bot_u.mod = u3nc(u3nc(u3k(wir), cad), bot_u.mod); - - cad = u3nc(c3__whom, who); // transfer [who] - bot_u.mod = u3nc(u3nc(u3k(wir), cad), bot_u.mod); - - wir = u3nt(u3_blip, c3__arvo, u3_nul); - bot_u.mod = u3nc(u3nc(wir, wyr), bot_u.mod); // transfer [wir] and [wyr] - } - - // include additional key configuration events if we have multiple keys - // - if ( (u3_none != fed) && (c3y == u3du(u3h(fed))) ) { - u3_noun wir = u3nt(c3__j, c3__seed, u3_nul); - u3_noun tag = u3i_string("rekey"); - u3_noun kyz = u3t(u3t(fed)); - while ( u3_nul != kyz ) { - u3_noun cad = u3nc(u3k(tag), u3k(u3h(kyz))); - bot_u.use = u3nc(u3nc(u3k(wir), cad), bot_u.use); - kyz = u3t(kyz); - } - u3z(tag); u3z(wir); - } - - // prepend legacy boot event to the userspace sequence - // - { - // XX do something about this wire - // XX route directly to %jael? - // - c3_assert( c3y == u3a_is_cell(ven) ); - - u3_noun wir = u3nq(c3__d, c3__term, '1', u3_nul); - u3_noun cad = u3nt(c3__boot, u3_Host.ops_u.lit, ven); // transfer - - bot_u.use = u3nc(u3nc(wir, cad), bot_u.use); - } - - u3z(fed); - return bot_u; -} - -/* _pier_boot_plan(): construct and commit boot sequence -*/ -static c3_o -_pier_boot_plan(u3_pier* pir_u, - u3_noun who, - u3_noun ven, - u3_noun pil, - u3_weak fed) -{ - u3_boot bot_u; - { - pir_u->sat_e = u3_psat_boot; - pir_u->fak_o = ( c3__fake == u3h(ven) ) ? c3y : c3n; - u3r_chubs(0, 2, pir_u->who_d, who); - - bot_u = _pier_boot_make(who, _pier_wyrd_card(pir_u), ven, pil, fed); - pir_u->lif_w = u3qb_lent(bot_u.bot); - } - - if ( c3n == u3_disk_save_meta(pir_u->log_u, pir_u->who_d, - pir_u->fak_o, pir_u->lif_w) ) - { - // XX dispose bot_u - // - return c3n; - } - - // insert boot sequence directly - // - // Note that these are not ovum or (pair @da ovum) events, - // but raw nock formulas to be directly evaluated as the - // subject of the lifecycle formula [%2 [%0 3] %0 2]. - // All subsequent events will be (pair date ovum). - // - { - u3_noun fol = bot_u.bot; - - while ( u3_nul != fol ) { - u3_disk_boot_plan(pir_u->log_u, u3k(u3h(fol))); - fol = u3t(fol); - } - } - - // insert module and userspace events - // - { - u3_noun ova = bot_u.mod; - u3_noun bit = u3qc_bex(48); // 1/2^16 seconds - u3_noun now; - - { - struct timeval tim_tv; - gettimeofday(&tim_tv, 0); - now = u3_time_in_tv(&tim_tv); - } - - - while ( u3_nul != ova ) { - u3_disk_boot_plan(pir_u->log_u, u3nc(u3k(now), u3k(u3h(ova)))); - now = u3ka_add(now, u3k(bit)); - ova = u3t(ova); - } - - ova = bot_u.use; - - while ( u3_nul != ova ) { - u3_disk_boot_plan(pir_u->log_u, u3nc(u3k(now), u3k(u3h(ova)))); - now = u3ka_add(now, u3k(bit)); - ova = u3t(ova); - } - - u3z(bit); u3z(now); - } - - u3_disk_boot_save(pir_u->log_u); - - u3z(bot_u.bot); - u3z(bot_u.mod); - u3z(bot_u.use); - - return c3y; -} - -/* u3_pier_boot(): start a new pier. -*/ -u3_pier* -u3_pier_boot(c3_w wag_w, // config flags - u3_noun who, // identity - u3_noun ven, // boot event - u3_noun pil, // type-of/path-to pill - u3_noun pax, // path to pier - u3_weak fed) // extra private keys -{ - u3_pier* pir_u; - - if ( !(pir_u = _pier_init(wag_w, u3r_string(pax))) ) { - fprintf(stderr, "pier: boot: init fail\r\n"); - u3_king_bail(); - return 0; - } - - // XX must be called from on_lord_live - // - if ( c3n == _pier_boot_plan(pir_u, who, ven, pil, fed) ) { - fprintf(stderr, "pier: boot plan fail\r\n"); - // XX dispose - // - u3_pier_bail(pir_u); - exit(1); - } - - u3z(pax); - - return pir_u; -} - -/* _pier_save_cb(): save snapshot upon serf/disk synchronization. -*/ -static void -_pier_save_cb(void* ptr_v, c3_d eve_d) -{ - u3_pier* pir_u = ptr_v; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): save: send at %" PRIu64 "\r\n", pir_u->god_u->eve_d, eve_d); -#endif - - u3_lord_save(pir_u->god_u); -} - -/* u3_pier_save(): save a non-portable snapshot -*/ -c3_o -u3_pier_save(u3_pier* pir_u) -{ -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): save: plan\r\n", pir_u->god_u->eve_d); -#endif - if ( u3_psat_play == pir_u->sat_e ) { - u3_lord_save(pir_u->god_u); - return c3y; - } - - if ( u3_psat_work == pir_u->sat_e ) { - _pier_wall_plan(pir_u, 0, pir_u, _pier_save_cb); - return c3y; - } - - return c3n; -} - -/* _pier_cram_cb(): save snapshot upon serf/disk synchronization. -*/ -static void -_pier_cram_cb(void* ptr_v, c3_d eve_d) -{ - u3_pier* pir_u = ptr_v; - -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): cram: send at %" PRIu64 "\r\n", pir_u->god_u->eve_d, eve_d); -#endif - - u3_lord_cram(pir_u->god_u); -} - -/* u3_pier_cram(): save a portable snapshot. -*/ -c3_o -u3_pier_cram(u3_pier* pir_u) -{ -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): cram: plan\r\n", pir_u->god_u->eve_d); -#endif - - if ( u3_psat_play == pir_u->sat_e ) { - u3_lord_cram(pir_u->god_u); - return c3y; - } - - if ( u3_psat_work == pir_u->sat_e ) { - _pier_wall_plan(pir_u, 0, pir_u, _pier_cram_cb); - return c3y; - } - - return c3n; -} - -/* u3_pier_meld(): globally deduplicate persistent state. -*/ -void -u3_pier_meld(u3_pier* pir_u) -{ -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): meld: plan\r\n", pir_u->god_u->eve_d); -#endif - - u3_lord_meld(pir_u->god_u); -} - -/* u3_pier_pack(): defragment persistent state. -*/ -void -u3_pier_pack(u3_pier* pir_u) -{ -#ifdef VERBOSE_PIER - fprintf(stderr, "pier: (%" PRIu64 "): meld: plan\r\n", pir_u->god_u->eve_d); -#endif - - u3_lord_pack(pir_u->god_u); -} - -/* _pier_work_close_cb(): dispose u3_work after closing handles. -*/ -static void -_pier_work_close_cb(uv_handle_t* idl_u) -{ - u3_work* wok_u = idl_u->data; - c3_free(wok_u); -} - -/* _pier_work_close(): close drivers/handles in the u3_psat_work state. -*/ -static void -_pier_work_close(u3_work* wok_u) -{ - u3_auto_exit(wok_u->car_u); - - // free pending effects - // - { - u3_gift* gif_u = wok_u->fec_u.ext_u; - u3_gift* nex_u; - - while ( gif_u ) { - nex_u = gif_u->nex_u; - u3_gift_free(gif_u); - gif_u = nex_u; - } - } - - uv_close((uv_handle_t*)&wok_u->pep_u, _pier_work_close_cb); - uv_close((uv_handle_t*)&wok_u->cek_u, 0); - uv_close((uv_handle_t*)&wok_u->idl_u, 0); - wok_u->pep_u.data = wok_u; -} - -/* _pier_done(): dispose pier. -*/ -static void -_pier_free(u3_pier* pir_u) -{ - c3_free(pir_u->pax_c); - - // XX remove - // - c3_free(pir_u->sav_u); - - c3_free(pir_u); -} - -/* _pier_done(): graceful shutdown complete, notify king. -*/ -static void -_pier_done(u3_pier* pir_u) -{ - // XX unlink properly - // - u3K.pir_u = 0; - _pier_free(pir_u); - u3_king_done(); -} - -/* _pier_exit(): synchronous shutdown. -*/ -static void -_pier_exit(u3_pier* pir_u) -{ - c3_assert( u3_psat_done == pir_u->sat_e ); - - if ( pir_u->log_u ) { - u3_disk_exit(pir_u->log_u); - pir_u->log_u = 0; - } - - if ( pir_u->god_u ) { - u3_lord_exit(pir_u->god_u); - pir_u->god_u = 0; - } - else { - // otherwise called in _pier_on_lord_exit() - // - _pier_done(pir_u); - } -} - -/* _pier_work_exit(): commence graceful shutdown. -*/ -static void -_pier_work_exit_cb(void* ptr_v, c3_d eve_d) -{ - u3_pier* pir_u = ptr_v; - - _pier_work_close(pir_u->wok_u); - pir_u->wok_u = 0; - - _pier_exit(pir_u); -} - -/* _pier_work_exit(): setup graceful shutdown callbacks. -*/ -static void -_pier_work_exit(u3_pier* pir_u) -{ - _pier_wall_plan(pir_u, 0, pir_u, _pier_save_cb); - _pier_wall_plan(pir_u, 0, pir_u, _pier_work_exit_cb); - - // XX moveme, XX bails if not started - // - { - c3_l cod_l = u3a_lush(c3__save); - u3_save_io_exit(pir_u); - u3a_lop(cod_l); - } - - pir_u->sat_e = u3_psat_done; -} - -/* u3_pier_exit(): graceful shutdown. -*/ -void -u3_pier_exit(u3_pier* pir_u) -{ - switch ( pir_u->sat_e ) { - default: { - fprintf(stderr, "pier: unknown exit: %u\r\n", pir_u->sat_e); - c3_assert(0); - } - - case u3_psat_done: return; - - case u3_psat_work: return _pier_work_exit(pir_u); - - case u3_psat_init: break; - - case u3_psat_boot: { - // XX properly dispose boot - // XX also on actual boot - // - c3_free(pir_u->bot_u); - pir_u->bot_u = 0; - } break; - - case u3_psat_play: { - // XX dispose play q - // - c3_free(pir_u->pay_u); - pir_u->pay_u = 0; - } break; - } - - pir_u->sat_e = u3_psat_done; - _pier_exit(pir_u); -} - -/* u3_pier_bail(): immediately shutdown due to error. -*/ -void -u3_pier_bail(u3_pier* pir_u) -{ - // halt serf - // - if ( pir_u->god_u ) { - u3_lord_halt(pir_u->god_u); - pir_u->god_u = 0; - } - - // exig i/o drivers - // - if ( (u3_psat_work == pir_u->sat_e) - && pir_u->wok_u ) - { - _pier_work_close(pir_u->wok_u); - pir_u->wok_u = 0; - } - - // close db - // - if ( pir_u->log_u ) { - u3_disk_exit(pir_u->log_u); - pir_u->log_u = 0; - } - - pir_u->sat_e = u3_psat_done; - - _pier_done(pir_u); -} - -/* c3_rand(): fill a 512-bit (16-word) buffer. -*/ -void -c3_rand(c3_w* rad_w) -{ - if ( 0 != ent_getentropy(rad_w, 64) ) { - fprintf(stderr, "c3_rand getentropy: %s\n", strerror(errno)); - // XX review - // - u3_king_bail(); - } -} - -/* _pier_dump_tape(): dump a tape, old style. Don't do this. -*/ -static void -_pier_dump_tape(FILE* fil_u, u3_noun tep) -{ - u3_noun tap = tep; - - while ( c3y == u3du(tap) ) { - c3_c car_c; - - // XX this utf-8 caution is unwarranted - // - // we already write() utf8 directly to streams in term.c - // - // if ( u3h(tap) >= 127 ) { - // car_c = '?'; - // } else - car_c = u3h(tap); - - putc(car_c, fil_u); - tap = u3t(tap); - } - - u3z(tep); -} - -/* _pier_dump_wall(): dump a wall, old style. Don't do this. -*/ -static void -_pier_dump_wall(FILE* fil_u, u3_noun wol) -{ - u3_noun wal = wol; - - while ( u3_nul != wal ) { - _pier_dump_tape(fil_u, u3k(u3h(wal))); - - putc(13, fil_u); - putc(10, fil_u); - - wal = u3t(wal); - } - - u3z(wol); -} - -/* u3_pier_tank(): dump single tank. -*/ -void -u3_pier_tank(c3_l tab_l, c3_w pri_w, u3_noun tac) -{ - u3_noun blu = u3_term_get_blew(0); - c3_l col_l = u3h(blu); - FILE* fil_u = u3_term_io_hija(); - - // XX temporary, for urb.py test runner - // - if ( c3y == u3_Host.ops_u.dem ) { - fil_u = stderr; - } - - if ( c3n == u3_Host.ops_u.tem ) { - switch ( pri_w ) { - case 3: fprintf(fil_u, "\033[31m>>> "); break; - case 2: fprintf(fil_u, "\033[33m>> "); break; - case 1: fprintf(fil_u, "\033[32m> "); break; - } - } - else { - switch ( pri_w ) { - case 3: fprintf(fil_u, ">>> "); break; - case 2: fprintf(fil_u, ">> "); break; - case 1: fprintf(fil_u, "> "); break; - } - } - - // if we have no arvo kernel and can't evaluate nock - // only print %leaf tanks - // - if ( 0 == u3A->roc ) { - if ( c3__leaf == u3h(tac) ) { - _pier_dump_tape(fil_u, u3k(u3t(tac))); - putc(13, fil_u); - putc(10, fil_u); - } - } - // We are calling nock here, but hopefully need no protection. - // - else { - u3_noun wol = u3dc("wash", u3nc(tab_l, col_l), u3k(tac)); - - _pier_dump_wall(fil_u, wol); - } - - if ( c3n == u3_Host.ops_u.tem ) { - fprintf(fil_u, "\033[0m"); - } - - fflush(fil_u); - - u3_term_io_loja(0); - u3z(blu); - u3z(tac); -} - -/* u3_pier_punt(): dump tank list. -*/ -void -u3_pier_punt(c3_l tab_l, u3_noun tac) -{ - u3_noun cat = tac; - - while ( c3y == u3r_du(cat) ) { - u3_pier_tank(tab_l, 0, u3k(u3h(cat))); - cat = u3t(cat); - } - - u3z(tac); -} - -/* u3_pier_punt_goof(): dump a [mote tang] crash report. -*/ -void -u3_pier_punt_goof(const c3_c* cap_c, u3_noun dud) -{ - u3_noun bud = dud; - u3_noun mot, tan; - - u3x_cell(dud, &mot, &tan); - - u3l_log("\n"); - u3_pier_punt(0, u3qb_flop(tan)); - - { - c3_c* mot_c = u3r_string(mot); - u3l_log("%s: bail: %%%s\r\n", cap_c, mot_c); - c3_free(mot_c); - } - - u3z(bud); -} - -/* u3_pier_punt_ovum(): print ovum details. -*/ -void -u3_pier_punt_ovum(const c3_c* cap_c, u3_noun wir, u3_noun tag) -{ - c3_c* tag_c = u3r_string(tag); - u3_noun riw = u3do("spat", wir); - c3_c* wir_c = u3r_string(riw); - - u3l_log("%s: %%%s event on %s failed\r\n\n", cap_c, tag_c, wir_c); - - c3_free(tag_c); - c3_free(wir_c); - u3z(riw); -} - -/* u3_pier_sway(): print trace. -*/ -void -u3_pier_sway(c3_l tab_l, u3_noun tax) -{ - u3_noun mok = u3dc("mook", 2, tax); - - u3_pier_punt(tab_l, u3k(u3t(mok))); - u3z(mok); -} - -/* u3_pier_mark(): mark all Loom allocations in all u3_pier structs. -*/ -c3_w -u3_pier_mark(FILE* fil_u) -{ - return 0; -} diff --git a/pkg/urbit/vere/save.c b/pkg/urbit/vere/save.c deleted file mode 100644 index b2fc5b390..000000000 --- a/pkg/urbit/vere/save.c +++ /dev/null @@ -1,63 +0,0 @@ -/* vere/save.c -** -*/ -#include "all.h" -#include "vere/vere.h" - -/* _save_time_cb(): timer callback. -*/ -static void -_save_time_cb(uv_timer_t* tim_u) -{ - u3_pier *pir_u = tim_u->data; - u3_pier_save(pir_u); -} - -#if 0 -/* u3_save_ef_chld(): report save termination. -*/ -void -u3_save_ef_chld(u3_pier *pir_u) -{ - u3_save* sav_u = pir_u->sav_u; - c3_i loc_i; - c3_w pid_w; - - /* modified for cases with no pid_w - */ - u3l_log("checkpoint: complete %d\n", sav_u->pid_w); - pid_w = wait(&loc_i); - if (0 != sav_u->pid_w) { - c3_assert(pid_w == sav_u->pid_w); - } - else { - c3_assert(pid_w > 0); - } - sav_u->pid_w = 0; -} -#endif - -/* u3_save_io_init(): initialize autosave. -*/ -void -u3_save_io_init(u3_pier *pir_u) -{ - u3_save* sav_u = pir_u->sav_u; - - sav_u->req_d = 0; - sav_u->dun_d = 0; - sav_u->pid_w = 0; - - sav_u->tim_u.data = pir_u; - uv_timer_init(u3L, &sav_u->tim_u); - uv_timer_start(&sav_u->tim_u, _save_time_cb, 120000, 120000); -} - -/* u3_save_io_exit(): terminate save I/O. -*/ -void -u3_save_io_exit(u3_pier *pir_u) -{ - u3_save* sav_u = pir_u->sav_u; - uv_close((uv_handle_t*)&sav_u->tim_u, 0); -} diff --git a/pkg/urbit/vere/time.c b/pkg/urbit/vere/time.c deleted file mode 100644 index 6e41c1e56..000000000 --- a/pkg/urbit/vere/time.c +++ /dev/null @@ -1,170 +0,0 @@ -/* vere/time.c -** -*/ -#include "all.h" -#include "vere/vere.h" - -/* u3_time_sec_in(): urbit seconds from unix time. -** -** Adjust for future leap secs! -*/ -c3_d -u3_time_sec_in(c3_w unx_w) -{ - return 0x8000000cce9e0d80ULL + (c3_d)unx_w; -} - -/* u3_time_sec_out(): unix time from urbit seconds. -** -** Adjust for future leap secs! -*/ -c3_w -u3_time_sec_out(c3_d urs_d) -{ - c3_d adj_d = (urs_d - 0x8000000cce9e0d80ULL); - - if ( adj_d > 0xffffffffULL ) { - fprintf(stderr, "Agh! It's 2106! And no one's fixed this shite!\n"); - exit(1); - } - return (c3_w)adj_d; -} - -/* u3_time_fsc_in(): urbit fracto-seconds from unix microseconds. -*/ -c3_d -u3_time_fsc_in(c3_w usc_w) -{ - c3_d usc_d = usc_w; - - return ((usc_d * 65536ULL) / 1000000ULL) << 48ULL; -} - -/* u3_time_fsc_out: unix microseconds from urbit fracto-seconds. -*/ -c3_w -u3_time_fsc_out(c3_d ufc_d) -{ - return (c3_w) (((ufc_d >> 48ULL) * 1000000ULL) / 65536ULL); -} - -/* u3_time_msc_out: unix microseconds from urbit fracto-seconds. -*/ -c3_w -u3_time_msc_out(c3_d ufc_d) -{ - return (c3_w) (((ufc_d >> 48ULL) * 1000ULL) / 65536ULL); -} - -/* u3_time_in_tv(): urbit time from struct timeval. -*/ -u3_atom -u3_time_in_tv(struct timeval* tim_tv) -{ - c3_w unx_w = tim_tv->tv_sec; - c3_w usc_w = tim_tv->tv_usec; - c3_d cub_d[2]; - - cub_d[0] = u3_time_fsc_in(usc_w); - cub_d[1] = u3_time_sec_in(unx_w); - - return u3i_chubs(2, cub_d); -} - -/* u3_time_out_tv(): struct timeval from urbit time. -*/ -void -u3_time_out_tv(struct timeval* tim_tv, u3_noun now) -{ - c3_d ufc_d = u3r_chub(0, now); - c3_d urs_d = u3r_chub(1, now); - - tim_tv->tv_sec = u3_time_sec_out(urs_d); - tim_tv->tv_usec = u3_time_fsc_out(ufc_d); - - u3z(now); -} - -/* u3_time_in_ts(): urbit time from struct timespec. -*/ -u3_atom -u3_time_in_ts(struct timespec* tim_ts) -{ - struct timeval tim_tv; - - tim_tv.tv_sec = tim_ts->tv_sec; - tim_tv.tv_usec = (tim_ts->tv_nsec / 1000); - - return u3_time_in_tv(&tim_tv); -} - -#if defined(U3_OS_linux) || defined(U3_OS_mingw) -/* u3_time_t_in_ts(): urbit time from time_t. -*/ -u3_atom -u3_time_t_in_ts(time_t tim) -{ - struct timeval tim_tv; - - tim_tv.tv_sec = tim; - tim_tv.tv_usec = 0; - - return u3_time_in_tv(&tim_tv); -} -#endif // defined(U3_OS_linux) || defined(U3_OS_mingw) - -/* u3_time_out_ts(): struct timespec from urbit time. -*/ -void -u3_time_out_ts(struct timespec* tim_ts, u3_noun now) -{ - struct timeval tim_tv; - - u3_time_out_tv(&tim_tv, now); - - tim_ts->tv_sec = tim_tv.tv_sec; - tim_ts->tv_nsec = (tim_tv.tv_usec * 1000); -} - -/* u3_time_gap_ms(): (wen - now) in ms. -*/ -c3_d -u3_time_gap_ms(u3_noun now, u3_noun wen) -{ - if ( c3n == u3ka_gth(u3k(wen), u3k(now)) ) { - u3z(wen); u3z(now); - return 0ULL; - } - else { - u3_noun dif = u3ka_sub(wen, now); - c3_d fsc_d = u3r_chub(0, dif); - c3_d sec_d = u3r_chub(1, dif); - - u3z(dif); - return (sec_d * 1000ULL) + u3_time_msc_out(fsc_d); - } -} - -/* u3_time_gap_double(): (wen - now) in libev resolution. -*/ -double -u3_time_gap_double(u3_noun now, u3_noun wen) -{ - mpz_t now_mp, wen_mp, dif_mp; - double sec_g = (((double)(1ULL << 32ULL)) * ((double)(1ULL << 32ULL))); - double gap_g, dif_g; - - u3r_mp(now_mp, now); - u3r_mp(wen_mp, wen); - mpz_init(dif_mp); - mpz_sub(dif_mp, wen_mp, now_mp); - - u3z(now); - u3z(wen); - - dif_g = mpz_get_d(dif_mp) / sec_g; - gap_g = (dif_g > 0.0) ? dif_g : 0.0; - mpz_clear(dif_mp); mpz_clear(wen_mp); mpz_clear(now_mp); - - return gap_g; -} diff --git a/pkg/urbit/vere/ward.c b/pkg/urbit/vere/ward.c deleted file mode 100644 index f0c426020..000000000 --- a/pkg/urbit/vere/ward.c +++ /dev/null @@ -1,241 +0,0 @@ -/* vere/ward.c -*/ -#include "all.h" -#include "vere/vere.h" - -// ward: lifecycle management for common structures -// -// should contain anything allocated in multiple modules, -// or allocated in one and freed in another -// - -/* u3_dent_init(): initialize file record. -*/ -u3_dent* -u3_dent_init(const c3_c* nam_c) -{ - u3_dent *det_u = c3_malloc(sizeof(*det_u)); - det_u->nex_u = 0; - det_u->nam_c = c3_malloc(1 + strlen(nam_c)); - strcpy(det_u->nam_c, nam_c); - - return det_u; -} - -/* u3_dent_free(): dispose file record. -*/ -void -u3_dent_free(u3_dent *det_u) -{ - c3_free(det_u->nam_c); - c3_free(det_u); -} - -/* u3_dire_init(): initialize directory record. -*/ -u3_dire* -u3_dire_init(const c3_c* pax_c) -{ - u3_dire *dir_u = c3_malloc(sizeof *dir_u); - dir_u->all_u = 0; - dir_u->pax_c = c3_malloc(1 + strlen(pax_c)); - strcpy(dir_u->pax_c, pax_c); - - return dir_u; -} - -/* u3_dire_free(): dispose directory record. -*/ -void -u3_dire_free(u3_dire *dir_u) -{ - { - u3_dent *det_u = dir_u->all_u; - u3_dent *nex_u; - - while ( det_u ) { - nex_u = det_u->nex_u; - u3_dent_free(det_u); - det_u = nex_u; - } - } - - c3_free(dir_u->pax_c); - c3_free(dir_u); -} - -/* u3_fact_init(): initialize completed event. -*/ -u3_fact* -u3_fact_init(c3_d eve_d, c3_l mug_l, u3_noun job) -{ - u3_fact *tac_u = c3_malloc(sizeof(*tac_u)); - tac_u->eve_d = eve_d; - tac_u->mug_l = mug_l; - tac_u->nex_u = 0; - tac_u->job = job; - - return tac_u; -} - -/* u3_fact_free(): dispose completed event. -*/ -void -u3_fact_free(u3_fact *tac_u) -{ - u3z(tac_u->job); - c3_free(tac_u); -} - -/* u3_gift_init(): initialize effect list. -*/ -u3_gift* -u3_gift_init(c3_d eve_d, u3_noun act) -{ - u3_gift *gif_u = c3_malloc(sizeof(*gif_u)); - gif_u->eve_d = eve_d; - gif_u->nex_u = 0; - gif_u->act = act; - - return gif_u; -} - -/* u3_gift_free(): dispose effect list. -*/ -void -u3_gift_free(u3_gift *gif_u) -{ - u3z(gif_u->act); - c3_free(gif_u); -} - -/* u3_ovum_init: initialize an unlinked potential event -*/ -u3_ovum* -u3_ovum_init(c3_w mil_w, - u3_noun tar, - u3_noun wir, - u3_noun cad) -{ - u3_ovum* egg_u = c3_malloc(sizeof(*egg_u)); - egg_u->car_u = 0; - egg_u->try_w = 0; - egg_u->ptr_v = 0; - egg_u->mil_w = mil_w; - egg_u->tar = tar; - egg_u->wir = wir; - egg_u->cad = cad; - - egg_u->pre_u = egg_u->nex_u = 0; - - egg_u->cb_u.news_f = 0; - egg_u->cb_u.bail_f = 0; - - // spinner defaults - // - egg_u->pin_u.lab = u3k(u3h(wir)); - egg_u->pin_u.del_o = c3y; - - return egg_u; -} - -/* u3_ovum_free: dispose an unlinked potential event -*/ -void -u3_ovum_free(u3_ovum *egg_u) -{ - u3z(egg_u->pin_u.lab); - u3z(egg_u->tar); - u3z(egg_u->wir); - u3z(egg_u->cad); - - c3_free(egg_u); -} - -/* u3_pico_init(): initialize a scry request struct -*/ -u3_pico* -u3_pico_init() -{ - u3_pico* pic_u = c3_calloc(sizeof(*pic_u)); - return pic_u; -} - -/* u3_pico_free(): dispose a scry request struct -*/ -void -u3_pico_free(u3_pico* pic_u) -{ - u3z(pic_u->gan); - - switch ( pic_u->typ_e ) { - default: c3_assert(0); - - case u3_pico_full: { - u3z(pic_u->ful); - } break; - - case u3_pico_once: { - u3z(pic_u->las_u.des); - u3z(pic_u->las_u.pax); - } break; - } - - c3_free(pic_u); -} - -/* u3_mcut_char(): measure/cut character. -*/ -c3_w -u3_mcut_char(c3_c* buf_c, c3_w len_w, c3_c chr_c) -{ - if ( buf_c ) { - buf_c[len_w] = chr_c; - } - return len_w + 1; -} - -/* u3_mcut_cord(): measure/cut cord. -*/ -c3_w -u3_mcut_cord(c3_c* buf_c, c3_w len_w, u3_noun san) -{ - c3_w ten_w = u3r_met(3, san); - - if ( buf_c ) { - u3r_bytes(0, ten_w, (c3_y *)(buf_c + len_w), san); - } - u3z(san); - return (len_w + ten_w); -} - -/* u3_mcut_path(): measure/cut cord list. -*/ -c3_w -u3_mcut_path(c3_c* buf_c, c3_w len_w, c3_c sep_c, u3_noun pax) -{ - u3_noun axp = pax; - - while ( u3_nul != axp ) { - u3_noun h_axp = u3h(axp); - - len_w = u3_mcut_cord(buf_c, len_w, u3k(h_axp)); - axp = u3t(axp); - - if ( u3_nul != axp ) { - len_w = u3_mcut_char(buf_c, len_w, sep_c); - } - } - u3z(pax); - return len_w; -} - -/* u3_mcut_host(): measure/cut host. -*/ -c3_w -u3_mcut_host(c3_c* buf_c, c3_w len_w, u3_noun hot) -{ - len_w = u3_mcut_path(buf_c, len_w, '.', u3kb_flop(u3k(hot))); - u3z(hot); - return len_w; -} diff --git a/pkg/urbit/version b/pkg/urbit/version deleted file mode 100644 index 326a9ce21..000000000 --- a/pkg/urbit/version +++ /dev/null @@ -1 +0,0 @@ -1.9-rc3 \ No newline at end of file diff --git a/pkg/urbit/worker/serf.c b/pkg/urbit/worker/serf.c deleted file mode 100644 index 982cb8ec9..000000000 --- a/pkg/urbit/worker/serf.c +++ /dev/null @@ -1,1125 +0,0 @@ -/* worker/serf.c -*/ -#include "all.h" -#include -#include - -/* -|% -:: +writ: from king to serf -:: -:: next steps: -:: - %peek persistent dates (in arvo or serf)? -:: - |mass should be a query of the serf directly -:: - add duct or vane stack for spinner -:: -+$ writ - $% $: %live - $% [%cram eve=@] - [%exit cod=@] - [%save eve=@] - [%meld ~] - [%pack ~] - == == - [%peek mil=@ sam=*] :: gang (each path $%([%once @tas @tas path] [beam @tas beam])) - [%play eve=@ lit=(list ?((pair @da ovum) *))] - [%work mil=@ job=(pair @da ovum)] - == -:: +plea: from serf to king -:: -+$ plea - $% [%live ~] - [%ripe [pro=%1 hon=@ nok=@] eve=@ mug=@] - [%slog pri=@ tank] - [%flog cord] - $: %peek - $% [%done dat=(unit (cask))] - [%bail dud=goof] - == == - $: %play - $% [%done mug=@] - [%bail eve=@ mug=@ dud=goof] - == == - $: %work - $% [%done eve=@ mug=@ fec=(list ovum)] - [%swap eve=@ mug=@ job=(pair @da ovum) fec=(list ovum)] - [%bail lud=(list goof)] - == == - == --- -*/ - -/* _serf_space(): print n spaces. -*/ -static void -_serf_space(FILE* fil_u, c3_w n) -{ - for (; n > 0; n--) - (fprintf(fil_u," ")); -} - -/* _serf_print_memory(): print memory amount. -** -** Helper for _serf_prof(), just an un-captioned u3a_print_memory(). -*/ -static void -_serf_print_memory(FILE* fil_u, c3_w wor_w) -{ - c3_w byt_w = (wor_w * 4); - c3_w gib_w = (byt_w / 1000000000); - c3_w mib_w = (byt_w % 1000000000) / 1000000; - c3_w kib_w = (byt_w % 1000000) / 1000; - c3_w bib_w = (byt_w % 1000); - - if ( gib_w ) { - (fprintf(fil_u, "GB/%d.%03d.%03d.%03d\r\n", - gib_w, mib_w, kib_w, bib_w)); - } - else if ( mib_w ) { - (fprintf(fil_u, "MB/%d.%03d.%03d\r\n", mib_w, kib_w, bib_w)); - } - else if ( kib_w ) { - (fprintf(fil_u, "KB/%d.%03d\r\n", kib_w, bib_w)); - } - else { - (fprintf(fil_u, "B/%d\r\n", bib_w)); - } -} - -/* _serf_prof(): print memory profile. RETAIN. -*/ -c3_w -_serf_prof(FILE* fil_u, c3_w den, u3_noun mas) -{ - c3_w tot_w = 0; - u3_noun h_mas, t_mas; - - if ( c3n == u3r_cell(mas, &h_mas, &t_mas) ) { - _serf_space(fil_u, den); - fprintf(fil_u, "mistyped mass\r\n"); - return tot_w; - } - else if ( _(u3du(h_mas)) ) { - _serf_space(fil_u, den); - fprintf(fil_u, "mistyped mass head\r\n"); - { - c3_c* lab_c = u3m_pretty(h_mas); - fprintf(fil_u, "h_mas: %s", lab_c); - c3_free(lab_c); - } - return tot_w; - } - else { - _serf_space(fil_u, den); - - { - c3_c* lab_c = u3m_pretty(h_mas); - fprintf(fil_u, "%s: ", lab_c); - c3_free(lab_c); - } - - u3_noun it_mas, tt_mas; - - if ( c3n == u3r_cell(t_mas, &it_mas, &tt_mas) ) { - fprintf(fil_u, "mistyped mass tail\r\n"); - return tot_w; - } - else if ( c3y == it_mas ) { - tot_w += u3a_mark_noun(tt_mas); - _serf_print_memory(fil_u, tot_w); - -#if 1 - /* The basic issue here is that tt_mas is included in .sac - * (the whole profile), so they can't both be roots in the - * normal sense. When we mark .sac later on, we want tt_mas - * to appear unmarked, but its children should be already - * marked. - */ - if ( _(u3a_is_dog(tt_mas)) ) { - u3a_box* box_u = u3a_botox(u3a_to_ptr(tt_mas)); -#ifdef U3_MEMORY_DEBUG - if ( 1 == box_u->eus_w ) { - box_u->eus_w = 0xffffffff; - } - else { - box_u->eus_w -= 1; - } -#else - if ( -1 == (c3_w)box_u->use_w ) { - box_u->use_w = 0x80000000; - } - else { - box_u->use_w += 1; - } -#endif - } -#endif - - return tot_w; - } - else if ( c3n == it_mas ) { - fprintf(fil_u, "\r\n"); - - while ( _(u3du(tt_mas)) ) { - tot_w += _serf_prof(fil_u, den+2, u3h(tt_mas)); - tt_mas = u3t(tt_mas); - } - - _serf_space(fil_u, den); - fprintf(fil_u, "--"); - _serf_print_memory(fil_u, tot_w); - - return tot_w; - - } - else { - _serf_space(fil_u, den); - fprintf(fil_u, "mistyped (strange) mass tail\r\n"); - return tot_w; - } - } -} - -/* _serf_grab(): garbage collect, checking for profiling. RETAIN. -*/ -static void -_serf_grab(u3_noun sac) -{ - if ( u3_nul == sac) { - if ( u3C.wag_w & (u3o_debug_ram | u3o_check_corrupt) ) { - u3m_grab(sac, u3_none); - } - } - else { - c3_w tot_w = 0; - FILE* fil_u; - -#ifdef U3_MEMORY_LOG - { - u3_noun wen = u3dc("scot", c3__da, u3k(u3A->now)); - c3_c* wen_c = u3r_string(wen); - - c3_c nam_c[2048]; - snprintf(nam_c, 2048, "%s/.urb/put/mass", u3P.dir_c); - - struct stat st; - if ( -1 == stat(nam_c, &st) ) { - c3_mkdir(nam_c, 0700); - } - - c3_c man_c[2054]; - snprintf(man_c, 2053, "%s/%s-serf.txt", nam_c, wen_c); - - fil_u = c3_fopen(man_c, "w"); - fprintf(fil_u, "%s\r\n", wen_c); - - c3_free(wen_c); - u3z(wen); - } -#else - { - fil_u = stderr; - } -#endif - - c3_assert( u3R == &(u3H->rod_u) ); - fprintf(fil_u, "\r\n"); - - tot_w += u3a_maid(fil_u, "total userspace", _serf_prof(fil_u, 0, sac)); - tot_w += u3m_mark(fil_u); - tot_w += u3a_maid(fil_u, "space profile", u3a_mark_noun(sac)); - - u3a_print_memory(fil_u, "total marked", tot_w); - u3a_print_memory(fil_u, "free lists", u3a_idle(u3R)); - u3a_print_memory(fil_u, "sweep", u3a_sweep()); - - fflush(fil_u); - -#ifdef U3_MEMORY_LOG - { - fclose(fil_u); - } -#endif - - u3z(sac); - - u3l_log("\n"); - } -} - -/* u3_serf_grab(): garbage collect. -*/ -void -u3_serf_grab(void) -{ - u3_noun sac = u3_nul; - - c3_assert( u3R == &(u3H->rod_u) ); - - { - u3_noun sam, gon; - - { - u3_noun pax = u3nc(c3__whey, u3_nul); - u3_noun lyc = u3nc(u3_nul, u3_nul); - sam = u3nt(lyc, c3n, u3nq(c3__once, u3_blip, u3_blip, pax)); - } - - gon = u3m_soft(0, u3v_peek, sam); - - { - u3_noun tag, dat, val; - u3x_cell(gon, &tag, &dat); - - if ( (u3_blip == tag) - && (u3_nul != dat) - && (c3y == u3r_pq(u3t(dat), c3__omen, 0, &val)) - && (c3y == u3r_p(val, c3__mass, &sac)) ) - { - u3k(sac); - } - } - - u3z(gon); - } - - fprintf(stderr, "serf: measuring memory:\r\n"); - - if ( u3_nul != sac ) { - _serf_grab(sac); - } - else { - u3a_print_memory(stderr, "total marked", u3m_mark(stderr)); - u3a_print_memory(stderr, "free lists", u3a_idle(u3R)); - u3a_print_memory(stderr, "sweep", u3a_sweep()); - fprintf(stderr, "\r\n"); - } - - fflush(stderr); -} - -/* u3_serf_post(): update serf state post-writ. -*/ -void -u3_serf_post(u3_serf* sef_u) -{ - if ( c3y == sef_u->rec_o ) { - u3m_reclaim(); - sef_u->rec_o = c3n; - } - - // XX this runs on replay too, |mass s/b elsewhere - // - if ( c3y == sef_u->mut_o ) { - _serf_grab(sef_u->sac); - sef_u->sac = u3_nul; - sef_u->mut_o = c3n; - } - - if ( c3y == sef_u->pac_o ) { - u3a_print_memory(stderr, "serf: pack: gained", u3m_pack()); - u3l_log("\n"); - sef_u->pac_o = c3n; - } -} - -/* _serf_sure_feck(): event succeeded, send effects. -*/ -static u3_noun -_serf_sure_feck(u3_serf* sef_u, c3_w pre_w, u3_noun vir) -{ - c3_o rec_o = c3n; - c3_o pac_o = c3n; - - // intercept |mass, observe |reset - // - { - u3_noun riv = vir; - c3_w i_w = 0; - - while ( u3_nul != riv ) { - u3_noun fec = u3t(u3h(riv)); - - // assumes a max of one %mass effect per event - // - if ( c3__mass == u3h(fec) ) { - // save a copy of the %mass data - // - sef_u->sac = u3k(u3t(fec)); - // replace the %mass data with ~ - // - // For efficient transmission to daemon. - // - riv = u3kb_weld(u3qb_scag(i_w, vir), - u3nc(u3nt(u3k(u3h(u3h(riv))), c3__mass, u3_nul), - u3qb_slag(1 + i_w, vir))); - u3z(vir); - vir = riv; - break; - } - - // reclaim memory from persistent caches on |reset - // - if ( c3__vega == u3h(fec) ) { - rec_o = c3y; - } - - riv = u3t(riv); - i_w++; - } - } - - // after a successful event, we check for memory pressure. - // - // if we've exceeded either of two thresholds, we reclaim - // from our persistent caches, and notify the daemon - // (via a "fake" effect) that arvo should trim state - // (trusting that the daemon will enqueue an appropriate event). - // For future flexibility, the urgency of the notification is represented - // by a *decreasing* number: 0 is maximally urgent, 1 less so, &c. - // - // high-priority: 2^22 contiguous words remaining (~8 MB) - // low-priority: 2^27 contiguous words remaining (~536 MB) - // XX maybe use 2^23 (~16 MB) and 2^26 (~268 MB? - // - // XX these thresholds should trigger notifications sent to the king - // instead of directly triggering these remedial actions. - // - { - u3_noun pri = u3_none; - c3_w pos_w = u3a_open(u3R); - c3_w low_w = (1 << 27); - c3_w hig_w = (1 << 22); - - if ( (pre_w > low_w) && !(pos_w > low_w) ) { - // XX set flag(s) in u3V so we don't repeat endlessly? - // - pac_o = c3y; - rec_o = c3y; - pri = 1; - } - else if ( (pre_w > hig_w) && !(pos_w > hig_w) ) { - pac_o = c3y; - rec_o = c3y; - pri = 0; - } - // reclaim memory from persistent caches periodically - // - // XX this is a hack to work two things - // - bytecode caches grow rapidly and can't be simply capped - // - we don't make very effective use of our free lists - // - else if ( 0 == (sef_u->dun_d % 1000ULL) ) { - rec_o = c3y; - } - - // notify daemon of memory pressure via "fake" effect - // - if ( u3_none != pri ) { - u3_noun cad = u3nc(u3nt(u3_blip, c3__arvo, u3_nul), - u3nc(c3__trim, pri)); - vir = u3nc(cad, vir); - } - } - - sef_u->rec_o = c3o(sef_u->rec_o, rec_o); - sef_u->pac_o = c3o(sef_u->pac_o, pac_o); - - return vir; -} - -/* _serf_sure_core(): event succeeded, save state. -*/ -static void -_serf_sure_core(u3_serf* sef_u, u3_noun cor) -{ - sef_u->dun_d = sef_u->sen_d; - - u3z(u3A->roc); - u3A->roc = cor; - u3A->eve_d = sef_u->dun_d; - sef_u->mug_l = u3r_mug(u3A->roc); - sef_u->mut_o = c3y; -} - -/* _serf_sure(): event succeeded, save state and process effects. -*/ -static u3_noun -_serf_sure(u3_serf* sef_u, c3_w pre_w, u3_noun par) -{ - // vir/(list ovum) list of effects - // cor/arvo arvo core - // - u3_noun vir, cor; - u3x_cell(par, &vir, &cor); - - _serf_sure_core(sef_u, u3k(cor)); - vir = _serf_sure_feck(sef_u, pre_w, u3k(vir)); - - u3z(par); - return vir; -} - -/* _serf_make_crud(): -*/ -static u3_noun -_serf_make_crud(u3_noun job, u3_noun dud) -{ - u3_noun now, ovo, new; - u3x_cell(job, &now, &ovo); - - new = u3nt(u3i_vint(u3k(now)), - u3nt(u3_blip, c3__arvo, u3_nul), - u3nt(c3__crud, dud, u3k(ovo))); - - u3z(job); - return new; -} - -/* _serf_poke(): RETAIN -*/ -static u3_noun -_serf_poke(u3_serf* sef_u, c3_c* cap_c, c3_w mil_w, u3_noun job) -{ - u3_noun now, ovo, wen, gon; - u3x_cell(job, &now, &ovo); - - wen = u3A->now; - u3A->now = u3k(now); - -#ifdef U3_EVENT_TIME_DEBUG - struct timeval b4; - c3_c* txt_c; - - gettimeofday(&b4, 0); - - { - u3_noun tag = u3h(u3t(ovo)); - txt_c = u3r_string(tag); - - if ( (c3__belt != tag) - && (c3__crud != tag) ) - { - u3l_log("serf: %s (%" PRIu64 ") %s\r\n", cap_c, sef_u->sen_d, txt_c); - } - } -#endif - - gon = u3m_soft(mil_w, u3v_poke, u3k(ovo)); - -#ifdef U3_EVENT_TIME_DEBUG - { - struct timeval f2, d0; - c3_w ms_w; - c3_w clr_w; - - gettimeofday(&f2, 0); - timersub(&f2, &b4, &d0); - - ms_w = (d0.tv_sec * 1000) + (d0.tv_usec / 1000); - clr_w = ms_w > 1000 ? 1 : ms_w < 100 ? 2 : 3; // red, green, yellow - - if ( clr_w != 2 ) { - u3l_log("\x1b[3%dm%%%s (%" PRIu64 ") %4d.%02dms\x1b[0m\n", - clr_w, txt_c, sef_u->sen_d, ms_w, - (int) (d0.tv_usec % 1000) / 10); - } - - c3_free(txt_c); - } -#endif - - if ( u3_blip != u3h(gon) ) { - u3z(u3A->now); - u3A->now = wen; - } - else { - u3z(wen); - } - - return gon; -} - -/* _serf_work(): apply event, capture effects. -*/ -static u3_noun -_serf_work(u3_serf* sef_u, c3_w mil_w, u3_noun job) -{ - u3_noun gon; - c3_w pre_w = u3a_open(u3R); - - // event numbers must be continuous - // - c3_assert( sef_u->sen_d == sef_u->dun_d); - sef_u->sen_d++; - - gon = _serf_poke(sef_u, "work", mil_w, job); // retain - - // event accepted - // - if ( u3_blip == u3h(gon) ) { - u3_noun vir = _serf_sure(sef_u, pre_w, u3k(u3t(gon))); - - u3z(gon); u3z(job); - return u3nc(c3__done, u3nt(u3i_chubs(1, &sef_u->dun_d), - sef_u->mug_l, - vir)); - } - // event rejected - // - else { - // stash $goof from first crash - // - u3_noun dud = u3k(gon); - - // XX reclaim on %meme first? - // - - job = _serf_make_crud(job, dud); - gon = _serf_poke(sef_u, "crud", mil_w, job); // retain - - // error notification accepted - // - if ( u3_blip == u3h(gon) ) { - u3_noun vir = _serf_sure(sef_u, pre_w, u3k(u3t(gon))); - - u3z(gon); u3z(dud); - return u3nc(c3__swap, u3nq(u3i_chubs(1, &sef_u->dun_d), - sef_u->mug_l, - job, - vir)); - } - // error notification rejected - // - else { - sef_u->sen_d = sef_u->dun_d; - - // XX reclaim on %meme ? - // - - u3z(job); - return u3nq(c3__bail, gon, dud, u3_nul); - } - } -} - -/* u3_serf_work(): apply event, producing effects. -*/ -u3_noun -u3_serf_work(u3_serf* sef_u, c3_w mil_w, u3_noun job) -{ - c3_t tac_t = !!( u3C.wag_w & u3o_trace ); - c3_c lab_c[2056]; - u3_noun pro; - - // XX refactor tracing - // - if ( tac_t ) { - u3_noun wir = u3h(u3t(job)); - u3_noun cad = u3h(u3t(u3t(job))); - - { - c3_c* cad_c = u3m_pretty(cad); - c3_c* wir_c = u3m_pretty_path(wir); - snprintf(lab_c, 2056, "work [%s %s]", wir_c, cad_c); - c3_free(cad_c); - c3_free(wir_c); - } - - u3t_event_trace(lab_c, 'B'); - } - - // %work must be performed against an extant kernel - // - c3_assert( 0 != sef_u->mug_l); - - pro = u3nc(c3__work, _serf_work(sef_u, mil_w, job)); - - if ( tac_t ) { - u3t_event_trace(lab_c, 'E'); - } - - return pro; -} - -/* _serf_play_life(): -*/ -static u3_noun -_serf_play_life(u3_serf* sef_u, u3_noun eve) -{ - u3_noun gon; - - c3_assert( 0ULL == sef_u->sen_d ); - - { - u3_noun len = u3qb_lent(eve); - c3_assert( c3y == u3r_safe_chub(len, &sef_u->sen_d) ); - u3z(len); - } - - // ensure zero-initialized kernel - // - // XX assert? - // - u3A->roc = 0; - - gon = u3m_soft(0, u3v_life, eve); - - // lifecycle sequence succeeded - // - if ( u3_blip == u3h(gon) ) { - // save product as initial arvo kernel - // - _serf_sure_core(sef_u, u3k(u3t(gon))); - - u3z(gon); - return u3nc(c3__done, sef_u->mug_l); - } - // lifecycle sequence failed - // - else { - // send failure message and trace - // - sef_u->dun_d = sef_u->sen_d = 0; - - return u3nq(c3__bail, 0, 0, gon); - } -} - -/* _serf_play_poke(): RETAIN -*/ -static u3_noun -_serf_play_poke(u3_noun job) -{ - u3_noun now, ovo, wen, gon; - u3x_cell(job, &now, &ovo); - - wen = u3A->now; - u3A->now = u3k(now); - gon = u3m_soft(0, u3v_poke, u3k(ovo)); - - if ( u3_blip != u3h(gon) ) { - u3z(u3A->now); - u3A->now = wen; - } - else { - u3z(wen); - } - - return gon; -} - -/* _serf_play_list(): -*/ -static u3_noun -_serf_play_list(u3_serf* sef_u, u3_noun eve) -{ - c3_w pre_w = u3a_open(u3R); - u3_noun vev = eve; - u3_noun job, gon; - - while ( u3_nul != eve ) { - job = u3h(eve); - - // bump sent event counter - // - sef_u->sen_d++; - - gon = _serf_play_poke(job); - - // event succeeded, save and continue - // - if ( u3_blip == u3h(gon) ) { - // vir/(list ovum) list of effects - // cor/arvo arvo core - // - u3_noun vir, cor; - u3x_trel(gon, 0, &vir, &cor); - - _serf_sure_core(sef_u, u3k(cor)); - - // process effects to set u3_serf_post flags - // - u3z(_serf_sure_feck(sef_u, pre_w, u3k(vir))); - - u3z(gon); - - // skip |mass on replay - // - u3z(sef_u->sac); - sef_u->sac = u3_nul; - - eve = u3t(eve); - } - // event failed, stop and send trace - // - else { - // reset sent event counter - // - sef_u->sen_d = sef_u->dun_d; - - // XX reclaim on meme ? - // - - // send failure notification - // - u3z(vev); - return u3nc(c3__bail, u3nt(u3i_chubs(1, &sef_u->dun_d), - sef_u->mug_l, - gon)); - } - } - - u3z(vev); - return u3nc(c3__done, sef_u->mug_l); -} - -/* u3_serf_play(): apply event list, producing status. -*/ -u3_noun -u3_serf_play(u3_serf* sef_u, c3_d eve_d, u3_noun lit) -{ - c3_assert( eve_d == 1ULL + sef_u->sen_d ); - - // XX better condition for no kernel? - // - return u3nc(c3__play, ( 0ULL == sef_u->dun_d ) - ? _serf_play_life(sef_u, lit) - : _serf_play_list(sef_u, lit)); -} - -/* u3_serf_peek(): dereference namespace. -*/ -u3_noun -u3_serf_peek(u3_serf* sef_u, c3_w mil_w, u3_noun sam) -{ - u3_noun gon = u3m_soft(mil_w, u3v_peek, sam); - u3_noun pro; - - { - u3_noun tag, dat; - u3x_cell(gon, &tag, &dat); - - // read succeeded, produce result - // - if ( u3_blip == tag ) { - pro = u3nc(c3__done, u3k(dat)); - u3z(gon); - } - // read failed, produce trace - // - // NB, reads should *not* fail deterministically - // - else { - pro = u3nc(c3__bail, gon); - } - } - - return u3nc(c3__peek, pro); -} - -/* _serf_writ_live_exit(): exit on command. -*/ -static void -_serf_writ_live_exit(u3_serf* sef_u, c3_w cod_w) -{ - if ( u3C.wag_w & u3o_debug_cpu ) { - FILE* fil_u; - - { - u3_noun wen = u3dc("scot", c3__da, u3k(u3A->now)); - c3_c* wen_c = u3r_string(wen); - - c3_c nam_c[2048]; - snprintf(nam_c, 2048, "%s/.urb/put/profile", u3P.dir_c); - - struct stat st; - if ( -1 == stat(nam_c, &st) ) { - c3_mkdir(nam_c, 0700); - } - - c3_c man_c[2054]; - snprintf(man_c, 2053, "%s/%s.txt", nam_c, wen_c); - - fil_u = c3_fopen(man_c, "w"); - - c3_free(wen_c); - u3z(wen); - } - - u3t_damp(fil_u); - - { - fclose(fil_u); - } - } - - // XX move to jets.c - // - c3_free(u3D.ray_u); - - sef_u->xit_f(); - - exit(cod_w); -} - -/* _serf_writ_live_save(): save snapshot. -*/ -static void -_serf_writ_live_save(u3_serf* sef_u, c3_d eve_d) -{ - if( eve_d != sef_u->dun_d ) { - fprintf(stderr, "serf (%" PRIu64 "): save failed: %" PRIu64 "\r\n", - sef_u->dun_d, - eve_d); - exit(1); - } - - u3e_save(); -} - -/* u3_serf_live(): apply %live command [com], producing *ret on c3y. -*/ -c3_o -u3_serf_live(u3_serf* sef_u, u3_noun com, u3_noun* ret) -{ - u3_noun tag, dat; - - // refcounts around snapshots require special handling - // - if ( c3n == u3r_cell(com, &tag, &dat) ) { - u3z(com); - return c3n; - } - - switch ( tag ) { - default: { - u3z(com); - return c3n; - } - - case c3__exit: { - c3_y cod_y; - - if ( c3n == u3r_safe_byte(dat, &cod_y) ) { - u3z(com); - return c3n; - } - - u3z(com); - // NB, doesn't return - // - _serf_writ_live_exit(sef_u, cod_y); - *ret = u3nc(c3__live, u3_nul); - return c3y; - } - - // NB: the %cram $writ only saves the rock, it doesn't load it - // - case c3__cram: { - c3_d eve_d; - - if ( c3n == u3r_safe_chub(dat, &eve_d) ) { - u3z(com); - return c3n; - } - - u3z(com); - - if( eve_d != sef_u->dun_d ) { - fprintf(stderr, "serf (%" PRIu64 "): cram failed: %" PRIu64 "\r\n", - sef_u->dun_d, - eve_d); - return c3n; - } - - u3l_log("serf (%" PRIu64 "): saving rock\r\n", sef_u->dun_d); - - if ( c3n == u3u_cram(sef_u->dir_c, eve_d) ) { - fprintf(stderr, "serf (%" PRIu64 "): unable to jam state\r\n", eve_d); - return c3n; - } - - if ( u3r_mug(u3A->roc) != sef_u->mug_l ) { - fprintf(stderr, "serf (%" PRIu64 "): mug mismatch 0x%08x 0x%08x\r\n", - eve_d, sef_u->mug_l, u3r_mug(u3A->roc)); - return c3n; - } - - u3e_save(); - u3_serf_grab(); - - *ret = u3nc(c3__live, u3_nul); - return c3y; - } - - case c3__pack: { - if ( u3_nul != dat ) { - u3z(com); - return c3n; - } - else { - u3z(com); - u3a_print_memory(stderr, "serf: pack: gained", u3m_pack()); - *ret = u3nc(c3__live, u3_nul); - return c3y; - } - } - - case c3__meld: { - if ( u3_nul != dat ) { - u3z(com); - return c3n; - } - else { - u3z(com); - u3u_meld(); - *ret = u3nc(c3__live, u3_nul); - return c3y; - } - } - - case c3__save: { - c3_d eve_d; - - if ( c3n == u3r_safe_chub(dat, &eve_d) ) { - u3z(com); - return c3n; - } - - u3z(com); - _serf_writ_live_save(sef_u, eve_d); - *ret = u3nc(c3__live, u3_nul); - return c3y; - } - } -} - -/* u3_serf_writ(): apply writ [wit], producing plea [*pel] on c3y. -*/ -c3_o -u3_serf_writ(u3_serf* sef_u, u3_noun wit, u3_noun* pel) -{ - u3_noun tag, com; - c3_o ret_o; - - if ( c3n == u3r_cell(wit, &tag, &com) ) { - ret_o = c3n; - } - else { - switch ( tag ) { - default: { - ret_o = c3n; - } break; - - case c3__live: { - // since %live can take snapshots, it's refcount protocol is unique - // - u3k(com); - u3z(wit); - return u3_serf_live(sef_u, com, pel); - } break; - - case c3__peek: { - u3_noun tim, sam; - c3_w mil_w; - - if ( (c3n == u3r_cell(com, &tim, &sam)) || - (c3n == u3r_safe_word(tim, &mil_w)) ) - { - ret_o = c3n; - } - else { - *pel = u3_serf_peek(sef_u, mil_w, u3k(sam)); - ret_o = c3y; - } - } break; - - case c3__play: { - u3_noun eve, lit; - c3_d eve_d; - - if ( (c3n == u3r_cell(com, &eve, &lit)) || - (c3n == u3a_is_cell(lit)) || - (c3n == u3r_safe_chub(eve, &eve_d)) ) - { - ret_o = c3n; - } - else { - *pel = u3_serf_play(sef_u, eve_d, u3k(lit)); - ret_o = c3y; - } - } break; - - case c3__work: { - u3_noun tim, job; - c3_w mil_w; - - if ( (c3n == u3r_cell(com, &tim, &job)) || - (c3n == u3r_safe_word(tim, &mil_w)) ) - { - ret_o = c3n; - } - else { - *pel = u3_serf_work(sef_u, mil_w, u3k(job)); - ret_o = c3y; - } - } break; - } - } - - u3z(wit); - return ret_o; -} - -/* _serf_ripe(): produce initial serf state as [eve=@ mug=@] -*/ -static u3_noun -_serf_ripe(u3_serf* sef_u) -{ - // u3l_log("serf: ripe %" PRIu64 "\r\n", sef_u->dun_d); - - sef_u->mug_l = ( 0 == sef_u->dun_d ) - ? 0 - : u3r_mug(u3A->roc); - - return u3nc(u3i_chubs(1, &sef_u->dun_d), sef_u->mug_l); -} - -/* u3_serf_init(): init or restore, producing status. -*/ -u3_noun -u3_serf_init(u3_serf* sef_u) -{ - u3_noun rip; - - { - c3_w pro_w = 1; - c3_y hon_y = 141; - c3_y noc_y = 4; - u3_noun ver = u3nt(pro_w, hon_y, noc_y); - - rip = u3nt(c3__ripe, ver, _serf_ripe(sef_u)); - } - - // XX move to u3_serf_post() - // - // measure/print static memory usage if < 1/2 of the loom is available - // - // { - // c3_w pen_w = u3a_open(u3R); - - // if ( !(pen_w > (1 << 28)) ) { - // fprintf(stderr, "\r\n"); - // u3a_print_memory(stderr, "serf: contiguous free space", pen_w); - // u3_serf_grab(); - // } - // } - - sef_u->pac_o = c3n; - sef_u->rec_o = c3n; - sef_u->mut_o = c3n; - sef_u->sac = u3_nul; - - return rip; -} diff --git a/pkg/urcrypt/.gitignore b/pkg/urcrypt/.gitignore deleted file mode 100644 index b464b3f2f..000000000 --- a/pkg/urcrypt/.gitignore +++ /dev/null @@ -1,56 +0,0 @@ -*.pc -config.h -config.status -libtool - -# the following was adapted from -# https://github.com/github/gitignore/blob/991e760c1c6d50fdda246e0178b9c58b06770b90/Autotools.gitignore - -# http://www.gnu.org/software/automake - -Makefile.in -build-aux/ar-lib -/mdate-sh -/py-compile -/test-driver -/ylwrap -.deps/ -.dirstamp - -# http://www.gnu.org/software/autoconf - -autom4te.cache -/autoscan.log -/autoscan-*.log -/aclocal.m4 -build-aux/compile -/config.cache -build-aux/config.guess -/config.h.in -build-aux/config.log -build-aux/config.status -build-aux/config.sub -/configure -/configure.scan -build-aux/depcomp -build-aux/install-sh -build-aux/missing -/stamp-h1 - -# https://www.gnu.org/software/libtool/ - -build-aux/ltmain.sh - -# http://www.gnu.org/software/m4/ - -build-aux/m4/libtool.m4 -build-aux/m4/ltoptions.m4 -build-aux/m4/ltsugar.m4 -build-aux/m4/ltversion.m4 -build-aux/m4/lt~obsolete.m4 - -# Generated Makefile -# (meta build system like autotools, -# can automatically generate from config.status script -# (which is called by configure script)) -Makefile diff --git a/pkg/urcrypt/Makefile.am b/pkg/urcrypt/Makefile.am deleted file mode 100644 index 971b3e16e..000000000 --- a/pkg/urcrypt/Makefile.am +++ /dev/null @@ -1,130 +0,0 @@ -ACLOCAL_AMFLAGS = -I build-aux/m4 - -AM_CFLAGS = -Wall -g -O3 - -lib_LTLIBRARIES = liburcrypt.la -noinst_LTLIBRARIES = libed25519.la \ - libge_additions.la \ - libargon2.la \ - libkeccak_tiny.la \ - libscrypt.la - -include_HEADERS = urcrypt/urcrypt.h -noinst_HEADERS = urcrypt/util.h \ - ed25519/src/ed25519.h \ - ed25519/src/ge.h \ - ge-additions/ge-additions.h \ - argon2/include/argon2.h \ - argon2/src/blake2/blake2.h \ - scrypt/sha256.h \ - scrypt/libscrypt.h - -# main library -pkgconfig_DATA = liburcrypt-$(URCRYPT_API_VERSION).pc -DISTCLEANFILES = $(pkgconfig_DATA) - -liburcrypt_la_CPPFLAGS = -I$(srcdir)/ed25519/src \ - -I$(srcdir)/ge-additions \ - -I$(srcdir)/argon2/include \ - -I$(srcdir)/argon2/src/blake2 \ - -I$(srcdir)/keccak-tiny \ - -I$(srcdir)/scrypt -liburcrypt_la_LIBADD = $(LIBCRYPTO_LIBS) \ - $(LIBSECP256K1_LIBS) \ - $(LIBAES_SIV_LIBS) \ - libed25519.la \ - libge_additions.la \ - libargon2.la \ - libkeccak_tiny.la \ - libscrypt.la -liburcrypt_la_CFLAGS = $(LIBCRYPTO_CFLAGS) \ - $(LIBSECP256K1_CFLAGS) \ - $(LIBAES_SIV_CFLAGS) -# urcrypt_ is used for public symbols, urcrypt__ for internal. -liburcrypt_la_LDFLAGS = -export-symbols-regex '^urcrypt_[^_]' \ - -version-info $(URCRYPT_LT_VERSION) -liburcrypt_la_SOURCES = urcrypt/aes_cbc.c \ - urcrypt/aes_ecb.c \ - urcrypt/aes_siv.c \ - urcrypt/argon.c \ - urcrypt/ed25519.c \ - urcrypt/ge_additions.c \ - urcrypt/ripemd.c \ - urcrypt/scrypt.c \ - urcrypt/keccak.c \ - urcrypt/secp256k1.c \ - urcrypt/sha.c \ - urcrypt/util.c \ - urcrypt/util.h - -# ed25519 -libed25519_la_CFLAGS = -Wno-unused-result -libed25519_la_SOURCES = ed25519/src/fixedint.h \ - ed25519/src/sha512.h \ - ed25519/src/fe.h \ - ed25519/src/precomp_data.h \ - ed25519/src/sc.h \ - ed25519/src/add_scalar.c \ - ed25519/src/keypair.c \ - ed25519/src/sc.c \ - ed25519/src/seed.c \ - ed25519/src/verify.c \ - ed25519/src/ge.c \ - ed25519/src/fe.c \ - ed25519/src/key_exchange.c \ - ed25519/src/sha512.c \ - ed25519/src/sign.c - -# ge-additions -libge_additions_la_CPPFLAGS = -I$(srcdir)/ed25519/src -libge_additions_la_CFLAGS = -Werror -pedantic -std=gnu99 -libge_additions_la_SOURCES = ge-additions/ge-additions.c - -# argon2 -libargon2_la_CPPFLAGS = -I$(srcdir)/argon2/include -DARGON2_NO_THREADS -libargon2_la_CFLAGS = -Wno-unused-value -Wno-unused-function -libargon2_la_SOURCES = argon2/src/core.h \ - argon2/src/thread.h \ - argon2/src/encoding.h \ - argon2/src/blake2/blake2-impl.h \ - argon2/src/blake2/blamka-round-opt.h \ - argon2/src/blake2/blamka-round-ref.h \ - argon2/src/argon2.c \ - argon2/src/core.c \ - argon2/src/blake2/blake2b.c \ - argon2/src/thread.c \ - argon2/src/encoding.c - -# argon2 different sources for different CPU architectures -# opt.c requires SSE instructions and won't work on AArch64 et al. -if ARCH_X86_64 -libargon2_la_SOURCES += \ - argon2/src/opt.c -endif -if ARCH_GENERIC -libargon2_la_SOURCES += \ - argon2/src/ref.c -endif - -# scrypt -libscrypt_la_CPPFLAGS = -D_FORTIFY_SOURCE=2 -libscrypt_la_SOURCES = scrypt/b64.c \ - scrypt/crypto-mcf.c \ - scrypt/crypto-scrypt-saltgen.c \ - scrypt/crypto_scrypt-check.c \ - scrypt/crypto_scrypt-hash.c \ - scrypt/crypto_scrypt-hexconvert.c \ - scrypt/crypto_scrypt-nosse.c \ - scrypt/main.c \ - scrypt/sha256.c \ - scrypt/slowequals.c \ - scrypt/b64.h \ - scrypt/crypto_scrypt-hexconvert.h \ - scrypt/slowequals.h \ - scrypt/sysendian.h - -# keccak-tiny -libkeccak_tiny_la_CFLAGS = -march=native -std=c11 -Wextra -Wpedantic -Wall -libkeccak_tiny_la_SOURCES = keccak-tiny/keccak-tiny.c \ - keccak-tiny/define-macros.h \ - keccak-tiny/keccak-tiny.h diff --git a/pkg/urcrypt/README.md b/pkg/urcrypt/README.md deleted file mode 100644 index 80073c89d..000000000 --- a/pkg/urcrypt/README.md +++ /dev/null @@ -1,36 +0,0 @@ -What is urcrypt? ----------------- -urcrypt is a library of cryptography routines used by urbit jets. - -Why is urcrypt? ---------------- -Urbit's C runtime (long the only urbit runtime) has accumulated a collection of -cryptography dependencies, some with custom additions or patches. These -libraries have different conventions and have been managed by u3 in an ad-hoc -manner. Reproducing that arrangement in other runtimes is tricky and -error-prone. The (sometimes inconsistent) logic must be reproduced and suitable -cryptography primitives must be found (or worse, written) for the new -environment. - -To ease these burdens, urcrypt isolates the quirks behind a consistent calling -convention. Everything is a little-endian byte array, and each jetted operation -has a corresponding function in the library. Jets simply unpack their nouns, -call urcrypt, and pack the results. - -What is a cryptography routine? -------------------------------- -This is more of a subjective question than it might appear. Any of the following -conditions are sufficient, but not necessary, for a function to be included in -urcrypt: - - * The routine is sensitive to side-channel attacks (encryption, etc) - * Some property of the routine is cryptographically useful (SHA, RIPE, etc) - * The routine typically lives in a crypto library, for whatever reason. - -A word on OpenSSL ------------------ -Urcrypt depends on OpenSSL's libcrypto, which has global state. In order -to avoid dealing with this state, urcrypt refuses to build with an internal -libcrypto. Either build statically (pass `--disable-shared` to `./configure`) -or provide a shared libcrypto for urcrypt to link against. It is the library -user's responsibility to initialize openssl, set custom memory functions, etc. diff --git a/pkg/urcrypt/argon2/.gitattributes b/pkg/urcrypt/argon2/.gitattributes deleted file mode 100644 index 177bed95d..000000000 --- a/pkg/urcrypt/argon2/.gitattributes +++ /dev/null @@ -1,10 +0,0 @@ -# Export ignore -.gitattributes export-ignore -.gitignore export-ignore -.travis.yml export-ignore -appveyor.yml export-ignore -export.sh export-ignore -latex/* export-ignore - -# Linguist documentation -latex/* linguist-documentation diff --git a/pkg/urcrypt/argon2/.gitignore b/pkg/urcrypt/argon2/.gitignore deleted file mode 100644 index 4cfff979b..000000000 --- a/pkg/urcrypt/argon2/.gitignore +++ /dev/null @@ -1,21 +0,0 @@ -argon2 -libargon2.a -libargon2.so* -libargon2.dylib -.DS_Store -src/*.o -src/blake2/*.o -genkat -.idea -*.pyc -testcase -*.gcda -*.gcno -*.gcov -bench -vs2015/build -Argon2.sdf -Argon2.VC.opendb -*.zip -*.tar.gz -tags diff --git a/pkg/urcrypt/argon2/.travis.yml b/pkg/urcrypt/argon2/.travis.yml deleted file mode 100644 index 265fc48c0..000000000 --- a/pkg/urcrypt/argon2/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -language: c - -compiler: - - clang - - gcc - -os: - - linux - - osx - -# Clang on Linux needs to run in a VM to use ASAN. -# See: https://github.com/travis-ci/travis-ci/issues/9033 -matrix: - exclude: - - compiler: clang - os: linux - include: - - compiler: clang - os: linux - sudo: true - -script: make && make testci - -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/pkg/urcrypt/argon2/Argon2.sln b/pkg/urcrypt/argon2/Argon2.sln deleted file mode 100644 index 8c23fdc58..000000000 --- a/pkg/urcrypt/argon2/Argon2.sln +++ /dev/null @@ -1,160 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2OptTestCI", "vs2015\Argon2OptTestCI\Argon2OptTestCI.vcxproj", "{12956597-5E42-433A-93F3-D4EFF50AA207}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2RefTestCI", "vs2015\Argon2RefTestCI\Argon2RefTestCI.vcxproj", "{8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2OptGenKAT", "vs2015\Argon2OptGenKAT\Argon2OptGenKAT.vcxproj", "{DBBAAAE6-4560-4D11-8280-30A6650A82EF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2RefGenKAT", "vs2015\Argon2RefGenKAT\Argon2RefGenKAT.vcxproj", "{71921B4C-A795-4A37-95A3-99D600E01211}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2Opt", "vs2015\Argon2Opt\Argon2Opt.vcxproj", "{CAA75C57-998C-494E-B8A5-5894EF0FC528}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2Ref", "vs2015\Argon2Ref\Argon2Ref.vcxproj", "{B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2OptBench", "vs2015\Argon2OptBench\Argon2OptBench.vcxproj", "{B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2RefBench", "vs2015\Argon2RefBench\Argon2RefBench.vcxproj", "{99203F6A-6E8C-42FC-8C7C-C07E8913D539}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2OptDll", "vs2015\Argon2OptDll\Argon2OptDll.vcxproj", "{3A898DD8-ACAE-4269-ADFE-EB7260D71583}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Argon2RefDll", "vs2015\Argon2RefDll\Argon2RefDll.vcxproj", "{19D911A1-533C-4475-B313-F372481A35D4}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|x64 = Release|x64 - Release|x86 = Release|x86 - ReleaseStatic|x64 = ReleaseStatic|x64 - ReleaseStatic|x86 = ReleaseStatic|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {12956597-5E42-433A-93F3-D4EFF50AA207}.Debug|x64.ActiveCfg = Debug|x64 - {12956597-5E42-433A-93F3-D4EFF50AA207}.Debug|x64.Build.0 = Debug|x64 - {12956597-5E42-433A-93F3-D4EFF50AA207}.Debug|x86.ActiveCfg = Debug|Win32 - {12956597-5E42-433A-93F3-D4EFF50AA207}.Debug|x86.Build.0 = Debug|Win32 - {12956597-5E42-433A-93F3-D4EFF50AA207}.Release|x64.ActiveCfg = Release|x64 - {12956597-5E42-433A-93F3-D4EFF50AA207}.Release|x64.Build.0 = Release|x64 - {12956597-5E42-433A-93F3-D4EFF50AA207}.Release|x86.ActiveCfg = Release|Win32 - {12956597-5E42-433A-93F3-D4EFF50AA207}.Release|x86.Build.0 = Release|Win32 - {12956597-5E42-433A-93F3-D4EFF50AA207}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {12956597-5E42-433A-93F3-D4EFF50AA207}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {12956597-5E42-433A-93F3-D4EFF50AA207}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {12956597-5E42-433A-93F3-D4EFF50AA207}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Debug|x64.ActiveCfg = Debug|x64 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Debug|x64.Build.0 = Debug|x64 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Debug|x86.ActiveCfg = Debug|Win32 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Debug|x86.Build.0 = Debug|Win32 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Release|x64.ActiveCfg = Release|x64 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Release|x64.Build.0 = Release|x64 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Release|x86.ActiveCfg = Release|Win32 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.Release|x86.Build.0 = Release|Win32 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Debug|x64.ActiveCfg = Debug|x64 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Debug|x64.Build.0 = Debug|x64 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Debug|x86.ActiveCfg = Debug|Win32 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Debug|x86.Build.0 = Debug|Win32 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Release|x64.ActiveCfg = Release|x64 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Release|x64.Build.0 = Release|x64 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Release|x86.ActiveCfg = Release|Win32 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.Release|x86.Build.0 = Release|Win32 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {DBBAAAE6-4560-4D11-8280-30A6650A82EF}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {71921B4C-A795-4A37-95A3-99D600E01211}.Debug|x64.ActiveCfg = Debug|x64 - {71921B4C-A795-4A37-95A3-99D600E01211}.Debug|x64.Build.0 = Debug|x64 - {71921B4C-A795-4A37-95A3-99D600E01211}.Debug|x86.ActiveCfg = Debug|Win32 - {71921B4C-A795-4A37-95A3-99D600E01211}.Debug|x86.Build.0 = Debug|Win32 - {71921B4C-A795-4A37-95A3-99D600E01211}.Release|x64.ActiveCfg = Release|x64 - {71921B4C-A795-4A37-95A3-99D600E01211}.Release|x64.Build.0 = Release|x64 - {71921B4C-A795-4A37-95A3-99D600E01211}.Release|x86.ActiveCfg = Release|Win32 - {71921B4C-A795-4A37-95A3-99D600E01211}.Release|x86.Build.0 = Release|Win32 - {71921B4C-A795-4A37-95A3-99D600E01211}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {71921B4C-A795-4A37-95A3-99D600E01211}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {71921B4C-A795-4A37-95A3-99D600E01211}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {71921B4C-A795-4A37-95A3-99D600E01211}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Debug|x64.ActiveCfg = Debug|x64 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Debug|x64.Build.0 = Debug|x64 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Debug|x86.ActiveCfg = Debug|Win32 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Debug|x86.Build.0 = Debug|Win32 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Release|x64.ActiveCfg = Release|x64 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Release|x64.Build.0 = Release|x64 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Release|x86.ActiveCfg = Release|Win32 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.Release|x86.Build.0 = Release|Win32 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {CAA75C57-998C-494E-B8A5-5894EF0FC528}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x64.ActiveCfg = Debug|x64 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x64.Build.0 = Debug|x64 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x86.ActiveCfg = Debug|Win32 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Debug|x86.Build.0 = Debug|Win32 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x64.ActiveCfg = Release|x64 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x64.Build.0 = Release|x64 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x86.ActiveCfg = Release|Win32 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.Release|x86.Build.0 = Release|Win32 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Debug|x64.ActiveCfg = Debug|x64 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Debug|x64.Build.0 = Debug|x64 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Debug|x86.ActiveCfg = Debug|Win32 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Debug|x86.Build.0 = Debug|Win32 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Release|x64.ActiveCfg = Release|x64 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Release|x64.Build.0 = Release|x64 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Release|x86.ActiveCfg = Release|Win32 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.Release|x86.Build.0 = Release|Win32 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Debug|x64.ActiveCfg = Debug|x64 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Debug|x64.Build.0 = Debug|x64 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Debug|x86.ActiveCfg = Debug|Win32 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Debug|x86.Build.0 = Debug|Win32 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Release|x64.ActiveCfg = Release|x64 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Release|x64.Build.0 = Release|x64 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Release|x86.ActiveCfg = Release|Win32 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.Release|x86.Build.0 = Release|Win32 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {99203F6A-6E8C-42FC-8C7C-C07E8913D539}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Debug|x64.ActiveCfg = Debug|x64 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Debug|x64.Build.0 = Debug|x64 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Debug|x86.ActiveCfg = Debug|Win32 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Debug|x86.Build.0 = Debug|Win32 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Release|x64.ActiveCfg = Release|x64 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Release|x64.Build.0 = Release|x64 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Release|x86.ActiveCfg = Release|Win32 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.Release|x86.Build.0 = Release|Win32 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {3A898DD8-ACAE-4269-ADFE-EB7260D71583}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - {19D911A1-533C-4475-B313-F372481A35D4}.Debug|x64.ActiveCfg = Debug|x64 - {19D911A1-533C-4475-B313-F372481A35D4}.Debug|x64.Build.0 = Debug|x64 - {19D911A1-533C-4475-B313-F372481A35D4}.Debug|x86.ActiveCfg = Debug|Win32 - {19D911A1-533C-4475-B313-F372481A35D4}.Debug|x86.Build.0 = Debug|Win32 - {19D911A1-533C-4475-B313-F372481A35D4}.Release|x64.ActiveCfg = Release|x64 - {19D911A1-533C-4475-B313-F372481A35D4}.Release|x64.Build.0 = Release|x64 - {19D911A1-533C-4475-B313-F372481A35D4}.Release|x86.ActiveCfg = Release|Win32 - {19D911A1-533C-4475-B313-F372481A35D4}.Release|x86.Build.0 = Release|Win32 - {19D911A1-533C-4475-B313-F372481A35D4}.ReleaseStatic|x64.ActiveCfg = ReleaseStatic|x64 - {19D911A1-533C-4475-B313-F372481A35D4}.ReleaseStatic|x64.Build.0 = ReleaseStatic|x64 - {19D911A1-533C-4475-B313-F372481A35D4}.ReleaseStatic|x86.ActiveCfg = ReleaseStatic|Win32 - {19D911A1-533C-4475-B313-F372481A35D4}.ReleaseStatic|x86.Build.0 = ReleaseStatic|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/pkg/urcrypt/argon2/CHANGELOG.md b/pkg/urcrypt/argon2/CHANGELOG.md deleted file mode 100644 index 0578fde27..000000000 --- a/pkg/urcrypt/argon2/CHANGELOG.md +++ /dev/null @@ -1,32 +0,0 @@ -# 20171227 -* Added ABI version number -* AVX2/AVX-512F optimizations of BLAMKA -* Set Argon2 version number from the command line -* New bindings -* Minor bug and warning fixes (no security issue) - -# 20161029 - -* Argon2id added -* Better documentation -* Dual licensing CC0 / Apache 2.0 -* Minor bug fixes (no security issue) - -# 20160406 - -* Version 1.3 of Argon2 -* Version number in encoded hash -* Refactored low-level API -* Visibility control for library symbols -* Microsoft Visual Studio solution -* New bindings -* Minor bug and warning fixes (no security issue) - - -# 20151206 - -* Python bindings -* Password read from stdin, instead of being an argument -* Compatibility FreeBSD, NetBSD, OpenBSD -* Constant-time verification -* Minor bug and warning fixes (no security issue) diff --git a/pkg/urcrypt/argon2/LICENSE b/pkg/urcrypt/argon2/LICENSE deleted file mode 100644 index fa611f7ac..000000000 --- a/pkg/urcrypt/argon2/LICENSE +++ /dev/null @@ -1,314 +0,0 @@ -Argon2 reference source code package - reference C implementations - -Copyright 2015 -Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - -You may use this work under the terms of a Creative Commons CC0 1.0 -License/Waiver or the Apache Public License 2.0, at your option. The terms of -these licenses can be found at: - -- CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 -- Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - -The terms of the licenses are reproduced below. - --------------------------------------------------------------------------------- - -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. - --------------------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. diff --git a/pkg/urcrypt/argon2/Makefile b/pkg/urcrypt/argon2/Makefile deleted file mode 100644 index 1e1129fd6..000000000 --- a/pkg/urcrypt/argon2/Makefile +++ /dev/null @@ -1,187 +0,0 @@ -# -# Argon2 reference source code package - reference C implementations -# -# Copyright 2015 -# Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves -# -# You may use this work under the terms of a Creative Commons CC0 1.0 -# License/Waiver or the Apache Public License 2.0, at your option. The terms of -# these licenses can be found at: -# -# - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 -# - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 -# -# You should have received a copy of both of these licenses along with this -# software. If not, they may be obtained at the above URLs. -# - -RUN = argon2 -BENCH = bench -GENKAT = genkat - -# Increment on an ABI breaking change -ABI_VERSION = 1 - -DIST = phc-winner-argon2 - -SRC = src/argon2.c src/core.c src/blake2/blake2b.c src/thread.c src/encoding.c -SRC_RUN = src/run.c -SRC_BENCH = src/bench.c -SRC_GENKAT = src/genkat.c -OBJ = $(SRC:.c=.o) - -CFLAGS += -std=c89 -O3 -Wall -g -Iinclude -Isrc - -ifeq ($(NO_THREADS), 1) -CFLAGS += -DARGON2_NO_THREADS -else -CFLAGS += -pthread -endif - -CI_CFLAGS := $(CFLAGS) -Werror=declaration-after-statement -D_FORTIFY_SOURCE=2 \ - -Wextra -Wno-type-limits -Werror -coverage -DTEST_LARGE_RAM - -OPTTARGET ?= native -OPTTEST := $(shell $(CC) -Iinclude -Isrc -march=$(OPTTARGET) src/opt.c -c \ - -o /dev/null 2>/dev/null; echo $$?) -# Detect compatible platform -ifneq ($(OPTTEST), 0) -$(info Building without optimizations) - SRC += src/ref.c -else -$(info Building with optimizations for $(OPTTARGET)) - CFLAGS += -march=$(OPTTARGET) - SRC += src/opt.c -endif - -BUILD_PATH := $(shell pwd) -KERNEL_NAME := $(shell uname -s) - -LIB_NAME=argon2 -ifeq ($(KERNEL_NAME), Linux) - LIB_EXT := so.$(ABI_VERSION) - LIB_CFLAGS := -shared -fPIC -fvisibility=hidden -DA2_VISCTL=1 - SO_LDFLAGS := -Wl,-soname,lib$(LIB_NAME).$(LIB_EXT) - LINKED_LIB_EXT := so -endif -ifeq ($(KERNEL_NAME), $(filter $(KERNEL_NAME),FreeBSD NetBSD OpenBSD)) - LIB_EXT := so - LIB_CFLAGS := -shared -fPIC -endif -ifeq ($(KERNEL_NAME), Darwin) - LIB_EXT := $(ABI_VERSION).dylib - LIB_CFLAGS := -dynamiclib -install_name @rpath/lib$(LIB_NAME).$(LIB_EXT) - LINKED_LIB_EXT := dylib -endif -ifeq ($(findstring CYGWIN, $(KERNEL_NAME)), CYGWIN) - LIB_EXT := dll - LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a -endif -ifeq ($(findstring MINGW, $(KERNEL_NAME)), MINGW) - LIB_EXT := dll - LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a -endif -ifeq ($(findstring MSYS, $(KERNEL_NAME)), MSYS) - LIB_EXT := dll - LIB_CFLAGS := -shared -Wl,--out-implib,lib$(LIB_NAME).$(LIB_EXT).a -endif -ifeq ($(KERNEL_NAME), SunOS) - CC := gcc - CFLAGS += -D_REENTRANT - LIB_EXT := so - LIB_CFLAGS := -shared -fPIC -endif - -ifeq ($(KERNEL_NAME), Linux) -ifeq ($(CC), clang) - CI_CFLAGS += -fsanitize=address -fsanitize=undefined -endif -endif - -LIB_SH := lib$(LIB_NAME).$(LIB_EXT) -LIB_ST := lib$(LIB_NAME).a - -ifdef LINKED_LIB_EXT -LINKED_LIB_SH := lib$(LIB_NAME).$(LINKED_LIB_EXT) -endif - - -LIBRARIES = $(LIB_SH) $(LIB_ST) -HEADERS = include/argon2.h - -INSTALL = install - -DESTDIR = -PREFIX = /usr -INCLUDE_REL = include -LIBRARY_REL = lib -BINARY_REL = bin - -INST_INCLUDE = $(DESTDIR)$(PREFIX)/$(INCLUDE_REL) -INST_LIBRARY = $(DESTDIR)$(PREFIX)/$(LIBRARY_REL) -INST_BINARY = $(DESTDIR)$(PREFIX)/$(BINARY_REL) - -.PHONY: clean dist format $(GENKAT) all install - -all: $(RUN) libs -libs: $(LIBRARIES) - -$(RUN): $(SRC) $(SRC_RUN) - $(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@ - -$(BENCH): $(SRC) $(SRC_BENCH) - $(CC) $(CFLAGS) $^ -o $@ - -$(GENKAT): $(SRC) $(SRC_GENKAT) - $(CC) $(CFLAGS) $^ -o $@ -DGENKAT - -$(LIB_SH): $(SRC) - $(CC) $(CFLAGS) $(LIB_CFLAGS) $(LDFLAGS) $(SO_LDFLAGS) $^ -o $@ - -$(LIB_ST): $(OBJ) - ar rcs $@ $^ - -clean: - rm -f $(RUN) $(BENCH) $(GENKAT) - rm -f $(LIB_SH) $(LIB_ST) kat-argon2* - rm -f testcase - rm -rf *.dSYM - cd src/ && rm -f *.o - cd src/blake2/ && rm -f *.o - cd kats/ && rm -f kat-* diff* run_* make_* - -dist: - cd ..; \ - tar -c --exclude='.??*' -z -f $(DIST)-`date "+%Y%m%d"`.tgz $(DIST)/* - -test: $(SRC) src/test.c - $(CC) $(CFLAGS) -Wextra -Wno-type-limits $^ -o testcase - @sh kats/test.sh - ./testcase - -testci: $(SRC) src/test.c - $(CC) $(CI_CFLAGS) $^ -o testcase - @sh kats/test.sh - ./testcase - -.PHONY: test - -format: - clang-format -style="{BasedOnStyle: llvm, IndentWidth: 4}" \ - -i include/*.h src/*.c src/*.h src/blake2/*.c src/blake2/*.h - -install: $(RUN) libs - $(INSTALL) -d $(INST_INCLUDE) - $(INSTALL) -m 0644 $(HEADERS) $(INST_INCLUDE) - $(INSTALL) -d $(INST_LIBRARY) - $(INSTALL) $(LIBRARIES) $(INST_LIBRARY) -ifdef LINKED_LIB_SH - cd $(INST_LIBRARY) && ln -s $(notdir $(LIB_SH) $(LINKED_LIB_SH)) -endif - $(INSTALL) -d $(INST_BINARY) - $(INSTALL) $(RUN) $(INST_BINARY) - -uninstall: - cd $(INST_INCLUDE) && rm -f $(notdir $(HEADERS)) - cd $(INST_LIBRARY) && rm -f $(notdir $(LIBRARIES) $(LINKED_LIB_SH)) - cd $(INST_BINARY) && rm -f $(notdir $(RUN)) diff --git a/pkg/urcrypt/argon2/README.md b/pkg/urcrypt/argon2/README.md deleted file mode 100644 index 74cf17086..000000000 --- a/pkg/urcrypt/argon2/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Argon2 - -This is a fork of [the reference C implementation of Argon2](https://github.com/P-H-C/phc-winner-argon2), the password-hashing function that won the [Password Hashing Competition (PHC)](https://password-hashing.net). - -## About Argon2u - -In addition to the official three variants (Argon2i, Argon2d, and Argon2id), this fork also implements a fourth variant, Argon2u. It operates similarly to Argon2id, in that it is a hybrid of Argon2i and Argon2d. Where Argon2id uses Argon2i's algorithm for the first two processed segments, Argon2u does this for the first three. - -## More about Argon2 - -Please see the [original repository](https://github.com/P-H-C/phc-winner-argon2) for information about Argon2. - -## Intellectual property - -Except for the components listed below, the Argon2 code in this -repository is copyright (c) 2015 Daniel Dinu, Dmitry Khovratovich (main -authors), Jean-Philippe Aumasson and Samuel Neves, and dual licensed under the -[CC0 License](https://creativecommons.org/about/cc0) and the -[Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0). For more info -see the LICENSE file. - -The string encoding routines in [`src/encoding.c`](src/encoding.c) are -copyright (c) 2015 Thomas Pornin, and under -[CC0 License](https://creativecommons.org/about/cc0). - -The BLAKE2 code in [`src/blake2/`](src/blake2) is copyright (c) Samuel -Neves, 2013-2015, and under -[CC0 License](https://creativecommons.org/about/cc0). - -All licenses are therefore GPL-compatible. diff --git a/pkg/urcrypt/argon2/appveyor.yml b/pkg/urcrypt/argon2/appveyor.yml deleted file mode 100644 index fb1f048ef..000000000 --- a/pkg/urcrypt/argon2/appveyor.yml +++ /dev/null @@ -1,25 +0,0 @@ -os: Visual Studio 2015 - -environment: - matrix: - - platform: x86 - configuration: Debug - - platform: x86 - configuration: Release - - platform: x64 - configuration: Debug - - platform: x64 - configuration: Release - -matrix: - fast_finish: false - -build: - parallel: true - project: Argon2.sln - verbosity: minimal - -test_script: - - ps: kats\test.ps1 - - ps: if ("Release" -eq $env:configuration) { vs2015\build\Argon2OptTestCI.exe } - - ps: if ("Release" -eq $env:configuration) { vs2015\build\Argon2RefTestCI.exe } diff --git a/pkg/urcrypt/argon2/argon2-specs.pdf b/pkg/urcrypt/argon2/argon2-specs.pdf deleted file mode 100644 index d916af641..000000000 Binary files a/pkg/urcrypt/argon2/argon2-specs.pdf and /dev/null differ diff --git a/pkg/urcrypt/argon2/export.sh b/pkg/urcrypt/argon2/export.sh deleted file mode 100755 index 9757b1090..000000000 --- a/pkg/urcrypt/argon2/export.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -FILE=`date "+%Y%m%d"` -BRANCH=master - -git archive --format zip --output $FILE.zip $BRANCH -git archive --format tar.gz --output $FILE.tar.gz $BRANCH diff --git a/pkg/urcrypt/argon2/include/argon2.h b/pkg/urcrypt/argon2/include/argon2.h deleted file mode 100644 index 61f2a3bac..000000000 --- a/pkg/urcrypt/argon2/include/argon2.h +++ /dev/null @@ -1,475 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef ARGON2_H -#define ARGON2_H - -#include -#include -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -/* Symbols visibility control */ -#ifdef A2_VISCTL -#define ARGON2_PUBLIC __attribute__((visibility("default"))) -#define ARGON2_LOCAL __attribute__ ((visibility ("hidden"))) -#elif _MSC_VER -#define ARGON2_PUBLIC __declspec(dllexport) -#define ARGON2_LOCAL -#else -#define ARGON2_PUBLIC -#define ARGON2_LOCAL -#endif - -/* - * Argon2 input parameter restrictions - */ - -/* Minimum and maximum number of lanes (degree of parallelism) */ -#define ARGON2_MIN_LANES UINT32_C(1) -#define ARGON2_MAX_LANES UINT32_C(0xFFFFFF) - -/* Minimum and maximum number of threads */ -#define ARGON2_MIN_THREADS UINT32_C(1) -#define ARGON2_MAX_THREADS UINT32_C(0xFFFFFF) - -/* Number of synchronization points between lanes per pass */ -#define ARGON2_SYNC_POINTS UINT32_C(4) - -/* Minimum and maximum digest size in bytes */ -#define ARGON2_MIN_OUTLEN UINT32_C(4) -#define ARGON2_MAX_OUTLEN UINT32_C(0xFFFFFFFF) - -/* Minimum and maximum number of memory blocks (each of BLOCK_SIZE bytes) */ -#define ARGON2_MIN_MEMORY (2 * ARGON2_SYNC_POINTS) /* 2 blocks per slice */ - -#define ARGON2_MIN(a, b) ((a) < (b) ? (a) : (b)) -/* Max memory size is addressing-space/2, topping at 2^32 blocks (4 TB) */ -#define ARGON2_MAX_MEMORY_BITS \ - ARGON2_MIN(UINT32_C(32), (sizeof(void *) * CHAR_BIT - 10 - 1)) -#define ARGON2_MAX_MEMORY \ - ARGON2_MIN(UINT32_C(0xFFFFFFFF), UINT64_C(1) << ARGON2_MAX_MEMORY_BITS) - -/* Minimum and maximum number of passes */ -#define ARGON2_MIN_TIME UINT32_C(1) -#define ARGON2_MAX_TIME UINT32_C(0xFFFFFFFF) - -/* Minimum and maximum password length in bytes */ -#define ARGON2_MIN_PWD_LENGTH UINT32_C(0) -#define ARGON2_MAX_PWD_LENGTH UINT32_C(0xFFFFFFFF) - -/* Minimum and maximum associated data length in bytes */ -#define ARGON2_MIN_AD_LENGTH UINT32_C(0) -#define ARGON2_MAX_AD_LENGTH UINT32_C(0xFFFFFFFF) - -/* Minimum and maximum salt length in bytes */ -#define ARGON2_MIN_SALT_LENGTH UINT32_C(8) -#define ARGON2_MAX_SALT_LENGTH UINT32_C(0xFFFFFFFF) - -/* Minimum and maximum key length in bytes */ -#define ARGON2_MIN_SECRET UINT32_C(0) -#define ARGON2_MAX_SECRET UINT32_C(0xFFFFFFFF) - -/* Flags to determine which fields are securely wiped (default = no wipe). */ -#define ARGON2_DEFAULT_FLAGS UINT32_C(0) -#define ARGON2_FLAG_CLEAR_PASSWORD (UINT32_C(1) << 0) -#define ARGON2_FLAG_CLEAR_SECRET (UINT32_C(1) << 1) - -/* Global flag to determine if we are wiping internal memory buffers. This flag - * is defined in core.c and deafults to 1 (wipe internal memory). */ -extern int FLAG_clear_internal_memory; - -/* Error codes */ -typedef enum Argon2_ErrorCodes { - ARGON2_OK = 0, - - ARGON2_OUTPUT_PTR_NULL = -1, - - ARGON2_OUTPUT_TOO_SHORT = -2, - ARGON2_OUTPUT_TOO_LONG = -3, - - ARGON2_PWD_TOO_SHORT = -4, - ARGON2_PWD_TOO_LONG = -5, - - ARGON2_SALT_TOO_SHORT = -6, - ARGON2_SALT_TOO_LONG = -7, - - ARGON2_AD_TOO_SHORT = -8, - ARGON2_AD_TOO_LONG = -9, - - ARGON2_SECRET_TOO_SHORT = -10, - ARGON2_SECRET_TOO_LONG = -11, - - ARGON2_TIME_TOO_SMALL = -12, - ARGON2_TIME_TOO_LARGE = -13, - - ARGON2_MEMORY_TOO_LITTLE = -14, - ARGON2_MEMORY_TOO_MUCH = -15, - - ARGON2_LANES_TOO_FEW = -16, - ARGON2_LANES_TOO_MANY = -17, - - ARGON2_PWD_PTR_MISMATCH = -18, /* NULL ptr with non-zero length */ - ARGON2_SALT_PTR_MISMATCH = -19, /* NULL ptr with non-zero length */ - ARGON2_SECRET_PTR_MISMATCH = -20, /* NULL ptr with non-zero length */ - ARGON2_AD_PTR_MISMATCH = -21, /* NULL ptr with non-zero length */ - - ARGON2_MEMORY_ALLOCATION_ERROR = -22, - - ARGON2_FREE_MEMORY_CBK_NULL = -23, - ARGON2_ALLOCATE_MEMORY_CBK_NULL = -24, - - ARGON2_INCORRECT_PARAMETER = -25, - ARGON2_INCORRECT_TYPE = -26, - - ARGON2_OUT_PTR_MISMATCH = -27, - - ARGON2_THREADS_TOO_FEW = -28, - ARGON2_THREADS_TOO_MANY = -29, - - ARGON2_MISSING_ARGS = -30, - - ARGON2_ENCODING_FAIL = -31, - - ARGON2_DECODING_FAIL = -32, - - ARGON2_THREAD_FAIL = -33, - - ARGON2_DECODING_LENGTH_FAIL = -34, - - ARGON2_VERIFY_MISMATCH = -35 -} argon2_error_codes; - -/* Memory allocator types --- for external allocation */ -typedef int (*allocate_fptr)(uint8_t **memory, size_t bytes_to_allocate); -typedef void (*deallocate_fptr)(uint8_t *memory, size_t bytes_to_allocate); - -/* Argon2 external data structures */ - -/* - ***** - * Context: structure to hold Argon2 inputs: - * output array and its length, - * password and its length, - * salt and its length, - * secret and its length, - * associated data and its length, - * number of passes, amount of used memory (in KBytes, can be rounded up a bit) - * number of parallel threads that will be run. - * All the parameters above affect the output hash value. - * Additionally, two function pointers can be provided to allocate and - * deallocate the memory (if NULL, memory will be allocated internally). - * Also, three flags indicate whether to erase password, secret as soon as they - * are pre-hashed (and thus not needed anymore), and the entire memory - ***** - * Simplest situation: you have output array out[8], password is stored in - * pwd[32], salt is stored in salt[16], you do not have keys nor associated - * data. You need to spend 1 GB of RAM and you run 5 passes of Argon2d with - * 4 parallel lanes. - * You want to erase the password, but you're OK with last pass not being - * erased. You want to use the default memory allocator. - * Then you initialize: - Argon2_Context(out,8,pwd,32,salt,16,NULL,0,NULL,0,5,1<<20,4,4,NULL,NULL,true,false,false,false) - */ -typedef struct Argon2_Context { - uint8_t *out; /* output array */ - uint32_t outlen; /* digest length */ - - uint8_t *pwd; /* password array */ - uint32_t pwdlen; /* password length */ - - uint8_t *salt; /* salt array */ - uint32_t saltlen; /* salt length */ - - uint8_t *secret; /* key array */ - uint32_t secretlen; /* key length */ - - uint8_t *ad; /* associated data array */ - uint32_t adlen; /* associated data length */ - - uint32_t t_cost; /* number of passes */ - uint32_t m_cost; /* amount of memory requested (KB) */ - uint32_t lanes; /* number of lanes */ - uint32_t threads; /* maximum number of threads */ - - uint32_t version; /* version number */ - - allocate_fptr allocate_cbk; /* pointer to memory allocator */ - deallocate_fptr free_cbk; /* pointer to memory deallocator */ - - uint32_t flags; /* array of bool options */ -} argon2_context; - -/* Argon2 primitive type */ -typedef enum Argon2_type { - Argon2_d = 0, - Argon2_i = 1, - Argon2_id = 2, - Argon2_u = 10 -} argon2_type; - -/* Version of the algorithm */ -typedef enum Argon2_version { - ARGON2_VERSION_10 = 0x10, - ARGON2_VERSION_13 = 0x13, - ARGON2_VERSION_NUMBER = ARGON2_VERSION_13 -} argon2_version; - -/* - * Function that gives the string representation of an argon2_type. - * @param type The argon2_type that we want the string for - * @param uppercase Whether the string should have the first letter uppercase - * @return NULL if invalid type, otherwise the string representation. - */ -ARGON2_PUBLIC const char *argon2_type2string(argon2_type type, int uppercase); - -/* - * Function that performs memory-hard hashing with certain degree of parallelism - * @param context Pointer to the Argon2 internal structure - * @return Error code if smth is wrong, ARGON2_OK otherwise - */ -ARGON2_PUBLIC int argon2_ctx(argon2_context *context, argon2_type type); - -/** - * Hashes a password with Argon2i, producing an encoded hash - * @param t_cost Number of iterations - * @param m_cost Sets memory usage to m_cost kibibytes - * @param parallelism Number of threads and compute lanes - * @param pwd Pointer to password - * @param pwdlen Password size in bytes - * @param salt Pointer to salt - * @param saltlen Salt size in bytes - * @param hashlen Desired length of the hash in bytes - * @param encoded Buffer where to write the encoded hash - * @param encodedlen Size of the buffer (thus max size of the encoded hash) - * @pre Different parallelism levels will give different results - * @pre Returns ARGON2_OK if successful - */ -ARGON2_PUBLIC int argon2i_hash_encoded(const uint32_t t_cost, - const uint32_t m_cost, - const uint32_t parallelism, - const void *pwd, const size_t pwdlen, - const void *salt, const size_t saltlen, - const size_t hashlen, char *encoded, - const size_t encodedlen); - -/** - * Hashes a password with Argon2i, producing a raw hash at @hash - * @param t_cost Number of iterations - * @param m_cost Sets memory usage to m_cost kibibytes - * @param parallelism Number of threads and compute lanes - * @param pwd Pointer to password - * @param pwdlen Password size in bytes - * @param salt Pointer to salt - * @param saltlen Salt size in bytes - * @param hash Buffer where to write the raw hash - updated by the function - * @param hashlen Desired length of the hash in bytes - * @pre Different parallelism levels will give different results - * @pre Returns ARGON2_OK if successful - */ -ARGON2_PUBLIC int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, - const size_t hashlen); - -ARGON2_PUBLIC int argon2d_hash_encoded(const uint32_t t_cost, - const uint32_t m_cost, - const uint32_t parallelism, - const void *pwd, const size_t pwdlen, - const void *salt, const size_t saltlen, - const size_t hashlen, char *encoded, - const size_t encodedlen); - -ARGON2_PUBLIC int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, - const size_t hashlen); - -ARGON2_PUBLIC int argon2id_hash_encoded(const uint32_t t_cost, - const uint32_t m_cost, - const uint32_t parallelism, - const void *pwd, const size_t pwdlen, - const void *salt, const size_t saltlen, - const size_t hashlen, char *encoded, - const size_t encodedlen); - -ARGON2_PUBLIC int argon2id_hash_raw(const uint32_t t_cost, - const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, - const size_t hashlen); - -ARGON2_PUBLIC int argon2u_hash_encoded(const uint32_t t_cost, - const uint32_t m_cost, - const uint32_t parallelism, - const void *pwd, const size_t pwdlen, - const void *salt, const size_t saltlen, - const size_t hashlen, char *encoded, - const size_t encodedlen); - -ARGON2_PUBLIC int argon2u_hash_raw(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, - const size_t hashlen); - -/* generic function underlying the above ones */ -ARGON2_PUBLIC int argon2_hash(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, - const size_t hashlen, char *encoded, - const size_t encodedlen, argon2_type type, - const uint32_t version); - -/** - * Verifies a password against an encoded string - * Encoded string is restricted as in validate_inputs() - * @param encoded String encoding parameters, salt, hash - * @param pwd Pointer to password - * @pre Returns ARGON2_OK if successful - */ -ARGON2_PUBLIC int argon2i_verify(const char *encoded, const void *pwd, - const size_t pwdlen); - -ARGON2_PUBLIC int argon2d_verify(const char *encoded, const void *pwd, - const size_t pwdlen); - -ARGON2_PUBLIC int argon2id_verify(const char *encoded, const void *pwd, - const size_t pwdlen); - -ARGON2_PUBLIC int argon2u_verify(const char *encoded, const void *pwd, - const size_t pwdlen); - -/* generic function underlying the above ones */ -ARGON2_PUBLIC int argon2_verify(const char *encoded, const void *pwd, - const size_t pwdlen, argon2_type type); - -/** - * Argon2d: Version of Argon2 that picks memory blocks depending - * on the password and salt. Only for side-channel-free - * environment!! - ***** - * @param context Pointer to current Argon2 context - * @return Zero if successful, a non zero error code otherwise - */ -ARGON2_PUBLIC int argon2d_ctx(argon2_context *context); - -/** - * Argon2i: Version of Argon2 that picks memory blocks - * independent on the password and salt. Good for side-channels, - * but worse w.r.t. tradeoff attacks if only one pass is used. - ***** - * @param context Pointer to current Argon2 context - * @return Zero if successful, a non zero error code otherwise - */ -ARGON2_PUBLIC int argon2i_ctx(argon2_context *context); - -/** - * Argon2id: Version of Argon2 where the first half-pass over memory is - * password-independent, the rest are password-dependent (on the password and - * salt). OK against side channels (they reduce to 1/2-pass Argon2i), and - * better with w.r.t. tradeoff attacks (similar to Argon2d). - ***** - * @param context Pointer to current Argon2 context - * @return Zero if successful, a non zero error code otherwise - */ -ARGON2_PUBLIC int argon2id_ctx(argon2_context *context); - -/** - * Argon2u: Version of Argon2 where the first three-quarter-pass over memory is - * password-independent, the rest are password-dependent (on the password and - * salt). OK against side channels (they reduce to 3/4-pass Argon2i), and - * better with w.r.t. tradeoff attacks (similar to Argon2d). - ***** - * @param context Pointer to current Argon2 context - * @return Zero if successful, a non zero error code otherwise - */ -ARGON2_PUBLIC int argon2u_ctx(argon2_context *context); - -/** - * Verify if a given password is correct for Argon2d hashing - * @param context Pointer to current Argon2 context - * @param hash The password hash to verify. The length of the hash is - * specified by the context outlen member - * @return Zero if successful, a non zero error code otherwise - */ -ARGON2_PUBLIC int argon2d_verify_ctx(argon2_context *context, const char *hash); - -/** - * Verify if a given password is correct for Argon2i hashing - * @param context Pointer to current Argon2 context - * @param hash The password hash to verify. The length of the hash is - * specified by the context outlen member - * @return Zero if successful, a non zero error code otherwise - */ -ARGON2_PUBLIC int argon2i_verify_ctx(argon2_context *context, const char *hash); - -/** - * Verify if a given password is correct for Argon2id hashing - * @param context Pointer to current Argon2 context - * @param hash The password hash to verify. The length of the hash is - * specified by the context outlen member - * @return Zero if successful, a non zero error code otherwise - */ -ARGON2_PUBLIC int argon2id_verify_ctx(argon2_context *context, - const char *hash); - -/** - * Verify if a given password is correct for Argon2u hashing - * @param context Pointer to current Argon2 context - * @param hash The password hash to verify. The length of the hash is - * specified by the context outlen member - * @return Zero if successful, a non zero error code otherwise - */ -ARGON2_PUBLIC int argon2u_verify_ctx(argon2_context *context, const char *hash); - -/* generic function underlying the above ones */ -ARGON2_PUBLIC int argon2_verify_ctx(argon2_context *context, const char *hash, - argon2_type type); - -/** - * Get the associated error message for given error code - * @return The error message associated with the given error code - */ -ARGON2_PUBLIC const char *argon2_error_message(int error_code); - -/** - * Returns the encoded hash length for the given input parameters - * @param t_cost Number of iterations - * @param m_cost Memory usage in kibibytes - * @param parallelism Number of threads; used to compute lanes - * @param saltlen Salt size in bytes - * @param hashlen Hash size in bytes - * @param type The argon2_type that we want the encoded length for - * @return The encoded hash length in bytes - */ -ARGON2_PUBLIC size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, - uint32_t parallelism, uint32_t saltlen, - uint32_t hashlen, argon2_type type); - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/pkg/urcrypt/argon2/kats/argon2d b/pkg/urcrypt/argon2/kats/argon2d deleted file mode 100644 index 760cd3154..000000000 --- a/pkg/urcrypt/argon2/kats/argon2d +++ /dev/null @@ -1,12304 +0,0 @@ -======================================= -Argon2d version number 19 -======================================= -Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes -Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 -Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 -Secret[8]: 03 03 03 03 03 03 03 03 -Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 -Pre-hashing digest: b8 81 97 91 a0 35 96 60 bb 77 09 c8 5f a4 8f 04 d5 d8 2c 05 c5 f2 15 cc db 88 54 91 71 7c f7 57 08 2c 28 b9 51 be 38 14 10 b5 fc 2e b7 27 40 33 b9 fd c7 ae 67 2b ca ac 5d 17 90 97 a4 af 31 09 - - After pass 0: -Block 0000 [ 0]: db2fea6b2c6f5c8a -Block 0000 [ 1]: 719413be00f82634 -Block 0000 [ 2]: a1e3f6dd42aa25cc -Block 0000 [ 3]: 3ea8efd4d55ac0d1 -Block 0000 [ 4]: 1278849d789aa327 -Block 0000 [ 5]: 54ec500e01cb4887 -Block 0000 [ 6]: 96c5956594a99199 -Block 0000 [ 7]: 54ef81c17e9b4b85 -Block 0000 [ 8]: baed2f6297b02ec0 -Block 0000 [ 9]: 4aaabe9242c77d92 -Block 0000 [ 10]: 77ee20571b300aba -Block 0000 [ 11]: f3eb71a1198a6329 -Block 0000 [ 12]: 426d5f6ae87a9437 -Block 0000 [ 13]: 6da602fb6e9da76f -Block 0000 [ 14]: 6cd3a4c30d15d1c8 -Block 0000 [ 15]: 5d2b71f0503a6081 -Block 0000 [ 16]: 5546d897e9ff2979 -Block 0000 [ 17]: 3f4dfa67e5766a1e -Block 0000 [ 18]: 4124d05b5a90526c -Block 0000 [ 19]: 7fdf2f081232cf92 -Block 0000 [ 20]: 5966a32b400ba845 -Block 0000 [ 21]: 1bc8d3001e30b570 -Block 0000 [ 22]: ab4f59b1db7de22c -Block 0000 [ 23]: c8c3b695f2999d99 -Block 0000 [ 24]: ed809c6fb5b3e08b -Block 0000 [ 25]: a35525b5cdb05508 -Block 0000 [ 26]: be72096c694a09a5 -Block 0000 [ 27]: e64fb95af6124cdb -Block 0000 [ 28]: 1283aca69967b329 -Block 0000 [ 29]: 573a3c93e1c4d2d0 -Block 0000 [ 30]: 4fe159afa866e46a -Block 0000 [ 31]: e1613f8cea969fb2 -Block 0000 [ 32]: 337f483e3cc6d5ff -Block 0000 [ 33]: 3434681c54e6162b -Block 0000 [ 34]: a02a65f1c3451133 -Block 0000 [ 35]: 9b5f838814d81637 -Block 0000 [ 36]: 52327c997c05bd67 -Block 0000 [ 37]: 49ceb51f96966824 -Block 0000 [ 38]: 589749ef2ded3cef -Block 0000 [ 39]: 369a0a5a280aceef -Block 0000 [ 40]: 53d2c8db35d546df -Block 0000 [ 41]: 437a8603e4c91a8b -Block 0000 [ 42]: 4a4642967b88dcda -Block 0000 [ 43]: 4b67d8a64d98ce65 -Block 0000 [ 44]: 7a51353e30a4d18c -Block 0000 [ 45]: ecfb8e818ddb5e3a -Block 0000 [ 46]: 687554e011af89b3 -Block 0000 [ 47]: 754ef2b08241903f -Block 0000 [ 48]: 898ed0d448d9bf80 -Block 0000 [ 49]: f98e7b29f668f39d -Block 0000 [ 50]: 1593baefbd91bcef -Block 0000 [ 51]: 9f48d75f063a4247 -Block 0000 [ 52]: b44c4730eb25dbde -Block 0000 [ 53]: ab1984298888f3be -Block 0000 [ 54]: 99636cee27f6ff9c -Block 0000 [ 55]: d771122043a2bcf5 -Block 0000 [ 56]: 99b7cdcb1768b8fc -Block 0000 [ 57]: c784bfc27e55790d -Block 0000 [ 58]: 587a90b47c57f0ee -Block 0000 [ 59]: c114a05eba21ff32 -Block 0000 [ 60]: 7fdceebe6889d888 -Block 0000 [ 61]: 1cbcf477efde21b7 -Block 0000 [ 62]: 4d9c10146cc32cc1 -Block 0000 [ 63]: 6fd032cd8f4bad32 -Block 0000 [ 64]: 05d46657a397048c -Block 0000 [ 65]: 5b4d561105d0db07 -Block 0000 [ 66]: c97ac2acc721fc88 -Block 0000 [ 67]: 93320ace2a54681d -Block 0000 [ 68]: 43dae71f04080ccf -Block 0000 [ 69]: 39f3a8dcbfa87912 -Block 0000 [ 70]: 27425b8b6f328d71 -Block 0000 [ 71]: 514b4457fe7aba28 -Block 0000 [ 72]: 258a430d30f0bc9f -Block 0000 [ 73]: 8d02b571f1c44624 -Block 0000 [ 74]: 296d7de559b099b0 -Block 0000 [ 75]: dbf8f772a054c3c1 -Block 0000 [ 76]: 19ec7cacf3967d0b -Block 0000 [ 77]: a40ba6bb7cbde791 -Block 0000 [ 78]: 43e99ec3f241aab7 -Block 0000 [ 79]: 12201cfde1128feb -Block 0000 [ 80]: 08b7689bb28fbeb7 -Block 0000 [ 81]: 2e96cc1546add647 -Block 0000 [ 82]: 65f12262aec7f677 -Block 0000 [ 83]: 462f640439ce4d40 -Block 0000 [ 84]: f2bc0d2e1b36d570 -Block 0000 [ 85]: 768cc6c87b6301e0 -Block 0000 [ 86]: bc4723908e88ff53 -Block 0000 [ 87]: 7887e378709a8b42 -Block 0000 [ 88]: de34544f59b8c144 -Block 0000 [ 89]: 84f7bb9129ea343a -Block 0000 [ 90]: f375bae1f1471e11 -Block 0000 [ 91]: 05c203052706f0dc -Block 0000 [ 92]: 627c32574d945282 -Block 0000 [ 93]: 5ff520c44d1cca7e -Block 0000 [ 94]: 06488dc3ccb24791 -Block 0000 [ 95]: 380fd531ccc2bc8d -Block 0000 [ 96]: 44d564d042d8a8e1 -Block 0000 [ 97]: ed01c6baed1cfd77 -Block 0000 [ 98]: 09e03973e4c4e8d0 -Block 0000 [ 99]: 0e814a59b8165a88 -Block 0000 [100]: 3ecd0fbe0196bb77 -Block 0000 [101]: 7fc4b520e11e8e47 -Block 0000 [102]: b77b6f2a5d754c6a -Block 0000 [103]: cd7869cb41b4e93d -Block 0000 [104]: b33588ab98af17a7 -Block 0000 [105]: 4667595e8112205d -Block 0000 [106]: 7fb587f723c62728 -Block 0000 [107]: e1f5311b30106b58 -Block 0000 [108]: f289ca11b2e3df4f -Block 0000 [109]: d50eab9479264fcc -Block 0000 [110]: 320bd31fa0ae830e -Block 0000 [111]: 458d7359106a0631 -Block 0000 [112]: c579ebd5456d59ea -Block 0000 [113]: 7de55d003eaaa255 -Block 0000 [114]: 7177eaaf395d9c67 -Block 0000 [115]: 9714192984bce397 -Block 0000 [116]: 16facb8107b05308 -Block 0000 [117]: 21d794cd54c9b151 -Block 0000 [118]: c9f71fa973d25883 -Block 0000 [119]: fdf9f60a11255ce8 -Block 0000 [120]: ae921043f61ba204 -Block 0000 [121]: 5636e1c68a2db5a5 -Block 0000 [122]: 6359770f48a1970f -Block 0000 [123]: e5ccffd488d54ca1 -Block 0000 [124]: 89e89ce9a892a965 -Block 0000 [125]: 11a1d552040e9f67 -Block 0000 [126]: 921a0dd7aead4224 -Block 0000 [127]: 8b298b5c367f7b39 -Block 0001 [ 0]: f7180a33ba9d571c -Block 0001 [ 1]: a34284b17ff613ff -Block 0001 [ 2]: 88fb62505306e91b -Block 0001 [ 3]: 99182c1bbe35a905 -Block 0001 [ 4]: b22b57179b3b38cb -Block 0001 [ 5]: 7dd134b46391e700 -Block 0001 [ 6]: cfa78494d6edc163 -Block 0001 [ 7]: d6e11db6febc3b53 -Block 0001 [ 8]: 3a1182fff056748a -Block 0001 [ 9]: 4a546d640288712c -Block 0001 [ 10]: 2574029c58ef3efd -Block 0001 [ 11]: 34c73cddabec3e98 -Block 0001 [ 12]: ed1138549ca015b4 -Block 0001 [ 13]: af132ca0de9e5e4d -Block 0001 [ 14]: c3800df9c81a2654 -Block 0001 [ 15]: b07f5cac8decb77e -Block 0001 [ 16]: 3bf88cbd16fac9a5 -Block 0001 [ 17]: 01e8b1c2acde7da5 -Block 0001 [ 18]: 5cc42f01d1ca339b -Block 0001 [ 19]: e808119da64d5035 -Block 0001 [ 20]: 27f2dc395d740631 -Block 0001 [ 21]: 3435bb42bcf41e3f -Block 0001 [ 22]: efd51e8fd8f75262 -Block 0001 [ 23]: 0218cd8cb64d7666 -Block 0001 [ 24]: 8751a679668aaaa0 -Block 0001 [ 25]: df274353f81f7884 -Block 0001 [ 26]: a0b214e15caa0ad5 -Block 0001 [ 27]: b6fdbdee571b01b4 -Block 0001 [ 28]: 72246eb1622ec154 -Block 0001 [ 29]: 4c1c25982d6f2dab -Block 0001 [ 30]: 05b9f3e0ad168986 -Block 0001 [ 31]: 27bff0a68798a1d0 -Block 0001 [ 32]: 1f44db82c1c7e7fe -Block 0001 [ 33]: ffb3bdab65bc7d2c -Block 0001 [ 34]: 450d02c9a8dd071d -Block 0001 [ 35]: a88d77a0da1d2dd9 -Block 0001 [ 36]: 50c6a8c821450618 -Block 0001 [ 37]: 5fb848148850ad38 -Block 0001 [ 38]: a192eab246a0d110 -Block 0001 [ 39]: 22b17b7a5626f975 -Block 0001 [ 40]: fb31ad45afb66ba4 -Block 0001 [ 41]: a7ec0feb0c44495e -Block 0001 [ 42]: 3405f81d4bbf5aef -Block 0001 [ 43]: b00e2aae495a4bc4 -Block 0001 [ 44]: b15206a8c175cb1f -Block 0001 [ 45]: 8096bb72edfd1cfd -Block 0001 [ 46]: 2deb7c3265f94a3a -Block 0001 [ 47]: 3248bbee1e385785 -Block 0001 [ 48]: 96697465d6c51a2d -Block 0001 [ 49]: f46460debf517212 -Block 0001 [ 50]: 8194fc09854dd60b -Block 0001 [ 51]: 66a7a5738655b4d8 -Block 0001 [ 52]: 04148cf4680acf01 -Block 0001 [ 53]: 8fdee6c9070506cb -Block 0001 [ 54]: 456e54d5edc02b52 -Block 0001 [ 55]: d3c3e074fa5c58d6 -Block 0001 [ 56]: 9144d1c46832b26c -Block 0001 [ 57]: 765be92b893ee7a6 -Block 0001 [ 58]: d3639b2617c63271 -Block 0001 [ 59]: 34dbc7ed83967845 -Block 0001 [ 60]: 59f7b9d2e55f9ad8 -Block 0001 [ 61]: e861b20bbc3bc7cc -Block 0001 [ 62]: 69ef1a8b7352058f -Block 0001 [ 63]: 1c4557528f2ff680 -Block 0001 [ 64]: f1272b295306297c -Block 0001 [ 65]: be1b32fdcdac3f89 -Block 0001 [ 66]: bfff0baee51735ac -Block 0001 [ 67]: badb585f9cacf724 -Block 0001 [ 68]: ba38493300e4c942 -Block 0001 [ 69]: 430dff3571065a0a -Block 0001 [ 70]: af2a00e52bd7ec7e -Block 0001 [ 71]: 675229a78358e776 -Block 0001 [ 72]: a81efa39233ddd81 -Block 0001 [ 73]: 32f0b4679eb2dbdd -Block 0001 [ 74]: e1b46c89f5a2691e -Block 0001 [ 75]: a81885bd728f95fd -Block 0001 [ 76]: b1e8fc4fac462cf9 -Block 0001 [ 77]: be28523020ce0b37 -Block 0001 [ 78]: 2b9b38ffae3df39f -Block 0001 [ 79]: d2e3a40120592659 -Block 0001 [ 80]: 083ae5a798856693 -Block 0001 [ 81]: 14fefaad3bbe20b1 -Block 0001 [ 82]: 7ccac041eca182df -Block 0001 [ 83]: 8e876b4533ba59a1 -Block 0001 [ 84]: 5050743b0198dcc4 -Block 0001 [ 85]: 6425fc13b0a6cb97 -Block 0001 [ 86]: edde0a4351adcbe9 -Block 0001 [ 87]: 643dc67ddccebeb8 -Block 0001 [ 88]: 1d06ff28237de139 -Block 0001 [ 89]: 695b7cfdb1cc33e8 -Block 0001 [ 90]: e5d1775842a51de5 -Block 0001 [ 91]: dd8925515ad2950b -Block 0001 [ 92]: 389f14e2e2ab7033 -Block 0001 [ 93]: 41f3a503fb7a542f -Block 0001 [ 94]: 29f6e2d8120e935d -Block 0001 [ 95]: 5ecee71853759564 -Block 0001 [ 96]: 0d2c0e7325f39d1d -Block 0001 [ 97]: 79549a2458b19519 -Block 0001 [ 98]: 595af605c0a319ea -Block 0001 [ 99]: 3fdad667164a1aeb -Block 0001 [100]: c0664af6ef191a7c -Block 0001 [101]: a5ba28896955c8b8 -Block 0001 [102]: da00aa274bdb05ec -Block 0001 [103]: 3e15c6cbcb67b2be -Block 0001 [104]: 85f2be2974588e9d -Block 0001 [105]: d9f37bb0e736a36f -Block 0001 [106]: dce4bc3edd830140 -Block 0001 [107]: 6151537aaa93f696 -Block 0001 [108]: 42beb3252800334a -Block 0001 [109]: 3b58a554b8973b60 -Block 0001 [110]: 6ef0f8dda98652ef -Block 0001 [111]: 2fadd0a1930dd7c3 -Block 0001 [112]: 06b2ce7bc4b8b503 -Block 0001 [113]: 66e4e2c48bcbf641 -Block 0001 [114]: d24e0268ad250901 -Block 0001 [115]: 7d4595caf0fa8581 -Block 0001 [116]: 2be6d7e0c8869901 -Block 0001 [117]: f75aec50f13b97fe -Block 0001 [118]: 2e090b419d1d2ff3 -Block 0001 [119]: 99ef2bbc132c7155 -Block 0001 [120]: 5f9196f038304a92 -Block 0001 [121]: 7152b4c3f11df557 -Block 0001 [122]: 03df91b1ddc97e7f -Block 0001 [123]: bb0e53bdfc8fb73c -Block 0001 [124]: cba896c6ecc4bee5 -Block 0001 [125]: fecc10891efb9caf -Block 0001 [126]: ec052df7554e2e7b -Block 0001 [127]: 4924c3dc10d8fd85 -Block 0002 [ 0]: dd269d6d1fe274bd -Block 0002 [ 1]: eaf87fd713312aeb -Block 0002 [ 2]: 8d4ba63951096c16 -Block 0002 [ 3]: 426a1231958f05d5 -Block 0002 [ 4]: 3b8b0f1949550baa -Block 0002 [ 5]: 8f61aad93507eb55 -Block 0002 [ 6]: 677e1f8f34ce88f2 -Block 0002 [ 7]: c4b1c172380afc85 -Block 0002 [ 8]: 6e3aa0bfda9f3090 -Block 0002 [ 9]: 7cab00b1179c425b -Block 0002 [ 10]: f97da6d4297c917d -Block 0002 [ 11]: ac4a2bca1203dc84 -Block 0002 [ 12]: bb3163556d3ecc3e -Block 0002 [ 13]: 3458c59f278ef520 -Block 0002 [ 14]: 4549b4a48a89f736 -Block 0002 [ 15]: 9c3356014b48be9d -Block 0002 [ 16]: a92c3171216be701 -Block 0002 [ 17]: b7c00ce80fb29dae -Block 0002 [ 18]: da49b7a803cfd49b -Block 0002 [ 19]: d6565369d2052776 -Block 0002 [ 20]: 6cfe1feda4d9c1fd -Block 0002 [ 21]: 8c8913c30028cc74 -Block 0002 [ 22]: bb866e6957a36aef -Block 0002 [ 23]: 5cb63399402b4668 -Block 0002 [ 24]: 1b5456d4cb6636de -Block 0002 [ 25]: c8fa9edf08541cef -Block 0002 [ 26]: 58832e65eda9309d -Block 0002 [ 27]: 143fde9eaacfc468 -Block 0002 [ 28]: 1ea0be670283ac5e -Block 0002 [ 29]: db0aa713e7be541b -Block 0002 [ 30]: 4c5fa13cec7b9957 -Block 0002 [ 31]: e40be01efef834fc -Block 0002 [ 32]: ee247ad65634a5d3 -Block 0002 [ 33]: 3dbb2e31d2ccfa7d -Block 0002 [ 34]: 0a910887da788607 -Block 0002 [ 35]: 94afaa1f565ad409 -Block 0002 [ 36]: de8c385415b7c6e9 -Block 0002 [ 37]: 9d70874bf5eba118 -Block 0002 [ 38]: 6c07b9fa57d5bc8f -Block 0002 [ 39]: 86c2e0eb098d1eba -Block 0002 [ 40]: 2e9cad031109ec88 -Block 0002 [ 41]: 54e83cba6599e437 -Block 0002 [ 42]: 16f1cd22843661be -Block 0002 [ 43]: d628ed0e9ee3d343 -Block 0002 [ 44]: fa8d3b772d22f922 -Block 0002 [ 45]: e4ea1efae60bb099 -Block 0002 [ 46]: 3f8abd4f93844c49 -Block 0002 [ 47]: 72e39e393fc65f19 -Block 0002 [ 48]: 70b3c48abd5ebefe -Block 0002 [ 49]: a251c297f3c9f146 -Block 0002 [ 50]: b6e8da00c83218fb -Block 0002 [ 51]: 502a5e772bac9098 -Block 0002 [ 52]: c717742be58356a3 -Block 0002 [ 53]: afca5b096967d6ab -Block 0002 [ 54]: e97c55d4c7dad2a1 -Block 0002 [ 55]: 452751179df9ea88 -Block 0002 [ 56]: 0789c627ffdbb196 -Block 0002 [ 57]: afa3e13bc2d20692 -Block 0002 [ 58]: c4a9f186650522d8 -Block 0002 [ 59]: a639b0ac85816a68 -Block 0002 [ 60]: a7e813fdfcdb17e0 -Block 0002 [ 61]: 6b9072999b6c766b -Block 0002 [ 62]: c8723a14860af1bc -Block 0002 [ 63]: 175f7fcaf3e3efad -Block 0002 [ 64]: b5dff4ca01082962 -Block 0002 [ 65]: ebf7904697e3e152 -Block 0002 [ 66]: 238a9ceb07db6e94 -Block 0002 [ 67]: dc6c845e0fb7b398 -Block 0002 [ 68]: b5c6122ec3ad1ced -Block 0002 [ 69]: 18f1239a9c6258b6 -Block 0002 [ 70]: 889553b3e5186020 -Block 0002 [ 71]: e46d535f909cff62 -Block 0002 [ 72]: 782fc6a6da899195 -Block 0002 [ 73]: d66602106655e56f -Block 0002 [ 74]: 92b3cea5bda0d657 -Block 0002 [ 75]: ceeac95de2189f8b -Block 0002 [ 76]: cf7d9de3742c540a -Block 0002 [ 77]: 709e7e293a012642 -Block 0002 [ 78]: a07915b0f1ebe100 -Block 0002 [ 79]: b07e80cc2b5dd3e3 -Block 0002 [ 80]: 20ac6fdb448fa0b2 -Block 0002 [ 81]: 94b9942695cbcbb8 -Block 0002 [ 82]: 311f8aaad789bf73 -Block 0002 [ 83]: caf04e5284e0c654 -Block 0002 [ 84]: 9300c30779fe56e4 -Block 0002 [ 85]: f8522aa857490cb1 -Block 0002 [ 86]: 4541922c719d65b4 -Block 0002 [ 87]: a8fe52948c78bea0 -Block 0002 [ 88]: 05c64d5df890f39a -Block 0002 [ 89]: 616ed72012588251 -Block 0002 [ 90]: e0b43de5aaa660e6 -Block 0002 [ 91]: d3531c2cc462424d -Block 0002 [ 92]: 8925e663e8112ab0 -Block 0002 [ 93]: 6e0c51f4b5123b69 -Block 0002 [ 94]: b9a46e0bbaf718c6 -Block 0002 [ 95]: 354c84845c1ea679 -Block 0002 [ 96]: f938f8aeb1dac4aa -Block 0002 [ 97]: 9ce45e15a40dabc0 -Block 0002 [ 98]: 05a443a6d5c0070d -Block 0002 [ 99]: 58de4d3dd78a1f71 -Block 0002 [100]: 7f46561d7b1884b4 -Block 0002 [101]: 3afa62f2f1882385 -Block 0002 [102]: a8242521b2a2dd09 -Block 0002 [103]: e9dd6211f0edc6b1 -Block 0002 [104]: 3684ae9600a661ee -Block 0002 [105]: 3c493b527698fa4a -Block 0002 [106]: acdf8c0ae547bf39 -Block 0002 [107]: cced5db75028ec30 -Block 0002 [108]: e592a369b0df07a2 -Block 0002 [109]: 1447b2d76a0d8b57 -Block 0002 [110]: 8d47814289002e20 -Block 0002 [111]: 8a6cebabe4bfa78c -Block 0002 [112]: b8d5c24d475de52d -Block 0002 [113]: b43ad32ce94d37dc -Block 0002 [114]: 21eca5ff11480da7 -Block 0002 [115]: 13fd97e3efa96b0d -Block 0002 [116]: 8a12187717976abd -Block 0002 [117]: 1a2bc270ca0f2856 -Block 0002 [118]: b836d6475e15f2e2 -Block 0002 [119]: 04f88dfdfd8b2a72 -Block 0002 [120]: ff9c5c6d0d288ad7 -Block 0002 [121]: e177fc6eef6599d8 -Block 0002 [122]: 6b4cb722482ae069 -Block 0002 [123]: aa3b58c166564292 -Block 0002 [124]: 75284d7db7495afa -Block 0002 [125]: a2223c5243a84893 -Block 0002 [126]: e980aaf0fc08301c -Block 0002 [127]: 07e96a224564f561 -Block 0003 [ 0]: 4a5f33e4aa0f4b24 -Block 0003 [ 1]: 74b1599a751a0e40 -Block 0003 [ 2]: 7648bcbafa8fde0e -Block 0003 [ 3]: 472fbc3e7f818be3 -Block 0003 [ 4]: 56a81d1eb0f4e388 -Block 0003 [ 5]: 822b3f5e6b6b1730 -Block 0003 [ 6]: ba45580cb101f4cc -Block 0003 [ 7]: 290754d62e6cce7a -Block 0003 [ 8]: 948f647900b662a2 -Block 0003 [ 9]: 57cfc6df71cf71a0 -Block 0003 [ 10]: 1722ac5aa4429df7 -Block 0003 [ 11]: 2bd56131730893d5 -Block 0003 [ 12]: 3b0fac05fe49310f -Block 0003 [ 13]: 59b94558676c1875 -Block 0003 [ 14]: 712fbccf992c1cfd -Block 0003 [ 15]: ab4c1e67173c95b7 -Block 0003 [ 16]: ca78ac3f3ec05fe1 -Block 0003 [ 17]: 4329991ad1d32531 -Block 0003 [ 18]: 67a577f45b95df88 -Block 0003 [ 19]: 2620b3d3889afff5 -Block 0003 [ 20]: b62732e9b207855c -Block 0003 [ 21]: ec4bac9eff014e78 -Block 0003 [ 22]: d936c2876fc1d56f -Block 0003 [ 23]: 41b37f7919dafd36 -Block 0003 [ 24]: 34f5bfc510b6f1bd -Block 0003 [ 25]: 700780640ab9aa78 -Block 0003 [ 26]: d16e7c95b49d7362 -Block 0003 [ 27]: 6544429cd2615175 -Block 0003 [ 28]: dabf343588eaf771 -Block 0003 [ 29]: d72449a5b3ab5873 -Block 0003 [ 30]: d9b9ca7d55747d23 -Block 0003 [ 31]: 2ece4be1cf5a2e99 -Block 0003 [ 32]: c6cdbc8cd725a922 -Block 0003 [ 33]: b139079c53fcbfd0 -Block 0003 [ 34]: 1e88db198f64fbd3 -Block 0003 [ 35]: 125b55f14ba51789 -Block 0003 [ 36]: 6f96b80b90a7fa45 -Block 0003 [ 37]: 406198e24a0ba096 -Block 0003 [ 38]: a29105896050b5e0 -Block 0003 [ 39]: 945d9788677d3391 -Block 0003 [ 40]: 802e7d305cd63255 -Block 0003 [ 41]: daacbbd0c7393898 -Block 0003 [ 42]: 2610a8d13ebdbe60 -Block 0003 [ 43]: d5953fef56fcf812 -Block 0003 [ 44]: f711a340a8c0c1f2 -Block 0003 [ 45]: d9c066e38168c679 -Block 0003 [ 46]: 6517a2cf0f0ea78c -Block 0003 [ 47]: 48985cd46ec3b306 -Block 0003 [ 48]: 6dc9a39170160a16 -Block 0003 [ 49]: f647600f302a0941 -Block 0003 [ 50]: 04102af1501b521b -Block 0003 [ 51]: 28c50bb275ef128c -Block 0003 [ 52]: c3e7d482090ce9e2 -Block 0003 [ 53]: b6879bee4977d1cf -Block 0003 [ 54]: 8b9d6ef567071bee -Block 0003 [ 55]: 2b02981d3c7fce71 -Block 0003 [ 56]: 1ada3aea276be7af -Block 0003 [ 57]: dd145aeadac33204 -Block 0003 [ 58]: ab18e04356a208a0 -Block 0003 [ 59]: d6e184c97d4b3864 -Block 0003 [ 60]: 3a7507d44c2d6917 -Block 0003 [ 61]: 64bd5b00012136ce -Block 0003 [ 62]: ed77dbf556e054a6 -Block 0003 [ 63]: dca248d800bc89ba -Block 0003 [ 64]: 8f74a5e29933e192 -Block 0003 [ 65]: 59b0460e3583e5ab -Block 0003 [ 66]: ed815fb3133ec6c7 -Block 0003 [ 67]: 151bdbadc9630fc2 -Block 0003 [ 68]: 6096f9a38b0bfdc6 -Block 0003 [ 69]: eaf65100a3cf5c50 -Block 0003 [ 70]: a9f4151b1b900586 -Block 0003 [ 71]: a695457135b20cd3 -Block 0003 [ 72]: ef6c6aac3a3a5497 -Block 0003 [ 73]: e0bb4329cc078888 -Block 0003 [ 74]: 1891f398b5d96011 -Block 0003 [ 75]: fa649c2bca16084d -Block 0003 [ 76]: 1c67e25f5fc82933 -Block 0003 [ 77]: 40b9806b0dee3332 -Block 0003 [ 78]: d91d9eab04d8e05b -Block 0003 [ 79]: 4bfca65c71cae454 -Block 0003 [ 80]: b276a2157bab9cbb -Block 0003 [ 81]: b87f21190c7825f6 -Block 0003 [ 82]: 5d1c99da2395a803 -Block 0003 [ 83]: e456839908106a2e -Block 0003 [ 84]: 42a7a74f484e7b88 -Block 0003 [ 85]: 6547ab46ab3f8e5b -Block 0003 [ 86]: 8e987511f85ca889 -Block 0003 [ 87]: 695238f363bf6cd2 -Block 0003 [ 88]: c6dcf17f6cb7bbc3 -Block 0003 [ 89]: c9f8509c8e84637a -Block 0003 [ 90]: eb517ec83c056f8a -Block 0003 [ 91]: 15b9cdb7f1dfdcae -Block 0003 [ 92]: 2e1194e754a4a2be -Block 0003 [ 93]: 3f6a3a58140e0f45 -Block 0003 [ 94]: 10b1cc31af190c0a -Block 0003 [ 95]: cf73be0f8afd8412 -Block 0003 [ 96]: 9766ec755228c4b2 -Block 0003 [ 97]: 637c3c5b06ca31f6 -Block 0003 [ 98]: 905da5bd011ddc3e -Block 0003 [ 99]: 410f3899cce9eaa5 -Block 0003 [100]: 59150e9b04b4a69d -Block 0003 [101]: bf512fb2757b16e2 -Block 0003 [102]: 94b12f119da458aa -Block 0003 [103]: a1a44cd6b831666d -Block 0003 [104]: a830ff1cee8f2557 -Block 0003 [105]: 2e881fd489a3f707 -Block 0003 [106]: a5868b29b028b67e -Block 0003 [107]: b0d8af6c48ce2cb6 -Block 0003 [108]: d85eecd25d77c1ad -Block 0003 [109]: cbc4a44882e12480 -Block 0003 [110]: 544dbc39292f2f33 -Block 0003 [111]: 8001372dd8c0854d -Block 0003 [112]: cd8de45f5e68497f -Block 0003 [113]: 42800cfa8e9de3b0 -Block 0003 [114]: 4b8db48b1bafa9c5 -Block 0003 [115]: 59c5db08b1255705 -Block 0003 [116]: a7f2bde359a2f516 -Block 0003 [117]: ef96aa9ed9da4791 -Block 0003 [118]: 599f81ad309e3794 -Block 0003 [119]: dbad21c8881f076f -Block 0003 [120]: 31f4ea7cad26f00b -Block 0003 [121]: 33c751b29e8ba961 -Block 0003 [122]: 120e5ac357fde45c -Block 0003 [123]: 5889c87f995ef82e -Block 0003 [124]: d06930cc570bb484 -Block 0003 [125]: 1314f624551afa5d -Block 0003 [126]: 49bccae63ff3135a -Block 0003 [127]: 68aeb82ef612c90b -Block 0004 [ 0]: 75cf7f435057da05 -Block 0004 [ 1]: 5fa9a015edecc3b1 -Block 0004 [ 2]: b3325174a5d45f4b -Block 0004 [ 3]: ac045dd7aa070547 -Block 0004 [ 4]: 760a3bde801efd61 -Block 0004 [ 5]: 29ba53ce7573d56c -Block 0004 [ 6]: 24d2101f7bf4f639 -Block 0004 [ 7]: 83f3556e5e8eb43f -Block 0004 [ 8]: 3cc66877e8d5016a -Block 0004 [ 9]: eb1c35540d8e9906 -Block 0004 [ 10]: f00b55c5c1e06e26 -Block 0004 [ 11]: d6a5165b6c1885a3 -Block 0004 [ 12]: d2811b93f9ab834f -Block 0004 [ 13]: 9d0557258f61edb2 -Block 0004 [ 14]: 07f8255621fc9618 -Block 0004 [ 15]: ae4b586c014f9ec6 -Block 0004 [ 16]: ec3836014f77e3c2 -Block 0004 [ 17]: b9911ef80161aa64 -Block 0004 [ 18]: 9ca62c3dcbc62020 -Block 0004 [ 19]: 3ffb28d86e7ec0e0 -Block 0004 [ 20]: 175679fa7fea816f -Block 0004 [ 21]: 30a6b89d44c8edbb -Block 0004 [ 22]: 48819b0e7f2bcd59 -Block 0004 [ 23]: 525858f7772e2bdb -Block 0004 [ 24]: ef5901d7b18b36a4 -Block 0004 [ 25]: 63bd442f2b3d6340 -Block 0004 [ 26]: 7a6f3878cbb89d56 -Block 0004 [ 27]: ad89aa9f7bf232cc -Block 0004 [ 28]: eeb77b64dcf9a009 -Block 0004 [ 29]: bc7e56339fced56f -Block 0004 [ 30]: 492fe116aefe8020 -Block 0004 [ 31]: 40ef14c0c916f44a -Block 0004 [ 32]: 27c6316e378a82a7 -Block 0004 [ 33]: ce5c0b7e763703a9 -Block 0004 [ 34]: 92c81bd10b1e008d -Block 0004 [ 35]: f6960dd9b508a3ad -Block 0004 [ 36]: 7401e08c33c802b5 -Block 0004 [ 37]: 018100c9dc56b87f -Block 0004 [ 38]: 150a5f6f10b10f8b -Block 0004 [ 39]: 1c284e29c18d225b -Block 0004 [ 40]: a27e542d5db0c667 -Block 0004 [ 41]: ee90318a26046e6c -Block 0004 [ 42]: d765ead85a540399 -Block 0004 [ 43]: 56533db96e0e1eb8 -Block 0004 [ 44]: 58ed5ee5629b9090 -Block 0004 [ 45]: 42e8ab0e460b8d17 -Block 0004 [ 46]: 11213401090ad8bd -Block 0004 [ 47]: bfc4823efc51914b -Block 0004 [ 48]: 134d198b80ce5571 -Block 0004 [ 49]: 6787fd9123ad4f2a -Block 0004 [ 50]: 42d6db3fbbab62cf -Block 0004 [ 51]: 56d6ac42819c8c1c -Block 0004 [ 52]: aea2608b849e88df -Block 0004 [ 53]: 984d22e7422a30db -Block 0004 [ 54]: 52efb62155fb0da7 -Block 0004 [ 55]: 370039ea938625bd -Block 0004 [ 56]: bd24fc01e0675a4b -Block 0004 [ 57]: 42404e268d028fe7 -Block 0004 [ 58]: 67f160abebebfa1d -Block 0004 [ 59]: 94a7b3eee4fb9f4e -Block 0004 [ 60]: f850f2a4d4db2b49 -Block 0004 [ 61]: 22a358c6251e3899 -Block 0004 [ 62]: 96eecea0930a4af7 -Block 0004 [ 63]: d75bce7e1bcaca47 -Block 0004 [ 64]: b80fedcc87eadb1b -Block 0004 [ 65]: 54b96798da68bd16 -Block 0004 [ 66]: b05b9a6dd3622c50 -Block 0004 [ 67]: e58fd5a7cc70ad72 -Block 0004 [ 68]: 1939f6f737bb007a -Block 0004 [ 69]: 08b8ed3e75fd711d -Block 0004 [ 70]: b6bfae0c877fe824 -Block 0004 [ 71]: d9d9e942c5dac552 -Block 0004 [ 72]: 542d87997ff6ab9c -Block 0004 [ 73]: 7f538deeb9e80b2d -Block 0004 [ 74]: 0a937577adc459e3 -Block 0004 [ 75]: 000509503fd7cf32 -Block 0004 [ 76]: f3a1eed284977fde -Block 0004 [ 77]: a8c91bac6a2c33a4 -Block 0004 [ 78]: 5932cd606b8c8e3c -Block 0004 [ 79]: cbd972f41417be96 -Block 0004 [ 80]: e0a5c3151fa6a03c -Block 0004 [ 81]: 10f4fb5b0458fe8a -Block 0004 [ 82]: 61023811aa937552 -Block 0004 [ 83]: d9fee5af6772fec0 -Block 0004 [ 84]: 40de55b55e4fcd16 -Block 0004 [ 85]: 6602ad68ac923126 -Block 0004 [ 86]: 8dd7e22e25f8fade -Block 0004 [ 87]: bdb66972663f2300 -Block 0004 [ 88]: 239ef85d83b8be0c -Block 0004 [ 89]: ae1d7173584d48d8 -Block 0004 [ 90]: 7b8b13ce97966729 -Block 0004 [ 91]: 44e87ba0b1f03d38 -Block 0004 [ 92]: b301ef27465f07ce -Block 0004 [ 93]: d67f6c2b925fc93a -Block 0004 [ 94]: 242668515882aa48 -Block 0004 [ 95]: 22c97753b467a139 -Block 0004 [ 96]: 7997dffb6ad65417 -Block 0004 [ 97]: ea18a9f6c2ed6336 -Block 0004 [ 98]: a73fff3e769afbd8 -Block 0004 [ 99]: e72f037a4d012e3b -Block 0004 [100]: dca1070c025d75a2 -Block 0004 [101]: d7fbf671f67dabb0 -Block 0004 [102]: 8240cb9987def406 -Block 0004 [103]: b5b655582720e251 -Block 0004 [104]: 95f052307724a402 -Block 0004 [105]: 898f694ec2f5d350 -Block 0004 [106]: 13d5949336179f40 -Block 0004 [107]: ab68ce11e05463b3 -Block 0004 [108]: 2a2a87ef1105b426 -Block 0004 [109]: a4a08a1950eb41f3 -Block 0004 [110]: 8d71e5193558fcbd -Block 0004 [111]: 75cbf21dfd1e84a0 -Block 0004 [112]: ba73cfd523a4d584 -Block 0004 [113]: d1468e7bff3d9dcb -Block 0004 [114]: f5b94e5888e3d071 -Block 0004 [115]: b5518abe5e84b654 -Block 0004 [116]: 826fda2d333407cf -Block 0004 [117]: 782db37d070a46b3 -Block 0004 [118]: e44c94bb1a87918e -Block 0004 [119]: ff802d7ff84fd6ac -Block 0004 [120]: ef0b4f377b6ffb0d -Block 0004 [121]: 5f7b900b8e883994 -Block 0004 [122]: d4a14d45b09f8a82 -Block 0004 [123]: 0285e5ddea5b8895 -Block 0004 [124]: 654d6b7867a3338e -Block 0004 [125]: 2df4c15c765b0038 -Block 0004 [126]: eda9ab30d67e4d72 -Block 0004 [127]: 828ee8d236f3dd62 -Block 0005 [ 0]: ce0d36af5fbd6f68 -Block 0005 [ 1]: d77f31b3a4e7f26a -Block 0005 [ 2]: bc8f82dc032a61b1 -Block 0005 [ 3]: 185c441b32babe3a -Block 0005 [ 4]: 1b0a2f90bb29c71c -Block 0005 [ 5]: 1ba919a1a30c9f76 -Block 0005 [ 6]: 2ab39ce0fe493b79 -Block 0005 [ 7]: aee4dc7120a2eecc -Block 0005 [ 8]: 0aa0166037779c01 -Block 0005 [ 9]: 5a242262af9161c4 -Block 0005 [ 10]: 3842cee480356cc8 -Block 0005 [ 11]: ace5c18c115a0327 -Block 0005 [ 12]: 1b242b83c275eb74 -Block 0005 [ 13]: eca18f8e399b2a1b -Block 0005 [ 14]: 9b9767106ea36294 -Block 0005 [ 15]: affd307d6c599270 -Block 0005 [ 16]: ab908e05a95ea728 -Block 0005 [ 17]: 020dcb8c9cad6b76 -Block 0005 [ 18]: 3f29b44c94eeb378 -Block 0005 [ 19]: c74e4becadf080e1 -Block 0005 [ 20]: 3d8a0c09cd8f4063 -Block 0005 [ 21]: 098a3627cc110c01 -Block 0005 [ 22]: 09e91371c95fa227 -Block 0005 [ 23]: d432d7e00528de20 -Block 0005 [ 24]: 4e1b531b205d00e5 -Block 0005 [ 25]: da647659ea08a347 -Block 0005 [ 26]: 75b817075757f562 -Block 0005 [ 27]: 14b2f6fd9ac456ed -Block 0005 [ 28]: e6e6582ad4b42a53 -Block 0005 [ 29]: fa73557a5e1f5a62 -Block 0005 [ 30]: a0ce5eac87b98730 -Block 0005 [ 31]: 5a8ebbf9c6c089b2 -Block 0005 [ 32]: db1b26c427ac7c7e -Block 0005 [ 33]: d9975deef1b77f4b -Block 0005 [ 34]: 0d346a2c877d9431 -Block 0005 [ 35]: d7fdc6e8f9f3b134 -Block 0005 [ 36]: 9430657f2d4551b9 -Block 0005 [ 37]: 7007133cb4cdd3e5 -Block 0005 [ 38]: 707fb7ed2ae55c59 -Block 0005 [ 39]: 93294988cc295c48 -Block 0005 [ 40]: e9bf4db5fbc1cea2 -Block 0005 [ 41]: 1ecb55c4f21a53ea -Block 0005 [ 42]: 9a4a75f979e2dd00 -Block 0005 [ 43]: 2a8e365046889bdc -Block 0005 [ 44]: 0fcfb36e8eb4ab8e -Block 0005 [ 45]: db5d5172030eee7b -Block 0005 [ 46]: ce170097bdb89426 -Block 0005 [ 47]: 56b169d594b09c15 -Block 0005 [ 48]: 225f10a91cdb02c6 -Block 0005 [ 49]: c39861e986249fcf -Block 0005 [ 50]: 7ae7c8c9932bac9b -Block 0005 [ 51]: de703a7cc7ef319b -Block 0005 [ 52]: 03874a532f07feed -Block 0005 [ 53]: a0c2e485d54df77c -Block 0005 [ 54]: b6fc72e0b5716a87 -Block 0005 [ 55]: 0cd89797a6753d97 -Block 0005 [ 56]: 475e735510d86da4 -Block 0005 [ 57]: 39a48e77b0b648d2 -Block 0005 [ 58]: 1bae8bad0cdbc64d -Block 0005 [ 59]: 060b290ffba35f12 -Block 0005 [ 60]: f586c88e2346baaa -Block 0005 [ 61]: 5f689663126ba25f -Block 0005 [ 62]: efe488f8ad30f968 -Block 0005 [ 63]: 653a3374e8cdb567 -Block 0005 [ 64]: 2412dd4b6fcf38fe -Block 0005 [ 65]: 43fdc2554c479aa3 -Block 0005 [ 66]: 4e4ccf4932b4e036 -Block 0005 [ 67]: b91582ee3161d432 -Block 0005 [ 68]: fcd95071b5e8fe01 -Block 0005 [ 69]: cd7523a9dc26c4c7 -Block 0005 [ 70]: 58bf47eadbe043b1 -Block 0005 [ 71]: c493a84069e6d701 -Block 0005 [ 72]: 1310593696022ce3 -Block 0005 [ 73]: a2d3749808a27627 -Block 0005 [ 74]: 4aa81c8265e45a75 -Block 0005 [ 75]: 1d9f43b9c5f2fdd4 -Block 0005 [ 76]: b2d53b7ba81b8c22 -Block 0005 [ 77]: ec6dec5fa3e97412 -Block 0005 [ 78]: ff11b2aa790499a6 -Block 0005 [ 79]: a5d7d7b3d0441fd2 -Block 0005 [ 80]: 92edbafa959a6550 -Block 0005 [ 81]: eb4e74ea7830d355 -Block 0005 [ 82]: 10b0f97c699177ad -Block 0005 [ 83]: 6e774e8e3b84c655 -Block 0005 [ 84]: 884612bf751ae947 -Block 0005 [ 85]: d8844041305209e2 -Block 0005 [ 86]: 4f5519c0b806f42c -Block 0005 [ 87]: ef4f16ef4caca11a -Block 0005 [ 88]: ce1d2390a9426430 -Block 0005 [ 89]: 4a282050ec3e0201 -Block 0005 [ 90]: ffd19c1157afa0c6 -Block 0005 [ 91]: 8fe0b8c890c386fe -Block 0005 [ 92]: 96e12bf8b1f76726 -Block 0005 [ 93]: 7fdd3df6053fb344 -Block 0005 [ 94]: 54abc965a92ee4ac -Block 0005 [ 95]: f02f6ea5f10b439a -Block 0005 [ 96]: 88b14772e5215a3f -Block 0005 [ 97]: 0c9e496f79c5e17a -Block 0005 [ 98]: bc99c4bc45caf42d -Block 0005 [ 99]: 1a7705997987c8a8 -Block 0005 [100]: 474ef0af0b85dfc8 -Block 0005 [101]: 69440fdaeed68cfa -Block 0005 [102]: a119edce664da081 -Block 0005 [103]: 942460fce9bc6f67 -Block 0005 [104]: 56edd7c43e735395 -Block 0005 [105]: e556ef2efa442d4f -Block 0005 [106]: 0ce0161e7944bb2a -Block 0005 [107]: 4a71159f4725f2a2 -Block 0005 [108]: 943a5a97403b8b7e -Block 0005 [109]: e9934b98a50821b1 -Block 0005 [110]: f6f93c625e714a0f -Block 0005 [111]: 0358af71f5f3d707 -Block 0005 [112]: 6513df4363dcd708 -Block 0005 [113]: 45cf7fb3ab28f915 -Block 0005 [114]: f0ecc3fabcbd07e3 -Block 0005 [115]: cf4de4bdad049eaf -Block 0005 [116]: 35594a058df4b18e -Block 0005 [117]: 2b25c1cd2a176af2 -Block 0005 [118]: 45a71cfa08b35c00 -Block 0005 [119]: 6ccb7f53cca788c7 -Block 0005 [120]: 25cb96798577f4dd -Block 0005 [121]: 913c54b058ab1709 -Block 0005 [122]: 2e324b5d5b7df67a -Block 0005 [123]: 6133fac505d62790 -Block 0005 [124]: 1fba4d2401f9870f -Block 0005 [125]: 002139471981c5f4 -Block 0005 [126]: c352642eea37f541 -Block 0005 [127]: dfe6bd2e638fa315 -Block 0006 [ 0]: afc3cb5d24d78ee8 -Block 0006 [ 1]: 659554bb4ec96f7b -Block 0006 [ 2]: a5d0225b10a29e3b -Block 0006 [ 3]: 7c637d0f2afb6e27 -Block 0006 [ 4]: 588aea062939b944 -Block 0006 [ 5]: 38c8afd4744672bc -Block 0006 [ 6]: dab595d8bb4cdffb -Block 0006 [ 7]: bbbef393ca71f32f -Block 0006 [ 8]: f5d45f05109d63d7 -Block 0006 [ 9]: 7a5c3d262c526c0b -Block 0006 [ 10]: da8bafd35e5069b6 -Block 0006 [ 11]: 918297d17ee797fb -Block 0006 [ 12]: 39320d32cf8d4ec6 -Block 0006 [ 13]: 1b70f9daf8e8f854 -Block 0006 [ 14]: 0bd5ef35f6de0a17 -Block 0006 [ 15]: e3723be9854d2946 -Block 0006 [ 16]: dc1939a2b8ddf140 -Block 0006 [ 17]: 08decf3387f67396 -Block 0006 [ 18]: c9627e4527095c6a -Block 0006 [ 19]: b7bea9f784c9c990 -Block 0006 [ 20]: 41e7f8e6b01ba679 -Block 0006 [ 21]: b0e5feb867d6deeb -Block 0006 [ 22]: d7df0a6deb6d443f -Block 0006 [ 23]: 61d7ac33ba0ae2a0 -Block 0006 [ 24]: 93ac174a57b2a517 -Block 0006 [ 25]: 1f3f6b66ae964272 -Block 0006 [ 26]: 2e305f0a1d1518b1 -Block 0006 [ 27]: 823ec4233a6317b1 -Block 0006 [ 28]: 2d43f0617675db3f -Block 0006 [ 29]: aa5cee5075e7aafb -Block 0006 [ 30]: 3451358e5b428d20 -Block 0006 [ 31]: 2e9c26ff065a27ec -Block 0006 [ 32]: 076e96e4f57cb9c4 -Block 0006 [ 33]: d24834ee48497064 -Block 0006 [ 34]: 7619dc9233d449b5 -Block 0006 [ 35]: 85b7ffae30372874 -Block 0006 [ 36]: 3f5c51e637cc3154 -Block 0006 [ 37]: b13ca9971d205e65 -Block 0006 [ 38]: 8947882913f53f2f -Block 0006 [ 39]: 97a68cde46209cae -Block 0006 [ 40]: a74855b63f7fbc78 -Block 0006 [ 41]: 44587edf73bcdf03 -Block 0006 [ 42]: d4135ee125b0d171 -Block 0006 [ 43]: 02306d041dd8846d -Block 0006 [ 44]: 60556ffadf0bea48 -Block 0006 [ 45]: 906d716ee211ead0 -Block 0006 [ 46]: 260d15cb9df34b8d -Block 0006 [ 47]: 13f2447cbbc686e6 -Block 0006 [ 48]: d7b0d80bd9444cee -Block 0006 [ 49]: fe37f87b31ed9190 -Block 0006 [ 50]: c8ffc3ccf7ea129e -Block 0006 [ 51]: 4299090758524b05 -Block 0006 [ 52]: 8b1e449c8aa11c60 -Block 0006 [ 53]: 01205e1c45ae3419 -Block 0006 [ 54]: cc59437963d7ae9b -Block 0006 [ 55]: 5ef5f570555fef01 -Block 0006 [ 56]: 299db72b400c78a5 -Block 0006 [ 57]: c895058e40b1fff2 -Block 0006 [ 58]: c4646d110490c1e9 -Block 0006 [ 59]: 391fc3b24f0db416 -Block 0006 [ 60]: d2f1e8d1b167a8bf -Block 0006 [ 61]: 591fb9b0fa5a1f7c -Block 0006 [ 62]: 313fab10223645fa -Block 0006 [ 63]: 7af43d95e6a1d595 -Block 0006 [ 64]: fe2ca7ee3dbc077b -Block 0006 [ 65]: 21387e44601ec9f9 -Block 0006 [ 66]: 1e00d189c00480cb -Block 0006 [ 67]: dba0f1b11cbe3c7f -Block 0006 [ 68]: 159f5c62e20ac794 -Block 0006 [ 69]: 843053d4f1876f95 -Block 0006 [ 70]: ac74ea56574f4461 -Block 0006 [ 71]: 0cbba62c01911fdf -Block 0006 [ 72]: 9ea785e198bb40d0 -Block 0006 [ 73]: e7e1b5ebde02baf7 -Block 0006 [ 74]: 9093879586663275 -Block 0006 [ 75]: 595241bc3ecebd8a -Block 0006 [ 76]: 3661789351fc4808 -Block 0006 [ 77]: 384847b49b26a1bb -Block 0006 [ 78]: cba3e34a38b91022 -Block 0006 [ 79]: 282e394edb58cc8c -Block 0006 [ 80]: 5ea53580559e126f -Block 0006 [ 81]: dbf2425682255163 -Block 0006 [ 82]: be2fd91a7dbd236c -Block 0006 [ 83]: 2787d4789ad70026 -Block 0006 [ 84]: 9985c2acadfd5b92 -Block 0006 [ 85]: af63c3ed508d8a17 -Block 0006 [ 86]: 900947553bec9649 -Block 0006 [ 87]: 41e3845ffc2ee3fb -Block 0006 [ 88]: f5f2d613417c6091 -Block 0006 [ 89]: 652a905d54d23008 -Block 0006 [ 90]: 696dcba75a422c33 -Block 0006 [ 91]: fbae4a9e644a972b -Block 0006 [ 92]: 56377880c80b7b98 -Block 0006 [ 93]: cdd849ac3456c35d -Block 0006 [ 94]: 06f0c0ea2066d717 -Block 0006 [ 95]: 664c6e9621fe116b -Block 0006 [ 96]: af7aea28925e0b1b -Block 0006 [ 97]: 26e2bfa2ecb4fa8b -Block 0006 [ 98]: 4f2762b4774c8ecf -Block 0006 [ 99]: 9d73f8f4bef65087 -Block 0006 [100]: 90a67f5dc176c8af -Block 0006 [101]: 826ab7e61a3d3bd3 -Block 0006 [102]: 31a4c60bcdbc3a49 -Block 0006 [103]: 58f8320c580548b5 -Block 0006 [104]: 5cd5fb246ce9e50d -Block 0006 [105]: 10e35b24687425ba -Block 0006 [106]: 8b063cb4f7c5f477 -Block 0006 [107]: ac102106f4f45fdb -Block 0006 [108]: a5ced9abd4084b5a -Block 0006 [109]: 14daf22aeed1864f -Block 0006 [110]: 2e6700b8254ed26a -Block 0006 [111]: 58f36abe5aaf3857 -Block 0006 [112]: 8e2fa216babf4555 -Block 0006 [113]: fbfc95b5816ac03f -Block 0006 [114]: c3cf9c67383fb870 -Block 0006 [115]: 099596b7b2291d51 -Block 0006 [116]: 41a2d68d62b26966 -Block 0006 [117]: 371d37c69b85757a -Block 0006 [118]: d6aa71abd42733c0 -Block 0006 [119]: 7695f0121903fa3d -Block 0006 [120]: f99b75a67ba99543 -Block 0006 [121]: febdd604f0037284 -Block 0006 [122]: 68f0e100a0f45435 -Block 0006 [123]: 540f71cbd6879829 -Block 0006 [124]: 3686fecabc98739c -Block 0006 [125]: 9d677f7cbc7f0d15 -Block 0006 [126]: f2d9ba6f91ea7db9 -Block 0006 [127]: 2e97a12d80d19209 -Block 0007 [ 0]: 313f8267b05460dc -Block 0007 [ 1]: a5944cec2d194084 -Block 0007 [ 2]: c46e817919e6c81d -Block 0007 [ 3]: 97473d5f834f53a6 -Block 0007 [ 4]: 2a0723d18d904edd -Block 0007 [ 5]: 00bd2b0cd3ab0226 -Block 0007 [ 6]: 21dfd141814191bb -Block 0007 [ 7]: 90e3842b2e821913 -Block 0007 [ 8]: 552fa8e34c66cd9e -Block 0007 [ 9]: 065ffdbe87182934 -Block 0007 [ 10]: 7da305f47d8112a8 -Block 0007 [ 11]: b93da7a36c47e48b -Block 0007 [ 12]: 423aeb9cd7fcdaeb -Block 0007 [ 13]: 9ff079b2504337ac -Block 0007 [ 14]: 8c300fd256c14597 -Block 0007 [ 15]: 3d2c1c9072e07d2c -Block 0007 [ 16]: 44be13fb2abf1073 -Block 0007 [ 17]: a29c794f375e3bb7 -Block 0007 [ 18]: 49968e31e443d5b9 -Block 0007 [ 19]: 639cc152b7609b35 -Block 0007 [ 20]: 14f8ecb663683555 -Block 0007 [ 21]: 416426eb03dff4f9 -Block 0007 [ 22]: cb0355359f15364e -Block 0007 [ 23]: 14ad1c0b2df92f7b -Block 0007 [ 24]: e9550350c3d61952 -Block 0007 [ 25]: 1f63f70ab40027d7 -Block 0007 [ 26]: 2d43fd0c34cb5b16 -Block 0007 [ 27]: 870999cf969d244a -Block 0007 [ 28]: d63f27cb25e40145 -Block 0007 [ 29]: 1a68af16c9be8706 -Block 0007 [ 30]: 409fb5a60bdf3f5d -Block 0007 [ 31]: 94b232386d591829 -Block 0007 [ 32]: 6319fce6d8a2e6b9 -Block 0007 [ 33]: 97a7b7d0cc7c702d -Block 0007 [ 34]: f0d42918d62b6b78 -Block 0007 [ 35]: 7f95fa2cb797d904 -Block 0007 [ 36]: 209d161fac787ffd -Block 0007 [ 37]: 02161ec72c97ff65 -Block 0007 [ 38]: 5e7491e14b169df3 -Block 0007 [ 39]: 563374e7d14a8f27 -Block 0007 [ 40]: 5cb922cc003e7056 -Block 0007 [ 41]: 83cb96ed64ec843b -Block 0007 [ 42]: ec234b3079e44cc8 -Block 0007 [ 43]: adcb5ba59126d544 -Block 0007 [ 44]: 17d147dd97d4e23e -Block 0007 [ 45]: 800991ca73676481 -Block 0007 [ 46]: ea217a52d19952de -Block 0007 [ 47]: 54e18406e4cc7a8b -Block 0007 [ 48]: 05a862e2e7c772e8 -Block 0007 [ 49]: ad5338c9b9f048b6 -Block 0007 [ 50]: 03e7e379bddb0b14 -Block 0007 [ 51]: 7664afc5d7182dab -Block 0007 [ 52]: 5889d9abb800ee03 -Block 0007 [ 53]: 270c52be464c969d -Block 0007 [ 54]: b03ea59a36910cf6 -Block 0007 [ 55]: 84490f20cf223065 -Block 0007 [ 56]: ee81c65507c78efc -Block 0007 [ 57]: e43da10193dc297e -Block 0007 [ 58]: dd30e335cf68d444 -Block 0007 [ 59]: 69914459c3a59be3 -Block 0007 [ 60]: d7266930c9431f0b -Block 0007 [ 61]: e5ec3e6ea6fa86d7 -Block 0007 [ 62]: 07514caf186ffcba -Block 0007 [ 63]: 7db93dd390ddd186 -Block 0007 [ 64]: a09363d83dee989a -Block 0007 [ 65]: 03df627b1d06fbb0 -Block 0007 [ 66]: 8789a381901384a8 -Block 0007 [ 67]: 08b1ae57f82eae0a -Block 0007 [ 68]: 17f8a362efd8fabb -Block 0007 [ 69]: 0688a79b5d0518ed -Block 0007 [ 70]: 563715746b7cb426 -Block 0007 [ 71]: ab4e46660c304515 -Block 0007 [ 72]: a5f8b5462c4f2a35 -Block 0007 [ 73]: 10e109ba109355ad -Block 0007 [ 74]: f6060f3af89fbe5a -Block 0007 [ 75]: f4d782b55ef091ec -Block 0007 [ 76]: 12be85979c4a838f -Block 0007 [ 77]: ae34eba057515205 -Block 0007 [ 78]: cc0f83c65aa0aa33 -Block 0007 [ 79]: 0633ad5fa544f189 -Block 0007 [ 80]: acced57d705d2199 -Block 0007 [ 81]: 7b35f04f46cac58b -Block 0007 [ 82]: 416d7d82a9bdda0b -Block 0007 [ 83]: c318e3316990307b -Block 0007 [ 84]: c6d55f8e8c00bb70 -Block 0007 [ 85]: 686a412a85992ee4 -Block 0007 [ 86]: 073a5260e237b1f4 -Block 0007 [ 87]: 798249a43be5ef1d -Block 0007 [ 88]: 42aa6e6192ae7cc2 -Block 0007 [ 89]: c360216deaacd3bf -Block 0007 [ 90]: 52c8ab5f0fe4d5c0 -Block 0007 [ 91]: 5a9ee91c1e177a41 -Block 0007 [ 92]: e0b07ff5ce08eb69 -Block 0007 [ 93]: a6d4dd4bcfaafb16 -Block 0007 [ 94]: 1163452af40450b3 -Block 0007 [ 95]: 4e704596475cb453 -Block 0007 [ 96]: ca0f153a0686e2d3 -Block 0007 [ 97]: 882c0b2a380c36ec -Block 0007 [ 98]: 7c29c813bcf409b3 -Block 0007 [ 99]: e4e2b640cfe0d86b -Block 0007 [100]: dbc2cfae7a3a4231 -Block 0007 [101]: fa731843d27f5080 -Block 0007 [102]: 816ad332d19cd0f3 -Block 0007 [103]: db09ce87e9ceb166 -Block 0007 [104]: d2b7b680d5032a8b -Block 0007 [105]: 3adb05a1ccf7ef1c -Block 0007 [106]: 25d8504aee3430bf -Block 0007 [107]: d659f93f8db423ac -Block 0007 [108]: d9aa66776bbdcfc4 -Block 0007 [109]: 8b14098e6561628e -Block 0007 [110]: 69fb649b5db962b1 -Block 0007 [111]: 7665d436fb3b4f77 -Block 0007 [112]: 782c9789e833c68d -Block 0007 [113]: 4817adea4076d69f -Block 0007 [114]: 73e8e6cc802bf100 -Block 0007 [115]: d40c51e9c159a5fc -Block 0007 [116]: 630a7a4dfd286539 -Block 0007 [117]: dc6f3f63c56c265e -Block 0007 [118]: 9a0085dca381888f -Block 0007 [119]: 97b4ff695cbaab3c -Block 0007 [120]: abf4698a130ff8b4 -Block 0007 [121]: 3e226eb60f065ea3 -Block 0007 [122]: faf78a890f83a873 -Block 0007 [123]: c6a292eb570af3c3 -Block 0007 [124]: 7b2d2fa8016553bf -Block 0007 [125]: ae6a78024fc32785 -Block 0007 [126]: 948ba97e8fd28478 -Block 0007 [127]: a7e6438070fcdf5c -Block 0008 [ 0]: 2e9cc9c3e6b135b3 -Block 0008 [ 1]: d20ed84956a6ee5b -Block 0008 [ 2]: 824a4f18130361bd -Block 0008 [ 3]: 2720ec65b42dc705 -Block 0008 [ 4]: 55cf668c6a6858dc -Block 0008 [ 5]: e4edaa3e7f4c0ae5 -Block 0008 [ 6]: b3690f0b517be35d -Block 0008 [ 7]: aab603dab5401cd5 -Block 0008 [ 8]: 9734fd526765de8e -Block 0008 [ 9]: f8a7c8e208c74505 -Block 0008 [ 10]: 3bff0939b8ba936f -Block 0008 [ 11]: 0497f8f783147616 -Block 0008 [ 12]: 35b88fca5c5e8d6f -Block 0008 [ 13]: e63ed3a90c4651d3 -Block 0008 [ 14]: b7c80fdad434b54a -Block 0008 [ 15]: 84036657d5cfbb7c -Block 0008 [ 16]: c5d725fc3f6b8c1e -Block 0008 [ 17]: 17a6efe7658421c6 -Block 0008 [ 18]: f9887ee4c64ade59 -Block 0008 [ 19]: 299efe5dc6bc3dc9 -Block 0008 [ 20]: 389b0a0b9022f882 -Block 0008 [ 21]: 35611ff88c03a5ae -Block 0008 [ 22]: e1a07d24aff18d97 -Block 0008 [ 23]: 4c0bb87a929863dd -Block 0008 [ 24]: 6bc6dbabe096f75f -Block 0008 [ 25]: 9530f345d9303e2e -Block 0008 [ 26]: 088d5ece04da7145 -Block 0008 [ 27]: e8d38ebb18126f0a -Block 0008 [ 28]: b8bd223ef1931cbe -Block 0008 [ 29]: 4978886f78fbea5c -Block 0008 [ 30]: 3bf1ef2947a7252a -Block 0008 [ 31]: 3d1020e7790b3852 -Block 0008 [ 32]: 862a689a33fd5bb7 -Block 0008 [ 33]: 528ecc556a8f8b8c -Block 0008 [ 34]: 92176be498db9417 -Block 0008 [ 35]: 5e8a2a7380544773 -Block 0008 [ 36]: 494309297e14ebc5 -Block 0008 [ 37]: a5713c39d411a1d5 -Block 0008 [ 38]: 7106f6b61968c8ef -Block 0008 [ 39]: 90ffdb92e45e4271 -Block 0008 [ 40]: 6835a84ca857d06c -Block 0008 [ 41]: 7d739c7fca38d272 -Block 0008 [ 42]: a992806a13fb22fc -Block 0008 [ 43]: cecfa6cb668369c9 -Block 0008 [ 44]: 65aa1b4a582bc615 -Block 0008 [ 45]: bbeb50f2709e1070 -Block 0008 [ 46]: a6201dff1dc19643 -Block 0008 [ 47]: bf451423a2dbf1ea -Block 0008 [ 48]: 8836e2fc20b1da97 -Block 0008 [ 49]: 5bcc7001abab5b2c -Block 0008 [ 50]: 6cbff3d65dfdf5b1 -Block 0008 [ 51]: d1dc33283811de18 -Block 0008 [ 52]: 7af1be34e2641ab4 -Block 0008 [ 53]: 3c1ba04e93be61b9 -Block 0008 [ 54]: d4273abf36466331 -Block 0008 [ 55]: 8b35892319de5443 -Block 0008 [ 56]: f9d3ebbdb63cc92f -Block 0008 [ 57]: 5b7e5ef5bddb3c4f -Block 0008 [ 58]: 5259a3dd695c7c6c -Block 0008 [ 59]: db7d68d97cd1b706 -Block 0008 [ 60]: 04fa49a377111938 -Block 0008 [ 61]: 0529a32ae4f9f7fb -Block 0008 [ 62]: b259b442507c105d -Block 0008 [ 63]: 4603efd5764f9460 -Block 0008 [ 64]: 8d25e825f8d56ede -Block 0008 [ 65]: 186e7e8e08895229 -Block 0008 [ 66]: 1d3d7c07ed3b419c -Block 0008 [ 67]: 326baad7ed02fd0d -Block 0008 [ 68]: d8dac3bb50bf67ff -Block 0008 [ 69]: f770b9cab9866625 -Block 0008 [ 70]: 47c3a771429039fb -Block 0008 [ 71]: aac9a678cc80f2c6 -Block 0008 [ 72]: b942f416e5bc48e5 -Block 0008 [ 73]: 2a2d0b0958417b30 -Block 0008 [ 74]: 842d6cf63b07316f -Block 0008 [ 75]: 854f397563c6bdbf -Block 0008 [ 76]: 5d44be1127880a5a -Block 0008 [ 77]: 1766a2b7ffea324c -Block 0008 [ 78]: 61c6bcf062aa12e1 -Block 0008 [ 79]: db9130986d8233fa -Block 0008 [ 80]: 3cae9e52f7517619 -Block 0008 [ 81]: 6bc06914ce32e1cd -Block 0008 [ 82]: 3fc450fdbe333575 -Block 0008 [ 83]: 27a458fd8b358a5f -Block 0008 [ 84]: 8a7f7426828352b8 -Block 0008 [ 85]: bb0c8daac96bc54a -Block 0008 [ 86]: e51721bf776f4385 -Block 0008 [ 87]: c27c103839a47828 -Block 0008 [ 88]: 615902453eae7e54 -Block 0008 [ 89]: 065769df53b50ae9 -Block 0008 [ 90]: e2cdb8c440cd666c -Block 0008 [ 91]: 0a9e983f8bb2c395 -Block 0008 [ 92]: a8ed136a220ffba2 -Block 0008 [ 93]: 4c2104b8a3106274 -Block 0008 [ 94]: f79cd4843458b671 -Block 0008 [ 95]: ca3ab237d1bcd885 -Block 0008 [ 96]: 9208ca5b017118f6 -Block 0008 [ 97]: 542d8219fe025cb5 -Block 0008 [ 98]: ea8b039748259027 -Block 0008 [ 99]: 3ae845cde600d61c -Block 0008 [100]: b97f83cf358075b3 -Block 0008 [101]: 43a916fe6ec08054 -Block 0008 [102]: 955ad4f7f4678783 -Block 0008 [103]: d0b88886cc986d6d -Block 0008 [104]: 7bb2acbb38bfe037 -Block 0008 [105]: eae9e9899b5ddd82 -Block 0008 [106]: cde20f402a22050d -Block 0008 [107]: d72b190fc5bfe98c -Block 0008 [108]: 3b735764df8431ac -Block 0008 [109]: 2ad92f81f927f307 -Block 0008 [110]: 4637052793914f43 -Block 0008 [111]: 7c36bb6fd25addfa -Block 0008 [112]: 826cfbda99be0b03 -Block 0008 [113]: ddf3ced5fc302d83 -Block 0008 [114]: fb8c8449e0910102 -Block 0008 [115]: 8463ff3f92a3292a -Block 0008 [116]: 05bf45d8d32c0aa3 -Block 0008 [117]: 1cf076a04b88d512 -Block 0008 [118]: 6e2d7b51e84ee979 -Block 0008 [119]: a302ddea68252da2 -Block 0008 [120]: 9abde3e462398515 -Block 0008 [121]: e64d3cc9f21b3bbe -Block 0008 [122]: 3dace2ec24cc0c2b -Block 0008 [123]: 88483a20ea38dd8f -Block 0008 [124]: 620ae53ee928d46b -Block 0008 [125]: c7fa0fd20b9ee233 -Block 0008 [126]: cf0b70565fa8d1c0 -Block 0008 [127]: dde107597004f663 -Block 0009 [ 0]: 209a347fd29977e2 -Block 0009 [ 1]: c061a9725908f6cf -Block 0009 [ 2]: 81353c3151dfb6d6 -Block 0009 [ 3]: 926ce448a5ce1128 -Block 0009 [ 4]: 72ef7d779de2768b -Block 0009 [ 5]: cc2e3e7abb982d1c -Block 0009 [ 6]: 6f7bcf77b7858e5c -Block 0009 [ 7]: 4c07d89badf8b0c6 -Block 0009 [ 8]: 0e2098ba415db491 -Block 0009 [ 9]: ba5aab87359547ec -Block 0009 [ 10]: 9f39ce7624c3fa13 -Block 0009 [ 11]: b94ed628f9a619e6 -Block 0009 [ 12]: a96ec7cad41eb137 -Block 0009 [ 13]: 4d7365b0dcac29a9 -Block 0009 [ 14]: 93db4a5f9510ea21 -Block 0009 [ 15]: c2182ccd6366da14 -Block 0009 [ 16]: df49f804b43e7999 -Block 0009 [ 17]: cabc390bd13b9bc8 -Block 0009 [ 18]: b186f52b3846ab6d -Block 0009 [ 19]: ded1bcd95e907934 -Block 0009 [ 20]: 38bf831c2af9e788 -Block 0009 [ 21]: 5346d0899e8a8fca -Block 0009 [ 22]: 16ee9287d6cddb15 -Block 0009 [ 23]: 3f7e53e659f5e0d2 -Block 0009 [ 24]: 4c44d3fac07ced70 -Block 0009 [ 25]: d2839ed10e988d59 -Block 0009 [ 26]: e2276469f6c2c7c5 -Block 0009 [ 27]: f757916ef5395c35 -Block 0009 [ 28]: 6586225cc5ef9ffd -Block 0009 [ 29]: cdee0721f56ae49f -Block 0009 [ 30]: 51cf5ef7a119b1df -Block 0009 [ 31]: 859e7e63b5a143d0 -Block 0009 [ 32]: ae99a2c00c9161b1 -Block 0009 [ 33]: fa3823d62a0374a5 -Block 0009 [ 34]: 3d3c5017570dbf86 -Block 0009 [ 35]: 92639ce301f1b81f -Block 0009 [ 36]: 5523d0e458c01d63 -Block 0009 [ 37]: cb8ddedc266abc88 -Block 0009 [ 38]: 1c7d9f9322dcccf2 -Block 0009 [ 39]: 1c03d8e6b11d883d -Block 0009 [ 40]: 32e030be8b96956b -Block 0009 [ 41]: c840202ff4c8471b -Block 0009 [ 42]: c6730e4209cb0592 -Block 0009 [ 43]: 987560f61edc458e -Block 0009 [ 44]: 54654778d2957045 -Block 0009 [ 45]: 34a83c65a88871e5 -Block 0009 [ 46]: a09e9bbb2df3eb9f -Block 0009 [ 47]: 74490e2824445378 -Block 0009 [ 48]: fe3e62b849649981 -Block 0009 [ 49]: 043556a6df5185b7 -Block 0009 [ 50]: b571d3e4d2e56472 -Block 0009 [ 51]: 43d7d84fbb688f5b -Block 0009 [ 52]: c0a7901239238809 -Block 0009 [ 53]: d6e84ae5d888446f -Block 0009 [ 54]: 15c3cce6a4cccb0c -Block 0009 [ 55]: 6373f9fca0709283 -Block 0009 [ 56]: 51b9bbba928409de -Block 0009 [ 57]: bd7804ec7b8b9b4f -Block 0009 [ 58]: 6e9d64dc2121f5da -Block 0009 [ 59]: f49cddfc3833f51c -Block 0009 [ 60]: a9ebbe0c83c98f3b -Block 0009 [ 61]: dc3efed4e44c0e24 -Block 0009 [ 62]: f16bf46a8082429e -Block 0009 [ 63]: 27b9b38f767ba4c8 -Block 0009 [ 64]: 03ee25cd3f3189d1 -Block 0009 [ 65]: 592af46a525096c8 -Block 0009 [ 66]: e0f410df25491dae -Block 0009 [ 67]: bd2be5e6fb441dc5 -Block 0009 [ 68]: abf8b268d7024d16 -Block 0009 [ 69]: 0fc232b72879a229 -Block 0009 [ 70]: 02ae0ba2bce5cdb1 -Block 0009 [ 71]: 295723bd5f13bf22 -Block 0009 [ 72]: 31c65623d3437798 -Block 0009 [ 73]: 790854810b9f981f -Block 0009 [ 74]: 46ea67f43d9d3b3a -Block 0009 [ 75]: f52a39d525541d8a -Block 0009 [ 76]: 99c295f0ee707df0 -Block 0009 [ 77]: 34fb0aa05c400015 -Block 0009 [ 78]: 97a7e3a1aa073e56 -Block 0009 [ 79]: ea0011e85f251e9a -Block 0009 [ 80]: 93866a3475fd84e9 -Block 0009 [ 81]: bb1b0f3e6c6b3fb0 -Block 0009 [ 82]: 6d29acab032d43f7 -Block 0009 [ 83]: 121cbf273badebae -Block 0009 [ 84]: 58ded818809f6630 -Block 0009 [ 85]: e578892283ff24f1 -Block 0009 [ 86]: 219235a5d502224c -Block 0009 [ 87]: a139fc5f39ac8d65 -Block 0009 [ 88]: 6ec265516ae92429 -Block 0009 [ 89]: b302315a209bae25 -Block 0009 [ 90]: 3f9d17f0357f3139 -Block 0009 [ 91]: 0466be553530b887 -Block 0009 [ 92]: ef804d6297e6b404 -Block 0009 [ 93]: 27049c1938ef9fd9 -Block 0009 [ 94]: f74f27e6a0f7169b -Block 0009 [ 95]: e97a5a3036228ec3 -Block 0009 [ 96]: c1bc91ae9ed2b008 -Block 0009 [ 97]: f00bf18399d36951 -Block 0009 [ 98]: 600cb47d4e4a55ad -Block 0009 [ 99]: 934299f5e7a3d825 -Block 0009 [100]: 4787e7d716a3d9b5 -Block 0009 [101]: e9bcaf5f2d451670 -Block 0009 [102]: ad5e13ee0b217a5a -Block 0009 [103]: dac4ae25e1c6cf3c -Block 0009 [104]: 18e1559471376622 -Block 0009 [105]: 234197f39be8711b -Block 0009 [106]: 0a2b9482ba98ca71 -Block 0009 [107]: b7eddfebd7b2ce53 -Block 0009 [108]: e60c8b75e72b1569 -Block 0009 [109]: ab8b6471bd07c0d9 -Block 0009 [110]: 4d29ef0b49b6b176 -Block 0009 [111]: 87e02204f0af0d6d -Block 0009 [112]: 6da9d35faa1a0990 -Block 0009 [113]: f9b5f5d5f03c1a49 -Block 0009 [114]: a81da4419bd23c36 -Block 0009 [115]: e270cfa27ae3703c -Block 0009 [116]: 6d0a394cab7bc4b5 -Block 0009 [117]: 34785b08faace8c3 -Block 0009 [118]: 20185431d252ad2e -Block 0009 [119]: 66d44ae9078a1741 -Block 0009 [120]: e3e6295ad1bca0d1 -Block 0009 [121]: 33b0dbaa494681d7 -Block 0009 [122]: 61f5dab90b66f2d9 -Block 0009 [123]: 43a6e3bed2cc71e7 -Block 0009 [124]: bf75bc3f9bb5bb02 -Block 0009 [125]: 0d2e74e50ff9f296 -Block 0009 [126]: 5973b5959b00ea90 -Block 0009 [127]: 52a775ae400e714b -Block 0010 [ 0]: 10b705da8395f04c -Block 0010 [ 1]: 3a64c95eb697fc3c -Block 0010 [ 2]: 7586175e549038e1 -Block 0010 [ 3]: 56de6895cef27b26 -Block 0010 [ 4]: e702d37714afa28d -Block 0010 [ 5]: 1629970faf4bfbd5 -Block 0010 [ 6]: 028d51b5e7ca4680 -Block 0010 [ 7]: f9a6b66093100143 -Block 0010 [ 8]: b15dd726704428dd -Block 0010 [ 9]: 4582611de10e16da -Block 0010 [ 10]: e040ed664fd0cd3a -Block 0010 [ 11]: 8bf64cbab6fcf4a0 -Block 0010 [ 12]: 837daa67d2904ba2 -Block 0010 [ 13]: 8045a33944a1fd35 -Block 0010 [ 14]: d4dbd734ec2aa4a6 -Block 0010 [ 15]: 362cbe03aab89d82 -Block 0010 [ 16]: 02d30b08962cde66 -Block 0010 [ 17]: 77602b3de395dd11 -Block 0010 [ 18]: 9d92a45283ff4ca3 -Block 0010 [ 19]: 1e49ca4b9d7df723 -Block 0010 [ 20]: 0c55389b0df259f4 -Block 0010 [ 21]: ffc74e25199d26ba -Block 0010 [ 22]: 646f73d902384812 -Block 0010 [ 23]: 1571d94c86994393 -Block 0010 [ 24]: a640762502fe113b -Block 0010 [ 25]: 6861536ff90a4f1d -Block 0010 [ 26]: 35d5c406d0c930a3 -Block 0010 [ 27]: a4da70145cd20828 -Block 0010 [ 28]: 8e4b4a16c16fc390 -Block 0010 [ 29]: 50d9c0355fa52b2b -Block 0010 [ 30]: 52ca5b52bddfc8ad -Block 0010 [ 31]: c5e896e214b9e11b -Block 0010 [ 32]: e117033bcd9625ef -Block 0010 [ 33]: 100e49c8268d8f2f -Block 0010 [ 34]: 2a958d58b325efdc -Block 0010 [ 35]: a2395a37949ff556 -Block 0010 [ 36]: 4c1e874bca55d04c -Block 0010 [ 37]: 5f1bc5262644b343 -Block 0010 [ 38]: ad11e453e038deaa -Block 0010 [ 39]: 287b94b109d7df97 -Block 0010 [ 40]: 0c424aca407f8984 -Block 0010 [ 41]: 62079d33ca943d72 -Block 0010 [ 42]: e4530fa28668e2d5 -Block 0010 [ 43]: e6daf6dd8a6be133 -Block 0010 [ 44]: a1a3dfd0125ede58 -Block 0010 [ 45]: 760feb30830ae154 -Block 0010 [ 46]: 077ef34a416f5886 -Block 0010 [ 47]: 31687239a635eae0 -Block 0010 [ 48]: 95fd0087afc7c838 -Block 0010 [ 49]: 87ca60d36dd7df36 -Block 0010 [ 50]: dffda96d886a96f4 -Block 0010 [ 51]: f8ad397459b0ad94 -Block 0010 [ 52]: 58097d9ddc18e114 -Block 0010 [ 53]: 0ef111b195052ba1 -Block 0010 [ 54]: 01f720c2f276a54a -Block 0010 [ 55]: 6e1f1243af57995a -Block 0010 [ 56]: 3eb65ece378c1197 -Block 0010 [ 57]: d6fff89c6d4f6bee -Block 0010 [ 58]: 1ee850f36749e874 -Block 0010 [ 59]: 44a84ef91de9cc29 -Block 0010 [ 60]: d4228cc0a1ded059 -Block 0010 [ 61]: 8265ec768f3c31cb -Block 0010 [ 62]: 52d0a6c81f7d7e25 -Block 0010 [ 63]: 60f8f34e0ee51912 -Block 0010 [ 64]: 7e296a5588063666 -Block 0010 [ 65]: d7c340360acfb706 -Block 0010 [ 66]: 5c38e604a7d84d65 -Block 0010 [ 67]: 9394c554e95ef046 -Block 0010 [ 68]: 2ebb479ae3059c4b -Block 0010 [ 69]: 079e88c1483363ca -Block 0010 [ 70]: 720ac22598be7958 -Block 0010 [ 71]: 794417526d2982b5 -Block 0010 [ 72]: 752252a5603ec066 -Block 0010 [ 73]: d62d4cc0b661537d -Block 0010 [ 74]: 8687304a5ce5183c -Block 0010 [ 75]: 8ca8c10b032e3fa8 -Block 0010 [ 76]: c29c11ff6853939c -Block 0010 [ 77]: cae1bae35ceaf6c5 -Block 0010 [ 78]: b2584a08cbf87502 -Block 0010 [ 79]: 1a07c00c94b6e96d -Block 0010 [ 80]: 5ba02dc60341bb67 -Block 0010 [ 81]: 5f3c3c068ff5925a -Block 0010 [ 82]: 310a1f867714e882 -Block 0010 [ 83]: e27e7e95a6030227 -Block 0010 [ 84]: 7eae41077b7cfa57 -Block 0010 [ 85]: e6f885645efb251c -Block 0010 [ 86]: 4afcdde9189673a5 -Block 0010 [ 87]: a8359776d73a509c -Block 0010 [ 88]: 53fbc97624693850 -Block 0010 [ 89]: c5cb54d8681267bd -Block 0010 [ 90]: 94a91156c3ad818c -Block 0010 [ 91]: 486788a97f9eed9c -Block 0010 [ 92]: f1e80bd47e1bead9 -Block 0010 [ 93]: 6c0c8789e7ae2b7f -Block 0010 [ 94]: 2e9fcba124e00bb7 -Block 0010 [ 95]: 14ab4120e959cbb0 -Block 0010 [ 96]: e886072019cdb34b -Block 0010 [ 97]: a5e7dd581c669d1e -Block 0010 [ 98]: c3020e7807e0b773 -Block 0010 [ 99]: d20e054b8604e5af -Block 0010 [100]: fbf072c54ee3a4bd -Block 0010 [101]: f32a5a150b1703e5 -Block 0010 [102]: 25c471f04a072cec -Block 0010 [103]: a59dedf5884094e5 -Block 0010 [104]: 6210d174ecf94984 -Block 0010 [105]: f0c39b9f4040914e -Block 0010 [106]: 210f2b657dd53eda -Block 0010 [107]: 8632ff56c33e7b87 -Block 0010 [108]: 7239c0bbdadfe813 -Block 0010 [109]: 32ec7541d19960d5 -Block 0010 [110]: d85ff9b490aeb9b1 -Block 0010 [111]: 2416348a4822a40a -Block 0010 [112]: e4baef241d563a56 -Block 0010 [113]: 7b378fbc2beb24ba -Block 0010 [114]: a7c65c31bb5bb666 -Block 0010 [115]: d46629a61124fc0b -Block 0010 [116]: d49c3abb0210183d -Block 0010 [117]: d1974949b75ccc07 -Block 0010 [118]: 19329244871efd55 -Block 0010 [119]: c45e9eb14a2eb1ec -Block 0010 [120]: e870bcf4d438375d -Block 0010 [121]: 0359d1c2cb62f251 -Block 0010 [122]: e12903a40147d90e -Block 0010 [123]: c549cd1a1f8a229d -Block 0010 [124]: 3a85f379d1c5f7fe -Block 0010 [125]: 11221154382972bc -Block 0010 [126]: e655c58b7b41b104 -Block 0010 [127]: 22846d513c8c4c61 -Block 0011 [ 0]: 087c4a60f7fdcc8a -Block 0011 [ 1]: a16751907a1c9062 -Block 0011 [ 2]: e5307c613784d75e -Block 0011 [ 3]: 642c9cc06f4e67d4 -Block 0011 [ 4]: c8da783b1213b284 -Block 0011 [ 5]: cc6fb6a6d80b3797 -Block 0011 [ 6]: 3f1398684def9ae4 -Block 0011 [ 7]: 24260a2da339bccf -Block 0011 [ 8]: 8dd645b474415c70 -Block 0011 [ 9]: acfa4ba58a001598 -Block 0011 [ 10]: 9c0b110f98c3afb6 -Block 0011 [ 11]: abbecf2c6893ec40 -Block 0011 [ 12]: 77c8c41012fc9a92 -Block 0011 [ 13]: 610f88076839c41c -Block 0011 [ 14]: 6f082b5261f7e38e -Block 0011 [ 15]: c75e62720817a4d4 -Block 0011 [ 16]: a49ab7174523b5b2 -Block 0011 [ 17]: 63393cc05061577d -Block 0011 [ 18]: ff624379436a6cb2 -Block 0011 [ 19]: a71b7407b4ec74b1 -Block 0011 [ 20]: 044a0eb1dc46b867 -Block 0011 [ 21]: 95ee8cab74458e8b -Block 0011 [ 22]: 1ae75464926aee1b -Block 0011 [ 23]: b0449f73ce98b3a4 -Block 0011 [ 24]: 925483abc8bd86f0 -Block 0011 [ 25]: cc0a60e8210b1eee -Block 0011 [ 26]: 21736abdade24267 -Block 0011 [ 27]: 39bed01022945311 -Block 0011 [ 28]: 273eb86173f1b0ba -Block 0011 [ 29]: 4e74e045d26408a6 -Block 0011 [ 30]: 9bd1d32674b4418b -Block 0011 [ 31]: 5f2db619452b3e6c -Block 0011 [ 32]: 2d2b1b7dc990bcab -Block 0011 [ 33]: 6975d2169d1e64a0 -Block 0011 [ 34]: ac08dec82fb69f97 -Block 0011 [ 35]: 8d86ab2cb64b5743 -Block 0011 [ 36]: 6e52666b53ebb4e1 -Block 0011 [ 37]: 05d9ed8353359686 -Block 0011 [ 38]: 4d8e726410069c75 -Block 0011 [ 39]: 3047edc384cd7ad0 -Block 0011 [ 40]: 5927a66a3693b292 -Block 0011 [ 41]: ec4ddaa0d1062c01 -Block 0011 [ 42]: 56a76e0424f3431b -Block 0011 [ 43]: ff180425a253e617 -Block 0011 [ 44]: aef38fa44093c20f -Block 0011 [ 45]: d9ea2788a5f4b33f -Block 0011 [ 46]: c5ee5f8214eeadd3 -Block 0011 [ 47]: ae26aa6379355549 -Block 0011 [ 48]: 342cf009717a3cf9 -Block 0011 [ 49]: b249d52df9974c94 -Block 0011 [ 50]: daca199ea5162793 -Block 0011 [ 51]: 504440e9f34f2ea4 -Block 0011 [ 52]: 6e4a0ee45733522f -Block 0011 [ 53]: bc002a2d103dafb9 -Block 0011 [ 54]: 21453d25757b20ab -Block 0011 [ 55]: 6de3ec6e8c583fc4 -Block 0011 [ 56]: ba35f66cd858aac1 -Block 0011 [ 57]: cab68224bb07850e -Block 0011 [ 58]: ffd62d859483fbf5 -Block 0011 [ 59]: bddf886f53ae98af -Block 0011 [ 60]: c9c9db7f51294b61 -Block 0011 [ 61]: 2f17b8ac8f19838d -Block 0011 [ 62]: bea386a3c0f2b883 -Block 0011 [ 63]: 5cc8a9bc30b44f60 -Block 0011 [ 64]: f6b8420f06031880 -Block 0011 [ 65]: 6e550e89ed69a4f2 -Block 0011 [ 66]: 0f20af55db3a61f5 -Block 0011 [ 67]: 13d66a8892f20f94 -Block 0011 [ 68]: eca0cb483c58a3c9 -Block 0011 [ 69]: 39f79cfa748dfacb -Block 0011 [ 70]: d30c012a7af33e12 -Block 0011 [ 71]: 082c1ca2b8130ecc -Block 0011 [ 72]: c85e54db0d0637a7 -Block 0011 [ 73]: 01041626ef5c7864 -Block 0011 [ 74]: 8227dfea66b11bf6 -Block 0011 [ 75]: b7d475e79564f7ce -Block 0011 [ 76]: dbd9e472d5cb5511 -Block 0011 [ 77]: 3974a73be4c3e651 -Block 0011 [ 78]: a0dc6811417a4ddf -Block 0011 [ 79]: 91dd84cea94e45e8 -Block 0011 [ 80]: 70b31d33b3591da6 -Block 0011 [ 81]: 08687f898128f78e -Block 0011 [ 82]: 1ba4f787284e0c64 -Block 0011 [ 83]: fc3605e8516c988f -Block 0011 [ 84]: 9e33611951c7459b -Block 0011 [ 85]: e26fbc9ca703c2f3 -Block 0011 [ 86]: ddc8a9b6c1d5b390 -Block 0011 [ 87]: 21b21e9b65a0f690 -Block 0011 [ 88]: 27446f75da28067b -Block 0011 [ 89]: 0320b4243ea5cd7c -Block 0011 [ 90]: 98ddcc6855ee3b8a -Block 0011 [ 91]: 99d70a73cb919721 -Block 0011 [ 92]: c9a802b4526d366a -Block 0011 [ 93]: 9ed10168b49b54ba -Block 0011 [ 94]: f49780fa64c29aa9 -Block 0011 [ 95]: fc8f149967071a63 -Block 0011 [ 96]: 242033b18a01351e -Block 0011 [ 97]: d5d20ee36d53a3a5 -Block 0011 [ 98]: 0def71eae139449c -Block 0011 [ 99]: f48b3ab19e312f27 -Block 0011 [100]: 04d14ab2e4c96da2 -Block 0011 [101]: caf020d484d724e3 -Block 0011 [102]: 3b47556e5f91133a -Block 0011 [103]: 06a6e66d4024926c -Block 0011 [104]: 26b4a90b3a7babff -Block 0011 [105]: da6deb49c640617e -Block 0011 [106]: a0f431571ce0cdf4 -Block 0011 [107]: a7f4018c8028af61 -Block 0011 [108]: 2b9be19108c53caa -Block 0011 [109]: 37dc3ef56277ecf3 -Block 0011 [110]: cb1f1519f7f6409a -Block 0011 [111]: b673f3aa13b9c3bb -Block 0011 [112]: bbf051ef2ef41554 -Block 0011 [113]: 779a335c4687271a -Block 0011 [114]: fcb5e2d10d07cc1e -Block 0011 [115]: 409c972b93d2f0b5 -Block 0011 [116]: 4e1221d61d60556b -Block 0011 [117]: a7171d38abb1b56c -Block 0011 [118]: 22c1e97d366a0242 -Block 0011 [119]: e2d3e159746843b7 -Block 0011 [120]: 4d591a5e23730cc3 -Block 0011 [121]: 903a4842eb68247a -Block 0011 [122]: c4aa3fa64636ef53 -Block 0011 [123]: 7f92f99f0aa91b22 -Block 0011 [124]: 873f5c9e82cfbdf0 -Block 0011 [125]: ac3b0c40f4317688 -Block 0011 [126]: 830675a89d335e0e -Block 0011 [127]: d93df64ab91dfdc9 -Block 0012 [ 0]: 1ad345df4db50eb2 -Block 0012 [ 1]: 7f2a991f509130e9 -Block 0012 [ 2]: 5b11b82461502f75 -Block 0012 [ 3]: d2502b2312475a91 -Block 0012 [ 4]: 235a1b1b8fbaaca7 -Block 0012 [ 5]: 54300afb3c272e47 -Block 0012 [ 6]: c83d4ed5e93d04ea -Block 0012 [ 7]: 92c7e0dab1b161a0 -Block 0012 [ 8]: e391fef7324fedb2 -Block 0012 [ 9]: da51ed473e82976b -Block 0012 [ 10]: da7cf42297440604 -Block 0012 [ 11]: 39c532ece6e4c67e -Block 0012 [ 12]: 2e8ec6fba2b43181 -Block 0012 [ 13]: e4c0272e6a3a7b2b -Block 0012 [ 14]: 61e5121d987d4bfb -Block 0012 [ 15]: 1efc1de2eb195832 -Block 0012 [ 16]: 83ea202c2677629d -Block 0012 [ 17]: 4d553ee685791054 -Block 0012 [ 18]: 9908af39367d6f42 -Block 0012 [ 19]: 0ed9a6e98a863475 -Block 0012 [ 20]: 4fd7b7f0611df61b -Block 0012 [ 21]: 1a215453a7773bab -Block 0012 [ 22]: ca5f63603c63523b -Block 0012 [ 23]: 2e0ca98c896f42b6 -Block 0012 [ 24]: ef33ee178de5e931 -Block 0012 [ 25]: 78a3d15a99e7c46d -Block 0012 [ 26]: 986097342bb0b51b -Block 0012 [ 27]: b79d38b577ef3bd0 -Block 0012 [ 28]: 4c04efe735ee9aa3 -Block 0012 [ 29]: 4408ee8ac6cc9b03 -Block 0012 [ 30]: a964e18a98feebca -Block 0012 [ 31]: e9980c96d51d78a4 -Block 0012 [ 32]: b030a343e1fed12f -Block 0012 [ 33]: af98cd31d6e5f2ae -Block 0012 [ 34]: 37c3268c71d35630 -Block 0012 [ 35]: bdfb0ad9f749f0ba -Block 0012 [ 36]: 4f3e2bf11096123f -Block 0012 [ 37]: 17879701cb4a1a6a -Block 0012 [ 38]: ee36d707bb272a6d -Block 0012 [ 39]: bc80e260e49601e9 -Block 0012 [ 40]: 7864867c5fbcaca2 -Block 0012 [ 41]: 5de9d72cc44e465e -Block 0012 [ 42]: c0610768400af1f7 -Block 0012 [ 43]: d3bfe5033cedf36d -Block 0012 [ 44]: 734de7e52fbc8edf -Block 0012 [ 45]: aca5cdb35f89215c -Block 0012 [ 46]: d9f8cc9d80ad3f5e -Block 0012 [ 47]: a62a68de189b641c -Block 0012 [ 48]: 7c7ca4dadf0d3e57 -Block 0012 [ 49]: 6e5abd429ad14d50 -Block 0012 [ 50]: 02719e587143939b -Block 0012 [ 51]: 00ceef42af11c7e0 -Block 0012 [ 52]: f1c5f4ed527a2440 -Block 0012 [ 53]: eeb79837ce3a0e21 -Block 0012 [ 54]: ad2d4df530faa7f5 -Block 0012 [ 55]: 13687cab0e868fc9 -Block 0012 [ 56]: d22f8dfc671eeae7 -Block 0012 [ 57]: 70e6519287e17172 -Block 0012 [ 58]: 64f0bcd93ce1195c -Block 0012 [ 59]: e863a76e5b71fb30 -Block 0012 [ 60]: 4395c0d11c924dcb -Block 0012 [ 61]: 9f56bb6bf9506f7a -Block 0012 [ 62]: 2afdf7d2ef3c22fb -Block 0012 [ 63]: e77a668d06f5f5f9 -Block 0012 [ 64]: 952ae073e7174ccf -Block 0012 [ 65]: 6c68dd56660ac7ca -Block 0012 [ 66]: 2ff187f2cebb916d -Block 0012 [ 67]: b5381748e6c0350d -Block 0012 [ 68]: 257094c2b57bf7ee -Block 0012 [ 69]: e2e15bc30698034b -Block 0012 [ 70]: c0a07bdbab7b6861 -Block 0012 [ 71]: fc6965990b7123e4 -Block 0012 [ 72]: 1a09c34714985d6c -Block 0012 [ 73]: 66c61d78f3fa0901 -Block 0012 [ 74]: 45b8bd1699612eaf -Block 0012 [ 75]: 6337d206d8f6a1c6 -Block 0012 [ 76]: 1c6e6a883a316d7b -Block 0012 [ 77]: 8e2520966a3f5393 -Block 0012 [ 78]: 28328a2d7ffbd5d8 -Block 0012 [ 79]: 7a13afae5090f487 -Block 0012 [ 80]: dc9e54d596385074 -Block 0012 [ 81]: 7b2a19c9b048959c -Block 0012 [ 82]: 6fa578ecc65e441a -Block 0012 [ 83]: 0e05de01a70a6559 -Block 0012 [ 84]: fe202d50eb104a91 -Block 0012 [ 85]: 7564eb93f410f212 -Block 0012 [ 86]: f242236f542072cb -Block 0012 [ 87]: 262a216932431387 -Block 0012 [ 88]: 269636433d40f862 -Block 0012 [ 89]: 1c297b358273dcea -Block 0012 [ 90]: e4d99ff9affa34c6 -Block 0012 [ 91]: 8aaea2d759ab7f9c -Block 0012 [ 92]: 527932b0e8b922f8 -Block 0012 [ 93]: 3366937699d3cdbe -Block 0012 [ 94]: d80974a91ac0a0b4 -Block 0012 [ 95]: db086bfd83ddf51f -Block 0012 [ 96]: 604078a09efb7a74 -Block 0012 [ 97]: 5785dc0086b89269 -Block 0012 [ 98]: 859596be9c142de9 -Block 0012 [ 99]: 492ca15c36f63554 -Block 0012 [100]: eab20093faab6936 -Block 0012 [101]: 65b2e8dd2926e710 -Block 0012 [102]: d9afd0da91abcf83 -Block 0012 [103]: 2b1ea3e0f35d8b3c -Block 0012 [104]: 8c1cfa61d92384de -Block 0012 [105]: 076752406e32e99c -Block 0012 [106]: 5bb249c53a792191 -Block 0012 [107]: fc8cee3fa34790e5 -Block 0012 [108]: 8549d1fea8dd8798 -Block 0012 [109]: e06853678f64e142 -Block 0012 [110]: f63402296b31f24a -Block 0012 [111]: 26ea2832acb17e48 -Block 0012 [112]: f1a60fdef2a3e415 -Block 0012 [113]: 1326bd0d6192ed1c -Block 0012 [114]: 1b99169d3bf2e65a -Block 0012 [115]: d8f4c1a60f882992 -Block 0012 [116]: 7b02d30fc580dd08 -Block 0012 [117]: 9f56c86fea37b1c5 -Block 0012 [118]: ff8f6119deb1d6b2 -Block 0012 [119]: 9f7d344af36658b9 -Block 0012 [120]: 635732acba33b90c -Block 0012 [121]: bf44366219c55c4a -Block 0012 [122]: 15bbff300adcf605 -Block 0012 [123]: 2bcde7efb0fa12a1 -Block 0012 [124]: 4823d0fc36dc9fa3 -Block 0012 [125]: 61d737e414cbdb5a -Block 0012 [126]: d0ad0e2902139a09 -Block 0012 [127]: 707eb8916b627127 -Block 0013 [ 0]: f5b25a4acd8eac85 -Block 0013 [ 1]: ee959cf39d3c4644 -Block 0013 [ 2]: 78d7bfa8de372b87 -Block 0013 [ 3]: 31d07e82e6e9e4a6 -Block 0013 [ 4]: 53317a8b03edbd30 -Block 0013 [ 5]: 4df04dc0850df577 -Block 0013 [ 6]: 489794583f20cb0b -Block 0013 [ 7]: 15b684ebce4f4fc8 -Block 0013 [ 8]: 493f8ddb94fc6f8e -Block 0013 [ 9]: 5c28a522d742021d -Block 0013 [ 10]: 9ae7e6a23a8f400d -Block 0013 [ 11]: 11454491ba4a02f4 -Block 0013 [ 12]: 87b5a0821f6a8e20 -Block 0013 [ 13]: 220ba016407d5c90 -Block 0013 [ 14]: 153e626fd2d674a7 -Block 0013 [ 15]: 622ff968c50d21ef -Block 0013 [ 16]: 47fde8ffcbe1f793 -Block 0013 [ 17]: 7b503a6b4527e62f -Block 0013 [ 18]: ecd0b784fd42ee2d -Block 0013 [ 19]: e9f295e0c9618983 -Block 0013 [ 20]: d60bd7403ca015d9 -Block 0013 [ 21]: 88edd56f2c209ba1 -Block 0013 [ 22]: 9c0db046364ac775 -Block 0013 [ 23]: f1b38a5f55895ebc -Block 0013 [ 24]: 3fb1e9fb4ce2a19b -Block 0013 [ 25]: e185c2ed252ff095 -Block 0013 [ 26]: 583c36eb1c2895e6 -Block 0013 [ 27]: d496049eea1f17ee -Block 0013 [ 28]: d2388fc090f49393 -Block 0013 [ 29]: e8643bf2a54cccbf -Block 0013 [ 30]: cdeac9a1398b57a2 -Block 0013 [ 31]: 839a73661c2872c0 -Block 0013 [ 32]: 09cc4949586308ba -Block 0013 [ 33]: 24dee87aceef390c -Block 0013 [ 34]: beab4e57f06e1427 -Block 0013 [ 35]: 00204629e891b870 -Block 0013 [ 36]: 657ee461e9159696 -Block 0013 [ 37]: be041415db73f231 -Block 0013 [ 38]: 247f4b5377d4ca7c -Block 0013 [ 39]: 70d415da5bb36bea -Block 0013 [ 40]: 313a1179f617093b -Block 0013 [ 41]: 41bcffd8350e1754 -Block 0013 [ 42]: 2c4f76024e43f645 -Block 0013 [ 43]: 1994dbd3c51e1c31 -Block 0013 [ 44]: 221ad24959953a4c -Block 0013 [ 45]: aa40bbd20a4016c6 -Block 0013 [ 46]: d6bf58116a751602 -Block 0013 [ 47]: 24734bf7a5d389bf -Block 0013 [ 48]: 928f777444bd7d68 -Block 0013 [ 49]: 465cf35d4417a49d -Block 0013 [ 50]: 2f3c687a1bbdaf2f -Block 0013 [ 51]: fd2eb5b5a73f1419 -Block 0013 [ 52]: 5a2cc27e60b1798d -Block 0013 [ 53]: d93a4af5c2492231 -Block 0013 [ 54]: c7a4258fd56c5df3 -Block 0013 [ 55]: e83d9db8ea4ba71d -Block 0013 [ 56]: d7752996d109d14a -Block 0013 [ 57]: ef45b6603c9edf8a -Block 0013 [ 58]: 0efbb174225721de -Block 0013 [ 59]: d2642ac42b528890 -Block 0013 [ 60]: bc6040869673b79b -Block 0013 [ 61]: fc4b0c4ee58ad868 -Block 0013 [ 62]: ded3ebbf16f440da -Block 0013 [ 63]: 75625237408a7862 -Block 0013 [ 64]: 601d8af508992764 -Block 0013 [ 65]: 2132ec3f36fd592b -Block 0013 [ 66]: 4990b4750222cfd0 -Block 0013 [ 67]: c9abaa67cbe284b3 -Block 0013 [ 68]: 597dee2f5ea8ccfd -Block 0013 [ 69]: 7679ae1f07cdfc36 -Block 0013 [ 70]: 1c13c154abf5cb34 -Block 0013 [ 71]: ebe9cc030f0b1a9b -Block 0013 [ 72]: 71cae6255cf82411 -Block 0013 [ 73]: 83708a47b6689ebb -Block 0013 [ 74]: d7cb99b8d8bfe518 -Block 0013 [ 75]: b98021e9f611c058 -Block 0013 [ 76]: fb37596c497e3c88 -Block 0013 [ 77]: a16ac0a883ced256 -Block 0013 [ 78]: b29aaf06bf1d2469 -Block 0013 [ 79]: 1dc488b3457a3f32 -Block 0013 [ 80]: 46402961371a034e -Block 0013 [ 81]: 7877d9505be77805 -Block 0013 [ 82]: 5078ade761e50cfa -Block 0013 [ 83]: 7ec4cd853f9b0335 -Block 0013 [ 84]: a14b957a670d405f -Block 0013 [ 85]: 1722084e87827637 -Block 0013 [ 86]: 15e8e2e3159dccc7 -Block 0013 [ 87]: 0ac1283e5aaada10 -Block 0013 [ 88]: 38a0e878c2a1ce0a -Block 0013 [ 89]: 566bc9d400a99ff4 -Block 0013 [ 90]: 509edd600055f6c3 -Block 0013 [ 91]: a57c5b4f94d5728b -Block 0013 [ 92]: c4b0df787e20289d -Block 0013 [ 93]: 24b30c1d65cf2d27 -Block 0013 [ 94]: 21a6c6fa045f0f88 -Block 0013 [ 95]: 3dd681b3a08f3773 -Block 0013 [ 96]: 725eeb9947bfcd95 -Block 0013 [ 97]: ad56a88e51d68125 -Block 0013 [ 98]: 35caf5c18f20a731 -Block 0013 [ 99]: 2ddd6ec2de7b9fd8 -Block 0013 [100]: 6295f275afd2977a -Block 0013 [101]: e85d4045aa9da6f0 -Block 0013 [102]: 473cc44a01350486 -Block 0013 [103]: 80d86fa1fc760a9a -Block 0013 [104]: 0b7e4a76a6b30ca3 -Block 0013 [105]: 9b0c415641abb4ad -Block 0013 [106]: a58f46926db36f37 -Block 0013 [107]: 9558bb81a088fbf8 -Block 0013 [108]: 20ab2645bfcd5707 -Block 0013 [109]: 41459b186702a0a2 -Block 0013 [110]: f01bcb9dd08ef05e -Block 0013 [111]: 91613230b930f3d7 -Block 0013 [112]: bd0c9a81312cf8bf -Block 0013 [113]: 3b521db4eda40f02 -Block 0013 [114]: 5f99993d710e0150 -Block 0013 [115]: 2efe9490a78cd199 -Block 0013 [116]: c29b3bc4d52109cc -Block 0013 [117]: cc9a7182f55cd6ab -Block 0013 [118]: fc674176b0dc3548 -Block 0013 [119]: d33b6146b3f1ab1a -Block 0013 [120]: 5531827ddf03bf29 -Block 0013 [121]: a301b4d782e7f83d -Block 0013 [122]: 8fe1e8d8657cd51c -Block 0013 [123]: abdecfdafada2c2e -Block 0013 [124]: e94378ab518f1d8a -Block 0013 [125]: 18c0089c7d48b989 -Block 0013 [126]: 91aefb6654bfba5c -Block 0013 [127]: 727fe8bdc1d2a601 -Block 0014 [ 0]: 10b1676c40244bb4 -Block 0014 [ 1]: 0ab039140f617e39 -Block 0014 [ 2]: dd79402081be7e8a -Block 0014 [ 3]: 79cee37643926e99 -Block 0014 [ 4]: f195ac2b27bae925 -Block 0014 [ 5]: f2a52f91848f0b1a -Block 0014 [ 6]: 55874c67614a346c -Block 0014 [ 7]: 0365bb7b50200a78 -Block 0014 [ 8]: 06421ea996b48809 -Block 0014 [ 9]: 2c28753bde627a8e -Block 0014 [ 10]: 2bf761bc6e2851be -Block 0014 [ 11]: e61da0f18228ce08 -Block 0014 [ 12]: 1c909989f8ff4a0c -Block 0014 [ 13]: b4c9f8b096bd52e1 -Block 0014 [ 14]: e0a3710feca1e3cc -Block 0014 [ 15]: acd36c867bedbb5b -Block 0014 [ 16]: 06bb06ddcd6997c3 -Block 0014 [ 17]: 5049d60c6e65e147 -Block 0014 [ 18]: 59a58a1ccff02b1a -Block 0014 [ 19]: 2d813ae8f5e627b8 -Block 0014 [ 20]: f7a3b8e855dfeb31 -Block 0014 [ 21]: 95a144f33b8d6865 -Block 0014 [ 22]: 48608e431db16dff -Block 0014 [ 23]: 5603d21bea9814e1 -Block 0014 [ 24]: 29a0395b87dfa45f -Block 0014 [ 25]: 94ba29202947a04a -Block 0014 [ 26]: add8292182af9466 -Block 0014 [ 27]: 3133c1ea696e1492 -Block 0014 [ 28]: fc4c66d16b34541a -Block 0014 [ 29]: d07d4bd572129296 -Block 0014 [ 30]: 21fabcc60cd7579b -Block 0014 [ 31]: 108a4ec2c3736878 -Block 0014 [ 32]: 1a7c4bd5f871ee74 -Block 0014 [ 33]: 59de5a617bf3f1db -Block 0014 [ 34]: 6d42b9e076aa6f5b -Block 0014 [ 35]: 4f44e6b995e08524 -Block 0014 [ 36]: 884b59cf9e61d728 -Block 0014 [ 37]: b63870e49d382a8e -Block 0014 [ 38]: e9f2a844db92cd51 -Block 0014 [ 39]: 7b47ba589406327c -Block 0014 [ 40]: 889bde34d1a312d2 -Block 0014 [ 41]: 0afbd1c0acc0fc19 -Block 0014 [ 42]: 7fc655169f230234 -Block 0014 [ 43]: 52c31ef06c1bef89 -Block 0014 [ 44]: 3fda04354e8054bc -Block 0014 [ 45]: 6060cdf695c598b4 -Block 0014 [ 46]: 07717cf2e169176e -Block 0014 [ 47]: 8e20cddb52f2cce8 -Block 0014 [ 48]: 88c93460aa78072d -Block 0014 [ 49]: 919f9fe662867b98 -Block 0014 [ 50]: b0a0f9f25b168bb8 -Block 0014 [ 51]: aa62d17fc6d9e630 -Block 0014 [ 52]: b5c64f4551eeeb17 -Block 0014 [ 53]: 451de645c0be63d8 -Block 0014 [ 54]: 16a451d91dc56ce6 -Block 0014 [ 55]: d47a79d435d0c6b3 -Block 0014 [ 56]: d36e1bc27b66b211 -Block 0014 [ 57]: 5a0412bcba3f0648 -Block 0014 [ 58]: d63998a31aa4403d -Block 0014 [ 59]: 0b6890275cd12195 -Block 0014 [ 60]: f41dc35ba2ee18dd -Block 0014 [ 61]: e52134ebb9407340 -Block 0014 [ 62]: e30e8684808a8207 -Block 0014 [ 63]: 6873a33cd17b1d42 -Block 0014 [ 64]: 2f6d2bc803375757 -Block 0014 [ 65]: 4c865ecb4981f520 -Block 0014 [ 66]: a4c88995838907d1 -Block 0014 [ 67]: a7c3e8d3c26c8a7e -Block 0014 [ 68]: 0f9f7be519c491b5 -Block 0014 [ 69]: ff2778b2dbb8b68d -Block 0014 [ 70]: 40c257be8af04112 -Block 0014 [ 71]: 4774c5f446e5ec29 -Block 0014 [ 72]: 16b8e4ea48ce6762 -Block 0014 [ 73]: 1b8bf07b5c72d62f -Block 0014 [ 74]: f957fbafcf0203f1 -Block 0014 [ 75]: 280aba1ffcf5548c -Block 0014 [ 76]: 78c193e68f2279fe -Block 0014 [ 77]: 32ad8f36dca6bc0a -Block 0014 [ 78]: 99df6ce337faa989 -Block 0014 [ 79]: 9c7b79fc62ed39bf -Block 0014 [ 80]: 5c48affa90dc91d6 -Block 0014 [ 81]: d902824f2de78b36 -Block 0014 [ 82]: ca800b35c6c4a3d7 -Block 0014 [ 83]: a2a0e389d67b2219 -Block 0014 [ 84]: 84abe64d24cda2fa -Block 0014 [ 85]: 3b8fee610918ae1c -Block 0014 [ 86]: 4807e19d49d2620e -Block 0014 [ 87]: 8a4daac02dd5a1f1 -Block 0014 [ 88]: 84193ecf9397a8ac -Block 0014 [ 89]: 3a878d3c7143626d -Block 0014 [ 90]: fefa2fea15776bed -Block 0014 [ 91]: b5b3aff0e3764326 -Block 0014 [ 92]: bb6cf890ad7bdd93 -Block 0014 [ 93]: 05db7bbb378d5b4a -Block 0014 [ 94]: ef536b5401914b3c -Block 0014 [ 95]: 1669cea05508ca6d -Block 0014 [ 96]: c6fa5dcd69b2289c -Block 0014 [ 97]: 81c4f6e588e88828 -Block 0014 [ 98]: f79df208f6a28f72 -Block 0014 [ 99]: eff01bd909548eaa -Block 0014 [100]: f3aadefe5fa688f7 -Block 0014 [101]: 5eb8f34faad19615 -Block 0014 [102]: 76e2160b0f8a3be3 -Block 0014 [103]: 384d6f6d12bf33dd -Block 0014 [104]: e19b1a15721e64ec -Block 0014 [105]: 56fe02cb2dd6bff7 -Block 0014 [106]: ea4740f275b38022 -Block 0014 [107]: 22c0fe908d71be63 -Block 0014 [108]: bbbb17d83f8ceaac -Block 0014 [109]: b4131310f114b478 -Block 0014 [110]: a30b7094283ce815 -Block 0014 [111]: f37b55dab3f0111a -Block 0014 [112]: 50b86270bad3f5cd -Block 0014 [113]: d8712d30644285da -Block 0014 [114]: 6a98fade890e4928 -Block 0014 [115]: 7ea0752485687df3 -Block 0014 [116]: dee516c8e6167ea6 -Block 0014 [117]: d6d6fdf505410090 -Block 0014 [118]: b32bc9d8ca917423 -Block 0014 [119]: 2d9f32b5bbdb1ccf -Block 0014 [120]: 35da94c8a2408b96 -Block 0014 [121]: f65500bffa03086c -Block 0014 [122]: 88b0596f10ff559e -Block 0014 [123]: 5cb9a2dedceb1a38 -Block 0014 [124]: 72360e96f822afd8 -Block 0014 [125]: 395b93cc58ec538a -Block 0014 [126]: 8d974a371c3f3083 -Block 0014 [127]: bca4da67b8208cca -Block 0015 [ 0]: f189eac80b130e98 -Block 0015 [ 1]: 33f6733a94d003dd -Block 0015 [ 2]: a6ac8be5d69abb9c -Block 0015 [ 3]: 9284f0e1ff25fa3e -Block 0015 [ 4]: 974c173009f23b54 -Block 0015 [ 5]: f039f84eac6c7176 -Block 0015 [ 6]: 6eeb055e842f01a6 -Block 0015 [ 7]: f4b998946c13fd7e -Block 0015 [ 8]: f9a6bd32f6917a3f -Block 0015 [ 9]: 123d884226b23a95 -Block 0015 [ 10]: dbcfa8deb02bde7a -Block 0015 [ 11]: 19e40500041dff85 -Block 0015 [ 12]: 98a779869b36095b -Block 0015 [ 13]: f1a4665aa48df2aa -Block 0015 [ 14]: f12aee1bbe71e754 -Block 0015 [ 15]: 2832355f0859ae9f -Block 0015 [ 16]: e36f3ac620b21342 -Block 0015 [ 17]: 18d5d719e771ef0a -Block 0015 [ 18]: 7071360728fb35b8 -Block 0015 [ 19]: 7f0d4cd2b1a2dbfc -Block 0015 [ 20]: e66f2beca141c0c2 -Block 0015 [ 21]: 633620378d948360 -Block 0015 [ 22]: 09bf7ab13b7b8113 -Block 0015 [ 23]: cb30b7662b21ab38 -Block 0015 [ 24]: 2edc4731d2308a7e -Block 0015 [ 25]: 4e49a895a5ef98f6 -Block 0015 [ 26]: db34f4043edc554c -Block 0015 [ 27]: 30697edc4c093bfb -Block 0015 [ 28]: 5797f671e7bc95f7 -Block 0015 [ 29]: d74bd8d2d1a1e1b0 -Block 0015 [ 30]: f583913e4ff8009e -Block 0015 [ 31]: 10281ef2dca1f23d -Block 0015 [ 32]: 8127bd68bf85332f -Block 0015 [ 33]: e6ff6cbc20158925 -Block 0015 [ 34]: 98ab39f4f1d48bef -Block 0015 [ 35]: e25a5306cb2675a8 -Block 0015 [ 36]: 2b2562295968c33c -Block 0015 [ 37]: 6358a7dfcf36d573 -Block 0015 [ 38]: 8cbd7034d97fd867 -Block 0015 [ 39]: f06ab20be6ace852 -Block 0015 [ 40]: 53b92749e6daba84 -Block 0015 [ 41]: 13a93af10eb8a565 -Block 0015 [ 42]: 84d658b873d03cc4 -Block 0015 [ 43]: b02815931e125a52 -Block 0015 [ 44]: fffc1b1cdf95d195 -Block 0015 [ 45]: ee73a37dadb40b39 -Block 0015 [ 46]: 9e4e88a2ae5dc686 -Block 0015 [ 47]: 1385cd88e6425087 -Block 0015 [ 48]: 4d772741406ee491 -Block 0015 [ 49]: 6e9e9271fb4edf7a -Block 0015 [ 50]: 5b02a5717a3acaf7 -Block 0015 [ 51]: 24882157db0dcda3 -Block 0015 [ 52]: 4a1688e4d711fd76 -Block 0015 [ 53]: ad144c4d2eea708a -Block 0015 [ 54]: 8aa4f446306360c7 -Block 0015 [ 55]: bf677939988d20e0 -Block 0015 [ 56]: c664e88326639846 -Block 0015 [ 57]: 97b47955a332e498 -Block 0015 [ 58]: 43b7457f3a89c803 -Block 0015 [ 59]: 15f108424f133523 -Block 0015 [ 60]: 60ef61eab9430dc0 -Block 0015 [ 61]: 41978abdc34630ca -Block 0015 [ 62]: 80fdee0a502c933a -Block 0015 [ 63]: 40aeb6bcf72a83dd -Block 0015 [ 64]: c34873b79f92feda -Block 0015 [ 65]: 93b287cc7f2d6576 -Block 0015 [ 66]: a5e423046b37f7b5 -Block 0015 [ 67]: 3e45cc879804f363 -Block 0015 [ 68]: 8089be076d83ec63 -Block 0015 [ 69]: 7f942e9341bfef64 -Block 0015 [ 70]: fc36f40b2c23727c -Block 0015 [ 71]: 88f59f1b7aab23f6 -Block 0015 [ 72]: 6cd961e20b46cf04 -Block 0015 [ 73]: af8daa17307ece9f -Block 0015 [ 74]: 55c8a732a5024405 -Block 0015 [ 75]: 493351c9d90f5dca -Block 0015 [ 76]: e383eb9d2b702083 -Block 0015 [ 77]: 3531d76a907ff09b -Block 0015 [ 78]: 8b948c1f1adf708c -Block 0015 [ 79]: f60219e3c20f81bf -Block 0015 [ 80]: fdef7e1d0096ae36 -Block 0015 [ 81]: 0023848ed3244880 -Block 0015 [ 82]: ae70ea7e1e56bf11 -Block 0015 [ 83]: 6e32bdb76fe2ca3c -Block 0015 [ 84]: 269abe8ddbe52a74 -Block 0015 [ 85]: 2850442d72280b43 -Block 0015 [ 86]: 22d905fb996b5ab9 -Block 0015 [ 87]: 287e2018200cad12 -Block 0015 [ 88]: 6a1fe428bd732e3f -Block 0015 [ 89]: 4eb723cfea7bb304 -Block 0015 [ 90]: 530dbd634dd3efe3 -Block 0015 [ 91]: 74800758ff2daba1 -Block 0015 [ 92]: 90e457d82488bb2f -Block 0015 [ 93]: 1830be721f3ef8f8 -Block 0015 [ 94]: 5ccb3fab432a940a -Block 0015 [ 95]: b6ea244a748381a3 -Block 0015 [ 96]: b52aa1d526514b32 -Block 0015 [ 97]: 56337c73fe59a3bd -Block 0015 [ 98]: 823e910e9955c22f -Block 0015 [ 99]: 828b237a8aca3c43 -Block 0015 [100]: 805565bdb4eaf460 -Block 0015 [101]: 68cd5ca7e6a0f2fc -Block 0015 [102]: 2932126750b1bf54 -Block 0015 [103]: d96142902c6521c5 -Block 0015 [104]: bdba35f039f09c7d -Block 0015 [105]: d90d774b89e2fa8c -Block 0015 [106]: af4b578a109f3cbb -Block 0015 [107]: e7780dd887a4e339 -Block 0015 [108]: 1fd0a50762a32802 -Block 0015 [109]: 50daa087e523e884 -Block 0015 [110]: 3e94bce39aaeefbf -Block 0015 [111]: 99807216aaa83931 -Block 0015 [112]: 7fe25144749c8f9f -Block 0015 [113]: abbada9b71d20f73 -Block 0015 [114]: a6c6d5de3a4c4eab -Block 0015 [115]: 4238c5b727ddab36 -Block 0015 [116]: 65013e9f62f9c1e2 -Block 0015 [117]: 2e3ba5a1d874ac1c -Block 0015 [118]: 14b6ead39de6c35d -Block 0015 [119]: a59f40506f9bfde1 -Block 0015 [120]: 12d16d162b0cb94c -Block 0015 [121]: 87beca102f670103 -Block 0015 [122]: 84f177dddbb32ccf -Block 0015 [123]: fb7aed944a854935 -Block 0015 [124]: 70eb5f312639686f -Block 0015 [125]: 303f408c14c9e843 -Block 0015 [126]: fb6ba597191585b2 -Block 0015 [127]: 1e824a1b47167883 -Block 0016 [ 0]: e1ddeb06fb830a30 -Block 0016 [ 1]: d9ceeeb4dc057082 -Block 0016 [ 2]: 464dfdb178004fc9 -Block 0016 [ 3]: 98bccedb76dddac2 -Block 0016 [ 4]: da66667814cbf9c2 -Block 0016 [ 5]: b5f24d697ddbd51f -Block 0016 [ 6]: 54ef6a4c43dba9a8 -Block 0016 [ 7]: 1e525968c22632cb -Block 0016 [ 8]: 8bef045bd2e18cf4 -Block 0016 [ 9]: b592f422d19ec71e -Block 0016 [ 10]: 7690ed8e96aced5b -Block 0016 [ 11]: 6126a2deb2a336f1 -Block 0016 [ 12]: a3fa671528218d61 -Block 0016 [ 13]: 41c3390dc61f4dd2 -Block 0016 [ 14]: cdae2748aa147504 -Block 0016 [ 15]: 0dee773c929709ea -Block 0016 [ 16]: 413ae9680850dcd0 -Block 0016 [ 17]: 7ed328cf552481d4 -Block 0016 [ 18]: b66e178fb368811a -Block 0016 [ 19]: 251b75d20032bf7a -Block 0016 [ 20]: 545e1f4ef50e1fd8 -Block 0016 [ 21]: 2c91fc1f70cbdf5d -Block 0016 [ 22]: fc950316eb56d1a5 -Block 0016 [ 23]: 57f2ac7ad2d8e7c4 -Block 0016 [ 24]: 254bc347e7938b20 -Block 0016 [ 25]: 241ac053e0b11fac -Block 0016 [ 26]: 54fe9568bdb48368 -Block 0016 [ 27]: 5b1df834c305aaab -Block 0016 [ 28]: 0b6677fe6f663d73 -Block 0016 [ 29]: 2a58d4e0d23987bf -Block 0016 [ 30]: eed5f52ba9cfbeee -Block 0016 [ 31]: e901a61d3ac59b61 -Block 0016 [ 32]: a1b047e2d37cd3b1 -Block 0016 [ 33]: b1932b38a69fd47e -Block 0016 [ 34]: 67a1438ad6a91e4c -Block 0016 [ 35]: 47747d87352a5176 -Block 0016 [ 36]: 89b3e43ee9466ab2 -Block 0016 [ 37]: 7d1bf0dad3286e44 -Block 0016 [ 38]: ff2505d940b11463 -Block 0016 [ 39]: 08da9591c67460e2 -Block 0016 [ 40]: 66f29fc0597f157f -Block 0016 [ 41]: 4819aff7a4691283 -Block 0016 [ 42]: 5a8b617bacc4ad46 -Block 0016 [ 43]: ebefc29bd65b838f -Block 0016 [ 44]: 05ff5dd1e5b3ab2e -Block 0016 [ 45]: 626c0f1ec1e47007 -Block 0016 [ 46]: 7a7b03b162769bec -Block 0016 [ 47]: 2e34537f239786fe -Block 0016 [ 48]: cb19fa94cc202fe2 -Block 0016 [ 49]: 31434f64bee338d2 -Block 0016 [ 50]: ba1eb78fb1b860fe -Block 0016 [ 51]: af72f1fe3ca7be85 -Block 0016 [ 52]: e5707ea32838fa1f -Block 0016 [ 53]: 69370e3f3c439886 -Block 0016 [ 54]: 373aa92fe81eff81 -Block 0016 [ 55]: 4f19d93514ca2f6d -Block 0016 [ 56]: c45314514c999c2c -Block 0016 [ 57]: 48636e71fbb8e2e2 -Block 0016 [ 58]: 6fd04c75f37d7cf5 -Block 0016 [ 59]: 535fffc75b2845af -Block 0016 [ 60]: 116f083a20faf1ea -Block 0016 [ 61]: a6b9cb30c10f4d7d -Block 0016 [ 62]: f65f50637963ed64 -Block 0016 [ 63]: ef45e24b1895a1e0 -Block 0016 [ 64]: 3cf86c8f7c86c83c -Block 0016 [ 65]: 7bb329c554448bc9 -Block 0016 [ 66]: b654af05945ffba9 -Block 0016 [ 67]: 05d3a07ecf3e821b -Block 0016 [ 68]: 2df71ff3f80362a7 -Block 0016 [ 69]: 79127958922bcbb3 -Block 0016 [ 70]: 622d190346b38432 -Block 0016 [ 71]: bf2dc65337296ccd -Block 0016 [ 72]: d6def66a26196560 -Block 0016 [ 73]: 122c98a535332c4d -Block 0016 [ 74]: 3b1169fcbf2e9411 -Block 0016 [ 75]: 9db2f647a52b8fe1 -Block 0016 [ 76]: f37e7eaf346c6c92 -Block 0016 [ 77]: 4aec23b4617cbd25 -Block 0016 [ 78]: 12cc694713dcd514 -Block 0016 [ 79]: 15a22d24f142459b -Block 0016 [ 80]: 8ec4e9db5dd2a88e -Block 0016 [ 81]: a4451dc90a8d2b75 -Block 0016 [ 82]: f92f552a4edc9084 -Block 0016 [ 83]: 233e0e15607eede6 -Block 0016 [ 84]: 3856b3e05a6c9904 -Block 0016 [ 85]: e3f46537f77c0332 -Block 0016 [ 86]: 24bc337ec13085f5 -Block 0016 [ 87]: 8ccdb10b7dd2de17 -Block 0016 [ 88]: 151b7ae5357d3e4b -Block 0016 [ 89]: f19457cb407fe87d -Block 0016 [ 90]: 6ea7efee69876066 -Block 0016 [ 91]: 51bb185a42a9ceb1 -Block 0016 [ 92]: 014c91e31f516f65 -Block 0016 [ 93]: 321202000b51bffd -Block 0016 [ 94]: 0b70e28615347b98 -Block 0016 [ 95]: ea6794917d1a9560 -Block 0016 [ 96]: fdd5631f8f8f3323 -Block 0016 [ 97]: d51704a4a308cfe2 -Block 0016 [ 98]: 65c17ee053a0e313 -Block 0016 [ 99]: 1ecd108d43490cdc -Block 0016 [100]: 8f6b57024c6aa782 -Block 0016 [101]: 161a22a97dbf0ad4 -Block 0016 [102]: 774aff9e1b3f6cdd -Block 0016 [103]: e588f347ad869391 -Block 0016 [104]: 4c2eee9fb6c6c0fc -Block 0016 [105]: 5834b8b51e701a47 -Block 0016 [106]: d4526cbb4d9bf681 -Block 0016 [107]: 0cadec8e56b0c70a -Block 0016 [108]: e1419c694af58241 -Block 0016 [109]: 2b51d757e16bb60b -Block 0016 [110]: a709cc9e3ac3cba5 -Block 0016 [111]: d500ae924ab9d656 -Block 0016 [112]: 4ef55d95efef9c67 -Block 0016 [113]: f4928cc63b92c4f7 -Block 0016 [114]: 201936d80b3bd3c2 -Block 0016 [115]: 367bfa07ca4c2aa8 -Block 0016 [116]: 7dcf97e3f616bfea -Block 0016 [117]: 09a9c5b8fbba724a -Block 0016 [118]: 4be5048497c65e6b -Block 0016 [119]: a38719b4833e8880 -Block 0016 [120]: 6fbb2b72f13bb81e -Block 0016 [121]: c0373061dbe0377e -Block 0016 [122]: 2c963162f790bbd5 -Block 0016 [123]: dfd2bc34bb295f3f -Block 0016 [124]: 4ccef74b9fab3a08 -Block 0016 [125]: d1bdf49c5e2397e5 -Block 0016 [126]: 43fc92247bddea27 -Block 0016 [127]: e3e79824dace601e -Block 0017 [ 0]: f8c0d8dbd83c6a93 -Block 0017 [ 1]: cbd22848e9e04bef -Block 0017 [ 2]: 8df51e47313583dd -Block 0017 [ 3]: 4e8920fa638fb77d -Block 0017 [ 4]: d5eb6e73d621f8ec -Block 0017 [ 5]: 8118af023e35d71c -Block 0017 [ 6]: 23ccdde7874145db -Block 0017 [ 7]: 33fbe77067316647 -Block 0017 [ 8]: 3554a4f1579eb0e1 -Block 0017 [ 9]: 9b783e2c31916c6d -Block 0017 [ 10]: 749b91c44deb5b1d -Block 0017 [ 11]: 8f34a76a9abfde3b -Block 0017 [ 12]: f288d5114f2cdd30 -Block 0017 [ 13]: b0eaa31bf934816a -Block 0017 [ 14]: 45dc0133186af561 -Block 0017 [ 15]: bee61e5d7de2b407 -Block 0017 [ 16]: 9cd877b670a9f7dc -Block 0017 [ 17]: 3d799d42cbcdabd8 -Block 0017 [ 18]: 2adc8fa64b275533 -Block 0017 [ 19]: 5a8555c5a474b462 -Block 0017 [ 20]: 294f076d4ae34d2d -Block 0017 [ 21]: e8765e154b60b76e -Block 0017 [ 22]: fced1cb25770df34 -Block 0017 [ 23]: 3f5eddfa13d36537 -Block 0017 [ 24]: f09d5a7587f1f135 -Block 0017 [ 25]: 94a43ea2088173e4 -Block 0017 [ 26]: f4647c28a56d3def -Block 0017 [ 27]: 8cbca4eb5f78d8fd -Block 0017 [ 28]: 9f24ca461a660dbd -Block 0017 [ 29]: 2f11b3dc4b162b34 -Block 0017 [ 30]: 15be4b6787f72d78 -Block 0017 [ 31]: 689415a8565fc6a3 -Block 0017 [ 32]: ba16470d503687a4 -Block 0017 [ 33]: b05c65f6b504dc3d -Block 0017 [ 34]: 202bc24f335a9aad -Block 0017 [ 35]: 1f93f1c5745c3fa2 -Block 0017 [ 36]: 308f4467e0ef4c7c -Block 0017 [ 37]: 987f2c7f7741543a -Block 0017 [ 38]: 0cb3223416b7e971 -Block 0017 [ 39]: 030c8741b1db2412 -Block 0017 [ 40]: 420d90a459271a6c -Block 0017 [ 41]: a3ee8a93febbd0ce -Block 0017 [ 42]: 8e1a9f2aad5ddf4b -Block 0017 [ 43]: e31ef7e016d6e5d4 -Block 0017 [ 44]: 69817e2130fa7bf9 -Block 0017 [ 45]: 42ecdc96fe63f7f7 -Block 0017 [ 46]: 75f217a3d588f719 -Block 0017 [ 47]: ea1110e25bab55aa -Block 0017 [ 48]: 17d6eee2bfd1fc92 -Block 0017 [ 49]: 770ba296808b3d1f -Block 0017 [ 50]: ebe66bd4b4e209d9 -Block 0017 [ 51]: 2856c4111e42c984 -Block 0017 [ 52]: 4f3a2c8cb161439c -Block 0017 [ 53]: 931c9fab713a4362 -Block 0017 [ 54]: 59bcd09f39ee5245 -Block 0017 [ 55]: 2f72987bc8cb90ac -Block 0017 [ 56]: a94531dc789bf64b -Block 0017 [ 57]: d556a056d5eca922 -Block 0017 [ 58]: 1c8c8e2607265fbf -Block 0017 [ 59]: ce05b759e48d786a -Block 0017 [ 60]: 0cf70e6b71b6b087 -Block 0017 [ 61]: 3905b0f10c5753e5 -Block 0017 [ 62]: 204c0e23f983b729 -Block 0017 [ 63]: eea30fffb591692a -Block 0017 [ 64]: 2092e319f719acf4 -Block 0017 [ 65]: 303114a5662660ae -Block 0017 [ 66]: 0aa60806230aaea5 -Block 0017 [ 67]: 5daaf906c740ef37 -Block 0017 [ 68]: 43174da93c1899bd -Block 0017 [ 69]: 55eefb2ffa06c6d1 -Block 0017 [ 70]: e3f36fdfe0ec5692 -Block 0017 [ 71]: 13c15a1a05e1a107 -Block 0017 [ 72]: e051fabc5e0d43f8 -Block 0017 [ 73]: 7df93f40edd1fa91 -Block 0017 [ 74]: e55805cce70493d0 -Block 0017 [ 75]: 07c1351fd7576c60 -Block 0017 [ 76]: d053915e4a55bba5 -Block 0017 [ 77]: 9b8d03ca70afa1b6 -Block 0017 [ 78]: dc9aa7a607b68164 -Block 0017 [ 79]: ec3abd6f5fcb70f3 -Block 0017 [ 80]: 5fded738f31f9b5f -Block 0017 [ 81]: daadb148ef52da6b -Block 0017 [ 82]: 2931a672df2e5e9c -Block 0017 [ 83]: bddd0d5d7a314df0 -Block 0017 [ 84]: a962d2f797da997f -Block 0017 [ 85]: aaaec1c3a4e7402f -Block 0017 [ 86]: 2a069d415ba940f7 -Block 0017 [ 87]: 5c1915a6dd37a3fb -Block 0017 [ 88]: af295da329360919 -Block 0017 [ 89]: 2704a39402efad8c -Block 0017 [ 90]: 81d3c2b0ea7230d4 -Block 0017 [ 91]: a90a2b8791cf17a2 -Block 0017 [ 92]: 7bca0e2cb4532c12 -Block 0017 [ 93]: 286e51161ff47347 -Block 0017 [ 94]: dce682ef46ce8926 -Block 0017 [ 95]: deaa896bfaf85484 -Block 0017 [ 96]: 84b8dfd1e71d76dd -Block 0017 [ 97]: eefd07b5eab683c0 -Block 0017 [ 98]: 9f3c8e987d506cf9 -Block 0017 [ 99]: 129112d058177710 -Block 0017 [100]: 85c12d6275744ae3 -Block 0017 [101]: 1a32ce9834a94da9 -Block 0017 [102]: 55c47e8dd9e026df -Block 0017 [103]: 5d40e159b07e97a2 -Block 0017 [104]: 834c6bd420bab8fe -Block 0017 [105]: 0a53f14dd39d8ebb -Block 0017 [106]: 48fdb70b92100de9 -Block 0017 [107]: 82dbac2e655058bd -Block 0017 [108]: 59772c79fdc45cc0 -Block 0017 [109]: ee7b3f05d26ed6fc -Block 0017 [110]: 9ad113092d4e2f6c -Block 0017 [111]: f9959f9f69a733d8 -Block 0017 [112]: 4eacd5578cc7b2b9 -Block 0017 [113]: 107381cd15b9f5db -Block 0017 [114]: 62ab4703795a6f01 -Block 0017 [115]: 05e6fc31906fba7a -Block 0017 [116]: 88258c5f311e914a -Block 0017 [117]: 9288c816aa7c111e -Block 0017 [118]: 3624485540cc2cf4 -Block 0017 [119]: 94af9fe90ae22a71 -Block 0017 [120]: 0bcdc699892b3fa7 -Block 0017 [121]: cb5c6c5298ccc4d4 -Block 0017 [122]: 2648f01cf5322a4d -Block 0017 [123]: 6d6e80d62493a5ec -Block 0017 [124]: cb46cc606d710890 -Block 0017 [125]: fa63666adfb0c7d8 -Block 0017 [126]: 9d7a5d6d313966a3 -Block 0017 [127]: 9dca2d40ecf3caf9 -Block 0018 [ 0]: 41d8eba2b27e8ffb -Block 0018 [ 1]: ddff1e14d97eafc5 -Block 0018 [ 2]: d6521ada6762a59a -Block 0018 [ 3]: 75ec7d924ed612fe -Block 0018 [ 4]: a5e33611406ed95e -Block 0018 [ 5]: 23a98ec1e96ae57c -Block 0018 [ 6]: 5f9fd3d229c24c83 -Block 0018 [ 7]: 76fa60f7d8c8998f -Block 0018 [ 8]: 5c030f75c22fcd89 -Block 0018 [ 9]: 534ac5f50eb44fca -Block 0018 [ 10]: a739bd10713b8b97 -Block 0018 [ 11]: 4e6f87176e72e398 -Block 0018 [ 12]: 6e0d2a49f9aa5dc3 -Block 0018 [ 13]: 6cbc16f8383af2c9 -Block 0018 [ 14]: 8f5a5cce393406ad -Block 0018 [ 15]: b7b0df795df78383 -Block 0018 [ 16]: 32ac85c1b3afb835 -Block 0018 [ 17]: 5322dfb0eb9caf98 -Block 0018 [ 18]: 7a1de529f2f636f5 -Block 0018 [ 19]: 5b9ace630dc336df -Block 0018 [ 20]: 29d91addab9bdff3 -Block 0018 [ 21]: 1f84a68592a1862c -Block 0018 [ 22]: a3fc3835fe84d8af -Block 0018 [ 23]: ea35a61b06b43d45 -Block 0018 [ 24]: 5f41f2b0836bfab8 -Block 0018 [ 25]: 769f922caed6e9f0 -Block 0018 [ 26]: 8ef2cc29fbbc35b6 -Block 0018 [ 27]: d1ec004e64b184bd -Block 0018 [ 28]: e30664f43e049be0 -Block 0018 [ 29]: 2ca44a1dc6d8d4a3 -Block 0018 [ 30]: 8f59369926d5e973 -Block 0018 [ 31]: 26399ac675daed1e -Block 0018 [ 32]: c9ecf425a6f8ea3a -Block 0018 [ 33]: b108f214f96adfad -Block 0018 [ 34]: 25fbe09109ed920f -Block 0018 [ 35]: 14c5a9e69e48beeb -Block 0018 [ 36]: 03a28f26f088774e -Block 0018 [ 37]: 242853b73545ab1f -Block 0018 [ 38]: edf3c093f44adc92 -Block 0018 [ 39]: b64b1e909d8ae53e -Block 0018 [ 40]: e6cebbd27a8a1823 -Block 0018 [ 41]: a5f0395142c18539 -Block 0018 [ 42]: e0f5d5665927e888 -Block 0018 [ 43]: 7a683bbac488c694 -Block 0018 [ 44]: 3534c4247936f396 -Block 0018 [ 45]: 20eeb0deffa9b7d8 -Block 0018 [ 46]: 76f68bd31fc40cc3 -Block 0018 [ 47]: 56d5211ed2076486 -Block 0018 [ 48]: 3ae860a16080d1e5 -Block 0018 [ 49]: 9bb9aeaf8ff539de -Block 0018 [ 50]: 92bbd2ed06a94dd6 -Block 0018 [ 51]: b670108883c32507 -Block 0018 [ 52]: 043ac5bc24bd7023 -Block 0018 [ 53]: 9a26fd657901d39b -Block 0018 [ 54]: 001505488513a271 -Block 0018 [ 55]: e0f52e9ee43d5acb -Block 0018 [ 56]: 207c9951a27e8d42 -Block 0018 [ 57]: d1a024de5a287d4d -Block 0018 [ 58]: 7339d8810c9752ad -Block 0018 [ 59]: 50c291efea09790e -Block 0018 [ 60]: 413952cfc7f4d524 -Block 0018 [ 61]: 97a796f4ba686a1e -Block 0018 [ 62]: a5d3b36326136c79 -Block 0018 [ 63]: c83d34934cff9bce -Block 0018 [ 64]: d647ed0ab4f70fb0 -Block 0018 [ 65]: cb3b129980d593c5 -Block 0018 [ 66]: 2daeeb3b7a32c464 -Block 0018 [ 67]: 3d11ca2eaa3129dc -Block 0018 [ 68]: 69918f90199141fc -Block 0018 [ 69]: 4a966b9201c121aa -Block 0018 [ 70]: fcd187be4ddd30ec -Block 0018 [ 71]: a9ffdcf157639d51 -Block 0018 [ 72]: 57c44134d9ede65e -Block 0018 [ 73]: 2969a0b45033e193 -Block 0018 [ 74]: 578504557677f544 -Block 0018 [ 75]: c72f9a3106f1840d -Block 0018 [ 76]: 1817a772dac99295 -Block 0018 [ 77]: a7c3e3c25780f8f1 -Block 0018 [ 78]: 25088cced1cecb19 -Block 0018 [ 79]: fb0f74cfbeb475a7 -Block 0018 [ 80]: 7521f5a566fbc53b -Block 0018 [ 81]: eb43e619fe7627be -Block 0018 [ 82]: bfc0451e97bb2c09 -Block 0018 [ 83]: 2a9a8e551e19412d -Block 0018 [ 84]: 72c355f26e74cdf9 -Block 0018 [ 85]: 812b95f0e42905c3 -Block 0018 [ 86]: e47fbc58e7a23e8e -Block 0018 [ 87]: 8287cfa4dbf6b4f1 -Block 0018 [ 88]: edd351257983dcc7 -Block 0018 [ 89]: 6f2d7e6268c46c70 -Block 0018 [ 90]: 8873e4d627217a6c -Block 0018 [ 91]: dadb6fb73483f950 -Block 0018 [ 92]: 96c0f1f56ef916cf -Block 0018 [ 93]: 8ae137ba396c5b51 -Block 0018 [ 94]: c5623d376dc44ff0 -Block 0018 [ 95]: 468744eec4787edb -Block 0018 [ 96]: 541c9a809d09ad87 -Block 0018 [ 97]: 12c06624677a34c0 -Block 0018 [ 98]: 65a9f78b9721ab68 -Block 0018 [ 99]: c0fce7c5f3c14e4b -Block 0018 [100]: 220ff8d8bc2c9aa8 -Block 0018 [101]: d8b873796ec7c116 -Block 0018 [102]: 0270437041c8097c -Block 0018 [103]: adf5866d0ab4d935 -Block 0018 [104]: bf01ece42754ef4c -Block 0018 [105]: e2c36d1246558b3b -Block 0018 [106]: b65d2e98ef5cd6bf -Block 0018 [107]: 9b93da55732f8f35 -Block 0018 [108]: 0074ddefd19ad665 -Block 0018 [109]: 4a3e02e5f328c4fb -Block 0018 [110]: 9ac2195c1da0dca1 -Block 0018 [111]: 475dcad3d814a6b1 -Block 0018 [112]: 6988288e956f5c14 -Block 0018 [113]: fc836a01bb8ca4a3 -Block 0018 [114]: b8d217fa56dad448 -Block 0018 [115]: 06727706c59a4a6a -Block 0018 [116]: 94cc16f7239d205e -Block 0018 [117]: b9c84c3c7718ea3e -Block 0018 [118]: b2304a46173492bc -Block 0018 [119]: 1c0f38ecb6f1cd07 -Block 0018 [120]: 3722bd0642232c72 -Block 0018 [121]: bc4f0e23d2022839 -Block 0018 [122]: 4cf310c54cfee088 -Block 0018 [123]: dd4dcee5f70e9a6e -Block 0018 [124]: 4c3d4fbd3aa75015 -Block 0018 [125]: 87ba959de0f63169 -Block 0018 [126]: 5c1e8fd799894a1c -Block 0018 [127]: 865447d77e4b2e13 -Block 0019 [ 0]: eabae49e13df33ac -Block 0019 [ 1]: 386269d795a8f899 -Block 0019 [ 2]: 1a1d30373d0c4905 -Block 0019 [ 3]: abbe30aec1ac09dc -Block 0019 [ 4]: f67470f8729cc26b -Block 0019 [ 5]: db68c7d8a44b4d5f -Block 0019 [ 6]: 3d513341faae4e19 -Block 0019 [ 7]: dcf3e0974e76be86 -Block 0019 [ 8]: a3c5a352c9fbf4d0 -Block 0019 [ 9]: e4e34f59a33d54e6 -Block 0019 [ 10]: 81470205f725bc1d -Block 0019 [ 11]: 743bb43a01c90b8f -Block 0019 [ 12]: ac231cbb51f86d7f -Block 0019 [ 13]: 76a54de1db9a2d49 -Block 0019 [ 14]: ce92d6a9fa205255 -Block 0019 [ 15]: be195b17682d7ba3 -Block 0019 [ 16]: fba4f7b8cb7cb499 -Block 0019 [ 17]: d6df894fabf3682f -Block 0019 [ 18]: 8b54ace58eba1262 -Block 0019 [ 19]: 30247e3c460bce00 -Block 0019 [ 20]: f6b7e6b2938e97d4 -Block 0019 [ 21]: 5d68ef5ec31b8518 -Block 0019 [ 22]: 2abcae4d72aeddfe -Block 0019 [ 23]: 57141fa0f14c98a5 -Block 0019 [ 24]: 293cec5f696540ff -Block 0019 [ 25]: b57fd404b2bbc3e6 -Block 0019 [ 26]: 1b1fe64e4d2e5982 -Block 0019 [ 27]: bb7c3161fe94c152 -Block 0019 [ 28]: cdfe146e99217225 -Block 0019 [ 29]: 53b945e98283d4e5 -Block 0019 [ 30]: 07406d1f09e99c7c -Block 0019 [ 31]: 9420f9136e228ce3 -Block 0019 [ 32]: 7bb1709ddccf5482 -Block 0019 [ 33]: 5be06e97ad22b8ec -Block 0019 [ 34]: 8fd822c429336371 -Block 0019 [ 35]: 708ff63d3cdee345 -Block 0019 [ 36]: 3be6b50763010552 -Block 0019 [ 37]: 3b5b31627020868f -Block 0019 [ 38]: ed8e108725e4a36a -Block 0019 [ 39]: c9e00b22f7ee55a0 -Block 0019 [ 40]: ab10cc8e2124e3b0 -Block 0019 [ 41]: 680b39f254c17357 -Block 0019 [ 42]: bb3f25cf9dec09bf -Block 0019 [ 43]: 9cded1b385da5a5c -Block 0019 [ 44]: a8824f4dde37cae2 -Block 0019 [ 45]: 640741dc69e5d6f6 -Block 0019 [ 46]: 3943126660d3ab0b -Block 0019 [ 47]: d035bafd210ac487 -Block 0019 [ 48]: 1329d8bc8de0280a -Block 0019 [ 49]: 294ee403668a24a4 -Block 0019 [ 50]: b9371e440144702d -Block 0019 [ 51]: 4d83f8a6a76e04e5 -Block 0019 [ 52]: f0ecca30f442c18b -Block 0019 [ 53]: 1b05e7da5a2a7708 -Block 0019 [ 54]: 206b24859e3b7817 -Block 0019 [ 55]: 3f48f4fba18a722a -Block 0019 [ 56]: f6b9ea739daec77d -Block 0019 [ 57]: e0646a6e2f3d7888 -Block 0019 [ 58]: b16c17c22375a7d6 -Block 0019 [ 59]: 89fc35a3719b82ed -Block 0019 [ 60]: c1b372d596d55826 -Block 0019 [ 61]: 122c39ffa8304b19 -Block 0019 [ 62]: d59a7a685c911edf -Block 0019 [ 63]: 0d9530abb61832ef -Block 0019 [ 64]: ac58dca00e9fce01 -Block 0019 [ 65]: f5962c53929d8c31 -Block 0019 [ 66]: 0d78b7ff701fe901 -Block 0019 [ 67]: a0f021b918b06bb3 -Block 0019 [ 68]: 9c5d043e9d746ae8 -Block 0019 [ 69]: 3f5e29d072761db1 -Block 0019 [ 70]: c3ee3470217337bf -Block 0019 [ 71]: 4125236e2528aa90 -Block 0019 [ 72]: 40c3a08d6c07650b -Block 0019 [ 73]: 71ad98ff1278387a -Block 0019 [ 74]: ab60b3e13af4a91b -Block 0019 [ 75]: 2014763714f5a399 -Block 0019 [ 76]: 1311f2de0099b0d4 -Block 0019 [ 77]: c740e9ed79e3adcf -Block 0019 [ 78]: fae29a8949a373b2 -Block 0019 [ 79]: 9656ccc5932cf87f -Block 0019 [ 80]: 80e5d6fd6d78ecc7 -Block 0019 [ 81]: 63881ea17dbd6af8 -Block 0019 [ 82]: 27031c2db85a88c9 -Block 0019 [ 83]: 225fcd42ace4217d -Block 0019 [ 84]: 630d473ffe3ea3fa -Block 0019 [ 85]: b930183e630ee15a -Block 0019 [ 86]: 99b0a373d0700de4 -Block 0019 [ 87]: ac67d86ade7a0ff3 -Block 0019 [ 88]: 960346c43a4274b0 -Block 0019 [ 89]: 07bd044bcccec75a -Block 0019 [ 90]: ec1032137ca21709 -Block 0019 [ 91]: 46bf9749f28f7d1a -Block 0019 [ 92]: 9b1c7277bb9d5ab1 -Block 0019 [ 93]: e0c200f2bc1ddb26 -Block 0019 [ 94]: e31376b9283d63ed -Block 0019 [ 95]: 26dfa5fe7517caab -Block 0019 [ 96]: eb6f2eb775379ad0 -Block 0019 [ 97]: ee0f910cf9f8f31a -Block 0019 [ 98]: 06b5103d17d2989d -Block 0019 [ 99]: a9008a2572950c2b -Block 0019 [100]: 62d96078e0e320a6 -Block 0019 [101]: df7bf4070f3a1530 -Block 0019 [102]: 892d3bdbd986be5d -Block 0019 [103]: e64a5e43fb9f6b4a -Block 0019 [104]: 620297da0ccae536 -Block 0019 [105]: ea388ef4cbd46326 -Block 0019 [106]: 70a971c66a94fadc -Block 0019 [107]: 30d6ed877a5d8484 -Block 0019 [108]: 90066a6e95d77f87 -Block 0019 [109]: 46170065f3945fcc -Block 0019 [110]: 5eec3c145bcc73ad -Block 0019 [111]: 9ed9b4503bd9bd18 -Block 0019 [112]: b7b6bdfed4116990 -Block 0019 [113]: 418511a8dda758e3 -Block 0019 [114]: 8e79e8268e4f28b4 -Block 0019 [115]: cd76ba2354acc3f7 -Block 0019 [116]: c2ea82d31473fbad -Block 0019 [117]: 44f19f11aa6c6eec -Block 0019 [118]: 5317b3b060485c0c -Block 0019 [119]: 1a8cf52343a2f35f -Block 0019 [120]: 54245b8759ac29f8 -Block 0019 [121]: 1d446c77f484be94 -Block 0019 [122]: 30b3ce2ea67ccda1 -Block 0019 [123]: 7f86cadfd8d2e406 -Block 0019 [124]: 03a748ad48712800 -Block 0019 [125]: 98e39c608dce89b7 -Block 0019 [126]: 89467383917bcab9 -Block 0019 [127]: 679a4a7f7a32645b -Block 0020 [ 0]: 269b4f54d5b6ea86 -Block 0020 [ 1]: 3e8f0e7bfa7f9b18 -Block 0020 [ 2]: 3c24ba9a51fae5a4 -Block 0020 [ 3]: 710ea18a16c6b046 -Block 0020 [ 4]: 68e94ffbde56ad2f -Block 0020 [ 5]: 86da1a6a88291d99 -Block 0020 [ 6]: 8cfaac3fe27fc668 -Block 0020 [ 7]: eed4b933fab3a449 -Block 0020 [ 8]: f71c3da612229377 -Block 0020 [ 9]: 3368fca33417690e -Block 0020 [ 10]: 0122102ca85016da -Block 0020 [ 11]: 787753a175ccb6e9 -Block 0020 [ 12]: be72a2fb1a353c25 -Block 0020 [ 13]: 04141fca4af1d143 -Block 0020 [ 14]: d5ff0e4f8bf7083b -Block 0020 [ 15]: c9414c9628e8b42a -Block 0020 [ 16]: 2c715fb098bccba6 -Block 0020 [ 17]: 4f503c04dc96c4a7 -Block 0020 [ 18]: 410e1febb9942559 -Block 0020 [ 19]: 1cf639f21af783da -Block 0020 [ 20]: 1c1435c8a6f82db2 -Block 0020 [ 21]: f1cd6ac7f46302f0 -Block 0020 [ 22]: 642393e4685039cd -Block 0020 [ 23]: 337e7cdd34a96b5d -Block 0020 [ 24]: 69d74b6ed0058f4c -Block 0020 [ 25]: 5a7f2ae1c692eaaf -Block 0020 [ 26]: 4492c035073d26af -Block 0020 [ 27]: e8a02ecc89abe328 -Block 0020 [ 28]: 3bc9c8c5dadda071 -Block 0020 [ 29]: cdfb2fcf7e0cd089 -Block 0020 [ 30]: 2e6cae86d961e86a -Block 0020 [ 31]: bb4c8da8c790e028 -Block 0020 [ 32]: ad0eeb7a7acbfb5f -Block 0020 [ 33]: e87a8fb9e2adbb04 -Block 0020 [ 34]: 6321586882426a05 -Block 0020 [ 35]: 74f28496cb02d128 -Block 0020 [ 36]: 1eb5bfd4db4a9a6c -Block 0020 [ 37]: 2ac3a783b8d8270f -Block 0020 [ 38]: a0d668f390021153 -Block 0020 [ 39]: c24108c03011b66d -Block 0020 [ 40]: 051fdb3e3f3aed34 -Block 0020 [ 41]: 484bc346942d1cbc -Block 0020 [ 42]: 9872e0ba4d324643 -Block 0020 [ 43]: 634e78730386b24b -Block 0020 [ 44]: 0d45f77882cac20a -Block 0020 [ 45]: 2563d91cdc8769ee -Block 0020 [ 46]: d15ce3d51e52a2a7 -Block 0020 [ 47]: a2fe0729f7ac8808 -Block 0020 [ 48]: 8e25f4fe2233ece5 -Block 0020 [ 49]: 39ed8579f13d1a19 -Block 0020 [ 50]: dd377af4aea398aa -Block 0020 [ 51]: 7515ba75210832ff -Block 0020 [ 52]: 0575630fd37e1f53 -Block 0020 [ 53]: 6f9912cf58d98dc6 -Block 0020 [ 54]: ef86cc11eb440d76 -Block 0020 [ 55]: ca50b1e8f855acf7 -Block 0020 [ 56]: 893c938d4e382afa -Block 0020 [ 57]: 7ca5580e9832a0bc -Block 0020 [ 58]: b375c7ea7d45fb66 -Block 0020 [ 59]: 836875f69d7226b0 -Block 0020 [ 60]: ffe41d0d91068504 -Block 0020 [ 61]: 989828f2ea37d7e1 -Block 0020 [ 62]: 43dd0fef0eb1ec0b -Block 0020 [ 63]: 77f86256c1d7b23b -Block 0020 [ 64]: 46b433077021cc67 -Block 0020 [ 65]: 7f7e8e5b69c96716 -Block 0020 [ 66]: 4165168edff2204c -Block 0020 [ 67]: 08c41002eed0d2d1 -Block 0020 [ 68]: f1cb8faed68a26f0 -Block 0020 [ 69]: 0065ca90c981a82f -Block 0020 [ 70]: 3ba799f102db0422 -Block 0020 [ 71]: e820f5f562ea5ef4 -Block 0020 [ 72]: 8f43af626790b9f1 -Block 0020 [ 73]: a6a51921588adc5c -Block 0020 [ 74]: cbeb139bd0a91bb2 -Block 0020 [ 75]: d82f0cf77c8e41b7 -Block 0020 [ 76]: 3d06e68f63323b5f -Block 0020 [ 77]: 91b6755b9db0d038 -Block 0020 [ 78]: e8c6f6c0cc63a663 -Block 0020 [ 79]: 7d94ea6a2ee23a2f -Block 0020 [ 80]: c245f840027ccbd2 -Block 0020 [ 81]: 46ff208f126d520d -Block 0020 [ 82]: 01f8167f979679d9 -Block 0020 [ 83]: 2a9d18db600ec858 -Block 0020 [ 84]: 11bbdca37897fcad -Block 0020 [ 85]: 141a41ff68571e1f -Block 0020 [ 86]: 390c617bb94bea7e -Block 0020 [ 87]: 556aa8fed6a96cf1 -Block 0020 [ 88]: fc21092d05f38a09 -Block 0020 [ 89]: e56ef53df73a4f96 -Block 0020 [ 90]: da9cbd854a3cffc9 -Block 0020 [ 91]: 5cf4c3ad805e9f91 -Block 0020 [ 92]: 431bf9648a49612c -Block 0020 [ 93]: 2663d89c48654b6e -Block 0020 [ 94]: e79521d0d32cdf99 -Block 0020 [ 95]: 4f1ceca1c344f7bf -Block 0020 [ 96]: 89330e4f55dbf4fc -Block 0020 [ 97]: f4338c691915e196 -Block 0020 [ 98]: 26b1101246f9bcdc -Block 0020 [ 99]: f8432055e31fc4a8 -Block 0020 [100]: 3266a7a5c4dad24c -Block 0020 [101]: 94c854dd76241f0d -Block 0020 [102]: 99bee1ce63474a15 -Block 0020 [103]: 74bb4aa98d4eb3a1 -Block 0020 [104]: 3cfc2ac312e1c45c -Block 0020 [105]: 6b883da6c5ddc9c4 -Block 0020 [106]: 0743f1fdce6a56ee -Block 0020 [107]: 7c69a5e1a0dcf03e -Block 0020 [108]: fa66426c585f3464 -Block 0020 [109]: 99a8ec507bc26e0d -Block 0020 [110]: 7a28ca634a80f5fe -Block 0020 [111]: 600fba11d691a99c -Block 0020 [112]: d67094eac4f48e31 -Block 0020 [113]: 80376da2f9893c8e -Block 0020 [114]: 8d13887a2e6e16f7 -Block 0020 [115]: 64edf8096260ecec -Block 0020 [116]: 36c2885b38e52b20 -Block 0020 [117]: 459b84990d0598e5 -Block 0020 [118]: 3db3b437866cfec5 -Block 0020 [119]: 294035be518d3bbb -Block 0020 [120]: b9dfc1c086e87c0a -Block 0020 [121]: 510eaff39735d8bc -Block 0020 [122]: ab9ced4efc23c16d -Block 0020 [123]: ed0985c99ce8f77d -Block 0020 [124]: e862b3f058619ddd -Block 0020 [125]: 457d0d4ceca5cb31 -Block 0020 [126]: 1bb73497b80c8610 -Block 0020 [127]: 1156041f667292ff -Block 0021 [ 0]: 17b4c2abe86f2897 -Block 0021 [ 1]: cbb482190938ccd8 -Block 0021 [ 2]: 09e6454421255c7b -Block 0021 [ 3]: 34ea66797350bbf4 -Block 0021 [ 4]: b08b039be403c4fb -Block 0021 [ 5]: c12bb73dac7934ae -Block 0021 [ 6]: 3fd05c8a944dfebc -Block 0021 [ 7]: 7d9e0e6c0c0c1c46 -Block 0021 [ 8]: ca45c30e190203b8 -Block 0021 [ 9]: a50382d342a306f4 -Block 0021 [ 10]: 304f0a3f51cee32a -Block 0021 [ 11]: 9bd7ec4d41224ebc -Block 0021 [ 12]: 3644bd6b37a9c65e -Block 0021 [ 13]: 318da00f1ed8c6e6 -Block 0021 [ 14]: da2d235e81557df5 -Block 0021 [ 15]: b78edb91572aaac6 -Block 0021 [ 16]: 74a9d0e5cb2001bf -Block 0021 [ 17]: d92bf9e32a07b0fc -Block 0021 [ 18]: 52dffb55b33e624a -Block 0021 [ 19]: 490e48183d213f68 -Block 0021 [ 20]: e28ec7a2771feebc -Block 0021 [ 21]: 9fb9637f8be653dc -Block 0021 [ 22]: c99bbc6df1e6c0a7 -Block 0021 [ 23]: ba1e24ed83829bd8 -Block 0021 [ 24]: 8abe8cd81b291831 -Block 0021 [ 25]: a5d3f6aebf6cd859 -Block 0021 [ 26]: 98dda64e3d33c005 -Block 0021 [ 27]: 97be589257c84bf5 -Block 0021 [ 28]: e27a06b1ff130d3a -Block 0021 [ 29]: 6ec7117cea210b36 -Block 0021 [ 30]: 111acd56ac355eba -Block 0021 [ 31]: a8eef71b826e7eab -Block 0021 [ 32]: 4ec68125a7cfb615 -Block 0021 [ 33]: 932bd9ca8390c775 -Block 0021 [ 34]: 51b4107894563221 -Block 0021 [ 35]: 4f9bd56272c5d569 -Block 0021 [ 36]: 1124c4abc2802bd7 -Block 0021 [ 37]: ab9d5b19efca80bc -Block 0021 [ 38]: be9e5035c3d260a1 -Block 0021 [ 39]: 27e7df352e918662 -Block 0021 [ 40]: d18118afc14e3bd3 -Block 0021 [ 41]: 4f1ba18852decdd1 -Block 0021 [ 42]: 7cf79363017d4911 -Block 0021 [ 43]: 17a5cc740117b5a1 -Block 0021 [ 44]: d2477f7f3d5d028b -Block 0021 [ 45]: 4ca5cd043721ebde -Block 0021 [ 46]: fddbb22550b51849 -Block 0021 [ 47]: 97ae58c4799ca750 -Block 0021 [ 48]: 452df8cca9a156bd -Block 0021 [ 49]: fb11d84264de9b30 -Block 0021 [ 50]: fd3b057638165488 -Block 0021 [ 51]: 0d813d621a3366c9 -Block 0021 [ 52]: 4756062fd3bd46f8 -Block 0021 [ 53]: 696bca682db5bb74 -Block 0021 [ 54]: 32d80dfe2be958d3 -Block 0021 [ 55]: 1f6c4037c090c687 -Block 0021 [ 56]: 9139c4d021534fac -Block 0021 [ 57]: 43311d46e08c4c88 -Block 0021 [ 58]: e0f4a375ef393912 -Block 0021 [ 59]: bf1db582f22ffc4f -Block 0021 [ 60]: 0a71ec4c54667179 -Block 0021 [ 61]: 6eb26d0a6f9d40d9 -Block 0021 [ 62]: 022f4fc9d70b674b -Block 0021 [ 63]: 366694b68ac94113 -Block 0021 [ 64]: 87c49c593c614f27 -Block 0021 [ 65]: cb7691ade7b4e3db -Block 0021 [ 66]: 9ab50d350f3b76c5 -Block 0021 [ 67]: 963e8b4ba65faf26 -Block 0021 [ 68]: c8b6caeaadec21b0 -Block 0021 [ 69]: f39f45a19bd109e8 -Block 0021 [ 70]: 2366f4f4cde23673 -Block 0021 [ 71]: 757a9d6c2cac7ca8 -Block 0021 [ 72]: 2096a46aca98ef6f -Block 0021 [ 73]: 5c8928a3be29c46e -Block 0021 [ 74]: a8658d5f9bb9ac48 -Block 0021 [ 75]: a2f678d6c78f2bea -Block 0021 [ 76]: b5ca9f573fd46c28 -Block 0021 [ 77]: 1c4c588ffeaa7304 -Block 0021 [ 78]: 22fe1ea2e21f58dd -Block 0021 [ 79]: 0383af29fc89c577 -Block 0021 [ 80]: 4cd4d3d68dde2827 -Block 0021 [ 81]: d50342ac6da4265c -Block 0021 [ 82]: 4ef2fc0217047481 -Block 0021 [ 83]: 9b4abfcae05f45ec -Block 0021 [ 84]: 65aa951feacbd437 -Block 0021 [ 85]: 86c133b88597ed58 -Block 0021 [ 86]: 3b363bce9f4ee3ec -Block 0021 [ 87]: 7acbee487ed5446b -Block 0021 [ 88]: 942b1703ff00610f -Block 0021 [ 89]: b105c6a5ed4196b5 -Block 0021 [ 90]: d70d811c3f30d240 -Block 0021 [ 91]: 29ddada97ea6101b -Block 0021 [ 92]: 99819a3ffdbd958a -Block 0021 [ 93]: e023fb3f4d4ad3d6 -Block 0021 [ 94]: baab5aef9e588c17 -Block 0021 [ 95]: dce51988a7418b79 -Block 0021 [ 96]: 48fdadbac5a11a65 -Block 0021 [ 97]: 42b7b66efffb8f5e -Block 0021 [ 98]: c7c8f3f6f7bc5d85 -Block 0021 [ 99]: 0a7738cd6a5fad47 -Block 0021 [100]: 8b3a03f8fb566033 -Block 0021 [101]: 49723e452bb29a70 -Block 0021 [102]: 98e32b7a5f4f8471 -Block 0021 [103]: 1696713cf1cfeca5 -Block 0021 [104]: 42c3ba036c3e764f -Block 0021 [105]: 0907d697be28fdbf -Block 0021 [106]: b172dcbf1332c5f6 -Block 0021 [107]: bc90c713f8d177ab -Block 0021 [108]: c74b2b83df4a3fb4 -Block 0021 [109]: 806796945f7970ee -Block 0021 [110]: 50996835394d4221 -Block 0021 [111]: 02476eb09a0a98dc -Block 0021 [112]: 5f9af4ebce5aab37 -Block 0021 [113]: 60c1de13240a58d0 -Block 0021 [114]: 332cb5d422cf7df9 -Block 0021 [115]: 2c210191386ec581 -Block 0021 [116]: a38b29631d4127a4 -Block 0021 [117]: c4b6459d55cfb424 -Block 0021 [118]: a925a87f6510e076 -Block 0021 [119]: 6d39268556f0a2c7 -Block 0021 [120]: 716f35a0f2749fa7 -Block 0021 [121]: aa80e7f9ebf68e6d -Block 0021 [122]: 57ab564f64cd5fac -Block 0021 [123]: 58019bb64c24d659 -Block 0021 [124]: b86acb9911e8e025 -Block 0021 [125]: a8aee8d75e91cc71 -Block 0021 [126]: 6ab7210d4ddcf8b2 -Block 0021 [127]: 4311b77316be2c79 -Block 0022 [ 0]: 61a6ff51085e1dfe -Block 0022 [ 1]: 1f5bf5edca141a25 -Block 0022 [ 2]: 0eb22ca5c3fc8bfd -Block 0022 [ 3]: 096be76c523a2ca8 -Block 0022 [ 4]: e9fe3f7d5ac67faf -Block 0022 [ 5]: 5acadc120ef7884d -Block 0022 [ 6]: ec49fda5c88742b3 -Block 0022 [ 7]: 902b13afbb4107be -Block 0022 [ 8]: 744d2922934d0beb -Block 0022 [ 9]: e6d72c7f5d1c532a -Block 0022 [ 10]: ec6356952d67f6dd -Block 0022 [ 11]: 3d4aa12d18e8352e -Block 0022 [ 12]: ff896a193a375011 -Block 0022 [ 13]: b3b4883dccf68953 -Block 0022 [ 14]: 4a620343cf266a7c -Block 0022 [ 15]: 5404bc64195b1f4f -Block 0022 [ 16]: 69494f69154fcb1d -Block 0022 [ 17]: 947db329bbdb4cd8 -Block 0022 [ 18]: 486a729f03eab8df -Block 0022 [ 19]: 9c570aa48dbdd34b -Block 0022 [ 20]: c71e71a0b0f41441 -Block 0022 [ 21]: d09d043418ee3ecd -Block 0022 [ 22]: 73fe1423a65144c3 -Block 0022 [ 23]: fbd495d2d82df0aa -Block 0022 [ 24]: ed4617c1bc87968c -Block 0022 [ 25]: 5ec6eaf86871340e -Block 0022 [ 26]: 97329b3572e7f3ba -Block 0022 [ 27]: 08fe3a910411f8e8 -Block 0022 [ 28]: d2d92688687f769f -Block 0022 [ 29]: 0572673de37c3623 -Block 0022 [ 30]: 6baeb3fad387399a -Block 0022 [ 31]: 03b6857fbade033b -Block 0022 [ 32]: dec7d2fb4389a1f4 -Block 0022 [ 33]: 62bf9de8caeef073 -Block 0022 [ 34]: 3535db8501d42797 -Block 0022 [ 35]: 426148dffb8b6c6c -Block 0022 [ 36]: cfdbf603331aa1ba -Block 0022 [ 37]: d526ff87d8bbf7d8 -Block 0022 [ 38]: ec27978a3066ffa8 -Block 0022 [ 39]: 07c5d9f1ac3504eb -Block 0022 [ 40]: 03e4290511b51612 -Block 0022 [ 41]: 65709c94ef2664ca -Block 0022 [ 42]: 4c2794cee1ca9dea -Block 0022 [ 43]: b3f53335e16434aa -Block 0022 [ 44]: ce63271edf85caf7 -Block 0022 [ 45]: 459b724ef24ef009 -Block 0022 [ 46]: 1c5e9e9668b3ba6a -Block 0022 [ 47]: 3d76a5f2e85365af -Block 0022 [ 48]: bbff41578ebc089a -Block 0022 [ 49]: 8c3e3d9e30f82118 -Block 0022 [ 50]: 154541c874a970d5 -Block 0022 [ 51]: e28b76c2f1255dfe -Block 0022 [ 52]: 857d0590f8d33c50 -Block 0022 [ 53]: d631fe61e5af784a -Block 0022 [ 54]: 7b45c83168fd3457 -Block 0022 [ 55]: af5e354071395c20 -Block 0022 [ 56]: d6e032527c5e42ae -Block 0022 [ 57]: 209888f062668f8e -Block 0022 [ 58]: b8d138d8fcb57269 -Block 0022 [ 59]: 22a9ab6cc0c1a912 -Block 0022 [ 60]: 704a6260aebf0689 -Block 0022 [ 61]: 65819c67058eeedb -Block 0022 [ 62]: 1156016eaaa2c028 -Block 0022 [ 63]: 07ab5e27a7ee85f1 -Block 0022 [ 64]: ca06f6545486bc04 -Block 0022 [ 65]: 6d5e5e4685da6424 -Block 0022 [ 66]: 2d8b6e05f2e649f4 -Block 0022 [ 67]: e1bb5e3165663da1 -Block 0022 [ 68]: cfae06b12eb26241 -Block 0022 [ 69]: 30368e8c03d0f6cb -Block 0022 [ 70]: ea9e4e5a1a15220b -Block 0022 [ 71]: 0ced69387046c774 -Block 0022 [ 72]: 32bd0f765f6d2e90 -Block 0022 [ 73]: a537a0cf7a48de71 -Block 0022 [ 74]: 40f7ad34f549721d -Block 0022 [ 75]: 16f48f8c860c255c -Block 0022 [ 76]: 9aaddbc5643bf9fd -Block 0022 [ 77]: 4fc5670d938c4060 -Block 0022 [ 78]: d9930f3b78aa29d0 -Block 0022 [ 79]: d4e43d6280ab3b51 -Block 0022 [ 80]: da10e01944beb383 -Block 0022 [ 81]: f08884432d877b53 -Block 0022 [ 82]: ec57f639f4d371b9 -Block 0022 [ 83]: 904a2ea3a5d0307c -Block 0022 [ 84]: 2d49f8d9f9b6dce1 -Block 0022 [ 85]: e6da1ba672b7bcef -Block 0022 [ 86]: b2d22296480d6b8f -Block 0022 [ 87]: f78b659c7b32b534 -Block 0022 [ 88]: be564c07566930fb -Block 0022 [ 89]: 16d4223b5cbadf2f -Block 0022 [ 90]: 06d18d9da6c73ee6 -Block 0022 [ 91]: 3e44dcfd7da27d18 -Block 0022 [ 92]: 217bc24e2bae57f7 -Block 0022 [ 93]: 49a8a3f1152c7037 -Block 0022 [ 94]: b63c0c5729d5261b -Block 0022 [ 95]: 317ad8dec554eb1e -Block 0022 [ 96]: 1cd40e3803488528 -Block 0022 [ 97]: e93ffc3a78bedcb7 -Block 0022 [ 98]: f28c842c550d2ab1 -Block 0022 [ 99]: 4d311be4c8a29098 -Block 0022 [100]: 9c5cf9159c8eb3fc -Block 0022 [101]: 1e58e5b4bb1b28a9 -Block 0022 [102]: 27337340376d8e81 -Block 0022 [103]: 6ced8f7b00504dc5 -Block 0022 [104]: c3e20cdbe90d1d09 -Block 0022 [105]: fa4436423628b433 -Block 0022 [106]: 5574d238558a591e -Block 0022 [107]: ebddbd36bdb1415b -Block 0022 [108]: df5cda5812a18e7c -Block 0022 [109]: 9f9aade1bb756c3a -Block 0022 [110]: 33d27b3747e16282 -Block 0022 [111]: ffb19eeed77e0f70 -Block 0022 [112]: 7e06ba7933616246 -Block 0022 [113]: 94b313c4b145defb -Block 0022 [114]: 8df180f62502dd74 -Block 0022 [115]: 5181f971e6917593 -Block 0022 [116]: 16c113e1c1b916a7 -Block 0022 [117]: 915bfbe0cea5c438 -Block 0022 [118]: 9195ba860ffd4924 -Block 0022 [119]: 084b15c7884b460b -Block 0022 [120]: b85902697f1fbf9d -Block 0022 [121]: b9a66a8ac079ab07 -Block 0022 [122]: 5a715fed9ba3ebf2 -Block 0022 [123]: 42ce627af9462ed0 -Block 0022 [124]: e49799409e744ba0 -Block 0022 [125]: 9f54148151c32bae -Block 0022 [126]: 6532db4062d5cae5 -Block 0022 [127]: 1c6ae63866aca622 -Block 0023 [ 0]: 71b6b6aca18b78a6 -Block 0023 [ 1]: 00ba35d5c7a24fe8 -Block 0023 [ 2]: 23b225256d68661e -Block 0023 [ 3]: 49648a8cac7875c8 -Block 0023 [ 4]: 052e7d601ff9c1f8 -Block 0023 [ 5]: 7fba093144801e1f -Block 0023 [ 6]: 7927b854cfd88de7 -Block 0023 [ 7]: a11ea2bc81caf36b -Block 0023 [ 8]: b7e7ae76ae03126d -Block 0023 [ 9]: 60d0807e48e5db71 -Block 0023 [ 10]: ddf1d2beef8a2dee -Block 0023 [ 11]: b9924481df9d2cd3 -Block 0023 [ 12]: d0b26e2edeadd78e -Block 0023 [ 13]: 6913abfc0351b6b4 -Block 0023 [ 14]: cad416dcaf5dd5fb -Block 0023 [ 15]: a43f1deada1a802b -Block 0023 [ 16]: 2150535e28518ddc -Block 0023 [ 17]: 9ab467acbf91fd64 -Block 0023 [ 18]: 9afb5ba8ebaa158b -Block 0023 [ 19]: 743713b59576c89f -Block 0023 [ 20]: 40a9b9dfd096ed85 -Block 0023 [ 21]: b0563463bb53de6e -Block 0023 [ 22]: a2a02b23689dca10 -Block 0023 [ 23]: 7fabf80d6e78eed6 -Block 0023 [ 24]: 0fa6d2177a605bc0 -Block 0023 [ 25]: ed6766d412cf1e54 -Block 0023 [ 26]: bb0480e3b472ba6b -Block 0023 [ 27]: da084b05e5454f0f -Block 0023 [ 28]: 83a895c52c11834f -Block 0023 [ 29]: 07a7edef2841be43 -Block 0023 [ 30]: d612d8cee619b42d -Block 0023 [ 31]: d9b8fe0ca5898f99 -Block 0023 [ 32]: 70f2724814542a4a -Block 0023 [ 33]: 5920b6bc3b6b3caa -Block 0023 [ 34]: 144b26a1e650a6d4 -Block 0023 [ 35]: d91a86c85aa62ca4 -Block 0023 [ 36]: 8d99b9be60c56aec -Block 0023 [ 37]: 227e477f539aeb59 -Block 0023 [ 38]: d364dd616cc3b90f -Block 0023 [ 39]: 38f9643fb6637388 -Block 0023 [ 40]: 1d394841225a0066 -Block 0023 [ 41]: ec35e6b57868aa4f -Block 0023 [ 42]: 8ff8e59354814fa3 -Block 0023 [ 43]: 75d87416cd0225db -Block 0023 [ 44]: f16a8d875e127f26 -Block 0023 [ 45]: e92a4d13dc6b4d72 -Block 0023 [ 46]: a8ad1696cea7b54a -Block 0023 [ 47]: 8b3f716ce03aa77f -Block 0023 [ 48]: f6e70eb1fb494101 -Block 0023 [ 49]: 58e27c7dc8a70aa5 -Block 0023 [ 50]: 493f01c81a9b6b27 -Block 0023 [ 51]: 023efca7911d5bc7 -Block 0023 [ 52]: e33e448c98a97f10 -Block 0023 [ 53]: b0261944d98e2c31 -Block 0023 [ 54]: 9593200f81e7972f -Block 0023 [ 55]: 4f66e5a211c0ebce -Block 0023 [ 56]: 54ba34f05b2d3546 -Block 0023 [ 57]: dfd889d802536436 -Block 0023 [ 58]: 9abd4e9759d11d54 -Block 0023 [ 59]: b4752150d4f62535 -Block 0023 [ 60]: f1e9f64b7b3b60df -Block 0023 [ 61]: 81d184500bfa18c6 -Block 0023 [ 62]: bcd72f47ef6b9fe0 -Block 0023 [ 63]: 140c4f355bc6b553 -Block 0023 [ 64]: 8d4f7f8418330c7c -Block 0023 [ 65]: 6e3afc414724d608 -Block 0023 [ 66]: bc267a035071bc1a -Block 0023 [ 67]: 156fae6c712c065b -Block 0023 [ 68]: f9c57277382a1f89 -Block 0023 [ 69]: 0299652c21ba7eae -Block 0023 [ 70]: 3cb2859906a40ced -Block 0023 [ 71]: 53f71c9235df76b5 -Block 0023 [ 72]: 2df91f772efc52c4 -Block 0023 [ 73]: c796cad57787e135 -Block 0023 [ 74]: 9f578feb31fd77d6 -Block 0023 [ 75]: c09bd264239bc205 -Block 0023 [ 76]: cb44da110cb5b368 -Block 0023 [ 77]: 3bff59dfcccb50a4 -Block 0023 [ 78]: 0ab31a2ef1b93b29 -Block 0023 [ 79]: aa27612628dc4b4f -Block 0023 [ 80]: 641a26e82e94dd36 -Block 0023 [ 81]: 7e078b59d2827af7 -Block 0023 [ 82]: 3b5010c0fffb9674 -Block 0023 [ 83]: 7a7cfbcf82144d03 -Block 0023 [ 84]: e1f531fe11ae9627 -Block 0023 [ 85]: 4ee64eb4df28757a -Block 0023 [ 86]: ed0f36bcc988bd97 -Block 0023 [ 87]: 60dc8c5ae0338b1d -Block 0023 [ 88]: 5c4371dc7476482c -Block 0023 [ 89]: 2e1477181780fb98 -Block 0023 [ 90]: 33032e2d91f913af -Block 0023 [ 91]: 73ae22f0311ba5d8 -Block 0023 [ 92]: 83d30b9409e6b567 -Block 0023 [ 93]: a22134803a423a9a -Block 0023 [ 94]: 2546765a58acab4a -Block 0023 [ 95]: 45140ea710d5b1eb -Block 0023 [ 96]: 3fefc60626708193 -Block 0023 [ 97]: c49989661e0967cc -Block 0023 [ 98]: 956cb9090041edf0 -Block 0023 [ 99]: 85ce994e449272b1 -Block 0023 [100]: 77cbb274fd8546a3 -Block 0023 [101]: 820222b05ac04e86 -Block 0023 [102]: 9de2fb4747dd05cc -Block 0023 [103]: e47f6957d7bd52b5 -Block 0023 [104]: 453b5ebf33f91b87 -Block 0023 [105]: 666fd007ad7896f9 -Block 0023 [106]: 2786f30e5c14a822 -Block 0023 [107]: 161a849e41872871 -Block 0023 [108]: 79b0cfded556359e -Block 0023 [109]: 7c2f3eda92ba20d3 -Block 0023 [110]: 1440b52c7e60d1f8 -Block 0023 [111]: dc8134fc1139d38d -Block 0023 [112]: 99f47f609a2842c6 -Block 0023 [113]: cf71b12956787955 -Block 0023 [114]: 923f3c21d2b602eb -Block 0023 [115]: ef0eb85a0f0044d0 -Block 0023 [116]: d2d7cd413a3734a7 -Block 0023 [117]: 52c792c0299769ef -Block 0023 [118]: 87cfe0b332479275 -Block 0023 [119]: 09ae791666a1e1d7 -Block 0023 [120]: 5c6fe74964c18a98 -Block 0023 [121]: 65fc39dad202ef2a -Block 0023 [122]: d238f7673a7fc116 -Block 0023 [123]: 2c59c0ee6153643b -Block 0023 [124]: c808636d1c65d472 -Block 0023 [125]: 519346986007bb4e -Block 0023 [126]: 927c3fa1ea477d77 -Block 0023 [127]: 37c224071d594e0d -Block 0024 [ 0]: 9956a13b1b49a85e -Block 0024 [ 1]: eb4f6e16f84345b4 -Block 0024 [ 2]: 34f6ca61e8c33636 -Block 0024 [ 3]: 6619df465c5f5c38 -Block 0024 [ 4]: 26bee849a293cd26 -Block 0024 [ 5]: d935f8ce2a13010a -Block 0024 [ 6]: 520924f2c511c492 -Block 0024 [ 7]: 05c9abfd72f2ca8a -Block 0024 [ 8]: 734bd3d20a147017 -Block 0024 [ 9]: 680c0da85f1852db -Block 0024 [ 10]: 113faf1a430babd9 -Block 0024 [ 11]: 15e983b8123560c2 -Block 0024 [ 12]: bf5688b1cd7981a7 -Block 0024 [ 13]: 5db814aafe1ed2bf -Block 0024 [ 14]: 14cd28c8b2cf7803 -Block 0024 [ 15]: dcc18e8bd28e55d5 -Block 0024 [ 16]: 46e43400f0591055 -Block 0024 [ 17]: 2841dc8cb0d8cf95 -Block 0024 [ 18]: 58158a74bb3c194c -Block 0024 [ 19]: d0306f7ad12acb75 -Block 0024 [ 20]: 8dd0ccd0618c6944 -Block 0024 [ 21]: e292b0011d5d135d -Block 0024 [ 22]: c5ec0e7363dfb996 -Block 0024 [ 23]: 76d0e59bae0dcaa6 -Block 0024 [ 24]: b3582ae0d8f07720 -Block 0024 [ 25]: f08264f0e63f22ec -Block 0024 [ 26]: e5e831ae374d05d5 -Block 0024 [ 27]: 5a2e612598c01d0d -Block 0024 [ 28]: 3fba5724c4b5b898 -Block 0024 [ 29]: e833e8d79e08d5b7 -Block 0024 [ 30]: f427b869f5c1f3fc -Block 0024 [ 31]: 4b7d2b43fedf05de -Block 0024 [ 32]: a5e8d8d68f802ecd -Block 0024 [ 33]: 005f86378c842d77 -Block 0024 [ 34]: a4110ab6ae4dbdb4 -Block 0024 [ 35]: 0ad3d04b3a846de7 -Block 0024 [ 36]: 66f3472239cf48fa -Block 0024 [ 37]: 225ee0eb863c5474 -Block 0024 [ 38]: 7464f3987d5d780e -Block 0024 [ 39]: f02a6163175bdcc8 -Block 0024 [ 40]: 06e837a1ac826f07 -Block 0024 [ 41]: 63759540df7a5a2a -Block 0024 [ 42]: d804b31c5f48feda -Block 0024 [ 43]: 15390632d3e458c6 -Block 0024 [ 44]: 83c4211a657fa871 -Block 0024 [ 45]: e5b2232c95dbca6f -Block 0024 [ 46]: 3e99d6d6151e5169 -Block 0024 [ 47]: 80d9d65d4a9fc135 -Block 0024 [ 48]: 81ef675d5a8d33d7 -Block 0024 [ 49]: d791ecaf1a8c00b8 -Block 0024 [ 50]: 6d237b0014b9f4f3 -Block 0024 [ 51]: e2e8796d6cc66289 -Block 0024 [ 52]: d8f6d1f343c2aaaa -Block 0024 [ 53]: 7385abc47311c98d -Block 0024 [ 54]: ca72576fbe6eaea2 -Block 0024 [ 55]: 2d5f7c84c051a65a -Block 0024 [ 56]: a752e21c12698852 -Block 0024 [ 57]: f781ab22ef0001df -Block 0024 [ 58]: a5c09dfb70ee58d5 -Block 0024 [ 59]: b861372d101ff470 -Block 0024 [ 60]: 5da08c8421df97ab -Block 0024 [ 61]: 76c2459521edf83a -Block 0024 [ 62]: 7ea6c0dbac13c4e4 -Block 0024 [ 63]: 8f669c059c89658f -Block 0024 [ 64]: 901e1cb70e5bdada -Block 0024 [ 65]: 595e1291e3cbab62 -Block 0024 [ 66]: 4201eaf65a5494b4 -Block 0024 [ 67]: 6bfdb634efea5e73 -Block 0024 [ 68]: d4cce6cfd93349c7 -Block 0024 [ 69]: 3f3bf90f1ccf7d43 -Block 0024 [ 70]: d57d37b02100a068 -Block 0024 [ 71]: ec9a67f508dd0a5b -Block 0024 [ 72]: f353c388db97240a -Block 0024 [ 73]: b54d96369fd7e18f -Block 0024 [ 74]: 7cf8073613299bc6 -Block 0024 [ 75]: d34b71de098a5c34 -Block 0024 [ 76]: 8896dc90580c9acb -Block 0024 [ 77]: f3d2e7edc21e6d17 -Block 0024 [ 78]: 0aa32dff469c42f4 -Block 0024 [ 79]: d84d6bd84a3f5704 -Block 0024 [ 80]: 592d29696aa1611b -Block 0024 [ 81]: 4c769b1a91910e3c -Block 0024 [ 82]: d9181ac139052fa7 -Block 0024 [ 83]: 7bf07944f4e78370 -Block 0024 [ 84]: a13c3bb0f9367b49 -Block 0024 [ 85]: 3c4bf4c3b33b4414 -Block 0024 [ 86]: 9408f64ba6cbb2af -Block 0024 [ 87]: 9e572c0ab8a66682 -Block 0024 [ 88]: 05146fe0279cc63a -Block 0024 [ 89]: 392e3a7f2ff4c0af -Block 0024 [ 90]: 6cb1b4abc10f26a8 -Block 0024 [ 91]: a97380cef9f9c1d7 -Block 0024 [ 92]: a39611d6f966761d -Block 0024 [ 93]: a1be82dfbebdc6f6 -Block 0024 [ 94]: ab962e96f1066c7d -Block 0024 [ 95]: 427b91b8b9a1f976 -Block 0024 [ 96]: 3c6fb8f326956c60 -Block 0024 [ 97]: 52263ae65140b3c5 -Block 0024 [ 98]: 4b21f82c2026b56d -Block 0024 [ 99]: 9b6689849e05f482 -Block 0024 [100]: 1898c9348c12d11a -Block 0024 [101]: 95da7290a7784974 -Block 0024 [102]: 0f025fba1a081ef6 -Block 0024 [103]: d2212444055affa3 -Block 0024 [104]: 3d0b9a0e26ba4c60 -Block 0024 [105]: a96f202adbb1dcc0 -Block 0024 [106]: 5f2d801ffbe742a8 -Block 0024 [107]: 398b83e5c3b82ec6 -Block 0024 [108]: 9bb98a30513045e0 -Block 0024 [109]: 9e49507f75e0e273 -Block 0024 [110]: b6167732adb9ace3 -Block 0024 [111]: 14c51dd25c3b0711 -Block 0024 [112]: d23719bfb63c813f -Block 0024 [113]: 466f1d49562849ea -Block 0024 [114]: 5f65af04730f1d3d -Block 0024 [115]: 4ae36efe0c348731 -Block 0024 [116]: 3b1cf728f294dcc1 -Block 0024 [117]: 8afc9d93b01daac7 -Block 0024 [118]: fb5387bac10ba1fe -Block 0024 [119]: 5600926e4360daf7 -Block 0024 [120]: 910a656b9b23d68b -Block 0024 [121]: 400469d9842f7c37 -Block 0024 [122]: ae81a2f8022e7b9a -Block 0024 [123]: 55124c8da08f7aab -Block 0024 [124]: d792973dc799ad1a -Block 0024 [125]: 46a5fbef3053ef4d -Block 0024 [126]: 54dd3ef21014e501 -Block 0024 [127]: 874e921013f3b13d -Block 0025 [ 0]: f40ac8f5845def30 -Block 0025 [ 1]: 1f4296441bbd6779 -Block 0025 [ 2]: 65f2730864a5a27c -Block 0025 [ 3]: 41cee44733d6a4eb -Block 0025 [ 4]: 37972b4e9c1337f0 -Block 0025 [ 5]: 0da94ac748ecfccc -Block 0025 [ 6]: d00ec56bd42ab356 -Block 0025 [ 7]: 9995be2379853fce -Block 0025 [ 8]: 5e133846cb0874c8 -Block 0025 [ 9]: d6aa81a7f7fe4116 -Block 0025 [ 10]: 5c23e4d73838297b -Block 0025 [ 11]: de4046378b228598 -Block 0025 [ 12]: 82033a1812a810b7 -Block 0025 [ 13]: 36d19a02b1197e62 -Block 0025 [ 14]: 27847cf3eb8fed8c -Block 0025 [ 15]: ca441892fd7a3298 -Block 0025 [ 16]: e7d1ee4610813059 -Block 0025 [ 17]: e95b1311a07e4d59 -Block 0025 [ 18]: 9a74bbad3499e48b -Block 0025 [ 19]: 3fa0ce3260f1c2a2 -Block 0025 [ 20]: 2c02959f4e1baf3c -Block 0025 [ 21]: c681e7d24a07ed41 -Block 0025 [ 22]: 865fde98d28f65c6 -Block 0025 [ 23]: cd7ecc6a328adea8 -Block 0025 [ 24]: 7a84b37001af50da -Block 0025 [ 25]: 49e511ec6f403431 -Block 0025 [ 26]: 5a69a0ddbf783485 -Block 0025 [ 27]: 578f49f8c13f2d16 -Block 0025 [ 28]: 5695e8d9cb8d4a0d -Block 0025 [ 29]: 85a7a121175fc91b -Block 0025 [ 30]: e437059a8c03b9e2 -Block 0025 [ 31]: bab846561467bc3e -Block 0025 [ 32]: c281376ed6bc4f21 -Block 0025 [ 33]: 7cd34007c72e99a7 -Block 0025 [ 34]: 969adb28d883462c -Block 0025 [ 35]: 71763c3e19cfd5b7 -Block 0025 [ 36]: 8388042bbb291add -Block 0025 [ 37]: a29b5a461d706d9a -Block 0025 [ 38]: b4f60478fad36637 -Block 0025 [ 39]: 260fd795fa3fac08 -Block 0025 [ 40]: 73c8ef82f97dacec -Block 0025 [ 41]: d26b5e8add1ec2ac -Block 0025 [ 42]: 3d6f281924c49974 -Block 0025 [ 43]: 99a45ea9a1da887a -Block 0025 [ 44]: 1eb184eb695585c8 -Block 0025 [ 45]: 510c194fb94a8610 -Block 0025 [ 46]: acc7ebcd8b3819d9 -Block 0025 [ 47]: 4fe39efc1efe8096 -Block 0025 [ 48]: 1066a79624bc93b7 -Block 0025 [ 49]: a6d83c9fbbcde211 -Block 0025 [ 50]: a0078f9f08d55000 -Block 0025 [ 51]: 3a51a4ad52307cfd -Block 0025 [ 52]: 7650dc6bf608bb68 -Block 0025 [ 53]: 6bf46dd79e2e379f -Block 0025 [ 54]: b3c98c3f49ebdea6 -Block 0025 [ 55]: 4634c08aff58b2cb -Block 0025 [ 56]: 66b7637206c1241d -Block 0025 [ 57]: 97c04418a19c7a10 -Block 0025 [ 58]: 572a0c8d5e97bc3d -Block 0025 [ 59]: 2c0c4bcc9a8b913f -Block 0025 [ 60]: 2d42eb8a5c89595e -Block 0025 [ 61]: a490f7f31b5a32f2 -Block 0025 [ 62]: 3456ab2f7b9f5153 -Block 0025 [ 63]: a90cf3f0015e90e3 -Block 0025 [ 64]: 4081d7690d2b09f4 -Block 0025 [ 65]: 8170b2e0f6724b15 -Block 0025 [ 66]: bfa2c86fcf51d13d -Block 0025 [ 67]: cf4026c87fc36b50 -Block 0025 [ 68]: a19eeb309e0ed951 -Block 0025 [ 69]: 94968a68e780bb82 -Block 0025 [ 70]: fd06b14cb0e244d3 -Block 0025 [ 71]: 1a5df1d3bd1da7bd -Block 0025 [ 72]: cf92c12d5501b592 -Block 0025 [ 73]: 33dfcade68dcf782 -Block 0025 [ 74]: 3c34c8de434cd8a0 -Block 0025 [ 75]: 583fd5fa9cdc334b -Block 0025 [ 76]: a561a5771600760d -Block 0025 [ 77]: 5bfff03f2074662c -Block 0025 [ 78]: 9a3cab09c49296a2 -Block 0025 [ 79]: c56e377afb6b9ac7 -Block 0025 [ 80]: 98e2570ecb9f0e9a -Block 0025 [ 81]: cc934d5b70c73d3e -Block 0025 [ 82]: e69d1e00bb93731e -Block 0025 [ 83]: 8fc0c795dc74ebb9 -Block 0025 [ 84]: 220b46e546584007 -Block 0025 [ 85]: c74519effd86d175 -Block 0025 [ 86]: 5ab87fef552bc8e3 -Block 0025 [ 87]: cc959be70d739717 -Block 0025 [ 88]: 17f1b7bc5d39f702 -Block 0025 [ 89]: 762ebc3e921b84ee -Block 0025 [ 90]: 888a1d4dc4c3380f -Block 0025 [ 91]: db8f9235f7204500 -Block 0025 [ 92]: 503d9ddadb99fd67 -Block 0025 [ 93]: 62409e9cde17fe73 -Block 0025 [ 94]: e9ca642a2880194a -Block 0025 [ 95]: 6f4c703d8fd584f9 -Block 0025 [ 96]: b10fc66cf1416e64 -Block 0025 [ 97]: 91e9eba3834f82e9 -Block 0025 [ 98]: 20ab216a2cc0113a -Block 0025 [ 99]: bd621abe0b12ccb8 -Block 0025 [100]: 0c1c7cd2b30bfd1c -Block 0025 [101]: 200b79e1e90ee82b -Block 0025 [102]: 6a6287dc3b913eff -Block 0025 [103]: fc0b87e1ad118bc3 -Block 0025 [104]: 9a6b87099c4706ed -Block 0025 [105]: 373fabb9b76bf6ed -Block 0025 [106]: 536e17be7870998e -Block 0025 [107]: 2c18f19b85c54d1c -Block 0025 [108]: 5169df225240c0be -Block 0025 [109]: e653baf950d6b0b5 -Block 0025 [110]: 3d7977cb7e63fa91 -Block 0025 [111]: b3ffcdd7e3d15e58 -Block 0025 [112]: 00d16dcf47a61b68 -Block 0025 [113]: 8d1c4f35e4354ea8 -Block 0025 [114]: 5b7920f6270c732e -Block 0025 [115]: 6da654051829a7f3 -Block 0025 [116]: fc7ec3060f200354 -Block 0025 [117]: 7bc527041bc699aa -Block 0025 [118]: 36e804a3bce47567 -Block 0025 [119]: 5078a05b3689ccb0 -Block 0025 [120]: cd36db69ab1452d0 -Block 0025 [121]: 2ffbb1267bda416f -Block 0025 [122]: 5afe4953b0b8abec -Block 0025 [123]: 62e953030ae41e09 -Block 0025 [124]: 59c2d3acda8e7210 -Block 0025 [125]: b3148cae31588dda -Block 0025 [126]: 7d3d2d2a62e66584 -Block 0025 [127]: 7d1bc1dd3f23304f -Block 0026 [ 0]: aa12cd00fc19aa98 -Block 0026 [ 1]: 4baa3e2f0d2d9965 -Block 0026 [ 2]: cccc9d36f2b22bd7 -Block 0026 [ 3]: 66262feec7d5ca74 -Block 0026 [ 4]: 5ca622cdf216866e -Block 0026 [ 5]: 30811834a878128e -Block 0026 [ 6]: 1831ac788a613c33 -Block 0026 [ 7]: 7c5431da91e89887 -Block 0026 [ 8]: 002b8a6bfcca3171 -Block 0026 [ 9]: 563ea3cefeb34181 -Block 0026 [ 10]: 27b5d3695d8acea2 -Block 0026 [ 11]: bfefe32924482e29 -Block 0026 [ 12]: dbb1691432b6f222 -Block 0026 [ 13]: 5cdd96afe1e34f32 -Block 0026 [ 14]: 6d7e8399851e95f4 -Block 0026 [ 15]: 43294203e112bcb9 -Block 0026 [ 16]: 8337ce689d3e9caa -Block 0026 [ 17]: 7c26a7ef08e470d7 -Block 0026 [ 18]: 759a31d3fa1e8236 -Block 0026 [ 19]: 2149cc4365689b19 -Block 0026 [ 20]: 3b6bb146c1904fce -Block 0026 [ 21]: c3f0fa1dd9bbd53d -Block 0026 [ 22]: 337b92787d57be4c -Block 0026 [ 23]: 5402836eede6ed17 -Block 0026 [ 24]: 7c297b0511fc2afe -Block 0026 [ 25]: 30cc08a100c263a4 -Block 0026 [ 26]: 3be7c204b7169815 -Block 0026 [ 27]: e506d93b81a75733 -Block 0026 [ 28]: 1a36cf3c96c7000a -Block 0026 [ 29]: abf78cb4e62a9c9d -Block 0026 [ 30]: bfe1d6bc3d4ad847 -Block 0026 [ 31]: a9b8d174fb0a5b58 -Block 0026 [ 32]: 7c01f62ac035bfb3 -Block 0026 [ 33]: 792b16e8761a2231 -Block 0026 [ 34]: e33ae23d15dd49ff -Block 0026 [ 35]: 81e01c580bb42aa4 -Block 0026 [ 36]: 0b7854b34b42b26e -Block 0026 [ 37]: e5f3890795c8fd3f -Block 0026 [ 38]: 1d32f3cd092c011d -Block 0026 [ 39]: bb846e08144af8c9 -Block 0026 [ 40]: 529c328a0fd6be1c -Block 0026 [ 41]: 1838e4cc3b1e1bee -Block 0026 [ 42]: 0f8daadca7ece815 -Block 0026 [ 43]: e6744a102f363ba5 -Block 0026 [ 44]: ec0180f97f8dc01a -Block 0026 [ 45]: b7875db887d8fa98 -Block 0026 [ 46]: 0e14703884e20016 -Block 0026 [ 47]: 51e7d6f8f33eb75e -Block 0026 [ 48]: e4996dbaa2737503 -Block 0026 [ 49]: cadb50fe0ae56e79 -Block 0026 [ 50]: 572aa6d3ed950c8e -Block 0026 [ 51]: 9b8c0a7a8dbc04d3 -Block 0026 [ 52]: 6059cb549441ca18 -Block 0026 [ 53]: 9500848c02cd176a -Block 0026 [ 54]: 5db9764a7ced5cdb -Block 0026 [ 55]: 325d4e51b05d23fb -Block 0026 [ 56]: f9884df02768f572 -Block 0026 [ 57]: 0aa40c7b5503989e -Block 0026 [ 58]: d817a371209c118b -Block 0026 [ 59]: e22bf07992f26ca9 -Block 0026 [ 60]: 690d3e6005735450 -Block 0026 [ 61]: 0070329e2156498a -Block 0026 [ 62]: 04f5e9b53490b84c -Block 0026 [ 63]: dc854d01c6d9638d -Block 0026 [ 64]: e3fc2193160c9c54 -Block 0026 [ 65]: 1d8550c266bb484b -Block 0026 [ 66]: b42ad34afd366dbb -Block 0026 [ 67]: 9744998468bc6ac9 -Block 0026 [ 68]: 3a5f729463a09383 -Block 0026 [ 69]: eca7bd87f12a5180 -Block 0026 [ 70]: 6122ed0517cc3b62 -Block 0026 [ 71]: cc72077761614624 -Block 0026 [ 72]: d88a25deabb1eea7 -Block 0026 [ 73]: 1028ffb6d1792abe -Block 0026 [ 74]: 92d03b7f00202965 -Block 0026 [ 75]: 02214bddf45887be -Block 0026 [ 76]: 946fa7bd3f16134e -Block 0026 [ 77]: 3bb05c80eb7b9e13 -Block 0026 [ 78]: 3fa6da973455eef9 -Block 0026 [ 79]: 77fd6d705dc5eae9 -Block 0026 [ 80]: 590461cd09e0b05c -Block 0026 [ 81]: a41d33a709dac06d -Block 0026 [ 82]: f51cc50323f5dd76 -Block 0026 [ 83]: 691aedf3966aec4c -Block 0026 [ 84]: 28128ef432e02aa2 -Block 0026 [ 85]: 197d1d0322f6b647 -Block 0026 [ 86]: c455c6c29400221b -Block 0026 [ 87]: 9fd4cd9eda0a1ef4 -Block 0026 [ 88]: a52e7e396e31ea48 -Block 0026 [ 89]: 10e4dfc62a716c6d -Block 0026 [ 90]: 1cea0672ccab61ba -Block 0026 [ 91]: 083c605e2d85fb34 -Block 0026 [ 92]: 369d098dde8ae9e0 -Block 0026 [ 93]: aad473e6d8dd7bd5 -Block 0026 [ 94]: b96bc5b048b796af -Block 0026 [ 95]: 11ed0ca89be26340 -Block 0026 [ 96]: 1599fc597339eb3a -Block 0026 [ 97]: 468fae3ebe64843b -Block 0026 [ 98]: efcc60fa3d14c8ee -Block 0026 [ 99]: 65a32ce3a18bdcf3 -Block 0026 [100]: af9208773e96aab2 -Block 0026 [101]: 8e1af05387165864 -Block 0026 [102]: 5ddff1b588aa14c9 -Block 0026 [103]: f8639e1aba07adda -Block 0026 [104]: e5395cd2d12320aa -Block 0026 [105]: 7759c07513d7f662 -Block 0026 [106]: 48377f83e29b778d -Block 0026 [107]: 19e70cfcfc8c2607 -Block 0026 [108]: 886bac7d24ca1f81 -Block 0026 [109]: e4e3f70544723cf7 -Block 0026 [110]: 6ca3eb985bb1ec17 -Block 0026 [111]: b8b4e578e5eb7856 -Block 0026 [112]: 3b3b7c449c27a4dd -Block 0026 [113]: defe515fcc6e2cc7 -Block 0026 [114]: 8a373232c3f9efa4 -Block 0026 [115]: 17a870a8636beec7 -Block 0026 [116]: 7d8903416c9f1320 -Block 0026 [117]: ecc207884b932101 -Block 0026 [118]: 18bf11e41267b18a -Block 0026 [119]: b4b347da9a7cb8ac -Block 0026 [120]: aecfcd3642ffea30 -Block 0026 [121]: 5122a78e0ca8816b -Block 0026 [122]: 6bbfce230920d8b3 -Block 0026 [123]: 161a2c5ea15a0e0b -Block 0026 [124]: c2d4801fb452e4ac -Block 0026 [125]: 82fd4d7b2d2fe2e8 -Block 0026 [126]: 854257a01b287eba -Block 0026 [127]: 334a677fd1ec9fda -Block 0027 [ 0]: 5be3fe13bdce08c7 -Block 0027 [ 1]: b0a7a8a8ade045e3 -Block 0027 [ 2]: 06df886512fe5392 -Block 0027 [ 3]: 9af2bf3676906d07 -Block 0027 [ 4]: 88e2cc40b8a4e76f -Block 0027 [ 5]: de37cbf63f3a44bc -Block 0027 [ 6]: a35ba64d6ddc8be7 -Block 0027 [ 7]: 511a834bc9aa1cc2 -Block 0027 [ 8]: f4e669ed4f8cb89d -Block 0027 [ 9]: d07308fc0ed46a4f -Block 0027 [ 10]: 7491f695a47aa04a -Block 0027 [ 11]: 31a11a9b71441773 -Block 0027 [ 12]: f0503c89f24fa682 -Block 0027 [ 13]: 75c12f9832ced304 -Block 0027 [ 14]: 54bde80d94f2cf24 -Block 0027 [ 15]: 550375f77d8be0af -Block 0027 [ 16]: 5696378300c055d2 -Block 0027 [ 17]: f2779fe23b85677a -Block 0027 [ 18]: 073405dcbbf97024 -Block 0027 [ 19]: 9013e7655de698aa -Block 0027 [ 20]: 2d44241faee0b9ef -Block 0027 [ 21]: ec51c8714f062da1 -Block 0027 [ 22]: 23d915c0aaaceb88 -Block 0027 [ 23]: d165697c18914924 -Block 0027 [ 24]: 24e554f22f933aa4 -Block 0027 [ 25]: 60d0782fc7ee202e -Block 0027 [ 26]: 63618eed5b6db134 -Block 0027 [ 27]: fd50ebe0567c4e6a -Block 0027 [ 28]: 95cb587105016157 -Block 0027 [ 29]: 6906ac0146770772 -Block 0027 [ 30]: 86031f68bbcbcf07 -Block 0027 [ 31]: 237b74293c87ed16 -Block 0027 [ 32]: 28b1d41aec829c34 -Block 0027 [ 33]: d84033367d075335 -Block 0027 [ 34]: c1b1440ee98abbfc -Block 0027 [ 35]: b338f834ceb27aa7 -Block 0027 [ 36]: cba740aed97e8d1d -Block 0027 [ 37]: a542c6a851d2a483 -Block 0027 [ 38]: 0799a8e55015b1f7 -Block 0027 [ 39]: c819a6146209f768 -Block 0027 [ 40]: cf8f88793592c941 -Block 0027 [ 41]: b822c49796097152 -Block 0027 [ 42]: 1fc839bfaf3e2f0c -Block 0027 [ 43]: 94cf66e5cacb5150 -Block 0027 [ 44]: 023c2713d277b7da -Block 0027 [ 45]: 42c9af54b7467477 -Block 0027 [ 46]: 06c87780cd1390fe -Block 0027 [ 47]: 4df89f800ac57ce4 -Block 0027 [ 48]: da72cf9ca4d8bf76 -Block 0027 [ 49]: 31bbd9520371297c -Block 0027 [ 50]: 5d99b61c5c43683d -Block 0027 [ 51]: 10bf4476116ac309 -Block 0027 [ 52]: c7abf37c2087b657 -Block 0027 [ 53]: 813a4a75afa0e07f -Block 0027 [ 54]: 06f8edc535913caa -Block 0027 [ 55]: 0e4836f75e413c0d -Block 0027 [ 56]: fbdc28f079ab6844 -Block 0027 [ 57]: ae5e53895c5e7a1a -Block 0027 [ 58]: 9712100247309cfe -Block 0027 [ 59]: 0be03ed03e7eb934 -Block 0027 [ 60]: 96104af9ad7e935f -Block 0027 [ 61]: b6ac1142ab06b5cc -Block 0027 [ 62]: c9e4cb50733efba1 -Block 0027 [ 63]: 74ea5251be8ca509 -Block 0027 [ 64]: f83778625640b346 -Block 0027 [ 65]: 11215e4e29240901 -Block 0027 [ 66]: d8f9a392f74ab538 -Block 0027 [ 67]: d0ac6f59d243531d -Block 0027 [ 68]: 8d63dd236aa37568 -Block 0027 [ 69]: 03bf34c4868d649e -Block 0027 [ 70]: df8e57df569aa85d -Block 0027 [ 71]: 71dfb145215c570b -Block 0027 [ 72]: 88d8eda9ee1a1ccb -Block 0027 [ 73]: 775f02960e9c8f91 -Block 0027 [ 74]: 42848838d08ab650 -Block 0027 [ 75]: 050183f31a1958ea -Block 0027 [ 76]: 134ca64846003950 -Block 0027 [ 77]: 1e2f30784e021a33 -Block 0027 [ 78]: 5fd720a5f4a10263 -Block 0027 [ 79]: 70c2c08cc82c6e5d -Block 0027 [ 80]: 68d0124851ad816c -Block 0027 [ 81]: 5930bd7ddc05735b -Block 0027 [ 82]: b8df3438977d79e5 -Block 0027 [ 83]: 7158f5c748d0dd09 -Block 0027 [ 84]: 60e53a3cfb9a75e5 -Block 0027 [ 85]: fb0cc38694941195 -Block 0027 [ 86]: 5536cf36b8ed3ba8 -Block 0027 [ 87]: 5aaae223caec9458 -Block 0027 [ 88]: fcd688ba2023d937 -Block 0027 [ 89]: 2b23815894329792 -Block 0027 [ 90]: edef6c1e61c71e64 -Block 0027 [ 91]: 0e57b6aac7894345 -Block 0027 [ 92]: 14ebf95eec26c84d -Block 0027 [ 93]: 1a748bb411e49be8 -Block 0027 [ 94]: dbd73d86a6520c4a -Block 0027 [ 95]: 38436185c244b69d -Block 0027 [ 96]: 3712f093d0292f34 -Block 0027 [ 97]: 32813df121b4155d -Block 0027 [ 98]: 6ad496d0b7522951 -Block 0027 [ 99]: 851fe36a165d38f7 -Block 0027 [100]: 145751d01f5fe0b5 -Block 0027 [101]: 2eff47cf3e629eb1 -Block 0027 [102]: 811a787ec3369198 -Block 0027 [103]: 563945cc33943766 -Block 0027 [104]: a6abe4655beb1d8b -Block 0027 [105]: dafd2224158188a5 -Block 0027 [106]: 18c78fb93d7eb7f8 -Block 0027 [107]: 0cd57cc01b3a80f0 -Block 0027 [108]: 04d2ec2408194328 -Block 0027 [109]: 44a6ccf18a1db45e -Block 0027 [110]: 5561ffd2d09051af -Block 0027 [111]: 52d51f6943763516 -Block 0027 [112]: 52f1b6ccc089f896 -Block 0027 [113]: f83184008f9b70b1 -Block 0027 [114]: 47d67a0849c7fde3 -Block 0027 [115]: 7e9f8078e4be0c14 -Block 0027 [116]: 1c4a3cdd84be40c0 -Block 0027 [117]: f9916cedc43bd59b -Block 0027 [118]: 9bc4380d0351e854 -Block 0027 [119]: 00cfbceb39e15f88 -Block 0027 [120]: 7f5f41a71976be18 -Block 0027 [121]: 5c6b7b42ec0a93ee -Block 0027 [122]: eac2b68d34c73688 -Block 0027 [123]: a7ddbf2bfc4be3ef -Block 0027 [124]: 49d47531d67094a9 -Block 0027 [125]: a6eaf85645fb6eae -Block 0027 [126]: 77a99a8bd0ea288d -Block 0027 [127]: d54c07bcb55f92d7 -Block 0028 [ 0]: ea035ea2040b86fa -Block 0028 [ 1]: 2e16a6ff91268b3e -Block 0028 [ 2]: c33278f3f2568bcd -Block 0028 [ 3]: 4e7a49242419fea0 -Block 0028 [ 4]: 6762092f26336892 -Block 0028 [ 5]: a346752d8aaf6445 -Block 0028 [ 6]: 397328788712c7c7 -Block 0028 [ 7]: 340ec72f35291f80 -Block 0028 [ 8]: 9b9a3f1443fdf705 -Block 0028 [ 9]: b642da5d981d9f96 -Block 0028 [ 10]: 78bb8d36eadc7cd6 -Block 0028 [ 11]: daf5dcf74717e45c -Block 0028 [ 12]: b2ad870532880376 -Block 0028 [ 13]: 3567026ef751358a -Block 0028 [ 14]: 93d5566d1fe4ec35 -Block 0028 [ 15]: afdee647c2fca6f4 -Block 0028 [ 16]: 7016d9708eb7df00 -Block 0028 [ 17]: 201c3ad2a8a7c3c6 -Block 0028 [ 18]: 25d14750df3d239b -Block 0028 [ 19]: 70bafb70600a8c04 -Block 0028 [ 20]: 46ce039305fb1a7b -Block 0028 [ 21]: 7984538abbfadcd6 -Block 0028 [ 22]: 64aecb8107d681bf -Block 0028 [ 23]: 496cf0f56bff4df1 -Block 0028 [ 24]: f065187755f8cb53 -Block 0028 [ 25]: b3ea311b5f67abbc -Block 0028 [ 26]: 2a828b7595500d4b -Block 0028 [ 27]: 34f0a68a4e6119f5 -Block 0028 [ 28]: 004c38fd036b5024 -Block 0028 [ 29]: aa526730ee10da64 -Block 0028 [ 30]: d39d0fac773bafcb -Block 0028 [ 31]: b11607e91b9f5a00 -Block 0028 [ 32]: c7f3de33f5f4cf6a -Block 0028 [ 33]: 266f646f53cbea7c -Block 0028 [ 34]: cd80be78d7225cb8 -Block 0028 [ 35]: 3ab994a40c96cd3f -Block 0028 [ 36]: 946f570038bb1774 -Block 0028 [ 37]: 348efca8d38658cf -Block 0028 [ 38]: dd737ec2d7011280 -Block 0028 [ 39]: a9670f393e9bc143 -Block 0028 [ 40]: 7487a7eee9bc3abb -Block 0028 [ 41]: af350b815c13205b -Block 0028 [ 42]: af5d5d6b18eeb661 -Block 0028 [ 43]: df325329eb54cc34 -Block 0028 [ 44]: 95eea5b85bf729f1 -Block 0028 [ 45]: 8cc4861ad9ae97c2 -Block 0028 [ 46]: d8fa96de59d1c36d -Block 0028 [ 47]: d83a13b1285ba019 -Block 0028 [ 48]: 06f15b3e227b12e2 -Block 0028 [ 49]: 89eff8ca5feb5b54 -Block 0028 [ 50]: 2965b0ae039dc693 -Block 0028 [ 51]: b053ce0a9639b9e2 -Block 0028 [ 52]: 6b1294b3b911d087 -Block 0028 [ 53]: cb8ed5a39f69a591 -Block 0028 [ 54]: f401f0d2325dc6f0 -Block 0028 [ 55]: 52702e2f4fd6cc0f -Block 0028 [ 56]: 552fafd12d308c6d -Block 0028 [ 57]: fc3930e1e07015b0 -Block 0028 [ 58]: ded4395a07ef93d5 -Block 0028 [ 59]: 352d277d5f9aa883 -Block 0028 [ 60]: f1e65e32dfda026e -Block 0028 [ 61]: d06fa1b780055d65 -Block 0028 [ 62]: 3d91dedd8322ab05 -Block 0028 [ 63]: 6c54b369bd42086d -Block 0028 [ 64]: b63e977354277451 -Block 0028 [ 65]: e51466e99f6cc354 -Block 0028 [ 66]: 5fa67b6b41447bbb -Block 0028 [ 67]: 733e4305ce6154db -Block 0028 [ 68]: 1421bedf364b1955 -Block 0028 [ 69]: 38a036084d175daf -Block 0028 [ 70]: 4dc377e4411fd24f -Block 0028 [ 71]: abb4fda7705ed57f -Block 0028 [ 72]: 3844dec4d4f399fc -Block 0028 [ 73]: 44d53f09c35e3822 -Block 0028 [ 74]: d2bcd61705007948 -Block 0028 [ 75]: 39cd9df9f7e059bc -Block 0028 [ 76]: f0ac2ab3385517d4 -Block 0028 [ 77]: b8c0a4141d077e38 -Block 0028 [ 78]: b83aaaddc5ead1cf -Block 0028 [ 79]: 56c73f9d8cf69fef -Block 0028 [ 80]: 979d31a4ed576dd6 -Block 0028 [ 81]: 9a8d33932d334fcb -Block 0028 [ 82]: 5943ca7be3e1a9ab -Block 0028 [ 83]: 8aeeee3a3e71e088 -Block 0028 [ 84]: b304d443b00f4aa6 -Block 0028 [ 85]: 16882d4404bd747d -Block 0028 [ 86]: 8af608fd07a6a83a -Block 0028 [ 87]: 22bb9dfc7f464419 -Block 0028 [ 88]: 0754bb3c27a00864 -Block 0028 [ 89]: 8cee6891c9c53736 -Block 0028 [ 90]: fadd02c16c0e8a2c -Block 0028 [ 91]: 3a6029c10bd05df1 -Block 0028 [ 92]: e87d999067440344 -Block 0028 [ 93]: 861b32010d72a2d4 -Block 0028 [ 94]: 7a05572de09a1c5a -Block 0028 [ 95]: cabea168c4a214c5 -Block 0028 [ 96]: 3cff347defdadd78 -Block 0028 [ 97]: 2843cb0790f9e480 -Block 0028 [ 98]: b0df9bce712bbf4d -Block 0028 [ 99]: f6a2c8e92ebebd7f -Block 0028 [100]: 4f0a9e32dc2630ae -Block 0028 [101]: 294af970066eae49 -Block 0028 [102]: 5325be741ea3470d -Block 0028 [103]: 9c7f2e03fe4a5b58 -Block 0028 [104]: c2d8f4da0903a91f -Block 0028 [105]: 9b70790583419a59 -Block 0028 [106]: a6d9d7c679a4d90a -Block 0028 [107]: fa61e1d94dae1846 -Block 0028 [108]: 818fde1c5b259df4 -Block 0028 [109]: f6fb171cd4d98e0f -Block 0028 [110]: b43ad75705f2ef0f -Block 0028 [111]: 59a5eb3f9a5fe96f -Block 0028 [112]: 08b6d1cc904187ae -Block 0028 [113]: c8218eae71884346 -Block 0028 [114]: e17951439c57259b -Block 0028 [115]: 669f4548595914ff -Block 0028 [116]: 982e95a55f69f9a4 -Block 0028 [117]: e228afc8f89d45fb -Block 0028 [118]: 47099aed1a722d5a -Block 0028 [119]: f83cefa338551daa -Block 0028 [120]: 2c21f9a015a8a516 -Block 0028 [121]: d2ec752a4d981f6b -Block 0028 [122]: 146521d7a2f009a2 -Block 0028 [123]: 071014e51af69e26 -Block 0028 [124]: 5f82eae58d2972a5 -Block 0028 [125]: 966eb97f7e0f60a1 -Block 0028 [126]: 308ce93e852a62bc -Block 0028 [127]: efc36d7416e66af6 -Block 0029 [ 0]: 3bdabd48605c830d -Block 0029 [ 1]: 301ed6564cd8adec -Block 0029 [ 2]: df374c730df57a03 -Block 0029 [ 3]: fad6e7bdacbbcf17 -Block 0029 [ 4]: e92e32543552cbe4 -Block 0029 [ 5]: 29447af54f3ee354 -Block 0029 [ 6]: 452121662a1e7130 -Block 0029 [ 7]: e7e398737b41d189 -Block 0029 [ 8]: a1117ca5f5c3c5fa -Block 0029 [ 9]: d76ab9d95a081eec -Block 0029 [ 10]: 5301a2721f0df1eb -Block 0029 [ 11]: 95200fbff6ad0d78 -Block 0029 [ 12]: 195f9faddea81f3e -Block 0029 [ 13]: bd7534410b5bd10d -Block 0029 [ 14]: 6327d0b34d6a447a -Block 0029 [ 15]: db196f244badd93d -Block 0029 [ 16]: 7d62585524f47b6b -Block 0029 [ 17]: 2013c6d5df94b708 -Block 0029 [ 18]: d5e8d62b1af8df38 -Block 0029 [ 19]: f89f1563c6372121 -Block 0029 [ 20]: 50b7efa2fbdfdd40 -Block 0029 [ 21]: 656eef73963c5266 -Block 0029 [ 22]: 3da1eacc8baf2460 -Block 0029 [ 23]: 390a9769d20ddf52 -Block 0029 [ 24]: 23d923f21eed6aa5 -Block 0029 [ 25]: 173dc145e6d0171f -Block 0029 [ 26]: 6c72b0739a4ee6c0 -Block 0029 [ 27]: 0f1acedbf79b41b4 -Block 0029 [ 28]: 40b950241d55ce76 -Block 0029 [ 29]: b59e3bd42c1e5a78 -Block 0029 [ 30]: e6be2f76812aa447 -Block 0029 [ 31]: f37036ff225bbbda -Block 0029 [ 32]: 351f3c43a983b318 -Block 0029 [ 33]: 3c63ce438fa5e84f -Block 0029 [ 34]: e0a56205e09aa574 -Block 0029 [ 35]: b50f7850346b47d6 -Block 0029 [ 36]: b0a19b67c2ed5b8e -Block 0029 [ 37]: 8f50feafdaea26ec -Block 0029 [ 38]: cdc0bc350397fde4 -Block 0029 [ 39]: b824e50d70d878b8 -Block 0029 [ 40]: 20c2852ed5fc9e9b -Block 0029 [ 41]: d260cc25828b18cc -Block 0029 [ 42]: 97f0a84ee15612ea -Block 0029 [ 43]: 48afdb506f6251df -Block 0029 [ 44]: 461c26175b8ae4ef -Block 0029 [ 45]: 216dbe3ccbb14768 -Block 0029 [ 46]: 594bbcb744f7b638 -Block 0029 [ 47]: c9af82003c6890bb -Block 0029 [ 48]: 62536e8df9755acf -Block 0029 [ 49]: b7ef0918894031d2 -Block 0029 [ 50]: 7a453d700fbb40cd -Block 0029 [ 51]: 71ad7f2a5729d489 -Block 0029 [ 52]: 20691da8478b2dde -Block 0029 [ 53]: 9f0a0c8183f30200 -Block 0029 [ 54]: a6d136280e231439 -Block 0029 [ 55]: ba8aaf65340929ec -Block 0029 [ 56]: c80f137c575e21a0 -Block 0029 [ 57]: b9a819a536b2975b -Block 0029 [ 58]: 5d767f30e753f9cb -Block 0029 [ 59]: c5c8b4e9285ab45f -Block 0029 [ 60]: 104063c24eda0f34 -Block 0029 [ 61]: fb3993aa2b39c1cb -Block 0029 [ 62]: 47d27cc72c649216 -Block 0029 [ 63]: b1e6d9348be399b3 -Block 0029 [ 64]: a6d723637e610f54 -Block 0029 [ 65]: 5a122ebb3829ce5d -Block 0029 [ 66]: b0686b38d9c9dd43 -Block 0029 [ 67]: 47c31e82b95419b9 -Block 0029 [ 68]: 9f05eca085d6e86e -Block 0029 [ 69]: 7e13c02e53b4e999 -Block 0029 [ 70]: f02db46b55a65df6 -Block 0029 [ 71]: 77896aea6c63fa83 -Block 0029 [ 72]: 8b9f53272e5b2ee1 -Block 0029 [ 73]: ac843be226b3579c -Block 0029 [ 74]: 82b7b66c3fa114a9 -Block 0029 [ 75]: 72fee33e9be86f50 -Block 0029 [ 76]: dc27b4a5de1906c8 -Block 0029 [ 77]: e3c2039d4303a548 -Block 0029 [ 78]: 15e3b3a7892b0d8f -Block 0029 [ 79]: 61d89048357716ce -Block 0029 [ 80]: 0e7ccb48edb01b41 -Block 0029 [ 81]: 31fa10f63f19067c -Block 0029 [ 82]: 6e12ca8d56c07bdf -Block 0029 [ 83]: c96238b43ce281a7 -Block 0029 [ 84]: ea92aabec561c97c -Block 0029 [ 85]: 5b30055449d1b10a -Block 0029 [ 86]: 6bc365c220fa363a -Block 0029 [ 87]: e80070c1d31570ae -Block 0029 [ 88]: f000f70cb7f68723 -Block 0029 [ 89]: 616e9af618594d1f -Block 0029 [ 90]: acbf4d18a682c25c -Block 0029 [ 91]: 14cdcd57ca47433d -Block 0029 [ 92]: a428accbefb4d001 -Block 0029 [ 93]: 895c764190262d06 -Block 0029 [ 94]: 64b93e0add42e93f -Block 0029 [ 95]: 26235c89252710a9 -Block 0029 [ 96]: e743ecadafb28d0c -Block 0029 [ 97]: 0c8bb00bbbe17d45 -Block 0029 [ 98]: bdb9e60a72a82689 -Block 0029 [ 99]: 59ac39145a7ae1c1 -Block 0029 [100]: cb5419e28b5f6009 -Block 0029 [101]: 8a9b807b28c6b546 -Block 0029 [102]: 13f5c91565058303 -Block 0029 [103]: 630b1263788776e1 -Block 0029 [104]: f89193742379c81e -Block 0029 [105]: 9b3fb899f09b4cb1 -Block 0029 [106]: 40fd48829eb77bd7 -Block 0029 [107]: 477d964d41c8d9d0 -Block 0029 [108]: 2a797b8d5a2f0702 -Block 0029 [109]: 366689716914f34d -Block 0029 [110]: 4d0c98ad9d485725 -Block 0029 [111]: 4fcca43a76ba9ea2 -Block 0029 [112]: d8b9ebf080d6b155 -Block 0029 [113]: b6b9b9bed4dc8ecd -Block 0029 [114]: 84c306ea62699a25 -Block 0029 [115]: 0de49041213208e6 -Block 0029 [116]: ef61d4ee82187557 -Block 0029 [117]: 0a8f1d03285d95ec -Block 0029 [118]: c25f5ffb0f4df0a9 -Block 0029 [119]: ade24bb8321c6aa1 -Block 0029 [120]: 674fd09cc02b1746 -Block 0029 [121]: 251cd54c44f9e1ce -Block 0029 [122]: fa4e3ef002c99ebd -Block 0029 [123]: 7f9595eccb3636cf -Block 0029 [124]: 4ac562e87d01c37d -Block 0029 [125]: b48318bac585fbc2 -Block 0029 [126]: 42b91d62b469afec -Block 0029 [127]: adf8ebc72e5180ce -Block 0030 [ 0]: 78ebb0cc500cfd23 -Block 0030 [ 1]: c460a52a939b100f -Block 0030 [ 2]: 413797d113559097 -Block 0030 [ 3]: 24097f4a72aa4d7a -Block 0030 [ 4]: 7fd192dc686f9dd1 -Block 0030 [ 5]: 1403f9433f94c680 -Block 0030 [ 6]: 2888ddca7026222f -Block 0030 [ 7]: d8de309eb8eea83a -Block 0030 [ 8]: 7ddbc393ee013ca4 -Block 0030 [ 9]: eab9f37fc71f9c64 -Block 0030 [ 10]: d67184afa449b483 -Block 0030 [ 11]: b34365013ef6f697 -Block 0030 [ 12]: 7d3c26cc8eed80f6 -Block 0030 [ 13]: 8cdd8df5db037fe7 -Block 0030 [ 14]: 0ac112d54d43168e -Block 0030 [ 15]: 74e4494bcc9636a3 -Block 0030 [ 16]: 0edf89b34fad5868 -Block 0030 [ 17]: b1e24de77dccf693 -Block 0030 [ 18]: d92f485e04babc84 -Block 0030 [ 19]: 8c91873ed76e45d7 -Block 0030 [ 20]: fa777c8e222f5d7b -Block 0030 [ 21]: fdac371cbe360dbb -Block 0030 [ 22]: db06c1b81b37310d -Block 0030 [ 23]: 839d563b33c36c0c -Block 0030 [ 24]: c6b15e0f746c4c94 -Block 0030 [ 25]: 2891ba5e8b3fdf6f -Block 0030 [ 26]: 838e406c57fd4d90 -Block 0030 [ 27]: 8247d5267df0762e -Block 0030 [ 28]: 7cc4c5a7cf99d0ea -Block 0030 [ 29]: 1bc549cdfdb8f404 -Block 0030 [ 30]: a749161c3abfbd15 -Block 0030 [ 31]: 634640ab3dba42e9 -Block 0030 [ 32]: 4f66bff1a5599b37 -Block 0030 [ 33]: 77fca844c066144b -Block 0030 [ 34]: 73174973c64ba79a -Block 0030 [ 35]: 47ce5a1c3de46611 -Block 0030 [ 36]: 0b2417e4adbb9c4a -Block 0030 [ 37]: 56f91835257a8ab2 -Block 0030 [ 38]: a947a800c9ae0adc -Block 0030 [ 39]: dfba4ce0ca8a9022 -Block 0030 [ 40]: 7fd0c982518c8bc3 -Block 0030 [ 41]: 0e38079a66f607c9 -Block 0030 [ 42]: bb13ce39ce7c838d -Block 0030 [ 43]: 301a331b613c173f -Block 0030 [ 44]: 6de35dd0db47a4a4 -Block 0030 [ 45]: f4061faea81daff5 -Block 0030 [ 46]: fa1b99d63c7b81d0 -Block 0030 [ 47]: ebbc817d664c3b5d -Block 0030 [ 48]: ed08b9868c781530 -Block 0030 [ 49]: 7ebc4ab09b5f9f8c -Block 0030 [ 50]: 428f35ba0da0fb8d -Block 0030 [ 51]: 3cc4dd39deb4b916 -Block 0030 [ 52]: ef85cca2918123aa -Block 0030 [ 53]: e9b923891414adb5 -Block 0030 [ 54]: 990078e6307bf03d -Block 0030 [ 55]: 46293fa01ab6eba6 -Block 0030 [ 56]: 88c1973464f2a740 -Block 0030 [ 57]: 29f30f34cbdb32f9 -Block 0030 [ 58]: 6e0c364377a98b5a -Block 0030 [ 59]: 4a608ade6a63b04b -Block 0030 [ 60]: c4d07ec581c6e110 -Block 0030 [ 61]: c6e38c532d112754 -Block 0030 [ 62]: c7404f3f4c5ca81d -Block 0030 [ 63]: b2399b4108208e93 -Block 0030 [ 64]: 6cf803e9c511a589 -Block 0030 [ 65]: 21bede8cc081d6cb -Block 0030 [ 66]: 0f31881b96348c43 -Block 0030 [ 67]: 208a6a3f6b5a6aea -Block 0030 [ 68]: d96f9a9b3d38498a -Block 0030 [ 69]: fe12c848b152f88b -Block 0030 [ 70]: ba37377989634bbe -Block 0030 [ 71]: f87f306d4e55fc58 -Block 0030 [ 72]: 6e3af73d61e5acb6 -Block 0030 [ 73]: 01ebb62867ae7346 -Block 0030 [ 74]: 34f9f3f14540d8a0 -Block 0030 [ 75]: a0530a04a4fed871 -Block 0030 [ 76]: 8aab51aa2699c2d7 -Block 0030 [ 77]: 8cc1c112302e9c0a -Block 0030 [ 78]: 66d2c4c1b0f369ca -Block 0030 [ 79]: 5881e8885f7618aa -Block 0030 [ 80]: ece8ee07d5a526c8 -Block 0030 [ 81]: 5b8be9aec2f46490 -Block 0030 [ 82]: aacfa3b578ffc40b -Block 0030 [ 83]: 90b2be8bbc0b5982 -Block 0030 [ 84]: e7baaa8858cc81ff -Block 0030 [ 85]: f7995581dc6bcb96 -Block 0030 [ 86]: 624c813678edc943 -Block 0030 [ 87]: 2275455d12b12b0b -Block 0030 [ 88]: eb45b6b9fe5718a9 -Block 0030 [ 89]: 0df81b2d8f23c101 -Block 0030 [ 90]: a6cf10ca19e15f80 -Block 0030 [ 91]: 405a403a54f6ea58 -Block 0030 [ 92]: e07f299250a4083b -Block 0030 [ 93]: a3b82fe32687fced -Block 0030 [ 94]: bfd23f20d69d4dc6 -Block 0030 [ 95]: 2a476b8e3de7b369 -Block 0030 [ 96]: 20826b265857d295 -Block 0030 [ 97]: 1c347a083c6d2644 -Block 0030 [ 98]: fe1e1d3de266875c -Block 0030 [ 99]: 3332fe21e25d8b24 -Block 0030 [100]: 809711549430ae58 -Block 0030 [101]: d384c8613f965dd7 -Block 0030 [102]: 7a3ece3e88c6e242 -Block 0030 [103]: ca520dd2aaff2c07 -Block 0030 [104]: 5ed1157c64803562 -Block 0030 [105]: ab10c5653f8a0834 -Block 0030 [106]: e673d52089c309c3 -Block 0030 [107]: f8337353fe6934f6 -Block 0030 [108]: 294de71aba166af5 -Block 0030 [109]: feec046f98dbb7f7 -Block 0030 [110]: d217e0685afd51f5 -Block 0030 [111]: 675996cc4f1738e3 -Block 0030 [112]: f19f120722f24321 -Block 0030 [113]: d64b4a71899b2cc0 -Block 0030 [114]: b7e02717d1dad185 -Block 0030 [115]: 9aec98d8ecfaf56a -Block 0030 [116]: d1b145c263d02309 -Block 0030 [117]: bc5338fbc3d7782d -Block 0030 [118]: 335b5ad99aeb80df -Block 0030 [119]: a68c507da4296764 -Block 0030 [120]: b68e6e3cb8332116 -Block 0030 [121]: aabcdc1e36e7aab6 -Block 0030 [122]: 7059fdcb44c4449e -Block 0030 [123]: d0a07c2ae3431bae -Block 0030 [124]: ad3824b96e5d8871 -Block 0030 [125]: 4a08dc8d052e9081 -Block 0030 [126]: 27bef794993fe81b -Block 0030 [127]: 5bba260ee5d913ce -Block 0031 [ 0]: 8056a89f8ad77396 -Block 0031 [ 1]: 0acbf994ee770d14 -Block 0031 [ 2]: d72a158734769c8a -Block 0031 [ 3]: 96616da2ec8ed518 -Block 0031 [ 4]: d26d683efb269aba -Block 0031 [ 5]: 9e77187292137456 -Block 0031 [ 6]: d3c5abc61cfba5f0 -Block 0031 [ 7]: da2c4be29800e8d4 -Block 0031 [ 8]: 1424a710054dbaff -Block 0031 [ 9]: e5960c0dd23f2e1a -Block 0031 [ 10]: 2cadcb97d3fe1953 -Block 0031 [ 11]: 0ccd24845599050a -Block 0031 [ 12]: 7320274c7126640a -Block 0031 [ 13]: 7cd8472ac2aaaddd -Block 0031 [ 14]: e5bacffb3c811f52 -Block 0031 [ 15]: 10fbda16e9eeb4ce -Block 0031 [ 16]: 1500a7ea6b4a94d2 -Block 0031 [ 17]: a1ba7e4b8aa528e9 -Block 0031 [ 18]: db1a5f54d44181fc -Block 0031 [ 19]: 1fd19ef893ef2e0a -Block 0031 [ 20]: 62040393e33ade1d -Block 0031 [ 21]: 31e3ec9bf63dfcb9 -Block 0031 [ 22]: c1992e801e8345c8 -Block 0031 [ 23]: 950b6603fce64375 -Block 0031 [ 24]: a658a546d46a6dd5 -Block 0031 [ 25]: 99ba119e73bf2451 -Block 0031 [ 26]: ca77d7ef039f066c -Block 0031 [ 27]: 0f87eecf64bde053 -Block 0031 [ 28]: cdb9d6e10e55a108 -Block 0031 [ 29]: d21eedb708db5c2f -Block 0031 [ 30]: 20d14163de3ea6e6 -Block 0031 [ 31]: 993f46dd66cf0e88 -Block 0031 [ 32]: c3546c4fccc13367 -Block 0031 [ 33]: 0484e711add96774 -Block 0031 [ 34]: a1a1debc1c40712b -Block 0031 [ 35]: 096825b113b5d71c -Block 0031 [ 36]: c95554f8f54b1b48 -Block 0031 [ 37]: 26a1af38ace06794 -Block 0031 [ 38]: 66df71657d902bf6 -Block 0031 [ 39]: bbd767041fc32fac -Block 0031 [ 40]: 3ece0676c3ae967e -Block 0031 [ 41]: 6d1bf9cfbe754e01 -Block 0031 [ 42]: 72203d494509b05e -Block 0031 [ 43]: af6cd4272b298bcc -Block 0031 [ 44]: 40317a0ca1d316bb -Block 0031 [ 45]: fec590ce7045da13 -Block 0031 [ 46]: ce9ea146364d5e3f -Block 0031 [ 47]: 3c2cce0a903c1b26 -Block 0031 [ 48]: 6f3dbc07470ccc2f -Block 0031 [ 49]: 6351893a222bd8cf -Block 0031 [ 50]: 0cd4d72b32b918e8 -Block 0031 [ 51]: 29cd14a678355e28 -Block 0031 [ 52]: a10bef462977255b -Block 0031 [ 53]: 6ebfb703429b51e8 -Block 0031 [ 54]: 9943623f765c7658 -Block 0031 [ 55]: 90638f6e666bead3 -Block 0031 [ 56]: da55186b2cb868bf -Block 0031 [ 57]: c0a953f05ca97440 -Block 0031 [ 58]: 991e5450713fa2d0 -Block 0031 [ 59]: 9f1117bc7a25c8ab -Block 0031 [ 60]: b1cab74a81011a00 -Block 0031 [ 61]: 24717ae307ffa148 -Block 0031 [ 62]: 49778268b7e5b98c -Block 0031 [ 63]: 1082ca8e9d07a245 -Block 0031 [ 64]: 4cecb2326330d454 -Block 0031 [ 65]: e116f69e48d7663d -Block 0031 [ 66]: dd6fc7fb20eeed81 -Block 0031 [ 67]: 467086efaa6c70a5 -Block 0031 [ 68]: 06374063912b5d23 -Block 0031 [ 69]: d15fbd1c5b678f13 -Block 0031 [ 70]: f8c29343528d1ec7 -Block 0031 [ 71]: 76089db7b8607221 -Block 0031 [ 72]: 711c36ee0a3bfc0d -Block 0031 [ 73]: 2c04c97ec81d3aeb -Block 0031 [ 74]: 47d14e368861ca0c -Block 0031 [ 75]: 8b77572fe7c02210 -Block 0031 [ 76]: 3a93283ad7ec4394 -Block 0031 [ 77]: bf65a5f5dcdf5a7c -Block 0031 [ 78]: 02e56c288b5e017a -Block 0031 [ 79]: 7a130bec028a12a2 -Block 0031 [ 80]: 4373299ae5c00617 -Block 0031 [ 81]: fe15f92f01ae432e -Block 0031 [ 82]: c385eacaba89938d -Block 0031 [ 83]: b3dc4616fd72c200 -Block 0031 [ 84]: e453bb3534da09bf -Block 0031 [ 85]: b00fec3805b83138 -Block 0031 [ 86]: 95c96ef7d22e4ad9 -Block 0031 [ 87]: 93f8f5bbc6a8c31f -Block 0031 [ 88]: 06bfe5c4d32f03bc -Block 0031 [ 89]: f3e2d02a807ed7f2 -Block 0031 [ 90]: 883c84bfb046e7fd -Block 0031 [ 91]: b9f1c7ad0a7b4b9b -Block 0031 [ 92]: 77ccbca2abcc81fb -Block 0031 [ 93]: 3bb00a769cf2ebcc -Block 0031 [ 94]: 8f178ea513f83875 -Block 0031 [ 95]: 07e289f5760a5695 -Block 0031 [ 96]: 7d447ccb68d68fec -Block 0031 [ 97]: b1d4e8e9888d051e -Block 0031 [ 98]: 447e71ca682102e9 -Block 0031 [ 99]: f590ffeb8bef018f -Block 0031 [100]: d54559d0ab3b6afc -Block 0031 [101]: caf7649dbe8fde6a -Block 0031 [102]: c39efa41c6fb669f -Block 0031 [103]: 5b796db29d271d39 -Block 0031 [104]: dabaecc9fa05b4ad -Block 0031 [105]: 3cc6c412e203762b -Block 0031 [106]: 999eaf1a774d5a56 -Block 0031 [107]: 66ccd06d248b67c4 -Block 0031 [108]: 940273840c36b61e -Block 0031 [109]: 60845cfb3553ce08 -Block 0031 [110]: 499847123467e401 -Block 0031 [111]: c3e46f4ac502aba6 -Block 0031 [112]: 1a416510f69fc5b4 -Block 0031 [113]: 4a4786d118b23383 -Block 0031 [114]: ad4d126ee991f3ad -Block 0031 [115]: 59281ed002081934 -Block 0031 [116]: 1ccae3345cb54ae8 -Block 0031 [117]: 773e9b04ce3a1f7e -Block 0031 [118]: 3259c02c69346830 -Block 0031 [119]: 03d2e98b455ee4e9 -Block 0031 [120]: 0ab0c6a934464e66 -Block 0031 [121]: 7963df0df1398154 -Block 0031 [122]: af67b262a61c36b5 -Block 0031 [123]: 32bca7aa219f2e78 -Block 0031 [124]: 28d17914aea9734c -Block 0031 [125]: 6a4622176522e398 -Block 0031 [126]: 951aa08aeecb2c05 -Block 0031 [127]: 6a6c49d2cb75d5b6 - - After pass 1: -Block 0000 [ 0]: d3801200410f8c0d -Block 0000 [ 1]: 0bf9e8a6e442ba6d -Block 0000 [ 2]: e2ca92fe9c541fcc -Block 0000 [ 3]: 6269fe6db177a388 -Block 0000 [ 4]: 54697b2f25faeed4 -Block 0000 [ 5]: ca4dcbdcd4eefcae -Block 0000 [ 6]: 869f43f14f6ae784 -Block 0000 [ 7]: 6b157abf5710f387 -Block 0000 [ 8]: dccc9f665cc70060 -Block 0000 [ 9]: 0c5edcc99fa61403 -Block 0000 [ 10]: f29303c301980249 -Block 0000 [ 11]: 5988c1bbd30d834c -Block 0000 [ 12]: 39e364b591bdfe22 -Block 0000 [ 13]: 416a7a66289539fe -Block 0000 [ 14]: aeac3509f8c8e956 -Block 0000 [ 15]: bbc521663bf6a8e2 -Block 0000 [ 16]: bef194b164ce3e99 -Block 0000 [ 17]: fd49e154856ac494 -Block 0000 [ 18]: 4ce1a25b28624fde -Block 0000 [ 19]: 0ceb5695cf3204b4 -Block 0000 [ 20]: 5401064c72926583 -Block 0000 [ 21]: c1ae83b9ffa27e61 -Block 0000 [ 22]: 16eaaa854054e945 -Block 0000 [ 23]: c17a5724ee8d1bb1 -Block 0000 [ 24]: 4bf3658090d191f3 -Block 0000 [ 25]: b4d5b6e3db79c5e0 -Block 0000 [ 26]: d4e0b7e7a3688394 -Block 0000 [ 27]: 4bd8b5a50ccef493 -Block 0000 [ 28]: 4142a58a18979b33 -Block 0000 [ 29]: c14bb56255a035e6 -Block 0000 [ 30]: ce21b973b1c42d32 -Block 0000 [ 31]: e5882618965206a1 -Block 0000 [ 32]: 289232b90dfc00a7 -Block 0000 [ 33]: f6eb11683430d228 -Block 0000 [ 34]: e31a02277106ef3e -Block 0000 [ 35]: d80de6836272b387 -Block 0000 [ 36]: 5c09d4e606638b96 -Block 0000 [ 37]: 58895feb876e41ab -Block 0000 [ 38]: 5cf9d44568297c87 -Block 0000 [ 39]: eed0050361734627 -Block 0000 [ 40]: 4ea00fe53450879a -Block 0000 [ 41]: b3064d067f9f262e -Block 0000 [ 42]: ca87f9054518759f -Block 0000 [ 43]: b2608daa5232463a -Block 0000 [ 44]: ca741245ec6e2b97 -Block 0000 [ 45]: a9f1625a9355e35f -Block 0000 [ 46]: 77f2764d0f0dc02b -Block 0000 [ 47]: 9a5e8e24f351f5a8 -Block 0000 [ 48]: 016be699c579a7be -Block 0000 [ 49]: 93398aca060014c5 -Block 0000 [ 50]: 0d47df3cafd4d82e -Block 0000 [ 51]: 395a20bf86d0abed -Block 0000 [ 52]: 75b7482c7b8e5671 -Block 0000 [ 53]: 1ff48f393668b7a4 -Block 0000 [ 54]: d49085c4afe25a0e -Block 0000 [ 55]: 136fde4497f52b21 -Block 0000 [ 56]: 3b370889aa35ed71 -Block 0000 [ 57]: cc8c190f1c472520 -Block 0000 [ 58]: 3693124a7e8386d9 -Block 0000 [ 59]: 297d10d970645437 -Block 0000 [ 60]: 993a29d9e20d578a -Block 0000 [ 61]: be2a4c09ff56ddf9 -Block 0000 [ 62]: 5d419a2b8f618cf0 -Block 0000 [ 63]: e040f440ec86b82d -Block 0000 [ 64]: 07774dfca51e71ad -Block 0000 [ 65]: 4976a68a18d53aef -Block 0000 [ 66]: ab97b1a63c81a71d -Block 0000 [ 67]: bd73fa31f2bb5ebd -Block 0000 [ 68]: a52da172b97961d0 -Block 0000 [ 69]: 3d2ced1687fca2ac -Block 0000 [ 70]: c79a95caa247ebe5 -Block 0000 [ 71]: 65300100024c12d3 -Block 0000 [ 72]: 20f12fa6508f8063 -Block 0000 [ 73]: 267c109454fbc217 -Block 0000 [ 74]: fe9568ba884d417b -Block 0000 [ 75]: bfde126a9ba3a56a -Block 0000 [ 76]: 601281f62f846c59 -Block 0000 [ 77]: 2bac2b0e29765653 -Block 0000 [ 78]: 9e7b7041901f6621 -Block 0000 [ 79]: d9163f3a5a6d65d8 -Block 0000 [ 80]: a3ffed8a7445715c -Block 0000 [ 81]: e06888305780966c -Block 0000 [ 82]: 7f500d7bdf4912e3 -Block 0000 [ 83]: 00004ac96e78ef85 -Block 0000 [ 84]: ff02aabd39208163 -Block 0000 [ 85]: da2ddc922d9c7de3 -Block 0000 [ 86]: 6dc4aa44c0f6444f -Block 0000 [ 87]: 53c918eceabb95b2 -Block 0000 [ 88]: 2d86fbf1d0d4f513 -Block 0000 [ 89]: 755a0e402d9f2ef3 -Block 0000 [ 90]: 266280dc98e6bee1 -Block 0000 [ 91]: 82efb4e4b9ef9703 -Block 0000 [ 92]: d0fa8b78e7c3511d -Block 0000 [ 93]: a93cad157a39bd8e -Block 0000 [ 94]: a0f66af8bffe6691 -Block 0000 [ 95]: 87b9cfcdac11cacd -Block 0000 [ 96]: 7c62fe7cb7ab47cf -Block 0000 [ 97]: 7081003ec1e06f77 -Block 0000 [ 98]: 64154c14edc0996f -Block 0000 [ 99]: 58bfa58059732347 -Block 0000 [100]: 42dd823b7b3d9d3e -Block 0000 [101]: 57fd57d0ce388b8b -Block 0000 [102]: 7d562a38ef9e3fbb -Block 0000 [103]: f99001a3ad511bd3 -Block 0000 [104]: 5b61a9ac870c859b -Block 0000 [105]: 8f099adec5730a51 -Block 0000 [106]: d80dbca4c6846746 -Block 0000 [107]: 00678617d7cee9a1 -Block 0000 [108]: 207fe5ad05cc1e50 -Block 0000 [109]: 3adee7a9a8c821cb -Block 0000 [110]: 01f1e835d06f9c01 -Block 0000 [111]: 237cdc3267368609 -Block 0000 [112]: 6f872d1adc8473a3 -Block 0000 [113]: c8ea6cae26f32a04 -Block 0000 [114]: f641027f4ff79c7f -Block 0000 [115]: 0acba686f655d7d3 -Block 0000 [116]: d2d3613a0eb5a76c -Block 0000 [117]: 44b37e72dca1ef1c -Block 0000 [118]: f026dca86e752f36 -Block 0000 [119]: b1c2cddd938aed8a -Block 0000 [120]: b8abac934f3180aa -Block 0000 [121]: cd8d3861ca00c527 -Block 0000 [122]: 4efb238110b5fb03 -Block 0000 [123]: b99922a3d81cb223 -Block 0000 [124]: fada8c89e3243fd3 -Block 0000 [125]: 13d87d5f1a2654bf -Block 0000 [126]: aac80c5e2476391a -Block 0000 [127]: e52f1c839b7e7263 -Block 0001 [ 0]: 1945bd92227552e0 -Block 0001 [ 1]: 3fe9fff6337fd477 -Block 0001 [ 2]: a731a2d7c491e874 -Block 0001 [ 3]: 3f9009bc4b0a32d8 -Block 0001 [ 4]: 1d5401dab8c8d9c0 -Block 0001 [ 5]: 430468ea6cf08e6f -Block 0001 [ 6]: 0616282f31428559 -Block 0001 [ 7]: d288d4efb6ad143b -Block 0001 [ 8]: a6b4019d2075bdff -Block 0001 [ 9]: f9ebc4b5f9ce2914 -Block 0001 [ 10]: 5341c6e85c21fca3 -Block 0001 [ 11]: c8ed550770e49a23 -Block 0001 [ 12]: 4627d43a4ac34db1 -Block 0001 [ 13]: 566a676e9510f48b -Block 0001 [ 14]: 78122727319284ab -Block 0001 [ 15]: a978f1042a8863c7 -Block 0001 [ 16]: c83efaf192023550 -Block 0001 [ 17]: 0d28a82f3db7bc03 -Block 0001 [ 18]: 1f8f3377c446ecda -Block 0001 [ 19]: 54d175c08b8d9eda -Block 0001 [ 20]: e0767ab01740a973 -Block 0001 [ 21]: e80f906cfbd20ee5 -Block 0001 [ 22]: faee549cd23e1c39 -Block 0001 [ 23]: 7779da9131534517 -Block 0001 [ 24]: d264688eb5eb4330 -Block 0001 [ 25]: a8afe053886f0bfc -Block 0001 [ 26]: a50b8e2503af3118 -Block 0001 [ 27]: d2d69c9234ecb4f0 -Block 0001 [ 28]: 14be320d2ae7813e -Block 0001 [ 29]: e2fb5f4eeb9dd171 -Block 0001 [ 30]: f8f5deccc87825eb -Block 0001 [ 31]: 582e0e0d97aefade -Block 0001 [ 32]: bd3cfbc46403045e -Block 0001 [ 33]: 0c67956254623ad2 -Block 0001 [ 34]: 5f90bde837bdeaab -Block 0001 [ 35]: d70cda7b6fe733b0 -Block 0001 [ 36]: 56eca4b0ace51877 -Block 0001 [ 37]: d92b6b6f3023fa7c -Block 0001 [ 38]: c21b2b9b865910a6 -Block 0001 [ 39]: 9863c770c0c38e0e -Block 0001 [ 40]: 656751169a661bbd -Block 0001 [ 41]: 97bf4f460e616ee0 -Block 0001 [ 42]: 2f98d464de04bb49 -Block 0001 [ 43]: c13647628f0acb3b -Block 0001 [ 44]: 92a96fa4ca62be7c -Block 0001 [ 45]: 92e69ce54fb41d93 -Block 0001 [ 46]: 06158c62c277c079 -Block 0001 [ 47]: 090f39247ffd50b7 -Block 0001 [ 48]: a0e56ea21f34f0a8 -Block 0001 [ 49]: ed1ef87602a07da6 -Block 0001 [ 50]: 497c9c19f2e34039 -Block 0001 [ 51]: 92f5cdb6e0ffc12b -Block 0001 [ 52]: 22b5b9756f3eef75 -Block 0001 [ 53]: f25efed27d000764 -Block 0001 [ 54]: bf9fb608b6e8e627 -Block 0001 [ 55]: 6cbf05cce0bdaf97 -Block 0001 [ 56]: 123c2a4d0b848602 -Block 0001 [ 57]: 52f9e2d84442b089 -Block 0001 [ 58]: e976ff506e1a80f9 -Block 0001 [ 59]: 8bf09d1b927c2d76 -Block 0001 [ 60]: b87219fd5c8ee8a0 -Block 0001 [ 61]: 713bd1d4eb7d8973 -Block 0001 [ 62]: 8492d5a39e7259ff -Block 0001 [ 63]: 5f5edf1d3c733f98 -Block 0001 [ 64]: 0246a25b84769963 -Block 0001 [ 65]: 286741bf3049d3c8 -Block 0001 [ 66]: 1636132789273cd3 -Block 0001 [ 67]: 9c613f569067aa59 -Block 0001 [ 68]: f5898e3a316a42f6 -Block 0001 [ 69]: 5b4c8006a01b9c06 -Block 0001 [ 70]: 66552db224c38815 -Block 0001 [ 71]: cf9749c91c42aa45 -Block 0001 [ 72]: ce7c98b8f4af9ffc -Block 0001 [ 73]: 68cf6a2b40f09c3b -Block 0001 [ 74]: 0905f46812a05b3f -Block 0001 [ 75]: 015cbead12bc8397 -Block 0001 [ 76]: 6d418c8d90ab5614 -Block 0001 [ 77]: d0b15b9a1ac9d73a -Block 0001 [ 78]: 887a93b384c035c7 -Block 0001 [ 79]: a29bcd852552c96d -Block 0001 [ 80]: 1d05609538a8b284 -Block 0001 [ 81]: 87662540dde6a878 -Block 0001 [ 82]: 6b1ae84769074ea0 -Block 0001 [ 83]: 6fbb58e7443b5f6f -Block 0001 [ 84]: 40fa72222a87e13a -Block 0001 [ 85]: b1e8a120d2800327 -Block 0001 [ 86]: a5476fd807667282 -Block 0001 [ 87]: ba68e2e45c8c0419 -Block 0001 [ 88]: 2e805d7dd9f3e7cd -Block 0001 [ 89]: 6c84b78c64307ecc -Block 0001 [ 90]: 2eaf6655fbf22f5d -Block 0001 [ 91]: 66602192bb412f8a -Block 0001 [ 92]: e34baf74015205ca -Block 0001 [ 93]: 39202b9ffa5c994f -Block 0001 [ 94]: 6d16e568327a9c2f -Block 0001 [ 95]: 085fae46b4269f70 -Block 0001 [ 96]: 999ad58b0a117bc4 -Block 0001 [ 97]: ce15de3d2e5826b8 -Block 0001 [ 98]: c03c2d06ffb5b99f -Block 0001 [ 99]: 84c6ba4f13458353 -Block 0001 [100]: beb6c09a3a5194cc -Block 0001 [101]: 34394fa0ff1091ab -Block 0001 [102]: fa11be98a4e8ee53 -Block 0001 [103]: b62f437abb79b7fe -Block 0001 [104]: 561bff03009cddfd -Block 0001 [105]: 171359698cc75e4a -Block 0001 [106]: 4c24145a2adc9229 -Block 0001 [107]: 8992e622258ef17e -Block 0001 [108]: 3a909d2299d4593e -Block 0001 [109]: c9965a227170be63 -Block 0001 [110]: 17741a4490c4af3c -Block 0001 [111]: 170c431f5463ee9f -Block 0001 [112]: 0df53bf18ea7ce09 -Block 0001 [113]: 4ccd25b38f8839e6 -Block 0001 [114]: b9c84384dadc8dd2 -Block 0001 [115]: e446ab27c623ecba -Block 0001 [116]: c4698296ed168df1 -Block 0001 [117]: ce98040ace2e51f3 -Block 0001 [118]: 2a305189d1de6c40 -Block 0001 [119]: 604bda6551a184dd -Block 0001 [120]: ce73633f7037c144 -Block 0001 [121]: 9e26b774ac1bdeff -Block 0001 [122]: e402d8dc15d6e1f7 -Block 0001 [123]: 72aaab45896934bc -Block 0001 [124]: f3ce458f876b08a7 -Block 0001 [125]: e4cbd63c9cb6522f -Block 0001 [126]: 0b499bbe86150fd8 -Block 0001 [127]: d13c062f33d4c833 -Block 0002 [ 0]: ba91b55bbcc9c44b -Block 0002 [ 1]: ef4e99f999dae035 -Block 0002 [ 2]: d8aa1c505b46ab7d -Block 0002 [ 3]: 161365f459855e5b -Block 0002 [ 4]: b59ce6a7276c0313 -Block 0002 [ 5]: b6bbfbe6c3a4ccd9 -Block 0002 [ 6]: 592972bf9bf98c94 -Block 0002 [ 7]: 5da354b04f15f821 -Block 0002 [ 8]: fa1006fa6a96df9b -Block 0002 [ 9]: 6263146aa513f00d -Block 0002 [ 10]: 0d811087fb7afb0e -Block 0002 [ 11]: 7e6e21016a92a8c2 -Block 0002 [ 12]: 45f09b0f30befd10 -Block 0002 [ 13]: 87a59e630c107ff3 -Block 0002 [ 14]: b723de6f0f63977b -Block 0002 [ 15]: 338d3e44d5e16d0b -Block 0002 [ 16]: 5ef7898fa708e2c4 -Block 0002 [ 17]: a6cbc1bab7a2544f -Block 0002 [ 18]: 8a036c0f36e22fe8 -Block 0002 [ 19]: 7cd77b1a3ad76405 -Block 0002 [ 20]: 07cf084d96f9e8ce -Block 0002 [ 21]: 19eecfa89fd77725 -Block 0002 [ 22]: b0c19b5d40941581 -Block 0002 [ 23]: 827182feebd76922 -Block 0002 [ 24]: 40ee3d84069c3a31 -Block 0002 [ 25]: c0489f64169a76ec -Block 0002 [ 26]: 53c889b64969b287 -Block 0002 [ 27]: adfbbb1914ca4759 -Block 0002 [ 28]: 2ba3aea68b7e970a -Block 0002 [ 29]: ca9d0cb6c1d00d60 -Block 0002 [ 30]: 72a72acc38c1fc7d -Block 0002 [ 31]: f8f027e04b16ade3 -Block 0002 [ 32]: ca75618529c9562b -Block 0002 [ 33]: fb8aff1638783021 -Block 0002 [ 34]: c6d05939d2f83537 -Block 0002 [ 35]: e0e251f3454d020f -Block 0002 [ 36]: c79a6f14d3dd3974 -Block 0002 [ 37]: 6493ede738fab09b -Block 0002 [ 38]: 210487350fa557c0 -Block 0002 [ 39]: d2dcede8fcd00251 -Block 0002 [ 40]: b88578fb1e583c32 -Block 0002 [ 41]: 460f7c6f933a805b -Block 0002 [ 42]: b48a1953360954f3 -Block 0002 [ 43]: c0f9d6d5f451df28 -Block 0002 [ 44]: d89207b92d8f9ba7 -Block 0002 [ 45]: e69a38a67a54f5c8 -Block 0002 [ 46]: 11f75a0109d257db -Block 0002 [ 47]: 19bd04eacdcfaafe -Block 0002 [ 48]: 8d4d532b061fceb1 -Block 0002 [ 49]: a0a79bc1d110c780 -Block 0002 [ 50]: a8e94cac065b310f -Block 0002 [ 51]: 97e43b3770c87ad3 -Block 0002 [ 52]: d0a77f2b7bc888eb -Block 0002 [ 53]: fdf7376f17f6b5e2 -Block 0002 [ 54]: 11f502100246cef9 -Block 0002 [ 55]: ad1a13d0aa5acd01 -Block 0002 [ 56]: d68613c11793b88f -Block 0002 [ 57]: 2ac95bcd120c8c32 -Block 0002 [ 58]: 935adb1cc9b686ab -Block 0002 [ 59]: 2d79c88d33ca29dc -Block 0002 [ 60]: 726453fd936c6ef4 -Block 0002 [ 61]: 990570ccb4919d9e -Block 0002 [ 62]: 69d0b6440d8e3183 -Block 0002 [ 63]: 6712b294bba95869 -Block 0002 [ 64]: 1eb00d8d33b41a7f -Block 0002 [ 65]: 2ee451e9ff0e71b3 -Block 0002 [ 66]: f9ffd27bee51d5b2 -Block 0002 [ 67]: 4d15fc6e5f3e5dae -Block 0002 [ 68]: a6899eff879f2a74 -Block 0002 [ 69]: 0806eb87bbee41a4 -Block 0002 [ 70]: 1c9f8648ec062246 -Block 0002 [ 71]: 56c2b32194d047b3 -Block 0002 [ 72]: 1f1a5896372ccbb6 -Block 0002 [ 73]: 1435a02c33ad89df -Block 0002 [ 74]: 9f938145231a369a -Block 0002 [ 75]: 3d72686ac66459b2 -Block 0002 [ 76]: 2e0222a2f9916308 -Block 0002 [ 77]: 9ed37e9132a8b19a -Block 0002 [ 78]: c24917158db12ce7 -Block 0002 [ 79]: 103588d94fc7757d -Block 0002 [ 80]: 2caf0fe9acf3ec0b -Block 0002 [ 81]: b61c96f3a96426d8 -Block 0002 [ 82]: 05de68a8c3ee42f1 -Block 0002 [ 83]: ec1f82f8af1d903b -Block 0002 [ 84]: 253fadbd87952312 -Block 0002 [ 85]: 1de5945b574001f0 -Block 0002 [ 86]: 03872fb2d6941330 -Block 0002 [ 87]: 32358ba499959926 -Block 0002 [ 88]: 9b28ce180b92a1a7 -Block 0002 [ 89]: a229f2616047a544 -Block 0002 [ 90]: 3c874b9946795967 -Block 0002 [ 91]: b8a26bd8e577f4a9 -Block 0002 [ 92]: e798d879adf569c8 -Block 0002 [ 93]: 6e23b3170dc7a258 -Block 0002 [ 94]: a0076913112ec88f -Block 0002 [ 95]: dda7a83d40ef7d5c -Block 0002 [ 96]: 1611deda81abcac5 -Block 0002 [ 97]: 074ccadbeea42d4a -Block 0002 [ 98]: 6ea2c5707adb8f45 -Block 0002 [ 99]: 80da00c20d4bb11e -Block 0002 [100]: dc96adbec42f44a7 -Block 0002 [101]: 5da32b2f6f13baa0 -Block 0002 [102]: ca8e52f587863a8b -Block 0002 [103]: 865a1d8964d6a636 -Block 0002 [104]: 729c4b71bc3f9ba4 -Block 0002 [105]: 38f394888711ad72 -Block 0002 [106]: 0e091de912e1a945 -Block 0002 [107]: 75ca35d28beaf076 -Block 0002 [108]: 798bdabc47914a36 -Block 0002 [109]: 1cb78eae0084f6e5 -Block 0002 [110]: 869c5d43fac72e43 -Block 0002 [111]: 7124df3e72e5055c -Block 0002 [112]: d9d6dee51ac44d5b -Block 0002 [113]: ef1f60c3aef1eb52 -Block 0002 [114]: deb93e3180de04f2 -Block 0002 [115]: e6f805543d0bce6e -Block 0002 [116]: 894cba70645c746f -Block 0002 [117]: 2fa8dfad858cfb19 -Block 0002 [118]: 43f65744789bd8fa -Block 0002 [119]: c43f4efa7614c598 -Block 0002 [120]: 2aa22dd068fe3e8c -Block 0002 [121]: 9c18388f5b00cbae -Block 0002 [122]: a9105c8405b24c5e -Block 0002 [123]: bae5b6ce43c5a9df -Block 0002 [124]: 0819dc402397abb4 -Block 0002 [125]: ead7908e2e7b1ead -Block 0002 [126]: 7c49e028000bef0a -Block 0002 [127]: 22cd0e710d3607f1 -Block 0003 [ 0]: dcc0ded548f10ae1 -Block 0003 [ 1]: 1d2e18366b7da0ca -Block 0003 [ 2]: e2de5a320056a6c4 -Block 0003 [ 3]: f9462a22af7c11e4 -Block 0003 [ 4]: af27d3d2b8650e71 -Block 0003 [ 5]: 532a58a92dd0f8f2 -Block 0003 [ 6]: b56b0087681d06fe -Block 0003 [ 7]: 78bbf2dd701c058e -Block 0003 [ 8]: 1dbddf25cec077ee -Block 0003 [ 9]: c812af1bdd8e26c6 -Block 0003 [ 10]: 177996cf3f1f819a -Block 0003 [ 11]: 6cd659e433485c29 -Block 0003 [ 12]: ac5ec15d9920127f -Block 0003 [ 13]: facf6ce5cb2d959f -Block 0003 [ 14]: cb487aaf1811e764 -Block 0003 [ 15]: 062071fcb5ffe047 -Block 0003 [ 16]: 71e3503a0e6df8a1 -Block 0003 [ 17]: 24775f27efc9ba78 -Block 0003 [ 18]: c6f1fb1f6b771d35 -Block 0003 [ 19]: 734fd5b47aaa319f -Block 0003 [ 20]: 2d8a40514d0f2027 -Block 0003 [ 21]: 6eb0e0c6562ecbf1 -Block 0003 [ 22]: beb6d3a66bdd7159 -Block 0003 [ 23]: 46d2e4eb9b3e5a34 -Block 0003 [ 24]: dc4c8bce2ca70df5 -Block 0003 [ 25]: 68d7472e72ce3eef -Block 0003 [ 26]: 18c267da346f3dc5 -Block 0003 [ 27]: a3fb91802385fc4d -Block 0003 [ 28]: 16e151f8930c0dc4 -Block 0003 [ 29]: 60585b77a71f4a7b -Block 0003 [ 30]: 620480b715921164 -Block 0003 [ 31]: 4609561ad34203f3 -Block 0003 [ 32]: d6970f63f27ed566 -Block 0003 [ 33]: 2516ff93960c7fe1 -Block 0003 [ 34]: e941af020fbf31c9 -Block 0003 [ 35]: f96d31e5bc2f9316 -Block 0003 [ 36]: 5585f2cbaf1b86af -Block 0003 [ 37]: f64a713997c5e5d0 -Block 0003 [ 38]: 7b32d6946b093c50 -Block 0003 [ 39]: 4b218a214ddc2548 -Block 0003 [ 40]: a679a8e777d60ef9 -Block 0003 [ 41]: dcec0857f3037b8a -Block 0003 [ 42]: 8ecde17ce4c21efb -Block 0003 [ 43]: ac79fed000ea2ced -Block 0003 [ 44]: f7663aeefdc36bed -Block 0003 [ 45]: 70c85d47ef60d769 -Block 0003 [ 46]: b73a6f9aa78acb29 -Block 0003 [ 47]: aaf447cfa5d92a7b -Block 0003 [ 48]: 7643418bfb8a731c -Block 0003 [ 49]: 4ebb46031677c4dc -Block 0003 [ 50]: 94d54d967c54291c -Block 0003 [ 51]: 76828c28b720d958 -Block 0003 [ 52]: c8b1025ca0206cda -Block 0003 [ 53]: 419c457ab3179aa9 -Block 0003 [ 54]: fdb0e83a8981ed63 -Block 0003 [ 55]: a48511be8c943210 -Block 0003 [ 56]: fa4a08568d0b2622 -Block 0003 [ 57]: 5ad1b56c9a8f97a4 -Block 0003 [ 58]: 16eb45c9c3c514c4 -Block 0003 [ 59]: 2735ab930271e048 -Block 0003 [ 60]: 00f8788ccc61d627 -Block 0003 [ 61]: a25d45d035893152 -Block 0003 [ 62]: 17f47f46131f888c -Block 0003 [ 63]: 9743f2b2ff11465f -Block 0003 [ 64]: 61f750aaf9c5026d -Block 0003 [ 65]: df0f25aaf5b74f1a -Block 0003 [ 66]: 0547223f8179b53a -Block 0003 [ 67]: a6a8dcabb1b433fb -Block 0003 [ 68]: 8a7e4041f55d8df2 -Block 0003 [ 69]: 76b1422ea39d47ef -Block 0003 [ 70]: 7c079885eddc7b66 -Block 0003 [ 71]: e3caf2a31d4946b6 -Block 0003 [ 72]: 09feca87c0fb72aa -Block 0003 [ 73]: e23465b2f7e56deb -Block 0003 [ 74]: ace65aeef77d812a -Block 0003 [ 75]: 8a8b2c97e8d229ba -Block 0003 [ 76]: f300a0a7f213a50c -Block 0003 [ 77]: 714bd30614b4bf2b -Block 0003 [ 78]: 38e78a67080d973c -Block 0003 [ 79]: c44ffe682b0b92e1 -Block 0003 [ 80]: 0a0dc7ad40a8cb31 -Block 0003 [ 81]: 328ad7a9c6aa3b94 -Block 0003 [ 82]: 722f8491e660bf19 -Block 0003 [ 83]: a947d1a8682da13f -Block 0003 [ 84]: 6625e609734bda42 -Block 0003 [ 85]: 374f7df0f39cac38 -Block 0003 [ 86]: 23118aea1aea8558 -Block 0003 [ 87]: 795944fa000fc32e -Block 0003 [ 88]: 5c0cc56ec4d36876 -Block 0003 [ 89]: b9a1a09c507a2f15 -Block 0003 [ 90]: a557c2b1be1df79f -Block 0003 [ 91]: b9b900f964885aee -Block 0003 [ 92]: 70d410b5dccc0cb6 -Block 0003 [ 93]: 2dfbdfb73da5cd7b -Block 0003 [ 94]: d64cb3edc647361e -Block 0003 [ 95]: e77cb0e072deb80b -Block 0003 [ 96]: 14b3f216a2e67b3d -Block 0003 [ 97]: 574fc539722db295 -Block 0003 [ 98]: 7a16f80eca5e7e11 -Block 0003 [ 99]: 76c8fea99b70aaa6 -Block 0003 [100]: fe0300268d802b45 -Block 0003 [101]: 86035e342b596a22 -Block 0003 [102]: eb5b48ad2d79cf70 -Block 0003 [103]: 424330100a9bc87c -Block 0003 [104]: d3ae2fa20e07bd7e -Block 0003 [105]: 357f0e5a5ebca41f -Block 0003 [106]: 4c86d4b417f49e3d -Block 0003 [107]: 86b060563b328b08 -Block 0003 [108]: 98e9754e35c1b4b6 -Block 0003 [109]: 8a4916af20b73399 -Block 0003 [110]: 63b6ca9dbe064f8b -Block 0003 [111]: 1ce064c5c3257af6 -Block 0003 [112]: c5ddc58ad0d6c4f3 -Block 0003 [113]: a06a361f0a442eef -Block 0003 [114]: 79256fae0347e4fe -Block 0003 [115]: 4fa9aef5835679ba -Block 0003 [116]: f0a58f6646413011 -Block 0003 [117]: 46b532af9df91ac9 -Block 0003 [118]: 1280b739029c7543 -Block 0003 [119]: 5d88e4ea2058889f -Block 0003 [120]: 3719c1706570dec9 -Block 0003 [121]: afa81e2d57d77489 -Block 0003 [122]: 18b3b64205efae40 -Block 0003 [123]: ee5fa7f06db1a8f7 -Block 0003 [124]: 83688896c9a489c7 -Block 0003 [125]: d9b1bbde14d95efe -Block 0003 [126]: f2259de115d64f0f -Block 0003 [127]: 710ec82f945eaadf -Block 0004 [ 0]: ea1fe2ab7a7036b2 -Block 0004 [ 1]: 85c6477a85f91236 -Block 0004 [ 2]: 05c5a08666d2931b -Block 0004 [ 3]: 41a7c68f43da7c7d -Block 0004 [ 4]: 0defb4961f1694da -Block 0004 [ 5]: d0304b7d3063a446 -Block 0004 [ 6]: 8c46ea68904e29d3 -Block 0004 [ 7]: d38da6c07cacb5ce -Block 0004 [ 8]: a603b0c600e9f236 -Block 0004 [ 9]: 5fc25b4c401b835c -Block 0004 [ 10]: 9bb577e3984fe6f9 -Block 0004 [ 11]: 021984c7e342b9e3 -Block 0004 [ 12]: cba1d5481629e4cf -Block 0004 [ 13]: 43fc94ea9a713a11 -Block 0004 [ 14]: e6af00ea4d897083 -Block 0004 [ 15]: b401ed470c0e1a4f -Block 0004 [ 16]: 231856f0c98b75b5 -Block 0004 [ 17]: 509380f041608001 -Block 0004 [ 18]: 7ddb7b55c3f7a32c -Block 0004 [ 19]: ab538267f69eb583 -Block 0004 [ 20]: fbc7aefaa0564964 -Block 0004 [ 21]: 7f158c8a60784aeb -Block 0004 [ 22]: 4648999ce4911e3c -Block 0004 [ 23]: 980beec1366efcba -Block 0004 [ 24]: 8759ff4a7082eae0 -Block 0004 [ 25]: 18a37bc4e3593613 -Block 0004 [ 26]: 9e0c3ab54634e89f -Block 0004 [ 27]: 0756ddc71ba6e41b -Block 0004 [ 28]: ce331883216a9055 -Block 0004 [ 29]: cbb90e3c5d30711c -Block 0004 [ 30]: 4a3391e02cb7e881 -Block 0004 [ 31]: 6b3a78414d4ab4df -Block 0004 [ 32]: 499ad48ed83fc044 -Block 0004 [ 33]: 72a9b10916d398c3 -Block 0004 [ 34]: ae72073814b44109 -Block 0004 [ 35]: bee50180bc61074a -Block 0004 [ 36]: 1690a81ebd7559d0 -Block 0004 [ 37]: 71085e55a036400a -Block 0004 [ 38]: 92fe8eec29736019 -Block 0004 [ 39]: cf735a813a92080a -Block 0004 [ 40]: 88252967ae06ad1b -Block 0004 [ 41]: 4150b41ba673b2e1 -Block 0004 [ 42]: 6889e1a8078d6d67 -Block 0004 [ 43]: dcebc07ddf63aba6 -Block 0004 [ 44]: e22b522bae7679fc -Block 0004 [ 45]: 52fc15ac981c648b -Block 0004 [ 46]: 4802cdc7906fe4cf -Block 0004 [ 47]: 19d42d9ff6b6d21a -Block 0004 [ 48]: 5ca85a0807f9dd5e -Block 0004 [ 49]: 8f48ad6e6ee76c50 -Block 0004 [ 50]: e2a894bc918e6f69 -Block 0004 [ 51]: d1fffa8c4c48fde2 -Block 0004 [ 52]: e627611dfdfb333f -Block 0004 [ 53]: c6c349ab4fdbc238 -Block 0004 [ 54]: 7da9f80b464ef8ea -Block 0004 [ 55]: 067d55581ee7e3c2 -Block 0004 [ 56]: fbe9b0ee4bf31aaf -Block 0004 [ 57]: a44b7b7efdd0e193 -Block 0004 [ 58]: 5e0db34b73b8ef2b -Block 0004 [ 59]: 88c8f30f1acc503e -Block 0004 [ 60]: e2cac47ce0fb4347 -Block 0004 [ 61]: a16f6d7841887932 -Block 0004 [ 62]: 219778816b0aa3f8 -Block 0004 [ 63]: a932db70e4feb4f4 -Block 0004 [ 64]: 075c7ef6126bc9a3 -Block 0004 [ 65]: 08245933a277dbe1 -Block 0004 [ 66]: eda3c6f55d8dec61 -Block 0004 [ 67]: c5e72f83f91d9ef0 -Block 0004 [ 68]: e6d401a4acb97d8f -Block 0004 [ 69]: f499338f8e2a6f25 -Block 0004 [ 70]: 5725ea1e9a7c9a40 -Block 0004 [ 71]: 78015cf40fd43146 -Block 0004 [ 72]: 8e53780ce8cc04b9 -Block 0004 [ 73]: 1a1c458d1d05af9e -Block 0004 [ 74]: 7a576ff157948c64 -Block 0004 [ 75]: 7c9f6f165d136062 -Block 0004 [ 76]: a038ea9b75a1f436 -Block 0004 [ 77]: 858043a7ad2aa121 -Block 0004 [ 78]: bfc610d9724d4325 -Block 0004 [ 79]: 659d18f29c4f7995 -Block 0004 [ 80]: 18049b3c80c77175 -Block 0004 [ 81]: 8060c37bc1f03a74 -Block 0004 [ 82]: bbc7c274ecf6a8d6 -Block 0004 [ 83]: a487c7e4734d3b39 -Block 0004 [ 84]: 681167693061d9a7 -Block 0004 [ 85]: ff6f7a17112ffb87 -Block 0004 [ 86]: 83df04decd05742a -Block 0004 [ 87]: 086f57c9ffc40003 -Block 0004 [ 88]: d9e31cb73edac6e7 -Block 0004 [ 89]: 93a8cf45366a874c -Block 0004 [ 90]: cee20eb0ca470904 -Block 0004 [ 91]: e7e0ace92d9b3d61 -Block 0004 [ 92]: b3ae86ff91d9f0fb -Block 0004 [ 93]: 6f227e57ae9e4c80 -Block 0004 [ 94]: 8a01ab3a4678eb6f -Block 0004 [ 95]: 80da3c6a719c0209 -Block 0004 [ 96]: a91c8edea57913af -Block 0004 [ 97]: ea6ab28a0e2f37f7 -Block 0004 [ 98]: 3f795b47ebeead2a -Block 0004 [ 99]: 5e1505078f12cff1 -Block 0004 [100]: ecba75be892e25ef -Block 0004 [101]: 6d3feef41567ae8a -Block 0004 [102]: 4517a0804df1ecc0 -Block 0004 [103]: 58bc996afd6c0712 -Block 0004 [104]: ba12c78acd45132e -Block 0004 [105]: 7ee89654818197a7 -Block 0004 [106]: 514ecbc9845bd37c -Block 0004 [107]: 11d29359991ee6ff -Block 0004 [108]: fe713242d737c3a3 -Block 0004 [109]: 32f84914ce2fdaf9 -Block 0004 [110]: 974ecb6b51e80ae7 -Block 0004 [111]: ed9c92603ca0e403 -Block 0004 [112]: a5058b1cdf5edd52 -Block 0004 [113]: 45ad7579118ccbfd -Block 0004 [114]: 964fc1432cf81d8e -Block 0004 [115]: a862bd5e512696af -Block 0004 [116]: 9b49f72e01622b4c -Block 0004 [117]: e72a25dad57c482a -Block 0004 [118]: 61e0eba167cca8f9 -Block 0004 [119]: 366294652d3cf919 -Block 0004 [120]: 5e58ea40ddbd5196 -Block 0004 [121]: 8aa2db0a693790b2 -Block 0004 [122]: c31566392c57c1ec -Block 0004 [123]: 8394c122b6d01178 -Block 0004 [124]: fb42ac99a450a533 -Block 0004 [125]: e6a9cff5060f1e82 -Block 0004 [126]: 60e2a713bde568b6 -Block 0004 [127]: 83e1282e71de5848 -Block 0005 [ 0]: c8a00942e6fab217 -Block 0005 [ 1]: 5f3900cc396002cb -Block 0005 [ 2]: c2098b6274dcc746 -Block 0005 [ 3]: 663ce4aa4874678f -Block 0005 [ 4]: 5792103890802ed5 -Block 0005 [ 5]: 93fa06bdc66fe195 -Block 0005 [ 6]: e0d6c790decb7cc5 -Block 0005 [ 7]: 0a81879d52836a92 -Block 0005 [ 8]: 0e52d7de3cde3cbb -Block 0005 [ 9]: 105ff6f967a4f460 -Block 0005 [ 10]: 40c3229e477af434 -Block 0005 [ 11]: b3c5128c5940310f -Block 0005 [ 12]: 139836a039ff17fd -Block 0005 [ 13]: bc1bf0e49c651fa7 -Block 0005 [ 14]: f1d26434c506cc0c -Block 0005 [ 15]: 0b02fbf0a0471f31 -Block 0005 [ 16]: 4ccdacb55b294a21 -Block 0005 [ 17]: 1ee8df23ccf5342a -Block 0005 [ 18]: 0e9456d3e7903d56 -Block 0005 [ 19]: b3f6794f08b15886 -Block 0005 [ 20]: fd65389bd69c17e2 -Block 0005 [ 21]: 9c26848be1617f55 -Block 0005 [ 22]: 78bc8f5c4a21097d -Block 0005 [ 23]: ff93a642f914134b -Block 0005 [ 24]: 39ea6e448d04d4ea -Block 0005 [ 25]: 708148a8d39a0745 -Block 0005 [ 26]: 0fbf4da1da80b844 -Block 0005 [ 27]: 61ae114a155d5ae4 -Block 0005 [ 28]: 0ef079afd2959963 -Block 0005 [ 29]: 54abcd41a84c0a5c -Block 0005 [ 30]: 9db495b2a6f908f3 -Block 0005 [ 31]: 9ce42afa31af3158 -Block 0005 [ 32]: 1eade628e9b7172c -Block 0005 [ 33]: 3439ac345c0e50f9 -Block 0005 [ 34]: 53d4b4a87da6c3cb -Block 0005 [ 35]: be412590435a41b3 -Block 0005 [ 36]: 2b72d2c74275ca6c -Block 0005 [ 37]: 64bdba533fc452f6 -Block 0005 [ 38]: 6b78aef20e0afdda -Block 0005 [ 39]: 0676838cbbf73829 -Block 0005 [ 40]: 78b240089f718c68 -Block 0005 [ 41]: 0a6bcb165c8ca245 -Block 0005 [ 42]: 5cbfbf1a7b7ceb7b -Block 0005 [ 43]: 1f5b4c47ce730d9d -Block 0005 [ 44]: 029cee169ab2033f -Block 0005 [ 45]: 4bf62feafb239c79 -Block 0005 [ 46]: ecb412518681a909 -Block 0005 [ 47]: 3aa3bb1e4f34c2fa -Block 0005 [ 48]: 27cc3db9b21b7193 -Block 0005 [ 49]: 189d495529dc5853 -Block 0005 [ 50]: 1b96e2533620e1ca -Block 0005 [ 51]: 00caee4e87e09b8a -Block 0005 [ 52]: 473818a7322b984c -Block 0005 [ 53]: 4edd73d65bbc1721 -Block 0005 [ 54]: 0ffede59ded70af0 -Block 0005 [ 55]: 49dc058fd59587bf -Block 0005 [ 56]: e86b8c9fc4e64fd7 -Block 0005 [ 57]: 16bb898549ee3a82 -Block 0005 [ 58]: 1f858fcea6c3cb44 -Block 0005 [ 59]: 56b71eaac6ded63a -Block 0005 [ 60]: 5d1be7993b9e5d43 -Block 0005 [ 61]: 6eea32343ea4be5b -Block 0005 [ 62]: 7a8a3e23abafbd1e -Block 0005 [ 63]: db0a8eff9415fab7 -Block 0005 [ 64]: 514e5db61cedb6bc -Block 0005 [ 65]: fa2f4ddb28d56882 -Block 0005 [ 66]: 9eb643cf6be83890 -Block 0005 [ 67]: 9ef39e62be287dad -Block 0005 [ 68]: 114a029159dd0e77 -Block 0005 [ 69]: c3c6258532250025 -Block 0005 [ 70]: 182987e1a9f9c56f -Block 0005 [ 71]: 7ae2aa48e9595ccb -Block 0005 [ 72]: c5b4a0f5c6297318 -Block 0005 [ 73]: 76b5455e463ac9b6 -Block 0005 [ 74]: abbdb2271a03b410 -Block 0005 [ 75]: 77d3c85d31fb0a50 -Block 0005 [ 76]: 4b37d5a3a36b5c2f -Block 0005 [ 77]: 45e4cb2d76d87e68 -Block 0005 [ 78]: 9da1636691c616a0 -Block 0005 [ 79]: d9f77c6c249f650e -Block 0005 [ 80]: 72d7afbfe8262971 -Block 0005 [ 81]: 3b35df52da5feabe -Block 0005 [ 82]: 7696b93b21273e02 -Block 0005 [ 83]: db4fc3efd9e8c0b5 -Block 0005 [ 84]: 78fb9a87cfc22f47 -Block 0005 [ 85]: 95dfe8b7f66af8ce -Block 0005 [ 86]: a489ea3ec00d689e -Block 0005 [ 87]: 7b428b52d1e5a706 -Block 0005 [ 88]: 1dc435d48476bbae -Block 0005 [ 89]: 9601f814fd53536f -Block 0005 [ 90]: ddc3b64730bb0dd6 -Block 0005 [ 91]: d5f14040203b4b69 -Block 0005 [ 92]: a35b17db080c898a -Block 0005 [ 93]: 9a42d2cc0cabd88d -Block 0005 [ 94]: d2ad2bc6b4cc79fd -Block 0005 [ 95]: 5a438d9a2d8060e7 -Block 0005 [ 96]: 19c6a90f24108aeb -Block 0005 [ 97]: a67eb012ba11cd90 -Block 0005 [ 98]: a6a96f8cebd4ad0d -Block 0005 [ 99]: e14f7c290a284bc1 -Block 0005 [100]: 7a08c29453764b2d -Block 0005 [101]: d06f68f4751b5e34 -Block 0005 [102]: 8e80c5dbbaf8ffe8 -Block 0005 [103]: 6b1e41c36c114373 -Block 0005 [104]: 49d830c4906de0fe -Block 0005 [105]: b0ee513791cad520 -Block 0005 [106]: ab9e60e0968d3a0a -Block 0005 [107]: 2284da3cb1f7c309 -Block 0005 [108]: 17a689e78674644d -Block 0005 [109]: bd9e41f8e2f85fce -Block 0005 [110]: 1c98dec77ed6cfc7 -Block 0005 [111]: 69f9539b6e1938cc -Block 0005 [112]: 2413ed5967171c23 -Block 0005 [113]: f52bb67788b17c5d -Block 0005 [114]: 9c58d36c1a0e4d9c -Block 0005 [115]: 986158f9bc6da22a -Block 0005 [116]: 6668746a8ab7701f -Block 0005 [117]: 395c1277a648bfcd -Block 0005 [118]: aa1f79834a1cd936 -Block 0005 [119]: d8888d13fd202ad5 -Block 0005 [120]: 925e9a3c90e002ca -Block 0005 [121]: fd773ff418bfd642 -Block 0005 [122]: 30253479ba10d167 -Block 0005 [123]: 90075643c6a2cdb3 -Block 0005 [124]: 65ce7cd429906ce3 -Block 0005 [125]: d045c0f7cc934b3a -Block 0005 [126]: 15610c6b2e28b0ff -Block 0005 [127]: 4e39efce679d8906 -Block 0006 [ 0]: 1e325ed2212387d1 -Block 0006 [ 1]: 3d0e385b3df2f34c -Block 0006 [ 2]: f5e9da41d473a50c -Block 0006 [ 3]: 6c41f75b09633114 -Block 0006 [ 4]: e5c40b0a5c3c3d3c -Block 0006 [ 5]: 70390c2060d02d5b -Block 0006 [ 6]: 13cfcc8f3a87a4e8 -Block 0006 [ 7]: 694cc08eb1cc357a -Block 0006 [ 8]: 066bd7778e34c240 -Block 0006 [ 9]: 02546d4e08d48cf1 -Block 0006 [ 10]: 667ac555c19f4fd9 -Block 0006 [ 11]: e2f0f49161bba1a1 -Block 0006 [ 12]: 46bcd9c803861439 -Block 0006 [ 13]: 6cf465b0d8236f95 -Block 0006 [ 14]: 12ace71d5959aad3 -Block 0006 [ 15]: aeeb352782be85af -Block 0006 [ 16]: 5a021e2205f64f63 -Block 0006 [ 17]: 3fbdb9434dc71254 -Block 0006 [ 18]: 8234a650879d7645 -Block 0006 [ 19]: 070f81fae6f2be5a -Block 0006 [ 20]: 1fd9b2c5f14d41d4 -Block 0006 [ 21]: 159455a467f28d58 -Block 0006 [ 22]: a0bddae8748dcd60 -Block 0006 [ 23]: 343aded618ecffcd -Block 0006 [ 24]: 97bff7d40fdcab71 -Block 0006 [ 25]: 32dc2e9bd0365fd1 -Block 0006 [ 26]: 4aa3dc7bb9c27451 -Block 0006 [ 27]: be3c25443096c335 -Block 0006 [ 28]: d73fae835d16832f -Block 0006 [ 29]: 82c5fe5db9b50422 -Block 0006 [ 30]: 5c822dec966da5d9 -Block 0006 [ 31]: d3cd392b9ce27b79 -Block 0006 [ 32]: c8baed6dabb7aef4 -Block 0006 [ 33]: 048770c6881afd15 -Block 0006 [ 34]: f122e8cfe8f76764 -Block 0006 [ 35]: 107168691e3f9738 -Block 0006 [ 36]: d65b69f4799b6db0 -Block 0006 [ 37]: 974445327044eebc -Block 0006 [ 38]: 50467387ff2d4696 -Block 0006 [ 39]: 838c29b0b0d34e28 -Block 0006 [ 40]: 436cd94c81c96b56 -Block 0006 [ 41]: 996ab1aa9f53b25c -Block 0006 [ 42]: cb76b9da4e401489 -Block 0006 [ 43]: 1f63bf42233b63ca -Block 0006 [ 44]: 6f123ceaa4ead5c6 -Block 0006 [ 45]: 2f4c070f4618f760 -Block 0006 [ 46]: 97ab4ea49e241fc4 -Block 0006 [ 47]: 37801e0034f0c0dd -Block 0006 [ 48]: b7161fda13bcd2da -Block 0006 [ 49]: ebe6cbe0e9b75f52 -Block 0006 [ 50]: b1ceca181c16a480 -Block 0006 [ 51]: e806183b1bf6b766 -Block 0006 [ 52]: 5880a473e2ac3d17 -Block 0006 [ 53]: 68c7e161cddca8ef -Block 0006 [ 54]: 21ce049e22ee28e4 -Block 0006 [ 55]: 94a98f294503b9b2 -Block 0006 [ 56]: 0f193763b7ad5b27 -Block 0006 [ 57]: 2d0702f236454417 -Block 0006 [ 58]: d40d19c0290b48bf -Block 0006 [ 59]: 42e5ab63638e87ad -Block 0006 [ 60]: 18120e37f9af0de5 -Block 0006 [ 61]: 14c510336c1373d1 -Block 0006 [ 62]: c6407562b0bbf1b9 -Block 0006 [ 63]: f1c2f7fa6181d9dd -Block 0006 [ 64]: bae064f2705158b4 -Block 0006 [ 65]: fcdc22a1aad7bf8c -Block 0006 [ 66]: b4f7dfd2a6ef95f8 -Block 0006 [ 67]: 15da42f7b3828d9e -Block 0006 [ 68]: 63861e4623edd926 -Block 0006 [ 69]: 0c9fb5d206786c38 -Block 0006 [ 70]: cc9197e49df2d79c -Block 0006 [ 71]: dd7237d89fb311e2 -Block 0006 [ 72]: b18667c1f5f22fd1 -Block 0006 [ 73]: 36a6df076e50f7fc -Block 0006 [ 74]: 3aabee6b302d1288 -Block 0006 [ 75]: 8892f49ba624e8fe -Block 0006 [ 76]: 4a2ced3a274ec188 -Block 0006 [ 77]: 187f7da5461e9b81 -Block 0006 [ 78]: fac3f4ca90050a52 -Block 0006 [ 79]: 2ffd193f6716cdef -Block 0006 [ 80]: 11cc9006d842b575 -Block 0006 [ 81]: e44268924819c35c -Block 0006 [ 82]: 725257733df64b91 -Block 0006 [ 83]: f7fdb2b0649f4a80 -Block 0006 [ 84]: 9087d12ba4d0c2bd -Block 0006 [ 85]: a494ade254d09b36 -Block 0006 [ 86]: 7ec3b1fc9e451974 -Block 0006 [ 87]: accba2d0e221af9c -Block 0006 [ 88]: c519f5c987806dc3 -Block 0006 [ 89]: 2f010a3439a00b8c -Block 0006 [ 90]: d48826af110704a7 -Block 0006 [ 91]: 5232aad8b79c6af4 -Block 0006 [ 92]: ca5d0256e2b35d0b -Block 0006 [ 93]: 10c295f5c2e46f19 -Block 0006 [ 94]: 8281197973bb9bb4 -Block 0006 [ 95]: df9f65ae49b5f93c -Block 0006 [ 96]: 7dfe5b4fa339d915 -Block 0006 [ 97]: 7965a0eafe0305bc -Block 0006 [ 98]: 7e734063819b7ca5 -Block 0006 [ 99]: 87005587175739ed -Block 0006 [100]: 985b7218bbd1e0df -Block 0006 [101]: a5c4aaad731e9e52 -Block 0006 [102]: 94f8576241e6a93e -Block 0006 [103]: e76117d948600c60 -Block 0006 [104]: 5fe8da4b25406121 -Block 0006 [105]: 14ee0178a8daba6b -Block 0006 [106]: 53226d7eab9099d9 -Block 0006 [107]: 9e6a09e237cff17f -Block 0006 [108]: bc7879f71ef775a9 -Block 0006 [109]: 04e5eb3b91e265d2 -Block 0006 [110]: dcfc2adf3b5553b6 -Block 0006 [111]: 7e4063b07d077a2f -Block 0006 [112]: fee54d9875bceac1 -Block 0006 [113]: c100d4e93dd98cca -Block 0006 [114]: 89f574f2e045e6ee -Block 0006 [115]: 03ed7984ab4ab699 -Block 0006 [116]: edb7c889baea7dce -Block 0006 [117]: 6b8250649f5b1668 -Block 0006 [118]: d41c7ee32201babf -Block 0006 [119]: d2922482c1e04578 -Block 0006 [120]: fcf0c6413ae4722b -Block 0006 [121]: b3b784a4c136f5c6 -Block 0006 [122]: 24e170a067979de6 -Block 0006 [123]: 4ef268adf91d6949 -Block 0006 [124]: 491e4adbc870f18b -Block 0006 [125]: e71f2fb4840b8c21 -Block 0006 [126]: bb0f5afaa1613284 -Block 0006 [127]: 4dd594b381688dc7 -Block 0007 [ 0]: 02054cdda9ac52e9 -Block 0007 [ 1]: 74c8c9e85b5e02f4 -Block 0007 [ 2]: 792716474cd648e9 -Block 0007 [ 3]: f6823e73b2025209 -Block 0007 [ 4]: abc2801a85f23f90 -Block 0007 [ 5]: fd6a18603579e622 -Block 0007 [ 6]: 0796b3f23d0f0cbb -Block 0007 [ 7]: af154a25aeb75835 -Block 0007 [ 8]: 172767f4ab83b39c -Block 0007 [ 9]: 1820af02c9f8c438 -Block 0007 [ 10]: 71b304192b469ba4 -Block 0007 [ 11]: 0733625d1f0b07ae -Block 0007 [ 12]: 5f3fb92e7b81e28f -Block 0007 [ 13]: 7f51f85692c08278 -Block 0007 [ 14]: e04d383c8d9e3cb4 -Block 0007 [ 15]: a808e2901eda05e8 -Block 0007 [ 16]: 95d18dffcd956e3f -Block 0007 [ 17]: c495bf92cc1eb2c3 -Block 0007 [ 18]: e4b5068e15c6237d -Block 0007 [ 19]: 038ebdd28a2f5e1f -Block 0007 [ 20]: e8a78fec794b374f -Block 0007 [ 21]: 49cf5128ad356c6c -Block 0007 [ 22]: 3a81503f52bb1d32 -Block 0007 [ 23]: b5e7a0c5e054f041 -Block 0007 [ 24]: f03d87e4f633fea8 -Block 0007 [ 25]: 35c905a45ed6f147 -Block 0007 [ 26]: 778b682178f753b0 -Block 0007 [ 27]: c11bd927fa19d8bf -Block 0007 [ 28]: 6f55f1e70164debb -Block 0007 [ 29]: 5b25d7d0ebae2719 -Block 0007 [ 30]: 4334711eeb4e61f0 -Block 0007 [ 31]: 8f25b6e85f26f5a5 -Block 0007 [ 32]: 99a59b735700c91c -Block 0007 [ 33]: ecbde758ee3d44a9 -Block 0007 [ 34]: 8beb7e8b0796896e -Block 0007 [ 35]: c776e92c6eace265 -Block 0007 [ 36]: 7b482447cdbb7923 -Block 0007 [ 37]: d066cf62481bd85d -Block 0007 [ 38]: 3760107b555f164d -Block 0007 [ 39]: bd2ed42b3469118a -Block 0007 [ 40]: b3b93ec089fa9570 -Block 0007 [ 41]: a3b83ac726cebc90 -Block 0007 [ 42]: f5a5f6ba7520d94c -Block 0007 [ 43]: 669acf3b099d0044 -Block 0007 [ 44]: 0c17fbece76f2cdb -Block 0007 [ 45]: 20c269cc5957f277 -Block 0007 [ 46]: 1cedb1bdfe8fd7b5 -Block 0007 [ 47]: 668576fe733972f0 -Block 0007 [ 48]: eb8ecef9caa76a30 -Block 0007 [ 49]: 545f45145682a434 -Block 0007 [ 50]: fd6d43e9e4053104 -Block 0007 [ 51]: 191be545a61fa7f5 -Block 0007 [ 52]: f55a49467b6d56bc -Block 0007 [ 53]: d16adb69a1271e48 -Block 0007 [ 54]: 135a7ad9f44cf075 -Block 0007 [ 55]: a6ee7d2c5de58c94 -Block 0007 [ 56]: 30629407d7baf044 -Block 0007 [ 57]: fd609a1f539a7ded -Block 0007 [ 58]: b2bd283aa38b095c -Block 0007 [ 59]: 63d7c3ebc0d760eb -Block 0007 [ 60]: f5985ffcbfdd3499 -Block 0007 [ 61]: aaf55572963fba6e -Block 0007 [ 62]: 3c9832957188c10e -Block 0007 [ 63]: c68df92e57b25f71 -Block 0007 [ 64]: 919fba1782add59b -Block 0007 [ 65]: 0af703d15bdafd30 -Block 0007 [ 66]: 56af9ba05fb32915 -Block 0007 [ 67]: 69504d9eef0b609e -Block 0007 [ 68]: 2c56d65a473495d7 -Block 0007 [ 69]: b799808d50d74b7e -Block 0007 [ 70]: 40face41b3f9b58b -Block 0007 [ 71]: 68f24c272359346d -Block 0007 [ 72]: 43371f1865cf7c3d -Block 0007 [ 73]: 94bbb9681e012ca5 -Block 0007 [ 74]: 99cf6f595e669bcd -Block 0007 [ 75]: b4eb393b2032bf37 -Block 0007 [ 76]: 2a609a846f0b45d1 -Block 0007 [ 77]: 00d3614b72e4e9e4 -Block 0007 [ 78]: 687d33b89c4af490 -Block 0007 [ 79]: 03801094658884a6 -Block 0007 [ 80]: aeac1d0951d7ac95 -Block 0007 [ 81]: 515de863fd8c5ae2 -Block 0007 [ 82]: e0b567e683019ee6 -Block 0007 [ 83]: 158ad01affa22539 -Block 0007 [ 84]: 80198398eadd3d4d -Block 0007 [ 85]: 30d23f755c4bdd55 -Block 0007 [ 86]: 707473e977a255b8 -Block 0007 [ 87]: ab3bf25f1921ebc9 -Block 0007 [ 88]: 87714bfba3c105bc -Block 0007 [ 89]: 07801fab91f7ead0 -Block 0007 [ 90]: e7a2ab5b12011c2e -Block 0007 [ 91]: 985187b1fe217d3a -Block 0007 [ 92]: 3c06fe12f45194c0 -Block 0007 [ 93]: 906b2d6ae3e5d42a -Block 0007 [ 94]: 7b4da55d949793fa -Block 0007 [ 95]: 496565ae57757dc3 -Block 0007 [ 96]: 2464c2638aa0dae9 -Block 0007 [ 97]: be41ced962625b10 -Block 0007 [ 98]: 1c0785d7518b9398 -Block 0007 [ 99]: 5621b3bde815f5fc -Block 0007 [100]: a24047d86c344073 -Block 0007 [101]: 440ec2f91f946f60 -Block 0007 [102]: c96a0decfc8fa5f7 -Block 0007 [103]: d1b64811d448ba49 -Block 0007 [104]: 48cb56cbd461f112 -Block 0007 [105]: 418a7ecf1da71421 -Block 0007 [106]: 0fc7bb85c55dde6f -Block 0007 [107]: 3e69bb8a9a749ec4 -Block 0007 [108]: 2cd764dd85558988 -Block 0007 [109]: 086a9a71dcc47efc -Block 0007 [110]: 8c633ed6465c6cb1 -Block 0007 [111]: aef902ed6cf036c7 -Block 0007 [112]: 435cd6832c6e226f -Block 0007 [113]: cf6da02414411184 -Block 0007 [114]: 3ac15ddfa8ccaf45 -Block 0007 [115]: 9bedcfc4d61d8144 -Block 0007 [116]: 9cfdb2843dec6e4c -Block 0007 [117]: 3789d674e283e722 -Block 0007 [118]: 7df19105095e5bba -Block 0007 [119]: 4838d5ba7017a5f2 -Block 0007 [120]: ecde583dff0051d7 -Block 0007 [121]: 39956b97b9fa4c14 -Block 0007 [122]: 5ea6bf784ecb1b42 -Block 0007 [123]: 198f7d4505405412 -Block 0007 [124]: 01bcf2435403b8f6 -Block 0007 [125]: e448fd363f0771ea -Block 0007 [126]: f2398b53dd97db61 -Block 0007 [127]: 54ff44b6be8d86a7 -Block 0008 [ 0]: 00ddd74226547ee8 -Block 0008 [ 1]: 24159266aff1280e -Block 0008 [ 2]: 8eadb32d57990290 -Block 0008 [ 3]: cf1b40ac0c8a5c8c -Block 0008 [ 4]: b7cf03c731e5b992 -Block 0008 [ 5]: f2dac041171f38bb -Block 0008 [ 6]: 69076dcccfb46ea3 -Block 0008 [ 7]: 5651dbed1100bfde -Block 0008 [ 8]: 53dceb417238cbc1 -Block 0008 [ 9]: 0b0744892b164cf3 -Block 0008 [ 10]: e35a3105fb950399 -Block 0008 [ 11]: 0dd91d7e71c2183e -Block 0008 [ 12]: 612d867f2effaab8 -Block 0008 [ 13]: 3080d3b0f71bb081 -Block 0008 [ 14]: 6d2bd684c1b15ede -Block 0008 [ 15]: 38420dfdc7bde3a5 -Block 0008 [ 16]: 509a5aec595434ae -Block 0008 [ 17]: 8fe411bf400f0853 -Block 0008 [ 18]: a4e7ef66ee576adf -Block 0008 [ 19]: f95c6ca90cfe8c0d -Block 0008 [ 20]: b8293e4db0f1ab2c -Block 0008 [ 21]: 92415d9ceeb88885 -Block 0008 [ 22]: 33201e020f8f673d -Block 0008 [ 23]: 225de785d2ad17bb -Block 0008 [ 24]: eb51e2cddb968254 -Block 0008 [ 25]: abcedb7f11da17d2 -Block 0008 [ 26]: 048be2d856275271 -Block 0008 [ 27]: 81c4b42d8e334881 -Block 0008 [ 28]: 20f23fba874aa617 -Block 0008 [ 29]: 554d738888d0c78a -Block 0008 [ 30]: 1e04ac9bdd6e31f2 -Block 0008 [ 31]: aa1eb35d3815a484 -Block 0008 [ 32]: 462c5af1abcc9cff -Block 0008 [ 33]: 57e47b4ef3f56bce -Block 0008 [ 34]: 91fd0882fb9f93ee -Block 0008 [ 35]: 75d4d9890062a2ae -Block 0008 [ 36]: 35d3aaaecdca0d36 -Block 0008 [ 37]: b20cb6d0461d42e2 -Block 0008 [ 38]: ea6a187ef41badd5 -Block 0008 [ 39]: 3a437dccfcb3b3f7 -Block 0008 [ 40]: ef7f28c8865b58ec -Block 0008 [ 41]: 43f1f573a75017a7 -Block 0008 [ 42]: f5124a1edbdf4cb9 -Block 0008 [ 43]: db8b81c93502b6fc -Block 0008 [ 44]: 19efaa7f870b165f -Block 0008 [ 45]: bdacffd1774061b1 -Block 0008 [ 46]: cbf97601989fc422 -Block 0008 [ 47]: dbdf79c7cb4e49e0 -Block 0008 [ 48]: 42565c17ab4572aa -Block 0008 [ 49]: 5a9516fed8a4eea5 -Block 0008 [ 50]: 40ad887a8ab8b545 -Block 0008 [ 51]: 4ae0d7ad030b2fb1 -Block 0008 [ 52]: dab076f1a9cf3cc2 -Block 0008 [ 53]: d0b1f467452016e2 -Block 0008 [ 54]: 8b10a4bb5d001dd5 -Block 0008 [ 55]: 9d44cb7201468d39 -Block 0008 [ 56]: fa24a3bebbb521eb -Block 0008 [ 57]: 144327403d115894 -Block 0008 [ 58]: ee982acd08e54537 -Block 0008 [ 59]: acc789d4f7e62797 -Block 0008 [ 60]: eae6f48d56b37821 -Block 0008 [ 61]: 2bff8aa7a8499a95 -Block 0008 [ 62]: 257e7a09e4176354 -Block 0008 [ 63]: dbb72295972e9ac9 -Block 0008 [ 64]: ea0b8135e233bcb3 -Block 0008 [ 65]: ff9c535a76808ac3 -Block 0008 [ 66]: 1c703b1b4c728f8c -Block 0008 [ 67]: 4ae21bc7002f7893 -Block 0008 [ 68]: c40b1fd090b0e033 -Block 0008 [ 69]: c35fc5717bbaffba -Block 0008 [ 70]: 0868adcb35c16d4a -Block 0008 [ 71]: cd17ecfca6479f03 -Block 0008 [ 72]: 46648f40bd72d80d -Block 0008 [ 73]: 77f2fad0fc87b479 -Block 0008 [ 74]: 31f2b2ba0b7ccfa5 -Block 0008 [ 75]: 5b85cd1c91ee5f74 -Block 0008 [ 76]: 0fec78845097ce3f -Block 0008 [ 77]: 088adaac9e7dc5cd -Block 0008 [ 78]: dccc6c3a857a4ba9 -Block 0008 [ 79]: 5a19f83b98b444cf -Block 0008 [ 80]: 9b5124cfed3ce26f -Block 0008 [ 81]: 38ddc9403b6d081d -Block 0008 [ 82]: da528afe93f665ef -Block 0008 [ 83]: 68845aca943ea5ea -Block 0008 [ 84]: 64847160c5dcc4ef -Block 0008 [ 85]: 8b4bee768926418c -Block 0008 [ 86]: 9cff834458860832 -Block 0008 [ 87]: 29193c32427c8a8b -Block 0008 [ 88]: 033acac495ed117e -Block 0008 [ 89]: 4a4172c01aef8ea6 -Block 0008 [ 90]: e14551ad4f04ca04 -Block 0008 [ 91]: 2da9c7411b038405 -Block 0008 [ 92]: fe6fdb9a710ad45e -Block 0008 [ 93]: ad63b771789e3e5c -Block 0008 [ 94]: 8ac32bef70c99599 -Block 0008 [ 95]: 6f507ae99b983a6e -Block 0008 [ 96]: ba5628d85986c214 -Block 0008 [ 97]: 725d58c7f6c6c1ce -Block 0008 [ 98]: 1a8214c75a42dba6 -Block 0008 [ 99]: 545d28f9455fc511 -Block 0008 [100]: 7b64a2e365a1d275 -Block 0008 [101]: 63fe760a1c262dd4 -Block 0008 [102]: c0b03d9d02ad5fcd -Block 0008 [103]: 901db491ff2f9d56 -Block 0008 [104]: d63c43b99276870d -Block 0008 [105]: 4cea375449b08481 -Block 0008 [106]: 8f32d81540fbca4a -Block 0008 [107]: f70a8336ac731f08 -Block 0008 [108]: 20508e588bde2fea -Block 0008 [109]: fa33830f6aca3567 -Block 0008 [110]: 51467149c89a20df -Block 0008 [111]: 2a33e0af1afb0909 -Block 0008 [112]: 44b0dd9cf07a759f -Block 0008 [113]: 4ae0823ba2849505 -Block 0008 [114]: 0e7000eba4682c1b -Block 0008 [115]: 0601a32520c29e86 -Block 0008 [116]: 1acef2bfed1a2490 -Block 0008 [117]: f56433c4b77ba5fd -Block 0008 [118]: 249169f9ebac36b3 -Block 0008 [119]: 3dff8073c16c9ddd -Block 0008 [120]: 2d3fa1047c8481af -Block 0008 [121]: a8da96ca08141a8b -Block 0008 [122]: 93da560820064f1e -Block 0008 [123]: 8394940dc494de93 -Block 0008 [124]: af1b5d8150fe7d3b -Block 0008 [125]: 9e57bfe48024e642 -Block 0008 [126]: 84193e6ca6daccc5 -Block 0008 [127]: 825d98f10fbae8e5 -Block 0009 [ 0]: 6116f146783633c9 -Block 0009 [ 1]: 8935acf007f9a42f -Block 0009 [ 2]: 363327a94a365cda -Block 0009 [ 3]: 40145736eab8bdcf -Block 0009 [ 4]: 63a805bfdac5881a -Block 0009 [ 5]: 56469b1c1503b144 -Block 0009 [ 6]: a68f19d26e9641a4 -Block 0009 [ 7]: 9a2ad1cfa5a780d2 -Block 0009 [ 8]: 94314d76f0e5e4cf -Block 0009 [ 9]: 4f53793011ffa6c0 -Block 0009 [ 10]: b29d9b3204ffb826 -Block 0009 [ 11]: 7f610c5d2a235cde -Block 0009 [ 12]: 192f89d97731c461 -Block 0009 [ 13]: 8fe626843baebd22 -Block 0009 [ 14]: 89880c978f68a70c -Block 0009 [ 15]: b6ae708839d63a02 -Block 0009 [ 16]: 3e693ff12084a6b0 -Block 0009 [ 17]: 171f108f0848032d -Block 0009 [ 18]: 6a0f5bafd20043f4 -Block 0009 [ 19]: 4b6de51ba2a9d7cf -Block 0009 [ 20]: 6895a0816b97bceb -Block 0009 [ 21]: 9abf256ba172eb74 -Block 0009 [ 22]: 88bf934006c0f404 -Block 0009 [ 23]: 23d290612e4455a3 -Block 0009 [ 24]: 57f6883f4db1f04d -Block 0009 [ 25]: 9988574cb4c3bc93 -Block 0009 [ 26]: 032ae161e8a24562 -Block 0009 [ 27]: 61b10a42786c20cb -Block 0009 [ 28]: 78c77004760ee74d -Block 0009 [ 29]: 8480f5a9ff0cad99 -Block 0009 [ 30]: 351f1f1f476c01a6 -Block 0009 [ 31]: 53020a75e59b9f0a -Block 0009 [ 32]: 06bd0455ae0f3a87 -Block 0009 [ 33]: 512dde0965bc4a52 -Block 0009 [ 34]: e4999a84b0df4686 -Block 0009 [ 35]: 1a9c16b4710e9310 -Block 0009 [ 36]: cc499906b76f2b9b -Block 0009 [ 37]: f983199dfc547586 -Block 0009 [ 38]: 10cd35c318c8b898 -Block 0009 [ 39]: fe08ee0f007d4bd5 -Block 0009 [ 40]: 50d7d98ac62b0ecc -Block 0009 [ 41]: 04f80f9b011117e6 -Block 0009 [ 42]: d99f3a076e400edd -Block 0009 [ 43]: d5bf5a4b773344e9 -Block 0009 [ 44]: be8168893cd26b55 -Block 0009 [ 45]: 1952cf7c98b3134f -Block 0009 [ 46]: a918b9de5d2e8664 -Block 0009 [ 47]: 853ccc7da2424092 -Block 0009 [ 48]: 2ec713fbf107b8fb -Block 0009 [ 49]: 2d119d176cc4ccf6 -Block 0009 [ 50]: ad257df871b099ce -Block 0009 [ 51]: 33b8904b2ca92680 -Block 0009 [ 52]: bbf1814327b90017 -Block 0009 [ 53]: 2fcfe327f39b8b1c -Block 0009 [ 54]: 5986f6465a96540d -Block 0009 [ 55]: a252fa4d75a1d09e -Block 0009 [ 56]: a8042efac888810b -Block 0009 [ 57]: 4d62fbc776a24f76 -Block 0009 [ 58]: d1066a2a4ec27d26 -Block 0009 [ 59]: 3420e65ecf597b18 -Block 0009 [ 60]: ff251e6526185035 -Block 0009 [ 61]: 6f19e43f1628cac9 -Block 0009 [ 62]: b24d9869cf6c2f90 -Block 0009 [ 63]: 6e37a79565716f96 -Block 0009 [ 64]: 3d94a95786eb2014 -Block 0009 [ 65]: 73086d129e94e92d -Block 0009 [ 66]: cbee49880781e87b -Block 0009 [ 67]: 61371356af82274f -Block 0009 [ 68]: 29b8c37cd53ad57a -Block 0009 [ 69]: 324733f2b5cdfa62 -Block 0009 [ 70]: ea13180259aa70a4 -Block 0009 [ 71]: e505a2f059c46d54 -Block 0009 [ 72]: 8110a82788ecaab9 -Block 0009 [ 73]: 2f85dc978a4929d3 -Block 0009 [ 74]: 9f1d14a079a20fcb -Block 0009 [ 75]: 54d18ce87ef37756 -Block 0009 [ 76]: f708cb5851c5d102 -Block 0009 [ 77]: 8fa3eb7e87e6619c -Block 0009 [ 78]: f93fd1f75756e8d4 -Block 0009 [ 79]: a6f3b595905af386 -Block 0009 [ 80]: 25efb720353451c1 -Block 0009 [ 81]: 80f8094683879e59 -Block 0009 [ 82]: 072ff09d395c9640 -Block 0009 [ 83]: f2f63b7020693ae5 -Block 0009 [ 84]: 6a42ab0c39e29403 -Block 0009 [ 85]: 27a9334f38dd7bad -Block 0009 [ 86]: 4fd11b325797f410 -Block 0009 [ 87]: cc2020b56cd3c7a4 -Block 0009 [ 88]: c54140df15111cd0 -Block 0009 [ 89]: a8a2482dadd5ff2c -Block 0009 [ 90]: 7f9d62d9890db82b -Block 0009 [ 91]: 4c3bb8918fef6957 -Block 0009 [ 92]: 739da007f3401e45 -Block 0009 [ 93]: 014441b4fc664f16 -Block 0009 [ 94]: ae2d8cdbec8a5b61 -Block 0009 [ 95]: 2546bd681965ce57 -Block 0009 [ 96]: c8dd35fbba2daeaa -Block 0009 [ 97]: 00ecc682b149ffa5 -Block 0009 [ 98]: 761a96f6d52275d3 -Block 0009 [ 99]: c881827304e78734 -Block 0009 [100]: 2a9dd8664f879242 -Block 0009 [101]: 715b472bf254b68d -Block 0009 [102]: 6ceff5a995f00cec -Block 0009 [103]: ec55ef14d6b8a520 -Block 0009 [104]: d314bc12ccb8b902 -Block 0009 [105]: 9b863e7e00226537 -Block 0009 [106]: c52fbf34d7e75d59 -Block 0009 [107]: e849c03be5b2da05 -Block 0009 [108]: b38e0205f0528189 -Block 0009 [109]: 7c97db54a80221f9 -Block 0009 [110]: c546349847005e72 -Block 0009 [111]: 376ec10d06843bda -Block 0009 [112]: c5cbd62cf9e43405 -Block 0009 [113]: e6cc6877ce17773f -Block 0009 [114]: 7613897fcd047e34 -Block 0009 [115]: ec48eae7984efc9c -Block 0009 [116]: eaa7f881f7f7c89c -Block 0009 [117]: 256fc2ebe98ef0da -Block 0009 [118]: 29dd9bd56a02a843 -Block 0009 [119]: f1d5b4e674d8c52f -Block 0009 [120]: fdc4eac9b3d350ef -Block 0009 [121]: 7261f2450e8f66a5 -Block 0009 [122]: efad51924a77e9d3 -Block 0009 [123]: fa96bf4dcb96faac -Block 0009 [124]: 4f6330cdbb2cc9b8 -Block 0009 [125]: 8da60af9c7d48e56 -Block 0009 [126]: ee4d25f5d0731762 -Block 0009 [127]: b034c742e982a237 -Block 0010 [ 0]: 1581550dad35e99a -Block 0010 [ 1]: 05d9fb5dd139072e -Block 0010 [ 2]: 4a750673a7a39cd8 -Block 0010 [ 3]: 5dd25947128cb63e -Block 0010 [ 4]: 3c70a199d2289f50 -Block 0010 [ 5]: cb5b05d366cac5cf -Block 0010 [ 6]: 6ec9d18e4f699e96 -Block 0010 [ 7]: 7ef94df9822d067e -Block 0010 [ 8]: cc0154b55089ed53 -Block 0010 [ 9]: 6cdff108c72c740b -Block 0010 [ 10]: 1922a63692a7ad69 -Block 0010 [ 11]: c5e57600387ec72d -Block 0010 [ 12]: ba8606b14cbf7795 -Block 0010 [ 13]: e8149dc812f3f495 -Block 0010 [ 14]: 1b7cd4786cdb1489 -Block 0010 [ 15]: 54b072f64b65506f -Block 0010 [ 16]: e468892cabab73b4 -Block 0010 [ 17]: 8c23f8b762b983d1 -Block 0010 [ 18]: 3379165a16599e67 -Block 0010 [ 19]: 251d4a02152ab9cd -Block 0010 [ 20]: 3ae70d9f24fd7f7b -Block 0010 [ 21]: 9031d6c71cc1df7a -Block 0010 [ 22]: 74ee35696178dbb1 -Block 0010 [ 23]: 74e72d75ca52359b -Block 0010 [ 24]: a084ac9759f74dba -Block 0010 [ 25]: 9023bbb7b6dad75f -Block 0010 [ 26]: 2cd8b7a9d6a0d0bf -Block 0010 [ 27]: 43632bfc53fef602 -Block 0010 [ 28]: 932c3ce043b9d5a5 -Block 0010 [ 29]: dd424acccc7f3426 -Block 0010 [ 30]: 6a00dafeb648d626 -Block 0010 [ 31]: 559e29b3670ae181 -Block 0010 [ 32]: 7cdb59d67e7b0847 -Block 0010 [ 33]: 9112fc484c1856ef -Block 0010 [ 34]: 6330d32dac31fc9c -Block 0010 [ 35]: f4cc8b585269d45b -Block 0010 [ 36]: 3ed4bad64f8d15b6 -Block 0010 [ 37]: 7d28923e599082d3 -Block 0010 [ 38]: 489779a0484a8a87 -Block 0010 [ 39]: 29f5ad3ea2de0e03 -Block 0010 [ 40]: 9e71cab15323b5ec -Block 0010 [ 41]: c778e291423650ee -Block 0010 [ 42]: d9fab25b79472568 -Block 0010 [ 43]: be31604f2b51db18 -Block 0010 [ 44]: 2c6b307dcd80a198 -Block 0010 [ 45]: dc4972e5fa1a6b8e -Block 0010 [ 46]: 1c9c9151b237a79f -Block 0010 [ 47]: d296b9c11e54dc49 -Block 0010 [ 48]: 061a87b483254066 -Block 0010 [ 49]: 9181748c91e61093 -Block 0010 [ 50]: 7f0245daa712fca3 -Block 0010 [ 51]: c31cd3af5e3c325a -Block 0010 [ 52]: 883f4f752fc1ed6a -Block 0010 [ 53]: 8e8a6b2ad2e9f78b -Block 0010 [ 54]: a6828c7b9ae69793 -Block 0010 [ 55]: 5fd21d7e09c07e76 -Block 0010 [ 56]: d46460dc13aea5d6 -Block 0010 [ 57]: 7837284a5f7fa560 -Block 0010 [ 58]: a67d348980d25e9e -Block 0010 [ 59]: 7105db7bc3a185eb -Block 0010 [ 60]: b640219f27d0a87d -Block 0010 [ 61]: 1cdbf6e6bcb96342 -Block 0010 [ 62]: 518a9db055b4caf6 -Block 0010 [ 63]: 6d9580534ef590f5 -Block 0010 [ 64]: c62f771deb9c4d44 -Block 0010 [ 65]: 86500c646cfe0cb7 -Block 0010 [ 66]: c5b986115fada57a -Block 0010 [ 67]: 8754d87c1c255f00 -Block 0010 [ 68]: a007aff8deb8ce6e -Block 0010 [ 69]: 19c17a24d62c3670 -Block 0010 [ 70]: 53051a43f12bcbd5 -Block 0010 [ 71]: 347d012a37ca3b7d -Block 0010 [ 72]: 0f26ed5326fe4a2f -Block 0010 [ 73]: 48d50db051744ec6 -Block 0010 [ 74]: e47219b32d675659 -Block 0010 [ 75]: 494134100b4fb7b6 -Block 0010 [ 76]: cd4e658c5c461b92 -Block 0010 [ 77]: 869f79190a5435eb -Block 0010 [ 78]: 935b606d09833496 -Block 0010 [ 79]: df9e265f08a00697 -Block 0010 [ 80]: c8fd59cd5b8a8b0e -Block 0010 [ 81]: 81281454bf7a1b4a -Block 0010 [ 82]: f0e94eefcdd74473 -Block 0010 [ 83]: 557c0ee5cfadfaed -Block 0010 [ 84]: c1e76d9b70f5085c -Block 0010 [ 85]: f326a4044566e114 -Block 0010 [ 86]: 2a3487f29b575895 -Block 0010 [ 87]: 47508a14bd6769ce -Block 0010 [ 88]: 161645c30267ebf9 -Block 0010 [ 89]: be3385c7c63566a0 -Block 0010 [ 90]: 52efbda144902dba -Block 0010 [ 91]: bd3ef2a4b859e30a -Block 0010 [ 92]: edd3aeea5b7b0d76 -Block 0010 [ 93]: f3742851032d0706 -Block 0010 [ 94]: 065c8a5ca189571a -Block 0010 [ 95]: 38073ab2b43d4fc5 -Block 0010 [ 96]: fff19498f099d9d8 -Block 0010 [ 97]: 76eb0ebbbfa4b030 -Block 0010 [ 98]: 2b467d2766ae5093 -Block 0010 [ 99]: e0d0fcf033eb16e2 -Block 0010 [100]: 455941faca082d2e -Block 0010 [101]: eb0ebc8001c0ee88 -Block 0010 [102]: 014ef8e92fdf1609 -Block 0010 [103]: a45754ecab977f21 -Block 0010 [104]: 8851e7729875e24c -Block 0010 [105]: 24eb03f9f64bd274 -Block 0010 [106]: 0ae3cce50b82f30b -Block 0010 [107]: 7d568c148cb4c4d8 -Block 0010 [108]: 29c6b592b88c18b3 -Block 0010 [109]: e6e17ec5b18be1d2 -Block 0010 [110]: f9454e53c4c0d899 -Block 0010 [111]: bca482e99dbc8b54 -Block 0010 [112]: bf43d5b658c4d900 -Block 0010 [113]: c1a5fa13cfdb425e -Block 0010 [114]: 514f21e92dd1bb69 -Block 0010 [115]: 605acc73c7d5d8bb -Block 0010 [116]: bb8057c50072ab70 -Block 0010 [117]: 1f9ffdab48f0ca58 -Block 0010 [118]: d535f7d811f5b7a7 -Block 0010 [119]: 98bd18ecc347eefc -Block 0010 [120]: 1e69ba6f3a7f4fd0 -Block 0010 [121]: e1e2a7af5e7e361a -Block 0010 [122]: 3df786477ee6f7f7 -Block 0010 [123]: c2f3d9ea7feb0ec3 -Block 0010 [124]: 50bd7d5499aaca90 -Block 0010 [125]: e38fb4acdcf1b6ac -Block 0010 [126]: 4f92cefd6ebb0794 -Block 0010 [127]: f275a4842c740714 -Block 0011 [ 0]: f9d07509503819bd -Block 0011 [ 1]: 7ce6341ac752d873 -Block 0011 [ 2]: cf4550cbedff3a5e -Block 0011 [ 3]: 8768db6544d9c977 -Block 0011 [ 4]: 4fbd5c2b0a7036c1 -Block 0011 [ 5]: ee474ae73d0e3156 -Block 0011 [ 6]: 478b517b17c70aee -Block 0011 [ 7]: d67f67db907587b7 -Block 0011 [ 8]: 98623377f34cc9fa -Block 0011 [ 9]: 517221fb649687ff -Block 0011 [ 10]: 035cc4b9754f3cea -Block 0011 [ 11]: d172d1d16e842534 -Block 0011 [ 12]: 126ba6d66dc03c10 -Block 0011 [ 13]: ef2bff64caeafb53 -Block 0011 [ 14]: a8d87ec45b71adef -Block 0011 [ 15]: c0fc912f4cb97dbb -Block 0011 [ 16]: d461a1fe274d00ea -Block 0011 [ 17]: b3c91d2c2b561f50 -Block 0011 [ 18]: d9d15e51315c1662 -Block 0011 [ 19]: 237314480e44d2f6 -Block 0011 [ 20]: cd1666524d9908be -Block 0011 [ 21]: 399c98b7b390fc51 -Block 0011 [ 22]: 711e961e04711c5a -Block 0011 [ 23]: 4039879c114b23c1 -Block 0011 [ 24]: a5fbd0eb93a342fe -Block 0011 [ 25]: 3f859f3ddc5e8819 -Block 0011 [ 26]: 93dcfe098f9de5aa -Block 0011 [ 27]: f3d3afe76a718bd6 -Block 0011 [ 28]: 752df2d429465e81 -Block 0011 [ 29]: bd4a4f26d19791f4 -Block 0011 [ 30]: 4c57242e5f0b55aa -Block 0011 [ 31]: 01275075e4f8a4e1 -Block 0011 [ 32]: 3a37199950dce330 -Block 0011 [ 33]: 2e41aafd16cf1b05 -Block 0011 [ 34]: 92243d071386ab20 -Block 0011 [ 35]: d869ba9a984d4bde -Block 0011 [ 36]: 6be491e7a3be8d9f -Block 0011 [ 37]: acef9890cec1a375 -Block 0011 [ 38]: e232f0287c136279 -Block 0011 [ 39]: d95325c0d7ab9a82 -Block 0011 [ 40]: 90d8b5b0c8c6afa1 -Block 0011 [ 41]: 5bb67f83bf5f1a83 -Block 0011 [ 42]: 75affbe23953fd5b -Block 0011 [ 43]: d43a2db1ac58dec5 -Block 0011 [ 44]: 0af8868fbcd3ebe0 -Block 0011 [ 45]: 6f0cf6609fbc2a32 -Block 0011 [ 46]: 1b4a24795691fda7 -Block 0011 [ 47]: e6e032b6720d0903 -Block 0011 [ 48]: 8b4a5e1ac40c6d53 -Block 0011 [ 49]: f09c4457e757d976 -Block 0011 [ 50]: d5eb3b17dbbf75e2 -Block 0011 [ 51]: 74ee41b96ce4915d -Block 0011 [ 52]: f5a6c444f6c7dab4 -Block 0011 [ 53]: a6dd992782c12a9b -Block 0011 [ 54]: 82ab2f6c6abd9c4b -Block 0011 [ 55]: 24dbb03795c538e2 -Block 0011 [ 56]: b703785f0aa21442 -Block 0011 [ 57]: 1911ce525bff5d72 -Block 0011 [ 58]: edc77bb56a4ab0c1 -Block 0011 [ 59]: 84ad7caa4e66e14c -Block 0011 [ 60]: 660aa6a2745246a4 -Block 0011 [ 61]: d0531eb0c94d2835 -Block 0011 [ 62]: e07ea2345379ad0d -Block 0011 [ 63]: 499700d903192292 -Block 0011 [ 64]: 595e9750f70bbf3f -Block 0011 [ 65]: 3ec2b0d5546008ce -Block 0011 [ 66]: 1e9afbafb3fe7892 -Block 0011 [ 67]: 051889a2e3b3c12e -Block 0011 [ 68]: a47cf414a9c2e3ee -Block 0011 [ 69]: ad75a5ec9388091b -Block 0011 [ 70]: e6c48f94041c6d16 -Block 0011 [ 71]: ac4d0e7ad884428c -Block 0011 [ 72]: 222e82f8af709648 -Block 0011 [ 73]: 33b376379cc8d21e -Block 0011 [ 74]: 97ed5f80b3ab3a65 -Block 0011 [ 75]: ca903f8faa0a9f3a -Block 0011 [ 76]: 766d650d4f88ad10 -Block 0011 [ 77]: 49004a3e3d5a0cec -Block 0011 [ 78]: 80fe987f05769c43 -Block 0011 [ 79]: e7ab3340c8480b4f -Block 0011 [ 80]: eb4b06163cbd2966 -Block 0011 [ 81]: 18256d0b24389063 -Block 0011 [ 82]: c39c1550f3fda74e -Block 0011 [ 83]: 254f94232ffc456f -Block 0011 [ 84]: 7a07379880f898c1 -Block 0011 [ 85]: 10bcbb1e56036b64 -Block 0011 [ 86]: aa13e477412afb1b -Block 0011 [ 87]: c9efe5bd72b75944 -Block 0011 [ 88]: e721be1923769258 -Block 0011 [ 89]: 2d85f117a10321c9 -Block 0011 [ 90]: 6830c4cbc6b34147 -Block 0011 [ 91]: 407cb2e8b2e35046 -Block 0011 [ 92]: 610d429a7aa7bc01 -Block 0011 [ 93]: a87b6f3066bd4f95 -Block 0011 [ 94]: 15c058703f06b644 -Block 0011 [ 95]: 4e3bdd301ec7a0f1 -Block 0011 [ 96]: 5e726da6a1338bba -Block 0011 [ 97]: ce3bc3a123db3655 -Block 0011 [ 98]: 77225e3ff6f31055 -Block 0011 [ 99]: 0656971d13d67e7c -Block 0011 [100]: 7c05554b1068393c -Block 0011 [101]: 4810197934d77904 -Block 0011 [102]: 349cc06be7997ef9 -Block 0011 [103]: d00b3ded2d522f5e -Block 0011 [104]: 227acc01f569ca9e -Block 0011 [105]: 977c0a71d22f2cd7 -Block 0011 [106]: 8017ecfa54e3d7a8 -Block 0011 [107]: 3d1aaf609a4a527b -Block 0011 [108]: a62db92347317e92 -Block 0011 [109]: 063b9b695ce07f42 -Block 0011 [110]: 7e6c285a42777ae4 -Block 0011 [111]: 57c8f2a7a0fb2918 -Block 0011 [112]: 920ee3f0d6bc0111 -Block 0011 [113]: 9c3aa6dad4a6741c -Block 0011 [114]: 858bcf22afea1c1f -Block 0011 [115]: efde8bec8729ea86 -Block 0011 [116]: fb858be9ffe79d1f -Block 0011 [117]: df4d290f94188e6b -Block 0011 [118]: d15a924c44977496 -Block 0011 [119]: 96b0d68c74b98b21 -Block 0011 [120]: 45123713a09a64ce -Block 0011 [121]: 7adb89ae11063d09 -Block 0011 [122]: 3957bcb1cadfb4db -Block 0011 [123]: 86e2fb643a1f1b25 -Block 0011 [124]: 70ccb8e27170d6d2 -Block 0011 [125]: 72b9f822beed7313 -Block 0011 [126]: d3a930c21c4a2956 -Block 0011 [127]: 8273bb90c3b5600e -Block 0012 [ 0]: 8806f36d35c1423b -Block 0012 [ 1]: 14653c73ccf5bc88 -Block 0012 [ 2]: 4207fc5b55d55fda -Block 0012 [ 3]: efbdfa4d752b6918 -Block 0012 [ 4]: a4a2d8f6065b95d5 -Block 0012 [ 5]: 97ae0bd93615b75e -Block 0012 [ 6]: ea30d4b1d695e231 -Block 0012 [ 7]: 0f0ca5ca8152e942 -Block 0012 [ 8]: 383566c45510b12b -Block 0012 [ 9]: a0ae9a21d1a1df6b -Block 0012 [ 10]: 71353b98020fb2f4 -Block 0012 [ 11]: 14defb047ecd1cfc -Block 0012 [ 12]: 6f8d61281e48d8d3 -Block 0012 [ 13]: 4e68a4a4107f1cbf -Block 0012 [ 14]: 82ac58dc69bed136 -Block 0012 [ 15]: 082cf1a328c9d60a -Block 0012 [ 16]: cd7c6c4269625174 -Block 0012 [ 17]: dc4e7de5e2132891 -Block 0012 [ 18]: 605722ef953732bb -Block 0012 [ 19]: ef28c8050fb1ffbb -Block 0012 [ 20]: 8b6d0fab9e173cd4 -Block 0012 [ 21]: a9f69ac0b87c3248 -Block 0012 [ 22]: b00898c9abd03a75 -Block 0012 [ 23]: 743e6179354ef1d4 -Block 0012 [ 24]: ecc061362554bb3d -Block 0012 [ 25]: 9ac900bdfe1342cb -Block 0012 [ 26]: 39a9deeb4bd618ac -Block 0012 [ 27]: ea98a8de1ba57756 -Block 0012 [ 28]: d72d9b53c6e21291 -Block 0012 [ 29]: e711b901b297e96e -Block 0012 [ 30]: 9762d95e177c4f1f -Block 0012 [ 31]: c55051fa55ba56b3 -Block 0012 [ 32]: 5d73ae3e34932185 -Block 0012 [ 33]: 248c4c499a5d1382 -Block 0012 [ 34]: 1bde77252efbe61f -Block 0012 [ 35]: da398389113e48ac -Block 0012 [ 36]: 251b9f0f957ff7bb -Block 0012 [ 37]: 9ecc553346dcd262 -Block 0012 [ 38]: 9cb0cb2499323e09 -Block 0012 [ 39]: 196608d377614970 -Block 0012 [ 40]: ad301f3b39eab9eb -Block 0012 [ 41]: 07292fb5039b5a0c -Block 0012 [ 42]: b8c242fde0656a78 -Block 0012 [ 43]: de2ffbe33e4255f4 -Block 0012 [ 44]: ef88307c4af2465f -Block 0012 [ 45]: 8130e319111c7e12 -Block 0012 [ 46]: d30446203591a7f0 -Block 0012 [ 47]: 92d9a9c97962de12 -Block 0012 [ 48]: 81ffb8785be950b8 -Block 0012 [ 49]: dd7a8f4f4f1be7fc -Block 0012 [ 50]: ae16a8611e2fab24 -Block 0012 [ 51]: 274ae59677ed5cde -Block 0012 [ 52]: 9ee2a215fc45877d -Block 0012 [ 53]: 44c02472b9d4865e -Block 0012 [ 54]: 7a99faae6ce71424 -Block 0012 [ 55]: 9f14ec3364b617b5 -Block 0012 [ 56]: 4e5f21c0f9fa5cdb -Block 0012 [ 57]: 8581be6ff99ff6e9 -Block 0012 [ 58]: 286a475c94d8531b -Block 0012 [ 59]: 5829a37f5059aba7 -Block 0012 [ 60]: 63966f77f572f1fa -Block 0012 [ 61]: 2b385db8fdd63b29 -Block 0012 [ 62]: 7f19c5dfa2d51b19 -Block 0012 [ 63]: e6c7faac63fd8be9 -Block 0012 [ 64]: 20978fded5ed200c -Block 0012 [ 65]: 3d7f27000be3bf33 -Block 0012 [ 66]: 424c8604e3439841 -Block 0012 [ 67]: c7c17415eea225fd -Block 0012 [ 68]: 119ad57ef17db880 -Block 0012 [ 69]: 7c5ec22d1e8246f4 -Block 0012 [ 70]: 02aaff890ed6a0d8 -Block 0012 [ 71]: 38885a315c9cb170 -Block 0012 [ 72]: 9bdea427f4331556 -Block 0012 [ 73]: 0b9d377ac4a053ee -Block 0012 [ 74]: ae093cbad8ebfd1f -Block 0012 [ 75]: da9a129e658ed6d5 -Block 0012 [ 76]: 5fc18fb4ede1183c -Block 0012 [ 77]: 03ac6cc465a317d6 -Block 0012 [ 78]: 90216f4e34b94195 -Block 0012 [ 79]: 7374632b8bfa4ed2 -Block 0012 [ 80]: 3f01f0d5c1d11263 -Block 0012 [ 81]: ce97cb17f8470c45 -Block 0012 [ 82]: 48446e58576c981b -Block 0012 [ 83]: 3af83ee98ee746f7 -Block 0012 [ 84]: e036c677e9d4f210 -Block 0012 [ 85]: 15e75b241dadf152 -Block 0012 [ 86]: 6414a2ac0b3d0934 -Block 0012 [ 87]: 3e2bbf6a7f90858e -Block 0012 [ 88]: a8db21963b8e39f3 -Block 0012 [ 89]: fd73cb703b0ac5ce -Block 0012 [ 90]: 2f34ee7be12306e7 -Block 0012 [ 91]: c24f9ac5f72fd067 -Block 0012 [ 92]: cc2171bb74a68e15 -Block 0012 [ 93]: 80834464ea81f238 -Block 0012 [ 94]: d2344c88383cfd55 -Block 0012 [ 95]: e8241e72f2d88c34 -Block 0012 [ 96]: 7510928f8266427e -Block 0012 [ 97]: fb57a7823a65cb28 -Block 0012 [ 98]: d30dd5b6d6bfc46a -Block 0012 [ 99]: 1350828149e5ee7d -Block 0012 [100]: 944087103d17187e -Block 0012 [101]: 72c9e02ae3037f35 -Block 0012 [102]: aae68c10254df726 -Block 0012 [103]: 3c72bcac4a61afae -Block 0012 [104]: ce0501cd931819df -Block 0012 [105]: 426e32d58167fbfb -Block 0012 [106]: 9e5dc832972aa924 -Block 0012 [107]: 848b3f39861c3eb5 -Block 0012 [108]: ed871992cfd6e2e3 -Block 0012 [109]: 1843a4cebb0d19ac -Block 0012 [110]: 6b59416e812adc5b -Block 0012 [111]: ff7753e7dd87cb07 -Block 0012 [112]: d85a0a1902640928 -Block 0012 [113]: 5a770deeb225fbce -Block 0012 [114]: 7246a7c49bf20941 -Block 0012 [115]: c0e9edc2c5b87ffa -Block 0012 [116]: fae6521ac53f5836 -Block 0012 [117]: 9eca1d246c821c14 -Block 0012 [118]: 6ec6ced3960fef2c -Block 0012 [119]: 9af70f8caf586a52 -Block 0012 [120]: 5f30942072110be3 -Block 0012 [121]: bfc7df63c519ee08 -Block 0012 [122]: 012890af79b89e65 -Block 0012 [123]: 17c6a29fd7ea0fca -Block 0012 [124]: 9284e78adc31e53b -Block 0012 [125]: 56d34c2e48b5e556 -Block 0012 [126]: 6f7c8fa37870b55e -Block 0012 [127]: 64d5549f6eb29b2f -Block 0013 [ 0]: e72efbcee6e1fcc2 -Block 0013 [ 1]: 41c9fa08bec04f71 -Block 0013 [ 2]: afdff9477d9dd990 -Block 0013 [ 3]: 847e1b15aee75dd3 -Block 0013 [ 4]: 51a5faf1e49312e4 -Block 0013 [ 5]: 98bcc5a1b36fcb8d -Block 0013 [ 6]: d4d840de4f9c632b -Block 0013 [ 7]: 5c9caaea2214b8ad -Block 0013 [ 8]: dfb03ae68b0b3a54 -Block 0013 [ 9]: 1d791e93ae70eff7 -Block 0013 [ 10]: 9924c218180bca12 -Block 0013 [ 11]: 5cabe42dcc8eceb6 -Block 0013 [ 12]: 3aadd556303df415 -Block 0013 [ 13]: a2e90919b4a888ff -Block 0013 [ 14]: ea9096263ccf5466 -Block 0013 [ 15]: 230bcadd55c5d8cf -Block 0013 [ 16]: 72b74072cfd88278 -Block 0013 [ 17]: 99287c1741b988a4 -Block 0013 [ 18]: 9261d65b6402547a -Block 0013 [ 19]: 95fd4b54d8291fd5 -Block 0013 [ 20]: fbf7d4b4962449ba -Block 0013 [ 21]: bd89c24c92cdabd6 -Block 0013 [ 22]: 1773376e4f1cb495 -Block 0013 [ 23]: f196d1f575cfef2e -Block 0013 [ 24]: 5d443966d2508d3c -Block 0013 [ 25]: df929f9765749018 -Block 0013 [ 26]: 4e98bda4c9aa91d6 -Block 0013 [ 27]: 3b74998d38c6f9a9 -Block 0013 [ 28]: a69472986a031370 -Block 0013 [ 29]: 55999e6cbb50ffe9 -Block 0013 [ 30]: df955f1fc8cebba6 -Block 0013 [ 31]: 7f9090b065d11439 -Block 0013 [ 32]: f522cab9b83ca10e -Block 0013 [ 33]: 27644ea4cb350062 -Block 0013 [ 34]: ff6d1db5e34d9eee -Block 0013 [ 35]: 0a03ae8f8fde0222 -Block 0013 [ 36]: 8d71db40f234b291 -Block 0013 [ 37]: 93dc4ec94a65e856 -Block 0013 [ 38]: 23169228ab00ccb9 -Block 0013 [ 39]: 92f2b127f4ffa819 -Block 0013 [ 40]: 36260a0ad39d896a -Block 0013 [ 41]: cb46dfcf38f9487d -Block 0013 [ 42]: 71351268c905ab11 -Block 0013 [ 43]: 8a726ed65034f3dd -Block 0013 [ 44]: 6ff7b9cd220b4b25 -Block 0013 [ 45]: d09bb2bbdadda776 -Block 0013 [ 46]: 14f63b5e2576d304 -Block 0013 [ 47]: 2012e78d9f11d05f -Block 0013 [ 48]: 84c4c6327aba9915 -Block 0013 [ 49]: 64bd4339a6f4730e -Block 0013 [ 50]: e8db6637f982ba64 -Block 0013 [ 51]: 80426b505ab9b659 -Block 0013 [ 52]: 7b183c8d992d6e89 -Block 0013 [ 53]: 27be6d49797c8929 -Block 0013 [ 54]: c2ce4c1f3bc4bc85 -Block 0013 [ 55]: 10f597203eb06167 -Block 0013 [ 56]: b337d265c1ffbae5 -Block 0013 [ 57]: 2cb28d5998618cb2 -Block 0013 [ 58]: 3694423e3dce42ee -Block 0013 [ 59]: a4f273033178e7c3 -Block 0013 [ 60]: c3046ec981137bb3 -Block 0013 [ 61]: 1009e948b01acf67 -Block 0013 [ 62]: cf8ff3786b295ab4 -Block 0013 [ 63]: c326444756ddd088 -Block 0013 [ 64]: e6319be1c3024f8d -Block 0013 [ 65]: 7ea1cdbcab9d1e37 -Block 0013 [ 66]: 5a278a8c214dffc3 -Block 0013 [ 67]: e1e3096f9467c652 -Block 0013 [ 68]: 5ca93fb559033a8f -Block 0013 [ 69]: 6e94c69f7f3833be -Block 0013 [ 70]: 0f28fd96ca3fbe9d -Block 0013 [ 71]: f45a753a250f8885 -Block 0013 [ 72]: 85596b79d2b69dc5 -Block 0013 [ 73]: 668a8092d5936a81 -Block 0013 [ 74]: ca8f2365d51addcf -Block 0013 [ 75]: b6d7f0efd51024da -Block 0013 [ 76]: eae27ca92101b01d -Block 0013 [ 77]: 41a31214dff85a05 -Block 0013 [ 78]: cefc4a5bc9e160b6 -Block 0013 [ 79]: b2ec3b0af6d0cfad -Block 0013 [ 80]: eaf8ccbae405a96a -Block 0013 [ 81]: bf80f0cb8290672b -Block 0013 [ 82]: 1d354282bfb867b0 -Block 0013 [ 83]: defd9743a6ed5ec4 -Block 0013 [ 84]: b9f7e89081a83de9 -Block 0013 [ 85]: 475a016e71f52c7b -Block 0013 [ 86]: 9200fa2b3e510c1c -Block 0013 [ 87]: 722dbf069e3bb00a -Block 0013 [ 88]: 4456a0288267d739 -Block 0013 [ 89]: 9bb0deec79a73b28 -Block 0013 [ 90]: 5668f034f9593324 -Block 0013 [ 91]: 716f5609d579186c -Block 0013 [ 92]: d3885db0ca291647 -Block 0013 [ 93]: 7362a661049f019a -Block 0013 [ 94]: 2a3af104bfdf5f9d -Block 0013 [ 95]: 12e8f6e36733c9b1 -Block 0013 [ 96]: 771fb14c5e514301 -Block 0013 [ 97]: 7253c7e989875dc3 -Block 0013 [ 98]: 0169faf6582e95ad -Block 0013 [ 99]: a78686d559d37864 -Block 0013 [100]: 3ed327acc1ca2d97 -Block 0013 [101]: d4df3ae4a05987c6 -Block 0013 [102]: 734086ace6f3ba89 -Block 0013 [103]: c014cbeb31bd5fe5 -Block 0013 [104]: 8773bbe012dc88b4 -Block 0013 [105]: a4364d36a4a0ec5c -Block 0013 [106]: c3080f5baa28264d -Block 0013 [107]: c74122c7d560f312 -Block 0013 [108]: df4eebdca740a2e1 -Block 0013 [109]: 415708c10d8419a5 -Block 0013 [110]: d2e8f4acb6c9229b -Block 0013 [111]: 31405c89ee5f9078 -Block 0013 [112]: dcb5a58709568836 -Block 0013 [113]: f9adc209054ca3cd -Block 0013 [114]: 8f54dd7f1e576e69 -Block 0013 [115]: 90200596f5f31919 -Block 0013 [116]: a51bb22209110112 -Block 0013 [117]: 395c30fc016b08fa -Block 0013 [118]: 984e30e11239af0e -Block 0013 [119]: 0c01cf9e1b6c375e -Block 0013 [120]: 1dc8cb664c66b463 -Block 0013 [121]: 42e8e6591fa02520 -Block 0013 [122]: 1556177ba9cfe1b5 -Block 0013 [123]: 7c8383f4db999495 -Block 0013 [124]: 0b4446b852033798 -Block 0013 [125]: e364b9e50c65e807 -Block 0013 [126]: 22c2b338400fa40e -Block 0013 [127]: 197b3e06a9b9b35d -Block 0014 [ 0]: 8d14eda116d8b174 -Block 0014 [ 1]: f0ed99cc6e9bad1f -Block 0014 [ 2]: aa681b19cb2aa856 -Block 0014 [ 3]: 51b9371d6db9a704 -Block 0014 [ 4]: fd4e067c50a82bf1 -Block 0014 [ 5]: b84fe88cef8f8ce1 -Block 0014 [ 6]: e005bbdea12c5cce -Block 0014 [ 7]: 8921662cb47324d5 -Block 0014 [ 8]: 19b0df7e73fedfb0 -Block 0014 [ 9]: eb2e94f27c2c08d6 -Block 0014 [ 10]: c6c93a91e4ff2395 -Block 0014 [ 11]: 78ca8005a838af79 -Block 0014 [ 12]: 832134055a083e60 -Block 0014 [ 13]: e2baab535beeaca9 -Block 0014 [ 14]: 6cb6415b356f9c6b -Block 0014 [ 15]: 4d188011ab14c17a -Block 0014 [ 16]: 4eb9bbf6642e83fe -Block 0014 [ 17]: b11101eb0f96d3c3 -Block 0014 [ 18]: 49bd14abcacc79c2 -Block 0014 [ 19]: 908454e7efcf67aa -Block 0014 [ 20]: 0c6bd3e1d0d1a801 -Block 0014 [ 21]: a6fd600f4d316505 -Block 0014 [ 22]: c6b3b58a099b0132 -Block 0014 [ 23]: 1fd168a48e08af81 -Block 0014 [ 24]: 7d0abf0de858e6c9 -Block 0014 [ 25]: e1c1ec6fccf881b0 -Block 0014 [ 26]: 66c26e61d80a5717 -Block 0014 [ 27]: 30d88fc6f4fcfb1c -Block 0014 [ 28]: f4bef017c2aa3d69 -Block 0014 [ 29]: 54ec842d96c65623 -Block 0014 [ 30]: 3dd02da54acc953e -Block 0014 [ 31]: 6c9a5523129d0a12 -Block 0014 [ 32]: e80101c9a3eb28af -Block 0014 [ 33]: 5e5012733c54de06 -Block 0014 [ 34]: 14a6fc541b76f2c4 -Block 0014 [ 35]: ae2aaa5d9de0a5a8 -Block 0014 [ 36]: d0e66232ba166660 -Block 0014 [ 37]: fb5ce73d6e6f73a0 -Block 0014 [ 38]: 1d430c477c21b0a4 -Block 0014 [ 39]: a047b3225665765b -Block 0014 [ 40]: 6629b699bffc7016 -Block 0014 [ 41]: 986241e23222e465 -Block 0014 [ 42]: 67f53ba71892b9f3 -Block 0014 [ 43]: cca9cd5a1b010cca -Block 0014 [ 44]: d963121f56ae7d48 -Block 0014 [ 45]: 314021d79e98d3a9 -Block 0014 [ 46]: c33fb6dba4174783 -Block 0014 [ 47]: c50d1c6765478c78 -Block 0014 [ 48]: e83173786e25b7ec -Block 0014 [ 49]: 1bea0e1d495317ad -Block 0014 [ 50]: ea5c6380f39600f8 -Block 0014 [ 51]: 5e4ae1400406c36e -Block 0014 [ 52]: 1755aea74cf69384 -Block 0014 [ 53]: 2571f5cb87a57586 -Block 0014 [ 54]: cd88b273efb66357 -Block 0014 [ 55]: fd404e9cdcd9c9fe -Block 0014 [ 56]: 15031c81ff4f7d59 -Block 0014 [ 57]: 67c01cb57dc56faa -Block 0014 [ 58]: 8fc3faf1a58630fc -Block 0014 [ 59]: 4a2fea71ed6905fa -Block 0014 [ 60]: 4176ea688e1a9bff -Block 0014 [ 61]: 0baf1e600ebba90f -Block 0014 [ 62]: d4c62bedc6c17c5a -Block 0014 [ 63]: fe82cc4b18777fbb -Block 0014 [ 64]: 8c94dd054153a818 -Block 0014 [ 65]: aa31581716fef7e5 -Block 0014 [ 66]: b42153e50e973f5a -Block 0014 [ 67]: d652f8ae8b6207f3 -Block 0014 [ 68]: e06432d955b0ab86 -Block 0014 [ 69]: f92dbd0e338f8ccb -Block 0014 [ 70]: 562ba0d2b04549ef -Block 0014 [ 71]: 29a231a4c57a3de1 -Block 0014 [ 72]: 7e2145921fee5493 -Block 0014 [ 73]: 20a340d5895bcd9a -Block 0014 [ 74]: e2e354ca5272b509 -Block 0014 [ 75]: abcdee5c5bb2cfa3 -Block 0014 [ 76]: d371f81a8be84f1d -Block 0014 [ 77]: 8220ea4b6cbe82fc -Block 0014 [ 78]: a58ce51218a79494 -Block 0014 [ 79]: f635a38fce84fed0 -Block 0014 [ 80]: 0b408788ad40eba1 -Block 0014 [ 81]: 30d60016156bd242 -Block 0014 [ 82]: 81d0c5358dddce93 -Block 0014 [ 83]: 4f7908a5cb8bb7d5 -Block 0014 [ 84]: 14b529212b6530c4 -Block 0014 [ 85]: 33044b35a9337d9a -Block 0014 [ 86]: c8fde54e83feb1c5 -Block 0014 [ 87]: 3be5432e49aec1bb -Block 0014 [ 88]: f98a1e3a999a4f79 -Block 0014 [ 89]: 75045dbaa4dca89e -Block 0014 [ 90]: 294bddf0db98b8ac -Block 0014 [ 91]: a7d8b2a1daaecbc7 -Block 0014 [ 92]: c2abce3a81f24c50 -Block 0014 [ 93]: f76054fadd7e4cfe -Block 0014 [ 94]: 86af8192d73f1e4c -Block 0014 [ 95]: ae1e37842e18f6d7 -Block 0014 [ 96]: f771f980b278b4d5 -Block 0014 [ 97]: 1c5bf21c38eee556 -Block 0014 [ 98]: e62a9a43d1945340 -Block 0014 [ 99]: 9cb9a94b5edcdfa3 -Block 0014 [100]: 2ef34979f56f344b -Block 0014 [101]: 31dbbd3b49048f01 -Block 0014 [102]: c39b10dfc2141dcc -Block 0014 [103]: ede638cecaa47945 -Block 0014 [104]: 47a56d23f46fb7c1 -Block 0014 [105]: 72b848fd7517cd75 -Block 0014 [106]: 321312e6606d202b -Block 0014 [107]: fccb2896a973930e -Block 0014 [108]: a95b5677fe9bb5e7 -Block 0014 [109]: cc196e39010d655b -Block 0014 [110]: 92836ef9898b94ca -Block 0014 [111]: dbe8aeb97154968b -Block 0014 [112]: ec80ac4ed462dd58 -Block 0014 [113]: f1899ab7707e7d66 -Block 0014 [114]: 537c431765423717 -Block 0014 [115]: 2577e7bc01750f96 -Block 0014 [116]: f70bb7875341ccba -Block 0014 [117]: 17fd2d1068f6f10f -Block 0014 [118]: 9092c995c5a598da -Block 0014 [119]: 3c4712e895e00263 -Block 0014 [120]: 81302387429d318b -Block 0014 [121]: 0ad80f67bfc1effa -Block 0014 [122]: 715791caef2d1725 -Block 0014 [123]: e19080e37dedbba4 -Block 0014 [124]: faef540798e35c43 -Block 0014 [125]: 4ab3f59b7018e628 -Block 0014 [126]: 054b4d0e9c328acf -Block 0014 [127]: 61b4b091403df82c -Block 0015 [ 0]: 779fdc9d92242706 -Block 0015 [ 1]: 9a258d936a6fad08 -Block 0015 [ 2]: 6c393c4981d158b7 -Block 0015 [ 3]: c15ab151d5d4c946 -Block 0015 [ 4]: 4a202feb1c0ccf11 -Block 0015 [ 5]: dd2665b2c7d60c1c -Block 0015 [ 6]: 3d4ccf48ef10e923 -Block 0015 [ 7]: 9c5a9c7cbf6e3401 -Block 0015 [ 8]: 65ce6f9d46877ee2 -Block 0015 [ 9]: 81f60dd9637a027c -Block 0015 [ 10]: 26028b3cbb08ed0b -Block 0015 [ 11]: 14eba36c0d9d3afc -Block 0015 [ 12]: c17a2d030b8b69ba -Block 0015 [ 13]: b7e3fcba56fd92b4 -Block 0015 [ 14]: 55590ed2d6873531 -Block 0015 [ 15]: 1dd55802c3af0284 -Block 0015 [ 16]: 627b98d51e7d1a7c -Block 0015 [ 17]: e29afac9fbac4919 -Block 0015 [ 18]: bbf2da6ff5909bb1 -Block 0015 [ 19]: 3b32e7edbe95f4b8 -Block 0015 [ 20]: cb079b6aab21f5f6 -Block 0015 [ 21]: 249766d55216f91b -Block 0015 [ 22]: 73f12b90f2141fb4 -Block 0015 [ 23]: 9bce2173ff2c4648 -Block 0015 [ 24]: b8c9fc1983ce5225 -Block 0015 [ 25]: 518bd4b370df77d1 -Block 0015 [ 26]: fe3ef246f24fbe85 -Block 0015 [ 27]: 2a55a2c25d1e8092 -Block 0015 [ 28]: 3175467c6b826aad -Block 0015 [ 29]: 542eecc9f9329ddc -Block 0015 [ 30]: 6d578ceeffd6443f -Block 0015 [ 31]: 36957998d6304ca0 -Block 0015 [ 32]: f38e5b60db371ba3 -Block 0015 [ 33]: adcd63e573d6d1d6 -Block 0015 [ 34]: e0b3241d8998c718 -Block 0015 [ 35]: e975d85c9ed509b1 -Block 0015 [ 36]: 43400dc263942f07 -Block 0015 [ 37]: bbd70c7d2d975ff6 -Block 0015 [ 38]: 08f6a406873f1c3d -Block 0015 [ 39]: 2c2c43a20f7094b8 -Block 0015 [ 40]: 2fc707898b9c426e -Block 0015 [ 41]: cc26a970aeb682f6 -Block 0015 [ 42]: 3200da0a96adedf8 -Block 0015 [ 43]: 10472bb55cef7373 -Block 0015 [ 44]: 7a434a0b29b2840f -Block 0015 [ 45]: f4cbd065866cd338 -Block 0015 [ 46]: 6d4a6cec78e4060e -Block 0015 [ 47]: d2cb64f0f26bd67c -Block 0015 [ 48]: 61944777d05d951e -Block 0015 [ 49]: f26d818850c7677c -Block 0015 [ 50]: 40d774d58b5bd2bd -Block 0015 [ 51]: 06de2e113d247652 -Block 0015 [ 52]: d65d143565d2a655 -Block 0015 [ 53]: 415bf9a3fbcd058c -Block 0015 [ 54]: c7c8463a62c2f5c1 -Block 0015 [ 55]: 1f28341958af298b -Block 0015 [ 56]: 815d6569ad4d8ad3 -Block 0015 [ 57]: 65572ea3e5ad177d -Block 0015 [ 58]: cd2e5a09bec730bf -Block 0015 [ 59]: c34b3aa86255aba8 -Block 0015 [ 60]: 6562cf377b9a4afb -Block 0015 [ 61]: 4617ea9bbd4958fa -Block 0015 [ 62]: 2495d4cbf49e49de -Block 0015 [ 63]: 630506139887c342 -Block 0015 [ 64]: 7625ad38357a61d2 -Block 0015 [ 65]: bb8190ead706d07e -Block 0015 [ 66]: 9bdc83c71765309e -Block 0015 [ 67]: a7d137f733a27b67 -Block 0015 [ 68]: 54fafb19769caaa1 -Block 0015 [ 69]: c19c792f768ca925 -Block 0015 [ 70]: d8bea44c81c7658f -Block 0015 [ 71]: a6eb6215c6a59748 -Block 0015 [ 72]: fd15d732c1b31ebf -Block 0015 [ 73]: dfdb5b469b911033 -Block 0015 [ 74]: c66c55a55b87dd6a -Block 0015 [ 75]: e0d409cd710f43c1 -Block 0015 [ 76]: c4b643585e9e14f2 -Block 0015 [ 77]: 30265a5a01666abe -Block 0015 [ 78]: b822366f9b7f61fd -Block 0015 [ 79]: 5f6805b698a28154 -Block 0015 [ 80]: a5097b0cb31eff3e -Block 0015 [ 81]: 1dd47a154c05ea75 -Block 0015 [ 82]: 36d0a7a0a3ebe6de -Block 0015 [ 83]: ceae8ceb45cba297 -Block 0015 [ 84]: 1bace6b5856e12c9 -Block 0015 [ 85]: 36c73df6ddf75167 -Block 0015 [ 86]: f7d174736c6e676a -Block 0015 [ 87]: e60790c5d7e71a98 -Block 0015 [ 88]: dfe970afb98d7efe -Block 0015 [ 89]: 11192bffd60dc4ab -Block 0015 [ 90]: 7779c3b5819f97bf -Block 0015 [ 91]: 5cb53f840af6bdcd -Block 0015 [ 92]: 44ae27f6098c1f9e -Block 0015 [ 93]: 62835545eee575fd -Block 0015 [ 94]: 68fc7b52043d33a3 -Block 0015 [ 95]: 6212f393295bf32b -Block 0015 [ 96]: 956cf671200d8e76 -Block 0015 [ 97]: d535cf9a699971a6 -Block 0015 [ 98]: 6ea0dd8db2cd5795 -Block 0015 [ 99]: be774dbb1d3f838b -Block 0015 [100]: 603318927cc24df5 -Block 0015 [101]: 4306aeba83fa65c2 -Block 0015 [102]: 971f4603b634e6a4 -Block 0015 [103]: 08df12318be15bd4 -Block 0015 [104]: 78c916bc9c8af835 -Block 0015 [105]: 7a79893be28af6e3 -Block 0015 [106]: aa1565cf39e71f57 -Block 0015 [107]: a2518fef8f40884a -Block 0015 [108]: 4f50a2512b883063 -Block 0015 [109]: 224db521097e45b0 -Block 0015 [110]: ad2090c5df88b115 -Block 0015 [111]: 914c7ae4bb49a7ad -Block 0015 [112]: 13afbd9f5140d4a8 -Block 0015 [113]: e67f553ff5c7ffe6 -Block 0015 [114]: e0ea9cb29843527d -Block 0015 [115]: 4bcbc626e3ce3149 -Block 0015 [116]: 79e87f100ff4065e -Block 0015 [117]: 8091cbbfedea39a7 -Block 0015 [118]: 1ca3fa2f4899954c -Block 0015 [119]: aab5b8c150686443 -Block 0015 [120]: 64b7688a862fd4da -Block 0015 [121]: b6eb832a658ebd2a -Block 0015 [122]: 17979d3dcb358c74 -Block 0015 [123]: 6c7321e6ad62d763 -Block 0015 [124]: 454a5b778dad5e71 -Block 0015 [125]: 06f95cb760f63eac -Block 0015 [126]: cc520a4b29a88c88 -Block 0015 [127]: fe4b8f09014dff9f -Block 0016 [ 0]: 6b6b8299b7544ec8 -Block 0016 [ 1]: 2dbb57599a674be3 -Block 0016 [ 2]: 159b18bbb6ecc6a3 -Block 0016 [ 3]: 660a4a24394333c7 -Block 0016 [ 4]: d4601f439a2be46c -Block 0016 [ 5]: ecd216468c5463eb -Block 0016 [ 6]: fd9ce03453659fb6 -Block 0016 [ 7]: 78df3460997ba0e5 -Block 0016 [ 8]: b4c5d2709bb12a53 -Block 0016 [ 9]: 828fdfaeed6df627 -Block 0016 [ 10]: 09f6b577c2837324 -Block 0016 [ 11]: c66268994523b9bc -Block 0016 [ 12]: ccf7c3dc16831a70 -Block 0016 [ 13]: 209e46cce63b0dd5 -Block 0016 [ 14]: 22d9cfc02bab8310 -Block 0016 [ 15]: 731881b7af38c587 -Block 0016 [ 16]: fd47a81306380ccd -Block 0016 [ 17]: 0c0b9997a6796403 -Block 0016 [ 18]: 7c6cb0650780c844 -Block 0016 [ 19]: 4bc29837890a4f0f -Block 0016 [ 20]: 16b02858d67a4009 -Block 0016 [ 21]: a3794b3d0ee899af -Block 0016 [ 22]: 8564e1126ff91d30 -Block 0016 [ 23]: 09a4d961e7f0607e -Block 0016 [ 24]: 7d12bc7afbdfe937 -Block 0016 [ 25]: dbbf0fb80558efa3 -Block 0016 [ 26]: 3c73c66093bef941 -Block 0016 [ 27]: 6ee549f6c199bca2 -Block 0016 [ 28]: 5ac1d438db0194d6 -Block 0016 [ 29]: 7d2ed2b822df8076 -Block 0016 [ 30]: 7926528f7a19cf79 -Block 0016 [ 31]: 77ab595784cf2d3e -Block 0016 [ 32]: 74508b5b98db1802 -Block 0016 [ 33]: 5ad6e824297985d3 -Block 0016 [ 34]: a68a904fe8e766b9 -Block 0016 [ 35]: 2bc4f691c9348864 -Block 0016 [ 36]: 35223aef0a5cc8f2 -Block 0016 [ 37]: 3555eead6e8818fc -Block 0016 [ 38]: d842744228cb5744 -Block 0016 [ 39]: b4ab1d1a94e7f2f3 -Block 0016 [ 40]: 9a91ba199294fcb2 -Block 0016 [ 41]: b5cebefdf0f53e3b -Block 0016 [ 42]: b922a39e9ebbb6f2 -Block 0016 [ 43]: 017622ef687cf8c8 -Block 0016 [ 44]: e1946a2b6dd4a289 -Block 0016 [ 45]: 89f5ecc8a5bc50c2 -Block 0016 [ 46]: 5e44eabe9a78220f -Block 0016 [ 47]: af7dad98882c8ea5 -Block 0016 [ 48]: cded7b67851ac70a -Block 0016 [ 49]: 8f0a5d94c2bf7581 -Block 0016 [ 50]: cf759794cf82f5c4 -Block 0016 [ 51]: 52ec8b0b7930341b -Block 0016 [ 52]: b7f5f830b5041631 -Block 0016 [ 53]: 40557ff24816836b -Block 0016 [ 54]: 4924cc34b3c38777 -Block 0016 [ 55]: fb183663b0910a7a -Block 0016 [ 56]: 5688b0ed5a3694c5 -Block 0016 [ 57]: 4e6b6866ff7be69f -Block 0016 [ 58]: a5bbdda0972ef80b -Block 0016 [ 59]: 7f9602dc2786130b -Block 0016 [ 60]: 6f90952e6fd32e9e -Block 0016 [ 61]: 2976c5d47709830a -Block 0016 [ 62]: 369242fc7db856c6 -Block 0016 [ 63]: badcb263ff876336 -Block 0016 [ 64]: 5e1ae252cf7c660a -Block 0016 [ 65]: a6659303195743dc -Block 0016 [ 66]: 856f50f369e04d85 -Block 0016 [ 67]: b87f07258403769a -Block 0016 [ 68]: 33992b9b25d692bd -Block 0016 [ 69]: 4a0b5d6218a41006 -Block 0016 [ 70]: 3c37317fe37662bf -Block 0016 [ 71]: 1baba6fed257c4c8 -Block 0016 [ 72]: f0cd28f6bb911cf8 -Block 0016 [ 73]: e5761b0cc3f4a001 -Block 0016 [ 74]: 768b71c52a70eab0 -Block 0016 [ 75]: 7db5ed7f4c1ef039 -Block 0016 [ 76]: 78d38d1a4d9f6010 -Block 0016 [ 77]: 42149147a519d29f -Block 0016 [ 78]: 10274d8b80ef4a84 -Block 0016 [ 79]: 1bcb4169f9f5eca5 -Block 0016 [ 80]: 8080874425722c0f -Block 0016 [ 81]: d30f56e184749fbf -Block 0016 [ 82]: 13c9ec5c3d4211f5 -Block 0016 [ 83]: 336b9f7a4e19b359 -Block 0016 [ 84]: d117bda81fcf17ab -Block 0016 [ 85]: 55857cb4924b5bb5 -Block 0016 [ 86]: 7b00db4bcf2ace67 -Block 0016 [ 87]: efa6e895257c9dd7 -Block 0016 [ 88]: 5139fb4c4b935b24 -Block 0016 [ 89]: 2feaf6f70f9fc604 -Block 0016 [ 90]: ee9c2dd9c238232a -Block 0016 [ 91]: a85201b5e8ef1918 -Block 0016 [ 92]: b05201dfaf17a564 -Block 0016 [ 93]: 878cc2037453c301 -Block 0016 [ 94]: 98ecda8b2afe34e5 -Block 0016 [ 95]: 6262816e83d8dc79 -Block 0016 [ 96]: 7d77e2bceb694e30 -Block 0016 [ 97]: ad3b4a848289b4ab -Block 0016 [ 98]: 712fd94ed41ce643 -Block 0016 [ 99]: 35297c592ee58baf -Block 0016 [100]: d36c6b3c14a64c28 -Block 0016 [101]: e95d95c3720d633f -Block 0016 [102]: 89b8341d64e6cc30 -Block 0016 [103]: 628d4402248e242d -Block 0016 [104]: cf352f1abb75d74b -Block 0016 [105]: 111c71103148d99e -Block 0016 [106]: 0ae63ebb34a344f1 -Block 0016 [107]: 14aaed20bd8b8291 -Block 0016 [108]: aab94fc361a452b7 -Block 0016 [109]: f331f918ab5ee676 -Block 0016 [110]: 4b642391284c6ed8 -Block 0016 [111]: 42e1197aee18fb4f -Block 0016 [112]: 976b5714f428a15b -Block 0016 [113]: c520ddb7da18def8 -Block 0016 [114]: 07f7f2acea09e1d8 -Block 0016 [115]: fb2d08080e33afbb -Block 0016 [116]: cf65922568a8119a -Block 0016 [117]: 4eb17eca9ba107d0 -Block 0016 [118]: b0375b3187f0a9b0 -Block 0016 [119]: 6c7041bef30e3b40 -Block 0016 [120]: 308f7fd4baf2a106 -Block 0016 [121]: 51d5c01ce50b57df -Block 0016 [122]: 2d9965e67ef469e8 -Block 0016 [123]: 50bca96e25dc1e94 -Block 0016 [124]: fc66e8f3903164ee -Block 0016 [125]: f2c7dcf89787e187 -Block 0016 [126]: 663bba6642f4329a -Block 0016 [127]: d3c267a2da821e5a -Block 0017 [ 0]: fcfdc3df1c946197 -Block 0017 [ 1]: 6d3a7f8b138b68b7 -Block 0017 [ 2]: e8c5fd655d0f8fb7 -Block 0017 [ 3]: 0240b93cca7ec55f -Block 0017 [ 4]: e78c58c267172d23 -Block 0017 [ 5]: 3fe304db80db7083 -Block 0017 [ 6]: fa3860b74b1868e9 -Block 0017 [ 7]: 0d784d59a6fa4f0e -Block 0017 [ 8]: c1e151c95455076a -Block 0017 [ 9]: 5feb20e609a58be8 -Block 0017 [ 10]: 8093301a607a4b84 -Block 0017 [ 11]: 1667dae45ba06926 -Block 0017 [ 12]: b416d57b17811d86 -Block 0017 [ 13]: acbce71ff949098d -Block 0017 [ 14]: 77a0cd27521206f2 -Block 0017 [ 15]: e5a9f80eda0e2d6c -Block 0017 [ 16]: b4d7a75fee54f8e5 -Block 0017 [ 17]: fe86b8dcca89692d -Block 0017 [ 18]: 8361819f8e48814b -Block 0017 [ 19]: 996dcd01c5ddea4e -Block 0017 [ 20]: 8fd62784132a601a -Block 0017 [ 21]: 38ba7e7ac1c175ed -Block 0017 [ 22]: dfb306c54cf71426 -Block 0017 [ 23]: 00967a5af80d646c -Block 0017 [ 24]: a255c76fea4d0609 -Block 0017 [ 25]: 462b07780caa6d81 -Block 0017 [ 26]: 84b08d3b74ff87ca -Block 0017 [ 27]: d0562df36fd7c6d2 -Block 0017 [ 28]: 6d1a47eed84ddb02 -Block 0017 [ 29]: 6238a05d0116d9a2 -Block 0017 [ 30]: 6d29b2173a807c05 -Block 0017 [ 31]: fd87f368e8965a70 -Block 0017 [ 32]: 90f3e8279034ac89 -Block 0017 [ 33]: 8497a7b5e99eae27 -Block 0017 [ 34]: ae40662b4abc0132 -Block 0017 [ 35]: 6885d2f92cacfebe -Block 0017 [ 36]: d86eac1dba8b2822 -Block 0017 [ 37]: 64da53ae09100afd -Block 0017 [ 38]: 671f21aac24550f9 -Block 0017 [ 39]: 27258e7d1f12748a -Block 0017 [ 40]: 64bcd532eca9903c -Block 0017 [ 41]: c43d4f5d599a450e -Block 0017 [ 42]: b4e2b1ffaee50dba -Block 0017 [ 43]: 190338b27bfca99f -Block 0017 [ 44]: 64528d8b69004613 -Block 0017 [ 45]: d48293de39ac0e6e -Block 0017 [ 46]: 25c238dde29f05a0 -Block 0017 [ 47]: ccddfeea898b0b31 -Block 0017 [ 48]: ea1c6839dd274cdf -Block 0017 [ 49]: 2fa7e6ddccc9c005 -Block 0017 [ 50]: 7d2d05e2d93e6e37 -Block 0017 [ 51]: 2f0ffc8c74ed3fc6 -Block 0017 [ 52]: 996c6e452180fa46 -Block 0017 [ 53]: e877e033c2758860 -Block 0017 [ 54]: 6bfd51bac35e1dc4 -Block 0017 [ 55]: a06551f72fe3a0e7 -Block 0017 [ 56]: cfbfb75ea65b4774 -Block 0017 [ 57]: daa545f34527a9f1 -Block 0017 [ 58]: a56f2c7bb59fd56a -Block 0017 [ 59]: 0865420cffd781c2 -Block 0017 [ 60]: cd0d74d18e97ef59 -Block 0017 [ 61]: 2d1b5a4a080a4a04 -Block 0017 [ 62]: 0323cb2335ad4259 -Block 0017 [ 63]: cfe0ef15e403e696 -Block 0017 [ 64]: cda2bf85e5c1d3c3 -Block 0017 [ 65]: e35648924e2e166e -Block 0017 [ 66]: c18265bbb84c09ea -Block 0017 [ 67]: 26fbc2832f7742a7 -Block 0017 [ 68]: fc91a5047cbe7065 -Block 0017 [ 69]: 06ac77aba6a36972 -Block 0017 [ 70]: a54b48b2c521529c -Block 0017 [ 71]: bff56e3103927512 -Block 0017 [ 72]: aa56df749934c277 -Block 0017 [ 73]: e4cbc3eb16580852 -Block 0017 [ 74]: 605985b507b8a17c -Block 0017 [ 75]: 5b49a190ef882cde -Block 0017 [ 76]: 9556eedf7b110989 -Block 0017 [ 77]: 5a837ddf8991603d -Block 0017 [ 78]: 62f928de75fbb9e2 -Block 0017 [ 79]: 87ccfff3728e7e4f -Block 0017 [ 80]: cd0081aa3eef7d91 -Block 0017 [ 81]: 3e1f7753627235c2 -Block 0017 [ 82]: ee7eead4d40598d4 -Block 0017 [ 83]: fd2ad86ece0e4d93 -Block 0017 [ 84]: 7511e10b5b4abe92 -Block 0017 [ 85]: 7cc7b0493ce49e28 -Block 0017 [ 86]: 9b0caf208e867909 -Block 0017 [ 87]: ec70b4e586a3dce4 -Block 0017 [ 88]: 7461b2471fde9e63 -Block 0017 [ 89]: 52dc1872c33e2273 -Block 0017 [ 90]: 5a793766c52e8c82 -Block 0017 [ 91]: f42cf278970327f5 -Block 0017 [ 92]: beb03ae0d86eb797 -Block 0017 [ 93]: e4e73466fb304d15 -Block 0017 [ 94]: e9658ed6be6f6081 -Block 0017 [ 95]: e12fa6cca1cc02fd -Block 0017 [ 96]: 9f57cae8c852f2d1 -Block 0017 [ 97]: 123c5896fa6814db -Block 0017 [ 98]: b0c9148dfbed76a2 -Block 0017 [ 99]: 46410406d1af9473 -Block 0017 [100]: fae3e7941e5beb9f -Block 0017 [101]: edb066d11372355f -Block 0017 [102]: 6a6cb2ce8df9fa25 -Block 0017 [103]: 283e06e02cee0bc6 -Block 0017 [104]: d7105a3c22517163 -Block 0017 [105]: 911a160616853a57 -Block 0017 [106]: 5989406740b373cb -Block 0017 [107]: 4c9483a19b057503 -Block 0017 [108]: ebb7b709242d8fac -Block 0017 [109]: c0a6f69ce7099f04 -Block 0017 [110]: 191a7a033cb52c1b -Block 0017 [111]: 91f9b8e107f40569 -Block 0017 [112]: 9f1b4416b2b3e3bb -Block 0017 [113]: 79cad712977dc9a5 -Block 0017 [114]: b073ef8ce6768e7c -Block 0017 [115]: 45ec92a6d569c94f -Block 0017 [116]: faf83f399b5188cf -Block 0017 [117]: d67394ddcc90be8b -Block 0017 [118]: 4a0ccd308297588e -Block 0017 [119]: 65afc3485290a1ae -Block 0017 [120]: 875bf5efb8c4135b -Block 0017 [121]: 0325974e7c089ce9 -Block 0017 [122]: 833655a2a7093406 -Block 0017 [123]: 60e8577d82cdfcfc -Block 0017 [124]: 4047226b5fea5e12 -Block 0017 [125]: e4f2c4185dce67dc -Block 0017 [126]: 8dc296b99cd157ed -Block 0017 [127]: d06c5a12cc83f875 -Block 0018 [ 0]: 506b9dff8f66dfc9 -Block 0018 [ 1]: 77ebc8f2b790b075 -Block 0018 [ 2]: 5f6b43fa7674a697 -Block 0018 [ 3]: 2c5180ec36e6e9f9 -Block 0018 [ 4]: eea72969852a0b14 -Block 0018 [ 5]: 5b9ba92ef08a91ca -Block 0018 [ 6]: e44afbd53674fa86 -Block 0018 [ 7]: c751b97cd72874d0 -Block 0018 [ 8]: 98e2cfceaaf5b987 -Block 0018 [ 9]: 59e7c20104d52b86 -Block 0018 [ 10]: fe9783d8f50e8564 -Block 0018 [ 11]: ec2ff6e16517d28c -Block 0018 [ 12]: 2ccc3bad6621a17d -Block 0018 [ 13]: a177b2be6b2fecdb -Block 0018 [ 14]: 703922963cc27392 -Block 0018 [ 15]: 466f05721fe0afb5 -Block 0018 [ 16]: 66aaeb6b2b42733b -Block 0018 [ 17]: ba33703147105331 -Block 0018 [ 18]: 67946b26659261f0 -Block 0018 [ 19]: 82e8278754222efb -Block 0018 [ 20]: e508acd54b0b5386 -Block 0018 [ 21]: 835d1e501fa5c24b -Block 0018 [ 22]: fb337e256303eeb5 -Block 0018 [ 23]: 01a9432585bbcb92 -Block 0018 [ 24]: e714b55e218ec12b -Block 0018 [ 25]: 26f6d3b38162143f -Block 0018 [ 26]: 52c4b662a35d8518 -Block 0018 [ 27]: e591f3bd01a0f260 -Block 0018 [ 28]: be97dfe523580591 -Block 0018 [ 29]: e87de0ecafea4e2b -Block 0018 [ 30]: 8c50573e84c5dbac -Block 0018 [ 31]: a104c4fa704fef54 -Block 0018 [ 32]: b31e99ab31889f9b -Block 0018 [ 33]: 2a5bae12c632ed66 -Block 0018 [ 34]: 3131689530cb91f8 -Block 0018 [ 35]: 86ecc03640aec2f2 -Block 0018 [ 36]: 360d5c87abde1d98 -Block 0018 [ 37]: 87628cc7a9c7e439 -Block 0018 [ 38]: bdec97daaf4fbed1 -Block 0018 [ 39]: cb135fa0dd1401b6 -Block 0018 [ 40]: 5d3498e58bd5cdaf -Block 0018 [ 41]: b21a2e740b18d3f3 -Block 0018 [ 42]: 04a56c431529e670 -Block 0018 [ 43]: 6dfc2e1b8a624915 -Block 0018 [ 44]: 4807e0a62fa02d8f -Block 0018 [ 45]: 045d5ee489190cbf -Block 0018 [ 46]: de6f7133d497b091 -Block 0018 [ 47]: 0d29ac253d7cf301 -Block 0018 [ 48]: 5d017136a4bf6d4b -Block 0018 [ 49]: 273bea5c28ef2afa -Block 0018 [ 50]: aa3380fd789085b7 -Block 0018 [ 51]: 06184d12fb6e646f -Block 0018 [ 52]: 9e8e7be60ce7be29 -Block 0018 [ 53]: da4b77cac5e3a44a -Block 0018 [ 54]: f18f7d0282e3ff2f -Block 0018 [ 55]: ffdf17f661f5a782 -Block 0018 [ 56]: baee89cd6027332d -Block 0018 [ 57]: e750340705b997f0 -Block 0018 [ 58]: 8d6d0c0638a27b0d -Block 0018 [ 59]: 8370de31338de210 -Block 0018 [ 60]: d19afe6daf1f6c6a -Block 0018 [ 61]: 6ca9730711d17695 -Block 0018 [ 62]: 28b287d8094da73d -Block 0018 [ 63]: d53cfc855e567583 -Block 0018 [ 64]: 0528fa8214051972 -Block 0018 [ 65]: e4326c77e19bc8e3 -Block 0018 [ 66]: 566e44790f3ff080 -Block 0018 [ 67]: 7a5fecedb6ac443e -Block 0018 [ 68]: f8d783bf81737ea2 -Block 0018 [ 69]: f328ef1493e09ad4 -Block 0018 [ 70]: 014d01edb2f1fec2 -Block 0018 [ 71]: 56090da3432688f0 -Block 0018 [ 72]: 756a65d5d144e7ab -Block 0018 [ 73]: b0387d690442e8ca -Block 0018 [ 74]: bcdc99a6c9701d94 -Block 0018 [ 75]: eb07a08cbfa32e3d -Block 0018 [ 76]: bea66981aba9da32 -Block 0018 [ 77]: 53437e3ee89e8180 -Block 0018 [ 78]: 1216da56618bf2a0 -Block 0018 [ 79]: 02dcbade81e80fef -Block 0018 [ 80]: fa9c42aa06f8dc27 -Block 0018 [ 81]: 143b6085501c079b -Block 0018 [ 82]: 3a7d6e1fbe910f7b -Block 0018 [ 83]: 84c10aa8f298dff1 -Block 0018 [ 84]: 6e7b1471d59c528b -Block 0018 [ 85]: bef312137a52bb94 -Block 0018 [ 86]: ef0fd8e81e404951 -Block 0018 [ 87]: 09d61611c24f84bf -Block 0018 [ 88]: f4bc2dc495584550 -Block 0018 [ 89]: eca233aae56be950 -Block 0018 [ 90]: 7c99caec1b8fbdfb -Block 0018 [ 91]: 28fe5488cc443c00 -Block 0018 [ 92]: f6987d2cb9da913e -Block 0018 [ 93]: 182e7544698569a9 -Block 0018 [ 94]: 80dbf54b72f5becb -Block 0018 [ 95]: 79a6c4c1318f7efb -Block 0018 [ 96]: 1dbff052ca33d753 -Block 0018 [ 97]: 4882194ca6f60741 -Block 0018 [ 98]: 770609181b43290f -Block 0018 [ 99]: fc262452312f6f79 -Block 0018 [100]: a4bcf7f51f733216 -Block 0018 [101]: c0ce7300a630e981 -Block 0018 [102]: f70d856b7f98cb0b -Block 0018 [103]: d287a4e4efc61485 -Block 0018 [104]: ad1be4004f9b4d90 -Block 0018 [105]: cafbf67a7a6c972f -Block 0018 [106]: 348471e3fe197c24 -Block 0018 [107]: ff5e95a969c83de6 -Block 0018 [108]: 409e12a717ca4b5a -Block 0018 [109]: 44cba534a035fbe9 -Block 0018 [110]: e97071f5b82453bc -Block 0018 [111]: b81fffd5e3411461 -Block 0018 [112]: fc18781ee372ab3f -Block 0018 [113]: b0693a61adddcbbd -Block 0018 [114]: 195c25844390b153 -Block 0018 [115]: 8f3e3ca6db496b51 -Block 0018 [116]: 69e2431f8f101f99 -Block 0018 [117]: 9228889034350cca -Block 0018 [118]: ebb7804d727feb62 -Block 0018 [119]: 498247e41ed29b72 -Block 0018 [120]: 32a24f0ac18beca9 -Block 0018 [121]: 09a432090643383b -Block 0018 [122]: 53e59d3caece1007 -Block 0018 [123]: 7b921f24930ac8dc -Block 0018 [124]: 17429db79612b532 -Block 0018 [125]: 32e4ccf3a816a341 -Block 0018 [126]: 53b02b523e641324 -Block 0018 [127]: 0929ccfcd333ef75 -Block 0019 [ 0]: 33e8d34b96a01194 -Block 0019 [ 1]: 456c32397eb0894c -Block 0019 [ 2]: 65f01bdf2b710523 -Block 0019 [ 3]: 1dc93d65920c5bab -Block 0019 [ 4]: 42c36f92c0ffd279 -Block 0019 [ 5]: a10d02d32c435128 -Block 0019 [ 6]: daa8fd35e22e7b0d -Block 0019 [ 7]: b3ef2ff8a04c3286 -Block 0019 [ 8]: 49496b0690707e8c -Block 0019 [ 9]: 8cae1bddf0b87419 -Block 0019 [ 10]: 34af6f0f333b6a73 -Block 0019 [ 11]: 9bc57b3ca9ad1aae -Block 0019 [ 12]: 4a84296458f08564 -Block 0019 [ 13]: 0382cdf60c0d61e6 -Block 0019 [ 14]: 383ffd993ca3a949 -Block 0019 [ 15]: d63f97665f89336b -Block 0019 [ 16]: 7770de57cc5c502d -Block 0019 [ 17]: 463aa97d108ea115 -Block 0019 [ 18]: 207e1c3c04d2f1c5 -Block 0019 [ 19]: 044e34d20ee5533d -Block 0019 [ 20]: 2d97f42d289e2be7 -Block 0019 [ 21]: 4c9ffb0c99dbd232 -Block 0019 [ 22]: 360d6c2d9242376b -Block 0019 [ 23]: d1a2d9f5c38b2196 -Block 0019 [ 24]: d59b5ecb66fa715d -Block 0019 [ 25]: d891f9b36c4cd181 -Block 0019 [ 26]: 9233c0d197b1e01b -Block 0019 [ 27]: 880e6ab061a568bf -Block 0019 [ 28]: 751bf0b45c77097c -Block 0019 [ 29]: f5efc6d5aed55271 -Block 0019 [ 30]: afef1f697de4cc72 -Block 0019 [ 31]: 47bc3efeacfb1d8d -Block 0019 [ 32]: 452c5045d2f478ab -Block 0019 [ 33]: ef0e422a51a4df0a -Block 0019 [ 34]: d5820f7da222bf7c -Block 0019 [ 35]: 1a33e2dbc09e14b8 -Block 0019 [ 36]: 182abf3da51c3790 -Block 0019 [ 37]: eb43140f75787e50 -Block 0019 [ 38]: 83ee465fb1646fd7 -Block 0019 [ 39]: b0974362ea612ca8 -Block 0019 [ 40]: 6ecf1aed4945275b -Block 0019 [ 41]: b2b61e5feffc7da5 -Block 0019 [ 42]: 256afa7a9e79a9e7 -Block 0019 [ 43]: b8700d5519ea31b9 -Block 0019 [ 44]: f9705c5c75795590 -Block 0019 [ 45]: c985bdee35ef9975 -Block 0019 [ 46]: 2704e5851930ef96 -Block 0019 [ 47]: 1a0fab98a8eeb146 -Block 0019 [ 48]: 2b3f8e80c613ab04 -Block 0019 [ 49]: 50eb91eab2776883 -Block 0019 [ 50]: 5e84a7b8972ac0b9 -Block 0019 [ 51]: 912f4062a68db567 -Block 0019 [ 52]: 18d2895a53a5921a -Block 0019 [ 53]: 72b6255c917acc9d -Block 0019 [ 54]: ca6cbff869322dd0 -Block 0019 [ 55]: eef952be691a20f5 -Block 0019 [ 56]: 6f705f130dfb1557 -Block 0019 [ 57]: bf412cc1f48530d8 -Block 0019 [ 58]: 058cc43ca302c665 -Block 0019 [ 59]: 632f5f954bc426bc -Block 0019 [ 60]: 216b8ee983257087 -Block 0019 [ 61]: 729d14711002bfba -Block 0019 [ 62]: 8cb7a6c5b30b023f -Block 0019 [ 63]: eb895614190db8e6 -Block 0019 [ 64]: 00f6b51593d0001c -Block 0019 [ 65]: c9c6c2f0de55bd01 -Block 0019 [ 66]: 90930dbe0fd64cb7 -Block 0019 [ 67]: 23259875ae38f2cf -Block 0019 [ 68]: 0ba1b821cbdaf400 -Block 0019 [ 69]: 512916bec94d30f5 -Block 0019 [ 70]: 4cbe59d184551f56 -Block 0019 [ 71]: 1b4758db954f1af2 -Block 0019 [ 72]: 428689d6d6e69a0e -Block 0019 [ 73]: 52551a4b2d531690 -Block 0019 [ 74]: 6f77b382d7139995 -Block 0019 [ 75]: d56cc7dc1d2a8ebe -Block 0019 [ 76]: d188bc8c7e0976b6 -Block 0019 [ 77]: 04d67c02573fe79b -Block 0019 [ 78]: 8b87e81756afe094 -Block 0019 [ 79]: 6406121e3bce2c3a -Block 0019 [ 80]: d23e625bbb09019c -Block 0019 [ 81]: 1bee10418eb08329 -Block 0019 [ 82]: 7be1dc14844c01e7 -Block 0019 [ 83]: 91962c941bd83082 -Block 0019 [ 84]: 640a363630d4772b -Block 0019 [ 85]: f63c927e04a4ba60 -Block 0019 [ 86]: eb69466de921d59c -Block 0019 [ 87]: ed7b4721c81f09e2 -Block 0019 [ 88]: c80be87f1549bd5f -Block 0019 [ 89]: a14a421ac5647f3b -Block 0019 [ 90]: 0b5a9db32d7fe7b1 -Block 0019 [ 91]: c00d02fa54401973 -Block 0019 [ 92]: 6c39bdb781e2a2fb -Block 0019 [ 93]: 36cec55cd30d0f07 -Block 0019 [ 94]: 2cf36013bcd3c69c -Block 0019 [ 95]: 5e4f2edb6657692c -Block 0019 [ 96]: 091ea4bc2a7b809b -Block 0019 [ 97]: f3cb77b9e1af72d1 -Block 0019 [ 98]: ee5ff9dc0fd47a05 -Block 0019 [ 99]: dfcd6c3dc2bfcc56 -Block 0019 [100]: f144bf7c7971f6cb -Block 0019 [101]: c3bc32b647c6116b -Block 0019 [102]: da51fbd339bb8629 -Block 0019 [103]: e0f5104e1e073f52 -Block 0019 [104]: 80eabe1f52fac945 -Block 0019 [105]: b3e50ec9dd215058 -Block 0019 [106]: 841fb9a746f218b5 -Block 0019 [107]: 97b5ab9e6340c839 -Block 0019 [108]: 0f58c48d1c8dfc7d -Block 0019 [109]: e775d0923861572f -Block 0019 [110]: f6a445b60873fd29 -Block 0019 [111]: 321d5c299f3a792a -Block 0019 [112]: 167f87905283f049 -Block 0019 [113]: d3a020474f4fb545 -Block 0019 [114]: bab29108eb5c88d3 -Block 0019 [115]: 3a20e0370a1b8925 -Block 0019 [116]: 798fe12f9b6900aa -Block 0019 [117]: ab6c723abdfce5eb -Block 0019 [118]: 02ca78dfbdd788fb -Block 0019 [119]: 4bb50c93fc01969f -Block 0019 [120]: b2370576435c57b9 -Block 0019 [121]: 487a9abad653352f -Block 0019 [122]: bce2e11433162789 -Block 0019 [123]: 803a8adad602226f -Block 0019 [124]: 4e7fb4ec6b000d6f -Block 0019 [125]: c2fe3f7c260f6f0d -Block 0019 [126]: 21ff5ba529b232ee -Block 0019 [127]: 13400b66c4f76b82 -Block 0020 [ 0]: 89e2081ab56e78b2 -Block 0020 [ 1]: 9d963e394a7fb51b -Block 0020 [ 2]: c70adaee1eea37a9 -Block 0020 [ 3]: 69a9c964557a3b79 -Block 0020 [ 4]: c9f94cb30f3f58e2 -Block 0020 [ 5]: f0b2b2f23b6a6e85 -Block 0020 [ 6]: 42a4ab31999785bd -Block 0020 [ 7]: 8e9c274e43e9b45e -Block 0020 [ 8]: de3e2ceae9a6fe03 -Block 0020 [ 9]: da1b6677984cdfe8 -Block 0020 [ 10]: f48a0d27047fb866 -Block 0020 [ 11]: fc08a550adc9d9de -Block 0020 [ 12]: abf2c0384cbb0323 -Block 0020 [ 13]: 293cd3700767b4be -Block 0020 [ 14]: fc5d6f6596e7c186 -Block 0020 [ 15]: 8803591e7d0dbf4e -Block 0020 [ 16]: f97659a838f29b36 -Block 0020 [ 17]: d972e1b0be0d4aab -Block 0020 [ 18]: 4b2b7dfe0b815a55 -Block 0020 [ 19]: dc27f9ee2b42d875 -Block 0020 [ 20]: b3cba9ebfff5b2c9 -Block 0020 [ 21]: aa62216b5929178e -Block 0020 [ 22]: 84f2c8289ad8f965 -Block 0020 [ 23]: 9e7b7d736f2ac92d -Block 0020 [ 24]: fbefb819d94b2750 -Block 0020 [ 25]: df3f3904db85a3ff -Block 0020 [ 26]: 8016900bfb6445da -Block 0020 [ 27]: c16dece77f8c7e00 -Block 0020 [ 28]: a330a89ec3a5567f -Block 0020 [ 29]: a59a7c9114a83803 -Block 0020 [ 30]: 26fa6bdaca72d62b -Block 0020 [ 31]: ffcedf85d5126dd4 -Block 0020 [ 32]: 1cd608003aeac1e5 -Block 0020 [ 33]: c10289c6d8f9d74e -Block 0020 [ 34]: 554a650031d37d60 -Block 0020 [ 35]: e49707264df0b4b0 -Block 0020 [ 36]: 9c9b855d35883c29 -Block 0020 [ 37]: 7639c20cdf1a73fc -Block 0020 [ 38]: c7b98180b14d8b44 -Block 0020 [ 39]: bcca9a6a5ff0e814 -Block 0020 [ 40]: 934da896cc350c97 -Block 0020 [ 41]: 4a7fd6c54c483639 -Block 0020 [ 42]: 03c35c2d2f3d1bb9 -Block 0020 [ 43]: 91aefa9f69fca3f6 -Block 0020 [ 44]: a6b57e87ac0557bc -Block 0020 [ 45]: c734e8728042bf42 -Block 0020 [ 46]: ce8619b03a4fc81b -Block 0020 [ 47]: 1b2e4653286bd5a2 -Block 0020 [ 48]: 566a7ec3ffc55b63 -Block 0020 [ 49]: 3095290ad086d2ab -Block 0020 [ 50]: b7b900312f0d43ff -Block 0020 [ 51]: 4e59f9f7952cc456 -Block 0020 [ 52]: 2ae68fbd3c6898dd -Block 0020 [ 53]: f61aa0d9522ba762 -Block 0020 [ 54]: 908d6dc5774d9795 -Block 0020 [ 55]: 34a6f69f331e26ec -Block 0020 [ 56]: 1e358c8e233d737a -Block 0020 [ 57]: ef28c27583088746 -Block 0020 [ 58]: 8c0c1c359e4cf564 -Block 0020 [ 59]: e92e6baae855892e -Block 0020 [ 60]: 601707524fce7966 -Block 0020 [ 61]: ef1c20a0839a335f -Block 0020 [ 62]: bfa44ce166bbf8c9 -Block 0020 [ 63]: 75778fd2c93656ef -Block 0020 [ 64]: 4c9a92d24230b4e3 -Block 0020 [ 65]: 7393ba1c3f34f583 -Block 0020 [ 66]: def43e4128851116 -Block 0020 [ 67]: 1d0343325dd9afda -Block 0020 [ 68]: 77a184c56dd2daf1 -Block 0020 [ 69]: fa52d0755ef66fd6 -Block 0020 [ 70]: 19b6bfb6fc17b332 -Block 0020 [ 71]: 6023968314c86cf1 -Block 0020 [ 72]: e6ae971aa6ec62cf -Block 0020 [ 73]: 85c7ad07e1a21687 -Block 0020 [ 74]: 626397687c030509 -Block 0020 [ 75]: 423282a89b49ac4f -Block 0020 [ 76]: e37c8c15c1eaed62 -Block 0020 [ 77]: 3a40363589cb1bcb -Block 0020 [ 78]: 38896537a90b4de3 -Block 0020 [ 79]: a9453dd305d96c0c -Block 0020 [ 80]: e39cae1ab2e1286b -Block 0020 [ 81]: 3841a9433a6efbf3 -Block 0020 [ 82]: 6cc65c960c0d9c45 -Block 0020 [ 83]: 8241839366333155 -Block 0020 [ 84]: 928eff87a269246d -Block 0020 [ 85]: 732878e0f9bad41e -Block 0020 [ 86]: d6a1bfa526acb7a1 -Block 0020 [ 87]: 8ab9f839b3c056b0 -Block 0020 [ 88]: c4e6fbad32d6205d -Block 0020 [ 89]: 92ee8c80415b2c23 -Block 0020 [ 90]: d2298d8920afcf84 -Block 0020 [ 91]: b7663bbf35af559f -Block 0020 [ 92]: 24182e3fb8239f5f -Block 0020 [ 93]: 17b6bbbd54d66105 -Block 0020 [ 94]: d0dc543bd229a489 -Block 0020 [ 95]: a87c8ddf7e5eccc9 -Block 0020 [ 96]: f4ccea782545035d -Block 0020 [ 97]: 31b2c512d0e9b274 -Block 0020 [ 98]: 5ab11954f1112d4a -Block 0020 [ 99]: 36dd53c7b85c3853 -Block 0020 [100]: 0cdf8048a452cd87 -Block 0020 [101]: bcbe5c1dfc5ea36d -Block 0020 [102]: 8ed3c84091965d94 -Block 0020 [103]: 84a7ac74afd99f64 -Block 0020 [104]: cea3b16c8e688a0d -Block 0020 [105]: bab4db3705dc5573 -Block 0020 [106]: 679ba8e94cb1c0ee -Block 0020 [107]: 6ef5f18ba4f0e3ff -Block 0020 [108]: 8c4984673fc2ce2f -Block 0020 [109]: 60530f588bd74c30 -Block 0020 [110]: 48cb0a9a28b64c84 -Block 0020 [111]: 3c10b3d5beb4a79c -Block 0020 [112]: 7ff26d639992cf37 -Block 0020 [113]: 720aec460b083524 -Block 0020 [114]: 1e09d19b0e1a00dd -Block 0020 [115]: 8fe278ba6d1a9b20 -Block 0020 [116]: 68baf4f5d15623aa -Block 0020 [117]: 63bfc00118aad83a -Block 0020 [118]: 9d25e1848491d360 -Block 0020 [119]: 6cb99c493aefb52e -Block 0020 [120]: e2eee4f83fe4f010 -Block 0020 [121]: e5e0cef422585a9f -Block 0020 [122]: a19e517ec6959e25 -Block 0020 [123]: abf4475aa22fc3ce -Block 0020 [124]: bcad2f12feb07911 -Block 0020 [125]: 453c5d52011365de -Block 0020 [126]: 69897cc10d44fcaf -Block 0020 [127]: b95f9117d2fa4bfc -Block 0021 [ 0]: 2e53af0ffcf72453 -Block 0021 [ 1]: f4d2ee09bf6e68fa -Block 0021 [ 2]: 0309586ec4f1b841 -Block 0021 [ 3]: 04a6ee34c1719365 -Block 0021 [ 4]: ad8c7240f5745491 -Block 0021 [ 5]: cfadccd354d621e8 -Block 0021 [ 6]: 1fb50aa51f24373a -Block 0021 [ 7]: a0eaa951533cdbfc -Block 0021 [ 8]: 88e80be14fb09e20 -Block 0021 [ 9]: 5956e4b9a89aec1e -Block 0021 [ 10]: f23b6614d091d565 -Block 0021 [ 11]: a8d6810b1fd7b35b -Block 0021 [ 12]: d48796a1dcb92c52 -Block 0021 [ 13]: 3e38c2720cf8d123 -Block 0021 [ 14]: 497df05177535211 -Block 0021 [ 15]: 6987feb6811a5d13 -Block 0021 [ 16]: 40ffa042f1343f14 -Block 0021 [ 17]: cd8423bb29575e16 -Block 0021 [ 18]: b2f2250cadf6ee42 -Block 0021 [ 19]: cd9436ad7a906a5b -Block 0021 [ 20]: a4caba8291763463 -Block 0021 [ 21]: c0450b96a40e1d6f -Block 0021 [ 22]: 922df81edfc8672c -Block 0021 [ 23]: 19fd391d5149a693 -Block 0021 [ 24]: 274659cf928be9ac -Block 0021 [ 25]: f13f9c76b5e1e8b9 -Block 0021 [ 26]: 462a09302c07589f -Block 0021 [ 27]: 6233cce4bcb9604c -Block 0021 [ 28]: 5ada3f773b0a022e -Block 0021 [ 29]: d9824f52f60414bb -Block 0021 [ 30]: fd7d2b394bc7f935 -Block 0021 [ 31]: c652630acaa12963 -Block 0021 [ 32]: b87a925784883817 -Block 0021 [ 33]: 871730bf13fa35e3 -Block 0021 [ 34]: 75d410f433cf9075 -Block 0021 [ 35]: fc9d0f2388fb0755 -Block 0021 [ 36]: 637c2fbdc29699b3 -Block 0021 [ 37]: dcfc58f0240aab69 -Block 0021 [ 38]: 47f63e317ae148a8 -Block 0021 [ 39]: 6e85d5c81fabb692 -Block 0021 [ 40]: 6bbd7a0d80dceece -Block 0021 [ 41]: 5e8763c6ba1dfb3f -Block 0021 [ 42]: 2b67b9b1ee74cae6 -Block 0021 [ 43]: 44556e23b6a12a9c -Block 0021 [ 44]: da67accd90528c8e -Block 0021 [ 45]: c8d64e5987dbf1b8 -Block 0021 [ 46]: a4d299e996095736 -Block 0021 [ 47]: 45cecf89612ed432 -Block 0021 [ 48]: a9e0104756d4ed0a -Block 0021 [ 49]: 96bd5b592d58f449 -Block 0021 [ 50]: a1d4d76c43899d99 -Block 0021 [ 51]: ac92a47c2c3bb722 -Block 0021 [ 52]: a4b54abd56bef9ac -Block 0021 [ 53]: 145584fd48b6e654 -Block 0021 [ 54]: e2b2b5a236df9e1a -Block 0021 [ 55]: 78f71ca730c345f5 -Block 0021 [ 56]: c6653be2c128b6fc -Block 0021 [ 57]: 2b02761b0c1fa9f0 -Block 0021 [ 58]: d7d0ccaf5b6a4ef1 -Block 0021 [ 59]: 4eddcaf6ae19c5d6 -Block 0021 [ 60]: 986f18a1622df37e -Block 0021 [ 61]: 63fe2eafcfaa88ed -Block 0021 [ 62]: 697bb686eb310b15 -Block 0021 [ 63]: 4d36cbe576e44e76 -Block 0021 [ 64]: ecace5129f458bda -Block 0021 [ 65]: f8111733fa1c8bdb -Block 0021 [ 66]: c1b84cac574f86bb -Block 0021 [ 67]: d3c632fa66f74c20 -Block 0021 [ 68]: 3f443c021f0ccb3d -Block 0021 [ 69]: 68e6932baf806b66 -Block 0021 [ 70]: 58cddbf112d26752 -Block 0021 [ 71]: 540b5a73ebf324de -Block 0021 [ 72]: a6f78cb47fa04966 -Block 0021 [ 73]: 05dbc3e897e88dbb -Block 0021 [ 74]: 5400e9f8c028c0d1 -Block 0021 [ 75]: 3c70a7f46bd02139 -Block 0021 [ 76]: 110c4ae844cddb35 -Block 0021 [ 77]: bfa7d83241c23818 -Block 0021 [ 78]: edcaad25b8daf0a8 -Block 0021 [ 79]: 4e25f39c672fd3dd -Block 0021 [ 80]: f73c7d57898cbf89 -Block 0021 [ 81]: 68188c1c0cf25a53 -Block 0021 [ 82]: 2a9faf31cf04b569 -Block 0021 [ 83]: f9431287814fe37e -Block 0021 [ 84]: 243be3b90b38ba25 -Block 0021 [ 85]: 2ff865d3aabd376f -Block 0021 [ 86]: 517977a3c9ab4721 -Block 0021 [ 87]: 1344eb09e10d836d -Block 0021 [ 88]: 22352ab596708b45 -Block 0021 [ 89]: 70318e312b45713b -Block 0021 [ 90]: f1776ae5cdbb977c -Block 0021 [ 91]: 98ecf492f39168d7 -Block 0021 [ 92]: bd6eee889a309d69 -Block 0021 [ 93]: 42c87318994b9192 -Block 0021 [ 94]: e75487bdc5d5fc17 -Block 0021 [ 95]: f56246095cd3d83c -Block 0021 [ 96]: 95d38b3a2bee0e00 -Block 0021 [ 97]: eb854d1b0ae99bfa -Block 0021 [ 98]: 882415de5094207f -Block 0021 [ 99]: e7d79d750bb5a919 -Block 0021 [100]: ce6fac74067139d9 -Block 0021 [101]: 2e1e4eb6ba0bff7f -Block 0021 [102]: 6fd197b1fc11fbb7 -Block 0021 [103]: b50b9c7241ea857f -Block 0021 [104]: c5055a1cc6627673 -Block 0021 [105]: d10ef73892c24811 -Block 0021 [106]: 5fdece9bf5a0922c -Block 0021 [107]: d72210546b9ed17e -Block 0021 [108]: 67bc46392660cb91 -Block 0021 [109]: b9e5e47d1700a0a5 -Block 0021 [110]: 3cfc03ee00186042 -Block 0021 [111]: 79c5e50b190fef69 -Block 0021 [112]: ef4c795b859d9da3 -Block 0021 [113]: 2d35cec5c1107fe7 -Block 0021 [114]: c5af4ae73a397b8b -Block 0021 [115]: 991371cf40815432 -Block 0021 [116]: 14eb4ce84a65d07b -Block 0021 [117]: d59def0e00fdf27e -Block 0021 [118]: bf6a452ac1bdcaa9 -Block 0021 [119]: 2c8c674766f0864e -Block 0021 [120]: 5aacb9ad7aae4664 -Block 0021 [121]: e3bb57f7b3fdc1ef -Block 0021 [122]: 63ff45b42def5846 -Block 0021 [123]: 1fd1958c4fd3db2a -Block 0021 [124]: 1cc4429b52fe74f4 -Block 0021 [125]: 177bc5006d309d61 -Block 0021 [126]: df06b53a2374935f -Block 0021 [127]: 846f56c0e0199b09 -Block 0022 [ 0]: f0055544a8a66da3 -Block 0022 [ 1]: cdacd919de93783e -Block 0022 [ 2]: 97f4db38d37eeb63 -Block 0022 [ 3]: bbc6005afe3b391f -Block 0022 [ 4]: 39453f1a16a99f6e -Block 0022 [ 5]: de60a9e4640d8d2a -Block 0022 [ 6]: 62458a8a90a3d3cb -Block 0022 [ 7]: e1a0a8dddfd694e3 -Block 0022 [ 8]: f1910aa3624bd380 -Block 0022 [ 9]: be922abb3b4e3611 -Block 0022 [ 10]: 80c904701bfd133a -Block 0022 [ 11]: 3928fead5a645d9e -Block 0022 [ 12]: 4cc74f7f222d03ed -Block 0022 [ 13]: d0bc3853685a26f1 -Block 0022 [ 14]: 2f0fe1f6a7f76173 -Block 0022 [ 15]: dbcf422aa98d10d7 -Block 0022 [ 16]: 90e21ad1620963bb -Block 0022 [ 17]: db51c68d42dba8a1 -Block 0022 [ 18]: fafbae7409259cb2 -Block 0022 [ 19]: 52b69193864cc071 -Block 0022 [ 20]: 469d7827ed811032 -Block 0022 [ 21]: 14b2829c68b218b5 -Block 0022 [ 22]: 988892a5cb23313e -Block 0022 [ 23]: 7c5dca957c103b98 -Block 0022 [ 24]: df4bbc097a837981 -Block 0022 [ 25]: 2011417f5d39bd07 -Block 0022 [ 26]: eb9431f73df35f3d -Block 0022 [ 27]: 2009d2e8ac8ef52f -Block 0022 [ 28]: 8dab9e07d07f1b42 -Block 0022 [ 29]: 8e6a29c7f42c8637 -Block 0022 [ 30]: 3d1190f642641e80 -Block 0022 [ 31]: fced87abd38c315d -Block 0022 [ 32]: 04c4a8db5579b4fe -Block 0022 [ 33]: ea0cb649d964d9d7 -Block 0022 [ 34]: 70dd1c19230a475f -Block 0022 [ 35]: df22428fcc8f233e -Block 0022 [ 36]: 67cc6440482ef9a4 -Block 0022 [ 37]: ab95961940393dea -Block 0022 [ 38]: 7254b13ee0a68318 -Block 0022 [ 39]: f7b9c47a884d55cb -Block 0022 [ 40]: 189fbf3c55d2e89b -Block 0022 [ 41]: 9bd08c8067c10b08 -Block 0022 [ 42]: 597b3fbb3b1acb52 -Block 0022 [ 43]: 9f26e9bf7054c44c -Block 0022 [ 44]: ba90c0be3b113827 -Block 0022 [ 45]: 7ccf834cd647176a -Block 0022 [ 46]: f5e7f7c012401b91 -Block 0022 [ 47]: fb8bb2c9f8ee3a18 -Block 0022 [ 48]: bf00c504ea2160de -Block 0022 [ 49]: a9b185b64b2d534b -Block 0022 [ 50]: f9de1b7d13834000 -Block 0022 [ 51]: cc1b7969b3e035e0 -Block 0022 [ 52]: e6217156fbab7f7f -Block 0022 [ 53]: 286de6b5d5201f7f -Block 0022 [ 54]: cf012128fb6319ff -Block 0022 [ 55]: 76666fd989324c40 -Block 0022 [ 56]: 4ea7259afae53efb -Block 0022 [ 57]: 87a5ed4f0a8fff9b -Block 0022 [ 58]: 587c0fcfaad8121d -Block 0022 [ 59]: b97d07e01372cb75 -Block 0022 [ 60]: f2427574f2bd08a4 -Block 0022 [ 61]: c73ed9aa0a72f689 -Block 0022 [ 62]: 0e5b7d2cbd12bf6f -Block 0022 [ 63]: 257263442e299978 -Block 0022 [ 64]: 46c0b8d4fdbab0ee -Block 0022 [ 65]: 53a37a6e716a6747 -Block 0022 [ 66]: 7148161554525e66 -Block 0022 [ 67]: e29136a0ef2fca6c -Block 0022 [ 68]: b2495652b43df870 -Block 0022 [ 69]: d328dcac872d5623 -Block 0022 [ 70]: f025f96d1fe7181c -Block 0022 [ 71]: d857f1856f5821a9 -Block 0022 [ 72]: d0d1f3a0a6a3bfd2 -Block 0022 [ 73]: a394175356089b4a -Block 0022 [ 74]: dcb547e12b9f51dd -Block 0022 [ 75]: 03e89f2d8832bcd0 -Block 0022 [ 76]: 3fcf81ea646ffdec -Block 0022 [ 77]: 9811080c51ed8898 -Block 0022 [ 78]: 7f1955428a5ab71c -Block 0022 [ 79]: 904c1d262f4697fe -Block 0022 [ 80]: 71e299786f4153af -Block 0022 [ 81]: 03bf7656a59378d0 -Block 0022 [ 82]: 134e3117146b0ec3 -Block 0022 [ 83]: b5a105a68f0e0285 -Block 0022 [ 84]: 8e332c18345792c0 -Block 0022 [ 85]: 1c8a1b9311af8035 -Block 0022 [ 86]: da7ba0f9ddfe3ca6 -Block 0022 [ 87]: 7b3f169f787ad5fd -Block 0022 [ 88]: 1eee01d5233b877d -Block 0022 [ 89]: bdad3fa8e33afa81 -Block 0022 [ 90]: 9bbc15b8f5fb7063 -Block 0022 [ 91]: 432f6b4d1905ec3f -Block 0022 [ 92]: f2d2365eca7ba1b9 -Block 0022 [ 93]: 97e2f5a82b925ba0 -Block 0022 [ 94]: fbc0fadc13d4564a -Block 0022 [ 95]: b2ad0bee976cc199 -Block 0022 [ 96]: 17f8c2b7bdbb67ff -Block 0022 [ 97]: be69957d7a56dbe9 -Block 0022 [ 98]: 79ea684556110c84 -Block 0022 [ 99]: 907836169c0a3ed0 -Block 0022 [100]: 529cfcde28e86278 -Block 0022 [101]: ec6c52c7c521e753 -Block 0022 [102]: 6d4b0089b66db0f7 -Block 0022 [103]: 8f52889ca92d1ca1 -Block 0022 [104]: 712b763cf1461916 -Block 0022 [105]: c2f0e7bcab362673 -Block 0022 [106]: 7e37c9354c58c3c6 -Block 0022 [107]: e92e77e0fb03dd9c -Block 0022 [108]: af01ae66d8933069 -Block 0022 [109]: c177af2038666fb7 -Block 0022 [110]: ef8d51bd9f8fc316 -Block 0022 [111]: 8fc7ad7cd464e4db -Block 0022 [112]: 77b2c5d08e22e032 -Block 0022 [113]: 45b7b9a307de1b30 -Block 0022 [114]: 799e4a09a2567d1b -Block 0022 [115]: 48aefad5c1d4b969 -Block 0022 [116]: 81bd46d517aa797f -Block 0022 [117]: 863d3836c0c64d38 -Block 0022 [118]: a80930810c4b2661 -Block 0022 [119]: bb01f4029f69250a -Block 0022 [120]: 0886cc90560770cc -Block 0022 [121]: 42f0f28407b02147 -Block 0022 [122]: bbeb300621e965a5 -Block 0022 [123]: dc517baac3ca7837 -Block 0022 [124]: ea2d75283572876b -Block 0022 [125]: acc64495739e7ca9 -Block 0022 [126]: 549e0c6ecc48dbb2 -Block 0022 [127]: 5116a7094206d198 -Block 0023 [ 0]: 35a67e548212b65a -Block 0023 [ 1]: 47a597dd7729d580 -Block 0023 [ 2]: 4f4d6c3d73cd4492 -Block 0023 [ 3]: 6fea5e56611b0a46 -Block 0023 [ 4]: a0dba662fd6b63eb -Block 0023 [ 5]: 0f01e27d84bee3dc -Block 0023 [ 6]: 4870943c3036e680 -Block 0023 [ 7]: 20b20c677c15275c -Block 0023 [ 8]: 6f01bc825322649f -Block 0023 [ 9]: 4110d224d880ec5c -Block 0023 [ 10]: d7973558f1e07cb4 -Block 0023 [ 11]: 511e22e748073a68 -Block 0023 [ 12]: b7bc8abedf5d7251 -Block 0023 [ 13]: 4f64508c05105c35 -Block 0023 [ 14]: 62bbf36b6d1ff161 -Block 0023 [ 15]: 4bde3ecb4471ae65 -Block 0023 [ 16]: ead26f76d51554b6 -Block 0023 [ 17]: 7b3458dff62b800f -Block 0023 [ 18]: a084ba6ce74c1eb9 -Block 0023 [ 19]: df609dbb8ab6265d -Block 0023 [ 20]: d2ae1cdce8efdf99 -Block 0023 [ 21]: d806c82cfc649816 -Block 0023 [ 22]: c3ed6017e8689558 -Block 0023 [ 23]: 2a415ef2d37108f9 -Block 0023 [ 24]: 2175b37e3691c307 -Block 0023 [ 25]: 73b750467289ce4c -Block 0023 [ 26]: 2f839c6ddaacbdf5 -Block 0023 [ 27]: 011e1736ccb05edc -Block 0023 [ 28]: ab899953fb5935c7 -Block 0023 [ 29]: d8ffcb98d41f8f2f -Block 0023 [ 30]: f0f9066153f1709b -Block 0023 [ 31]: 8b37d3c770e07bed -Block 0023 [ 32]: 617653ad907f68c2 -Block 0023 [ 33]: 9f2e89d721331c2f -Block 0023 [ 34]: b3fdbe13e5c5475b -Block 0023 [ 35]: 5014a37260ef1027 -Block 0023 [ 36]: 44ebc51f31d5648f -Block 0023 [ 37]: cf1e345a2278c411 -Block 0023 [ 38]: 9527cdb440d9d570 -Block 0023 [ 39]: fc1c61d0d22f0234 -Block 0023 [ 40]: dc170707a41d02bc -Block 0023 [ 41]: 4f20a8a6b536d6a6 -Block 0023 [ 42]: c9d1d992c5177320 -Block 0023 [ 43]: b2d08f4e16e0ead0 -Block 0023 [ 44]: 644e66e97d0a76a7 -Block 0023 [ 45]: 932b1d6b4bf97250 -Block 0023 [ 46]: 8553d2e3f36287ab -Block 0023 [ 47]: e66ee506aeff7310 -Block 0023 [ 48]: e2df446fadcc1bbc -Block 0023 [ 49]: 4e68292d5e271c1e -Block 0023 [ 50]: 82d3a1669e44216b -Block 0023 [ 51]: 7fe477b396245eaa -Block 0023 [ 52]: d64caf9f56a25d4f -Block 0023 [ 53]: 168cad48469c2814 -Block 0023 [ 54]: cf80d1426fd4d12f -Block 0023 [ 55]: 438c56732fb88f97 -Block 0023 [ 56]: 95be9d4df9078f11 -Block 0023 [ 57]: 2c324be70809d4b0 -Block 0023 [ 58]: 6526998522b6a01e -Block 0023 [ 59]: e2bd9aa42195e196 -Block 0023 [ 60]: b40d71d74220de38 -Block 0023 [ 61]: d6e5b4ab8bd94e50 -Block 0023 [ 62]: ed4fae73a1bcfcd8 -Block 0023 [ 63]: b00f6d5d13555317 -Block 0023 [ 64]: 99740378ef630c6d -Block 0023 [ 65]: f6a7e5b72e6aa9ec -Block 0023 [ 66]: 4c5048997311b874 -Block 0023 [ 67]: 62da86a8e0bc516c -Block 0023 [ 68]: 3ef48da188d9c901 -Block 0023 [ 69]: 8eb3ac3b10af96f0 -Block 0023 [ 70]: d4a7c9a80237d4fa -Block 0023 [ 71]: 2a92923febbe2b1e -Block 0023 [ 72]: 957330d6817f55bb -Block 0023 [ 73]: bcd4fee916ef8197 -Block 0023 [ 74]: 92b3dae57a69e496 -Block 0023 [ 75]: 44ce49a2c22b1985 -Block 0023 [ 76]: 10a8624ca831fe9a -Block 0023 [ 77]: ac59a462bc479f25 -Block 0023 [ 78]: 06e0f2b14d9de57d -Block 0023 [ 79]: f7ebe6eb30b76c91 -Block 0023 [ 80]: a290cc65e72977b8 -Block 0023 [ 81]: c53025ea87d0d76d -Block 0023 [ 82]: 8b1d31e588f27e7e -Block 0023 [ 83]: 85e3b5998e045553 -Block 0023 [ 84]: e5ef1b6888c1ede3 -Block 0023 [ 85]: d3682fe7748090c6 -Block 0023 [ 86]: 18121bcf94337603 -Block 0023 [ 87]: c0f5aa67be8bdd90 -Block 0023 [ 88]: 0f97bb8a07aa0937 -Block 0023 [ 89]: 98aca43aae3d20a3 -Block 0023 [ 90]: 6daeb804404c39a2 -Block 0023 [ 91]: 2373de1540bba42a -Block 0023 [ 92]: 8d9d3261981ecae3 -Block 0023 [ 93]: af3e00f0032cc72e -Block 0023 [ 94]: 4ce3496aa0fb8655 -Block 0023 [ 95]: ad07c56975938caf -Block 0023 [ 96]: 88e0b8c9d2b54f50 -Block 0023 [ 97]: c427840539ee5821 -Block 0023 [ 98]: 6717c698b370aec4 -Block 0023 [ 99]: d1e341823d56df4c -Block 0023 [100]: 82c29686c67b57ab -Block 0023 [101]: 7819999440faf2c7 -Block 0023 [102]: 4bc4c03f6165ed12 -Block 0023 [103]: ec6aeb644e48ddaa -Block 0023 [104]: 5a008d97e36f737d -Block 0023 [105]: 428d8b4bd1b95382 -Block 0023 [106]: f3221d2ae6f23867 -Block 0023 [107]: d92f795d6158a7e4 -Block 0023 [108]: eda1169cacd46e8e -Block 0023 [109]: 275acbab7e64c866 -Block 0023 [110]: cb4ecb99b9940ea1 -Block 0023 [111]: c3c77f0efcf1e959 -Block 0023 [112]: 41928e20fb40d811 -Block 0023 [113]: e08e5064a84575e0 -Block 0023 [114]: aec4b3870e8be76b -Block 0023 [115]: 3530333223726e1f -Block 0023 [116]: f8d3bf85e583ffde -Block 0023 [117]: 0171584e95f38c8e -Block 0023 [118]: 5d06a52835a771bd -Block 0023 [119]: e97b95f46a318115 -Block 0023 [120]: 08fcd8dbb4b5dc88 -Block 0023 [121]: 684999374c097e8f -Block 0023 [122]: 35ea6d01484a577d -Block 0023 [123]: fb01d73e1d552919 -Block 0023 [124]: a1490ccf830745c5 -Block 0023 [125]: b0bbef60d9833111 -Block 0023 [126]: 477c02fd95e838d6 -Block 0023 [127]: 8baa884f5ed6c02b -Block 0024 [ 0]: d061ed936e1a32d3 -Block 0024 [ 1]: 541a30c0b95ffea7 -Block 0024 [ 2]: 1928de5e1f440c51 -Block 0024 [ 3]: c9f14c74dac24ab2 -Block 0024 [ 4]: fe4f84507d62789a -Block 0024 [ 5]: c331d363c2c8c0a9 -Block 0024 [ 6]: e747c23cec188011 -Block 0024 [ 7]: b78f6b4cbbdd4934 -Block 0024 [ 8]: 28581eafaca26cba -Block 0024 [ 9]: 44b5ae30d6118faa -Block 0024 [ 10]: 7bcf55d440d2688a -Block 0024 [ 11]: 51ca3b4d6b156519 -Block 0024 [ 12]: e5666e5b1b35e022 -Block 0024 [ 13]: dfddbfab40c9ff3a -Block 0024 [ 14]: 188654eef14df41c -Block 0024 [ 15]: 55600accb5cac797 -Block 0024 [ 16]: 4fc9cc2498403e32 -Block 0024 [ 17]: 00e5021cbb66d69d -Block 0024 [ 18]: 364c7398079d7de6 -Block 0024 [ 19]: 849b9218651c4338 -Block 0024 [ 20]: ac1740598af70ad2 -Block 0024 [ 21]: 0799297570e3afa3 -Block 0024 [ 22]: 2732b513a96712de -Block 0024 [ 23]: dc13860cf73ff7b3 -Block 0024 [ 24]: 45b81cea5644bbe4 -Block 0024 [ 25]: 2bac4d9df968b6d7 -Block 0024 [ 26]: 1c2c19f0a424895d -Block 0024 [ 27]: 743629acd72ee78f -Block 0024 [ 28]: 6938084dd1a25f3c -Block 0024 [ 29]: 5d8fdef799f3a7a7 -Block 0024 [ 30]: 32c9dd570ee7f229 -Block 0024 [ 31]: 635275210d4dcc60 -Block 0024 [ 32]: 0b6a30a0f9d8cd62 -Block 0024 [ 33]: 325b6147f91b93d2 -Block 0024 [ 34]: 5693c3b83d29486d -Block 0024 [ 35]: 9ae916389575f4dc -Block 0024 [ 36]: a9ac27bdf4920386 -Block 0024 [ 37]: fb2b943c71b1f651 -Block 0024 [ 38]: b3439452a404a424 -Block 0024 [ 39]: d7ca3d322ddd0d34 -Block 0024 [ 40]: cfb81600244f133f -Block 0024 [ 41]: c4fc0f63568bc898 -Block 0024 [ 42]: 40e4716f08a63a3b -Block 0024 [ 43]: c0e487f16e9e4031 -Block 0024 [ 44]: 240146e7c19878bf -Block 0024 [ 45]: 0e41626ba08e23a5 -Block 0024 [ 46]: 9f195c84461c825b -Block 0024 [ 47]: 9c3f6c6a2966f0a8 -Block 0024 [ 48]: 45853ff7c0b93daf -Block 0024 [ 49]: 7db484a6bfbe0427 -Block 0024 [ 50]: ae168d723e3413fd -Block 0024 [ 51]: 070dd51541ac7eea -Block 0024 [ 52]: d52cdead741239e7 -Block 0024 [ 53]: b0fcd63276cb4aea -Block 0024 [ 54]: 8c967ddb1d15730f -Block 0024 [ 55]: dd469e509bd1432e -Block 0024 [ 56]: 624a5f0f28028f6e -Block 0024 [ 57]: 2d4963cd135783d7 -Block 0024 [ 58]: 459365718bb4c0df -Block 0024 [ 59]: 9ee458e2ebfb4331 -Block 0024 [ 60]: 774ab6c8d85d0c23 -Block 0024 [ 61]: 9386c117e41e29b7 -Block 0024 [ 62]: 45cce696de9d97e8 -Block 0024 [ 63]: b678a357a46dbd0c -Block 0024 [ 64]: 2d0923ed6e8904ef -Block 0024 [ 65]: ff4b8d2913c5114e -Block 0024 [ 66]: dc05ff473012b91b -Block 0024 [ 67]: b817c71405fa2b47 -Block 0024 [ 68]: c1b8451cc37ca669 -Block 0024 [ 69]: b53274d2bc303d21 -Block 0024 [ 70]: 0b585e8da0c28ec0 -Block 0024 [ 71]: 96d1c3f9b6316fd0 -Block 0024 [ 72]: 9d751e17ddb84b92 -Block 0024 [ 73]: 15cd8f9877d08621 -Block 0024 [ 74]: 31427e152ae1f228 -Block 0024 [ 75]: 58c308b9049a1a35 -Block 0024 [ 76]: a7c6d337bea4cd79 -Block 0024 [ 77]: c74a3612bb6c2920 -Block 0024 [ 78]: bcd995a490138eca -Block 0024 [ 79]: 3ab8aa80102b731c -Block 0024 [ 80]: 12ca895d089a075d -Block 0024 [ 81]: 90ca0070cac5d46c -Block 0024 [ 82]: 79cf2adead63539a -Block 0024 [ 83]: aa2b9edc6e245007 -Block 0024 [ 84]: b85174b8df690554 -Block 0024 [ 85]: a714f0d57ded76c1 -Block 0024 [ 86]: eee45ed25c8026a0 -Block 0024 [ 87]: 7ffceacdb23db6d5 -Block 0024 [ 88]: d081599d922b548e -Block 0024 [ 89]: bdc6c423c6dfbd46 -Block 0024 [ 90]: ac97234b39a66ea0 -Block 0024 [ 91]: 8354643289ab2777 -Block 0024 [ 92]: 7768471ee706bcfc -Block 0024 [ 93]: d5d5558b0f65d5e8 -Block 0024 [ 94]: 4fcccd6440c9993f -Block 0024 [ 95]: e2349553b73474a8 -Block 0024 [ 96]: 2298b2c517299e44 -Block 0024 [ 97]: 5c71ae34b1646e7c -Block 0024 [ 98]: bb2f21e33ef80226 -Block 0024 [ 99]: c1d6744c0daa4ec1 -Block 0024 [100]: d1c2045ba1c82a86 -Block 0024 [101]: d827935d52f05a26 -Block 0024 [102]: 641bc1718fbdd804 -Block 0024 [103]: 1e93f35ba580c78d -Block 0024 [104]: 38dcd866d4ba60b0 -Block 0024 [105]: c569e6c978d6370f -Block 0024 [106]: 665b6de1b84e4d1e -Block 0024 [107]: 59e8c6d2e0ef07b3 -Block 0024 [108]: 1019324ba6f47ddf -Block 0024 [109]: bf453a53194efe17 -Block 0024 [110]: 740c895bd04b3212 -Block 0024 [111]: 279d7d4e8a17205a -Block 0024 [112]: bf0562156ec46599 -Block 0024 [113]: f4cfe480afee6fd0 -Block 0024 [114]: 6dc65fde295bc25c -Block 0024 [115]: 608aa55b507597a1 -Block 0024 [116]: 10bad16db28743f2 -Block 0024 [117]: 16b24343b9778d3f -Block 0024 [118]: f94e6c6b43502e95 -Block 0024 [119]: 048837063d6a0f2f -Block 0024 [120]: 6010c23f59e2b3be -Block 0024 [121]: 33051c610ff7a8e3 -Block 0024 [122]: 456dd3fb90581e01 -Block 0024 [123]: 61f13604e9cba016 -Block 0024 [124]: 5abbea569a465d20 -Block 0024 [125]: e099ef641551a3b3 -Block 0024 [126]: 34f9bda1ee9bdb9f -Block 0024 [127]: cbe1f2c55812a488 -Block 0025 [ 0]: 70ebd121a7257a28 -Block 0025 [ 1]: ee4c2ac9909ac584 -Block 0025 [ 2]: adfaf99676dc4eff -Block 0025 [ 3]: 5bb604144163d732 -Block 0025 [ 4]: 04ba77fee44bca6d -Block 0025 [ 5]: 117632540e9a1351 -Block 0025 [ 6]: 821fd24564be611b -Block 0025 [ 7]: ee6d3854f8aa8e6a -Block 0025 [ 8]: bd5d0386e54bf100 -Block 0025 [ 9]: 5fd6ff010f7ffccf -Block 0025 [ 10]: 6280ead5f8ce3ce8 -Block 0025 [ 11]: 8fefeea8a3ecfeea -Block 0025 [ 12]: 568373e8752d762d -Block 0025 [ 13]: c7aeb28c1a22213f -Block 0025 [ 14]: 135ac6f83c51250a -Block 0025 [ 15]: e0351d9290e44c26 -Block 0025 [ 16]: 721d1f259e59b608 -Block 0025 [ 17]: 9e75d7f84f0bc4d8 -Block 0025 [ 18]: 77f1351a7349e3de -Block 0025 [ 19]: bd90c3924bafa69f -Block 0025 [ 20]: 894a4d6baa341ef8 -Block 0025 [ 21]: e9507179545ecad6 -Block 0025 [ 22]: 71d116328734e1af -Block 0025 [ 23]: d8098eaea09439a8 -Block 0025 [ 24]: 5d991df3c678bb33 -Block 0025 [ 25]: 667e9c87829af175 -Block 0025 [ 26]: f1f640695d856a45 -Block 0025 [ 27]: ea5c53d6c2c5ee2c -Block 0025 [ 28]: a0ac38bbb6105a03 -Block 0025 [ 29]: 312001c836009739 -Block 0025 [ 30]: 626988741f041169 -Block 0025 [ 31]: c04eb57fcdc6dc28 -Block 0025 [ 32]: 8631d3c1eae8d8a1 -Block 0025 [ 33]: b86a0341a6aace14 -Block 0025 [ 34]: c1ee46fe54acb220 -Block 0025 [ 35]: e010f93accc68429 -Block 0025 [ 36]: 3059b9d96afd0981 -Block 0025 [ 37]: 55107999b1e215cd -Block 0025 [ 38]: 6f8efceccadf69ca -Block 0025 [ 39]: f949524531c51bbc -Block 0025 [ 40]: 7d72a929f74af045 -Block 0025 [ 41]: 7672dc7082c41bab -Block 0025 [ 42]: f3def1f446699d0a -Block 0025 [ 43]: d4814bce24153b17 -Block 0025 [ 44]: e216945683f065f7 -Block 0025 [ 45]: 576411a7012ca38d -Block 0025 [ 46]: 723090d9c993b2ee -Block 0025 [ 47]: 4d823fefc8f9035c -Block 0025 [ 48]: cf0f4589118758a4 -Block 0025 [ 49]: b1d4460fa64aa621 -Block 0025 [ 50]: 94e82983b5173949 -Block 0025 [ 51]: ee5d570d4e61dcb1 -Block 0025 [ 52]: 357d37a1ae5df910 -Block 0025 [ 53]: 11f0a3fb6b7421c8 -Block 0025 [ 54]: 0aca0f137cfa300a -Block 0025 [ 55]: dd6d6f5bec942848 -Block 0025 [ 56]: 66d79c4704c0c2cf -Block 0025 [ 57]: ffe19bb80d92656a -Block 0025 [ 58]: c1bd6d50fa655462 -Block 0025 [ 59]: 4839837755a6182c -Block 0025 [ 60]: c20dfc55eaa2b63d -Block 0025 [ 61]: aefdf12048445e78 -Block 0025 [ 62]: 732fde83bd73a479 -Block 0025 [ 63]: db9e3a074d14bc35 -Block 0025 [ 64]: 5086f3fe923e5c95 -Block 0025 [ 65]: d12d3f7ff1b1447a -Block 0025 [ 66]: a6b5e44c58356eb0 -Block 0025 [ 67]: 472b0aa28e7d6b9b -Block 0025 [ 68]: 0f8dd423906ccf22 -Block 0025 [ 69]: a8295f1a3a00bcca -Block 0025 [ 70]: 76c5f59eea1920b0 -Block 0025 [ 71]: 5ae795cdbf364338 -Block 0025 [ 72]: 23952cc743c68ba3 -Block 0025 [ 73]: 5810730a92bfd13f -Block 0025 [ 74]: f956febc1edb9e2f -Block 0025 [ 75]: 55e31c195108a36f -Block 0025 [ 76]: e02b758b63004a43 -Block 0025 [ 77]: 60497305b0cd869d -Block 0025 [ 78]: b18c2987b2938143 -Block 0025 [ 79]: a49174eb08fa5d31 -Block 0025 [ 80]: e3b098abb1b7ecc7 -Block 0025 [ 81]: 0f057184a4fa53d4 -Block 0025 [ 82]: 57b34bf21444321c -Block 0025 [ 83]: 607c182ca523340b -Block 0025 [ 84]: 804edac2f1b00605 -Block 0025 [ 85]: 101a6b49ceaca684 -Block 0025 [ 86]: 447a34a4fb951403 -Block 0025 [ 87]: dbc1eb36865c36a2 -Block 0025 [ 88]: af4abc94ba557920 -Block 0025 [ 89]: 1d698533ab769326 -Block 0025 [ 90]: 5c3426b817abb8f0 -Block 0025 [ 91]: f38cecd553c531d2 -Block 0025 [ 92]: ef3694fcc3d99451 -Block 0025 [ 93]: 53bfda338a59ab41 -Block 0025 [ 94]: c6f5fb7b6029de2d -Block 0025 [ 95]: e3fc04c1f36144a8 -Block 0025 [ 96]: 820737f3b4eacb98 -Block 0025 [ 97]: 85cec89abce81975 -Block 0025 [ 98]: 745271c6bc864740 -Block 0025 [ 99]: 1c0811cf1c431e19 -Block 0025 [100]: 4d99ff91c0c64d1a -Block 0025 [101]: 979cb0118168a9fb -Block 0025 [102]: d53fa0291a3d76e0 -Block 0025 [103]: 1ce5fbd785ad370a -Block 0025 [104]: 6d7049f9344ec655 -Block 0025 [105]: 53f7839ff27c66c7 -Block 0025 [106]: fc9a2098d2211301 -Block 0025 [107]: f5f926c8bd4c4d01 -Block 0025 [108]: 3b058a18e77f9bb1 -Block 0025 [109]: ca320ef75bca7535 -Block 0025 [110]: 79339df3ec05b866 -Block 0025 [111]: c816026a714092bd -Block 0025 [112]: b82d81735606531e -Block 0025 [113]: d8268ae55a6131ce -Block 0025 [114]: 4f268372782968b5 -Block 0025 [115]: a3062a5aeb9384dd -Block 0025 [116]: 65dcc349c62b4191 -Block 0025 [117]: 85f5779531f46af1 -Block 0025 [118]: 43787b67d0c1778c -Block 0025 [119]: 73f5ed29f3e61e5d -Block 0025 [120]: 449b111b7e54e5e0 -Block 0025 [121]: 8f880be186dee777 -Block 0025 [122]: 3ab3a6d0e2493169 -Block 0025 [123]: 95852a5bee3d5164 -Block 0025 [124]: 90b38d7051960232 -Block 0025 [125]: 936e413aeae9d225 -Block 0025 [126]: 54774428cd567644 -Block 0025 [127]: 14be833fb3c1ac88 -Block 0026 [ 0]: fb487be18df7eb8d -Block 0026 [ 1]: 2412501be404fb4e -Block 0026 [ 2]: d7b2c081d9131080 -Block 0026 [ 3]: 0a581196251f1831 -Block 0026 [ 4]: bded1e5259f76500 -Block 0026 [ 5]: 6016730d78d0bc53 -Block 0026 [ 6]: 52f90543516e0fb9 -Block 0026 [ 7]: d02d45cd3f1a17b5 -Block 0026 [ 8]: a0d5c083921cbaa6 -Block 0026 [ 9]: eb736849ae0115bb -Block 0026 [ 10]: 38499c85645ea09f -Block 0026 [ 11]: 073a5dba363f3553 -Block 0026 [ 12]: 59b34c2590679624 -Block 0026 [ 13]: 5e2de51bca2407a9 -Block 0026 [ 14]: aac20d25a2b2ed15 -Block 0026 [ 15]: 244859ec8edc3cbb -Block 0026 [ 16]: 618a3558f289a76f -Block 0026 [ 17]: 40f3419b8ed0524d -Block 0026 [ 18]: d868a3a6e0a5d7df -Block 0026 [ 19]: 6f96de68338ea557 -Block 0026 [ 20]: 870fb44e701b4404 -Block 0026 [ 21]: 61c567f8db2a6ce5 -Block 0026 [ 22]: 169cdd5f6449f530 -Block 0026 [ 23]: e9810f4bcc425020 -Block 0026 [ 24]: 3152e7edc348cf7a -Block 0026 [ 25]: 9eac974a1e5b0350 -Block 0026 [ 26]: 99c7a8f313578337 -Block 0026 [ 27]: c724d4256fc1241a -Block 0026 [ 28]: 3ee0245454922982 -Block 0026 [ 29]: c6441c8af990ced6 -Block 0026 [ 30]: dbac5d89ef4f3e2a -Block 0026 [ 31]: 414aa7cd0f754e55 -Block 0026 [ 32]: 489bc0760eda7b07 -Block 0026 [ 33]: fd383b765fb81891 -Block 0026 [ 34]: 4d852ceed348635c -Block 0026 [ 35]: 811cb9f91082156e -Block 0026 [ 36]: aa7fcfdf2c355044 -Block 0026 [ 37]: 9f35f2708fd615b6 -Block 0026 [ 38]: 3321a64e9ed24a5f -Block 0026 [ 39]: 4fe9684a31256a87 -Block 0026 [ 40]: 0f583fe70d6982a0 -Block 0026 [ 41]: a6755d33ea305335 -Block 0026 [ 42]: 2263c8affb70cd87 -Block 0026 [ 43]: 6d582e490d23613d -Block 0026 [ 44]: d3f6775090e90406 -Block 0026 [ 45]: 8cf43fe930e2f86e -Block 0026 [ 46]: fe4542378bbd625c -Block 0026 [ 47]: 8d660ec74c5a6c6e -Block 0026 [ 48]: 9f7c3ff4997a8c11 -Block 0026 [ 49]: 44256d91adf7b314 -Block 0026 [ 50]: 857e5e379b306054 -Block 0026 [ 51]: 28a4891ccbd52570 -Block 0026 [ 52]: fa3ee9dad4f01df4 -Block 0026 [ 53]: 18f98918c7f237b9 -Block 0026 [ 54]: 294fd5c947a31bab -Block 0026 [ 55]: 06295a7262a12b86 -Block 0026 [ 56]: 5a5a7a7eba41739d -Block 0026 [ 57]: 4d98727eb9f6bcf9 -Block 0026 [ 58]: 49e3cb6ab07fec0e -Block 0026 [ 59]: 962e2140c0a21b25 -Block 0026 [ 60]: 86069730a4abf3ed -Block 0026 [ 61]: fc22af18ec18d2c4 -Block 0026 [ 62]: 5fa009f2eaad07c6 -Block 0026 [ 63]: 08c58faf884a793f -Block 0026 [ 64]: 986adc48582ffb12 -Block 0026 [ 65]: dc77fa6a85a5e76d -Block 0026 [ 66]: c29359fe2f1ee366 -Block 0026 [ 67]: 23087c88088978ca -Block 0026 [ 68]: 7c1c4bb1f4297c1e -Block 0026 [ 69]: ef501ae32f369047 -Block 0026 [ 70]: 8a79d9699334e928 -Block 0026 [ 71]: aab7b483178735ff -Block 0026 [ 72]: 622ec4e95fbe36bd -Block 0026 [ 73]: eb0bf85db3bc78a8 -Block 0026 [ 74]: f44be5060f166f98 -Block 0026 [ 75]: 6255bfff5f971965 -Block 0026 [ 76]: 52f61bc236ac1b65 -Block 0026 [ 77]: f23b70892420cefe -Block 0026 [ 78]: 6e8f53f9674910e6 -Block 0026 [ 79]: d7132b9c00a6ad7c -Block 0026 [ 80]: 020bc2685469901d -Block 0026 [ 81]: 108cd38e30f23200 -Block 0026 [ 82]: f450098cfe218776 -Block 0026 [ 83]: 4f67e9fc7039a747 -Block 0026 [ 84]: 37eba43f2fa0d31b -Block 0026 [ 85]: f0f42e8fe6ac612f -Block 0026 [ 86]: 1f376340d44ab901 -Block 0026 [ 87]: d77f62728aca121d -Block 0026 [ 88]: ac1072995fc2ff37 -Block 0026 [ 89]: e7069948a84a3977 -Block 0026 [ 90]: b33c06e54ab93729 -Block 0026 [ 91]: 39e0af0be89603dd -Block 0026 [ 92]: d22f84dfd99dcc8a -Block 0026 [ 93]: 88ac4c95d7937a2a -Block 0026 [ 94]: 0cf2539c4243d967 -Block 0026 [ 95]: 34e8d12e0b92aaea -Block 0026 [ 96]: e15df1069c6ef442 -Block 0026 [ 97]: 40f35bc356fc0c3d -Block 0026 [ 98]: 0e071590cf2db74a -Block 0026 [ 99]: e387d14f6bdd296b -Block 0026 [100]: 73fb9acc7733fab5 -Block 0026 [101]: 4266f8cc2efa280b -Block 0026 [102]: b3d909ebafc201c9 -Block 0026 [103]: e5412fc8412e7fc9 -Block 0026 [104]: 02210cc87412d5a3 -Block 0026 [105]: 54f130c0554c6ac3 -Block 0026 [106]: 68a7b73bc65cf9e4 -Block 0026 [107]: 307263b13f5b963a -Block 0026 [108]: 7596dd4e7d1db393 -Block 0026 [109]: 6f139dfd1be30627 -Block 0026 [110]: 1d3ef50a50ceaed6 -Block 0026 [111]: eb88fda3b09b1296 -Block 0026 [112]: 4c3b8e2b4ca2e1f7 -Block 0026 [113]: 57ce38c178027833 -Block 0026 [114]: ce45c95b2532bbdd -Block 0026 [115]: bf634de9141dfe76 -Block 0026 [116]: 1ba389024f54f36b -Block 0026 [117]: 3ac1f8ae10577c81 -Block 0026 [118]: 814252a3e5652404 -Block 0026 [119]: 3322ff859d6b20d5 -Block 0026 [120]: bf7ee00ef0fe69b3 -Block 0026 [121]: b3ef0667ff20b60f -Block 0026 [122]: 79fe044ee99570bb -Block 0026 [123]: 5c03a6ffb98c6c3d -Block 0026 [124]: fc3e251d52c216ea -Block 0026 [125]: 274c5148e90c511b -Block 0026 [126]: 3eafcafba246f626 -Block 0026 [127]: 935a2ec2b3396f23 -Block 0027 [ 0]: 159e40334396333d -Block 0027 [ 1]: 35debd9f9e959a3b -Block 0027 [ 2]: e1fbc7a924a625fe -Block 0027 [ 3]: 90ad1340b58c1e89 -Block 0027 [ 4]: 67b4cd3e612f9c38 -Block 0027 [ 5]: 61a7596c0b4d1b21 -Block 0027 [ 6]: 587fcd006c063e9f -Block 0027 [ 7]: b0f4588fbe2fe388 -Block 0027 [ 8]: 5047302d958a2dbe -Block 0027 [ 9]: 959582f80834b214 -Block 0027 [ 10]: e4b8921bcf7453d3 -Block 0027 [ 11]: cef065b8fe85471f -Block 0027 [ 12]: 4c28967e6e845806 -Block 0027 [ 13]: 95097bd7a3f1b357 -Block 0027 [ 14]: 4cc838f128fdb9a5 -Block 0027 [ 15]: e763538ff7bf6905 -Block 0027 [ 16]: e8bc164923715cd5 -Block 0027 [ 17]: 1aab15c51709863d -Block 0027 [ 18]: f916024c0fd94f60 -Block 0027 [ 19]: bb805c2ff026f601 -Block 0027 [ 20]: 39a4e6570eea2e20 -Block 0027 [ 21]: 356a1aba03e1d831 -Block 0027 [ 22]: c74e8ec0aa6532b8 -Block 0027 [ 23]: ba610ecdf6d64405 -Block 0027 [ 24]: 9e70622f149a89b9 -Block 0027 [ 25]: 345b1a805f2b69c6 -Block 0027 [ 26]: ab9cac31ce78f811 -Block 0027 [ 27]: 95dc637304bfd01e -Block 0027 [ 28]: c3c85afe6db662b6 -Block 0027 [ 29]: 1147079a0ee70d38 -Block 0027 [ 30]: 9aa8571b4c12ab3a -Block 0027 [ 31]: 0c5bc0316ffbb5da -Block 0027 [ 32]: 8e6d03850ebf0c6b -Block 0027 [ 33]: 16d56a59f5c9d9ed -Block 0027 [ 34]: 6c9d8fc35506be7b -Block 0027 [ 35]: 1b1bb9e6da78719d -Block 0027 [ 36]: b6adeb5a05127a11 -Block 0027 [ 37]: 6f8b8e355e4940dd -Block 0027 [ 38]: e1c3e8f1a0f554b6 -Block 0027 [ 39]: c5eb3dff6c043572 -Block 0027 [ 40]: 9a86baac2419994e -Block 0027 [ 41]: c9c44c781da2e1c3 -Block 0027 [ 42]: 639000af64968df2 -Block 0027 [ 43]: 1c4c7ec41762744a -Block 0027 [ 44]: e768397942510cf9 -Block 0027 [ 45]: 434bbca62243dab6 -Block 0027 [ 46]: 786480067546a5f6 -Block 0027 [ 47]: d749591161b87446 -Block 0027 [ 48]: e1563d5a486c87c3 -Block 0027 [ 49]: 9f0c7700273b813e -Block 0027 [ 50]: 304836e556914ec0 -Block 0027 [ 51]: f65ef06f782ba50f -Block 0027 [ 52]: 5b965ee1f01ef44f -Block 0027 [ 53]: 6338cc24f6ea3230 -Block 0027 [ 54]: 593a3771c1e7a207 -Block 0027 [ 55]: 5ab77e5059a9a160 -Block 0027 [ 56]: 49e72d762260501c -Block 0027 [ 57]: 4ae2e5a7a667142a -Block 0027 [ 58]: b64d7c61f720ba52 -Block 0027 [ 59]: 5c04d5b69f09ddee -Block 0027 [ 60]: 6424491f6cbe7e74 -Block 0027 [ 61]: 34edd83bf282bb4c -Block 0027 [ 62]: ba7d59f9fe2cb25c -Block 0027 [ 63]: c24cb5e01a00ef27 -Block 0027 [ 64]: 2a3a486c959977c1 -Block 0027 [ 65]: ed0da6827836de25 -Block 0027 [ 66]: 7042248ab660371d -Block 0027 [ 67]: afd8cf2fa335245c -Block 0027 [ 68]: 1b4e226a51d82d6a -Block 0027 [ 69]: dd05266199543763 -Block 0027 [ 70]: 689c0b986a2d93d8 -Block 0027 [ 71]: 0a8271d7de2878a7 -Block 0027 [ 72]: 9f44d2816b1b50df -Block 0027 [ 73]: 1719aea0e7e3eaa9 -Block 0027 [ 74]: e106c5709673b01f -Block 0027 [ 75]: b04fcb886a18ae63 -Block 0027 [ 76]: e8f3d9b2308eef93 -Block 0027 [ 77]: db65d3dd6473325a -Block 0027 [ 78]: c659d81491aed1e9 -Block 0027 [ 79]: e12cff0492e843c0 -Block 0027 [ 80]: 7403b7de484abbd7 -Block 0027 [ 81]: 1fbaa3c23d8f4b7c -Block 0027 [ 82]: a854cdf30488f6a9 -Block 0027 [ 83]: eccdd64e58074056 -Block 0027 [ 84]: d65f8859f44ff969 -Block 0027 [ 85]: a230cd84cd2588a0 -Block 0027 [ 86]: ff2bc0e01e574048 -Block 0027 [ 87]: a56bb59d3ddc7e38 -Block 0027 [ 88]: db383d2ea5f60f4a -Block 0027 [ 89]: 02f70a87053f54b9 -Block 0027 [ 90]: 106c65eb3d0a0ef7 -Block 0027 [ 91]: 779a3d3e70076a46 -Block 0027 [ 92]: ab63c42176583636 -Block 0027 [ 93]: cfd08c6d8ebb1703 -Block 0027 [ 94]: b7bb88525417a838 -Block 0027 [ 95]: eb118a9673be378e -Block 0027 [ 96]: 39ed8faae4710682 -Block 0027 [ 97]: d4ba3147a41ba3d2 -Block 0027 [ 98]: a0a701460ad6804d -Block 0027 [ 99]: 3a67a2c71a8cce3b -Block 0027 [100]: 0102b5ef646994b2 -Block 0027 [101]: 19dcffd9c433deef -Block 0027 [102]: f0939e375d416a48 -Block 0027 [103]: a26a910720ceb122 -Block 0027 [104]: c377d599215ce2b5 -Block 0027 [105]: 7e30dc33a90a37b1 -Block 0027 [106]: fc335a52fe857c07 -Block 0027 [107]: 3b5d0455b3860a76 -Block 0027 [108]: cec5a9162e644993 -Block 0027 [109]: 2cfe25839dd15ab7 -Block 0027 [110]: 9b156e7837236a75 -Block 0027 [111]: d6eb2e3a281a5cdb -Block 0027 [112]: 42c6565b34cba6af -Block 0027 [113]: d66060382243dc0b -Block 0027 [114]: 486d5bc00554a4b1 -Block 0027 [115]: 458ad595a0269bc7 -Block 0027 [116]: 2968c320d059d4cd -Block 0027 [117]: bd84bd47e559db51 -Block 0027 [118]: 3c4e312783b9859a -Block 0027 [119]: 6e49857079e4c504 -Block 0027 [120]: a7777b7394e65639 -Block 0027 [121]: 230be5f469a8b638 -Block 0027 [122]: 0728f719aa188543 -Block 0027 [123]: ff9963971241708c -Block 0027 [124]: 0ace11603796535c -Block 0027 [125]: cd2788157711e0a8 -Block 0027 [126]: 375f1148708a76c0 -Block 0027 [127]: 7a825f3267910e33 -Block 0028 [ 0]: 0849f26117e82e69 -Block 0028 [ 1]: d5f71170afc0cd99 -Block 0028 [ 2]: 337cf42a1f9aa6ed -Block 0028 [ 3]: 8b3ee65b0fa2ee71 -Block 0028 [ 4]: 08e5f029da386cf5 -Block 0028 [ 5]: 56faaaa1bd86acb1 -Block 0028 [ 6]: c5b50eef97e1aaf2 -Block 0028 [ 7]: 44fb3096543f68b5 -Block 0028 [ 8]: a49b5724cabeaade -Block 0028 [ 9]: c9984984f42d456d -Block 0028 [ 10]: 86087eb21aa86362 -Block 0028 [ 11]: 7c26cd8835fe070a -Block 0028 [ 12]: df7893c4c3184f26 -Block 0028 [ 13]: 213ef3aff6a570d1 -Block 0028 [ 14]: 2e6d52b63938f7b2 -Block 0028 [ 15]: 2d40ede261919ac2 -Block 0028 [ 16]: 3a5db1e8c3d48c18 -Block 0028 [ 17]: bd96321cef252f19 -Block 0028 [ 18]: 5fa45329ce5fe729 -Block 0028 [ 19]: 3108fa03894aa4e6 -Block 0028 [ 20]: e3760737d9e8436f -Block 0028 [ 21]: 22f767c73cfb6d1a -Block 0028 [ 22]: d3752b7eccedb8bf -Block 0028 [ 23]: 90151508c3540bcb -Block 0028 [ 24]: e42592301a636512 -Block 0028 [ 25]: e70ee12d7216f4e9 -Block 0028 [ 26]: aad05fb9c5894f49 -Block 0028 [ 27]: 0bee7b256f071ab4 -Block 0028 [ 28]: 92ce045f4138a3be -Block 0028 [ 29]: 7f7065c75a435f24 -Block 0028 [ 30]: a431b3b6e0c59cae -Block 0028 [ 31]: ef20bc3f22350a04 -Block 0028 [ 32]: b275f5fa1e04cb09 -Block 0028 [ 33]: 370630d3d9a41d2b -Block 0028 [ 34]: 4dafe30055bdb07e -Block 0028 [ 35]: 834f9a112778a3a7 -Block 0028 [ 36]: 4f3f222636687ea1 -Block 0028 [ 37]: 5d56952ee08e0a6a -Block 0028 [ 38]: 26a59314ae105696 -Block 0028 [ 39]: d16327fc3f66f2ca -Block 0028 [ 40]: 1a14f45ff2619475 -Block 0028 [ 41]: afb1cd011f1d190a -Block 0028 [ 42]: 4b193be4e955e2d9 -Block 0028 [ 43]: 112011bd408e324f -Block 0028 [ 44]: 982c98964b0baca7 -Block 0028 [ 45]: 7d93cc6551a4fd9d -Block 0028 [ 46]: ee58c96acfc8c064 -Block 0028 [ 47]: 68c962a88a2a51c9 -Block 0028 [ 48]: 905d84e0e7b066c0 -Block 0028 [ 49]: 8e2a80dbf5dadd98 -Block 0028 [ 50]: ba8e81f0dce0c3d3 -Block 0028 [ 51]: c0eeaf524cdc1a9a -Block 0028 [ 52]: e2f2b0a38d8bb527 -Block 0028 [ 53]: 30ca19c0bcc47ce5 -Block 0028 [ 54]: a51213f07e89eee5 -Block 0028 [ 55]: 96f72b7410c329bd -Block 0028 [ 56]: b97493bbe5136439 -Block 0028 [ 57]: 89717556a6753782 -Block 0028 [ 58]: d4cfb003fc67c9f5 -Block 0028 [ 59]: 541dc2a89c9e400e -Block 0028 [ 60]: 4251b6717b98dc3d -Block 0028 [ 61]: 1cfab5fc275fa115 -Block 0028 [ 62]: 814f8d19cb4fbb3a -Block 0028 [ 63]: 132f7ef88079c208 -Block 0028 [ 64]: 833cd31cacb85c65 -Block 0028 [ 65]: d4bb68949f3df570 -Block 0028 [ 66]: 92bcae2eac5e7765 -Block 0028 [ 67]: c7f23e8397ddaf35 -Block 0028 [ 68]: b566b8e8adff82e7 -Block 0028 [ 69]: 0a2162802341b685 -Block 0028 [ 70]: 73bce590f290184f -Block 0028 [ 71]: 8ff6a187a4def08c -Block 0028 [ 72]: 584577ed0490bc21 -Block 0028 [ 73]: ac4406c4137dfee9 -Block 0028 [ 74]: f4fbf4110f495a81 -Block 0028 [ 75]: 08f5780ba9cc43d9 -Block 0028 [ 76]: 75c168632ff3dfce -Block 0028 [ 77]: 3dee16456c07ebcd -Block 0028 [ 78]: 036c0730b8f60056 -Block 0028 [ 79]: 6b9d6a60d9cc1975 -Block 0028 [ 80]: 6f374b04e4e75fe5 -Block 0028 [ 81]: 01da5a909d9e0d78 -Block 0028 [ 82]: 0c6fbe7746f25058 -Block 0028 [ 83]: bd91552984f5ac9f -Block 0028 [ 84]: f385b64acabaa0c6 -Block 0028 [ 85]: 0eee4367c6323e93 -Block 0028 [ 86]: 702ecb0bde5c9096 -Block 0028 [ 87]: 040a6edea15014bd -Block 0028 [ 88]: 09409b7a46a09515 -Block 0028 [ 89]: 593ffbb45922881e -Block 0028 [ 90]: 93d1b8eddbeb3779 -Block 0028 [ 91]: 20e543ddff978938 -Block 0028 [ 92]: ab067161ec9a6b01 -Block 0028 [ 93]: b3ba38bc824538ee -Block 0028 [ 94]: 9c56eb38eb4431f6 -Block 0028 [ 95]: 3fb4fcd01732e6da -Block 0028 [ 96]: d78ce9b0a9fbdad2 -Block 0028 [ 97]: 156975f6f8233d48 -Block 0028 [ 98]: f436a80f86e2cb90 -Block 0028 [ 99]: d0f1e1209cf6049f -Block 0028 [100]: f32f5e2f8024c792 -Block 0028 [101]: 29b30130eaf52b55 -Block 0028 [102]: 37e560fe3a1696c8 -Block 0028 [103]: c331eadc24d9beca -Block 0028 [104]: d5b8368f1a774c9b -Block 0028 [105]: 03f3c0bd89abcadb -Block 0028 [106]: f455906baa4fb0ba -Block 0028 [107]: e80fe133ffbab8bd -Block 0028 [108]: 577157827c027d91 -Block 0028 [109]: 4a08fe8ba548fa0b -Block 0028 [110]: 0b66ee4cb9c7ea4e -Block 0028 [111]: 8fdbed3184ee5d52 -Block 0028 [112]: ddd779a1731696ee -Block 0028 [113]: d96141b193a21297 -Block 0028 [114]: 6a81beb51328863d -Block 0028 [115]: db461e53677de07c -Block 0028 [116]: f2f8671327ceeb4c -Block 0028 [117]: 7c904037691f33ba -Block 0028 [118]: 96fb37b562e4c9b8 -Block 0028 [119]: 05fcd6da00353939 -Block 0028 [120]: 0f596ac66bc611c0 -Block 0028 [121]: af26b7fa3530572f -Block 0028 [122]: 18c3afbee2dd6326 -Block 0028 [123]: 5385c318968ff79c -Block 0028 [124]: 74ff24b87493af07 -Block 0028 [125]: 5c194c0a50cb046e -Block 0028 [126]: 73022d716b6a6d1b -Block 0028 [127]: caa125ca87182882 -Block 0029 [ 0]: fc0960a67b7ec1a8 -Block 0029 [ 1]: 6d7bd2f98e6a5ffe -Block 0029 [ 2]: d9ecf72f70549a6a -Block 0029 [ 3]: 47805459f5c4fbd6 -Block 0029 [ 4]: 72fecd2e969f8bb8 -Block 0029 [ 5]: 726a7d27060c41f6 -Block 0029 [ 6]: 2876b25d393f7e10 -Block 0029 [ 7]: 3b1bc55ae5474c0d -Block 0029 [ 8]: 61edce506daea986 -Block 0029 [ 9]: 3e8a6bc466ff959d -Block 0029 [ 10]: 19a6c7d4ac26c129 -Block 0029 [ 11]: 16ad302ec06d236b -Block 0029 [ 12]: 0f34685a73e16ceb -Block 0029 [ 13]: c782e2fd258b4df3 -Block 0029 [ 14]: 35971b0d4ec5b3e2 -Block 0029 [ 15]: c76d6c071c4f0b16 -Block 0029 [ 16]: 6b74e316b38c6bd2 -Block 0029 [ 17]: da9a635a7a35e375 -Block 0029 [ 18]: eedcd0af08112474 -Block 0029 [ 19]: c4e3c5b62f518d59 -Block 0029 [ 20]: 07a9045032534a34 -Block 0029 [ 21]: 8e86baf9d908a2b5 -Block 0029 [ 22]: a12823e5e8d33cc6 -Block 0029 [ 23]: aecdaed64f20ce64 -Block 0029 [ 24]: cf81e3c1bd174f2a -Block 0029 [ 25]: 9b66257654f67fb7 -Block 0029 [ 26]: f3d9816877c71ade -Block 0029 [ 27]: 5e5d7109eb946b0f -Block 0029 [ 28]: cfabf5385167b3e7 -Block 0029 [ 29]: f10e7285325a928d -Block 0029 [ 30]: 179038a47687b7fa -Block 0029 [ 31]: 1209ab7eaf12118d -Block 0029 [ 32]: 2770efce7650bfa0 -Block 0029 [ 33]: 0d8622cfc8311eb0 -Block 0029 [ 34]: 4c83e4b1401e10ee -Block 0029 [ 35]: e7a9bf81a99de5e4 -Block 0029 [ 36]: 3bc5037d75e60ea5 -Block 0029 [ 37]: 9661e829b7a7ba4a -Block 0029 [ 38]: 9d33f0ff44e5bf07 -Block 0029 [ 39]: 522cd22f151397cc -Block 0029 [ 40]: 6b6272068e7fcbfc -Block 0029 [ 41]: fd58176e4a1bbd63 -Block 0029 [ 42]: 8daa234502905ad3 -Block 0029 [ 43]: 3efa160297920c1e -Block 0029 [ 44]: 25effc8c223c842e -Block 0029 [ 45]: 33bc726de3e9e93b -Block 0029 [ 46]: b9e9a801c48e3e99 -Block 0029 [ 47]: 2bc381b9ef4d5a2f -Block 0029 [ 48]: 6837fa8901fdc454 -Block 0029 [ 49]: f23ba3cee006be2b -Block 0029 [ 50]: 0255aaa71fec0b30 -Block 0029 [ 51]: 93ff41644f070fed -Block 0029 [ 52]: 1c1bc44a784a3ed4 -Block 0029 [ 53]: c430d3f39922e831 -Block 0029 [ 54]: 0923d42873597fc9 -Block 0029 [ 55]: cceb977535285fb3 -Block 0029 [ 56]: 8ca0c8994ffc8298 -Block 0029 [ 57]: 24c5d796e0394e74 -Block 0029 [ 58]: 2379800cd30f75d0 -Block 0029 [ 59]: 0f5eaf10e0976ac1 -Block 0029 [ 60]: 76c68cecfee565b8 -Block 0029 [ 61]: 0b647de2dd4f60eb -Block 0029 [ 62]: b9d97be8b9d383a1 -Block 0029 [ 63]: f904b1c9eccef85e -Block 0029 [ 64]: cca9c2c31c4231be -Block 0029 [ 65]: 5e48ce618e385e9f -Block 0029 [ 66]: 9c06a0eebfebca2f -Block 0029 [ 67]: 8180caaa86a0e64a -Block 0029 [ 68]: 5cf18413a32f2966 -Block 0029 [ 69]: c59a9dda2ba89f4d -Block 0029 [ 70]: 69338caebbfb57ec -Block 0029 [ 71]: b2209df6c60fd644 -Block 0029 [ 72]: 2ae1fd8436562fcd -Block 0029 [ 73]: e9bd61cae08d2451 -Block 0029 [ 74]: a4b3defce71b8b2c -Block 0029 [ 75]: 7f1d2047b6298ae2 -Block 0029 [ 76]: cdb72c0cd885af3b -Block 0029 [ 77]: 01d3fd9d4a69b3a4 -Block 0029 [ 78]: 43302b20f168c76c -Block 0029 [ 79]: 1580f91718fbd7c3 -Block 0029 [ 80]: 0f094d8bda5145ed -Block 0029 [ 81]: 4431891cc01a6d4f -Block 0029 [ 82]: c81674848264747c -Block 0029 [ 83]: de3b7800eb2e952a -Block 0029 [ 84]: 285f74d9190aa9e4 -Block 0029 [ 85]: 2cd143aff3fcec91 -Block 0029 [ 86]: 5579ad6b7db95d5a -Block 0029 [ 87]: 21749b437208eae9 -Block 0029 [ 88]: 7ef65a417893a6a9 -Block 0029 [ 89]: b4ceb7fa75463c39 -Block 0029 [ 90]: 3331cf19e3458714 -Block 0029 [ 91]: 6535e001a8a19f13 -Block 0029 [ 92]: aa68097aa9ff3e76 -Block 0029 [ 93]: 74eb5b4fdbe6f9a0 -Block 0029 [ 94]: d05996b9585d7a1d -Block 0029 [ 95]: 5601726c8d72a7ed -Block 0029 [ 96]: dfce7f302b2f05ff -Block 0029 [ 97]: 7dd1f91852f35728 -Block 0029 [ 98]: 1f8698b22c96ed8a -Block 0029 [ 99]: fca4b98cac2e9ece -Block 0029 [100]: 7fb9b24de99a5e85 -Block 0029 [101]: 2f8e30a8ce7c2e01 -Block 0029 [102]: ce1e83f07b07e303 -Block 0029 [103]: b134093842c631ac -Block 0029 [104]: 2c34cfdf69eb3afc -Block 0029 [105]: 4a9877b224c738af -Block 0029 [106]: 34af8d0d9f0f1ff3 -Block 0029 [107]: 2895793c87c52173 -Block 0029 [108]: 1dd6e52d77529937 -Block 0029 [109]: a05ece635779c143 -Block 0029 [110]: d262438d4c71f022 -Block 0029 [111]: 095bfd122b580ac3 -Block 0029 [112]: 24756361b5a5153a -Block 0029 [113]: e6ceee958b68a91d -Block 0029 [114]: cd728e6ee76a6551 -Block 0029 [115]: 8de4480de3e706dc -Block 0029 [116]: 58d1e5aaadaa81ea -Block 0029 [117]: 5bd443fcb025a311 -Block 0029 [118]: 2447b45da523cd5b -Block 0029 [119]: 770d3f8864efbbdb -Block 0029 [120]: bc11cfa12135a788 -Block 0029 [121]: cbf9d333493841c2 -Block 0029 [122]: 78ee18e0ce8f6acb -Block 0029 [123]: fd65bce63ab57899 -Block 0029 [124]: 18c1e72c8b937615 -Block 0029 [125]: 0315f5261511b26a -Block 0029 [126]: 2b3dab20a993a7d1 -Block 0029 [127]: 0b9feaeeee468d2f -Block 0030 [ 0]: b2052ef0dd8f768a -Block 0030 [ 1]: b2b2234ce1973cc3 -Block 0030 [ 2]: 143d19226de29046 -Block 0030 [ 3]: e97211989dedab2e -Block 0030 [ 4]: 2422d9d75bb5bb2c -Block 0030 [ 5]: 305d57c1db2a6865 -Block 0030 [ 6]: e24070b4a268131a -Block 0030 [ 7]: c195f3bc8374f60f -Block 0030 [ 8]: d22ec1870be3b450 -Block 0030 [ 9]: 4559d92ad988b95a -Block 0030 [ 10]: b048f80baa657118 -Block 0030 [ 11]: 0e528a71fad655a3 -Block 0030 [ 12]: 511d78d7d4fc0f33 -Block 0030 [ 13]: 27d7316835672471 -Block 0030 [ 14]: 8cf3ac78da4f354d -Block 0030 [ 15]: b14bb0436ba7bde1 -Block 0030 [ 16]: 8c1bcffac0305930 -Block 0030 [ 17]: a48e003e06294fab -Block 0030 [ 18]: 1c4b57890adaf5e6 -Block 0030 [ 19]: be8aacd556831ec0 -Block 0030 [ 20]: 9a31b07f36eee8ef -Block 0030 [ 21]: 7e290e793e182e2f -Block 0030 [ 22]: 34f7a70e1c71e3ee -Block 0030 [ 23]: ea7bd765e8889914 -Block 0030 [ 24]: 73bb2edb8aade3d4 -Block 0030 [ 25]: cc489b76677d6524 -Block 0030 [ 26]: ace427159176b2b6 -Block 0030 [ 27]: c7ba07529cafa00d -Block 0030 [ 28]: 92ba84640725a577 -Block 0030 [ 29]: 53db5e65e62f40eb -Block 0030 [ 30]: 997c21e63f59c0be -Block 0030 [ 31]: 21a008e41804b69a -Block 0030 [ 32]: 17565f5deec66b24 -Block 0030 [ 33]: a4aecbe8d7e6c344 -Block 0030 [ 34]: 77322670bb8d123d -Block 0030 [ 35]: ff8796a180f48928 -Block 0030 [ 36]: 21d4f5b662279278 -Block 0030 [ 37]: e2203839dab8f281 -Block 0030 [ 38]: 2038dc2c363f8b6a -Block 0030 [ 39]: 1d5a096ca3d83a43 -Block 0030 [ 40]: ceab1bcb187e1696 -Block 0030 [ 41]: bcc01d99df65815b -Block 0030 [ 42]: e1c41fc7fbe1733f -Block 0030 [ 43]: ba7bd22a99fbfc93 -Block 0030 [ 44]: 3bf9adbca3d5aa1e -Block 0030 [ 45]: 5f306633205050cd -Block 0030 [ 46]: 2f352fc9dc50c917 -Block 0030 [ 47]: d7e450f208ba7fed -Block 0030 [ 48]: 44b89f076c0a8e32 -Block 0030 [ 49]: 0222879a3652e295 -Block 0030 [ 50]: 758a6bdb8c865426 -Block 0030 [ 51]: f4cbb242a24e88a0 -Block 0030 [ 52]: c9b5bc6c1d0aa4e8 -Block 0030 [ 53]: cb7a79143dd740f4 -Block 0030 [ 54]: 26b7dda4e33fa82a -Block 0030 [ 55]: b265116b6b7f5fdc -Block 0030 [ 56]: 9d98fa4388b3b1d2 -Block 0030 [ 57]: 63613dd863ffad59 -Block 0030 [ 58]: 5d260e364270c1b5 -Block 0030 [ 59]: 7926ce139af5724f -Block 0030 [ 60]: d491f878ace5751d -Block 0030 [ 61]: cb3e3414137aacf3 -Block 0030 [ 62]: 062ce6f69e6855f9 -Block 0030 [ 63]: 0062e1c94c9fe256 -Block 0030 [ 64]: 92caa34b0ef94118 -Block 0030 [ 65]: dbc5f3073dc30f08 -Block 0030 [ 66]: be3d40036d538186 -Block 0030 [ 67]: 4fbcd8cd79b5052a -Block 0030 [ 68]: 2335944f5b2bf43f -Block 0030 [ 69]: d3a81c3cf09ec276 -Block 0030 [ 70]: 3c82254099597e83 -Block 0030 [ 71]: 60ed028842e9c82b -Block 0030 [ 72]: e10eec69b48c3384 -Block 0030 [ 73]: 1c70f1994eae3be1 -Block 0030 [ 74]: ad67e9cbb7398a34 -Block 0030 [ 75]: dacf3aa8a4a0ba0c -Block 0030 [ 76]: f93343c03119b360 -Block 0030 [ 77]: 667246ada6958ce2 -Block 0030 [ 78]: b3edc34acaf5bbd2 -Block 0030 [ 79]: 3a0309b96bc4f5b6 -Block 0030 [ 80]: 07cfe170c526dfed -Block 0030 [ 81]: a7ea925aa63371f8 -Block 0030 [ 82]: 71f7658e621ebfb7 -Block 0030 [ 83]: 3912f92e486900cd -Block 0030 [ 84]: aedf0645dccfdb9f -Block 0030 [ 85]: 5fd59b9193f61ffc -Block 0030 [ 86]: 1d1885d2ee2a09ea -Block 0030 [ 87]: 54525cea48c434d4 -Block 0030 [ 88]: fde50a79628501e3 -Block 0030 [ 89]: d2bdb7791728bc8c -Block 0030 [ 90]: f47623128330618a -Block 0030 [ 91]: d386f78c8135ba7f -Block 0030 [ 92]: 83508d04d7acdbb2 -Block 0030 [ 93]: d72bec03760e0396 -Block 0030 [ 94]: 797e03273a488905 -Block 0030 [ 95]: 4436818cd7d1722a -Block 0030 [ 96]: 3f7b2a6b2c71efa7 -Block 0030 [ 97]: df843ca2b4d35c43 -Block 0030 [ 98]: bb8b8dcfd2b319dc -Block 0030 [ 99]: 37036a2b2eedf738 -Block 0030 [100]: b090f8e2d304969d -Block 0030 [101]: 650cccfd275c64b6 -Block 0030 [102]: dcfee0436658a01e -Block 0030 [103]: a551a617a6b6a03b -Block 0030 [104]: 12658c3efa5b96f0 -Block 0030 [105]: 4bf8704cdadb4120 -Block 0030 [106]: 91f163a47f8f6d0c -Block 0030 [107]: d67877cafce702cd -Block 0030 [108]: 3c9cf393dfd17fc3 -Block 0030 [109]: 503f28c42762fb95 -Block 0030 [110]: f2c82fa39d46da89 -Block 0030 [111]: 037acff46f38e827 -Block 0030 [112]: 7d6edb0bb6ed18b0 -Block 0030 [113]: 0ae509fab7d47c9b -Block 0030 [114]: 82f725b5acdecd8e -Block 0030 [115]: 9a30b79e16b1477f -Block 0030 [116]: 87d77f42cdeb213c -Block 0030 [117]: b18c6f2b9c1919d2 -Block 0030 [118]: b915794dffc5501f -Block 0030 [119]: 0c6b77c723ca40cf -Block 0030 [120]: 19ca061467c3b5c2 -Block 0030 [121]: 9eb33654b6244029 -Block 0030 [122]: 8583a9d82347931c -Block 0030 [123]: c04fa36a94647b18 -Block 0030 [124]: f886d82796d3d215 -Block 0030 [125]: 25d68dbad584ebe4 -Block 0030 [126]: 1d1de84c4e7bb0e0 -Block 0030 [127]: 12964c6a8e3c24c5 -Block 0031 [ 0]: 1a2c8c1bcaabe68b -Block 0031 [ 1]: b7fd776c18f9b862 -Block 0031 [ 2]: f45b25d204f536c6 -Block 0031 [ 3]: 0e1ec1d884b332ec -Block 0031 [ 4]: 85ba1f4bdbad8499 -Block 0031 [ 5]: 0f32370a51cd3bc1 -Block 0031 [ 6]: f9a8d18784762055 -Block 0031 [ 7]: 6033bc1c026256ae -Block 0031 [ 8]: 7c2ecce01d0d64c9 -Block 0031 [ 9]: 651628e8f822d4f6 -Block 0031 [ 10]: 93b7ce3adf7b86d2 -Block 0031 [ 11]: 95f87ed6efb293db -Block 0031 [ 12]: c5432aefa2fd457f -Block 0031 [ 13]: 00c5907d79fa6b5e -Block 0031 [ 14]: 330562160036c2c1 -Block 0031 [ 15]: 9095bbddb1b6e02e -Block 0031 [ 16]: 37336fa02074432c -Block 0031 [ 17]: 2f74cc26c2050fe7 -Block 0031 [ 18]: 06e2b942aa0b29a3 -Block 0031 [ 19]: c1b41019bdc69a34 -Block 0031 [ 20]: de7010f1e1e1313f -Block 0031 [ 21]: eb0fc0f48840d290 -Block 0031 [ 22]: bdbd37932788c629 -Block 0031 [ 23]: 1d42b93ecf1c2bbd -Block 0031 [ 24]: e42e70e9cb70832b -Block 0031 [ 25]: e652991b2aa76029 -Block 0031 [ 26]: 23fb258e4e7fee36 -Block 0031 [ 27]: 674d3ac465bddc12 -Block 0031 [ 28]: 56a17a87b3e7fdc4 -Block 0031 [ 29]: b10fafba31785f46 -Block 0031 [ 30]: bd16e3f7c623e5fb -Block 0031 [ 31]: 50dffab4fa9ff60e -Block 0031 [ 32]: 94d9b2ce9a522f3f -Block 0031 [ 33]: 80c610c5aec3601e -Block 0031 [ 34]: 40209cc4c5430d7c -Block 0031 [ 35]: 11af15192ea2bac0 -Block 0031 [ 36]: ccbd3b3c53528d22 -Block 0031 [ 37]: 29c6b992555c2df7 -Block 0031 [ 38]: 7a3d9aec341eb2d2 -Block 0031 [ 39]: 7cf7e40e94efc19a -Block 0031 [ 40]: ffcbeb96f181a60c -Block 0031 [ 41]: a9e7fc1c04eaaf72 -Block 0031 [ 42]: 7a11028ec5f57bd3 -Block 0031 [ 43]: ac50d9103f4a38a7 -Block 0031 [ 44]: 62c2ab00c9050c55 -Block 0031 [ 45]: 19ace5b13e02ef92 -Block 0031 [ 46]: 15805e1aa8d6d234 -Block 0031 [ 47]: a83da175fd667938 -Block 0031 [ 48]: 599544fe52cccc3c -Block 0031 [ 49]: 7328d9fa3a03bdd2 -Block 0031 [ 50]: e99f9beec2239b0e -Block 0031 [ 51]: e2665d5afd9bf4cd -Block 0031 [ 52]: f18fdbec632ad538 -Block 0031 [ 53]: c0f2934c37d59988 -Block 0031 [ 54]: 063d57b42ce3fe55 -Block 0031 [ 55]: 59cef85aa100303c -Block 0031 [ 56]: b804c6444c2a37fd -Block 0031 [ 57]: a0a46c89999cce7d -Block 0031 [ 58]: bd02136cdd2729b0 -Block 0031 [ 59]: 47895d4bc230b5b2 -Block 0031 [ 60]: 72dcd1e60d596ace -Block 0031 [ 61]: d3de8808628f18db -Block 0031 [ 62]: f5314a77dc38704e -Block 0031 [ 63]: ddd68c71a56ef2fc -Block 0031 [ 64]: 467bc2e5455c1ae7 -Block 0031 [ 65]: c9ea376dbeb55719 -Block 0031 [ 66]: e5034a450818a9cc -Block 0031 [ 67]: 1cfe70d8e73160fe -Block 0031 [ 68]: 81bd4568141b1161 -Block 0031 [ 69]: 52e25159c99a81e1 -Block 0031 [ 70]: 7b0584c6185b2ca7 -Block 0031 [ 71]: bcaa6093048ce033 -Block 0031 [ 72]: d3e27332ed086c0d -Block 0031 [ 73]: 9c93d42ba384372d -Block 0031 [ 74]: e7f690faa06d23d2 -Block 0031 [ 75]: 4cdd9f1007f7021b -Block 0031 [ 76]: 6be8fb6a4861435f -Block 0031 [ 77]: 048206d822bb042f -Block 0031 [ 78]: fd158dcb8c5ffda6 -Block 0031 [ 79]: 751d0f0b4a45bf77 -Block 0031 [ 80]: 862179d699217e2a -Block 0031 [ 81]: 7137c108e8207ff4 -Block 0031 [ 82]: 9849386ad51ebd49 -Block 0031 [ 83]: 2b1dc6fd29b4de8c -Block 0031 [ 84]: e9572bf08ff72695 -Block 0031 [ 85]: 595505301c056fe7 -Block 0031 [ 86]: 01adcab40f77fe14 -Block 0031 [ 87]: 9192080456546a10 -Block 0031 [ 88]: afceb66af9c8b1ad -Block 0031 [ 89]: ca3828fa65c64bb9 -Block 0031 [ 90]: fecd07d3146ea570 -Block 0031 [ 91]: b3066118394c1441 -Block 0031 [ 92]: 54d3a1d691bc0001 -Block 0031 [ 93]: f9117f8477ab3070 -Block 0031 [ 94]: 6cf7675acdbf390a -Block 0031 [ 95]: 1a24b03a02cc2cc1 -Block 0031 [ 96]: 9665f44bcee15e0c -Block 0031 [ 97]: ee19c0e5b5dadc4e -Block 0031 [ 98]: 0f14abfed1b8a0a5 -Block 0031 [ 99]: a4767e7d6c36a1aa -Block 0031 [100]: f53b35d3fc79f49b -Block 0031 [101]: 91a1f89fbd7bb719 -Block 0031 [102]: e960e8c3c6bf7be5 -Block 0031 [103]: b9a6f3159aa3bf7b -Block 0031 [104]: 58864d1643b857f7 -Block 0031 [105]: 4b6cdc649b45b4a2 -Block 0031 [106]: 84a895724ac0a7b5 -Block 0031 [107]: dde4c935479d6403 -Block 0031 [108]: 903dd11f8c11cf0c -Block 0031 [109]: 9f58c04ce66c1b7f -Block 0031 [110]: 62f18bed8942b0d0 -Block 0031 [111]: 205921ed45b35441 -Block 0031 [112]: 975afa8726547dd7 -Block 0031 [113]: 44b535af11791774 -Block 0031 [114]: 91344f7802210472 -Block 0031 [115]: 3209a717e8b8a883 -Block 0031 [116]: 0d970f1c82784832 -Block 0031 [117]: 450ab7ef353a856e -Block 0031 [118]: d8268f9ea2dc02f6 -Block 0031 [119]: f986c5ffcb996a13 -Block 0031 [120]: e34469a95b305c6b -Block 0031 [121]: d246ee673527bddb -Block 0031 [122]: e28ab4d42c75568e -Block 0031 [123]: 645ed1164314f06c -Block 0031 [124]: 9eacfcfbdb3ce0fc -Block 0031 [125]: 07dedaeb0aee71ac -Block 0031 [126]: 074435fad91548f4 -Block 0031 [127]: 2dbfff23f31b5883 - - After pass 2: -Block 0000 [ 0]: 5f047b575c5ff4d2 -Block 0000 [ 1]: f06985dbf11c91a8 -Block 0000 [ 2]: 89efb2759f9a8964 -Block 0000 [ 3]: 7486a73f62f9b142 -Block 0000 [ 4]: 04510925420c66ee -Block 0000 [ 5]: 02ec38228c37c5c1 -Block 0000 [ 6]: e6ab2b457912bab8 -Block 0000 [ 7]: 7a7302160f813d0b -Block 0000 [ 8]: 85196983c6a99c88 -Block 0000 [ 9]: 793919b5d4d2fe3f -Block 0000 [ 10]: 4174ca650bf22cbf -Block 0000 [ 11]: 73d33705a47001a6 -Block 0000 [ 12]: 10eb4382afcc83c8 -Block 0000 [ 13]: 52fed27577f0d80f -Block 0000 [ 14]: 36d1c95b87f653da -Block 0000 [ 15]: 6f9e5acbdb49a453 -Block 0000 [ 16]: b8262734f13b4a90 -Block 0000 [ 17]: a8f02f5e522cc67c -Block 0000 [ 18]: fff3ae5438debcf9 -Block 0000 [ 19]: e60bf91cdef498bc -Block 0000 [ 20]: 92ec94d4802a8bf1 -Block 0000 [ 21]: 0a2d24b6e655dc7d -Block 0000 [ 22]: 7d1d0fb920dd0459 -Block 0000 [ 23]: dedd69551c04b7c1 -Block 0000 [ 24]: 3511aededd90af82 -Block 0000 [ 25]: a1c6ec50f1a3ee01 -Block 0000 [ 26]: 28740d043e641129 -Block 0000 [ 27]: b28aa3b94d3c62eb -Block 0000 [ 28]: 953f8ce4563fefc9 -Block 0000 [ 29]: 64480ac4c555dc1c -Block 0000 [ 30]: 30948d009ba6d9d0 -Block 0000 [ 31]: b12e34f4768d5ab1 -Block 0000 [ 32]: ea79366a5c411c94 -Block 0000 [ 33]: 3820909417b535b2 -Block 0000 [ 34]: a60b56c5d8e47c14 -Block 0000 [ 35]: 6d64419df3c1657b -Block 0000 [ 36]: 4e60fe0e68fdc370 -Block 0000 [ 37]: 6b34d1e7ffd1f58f -Block 0000 [ 38]: a2618e2a71782401 -Block 0000 [ 39]: 2e0ebd59471df5f1 -Block 0000 [ 40]: afca46f9e6c7a3a8 -Block 0000 [ 41]: 0afc976edd5eef13 -Block 0000 [ 42]: 8d57326fca2940a7 -Block 0000 [ 43]: 4b0896a7e28a8009 -Block 0000 [ 44]: ba9b97a085d9944f -Block 0000 [ 45]: 86dc7b027eb5239d -Block 0000 [ 46]: a1adb7eea4de8f4b -Block 0000 [ 47]: e14b47fb17ee94a0 -Block 0000 [ 48]: 0673a2ded047d48a -Block 0000 [ 49]: 8018a5b24996b8b8 -Block 0000 [ 50]: 550adaf7002459f4 -Block 0000 [ 51]: 619740442a82e646 -Block 0000 [ 52]: 841d26f23222d87e -Block 0000 [ 53]: a5bda4a6c6ebef40 -Block 0000 [ 54]: 1d35886ff0994a0a -Block 0000 [ 55]: 9f2efe245a9a0f6d -Block 0000 [ 56]: da834952d4054492 -Block 0000 [ 57]: 79b44cfc747e6e35 -Block 0000 [ 58]: 454f45b843148ea7 -Block 0000 [ 59]: fe4e7e8d6ee284d4 -Block 0000 [ 60]: 81bfeb6930e92f50 -Block 0000 [ 61]: c5a8c22323c3329e -Block 0000 [ 62]: b7a4075886e814f7 -Block 0000 [ 63]: 38485da04db198a4 -Block 0000 [ 64]: fffa92db07389636 -Block 0000 [ 65]: 4079321de7a249f7 -Block 0000 [ 66]: 9150351d5a078294 -Block 0000 [ 67]: fe6da74e90e55b56 -Block 0000 [ 68]: d151fdb37e488be9 -Block 0000 [ 69]: 222fcdcaa2951d4a -Block 0000 [ 70]: cf7466f1e72ce6a6 -Block 0000 [ 71]: 270d3da26dca1c5b -Block 0000 [ 72]: 567e57efd070a016 -Block 0000 [ 73]: 2786865e1820fb18 -Block 0000 [ 74]: adabab3af194dcc3 -Block 0000 [ 75]: 9b41d5ba67787de2 -Block 0000 [ 76]: 931f4d8a86aca9e1 -Block 0000 [ 77]: d9bca2e97b0d4c9e -Block 0000 [ 78]: 62f0c0bb37535905 -Block 0000 [ 79]: 5776709c1ead9801 -Block 0000 [ 80]: 6ee4546f7151d0e3 -Block 0000 [ 81]: f6884c2886809927 -Block 0000 [ 82]: 2137d2b78baa5334 -Block 0000 [ 83]: 52861e17e6b0be52 -Block 0000 [ 84]: 3c7331786635fddc -Block 0000 [ 85]: 25d2804d3b22f999 -Block 0000 [ 86]: ef36e6d7d49fbb86 -Block 0000 [ 87]: afe8278e58dce088 -Block 0000 [ 88]: 9922e9f924c3588c -Block 0000 [ 89]: 0171a37fc1ef9c4d -Block 0000 [ 90]: a7841e6d2dfa7d6a -Block 0000 [ 91]: e1f0fdfae60f66ba -Block 0000 [ 92]: 29009786b06cd61b -Block 0000 [ 93]: 9c4dfe4cc81fc529 -Block 0000 [ 94]: 35d9e9d3af62794f -Block 0000 [ 95]: 34b057c385eb4fa3 -Block 0000 [ 96]: b3064864a0abf7a0 -Block 0000 [ 97]: e8fbd585908f564a -Block 0000 [ 98]: 5dadf05c04c6e76f -Block 0000 [ 99]: ad0e98068b35bf8b -Block 0000 [100]: e3256c1b7cd320ff -Block 0000 [101]: 8e7673b95838317e -Block 0000 [102]: d8e8331b4fd1f648 -Block 0000 [103]: 2bb6651719c89e56 -Block 0000 [104]: 6110bfa919d8c5ef -Block 0000 [105]: aad86681411c2ac7 -Block 0000 [106]: afbd14609f1d924b -Block 0000 [107]: d568c327bd96e968 -Block 0000 [108]: 8d810ddc42ede14c -Block 0000 [109]: a70d18be3ce495e6 -Block 0000 [110]: 1e38926e13748064 -Block 0000 [111]: ee37b89b52fc73fd -Block 0000 [112]: 96157ab6dc1e04dc -Block 0000 [113]: bb0a05f04288cc31 -Block 0000 [114]: 7134bfe5ce3962a3 -Block 0000 [115]: b25e1793c8803d91 -Block 0000 [116]: 2dffadb73a9c092a -Block 0000 [117]: 934b6dccfa3f7461 -Block 0000 [118]: 509ac15213826b45 -Block 0000 [119]: 21bb0bd5cc719fe5 -Block 0000 [120]: 150184fdbddd607f -Block 0000 [121]: 7d177f7f6b568b47 -Block 0000 [122]: cf69c346b4077ed5 -Block 0000 [123]: 1646908bd3cfd3a7 -Block 0000 [124]: d3198f31d64ab429 -Block 0000 [125]: ea0fd99cc5edcf8f -Block 0000 [126]: b008b065b82a72bc -Block 0000 [127]: 505fd35d1e4ccef7 -Block 0001 [ 0]: e23fe02dfece0288 -Block 0001 [ 1]: 7a7047500e615340 -Block 0001 [ 2]: afd8a4beaf7eecbe -Block 0001 [ 3]: 3853b52881b4d557 -Block 0001 [ 4]: 3a0726b2611e576c -Block 0001 [ 5]: 164de228aef03411 -Block 0001 [ 6]: e0ef04f35c1b90bf -Block 0001 [ 7]: 8a24c8c277606abb -Block 0001 [ 8]: 15a9a3833a46cd66 -Block 0001 [ 9]: 3479e3154cbd781b -Block 0001 [ 10]: cee2576a3ea0a445 -Block 0001 [ 11]: 71c742512ce7dfe7 -Block 0001 [ 12]: 374bb75c47786552 -Block 0001 [ 13]: 630b3b5d99fcd3e7 -Block 0001 [ 14]: 846e9694385dcb34 -Block 0001 [ 15]: 5be2868061e80aa0 -Block 0001 [ 16]: 0e16b6de661c36fc -Block 0001 [ 17]: 0e0d73e8f72a85cf -Block 0001 [ 18]: 662e527420484106 -Block 0001 [ 19]: fcbe0420b0c32a2f -Block 0001 [ 20]: 89e98ddc25ef2d06 -Block 0001 [ 21]: 5caa597bcb7ba3e7 -Block 0001 [ 22]: 8e03cf25508e979f -Block 0001 [ 23]: 363bd2a52521a8f2 -Block 0001 [ 24]: c1f3534d80f3aeeb -Block 0001 [ 25]: b3eb770ff7cb18db -Block 0001 [ 26]: 2c7aa5f0da8ac2e7 -Block 0001 [ 27]: 15e9bdb364864ddc -Block 0001 [ 28]: 255c874b1c6a9018 -Block 0001 [ 29]: b5ba03b749263dbf -Block 0001 [ 30]: e2ed6f93e61f5697 -Block 0001 [ 31]: a78394dcc822edab -Block 0001 [ 32]: c08c2ac9e1443d09 -Block 0001 [ 33]: b88b9991ebef2207 -Block 0001 [ 34]: fcd15d6715225a8f -Block 0001 [ 35]: a9133bf21b326cd9 -Block 0001 [ 36]: eb9e37c6a7389f4a -Block 0001 [ 37]: e512d3c8e4461442 -Block 0001 [ 38]: 43ea6edbdfee43da -Block 0001 [ 39]: 7732be0a715b4fe1 -Block 0001 [ 40]: b7f665f9497beedf -Block 0001 [ 41]: dec2cc2b22055132 -Block 0001 [ 42]: c453e83a35577b22 -Block 0001 [ 43]: 0bec3a763bd104fe -Block 0001 [ 44]: 8b3bae725e3cd134 -Block 0001 [ 45]: ee59014b976308ab -Block 0001 [ 46]: f87ad095fb5c97cf -Block 0001 [ 47]: 0ae0eaceb2778e2f -Block 0001 [ 48]: 723bd2b7767936c5 -Block 0001 [ 49]: f49d4c733715ef4e -Block 0001 [ 50]: d3c7f66d314946ea -Block 0001 [ 51]: b4d09df6006617bd -Block 0001 [ 52]: 7cacc786cae67a7f -Block 0001 [ 53]: cb7c92aa113c6456 -Block 0001 [ 54]: 00beca54428b7dfc -Block 0001 [ 55]: 411b91c93166751e -Block 0001 [ 56]: db3db21fad2ef261 -Block 0001 [ 57]: 4c7fdda23adee093 -Block 0001 [ 58]: 9aa9d0309fe56528 -Block 0001 [ 59]: 7ac95d0e833e8229 -Block 0001 [ 60]: b866b5cac808e923 -Block 0001 [ 61]: ec33c77566bd6359 -Block 0001 [ 62]: b2eebb43d735ee1d -Block 0001 [ 63]: 118649041c59e2a7 -Block 0001 [ 64]: af20206ba5a1d752 -Block 0001 [ 65]: ba2ffe7788aae99a -Block 0001 [ 66]: a7b7298d3894db9f -Block 0001 [ 67]: 672ca76708483292 -Block 0001 [ 68]: aff4782c897c1a19 -Block 0001 [ 69]: 538d023ad96755df -Block 0001 [ 70]: 7ed7c497cab08355 -Block 0001 [ 71]: 884b34285863cb15 -Block 0001 [ 72]: ad1074a607136bf4 -Block 0001 [ 73]: 2ce505de99c23839 -Block 0001 [ 74]: b5604fab94c774ce -Block 0001 [ 75]: 109c4bd7c942078d -Block 0001 [ 76]: 3162ee468266a0bb -Block 0001 [ 77]: 6c3fc918ea50144b -Block 0001 [ 78]: 78f48ec6e1935763 -Block 0001 [ 79]: 40d6723006b90439 -Block 0001 [ 80]: 949a1c0ada5735dc -Block 0001 [ 81]: dc267afd286782f0 -Block 0001 [ 82]: 8804bd6d72a09d6d -Block 0001 [ 83]: bf39223e7a69770f -Block 0001 [ 84]: eb9d92cf56dff8d4 -Block 0001 [ 85]: 9ba7e9818f3e2b83 -Block 0001 [ 86]: accc832478308d87 -Block 0001 [ 87]: 71426e5757b74cf5 -Block 0001 [ 88]: 86a2ce89cd883f48 -Block 0001 [ 89]: d51f5d0a02790eb0 -Block 0001 [ 90]: 69e80c29297bedba -Block 0001 [ 91]: b3ec930fd404c55f -Block 0001 [ 92]: f24a1b23b7fedd1b -Block 0001 [ 93]: df5eccd58d6e4d6d -Block 0001 [ 94]: df40d0c69d78d9e8 -Block 0001 [ 95]: 3f8deaad8715ac9e -Block 0001 [ 96]: 1420be79644c1361 -Block 0001 [ 97]: 7e419bbb9bb9c864 -Block 0001 [ 98]: 013bf5d9ff74a285 -Block 0001 [ 99]: 581cd3a635a82691 -Block 0001 [100]: 199060c3ec5749a7 -Block 0001 [101]: d2fb1f9a243f098e -Block 0001 [102]: 37e1d71ee09bf2ea -Block 0001 [103]: 8c6955f9c37d373d -Block 0001 [104]: 0198d6d56e79086c -Block 0001 [105]: 129bfc2713ea2f9b -Block 0001 [106]: 8a967e53ac7c5692 -Block 0001 [107]: 75c7da7d357d5081 -Block 0001 [108]: 2dd6000b05d59968 -Block 0001 [109]: 06d0f5a683d1d03d -Block 0001 [110]: ebe5918726260f2f -Block 0001 [111]: 6930dac6aed65ff2 -Block 0001 [112]: e6df29645dd40e27 -Block 0001 [113]: 7b194cdaa168bcbe -Block 0001 [114]: 4a6cf8603ba55ee7 -Block 0001 [115]: 810f83dfc5dba615 -Block 0001 [116]: 07309feafb67199a -Block 0001 [117]: f6935d2b7c348c42 -Block 0001 [118]: 03c9c420a3e2eb7e -Block 0001 [119]: 8fe083617e5113eb -Block 0001 [120]: 28646389371863dc -Block 0001 [121]: 9d2d5c7776640f98 -Block 0001 [122]: 50494930c9be4284 -Block 0001 [123]: ef8058bf7ff7bde1 -Block 0001 [124]: be1b94279c25e46c -Block 0001 [125]: dcf4a14db25c1256 -Block 0001 [126]: ca8ef78ff53a0810 -Block 0001 [127]: 60f3728e2974e872 -Block 0002 [ 0]: 39369bd574bae1e2 -Block 0002 [ 1]: 03c14c225a42f602 -Block 0002 [ 2]: 59451ab02d6097c4 -Block 0002 [ 3]: 6201036724302781 -Block 0002 [ 4]: 7df52ebbc54327fb -Block 0002 [ 5]: 02cfe5c5677df54c -Block 0002 [ 6]: 383b7ca84b2fe67b -Block 0002 [ 7]: 935af47cb7e61e8e -Block 0002 [ 8]: 2986c34f785bf3ce -Block 0002 [ 9]: 7fba12b74db5a3ea -Block 0002 [ 10]: 0ff431215ac1f459 -Block 0002 [ 11]: 43a4cb7337fcd315 -Block 0002 [ 12]: 814d8fe45d6cecae -Block 0002 [ 13]: 7b902f70ed347f57 -Block 0002 [ 14]: 29fe23d166395653 -Block 0002 [ 15]: eef4afe6df3f28f3 -Block 0002 [ 16]: 127e45c900e2c848 -Block 0002 [ 17]: 3306010e528593e7 -Block 0002 [ 18]: b8c02ac97a845931 -Block 0002 [ 19]: 46b64e9d8859791c -Block 0002 [ 20]: 7c4593f720b8abfc -Block 0002 [ 21]: e671739a7fa910c8 -Block 0002 [ 22]: 3c0ca2e596d4c5d7 -Block 0002 [ 23]: e5cc2e4ca17ee077 -Block 0002 [ 24]: 701b7a9777c5b49a -Block 0002 [ 25]: 9131b8f9e8d63e08 -Block 0002 [ 26]: 2b7337f76bc9eacd -Block 0002 [ 27]: 2239c65e34ca42fb -Block 0002 [ 28]: 745f147facd4c359 -Block 0002 [ 29]: 82719af98b72fd9d -Block 0002 [ 30]: cd2848b4284fde78 -Block 0002 [ 31]: ca255cad0f479018 -Block 0002 [ 32]: db7ec3db4fa79052 -Block 0002 [ 33]: 2a3a0842efecbdd6 -Block 0002 [ 34]: e6f8d36519338fa6 -Block 0002 [ 35]: 54bb7617ed5b435e -Block 0002 [ 36]: 3b2807d9b536ad4a -Block 0002 [ 37]: fc84c316852ec1fa -Block 0002 [ 38]: 26b77f4eb9432021 -Block 0002 [ 39]: d789c86e89425b09 -Block 0002 [ 40]: f8be2d5484b0516a -Block 0002 [ 41]: 2bfeda2bb3b7e808 -Block 0002 [ 42]: d3bafc5d0646a46f -Block 0002 [ 43]: 3d0952ab4da0d97d -Block 0002 [ 44]: 7464b8d709366c81 -Block 0002 [ 45]: 36d1b42cde123306 -Block 0002 [ 46]: 8004e517e8316a81 -Block 0002 [ 47]: 7c90747d7b078051 -Block 0002 [ 48]: 199d6dfc53aa8200 -Block 0002 [ 49]: 259280428b473b5a -Block 0002 [ 50]: b8f07b7ef895a5e0 -Block 0002 [ 51]: e1d51665927f76bd -Block 0002 [ 52]: a8eb08f4e73b8cdd -Block 0002 [ 53]: ee82681cc6052db9 -Block 0002 [ 54]: e5826081a53a17f6 -Block 0002 [ 55]: ff40c3b7dd042602 -Block 0002 [ 56]: 57dd3f387a60b728 -Block 0002 [ 57]: 807a505c9f389331 -Block 0002 [ 58]: 67f2d7a33e606167 -Block 0002 [ 59]: 2d45965aa7e282f9 -Block 0002 [ 60]: 5624e92fb2dc4f4b -Block 0002 [ 61]: a1538a72c67d49b8 -Block 0002 [ 62]: a69b48d6b0e95ba7 -Block 0002 [ 63]: 4da8014e6a26f616 -Block 0002 [ 64]: 5d6b7d6ab6ebc703 -Block 0002 [ 65]: aeb74a3c5d7f4e27 -Block 0002 [ 66]: e67f12f71042997d -Block 0002 [ 67]: 8b4e258db674c59b -Block 0002 [ 68]: 095994a8f629afa1 -Block 0002 [ 69]: cefe061777f2b9ba -Block 0002 [ 70]: 3111c90d014dfd20 -Block 0002 [ 71]: 9326129a0010bd4c -Block 0002 [ 72]: ac17c28df5603581 -Block 0002 [ 73]: ad9e792b2600856b -Block 0002 [ 74]: 7b52afe6653f1cbc -Block 0002 [ 75]: 4a3e1516bfaf4925 -Block 0002 [ 76]: 8a082f41cca1c7de -Block 0002 [ 77]: 5e078a2d9634808e -Block 0002 [ 78]: 24951ed4ec5dea22 -Block 0002 [ 79]: 3091f28343d7c8b3 -Block 0002 [ 80]: dd18c8476dee4378 -Block 0002 [ 81]: fb421e171aac32be -Block 0002 [ 82]: 76bfb4022d16cfdb -Block 0002 [ 83]: 8f11eff2545455b4 -Block 0002 [ 84]: 8a2caf8661e95761 -Block 0002 [ 85]: 978e70edf1fafd80 -Block 0002 [ 86]: db4c587ad8767542 -Block 0002 [ 87]: 048172243ee062ab -Block 0002 [ 88]: ad90fc7b6b091293 -Block 0002 [ 89]: 2cc72efbd1e1fc8a -Block 0002 [ 90]: 639149af926c30ee -Block 0002 [ 91]: 7f942b868a1e86c5 -Block 0002 [ 92]: 8dd06eb5391596bc -Block 0002 [ 93]: e06cd833c21c3452 -Block 0002 [ 94]: f6f1f3faaa49b90c -Block 0002 [ 95]: b69c11f167588766 -Block 0002 [ 96]: 33eba8a816984e87 -Block 0002 [ 97]: 75c80eebb391fd0d -Block 0002 [ 98]: f9fdf867aa40219f -Block 0002 [ 99]: 73d3352396231a1e -Block 0002 [100]: 1c4bacf442c7da1e -Block 0002 [101]: b6b7fe2213ed030c -Block 0002 [102]: 8d0c685cb7c66ed9 -Block 0002 [103]: 1a96ac2110dd72bb -Block 0002 [104]: 244427570cb404eb -Block 0002 [105]: 8ae727d6c5d3518d -Block 0002 [106]: 97b104542790620e -Block 0002 [107]: 622dfdd36156eeca -Block 0002 [108]: a681e9d1ddda8db1 -Block 0002 [109]: f83107b93461b7f7 -Block 0002 [110]: cac3d7435c8b7450 -Block 0002 [111]: 876b185293c2ca77 -Block 0002 [112]: 2e1062849912cca8 -Block 0002 [113]: 467cf6b5ac5de0d5 -Block 0002 [114]: 6f44c747864760d5 -Block 0002 [115]: 7c686cf9c11360c3 -Block 0002 [116]: 3ed0e4a95c138496 -Block 0002 [117]: 6993c2bc63d9ac3d -Block 0002 [118]: 0fb471c25e0c41f8 -Block 0002 [119]: b7b0a9f7f9f49c2f -Block 0002 [120]: b8f3f293846684d6 -Block 0002 [121]: d5e6beb9078d4fd5 -Block 0002 [122]: dd647833684bd281 -Block 0002 [123]: 9978cc549f5c517e -Block 0002 [124]: d2c6b09d7235366d -Block 0002 [125]: 42dd43d586384fb5 -Block 0002 [126]: 1e54c27c01e78a0a -Block 0002 [127]: 08a37dbd2e2c584c -Block 0003 [ 0]: f654555f71650eb5 -Block 0003 [ 1]: 3311cb058032eb5e -Block 0003 [ 2]: fc42c737ea9c6945 -Block 0003 [ 3]: e21292d9164f2490 -Block 0003 [ 4]: 27d5b895386b5566 -Block 0003 [ 5]: 33f63d927b58fc26 -Block 0003 [ 6]: 32174cdb2bdc697a -Block 0003 [ 7]: 1631ec0d811e1d44 -Block 0003 [ 8]: 5ff386aeb5b7bbc9 -Block 0003 [ 9]: 286d219ba13605b2 -Block 0003 [ 10]: 0eafeddd1a0e0ef1 -Block 0003 [ 11]: 2ba6e0082d1218ae -Block 0003 [ 12]: 6956be8e800c160c -Block 0003 [ 13]: fded8de7903d4593 -Block 0003 [ 14]: edcac78e6073c155 -Block 0003 [ 15]: 273bc8ae910e209f -Block 0003 [ 16]: 4936f51d1793db47 -Block 0003 [ 17]: abfd6cef979f9dc7 -Block 0003 [ 18]: 85f80f74df948f05 -Block 0003 [ 19]: facb8f407834cdbf -Block 0003 [ 20]: f17ef84c91fefb2e -Block 0003 [ 21]: 0bc71a9ff8563aa5 -Block 0003 [ 22]: 5f00784cdffd8521 -Block 0003 [ 23]: c3efad6fcbbc8a06 -Block 0003 [ 24]: 9490284fad1de8b8 -Block 0003 [ 25]: 14d654aedea41317 -Block 0003 [ 26]: c6d4efd8354e0949 -Block 0003 [ 27]: b9d56d742808a1c6 -Block 0003 [ 28]: 93c4b288ef9737e2 -Block 0003 [ 29]: da912a5517927945 -Block 0003 [ 30]: 153b0fd5456cea9f -Block 0003 [ 31]: 88ff1e555463a130 -Block 0003 [ 32]: 29a555f4cd5b9da0 -Block 0003 [ 33]: 14c51a88b06a0773 -Block 0003 [ 34]: 127711470296f408 -Block 0003 [ 35]: b77c859a87ddd4b2 -Block 0003 [ 36]: 55989192f96f7c3d -Block 0003 [ 37]: b8cd6fa583cf4447 -Block 0003 [ 38]: 30e4137e4fe0b6a3 -Block 0003 [ 39]: d193e8dcb686123f -Block 0003 [ 40]: ae11628e6951ccc9 -Block 0003 [ 41]: 87c07ce234d715ed -Block 0003 [ 42]: 48512af01ece52c6 -Block 0003 [ 43]: ac5bd0db212ea1c2 -Block 0003 [ 44]: fc27495856d80c64 -Block 0003 [ 45]: d52ad551af985ed5 -Block 0003 [ 46]: 0f61ba492b8ea576 -Block 0003 [ 47]: 16f7d80e585074f7 -Block 0003 [ 48]: 1168c339be2be781 -Block 0003 [ 49]: 5491fea8c46927b3 -Block 0003 [ 50]: aa61457274175666 -Block 0003 [ 51]: 3a4cf2ecfa768b01 -Block 0003 [ 52]: 0b02dfde40ed6dd9 -Block 0003 [ 53]: 3aef92409270803d -Block 0003 [ 54]: 7d9b3b46d5f370b3 -Block 0003 [ 55]: 8bfe8cea00744a99 -Block 0003 [ 56]: c3ddc5c8c41dfb8c -Block 0003 [ 57]: 65d9708ed44e7df6 -Block 0003 [ 58]: 6ffdcee0a3f57453 -Block 0003 [ 59]: a8c006aca6c7f351 -Block 0003 [ 60]: 9fcb17f2691e1b55 -Block 0003 [ 61]: 0d090bf265f19bc5 -Block 0003 [ 62]: 21ad8443d491f5d1 -Block 0003 [ 63]: 916906b4f23224a3 -Block 0003 [ 64]: 10326b632749767c -Block 0003 [ 65]: f98c66a67c554352 -Block 0003 [ 66]: 9d1db4e901aec7a7 -Block 0003 [ 67]: f4a9961aba0cce0b -Block 0003 [ 68]: 90838c0c8fbee672 -Block 0003 [ 69]: a629e641159afbce -Block 0003 [ 70]: 0243ef1605b73782 -Block 0003 [ 71]: f4da62fa164f1744 -Block 0003 [ 72]: ba1ab52f4c558313 -Block 0003 [ 73]: 3382bbdd5f4d4288 -Block 0003 [ 74]: c87f9ec6d052b361 -Block 0003 [ 75]: 8c2de6ea01c4b855 -Block 0003 [ 76]: aef8c1c0bc852867 -Block 0003 [ 77]: a15792470e7625f7 -Block 0003 [ 78]: eb1499c0c6cb078b -Block 0003 [ 79]: 798694ae75cdcb8b -Block 0003 [ 80]: 93fffae472430115 -Block 0003 [ 81]: 282640d3575746c7 -Block 0003 [ 82]: ae00e8190db94ff8 -Block 0003 [ 83]: 947bc0354b75208e -Block 0003 [ 84]: ea8105cefa4cfcc4 -Block 0003 [ 85]: afe4ec955e6566d2 -Block 0003 [ 86]: b981cf985be10ec2 -Block 0003 [ 87]: 49434b094d1ae22b -Block 0003 [ 88]: 556e09e96107d1af -Block 0003 [ 89]: f62123222b386d5e -Block 0003 [ 90]: 6d178b5dd97aaf24 -Block 0003 [ 91]: 692bc5ab5b4ae925 -Block 0003 [ 92]: 3eebac8e2943d15f -Block 0003 [ 93]: d4c6171da55b6eac -Block 0003 [ 94]: dc546cd17f8219b7 -Block 0003 [ 95]: b933681a382fee47 -Block 0003 [ 96]: 4db5fa3ce780954d -Block 0003 [ 97]: 15229c91cb28bd08 -Block 0003 [ 98]: f740ddedafb71fc7 -Block 0003 [ 99]: d913d87686827178 -Block 0003 [100]: 563ab13b43e54c66 -Block 0003 [101]: f6ff4f6d55021cbf -Block 0003 [102]: 6d98731ba4459fe4 -Block 0003 [103]: fbef87bfb8f3b748 -Block 0003 [104]: 266b4c4a60074b3e -Block 0003 [105]: 0350f01dae1431b2 -Block 0003 [106]: 13a6a89350b1ee9f -Block 0003 [107]: 0326c88be0d895ea -Block 0003 [108]: 4ebefeafac42a5f4 -Block 0003 [109]: 71892e75bdc60352 -Block 0003 [110]: b7d3b5ecb45e0c8d -Block 0003 [111]: 860a73b1dd642684 -Block 0003 [112]: fd84fba35e10a99d -Block 0003 [113]: 7a8410820891078b -Block 0003 [114]: 86425f3ff9294b51 -Block 0003 [115]: d5fb33f90967ce7f -Block 0003 [116]: 53f65da243c0178d -Block 0003 [117]: 62029d3cce2945c2 -Block 0003 [118]: 4b1e0f57d816419f -Block 0003 [119]: 51eb3849aaffbaac -Block 0003 [120]: e05d248edb287da8 -Block 0003 [121]: 9615afc8dbd4ff70 -Block 0003 [122]: ff3e6685c8335e56 -Block 0003 [123]: 4394ae3741da402d -Block 0003 [124]: 62b8900ae6d45ec7 -Block 0003 [125]: 1e0e3b150ac1b8e6 -Block 0003 [126]: 46406a5dbdb3f471 -Block 0003 [127]: 4f2f51287c0533c5 -Block 0004 [ 0]: 6db3c512b201002a -Block 0004 [ 1]: a4893e550c6e847d -Block 0004 [ 2]: d738c01c6a4163cf -Block 0004 [ 3]: 3964a940c68c7672 -Block 0004 [ 4]: 008607d363313b1e -Block 0004 [ 5]: 09ac4c012f8a9f73 -Block 0004 [ 6]: 30407682ac696ad5 -Block 0004 [ 7]: d11878678fd15c5e -Block 0004 [ 8]: 2c97e49a7c535568 -Block 0004 [ 9]: c657dc0e64f3bada -Block 0004 [ 10]: 71d6d5d67c0e69c0 -Block 0004 [ 11]: 113f757922c12d80 -Block 0004 [ 12]: dff40f405affada0 -Block 0004 [ 13]: 7c770d074afdccbe -Block 0004 [ 14]: 02178564a28476ca -Block 0004 [ 15]: db9f8e2d04cb05d0 -Block 0004 [ 16]: 28dcb359ce250e08 -Block 0004 [ 17]: 1a551496399d2942 -Block 0004 [ 18]: e88e14ab890ff5ef -Block 0004 [ 19]: 488747a7703b9e7e -Block 0004 [ 20]: c31d161b0cc89570 -Block 0004 [ 21]: 4565c4b429ba6e1b -Block 0004 [ 22]: 0dfc72c087e1e08d -Block 0004 [ 23]: c92bf55e556097f8 -Block 0004 [ 24]: c4e7fe3a2a6e24ae -Block 0004 [ 25]: 581c2a385043aa51 -Block 0004 [ 26]: 35aef500b5f3eeae -Block 0004 [ 27]: 7f0e1d27c86cd926 -Block 0004 [ 28]: d557943ed1408c41 -Block 0004 [ 29]: 4af1b776a3298be5 -Block 0004 [ 30]: 8fd70fb3204a5114 -Block 0004 [ 31]: cd384f9fe3618f69 -Block 0004 [ 32]: 7c1c3fda22ce27c7 -Block 0004 [ 33]: dafd9ca79b351f86 -Block 0004 [ 34]: d44cb4fe10e44d5a -Block 0004 [ 35]: e9b2864c088d109e -Block 0004 [ 36]: 48e804a44fcc8a52 -Block 0004 [ 37]: daf3c5093302dc6b -Block 0004 [ 38]: a5be11b060ed5242 -Block 0004 [ 39]: e9140882ceeca69e -Block 0004 [ 40]: cc52836dc00f5bc7 -Block 0004 [ 41]: a60c4dd162e9ff75 -Block 0004 [ 42]: 48583d5cc8289c3e -Block 0004 [ 43]: 7f054592fdc38b14 -Block 0004 [ 44]: 132a9aa37870e575 -Block 0004 [ 45]: 73190cf53e288776 -Block 0004 [ 46]: ce8fde7a06993a1c -Block 0004 [ 47]: ed6199768f24b208 -Block 0004 [ 48]: 3ce97da1f9764400 -Block 0004 [ 49]: 23ecfa6cada7dd08 -Block 0004 [ 50]: 742ac86a22594f47 -Block 0004 [ 51]: 97676b7e0ae47bfa -Block 0004 [ 52]: ca78eecf87b2c0ef -Block 0004 [ 53]: dbff89c5a1ebad88 -Block 0004 [ 54]: 5533435d722aa535 -Block 0004 [ 55]: d51f7db2b23c1fcc -Block 0004 [ 56]: 65945d416121db78 -Block 0004 [ 57]: 2dc4f63b23ade57c -Block 0004 [ 58]: 22918d3b5b563b9d -Block 0004 [ 59]: 586ecd2e7df54ab2 -Block 0004 [ 60]: 1ac158a954866416 -Block 0004 [ 61]: 58d7ffbda6c857ff -Block 0004 [ 62]: 05a5b1765440b5d4 -Block 0004 [ 63]: f5593d391d483ae6 -Block 0004 [ 64]: b63afd052e7947cb -Block 0004 [ 65]: e9f1f92af8a2691d -Block 0004 [ 66]: 60fc54dfe8069a35 -Block 0004 [ 67]: fd2d4ccef3df5227 -Block 0004 [ 68]: 865b629d66d54066 -Block 0004 [ 69]: 062e9dab817e9e93 -Block 0004 [ 70]: 01671e76195217b0 -Block 0004 [ 71]: db554319cc55bbc6 -Block 0004 [ 72]: 33767aa620c6b9b4 -Block 0004 [ 73]: eb3070747ce8cd7a -Block 0004 [ 74]: 04a8f94c1f278eb8 -Block 0004 [ 75]: e37bd2e6fd74ac2d -Block 0004 [ 76]: 51954636db769391 -Block 0004 [ 77]: 62c924aef3d3a00b -Block 0004 [ 78]: 6be2ac1f4372e6bd -Block 0004 [ 79]: 6da5ea764aca7b86 -Block 0004 [ 80]: 7e98e9bb49fd5555 -Block 0004 [ 81]: 240a6bbea9499bf4 -Block 0004 [ 82]: ddae77704bd95091 -Block 0004 [ 83]: f20301a1e60a6388 -Block 0004 [ 84]: 843a97d690d125be -Block 0004 [ 85]: 0b22b9279728e0e4 -Block 0004 [ 86]: a68682bfef9cab88 -Block 0004 [ 87]: 54c152c5f6aa3347 -Block 0004 [ 88]: 3808ff4b61eb729e -Block 0004 [ 89]: eefb42a45db2b6df -Block 0004 [ 90]: 1057807d974ab8ba -Block 0004 [ 91]: f8b3a10c3c4ff30c -Block 0004 [ 92]: 50a10480d2c50642 -Block 0004 [ 93]: 9346af5b676d53d8 -Block 0004 [ 94]: fb4f3d3d2071a72c -Block 0004 [ 95]: 34ba748255e95958 -Block 0004 [ 96]: 1d55802ac5c6fbdd -Block 0004 [ 97]: 6e9bf639f96a71f7 -Block 0004 [ 98]: 2865022a7dca1fb3 -Block 0004 [ 99]: 051f576aa5462e73 -Block 0004 [100]: d7d06ece195f2115 -Block 0004 [101]: d198cfcdb221649a -Block 0004 [102]: d29774868386b41a -Block 0004 [103]: ed82361d873ab22c -Block 0004 [104]: a183f13bbdb3604d -Block 0004 [105]: 0d090eafafb9360d -Block 0004 [106]: c332ad53dca32795 -Block 0004 [107]: fca986dd4c58e868 -Block 0004 [108]: 7b049c4605c543ae -Block 0004 [109]: 59001a287ee5eb5a -Block 0004 [110]: ec48fff4d2bf19bc -Block 0004 [111]: 1ffbfa763d246fb2 -Block 0004 [112]: 77d442d05e756c41 -Block 0004 [113]: 7303708414279f9f -Block 0004 [114]: 1af6d103ba844721 -Block 0004 [115]: bf3af22c312f879f -Block 0004 [116]: 1974673bd6eace85 -Block 0004 [117]: 3c09fe80692acf97 -Block 0004 [118]: 69b5ceffe923242e -Block 0004 [119]: 5250d18f4e18d38f -Block 0004 [120]: 775d04feeecac653 -Block 0004 [121]: 3158b3eebf7cbfa1 -Block 0004 [122]: c9eb36370d6b31fa -Block 0004 [123]: 1c8d0a60062f4870 -Block 0004 [124]: 0536d25cf8ac9a2d -Block 0004 [125]: 2bbdd54340de4566 -Block 0004 [126]: 83a3bb8032d4444e -Block 0004 [127]: 49472858871210ef -Block 0005 [ 0]: b4676f8440d3dd72 -Block 0005 [ 1]: 543dc9478bcae8a8 -Block 0005 [ 2]: 0a1b2608dad7d093 -Block 0005 [ 3]: 158d884310bf64b9 -Block 0005 [ 4]: 0c39f463ae7e1f98 -Block 0005 [ 5]: 0f484a93597079e2 -Block 0005 [ 6]: 22008b41a1cae988 -Block 0005 [ 7]: 39fb86f28f9a72a9 -Block 0005 [ 8]: 0580218b147847ec -Block 0005 [ 9]: 45050f209731847b -Block 0005 [ 10]: a74df9c792a856ad -Block 0005 [ 11]: 59f9d055bf19b4b4 -Block 0005 [ 12]: 580d97d3550b9001 -Block 0005 [ 13]: 99394acf81072667 -Block 0005 [ 14]: 93bbd5b7531eada8 -Block 0005 [ 15]: 1fecebd996a84649 -Block 0005 [ 16]: 6a17fbcdbcde10f9 -Block 0005 [ 17]: 5276ce784b77e366 -Block 0005 [ 18]: 8a44853a1744c6c0 -Block 0005 [ 19]: 4760a36dfe24f187 -Block 0005 [ 20]: 7820ef1c716bc110 -Block 0005 [ 21]: 6ef7d4f420895751 -Block 0005 [ 22]: 605216e6d4a25a6a -Block 0005 [ 23]: 4b5acecae3fc8137 -Block 0005 [ 24]: 8df97b41aa216f3e -Block 0005 [ 25]: dcf8b51afa021170 -Block 0005 [ 26]: 72f57e5d1198747e -Block 0005 [ 27]: 7ab38114f0c3bfa0 -Block 0005 [ 28]: f515e2ba68a87769 -Block 0005 [ 29]: f422c9c76c9eb8cb -Block 0005 [ 30]: 9c9891e7d3c223d4 -Block 0005 [ 31]: ce6f99e5c48a2663 -Block 0005 [ 32]: d29a3e3cd369dc81 -Block 0005 [ 33]: 40d164ddb9622371 -Block 0005 [ 34]: acb980475786ab78 -Block 0005 [ 35]: f01def3e29ade749 -Block 0005 [ 36]: 85c0aca46da00807 -Block 0005 [ 37]: 6d6d6499dff5bc9b -Block 0005 [ 38]: f1a27605d1fe54ab -Block 0005 [ 39]: 592b2bc9bed0c745 -Block 0005 [ 40]: b9b8f3626ae6869f -Block 0005 [ 41]: 928331757d8b0ad0 -Block 0005 [ 42]: 0122bca4dd95e8fa -Block 0005 [ 43]: 25deae32523e74d9 -Block 0005 [ 44]: f8504d6710fa925b -Block 0005 [ 45]: 9d1b3bfa72ae59c5 -Block 0005 [ 46]: 3bba17b4dd2869d1 -Block 0005 [ 47]: e37edf9156e83204 -Block 0005 [ 48]: 104bd93e079e7426 -Block 0005 [ 49]: 82ccac92ea08c463 -Block 0005 [ 50]: 4f9fbf43f625dff8 -Block 0005 [ 51]: ef452ce3634d96d6 -Block 0005 [ 52]: 6ca846373c25297b -Block 0005 [ 53]: 20f669afc7c5af53 -Block 0005 [ 54]: 3cb2ad71a1c3a85b -Block 0005 [ 55]: 8e62f61109c2a232 -Block 0005 [ 56]: 944e5054bdca864e -Block 0005 [ 57]: 449c32f8480c83eb -Block 0005 [ 58]: e72123d7320f8a5c -Block 0005 [ 59]: ea19e7d53fc6fdc8 -Block 0005 [ 60]: 7a0bce3cc157ed97 -Block 0005 [ 61]: b931c70ee2259840 -Block 0005 [ 62]: bb95f4ea8eb1f929 -Block 0005 [ 63]: baaff204920aec3b -Block 0005 [ 64]: d53b7d052d5fe9eb -Block 0005 [ 65]: 846fa7db54e2b603 -Block 0005 [ 66]: d58ecfb72f270009 -Block 0005 [ 67]: 2e2e2e0ed43881b1 -Block 0005 [ 68]: 37e5fa1b47043b18 -Block 0005 [ 69]: 2d2fc7ac1c4e27b4 -Block 0005 [ 70]: 41bdf2f0b4343a48 -Block 0005 [ 71]: d6c50cf3cbd28f69 -Block 0005 [ 72]: 4f15d88744e935a3 -Block 0005 [ 73]: d2d070023d316db8 -Block 0005 [ 74]: 65d9ddede0875a36 -Block 0005 [ 75]: a85314d0b5bbb492 -Block 0005 [ 76]: 9621385a2f5571ba -Block 0005 [ 77]: d8b64682e9e633e3 -Block 0005 [ 78]: 34625b7ac1add871 -Block 0005 [ 79]: 0bd132a3ff51918b -Block 0005 [ 80]: 0bb1a7820a7db02f -Block 0005 [ 81]: 5416bc0ac394fe0b -Block 0005 [ 82]: e4a245f3f2ef7307 -Block 0005 [ 83]: f32a9098d6413d91 -Block 0005 [ 84]: be5f1d656b05bb45 -Block 0005 [ 85]: cb5d82099937e4ef -Block 0005 [ 86]: 6ccb388fa51e044f -Block 0005 [ 87]: fb325dce97a5669d -Block 0005 [ 88]: a997c10efa786b25 -Block 0005 [ 89]: 69efe80c86c535aa -Block 0005 [ 90]: 62acfc9e2e0cdc71 -Block 0005 [ 91]: 5ca162ddc15667a2 -Block 0005 [ 92]: 6bf05b3e8df7591b -Block 0005 [ 93]: f2cc19d04fc4678f -Block 0005 [ 94]: cc85393eb2f131c6 -Block 0005 [ 95]: 4bd2459fa6ac74dc -Block 0005 [ 96]: 794aa76fcece2af1 -Block 0005 [ 97]: a66e09232668e617 -Block 0005 [ 98]: 33e95cf3618e4e63 -Block 0005 [ 99]: ebf0af1432a8d2d4 -Block 0005 [100]: 3bd654a90acf89b5 -Block 0005 [101]: db3b1e828e36e540 -Block 0005 [102]: c2edec0973b1f22b -Block 0005 [103]: 29e916a5983dcf50 -Block 0005 [104]: 679e56d49d4fb9ad -Block 0005 [105]: 5339d09cda2b4cc0 -Block 0005 [106]: df3f7016c2fc771e -Block 0005 [107]: 94af855801dd680f -Block 0005 [108]: 38f0e2ee03acce8b -Block 0005 [109]: ca815a0c41218568 -Block 0005 [110]: ae44de789a0125e0 -Block 0005 [111]: b9cf3947f5aa75f9 -Block 0005 [112]: ef601c65b86c2a39 -Block 0005 [113]: ef17112febe7e477 -Block 0005 [114]: 44974a2a50bd092f -Block 0005 [115]: 0c30352ce2e2284b -Block 0005 [116]: 120566988befae10 -Block 0005 [117]: 396d4337fbe810d9 -Block 0005 [118]: 772684b56b646145 -Block 0005 [119]: 771e20d7bc7ae85c -Block 0005 [120]: b3d55b22de13f793 -Block 0005 [121]: 8f6403353849ee33 -Block 0005 [122]: 90eae65b5bc8e530 -Block 0005 [123]: aff5d5566e449a9b -Block 0005 [124]: bf7f8fba7ae06be1 -Block 0005 [125]: 293aec5b82c5fdbf -Block 0005 [126]: 440e20ef46f7ecbf -Block 0005 [127]: d662bde9b1cc1f76 -Block 0006 [ 0]: 14b82b49b0e25e71 -Block 0006 [ 1]: e937c4f6a43a3a5c -Block 0006 [ 2]: 065b9b36f123727a -Block 0006 [ 3]: a074456c731b7c9d -Block 0006 [ 4]: 8e0b0ee249b35b85 -Block 0006 [ 5]: ee5efbaaaedc6382 -Block 0006 [ 6]: 372ef432529a19dd -Block 0006 [ 7]: 0c39971923fd7ee3 -Block 0006 [ 8]: ab56b63dcb823bc2 -Block 0006 [ 9]: e3e30eba2c887545 -Block 0006 [ 10]: b1c1cf7f034fcab9 -Block 0006 [ 11]: 5a37ae1a9aba41ba -Block 0006 [ 12]: 90417da3eb65e3c6 -Block 0006 [ 13]: 9715c7adf7d48bd9 -Block 0006 [ 14]: a665424a5fa14b29 -Block 0006 [ 15]: 75e72489bda8111f -Block 0006 [ 16]: b497ab6e2575a894 -Block 0006 [ 17]: 10e82458b6431842 -Block 0006 [ 18]: 9c4fe9b5b4fa60b5 -Block 0006 [ 19]: cc0d3fc1fa5be33a -Block 0006 [ 20]: 4016c756a496d9d4 -Block 0006 [ 21]: 20d97fa72058f7d4 -Block 0006 [ 22]: 3a636962e222ebab -Block 0006 [ 23]: 2edbcf4ee4bd517c -Block 0006 [ 24]: e8d7fba7a86bddb4 -Block 0006 [ 25]: cf6180086cac6d0a -Block 0006 [ 26]: e3f8824092b4260f -Block 0006 [ 27]: f056ef7493b06cca -Block 0006 [ 28]: fac82c5c43b31478 -Block 0006 [ 29]: e660f484bafd3c93 -Block 0006 [ 30]: 95d236ab04727c88 -Block 0006 [ 31]: b9a61e8878952e45 -Block 0006 [ 32]: 689a578392b86703 -Block 0006 [ 33]: eb8522fc4bf33672 -Block 0006 [ 34]: 93f45c0020ea773a -Block 0006 [ 35]: 2fdf8e4d359075bc -Block 0006 [ 36]: ab571ba7bc6ec2fd -Block 0006 [ 37]: dda3dcbe917aaff8 -Block 0006 [ 38]: 9eb95a1e8ead794e -Block 0006 [ 39]: 6fedd57de55d273c -Block 0006 [ 40]: b1e982229232f1ad -Block 0006 [ 41]: 4fe42603c8a9fb69 -Block 0006 [ 42]: d659310e16205de3 -Block 0006 [ 43]: 20d78a53b3eb58aa -Block 0006 [ 44]: 38f5fdd6dc865e40 -Block 0006 [ 45]: d15b5699f7697b8e -Block 0006 [ 46]: 49ab382b1b33423c -Block 0006 [ 47]: 1d6efabc9ce41282 -Block 0006 [ 48]: 2961d5538a38da76 -Block 0006 [ 49]: 73aafddd34985b8c -Block 0006 [ 50]: 06b22e6994377ac5 -Block 0006 [ 51]: adae03a3e7842760 -Block 0006 [ 52]: 5e87d802acbe15c6 -Block 0006 [ 53]: 5cbb54f89ca40959 -Block 0006 [ 54]: e5b25cb912455ee4 -Block 0006 [ 55]: 4c6341f2bf67640c -Block 0006 [ 56]: 514c70013c6e98e7 -Block 0006 [ 57]: 5d6ac5092f7084bf -Block 0006 [ 58]: 3e8aba33150418bf -Block 0006 [ 59]: a30cf862735d162b -Block 0006 [ 60]: 6318ca3cd9772bd1 -Block 0006 [ 61]: d9ec0d7f1dbca7cd -Block 0006 [ 62]: b59787682be88aff -Block 0006 [ 63]: a064dca241a15e2c -Block 0006 [ 64]: 9e8c9708fc584c31 -Block 0006 [ 65]: f38b9cec2f104837 -Block 0006 [ 66]: aab3c7ad54444c98 -Block 0006 [ 67]: 1930cdbb75108f35 -Block 0006 [ 68]: e975c9867aceab39 -Block 0006 [ 69]: f96191489d892c54 -Block 0006 [ 70]: c8e1674971e0648f -Block 0006 [ 71]: b907513bcf5625a0 -Block 0006 [ 72]: ac104180b8a3fde9 -Block 0006 [ 73]: 013292e60a55a6d0 -Block 0006 [ 74]: f0423e702fc2c4ed -Block 0006 [ 75]: 61e8d0990582c55a -Block 0006 [ 76]: 4cbe0cb788314bed -Block 0006 [ 77]: 8c6280a475751998 -Block 0006 [ 78]: 29f7cc903c7c9634 -Block 0006 [ 79]: 57137bb43725f3d6 -Block 0006 [ 80]: 7a3e0bb3b04cb289 -Block 0006 [ 81]: c319cc5e6bb8d7d4 -Block 0006 [ 82]: 71b8459072558920 -Block 0006 [ 83]: 35316d0f774e5804 -Block 0006 [ 84]: deffee844b2ac25c -Block 0006 [ 85]: a52cce030fa44ca2 -Block 0006 [ 86]: c6921938401e2665 -Block 0006 [ 87]: 2b5a7a4619b39322 -Block 0006 [ 88]: c638cb6047ad7f73 -Block 0006 [ 89]: a22c9b0e4064cce3 -Block 0006 [ 90]: 69ec00c7c380d2b9 -Block 0006 [ 91]: dfd92cc8a4282ae2 -Block 0006 [ 92]: 3065f4657ee7867e -Block 0006 [ 93]: 2560cad440b434e5 -Block 0006 [ 94]: ac8bdaf8b273716f -Block 0006 [ 95]: 7326ef4e982b2e03 -Block 0006 [ 96]: f028bef637e8f480 -Block 0006 [ 97]: 4d5d126fc092a061 -Block 0006 [ 98]: 73ab780da60b5719 -Block 0006 [ 99]: 6119c713f2fc328b -Block 0006 [100]: 891e7a9911c5e6d9 -Block 0006 [101]: d40521ec37610f40 -Block 0006 [102]: a3fc256443a27d79 -Block 0006 [103]: 6b602f608c0e3af2 -Block 0006 [104]: dce03c74fd50362a -Block 0006 [105]: f779685936b26eba -Block 0006 [106]: d2534193125bcb00 -Block 0006 [107]: 12ca834d6b1eedb0 -Block 0006 [108]: 073d19e3c4f1bfe9 -Block 0006 [109]: 31935c96b465d0e1 -Block 0006 [110]: 13432f5bd1879a52 -Block 0006 [111]: b9e2cef15789ddd8 -Block 0006 [112]: 534f0d54cebe0592 -Block 0006 [113]: 761601a3a63b69e3 -Block 0006 [114]: 748b16ca57aaa7ab -Block 0006 [115]: aa677d0a7b68e486 -Block 0006 [116]: b2215d7cdecdf1b2 -Block 0006 [117]: 7ba8d9f400b2407b -Block 0006 [118]: 17682787fc9c8fc6 -Block 0006 [119]: e0d866a02b93fd02 -Block 0006 [120]: 8354c7153bc15c88 -Block 0006 [121]: 4df0d563bdab7ed9 -Block 0006 [122]: 468547092b155225 -Block 0006 [123]: 0e25c4e3903193f9 -Block 0006 [124]: 946f87745d6dc6ab -Block 0006 [125]: 636b2ba44cf3a26c -Block 0006 [126]: 7f2ed8b4cbd37294 -Block 0006 [127]: 1666f0a8a45f67e2 -Block 0007 [ 0]: 89bc5991b66a4f9a -Block 0007 [ 1]: 244f9a50eede4a24 -Block 0007 [ 2]: 83976af8c3a0a861 -Block 0007 [ 3]: 38ea76e0f71cc313 -Block 0007 [ 4]: c6e1867e6fa2278f -Block 0007 [ 5]: 27e79ac27c615f48 -Block 0007 [ 6]: 832d73e2c2f0c4fa -Block 0007 [ 7]: 0c4ee0490467a033 -Block 0007 [ 8]: e75eeac5cf1d7adc -Block 0007 [ 9]: 8c8a45c6946c950d -Block 0007 [ 10]: b5baad053f9ca7bd -Block 0007 [ 11]: 46fc8205c42f5a5f -Block 0007 [ 12]: 7c76404757f0454d -Block 0007 [ 13]: d9695eaedce9a870 -Block 0007 [ 14]: 9a5f14c4a42e1fe0 -Block 0007 [ 15]: 4003794a258c067f -Block 0007 [ 16]: cd9de2f71394f07e -Block 0007 [ 17]: 5dbbfdbe775cb191 -Block 0007 [ 18]: 9305fd724ef6ca78 -Block 0007 [ 19]: 9d4ea857a7e98879 -Block 0007 [ 20]: 3ef8dbba9be3b0d2 -Block 0007 [ 21]: cdcb7d8d4937c74d -Block 0007 [ 22]: 2b413663beab789c -Block 0007 [ 23]: 8c2022398a6f105f -Block 0007 [ 24]: fbc6564054e0c5ae -Block 0007 [ 25]: 29bc64cd100368b3 -Block 0007 [ 26]: 5b49e63514ce07ad -Block 0007 [ 27]: ee09dd8044e2993a -Block 0007 [ 28]: 0ef1a2e5536719e1 -Block 0007 [ 29]: a73127758047003a -Block 0007 [ 30]: 6ffb968f03445b73 -Block 0007 [ 31]: 1d6110a090f74e3e -Block 0007 [ 32]: 151ba2612e331780 -Block 0007 [ 33]: fbfc128b382d4c05 -Block 0007 [ 34]: f27fe4a8a1bc79e7 -Block 0007 [ 35]: 3484f508a5a56d2e -Block 0007 [ 36]: 414b6c4370ac4a9a -Block 0007 [ 37]: 1febb1feff45a2b8 -Block 0007 [ 38]: 0c9c9427da10327b -Block 0007 [ 39]: 9b4ebc3732023d56 -Block 0007 [ 40]: 9d74e0967d5b224d -Block 0007 [ 41]: d048577dc40fdb8d -Block 0007 [ 42]: 3879b17a30b0b978 -Block 0007 [ 43]: fb3f18a76754800f -Block 0007 [ 44]: 50559d8df5580475 -Block 0007 [ 45]: 9111d08c239370c7 -Block 0007 [ 46]: d766091af4b45a4b -Block 0007 [ 47]: 62aee41c1d8674a3 -Block 0007 [ 48]: a2930820ec8b2505 -Block 0007 [ 49]: fbd3b0a6e3565791 -Block 0007 [ 50]: aaa953c5471dbb17 -Block 0007 [ 51]: 49d5b5f4e86f9247 -Block 0007 [ 52]: 4b2b84aa2aabf8db -Block 0007 [ 53]: 5af1810ce84263f0 -Block 0007 [ 54]: 8fb74dc06e2c75b2 -Block 0007 [ 55]: df299055074a521f -Block 0007 [ 56]: 6f79200c0ae6493c -Block 0007 [ 57]: 8f8bfab88a8bc57b -Block 0007 [ 58]: 5723fc0b3895145c -Block 0007 [ 59]: ab919fe3268ceefb -Block 0007 [ 60]: 306be7b7d686339f -Block 0007 [ 61]: 43014813fb7fffa0 -Block 0007 [ 62]: 8428dec31fb0c09c -Block 0007 [ 63]: d8f65c034c59d7c2 -Block 0007 [ 64]: e6d5ea8a06c52ec8 -Block 0007 [ 65]: 2872ea29527eac1b -Block 0007 [ 66]: be4d066da29ec0e6 -Block 0007 [ 67]: 4665ebd5d344c313 -Block 0007 [ 68]: 50d6e23aea3e760b -Block 0007 [ 69]: 5e0e3e5f3534d811 -Block 0007 [ 70]: 1ee7dba867effc30 -Block 0007 [ 71]: c222516a167eb883 -Block 0007 [ 72]: f1d1e74cbf8ae6e9 -Block 0007 [ 73]: e106eb6f8bdca40a -Block 0007 [ 74]: b1b70e885bca3a77 -Block 0007 [ 75]: 0f64afa7c1004b06 -Block 0007 [ 76]: 2ea15d6201b8d307 -Block 0007 [ 77]: cd5c49ca4ed9b1c3 -Block 0007 [ 78]: bc0ddc91b4213b76 -Block 0007 [ 79]: 61cf167ea124ffdc -Block 0007 [ 80]: 8806befdffa43b77 -Block 0007 [ 81]: bcc6a6a392620c69 -Block 0007 [ 82]: 1434f9acecacaebe -Block 0007 [ 83]: 7c6af7c2f1d3a016 -Block 0007 [ 84]: 115556eb3d8d23bc -Block 0007 [ 85]: e3eafc2dda0aa391 -Block 0007 [ 86]: 5750369e0d454865 -Block 0007 [ 87]: a7c6fd735d535569 -Block 0007 [ 88]: 29e6ad4a5e5dfd52 -Block 0007 [ 89]: 1de107ad6c220b0f -Block 0007 [ 90]: 9c47398621cee82b -Block 0007 [ 91]: 7dfabceacb90433a -Block 0007 [ 92]: dd080065f92db5f8 -Block 0007 [ 93]: 808fb2ca8f9855fc -Block 0007 [ 94]: 9b37d0255ca874d9 -Block 0007 [ 95]: a29945156f5e78e0 -Block 0007 [ 96]: 7ebb17b54f99cc52 -Block 0007 [ 97]: 86a2c533d65321ec -Block 0007 [ 98]: e5fb0d5fa7cd9535 -Block 0007 [ 99]: 6c207d4bfaf49f7b -Block 0007 [100]: 44eb34b160e8f527 -Block 0007 [101]: 71ef01526ddb2885 -Block 0007 [102]: 915c082d99d95fd7 -Block 0007 [103]: bfcad755fc1307af -Block 0007 [104]: dfdb5ac657037222 -Block 0007 [105]: 08da606ac7d1602b -Block 0007 [106]: 95c0b0e9ebd7e4a0 -Block 0007 [107]: e77addfab259b972 -Block 0007 [108]: e3010379e9ad41d3 -Block 0007 [109]: 0f64d0ba35d2b8e5 -Block 0007 [110]: 2fad709e13c7b6f3 -Block 0007 [111]: 8fca48fc169624c9 -Block 0007 [112]: 05f2f0e60d335cb2 -Block 0007 [113]: cb7a2cd2340b3bfe -Block 0007 [114]: 6e058f453af0ccb6 -Block 0007 [115]: 3f445b7cc7839d27 -Block 0007 [116]: 619bfe60221d6100 -Block 0007 [117]: e5049d9c35782378 -Block 0007 [118]: acea85d52eb0c9f5 -Block 0007 [119]: 0b4f88ff01eb6c9c -Block 0007 [120]: 53bd40631c73d79b -Block 0007 [121]: 6a8e9acb96295031 -Block 0007 [122]: d1d48bed6b85937e -Block 0007 [123]: 9a4ce896116b82d8 -Block 0007 [124]: d580d4b5de6c3e9e -Block 0007 [125]: 812089540331bbaa -Block 0007 [126]: 6b9b3242b2fb8b9c -Block 0007 [127]: 2a402a6b13a8c267 -Block 0008 [ 0]: b7ab95721117d35e -Block 0008 [ 1]: 22efa2b9e5e159b2 -Block 0008 [ 2]: 964d836e880b8f89 -Block 0008 [ 3]: 465893367077dde0 -Block 0008 [ 4]: 04b86461613ddecf -Block 0008 [ 5]: faad3b55b362d764 -Block 0008 [ 6]: 9bfb8fdf7a2d2749 -Block 0008 [ 7]: 2514d8487b2f337e -Block 0008 [ 8]: 76b0368ad20aaf0e -Block 0008 [ 9]: 2e73c820427627ab -Block 0008 [ 10]: d6710dc04fd71cf7 -Block 0008 [ 11]: 05f1214cf754fe9c -Block 0008 [ 12]: 1b9226ebb176545d -Block 0008 [ 13]: d09950e8d137b218 -Block 0008 [ 14]: a556442aaa5a4704 -Block 0008 [ 15]: 22a558765f5b708c -Block 0008 [ 16]: 5a956898ea8655bb -Block 0008 [ 17]: d00c0f9a64cf54f8 -Block 0008 [ 18]: 1924450be9d7d7d3 -Block 0008 [ 19]: 4b2093cc1dba44d9 -Block 0008 [ 20]: 40e06f4fe9d9f193 -Block 0008 [ 21]: 9f669102987d4b33 -Block 0008 [ 22]: 25773e4784493e3e -Block 0008 [ 23]: f28659e531958e97 -Block 0008 [ 24]: 6946e4820d222c77 -Block 0008 [ 25]: 4681223f5565478d -Block 0008 [ 26]: 2e4d5f19e61816c4 -Block 0008 [ 27]: c96da5ff44d7b204 -Block 0008 [ 28]: 83582dd48b6fde2a -Block 0008 [ 29]: c7964d848c2cb4e1 -Block 0008 [ 30]: c0fbd722926446a8 -Block 0008 [ 31]: f7f224036da1b50b -Block 0008 [ 32]: 794c427ca82715f9 -Block 0008 [ 33]: 8a2b97b3013583b7 -Block 0008 [ 34]: 3244ee89081e7460 -Block 0008 [ 35]: f5e2a548eb51f3e4 -Block 0008 [ 36]: d1f2917f33c9beef -Block 0008 [ 37]: 4be72bd00cf526aa -Block 0008 [ 38]: c4783ba6b1a63baa -Block 0008 [ 39]: aa6c043d2a2b24b9 -Block 0008 [ 40]: 9770847719e53708 -Block 0008 [ 41]: 9062cef0c0d7b719 -Block 0008 [ 42]: 03bbe219e7b92dd6 -Block 0008 [ 43]: 60e53b185d155c18 -Block 0008 [ 44]: 1d6ba06581c7d26f -Block 0008 [ 45]: 8622eba9ec8d607b -Block 0008 [ 46]: d970b275e9b38475 -Block 0008 [ 47]: cd054ad4f06c85df -Block 0008 [ 48]: f326e9cf128b309b -Block 0008 [ 49]: 26e3d59d0f1514db -Block 0008 [ 50]: 957d99899c37ddb5 -Block 0008 [ 51]: 496914dbd6936795 -Block 0008 [ 52]: 5b297ef27bd7e1df -Block 0008 [ 53]: 6d0197c85b350e0c -Block 0008 [ 54]: 85d0ece1e8500251 -Block 0008 [ 55]: 480487de2170b8c1 -Block 0008 [ 56]: a015392335b28618 -Block 0008 [ 57]: 7f57a60af4f33b0f -Block 0008 [ 58]: 851a927b8c624cad -Block 0008 [ 59]: 89c747c64caab2a6 -Block 0008 [ 60]: 477cfa9b1918256a -Block 0008 [ 61]: d98e9f90a8bfb1bc -Block 0008 [ 62]: 30ff60298156ba3c -Block 0008 [ 63]: 3c7761e58ec0e095 -Block 0008 [ 64]: 8f679b883e408880 -Block 0008 [ 65]: 257ef71da8d77b46 -Block 0008 [ 66]: 4b7ad321efc75f0c -Block 0008 [ 67]: 1f6a32b542eebc6b -Block 0008 [ 68]: 0a0967b0f7acd6db -Block 0008 [ 69]: 54163535e5d00f3a -Block 0008 [ 70]: 7fdec43e6b6b4930 -Block 0008 [ 71]: c1c53843bd4aaab0 -Block 0008 [ 72]: 07016805847a07d8 -Block 0008 [ 73]: 10fb712c92c61c4b -Block 0008 [ 74]: 015e817683d154e8 -Block 0008 [ 75]: fe47daf5171bfc13 -Block 0008 [ 76]: c4827a7bfd8ce2d9 -Block 0008 [ 77]: 230c9209805eb318 -Block 0008 [ 78]: e63a7fa09253432f -Block 0008 [ 79]: 389ec0abe21e0ae7 -Block 0008 [ 80]: d905cce5cbd8176c -Block 0008 [ 81]: a422de2b3bb9a792 -Block 0008 [ 82]: e697168d4153dbcf -Block 0008 [ 83]: 23eb13f63115c465 -Block 0008 [ 84]: cf22e9ff2140d01e -Block 0008 [ 85]: 8a04ab6f7c64bdf4 -Block 0008 [ 86]: dc485082ce16fc73 -Block 0008 [ 87]: 4683333477cc0b97 -Block 0008 [ 88]: 863db556e1caaf30 -Block 0008 [ 89]: 50bd44001676b011 -Block 0008 [ 90]: 6a11db826217b8a8 -Block 0008 [ 91]: 3d2760322a5a5f6b -Block 0008 [ 92]: 5173a7ced46cafd3 -Block 0008 [ 93]: 990529a5161d0b95 -Block 0008 [ 94]: ca880dbb12f980d2 -Block 0008 [ 95]: f302c5e44f59329a -Block 0008 [ 96]: 983e583ac8e8e523 -Block 0008 [ 97]: 846f0c63282b5bbf -Block 0008 [ 98]: 08a4b7b9c5d791b8 -Block 0008 [ 99]: 86a7abed532c43b8 -Block 0008 [100]: 59fe6cf801a30e6d -Block 0008 [101]: f5764116d593fc3b -Block 0008 [102]: c0697b3cbd3001ab -Block 0008 [103]: 45e42c5ffb139e80 -Block 0008 [104]: d7ed91668c402ce0 -Block 0008 [105]: 6397bdd0d8527ae4 -Block 0008 [106]: 12880cb013fe58fc -Block 0008 [107]: 971fe855ed549949 -Block 0008 [108]: d1e0e639eb31c572 -Block 0008 [109]: 6e335ec1cf8de464 -Block 0008 [110]: da20beebc9ed0af9 -Block 0008 [111]: df0955ee5e18d4ef -Block 0008 [112]: 70eb91b051b35a76 -Block 0008 [113]: 7548e2994282c4d6 -Block 0008 [114]: 489a1b29c4a99af6 -Block 0008 [115]: 94cad03afaaa3898 -Block 0008 [116]: 37cbca7c85c8491d -Block 0008 [117]: 30faa00e59a713f6 -Block 0008 [118]: 35cc78464d8e0da4 -Block 0008 [119]: 7057afb2dd623ac4 -Block 0008 [120]: 6b1a9205926fc23c -Block 0008 [121]: e9e200e9ffd25f94 -Block 0008 [122]: 877f0fcc2e621a2e -Block 0008 [123]: 64535122e6a3edde -Block 0008 [124]: ae387cd847ebe238 -Block 0008 [125]: 059fc807fc322613 -Block 0008 [126]: c3b01aa192b0a0e9 -Block 0008 [127]: 77191027156712cc -Block 0009 [ 0]: 8e732c2c500d1bcf -Block 0009 [ 1]: e9f582c285d839fb -Block 0009 [ 2]: 2fc5142d3a7a7654 -Block 0009 [ 3]: 9095c31471464fe1 -Block 0009 [ 4]: 8e991a3caf2a3052 -Block 0009 [ 5]: 37702ba2be1e7b0a -Block 0009 [ 6]: 835c109a4a30f143 -Block 0009 [ 7]: 0eb4ae9d12f396c7 -Block 0009 [ 8]: 88f2953817eddb54 -Block 0009 [ 9]: 1cecd3d0a1e201c9 -Block 0009 [ 10]: deafac03b504e11d -Block 0009 [ 11]: 8157bf20b970b8e5 -Block 0009 [ 12]: 50b3e5bf1e48eb70 -Block 0009 [ 13]: 9d7efd0bff2d2e83 -Block 0009 [ 14]: 2a792a8f2b0982c2 -Block 0009 [ 15]: f18c1232d73408db -Block 0009 [ 16]: f5a62d2f9de07c74 -Block 0009 [ 17]: 8204c3aacca9edbb -Block 0009 [ 18]: b5baa1f4e095eef1 -Block 0009 [ 19]: 13235a4064138ef2 -Block 0009 [ 20]: a142635c58c634d7 -Block 0009 [ 21]: b7ddf6f55ab349a6 -Block 0009 [ 22]: f71717df61515bbf -Block 0009 [ 23]: 1890a0eeeed4ec12 -Block 0009 [ 24]: 2521df3d057602b1 -Block 0009 [ 25]: f425966f41a3cbae -Block 0009 [ 26]: 517dbeacc6a8e886 -Block 0009 [ 27]: 4e6782d7bfc248b0 -Block 0009 [ 28]: 077d169e58f83834 -Block 0009 [ 29]: 566f54c60623e8dd -Block 0009 [ 30]: 9282e16be5d00504 -Block 0009 [ 31]: 43e00854ca66714e -Block 0009 [ 32]: 28774e5b81f76aaa -Block 0009 [ 33]: 8950b8ae23d4faf1 -Block 0009 [ 34]: 09e4d38b92711e7c -Block 0009 [ 35]: 9a2eb57e82bc2afa -Block 0009 [ 36]: 506099a8d3aa3d16 -Block 0009 [ 37]: c3e99f028c752146 -Block 0009 [ 38]: 7ec9eb85c13ff100 -Block 0009 [ 39]: 718db4822eaf3c3f -Block 0009 [ 40]: 6e8cf355d00578c4 -Block 0009 [ 41]: a96f23d2042ed081 -Block 0009 [ 42]: b1efa003a52051a2 -Block 0009 [ 43]: 083cd3f3afeaac19 -Block 0009 [ 44]: 0d69d9676b1259fa -Block 0009 [ 45]: 08c3761ad4b25440 -Block 0009 [ 46]: 0c406de866ecbc24 -Block 0009 [ 47]: 5cb289de573f01cc -Block 0009 [ 48]: 02893bb82c671ed6 -Block 0009 [ 49]: c081209aca5d643e -Block 0009 [ 50]: 9a51ca107935abeb -Block 0009 [ 51]: 354aed6cc4970cb0 -Block 0009 [ 52]: fbd56117a58309b6 -Block 0009 [ 53]: daae519e820f1e5e -Block 0009 [ 54]: 48162d9e0c40b513 -Block 0009 [ 55]: 93b9f51a284d2e22 -Block 0009 [ 56]: b91de3ce3b32c35f -Block 0009 [ 57]: a2692cb72cd2f4bd -Block 0009 [ 58]: b34187d3ec2443e9 -Block 0009 [ 59]: 69c8d1d6b9141ab6 -Block 0009 [ 60]: 96e4e5ac6fc7de7d -Block 0009 [ 61]: 6edb6ef2a2c9524a -Block 0009 [ 62]: f2c41d9cfa6140a6 -Block 0009 [ 63]: 01d6b829b5a0478b -Block 0009 [ 64]: bebfd01f651b8408 -Block 0009 [ 65]: 2550cc3cdae04d67 -Block 0009 [ 66]: 15595a3d607dfbda -Block 0009 [ 67]: b46e32730ca3295f -Block 0009 [ 68]: 9ec5f85084cef798 -Block 0009 [ 69]: 2f404ab4feeb707f -Block 0009 [ 70]: fd41201b15012abe -Block 0009 [ 71]: 6ca913e4f0fd8fee -Block 0009 [ 72]: 709d15d4a5c351ca -Block 0009 [ 73]: 0ff417d5fb37ebe7 -Block 0009 [ 74]: 802e11d62972e3bd -Block 0009 [ 75]: bc2c232ea9b2159e -Block 0009 [ 76]: 69e7678104f56c09 -Block 0009 [ 77]: cde317f9f0a761f7 -Block 0009 [ 78]: daa884e6383a0c9b -Block 0009 [ 79]: 624e467ea037d7fc -Block 0009 [ 80]: da29125f93d7e351 -Block 0009 [ 81]: 7b8a251d7d757a20 -Block 0009 [ 82]: 123b966cfc4bdbe2 -Block 0009 [ 83]: e4b764a11ec7b794 -Block 0009 [ 84]: 61465f002fd37b96 -Block 0009 [ 85]: 519d444057d1d1bc -Block 0009 [ 86]: 17ca9449f5f2b619 -Block 0009 [ 87]: 20e1968729b8cbd3 -Block 0009 [ 88]: e07232d4ec01eec7 -Block 0009 [ 89]: 292fe0de615d0448 -Block 0009 [ 90]: 6d447d417ac58b7f -Block 0009 [ 91]: 213085ba89c1a0e6 -Block 0009 [ 92]: 279218ed0f586188 -Block 0009 [ 93]: 85432b291b14ae92 -Block 0009 [ 94]: d3811f53e9fb02b6 -Block 0009 [ 95]: 14b83bd6e46eaed6 -Block 0009 [ 96]: 622711519314f9f4 -Block 0009 [ 97]: ed92baab649ec78f -Block 0009 [ 98]: c72c72d7b0848cfe -Block 0009 [ 99]: de53a491c6295c22 -Block 0009 [100]: 2be4a0b8b5e43cbc -Block 0009 [101]: e6f22ceac7bccd1f -Block 0009 [102]: 05b12ebec17c187e -Block 0009 [103]: 52f341e886242a28 -Block 0009 [104]: e30c872494dae813 -Block 0009 [105]: bdad94979f6995a5 -Block 0009 [106]: bc9e4d10f9e5f606 -Block 0009 [107]: acb2275cf353d8e0 -Block 0009 [108]: 051c08df05a430a4 -Block 0009 [109]: ea68d850dbea3577 -Block 0009 [110]: d170a2ad236d937f -Block 0009 [111]: d15f44a6debf6691 -Block 0009 [112]: 155fb21a0411d4e6 -Block 0009 [113]: 7ef7eeb7ac21cf4b -Block 0009 [114]: 92edc47cbac6c4a6 -Block 0009 [115]: 510544dbaa033367 -Block 0009 [116]: 46a67011096e757c -Block 0009 [117]: 3a1a9464956028f7 -Block 0009 [118]: 38c1dea1570c12b9 -Block 0009 [119]: 0e1db1c9aa4e6e8a -Block 0009 [120]: e565a8750f24205c -Block 0009 [121]: 722413539d2ad804 -Block 0009 [122]: b9f8daba5bb18eec -Block 0009 [123]: 1e5be1da6957bcac -Block 0009 [124]: 8057de9f3f373a31 -Block 0009 [125]: ff03efbd16744e8c -Block 0009 [126]: 9424bb60b0df4407 -Block 0009 [127]: 13460e85e31e66d1 -Block 0010 [ 0]: 543b940990095875 -Block 0010 [ 1]: 18eaeb3f2173cdd7 -Block 0010 [ 2]: 0d08db9d1badfb0b -Block 0010 [ 3]: 67644ff573140c3a -Block 0010 [ 4]: 295ab880314f0f85 -Block 0010 [ 5]: 112edbb91c2a8fd7 -Block 0010 [ 6]: c038e70916f72cde -Block 0010 [ 7]: 4f9c910aa9899d1c -Block 0010 [ 8]: dada45d5af22d56c -Block 0010 [ 9]: e8b476a0c6350fbc -Block 0010 [ 10]: 870bc5fad488facf -Block 0010 [ 11]: 6b7dbbc32595f4c7 -Block 0010 [ 12]: a964783636eb2e97 -Block 0010 [ 13]: d145b572544eae6d -Block 0010 [ 14]: fe8ef676787818cb -Block 0010 [ 15]: 20e375197aa04ab2 -Block 0010 [ 16]: d011f89244a3d4df -Block 0010 [ 17]: 759e5d451dae6e92 -Block 0010 [ 18]: bec7d0751f0ab01e -Block 0010 [ 19]: 149251274eb89159 -Block 0010 [ 20]: f91432fc0eb92ec6 -Block 0010 [ 21]: 72e8c6ddcc930a13 -Block 0010 [ 22]: 8452c113f7fa9b56 -Block 0010 [ 23]: 4f5daba6e08b86c9 -Block 0010 [ 24]: 0e2d8b734f0bcf74 -Block 0010 [ 25]: 1a6c20125994331d -Block 0010 [ 26]: a87e4eed3891e466 -Block 0010 [ 27]: 3d00c4836245c1b3 -Block 0010 [ 28]: 189483b92b00a86d -Block 0010 [ 29]: 06d49ab12bbf1f15 -Block 0010 [ 30]: 20b348e5ead7bf24 -Block 0010 [ 31]: 506ba7e964fea6b4 -Block 0010 [ 32]: e8f23d6e2ea9f924 -Block 0010 [ 33]: f6d0d2bd74d90737 -Block 0010 [ 34]: 8fb226cbf1ce49c9 -Block 0010 [ 35]: 6815c3e3f8f4ef0b -Block 0010 [ 36]: abb3e01f3fce839b -Block 0010 [ 37]: e92757b13b57b915 -Block 0010 [ 38]: 5aeb88f6b7d1cb0b -Block 0010 [ 39]: bb1650328a3a14aa -Block 0010 [ 40]: f0728fb2ff0c8666 -Block 0010 [ 41]: 3e84a83c151639a7 -Block 0010 [ 42]: 9b0f4d15d9cf179f -Block 0010 [ 43]: dbb8c5716afd021c -Block 0010 [ 44]: e8bfc3df051ed951 -Block 0010 [ 45]: 2e0dfba45843e305 -Block 0010 [ 46]: a01b3aeb323b6409 -Block 0010 [ 47]: c9111b107b5297e7 -Block 0010 [ 48]: e2ff0a84b8ec6add -Block 0010 [ 49]: a1a71d29c99ea301 -Block 0010 [ 50]: 63bfcaad0e326961 -Block 0010 [ 51]: 9615e8c180b752fb -Block 0010 [ 52]: 7e5abed116da961d -Block 0010 [ 53]: 74ef9fa68f55818e -Block 0010 [ 54]: dc792d50364b460c -Block 0010 [ 55]: 45914d8df39e6635 -Block 0010 [ 56]: fa6b6755e5d333df -Block 0010 [ 57]: 6dd4c60cfa704cc7 -Block 0010 [ 58]: 3741ce484f6a142e -Block 0010 [ 59]: ad6e491cc36c0a3b -Block 0010 [ 60]: 62bb1c10e00e80d4 -Block 0010 [ 61]: ec9a80476840f855 -Block 0010 [ 62]: a6ee55d533895c55 -Block 0010 [ 63]: 6b0ca397060e3b98 -Block 0010 [ 64]: 0ad956334279e43a -Block 0010 [ 65]: b87d52c2a2c90ec3 -Block 0010 [ 66]: 50ff46a35d7842cc -Block 0010 [ 67]: c3d9a0d2d55ea9c1 -Block 0010 [ 68]: dfa49e5406a2e725 -Block 0010 [ 69]: 541dd28aa2563e8f -Block 0010 [ 70]: 53ad650ffc8e5958 -Block 0010 [ 71]: 3a5adad382c04c27 -Block 0010 [ 72]: 44943c194a99a8f2 -Block 0010 [ 73]: 3e1098d058fd17d8 -Block 0010 [ 74]: e12c8eb2e985e97d -Block 0010 [ 75]: f020c6b429ca33fb -Block 0010 [ 76]: 87d2223bd0ebcd78 -Block 0010 [ 77]: 459b25a71ba6b614 -Block 0010 [ 78]: 41da41285d0667ee -Block 0010 [ 79]: 09e80349cac41549 -Block 0010 [ 80]: ffc52232e58aeead -Block 0010 [ 81]: d8e66f8b2f80bbd1 -Block 0010 [ 82]: e04ae31c590646fa -Block 0010 [ 83]: ba8ad218ce90618d -Block 0010 [ 84]: bfe77439e9fe02f0 -Block 0010 [ 85]: 59eb9a5bb1936564 -Block 0010 [ 86]: f0a2471f9add76d7 -Block 0010 [ 87]: 9f8793e60fe20141 -Block 0010 [ 88]: f9b307023c67d822 -Block 0010 [ 89]: d0aeca62f1cf526e -Block 0010 [ 90]: 765d93ce65c4fa16 -Block 0010 [ 91]: b113f2b94c8726e7 -Block 0010 [ 92]: 38a889e531ea46bd -Block 0010 [ 93]: 6d5d5be952f68d15 -Block 0010 [ 94]: 6a9bdfe362d0869a -Block 0010 [ 95]: 7e659ff724978315 -Block 0010 [ 96]: 42ccdc3db17d27d7 -Block 0010 [ 97]: faec96f2411fd748 -Block 0010 [ 98]: fedf541027365e36 -Block 0010 [ 99]: 05aa427cbfa8c197 -Block 0010 [100]: 09db0e1c73dd017f -Block 0010 [101]: 051154d397ab8eb5 -Block 0010 [102]: c14899d6cfd6db92 -Block 0010 [103]: 76eba202872418f0 -Block 0010 [104]: 7de93ad989b7fa63 -Block 0010 [105]: 79b9781eb6d08a83 -Block 0010 [106]: 18c7e233870ab87e -Block 0010 [107]: a2f24fac2ccfaa05 -Block 0010 [108]: aa0329bd328e07aa -Block 0010 [109]: 6d568e267df6cbd8 -Block 0010 [110]: 0cdec16e4b3af9df -Block 0010 [111]: 516a6543fd378d95 -Block 0010 [112]: 044353035e8ed9e2 -Block 0010 [113]: 8cce3633089e9ef6 -Block 0010 [114]: 241ca0819199c35f -Block 0010 [115]: b84e6be91f3ba29c -Block 0010 [116]: 7681dba7d67b853d -Block 0010 [117]: cfaa8457e94a2ca3 -Block 0010 [118]: 4f55fddfa61e1c14 -Block 0010 [119]: 4ae2c0df0be7bdd2 -Block 0010 [120]: adf064db6f41b2d0 -Block 0010 [121]: 66e36ed60db08e78 -Block 0010 [122]: 9db421efe09b5dc9 -Block 0010 [123]: 25eab21b2878e5ba -Block 0010 [124]: f4ceb1a0e178b084 -Block 0010 [125]: f117d1fb52d7f0a1 -Block 0010 [126]: 7a2ac65a075a7e0f -Block 0010 [127]: 810954fbb31fdf1a -Block 0011 [ 0]: 0e29d95fe511e04d -Block 0011 [ 1]: 13c9ef6946e59fb2 -Block 0011 [ 2]: b9edf0e8e52a2e21 -Block 0011 [ 3]: 953124c3fc0130f4 -Block 0011 [ 4]: f9e368d2ce6e9f2b -Block 0011 [ 5]: 2c013e6d64bfac16 -Block 0011 [ 6]: 85ee494ff677546c -Block 0011 [ 7]: 7e5e241249696384 -Block 0011 [ 8]: f1bd19de6eb2b578 -Block 0011 [ 9]: fd7dff90cd127146 -Block 0011 [ 10]: b0276a8590517308 -Block 0011 [ 11]: 1997e6961cd4172b -Block 0011 [ 12]: e970bf5937e8ba67 -Block 0011 [ 13]: 997a801c2be3d65e -Block 0011 [ 14]: f251b1ac7c259652 -Block 0011 [ 15]: c65c431013920d9c -Block 0011 [ 16]: 8d77564d250306b4 -Block 0011 [ 17]: d9c99ace927fb203 -Block 0011 [ 18]: 615208697c3e89d7 -Block 0011 [ 19]: a657575ec6603056 -Block 0011 [ 20]: ffcfaad18c7e709f -Block 0011 [ 21]: c4236e6fbbd3e654 -Block 0011 [ 22]: 9912a1c921f60b6d -Block 0011 [ 23]: 0591dbfe857cbf25 -Block 0011 [ 24]: 37dca3835abf08ef -Block 0011 [ 25]: fe86e8c90fb2c5bd -Block 0011 [ 26]: f13d31fb9e188a0b -Block 0011 [ 27]: 52f558bae211b69a -Block 0011 [ 28]: 850898653a80ccf0 -Block 0011 [ 29]: d26bb731a29067f5 -Block 0011 [ 30]: 86457f7e5895d7f1 -Block 0011 [ 31]: 1b3349076ae1892e -Block 0011 [ 32]: 6409935520ced717 -Block 0011 [ 33]: ca0fcf02eca75105 -Block 0011 [ 34]: 5223f92b3919c403 -Block 0011 [ 35]: f15ff36a0dbc9a19 -Block 0011 [ 36]: 9d7776e6c269f58f -Block 0011 [ 37]: c04ee2bedbdc990f -Block 0011 [ 38]: ae936612661d3076 -Block 0011 [ 39]: d937f92bee9e6ca0 -Block 0011 [ 40]: fb6d834ac2a2ce56 -Block 0011 [ 41]: 804e4e605ac67a64 -Block 0011 [ 42]: de073c7c0740efd0 -Block 0011 [ 43]: 19fabb72e5670a8f -Block 0011 [ 44]: 4700769583220e60 -Block 0011 [ 45]: a3cc907f36e1fd94 -Block 0011 [ 46]: 13186c0243a98246 -Block 0011 [ 47]: 3fb2722223782206 -Block 0011 [ 48]: 0bae6ef325ea98df -Block 0011 [ 49]: bfa458d7bbc10e07 -Block 0011 [ 50]: e5af71034751f4dc -Block 0011 [ 51]: 60b296e6b629d7fd -Block 0011 [ 52]: f21c933bca848abc -Block 0011 [ 53]: f51be91c0e69b9b6 -Block 0011 [ 54]: cd47910b75abd177 -Block 0011 [ 55]: fde3573dc408cb71 -Block 0011 [ 56]: 9cd8f9089d99653b -Block 0011 [ 57]: 4bb5a1a43a0d5438 -Block 0011 [ 58]: 75d318af98df4e40 -Block 0011 [ 59]: 98bb9cfbf3051166 -Block 0011 [ 60]: 50f2c44750bf6bf5 -Block 0011 [ 61]: b417a6096ea6c619 -Block 0011 [ 62]: 773ab817c6b1d5d2 -Block 0011 [ 63]: d22a9eacb5a3d7f7 -Block 0011 [ 64]: 8cb6a5559d6fbcee -Block 0011 [ 65]: 0452f75d265fa348 -Block 0011 [ 66]: 193e6c5e124077c5 -Block 0011 [ 67]: 6642e04fe60a48c2 -Block 0011 [ 68]: daae3e4a5e745967 -Block 0011 [ 69]: 9843e3c8dda09afb -Block 0011 [ 70]: 67c8a319c4ac1922 -Block 0011 [ 71]: eacabb0f75114aac -Block 0011 [ 72]: 860ebbee0faf1cce -Block 0011 [ 73]: 7bf16fc76a8b56f5 -Block 0011 [ 74]: 5516fca385608bd1 -Block 0011 [ 75]: c3810f023ac43b84 -Block 0011 [ 76]: 2ec2a2053b9d16ab -Block 0011 [ 77]: 03b1d1d164395fce -Block 0011 [ 78]: 4a5569a698107fe4 -Block 0011 [ 79]: eeebc9893a8833da -Block 0011 [ 80]: baae7d25bb1718e3 -Block 0011 [ 81]: e0bd0e82ec8f8e56 -Block 0011 [ 82]: 00a3f878303000de -Block 0011 [ 83]: 81b15606e01d1853 -Block 0011 [ 84]: 4b68d808f18264f2 -Block 0011 [ 85]: cfbc30166b95a051 -Block 0011 [ 86]: 7ccf8c6fbe594d1a -Block 0011 [ 87]: 8fb7f6125de8a4b8 -Block 0011 [ 88]: 9874ab2e71425803 -Block 0011 [ 89]: 89836faa299c3612 -Block 0011 [ 90]: 18848a63fe32ac03 -Block 0011 [ 91]: 80c4fa2d0fa06de0 -Block 0011 [ 92]: 8f96900b1f819c8d -Block 0011 [ 93]: 25b5543a08d55450 -Block 0011 [ 94]: 93030b656f492ed6 -Block 0011 [ 95]: b27a28206ff52c96 -Block 0011 [ 96]: 7f6e7f6e09cf2d75 -Block 0011 [ 97]: 959272d1c52f6e68 -Block 0011 [ 98]: 1ada4e3a2de6c66e -Block 0011 [ 99]: d6569dfc7529f763 -Block 0011 [100]: 038cca522a11ac0f -Block 0011 [101]: 454db675e85984c8 -Block 0011 [102]: 58df9a938bdb8c55 -Block 0011 [103]: 0eedcc2512ddc387 -Block 0011 [104]: 936c4a2daa8ccb10 -Block 0011 [105]: b521e399d33e4d89 -Block 0011 [106]: 012c38f3584346f1 -Block 0011 [107]: 9771b339121cde79 -Block 0011 [108]: 909df00f57e0f0d8 -Block 0011 [109]: 231678b808c5f790 -Block 0011 [110]: 1301e2a6fe312dd4 -Block 0011 [111]: 9657e8e3084d6e89 -Block 0011 [112]: 7e83773b9757c9a9 -Block 0011 [113]: e569bf33a0b83346 -Block 0011 [114]: a442e925d7063b16 -Block 0011 [115]: f91f8be4eeb9e9d3 -Block 0011 [116]: 13b2253dc99c5078 -Block 0011 [117]: bf73b2bbb0f7feea -Block 0011 [118]: 7913497f784f9c00 -Block 0011 [119]: c135b851de9ca1f9 -Block 0011 [120]: 10d4ac102075f58c -Block 0011 [121]: 3e894baf2d480e04 -Block 0011 [122]: d2669db4d2abf1ae -Block 0011 [123]: b5b3a56a014be498 -Block 0011 [124]: 02059fe631e30976 -Block 0011 [125]: 2af8b8d2a9373534 -Block 0011 [126]: b7c31b0d57ea305e -Block 0011 [127]: 1c01db8d2984e3c3 -Block 0012 [ 0]: f0a10e805d6a3d42 -Block 0012 [ 1]: 793f18c15e3a812b -Block 0012 [ 2]: cd71670532fc3879 -Block 0012 [ 3]: 52026378e6aff4f4 -Block 0012 [ 4]: 18271d36c62e4b05 -Block 0012 [ 5]: fa6930a37b56ec6c -Block 0012 [ 6]: 583be84a02ec6ffe -Block 0012 [ 7]: 4b11ca6fb2f9097a -Block 0012 [ 8]: a1bbd58c4ae15ee9 -Block 0012 [ 9]: dbee5a087bbecbbb -Block 0012 [ 10]: 882bf5a9101613ce -Block 0012 [ 11]: bb3dde2797ef3263 -Block 0012 [ 12]: cbf13cfa9034a08b -Block 0012 [ 13]: 811814c390f8bfea -Block 0012 [ 14]: fcfe41d624f6b8ea -Block 0012 [ 15]: 68e3856880355b6f -Block 0012 [ 16]: 1236f5c74c7bf903 -Block 0012 [ 17]: d180385f9fb9a21c -Block 0012 [ 18]: 7499349f22b9555a -Block 0012 [ 19]: 5fb57d55eb9fbf15 -Block 0012 [ 20]: 5110de9baffaeabf -Block 0012 [ 21]: 793e08a617682e55 -Block 0012 [ 22]: 493b642d49020517 -Block 0012 [ 23]: 94df9b09283d2489 -Block 0012 [ 24]: fd2d581994173c8f -Block 0012 [ 25]: e07bf0dd445094a7 -Block 0012 [ 26]: f0ad829a158735b0 -Block 0012 [ 27]: d704ed42147e4768 -Block 0012 [ 28]: 94e8dd6c664e9b7a -Block 0012 [ 29]: 2e639aadb2538f91 -Block 0012 [ 30]: e2e9b6be2b7b4bd6 -Block 0012 [ 31]: 8eea81002f9ed55d -Block 0012 [ 32]: fda7705421c952b1 -Block 0012 [ 33]: c7fb8ff8a46f9bfd -Block 0012 [ 34]: 1633518f427b4076 -Block 0012 [ 35]: b61d459f7bdca710 -Block 0012 [ 36]: a1e87287e279fb03 -Block 0012 [ 37]: d5950378d37f53f9 -Block 0012 [ 38]: a2594348f93f1bea -Block 0012 [ 39]: a618cc5ac0dfe096 -Block 0012 [ 40]: 9266c0f94217c115 -Block 0012 [ 41]: 96d61a622b19ce38 -Block 0012 [ 42]: f63a027f9aca11df -Block 0012 [ 43]: 55729809d54915e1 -Block 0012 [ 44]: cbd491cb52e43cae -Block 0012 [ 45]: b481994150fd14ed -Block 0012 [ 46]: f83a7f15934b47cb -Block 0012 [ 47]: d3e1e10e23c2da2a -Block 0012 [ 48]: 372244cf798883ba -Block 0012 [ 49]: e8794123bacdf1e4 -Block 0012 [ 50]: 062ff79705430499 -Block 0012 [ 51]: 0fddc01417f4f219 -Block 0012 [ 52]: 740c3f09be649563 -Block 0012 [ 53]: 417915d57dc5e333 -Block 0012 [ 54]: f4ee80593bd8e5e8 -Block 0012 [ 55]: 1aee1eb265897cf7 -Block 0012 [ 56]: 0b9ad0f240ba5b24 -Block 0012 [ 57]: 02305b2b03979574 -Block 0012 [ 58]: 472d3640594de091 -Block 0012 [ 59]: 23fbf913420fcc2e -Block 0012 [ 60]: 6ca81dbbb5d512ce -Block 0012 [ 61]: e0520559706bc438 -Block 0012 [ 62]: fc33c33b8963da2c -Block 0012 [ 63]: 2aff701acb05547b -Block 0012 [ 64]: 5a3d42e91e578fc4 -Block 0012 [ 65]: 59758063adf92785 -Block 0012 [ 66]: 6e951b562c76432a -Block 0012 [ 67]: 51fff0413fb1aa59 -Block 0012 [ 68]: d727046b8866df8a -Block 0012 [ 69]: 6b4ebd88ac923a21 -Block 0012 [ 70]: 3c7e55e1d711a11d -Block 0012 [ 71]: 514608cba1330771 -Block 0012 [ 72]: ccb3fbfc634d067c -Block 0012 [ 73]: 68060b3d512ebbe3 -Block 0012 [ 74]: 5f78d84f461f23a6 -Block 0012 [ 75]: 0e0aef3906cb0db3 -Block 0012 [ 76]: 0ef3f0a509d24321 -Block 0012 [ 77]: 272fe65195e2de31 -Block 0012 [ 78]: 5da29cd98a1a39d6 -Block 0012 [ 79]: befb7a2c57c841dc -Block 0012 [ 80]: 8aae609c4e5dfef2 -Block 0012 [ 81]: 4d9b10b5e6ca0d55 -Block 0012 [ 82]: 66757b1cc499a8fd -Block 0012 [ 83]: c59eea79d9ae02c6 -Block 0012 [ 84]: deb05636105f0577 -Block 0012 [ 85]: 8f910d9f13862dcd -Block 0012 [ 86]: 8bbf0b58f2bfcae4 -Block 0012 [ 87]: 1dc80a5af6216876 -Block 0012 [ 88]: f0c7f38f688d275c -Block 0012 [ 89]: 02403970ee4c0e2e -Block 0012 [ 90]: 9bf3b1f16309c29d -Block 0012 [ 91]: a4af59c84060dc96 -Block 0012 [ 92]: c3e3fc9cf27457c6 -Block 0012 [ 93]: 220546fb39e69bfa -Block 0012 [ 94]: bc219a5e82fd01f9 -Block 0012 [ 95]: 893586e7f24bbbbb -Block 0012 [ 96]: 5ae5a74274584644 -Block 0012 [ 97]: a3d9b022bdb17043 -Block 0012 [ 98]: 44f0bbe60e366459 -Block 0012 [ 99]: 88f5771b41071c50 -Block 0012 [100]: d03e3dd3ff2884d7 -Block 0012 [101]: df42e00141a4c89c -Block 0012 [102]: 5aaaa0a2ae8cf52f -Block 0012 [103]: 3d81539d33d9b161 -Block 0012 [104]: 115e34c07ae62a81 -Block 0012 [105]: 94e9221ff8a546a1 -Block 0012 [106]: 8ece3db10b15f445 -Block 0012 [107]: 032849a37be21edb -Block 0012 [108]: 92714bca0b25c3eb -Block 0012 [109]: 721aa5702abcc45c -Block 0012 [110]: 01617ba1be353c8c -Block 0012 [111]: bc2fe091715fcb5a -Block 0012 [112]: 7043ec541e986c7a -Block 0012 [113]: bd57d71922db1672 -Block 0012 [114]: f0c92f03d437e05e -Block 0012 [115]: 9634e655a6d37386 -Block 0012 [116]: 3566fd3ebdaf03f4 -Block 0012 [117]: 85f6da1bc86fea33 -Block 0012 [118]: 1805b65c7746103a -Block 0012 [119]: eb0a6900ef07ca4a -Block 0012 [120]: 8f594a63644580fd -Block 0012 [121]: bfe1dd1be8d6cac2 -Block 0012 [122]: abc26813b3c0d475 -Block 0012 [123]: dbb6fb0dc45d5336 -Block 0012 [124]: abd7de0d061bc830 -Block 0012 [125]: 4f2d1a573c90037a -Block 0012 [126]: 3b9864dd28daf6ea -Block 0012 [127]: 9a7f1f97327c21fa -Block 0013 [ 0]: 110f27a1aef9087f -Block 0013 [ 1]: c0cfc9adf0c80b95 -Block 0013 [ 2]: 915b2854a9b6b139 -Block 0013 [ 3]: 705cd3389ad868f9 -Block 0013 [ 4]: 7ffa3e9cf5dc0143 -Block 0013 [ 5]: add08043ba2eb292 -Block 0013 [ 6]: b997dc82acbc56b3 -Block 0013 [ 7]: 29f9142ed8e3e203 -Block 0013 [ 8]: 050d803719d5d047 -Block 0013 [ 9]: be408d73e0383a54 -Block 0013 [ 10]: 0043e17848f8a16c -Block 0013 [ 11]: 7ab8058b78922cd3 -Block 0013 [ 12]: a97d9693d58a402d -Block 0013 [ 13]: d28560c5cf09156b -Block 0013 [ 14]: ea3cb0a06ba7e158 -Block 0013 [ 15]: fa0fa4343d04cece -Block 0013 [ 16]: 5b183466bb0e7d09 -Block 0013 [ 17]: 120ce02546fb925d -Block 0013 [ 18]: e7fc63058f17cdc3 -Block 0013 [ 19]: 1fae37ddb0408070 -Block 0013 [ 20]: 40c7079b90e2e848 -Block 0013 [ 21]: 7a9c8911517f1e87 -Block 0013 [ 22]: 63029b2b67fb12c9 -Block 0013 [ 23]: 4d800e4f7ba91f7f -Block 0013 [ 24]: b434650ee99c2251 -Block 0013 [ 25]: 74407b19bc5486db -Block 0013 [ 26]: b67c9a18dadf965a -Block 0013 [ 27]: d98744b3b1bb6d09 -Block 0013 [ 28]: 2d8c34b0cbcd7a6f -Block 0013 [ 29]: fd0afc73cc572177 -Block 0013 [ 30]: 07b09f0e5653ce17 -Block 0013 [ 31]: cab97eb257f691db -Block 0013 [ 32]: 9f11eae0f39f21a8 -Block 0013 [ 33]: 15d19b49b7e02c6c -Block 0013 [ 34]: 46da6e970f66b6c8 -Block 0013 [ 35]: 49a17e8263eec903 -Block 0013 [ 36]: c9de78f4bc6aa868 -Block 0013 [ 37]: 1d8dfea55f5b6796 -Block 0013 [ 38]: 175316a8f61b2587 -Block 0013 [ 39]: 25efcc429557ec7e -Block 0013 [ 40]: a9384ef695b7bc06 -Block 0013 [ 41]: 56f2662a3bacbdf6 -Block 0013 [ 42]: e69affaafe48fb24 -Block 0013 [ 43]: e3136ec9687b8b85 -Block 0013 [ 44]: 02d1dc27aac26fd1 -Block 0013 [ 45]: e7e6e588167ec3c9 -Block 0013 [ 46]: 652fe019d9c046cf -Block 0013 [ 47]: e3942dadc5eece24 -Block 0013 [ 48]: 6d93b00de46cf751 -Block 0013 [ 49]: fa8dd8fb0f6a895b -Block 0013 [ 50]: a086d03df0190e1c -Block 0013 [ 51]: 3494cede809724c7 -Block 0013 [ 52]: 0e391a8be24b0c61 -Block 0013 [ 53]: 63b504727b8f421d -Block 0013 [ 54]: f589dc5bb5b3bb05 -Block 0013 [ 55]: 2d907b105dc21167 -Block 0013 [ 56]: 80d67a062dc94ed8 -Block 0013 [ 57]: 7062e09641789f6a -Block 0013 [ 58]: e7a0e21c50810817 -Block 0013 [ 59]: f4c561d19debae21 -Block 0013 [ 60]: bcb9d85144bb0ec4 -Block 0013 [ 61]: 901b4b59386d1079 -Block 0013 [ 62]: 958c2c24f57698e3 -Block 0013 [ 63]: 378994aadd67b8bb -Block 0013 [ 64]: af646ae2a18aa18c -Block 0013 [ 65]: 98cf82fa8cad9367 -Block 0013 [ 66]: 34acd9fb664da41b -Block 0013 [ 67]: cb0c55d6a06a36d1 -Block 0013 [ 68]: 596cac0f464dccf5 -Block 0013 [ 69]: e0b7e5b458bf7e65 -Block 0013 [ 70]: 9d4153213429e381 -Block 0013 [ 71]: bd175bd05ad89ddc -Block 0013 [ 72]: 3a32b790edeb3b50 -Block 0013 [ 73]: 76181582b4bb6db4 -Block 0013 [ 74]: 3bacbf9a5c6bc5d2 -Block 0013 [ 75]: 52025dd1e69fe955 -Block 0013 [ 76]: 24766a27757868e1 -Block 0013 [ 77]: ea254628c57d6565 -Block 0013 [ 78]: 4dffd3946e2391c9 -Block 0013 [ 79]: a3f0ec19131b2c74 -Block 0013 [ 80]: aabf1ebb453cad3f -Block 0013 [ 81]: 5ce4d4039ae51784 -Block 0013 [ 82]: 063b31568aaa2b58 -Block 0013 [ 83]: b2edb1f3fd849ce2 -Block 0013 [ 84]: e1c635d7781384ab -Block 0013 [ 85]: 434ca168921233af -Block 0013 [ 86]: 5a4cd5d7f2893065 -Block 0013 [ 87]: dbab9cbae3521a69 -Block 0013 [ 88]: 73eba126bc1bd0ec -Block 0013 [ 89]: 036d4e6e1a1bd19a -Block 0013 [ 90]: 1bbcd74a6795d7b7 -Block 0013 [ 91]: d1dcfe677aa57f4d -Block 0013 [ 92]: 502f4df14adefb98 -Block 0013 [ 93]: 9cf907ea8095e86d -Block 0013 [ 94]: 68952d15ce5ffec0 -Block 0013 [ 95]: 51ef41bd9953cf0d -Block 0013 [ 96]: c75de12576679af2 -Block 0013 [ 97]: 3a1245ca4b59d991 -Block 0013 [ 98]: 58da406deda0a2be -Block 0013 [ 99]: ed1d359b0924fc6a -Block 0013 [100]: 88b53326e7c95d86 -Block 0013 [101]: bf63c58402be96e1 -Block 0013 [102]: 27e94f0a9fc33bd4 -Block 0013 [103]: 0941976229a26011 -Block 0013 [104]: f393524504acfc53 -Block 0013 [105]: 9d12db1e3a8fdd72 -Block 0013 [106]: 65f94d0cf0f79d71 -Block 0013 [107]: eb80341772fd94f3 -Block 0013 [108]: 50d0e71609e35d14 -Block 0013 [109]: d6e1428d1a900f1d -Block 0013 [110]: c0438ecdf9ee424e -Block 0013 [111]: fb220c418b818629 -Block 0013 [112]: 7c792913ed892332 -Block 0013 [113]: 0699f2d790569f7b -Block 0013 [114]: b3637f2e9d09356d -Block 0013 [115]: fc6e80e108607a84 -Block 0013 [116]: 93101242fdc3284c -Block 0013 [117]: 0f65daea4d92cc13 -Block 0013 [118]: aeb01cf68d144bb2 -Block 0013 [119]: d3132f63adac679c -Block 0013 [120]: 9956ffa4821ade14 -Block 0013 [121]: 45d10cd12b08a7f7 -Block 0013 [122]: 87df8b5647c8d31a -Block 0013 [123]: 42c90f381e6c64f3 -Block 0013 [124]: 530fde3cc6aa2cd9 -Block 0013 [125]: a7b34dbb301080f1 -Block 0013 [126]: 790189cfcbe04e38 -Block 0013 [127]: b448bd06eabfa98b -Block 0014 [ 0]: 9f1cd0689f53b9b6 -Block 0014 [ 1]: e35b168966e80b90 -Block 0014 [ 2]: b5a0942914a9db2c -Block 0014 [ 3]: 7231649171873f3d -Block 0014 [ 4]: 2c0a81ffc170207e -Block 0014 [ 5]: 168b9363fd1e8c79 -Block 0014 [ 6]: 0b7f5f346840af27 -Block 0014 [ 7]: f1e08d27b9de4794 -Block 0014 [ 8]: 90c4838daaa18f3c -Block 0014 [ 9]: c2d426a11ddfff84 -Block 0014 [ 10]: 6a2e7d5722f53302 -Block 0014 [ 11]: 2da4baa266ac48ac -Block 0014 [ 12]: 222cb59e7384d5bb -Block 0014 [ 13]: 9cc616e7b6e09d64 -Block 0014 [ 14]: d832f28ddee93b3c -Block 0014 [ 15]: 512ed55d654e52c4 -Block 0014 [ 16]: f8b9a8f05fad25eb -Block 0014 [ 17]: 58da11fa5bb50a7a -Block 0014 [ 18]: b16d7729e5485ed2 -Block 0014 [ 19]: 4762f37ae7b70419 -Block 0014 [ 20]: ce877c5117af06e1 -Block 0014 [ 21]: a264cfa6af1399cb -Block 0014 [ 22]: 1c713c633a43e490 -Block 0014 [ 23]: 605294b6d0d3e1e3 -Block 0014 [ 24]: e6699e6c92b1605f -Block 0014 [ 25]: 77283eeb32daee4f -Block 0014 [ 26]: d8d610cda9e3c069 -Block 0014 [ 27]: 59d3bddf6621cc2b -Block 0014 [ 28]: e8bbf2f7b451e342 -Block 0014 [ 29]: 9ca3895b73353bbe -Block 0014 [ 30]: d3ed63a85178af46 -Block 0014 [ 31]: 3de2f2b674cd7ec0 -Block 0014 [ 32]: 887ad16072a7cf85 -Block 0014 [ 33]: c062593e55dc4740 -Block 0014 [ 34]: b3eeaf3026f24201 -Block 0014 [ 35]: d404cb5e83d3e5d7 -Block 0014 [ 36]: 1f46223eb204e335 -Block 0014 [ 37]: 2f387000b96c0af9 -Block 0014 [ 38]: 52dc1b965363315d -Block 0014 [ 39]: 5dbab2ff30334937 -Block 0014 [ 40]: 827077350ef835ea -Block 0014 [ 41]: a5bb8eafd57608cd -Block 0014 [ 42]: bc37683bce72b276 -Block 0014 [ 43]: 489ec1943b6efce6 -Block 0014 [ 44]: 28c9a58821ed6adb -Block 0014 [ 45]: 663397bd43ea5ecf -Block 0014 [ 46]: 54980827a023f04f -Block 0014 [ 47]: 706eb7a6be4cdd9f -Block 0014 [ 48]: 4e6b5ecf1a232fe5 -Block 0014 [ 49]: 2c47b454de1dcafa -Block 0014 [ 50]: 5e1d313c65f0c1f9 -Block 0014 [ 51]: b0cadb11ec6bd339 -Block 0014 [ 52]: 5dd3a637173d8857 -Block 0014 [ 53]: a33f8ddff280b343 -Block 0014 [ 54]: c9da85614cb6590e -Block 0014 [ 55]: 7b568d8c124f7072 -Block 0014 [ 56]: 6f5ff6b532b5a348 -Block 0014 [ 57]: 60d2ead8531affff -Block 0014 [ 58]: 877b1a71f3346e8a -Block 0014 [ 59]: 242e688117a0b8d2 -Block 0014 [ 60]: 19b6fafc9a26c636 -Block 0014 [ 61]: 3d79c909792e2519 -Block 0014 [ 62]: 731417532be4bd67 -Block 0014 [ 63]: e2986d03c73c3b21 -Block 0014 [ 64]: f1668b930bf7d92e -Block 0014 [ 65]: 726901a66463d300 -Block 0014 [ 66]: 052f2baa09531e23 -Block 0014 [ 67]: 9ee57ada74595090 -Block 0014 [ 68]: b1d683625fbbe541 -Block 0014 [ 69]: 2ca43737ff0a5718 -Block 0014 [ 70]: 1721e2e1e9985f54 -Block 0014 [ 71]: d50e276b2aa551d2 -Block 0014 [ 72]: a799e3018b5e9184 -Block 0014 [ 73]: 4f277f05bdc10280 -Block 0014 [ 74]: 00a99d452e6e2fce -Block 0014 [ 75]: 9cd4b73c0081c1d3 -Block 0014 [ 76]: 2536bbd5d2e4a47e -Block 0014 [ 77]: e9cf0d3b2c3030b6 -Block 0014 [ 78]: 656e91bcfc0e222a -Block 0014 [ 79]: a6da444ba9091ea8 -Block 0014 [ 80]: e0afe24cdb91b8c3 -Block 0014 [ 81]: 97f078a7948b822e -Block 0014 [ 82]: 5ca27019b4d2028e -Block 0014 [ 83]: f9fd77cb1f46983a -Block 0014 [ 84]: d13fe437a13cc54e -Block 0014 [ 85]: 006dc58126a3680a -Block 0014 [ 86]: cd8216267cc53592 -Block 0014 [ 87]: e5b6c5d75cd47a7b -Block 0014 [ 88]: 8ec249b6f585da10 -Block 0014 [ 89]: 3d299fcdcebfd8a0 -Block 0014 [ 90]: 921e8f4085db462b -Block 0014 [ 91]: 4179567387eacae7 -Block 0014 [ 92]: e7f8371d18e577fc -Block 0014 [ 93]: 301a74658b8a2b21 -Block 0014 [ 94]: 64454eb02213d764 -Block 0014 [ 95]: 6053b14fdf4ed719 -Block 0014 [ 96]: df018d7367b07151 -Block 0014 [ 97]: d50a9c2eecf3f057 -Block 0014 [ 98]: c486b8ccbd41e401 -Block 0014 [ 99]: fa8978518353c015 -Block 0014 [100]: 18c4ad2167895d88 -Block 0014 [101]: a5c38befc8633165 -Block 0014 [102]: ea798f7e1bb559c6 -Block 0014 [103]: 668cc3c01b2fbc8f -Block 0014 [104]: de2267386c58da11 -Block 0014 [105]: d6b83abd71a31208 -Block 0014 [106]: 38ab9df0a5d6b2c6 -Block 0014 [107]: c70ff46aa3c2c60d -Block 0014 [108]: 7d45101acb53cfcd -Block 0014 [109]: 094b173ab1ae9e2d -Block 0014 [110]: a4c3c60b822ef6aa -Block 0014 [111]: be99a740b86c90af -Block 0014 [112]: a068c651c7bee61d -Block 0014 [113]: a5bd2b2ab61dd25a -Block 0014 [114]: 94831b9b6f0ffaef -Block 0014 [115]: ffdce9d64741f054 -Block 0014 [116]: a1bc5fb0b5b8161a -Block 0014 [117]: 2fc4d76a12e81c91 -Block 0014 [118]: aff984f2849e9279 -Block 0014 [119]: 75cebdf31da0ac2a -Block 0014 [120]: 488570167b20be47 -Block 0014 [121]: bbd10c9260824085 -Block 0014 [122]: 0057c389ecaa85f0 -Block 0014 [123]: 40d8491601f433d6 -Block 0014 [124]: b5be2fefe01b5d0b -Block 0014 [125]: f7518252c19f76da -Block 0014 [126]: 985d37680c4cf0a6 -Block 0014 [127]: 9a2867c2c0e609ba -Block 0015 [ 0]: 13910b6bc3664aa0 -Block 0015 [ 1]: 810c299005aceed3 -Block 0015 [ 2]: ed0b536ccefd2bf4 -Block 0015 [ 3]: 90e9118b3fba9a29 -Block 0015 [ 4]: f245832f7121268b -Block 0015 [ 5]: 1b9f85dbb96ea6ac -Block 0015 [ 6]: c42d0fdd5387a138 -Block 0015 [ 7]: dc60c5abb673cbd6 -Block 0015 [ 8]: c7705bbbda6bdaa3 -Block 0015 [ 9]: 6e17017b53f92aef -Block 0015 [ 10]: a0ba6415a40d1b1e -Block 0015 [ 11]: fa9e111e339104c5 -Block 0015 [ 12]: 8275b953b8f61384 -Block 0015 [ 13]: 01525585e0f3a8ff -Block 0015 [ 14]: 8e48915135123c0c -Block 0015 [ 15]: e449243c3be44c24 -Block 0015 [ 16]: 5e71f56cb5817b37 -Block 0015 [ 17]: 824e99b239ea043b -Block 0015 [ 18]: 20277a3732ba698f -Block 0015 [ 19]: 601b1a32059f9125 -Block 0015 [ 20]: 8c8a2f8094592d46 -Block 0015 [ 21]: e39f3ee523a2ea39 -Block 0015 [ 22]: 0b230a73c13a63bd -Block 0015 [ 23]: 274b81e73393d329 -Block 0015 [ 24]: 837dfd3bd0357519 -Block 0015 [ 25]: 195546d2218bcb43 -Block 0015 [ 26]: 532217c28434a94c -Block 0015 [ 27]: e29ef7168db35357 -Block 0015 [ 28]: dfa65c0f5ea36613 -Block 0015 [ 29]: f5ea1b2477ea5019 -Block 0015 [ 30]: eea2a212d4724c06 -Block 0015 [ 31]: 82ddd5df70bce0e3 -Block 0015 [ 32]: bed114d0172c9188 -Block 0015 [ 33]: 5c2327d38576b4a9 -Block 0015 [ 34]: 967cd759b4ac6a33 -Block 0015 [ 35]: 0f2562866c3454cc -Block 0015 [ 36]: af96dfb88fdca575 -Block 0015 [ 37]: 7dbb9f11564be976 -Block 0015 [ 38]: 0aa59b9e7bf7f48f -Block 0015 [ 39]: e81eb3014bac9fa7 -Block 0015 [ 40]: 0680394a1d912913 -Block 0015 [ 41]: 357ed036e65c33a5 -Block 0015 [ 42]: 75ae6371adf01990 -Block 0015 [ 43]: a2ace9bf2a013566 -Block 0015 [ 44]: 6d5ef6c3440afb82 -Block 0015 [ 45]: 37b072042495a57a -Block 0015 [ 46]: e6aa7dd55fcb12c2 -Block 0015 [ 47]: 7bdde78e351cbd8d -Block 0015 [ 48]: a188855b01202e2f -Block 0015 [ 49]: 0d159146d76e7f2b -Block 0015 [ 50]: 0cf5f48a18081329 -Block 0015 [ 51]: 389ab774f9126d73 -Block 0015 [ 52]: e51476adeaf90275 -Block 0015 [ 53]: b4d89924dc05ff5b -Block 0015 [ 54]: 09b69ba48ff39335 -Block 0015 [ 55]: 19e99309184f742b -Block 0015 [ 56]: 333b1a54ac0c3688 -Block 0015 [ 57]: 008c9b8d51233e6a -Block 0015 [ 58]: 92078aa2c4fd6d0d -Block 0015 [ 59]: 9445ce5fb44d94fc -Block 0015 [ 60]: 799dceafe1118445 -Block 0015 [ 61]: 54b47c19ad881f4f -Block 0015 [ 62]: 5fa8ace3817a0179 -Block 0015 [ 63]: c3a420b1843a745b -Block 0015 [ 64]: 44afad54500c9837 -Block 0015 [ 65]: 4ecbbd1225b43e5e -Block 0015 [ 66]: 66c9b32f899631c5 -Block 0015 [ 67]: e7d81299bacd2082 -Block 0015 [ 68]: 30d9d63610b0ffe3 -Block 0015 [ 69]: 9d8cfc4c8844d513 -Block 0015 [ 70]: b7c084178b4137a0 -Block 0015 [ 71]: f83e5d17062eb8b9 -Block 0015 [ 72]: 0d0b6549369d8f9d -Block 0015 [ 73]: b1124c8f15e76634 -Block 0015 [ 74]: 059926f89443c09e -Block 0015 [ 75]: 045a096f41a09c73 -Block 0015 [ 76]: 044c28c7194d8ad3 -Block 0015 [ 77]: e6df09e32fe8a94b -Block 0015 [ 78]: ab76ab78da161bbf -Block 0015 [ 79]: 316b39fc15505896 -Block 0015 [ 80]: 3fbe2060a5b8f55c -Block 0015 [ 81]: eb190ddebb4b6807 -Block 0015 [ 82]: af0456440e6ab638 -Block 0015 [ 83]: be0dab7d08cbc76a -Block 0015 [ 84]: abafe12ea41d5fe6 -Block 0015 [ 85]: 3b0cf7d7111bcfab -Block 0015 [ 86]: 7616a546c8ee4745 -Block 0015 [ 87]: b538bae6bf7ab536 -Block 0015 [ 88]: 81fd8f8b12a77f3b -Block 0015 [ 89]: 39a27b1569437440 -Block 0015 [ 90]: ae9964bb3cdff849 -Block 0015 [ 91]: e3a4132cdba67906 -Block 0015 [ 92]: d158cd59ea9f9034 -Block 0015 [ 93]: 2bf2511afb694d05 -Block 0015 [ 94]: 58838b0cd79d44b6 -Block 0015 [ 95]: 64064c613bf2e3f1 -Block 0015 [ 96]: 1fdfa3bf5446c792 -Block 0015 [ 97]: 2ca19444da846a6f -Block 0015 [ 98]: 695657edf5467ed8 -Block 0015 [ 99]: 920f468266e669d3 -Block 0015 [100]: 8730b7895b7f558a -Block 0015 [101]: 04fe6d8e53bcaa1b -Block 0015 [102]: 7c71b094b720ab4a -Block 0015 [103]: cadc9d7ab9b10062 -Block 0015 [104]: d1f55e2ad6398ebb -Block 0015 [105]: 59cf88c99120351e -Block 0015 [106]: 7b98146dab48ec98 -Block 0015 [107]: c13c99b8e717db1b -Block 0015 [108]: 80d0d51210e327f6 -Block 0015 [109]: 6ba3a2ba66a637fe -Block 0015 [110]: bf1937951c46acdd -Block 0015 [111]: a9366cd100f1fc79 -Block 0015 [112]: 341a0fe4906324d7 -Block 0015 [113]: 9913c4d902b0f3ee -Block 0015 [114]: ad09b2f566324f03 -Block 0015 [115]: 9f6f5f4349ee7f1e -Block 0015 [116]: 8b1948a1a8bf9fa1 -Block 0015 [117]: 178f7d8ceabf9cd5 -Block 0015 [118]: fdf3473cd9eeb149 -Block 0015 [119]: 552b82c798528d52 -Block 0015 [120]: b336c3211cfc3415 -Block 0015 [121]: 1461cf354137ecee -Block 0015 [122]: a584771e2094c871 -Block 0015 [123]: ff6e940e11f094db -Block 0015 [124]: 65e837b609d53c15 -Block 0015 [125]: ada005f93180c3b0 -Block 0015 [126]: ac8ebdb88c35c1a7 -Block 0015 [127]: ed3abf44c47ac005 -Block 0016 [ 0]: 9a0bb8d093596be9 -Block 0016 [ 1]: e1bfdc05ee03fd0d -Block 0016 [ 2]: 4a7b8afd32898b11 -Block 0016 [ 3]: 263bf05080975928 -Block 0016 [ 4]: 0563f113f91d5a5a -Block 0016 [ 5]: e862a00d92f15cc2 -Block 0016 [ 6]: e089bd9ccc09bea9 -Block 0016 [ 7]: ebe9f60e8c7a0e65 -Block 0016 [ 8]: 7f48279b30898131 -Block 0016 [ 9]: 17de2db04f052abf -Block 0016 [ 10]: 2cc5414dc6ad2c64 -Block 0016 [ 11]: 86d060b19d2f3be6 -Block 0016 [ 12]: 26e6b473a55b01d0 -Block 0016 [ 13]: d15c82850170d2ab -Block 0016 [ 14]: 3afa12012cf636de -Block 0016 [ 15]: 8280e9b3c7b94ae7 -Block 0016 [ 16]: 3b75e9ab4b6363c0 -Block 0016 [ 17]: 08773ef3f0850ae6 -Block 0016 [ 18]: 010c22444c34b6ee -Block 0016 [ 19]: 58961c39c35db529 -Block 0016 [ 20]: 8306e410937d0760 -Block 0016 [ 21]: 563b892ed86b6c0e -Block 0016 [ 22]: 636d5b97a0c83748 -Block 0016 [ 23]: 3d2dbcf4bb47154d -Block 0016 [ 24]: 9fa80ade851efc6c -Block 0016 [ 25]: 602c1d73bf843f33 -Block 0016 [ 26]: b3f7583703712055 -Block 0016 [ 27]: cebd7a463a65108c -Block 0016 [ 28]: 8abc836cdc9a09dd -Block 0016 [ 29]: 926f6766ee4b4e4a -Block 0016 [ 30]: 69f36ed4fe16e884 -Block 0016 [ 31]: 0391acd1b8d5875c -Block 0016 [ 32]: d200bbf9f45f84a3 -Block 0016 [ 33]: 3540b92d47171fb3 -Block 0016 [ 34]: e0fb94d4da9f4257 -Block 0016 [ 35]: ef32cf22f5a01cb3 -Block 0016 [ 36]: df1e8e16f3556b3f -Block 0016 [ 37]: b1fa8d466cdfa033 -Block 0016 [ 38]: 16f43f463a72d9cf -Block 0016 [ 39]: d31c53228c3c607c -Block 0016 [ 40]: 5f4875332e0a7a3c -Block 0016 [ 41]: 66c32d33164cdd0b -Block 0016 [ 42]: 6bc342588808610d -Block 0016 [ 43]: 75722f4c4d895bc3 -Block 0016 [ 44]: de5ead39fe3adf2f -Block 0016 [ 45]: 2d76d5a3c958f392 -Block 0016 [ 46]: 91cc2c795b0ea82e -Block 0016 [ 47]: f84b957da44e0f33 -Block 0016 [ 48]: 50049c6e6d1be204 -Block 0016 [ 49]: 0f84d4f7a4f4623f -Block 0016 [ 50]: c483afeac90c583b -Block 0016 [ 51]: 5241f5b4718b1996 -Block 0016 [ 52]: 189c1ae8662a63c7 -Block 0016 [ 53]: 5889d3e318c05e53 -Block 0016 [ 54]: 5861e11e8a35c858 -Block 0016 [ 55]: 48e5b948f6c3c526 -Block 0016 [ 56]: dadaab651667f7e6 -Block 0016 [ 57]: 82b7e7fb9150020a -Block 0016 [ 58]: da5e055412c7486d -Block 0016 [ 59]: dfd7090ff83f2156 -Block 0016 [ 60]: 63e3609787b041d8 -Block 0016 [ 61]: e4adb17b0082436f -Block 0016 [ 62]: e90c704102ce9df0 -Block 0016 [ 63]: f7f2b4a1c2fb125c -Block 0016 [ 64]: 618e7ec96f20d5e8 -Block 0016 [ 65]: 76fc2dbdcaf8bbf2 -Block 0016 [ 66]: ec96562071ce660d -Block 0016 [ 67]: 2a2213e85db607aa -Block 0016 [ 68]: 3fc2f6739556310f -Block 0016 [ 69]: 256ac5562ea7de43 -Block 0016 [ 70]: d542ad70ca615a20 -Block 0016 [ 71]: fc6d8c2817a34ea9 -Block 0016 [ 72]: 3c8f3ed7b7c6b9df -Block 0016 [ 73]: c791195df2a66f44 -Block 0016 [ 74]: 2c0d711503dbd28d -Block 0016 [ 75]: c4e7a179e25cf184 -Block 0016 [ 76]: b1d267c1a4f4beb9 -Block 0016 [ 77]: 2f4ef773b00980ba -Block 0016 [ 78]: 845a3577578f7664 -Block 0016 [ 79]: 1329b906846966f7 -Block 0016 [ 80]: 9ce86824f02b1a97 -Block 0016 [ 81]: 5c1b8630f6b3ffd8 -Block 0016 [ 82]: c56403dfff373b13 -Block 0016 [ 83]: 449de31b81ed40d0 -Block 0016 [ 84]: da5d86f1d4859c40 -Block 0016 [ 85]: af68984af506de62 -Block 0016 [ 86]: af0a30caa06ea84a -Block 0016 [ 87]: 66a71b0fd1eea1a7 -Block 0016 [ 88]: 91a458c8179efc09 -Block 0016 [ 89]: 324a160de3980429 -Block 0016 [ 90]: b4ef6da86a04fca6 -Block 0016 [ 91]: 87509873a5e21aa2 -Block 0016 [ 92]: 8fe6cceaab2ea6e8 -Block 0016 [ 93]: f51c3860ffce0184 -Block 0016 [ 94]: e16694975bfac692 -Block 0016 [ 95]: 95793e832e74d3a2 -Block 0016 [ 96]: 0605b8359c162493 -Block 0016 [ 97]: b54cd3949d30e152 -Block 0016 [ 98]: eb36361d9a8cef2e -Block 0016 [ 99]: f25eec2dc7386a06 -Block 0016 [100]: d19ba04ffc53b6ba -Block 0016 [101]: 3816f7769f6bd0fd -Block 0016 [102]: effbd7aa623d98ae -Block 0016 [103]: fc1bbfc3fb63741e -Block 0016 [104]: db3ec9d71c9b6955 -Block 0016 [105]: 49eb5111ec17d14a -Block 0016 [106]: 94117297793212f0 -Block 0016 [107]: 0ec9abf1e13bbe99 -Block 0016 [108]: 3a4273167ecc5265 -Block 0016 [109]: 852857524a04c4ce -Block 0016 [110]: 4178c75b2edd173e -Block 0016 [111]: c90afac8bc77aad7 -Block 0016 [112]: 6c92e96d83ccb468 -Block 0016 [113]: 9dbf8877c737acc7 -Block 0016 [114]: 5808636bf5dfec55 -Block 0016 [115]: b5d700579728717b -Block 0016 [116]: 9c9a0bdb324f4ec5 -Block 0016 [117]: 11bddc88463a56d3 -Block 0016 [118]: f5cf8247b6af1ff6 -Block 0016 [119]: cd2463cce0e4c423 -Block 0016 [120]: d78e5dc71540157e -Block 0016 [121]: 045815154efbdecc -Block 0016 [122]: b9cb3f0e83d30af0 -Block 0016 [123]: 803fd63d9ff39d87 -Block 0016 [124]: 372cad617ab2e088 -Block 0016 [125]: 9fc7449aef3171c6 -Block 0016 [126]: 949f1546def1e4e5 -Block 0016 [127]: 7ff68880ad3e4171 -Block 0017 [ 0]: 17bc51246a97bfe8 -Block 0017 [ 1]: 7c307392a89164be -Block 0017 [ 2]: 3bd25ce4dd817fdd -Block 0017 [ 3]: 060ac5b552a17caf -Block 0017 [ 4]: f4e5cb5ec952721c -Block 0017 [ 5]: f40a02b23dacf1ed -Block 0017 [ 6]: cc7916b0003b7715 -Block 0017 [ 7]: fc024a28346e29d2 -Block 0017 [ 8]: 853a0213a4bba254 -Block 0017 [ 9]: 86458aa39e26fb79 -Block 0017 [ 10]: d0c5986ee2a8b77c -Block 0017 [ 11]: b7e9a2067e41b9dc -Block 0017 [ 12]: 1480f8731540a9a5 -Block 0017 [ 13]: a611565fa40d4e17 -Block 0017 [ 14]: ed2165f337d3254f -Block 0017 [ 15]: 9a2ca8e3b872f068 -Block 0017 [ 16]: 2a8dcea98d5ca8e1 -Block 0017 [ 17]: 46588793c6ee55b7 -Block 0017 [ 18]: ce760091c665de69 -Block 0017 [ 19]: 4df6fd4c724c3c02 -Block 0017 [ 20]: e3d5e35e793d4938 -Block 0017 [ 21]: cbc479714ea420e4 -Block 0017 [ 22]: ca4cf169361fc3ae -Block 0017 [ 23]: 6e0ff7647dbee083 -Block 0017 [ 24]: 2a77fbb07ea0868b -Block 0017 [ 25]: e2269c613372f038 -Block 0017 [ 26]: d5c9a67fb1bd36cf -Block 0017 [ 27]: 94e6f478c6bad422 -Block 0017 [ 28]: 73d510ad54eab733 -Block 0017 [ 29]: f407ddfecc8746da -Block 0017 [ 30]: 39d0482ea9dad35d -Block 0017 [ 31]: 734ce00d891aa7ec -Block 0017 [ 32]: 1a6c74ee238502c1 -Block 0017 [ 33]: 0fcc8fa05bcc224e -Block 0017 [ 34]: ad32b509d3d19c3d -Block 0017 [ 35]: bb9b95df60ffb63d -Block 0017 [ 36]: 8bffc2455c34f2c0 -Block 0017 [ 37]: d6f5ef776360eee9 -Block 0017 [ 38]: 21659782e3299c20 -Block 0017 [ 39]: ec7ac42b913b8806 -Block 0017 [ 40]: 9314f0c2971f9ec0 -Block 0017 [ 41]: 5340aba1b3895424 -Block 0017 [ 42]: d4724e17d3e2e403 -Block 0017 [ 43]: dcfe96954d356b40 -Block 0017 [ 44]: d5262bbc7d9d9e42 -Block 0017 [ 45]: a983ed3013d9715b -Block 0017 [ 46]: 1d6ac87ef06ee57d -Block 0017 [ 47]: 8416641ced13f76e -Block 0017 [ 48]: 1e72c0a977c6f809 -Block 0017 [ 49]: a6c0a7b48524e94a -Block 0017 [ 50]: a8d4d8f0b5b1ee56 -Block 0017 [ 51]: 06951457a0cde01f -Block 0017 [ 52]: 17a8f30ddab4fe10 -Block 0017 [ 53]: 41a5c0de05cb6849 -Block 0017 [ 54]: 7d6e61695eb13641 -Block 0017 [ 55]: aef78a53d6f9c52e -Block 0017 [ 56]: d0a9b02db118488a -Block 0017 [ 57]: f9f3148df06e460f -Block 0017 [ 58]: ba54c9d7da37026c -Block 0017 [ 59]: 813043bb6263b64a -Block 0017 [ 60]: 01e8ed3940b3a653 -Block 0017 [ 61]: 95600d5f7b6e4d77 -Block 0017 [ 62]: 51b3fc67c6a0ea2a -Block 0017 [ 63]: a4bb04ccc8265b11 -Block 0017 [ 64]: 0ab034f465cc0813 -Block 0017 [ 65]: e405436951fc79ab -Block 0017 [ 66]: 3ffbc05b9fcdeb7a -Block 0017 [ 67]: 28a0287c2941a2fc -Block 0017 [ 68]: 5bf655516a93e471 -Block 0017 [ 69]: a52095c9bd7237c3 -Block 0017 [ 70]: 7bb4ba223bee1011 -Block 0017 [ 71]: 50948fc7c91590af -Block 0017 [ 72]: 6ca4a3345a4f0106 -Block 0017 [ 73]: fae756af4dda49f6 -Block 0017 [ 74]: c39806c4c73bf1f1 -Block 0017 [ 75]: b9b643d55df8b682 -Block 0017 [ 76]: eea591b9d94795b0 -Block 0017 [ 77]: 88f24f15d82df6c0 -Block 0017 [ 78]: 1d35dc2e5f49fb41 -Block 0017 [ 79]: 5916da9d7b572428 -Block 0017 [ 80]: 180ba1758293cd85 -Block 0017 [ 81]: 5a6735d12f2982fe -Block 0017 [ 82]: dd921fc0eee69756 -Block 0017 [ 83]: e0771b3f026dbabf -Block 0017 [ 84]: 6df839ab1ce96516 -Block 0017 [ 85]: 72ec1c04a9fdc1a2 -Block 0017 [ 86]: e0c95b2b94db0792 -Block 0017 [ 87]: a8642ff38ac9e870 -Block 0017 [ 88]: b110669b3d07ea33 -Block 0017 [ 89]: 2d8aa2a78f93c49f -Block 0017 [ 90]: b5a40d81a59f5ef8 -Block 0017 [ 91]: 70d2112c6066451f -Block 0017 [ 92]: 8417e0871fac12c6 -Block 0017 [ 93]: c38c9899e8edcdf8 -Block 0017 [ 94]: ce9590f30ff53347 -Block 0017 [ 95]: 6895d4878d62caf9 -Block 0017 [ 96]: 262535b134187242 -Block 0017 [ 97]: a0deecfbbbe86396 -Block 0017 [ 98]: 1ee3e87369ad6e5c -Block 0017 [ 99]: eb6d2adec6c431cd -Block 0017 [100]: 76d98fffc6de3f84 -Block 0017 [101]: f47b69b4f56db042 -Block 0017 [102]: f0123fbf21b74be5 -Block 0017 [103]: e82156d144a42e08 -Block 0017 [104]: b96dfd6e82865304 -Block 0017 [105]: 2b65b6f8bf85aa49 -Block 0017 [106]: 43784bb1d195eadd -Block 0017 [107]: 8e65dd65aca567b8 -Block 0017 [108]: ea9c8c9e75172184 -Block 0017 [109]: 8aadae18a51aadd6 -Block 0017 [110]: ad11911ba95b3a14 -Block 0017 [111]: e3244be33fcbb3a7 -Block 0017 [112]: 80fbed869132d4ff -Block 0017 [113]: 4156c7bdac7fb574 -Block 0017 [114]: 4a5e0ebfdc6185d5 -Block 0017 [115]: 808ffed756ed20ff -Block 0017 [116]: 423276097e8ee14f -Block 0017 [117]: 26a7de2148a76179 -Block 0017 [118]: b02275a467bca390 -Block 0017 [119]: 7646106b9071629a -Block 0017 [120]: 5b6c21a823ff65de -Block 0017 [121]: 3add52a1b76d989a -Block 0017 [122]: df9f28f504111275 -Block 0017 [123]: 7cac15fedd243ed5 -Block 0017 [124]: eb26ae42cf401b70 -Block 0017 [125]: 59ee7e4ee4833712 -Block 0017 [126]: a1e2bc7f1348749c -Block 0017 [127]: 98dca4163fdca5c8 -Block 0018 [ 0]: d084772fe184585c -Block 0018 [ 1]: b7a71a5c80ee84e4 -Block 0018 [ 2]: a483de7b04caaa0b -Block 0018 [ 3]: ccf118ab7d75e9b9 -Block 0018 [ 4]: 77853b81dbf3be54 -Block 0018 [ 5]: 5c20332b42ade752 -Block 0018 [ 6]: 1b732b6811dcea0a -Block 0018 [ 7]: 4a3d6efac28e3d78 -Block 0018 [ 8]: d14a43c694fc46ee -Block 0018 [ 9]: b3d3dabbb3287e12 -Block 0018 [ 10]: 358d5c7f1c7eec24 -Block 0018 [ 11]: 12b8d5a8c5df0034 -Block 0018 [ 12]: 131ff3fe443d313b -Block 0018 [ 13]: 00acf1cff6c323cf -Block 0018 [ 14]: 8838c79d58713e79 -Block 0018 [ 15]: 1aefe3b69e1ccf27 -Block 0018 [ 16]: 8fc035f26b129484 -Block 0018 [ 17]: febf943bfe6b4f27 -Block 0018 [ 18]: 17763060ae755bfa -Block 0018 [ 19]: 928cd6c24615587e -Block 0018 [ 20]: d05d9f8434053cc9 -Block 0018 [ 21]: 6b2ca6e171e4ed5b -Block 0018 [ 22]: 0572ce2d3cf14a9d -Block 0018 [ 23]: 7a61ce4a2c246662 -Block 0018 [ 24]: 605742a341eb3985 -Block 0018 [ 25]: a753887d0eb40761 -Block 0018 [ 26]: bd0f8da298d9c1b7 -Block 0018 [ 27]: 00596e2557f7f475 -Block 0018 [ 28]: 22a1329d12efeb77 -Block 0018 [ 29]: 0e626cb6fbfb5970 -Block 0018 [ 30]: dc8d9697877c7c19 -Block 0018 [ 31]: 005a226a1279357f -Block 0018 [ 32]: c4e5947af0e6deca -Block 0018 [ 33]: 94d569d17b1e6f67 -Block 0018 [ 34]: de386d45c5f3224d -Block 0018 [ 35]: 01403b1912e12590 -Block 0018 [ 36]: 00326afc95f0821c -Block 0018 [ 37]: 43dd6cae3a1686cf -Block 0018 [ 38]: 57ad2a4169aff5f6 -Block 0018 [ 39]: f0d13dbcf2539637 -Block 0018 [ 40]: 2af4dee0883f6264 -Block 0018 [ 41]: c372bb4b2347b981 -Block 0018 [ 42]: f8355df82fd6e1e5 -Block 0018 [ 43]: 62f87bd55f1766fb -Block 0018 [ 44]: 7d09765dc41d0f6c -Block 0018 [ 45]: b4ef9dff26945262 -Block 0018 [ 46]: 30c988904e8f9bc7 -Block 0018 [ 47]: 778b20a07139015a -Block 0018 [ 48]: 57337400114a4f22 -Block 0018 [ 49]: 607be229edbde71b -Block 0018 [ 50]: 0b40abc4ed7d31e9 -Block 0018 [ 51]: 8b7fed47f43ebb51 -Block 0018 [ 52]: a7e464184f6c95d9 -Block 0018 [ 53]: c6231982c1921464 -Block 0018 [ 54]: 5e758c90ff72fd07 -Block 0018 [ 55]: 37b5cc5e18198231 -Block 0018 [ 56]: 21528056165f24af -Block 0018 [ 57]: c74644315731a372 -Block 0018 [ 58]: 503f171f2ea0db88 -Block 0018 [ 59]: 0f584869dd54f31e -Block 0018 [ 60]: c10466c393cc5be7 -Block 0018 [ 61]: 24e7a034f6ad5fe0 -Block 0018 [ 62]: 0196a0f69cdae74e -Block 0018 [ 63]: 3c271b723ff0c33c -Block 0018 [ 64]: 36577195709ea2ec -Block 0018 [ 65]: e0951bce093b31ba -Block 0018 [ 66]: 6c0a54fa572e54da -Block 0018 [ 67]: 448a72ac125c2e9f -Block 0018 [ 68]: 4613c81ca1d46bcb -Block 0018 [ 69]: bee31e192f200f01 -Block 0018 [ 70]: a6cf318b6393bc81 -Block 0018 [ 71]: 7628622d5df2a701 -Block 0018 [ 72]: 04015c4ecfcf9bfe -Block 0018 [ 73]: 2071eebdf355667b -Block 0018 [ 74]: 86610a505283627d -Block 0018 [ 75]: 2b2a880964250e32 -Block 0018 [ 76]: 7121473b76166136 -Block 0018 [ 77]: 09d4a66876d0e7a0 -Block 0018 [ 78]: e4743e35c5c2eaab -Block 0018 [ 79]: 646868b26a9c4594 -Block 0018 [ 80]: 8dac159f6186bf69 -Block 0018 [ 81]: 380546891bd4c666 -Block 0018 [ 82]: 1720354bc9f61fc6 -Block 0018 [ 83]: 98e09f5f28637dd2 -Block 0018 [ 84]: 0420311ec175f586 -Block 0018 [ 85]: 516caaad13a66966 -Block 0018 [ 86]: 84e653e235fd0ffc -Block 0018 [ 87]: 2c1e232cfceb2e15 -Block 0018 [ 88]: 8822ab2668064755 -Block 0018 [ 89]: c7a99e8a5ff6bca0 -Block 0018 [ 90]: d98d6bb5829a56c6 -Block 0018 [ 91]: 19ae3576f64a5fff -Block 0018 [ 92]: effb8092b1f6f935 -Block 0018 [ 93]: 09ec59b5392d58d0 -Block 0018 [ 94]: 3a4ae1a0c6b596f4 -Block 0018 [ 95]: 86945defe7b4c6bf -Block 0018 [ 96]: 6bef6ff460e42e62 -Block 0018 [ 97]: c49b80acbc65b852 -Block 0018 [ 98]: 8b2d1c4baf8c075f -Block 0018 [ 99]: 7e3f7bf10f525d6f -Block 0018 [100]: ee9d6f757d30a1aa -Block 0018 [101]: 589a2046727cc440 -Block 0018 [102]: 53491fc1647a4e0a -Block 0018 [103]: ce68ea7fb20ead43 -Block 0018 [104]: 4dd0de9bfad115f3 -Block 0018 [105]: 6b0f8b8425f2b5a0 -Block 0018 [106]: c44db4c514acfc14 -Block 0018 [107]: e6dd1022bf14c48d -Block 0018 [108]: d8711234f656ce8a -Block 0018 [109]: 08bf8dec13ff93d2 -Block 0018 [110]: 0ff665e0275941d6 -Block 0018 [111]: 01e8c370456c3eb1 -Block 0018 [112]: eca303a81bc07867 -Block 0018 [113]: 6c1f9fd5e1cf7c28 -Block 0018 [114]: cecf8cd3e55e50ca -Block 0018 [115]: 6d791fb10089b0d7 -Block 0018 [116]: ba1c16d4628c8ac2 -Block 0018 [117]: 0add2f746a15fde5 -Block 0018 [118]: b8b1c169cec54425 -Block 0018 [119]: 2118f7b75c8eec10 -Block 0018 [120]: 62a698a86fdbea7c -Block 0018 [121]: d1f445354accf76f -Block 0018 [122]: 54a5ad09cfff950e -Block 0018 [123]: 321b3438f579b51e -Block 0018 [124]: 84fab9c8f11370d6 -Block 0018 [125]: 5362ef92ccee2146 -Block 0018 [126]: 7177d9edb1502f96 -Block 0018 [127]: 69d163f02c4974ed -Block 0019 [ 0]: 3d0916ed9e833207 -Block 0019 [ 1]: 246916dfc2448d0e -Block 0019 [ 2]: 1802a650dc4cc6a7 -Block 0019 [ 3]: 11945e0300016f36 -Block 0019 [ 4]: e65fe8dc14d54a2c -Block 0019 [ 5]: 8628137392bf8e5f -Block 0019 [ 6]: a45fbfdaf581c97f -Block 0019 [ 7]: a506ce7a102c6fb3 -Block 0019 [ 8]: c364b39bbbe2accc -Block 0019 [ 9]: 47a304654d05f7a4 -Block 0019 [ 10]: e39b8615c4e06e74 -Block 0019 [ 11]: 34907f8fd543151d -Block 0019 [ 12]: 4a1759c5e83a1206 -Block 0019 [ 13]: 6778a6195c965d45 -Block 0019 [ 14]: 9af9889bcb643739 -Block 0019 [ 15]: d756d62aa2e25a04 -Block 0019 [ 16]: 827dba7101e28106 -Block 0019 [ 17]: 3b0e46ba9b3c39cf -Block 0019 [ 18]: f1f38f90e67e5fe3 -Block 0019 [ 19]: 2c6cf41c1873dc3d -Block 0019 [ 20]: 48d9dc8fc1fd0d05 -Block 0019 [ 21]: 984cfb30aee058f7 -Block 0019 [ 22]: dba6c35650569ef6 -Block 0019 [ 23]: 05758ff526281ff8 -Block 0019 [ 24]: dea551321b133c9b -Block 0019 [ 25]: 2d2febfe90cc21c8 -Block 0019 [ 26]: 2a5ab9b4cf66466b -Block 0019 [ 27]: e8c8736b1118fe0f -Block 0019 [ 28]: 906569f6cebdd903 -Block 0019 [ 29]: 48977b0e03cc7acd -Block 0019 [ 30]: 392c1604e5e25847 -Block 0019 [ 31]: 0f3a782d67e75dc0 -Block 0019 [ 32]: 72ace7605024c74f -Block 0019 [ 33]: a1b1ecc0efb8d5ee -Block 0019 [ 34]: ea272ed7f31981bd -Block 0019 [ 35]: 92cde2b4d0a00a22 -Block 0019 [ 36]: 4de44e29a20cc050 -Block 0019 [ 37]: a14abcc63ff548c1 -Block 0019 [ 38]: 86af7968efed7819 -Block 0019 [ 39]: fa7b27ea7592d525 -Block 0019 [ 40]: 88386f081e59a92b -Block 0019 [ 41]: 2dbf4cae55ea74af -Block 0019 [ 42]: a7c4d6d44b7779db -Block 0019 [ 43]: 8fcceeab46f56dff -Block 0019 [ 44]: bf2701da005989d8 -Block 0019 [ 45]: 3885da5bfebc498f -Block 0019 [ 46]: 886c978a342d26ff -Block 0019 [ 47]: 5627e56d96e81ac6 -Block 0019 [ 48]: ae4e19022c09db70 -Block 0019 [ 49]: 8385a5556e4f951b -Block 0019 [ 50]: 2942868c20dff7ab -Block 0019 [ 51]: 7119533db3aedbf2 -Block 0019 [ 52]: 5707c74688cee744 -Block 0019 [ 53]: 511343dee334a23d -Block 0019 [ 54]: 6cd09da27c938bdc -Block 0019 [ 55]: c77e4714dcf668d3 -Block 0019 [ 56]: 767c11648d06b8f6 -Block 0019 [ 57]: deccdf769bef9089 -Block 0019 [ 58]: 455a5f824ffbc916 -Block 0019 [ 59]: 6c0fa714f83aec15 -Block 0019 [ 60]: cea560f5e6dc9218 -Block 0019 [ 61]: 87615693e82231f7 -Block 0019 [ 62]: 7abb05196b159d93 -Block 0019 [ 63]: f1968b8b3ac9bd54 -Block 0019 [ 64]: 0f5b76884a66ac19 -Block 0019 [ 65]: 593634c801741fb6 -Block 0019 [ 66]: 36fe94fdcac45f59 -Block 0019 [ 67]: 1260f8fe84cd160d -Block 0019 [ 68]: 63da6183ad0a643a -Block 0019 [ 69]: 5b27fbbda96e7ab4 -Block 0019 [ 70]: da3fec81f2e9218b -Block 0019 [ 71]: 5097727f0becde66 -Block 0019 [ 72]: 188d05de76951b8f -Block 0019 [ 73]: d654e94ccbd8d0ec -Block 0019 [ 74]: c1ea500224a941e0 -Block 0019 [ 75]: 1adc6cc4b1c7654f -Block 0019 [ 76]: 723738ebddeeda77 -Block 0019 [ 77]: 258540fd5b39a123 -Block 0019 [ 78]: bf8e0e3022f84c86 -Block 0019 [ 79]: d5d7e843a792f503 -Block 0019 [ 80]: 861c3f6650784c73 -Block 0019 [ 81]: ec58f0a9f36f6bf2 -Block 0019 [ 82]: 9fed771a57dd20cd -Block 0019 [ 83]: 79228975a1ad1a4b -Block 0019 [ 84]: 2f9d09811d3349db -Block 0019 [ 85]: 796ad44e7586692d -Block 0019 [ 86]: ab1191e9410f68fb -Block 0019 [ 87]: 1128ee882c6af04a -Block 0019 [ 88]: 73f57bf6cf9dc609 -Block 0019 [ 89]: dff741812d32401b -Block 0019 [ 90]: ea12d97dc9dc03fd -Block 0019 [ 91]: f50f4ad7c6e7abc6 -Block 0019 [ 92]: 688d13caa19ef5fe -Block 0019 [ 93]: 1dbaaf3ff5ad791b -Block 0019 [ 94]: 2884de8faece0a70 -Block 0019 [ 95]: 0c38bf887f4d311a -Block 0019 [ 96]: 95b004d9b0337a97 -Block 0019 [ 97]: 0ce5642f30645a2d -Block 0019 [ 98]: 8c7b39377deaadb4 -Block 0019 [ 99]: adce80468faaf392 -Block 0019 [100]: b7dc1859f20cbbc7 -Block 0019 [101]: 382d7f0d3d6cfe40 -Block 0019 [102]: abf0c8ef57ecb5d1 -Block 0019 [103]: 2b966db4075b3bf4 -Block 0019 [104]: c3868f4576df0661 -Block 0019 [105]: a56bc51175ea255c -Block 0019 [106]: 432656f6cf6ab332 -Block 0019 [107]: ec96141cdf52aa98 -Block 0019 [108]: 26e75ed39252d5ad -Block 0019 [109]: 1e6b75aaa66dab60 -Block 0019 [110]: 5fc14959a0021118 -Block 0019 [111]: 2832c47a618f6549 -Block 0019 [112]: ba03b67a60002625 -Block 0019 [113]: 200f5ce345022e08 -Block 0019 [114]: 0d82c4c459db15f2 -Block 0019 [115]: 344074f5390b7ddc -Block 0019 [116]: c320f898546a4174 -Block 0019 [117]: 430d1e2d1be316b2 -Block 0019 [118]: 8dceddf10c9e569a -Block 0019 [119]: 8122ec86dc334421 -Block 0019 [120]: e2758de2b61ec590 -Block 0019 [121]: c68f8b9d8c8cc491 -Block 0019 [122]: 42685a32054bd9b3 -Block 0019 [123]: e53de9a8050a4ad6 -Block 0019 [124]: 6330cbef475c6b1a -Block 0019 [125]: eccf64a43197e265 -Block 0019 [126]: 7c0b1667cb1e0562 -Block 0019 [127]: 141bb29376e7011d -Block 0020 [ 0]: f9c9c5dda18a6965 -Block 0020 [ 1]: b690a36c14cbd868 -Block 0020 [ 2]: 163c4705e87b13b6 -Block 0020 [ 3]: 929a86fe2df99e80 -Block 0020 [ 4]: 28e33d0ff638ceb0 -Block 0020 [ 5]: ab48f32887082c70 -Block 0020 [ 6]: b59ab6eb7f42f485 -Block 0020 [ 7]: e2622758fd7c67e6 -Block 0020 [ 8]: a4a71160bfb71c73 -Block 0020 [ 9]: 9b4925d44839e634 -Block 0020 [ 10]: 0340e91a9f6c3090 -Block 0020 [ 11]: b1a00bfc86641292 -Block 0020 [ 12]: 4759310f15b591b7 -Block 0020 [ 13]: 9091b33e75707188 -Block 0020 [ 14]: 81a4d0d991e6cd4d -Block 0020 [ 15]: 0efc2412ca9c947b -Block 0020 [ 16]: 8d26b3f7dce089b2 -Block 0020 [ 17]: f1da8900bcf32fa4 -Block 0020 [ 18]: 5ec8949e5eba513e -Block 0020 [ 19]: 4bff9e41de6e8843 -Block 0020 [ 20]: 515ce37f89dc28dc -Block 0020 [ 21]: e7ba4aee5acb5cd3 -Block 0020 [ 22]: c1d8c42c9fc6892b -Block 0020 [ 23]: 8b4011f6641bd2f6 -Block 0020 [ 24]: 9ab0113ecbf2a1a7 -Block 0020 [ 25]: 993cd18ecb74bcc1 -Block 0020 [ 26]: c335d78612d4a36c -Block 0020 [ 27]: eefc0b1d1a926985 -Block 0020 [ 28]: f875802c6f495962 -Block 0020 [ 29]: e4223bfc4a2b65dd -Block 0020 [ 30]: 08880db04b44e9ee -Block 0020 [ 31]: a332263240c1cac8 -Block 0020 [ 32]: 9fa737c30707186b -Block 0020 [ 33]: 595227e9b79d9a88 -Block 0020 [ 34]: 57a2008021d20e48 -Block 0020 [ 35]: a58eab22c505e4bf -Block 0020 [ 36]: f0109b2e88f6fb85 -Block 0020 [ 37]: c75d08e197165e56 -Block 0020 [ 38]: ec954f3f90eec8f0 -Block 0020 [ 39]: dbc876da2eb7cb3a -Block 0020 [ 40]: 5bbf9ea8ab943e25 -Block 0020 [ 41]: 20940bc2fa5e8391 -Block 0020 [ 42]: e7c829fca1e7f482 -Block 0020 [ 43]: d3ebf89ce06b9252 -Block 0020 [ 44]: 8a47b9736b1182fe -Block 0020 [ 45]: c729ce9f350718a9 -Block 0020 [ 46]: cdd723f353a00bca -Block 0020 [ 47]: 54dfa84d908b15a9 -Block 0020 [ 48]: 7fa23409fbe36687 -Block 0020 [ 49]: 5976fc7c4ae89b79 -Block 0020 [ 50]: c3bfee4f92c6dea4 -Block 0020 [ 51]: 70d69740726f23eb -Block 0020 [ 52]: e18c2b2e22c7e5c9 -Block 0020 [ 53]: 5ea08ab2df6f8a2b -Block 0020 [ 54]: 7063ae1ab581e206 -Block 0020 [ 55]: a5d6adfdfc22dda9 -Block 0020 [ 56]: 2d89c11429ccfdbc -Block 0020 [ 57]: 37db3754f2a57c26 -Block 0020 [ 58]: 1340fac6eb112a2c -Block 0020 [ 59]: 30189af6af800d0d -Block 0020 [ 60]: 6d611bd46ad93afc -Block 0020 [ 61]: 65ece3082d0a0bf7 -Block 0020 [ 62]: 155d2cb0a797a797 -Block 0020 [ 63]: 290f6f5c75189bdb -Block 0020 [ 64]: 2c9e04cc29a5f253 -Block 0020 [ 65]: 199eb8571717b01a -Block 0020 [ 66]: 8b22891284d0caa1 -Block 0020 [ 67]: 0a3c890819a97540 -Block 0020 [ 68]: 560bd8306af411b2 -Block 0020 [ 69]: 2fc338aa51fc1060 -Block 0020 [ 70]: 864a9eb237755447 -Block 0020 [ 71]: deb4c74af8f2eb0e -Block 0020 [ 72]: 0bf2c92928b99c42 -Block 0020 [ 73]: 4962cd509c4f2c3b -Block 0020 [ 74]: c89be72654913596 -Block 0020 [ 75]: a60eadb82746d5af -Block 0020 [ 76]: b3326e39ca57e78c -Block 0020 [ 77]: e6a6a9bebedcc84d -Block 0020 [ 78]: b667858af3138308 -Block 0020 [ 79]: dfeda5d85bbdcfee -Block 0020 [ 80]: d919b7578b76d74e -Block 0020 [ 81]: 850284e391722b19 -Block 0020 [ 82]: b03d2baa35837efa -Block 0020 [ 83]: a209abae24213ed5 -Block 0020 [ 84]: 49d5ac9f0fb11d32 -Block 0020 [ 85]: 69ea2a245f5c1813 -Block 0020 [ 86]: b11db3d63ceec6a9 -Block 0020 [ 87]: 8ef660c90b176663 -Block 0020 [ 88]: f26147a27dda57e2 -Block 0020 [ 89]: ed2b6911130346ac -Block 0020 [ 90]: b7a6fb331da0dab5 -Block 0020 [ 91]: 43c39f32728e46ae -Block 0020 [ 92]: 27eff7a0e2eff334 -Block 0020 [ 93]: 58714734110f1ed5 -Block 0020 [ 94]: 8e9501c8857d00fa -Block 0020 [ 95]: a09bed917512854d -Block 0020 [ 96]: a55609989993a5cf -Block 0020 [ 97]: a742b1aac4f486b3 -Block 0020 [ 98]: 1b64f3fbf7325e76 -Block 0020 [ 99]: 7116e730adff7f4f -Block 0020 [100]: 0c51d67ee841778f -Block 0020 [101]: 3bf13731bb2d6bf7 -Block 0020 [102]: 4a9352b8d776d47d -Block 0020 [103]: f6d78f9788bec749 -Block 0020 [104]: 8f1287aba7db6f4a -Block 0020 [105]: 0f10efdc8298ef68 -Block 0020 [106]: fae8d4b151fc557a -Block 0020 [107]: 8c5d238cd00d1e84 -Block 0020 [108]: ae1fba74cc6295c3 -Block 0020 [109]: 62ccae0639dc4631 -Block 0020 [110]: 6763e3e83f9959f3 -Block 0020 [111]: 813fb0a090e8d241 -Block 0020 [112]: 16d2ba6082843b5a -Block 0020 [113]: cf81b8308f4180b8 -Block 0020 [114]: 5bfbf79b1cc15285 -Block 0020 [115]: 7a64046d593d0c69 -Block 0020 [116]: fbf6a2343475bf5e -Block 0020 [117]: c0369ef57773309f -Block 0020 [118]: 18989bc4213e408c -Block 0020 [119]: 0538d61079e129a1 -Block 0020 [120]: c9ac59192ce92126 -Block 0020 [121]: 5556cce49cdc8ca3 -Block 0020 [122]: 17582f4977b56e48 -Block 0020 [123]: ea46273c59909883 -Block 0020 [124]: c1d1028489caba25 -Block 0020 [125]: a03a95f0ca25aefd -Block 0020 [126]: 05248c8fad679a3b -Block 0020 [127]: c460ffc0cdb31374 -Block 0021 [ 0]: 56e3d6cdc1058695 -Block 0021 [ 1]: 84d273510bffaa1d -Block 0021 [ 2]: 3ee27baf0003ffac -Block 0021 [ 3]: 17a56cc4ce43d1ad -Block 0021 [ 4]: eada1378b12c5b88 -Block 0021 [ 5]: bc5f12ec4fe0b98d -Block 0021 [ 6]: 863a9703fada5f2e -Block 0021 [ 7]: 4b74ea1dadc6e075 -Block 0021 [ 8]: 4df4976a127b8c34 -Block 0021 [ 9]: 2a589bae3f2f325f -Block 0021 [ 10]: ede299cc94e319c2 -Block 0021 [ 11]: 399d90f13a456d69 -Block 0021 [ 12]: 130c6e1fe2abf0f0 -Block 0021 [ 13]: d1229c11837a9c4e -Block 0021 [ 14]: d6847938c2a676eb -Block 0021 [ 15]: 677b2013e7dca300 -Block 0021 [ 16]: e9dd6c608bdd778b -Block 0021 [ 17]: 1b7147ac56de72f2 -Block 0021 [ 18]: 89e826683c323bf7 -Block 0021 [ 19]: 9b717e27007eeadb -Block 0021 [ 20]: f6e2a5be9bdc79f4 -Block 0021 [ 21]: 8a0b776dfbf2e02d -Block 0021 [ 22]: 6a961a882c9f1687 -Block 0021 [ 23]: 6f88a8233e259f64 -Block 0021 [ 24]: ead97b9ca691db31 -Block 0021 [ 25]: faaeeb04aa749d17 -Block 0021 [ 26]: c193caf83958f1a7 -Block 0021 [ 27]: 66ab1fc224c3b601 -Block 0021 [ 28]: bb43dc26d220b518 -Block 0021 [ 29]: e6dfc133b81dd628 -Block 0021 [ 30]: 6412a2acc78546d3 -Block 0021 [ 31]: 5caeeb9893888a44 -Block 0021 [ 32]: c8ad13c366fd6925 -Block 0021 [ 33]: 46474cc5bcbbad2b -Block 0021 [ 34]: 4d2012ac62d01d1a -Block 0021 [ 35]: 02202cc48c295cd8 -Block 0021 [ 36]: e5bd0cf27cc1a946 -Block 0021 [ 37]: 11fc8ea2f1af1294 -Block 0021 [ 38]: 5a1b503fe205d2c6 -Block 0021 [ 39]: 7dcfd7e8d37da7ff -Block 0021 [ 40]: daa02c5de85539ca -Block 0021 [ 41]: 2ef385aa290e2ffe -Block 0021 [ 42]: ec75f049b0c8bdd5 -Block 0021 [ 43]: 55086dcd60af2011 -Block 0021 [ 44]: 75bd4d45c5e74ae5 -Block 0021 [ 45]: 965897eb57f8eb5c -Block 0021 [ 46]: 427a52c3117476a5 -Block 0021 [ 47]: 2bb17fb421557439 -Block 0021 [ 48]: 613b7590b307f22f -Block 0021 [ 49]: 6b495b70ddaa6da9 -Block 0021 [ 50]: 8e035b4816af8019 -Block 0021 [ 51]: c22c82ddd9307ca1 -Block 0021 [ 52]: f2b817657210a745 -Block 0021 [ 53]: c35a72e9a6988cff -Block 0021 [ 54]: 49f30739d3b82d52 -Block 0021 [ 55]: 0a17decbc52dff3a -Block 0021 [ 56]: 9f09e1919fd18160 -Block 0021 [ 57]: f0133f28990d7c4a -Block 0021 [ 58]: 419824662919cae7 -Block 0021 [ 59]: e7025ec193302b60 -Block 0021 [ 60]: c36526923f11a314 -Block 0021 [ 61]: 0c79d97e27b889fe -Block 0021 [ 62]: 25a2c335ba84ada1 -Block 0021 [ 63]: ef4599d4390f42fb -Block 0021 [ 64]: 6a692ab692937aea -Block 0021 [ 65]: 8e92553f9bd587cc -Block 0021 [ 66]: c264f7ce2573326c -Block 0021 [ 67]: 1e110f26b0f028ca -Block 0021 [ 68]: 84feb398a69d30bc -Block 0021 [ 69]: 57066cdb0dd73bce -Block 0021 [ 70]: 131362f400566a4c -Block 0021 [ 71]: 1315c6beb6c3bf4b -Block 0021 [ 72]: 26aaaefc0ebff4d1 -Block 0021 [ 73]: a358eb15b2793ed2 -Block 0021 [ 74]: 02528da64402b96a -Block 0021 [ 75]: 7873f04aaaf20566 -Block 0021 [ 76]: 18848e03d5666413 -Block 0021 [ 77]: 03810f21b747d2da -Block 0021 [ 78]: 07a3bdd3385164db -Block 0021 [ 79]: e22ceea12176eab8 -Block 0021 [ 80]: 0b11b5e67cb86402 -Block 0021 [ 81]: fdbbb3e8d2d3c03a -Block 0021 [ 82]: 8c46ebdc1827bae5 -Block 0021 [ 83]: ebccc5f84e5bff07 -Block 0021 [ 84]: af9bb087253c48ec -Block 0021 [ 85]: bc858f152ef33f92 -Block 0021 [ 86]: d2f1ac013a227a55 -Block 0021 [ 87]: 3c20350c794aa4f6 -Block 0021 [ 88]: fdf399df49e450c4 -Block 0021 [ 89]: f37fb06fd2dd4c22 -Block 0021 [ 90]: fea8ab9a0a146a3e -Block 0021 [ 91]: 17355110050bddd3 -Block 0021 [ 92]: 422b1207f671670a -Block 0021 [ 93]: 530ddc77b6d64cc8 -Block 0021 [ 94]: ecba5ec654e4c582 -Block 0021 [ 95]: 54e0209c70a11ffe -Block 0021 [ 96]: 5c4cd04463205db2 -Block 0021 [ 97]: bcc35736a824f54b -Block 0021 [ 98]: dc43c322ec2d8a84 -Block 0021 [ 99]: f5613764992f37dd -Block 0021 [100]: e0a6ceb0583eef8f -Block 0021 [101]: 804eacf20c63f8a4 -Block 0021 [102]: 6e3806866f273a61 -Block 0021 [103]: b0c227e201485667 -Block 0021 [104]: f9fc0f92f9bedcac -Block 0021 [105]: fccafd379e9f12ef -Block 0021 [106]: 05ae07dec96f9eb0 -Block 0021 [107]: fd15d9577c4ea8e4 -Block 0021 [108]: 1a4e61a28ff11004 -Block 0021 [109]: a4872d13a69a0b4c -Block 0021 [110]: 8aa4ec2f2d437813 -Block 0021 [111]: 819bfdfeaaa63f48 -Block 0021 [112]: ed5a68b009e360c4 -Block 0021 [113]: e0e8b4a7cb576db0 -Block 0021 [114]: b59c4f32dd03da00 -Block 0021 [115]: b2ad853f8f069f41 -Block 0021 [116]: ca994d65093a74bb -Block 0021 [117]: d6a367644126ff76 -Block 0021 [118]: 474bcb62a5a32578 -Block 0021 [119]: afe92b0c4a373a90 -Block 0021 [120]: 2441672629527279 -Block 0021 [121]: d48d70a936bc1f6a -Block 0021 [122]: 06c0a578a5be8cff -Block 0021 [123]: bc465df8825e63b8 -Block 0021 [124]: 009832fb2593ed52 -Block 0021 [125]: 240ea37a5b3c0898 -Block 0021 [126]: a5e6792687d94efd -Block 0021 [127]: 016f2a1a3938b59d -Block 0022 [ 0]: f28208ecaf7daa39 -Block 0022 [ 1]: 53aa8bfdd2c7a82e -Block 0022 [ 2]: 040c51ebe7130e9b -Block 0022 [ 3]: c53745bc099f0a10 -Block 0022 [ 4]: 994c0f76e52c4e70 -Block 0022 [ 5]: d10f139c2035a83f -Block 0022 [ 6]: f45c9a03e7124b1c -Block 0022 [ 7]: 509df037e7cbcdc9 -Block 0022 [ 8]: f2e5559090115b70 -Block 0022 [ 9]: 920cca40b2d82562 -Block 0022 [ 10]: ce7fd5163ff910a1 -Block 0022 [ 11]: fe32d902cb033902 -Block 0022 [ 12]: 53a99b4671e1bd64 -Block 0022 [ 13]: 3a0a6b6ee19a017d -Block 0022 [ 14]: 6db107dc01c49333 -Block 0022 [ 15]: 714519d0c9dd6df6 -Block 0022 [ 16]: 0294a739ffac2767 -Block 0022 [ 17]: be852872da6c9909 -Block 0022 [ 18]: c689b81da8b6cc7b -Block 0022 [ 19]: 5b14400973fb7d4e -Block 0022 [ 20]: 94a2733e6461bf20 -Block 0022 [ 21]: f2b7d10b078450bf -Block 0022 [ 22]: 69f891c8b44849fa -Block 0022 [ 23]: adcc4aa0504c18e8 -Block 0022 [ 24]: bf56349a07bc26e6 -Block 0022 [ 25]: 1693eb4a1a011bab -Block 0022 [ 26]: 6b918c066f8c9886 -Block 0022 [ 27]: 7c74b51fd5003283 -Block 0022 [ 28]: cd33fc82717ef356 -Block 0022 [ 29]: 9be3279650ef3317 -Block 0022 [ 30]: 1636d1c49d3d8bb8 -Block 0022 [ 31]: d4c61b5e73e94a51 -Block 0022 [ 32]: d3834f906c63ae8a -Block 0022 [ 33]: 0729d1c26cd9665e -Block 0022 [ 34]: 0a8161ec2c96e248 -Block 0022 [ 35]: c83174338be92fde -Block 0022 [ 36]: 0431c9b4e21fa8f4 -Block 0022 [ 37]: 5e0a8a900923b805 -Block 0022 [ 38]: 8291af7cc00969ab -Block 0022 [ 39]: 11112b26e731e5a7 -Block 0022 [ 40]: e06428d5143e1bd6 -Block 0022 [ 41]: 2c12d27d4339701b -Block 0022 [ 42]: 072bfc5abe95f12e -Block 0022 [ 43]: 495f489c8045a96c -Block 0022 [ 44]: ef037b259d652793 -Block 0022 [ 45]: 76e13c91d34dd109 -Block 0022 [ 46]: 27c82183818246c5 -Block 0022 [ 47]: f767637242bee843 -Block 0022 [ 48]: f901c0738c648b8e -Block 0022 [ 49]: 96a2184fb86c7895 -Block 0022 [ 50]: bd7fb979f668146f -Block 0022 [ 51]: 36dd269c0380ed7c -Block 0022 [ 52]: 24511c91ad9e13b6 -Block 0022 [ 53]: 70e978c71bc99f9a -Block 0022 [ 54]: 5ea1a65b5cebc7c9 -Block 0022 [ 55]: edc11a6b51c5cd1e -Block 0022 [ 56]: 780ada000e671454 -Block 0022 [ 57]: 119cd1b73129ac78 -Block 0022 [ 58]: 3178d12be1db151e -Block 0022 [ 59]: ce6742aa5b3f70be -Block 0022 [ 60]: 4fc9591f439bba56 -Block 0022 [ 61]: d422a0643532cca6 -Block 0022 [ 62]: 1852782dcc6ab49b -Block 0022 [ 63]: caad088aeb0fc18b -Block 0022 [ 64]: b305da56b3fc0e06 -Block 0022 [ 65]: 809d79c7bf612db4 -Block 0022 [ 66]: 37082bf7a806431a -Block 0022 [ 67]: 63a7d2e4d19e97bd -Block 0022 [ 68]: b5962ee6c2321441 -Block 0022 [ 69]: db1776121fa5afe6 -Block 0022 [ 70]: 1c53ad44ab3643b6 -Block 0022 [ 71]: 5f873f6632e08c98 -Block 0022 [ 72]: 4c20777b04117596 -Block 0022 [ 73]: ba04e67acfa757cf -Block 0022 [ 74]: c1dbca772fe70d02 -Block 0022 [ 75]: 94ade1780a3edf02 -Block 0022 [ 76]: 288d7b3743d4e61f -Block 0022 [ 77]: 9b055d1193eb5291 -Block 0022 [ 78]: 0ec0e7c91a4aaa92 -Block 0022 [ 79]: a34de8d02873eb79 -Block 0022 [ 80]: 180f8fbdb0a4cc53 -Block 0022 [ 81]: 899c5bcc0ab9f829 -Block 0022 [ 82]: 641dc8e4a42347d8 -Block 0022 [ 83]: 37397c3696b512d2 -Block 0022 [ 84]: 171da4bc79dd8334 -Block 0022 [ 85]: e778f4ce24bdcc9a -Block 0022 [ 86]: 07ed3b0c74a1cff6 -Block 0022 [ 87]: eb774f9bd5d3a786 -Block 0022 [ 88]: 7ecc8df8de9b010e -Block 0022 [ 89]: 4bc8ff96cb6c1075 -Block 0022 [ 90]: 4e87e8d5b103a61c -Block 0022 [ 91]: 6970f27c0119652b -Block 0022 [ 92]: 4dd0ec5ee21849e5 -Block 0022 [ 93]: c1605b97fb688038 -Block 0022 [ 94]: 628a8cd70fbc14ec -Block 0022 [ 95]: fcf1558cb6d49aba -Block 0022 [ 96]: bda88d1a7603641f -Block 0022 [ 97]: c57e868e6e0b3eb5 -Block 0022 [ 98]: d6209eb6dc713428 -Block 0022 [ 99]: 1941dbe12465838f -Block 0022 [100]: d93ade4fa7c6ed41 -Block 0022 [101]: c9035a14343aa4c3 -Block 0022 [102]: 3916d1588daaa456 -Block 0022 [103]: 7f2220f99db61237 -Block 0022 [104]: 170fc02232581fb8 -Block 0022 [105]: ed832e589ccc12f7 -Block 0022 [106]: 83304d94de7f62c3 -Block 0022 [107]: d668470108f6fe2d -Block 0022 [108]: d25bc5e58f55894f -Block 0022 [109]: 40844e9c014682e2 -Block 0022 [110]: aecd9fee20958744 -Block 0022 [111]: b6ce492e71f31e6b -Block 0022 [112]: 456975f1da0a7502 -Block 0022 [113]: 7fe09228d49664bb -Block 0022 [114]: 004c96474ee60f41 -Block 0022 [115]: 6e727e5c490ea0fb -Block 0022 [116]: e2d8a78f06ec4e3e -Block 0022 [117]: 35e193e5480740e4 -Block 0022 [118]: dae2a930e3764785 -Block 0022 [119]: 4e034457389b8366 -Block 0022 [120]: 19a58f91fcb3ddff -Block 0022 [121]: 3a62f251e411e180 -Block 0022 [122]: 5c669a8f9a95a0e6 -Block 0022 [123]: ee7deb9f94a0865e -Block 0022 [124]: c8d5b909868f1e4e -Block 0022 [125]: 7d0bfb7632800a9b -Block 0022 [126]: 1a88e866ade9002b -Block 0022 [127]: 079029262e56f903 -Block 0023 [ 0]: c15a8fc42b27f642 -Block 0023 [ 1]: e03a8e8631d2b5bb -Block 0023 [ 2]: 60676b51a501fd20 -Block 0023 [ 3]: 70363f1f5d0982e7 -Block 0023 [ 4]: 6e64ad1dba37c597 -Block 0023 [ 5]: 077ec82bd054088a -Block 0023 [ 6]: 5b7c4ddd1228e337 -Block 0023 [ 7]: e2447d5fe98ef4a1 -Block 0023 [ 8]: a9272395f698506e -Block 0023 [ 9]: 19674a3d25dd1c41 -Block 0023 [ 10]: 3615d79951e1ee4b -Block 0023 [ 11]: b8779be91637ea3d -Block 0023 [ 12]: 8bfd401b59f0b40b -Block 0023 [ 13]: 63d27f0efb1fbecd -Block 0023 [ 14]: 0c92f5146c1000d8 -Block 0023 [ 15]: 0b82cd63e4a90488 -Block 0023 [ 16]: f36d845ed88968e8 -Block 0023 [ 17]: e55c4a5888669a9c -Block 0023 [ 18]: e2859d86961336e7 -Block 0023 [ 19]: 09cce3cb91692d8c -Block 0023 [ 20]: d831491e7a744a7f -Block 0023 [ 21]: 845e21c8789fbe20 -Block 0023 [ 22]: 7471f20a31c0f11b -Block 0023 [ 23]: f4a98b968bbe508a -Block 0023 [ 24]: c8b373278654bd2d -Block 0023 [ 25]: f5b7753a582847fd -Block 0023 [ 26]: c6c6833fa454822b -Block 0023 [ 27]: 60a96d2b60ff8110 -Block 0023 [ 28]: 740095523a202d0d -Block 0023 [ 29]: ccd5618264c2c7d7 -Block 0023 [ 30]: 26acdbd4c51053bc -Block 0023 [ 31]: 00cee5634151956e -Block 0023 [ 32]: 6468ca3bbf126e1e -Block 0023 [ 33]: 4e0ecb735bac1923 -Block 0023 [ 34]: 058fd5d9faa97acb -Block 0023 [ 35]: b985441f8cd0aea2 -Block 0023 [ 36]: 98db7e03c4b4fa5f -Block 0023 [ 37]: fce6c028c40d31d1 -Block 0023 [ 38]: bd46a1812c2d9989 -Block 0023 [ 39]: b7b16f5a4e5a4e46 -Block 0023 [ 40]: 1620f3704a2646dc -Block 0023 [ 41]: ef6c5ecffbba17d2 -Block 0023 [ 42]: 3ad6d21b5820df63 -Block 0023 [ 43]: 5513dac83bbb0253 -Block 0023 [ 44]: c3a976704657237a -Block 0023 [ 45]: d237eb3dc895af8d -Block 0023 [ 46]: 6889cf8777a35680 -Block 0023 [ 47]: 16634fd85637e778 -Block 0023 [ 48]: f16e9eec717fc4a9 -Block 0023 [ 49]: 4e317adaefc26b67 -Block 0023 [ 50]: 85971efb7c005aed -Block 0023 [ 51]: 88bb12c5e3d8cf61 -Block 0023 [ 52]: 677ab5233b01fba4 -Block 0023 [ 53]: b0010729c7615307 -Block 0023 [ 54]: 20b7ecf44ac319a9 -Block 0023 [ 55]: eef793b98a7e61fd -Block 0023 [ 56]: 85b60099f6d0bfa5 -Block 0023 [ 57]: 9ef45c3df475e8da -Block 0023 [ 58]: a0c4e30b646b34f2 -Block 0023 [ 59]: b74229c3f8f8f116 -Block 0023 [ 60]: 6b64b642b55f4b77 -Block 0023 [ 61]: 084ff048b1ab04d3 -Block 0023 [ 62]: d375965de7bbff82 -Block 0023 [ 63]: 57786d15edce08a2 -Block 0023 [ 64]: ce78982e90708e15 -Block 0023 [ 65]: b0e39ed6c7402cc2 -Block 0023 [ 66]: 3586998fe0495f3c -Block 0023 [ 67]: 60fdadfb02cb9a8f -Block 0023 [ 68]: bb58aa898c65a14d -Block 0023 [ 69]: f17213260e0fad9a -Block 0023 [ 70]: b42b62935550b400 -Block 0023 [ 71]: 5543e77410120d07 -Block 0023 [ 72]: 8d486269dd536011 -Block 0023 [ 73]: bd4f1af4698e9cc7 -Block 0023 [ 74]: 78abd3f2e0ad6851 -Block 0023 [ 75]: 0f382abc61fd54b8 -Block 0023 [ 76]: c9fcaa40dd997fb5 -Block 0023 [ 77]: 2818fe972f636137 -Block 0023 [ 78]: dee6cde471d08bf0 -Block 0023 [ 79]: 61e74d63ce506e93 -Block 0023 [ 80]: 4119c8d5cc111e68 -Block 0023 [ 81]: b6460571b021c77a -Block 0023 [ 82]: 3682f1268469be47 -Block 0023 [ 83]: da1041b9b821500f -Block 0023 [ 84]: 42c3f149c0939593 -Block 0023 [ 85]: 2eb6fe95cd7f8f7e -Block 0023 [ 86]: 30a28f6884baf140 -Block 0023 [ 87]: fb4517a8f6f314f0 -Block 0023 [ 88]: 159d8c247a4e0906 -Block 0023 [ 89]: 91843a594cfe15cd -Block 0023 [ 90]: 9a3f9e8078b72dc3 -Block 0023 [ 91]: dbe9713f47902a9a -Block 0023 [ 92]: aa2b6e73ba3c3d0c -Block 0023 [ 93]: 451ceb1b888cbe16 -Block 0023 [ 94]: 4db42dc635c0bb34 -Block 0023 [ 95]: 1828653d95f4341b -Block 0023 [ 96]: c1299eff4a5f8047 -Block 0023 [ 97]: f897b2a772822f5b -Block 0023 [ 98]: 33fd9d8a58670737 -Block 0023 [ 99]: ce47236b3e468a36 -Block 0023 [100]: 34cd0caf09c05c00 -Block 0023 [101]: 8c91a2667a59ef7a -Block 0023 [102]: 7c89fea7f780a662 -Block 0023 [103]: dbfd76736779b2c3 -Block 0023 [104]: 1f861037bd0abc1b -Block 0023 [105]: e5d868458e43dbce -Block 0023 [106]: 1703c8c3c5f122eb -Block 0023 [107]: 47168a277b482e6f -Block 0023 [108]: 239421a6e9376e4b -Block 0023 [109]: fab879b198eac843 -Block 0023 [110]: acc5f29c207f96c3 -Block 0023 [111]: 5e0459b6cad2017d -Block 0023 [112]: d03eeb4f2ce559ec -Block 0023 [113]: e74ff3674d169a0b -Block 0023 [114]: 26076994b57ff424 -Block 0023 [115]: 38dbf73a4d1fe5a8 -Block 0023 [116]: a3b7dc4a267c7521 -Block 0023 [117]: 583d4e15f7e10c9f -Block 0023 [118]: 38cb311dbc767883 -Block 0023 [119]: d67412648b62d999 -Block 0023 [120]: a132b14a24350528 -Block 0023 [121]: 8dc4bf4893d3a381 -Block 0023 [122]: 07254e51d81a9dc0 -Block 0023 [123]: 694e27e2bca68da0 -Block 0023 [124]: 2733cbe18458a93e -Block 0023 [125]: 17133c2fc328d2d8 -Block 0023 [126]: dcc6852dbac50cdc -Block 0023 [127]: d9989bf3ec285e44 -Block 0024 [ 0]: bafc20be127345f7 -Block 0024 [ 1]: a0e105b58755375b -Block 0024 [ 2]: 1d6a71416ff67391 -Block 0024 [ 3]: 9e839dfce45172b1 -Block 0024 [ 4]: d33112aaed4852e1 -Block 0024 [ 5]: 0622aee69fcb9e97 -Block 0024 [ 6]: 5e88992880040a2f -Block 0024 [ 7]: 852b8867310e3211 -Block 0024 [ 8]: e428be753777967d -Block 0024 [ 9]: ddeef681b468aad6 -Block 0024 [ 10]: b847fd00ea092021 -Block 0024 [ 11]: fdf2d32288baece4 -Block 0024 [ 12]: bb1ecc42e2fc594c -Block 0024 [ 13]: b610bf428a5bee66 -Block 0024 [ 14]: 48683a33fe4e565b -Block 0024 [ 15]: 67416c79b45c527f -Block 0024 [ 16]: d54025dca586097a -Block 0024 [ 17]: 6903b9074305a44a -Block 0024 [ 18]: 515a74f3004d1a83 -Block 0024 [ 19]: 5e247be7152ab011 -Block 0024 [ 20]: f89524bfacae7eb7 -Block 0024 [ 21]: bf1419b938b3ebc2 -Block 0024 [ 22]: ac612be97e2535b7 -Block 0024 [ 23]: 8b4b7e35ed62efed -Block 0024 [ 24]: c4db0666691de89c -Block 0024 [ 25]: da746bb3a0ea9036 -Block 0024 [ 26]: 648e0d474d9d5edf -Block 0024 [ 27]: d6cc1c7b9481a978 -Block 0024 [ 28]: c03ead602a6f125c -Block 0024 [ 29]: 52d1e2fba64a4c05 -Block 0024 [ 30]: beac5772e0792903 -Block 0024 [ 31]: 1a0fce7643d06795 -Block 0024 [ 32]: 9cf9c86abc978ef6 -Block 0024 [ 33]: 14edb2fb446834ea -Block 0024 [ 34]: 1aff2b0a0561082e -Block 0024 [ 35]: 1bdc3688d8a49501 -Block 0024 [ 36]: 25aa17332f0a1d54 -Block 0024 [ 37]: 493d2af91f4de279 -Block 0024 [ 38]: 93911a09eab9d742 -Block 0024 [ 39]: 76b476f9d874e180 -Block 0024 [ 40]: 1adb25a2cec03ab4 -Block 0024 [ 41]: 8527203b85b693c3 -Block 0024 [ 42]: 79f3cb77c155e8c2 -Block 0024 [ 43]: 0574b0c4b99985c6 -Block 0024 [ 44]: af18733188176aeb -Block 0024 [ 45]: b42cc646d1fe6639 -Block 0024 [ 46]: 6e4ddc05a0aaaf15 -Block 0024 [ 47]: bc4478c9716532b7 -Block 0024 [ 48]: 4fcbc6dc5f29f830 -Block 0024 [ 49]: ec47edc42c40a226 -Block 0024 [ 50]: 92da9c7bd9b3241f -Block 0024 [ 51]: 8aa095b9fab99b90 -Block 0024 [ 52]: 9cf9d0b635369605 -Block 0024 [ 53]: 8c94a54ec3d3d9db -Block 0024 [ 54]: d51d82e1e5647069 -Block 0024 [ 55]: f5c340c32eeb76f7 -Block 0024 [ 56]: fa5902c7acdc4f3b -Block 0024 [ 57]: f46b2cf8e9d44be0 -Block 0024 [ 58]: 6706a878e07af770 -Block 0024 [ 59]: 6da1f034bef87d13 -Block 0024 [ 60]: 799e0a83fd490d4c -Block 0024 [ 61]: a354e01a2ad75bcd -Block 0024 [ 62]: c27358c4ac491b7d -Block 0024 [ 63]: 18ba545379367429 -Block 0024 [ 64]: 1c1c5042b0d7a965 -Block 0024 [ 65]: 6d92f7e87e591c69 -Block 0024 [ 66]: ad72b6c6fbae77a8 -Block 0024 [ 67]: 20cc0e1d83937562 -Block 0024 [ 68]: b1c5e36ea64465d8 -Block 0024 [ 69]: aef9474384eae537 -Block 0024 [ 70]: 96c55972051f16bd -Block 0024 [ 71]: f6b9fbd4c1770049 -Block 0024 [ 72]: 00063b28ba569959 -Block 0024 [ 73]: 15034e11892d2b53 -Block 0024 [ 74]: 49c65e51d1c77d3e -Block 0024 [ 75]: c6cbe3c13677dbb9 -Block 0024 [ 76]: c9278514eb23f973 -Block 0024 [ 77]: 0418e33c3d1d1d67 -Block 0024 [ 78]: eaa9823ac8ef9f1d -Block 0024 [ 79]: b808887eee920d4b -Block 0024 [ 80]: 2762abdb3a826d18 -Block 0024 [ 81]: f6bd043987950f92 -Block 0024 [ 82]: 5e953a434ff2db87 -Block 0024 [ 83]: 5357c86ca298191a -Block 0024 [ 84]: 9516f3592e6e9c8a -Block 0024 [ 85]: 8f9689fc2c705eca -Block 0024 [ 86]: 41c091bd3bed62a9 -Block 0024 [ 87]: 8f5b0f2f7bdbf769 -Block 0024 [ 88]: 728639c0f6ef9b1d -Block 0024 [ 89]: 08aede8636e79efd -Block 0024 [ 90]: a9fe4536a61be7c9 -Block 0024 [ 91]: 014e422b37f869dd -Block 0024 [ 92]: 64d1e18d22d2928f -Block 0024 [ 93]: f0106d49826a34bd -Block 0024 [ 94]: 864bb5eda4a35c1f -Block 0024 [ 95]: bb8a9778ba354712 -Block 0024 [ 96]: d7875d3c0b0ab74e -Block 0024 [ 97]: 69038303e1460b09 -Block 0024 [ 98]: a6ca05dd54aef2ee -Block 0024 [ 99]: 728d835ab505d6bc -Block 0024 [100]: f1be387c80c03e4b -Block 0024 [101]: 2aac86175bda747c -Block 0024 [102]: d288c4d7161502bc -Block 0024 [103]: b0e42aa7ecbd6572 -Block 0024 [104]: 52e77db04ece14f7 -Block 0024 [105]: 6adb74b3d56f09a8 -Block 0024 [106]: 2a6452c901b43573 -Block 0024 [107]: 1056bf56e286e0b7 -Block 0024 [108]: c928aeb275c4b7fa -Block 0024 [109]: 389b14bde4c4d382 -Block 0024 [110]: 9965960db1954391 -Block 0024 [111]: b058a195f70320b4 -Block 0024 [112]: 7619ac5501f4432c -Block 0024 [113]: 586c2db0440f1c83 -Block 0024 [114]: 29e5c6289766490f -Block 0024 [115]: c53c12c1b8dd4d7a -Block 0024 [116]: 1e41341416298856 -Block 0024 [117]: d0a7ae5578f472ce -Block 0024 [118]: b65da50b01d5b8a5 -Block 0024 [119]: 83ec23e27b3eec21 -Block 0024 [120]: ddb5cbc028b735cb -Block 0024 [121]: 4884c6452683f7d5 -Block 0024 [122]: 6cd0174e00017e97 -Block 0024 [123]: fd24844d4d331560 -Block 0024 [124]: 816482d8427a8e64 -Block 0024 [125]: fed0e63ad09481e2 -Block 0024 [126]: 18b61579f735a700 -Block 0024 [127]: fee0bb721ee1ecbb -Block 0025 [ 0]: 218f7d49738f92c6 -Block 0025 [ 1]: 7c43c89d034788a4 -Block 0025 [ 2]: f5d1f2d8a8920f06 -Block 0025 [ 3]: 299f14e7ed5496cc -Block 0025 [ 4]: 1cbea1c1b52d4256 -Block 0025 [ 5]: b2592bd426bc03e0 -Block 0025 [ 6]: ca33a1cc73e76dc3 -Block 0025 [ 7]: 15b633ac2cd4b284 -Block 0025 [ 8]: 7b346972a603745c -Block 0025 [ 9]: ae49e15247e0539c -Block 0025 [ 10]: c39719dde95ec973 -Block 0025 [ 11]: 791d01640218069e -Block 0025 [ 12]: 9e12cde9bc52bbe4 -Block 0025 [ 13]: c86c7f806ea55df1 -Block 0025 [ 14]: 6b61f785e2d65f69 -Block 0025 [ 15]: cb37008fc82db79e -Block 0025 [ 16]: 6a60abdb40faf82a -Block 0025 [ 17]: 8cf923b935d9bcf5 -Block 0025 [ 18]: 76825bb43adce337 -Block 0025 [ 19]: babbde01d9655fb1 -Block 0025 [ 20]: f3d78eb5ad275d05 -Block 0025 [ 21]: d2870cf57340c55e -Block 0025 [ 22]: 91af1fc8c89689fc -Block 0025 [ 23]: 1a5433e50b5e05a8 -Block 0025 [ 24]: f457295bfa093ddc -Block 0025 [ 25]: 1957226241d244e1 -Block 0025 [ 26]: 36cc9305fd37b4e3 -Block 0025 [ 27]: 4aa1aac99f568863 -Block 0025 [ 28]: 941674cf76af7190 -Block 0025 [ 29]: 1b2c8add189d17ee -Block 0025 [ 30]: 562fd164598ba90c -Block 0025 [ 31]: 90d89a9e2623318f -Block 0025 [ 32]: 9ff0a6747fc96454 -Block 0025 [ 33]: 44b54df3ab1aead2 -Block 0025 [ 34]: 509e4c640941d270 -Block 0025 [ 35]: d9b30bff5ed623b2 -Block 0025 [ 36]: b716592c68837232 -Block 0025 [ 37]: cd8a95452b6aa6e1 -Block 0025 [ 38]: df5a3d86c0052718 -Block 0025 [ 39]: 2cae0d438b45a92b -Block 0025 [ 40]: 9bb50165d3b673e9 -Block 0025 [ 41]: 090a71cc136ec229 -Block 0025 [ 42]: 3bfc57430d7d2475 -Block 0025 [ 43]: b21d732e80efc1e1 -Block 0025 [ 44]: 569d99152241f5cb -Block 0025 [ 45]: 5bee8181547575e7 -Block 0025 [ 46]: 360a0f24e67e378b -Block 0025 [ 47]: 0a444cb4f1287e92 -Block 0025 [ 48]: f8fe73d971ad4e15 -Block 0025 [ 49]: 7809a6c41558690c -Block 0025 [ 50]: 14c554cbb8d87a9f -Block 0025 [ 51]: 4bf94d2f59a1b885 -Block 0025 [ 52]: d819171c43d2c448 -Block 0025 [ 53]: b9bad5c60bfa27b5 -Block 0025 [ 54]: 2f4ec140540ba3cc -Block 0025 [ 55]: 5e0b06feb534cb6b -Block 0025 [ 56]: 55eef994d053a92b -Block 0025 [ 57]: 3c3efb4ca90f9aa2 -Block 0025 [ 58]: 4ac1b476371364e9 -Block 0025 [ 59]: cfb1ac1ffb41f16f -Block 0025 [ 60]: 2e47b513102c6e6e -Block 0025 [ 61]: baf2a3f185deefc1 -Block 0025 [ 62]: 9688648864cb8ddb -Block 0025 [ 63]: 0726d0615a1a85b5 -Block 0025 [ 64]: 3d7383c8adfb85a7 -Block 0025 [ 65]: dac839ce44c2b275 -Block 0025 [ 66]: 0954eed70bd6fda5 -Block 0025 [ 67]: b347e872bdcd43da -Block 0025 [ 68]: cc040228c23d0e6e -Block 0025 [ 69]: 0de8b3f517319c2a -Block 0025 [ 70]: 50eff13db15ff965 -Block 0025 [ 71]: 5b5e495005b6e3a4 -Block 0025 [ 72]: ea83a832b036de55 -Block 0025 [ 73]: 4b92d114ff4c8a85 -Block 0025 [ 74]: 352986db66e2c6f2 -Block 0025 [ 75]: 5a5b775b10bd3414 -Block 0025 [ 76]: 7840ea80a027bde7 -Block 0025 [ 77]: f4365b7239cf5007 -Block 0025 [ 78]: 24fda471b099ae21 -Block 0025 [ 79]: 72b184a1ddc10267 -Block 0025 [ 80]: 362aa580b6b44a23 -Block 0025 [ 81]: 2249ca6bb3512afa -Block 0025 [ 82]: 9d86d882d57b1214 -Block 0025 [ 83]: 09cd175d74396827 -Block 0025 [ 84]: e9b1152be6185310 -Block 0025 [ 85]: b6fa99c7d3f6e258 -Block 0025 [ 86]: bb1157a075afefb8 -Block 0025 [ 87]: ecfad80c123ddcf4 -Block 0025 [ 88]: f4c5f6049360c7ed -Block 0025 [ 89]: 9b4a4dcb7b95af93 -Block 0025 [ 90]: 6af0da4d6ea78de5 -Block 0025 [ 91]: d486be8a57928782 -Block 0025 [ 92]: 2d3747216952a042 -Block 0025 [ 93]: 7480bdbc4fc25e99 -Block 0025 [ 94]: 7caea647a8b0f52b -Block 0025 [ 95]: a759ceef02e325d2 -Block 0025 [ 96]: a2f14256abd2a57f -Block 0025 [ 97]: 101ddae96091e57e -Block 0025 [ 98]: e810140f913206f3 -Block 0025 [ 99]: edb6506015ec4e5e -Block 0025 [100]: 114dc2565158243a -Block 0025 [101]: 4e9d15bdf88ad4e4 -Block 0025 [102]: ece4b8ff68cea6a2 -Block 0025 [103]: f0ebe4d86b4b9316 -Block 0025 [104]: 8355940d8efe6fc4 -Block 0025 [105]: ea8a6355cca5d9d3 -Block 0025 [106]: 65aca3bcc4d4a292 -Block 0025 [107]: b4ad427852001777 -Block 0025 [108]: 85639d301162a27f -Block 0025 [109]: 759e87e84b2f7c42 -Block 0025 [110]: ee1d3820c4f58ee3 -Block 0025 [111]: 88688a321ffa4610 -Block 0025 [112]: 9d4e4c09d07e6414 -Block 0025 [113]: 21cc042a64f6f219 -Block 0025 [114]: 934eb23f70839cdc -Block 0025 [115]: 52b37f2b7eef3a7a -Block 0025 [116]: 5f6642d0bcc72f28 -Block 0025 [117]: 7bc04881f38f6a04 -Block 0025 [118]: 37fdffd62c6fe429 -Block 0025 [119]: eb893917d8365d52 -Block 0025 [120]: 7bff88282c1cc77f -Block 0025 [121]: 1a877bda6afc8cee -Block 0025 [122]: f6261537899eb64f -Block 0025 [123]: 0631a65eda39a9cb -Block 0025 [124]: 4ef993405ba60811 -Block 0025 [125]: 62400e9a554324eb -Block 0025 [126]: 46a1f4e5f7d44185 -Block 0025 [127]: 98628c54e42825e7 -Block 0026 [ 0]: 3c6983afbba804d5 -Block 0026 [ 1]: 6711c9d79fddc321 -Block 0026 [ 2]: 2391ab06e29b8e47 -Block 0026 [ 3]: 357cda706f696cf8 -Block 0026 [ 4]: 7de77eb985e3e694 -Block 0026 [ 5]: 0b1cca5039a0bcf2 -Block 0026 [ 6]: 02b63e6bf9d96807 -Block 0026 [ 7]: 19d9ca3eb6108b20 -Block 0026 [ 8]: fa46aba3dcc57351 -Block 0026 [ 9]: 261914f924334ffb -Block 0026 [ 10]: aa184f31ff808f1f -Block 0026 [ 11]: f70c6320224698db -Block 0026 [ 12]: 20afaddd294fb3ec -Block 0026 [ 13]: 826874f33b12c683 -Block 0026 [ 14]: 036a6550f020d424 -Block 0026 [ 15]: f64caa528536a1b7 -Block 0026 [ 16]: eff5a71792f55f01 -Block 0026 [ 17]: 48f7424b0df5c46f -Block 0026 [ 18]: 01c1ade0611d07f1 -Block 0026 [ 19]: c89280c83156add8 -Block 0026 [ 20]: 258f1b61fc7f6b11 -Block 0026 [ 21]: ed5c950819eace58 -Block 0026 [ 22]: 2eeb9d215f9e1d41 -Block 0026 [ 23]: fae0b2678e3c8a67 -Block 0026 [ 24]: 739195ac32a0e262 -Block 0026 [ 25]: 6d71718902f627aa -Block 0026 [ 26]: a8cd44e2ec39edae -Block 0026 [ 27]: d8cc82a9d8334dee -Block 0026 [ 28]: 3e0bbab36c2d4b13 -Block 0026 [ 29]: 7173f42e8fb7d186 -Block 0026 [ 30]: aa49cc111f609407 -Block 0026 [ 31]: 86b5d32d57254d39 -Block 0026 [ 32]: c1c3ef5753af595a -Block 0026 [ 33]: 136cb058821065a2 -Block 0026 [ 34]: 0974f4cf5a77a026 -Block 0026 [ 35]: c5e39f3305aab8b1 -Block 0026 [ 36]: 10821d1445291cba -Block 0026 [ 37]: 81d371c00c1b4c08 -Block 0026 [ 38]: 85c8c719277f3965 -Block 0026 [ 39]: c590db7df5a36675 -Block 0026 [ 40]: 545f3dff15b55c1e -Block 0026 [ 41]: e980768ad45c12ef -Block 0026 [ 42]: 3be75af231bac2ca -Block 0026 [ 43]: 95ec39119f1250f2 -Block 0026 [ 44]: bbff859c5c9f89bb -Block 0026 [ 45]: 142a0680ef5b5f16 -Block 0026 [ 46]: 27facd74fffda870 -Block 0026 [ 47]: 55dd1b22cc90f735 -Block 0026 [ 48]: a12d88ec60c512fd -Block 0026 [ 49]: a135793f811d6111 -Block 0026 [ 50]: 34c6fa055bdc63e9 -Block 0026 [ 51]: cb40ef918c0a282f -Block 0026 [ 52]: 0a9042c429b52e20 -Block 0026 [ 53]: 8025ec3592aaac36 -Block 0026 [ 54]: e6fe903a66fe4e3f -Block 0026 [ 55]: e31655f738fd1ce8 -Block 0026 [ 56]: 9ee25a076d5f41cf -Block 0026 [ 57]: cde79d1536830e67 -Block 0026 [ 58]: 7721d1919a0ff9b9 -Block 0026 [ 59]: cc495c11c8639a44 -Block 0026 [ 60]: 5b6291631d8b1728 -Block 0026 [ 61]: 3f5037b0c8cbc91e -Block 0026 [ 62]: b9b6d9c18539e66a -Block 0026 [ 63]: 366ed0f240bf7120 -Block 0026 [ 64]: 9b201c10a4353d2f -Block 0026 [ 65]: 359c2842aa330468 -Block 0026 [ 66]: a3fb5a76d20bacd3 -Block 0026 [ 67]: a18496fc163bc0e9 -Block 0026 [ 68]: bbf9ca616287297c -Block 0026 [ 69]: 939beb6456f35b3c -Block 0026 [ 70]: 4e0f82cc86bfd22b -Block 0026 [ 71]: e966d50cc7df0f87 -Block 0026 [ 72]: e517c5470cea1c0c -Block 0026 [ 73]: c112ddf352579302 -Block 0026 [ 74]: a63420c0997f61e3 -Block 0026 [ 75]: 3926f92cdfc55124 -Block 0026 [ 76]: 88ec54e147108123 -Block 0026 [ 77]: 7e828e3c0fc07af4 -Block 0026 [ 78]: bdfe6fad95995ffd -Block 0026 [ 79]: b4919dca6d54d29b -Block 0026 [ 80]: 2a405f1adf13a606 -Block 0026 [ 81]: 404cc4b6e4adf8df -Block 0026 [ 82]: 15bf36bdcab5acb9 -Block 0026 [ 83]: cb0884b41dd7cbf2 -Block 0026 [ 84]: 96af5406db7d487c -Block 0026 [ 85]: c8074d30dd0c86ba -Block 0026 [ 86]: 7d1c52344ed5ecf2 -Block 0026 [ 87]: 5826b80aaa041c09 -Block 0026 [ 88]: aac72ffdfc5b0024 -Block 0026 [ 89]: 2077fe5a631f42a6 -Block 0026 [ 90]: 9fd9e717bcc0dfb8 -Block 0026 [ 91]: 69de97e2bd116811 -Block 0026 [ 92]: ed51dcd989772100 -Block 0026 [ 93]: 88c57a4fd02c9c4e -Block 0026 [ 94]: f5162652fd844d77 -Block 0026 [ 95]: d645ec63828fb2cb -Block 0026 [ 96]: f8bac28ed154957d -Block 0026 [ 97]: 9290f00d8a17bdb2 -Block 0026 [ 98]: e9833bb57c692f55 -Block 0026 [ 99]: db21a9b32401012a -Block 0026 [100]: 162b6d8c35201524 -Block 0026 [101]: 75ade54377c77238 -Block 0026 [102]: b8d7284df781f3d0 -Block 0026 [103]: 303bd658599f0e6c -Block 0026 [104]: 0232876bafc7bfd9 -Block 0026 [105]: 920c9811b0077634 -Block 0026 [106]: fcab0361efef9ff2 -Block 0026 [107]: ab8519c253a00f4a -Block 0026 [108]: da9867be15d00f19 -Block 0026 [109]: c82b7fe39d4017f2 -Block 0026 [110]: 583847c2f8775b22 -Block 0026 [111]: a303262ed2cd1159 -Block 0026 [112]: ccaf60e46589054f -Block 0026 [113]: 5bbb7b1b4cb3111c -Block 0026 [114]: 29eb66dd0bf01df5 -Block 0026 [115]: e8cf9b1056366920 -Block 0026 [116]: 0399042b521c3626 -Block 0026 [117]: c37fb9108d6c0d0a -Block 0026 [118]: 913c845e777489f5 -Block 0026 [119]: 918d92d0b7809530 -Block 0026 [120]: 0c36ee266601a21b -Block 0026 [121]: f2d1cd576aed1bb5 -Block 0026 [122]: 7b58b466d3fee7df -Block 0026 [123]: d5158fb67955e952 -Block 0026 [124]: 6ef3cfa7180c9bc1 -Block 0026 [125]: fa9acd56b8400839 -Block 0026 [126]: bc82d8d53d9ecfda -Block 0026 [127]: 5761bdea1282864c -Block 0027 [ 0]: 7d3c9a0ec3269b48 -Block 0027 [ 1]: 6686eb93fbda0d77 -Block 0027 [ 2]: cb7ee69fe719e3b4 -Block 0027 [ 3]: 54ae42cd9118070c -Block 0027 [ 4]: 62164ca70764a185 -Block 0027 [ 5]: 185e261947601d34 -Block 0027 [ 6]: 092bb74b591bd0ca -Block 0027 [ 7]: 1279028f9bf6f93d -Block 0027 [ 8]: 916e719df2543a93 -Block 0027 [ 9]: 3d38f8078087f328 -Block 0027 [ 10]: 09087bfdf5ba3af2 -Block 0027 [ 11]: de613c261f43a1ad -Block 0027 [ 12]: dd194937c3e7c7c7 -Block 0027 [ 13]: a354a8be75a53c84 -Block 0027 [ 14]: 58e61315e8799749 -Block 0027 [ 15]: 3790f1889691087d -Block 0027 [ 16]: 9c109cbb13bd0946 -Block 0027 [ 17]: 69d2a3cb24d725da -Block 0027 [ 18]: 66edb597ec53292d -Block 0027 [ 19]: a9be38befecc0584 -Block 0027 [ 20]: 96d0731c9f242696 -Block 0027 [ 21]: e3ba1585a32dce68 -Block 0027 [ 22]: 5a0484ed5038971b -Block 0027 [ 23]: 78bcdb43bf93d164 -Block 0027 [ 24]: 744576d9c3c30082 -Block 0027 [ 25]: 64f778f3189c1cff -Block 0027 [ 26]: f8eb15da12c637e1 -Block 0027 [ 27]: fcbebcbe50a21695 -Block 0027 [ 28]: 970e19c4f0521beb -Block 0027 [ 29]: bb5af6ec3a7ed2d1 -Block 0027 [ 30]: 096904e407e41cb7 -Block 0027 [ 31]: 796ef5112b7a1edd -Block 0027 [ 32]: db1a153e66ae58ea -Block 0027 [ 33]: b1f77c17cee5e733 -Block 0027 [ 34]: 20285245122afb59 -Block 0027 [ 35]: 4df42e52389d2aff -Block 0027 [ 36]: 201f9602a2014992 -Block 0027 [ 37]: 65f0cf04f5981313 -Block 0027 [ 38]: 0943da03f0840c17 -Block 0027 [ 39]: 2eced3376b8d7e95 -Block 0027 [ 40]: 5d2c25c04a6527e3 -Block 0027 [ 41]: 9d8e3bb1b210e5b4 -Block 0027 [ 42]: 1d552706ac628676 -Block 0027 [ 43]: d24b7fbd453c47b9 -Block 0027 [ 44]: 94a3efedba376d46 -Block 0027 [ 45]: c6cfaf61c5738603 -Block 0027 [ 46]: 6dc7dd999626802f -Block 0027 [ 47]: 679a0a330366aa5f -Block 0027 [ 48]: a588a97355f0b410 -Block 0027 [ 49]: a53c8e0722c1f2a3 -Block 0027 [ 50]: 5aaee7d200469b7b -Block 0027 [ 51]: 3aed0d73099c2bbb -Block 0027 [ 52]: 78b7a36c5ca25608 -Block 0027 [ 53]: e6b432160dcce680 -Block 0027 [ 54]: 1ba1aeff2677be69 -Block 0027 [ 55]: 3a73d1cbafe00bee -Block 0027 [ 56]: 44847a38e4ef1636 -Block 0027 [ 57]: 817c2c94824200ef -Block 0027 [ 58]: 028f8e5775dfaed1 -Block 0027 [ 59]: 0cbc774a55ab5843 -Block 0027 [ 60]: aeb5aacf73e0eb39 -Block 0027 [ 61]: 0b8433622bea4382 -Block 0027 [ 62]: 79769c5b649f1261 -Block 0027 [ 63]: 0c829d21a3e179b1 -Block 0027 [ 64]: 813f3231bba22a33 -Block 0027 [ 65]: a2416e7899d6fe8a -Block 0027 [ 66]: b6e98b7cfa6bd74b -Block 0027 [ 67]: 41bc3948470a0b96 -Block 0027 [ 68]: 69ea8fd9e284aea6 -Block 0027 [ 69]: def3afe35abbe28b -Block 0027 [ 70]: b68ea4c646fb6573 -Block 0027 [ 71]: 4fa9b31650260ae6 -Block 0027 [ 72]: 7e01fc0f2a7429d6 -Block 0027 [ 73]: 627b93dbd343caeb -Block 0027 [ 74]: f3eeae8deb82e242 -Block 0027 [ 75]: 1e851591772c1bb5 -Block 0027 [ 76]: 3c2e59c09ef5b878 -Block 0027 [ 77]: ad49c7f75f437548 -Block 0027 [ 78]: 46f34b1e7a607915 -Block 0027 [ 79]: aacf30a2e549bb4a -Block 0027 [ 80]: 5a19914c8fff5e96 -Block 0027 [ 81]: f415490e00fb30b9 -Block 0027 [ 82]: 9846376d7adcf814 -Block 0027 [ 83]: 78bbe891c9abfe1d -Block 0027 [ 84]: 7c4a0979fea67b38 -Block 0027 [ 85]: 59e586690f942554 -Block 0027 [ 86]: 0acca76f34a6d794 -Block 0027 [ 87]: 2f7b55cb6fe9390f -Block 0027 [ 88]: 7635a592209d0a11 -Block 0027 [ 89]: 7e83394274d76e07 -Block 0027 [ 90]: 6a7dc7b77fcd9ee7 -Block 0027 [ 91]: 2b97fb8c36950a71 -Block 0027 [ 92]: 1fd5a884ef569a60 -Block 0027 [ 93]: e910b6544d71b381 -Block 0027 [ 94]: de5c857dd603fd6a -Block 0027 [ 95]: 5417634f369d5986 -Block 0027 [ 96]: ba1ae13eb3352d9f -Block 0027 [ 97]: 402e1be1915906fa -Block 0027 [ 98]: 3e45c339df96d224 -Block 0027 [ 99]: a2a0c19bc60f28e2 -Block 0027 [100]: 14b5aa263f6b02ac -Block 0027 [101]: 455b8ce5effd82f1 -Block 0027 [102]: f9067ed819bfe040 -Block 0027 [103]: 34ee1496df2e9258 -Block 0027 [104]: 85132137bfd83071 -Block 0027 [105]: 274902202877e214 -Block 0027 [106]: 4df3027bdf10659e -Block 0027 [107]: 50e85dae17476d58 -Block 0027 [108]: ebd15a07c578a603 -Block 0027 [109]: 73539de46fd213d6 -Block 0027 [110]: aabf6dcb01dc066a -Block 0027 [111]: a742de72f634eecb -Block 0027 [112]: bd3e9d53c38cccbc -Block 0027 [113]: 0c6aee347a62283a -Block 0027 [114]: e8218a191cdfeba3 -Block 0027 [115]: 850cfae86fd4a736 -Block 0027 [116]: 2e9647c876dcf630 -Block 0027 [117]: 786b0a5bf8f8ed00 -Block 0027 [118]: 7d52cebe4d24c525 -Block 0027 [119]: 8dbd8532181f83a0 -Block 0027 [120]: e2003436c78933f2 -Block 0027 [121]: 6196d5c9274650f8 -Block 0027 [122]: 50e0015a9708e2c2 -Block 0027 [123]: 0df7db3f56521de7 -Block 0027 [124]: 41c4e4d30977c324 -Block 0027 [125]: fe90ec673b2a3ed5 -Block 0027 [126]: 8b894913484a96cd -Block 0027 [127]: b3ce79c030832f8b -Block 0028 [ 0]: 8001ef270631eb46 -Block 0028 [ 1]: 83416ab52ade6a20 -Block 0028 [ 2]: 2c2c2d8a6e19d701 -Block 0028 [ 3]: d8876e22d1e005e7 -Block 0028 [ 4]: 39ec3701311b6f21 -Block 0028 [ 5]: e27d91be0b0f01ea -Block 0028 [ 6]: 3a468a9921bd57d6 -Block 0028 [ 7]: e979f5210101a334 -Block 0028 [ 8]: 0fe50b2f6002dd2f -Block 0028 [ 9]: e93dccdb8c30683f -Block 0028 [ 10]: a39f7bb93d2527d7 -Block 0028 [ 11]: 43131f328e9f3257 -Block 0028 [ 12]: 3916bad309c754f5 -Block 0028 [ 13]: 01f6c6295e8f726a -Block 0028 [ 14]: 2980801f3d4d3c54 -Block 0028 [ 15]: a901be2b20bca6d9 -Block 0028 [ 16]: bd35a7f931c1bded -Block 0028 [ 17]: 27409429f88c477b -Block 0028 [ 18]: 8036cce294e86513 -Block 0028 [ 19]: 857a2229c5afedf8 -Block 0028 [ 20]: d3373ab3af5873a8 -Block 0028 [ 21]: 4066441cd77d44ed -Block 0028 [ 22]: 48f2ef97141ddf21 -Block 0028 [ 23]: 476609786badb439 -Block 0028 [ 24]: 98fe66b30b5fa4bf -Block 0028 [ 25]: 14ec3f588d97430d -Block 0028 [ 26]: 6067ae97295f88a2 -Block 0028 [ 27]: 7472170c692fec72 -Block 0028 [ 28]: abca04dcc1646c6a -Block 0028 [ 29]: 593abb9ad2fb4754 -Block 0028 [ 30]: d383c2cec2319674 -Block 0028 [ 31]: 383d630e75d111ce -Block 0028 [ 32]: aade349d6aa54022 -Block 0028 [ 33]: 6a005af570ce8a1d -Block 0028 [ 34]: f7b1a835dca0178f -Block 0028 [ 35]: 87fcdd328f68b675 -Block 0028 [ 36]: 08caa798697afc12 -Block 0028 [ 37]: dbf8280ba26bfac4 -Block 0028 [ 38]: 87ebbcd95eb62676 -Block 0028 [ 39]: 0e3c59cd8c020fdb -Block 0028 [ 40]: 2df7176c8b1ab6fd -Block 0028 [ 41]: 575bad97b70c3e66 -Block 0028 [ 42]: 323c319d2d524b44 -Block 0028 [ 43]: 368bb20d0637def3 -Block 0028 [ 44]: c4638388f45266ee -Block 0028 [ 45]: 3e437f36851a630c -Block 0028 [ 46]: 2779419dd62bdc82 -Block 0028 [ 47]: 6b8ad3cd205e4ad0 -Block 0028 [ 48]: a90e6cad3c5c2b0a -Block 0028 [ 49]: f8ae347a60d74f84 -Block 0028 [ 50]: c6c0926217b23c45 -Block 0028 [ 51]: fff3fa7d093cbb84 -Block 0028 [ 52]: 70fafbbdcb4a7ac9 -Block 0028 [ 53]: 8ab582b972cb8700 -Block 0028 [ 54]: e1fe38cfe02a0b27 -Block 0028 [ 55]: 6861f64be54a0dfc -Block 0028 [ 56]: 8e888789a129f02f -Block 0028 [ 57]: f46cd73182cd385f -Block 0028 [ 58]: e88c0c118ad7b6f3 -Block 0028 [ 59]: ca6a2cadf443f63e -Block 0028 [ 60]: 1bd7984c082c1ef6 -Block 0028 [ 61]: 49b2cc8e2d76a30f -Block 0028 [ 62]: 4eeaba2f6a5802b3 -Block 0028 [ 63]: 0c8cd49bc7463e4b -Block 0028 [ 64]: 8e97970259c37934 -Block 0028 [ 65]: 5b51d47446ba7d59 -Block 0028 [ 66]: 209bd2bfbad9f3a5 -Block 0028 [ 67]: 4933bc3073cce49a -Block 0028 [ 68]: 499abb45745240c9 -Block 0028 [ 69]: 686dec33783f389f -Block 0028 [ 70]: db53075850fa6621 -Block 0028 [ 71]: 8e2e332d929ac8fe -Block 0028 [ 72]: 12188a5b7a3191fd -Block 0028 [ 73]: b5224394b27de504 -Block 0028 [ 74]: 0a4637a76f5ceddc -Block 0028 [ 75]: 2512376fe7ac236d -Block 0028 [ 76]: d0409eee03676e53 -Block 0028 [ 77]: cf10ff014ec1119e -Block 0028 [ 78]: 8b31f8267b762c34 -Block 0028 [ 79]: c746da7b7446448f -Block 0028 [ 80]: ce5afecb66c7ea9a -Block 0028 [ 81]: dc50af46efdce716 -Block 0028 [ 82]: 8ef9fe564ce372bf -Block 0028 [ 83]: 9386004b96f3d07b -Block 0028 [ 84]: 931edb230d806873 -Block 0028 [ 85]: 463972892751ca7c -Block 0028 [ 86]: ea39b6b40936d859 -Block 0028 [ 87]: 5c58eb39f0c08539 -Block 0028 [ 88]: 6610cc54cd07c0c9 -Block 0028 [ 89]: e4c0ce16afd786cd -Block 0028 [ 90]: e25114fbc70f82ad -Block 0028 [ 91]: 6e47602eed12ae23 -Block 0028 [ 92]: 025c64b56a765d41 -Block 0028 [ 93]: 3dffc43a35be1657 -Block 0028 [ 94]: f9b04b0c7094b53d -Block 0028 [ 95]: 4389da938709bc9d -Block 0028 [ 96]: 4f946796bde00fdb -Block 0028 [ 97]: cd435c40d8746458 -Block 0028 [ 98]: 9a70f9e6a7d23334 -Block 0028 [ 99]: 7fe9132e580b2145 -Block 0028 [100]: e05b3c6c2eb2e055 -Block 0028 [101]: f230bd45be19ed50 -Block 0028 [102]: 98a17f9086217896 -Block 0028 [103]: 5a19b54398eb0f1e -Block 0028 [104]: 81805b218b4d7acc -Block 0028 [105]: 53cc0888db15d952 -Block 0028 [106]: 0a455db0253eeab5 -Block 0028 [107]: 427b99b3709a9278 -Block 0028 [108]: 309f67cf226c6dad -Block 0028 [109]: 04cc7e2268c9f8cb -Block 0028 [110]: b50cdbe6cd24ebd0 -Block 0028 [111]: 3b6ec1744022ce3a -Block 0028 [112]: 1c7bde9e2444594b -Block 0028 [113]: 8d2fdda47d1280df -Block 0028 [114]: dd593b7ef7cbc160 -Block 0028 [115]: 603425f28180ce0a -Block 0028 [116]: 36de44b577684c20 -Block 0028 [117]: b6e6174afd7cb6f0 -Block 0028 [118]: 26c361be1a85382b -Block 0028 [119]: 52093e7af6fb04c3 -Block 0028 [120]: 6b7bad5bdedbb60e -Block 0028 [121]: e01bcc7c7bc736b6 -Block 0028 [122]: cc0df433cf949b9c -Block 0028 [123]: 6ce89651fe24f50b -Block 0028 [124]: 2f65d14ec85d1d2f -Block 0028 [125]: f03036c3706caa76 -Block 0028 [126]: 468d03ccf8153f05 -Block 0028 [127]: 967dbda43084d3f3 -Block 0029 [ 0]: f7658b7617623350 -Block 0029 [ 1]: e03903fb99c2f364 -Block 0029 [ 2]: fa5e598d449bc7c1 -Block 0029 [ 3]: 64440941ca0286d0 -Block 0029 [ 4]: c4f04649929e715a -Block 0029 [ 5]: fc8b4e25df9a43a4 -Block 0029 [ 6]: 53aa104be4478ec1 -Block 0029 [ 7]: 18e8a7702998cfed -Block 0029 [ 8]: c38282b83a2bbf8d -Block 0029 [ 9]: d224c762f65e99f9 -Block 0029 [ 10]: 0182e8439fd508d9 -Block 0029 [ 11]: 55012ed0e1ddba0d -Block 0029 [ 12]: e788c80f0597f6c3 -Block 0029 [ 13]: 37da30953d61166d -Block 0029 [ 14]: 6a961813a7033b89 -Block 0029 [ 15]: 3c62e34b3e27b1c1 -Block 0029 [ 16]: e46a91515a994a98 -Block 0029 [ 17]: f3015c41b62f357a -Block 0029 [ 18]: ffc74dd046d74be8 -Block 0029 [ 19]: 0e58a388145cd6b2 -Block 0029 [ 20]: c25f2be79b76308b -Block 0029 [ 21]: b94035810d2020cb -Block 0029 [ 22]: e0f3d82a929ce754 -Block 0029 [ 23]: cde9659f5fce847e -Block 0029 [ 24]: 9e139ca8f03b3023 -Block 0029 [ 25]: 2eabec9e991c81e1 -Block 0029 [ 26]: 441ac0c3033ab565 -Block 0029 [ 27]: 31f7a287c5388a1f -Block 0029 [ 28]: 960a2014148ec008 -Block 0029 [ 29]: 512481b4ac76ea85 -Block 0029 [ 30]: 41e4e64d8adf69e9 -Block 0029 [ 31]: b73914f0091513d9 -Block 0029 [ 32]: 0b6b5f496c1cf4bb -Block 0029 [ 33]: de5f6aedafd3bd92 -Block 0029 [ 34]: c6d64010bf68ea8a -Block 0029 [ 35]: 0cc383a9e718ebd4 -Block 0029 [ 36]: 37c23e0c7722b7e6 -Block 0029 [ 37]: e5a48c2204d0b7a6 -Block 0029 [ 38]: cb05f8b51984a566 -Block 0029 [ 39]: b8c601d4357892cd -Block 0029 [ 40]: cc9cf4d83353f878 -Block 0029 [ 41]: 382e5b2d1692bc06 -Block 0029 [ 42]: c539774a206fce40 -Block 0029 [ 43]: 11f48ac74223311d -Block 0029 [ 44]: afe26e5a3fd54c79 -Block 0029 [ 45]: d3ae9fef26be1b6c -Block 0029 [ 46]: 541f3624089b54f8 -Block 0029 [ 47]: e04c07c4f89494c8 -Block 0029 [ 48]: 50be2647fea6aa3e -Block 0029 [ 49]: 100db5b5428a6916 -Block 0029 [ 50]: 32128747f3ea25cd -Block 0029 [ 51]: fff567fd0fb38972 -Block 0029 [ 52]: 0ac0a01a5357027e -Block 0029 [ 53]: 2b3c731c47903254 -Block 0029 [ 54]: fb73b7724da0a212 -Block 0029 [ 55]: cf83d5083f766a27 -Block 0029 [ 56]: 76ba8624d21308cc -Block 0029 [ 57]: fda64090fdaebdc7 -Block 0029 [ 58]: ce1db32a30eebabc -Block 0029 [ 59]: 554ad2d4f7b1a909 -Block 0029 [ 60]: 628bfb79f526d389 -Block 0029 [ 61]: fc722985e7ee67f8 -Block 0029 [ 62]: d04c65e8e57a99fe -Block 0029 [ 63]: a3196755e7f7c584 -Block 0029 [ 64]: cd330610beee5fe6 -Block 0029 [ 65]: f155296fc87aa152 -Block 0029 [ 66]: 44785555beba5f04 -Block 0029 [ 67]: f21d20529e52bc15 -Block 0029 [ 68]: 26bf65ef544e8ae8 -Block 0029 [ 69]: b0a20d786ec319dd -Block 0029 [ 70]: 87b001a1ddbc6ce4 -Block 0029 [ 71]: 6d86f2cfcbee56f8 -Block 0029 [ 72]: 9546ff8a0cf7f664 -Block 0029 [ 73]: 742e0cba36127004 -Block 0029 [ 74]: 68d8c05fd335d672 -Block 0029 [ 75]: 36859f6866bbc4ef -Block 0029 [ 76]: 04e86efcfc6155e8 -Block 0029 [ 77]: f0f74fcc82eaae4c -Block 0029 [ 78]: d5fbc145a2038e9b -Block 0029 [ 79]: c97dd73bdef94d85 -Block 0029 [ 80]: 46641a0d5e74d7cf -Block 0029 [ 81]: ef0685b5097b5e67 -Block 0029 [ 82]: 1d5fd9ee302a79b0 -Block 0029 [ 83]: cd863c3f6985ab13 -Block 0029 [ 84]: 4ca7738aeebb1b3d -Block 0029 [ 85]: 1ba380e7f9c6d41a -Block 0029 [ 86]: 053be3f43d0815d0 -Block 0029 [ 87]: 4531b35560fa4649 -Block 0029 [ 88]: 71170fcb9f881969 -Block 0029 [ 89]: 1d6539470e53caba -Block 0029 [ 90]: c811cd3a099745dd -Block 0029 [ 91]: d24e5a4cab1f6097 -Block 0029 [ 92]: bf49c3c36ce953e7 -Block 0029 [ 93]: 7ec2b167b48bb25c -Block 0029 [ 94]: 7f8f22149ea593c1 -Block 0029 [ 95]: 41045c4656526da0 -Block 0029 [ 96]: 0a62016ef6fe2d6f -Block 0029 [ 97]: dcc506a2314d1ab6 -Block 0029 [ 98]: 84fd724119b1778e -Block 0029 [ 99]: 6c7d5b3b446a1fd1 -Block 0029 [100]: 9b0f033862438e18 -Block 0029 [101]: 978b0aaed61203a4 -Block 0029 [102]: 218befc3d5b5aefb -Block 0029 [103]: 450431d34382b3a3 -Block 0029 [104]: 3e2d2c92065cd146 -Block 0029 [105]: 3c7e61ae4a8f0279 -Block 0029 [106]: d051b0de2d324355 -Block 0029 [107]: d7644e4a6b72da80 -Block 0029 [108]: 91133f252f076c21 -Block 0029 [109]: 173e52b3d1ab5ba8 -Block 0029 [110]: c86e504f324de992 -Block 0029 [111]: 4ddf966c7242fed3 -Block 0029 [112]: 18a29093e7e2bb3a -Block 0029 [113]: 36dafe385f2c2b10 -Block 0029 [114]: 2b6fe7ef1813672d -Block 0029 [115]: 9939a4bf68bba9d8 -Block 0029 [116]: 0adab70daef4deed -Block 0029 [117]: 5a735581b8a18158 -Block 0029 [118]: f6f3c9bc7ad697dd -Block 0029 [119]: a4deeac9deecda6e -Block 0029 [120]: 72d888dd86ec2222 -Block 0029 [121]: 81014cfe6416656b -Block 0029 [122]: 3ad075b693516c76 -Block 0029 [123]: 7ddd2aa89adb05be -Block 0029 [124]: 5ca65be828845c91 -Block 0029 [125]: 86117ec0186de07f -Block 0029 [126]: cafa675111211ca4 -Block 0029 [127]: 4a92b1c01c991dc7 -Block 0030 [ 0]: 3a4e77baaceeda4f -Block 0030 [ 1]: 7a9ee225ee9d9639 -Block 0030 [ 2]: be87707cf63597d6 -Block 0030 [ 3]: 4cc45af01e0c3d38 -Block 0030 [ 4]: 61eb5cb37a5db980 -Block 0030 [ 5]: a21053715936dbd4 -Block 0030 [ 6]: 2e2a60f4b776a427 -Block 0030 [ 7]: c3160614bf7b6e67 -Block 0030 [ 8]: 2c09de08c8702cd2 -Block 0030 [ 9]: 42075967917bfa70 -Block 0030 [ 10]: c3a601e6c4af7352 -Block 0030 [ 11]: 7da95db7a912839a -Block 0030 [ 12]: 7b91b6daf74df3d1 -Block 0030 [ 13]: 7e68f0c963c11656 -Block 0030 [ 14]: 292bf228471ea592 -Block 0030 [ 15]: 28297197c4237221 -Block 0030 [ 16]: c011080c1138e15b -Block 0030 [ 17]: 649689340374f6b2 -Block 0030 [ 18]: 22c4f943de3c6691 -Block 0030 [ 19]: 13dcc60a6e166690 -Block 0030 [ 20]: fa7b5a54f3fcd738 -Block 0030 [ 21]: 6795de2cac74fd73 -Block 0030 [ 22]: 970f60d8918882aa -Block 0030 [ 23]: ac1f731a31df5499 -Block 0030 [ 24]: 13e34af1c65e7b29 -Block 0030 [ 25]: 4bb39dae73b770f4 -Block 0030 [ 26]: e0df37aabf0a24f6 -Block 0030 [ 27]: 6353983bf4cfaf43 -Block 0030 [ 28]: 86149b53a770fdcb -Block 0030 [ 29]: 0a8047c119b1ea18 -Block 0030 [ 30]: ec84dee6813b98c1 -Block 0030 [ 31]: 68d4b8e0ccd7b622 -Block 0030 [ 32]: 4f5636008654d419 -Block 0030 [ 33]: eda05631c9161315 -Block 0030 [ 34]: eebb69dc293f8497 -Block 0030 [ 35]: 22c93868ebc40dce -Block 0030 [ 36]: c8b4d47f3480051e -Block 0030 [ 37]: 3e12b38ee5dac831 -Block 0030 [ 38]: 1c0c6618fd0b1a03 -Block 0030 [ 39]: edf8afbbdc630d8f -Block 0030 [ 40]: 74db17078f3381b5 -Block 0030 [ 41]: 1f3ef7f652def5d1 -Block 0030 [ 42]: 823081fa577de1cb -Block 0030 [ 43]: bab3df9f63e2474a -Block 0030 [ 44]: 5f8943ad9630ce55 -Block 0030 [ 45]: 49986b0a5fd83bb7 -Block 0030 [ 46]: 5a5d0b2f0fc4f2fa -Block 0030 [ 47]: ff63d169f9b3ee72 -Block 0030 [ 48]: d375bb8f1fbdddd6 -Block 0030 [ 49]: 52c165386bb256e3 -Block 0030 [ 50]: 1a925b2d08860b41 -Block 0030 [ 51]: 2a7211d563ae55a0 -Block 0030 [ 52]: 944d8a32a0f620cf -Block 0030 [ 53]: c221ab1dfc88b935 -Block 0030 [ 54]: 167bbd3c0073900c -Block 0030 [ 55]: 0db633dc8f2c1fd7 -Block 0030 [ 56]: f3c9215754dd8f0c -Block 0030 [ 57]: d104919d3adcc42b -Block 0030 [ 58]: c3d815aa1b927c67 -Block 0030 [ 59]: d91f5b17a46bb7fd -Block 0030 [ 60]: 6d1d86a418781821 -Block 0030 [ 61]: 3f0960ab45883d83 -Block 0030 [ 62]: ffb4730d3ec55144 -Block 0030 [ 63]: b127ee8cb7bf977b -Block 0030 [ 64]: c6838a7e889e1588 -Block 0030 [ 65]: 7ffedaf44973699a -Block 0030 [ 66]: 008ff4b9472cf2dc -Block 0030 [ 67]: 2c2e9d5ed75d138f -Block 0030 [ 68]: 329c478d8bfc8eab -Block 0030 [ 69]: a4b5d417ca5cad57 -Block 0030 [ 70]: 757f87821b6cc4ac -Block 0030 [ 71]: b82ba42df02d75f0 -Block 0030 [ 72]: c887e666f40bc6bb -Block 0030 [ 73]: ae6e53a5c3048169 -Block 0030 [ 74]: 4d296c09642f6d91 -Block 0030 [ 75]: 4fd264c1d18f900a -Block 0030 [ 76]: 1c15dc236ad7d489 -Block 0030 [ 77]: 57c630419d7fa503 -Block 0030 [ 78]: a5ec2b38561864cf -Block 0030 [ 79]: 51056353bcccaaea -Block 0030 [ 80]: da73a3459a97b928 -Block 0030 [ 81]: bd3279d2117f0962 -Block 0030 [ 82]: 42fc1367b4296b8b -Block 0030 [ 83]: 4de989cf50579856 -Block 0030 [ 84]: 9c11f82833791e40 -Block 0030 [ 85]: 6be709cb596edf6c -Block 0030 [ 86]: fb68b38c53e92279 -Block 0030 [ 87]: 68f1a49c0cb2311c -Block 0030 [ 88]: 50a4612fd938d89e -Block 0030 [ 89]: d58eee675fa3a41f -Block 0030 [ 90]: 870ed05ee6350067 -Block 0030 [ 91]: 8c53bd46aba7beec -Block 0030 [ 92]: e546cea63e89529c -Block 0030 [ 93]: 85bb7096cc9b51e2 -Block 0030 [ 94]: 9b151d482e5f737f -Block 0030 [ 95]: 3e02ee4e48d40847 -Block 0030 [ 96]: 143794b3b806c105 -Block 0030 [ 97]: 740138578a4412e3 -Block 0030 [ 98]: d6e1430d236fbd8d -Block 0030 [ 99]: c93ff2afac930718 -Block 0030 [100]: 0ee3fc474f99b65c -Block 0030 [101]: 7bc02766f6986262 -Block 0030 [102]: bc4687933c275a94 -Block 0030 [103]: e2ec1bc66998dfcd -Block 0030 [104]: 0f3137a4c7c39136 -Block 0030 [105]: 6640cc5a47acc8da -Block 0030 [106]: e2e2b4ddd0b254e1 -Block 0030 [107]: 2851fdb6ecbb9717 -Block 0030 [108]: 3bfdbefaee7b1d3b -Block 0030 [109]: 0b20c582f9b86a9a -Block 0030 [110]: dc058e810c81fc5f -Block 0030 [111]: dc1ad509e96d5af4 -Block 0030 [112]: ea2b48353d92a0c8 -Block 0030 [113]: 4f0fbd9411f1aefe -Block 0030 [114]: df2ee5a34ef9892b -Block 0030 [115]: 88d91adc176ece1b -Block 0030 [116]: e493018de47fbbf3 -Block 0030 [117]: 0bc0d0efc7465b23 -Block 0030 [118]: 616c33128632676c -Block 0030 [119]: 3c17e6a96769a2dc -Block 0030 [120]: 2eb32b1f6f7ee404 -Block 0030 [121]: 3b9bd65bcf653b07 -Block 0030 [122]: a23aec57c56882ec -Block 0030 [123]: 805e394d2b515733 -Block 0030 [124]: 3445d77be8923ddf -Block 0030 [125]: 20d3726bef9ac7b4 -Block 0030 [126]: 8f781753caa7d491 -Block 0030 [127]: 6b0ec3c5e1d47486 -Block 0031 [ 0]: 8306f7c967b395c3 -Block 0031 [ 1]: ffbda0ec347706b6 -Block 0031 [ 2]: 6b538b8f54fde01d -Block 0031 [ 3]: 92cddba06a854e63 -Block 0031 [ 4]: e99652ed7a685653 -Block 0031 [ 5]: 06285bf3d2c84177 -Block 0031 [ 6]: 4fd4db438b0a25c6 -Block 0031 [ 7]: 3d593b9d18304741 -Block 0031 [ 8]: e2a49f385a3ec381 -Block 0031 [ 9]: 9ea8d9ec4a6ebacf -Block 0031 [ 10]: b0013cf98afbadbf -Block 0031 [ 11]: dbdcc22dac267551 -Block 0031 [ 12]: 379d1119cb488e8a -Block 0031 [ 13]: 67c4a226cae340d2 -Block 0031 [ 14]: 61bb2a63fbf188d4 -Block 0031 [ 15]: 0f817bb25ea1b0a4 -Block 0031 [ 16]: 0f94ca725ccccba3 -Block 0031 [ 17]: a632e0f21c8f58b8 -Block 0031 [ 18]: 1d79a5e778c40ab6 -Block 0031 [ 19]: 79e3dc533eebfc58 -Block 0031 [ 20]: 1a2a047311c1b025 -Block 0031 [ 21]: 73489e4eedbaec14 -Block 0031 [ 22]: 318ba718b36de770 -Block 0031 [ 23]: 2ccaebfbe880e7ee -Block 0031 [ 24]: aa65a3cf94a7cc82 -Block 0031 [ 25]: 96f862a3645089a4 -Block 0031 [ 26]: 45456f474da39292 -Block 0031 [ 27]: 293b382f5b70f9d4 -Block 0031 [ 28]: 6837e6047dc46312 -Block 0031 [ 29]: 5f0491803d570380 -Block 0031 [ 30]: 77d19869608ac4f1 -Block 0031 [ 31]: d7f936ed6a30c940 -Block 0031 [ 32]: 2c94e8b715017145 -Block 0031 [ 33]: 3db8ea9151bf639e -Block 0031 [ 34]: 04d98fc999448e08 -Block 0031 [ 35]: 1e30799273f79847 -Block 0031 [ 36]: ed4a299ddef0824c -Block 0031 [ 37]: 53059a92df99a968 -Block 0031 [ 38]: 6317980fda9bd7ac -Block 0031 [ 39]: 531c258c22b37111 -Block 0031 [ 40]: 3e144cb617d753e5 -Block 0031 [ 41]: 0ad1b6cc800fad97 -Block 0031 [ 42]: 485de075ce354cf7 -Block 0031 [ 43]: 3e939cbdcbe8d38b -Block 0031 [ 44]: 0997fe08f57f0688 -Block 0031 [ 45]: 0c29cbb8ff0520a0 -Block 0031 [ 46]: 9013fa5da1f9d57e -Block 0031 [ 47]: 36eb3989037992db -Block 0031 [ 48]: d28c2374d860cc20 -Block 0031 [ 49]: 79cc56225c2ebc97 -Block 0031 [ 50]: 80ee579977e66ce9 -Block 0031 [ 51]: ef37303706d4c739 -Block 0031 [ 52]: c12bb9458ec378b3 -Block 0031 [ 53]: ab8b1475ca99dee1 -Block 0031 [ 54]: e01ccdb1c01665f5 -Block 0031 [ 55]: e9103674ac072d8e -Block 0031 [ 56]: 1bd24ece78517070 -Block 0031 [ 57]: 44438d3d8f2a34ac -Block 0031 [ 58]: 5a662ad1c9bb32ad -Block 0031 [ 59]: 60ea59c0ec8b19fb -Block 0031 [ 60]: ed360f0271f6e226 -Block 0031 [ 61]: ff6fe136d8939f79 -Block 0031 [ 62]: 3aae328e3bcf3077 -Block 0031 [ 63]: 7a1009c1813ebb07 -Block 0031 [ 64]: f7fa7ff6b5cff9dc -Block 0031 [ 65]: 6aafbdc262751941 -Block 0031 [ 66]: 318323a996e7a435 -Block 0031 [ 67]: daaba3ad743cbb49 -Block 0031 [ 68]: a0993c7c36cbbf10 -Block 0031 [ 69]: 263840e836b8c805 -Block 0031 [ 70]: 8bedb868059ad2e8 -Block 0031 [ 71]: 61a1155c5a5a0d77 -Block 0031 [ 72]: 7ed07df38823f7d6 -Block 0031 [ 73]: deaf2fe38de9a9b1 -Block 0031 [ 74]: 13c1471961aa3032 -Block 0031 [ 75]: 865379c27a3afe33 -Block 0031 [ 76]: 10f2c731e3471ff8 -Block 0031 [ 77]: d11ec955b352ea34 -Block 0031 [ 78]: 1bae54b12af0ee66 -Block 0031 [ 79]: 6d2191bc118b5106 -Block 0031 [ 80]: 2ca4a296fae792c1 -Block 0031 [ 81]: ba0a2f5e9545eb65 -Block 0031 [ 82]: b02a49851af4f76f -Block 0031 [ 83]: c214f20bac978c16 -Block 0031 [ 84]: 811c3e9926388f27 -Block 0031 [ 85]: a211b6e9a6d66463 -Block 0031 [ 86]: 01e5b225c481858a -Block 0031 [ 87]: 39d92f1aec39be76 -Block 0031 [ 88]: 79c9f3ee5bbd64c8 -Block 0031 [ 89]: a451d0ee456f1ad7 -Block 0031 [ 90]: f210d043b918cc7e -Block 0031 [ 91]: fd385af25e8eb5d4 -Block 0031 [ 92]: 4c1297afd1f15d9b -Block 0031 [ 93]: 31c395a3a375c5b7 -Block 0031 [ 94]: 34a9b2385663c299 -Block 0031 [ 95]: 3d99bcd6d489beeb -Block 0031 [ 96]: a6e71b785c66ae8d -Block 0031 [ 97]: 601e41b8f3311735 -Block 0031 [ 98]: b95597e39654bb80 -Block 0031 [ 99]: 2ba68c443b1388cd -Block 0031 [100]: c2eb6ec1890299d0 -Block 0031 [101]: 450921c9d7985bd0 -Block 0031 [102]: 51432dd07403de26 -Block 0031 [103]: e9c807d29d00abef -Block 0031 [104]: 69f4eac4ce9ece4f -Block 0031 [105]: e9e1977d0ec7b38f -Block 0031 [106]: 5ba243615e820eaa -Block 0031 [107]: 32f5d778185e5134 -Block 0031 [108]: 4052e09b2628a83e -Block 0031 [109]: cc8997055934d815 -Block 0031 [110]: 82037f7a6beef794 -Block 0031 [111]: 28943b7f1c12e2a3 -Block 0031 [112]: 23cccf5ec328d527 -Block 0031 [113]: 44d9465be2cf4352 -Block 0031 [114]: f7753906b77a4eed -Block 0031 [115]: 6aaf7384c73c1dc5 -Block 0031 [116]: 148aa0ed8ab6ee20 -Block 0031 [117]: f6b34a35560f84fe -Block 0031 [118]: 5958fa89d0ed311d -Block 0031 [119]: e229f574b84ba2d8 -Block 0031 [120]: 6e9a4188a3f6756a -Block 0031 [121]: ec28503a0854e61a -Block 0031 [122]: 57cd455e58f6f8b0 -Block 0031 [123]: 1a3541b15feb7f05 -Block 0031 [124]: 57cfb9d20479da49 -Block 0031 [125]: 4099654bc6607f69 -Block 0031 [126]: f142a1126075a5c8 -Block 0031 [127]: c341b3ca45c10da5 -Tag: 51 2b 39 1b 6f 11 62 97 53 71 d3 09 19 73 42 94 f8 68 e3 be 39 84 f3 c1 a1 3a 4d b9 fa be 4a cb diff --git a/pkg/urcrypt/argon2/kats/argon2d.shasum b/pkg/urcrypt/argon2/kats/argon2d.shasum deleted file mode 100644 index b1b045d1b..000000000 --- a/pkg/urcrypt/argon2/kats/argon2d.shasum +++ /dev/null @@ -1 +0,0 @@ -73619cfe0f35e52fdd1ca2595ffaa359879467407f98b61f4969c2861cc329ce argon2d diff --git a/pkg/urcrypt/argon2/kats/argon2d_v16 b/pkg/urcrypt/argon2/kats/argon2d_v16 deleted file mode 100644 index d35bd4269..000000000 --- a/pkg/urcrypt/argon2/kats/argon2d_v16 +++ /dev/null @@ -1,12304 +0,0 @@ -======================================= -Argon2d version number 16 -======================================= -Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes -Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 -Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 -Secret[8]: 03 03 03 03 03 03 03 03 -Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 -Pre-hashing digest: ec dc 26 dc 6b dd 21 56 19 68 97 aa 8c c9 a0 4c 03 ed 07 cd 12 92 67 c5 3c a6 ae f7 76 a4 30 89 6a 09 80 54 e4 de c3 e0 2e cd 82 c4 7f 56 2c a2 73 d2 f6 97 8a 5c 05 41 1a 0c d0 9d 47 7b 7b 06 - - After pass 0: -Block 0000 [ 0]: b0470f8400af9a3e -Block 0000 [ 1]: 73761d3efffb3c57 -Block 0000 [ 2]: 369f09e4da0c49b4 -Block 0000 [ 3]: f0ae6399a00bba82 -Block 0000 [ 4]: eee79cd2f0460d60 -Block 0000 [ 5]: 297b71501a8f338e -Block 0000 [ 6]: 9b61176d407909c3 -Block 0000 [ 7]: 66ff2a7fa45fae7e -Block 0000 [ 8]: c25d34462fb86e28 -Block 0000 [ 9]: 1722d2592c6d2ee9 -Block 0000 [ 10]: 4e53ae3da056ed0b -Block 0000 [ 11]: 07fe2bba6b66c178 -Block 0000 [ 12]: 5ec4cde6415931a2 -Block 0000 [ 13]: 35f1752594c09eb6 -Block 0000 [ 14]: 440d7f2b2fcfc0b2 -Block 0000 [ 15]: 9bd8f0a5b3ddedcc -Block 0000 [ 16]: 45577256f4ed31f1 -Block 0000 [ 17]: 722c5080dcb4b97a -Block 0000 [ 18]: e00041f0806886e4 -Block 0000 [ 19]: fe05098342a9d3fb -Block 0000 [ 20]: a8ab223d3d042e8b -Block 0000 [ 21]: 503fbc822817e86a -Block 0000 [ 22]: 05cc6a2089cc5d48 -Block 0000 [ 23]: eb3ada41307fc6ca -Block 0000 [ 24]: 83e52b2ff5b82787 -Block 0000 [ 25]: 310678685cead533 -Block 0000 [ 26]: 3a30a891a9347881 -Block 0000 [ 27]: 8a0bd25d5560dd7b -Block 0000 [ 28]: 263a1a16487c9dcd -Block 0000 [ 29]: 9b2c75e65c7aeb33 -Block 0000 [ 30]: 9a2d2e8e60a7ee9e -Block 0000 [ 31]: 18d5e488e8f929b2 -Block 0000 [ 32]: 53e264db9a04474f -Block 0000 [ 33]: c777f5c8fbc2b4c8 -Block 0000 [ 34]: 017246c703bdf7b0 -Block 0000 [ 35]: 30a5cbd790558b68 -Block 0000 [ 36]: 33a1b499675bcbeb -Block 0000 [ 37]: 23ddf458c2cb3da4 -Block 0000 [ 38]: 608a7b074a001e4a -Block 0000 [ 39]: 2f467b32c96b96bf -Block 0000 [ 40]: 7747313d71e791b2 -Block 0000 [ 41]: 485d66811d2f3814 -Block 0000 [ 42]: ba99a9bd1e43be30 -Block 0000 [ 43]: 53f0cd6ae19f0f0d -Block 0000 [ 44]: 59137981bd54937b -Block 0000 [ 45]: c5f473a3df6b9855 -Block 0000 [ 46]: 2ae6dcdbeaab3163 -Block 0000 [ 47]: a4fdb3388c42acc0 -Block 0000 [ 48]: 7bfab3c558e71ba4 -Block 0000 [ 49]: fca67432297d1cc4 -Block 0000 [ 50]: 57eced62c617b8ee -Block 0000 [ 51]: ead2fcf6b9865e75 -Block 0000 [ 52]: 1e0415b7d63186ae -Block 0000 [ 53]: 48ab90d7e3446023 -Block 0000 [ 54]: 6cb87870278b3f88 -Block 0000 [ 55]: 92d7d7605ae82850 -Block 0000 [ 56]: 2c00219bee6cace9 -Block 0000 [ 57]: 3986013bf8aa5be9 -Block 0000 [ 58]: 0f37c1ace5344089 -Block 0000 [ 59]: 398a91714ecd2c80 -Block 0000 [ 60]: 8adf42359d4c68aa -Block 0000 [ 61]: 1546fb42e3581df7 -Block 0000 [ 62]: f37a594c954bc404 -Block 0000 [ 63]: 2002d1097c0ce1c9 -Block 0000 [ 64]: 44d379e56798d98b -Block 0000 [ 65]: 8fd7eca2c1ba9bf1 -Block 0000 [ 66]: d7692a1ebae09a8f -Block 0000 [ 67]: 9dd054b950c447c2 -Block 0000 [ 68]: 8bd1f021f9e66f28 -Block 0000 [ 69]: 1abc5cab26fe2b45 -Block 0000 [ 70]: 9437187b1b2374f2 -Block 0000 [ 71]: 036fa42f4670a4cd -Block 0000 [ 72]: 3cda85705397c20c -Block 0000 [ 73]: 61d94f7670dc5745 -Block 0000 [ 74]: 48472cc130ec3dee -Block 0000 [ 75]: 7c375245b55f305e -Block 0000 [ 76]: 6630e68e114bdd1c -Block 0000 [ 77]: 79c8e7a1fd0b6d4e -Block 0000 [ 78]: f298c7419222a6a4 -Block 0000 [ 79]: f4659ba158b5934f -Block 0000 [ 80]: 972162604d305712 -Block 0000 [ 81]: a35a2238c97be97a -Block 0000 [ 82]: 7e79114089c65562 -Block 0000 [ 83]: bb789be2751a1de1 -Block 0000 [ 84]: 8efbfadc522fcfdb -Block 0000 [ 85]: 780d4e1a6fd7c6b5 -Block 0000 [ 86]: 6b9cfe77e601e7eb -Block 0000 [ 87]: 4f5537e3a224f600 -Block 0000 [ 88]: c5dfbee166944e3b -Block 0000 [ 89]: f42877c75d6a7ef2 -Block 0000 [ 90]: a7d34acad6a5a97f -Block 0000 [ 91]: 50d4dd96e00368bd -Block 0000 [ 92]: 092272774f2216d5 -Block 0000 [ 93]: 0a635f82303e1c4f -Block 0000 [ 94]: 9b9d405490f6a720 -Block 0000 [ 95]: 586ae3294ed8c291 -Block 0000 [ 96]: 3003bbca0021b5b0 -Block 0000 [ 97]: 68669eba07ae39f4 -Block 0000 [ 98]: 01715b14a9d26ef1 -Block 0000 [ 99]: 283673720c02984d -Block 0000 [100]: 930f81c178e5cb14 -Block 0000 [101]: a0a5edb1f31eba1c -Block 0000 [102]: 7aaee5640b99640b -Block 0000 [103]: 2e99d18246f5f4d9 -Block 0000 [104]: 6ea36e6869f1ac2f -Block 0000 [105]: 3581f1d1a2b126d7 -Block 0000 [106]: 0c8a55beefe5d92f -Block 0000 [107]: c9025ffe0d55429e -Block 0000 [108]: e9c2d55dd56a1b49 -Block 0000 [109]: e1449008d709b955 -Block 0000 [110]: 9d83305392cd07fa -Block 0000 [111]: 9c67f71d0d966cd0 -Block 0000 [112]: 6ac22b04295d8c0a -Block 0000 [113]: 5883e67617dde560 -Block 0000 [114]: 0901b89c026d313f -Block 0000 [115]: 11558f2456435166 -Block 0000 [116]: 99cfd4734a726790 -Block 0000 [117]: 407a21fa4523dbcd -Block 0000 [118]: f484b24dd1f08c68 -Block 0000 [119]: 31cb0c527a35975d -Block 0000 [120]: 65a55c3e82335f9f -Block 0000 [121]: 2a6f20c9818beb78 -Block 0000 [122]: 2d46e2c60c8e9d03 -Block 0000 [123]: 010bf8d357d74314 -Block 0000 [124]: 9920b8105a72ca59 -Block 0000 [125]: 5ba81a39878a8d89 -Block 0000 [126]: 5536fb2357880f88 -Block 0000 [127]: 8d41d5c05bb02c76 -Block 0001 [ 0]: 7c4dea0e2d60f524 -Block 0001 [ 1]: aa2a00de14b18b07 -Block 0001 [ 2]: 21096c8af065b38f -Block 0001 [ 3]: 497933239d8a973a -Block 0001 [ 4]: a142a7f757f8fc7e -Block 0001 [ 5]: d40e8a8d9a21e249 -Block 0001 [ 6]: b1ec7f19913afc1f -Block 0001 [ 7]: a338cff2cc8bc4ac -Block 0001 [ 8]: aac0b85583bf7289 -Block 0001 [ 9]: 690d5a54662e6410 -Block 0001 [ 10]: ac468078f037f0d6 -Block 0001 [ 11]: 384841ffe93d19e5 -Block 0001 [ 12]: 720f69aeff671d51 -Block 0001 [ 13]: d198555d8468ae2b -Block 0001 [ 14]: 7ffeefca4c978232 -Block 0001 [ 15]: 3360f4dfdf6895b5 -Block 0001 [ 16]: db53bd1b7e54520a -Block 0001 [ 17]: ea9f149f6212a583 -Block 0001 [ 18]: 020b78f177d94965 -Block 0001 [ 19]: 8ce06021e66d0bf2 -Block 0001 [ 20]: 5466008802bef56e -Block 0001 [ 21]: d8a227d38b6f358c -Block 0001 [ 22]: 296734d9cfe0d11e -Block 0001 [ 23]: 3e2eeb4342eb2262 -Block 0001 [ 24]: 46a62cb525e796c1 -Block 0001 [ 25]: 1824b1bd628b2847 -Block 0001 [ 26]: cc813a25271149a9 -Block 0001 [ 27]: fb0fcbe1fca6e76a -Block 0001 [ 28]: f5efd2568201f4da -Block 0001 [ 29]: 905670995124373a -Block 0001 [ 30]: d7b0ba4c678a83cc -Block 0001 [ 31]: 1c3c260b14d880ab -Block 0001 [ 32]: 56efe59ab054f179 -Block 0001 [ 33]: c695b1e57cb7af58 -Block 0001 [ 34]: 97885a5f0d1674a2 -Block 0001 [ 35]: a629559911b65eef -Block 0001 [ 36]: c2f2e5fc0c03a7c0 -Block 0001 [ 37]: 2dee9f43d23c80b2 -Block 0001 [ 38]: 5f68bda41bfcfa3d -Block 0001 [ 39]: fc7855b664b3caf8 -Block 0001 [ 40]: 66e223e79d9624bf -Block 0001 [ 41]: bfcac21a1f58b978 -Block 0001 [ 42]: 373154530d4e9cfe -Block 0001 [ 43]: 42a83b6b5a95a8f9 -Block 0001 [ 44]: dec51468eec2db12 -Block 0001 [ 45]: 52ca0501bc82cc25 -Block 0001 [ 46]: d2aae011fe9ef8e7 -Block 0001 [ 47]: 16602dccb9ceb742 -Block 0001 [ 48]: 573651bd7f1e70e4 -Block 0001 [ 49]: 92ca272adcc5f65d -Block 0001 [ 50]: fe1f0568275b66fc -Block 0001 [ 51]: d961aa493d1530f1 -Block 0001 [ 52]: d7d276d4745ebfb7 -Block 0001 [ 53]: adacd9d6986d03e6 -Block 0001 [ 54]: e3c5674a50aa9abc -Block 0001 [ 55]: 0cf2efe898a18bf7 -Block 0001 [ 56]: 7797339171b236d2 -Block 0001 [ 57]: bbe52e123b2df8e0 -Block 0001 [ 58]: eb1b7fba9e7589aa -Block 0001 [ 59]: 840badae7501c2be -Block 0001 [ 60]: 06deeda1ce2988d7 -Block 0001 [ 61]: 140a8210912f6372 -Block 0001 [ 62]: bcce0defcfaf3ff0 -Block 0001 [ 63]: bd8bbe3a5b7357c5 -Block 0001 [ 64]: 49637a6af40bb8e3 -Block 0001 [ 65]: fd75ad0b367affa6 -Block 0001 [ 66]: 69add785f11074df -Block 0001 [ 67]: 8454b757336e64a5 -Block 0001 [ 68]: 386ab1f621ab6142 -Block 0001 [ 69]: c2cd42d349dce6b6 -Block 0001 [ 70]: e32969ca5db538b4 -Block 0001 [ 71]: 74480a0d6ac3bf3f -Block 0001 [ 72]: 571082cf3b01e4c5 -Block 0001 [ 73]: 6bb06bd9260dea72 -Block 0001 [ 74]: d15a6b862bc7a814 -Block 0001 [ 75]: 558c4bd2255f8037 -Block 0001 [ 76]: 64b6c7b26cab95ce -Block 0001 [ 77]: 9a09637d8a22fc29 -Block 0001 [ 78]: 3df548df02d4b16c -Block 0001 [ 79]: 829be92eb1e213d5 -Block 0001 [ 80]: e6738c64ece294c0 -Block 0001 [ 81]: 66462b0b89f83f59 -Block 0001 [ 82]: e5013615a05a323e -Block 0001 [ 83]: 7cdfc7bdba04a275 -Block 0001 [ 84]: d0b9783aa00824f8 -Block 0001 [ 85]: 0f7febc5cf63d48b -Block 0001 [ 86]: ac3b53f9b1e8fff0 -Block 0001 [ 87]: fb6f0353cc6266ed -Block 0001 [ 88]: 70389279c1af15da -Block 0001 [ 89]: 5feb883aa01dac56 -Block 0001 [ 90]: 62c86cb126dd7e0a -Block 0001 [ 91]: 77dc24689be31b73 -Block 0001 [ 92]: 7591fa8815fee297 -Block 0001 [ 93]: a31a34a642aeee28 -Block 0001 [ 94]: 3cd8b4e84083f0bc -Block 0001 [ 95]: 88d90cc76c011122 -Block 0001 [ 96]: fc5548d89ff93615 -Block 0001 [ 97]: 4d0c9885517a4d90 -Block 0001 [ 98]: 10c21d0b82cd815e -Block 0001 [ 99]: 36978c5f64e948da -Block 0001 [100]: 93d37e62eb63da10 -Block 0001 [101]: c2063e399f8e0681 -Block 0001 [102]: 9f3ad235b61e3d64 -Block 0001 [103]: d0b5897523f036ce -Block 0001 [104]: 3d4bc104da4058eb -Block 0001 [105]: cab22022accf99e7 -Block 0001 [106]: 0a196df3f344aff8 -Block 0001 [107]: 7f2b12300165aee0 -Block 0001 [108]: fd653635d914158b -Block 0001 [109]: fb21692a6c1366a6 -Block 0001 [110]: edd6c2d040094961 -Block 0001 [111]: c79280e9941ec27a -Block 0001 [112]: 280fbce8e5cd6960 -Block 0001 [113]: 7cc512600d40f97b -Block 0001 [114]: 113b17fcc8deb868 -Block 0001 [115]: bc46307516881707 -Block 0001 [116]: c0aff8d55ea5a700 -Block 0001 [117]: d4c1d8dcbf1ecee8 -Block 0001 [118]: 3f09e229a0cf497f -Block 0001 [119]: 1def3afaac33feaf -Block 0001 [120]: cc2096dcd2211d73 -Block 0001 [121]: dfa75a456a313e59 -Block 0001 [122]: 3fe11ef2c04e65eb -Block 0001 [123]: ba1b015c57ab3dc5 -Block 0001 [124]: d4a1ca9073a23c77 -Block 0001 [125]: 51ac68a0fb4e1cb0 -Block 0001 [126]: ef182d66a08362fc -Block 0001 [127]: 699c95881a1b1060 -Block 0002 [ 0]: 71b8ec93e3f732c5 -Block 0002 [ 1]: 2921408aba7a6ee8 -Block 0002 [ 2]: c3025490c26543cd -Block 0002 [ 3]: 2e30a512c2b6484d -Block 0002 [ 4]: 162f85d06406e065 -Block 0002 [ 5]: 099550c9a0775360 -Block 0002 [ 6]: 826cd9cc4508ced2 -Block 0002 [ 7]: 8b50e67c9e390589 -Block 0002 [ 8]: 3f65b5a83ab16eeb -Block 0002 [ 9]: 17a13cfedda02c46 -Block 0002 [ 10]: caffc1c212eaf6da -Block 0002 [ 11]: 70544d093dae2eff -Block 0002 [ 12]: 75f87da3c49ef5cd -Block 0002 [ 13]: 3908fe7447cb509d -Block 0002 [ 14]: 2c13ce7102738447 -Block 0002 [ 15]: e7621f9479588459 -Block 0002 [ 16]: 89dd43987c830d89 -Block 0002 [ 17]: 4be2c7d1536f7afa -Block 0002 [ 18]: 60268880e79480d9 -Block 0002 [ 19]: 1ed06be1eecb34d7 -Block 0002 [ 20]: 2882a4262d1541c6 -Block 0002 [ 21]: bddd95b9db563f26 -Block 0002 [ 22]: fced5f7ad7b81f12 -Block 0002 [ 23]: c04469c639662e04 -Block 0002 [ 24]: 460754262f521e05 -Block 0002 [ 25]: 21c7d27cc5452fdd -Block 0002 [ 26]: 1310befaa07e57bc -Block 0002 [ 27]: ee7c3e228022978d -Block 0002 [ 28]: 64e2cf6ca5a6fdd8 -Block 0002 [ 29]: 5cbc6ef1df9cd675 -Block 0002 [ 30]: d6e3caee351230ba -Block 0002 [ 31]: 61546e25e5983aa1 -Block 0002 [ 32]: d41c9423345965f0 -Block 0002 [ 33]: 407791f4576a3aa8 -Block 0002 [ 34]: 46db5a0bcd5c846f -Block 0002 [ 35]: 8a95ee17bfe0ec08 -Block 0002 [ 36]: 5876f92dfc84ba7c -Block 0002 [ 37]: 8da713191be496b1 -Block 0002 [ 38]: f4c8167930dffef9 -Block 0002 [ 39]: 9781a08d32a0b1cf -Block 0002 [ 40]: 2037493b5f57d782 -Block 0002 [ 41]: 7e5354a5a79301a6 -Block 0002 [ 42]: ca1c80a7d3c25855 -Block 0002 [ 43]: 7c16b889b05d5d15 -Block 0002 [ 44]: cc8d72fcfa904393 -Block 0002 [ 45]: e69be7ed9d4a4b9b -Block 0002 [ 46]: 5b83edd2dc756478 -Block 0002 [ 47]: f06469381ce4b98c -Block 0002 [ 48]: 2cbb142fe5a0e8b1 -Block 0002 [ 49]: 25a7cc27085c2fa0 -Block 0002 [ 50]: 39bca88c1a5b175e -Block 0002 [ 51]: 2349a999fc48b56e -Block 0002 [ 52]: c498911f0fccf069 -Block 0002 [ 53]: fcc68ab56005de17 -Block 0002 [ 54]: c6ad828542abea0d -Block 0002 [ 55]: c8af3d891cbb47c8 -Block 0002 [ 56]: 3b95683722fcc593 -Block 0002 [ 57]: 418bd5f4f9ca062d -Block 0002 [ 58]: 111a6b7f103d805c -Block 0002 [ 59]: 319537bd4bb50060 -Block 0002 [ 60]: b431772961ad550b -Block 0002 [ 61]: cdd54e4909e4f5d6 -Block 0002 [ 62]: 4825697dcafe9f1a -Block 0002 [ 63]: b22fdd05afa7dcb2 -Block 0002 [ 64]: d740558c3e22b6b7 -Block 0002 [ 65]: 1a6700ef884972b8 -Block 0002 [ 66]: e1ddada589d6769e -Block 0002 [ 67]: 16e7d46c2f308c57 -Block 0002 [ 68]: a805a5577cabb7ac -Block 0002 [ 69]: e3190cb63ff4cea2 -Block 0002 [ 70]: d1d59749b12e2218 -Block 0002 [ 71]: aa05daeb0365bb35 -Block 0002 [ 72]: 53219e14d6ffd549 -Block 0002 [ 73]: 7f404b81efa8bcd8 -Block 0002 [ 74]: 3174a66d45b4c8ca -Block 0002 [ 75]: 6f4ece4db00d016b -Block 0002 [ 76]: 72609905da2763aa -Block 0002 [ 77]: b4df27508135bc32 -Block 0002 [ 78]: 2a1af06212e7ab05 -Block 0002 [ 79]: 83a250b2fc0dd162 -Block 0002 [ 80]: af2eb57044690474 -Block 0002 [ 81]: e308e6cd64304bab -Block 0002 [ 82]: 305c0c0a99e443ab -Block 0002 [ 83]: bc6b254c9b761c71 -Block 0002 [ 84]: 2eeb658cd9a94706 -Block 0002 [ 85]: 8b2e74a5947310b3 -Block 0002 [ 86]: 7eb34be2120cf80a -Block 0002 [ 87]: dff3f71f4898493b -Block 0002 [ 88]: c8cef85d3f0d5b4c -Block 0002 [ 89]: 664806ac6dade916 -Block 0002 [ 90]: bb65d599c8c080df -Block 0002 [ 91]: c54b8e93dbc7ded9 -Block 0002 [ 92]: 50a030ce6618ee8c -Block 0002 [ 93]: 45f54cb2aaa89e65 -Block 0002 [ 94]: 267b21b4235d7346 -Block 0002 [ 95]: 1bf408ed4e75b1dc -Block 0002 [ 96]: 0e8f1edbd4bbd0c8 -Block 0002 [ 97]: a1adb6d652b48eba -Block 0002 [ 98]: 09d7a628b284f260 -Block 0002 [ 99]: 2eb568f917e0a238 -Block 0002 [100]: 12067efa542954da -Block 0002 [101]: fed335dcd6c0d327 -Block 0002 [102]: 0ef0658af19df88c -Block 0002 [103]: 79772b8c71426f57 -Block 0002 [104]: a3fa41213ac1f06f -Block 0002 [105]: c1121c7f277a0413 -Block 0002 [106]: 69417dc62124eba2 -Block 0002 [107]: e5f073d09cc97483 -Block 0002 [108]: 6d4b689e3050ffeb -Block 0002 [109]: 8460b46071ee44e6 -Block 0002 [110]: 4f086191e05c2da3 -Block 0002 [111]: 0354280e4d44d36f -Block 0002 [112]: 790c8aa9173258fb -Block 0002 [113]: 60ed51d0eb2bb310 -Block 0002 [114]: da8ca7fcaab8acb4 -Block 0002 [115]: c6999b51539b1dea -Block 0002 [116]: 362b9d5fa7b5ebd5 -Block 0002 [117]: ef482e43f06ce25c -Block 0002 [118]: 6dc1ee2e3359b2d0 -Block 0002 [119]: 25afa5d76d54d610 -Block 0002 [120]: 878969f20bf69cd5 -Block 0002 [121]: 924a37340899c61f -Block 0002 [122]: 7ed02ee734978796 -Block 0002 [123]: 40fc63ad985ec23f -Block 0002 [124]: 3928395a5dd1a2bc -Block 0002 [125]: 9abb635194848088 -Block 0002 [126]: 4a5d219cac1ab9e7 -Block 0002 [127]: 3194b42ac43716a7 -Block 0003 [ 0]: ed9b018cf73119d4 -Block 0003 [ 1]: 676d7e00d2b3d934 -Block 0003 [ 2]: 24ed504cf99b75a2 -Block 0003 [ 3]: d9c68fa321957471 -Block 0003 [ 4]: c7dc7aeff1353f1e -Block 0003 [ 5]: 9a0b969f89ed418a -Block 0003 [ 6]: 043cfd3c93718f01 -Block 0003 [ 7]: e55c9f988adc8507 -Block 0003 [ 8]: d57fa23652f38e2f -Block 0003 [ 9]: 709d8bc2f7dd84f7 -Block 0003 [ 10]: ada563f3de793c91 -Block 0003 [ 11]: e27691545c44cc18 -Block 0003 [ 12]: 2fe9ca2b832c6714 -Block 0003 [ 13]: 747c2cab2953c670 -Block 0003 [ 14]: 6703532445d3915c -Block 0003 [ 15]: dfd77bc90722f024 -Block 0003 [ 16]: 16435ba9fbeb075d -Block 0003 [ 17]: 476d334c3dca8bfa -Block 0003 [ 18]: cde2fd89449eb0d5 -Block 0003 [ 19]: bd60a48ef022b66b -Block 0003 [ 20]: a2b9d31cb2bcc0ea -Block 0003 [ 21]: b5ea599c25604703 -Block 0003 [ 22]: 4120850f7df2620b -Block 0003 [ 23]: a0ecdb519966f5ee -Block 0003 [ 24]: 6463ec02a83f114d -Block 0003 [ 25]: 077ef4a147bf4cf4 -Block 0003 [ 26]: ceb96b986f2b6938 -Block 0003 [ 27]: 42dd9f1be3d42686 -Block 0003 [ 28]: d63add83abf847fd -Block 0003 [ 29]: 14798f3c6a47385c -Block 0003 [ 30]: 81a7c676faeff12f -Block 0003 [ 31]: 8007634d756d7974 -Block 0003 [ 32]: e530dd0f316b30e3 -Block 0003 [ 33]: 60537c75bc4e58f4 -Block 0003 [ 34]: 8c58c4b07d61a3c2 -Block 0003 [ 35]: 7314d4b84f29db19 -Block 0003 [ 36]: b1a8510d99f95311 -Block 0003 [ 37]: 77aec34e430a2ef3 -Block 0003 [ 38]: be9352608d95554c -Block 0003 [ 39]: afbdecc23c77e71a -Block 0003 [ 40]: ee9038b82427c8c6 -Block 0003 [ 41]: 3e7fe31ff4244515 -Block 0003 [ 42]: 9a19698f515d3421 -Block 0003 [ 43]: 6f8ff3c4f4815b14 -Block 0003 [ 44]: 761014fe861048a7 -Block 0003 [ 45]: 1f45dc9a00dc4d41 -Block 0003 [ 46]: 0b8b32add02a90bd -Block 0003 [ 47]: 7a009a892a306723 -Block 0003 [ 48]: 42cce6cfa293666e -Block 0003 [ 49]: b652771a017d6014 -Block 0003 [ 50]: a121c1f96f26c035 -Block 0003 [ 51]: d4ec5a9f263e50f3 -Block 0003 [ 52]: 6d2a4c8b05ef8267 -Block 0003 [ 53]: f61cf97cc03049fd -Block 0003 [ 54]: cc8397dd2288f295 -Block 0003 [ 55]: a77557382f89e947 -Block 0003 [ 56]: 403fb02df66263b8 -Block 0003 [ 57]: b76f07afa1117612 -Block 0003 [ 58]: 67c4c28018281163 -Block 0003 [ 59]: 092d53a36a29aa29 -Block 0003 [ 60]: 2f276cc30cb2d64a -Block 0003 [ 61]: 09b079ccc7d34bb5 -Block 0003 [ 62]: dec9a5b166f0ec7f -Block 0003 [ 63]: 7a88ad9e18177537 -Block 0003 [ 64]: 21a6a68a52e17069 -Block 0003 [ 65]: 97e42522e13bb917 -Block 0003 [ 66]: 49a945cf664ad2e3 -Block 0003 [ 67]: 7c90c7238fab3dc0 -Block 0003 [ 68]: f6847cbb9fc1dcf9 -Block 0003 [ 69]: 613b69f2ba41a4d6 -Block 0003 [ 70]: cd59fef52d150563 -Block 0003 [ 71]: b23fb8c47fc95d8e -Block 0003 [ 72]: 4eb21cc522448370 -Block 0003 [ 73]: be2a1cae856b6920 -Block 0003 [ 74]: 3598905d25c18c85 -Block 0003 [ 75]: 73b4c4eee6198073 -Block 0003 [ 76]: 16c26bcbac3bdf2c -Block 0003 [ 77]: f8ac9f5d95065fbe -Block 0003 [ 78]: 65648fc6460c45bf -Block 0003 [ 79]: a380fff8646f6293 -Block 0003 [ 80]: 3db7f55dcec13491 -Block 0003 [ 81]: 073383663b073614 -Block 0003 [ 82]: 79b12d0d0c82cb40 -Block 0003 [ 83]: 086a4b6b0fc2256a -Block 0003 [ 84]: ce61a9b255e7f76a -Block 0003 [ 85]: 30aacf6ee481f877 -Block 0003 [ 86]: c1035ed72ecf5286 -Block 0003 [ 87]: 8d7c39140fae6ef7 -Block 0003 [ 88]: d5a479c1cb9aba85 -Block 0003 [ 89]: f0a10cd2d8bb5f99 -Block 0003 [ 90]: b01948d3e6b8e3ea -Block 0003 [ 91]: dbbf70c01fac6be5 -Block 0003 [ 92]: 636ab4bdc5ca0716 -Block 0003 [ 93]: 61e4955bb3e60859 -Block 0003 [ 94]: d056e739fbb78902 -Block 0003 [ 95]: ad7bdf23e2d3c0e4 -Block 0003 [ 96]: 68b2dafb66a5c70d -Block 0003 [ 97]: aeb52729d6f0213f -Block 0003 [ 98]: d22801e34a52020e -Block 0003 [ 99]: 3e5f3f27cbb5c16b -Block 0003 [100]: c3dac10d2ee9a3b7 -Block 0003 [101]: 943bef903b65b36a -Block 0003 [102]: acdbd6a2e74a6d2e -Block 0003 [103]: 223fc07fb15b3c2e -Block 0003 [104]: 4cc21098fc36f7e9 -Block 0003 [105]: 6c4742940ea08300 -Block 0003 [106]: a318d8cbc50f01ce -Block 0003 [107]: a1223a4b89fe758c -Block 0003 [108]: 7df4cb5a8696ca03 -Block 0003 [109]: 27637f388536a4a9 -Block 0003 [110]: 1c563e66b7c61df7 -Block 0003 [111]: 4d92572792bd3787 -Block 0003 [112]: a3a589f00137e6bd -Block 0003 [113]: 480ae4ee49a1045b -Block 0003 [114]: 32e1a4543563d81a -Block 0003 [115]: caf283982a76d442 -Block 0003 [116]: f13be5d11aa516fe -Block 0003 [117]: e8a1dbd6fc937744 -Block 0003 [118]: 8c6aee1b9d7866f3 -Block 0003 [119]: cce7053af9f1aaa0 -Block 0003 [120]: eade4e2857a1a201 -Block 0003 [121]: fde12acd969b09b7 -Block 0003 [122]: 22d756c288c83344 -Block 0003 [123]: 02f684d861b7ca1f -Block 0003 [124]: 1fa704bee1681316 -Block 0003 [125]: 8df154c2ae1d9075 -Block 0003 [126]: 8c6c02319f35a7bf -Block 0003 [127]: 1766d7e719c829d3 -Block 0004 [ 0]: 90d839630181a712 -Block 0004 [ 1]: 31d40561345ccafe -Block 0004 [ 2]: ed3bb1ec934eb32a -Block 0004 [ 3]: 5158d93e82035417 -Block 0004 [ 4]: 628176e2ce74e373 -Block 0004 [ 5]: 2be8dd104a093ba5 -Block 0004 [ 6]: 5453f9a6c44d3631 -Block 0004 [ 7]: f8ea14f4bae9c0b7 -Block 0004 [ 8]: 95812642baad81ab -Block 0004 [ 9]: 5dfcb2fb77201eec -Block 0004 [ 10]: f79d47a8fb49794f -Block 0004 [ 11]: b2feee7f8f445b8e -Block 0004 [ 12]: 19b1d3ff0c53cf11 -Block 0004 [ 13]: 28f2554b95410c7d -Block 0004 [ 14]: cdfa040f869838b0 -Block 0004 [ 15]: a6f647991b3cb6ab -Block 0004 [ 16]: 91fc048145229e4c -Block 0004 [ 17]: ad19c42e4772ec1d -Block 0004 [ 18]: a1c37bbabe144901 -Block 0004 [ 19]: 89bd26a605f77b5b -Block 0004 [ 20]: 7794732d75f63a08 -Block 0004 [ 21]: f678f8f5e9c39808 -Block 0004 [ 22]: 5381a28c3ca44c6c -Block 0004 [ 23]: 8ae5e76c1e1122be -Block 0004 [ 24]: eee5585bab1a102f -Block 0004 [ 25]: 5e1f1fde2dbf1193 -Block 0004 [ 26]: 6b533d9727cc50fe -Block 0004 [ 27]: 87dafb6e3fbdc398 -Block 0004 [ 28]: 36f76d8fafcae2d0 -Block 0004 [ 29]: 15288254e14e5c2d -Block 0004 [ 30]: 496c6c8f8623621d -Block 0004 [ 31]: 28d16b519704b395 -Block 0004 [ 32]: e712775b8bb142a1 -Block 0004 [ 33]: 6a869b2a212c4e31 -Block 0004 [ 34]: 8524f52b679fd180 -Block 0004 [ 35]: 045b00049350acd7 -Block 0004 [ 36]: b66de5cc34a53bb8 -Block 0004 [ 37]: a0cfbc2274974caf -Block 0004 [ 38]: 56c94fb7d70e67cd -Block 0004 [ 39]: 006ce5dd55c8c12a -Block 0004 [ 40]: 60ef5183fe831ac5 -Block 0004 [ 41]: d89d487934705042 -Block 0004 [ 42]: 3b2acc4cbff1b2ba -Block 0004 [ 43]: 7bf6c5188eefdbb8 -Block 0004 [ 44]: 8c3b2593646988a8 -Block 0004 [ 45]: 28aa328e1a3e5b4b -Block 0004 [ 46]: 74fbb3c3b45b6637 -Block 0004 [ 47]: b20f255f1ce5a949 -Block 0004 [ 48]: 0358047b7364172e -Block 0004 [ 49]: 162c6c06f5bb0ea8 -Block 0004 [ 50]: 65ca6a515f0ee61a -Block 0004 [ 51]: 5f1cfa1e60f277c5 -Block 0004 [ 52]: 05e8c0ad94b7bc34 -Block 0004 [ 53]: f832de7a4bd3ac2f -Block 0004 [ 54]: 9eea74a6901b91a4 -Block 0004 [ 55]: 1f367789fc44140e -Block 0004 [ 56]: 695b670f7bc01632 -Block 0004 [ 57]: 3e7d34e670023872 -Block 0004 [ 58]: c989195f9b616264 -Block 0004 [ 59]: a21c5f971308c13a -Block 0004 [ 60]: 58b87503c8635980 -Block 0004 [ 61]: 3245610b4d97d82d -Block 0004 [ 62]: e34a0f2d155360b1 -Block 0004 [ 63]: baf280cbc7fffb87 -Block 0004 [ 64]: 58510f97a6f2e4fc -Block 0004 [ 65]: c3366abaa8b7eab1 -Block 0004 [ 66]: 893caba7b9600db0 -Block 0004 [ 67]: 37c367da3446b904 -Block 0004 [ 68]: 84167169b47affbc -Block 0004 [ 69]: 9dc74c47cc8d7f78 -Block 0004 [ 70]: aa6925dcf92952c7 -Block 0004 [ 71]: 59f66d9a13ca1062 -Block 0004 [ 72]: de96a08f9c99c2f3 -Block 0004 [ 73]: 30b98fc65d399fda -Block 0004 [ 74]: 950542d7df476453 -Block 0004 [ 75]: cb7fb37d21104379 -Block 0004 [ 76]: 2bea7104cd1c5ef3 -Block 0004 [ 77]: c54453a78f0101f7 -Block 0004 [ 78]: 93ff56dd2ba89557 -Block 0004 [ 79]: b838fe564d46e7f3 -Block 0004 [ 80]: 8960183d8596dfdc -Block 0004 [ 81]: f9b0885a7c7d64d9 -Block 0004 [ 82]: 6a44f97f4714b2b1 -Block 0004 [ 83]: fc9528da99669c4e -Block 0004 [ 84]: d8b7d4ca2567129d -Block 0004 [ 85]: 1720d486d7e638ce -Block 0004 [ 86]: 7a95ddcf453b2e08 -Block 0004 [ 87]: 9da746f32e51288f -Block 0004 [ 88]: f93accc446e95fb9 -Block 0004 [ 89]: 2d1de132a48664dd -Block 0004 [ 90]: 39583bba3d9fbb08 -Block 0004 [ 91]: 9a3da40a9dd5d893 -Block 0004 [ 92]: 3439fe746eb1d98b -Block 0004 [ 93]: b2854012ccc088fe -Block 0004 [ 94]: 0bd26ec0fbef03a6 -Block 0004 [ 95]: 412b9c3c62e87da1 -Block 0004 [ 96]: f2b20003dd729349 -Block 0004 [ 97]: 5096494607d466b0 -Block 0004 [ 98]: 9df5f7537e761192 -Block 0004 [ 99]: cba43f26b1a5934f -Block 0004 [100]: ffe6f2a661c64ddd -Block 0004 [101]: 42f416be423dd904 -Block 0004 [102]: 5c8a2a6a229e88aa -Block 0004 [103]: 45b7de400eddb52e -Block 0004 [104]: 61f0b2212a2560ca -Block 0004 [105]: a158ceb5c0937b7d -Block 0004 [106]: 62f686b1e4a7de10 -Block 0004 [107]: 45f6eba38f22f491 -Block 0004 [108]: 43b50d660b6c2fc5 -Block 0004 [109]: 2fce08a13cda1519 -Block 0004 [110]: 169c1a9c683cb235 -Block 0004 [111]: a5d2facdeffdde02 -Block 0004 [112]: 2ab227e7a7f5849d -Block 0004 [113]: efde35e81d357f68 -Block 0004 [114]: 4d5f2d83c52fce90 -Block 0004 [115]: 241c77003a456d44 -Block 0004 [116]: b5add1f38714d889 -Block 0004 [117]: 41666f254082da28 -Block 0004 [118]: 6d12a9213c48cbdb -Block 0004 [119]: 0bf9b91e0ed22fc7 -Block 0004 [120]: 02373fa7a4e3e90c -Block 0004 [121]: b1c086a91f0485dc -Block 0004 [122]: 1167003ca5e99357 -Block 0004 [123]: 141e5480972f7bfd -Block 0004 [124]: 63daa7474f351787 -Block 0004 [125]: 332052c9298085bb -Block 0004 [126]: 733ea09c23cb071d -Block 0004 [127]: fa41e42ec3d39e7f -Block 0005 [ 0]: 5e7846318659b41b -Block 0005 [ 1]: 5498eccba3733c30 -Block 0005 [ 2]: 3babdb1fb5d41161 -Block 0005 [ 3]: 36f2b33bdc764f24 -Block 0005 [ 4]: 3f221dda7d6d34bb -Block 0005 [ 5]: 77176ae7b153eadd -Block 0005 [ 6]: 342e2e8794a8af6e -Block 0005 [ 7]: 20dea27fc8fae486 -Block 0005 [ 8]: 15323b3e533f0c7a -Block 0005 [ 9]: 0193254289eb31e3 -Block 0005 [ 10]: 4a81fd81fb7d90b0 -Block 0005 [ 11]: 8f287ad488427dfe -Block 0005 [ 12]: d7eb8dedcc6cd803 -Block 0005 [ 13]: d9b6de0e50372560 -Block 0005 [ 14]: 324222fe078be0da -Block 0005 [ 15]: 6a948a5b4ebdbd71 -Block 0005 [ 16]: 52a1e7302ec5d8be -Block 0005 [ 17]: 6af1222211cb1b0d -Block 0005 [ 18]: b1d9f1ddb03d7da0 -Block 0005 [ 19]: 2d9bb8070b62cf15 -Block 0005 [ 20]: 5a87a430cd6f9f81 -Block 0005 [ 21]: 340bcc02b9ad15c9 -Block 0005 [ 22]: 98db72f822dd6a1b -Block 0005 [ 23]: f9305db39a479727 -Block 0005 [ 24]: 78c68f205955a9f3 -Block 0005 [ 25]: baadd583ec827375 -Block 0005 [ 26]: 291e96dda338f722 -Block 0005 [ 27]: ca2fd96c45f08d2b -Block 0005 [ 28]: 66295ca71d284284 -Block 0005 [ 29]: cf6aefc8074ed121 -Block 0005 [ 30]: 205c887346749eaf -Block 0005 [ 31]: d1a818c4cb17d88f -Block 0005 [ 32]: d28404b27af6d3de -Block 0005 [ 33]: 68f38514db6ce691 -Block 0005 [ 34]: 9810855101734602 -Block 0005 [ 35]: 334ed4ce0bbaa7d1 -Block 0005 [ 36]: 1769d56aad14c3da -Block 0005 [ 37]: 5040635b0964ca75 -Block 0005 [ 38]: 0d2d406dcd0da21e -Block 0005 [ 39]: 3f0d5711e7d95959 -Block 0005 [ 40]: b9648e9ccd94997e -Block 0005 [ 41]: cdbcdbd0291121a2 -Block 0005 [ 42]: c2c776e399fb1502 -Block 0005 [ 43]: 10d7b02208474647 -Block 0005 [ 44]: 8dd2cae279f20ec7 -Block 0005 [ 45]: e2a4911895890527 -Block 0005 [ 46]: d5ddc4bf372c2f32 -Block 0005 [ 47]: a7d9d7c0e24d0291 -Block 0005 [ 48]: b05f408614e904c0 -Block 0005 [ 49]: bbd0c036e048df41 -Block 0005 [ 50]: 8eed1406ddf119a0 -Block 0005 [ 51]: da90ba3dcac5e24a -Block 0005 [ 52]: b1c9d509e7c4e991 -Block 0005 [ 53]: eafc798f9b854437 -Block 0005 [ 54]: 83350b23cf076d28 -Block 0005 [ 55]: b904c82269abbf30 -Block 0005 [ 56]: 4f9470766db9f036 -Block 0005 [ 57]: 8d94d3b34697e7e9 -Block 0005 [ 58]: 9110bc556a9e4405 -Block 0005 [ 59]: 65851e38116eee1a -Block 0005 [ 60]: d7990c5616c3310b -Block 0005 [ 61]: f44a043870e946fe -Block 0005 [ 62]: 497d20f5a83a43bb -Block 0005 [ 63]: cf47efb899f32d07 -Block 0005 [ 64]: 9ed434cd932fd840 -Block 0005 [ 65]: c33f7501c8c7104e -Block 0005 [ 66]: 72894f99ad784543 -Block 0005 [ 67]: 520dbb68dac9d894 -Block 0005 [ 68]: 39a98546fe09e803 -Block 0005 [ 69]: 8bf75e44b18c4dc5 -Block 0005 [ 70]: b0e11b03cad79f54 -Block 0005 [ 71]: 785d01a461667158 -Block 0005 [ 72]: 2464d3fc7be6e14a -Block 0005 [ 73]: 3c56497d32689298 -Block 0005 [ 74]: de2986b940d32487 -Block 0005 [ 75]: d9d5cfb103f6cea4 -Block 0005 [ 76]: 832e8c4d909d7b97 -Block 0005 [ 77]: 903d7d62755ae704 -Block 0005 [ 78]: a54cef3105844550 -Block 0005 [ 79]: f5b738152f173e09 -Block 0005 [ 80]: fdf02e4e100e3460 -Block 0005 [ 81]: 5a71685373a067eb -Block 0005 [ 82]: 2dc6f153213ac8bb -Block 0005 [ 83]: 227d2d6a16d74573 -Block 0005 [ 84]: 4703d6e40d6de4b2 -Block 0005 [ 85]: 9297e5c7c78805f2 -Block 0005 [ 86]: d13bb39fa6cf15b7 -Block 0005 [ 87]: b4e86661abb79f78 -Block 0005 [ 88]: 5f62a96a771a79c9 -Block 0005 [ 89]: 7f5fdb426c93deff -Block 0005 [ 90]: 8ec5bec7a7be07bb -Block 0005 [ 91]: 6c4a44e9b8e262bb -Block 0005 [ 92]: 69d02ed7903ae98a -Block 0005 [ 93]: 9d93c3a8515505ec -Block 0005 [ 94]: b2f8780a5241a542 -Block 0005 [ 95]: 1903e7ee2ad04c3e -Block 0005 [ 96]: 57c98601e7623a24 -Block 0005 [ 97]: eb032d6dab553367 -Block 0005 [ 98]: a717a3fa9ca5e346 -Block 0005 [ 99]: 088edeae54d9b6f4 -Block 0005 [100]: f7bab20588a9ee70 -Block 0005 [101]: 32c0ed6315b77431 -Block 0005 [102]: 037db77faeccc301 -Block 0005 [103]: edebe8ca2930df7b -Block 0005 [104]: 975d89059e4c5930 -Block 0005 [105]: 1e90aa88a537676f -Block 0005 [106]: ad5d5855d8b8ee4a -Block 0005 [107]: 3e4a4cbb750e652a -Block 0005 [108]: 4d9150310e7a9ec9 -Block 0005 [109]: f2750b962f399a59 -Block 0005 [110]: 5b7bf09e4a0ba5d7 -Block 0005 [111]: dafc4f656d94b7a8 -Block 0005 [112]: 641bee8cef5ae340 -Block 0005 [113]: 9b62ae31301e1379 -Block 0005 [114]: c8ab9073ae12bbe7 -Block 0005 [115]: bcfc6272d1012f69 -Block 0005 [116]: 22f31f6ac36a18e3 -Block 0005 [117]: 75437f21353a161b -Block 0005 [118]: 85ee0a8925de3c14 -Block 0005 [119]: 93dbf2879401c798 -Block 0005 [120]: dc20b9024f9ca22a -Block 0005 [121]: 67d1055a09faf352 -Block 0005 [122]: 16610e8af8545564 -Block 0005 [123]: 612fe25e6478e6a8 -Block 0005 [124]: d9a92e44a145ae37 -Block 0005 [125]: 783f29b7380227d6 -Block 0005 [126]: 1870326b162dc6c8 -Block 0005 [127]: 6f485b82113bc2a5 -Block 0006 [ 0]: 0417e8d2c09771fa -Block 0006 [ 1]: a726fdcd1ac3a31a -Block 0006 [ 2]: 84d14b41bb6059ea -Block 0006 [ 3]: 3f53c23b60df7038 -Block 0006 [ 4]: 19239c627a485bc5 -Block 0006 [ 5]: fb4aabd5defe2f47 -Block 0006 [ 6]: f9f1e77d2e9e514c -Block 0006 [ 7]: 7956e820153bfb8f -Block 0006 [ 8]: 95470e1a550e5d09 -Block 0006 [ 9]: 2df5c82514ab9a06 -Block 0006 [ 10]: 18fd74e083ae8ceb -Block 0006 [ 11]: 4e7434e120c54b8a -Block 0006 [ 12]: f91a96890a2d4ac0 -Block 0006 [ 13]: 232d40c217b875ce -Block 0006 [ 14]: 762f49fc25fcd3a0 -Block 0006 [ 15]: 35d5437c8b64405e -Block 0006 [ 16]: 0b422d304c0ed838 -Block 0006 [ 17]: 85a3333bf921879e -Block 0006 [ 18]: f3914d23823a2d06 -Block 0006 [ 19]: cc231b9f95233733 -Block 0006 [ 20]: 95a45fed71b29b0a -Block 0006 [ 21]: 11b8f5bc39821ade -Block 0006 [ 22]: beed6d07ff11c69c -Block 0006 [ 23]: de3fcab576d24290 -Block 0006 [ 24]: cb31ef7a9d8002ed -Block 0006 [ 25]: e60798c0537c5cbe -Block 0006 [ 26]: 25dbc252460cf848 -Block 0006 [ 27]: da174e23673492ae -Block 0006 [ 28]: 5aa2fc50a36cce3d -Block 0006 [ 29]: 78642ee4e8259afb -Block 0006 [ 30]: ad9a1811a189ce80 -Block 0006 [ 31]: 2f1afb8e0386b092 -Block 0006 [ 32]: 777789abcad25560 -Block 0006 [ 33]: 127feff5537b2332 -Block 0006 [ 34]: 4205ad01c2be853e -Block 0006 [ 35]: 988ae5fd34f0c7c7 -Block 0006 [ 36]: 0b9f67850f84e5f2 -Block 0006 [ 37]: e1eef8199b93426e -Block 0006 [ 38]: 99e06d1c35c00831 -Block 0006 [ 39]: 59d99a6c99d0c6fa -Block 0006 [ 40]: bd5dceb6e37ef712 -Block 0006 [ 41]: 688e2a2779c7dc71 -Block 0006 [ 42]: 0bcba0f31e421c97 -Block 0006 [ 43]: 950a987e49b4a192 -Block 0006 [ 44]: 97a6320062a8ecad -Block 0006 [ 45]: ec9f00a9d09d89ba -Block 0006 [ 46]: 4117681b09f99aba -Block 0006 [ 47]: d8467026dda87eb2 -Block 0006 [ 48]: 8eae6e49ce6a479a -Block 0006 [ 49]: 543f4baf8ae08462 -Block 0006 [ 50]: d55c072b00a22ac2 -Block 0006 [ 51]: 54aa10083de6905b -Block 0006 [ 52]: 85b5c10b32ff7623 -Block 0006 [ 53]: 17f117b0a28bfc9a -Block 0006 [ 54]: 37ac27e7c6bc3a0c -Block 0006 [ 55]: dd9068b75c93bbd1 -Block 0006 [ 56]: 69f1a8ad964fa784 -Block 0006 [ 57]: fcb52326d3c515eb -Block 0006 [ 58]: 2c6ddb220f385957 -Block 0006 [ 59]: c5714a72aec686d3 -Block 0006 [ 60]: 66b376281e03b4dc -Block 0006 [ 61]: 28877c7f3213b260 -Block 0006 [ 62]: e579ce747b053fdd -Block 0006 [ 63]: 8727815de424a4cb -Block 0006 [ 64]: bc6d9c0d3179a1ef -Block 0006 [ 65]: ac4f154a1d761539 -Block 0006 [ 66]: 55fbaeec6dc7ca86 -Block 0006 [ 67]: a6f0af31cfe67f15 -Block 0006 [ 68]: 3922b3d031a2129b -Block 0006 [ 69]: 4453b2cb3aec5c2f -Block 0006 [ 70]: e380387d90a5e924 -Block 0006 [ 71]: 35e776afaf39e0b2 -Block 0006 [ 72]: b9f397c3611ec050 -Block 0006 [ 73]: 96df5c83a6df4140 -Block 0006 [ 74]: 695ff5340eec5ec5 -Block 0006 [ 75]: 987f9703bd026e3d -Block 0006 [ 76]: 0f4348c35038b1dc -Block 0006 [ 77]: 3d268153f9b16a2c -Block 0006 [ 78]: dc1cf419721a2453 -Block 0006 [ 79]: 1607e5d6ed685375 -Block 0006 [ 80]: 9a3d76a4963d8e34 -Block 0006 [ 81]: e9a1d2e0a80513c6 -Block 0006 [ 82]: 9fb6e4802f6e7169 -Block 0006 [ 83]: 01b29ef13e829bb4 -Block 0006 [ 84]: 66844c827d52bc55 -Block 0006 [ 85]: d07d0c3cbfdf7d5e -Block 0006 [ 86]: cf944367025e3ec7 -Block 0006 [ 87]: d90c8c514fcfc4b8 -Block 0006 [ 88]: 524c86be0fb92f8c -Block 0006 [ 89]: ce0a4bdd95819f54 -Block 0006 [ 90]: 89294a0f3414ae13 -Block 0006 [ 91]: d8cd430c02e6f74b -Block 0006 [ 92]: de46e3d9261a7b0f -Block 0006 [ 93]: 18e8320c1be34393 -Block 0006 [ 94]: f4bb7e71f45c46e7 -Block 0006 [ 95]: 3f0b6d6dd0e0c0fb -Block 0006 [ 96]: a64be31a62119da2 -Block 0006 [ 97]: 6972060764978fb8 -Block 0006 [ 98]: f3710a7be0ad2de5 -Block 0006 [ 99]: d6b80dd54b07c537 -Block 0006 [100]: d6051fc8b86b24b9 -Block 0006 [101]: d904afa89bbef2f5 -Block 0006 [102]: 2079fb23f3e3c75b -Block 0006 [103]: b594448695102524 -Block 0006 [104]: 7f6cfa7cea3593d8 -Block 0006 [105]: dd5fd43fdaaae533 -Block 0006 [106]: f30c2659a9142b1d -Block 0006 [107]: 3aa159403dced7a4 -Block 0006 [108]: 5962f9bf5160d458 -Block 0006 [109]: b8a982f7bb6fc161 -Block 0006 [110]: 5b5d15c13166d1d8 -Block 0006 [111]: 58aad2b0da7f6023 -Block 0006 [112]: 75421389e4139da8 -Block 0006 [113]: 91bc8b067014c464 -Block 0006 [114]: 7f91fd554a29cb3f -Block 0006 [115]: 54865eb5f6f4a935 -Block 0006 [116]: 1bbf6187700f04cb -Block 0006 [117]: fd95668e86d46407 -Block 0006 [118]: c1771c1acf358dc7 -Block 0006 [119]: 240ef33e1f0f5692 -Block 0006 [120]: 37f5f7a3d3dc98b3 -Block 0006 [121]: 0fdbc5425b41a182 -Block 0006 [122]: 8d029071e47bc518 -Block 0006 [123]: e33d5ba83bdbc7c5 -Block 0006 [124]: 9dfd7a2e63d545b9 -Block 0006 [125]: 74b00cf4ccf77152 -Block 0006 [126]: f02776461acb55a7 -Block 0006 [127]: a17599995e42dc1d -Block 0007 [ 0]: b790a46d763c1f8a -Block 0007 [ 1]: 88372edc47d473a5 -Block 0007 [ 2]: fdbf5895c75de68f -Block 0007 [ 3]: b576d710dc6934a9 -Block 0007 [ 4]: 261dbe511e84920e -Block 0007 [ 5]: 23ccb49198ef407e -Block 0007 [ 6]: dc7a607fcfdebbbb -Block 0007 [ 7]: c40f7909c8b74565 -Block 0007 [ 8]: bcb70d8b8c5ad62a -Block 0007 [ 9]: b407de45ef00203d -Block 0007 [ 10]: 1c9216113fbd2c5b -Block 0007 [ 11]: 77275accdb669b8a -Block 0007 [ 12]: 4fdcc4d247eaecbf -Block 0007 [ 13]: 3c9c6f9c725a8147 -Block 0007 [ 14]: 5896c77481a605a0 -Block 0007 [ 15]: e1a48bfa6f467b28 -Block 0007 [ 16]: dbf9935ebb5e2b89 -Block 0007 [ 17]: 14dab3f72d5e2176 -Block 0007 [ 18]: a154a24fe73fd778 -Block 0007 [ 19]: e6924d0f65899b84 -Block 0007 [ 20]: 4e62f41e7d33cb81 -Block 0007 [ 21]: 57aeacf64ee17eb9 -Block 0007 [ 22]: 2d1099c984394239 -Block 0007 [ 23]: a982e5e228a3385f -Block 0007 [ 24]: ca6d134a2b475bba -Block 0007 [ 25]: 3ef8c9ba2748bf6e -Block 0007 [ 26]: c6340e266c4c7758 -Block 0007 [ 27]: 805e6103e708427a -Block 0007 [ 28]: 83400bd566dc6d15 -Block 0007 [ 29]: 047f958c710d7217 -Block 0007 [ 30]: 281963f6a7372405 -Block 0007 [ 31]: 056cc5a85889d3d1 -Block 0007 [ 32]: 9752a6c3ff0ba9e3 -Block 0007 [ 33]: 092282962e219d5d -Block 0007 [ 34]: a453dd749ce5e0d2 -Block 0007 [ 35]: 88cb7090e75dfd2b -Block 0007 [ 36]: 9045ad926c38a180 -Block 0007 [ 37]: 637fd1abe93970e8 -Block 0007 [ 38]: 7a2bdbc77ba5a2a1 -Block 0007 [ 39]: 0d58dc850c38de96 -Block 0007 [ 40]: 9b8fb72271a76f9e -Block 0007 [ 41]: 82ce9be13cea48f8 -Block 0007 [ 42]: b24e764f68f217de -Block 0007 [ 43]: 9f7627a126af1bfb -Block 0007 [ 44]: 57163e7e745632fd -Block 0007 [ 45]: d282b8d0620d8261 -Block 0007 [ 46]: 807477780495b097 -Block 0007 [ 47]: 0f8f13b3edf03a12 -Block 0007 [ 48]: 899a059ba9a3840b -Block 0007 [ 49]: 8ed2c0cf3dc1f9c7 -Block 0007 [ 50]: cabc04edf2d6b2d2 -Block 0007 [ 51]: 1f4dd4cf9f078444 -Block 0007 [ 52]: 2927a20e27700649 -Block 0007 [ 53]: de52aaa1375b33bd -Block 0007 [ 54]: f1e8ea93f19d218c -Block 0007 [ 55]: 1550af4fa2fd9f2f -Block 0007 [ 56]: 55c59620ae537114 -Block 0007 [ 57]: cf489cd74a05e814 -Block 0007 [ 58]: c4c315c3cf39d416 -Block 0007 [ 59]: e59752fe467b5b96 -Block 0007 [ 60]: 997e1d12fb346c7b -Block 0007 [ 61]: 0a37442715377f32 -Block 0007 [ 62]: ebbe365a0e1bacfd -Block 0007 [ 63]: 8fcbbc39ecb89c4c -Block 0007 [ 64]: b38bd0764cde9d82 -Block 0007 [ 65]: 6f16527d4267b0a3 -Block 0007 [ 66]: 4ae5dea02d5fd9d9 -Block 0007 [ 67]: d6034ae87122afd7 -Block 0007 [ 68]: 12cc1f806cbc9d7c -Block 0007 [ 69]: ab9d9811c91588bb -Block 0007 [ 70]: e69c0a53a793ec61 -Block 0007 [ 71]: 4244a7184b2def54 -Block 0007 [ 72]: e05a4b9bcf35a10f -Block 0007 [ 73]: 83b4c5a14acf620b -Block 0007 [ 74]: 5c395967dd494072 -Block 0007 [ 75]: 9cc99d42a15cf863 -Block 0007 [ 76]: 651313f6ce56ac54 -Block 0007 [ 77]: 2d624d3b5e267495 -Block 0007 [ 78]: e5c5edce3caceb3a -Block 0007 [ 79]: 9e6a73a49cb1e138 -Block 0007 [ 80]: b63ce259bde73249 -Block 0007 [ 81]: 73ecd229001d48f9 -Block 0007 [ 82]: f596d98b783df7a9 -Block 0007 [ 83]: 7353862898dd9389 -Block 0007 [ 84]: 57063423fb02c599 -Block 0007 [ 85]: f5c261d8635cea29 -Block 0007 [ 86]: 506b486faca9af11 -Block 0007 [ 87]: ac0751d372f6ee49 -Block 0007 [ 88]: 5cb470a4a19ce898 -Block 0007 [ 89]: 45dfc8900981c9f8 -Block 0007 [ 90]: 2fdc79a1de246e99 -Block 0007 [ 91]: 63a7108d4264ef3f -Block 0007 [ 92]: 9089aae68dc0d946 -Block 0007 [ 93]: fbf2426d313a38ce -Block 0007 [ 94]: 4d737aa292130361 -Block 0007 [ 95]: c1eb918fba4db728 -Block 0007 [ 96]: 19c7bb8ed8bdd039 -Block 0007 [ 97]: 29cc46fb1db3081a -Block 0007 [ 98]: 6af7ead3aa61c786 -Block 0007 [ 99]: cdb8b00b8880bfb6 -Block 0007 [100]: b34176cd8343ba10 -Block 0007 [101]: b5a302876a9a9a2d -Block 0007 [102]: b766d763b9e23e61 -Block 0007 [103]: 3efd17036bb6ca0b -Block 0007 [104]: feeaae24f4c47ed1 -Block 0007 [105]: bebd53ac00c1c2a0 -Block 0007 [106]: babb3ef27e187adc -Block 0007 [107]: 981eeecfb50ac179 -Block 0007 [108]: 59188d843b69adfa -Block 0007 [109]: f4d2f0c370640543 -Block 0007 [110]: f725433a397d9b7e -Block 0007 [111]: 7505a3b205552a64 -Block 0007 [112]: a19ae22e984b2833 -Block 0007 [113]: fef5ba7a4a4de67d -Block 0007 [114]: 7dd338034b955296 -Block 0007 [115]: 60380e2b6e8b5651 -Block 0007 [116]: 1bf12c38cfaa4ccd -Block 0007 [117]: d8d9d8865e4da277 -Block 0007 [118]: 87ab45b1c1b2a472 -Block 0007 [119]: ac42c04e86a00b57 -Block 0007 [120]: f6f3afa0bfc7ee1a -Block 0007 [121]: a9d327166f257b5e -Block 0007 [122]: 8369e41dd8e7f1dc -Block 0007 [123]: b2541d86369b89c6 -Block 0007 [124]: 0c2e1060ad2cfb4d -Block 0007 [125]: f2d1ca5669641434 -Block 0007 [126]: a2f6616cc5520f24 -Block 0007 [127]: 1a5e4817b7ad354f -Block 0008 [ 0]: b9c7c2532b67d22b -Block 0008 [ 1]: 077ce77061aa2ff0 -Block 0008 [ 2]: 87adc5012fcc6d17 -Block 0008 [ 3]: 9d9bea1474b767e4 -Block 0008 [ 4]: cebe16566a953f30 -Block 0008 [ 5]: 9ad7069976e86c26 -Block 0008 [ 6]: ac1cd6d7c3be9fd5 -Block 0008 [ 7]: a0af6592942d74e6 -Block 0008 [ 8]: 62c54bb2125a6e98 -Block 0008 [ 9]: c98a354b32588b91 -Block 0008 [ 10]: f3b596fd6cf1e8bd -Block 0008 [ 11]: a8d5fb4cef80096c -Block 0008 [ 12]: 3d681d3f79cd27bc -Block 0008 [ 13]: df8fbea460aee1c4 -Block 0008 [ 14]: 5c75c3b402008252 -Block 0008 [ 15]: 580a6f636ab15434 -Block 0008 [ 16]: 208a7b74815ed1c3 -Block 0008 [ 17]: 1fb9abd67e26253e -Block 0008 [ 18]: e2b912f1b2e83e90 -Block 0008 [ 19]: e2e8a873d27242ab -Block 0008 [ 20]: 07f0cd5d2b520e6a -Block 0008 [ 21]: ad42bad9cbf997a7 -Block 0008 [ 22]: 833b071d6f74a63f -Block 0008 [ 23]: 48cef23c752c885e -Block 0008 [ 24]: 39f842734be8c8fd -Block 0008 [ 25]: 107782af44b5177a -Block 0008 [ 26]: 04439164e4963ec3 -Block 0008 [ 27]: 000c4a7af3d87aad -Block 0008 [ 28]: 1d853884ad7c35d1 -Block 0008 [ 29]: 7b898e1a009ae92b -Block 0008 [ 30]: 019a1f557de1c3b1 -Block 0008 [ 31]: 7587ba1dde02c979 -Block 0008 [ 32]: ac9a50a01d24a32f -Block 0008 [ 33]: d654c8db0fde8224 -Block 0008 [ 34]: da93df7fa2eb912a -Block 0008 [ 35]: 3d96657e8a3b7857 -Block 0008 [ 36]: f5c827e6634974f2 -Block 0008 [ 37]: e24f4f704a0d9606 -Block 0008 [ 38]: 4822ea21f1536e66 -Block 0008 [ 39]: 5f2d56075ce92649 -Block 0008 [ 40]: 7cf7365eec2c003e -Block 0008 [ 41]: d2072ae424d198a9 -Block 0008 [ 42]: bc0f44f4960bfeda -Block 0008 [ 43]: b9cf51e48deda197 -Block 0008 [ 44]: e1eeea36715a244b -Block 0008 [ 45]: c225441be8108083 -Block 0008 [ 46]: e31bce8554868b34 -Block 0008 [ 47]: c95ab4fc24c39772 -Block 0008 [ 48]: dec6166495e4ed32 -Block 0008 [ 49]: 9b923dbc7ca53682 -Block 0008 [ 50]: cbe461b15013d38a -Block 0008 [ 51]: 765cd1afecb13d26 -Block 0008 [ 52]: 6362c36a7d163513 -Block 0008 [ 53]: 72adc9a1f3a48bf8 -Block 0008 [ 54]: f5f68421f2f34166 -Block 0008 [ 55]: ea61e7179fe82d20 -Block 0008 [ 56]: 01662f9615ecdd3a -Block 0008 [ 57]: 17f61d1fc63ec481 -Block 0008 [ 58]: 0fe4fe28ef6821c5 -Block 0008 [ 59]: e681ba127361b647 -Block 0008 [ 60]: b191928ed0ed6e27 -Block 0008 [ 61]: ee67b65013c1a02e -Block 0008 [ 62]: 7376f8837774d67e -Block 0008 [ 63]: da60f51b24fa5db6 -Block 0008 [ 64]: da97f5dae1fb50bd -Block 0008 [ 65]: 3d897acc250ad297 -Block 0008 [ 66]: fc7eefc17b6e4d8f -Block 0008 [ 67]: d5a702a6e4bc4c77 -Block 0008 [ 68]: e680b62cfdbf407a -Block 0008 [ 69]: f01a14d0703e6713 -Block 0008 [ 70]: a50ab2984f01da78 -Block 0008 [ 71]: c81a6f7f9f0ff6b3 -Block 0008 [ 72]: 6af882b4197f35be -Block 0008 [ 73]: da153ae3f295e48d -Block 0008 [ 74]: 2144c2b8826db407 -Block 0008 [ 75]: 34a6080b38a6ffa8 -Block 0008 [ 76]: 4fba023c2961f20b -Block 0008 [ 77]: bf863224ec20a811 -Block 0008 [ 78]: 20c5125e6c39cfc9 -Block 0008 [ 79]: 0f5e74f9eb179b9a -Block 0008 [ 80]: 50dda8efcc4d1e77 -Block 0008 [ 81]: 6ea326dcb9006352 -Block 0008 [ 82]: 0389c30094ff80e0 -Block 0008 [ 83]: 7a7b9280301047f5 -Block 0008 [ 84]: c306819d8dc0c57b -Block 0008 [ 85]: 2c2d25d8a3b87926 -Block 0008 [ 86]: 3268d42a19fce381 -Block 0008 [ 87]: 65bb2ed5af98cb0d -Block 0008 [ 88]: 5db461cdec83a707 -Block 0008 [ 89]: 07eabe068ae1a576 -Block 0008 [ 90]: ca542c1db2c41368 -Block 0008 [ 91]: c0f6c2f19d388b31 -Block 0008 [ 92]: 67df7325f41a345e -Block 0008 [ 93]: 9f4a855eee802af2 -Block 0008 [ 94]: d308ac5aac84d191 -Block 0008 [ 95]: ab8e77fbb517080e -Block 0008 [ 96]: 050506ad63fc077d -Block 0008 [ 97]: ac2f98f6cf49f961 -Block 0008 [ 98]: 0998004b75a10f9f -Block 0008 [ 99]: 288a0cd29f0efb43 -Block 0008 [100]: 056f8ed8bad8f621 -Block 0008 [101]: 8f5774a97742bd65 -Block 0008 [102]: 8b8ab2e31359c1c5 -Block 0008 [103]: 852b384f17a635b2 -Block 0008 [104]: 2490e65cfacf7d22 -Block 0008 [105]: 2b15baa7e28aae41 -Block 0008 [106]: ed3c1c7ad7ac5646 -Block 0008 [107]: 24cf55a144ce1496 -Block 0008 [108]: a1c455ce9fe0dfb9 -Block 0008 [109]: f387f3a16d5cb9be -Block 0008 [110]: 8b48f8d6d65ea8d0 -Block 0008 [111]: 57eb999061ffc1da -Block 0008 [112]: 9163fc4867f0a9c5 -Block 0008 [113]: 6c0abdae81bdca0c -Block 0008 [114]: 38af67ebfaaf9b35 -Block 0008 [115]: 87b9ba3610e8c6b0 -Block 0008 [116]: 6b6f7fe3d7a42823 -Block 0008 [117]: cf7283ecbb972e62 -Block 0008 [118]: f006feb0d78c58e5 -Block 0008 [119]: 90bdf281b84ef947 -Block 0008 [120]: 8076948a0639e8dd -Block 0008 [121]: a911542a23ad3a85 -Block 0008 [122]: ae90a2f32e210a66 -Block 0008 [123]: bbced4d0627ead7f -Block 0008 [124]: 34c7c5f4f8da73f1 -Block 0008 [125]: 2029aae2afbc78dc -Block 0008 [126]: 7a1ab65f99792819 -Block 0008 [127]: 1c338df72ffafb0d -Block 0009 [ 0]: 90f63b41acfd2e3f -Block 0009 [ 1]: 2df1e2e603f91b0f -Block 0009 [ 2]: 5084f932783615e5 -Block 0009 [ 3]: a3710c3bfaf40ed0 -Block 0009 [ 4]: 13d4d81d5135df0f -Block 0009 [ 5]: 5dfeb4b8b74b2312 -Block 0009 [ 6]: 445e3a8c63053092 -Block 0009 [ 7]: b053c2140b29ad21 -Block 0009 [ 8]: 30a3517a523a9c9d -Block 0009 [ 9]: 3ee26153e2ef5731 -Block 0009 [ 10]: e3d9715f1c98d0d4 -Block 0009 [ 11]: 5cb14f3d7938ea32 -Block 0009 [ 12]: e0a2d15a050345df -Block 0009 [ 13]: b653b62615d0c5c0 -Block 0009 [ 14]: 0a13ebbb02227645 -Block 0009 [ 15]: fb27584fd730feae -Block 0009 [ 16]: 9de7027a352fc818 -Block 0009 [ 17]: 7ae68d9daadced50 -Block 0009 [ 18]: a7e012161f463b0f -Block 0009 [ 19]: d36322fbd9de50e8 -Block 0009 [ 20]: 33cee18a7b695d07 -Block 0009 [ 21]: a0a668e0d1079520 -Block 0009 [ 22]: 118beb776a2dab01 -Block 0009 [ 23]: cae16884e955da26 -Block 0009 [ 24]: f3ecd50fbb69b366 -Block 0009 [ 25]: f83690aecc4f84e1 -Block 0009 [ 26]: 2ebaeddbcdeb73ac -Block 0009 [ 27]: 361ec0b0acfffc17 -Block 0009 [ 28]: 5f49f0d5bf30edc9 -Block 0009 [ 29]: b07e1cfec13fdbcb -Block 0009 [ 30]: e9fb2ecc77c28262 -Block 0009 [ 31]: 7b47036980551052 -Block 0009 [ 32]: 2e804703942e3250 -Block 0009 [ 33]: 85c07d3d4bb3ceb3 -Block 0009 [ 34]: b310f1225e0bb382 -Block 0009 [ 35]: 9d13dfe845126a23 -Block 0009 [ 36]: 715274518ecb3edd -Block 0009 [ 37]: 7dbafe91429982f2 -Block 0009 [ 38]: bb103004f4b01569 -Block 0009 [ 39]: 37bebf44b2290105 -Block 0009 [ 40]: 3066f2347c59ae01 -Block 0009 [ 41]: 3622dad29d563c0d -Block 0009 [ 42]: af6200ec04529c2d -Block 0009 [ 43]: 6aaef2c134cc26cd -Block 0009 [ 44]: 15a1d9b32d636d66 -Block 0009 [ 45]: 66c47adabccb2e37 -Block 0009 [ 46]: 6b0a3a4f05bd126c -Block 0009 [ 47]: 2ef6b8d9fd0ac2c1 -Block 0009 [ 48]: 30d2dddb9c6fd9ae -Block 0009 [ 49]: 32b752b1d8d0f825 -Block 0009 [ 50]: 15f2273324185e41 -Block 0009 [ 51]: 2fc7cfaa0007f735 -Block 0009 [ 52]: 5bb0cb3e7a98dc42 -Block 0009 [ 53]: d4ba1caee83bd718 -Block 0009 [ 54]: d58bca8365593feb -Block 0009 [ 55]: 1caaa560f824f823 -Block 0009 [ 56]: 06d66004eef81ec8 -Block 0009 [ 57]: e62be588eb71c6e3 -Block 0009 [ 58]: 028af83ba978c75a -Block 0009 [ 59]: 455d36e5a57838c2 -Block 0009 [ 60]: 2271f285b39b417f -Block 0009 [ 61]: 19b9d33317ec5ce0 -Block 0009 [ 62]: 62a66573c00d9f1b -Block 0009 [ 63]: 1857e18294b8f3dd -Block 0009 [ 64]: 7926c357c015c014 -Block 0009 [ 65]: a57ad006cd650064 -Block 0009 [ 66]: f132763de2164979 -Block 0009 [ 67]: 1a6b884bf664c0ce -Block 0009 [ 68]: 4c7a58a1c301b62f -Block 0009 [ 69]: ca9ea9c9bb7ee4d5 -Block 0009 [ 70]: fda794c88609587f -Block 0009 [ 71]: 9113554d7df707b8 -Block 0009 [ 72]: dc15bdf224dd0352 -Block 0009 [ 73]: 6921c623544303e8 -Block 0009 [ 74]: b35a0a99d7d443ee -Block 0009 [ 75]: cc2a220c616c5049 -Block 0009 [ 76]: 7671e209b5318ee5 -Block 0009 [ 77]: a5e864ad143f8d39 -Block 0009 [ 78]: b06abe5900bffbba -Block 0009 [ 79]: 158d9421b8c0f9e4 -Block 0009 [ 80]: 2da152014cab559b -Block 0009 [ 81]: b8c17e04ad93e8f8 -Block 0009 [ 82]: 52eac4a8a411ba69 -Block 0009 [ 83]: 7a8f00a44b79615d -Block 0009 [ 84]: e1cdfaaeb0d07db2 -Block 0009 [ 85]: e78c69027b4403bd -Block 0009 [ 86]: 8d0ace0a9de358ef -Block 0009 [ 87]: 259e17069c1985ef -Block 0009 [ 88]: 2bbcf3de532871f8 -Block 0009 [ 89]: 0f0b5a3dc838ebed -Block 0009 [ 90]: 9039b06f29793ff1 -Block 0009 [ 91]: e3cdfa84c5e825b6 -Block 0009 [ 92]: 48d5c902a1d7445e -Block 0009 [ 93]: d323aabdadda5174 -Block 0009 [ 94]: bd286464b4d67c67 -Block 0009 [ 95]: b0c54c030c7afa1e -Block 0009 [ 96]: 3baa0122d9b14320 -Block 0009 [ 97]: aab0ea19711df1ba -Block 0009 [ 98]: 9469d4ce54a3fced -Block 0009 [ 99]: b1c72afddc74f4d0 -Block 0009 [100]: c29670cebb2988c1 -Block 0009 [101]: bf02191c60bfa561 -Block 0009 [102]: cf357b9034136a10 -Block 0009 [103]: c23d5df417f88814 -Block 0009 [104]: 83114ef35de168f2 -Block 0009 [105]: 058f7dc566f6f951 -Block 0009 [106]: b6ff38f14922933b -Block 0009 [107]: 0be1429882f0911e -Block 0009 [108]: f5efae1c14b31f47 -Block 0009 [109]: f8b4df8a360a01a5 -Block 0009 [110]: 43e67a6ccd951ba0 -Block 0009 [111]: ed95ded23d5b20b6 -Block 0009 [112]: 22b130913c60e481 -Block 0009 [113]: cb5a40e52e1e1104 -Block 0009 [114]: 7011efed737ae691 -Block 0009 [115]: 8a59bf8464200afb -Block 0009 [116]: b2d8f9050d97513c -Block 0009 [117]: d57f69030504491e -Block 0009 [118]: 2403848983113b0b -Block 0009 [119]: 22db081455729811 -Block 0009 [120]: d0db5aefd0419fd5 -Block 0009 [121]: e41070df7b2fd51b -Block 0009 [122]: 0fce0e7ffb3d7840 -Block 0009 [123]: 43fbaec79d79039a -Block 0009 [124]: 1d71fb266791c825 -Block 0009 [125]: aedf742f89a5b302 -Block 0009 [126]: 41c0f73c931dbe24 -Block 0009 [127]: 1c8cba64e64e34f2 -Block 0010 [ 0]: 03162a3d2fb31a25 -Block 0010 [ 1]: 95d94a611da86488 -Block 0010 [ 2]: a04524d51f43fbfe -Block 0010 [ 3]: b5fbf83fe35e1742 -Block 0010 [ 4]: 1702d9d1540b5e0e -Block 0010 [ 5]: a9cb1fc14db76b1c -Block 0010 [ 6]: 482da64056af648d -Block 0010 [ 7]: c5c6e169209aa2d1 -Block 0010 [ 8]: 5ff81bbb23cfa875 -Block 0010 [ 9]: 0a760c8cb3fff112 -Block 0010 [ 10]: a2af68f0049ca01d -Block 0010 [ 11]: 8b612089307f6546 -Block 0010 [ 12]: 7fc69ebacf75d649 -Block 0010 [ 13]: 72305888dff67bdc -Block 0010 [ 14]: 8801e7b401c32102 -Block 0010 [ 15]: 2222112df4517523 -Block 0010 [ 16]: 4ae3745fe43db23b -Block 0010 [ 17]: 0ae88e2a493b9a1f -Block 0010 [ 18]: a9cc47ea89a7bf49 -Block 0010 [ 19]: cbbe32c2f6b863b9 -Block 0010 [ 20]: 2f06cab4c8f4888f -Block 0010 [ 21]: 3b144622e62f7e5a -Block 0010 [ 22]: a859a6ec7da1e596 -Block 0010 [ 23]: 5fb8968a8d04c7ef -Block 0010 [ 24]: 5aaac0a73b6928e1 -Block 0010 [ 25]: 68cd864b58e58b1f -Block 0010 [ 26]: f0d9dfbf38e75ea1 -Block 0010 [ 27]: b92936821414ca29 -Block 0010 [ 28]: 19fc4f8375dbbd8e -Block 0010 [ 29]: ff51aec8104e45e6 -Block 0010 [ 30]: ad4518cca50dc645 -Block 0010 [ 31]: 42bbffddbf9af0b9 -Block 0010 [ 32]: b8568cf87046e23b -Block 0010 [ 33]: 28e5aca86ce23c97 -Block 0010 [ 34]: df69b5becf4306ee -Block 0010 [ 35]: a7e30b2fb0abf323 -Block 0010 [ 36]: f1e4b8b603ee5497 -Block 0010 [ 37]: 8937c677fb8ecdbd -Block 0010 [ 38]: f0cbce948a4fd7c5 -Block 0010 [ 39]: de19ec873867caf8 -Block 0010 [ 40]: 457f4d3348476483 -Block 0010 [ 41]: e19a51d9c78b78b3 -Block 0010 [ 42]: 97bebd6958586035 -Block 0010 [ 43]: 22a862ee6959c5d9 -Block 0010 [ 44]: eb6e508abb1c4e05 -Block 0010 [ 45]: 14234c65a136a786 -Block 0010 [ 46]: af12338c1ca6ad2e -Block 0010 [ 47]: 03d183bef690445e -Block 0010 [ 48]: 326ec9c641ea0ecf -Block 0010 [ 49]: ce787971555c98f4 -Block 0010 [ 50]: 0aa538a409c2cecc -Block 0010 [ 51]: e5ad409a55648f06 -Block 0010 [ 52]: 3b3c3e48dfbcf089 -Block 0010 [ 53]: 0be74cbe5ab3bda8 -Block 0010 [ 54]: 52c78e15e5b2adcd -Block 0010 [ 55]: a6acd621e94df26d -Block 0010 [ 56]: 19b3601aad02118b -Block 0010 [ 57]: ea86b5c50e080ee9 -Block 0010 [ 58]: e30b54d9ae2a555e -Block 0010 [ 59]: 0dd1c1abcaa0bf79 -Block 0010 [ 60]: da3dc56d55130978 -Block 0010 [ 61]: 87c97e8e8187d127 -Block 0010 [ 62]: 4720ff4be1fe0973 -Block 0010 [ 63]: 8ffa4974698469b8 -Block 0010 [ 64]: b74f20d179b01198 -Block 0010 [ 65]: 1cf9956c0b469776 -Block 0010 [ 66]: 0a4c0c1e2d98dd4e -Block 0010 [ 67]: 30ad0a024b0059dd -Block 0010 [ 68]: 0753951043b731c4 -Block 0010 [ 69]: c54d897d6a39226d -Block 0010 [ 70]: 7fce081f2122b0f0 -Block 0010 [ 71]: 5e003b5cbcc0aba4 -Block 0010 [ 72]: b584571f879d7593 -Block 0010 [ 73]: c0d22747a0873a89 -Block 0010 [ 74]: 096b1ab7cc3cd779 -Block 0010 [ 75]: 2104787f82456800 -Block 0010 [ 76]: 87ffeb72fb25ca92 -Block 0010 [ 77]: a6d45632612c75f9 -Block 0010 [ 78]: d84a222c579ad8a7 -Block 0010 [ 79]: 260e49a3917db014 -Block 0010 [ 80]: ddc70aef5f5f1289 -Block 0010 [ 81]: ce75db71f8307c39 -Block 0010 [ 82]: 988669c21d68b798 -Block 0010 [ 83]: bc253d44309e988d -Block 0010 [ 84]: 133b2d34fb862fb4 -Block 0010 [ 85]: 337fcded4be0ef7f -Block 0010 [ 86]: dba1a8dc49b65f56 -Block 0010 [ 87]: 70d4d2cc01651078 -Block 0010 [ 88]: 83d6646e37f6e2b6 -Block 0010 [ 89]: 27503f337a53e990 -Block 0010 [ 90]: 44aafbae9a1c5514 -Block 0010 [ 91]: 7539a36b19544cc7 -Block 0010 [ 92]: 5d0623d16de3b93e -Block 0010 [ 93]: 623e6fa8cf8dc502 -Block 0010 [ 94]: 084ac30cc5095a42 -Block 0010 [ 95]: bf6a2b9d4438871e -Block 0010 [ 96]: 6742f0a4e7b224f8 -Block 0010 [ 97]: 00e3179dc5145dfb -Block 0010 [ 98]: 3809bbecac742553 -Block 0010 [ 99]: 0de0efc339600332 -Block 0010 [100]: b86f4cda47b795f1 -Block 0010 [101]: ebb9583575c70f47 -Block 0010 [102]: 6601cf1f14855e00 -Block 0010 [103]: 54a19f47266bae3d -Block 0010 [104]: 2b30afe1ffff7bbe -Block 0010 [105]: e7186358f45ec150 -Block 0010 [106]: 2f3fc0f4ec78188b -Block 0010 [107]: dfb03a09423769a0 -Block 0010 [108]: c92df3af123f69a5 -Block 0010 [109]: f61f79e3b60ad2ae -Block 0010 [110]: 62155dab043e8e17 -Block 0010 [111]: 72b1b9b0ab48243a -Block 0010 [112]: 167a89196e5e3cb2 -Block 0010 [113]: 3f601eeec23df9d4 -Block 0010 [114]: 965d8400a3a092b2 -Block 0010 [115]: 611dc2ebbbb43701 -Block 0010 [116]: 27bb3105406300f7 -Block 0010 [117]: 435783800ec13a83 -Block 0010 [118]: eb7bb000b8de1dcc -Block 0010 [119]: 0b91a3a50360b857 -Block 0010 [120]: 431dc1068099cb7f -Block 0010 [121]: 63640dba63f66b02 -Block 0010 [122]: c175a55bb8195031 -Block 0010 [123]: cc39c58d7546d7e5 -Block 0010 [124]: 5130c4ed8e0d553e -Block 0010 [125]: 481a68ccccccb7ba -Block 0010 [126]: a31c3f8ea54032c0 -Block 0010 [127]: bc790a78ad15e281 -Block 0011 [ 0]: cd289066739699b7 -Block 0011 [ 1]: ef6f08e83b2279cc -Block 0011 [ 2]: bfe116223a67eac7 -Block 0011 [ 3]: 5ed9e51a2f3fa756 -Block 0011 [ 4]: d091e01529a66c68 -Block 0011 [ 5]: 6c00296717dc4db4 -Block 0011 [ 6]: 8e1a0e28f76b7b3a -Block 0011 [ 7]: ae25fb50b09ed824 -Block 0011 [ 8]: 93d73babe4143961 -Block 0011 [ 9]: 0da1f4d09c94370f -Block 0011 [ 10]: 30f77c7c452d7ce4 -Block 0011 [ 11]: 788024e40ab22171 -Block 0011 [ 12]: 26ccd25ef63a2f11 -Block 0011 [ 13]: d1c07c37e293eac0 -Block 0011 [ 14]: c0aa81d79ad9a8a6 -Block 0011 [ 15]: 6ec7214f553d8c69 -Block 0011 [ 16]: 893d6226e03c6bd1 -Block 0011 [ 17]: 962ed1779a6573bc -Block 0011 [ 18]: 7300c734c3c57e79 -Block 0011 [ 19]: 0834fd221492ebd2 -Block 0011 [ 20]: eab8cb092d44c594 -Block 0011 [ 21]: d85bc9e0605c61c9 -Block 0011 [ 22]: 0f10bcda5cc091d6 -Block 0011 [ 23]: 5dd2835a198b8ac3 -Block 0011 [ 24]: 414c25271a38a161 -Block 0011 [ 25]: 1d0c907d6caab7f5 -Block 0011 [ 26]: f6100897ed6eed1e -Block 0011 [ 27]: cd54dfefe46f6a86 -Block 0011 [ 28]: 9208e77496c06a3a -Block 0011 [ 29]: 296237fd89703010 -Block 0011 [ 30]: 03c11023e62bcf5f -Block 0011 [ 31]: 8851fb5b68678dcd -Block 0011 [ 32]: 40ff9e933fb5d757 -Block 0011 [ 33]: 18859d7030dd523c -Block 0011 [ 34]: c8cb6d5521ef7e7b -Block 0011 [ 35]: 88166acdfb046b45 -Block 0011 [ 36]: 2647d84ea607a84d -Block 0011 [ 37]: 9de18c9dcc05463a -Block 0011 [ 38]: 58e3a7730182d15c -Block 0011 [ 39]: b66213fb6a76642d -Block 0011 [ 40]: ec44e39215a9ac17 -Block 0011 [ 41]: 994c8fd34794739f -Block 0011 [ 42]: bc07c6d306bf6538 -Block 0011 [ 43]: 334dd171cfbf7e0d -Block 0011 [ 44]: 6ca8cf56b84e8066 -Block 0011 [ 45]: 269115bbc80e6bda -Block 0011 [ 46]: 7a58d538e5fd4fd7 -Block 0011 [ 47]: 10c69a27de84b7ce -Block 0011 [ 48]: 588946878009a2df -Block 0011 [ 49]: aab803acae234714 -Block 0011 [ 50]: 0db30430f182d18b -Block 0011 [ 51]: 374488ebafbd6f8d -Block 0011 [ 52]: 51bea2536583c798 -Block 0011 [ 53]: 5349f72cc9d30415 -Block 0011 [ 54]: 17e62cbd6fccce76 -Block 0011 [ 55]: f6ca270555d78986 -Block 0011 [ 56]: bd9f558733940b5b -Block 0011 [ 57]: 310c6473cf1f3eb5 -Block 0011 [ 58]: aaf61ebeb7b59d94 -Block 0011 [ 59]: c9ba9470ca8d94c5 -Block 0011 [ 60]: a7ee2542ad140b41 -Block 0011 [ 61]: 37d3fbf1ea5e25ce -Block 0011 [ 62]: df5c2e87a48fcf7a -Block 0011 [ 63]: 96ea0a40093da6bc -Block 0011 [ 64]: 1832e3d9420b9254 -Block 0011 [ 65]: 26d02a9dd32e1691 -Block 0011 [ 66]: 42ae4f33f51cbb54 -Block 0011 [ 67]: f8cd3a46c99d6bc8 -Block 0011 [ 68]: ae0e89024a1a7111 -Block 0011 [ 69]: 54127d1e8d5dd168 -Block 0011 [ 70]: 01fde931daffd7f4 -Block 0011 [ 71]: 350c6e16723fdd1c -Block 0011 [ 72]: df22c95585648b1a -Block 0011 [ 73]: e1f0024942478c76 -Block 0011 [ 74]: 70335cf2f4de5df2 -Block 0011 [ 75]: cdbe12e0abb4823c -Block 0011 [ 76]: fde59debfdbaac10 -Block 0011 [ 77]: 0bff220a8928c2dc -Block 0011 [ 78]: 0461fa55d303407a -Block 0011 [ 79]: 1634a41d6c9a5f1a -Block 0011 [ 80]: 6e6e4cd6db594d4f -Block 0011 [ 81]: dd18e467511a09ee -Block 0011 [ 82]: 9bdf9e3b17fd4342 -Block 0011 [ 83]: 8609696d927795b9 -Block 0011 [ 84]: d6d3fbf43587b11e -Block 0011 [ 85]: 6991a74f5a870d29 -Block 0011 [ 86]: d9cd608fee2e6721 -Block 0011 [ 87]: 6170131c10cc2374 -Block 0011 [ 88]: b0ab65f7594f8cc5 -Block 0011 [ 89]: d7185a9e216c4c1e -Block 0011 [ 90]: dde483d99f7e02a1 -Block 0011 [ 91]: e083b70b71230d2f -Block 0011 [ 92]: 1af2c5c2bd1e6dfe -Block 0011 [ 93]: c21b1fe7adc10d54 -Block 0011 [ 94]: bad581e4fbd50269 -Block 0011 [ 95]: 2d635c846e09fa3b -Block 0011 [ 96]: c093b53ede074fc2 -Block 0011 [ 97]: 41d4e984f8ad23d8 -Block 0011 [ 98]: 8a2bce31da109bce -Block 0011 [ 99]: 9725a483e6c34623 -Block 0011 [100]: 13089cdee7c3f5f2 -Block 0011 [101]: 3d4419b6807b8bfb -Block 0011 [102]: 2b609b191757fa48 -Block 0011 [103]: b171e65fdc7a27d9 -Block 0011 [104]: 69b8c8e5323e729b -Block 0011 [105]: 82357f1cfbdf2208 -Block 0011 [106]: e68036deb4d37145 -Block 0011 [107]: 6eecd0042852d038 -Block 0011 [108]: bb449cc49f3b4219 -Block 0011 [109]: 53e78414e3c3fa7f -Block 0011 [110]: f26d647fda1a1903 -Block 0011 [111]: c7788d7a05cb74d4 -Block 0011 [112]: f91960b42f1ea818 -Block 0011 [113]: 4fffd18f0deae9fb -Block 0011 [114]: 5ac77014671515e8 -Block 0011 [115]: d01d29217b293089 -Block 0011 [116]: c987835d3b2757b1 -Block 0011 [117]: 1b9d12290c75783b -Block 0011 [118]: 1b609eb672703181 -Block 0011 [119]: f0d7bed8ef5544fe -Block 0011 [120]: fd908aa2b4d52443 -Block 0011 [121]: 03ac288fa342e752 -Block 0011 [122]: 3e131ef012aef122 -Block 0011 [123]: acbb9427eb6c4095 -Block 0011 [124]: 65779c01fd20ff68 -Block 0011 [125]: ce2a60b7bbb1e01e -Block 0011 [126]: 5774720a372271f5 -Block 0011 [127]: ea30c4ce0712381b -Block 0012 [ 0]: 1c2a63bac7c154c1 -Block 0012 [ 1]: 42508ad075a16b3a -Block 0012 [ 2]: 791f280551d06f3e -Block 0012 [ 3]: 348a853e2533a525 -Block 0012 [ 4]: 3df830f0a023d57f -Block 0012 [ 5]: 009821b9b5259d3b -Block 0012 [ 6]: 0473a5252522f400 -Block 0012 [ 7]: a4cc17e35e27a5d3 -Block 0012 [ 8]: 3cec4c0926ed9a1d -Block 0012 [ 9]: 92e1ebf0f81b264d -Block 0012 [ 10]: 043aac8959c4f50e -Block 0012 [ 11]: 8216989f36994386 -Block 0012 [ 12]: 6c7a46ec0f593b4a -Block 0012 [ 13]: 615d9bc53c8aafd4 -Block 0012 [ 14]: e69671624cf39231 -Block 0012 [ 15]: de31127ba2643136 -Block 0012 [ 16]: 2645ccbeb9cc81e6 -Block 0012 [ 17]: 7872e0f680327659 -Block 0012 [ 18]: 9db25e0c68ddf8f9 -Block 0012 [ 19]: 6f27907812ee7d29 -Block 0012 [ 20]: b656b4af253ea7e0 -Block 0012 [ 21]: 2178637bdfcf46b3 -Block 0012 [ 22]: 1035f16577c1ba85 -Block 0012 [ 23]: 8cbeee81e32da9a2 -Block 0012 [ 24]: 475ae5e8a1a7fd03 -Block 0012 [ 25]: cd32872310c4cf5b -Block 0012 [ 26]: 1300b982803803d2 -Block 0012 [ 27]: 07f8ba5cd1184097 -Block 0012 [ 28]: 76d7fca7033112cf -Block 0012 [ 29]: acc28de2c427f438 -Block 0012 [ 30]: 6828aef30f3ef56e -Block 0012 [ 31]: 4da395dae574e44c -Block 0012 [ 32]: 827494c27d25fb51 -Block 0012 [ 33]: c9b5d7e7cc3eec16 -Block 0012 [ 34]: e068185515567a4c -Block 0012 [ 35]: ed2d26c2c0ea4970 -Block 0012 [ 36]: 1780aea878a1a49c -Block 0012 [ 37]: c04af2793f6c3d3a -Block 0012 [ 38]: 13494fccd3d844b8 -Block 0012 [ 39]: 1dbe9064ca0da769 -Block 0012 [ 40]: 6c4938243bf4e221 -Block 0012 [ 41]: 49aeca73f743075f -Block 0012 [ 42]: 684b4dc878fb5a2a -Block 0012 [ 43]: 4d8c36434eccb40d -Block 0012 [ 44]: a5ab9e20d5b38fd0 -Block 0012 [ 45]: b46dcc6a69e362c7 -Block 0012 [ 46]: 625077c4ab8f7e5b -Block 0012 [ 47]: 2f2b6451831786fa -Block 0012 [ 48]: 29bd2a796a638e84 -Block 0012 [ 49]: 9e5f8787ba2edfed -Block 0012 [ 50]: 16ec9a39d20182ac -Block 0012 [ 51]: abe01ec3ab8b71e9 -Block 0012 [ 52]: 145e8d1c67bf159f -Block 0012 [ 53]: 50a981c572813f38 -Block 0012 [ 54]: 87977fd04b380373 -Block 0012 [ 55]: 6e72ee7f8a5f195c -Block 0012 [ 56]: 55298c77c6435c8c -Block 0012 [ 57]: d1ea5008f239e8bc -Block 0012 [ 58]: 2d2b1d358bea1c27 -Block 0012 [ 59]: 9d293b3e70505688 -Block 0012 [ 60]: 1f57a815b02dd03f -Block 0012 [ 61]: 5bd99c9650ebed7d -Block 0012 [ 62]: be52d8ff71651ed3 -Block 0012 [ 63]: 35f3a2d423c0edc9 -Block 0012 [ 64]: d43ec0fbc3dbed4e -Block 0012 [ 65]: eb53cea0ec093139 -Block 0012 [ 66]: c200c6a5337f3c77 -Block 0012 [ 67]: c0e16f0190ef51f8 -Block 0012 [ 68]: 6c0c98019fa49148 -Block 0012 [ 69]: 15906d5647aaea5c -Block 0012 [ 70]: 712a775873db7424 -Block 0012 [ 71]: 2eac1964eabdcae4 -Block 0012 [ 72]: e71e32396b0ad27b -Block 0012 [ 73]: bef6323dbbc3818c -Block 0012 [ 74]: a9dd5cfdb6630790 -Block 0012 [ 75]: f064029a11a00acd -Block 0012 [ 76]: 696332e154302e67 -Block 0012 [ 77]: e2582460cd2816ef -Block 0012 [ 78]: e59950b4cfaa467d -Block 0012 [ 79]: 5991d99e5d1bacef -Block 0012 [ 80]: 16d23dd64096e1ed -Block 0012 [ 81]: 984eb0ed25ed2394 -Block 0012 [ 82]: 2f755244e1fc2598 -Block 0012 [ 83]: cb708970664b867c -Block 0012 [ 84]: 2ef6c4c2da67430d -Block 0012 [ 85]: d7c59053f2ba40b8 -Block 0012 [ 86]: df85654b59aaab8f -Block 0012 [ 87]: 6fc5e4f54a421593 -Block 0012 [ 88]: a8ba9d179663aa0e -Block 0012 [ 89]: c5da879ae66728a6 -Block 0012 [ 90]: e220fbd3cee2b2fe -Block 0012 [ 91]: f8b1b1e10aeec07b -Block 0012 [ 92]: d7175c31f480cd3e -Block 0012 [ 93]: 3a79224610a8642b -Block 0012 [ 94]: 270b4264c407cd08 -Block 0012 [ 95]: 738f6bb7f9abbb48 -Block 0012 [ 96]: e7a11c9a50808fce -Block 0012 [ 97]: 8663ca2db53e308f -Block 0012 [ 98]: 92bfd65af2b01a33 -Block 0012 [ 99]: 67205230b49bc74c -Block 0012 [100]: 5b4a4df4a812b2e3 -Block 0012 [101]: 8d1454ccca03b57f -Block 0012 [102]: 269156b9cadc71d9 -Block 0012 [103]: 4f9606502988716f -Block 0012 [104]: 5afbbff2b0d632d1 -Block 0012 [105]: c4ff98688046c0fb -Block 0012 [106]: df1d7b1d65f4c708 -Block 0012 [107]: a5ded21243ff9887 -Block 0012 [108]: c1ed83564bac320c -Block 0012 [109]: 87644000cf3b6328 -Block 0012 [110]: 03eddf451f4582ad -Block 0012 [111]: 4e99bfef863aefe3 -Block 0012 [112]: f4c5c9a281af9741 -Block 0012 [113]: f00a08a68c220c3c -Block 0012 [114]: b7c633c54afc5771 -Block 0012 [115]: ecde6342173832d9 -Block 0012 [116]: 25290781e957d9b5 -Block 0012 [117]: 1885d88000e584ad -Block 0012 [118]: 03b8e9a7748e4481 -Block 0012 [119]: f207874f5d14dbc3 -Block 0012 [120]: 39c8600104de16cd -Block 0012 [121]: 90c31d4b18011207 -Block 0012 [122]: 11c96fb4b8548f7a -Block 0012 [123]: 1548cae3f9a6fee0 -Block 0012 [124]: e46b97ed40e220d7 -Block 0012 [125]: 59cd30aea307e20f -Block 0012 [126]: 7e774fa0cf2e25e4 -Block 0012 [127]: 368f296b22ac7048 -Block 0013 [ 0]: 690c233779fcd1a5 -Block 0013 [ 1]: 164d19b92fd845e5 -Block 0013 [ 2]: 4a60478f329d03d1 -Block 0013 [ 3]: f6e7a353dc1d8509 -Block 0013 [ 4]: 8c6c26e9bce3999c -Block 0013 [ 5]: 73d1dba4d13a7fa1 -Block 0013 [ 6]: de62d56f692c8b88 -Block 0013 [ 7]: 4029a641b255e05b -Block 0013 [ 8]: e849c487d21a109d -Block 0013 [ 9]: b3752eb956b5a28c -Block 0013 [ 10]: 43b04c0f444343df -Block 0013 [ 11]: da8b8019e3177dcf -Block 0013 [ 12]: 4e4512fa70430746 -Block 0013 [ 13]: 68d6ceb3dbcf3abb -Block 0013 [ 14]: a54ff7cacea91ee1 -Block 0013 [ 15]: f6f265399b8e3390 -Block 0013 [ 16]: 77a159a100d38741 -Block 0013 [ 17]: d2b1cca843b0244b -Block 0013 [ 18]: 562e3eeba500ed4a -Block 0013 [ 19]: fb0f37bdcece65db -Block 0013 [ 20]: 698b10976e3f51d2 -Block 0013 [ 21]: 88d07ea552c403e6 -Block 0013 [ 22]: 65d5ab4c88a0c847 -Block 0013 [ 23]: e0c49b553e82b0c2 -Block 0013 [ 24]: a85aa2f95bed56f2 -Block 0013 [ 25]: 8920d955defe3c8a -Block 0013 [ 26]: d62b529a0274d319 -Block 0013 [ 27]: fee24b797049ae16 -Block 0013 [ 28]: 16710bb090bc2451 -Block 0013 [ 29]: 41a2a3df035869da -Block 0013 [ 30]: 2e8a999878b3c0be -Block 0013 [ 31]: afa17424460f43a3 -Block 0013 [ 32]: 3ab13cd5fe21b763 -Block 0013 [ 33]: 6409ae0b067e5573 -Block 0013 [ 34]: 54add50ef70c3e80 -Block 0013 [ 35]: 778cae26c9dbabf1 -Block 0013 [ 36]: 1ad4e56c961eeeed -Block 0013 [ 37]: c74678ca700e7048 -Block 0013 [ 38]: a5014f9ba1895d62 -Block 0013 [ 39]: d5909f7f417177a1 -Block 0013 [ 40]: eba69c817c3aefb5 -Block 0013 [ 41]: 63d57343f3fabf6f -Block 0013 [ 42]: 0a2b03f5fbf2010c -Block 0013 [ 43]: c5ba82905af74eda -Block 0013 [ 44]: 983ce80682e205ea -Block 0013 [ 45]: 7b89eb6563073133 -Block 0013 [ 46]: 030427ac1d91dc06 -Block 0013 [ 47]: 2e5454dd24ed6d24 -Block 0013 [ 48]: 48c692282390170c -Block 0013 [ 49]: 6182b733e5fcda88 -Block 0013 [ 50]: 29be37f56c231a16 -Block 0013 [ 51]: 9863267f76bb14ac -Block 0013 [ 52]: dff4f3f9230b833f -Block 0013 [ 53]: f10677d82116f55e -Block 0013 [ 54]: c6e3bcdc02c40157 -Block 0013 [ 55]: 0e356fa761c71a5f -Block 0013 [ 56]: 267b619a0368396b -Block 0013 [ 57]: 323b19403de6fa35 -Block 0013 [ 58]: 4b4927454270439c -Block 0013 [ 59]: 56b4024ff5fa70b1 -Block 0013 [ 60]: 78aa7bf906495eea -Block 0013 [ 61]: 981cb071b1d932bb -Block 0013 [ 62]: 0119f99b266444ad -Block 0013 [ 63]: a63f7e923977a02d -Block 0013 [ 64]: ff44a639740dc6e0 -Block 0013 [ 65]: 6e78313d8ee1b7f0 -Block 0013 [ 66]: ebd4e567ff5d0bd4 -Block 0013 [ 67]: 04fc7e127f1363d5 -Block 0013 [ 68]: 9f854557dc7cdc2a -Block 0013 [ 69]: 123a85765004f761 -Block 0013 [ 70]: 25987189fdc1c199 -Block 0013 [ 71]: 7645eec6d56596eb -Block 0013 [ 72]: de3d640e12f4a2e4 -Block 0013 [ 73]: a7088a305483aafa -Block 0013 [ 74]: 69f5c4f93a37c42c -Block 0013 [ 75]: 5a86c47ac539bfcd -Block 0013 [ 76]: 7cf4ce6c9207945c -Block 0013 [ 77]: 0cf8a991245eda31 -Block 0013 [ 78]: bacb196f26dba8ec -Block 0013 [ 79]: 1990ff657d9e0653 -Block 0013 [ 80]: 5eef63b1d0fb79e9 -Block 0013 [ 81]: 693d7795607687c5 -Block 0013 [ 82]: 2f0e3e3df3258209 -Block 0013 [ 83]: e5821367c959a292 -Block 0013 [ 84]: bc6eb31a2247bc03 -Block 0013 [ 85]: 6c82f7f810850d1b -Block 0013 [ 86]: 465322d01d969ea6 -Block 0013 [ 87]: 0dd07730117537b3 -Block 0013 [ 88]: 5d99807522c99cfa -Block 0013 [ 89]: c22a3ee8bf8419e6 -Block 0013 [ 90]: 4751bb03660f437b -Block 0013 [ 91]: 951e7871e44de80f -Block 0013 [ 92]: 8f4b787a3bc1a4ac -Block 0013 [ 93]: 437f765c7c45ac61 -Block 0013 [ 94]: d6283c5b3a90ad12 -Block 0013 [ 95]: 54099af4833a840c -Block 0013 [ 96]: 89ae56f7a1608fe9 -Block 0013 [ 97]: 680a073db29a30ac -Block 0013 [ 98]: f4518f7e14a2fbf4 -Block 0013 [ 99]: 94858d8127d3fbf0 -Block 0013 [100]: 9964c0749ef69904 -Block 0013 [101]: dfbb7bf3bcc80371 -Block 0013 [102]: 2b177b792a857f68 -Block 0013 [103]: fb7575b39037ef56 -Block 0013 [104]: b1047efa3fcad858 -Block 0013 [105]: c53c4c7aad92dfad -Block 0013 [106]: a68bd64b9f9a8e32 -Block 0013 [107]: a1ffa9474cd19e6d -Block 0013 [108]: 51f0cf2b00ef294b -Block 0013 [109]: ad54422b421ba9b7 -Block 0013 [110]: b33b2166933e82cf -Block 0013 [111]: d998e290753b0c2e -Block 0013 [112]: d5b55ce657f61ff4 -Block 0013 [113]: 1a2ff90cc7ac584e -Block 0013 [114]: e85ee2492584f982 -Block 0013 [115]: 9c1cf32314ee8aeb -Block 0013 [116]: f1fa688c871d1bf9 -Block 0013 [117]: 169d32554781beaa -Block 0013 [118]: 523aed8c7d307c93 -Block 0013 [119]: 2b7b881cb3c586b7 -Block 0013 [120]: 394a238db0bf1022 -Block 0013 [121]: d89139f29d14d6db -Block 0013 [122]: 71ef3f099cd3352f -Block 0013 [123]: b420e528391858bf -Block 0013 [124]: 6ebce924b5f8b524 -Block 0013 [125]: 8df56ab35b4dc343 -Block 0013 [126]: fe60f549720c38e5 -Block 0013 [127]: 52b2844a8ad07c19 -Block 0014 [ 0]: 42f9a2216ea60ceb -Block 0014 [ 1]: f4be235f9165be42 -Block 0014 [ 2]: e789f9d5fa754b79 -Block 0014 [ 3]: 022854d55d727111 -Block 0014 [ 4]: 812eb2f323f74d88 -Block 0014 [ 5]: fbcf65d73d76eaac -Block 0014 [ 6]: a4fac1040fb1be3c -Block 0014 [ 7]: 9a540a2bc0a1aa09 -Block 0014 [ 8]: fa65ffe434f56fb5 -Block 0014 [ 9]: 4b065f486f802cb1 -Block 0014 [ 10]: 5879b735d57c9adb -Block 0014 [ 11]: 7b7917daf59c28d7 -Block 0014 [ 12]: 17200f95067efd16 -Block 0014 [ 13]: 5d205d348a48db4d -Block 0014 [ 14]: 42100e93335dca01 -Block 0014 [ 15]: 69618baff0475d71 -Block 0014 [ 16]: ead862e0e6687f0d -Block 0014 [ 17]: 653c798b5dc34141 -Block 0014 [ 18]: c53378cd5de69d1b -Block 0014 [ 19]: a86b278f7d653ce2 -Block 0014 [ 20]: 5ba4121570a62068 -Block 0014 [ 21]: ae1ef5ab3f8b769b -Block 0014 [ 22]: 0227f65cc1231b76 -Block 0014 [ 23]: a8e28a1702dbb594 -Block 0014 [ 24]: 03e66ff4e4a2b18f -Block 0014 [ 25]: 101a43cad5c5fe60 -Block 0014 [ 26]: 98eb2eb0a56028a0 -Block 0014 [ 27]: 5877b7de89886613 -Block 0014 [ 28]: cfd4e8cca45b1790 -Block 0014 [ 29]: e4b35e3874b9e876 -Block 0014 [ 30]: 14541160c6b3ee02 -Block 0014 [ 31]: dd81bacea364da1d -Block 0014 [ 32]: 36fb0d5cbbb8dae3 -Block 0014 [ 33]: a5e78dbb96f499fe -Block 0014 [ 34]: cb9e478672e4fca6 -Block 0014 [ 35]: 2fb70e58b6f44554 -Block 0014 [ 36]: 229f985536cfbdc5 -Block 0014 [ 37]: 4777ce4b21b955dc -Block 0014 [ 38]: 35bedadfd4af9b10 -Block 0014 [ 39]: f0eb52f55c675a29 -Block 0014 [ 40]: 6ff3abb4b0918527 -Block 0014 [ 41]: a5fca11483c388bc -Block 0014 [ 42]: d253b0c295c6fbf8 -Block 0014 [ 43]: df39a28a23b4f038 -Block 0014 [ 44]: d163372bfb6af489 -Block 0014 [ 45]: 1e1804bf5afe3fa8 -Block 0014 [ 46]: dab4f6f07c2bebf2 -Block 0014 [ 47]: 07b8936bc3533670 -Block 0014 [ 48]: c70835706442a1a7 -Block 0014 [ 49]: c60f346aa6eca9ad -Block 0014 [ 50]: 97a0ce931e61716f -Block 0014 [ 51]: 60a2ba4b96edb79c -Block 0014 [ 52]: b055188f8aba284a -Block 0014 [ 53]: a6043aa3ad7bec78 -Block 0014 [ 54]: f4c35bfce3ace67d -Block 0014 [ 55]: 319ccada848cdee2 -Block 0014 [ 56]: d0795590ea34a8b8 -Block 0014 [ 57]: e87a7307f237f419 -Block 0014 [ 58]: ae12cee379d66302 -Block 0014 [ 59]: 86b85724e1286c79 -Block 0014 [ 60]: 7894b054641720aa -Block 0014 [ 61]: 49e32fbda0747886 -Block 0014 [ 62]: a16876726931b8c0 -Block 0014 [ 63]: 95a87d1556254491 -Block 0014 [ 64]: 1b7359bdd4645944 -Block 0014 [ 65]: f177fc737aebc782 -Block 0014 [ 66]: 9e72721109423695 -Block 0014 [ 67]: b5fccf24cb0ea7d3 -Block 0014 [ 68]: 80a6b33ddc9b5720 -Block 0014 [ 69]: 9e2e62146504301b -Block 0014 [ 70]: 18f348c546a48b21 -Block 0014 [ 71]: e9c4c72be6bdbcc2 -Block 0014 [ 72]: ff301b1c853cd28f -Block 0014 [ 73]: b86477b7bfd084c2 -Block 0014 [ 74]: c74db1d1144db45b -Block 0014 [ 75]: 1555cafa0c364252 -Block 0014 [ 76]: 7282bf96c973f185 -Block 0014 [ 77]: 16fcda0df22d0d0a -Block 0014 [ 78]: bde4d5ba20822c22 -Block 0014 [ 79]: c27d9a170dfa7344 -Block 0014 [ 80]: bd663b25e9bd3e90 -Block 0014 [ 81]: 06995c1ac6b3f2c6 -Block 0014 [ 82]: 0ff746c47c5feafa -Block 0014 [ 83]: 370f75aa1c2aaacf -Block 0014 [ 84]: 1de1a575bba86945 -Block 0014 [ 85]: 9a1954a4c45cc63e -Block 0014 [ 86]: a2e4824e3e170256 -Block 0014 [ 87]: 1d435c8cf13aa8f5 -Block 0014 [ 88]: 47773d9a5c4e3b77 -Block 0014 [ 89]: b97ed8dc09f6d1fd -Block 0014 [ 90]: 2492b160c74c94b6 -Block 0014 [ 91]: 377877a2f5d232a7 -Block 0014 [ 92]: 19813e25319f5d5b -Block 0014 [ 93]: 2981dcd02bd36023 -Block 0014 [ 94]: 9c51ced5edc2f88a -Block 0014 [ 95]: bdfcc0f92340b53b -Block 0014 [ 96]: ca3f8d8ea0028190 -Block 0014 [ 97]: 6083dd598898d0df -Block 0014 [ 98]: b7c2764a629af855 -Block 0014 [ 99]: cb7b51f275a23764 -Block 0014 [100]: 0999e69569ff8654 -Block 0014 [101]: 75d419e7e4034cf1 -Block 0014 [102]: 9926c163ccf6fbc0 -Block 0014 [103]: 6f6fbfbc4634b106 -Block 0014 [104]: 99aab02824ac6428 -Block 0014 [105]: 755070d1503322d0 -Block 0014 [106]: 794e25994c009ffd -Block 0014 [107]: 86c42e4262d68dab -Block 0014 [108]: 36a474da4489ddbb -Block 0014 [109]: ea205d9048c07756 -Block 0014 [110]: b3b00cb88461299c -Block 0014 [111]: abd0616d54bf1f27 -Block 0014 [112]: 298326ff8b16010b -Block 0014 [113]: 736d092013ecf8e7 -Block 0014 [114]: c80706fa402b55cc -Block 0014 [115]: 643f6ca3cd72bb76 -Block 0014 [116]: 1e43fab3e955c081 -Block 0014 [117]: f81da96e09233646 -Block 0014 [118]: 63db4670f362122e -Block 0014 [119]: ffe8fa6827833188 -Block 0014 [120]: a19d0f8c1f840a05 -Block 0014 [121]: a330e308ccb789fe -Block 0014 [122]: 4af172102042a852 -Block 0014 [123]: 78fe11656db11997 -Block 0014 [124]: ffd3f265c3bcad3b -Block 0014 [125]: 40939ffec182cb0f -Block 0014 [126]: f2e10f47cfed9d45 -Block 0014 [127]: 0db682170c37d732 -Block 0015 [ 0]: 5c60ebf343964379 -Block 0015 [ 1]: c844eb5bb2f5d7ee -Block 0015 [ 2]: 8c18a6010c78383f -Block 0015 [ 3]: fc52029ab145346b -Block 0015 [ 4]: 05f78944f5618755 -Block 0015 [ 5]: 6833faa1b7925ec6 -Block 0015 [ 6]: 142dcb8cdbcf985f -Block 0015 [ 7]: 1eec4fe13e3eb436 -Block 0015 [ 8]: 093270287ff6c154 -Block 0015 [ 9]: af0492e23c6948c4 -Block 0015 [ 10]: 2d6209d2e3bb36c9 -Block 0015 [ 11]: 5dc0d600021d81cb -Block 0015 [ 12]: 2efc1d348d9dfd50 -Block 0015 [ 13]: 80d5311f1b323f28 -Block 0015 [ 14]: 65b6b8c85e49651d -Block 0015 [ 15]: dd83f1aaa29f2b5c -Block 0015 [ 16]: dd0caea719886d54 -Block 0015 [ 17]: bd0737cfb15066fa -Block 0015 [ 18]: 4ee7af30812dba7a -Block 0015 [ 19]: 592e32c4663cf43b -Block 0015 [ 20]: 8115137c067d43c0 -Block 0015 [ 21]: 2bc8f96f7bd33335 -Block 0015 [ 22]: b42162e04c360f71 -Block 0015 [ 23]: 4c93a2bbbefa40c1 -Block 0015 [ 24]: b670eef90f8a3b4b -Block 0015 [ 25]: 2f0133f2465e20d9 -Block 0015 [ 26]: 6f5b35c7183bbb58 -Block 0015 [ 27]: 54863424d1104479 -Block 0015 [ 28]: c110593d9561e19e -Block 0015 [ 29]: 85915bdf108cfb8d -Block 0015 [ 30]: 564c2c9d12a17c32 -Block 0015 [ 31]: ae51b6cd7d8dba85 -Block 0015 [ 32]: 86801cbdd9edf13c -Block 0015 [ 33]: 4627159cacf299f6 -Block 0015 [ 34]: fcec5f216cbc609b -Block 0015 [ 35]: 92da6375678dca6d -Block 0015 [ 36]: 23237b4aca3e3087 -Block 0015 [ 37]: 778ced58723f4db7 -Block 0015 [ 38]: f8b8ac5c0c11a6db -Block 0015 [ 39]: ca5a9cfa51fb092b -Block 0015 [ 40]: ad9c36454a7b4555 -Block 0015 [ 41]: c2ec64eaed0476e2 -Block 0015 [ 42]: 9e42f0a6d2ecedf4 -Block 0015 [ 43]: 5ec5baacc56984a4 -Block 0015 [ 44]: 48cc00c537ad73f2 -Block 0015 [ 45]: 0e1950a5b40721b5 -Block 0015 [ 46]: 2219b901e1de2332 -Block 0015 [ 47]: 54da4a3f5776bb19 -Block 0015 [ 48]: 605cd0995671b863 -Block 0015 [ 49]: 6f565b0337c7940a -Block 0015 [ 50]: b6f7c44fa6ddde1c -Block 0015 [ 51]: b9bdbd9710ee5e3d -Block 0015 [ 52]: 233f90f4ae9a2661 -Block 0015 [ 53]: 0ad62c6866e21f0e -Block 0015 [ 54]: 21f27ed906fda36b -Block 0015 [ 55]: 8f1a7c3d6e92ab09 -Block 0015 [ 56]: 9b9188cec8960b71 -Block 0015 [ 57]: e81af96c30aa9ea0 -Block 0015 [ 58]: e10ba0b8ce762d3b -Block 0015 [ 59]: f6f1842458770d66 -Block 0015 [ 60]: b0ea72e76bb8b2c0 -Block 0015 [ 61]: 48735c0b7a684c9b -Block 0015 [ 62]: 3700939516de0b9f -Block 0015 [ 63]: 99ffb1b3c77a5911 -Block 0015 [ 64]: 3b0bea89f2d75973 -Block 0015 [ 65]: 7284d5a6e4ca73fa -Block 0015 [ 66]: fc2980004fa1d6fd -Block 0015 [ 67]: 85204a0328b701df -Block 0015 [ 68]: 951945bef9422e4b -Block 0015 [ 69]: 27fd0976cbd1aae8 -Block 0015 [ 70]: d6884a6d8c94694f -Block 0015 [ 71]: 097442b7e5f413b1 -Block 0015 [ 72]: 1c8239a020d0d2ed -Block 0015 [ 73]: 26e32bdf5c5f287a -Block 0015 [ 74]: 8eec296926a32040 -Block 0015 [ 75]: 40925c65e41f704c -Block 0015 [ 76]: 6dfc1b6036ac83f1 -Block 0015 [ 77]: 4372772306842f15 -Block 0015 [ 78]: 85d08be9df2914df -Block 0015 [ 79]: b6a217b37bd41e7c -Block 0015 [ 80]: 0c179dd3a6f1d8c3 -Block 0015 [ 81]: 83acfb8c99e2915f -Block 0015 [ 82]: f67b69c627380be8 -Block 0015 [ 83]: eb83f410554ab2d4 -Block 0015 [ 84]: a9b1da448e9c0e18 -Block 0015 [ 85]: c62a104866a6899f -Block 0015 [ 86]: b512109239c786e9 -Block 0015 [ 87]: d3d30893c8ef2d5b -Block 0015 [ 88]: 185fb60f6d5b6fd0 -Block 0015 [ 89]: 20b710b22ec06809 -Block 0015 [ 90]: 9ea3919f273b086c -Block 0015 [ 91]: fb4d1bba70e26bc3 -Block 0015 [ 92]: e237ab18824c0f9e -Block 0015 [ 93]: 4fa18dbf16693282 -Block 0015 [ 94]: 5f515456d7cf884b -Block 0015 [ 95]: dd01c2e260558f84 -Block 0015 [ 96]: b851d646c4273226 -Block 0015 [ 97]: 153ff9a1c2fad967 -Block 0015 [ 98]: efb1a8348b2034c0 -Block 0015 [ 99]: 39321e6706e1ca32 -Block 0015 [100]: 71f73d91cd992df2 -Block 0015 [101]: 47b532cfb7d073be -Block 0015 [102]: f9dabbfb4e3dd13f -Block 0015 [103]: b70c10269560f42a -Block 0015 [104]: 5980fa7986b2174a -Block 0015 [105]: bd9ecb17969cb07d -Block 0015 [106]: f05da06e851b53bc -Block 0015 [107]: 433e3504d76870af -Block 0015 [108]: cb5a0c78eab9e338 -Block 0015 [109]: e652db008f460a5d -Block 0015 [110]: cbbbc86cb666048b -Block 0015 [111]: 81ff315c2fc6c975 -Block 0015 [112]: 8399e727faa22a09 -Block 0015 [113]: eb0b9969885f2309 -Block 0015 [114]: 3b327c3fe4446450 -Block 0015 [115]: b3c0c30bd7a48a78 -Block 0015 [116]: 33d547fef50f583a -Block 0015 [117]: 9862ae613d5f6a05 -Block 0015 [118]: f77ba6cef1eef1b9 -Block 0015 [119]: 74ecf3320c1d18f5 -Block 0015 [120]: 04f27b3d8db404fa -Block 0015 [121]: e7c42ef35dbe1e69 -Block 0015 [122]: 9f722564ad1f94ca -Block 0015 [123]: 3808033cc8a6264a -Block 0015 [124]: 1948446042580abc -Block 0015 [125]: 025eb81c6f5bd44c -Block 0015 [126]: d2cdfcab1c7cc163 -Block 0015 [127]: deb4ea7420a60a38 -Block 0016 [ 0]: 8ef71222e25e33a7 -Block 0016 [ 1]: 5b788bacd4a161d2 -Block 0016 [ 2]: 4c085a5d4b387162 -Block 0016 [ 3]: fb00f740c0bff138 -Block 0016 [ 4]: 45f63e1874e69080 -Block 0016 [ 5]: 78a2f2d260a54dde -Block 0016 [ 6]: 8cb461cb1355137a -Block 0016 [ 7]: 7b7e3cd55639f758 -Block 0016 [ 8]: ba7f598ebc7d0a24 -Block 0016 [ 9]: 9cd3d7fa9b61dfba -Block 0016 [ 10]: 0f4bfda84f8bdbae -Block 0016 [ 11]: 43d53060d71491f4 -Block 0016 [ 12]: 7b4a2d3825164639 -Block 0016 [ 13]: 509a1b3858bd2bed -Block 0016 [ 14]: 792e1edbc1ea84b1 -Block 0016 [ 15]: be636d230f55cf24 -Block 0016 [ 16]: f4ce5fe0d5f89ea6 -Block 0016 [ 17]: d3bec22193b9fa85 -Block 0016 [ 18]: c50401a757676486 -Block 0016 [ 19]: 3801152878206e10 -Block 0016 [ 20]: a6f32c77460a68ca -Block 0016 [ 21]: 5be9be1aa491771f -Block 0016 [ 22]: b8d681e557a6b464 -Block 0016 [ 23]: b3d7a221ff57bdbd -Block 0016 [ 24]: 88c49fc0e90d2982 -Block 0016 [ 25]: ff22dc20add2096e -Block 0016 [ 26]: 6688f9c931036c83 -Block 0016 [ 27]: fbf4a2f65116f128 -Block 0016 [ 28]: 708dfca5957923bd -Block 0016 [ 29]: 5cab6655f730ead8 -Block 0016 [ 30]: 652c868b4e0973c6 -Block 0016 [ 31]: 7faf39e6e68db8f4 -Block 0016 [ 32]: 5ed3b7e45168776e -Block 0016 [ 33]: 3233f0afc73f8fc9 -Block 0016 [ 34]: 4f61d181ed54920e -Block 0016 [ 35]: 45af51628268a386 -Block 0016 [ 36]: b81809f7405da7c2 -Block 0016 [ 37]: 7f04e166e18f898e -Block 0016 [ 38]: 9461d15e80360ddf -Block 0016 [ 39]: bf0279fe577f4a56 -Block 0016 [ 40]: 68eebc0b0f81a4f6 -Block 0016 [ 41]: 16a7d9859c25a3b8 -Block 0016 [ 42]: aad09c771d7c5046 -Block 0016 [ 43]: 2e83257346b21f51 -Block 0016 [ 44]: 212616f504644c05 -Block 0016 [ 45]: 25b6ee612334f735 -Block 0016 [ 46]: d0f8fc39fabf5258 -Block 0016 [ 47]: c231ff70ac3bb48c -Block 0016 [ 48]: e5a4d9bdc0325012 -Block 0016 [ 49]: 7b3fc5655f613956 -Block 0016 [ 50]: ec5b647ca9a4b333 -Block 0016 [ 51]: 8975b8bbfa7b5b64 -Block 0016 [ 52]: c9afd74a277d31f9 -Block 0016 [ 53]: d6109dfb79b3199e -Block 0016 [ 54]: 503a79cbe90d1000 -Block 0016 [ 55]: 6b96e1111aa5b4a6 -Block 0016 [ 56]: 62e48b5640dc72bb -Block 0016 [ 57]: 0323e21f38eb7a85 -Block 0016 [ 58]: c2b3329aa089ea80 -Block 0016 [ 59]: 7e6de45346324c73 -Block 0016 [ 60]: 30d34ff4baf1ad6b -Block 0016 [ 61]: e70b1ecb101c7a8f -Block 0016 [ 62]: f6f4c4815d5c6443 -Block 0016 [ 63]: 84ddf532213ee089 -Block 0016 [ 64]: 3383dc784306f5c5 -Block 0016 [ 65]: d410866c9820fb80 -Block 0016 [ 66]: 9ad1a811918ae747 -Block 0016 [ 67]: 99cccd5f357e9e45 -Block 0016 [ 68]: d4bcab0da4749c7f -Block 0016 [ 69]: ca36322b45b520d3 -Block 0016 [ 70]: 9bbe0827e6440146 -Block 0016 [ 71]: 5ea0191d0bd9d6bc -Block 0016 [ 72]: b6b1d7c9f8b3b365 -Block 0016 [ 73]: 7b14bfce8ce14778 -Block 0016 [ 74]: 15733305ad30a8b0 -Block 0016 [ 75]: 3b3b8bbef4e20874 -Block 0016 [ 76]: 007b2c2770bbce68 -Block 0016 [ 77]: 9580dbbc49161c87 -Block 0016 [ 78]: e996e4a0fb606ff5 -Block 0016 [ 79]: 8166385b61c551c9 -Block 0016 [ 80]: 905b3a4586c9628f -Block 0016 [ 81]: 6c3538319960701a -Block 0016 [ 82]: 726852503e929623 -Block 0016 [ 83]: 0d1370de52be24ca -Block 0016 [ 84]: 137c4cd293095677 -Block 0016 [ 85]: e1a533c284ade63e -Block 0016 [ 86]: aa03ff8f2d48e0e8 -Block 0016 [ 87]: 8070a0ca0533d5e9 -Block 0016 [ 88]: de4f9b80be79236b -Block 0016 [ 89]: f61dd73e6ff6cb28 -Block 0016 [ 90]: b6d6b411c7d73e90 -Block 0016 [ 91]: 02675d6dda93734b -Block 0016 [ 92]: 52b5fe33ff0edf12 -Block 0016 [ 93]: 139bc3df49f3b211 -Block 0016 [ 94]: cfe9120dd35237a8 -Block 0016 [ 95]: f7d4041b2c512498 -Block 0016 [ 96]: ec5e66bb264d3022 -Block 0016 [ 97]: 57417ff639782925 -Block 0016 [ 98]: 7593670d37a496db -Block 0016 [ 99]: feab9e35be512f28 -Block 0016 [100]: cb506d5764fed86b -Block 0016 [101]: 6aec183ee8e3745f -Block 0016 [102]: ec2dd19767a5734d -Block 0016 [103]: 7b6358cc3b32a264 -Block 0016 [104]: d04380da36957c7f -Block 0016 [105]: 9ba5769ddfaa6a3d -Block 0016 [106]: 3aeb202ee3f852fd -Block 0016 [107]: 6ad40cabdb80aaf4 -Block 0016 [108]: a6c3dac45ee8a5c1 -Block 0016 [109]: e9cb6215b9882b7c -Block 0016 [110]: 625f58ff78a5786e -Block 0016 [111]: 2cef23f4a3b5387e -Block 0016 [112]: 1aba2156c5cc14ed -Block 0016 [113]: 70778bb6caf8e015 -Block 0016 [114]: b79817079fa67733 -Block 0016 [115]: 2040c00a18883d6f -Block 0016 [116]: 412e281fbfde7312 -Block 0016 [117]: 130fb0debdad3f8e -Block 0016 [118]: ce30ca55fc0c9a38 -Block 0016 [119]: 45010a54f0da2809 -Block 0016 [120]: b1f29bcd5a661b0d -Block 0016 [121]: f5461d4639986c9f -Block 0016 [122]: 79839bdaa491069e -Block 0016 [123]: eb8c090fbf0d2957 -Block 0016 [124]: f7a83b1156b6ffe4 -Block 0016 [125]: aaed1d193830d24e -Block 0016 [126]: b224c4377f85bc52 -Block 0016 [127]: 33f5586f84573cea -Block 0017 [ 0]: 02fe7e853ebe0d0f -Block 0017 [ 1]: e67e2c7ef9905707 -Block 0017 [ 2]: bd081291079d349f -Block 0017 [ 3]: ce214e31c447258f -Block 0017 [ 4]: 69f77c776aef74ac -Block 0017 [ 5]: 3ef5b6d0c3112146 -Block 0017 [ 6]: 09e582516b1c1946 -Block 0017 [ 7]: 5435e0c7d1062de4 -Block 0017 [ 8]: df4b0f596e780cc0 -Block 0017 [ 9]: 0b0d0a7707db157a -Block 0017 [ 10]: ca853fdaf1f30538 -Block 0017 [ 11]: dbc61bec8a0a7bcd -Block 0017 [ 12]: bbf288024ff1b4bd -Block 0017 [ 13]: 8faf22bafbdda20a -Block 0017 [ 14]: 2de1c40ca884f4f8 -Block 0017 [ 15]: ef1a6ab15a6bc297 -Block 0017 [ 16]: 8e7e3775b6e620ef -Block 0017 [ 17]: b73ee4a9b5447bd8 -Block 0017 [ 18]: a7c9c64002e7de6c -Block 0017 [ 19]: 856743efdc51e1f2 -Block 0017 [ 20]: 86c9fae9e825e51d -Block 0017 [ 21]: b46144dc2d2bd13e -Block 0017 [ 22]: bb5fc5f58afe9f3d -Block 0017 [ 23]: 72565138c0c0de3f -Block 0017 [ 24]: d84fe0d08aeec7f4 -Block 0017 [ 25]: d82d1fe736931013 -Block 0017 [ 26]: 553ccfd5d897edd3 -Block 0017 [ 27]: 1946897a258ceea8 -Block 0017 [ 28]: 478f4e0bb4d26feb -Block 0017 [ 29]: e5d7b422fce1d6ef -Block 0017 [ 30]: d20534b5858c1f2e -Block 0017 [ 31]: 2d337040a6af6b92 -Block 0017 [ 32]: 54b35c906bfc0254 -Block 0017 [ 33]: c576354c4fed88e2 -Block 0017 [ 34]: 855ef7a03ddc9780 -Block 0017 [ 35]: 02ae016abd455038 -Block 0017 [ 36]: 5b08b4330a0f36b9 -Block 0017 [ 37]: e701a20db187fa01 -Block 0017 [ 38]: 69f8c2535b667d31 -Block 0017 [ 39]: 0583ad87707f1166 -Block 0017 [ 40]: 6c264bad170d16a1 -Block 0017 [ 41]: 564e696401b54e74 -Block 0017 [ 42]: 8e1acd3b5a0ad13d -Block 0017 [ 43]: ce1e5f83383e7882 -Block 0017 [ 44]: 177d21beb37812d0 -Block 0017 [ 45]: 4676715efd422319 -Block 0017 [ 46]: 780a06261172d470 -Block 0017 [ 47]: d9632d7e70419064 -Block 0017 [ 48]: 02b3db83a3af41c3 -Block 0017 [ 49]: a6e65a316272a79c -Block 0017 [ 50]: a594b0086e916d24 -Block 0017 [ 51]: 0b064fce44a2a76e -Block 0017 [ 52]: 2432d7db8b6f7667 -Block 0017 [ 53]: 6b2be3b92c8db847 -Block 0017 [ 54]: 1bbce28d4fb4dda3 -Block 0017 [ 55]: 0a5c3648ed841873 -Block 0017 [ 56]: 4b4c24e1bfaa0eac -Block 0017 [ 57]: 215b198b57484d44 -Block 0017 [ 58]: 7e28db06c4967f06 -Block 0017 [ 59]: 39e94d6e13a8808d -Block 0017 [ 60]: a50a0f8831791cb8 -Block 0017 [ 61]: 206ae656ceea22ef -Block 0017 [ 62]: eb9e7198a871b113 -Block 0017 [ 63]: f787d735bd1a533a -Block 0017 [ 64]: 095f66cb5f1c248c -Block 0017 [ 65]: 80fc162065b052c9 -Block 0017 [ 66]: 153b6e9c7c97401c -Block 0017 [ 67]: f4a9643d056f0a72 -Block 0017 [ 68]: bc049b48bbfce9a1 -Block 0017 [ 69]: 36ed38a3b7ea84ad -Block 0017 [ 70]: cb6f51ee30ecd90a -Block 0017 [ 71]: ac3a5ca12a82be94 -Block 0017 [ 72]: 468d587d7ba0a88f -Block 0017 [ 73]: 6f907170b9e7aa5b -Block 0017 [ 74]: a9fd5366ca960483 -Block 0017 [ 75]: fbb9bc4c359f1468 -Block 0017 [ 76]: f226fad7fc553d60 -Block 0017 [ 77]: 048d6944e0ca29fb -Block 0017 [ 78]: bb318db94c95df18 -Block 0017 [ 79]: 105509a613c5abd8 -Block 0017 [ 80]: e332fdec7d180a2d -Block 0017 [ 81]: 0eee4c4474ae8711 -Block 0017 [ 82]: 6ab584eaec00b13d -Block 0017 [ 83]: a83bd159c1e167a6 -Block 0017 [ 84]: 9c34d31dd5cacd55 -Block 0017 [ 85]: 7293faa10f50cb2f -Block 0017 [ 86]: 762dd1ef8251fad0 -Block 0017 [ 87]: 2811a9f56bd43318 -Block 0017 [ 88]: 07519086e22d47c0 -Block 0017 [ 89]: 86f9d58e400448d8 -Block 0017 [ 90]: e232d4b04455bb74 -Block 0017 [ 91]: cf556841d4f2a45d -Block 0017 [ 92]: 491b78ca34525eda -Block 0017 [ 93]: 6a082b3b72e71133 -Block 0017 [ 94]: 4e1647256eb998ee -Block 0017 [ 95]: 08a31dcfd48be9bb -Block 0017 [ 96]: 8a4e4a5b57cdf1aa -Block 0017 [ 97]: 5b7bd8bf7ec28733 -Block 0017 [ 98]: b9c55f7917141bc2 -Block 0017 [ 99]: 980b698d90b954b8 -Block 0017 [100]: baa10262b146c465 -Block 0017 [101]: 44d9ccb900b6f193 -Block 0017 [102]: 4fc6aa48bb32c460 -Block 0017 [103]: c28c6acbc1be8628 -Block 0017 [104]: 54cc0cb3ddbae117 -Block 0017 [105]: 1720fbfe18c9b3ef -Block 0017 [106]: bfab05e66a69aaa0 -Block 0017 [107]: a71a908f786c34a9 -Block 0017 [108]: 5ee97817c670b28c -Block 0017 [109]: 535cc2a0664dd333 -Block 0017 [110]: db8351e905bddff4 -Block 0017 [111]: 1a2e45990fd03ab8 -Block 0017 [112]: ad73b205252daa73 -Block 0017 [113]: 8e12bdbe877b55f8 -Block 0017 [114]: e4b688e3c50dbec2 -Block 0017 [115]: e1bcb0ee231819b0 -Block 0017 [116]: ce3c23e03b3ef2e2 -Block 0017 [117]: 6432e7536ae6ccad -Block 0017 [118]: 20f0e04af94a13b5 -Block 0017 [119]: 7736490bd70914ae -Block 0017 [120]: 7024a116d4af3b76 -Block 0017 [121]: ab9e8c2f372ff436 -Block 0017 [122]: 1d545892a1065e03 -Block 0017 [123]: b0f4f3c0dfaeb2cc -Block 0017 [124]: 74de51d4e9f3d9f6 -Block 0017 [125]: a0b38d15ed7bf487 -Block 0017 [126]: 33a46ece14805c89 -Block 0017 [127]: 834fa9ef3ef24bcb -Block 0018 [ 0]: 1a242ce230997d9b -Block 0018 [ 1]: 27975054b29babe8 -Block 0018 [ 2]: 18762553e598c29f -Block 0018 [ 3]: db01e8d1a2ab9376 -Block 0018 [ 4]: 7bb81b4dd6cc2115 -Block 0018 [ 5]: 02cc7040043a1d92 -Block 0018 [ 6]: ae9f9edf3b6fce7f -Block 0018 [ 7]: c423921b660990a1 -Block 0018 [ 8]: 281a011bcbeece96 -Block 0018 [ 9]: 2983c2b72941eaa8 -Block 0018 [ 10]: 183e1e12a8798776 -Block 0018 [ 11]: 6d09aaa1212c44c3 -Block 0018 [ 12]: d4fe7f0108acac6c -Block 0018 [ 13]: e8c816784b6ef0f6 -Block 0018 [ 14]: b78c7e808a211ac5 -Block 0018 [ 15]: 31c20264a10ba60f -Block 0018 [ 16]: b08a505efef753d3 -Block 0018 [ 17]: 3e942daa0e5f1ea5 -Block 0018 [ 18]: 9b45f7e39e5ac395 -Block 0018 [ 19]: f94807bef7c72762 -Block 0018 [ 20]: aab80003ae994d98 -Block 0018 [ 21]: 15aec49efb7568c1 -Block 0018 [ 22]: cb17490b118d47d4 -Block 0018 [ 23]: abedd85d337b6148 -Block 0018 [ 24]: e4b422270e181995 -Block 0018 [ 25]: a60a9d9e401cb171 -Block 0018 [ 26]: 9e3d0787cf999dba -Block 0018 [ 27]: 47c6e6f979d72e4d -Block 0018 [ 28]: 0120cf5c8d5d8d29 -Block 0018 [ 29]: 5914b6ac500cabe0 -Block 0018 [ 30]: d4844b8e42b295bf -Block 0018 [ 31]: d11cb644b0aa6b16 -Block 0018 [ 32]: 34a280f5c6861b00 -Block 0018 [ 33]: 941fdabe32af2a3e -Block 0018 [ 34]: ed5f13ac3dfa8b17 -Block 0018 [ 35]: e40211257d153bb5 -Block 0018 [ 36]: 3ebecfce85fddabc -Block 0018 [ 37]: b058f2daa35d0659 -Block 0018 [ 38]: 6e81776227dc1de4 -Block 0018 [ 39]: 903cdd86ab044958 -Block 0018 [ 40]: db80e50ca568989e -Block 0018 [ 41]: b3a2667bf1afb19d -Block 0018 [ 42]: 2fb3b686e259b527 -Block 0018 [ 43]: 9d502c5be8f047e9 -Block 0018 [ 44]: 5ebe6a9c788aa7c3 -Block 0018 [ 45]: 0129219b3ab99be5 -Block 0018 [ 46]: 76fe8083ac5bc860 -Block 0018 [ 47]: b25a5c9803e15174 -Block 0018 [ 48]: 8e41588d22498da3 -Block 0018 [ 49]: 535d49cbcce974ee -Block 0018 [ 50]: 5ea7114ad5badab0 -Block 0018 [ 51]: eb274b50e0dd9f1a -Block 0018 [ 52]: ab155492a5c70b5f -Block 0018 [ 53]: e258df1ff509eef8 -Block 0018 [ 54]: 5a695278ef55ceab -Block 0018 [ 55]: 9e161114a82e15ef -Block 0018 [ 56]: 170045e4e9954260 -Block 0018 [ 57]: a56a50835b800700 -Block 0018 [ 58]: a23ce122ac1279da -Block 0018 [ 59]: f575b95bee91b087 -Block 0018 [ 60]: 8fc0e92bdd552538 -Block 0018 [ 61]: 288931bff9509197 -Block 0018 [ 62]: c387b8567a16558e -Block 0018 [ 63]: 5dfe7026d392410e -Block 0018 [ 64]: 77031b0bc52274b4 -Block 0018 [ 65]: 9768e068ba0a897f -Block 0018 [ 66]: 838fe9b83e9f8539 -Block 0018 [ 67]: 8223f105c1d0479b -Block 0018 [ 68]: 7b75e46b05d940c8 -Block 0018 [ 69]: c4588f5474a26ae8 -Block 0018 [ 70]: 1951941657f37da6 -Block 0018 [ 71]: 23f8893a1575ec0d -Block 0018 [ 72]: b2fd7ad7278072df -Block 0018 [ 73]: 4a4c3e999cfc173c -Block 0018 [ 74]: bd7589d499563076 -Block 0018 [ 75]: ae61c35742a7b0f9 -Block 0018 [ 76]: 3322400c35475fb9 -Block 0018 [ 77]: 65718a454c86e9d7 -Block 0018 [ 78]: 95c19f7fe564841f -Block 0018 [ 79]: c0afa7b93be8a16e -Block 0018 [ 80]: 610392365382be84 -Block 0018 [ 81]: 3d8894c43775de2e -Block 0018 [ 82]: a3c3a715cabe7fea -Block 0018 [ 83]: 065ab25ffcef32e7 -Block 0018 [ 84]: 33981a456b7eacd5 -Block 0018 [ 85]: 8beb1382748f3cb5 -Block 0018 [ 86]: 5dea419f8f0ee480 -Block 0018 [ 87]: d17e8c3ce9bed985 -Block 0018 [ 88]: 80e3414b6a1d33e8 -Block 0018 [ 89]: fe3e4f8b5de4d95c -Block 0018 [ 90]: 0eb88acb805e30a4 -Block 0018 [ 91]: caa8daa0063324c6 -Block 0018 [ 92]: 8a84c2e5487490c6 -Block 0018 [ 93]: 92c0919cce8933e0 -Block 0018 [ 94]: 95e40747a89ec3f8 -Block 0018 [ 95]: c94a85345a36fb98 -Block 0018 [ 96]: 4884a40550574ea6 -Block 0018 [ 97]: 98aef193a0b4195c -Block 0018 [ 98]: 547605d40d5874b5 -Block 0018 [ 99]: bcf2921c10084e3b -Block 0018 [100]: 2ae0acda27100af9 -Block 0018 [101]: b838891a6385a123 -Block 0018 [102]: d4ceec21e572c544 -Block 0018 [103]: 02d799fd3a0d43a8 -Block 0018 [104]: 874c74cf56e66a28 -Block 0018 [105]: 455ec04f0c6f644b -Block 0018 [106]: 794d622cefeb3142 -Block 0018 [107]: 397cc3fb58f243fd -Block 0018 [108]: bfce9c65d6e547dc -Block 0018 [109]: 3fc535b6747dda96 -Block 0018 [110]: b232041172c61955 -Block 0018 [111]: d0866b7afc724904 -Block 0018 [112]: 1bd0e861a1832f90 -Block 0018 [113]: a5b46e83ec65fccf -Block 0018 [114]: 14bf4cfaf58434ac -Block 0018 [115]: c6722ca70b88aec5 -Block 0018 [116]: 43f4f75ed575746b -Block 0018 [117]: 318dee187f44b2ef -Block 0018 [118]: 7718e9e01d747b67 -Block 0018 [119]: eabe624668bfdf10 -Block 0018 [120]: 86b91fdc534cd49b -Block 0018 [121]: de0d5d5ad7e1bd04 -Block 0018 [122]: 470fdb1caec64506 -Block 0018 [123]: 5ad95fcaef3c3781 -Block 0018 [124]: f3da0001aa2f20a5 -Block 0018 [125]: ea4df80b5c7b274f -Block 0018 [126]: 5e422b2276b364e3 -Block 0018 [127]: 2daba476dc742f98 -Block 0019 [ 0]: 5292bf204d008798 -Block 0019 [ 1]: 7ebaeba170dc400b -Block 0019 [ 2]: c8878105fd55f1b2 -Block 0019 [ 3]: a245621c86d0a8e3 -Block 0019 [ 4]: 636ca9abda535b34 -Block 0019 [ 5]: fd6e38f15d0d651f -Block 0019 [ 6]: 8b9def75cef5e50f -Block 0019 [ 7]: 0b23ac908432ea37 -Block 0019 [ 8]: b039c7c46ac081e9 -Block 0019 [ 9]: 3ca943597d747790 -Block 0019 [ 10]: 9e8849ca90b39e95 -Block 0019 [ 11]: e45654ea0a38a7f9 -Block 0019 [ 12]: 9f4c310ed74d5d09 -Block 0019 [ 13]: e29417a8eb9b0064 -Block 0019 [ 14]: 7f6b0ee1b68de286 -Block 0019 [ 15]: f871922b573a0e94 -Block 0019 [ 16]: 4f40a6cf457ef1fd -Block 0019 [ 17]: a7ced1866505a14b -Block 0019 [ 18]: 1c266357ac946c5c -Block 0019 [ 19]: 52fc52cc033b0ea3 -Block 0019 [ 20]: ebf88c70993e3715 -Block 0019 [ 21]: f19fb0dc686bd492 -Block 0019 [ 22]: 1da1a221153ee7f9 -Block 0019 [ 23]: 4ac6a02ae545485f -Block 0019 [ 24]: 5eed7871fbd8b74d -Block 0019 [ 25]: 930228abdbbcec23 -Block 0019 [ 26]: 856ae86b5eaa828b -Block 0019 [ 27]: 034fe05023dd4d48 -Block 0019 [ 28]: c26d7f4c8b06ef17 -Block 0019 [ 29]: c9de1f992e2271b0 -Block 0019 [ 30]: 875d1a7e35ab78ca -Block 0019 [ 31]: 47ae3b6799be5a90 -Block 0019 [ 32]: acd7d3791262cf96 -Block 0019 [ 33]: 656cb43289c97db8 -Block 0019 [ 34]: 8066231473820839 -Block 0019 [ 35]: 230d998ade75e245 -Block 0019 [ 36]: ee23d7552097aaa4 -Block 0019 [ 37]: c545ef4eb6d12dff -Block 0019 [ 38]: ae2e4952f240f07f -Block 0019 [ 39]: 922ad44ed38552c0 -Block 0019 [ 40]: b2fbff55158c04c2 -Block 0019 [ 41]: 3fe9a10ea5aef870 -Block 0019 [ 42]: 6b8cd254eefe733b -Block 0019 [ 43]: 7c99c409d5bdd715 -Block 0019 [ 44]: da8dacd2c0ed0281 -Block 0019 [ 45]: dcea85cffde78e15 -Block 0019 [ 46]: 0e709509407f3866 -Block 0019 [ 47]: 9331b3925ac0914c -Block 0019 [ 48]: 19d3d18adc5dbc63 -Block 0019 [ 49]: 5dfd33332c89d190 -Block 0019 [ 50]: c61a6a352b9227bc -Block 0019 [ 51]: c4e5c7b0a3785d94 -Block 0019 [ 52]: 6f74bae4e2174723 -Block 0019 [ 53]: 63dbe046cc100f82 -Block 0019 [ 54]: d882d08c1b6cc810 -Block 0019 [ 55]: 050374613b45e9af -Block 0019 [ 56]: 5cd129e5e2430a26 -Block 0019 [ 57]: 08ff1a2d09e10475 -Block 0019 [ 58]: 4ab63c621e814a29 -Block 0019 [ 59]: 717be236db19de8e -Block 0019 [ 60]: b69702badc215404 -Block 0019 [ 61]: 0f938810792db042 -Block 0019 [ 62]: 9cd896b3683874e4 -Block 0019 [ 63]: e5a2b94e27ae70d8 -Block 0019 [ 64]: 99a106c84e5a5eb2 -Block 0019 [ 65]: 363341869679ec8d -Block 0019 [ 66]: ee1153712c35345e -Block 0019 [ 67]: a7c8a5d924760fe9 -Block 0019 [ 68]: 32beac8da9d2fe0f -Block 0019 [ 69]: c0b40564b99ac08c -Block 0019 [ 70]: 21c6f279089d8d67 -Block 0019 [ 71]: c17eb4e9657c7d38 -Block 0019 [ 72]: 82119d42ee7383ee -Block 0019 [ 73]: 839a5ba4ad33e320 -Block 0019 [ 74]: dca3fbd6b621523b -Block 0019 [ 75]: 831be6174d1b7bfe -Block 0019 [ 76]: 3f9e8bfe785fef8b -Block 0019 [ 77]: 6ad962a245dc4541 -Block 0019 [ 78]: 3bcab76901720eeb -Block 0019 [ 79]: 220a3352d04b525b -Block 0019 [ 80]: 179aecb646a78ad3 -Block 0019 [ 81]: 0e37e2692c841cac -Block 0019 [ 82]: 5b9f397a9fc9914a -Block 0019 [ 83]: f6a7673df3a257f5 -Block 0019 [ 84]: 615685fffa2fe235 -Block 0019 [ 85]: 5e237db301dba24c -Block 0019 [ 86]: 81535ef20914d77f -Block 0019 [ 87]: e12cdcfe47093097 -Block 0019 [ 88]: 48c4b926c428a68c -Block 0019 [ 89]: fd308f9af27493ad -Block 0019 [ 90]: 2cd8f4bf32095907 -Block 0019 [ 91]: 77e525fe7a8e416d -Block 0019 [ 92]: 132e99f6e13c81da -Block 0019 [ 93]: 3f4b9f866fb660a4 -Block 0019 [ 94]: b0e935906dac73db -Block 0019 [ 95]: d7f22b090e9905e7 -Block 0019 [ 96]: cb11d90136f020f9 -Block 0019 [ 97]: c96be13880b6cd43 -Block 0019 [ 98]: 1712c855b6a0e9a7 -Block 0019 [ 99]: 06c2322f35f2c656 -Block 0019 [100]: 3959da36a56e8319 -Block 0019 [101]: 00395e9c332612d6 -Block 0019 [102]: 6ae26df19284f3b2 -Block 0019 [103]: 1e2691a6e0d129df -Block 0019 [104]: fc73f98a93270339 -Block 0019 [105]: 6cd684812beff818 -Block 0019 [106]: 7f6afcc089780856 -Block 0019 [107]: 41ba7228f41b01d8 -Block 0019 [108]: 8e2fcf2ea124d9c9 -Block 0019 [109]: ebc64f65ee2aee4f -Block 0019 [110]: 43369a8e316a948e -Block 0019 [111]: b3ff2df0c7f10202 -Block 0019 [112]: 0d03d4023e9810a0 -Block 0019 [113]: 873b2ed4d5aa7898 -Block 0019 [114]: 9780b00f14da8b14 -Block 0019 [115]: cd9995c99e10bf5a -Block 0019 [116]: e158368cbe15dbf5 -Block 0019 [117]: c2340418c755b209 -Block 0019 [118]: 9d6a8efa736d3c45 -Block 0019 [119]: 589d9b1963690d48 -Block 0019 [120]: 88a35d4ed48dd42a -Block 0019 [121]: bd08c9ff2cb27f60 -Block 0019 [122]: 57055384720f2845 -Block 0019 [123]: a21217b4da0a9fc5 -Block 0019 [124]: 744fa33320036cbc -Block 0019 [125]: 4e57db9bfa06c2a3 -Block 0019 [126]: 490b17fdfbcb169e -Block 0019 [127]: 084a615be1a9e4d9 -Block 0020 [ 0]: 5d57ca47136f780e -Block 0020 [ 1]: f7e6a489158047e0 -Block 0020 [ 2]: 43afd73ca20617e2 -Block 0020 [ 3]: f330892dcc219aec -Block 0020 [ 4]: 69ddcc169837eaca -Block 0020 [ 5]: 76276b1b9f66128a -Block 0020 [ 6]: 4a3c15e11e71cd34 -Block 0020 [ 7]: d136f0129e70d740 -Block 0020 [ 8]: bed3273b28f942a7 -Block 0020 [ 9]: 5666679b22a0e825 -Block 0020 [ 10]: 3cc5122dc80159bc -Block 0020 [ 11]: 1f9762b33b33aba5 -Block 0020 [ 12]: 62fdd7c730a65160 -Block 0020 [ 13]: c482f5bf34979c2f -Block 0020 [ 14]: 4f2349b0ecfeefb8 -Block 0020 [ 15]: 155b8ad94c89cbb6 -Block 0020 [ 16]: 1b9f6770ca2aedf4 -Block 0020 [ 17]: 192416f1c8c95ac1 -Block 0020 [ 18]: e9dd5be037cb364a -Block 0020 [ 19]: 0f090a08cd9aba13 -Block 0020 [ 20]: 31e9b657221639b3 -Block 0020 [ 21]: 87b363aa553befd0 -Block 0020 [ 22]: 4477b840ca7905ba -Block 0020 [ 23]: 05cc227f7f6d9b75 -Block 0020 [ 24]: 3a8c7320409d5d26 -Block 0020 [ 25]: 31ad20d85c763a6c -Block 0020 [ 26]: 4e73aa89e8725561 -Block 0020 [ 27]: 9a7b37f6c4ce09d5 -Block 0020 [ 28]: 98d1d425577e1801 -Block 0020 [ 29]: 89f69be4232297c6 -Block 0020 [ 30]: 792d3563c3bf9e98 -Block 0020 [ 31]: 2512ad23f53284c7 -Block 0020 [ 32]: c2981553ed8736f2 -Block 0020 [ 33]: f0e20cbfb5609433 -Block 0020 [ 34]: f8d948e6e651fa86 -Block 0020 [ 35]: 3149268c4aac6990 -Block 0020 [ 36]: 2658045704d43b96 -Block 0020 [ 37]: f2a949e2ac83b68b -Block 0020 [ 38]: 8f58f6bdd819b9c6 -Block 0020 [ 39]: 48d427bf2c2c0400 -Block 0020 [ 40]: dcf52ff4b5056b04 -Block 0020 [ 41]: 9360854e262cbd13 -Block 0020 [ 42]: 46228619dec396e7 -Block 0020 [ 43]: a5c0c9024eb34b51 -Block 0020 [ 44]: 80a4ff3799ffaa55 -Block 0020 [ 45]: ec44c47fe6760771 -Block 0020 [ 46]: 1c10b973bc0b4e65 -Block 0020 [ 47]: a10cfd79a24c6966 -Block 0020 [ 48]: a5d1d59a2470be40 -Block 0020 [ 49]: f32d79247a4b459b -Block 0020 [ 50]: ae7733eb4ece186d -Block 0020 [ 51]: 7fdf2ba9666fff99 -Block 0020 [ 52]: 5324ac97a90fda85 -Block 0020 [ 53]: c93ce65f7f8d362b -Block 0020 [ 54]: 1a8c3a78f89292f8 -Block 0020 [ 55]: 3b14b0cf8f636730 -Block 0020 [ 56]: e58c0d49afbbd7f6 -Block 0020 [ 57]: 0c7b4cf0cfeebbb7 -Block 0020 [ 58]: 2b2e13b6943f1a39 -Block 0020 [ 59]: a0b73361ed004dcf -Block 0020 [ 60]: 93eba2ea0ae14829 -Block 0020 [ 61]: 4b2f44fe71cf5fc3 -Block 0020 [ 62]: 3ed8260985628995 -Block 0020 [ 63]: ccc751ccb582a8c6 -Block 0020 [ 64]: addb305fb77183b9 -Block 0020 [ 65]: 6ae008af5ca19b9a -Block 0020 [ 66]: 6a2b6da53d8c5e9b -Block 0020 [ 67]: 684a936687acf847 -Block 0020 [ 68]: 95ddec6659b9826f -Block 0020 [ 69]: 568b6ada0abf36bb -Block 0020 [ 70]: 7dab587621d25117 -Block 0020 [ 71]: 719c14b211475577 -Block 0020 [ 72]: 6d6cfb1a289476e3 -Block 0020 [ 73]: 11bb65adb073bf84 -Block 0020 [ 74]: e8564c9ab3287123 -Block 0020 [ 75]: 055c00f96aba87ee -Block 0020 [ 76]: 2ce8391c91ff17ef -Block 0020 [ 77]: 712b4f15acccf00f -Block 0020 [ 78]: a557001a2a542828 -Block 0020 [ 79]: 8aa5fcd18d9be6c4 -Block 0020 [ 80]: a064fa473db20fe3 -Block 0020 [ 81]: 1ab5e78858bf2061 -Block 0020 [ 82]: c8408a0601756a2a -Block 0020 [ 83]: 8ebd7b0fa610e267 -Block 0020 [ 84]: 4737a8848fa8756e -Block 0020 [ 85]: 084383af4e6a6a33 -Block 0020 [ 86]: ee2aa19d3d4f1e0c -Block 0020 [ 87]: a425205d5b3c0e44 -Block 0020 [ 88]: a9b7d132ab432afe -Block 0020 [ 89]: cb3d70781cde1f01 -Block 0020 [ 90]: 13b46a9cc6036627 -Block 0020 [ 91]: f3cb9cf1013a522b -Block 0020 [ 92]: f04b6ae327081e12 -Block 0020 [ 93]: a00b16fc80f1fa79 -Block 0020 [ 94]: b7291598fc44947d -Block 0020 [ 95]: 5b0def4014962dfe -Block 0020 [ 96]: 889b67aae30ca681 -Block 0020 [ 97]: 38b9629ce8c21a58 -Block 0020 [ 98]: e31fa547764f1192 -Block 0020 [ 99]: 6c9fd99cb27b91eb -Block 0020 [100]: 729a48be4128351d -Block 0020 [101]: c9ef08e71850a66a -Block 0020 [102]: 222bb5d86b7f734a -Block 0020 [103]: 8d73e0e8f544544e -Block 0020 [104]: b90d08c81440cf69 -Block 0020 [105]: dd9fcc9d6e1c2a7c -Block 0020 [106]: 88360967c8ba6163 -Block 0020 [107]: 084ee06004657e4b -Block 0020 [108]: 4808ed26e383a9fd -Block 0020 [109]: 99216d7d19ebd14f -Block 0020 [110]: 86804f939794a1a0 -Block 0020 [111]: 79808541b501f7e1 -Block 0020 [112]: 87d9ced7805ba881 -Block 0020 [113]: 3cecd150f641b6ae -Block 0020 [114]: 48818425086f97d0 -Block 0020 [115]: 259ed59ef6f4eab9 -Block 0020 [116]: eeefaa0d117276db -Block 0020 [117]: b345010d4cff1602 -Block 0020 [118]: b2ebc77b9784db1a -Block 0020 [119]: b0fccb9ee2146d44 -Block 0020 [120]: 12efff78f820153e -Block 0020 [121]: f055073327d18f03 -Block 0020 [122]: ce7854ab4ef4adf0 -Block 0020 [123]: 06d17b027037f0fd -Block 0020 [124]: 92ce711adc04a9a1 -Block 0020 [125]: 66478a9d6396bc0d -Block 0020 [126]: ff1eb65c6ce7ea23 -Block 0020 [127]: 87e96088e607b745 -Block 0021 [ 0]: 976e9f659febc2e8 -Block 0021 [ 1]: a88f1274f70e5647 -Block 0021 [ 2]: 2d1030809e10bdbf -Block 0021 [ 3]: 39fa3a0e6eeb51d9 -Block 0021 [ 4]: a3dccb41bf561eba -Block 0021 [ 5]: 39174042994d9c86 -Block 0021 [ 6]: e653eb04aeba31fd -Block 0021 [ 7]: 1b4bf239f4fc1ae8 -Block 0021 [ 8]: b8ee57434441c67e -Block 0021 [ 9]: 3368705f1cf61836 -Block 0021 [ 10]: 5265f3bee7e8a64d -Block 0021 [ 11]: aee6bdc6c7453a50 -Block 0021 [ 12]: 3baa3a53a511d6d7 -Block 0021 [ 13]: b052f430ef905497 -Block 0021 [ 14]: 15655072b91558fd -Block 0021 [ 15]: d8f5df7a3e047ad8 -Block 0021 [ 16]: 7dc6a612217c1121 -Block 0021 [ 17]: 566076b6a23f9387 -Block 0021 [ 18]: ba4ed88d763b7640 -Block 0021 [ 19]: 9ddcc34d61bda242 -Block 0021 [ 20]: bca43b61b90ef9f0 -Block 0021 [ 21]: 44f372e24cab6c1a -Block 0021 [ 22]: 4a28ccd569072749 -Block 0021 [ 23]: 3bba0847ae0b83ed -Block 0021 [ 24]: 49494038474e4275 -Block 0021 [ 25]: 598fe8b9223c0f33 -Block 0021 [ 26]: ab22b6a0c4f78ab0 -Block 0021 [ 27]: 210db7846a68d8ae -Block 0021 [ 28]: 43282ca03322625e -Block 0021 [ 29]: b3ad67fe8abe1f46 -Block 0021 [ 30]: 989391df47fa1387 -Block 0021 [ 31]: e2cca1cde49182f6 -Block 0021 [ 32]: 2bb23a36ea2afdd7 -Block 0021 [ 33]: 5a7f289f9251fed6 -Block 0021 [ 34]: 5a544243ac7744d7 -Block 0021 [ 35]: cc72df263c6f51ec -Block 0021 [ 36]: c43f009bb3d5c4ff -Block 0021 [ 37]: be57289215b40eda -Block 0021 [ 38]: 6199f895c87b2dcc -Block 0021 [ 39]: 7ae8e2df71099f02 -Block 0021 [ 40]: 94d1ab2ecb1e962d -Block 0021 [ 41]: ac38b599cf400fe3 -Block 0021 [ 42]: e2d04241732ef8a2 -Block 0021 [ 43]: 311f2618f88be20f -Block 0021 [ 44]: bc624ead2ff7931a -Block 0021 [ 45]: 53dce757b2c8a471 -Block 0021 [ 46]: b45e24e9711e96ae -Block 0021 [ 47]: 4449f0d3ee397b7b -Block 0021 [ 48]: 701696b5549d2d6e -Block 0021 [ 49]: abd841c53153facb -Block 0021 [ 50]: 3dc2199505f24e66 -Block 0021 [ 51]: 9774d5a5bfd689f5 -Block 0021 [ 52]: 4d546794b4c18718 -Block 0021 [ 53]: 8dba23eaf3c9d3ae -Block 0021 [ 54]: cb1376d0c0ec06ce -Block 0021 [ 55]: 73cebc8b6066075d -Block 0021 [ 56]: d80e0ddbcd207d04 -Block 0021 [ 57]: 511ee60f7ab4b82d -Block 0021 [ 58]: 55f2ba5663fda61a -Block 0021 [ 59]: 4a1bf598eb874381 -Block 0021 [ 60]: 6d2eea6b4e0e2791 -Block 0021 [ 61]: 91a8d6a65942c0fd -Block 0021 [ 62]: f36cb50cadc4c59a -Block 0021 [ 63]: b51c59122c247d33 -Block 0021 [ 64]: d73e4c0f4ba0b24e -Block 0021 [ 65]: 9d062a74eddb078c -Block 0021 [ 66]: 76e462d56034ba74 -Block 0021 [ 67]: 7f981ba9589c3c86 -Block 0021 [ 68]: f87f9bbf54d53d09 -Block 0021 [ 69]: b58a591bb6d366eb -Block 0021 [ 70]: a5d206cbc7965fc4 -Block 0021 [ 71]: 0737b44abb7b8eb3 -Block 0021 [ 72]: 4eec2ff63f5346a9 -Block 0021 [ 73]: e7aad25813a2551a -Block 0021 [ 74]: a9db0a77fc3a3627 -Block 0021 [ 75]: dd5c26ab99927254 -Block 0021 [ 76]: a7351601b2018b23 -Block 0021 [ 77]: 56e87f62e4bd36a0 -Block 0021 [ 78]: 7579b8aabe7dfa32 -Block 0021 [ 79]: 34fe2f3bc8e03b0c -Block 0021 [ 80]: b6b3ad970eb248b1 -Block 0021 [ 81]: 121d7272bd7ebc93 -Block 0021 [ 82]: c80eb86fb6c50b6b -Block 0021 [ 83]: 8bd485d99bc66730 -Block 0021 [ 84]: cf903a06d42efa64 -Block 0021 [ 85]: a0bf1ea7429d9b66 -Block 0021 [ 86]: 100e7668252d8234 -Block 0021 [ 87]: 5611ac51e0c4aec0 -Block 0021 [ 88]: e0d47dbb54bd4fc2 -Block 0021 [ 89]: 762c3fc263658f83 -Block 0021 [ 90]: 0977a8ac842da06d -Block 0021 [ 91]: ffece2e0fcf82469 -Block 0021 [ 92]: 251d9000edf3560a -Block 0021 [ 93]: f88f20544d4602ab -Block 0021 [ 94]: a32ffc01b4f0fe3c -Block 0021 [ 95]: a24a0e2d9ff22a4b -Block 0021 [ 96]: 69d9855d6212b44a -Block 0021 [ 97]: 05fad3385f71b8be -Block 0021 [ 98]: 3b915fb26c778939 -Block 0021 [ 99]: 81485ec2990b5f1f -Block 0021 [100]: df6bde77b4b90dad -Block 0021 [101]: f54543616da45238 -Block 0021 [102]: 08f27ab408ba9e98 -Block 0021 [103]: 382039b1ac11c85b -Block 0021 [104]: 304799345fb375d8 -Block 0021 [105]: 9aa9d07bc2c653cf -Block 0021 [106]: c01eb96471beb8d2 -Block 0021 [107]: bf028c4a42a5c5b7 -Block 0021 [108]: 6bc2feea37184034 -Block 0021 [109]: 93ae626810c10f9c -Block 0021 [110]: e2185c6ae98e1a60 -Block 0021 [111]: a365bf7029eabc63 -Block 0021 [112]: da1ba6ddd489d60e -Block 0021 [113]: d7114e5abe779e82 -Block 0021 [114]: d62e97914253cc02 -Block 0021 [115]: 2d990cb146dc6ffb -Block 0021 [116]: 9f8dd338cb3d9169 -Block 0021 [117]: 00417fb43b21719f -Block 0021 [118]: c547a1fa25dff537 -Block 0021 [119]: 6649468066baba07 -Block 0021 [120]: aeb4eae2da0f4711 -Block 0021 [121]: b9619918b2b99ded -Block 0021 [122]: 7b3aa37c52219510 -Block 0021 [123]: c67f4ab94d67fdfe -Block 0021 [124]: 8c4d9ae73c0384d7 -Block 0021 [125]: 30fcd267567ade99 -Block 0021 [126]: 8eb4c44af8925b02 -Block 0021 [127]: 91532368b2dd5d98 -Block 0022 [ 0]: 7a7eb778ba137642 -Block 0022 [ 1]: 75fd20cc726c9447 -Block 0022 [ 2]: 377a009ac96c4e5b -Block 0022 [ 3]: 5137193344b6fa8e -Block 0022 [ 4]: fd3c6f316b4b2203 -Block 0022 [ 5]: c8c10e87059b7fcb -Block 0022 [ 6]: c3e984b4f4c19e0f -Block 0022 [ 7]: c1df342507a4239d -Block 0022 [ 8]: f3d84364c81068b5 -Block 0022 [ 9]: a84f4a8e0875f61b -Block 0022 [ 10]: f074dbaf73f5a520 -Block 0022 [ 11]: c917181b46f9e191 -Block 0022 [ 12]: 64da0eff5b833f16 -Block 0022 [ 13]: 8c3a814b666d1a5b -Block 0022 [ 14]: bb5ade7b7db56500 -Block 0022 [ 15]: 0094e518971a127b -Block 0022 [ 16]: 0fad4d30b3cc902d -Block 0022 [ 17]: 94acb7d50ba979f7 -Block 0022 [ 18]: cb1c8994dbbaec67 -Block 0022 [ 19]: db593985ab96d088 -Block 0022 [ 20]: 016cf146031e0455 -Block 0022 [ 21]: dbe4263eae7443a7 -Block 0022 [ 22]: 38b1ed9c3a1e8a0e -Block 0022 [ 23]: 30ccb33155dc79a6 -Block 0022 [ 24]: ab3f38b7fbe9c6a7 -Block 0022 [ 25]: b6ab6339e3b5cd2f -Block 0022 [ 26]: 105fb25c2d53aad2 -Block 0022 [ 27]: 9100d9974a0ebc84 -Block 0022 [ 28]: 05557560d577787d -Block 0022 [ 29]: 0be7aa32a729523c -Block 0022 [ 30]: 987ebbccd2e595ad -Block 0022 [ 31]: d1a61b40e35b65dd -Block 0022 [ 32]: 87edbd02dbb27253 -Block 0022 [ 33]: fd3917fe08ded9e1 -Block 0022 [ 34]: 5154aca7a67f09e6 -Block 0022 [ 35]: 0ac7077b17b0ce6b -Block 0022 [ 36]: 022506e3e68af855 -Block 0022 [ 37]: 477b231cb63085b7 -Block 0022 [ 38]: facbc07678f43b4e -Block 0022 [ 39]: f793ea3f705dbd7e -Block 0022 [ 40]: c9fdc7172747c3f7 -Block 0022 [ 41]: 69b7d2c9df87ef7e -Block 0022 [ 42]: ba896967adafe7ca -Block 0022 [ 43]: 15865ebadfe18b9d -Block 0022 [ 44]: 8a374b6123ccda48 -Block 0022 [ 45]: 1ccfc954e24f0885 -Block 0022 [ 46]: 6eaa9454516dc0c4 -Block 0022 [ 47]: a47cecb2678bca2c -Block 0022 [ 48]: c9d512ee9869639b -Block 0022 [ 49]: f2be8f067e53a2f7 -Block 0022 [ 50]: d12367af680b6f97 -Block 0022 [ 51]: 5b08d27744c63ee7 -Block 0022 [ 52]: 68240e233e3f5df7 -Block 0022 [ 53]: dabb61a4b4489e8a -Block 0022 [ 54]: 58daa56e290df240 -Block 0022 [ 55]: b7668b7b4334ad4b -Block 0022 [ 56]: 9b81324b9195a489 -Block 0022 [ 57]: 5c1b0f7850b4fdba -Block 0022 [ 58]: a19a882d2259b483 -Block 0022 [ 59]: 000144eaa2490219 -Block 0022 [ 60]: b86ade826f9ab064 -Block 0022 [ 61]: 2b30e0be2742140c -Block 0022 [ 62]: 5798c3cfcae5c8c5 -Block 0022 [ 63]: 318050a2867cc321 -Block 0022 [ 64]: 496efff959586146 -Block 0022 [ 65]: 042e2c16b9ce0ba3 -Block 0022 [ 66]: cbf37aba11d55dc2 -Block 0022 [ 67]: fa547c1aee0079cd -Block 0022 [ 68]: 81b1015f9bc428d3 -Block 0022 [ 69]: 5ee624ba1cec9ff4 -Block 0022 [ 70]: cc06875eecff4bfc -Block 0022 [ 71]: 70c5de30f89553ea -Block 0022 [ 72]: 82d6a1825d3e92d7 -Block 0022 [ 73]: 08ae275dc58392cf -Block 0022 [ 74]: ef27eec48a368912 -Block 0022 [ 75]: 413f245be1a350a1 -Block 0022 [ 76]: ac6ed1397cf170b1 -Block 0022 [ 77]: 88f42a66dbffe788 -Block 0022 [ 78]: 3e0dda4b5a02b8fc -Block 0022 [ 79]: 8f8eb68cdb179ae0 -Block 0022 [ 80]: fd018b0bac7799c5 -Block 0022 [ 81]: eba408d26249d044 -Block 0022 [ 82]: d75ac46fc02f7275 -Block 0022 [ 83]: c70a15596671f5d1 -Block 0022 [ 84]: e261a9551e07abc1 -Block 0022 [ 85]: 794892ee911a29de -Block 0022 [ 86]: 95b5b9a11d146624 -Block 0022 [ 87]: 86c21ad27d1543a4 -Block 0022 [ 88]: 1c277baeeff0ce9d -Block 0022 [ 89]: 7bd90b2cd713e638 -Block 0022 [ 90]: 0b2a164ea19e2b78 -Block 0022 [ 91]: 12fb9127ce3b8607 -Block 0022 [ 92]: 6361a6ec49a7b80d -Block 0022 [ 93]: 7cca1af1dce8ce7d -Block 0022 [ 94]: 6800dc2ac217bec3 -Block 0022 [ 95]: ec16cbb822442386 -Block 0022 [ 96]: b061fdcdc50e1e3e -Block 0022 [ 97]: dbd45a3166c80fa1 -Block 0022 [ 98]: 406e39115c27c83c -Block 0022 [ 99]: 4e67e960cc388f46 -Block 0022 [100]: 2a5706bdd0c69408 -Block 0022 [101]: 74720d5a7862a031 -Block 0022 [102]: 99eaa516e72e07a9 -Block 0022 [103]: 0652ebc6a9556b32 -Block 0022 [104]: 22e1c4807ba2d0d8 -Block 0022 [105]: b84684c4fe3cb95c -Block 0022 [106]: c5ae3cc6ff36e4bc -Block 0022 [107]: 7c6356397667c985 -Block 0022 [108]: 85a8a88cdb7088b2 -Block 0022 [109]: baaa4a40b2fe327f -Block 0022 [110]: bb549f69550ac7fe -Block 0022 [111]: 700ce2f1e6a53745 -Block 0022 [112]: fbd53afa58bdb58b -Block 0022 [113]: 59b964fe20508807 -Block 0022 [114]: e57b1917deb499be -Block 0022 [115]: 1ab30b4e53cdba30 -Block 0022 [116]: e97d383251335d8e -Block 0022 [117]: d58b02e4e16d9256 -Block 0022 [118]: 41814117f9badbdb -Block 0022 [119]: f47ac20cd426fc8b -Block 0022 [120]: b550ecef8d0d1bb6 -Block 0022 [121]: 816ae3c96a1e867e -Block 0022 [122]: 1a88cc4c5f601a97 -Block 0022 [123]: fe78b73e3cb347c0 -Block 0022 [124]: ab7c6f0d0fc23560 -Block 0022 [125]: df85ca82509c97aa -Block 0022 [126]: 040cd972f4f4cde0 -Block 0022 [127]: 8cc1f28d8b7a424c -Block 0023 [ 0]: b66bc13398076979 -Block 0023 [ 1]: 43b1f58fdbe5c6d7 -Block 0023 [ 2]: 78cfeb884aa0dcf8 -Block 0023 [ 3]: f6ad7bdbce0fc1f1 -Block 0023 [ 4]: 97bd0555962ab048 -Block 0023 [ 5]: dfeb2974250f3fba -Block 0023 [ 6]: 841d9de38b24c45d -Block 0023 [ 7]: f7ba62597d6b981c -Block 0023 [ 8]: 642acde47945bf0a -Block 0023 [ 9]: ba5998732b6e3a32 -Block 0023 [ 10]: fc5f4f5fa312aabb -Block 0023 [ 11]: 2f890fd5b28f6575 -Block 0023 [ 12]: a019341906f2c75a -Block 0023 [ 13]: 17bdcab50a8b8cad -Block 0023 [ 14]: 4bbd3902ab6ca789 -Block 0023 [ 15]: bd5b5bf197858bd3 -Block 0023 [ 16]: 76b97396716afeac -Block 0023 [ 17]: b5c6b2607a110210 -Block 0023 [ 18]: 3676052713568a3c -Block 0023 [ 19]: 1b243d70337d6a27 -Block 0023 [ 20]: 14a68d15138c679e -Block 0023 [ 21]: 2e5dec69515a9a11 -Block 0023 [ 22]: 89fad0d2ff2b3b0c -Block 0023 [ 23]: 65ffa10e16de42d4 -Block 0023 [ 24]: 2fe475a4468285bd -Block 0023 [ 25]: 598befca0e6acaa1 -Block 0023 [ 26]: bef9208bcce61210 -Block 0023 [ 27]: 497d41b68bf1eb06 -Block 0023 [ 28]: 8d8d7c7e8928d427 -Block 0023 [ 29]: 72dc43efe0c530cf -Block 0023 [ 30]: 50c87715dca1c97f -Block 0023 [ 31]: 97a31b1b001ff7ef -Block 0023 [ 32]: 2a2e6ab678997b48 -Block 0023 [ 33]: 3bcba511e04175e0 -Block 0023 [ 34]: c6ad3b6fd73abd88 -Block 0023 [ 35]: 49c135aede7792a2 -Block 0023 [ 36]: ab10861dfeed0a2a -Block 0023 [ 37]: b350fce5f7e9bfea -Block 0023 [ 38]: d45a436bfb246a48 -Block 0023 [ 39]: 29892cb62a433349 -Block 0023 [ 40]: 603e5902b12e7886 -Block 0023 [ 41]: 7b4ef649559126de -Block 0023 [ 42]: 2b7b48c2bbccc978 -Block 0023 [ 43]: 0f8035fc0a8f24e2 -Block 0023 [ 44]: f722f06c3b244851 -Block 0023 [ 45]: dab2722606c3e666 -Block 0023 [ 46]: 2c55f308a67bbe59 -Block 0023 [ 47]: 269043b9686499a5 -Block 0023 [ 48]: 109deb97c1757859 -Block 0023 [ 49]: cf3164ffce16fbfc -Block 0023 [ 50]: 7a221223e0354820 -Block 0023 [ 51]: 2ffbd3d62c1707fe -Block 0023 [ 52]: d0c6e6b39c3558af -Block 0023 [ 53]: e7fcc877262a87ee -Block 0023 [ 54]: eae055d6a0e7fdd3 -Block 0023 [ 55]: db620e9d037e13b6 -Block 0023 [ 56]: 469935d3b817996d -Block 0023 [ 57]: ee245d8a65759846 -Block 0023 [ 58]: b53d6d62749bba67 -Block 0023 [ 59]: dbf209dc213dfad3 -Block 0023 [ 60]: e36b204b799683ce -Block 0023 [ 61]: 1455b7fc3037401f -Block 0023 [ 62]: 42ce4ef72d07cd55 -Block 0023 [ 63]: 92eb30d2eb66f108 -Block 0023 [ 64]: 8fa86c51ef64302a -Block 0023 [ 65]: 2d0d0d36976fbc53 -Block 0023 [ 66]: 5fc6d2b9917bc624 -Block 0023 [ 67]: 889cf6888dd7bc8a -Block 0023 [ 68]: 992f099b98c3740c -Block 0023 [ 69]: 12fe92fe02ee099a -Block 0023 [ 70]: 23ce13d7948ddd64 -Block 0023 [ 71]: 33ee61ee295d4fa0 -Block 0023 [ 72]: 8283374ec0cce033 -Block 0023 [ 73]: fff2602247882991 -Block 0023 [ 74]: 4b1663575c159028 -Block 0023 [ 75]: bafdb75175f3f801 -Block 0023 [ 76]: 4896dc4bf1314297 -Block 0023 [ 77]: c194e7febcc3f109 -Block 0023 [ 78]: 58479af120c28438 -Block 0023 [ 79]: a4a0a51c58e36277 -Block 0023 [ 80]: 0b3bb203c682dc67 -Block 0023 [ 81]: 746cd2daa1e039dd -Block 0023 [ 82]: 778726fad45bc5c4 -Block 0023 [ 83]: 7032fd18f64ba5f7 -Block 0023 [ 84]: bfc6a54ff3c4b225 -Block 0023 [ 85]: 72b34d7cdd4ce5a0 -Block 0023 [ 86]: a98b6dcc105c6599 -Block 0023 [ 87]: f1e96f02fad3ed0b -Block 0023 [ 88]: 1939fc5e44020b06 -Block 0023 [ 89]: 448dfdd8798a4874 -Block 0023 [ 90]: 98a2c3a040beee9a -Block 0023 [ 91]: 6f2db254dd4b6380 -Block 0023 [ 92]: 08c4e1603c2e6090 -Block 0023 [ 93]: f827733c9a22a2ce -Block 0023 [ 94]: 3d1c8748079a56a3 -Block 0023 [ 95]: 7ae919efdd933131 -Block 0023 [ 96]: c727cf1cb2808cb3 -Block 0023 [ 97]: 7b6def6b630a169e -Block 0023 [ 98]: 6ef5ceefdf3d02bf -Block 0023 [ 99]: d181753664d13703 -Block 0023 [100]: 502f862c989e3fa7 -Block 0023 [101]: bb2f03f33d6ac3ae -Block 0023 [102]: 5c604b717948a33a -Block 0023 [103]: 630988dfb218abe5 -Block 0023 [104]: 5acb7fd208d802db -Block 0023 [105]: ac830527c5e999b1 -Block 0023 [106]: 516fd37d43ae2d1e -Block 0023 [107]: 594c0dc0159c63c6 -Block 0023 [108]: 836bc0c551eded8b -Block 0023 [109]: e0eddf7b8bf4760e -Block 0023 [110]: 47942839c8110b8f -Block 0023 [111]: dcb4aca02099f907 -Block 0023 [112]: ac918e1eb8d52a65 -Block 0023 [113]: 5146539f9438d2a6 -Block 0023 [114]: 922b0f0abfd46794 -Block 0023 [115]: 3fb0f166928220e4 -Block 0023 [116]: e2c9d29dbff352c8 -Block 0023 [117]: 3c949bb615b76a18 -Block 0023 [118]: 09881809f1e367b9 -Block 0023 [119]: d1fe339181b8b543 -Block 0023 [120]: b7fd1e77372bef3f -Block 0023 [121]: 03773182b98b9987 -Block 0023 [122]: 9e840ac0cc8d09ac -Block 0023 [123]: 2f45e7e49be08dfc -Block 0023 [124]: 6fe8bca985b15f5a -Block 0023 [125]: 594084ec59454bea -Block 0023 [126]: 5d0c687a81fc544d -Block 0023 [127]: ee89421c46d7e558 -Block 0024 [ 0]: fa103a94eb8b6e74 -Block 0024 [ 1]: 71cf5ea7430c6609 -Block 0024 [ 2]: 379c6751fee7ae1b -Block 0024 [ 3]: 1f3f70b9027f6e7c -Block 0024 [ 4]: 75d20e9caa8fa717 -Block 0024 [ 5]: 115a61491b07b6cd -Block 0024 [ 6]: 7932288af80cd9bf -Block 0024 [ 7]: 6535b5d2d138f903 -Block 0024 [ 8]: 284d6527a81184ec -Block 0024 [ 9]: 4e70f9959222fcbb -Block 0024 [ 10]: dd2a61a55cdc78e3 -Block 0024 [ 11]: 8365ad7d50f8f015 -Block 0024 [ 12]: ca4972f76a1c0238 -Block 0024 [ 13]: a6c0011066aa15b7 -Block 0024 [ 14]: 9eab0e1c3130d275 -Block 0024 [ 15]: aa76c422fa6b9f84 -Block 0024 [ 16]: 555e0ac5402670f1 -Block 0024 [ 17]: 0e2aa8b082335a73 -Block 0024 [ 18]: fa0aa4e7358150ac -Block 0024 [ 19]: a8f0ae6455d0cc7f -Block 0024 [ 20]: 24f1ee88bf0fabf7 -Block 0024 [ 21]: 38563cb2b3e99490 -Block 0024 [ 22]: 161de2f55406017c -Block 0024 [ 23]: 21c2167cf87df602 -Block 0024 [ 24]: 1cdc9f40d0c13285 -Block 0024 [ 25]: 734995aaa9ae30a4 -Block 0024 [ 26]: 74683a21713b323b -Block 0024 [ 27]: 1b7a14dd0ae8c7b0 -Block 0024 [ 28]: e93ebff9df6564ef -Block 0024 [ 29]: abe93118fe044789 -Block 0024 [ 30]: 41466094f1898728 -Block 0024 [ 31]: ea57b47d087a417a -Block 0024 [ 32]: 4c53c6cbcfd96e90 -Block 0024 [ 33]: 3adea2be4c2966a6 -Block 0024 [ 34]: 1823455650de85f3 -Block 0024 [ 35]: daf707bd14f21c4a -Block 0024 [ 36]: 600ca4b48bcbcf53 -Block 0024 [ 37]: b1af608e1c1acfce -Block 0024 [ 38]: 145d6117eda40e01 -Block 0024 [ 39]: 43bb28822f88806f -Block 0024 [ 40]: 18fd37e5c8359f98 -Block 0024 [ 41]: 7d93b6fae58530cf -Block 0024 [ 42]: 5b4cd795c04b4bf1 -Block 0024 [ 43]: 38dad5655f02d404 -Block 0024 [ 44]: af5f968c1a391d62 -Block 0024 [ 45]: c37bd6023c551d3c -Block 0024 [ 46]: f0c7f2917fbf51fb -Block 0024 [ 47]: c53f7f33cb2cb648 -Block 0024 [ 48]: eb35a7abedeedf32 -Block 0024 [ 49]: dd7fa26ee17cd9fc -Block 0024 [ 50]: f5fcce040a9308fa -Block 0024 [ 51]: a4552572b9348b7f -Block 0024 [ 52]: 7909ee855e91d636 -Block 0024 [ 53]: 94f69b3368d2c478 -Block 0024 [ 54]: 2bf78c27935d13ff -Block 0024 [ 55]: 36b9ed5e69ae9474 -Block 0024 [ 56]: 48fcc8a46a27b79b -Block 0024 [ 57]: b856786098b8bacd -Block 0024 [ 58]: 20dc555f833c4cad -Block 0024 [ 59]: ffdd83a0f20b35d1 -Block 0024 [ 60]: 13cfff8112e27de4 -Block 0024 [ 61]: fc935988d81e3589 -Block 0024 [ 62]: f0eee3a476f22d0c -Block 0024 [ 63]: fdcd5ba6dd44cf97 -Block 0024 [ 64]: e68d31d6f9ef3f8e -Block 0024 [ 65]: 508f9ff8d087e9f4 -Block 0024 [ 66]: f429f0cba38d7842 -Block 0024 [ 67]: 182fb1cac2acc609 -Block 0024 [ 68]: ca9a4568171cde9c -Block 0024 [ 69]: d47e38dba8e537e5 -Block 0024 [ 70]: bd743a39cd59f99c -Block 0024 [ 71]: 495abdd1bd1fc0f2 -Block 0024 [ 72]: 148c5ba07f03a932 -Block 0024 [ 73]: 904c4a6a79abfd96 -Block 0024 [ 74]: deecdf43f7698331 -Block 0024 [ 75]: e4f67a19d7041b1e -Block 0024 [ 76]: 16b5848fd1b24266 -Block 0024 [ 77]: 7d7ac333b809d08f -Block 0024 [ 78]: 35eaa6ae35afd3f1 -Block 0024 [ 79]: 5fca382578f0aba3 -Block 0024 [ 80]: a2250744c418ad53 -Block 0024 [ 81]: fadbb88c2f52c4d9 -Block 0024 [ 82]: d5954ae05fec3428 -Block 0024 [ 83]: d47ef4350d39f8b3 -Block 0024 [ 84]: 63bd863fa81e3d55 -Block 0024 [ 85]: 5b210d8edd4bf343 -Block 0024 [ 86]: 86216a2d781e3aba -Block 0024 [ 87]: 925a75c19797e906 -Block 0024 [ 88]: 0f4879030aa235b8 -Block 0024 [ 89]: 850d9f1d51e61cba -Block 0024 [ 90]: d21cbab6dc6a90f1 -Block 0024 [ 91]: f0288cd7780dd66b -Block 0024 [ 92]: 987f7d6f5e033538 -Block 0024 [ 93]: 339f9acd310bc324 -Block 0024 [ 94]: 3b0c17458702ddd1 -Block 0024 [ 95]: 8e2de118a2df9e6e -Block 0024 [ 96]: 355f5b40341e6a6d -Block 0024 [ 97]: 97b426f12c8ecd0a -Block 0024 [ 98]: 5f6c0bd4f4ad4801 -Block 0024 [ 99]: d83ccd8e06c9b99e -Block 0024 [100]: 0092227b6d6aba22 -Block 0024 [101]: c0d9f079e67bee82 -Block 0024 [102]: ddc0cf6634af2d1c -Block 0024 [103]: 926f01523f7f52c2 -Block 0024 [104]: 55ff254c9117c227 -Block 0024 [105]: 462dcdc07963b99e -Block 0024 [106]: 1d34ff532c8e6510 -Block 0024 [107]: 0fbf72a6de9b69db -Block 0024 [108]: 5e93cb1d7c955aaf -Block 0024 [109]: fa36f19bb7c882a0 -Block 0024 [110]: 6c6f68d785518d9c -Block 0024 [111]: 632bc6c3ce8a5029 -Block 0024 [112]: 31945fc5020e6cf5 -Block 0024 [113]: 1c097aff84bbc77e -Block 0024 [114]: 8649e1bf2f457f18 -Block 0024 [115]: db4da4890b69094a -Block 0024 [116]: 8d542edade32524a -Block 0024 [117]: 4b79711c5f1d24ef -Block 0024 [118]: 18b44b2118a930eb -Block 0024 [119]: 1ad45f28f08be690 -Block 0024 [120]: 305613dbe3e7ae65 -Block 0024 [121]: cc10a15534f46c09 -Block 0024 [122]: 0cd495b83f19a0e9 -Block 0024 [123]: 70b84f26fd32b9c1 -Block 0024 [124]: 059b57532d61ef20 -Block 0024 [125]: 0db5ea4dac04395d -Block 0024 [126]: 84e4b96503cad6e0 -Block 0024 [127]: b22cece0e90325b5 -Block 0025 [ 0]: acadb47787e0e62d -Block 0025 [ 1]: 89db15bfeb35c67c -Block 0025 [ 2]: ed2997a2cd0015a0 -Block 0025 [ 3]: 194671063cd59b39 -Block 0025 [ 4]: bfb10fa28657c239 -Block 0025 [ 5]: a3c9f57c2e492a5a -Block 0025 [ 6]: d2ad1559dc2faa60 -Block 0025 [ 7]: 07b30a013f1f0e8c -Block 0025 [ 8]: 9e24764dd386d411 -Block 0025 [ 9]: 9eecaf179e51d7a6 -Block 0025 [ 10]: 1e3ccb14c450b9fb -Block 0025 [ 11]: a02fbd9c3fdd5cd8 -Block 0025 [ 12]: cae040fffa896b67 -Block 0025 [ 13]: c30348e230fe34e7 -Block 0025 [ 14]: 2bab58f77b702f0c -Block 0025 [ 15]: 458a8b1be3ba75cc -Block 0025 [ 16]: 05f630c5b0fcefce -Block 0025 [ 17]: bbae1e1b7b233558 -Block 0025 [ 18]: a4f3cdc1a95349d6 -Block 0025 [ 19]: 6d48d6fc63a2b369 -Block 0025 [ 20]: 5a58b2e088572a86 -Block 0025 [ 21]: 93021d253a6ca370 -Block 0025 [ 22]: c4669e03aba0e41c -Block 0025 [ 23]: 517c21f6f717beef -Block 0025 [ 24]: ad1ed0842b693990 -Block 0025 [ 25]: 932ea3b600e8fa63 -Block 0025 [ 26]: 94412081fe5d7db6 -Block 0025 [ 27]: 0c9587581ca0676a -Block 0025 [ 28]: f6b804ef2660bb1d -Block 0025 [ 29]: 342294f1c057f5ac -Block 0025 [ 30]: 6cf1635982de5d91 -Block 0025 [ 31]: 26b51a9b4901465c -Block 0025 [ 32]: 47560ef80d00e93d -Block 0025 [ 33]: 1719bdd4357a7f33 -Block 0025 [ 34]: 6478f7b2660c9b93 -Block 0025 [ 35]: bd5209fc80832ddc -Block 0025 [ 36]: f6592e8643238445 -Block 0025 [ 37]: 6f204a61f25e4b12 -Block 0025 [ 38]: 35694628a2ff8abd -Block 0025 [ 39]: fea9ac42aa3ceff1 -Block 0025 [ 40]: 36e352f162c706fd -Block 0025 [ 41]: 8b3a6b5850374e58 -Block 0025 [ 42]: 451d1544d57f7618 -Block 0025 [ 43]: 62e57656237e4b0e -Block 0025 [ 44]: d85e6c03cda3ff01 -Block 0025 [ 45]: e10874aa046d1dfb -Block 0025 [ 46]: b6a0b09d65515347 -Block 0025 [ 47]: 86cbd5f2cb16e8ab -Block 0025 [ 48]: a4a135272607deff -Block 0025 [ 49]: f445fd366d4ff7f2 -Block 0025 [ 50]: dd15c10173acb786 -Block 0025 [ 51]: ed741e791affc000 -Block 0025 [ 52]: 1515bd8fd6a6d28b -Block 0025 [ 53]: d28947fae8e86d43 -Block 0025 [ 54]: 5670b6f88fc2e9ed -Block 0025 [ 55]: bc1776fe1e2a05d2 -Block 0025 [ 56]: b508250a4219c65a -Block 0025 [ 57]: 45f02eda1a48ea03 -Block 0025 [ 58]: 607bcf65c28ccb29 -Block 0025 [ 59]: 111e9405cc0a9c58 -Block 0025 [ 60]: abb33ee022dda838 -Block 0025 [ 61]: b2240c4df99b2d4c -Block 0025 [ 62]: e8c4a136a3eadcf9 -Block 0025 [ 63]: d7ec593b9aef542b -Block 0025 [ 64]: 6f510d1b002ec558 -Block 0025 [ 65]: a01e2071f0eb2e94 -Block 0025 [ 66]: 26f75e619cfb5140 -Block 0025 [ 67]: f1145e65bfdd120f -Block 0025 [ 68]: 5f0620860cd88389 -Block 0025 [ 69]: 52ca8641c7ebc6ac -Block 0025 [ 70]: a3c97e5904a54b1b -Block 0025 [ 71]: 57b37085fd40a46b -Block 0025 [ 72]: 8674f89c371ad57e -Block 0025 [ 73]: d939b68dfa8da895 -Block 0025 [ 74]: a86e84431961783c -Block 0025 [ 75]: 4365b03c8a63133b -Block 0025 [ 76]: a1b358ddc73aaf52 -Block 0025 [ 77]: e697264359e17f7d -Block 0025 [ 78]: 54cd0039bb353cb6 -Block 0025 [ 79]: c607259b67e3ce6f -Block 0025 [ 80]: 4b329cc61bf3eb5a -Block 0025 [ 81]: 2492f1f9bc9a8b5d -Block 0025 [ 82]: 7d4f7b9a4969b0a3 -Block 0025 [ 83]: b30cd7f1eba80723 -Block 0025 [ 84]: 4603bdb7771b5a18 -Block 0025 [ 85]: 22370064c642e39b -Block 0025 [ 86]: 67933471b75cf941 -Block 0025 [ 87]: 707ebb2467979a75 -Block 0025 [ 88]: 71bdbb34998bb883 -Block 0025 [ 89]: 7ca6b42ea9fb26a5 -Block 0025 [ 90]: 350e49361365bf71 -Block 0025 [ 91]: 33349dc1ced81fde -Block 0025 [ 92]: a358ee5e36aaa4c4 -Block 0025 [ 93]: 937b184837c13da3 -Block 0025 [ 94]: bd7a02b7e7b72a62 -Block 0025 [ 95]: d0656b37c7dc422d -Block 0025 [ 96]: fe65fcbe8a0ad440 -Block 0025 [ 97]: 12ed44baba3ebacb -Block 0025 [ 98]: 9a680c17e49ed88a -Block 0025 [ 99]: b839bf85c6d3956b -Block 0025 [100]: 75e6674117502c08 -Block 0025 [101]: d6cb9459957d0e4e -Block 0025 [102]: 2f025b945f2f71b0 -Block 0025 [103]: b15b992ebf46ea26 -Block 0025 [104]: a58186fd4f22c433 -Block 0025 [105]: db2c21ec363674eb -Block 0025 [106]: f88fe356feaaf1ff -Block 0025 [107]: 570f6a4b4849e237 -Block 0025 [108]: 14035bc7f48df466 -Block 0025 [109]: ddb45cdddb15dbdb -Block 0025 [110]: f0572535fe525143 -Block 0025 [111]: 1ce3c0282ea29234 -Block 0025 [112]: d73347c8a9c6df0f -Block 0025 [113]: 721642c7734110aa -Block 0025 [114]: f5b43e20200e678d -Block 0025 [115]: 53652fc6c3886359 -Block 0025 [116]: caa4c48dc6da888d -Block 0025 [117]: 8dbe7af4765ba285 -Block 0025 [118]: e7c34d642ab8379c -Block 0025 [119]: 694eba65c6198cd1 -Block 0025 [120]: 951e0c3a0fc9dac2 -Block 0025 [121]: a9512f0ae3e175bf -Block 0025 [122]: f912282c1fe8850d -Block 0025 [123]: 88ba06847be5780f -Block 0025 [124]: 9cf3b21809173c93 -Block 0025 [125]: 87afd19c5e19a948 -Block 0025 [126]: 990f1184b82f0c59 -Block 0025 [127]: 94d8c54ba08642ab -Block 0026 [ 0]: 50b295833dfb05dd -Block 0026 [ 1]: 567661a5a807fec5 -Block 0026 [ 2]: 03e4375c0677aa6c -Block 0026 [ 3]: 8df882b653a8e546 -Block 0026 [ 4]: 06a1a2e5b4dd1497 -Block 0026 [ 5]: ebf09eb380f1d347 -Block 0026 [ 6]: 8d674162d4d58415 -Block 0026 [ 7]: 8e9640ef1effca77 -Block 0026 [ 8]: 5415ecd367187b2f -Block 0026 [ 9]: f4e96c6f043df6ff -Block 0026 [ 10]: 75f864f3d561d897 -Block 0026 [ 11]: 401d802ccd58cbc2 -Block 0026 [ 12]: a2211178619d5b24 -Block 0026 [ 13]: 39d5bee61d034875 -Block 0026 [ 14]: 52815128485ab93d -Block 0026 [ 15]: 0598d9f55a912669 -Block 0026 [ 16]: 941552dd580575c0 -Block 0026 [ 17]: 8f619028dcc6784f -Block 0026 [ 18]: a6ecb0eb7e1cfba9 -Block 0026 [ 19]: 5e2e43be46ff1cfd -Block 0026 [ 20]: 3c015d055ab6467c -Block 0026 [ 21]: 1340e475f5b92367 -Block 0026 [ 22]: 100575c85d3eefe8 -Block 0026 [ 23]: 25baddd62863a612 -Block 0026 [ 24]: c3d327c5bfd22a3a -Block 0026 [ 25]: fa7a754f2bd820ea -Block 0026 [ 26]: 1d42473fb2d97483 -Block 0026 [ 27]: 3471d76071e9809b -Block 0026 [ 28]: cdb7c4192c5ae660 -Block 0026 [ 29]: 963ed324e1ac1061 -Block 0026 [ 30]: 421d12df283ff52e -Block 0026 [ 31]: 70f87bee5b64efc1 -Block 0026 [ 32]: 0421bc40a8db2f7d -Block 0026 [ 33]: b65a077b1e547d8a -Block 0026 [ 34]: b4dc92b0f61c5029 -Block 0026 [ 35]: 555b623fb30f1237 -Block 0026 [ 36]: 262edb116a2993a6 -Block 0026 [ 37]: 9582ef318a3ee8f9 -Block 0026 [ 38]: 7affb49d286d9632 -Block 0026 [ 39]: 27c704dfb98b3acf -Block 0026 [ 40]: 13e542f23f896758 -Block 0026 [ 41]: c8bbd0d56dfd7638 -Block 0026 [ 42]: eaba65a57471e933 -Block 0026 [ 43]: c98607a547832622 -Block 0026 [ 44]: 1ebd1b8afb0bf886 -Block 0026 [ 45]: f206507bfe115f86 -Block 0026 [ 46]: 326842eacb06c6bb -Block 0026 [ 47]: 95c621502add5dad -Block 0026 [ 48]: 60bcfce88154b796 -Block 0026 [ 49]: 9d0982e683e06e1f -Block 0026 [ 50]: 6e404290e8de2e0a -Block 0026 [ 51]: f7379a896794c18c -Block 0026 [ 52]: 7b2bfcb545e5ce3b -Block 0026 [ 53]: c7ea3b36e261e463 -Block 0026 [ 54]: 087aadf263e814dc -Block 0026 [ 55]: 470e873d7a28d2ea -Block 0026 [ 56]: 9c1de86f22c84905 -Block 0026 [ 57]: 0cb31716564be97d -Block 0026 [ 58]: 57c84f1733b38d11 -Block 0026 [ 59]: 90054ae99b4a469a -Block 0026 [ 60]: 44fc18fd1fbbfdf5 -Block 0026 [ 61]: 896474ccfa2a8abe -Block 0026 [ 62]: 6d1a83c45ab01d07 -Block 0026 [ 63]: 6e1db62335275c0e -Block 0026 [ 64]: f9e1778a7ace16c3 -Block 0026 [ 65]: 1a588e9ded9674b4 -Block 0026 [ 66]: d835296109312572 -Block 0026 [ 67]: 2e647c1fd56d0e9c -Block 0026 [ 68]: 2cfc5d8177130f53 -Block 0026 [ 69]: 48f63500ec356093 -Block 0026 [ 70]: c07082b25b554e7e -Block 0026 [ 71]: 28db93b22107fe9a -Block 0026 [ 72]: 6c8fb3681f1bf160 -Block 0026 [ 73]: 760d701be621a605 -Block 0026 [ 74]: 0cfda0e5c55ec8c7 -Block 0026 [ 75]: 5c6fdbbb2a8f8ff8 -Block 0026 [ 76]: aebfcee72b0950a3 -Block 0026 [ 77]: 9e2cb7decd8c3d48 -Block 0026 [ 78]: 27d55cfcb210dc24 -Block 0026 [ 79]: 55ad71b954f6abaf -Block 0026 [ 80]: be9834ba9ea0ac99 -Block 0026 [ 81]: 57f29d843db85712 -Block 0026 [ 82]: 9479adb08abb161a -Block 0026 [ 83]: 206421c067eb9317 -Block 0026 [ 84]: 7d72ee59b7d4463f -Block 0026 [ 85]: f02df93b0e19851d -Block 0026 [ 86]: 8dfa179b2fc85c50 -Block 0026 [ 87]: 4317539dae930952 -Block 0026 [ 88]: 4dc95947a415e992 -Block 0026 [ 89]: c828a34a403c233c -Block 0026 [ 90]: 44bde65a36130b0c -Block 0026 [ 91]: 43a9331614311fab -Block 0026 [ 92]: e343ad268e0db819 -Block 0026 [ 93]: 3bf80e0968fb4740 -Block 0026 [ 94]: 006f6758fb198787 -Block 0026 [ 95]: 5e4580c97af6364c -Block 0026 [ 96]: 0674fa0e5c5bb448 -Block 0026 [ 97]: 2b9cf6328e071183 -Block 0026 [ 98]: e82012c0f1292107 -Block 0026 [ 99]: 0041eb6c74330b21 -Block 0026 [100]: a0e1d5da140e1559 -Block 0026 [101]: 0cae4836a0580159 -Block 0026 [102]: 083475b819af769b -Block 0026 [103]: 497fcd3f6f96c7a6 -Block 0026 [104]: 1633d9be1cbeba9c -Block 0026 [105]: 431079c20c6dac62 -Block 0026 [106]: 5797684ab5a51658 -Block 0026 [107]: 6c669f583c1269c2 -Block 0026 [108]: a5d4304877962ed9 -Block 0026 [109]: 16abbaf910a907a7 -Block 0026 [110]: 7b80279a7ba988aa -Block 0026 [111]: 0bc8cea2c7084aa9 -Block 0026 [112]: 264cb55c54d5ad27 -Block 0026 [113]: 1a7f8846e62bba9c -Block 0026 [114]: 1c03cc75f7ce74e4 -Block 0026 [115]: 9944571757ddc5fa -Block 0026 [116]: 529e6ae1da16744d -Block 0026 [117]: c5153e8300f6dbed -Block 0026 [118]: abc65417de290d1b -Block 0026 [119]: 1f004424202a1b0a -Block 0026 [120]: cf3e839eeb92b189 -Block 0026 [121]: ef8b63f709186be2 -Block 0026 [122]: 1381a46de4cc9b60 -Block 0026 [123]: 46ef069715fbb521 -Block 0026 [124]: 5c225fbc8021dcc5 -Block 0026 [125]: bef20cb6a61f0826 -Block 0026 [126]: 688df34aa80029c2 -Block 0026 [127]: cd08d3de46464946 -Block 0027 [ 0]: f096dc3185d966c2 -Block 0027 [ 1]: d0ad3ab0d0656bae -Block 0027 [ 2]: 74c2422614d2ec64 -Block 0027 [ 3]: 687c01d102663a96 -Block 0027 [ 4]: a7a23967ca1e4843 -Block 0027 [ 5]: ecebcdc9d292e5bb -Block 0027 [ 6]: 7fa0abe1f526c09f -Block 0027 [ 7]: 37fc299537e25b91 -Block 0027 [ 8]: 99bee1a0a45aac3a -Block 0027 [ 9]: cf15202220272cb2 -Block 0027 [ 10]: eae1fcc2bceafb95 -Block 0027 [ 11]: dd5bd3d9fad9f727 -Block 0027 [ 12]: 80567562dcba64cf -Block 0027 [ 13]: e508747af9686bc4 -Block 0027 [ 14]: 4182eece1c93274a -Block 0027 [ 15]: 7edc10b4a33b2e1b -Block 0027 [ 16]: 7ec5682a947beac0 -Block 0027 [ 17]: 118d651eaa9b0f62 -Block 0027 [ 18]: b61d88641f68ab5d -Block 0027 [ 19]: 35badd2de0889c48 -Block 0027 [ 20]: 2c8f346e6876f454 -Block 0027 [ 21]: 478304ae6349d7e8 -Block 0027 [ 22]: 6d2810500634084e -Block 0027 [ 23]: 96d3d864a7d25fb4 -Block 0027 [ 24]: f29dfe7a753d21e4 -Block 0027 [ 25]: 2d2092e0345b81b4 -Block 0027 [ 26]: d3d4e7b8f30b5b4d -Block 0027 [ 27]: 966cc775e108688d -Block 0027 [ 28]: 92e135470b853dda -Block 0027 [ 29]: 1270493a870aa921 -Block 0027 [ 30]: 919cd6c705466b1d -Block 0027 [ 31]: a2939acdc6e4d066 -Block 0027 [ 32]: a304ab077675c888 -Block 0027 [ 33]: dfb58333a936fe6c -Block 0027 [ 34]: cca98347e639d280 -Block 0027 [ 35]: e0c7751fa0b95207 -Block 0027 [ 36]: 848c0482ff822b16 -Block 0027 [ 37]: 5af01581b7e62b6c -Block 0027 [ 38]: b016464dd3036bca -Block 0027 [ 39]: 1fb2a2ee30dff1a4 -Block 0027 [ 40]: fbf4e0ffa0ad1f2e -Block 0027 [ 41]: edf5f3be5331f61c -Block 0027 [ 42]: 7e5f55881a225643 -Block 0027 [ 43]: 62341c5352c796cb -Block 0027 [ 44]: bf162dc8d61c35ad -Block 0027 [ 45]: eee782d2dfb9f576 -Block 0027 [ 46]: 6b7ba3c07d263005 -Block 0027 [ 47]: e4b04cbfa903cf30 -Block 0027 [ 48]: 062e83f4560a79d8 -Block 0027 [ 49]: 17c1af32aa700e69 -Block 0027 [ 50]: d439638e74b2f66b -Block 0027 [ 51]: 64fd9c61d612a243 -Block 0027 [ 52]: 8dd0336357856c6d -Block 0027 [ 53]: 6d4c9d450b8ffb59 -Block 0027 [ 54]: 077a74414a905dc9 -Block 0027 [ 55]: 8046a314cc058ee5 -Block 0027 [ 56]: d8d54fce2d967c0e -Block 0027 [ 57]: 72035c981b1306f8 -Block 0027 [ 58]: 817343d510a272c3 -Block 0027 [ 59]: f07eb869b912aac8 -Block 0027 [ 60]: 1f57bf346c0b9468 -Block 0027 [ 61]: 84b55995890629ca -Block 0027 [ 62]: dec290057cec9c1b -Block 0027 [ 63]: 539154b989212510 -Block 0027 [ 64]: 58784ed313cd22f7 -Block 0027 [ 65]: 9e38a70af5a7db0b -Block 0027 [ 66]: dab3720f488e7c35 -Block 0027 [ 67]: a507550806424731 -Block 0027 [ 68]: 685b6a98ea7bbe6f -Block 0027 [ 69]: 9e8e21270e505097 -Block 0027 [ 70]: b77daaaf5e0fe51d -Block 0027 [ 71]: 79ef13739388ce3f -Block 0027 [ 72]: fe00eafe45c56be6 -Block 0027 [ 73]: bc7b9c5baff182fb -Block 0027 [ 74]: b35eabd2e8175144 -Block 0027 [ 75]: 99f48f8251f50e27 -Block 0027 [ 76]: ae1de2e512df9a3a -Block 0027 [ 77]: 470ee861030b164a -Block 0027 [ 78]: 5cd8f4c145b8dc2b -Block 0027 [ 79]: 41ad914535bf1043 -Block 0027 [ 80]: c5c20273c2ea694d -Block 0027 [ 81]: 6910400d047274eb -Block 0027 [ 82]: fa23ccc88611ed27 -Block 0027 [ 83]: 3fde5d5785ff6868 -Block 0027 [ 84]: 5ccc668ca420c783 -Block 0027 [ 85]: 21ad91fdb222acab -Block 0027 [ 86]: 16adf902927c8366 -Block 0027 [ 87]: 3cdb6e0c7a52bfe8 -Block 0027 [ 88]: a1bc687942afa21e -Block 0027 [ 89]: 8f54dddce8f7fd5c -Block 0027 [ 90]: 7b098fa4d4b6ab4a -Block 0027 [ 91]: a20634cbbf712aba -Block 0027 [ 92]: dd7777ea8afb70c9 -Block 0027 [ 93]: be05beeef4a4b8ee -Block 0027 [ 94]: e8b1925905bc113d -Block 0027 [ 95]: f0a1d60ea245eb7b -Block 0027 [ 96]: 1772469e07a94532 -Block 0027 [ 97]: 1df3f8439e4aa1ce -Block 0027 [ 98]: 66d5968f758bf1b0 -Block 0027 [ 99]: 5c35f016cfa6930e -Block 0027 [100]: 814ba6154fda28ad -Block 0027 [101]: e3dbf45106e1200d -Block 0027 [102]: ebb117726dab2d87 -Block 0027 [103]: 9e44b77784c653dd -Block 0027 [104]: a407d0952407cbf3 -Block 0027 [105]: 5e2110099e1cd4ea -Block 0027 [106]: 0f18e49033f7dc41 -Block 0027 [107]: c4332aa0c9c3c053 -Block 0027 [108]: 05b77caab4522bce -Block 0027 [109]: 29a3efbc52325114 -Block 0027 [110]: e1c0e2502bfa61af -Block 0027 [111]: f2a63277d6a3862d -Block 0027 [112]: 91b78dd58fc89d92 -Block 0027 [113]: 83a9e84f93692327 -Block 0027 [114]: fb6b7e7168751ec1 -Block 0027 [115]: 842c25ba64d5a3d8 -Block 0027 [116]: a50ebc02ce848a46 -Block 0027 [117]: 7fef4c3fd17127e8 -Block 0027 [118]: d661b87fbf9a2e34 -Block 0027 [119]: 98b71c1163dee85f -Block 0027 [120]: dfcacdd89eaa6e56 -Block 0027 [121]: b9abd457c2d22663 -Block 0027 [122]: 96e2ffbe173bb116 -Block 0027 [123]: f08974b04d026456 -Block 0027 [124]: f837e1862f495cc1 -Block 0027 [125]: 9dc79c703e07b954 -Block 0027 [126]: 0edb3ea5ce47e628 -Block 0027 [127]: bb94cd2b6c52fd2f -Block 0028 [ 0]: 0b8bfa4c5c97692d -Block 0028 [ 1]: 3fa01aeccfbcdebf -Block 0028 [ 2]: 9b19e228c5ffe5ec -Block 0028 [ 3]: 4624ebbea8947c48 -Block 0028 [ 4]: c30d6ed540afa086 -Block 0028 [ 5]: 2a61862b51cc4001 -Block 0028 [ 6]: 986a72ca0d3b275f -Block 0028 [ 7]: 8254f5483e9217c4 -Block 0028 [ 8]: a28f52ee554db367 -Block 0028 [ 9]: 7e03ad05d1743a6f -Block 0028 [ 10]: 5756878036e93a0b -Block 0028 [ 11]: ba168dcebfbe1b24 -Block 0028 [ 12]: 4eca447838c8fcf3 -Block 0028 [ 13]: 5dd09b4e010e7181 -Block 0028 [ 14]: 11aa79e5cfcb306f -Block 0028 [ 15]: 07a7d142ea04b372 -Block 0028 [ 16]: f2af2f7e65bc0d87 -Block 0028 [ 17]: baa9df98896b93a4 -Block 0028 [ 18]: 9c15d421cb8ba455 -Block 0028 [ 19]: fe2be76efa88ed21 -Block 0028 [ 20]: 1b37035070f9cbb9 -Block 0028 [ 21]: bbcbe391e2ce09f6 -Block 0028 [ 22]: 178ac0961508db49 -Block 0028 [ 23]: eff7abc82697e447 -Block 0028 [ 24]: 40f84b5085d1cd45 -Block 0028 [ 25]: 67775e01d463e559 -Block 0028 [ 26]: 8d07e8cdc435f37d -Block 0028 [ 27]: 9934217b91a7d414 -Block 0028 [ 28]: fa385dda3f4b1013 -Block 0028 [ 29]: 395a49ed50e1c9d2 -Block 0028 [ 30]: f329b164e220d024 -Block 0028 [ 31]: c660fbcdc4aa0785 -Block 0028 [ 32]: d6645444da6ace9d -Block 0028 [ 33]: cda566bd2bd27f63 -Block 0028 [ 34]: a282c756f0f20738 -Block 0028 [ 35]: db2ab31cd2a9ed5e -Block 0028 [ 36]: d6fbbe901dc5cb15 -Block 0028 [ 37]: 009aa73089ee763f -Block 0028 [ 38]: c09ecb723ca77bf1 -Block 0028 [ 39]: 79985c69f715a7be -Block 0028 [ 40]: ce8357764e0d204b -Block 0028 [ 41]: 26433dec7d36c631 -Block 0028 [ 42]: 9a70506191b6b793 -Block 0028 [ 43]: 79c2f30246220b39 -Block 0028 [ 44]: 1d2077172eff0607 -Block 0028 [ 45]: a9de9fa916722872 -Block 0028 [ 46]: d89b88b87ca12d3e -Block 0028 [ 47]: 870c847a554f4fef -Block 0028 [ 48]: a3a7a2748bfdb1de -Block 0028 [ 49]: edd069eee7b46d58 -Block 0028 [ 50]: 652602bbf39aaab7 -Block 0028 [ 51]: 2d4f209f3845e1e2 -Block 0028 [ 52]: 21308472e7be9f3a -Block 0028 [ 53]: 6c2db272b2a22b3c -Block 0028 [ 54]: 07a0740492d2359b -Block 0028 [ 55]: 374739683573a339 -Block 0028 [ 56]: 96c6ca6c0416b67e -Block 0028 [ 57]: b55df4f9cd261108 -Block 0028 [ 58]: af862bd549991a2a -Block 0028 [ 59]: 7dad80edf5e8206e -Block 0028 [ 60]: 05c95b6a445cc1dc -Block 0028 [ 61]: aa157bbfbb22d1aa -Block 0028 [ 62]: ca7b3e7ab07c0d70 -Block 0028 [ 63]: 394cd42c5c06a3c0 -Block 0028 [ 64]: 3a4bcdf992fedb45 -Block 0028 [ 65]: bc3a86c8c1a65078 -Block 0028 [ 66]: 5c5aeb0ba453aeaf -Block 0028 [ 67]: f284834b9c12c294 -Block 0028 [ 68]: f40b0d89c6a0441e -Block 0028 [ 69]: a4c885144d2dfd4f -Block 0028 [ 70]: 995ccb8d3d3af7e7 -Block 0028 [ 71]: c04b150b328137e6 -Block 0028 [ 72]: 90e86832780c763b -Block 0028 [ 73]: 4b251c2ffb40fd28 -Block 0028 [ 74]: 6d7bcad44112d76a -Block 0028 [ 75]: 1910e0c9e3b1d838 -Block 0028 [ 76]: 502ce4c4567d9432 -Block 0028 [ 77]: 124b66d5caab14d8 -Block 0028 [ 78]: 3fade26963f7b685 -Block 0028 [ 79]: 706539b9aa256e7b -Block 0028 [ 80]: c60fb2c39aa1b794 -Block 0028 [ 81]: b0211dc59dc646f1 -Block 0028 [ 82]: f34537f1b3e7d8cc -Block 0028 [ 83]: ba3baa631204f008 -Block 0028 [ 84]: 8c70d71cb5a2e75e -Block 0028 [ 85]: 1baa6160eaacb35b -Block 0028 [ 86]: 1d5a7acefa143c97 -Block 0028 [ 87]: 61c5da59873dd000 -Block 0028 [ 88]: 0292ee3bebcb4896 -Block 0028 [ 89]: 78b3fdfedac96082 -Block 0028 [ 90]: 8c53202fc59c6ee0 -Block 0028 [ 91]: c84a57856de4f50d -Block 0028 [ 92]: edd6e10e8954bc69 -Block 0028 [ 93]: ee16b0aeecfb83a6 -Block 0028 [ 94]: f5d2407a655cd4fc -Block 0028 [ 95]: 5582eba4f4f336a4 -Block 0028 [ 96]: 386c6c2b31e071ad -Block 0028 [ 97]: 4b6789f4e9271a28 -Block 0028 [ 98]: 1732ab6cb3b1c80b -Block 0028 [ 99]: 15726eb3db8d583d -Block 0028 [100]: d7e0ceea926cab91 -Block 0028 [101]: 94703084e3bb47e1 -Block 0028 [102]: 75e539dbeb6bc96c -Block 0028 [103]: 2da516bfde306d23 -Block 0028 [104]: 112679a6295082fe -Block 0028 [105]: ed817f8eade76421 -Block 0028 [106]: f39d3920dbc72bcf -Block 0028 [107]: 5a1a9faf59352d55 -Block 0028 [108]: e89a7d450442923f -Block 0028 [109]: ba346fe4087e77e7 -Block 0028 [110]: 35492364250abde6 -Block 0028 [111]: 9832e2b7905992a1 -Block 0028 [112]: 10b9b9b31d3ac35b -Block 0028 [113]: e4b0106fde39639d -Block 0028 [114]: d300caff1b81fc16 -Block 0028 [115]: 4aeee1beed87381b -Block 0028 [116]: 54eede43bd7f508a -Block 0028 [117]: 51ffc1138420db2c -Block 0028 [118]: 5e765bb31b18c0c2 -Block 0028 [119]: 1bf00fb92186e7c2 -Block 0028 [120]: 32d4d8cdb00aff86 -Block 0028 [121]: c1a075505c618c74 -Block 0028 [122]: 2862f96036005511 -Block 0028 [123]: f7e86b9564e716f3 -Block 0028 [124]: a4498d8255501669 -Block 0028 [125]: 771f2428943d3630 -Block 0028 [126]: f4dbed4a8483b5f8 -Block 0028 [127]: 38e0618f70429e7a -Block 0029 [ 0]: 1342aa819759ad55 -Block 0029 [ 1]: 2a58d88b1313ee1d -Block 0029 [ 2]: 04380d2370776def -Block 0029 [ 3]: 2984280394553fa4 -Block 0029 [ 4]: e6e0cbf7515e7614 -Block 0029 [ 5]: 65d3039585de045b -Block 0029 [ 6]: fad2abab2d69eabf -Block 0029 [ 7]: 14f6856b255cc8b0 -Block 0029 [ 8]: cf5e53abb23fde4b -Block 0029 [ 9]: 0f9ed7c99a4186b1 -Block 0029 [ 10]: 5128f73f1c9c476a -Block 0029 [ 11]: daa8ace3701b388b -Block 0029 [ 12]: 528eef2a04f98732 -Block 0029 [ 13]: b2f7800cb0863ba7 -Block 0029 [ 14]: 4c7f9bc145bfca64 -Block 0029 [ 15]: 62cb81be906a7529 -Block 0029 [ 16]: ae6a747e1fe0c590 -Block 0029 [ 17]: 64c36f221ccd38cb -Block 0029 [ 18]: 62e82903b941ce11 -Block 0029 [ 19]: 34abc5adfb0b23c9 -Block 0029 [ 20]: 69ac60e945ade24d -Block 0029 [ 21]: 80642aeab6d7bca9 -Block 0029 [ 22]: 4c8395c9e008dc8a -Block 0029 [ 23]: 0e3fc29352116891 -Block 0029 [ 24]: 78f2c451e68d73f7 -Block 0029 [ 25]: 6a4594a1b3f1c724 -Block 0029 [ 26]: 768002b557fef95e -Block 0029 [ 27]: 7bdcf6b313041bfc -Block 0029 [ 28]: 2e4c3ba77b7dc340 -Block 0029 [ 29]: 73080545a3049a27 -Block 0029 [ 30]: 3b71ab0a0f6b5be0 -Block 0029 [ 31]: 8fb04622b683c1fa -Block 0029 [ 32]: 29367052161c185d -Block 0029 [ 33]: 54c7744f8bd9d6ac -Block 0029 [ 34]: 35bf09e564100364 -Block 0029 [ 35]: 88f3c401223434f8 -Block 0029 [ 36]: 96d01519f6d5f60c -Block 0029 [ 37]: 4872434a3b4be97b -Block 0029 [ 38]: b64455bbe358020f -Block 0029 [ 39]: b455a338bafb3877 -Block 0029 [ 40]: 101974b5b225f62a -Block 0029 [ 41]: bb130e2146078e1d -Block 0029 [ 42]: 08d5d8867a06cdcb -Block 0029 [ 43]: 5188fb4d5e177880 -Block 0029 [ 44]: 1e88286829af2a8b -Block 0029 [ 45]: 1fb55b9f7549c764 -Block 0029 [ 46]: e1b13f2e423836c0 -Block 0029 [ 47]: 21f928ab65ee3682 -Block 0029 [ 48]: dbb430a89dd1a2a0 -Block 0029 [ 49]: caeb04df4c3100b2 -Block 0029 [ 50]: 013548395a133533 -Block 0029 [ 51]: ceb65861a017b5a8 -Block 0029 [ 52]: 3503846ee3882099 -Block 0029 [ 53]: f2b3055f0274c056 -Block 0029 [ 54]: 3c1aaed297fa6a09 -Block 0029 [ 55]: a1b3eaa82adb7138 -Block 0029 [ 56]: 7c98c993986612c7 -Block 0029 [ 57]: 332e0a10cb62caa6 -Block 0029 [ 58]: 7255157123d19354 -Block 0029 [ 59]: 87fada98140da26c -Block 0029 [ 60]: aa8f500aa9b5b4b4 -Block 0029 [ 61]: 5334543eba7805d2 -Block 0029 [ 62]: cda91bedbba419c2 -Block 0029 [ 63]: 8500721d1be41584 -Block 0029 [ 64]: d7d443102fbfbc58 -Block 0029 [ 65]: c8509445b06f2de8 -Block 0029 [ 66]: 41b046af2881f5d4 -Block 0029 [ 67]: 5a3a48952a70c0e9 -Block 0029 [ 68]: 2084ab777d8696fb -Block 0029 [ 69]: 367e4408de9f5e17 -Block 0029 [ 70]: 484f3345ea0f2209 -Block 0029 [ 71]: c3e89ccdec8d22c0 -Block 0029 [ 72]: 0242efdae8284e48 -Block 0029 [ 73]: f42905a84a844efe -Block 0029 [ 74]: 4424a2d4a1197b13 -Block 0029 [ 75]: 1d6d68842f1f3baa -Block 0029 [ 76]: b2edca88f7391dd4 -Block 0029 [ 77]: 07fe96875027d8dd -Block 0029 [ 78]: 26d07af4b56aa62b -Block 0029 [ 79]: 42ed21346aa2e910 -Block 0029 [ 80]: 427767abb9fc5db4 -Block 0029 [ 81]: 0ac5fea84b1c8fea -Block 0029 [ 82]: e27b91cfe888586d -Block 0029 [ 83]: 9068ed91b466cc0d -Block 0029 [ 84]: a55c75d158364b84 -Block 0029 [ 85]: d32d2407084e5174 -Block 0029 [ 86]: ea4f8cd3446c1654 -Block 0029 [ 87]: 52abfadbf462d66e -Block 0029 [ 88]: e670f796c665c750 -Block 0029 [ 89]: acbd1e8a64642e79 -Block 0029 [ 90]: a4c52d4c306fb308 -Block 0029 [ 91]: e7cea689579e0459 -Block 0029 [ 92]: ca6d2536a9c2b9a2 -Block 0029 [ 93]: 976ae0ac10f180e0 -Block 0029 [ 94]: 21f2d2f4a76951c8 -Block 0029 [ 95]: c63af3df30f6c4cf -Block 0029 [ 96]: 7c8d504059d31bde -Block 0029 [ 97]: 199eed54c6d323f4 -Block 0029 [ 98]: 04ef01484192b42a -Block 0029 [ 99]: 1cc19807d3fe0312 -Block 0029 [100]: 076c5b88f99a4766 -Block 0029 [101]: 32d3367c2e6058bf -Block 0029 [102]: 4c1ab23f34450cd4 -Block 0029 [103]: d05a45b002419d95 -Block 0029 [104]: a3e427169cce8c7b -Block 0029 [105]: 41b0beda3e123b31 -Block 0029 [106]: 1fd29ff5325c3021 -Block 0029 [107]: 418d7de5c18e8e7b -Block 0029 [108]: d857b25e57918532 -Block 0029 [109]: f23eab6af4e6f76b -Block 0029 [110]: 40df4093be491248 -Block 0029 [111]: 615b5919b163abc8 -Block 0029 [112]: dcecda207b953e9d -Block 0029 [113]: 612961710ce6358c -Block 0029 [114]: 408d6b85949c58f4 -Block 0029 [115]: d76936ce1d0d13c4 -Block 0029 [116]: f9c53a9492aad041 -Block 0029 [117]: c322c91811f78d3c -Block 0029 [118]: 609092f732b959b9 -Block 0029 [119]: ffe586d098e15630 -Block 0029 [120]: 5ffa0694fecaf5be -Block 0029 [121]: 8e08307f8ce1a92e -Block 0029 [122]: caa97eb3c6a9dfdf -Block 0029 [123]: 16ab5c05cb1bbef2 -Block 0029 [124]: 4651fbe947cda767 -Block 0029 [125]: b96daab8a4836c53 -Block 0029 [126]: 08fef05406742d7f -Block 0029 [127]: fee5545bf12d959f -Block 0030 [ 0]: ecb2b372da831b49 -Block 0030 [ 1]: c709558a41457c0e -Block 0030 [ 2]: f8464ae225358d10 -Block 0030 [ 3]: 565858a0371880b2 -Block 0030 [ 4]: 846f3802baa7d4d5 -Block 0030 [ 5]: 6a2041cf11bdc232 -Block 0030 [ 6]: 7391dac65c6ca396 -Block 0030 [ 7]: 20610c5f3458d103 -Block 0030 [ 8]: cf7dc2c3b5d21218 -Block 0030 [ 9]: b26b81b52310e8be -Block 0030 [ 10]: 1caf5d5acdd8ad0d -Block 0030 [ 11]: 9844351aac7ebd44 -Block 0030 [ 12]: 34b85f9e05026736 -Block 0030 [ 13]: 8d90acaec66ee2c5 -Block 0030 [ 14]: 79ebbbcc314700ea -Block 0030 [ 15]: af9ce295d25e9854 -Block 0030 [ 16]: 4633750c86574511 -Block 0030 [ 17]: 841dd873cf7c9af8 -Block 0030 [ 18]: 30a56a49963d6332 -Block 0030 [ 19]: 8758c43d7f43bc52 -Block 0030 [ 20]: 613500bf86a2472e -Block 0030 [ 21]: b662ccfc37dafc4e -Block 0030 [ 22]: b892dd0b1ed4867d -Block 0030 [ 23]: 55d004e0c22a6fa9 -Block 0030 [ 24]: 01895e286327f069 -Block 0030 [ 25]: 6316e819327f5aac -Block 0030 [ 26]: c17a79dc28221ff2 -Block 0030 [ 27]: fc7217cbe4abcb0f -Block 0030 [ 28]: e0a22abc712fc4ec -Block 0030 [ 29]: fc2ca70ad9656a5d -Block 0030 [ 30]: 78ad17f00e8363f9 -Block 0030 [ 31]: 5b8e9b907b095c13 -Block 0030 [ 32]: 1d0437e94c488a53 -Block 0030 [ 33]: a6c09180446ee448 -Block 0030 [ 34]: 592db16392414b1f -Block 0030 [ 35]: dfceadcd216f1c3b -Block 0030 [ 36]: afd0defb38513b4a -Block 0030 [ 37]: 55fec53c4a852f66 -Block 0030 [ 38]: 97cc98dede0e137a -Block 0030 [ 39]: 1efe8b0285eb0d53 -Block 0030 [ 40]: 0947a3ce98d0b868 -Block 0030 [ 41]: 4d49836cbb9e0f4d -Block 0030 [ 42]: 4464d43166968015 -Block 0030 [ 43]: 703e0898da38b794 -Block 0030 [ 44]: 5b7cfe7a59211f1c -Block 0030 [ 45]: 3c5fdc76342c4cc1 -Block 0030 [ 46]: 7edc3f911984cd71 -Block 0030 [ 47]: 53449b257e33379e -Block 0030 [ 48]: 97d49ba1e50a04fe -Block 0030 [ 49]: ca13017e3f9f4a72 -Block 0030 [ 50]: 86894a3d08a6cb97 -Block 0030 [ 51]: 805c183bd03c0ba8 -Block 0030 [ 52]: 966043770eadc1cf -Block 0030 [ 53]: 24a31a0bd717faa9 -Block 0030 [ 54]: 5a19962dad2bf5df -Block 0030 [ 55]: 3034f2f99495ce20 -Block 0030 [ 56]: 195fc7abd1a5dbe9 -Block 0030 [ 57]: 1f3a814bd85e8d9c -Block 0030 [ 58]: 59d4902d0897791f -Block 0030 [ 59]: 70616ecbae769969 -Block 0030 [ 60]: c0b35fdf7dd011a6 -Block 0030 [ 61]: 6c27eecf0dfaf13f -Block 0030 [ 62]: 04f4f55a838c904b -Block 0030 [ 63]: ee2bfa574b1f004c -Block 0030 [ 64]: 84cb47f17a211553 -Block 0030 [ 65]: 5ac7865a063f9175 -Block 0030 [ 66]: e1ce6460323291c0 -Block 0030 [ 67]: eddc3b6f7afb8969 -Block 0030 [ 68]: 1e1ed3f48592d3dc -Block 0030 [ 69]: c67f038d66ff6f88 -Block 0030 [ 70]: bd781d0261855bc3 -Block 0030 [ 71]: 2e1566dbfb78a892 -Block 0030 [ 72]: 035a4f7d351c8810 -Block 0030 [ 73]: d9301b86641d0837 -Block 0030 [ 74]: 4b4aa1e8bdf77993 -Block 0030 [ 75]: 22d5689c791cc39d -Block 0030 [ 76]: 04b267f305fdd276 -Block 0030 [ 77]: 89753d14693cdb86 -Block 0030 [ 78]: 49fd119b577707e6 -Block 0030 [ 79]: 04d8b03e8f25118c -Block 0030 [ 80]: f6aaf158c98bf608 -Block 0030 [ 81]: 6338c751302a2349 -Block 0030 [ 82]: b7169b8de98723cd -Block 0030 [ 83]: 9876c68d02e8d8da -Block 0030 [ 84]: d8be27b15da3e9c4 -Block 0030 [ 85]: d3c3bd16ce4518a1 -Block 0030 [ 86]: f116e6da60817f05 -Block 0030 [ 87]: 424d9096e5b7b236 -Block 0030 [ 88]: 68d08f23d2e01660 -Block 0030 [ 89]: 8391b1d4ccc96e77 -Block 0030 [ 90]: fa5a0445cb9d4eca -Block 0030 [ 91]: f35dea2991f818b8 -Block 0030 [ 92]: da06fcfbf14caaa3 -Block 0030 [ 93]: 3396473fc9b49d26 -Block 0030 [ 94]: dc0e4607f7047e53 -Block 0030 [ 95]: 88b8af32491bc7af -Block 0030 [ 96]: 2543c3dcba53d6cf -Block 0030 [ 97]: 74ccab446534e9a3 -Block 0030 [ 98]: 0875c246fb99841e -Block 0030 [ 99]: 2f13fcc0817d3543 -Block 0030 [100]: c8ab3c7a4e7260e6 -Block 0030 [101]: c730058d7eeda80d -Block 0030 [102]: de7fb4151297bbaf -Block 0030 [103]: 8b2bad56cd257929 -Block 0030 [104]: a16f121d2c6babeb -Block 0030 [105]: b23aed50a12698f7 -Block 0030 [106]: e6bc74f1c5e53eac -Block 0030 [107]: 2ecf12c6cc28ee0f -Block 0030 [108]: 73265ce24ac7eefa -Block 0030 [109]: c417f95b086f1ec4 -Block 0030 [110]: f5b33108d3254d7d -Block 0030 [111]: 2282b8385a69f71f -Block 0030 [112]: 08a128c65513bfc3 -Block 0030 [113]: dd1a056868bcb22c -Block 0030 [114]: 3711a120d9fe89fc -Block 0030 [115]: f629ebef106760db -Block 0030 [116]: 778784289feeebf6 -Block 0030 [117]: 781afab3042ba6cf -Block 0030 [118]: 69bfc9973c31f543 -Block 0030 [119]: 5a5d3d243c6a8b20 -Block 0030 [120]: d11b7960cf63ec8b -Block 0030 [121]: 6ad4c4cdb53621ce -Block 0030 [122]: 4ac645a6e18a6b16 -Block 0030 [123]: d4475ac4c0dbe40e -Block 0030 [124]: dfe701181b74acef -Block 0030 [125]: d4e308ef3c600531 -Block 0030 [126]: ef51f4965e80d50b -Block 0030 [127]: 2124a91e80b26b68 -Block 0031 [ 0]: 309f6c299d9879f9 -Block 0031 [ 1]: 61375f9b7b14d354 -Block 0031 [ 2]: 40ea625b81391ff8 -Block 0031 [ 3]: f15cbed827226249 -Block 0031 [ 4]: 5ce9b1693a572eda -Block 0031 [ 5]: 65f45c6d4dfa8c12 -Block 0031 [ 6]: 3e67d3cf7da85c8c -Block 0031 [ 7]: b8f8961765faa2c9 -Block 0031 [ 8]: 99f0b83b95d7c0f1 -Block 0031 [ 9]: fb304008030ea3f5 -Block 0031 [ 10]: ae5e2fa3a29075b4 -Block 0031 [ 11]: aa1ae37b327f62f2 -Block 0031 [ 12]: b94bce85e927be6c -Block 0031 [ 13]: c896549ae636df68 -Block 0031 [ 14]: 6952c1358d21b5a2 -Block 0031 [ 15]: 4038f1bbbdf6adde -Block 0031 [ 16]: 97fcf925d6298326 -Block 0031 [ 17]: 3e504f4327bcbdb6 -Block 0031 [ 18]: 024d30c429f5054f -Block 0031 [ 19]: 75318591f6653e81 -Block 0031 [ 20]: 29f7301b7b033e0d -Block 0031 [ 21]: 449cb4cc3a62ea86 -Block 0031 [ 22]: 42394853452068a9 -Block 0031 [ 23]: c87ddfebc72f384a -Block 0031 [ 24]: 47e532412f29d651 -Block 0031 [ 25]: 125959ed7619d763 -Block 0031 [ 26]: 68abeabaac672be4 -Block 0031 [ 27]: 784a08ffe3ea2e41 -Block 0031 [ 28]: 6635e49ca42e4b89 -Block 0031 [ 29]: bfe5d9a0b21ac03a -Block 0031 [ 30]: ee6453c49343c88e -Block 0031 [ 31]: 8665b5fa8f950f2e -Block 0031 [ 32]: f7f69ec71b54b177 -Block 0031 [ 33]: 40c25f95d856ebf5 -Block 0031 [ 34]: 59b9f6a29a90c6ec -Block 0031 [ 35]: 096e5d0f85b170ee -Block 0031 [ 36]: 98ac3365d491ef48 -Block 0031 [ 37]: 6a24ed36ca69234c -Block 0031 [ 38]: 9f4db634e58667b2 -Block 0031 [ 39]: 7f15383988bb1942 -Block 0031 [ 40]: 675e54a4986414dd -Block 0031 [ 41]: 9fb264d03b0bf34b -Block 0031 [ 42]: cc1fe359233a59ca -Block 0031 [ 43]: 06a7b5af161bca13 -Block 0031 [ 44]: d28e1ed596b43cce -Block 0031 [ 45]: d29ca29e051618cb -Block 0031 [ 46]: 9b11d233a9dc1f8b -Block 0031 [ 47]: 05116b39d78d10af -Block 0031 [ 48]: cfe9dc47077bbf75 -Block 0031 [ 49]: d89b8e20b6ddd178 -Block 0031 [ 50]: 2ea00f20ffc093cd -Block 0031 [ 51]: 51a0bd55c1eba699 -Block 0031 [ 52]: 3bf5d4ab777f6481 -Block 0031 [ 53]: 46308de0349ff974 -Block 0031 [ 54]: 677f762cbf01eafb -Block 0031 [ 55]: 148e52d70f13d161 -Block 0031 [ 56]: aac9894a6c0f52d8 -Block 0031 [ 57]: 916fad8177fb1517 -Block 0031 [ 58]: 2c6cb971e8ce24cf -Block 0031 [ 59]: b7f66b84ff3f1c6a -Block 0031 [ 60]: 7f131a58d45e20bf -Block 0031 [ 61]: b6b67bc9e2b162f3 -Block 0031 [ 62]: 224e9472ce3079a7 -Block 0031 [ 63]: bd52673cf1ebbc03 -Block 0031 [ 64]: 44210f114a3a508a -Block 0031 [ 65]: ab3566dfbea655ce -Block 0031 [ 66]: cf56bb4dabf2242b -Block 0031 [ 67]: d5749f3362a12aa9 -Block 0031 [ 68]: 65ebbb72e3ef59aa -Block 0031 [ 69]: f7484897773e242f -Block 0031 [ 70]: d043e243e50c581c -Block 0031 [ 71]: 7d1856ffd1fd2b33 -Block 0031 [ 72]: 723d2b6879dc6233 -Block 0031 [ 73]: 0128bca8e3230729 -Block 0031 [ 74]: e7f2af7f1f7a1162 -Block 0031 [ 75]: fad5c639a11e0a56 -Block 0031 [ 76]: e9bf231c61e72996 -Block 0031 [ 77]: b27143bd911ac35f -Block 0031 [ 78]: 757d9dc8b44d6729 -Block 0031 [ 79]: 0f784c8f9e2c457a -Block 0031 [ 80]: 5296215752af68c3 -Block 0031 [ 81]: fa2a0d6367d5d43a -Block 0031 [ 82]: 1c9d65b53604c9d0 -Block 0031 [ 83]: 1d55fd904fe8220b -Block 0031 [ 84]: ed34cd49c315a03a -Block 0031 [ 85]: 861ea5c5823bd9d5 -Block 0031 [ 86]: 358f58cb124df94c -Block 0031 [ 87]: 0b435adf91a35571 -Block 0031 [ 88]: dae7e1826db85ac4 -Block 0031 [ 89]: e670470c6ab8d9f2 -Block 0031 [ 90]: 30486e741c630a66 -Block 0031 [ 91]: 450d29e8cc3d4a69 -Block 0031 [ 92]: 49cdad6d59ac0add -Block 0031 [ 93]: e2bf968460f6259c -Block 0031 [ 94]: 191ca7f68c89af1e -Block 0031 [ 95]: 4497145b189ebb9a -Block 0031 [ 96]: 8da638358c0172ed -Block 0031 [ 97]: 8605c94d37eda7a0 -Block 0031 [ 98]: 6f2f59e44ef3811c -Block 0031 [ 99]: d5a44e6cc6dbb8b4 -Block 0031 [100]: bde572402e5c7dc2 -Block 0031 [101]: 3cd497d950293385 -Block 0031 [102]: 102be5062c637c5b -Block 0031 [103]: 69eaf3ad1722eb9f -Block 0031 [104]: 731dac2d1a722ca6 -Block 0031 [105]: afdfc9648bbb9b22 -Block 0031 [106]: 4ab06cc5234aef04 -Block 0031 [107]: 1f34f7c1ae7a0fb7 -Block 0031 [108]: 146d394a1d56fd2b -Block 0031 [109]: a71cef66736ea071 -Block 0031 [110]: be4dc0c799a9ab61 -Block 0031 [111]: 8f57dd28099e022e -Block 0031 [112]: bd6e3b1a62c0275b -Block 0031 [113]: fdfe31be37c6a3b8 -Block 0031 [114]: e6a7e6915adba060 -Block 0031 [115]: 95451eace1219c4e -Block 0031 [116]: 897816235b92c932 -Block 0031 [117]: 45e906d8622b85d3 -Block 0031 [118]: b82f4e0aa72d95dd -Block 0031 [119]: f4caee2823606dbb -Block 0031 [120]: 8c82170ba6003b71 -Block 0031 [121]: b9ba587178c53719 -Block 0031 [122]: 8da04337ef20afda -Block 0031 [123]: a863485e73253dc6 -Block 0031 [124]: 86ff3e9a61b6889c -Block 0031 [125]: dd50c7237eb67f05 -Block 0031 [126]: 7f19e13551117d48 -Block 0031 [127]: 67acdea7f4a2c876 - - After pass 1: -Block 0000 [ 0]: eb70c5da71245685 -Block 0000 [ 1]: b9aff8ada10961b8 -Block 0000 [ 2]: 865a10e399244b02 -Block 0000 [ 3]: 3161b9cd7980bda1 -Block 0000 [ 4]: 6bd2564c45042263 -Block 0000 [ 5]: 2b70da92385e4d23 -Block 0000 [ 6]: 98662686decc6e46 -Block 0000 [ 7]: 0de4ef0b5e35c2b4 -Block 0000 [ 8]: f238d4faa61a746f -Block 0000 [ 9]: 811d631e78456381 -Block 0000 [ 10]: 6b819488537c6b98 -Block 0000 [ 11]: 37bed8fffc2982ca -Block 0000 [ 12]: d8d61a26c1e1ab05 -Block 0000 [ 13]: 1568a7dfdae11df3 -Block 0000 [ 14]: b98f088aa645818c -Block 0000 [ 15]: 49aa299e0418469f -Block 0000 [ 16]: 4525a20e6ccba1fa -Block 0000 [ 17]: 937a4c94329365c5 -Block 0000 [ 18]: f0651d65470c89ee -Block 0000 [ 19]: ad9c2258efd5b32f -Block 0000 [ 20]: e95c39b287f061cb -Block 0000 [ 21]: 7105469e5f3b6097 -Block 0000 [ 22]: 52c23bd89c3dbe93 -Block 0000 [ 23]: e8e2706053327645 -Block 0000 [ 24]: 426c93675bfb8bad -Block 0000 [ 25]: 0d7dd3f7765e74c4 -Block 0000 [ 26]: 2c0954cbdd78ae1e -Block 0000 [ 27]: a484f003d25c1e2c -Block 0000 [ 28]: e433f058fdc53484 -Block 0000 [ 29]: 32db9ec16228254d -Block 0000 [ 30]: 8606a609508964c6 -Block 0000 [ 31]: 028fa140a907996a -Block 0000 [ 32]: 3afe54aee0ac53f9 -Block 0000 [ 33]: cc841e8ea9256952 -Block 0000 [ 34]: b27a9e52e5a82a90 -Block 0000 [ 35]: c6952624f6604e7e -Block 0000 [ 36]: 3e5e9a30a46765d1 -Block 0000 [ 37]: cc9f0a8b549ed406 -Block 0000 [ 38]: bfc31a98356d4436 -Block 0000 [ 39]: 89dea935c35aa6fd -Block 0000 [ 40]: 4ad0cb25dcc550db -Block 0000 [ 41]: 90a65cd8468abe7a -Block 0000 [ 42]: e4a2d75fbd35f1f4 -Block 0000 [ 43]: 03dcdcc9f0c3237f -Block 0000 [ 44]: 0e994242e9a98267 -Block 0000 [ 45]: f99ef10d64526f28 -Block 0000 [ 46]: 5fa42b5b906d097b -Block 0000 [ 47]: 3e57b6d1537dea15 -Block 0000 [ 48]: 175fdc8efe4590af -Block 0000 [ 49]: 809ab15fc4a2f68f -Block 0000 [ 50]: a9d11f6794e8d56d -Block 0000 [ 51]: ed6917141657969c -Block 0000 [ 52]: ea1a177cd47cd946 -Block 0000 [ 53]: cd289f074b35107c -Block 0000 [ 54]: 6359c0b519a8c31a -Block 0000 [ 55]: e081ba4316625dbb -Block 0000 [ 56]: de621edd1c166bb0 -Block 0000 [ 57]: 119aae89e2d7ae00 -Block 0000 [ 58]: 9c582b7525e90087 -Block 0000 [ 59]: e8c5df0b317630e5 -Block 0000 [ 60]: 17cb00fd02299703 -Block 0000 [ 61]: e69d92c5b0f3f45f -Block 0000 [ 62]: da58b8821a7dad01 -Block 0000 [ 63]: 596b3101643a1c77 -Block 0000 [ 64]: ee313aa55337b4bb -Block 0000 [ 65]: 06c72d8e8f38ea5d -Block 0000 [ 66]: 750ff687051a770f -Block 0000 [ 67]: 5d62741e42692ce5 -Block 0000 [ 68]: 9aa7b38ac07ff7a9 -Block 0000 [ 69]: df6175baf2fbc7b9 -Block 0000 [ 70]: cb00ce655414438f -Block 0000 [ 71]: af8716443e612d6a -Block 0000 [ 72]: 035b48984d145bc8 -Block 0000 [ 73]: c027c987a5064e5e -Block 0000 [ 74]: 66fb69540d4cca95 -Block 0000 [ 75]: be24d4bbbf3b02d6 -Block 0000 [ 76]: 0d3c404e0eeb547e -Block 0000 [ 77]: 08d96b387dd93a3f -Block 0000 [ 78]: 7d4209513e3c6dcf -Block 0000 [ 79]: 5894561b00c0b399 -Block 0000 [ 80]: f43326c64db2884e -Block 0000 [ 81]: 824e4ce31d9017db -Block 0000 [ 82]: a1d77f6e1368af6b -Block 0000 [ 83]: f733fa8b41d42e35 -Block 0000 [ 84]: 97c1608fcc7fa98d -Block 0000 [ 85]: db39d6b9297fe0ec -Block 0000 [ 86]: 8612f6beecb98441 -Block 0000 [ 87]: e82c1a9b4e205b3b -Block 0000 [ 88]: f91dcdb7188cfee6 -Block 0000 [ 89]: 57c8499d166215d4 -Block 0000 [ 90]: d774d1f7501185a8 -Block 0000 [ 91]: 08c158f7c95c4270 -Block 0000 [ 92]: 14b2df73ec7323c5 -Block 0000 [ 93]: 4e51fe5e5cc36675 -Block 0000 [ 94]: 5246234dc2a65747 -Block 0000 [ 95]: e88225ff9aafe09a -Block 0000 [ 96]: e1bda4b1a686a873 -Block 0000 [ 97]: eceb71893e27e7df -Block 0000 [ 98]: bca712ae5301ab4f -Block 0000 [ 99]: 6db640a15fe58ea4 -Block 0000 [100]: ba8e3fd75b1ae8b5 -Block 0000 [101]: 97ead52de3d8e35a -Block 0000 [102]: 3d4cf8cfc6dcd3c4 -Block 0000 [103]: 365d4258a2a2327e -Block 0000 [104]: 8bf174175fba6d54 -Block 0000 [105]: 3ce2d97f02a42d99 -Block 0000 [106]: 4df564c159e3b688 -Block 0000 [107]: 969691276b698548 -Block 0000 [108]: 2555c88e11430978 -Block 0000 [109]: e8c762e576a1f13c -Block 0000 [110]: 3b73325fdf4dba52 -Block 0000 [111]: 4e14995f0006aa8a -Block 0000 [112]: 822837767bd6da76 -Block 0000 [113]: f3f9d0ae4419aa57 -Block 0000 [114]: 23b9d2a26182eb2c -Block 0000 [115]: accb780b765bb407 -Block 0000 [116]: cca383fad32fafe3 -Block 0000 [117]: 47a02bbaee291a3c -Block 0000 [118]: 7085e3ac8acc427a -Block 0000 [119]: fed8144177ccaa27 -Block 0000 [120]: caa9bbfd51958faa -Block 0000 [121]: 8cb014215f290920 -Block 0000 [122]: 09b9ef1b731adc3d -Block 0000 [123]: d2a34f72092af56a -Block 0000 [124]: 249e39d444310e4b -Block 0000 [125]: 073fd444412cba9d -Block 0000 [126]: 7ca3c58f2c75d8a3 -Block 0000 [127]: 26dbe92fb3f5f00d -Block 0001 [ 0]: 4f728b69452fae31 -Block 0001 [ 1]: 654a59d030defa14 -Block 0001 [ 2]: 5f458f10c59f812a -Block 0001 [ 3]: 2a62954ed18bb93b -Block 0001 [ 4]: 26684fc624027a00 -Block 0001 [ 5]: 0ea0d3102c0485dd -Block 0001 [ 6]: 7ae1bdad4f312a66 -Block 0001 [ 7]: 8fea98a8c478b87e -Block 0001 [ 8]: 6f692ec7e9c54bbb -Block 0001 [ 9]: da9ca98424721bed -Block 0001 [ 10]: 900cbd5ce6fbe7bb -Block 0001 [ 11]: 85dbd49905599fc7 -Block 0001 [ 12]: 92f4addaefd9925b -Block 0001 [ 13]: 09608538561f2ca8 -Block 0001 [ 14]: ed7e94fd75bdd70a -Block 0001 [ 15]: 6d3ae3542fc34e01 -Block 0001 [ 16]: 7e7320c7088bb0e4 -Block 0001 [ 17]: e84d71c8ffbb2e67 -Block 0001 [ 18]: b7186919d8398b85 -Block 0001 [ 19]: e01b6bbe4055a48a -Block 0001 [ 20]: 3fd1d5fef68647d3 -Block 0001 [ 21]: 6300d72e1ffdf28b -Block 0001 [ 22]: b60996e804f36f8a -Block 0001 [ 23]: 2e93284225f6fc7c -Block 0001 [ 24]: a81d205f94650509 -Block 0001 [ 25]: 71f606dd8bebd0be -Block 0001 [ 26]: ee5d60be569efca5 -Block 0001 [ 27]: 4fc7328a0df5fcf4 -Block 0001 [ 28]: 2d961d7cfd357bd2 -Block 0001 [ 29]: 218726fbb9aeefc5 -Block 0001 [ 30]: 63f6f9cba09bb92d -Block 0001 [ 31]: 23973798dd642b97 -Block 0001 [ 32]: 68fe2ef53a26e4d0 -Block 0001 [ 33]: 9c3b84e088170e25 -Block 0001 [ 34]: c45fd09ea0d35688 -Block 0001 [ 35]: f2223ca8a907b99c -Block 0001 [ 36]: 4d85ca6a4e238eb0 -Block 0001 [ 37]: 9887644e7a74709d -Block 0001 [ 38]: 61c05b5b39af1c81 -Block 0001 [ 39]: 168218475794699a -Block 0001 [ 40]: 94fe356de27a61b8 -Block 0001 [ 41]: 08f98c2a5d687d4b -Block 0001 [ 42]: cdd9c1173a7cba9e -Block 0001 [ 43]: 4cbcf597f3cc3741 -Block 0001 [ 44]: e25bbedf15ccd7af -Block 0001 [ 45]: 8edc82479e1021c5 -Block 0001 [ 46]: d6ac7072e5cb40bc -Block 0001 [ 47]: e3dd6a54105d8932 -Block 0001 [ 48]: 581127fb5cb723a1 -Block 0001 [ 49]: 7050d0b24075dd5d -Block 0001 [ 50]: d5d2db339110fecf -Block 0001 [ 51]: ca62dccb416e4ac0 -Block 0001 [ 52]: 0293fe19b2c7a989 -Block 0001 [ 53]: 003ffccf01821aef -Block 0001 [ 54]: a3862c4116af5880 -Block 0001 [ 55]: b32910abbd694633 -Block 0001 [ 56]: 3f1176ab6a7f813f -Block 0001 [ 57]: 2025169a421a1771 -Block 0001 [ 58]: 935e5cc76adda9cb -Block 0001 [ 59]: 7335434849a26c6b -Block 0001 [ 60]: fa8ac0211e6b711a -Block 0001 [ 61]: 67145dbd1fb8001f -Block 0001 [ 62]: 4028012eeb9526ba -Block 0001 [ 63]: 385e0230fdf4f479 -Block 0001 [ 64]: 5a08384e562ccbe4 -Block 0001 [ 65]: 8fb1278b85d0d468 -Block 0001 [ 66]: 510c114748e9813f -Block 0001 [ 67]: d97ae3c8d92fb2d8 -Block 0001 [ 68]: dba513dc70d1bcca -Block 0001 [ 69]: 76df969ae1aa86e7 -Block 0001 [ 70]: 0a8bae02bae5800a -Block 0001 [ 71]: bb2078b61251d404 -Block 0001 [ 72]: b6db3e229806b315 -Block 0001 [ 73]: e60dee1006818f8a -Block 0001 [ 74]: a8e840613f64bf94 -Block 0001 [ 75]: e3d557347e2c6765 -Block 0001 [ 76]: 3cfd647de70de6ca -Block 0001 [ 77]: 2727cb94eacf75c8 -Block 0001 [ 78]: 782e0fd561e7fc1c -Block 0001 [ 79]: aaf6005b1175d39d -Block 0001 [ 80]: 1e38a51a498783fe -Block 0001 [ 81]: 8118e9ad026edfd1 -Block 0001 [ 82]: da1b462bb6ada0d5 -Block 0001 [ 83]: 0e07fd989e0740ec -Block 0001 [ 84]: 167027d0dfe260c4 -Block 0001 [ 85]: 3831c5065879f87a -Block 0001 [ 86]: 9969d6538518bbf0 -Block 0001 [ 87]: f729432491dde5bc -Block 0001 [ 88]: e488ad11f9e8a09b -Block 0001 [ 89]: b0b6bb576e656477 -Block 0001 [ 90]: d107bb0a7281ba2d -Block 0001 [ 91]: 5f83375bb027d15e -Block 0001 [ 92]: f4d94c88a0509f9f -Block 0001 [ 93]: 0d52e6500b11f46d -Block 0001 [ 94]: ff310a86b946253b -Block 0001 [ 95]: f8a4490cf057837e -Block 0001 [ 96]: c3569d9e20c30dde -Block 0001 [ 97]: 63772178aef6a3c2 -Block 0001 [ 98]: 0cd5abad15d3526a -Block 0001 [ 99]: 929f1688256337ec -Block 0001 [100]: fe99116df0ed24f7 -Block 0001 [101]: 6ebd12248fdeed7b -Block 0001 [102]: 724ce2c56c917514 -Block 0001 [103]: 60e91f3260a33db6 -Block 0001 [104]: 2300595ae52bde6b -Block 0001 [105]: 9ed3942bec949ecc -Block 0001 [106]: 35ab67790672ce89 -Block 0001 [107]: bcd97ac09925600f -Block 0001 [108]: 53bd812c1d5b983b -Block 0001 [109]: 9ee217e78798db42 -Block 0001 [110]: 024621d6eaa9dfa6 -Block 0001 [111]: 091d7bbc00b74cac -Block 0001 [112]: 51a3e878a7ec9637 -Block 0001 [113]: 8f1c496da75b71d4 -Block 0001 [114]: c3213542557c95e4 -Block 0001 [115]: 3259db47b00f135d -Block 0001 [116]: 77f0b3f24f6f2748 -Block 0001 [117]: 0a56aaa8a68eecb0 -Block 0001 [118]: 604cd1106c8bd53b -Block 0001 [119]: b17b9ba59c48e0e3 -Block 0001 [120]: 29a79c9ad70ac72f -Block 0001 [121]: efc613d0bde417ce -Block 0001 [122]: 975b3264affc0594 -Block 0001 [123]: 1bddc4bcc71f4ff6 -Block 0001 [124]: 8338248ef8fcfd02 -Block 0001 [125]: 2d566298f391fcc9 -Block 0001 [126]: 83db40ba1ec6e825 -Block 0001 [127]: 9376c28a2100e36a -Block 0002 [ 0]: 6f0aa682ddaa6126 -Block 0002 [ 1]: dab7227193219bb7 -Block 0002 [ 2]: 4de277e66c81dbba -Block 0002 [ 3]: d7721b4e73c47130 -Block 0002 [ 4]: 95b731717c175846 -Block 0002 [ 5]: 65d958e75791c1b8 -Block 0002 [ 6]: 0a49f6ecc98de387 -Block 0002 [ 7]: 72b02922d766a72a -Block 0002 [ 8]: fad2410fe9e386e9 -Block 0002 [ 9]: 9ff80811205f8e40 -Block 0002 [ 10]: bfd83bf7915bd06d -Block 0002 [ 11]: f2241c6bb086373c -Block 0002 [ 12]: f529fec9d07fc5c7 -Block 0002 [ 13]: 45ddf09931b44152 -Block 0002 [ 14]: 216aa6af5774af56 -Block 0002 [ 15]: 1babf510968c3bd0 -Block 0002 [ 16]: 6b3cc25f82bc7bab -Block 0002 [ 17]: a51883837931ec24 -Block 0002 [ 18]: 15d314e761f4f79f -Block 0002 [ 19]: 907ad9d3e6003728 -Block 0002 [ 20]: 8345e83982730ced -Block 0002 [ 21]: a98973f2f323f2fd -Block 0002 [ 22]: 34ceac857bc82192 -Block 0002 [ 23]: 3aff5a16248d61d0 -Block 0002 [ 24]: bf585e02a4ee76b3 -Block 0002 [ 25]: f102da35c3a1d22f -Block 0002 [ 26]: b8e0c5c6dffa8035 -Block 0002 [ 27]: b69a0ff4b7dc4be3 -Block 0002 [ 28]: 58f6befa5b4be20f -Block 0002 [ 29]: 53e17992af4bf567 -Block 0002 [ 30]: 97b6bbbe40e15da8 -Block 0002 [ 31]: b456092c3bbdee3d -Block 0002 [ 32]: 0fe760445435a994 -Block 0002 [ 33]: 8f00ec3d6cd764cf -Block 0002 [ 34]: 27f17691f81dba17 -Block 0002 [ 35]: 3eb25337717caf80 -Block 0002 [ 36]: 1a08dd7b4b987929 -Block 0002 [ 37]: ece8357a308528ea -Block 0002 [ 38]: e53ab5938ff9847d -Block 0002 [ 39]: cac2d4e6c427a151 -Block 0002 [ 40]: c1d3de78f8bcfc97 -Block 0002 [ 41]: 89026bd7fd300175 -Block 0002 [ 42]: c837079cf4b8e7a0 -Block 0002 [ 43]: cc4f01269d869716 -Block 0002 [ 44]: 1ced768b8adf0ca8 -Block 0002 [ 45]: 752ee66cb91592fd -Block 0002 [ 46]: 8d529b4831c2501b -Block 0002 [ 47]: 6898a8031165c701 -Block 0002 [ 48]: ba973e3b66aeab6d -Block 0002 [ 49]: b38b035f75e1f8ae -Block 0002 [ 50]: 8cea05b80f49929b -Block 0002 [ 51]: e0c6eaef11df5798 -Block 0002 [ 52]: edcb7cbb7a6a2838 -Block 0002 [ 53]: bd0954b83250312c -Block 0002 [ 54]: 030d8c4d29a827ab -Block 0002 [ 55]: defeea24becf9c47 -Block 0002 [ 56]: 4f1bd3d64032f88b -Block 0002 [ 57]: 5d559121df3fcf38 -Block 0002 [ 58]: d40333183106d935 -Block 0002 [ 59]: 9a68b1362e4ecdf3 -Block 0002 [ 60]: 8d094f6fe202c2a0 -Block 0002 [ 61]: cf51c0ec8d9a7bd0 -Block 0002 [ 62]: 6fc5ce646d5459b0 -Block 0002 [ 63]: 1355d7414fb8222d -Block 0002 [ 64]: 1d79f24f45055747 -Block 0002 [ 65]: b048cc45283b5ba4 -Block 0002 [ 66]: 9f599fc0d1a9b797 -Block 0002 [ 67]: 837d7802a73fec8c -Block 0002 [ 68]: ee0cac044c356913 -Block 0002 [ 69]: bd01139dc4a0a74d -Block 0002 [ 70]: 9687ac9b90372c6c -Block 0002 [ 71]: 7ad65839bced3728 -Block 0002 [ 72]: 3dc5cbf1b894db1e -Block 0002 [ 73]: 07359d7c76e52a41 -Block 0002 [ 74]: 9821998dcd6f2e0b -Block 0002 [ 75]: 55e08a3a8bf3f31a -Block 0002 [ 76]: 028648d336310757 -Block 0002 [ 77]: 505c49b8e78c72a5 -Block 0002 [ 78]: 847d4ad5e67effa6 -Block 0002 [ 79]: debe088acd5e0c67 -Block 0002 [ 80]: 09baf2a793f6e85a -Block 0002 [ 81]: 74c53ac1c44923c3 -Block 0002 [ 82]: 2d8e2f704dae8e0d -Block 0002 [ 83]: c11096107ecd9a1a -Block 0002 [ 84]: 6e92f0b937267ca4 -Block 0002 [ 85]: eb91961b00b8494a -Block 0002 [ 86]: e445eff84a307891 -Block 0002 [ 87]: 167008ffb848e317 -Block 0002 [ 88]: ffcd081be48824e8 -Block 0002 [ 89]: ae1188ab3620d030 -Block 0002 [ 90]: 7b5154bb3ae4beeb -Block 0002 [ 91]: 66a8189a6e829b4c -Block 0002 [ 92]: 1045478edacef269 -Block 0002 [ 93]: 4214f2b32e58abf7 -Block 0002 [ 94]: 8a0632f79e9a47d2 -Block 0002 [ 95]: 125f2e34aa373f69 -Block 0002 [ 96]: 4bdaf3650b12ff30 -Block 0002 [ 97]: 09a67d21f7c9a4b7 -Block 0002 [ 98]: da257867835c6ad0 -Block 0002 [ 99]: b09a503a1e027c3a -Block 0002 [100]: d82eab74b27e8c9e -Block 0002 [101]: b8ca0c4c1f8a66bb -Block 0002 [102]: 3295141fafa54773 -Block 0002 [103]: a711da3266cda357 -Block 0002 [104]: 8c491f18c12bef34 -Block 0002 [105]: fb3856d95887799b -Block 0002 [106]: 882efa262eba85c7 -Block 0002 [107]: e70e3ed6325ddce9 -Block 0002 [108]: 6cd188d08d8faaab -Block 0002 [109]: 3d8e89890fa8069e -Block 0002 [110]: 1740ded2e9212552 -Block 0002 [111]: 97dbb638e111dbaa -Block 0002 [112]: 591b3ef515441981 -Block 0002 [113]: 47924a68e2f2d931 -Block 0002 [114]: 56f6c3046c63e935 -Block 0002 [115]: 5d9b054b25c3cac7 -Block 0002 [116]: 730e460a6b42888e -Block 0002 [117]: 2a89748c965add5d -Block 0002 [118]: 2e21eda0da280986 -Block 0002 [119]: 8310061edc77f4ab -Block 0002 [120]: 663eccfd5e98f3da -Block 0002 [121]: ef140e3bb971144b -Block 0002 [122]: def56d52b3a2306e -Block 0002 [123]: c4d693020bec1987 -Block 0002 [124]: a3f956918de780b2 -Block 0002 [125]: f7a6e5c929d6a71a -Block 0002 [126]: 657926002bd1b059 -Block 0002 [127]: d87898adc25622e7 -Block 0003 [ 0]: a5098825713de56b -Block 0003 [ 1]: 5abdb2c9a238997c -Block 0003 [ 2]: 0df17021d43634ae -Block 0003 [ 3]: ec32a902ab58e758 -Block 0003 [ 4]: 4c31bf2c0f5a3e20 -Block 0003 [ 5]: 76b348a560871883 -Block 0003 [ 6]: 6b742fcacab4cd9d -Block 0003 [ 7]: 4d7181fe894748dd -Block 0003 [ 8]: a0f9122c42cfa0fa -Block 0003 [ 9]: b77b3a2b3a94836d -Block 0003 [ 10]: b2ec7046aa8e8c6e -Block 0003 [ 11]: f172c7888965cdf6 -Block 0003 [ 12]: d6c24405293e85f2 -Block 0003 [ 13]: 69ca9337912f8f1d -Block 0003 [ 14]: d11fd34b79f60203 -Block 0003 [ 15]: 7a7368c3416d7757 -Block 0003 [ 16]: 8a60c9c442d9a50b -Block 0003 [ 17]: e5003305596ff3f5 -Block 0003 [ 18]: 1f5a977083174168 -Block 0003 [ 19]: 3d2084004885c012 -Block 0003 [ 20]: 0dfcdb66c89fe7f8 -Block 0003 [ 21]: 7a542bc74aa62c61 -Block 0003 [ 22]: bbae5509f2bafa64 -Block 0003 [ 23]: 9c2fbdddab52a811 -Block 0003 [ 24]: 4eb45004f32e646c -Block 0003 [ 25]: 83575377e39c935c -Block 0003 [ 26]: 32c30d2dc888c05d -Block 0003 [ 27]: cf6c2f4e2e886954 -Block 0003 [ 28]: d763036a6ba7467e -Block 0003 [ 29]: 2949a553cb7bfb44 -Block 0003 [ 30]: 39e9a683d74a4a47 -Block 0003 [ 31]: 510b42f86fb01c3c -Block 0003 [ 32]: 1db70a935a24a08a -Block 0003 [ 33]: 37a4c61b5b50f6ce -Block 0003 [ 34]: 2ff60aebaff4c12c -Block 0003 [ 35]: cc43a35d3f92cb2b -Block 0003 [ 36]: e47a246363c0cf53 -Block 0003 [ 37]: 20c725e9838000f0 -Block 0003 [ 38]: 4e9e4630b154de4e -Block 0003 [ 39]: 9d91f5cab8ef6ca3 -Block 0003 [ 40]: c09cd72657c2b2e3 -Block 0003 [ 41]: 00c941ef8d77923a -Block 0003 [ 42]: c4a86260ceaa44c5 -Block 0003 [ 43]: b23cfde52879f0bb -Block 0003 [ 44]: 055a459516341951 -Block 0003 [ 45]: 15b38a4de76a86e3 -Block 0003 [ 46]: 500162d1d85b0734 -Block 0003 [ 47]: e4c121a06eeb8d00 -Block 0003 [ 48]: 59d00180f6bf9cab -Block 0003 [ 49]: 520a19a8621155f7 -Block 0003 [ 50]: b7ac913b05b0cdd7 -Block 0003 [ 51]: 2498e9f4684d695e -Block 0003 [ 52]: 9ff6533b36a439bd -Block 0003 [ 53]: b7e710b1b252173e -Block 0003 [ 54]: cddcdfc9bd2c30cc -Block 0003 [ 55]: 85d624f3b2903c78 -Block 0003 [ 56]: 1e0aebc7e45117e9 -Block 0003 [ 57]: a776b6281cd6b1f9 -Block 0003 [ 58]: 8a06bb51088eb00b -Block 0003 [ 59]: b59c40e38ff6ea03 -Block 0003 [ 60]: afc0cc4b3623e16d -Block 0003 [ 61]: 782c4c3d0474a5cf -Block 0003 [ 62]: 56ce8d13748c3e5b -Block 0003 [ 63]: c977975a1ff7a1f9 -Block 0003 [ 64]: 21546cc77fa04c11 -Block 0003 [ 65]: 23445ab1a31c4fcd -Block 0003 [ 66]: 329b27a58fa9ec0c -Block 0003 [ 67]: 1dd2c06440b93077 -Block 0003 [ 68]: b3be12b007cd0186 -Block 0003 [ 69]: 4a03029fa6a0b54b -Block 0003 [ 70]: a3cc4fdae3a06c28 -Block 0003 [ 71]: ea9497ff15ab73ee -Block 0003 [ 72]: e06aa57b0d93e9e6 -Block 0003 [ 73]: b8f1138ed2b5c2e4 -Block 0003 [ 74]: ca65309d17c912be -Block 0003 [ 75]: a79480072494d1df -Block 0003 [ 76]: a2cc762dc3085ebf -Block 0003 [ 77]: 4d8804b94f150480 -Block 0003 [ 78]: 010bc1d1d2d5e6a9 -Block 0003 [ 79]: 618deb456508ef66 -Block 0003 [ 80]: f4660b0c8ab78a72 -Block 0003 [ 81]: b8cafe97718c4b0c -Block 0003 [ 82]: 9e393ddbe4897c96 -Block 0003 [ 83]: 1941204736b1e333 -Block 0003 [ 84]: 819495456568a0e5 -Block 0003 [ 85]: 069191b00125985b -Block 0003 [ 86]: 8df6f2bc73a8f609 -Block 0003 [ 87]: d02410b0b3af460f -Block 0003 [ 88]: 5ad235682f1a4e6e -Block 0003 [ 89]: 31cc343b49bb3c5c -Block 0003 [ 90]: 1c5f33a9a895121f -Block 0003 [ 91]: dcfadc3f76c2a0db -Block 0003 [ 92]: cb87e12e0347cca2 -Block 0003 [ 93]: c3dadf345a0bf265 -Block 0003 [ 94]: 84c3d44034671090 -Block 0003 [ 95]: e0e9f65f68c7cc0f -Block 0003 [ 96]: 882d861688f924bc -Block 0003 [ 97]: 9cfc66984007086d -Block 0003 [ 98]: 91dc692e2ce706b9 -Block 0003 [ 99]: 86d088cd01e55500 -Block 0003 [100]: aafd183298ff1003 -Block 0003 [101]: aa4d5020b5ebfb5f -Block 0003 [102]: 98a71f8dbbdbf24c -Block 0003 [103]: 640f07762fee838b -Block 0003 [104]: 9bbfdd5f9f23460a -Block 0003 [105]: c1e3157b2e7cea32 -Block 0003 [106]: 205acdbfea7304f5 -Block 0003 [107]: d3903de60ff877fb -Block 0003 [108]: 2ffff2f401c666c2 -Block 0003 [109]: 71d728360ff4d066 -Block 0003 [110]: 1fa9cd9997943d58 -Block 0003 [111]: 37cd8137f9ed1517 -Block 0003 [112]: 4138ff82ec94ce81 -Block 0003 [113]: c5bdc5c497fb5efc -Block 0003 [114]: 765279b71bb1a03d -Block 0003 [115]: d41d5e2e112f0fa8 -Block 0003 [116]: 357a184df3d5a794 -Block 0003 [117]: e81a33a463f91f12 -Block 0003 [118]: 1b5e5040169f5195 -Block 0003 [119]: 65a6ceba06b05e8d -Block 0003 [120]: 238160bc1d2bf802 -Block 0003 [121]: 003f752624f1a8b8 -Block 0003 [122]: 89ee084762af8511 -Block 0003 [123]: 543d6f278a505ed6 -Block 0003 [124]: 14bf434e3d68965e -Block 0003 [125]: 3a8ff0179c0b0acc -Block 0003 [126]: ded1168930b9ebb6 -Block 0003 [127]: 50caf52f839d5504 -Block 0004 [ 0]: af9eced90a3d60a2 -Block 0004 [ 1]: 3458bd6dccdc5a86 -Block 0004 [ 2]: 05f6a062431d2afa -Block 0004 [ 3]: 40e258d40e9c80b6 -Block 0004 [ 4]: 1c6db8b3fd4c0899 -Block 0004 [ 5]: d5216db6d8913af1 -Block 0004 [ 6]: 80778a715660665f -Block 0004 [ 7]: 82db35653611f89f -Block 0004 [ 8]: 5d4bd06fff5fdcdf -Block 0004 [ 9]: 50059e85fca48e27 -Block 0004 [ 10]: a9568cb5426a5236 -Block 0004 [ 11]: 4ff2f5eaab600283 -Block 0004 [ 12]: 4577b19f9ff16d6b -Block 0004 [ 13]: 34d6b1d3fc137020 -Block 0004 [ 14]: a13ba3cc8c9b1783 -Block 0004 [ 15]: 48d97e808f8af599 -Block 0004 [ 16]: 718a8c5091f5c05a -Block 0004 [ 17]: d767e72321690b90 -Block 0004 [ 18]: 10ed05706530391d -Block 0004 [ 19]: a3da1bebae712116 -Block 0004 [ 20]: 3010dad96d0aa1cd -Block 0004 [ 21]: 078eecb48d148ae0 -Block 0004 [ 22]: 74672b83af77f91a -Block 0004 [ 23]: 3fa4fdfb8a92c047 -Block 0004 [ 24]: 96178f425ec4a875 -Block 0004 [ 25]: dd3fd3cce9ceac5e -Block 0004 [ 26]: 049865736c634c55 -Block 0004 [ 27]: bb322ce0a56bac6e -Block 0004 [ 28]: ca961724d6ea8c2d -Block 0004 [ 29]: af33db626bcba7d7 -Block 0004 [ 30]: 539c29974e7730fb -Block 0004 [ 31]: c267909579ef4313 -Block 0004 [ 32]: b9c8059b629272a0 -Block 0004 [ 33]: 3a18f4a5bc8e46e5 -Block 0004 [ 34]: 1888a2e964943b59 -Block 0004 [ 35]: 2380a9dd92f2ec21 -Block 0004 [ 36]: 9fc8021fe3043d67 -Block 0004 [ 37]: 107833c67f457b34 -Block 0004 [ 38]: 3e2ce4a56a45bb77 -Block 0004 [ 39]: 084a7ad0d3ef4922 -Block 0004 [ 40]: 8175a1738e9ce296 -Block 0004 [ 41]: c686afc17b2812e6 -Block 0004 [ 42]: c8e7b3598949ae60 -Block 0004 [ 43]: 667e47836b39bd99 -Block 0004 [ 44]: 3604e1597cc944ad -Block 0004 [ 45]: 7ab71831df29df52 -Block 0004 [ 46]: e889cfc1441d8415 -Block 0004 [ 47]: 762430a2d72ccf81 -Block 0004 [ 48]: 2f9a51b2e3112715 -Block 0004 [ 49]: 20099292f390a970 -Block 0004 [ 50]: 0b6c4d04e9754c82 -Block 0004 [ 51]: 3adc49b980633db3 -Block 0004 [ 52]: 8368e8fa2086f14e -Block 0004 [ 53]: e5369eeda68501e6 -Block 0004 [ 54]: 6fa74ecd57fa72f8 -Block 0004 [ 55]: d71a9415ba8dc920 -Block 0004 [ 56]: eb858d1ca26f6a40 -Block 0004 [ 57]: 28f7cc213b047e4a -Block 0004 [ 58]: c5042731bbd2b6ad -Block 0004 [ 59]: 5e2a0c937bb6adce -Block 0004 [ 60]: 2c1546f5dcd5ea09 -Block 0004 [ 61]: 0a55f02c93bef2f5 -Block 0004 [ 62]: 36439d472e564d9d -Block 0004 [ 63]: 3cf3e188d8724a5c -Block 0004 [ 64]: d20dcc19dfe8ee10 -Block 0004 [ 65]: 1e8ea45c14e22f6e -Block 0004 [ 66]: d9e188a0c2cd7de8 -Block 0004 [ 67]: 69878ffd2d67e813 -Block 0004 [ 68]: ca30fe88eb4a8303 -Block 0004 [ 69]: 3510ecb290818e10 -Block 0004 [ 70]: 577d78d8b0b762d0 -Block 0004 [ 71]: 7a3f510e17a35949 -Block 0004 [ 72]: bc5d883c6e8b23f7 -Block 0004 [ 73]: 1737df43b6c0f384 -Block 0004 [ 74]: a59f90005d06889b -Block 0004 [ 75]: c4f11cb4bece144b -Block 0004 [ 76]: 82b11dd2bd8e1499 -Block 0004 [ 77]: 242adaad084c4281 -Block 0004 [ 78]: ffa6ca17c08e29e7 -Block 0004 [ 79]: 37584bc6cf8344ad -Block 0004 [ 80]: 4062901ff4a9f07d -Block 0004 [ 81]: 20653350117ec63a -Block 0004 [ 82]: 45e642098a74abda -Block 0004 [ 83]: 89bed5a24c62d08d -Block 0004 [ 84]: 6e990f7008adee71 -Block 0004 [ 85]: 3c9126660bd152a9 -Block 0004 [ 86]: ef46fbf3e4fc19d4 -Block 0004 [ 87]: 4a711294a574aadc -Block 0004 [ 88]: d0efcf189dc02bcf -Block 0004 [ 89]: 0b9a48427ec38900 -Block 0004 [ 90]: 98e275b7e095d3f5 -Block 0004 [ 91]: 0353d666b93fb663 -Block 0004 [ 92]: a4646c2d8bfa4d1a -Block 0004 [ 93]: 52d08735a0ea0d9e -Block 0004 [ 94]: e55f869281c22581 -Block 0004 [ 95]: 46e82d4f204f0bad -Block 0004 [ 96]: fd26877918e173a5 -Block 0004 [ 97]: 6fdf6ec2bfa7b0f9 -Block 0004 [ 98]: ea146432e63186c4 -Block 0004 [ 99]: cd50784b0958662c -Block 0004 [100]: c25aff66357e24d1 -Block 0004 [101]: 99d34900b33f60d5 -Block 0004 [102]: 98a063f95e4bb934 -Block 0004 [103]: 4506dedfb4e77e5a -Block 0004 [104]: ad87e672cc7a4644 -Block 0004 [105]: e2965d2b0ae768ca -Block 0004 [106]: 52740c3dd4b833cd -Block 0004 [107]: 86a1f3edefdb6d8b -Block 0004 [108]: c5b1d035b9837203 -Block 0004 [109]: 694652d2340b99d6 -Block 0004 [110]: 2bf6e2963182a8d9 -Block 0004 [111]: 250d6c5d00fc762c -Block 0004 [112]: d2a822c642cbebce -Block 0004 [113]: 1a222412dcde3705 -Block 0004 [114]: f233dad5cdde3b9d -Block 0004 [115]: 7d72f0fac57caf91 -Block 0004 [116]: c2c83c5e69eca9d0 -Block 0004 [117]: 4b6f24ea92332019 -Block 0004 [118]: 80ac4c2f9eb482d6 -Block 0004 [119]: e52624e96ab034f2 -Block 0004 [120]: 273f6f30b19e5149 -Block 0004 [121]: d0a2128e22bb5ab7 -Block 0004 [122]: c6254c37b7c08c52 -Block 0004 [123]: a4e9aef8ecce1b94 -Block 0004 [124]: 333e39a2d3e1ce42 -Block 0004 [125]: c7ece998f84c8a3c -Block 0004 [126]: 702c957ff3364c06 -Block 0004 [127]: 06c2f7892027c350 -Block 0005 [ 0]: 37fb883b3937ac93 -Block 0005 [ 1]: 6acec54a53ba1331 -Block 0005 [ 2]: 4c4d2fd0e811a0b2 -Block 0005 [ 3]: f86ce63134bf480d -Block 0005 [ 4]: 04b31b850ceeff33 -Block 0005 [ 5]: ec4f3972779a5807 -Block 0005 [ 6]: 4a38a3f44fa47814 -Block 0005 [ 7]: bcb1991407ad6c02 -Block 0005 [ 8]: 0f82b1e0ba066aaa -Block 0005 [ 9]: f54bed9000ac6d55 -Block 0005 [ 10]: 481fa35fb39a97ec -Block 0005 [ 11]: 643ae4be056c1fc5 -Block 0005 [ 12]: 8d46d87b02bf389b -Block 0005 [ 13]: 5a7fdc9e765c2590 -Block 0005 [ 14]: a987d4731ceae07f -Block 0005 [ 15]: 83c199f1d90e4967 -Block 0005 [ 16]: 2563b5d5ef1bdddb -Block 0005 [ 17]: cc4a90082adb5576 -Block 0005 [ 18]: ccfbb01c7bdb2a09 -Block 0005 [ 19]: d78e46de3d4b41d4 -Block 0005 [ 20]: afafa14a5460b979 -Block 0005 [ 21]: 3973fa9623ec6c3e -Block 0005 [ 22]: 5425a2b596353a0d -Block 0005 [ 23]: e39d8e6a2702e7da -Block 0005 [ 24]: 665ff8a5fa7395ed -Block 0005 [ 25]: dc8ac092ad76cc8a -Block 0005 [ 26]: b2bad6d483d0f35b -Block 0005 [ 27]: 702b5502bc4d9f0a -Block 0005 [ 28]: 34b68078c136dbbd -Block 0005 [ 29]: c58b0e7c79d3760c -Block 0005 [ 30]: a26c53403f613aa6 -Block 0005 [ 31]: 6c4593e1dfb652c5 -Block 0005 [ 32]: 747ae28048698d2c -Block 0005 [ 33]: 3c30792dce14a383 -Block 0005 [ 34]: 7d4c52934c3c97ea -Block 0005 [ 35]: be9210487bc27afa -Block 0005 [ 36]: b1b0f786bd2ecd14 -Block 0005 [ 37]: 5e1483d330345f76 -Block 0005 [ 38]: b6bd1d623a641c03 -Block 0005 [ 39]: 9c2eef877e56f795 -Block 0005 [ 40]: e7169c587776a221 -Block 0005 [ 41]: cf5441b20cb71c90 -Block 0005 [ 42]: 69431b3b02dfeee6 -Block 0005 [ 43]: 495249d284250f7e -Block 0005 [ 44]: c69d107cd21df04c -Block 0005 [ 45]: 016b358679f15ece -Block 0005 [ 46]: f6ed30c43580ad07 -Block 0005 [ 47]: c8fa50877f0ad8d5 -Block 0005 [ 48]: d654182b26c4db2f -Block 0005 [ 49]: 28249e944de6e463 -Block 0005 [ 50]: fbf815ebca2f424a -Block 0005 [ 51]: d9c3c5996d1a615c -Block 0005 [ 52]: 1ed370fedf078cf4 -Block 0005 [ 53]: 3e8a6e37b9bedf55 -Block 0005 [ 54]: ef3369be5be150a9 -Block 0005 [ 55]: f4f724a2551fa487 -Block 0005 [ 56]: 088b9b009db5fc68 -Block 0005 [ 57]: 2e450de812063bb3 -Block 0005 [ 58]: fd20078b92ad2212 -Block 0005 [ 59]: ada2ab1a6d276600 -Block 0005 [ 60]: 2353d4e8ed05dcc8 -Block 0005 [ 61]: 48980a983637a4d3 -Block 0005 [ 62]: aefa1109f93347e1 -Block 0005 [ 63]: 0ced5850fbb88b4a -Block 0005 [ 64]: 433f25d571fb15c6 -Block 0005 [ 65]: b372ed489fd0a7f8 -Block 0005 [ 66]: d561dfd10da4202c -Block 0005 [ 67]: 4f5380cf14258bf6 -Block 0005 [ 68]: 9700f377438cc2a5 -Block 0005 [ 69]: a1c45cc8da4e3887 -Block 0005 [ 70]: 08b7d3ac75cea15d -Block 0005 [ 71]: 36e03cf3fbd05396 -Block 0005 [ 72]: c3fb7e03ba6f8fbc -Block 0005 [ 73]: 3f29718b41ff57c1 -Block 0005 [ 74]: d09946ec9b27aa37 -Block 0005 [ 75]: 4a0718a8f5616ac5 -Block 0005 [ 76]: e38cc23047827da9 -Block 0005 [ 77]: 002e16cd25071184 -Block 0005 [ 78]: 869182a986a7b7ee -Block 0005 [ 79]: 174a057e0e3b23a1 -Block 0005 [ 80]: 999aa42055b49c03 -Block 0005 [ 81]: c6d5b5d5120af131 -Block 0005 [ 82]: beb10bc4288cb0b7 -Block 0005 [ 83]: 214163d0c27f32e6 -Block 0005 [ 84]: 251a7d51579283e1 -Block 0005 [ 85]: ac0a7173e7268ccd -Block 0005 [ 86]: efabfb39669a0193 -Block 0005 [ 87]: 026de346a9670d9d -Block 0005 [ 88]: 15c15e1754978b30 -Block 0005 [ 89]: 977ebe9542e66de7 -Block 0005 [ 90]: c8fe60d834be0957 -Block 0005 [ 91]: 7e16de91837068a8 -Block 0005 [ 92]: 27785e000961550b -Block 0005 [ 93]: 9a5a8f77b6cba683 -Block 0005 [ 94]: f90378fa99cfd37b -Block 0005 [ 95]: f8c3ccad6676d6fe -Block 0005 [ 96]: c0b658afd44ad15b -Block 0005 [ 97]: b2580e884ffc329d -Block 0005 [ 98]: f79de1cc43658261 -Block 0005 [ 99]: 4536d5eb3f448ee0 -Block 0005 [100]: a4815de2946fe975 -Block 0005 [101]: 2295138fae33b9aa -Block 0005 [102]: 32947ba2cb293586 -Block 0005 [103]: 2c96c493e71235d9 -Block 0005 [104]: 546b634b59350c17 -Block 0005 [105]: bfd82c1e545abf86 -Block 0005 [106]: ede8399895eafe84 -Block 0005 [107]: 9027ddacc2ae573f -Block 0005 [108]: 7da810b9c7bf4af7 -Block 0005 [109]: 7e7de19cb6f96d91 -Block 0005 [110]: 08b249fed8b5cf45 -Block 0005 [111]: 90aae1f0d65f196d -Block 0005 [112]: 0cb847511541ea6b -Block 0005 [113]: 450c0c049ed61d99 -Block 0005 [114]: 8a095dd9c6d54157 -Block 0005 [115]: 82a4fbf93f735094 -Block 0005 [116]: d55fbc420c629102 -Block 0005 [117]: 25c9bf0fe571f5dd -Block 0005 [118]: 80207b546203df4c -Block 0005 [119]: 1cb70dea46305eef -Block 0005 [120]: 890003e8e39ecf29 -Block 0005 [121]: e558c275564dbf38 -Block 0005 [122]: 1d060fe29707d16b -Block 0005 [123]: 5037a90495063117 -Block 0005 [124]: e0d0226c0fce2c3c -Block 0005 [125]: ac55085dea1eef97 -Block 0005 [126]: d0a0f531e14cb58e -Block 0005 [127]: dda1781abb811d29 -Block 0006 [ 0]: a4000cb5a1cc76dd -Block 0006 [ 1]: 0c6a94a4086be124 -Block 0006 [ 2]: 819335f8932114b9 -Block 0006 [ 3]: d857ab033288c788 -Block 0006 [ 4]: f2e4630dbc30fddb -Block 0006 [ 5]: a1e8320af2866db4 -Block 0006 [ 6]: e225b40713f854ee -Block 0006 [ 7]: 088f90ee8bae291d -Block 0006 [ 8]: a43322a0c40abfbc -Block 0006 [ 9]: 83a4793e21d20b58 -Block 0006 [ 10]: 4d96e775f789cea2 -Block 0006 [ 11]: 30bd3620326a7f96 -Block 0006 [ 12]: d09c9035cd910544 -Block 0006 [ 13]: 81d572ae2eeb8006 -Block 0006 [ 14]: ceaf14127b62344b -Block 0006 [ 15]: 4f433cb45b3d6b0d -Block 0006 [ 16]: 31725df5018af041 -Block 0006 [ 17]: 927a1ed74e91cf76 -Block 0006 [ 18]: 555f5323de185080 -Block 0006 [ 19]: 2e303b4ff3920046 -Block 0006 [ 20]: 723ed0de113fa48b -Block 0006 [ 21]: 1d016713b6fff742 -Block 0006 [ 22]: c50a5aa3a0a0cfdb -Block 0006 [ 23]: a7d2e5db07f1475b -Block 0006 [ 24]: cd8324b0a3c0cad5 -Block 0006 [ 25]: 22da45be8cd1ec58 -Block 0006 [ 26]: 3d4f99a20af4ff73 -Block 0006 [ 27]: 5de2f3351e5fb287 -Block 0006 [ 28]: 3fedb44f445c865f -Block 0006 [ 29]: 2dcc364d689235c1 -Block 0006 [ 30]: 8fd3800f89627a4f -Block 0006 [ 31]: d4fd9bd4cc90b65a -Block 0006 [ 32]: d2453a16c4292b6c -Block 0006 [ 33]: d5c78b9e8066bc63 -Block 0006 [ 34]: 3de47a08c1ca30a4 -Block 0006 [ 35]: d226d79350129999 -Block 0006 [ 36]: 94017a9989f909b7 -Block 0006 [ 37]: 973151520b780bc4 -Block 0006 [ 38]: b852007fba960687 -Block 0006 [ 39]: ab0780741ff20149 -Block 0006 [ 40]: a9324a16f54ed9c4 -Block 0006 [ 41]: 393abfca3807175c -Block 0006 [ 42]: 690a91e3d9751ccb -Block 0006 [ 43]: f63676a1df3693a0 -Block 0006 [ 44]: c947250437a22b2f -Block 0006 [ 45]: 783c5571a97b606f -Block 0006 [ 46]: 6d05d793cd281272 -Block 0006 [ 47]: 60f5c5e244e4c08e -Block 0006 [ 48]: ea2ec7dabb54f430 -Block 0006 [ 49]: c6dce5092746fa3d -Block 0006 [ 50]: 973bc36c87c55018 -Block 0006 [ 51]: 0b564299f84975bb -Block 0006 [ 52]: f3ce81c95f39913d -Block 0006 [ 53]: 81357040f6d08a8a -Block 0006 [ 54]: dc40acbc9c27bcd3 -Block 0006 [ 55]: ae401fdd7ee471e6 -Block 0006 [ 56]: 80740241c5495c34 -Block 0006 [ 57]: cdb0a501fcfe4787 -Block 0006 [ 58]: 9f23f2af6531784a -Block 0006 [ 59]: e1c3475e31535d8f -Block 0006 [ 60]: 726770b5755e3324 -Block 0006 [ 61]: a5d7dfd224b844a3 -Block 0006 [ 62]: c7d7309774a868f9 -Block 0006 [ 63]: fde43b69a05ff27a -Block 0006 [ 64]: 78ba6d2fd465062e -Block 0006 [ 65]: ebc28526805859d7 -Block 0006 [ 66]: fd781d5281e8c097 -Block 0006 [ 67]: abe63b415d6c8429 -Block 0006 [ 68]: 73c804af9ac76b22 -Block 0006 [ 69]: c920fa3ad6d82433 -Block 0006 [ 70]: 15baf3d384adcebe -Block 0006 [ 71]: a83ad88c365bb9cd -Block 0006 [ 72]: a4d5ce841d92a276 -Block 0006 [ 73]: 5462f046b839af67 -Block 0006 [ 74]: 5b2edf414b026135 -Block 0006 [ 75]: ab768f985123b080 -Block 0006 [ 76]: f3e05481874d72b3 -Block 0006 [ 77]: ce73c152e3ff2f96 -Block 0006 [ 78]: 78bdc7edc3985401 -Block 0006 [ 79]: 6e3f52fa030d9227 -Block 0006 [ 80]: 69fc3df28dd982b6 -Block 0006 [ 81]: 87214bb7ffc2dc1d -Block 0006 [ 82]: f45a7ba051ba8110 -Block 0006 [ 83]: 2f9ccac16c85693c -Block 0006 [ 84]: f4447e2b8b6edbe6 -Block 0006 [ 85]: 7cad68391b787930 -Block 0006 [ 86]: 538850758753fc1a -Block 0006 [ 87]: fb8ee00e51149914 -Block 0006 [ 88]: c6936b88c520b802 -Block 0006 [ 89]: dca494f588a65fe3 -Block 0006 [ 90]: 7e261e838c252e46 -Block 0006 [ 91]: 8f4a0b941c47c9b6 -Block 0006 [ 92]: 773509cad95e3333 -Block 0006 [ 93]: 1475ee7d56a9da13 -Block 0006 [ 94]: feafdd14849f4089 -Block 0006 [ 95]: 2a1030fc9cae7e7c -Block 0006 [ 96]: d8fc6122c52cccaa -Block 0006 [ 97]: 02b7b807639b4d85 -Block 0006 [ 98]: 61712d9de40c2e87 -Block 0006 [ 99]: 345ace9a8469b06d -Block 0006 [100]: 9dcaa04d2aaa46a4 -Block 0006 [101]: 5c7f906c18c3b569 -Block 0006 [102]: 96cf6a3057491690 -Block 0006 [103]: 92341fd19b9555b4 -Block 0006 [104]: cd7be1cbec00959e -Block 0006 [105]: fbd2fc3c8a3d82e5 -Block 0006 [106]: f8bead38c9ad1356 -Block 0006 [107]: 5b0b7f47c9a71f9e -Block 0006 [108]: 670e7bfc0c037aa1 -Block 0006 [109]: 09a571475b06b55f -Block 0006 [110]: 2aaa535f4b5af572 -Block 0006 [111]: 47c00b90cdf87c08 -Block 0006 [112]: 985306fd8b26771f -Block 0006 [113]: 06b05349f47bfc1a -Block 0006 [114]: ca411ea698000db5 -Block 0006 [115]: cb85ea28dca6abf1 -Block 0006 [116]: 77b17ea121cd0348 -Block 0006 [117]: e5e4aa917ff9a4ba -Block 0006 [118]: 996faa37d20b0cb0 -Block 0006 [119]: f8dc838f2c8f7f3b -Block 0006 [120]: 4da7fed9fc5e3b3a -Block 0006 [121]: c833da16dea13c63 -Block 0006 [122]: efcaca85677958bc -Block 0006 [123]: a64498dca760f872 -Block 0006 [124]: 9a1bbadb8aa68b52 -Block 0006 [125]: a319d574ee5b8c46 -Block 0006 [126]: f4ff528d79cfee8f -Block 0006 [127]: b1af436e7c0b1c92 -Block 0007 [ 0]: e3ca02813668c742 -Block 0007 [ 1]: a7729db1aede304c -Block 0007 [ 2]: 9bb0d397cebc3d49 -Block 0007 [ 3]: 21f5d7dcd2e2fb53 -Block 0007 [ 4]: 2a31d5bdf05b7362 -Block 0007 [ 5]: 69239eb5a0b4bd31 -Block 0007 [ 6]: 48552e28bae9c687 -Block 0007 [ 7]: 23a438f8a232653a -Block 0007 [ 8]: aaaaf7b7895be8a6 -Block 0007 [ 9]: 567017d6a21230c2 -Block 0007 [ 10]: 00e9a00244ddff2a -Block 0007 [ 11]: b39a550c9200aedb -Block 0007 [ 12]: af8eeb528d432076 -Block 0007 [ 13]: e306f8fcfb5e1673 -Block 0007 [ 14]: cb6f324d48ea87de -Block 0007 [ 15]: c9279674b24388bb -Block 0007 [ 16]: 747e27bb51c50f7d -Block 0007 [ 17]: 51c2bb725842f6c2 -Block 0007 [ 18]: 14c56a15a8e3de1c -Block 0007 [ 19]: da3c7cb2760f3a76 -Block 0007 [ 20]: 75db3ede9cdc7ba1 -Block 0007 [ 21]: 4272ea974cdb8c1a -Block 0007 [ 22]: e99d25ca0e6883e9 -Block 0007 [ 23]: ec88b2fb97bb6b1d -Block 0007 [ 24]: aee2d46370e3900f -Block 0007 [ 25]: 3df19ce3caaf9db0 -Block 0007 [ 26]: 3bee45344fa45a62 -Block 0007 [ 27]: 259b38d5bfb723e5 -Block 0007 [ 28]: 782a1894acdd67eb -Block 0007 [ 29]: dd69343d8b2a42b0 -Block 0007 [ 30]: adb49da918224aae -Block 0007 [ 31]: e20ca605df492741 -Block 0007 [ 32]: 5c786e5c5f4a6ba7 -Block 0007 [ 33]: 3df1691d217fc686 -Block 0007 [ 34]: 7da6d378e182ddeb -Block 0007 [ 35]: 24078fd55514fdc0 -Block 0007 [ 36]: 996bed5355b02441 -Block 0007 [ 37]: 0c3a5c248f888609 -Block 0007 [ 38]: 2ec1ed046e161f71 -Block 0007 [ 39]: c1639cff4bf02347 -Block 0007 [ 40]: 87b135dc7f7a8b9a -Block 0007 [ 41]: 43ce7d06f71ffa98 -Block 0007 [ 42]: 7d3798f0664c9059 -Block 0007 [ 43]: e326063f0a25eed9 -Block 0007 [ 44]: 00abf225c2807f91 -Block 0007 [ 45]: b8aac8dccf1c912d -Block 0007 [ 46]: 56bc16c7ba15ef5b -Block 0007 [ 47]: bcd08294729e70f2 -Block 0007 [ 48]: db341d8367232a64 -Block 0007 [ 49]: 0dc9b2b57218845d -Block 0007 [ 50]: 12568bb40ff2045d -Block 0007 [ 51]: 5a62b75c8bb83c21 -Block 0007 [ 52]: c17362581e812f90 -Block 0007 [ 53]: 4580f3b28720b90e -Block 0007 [ 54]: b946d0208b06c214 -Block 0007 [ 55]: c9ef31df9b2d4378 -Block 0007 [ 56]: 6aa97cb883cdf5e4 -Block 0007 [ 57]: 42275d7f7e29da30 -Block 0007 [ 58]: fcc5b7368657d74d -Block 0007 [ 59]: adf37d794e5f9d31 -Block 0007 [ 60]: 97b138514fc74fd8 -Block 0007 [ 61]: 9eb6b55fa47fc297 -Block 0007 [ 62]: 754051ffac48b541 -Block 0007 [ 63]: 1d8b95b09af8fd1a -Block 0007 [ 64]: acd16a127bced27e -Block 0007 [ 65]: ae3382e9f75feac7 -Block 0007 [ 66]: c76a1f20a5c9a347 -Block 0007 [ 67]: dbe7136e2087e8d8 -Block 0007 [ 68]: 577029805d2cfb5d -Block 0007 [ 69]: 78dee0f47b02e323 -Block 0007 [ 70]: eeaa97dc4cb11975 -Block 0007 [ 71]: bdfa8f0f44599323 -Block 0007 [ 72]: 7f1d58af698b5e71 -Block 0007 [ 73]: fc5601043ef0b4e1 -Block 0007 [ 74]: 85eaa5dcd3db9539 -Block 0007 [ 75]: 2f357fa81f4adb91 -Block 0007 [ 76]: e91a41bc924a8ff2 -Block 0007 [ 77]: f70375d6d1380304 -Block 0007 [ 78]: c1bb93a4b3deb5d2 -Block 0007 [ 79]: 6c75ed60f7bd386e -Block 0007 [ 80]: 2a6417c70ca6da09 -Block 0007 [ 81]: 496bc0f2253ee4d6 -Block 0007 [ 82]: 385397524a41a976 -Block 0007 [ 83]: 385e12a008ae8ace -Block 0007 [ 84]: 94ac859b0438f0b6 -Block 0007 [ 85]: 2200d981da6dccad -Block 0007 [ 86]: 6f6f3c5730b2bac1 -Block 0007 [ 87]: 6e4ca80bc0ba5194 -Block 0007 [ 88]: 65a5bd29d8321a5c -Block 0007 [ 89]: b62cc59f27aaad04 -Block 0007 [ 90]: d923fdae147bc40c -Block 0007 [ 91]: 9c616bd57b7e84ae -Block 0007 [ 92]: ab85da331161632c -Block 0007 [ 93]: 1f829ab9e3d82e0f -Block 0007 [ 94]: a1a0cb5d41abd087 -Block 0007 [ 95]: 65d1a44fa4f74d71 -Block 0007 [ 96]: 0fff9f47af53d7bc -Block 0007 [ 97]: a6137e578c90212a -Block 0007 [ 98]: 1952ddf5f0d8559e -Block 0007 [ 99]: 82caa6d17701ce93 -Block 0007 [100]: ce2c4f2caa70d647 -Block 0007 [101]: 43b6f388fc63fceb -Block 0007 [102]: f0ab2a4a5f2401eb -Block 0007 [103]: 73f81ab2ff30012b -Block 0007 [104]: 0d48f1ed17ad305d -Block 0007 [105]: b9e395a5436b964b -Block 0007 [106]: 26ef4df90b6def84 -Block 0007 [107]: e2fe192b2e7fd243 -Block 0007 [108]: 2a1a94bfc3284834 -Block 0007 [109]: 20d972830befddeb -Block 0007 [110]: c4f665c5b4aae334 -Block 0007 [111]: dfc863e717497389 -Block 0007 [112]: c9d20e095e714d4a -Block 0007 [113]: 080e99e41e40ccd2 -Block 0007 [114]: 155244fecd9b4d56 -Block 0007 [115]: 0390aa4affdc169a -Block 0007 [116]: 24fd146729ad23c2 -Block 0007 [117]: 6c1c75d802e768bd -Block 0007 [118]: 18a2e91cc583305c -Block 0007 [119]: 38df18475a423feb -Block 0007 [120]: 5debbde2af61f810 -Block 0007 [121]: aeaca5dee3a59241 -Block 0007 [122]: bcde39331a1ecc97 -Block 0007 [123]: fbb5f3387dc6ee45 -Block 0007 [124]: 3a6761898cf1de67 -Block 0007 [125]: 274e953bd9e0c65a -Block 0007 [126]: 207eee4dbea76ede -Block 0007 [127]: 5ae4c378c10596ed -Block 0008 [ 0]: 7a4558382ec26ffe -Block 0008 [ 1]: bfb3a4220ee33bec -Block 0008 [ 2]: 0bb9abef17c12091 -Block 0008 [ 3]: 2d1a5e78e0315a51 -Block 0008 [ 4]: 5229abb2e02f3c9c -Block 0008 [ 5]: 4bf95fcf42690b6a -Block 0008 [ 6]: 69f9c812e04e0a23 -Block 0008 [ 7]: b9a9776bf9a9ebef -Block 0008 [ 8]: 4c68c489cd6f9f2f -Block 0008 [ 9]: d8aeafa31f1b226f -Block 0008 [ 10]: ab3999523eef3655 -Block 0008 [ 11]: 522930a175b1c971 -Block 0008 [ 12]: 6d854994a052c568 -Block 0008 [ 13]: 4f6a0b0e9ad28cee -Block 0008 [ 14]: 9ccbd1b8073aca10 -Block 0008 [ 15]: 9cb57f7137ccf8e4 -Block 0008 [ 16]: c3b6b259a447ec16 -Block 0008 [ 17]: c7d28a929ba8a4b9 -Block 0008 [ 18]: ef07034d2c437791 -Block 0008 [ 19]: 886507bd0b23dd4a -Block 0008 [ 20]: 439b59baa42dddab -Block 0008 [ 21]: adca3d7066d8c1c9 -Block 0008 [ 22]: 237de3c198c75d7e -Block 0008 [ 23]: 14a12b61a00c27d8 -Block 0008 [ 24]: 21ec3e3b68c03bea -Block 0008 [ 25]: 62f145b5bdfd0265 -Block 0008 [ 26]: 441c29b7ab81e019 -Block 0008 [ 27]: 721250f6ba37cec5 -Block 0008 [ 28]: 4f1d66952a460eac -Block 0008 [ 29]: 36c90c6c08958ba0 -Block 0008 [ 30]: 36e0d6b302c4c43d -Block 0008 [ 31]: a1036de72d3a24c4 -Block 0008 [ 32]: 5eb1b5a99de68da2 -Block 0008 [ 33]: d0f436a3c1bc2ac6 -Block 0008 [ 34]: bde158d75549813d -Block 0008 [ 35]: c747c78b6c871a27 -Block 0008 [ 36]: bf6583d6d6568f05 -Block 0008 [ 37]: 67752ac1e4e6d2a8 -Block 0008 [ 38]: d400789d1a2c99b6 -Block 0008 [ 39]: 4062fc2df7422502 -Block 0008 [ 40]: 16f312161d62c8ca -Block 0008 [ 41]: b73c24e98ec33c57 -Block 0008 [ 42]: a5051349edae2a72 -Block 0008 [ 43]: b79a6d8a2aaec726 -Block 0008 [ 44]: bc2138ff076b8662 -Block 0008 [ 45]: b6572caea7fba1b6 -Block 0008 [ 46]: 602ac98c8a63ace9 -Block 0008 [ 47]: dd7ef06b16122ceb -Block 0008 [ 48]: 80a999eb61bd8d70 -Block 0008 [ 49]: 9b7d45dbc341d857 -Block 0008 [ 50]: ac4e67fabca37aa9 -Block 0008 [ 51]: f9c524809e716091 -Block 0008 [ 52]: 619639e9fb27b57e -Block 0008 [ 53]: 5c1608ab33ed5ed2 -Block 0008 [ 54]: 369589c03d0eafa7 -Block 0008 [ 55]: a7914d392d81cc98 -Block 0008 [ 56]: 83759d9856a94944 -Block 0008 [ 57]: 9cfee9c2a8cb1780 -Block 0008 [ 58]: 30fe1eeac6982f47 -Block 0008 [ 59]: f4548a258a723f75 -Block 0008 [ 60]: 9aa833ecedeb3db1 -Block 0008 [ 61]: 12bad08144aafdfd -Block 0008 [ 62]: ff87f476fa549ee1 -Block 0008 [ 63]: 9bfcd44245b5d2d0 -Block 0008 [ 64]: 3a11a5b0fb4ff669 -Block 0008 [ 65]: ccfb7ba588c3d8fa -Block 0008 [ 66]: d8fd851205d9a244 -Block 0008 [ 67]: 4417f445a9a3d69d -Block 0008 [ 68]: 6721e7f561f6193f -Block 0008 [ 69]: ff39a930ac96214a -Block 0008 [ 70]: f0a33cfe65e8e5a7 -Block 0008 [ 71]: 906c6ae625eba5ef -Block 0008 [ 72]: 9ff110b00db8cf82 -Block 0008 [ 73]: a50a37b4ec50baef -Block 0008 [ 74]: aea63d8d8ab312b8 -Block 0008 [ 75]: 38bcee3687cfd826 -Block 0008 [ 76]: f55e6ebeeb5943f1 -Block 0008 [ 77]: 0cf154b24e0f7114 -Block 0008 [ 78]: 6e6149f3381c77da -Block 0008 [ 79]: d2c808920c78012f -Block 0008 [ 80]: 28375eb951f79538 -Block 0008 [ 81]: f84d4a372c6ac727 -Block 0008 [ 82]: 18e8fd6355ae1e8b -Block 0008 [ 83]: 993b2759755c6511 -Block 0008 [ 84]: fa0ad100b03f4a83 -Block 0008 [ 85]: 26d937298697431b -Block 0008 [ 86]: 2667bcd9fa134517 -Block 0008 [ 87]: 25bf69ea01c9f43b -Block 0008 [ 88]: 651d7711288dfee6 -Block 0008 [ 89]: dbdbc71ad1d3d8e6 -Block 0008 [ 90]: 19a2bc2962073d38 -Block 0008 [ 91]: 6fed17191de5eb87 -Block 0008 [ 92]: d00e7248d67d818f -Block 0008 [ 93]: 552f48b24a3c532d -Block 0008 [ 94]: 92f601c4a12ca656 -Block 0008 [ 95]: 6bd72e8382bab9f4 -Block 0008 [ 96]: 87800dd5e699ffa0 -Block 0008 [ 97]: 62051340716b1174 -Block 0008 [ 98]: cc61f428a6bff2ab -Block 0008 [ 99]: 54a69e44d4ce3a2c -Block 0008 [100]: 6496d5318c1f8a48 -Block 0008 [101]: bb871f31a81fa4a5 -Block 0008 [102]: 6a74236c72414426 -Block 0008 [103]: 15bae3add20aca96 -Block 0008 [104]: c80ea241cd5f97a8 -Block 0008 [105]: c04bdaaefaca448e -Block 0008 [106]: 81e3c2a697fe8f89 -Block 0008 [107]: 3be29e5ef72ea2d2 -Block 0008 [108]: 3f6b73d9c412839a -Block 0008 [109]: a8147b4754e46f0a -Block 0008 [110]: 29a478f91ff30eb8 -Block 0008 [111]: afe171a02f8ab002 -Block 0008 [112]: 14402c72b6ed606a -Block 0008 [113]: 0fc6cf88e4b26b79 -Block 0008 [114]: 1371cfaf137a4a36 -Block 0008 [115]: 3508f7e250e4812b -Block 0008 [116]: 6c0cdce1e3cec82e -Block 0008 [117]: b2e134c697f67e2d -Block 0008 [118]: 059929cfb84c8223 -Block 0008 [119]: 934dd6d510a690af -Block 0008 [120]: 26e3c05f2c8e2eb8 -Block 0008 [121]: 9e05231042675d2f -Block 0008 [122]: f8dfaedd456045cd -Block 0008 [123]: 0504ccf5fc2d1bf3 -Block 0008 [124]: f0345bbcc1d562ce -Block 0008 [125]: 2bdf71543425789a -Block 0008 [126]: 1b2ae340f1eb41a0 -Block 0008 [127]: 6ec035c341932b16 -Block 0009 [ 0]: 76da9663625cefa5 -Block 0009 [ 1]: 14d8f3ea4efe924a -Block 0009 [ 2]: d971d85251e15d77 -Block 0009 [ 3]: 1c25e2e430baeda6 -Block 0009 [ 4]: 0c4de1e3dbbf5aa1 -Block 0009 [ 5]: 6bf912dd75d1ebee -Block 0009 [ 6]: 89c6fd1e272626f6 -Block 0009 [ 7]: 4267979560731667 -Block 0009 [ 8]: bba1c48ef0407566 -Block 0009 [ 9]: bf22ba8f0c8db099 -Block 0009 [ 10]: abf49acd22b68ee7 -Block 0009 [ 11]: 19721b88f46e7b15 -Block 0009 [ 12]: 7b2f6dac68e7509c -Block 0009 [ 13]: d74ad4e90c4b1a0b -Block 0009 [ 14]: b02f8f4b13ee4aed -Block 0009 [ 15]: 3435fb7ceaebaf14 -Block 0009 [ 16]: cb59f285f76ecd91 -Block 0009 [ 17]: 19a98fac16083d0f -Block 0009 [ 18]: a6d6f2e7f0a10405 -Block 0009 [ 19]: b89f8e247760352b -Block 0009 [ 20]: 104507b7b68bfc06 -Block 0009 [ 21]: de351c2819b20286 -Block 0009 [ 22]: 9ec1c7aa3e8073a2 -Block 0009 [ 23]: 7c2c46aa130f6c1b -Block 0009 [ 24]: 5ac3a947e461ab4f -Block 0009 [ 25]: eca30a19e7455c87 -Block 0009 [ 26]: 9640d7b0113b5e71 -Block 0009 [ 27]: c896d6339618e6fb -Block 0009 [ 28]: d52d34642b92723e -Block 0009 [ 29]: 2a55ca129d38038e -Block 0009 [ 30]: 8a6dc3d7ceec85e9 -Block 0009 [ 31]: 7ba681ec3a53db83 -Block 0009 [ 32]: 3b9583434b7b2859 -Block 0009 [ 33]: 88bb320d5478546c -Block 0009 [ 34]: 09fe2e25f91bfd7a -Block 0009 [ 35]: 63c2c517ed701e04 -Block 0009 [ 36]: 61d250293a71cb82 -Block 0009 [ 37]: 32bdc1b64b6104b9 -Block 0009 [ 38]: f70a89b6785a1d41 -Block 0009 [ 39]: fc82d03affdb8016 -Block 0009 [ 40]: 514005dcdaae909a -Block 0009 [ 41]: 9211e089b2f9cda7 -Block 0009 [ 42]: 1416e44e5ae8b972 -Block 0009 [ 43]: 939c49d1b0d529b8 -Block 0009 [ 44]: 1840aede76b35c76 -Block 0009 [ 45]: 310b737a4d04eb51 -Block 0009 [ 46]: d7a2a1b09c71f893 -Block 0009 [ 47]: 3ea296cca93d6bfc -Block 0009 [ 48]: 91d7f03844662ebe -Block 0009 [ 49]: 10ded6ff22ebf906 -Block 0009 [ 50]: d13a2d771145017e -Block 0009 [ 51]: 3108f839bba8758e -Block 0009 [ 52]: c14c4cee0d507f99 -Block 0009 [ 53]: 892d6f69c439966f -Block 0009 [ 54]: 2509cbab89dac3e3 -Block 0009 [ 55]: f3645d2ebd8256cb -Block 0009 [ 56]: ece3b3e870ccc6b0 -Block 0009 [ 57]: 8069fedcc032f7cd -Block 0009 [ 58]: f1f3c7c853ce120c -Block 0009 [ 59]: 0c98b4f251d8b58c -Block 0009 [ 60]: c09d5932ecedc2e5 -Block 0009 [ 61]: d77d7ed390080d2e -Block 0009 [ 62]: 6a22a1fc7572e784 -Block 0009 [ 63]: 278de8d4b1198f48 -Block 0009 [ 64]: 5750b28e6422a7dd -Block 0009 [ 65]: f7d1a934c4c4f05c -Block 0009 [ 66]: af4ec05117ea6427 -Block 0009 [ 67]: 6fb4f6920fc7e676 -Block 0009 [ 68]: f2d83512befbd4b1 -Block 0009 [ 69]: f86687a23209f3aa -Block 0009 [ 70]: c777825f7401eee4 -Block 0009 [ 71]: c662f86b0d3f349c -Block 0009 [ 72]: 382a513dd4753c4b -Block 0009 [ 73]: a048c89447a62b56 -Block 0009 [ 74]: a74aa6b3081d0308 -Block 0009 [ 75]: f13092e648766c28 -Block 0009 [ 76]: 03032bb4913dc1b2 -Block 0009 [ 77]: b6998b0e42c2e209 -Block 0009 [ 78]: ab39805f67bca821 -Block 0009 [ 79]: 2fc2a4955b78cbe7 -Block 0009 [ 80]: 159cba427791e7c3 -Block 0009 [ 81]: 3fe7d23e3c571718 -Block 0009 [ 82]: 5e0d6f1e911c52b3 -Block 0009 [ 83]: 22f7a61b77838204 -Block 0009 [ 84]: d77426be938516bb -Block 0009 [ 85]: f7cb3ce698976d4f -Block 0009 [ 86]: 2cdd848c7d0eae51 -Block 0009 [ 87]: ad6f6dcbf2c0d570 -Block 0009 [ 88]: 817c9ec46f060801 -Block 0009 [ 89]: 4b7f9262adfdacd0 -Block 0009 [ 90]: 9f31812f3e5255a8 -Block 0009 [ 91]: cd174aa2c8c16338 -Block 0009 [ 92]: 8789b5ef6ade172b -Block 0009 [ 93]: 39373711e9a96757 -Block 0009 [ 94]: dff1fb97ccd6a6c2 -Block 0009 [ 95]: d9d4e3179b5f13e8 -Block 0009 [ 96]: 0a304d46e94cca00 -Block 0009 [ 97]: c1209e65a601f90b -Block 0009 [ 98]: 23bc71e75c8c4214 -Block 0009 [ 99]: 712904d565d09b14 -Block 0009 [100]: 97cfd610419e9abb -Block 0009 [101]: 3472ae86e479b578 -Block 0009 [102]: fef9f9f5b4491d49 -Block 0009 [103]: 1237c8b4e9dceb47 -Block 0009 [104]: 8ecddaf0a2588160 -Block 0009 [105]: bb75acd9afe17a30 -Block 0009 [106]: abb9ec4eaaf15acd -Block 0009 [107]: 36ca450d2be94bfc -Block 0009 [108]: a5ba15a2f35969ca -Block 0009 [109]: 5fe9dd04c051aa7f -Block 0009 [110]: 766ae8329fb254a4 -Block 0009 [111]: 5297e1d430ef5b0a -Block 0009 [112]: 38028d4ef043b385 -Block 0009 [113]: 367eae2fee1ecfb3 -Block 0009 [114]: 5244025847818051 -Block 0009 [115]: 5a708274f861d144 -Block 0009 [116]: c47fc6eb23e4815f -Block 0009 [117]: 4237e8b9b1f3cd9d -Block 0009 [118]: dbe1041d34cac4e1 -Block 0009 [119]: 413d2ae2ebf997c0 -Block 0009 [120]: f2e1a0edb6131e83 -Block 0009 [121]: 6017d817162e938e -Block 0009 [122]: e615ec7b7b788ba9 -Block 0009 [123]: 65980da4c019ce57 -Block 0009 [124]: fc0468d8994e41f6 -Block 0009 [125]: b4acf9c210b4c4a8 -Block 0009 [126]: 9d41bf349c2c7d76 -Block 0009 [127]: 692fde9411561af2 -Block 0010 [ 0]: 31b0e0280e2ecc43 -Block 0010 [ 1]: d93ce8f68a0da03e -Block 0010 [ 2]: 905acb624ea42359 -Block 0010 [ 3]: 41db5464be6fd809 -Block 0010 [ 4]: 1e18ca7554a26f96 -Block 0010 [ 5]: 13b7dab161d1fdd8 -Block 0010 [ 6]: 9b66c337f64cd75e -Block 0010 [ 7]: dcd57a568b0aa2eb -Block 0010 [ 8]: bb146ad41505d2f2 -Block 0010 [ 9]: 68b23abdcc2bedd2 -Block 0010 [ 10]: 98ea131811a6ce9d -Block 0010 [ 11]: bd4637f6ebaa8950 -Block 0010 [ 12]: de8a6392c9be3746 -Block 0010 [ 13]: 2877ec90bd19d6b4 -Block 0010 [ 14]: fa7e8f7f7268a613 -Block 0010 [ 15]: 74a12ec6ff3ea15b -Block 0010 [ 16]: 7760e314bb610a69 -Block 0010 [ 17]: c2567a4d1debed82 -Block 0010 [ 18]: 92a09f57410c22c6 -Block 0010 [ 19]: 029cf267e7fe7104 -Block 0010 [ 20]: fbea3477892c0bc9 -Block 0010 [ 21]: b2e3f0e7ef5a7a06 -Block 0010 [ 22]: d79a6b9875552ed8 -Block 0010 [ 23]: bb2af0a80556d78f -Block 0010 [ 24]: cba43070f27af0be -Block 0010 [ 25]: 0916245fd48c1b13 -Block 0010 [ 26]: ee72922b5c95c68b -Block 0010 [ 27]: 8442fa24985ecf3a -Block 0010 [ 28]: cf80392cac06da0c -Block 0010 [ 29]: d0920a00aeec8df8 -Block 0010 [ 30]: 3e24e4a5ceda5c74 -Block 0010 [ 31]: d8bbe4e1b6a62b5b -Block 0010 [ 32]: 54ebe9d0d5e0211e -Block 0010 [ 33]: 91317dbb9e6807b5 -Block 0010 [ 34]: 549c5ffb68d51a73 -Block 0010 [ 35]: 5f82c9335aa3513f -Block 0010 [ 36]: 495addbb2524905b -Block 0010 [ 37]: 64a03dcd91790e8a -Block 0010 [ 38]: d014df8b4bb91da3 -Block 0010 [ 39]: 6bcd8d9c0efa18a8 -Block 0010 [ 40]: 6c0e217ffe91d746 -Block 0010 [ 41]: 392eca2f236e3649 -Block 0010 [ 42]: 153c191538d717fb -Block 0010 [ 43]: c599c0570b6e3b3f -Block 0010 [ 44]: e97a9c1aea767f83 -Block 0010 [ 45]: f94b7ba8ba460a99 -Block 0010 [ 46]: 09947779799a24ff -Block 0010 [ 47]: 907f6f5cfe9a3a15 -Block 0010 [ 48]: 35926d86cc4b6a06 -Block 0010 [ 49]: c6ba133f79a0dbf0 -Block 0010 [ 50]: 004c55c1df4b91fb -Block 0010 [ 51]: dbadadd7d628d9b6 -Block 0010 [ 52]: 86f9e3ccf70cadd8 -Block 0010 [ 53]: e40b6524491e38f7 -Block 0010 [ 54]: 7e8ccdb6aa7ee6c8 -Block 0010 [ 55]: 673e5a85a14411e1 -Block 0010 [ 56]: 83fc3f033b501ec5 -Block 0010 [ 57]: 62ea0d3cc43de771 -Block 0010 [ 58]: eb51849733fa0a69 -Block 0010 [ 59]: ba3a5561891a745a -Block 0010 [ 60]: 508ac863f9ed414d -Block 0010 [ 61]: 7901256c6773a819 -Block 0010 [ 62]: 66128cf9e004a626 -Block 0010 [ 63]: d8f5776a2f46c852 -Block 0010 [ 64]: 22feb1b89d6f2615 -Block 0010 [ 65]: 6e15418dd65e27ed -Block 0010 [ 66]: 6078aac19f8c26a0 -Block 0010 [ 67]: e7f4ce3a286b3289 -Block 0010 [ 68]: d7b784346ed69fad -Block 0010 [ 69]: 3a01ff3f21fd890b -Block 0010 [ 70]: a8e64f89ba8a89e4 -Block 0010 [ 71]: 5faca06ed3155ee9 -Block 0010 [ 72]: db1279ef5d952316 -Block 0010 [ 73]: 7a6f2cca2eb8fd17 -Block 0010 [ 74]: fa350ee18ea4f4ef -Block 0010 [ 75]: fd23540d3ba0ada5 -Block 0010 [ 76]: fe71f0b180fb7a6c -Block 0010 [ 77]: bc1e622145c35033 -Block 0010 [ 78]: 4fc14b7a245c0357 -Block 0010 [ 79]: 0e1e1bdff76aa6a9 -Block 0010 [ 80]: a927389a374a1b32 -Block 0010 [ 81]: aff1a61bfb7d1891 -Block 0010 [ 82]: 72918289c24056b0 -Block 0010 [ 83]: 0833a583e75d1b50 -Block 0010 [ 84]: d13fa3a097554968 -Block 0010 [ 85]: f76322cbf6ae3de4 -Block 0010 [ 86]: d10106a843f3bc6a -Block 0010 [ 87]: 28f603e202e9f6a8 -Block 0010 [ 88]: e46a32b64599b2f1 -Block 0010 [ 89]: 88c6a687989f490d -Block 0010 [ 90]: 1ff23120e10c7e49 -Block 0010 [ 91]: fafb40a0f8529f66 -Block 0010 [ 92]: 3487240fef8bdf47 -Block 0010 [ 93]: 8248d2350c00490c -Block 0010 [ 94]: adc9101f99058a3b -Block 0010 [ 95]: 7d5f41ae871f8547 -Block 0010 [ 96]: 437207a49efdec8a -Block 0010 [ 97]: a4a383635c4c1daf -Block 0010 [ 98]: caf5fe0f57bb5e70 -Block 0010 [ 99]: a8af868ea7caeaf6 -Block 0010 [100]: 95fc901d137f29cf -Block 0010 [101]: e2480d5cec52a4f5 -Block 0010 [102]: 27fcbc1059d0b47a -Block 0010 [103]: 6cac9c61964647b9 -Block 0010 [104]: c80374446458ea9e -Block 0010 [105]: 294cd33eb188fb53 -Block 0010 [106]: aaedf14d09be48e6 -Block 0010 [107]: 54bd2364c64e7129 -Block 0010 [108]: b97dd69e971b74e2 -Block 0010 [109]: 3a913f07ce8383ca -Block 0010 [110]: 03c86810f373931b -Block 0010 [111]: 44affaf2720253ec -Block 0010 [112]: 9e459c99aefc0a66 -Block 0010 [113]: 172156f40a813320 -Block 0010 [114]: 918eb2798a1ec024 -Block 0010 [115]: 4f8c69444bc9b10c -Block 0010 [116]: 2485548f4f2dfafc -Block 0010 [117]: d88b524283e1930b -Block 0010 [118]: 12193f879f60e01f -Block 0010 [119]: d03dfb6ee7cb1e01 -Block 0010 [120]: 67256e0de8d1daf0 -Block 0010 [121]: 5fbce0def71cb5ea -Block 0010 [122]: d536a5ca66d99e5b -Block 0010 [123]: aa293c38c4e50d7c -Block 0010 [124]: 9c96c76ff9329c4b -Block 0010 [125]: 89caec0b4702e34d -Block 0010 [126]: 6bbc4c71d1f9a952 -Block 0010 [127]: 2c4eefa6b29b0a9f -Block 0011 [ 0]: d1e82a4318ce77be -Block 0011 [ 1]: 874f2182f38b5342 -Block 0011 [ 2]: a57e47eab52c45ef -Block 0011 [ 3]: d7868f310ded7eb8 -Block 0011 [ 4]: 2ab5e7aa907db14f -Block 0011 [ 5]: 8f5eb091fca8ae9c -Block 0011 [ 6]: 91a8d5162ebf9145 -Block 0011 [ 7]: e63439256b6c3095 -Block 0011 [ 8]: ba7c299a1f46c2b5 -Block 0011 [ 9]: 5ac255566aed1dcc -Block 0011 [ 10]: b744aeee793dd56b -Block 0011 [ 11]: 40ff3553e445a0a6 -Block 0011 [ 12]: 47cdec6b8fd8e08d -Block 0011 [ 13]: 378a3eaccc571892 -Block 0011 [ 14]: a43bbaacf3b7c831 -Block 0011 [ 15]: 9cf93a8aac9ac5dd -Block 0011 [ 16]: 644a7e1659437ae0 -Block 0011 [ 17]: be7aca7c8eeb7a78 -Block 0011 [ 18]: 5489b83282196cd2 -Block 0011 [ 19]: 12b3c67f31e850ca -Block 0011 [ 20]: 78acadb5952ded66 -Block 0011 [ 21]: 2f5532bf38ed472d -Block 0011 [ 22]: 80b01e9f61ae9217 -Block 0011 [ 23]: 137d9dbb651eeeec -Block 0011 [ 24]: 91fb38a676d620e5 -Block 0011 [ 25]: c6ee49c2b882c3dc -Block 0011 [ 26]: fd857c3247645a71 -Block 0011 [ 27]: e01ccd93bdb5360c -Block 0011 [ 28]: b27916b0936e7083 -Block 0011 [ 29]: ca6bd8cfc6c79705 -Block 0011 [ 30]: 42e029a388a28b08 -Block 0011 [ 31]: 88a6038c5deb05df -Block 0011 [ 32]: d8e7581a960046be -Block 0011 [ 33]: 55db8fad721a8593 -Block 0011 [ 34]: e181ae0982209758 -Block 0011 [ 35]: 9b3f644bc56863bb -Block 0011 [ 36]: 695442459c0b18d5 -Block 0011 [ 37]: 3180bedbeb601294 -Block 0011 [ 38]: 8916a950f0fb1a93 -Block 0011 [ 39]: 09b1af364f196d42 -Block 0011 [ 40]: 5c4d48b1fdb9e4ea -Block 0011 [ 41]: 06bd164d5fe8cd7c -Block 0011 [ 42]: 5d08357823fdd0fe -Block 0011 [ 43]: 871aa81df5297db4 -Block 0011 [ 44]: aea1bb914cc4d3de -Block 0011 [ 45]: 5805bff2f68f3fdd -Block 0011 [ 46]: 05da3d9d7bb42b11 -Block 0011 [ 47]: f0d6cec4ff7576a3 -Block 0011 [ 48]: 586c76e40ae98ec1 -Block 0011 [ 49]: 7df9ba4cccc6f6fc -Block 0011 [ 50]: a12f512bda7cce33 -Block 0011 [ 51]: 097a47bb7afcaf97 -Block 0011 [ 52]: 6cd6cf7ef02230c1 -Block 0011 [ 53]: 1a2dab3aaf33461e -Block 0011 [ 54]: 4d4461daf1edb76e -Block 0011 [ 55]: 4b094e8be464a5e1 -Block 0011 [ 56]: 94b49b52468af12d -Block 0011 [ 57]: e97f29956e4f3f65 -Block 0011 [ 58]: 546a2f30e98fa22f -Block 0011 [ 59]: a6a0a2679d03cbc7 -Block 0011 [ 60]: fb2d7fb78efc80c4 -Block 0011 [ 61]: cecb0c7cfc14d85e -Block 0011 [ 62]: 042dc5f3eb0ad513 -Block 0011 [ 63]: 52515d7e6dc6a8da -Block 0011 [ 64]: 2575cc25e9839a8e -Block 0011 [ 65]: 7f516599f948cb42 -Block 0011 [ 66]: e46f36f1c0818d6b -Block 0011 [ 67]: 5731d012d459c4e9 -Block 0011 [ 68]: 81cff35112704502 -Block 0011 [ 69]: da0bebf564d3dd82 -Block 0011 [ 70]: 6eb0391b93c3d6de -Block 0011 [ 71]: 1923bfbed3be6f3e -Block 0011 [ 72]: b6dfb17deaee4398 -Block 0011 [ 73]: de0be6017872013a -Block 0011 [ 74]: c148acb5b418afa0 -Block 0011 [ 75]: b1ca1e5f9d454327 -Block 0011 [ 76]: 550fbbd0d340ebe0 -Block 0011 [ 77]: 428ad5fcb873e497 -Block 0011 [ 78]: 1ea91704a4d3163a -Block 0011 [ 79]: f5b226019dd7ecdb -Block 0011 [ 80]: e216e4c8c718f95e -Block 0011 [ 81]: fde6918ddab3c6dd -Block 0011 [ 82]: a76475fd1c2cd357 -Block 0011 [ 83]: 536a89d3e96743db -Block 0011 [ 84]: cc10a5c4c126803d -Block 0011 [ 85]: 94ec09d9d7fd1b47 -Block 0011 [ 86]: aadd844c38ae1ad3 -Block 0011 [ 87]: c23192926aae85c1 -Block 0011 [ 88]: 9a3da449c0a5c317 -Block 0011 [ 89]: 965b1bb78c380db6 -Block 0011 [ 90]: c4534716589815d1 -Block 0011 [ 91]: 9ba4fd59e3b8bd34 -Block 0011 [ 92]: b7e7f48548a8b3a9 -Block 0011 [ 93]: 0c8f981ecad3b2cd -Block 0011 [ 94]: 58e0f56cef6e5df4 -Block 0011 [ 95]: 200e65e54ea07964 -Block 0011 [ 96]: e2ea08dd9dcb51ae -Block 0011 [ 97]: a58c5aacf25cd0c3 -Block 0011 [ 98]: 2bbd2393fb09dabc -Block 0011 [ 99]: d7c789974e35f75a -Block 0011 [100]: a5f2cfb27cc81bd4 -Block 0011 [101]: 0dbba0cd49c7fff0 -Block 0011 [102]: 3009e3a888fd14da -Block 0011 [103]: 8bb49cc8a5933291 -Block 0011 [104]: 3ff75be07f6da507 -Block 0011 [105]: 46b952048fae8b54 -Block 0011 [106]: 7d91a4bcc82074a8 -Block 0011 [107]: 3d1d0424d4b61236 -Block 0011 [108]: 2f9e57b172250828 -Block 0011 [109]: 110651a2fb71a9e2 -Block 0011 [110]: b8d52422bd4b24b7 -Block 0011 [111]: ad1285e4bda390bd -Block 0011 [112]: 9914e7817f719d17 -Block 0011 [113]: acfe8f67181ad3ec -Block 0011 [114]: ce07461f18020414 -Block 0011 [115]: bc2c5ea5b825f0ff -Block 0011 [116]: 8f34db8f5ecad7eb -Block 0011 [117]: 94d1a356122a6b15 -Block 0011 [118]: 4ac50fe0e2fcf6dd -Block 0011 [119]: 0e86996b9a244cbf -Block 0011 [120]: ef15e3204c51e486 -Block 0011 [121]: 7c96ce7c8273218c -Block 0011 [122]: 08481880faf9071d -Block 0011 [123]: 1127c3f2a6bf95cb -Block 0011 [124]: c9ba567895d6a66c -Block 0011 [125]: 5e0728ee3527ac2d -Block 0011 [126]: 085a8b3210d29a8e -Block 0011 [127]: b10a923b96936609 -Block 0012 [ 0]: 7ca5c1c23ba6fcf5 -Block 0012 [ 1]: 93896c87071cb700 -Block 0012 [ 2]: 0a7b001ab1d4f108 -Block 0012 [ 3]: f5971749b3290e79 -Block 0012 [ 4]: bbe4b1b8f9ae97cc -Block 0012 [ 5]: f0dc4d86da7101d8 -Block 0012 [ 6]: f44093e88688d153 -Block 0012 [ 7]: 9b57e221f5fa8003 -Block 0012 [ 8]: b9be5cc908dd61d1 -Block 0012 [ 9]: dce02419744f80ff -Block 0012 [ 10]: 590345f83559e7ae -Block 0012 [ 11]: 2b511a0ce02963f0 -Block 0012 [ 12]: cf49704b097c97a8 -Block 0012 [ 13]: 5e617f96beefc078 -Block 0012 [ 14]: 26904c1a263343e3 -Block 0012 [ 15]: d198ed95ed7899e3 -Block 0012 [ 16]: 7fb6c36f83d74440 -Block 0012 [ 17]: 26d6d951affa686a -Block 0012 [ 18]: 429458ed251aa32d -Block 0012 [ 19]: 30564a6502752222 -Block 0012 [ 20]: 083b3593f6437019 -Block 0012 [ 21]: bfb2edf1d3e2f9df -Block 0012 [ 22]: 8ef9a090bd52ba74 -Block 0012 [ 23]: 5960fa5b86350e43 -Block 0012 [ 24]: 87d794a0f5fe8de2 -Block 0012 [ 25]: 1f57ffd067f747bd -Block 0012 [ 26]: a7d821de0a8dedc1 -Block 0012 [ 27]: e1f07bf2a21990e9 -Block 0012 [ 28]: b3eef4b38c12154c -Block 0012 [ 29]: c4116ef122474677 -Block 0012 [ 30]: 6bf969976fae2b7d -Block 0012 [ 31]: 5c9192386d774124 -Block 0012 [ 32]: ea2542ca11476ed1 -Block 0012 [ 33]: 0f6c064701aea6a8 -Block 0012 [ 34]: 2a23cfa48e6bab6f -Block 0012 [ 35]: f9e1a627c2049543 -Block 0012 [ 36]: 498c67b116f61850 -Block 0012 [ 37]: a00d000b36091880 -Block 0012 [ 38]: 98416e75169a8b1d -Block 0012 [ 39]: 739ddcb3ac78772b -Block 0012 [ 40]: f987556d3e7e1df8 -Block 0012 [ 41]: ed080bc2bf785655 -Block 0012 [ 42]: 5f3b5a444e7658b0 -Block 0012 [ 43]: 7f58797e8a5a964a -Block 0012 [ 44]: 17ebd94342ae69ef -Block 0012 [ 45]: a78ce8b8314a838b -Block 0012 [ 46]: 4bf854703175d834 -Block 0012 [ 47]: 80ad519d6ca1dbe7 -Block 0012 [ 48]: 0034082b54ae9a4a -Block 0012 [ 49]: 503c5d03d2ee6f33 -Block 0012 [ 50]: 204944949f5b4a25 -Block 0012 [ 51]: 7ca8d9e4035c02ed -Block 0012 [ 52]: 5f29bf6897d71373 -Block 0012 [ 53]: a98f567680ffe33b -Block 0012 [ 54]: bed6859cef39bc91 -Block 0012 [ 55]: 66a5ed3f8ac0d2f3 -Block 0012 [ 56]: f9992ff178cb62e7 -Block 0012 [ 57]: 519b60c89b4a9e6e -Block 0012 [ 58]: 68cf1d3f38e3282a -Block 0012 [ 59]: 487e0010e144b05c -Block 0012 [ 60]: a6e09dce21d71d56 -Block 0012 [ 61]: 3f430a49042f84d2 -Block 0012 [ 62]: 98b3d6776bff822f -Block 0012 [ 63]: 74d938e0417ae0f7 -Block 0012 [ 64]: a8326370d10eff51 -Block 0012 [ 65]: 08ae557de683d605 -Block 0012 [ 66]: 7ab2fd7755ce48db -Block 0012 [ 67]: d15cc3febefee36d -Block 0012 [ 68]: 11e258f2eaad3bd6 -Block 0012 [ 69]: 3e5bf59ff6de85ef -Block 0012 [ 70]: 28b67261c63ca8c5 -Block 0012 [ 71]: 31ca052e999c45cb -Block 0012 [ 72]: 1faac598530b1f73 -Block 0012 [ 73]: 1a80147ba6b55947 -Block 0012 [ 74]: 02f41d623c86bfbb -Block 0012 [ 75]: 28d352044c3d0332 -Block 0012 [ 76]: 51227bb407e40943 -Block 0012 [ 77]: b191e20bba5ea6fa -Block 0012 [ 78]: 5a312002b2b849e5 -Block 0012 [ 79]: 969250eeadb700df -Block 0012 [ 80]: 2f2b0c204965f63d -Block 0012 [ 81]: 44adafa88612b805 -Block 0012 [ 82]: e61ad5e762b8e7c2 -Block 0012 [ 83]: d02e02a9f7c2893b -Block 0012 [ 84]: 0589f6ab6e0e88a6 -Block 0012 [ 85]: 7bd21a4db5bdc536 -Block 0012 [ 86]: 5e36482a2a3841ff -Block 0012 [ 87]: 7df93b0a71b9ac74 -Block 0012 [ 88]: fef8ca444cf873a3 -Block 0012 [ 89]: 733d37035f85b13a -Block 0012 [ 90]: bd9667eb6c003398 -Block 0012 [ 91]: 86e39720f5a6d34e -Block 0012 [ 92]: 87b59164d4a6bf7b -Block 0012 [ 93]: 927cece859b18d76 -Block 0012 [ 94]: cdc44fe6c8cd0871 -Block 0012 [ 95]: 7fe6340847034e40 -Block 0012 [ 96]: fe1ba94d16fefc2e -Block 0012 [ 97]: 08598f6f400d59a2 -Block 0012 [ 98]: 2e224e7a6b238166 -Block 0012 [ 99]: 4355d3f32647af5e -Block 0012 [100]: abdcf4c292a354cd -Block 0012 [101]: 7767314711558d31 -Block 0012 [102]: f1be6ed3f5d65a32 -Block 0012 [103]: 869911f775ba374d -Block 0012 [104]: e1c96e065e7630d3 -Block 0012 [105]: d43c7b0348047d5a -Block 0012 [106]: 2d3cb7990e56bb98 -Block 0012 [107]: a2b18306ef3ea736 -Block 0012 [108]: 744545559db80b1d -Block 0012 [109]: b0d93df763d7341b -Block 0012 [110]: 27fe604eaeac07f0 -Block 0012 [111]: 91c8e0ce703d48e8 -Block 0012 [112]: 901d510d6e4e50fd -Block 0012 [113]: 2652abf2b7403a3b -Block 0012 [114]: 11fa4ade8dab09c8 -Block 0012 [115]: e2df4a27e429f753 -Block 0012 [116]: dd033575e5f9d6c8 -Block 0012 [117]: f252e3c78e2e6b65 -Block 0012 [118]: 620fe7ce4ab1760e -Block 0012 [119]: c371755dc9851eda -Block 0012 [120]: 0b433ba5ddd97375 -Block 0012 [121]: dfde5cab62b93c63 -Block 0012 [122]: 083d2b596861dc5e -Block 0012 [123]: fd3433f1329ff7f8 -Block 0012 [124]: cabdff76543d1539 -Block 0012 [125]: bc26b3144c0a289d -Block 0012 [126]: 6f4a916e08ff334b -Block 0012 [127]: e5b0a4a8e5240637 -Block 0013 [ 0]: fd7ce244c7475828 -Block 0013 [ 1]: cacbfbd93617f1b8 -Block 0013 [ 2]: fdb0cf48b620586c -Block 0013 [ 3]: 94956780c2e98c6d -Block 0013 [ 4]: 459b6a1652d4486d -Block 0013 [ 5]: 6771131551e25220 -Block 0013 [ 6]: e0f3adab0728de2b -Block 0013 [ 7]: c857c4ef14df60aa -Block 0013 [ 8]: 783c3f264f917e14 -Block 0013 [ 9]: 4acc8ca7db5e61a3 -Block 0013 [ 10]: 6da6df59f8723540 -Block 0013 [ 11]: 71404b58ae33ad1e -Block 0013 [ 12]: 2d262d75c9de8656 -Block 0013 [ 13]: 605867033025d5bf -Block 0013 [ 14]: feed04276187d9d4 -Block 0013 [ 15]: 15ecefec97adbe97 -Block 0013 [ 16]: b3c0ba25f92b6407 -Block 0013 [ 17]: b4d88b79d5f8118e -Block 0013 [ 18]: 07af806302bf4150 -Block 0013 [ 19]: cdbf444301ef2cc4 -Block 0013 [ 20]: a83d0468385b1bf7 -Block 0013 [ 21]: 8cfc125da8f7b77b -Block 0013 [ 22]: 1594a86836460d1d -Block 0013 [ 23]: 3f18f39a56755b9f -Block 0013 [ 24]: ff78b84c9062e743 -Block 0013 [ 25]: 6d0ba651733a82a7 -Block 0013 [ 26]: 274b8e73a9a164ee -Block 0013 [ 27]: 2d3fbd108699a52e -Block 0013 [ 28]: 13680eff7955bae3 -Block 0013 [ 29]: 075258a2e2129a54 -Block 0013 [ 30]: 60a7ac04e29c4aac -Block 0013 [ 31]: 54cc75e4326adef5 -Block 0013 [ 32]: e043bc18332cba15 -Block 0013 [ 33]: a93ec2c04a305e5e -Block 0013 [ 34]: 28bd2e7185ce9911 -Block 0013 [ 35]: 6ede8387462677be -Block 0013 [ 36]: b6f7ae65415a323c -Block 0013 [ 37]: ba1c8d92ee403589 -Block 0013 [ 38]: c0d3bbb3043f10f9 -Block 0013 [ 39]: ec8e1e4344ad6062 -Block 0013 [ 40]: c94ecb937323d618 -Block 0013 [ 41]: 9754f1c11c9a7804 -Block 0013 [ 42]: d8efaa317c06f2b5 -Block 0013 [ 43]: a22b6ed585837d7e -Block 0013 [ 44]: 12c343c5d0e9520e -Block 0013 [ 45]: 6747b0dd0325b557 -Block 0013 [ 46]: 6fbb047d945192c6 -Block 0013 [ 47]: a6045420c6f3771a -Block 0013 [ 48]: df2a352f6214bcd2 -Block 0013 [ 49]: c3a292f001e6b65f -Block 0013 [ 50]: 723caaba605418ff -Block 0013 [ 51]: 6f8e850a165e2c9d -Block 0013 [ 52]: dcb982867ea624b3 -Block 0013 [ 53]: a0bf3e1c3fdc4ab4 -Block 0013 [ 54]: e824433d920a9952 -Block 0013 [ 55]: 98e66aa8596eb9ac -Block 0013 [ 56]: cb89ceb9f4cdfbf7 -Block 0013 [ 57]: e138589c0b1aeffa -Block 0013 [ 58]: 523f0606cffaea25 -Block 0013 [ 59]: 631bd8041e1b3b9b -Block 0013 [ 60]: 65e31ec29e142f85 -Block 0013 [ 61]: aa24720c1cc2595b -Block 0013 [ 62]: f367717328bebeb3 -Block 0013 [ 63]: 9172c6dcb9471144 -Block 0013 [ 64]: bb7fe520bf5b10e9 -Block 0013 [ 65]: 0c448c1b958ba9bb -Block 0013 [ 66]: 3342dea528ba0404 -Block 0013 [ 67]: 38101672d55d514f -Block 0013 [ 68]: 295f68aa6b25072b -Block 0013 [ 69]: 0a23137aacb2ca3f -Block 0013 [ 70]: 06365c4a08d7dc52 -Block 0013 [ 71]: 925a4eb911246ff4 -Block 0013 [ 72]: 79678ba22a5af61f -Block 0013 [ 73]: c6a264d4266d6705 -Block 0013 [ 74]: f83c88ef42aa748e -Block 0013 [ 75]: 71111052820882f3 -Block 0013 [ 76]: 0431e61dc2b6e548 -Block 0013 [ 77]: 11861c8cd487e3c4 -Block 0013 [ 78]: dc7e3139c735152b -Block 0013 [ 79]: 9d4214d83eb5168c -Block 0013 [ 80]: ecfeb1108bd18ae0 -Block 0013 [ 81]: eb6d12f55dc8d27b -Block 0013 [ 82]: 90d76b8da957c074 -Block 0013 [ 83]: 11361e1dcbe17eb6 -Block 0013 [ 84]: 841baacb0c5578a1 -Block 0013 [ 85]: 0b688c3798cc1ec1 -Block 0013 [ 86]: 46577db35ac5b023 -Block 0013 [ 87]: 766ab57bde46ca71 -Block 0013 [ 88]: e173aee80c598c25 -Block 0013 [ 89]: 4c0f26b801014154 -Block 0013 [ 90]: b00674f3807c4cce -Block 0013 [ 91]: c5504a8596323b1d -Block 0013 [ 92]: 0f5c0149b310640e -Block 0013 [ 93]: 74681f161ed43407 -Block 0013 [ 94]: 87f96733ba9a9305 -Block 0013 [ 95]: 5b057120a9eda19e -Block 0013 [ 96]: a879658c469f816f -Block 0013 [ 97]: e8e7a8bd1fee6418 -Block 0013 [ 98]: 374f686f822d71c4 -Block 0013 [ 99]: 67373b96acd04bd6 -Block 0013 [100]: 9a60f9fd85a895c5 -Block 0013 [101]: c558b5cd131c8b0a -Block 0013 [102]: 22dabcedc843d71a -Block 0013 [103]: 7edbb62c2e9b6e61 -Block 0013 [104]: 7fae51b3ec828ce0 -Block 0013 [105]: 1a0de7b941720cc5 -Block 0013 [106]: 5fda761c024f32fe -Block 0013 [107]: d77d00379261498a -Block 0013 [108]: ca3a3c8f18efe862 -Block 0013 [109]: 8c9c4dae15073fe0 -Block 0013 [110]: e7c3d35f790635f1 -Block 0013 [111]: 0db7c40f399e6ca5 -Block 0013 [112]: 368d2f184ee634bc -Block 0013 [113]: cf9c845b2527ad3e -Block 0013 [114]: 5a911598e5731f6d -Block 0013 [115]: b8e698a1d10a45c2 -Block 0013 [116]: f84ff315ba6ce3e9 -Block 0013 [117]: 4f69cb819ada3ff4 -Block 0013 [118]: 1e16b7331e757b2e -Block 0013 [119]: cea4a14373c1dc54 -Block 0013 [120]: 8c09c205a962250d -Block 0013 [121]: 001aa12eddf882b1 -Block 0013 [122]: db55f0f45bbe5c3e -Block 0013 [123]: e0874e9b2b8fd7c5 -Block 0013 [124]: b2c4e4287c43c5b2 -Block 0013 [125]: f16604ac4d68f1b3 -Block 0013 [126]: 7744f22d0a3f760f -Block 0013 [127]: 0a18fb6f2ea680c1 -Block 0014 [ 0]: f2f03d1b04a17cef -Block 0014 [ 1]: 96992a0db12dc452 -Block 0014 [ 2]: c7da5aa80bff1ab9 -Block 0014 [ 3]: be7c01a0e083cda4 -Block 0014 [ 4]: 474108589e0ec82b -Block 0014 [ 5]: ec8892e4f6903c4c -Block 0014 [ 6]: 739f9160edf19f30 -Block 0014 [ 7]: 58cfbefe026c3f53 -Block 0014 [ 8]: 3fadcb006fe1f646 -Block 0014 [ 9]: 4d25defa435a56e6 -Block 0014 [ 10]: 8feb9f57775a61aa -Block 0014 [ 11]: 038df252cf08fe7b -Block 0014 [ 12]: 5a0cdf9786d3d986 -Block 0014 [ 13]: 5be9dc12c5530d3a -Block 0014 [ 14]: 94af01ec9648d74f -Block 0014 [ 15]: 4977da96d56c854b -Block 0014 [ 16]: be4f7249746c253c -Block 0014 [ 17]: c408cc59fd752762 -Block 0014 [ 18]: 086bedc984333962 -Block 0014 [ 19]: 39b3219879079a48 -Block 0014 [ 20]: 90b885202a64f113 -Block 0014 [ 21]: abc0a2ad49b2f704 -Block 0014 [ 22]: 7a2677fdbf428392 -Block 0014 [ 23]: 4668ee34a150ddcd -Block 0014 [ 24]: a8a46a39ad66e435 -Block 0014 [ 25]: da4c56ff993a177a -Block 0014 [ 26]: eccff9b93a55dc50 -Block 0014 [ 27]: cd8657a12ba4e3d4 -Block 0014 [ 28]: 21914e642bc6fdfe -Block 0014 [ 29]: 4480f86b8e9db2d8 -Block 0014 [ 30]: d6a24e5481c56350 -Block 0014 [ 31]: 1a8b840bcfe985be -Block 0014 [ 32]: d23efab915d69ef0 -Block 0014 [ 33]: 697e3d1584c3f8d5 -Block 0014 [ 34]: 1d6bd5c30988e3cf -Block 0014 [ 35]: b8a22e618971d997 -Block 0014 [ 36]: 1fbe49fdddadc888 -Block 0014 [ 37]: 7ceefb8d37e9bfa4 -Block 0014 [ 38]: cbee4bf6ce316222 -Block 0014 [ 39]: d6733e7d86990202 -Block 0014 [ 40]: f85bcd8891002bd4 -Block 0014 [ 41]: bcbac6f06255668c -Block 0014 [ 42]: 55090ef103152488 -Block 0014 [ 43]: 7cd3bf9926e877da -Block 0014 [ 44]: 5cab104e2b8c8b44 -Block 0014 [ 45]: 2a16ffdc1a4a879a -Block 0014 [ 46]: 2867317c152f109e -Block 0014 [ 47]: 76ec5ec6e994b320 -Block 0014 [ 48]: ad77c12ec7c75ba1 -Block 0014 [ 49]: 09b4a81a2e216e77 -Block 0014 [ 50]: 5908fe588be9fd0a -Block 0014 [ 51]: 26ffcc96221c1989 -Block 0014 [ 52]: 3310c69cdd95eef0 -Block 0014 [ 53]: 0432787506b0745c -Block 0014 [ 54]: 7d9d002f2b6f18b1 -Block 0014 [ 55]: 8bd9abcedfa7b4f8 -Block 0014 [ 56]: d758fddd27590f92 -Block 0014 [ 57]: 67e82e109ce16bef -Block 0014 [ 58]: deaa1e3b8fdfe767 -Block 0014 [ 59]: 5119a6bb9208ae19 -Block 0014 [ 60]: 274efdc1006d3a22 -Block 0014 [ 61]: c94f0b13873b7b24 -Block 0014 [ 62]: 357ac407d0b5759c -Block 0014 [ 63]: 3930e5d999b0312e -Block 0014 [ 64]: 33e3e6bd2fe095f8 -Block 0014 [ 65]: 338b9696938d0cc0 -Block 0014 [ 66]: c96b296da856ad27 -Block 0014 [ 67]: 14148dfb090c18c7 -Block 0014 [ 68]: cd7d931e870597e7 -Block 0014 [ 69]: c1cc609ca861a3c4 -Block 0014 [ 70]: 09056c2aa840eef5 -Block 0014 [ 71]: 9d6e78244394c4d4 -Block 0014 [ 72]: 7e2dc358a727d8b0 -Block 0014 [ 73]: a88b992feed4d62a -Block 0014 [ 74]: bd54844166fb0f1d -Block 0014 [ 75]: a696233c40a65b6d -Block 0014 [ 76]: c9e1f184fb491805 -Block 0014 [ 77]: 3d65649659b5bc13 -Block 0014 [ 78]: b8cd773cfd1472c5 -Block 0014 [ 79]: fc75b5985df11340 -Block 0014 [ 80]: b8d937b3f3ff97f3 -Block 0014 [ 81]: abea06296e20efc5 -Block 0014 [ 82]: a7ccb1aadd084873 -Block 0014 [ 83]: be960608efa8f86a -Block 0014 [ 84]: 2235ba471ea6cea9 -Block 0014 [ 85]: 6d5c640b585ed896 -Block 0014 [ 86]: 38f6ed9f38bc9391 -Block 0014 [ 87]: cbedcd648c24df47 -Block 0014 [ 88]: d151aba03768ae3c -Block 0014 [ 89]: 758e544c4f59313a -Block 0014 [ 90]: f3832f4c300332f1 -Block 0014 [ 91]: 8eaac11d100c0c1d -Block 0014 [ 92]: 130a1c5607c584a3 -Block 0014 [ 93]: 0dfb11d24999f348 -Block 0014 [ 94]: 7e317c9700d59f24 -Block 0014 [ 95]: e58a8f116bd3d788 -Block 0014 [ 96]: 6988e8db0ee7fba5 -Block 0014 [ 97]: 8e82951b0136710f -Block 0014 [ 98]: 3d02d910d490375c -Block 0014 [ 99]: faeb97304bb1be0c -Block 0014 [100]: 21e7742bc48de3cd -Block 0014 [101]: 65e8f95e9b3fbc47 -Block 0014 [102]: be63ccf97ce8754b -Block 0014 [103]: 6789594d4bddec50 -Block 0014 [104]: a18c8782e6905365 -Block 0014 [105]: 4436042cd2d01265 -Block 0014 [106]: 2285d882b07ee472 -Block 0014 [107]: 6557c4dac229d174 -Block 0014 [108]: 68b0d678ce7212e2 -Block 0014 [109]: 825e3feeadc63f9a -Block 0014 [110]: 09617c5a98cdc06a -Block 0014 [111]: fefb35a97c41a327 -Block 0014 [112]: 09f9effdaeb72080 -Block 0014 [113]: 65bbb2866f516772 -Block 0014 [114]: f0fc0d1466e91442 -Block 0014 [115]: 57e41d6f7b9a9830 -Block 0014 [116]: ed3dab2c2a606e1f -Block 0014 [117]: 53925f1e10f3d52d -Block 0014 [118]: ff01f703dfecba68 -Block 0014 [119]: 6e049b809c19c293 -Block 0014 [120]: 42add865c70171a8 -Block 0014 [121]: 6a66f6439622b1dd -Block 0014 [122]: 1ad1b3f08aac6977 -Block 0014 [123]: 6f9fcebaba3a8239 -Block 0014 [124]: 349c01c02eb52510 -Block 0014 [125]: d779dd0e5d7578f5 -Block 0014 [126]: bae26cd8f24fc0b4 -Block 0014 [127]: de7a654482ac69f3 -Block 0015 [ 0]: 1255358413a2f1f9 -Block 0015 [ 1]: 751ead88b0364f98 -Block 0015 [ 2]: b30312b425732427 -Block 0015 [ 3]: 4dd5694abdf8e712 -Block 0015 [ 4]: d02e249ca6d3f489 -Block 0015 [ 5]: 71493faca635c5ad -Block 0015 [ 6]: f78982bc7f4ca168 -Block 0015 [ 7]: c633520a9725f4af -Block 0015 [ 8]: 341db6d65fddf672 -Block 0015 [ 9]: 00e78a8c97e7500b -Block 0015 [ 10]: 3c1eddc1acdaf215 -Block 0015 [ 11]: bc5ace37b9d774b5 -Block 0015 [ 12]: 895485b8620a8aee -Block 0015 [ 13]: a4b23e29fcf0582c -Block 0015 [ 14]: dae479e8563081ac -Block 0015 [ 15]: 91ce9ed95308593b -Block 0015 [ 16]: 1f597249ed72d58b -Block 0015 [ 17]: f0037a97ecc07819 -Block 0015 [ 18]: 270262d7c2a2215c -Block 0015 [ 19]: 2c708de0238eef8c -Block 0015 [ 20]: c6056f29b6e4e73d -Block 0015 [ 21]: dcc9a09ea0d6d07f -Block 0015 [ 22]: 42630afe629efd41 -Block 0015 [ 23]: ef89fb3fa093fbee -Block 0015 [ 24]: 907eb2909634cca2 -Block 0015 [ 25]: e1b76abbb4c1e695 -Block 0015 [ 26]: 1aa2fa18102682d2 -Block 0015 [ 27]: bf05c904ff36f1dd -Block 0015 [ 28]: 89fe77d740427896 -Block 0015 [ 29]: ae7c4b328a98651a -Block 0015 [ 30]: aaa34fcf1098df10 -Block 0015 [ 31]: ea7f105cedd5ce17 -Block 0015 [ 32]: e48627ab79a7ccd4 -Block 0015 [ 33]: bf080032bf8c8d3f -Block 0015 [ 34]: 901f4fa87b358010 -Block 0015 [ 35]: 28687f31c48e45c6 -Block 0015 [ 36]: 69a67c4c183d2a09 -Block 0015 [ 37]: cf5d0c0964860a2f -Block 0015 [ 38]: ef7cca75218f27a0 -Block 0015 [ 39]: 755891ba0181c6df -Block 0015 [ 40]: 69fc1f1fb54f7e68 -Block 0015 [ 41]: e1a50bcdd76c01b2 -Block 0015 [ 42]: 8d20bc9e4582d634 -Block 0015 [ 43]: f5bb031864f83c09 -Block 0015 [ 44]: b6a23f45f2367307 -Block 0015 [ 45]: 3e82729a6494e098 -Block 0015 [ 46]: 7791faaac40f4632 -Block 0015 [ 47]: acb9d9be87280aa2 -Block 0015 [ 48]: 0f29ad18d6e83cbc -Block 0015 [ 49]: e1d7ec9ed395ae76 -Block 0015 [ 50]: e8360c0c6b3fcd7c -Block 0015 [ 51]: ad8ccdefc893d72b -Block 0015 [ 52]: 90abd311e2537d6a -Block 0015 [ 53]: a395a4653707425f -Block 0015 [ 54]: a8fa96881bf142a9 -Block 0015 [ 55]: cb80ecdcebcc94a2 -Block 0015 [ 56]: 2855f69a9c3bb4e5 -Block 0015 [ 57]: ab213ef77b3a45db -Block 0015 [ 58]: 5ce4cea1fe393c3d -Block 0015 [ 59]: 3e53f9b07a96f0a9 -Block 0015 [ 60]: c544ee084b9f0309 -Block 0015 [ 61]: b1a2040b934b211c -Block 0015 [ 62]: 5786c6421c449ecd -Block 0015 [ 63]: 026a08e9a3a4cd5d -Block 0015 [ 64]: 49ebf2b8246b3c49 -Block 0015 [ 65]: 131dbb5efced5f87 -Block 0015 [ 66]: e953740868a2dbd3 -Block 0015 [ 67]: cd2b4261d4d98342 -Block 0015 [ 68]: fdb12b71ee28acea -Block 0015 [ 69]: bb19976da7b21eeb -Block 0015 [ 70]: 724cd3d9d2e9d16b -Block 0015 [ 71]: 6696d05c291c1967 -Block 0015 [ 72]: 042b9a5efae770df -Block 0015 [ 73]: 602824b47d02bf47 -Block 0015 [ 74]: 40d0f9eff044a6f0 -Block 0015 [ 75]: 5285b30bdf724adf -Block 0015 [ 76]: 14813c0b2cdc4809 -Block 0015 [ 77]: 6e2e1693ff0fc7f6 -Block 0015 [ 78]: 5a165346997138ce -Block 0015 [ 79]: 1a76bf7aa83132c8 -Block 0015 [ 80]: a6519d9659432a64 -Block 0015 [ 81]: f5f1c2d6b15bce5a -Block 0015 [ 82]: f5b29a131ca0a074 -Block 0015 [ 83]: c5e9a0544b261af0 -Block 0015 [ 84]: 8d9953c2d32b33f9 -Block 0015 [ 85]: c7f21a3e0d0b3bb7 -Block 0015 [ 86]: 75f4a476b8c4b2f9 -Block 0015 [ 87]: 756d6972e7060a75 -Block 0015 [ 88]: 62699ecf6ddbee77 -Block 0015 [ 89]: 7d195f9a4f52b21c -Block 0015 [ 90]: ea4c560cea05cda3 -Block 0015 [ 91]: 0d5589b1e874cd8d -Block 0015 [ 92]: 68c9804bb7ceaded -Block 0015 [ 93]: 64949cd5db3bd11c -Block 0015 [ 94]: 391c3bfe0a230a0e -Block 0015 [ 95]: 5f9584071f0450f0 -Block 0015 [ 96]: 11f7986cd347ffeb -Block 0015 [ 97]: a3d32d4f7c987b46 -Block 0015 [ 98]: 97306e0cb5794d17 -Block 0015 [ 99]: f6600ddb12c2360b -Block 0015 [100]: ee875f8f1e829ed1 -Block 0015 [101]: f8838d4105e9e06d -Block 0015 [102]: 29a64f9ede3483c6 -Block 0015 [103]: 4c8bfa826e1c98ae -Block 0015 [104]: 8b8764597961e33c -Block 0015 [105]: 446734f12cd1e8a5 -Block 0015 [106]: 1575565d48091cbb -Block 0015 [107]: df76d2d4fb41d479 -Block 0015 [108]: 9c731839f9a69055 -Block 0015 [109]: 63a1bcba5e407783 -Block 0015 [110]: 89eee48d0f2af665 -Block 0015 [111]: d435a276381b3f5d -Block 0015 [112]: a15f2a8cf30c8242 -Block 0015 [113]: f3aa49983fee282a -Block 0015 [114]: e582e86f9e8ee653 -Block 0015 [115]: 4c7c33109e0dec66 -Block 0015 [116]: 6fd95057ae162c43 -Block 0015 [117]: 47c054c1102250ba -Block 0015 [118]: 5ca2000678b17d5f -Block 0015 [119]: b7a46465f2f67b9f -Block 0015 [120]: 3be6f3a2fe74eb70 -Block 0015 [121]: 6bd87ed167e85c64 -Block 0015 [122]: 4578998648f615f0 -Block 0015 [123]: 8d6b943f96554611 -Block 0015 [124]: b8f726520775506e -Block 0015 [125]: 2c720aacce22a83f -Block 0015 [126]: 4c74a22df9900c10 -Block 0015 [127]: 677933502ccbb992 -Block 0016 [ 0]: 4db7d68d9601e701 -Block 0016 [ 1]: c22dbfcd31599660 -Block 0016 [ 2]: 5a571361825c35f5 -Block 0016 [ 3]: a6e2abaa12350087 -Block 0016 [ 4]: 8d539b6a04326542 -Block 0016 [ 5]: 13aa4d46af6159d7 -Block 0016 [ 6]: 2b46a2baaa82b799 -Block 0016 [ 7]: 6db1ffe91647adf1 -Block 0016 [ 8]: fa299728b2d664bb -Block 0016 [ 9]: 7106dc0e4de7fb6b -Block 0016 [ 10]: 23bad9c3029d5ed2 -Block 0016 [ 11]: 5b2a068f6fb744da -Block 0016 [ 12]: a09d30ab6242d56c -Block 0016 [ 13]: e57083fbac677790 -Block 0016 [ 14]: 61ea4bfcffccd406 -Block 0016 [ 15]: 66c50e9d8adce355 -Block 0016 [ 16]: 5ac73d2b9e4e38fb -Block 0016 [ 17]: 09e063f4fb7790bb -Block 0016 [ 18]: 46dfd5a0f8d8dec2 -Block 0016 [ 19]: bd925ed692313d4e -Block 0016 [ 20]: 3e5013e04540b07f -Block 0016 [ 21]: 36d13e4cb42ed6ba -Block 0016 [ 22]: 19a6fba6330763c9 -Block 0016 [ 23]: 4b8e8279794a06ea -Block 0016 [ 24]: 669cc88cb6ebf3fd -Block 0016 [ 25]: 5d26b291e22d6f3c -Block 0016 [ 26]: eded220ce598a9b1 -Block 0016 [ 27]: 82bf01afa95b32ac -Block 0016 [ 28]: 9d2d4f8ce3cf4a5a -Block 0016 [ 29]: efb52aa40b14f099 -Block 0016 [ 30]: 303b3d066fa3bb0e -Block 0016 [ 31]: d79142270c27e172 -Block 0016 [ 32]: f8b29998949ab8d5 -Block 0016 [ 33]: 976ec56b65bc1cdb -Block 0016 [ 34]: 00ec9322e0c65283 -Block 0016 [ 35]: 5a682d984b0253db -Block 0016 [ 36]: dfeeb5a0cd007a74 -Block 0016 [ 37]: 6d7ed66839d81317 -Block 0016 [ 38]: 7cbf6ff524df82ea -Block 0016 [ 39]: a402cba8fe4ee222 -Block 0016 [ 40]: 051ce4340605fb49 -Block 0016 [ 41]: db1c5330069c673f -Block 0016 [ 42]: d04ad8bdeb9ee349 -Block 0016 [ 43]: 095a39dfbedeb10f -Block 0016 [ 44]: c8f2764065673d60 -Block 0016 [ 45]: 250f51b581f26844 -Block 0016 [ 46]: 89f8ff131b1e1adf -Block 0016 [ 47]: 8c278f41821d1b65 -Block 0016 [ 48]: 45064aaffb3c6590 -Block 0016 [ 49]: 0ed7d575c479d9e9 -Block 0016 [ 50]: a880e9daeb7a648c -Block 0016 [ 51]: d0fb1bd6daa2e147 -Block 0016 [ 52]: 1f13ac0f49a4d2e8 -Block 0016 [ 53]: e748f547f85b940d -Block 0016 [ 54]: 6f4014e2e1beea5c -Block 0016 [ 55]: 0bf87689a53f2a46 -Block 0016 [ 56]: acd91b7197cf80eb -Block 0016 [ 57]: 9603a84c49ea2b0c -Block 0016 [ 58]: 7674eb49dbcbd228 -Block 0016 [ 59]: 54a8b7d3fcb61a40 -Block 0016 [ 60]: b5f0e12b74727573 -Block 0016 [ 61]: ea7e8ba3eb6af459 -Block 0016 [ 62]: d1b08409c386140e -Block 0016 [ 63]: 3e346330eae2f3c0 -Block 0016 [ 64]: 19594146c1309b3b -Block 0016 [ 65]: 8039aac71029f73e -Block 0016 [ 66]: d1e9ec55bb6e7cf6 -Block 0016 [ 67]: 9252fee592a2d1ce -Block 0016 [ 68]: c8fe275bd8ccc476 -Block 0016 [ 69]: 357d09183e4eea94 -Block 0016 [ 70]: 992d00208d5f5286 -Block 0016 [ 71]: 0c854a63942fa090 -Block 0016 [ 72]: 69dd9ef7ec5397cf -Block 0016 [ 73]: b9afe5e205d6e5c9 -Block 0016 [ 74]: 2371fbb9bf596a93 -Block 0016 [ 75]: d6bec9f826beb54a -Block 0016 [ 76]: 48954f405076ba24 -Block 0016 [ 77]: 327b7a72c294184d -Block 0016 [ 78]: ff3813caf762b02e -Block 0016 [ 79]: 6701af476b138c3e -Block 0016 [ 80]: ff27a00fc63062a3 -Block 0016 [ 81]: ab1ab6bf00205f51 -Block 0016 [ 82]: 7ccddffaf79e0429 -Block 0016 [ 83]: b2e0f5f4b62c8f47 -Block 0016 [ 84]: f1e3cb6a21181e4c -Block 0016 [ 85]: e8ba84317f763bdd -Block 0016 [ 86]: ea2627679ca2629f -Block 0016 [ 87]: 68a29eccab7bdf7e -Block 0016 [ 88]: aa81043849728072 -Block 0016 [ 89]: f03fe30d8cc1750a -Block 0016 [ 90]: e1c8dc0586b6d96a -Block 0016 [ 91]: 9efb4cefbc1f797a -Block 0016 [ 92]: e9614318106bb145 -Block 0016 [ 93]: 6a05a48ce9764b41 -Block 0016 [ 94]: 35d9f3e94e77a4d3 -Block 0016 [ 95]: 1d3d8037ca4c3f94 -Block 0016 [ 96]: b781fb66e6ba85a7 -Block 0016 [ 97]: 82aaa076c2bf43f3 -Block 0016 [ 98]: f922a9c456a4b545 -Block 0016 [ 99]: eee12870754d9bb8 -Block 0016 [100]: b1942602108d6701 -Block 0016 [101]: 43a61f3c92d2d0df -Block 0016 [102]: f49bf18180934b65 -Block 0016 [103]: 79e13c570bdc1a64 -Block 0016 [104]: 79e5a885c8f6a304 -Block 0016 [105]: c193d6341218fc8d -Block 0016 [106]: 9fd3fe537b8da1d8 -Block 0016 [107]: 0cb5defa5667eaa8 -Block 0016 [108]: 4a362119f16ebcee -Block 0016 [109]: 328d6c6fe467f299 -Block 0016 [110]: 1ebe0815be15b551 -Block 0016 [111]: f72344ed513952bb -Block 0016 [112]: 230c62884c7bb1bc -Block 0016 [113]: 0509bf0a7180b231 -Block 0016 [114]: bea5fa3794b76431 -Block 0016 [115]: 58fe11d9e0ac41f2 -Block 0016 [116]: 29ee103be36b97cc -Block 0016 [117]: 9ddb5e6a37034145 -Block 0016 [118]: 36182ee882cb12ef -Block 0016 [119]: 4b6cda7dd1c879a4 -Block 0016 [120]: b36a7852a1576905 -Block 0016 [121]: 69f26e6c7af01c50 -Block 0016 [122]: 51d24eee59eea10e -Block 0016 [123]: 4413829b410310e7 -Block 0016 [124]: 6e400eca296a3eec -Block 0016 [125]: 83dcf4d0698b439e -Block 0016 [126]: c78b6ca7d4e4fa65 -Block 0016 [127]: d9622848b6251236 -Block 0017 [ 0]: c54328d345ca134d -Block 0017 [ 1]: cfa77c1577707f01 -Block 0017 [ 2]: b5aa378403ab29b0 -Block 0017 [ 3]: f20b478caa621ff5 -Block 0017 [ 4]: ab99c9536508c527 -Block 0017 [ 5]: 1f4f3e051eca8e47 -Block 0017 [ 6]: 0e60c96834ac2fc8 -Block 0017 [ 7]: 4cca30658c05da56 -Block 0017 [ 8]: 9198d2faa4c0335d -Block 0017 [ 9]: 100fdd49ef23faa6 -Block 0017 [ 10]: 1ad7bc8ec193d0aa -Block 0017 [ 11]: 383474b87bc77f78 -Block 0017 [ 12]: 7379b1216d9fb400 -Block 0017 [ 13]: d441d1836fef3337 -Block 0017 [ 14]: 5a222157ae4b4ebc -Block 0017 [ 15]: 1c96f190fa25fcdd -Block 0017 [ 16]: d8a3ef1a22b6600a -Block 0017 [ 17]: 19559dd25da63154 -Block 0017 [ 18]: df8d7fc83bdf129b -Block 0017 [ 19]: 57d7d7f2dd9e659f -Block 0017 [ 20]: ac96e1ff1aa1aa95 -Block 0017 [ 21]: 1160e842ccc628f4 -Block 0017 [ 22]: f66aabf8a6679a72 -Block 0017 [ 23]: d413c7452672421b -Block 0017 [ 24]: 9c8553bc9aa9a3ac -Block 0017 [ 25]: aea0b3ad0a8e7b97 -Block 0017 [ 26]: 7d024038e0b25b37 -Block 0017 [ 27]: 25e901ca558b870d -Block 0017 [ 28]: 646311cb35864fdc -Block 0017 [ 29]: 7755180ad31050bb -Block 0017 [ 30]: db45dcbddd267c51 -Block 0017 [ 31]: d7776d1556dae483 -Block 0017 [ 32]: ba57f51d620df982 -Block 0017 [ 33]: 94523d6c3bd0dca6 -Block 0017 [ 34]: e80c237ab5434208 -Block 0017 [ 35]: f8b6582d4d0b28e5 -Block 0017 [ 36]: 1ba4596ef5f23763 -Block 0017 [ 37]: a1b5be3f522e4f18 -Block 0017 [ 38]: f46d15fb9aec82a9 -Block 0017 [ 39]: fc554234bf947ba0 -Block 0017 [ 40]: 81555cb4ba1e65b8 -Block 0017 [ 41]: 51c91682e578b053 -Block 0017 [ 42]: 7523b1d8e0c77245 -Block 0017 [ 43]: 6c16476e5ac5e8bd -Block 0017 [ 44]: 6314944acce18cbc -Block 0017 [ 45]: 6b43cd08397cd457 -Block 0017 [ 46]: a239e3c7d48b9e5a -Block 0017 [ 47]: 69c2376df7b66591 -Block 0017 [ 48]: 826105da3fb96f0c -Block 0017 [ 49]: 5b70d4230b4309f2 -Block 0017 [ 50]: 1d5b84056f0c9427 -Block 0017 [ 51]: 86a6061b9157b530 -Block 0017 [ 52]: c5781a6ee336c6d4 -Block 0017 [ 53]: c83cbfb283f2db87 -Block 0017 [ 54]: 73c3a7ee255b70b4 -Block 0017 [ 55]: e35346cf3c917a18 -Block 0017 [ 56]: 51d17c233753e88c -Block 0017 [ 57]: c708839e0cfe70d8 -Block 0017 [ 58]: db38c49c7deb9110 -Block 0017 [ 59]: a4b316fc65fe56b4 -Block 0017 [ 60]: 278b861666460673 -Block 0017 [ 61]: 8a602bdd360facee -Block 0017 [ 62]: 9187b67f360fb96f -Block 0017 [ 63]: 929eb2819f26f457 -Block 0017 [ 64]: 416e6d297b208f50 -Block 0017 [ 65]: 35995bf5743caa54 -Block 0017 [ 66]: f2c12345798abde2 -Block 0017 [ 67]: 387e8376d981ed5c -Block 0017 [ 68]: d35b2c8fbed5bbf4 -Block 0017 [ 69]: f77d0f68fbc0b8b6 -Block 0017 [ 70]: 6ca736edbb3f688d -Block 0017 [ 71]: ef34ee1747771a6b -Block 0017 [ 72]: eebf0ca5b6311f32 -Block 0017 [ 73]: fa3fa95cb3d67c5e -Block 0017 [ 74]: 2bccc3d9a03e5bf6 -Block 0017 [ 75]: 736b79dfb710023d -Block 0017 [ 76]: c6f4c8d9b79c8b74 -Block 0017 [ 77]: f5c38b8fd5241700 -Block 0017 [ 78]: ffd159c0618bdffc -Block 0017 [ 79]: b7f47549a90bc033 -Block 0017 [ 80]: 9e876174a58ad8db -Block 0017 [ 81]: 77b8427d935b21ab -Block 0017 [ 82]: 4927a28eba796c7f -Block 0017 [ 83]: 78045ac02f89368f -Block 0017 [ 84]: 4b27512bf6edc90f -Block 0017 [ 85]: 40646c4e19dd788e -Block 0017 [ 86]: 68ab9102c1676ed9 -Block 0017 [ 87]: 05c56dfa101e5935 -Block 0017 [ 88]: 186693df865e9407 -Block 0017 [ 89]: 0385811decc5060d -Block 0017 [ 90]: bfe32fafcf161c7a -Block 0017 [ 91]: 12f640466210cc83 -Block 0017 [ 92]: bfee4686d9857686 -Block 0017 [ 93]: 7aef4cba468a9955 -Block 0017 [ 94]: 4c75ab47d5cc3a8a -Block 0017 [ 95]: 2a5eec15181f9b55 -Block 0017 [ 96]: afa922a4970eec4e -Block 0017 [ 97]: b4675389b5a2ac9b -Block 0017 [ 98]: 9cba91a2e292b96d -Block 0017 [ 99]: 0afdeafb943582b8 -Block 0017 [100]: bf25b9f2b10e5efb -Block 0017 [101]: a2d10582b75d78b5 -Block 0017 [102]: 2a441f808bd0333b -Block 0017 [103]: a642e7057149cc1f -Block 0017 [104]: d6bc9ab2fc3dedd4 -Block 0017 [105]: 0a69e038dad8ed99 -Block 0017 [106]: cb6f1e8b33aa7bbf -Block 0017 [107]: 8304861a110a863f -Block 0017 [108]: c64db5cffd1dddc9 -Block 0017 [109]: 21ab4b7d16d24343 -Block 0017 [110]: c70d7531ff41687b -Block 0017 [111]: d9fbf424520de3ab -Block 0017 [112]: 62dbc0c63614a2ca -Block 0017 [113]: fb5ddca5cc9b5ef5 -Block 0017 [114]: 102fb169979dff96 -Block 0017 [115]: 89bb3c6d5273def2 -Block 0017 [116]: 4e8ad330ed9ba987 -Block 0017 [117]: 91f9120badad4fe8 -Block 0017 [118]: 2cba6deb67a93e33 -Block 0017 [119]: 82eb9efbfc3f069c -Block 0017 [120]: 92751db67186e7b8 -Block 0017 [121]: 452989bad621fbd0 -Block 0017 [122]: b55a1956286888a8 -Block 0017 [123]: 9b60dc755f5cc9f3 -Block 0017 [124]: 752866cc50addf99 -Block 0017 [125]: f80c6f88dbaf5618 -Block 0017 [126]: 2dacf26165da310a -Block 0017 [127]: 5a5c1346648cb98f -Block 0018 [ 0]: c041b5404fc14796 -Block 0018 [ 1]: 42c1d1d2d2412a2c -Block 0018 [ 2]: 322612b96dbe404c -Block 0018 [ 3]: 357a1fb8cc729650 -Block 0018 [ 4]: 7a527a5309468dd2 -Block 0018 [ 5]: fb2cb6f6e10e59b3 -Block 0018 [ 6]: 34c83bfa6b96fe14 -Block 0018 [ 7]: 32e5eee98371df6a -Block 0018 [ 8]: 814e7423992dab73 -Block 0018 [ 9]: 4bb91cf61fbf942a -Block 0018 [ 10]: f87274d2287559b3 -Block 0018 [ 11]: fed41160f5deb3ac -Block 0018 [ 12]: 3fe00e7ccb816d8a -Block 0018 [ 13]: e98cff2234abbb10 -Block 0018 [ 14]: 92e7a0367f92a4d3 -Block 0018 [ 15]: d5b51b4d450add95 -Block 0018 [ 16]: dc28b4287e3f9ed7 -Block 0018 [ 17]: da0cb8b59bc77666 -Block 0018 [ 18]: 5a888148a7c23edc -Block 0018 [ 19]: 22630c8872df9a76 -Block 0018 [ 20]: d05adf7c8efc2f5d -Block 0018 [ 21]: 43be90f2e7d8bcf2 -Block 0018 [ 22]: eac412fc14be4be7 -Block 0018 [ 23]: e1e771059e409d40 -Block 0018 [ 24]: e135eb81cecf1833 -Block 0018 [ 25]: 0c01619993e2f658 -Block 0018 [ 26]: c8cd4eb79c5cd6fa -Block 0018 [ 27]: 9b7ffab4b459cfb6 -Block 0018 [ 28]: bb354089eba04584 -Block 0018 [ 29]: 6b3b2a819b790a99 -Block 0018 [ 30]: ea717cdc28bd1e23 -Block 0018 [ 31]: 3736624be21dadff -Block 0018 [ 32]: ac6b859c93b2e762 -Block 0018 [ 33]: 1cb8d4442942a949 -Block 0018 [ 34]: 7fb052284494bded -Block 0018 [ 35]: 6f952e9ec4bd5d81 -Block 0018 [ 36]: 043d4040a33ed417 -Block 0018 [ 37]: 278620a20136dc5e -Block 0018 [ 38]: 4b71f1f93451bf05 -Block 0018 [ 39]: 4939662290575aaf -Block 0018 [ 40]: 313e1346d49191a6 -Block 0018 [ 41]: 6d39db233f342f32 -Block 0018 [ 42]: d2ae94655f710ce3 -Block 0018 [ 43]: c9c047392f281a66 -Block 0018 [ 44]: 80dd26a85e5e796f -Block 0018 [ 45]: f186dd414ce01efb -Block 0018 [ 46]: 051f172d5797a286 -Block 0018 [ 47]: 835513a6ab42e638 -Block 0018 [ 48]: 3226271414bf91ae -Block 0018 [ 49]: 04cb3ebae9b28551 -Block 0018 [ 50]: 83ed429d7eb9b927 -Block 0018 [ 51]: 7095a647334175a9 -Block 0018 [ 52]: 33db074e9991615d -Block 0018 [ 53]: 46d842a09fe53c20 -Block 0018 [ 54]: 557606fc5495a082 -Block 0018 [ 55]: a3ad8552fe15a034 -Block 0018 [ 56]: 078a9456a97efccf -Block 0018 [ 57]: d18f62b6e538775a -Block 0018 [ 58]: f81e4b8ec17d28d4 -Block 0018 [ 59]: 5928661efcc1b8bd -Block 0018 [ 60]: fcf4eac3d546e540 -Block 0018 [ 61]: ddb969004b39ba74 -Block 0018 [ 62]: 20e448cd8be12f7a -Block 0018 [ 63]: a61b19150fafec9d -Block 0018 [ 64]: 748bdc3cf48998a6 -Block 0018 [ 65]: ab65d8df971cbe5a -Block 0018 [ 66]: 8c6f9434a9586b89 -Block 0018 [ 67]: 895ca0446a2c28fa -Block 0018 [ 68]: 904d7791774e17fc -Block 0018 [ 69]: 223b37a2589eb79d -Block 0018 [ 70]: 16fa6b43545df34c -Block 0018 [ 71]: 05053dfbf5963e0c -Block 0018 [ 72]: bf4e015f2b2a8543 -Block 0018 [ 73]: bf18babcf76250c0 -Block 0018 [ 74]: a3b1fdfea3b799c3 -Block 0018 [ 75]: 7b66b5e810bb8ed0 -Block 0018 [ 76]: c31a6e1403261884 -Block 0018 [ 77]: fcc69d0a7dc39120 -Block 0018 [ 78]: fa1226c66d84c99b -Block 0018 [ 79]: 4fc6666d38efd0d2 -Block 0018 [ 80]: 180af3a735556b6c -Block 0018 [ 81]: 257757c7b0d7bd60 -Block 0018 [ 82]: b8cf53a7741f7206 -Block 0018 [ 83]: 36445f0e4fa2ff4f -Block 0018 [ 84]: 84e818bcf7f9c0e7 -Block 0018 [ 85]: aef043adae1fea8a -Block 0018 [ 86]: 1a4b58be1665f6c8 -Block 0018 [ 87]: f05dc6e91bc674b7 -Block 0018 [ 88]: fb774360bac8a6be -Block 0018 [ 89]: b391bc826f20faee -Block 0018 [ 90]: d27202a49375b6a0 -Block 0018 [ 91]: 7f4d317308ed1f24 -Block 0018 [ 92]: 85b0e894700e8c53 -Block 0018 [ 93]: 2dc02256d2e6e25a -Block 0018 [ 94]: f59439776d6f90b3 -Block 0018 [ 95]: 743cb12747d017ae -Block 0018 [ 96]: 3dba91a205dcc769 -Block 0018 [ 97]: 51a7dc73cfe29b8a -Block 0018 [ 98]: 43c46e0312db15f2 -Block 0018 [ 99]: 6405b2d2fe5e79a5 -Block 0018 [100]: 9637fdc2d5644c31 -Block 0018 [101]: ea1f9a3fa19447b3 -Block 0018 [102]: 8844881da9341a88 -Block 0018 [103]: a468100efa203be3 -Block 0018 [104]: 628df4042f4e5768 -Block 0018 [105]: d47d10937d3a46d9 -Block 0018 [106]: 9df989b91d7709e2 -Block 0018 [107]: 017ebdf71eda7aaa -Block 0018 [108]: bd75089946ac2eef -Block 0018 [109]: 978c9a569c3de744 -Block 0018 [110]: bf43f9640ece86d2 -Block 0018 [111]: e6bd892f7b28d4e6 -Block 0018 [112]: 2ff9516b1e19d1c3 -Block 0018 [113]: f0dc1c592e7010b9 -Block 0018 [114]: eb4cce9940eccf06 -Block 0018 [115]: da4d653f57eec00f -Block 0018 [116]: e51ab8d3c4be9827 -Block 0018 [117]: 82a6fc187105d291 -Block 0018 [118]: 5c2917ce70d42dc6 -Block 0018 [119]: 2d13186607f06354 -Block 0018 [120]: 08255748d3544673 -Block 0018 [121]: 38864c085f79994e -Block 0018 [122]: ddb698307723325f -Block 0018 [123]: bfec853f7eba283d -Block 0018 [124]: 29dbde8f56583edb -Block 0018 [125]: 89c8a74d98ca5d87 -Block 0018 [126]: 2568841313d637b8 -Block 0018 [127]: c7c147e011020538 -Block 0019 [ 0]: 5975d074fb2b80ca -Block 0019 [ 1]: d3a0fd982f4ffb97 -Block 0019 [ 2]: f2669a67972dfa35 -Block 0019 [ 3]: 1f574aaa1262c366 -Block 0019 [ 4]: 9c1e3ed5ba77c25e -Block 0019 [ 5]: 88783fba68f8148a -Block 0019 [ 6]: e87d826ed27f9403 -Block 0019 [ 7]: 14ecc52ba1db2fe0 -Block 0019 [ 8]: aae61478ed5259ba -Block 0019 [ 9]: 4b1414084db18e5f -Block 0019 [ 10]: c35f1e0ea6765b4c -Block 0019 [ 11]: 7c17e2cd01b7faef -Block 0019 [ 12]: 31888561748cb1bf -Block 0019 [ 13]: 9c8eef4bb77e3b31 -Block 0019 [ 14]: 65615a5be74205b7 -Block 0019 [ 15]: 834fa75572cc0c16 -Block 0019 [ 16]: ced5b8d8a542ca3e -Block 0019 [ 17]: 63fc5c364db120fe -Block 0019 [ 18]: 03385d133a6b3b8d -Block 0019 [ 19]: 6e9483e026d4c324 -Block 0019 [ 20]: 01c63c1034072162 -Block 0019 [ 21]: 4106addfa2a6c4a4 -Block 0019 [ 22]: 545bb4774f5af6fb -Block 0019 [ 23]: f304cc3ff0149f20 -Block 0019 [ 24]: c432491aeea87c6f -Block 0019 [ 25]: 67b894d2251fcd87 -Block 0019 [ 26]: a8f491ffe7629435 -Block 0019 [ 27]: 0529f1dc08202fe3 -Block 0019 [ 28]: dce32768c571875d -Block 0019 [ 29]: 0ee9629f09082ef6 -Block 0019 [ 30]: cad6d8d9b39f6a0f -Block 0019 [ 31]: b3a689484a015bc0 -Block 0019 [ 32]: 9d8877a13d1c3826 -Block 0019 [ 33]: 238759c6a375b2e4 -Block 0019 [ 34]: 1a0840206d678414 -Block 0019 [ 35]: 5f4f523e2f9bc1db -Block 0019 [ 36]: 86bac81c9f087660 -Block 0019 [ 37]: 2b1fc228b7ce1eae -Block 0019 [ 38]: 272373ba633e502a -Block 0019 [ 39]: 07d1da188de3bd27 -Block 0019 [ 40]: 60f1d7a0cf09bd7d -Block 0019 [ 41]: e8338703ba406ffa -Block 0019 [ 42]: a3126dac248af0ba -Block 0019 [ 43]: b66d1411baeee667 -Block 0019 [ 44]: 7e428cba8e92009a -Block 0019 [ 45]: f433fe4cc97cb0a1 -Block 0019 [ 46]: 6d54be08d676e02f -Block 0019 [ 47]: 5520bcd293855640 -Block 0019 [ 48]: 3f559b48823c0871 -Block 0019 [ 49]: 9c3709178d3c2c73 -Block 0019 [ 50]: dc5d227ca8b0a06c -Block 0019 [ 51]: bd6752dd42d9d747 -Block 0019 [ 52]: 2855f70a04ff378e -Block 0019 [ 53]: 33fdd9e42f309bb6 -Block 0019 [ 54]: bbd3ece6fd7e22d3 -Block 0019 [ 55]: 55dc22237d39f2f0 -Block 0019 [ 56]: 86c379043652eebc -Block 0019 [ 57]: c170577fe3e3559b -Block 0019 [ 58]: 11787c617d9b2ff8 -Block 0019 [ 59]: eb7101cfebc209fb -Block 0019 [ 60]: 802bba4c3656ef15 -Block 0019 [ 61]: 583c2ae983b05494 -Block 0019 [ 62]: a03b6463c9aaa2eb -Block 0019 [ 63]: bde4ae47733fa2e2 -Block 0019 [ 64]: 23ada257cf4c6c7a -Block 0019 [ 65]: ada4e1f5e4344a35 -Block 0019 [ 66]: cc978a0231cfbffe -Block 0019 [ 67]: a371c42dc049887c -Block 0019 [ 68]: 345f8bda6f0df672 -Block 0019 [ 69]: 8650d26948762f48 -Block 0019 [ 70]: f43c2d95e07b072a -Block 0019 [ 71]: 67f61ef3ebbc0f96 -Block 0019 [ 72]: 10e739223f7d96e5 -Block 0019 [ 73]: fd6c29b7a80413a9 -Block 0019 [ 74]: 4e1c3d1da37018bc -Block 0019 [ 75]: b02c4fbb8af4294f -Block 0019 [ 76]: 8b40c90a7c84e1ce -Block 0019 [ 77]: 0f985348b6d734b1 -Block 0019 [ 78]: 7dd931cc8b11632a -Block 0019 [ 79]: 814fe25909879a87 -Block 0019 [ 80]: 76d914493b833e24 -Block 0019 [ 81]: 5b5be017ff49892c -Block 0019 [ 82]: 5d83b46073cfd823 -Block 0019 [ 83]: 290b8fdb7f7fb122 -Block 0019 [ 84]: 0efc2d0bbc0d35ac -Block 0019 [ 85]: fec9e053d1874abc -Block 0019 [ 86]: 6724fad53bb13885 -Block 0019 [ 87]: 5940e1a1676bee41 -Block 0019 [ 88]: ed7f9730e4aa9718 -Block 0019 [ 89]: 0cba50e516fe5321 -Block 0019 [ 90]: 417b1c44ebc37352 -Block 0019 [ 91]: c072e1ef6fdbbbc0 -Block 0019 [ 92]: f59b0ea794221c51 -Block 0019 [ 93]: 8a80635f831b642c -Block 0019 [ 94]: 816090e93f345f93 -Block 0019 [ 95]: 8a60e2d12967aeaa -Block 0019 [ 96]: 6707818a46cde2cc -Block 0019 [ 97]: 75daf2d9dd0846d9 -Block 0019 [ 98]: 506b1cf7d9d6b08e -Block 0019 [ 99]: 65903cee3e8a7f3b -Block 0019 [100]: be2174352527d8ce -Block 0019 [101]: 12e0d0792954a886 -Block 0019 [102]: 7eab60f6de1ce0d9 -Block 0019 [103]: 360ea3fd133fd307 -Block 0019 [104]: 5f7435144945666d -Block 0019 [105]: 243ea63a94f2ad1f -Block 0019 [106]: 2d8e733176d41102 -Block 0019 [107]: 746146ad34837e87 -Block 0019 [108]: 90354e38c8503718 -Block 0019 [109]: 1cd40344cbe92283 -Block 0019 [110]: c668973adf6ca79c -Block 0019 [111]: a7e8b08f16ee0da1 -Block 0019 [112]: 4b0a6b18f0a124b1 -Block 0019 [113]: c587e43c8155c830 -Block 0019 [114]: 58cb61030ee0e295 -Block 0019 [115]: a288723f509a656d -Block 0019 [116]: a234563f4e938bc7 -Block 0019 [117]: 78eae87758c6490c -Block 0019 [118]: 3f725bf6465c17bd -Block 0019 [119]: d906e8489e8bd295 -Block 0019 [120]: 589e8eb2682879ab -Block 0019 [121]: d64af1ef2a74f6b6 -Block 0019 [122]: 8144c43fde1ad585 -Block 0019 [123]: 296883ffd42aaf46 -Block 0019 [124]: a3d1b0b82df571d0 -Block 0019 [125]: b8912fe47cc36af9 -Block 0019 [126]: 785f891f4fcbe2c5 -Block 0019 [127]: dface78ba2552ce9 -Block 0020 [ 0]: bf06b2703ca2687f -Block 0020 [ 1]: 66eeeb3ddf34f8a1 -Block 0020 [ 2]: b95f9f996c1c5488 -Block 0020 [ 3]: 242a8bbb2cba35b1 -Block 0020 [ 4]: d742af34a7687518 -Block 0020 [ 5]: fd49b478c7c35b1e -Block 0020 [ 6]: a9aa82aef77d374c -Block 0020 [ 7]: 931f287f229addfb -Block 0020 [ 8]: aea5556a92b17106 -Block 0020 [ 9]: 3421eb9c547646df -Block 0020 [ 10]: 84902b6557754253 -Block 0020 [ 11]: 0dddc14b4aa9dc2c -Block 0020 [ 12]: 400f9e0e79df61d4 -Block 0020 [ 13]: 17aa6a5b0509dc43 -Block 0020 [ 14]: 4f5c4056326d4a69 -Block 0020 [ 15]: 462ac87fda95d3f4 -Block 0020 [ 16]: 9dc248b452234994 -Block 0020 [ 17]: 9f55bef8c449b3fe -Block 0020 [ 18]: dcb9018c911c9823 -Block 0020 [ 19]: 8b0666361853eb86 -Block 0020 [ 20]: f75bfee1a466f38a -Block 0020 [ 21]: eef004f6622ba3a4 -Block 0020 [ 22]: 5e7542da527fbfc7 -Block 0020 [ 23]: cad27d215519e198 -Block 0020 [ 24]: 543a711a2012c0df -Block 0020 [ 25]: 782439a5cf4c6357 -Block 0020 [ 26]: 626f8cb2f646e336 -Block 0020 [ 27]: 27d63ff2d2f5a069 -Block 0020 [ 28]: 7a8adda616f7f464 -Block 0020 [ 29]: 01481647db7b5bfb -Block 0020 [ 30]: 133f07aa86c8d5fb -Block 0020 [ 31]: fdb9090a47295857 -Block 0020 [ 32]: 2b8af4c3a603a10e -Block 0020 [ 33]: 6893ba15ef708e00 -Block 0020 [ 34]: ae6e506b7231044a -Block 0020 [ 35]: 80a831e434a83282 -Block 0020 [ 36]: e6f31bf7f5ac1013 -Block 0020 [ 37]: 59cb7125f004794d -Block 0020 [ 38]: 909d3baf9e4f87a4 -Block 0020 [ 39]: 424af5e6e79d06b1 -Block 0020 [ 40]: 3fae61df4c245611 -Block 0020 [ 41]: 47910940370dfa1c -Block 0020 [ 42]: 255d8003b2be5289 -Block 0020 [ 43]: af9ef269872b42fe -Block 0020 [ 44]: 6148bb955ee73cfd -Block 0020 [ 45]: 9153a8710241bfa8 -Block 0020 [ 46]: 7f990736fa01991f -Block 0020 [ 47]: b0fd4eef9c02115d -Block 0020 [ 48]: 9dd6f482f4191acf -Block 0020 [ 49]: ca024fbf3db9a740 -Block 0020 [ 50]: df82edd640dc69b1 -Block 0020 [ 51]: 1654b5ae829fbd58 -Block 0020 [ 52]: 761c1b1b18247948 -Block 0020 [ 53]: faca1c68baf59e32 -Block 0020 [ 54]: cc38df5e5e7aa81f -Block 0020 [ 55]: 49f3d3f152d1dc0f -Block 0020 [ 56]: f89018f9c5129515 -Block 0020 [ 57]: dac5b6c8ae9f50ed -Block 0020 [ 58]: 8ba01f9fbe900280 -Block 0020 [ 59]: 10611166a326e7e6 -Block 0020 [ 60]: de55eadd96b3f4df -Block 0020 [ 61]: 42aab6fff6e521cf -Block 0020 [ 62]: 47ec7168714eaece -Block 0020 [ 63]: 904dd019a3ab244a -Block 0020 [ 64]: 7f2df0d8c84f6e34 -Block 0020 [ 65]: 1fb128a8df1f68fd -Block 0020 [ 66]: f36c3853507c46c2 -Block 0020 [ 67]: 4df02816df208152 -Block 0020 [ 68]: a6048fc325ec6135 -Block 0020 [ 69]: 01e3809304a909cc -Block 0020 [ 70]: 5f1aa6c03fe7ffa0 -Block 0020 [ 71]: a71d6fadb3403338 -Block 0020 [ 72]: b05b24740b5059bb -Block 0020 [ 73]: 1e5be332cab4cc96 -Block 0020 [ 74]: eabd4670953d4bcf -Block 0020 [ 75]: 75bb0e890c309e8c -Block 0020 [ 76]: 4ba5f3410211ad2a -Block 0020 [ 77]: 74cf2a9624d12fd4 -Block 0020 [ 78]: 6aea587ee952596d -Block 0020 [ 79]: f6ac7426e0240886 -Block 0020 [ 80]: 1ab879b3a53065db -Block 0020 [ 81]: 4a5beac193536b01 -Block 0020 [ 82]: 5193a8fd2c3c74db -Block 0020 [ 83]: 77616a4f76538cf6 -Block 0020 [ 84]: 495cd739bf10f5c8 -Block 0020 [ 85]: b68f2b22d119f196 -Block 0020 [ 86]: 42cdda3bb05cae1a -Block 0020 [ 87]: bea6a38d6aa87f25 -Block 0020 [ 88]: 76664223b0a34ea7 -Block 0020 [ 89]: 86c583aa440330f4 -Block 0020 [ 90]: 088a72d7ec72de94 -Block 0020 [ 91]: 88460c4824f41ca6 -Block 0020 [ 92]: 633bcdeecbb960ac -Block 0020 [ 93]: 5e75c4663e3d852e -Block 0020 [ 94]: 1ccf9cbc5da47576 -Block 0020 [ 95]: 046dc004ef4923bf -Block 0020 [ 96]: 88eefd45eb5e9eaa -Block 0020 [ 97]: 0e955efe5f8797c1 -Block 0020 [ 98]: 91d9762a0fed8ebb -Block 0020 [ 99]: 52d8ebcdbacb5df7 -Block 0020 [100]: 574cd3e9238e2764 -Block 0020 [101]: a980d494a5100569 -Block 0020 [102]: 86832502488c9aa7 -Block 0020 [103]: 1fc9bdb470956f1f -Block 0020 [104]: 39f8bf49af2c10c1 -Block 0020 [105]: 037f1959a20a2823 -Block 0020 [106]: c9fa2b01347358db -Block 0020 [107]: 2494b5368202ff78 -Block 0020 [108]: 7a61a9b0ee5dc1be -Block 0020 [109]: 8da10663648d024a -Block 0020 [110]: 5ac14216531e239e -Block 0020 [111]: 91c917ab42a14684 -Block 0020 [112]: 80aa0cdb9b0cb881 -Block 0020 [113]: 80353569cd511cb0 -Block 0020 [114]: 334c54fca282870c -Block 0020 [115]: d2fb2e2aa01c2da1 -Block 0020 [116]: 06baca7139225edd -Block 0020 [117]: 4d23ee2ef7aa6c5a -Block 0020 [118]: 85e3b2db336611d3 -Block 0020 [119]: 54e049b532f97e15 -Block 0020 [120]: 9ba8ca6975ee7697 -Block 0020 [121]: dbb4a07ee8e1e1ec -Block 0020 [122]: 08a88026b23a1a8f -Block 0020 [123]: 904a6fb70888cc8e -Block 0020 [124]: 8015003a37c1d2c8 -Block 0020 [125]: 4a0bece1dc802e8a -Block 0020 [126]: e83b5bc5b63254dd -Block 0020 [127]: 315b078379732a55 -Block 0021 [ 0]: d98dacb952d24420 -Block 0021 [ 1]: 6ecefcfe9d2fce83 -Block 0021 [ 2]: 382b10cdcd4992f2 -Block 0021 [ 3]: 7c448939c4bf754d -Block 0021 [ 4]: e952610c3a3def5b -Block 0021 [ 5]: b8530f5459295399 -Block 0021 [ 6]: bbe9e115b1e37624 -Block 0021 [ 7]: 3619cf1d35d29654 -Block 0021 [ 8]: 1623a3887360cc74 -Block 0021 [ 9]: 8d33879e4b8217fd -Block 0021 [ 10]: 6c63b8e106d93d20 -Block 0021 [ 11]: 33a3a79e9cf2a354 -Block 0021 [ 12]: a24c5ba0e3072c87 -Block 0021 [ 13]: dbc11e2218cf95b3 -Block 0021 [ 14]: 1ba86314b90b1788 -Block 0021 [ 15]: 17b0904e5bf6f224 -Block 0021 [ 16]: 1451021dffe4fc93 -Block 0021 [ 17]: fa60d71c5556f9be -Block 0021 [ 18]: a4d8a51e384ab69b -Block 0021 [ 19]: 67d12fd94a2be9f5 -Block 0021 [ 20]: f14bb5b5aac93bc9 -Block 0021 [ 21]: 9378796ef3ba102b -Block 0021 [ 22]: 5e6f488326121b6b -Block 0021 [ 23]: 592621c434b0ce6d -Block 0021 [ 24]: c7424cfff8b3b826 -Block 0021 [ 25]: 04b0b25e87bd42f2 -Block 0021 [ 26]: 69339b43e358f015 -Block 0021 [ 27]: 9c1a659e532ff7c5 -Block 0021 [ 28]: a1d5bd93788dbcac -Block 0021 [ 29]: 9366ff377573f23d -Block 0021 [ 30]: 86d8b9e63bc75e4f -Block 0021 [ 31]: e4a67711b9f4fa29 -Block 0021 [ 32]: 0dad38ae8f5a1e04 -Block 0021 [ 33]: 4fae94319789ee3e -Block 0021 [ 34]: 3cdbdb5dfe5b731b -Block 0021 [ 35]: 4e0ce9a6413c3bcd -Block 0021 [ 36]: 93640d28a17deca2 -Block 0021 [ 37]: 07ed1daa7f314e39 -Block 0021 [ 38]: dde6874f6cb113ab -Block 0021 [ 39]: 84d5e35f62380ed3 -Block 0021 [ 40]: cb9e1fccad5a49a8 -Block 0021 [ 41]: ac4d4db97342a253 -Block 0021 [ 42]: f8116ff018848c4b -Block 0021 [ 43]: a05377f405673668 -Block 0021 [ 44]: 7472fa1ac1fa40dd -Block 0021 [ 45]: 66139b5e4c70780e -Block 0021 [ 46]: 88c21339074cf6c1 -Block 0021 [ 47]: a5148f1e4e76661b -Block 0021 [ 48]: 170a478179733825 -Block 0021 [ 49]: eb143bdecf5dd3ec -Block 0021 [ 50]: d2823463723e066d -Block 0021 [ 51]: b3940bbd94f8bd9c -Block 0021 [ 52]: dc5aacae8113ea16 -Block 0021 [ 53]: 1cfccf1746c31e74 -Block 0021 [ 54]: c0ef593db7d6031a -Block 0021 [ 55]: 332ea71b13a66d46 -Block 0021 [ 56]: 4a64bf8f0edd195b -Block 0021 [ 57]: 865db29b08296b25 -Block 0021 [ 58]: 4910a3014fe2f270 -Block 0021 [ 59]: a358cfd6afbe1a7b -Block 0021 [ 60]: 6986b50badaf443b -Block 0021 [ 61]: 598890f56972ca95 -Block 0021 [ 62]: ec44d5f01c361a8c -Block 0021 [ 63]: f79b2cafc96cd35a -Block 0021 [ 64]: 641067f7e4d0fc30 -Block 0021 [ 65]: b8edd873352f01ef -Block 0021 [ 66]: d1ff92e53c93a46d -Block 0021 [ 67]: 74ede5ca7e19622c -Block 0021 [ 68]: 9efa50c40af182d4 -Block 0021 [ 69]: 1dc41311428d8ed6 -Block 0021 [ 70]: d711fe07a8727a56 -Block 0021 [ 71]: c4d212ff76c97984 -Block 0021 [ 72]: 9d073689ca2ad4fc -Block 0021 [ 73]: 178aa8d197172ee7 -Block 0021 [ 74]: 46a0c28765bb4043 -Block 0021 [ 75]: afa90f2b421dbf1c -Block 0021 [ 76]: 8e7bee6842b6af3a -Block 0021 [ 77]: 79d2f5438af8bcb6 -Block 0021 [ 78]: ea00efd5db7c57de -Block 0021 [ 79]: f0974aa1ec354092 -Block 0021 [ 80]: 6c74b588913d4b1e -Block 0021 [ 81]: e8c90d16b01d747f -Block 0021 [ 82]: 7ef33f5658372999 -Block 0021 [ 83]: 4e0397c1dd16e9a7 -Block 0021 [ 84]: 289e3c980bc5c267 -Block 0021 [ 85]: fdc35d92fb2b138d -Block 0021 [ 86]: 4f60dbb4715f4377 -Block 0021 [ 87]: 038ea7ce4501b429 -Block 0021 [ 88]: f5d6971a39619b5c -Block 0021 [ 89]: 1ee68cb6ad1ad2bf -Block 0021 [ 90]: e7b678892a7ab0d3 -Block 0021 [ 91]: 5296b50abd13f8d8 -Block 0021 [ 92]: 0a0c11eb32bad5d1 -Block 0021 [ 93]: 62a04ab31aca9b85 -Block 0021 [ 94]: 8ee3c8aaafc1c37a -Block 0021 [ 95]: a679930ef4e84767 -Block 0021 [ 96]: b04cffad7dd306f4 -Block 0021 [ 97]: 615bf6a1ce835476 -Block 0021 [ 98]: fded9b06857aaeef -Block 0021 [ 99]: fdbf46d28acab387 -Block 0021 [100]: 58fcf9286a597f27 -Block 0021 [101]: 365e45615e1c06a1 -Block 0021 [102]: d5b5b8783a8f6e94 -Block 0021 [103]: 4f6704326849f6ee -Block 0021 [104]: 4786fb349eeb83d3 -Block 0021 [105]: 6e23749d929458d7 -Block 0021 [106]: 762b35de343c8888 -Block 0021 [107]: 45c0bbe5e881eebb -Block 0021 [108]: 5524af970d7747c2 -Block 0021 [109]: 7642e839a38308ed -Block 0021 [110]: 83116756fae0756d -Block 0021 [111]: dc1310d82834160f -Block 0021 [112]: db164a0b29b09861 -Block 0021 [113]: 297e4577cf659941 -Block 0021 [114]: e7fc84e90aac30ca -Block 0021 [115]: b36c4bea07e566d4 -Block 0021 [116]: 2ab7769287c75732 -Block 0021 [117]: fd931d4cb3c65f6f -Block 0021 [118]: f678f8e63ec79f54 -Block 0021 [119]: db7985eca3d474e9 -Block 0021 [120]: e6f59690114a1d52 -Block 0021 [121]: e3307b0f6212383b -Block 0021 [122]: 0c128521465d65ea -Block 0021 [123]: b798c51553ecfa41 -Block 0021 [124]: 20377296fa088c82 -Block 0021 [125]: bb3e7fe72954d469 -Block 0021 [126]: 0bdd6756a03fc48b -Block 0021 [127]: a59afa783ff40b08 -Block 0022 [ 0]: 894fb10684f63911 -Block 0022 [ 1]: c79e516e27e0eae1 -Block 0022 [ 2]: e4eb70963475aa54 -Block 0022 [ 3]: fa82a9bd92c66730 -Block 0022 [ 4]: 6bac0da0c39340c9 -Block 0022 [ 5]: 8ec6d78db179db48 -Block 0022 [ 6]: feb6da1a2c768038 -Block 0022 [ 7]: 8d8330d86ab0b201 -Block 0022 [ 8]: 782a6b1b6582aa80 -Block 0022 [ 9]: f18bd0c0ac40731f -Block 0022 [ 10]: 876077f975a2610e -Block 0022 [ 11]: ab514d1c8bd52949 -Block 0022 [ 12]: 758a978e57a5cb53 -Block 0022 [ 13]: a3f99b1346fbc817 -Block 0022 [ 14]: b98c66ba86dad2da -Block 0022 [ 15]: 891da0ae5d3c8167 -Block 0022 [ 16]: d5665fcafefc49af -Block 0022 [ 17]: b896b1d29e0478ab -Block 0022 [ 18]: a66a6c204d5e1dac -Block 0022 [ 19]: 991fcd02bdb902a8 -Block 0022 [ 20]: 4a10d59071361da9 -Block 0022 [ 21]: 38ee47da00b3896f -Block 0022 [ 22]: 1b1a81ae9ff8c085 -Block 0022 [ 23]: cb5f18bc3495bfa7 -Block 0022 [ 24]: ab16c36264a70127 -Block 0022 [ 25]: 2c00e90e8650f9a7 -Block 0022 [ 26]: b865eb3c34a4898c -Block 0022 [ 27]: 686164804f2386fd -Block 0022 [ 28]: cdf4f95feaa6880e -Block 0022 [ 29]: de938318bce749ab -Block 0022 [ 30]: 6a8884ad54f8e0c0 -Block 0022 [ 31]: ba17a2eed4edb6a3 -Block 0022 [ 32]: 03565e3f24fc6c53 -Block 0022 [ 33]: a72d60702118177d -Block 0022 [ 34]: 53cc8a0dd84a79ee -Block 0022 [ 35]: d8bc2ff2f8e1e245 -Block 0022 [ 36]: 4664e02b6091aaf7 -Block 0022 [ 37]: 8ce8fbfb6b2c659f -Block 0022 [ 38]: 1d3ff48f828c076e -Block 0022 [ 39]: 2a154a5733380c66 -Block 0022 [ 40]: 97935f5fcf051a92 -Block 0022 [ 41]: 30a082488b0cc18f -Block 0022 [ 42]: b8cec1865510da77 -Block 0022 [ 43]: f69f733d02225eb8 -Block 0022 [ 44]: 5e977e5a7fb48dc9 -Block 0022 [ 45]: c9ac7bbbde9594fe -Block 0022 [ 46]: 38726e01c66a8330 -Block 0022 [ 47]: d0cad8f24e4bf70d -Block 0022 [ 48]: b92f4fb7765df3c3 -Block 0022 [ 49]: 599e65781b30edae -Block 0022 [ 50]: 30371e95d33a8566 -Block 0022 [ 51]: ef8cdbb7b77acf52 -Block 0022 [ 52]: 7e62aa6c33002015 -Block 0022 [ 53]: b79f8344f4aca7d2 -Block 0022 [ 54]: c306c71173828957 -Block 0022 [ 55]: 04ec0a2cea3ca2be -Block 0022 [ 56]: 669ed752935e38de -Block 0022 [ 57]: e41e57dad7e38479 -Block 0022 [ 58]: f68f6869312acf69 -Block 0022 [ 59]: d2e9eef906a6e5da -Block 0022 [ 60]: 3dc8f02bf675a71c -Block 0022 [ 61]: fe05d48e00d632d7 -Block 0022 [ 62]: 7f2dee8ee9900bbe -Block 0022 [ 63]: 7d499069dfe3f84a -Block 0022 [ 64]: efc16839f74bd528 -Block 0022 [ 65]: 85a573fa646a7922 -Block 0022 [ 66]: 739f50e997638d43 -Block 0022 [ 67]: 02d0f0e636f1ead4 -Block 0022 [ 68]: fb0925efa1e52cd4 -Block 0022 [ 69]: c46b1cf1f1a59a8d -Block 0022 [ 70]: 1ffb7a7a2402392b -Block 0022 [ 71]: 95694bedb94e49a4 -Block 0022 [ 72]: bf6b98b553e545c9 -Block 0022 [ 73]: 024b23922c08cbf6 -Block 0022 [ 74]: e942a9619f377d06 -Block 0022 [ 75]: 845346bd3d6ed087 -Block 0022 [ 76]: 811557cc8ed4cdf5 -Block 0022 [ 77]: 2596c4bef0b39380 -Block 0022 [ 78]: 00b3ec347bc265b8 -Block 0022 [ 79]: 3e3f1e7f786c1514 -Block 0022 [ 80]: 40c8998c013651cd -Block 0022 [ 81]: 424ada87053d72ca -Block 0022 [ 82]: 135f12196de93fd1 -Block 0022 [ 83]: 85d71d71a38da084 -Block 0022 [ 84]: b2c2e83ce6bf68be -Block 0022 [ 85]: c00799ccb83f163b -Block 0022 [ 86]: 23d14becef3b11d3 -Block 0022 [ 87]: 436c07c01f94bcd7 -Block 0022 [ 88]: 182e68a627907240 -Block 0022 [ 89]: 3049fbea32141bbb -Block 0022 [ 90]: 6ad0528debcec2bc -Block 0022 [ 91]: 8b49f103c0010c3c -Block 0022 [ 92]: 2ad22e691ed79870 -Block 0022 [ 93]: fca9c54f859e2927 -Block 0022 [ 94]: 11e276466ab8bcfa -Block 0022 [ 95]: 001174f7b1c4f6a5 -Block 0022 [ 96]: e237f3a569ede1c8 -Block 0022 [ 97]: 2199033ff0c87b70 -Block 0022 [ 98]: 46ca834e676152d3 -Block 0022 [ 99]: b90b08ea4b9b1272 -Block 0022 [100]: ddba70ef01abc23b -Block 0022 [101]: 8a7f67c932bfa0c2 -Block 0022 [102]: 6c8e92f6a8b41c30 -Block 0022 [103]: d8de541588bd27cb -Block 0022 [104]: bd72f5b7c21c327f -Block 0022 [105]: 9bbca4fe9883b002 -Block 0022 [106]: 1e17e97459704a3d -Block 0022 [107]: 1b5e1bb4d628e734 -Block 0022 [108]: 4164a672d7f37337 -Block 0022 [109]: 79202876a4e1d434 -Block 0022 [110]: 83a60d1ae8b4d69d -Block 0022 [111]: be992378e10ae871 -Block 0022 [112]: 8ef05f200cc7a9b8 -Block 0022 [113]: 8e3b8ecbd99494f3 -Block 0022 [114]: 8be8f5e9977fb07b -Block 0022 [115]: 6562a43f5eee838a -Block 0022 [116]: 278de9718e90574d -Block 0022 [117]: 09976190662a1bc6 -Block 0022 [118]: f8bc98e4c7f01f71 -Block 0022 [119]: 1f5b6162280592b1 -Block 0022 [120]: 93c35337d2f78dd8 -Block 0022 [121]: fba0e65ae8ad86a8 -Block 0022 [122]: bb080e690d538029 -Block 0022 [123]: cd914b9a50bc983c -Block 0022 [124]: b86bb82fbb02716f -Block 0022 [125]: 69debb138546a813 -Block 0022 [126]: 5573bba3fa50b093 -Block 0022 [127]: e0486d1e7e4ba4d2 -Block 0023 [ 0]: 4c2e8bfde4858256 -Block 0023 [ 1]: 0e27b8df1a7bfd63 -Block 0023 [ 2]: 0ca3b35943cf7423 -Block 0023 [ 3]: b409995a80af9766 -Block 0023 [ 4]: 27cfac08e2e49ad8 -Block 0023 [ 5]: 8a6e4f3e271e25a0 -Block 0023 [ 6]: c71594856a479dac -Block 0023 [ 7]: 506f4270ed9605f4 -Block 0023 [ 8]: 2e7c70c26839396b -Block 0023 [ 9]: 0b20f649d9523165 -Block 0023 [ 10]: 543e217485c0abeb -Block 0023 [ 11]: 0cb1abcc888e01c8 -Block 0023 [ 12]: 9d6360c15dcb2600 -Block 0023 [ 13]: 3f16dbb1f886001a -Block 0023 [ 14]: ec9b7d4980243fca -Block 0023 [ 15]: afdfec256cbf0b7a -Block 0023 [ 16]: 8f584e724b650a88 -Block 0023 [ 17]: c413f1aba32cc4eb -Block 0023 [ 18]: 17d545f8b2e64314 -Block 0023 [ 19]: 9068a6d6ce974e4e -Block 0023 [ 20]: d6b452deab39ca75 -Block 0023 [ 21]: 59218d12cab0af33 -Block 0023 [ 22]: ed19b3667f1fbba8 -Block 0023 [ 23]: 93a226a16d6bb59e -Block 0023 [ 24]: 0de268264746dc53 -Block 0023 [ 25]: 42bec86aa16652c4 -Block 0023 [ 26]: a17a4df361e17dc5 -Block 0023 [ 27]: 2ca05b04344c29f6 -Block 0023 [ 28]: 15ec2ac7c425d01e -Block 0023 [ 29]: 98723a73be5c449d -Block 0023 [ 30]: fac664e9b515c24d -Block 0023 [ 31]: 667c74be9cfbf2de -Block 0023 [ 32]: de3851fc81a42170 -Block 0023 [ 33]: 4d9afc9e7d1dba49 -Block 0023 [ 34]: 8380e0274161b55c -Block 0023 [ 35]: 3b3f74f7b1ffdc7d -Block 0023 [ 36]: af8146b72185e1b1 -Block 0023 [ 37]: 045c8173a0ca5e9b -Block 0023 [ 38]: 6b9462d3a3079ca7 -Block 0023 [ 39]: 91a29181d7aee397 -Block 0023 [ 40]: 1f78f53cba1cfb53 -Block 0023 [ 41]: a4ecd6402fe982b2 -Block 0023 [ 42]: 52290de77a77a30b -Block 0023 [ 43]: 8636b59fdfc2628a -Block 0023 [ 44]: e981e9ef1efd52fa -Block 0023 [ 45]: 2daceec89e9e75d8 -Block 0023 [ 46]: 7553a6b86c1bd3b4 -Block 0023 [ 47]: 8d2703641eaabd8e -Block 0023 [ 48]: a7d768e9c39c2fcd -Block 0023 [ 49]: f1857f0b55b6f379 -Block 0023 [ 50]: db895bb3f18d46d9 -Block 0023 [ 51]: 04a5007ada435091 -Block 0023 [ 52]: 3f70592bbaa98b62 -Block 0023 [ 53]: 8b67d0d8abbe328e -Block 0023 [ 54]: ea7474021a650668 -Block 0023 [ 55]: e90347a7acaf41af -Block 0023 [ 56]: 37c7a4f487483706 -Block 0023 [ 57]: 6f854c4fa348730f -Block 0023 [ 58]: 783761eea411efa2 -Block 0023 [ 59]: d2f84fffdc1c2dab -Block 0023 [ 60]: 15876740b2afeca4 -Block 0023 [ 61]: 42df2017f6cb0cd6 -Block 0023 [ 62]: da2288c5b587b656 -Block 0023 [ 63]: 8fc504318b434fb2 -Block 0023 [ 64]: be72c16924931758 -Block 0023 [ 65]: 5eb26ba68f62fb65 -Block 0023 [ 66]: a026b7c625a26eaa -Block 0023 [ 67]: e37dcfbbd3416388 -Block 0023 [ 68]: dc52d59c0b02448d -Block 0023 [ 69]: 935543a8846025b2 -Block 0023 [ 70]: d60143cd0a4b3cef -Block 0023 [ 71]: 86f7efa204af95ac -Block 0023 [ 72]: 2b6f6816679f91d1 -Block 0023 [ 73]: 94e6182998b96b54 -Block 0023 [ 74]: 93e73bf0f0105569 -Block 0023 [ 75]: da13f18e4c0cb699 -Block 0023 [ 76]: 870448ce3efa8548 -Block 0023 [ 77]: 4a6416a905d86b3e -Block 0023 [ 78]: 1fe58f6a54047cca -Block 0023 [ 79]: f42edddfef0201d4 -Block 0023 [ 80]: f2a9f93e5ea486d2 -Block 0023 [ 81]: b9d1604eb4f52307 -Block 0023 [ 82]: 56c5d663e18af644 -Block 0023 [ 83]: 162302f10139e362 -Block 0023 [ 84]: 0042db324df502f2 -Block 0023 [ 85]: 28495f12c64d8cd5 -Block 0023 [ 86]: e3fe80b267e1b630 -Block 0023 [ 87]: 641544818559128f -Block 0023 [ 88]: ab828451acaf5169 -Block 0023 [ 89]: ec86a3fd707ed0e1 -Block 0023 [ 90]: 3eb5572a1e406ab5 -Block 0023 [ 91]: c6cc09d3d4fb0e82 -Block 0023 [ 92]: 4738b1bb726b069c -Block 0023 [ 93]: 317e2a78a9908215 -Block 0023 [ 94]: a63c7f3cb168d444 -Block 0023 [ 95]: 9b17d567889390ef -Block 0023 [ 96]: 3d4bc23a26789e48 -Block 0023 [ 97]: a43b551c6e1bfc15 -Block 0023 [ 98]: ed2b8686fe6304d9 -Block 0023 [ 99]: 00620e444100bd23 -Block 0023 [100]: a43f1dd9f630d8e3 -Block 0023 [101]: d64b5dcd78d0fa09 -Block 0023 [102]: 870ff475afc7e794 -Block 0023 [103]: 11224ada8d5df827 -Block 0023 [104]: 20c39bc4cd167cb7 -Block 0023 [105]: 88d5cd35be323b5c -Block 0023 [106]: e3b289bb6a505cd3 -Block 0023 [107]: 40c9a2a625417bb5 -Block 0023 [108]: 2878a1103bcb1215 -Block 0023 [109]: 622d767c09fe18f5 -Block 0023 [110]: e00be87cbb6151cd -Block 0023 [111]: 68629d325a0095a8 -Block 0023 [112]: b49cb38fbb6a6518 -Block 0023 [113]: 86c32eebbd93b831 -Block 0023 [114]: 6d490907ad5e39cc -Block 0023 [115]: 610a7fa27d41f3ec -Block 0023 [116]: 491fd646a4be24dc -Block 0023 [117]: d2b3f507e79ddbbf -Block 0023 [118]: 9bafa9c11b16eac1 -Block 0023 [119]: cc2c7a70a9326714 -Block 0023 [120]: da03090b736421a2 -Block 0023 [121]: c78c8bf47b2fa258 -Block 0023 [122]: 6b40c85c5a3ef0b6 -Block 0023 [123]: 039e611fd2f43f50 -Block 0023 [124]: 4d96dc1301e43a45 -Block 0023 [125]: f9390676244bb1b4 -Block 0023 [126]: 541447043f38c5a7 -Block 0023 [127]: 9fa74c869aedb58f -Block 0024 [ 0]: 1b6d97f364ab1346 -Block 0024 [ 1]: 687c08189d7efe5d -Block 0024 [ 2]: 6e2970046223f59a -Block 0024 [ 3]: 201784f74072fc2a -Block 0024 [ 4]: 2d2547403935e57b -Block 0024 [ 5]: 7d853338f6589465 -Block 0024 [ 6]: 9da8aead5eea47d6 -Block 0024 [ 7]: 4cb61307518d7fbe -Block 0024 [ 8]: 0bd6df24105219cb -Block 0024 [ 9]: 9e3c1a1c459a1560 -Block 0024 [ 10]: c4afb9befd5c4615 -Block 0024 [ 11]: 35cc8bb5890e32fd -Block 0024 [ 12]: 42d369e59a7bbf15 -Block 0024 [ 13]: ed7a3c27e46f61d2 -Block 0024 [ 14]: 9ae3d245b38ff4ac -Block 0024 [ 15]: 6606075547aec2c7 -Block 0024 [ 16]: 87cf9c94c0c06f9a -Block 0024 [ 17]: 33cc104c0a1e67cd -Block 0024 [ 18]: 95b65f1410712d0d -Block 0024 [ 19]: e5a685c8d48d8bfe -Block 0024 [ 20]: 6e3f226d46a8825a -Block 0024 [ 21]: 1b040014d7aa884b -Block 0024 [ 22]: ca62adf20dafce90 -Block 0024 [ 23]: 4be470b0fa205479 -Block 0024 [ 24]: 24308ae259e78652 -Block 0024 [ 25]: a22865e6df84c43d -Block 0024 [ 26]: 8a257435179ef5f3 -Block 0024 [ 27]: 7528d2d048b63094 -Block 0024 [ 28]: 52d6b0bbae33dd91 -Block 0024 [ 29]: b786b9bf3f260a14 -Block 0024 [ 30]: 8022252f3494ac9d -Block 0024 [ 31]: f08b21f7dbed0caa -Block 0024 [ 32]: f2746d7321fc2375 -Block 0024 [ 33]: bd6d6dcc95880acc -Block 0024 [ 34]: a19e4304559ba8bf -Block 0024 [ 35]: 10ff706c1856688a -Block 0024 [ 36]: 3f63ed9e8363333f -Block 0024 [ 37]: 1fd49162c4817b52 -Block 0024 [ 38]: ddc70fc91fc43c97 -Block 0024 [ 39]: ae180ca44f1e9390 -Block 0024 [ 40]: a09e0ce6f7ca33e4 -Block 0024 [ 41]: ebc444a5cabb3206 -Block 0024 [ 42]: 5519bd49fa0d4d48 -Block 0024 [ 43]: 4f3ec96c151d6a1d -Block 0024 [ 44]: 2e7e65ad9de4611d -Block 0024 [ 45]: e29c6024528a1481 -Block 0024 [ 46]: e70eaf44fb8dbdac -Block 0024 [ 47]: a20804e6afabfd4a -Block 0024 [ 48]: abec4c52a6ba54f8 -Block 0024 [ 49]: f18776eceb179fc3 -Block 0024 [ 50]: 71c5b59ff02c64d5 -Block 0024 [ 51]: 0eb62ddb7c7b9898 -Block 0024 [ 52]: 78e7cf44557ed070 -Block 0024 [ 53]: dcf3718610a69b15 -Block 0024 [ 54]: d2aee39a8abc74fb -Block 0024 [ 55]: d8eca1f46bc06ae0 -Block 0024 [ 56]: c20ddf556d469215 -Block 0024 [ 57]: 77d2fce63b53504d -Block 0024 [ 58]: ca0f78a6db59b782 -Block 0024 [ 59]: e08630201e93844b -Block 0024 [ 60]: 011b122308a2ad54 -Block 0024 [ 61]: 989563a37aa0250b -Block 0024 [ 62]: 50c69b16e0c3aae4 -Block 0024 [ 63]: 61738db62009e68e -Block 0024 [ 64]: 4fee029f50b9ad21 -Block 0024 [ 65]: 59e8d0db17da305e -Block 0024 [ 66]: b6077aa1ca0d36c6 -Block 0024 [ 67]: f469a0199cb637ea -Block 0024 [ 68]: 6d644a367fed3a78 -Block 0024 [ 69]: 40c2ebf12ced7376 -Block 0024 [ 70]: b0f9f1af56f200d4 -Block 0024 [ 71]: 9c470579f03b27ec -Block 0024 [ 72]: 29ef27bb4e7261df -Block 0024 [ 73]: 3bb0c11596f105a7 -Block 0024 [ 74]: 831e6117a872ef3f -Block 0024 [ 75]: 141586a939871928 -Block 0024 [ 76]: de05c66973c18f61 -Block 0024 [ 77]: bb04e9de901e6e4b -Block 0024 [ 78]: f209934886855554 -Block 0024 [ 79]: f205f3433fc48384 -Block 0024 [ 80]: 1a91e7fc0f8f7add -Block 0024 [ 81]: 2ef9e4a071709634 -Block 0024 [ 82]: 32a6d71c4c162cd8 -Block 0024 [ 83]: 40cd26eb6ff34e7e -Block 0024 [ 84]: 1bf4edf9fe9811f2 -Block 0024 [ 85]: 5bbb164291c455e4 -Block 0024 [ 86]: a3bb18b302a9a9f7 -Block 0024 [ 87]: 7ac7d717cd014cc8 -Block 0024 [ 88]: 3355afbd7da534fd -Block 0024 [ 89]: 0d488eddc9478451 -Block 0024 [ 90]: 2192fd7c8f12f985 -Block 0024 [ 91]: 77cd72d33cf5cf87 -Block 0024 [ 92]: 11c0fadc29eade8b -Block 0024 [ 93]: af3078c91e0e86fc -Block 0024 [ 94]: 857211547a0b3253 -Block 0024 [ 95]: b5600bb399a4fec3 -Block 0024 [ 96]: 57bef31e17560d76 -Block 0024 [ 97]: fc89b941ffcde649 -Block 0024 [ 98]: ad3fbfb2612cc072 -Block 0024 [ 99]: 0768c44e8e79642f -Block 0024 [100]: fa82a7fc94531b44 -Block 0024 [101]: f4c591741e03ce27 -Block 0024 [102]: 601142b021e0d820 -Block 0024 [103]: 1b3a2508c3b26062 -Block 0024 [104]: b987bbaf19cdb37f -Block 0024 [105]: 8b4af1e25c892610 -Block 0024 [106]: 7951909eefee86df -Block 0024 [107]: 2cb36e418dcbe252 -Block 0024 [108]: b51abea53ca30724 -Block 0024 [109]: 14e49911570af91f -Block 0024 [110]: a00c4c240bb7249b -Block 0024 [111]: 451fe680abefa587 -Block 0024 [112]: 5369dfc1b916d153 -Block 0024 [113]: 1761ff4a62d7d45e -Block 0024 [114]: 151c216f3c1944ef -Block 0024 [115]: 7a185bbcdd0531fc -Block 0024 [116]: c700e6047cc7a9ce -Block 0024 [117]: 6ea92ecf27030984 -Block 0024 [118]: ecc7bf426636fcde -Block 0024 [119]: 38b9bd46560f0b1b -Block 0024 [120]: 346e7252c870ee10 -Block 0024 [121]: 3aa8d6c44e60d291 -Block 0024 [122]: f9dd7a421fb3d07c -Block 0024 [123]: ff85282feda3cd60 -Block 0024 [124]: dbfb89e57658dccf -Block 0024 [125]: 5728d16e353ea62b -Block 0024 [126]: 162c91687bbe2588 -Block 0024 [127]: 62180018d170be19 -Block 0025 [ 0]: 9dea98e0f45c8df3 -Block 0025 [ 1]: e718675e0ca9af64 -Block 0025 [ 2]: 2a200f968940a3e6 -Block 0025 [ 3]: 7c56da29d7d510af -Block 0025 [ 4]: 5b519939866bfefc -Block 0025 [ 5]: 134b855183457280 -Block 0025 [ 6]: 170ac5fed0cb9ee0 -Block 0025 [ 7]: d0a9bacf2034d21a -Block 0025 [ 8]: 00fce08c97ef87e0 -Block 0025 [ 9]: 9aa0041eaa7ad61f -Block 0025 [ 10]: 407a94b0a313e995 -Block 0025 [ 11]: b955191be75b7b24 -Block 0025 [ 12]: 316c31961ddff5f3 -Block 0025 [ 13]: 02a21a3bbbc4a5fe -Block 0025 [ 14]: 55fb14c755cd390d -Block 0025 [ 15]: 2a4b331d7df48c4e -Block 0025 [ 16]: 1be3b27043f0361f -Block 0025 [ 17]: f5c84613bd424fbe -Block 0025 [ 18]: e83919e013bef260 -Block 0025 [ 19]: 8fbdd74b3ffd0c32 -Block 0025 [ 20]: 066215f05844ab4d -Block 0025 [ 21]: 7b621ea46579b6bb -Block 0025 [ 22]: f3204a3744956a24 -Block 0025 [ 23]: 21428bee28221146 -Block 0025 [ 24]: 9f3eda1b1cb2a9af -Block 0025 [ 25]: baedddaa0cad8da8 -Block 0025 [ 26]: 6fdda68a32b9d387 -Block 0025 [ 27]: 5f1e005ced3c19e1 -Block 0025 [ 28]: cff1336476a4540b -Block 0025 [ 29]: a6be6f21ed834472 -Block 0025 [ 30]: 54f1db5d11d1874b -Block 0025 [ 31]: e0973ae921ea1ec6 -Block 0025 [ 32]: 54026fec00959adf -Block 0025 [ 33]: f355788737a4226d -Block 0025 [ 34]: 08eb52c06424d35e -Block 0025 [ 35]: 4c51dd52a31b3a25 -Block 0025 [ 36]: 8d6fb8828dc93960 -Block 0025 [ 37]: 9ca7d3414f6be751 -Block 0025 [ 38]: 5536071059f29bd0 -Block 0025 [ 39]: 212d31590dc55ff4 -Block 0025 [ 40]: 00160f22408fe1bf -Block 0025 [ 41]: 2ae2d51e4ef4fc38 -Block 0025 [ 42]: 3197ecb672fd06fb -Block 0025 [ 43]: f1291d96197e5455 -Block 0025 [ 44]: aabd77ecd5f9cf74 -Block 0025 [ 45]: ea21b4064dfcddbf -Block 0025 [ 46]: 7fe4679308b95d5b -Block 0025 [ 47]: 719cae719c25851f -Block 0025 [ 48]: 88cb63475ddd958a -Block 0025 [ 49]: e8def05e2a50961b -Block 0025 [ 50]: 3306b43d445e0c6c -Block 0025 [ 51]: 1a0ee61add088b04 -Block 0025 [ 52]: ebeb156ec51a9240 -Block 0025 [ 53]: 03998909b2b26e65 -Block 0025 [ 54]: 94d90f46e365b989 -Block 0025 [ 55]: fdc410a5ceccff31 -Block 0025 [ 56]: 557cc6b7afa5ae1f -Block 0025 [ 57]: 92045147a4608d29 -Block 0025 [ 58]: f24cd61d05340a80 -Block 0025 [ 59]: e8a771bb3e64ba20 -Block 0025 [ 60]: ea7a859223d8c1be -Block 0025 [ 61]: e0ed40a0864b6654 -Block 0025 [ 62]: cdca027f76da810d -Block 0025 [ 63]: 3e90ca16f87f8c64 -Block 0025 [ 64]: ada45048fa983c11 -Block 0025 [ 65]: 71676d391911b13a -Block 0025 [ 66]: 1d50c778ba2a1e16 -Block 0025 [ 67]: ee2174c9cfc78c55 -Block 0025 [ 68]: 4e649a15999421b4 -Block 0025 [ 69]: 283b514d302de05f -Block 0025 [ 70]: 0e5ffdfdd82c65aa -Block 0025 [ 71]: b05c24c95c134893 -Block 0025 [ 72]: 2d23b161436d607c -Block 0025 [ 73]: d191b4dfbc763bbc -Block 0025 [ 74]: 0fc53094eda325ab -Block 0025 [ 75]: 1e73613359daf5e9 -Block 0025 [ 76]: dadf7d0cd21e9f95 -Block 0025 [ 77]: d738d1a27daecafa -Block 0025 [ 78]: 31f8765d2324fbfb -Block 0025 [ 79]: 4db749e5e1e91ce3 -Block 0025 [ 80]: 312f948729f66ff9 -Block 0025 [ 81]: fe2b219ac8c6af11 -Block 0025 [ 82]: 947e787f9c64e091 -Block 0025 [ 83]: 49378284ecd531d5 -Block 0025 [ 84]: 061fbf2e83dfb196 -Block 0025 [ 85]: e065a3bb91f47c0a -Block 0025 [ 86]: 0bac9c6e8ddad59e -Block 0025 [ 87]: 82458709614459a1 -Block 0025 [ 88]: 184b5ba3476a00d8 -Block 0025 [ 89]: ac35cdb330809819 -Block 0025 [ 90]: 4164015963e94a50 -Block 0025 [ 91]: 5b49db84037e46ca -Block 0025 [ 92]: eccb81844e039636 -Block 0025 [ 93]: 94a259a089ebb6ee -Block 0025 [ 94]: c8365c576d7ca7e4 -Block 0025 [ 95]: 9600a395ee895e92 -Block 0025 [ 96]: d3f2a00d550f507e -Block 0025 [ 97]: 245198c21c2c6ae8 -Block 0025 [ 98]: 057f8dce7f761c0e -Block 0025 [ 99]: 3b88913083dda199 -Block 0025 [100]: c5eb496e745c47cb -Block 0025 [101]: 6a13fe3ee998220d -Block 0025 [102]: e44904f23834ebd5 -Block 0025 [103]: acaf928c769a8852 -Block 0025 [104]: 0866087633969633 -Block 0025 [105]: 8dd5b1dde3b06956 -Block 0025 [106]: 29f3bd382a42c2a5 -Block 0025 [107]: 29ea43a5a960be6b -Block 0025 [108]: 164710ec5da538da -Block 0025 [109]: 4e8d7d1fe9563032 -Block 0025 [110]: a920e54e66141df0 -Block 0025 [111]: 09d93900fd84dbb7 -Block 0025 [112]: 007245b49a574c20 -Block 0025 [113]: 595c4a0e5a8d9914 -Block 0025 [114]: fd3b2741644d6845 -Block 0025 [115]: 97ff3f94b0ac27c7 -Block 0025 [116]: c1c2efb0b9d18aaf -Block 0025 [117]: 22abb5fd2ecc9e62 -Block 0025 [118]: 3c41db1bdead501a -Block 0025 [119]: c0f75a3fdbbd361c -Block 0025 [120]: e36a235924b7cd2b -Block 0025 [121]: 92f3a12daa934ab9 -Block 0025 [122]: c0e1da579eebdbe1 -Block 0025 [123]: b1ac487a725cdb21 -Block 0025 [124]: a39fab7029df3ed7 -Block 0025 [125]: 7b8fe4524db844eb -Block 0025 [126]: b7fdf1a6ca4ff258 -Block 0025 [127]: f68cf7b80de6823a -Block 0026 [ 0]: c1b768e4ab523978 -Block 0026 [ 1]: 5521d67bc3751eeb -Block 0026 [ 2]: a123beff943e992f -Block 0026 [ 3]: a481f25f5c200f65 -Block 0026 [ 4]: ce26d5b7c8bee62f -Block 0026 [ 5]: 7f2072875ee51d8d -Block 0026 [ 6]: caf87e7d0df6e37d -Block 0026 [ 7]: e651b78783205174 -Block 0026 [ 8]: 614321f79276d222 -Block 0026 [ 9]: f9f78652a5bb3bfa -Block 0026 [ 10]: 53d925d442ea4557 -Block 0026 [ 11]: 312a5b33795050b7 -Block 0026 [ 12]: cba5769f359671c5 -Block 0026 [ 13]: 93c2a858f246f896 -Block 0026 [ 14]: 5f3eb206646804d1 -Block 0026 [ 15]: 16e5ecd1c0ad3301 -Block 0026 [ 16]: 8bdf8382b5f2b3ed -Block 0026 [ 17]: 045c403db709d4f0 -Block 0026 [ 18]: ee934246f22072af -Block 0026 [ 19]: 0f70f344e2c9f578 -Block 0026 [ 20]: 0901b57afe2fadc3 -Block 0026 [ 21]: 7dfed2e4a595459d -Block 0026 [ 22]: fc78ee1cda513a1f -Block 0026 [ 23]: deb4abff7339b932 -Block 0026 [ 24]: f6332454f63314a5 -Block 0026 [ 25]: 261c97b58a557f94 -Block 0026 [ 26]: 26bda71112c57f76 -Block 0026 [ 27]: 63c9cdc690144e61 -Block 0026 [ 28]: 228b202353c930f1 -Block 0026 [ 29]: cd5b0960c4c9a6b9 -Block 0026 [ 30]: f4e6d387d6d7d453 -Block 0026 [ 31]: f54ab733b2f25833 -Block 0026 [ 32]: cc6e4118a0ef810b -Block 0026 [ 33]: 03f01fdf18ea4cba -Block 0026 [ 34]: 5cb4f724e790eaff -Block 0026 [ 35]: 5979ac899ca55c44 -Block 0026 [ 36]: c74ef1a91d4deb67 -Block 0026 [ 37]: e0fc99d3c50934c9 -Block 0026 [ 38]: e2df12194bd1fa08 -Block 0026 [ 39]: 12f4b8caf4503184 -Block 0026 [ 40]: cec9dffaa4d18089 -Block 0026 [ 41]: 613ae59272234838 -Block 0026 [ 42]: cd20d01802e789eb -Block 0026 [ 43]: 710c8602eced8907 -Block 0026 [ 44]: 77c6c58846a6b8e5 -Block 0026 [ 45]: b42064e5052fd0c9 -Block 0026 [ 46]: a442a14edaf934f0 -Block 0026 [ 47]: e36aa911fc51365e -Block 0026 [ 48]: 08994423dd52d9e2 -Block 0026 [ 49]: 3af306d20f71a362 -Block 0026 [ 50]: ddd19978ffbfc195 -Block 0026 [ 51]: a98d1c2853b66a7f -Block 0026 [ 52]: bcfa8f96df34ce90 -Block 0026 [ 53]: aac16a4e7790de1f -Block 0026 [ 54]: cb58692620dfdf6e -Block 0026 [ 55]: 0a159b6511e3ef66 -Block 0026 [ 56]: 37e2a3cec5bfa151 -Block 0026 [ 57]: 790c8919db0afb67 -Block 0026 [ 58]: 0db6896dad7786e0 -Block 0026 [ 59]: 1c508ba2eb33c916 -Block 0026 [ 60]: 7813ac676e47bbd0 -Block 0026 [ 61]: c0c1f531f081a1db -Block 0026 [ 62]: cb790687688c62c9 -Block 0026 [ 63]: 63817244e76d9501 -Block 0026 [ 64]: 26bfb652cc6bdedc -Block 0026 [ 65]: e22e045baa9da7f3 -Block 0026 [ 66]: 302ba10d58dea506 -Block 0026 [ 67]: bba2d7cb5a6c5f63 -Block 0026 [ 68]: d0e81de1bcebf888 -Block 0026 [ 69]: 85afaa8d746c4ad2 -Block 0026 [ 70]: 9d4553d7e1930919 -Block 0026 [ 71]: 7928f64d08bca456 -Block 0026 [ 72]: c05167e3574c5123 -Block 0026 [ 73]: 3279ee18661433d2 -Block 0026 [ 74]: e9e16e636967561a -Block 0026 [ 75]: 34b50294012f9026 -Block 0026 [ 76]: a6706d61a88b965b -Block 0026 [ 77]: b194e35bfb3322be -Block 0026 [ 78]: 9eb1502169ed7f53 -Block 0026 [ 79]: 9ffba512e785acc2 -Block 0026 [ 80]: ad74a73d057a68f1 -Block 0026 [ 81]: d13ad830ec250f12 -Block 0026 [ 82]: 89990d03fcda5d40 -Block 0026 [ 83]: 7f41fe42aab938af -Block 0026 [ 84]: e7b12c40b212bedb -Block 0026 [ 85]: 2271c1588b468df4 -Block 0026 [ 86]: 214975ca6aa32f35 -Block 0026 [ 87]: f0c6aa78d1f1c858 -Block 0026 [ 88]: aaabaf4a63267c00 -Block 0026 [ 89]: 03898ff8906d365f -Block 0026 [ 90]: baa52fe008c7c1eb -Block 0026 [ 91]: 5eb08154e5a18442 -Block 0026 [ 92]: 739afe1d946e5da4 -Block 0026 [ 93]: fd3f3c47a107f99b -Block 0026 [ 94]: a0ae9aae60e91db4 -Block 0026 [ 95]: 688a0f505ad71c75 -Block 0026 [ 96]: e400ef9ef47fbc41 -Block 0026 [ 97]: d4d61a48f3ca6b9e -Block 0026 [ 98]: dc46bcdcae323a05 -Block 0026 [ 99]: 70eb928f22f91eb7 -Block 0026 [100]: 3356b17622be880c -Block 0026 [101]: b26b8de5b961f86d -Block 0026 [102]: c88d10e282a6c105 -Block 0026 [103]: d1a4fa0df2642bbc -Block 0026 [104]: 3c2eb1be6a990b63 -Block 0026 [105]: 7698318905e3d24b -Block 0026 [106]: 25069d30ab91d51c -Block 0026 [107]: 00d22156781af202 -Block 0026 [108]: 872c784c0766ef3f -Block 0026 [109]: 59c0caaad7afb6e5 -Block 0026 [110]: f577e87ab65ef4b8 -Block 0026 [111]: 5f6511ad9970b9f6 -Block 0026 [112]: efd260e4b49fb223 -Block 0026 [113]: ecb1c4b543007a9f -Block 0026 [114]: e9ab27fc3b6f5843 -Block 0026 [115]: 202737490e645c2d -Block 0026 [116]: d56b3e3b827021ca -Block 0026 [117]: 64b68ff331ac5aa9 -Block 0026 [118]: 8cbf36f00083ff2a -Block 0026 [119]: 274ea8aa43adcd0a -Block 0026 [120]: b238ae985e018099 -Block 0026 [121]: c333b2c0e3794b74 -Block 0026 [122]: 7c63f863700f6744 -Block 0026 [123]: b01f279d312af042 -Block 0026 [124]: 5450528f718101e2 -Block 0026 [125]: 8e121c1018d5a808 -Block 0026 [126]: 09f735d16f02fd17 -Block 0026 [127]: 30bdbd4ab589600d -Block 0027 [ 0]: dfb1b7b6e19fef45 -Block 0027 [ 1]: 8a7e2af24e969d87 -Block 0027 [ 2]: 6b743c2dece928b4 -Block 0027 [ 3]: 50275017b269ff38 -Block 0027 [ 4]: fb3756653d2a67d3 -Block 0027 [ 5]: 96b0005894cb9c6f -Block 0027 [ 6]: c77260686102fe4b -Block 0027 [ 7]: 7b4db34395d8d4cc -Block 0027 [ 8]: 6cf098719acb748e -Block 0027 [ 9]: 9f8a882796d1ed33 -Block 0027 [ 10]: d41a525bbf224af7 -Block 0027 [ 11]: 5965acbb144b0ffd -Block 0027 [ 12]: bb174761b0489258 -Block 0027 [ 13]: 2c4b9428c0e54b03 -Block 0027 [ 14]: 3a070ae66305b255 -Block 0027 [ 15]: 31a6e4f4060f33f4 -Block 0027 [ 16]: 67d29285c6b81359 -Block 0027 [ 17]: 1d97e1e82c4bb8ec -Block 0027 [ 18]: 9147a224773267be -Block 0027 [ 19]: cada23a7599100e8 -Block 0027 [ 20]: 39f654ca5affb557 -Block 0027 [ 21]: 653e55fb1fe7d98d -Block 0027 [ 22]: 1fe150b6c5e568df -Block 0027 [ 23]: 11b04652c7425426 -Block 0027 [ 24]: 51ed5eab1d250839 -Block 0027 [ 25]: a157a2654e2f31a7 -Block 0027 [ 26]: 5ac42844add3bfd4 -Block 0027 [ 27]: 092ea7ad07912ed6 -Block 0027 [ 28]: 57be83c5dd581252 -Block 0027 [ 29]: a4150638b5232b78 -Block 0027 [ 30]: 91baf1e273f3292b -Block 0027 [ 31]: 279ddb9ae0f59685 -Block 0027 [ 32]: e1ede6b23ac6ce30 -Block 0027 [ 33]: b65d7f1aceaa298b -Block 0027 [ 34]: 1356d0e6ae4203b4 -Block 0027 [ 35]: b162f2dbe36e9099 -Block 0027 [ 36]: d2efeae7e4eb03bf -Block 0027 [ 37]: 10cd45bd5b941710 -Block 0027 [ 38]: 45ee2d5ff2910df1 -Block 0027 [ 39]: 9e31c67dcc63a2f8 -Block 0027 [ 40]: 6d4047eb18b27369 -Block 0027 [ 41]: 319096d6062b8482 -Block 0027 [ 42]: bc1d42249ce2caba -Block 0027 [ 43]: 95e6c2ecdf193df3 -Block 0027 [ 44]: f581c15ed36c2773 -Block 0027 [ 45]: d09f6bdfe41d9deb -Block 0027 [ 46]: 63359723da79b1ec -Block 0027 [ 47]: b014e747082bed32 -Block 0027 [ 48]: d4fcea83c8489367 -Block 0027 [ 49]: 79264c6a13f6d74b -Block 0027 [ 50]: 23a98835209cb37d -Block 0027 [ 51]: 55cf27731bc71b54 -Block 0027 [ 52]: 579d23c3c8f0d874 -Block 0027 [ 53]: c2d9c527760854e5 -Block 0027 [ 54]: b67733a70e32c7a5 -Block 0027 [ 55]: bf3c8adda26c4378 -Block 0027 [ 56]: 9a4e6986727599a7 -Block 0027 [ 57]: 5d23ac243a3758b7 -Block 0027 [ 58]: 98f6bf7a738c86f1 -Block 0027 [ 59]: 9e6727d5968272f9 -Block 0027 [ 60]: cecb900fe87b7449 -Block 0027 [ 61]: 68171bbfeeec88d6 -Block 0027 [ 62]: c8280dab9e0be4f5 -Block 0027 [ 63]: 786dcdfd9f13e110 -Block 0027 [ 64]: 15ac1cc5a67a123f -Block 0027 [ 65]: 8ba78d88911bb074 -Block 0027 [ 66]: 11d81827a8bf57a8 -Block 0027 [ 67]: 293af374772b85e8 -Block 0027 [ 68]: 29043eae6117e07b -Block 0027 [ 69]: 7d8b59384e757a4f -Block 0027 [ 70]: d7eadfa7fa1a057c -Block 0027 [ 71]: 08020d3f2ed7d3e4 -Block 0027 [ 72]: 3ffd01936555240e -Block 0027 [ 73]: 4172d0d76e3a425e -Block 0027 [ 74]: e80b2670c69d0187 -Block 0027 [ 75]: c8b66b9b7589a2c5 -Block 0027 [ 76]: 3da25f6759ac3ced -Block 0027 [ 77]: b8f45a9416f6c2b4 -Block 0027 [ 78]: 6bd3a3df27308217 -Block 0027 [ 79]: 30f61b3b5818ca8e -Block 0027 [ 80]: 563376db56d040f3 -Block 0027 [ 81]: a6123f082a29fe18 -Block 0027 [ 82]: 98361cd23cddfe24 -Block 0027 [ 83]: 0504e44336ddc550 -Block 0027 [ 84]: 12096c9de0473588 -Block 0027 [ 85]: ccb1faa1fc5c3aef -Block 0027 [ 86]: a285d47e4a11135f -Block 0027 [ 87]: 4e3bef96d97d6995 -Block 0027 [ 88]: 28af4e31ac05b822 -Block 0027 [ 89]: 4421ffa284241116 -Block 0027 [ 90]: eff52a0fd5c8d53a -Block 0027 [ 91]: 3c9105b1e792f051 -Block 0027 [ 92]: c6699665bd597fbe -Block 0027 [ 93]: f4e7bf0aa2f4ab6a -Block 0027 [ 94]: 9ea7d6698bcd3d73 -Block 0027 [ 95]: f7070ccfb227cf25 -Block 0027 [ 96]: 0e73f666dea37687 -Block 0027 [ 97]: c14e8d7de7f64630 -Block 0027 [ 98]: 6868515684a2e725 -Block 0027 [ 99]: 206095a669b7650c -Block 0027 [100]: 48dd79ad5aab7562 -Block 0027 [101]: 2b915476af89bedb -Block 0027 [102]: 9c1387f4f1ff6c7d -Block 0027 [103]: a1c3389ebbc7ad3b -Block 0027 [104]: 6cc1fe26cda5ca6e -Block 0027 [105]: 4175a4fbd5406670 -Block 0027 [106]: 2d268ff39496b430 -Block 0027 [107]: f985b90d6a900624 -Block 0027 [108]: da1b3e8a3ee00a3c -Block 0027 [109]: 6dec5419d237ae08 -Block 0027 [110]: 4833bd3dc940c7e2 -Block 0027 [111]: c0b6e96736180b3a -Block 0027 [112]: 764786ef491a21cc -Block 0027 [113]: 6ab8b494951aa58d -Block 0027 [114]: 1654435146879de9 -Block 0027 [115]: 0c7df427e44d2fcb -Block 0027 [116]: ca7a758ad8d8df28 -Block 0027 [117]: e35ce9f1d8f8c51b -Block 0027 [118]: 1ac1d9afec8e66fa -Block 0027 [119]: 57f25346a9fa27e3 -Block 0027 [120]: 2e79157e350d0ac6 -Block 0027 [121]: 92d09dd28f617b33 -Block 0027 [122]: c400341fd1bc382f -Block 0027 [123]: f83172627c338632 -Block 0027 [124]: 6ebf3b078e99f975 -Block 0027 [125]: 76b1b6be911347ce -Block 0027 [126]: f154a593a33de676 -Block 0027 [127]: c4c34f93aa371a57 -Block 0028 [ 0]: 4e2ac80509bca280 -Block 0028 [ 1]: 53717768028a3f68 -Block 0028 [ 2]: e39dc8aca99e6f66 -Block 0028 [ 3]: 53ebffa315286c27 -Block 0028 [ 4]: 705fba0ce74adda1 -Block 0028 [ 5]: 40cf24b7846fbeea -Block 0028 [ 6]: 08e1a9ca69b52556 -Block 0028 [ 7]: 5742721314aa28d7 -Block 0028 [ 8]: a8e7ba94670950ba -Block 0028 [ 9]: d682cbf431183b33 -Block 0028 [ 10]: 6da4c3e4a20f9af4 -Block 0028 [ 11]: 2ee2e501d76c7f47 -Block 0028 [ 12]: 18c76e756851c749 -Block 0028 [ 13]: d7499ec23d51287f -Block 0028 [ 14]: c8a21d3b456ccd9c -Block 0028 [ 15]: e318a0d2dec093f2 -Block 0028 [ 16]: c8387e0d1103811b -Block 0028 [ 17]: cfd9fafc75da3916 -Block 0028 [ 18]: c90d21f4ec27b430 -Block 0028 [ 19]: eb110a88aaf9e8c4 -Block 0028 [ 20]: fe43290e11e97783 -Block 0028 [ 21]: e711badb49e785ae -Block 0028 [ 22]: 47da30f3dfadd77c -Block 0028 [ 23]: 213005e8eaaec1b2 -Block 0028 [ 24]: 0db1337e0939cded -Block 0028 [ 25]: 79402cfac8f41b81 -Block 0028 [ 26]: 8fb206b462d929d3 -Block 0028 [ 27]: 8bf4edccde1b3f5e -Block 0028 [ 28]: 4fb5750fd001ec5f -Block 0028 [ 29]: 6163db3306eb00c3 -Block 0028 [ 30]: cd2ad0bdcba9703a -Block 0028 [ 31]: a989225aa8e9805c -Block 0028 [ 32]: 66af421dbabc751e -Block 0028 [ 33]: 19ca456193827f8e -Block 0028 [ 34]: ae61e6f8e84ea077 -Block 0028 [ 35]: ea6dad1c09cd284e -Block 0028 [ 36]: f958dbaa44014255 -Block 0028 [ 37]: e9c596f3061ad9cf -Block 0028 [ 38]: a743d258c493448e -Block 0028 [ 39]: dfe0ea446e47b64e -Block 0028 [ 40]: 09656df9863a4d0e -Block 0028 [ 41]: 097514eb0e9fdb0b -Block 0028 [ 42]: dd901308afe3324d -Block 0028 [ 43]: 639c721c16fd4955 -Block 0028 [ 44]: 35972be5aa22701b -Block 0028 [ 45]: 351dd3796340bdac -Block 0028 [ 46]: c31bb6ed7ee361e3 -Block 0028 [ 47]: 5163df958fd4e5af -Block 0028 [ 48]: ce6fdf2ae0a10c27 -Block 0028 [ 49]: b8155894b2d469a2 -Block 0028 [ 50]: 2bf15585424c2500 -Block 0028 [ 51]: e3d4b0bf2e7919b5 -Block 0028 [ 52]: 76d4ea66e8e27e9a -Block 0028 [ 53]: 515cd2ae2772ce7b -Block 0028 [ 54]: 679aa73fe2c89064 -Block 0028 [ 55]: 7997086c96c4a813 -Block 0028 [ 56]: 1a7bb444208bd79b -Block 0028 [ 57]: f21833b017a5400e -Block 0028 [ 58]: d266eef93b3490ff -Block 0028 [ 59]: 6f72683f6295d4c8 -Block 0028 [ 60]: caf38a6e397d6771 -Block 0028 [ 61]: ee88b044901a7a00 -Block 0028 [ 62]: cd05fc2e355e9719 -Block 0028 [ 63]: 3eb58642439c07c2 -Block 0028 [ 64]: 37b3c2e8c31b2ac2 -Block 0028 [ 65]: 298497119f560963 -Block 0028 [ 66]: a851e8e9e3d31be3 -Block 0028 [ 67]: 6d2c3bc9bdca1aff -Block 0028 [ 68]: dccbb833daf4fb92 -Block 0028 [ 69]: 5105f182cb32c48a -Block 0028 [ 70]: 7d8fb4b4881034ec -Block 0028 [ 71]: 21ba5176a4d8b744 -Block 0028 [ 72]: ef773853c451d06b -Block 0028 [ 73]: bfcb4fa94cbd866e -Block 0028 [ 74]: 06698214fef5596d -Block 0028 [ 75]: effbd0e63460d9d0 -Block 0028 [ 76]: a3953f6125c44b22 -Block 0028 [ 77]: d7fd87fdb0dc2d43 -Block 0028 [ 78]: 239ea462ebb0534d -Block 0028 [ 79]: 7924c7edc51d7998 -Block 0028 [ 80]: a9a5c86c148c5b83 -Block 0028 [ 81]: 58fa2801a433f66a -Block 0028 [ 82]: 08b6b4a726074921 -Block 0028 [ 83]: 451e8ed1f1c26f8d -Block 0028 [ 84]: 67b6c5ca1214bdad -Block 0028 [ 85]: 68bccd07601599c4 -Block 0028 [ 86]: 44f1d4401f2662f3 -Block 0028 [ 87]: b33dc98b525a1493 -Block 0028 [ 88]: 5d5c6952b912dcc7 -Block 0028 [ 89]: 31679f3139323221 -Block 0028 [ 90]: 052faed9f3a4e084 -Block 0028 [ 91]: 03bc4bb7589a4dfc -Block 0028 [ 92]: a31038ec95934e61 -Block 0028 [ 93]: 097dc529b1217289 -Block 0028 [ 94]: 4be72bc9cc749312 -Block 0028 [ 95]: 4c1f68597848d992 -Block 0028 [ 96]: b444c7254fa8fb61 -Block 0028 [ 97]: c346543ef84e8a59 -Block 0028 [ 98]: 206e055b3f3f3730 -Block 0028 [ 99]: 078d4ce845c6455c -Block 0028 [100]: 655cfd84ba3aabbe -Block 0028 [101]: 7da6829e216aa0bc -Block 0028 [102]: 435efea8611f7c12 -Block 0028 [103]: 6312478ed7893960 -Block 0028 [104]: c79bc333eaecaf10 -Block 0028 [105]: 8cdd24ffa611f409 -Block 0028 [106]: c716631996a6d371 -Block 0028 [107]: cfa3c11f4ae6ca0f -Block 0028 [108]: e371b34cf30063ec -Block 0028 [109]: 1718fd0b77146341 -Block 0028 [110]: d52a6b12f48603ce -Block 0028 [111]: 42b73ab9ffe6a4b3 -Block 0028 [112]: 452a7b610ce7c398 -Block 0028 [113]: d88650bcaad9c965 -Block 0028 [114]: ba7fa59d0ce7bd70 -Block 0028 [115]: f4b59e0f6fb3a8a0 -Block 0028 [116]: 3e1aeeda56a01d9c -Block 0028 [117]: e9279b366a89e250 -Block 0028 [118]: 778ba4ae19a9af6d -Block 0028 [119]: 72fc6f6559bf14c2 -Block 0028 [120]: 3a118ac1bf4871fb -Block 0028 [121]: 70574565eb2cfc81 -Block 0028 [122]: 1983ab178235c534 -Block 0028 [123]: 5604a37353928f70 -Block 0028 [124]: 7fd8d5cce867e1c8 -Block 0028 [125]: 70d7e1ed61847f19 -Block 0028 [126]: 1a3d93af42c2c9e0 -Block 0028 [127]: ed13f2ac7eedcbef -Block 0029 [ 0]: 33cf93e6cce7be2c -Block 0029 [ 1]: 372711da69651ef5 -Block 0029 [ 2]: 5f181b07cee4fd30 -Block 0029 [ 3]: 67535edc41066807 -Block 0029 [ 4]: 30b4aba2d58eeae1 -Block 0029 [ 5]: dca3d06b611e0aae -Block 0029 [ 6]: c769fab6173e6bfe -Block 0029 [ 7]: 10b0480ec9249fa7 -Block 0029 [ 8]: 41fad98a38fb6f67 -Block 0029 [ 9]: 1d15f3f87fb05962 -Block 0029 [ 10]: cd5704702ccd37e9 -Block 0029 [ 11]: 6d5f3e7b74a6640e -Block 0029 [ 12]: 884fa40221d10e15 -Block 0029 [ 13]: 7f18b8d5e79143f0 -Block 0029 [ 14]: 28f11a889ffef7d1 -Block 0029 [ 15]: 28decff387bee808 -Block 0029 [ 16]: 6907e08a57d2f8de -Block 0029 [ 17]: 54816218bce03e77 -Block 0029 [ 18]: c91274596de25c36 -Block 0029 [ 19]: 6d926b9a697f08d0 -Block 0029 [ 20]: 5601cb11e42287ad -Block 0029 [ 21]: e67a9e7239317578 -Block 0029 [ 22]: 3b347aaecb5bb370 -Block 0029 [ 23]: 993f8601c116adb4 -Block 0029 [ 24]: 4bd559876fa2a678 -Block 0029 [ 25]: 56c572647d6b98c0 -Block 0029 [ 26]: 981d52ed292920a3 -Block 0029 [ 27]: f53f2adbcb37b2d9 -Block 0029 [ 28]: c60e801d5ff660bb -Block 0029 [ 29]: 545c53bd9e909cba -Block 0029 [ 30]: a50059730c68333b -Block 0029 [ 31]: f229e0a49de642d6 -Block 0029 [ 32]: 64a92610a4e81764 -Block 0029 [ 33]: 289c40c21a874f0f -Block 0029 [ 34]: 2d20318544d7a828 -Block 0029 [ 35]: 4e776209bf3163a5 -Block 0029 [ 36]: 4e4d880f59f82d31 -Block 0029 [ 37]: e3450815aa32bb05 -Block 0029 [ 38]: 605c3125306f7b9f -Block 0029 [ 39]: a550b122e1ce00c4 -Block 0029 [ 40]: ec2b5a795837a0bc -Block 0029 [ 41]: 119f699a09a13ad5 -Block 0029 [ 42]: 9a340071e76e84e7 -Block 0029 [ 43]: c54ee0cca8723d1d -Block 0029 [ 44]: 6df24d0c6fcf3814 -Block 0029 [ 45]: 58fbebabf998cc37 -Block 0029 [ 46]: bddf26bf6235a216 -Block 0029 [ 47]: 871ed9ba19f3cf4b -Block 0029 [ 48]: 6299baf2f954ec4e -Block 0029 [ 49]: 444ee538008d2ec6 -Block 0029 [ 50]: 026a21131e13b73c -Block 0029 [ 51]: b080b44e6724b4ed -Block 0029 [ 52]: 6c94166dca97de12 -Block 0029 [ 53]: 356ee8e0bd44b94b -Block 0029 [ 54]: 800a52ccc57fbf98 -Block 0029 [ 55]: 68da4be416925eb6 -Block 0029 [ 56]: bdadbd80576b246f -Block 0029 [ 57]: 44b38c548a2cfd19 -Block 0029 [ 58]: be7f2123f69a9ea4 -Block 0029 [ 59]: 1b8f37faec9a6ab1 -Block 0029 [ 60]: e3c4b10ae4ba4e3b -Block 0029 [ 61]: eee4d03c910fe3b5 -Block 0029 [ 62]: 745cf878722aa984 -Block 0029 [ 63]: 8e7085a568dbb61e -Block 0029 [ 64]: 966da2b5386203be -Block 0029 [ 65]: bc6421ec3d4fc07c -Block 0029 [ 66]: 9d470f80efa5c663 -Block 0029 [ 67]: 8c4a9b72f9ef31c2 -Block 0029 [ 68]: 5f6f0abd618f7409 -Block 0029 [ 69]: 76371da61293896d -Block 0029 [ 70]: 0dc2d295a512ce69 -Block 0029 [ 71]: e87771709fbc90f4 -Block 0029 [ 72]: bb6c4d5e2ce22862 -Block 0029 [ 73]: 90e1af93e71818cb -Block 0029 [ 74]: 55b1c9d0d3313531 -Block 0029 [ 75]: 9688b54c43f4547f -Block 0029 [ 76]: f3b43a51cf8379c9 -Block 0029 [ 77]: 3f64ee2df539ccf9 -Block 0029 [ 78]: 0052afb100e3e6d2 -Block 0029 [ 79]: 556f77896150e82f -Block 0029 [ 80]: 0289300035cc07f5 -Block 0029 [ 81]: e6ac3e026d176d28 -Block 0029 [ 82]: d256dd0979870ade -Block 0029 [ 83]: 52f1edf016820998 -Block 0029 [ 84]: 7990c26012425aa5 -Block 0029 [ 85]: b2fdc9cd71716664 -Block 0029 [ 86]: 499eea789dfd8c6c -Block 0029 [ 87]: a33739d6dc44df83 -Block 0029 [ 88]: 5b2473304ff02ba2 -Block 0029 [ 89]: 6221fe99ce18fd6f -Block 0029 [ 90]: 9b88abce601fb555 -Block 0029 [ 91]: d4255810ae3bd298 -Block 0029 [ 92]: 8a3957699742a79c -Block 0029 [ 93]: c1e90c11b21afdca -Block 0029 [ 94]: 2c7531ce3a0f8ae5 -Block 0029 [ 95]: de3570a2b72d8ab4 -Block 0029 [ 96]: 7058926b75183c6d -Block 0029 [ 97]: b036b85be8608da9 -Block 0029 [ 98]: 4908a8d134b324dc -Block 0029 [ 99]: 9ca9c9a119d9865f -Block 0029 [100]: 05efd6adf2af52c7 -Block 0029 [101]: 53c7a35c9c88758c -Block 0029 [102]: cd4ed200fd912eec -Block 0029 [103]: b1044093fbb535af -Block 0029 [104]: cf5e842a5a94efa1 -Block 0029 [105]: 1954b5b8c49d4462 -Block 0029 [106]: 5f3a71fecff0d4f1 -Block 0029 [107]: ed2705757b17552f -Block 0029 [108]: afd077618cefdad9 -Block 0029 [109]: 007303311b2e4fa6 -Block 0029 [110]: da07ecdc7845ad01 -Block 0029 [111]: 33724bb091b3cad0 -Block 0029 [112]: 4f30c96b7bb5a778 -Block 0029 [113]: dd633315a7413454 -Block 0029 [114]: 1215bea5da3b0263 -Block 0029 [115]: a890ad66a77d0fd9 -Block 0029 [116]: 80f7d436ca7c0534 -Block 0029 [117]: 1ff2f3dbe5171bcb -Block 0029 [118]: 1bd78433a2de661d -Block 0029 [119]: 4fd6406d8b56293b -Block 0029 [120]: d35bcaab27db2e2f -Block 0029 [121]: b83da5153feb2ebe -Block 0029 [122]: 2e7e8954d6c25e01 -Block 0029 [123]: bb47ee3b0fff9cc3 -Block 0029 [124]: 272cffa537b8710b -Block 0029 [125]: 57a15d3001de9398 -Block 0029 [126]: 2321da238e044e17 -Block 0029 [127]: a8bd886d88ba8cf4 -Block 0030 [ 0]: 6ecd3a74b8ca272f -Block 0030 [ 1]: b5dbd6ae9917542c -Block 0030 [ 2]: 92796d78d9eb12a5 -Block 0030 [ 3]: ce36aa84848aeb2b -Block 0030 [ 4]: b2fd7b2b1275d646 -Block 0030 [ 5]: 7924e2d5736dcb1f -Block 0030 [ 6]: dedf8fa9f053c3ce -Block 0030 [ 7]: 3704cd36cdc8489f -Block 0030 [ 8]: f439f82ca1402d2c -Block 0030 [ 9]: f0535c5815780519 -Block 0030 [ 10]: 301ee82afbb2f4f0 -Block 0030 [ 11]: c8cf2dbfae87a7b8 -Block 0030 [ 12]: 9788cfc325f465a2 -Block 0030 [ 13]: d16609c0ffedea6b -Block 0030 [ 14]: 2cd87900f24384b2 -Block 0030 [ 15]: bbd3b932af9756d4 -Block 0030 [ 16]: 4726092cb27622e5 -Block 0030 [ 17]: 23e7a536a9abdc04 -Block 0030 [ 18]: b85c68d32b08ac68 -Block 0030 [ 19]: 01c7cd213e0357bc -Block 0030 [ 20]: 520cbe46d040e8fe -Block 0030 [ 21]: 4e18b68037222145 -Block 0030 [ 22]: 9d0533780ec15042 -Block 0030 [ 23]: 6aa0998dfbd1fc5d -Block 0030 [ 24]: 34b8f0f77fb20531 -Block 0030 [ 25]: 4ced999c154dfcb4 -Block 0030 [ 26]: b9a91ee42ece1d4b -Block 0030 [ 27]: a64ca0a2413435a3 -Block 0030 [ 28]: a154c9bfe4dd0880 -Block 0030 [ 29]: a9319f178c7ad588 -Block 0030 [ 30]: 233d887655e00f93 -Block 0030 [ 31]: 0ee0c36c2966e538 -Block 0030 [ 32]: 00a6f9b7fb4cde72 -Block 0030 [ 33]: b6b0777f23d1b2ab -Block 0030 [ 34]: 006222e11286472e -Block 0030 [ 35]: 2fe7e3124ceef0d1 -Block 0030 [ 36]: ff6e89a72dcd81f3 -Block 0030 [ 37]: 2df079639e87e734 -Block 0030 [ 38]: fe888a1af0b870c5 -Block 0030 [ 39]: 77a5dbbea31587ae -Block 0030 [ 40]: 387f86968288fe9b -Block 0030 [ 41]: 262a7864cb6144ed -Block 0030 [ 42]: 077e0a154fa50c43 -Block 0030 [ 43]: 119043b23af44739 -Block 0030 [ 44]: b7aee252cad97cc0 -Block 0030 [ 45]: 711c23dd4c5a1695 -Block 0030 [ 46]: ed051bb2a391b7ce -Block 0030 [ 47]: e973e2a22e396475 -Block 0030 [ 48]: a0bc6bfa849824f3 -Block 0030 [ 49]: e9f7a93f57279b83 -Block 0030 [ 50]: acb04d04db307e5d -Block 0030 [ 51]: e3c2b1944e0aa0c4 -Block 0030 [ 52]: f84e30a19a08949d -Block 0030 [ 53]: aa41b6af0f7682a4 -Block 0030 [ 54]: d53e4ac5eec1401e -Block 0030 [ 55]: 8a4d7682c811c47d -Block 0030 [ 56]: 6b13be440a301a75 -Block 0030 [ 57]: fec09305aa9cb47f -Block 0030 [ 58]: 5b49e2e6139c6af5 -Block 0030 [ 59]: 54b9144ef244c041 -Block 0030 [ 60]: 37d475e4e8c7162f -Block 0030 [ 61]: cea7a663067c9675 -Block 0030 [ 62]: be5354eeb5e8a1e1 -Block 0030 [ 63]: e775a094cc07905a -Block 0030 [ 64]: 291d525c7f6b3a27 -Block 0030 [ 65]: 7bef57e5526868d6 -Block 0030 [ 66]: 6f54b6cdfeb7227f -Block 0030 [ 67]: 93282dd954e1bf49 -Block 0030 [ 68]: 57c18e7631bbc297 -Block 0030 [ 69]: c2d3178a04d2d48c -Block 0030 [ 70]: 44127507cdadbae6 -Block 0030 [ 71]: 1c3c2e2ecbbd89ad -Block 0030 [ 72]: 509c90bc050d19b7 -Block 0030 [ 73]: 464023c2557ea4c4 -Block 0030 [ 74]: d99c16a1de32e6a6 -Block 0030 [ 75]: ae0176330021ff02 -Block 0030 [ 76]: b3fe389546fd5b6c -Block 0030 [ 77]: 8498583a9577b1da -Block 0030 [ 78]: 915d4d61a3b08f7d -Block 0030 [ 79]: 3578b5b049de581b -Block 0030 [ 80]: a80612a42043a474 -Block 0030 [ 81]: a59df7ec56ed0e61 -Block 0030 [ 82]: ba3cf869d25aedc6 -Block 0030 [ 83]: 2049762e0d3ca8fc -Block 0030 [ 84]: 8d771e0161f3a0eb -Block 0030 [ 85]: 98d0872d072574e7 -Block 0030 [ 86]: 4cfe5d48b8c10515 -Block 0030 [ 87]: 50c9043d923a50c7 -Block 0030 [ 88]: 5c910292699c0b89 -Block 0030 [ 89]: 95e4bc9a8f04e102 -Block 0030 [ 90]: 47b404d915b1f09a -Block 0030 [ 91]: f310c30b79c434c5 -Block 0030 [ 92]: a32cfc80bfd999af -Block 0030 [ 93]: ba6fb895832005e7 -Block 0030 [ 94]: c940b07d4bbac8d8 -Block 0030 [ 95]: b927cacd864b8ef4 -Block 0030 [ 96]: 7f86cbec290ce150 -Block 0030 [ 97]: 44019f102bbc346c -Block 0030 [ 98]: f4922e3a79972b25 -Block 0030 [ 99]: 57a11cec2904209b -Block 0030 [100]: ed500a5896662d38 -Block 0030 [101]: 40a1e81c7710aebb -Block 0030 [102]: 0f7c55b652f43c6c -Block 0030 [103]: 76fa83f4935552b0 -Block 0030 [104]: fda0042a566c8419 -Block 0030 [105]: bc669a6b2f036242 -Block 0030 [106]: 5ea211557564cd1e -Block 0030 [107]: e2b66a7d127fb62d -Block 0030 [108]: fb0497bb58905fd3 -Block 0030 [109]: 9bf162918404c986 -Block 0030 [110]: dabc64ecba15c2a5 -Block 0030 [111]: ff69083ee852f81b -Block 0030 [112]: 3739cb3c2a316ae1 -Block 0030 [113]: 0914028c39ec51de -Block 0030 [114]: 38261471477e87eb -Block 0030 [115]: 09681ad936fd9609 -Block 0030 [116]: baba75611ec7f474 -Block 0030 [117]: 5a587814bbc26e41 -Block 0030 [118]: 7929e20b70736dbb -Block 0030 [119]: a1c3fe1ad20fccde -Block 0030 [120]: 40789b143639d83c -Block 0030 [121]: 1f54a0c9767d4704 -Block 0030 [122]: cf2fa83d66dd7b8c -Block 0030 [123]: e8d8978cbe11894d -Block 0030 [124]: 9c75ca73199f324b -Block 0030 [125]: 06818c0d4dd46001 -Block 0030 [126]: 4f10eefc69bd7d4e -Block 0030 [127]: 9c35ccb7d1b407a3 -Block 0031 [ 0]: 7b2c886a0becf8aa -Block 0031 [ 1]: a961a68cd9802059 -Block 0031 [ 2]: c17906242f91d148 -Block 0031 [ 3]: 07b5168a9ba5dc20 -Block 0031 [ 4]: 7aa37588acbb43f7 -Block 0031 [ 5]: 03b0d1e09eb1e873 -Block 0031 [ 6]: c12f280456f1599a -Block 0031 [ 7]: 1b9eb2aa25f4fe4a -Block 0031 [ 8]: 92a506c1c444d06c -Block 0031 [ 9]: ab0a55ef35918793 -Block 0031 [ 10]: af635b968f49a6ca -Block 0031 [ 11]: 314f6856774229fb -Block 0031 [ 12]: 588edd661fab5266 -Block 0031 [ 13]: 3067a959a20de573 -Block 0031 [ 14]: ce8587775df42928 -Block 0031 [ 15]: 998f789c66194f76 -Block 0031 [ 16]: fa5cefe6d2653f8c -Block 0031 [ 17]: c9e69ab9e1cca147 -Block 0031 [ 18]: aa8ea6e905228faa -Block 0031 [ 19]: ffaba13e3b61b88d -Block 0031 [ 20]: db2eaa23530363ea -Block 0031 [ 21]: a64096fddc020f87 -Block 0031 [ 22]: a35c94cbd4f04a9f -Block 0031 [ 23]: e8396a978198ec52 -Block 0031 [ 24]: 5e7a8437b42c9016 -Block 0031 [ 25]: f1c65654317c0508 -Block 0031 [ 26]: 08a818ddbf2a23fd -Block 0031 [ 27]: cb3ef670786fcae9 -Block 0031 [ 28]: e83f4fc405e1d49f -Block 0031 [ 29]: 94b089965afe8871 -Block 0031 [ 30]: 92008c2a75103b5a -Block 0031 [ 31]: c9ce40dcb0ae0fff -Block 0031 [ 32]: 31e7b05a84523cbe -Block 0031 [ 33]: 1b854b7afd4321aa -Block 0031 [ 34]: e611bbf67f403d94 -Block 0031 [ 35]: e7ddb82fcf732908 -Block 0031 [ 36]: 8afea8045337f395 -Block 0031 [ 37]: 5a4b29a0464a87fd -Block 0031 [ 38]: ddc4b39b66d51a4e -Block 0031 [ 39]: 8a962a2a7848e9c7 -Block 0031 [ 40]: c553d559a2dbc2f7 -Block 0031 [ 41]: f0d5b10beb21bccb -Block 0031 [ 42]: 29a8b6322d76864d -Block 0031 [ 43]: 30a6a1d4b043ee12 -Block 0031 [ 44]: 0f8698a6f49cbbf8 -Block 0031 [ 45]: 0271710fca1ae0e6 -Block 0031 [ 46]: 86b474e9cc978929 -Block 0031 [ 47]: 6381d0f8c249ca80 -Block 0031 [ 48]: ae93ff832984a78b -Block 0031 [ 49]: e3806eb3831109ab -Block 0031 [ 50]: c4bb916929ec7540 -Block 0031 [ 51]: 587ce5ea6a14b5af -Block 0031 [ 52]: 81ae14d279dd55ce -Block 0031 [ 53]: b4490e4a095cccc7 -Block 0031 [ 54]: b5b74756d1a47600 -Block 0031 [ 55]: 229f5aa2436f8fd4 -Block 0031 [ 56]: f4dda68045c81478 -Block 0031 [ 57]: d307c85dd48a2344 -Block 0031 [ 58]: 433ad4706e5d90f9 -Block 0031 [ 59]: e74575dbb844a038 -Block 0031 [ 60]: a89f0718e3393ce1 -Block 0031 [ 61]: 588fe47981e7946b -Block 0031 [ 62]: 6518231d42469f4a -Block 0031 [ 63]: 746c07f616058dfc -Block 0031 [ 64]: 3c968cf79bb87403 -Block 0031 [ 65]: 8c4cd47f02979496 -Block 0031 [ 66]: 0303646363f1dbe4 -Block 0031 [ 67]: dcdf94b5679bbdab -Block 0031 [ 68]: 8e92abfffa0073b0 -Block 0031 [ 69]: 712d21d6945e5d7d -Block 0031 [ 70]: 09114fac05fe6744 -Block 0031 [ 71]: 4568bcb4a9fa8b29 -Block 0031 [ 72]: 6608c183890263d6 -Block 0031 [ 73]: 1f74ccf6ab150884 -Block 0031 [ 74]: facdc83fa2c1c817 -Block 0031 [ 75]: 7ae035fa8ed0ce1b -Block 0031 [ 76]: 29f7d651507d76df -Block 0031 [ 77]: e73b4c7efb5671dc -Block 0031 [ 78]: c74deda09b63447d -Block 0031 [ 79]: 629a595aaa37a3c2 -Block 0031 [ 80]: 751fa8d3d07f1156 -Block 0031 [ 81]: 7c8a83446320004d -Block 0031 [ 82]: 993186df8a1ae482 -Block 0031 [ 83]: 6bf5f5c6071b66c1 -Block 0031 [ 84]: d495bb47b2ef1361 -Block 0031 [ 85]: 528404d7247a455f -Block 0031 [ 86]: 8cc33913d6ef8cb6 -Block 0031 [ 87]: 70c0b0ce7fefbd05 -Block 0031 [ 88]: a58a8a3c7c246774 -Block 0031 [ 89]: 2ffda09b4d88cb6b -Block 0031 [ 90]: 3fb07d2cd72192fd -Block 0031 [ 91]: 84689e06eb122836 -Block 0031 [ 92]: e2f659a255c97fc2 -Block 0031 [ 93]: a4e8983f8e3f2363 -Block 0031 [ 94]: f5c06cdf6ac58be1 -Block 0031 [ 95]: cce957feb8dc694e -Block 0031 [ 96]: 955f7bd29f980a3e -Block 0031 [ 97]: 5e6a9b06b958d9eb -Block 0031 [ 98]: 13e2ae511f9fcf95 -Block 0031 [ 99]: 7e90dc5738154a96 -Block 0031 [100]: 2fbff3198bc7dfbb -Block 0031 [101]: 029b171c3879b4e5 -Block 0031 [102]: 6b2e35fc0ec55726 -Block 0031 [103]: 8b7618296c29640b -Block 0031 [104]: aa6da19845af6feb -Block 0031 [105]: af2aab61252a6652 -Block 0031 [106]: 70107491337b1baf -Block 0031 [107]: d01fa41824afe775 -Block 0031 [108]: 2f49d846b7e7fde5 -Block 0031 [109]: 36de3a765cd99df7 -Block 0031 [110]: e1892ef5e7bf72e5 -Block 0031 [111]: cdb4e92f199df6f7 -Block 0031 [112]: ac68f1f63533a059 -Block 0031 [113]: 54d709cf88689da1 -Block 0031 [114]: d22355579e725146 -Block 0031 [115]: f68214076ccce3f6 -Block 0031 [116]: 061f07bc4b3f9526 -Block 0031 [117]: 93ca7252bd067ab8 -Block 0031 [118]: 25fac18a5fb39a86 -Block 0031 [119]: f823ae791d41fe57 -Block 0031 [120]: 5b72f046297886bc -Block 0031 [121]: cbae98da46154192 -Block 0031 [122]: c087b1a1b5ede419 -Block 0031 [123]: 2c05d9fa80a8f2ff -Block 0031 [124]: 3921a5c7788362de -Block 0031 [125]: e0b99140444ee63a -Block 0031 [126]: 9cb08bbd62f6ecb5 -Block 0031 [127]: 7863ba7c31e4780d - - After pass 2: -Block 0000 [ 0]: 074ffcc2d6211662 -Block 0000 [ 1]: 23dc267c4f3d1696 -Block 0000 [ 2]: 067781fb67b4a7cd -Block 0000 [ 3]: 4405600ea87c3236 -Block 0000 [ 4]: 5c7d7668ebdd0f48 -Block 0000 [ 5]: 2c158c83d6a8dfc6 -Block 0000 [ 6]: a51c8b5beac9a07b -Block 0000 [ 7]: 1cae283e1849d908 -Block 0000 [ 8]: 67d9e3f64caa972d -Block 0000 [ 9]: fc6754c829fc7cba -Block 0000 [ 10]: 017dfa540b6c9bc9 -Block 0000 [ 11]: 39b736ea7cdf7b0b -Block 0000 [ 12]: 1f37d704a41cb903 -Block 0000 [ 13]: 3aecddd32b254afa -Block 0000 [ 14]: 4700d23ff95830df -Block 0000 [ 15]: 8d21806d416feb40 -Block 0000 [ 16]: 5053c210b1f3f1a6 -Block 0000 [ 17]: c7cac96030349349 -Block 0000 [ 18]: b980e68ee8d6b5c0 -Block 0000 [ 19]: 02834d681a06cd74 -Block 0000 [ 20]: 02ac55d5bb3f15a2 -Block 0000 [ 21]: e67d07df976b00a1 -Block 0000 [ 22]: a439d570908a6dfc -Block 0000 [ 23]: 50f092cbe300c2fc -Block 0000 [ 24]: befdffab9975f1e4 -Block 0000 [ 25]: f4f4600d82cd417d -Block 0000 [ 26]: 17f6612758926fc5 -Block 0000 [ 27]: dfd8c28f34a09aed -Block 0000 [ 28]: 24584d701e1a84e2 -Block 0000 [ 29]: 47c5add8e8460639 -Block 0000 [ 30]: 0f9c8e1641cf56bb -Block 0000 [ 31]: 9ec95ca5bcff5620 -Block 0000 [ 32]: 97b7cdda0a711063 -Block 0000 [ 33]: 63853fcecb6b6b8a -Block 0000 [ 34]: 5df2cde7e36bafc7 -Block 0000 [ 35]: d7e0e9b81910dd50 -Block 0000 [ 36]: 399ac6865b269713 -Block 0000 [ 37]: 8376d957a91e502e -Block 0000 [ 38]: b9ccdb00eced58d8 -Block 0000 [ 39]: 0ca46bce53d80ec1 -Block 0000 [ 40]: 403e6af6dde5401a -Block 0000 [ 41]: 79041a1ee46d5de5 -Block 0000 [ 42]: 6478018547a45c10 -Block 0000 [ 43]: b586c73694a50ad5 -Block 0000 [ 44]: 19c09a72ffb077c6 -Block 0000 [ 45]: cd4ed30f1950c280 -Block 0000 [ 46]: 30a24c09eb9f26e3 -Block 0000 [ 47]: a5a3e3544f299ca2 -Block 0000 [ 48]: 4daf9512c147bf09 -Block 0000 [ 49]: 566c7455847c148f -Block 0000 [ 50]: 9d1b5569164a3cd2 -Block 0000 [ 51]: 89c678b2ab335957 -Block 0000 [ 52]: 32d2c5727eaa685b -Block 0000 [ 53]: 6cc29cae8d088214 -Block 0000 [ 54]: 217d81e9f0fefbe2 -Block 0000 [ 55]: 639ac623a21feded -Block 0000 [ 56]: 235e78e584141ede -Block 0000 [ 57]: 7919e75c6d3dab69 -Block 0000 [ 58]: 6a876509af846fd1 -Block 0000 [ 59]: 215a62e84a5dda9b -Block 0000 [ 60]: 1be8f91ab4628c1a -Block 0000 [ 61]: 1d6526223d2ce03d -Block 0000 [ 62]: a62350b8d2991ef3 -Block 0000 [ 63]: e3256eebc2e9743d -Block 0000 [ 64]: 7d3c911dde4b729d -Block 0000 [ 65]: bc30bb8cbadaea85 -Block 0000 [ 66]: b7794d58951616b7 -Block 0000 [ 67]: ba9d59b655e8426d -Block 0000 [ 68]: 3e84c80234db69df -Block 0000 [ 69]: 57c75d2442885b3c -Block 0000 [ 70]: 19abdeb8612da37f -Block 0000 [ 71]: ec8efaf2e2d2e65c -Block 0000 [ 72]: 87692796d1f2e210 -Block 0000 [ 73]: f6d623948e49ce7b -Block 0000 [ 74]: 8e96e29c9a2fa442 -Block 0000 [ 75]: 54bb73c34877db70 -Block 0000 [ 76]: 98dad77daadd139d -Block 0000 [ 77]: 0f794bfaf84e29b0 -Block 0000 [ 78]: 2b34a73157d7ef5c -Block 0000 [ 79]: 8ecb005134ac5b8a -Block 0000 [ 80]: 793d55e30eb5485c -Block 0000 [ 81]: de517434bcf0cafa -Block 0000 [ 82]: 7ea4f8ecbc183f32 -Block 0000 [ 83]: 72a35118ac328bce -Block 0000 [ 84]: f4275ff7a034f425 -Block 0000 [ 85]: e95a8c458757ffd0 -Block 0000 [ 86]: 64fd3ce6e85f934e -Block 0000 [ 87]: d9c027d06733c4e6 -Block 0000 [ 88]: 6e7eb7d2f3f4b2a4 -Block 0000 [ 89]: f6b9860481ea6f18 -Block 0000 [ 90]: 9d883d8955179f0c -Block 0000 [ 91]: b1ba223d9186b36f -Block 0000 [ 92]: 1989b62b3c499c02 -Block 0000 [ 93]: a292a87cacf94dc5 -Block 0000 [ 94]: ef8cd9123be7351f -Block 0000 [ 95]: 98c5673b3bb4e050 -Block 0000 [ 96]: 300366627841dc69 -Block 0000 [ 97]: 2834511a487aca0e -Block 0000 [ 98]: 0b4fa280d5e7967c -Block 0000 [ 99]: da97469d8738dfdb -Block 0000 [100]: d00c6e9085aba92a -Block 0000 [101]: 029e1930514f1d49 -Block 0000 [102]: 7749ba0fb768e9ef -Block 0000 [103]: 631f5377678c24ee -Block 0000 [104]: 7997bd3d7d2b3ddb -Block 0000 [105]: 63170d21238ffc00 -Block 0000 [106]: 4bae77aba388d1af -Block 0000 [107]: 9ff14fc9d20615f7 -Block 0000 [108]: 8cc4d7f451e5ea62 -Block 0000 [109]: d317157783a6278a -Block 0000 [110]: 4a0a192d4102224f -Block 0000 [111]: 56bda18173b56c75 -Block 0000 [112]: c194d8f1db07f888 -Block 0000 [113]: e08781cc46e76541 -Block 0000 [114]: d1104ae30639dc72 -Block 0000 [115]: 81f4c81422544029 -Block 0000 [116]: 36c3fbba9c223820 -Block 0000 [117]: fa92e2c95a6ac010 -Block 0000 [118]: 0e5e2a5f620020cc -Block 0000 [119]: b08063b69cd858eb -Block 0000 [120]: 63d32af9ea60f5c7 -Block 0000 [121]: 3815e273927c8b44 -Block 0000 [122]: 01aabcd9163ee1fb -Block 0000 [123]: 332241a4b6dd26a1 -Block 0000 [124]: b801a887e60e88b1 -Block 0000 [125]: 730a4b559c209261 -Block 0000 [126]: 6cef830772dad5c6 -Block 0000 [127]: b1080b96394ceb2b -Block 0001 [ 0]: 35578285c65e90fd -Block 0001 [ 1]: 4bb9cc0c6d2efc55 -Block 0001 [ 2]: 7baa171e89c44f1a -Block 0001 [ 3]: b5248ac1751059d1 -Block 0001 [ 4]: 6bad1484d694d0e0 -Block 0001 [ 5]: f93622b535148cc3 -Block 0001 [ 6]: 751a6fe829a61d29 -Block 0001 [ 7]: e8c3aca31e64ab54 -Block 0001 [ 8]: 93745f7637ef0a30 -Block 0001 [ 9]: a49ed01e2e6e0753 -Block 0001 [ 10]: c04456bd7e5bfd5b -Block 0001 [ 11]: 3a7cb2b5b5fa1bcd -Block 0001 [ 12]: 8ba5050fca0be409 -Block 0001 [ 13]: 0fe0d194cbe241b0 -Block 0001 [ 14]: f767dbead0b52cba -Block 0001 [ 15]: 35e72a7bb50d7144 -Block 0001 [ 16]: 143a86cf490b4b49 -Block 0001 [ 17]: 3ceb93f75eacf023 -Block 0001 [ 18]: 55f78adb9892524b -Block 0001 [ 19]: 97a9c8c671792a2b -Block 0001 [ 20]: bd930f3e27a8e299 -Block 0001 [ 21]: f48dc858d7623a19 -Block 0001 [ 22]: e4dc1f425b078cd9 -Block 0001 [ 23]: 40abe54c27a1df54 -Block 0001 [ 24]: 0f13ecb6b1f801ae -Block 0001 [ 25]: 40e76bbc9e8e0359 -Block 0001 [ 26]: 5a1fba7aa341f9fb -Block 0001 [ 27]: f6cb6c0dc939b786 -Block 0001 [ 28]: 5f3163fc202e2c15 -Block 0001 [ 29]: a060056daefacd6d -Block 0001 [ 30]: 962582e26876c45d -Block 0001 [ 31]: 8f2ae61de120c15c -Block 0001 [ 32]: 1798a6b18d5df0fa -Block 0001 [ 33]: f35379efc89f3185 -Block 0001 [ 34]: 9aa653f4d27037d4 -Block 0001 [ 35]: f55d25a85ef70083 -Block 0001 [ 36]: e0b5fa445529ad98 -Block 0001 [ 37]: 90cd2452561901c0 -Block 0001 [ 38]: e13e29ac39c5c75b -Block 0001 [ 39]: 3b5f3754b72ad946 -Block 0001 [ 40]: 0b74c97f8530631e -Block 0001 [ 41]: f205c031d6eab47a -Block 0001 [ 42]: 0392f102d95bedd0 -Block 0001 [ 43]: df8cc06fd357b932 -Block 0001 [ 44]: adba22945f6ea54b -Block 0001 [ 45]: 245c28eb786846fc -Block 0001 [ 46]: 1374137daa585fa4 -Block 0001 [ 47]: 9bbfdb864d4a44a4 -Block 0001 [ 48]: fa43c6b21ca5e381 -Block 0001 [ 49]: 7fcd01d29f0cf1b5 -Block 0001 [ 50]: 26ed604d9cccb91d -Block 0001 [ 51]: 61f83421bd6c1f23 -Block 0001 [ 52]: 1f8b6d81b8e3e293 -Block 0001 [ 53]: ae720a3cd9e026e1 -Block 0001 [ 54]: 799793cee15b9fcc -Block 0001 [ 55]: 50a2920934111544 -Block 0001 [ 56]: ae98b61798fe4197 -Block 0001 [ 57]: d09b498bcc92caa4 -Block 0001 [ 58]: 626405a3f141ac39 -Block 0001 [ 59]: 3b8fc5a9403eff81 -Block 0001 [ 60]: 26be736898a3d356 -Block 0001 [ 61]: fec9b55fe7400706 -Block 0001 [ 62]: 7b42f7e3dc25495d -Block 0001 [ 63]: 0ad2b5ac04f2455a -Block 0001 [ 64]: f9cee4116bb71092 -Block 0001 [ 65]: 017640c28e88caf5 -Block 0001 [ 66]: 4d9a590bd7959d08 -Block 0001 [ 67]: e0889cdd7e722e2b -Block 0001 [ 68]: b864c81b4f0a72ab -Block 0001 [ 69]: f13be1af5f968168 -Block 0001 [ 70]: a18c60f1bca699b5 -Block 0001 [ 71]: b0d6efd7f979ab4b -Block 0001 [ 72]: 44251fa7bd97a8ec -Block 0001 [ 73]: 80fc637798575c3d -Block 0001 [ 74]: b49d9f0a356332a0 -Block 0001 [ 75]: 577788eb3e3cde4e -Block 0001 [ 76]: 4b0f73f577b3bf93 -Block 0001 [ 77]: 0703cffd01ec20c4 -Block 0001 [ 78]: 57b7fad9a047f157 -Block 0001 [ 79]: 3d4a385b573bf8f4 -Block 0001 [ 80]: 3ec7cd6e9a586917 -Block 0001 [ 81]: 30502a8f0d6b3b3b -Block 0001 [ 82]: 5827740f69f6ed7e -Block 0001 [ 83]: e772f948ef87d9e8 -Block 0001 [ 84]: 113292b8eb726923 -Block 0001 [ 85]: e1a0f99b9b4c7f45 -Block 0001 [ 86]: 849ca6d49a8beb6f -Block 0001 [ 87]: 899e64706cc6cc22 -Block 0001 [ 88]: 762aac2687b27c1e -Block 0001 [ 89]: bec687a1a0ff5f67 -Block 0001 [ 90]: a6d0d4c0dd017184 -Block 0001 [ 91]: 7184b936a5192649 -Block 0001 [ 92]: 8a0b189778c5c2f9 -Block 0001 [ 93]: 388c8aa99414a343 -Block 0001 [ 94]: bfa9e7e8b944a012 -Block 0001 [ 95]: 0bec06d22c5cbc68 -Block 0001 [ 96]: 48cf01fc006a932a -Block 0001 [ 97]: 4eca2a3ce6a9ede5 -Block 0001 [ 98]: 5de361340ad870d4 -Block 0001 [ 99]: 991c300d989769b7 -Block 0001 [100]: e81e6ff5168dea46 -Block 0001 [101]: b80b74c2dea3598b -Block 0001 [102]: 4178c7a329ec33f9 -Block 0001 [103]: 821b69f7ec159cb4 -Block 0001 [104]: 3fbcf7aed8b16057 -Block 0001 [105]: 8ff6fd8c8dbb7d97 -Block 0001 [106]: 00999cc3dfd68ed5 -Block 0001 [107]: 4b1125750e10c124 -Block 0001 [108]: c4faa4346465f470 -Block 0001 [109]: 9228b997dec487a9 -Block 0001 [110]: 7a77a1f7775085a7 -Block 0001 [111]: 76c87a4eb0814378 -Block 0001 [112]: 9d1dc217f8205567 -Block 0001 [113]: 192082947d040aff -Block 0001 [114]: 835a0e7dc57147a4 -Block 0001 [115]: d658d49131e2034f -Block 0001 [116]: 8178295354854b4b -Block 0001 [117]: 546509eed0804fd2 -Block 0001 [118]: dad30f4cad39632f -Block 0001 [119]: 7067a93d88b400b3 -Block 0001 [120]: f208ab50a921620b -Block 0001 [121]: 11d3c5a308076062 -Block 0001 [122]: 66cc7ff9c93e6d86 -Block 0001 [123]: d6d88bbd8f39f66a -Block 0001 [124]: 2267ded47cd0fd58 -Block 0001 [125]: 3f54c246e26607c7 -Block 0001 [126]: 90549bbe29fd6b8b -Block 0001 [127]: 13ee9844392f8eb3 -Block 0002 [ 0]: 73d51d413b4c53d0 -Block 0002 [ 1]: 76ae856cbdb336a0 -Block 0002 [ 2]: af1b19667ebc609b -Block 0002 [ 3]: 79e1597f33187d55 -Block 0002 [ 4]: 6a65de429602a2a3 -Block 0002 [ 5]: f1143254e35f0f75 -Block 0002 [ 6]: e8e367d45b989e55 -Block 0002 [ 7]: 7bcd857863800596 -Block 0002 [ 8]: a849576915058869 -Block 0002 [ 9]: 84e96cfd017f8259 -Block 0002 [ 10]: 5faa617589a4bb6e -Block 0002 [ 11]: 9779d55b049906f4 -Block 0002 [ 12]: bf6b51a7c73464ac -Block 0002 [ 13]: d1362f3e2c38a1fc -Block 0002 [ 14]: 1f009be2c745a955 -Block 0002 [ 15]: a9cf27c109ab7ae6 -Block 0002 [ 16]: 9bae95cb88fd2bfd -Block 0002 [ 17]: aa3fc5e576e3f2e9 -Block 0002 [ 18]: 727a888a9cdf5d82 -Block 0002 [ 19]: e29325278794849d -Block 0002 [ 20]: aa579a642dc5efc0 -Block 0002 [ 21]: e64d2aa10ca93a83 -Block 0002 [ 22]: fbf9a497307c6789 -Block 0002 [ 23]: 63dec585b76b0e36 -Block 0002 [ 24]: 9914fe6ae8f7902e -Block 0002 [ 25]: 9f183f1f898a2eec -Block 0002 [ 26]: 871dd6f0c5ed7391 -Block 0002 [ 27]: 6a998c598e62d632 -Block 0002 [ 28]: ae4fb7d7d044a498 -Block 0002 [ 29]: 45bb02b68c94dabe -Block 0002 [ 30]: 0ee5b5b2a12fedcb -Block 0002 [ 31]: f81100966671170e -Block 0002 [ 32]: bc10a0e55f0581e3 -Block 0002 [ 33]: 59fa2ae5ae73bc1a -Block 0002 [ 34]: 8734ef9fd26b2592 -Block 0002 [ 35]: 8b1125062051701d -Block 0002 [ 36]: b8e68fc7dfe6e175 -Block 0002 [ 37]: 4e350c55108d1b95 -Block 0002 [ 38]: a92a1a6e50453305 -Block 0002 [ 39]: 12ae32bee16cbc4b -Block 0002 [ 40]: e63b524d74f88184 -Block 0002 [ 41]: 1c32b08c95f570e2 -Block 0002 [ 42]: e1f63121e0c49256 -Block 0002 [ 43]: e8908ea1b577e153 -Block 0002 [ 44]: bf670a809c56f86a -Block 0002 [ 45]: 0bd87114ea78aa82 -Block 0002 [ 46]: a5f83d398c0518c8 -Block 0002 [ 47]: caf9fc4fd0d13fac -Block 0002 [ 48]: 87dc556761c3b84e -Block 0002 [ 49]: b271d201d69d87ba -Block 0002 [ 50]: 60afbeeb05e32ce6 -Block 0002 [ 51]: 3f7d0c4c77690400 -Block 0002 [ 52]: 827402ca4c4b7568 -Block 0002 [ 53]: cc1490ac87cae9ab -Block 0002 [ 54]: 5f0c0be02bfee0d6 -Block 0002 [ 55]: ee55646ea303f7ee -Block 0002 [ 56]: 760b0ef4f4be1085 -Block 0002 [ 57]: f6e1dda0ba5aa3ec -Block 0002 [ 58]: 64d813c90f235d07 -Block 0002 [ 59]: 7e243d64c004d7cf -Block 0002 [ 60]: 9ba0e4619f9321b1 -Block 0002 [ 61]: 9af7d15278ce6e9c -Block 0002 [ 62]: 84429fe41e908a5f -Block 0002 [ 63]: 087d31f94451179a -Block 0002 [ 64]: 6bd8e211a6776757 -Block 0002 [ 65]: bce0156f33df21ff -Block 0002 [ 66]: b89d728cb0ea1478 -Block 0002 [ 67]: 1d38586723a2aaf6 -Block 0002 [ 68]: 7fdf415d588153a9 -Block 0002 [ 69]: 784414ab43287466 -Block 0002 [ 70]: 7549c68a0508a290 -Block 0002 [ 71]: fb6e20ff908acfbc -Block 0002 [ 72]: 1b7ea5812d994dd2 -Block 0002 [ 73]: eceb8fb8ecc00544 -Block 0002 [ 74]: 6a1db08dcf131415 -Block 0002 [ 75]: ef12b7be1c98f06d -Block 0002 [ 76]: 4bab0815544ff51c -Block 0002 [ 77]: d7005204797a3a09 -Block 0002 [ 78]: 3a62509e74742fb6 -Block 0002 [ 79]: d299457155448ac2 -Block 0002 [ 80]: 97f4f9620deb14f3 -Block 0002 [ 81]: 569cd97b9e8554b1 -Block 0002 [ 82]: 971aa2f58c986a44 -Block 0002 [ 83]: d2462db7dd1dc03f -Block 0002 [ 84]: f0709d7bc71246be -Block 0002 [ 85]: 0b25b74b0b86e738 -Block 0002 [ 86]: b685b14a81c45aa8 -Block 0002 [ 87]: 1a512dc11da0a043 -Block 0002 [ 88]: 47b0149e3e3ac09c -Block 0002 [ 89]: 675a13653235da5d -Block 0002 [ 90]: 79cd73d9561f7abe -Block 0002 [ 91]: 2b7e85da8095a630 -Block 0002 [ 92]: ea9ee50b427a24f0 -Block 0002 [ 93]: cf3a906fc784dee6 -Block 0002 [ 94]: c5e846fbb3cef89b -Block 0002 [ 95]: d2e00082f5bd5d75 -Block 0002 [ 96]: 311bc46892a29e3f -Block 0002 [ 97]: 5404eee07dffcd46 -Block 0002 [ 98]: 793df68160ff5272 -Block 0002 [ 99]: 9cf21ecd74a09c05 -Block 0002 [100]: 97c651e1b57fe890 -Block 0002 [101]: d21b4652fdaa71aa -Block 0002 [102]: f62616d527da1b00 -Block 0002 [103]: 8111d5ef7eb2fd3d -Block 0002 [104]: 88bc12e37dfb1f51 -Block 0002 [105]: 706b7a1d6384bf60 -Block 0002 [106]: 1bc22344df9219a0 -Block 0002 [107]: 8f7ca7a93c0cc2f3 -Block 0002 [108]: 4f45b8e0a2529942 -Block 0002 [109]: e7b00d653cf2f13c -Block 0002 [110]: 67187d7826c89513 -Block 0002 [111]: 7754f65a9f702ba5 -Block 0002 [112]: 68a5bfea171493cc -Block 0002 [113]: deb3870509d40d3e -Block 0002 [114]: fb3690dee5a3fc15 -Block 0002 [115]: 02f3a66dbad140a3 -Block 0002 [116]: 44b70f1d0eabf627 -Block 0002 [117]: a57ce8e7d9cc1fce -Block 0002 [118]: 6831b2965eebf76f -Block 0002 [119]: 05303f957ebaf718 -Block 0002 [120]: 17a65879d3fb0003 -Block 0002 [121]: 6ab65ffaea096928 -Block 0002 [122]: 2164657f763a5dbe -Block 0002 [123]: 1d8072135dc98a7a -Block 0002 [124]: d2b2f7a5744d25b7 -Block 0002 [125]: 71314040af09b83d -Block 0002 [126]: 2f73ab3da08b6618 -Block 0002 [127]: 801c6c6324986446 -Block 0003 [ 0]: 64732568928f828e -Block 0003 [ 1]: f0e835abec79b14c -Block 0003 [ 2]: 4207566a57dafdc0 -Block 0003 [ 3]: 8c7214adc4de6a5c -Block 0003 [ 4]: 1ba9060d3fdbd2b1 -Block 0003 [ 5]: c283b201aaed5725 -Block 0003 [ 6]: fd7e524200d55194 -Block 0003 [ 7]: 9cad3f8488691d33 -Block 0003 [ 8]: f24250ba766eeea0 -Block 0003 [ 9]: 4dafb4ca2313c16a -Block 0003 [ 10]: fc1b1fdb788694d4 -Block 0003 [ 11]: fa314a001d805b18 -Block 0003 [ 12]: fc9b8a9e15eedbd6 -Block 0003 [ 13]: c1a95d732ea90450 -Block 0003 [ 14]: 747798647d3da8ee -Block 0003 [ 15]: b5486a8fabc5c299 -Block 0003 [ 16]: 23ff76548af23c21 -Block 0003 [ 17]: f662e50172dc06b4 -Block 0003 [ 18]: b99fe04efacbabc9 -Block 0003 [ 19]: 030c683e8be4b57e -Block 0003 [ 20]: c7d04e1e2f7eb1b7 -Block 0003 [ 21]: 06c758882e33c1d4 -Block 0003 [ 22]: 6ea19794559d0bac -Block 0003 [ 23]: 1f80b0b09de7b6cf -Block 0003 [ 24]: d46987c238db6213 -Block 0003 [ 25]: f0f363d487c64c01 -Block 0003 [ 26]: b20cf91dc47ee91c -Block 0003 [ 27]: 48fac840c62f466a -Block 0003 [ 28]: c7104baed50fbd2e -Block 0003 [ 29]: 7a7565f6163eb33e -Block 0003 [ 30]: baf293590025e736 -Block 0003 [ 31]: 638ddb2a0dcf89aa -Block 0003 [ 32]: 0bf1d84cd8c9548f -Block 0003 [ 33]: e173ce50e3ac7125 -Block 0003 [ 34]: 431a7a3b7020cd23 -Block 0003 [ 35]: 7312ca0186fcccac -Block 0003 [ 36]: 9c93dd7716859719 -Block 0003 [ 37]: b53476d68465f248 -Block 0003 [ 38]: 2c8ae3759ff45f6c -Block 0003 [ 39]: 89f858e6b950a51b -Block 0003 [ 40]: c024f8b01f375725 -Block 0003 [ 41]: e17760ffe78506fe -Block 0003 [ 42]: 67f71589fa342748 -Block 0003 [ 43]: c2bfb19181a1b336 -Block 0003 [ 44]: b117ceec5935ffec -Block 0003 [ 45]: 14e0f64aa4d6a5b3 -Block 0003 [ 46]: 5a03026316942429 -Block 0003 [ 47]: 788e7c14dbe17ab5 -Block 0003 [ 48]: 8e0eb445c3d928e8 -Block 0003 [ 49]: 523f883054d18325 -Block 0003 [ 50]: eb0bf194d4800e32 -Block 0003 [ 51]: 777275d6cc00e7fb -Block 0003 [ 52]: dca496f17a00aafe -Block 0003 [ 53]: 9cb2d38eec372050 -Block 0003 [ 54]: 4f93385cf1076d07 -Block 0003 [ 55]: fdc58139d57e6687 -Block 0003 [ 56]: 7e615f13e128b1bc -Block 0003 [ 57]: 4fb44deb8bbf5c5c -Block 0003 [ 58]: 54c6683b193dea25 -Block 0003 [ 59]: ca828ff49ea7ed7b -Block 0003 [ 60]: 23ef27dd6876b365 -Block 0003 [ 61]: 7b76f0bf2bc26e1c -Block 0003 [ 62]: eae5d4ac7f7144bf -Block 0003 [ 63]: b1f9099b11ededcc -Block 0003 [ 64]: 32cc9c81f017ba0e -Block 0003 [ 65]: 5b2444503a200158 -Block 0003 [ 66]: cecc6fc191799aae -Block 0003 [ 67]: d21109299e87add6 -Block 0003 [ 68]: 9a62b1fa3f2a5bb0 -Block 0003 [ 69]: 879d63a256449f83 -Block 0003 [ 70]: c4648ef65d063255 -Block 0003 [ 71]: ed478356d2d62771 -Block 0003 [ 72]: 0e26ca78fe098d30 -Block 0003 [ 73]: 40072329c48e1ec8 -Block 0003 [ 74]: 07e5bd63f3304854 -Block 0003 [ 75]: fb34638a5201ce10 -Block 0003 [ 76]: a951299757c793b0 -Block 0003 [ 77]: e368d57abe74ff7b -Block 0003 [ 78]: 85ec98ccb26290e7 -Block 0003 [ 79]: 53459ad4acf2da65 -Block 0003 [ 80]: c98a78858f14d347 -Block 0003 [ 81]: 9d8b22547d48916b -Block 0003 [ 82]: 80d0e8f5f215b88c -Block 0003 [ 83]: 5edbf7bcd02fd162 -Block 0003 [ 84]: 9954d82dec3ca03a -Block 0003 [ 85]: 444b538378d0a5d6 -Block 0003 [ 86]: 606066967cda56db -Block 0003 [ 87]: d7d491715b473467 -Block 0003 [ 88]: a6d02b9ecc8ff032 -Block 0003 [ 89]: 0595036c7117a22c -Block 0003 [ 90]: 11180cf417129d6d -Block 0003 [ 91]: aea26c1f97481b9c -Block 0003 [ 92]: cc45377f1ae1c8ee -Block 0003 [ 93]: 966793a197ca6057 -Block 0003 [ 94]: 85ac7fe90fb11019 -Block 0003 [ 95]: af2078d3ede0a983 -Block 0003 [ 96]: 7958ec6a4835c1ce -Block 0003 [ 97]: 9c2a859b73a07937 -Block 0003 [ 98]: 8b115dcfc1d79139 -Block 0003 [ 99]: 53094bc763b39413 -Block 0003 [100]: 9750583002d83564 -Block 0003 [101]: a4c554841aa2f5da -Block 0003 [102]: b3917593d039083b -Block 0003 [103]: 06f729fc1fb672ed -Block 0003 [104]: 038cd42a493d0293 -Block 0003 [105]: e20cde867860f38e -Block 0003 [106]: 62690da6b7c25ae7 -Block 0003 [107]: bd660101bac5a274 -Block 0003 [108]: 3523ebeb30ac0d6a -Block 0003 [109]: 76d94c2febc0f225 -Block 0003 [110]: 212d2f1a307cd09b -Block 0003 [111]: cb71474dc2bddc34 -Block 0003 [112]: 0cedb05f7f3999b7 -Block 0003 [113]: 59d49b2bdc5ff79f -Block 0003 [114]: 8f41dad377f98ea4 -Block 0003 [115]: 7e8c4f12f658b1be -Block 0003 [116]: b9ed73dd3c09bc2a -Block 0003 [117]: 4d70b50bf9f67b7c -Block 0003 [118]: b16376113c6b3388 -Block 0003 [119]: 1959de6ed1ea5ef7 -Block 0003 [120]: 2d05696db2182ffe -Block 0003 [121]: 0614bd82fda3c718 -Block 0003 [122]: 992fbd510b5095a3 -Block 0003 [123]: 6064c37e3677f6a8 -Block 0003 [124]: 5400f81ee75febe5 -Block 0003 [125]: e4ea20163ed41feb -Block 0003 [126]: aad145432d99ce84 -Block 0003 [127]: 28ca037ca0c948b5 -Block 0004 [ 0]: 9537a8d571e14dd2 -Block 0004 [ 1]: 4dc0ad51cc92ed8a -Block 0004 [ 2]: 55bd4ba9424aa6ff -Block 0004 [ 3]: a744762b554e1ec3 -Block 0004 [ 4]: d8320c91f51a677a -Block 0004 [ 5]: b2cf00025f31b59d -Block 0004 [ 6]: 01ae36ad13a305d4 -Block 0004 [ 7]: b9b9767808ea9c62 -Block 0004 [ 8]: 713d9125c3306797 -Block 0004 [ 9]: b61665cce9e83699 -Block 0004 [ 10]: 325d6eb6798a8584 -Block 0004 [ 11]: 4f07c3d6a680f5c2 -Block 0004 [ 12]: 0a09f03b8ce46486 -Block 0004 [ 13]: 6286566c595fba0b -Block 0004 [ 14]: e1ebe6e6c31431e8 -Block 0004 [ 15]: ffe04f39685d0461 -Block 0004 [ 16]: 53ca4927ae552083 -Block 0004 [ 17]: bfc0ac7bbfb0a523 -Block 0004 [ 18]: ef7007a863c595fa -Block 0004 [ 19]: 7843cde5fe943990 -Block 0004 [ 20]: bf2f584814389b08 -Block 0004 [ 21]: ed568f494f3b7f31 -Block 0004 [ 22]: 1504344614110bca -Block 0004 [ 23]: 993f1f0f045854bc -Block 0004 [ 24]: 158161730b7a01f5 -Block 0004 [ 25]: cedec86d0c6474f2 -Block 0004 [ 26]: 61277594ce55e9ef -Block 0004 [ 27]: 1ac9623722103320 -Block 0004 [ 28]: e0b1f7ff25d63fca -Block 0004 [ 29]: 561a1d0cfb2f7d0a -Block 0004 [ 30]: 9485584b613ae3fd -Block 0004 [ 31]: 23ef53706164ff5c -Block 0004 [ 32]: d75b09f417d430c0 -Block 0004 [ 33]: ff8b028717907100 -Block 0004 [ 34]: 875111393d253da7 -Block 0004 [ 35]: f458ee5ba05a9b78 -Block 0004 [ 36]: d33a40a8a389fbb5 -Block 0004 [ 37]: 89405e2c0126e397 -Block 0004 [ 38]: f0624eaf3617dd35 -Block 0004 [ 39]: 3339d799ca9fa273 -Block 0004 [ 40]: 7fa3e0e496d8d9b5 -Block 0004 [ 41]: 1cec3be146a79491 -Block 0004 [ 42]: bb4f051657fd1e2b -Block 0004 [ 43]: af33959d559547bc -Block 0004 [ 44]: fb6dd05eee469853 -Block 0004 [ 45]: f8ba2f1392589c80 -Block 0004 [ 46]: 5fc140faa08de7a8 -Block 0004 [ 47]: 4b3fdd5510eac7c7 -Block 0004 [ 48]: 29f31eed05b8526c -Block 0004 [ 49]: e5a75fce6e74c1d6 -Block 0004 [ 50]: 9ebca9c5b0e88888 -Block 0004 [ 51]: 54012deed102f6e8 -Block 0004 [ 52]: dc6aa4029c0feedd -Block 0004 [ 53]: b82cab65e5d81650 -Block 0004 [ 54]: 665ab42e1780c04f -Block 0004 [ 55]: 8336681730e97b0b -Block 0004 [ 56]: d9cc84a4b22d9b68 -Block 0004 [ 57]: b292fc773296606a -Block 0004 [ 58]: 32fadadded74ff6d -Block 0004 [ 59]: 5e255ad5bd09fd79 -Block 0004 [ 60]: 1c5d99287c2d81e4 -Block 0004 [ 61]: b21f3fddabcc79be -Block 0004 [ 62]: c2d4470091d2a399 -Block 0004 [ 63]: 4989fa7d69a80f25 -Block 0004 [ 64]: aa69da87b7db456a -Block 0004 [ 65]: 51fde513e2f7d7ae -Block 0004 [ 66]: 812d57ccc291d970 -Block 0004 [ 67]: 25b973a25beb11c3 -Block 0004 [ 68]: fee862dbadbf76ce -Block 0004 [ 69]: 04dbf43ecbf53aa8 -Block 0004 [ 70]: ccdc2c2b573af1f3 -Block 0004 [ 71]: e4b32bf0e0bfeaa6 -Block 0004 [ 72]: 3a3879ec1c6e004b -Block 0004 [ 73]: 107f4958b25af714 -Block 0004 [ 74]: fa4e0c74a0ee9e83 -Block 0004 [ 75]: 911bccc813b79cf6 -Block 0004 [ 76]: b497c614eb3a8c6c -Block 0004 [ 77]: d7a01e12f35f6e00 -Block 0004 [ 78]: c99ff61e804121dd -Block 0004 [ 79]: e3d05657ff5b4f90 -Block 0004 [ 80]: e48828629f5aed9f -Block 0004 [ 81]: cdc8aff4caa1f315 -Block 0004 [ 82]: 9013a736ab5fa851 -Block 0004 [ 83]: cbb8c9c276816950 -Block 0004 [ 84]: a67ece7c71b7ad02 -Block 0004 [ 85]: a0ed8a4f128f6ecb -Block 0004 [ 86]: fb62d4c0d755d0fc -Block 0004 [ 87]: 1091699fdab67e95 -Block 0004 [ 88]: 901d7aa388933dd5 -Block 0004 [ 89]: ba0ad9b7db68b704 -Block 0004 [ 90]: c8b46edf36578856 -Block 0004 [ 91]: b3d87a4ec5ff3a2d -Block 0004 [ 92]: 9c7d3eea8191b86d -Block 0004 [ 93]: 3f791b6883190899 -Block 0004 [ 94]: b694aa889c99fa7b -Block 0004 [ 95]: c42559f1608034fd -Block 0004 [ 96]: 5557e364bfd0674d -Block 0004 [ 97]: 9dbade36191fd2c0 -Block 0004 [ 98]: 1a47f258bc00bd52 -Block 0004 [ 99]: 56e4f50be8c33e69 -Block 0004 [100]: ee6c8f3e30c52581 -Block 0004 [101]: b6302207b64d8ed2 -Block 0004 [102]: 681bcd0107359d8a -Block 0004 [103]: 738a0384b182ac67 -Block 0004 [104]: 4941db6da14bf8f3 -Block 0004 [105]: 6ddf9e01ffd4cfc6 -Block 0004 [106]: b9fd089568236f38 -Block 0004 [107]: ea9a02ed74d0ce66 -Block 0004 [108]: b7c398164d2cec98 -Block 0004 [109]: 074b120be92e77e2 -Block 0004 [110]: 21554e4a0007f53a -Block 0004 [111]: 40bf8073b9818922 -Block 0004 [112]: af2b47782b6e69aa -Block 0004 [113]: 689a3140a931152c -Block 0004 [114]: ef127931b979b81f -Block 0004 [115]: 333d56e7771fde6d -Block 0004 [116]: d7dac660115eb2fe -Block 0004 [117]: 783f0447b10b0687 -Block 0004 [118]: 839287fa51814963 -Block 0004 [119]: 51fd8c9d26d2cfa6 -Block 0004 [120]: 98096c3229af0623 -Block 0004 [121]: f1e44616cf83a89d -Block 0004 [122]: d7dee4c489526646 -Block 0004 [123]: d1ff564c6e0cd950 -Block 0004 [124]: 4fafa266ced52aa7 -Block 0004 [125]: 22498eba46a04ef8 -Block 0004 [126]: 45b609663e3b7ce3 -Block 0004 [127]: ee22f7dd21561ac8 -Block 0005 [ 0]: 3cd2e94de90ca481 -Block 0005 [ 1]: dfba8ebdd159db11 -Block 0005 [ 2]: d4d9c891fc74618d -Block 0005 [ 3]: ee4a8995ad390d5b -Block 0005 [ 4]: 2dfbe3d914219e1d -Block 0005 [ 5]: 55649cca2df44184 -Block 0005 [ 6]: d08257933ed59497 -Block 0005 [ 7]: eef09b6cde6aa023 -Block 0005 [ 8]: 9470b40a38496b22 -Block 0005 [ 9]: 8b63c69dc20b94f3 -Block 0005 [ 10]: ab67bd14275990f4 -Block 0005 [ 11]: 278328cc9a689607 -Block 0005 [ 12]: 45bd50f8323de809 -Block 0005 [ 13]: e006cfe9893815ff -Block 0005 [ 14]: 7e7f1ea102228e0c -Block 0005 [ 15]: def383cbb711f355 -Block 0005 [ 16]: 375621a2ad73a6cb -Block 0005 [ 17]: 9e84a59a85925193 -Block 0005 [ 18]: 1447a30c4d2aee4a -Block 0005 [ 19]: 6654b312db275611 -Block 0005 [ 20]: d31d748bee47a017 -Block 0005 [ 21]: 510443570050a8f3 -Block 0005 [ 22]: ea626416bd3fa29e -Block 0005 [ 23]: 3c2cd53b276cd524 -Block 0005 [ 24]: 2b2083e1d220c4d8 -Block 0005 [ 25]: d94599d6f3785390 -Block 0005 [ 26]: 67dad7e6c48ebb00 -Block 0005 [ 27]: 6b92998802e30c96 -Block 0005 [ 28]: 645b1010baac196f -Block 0005 [ 29]: cf4282c3a8ef150c -Block 0005 [ 30]: 5cea9998241d0b66 -Block 0005 [ 31]: 1da03fc4761ee079 -Block 0005 [ 32]: 85544e5a0e0a40a7 -Block 0005 [ 33]: 7d2c97e52be32169 -Block 0005 [ 34]: eaa643ad41ed1c8a -Block 0005 [ 35]: 8e3a28e84a0d15b3 -Block 0005 [ 36]: 98ca6c4cde9f092b -Block 0005 [ 37]: c8397eff8a335a64 -Block 0005 [ 38]: bab0e00748aa1acc -Block 0005 [ 39]: 6979089506d97131 -Block 0005 [ 40]: 35fdb48046953cdd -Block 0005 [ 41]: e9329191b9f4586c -Block 0005 [ 42]: d8615adbab425d2f -Block 0005 [ 43]: 272a1a2d7a7e1554 -Block 0005 [ 44]: 74df2fecf4828a47 -Block 0005 [ 45]: 8d18d4efcd6b5999 -Block 0005 [ 46]: 026aa3c4d8365938 -Block 0005 [ 47]: cdc6eb20428ed057 -Block 0005 [ 48]: 587b106898200c89 -Block 0005 [ 49]: e4cbb4cc3292d8e4 -Block 0005 [ 50]: 8cd19eec986586e6 -Block 0005 [ 51]: 2dc92fc62f91f407 -Block 0005 [ 52]: 1995b751c561d8ed -Block 0005 [ 53]: a354a2cb47fb6d52 -Block 0005 [ 54]: 1edbaac5c88a5409 -Block 0005 [ 55]: 0603484ad13feb48 -Block 0005 [ 56]: 055a26aa8ba641be -Block 0005 [ 57]: 84df1bd3ba8e553e -Block 0005 [ 58]: 7b6863e87b5c4889 -Block 0005 [ 59]: 1f2f946a3193a989 -Block 0005 [ 60]: 5c41ad6c9307af04 -Block 0005 [ 61]: 51b014b4202c9e6c -Block 0005 [ 62]: bcd2327d0fc577eb -Block 0005 [ 63]: c707c191c590c79e -Block 0005 [ 64]: 57257237320ff10a -Block 0005 [ 65]: e48199dfc56bb7f0 -Block 0005 [ 66]: a05ab88148b58f38 -Block 0005 [ 67]: a82063473bd88e71 -Block 0005 [ 68]: 7ce490d805eb0802 -Block 0005 [ 69]: da09b404a4fd5d59 -Block 0005 [ 70]: 796b87be5f3ad540 -Block 0005 [ 71]: 832a6d5b275b9736 -Block 0005 [ 72]: e5dc09d9ff333c8f -Block 0005 [ 73]: bd325fae47103b43 -Block 0005 [ 74]: 842cc4b109936d28 -Block 0005 [ 75]: 0288ad46048a598b -Block 0005 [ 76]: 6e6aca4e2f64cc00 -Block 0005 [ 77]: 74531597ecfa1e36 -Block 0005 [ 78]: 413b81c34e0f35fd -Block 0005 [ 79]: 75f045e6159ec582 -Block 0005 [ 80]: 02b7e4158121f50c -Block 0005 [ 81]: facdab0b178e2d0e -Block 0005 [ 82]: 96dfc5937b23fd82 -Block 0005 [ 83]: d70cb31166d20062 -Block 0005 [ 84]: 19f89ce3f2dd58cb -Block 0005 [ 85]: 24982d720b762691 -Block 0005 [ 86]: d523f396f3a6eb3e -Block 0005 [ 87]: 9284f59b96bccaa1 -Block 0005 [ 88]: b8ea93e059626094 -Block 0005 [ 89]: d2ff2f61d0edf52f -Block 0005 [ 90]: 7712bb23fd5e9d3f -Block 0005 [ 91]: 327ccbdff1b9f0f9 -Block 0005 [ 92]: 1f78ae754cd9f907 -Block 0005 [ 93]: 9224a03220ae07a1 -Block 0005 [ 94]: ecd122202fd83f76 -Block 0005 [ 95]: 756f86991892353b -Block 0005 [ 96]: 209acb92814e6097 -Block 0005 [ 97]: f31ea1ea1d038547 -Block 0005 [ 98]: df8383e6e6d46768 -Block 0005 [ 99]: 204eb18e722413bb -Block 0005 [100]: 8272dc586305e4e5 -Block 0005 [101]: 6df368fdc20eecb4 -Block 0005 [102]: bb0d1440d64fa01d -Block 0005 [103]: f9e2b4c2b114be60 -Block 0005 [104]: 7b639d21f1a4c262 -Block 0005 [105]: 8e9e1f91102ef9c1 -Block 0005 [106]: d2872fbb0f21f30b -Block 0005 [107]: 4a9983530a52d87c -Block 0005 [108]: 6880c281e0ebb884 -Block 0005 [109]: 54fd1bf55c2da8d2 -Block 0005 [110]: e0b9f3163ab63d65 -Block 0005 [111]: 783d94c97ea356ff -Block 0005 [112]: 69458be8db9536e9 -Block 0005 [113]: dbcadae9ee38190d -Block 0005 [114]: ab0eb15bddcbf967 -Block 0005 [115]: 2d46dfc393f333b5 -Block 0005 [116]: 88fc92a12c24f8d6 -Block 0005 [117]: 85565f4cd6be55d5 -Block 0005 [118]: 22d83c79b8b18a0f -Block 0005 [119]: 2e333918c4a9abab -Block 0005 [120]: 5c495fc0b97433cd -Block 0005 [121]: 96d29cc3808c059f -Block 0005 [122]: a4cbfb8614fc4478 -Block 0005 [123]: 5f768a83d326cbf9 -Block 0005 [124]: 9e304b29e1a6a0bf -Block 0005 [125]: c022c4ff7eb1ddd5 -Block 0005 [126]: 742349c9da4a5c73 -Block 0005 [127]: 82004e9101493542 -Block 0006 [ 0]: cae85a2ceb8efc02 -Block 0006 [ 1]: 6d93381a5d1d8d86 -Block 0006 [ 2]: 49434e31aab85464 -Block 0006 [ 3]: 596e450733089895 -Block 0006 [ 4]: 7ad5266fb35c9dc6 -Block 0006 [ 5]: f103661c0f84cdcb -Block 0006 [ 6]: bdbe945901233f82 -Block 0006 [ 7]: 7a4fc3fa729bf6a9 -Block 0006 [ 8]: 411d8ecffde9d0bc -Block 0006 [ 9]: 3f3879677ae88a93 -Block 0006 [ 10]: 691d2256d8c12414 -Block 0006 [ 11]: 05404821b655cbdf -Block 0006 [ 12]: dc4a287118bd7a42 -Block 0006 [ 13]: f885e8da9e48d9a4 -Block 0006 [ 14]: ee20557eeca2759a -Block 0006 [ 15]: 9b57b912699d14b8 -Block 0006 [ 16]: 9ec2b555224f5056 -Block 0006 [ 17]: 45f8f99df3076f67 -Block 0006 [ 18]: 75188b4f06146b33 -Block 0006 [ 19]: fa1940bb72d8bfa9 -Block 0006 [ 20]: ee77215b5a6461be -Block 0006 [ 21]: 130e5694a4a657a6 -Block 0006 [ 22]: b6d6240eba5cff31 -Block 0006 [ 23]: 6c263e648845c25d -Block 0006 [ 24]: 010f505761537c16 -Block 0006 [ 25]: 2bcd8e8d78174280 -Block 0006 [ 26]: 09cc439d6038920b -Block 0006 [ 27]: 102e6fcadf8fab25 -Block 0006 [ 28]: 865536493af63e34 -Block 0006 [ 29]: 92ba807f489592c3 -Block 0006 [ 30]: fa63293e6bf3450d -Block 0006 [ 31]: 0ab2b18e20af652f -Block 0006 [ 32]: c98d6491c993727d -Block 0006 [ 33]: b91f68d6f2a0935b -Block 0006 [ 34]: 874208aaac5ea660 -Block 0006 [ 35]: fad07e63f8cdcb80 -Block 0006 [ 36]: 05ac511fa2ad4e9c -Block 0006 [ 37]: 91e2f2bef739eb7a -Block 0006 [ 38]: fa418b08d22535b8 -Block 0006 [ 39]: f3bdafdb79902895 -Block 0006 [ 40]: 4278119248e1374c -Block 0006 [ 41]: 2c15a1216716e84f -Block 0006 [ 42]: 06dc9d2d38aa5d01 -Block 0006 [ 43]: 3305f0e0c4a6bf15 -Block 0006 [ 44]: ee6d12b7dae3c9c0 -Block 0006 [ 45]: 9ce6de35c567a77e -Block 0006 [ 46]: aed4cd9f12f9791c -Block 0006 [ 47]: f544023b7aff183e -Block 0006 [ 48]: e239dd3ca8ea9d3f -Block 0006 [ 49]: 17d93ae3f4526473 -Block 0006 [ 50]: 2856d2082a92b453 -Block 0006 [ 51]: 600c119b6d555873 -Block 0006 [ 52]: 3dafb34abaa13aac -Block 0006 [ 53]: 8b9143da50cd92ef -Block 0006 [ 54]: c768a76c43beb3a7 -Block 0006 [ 55]: b125fa82ae2ef4f4 -Block 0006 [ 56]: c4918a79cc02e24d -Block 0006 [ 57]: 4d08a1876b80affe -Block 0006 [ 58]: c98370851d92e969 -Block 0006 [ 59]: e3db1a89b7c66b82 -Block 0006 [ 60]: a5402a035e74f02c -Block 0006 [ 61]: 7daa9f89a675fa9c -Block 0006 [ 62]: 48704bf794e0da1a -Block 0006 [ 63]: 2680b08618fdf25a -Block 0006 [ 64]: 9d5549d923fa207b -Block 0006 [ 65]: 458f138ffc7aded3 -Block 0006 [ 66]: 3b37e756328b99c6 -Block 0006 [ 67]: 04276fee936e3fba -Block 0006 [ 68]: 13f801049a751510 -Block 0006 [ 69]: 4018cb14f41af756 -Block 0006 [ 70]: 8fa9339cd9a10e80 -Block 0006 [ 71]: 9f7398196bcdb698 -Block 0006 [ 72]: 380d6e5db36b1e76 -Block 0006 [ 73]: 48322289e5744636 -Block 0006 [ 74]: 63c91ee0e2c28cfa -Block 0006 [ 75]: 9bda8b855e06fa54 -Block 0006 [ 76]: d411082aeb0decae -Block 0006 [ 77]: 9a81183d5ceeb7a0 -Block 0006 [ 78]: 5b521ded3990d418 -Block 0006 [ 79]: 34e6f3c32e525b4b -Block 0006 [ 80]: 88409ccd5c81fc37 -Block 0006 [ 81]: b7653a0babcf04d4 -Block 0006 [ 82]: bae435aab4d286f3 -Block 0006 [ 83]: 43732419de6f6d91 -Block 0006 [ 84]: 66371d8bd924e722 -Block 0006 [ 85]: 8f523e494a2ec953 -Block 0006 [ 86]: c2bceda3ed49f414 -Block 0006 [ 87]: ed6a64fa5a07244d -Block 0006 [ 88]: 61a1cf88debb7a05 -Block 0006 [ 89]: 85fdf531bc2c9a43 -Block 0006 [ 90]: 8bf9f05cff8eac65 -Block 0006 [ 91]: 9b52f433a222ff47 -Block 0006 [ 92]: 4ac5392090073723 -Block 0006 [ 93]: 07c0e145df5c2c24 -Block 0006 [ 94]: 28be9407aee2d860 -Block 0006 [ 95]: 7a6bc60d1354c7f0 -Block 0006 [ 96]: c524527490c63e7f -Block 0006 [ 97]: 9f0811bbe6b6a454 -Block 0006 [ 98]: 3f04d9d829c49e04 -Block 0006 [ 99]: c208949b51e67461 -Block 0006 [100]: d9df595fcb66c187 -Block 0006 [101]: d83c0989a89578d2 -Block 0006 [102]: 53eb66cc61df5273 -Block 0006 [103]: 220b69c92abb99f6 -Block 0006 [104]: 0ee4c8c6bfb270b1 -Block 0006 [105]: c402b2a60b9525d6 -Block 0006 [106]: f5b846806988ea0b -Block 0006 [107]: 989420c88849ed91 -Block 0006 [108]: 2e423daea0cd45ab -Block 0006 [109]: fbc8cab48993dc1c -Block 0006 [110]: a81466b266d649d3 -Block 0006 [111]: a1cf72a6980c8dec -Block 0006 [112]: e024e1561c0c0e55 -Block 0006 [113]: f5fa1c1120a3590c -Block 0006 [114]: b518502c3c71694a -Block 0006 [115]: e2ab9448cf43d8c1 -Block 0006 [116]: ffae6e44db873d57 -Block 0006 [117]: 5a0f0a08fd6a38a1 -Block 0006 [118]: 40ddbed30d3d9031 -Block 0006 [119]: 8da59292ddbc0263 -Block 0006 [120]: 10b7aabec6c51827 -Block 0006 [121]: 07f794acdff97a71 -Block 0006 [122]: c59fdc4356994dde -Block 0006 [123]: 4f3307d87776106a -Block 0006 [124]: befd22b455bc0865 -Block 0006 [125]: 701121ca8c9515d3 -Block 0006 [126]: 1ef8d046d0b9a563 -Block 0006 [127]: 39b63a35b9efdb99 -Block 0007 [ 0]: aa96f9e08367c767 -Block 0007 [ 1]: 649f858166f87ed5 -Block 0007 [ 2]: e3a12f109cb8c3d9 -Block 0007 [ 3]: 8812c38cd64c7d94 -Block 0007 [ 4]: 3ad89cea6c879850 -Block 0007 [ 5]: 4ad57f58078de647 -Block 0007 [ 6]: 7c91531334d0d4dc -Block 0007 [ 7]: a0fb2ac5e8b87cff -Block 0007 [ 8]: 484649d71b9d1e43 -Block 0007 [ 9]: 094f7304f8ab4c8a -Block 0007 [ 10]: 6df95fa9e9a3f3f8 -Block 0007 [ 11]: e623e88cef2337d0 -Block 0007 [ 12]: e88d11f6d2ed8a35 -Block 0007 [ 13]: 4432c0595c14f75e -Block 0007 [ 14]: 258bd33ca56c8a19 -Block 0007 [ 15]: 6cc890994f178d88 -Block 0007 [ 16]: 38fd3ad0a8d8d873 -Block 0007 [ 17]: ff00206d6f40d106 -Block 0007 [ 18]: 40c1540922ad3309 -Block 0007 [ 19]: ac62185a61a98e5a -Block 0007 [ 20]: a52969af6f33c5f9 -Block 0007 [ 21]: 07a5ed928429d229 -Block 0007 [ 22]: c050a35ba5c589a6 -Block 0007 [ 23]: 8ca12828ceca882a -Block 0007 [ 24]: b68899a29a8a8409 -Block 0007 [ 25]: 909b0feb3da3956b -Block 0007 [ 26]: e6187a3fde82a3d9 -Block 0007 [ 27]: 2cfbaffc07547b7e -Block 0007 [ 28]: bc87b96179db239c -Block 0007 [ 29]: 15f6a8b3f195469e -Block 0007 [ 30]: 8ccc5a4bad93dd85 -Block 0007 [ 31]: f28389eab823c396 -Block 0007 [ 32]: 5c878a746f493847 -Block 0007 [ 33]: dc630599ea9a7a43 -Block 0007 [ 34]: be8f61cede964c9f -Block 0007 [ 35]: 0a0aed40cd05eeab -Block 0007 [ 36]: 7bee51bc54fa558c -Block 0007 [ 37]: cb4c7f727bb2b0e8 -Block 0007 [ 38]: 3e7f5a7844614578 -Block 0007 [ 39]: 820ef308cc67186e -Block 0007 [ 40]: 4ec109927b4043be -Block 0007 [ 41]: f9e4071f5f488bfb -Block 0007 [ 42]: a94607b9b6b215a0 -Block 0007 [ 43]: 28827d5daa40fc2f -Block 0007 [ 44]: 54f31e9dfab0345c -Block 0007 [ 45]: 887c56da37c6e314 -Block 0007 [ 46]: 1148953965073ce8 -Block 0007 [ 47]: c01ae7f35cd7c0ac -Block 0007 [ 48]: e776abf00711922d -Block 0007 [ 49]: 482b7bbafc9c6b93 -Block 0007 [ 50]: 97e6bf7879562de0 -Block 0007 [ 51]: 23d739237098aa07 -Block 0007 [ 52]: bdc9b4185d94ade7 -Block 0007 [ 53]: c63b815b15f2796b -Block 0007 [ 54]: 8553ac1b6a37be91 -Block 0007 [ 55]: 4fe3e5356b9ed266 -Block 0007 [ 56]: 6b2d180c55f275ec -Block 0007 [ 57]: d4fa4fb13209f598 -Block 0007 [ 58]: 5443aa93e28afa7b -Block 0007 [ 59]: 6b647752d66f57b7 -Block 0007 [ 60]: 9666cff649c996d5 -Block 0007 [ 61]: 7bd692c2d21a5047 -Block 0007 [ 62]: eb7c79815024a53b -Block 0007 [ 63]: 1d5196d7fb6f63a1 -Block 0007 [ 64]: ac79fa1a8b4dc7f8 -Block 0007 [ 65]: a8df09a098c0be84 -Block 0007 [ 66]: a0a54a9d55b0b259 -Block 0007 [ 67]: 9ac055953106d3f9 -Block 0007 [ 68]: cecfbbbd0a75b297 -Block 0007 [ 69]: d8f24f0b6bb69dc5 -Block 0007 [ 70]: 378ebbd76c6e3a90 -Block 0007 [ 71]: acd6e360894ee0a3 -Block 0007 [ 72]: ca2554b43fdb94fd -Block 0007 [ 73]: d3f9cde1e592226f -Block 0007 [ 74]: 0dbfb10f2f1efae9 -Block 0007 [ 75]: c71e2c6c043d4dd6 -Block 0007 [ 76]: 542b5306ef9f6d3d -Block 0007 [ 77]: 76edfa648496c329 -Block 0007 [ 78]: 250612884c4f0b85 -Block 0007 [ 79]: 6075f1ce858b87e6 -Block 0007 [ 80]: 104f24fd6dd36325 -Block 0007 [ 81]: e877c408d7628431 -Block 0007 [ 82]: bfde93ac7c25c4c3 -Block 0007 [ 83]: 5df386f7c1ec1683 -Block 0007 [ 84]: b71ecaddf313cf0e -Block 0007 [ 85]: a12579e2673e01d6 -Block 0007 [ 86]: 2ad19a0604cd5fe9 -Block 0007 [ 87]: 272ea01051cb6358 -Block 0007 [ 88]: a2d7685936a4ceb4 -Block 0007 [ 89]: b3e3249849509375 -Block 0007 [ 90]: 6b8203a8e0c94907 -Block 0007 [ 91]: 1d688c4a3f966428 -Block 0007 [ 92]: 2016b91b50f0f449 -Block 0007 [ 93]: 4d5e3e8b2fd48920 -Block 0007 [ 94]: 9ce0e560887cf9d3 -Block 0007 [ 95]: 8bf1c4fe311f6941 -Block 0007 [ 96]: eea996cf128b79fd -Block 0007 [ 97]: 87d2181997f90c9f -Block 0007 [ 98]: 2e6ff5336274c0b1 -Block 0007 [ 99]: 07bcbc51de405ed5 -Block 0007 [100]: 58528c033854e6c4 -Block 0007 [101]: 1e74bb2c415e259a -Block 0007 [102]: 81257185b52075ed -Block 0007 [103]: f69a6f103e6d90d9 -Block 0007 [104]: 2957fac276b0ecf3 -Block 0007 [105]: 73bf7c5536294f71 -Block 0007 [106]: 9a6275570ed2df1d -Block 0007 [107]: ccf4ba74c777f8ee -Block 0007 [108]: eaff28c6db196040 -Block 0007 [109]: d54fe5cf5874a657 -Block 0007 [110]: c93036465726f57f -Block 0007 [111]: b660605a42952da9 -Block 0007 [112]: d4ab99d7310068cd -Block 0007 [113]: 21f7fb4e319084ce -Block 0007 [114]: 519edf5d36936eb9 -Block 0007 [115]: b2c82d19c105271a -Block 0007 [116]: 718dfcd0eb783bc5 -Block 0007 [117]: b235745fdf50c280 -Block 0007 [118]: b7b333715a491c57 -Block 0007 [119]: 4d1d58bf981fc3ff -Block 0007 [120]: 09142593a9e31264 -Block 0007 [121]: 2ba15f73ae641cdb -Block 0007 [122]: 0dbedd4b8ad66694 -Block 0007 [123]: a2e08ce9a67e410d -Block 0007 [124]: 3c33479a6316a3d4 -Block 0007 [125]: b49dcf61cc1ee0f7 -Block 0007 [126]: 554dd48bd5a57ba3 -Block 0007 [127]: 7f62bde60a68421f -Block 0008 [ 0]: 92f6d6ca261fc8cf -Block 0008 [ 1]: 46231b8ea96831aa -Block 0008 [ 2]: d7b240430ce761e2 -Block 0008 [ 3]: 78bf44b216c84d15 -Block 0008 [ 4]: 233673b6dbc99394 -Block 0008 [ 5]: fef85a6245b2959f -Block 0008 [ 6]: b50611c7b12700a3 -Block 0008 [ 7]: b1d5b20c38fd698b -Block 0008 [ 8]: ed05bdf565eb1670 -Block 0008 [ 9]: c1bd5b774427ee83 -Block 0008 [ 10]: 662366030971d978 -Block 0008 [ 11]: a3672fc5e14d3835 -Block 0008 [ 12]: 396f9f9e5fdc007d -Block 0008 [ 13]: 9c2af96d848a18ec -Block 0008 [ 14]: 17753b738206411c -Block 0008 [ 15]: 1173420c24118788 -Block 0008 [ 16]: 0a6a9f243be7ee99 -Block 0008 [ 17]: 2b7e600ca9aaa924 -Block 0008 [ 18]: c0766db77b8640b6 -Block 0008 [ 19]: 7d32c2e8b617fb00 -Block 0008 [ 20]: 55aeb0119138c0d4 -Block 0008 [ 21]: 0da720da65b9f532 -Block 0008 [ 22]: 9ebd62381d2d5491 -Block 0008 [ 23]: 79cb72a785dde658 -Block 0008 [ 24]: e76297c84f559e80 -Block 0008 [ 25]: a2b36a54e16f0260 -Block 0008 [ 26]: 3c6f3f453a1bd215 -Block 0008 [ 27]: 74330ed8f77ec3f1 -Block 0008 [ 28]: 331dde512c425385 -Block 0008 [ 29]: 9fc0c6ccb30db6e6 -Block 0008 [ 30]: 774aafaf5dcc91b5 -Block 0008 [ 31]: 9b05e8f3b4a8189f -Block 0008 [ 32]: 82e0b0bdd1398b73 -Block 0008 [ 33]: 0cb016fab2a01997 -Block 0008 [ 34]: 3be4263af97114bc -Block 0008 [ 35]: 0d55775808650824 -Block 0008 [ 36]: 8105fea6f9a6deb4 -Block 0008 [ 37]: e6a69e43428e0116 -Block 0008 [ 38]: d1dae82531d7f6a0 -Block 0008 [ 39]: 75f3152168bcef9b -Block 0008 [ 40]: 5324b2ae324a2354 -Block 0008 [ 41]: 33ed57275072eb06 -Block 0008 [ 42]: 7e9e632411ee708d -Block 0008 [ 43]: 9bcce35940c7159c -Block 0008 [ 44]: f5af40b874b2a402 -Block 0008 [ 45]: 110c586d5e1c1188 -Block 0008 [ 46]: 978d2662424a4bac -Block 0008 [ 47]: a656e414d797b095 -Block 0008 [ 48]: 0970f7c8c6075dec -Block 0008 [ 49]: 6ff3e812a7f1aa46 -Block 0008 [ 50]: eee42ac2dbcb5760 -Block 0008 [ 51]: 4e8489009f2a83d5 -Block 0008 [ 52]: fea08093f6f4ed51 -Block 0008 [ 53]: 352247f19ec0e53f -Block 0008 [ 54]: 82d807f61412e2b5 -Block 0008 [ 55]: 3276543fce1e8ba9 -Block 0008 [ 56]: 305629c5c3b64aed -Block 0008 [ 57]: 5b6f8f456b643373 -Block 0008 [ 58]: 9d0f9c2a4c8f060b -Block 0008 [ 59]: 438294ae3de753ce -Block 0008 [ 60]: b0a6e33302a9deff -Block 0008 [ 61]: b10592023513b0b9 -Block 0008 [ 62]: f8c79b71c102905b -Block 0008 [ 63]: 43b4413873a270ba -Block 0008 [ 64]: d34f5c5e0998a1f8 -Block 0008 [ 65]: 19f5df3546045ba8 -Block 0008 [ 66]: dcece1ca7a0dcd19 -Block 0008 [ 67]: bc53d2ae75a68004 -Block 0008 [ 68]: 54f7e9cdaa7e569e -Block 0008 [ 69]: 94aba4e907e3ad17 -Block 0008 [ 70]: 8e09815df38d82ad -Block 0008 [ 71]: 52ebb7d86386430e -Block 0008 [ 72]: adfa72bf58111b6f -Block 0008 [ 73]: 9a97a34d02f35c55 -Block 0008 [ 74]: 88a5f560607896e6 -Block 0008 [ 75]: 30e3deba10a0e2c7 -Block 0008 [ 76]: a88c9001142218f0 -Block 0008 [ 77]: 34443da1afe34ad5 -Block 0008 [ 78]: dff9a8672d9c3c16 -Block 0008 [ 79]: 4c922e79b39902a0 -Block 0008 [ 80]: 8c87abe539b79af1 -Block 0008 [ 81]: c27dd77ff32e7546 -Block 0008 [ 82]: 32394933c3cf5e0c -Block 0008 [ 83]: 579cd4a121e76b03 -Block 0008 [ 84]: d0ddc746442ea314 -Block 0008 [ 85]: 268e280ea0775645 -Block 0008 [ 86]: 255c28d63c7288b4 -Block 0008 [ 87]: 220aba41a338f9e4 -Block 0008 [ 88]: fff7450697217135 -Block 0008 [ 89]: 3c5ef84ee9febcfc -Block 0008 [ 90]: ca1fe3294dc518c7 -Block 0008 [ 91]: a562721d4f6bbf01 -Block 0008 [ 92]: fc33d7633e7dcc7d -Block 0008 [ 93]: cfb8c4bbd4953e6e -Block 0008 [ 94]: 01bbf2c52cac42c2 -Block 0008 [ 95]: b65219c09fd95934 -Block 0008 [ 96]: e96d416d0ccab83d -Block 0008 [ 97]: c4f88891388c48ee -Block 0008 [ 98]: d6a10504939a858e -Block 0008 [ 99]: 713907c339464081 -Block 0008 [100]: 6e1fb4478d2ce08c -Block 0008 [101]: 834969ca83993eef -Block 0008 [102]: fd91b73ae90795e0 -Block 0008 [103]: d9cfa18953aea3f9 -Block 0008 [104]: 1eb6a19221268e59 -Block 0008 [105]: c0ad63c783ac8007 -Block 0008 [106]: 1a2d426c6dc70c86 -Block 0008 [107]: 26d59d50f8388ec8 -Block 0008 [108]: a80437af7437599c -Block 0008 [109]: 6969260f334d5d82 -Block 0008 [110]: 00dfd4895631ef90 -Block 0008 [111]: dfd0efe509122127 -Block 0008 [112]: b52af91406aff929 -Block 0008 [113]: adb32b6ab6fdcbd7 -Block 0008 [114]: 3e89d6ace903a5d8 -Block 0008 [115]: d11fd78a1445e270 -Block 0008 [116]: bdadee3624fbefd4 -Block 0008 [117]: 424ff6da14872281 -Block 0008 [118]: 6dd4cf79eaa5797b -Block 0008 [119]: f176c7ecc2872fb3 -Block 0008 [120]: a79bfc8746f264b9 -Block 0008 [121]: 9625eb7aa57c52eb -Block 0008 [122]: ac854065c1dc3575 -Block 0008 [123]: cf4b92c820e2d280 -Block 0008 [124]: 3c5b29c8ab4c7d21 -Block 0008 [125]: 81a16e1d57a4a742 -Block 0008 [126]: 0a59951bb4a5350b -Block 0008 [127]: 5afbe0d24e05c8a6 -Block 0009 [ 0]: 861d303a02999e8e -Block 0009 [ 1]: 39bff09c822fdbc0 -Block 0009 [ 2]: 622b81abdc3f4a32 -Block 0009 [ 3]: ab9d09e5dfd64194 -Block 0009 [ 4]: 326a874cec237f12 -Block 0009 [ 5]: 8fb67fab8060e98c -Block 0009 [ 6]: d2d74a1c2f83d3d3 -Block 0009 [ 7]: 2f55faf116707ea5 -Block 0009 [ 8]: 79da12d2f0c3e61a -Block 0009 [ 9]: 891d23c5a9412f39 -Block 0009 [ 10]: 6cdd30456923f037 -Block 0009 [ 11]: 14d3ce76187b9c60 -Block 0009 [ 12]: 936f98d58d2218f3 -Block 0009 [ 13]: 628ee9e7c16b3580 -Block 0009 [ 14]: 71f65d809281dd0b -Block 0009 [ 15]: 775d67d622193f7e -Block 0009 [ 16]: 4a22de00a7c3b0c0 -Block 0009 [ 17]: b0ff5e3db98eeed5 -Block 0009 [ 18]: c4ef45496b302eb2 -Block 0009 [ 19]: 4a2c2b6b8a87d99c -Block 0009 [ 20]: cc850382694f8c0e -Block 0009 [ 21]: c022ab6a59ba02b1 -Block 0009 [ 22]: 2b350ffab1420e6f -Block 0009 [ 23]: 97c40487830a1ddd -Block 0009 [ 24]: eb2c092a9a8a5a9a -Block 0009 [ 25]: 6fef1e9dbee32d55 -Block 0009 [ 26]: b9da76a743ce6df8 -Block 0009 [ 27]: 80d9afd64c6c21b0 -Block 0009 [ 28]: 8956b45ae00aa70b -Block 0009 [ 29]: 6802ece7ab96c121 -Block 0009 [ 30]: 00ee32a4a2ca9d90 -Block 0009 [ 31]: 9f0e1f59571a3276 -Block 0009 [ 32]: 8ac3d2cf84ebb6b5 -Block 0009 [ 33]: e2e94ddfeaac1f8b -Block 0009 [ 34]: f9a025b84c989037 -Block 0009 [ 35]: c1f33f3cba4c0ad1 -Block 0009 [ 36]: 198d388d3756c187 -Block 0009 [ 37]: 431ca049992cd38e -Block 0009 [ 38]: d468ada99b30f701 -Block 0009 [ 39]: 2fcd5b0b5dabc78f -Block 0009 [ 40]: 649f86945f38593a -Block 0009 [ 41]: 213ee790f61abd50 -Block 0009 [ 42]: 39b0cb1110006813 -Block 0009 [ 43]: b5703b76384430ad -Block 0009 [ 44]: 3eaeebeb30fcc9f9 -Block 0009 [ 45]: 9a5dd247256ef2c8 -Block 0009 [ 46]: b9985bc60977cda1 -Block 0009 [ 47]: 62cdd6be32a5d84c -Block 0009 [ 48]: af8858bf60bb22fb -Block 0009 [ 49]: 7f5f239c2b2f7ca0 -Block 0009 [ 50]: b71a7a67cf14960f -Block 0009 [ 51]: 7911708c3a71d21b -Block 0009 [ 52]: 4408de99594ba448 -Block 0009 [ 53]: 423fc44df0684f3e -Block 0009 [ 54]: 2e0c36453dd361a0 -Block 0009 [ 55]: 2d7c96f01c7fd189 -Block 0009 [ 56]: ddfdd016b5a9cebe -Block 0009 [ 57]: 2fd26d237640f4e6 -Block 0009 [ 58]: 47f5f2444af6c7cf -Block 0009 [ 59]: 0d3b91052b41c61e -Block 0009 [ 60]: d62f462898904aeb -Block 0009 [ 61]: 4b470aba5f110e6a -Block 0009 [ 62]: ffbe1984153237fb -Block 0009 [ 63]: f9df2c0fcd574baf -Block 0009 [ 64]: 08a6531cd251adfb -Block 0009 [ 65]: 1decd865fc6e0472 -Block 0009 [ 66]: bce66f9ea598171a -Block 0009 [ 67]: f5f88f984a85ee08 -Block 0009 [ 68]: feb94e6b9343480f -Block 0009 [ 69]: 2d611326d643c179 -Block 0009 [ 70]: 40a46d7c231ab873 -Block 0009 [ 71]: 4d406e17273b6c99 -Block 0009 [ 72]: 6b28c89629bcfbb4 -Block 0009 [ 73]: a748f1788d8a8a5c -Block 0009 [ 74]: ffb3b25cb52ea498 -Block 0009 [ 75]: 44817bdbe66a4938 -Block 0009 [ 76]: 9d80db4fc1cddbd9 -Block 0009 [ 77]: a1c9ebbad8bdc094 -Block 0009 [ 78]: b2ce16610b569c06 -Block 0009 [ 79]: e13ef6abd5b78468 -Block 0009 [ 80]: 3593f789c862423b -Block 0009 [ 81]: 756c40de660aab62 -Block 0009 [ 82]: 447a830e3f02dc0b -Block 0009 [ 83]: 9b2816be8209816b -Block 0009 [ 84]: 1a2e31d8cd87e262 -Block 0009 [ 85]: c162dfea41dfbeca -Block 0009 [ 86]: f1f5ae63bf8992f0 -Block 0009 [ 87]: 163c3c7ac5d4a7b0 -Block 0009 [ 88]: 5cc9ba44845532c8 -Block 0009 [ 89]: cc991c2f782193f6 -Block 0009 [ 90]: a657bcd3365b522e -Block 0009 [ 91]: 04a272455d7de47f -Block 0009 [ 92]: 4de4b0911e7d01b6 -Block 0009 [ 93]: 2a64bfd12cef0747 -Block 0009 [ 94]: 4f870d2fe4aa5fc6 -Block 0009 [ 95]: ee8b0743542e9751 -Block 0009 [ 96]: cd64ea70a570d282 -Block 0009 [ 97]: c4ab20bb416c6943 -Block 0009 [ 98]: 841bb1199cb466cd -Block 0009 [ 99]: f60f32b0b68e4f2d -Block 0009 [100]: 1a71dc489bd5c3e1 -Block 0009 [101]: c53b31169829e4bd -Block 0009 [102]: cd2c064dd76b1865 -Block 0009 [103]: 2b4a556a60e999e9 -Block 0009 [104]: 9909c2b0a72e2fa9 -Block 0009 [105]: eae2c80121344389 -Block 0009 [106]: d69778d04e1a09af -Block 0009 [107]: 32f17b7202372cc1 -Block 0009 [108]: 00790b7928166164 -Block 0009 [109]: a3fb0db8a27f0a52 -Block 0009 [110]: 1fd50e78d45abf18 -Block 0009 [111]: ace28638e7964859 -Block 0009 [112]: 365d9776d1d13dd4 -Block 0009 [113]: 466a93251e133b44 -Block 0009 [114]: dba49ff0b3b9fbfa -Block 0009 [115]: 6ea36c0808696c7b -Block 0009 [116]: 19c4e2fe051d08f7 -Block 0009 [117]: d0f9c63843224913 -Block 0009 [118]: ebc7e793b642d70f -Block 0009 [119]: 6de8c83fe37b7836 -Block 0009 [120]: b2b2af5741a01d6a -Block 0009 [121]: 31717aa7407194ac -Block 0009 [122]: eb34348ac46cb928 -Block 0009 [123]: 95e2142661045702 -Block 0009 [124]: 82892ec15063676a -Block 0009 [125]: 0a93ffd5635a838c -Block 0009 [126]: f5054bb7e05f8478 -Block 0009 [127]: f0e32a040eb8d62c -Block 0010 [ 0]: 110297f463d4717e -Block 0010 [ 1]: 3828eb6209d28c20 -Block 0010 [ 2]: 35c1584b1757b98d -Block 0010 [ 3]: 771c3556525c54af -Block 0010 [ 4]: 5226e0fa8b5a97be -Block 0010 [ 5]: d4404af7854f4531 -Block 0010 [ 6]: e91725de137e3987 -Block 0010 [ 7]: d1a77075a0e6bb9d -Block 0010 [ 8]: cd2f8e8fb6d0901b -Block 0010 [ 9]: 7e246e279c85e964 -Block 0010 [ 10]: 0da2a382740fa23f -Block 0010 [ 11]: ddbe4942cc122308 -Block 0010 [ 12]: 7a3d92ac09975af1 -Block 0010 [ 13]: 8d210d589a07defd -Block 0010 [ 14]: d12322eadbed1288 -Block 0010 [ 15]: 626edcd2444b7c78 -Block 0010 [ 16]: e10856c39889ccba -Block 0010 [ 17]: 1e7ce7e9b0d7f793 -Block 0010 [ 18]: 03022c6f8619397c -Block 0010 [ 19]: 61cadf5c6c612d5f -Block 0010 [ 20]: 266a8188eb214c7a -Block 0010 [ 21]: 8f91d5c0bf6f3bbd -Block 0010 [ 22]: 10da2e0b78c9e301 -Block 0010 [ 23]: 46f4a4577e3c3755 -Block 0010 [ 24]: 099b19a75a149e97 -Block 0010 [ 25]: f977352167b9048f -Block 0010 [ 26]: ed87004d3f744f8e -Block 0010 [ 27]: 8980201a571eeaac -Block 0010 [ 28]: f8775f7233d82ef5 -Block 0010 [ 29]: 81ad57684a96a61c -Block 0010 [ 30]: fa0e5b145e36e1c0 -Block 0010 [ 31]: 5da6470b7e51be0a -Block 0010 [ 32]: 5cd1fe96302b8b27 -Block 0010 [ 33]: d38b9cf01a52f2f8 -Block 0010 [ 34]: fa7bfeb316d67b52 -Block 0010 [ 35]: 5173a803996cad74 -Block 0010 [ 36]: 37a46313dc93e2ff -Block 0010 [ 37]: 044735689012d83d -Block 0010 [ 38]: 99cd36a5787006e7 -Block 0010 [ 39]: e2aa7201b180dc9c -Block 0010 [ 40]: 384f6cbd27e96f5d -Block 0010 [ 41]: 33e0f9f86a59665a -Block 0010 [ 42]: 17991cc270086db8 -Block 0010 [ 43]: cf93f6aa37ab95d2 -Block 0010 [ 44]: 1f2728468af489c9 -Block 0010 [ 45]: 804443ff55476398 -Block 0010 [ 46]: 5b7ed05930a6c76c -Block 0010 [ 47]: d97b71273879328a -Block 0010 [ 48]: e6950700c420861d -Block 0010 [ 49]: 2efcb94c032a0a7f -Block 0010 [ 50]: 7f4cf4eb22135d4d -Block 0010 [ 51]: e3b10b4195f7f945 -Block 0010 [ 52]: 006bb903385536a4 -Block 0010 [ 53]: 77ca0b9a29c058db -Block 0010 [ 54]: 9d8a471366bd13cb -Block 0010 [ 55]: 40d9cf15a3986f5f -Block 0010 [ 56]: 50a080ed23996ea3 -Block 0010 [ 57]: 11e420bea0c08fb7 -Block 0010 [ 58]: 2e85b9ddad230198 -Block 0010 [ 59]: f50b554c8bfbb3b7 -Block 0010 [ 60]: 08a7d72d8aa342c6 -Block 0010 [ 61]: 6cc80e83f2c15811 -Block 0010 [ 62]: b3a6e194a6fda8c0 -Block 0010 [ 63]: d7f74e7aa4f4d630 -Block 0010 [ 64]: 2df488549fb0f8dd -Block 0010 [ 65]: 9a5bc68d4474cd5c -Block 0010 [ 66]: d41aca980d1f2603 -Block 0010 [ 67]: df6552b8d6654437 -Block 0010 [ 68]: 983a9339b96cb1b8 -Block 0010 [ 69]: e3071ef62bf10360 -Block 0010 [ 70]: 3eaaa277b6d1bafc -Block 0010 [ 71]: 172345b0d9558fed -Block 0010 [ 72]: 97319c89c731a02c -Block 0010 [ 73]: 8ff07e264876973f -Block 0010 [ 74]: 01c32c0c0d654104 -Block 0010 [ 75]: 5f53661a1ee1b4c6 -Block 0010 [ 76]: a9c3da1ad696a16a -Block 0010 [ 77]: 30fe71394a311283 -Block 0010 [ 78]: 0f430ad1dea89c48 -Block 0010 [ 79]: fff048ac83a64f90 -Block 0010 [ 80]: c972527bf676f382 -Block 0010 [ 81]: ecb9a1ecb1be64c4 -Block 0010 [ 82]: 9c13e375c2ab34fd -Block 0010 [ 83]: 075bc62ae5a021b5 -Block 0010 [ 84]: 3f9b3f22818dd97d -Block 0010 [ 85]: 3eae713ae75fafaa -Block 0010 [ 86]: def4641c47a181f5 -Block 0010 [ 87]: 2ad7ac99f83eb6ef -Block 0010 [ 88]: 8d9bf96f4262d9a1 -Block 0010 [ 89]: 4bf1edb2dc479604 -Block 0010 [ 90]: 406c2f505dabf0a7 -Block 0010 [ 91]: 0776ad101c034fab -Block 0010 [ 92]: 2857c04f873dafca -Block 0010 [ 93]: a552f1e8ffa8ec48 -Block 0010 [ 94]: cd4ac3951c1c7ac8 -Block 0010 [ 95]: 991a387dc304b4d3 -Block 0010 [ 96]: 4a62ae26332cf695 -Block 0010 [ 97]: 99989a5b0ec7afe5 -Block 0010 [ 98]: ab2b76e0fb2e34dd -Block 0010 [ 99]: d3d09e0fa3dc5e77 -Block 0010 [100]: 7414b924a1f4f9fd -Block 0010 [101]: 01081a97e3667c3e -Block 0010 [102]: a879d8ae57621b88 -Block 0010 [103]: b252f12b3a3992d9 -Block 0010 [104]: b239a13aec939a49 -Block 0010 [105]: 029148ded8d39810 -Block 0010 [106]: 0f09288a2e1ad2b8 -Block 0010 [107]: f289a0a95b9d76fc -Block 0010 [108]: bc151f281383fb02 -Block 0010 [109]: f3bfe6a2939a9c5f -Block 0010 [110]: 4951bd53b83739ea -Block 0010 [111]: 20062e7ccefa3c7f -Block 0010 [112]: 20049fbcca6e1276 -Block 0010 [113]: 6554bd2ba666dbdf -Block 0010 [114]: b84b84abc76ff06e -Block 0010 [115]: 2816898ed2d362c1 -Block 0010 [116]: 2cc5d0406a9b8a30 -Block 0010 [117]: 5cb404b772ec2e72 -Block 0010 [118]: 30ff618b95dd0ca4 -Block 0010 [119]: 197e19f88bbb4c54 -Block 0010 [120]: 8efd88b018876d72 -Block 0010 [121]: d16ce6880bb48af0 -Block 0010 [122]: 8279d270c5ae1b3b -Block 0010 [123]: 6f23fa0e7ede09c2 -Block 0010 [124]: dd73f98a2379858e -Block 0010 [125]: 6fe85bbab6b21a5a -Block 0010 [126]: c05d149be2380f54 -Block 0010 [127]: d1ae698a35b02155 -Block 0011 [ 0]: bf619ba9cd33f95c -Block 0011 [ 1]: 0d2ac712c43a258a -Block 0011 [ 2]: d9dd4ee0d026984d -Block 0011 [ 3]: 646f79b969d84848 -Block 0011 [ 4]: 6d70dafdc7603cca -Block 0011 [ 5]: f12d6b70c293bef8 -Block 0011 [ 6]: 489e389aa5a7c24a -Block 0011 [ 7]: 086272b565165ee5 -Block 0011 [ 8]: c9f4fb5a39048c4d -Block 0011 [ 9]: a6f603aa70d9e5d2 -Block 0011 [ 10]: 3bf25a0bb1f7ac38 -Block 0011 [ 11]: 14ddd25c2d5e3596 -Block 0011 [ 12]: faa4e84c465394d8 -Block 0011 [ 13]: f8ef145f6844f82f -Block 0011 [ 14]: f9549b745c33d239 -Block 0011 [ 15]: b396a5075f3d4296 -Block 0011 [ 16]: 3d469a0b36f79da8 -Block 0011 [ 17]: d95f7a181fc9efbc -Block 0011 [ 18]: acf4136c4277bd85 -Block 0011 [ 19]: d77857338a5e203c -Block 0011 [ 20]: 63bf886f0d376e4d -Block 0011 [ 21]: 4afc35e28228b78b -Block 0011 [ 22]: 88ce07494723a779 -Block 0011 [ 23]: ec0a4672f81e2455 -Block 0011 [ 24]: 9b274d635cc92fbf -Block 0011 [ 25]: 8e6d72ea1532273a -Block 0011 [ 26]: b788d44eec8ed38f -Block 0011 [ 27]: ca0b197b4dc4c8e0 -Block 0011 [ 28]: 092230b70e1e4a42 -Block 0011 [ 29]: 5d625d9ac17bde09 -Block 0011 [ 30]: b93db814b66e4291 -Block 0011 [ 31]: 6f52e5601eb894ab -Block 0011 [ 32]: 0b77390efee15e79 -Block 0011 [ 33]: 82f6b168a63fe7f1 -Block 0011 [ 34]: 928a76a455f889d7 -Block 0011 [ 35]: 45c46061f47474d6 -Block 0011 [ 36]: d4065cb48f92aa76 -Block 0011 [ 37]: bf6f8c1b76f13500 -Block 0011 [ 38]: 57e3cbff98403ac9 -Block 0011 [ 39]: 4eb93a3eb96f1bdc -Block 0011 [ 40]: a0d9dac64a63e011 -Block 0011 [ 41]: 80cf457a61239ce5 -Block 0011 [ 42]: 12cbdf7f7b345bdd -Block 0011 [ 43]: 558fca889cbfb6a8 -Block 0011 [ 44]: ada62c7467f789a2 -Block 0011 [ 45]: 847e4323ebbe551a -Block 0011 [ 46]: d86b0fb2d0a54c81 -Block 0011 [ 47]: 2f9f78ce91656503 -Block 0011 [ 48]: 9224c2d9e15272ab -Block 0011 [ 49]: 57f39cdd4dbfbb37 -Block 0011 [ 50]: 5ac28368fd6414e2 -Block 0011 [ 51]: 7fea8df3452d5ff6 -Block 0011 [ 52]: 0ddb457c7ed1693f -Block 0011 [ 53]: d15eafd50e4839e6 -Block 0011 [ 54]: 70b74f4ec868eeed -Block 0011 [ 55]: 1f50fbb8eadedc4d -Block 0011 [ 56]: 2bff0b825beecb9a -Block 0011 [ 57]: f7e23f0fbf8fb5e0 -Block 0011 [ 58]: 169fc6a7da58e7c6 -Block 0011 [ 59]: c759c0fe25fdca4e -Block 0011 [ 60]: a193c01631706ff5 -Block 0011 [ 61]: 8425925525cfb70d -Block 0011 [ 62]: e36d59fa28e117e3 -Block 0011 [ 63]: 021f51f6e924bd1c -Block 0011 [ 64]: 88d912c9de684d7c -Block 0011 [ 65]: b08faaf01463fa22 -Block 0011 [ 66]: dfca8cec70dd1005 -Block 0011 [ 67]: 4518e831507f33a4 -Block 0011 [ 68]: 7265bcabed2a4d1d -Block 0011 [ 69]: 56f8f9a0f20afb0e -Block 0011 [ 70]: 9466d5828edade85 -Block 0011 [ 71]: 4a5990ef5fe1a0a1 -Block 0011 [ 72]: 9e8d71c58adf1850 -Block 0011 [ 73]: 2fce135d3f208a11 -Block 0011 [ 74]: eb02eb1a0e77cf4e -Block 0011 [ 75]: 83b8334bd764ab5f -Block 0011 [ 76]: fc98743a215282e4 -Block 0011 [ 77]: f628862aeb37e3cf -Block 0011 [ 78]: 0e285752ea8b49f6 -Block 0011 [ 79]: 45137ed52e87fc71 -Block 0011 [ 80]: f16667bed93b16e1 -Block 0011 [ 81]: 19ea703c42ba921a -Block 0011 [ 82]: e8fec569d85d1da5 -Block 0011 [ 83]: c582602a4902e2ef -Block 0011 [ 84]: 5118a85f2f85b6d2 -Block 0011 [ 85]: 5254a0abbf3e1bf6 -Block 0011 [ 86]: 864d04b8aeafaba2 -Block 0011 [ 87]: a9157728d3eace94 -Block 0011 [ 88]: 929fff7cd5c8912f -Block 0011 [ 89]: d6b565cdcbfe97a2 -Block 0011 [ 90]: f1cac3f87b2d83b1 -Block 0011 [ 91]: 391784898501b826 -Block 0011 [ 92]: 963fd42330391bb7 -Block 0011 [ 93]: 22f53f44ba19f81b -Block 0011 [ 94]: 849a3c40e7f35a6a -Block 0011 [ 95]: 2621c1353cd8fa5a -Block 0011 [ 96]: bc5b32f805e90323 -Block 0011 [ 97]: 48c9c41acfa6534d -Block 0011 [ 98]: 47e2c3054fe2863f -Block 0011 [ 99]: 61275e63f8f2c157 -Block 0011 [100]: 49cdff8f529dbe70 -Block 0011 [101]: 172135c6ebd89118 -Block 0011 [102]: 94015490366fd71a -Block 0011 [103]: 9e0975de7ab4c2ba -Block 0011 [104]: f87576ecd5896a97 -Block 0011 [105]: 3d241dfeb9eff1bf -Block 0011 [106]: 87ced3201be31c9b -Block 0011 [107]: a1b205a82e4a060b -Block 0011 [108]: 225d1ce3c11da16c -Block 0011 [109]: c07dfe2ce4aabd03 -Block 0011 [110]: 1434ee5041b82175 -Block 0011 [111]: 1c4e1b1c7334a509 -Block 0011 [112]: 60c151bfa5932a93 -Block 0011 [113]: 84d44077ee4c8253 -Block 0011 [114]: 6a4b8d6cd076e254 -Block 0011 [115]: df882989a57a6b51 -Block 0011 [116]: bbe63591d7ab0e4e -Block 0011 [117]: bb46e03a39c54fea -Block 0011 [118]: 14198e736ed8209f -Block 0011 [119]: 73a82d993ddbf317 -Block 0011 [120]: 81be44f6bb106619 -Block 0011 [121]: cb0a5d74cc13275f -Block 0011 [122]: 8abc8fb70c4dc792 -Block 0011 [123]: d47faaceb91155c7 -Block 0011 [124]: 95aa009ba3ac5d98 -Block 0011 [125]: 6d25fc5c774bec47 -Block 0011 [126]: c72751d51103cd58 -Block 0011 [127]: 726aba80485a4db1 -Block 0012 [ 0]: 73ce723169e527f6 -Block 0012 [ 1]: 308bd4738f7976a1 -Block 0012 [ 2]: c355b356d91f24d6 -Block 0012 [ 3]: 09ed9df50d935a67 -Block 0012 [ 4]: 717c7ff7c944689d -Block 0012 [ 5]: 6c5820e5948a5959 -Block 0012 [ 6]: a2cba3426fdeedcd -Block 0012 [ 7]: 0c4f78f7fe2e775f -Block 0012 [ 8]: 198c071d5b3f64ff -Block 0012 [ 9]: caf9aad5d3de5a15 -Block 0012 [ 10]: 0a9d3484d272f3ca -Block 0012 [ 11]: 3f82a2d990cce3c6 -Block 0012 [ 12]: f927453eee587c23 -Block 0012 [ 13]: 5a36887bf9b00b27 -Block 0012 [ 14]: f88bbe6c5bc73f5b -Block 0012 [ 15]: 52da3b1769a613eb -Block 0012 [ 16]: 39840c2892de1cdf -Block 0012 [ 17]: 4b805e1770f4777f -Block 0012 [ 18]: ae59fcacf8ec62a5 -Block 0012 [ 19]: aed76584ef1be382 -Block 0012 [ 20]: 477e1854261d29ae -Block 0012 [ 21]: 00c04e48d1d6438d -Block 0012 [ 22]: e43e846dfa10e2c7 -Block 0012 [ 23]: 54dc1d90c10beec6 -Block 0012 [ 24]: 31eac75291e4f891 -Block 0012 [ 25]: eeabb2fb46c0e7fa -Block 0012 [ 26]: be72d2a02c40e76f -Block 0012 [ 27]: 2c223a1d489e3e53 -Block 0012 [ 28]: 1b842e1c231e577f -Block 0012 [ 29]: 5a560f0f2e6af886 -Block 0012 [ 30]: 658dbf3060d2ed46 -Block 0012 [ 31]: cd4efafc6edde8a3 -Block 0012 [ 32]: 5218beab24ad8820 -Block 0012 [ 33]: fc844dc6d30edc70 -Block 0012 [ 34]: c03e32282b08b833 -Block 0012 [ 35]: f6526556c4c2bc8c -Block 0012 [ 36]: eef40a4c8d3246dc -Block 0012 [ 37]: d395cdddd5dcaded -Block 0012 [ 38]: 5d141c705958116f -Block 0012 [ 39]: bf6eb3d80d70a6d4 -Block 0012 [ 40]: becea1cfbd53daee -Block 0012 [ 41]: 1ffca512f562d1f7 -Block 0012 [ 42]: e8bc5235bf1f0011 -Block 0012 [ 43]: 3ee59d7fef681870 -Block 0012 [ 44]: 8316e6c7ec8d86ac -Block 0012 [ 45]: 00cc2bcfd342063e -Block 0012 [ 46]: 97abc50fdefb7beb -Block 0012 [ 47]: 7c4a3fd61c121c41 -Block 0012 [ 48]: 7eef15597ff45a1e -Block 0012 [ 49]: 2635654685e51a2a -Block 0012 [ 50]: 196d80c0220cf5e9 -Block 0012 [ 51]: 907d81d5db058770 -Block 0012 [ 52]: 5db1d4866657cca1 -Block 0012 [ 53]: 494307edf2063396 -Block 0012 [ 54]: dc19b63a79b917d0 -Block 0012 [ 55]: b9d18ad8d4260be8 -Block 0012 [ 56]: dab1095a4b004abe -Block 0012 [ 57]: e6afd37d77d008ef -Block 0012 [ 58]: 854726fc8461ca89 -Block 0012 [ 59]: a8a69473c59d37c3 -Block 0012 [ 60]: f55724283be2330b -Block 0012 [ 61]: 2dcfd5ea5ad3636a -Block 0012 [ 62]: f3848e715bf6e61b -Block 0012 [ 63]: be4d839c33f14bfd -Block 0012 [ 64]: 397abb336ac92022 -Block 0012 [ 65]: f20cee19e5e388fc -Block 0012 [ 66]: 6edd6d3d0d2323ab -Block 0012 [ 67]: e3b6c5f7c944af17 -Block 0012 [ 68]: 990fcad01d4052f0 -Block 0012 [ 69]: 629c06d809f81f90 -Block 0012 [ 70]: 5c4a5071655f899f -Block 0012 [ 71]: 40d54256be550482 -Block 0012 [ 72]: 4fe1f617c9c672b3 -Block 0012 [ 73]: 3af9e965e25ee169 -Block 0012 [ 74]: 93246b2adad69d87 -Block 0012 [ 75]: 3eb7245c60abfa3a -Block 0012 [ 76]: 411c2a17452fc250 -Block 0012 [ 77]: 5d2af0c77b854c04 -Block 0012 [ 78]: 11218a31a7d3960b -Block 0012 [ 79]: 79b6f5e1d69a33b6 -Block 0012 [ 80]: 81fbaab092b14bf3 -Block 0012 [ 81]: 9f40f1f5344bc391 -Block 0012 [ 82]: 52fd68c595c511d0 -Block 0012 [ 83]: ec28704fb787cbe2 -Block 0012 [ 84]: 2ef764aef58346ae -Block 0012 [ 85]: e76767105c7b8af2 -Block 0012 [ 86]: b7ea621da02c9d03 -Block 0012 [ 87]: 3086a0391498b2e3 -Block 0012 [ 88]: 252329e57c6144c0 -Block 0012 [ 89]: e0d034657ad118b2 -Block 0012 [ 90]: 3d81206435e4cbae -Block 0012 [ 91]: 3b3ca2059dc97c30 -Block 0012 [ 92]: aabcdf9fb844df47 -Block 0012 [ 93]: 3c6b558831ed4b92 -Block 0012 [ 94]: b7bc17b4b0f33c9d -Block 0012 [ 95]: a4a82578872fbc6d -Block 0012 [ 96]: d85124a9b6672389 -Block 0012 [ 97]: 08b17e75139006f6 -Block 0012 [ 98]: 977827cd78088f2a -Block 0012 [ 99]: c20bc30182a91fe1 -Block 0012 [100]: 91bd9bda54db837c -Block 0012 [101]: a56f2ec6fa7ae2a1 -Block 0012 [102]: 75b8aab88e62f2f6 -Block 0012 [103]: e058c358294f6c0d -Block 0012 [104]: 98343c65fbe5e6ba -Block 0012 [105]: 659c225db9887bc8 -Block 0012 [106]: 948fb28011425b40 -Block 0012 [107]: 67cf0ff8cf3e0439 -Block 0012 [108]: 26e5546ece3ef627 -Block 0012 [109]: 72aab058c6c7cbc0 -Block 0012 [110]: ccc489c7bbbcde3a -Block 0012 [111]: 65b2322e9fbb9abe -Block 0012 [112]: 52326cb2a92360aa -Block 0012 [113]: 6eb0f22b356aacda -Block 0012 [114]: 156607f0176d9d5b -Block 0012 [115]: 0e18a589d9c98b2b -Block 0012 [116]: b73ed2b9c3cddad6 -Block 0012 [117]: bb4bac45f760c708 -Block 0012 [118]: f954e80c85c61a21 -Block 0012 [119]: f72b0dea1dbd82ee -Block 0012 [120]: 061e6c6fd5c9af78 -Block 0012 [121]: d8036a836de015bc -Block 0012 [122]: c06b956b2c5944b8 -Block 0012 [123]: d354483d3da39bc5 -Block 0012 [124]: 8042853ccccdf2aa -Block 0012 [125]: cb33ae4bcdbf89f5 -Block 0012 [126]: b36b52f64c953c3e -Block 0012 [127]: 43d5c23cbf60f228 -Block 0013 [ 0]: 18e43ecb466a8968 -Block 0013 [ 1]: de0624bc4603c390 -Block 0013 [ 2]: e47c6900e1e0f9ec -Block 0013 [ 3]: 1f7523e92ceff004 -Block 0013 [ 4]: 90ea827f76ffd035 -Block 0013 [ 5]: e2207e851ad049a1 -Block 0013 [ 6]: 0dadce26fee967e3 -Block 0013 [ 7]: f6c91d95427d2e35 -Block 0013 [ 8]: d163aca31bc02437 -Block 0013 [ 9]: ae11833e1859b9dd -Block 0013 [ 10]: 0085475658b25b37 -Block 0013 [ 11]: a941662fc1bf7290 -Block 0013 [ 12]: 785b6a11ee6cdcf8 -Block 0013 [ 13]: 78ae534c17d037e9 -Block 0013 [ 14]: 5409875d5a7c1f94 -Block 0013 [ 15]: 2e57b97295d14afa -Block 0013 [ 16]: 20f11b28155fdaa0 -Block 0013 [ 17]: 49680370961a80b2 -Block 0013 [ 18]: 506ec8c10dd1ca21 -Block 0013 [ 19]: b323ba42707917f0 -Block 0013 [ 20]: 2c7ac437db4b5bc8 -Block 0013 [ 21]: 7609f06765e28d19 -Block 0013 [ 22]: 09bc9531879ebcff -Block 0013 [ 23]: 6b96f2e996fe0877 -Block 0013 [ 24]: 0be156a465407fe9 -Block 0013 [ 25]: c5c4043a6b9ab6ea -Block 0013 [ 26]: ead52b39166fc1e6 -Block 0013 [ 27]: f40357c33f749e39 -Block 0013 [ 28]: f3d43b525a872a0a -Block 0013 [ 29]: 1e62f830e3519b2e -Block 0013 [ 30]: dffcd1e0532ddf7f -Block 0013 [ 31]: ecdebc7e2df4ca61 -Block 0013 [ 32]: 956e9be0eae88846 -Block 0013 [ 33]: 5f2867f853307359 -Block 0013 [ 34]: 54f0c56e75250fc7 -Block 0013 [ 35]: d821f1a65277b0da -Block 0013 [ 36]: 5a1badcd335982e0 -Block 0013 [ 37]: 2aefcd4c13c5595f -Block 0013 [ 38]: d8cae5e2fd0ecd13 -Block 0013 [ 39]: e111ec2dea668473 -Block 0013 [ 40]: 4f94418823c5fd86 -Block 0013 [ 41]: 6cbfd543b9e6c0f3 -Block 0013 [ 42]: 635b3f358ddebe5d -Block 0013 [ 43]: e1fedaf13a785014 -Block 0013 [ 44]: cb1ecd99b31799d2 -Block 0013 [ 45]: 7a55a2101bc1badd -Block 0013 [ 46]: 3789674f01e71585 -Block 0013 [ 47]: b30e075a7084778a -Block 0013 [ 48]: 68a9b8dba31d54de -Block 0013 [ 49]: 5924e35dad98726d -Block 0013 [ 50]: 54c063d3efd3f781 -Block 0013 [ 51]: 35a5759d0e811a46 -Block 0013 [ 52]: 67f813e40948aa3e -Block 0013 [ 53]: e30f18c6a37e3ef7 -Block 0013 [ 54]: 9fa54fdd007564c4 -Block 0013 [ 55]: c20d517b50bc5f9b -Block 0013 [ 56]: 17bc793afcc2d58f -Block 0013 [ 57]: 8ee17609a1f73d66 -Block 0013 [ 58]: 9512c68643cdbc82 -Block 0013 [ 59]: 93cea37bcad14887 -Block 0013 [ 60]: e82d710423fc7374 -Block 0013 [ 61]: edba70dbc24e1ab5 -Block 0013 [ 62]: 0dbaf4429ad565f8 -Block 0013 [ 63]: fef4942ca08fed0d -Block 0013 [ 64]: ca83d6487de24384 -Block 0013 [ 65]: 9e92dfd67d866a01 -Block 0013 [ 66]: d274d461fa499a68 -Block 0013 [ 67]: 70a2e178171a42ef -Block 0013 [ 68]: 2522a77aa3935a8e -Block 0013 [ 69]: 38fcde56f53a4afb -Block 0013 [ 70]: 5e49c140c03a9923 -Block 0013 [ 71]: 171aa7389918a2e7 -Block 0013 [ 72]: 3a8f18ccd501197b -Block 0013 [ 73]: 76f0992020b3d59c -Block 0013 [ 74]: 3c373d386809a05c -Block 0013 [ 75]: 2a30a1b8155318a4 -Block 0013 [ 76]: a03fa84d01f13453 -Block 0013 [ 77]: 4a872280f5ef1a3b -Block 0013 [ 78]: c22b8619c689c0ef -Block 0013 [ 79]: dd6c265ea30559a6 -Block 0013 [ 80]: c819aafe8db166ed -Block 0013 [ 81]: 46f01e808cfe0a4a -Block 0013 [ 82]: 440f0e8ab090496f -Block 0013 [ 83]: ce51c3ecd3766d6b -Block 0013 [ 84]: 7f0b0ef92deffc64 -Block 0013 [ 85]: 116c821f6c9fdc28 -Block 0013 [ 86]: 9cc813686c478e37 -Block 0013 [ 87]: 1ff9523444a9f731 -Block 0013 [ 88]: bfc9b93360dc52fd -Block 0013 [ 89]: 453d3a0c4d2a6ce8 -Block 0013 [ 90]: e64484db10e4c9ea -Block 0013 [ 91]: f85e66468328fce4 -Block 0013 [ 92]: d3b71ef1d0857bdb -Block 0013 [ 93]: 8fc64459b1b84aa9 -Block 0013 [ 94]: 4ff3785ad108501e -Block 0013 [ 95]: 5db53ddd955530b0 -Block 0013 [ 96]: 0e9db8ed5086f981 -Block 0013 [ 97]: 8ef019feb7b74454 -Block 0013 [ 98]: b13a76096fdd138f -Block 0013 [ 99]: cb7d283fc650d0c0 -Block 0013 [100]: 2e85ae49006df7f5 -Block 0013 [101]: 6bc81aa091850cfc -Block 0013 [102]: c8337747d3a09c23 -Block 0013 [103]: 67b1769f37d721cb -Block 0013 [104]: 6cc2cd4c1bf5bfd5 -Block 0013 [105]: 2f2d8fea231dc9b5 -Block 0013 [106]: d07c5b8da4cefa1c -Block 0013 [107]: 21824639499054fb -Block 0013 [108]: 5aa3d5bd8b14ca72 -Block 0013 [109]: c5897b79d1064a0b -Block 0013 [110]: bac2bb6e9516511b -Block 0013 [111]: 7cf309367e8b306e -Block 0013 [112]: a0abfa3564cb142e -Block 0013 [113]: 0f2b7c41cde3a983 -Block 0013 [114]: 6b77066f440bb86b -Block 0013 [115]: 419b2373a574cb92 -Block 0013 [116]: cb2a2e3d1c092282 -Block 0013 [117]: f3be594d1481879e -Block 0013 [118]: 2e56778ff9740d34 -Block 0013 [119]: 9eb7964504e4b519 -Block 0013 [120]: 4202d23d721d162b -Block 0013 [121]: a1d0610d3bd8fbbb -Block 0013 [122]: 070e2baa1f4b17fe -Block 0013 [123]: d8465bb41a1826e8 -Block 0013 [124]: f2dc327281534bfb -Block 0013 [125]: a8674141208bf59d -Block 0013 [126]: 414187ba004fc431 -Block 0013 [127]: 85664d6cdae69ec7 -Block 0014 [ 0]: 273f89c3c4d02299 -Block 0014 [ 1]: 65cdbad74085012f -Block 0014 [ 2]: 1b209b55833ad98e -Block 0014 [ 3]: ecc8b976b1a67ae9 -Block 0014 [ 4]: cb5166556f87a25b -Block 0014 [ 5]: b7d1f89b87526040 -Block 0014 [ 6]: 373382b4d510dfd3 -Block 0014 [ 7]: 04fbe454c5ea3f3b -Block 0014 [ 8]: 26ee04db4cee85e1 -Block 0014 [ 9]: b49d3ce4b2a068fb -Block 0014 [ 10]: 1e0284184e27ad46 -Block 0014 [ 11]: 9f05fcd205c15aad -Block 0014 [ 12]: 8c84f8290060fef1 -Block 0014 [ 13]: fe0f3f65a0e49203 -Block 0014 [ 14]: f0cfcb1a06f79993 -Block 0014 [ 15]: 453a2a0021034051 -Block 0014 [ 16]: 442c6629ea64dda6 -Block 0014 [ 17]: ce15b0b7ad384fd9 -Block 0014 [ 18]: 039550d4511e19c8 -Block 0014 [ 19]: 54bde38889bb00a5 -Block 0014 [ 20]: 48dda5fe7bd65bc0 -Block 0014 [ 21]: 1f0b7375d9cdd05b -Block 0014 [ 22]: 48df34a0dbf136ba -Block 0014 [ 23]: b20a359e9281ea3b -Block 0014 [ 24]: 431c29ff33a999d3 -Block 0014 [ 25]: 0968e84781dd8bde -Block 0014 [ 26]: 182b2d58441e26ee -Block 0014 [ 27]: fb23c95d4d4abcbe -Block 0014 [ 28]: 25b087fb10a7b02d -Block 0014 [ 29]: 0591464d8c341c3a -Block 0014 [ 30]: 394ed79a62d9c0ae -Block 0014 [ 31]: d9bf954211f9f238 -Block 0014 [ 32]: f3e8633abc0da2c7 -Block 0014 [ 33]: b55d953f9561dc9c -Block 0014 [ 34]: 34b94b3f5a185d38 -Block 0014 [ 35]: 41994961bc5912b4 -Block 0014 [ 36]: 0a49a8f3fa468833 -Block 0014 [ 37]: 3168909e7e87dcd8 -Block 0014 [ 38]: 49a79f694d38b937 -Block 0014 [ 39]: aeca197acd807826 -Block 0014 [ 40]: e78018bda087ed66 -Block 0014 [ 41]: caf0caca076d215a -Block 0014 [ 42]: df57e8aaa56e06e8 -Block 0014 [ 43]: e04757a1866d206f -Block 0014 [ 44]: b14d1f7e87a9b7f4 -Block 0014 [ 45]: 1f2fed83aafb7139 -Block 0014 [ 46]: e62bb58ff3b8e493 -Block 0014 [ 47]: 0f4db670f7d7e617 -Block 0014 [ 48]: 49393771498d5f3d -Block 0014 [ 49]: 40ff217967d0e6b4 -Block 0014 [ 50]: 43361453b3774655 -Block 0014 [ 51]: 798eff0f49dcf729 -Block 0014 [ 52]: 2b52f449561c01d6 -Block 0014 [ 53]: 7f22e3d534852755 -Block 0014 [ 54]: 5c5a01509a2ceaf1 -Block 0014 [ 55]: e723988ef8d43faf -Block 0014 [ 56]: 5cd2a452f32589e3 -Block 0014 [ 57]: 4492d0afff901013 -Block 0014 [ 58]: 5f74c6b8364a8b16 -Block 0014 [ 59]: 531f2fdffbed3c1b -Block 0014 [ 60]: b58c72a19555d9e9 -Block 0014 [ 61]: a2b49eee8d78c6ad -Block 0014 [ 62]: ac5b58636303f51d -Block 0014 [ 63]: bbb04381f89de22b -Block 0014 [ 64]: 310bb057d316746b -Block 0014 [ 65]: df609a73aa6f04c1 -Block 0014 [ 66]: dde1e330db4a2353 -Block 0014 [ 67]: df8bd2c3aa4ed8d5 -Block 0014 [ 68]: a354ff5ec71203d3 -Block 0014 [ 69]: a63bd02607f399dc -Block 0014 [ 70]: f686121f14151e98 -Block 0014 [ 71]: 99b2bb138b954be7 -Block 0014 [ 72]: 308625b4491ccb32 -Block 0014 [ 73]: 297a597e8c04e7c4 -Block 0014 [ 74]: c126cb6c2c547416 -Block 0014 [ 75]: 95466d15799cf5b7 -Block 0014 [ 76]: 363687f488132959 -Block 0014 [ 77]: 1a7824f884e546e5 -Block 0014 [ 78]: 6f2591631287db18 -Block 0014 [ 79]: f4b6521106d317a2 -Block 0014 [ 80]: 7e3835fc300cf076 -Block 0014 [ 81]: 1caac48041fba75f -Block 0014 [ 82]: 8212146ba19b4068 -Block 0014 [ 83]: ba118608fd5f86e0 -Block 0014 [ 84]: d909e703db90c331 -Block 0014 [ 85]: a09b6bfbe24eaf6b -Block 0014 [ 86]: 6996644aa1b4214e -Block 0014 [ 87]: eb02ad1a13fade24 -Block 0014 [ 88]: ad14cb674fdc24fe -Block 0014 [ 89]: 75a579cc9bc86d81 -Block 0014 [ 90]: 11a448208b1bad80 -Block 0014 [ 91]: dd7e817951488ebb -Block 0014 [ 92]: 84319b6e0a938a8e -Block 0014 [ 93]: 601a085543c1f304 -Block 0014 [ 94]: a26ec834a5008ed6 -Block 0014 [ 95]: 065886b182b12de9 -Block 0014 [ 96]: bca693abbc55f94e -Block 0014 [ 97]: d75838f966cd197d -Block 0014 [ 98]: 0fc473ed39950739 -Block 0014 [ 99]: 86b5eeb016c5c09e -Block 0014 [100]: b620889b18b197e4 -Block 0014 [101]: 7bd685894288c621 -Block 0014 [102]: a4fb318772e1f30e -Block 0014 [103]: 75d292c046b66ba8 -Block 0014 [104]: 106da59cc1adc7b9 -Block 0014 [105]: f72257945ad6c61e -Block 0014 [106]: 97f73c5a48c7eb8f -Block 0014 [107]: bbf3c353fe34c7ce -Block 0014 [108]: ba8b83a9f90f632e -Block 0014 [109]: 4747de44c251976d -Block 0014 [110]: f18a8336d5c33cdf -Block 0014 [111]: c94db7537973cc65 -Block 0014 [112]: 11e1046ee6ffa84a -Block 0014 [113]: 61ede68d3dd7a018 -Block 0014 [114]: 840a15e6cdb6615a -Block 0014 [115]: c35bece40424bee4 -Block 0014 [116]: 63d05f3e0c4f1d1e -Block 0014 [117]: e802bb16993cf741 -Block 0014 [118]: 39ee29de862cd4bf -Block 0014 [119]: 6c9e966cba8180ea -Block 0014 [120]: 0f31cfc44385b89a -Block 0014 [121]: 36ab1b02706b383d -Block 0014 [122]: d8e57c05760ab650 -Block 0014 [123]: 0745e27d24cb16b5 -Block 0014 [124]: e588703fb8d7bc20 -Block 0014 [125]: 0644bdce31a77191 -Block 0014 [126]: 1bd0666d9975b8f9 -Block 0014 [127]: 7dc4943f398250a6 -Block 0015 [ 0]: 4e7562e99872522b -Block 0015 [ 1]: 66b8a4b078db303c -Block 0015 [ 2]: 4f9e3d64d3c842cf -Block 0015 [ 3]: c22b2bdbf886ef3c -Block 0015 [ 4]: cdd4df9530916a8d -Block 0015 [ 5]: 23bb0f61caf2b262 -Block 0015 [ 6]: 17c2092fa60f6f45 -Block 0015 [ 7]: 4125dd598e088602 -Block 0015 [ 8]: 8406d6514999d625 -Block 0015 [ 9]: 8467b8c69044a698 -Block 0015 [ 10]: 1418ded13a87f1c1 -Block 0015 [ 11]: ec81553a84582651 -Block 0015 [ 12]: 6d37718ba2e32dc4 -Block 0015 [ 13]: 31119a7d298fedba -Block 0015 [ 14]: 6aec539cbe7a2d82 -Block 0015 [ 15]: 1302e8bf03137898 -Block 0015 [ 16]: 27f7482fd8b4c288 -Block 0015 [ 17]: 211f11d1af0df544 -Block 0015 [ 18]: b610c439809337bc -Block 0015 [ 19]: 51ef516a43d28553 -Block 0015 [ 20]: d6953153439c5df9 -Block 0015 [ 21]: 8bae6253e709b68f -Block 0015 [ 22]: 68065cd35f15374f -Block 0015 [ 23]: 6a238be5cea416af -Block 0015 [ 24]: 977d7259234f6365 -Block 0015 [ 25]: 4cd916b891b0778f -Block 0015 [ 26]: 35116f1080cef277 -Block 0015 [ 27]: 568c31f4ed06dd0d -Block 0015 [ 28]: f3036b593431b2f2 -Block 0015 [ 29]: 734441677e625cd7 -Block 0015 [ 30]: f891ecf5e790d153 -Block 0015 [ 31]: 7b4959ff7cd052ed -Block 0015 [ 32]: 7e90fb5ae04ec9ec -Block 0015 [ 33]: 278bdb2b3068750d -Block 0015 [ 34]: 542970101d9e03b5 -Block 0015 [ 35]: 92613dff6f3cace4 -Block 0015 [ 36]: 0bca0734e50828f7 -Block 0015 [ 37]: 93d8a2694b1228fd -Block 0015 [ 38]: 58f220eede1aee8d -Block 0015 [ 39]: 1296ac6d714977aa -Block 0015 [ 40]: b10bfd20792f958f -Block 0015 [ 41]: e51bb8dafb1cac13 -Block 0015 [ 42]: 0f033677bae35a45 -Block 0015 [ 43]: 8815c9cc589ef617 -Block 0015 [ 44]: 0a7588f5ba0585b3 -Block 0015 [ 45]: 561c9266bf857827 -Block 0015 [ 46]: 1a658bb9854aa89d -Block 0015 [ 47]: 2bc84c130bf82b05 -Block 0015 [ 48]: ab8019ce7e71d1df -Block 0015 [ 49]: 011cfb35e8763a17 -Block 0015 [ 50]: c9173bccc4ca9678 -Block 0015 [ 51]: bbcb9e737c362350 -Block 0015 [ 52]: 09e15c0437a57cdb -Block 0015 [ 53]: 64f684ab037429d6 -Block 0015 [ 54]: 1420435f8cdd5c66 -Block 0015 [ 55]: 36adee091cfc29ee -Block 0015 [ 56]: 1fde9df5dbff0132 -Block 0015 [ 57]: b6a34569f36bc4c7 -Block 0015 [ 58]: 8eb15a83c5d21868 -Block 0015 [ 59]: 660cd0e9c8a1a7d8 -Block 0015 [ 60]: e54badb052c928ee -Block 0015 [ 61]: ac8cc341e0ae1af5 -Block 0015 [ 62]: 5155906cc20e5e77 -Block 0015 [ 63]: d86576106452b0f0 -Block 0015 [ 64]: c66032c9204546e4 -Block 0015 [ 65]: 8332b4874131b9cb -Block 0015 [ 66]: 47ae353d4464335f -Block 0015 [ 67]: fd646e4545794a48 -Block 0015 [ 68]: 9fd0218acae10f24 -Block 0015 [ 69]: f2f6040ffbc6e58f -Block 0015 [ 70]: 388720e8c1d2dc12 -Block 0015 [ 71]: 822980335abb942c -Block 0015 [ 72]: a54e39961e5e6203 -Block 0015 [ 73]: 4f8eea2afae53a05 -Block 0015 [ 74]: ec36590c61711e62 -Block 0015 [ 75]: 1d044f7eb1edbb8e -Block 0015 [ 76]: 020f47bb7c4dc9b0 -Block 0015 [ 77]: dc8cf730af322a2f -Block 0015 [ 78]: 5ba84a051d763d7b -Block 0015 [ 79]: e04e796053d22286 -Block 0015 [ 80]: 1fa5ce52fc8565a6 -Block 0015 [ 81]: b25f1c05d7490304 -Block 0015 [ 82]: a4e0006cce1fa914 -Block 0015 [ 83]: 3279c3cde2c9ecec -Block 0015 [ 84]: 689361e4370c48b6 -Block 0015 [ 85]: 77567214a9d5dd81 -Block 0015 [ 86]: f4877ca9650391cc -Block 0015 [ 87]: 93747ddab39b430a -Block 0015 [ 88]: 2c0b37f027b54360 -Block 0015 [ 89]: 052529d6af326a57 -Block 0015 [ 90]: 91357d945a80cdb8 -Block 0015 [ 91]: 2fda3ba647eac74c -Block 0015 [ 92]: f5c21a8e76fa19d3 -Block 0015 [ 93]: 69c8bf807e40f728 -Block 0015 [ 94]: 7177057f6df7fab8 -Block 0015 [ 95]: 19637448baea9365 -Block 0015 [ 96]: 1bc3c05cd0a7e170 -Block 0015 [ 97]: 8b175f281aa5184c -Block 0015 [ 98]: 22f878ec508d2505 -Block 0015 [ 99]: 02bad20f789cc371 -Block 0015 [100]: df485d396e80da2e -Block 0015 [101]: e1177e38552b3b0f -Block 0015 [102]: cd5d9d315a42b212 -Block 0015 [103]: 4ed4199994fc0503 -Block 0015 [104]: b4556ef1bbf50d9b -Block 0015 [105]: 27ec9c33c2817064 -Block 0015 [106]: 2cb72f64b92601eb -Block 0015 [107]: af35f896991a8829 -Block 0015 [108]: a8a6bed2402f441f -Block 0015 [109]: 92371ee6ee3dd914 -Block 0015 [110]: f01d46477e83f53c -Block 0015 [111]: 157f0bc4848bf4e7 -Block 0015 [112]: b8accc3eadeda0a7 -Block 0015 [113]: d234ef67c125e7ef -Block 0015 [114]: d3ad74bedef4c4fd -Block 0015 [115]: 9d647f2d0f69b7df -Block 0015 [116]: 7508119dee6aeb48 -Block 0015 [117]: 28f0c80b6803f8c8 -Block 0015 [118]: 7f7528ded9487889 -Block 0015 [119]: af444f8e9ad26d92 -Block 0015 [120]: 1e849f3d83b05579 -Block 0015 [121]: 3905d4df49382f60 -Block 0015 [122]: 0579d173ff4e01dd -Block 0015 [123]: 7ad8e9bd97862430 -Block 0015 [124]: 9d9df0ba6442503f -Block 0015 [125]: e83d5bffc3957d64 -Block 0015 [126]: dec92b7cb93eb3d8 -Block 0015 [127]: 132eceec8b789472 -Block 0016 [ 0]: a7c4bd9c8195e5ae -Block 0016 [ 1]: d2e7203b85272ece -Block 0016 [ 2]: c4c57f73c5463166 -Block 0016 [ 3]: 703ab3c8d9c1db19 -Block 0016 [ 4]: 9720fe7c801a431e -Block 0016 [ 5]: 4b9783e71df58bb1 -Block 0016 [ 6]: d100be4423e41516 -Block 0016 [ 7]: 1f5bc28255df4c18 -Block 0016 [ 8]: dc29d9e528350071 -Block 0016 [ 9]: 70e98de92f01c8e8 -Block 0016 [ 10]: 082a279585108603 -Block 0016 [ 11]: 12824a1c6baddbf8 -Block 0016 [ 12]: 299b198d5687861b -Block 0016 [ 13]: d764532121fcb048 -Block 0016 [ 14]: 7ed58a31dc247ca1 -Block 0016 [ 15]: 04974b0e380e190e -Block 0016 [ 16]: 005cd3437ce2b618 -Block 0016 [ 17]: 4d2160b2e9929125 -Block 0016 [ 18]: 4c2f1164bd9572ca -Block 0016 [ 19]: e45ce310e0ab8651 -Block 0016 [ 20]: 4d4ce7e432b5ef92 -Block 0016 [ 21]: 5598f75c0e3ed39e -Block 0016 [ 22]: 74a116c69967d582 -Block 0016 [ 23]: 7a61a7262e89199d -Block 0016 [ 24]: 2a70ca5bd3b70742 -Block 0016 [ 25]: b176ad069e401739 -Block 0016 [ 26]: 08ec43669e715bf5 -Block 0016 [ 27]: 834f52898a5622ed -Block 0016 [ 28]: 69fc86a4ae45b482 -Block 0016 [ 29]: f8f87fb7c99b53c9 -Block 0016 [ 30]: 8b26ba5c4aaaf50d -Block 0016 [ 31]: 257a9e3be7804fd6 -Block 0016 [ 32]: 92b35066abb159db -Block 0016 [ 33]: d5652c3400531043 -Block 0016 [ 34]: 17121e2c27c5243a -Block 0016 [ 35]: bd2429d2c6881bfb -Block 0016 [ 36]: 3fe2e56950c12c7d -Block 0016 [ 37]: 2d4b8a1bf11c6257 -Block 0016 [ 38]: 04aa03aead29ddaf -Block 0016 [ 39]: bca22327be578191 -Block 0016 [ 40]: f75a1c32c133c5a0 -Block 0016 [ 41]: 5789b745ce7deaa6 -Block 0016 [ 42]: 19d1f1f0f0307e01 -Block 0016 [ 43]: a74e6d13a3b0e57b -Block 0016 [ 44]: d427fb2528c9a0a2 -Block 0016 [ 45]: 4e06a13184d4589f -Block 0016 [ 46]: b3a015cb32e2fa41 -Block 0016 [ 47]: 89083dd7a3a7ea7b -Block 0016 [ 48]: 7f8197bba08ae770 -Block 0016 [ 49]: f8173c4a7d9e9a20 -Block 0016 [ 50]: a25ef0122bb3e4fe -Block 0016 [ 51]: a8cfcf2ccb632274 -Block 0016 [ 52]: 4794a1c6e0c6fd3a -Block 0016 [ 53]: 28bfebcf8eba67fd -Block 0016 [ 54]: 548ce35ad71a6de8 -Block 0016 [ 55]: 55e14585214b44ae -Block 0016 [ 56]: 4f2c91227ef2f67e -Block 0016 [ 57]: 1f46ff01df8c7b92 -Block 0016 [ 58]: 176e93db8da1c1aa -Block 0016 [ 59]: c1999f8432873a9a -Block 0016 [ 60]: f253261d5c603127 -Block 0016 [ 61]: 4dc28da5758a3ecc -Block 0016 [ 62]: 9dc6739c55bfe672 -Block 0016 [ 63]: d46ceb9c82cf77f0 -Block 0016 [ 64]: 606ace0c4e59088c -Block 0016 [ 65]: 6a2b1c743bed4464 -Block 0016 [ 66]: a222bb63a9d1dfa4 -Block 0016 [ 67]: 7bf4a973bb0ea950 -Block 0016 [ 68]: b6e4eb111b0f90e9 -Block 0016 [ 69]: 963b4f01ca24e49a -Block 0016 [ 70]: f12a07803f119709 -Block 0016 [ 71]: c9a4bd99c942bb93 -Block 0016 [ 72]: 1b631319178a8b8b -Block 0016 [ 73]: 13dce9b5956e7c62 -Block 0016 [ 74]: af1ab6950e39073a -Block 0016 [ 75]: 2077fc99c62a3629 -Block 0016 [ 76]: 7b17e876bc56d9a1 -Block 0016 [ 77]: 5697e81e5b10b640 -Block 0016 [ 78]: ec1a36a6ba2668c2 -Block 0016 [ 79]: ce3e10c7c721e1aa -Block 0016 [ 80]: d55eb97cd2b697ca -Block 0016 [ 81]: 7d6190610198b4a4 -Block 0016 [ 82]: 6eaf57dbad34d038 -Block 0016 [ 83]: 61e3393f4c4b9a42 -Block 0016 [ 84]: e3c0008bbe5960d7 -Block 0016 [ 85]: c6f809afbee36fea -Block 0016 [ 86]: 4c3d6ed4514efa91 -Block 0016 [ 87]: 0897a22b8fd03be3 -Block 0016 [ 88]: 0103454f10ab0cb1 -Block 0016 [ 89]: a4a40dd908a3e32d -Block 0016 [ 90]: 2865f329d9da074f -Block 0016 [ 91]: 3fc7f288b723d94e -Block 0016 [ 92]: 9f5fe6a83da6c0b3 -Block 0016 [ 93]: d96214e995bc42dc -Block 0016 [ 94]: 4d17727350dc92fb -Block 0016 [ 95]: 99e33bc47e06c103 -Block 0016 [ 96]: 566bd4910d1149e6 -Block 0016 [ 97]: deb495e41515c67c -Block 0016 [ 98]: 9dda393d183ebe5e -Block 0016 [ 99]: 50da7b9bd87c0620 -Block 0016 [100]: 20eaca05f8caecf0 -Block 0016 [101]: 73f201cfabe4e3df -Block 0016 [102]: 8837f8da8260eb0f -Block 0016 [103]: afec76bbd77b1a05 -Block 0016 [104]: 94318f9750f6a554 -Block 0016 [105]: 8fdb5ad4d8f03be0 -Block 0016 [106]: b13106b580105096 -Block 0016 [107]: a3ef3f3a8518a008 -Block 0016 [108]: b85051713552ee6d -Block 0016 [109]: abd559c687293ffd -Block 0016 [110]: c701a56b69c9670f -Block 0016 [111]: 9fe8ce8a418c1029 -Block 0016 [112]: 5131ac1b41dc1db1 -Block 0016 [113]: a8f5622b22294904 -Block 0016 [114]: 99d166b28c228cba -Block 0016 [115]: 4221fa4de0332567 -Block 0016 [116]: 7e5e49691c67a3b0 -Block 0016 [117]: 04c18bdb2bbe716e -Block 0016 [118]: 6c95bba9a6a0066e -Block 0016 [119]: 65913aae6e7f3496 -Block 0016 [120]: 6ccee1cf9135225e -Block 0016 [121]: eea59d57c3c1067b -Block 0016 [122]: bc53b79d836fcd67 -Block 0016 [123]: 005b4b44a8c75488 -Block 0016 [124]: 75a0c228c4925ca1 -Block 0016 [125]: 51db30da0208afa3 -Block 0016 [126]: c3fa22b10c158f11 -Block 0016 [127]: 32f9bfdf3810cffb -Block 0017 [ 0]: 55f864a4bba04b69 -Block 0017 [ 1]: 86688ea3b4c7b570 -Block 0017 [ 2]: 4acb9000c989e990 -Block 0017 [ 3]: a684cce37b3dbecf -Block 0017 [ 4]: 1308047031fd0b09 -Block 0017 [ 5]: 48d0396732b7d297 -Block 0017 [ 6]: e65eab4b35fdc1e8 -Block 0017 [ 7]: f8f55563c27513ad -Block 0017 [ 8]: 43631c52a17d0455 -Block 0017 [ 9]: 7c58534e0153d743 -Block 0017 [ 10]: b680014bde5a5b00 -Block 0017 [ 11]: a98686fa6034fb55 -Block 0017 [ 12]: b40e7cd918e4bb6b -Block 0017 [ 13]: 7a129caa8f7b7ecd -Block 0017 [ 14]: 7a2c5f80068ed988 -Block 0017 [ 15]: 74930f06e7818b64 -Block 0017 [ 16]: 699df22ad1c2b7a7 -Block 0017 [ 17]: 935ab251bd87d363 -Block 0017 [ 18]: 0ae1d9012e3edbe5 -Block 0017 [ 19]: 32ea4d9dd0b8a926 -Block 0017 [ 20]: 547db28a60aa43e5 -Block 0017 [ 21]: 6c9ee0a9de7f1b87 -Block 0017 [ 22]: 905cc8aaf66a86eb -Block 0017 [ 23]: 7d20f5583a60e2f3 -Block 0017 [ 24]: e34f5bbbfa73d678 -Block 0017 [ 25]: d61c1b847c02150f -Block 0017 [ 26]: 41cb644e15d0b052 -Block 0017 [ 27]: e00227734f066173 -Block 0017 [ 28]: d8af76bd1770ab69 -Block 0017 [ 29]: b79d451c214a4bc4 -Block 0017 [ 30]: 2f5402b7495d5cb6 -Block 0017 [ 31]: bebecb6d82b81cab -Block 0017 [ 32]: 840c99b3a37ee1c3 -Block 0017 [ 33]: eee590dc48ce4c28 -Block 0017 [ 34]: 6b75a284765b0d20 -Block 0017 [ 35]: d4d30ec02cef9dd5 -Block 0017 [ 36]: 594fa4b9f2e1f661 -Block 0017 [ 37]: 14d30d5dbcbbf39a -Block 0017 [ 38]: 97f18e14fc209bf3 -Block 0017 [ 39]: ad730f490aa5a7fc -Block 0017 [ 40]: 7cf845139f9df67a -Block 0017 [ 41]: 090a6c6adb749c17 -Block 0017 [ 42]: c66fc330fe7a832d -Block 0017 [ 43]: 7d046a6232b6644e -Block 0017 [ 44]: eccd8b00bb5c89ae -Block 0017 [ 45]: cfa80b3ca9b32666 -Block 0017 [ 46]: cf538995385e0d84 -Block 0017 [ 47]: 5a058bf3cb834267 -Block 0017 [ 48]: 734d6406b7c25f24 -Block 0017 [ 49]: 58f2c405e68c867b -Block 0017 [ 50]: 3dac578d2f388db0 -Block 0017 [ 51]: 00cd551f962e2d02 -Block 0017 [ 52]: 49b13b2924e88a93 -Block 0017 [ 53]: e7743f5443a9d274 -Block 0017 [ 54]: 98dd74f1733f61bc -Block 0017 [ 55]: 711854c53a5a12c2 -Block 0017 [ 56]: 01ba975458f076c1 -Block 0017 [ 57]: 2935ddb4a0a9a780 -Block 0017 [ 58]: 98a3847b5f5a92b1 -Block 0017 [ 59]: f6b51f815727a771 -Block 0017 [ 60]: 83d455831270fa14 -Block 0017 [ 61]: bf01382f3fb5dc3b -Block 0017 [ 62]: 1e40bfb6f2493fe3 -Block 0017 [ 63]: 5a861f123e59c889 -Block 0017 [ 64]: 44569ccf53d43812 -Block 0017 [ 65]: 08e3be00922024dd -Block 0017 [ 66]: b30ea60175ed31b8 -Block 0017 [ 67]: c67ada13ea4ef796 -Block 0017 [ 68]: 6ae9bb2e162e1793 -Block 0017 [ 69]: d16637c04dd7479b -Block 0017 [ 70]: 82d1f83bfa388973 -Block 0017 [ 71]: a6ee8701855d80ad -Block 0017 [ 72]: e6a6f0f9a815394a -Block 0017 [ 73]: b09d9a2c1ba5f6c6 -Block 0017 [ 74]: 29253a5eb8f062ec -Block 0017 [ 75]: 9f2f42051b859c49 -Block 0017 [ 76]: 7a553bd4e61add79 -Block 0017 [ 77]: 49f5b81d6d3da61a -Block 0017 [ 78]: 4a2a6b70585823f2 -Block 0017 [ 79]: e0ba481ebbb314a2 -Block 0017 [ 80]: 2e026a086b59c6e5 -Block 0017 [ 81]: af75fc6519e8292b -Block 0017 [ 82]: 68f34b44c3d6ce1f -Block 0017 [ 83]: 66414b29e763ca01 -Block 0017 [ 84]: 7bb093c4cbee74d9 -Block 0017 [ 85]: 52a4474b0cb7c318 -Block 0017 [ 86]: 0514f43a6f43fa6e -Block 0017 [ 87]: 88678d0d92fc9d04 -Block 0017 [ 88]: 9aca117183c360cf -Block 0017 [ 89]: 22b278c99c1be55f -Block 0017 [ 90]: 734f078cd0c14fe4 -Block 0017 [ 91]: a6c4697929b35037 -Block 0017 [ 92]: 20caff1ac11c6a3b -Block 0017 [ 93]: b7b58e29c410063c -Block 0017 [ 94]: f5f82a0e4ffb425c -Block 0017 [ 95]: 1d1faf6a9e04f749 -Block 0017 [ 96]: f61180a10c47e350 -Block 0017 [ 97]: 90c2d0f116370800 -Block 0017 [ 98]: 245c6a8c032df64e -Block 0017 [ 99]: 72af2e2387729677 -Block 0017 [100]: 255fef7d0f299493 -Block 0017 [101]: 63696cd15a9827db -Block 0017 [102]: 9ff1a677815906e9 -Block 0017 [103]: cfe7645e84fbcc6b -Block 0017 [104]: 7d118f5c1773a380 -Block 0017 [105]: 53c22df34ab0c79d -Block 0017 [106]: e60cafb5a84da024 -Block 0017 [107]: c71b19e25f00eaca -Block 0017 [108]: 70a2599c461d4b5a -Block 0017 [109]: a1defaf5d43782e7 -Block 0017 [110]: 307173d4eb84a5f0 -Block 0017 [111]: b2965ee119aae588 -Block 0017 [112]: aea1214bdc220904 -Block 0017 [113]: af783e47a62e2905 -Block 0017 [114]: c17c6bd0dd07543e -Block 0017 [115]: bc2f4f61b3d4bc42 -Block 0017 [116]: 427af793fe06f68e -Block 0017 [117]: d3ddbc5545d45375 -Block 0017 [118]: 7e8f88721e1d599e -Block 0017 [119]: 2fddf0a0a1d0b8de -Block 0017 [120]: 536c66fe9d3064d4 -Block 0017 [121]: ca596ae712b194c4 -Block 0017 [122]: 2d98514c3a3fc1a3 -Block 0017 [123]: 2099f96fa5525447 -Block 0017 [124]: 3a0da830930120fa -Block 0017 [125]: f65c0f3d4d80ec4d -Block 0017 [126]: b02733acf2e0bd07 -Block 0017 [127]: 9a777043164a9ecb -Block 0018 [ 0]: 9757cc1f8fc67731 -Block 0018 [ 1]: 35bf6c0a07d6151b -Block 0018 [ 2]: 4a562b10d3cb3b5b -Block 0018 [ 3]: 3837df4668b638ff -Block 0018 [ 4]: fd8641b21b4bde24 -Block 0018 [ 5]: 7a4c20b761f213bf -Block 0018 [ 6]: c7fbe70faf6e78ad -Block 0018 [ 7]: a35a01acc5baae2d -Block 0018 [ 8]: ba8375042c16a408 -Block 0018 [ 9]: 2c17a49df0210514 -Block 0018 [ 10]: 54bcfc9c5e61a2df -Block 0018 [ 11]: 20b669a6e9371de8 -Block 0018 [ 12]: 5f60f6fa0ce2b5cf -Block 0018 [ 13]: 8876d888784de54d -Block 0018 [ 14]: 5a14abc68ade70d2 -Block 0018 [ 15]: caf7c3bd9bb8d627 -Block 0018 [ 16]: 6aa9f50c26c864b4 -Block 0018 [ 17]: 42c651a28985bfe1 -Block 0018 [ 18]: 299525de82ccf4b7 -Block 0018 [ 19]: 805093fc25cf4833 -Block 0018 [ 20]: fd71d130eead0c07 -Block 0018 [ 21]: 44e09d7e4e7c79ef -Block 0018 [ 22]: d6c9edddb29687b1 -Block 0018 [ 23]: 9ea7f4af4c6e404c -Block 0018 [ 24]: 44b15a0e484e20a8 -Block 0018 [ 25]: 4c0a4ea8ae119282 -Block 0018 [ 26]: 1625138e2fec19e0 -Block 0018 [ 27]: 8c431896e4c7f89f -Block 0018 [ 28]: 1e391f9440f50bbb -Block 0018 [ 29]: abe564717646535b -Block 0018 [ 30]: bfdd2d6c7a615b0c -Block 0018 [ 31]: a476b4167fe0d71e -Block 0018 [ 32]: 2ee078458a627435 -Block 0018 [ 33]: 0f92479fb6bbe7db -Block 0018 [ 34]: f4910af60181eea0 -Block 0018 [ 35]: bdf2c1d96257032f -Block 0018 [ 36]: aa18a53adae220ea -Block 0018 [ 37]: 4680eb844619121c -Block 0018 [ 38]: b5381e15c57b1f8d -Block 0018 [ 39]: a1adbf1d3fc63488 -Block 0018 [ 40]: 456a44ce404b2e50 -Block 0018 [ 41]: 3d588bcdee76376a -Block 0018 [ 42]: 8a7c2c43a9315512 -Block 0018 [ 43]: fe46734e4c364784 -Block 0018 [ 44]: 10de3b6380dcd058 -Block 0018 [ 45]: 04ce55eadbd266fb -Block 0018 [ 46]: 3114eac782bf5a3f -Block 0018 [ 47]: ef503aec668a2980 -Block 0018 [ 48]: 73b2e046a73cce5e -Block 0018 [ 49]: 06dc65dc97686835 -Block 0018 [ 50]: 9afa20ac608c0c95 -Block 0018 [ 51]: a722124767a49fc1 -Block 0018 [ 52]: 3ca0c4282bb241c1 -Block 0018 [ 53]: e3eb230c04aa6faa -Block 0018 [ 54]: 27a925e841a0081a -Block 0018 [ 55]: 92fa113d0e62b8d1 -Block 0018 [ 56]: e1a23f578ad3b6e2 -Block 0018 [ 57]: f0a40e4f904293cb -Block 0018 [ 58]: 24868ed872e36b84 -Block 0018 [ 59]: 25e7a53a161bfcaf -Block 0018 [ 60]: 26e1c9c12b5939e1 -Block 0018 [ 61]: a13029dc4e435467 -Block 0018 [ 62]: 60dee45dc1d2c33b -Block 0018 [ 63]: e5060012f7e3c08f -Block 0018 [ 64]: d80235bfd51562b4 -Block 0018 [ 65]: 9e65692aa89c51ae -Block 0018 [ 66]: f6189d85d588d4b8 -Block 0018 [ 67]: 6db9500363de22cd -Block 0018 [ 68]: cc5a9622b64f01db -Block 0018 [ 69]: e4c795a27f76dd79 -Block 0018 [ 70]: 3e2371f3bf3bc607 -Block 0018 [ 71]: 91613779534e6f9d -Block 0018 [ 72]: 012e99a50f2ef5af -Block 0018 [ 73]: 0f72353196725129 -Block 0018 [ 74]: 56c1e7f4592babb9 -Block 0018 [ 75]: ffd4fa2bf674ec77 -Block 0018 [ 76]: ae3864b6e39c9804 -Block 0018 [ 77]: 0707d4da655e8e8a -Block 0018 [ 78]: e412ab43d93fe67e -Block 0018 [ 79]: 070aacc9f712091d -Block 0018 [ 80]: 8b7868f2fc6e0f37 -Block 0018 [ 81]: ff7a2b63db626acc -Block 0018 [ 82]: 4ff42dcd52320549 -Block 0018 [ 83]: 914a7a459398aa31 -Block 0018 [ 84]: ee51f62912e4ba33 -Block 0018 [ 85]: 6a9547de7f719ae6 -Block 0018 [ 86]: 515534b4c1a9b96e -Block 0018 [ 87]: af49c87f6cc80cab -Block 0018 [ 88]: 6e4037b2f8a44b6c -Block 0018 [ 89]: 4205d6e29532c56c -Block 0018 [ 90]: 8b4772cc0b174ebc -Block 0018 [ 91]: cb8ebf453087902b -Block 0018 [ 92]: 4725e327afb7bec5 -Block 0018 [ 93]: 20c361231f875f96 -Block 0018 [ 94]: 7b19053aaa2e3d99 -Block 0018 [ 95]: bf249d83ac92e83e -Block 0018 [ 96]: 79fd44ef823bddd6 -Block 0018 [ 97]: c1f1a2089940dbbe -Block 0018 [ 98]: b23109bfc79dd2d0 -Block 0018 [ 99]: 503f7aff2422c84a -Block 0018 [100]: 0e3eae25cd971986 -Block 0018 [101]: 4f55b8acfe8132d7 -Block 0018 [102]: 835190a8cce3d640 -Block 0018 [103]: d3c3e2d6be9bb545 -Block 0018 [104]: 903b4f4716a77729 -Block 0018 [105]: feac8b79414f6615 -Block 0018 [106]: e00e93f66de68aef -Block 0018 [107]: 6ad3b10817355a15 -Block 0018 [108]: 4ed19e42abb08129 -Block 0018 [109]: e7bb8588cc665460 -Block 0018 [110]: 49ef295634a90acf -Block 0018 [111]: e6a7881b69491467 -Block 0018 [112]: ee99ba0eab2c15d4 -Block 0018 [113]: 68c7e2218006e47c -Block 0018 [114]: 73bda829fdab534a -Block 0018 [115]: 1746c6743d7cbe37 -Block 0018 [116]: 47f0145c5b347fe6 -Block 0018 [117]: 6541d303cd230e44 -Block 0018 [118]: 9e2235cd3562fa39 -Block 0018 [119]: 103dd929e08da913 -Block 0018 [120]: e530d486b9c1c3ac -Block 0018 [121]: cdb3beda3d93767d -Block 0018 [122]: 9ffd5b80d6db00d2 -Block 0018 [123]: 1b03c689857a1268 -Block 0018 [124]: b19cbf649b04d17f -Block 0018 [125]: bc949d4214befa50 -Block 0018 [126]: fc9bb6c70f544751 -Block 0018 [127]: 17cb94b26db9fc77 -Block 0019 [ 0]: 4314154c5f8bfb7f -Block 0019 [ 1]: 3960b49759850cc7 -Block 0019 [ 2]: 8976b29aa88ba0e9 -Block 0019 [ 3]: 1961c02cf5bd3641 -Block 0019 [ 4]: 36cd5ad5ba621760 -Block 0019 [ 5]: 2b90507c27f79886 -Block 0019 [ 6]: c18aaa55cccfdb73 -Block 0019 [ 7]: d1c214ff58eb7c03 -Block 0019 [ 8]: 1378de6fc11c6541 -Block 0019 [ 9]: a56ecb0ac3b4af54 -Block 0019 [ 10]: 2d2190fd988dde5d -Block 0019 [ 11]: 84f3ee1af8e2af5b -Block 0019 [ 12]: 6dddf7618d5625be -Block 0019 [ 13]: 979c0ce7f7396465 -Block 0019 [ 14]: 11896471c733b0cc -Block 0019 [ 15]: 30a7692f04c7551b -Block 0019 [ 16]: f9f9f053c712aa09 -Block 0019 [ 17]: 58b44b128159e693 -Block 0019 [ 18]: 37e086353c6296c2 -Block 0019 [ 19]: 557f7c0aa022e101 -Block 0019 [ 20]: 5314aa7234e465e5 -Block 0019 [ 21]: 9d36d7f79f38c0cb -Block 0019 [ 22]: 89a72d1fb523a939 -Block 0019 [ 23]: 458747163d53ba06 -Block 0019 [ 24]: 7703d30593f95a8b -Block 0019 [ 25]: ec8311fbd6fd53f2 -Block 0019 [ 26]: 713c830141066152 -Block 0019 [ 27]: 4a62995d5ffbe602 -Block 0019 [ 28]: 6af0645d48bec0d6 -Block 0019 [ 29]: 27e45b09463f3dff -Block 0019 [ 30]: baa124296071c0fd -Block 0019 [ 31]: d16c5d4d4b1c8d2f -Block 0019 [ 32]: 9ac6176e1ef86aa1 -Block 0019 [ 33]: a47cee4462a9d6fc -Block 0019 [ 34]: 472f0c6fd49768fa -Block 0019 [ 35]: 52c6b14445e43848 -Block 0019 [ 36]: e8d71cf621702683 -Block 0019 [ 37]: 09ada9a60ad9c009 -Block 0019 [ 38]: d2b1449ad7e4b3e0 -Block 0019 [ 39]: 49bb73806621273d -Block 0019 [ 40]: 23171ad9f2922791 -Block 0019 [ 41]: b84891d44abdc33c -Block 0019 [ 42]: 333d7b252c09d8ed -Block 0019 [ 43]: 2b5a825ad59e10a4 -Block 0019 [ 44]: a2b7d87242a47ab6 -Block 0019 [ 45]: 78c603789153920e -Block 0019 [ 46]: c74772f388fe7abf -Block 0019 [ 47]: 6efe8e593bc16925 -Block 0019 [ 48]: 699162891707e631 -Block 0019 [ 49]: d0157fbd2b53030e -Block 0019 [ 50]: 9afa5daed35b7362 -Block 0019 [ 51]: 6793c8bc068da00f -Block 0019 [ 52]: 7e9edbe7feba10ae -Block 0019 [ 53]: 0a20088cd94941cc -Block 0019 [ 54]: aa3d527ab123df69 -Block 0019 [ 55]: ab75f2204a3d0324 -Block 0019 [ 56]: 964c7f893c365ea8 -Block 0019 [ 57]: 483a6808ea8790bc -Block 0019 [ 58]: 29b19f92e91f2f9c -Block 0019 [ 59]: 3a4ca873d9ad1d49 -Block 0019 [ 60]: ffdbd035ce98254c -Block 0019 [ 61]: 1be20771208967bc -Block 0019 [ 62]: 2d8fd4c1a2db84e9 -Block 0019 [ 63]: 7c05013f4e86cf36 -Block 0019 [ 64]: 32a65907c497fecf -Block 0019 [ 65]: 537804b593d1e020 -Block 0019 [ 66]: dad22ee481314e93 -Block 0019 [ 67]: bf616fd3f343980a -Block 0019 [ 68]: 8454052ca6d01d92 -Block 0019 [ 69]: 98382a5905785879 -Block 0019 [ 70]: 5c656a82d3a37c94 -Block 0019 [ 71]: 859ff66ae8019e17 -Block 0019 [ 72]: 1ac9b185efd30d59 -Block 0019 [ 73]: 694701c7f6c151ef -Block 0019 [ 74]: 86035ab5b492d8d7 -Block 0019 [ 75]: 6382b4fa05470299 -Block 0019 [ 76]: 7c0baaf7846825b5 -Block 0019 [ 77]: 55f1fecaf8ade443 -Block 0019 [ 78]: b3eda2e95c094348 -Block 0019 [ 79]: 840e5b37fe246ebd -Block 0019 [ 80]: aa85bd44078f5912 -Block 0019 [ 81]: 4f016b6d1a7508c1 -Block 0019 [ 82]: 1a2f83fd10f571ee -Block 0019 [ 83]: 8b38fceecb329171 -Block 0019 [ 84]: 6b5a8ba2f5afa6cc -Block 0019 [ 85]: b327aa70032e1b62 -Block 0019 [ 86]: 33d803f14f60c47c -Block 0019 [ 87]: 75411f058e6d9c92 -Block 0019 [ 88]: 424013b76efefd3c -Block 0019 [ 89]: 988e31f9985e32b6 -Block 0019 [ 90]: 36a2ecbd086d21e6 -Block 0019 [ 91]: c0cc2d8c896d1c67 -Block 0019 [ 92]: db70f98dbeaebcdd -Block 0019 [ 93]: 1433d6cf2fa2659c -Block 0019 [ 94]: 980f4efcab856f56 -Block 0019 [ 95]: fcc7e7e55faa441c -Block 0019 [ 96]: af22e93ab1b3d6de -Block 0019 [ 97]: e4815feb2c7317b1 -Block 0019 [ 98]: f0c02e5d140958e0 -Block 0019 [ 99]: be559709a94d435d -Block 0019 [100]: 3af7f5ebdadcd7e9 -Block 0019 [101]: 1323a5528cfe9894 -Block 0019 [102]: a0808f334ae43cff -Block 0019 [103]: 8b2c3a75006c0c5a -Block 0019 [104]: 387180249c231ee6 -Block 0019 [105]: 6d6b61885cc1759e -Block 0019 [106]: c703e8d94dcf72d9 -Block 0019 [107]: ad82be834e120dfd -Block 0019 [108]: bc4f3dc566411565 -Block 0019 [109]: 330cd1b8ed68386a -Block 0019 [110]: 1aa8639d72a79c51 -Block 0019 [111]: 5fb694dab1306633 -Block 0019 [112]: 872a2f427b6aaea2 -Block 0019 [113]: 6058670384ca92a8 -Block 0019 [114]: 701ba8e9a43f1fb8 -Block 0019 [115]: ff0589f989f9a9f7 -Block 0019 [116]: bc39e80dbe8946b8 -Block 0019 [117]: de0d6c1534faad54 -Block 0019 [118]: 04ec12783b64d1a6 -Block 0019 [119]: 59cfde4877e8691c -Block 0019 [120]: ce18fd19ef32feb9 -Block 0019 [121]: d734d700036c5912 -Block 0019 [122]: 6d58153be0df3a46 -Block 0019 [123]: 37e7d95f1815c981 -Block 0019 [124]: a543cd85f55168ae -Block 0019 [125]: e47dff1e4ed1ae7e -Block 0019 [126]: 29edc56980fc3dc0 -Block 0019 [127]: f4d7bbc79e4d3caf -Block 0020 [ 0]: 99b54612d5331442 -Block 0020 [ 1]: 1df109b2551f5cff -Block 0020 [ 2]: 8d7f342edf1f1ced -Block 0020 [ 3]: c52ae3d91c062623 -Block 0020 [ 4]: e3a9aa53339e7425 -Block 0020 [ 5]: c1c6de190f3c376a -Block 0020 [ 6]: b01061a26c2b3be5 -Block 0020 [ 7]: 35b7980d9f01a3ec -Block 0020 [ 8]: f36abc3066eeef34 -Block 0020 [ 9]: 6c6a1641be1b68ca -Block 0020 [ 10]: 8e81654080ebb01e -Block 0020 [ 11]: 3102256ba607483a -Block 0020 [ 12]: 8b179c528e84a0ac -Block 0020 [ 13]: a09af43d38700de7 -Block 0020 [ 14]: 57e1c72a076854c7 -Block 0020 [ 15]: 806d9d5bbae63fbc -Block 0020 [ 16]: 78e8baf331882e1f -Block 0020 [ 17]: 2875993187cf01f8 -Block 0020 [ 18]: 1db07ca0c8c1571a -Block 0020 [ 19]: bde598a325fc60d8 -Block 0020 [ 20]: a9b9ea0af0ce7552 -Block 0020 [ 21]: fe9c03e4901de695 -Block 0020 [ 22]: bd21ae857dbbe711 -Block 0020 [ 23]: 4d9f8da024ec27d9 -Block 0020 [ 24]: 3304bdbf57ad64f1 -Block 0020 [ 25]: 3c69c5fc82417a9b -Block 0020 [ 26]: a66d465e11d67c52 -Block 0020 [ 27]: 315070b1e7e7a2d8 -Block 0020 [ 28]: 7689fe180a552186 -Block 0020 [ 29]: a19f92527d77f1ad -Block 0020 [ 30]: 1dec4550e47ded4e -Block 0020 [ 31]: 47e340ee79e1e937 -Block 0020 [ 32]: 8b18ab4d70a89258 -Block 0020 [ 33]: 8b0f557cb2c5d6b0 -Block 0020 [ 34]: 562279f5f801a973 -Block 0020 [ 35]: 4f8ddf383e960f5f -Block 0020 [ 36]: aec60f9e5560e4b3 -Block 0020 [ 37]: 0f95d7160757f116 -Block 0020 [ 38]: 91fb5708a31df4b3 -Block 0020 [ 39]: e21b9fcb6d7ff780 -Block 0020 [ 40]: 36a7a60680d38c08 -Block 0020 [ 41]: 1fcac6fcd32a1d00 -Block 0020 [ 42]: f1026ee196f319b1 -Block 0020 [ 43]: dd8f46ea4886b7b9 -Block 0020 [ 44]: 35c62335537e7cbf -Block 0020 [ 45]: 8c353ab20852e073 -Block 0020 [ 46]: 69a6a3b13a46c746 -Block 0020 [ 47]: a6169fa549169c83 -Block 0020 [ 48]: c6bb5d303ed28f72 -Block 0020 [ 49]: ce4c7f745cde2de8 -Block 0020 [ 50]: 717d92d2a9c842c4 -Block 0020 [ 51]: df649d3a2919ca3c -Block 0020 [ 52]: 3b3f2310b1e47458 -Block 0020 [ 53]: 6f664ab9b206191c -Block 0020 [ 54]: 94b785ee0c5ac9a1 -Block 0020 [ 55]: df92354c9ab1d65f -Block 0020 [ 56]: 1276546bf5321547 -Block 0020 [ 57]: a65b38bf4c4fd99b -Block 0020 [ 58]: 6fa757438ddef903 -Block 0020 [ 59]: 4af3819a7cfd003b -Block 0020 [ 60]: 9f00b83185c90c15 -Block 0020 [ 61]: 72b821506b22be45 -Block 0020 [ 62]: 4baadadb24e5ef4f -Block 0020 [ 63]: dcb9e3d9c2406da1 -Block 0020 [ 64]: 534c7e46dc0da3c7 -Block 0020 [ 65]: c3f79ae0d244cbb9 -Block 0020 [ 66]: c093ed3f909efd22 -Block 0020 [ 67]: 8ec38073bc8c6f16 -Block 0020 [ 68]: b3cad456a6c4943b -Block 0020 [ 69]: bc7f40e766001aff -Block 0020 [ 70]: 35aeacc99092a2b9 -Block 0020 [ 71]: 1754588e2b90e14a -Block 0020 [ 72]: 9e4beabb01216807 -Block 0020 [ 73]: b18d269b6be68c5b -Block 0020 [ 74]: c84476ed288034e9 -Block 0020 [ 75]: e54edd60a9adb04d -Block 0020 [ 76]: 9f1f178bf34f5eb7 -Block 0020 [ 77]: 3ccccb0b6ea19f95 -Block 0020 [ 78]: ec17067b40d70152 -Block 0020 [ 79]: 341fbf6208d5e1fa -Block 0020 [ 80]: 9bcd09c030e71c95 -Block 0020 [ 81]: a004676b00008402 -Block 0020 [ 82]: 7a44d5bba550c975 -Block 0020 [ 83]: 25b45af16d682520 -Block 0020 [ 84]: c1df2912476f1b7a -Block 0020 [ 85]: c5a3651373817558 -Block 0020 [ 86]: e73f947765d51638 -Block 0020 [ 87]: a46887137d124b59 -Block 0020 [ 88]: b9aee454d4e109d1 -Block 0020 [ 89]: 3dff8b985a9ed506 -Block 0020 [ 90]: 137459f4dfa321cc -Block 0020 [ 91]: 76877953eb8dedab -Block 0020 [ 92]: 9bbac2f32b25eaec -Block 0020 [ 93]: b74998965f640906 -Block 0020 [ 94]: acc825a4ad52d287 -Block 0020 [ 95]: d197fdc61372c0cd -Block 0020 [ 96]: 5a4e95595b22a985 -Block 0020 [ 97]: a1fc30dd53054d3b -Block 0020 [ 98]: 22feaadf7b85fa4f -Block 0020 [ 99]: ffa4b7d06f2ee116 -Block 0020 [100]: f8cae02794177009 -Block 0020 [101]: 0c0da064cf078a0e -Block 0020 [102]: 3b4530a03afa5efc -Block 0020 [103]: 426a556b6d45a9ec -Block 0020 [104]: 27953a0a104c326b -Block 0020 [105]: db94f0756b6965cc -Block 0020 [106]: f301360676859492 -Block 0020 [107]: 707a4e21d3d8dc16 -Block 0020 [108]: eb115c2a7c9afe03 -Block 0020 [109]: ac784d0ac04f8f13 -Block 0020 [110]: 39d71ab9ffe878ab -Block 0020 [111]: b1443a770fce6211 -Block 0020 [112]: d10dd0565ff67628 -Block 0020 [113]: e1fb38a21599a693 -Block 0020 [114]: 9ee8e257cf634826 -Block 0020 [115]: d5f6e5170e1da3d8 -Block 0020 [116]: 9a10a7e8d7668df8 -Block 0020 [117]: 12298c1738cf4bc7 -Block 0020 [118]: 505f4a9720725022 -Block 0020 [119]: 20572575149e406b -Block 0020 [120]: b0bdd2ce731aa1cb -Block 0020 [121]: 96cde79047a80bb1 -Block 0020 [122]: ef4b364dd09598d4 -Block 0020 [123]: 4ded87a8b524729d -Block 0020 [124]: ef23734b6b00b198 -Block 0020 [125]: 54af6f6764f54d6d -Block 0020 [126]: c584a13771d952ad -Block 0020 [127]: a43755deb1070142 -Block 0021 [ 0]: eaf22a72257ece3e -Block 0021 [ 1]: bc3db8d75db6ab56 -Block 0021 [ 2]: f6fd83b4066f8478 -Block 0021 [ 3]: 612d22eda0ebe1a9 -Block 0021 [ 4]: 465477c0efeea0a8 -Block 0021 [ 5]: cfa5293a6fef2f5f -Block 0021 [ 6]: 23ea14915d5247dd -Block 0021 [ 7]: a2ed1868435d0781 -Block 0021 [ 8]: 83b20881f9332c81 -Block 0021 [ 9]: e8a61edb2c077a93 -Block 0021 [ 10]: c963e144d48b7872 -Block 0021 [ 11]: 8d4cbaa38c3a9fcc -Block 0021 [ 12]: d69c356de80d6cb7 -Block 0021 [ 13]: 9a433254d972c2a6 -Block 0021 [ 14]: d3a6458db7b5f574 -Block 0021 [ 15]: b152bc0809d76014 -Block 0021 [ 16]: cd80587aad983590 -Block 0021 [ 17]: 714df7d77e1f7471 -Block 0021 [ 18]: e56def8658adc47f -Block 0021 [ 19]: e32056e570f63065 -Block 0021 [ 20]: cfdaba585602ba13 -Block 0021 [ 21]: 691e36443ec4b181 -Block 0021 [ 22]: 93aaeea268573ece -Block 0021 [ 23]: 4312d3fd583bda77 -Block 0021 [ 24]: cee8c693eb1da004 -Block 0021 [ 25]: 0d6e0f419eee0037 -Block 0021 [ 26]: e9e4e113c0d7a023 -Block 0021 [ 27]: 366ee6913e04d0c9 -Block 0021 [ 28]: e5be4eb934faa2db -Block 0021 [ 29]: 5964b39808d5b797 -Block 0021 [ 30]: 42ecda87914bd65a -Block 0021 [ 31]: 5bfb873d10a207d7 -Block 0021 [ 32]: ca66068cf8c41ee3 -Block 0021 [ 33]: 376a2fe75f80be7b -Block 0021 [ 34]: 5ad07cad128d3a78 -Block 0021 [ 35]: 8dcb75e704a01312 -Block 0021 [ 36]: 2d4cdaabafb2011f -Block 0021 [ 37]: 4e4fc05aa0def3ac -Block 0021 [ 38]: 8ad7096e0b1966d4 -Block 0021 [ 39]: ed6086ed6c30399e -Block 0021 [ 40]: 6d6ad65c81e1e574 -Block 0021 [ 41]: 378f39e47b6d5022 -Block 0021 [ 42]: 623a21c9267b9efa -Block 0021 [ 43]: 0610511f07a7f9eb -Block 0021 [ 44]: 5680ce8724225437 -Block 0021 [ 45]: d5eb8daa9d713835 -Block 0021 [ 46]: a0b9f5efa5c9802d -Block 0021 [ 47]: e9333e99222c5aab -Block 0021 [ 48]: 597fbe9522296cd3 -Block 0021 [ 49]: ee7269c78dd9c000 -Block 0021 [ 50]: 03d3a1a6a7039b42 -Block 0021 [ 51]: 6df4eb00d4cebffb -Block 0021 [ 52]: 8295f7ac0ddc80bb -Block 0021 [ 53]: 9f0ead21df6e7856 -Block 0021 [ 54]: 9d48d524fe0d564a -Block 0021 [ 55]: f97a84fa8cf4143a -Block 0021 [ 56]: 5e238cdfb3a37dee -Block 0021 [ 57]: 13dd319d1576ce29 -Block 0021 [ 58]: b4a0b6c870ddd21d -Block 0021 [ 59]: 5ced7d1931881510 -Block 0021 [ 60]: e6362d3752dce714 -Block 0021 [ 61]: 64721226de7f4231 -Block 0021 [ 62]: 5e29523e73f0cb30 -Block 0021 [ 63]: 7e5c701c4a754eb9 -Block 0021 [ 64]: f90f9928575d19c8 -Block 0021 [ 65]: 5a87671b1792bb9e -Block 0021 [ 66]: 1ba1edb579ff5ce1 -Block 0021 [ 67]: d81f8269d698d8af -Block 0021 [ 68]: a95debed7aa19f9e -Block 0021 [ 69]: a7d9265743c5c802 -Block 0021 [ 70]: e6df5edc0823fbd3 -Block 0021 [ 71]: 1b3ef0d4395fbccf -Block 0021 [ 72]: 7f6bde3c73fc513d -Block 0021 [ 73]: 16cda4a056dc3a9d -Block 0021 [ 74]: 36563b6c92443394 -Block 0021 [ 75]: 749536d4491edf2f -Block 0021 [ 76]: ce011359b419b387 -Block 0021 [ 77]: 4c8455044dfc4dd5 -Block 0021 [ 78]: aa4d04037787ae89 -Block 0021 [ 79]: 3480568ed27e30aa -Block 0021 [ 80]: 436ff0c954f70457 -Block 0021 [ 81]: 6c6d781dc1817e60 -Block 0021 [ 82]: dbba7171652bcd3f -Block 0021 [ 83]: 62dea6260849c192 -Block 0021 [ 84]: 3d9d26097d6cc1f3 -Block 0021 [ 85]: 22639329408cc1b2 -Block 0021 [ 86]: 849d9f4bb0604fe3 -Block 0021 [ 87]: 01cc125b244e0ea8 -Block 0021 [ 88]: 7ebbb57a0de64d80 -Block 0021 [ 89]: c37ab535fc7d686e -Block 0021 [ 90]: adb00a142848417f -Block 0021 [ 91]: 3445a90c3e87fcd7 -Block 0021 [ 92]: e34ff72206ff1386 -Block 0021 [ 93]: 11626fc232e4270f -Block 0021 [ 94]: 28bbd829c97758de -Block 0021 [ 95]: 67b017e60ef4a655 -Block 0021 [ 96]: a720681c19c0fb13 -Block 0021 [ 97]: 7e1f2be672dd9c07 -Block 0021 [ 98]: c10afaa9599d6269 -Block 0021 [ 99]: 57bdf94c65106f2b -Block 0021 [100]: dc59da56d4e8c48b -Block 0021 [101]: 5ce2b008062974cd -Block 0021 [102]: d7950df8e7812438 -Block 0021 [103]: 0913b55a9026ff83 -Block 0021 [104]: 4d8311ba0f1a8c0d -Block 0021 [105]: fe53cd482d9a09bf -Block 0021 [106]: 1bdf01edc7da7f10 -Block 0021 [107]: d4391237df17af26 -Block 0021 [108]: 3d694dfcd22c5a91 -Block 0021 [109]: f1b09ca49bc8eec9 -Block 0021 [110]: 09f81a527a65c25e -Block 0021 [111]: cf3b08baf5856dbb -Block 0021 [112]: 12cabc43d1fb108e -Block 0021 [113]: b7c209c2bfde3031 -Block 0021 [114]: 02e0d3d4029e7510 -Block 0021 [115]: 36c7a4f9dcf9cae4 -Block 0021 [116]: 580cab16cc58aa6a -Block 0021 [117]: f502f9c2c13c00d5 -Block 0021 [118]: dbf6bcc189397a5c -Block 0021 [119]: 641d6882bf43781b -Block 0021 [120]: ff471cbbadce8b04 -Block 0021 [121]: 5fb8d2a88e62fa1a -Block 0021 [122]: bf56dea0710e9ef8 -Block 0021 [123]: 68eba851089279e7 -Block 0021 [124]: dee4e1f0a55f11f2 -Block 0021 [125]: 1729abaa6c28f626 -Block 0021 [126]: d1e4360bf9a99709 -Block 0021 [127]: 57cd8306d3c9972c -Block 0022 [ 0]: d9017177a669b6e5 -Block 0022 [ 1]: d2561f290188fbe2 -Block 0022 [ 2]: f5c9c509ab75bf4a -Block 0022 [ 3]: debd7125423ade4c -Block 0022 [ 4]: d89cd562b4dd7a29 -Block 0022 [ 5]: 944b7f8c8169715b -Block 0022 [ 6]: 4d7d25a7bd269bdf -Block 0022 [ 7]: 07e089a684eafbc7 -Block 0022 [ 8]: 9a9a15206e1bd87b -Block 0022 [ 9]: 885062c80f1323e6 -Block 0022 [ 10]: ffa7679520887020 -Block 0022 [ 11]: c29294b8d2736bf5 -Block 0022 [ 12]: 10bf9218eb2046a9 -Block 0022 [ 13]: 39a5fc7ecaf5e87e -Block 0022 [ 14]: a2f0798f897c0857 -Block 0022 [ 15]: 4dba832b267d8e91 -Block 0022 [ 16]: 7438fad141293cba -Block 0022 [ 17]: 3ec92fa015f218f0 -Block 0022 [ 18]: 18071da78366eeca -Block 0022 [ 19]: c8a7112b99128c1e -Block 0022 [ 20]: 04c3dbc620abb9cd -Block 0022 [ 21]: e63c4f3d8e79330b -Block 0022 [ 22]: 318615b27ad7c835 -Block 0022 [ 23]: 6429acacb6d345f7 -Block 0022 [ 24]: 036320dbb7f843e8 -Block 0022 [ 25]: c5221241c3397245 -Block 0022 [ 26]: 961c54c8b1a5bd7b -Block 0022 [ 27]: a3dd266a7d0f434f -Block 0022 [ 28]: e012c881f77fb9a7 -Block 0022 [ 29]: f39867b0dcc0baf9 -Block 0022 [ 30]: b3f236d9551e1fe1 -Block 0022 [ 31]: fea089089ba359a0 -Block 0022 [ 32]: cb3703237146bf20 -Block 0022 [ 33]: 73f0720fcae901a9 -Block 0022 [ 34]: a1c7de63038bd5f6 -Block 0022 [ 35]: 7c157239f4f4b199 -Block 0022 [ 36]: aeb4a9f78eabcdcd -Block 0022 [ 37]: b0f1e62f53e0e463 -Block 0022 [ 38]: 1c3acd6bdfd48f04 -Block 0022 [ 39]: 4c4ac7710afffbe0 -Block 0022 [ 40]: 0243e157d6d847ba -Block 0022 [ 41]: 2aeb704359df1996 -Block 0022 [ 42]: b0662086e5b73c39 -Block 0022 [ 43]: 05d79ef890244df4 -Block 0022 [ 44]: af01278314058d10 -Block 0022 [ 45]: 4372e42f10ef5443 -Block 0022 [ 46]: 438de8d30efd58a2 -Block 0022 [ 47]: 1bd8d75d30df4e7c -Block 0022 [ 48]: e3daf4091eb7097f -Block 0022 [ 49]: c6dbbdc0a6f9a781 -Block 0022 [ 50]: aef97c8fbbfbe25c -Block 0022 [ 51]: 0e6881706cb458a0 -Block 0022 [ 52]: e609f19ae55d5ffc -Block 0022 [ 53]: 17031d4c3738c72b -Block 0022 [ 54]: 5231693d9e2a207d -Block 0022 [ 55]: 50dbae42c1c0806c -Block 0022 [ 56]: cb01a7fd19a411b1 -Block 0022 [ 57]: 6859a8f3cfaa64c9 -Block 0022 [ 58]: 04defed4aaa73495 -Block 0022 [ 59]: f3ae8c7ce1882111 -Block 0022 [ 60]: 553c94b9dab67ae3 -Block 0022 [ 61]: f23f1bab715a7fe5 -Block 0022 [ 62]: 42b8e1e62d9174ff -Block 0022 [ 63]: ad75d5d56e0e0225 -Block 0022 [ 64]: f7460a269e67b3dc -Block 0022 [ 65]: 421c8a8a7d0c9833 -Block 0022 [ 66]: 06a3b172d2175ded -Block 0022 [ 67]: 223564e8a1801481 -Block 0022 [ 68]: c74c488483a39dce -Block 0022 [ 69]: 5c301a5fb7c7bb62 -Block 0022 [ 70]: 6d307c79268412d1 -Block 0022 [ 71]: e11b10b2f300fdc6 -Block 0022 [ 72]: 790a855854675477 -Block 0022 [ 73]: 9ddef4befcea38aa -Block 0022 [ 74]: 8fbc6fbd777cd48e -Block 0022 [ 75]: 3ee49861fb128f70 -Block 0022 [ 76]: 7583637e2397ed12 -Block 0022 [ 77]: ecae2f66700d1a4f -Block 0022 [ 78]: 4a4d4065d20d8349 -Block 0022 [ 79]: 65cf24b9e53a8fb4 -Block 0022 [ 80]: 99dbae8b2d889df2 -Block 0022 [ 81]: b9ac3793aafbd04b -Block 0022 [ 82]: 51c26c283f570544 -Block 0022 [ 83]: d16d8a09a8d47994 -Block 0022 [ 84]: cc57b8302e49656b -Block 0022 [ 85]: ac389ca16ad04216 -Block 0022 [ 86]: 8988e5b3a38d0ccc -Block 0022 [ 87]: 57f2686c27fe305f -Block 0022 [ 88]: 0e762dabcff6c25b -Block 0022 [ 89]: a45da9efeb14129b -Block 0022 [ 90]: 1c222d3f443d81c9 -Block 0022 [ 91]: 8fb5de5479c7a3b4 -Block 0022 [ 92]: a78c7ae1e313f074 -Block 0022 [ 93]: 9f8cb10b4bb4efe0 -Block 0022 [ 94]: 89e094fed9b5d688 -Block 0022 [ 95]: 577b162a6b10cfc0 -Block 0022 [ 96]: e220188a3a495256 -Block 0022 [ 97]: 2462082fd6415c0b -Block 0022 [ 98]: 72b7bd3af5f430a5 -Block 0022 [ 99]: 180e07c5fc6bad72 -Block 0022 [100]: e3738c9b8202dac5 -Block 0022 [101]: 4a253af6aa78901d -Block 0022 [102]: 79c249156bc8b4c9 -Block 0022 [103]: a4c9d12d7a1ca0ae -Block 0022 [104]: 41665c3cc225b69e -Block 0022 [105]: 42b4536ad5c5f09c -Block 0022 [106]: 9949fdb6c75e0fb9 -Block 0022 [107]: d124a71717d1c071 -Block 0022 [108]: d19982096015d9e2 -Block 0022 [109]: b80a05faf21e2911 -Block 0022 [110]: 50669ab3798654a9 -Block 0022 [111]: 05bbf71791adb8ca -Block 0022 [112]: 2b24afdacdbc7570 -Block 0022 [113]: feac8d01ae4b08dc -Block 0022 [114]: 4072a0567202afc5 -Block 0022 [115]: b50e1cb840bf5e3a -Block 0022 [116]: 34c6de5d4b22ffe7 -Block 0022 [117]: b0c05f78400ca0cb -Block 0022 [118]: c873334f15b4e1f7 -Block 0022 [119]: 39ad9d10b5e1d750 -Block 0022 [120]: 88a1ad499aca526f -Block 0022 [121]: aa2bd5a6c1f38caf -Block 0022 [122]: 603557577d75599c -Block 0022 [123]: f361f34f5820dff9 -Block 0022 [124]: 85ed6ef23956eac4 -Block 0022 [125]: bd26eacf31c7a353 -Block 0022 [126]: b2ffd15aa41db4e0 -Block 0022 [127]: e91021ab90f8cc95 -Block 0023 [ 0]: a29ad9956727f9cb -Block 0023 [ 1]: 524b13d7bf20dd27 -Block 0023 [ 2]: 14c0f637bb393dd3 -Block 0023 [ 3]: 29aad246fdada10b -Block 0023 [ 4]: d5b615fcec0c08a1 -Block 0023 [ 5]: 850221d183d0efbd -Block 0023 [ 6]: 13d223815685feac -Block 0023 [ 7]: 87e7c7bf9494f3cf -Block 0023 [ 8]: f2b24763c57bf743 -Block 0023 [ 9]: a955627873df3d9f -Block 0023 [ 10]: eb19072ea79b706e -Block 0023 [ 11]: 554f841bf8289187 -Block 0023 [ 12]: 5b2a7a1be684d10f -Block 0023 [ 13]: fb86695ec08991bc -Block 0023 [ 14]: d570ba9f4043e5a3 -Block 0023 [ 15]: ebc35889e61d4065 -Block 0023 [ 16]: 88328db3b597316e -Block 0023 [ 17]: 2ee2ebe41f9b15ba -Block 0023 [ 18]: 43d6aec812d2f7aa -Block 0023 [ 19]: d4e775fa43332640 -Block 0023 [ 20]: b806bcd4c2a3c968 -Block 0023 [ 21]: ebf8c4c91925ad87 -Block 0023 [ 22]: 57e8556a90240f0c -Block 0023 [ 23]: 8286650e1d23ba45 -Block 0023 [ 24]: ae934251ba4c4150 -Block 0023 [ 25]: d006bccf7f11fc65 -Block 0023 [ 26]: 0f66a89ec37bea84 -Block 0023 [ 27]: 6c4ff6a351250fd3 -Block 0023 [ 28]: bc2ed16b7ccd77da -Block 0023 [ 29]: f8992a75652efd74 -Block 0023 [ 30]: 541a0238d8c87aa4 -Block 0023 [ 31]: 60a419e0abc63204 -Block 0023 [ 32]: 9ab5285ed5a4886a -Block 0023 [ 33]: 70d2cd82c589ca56 -Block 0023 [ 34]: f14e21d1174f7038 -Block 0023 [ 35]: 045a340d0a05c6df -Block 0023 [ 36]: 265a854800392dfa -Block 0023 [ 37]: 1febb38eb7e840f3 -Block 0023 [ 38]: d7da8f296f748474 -Block 0023 [ 39]: 321e5bea25a1c0d3 -Block 0023 [ 40]: dfd8bb4afd35f8b2 -Block 0023 [ 41]: 94b8d2e10841ccbb -Block 0023 [ 42]: 6f114382039a8228 -Block 0023 [ 43]: e9da6a56692fa330 -Block 0023 [ 44]: 5bc2f30da0303c1a -Block 0023 [ 45]: d1bda2513b50bfc3 -Block 0023 [ 46]: 13334d39ee171bcb -Block 0023 [ 47]: ae9ea591b5930fce -Block 0023 [ 48]: 64973a25f91e2a82 -Block 0023 [ 49]: aff456b8d8d34f40 -Block 0023 [ 50]: 164dbfc91f4fa96b -Block 0023 [ 51]: 9dc6292bff5fbc5d -Block 0023 [ 52]: bb191847509ff434 -Block 0023 [ 53]: 10e9a0ad94ef7acc -Block 0023 [ 54]: d9954305d5f16c4f -Block 0023 [ 55]: d0a5957208441157 -Block 0023 [ 56]: 529205ea9738c777 -Block 0023 [ 57]: fe1cb6297e9ace0e -Block 0023 [ 58]: fd8e28400112061f -Block 0023 [ 59]: fb912ca9f8059fd1 -Block 0023 [ 60]: 0c2ea500a95da40b -Block 0023 [ 61]: 8a91a09684952f67 -Block 0023 [ 62]: 5f26b82d0c8417a7 -Block 0023 [ 63]: 2326074c848f0d02 -Block 0023 [ 64]: a23474e62e4744ed -Block 0023 [ 65]: 3ad865e5974f5527 -Block 0023 [ 66]: 3901c8a615c69aaf -Block 0023 [ 67]: 71cd871d7eb67c88 -Block 0023 [ 68]: 9fe70add737e4f1a -Block 0023 [ 69]: 87dcc3e08ad7d9d4 -Block 0023 [ 70]: e5ef3e417b23cb96 -Block 0023 [ 71]: b9373896f18c1e66 -Block 0023 [ 72]: 9e7786adfbce6085 -Block 0023 [ 73]: 3f91a9f344df4df1 -Block 0023 [ 74]: 2d526c15df0c84ff -Block 0023 [ 75]: 9ba7a5b5ee5de5b4 -Block 0023 [ 76]: 3d6ae44c06ab9887 -Block 0023 [ 77]: 4afe7b68d6464748 -Block 0023 [ 78]: 0a866a8c319fa828 -Block 0023 [ 79]: c8f841262c4f60d4 -Block 0023 [ 80]: f83563e151dfc565 -Block 0023 [ 81]: 310bd851ee8f72ee -Block 0023 [ 82]: dd50d4efe4195375 -Block 0023 [ 83]: 5cdff14af1b6be5c -Block 0023 [ 84]: f80f75c43c6374e8 -Block 0023 [ 85]: d17a7017c65a71b6 -Block 0023 [ 86]: 6700c8703fe2dd5b -Block 0023 [ 87]: 803ece8035840bd8 -Block 0023 [ 88]: d2e8da645cc4f0c3 -Block 0023 [ 89]: 4f0e262f60b4a0cd -Block 0023 [ 90]: e6118043496083d2 -Block 0023 [ 91]: d16b6ea9b44ac8d2 -Block 0023 [ 92]: 97d7ea25d23ec420 -Block 0023 [ 93]: 584389ba3e0466f5 -Block 0023 [ 94]: f7e33a38de304d1e -Block 0023 [ 95]: b1a8df3491b0cafa -Block 0023 [ 96]: ba545b5360692a6d -Block 0023 [ 97]: 0ca7cb54eeb9d32d -Block 0023 [ 98]: 617ced7b2c227496 -Block 0023 [ 99]: eefacf3c069f5845 -Block 0023 [100]: 391176458830f910 -Block 0023 [101]: c3fe4a86dc5bae9f -Block 0023 [102]: 6b36ab560852d6a2 -Block 0023 [103]: 207988111cb654f6 -Block 0023 [104]: 7b5e2576e2b3bb8e -Block 0023 [105]: ac267506fd370a46 -Block 0023 [106]: b4ee88ac9fcc6eba -Block 0023 [107]: 510d7b841c6d38d3 -Block 0023 [108]: 235d4e1bd7ffd276 -Block 0023 [109]: 2df8efc35016e0fb -Block 0023 [110]: d2577859f955b1b9 -Block 0023 [111]: c8f962216dc4ffad -Block 0023 [112]: 7846e4fc2ba62cb0 -Block 0023 [113]: 6b851256f5061ef8 -Block 0023 [114]: 497ee81cf6dda322 -Block 0023 [115]: 1620886ee32ef2ca -Block 0023 [116]: ff3079c7656033b9 -Block 0023 [117]: fc1b78a962226c50 -Block 0023 [118]: bf975fd236d5f371 -Block 0023 [119]: 4f7f421e74b21343 -Block 0023 [120]: ab1345b271fdaf8b -Block 0023 [121]: 308b376c1bdb360e -Block 0023 [122]: 6c63beff5d5dbafe -Block 0023 [123]: d0167e4bf9145352 -Block 0023 [124]: 222c497dc9a79c9f -Block 0023 [125]: e8248b9c830f7d58 -Block 0023 [126]: 1de80a68d405c3ef -Block 0023 [127]: d79ad55a65da2664 -Block 0024 [ 0]: 6969f641ffdfe715 -Block 0024 [ 1]: 9258b43ee34e21d9 -Block 0024 [ 2]: d50ffe6a5801f950 -Block 0024 [ 3]: 61b72030cbb4a177 -Block 0024 [ 4]: cafa82549198a73d -Block 0024 [ 5]: d1150c31b668f77e -Block 0024 [ 6]: 1fe77b51c643d8ae -Block 0024 [ 7]: 790bca1b555b9a9a -Block 0024 [ 8]: 7174696da064fe4f -Block 0024 [ 9]: 861deeae3929aec4 -Block 0024 [ 10]: 3a388025f4725473 -Block 0024 [ 11]: 9f2fd193b86e54e6 -Block 0024 [ 12]: 7dcafe338e777ea0 -Block 0024 [ 13]: f224bb7eedbd95b2 -Block 0024 [ 14]: c0b6d2f978ab0dec -Block 0024 [ 15]: 1f1ae23b9628a194 -Block 0024 [ 16]: b9dec21d58d34d8e -Block 0024 [ 17]: eef0ee6370727c70 -Block 0024 [ 18]: bc3ba66b8e252048 -Block 0024 [ 19]: 40d59fbfee193677 -Block 0024 [ 20]: d98ad7ba132685a8 -Block 0024 [ 21]: 16a00dfd8846515b -Block 0024 [ 22]: 0628d2508c84b5d7 -Block 0024 [ 23]: 23523cf2a4c53fb5 -Block 0024 [ 24]: 715d3ab7a9295ef5 -Block 0024 [ 25]: 50fbb85c3d387005 -Block 0024 [ 26]: 7964421278c0de1c -Block 0024 [ 27]: a30df4d76612f3d9 -Block 0024 [ 28]: ac93914885b34586 -Block 0024 [ 29]: a9a6084c17e06e6e -Block 0024 [ 30]: 9a8765c57557cf2f -Block 0024 [ 31]: 9535d5e5b1f0eefc -Block 0024 [ 32]: 160c2c3a863b6758 -Block 0024 [ 33]: 017158926c8902fe -Block 0024 [ 34]: eb0d01d4d1a5f399 -Block 0024 [ 35]: b458e852b548ef2f -Block 0024 [ 36]: 4a9f07351074ff05 -Block 0024 [ 37]: 891636249b931c48 -Block 0024 [ 38]: 1df71c0d7f49eceb -Block 0024 [ 39]: c0c17bf91a9348fa -Block 0024 [ 40]: 0c8ec34f06d0ca8d -Block 0024 [ 41]: c8a64e6518bca6e2 -Block 0024 [ 42]: 32a79e401b2033a1 -Block 0024 [ 43]: 4436a57b1984ebde -Block 0024 [ 44]: c4b635de2118e547 -Block 0024 [ 45]: b46a58c3da799e3d -Block 0024 [ 46]: 809428c1e866ee3c -Block 0024 [ 47]: 6a3fae63cc23b5b5 -Block 0024 [ 48]: 59cb5ddb257ba3f2 -Block 0024 [ 49]: 2cc69453f630e10c -Block 0024 [ 50]: 5b9c483dc73034bc -Block 0024 [ 51]: a77fa6d7baffdaf1 -Block 0024 [ 52]: 53c3624d4b339c82 -Block 0024 [ 53]: 03a2a64f36000e48 -Block 0024 [ 54]: abcdf3f1795c6c69 -Block 0024 [ 55]: 1f466a05d7965d5c -Block 0024 [ 56]: 9b6f8788e01c5381 -Block 0024 [ 57]: bf5e74b5e1c32ef2 -Block 0024 [ 58]: 4758b08aa9afe564 -Block 0024 [ 59]: 48f94e1fffe6438c -Block 0024 [ 60]: 4b4a2892f06818f2 -Block 0024 [ 61]: bceff5a99e47b620 -Block 0024 [ 62]: 3060d08b52af4aa1 -Block 0024 [ 63]: a3d9a165e5c65d79 -Block 0024 [ 64]: 123b231f7bf1be25 -Block 0024 [ 65]: cc1e3ad20d8f2356 -Block 0024 [ 66]: 69852803fcb614c4 -Block 0024 [ 67]: db7480b12650096c -Block 0024 [ 68]: cce190a49a4a96fa -Block 0024 [ 69]: ccc9b26c541113aa -Block 0024 [ 70]: d73544f23c5bd6cc -Block 0024 [ 71]: 55cd4e9884d01240 -Block 0024 [ 72]: b358876752a98151 -Block 0024 [ 73]: c1881eac1a053aad -Block 0024 [ 74]: 4789407f7d033e41 -Block 0024 [ 75]: 3360667505df643c -Block 0024 [ 76]: 579bf698b57c80a6 -Block 0024 [ 77]: 5b47d4d45b4a3f3e -Block 0024 [ 78]: b77d0607040d6c41 -Block 0024 [ 79]: 6884dac57b7f12ac -Block 0024 [ 80]: d3cc1f9fd938bb7e -Block 0024 [ 81]: 73a68dd0528fe5cd -Block 0024 [ 82]: c7859f68ad84be24 -Block 0024 [ 83]: 5b0db28343bbcc56 -Block 0024 [ 84]: ed31bbd129906e60 -Block 0024 [ 85]: 05f40f05ddc90ae9 -Block 0024 [ 86]: 4f4f039c3db15331 -Block 0024 [ 87]: 704e8b3862009b61 -Block 0024 [ 88]: a1edbf57f0b139ca -Block 0024 [ 89]: 78f5af917866a501 -Block 0024 [ 90]: a485e287c34a06b2 -Block 0024 [ 91]: 6cdd76520612e2ce -Block 0024 [ 92]: 39fa227307e0bb4f -Block 0024 [ 93]: 96245312a7935575 -Block 0024 [ 94]: 77f694a7b65e06ce -Block 0024 [ 95]: 0b4c5b0b23a0792a -Block 0024 [ 96]: ad46df6ff95fa686 -Block 0024 [ 97]: 02024ea948b9604b -Block 0024 [ 98]: beb882c124cd1ab8 -Block 0024 [ 99]: db7ec51f4fb2e3b6 -Block 0024 [100]: 148e6c98c2dcff3d -Block 0024 [101]: aa4e5910f5fe7772 -Block 0024 [102]: 665451a76989dba0 -Block 0024 [103]: aab9def1764c01de -Block 0024 [104]: 7187deed9a554c1c -Block 0024 [105]: a5dd3db07fc83d94 -Block 0024 [106]: 77b9f80938269a0a -Block 0024 [107]: a6512b101c9b02cc -Block 0024 [108]: f72ab2ecbcea2450 -Block 0024 [109]: 91b778f0a54da32b -Block 0024 [110]: 0dcb8a95679b55b4 -Block 0024 [111]: 9cd32122fe513e5d -Block 0024 [112]: b075bc86cceb1250 -Block 0024 [113]: 30bbf6f47551705f -Block 0024 [114]: 1d186a57f4818c81 -Block 0024 [115]: 501666ec7907c229 -Block 0024 [116]: cafbe336eb85f78d -Block 0024 [117]: d77bc0f41cf3adfe -Block 0024 [118]: 2d90197cf7095b6c -Block 0024 [119]: e42911f51b42d1d6 -Block 0024 [120]: 5faf35557a21aaf3 -Block 0024 [121]: 85be59bc0dd2201e -Block 0024 [122]: dd9295a14aef5e0e -Block 0024 [123]: b93a47670cf5b680 -Block 0024 [124]: a65ff50fc3bf9fc8 -Block 0024 [125]: 8d951d29aff95fa6 -Block 0024 [126]: 13bbbeeda75b273d -Block 0024 [127]: 98f195d7024186a0 -Block 0025 [ 0]: bba40f5a47d417b9 -Block 0025 [ 1]: 38e25e958235bb82 -Block 0025 [ 2]: 518e6b13a896b70f -Block 0025 [ 3]: 60405fe81faf9b64 -Block 0025 [ 4]: 2ced5f6ef3502bc8 -Block 0025 [ 5]: 79e7be1233ee4f0c -Block 0025 [ 6]: 3b978f674d06920e -Block 0025 [ 7]: 3df44338dbcefa3b -Block 0025 [ 8]: e4a94353df03ed60 -Block 0025 [ 9]: 59390ed09a0f47c9 -Block 0025 [ 10]: 9954694167bc7935 -Block 0025 [ 11]: 45577851e5fcf7a2 -Block 0025 [ 12]: ded46e2b0499a4dd -Block 0025 [ 13]: f00cafff22ac4044 -Block 0025 [ 14]: 511e53d92769a80f -Block 0025 [ 15]: af95973928a31f86 -Block 0025 [ 16]: 99b76728184ff8ac -Block 0025 [ 17]: a57e8f06400e1e2f -Block 0025 [ 18]: daa4835775144800 -Block 0025 [ 19]: 679a78622d3b16c5 -Block 0025 [ 20]: 5692552bd6ab8996 -Block 0025 [ 21]: c24ee7e93c3db671 -Block 0025 [ 22]: 61e434a343652398 -Block 0025 [ 23]: c47346cfd3191661 -Block 0025 [ 24]: f5e6ce91648c3c68 -Block 0025 [ 25]: 279f57679d6f6132 -Block 0025 [ 26]: 37c0a781cf440243 -Block 0025 [ 27]: 5ea5669a328cdf11 -Block 0025 [ 28]: 802d09ab6e7a0868 -Block 0025 [ 29]: 07eb1fa6bca9debb -Block 0025 [ 30]: ef3c12dd091134be -Block 0025 [ 31]: 2567727d448590c1 -Block 0025 [ 32]: e08540f824239b10 -Block 0025 [ 33]: 31c7beba56868274 -Block 0025 [ 34]: 077fc225a960ee90 -Block 0025 [ 35]: 301b82376a7ccae9 -Block 0025 [ 36]: fdd3881fc5fca41d -Block 0025 [ 37]: addce699566df76e -Block 0025 [ 38]: 092d9c03d980d984 -Block 0025 [ 39]: 7d98605e2aa3f4ac -Block 0025 [ 40]: 2608763bed27ec95 -Block 0025 [ 41]: 8782b2dff9b41089 -Block 0025 [ 42]: 3c3afbe5d82dac0d -Block 0025 [ 43]: 6bde148ab758b189 -Block 0025 [ 44]: d6ddd8914ac9cf79 -Block 0025 [ 45]: 52a1e1122baf014a -Block 0025 [ 46]: de57140a5c5aa9fd -Block 0025 [ 47]: 05db47d0e4e02af8 -Block 0025 [ 48]: 41990891d0444d56 -Block 0025 [ 49]: 547ff48a9d700720 -Block 0025 [ 50]: a810a834c1543a71 -Block 0025 [ 51]: 34fcaef0ef5d2f29 -Block 0025 [ 52]: fade3aa85d7cf180 -Block 0025 [ 53]: 1b574b782f1428c7 -Block 0025 [ 54]: e6e74b37b14430d4 -Block 0025 [ 55]: bcc097d24ab98a70 -Block 0025 [ 56]: 9e2954057a3d9414 -Block 0025 [ 57]: 7e6ea29ffbb0f63b -Block 0025 [ 58]: a7cc9ec051b86dad -Block 0025 [ 59]: 6f8274c9d96e52a7 -Block 0025 [ 60]: f447c520e61e4a60 -Block 0025 [ 61]: 27837b7d8014892f -Block 0025 [ 62]: 32c933e68fb44ff6 -Block 0025 [ 63]: df63aca26e3cd24c -Block 0025 [ 64]: bee83c8517f44de6 -Block 0025 [ 65]: 423ce78c74ed7149 -Block 0025 [ 66]: d8994e5735b66f8e -Block 0025 [ 67]: ce621833a2a3961f -Block 0025 [ 68]: b203e8ad73f78c2b -Block 0025 [ 69]: 5d602060b48c9acb -Block 0025 [ 70]: bbfd338d371fcbc8 -Block 0025 [ 71]: f299f99bdd7ba144 -Block 0025 [ 72]: 8324537878431c11 -Block 0025 [ 73]: 387dc9e73b15d8b3 -Block 0025 [ 74]: b943f301cf9f1f3d -Block 0025 [ 75]: cdf888ac99fff4f8 -Block 0025 [ 76]: 0eae3766686c5209 -Block 0025 [ 77]: 5f97d1fba4bcfcb4 -Block 0025 [ 78]: 715884edef0cf617 -Block 0025 [ 79]: e22540f279cc18d4 -Block 0025 [ 80]: f242de5481fd070d -Block 0025 [ 81]: ec292ce495f429a3 -Block 0025 [ 82]: d92a9fdd84a23406 -Block 0025 [ 83]: a7fc57fd55b481a2 -Block 0025 [ 84]: 383ac58faa6a8afa -Block 0025 [ 85]: e15530da8507a5e6 -Block 0025 [ 86]: 27eee21e792ca907 -Block 0025 [ 87]: c5ea9ec8a817e81f -Block 0025 [ 88]: 70008fdb121ecf32 -Block 0025 [ 89]: 978e2f5024aebf1d -Block 0025 [ 90]: 54143c4d79513ca4 -Block 0025 [ 91]: e5753e90346facad -Block 0025 [ 92]: b274b4c10a0161ff -Block 0025 [ 93]: 4f9096920761d015 -Block 0025 [ 94]: ae52b378a843f7d4 -Block 0025 [ 95]: 215f01ff30b7aeb2 -Block 0025 [ 96]: 5690ba842925161e -Block 0025 [ 97]: b7e25a89542e522c -Block 0025 [ 98]: 7644cfc97b40b48a -Block 0025 [ 99]: 4380c85f11f70baa -Block 0025 [100]: 94ba2b2707ebb3f2 -Block 0025 [101]: 89125afa70ed9ba4 -Block 0025 [102]: 5181f2282d281fe1 -Block 0025 [103]: f2f3dbcde02f7b28 -Block 0025 [104]: c0cca5a20a9cef7f -Block 0025 [105]: 6ee895188116cbc4 -Block 0025 [106]: e782e9270cecc673 -Block 0025 [107]: 95793a3c704b4dec -Block 0025 [108]: 5be31429be10f2bb -Block 0025 [109]: 8b2243083615ec15 -Block 0025 [110]: c5ade73601838bb6 -Block 0025 [111]: cc498fab3f9da0ea -Block 0025 [112]: 3fb7ce8e8ff8e31e -Block 0025 [113]: 9007393c51b786ce -Block 0025 [114]: 0d2e3be79e8be99c -Block 0025 [115]: 22a0992219b7d9c1 -Block 0025 [116]: 201a88022a7a5e5e -Block 0025 [117]: a5e413ff26993fa3 -Block 0025 [118]: ed88af659a44ff8e -Block 0025 [119]: a3a95740338b24b9 -Block 0025 [120]: c0c268eb4867d83a -Block 0025 [121]: 6bc5f961c03e2fc1 -Block 0025 [122]: 4707f39a3d5fc77d -Block 0025 [123]: 8aabb099015c1bd8 -Block 0025 [124]: eed1e19d8ca2a204 -Block 0025 [125]: 443a58299ed4223d -Block 0025 [126]: d74770e09dce90bb -Block 0025 [127]: 4b888c18c4236b8f -Block 0026 [ 0]: 7524ecdc95e7c6d7 -Block 0026 [ 1]: b3cb822ba2eceed0 -Block 0026 [ 2]: 7d987ffbecfccf8c -Block 0026 [ 3]: 3a258473aa1fdc9f -Block 0026 [ 4]: 83e61e2c136c00bf -Block 0026 [ 5]: caab98d5a6680f59 -Block 0026 [ 6]: 3908a0934c16862e -Block 0026 [ 7]: cc51e77f565be08f -Block 0026 [ 8]: 50d45dff2ee9795f -Block 0026 [ 9]: a35605e01aacbbc6 -Block 0026 [ 10]: 65c99361e71f2100 -Block 0026 [ 11]: 89a8baffa55ff0e5 -Block 0026 [ 12]: c65bec11667a437b -Block 0026 [ 13]: 090740aa017af145 -Block 0026 [ 14]: fab2e73cfa81f396 -Block 0026 [ 15]: 8679026a13ee01e3 -Block 0026 [ 16]: c05d58a1f3ab7333 -Block 0026 [ 17]: c896937796641e46 -Block 0026 [ 18]: ee27c718c81600aa -Block 0026 [ 19]: 0a3b9a30f844f5d0 -Block 0026 [ 20]: 567ee45f0a0c28d3 -Block 0026 [ 21]: cf3876bf24e2a5e8 -Block 0026 [ 22]: 9a2cafb3f511bf6e -Block 0026 [ 23]: 8487f16264a92081 -Block 0026 [ 24]: 74f04fae8ecf7090 -Block 0026 [ 25]: bd34df8e4e140159 -Block 0026 [ 26]: 24b7139c92dc8525 -Block 0026 [ 27]: 0553db4b337a9f7f -Block 0026 [ 28]: 1c24f59103b3a966 -Block 0026 [ 29]: a5175df227ce8de8 -Block 0026 [ 30]: f3b4ae3a1754e5c0 -Block 0026 [ 31]: 6c704dc1f8c64299 -Block 0026 [ 32]: 4d8a9c79d715519e -Block 0026 [ 33]: 8eaab1487cba16c8 -Block 0026 [ 34]: 528c6d737b994fd5 -Block 0026 [ 35]: fc8acca0cc21c09c -Block 0026 [ 36]: d61bc364f6ebaf18 -Block 0026 [ 37]: 8b94c071976e68a0 -Block 0026 [ 38]: 56ded45d70cd498b -Block 0026 [ 39]: 6a152849b21db2fd -Block 0026 [ 40]: 86bd73f44d45264b -Block 0026 [ 41]: c40ac98438a506ed -Block 0026 [ 42]: 5701ffca1aaad2ec -Block 0026 [ 43]: cff12b9747736945 -Block 0026 [ 44]: f9a6a6323192d3ab -Block 0026 [ 45]: 18c0163c6a7445a9 -Block 0026 [ 46]: ebba754fafbaa806 -Block 0026 [ 47]: da031098c2d192e1 -Block 0026 [ 48]: 2136f081115bb910 -Block 0026 [ 49]: 42cfafd06a770254 -Block 0026 [ 50]: 3cb4fe46c0f36b15 -Block 0026 [ 51]: 497e81c32e8afca4 -Block 0026 [ 52]: 69be4fb9638403d3 -Block 0026 [ 53]: 623d7fc341bb7b36 -Block 0026 [ 54]: 07d4519da1bd73f5 -Block 0026 [ 55]: 39af114fee896a8a -Block 0026 [ 56]: 9d7f584810c79e34 -Block 0026 [ 57]: f322aaa42a4ae198 -Block 0026 [ 58]: fb1aabd77964bde2 -Block 0026 [ 59]: d78ebb3d243f9b2d -Block 0026 [ 60]: 56a651b80a3da854 -Block 0026 [ 61]: edfd1fc542a8a0e6 -Block 0026 [ 62]: 0a46f95d3fae6429 -Block 0026 [ 63]: 3f20f938f650b5b6 -Block 0026 [ 64]: 54d570030c9c4837 -Block 0026 [ 65]: 5a2bef18df0d2e76 -Block 0026 [ 66]: b9e8a41eaba841cb -Block 0026 [ 67]: f5dcbf5174e0cbe2 -Block 0026 [ 68]: 70f5c1b6902e4a6d -Block 0026 [ 69]: 9761e7fb83ccb56f -Block 0026 [ 70]: 5f18b557308f0816 -Block 0026 [ 71]: a11c1e7aa6418541 -Block 0026 [ 72]: c631bafe9232e605 -Block 0026 [ 73]: 8826e45712fce91d -Block 0026 [ 74]: cd7e12f6195a79f9 -Block 0026 [ 75]: 9b8e8d667a3a4d1b -Block 0026 [ 76]: ef7efc9b3ae6f0a5 -Block 0026 [ 77]: 0f4c34f7f2ec4243 -Block 0026 [ 78]: 8f556330f679d973 -Block 0026 [ 79]: df7bda01e284a44e -Block 0026 [ 80]: eeabac8631c766ef -Block 0026 [ 81]: fef44e5ef6a3498c -Block 0026 [ 82]: 2d382ba1d1226d27 -Block 0026 [ 83]: b4f91bd12ec9f39f -Block 0026 [ 84]: 1db321ce939ddc97 -Block 0026 [ 85]: 7a5a0eabeab0078f -Block 0026 [ 86]: 51eb1dda474c86c1 -Block 0026 [ 87]: feb8d76a89319ec8 -Block 0026 [ 88]: d0039a53c43dfa4e -Block 0026 [ 89]: 82e48ec313b1cdea -Block 0026 [ 90]: c767da8cc93f5a1a -Block 0026 [ 91]: bfae99754e21e39c -Block 0026 [ 92]: 63fe97ada5387dbc -Block 0026 [ 93]: 2495c0d09d9f5d0a -Block 0026 [ 94]: bd2bbee826f6f61c -Block 0026 [ 95]: 59e3da689fe1d853 -Block 0026 [ 96]: e0f2181f9021901a -Block 0026 [ 97]: ce0bca4afe4bcdbd -Block 0026 [ 98]: 806ad96f49d275fb -Block 0026 [ 99]: ca66fff815705ad9 -Block 0026 [100]: 5e98c84e2bc4c65d -Block 0026 [101]: 138ce0cd914c7e4b -Block 0026 [102]: 1618685441796cd2 -Block 0026 [103]: 5652d9b9b577c1ca -Block 0026 [104]: fee05c49605b365d -Block 0026 [105]: 3a21df7d902490b6 -Block 0026 [106]: 0e56efb726856293 -Block 0026 [107]: ca9357c7d84aeaf3 -Block 0026 [108]: 814277096e54588a -Block 0026 [109]: ad5782d3e8183ea5 -Block 0026 [110]: 5258092311f7e6f9 -Block 0026 [111]: 16d04ef134231d8a -Block 0026 [112]: 4108069cb7d3c144 -Block 0026 [113]: b9fd8d673423e689 -Block 0026 [114]: 351480ec621ec66c -Block 0026 [115]: e6a6252aacf2671d -Block 0026 [116]: 7d2d586140549db6 -Block 0026 [117]: bfd7061371b05c96 -Block 0026 [118]: cfdcfe617d0483c4 -Block 0026 [119]: d573dd56878888fb -Block 0026 [120]: a040fd126cc375ae -Block 0026 [121]: 2d2c73cb9fe6db48 -Block 0026 [122]: 339570f37059f69e -Block 0026 [123]: 82ef4b1697bacaf7 -Block 0026 [124]: 1955bb40ef1fc395 -Block 0026 [125]: 8ff584d88baa7c9d -Block 0026 [126]: 0ad220eb031acb72 -Block 0026 [127]: 2484f6a33f13f23e -Block 0027 [ 0]: 1fda0c7229c75fdb -Block 0027 [ 1]: 3b057cc942f3cd3f -Block 0027 [ 2]: 31c9c320a5c0376a -Block 0027 [ 3]: cb00a56e4d62b45a -Block 0027 [ 4]: b7572461ea7d6726 -Block 0027 [ 5]: cbc887b494d57efa -Block 0027 [ 6]: cb1b6c6fc2d82eb9 -Block 0027 [ 7]: 33881117fe70f2a6 -Block 0027 [ 8]: 3d1cb35895213d3a -Block 0027 [ 9]: cadf7a6c0022d5f4 -Block 0027 [ 10]: a12c7a7bed011c22 -Block 0027 [ 11]: 536018ae6e9d2647 -Block 0027 [ 12]: 75c4cb0be2473d4d -Block 0027 [ 13]: 9764997b546ebb1a -Block 0027 [ 14]: dda4c694dab76ad4 -Block 0027 [ 15]: 55567a0d8ab9e123 -Block 0027 [ 16]: 2a49c160bb879bce -Block 0027 [ 17]: 5a2403c98b0f8ae8 -Block 0027 [ 18]: a4a92b12cb2b5c51 -Block 0027 [ 19]: ad1798fe3ab20086 -Block 0027 [ 20]: ea98bbeb727fd02e -Block 0027 [ 21]: 43958b17a50e1ec6 -Block 0027 [ 22]: 112a473821660ed4 -Block 0027 [ 23]: 987280b0b5818417 -Block 0027 [ 24]: f7f3543254541625 -Block 0027 [ 25]: 5ab76e1f9126f8ab -Block 0027 [ 26]: 65e55682ea820bdc -Block 0027 [ 27]: 972dc0ebaed288ab -Block 0027 [ 28]: f79b148835c0958d -Block 0027 [ 29]: 3ace78497080a361 -Block 0027 [ 30]: 9969a3d7b1befeaf -Block 0027 [ 31]: bd742e51395a89d3 -Block 0027 [ 32]: baf43c1483db2352 -Block 0027 [ 33]: e84ee2f1a84ece40 -Block 0027 [ 34]: 8f22dc4670472f04 -Block 0027 [ 35]: 2dcf99ef10f86670 -Block 0027 [ 36]: ce14e564c83002bc -Block 0027 [ 37]: 2e32ecc6db0741fa -Block 0027 [ 38]: ad4f625ed99e4383 -Block 0027 [ 39]: e6603fb0f3152626 -Block 0027 [ 40]: 32eaec4ac6c7c398 -Block 0027 [ 41]: 865a9e0a85b188b8 -Block 0027 [ 42]: 560965c1253f5da6 -Block 0027 [ 43]: 2693d2406683e622 -Block 0027 [ 44]: f43c35decf7602d7 -Block 0027 [ 45]: a5fff958abd0eeef -Block 0027 [ 46]: 8a33327b82089453 -Block 0027 [ 47]: 005bef4f733bc2c3 -Block 0027 [ 48]: 97a28713c59f913d -Block 0027 [ 49]: 5cd353bd83cdc6ef -Block 0027 [ 50]: 0aacbc79afddab85 -Block 0027 [ 51]: 4fe6b306da0bfa7d -Block 0027 [ 52]: 282f1a5d2122d391 -Block 0027 [ 53]: f438beb0459123af -Block 0027 [ 54]: 8d9a638b3e3972e1 -Block 0027 [ 55]: c57f98b7f0ebec5f -Block 0027 [ 56]: 493014c1e861a08d -Block 0027 [ 57]: 45dea4bb52398bb4 -Block 0027 [ 58]: 4202e23da13e9241 -Block 0027 [ 59]: 5ca76107962004d4 -Block 0027 [ 60]: 168a3f3fb1162c0c -Block 0027 [ 61]: 10a2c8451d4897d4 -Block 0027 [ 62]: 47be7e7ab8dade9e -Block 0027 [ 63]: 744d7e7a55d4300e -Block 0027 [ 64]: e6443af357da9913 -Block 0027 [ 65]: 385e14bfc8c813d0 -Block 0027 [ 66]: f3f6bbd7ce800d04 -Block 0027 [ 67]: 1e9bec6599344a5b -Block 0027 [ 68]: f58295f409ae0aef -Block 0027 [ 69]: 1fbed74bd118c839 -Block 0027 [ 70]: d5853cab4e59c44e -Block 0027 [ 71]: b94325cf3fbb0cad -Block 0027 [ 72]: 47e21f2b9ea96510 -Block 0027 [ 73]: 9cd1830ba9360d6c -Block 0027 [ 74]: 65f9e4a2bbb6bf7a -Block 0027 [ 75]: 3709eb11e8d6fece -Block 0027 [ 76]: f0faeac468e19460 -Block 0027 [ 77]: c4471652d4912143 -Block 0027 [ 78]: c876c69eccbece1d -Block 0027 [ 79]: 7950940be4fb865e -Block 0027 [ 80]: 1b4f4a1601f2c591 -Block 0027 [ 81]: e5706950d5d8f6b0 -Block 0027 [ 82]: 4042a47ec801379d -Block 0027 [ 83]: 6be04ec20118f578 -Block 0027 [ 84]: 001a180d065bce38 -Block 0027 [ 85]: 80964ddc465ba83d -Block 0027 [ 86]: 415c2aa44481ac91 -Block 0027 [ 87]: aed89f436287d7e3 -Block 0027 [ 88]: 802952efaaf3d094 -Block 0027 [ 89]: 1af0ad9a1610ed91 -Block 0027 [ 90]: 744f0d0bef283a27 -Block 0027 [ 91]: 1b689530c140618e -Block 0027 [ 92]: 4f7f8dc2b1bc8bf4 -Block 0027 [ 93]: 376ee176419f6bcb -Block 0027 [ 94]: 2ee40b0c2b7ffc4f -Block 0027 [ 95]: 7e368f2600d064e3 -Block 0027 [ 96]: 54553339b386dfbc -Block 0027 [ 97]: fd22006cdd6cc1d1 -Block 0027 [ 98]: aeaf9f07ce706f0c -Block 0027 [ 99]: 9a937eed3aaac150 -Block 0027 [100]: 50dbe43b498b11af -Block 0027 [101]: 03a25bcf482de7db -Block 0027 [102]: 1ac83d9c336e1ae5 -Block 0027 [103]: c7f954237ed53c26 -Block 0027 [104]: 7f8d262d30bd8811 -Block 0027 [105]: 9a47671a117cf278 -Block 0027 [106]: a0f96d1f1dbd203b -Block 0027 [107]: c8f89836bcb2ace2 -Block 0027 [108]: 6aa9b91c1cd82772 -Block 0027 [109]: 54445ab2a0e7dc23 -Block 0027 [110]: 66fc9ad87cf140db -Block 0027 [111]: 0159efe6983f9106 -Block 0027 [112]: b6cf18fdd907cf1d -Block 0027 [113]: 7696955344a1d27c -Block 0027 [114]: 1f3dfbd6e87b3d20 -Block 0027 [115]: 299d8c04822e399d -Block 0027 [116]: 0532c0de3a332eef -Block 0027 [117]: 696239a2ac2cbbb5 -Block 0027 [118]: 68f545a0ec2c696c -Block 0027 [119]: 048222d61d6f610d -Block 0027 [120]: 6584663441c18229 -Block 0027 [121]: a830dac83ecbaccd -Block 0027 [122]: 51f2a3e552d6153f -Block 0027 [123]: 7bdc0c6c3384f2b7 -Block 0027 [124]: e803e1fb1417ad70 -Block 0027 [125]: cf0ec4475e1e64fd -Block 0027 [126]: a4e27f7d5dc71200 -Block 0027 [127]: 06d4c361534e9911 -Block 0028 [ 0]: 32c41335ea9210b6 -Block 0028 [ 1]: 2908caade7811d5c -Block 0028 [ 2]: 4b1a563eb5a1d98d -Block 0028 [ 3]: 45cf5b4af41deea0 -Block 0028 [ 4]: 5909a634f94e4646 -Block 0028 [ 5]: ff552e94367fede7 -Block 0028 [ 6]: 8989b674682ab120 -Block 0028 [ 7]: 800dd98f9fa275ab -Block 0028 [ 8]: edffe0b58e9c86fd -Block 0028 [ 9]: c45282004f2814a8 -Block 0028 [ 10]: a521cf9953b68333 -Block 0028 [ 11]: 70abc3e590f22725 -Block 0028 [ 12]: 8f29ae090f8d0773 -Block 0028 [ 13]: e4d540b0329e3fd3 -Block 0028 [ 14]: 77fddd636772d800 -Block 0028 [ 15]: ba078e3c82b5318b -Block 0028 [ 16]: 56d10528600ed38a -Block 0028 [ 17]: 89d098154caa0893 -Block 0028 [ 18]: e4aa0f03e1cb18d5 -Block 0028 [ 19]: fc4cf7eb61cf8f4f -Block 0028 [ 20]: 44dc4ee07a7bfd74 -Block 0028 [ 21]: cb06692efcf18e23 -Block 0028 [ 22]: 5a9d5ebdacfef739 -Block 0028 [ 23]: 9790bad34a423c07 -Block 0028 [ 24]: 3383040615c439a7 -Block 0028 [ 25]: 226fde6e0cb002f1 -Block 0028 [ 26]: 7978d600dd285d8c -Block 0028 [ 27]: 0835c8b042d47a83 -Block 0028 [ 28]: b1a17cbff3060a9f -Block 0028 [ 29]: 4545802efeae6841 -Block 0028 [ 30]: 5367aec249f2b6de -Block 0028 [ 31]: 9a8422a7f6aea5e0 -Block 0028 [ 32]: 94cabf485e66553d -Block 0028 [ 33]: e57981e2b14887a4 -Block 0028 [ 34]: 93905e1e794d2205 -Block 0028 [ 35]: 6a4ff9e27c02848d -Block 0028 [ 36]: 10c8f985566fe580 -Block 0028 [ 37]: b3c3171e95becffa -Block 0028 [ 38]: eec81d0bcede8dd4 -Block 0028 [ 39]: b00be28516aca858 -Block 0028 [ 40]: 6934e88a20ace76c -Block 0028 [ 41]: 47f08f5592350122 -Block 0028 [ 42]: 14e17ffc342eebaf -Block 0028 [ 43]: 863d389922f73a18 -Block 0028 [ 44]: 0ff7df6a4bbf6bcd -Block 0028 [ 45]: 2faba6af4b500401 -Block 0028 [ 46]: 372768258430dfe1 -Block 0028 [ 47]: 01bcbd80ed1de995 -Block 0028 [ 48]: ae5afc3480fb7967 -Block 0028 [ 49]: f250d7a29d4be253 -Block 0028 [ 50]: 872e9136a10d0eb5 -Block 0028 [ 51]: 3564f6703348db6b -Block 0028 [ 52]: cf93aa26857f8ee7 -Block 0028 [ 53]: 1d299906531381e4 -Block 0028 [ 54]: ed7ca859c6d8b326 -Block 0028 [ 55]: 5bbab373efc162e8 -Block 0028 [ 56]: 41b53fef1db146c2 -Block 0028 [ 57]: 9867a1d10a2b388d -Block 0028 [ 58]: a5ad3d460ca549c4 -Block 0028 [ 59]: 8bed29dd5fc55562 -Block 0028 [ 60]: 3dcf490ad631e1a9 -Block 0028 [ 61]: ca435946ccb81dcb -Block 0028 [ 62]: 1b4562bcf9168a82 -Block 0028 [ 63]: 2fd4e872eaa1fe62 -Block 0028 [ 64]: b983dc5232d579d5 -Block 0028 [ 65]: 03c695c140c0edf1 -Block 0028 [ 66]: 12099ea1c402ac91 -Block 0028 [ 67]: e5afa04a89237da7 -Block 0028 [ 68]: a728ae68bd5437fc -Block 0028 [ 69]: b88fd09c300d4a2d -Block 0028 [ 70]: 9914366e0b3c126a -Block 0028 [ 71]: 8364641c737e50d1 -Block 0028 [ 72]: 122e37cb75998698 -Block 0028 [ 73]: 85572ba9771af0fe -Block 0028 [ 74]: a44b9f591f80b58a -Block 0028 [ 75]: 6459da15cb5d272f -Block 0028 [ 76]: ae12e0972e058f17 -Block 0028 [ 77]: a0e841ae6a81805d -Block 0028 [ 78]: 5acd71d74a03b7c9 -Block 0028 [ 79]: c1673f3dffac1f87 -Block 0028 [ 80]: 9683f8d059a3b697 -Block 0028 [ 81]: 15f48a9a018b5479 -Block 0028 [ 82]: e0a92373d66cb331 -Block 0028 [ 83]: b84417d7cb5bd6b3 -Block 0028 [ 84]: 22132d54c2fd5b3f -Block 0028 [ 85]: 785d35635126aacf -Block 0028 [ 86]: d0b53d2c7798ecce -Block 0028 [ 87]: 9b626d1e9b959bff -Block 0028 [ 88]: da50d0911145526d -Block 0028 [ 89]: 75312c2a5cf2e275 -Block 0028 [ 90]: fb3aa5e8a13c4046 -Block 0028 [ 91]: e1c7c3217dd12c33 -Block 0028 [ 92]: 07909d45807dd952 -Block 0028 [ 93]: 110ec96ff2ebdc7f -Block 0028 [ 94]: 7ea07fe9842efe47 -Block 0028 [ 95]: 425c93ed6006230c -Block 0028 [ 96]: b7fb64295a59a93d -Block 0028 [ 97]: 4efcb995d56337c4 -Block 0028 [ 98]: bf377c88a5af6c75 -Block 0028 [ 99]: ce50e122e1079e8e -Block 0028 [100]: 06b62a99c54dd329 -Block 0028 [101]: 5b0a20d8f32a0af9 -Block 0028 [102]: 3dcc3c5ac31473ed -Block 0028 [103]: edcdeeabbecb091c -Block 0028 [104]: 38e14f2ad8ddaef1 -Block 0028 [105]: 3949a00bdfc849d5 -Block 0028 [106]: 3b9f6f89d40e7f3e -Block 0028 [107]: fd7903c040f8ee1b -Block 0028 [108]: 7d2e15f404b0d354 -Block 0028 [109]: 44f182b1f5898001 -Block 0028 [110]: c07e54e736fcfc92 -Block 0028 [111]: 3261288fd6af25bc -Block 0028 [112]: 37eb6fb2c2600a4d -Block 0028 [113]: 5eb2713e33ebc44a -Block 0028 [114]: c1bc5125e04a3cc8 -Block 0028 [115]: 069c8e186b801b0d -Block 0028 [116]: 12cfde575ffb4f28 -Block 0028 [117]: 52c4b308cf636f0f -Block 0028 [118]: d0d7c70301717b1c -Block 0028 [119]: 5e336270c1e4be93 -Block 0028 [120]: bbc5117dafb3e016 -Block 0028 [121]: e92c253e4ff5c789 -Block 0028 [122]: 2fe2ef37a3bad40d -Block 0028 [123]: 5f2b5516992e9a7c -Block 0028 [124]: 751834695924b8b9 -Block 0028 [125]: 1690f02af7b84ea1 -Block 0028 [126]: 532fc595d9512246 -Block 0028 [127]: c61ba9a02850ea46 -Block 0029 [ 0]: add11aa00a1ea4d0 -Block 0029 [ 1]: fefe9582aaec41cd -Block 0029 [ 2]: 5cd4a89c4444635d -Block 0029 [ 3]: bdd0c9350b4a5094 -Block 0029 [ 4]: 5d0a829bca844556 -Block 0029 [ 5]: 186a40fca2ba9ad9 -Block 0029 [ 6]: b6607f2d0e772114 -Block 0029 [ 7]: 8fdad92bdeab4dfc -Block 0029 [ 8]: af5824fae0d6e220 -Block 0029 [ 9]: 1172624a43ce5a27 -Block 0029 [ 10]: 9efa1c98083ea629 -Block 0029 [ 11]: 2057b1f90d21994a -Block 0029 [ 12]: b4a78f175af13055 -Block 0029 [ 13]: a8067c8ecb690f89 -Block 0029 [ 14]: 696808a37d55b720 -Block 0029 [ 15]: 3ac7ac8bcf254afc -Block 0029 [ 16]: 3118370cc0dd00ea -Block 0029 [ 17]: 2076c62ed3b2abc5 -Block 0029 [ 18]: 17bb0bf6de2ddc05 -Block 0029 [ 19]: 25e529d36c8adab3 -Block 0029 [ 20]: 7b3e7cc26479761f -Block 0029 [ 21]: cbd465a0506827a4 -Block 0029 [ 22]: d37d375e0e95a1f5 -Block 0029 [ 23]: 76f8302d75ed5d19 -Block 0029 [ 24]: 2191acabbb23f800 -Block 0029 [ 25]: 3d377fb20887a356 -Block 0029 [ 26]: c7682304541f1323 -Block 0029 [ 27]: ceb43d33e7d3386a -Block 0029 [ 28]: 407add972d722890 -Block 0029 [ 29]: 93a767e25ada3ba7 -Block 0029 [ 30]: 8fed6af3edc7824f -Block 0029 [ 31]: bf01dfabc83a3c4c -Block 0029 [ 32]: fe1ef8d4ce519029 -Block 0029 [ 33]: f1a09603ee5fcdf2 -Block 0029 [ 34]: 67cc66acdff21067 -Block 0029 [ 35]: 1116b86114d72bcb -Block 0029 [ 36]: 56164ccc856823e4 -Block 0029 [ 37]: 3171a29cde173382 -Block 0029 [ 38]: cbf5e8127ef7fb2f -Block 0029 [ 39]: 884573ff59238a7b -Block 0029 [ 40]: 8c3565a5909ba912 -Block 0029 [ 41]: 58e7366a05905181 -Block 0029 [ 42]: dbf13d7043ede744 -Block 0029 [ 43]: de011ea9c7c23e54 -Block 0029 [ 44]: 428cad22d58f193a -Block 0029 [ 45]: 45de623cf58b0c53 -Block 0029 [ 46]: 483fc391de58d241 -Block 0029 [ 47]: e73d32757f024a7b -Block 0029 [ 48]: c835d9a411601ec6 -Block 0029 [ 49]: 4a3af9cc90fa8a69 -Block 0029 [ 50]: b1c327c3b12a12ff -Block 0029 [ 51]: 7fdc8c0ebd7c30b6 -Block 0029 [ 52]: 4b9b92ff0b10341c -Block 0029 [ 53]: 9d8b0c5831e6c994 -Block 0029 [ 54]: d47efb3be63d3e3d -Block 0029 [ 55]: ade765bf86f5df54 -Block 0029 [ 56]: 788fd7782936eeea -Block 0029 [ 57]: 540e48df4db64ada -Block 0029 [ 58]: 2fe776d6bf8d30a4 -Block 0029 [ 59]: 63c88f63651bea29 -Block 0029 [ 60]: 81aea09a44806f4b -Block 0029 [ 61]: d90a0f9ba502ac3f -Block 0029 [ 62]: 4f96462a8497a7c7 -Block 0029 [ 63]: a7ae07aeb861a596 -Block 0029 [ 64]: 3a1b6d5ebcfc303d -Block 0029 [ 65]: 723827adee4a8e15 -Block 0029 [ 66]: 72b52160c47894e1 -Block 0029 [ 67]: 15616dcc3f42f6e3 -Block 0029 [ 68]: de67114cc4170021 -Block 0029 [ 69]: 95ee35dfd896d229 -Block 0029 [ 70]: 7dc3c038cac0bb6a -Block 0029 [ 71]: e114afde3c1de71f -Block 0029 [ 72]: 93ea33127d3ce347 -Block 0029 [ 73]: bdee9a999f9f8214 -Block 0029 [ 74]: 3550c57e4800e4ca -Block 0029 [ 75]: 59bdb97534185fb3 -Block 0029 [ 76]: d4efb828dc1f5ff5 -Block 0029 [ 77]: 711c1f4bacce64ab -Block 0029 [ 78]: 459a1b080ac101c6 -Block 0029 [ 79]: ef8e36116123fc71 -Block 0029 [ 80]: 0d0fae7c0cf5e221 -Block 0029 [ 81]: 3b102939edcc0eae -Block 0029 [ 82]: 2d9b9bf5be11f338 -Block 0029 [ 83]: 271550e5da1f36de -Block 0029 [ 84]: cca29d23e9c467b4 -Block 0029 [ 85]: 744636c4a604ae60 -Block 0029 [ 86]: 89b8ee0f4749a36a -Block 0029 [ 87]: 65220bc4563a257a -Block 0029 [ 88]: b74c05e4eaa7cc4f -Block 0029 [ 89]: 086fd14ecdeb82e8 -Block 0029 [ 90]: 230b4c7e56c1ee7b -Block 0029 [ 91]: bae6c10b660c5111 -Block 0029 [ 92]: 07cd541cc6437cb1 -Block 0029 [ 93]: b5ea0b9f20ad5934 -Block 0029 [ 94]: 18e9b42ec8814d0e -Block 0029 [ 95]: e83fb10b5a09e073 -Block 0029 [ 96]: da5e28b56288ac58 -Block 0029 [ 97]: 174a4b4903b9c5d6 -Block 0029 [ 98]: 82bc2f5b6793b6cc -Block 0029 [ 99]: ac6b5c349715cfbf -Block 0029 [100]: 7a48fed3b0c9f26e -Block 0029 [101]: 4eeb834b011f248a -Block 0029 [102]: 2a1d26ca58e502b1 -Block 0029 [103]: 040c0107e7aaa35e -Block 0029 [104]: 3cdad0dfe1993113 -Block 0029 [105]: 1c49204462db6030 -Block 0029 [106]: 0bb6e36674aef59d -Block 0029 [107]: 78f8a4a051cb7d88 -Block 0029 [108]: a95d9a11b1b56cd1 -Block 0029 [109]: e3664edc847d987f -Block 0029 [110]: 699052c329fcd1c3 -Block 0029 [111]: 8b02281ab5d25587 -Block 0029 [112]: 61fa5bcacc25ec28 -Block 0029 [113]: 382590c5a74307db -Block 0029 [114]: de30a0f8f4c2f320 -Block 0029 [115]: c55f1987ae2aa60a -Block 0029 [116]: 8a724baccfc67cfa -Block 0029 [117]: de0cfef70f80dd8d -Block 0029 [118]: 77beeebf78cc6a32 -Block 0029 [119]: 617da08890f3c0e9 -Block 0029 [120]: 62bb69bb0f1c5160 -Block 0029 [121]: a93377cb766010b5 -Block 0029 [122]: 112da6ac115a74fb -Block 0029 [123]: e3a52beb05168b2b -Block 0029 [124]: f3fd36ecabb3527b -Block 0029 [125]: 64574738ec294c16 -Block 0029 [126]: d5333065268994d7 -Block 0029 [127]: b09bd8e650de9161 -Block 0030 [ 0]: 08dfb5b3fe406306 -Block 0030 [ 1]: c5312272e1f69b52 -Block 0030 [ 2]: cbdd6a284c512f4d -Block 0030 [ 3]: 687538b188f6bf15 -Block 0030 [ 4]: 5aee1a263441db4a -Block 0030 [ 5]: 00e32ad00ade10e7 -Block 0030 [ 6]: bab8788eafa26d22 -Block 0030 [ 7]: 7b843cae9bd7429c -Block 0030 [ 8]: 89ab7c909ce0afcb -Block 0030 [ 9]: 7fb383e1420a5e21 -Block 0030 [ 10]: b26b0cfbee87d48a -Block 0030 [ 11]: 983210f3de9b9047 -Block 0030 [ 12]: fb59126535223142 -Block 0030 [ 13]: db514d95f211c7fb -Block 0030 [ 14]: f515b48c97bd9515 -Block 0030 [ 15]: 7e68254e02cdd184 -Block 0030 [ 16]: c496044d88ab47c0 -Block 0030 [ 17]: 22db0bf93215dd06 -Block 0030 [ 18]: cf46a109f73acc39 -Block 0030 [ 19]: e6a9c9e5962a2bfc -Block 0030 [ 20]: 12797c2591967658 -Block 0030 [ 21]: 1014994c62a70462 -Block 0030 [ 22]: 90a53cae4c9b0e1f -Block 0030 [ 23]: a633d50ff83bcb8d -Block 0030 [ 24]: 70a6e461bd449dbf -Block 0030 [ 25]: 4da0098f9c7a5453 -Block 0030 [ 26]: a09198d0dfe7713b -Block 0030 [ 27]: 6eb90d60a5ba7529 -Block 0030 [ 28]: 81d8c5ebe039a33b -Block 0030 [ 29]: 4e37f98a762ef594 -Block 0030 [ 30]: 1abfad99141701c9 -Block 0030 [ 31]: 67ee74fa668481eb -Block 0030 [ 32]: 7a669dd3cb4cf59e -Block 0030 [ 33]: aea827dc1f7195ca -Block 0030 [ 34]: 5c80866eb9c926eb -Block 0030 [ 35]: 0d5dae78f6f6aa32 -Block 0030 [ 36]: da67e2bf0a9a4b77 -Block 0030 [ 37]: 8a18b58bfcb1cd04 -Block 0030 [ 38]: fa0637bd520b412c -Block 0030 [ 39]: 3d018060fe8aa1e0 -Block 0030 [ 40]: c6c79556dedc0000 -Block 0030 [ 41]: 54265a1bfe4733f9 -Block 0030 [ 42]: dae1c5465ac7ce06 -Block 0030 [ 43]: 91d1e17536504207 -Block 0030 [ 44]: b16901c12fbbcec2 -Block 0030 [ 45]: b0cab54ebbc38c1a -Block 0030 [ 46]: cb177d1c379b6ba5 -Block 0030 [ 47]: 9e89831cd5f7af27 -Block 0030 [ 48]: c58c9ea11044eb08 -Block 0030 [ 49]: 0098fda05b1145c6 -Block 0030 [ 50]: ca02336bd40c4e33 -Block 0030 [ 51]: 77abb03f0e361d83 -Block 0030 [ 52]: bfa6459a28eb2f57 -Block 0030 [ 53]: 54d31d24130925b7 -Block 0030 [ 54]: a12618fe3ca0c681 -Block 0030 [ 55]: a24b0483c9958e0a -Block 0030 [ 56]: 64d5a56781f4d6f4 -Block 0030 [ 57]: e20130a5f6d87d0a -Block 0030 [ 58]: 5f580a9102de8a68 -Block 0030 [ 59]: 502a334100566829 -Block 0030 [ 60]: 797750bf411eb51b -Block 0030 [ 61]: 62a09e380225fc5e -Block 0030 [ 62]: b33ee6ddb9ac36f8 -Block 0030 [ 63]: 9ad1dd87f3ee6417 -Block 0030 [ 64]: c665959960517a13 -Block 0030 [ 65]: 4e5cbc7e627f4e24 -Block 0030 [ 66]: cf059e777b429508 -Block 0030 [ 67]: b9927671cb6d6302 -Block 0030 [ 68]: 19926b6bda53e8fe -Block 0030 [ 69]: 423ba4b5555df12a -Block 0030 [ 70]: d733c68771548188 -Block 0030 [ 71]: 29a6ccd4536f41dc -Block 0030 [ 72]: 5c0d40dfa1a71042 -Block 0030 [ 73]: 181b1f0ff83ca88d -Block 0030 [ 74]: f8d3a324d605f361 -Block 0030 [ 75]: c7ad66be1e571c2e -Block 0030 [ 76]: 2a21a8c1e20120b0 -Block 0030 [ 77]: 02952b2500d1efa2 -Block 0030 [ 78]: adf8c180acee7d49 -Block 0030 [ 79]: 8237b37ed5f21ac5 -Block 0030 [ 80]: bfd242ac3779da36 -Block 0030 [ 81]: d7b855378e7fbdd2 -Block 0030 [ 82]: 170f22ae96fe001f -Block 0030 [ 83]: 8eab780bebebf04a -Block 0030 [ 84]: 477e80264e61af76 -Block 0030 [ 85]: dc69e31592d53b7e -Block 0030 [ 86]: 328fb77f8bae2fcc -Block 0030 [ 87]: c455a0092a29ea78 -Block 0030 [ 88]: 1800e6910efc272b -Block 0030 [ 89]: aafdfa08b9556b15 -Block 0030 [ 90]: ad91adfa49ce7d6b -Block 0030 [ 91]: 877b80cac732ef89 -Block 0030 [ 92]: 44674288a92e8bd9 -Block 0030 [ 93]: 79f4d5eaf13b6f7f -Block 0030 [ 94]: 684b87a9b0d52671 -Block 0030 [ 95]: d9db925848ab10d7 -Block 0030 [ 96]: 0f2b06ba22a78c8f -Block 0030 [ 97]: b243791bc790a685 -Block 0030 [ 98]: 1170616247ef89f1 -Block 0030 [ 99]: 5aeff68c2d24e50e -Block 0030 [100]: 4343a891e18c7467 -Block 0030 [101]: 75d3996a744fa7d5 -Block 0030 [102]: 48914f9a89dbc621 -Block 0030 [103]: 0e2fb9f7e0f8178b -Block 0030 [104]: a4788b9e0fd44e18 -Block 0030 [105]: 591ea8f93e28cff6 -Block 0030 [106]: de9e9a4a5f89f020 -Block 0030 [107]: 1a88133a2a7ad118 -Block 0030 [108]: 115997bfc3fd9306 -Block 0030 [109]: 30a4ad4d9ef28ef6 -Block 0030 [110]: d537b41a77b10f73 -Block 0030 [111]: 3369bdfb413b272b -Block 0030 [112]: 8e34565660c067bb -Block 0030 [113]: 3da1bd4281d3d62f -Block 0030 [114]: 1370fa3a826909b8 -Block 0030 [115]: 656e4e0c713a2771 -Block 0030 [116]: 8ad3b509c8186a57 -Block 0030 [117]: 4acfd4b8dacba1ba -Block 0030 [118]: bb6cfd146f147a75 -Block 0030 [119]: 4ce21db7ebc6bec5 -Block 0030 [120]: 3b037cf3d8980a60 -Block 0030 [121]: 58b03a7d9e6ab6d1 -Block 0030 [122]: ee0d4ee5f201021a -Block 0030 [123]: 6608e0f76e954f0b -Block 0030 [124]: 0a296388dc27b0a5 -Block 0030 [125]: 39436aba3e4b9171 -Block 0030 [126]: 5d9d8588ee7539a8 -Block 0030 [127]: ad10057b7c4da7e0 -Block 0031 [ 0]: b3c48688fc2b713b -Block 0031 [ 1]: 364781fc5f750423 -Block 0031 [ 2]: ea69a118315d23c7 -Block 0031 [ 3]: 4ac9ed2303ec053e -Block 0031 [ 4]: b6c7e3bfcc85a6f7 -Block 0031 [ 5]: 160b6b27cc70d7f1 -Block 0031 [ 6]: d9b57e9cc0aad16d -Block 0031 [ 7]: f51388fa42bd1428 -Block 0031 [ 8]: 8db628f8a2ccbf52 -Block 0031 [ 9]: 0ef96003d0231d89 -Block 0031 [ 10]: a77815f354a8e5b7 -Block 0031 [ 11]: d584a05b6814fdf8 -Block 0031 [ 12]: f74510d8ca59d0bb -Block 0031 [ 13]: 13c0fd32bdd2cc33 -Block 0031 [ 14]: 6b9516534e1e8ee1 -Block 0031 [ 15]: 34a15e4c62a6ab14 -Block 0031 [ 16]: 1882e2eba3ae44e9 -Block 0031 [ 17]: 957874ed3ac0ca45 -Block 0031 [ 18]: a471a22d5c6b42de -Block 0031 [ 19]: c56f33082e512277 -Block 0031 [ 20]: b81484ee71fe466f -Block 0031 [ 21]: 07d24fcbeb680a1e -Block 0031 [ 22]: f320052c7a5e3ca1 -Block 0031 [ 23]: 56a7f75059c8ff64 -Block 0031 [ 24]: 66d9988e90a28fc8 -Block 0031 [ 25]: c52009fa320c94fc -Block 0031 [ 26]: 38998b1a93fa14ed -Block 0031 [ 27]: 40fcfdcca6291c75 -Block 0031 [ 28]: cc025109722879c5 -Block 0031 [ 29]: 9e52089a827f9efd -Block 0031 [ 30]: 78b4b8748c01ddc2 -Block 0031 [ 31]: 5ffe0751b440f784 -Block 0031 [ 32]: 169ce11a3f88a85f -Block 0031 [ 33]: 33c9a0e2de1d0c3a -Block 0031 [ 34]: 85e428ffcd39101f -Block 0031 [ 35]: 3fa0828a33be4bc6 -Block 0031 [ 36]: 78196d7f8e4c8698 -Block 0031 [ 37]: 9f0c886cf76a8f7d -Block 0031 [ 38]: 4eb7c07ae742f382 -Block 0031 [ 39]: 467bb21382b7aa46 -Block 0031 [ 40]: 4bafc9489e5fbe32 -Block 0031 [ 41]: 1fb0fb5c81d35964 -Block 0031 [ 42]: c434eb81393e44f2 -Block 0031 [ 43]: 561f1f4b28c42edd -Block 0031 [ 44]: 277df226f23e81ee -Block 0031 [ 45]: c08d4113b941697a -Block 0031 [ 46]: 829e09624e128f31 -Block 0031 [ 47]: 6283d40b695d8127 -Block 0031 [ 48]: 9655b9e317f39b77 -Block 0031 [ 49]: 7b68f551daff8793 -Block 0031 [ 50]: c7703dbdf2683b4e -Block 0031 [ 51]: 55c627bbe2d149d1 -Block 0031 [ 52]: a3a66eff7c8051ae -Block 0031 [ 53]: a26573784f8e6ab3 -Block 0031 [ 54]: b5f1e85d216f7949 -Block 0031 [ 55]: f4f73a7c4b9aad80 -Block 0031 [ 56]: 7825ab8d82f2e119 -Block 0031 [ 57]: 477b0475d80ecb8c -Block 0031 [ 58]: 55d7e5090c40da89 -Block 0031 [ 59]: f78377f6048ae4f7 -Block 0031 [ 60]: 8cd3f34ad475a8d6 -Block 0031 [ 61]: 4b083d7bdd6a8cba -Block 0031 [ 62]: 95d8abfb240c4814 -Block 0031 [ 63]: a3377ef2f90de6c2 -Block 0031 [ 64]: dbc89827423716f1 -Block 0031 [ 65]: 335e301508ad645f -Block 0031 [ 66]: 651b44508cd7a07b -Block 0031 [ 67]: c6193afb80e62027 -Block 0031 [ 68]: 2a71a83b6e034408 -Block 0031 [ 69]: e434912f53a352bc -Block 0031 [ 70]: f9d50b8fb251136f -Block 0031 [ 71]: f27424b6c6eba780 -Block 0031 [ 72]: b2264f402f8ef79f -Block 0031 [ 73]: 81697a71fc39551d -Block 0031 [ 74]: 00c6a580d7f107b5 -Block 0031 [ 75]: d6c923bcda6464b2 -Block 0031 [ 76]: b94aa22a4d66b346 -Block 0031 [ 77]: f24aa1224c7568ed -Block 0031 [ 78]: f2b2b13c5372ec7e -Block 0031 [ 79]: 02f019342bfd68de -Block 0031 [ 80]: e7c71e7270a9125f -Block 0031 [ 81]: 5d48c3fde040dd13 -Block 0031 [ 82]: f0f48402df38fe5f -Block 0031 [ 83]: 3c181ea41dc2ec3c -Block 0031 [ 84]: 2beb6e97876b88cf -Block 0031 [ 85]: 7ea1174c0dc96fe5 -Block 0031 [ 86]: 1f8a392f03d0c079 -Block 0031 [ 87]: 4701d9fff4897905 -Block 0031 [ 88]: 14161fe99ea020a2 -Block 0031 [ 89]: 2fa89d01e50bfb3c -Block 0031 [ 90]: 909a26187893ff8c -Block 0031 [ 91]: d71a9cde6778796b -Block 0031 [ 92]: dc5c48410d2a711f -Block 0031 [ 93]: 6d157148168c2013 -Block 0031 [ 94]: a9534ea78f37392f -Block 0031 [ 95]: 04fe65b5dcc4223e -Block 0031 [ 96]: 76cdd2997d6eb568 -Block 0031 [ 97]: e1d576333a57d9ba -Block 0031 [ 98]: c1a31217c5f5599d -Block 0031 [ 99]: 4cb52c88e2e00fe8 -Block 0031 [100]: 153cfd925ef21b00 -Block 0031 [101]: 2e4f158d03b58211 -Block 0031 [102]: 639ffe731e811fcc -Block 0031 [103]: 24fb4a3d962e898b -Block 0031 [104]: e0bcc96f713b8ff9 -Block 0031 [105]: 0cf4c44703830b7f -Block 0031 [106]: b32cb05c07886e34 -Block 0031 [107]: ba08b062ccba50d0 -Block 0031 [108]: 91294b4aa9bc5a43 -Block 0031 [109]: 2d400f10c1b6a9be -Block 0031 [110]: 62a147f32799a447 -Block 0031 [111]: d8d5a2fd4fc9bfdf -Block 0031 [112]: 244d3a7fb1fabfec -Block 0031 [113]: c5b919604e91a5fb -Block 0031 [114]: 387d446b9148351b -Block 0031 [115]: afa4faf51d18ceb6 -Block 0031 [116]: 3d185ce015d811db -Block 0031 [117]: 055b8e4f1439bf47 -Block 0031 [118]: 96a004c174932568 -Block 0031 [119]: 7cde3345b6a6a927 -Block 0031 [120]: 3b2cd27114b81fc0 -Block 0031 [121]: 85a734f9649b30b3 -Block 0031 [122]: dbfac3c3ba955bdd -Block 0031 [123]: cbdd3b8c4c271e4f -Block 0031 [124]: be934f0029c83a48 -Block 0031 [125]: db7e4b8f39c91c7d -Block 0031 [126]: 60b2676ff06a944a -Block 0031 [127]: 802b5b8358cf77b4 -Tag: 96 a9 d4 e5 a1 73 40 92 c8 5e 29 f4 10 a4 59 14 a5 dd 1f 5c bf 08 b2 67 0d a6 8a 02 85 ab f3 2b diff --git a/pkg/urcrypt/argon2/kats/argon2d_v16.shasum b/pkg/urcrypt/argon2/kats/argon2d_v16.shasum deleted file mode 100644 index 6df69c8de..000000000 --- a/pkg/urcrypt/argon2/kats/argon2d_v16.shasum +++ /dev/null @@ -1 +0,0 @@ -4ec4569a016c3accc6a25a34252b03a6135939b3c452389917a3f3b65878165b argon2d_v16 diff --git a/pkg/urcrypt/argon2/kats/argon2i b/pkg/urcrypt/argon2/kats/argon2i deleted file mode 100644 index 2438db048..000000000 --- a/pkg/urcrypt/argon2/kats/argon2i +++ /dev/null @@ -1,12304 +0,0 @@ -======================================= -Argon2i version number 19 -======================================= -Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes -Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 -Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 -Secret[8]: 03 03 03 03 03 03 03 03 -Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 -Pre-hashing digest: c4 60 65 81 52 76 a0 b3 e7 31 73 1c 90 2f 1f d8 0c f7 76 90 7f bb 7b 6a 5c a7 2e 7b 56 01 1f ee ca 44 6c 86 dd 75 b9 46 9a 5e 68 79 de c4 b7 2d 08 63 fb 93 9b 98 2e 5f 39 7c c7 d1 64 fd da a9 - - After pass 0: -Block 0000 [ 0]: f8f9e84545db08f6 -Block 0000 [ 1]: 9b073a5c87aa2d97 -Block 0000 [ 2]: d1e868d75ca8d8e4 -Block 0000 [ 3]: 349634174e1aebcc -Block 0000 [ 4]: eea679ca0b5f6de1 -Block 0000 [ 5]: 28f43caf97eba539 -Block 0000 [ 6]: 0f7895c9d5b3a714 -Block 0000 [ 7]: 34ee3afb003414a8 -Block 0000 [ 8]: 19e25e3ad0aea4dd -Block 0000 [ 9]: 0621947f5c64686c -Block 0000 [ 10]: f9eb4d3b70a00365 -Block 0000 [ 11]: 29d30205ecdbbfdd -Block 0000 [ 12]: bd82cd842052f713 -Block 0000 [ 13]: e465f1dd3eb4d797 -Block 0000 [ 14]: 56769e2b75d3d2e7 -Block 0000 [ 15]: fa423c1914be7eea -Block 0000 [ 16]: 62c74952efa4962e -Block 0000 [ 17]: 7452bcfeae5ed127 -Block 0000 [ 18]: 9b244b507058a767 -Block 0000 [ 19]: ad381b104b333277 -Block 0000 [ 20]: d74814cfe245d0a8 -Block 0000 [ 21]: 1e502a5c5fae8de4 -Block 0000 [ 22]: facc3eb8b94d3934 -Block 0000 [ 23]: 309a560639f36145 -Block 0000 [ 24]: 97c9414271065971 -Block 0000 [ 25]: 9d2d8e80f0b210fd -Block 0000 [ 26]: 8ad91ada654260d9 -Block 0000 [ 27]: e8f0199dc84ec601 -Block 0000 [ 28]: 259b8023dfe9f620 -Block 0000 [ 29]: a89f710764c84faa -Block 0000 [ 30]: 00ef7d0ed19c9170 -Block 0000 [ 31]: c3365e9be7f8ad9a -Block 0000 [ 32]: 0713eccea1449c39 -Block 0000 [ 33]: 76dfdcbc5418ca19 -Block 0000 [ 34]: 6dae38246899edb4 -Block 0000 [ 35]: d119c2592c32d2fd -Block 0000 [ 36]: 12588a09c09fa985 -Block 0000 [ 37]: fd7de45ad68146e2 -Block 0000 [ 38]: b8b2a32696f86ff5 -Block 0000 [ 39]: 7a8597fe96c79b15 -Block 0000 [ 40]: 0b1c32b869e29e8e -Block 0000 [ 41]: d109376ce2cd296a -Block 0000 [ 42]: 5930033519fbc3ea -Block 0000 [ 43]: 26c0615c70db9a06 -Block 0000 [ 44]: c52e63756eb284d6 -Block 0000 [ 45]: f46353b6fa27de93 -Block 0000 [ 46]: c3f16cd0bf50beb1 -Block 0000 [ 47]: 7cbb5010db6ca163 -Block 0000 [ 48]: 6df6fb9d5477cb8d -Block 0000 [ 49]: f76c9bc2200b9271 -Block 0000 [ 50]: 4307dd8d26190968 -Block 0000 [ 51]: 559d187e7f15ce59 -Block 0000 [ 52]: 3fa3181855fc8fae -Block 0000 [ 53]: 8a5c7a26545c3289 -Block 0000 [ 54]: 6e0dab49fbd175c9 -Block 0000 [ 55]: 162d68393ba63961 -Block 0000 [ 56]: 7e8bf654d150b577 -Block 0000 [ 57]: 245981b04758d084 -Block 0000 [ 58]: b94c1f15f33a00c3 -Block 0000 [ 59]: 09b776c573975316 -Block 0000 [ 60]: e059c7959776505f -Block 0000 [ 61]: c8dec45d870e2428 -Block 0000 [ 62]: 9d05dd926cbe5e24 -Block 0000 [ 63]: 07eadbb03290625e -Block 0000 [ 64]: 1813e236d70246c4 -Block 0000 [ 65]: 6b9e88ab27f282a1 -Block 0000 [ 66]: 8cab57c214d0e51b -Block 0000 [ 67]: 819344c6d98d7949 -Block 0000 [ 68]: 642adef349e0b4c2 -Block 0000 [ 69]: 9147532626665562 -Block 0000 [ 70]: 4ce7940e9759fa18 -Block 0000 [ 71]: 86d723f5cb5bfa23 -Block 0000 [ 72]: 5956a509891d3a19 -Block 0000 [ 73]: fb65eb9452479fe5 -Block 0000 [ 74]: 15600005da769dbc -Block 0000 [ 75]: 0460dfcc45a3df4c -Block 0000 [ 76]: 9aeaf38a4e4a76a9 -Block 0000 [ 77]: a32de9ae286662a0 -Block 0000 [ 78]: 6c77f20cb87d260b -Block 0000 [ 79]: b4ee4f5014fe19b3 -Block 0000 [ 80]: 786e8758451fedc0 -Block 0000 [ 81]: 9f8a3f5a0bea80d5 -Block 0000 [ 82]: 1f5ed85ddaa1bb51 -Block 0000 [ 83]: 431138b634bdf789 -Block 0000 [ 84]: 8fee5e61ed0f3a28 -Block 0000 [ 85]: 3f166d47f662999d -Block 0000 [ 86]: 01825a35d081ba83 -Block 0000 [ 87]: 363beef46f72e254 -Block 0000 [ 88]: c0404cbcaeb8b1e5 -Block 0000 [ 89]: bf01bb3491b46fd2 -Block 0000 [ 90]: a96f73ec77d2ea1b -Block 0000 [ 91]: 7307883b0bb3368c -Block 0000 [ 92]: 180c75845418050e -Block 0000 [ 93]: 9fdd76f0e4c993c1 -Block 0000 [ 94]: d27430c09a31f795 -Block 0000 [ 95]: b16a193a47b44cd5 -Block 0000 [ 96]: 07213b9404ed4cf7 -Block 0000 [ 97]: 71794be1c4c5f86a -Block 0000 [ 98]: 46ac3a39882cffc5 -Block 0000 [ 99]: b607228f89c849b3 -Block 0000 [100]: a686fe80a061b73d -Block 0000 [101]: 5da420bbf2060e84 -Block 0000 [102]: 41d90855f9cfdd8a -Block 0000 [103]: 0bd841213cab1533 -Block 0000 [104]: f2c61ec90b666394 -Block 0000 [105]: 2ccdba05749dfd50 -Block 0000 [106]: 892110f27c3b5cec -Block 0000 [107]: 83a48c906e85ec88 -Block 0000 [108]: 9e47d91d9fd201f6 -Block 0000 [109]: b63a128d51ad43c8 -Block 0000 [110]: b704ba46fcf4e5ff -Block 0000 [111]: b12ae3f3cd72953c -Block 0000 [112]: 757f5ab719072f8f -Block 0000 [113]: 7aa97ff2970a4983 -Block 0000 [114]: 26d6bfd165886039 -Block 0000 [115]: e7adc882d7cb951b -Block 0000 [116]: ada2f6156a676320 -Block 0000 [117]: 171d0b6b8aa5a810 -Block 0000 [118]: 23bed4ea02a196ee -Block 0000 [119]: 02f0188d935ab1ca -Block 0000 [120]: 35587bbaae997e8f -Block 0000 [121]: e019dc02fbbd82c7 -Block 0000 [122]: f6075ab25dbcf553 -Block 0000 [123]: fb9083c228f4a752 -Block 0000 [124]: 9d15acfaa9b10ba4 -Block 0000 [125]: f0a6348c8d1d5414 -Block 0000 [126]: 3677542aa326e00f -Block 0000 [127]: 4243b9abcf3da44a -Block 0001 [ 0]: ef764133b4ca7099 -Block 0001 [ 1]: 620440b335cfe9e1 -Block 0001 [ 2]: 57168a36ebcb7715 -Block 0001 [ 3]: ff3b0b0f3930071d -Block 0001 [ 4]: 45172aba01f6fb3f -Block 0001 [ 5]: 0e1606b528bbcc18 -Block 0001 [ 6]: 45e18c0a19181cfc -Block 0001 [ 7]: 82bfbe0920b6587e -Block 0001 [ 8]: 3bab67fb1c68f77a -Block 0001 [ 9]: 56c49774a6130f3b -Block 0001 [ 10]: 3a6dfe75c9eb7f87 -Block 0001 [ 11]: 73c5e435e706cfe0 -Block 0001 [ 12]: 4c99046a73c091a9 -Block 0001 [ 13]: af7daf0a40e91b94 -Block 0001 [ 14]: 9da14c9e8cbb3ecb -Block 0001 [ 15]: 60440e10556a8e9e -Block 0001 [ 16]: 83353ede182e7349 -Block 0001 [ 17]: 2421e9e19a58a64d -Block 0001 [ 18]: f1eb1a9a17260a7a -Block 0001 [ 19]: a1898333c9e704ba -Block 0001 [ 20]: 159219bddbc57599 -Block 0001 [ 21]: dfbe30755288733b -Block 0001 [ 22]: fe9df8f860580019 -Block 0001 [ 23]: 16a1ca7d3854643e -Block 0001 [ 24]: 485e3ac74e7231ba -Block 0001 [ 25]: beebe23e664c4a95 -Block 0001 [ 26]: c9049347422d9e0d -Block 0001 [ 27]: 4d88f3373c446af7 -Block 0001 [ 28]: b83c654f54013a30 -Block 0001 [ 29]: 75b41709be2283c4 -Block 0001 [ 30]: 83f2efbed5b0d3f0 -Block 0001 [ 31]: 04629de997b1b2b0 -Block 0001 [ 32]: 583c5766265c50fe -Block 0001 [ 33]: e0306a89eb326efd -Block 0001 [ 34]: 5c1f148541f18e2c -Block 0001 [ 35]: 0462bd80b505f544 -Block 0001 [ 36]: afa70cd1847e14ba -Block 0001 [ 37]: 4a107dc0330d7392 -Block 0001 [ 38]: a41d234f92da5fef -Block 0001 [ 39]: 5c1f1ef242e817ac -Block 0001 [ 40]: 4c21ded5b41e4094 -Block 0001 [ 41]: 5382efd3508c2e0c -Block 0001 [ 42]: f99d3383b9f79cd4 -Block 0001 [ 43]: c59cf9cca42b6c3c -Block 0001 [ 44]: c1073a16b4609c9e -Block 0001 [ 45]: eeb0741015c0bec1 -Block 0001 [ 46]: 59fdebef1fa66310 -Block 0001 [ 47]: ac6041a2f43ddf7e -Block 0001 [ 48]: 1dfa0e2d9bf3acf9 -Block 0001 [ 49]: d424856738a27879 -Block 0001 [ 50]: a00c23feea1774f4 -Block 0001 [ 51]: 89aa283bcb83e2ea -Block 0001 [ 52]: d5c467511139648b -Block 0001 [ 53]: 736a35cbe2be51a7 -Block 0001 [ 54]: 2a9a116684b668a6 -Block 0001 [ 55]: 6c97a9ae3f327f6e -Block 0001 [ 56]: 7a37d7d11fa226a1 -Block 0001 [ 57]: e933955bb195f86f -Block 0001 [ 58]: 33e0ba8e788c608b -Block 0001 [ 59]: b191c25233ce5744 -Block 0001 [ 60]: a47cbd502d3d657d -Block 0001 [ 61]: 9373f7d43329517c -Block 0001 [ 62]: 69c08268cd250f03 -Block 0001 [ 63]: 64806d4cebc49823 -Block 0001 [ 64]: 51b7c4d051e70e05 -Block 0001 [ 65]: 91598eb48764ed2c -Block 0001 [ 66]: b9be7ab1d422d2c3 -Block 0001 [ 67]: eb4243989b24e6da -Block 0001 [ 68]: 0df9fb33ec5a2734 -Block 0001 [ 69]: db21c080fd6a4f45 -Block 0001 [ 70]: b33850abcfdd0713 -Block 0001 [ 71]: 7dad7d9d0be16da2 -Block 0001 [ 72]: ae3ccab55493d758 -Block 0001 [ 73]: d0d752f17120f636 -Block 0001 [ 74]: bc9d875ca9a5617b -Block 0001 [ 75]: f71b4218c11d1de7 -Block 0001 [ 76]: b71c8b9ad12f8574 -Block 0001 [ 77]: 1f47cd7880ee5f60 -Block 0001 [ 78]: 7e94dcef68d5437b -Block 0001 [ 79]: 5212acee74773cd5 -Block 0001 [ 80]: 447fe1f91d18984b -Block 0001 [ 81]: 42b651bbf71123bf -Block 0001 [ 82]: a36cbec05af8a16e -Block 0001 [ 83]: f0062604e61b9562 -Block 0001 [ 84]: 8de69b3901f9beed -Block 0001 [ 85]: 0ef87138213d49bb -Block 0001 [ 86]: ac23b588ee62df85 -Block 0001 [ 87]: 214784f404183fc6 -Block 0001 [ 88]: 80bd01721550b847 -Block 0001 [ 89]: 477d6c0b7cde2cbe -Block 0001 [ 90]: 52854d28f1c327ef -Block 0001 [ 91]: 6d023ae28c3aa0b8 -Block 0001 [ 92]: ad28349b9fb94455 -Block 0001 [ 93]: 9f03641c1e41fd77 -Block 0001 [ 94]: b7f2c676f362a9eb -Block 0001 [ 95]: 66974a6cf91ef0f3 -Block 0001 [ 96]: 767da5d9fc567f54 -Block 0001 [ 97]: 43b4c5bd3a112b5f -Block 0001 [ 98]: d14f0ebe0a796ebe -Block 0001 [ 99]: e4a7ade650871550 -Block 0001 [100]: 8841858fab3bbc24 -Block 0001 [101]: 9bf02ae3876cee46 -Block 0001 [102]: fb3d03e3030580de -Block 0001 [103]: 3cd714a5f553c6ae -Block 0001 [104]: 7301e5f821f928da -Block 0001 [105]: c2fc74e88d5b7cff -Block 0001 [106]: 6161d5101e4fd223 -Block 0001 [107]: 45cf0588a9a55a41 -Block 0001 [108]: 77902bd3439bf89d -Block 0001 [109]: 6fa5269812f867d1 -Block 0001 [110]: 2caa21dbd02ea223 -Block 0001 [111]: b776e0d326f8bf2b -Block 0001 [112]: 3f3959f6cf241888 -Block 0001 [113]: e2ad2d05b2095775 -Block 0001 [114]: 08403c042f8bfe87 -Block 0001 [115]: 2ee327dcc9e04a69 -Block 0001 [116]: 6031d492c05b0970 -Block 0001 [117]: 9b6f35141994e4a4 -Block 0001 [118]: 24427c298a09f2a6 -Block 0001 [119]: 3325ce5ef7c363fe -Block 0001 [120]: 5821f16b64830335 -Block 0001 [121]: 18d3c2a72d220c00 -Block 0001 [122]: 60c684f8541cdb39 -Block 0001 [123]: 53e20b76bdc07a15 -Block 0001 [124]: 396fd953e51a57f7 -Block 0001 [125]: 6c45c1dd68804fbb -Block 0001 [126]: 386e57e7fe152c87 -Block 0001 [127]: 2b8ab7d454b17187 -Block 0002 [ 0]: f800892a7954baa5 -Block 0002 [ 1]: bb211f064d193505 -Block 0002 [ 2]: 2c406a2eb271e25e -Block 0002 [ 3]: fa438cb81ec6e36f -Block 0002 [ 4]: 9735e9adcf04badc -Block 0002 [ 5]: 197193e9f53e6c35 -Block 0002 [ 6]: 260ee704b27a33d5 -Block 0002 [ 7]: fc9e533fe0595718 -Block 0002 [ 8]: 0a5b5d636945ddc1 -Block 0002 [ 9]: 2b8c865b8c7cbbc9 -Block 0002 [ 10]: 407b524588d22887 -Block 0002 [ 11]: 5bf322dd7ed3f320 -Block 0002 [ 12]: 68b0ac8fcd51f09e -Block 0002 [ 13]: e573f760dbeab339 -Block 0002 [ 14]: 8f9bbb1aa92d30df -Block 0002 [ 15]: de70db7a94f48763 -Block 0002 [ 16]: c7343a9920a08774 -Block 0002 [ 17]: 04a16cc553ccfd91 -Block 0002 [ 18]: ba758a5bcf1ceee1 -Block 0002 [ 19]: 302d7a2500b04827 -Block 0002 [ 20]: fab42113e7a58400 -Block 0002 [ 21]: 774d2f3fb3ebac54 -Block 0002 [ 22]: 039fb1f8b4bd0ae6 -Block 0002 [ 23]: a0062ed5dc741bfb -Block 0002 [ 24]: c1f8b84daf845788 -Block 0002 [ 25]: 676d9d836a19800a -Block 0002 [ 26]: a38f6fd865ac4848 -Block 0002 [ 27]: caeb787c80d60dd8 -Block 0002 [ 28]: c0ef86db1ef7dc8c -Block 0002 [ 29]: 2ab8f9a9e8e5c11d -Block 0002 [ 30]: a4541aee68c4eb23 -Block 0002 [ 31]: e95fe5830c6b8ba0 -Block 0002 [ 32]: 15b15aae605b133c -Block 0002 [ 33]: 96b0a14a369ec241 -Block 0002 [ 34]: ef41fbe7867703a6 -Block 0002 [ 35]: efd04ef060083c4e -Block 0002 [ 36]: 6989e447eb83bdc2 -Block 0002 [ 37]: 9a36016905584a79 -Block 0002 [ 38]: 0d13b26ce0ff9d05 -Block 0002 [ 39]: b4d7e57e14069ece -Block 0002 [ 40]: 1f0e4c518f1c8c1e -Block 0002 [ 41]: 8b78a9808d9690d2 -Block 0002 [ 42]: 90c2d89b2aed8a6b -Block 0002 [ 43]: ff2e5c3beb3a1815 -Block 0002 [ 44]: d496191f32068f3a -Block 0002 [ 45]: b8dfe21cb707da28 -Block 0002 [ 46]: d79319d5f2e41fab -Block 0002 [ 47]: 9a46839bc093121e -Block 0002 [ 48]: 5bac63652a33f3ec -Block 0002 [ 49]: 02c37aa9ae4990e8 -Block 0002 [ 50]: 1398f6f1dbb7af0f -Block 0002 [ 51]: 7eb5484d7affbb12 -Block 0002 [ 52]: 78660ba371fea159 -Block 0002 [ 53]: 98e4d1399d2362c8 -Block 0002 [ 54]: 8568b763f41a812d -Block 0002 [ 55]: b9bbbefe59138b97 -Block 0002 [ 56]: 86039e4a97b3f9c1 -Block 0002 [ 57]: 23f89f528c03a7d7 -Block 0002 [ 58]: 34602582e567cc92 -Block 0002 [ 59]: a85188de86a572bd -Block 0002 [ 60]: 8a73a6b3119b4089 -Block 0002 [ 61]: 7bc9311caf998892 -Block 0002 [ 62]: 938f52a89c882cc7 -Block 0002 [ 63]: 3caa06a9012cb757 -Block 0002 [ 64]: 54b797ab02e20770 -Block 0002 [ 65]: f96f77af4acc75c9 -Block 0002 [ 66]: fbfea542d5e8050e -Block 0002 [ 67]: d34858f9f7c0509e -Block 0002 [ 68]: 770353666b8d6d6d -Block 0002 [ 69]: 876cfcb815cb1825 -Block 0002 [ 70]: d5794151cc1d4b6b -Block 0002 [ 71]: c94613ec9e726d59 -Block 0002 [ 72]: b386eddf504649b4 -Block 0002 [ 73]: 048945fcd8814cd2 -Block 0002 [ 74]: 1ca2c95c74bda800 -Block 0002 [ 75]: c881bb4a4c047e6f -Block 0002 [ 76]: 7d0311c7ffc91e51 -Block 0002 [ 77]: fde167d6295385f8 -Block 0002 [ 78]: 25decd8821d31214 -Block 0002 [ 79]: 67dbf17c5a3615be -Block 0002 [ 80]: 235fce4fbbaf1b91 -Block 0002 [ 81]: f8cf3fe7dc09dd19 -Block 0002 [ 82]: 1047453126c4e863 -Block 0002 [ 83]: 8845e5b3deb21c6c -Block 0002 [ 84]: 4cbcfb62e7732ecb -Block 0002 [ 85]: f673aca506549a4a -Block 0002 [ 86]: 9273d099a3df174f -Block 0002 [ 87]: 08ffdc9464e5292b -Block 0002 [ 88]: c8ca072e21db9bba -Block 0002 [ 89]: 3c2610eb1e17098f -Block 0002 [ 90]: fe447430a6ac29a2 -Block 0002 [ 91]: 021f607556d333bf -Block 0002 [ 92]: 42f7f71e90b08b96 -Block 0002 [ 93]: c2e25d7dfaefc9bc -Block 0002 [ 94]: cc372cea39d95dea -Block 0002 [ 95]: c7bb1a34bce7deb7 -Block 0002 [ 96]: 3699605b8efc1d72 -Block 0002 [ 97]: b9d1203e5e5a9f93 -Block 0002 [ 98]: e0ac8c626778c5b9 -Block 0002 [ 99]: e8f0abe5bfffc759 -Block 0002 [100]: a0ddef1454f012c4 -Block 0002 [101]: c35b7e6bb3c129ef -Block 0002 [102]: c495ece8dffaa61f -Block 0002 [103]: 9f303d56213c5213 -Block 0002 [104]: c15b627a5137b819 -Block 0002 [105]: c767b5cdb34e6640 -Block 0002 [106]: 63970c306c5456b3 -Block 0002 [107]: 3c5d22fed3a34b4b -Block 0002 [108]: 77fcecc4982e6e5d -Block 0002 [109]: ad1612003aca1745 -Block 0002 [110]: e1952b3ba36fb7ad -Block 0002 [111]: bc654d244a26361a -Block 0002 [112]: 996cba723c6dee9f -Block 0002 [113]: abfd371026ffc462 -Block 0002 [114]: 2aca5170a54baf57 -Block 0002 [115]: fe5af00451aa2448 -Block 0002 [116]: adcc756aad83c72c -Block 0002 [117]: ea0b0fd40b596cb2 -Block 0002 [118]: e553a4d72df13b74 -Block 0002 [119]: 43d6b8d77a537397 -Block 0002 [120]: cdfd86bdf959205a -Block 0002 [121]: cb0e847adf1b1a21 -Block 0002 [122]: 7daf47cb8acefa5d -Block 0002 [123]: f473a1dc75308090 -Block 0002 [124]: b5c963edba8f5b31 -Block 0002 [125]: 977fe5978311b717 -Block 0002 [126]: 508d8a5d678bdce3 -Block 0002 [127]: a9fc0d3300c8acc0 -Block 0003 [ 0]: f29f5ee7dde3e2fa -Block 0003 [ 1]: a69ac3ce1bfbe156 -Block 0003 [ 2]: f20cd315e3237ea6 -Block 0003 [ 3]: f65add2c10041390 -Block 0003 [ 4]: 224a2f1d2d0cb714 -Block 0003 [ 5]: 852d30cc9e7667b2 -Block 0003 [ 6]: 5bae034c9ae55292 -Block 0003 [ 7]: 3693e7e73fcb7211 -Block 0003 [ 8]: 1bc540987729dad0 -Block 0003 [ 9]: 61bc9fef7ee05b1e -Block 0003 [ 10]: c349dbc3fbdd2373 -Block 0003 [ 11]: b9943f5eedfec4e6 -Block 0003 [ 12]: 78070afd731fad12 -Block 0003 [ 13]: 5bd3aab17f6b9d8c -Block 0003 [ 14]: a6b24b01005d202c -Block 0003 [ 15]: 333fe2532820ff48 -Block 0003 [ 16]: 1f4f7e472e2b8fb3 -Block 0003 [ 17]: f176be488974611a -Block 0003 [ 18]: 1e9f6f9231c09908 -Block 0003 [ 19]: 5d54c79477328673 -Block 0003 [ 20]: 3e7969bf3766cf2d -Block 0003 [ 21]: b4dcc50e5b21245b -Block 0003 [ 22]: 7a53bfcd6e7fc1b8 -Block 0003 [ 23]: 7212aeab8eccdb9b -Block 0003 [ 24]: 909aa8c6929eca7c -Block 0003 [ 25]: ff8a4ee4e6e07f69 -Block 0003 [ 26]: 5d189711c4cbf159 -Block 0003 [ 27]: 6e16fb8216c3341d -Block 0003 [ 28]: 74b7cf5d99f50dd9 -Block 0003 [ 29]: a3e420ff6430892f -Block 0003 [ 30]: 32bcd10ef54c9025 -Block 0003 [ 31]: 4040565062b0c14a -Block 0003 [ 32]: 48e8d06ee166f230 -Block 0003 [ 33]: a7941b7ef30da38b -Block 0003 [ 34]: dc303d0535fb39c0 -Block 0003 [ 35]: 704564c8a42f5387 -Block 0003 [ 36]: 995ae4804047a33c -Block 0003 [ 37]: c9aaed214935c044 -Block 0003 [ 38]: a1ddf242e51be1e1 -Block 0003 [ 39]: 509629b7401dae92 -Block 0003 [ 40]: aa08ce0caa96268c -Block 0003 [ 41]: 916ade45d30f4159 -Block 0003 [ 42]: 689738eedf7ebff5 -Block 0003 [ 43]: 1a7addd2b677db5f -Block 0003 [ 44]: fb5bb4c97d66b670 -Block 0003 [ 45]: 41a52657afbe3147 -Block 0003 [ 46]: 3883bc90bc1169d8 -Block 0003 [ 47]: ec52333d647d5b85 -Block 0003 [ 48]: 5a444fd37a3c4f27 -Block 0003 [ 49]: 8c32816c9d713368 -Block 0003 [ 50]: 5d5224766dd5d5db -Block 0003 [ 51]: 4904f3da1d5dcae4 -Block 0003 [ 52]: ce1a724bd5858367 -Block 0003 [ 53]: 8eccc94bf8659467 -Block 0003 [ 54]: f452f0b9278f115d -Block 0003 [ 55]: f0cbb770de867a30 -Block 0003 [ 56]: 7e52ecf3a381577c -Block 0003 [ 57]: 2b1228c2a7ba6127 -Block 0003 [ 58]: 5e826b4c3d378b86 -Block 0003 [ 59]: 2479e83e33f483eb -Block 0003 [ 60]: b98b54b722038d21 -Block 0003 [ 61]: f9e4729b6e07e4af -Block 0003 [ 62]: ac3e565b4b0d5c61 -Block 0003 [ 63]: 20f2acbd2702c2b0 -Block 0003 [ 64]: 2806b9b55ae9f42a -Block 0003 [ 65]: 3b0ff28da85596ff -Block 0003 [ 66]: 67de27987796c904 -Block 0003 [ 67]: 7cad0f6f1c0baf7d -Block 0003 [ 68]: 87394f6d9e6387a2 -Block 0003 [ 69]: e684ab37a27ffa95 -Block 0003 [ 70]: 40044ced68c8fcf8 -Block 0003 [ 71]: c3cd8c8d3a92a151 -Block 0003 [ 72]: 586fc6e2612b29d9 -Block 0003 [ 73]: 0a05e7e439049499 -Block 0003 [ 74]: a2e36bc85145c34c -Block 0003 [ 75]: ebdffd4eee30c7d0 -Block 0003 [ 76]: eb4bf0c46b2fd17d -Block 0003 [ 77]: a6247f3ec7467b0d -Block 0003 [ 78]: d35d387770f7b130 -Block 0003 [ 79]: 6587143e81164304 -Block 0003 [ 80]: 87a0d7265bb58016 -Block 0003 [ 81]: a0e8b7ed5337329a -Block 0003 [ 82]: 20bffc3919b2f8ee -Block 0003 [ 83]: 5bae72ac7bc9e98e -Block 0003 [ 84]: f0720b89617c114c -Block 0003 [ 85]: d458007dd3ad396d -Block 0003 [ 86]: f6a77609442e6dbc -Block 0003 [ 87]: 6927f28f9f2b3931 -Block 0003 [ 88]: 9dd53d1ba8546814 -Block 0003 [ 89]: 375b50984dd3215f -Block 0003 [ 90]: d916bca2077a3dfc -Block 0003 [ 91]: fddd15ac8ec81f25 -Block 0003 [ 92]: 5f7fc3b451ef209a -Block 0003 [ 93]: 04500f0944cfb165 -Block 0003 [ 94]: 55e97e7a0286d396 -Block 0003 [ 95]: 21a9d670b0d460d6 -Block 0003 [ 96]: 4b5ef30861dd497d -Block 0003 [ 97]: 05868fe9bee1b79a -Block 0003 [ 98]: 4090c8b98223f86a -Block 0003 [ 99]: 952446e47335d4cf -Block 0003 [100]: 8ce87f53a456595d -Block 0003 [101]: 2e337ac5f6c713ff -Block 0003 [102]: 14c0320208b056f7 -Block 0003 [103]: 4b62cfe312451641 -Block 0003 [104]: b84242c858a3c472 -Block 0003 [105]: 224c1df89e776cc7 -Block 0003 [106]: 4b87c369fba56549 -Block 0003 [107]: 7fc4979047128a2d -Block 0003 [108]: 1656d958d82950e4 -Block 0003 [109]: dfedfbee1e7e1006 -Block 0003 [110]: d682028ee41f8844 -Block 0003 [111]: 53f64e8bb452c43c -Block 0003 [112]: 3a0f16fa65ccd87f -Block 0003 [113]: b1563cdcd9ffa4a1 -Block 0003 [114]: 67fa21f7b286a798 -Block 0003 [115]: 0baa99c3ad450dc5 -Block 0003 [116]: e9bd5f54023ce367 -Block 0003 [117]: d08137ab3255eee1 -Block 0003 [118]: eb904d633401c297 -Block 0003 [119]: 3332a4249f22ad11 -Block 0003 [120]: a8f06f44894e1b5e -Block 0003 [121]: c8255151ffc2df5b -Block 0003 [122]: 8e4a109353c6adaf -Block 0003 [123]: 9b28b15b5d3174f4 -Block 0003 [124]: c6d904a8edee34c6 -Block 0003 [125]: 87375410235cbcd9 -Block 0003 [126]: 55bf929868fc10c3 -Block 0003 [127]: 127c01e4eb0a2de7 -Block 0004 [ 0]: c5669884e05e1054 -Block 0004 [ 1]: 3f94ff6ebc2b2554 -Block 0004 [ 2]: 8fbc379431b56422 -Block 0004 [ 3]: f88c86f1f1270af0 -Block 0004 [ 4]: 26b6ae60cef93b49 -Block 0004 [ 5]: 72b0b121127be7b5 -Block 0004 [ 6]: dab1be76dc74af93 -Block 0004 [ 7]: a03e9cfcc4ac8a05 -Block 0004 [ 8]: d8c9e3b84f55f063 -Block 0004 [ 9]: ffa26c3a57c34ad2 -Block 0004 [ 10]: bd74c5a8a2127eb8 -Block 0004 [ 11]: cea1dc181f6f2a21 -Block 0004 [ 12]: 4843f0f8551328b3 -Block 0004 [ 13]: 47b8b38b1acdb67a -Block 0004 [ 14]: 781232b450232fdd -Block 0004 [ 15]: 9e2377879037b3e2 -Block 0004 [ 16]: 85a04f0ffa72a07c -Block 0004 [ 17]: 39451ddefe9fc9d8 -Block 0004 [ 18]: 173704443ef64f6b -Block 0004 [ 19]: 84f4b473532ad2a1 -Block 0004 [ 20]: 3089cff815b0f3b8 -Block 0004 [ 21]: 233f0730c04ea4da -Block 0004 [ 22]: 6fec989fd9ca3751 -Block 0004 [ 23]: 950ca59da61af60d -Block 0004 [ 24]: 64ed9179567b182c -Block 0004 [ 25]: 5dc48b9fe1d0a171 -Block 0004 [ 26]: 2f66b2eb0ee38875 -Block 0004 [ 27]: d175513a90dd451a -Block 0004 [ 28]: 4206e0c724377abd -Block 0004 [ 29]: cc13835a191fa67b -Block 0004 [ 30]: 3053614f4145274f -Block 0004 [ 31]: 1ca6125149cac629 -Block 0004 [ 32]: 1ec4eb1d931fcec5 -Block 0004 [ 33]: b48d876f2c3b85d9 -Block 0004 [ 34]: e94ce07477ca43e9 -Block 0004 [ 35]: 700c79cbe93b4394 -Block 0004 [ 36]: e89e17b0489867ff -Block 0004 [ 37]: 3cd01ed6b3858f52 -Block 0004 [ 38]: 474dad41679d199b -Block 0004 [ 39]: 5b255cc1d055e5df -Block 0004 [ 40]: 4ccade7e3293957a -Block 0004 [ 41]: 4d73c3ed8f0f9dce -Block 0004 [ 42]: 682e559fef82408c -Block 0004 [ 43]: 55a3398f6c8ad9f0 -Block 0004 [ 44]: a38c1d494d186dc9 -Block 0004 [ 45]: d4d9cb29dda4e9a9 -Block 0004 [ 46]: 5a881e243e65800f -Block 0004 [ 47]: 3245ba87e34e6a01 -Block 0004 [ 48]: f8301e184fc6cda0 -Block 0004 [ 49]: 4c349af6614bdf35 -Block 0004 [ 50]: 38983beb42cabfa6 -Block 0004 [ 51]: 471b2b7d59aaf4c0 -Block 0004 [ 52]: 200340ed6848065c -Block 0004 [ 53]: fe5fa422a8539342 -Block 0004 [ 54]: 19db85340e85a4c7 -Block 0004 [ 55]: 764b873844fe5dc8 -Block 0004 [ 56]: f95b70aba7297760 -Block 0004 [ 57]: 28b74a30e88c25a4 -Block 0004 [ 58]: ff6052d1b7dc11b8 -Block 0004 [ 59]: 359fc7217f7b5ea3 -Block 0004 [ 60]: 7343b307e5077ab9 -Block 0004 [ 61]: 8150cdffb05bd766 -Block 0004 [ 62]: cc7c8dc0e4ab8231 -Block 0004 [ 63]: 16934251c5404298 -Block 0004 [ 64]: 5b8b9b3abdf59f9e -Block 0004 [ 65]: e9111f573f4630ab -Block 0004 [ 66]: 382795e34b2ec716 -Block 0004 [ 67]: fcc921aa39a2cff8 -Block 0004 [ 68]: 6705644ecca72318 -Block 0004 [ 69]: 43f91b74943af5ed -Block 0004 [ 70]: 4d7d1da11f036218 -Block 0004 [ 71]: e1c228cdfcd89e96 -Block 0004 [ 72]: 090f00dea2cc93be -Block 0004 [ 73]: b387db043b11e668 -Block 0004 [ 74]: 0da3856a53e7ca99 -Block 0004 [ 75]: af74d7028d88f1f6 -Block 0004 [ 76]: 0e0abae1e9a6f9f9 -Block 0004 [ 77]: 693fa44317e4a292 -Block 0004 [ 78]: 5db30f5a60e69d24 -Block 0004 [ 79]: 11c85a24b61982a9 -Block 0004 [ 80]: 799ce38a9797a637 -Block 0004 [ 81]: 22be541165077550 -Block 0004 [ 82]: 3e9d7987ed7393f2 -Block 0004 [ 83]: 346fc635e2423532 -Block 0004 [ 84]: c329869d6c743739 -Block 0004 [ 85]: 7e1776ce3430a617 -Block 0004 [ 86]: 4879c918b591a3d5 -Block 0004 [ 87]: df686348aa1bcc9d -Block 0004 [ 88]: 4c292b6cb6451b23 -Block 0004 [ 89]: 64a0a9e46c7f4944 -Block 0004 [ 90]: 0e66aa435ab0d3c2 -Block 0004 [ 91]: da8620defbe33208 -Block 0004 [ 92]: 65a8aebdc3b995f7 -Block 0004 [ 93]: f446a1293537c2a3 -Block 0004 [ 94]: a5c2b153c90dafbd -Block 0004 [ 95]: aee2502b1b7b6454 -Block 0004 [ 96]: f77055f60f6ded0f -Block 0004 [ 97]: 4c99ab5ec6d6cc51 -Block 0004 [ 98]: 8b0570e7d0993e6e -Block 0004 [ 99]: a57d13448847ab2e -Block 0004 [100]: 2e25763d3f1f8860 -Block 0004 [101]: 9438798b77b4c74c -Block 0004 [102]: 88e65057c688ebe4 -Block 0004 [103]: 23d18ba2061e692b -Block 0004 [104]: fa2590a606cb24bf -Block 0004 [105]: 959e41d5895359f9 -Block 0004 [106]: b2d9c8c2ea35b321 -Block 0004 [107]: 4ae5dd4861388fc1 -Block 0004 [108]: 7047bf4db43193ea -Block 0004 [109]: dc6a89e8e3031a84 -Block 0004 [110]: 49df122c84348347 -Block 0004 [111]: b9eaaf9df38dfa72 -Block 0004 [112]: a5eadb80efc9f742 -Block 0004 [113]: 6e289d7490d5e8df -Block 0004 [114]: 1d8dfa94f6a71ddd -Block 0004 [115]: 05d642c2d9accca5 -Block 0004 [116]: e2fa51b62d827843 -Block 0004 [117]: cc351a7fbc1d6c57 -Block 0004 [118]: 08483dae0fb2a6e7 -Block 0004 [119]: 1377a9b14e8a170a -Block 0004 [120]: 18dd33ecc8497fc6 -Block 0004 [121]: cc1bf6adee26abb2 -Block 0004 [122]: 1b0f9fa6148fdcb8 -Block 0004 [123]: d85c6b6f66af28d2 -Block 0004 [124]: edb28ef7c9fd8989 -Block 0004 [125]: 3482825859e2fc7f -Block 0004 [126]: 7aafe644d7847c19 -Block 0004 [127]: 2066cdb758166cd6 -Block 0005 [ 0]: c69d96a7bb15ad7c -Block 0005 [ 1]: cd7d7ed48d3cd0c5 -Block 0005 [ 2]: b9b77be8c3a6d644 -Block 0005 [ 3]: 5c090535da2bdf7e -Block 0005 [ 4]: 468ba6b3adecc383 -Block 0005 [ 5]: 9bdc6c810fb047b6 -Block 0005 [ 6]: 59fa24c0e4629f41 -Block 0005 [ 7]: 2671328033fbac24 -Block 0005 [ 8]: c52bf1f5c071984d -Block 0005 [ 9]: 941e98216ad7ba45 -Block 0005 [ 10]: 4512e358a8f202e9 -Block 0005 [ 11]: e04b6e394dc8fcbf -Block 0005 [ 12]: edeee98a26d2ed10 -Block 0005 [ 13]: acfa10bcafede436 -Block 0005 [ 14]: 0327e4dccfda0df3 -Block 0005 [ 15]: 1517590ce6508a53 -Block 0005 [ 16]: 93be06e857f828b0 -Block 0005 [ 17]: 9e334a17efeacf2d -Block 0005 [ 18]: 0abb1c185c360c66 -Block 0005 [ 19]: 6e8ba87a521c988f -Block 0005 [ 20]: e1ce03229d851942 -Block 0005 [ 21]: b3a2f4339372bea0 -Block 0005 [ 22]: aee33f6f38262588 -Block 0005 [ 23]: 18538d1dbff00c4b -Block 0005 [ 24]: 560b17ae3900a4ca -Block 0005 [ 25]: 4f59a85a546527ba -Block 0005 [ 26]: f04efb8b9aa3ed24 -Block 0005 [ 27]: 7bb31fa85be906fd -Block 0005 [ 28]: 02b6a569c025f548 -Block 0005 [ 29]: 02f5100db86384ca -Block 0005 [ 30]: 218bf5af0629d6ac -Block 0005 [ 31]: cfe334b46e5562e6 -Block 0005 [ 32]: dcc54852060e5f15 -Block 0005 [ 33]: 3225b16290cc6003 -Block 0005 [ 34]: e2424de76ed2e45b -Block 0005 [ 35]: ad15394489787731 -Block 0005 [ 36]: 7d05d61506fad68e -Block 0005 [ 37]: 2c0c1d672f2f9b1f -Block 0005 [ 38]: 3ea3a2c1e10a1dfa -Block 0005 [ 39]: 4b2d09219829c0b4 -Block 0005 [ 40]: 240d9cc9af661f07 -Block 0005 [ 41]: bc8d390ba8011edb -Block 0005 [ 42]: 9bb0be348cde4a4a -Block 0005 [ 43]: 647c882ae02f2a4f -Block 0005 [ 44]: 5dbd001ec7676d38 -Block 0005 [ 45]: 73ab60a147b1c181 -Block 0005 [ 46]: 84fea05444fa2a85 -Block 0005 [ 47]: aef881d5d95c0df1 -Block 0005 [ 48]: 5a692fe61bda2856 -Block 0005 [ 49]: fe3ecd15fcb2c13a -Block 0005 [ 50]: fa10984aec1d1382 -Block 0005 [ 51]: e9aee1ccb6b4965c -Block 0005 [ 52]: 4d2e18d82faf8c3e -Block 0005 [ 53]: 1c4ece926941a8e9 -Block 0005 [ 54]: 386b5528970270e1 -Block 0005 [ 55]: 823551ce67827ec7 -Block 0005 [ 56]: 87d81a2f1a8047fb -Block 0005 [ 57]: ba373060adbed505 -Block 0005 [ 58]: 8578052221d6ae46 -Block 0005 [ 59]: 1f168936c739c3a4 -Block 0005 [ 60]: 0bcca09786e83d87 -Block 0005 [ 61]: 5753de51288adfc2 -Block 0005 [ 62]: 8ad3bcca43f40be1 -Block 0005 [ 63]: 4f1b9617f9c86c30 -Block 0005 [ 64]: e4d837570a26318b -Block 0005 [ 65]: 067d4cb0d49a3121 -Block 0005 [ 66]: 91b77927a207b848 -Block 0005 [ 67]: 5dbc721e332e2bc4 -Block 0005 [ 68]: 2316410cbb3610b1 -Block 0005 [ 69]: 673181681ae22a67 -Block 0005 [ 70]: 8067fe815c96c23f -Block 0005 [ 71]: 80cc56dfebe3ddda -Block 0005 [ 72]: 14609d5fa6ce23c1 -Block 0005 [ 73]: 73cbea41966a7142 -Block 0005 [ 74]: 119ab1b5f53ba3ca -Block 0005 [ 75]: 9a6852050ece2e4a -Block 0005 [ 76]: bc3654b7fa5b0c6b -Block 0005 [ 77]: 4c69d15d64efcb85 -Block 0005 [ 78]: 5b09d250e32e8259 -Block 0005 [ 79]: c3e9baf9b11b3152 -Block 0005 [ 80]: 53e0b2ec68d041b4 -Block 0005 [ 81]: 0b98b646fc0fce16 -Block 0005 [ 82]: d25838c84d8cce12 -Block 0005 [ 83]: 1f7939000f470cb9 -Block 0005 [ 84]: ac4aacacba06092f -Block 0005 [ 85]: acfadfca8de0ff05 -Block 0005 [ 86]: bf09f53231d87750 -Block 0005 [ 87]: 79d905956e0f3889 -Block 0005 [ 88]: e14f247f4d5e216a -Block 0005 [ 89]: 212d91fda8e22bbb -Block 0005 [ 90]: 0e4c4aa22d20b934 -Block 0005 [ 91]: d0e46af19abc1ad2 -Block 0005 [ 92]: 2c7ea87d03e3d09b -Block 0005 [ 93]: 7164b75cc1953042 -Block 0005 [ 94]: 7b659a27384d82fb -Block 0005 [ 95]: 8bc42d8b31cebe7f -Block 0005 [ 96]: 7b06a683d868bc51 -Block 0005 [ 97]: 319e2ea63d699167 -Block 0005 [ 98]: 1ab697198262eb44 -Block 0005 [ 99]: 5b49959d8f4ca9c8 -Block 0005 [100]: 4f35c23e17f05819 -Block 0005 [101]: 26d5aaa4f087ae8f -Block 0005 [102]: b78fea4d6f1d7732 -Block 0005 [103]: 3f3e6f841d48add2 -Block 0005 [104]: ef24bee225179b89 -Block 0005 [105]: bed586e853daf5c7 -Block 0005 [106]: bc26d99c49cf9a6c -Block 0005 [107]: d909da65d4c11556 -Block 0005 [108]: ed12711f224cef83 -Block 0005 [109]: 2b9607d0e5e900a7 -Block 0005 [110]: fc43b421ce701587 -Block 0005 [111]: af7ac9f1a69d5e02 -Block 0005 [112]: d0fdb554f3165990 -Block 0005 [113]: 91aaac41e7f9ea3a -Block 0005 [114]: d217a6555996c34c -Block 0005 [115]: 54b2726ee172aaf7 -Block 0005 [116]: bc60721ff605e001 -Block 0005 [117]: 2a5c053049c31e68 -Block 0005 [118]: eb66aa545b46853b -Block 0005 [119]: da32c94d6ac845df -Block 0005 [120]: d3c36a7387623c03 -Block 0005 [121]: a5e37961367e911a -Block 0005 [122]: ed0223c8f80f0f62 -Block 0005 [123]: c9577e0c09c50399 -Block 0005 [124]: 0042484883108146 -Block 0005 [125]: 490c07c2c85c00d8 -Block 0005 [126]: cff6918e0df215d4 -Block 0005 [127]: 5e5dca04d2dd1563 -Block 0006 [ 0]: 06e575606df88e3b -Block 0006 [ 1]: 71a7464b72fd64a7 -Block 0006 [ 2]: 468923168d541632 -Block 0006 [ 3]: f3583b7ff4adbe56 -Block 0006 [ 4]: e87b42b4b254cde7 -Block 0006 [ 5]: 3548c94a108f6c4c -Block 0006 [ 6]: a56ac305d8f4bc99 -Block 0006 [ 7]: 8378293152189352 -Block 0006 [ 8]: c1dbba854c7c7f6e -Block 0006 [ 9]: 5d9fb7867d240ed6 -Block 0006 [ 10]: fdbd8b16b16c7494 -Block 0006 [ 11]: 7ad763ffba6200e8 -Block 0006 [ 12]: 77c8ebde2abb1d53 -Block 0006 [ 13]: ceabcc21195a1c4b -Block 0006 [ 14]: 20736ee04af8ae96 -Block 0006 [ 15]: 6161d5f1a7b82e44 -Block 0006 [ 16]: 7e35690bb164e16e -Block 0006 [ 17]: d0de4831d5825765 -Block 0006 [ 18]: f4b613fe1dad1e3c -Block 0006 [ 19]: e26741b0625f688b -Block 0006 [ 20]: b0d4b503e2229c7c -Block 0006 [ 21]: 819ff61fd8c3546a -Block 0006 [ 22]: e2252c69b5c0e012 -Block 0006 [ 23]: e6ac62b49e6aba20 -Block 0006 [ 24]: 5793fcaf58202c2a -Block 0006 [ 25]: b06a3c14e96ed572 -Block 0006 [ 26]: 036e41058b08b42c -Block 0006 [ 27]: 14989720933e50ad -Block 0006 [ 28]: 44ad4d4c252d6d1f -Block 0006 [ 29]: d3e00c49991c01b0 -Block 0006 [ 30]: 2615381daaed34ff -Block 0006 [ 31]: 0d645551e1597e3c -Block 0006 [ 32]: 2b11ec26203fd73b -Block 0006 [ 33]: 0e766f7080fe92d6 -Block 0006 [ 34]: 47b2ba5db10cfc3a -Block 0006 [ 35]: 6ad29e44a0f3be62 -Block 0006 [ 36]: da842a34d581ad7f -Block 0006 [ 37]: fb3c375543afd6a8 -Block 0006 [ 38]: ed9de9c706c068a6 -Block 0006 [ 39]: 1fb7693b385233b7 -Block 0006 [ 40]: 49eda29d7136fc7d -Block 0006 [ 41]: ab6e18616433333a -Block 0006 [ 42]: 72df17bf0a5580c7 -Block 0006 [ 43]: 0082bba3466cd5ea -Block 0006 [ 44]: e9a4c1e542244a87 -Block 0006 [ 45]: c2d9cf7758b923e3 -Block 0006 [ 46]: bee180f733988dbf -Block 0006 [ 47]: 59a2da4ab34ee654 -Block 0006 [ 48]: cc56314eb2fa23e6 -Block 0006 [ 49]: 0f087137ac0a1c7a -Block 0006 [ 50]: 8067c1e34852b917 -Block 0006 [ 51]: 90a8915d42ae5075 -Block 0006 [ 52]: d5a11fa31dcd190a -Block 0006 [ 53]: 441518b90ef57a2b -Block 0006 [ 54]: 5b9fa34fb393336d -Block 0006 [ 55]: 6cd5798454fa4a12 -Block 0006 [ 56]: e9e5be8a0a850ca8 -Block 0006 [ 57]: 9e557468d5e3f9a6 -Block 0006 [ 58]: 3be40b13014c63af -Block 0006 [ 59]: e5db3589ece2fa5d -Block 0006 [ 60]: a7db7905add3ccbc -Block 0006 [ 61]: fdb1a2121e3ee9b9 -Block 0006 [ 62]: 87b16d82fd2baf1e -Block 0006 [ 63]: 596798be5427ad24 -Block 0006 [ 64]: bbc45faa52e1c3b5 -Block 0006 [ 65]: e0c382fd816cedee -Block 0006 [ 66]: 278a382948535926 -Block 0006 [ 67]: e796002cdda2daf4 -Block 0006 [ 68]: 8927e6a03f549fca -Block 0006 [ 69]: 31b3180c654b4ddb -Block 0006 [ 70]: 18dce7f5bbf32bfa -Block 0006 [ 71]: ae6b15ff97e0c1d4 -Block 0006 [ 72]: 9c22613ba008bc2c -Block 0006 [ 73]: 39ecb7c2397ca17d -Block 0006 [ 74]: fbbed8367164594a -Block 0006 [ 75]: d7cb5457059e32d5 -Block 0006 [ 76]: b06eac3578f74d1c -Block 0006 [ 77]: 882fdacd5035687f -Block 0006 [ 78]: 595c5747ab50a560 -Block 0006 [ 79]: 9000f76a4aa7e370 -Block 0006 [ 80]: ca6b97e8b24d933c -Block 0006 [ 81]: b1c524d71db5ecb1 -Block 0006 [ 82]: 63f4933374b5e5e2 -Block 0006 [ 83]: 84a48cc12b57dc0d -Block 0006 [ 84]: 785a2a1c88a63522 -Block 0006 [ 85]: f86705d1a24f35ca -Block 0006 [ 86]: f6e7ca822fa200cf -Block 0006 [ 87]: ca207bf6bdee4a69 -Block 0006 [ 88]: d701d641fd420f68 -Block 0006 [ 89]: 1c4f598bff32340f -Block 0006 [ 90]: 3bbb6d14037f8e85 -Block 0006 [ 91]: 0ac8f692c37dbdf1 -Block 0006 [ 92]: e17256aaa2c6417b -Block 0006 [ 93]: 130aabc282078fe6 -Block 0006 [ 94]: 72c4cb749d0eec25 -Block 0006 [ 95]: ffe89caac8c5946d -Block 0006 [ 96]: 2f2d8c60afaf2c94 -Block 0006 [ 97]: 7db481c19f5fb1ba -Block 0006 [ 98]: 0508153944853486 -Block 0006 [ 99]: 37a9635cb7261716 -Block 0006 [100]: f60fdd2341537e3b -Block 0006 [101]: abe87965feb6c714 -Block 0006 [102]: 0f2cb41fe88f9686 -Block 0006 [103]: 5f7d5faa3191545c -Block 0006 [104]: 9870bcbd2c7d0fbf -Block 0006 [105]: 1980d28854804501 -Block 0006 [106]: 882c0e69b0d1cab3 -Block 0006 [107]: 181723d7663999d9 -Block 0006 [108]: ac3af38a6b5919b2 -Block 0006 [109]: f3c7b5014ca21a1d -Block 0006 [110]: 82d98fc9d3c26c7b -Block 0006 [111]: cd63896a773ee2f2 -Block 0006 [112]: 8ca6b1bc8e639c17 -Block 0006 [113]: dc643e71fa5ba0d4 -Block 0006 [114]: 826997cd621ce6c6 -Block 0006 [115]: 60d2ab15f86ccda7 -Block 0006 [116]: 736900641a1df82f -Block 0006 [117]: 74b7a10a22330c0f -Block 0006 [118]: 21faa45375e80c38 -Block 0006 [119]: 4b8c2f8bbb148222 -Block 0006 [120]: 586d669cc9dc46aa -Block 0006 [121]: 582cc814f6edde20 -Block 0006 [122]: a6171da287a072ee -Block 0006 [123]: 9dfafee0098dc6ba -Block 0006 [124]: 280efcd252cb68a8 -Block 0006 [125]: fb26ef59ef4d8505 -Block 0006 [126]: 1d5e477cb30e513c -Block 0006 [127]: 87dc7ecab98fe69c -Block 0007 [ 0]: 272d06fade6d331a -Block 0007 [ 1]: c625b4d1a098ff17 -Block 0007 [ 2]: b9a65a7b82e0c9c9 -Block 0007 [ 3]: a7301af123895781 -Block 0007 [ 4]: 05cc626884232f6b -Block 0007 [ 5]: cc1cb1d4830da55d -Block 0007 [ 6]: 7ad27fd0ebbbc641 -Block 0007 [ 7]: 1bdabd0730624045 -Block 0007 [ 8]: 8a796cb38f76bef5 -Block 0007 [ 9]: 955a31ecd6a3e9f3 -Block 0007 [ 10]: 8e614cbf6c83ed5b -Block 0007 [ 11]: 7cfee51609058b60 -Block 0007 [ 12]: c1a76d5bbfd35b39 -Block 0007 [ 13]: 12661d52aed610ed -Block 0007 [ 14]: 19ddb4706a02b6c4 -Block 0007 [ 15]: 512029583ae902a2 -Block 0007 [ 16]: 2a22ec2229b71abe -Block 0007 [ 17]: f35d343177e1a239 -Block 0007 [ 18]: a4b78e999c59f71d -Block 0007 [ 19]: 00121cf1bded93ee -Block 0007 [ 20]: 7f492bad6a0792ed -Block 0007 [ 21]: 5b2224cd6fbc8b30 -Block 0007 [ 22]: dc3b63b33575ed25 -Block 0007 [ 23]: af84aa371c386c6b -Block 0007 [ 24]: 174995fa235d8e0c -Block 0007 [ 25]: b1c7d3904bf63ed2 -Block 0007 [ 26]: a43938085a786223 -Block 0007 [ 27]: 6928a779ebd0acbe -Block 0007 [ 28]: 00649d7e17e68bf0 -Block 0007 [ 29]: 7ff8c78339c135e3 -Block 0007 [ 30]: d2cc3195e2f4a6fa -Block 0007 [ 31]: 87d7db26ff9c4839 -Block 0007 [ 32]: 170ff45d245abc95 -Block 0007 [ 33]: ca0de5afa7bc179b -Block 0007 [ 34]: 47f87e00ca4a5bd7 -Block 0007 [ 35]: 42c9e956ce7b830d -Block 0007 [ 36]: e2d68ca2fe26cbae -Block 0007 [ 37]: 31facbd28e4ff423 -Block 0007 [ 38]: 816dee4fde572108 -Block 0007 [ 39]: 24aabace105ecf93 -Block 0007 [ 40]: beac4f8a0eca1d5f -Block 0007 [ 41]: 228c9957808ed0e5 -Block 0007 [ 42]: 31ab6b20240ceb32 -Block 0007 [ 43]: 3079d7aa4522c927 -Block 0007 [ 44]: d9437ac020401bf7 -Block 0007 [ 45]: 2dbf3ec6847975f0 -Block 0007 [ 46]: 1c677f6d76964cc5 -Block 0007 [ 47]: 56e9aecea3bc1b26 -Block 0007 [ 48]: 2837465c37fb812d -Block 0007 [ 49]: 0c306513f38f378d -Block 0007 [ 50]: 0c37fd80799a554f -Block 0007 [ 51]: 7b39bbcd780ce2b7 -Block 0007 [ 52]: 37607a623990fa10 -Block 0007 [ 53]: 439b6ae755ff0868 -Block 0007 [ 54]: 352644a9cc59b330 -Block 0007 [ 55]: f2533ac8d81ba695 -Block 0007 [ 56]: b56c25657ac775cd -Block 0007 [ 57]: 69bcc975eb9cfda8 -Block 0007 [ 58]: e965849c9c4ecf32 -Block 0007 [ 59]: e1e5e54302307fca -Block 0007 [ 60]: 2ff11a374a3f367c -Block 0007 [ 61]: ef3347a4e2a55d88 -Block 0007 [ 62]: d4c092ae6aa73d35 -Block 0007 [ 63]: cd90b21e590d3b7f -Block 0007 [ 64]: 7f47d6288f261862 -Block 0007 [ 65]: e595765a549a7456 -Block 0007 [ 66]: 9b46d372f817fad0 -Block 0007 [ 67]: 0ef73e99671ced02 -Block 0007 [ 68]: 068c1456cffd15f2 -Block 0007 [ 69]: 0450108481b2aec3 -Block 0007 [ 70]: 9a51541fca67cef7 -Block 0007 [ 71]: 344a07ee5c0a9781 -Block 0007 [ 72]: b8e2b12cb684e206 -Block 0007 [ 73]: 73aa863c2cec0580 -Block 0007 [ 74]: 56fba126410a6204 -Block 0007 [ 75]: 803deaed4fcf5750 -Block 0007 [ 76]: 02bcfae2d70280fb -Block 0007 [ 77]: b8ab8a5874e27d6f -Block 0007 [ 78]: d74bc0568607a2f1 -Block 0007 [ 79]: 8dfc1a8581f4797d -Block 0007 [ 80]: 7d5e362d1f502015 -Block 0007 [ 81]: fd494de723c9e751 -Block 0007 [ 82]: c1205d413f2fce7b -Block 0007 [ 83]: eee662d69c3a0011 -Block 0007 [ 84]: 9b902b3931050f40 -Block 0007 [ 85]: bd830f0036694cd4 -Block 0007 [ 86]: e9420bf5b18f8b4f -Block 0007 [ 87]: aa0f2c68410ae330 -Block 0007 [ 88]: 47d4132eb7dade03 -Block 0007 [ 89]: 0c05c6af851968e5 -Block 0007 [ 90]: c5b535d388a53d78 -Block 0007 [ 91]: ac97ce6b41d6c7d5 -Block 0007 [ 92]: 112052d13f30e8c1 -Block 0007 [ 93]: cc560af42f595097 -Block 0007 [ 94]: ad7abf51469c4f83 -Block 0007 [ 95]: 5dd9175d9fff36f6 -Block 0007 [ 96]: 14ab61988879261d -Block 0007 [ 97]: 4726e1f0236e01ad -Block 0007 [ 98]: 7309705c333c73b6 -Block 0007 [ 99]: 4ba518ea29172f7f -Block 0007 [100]: ecdff9f4dc349e2c -Block 0007 [101]: 2e0b9def72ef1912 -Block 0007 [102]: 78a468fc70c7075c -Block 0007 [103]: d705b64d14bfbd7c -Block 0007 [104]: 67a2b7162aee3bd3 -Block 0007 [105]: 5978e84637288123 -Block 0007 [106]: 5153bcaf415ee20f -Block 0007 [107]: e3a999e7921a7722 -Block 0007 [108]: 1defb1f37bb6df78 -Block 0007 [109]: 4396889ae5329428 -Block 0007 [110]: 1f5304f6d3f4c5eb -Block 0007 [111]: 7ad70f5d1b72c11b -Block 0007 [112]: 2a497b553a83863d -Block 0007 [113]: afaa70491f8139a8 -Block 0007 [114]: b41152f3eea230d9 -Block 0007 [115]: 27b29c968c0e02eb -Block 0007 [116]: 380544bbc10304c2 -Block 0007 [117]: f32188d2a43f24de -Block 0007 [118]: 6e2b22fb4ed9b3d8 -Block 0007 [119]: 927e2d31cbfdfb51 -Block 0007 [120]: 15be340149804f89 -Block 0007 [121]: fe8e654001ec9dc3 -Block 0007 [122]: 0952688acce880d9 -Block 0007 [123]: bfd9caca8b3c2ed7 -Block 0007 [124]: 57489b9341cc60b9 -Block 0007 [125]: 5c290f757cb97be6 -Block 0007 [126]: dea6a955364f7879 -Block 0007 [127]: 2734980c24943229 -Block 0008 [ 0]: dc6b6d1adf13ba10 -Block 0008 [ 1]: b91d17ea5fd061fa -Block 0008 [ 2]: aeb5e95e05f28465 -Block 0008 [ 3]: aae5d4364c1ac7e2 -Block 0008 [ 4]: 531c8c4860b55657 -Block 0008 [ 5]: 546f378ddacf7d44 -Block 0008 [ 6]: 1fbdab2cab565be2 -Block 0008 [ 7]: 3907d1b6b09a1762 -Block 0008 [ 8]: 2eeef614ecbd720d -Block 0008 [ 9]: 46e5e7efd4525bd9 -Block 0008 [ 10]: f4d0acbf1bed6c87 -Block 0008 [ 11]: 83cc80d830e03068 -Block 0008 [ 12]: bb67c441b80c8604 -Block 0008 [ 13]: 9dcc40be341714ac -Block 0008 [ 14]: 18abaf3eb1a7890c -Block 0008 [ 15]: 1990d7f3ac301693 -Block 0008 [ 16]: d0e8b3bdfeec80fd -Block 0008 [ 17]: d88b6939c62d2b0d -Block 0008 [ 18]: 917249fcba34089f -Block 0008 [ 19]: f970f8b97f892d13 -Block 0008 [ 20]: 5d3cf4f4665e8025 -Block 0008 [ 21]: 7fbc8fc1719a00e0 -Block 0008 [ 22]: 3b94c22e3e2725b5 -Block 0008 [ 23]: d4ce1e6309916de6 -Block 0008 [ 24]: 87fbacd4e43dd068 -Block 0008 [ 25]: 200cff600856dafe -Block 0008 [ 26]: 23ba6b39c79cb5ef -Block 0008 [ 27]: b1f46be594d43c95 -Block 0008 [ 28]: ff35e0beed2ea235 -Block 0008 [ 29]: bef54f0cad51bdf4 -Block 0008 [ 30]: d06e6a34d97cd464 -Block 0008 [ 31]: 85e39b5b21902dca -Block 0008 [ 32]: 6bc1d2871274396e -Block 0008 [ 33]: d7d23981830ab34f -Block 0008 [ 34]: fb7fefb74c559aed -Block 0008 [ 35]: 06e363f9a51f4783 -Block 0008 [ 36]: 3115e623e62aaa41 -Block 0008 [ 37]: 72e98c5a2f6ce676 -Block 0008 [ 38]: 9215b69396270668 -Block 0008 [ 39]: e0844ff4b74ba824 -Block 0008 [ 40]: 29954c50a989f002 -Block 0008 [ 41]: 82eb6370e89c3eb1 -Block 0008 [ 42]: 62ce9194a114645f -Block 0008 [ 43]: d7af7eef56703e93 -Block 0008 [ 44]: fcebd0463c2bbcff -Block 0008 [ 45]: 3f9ec1849914b05c -Block 0008 [ 46]: 6c9970e2a5698e8b -Block 0008 [ 47]: 9862a324eb161be6 -Block 0008 [ 48]: 32334ea7036383a4 -Block 0008 [ 49]: 7e64ecf8ad38de47 -Block 0008 [ 50]: ccf52cfd8dd5208f -Block 0008 [ 51]: 7058c1e23eca4bd2 -Block 0008 [ 52]: ad66da4882be2b72 -Block 0008 [ 53]: 6f95725de653f188 -Block 0008 [ 54]: 659e89de1828405e -Block 0008 [ 55]: 451d65f554be4ee6 -Block 0008 [ 56]: 84d337c6f49641df -Block 0008 [ 57]: a869207e69d5299f -Block 0008 [ 58]: 0078bd60849acc64 -Block 0008 [ 59]: 606f256c808ffbd0 -Block 0008 [ 60]: e96aed2a2b6073a6 -Block 0008 [ 61]: d2dc35007b056e00 -Block 0008 [ 62]: e1af5e8c6239ca8a -Block 0008 [ 63]: c13c556f4eb60ff2 -Block 0008 [ 64]: 0d383da1a0b22a3c -Block 0008 [ 65]: 85ae949a305ef696 -Block 0008 [ 66]: f59d0e46d51c54c5 -Block 0008 [ 67]: 0c7301c96a56b539 -Block 0008 [ 68]: 65dd44ab0979d798 -Block 0008 [ 69]: 61cfa43ce06ded75 -Block 0008 [ 70]: d1099cc2ce7dc5d0 -Block 0008 [ 71]: 4b51cbcc97c72879 -Block 0008 [ 72]: c4c96ed0aeb5be58 -Block 0008 [ 73]: cd4d3ad40727e0df -Block 0008 [ 74]: 9ac84675bd4eb1fa -Block 0008 [ 75]: 3873937250526178 -Block 0008 [ 76]: c695538e394b84f3 -Block 0008 [ 77]: e26ad59a4b45df18 -Block 0008 [ 78]: 3ccf1fc37ae30577 -Block 0008 [ 79]: 1da81eaf501a98bf -Block 0008 [ 80]: f5bde1fdb6c61688 -Block 0008 [ 81]: 48a236a088e9bc96 -Block 0008 [ 82]: 2e54ed7d3b0505bc -Block 0008 [ 83]: f756483978ec1b71 -Block 0008 [ 84]: 949c4fe87b7d67a9 -Block 0008 [ 85]: b788279c6674c956 -Block 0008 [ 86]: b96bfdc0c59a7cc3 -Block 0008 [ 87]: 37152d7aac6f5aad -Block 0008 [ 88]: 17128b43250a0624 -Block 0008 [ 89]: caaefd58274022e6 -Block 0008 [ 90]: 3e6af46acda01234 -Block 0008 [ 91]: 43091b598aecff38 -Block 0008 [ 92]: 1070375d7d2c8988 -Block 0008 [ 93]: 54ca7be036dc1816 -Block 0008 [ 94]: b631d974db91a390 -Block 0008 [ 95]: efc15bb9abc2cfad -Block 0008 [ 96]: 2b1c41ece54418ab -Block 0008 [ 97]: d7882b30049b13d5 -Block 0008 [ 98]: 4dc546209f942114 -Block 0008 [ 99]: 4da30a306bb48db6 -Block 0008 [100]: 3e78eacda997f0a3 -Block 0008 [101]: 42f92bc6bf89e191 -Block 0008 [102]: aef3a035402b18a9 -Block 0008 [103]: 7418b3827a08136b -Block 0008 [104]: 82f2bd22342aadd9 -Block 0008 [105]: 928bb61702b4cc95 -Block 0008 [106]: 779a5cae529e6d13 -Block 0008 [107]: e14bf3cdeefeb3fa -Block 0008 [108]: 34075120b790f68b -Block 0008 [109]: 2aa17b3a36b46677 -Block 0008 [110]: e96b0ffccb42f8d1 -Block 0008 [111]: c895ba8dd04aa4b7 -Block 0008 [112]: 26ffd120da78eb7e -Block 0008 [113]: aa2421483a0f6984 -Block 0008 [114]: aead9757c1108bc6 -Block 0008 [115]: 59a09752c2e4954b -Block 0008 [116]: 1275c2fb3e2f7d66 -Block 0008 [117]: 24f14bf43c8b3438 -Block 0008 [118]: 898abe2e8e0e1065 -Block 0008 [119]: 7c7c5df695255005 -Block 0008 [120]: 6801c208f9ac6f4f -Block 0008 [121]: 7df45962a612c76e -Block 0008 [122]: 2756812f921cb052 -Block 0008 [123]: 06a5fb01f2ba4e28 -Block 0008 [124]: 72617963057f1c4c -Block 0008 [125]: 3470685b81ac58a0 -Block 0008 [126]: 783c1a85437acb5c -Block 0008 [127]: 3bd80ab09cfb1139 -Block 0009 [ 0]: c87e47b1c3772012 -Block 0009 [ 1]: 53ef67895ef0ba16 -Block 0009 [ 2]: 51e4861563608c9d -Block 0009 [ 3]: 3cfcbc281c9ebdd6 -Block 0009 [ 4]: feaf7c32fee96066 -Block 0009 [ 5]: 1127f68fe2e0ef2b -Block 0009 [ 6]: d2b9348e169c5429 -Block 0009 [ 7]: 01def6b91eb75bad -Block 0009 [ 8]: f868acc084b74873 -Block 0009 [ 9]: b73c0d66f77e6e65 -Block 0009 [ 10]: 5dcf631cc3261744 -Block 0009 [ 11]: 5c063f0e7dc4ddc9 -Block 0009 [ 12]: d88ec186ab575517 -Block 0009 [ 13]: b49d4fd9265055fa -Block 0009 [ 14]: af9c253d9ec60147 -Block 0009 [ 15]: c133040684f7f94b -Block 0009 [ 16]: 7c9fd7f6bba1b216 -Block 0009 [ 17]: d9c687ce5c476a65 -Block 0009 [ 18]: 0005a29d070297c7 -Block 0009 [ 19]: dc897d2c175e3c02 -Block 0009 [ 20]: e942dfe4ccf40d40 -Block 0009 [ 21]: 6caa0532e5669a76 -Block 0009 [ 22]: 5baf9399bd1e8f8a -Block 0009 [ 23]: b3deb6ab6a5a1d4b -Block 0009 [ 24]: 3d454ed17ed9d6d4 -Block 0009 [ 25]: 4bbb1c5031ba97f1 -Block 0009 [ 26]: c2f1c71e39dad8ce -Block 0009 [ 27]: 6691d661c29e7010 -Block 0009 [ 28]: 6759aa49c1fc9154 -Block 0009 [ 29]: c9cc86dc186f4518 -Block 0009 [ 30]: b746e661d8353a8e -Block 0009 [ 31]: d238bafb93f0025a -Block 0009 [ 32]: 41e346bfb0d34e5b -Block 0009 [ 33]: eafafc3b447bccb4 -Block 0009 [ 34]: ceb113c031914223 -Block 0009 [ 35]: caf4e78e1cd53f5f -Block 0009 [ 36]: 78351504f8a33c16 -Block 0009 [ 37]: 7575acf932b356c8 -Block 0009 [ 38]: c09617cd3a1a1627 -Block 0009 [ 39]: cb07cf989cc4caf2 -Block 0009 [ 40]: 8cc189366d9b26f5 -Block 0009 [ 41]: 449beb3368a3877e -Block 0009 [ 42]: e8f5818a7858db70 -Block 0009 [ 43]: c793ebf3d301198f -Block 0009 [ 44]: 3aa508c80633437f -Block 0009 [ 45]: d3b867a3cbaf08f6 -Block 0009 [ 46]: fbde37db7e33e4fc -Block 0009 [ 47]: dc548c7f368e6497 -Block 0009 [ 48]: 4c1c0211c7516b79 -Block 0009 [ 49]: 75dbc72a82d41883 -Block 0009 [ 50]: 530487899a550ada -Block 0009 [ 51]: 27e20eb8330d18d7 -Block 0009 [ 52]: f5b0ea85baf15669 -Block 0009 [ 53]: ac9c2708dbe29cec -Block 0009 [ 54]: 102df235d45e0fe8 -Block 0009 [ 55]: 1ec27724b22275b8 -Block 0009 [ 56]: 7ff048771596e3d6 -Block 0009 [ 57]: 401be2cc8914cbb7 -Block 0009 [ 58]: 127969310e85020f -Block 0009 [ 59]: 668aa409ee1e22ab -Block 0009 [ 60]: 4ea69cd6b1727439 -Block 0009 [ 61]: 3da31ac5eefe1d0a -Block 0009 [ 62]: 7eeadbaf86a9e3fb -Block 0009 [ 63]: 7fd960e6520c2179 -Block 0009 [ 64]: 1e778bfc99b12598 -Block 0009 [ 65]: 737729bf678749fd -Block 0009 [ 66]: 25e9e1f65be274b9 -Block 0009 [ 67]: 1190348847839e7c -Block 0009 [ 68]: da6903502fbb1d6a -Block 0009 [ 69]: 8febd989e10caf6e -Block 0009 [ 70]: 5bec284c097f0f56 -Block 0009 [ 71]: 0ad7e582f0f3ca14 -Block 0009 [ 72]: ac3d0111de95633c -Block 0009 [ 73]: b03374b9fdf0165f -Block 0009 [ 74]: df6408de8b5d06e9 -Block 0009 [ 75]: 6545ea0295ffd8e2 -Block 0009 [ 76]: e7a37676dfb5330c -Block 0009 [ 77]: e97777e4dab1e386 -Block 0009 [ 78]: 23aad2be96ef0dbe -Block 0009 [ 79]: 67a3c60819619ed2 -Block 0009 [ 80]: cc5bf52ea2cb1323 -Block 0009 [ 81]: 3d1e3e79c7dcd249 -Block 0009 [ 82]: bd78f50ff24a14c1 -Block 0009 [ 83]: 24ebc5de9a24b1f1 -Block 0009 [ 84]: 35d2ad9a11fd08e7 -Block 0009 [ 85]: d5d586e87776af28 -Block 0009 [ 86]: 0a29e47fcd7bb004 -Block 0009 [ 87]: 5be280ff4eae5d10 -Block 0009 [ 88]: e9efc91da33b4f70 -Block 0009 [ 89]: 98ddf317551d1e13 -Block 0009 [ 90]: 9ed9fb074b0a2315 -Block 0009 [ 91]: 385474dcc69460b0 -Block 0009 [ 92]: edf4b8f53ee65fa3 -Block 0009 [ 93]: e55a8ee53447e358 -Block 0009 [ 94]: e5d77c0d5d0d447a -Block 0009 [ 95]: 9b8d0f0579b33fe2 -Block 0009 [ 96]: c38407b72241aa34 -Block 0009 [ 97]: ee6b13f12b3d99ef -Block 0009 [ 98]: 8dc888f6831b572e -Block 0009 [ 99]: decf4825f7a4524c -Block 0009 [100]: a3e3b8af2b57dd62 -Block 0009 [101]: 6acc58b90c361016 -Block 0009 [102]: 40a0794b70468084 -Block 0009 [103]: 2e8a1bf968e971f6 -Block 0009 [104]: 1572b5471c1e0893 -Block 0009 [105]: 741bc6497a2dc4a8 -Block 0009 [106]: 8846d56dae324d63 -Block 0009 [107]: 4864229bbb77532b -Block 0009 [108]: c5f6478ebca01d36 -Block 0009 [109]: 3c8d06e4e9ae61ae -Block 0009 [110]: 8b84b6a6ec874319 -Block 0009 [111]: b73a861c04f8d0ba -Block 0009 [112]: 21bf2816040b2d99 -Block 0009 [113]: e5e3954579481c8e -Block 0009 [114]: 6df21d01fc4ec2c0 -Block 0009 [115]: d85fe0be3c317775 -Block 0009 [116]: 6785100343e96142 -Block 0009 [117]: 60c1585dd04ec099 -Block 0009 [118]: 9035b1e5912bb6ad -Block 0009 [119]: 6447bc2528ad95d3 -Block 0009 [120]: f5f4a497dea40726 -Block 0009 [121]: df1c9adc1dd0354c -Block 0009 [122]: e30cee24d3114e16 -Block 0009 [123]: 3c16415b0b3e36d2 -Block 0009 [124]: ddc2d3d67ba5aa90 -Block 0009 [125]: 4e8b75fd86fc44aa -Block 0009 [126]: 43c133389abe42fa -Block 0009 [127]: 1f0163071d1c2fd1 -Block 0010 [ 0]: befa5b8772684bf6 -Block 0010 [ 1]: 085c709ecbb1163e -Block 0010 [ 2]: c9952c634b7d47f7 -Block 0010 [ 3]: a9f2b1b34abb7255 -Block 0010 [ 4]: be1e81439a7a7527 -Block 0010 [ 5]: c759115839e61b79 -Block 0010 [ 6]: 90cdc1d1dde970eb -Block 0010 [ 7]: 4280a622460f8f81 -Block 0010 [ 8]: 95fa2520e5ea2640 -Block 0010 [ 9]: 3ef882089894d918 -Block 0010 [ 10]: 0707aea599fcd04d -Block 0010 [ 11]: 263da9476e267dab -Block 0010 [ 12]: 0243d341cce26088 -Block 0010 [ 13]: a0baddf8da89da95 -Block 0010 [ 14]: 15a0b306f9705ef5 -Block 0010 [ 15]: 3ca3647aafd77025 -Block 0010 [ 16]: fee96d8bf3dd1a25 -Block 0010 [ 17]: cf2c6b7a5ece296a -Block 0010 [ 18]: 1607217149c09a31 -Block 0010 [ 19]: 7e01c277d0ef54c4 -Block 0010 [ 20]: 207f8b6971f3ae28 -Block 0010 [ 21]: 3dbb5683d75695e0 -Block 0010 [ 22]: a368fd19c839e578 -Block 0010 [ 23]: e60a3067d5d5693b -Block 0010 [ 24]: 405be0c196638dc5 -Block 0010 [ 25]: dd6b58f4cbb38216 -Block 0010 [ 26]: 67f9d42959a2f41d -Block 0010 [ 27]: 740cb740b3e2dfbc -Block 0010 [ 28]: e34b6c6d0a49657f -Block 0010 [ 29]: 685d381724c365a6 -Block 0010 [ 30]: b5d7fd05fa5304dd -Block 0010 [ 31]: 291426b0884ca7c0 -Block 0010 [ 32]: fc26d49c0b7307f6 -Block 0010 [ 33]: 1ce47f53948cba58 -Block 0010 [ 34]: c7873387db218bad -Block 0010 [ 35]: ef0e4ec79d349a29 -Block 0010 [ 36]: 7f42c4685301d3e1 -Block 0010 [ 37]: 646965e52f86b620 -Block 0010 [ 38]: 3b24fae553a213fa -Block 0010 [ 39]: b58c7bf6b48d4969 -Block 0010 [ 40]: df53292c9ffd2d03 -Block 0010 [ 41]: fcb36b01a3a98243 -Block 0010 [ 42]: 7e53d4ce327d8cb4 -Block 0010 [ 43]: 135711f8b9c07b15 -Block 0010 [ 44]: d78adac7fcaaf2f4 -Block 0010 [ 45]: f607b6b937105259 -Block 0010 [ 46]: bb3dc4c6e46379ca -Block 0010 [ 47]: eefaac476ee9ab7c -Block 0010 [ 48]: 468f2a5b91ee25f4 -Block 0010 [ 49]: fe6835bf15208fd4 -Block 0010 [ 50]: 8affa55b80d80c40 -Block 0010 [ 51]: 8fffb69a0a6bc68c -Block 0010 [ 52]: 891fc625a7a996f2 -Block 0010 [ 53]: 0d0685282c901497 -Block 0010 [ 54]: 2b954fbc63f376ae -Block 0010 [ 55]: 0bf1c04c7b66a429 -Block 0010 [ 56]: 57cfab3494e5a87b -Block 0010 [ 57]: 9c7cba71413b4420 -Block 0010 [ 58]: b6067ace22788323 -Block 0010 [ 59]: 88cc4cadb0ef6327 -Block 0010 [ 60]: 335e981c1139ea8c -Block 0010 [ 61]: 1891fde6348d4fc8 -Block 0010 [ 62]: b381eed13dc2b78d -Block 0010 [ 63]: f2a7eec805d51aae -Block 0010 [ 64]: cc135639e5e00188 -Block 0010 [ 65]: a69d976a329936b6 -Block 0010 [ 66]: 711efe69efaf4466 -Block 0010 [ 67]: 77457b10caf144d4 -Block 0010 [ 68]: 8aa80f5b398b0ba1 -Block 0010 [ 69]: 0462168a20ff98fd -Block 0010 [ 70]: 289476e527ad0471 -Block 0010 [ 71]: 0d16c9f256fd3fcf -Block 0010 [ 72]: 217f514f3cd70a35 -Block 0010 [ 73]: 2614c68433606c51 -Block 0010 [ 74]: 7ab84319913ed734 -Block 0010 [ 75]: dd5f5f5c9aaecbd9 -Block 0010 [ 76]: 702cd4909bdc11c0 -Block 0010 [ 77]: 72a4e082cbc8137b -Block 0010 [ 78]: 653aa0dd3bd208fd -Block 0010 [ 79]: e9f932f6da625eb3 -Block 0010 [ 80]: f509bb018f18cfaf -Block 0010 [ 81]: 99a9e8543ca215f5 -Block 0010 [ 82]: 4708e89ae1b1188e -Block 0010 [ 83]: 51891a2708bc5d49 -Block 0010 [ 84]: dad30d258b95dfeb -Block 0010 [ 85]: 484cb6452492d4b3 -Block 0010 [ 86]: 24e97876b8de8ad5 -Block 0010 [ 87]: 497aed5cc31eabe9 -Block 0010 [ 88]: 534be98534a52cd4 -Block 0010 [ 89]: 0fab7b40d1cc4b6b -Block 0010 [ 90]: 757ae5b5eae855b2 -Block 0010 [ 91]: 41e89502499a68f7 -Block 0010 [ 92]: 692503814db75985 -Block 0010 [ 93]: 880611b34e91bedd -Block 0010 [ 94]: ab7786085ad98a6e -Block 0010 [ 95]: b79e239e6ad63dc1 -Block 0010 [ 96]: 61776e383070a25e -Block 0010 [ 97]: f29cbc2b3acfb0c7 -Block 0010 [ 98]: 996441bfce221ced -Block 0010 [ 99]: 6f5ead13c143577d -Block 0010 [100]: aaaa31be402b27b4 -Block 0010 [101]: bf83e7a5e9ceaa42 -Block 0010 [102]: d7c70f2a03c8aafe -Block 0010 [103]: f208e9600f6eaf8f -Block 0010 [104]: a86e7647599dc845 -Block 0010 [105]: b7bd43ee9c81e4ae -Block 0010 [106]: b1040a7ff84bf978 -Block 0010 [107]: c1da4cab128267ac -Block 0010 [108]: 92663063b6bc8da6 -Block 0010 [109]: bbc3e4dff7e3a55c -Block 0010 [110]: e0064c5f0e09d73c -Block 0010 [111]: 49f643c676dc2772 -Block 0010 [112]: a3be74551a7e1e36 -Block 0010 [113]: abb7fe1b3fe50c56 -Block 0010 [114]: 526f984c4ab11df6 -Block 0010 [115]: b9eb4cf82a7a11de -Block 0010 [116]: aaa8b1c1d2be2069 -Block 0010 [117]: 0e35c1a3e51f6a46 -Block 0010 [118]: 07686089eebde1ab -Block 0010 [119]: 5263d0261569a314 -Block 0010 [120]: 1688ceb9338a4b31 -Block 0010 [121]: 5aaab77de3987dd8 -Block 0010 [122]: b56f428cb894f0a1 -Block 0010 [123]: 3cf7890c2f0ae0f3 -Block 0010 [124]: eccbb53963cfe1da -Block 0010 [125]: bb84140c85b73e58 -Block 0010 [126]: 16473f1cdafe7c7a -Block 0010 [127]: c402ee74ab2ac05c -Block 0011 [ 0]: c653e884a645cdaa -Block 0011 [ 1]: 1a80a4a9129c76af -Block 0011 [ 2]: ad20d6b7a20d3352 -Block 0011 [ 3]: 917837cc2a442b26 -Block 0011 [ 4]: 41d5764a042d0163 -Block 0011 [ 5]: f51dab48664317ff -Block 0011 [ 6]: 3b779caf5b8277da -Block 0011 [ 7]: b8c5828991b426ac -Block 0011 [ 8]: 47ab06236d61a15f -Block 0011 [ 9]: 0a0a476c1d875005 -Block 0011 [ 10]: d72be69d44f4ccb4 -Block 0011 [ 11]: d95a306e7bcc2d96 -Block 0011 [ 12]: 985203c137206ae1 -Block 0011 [ 13]: e07fadc68088ffeb -Block 0011 [ 14]: 1890161f30cc007d -Block 0011 [ 15]: 932d310e7cbc5ca4 -Block 0011 [ 16]: dfd306dea8fc3e87 -Block 0011 [ 17]: 39637a2bdd5dfee7 -Block 0011 [ 18]: 93db7797472ffa83 -Block 0011 [ 19]: 0cfe6f1f456731d8 -Block 0011 [ 20]: fddf2caa3d0cf657 -Block 0011 [ 21]: a49abbc39b10e22c -Block 0011 [ 22]: d0c6c58a83e7e52d -Block 0011 [ 23]: 2e4ef7d71b8465f4 -Block 0011 [ 24]: fe82bc09e95b6cc1 -Block 0011 [ 25]: b627e2fe87f7ad69 -Block 0011 [ 26]: 0fe85e68705aad64 -Block 0011 [ 27]: 6725c0fc669a2949 -Block 0011 [ 28]: 00af03bf439b3e92 -Block 0011 [ 29]: c55fcbcd0874aa11 -Block 0011 [ 30]: a6354e7265de96b0 -Block 0011 [ 31]: 6ab1657e8e5523cc -Block 0011 [ 32]: ffbbb07dda2378d6 -Block 0011 [ 33]: 91cdd7eacf43a1c4 -Block 0011 [ 34]: fda16e5ed4b758f9 -Block 0011 [ 35]: 75b36a93f61d0042 -Block 0011 [ 36]: 80621463273f5094 -Block 0011 [ 37]: 8c749b031564fdef -Block 0011 [ 38]: 1a26abfb041795ca -Block 0011 [ 39]: 92c69cdeb75efde3 -Block 0011 [ 40]: 64362ce5e598c487 -Block 0011 [ 41]: b65bc723e932f76b -Block 0011 [ 42]: f43ebd68f6e9c432 -Block 0011 [ 43]: de5de5c1f36a45ba -Block 0011 [ 44]: 2f8d0d9b95f74e80 -Block 0011 [ 45]: 5469c5dd541fa533 -Block 0011 [ 46]: d03b064b3c284dd5 -Block 0011 [ 47]: e95b01a5b9d29e3f -Block 0011 [ 48]: 622ca8c0ae5d930e -Block 0011 [ 49]: 69448a5aa5ace55f -Block 0011 [ 50]: c989a9e575455ebc -Block 0011 [ 51]: 0476db62a6886efd -Block 0011 [ 52]: a4832dec608aca4f -Block 0011 [ 53]: 86b177320faf452f -Block 0011 [ 54]: fbeafa6566deffcf -Block 0011 [ 55]: a0c875dd077aab2b -Block 0011 [ 56]: 09d79bbadb920be5 -Block 0011 [ 57]: dfa71d47055b1ae1 -Block 0011 [ 58]: 491e72e2c0b45b1b -Block 0011 [ 59]: 9d5d759a04605ff9 -Block 0011 [ 60]: 0995e9f221f5f944 -Block 0011 [ 61]: df4e0b7afd7ead75 -Block 0011 [ 62]: 61141a94ba73a087 -Block 0011 [ 63]: f9d6151cb6988393 -Block 0011 [ 64]: 66f098f5c572ddd2 -Block 0011 [ 65]: 1940bf2f30fa28ad -Block 0011 [ 66]: c0827cf0ddfff6f2 -Block 0011 [ 67]: 73f8fb11d825a338 -Block 0011 [ 68]: 10fe21234998f744 -Block 0011 [ 69]: f8efc010e321247f -Block 0011 [ 70]: 2db04992d9220e61 -Block 0011 [ 71]: d00a64e77a8220c9 -Block 0011 [ 72]: 3d27f291da5fd89c -Block 0011 [ 73]: 1650ea233a65a6d9 -Block 0011 [ 74]: d32faf1133b296bf -Block 0011 [ 75]: 025f216987806954 -Block 0011 [ 76]: 00c9f933047627f9 -Block 0011 [ 77]: 2ce59ffdbcc25feb -Block 0011 [ 78]: 9e5d95d5f5e1665f -Block 0011 [ 79]: 8e9aa2d6c5f4fb8f -Block 0011 [ 80]: f29a4f3b1df3f2f4 -Block 0011 [ 81]: 163e77046784203d -Block 0011 [ 82]: d3475f23d0bcbb68 -Block 0011 [ 83]: fb5c4cfddac2c802 -Block 0011 [ 84]: bb6d887a81266342 -Block 0011 [ 85]: ab2b93751d7057ee -Block 0011 [ 86]: e79b4ec1b629ee53 -Block 0011 [ 87]: e50213e5fc957257 -Block 0011 [ 88]: f35a4d4a55ee15ec -Block 0011 [ 89]: c3bc9d6d1181c300 -Block 0011 [ 90]: a9f97892e7819b52 -Block 0011 [ 91]: 7a81ab2502821be8 -Block 0011 [ 92]: 57a98531b6c8e311 -Block 0011 [ 93]: fbab2dbf19f01294 -Block 0011 [ 94]: 402824c6dbe777ee -Block 0011 [ 95]: 59509aa8448aac6c -Block 0011 [ 96]: 9bcf16665a0a953a -Block 0011 [ 97]: 2172cb256715c249 -Block 0011 [ 98]: 54d6bbe2385b704a -Block 0011 [ 99]: dc288a2ff4a31f21 -Block 0011 [100]: 33e3c4d905aa1584 -Block 0011 [101]: f87bcfbbc106fe52 -Block 0011 [102]: 7dee45d72215096d -Block 0011 [103]: b798a129a56a498d -Block 0011 [104]: 639de22338bdfb22 -Block 0011 [105]: 4f1b0e209be36402 -Block 0011 [106]: ecfbf8eed84dda98 -Block 0011 [107]: d737114d3c05d061 -Block 0011 [108]: 987eadfcab4ec3c9 -Block 0011 [109]: c7cd9308d517c07a -Block 0011 [110]: 8b8637368781bc8d -Block 0011 [111]: 032f8375d3ac536e -Block 0011 [112]: 7da4a1808bb34e88 -Block 0011 [113]: 1761824e178e9d2f -Block 0011 [114]: 9ce6a9d604b50b6d -Block 0011 [115]: 69cfb48f60aa6b37 -Block 0011 [116]: d10088c389c01e7c -Block 0011 [117]: 01039dabd810204e -Block 0011 [118]: 02473cbb6d6e86e7 -Block 0011 [119]: 783710a70144d0d7 -Block 0011 [120]: c2081f9cbd0809bc -Block 0011 [121]: 60ecdee8cfba90c0 -Block 0011 [122]: 6068a3dce6a26929 -Block 0011 [123]: 67f4c0a3db81d9a6 -Block 0011 [124]: 62271723a9aa8451 -Block 0011 [125]: 1de12a522b1eb996 -Block 0011 [126]: 7da35ad6ff1aeaaf -Block 0011 [127]: 80d7af237c2acafa -Block 0012 [ 0]: bd6fecfb82bc40a9 -Block 0012 [ 1]: 83336a93ab307b70 -Block 0012 [ 2]: 8b23f98b36e3f85d -Block 0012 [ 3]: b765a38c83edc5d2 -Block 0012 [ 4]: 9c0952608e9e1b40 -Block 0012 [ 5]: c6b0b813dd3ff03f -Block 0012 [ 6]: 4e2f62beefb4ae56 -Block 0012 [ 7]: b5a4a8eebcf9d58e -Block 0012 [ 8]: ae17f59b432b6d88 -Block 0012 [ 9]: 32819dd91d5739f4 -Block 0012 [ 10]: aaf0a8106472cfdf -Block 0012 [ 11]: b19f65ec5f51d84e -Block 0012 [ 12]: 159148c18cb66a09 -Block 0012 [ 13]: 9d2b434c6c1553ac -Block 0012 [ 14]: a5cce2701e867af0 -Block 0012 [ 15]: a55e1618aca4da98 -Block 0012 [ 16]: 81da9e768512baca -Block 0012 [ 17]: 1292f9b1473da8ac -Block 0012 [ 18]: a49f71e94a278e39 -Block 0012 [ 19]: 7fbb53543ca895ef -Block 0012 [ 20]: 00301a0afcd2be7a -Block 0012 [ 21]: e28304111c2c7648 -Block 0012 [ 22]: cf67a24ec647f5ed -Block 0012 [ 23]: bbc3b2b582a87d95 -Block 0012 [ 24]: f452cd934124cc65 -Block 0012 [ 25]: 1d378de963be2060 -Block 0012 [ 26]: 5990d862ea81af34 -Block 0012 [ 27]: 76147c9b39f87a13 -Block 0012 [ 28]: c25f4d3aa4d724b4 -Block 0012 [ 29]: 8a2b3d742203141b -Block 0012 [ 30]: e79ce7830b1839a6 -Block 0012 [ 31]: 77fcf2032765debf -Block 0012 [ 32]: aac37411ed2339c7 -Block 0012 [ 33]: b9269cb3fa20e7c1 -Block 0012 [ 34]: bfe8f0953b80457d -Block 0012 [ 35]: b8d693d0a724ebde -Block 0012 [ 36]: 6f81188db5f1dd62 -Block 0012 [ 37]: 2809cc7ca199f651 -Block 0012 [ 38]: 9cfbf8589f28d12e -Block 0012 [ 39]: 2cf2ccfac3dc9548 -Block 0012 [ 40]: 46a60eae36e52610 -Block 0012 [ 41]: 8371bc8f910afac3 -Block 0012 [ 42]: c8ed9127942d2db9 -Block 0012 [ 43]: 2d1c0bb32a76a732 -Block 0012 [ 44]: 6d082794caa06a07 -Block 0012 [ 45]: 2a600fd1301dfb8d -Block 0012 [ 46]: 0546619fe6018911 -Block 0012 [ 47]: 3dfaf84e4bdbc93c -Block 0012 [ 48]: f351151625eb1c56 -Block 0012 [ 49]: 65ca506fc1b2b211 -Block 0012 [ 50]: f22083d6e4593f8c -Block 0012 [ 51]: 38a532e405c9cc85 -Block 0012 [ 52]: 130358836e4ab549 -Block 0012 [ 53]: b5da86cbccf9964a -Block 0012 [ 54]: 1a9bb7ccbe06b579 -Block 0012 [ 55]: 490244cc3d3ee5e7 -Block 0012 [ 56]: 05d16e1931499413 -Block 0012 [ 57]: c0f16d5307625a9c -Block 0012 [ 58]: dd5b60f8d3b6c265 -Block 0012 [ 59]: 5ffe40efc39b43d9 -Block 0012 [ 60]: 8a46a99cb2986022 -Block 0012 [ 61]: 59038865f9fa8ad6 -Block 0012 [ 62]: 07ee51e4a12d312b -Block 0012 [ 63]: 8c26838791d078b5 -Block 0012 [ 64]: e8f3197cfd8946a7 -Block 0012 [ 65]: 8cd3de9ec42e8dca -Block 0012 [ 66]: 0e2ed85ed54aa7a5 -Block 0012 [ 67]: b6db0d7dc497200e -Block 0012 [ 68]: d32cbf9e9d2ce91e -Block 0012 [ 69]: de0fd572d12a1bb3 -Block 0012 [ 70]: 0fd7b72104abff6d -Block 0012 [ 71]: f77a43e60b67290f -Block 0012 [ 72]: 3400c1aa61958019 -Block 0012 [ 73]: b15adcc92694b70b -Block 0012 [ 74]: fd03d78fa44ac635 -Block 0012 [ 75]: 6cbfe20764d6dee2 -Block 0012 [ 76]: 182992629853ad1d -Block 0012 [ 77]: 400a9ebcf07d8420 -Block 0012 [ 78]: 326a1b23b215ae73 -Block 0012 [ 79]: 21bcc4c98c55b193 -Block 0012 [ 80]: c8b40befa3dbfb04 -Block 0012 [ 81]: 9d21f41a2cdd84d3 -Block 0012 [ 82]: 0b544356ce4d4441 -Block 0012 [ 83]: bdd72d812505c333 -Block 0012 [ 84]: bb579d11cc3fbc7e -Block 0012 [ 85]: f3993400276d22c0 -Block 0012 [ 86]: 7f72b9c256b482e6 -Block 0012 [ 87]: 6a96d43928b6b630 -Block 0012 [ 88]: 6ae39cf21c9dab65 -Block 0012 [ 89]: a71321114a321bbc -Block 0012 [ 90]: 66252673668e98c8 -Block 0012 [ 91]: 545ae6fc8e6869ee -Block 0012 [ 92]: 6aa1d357b3bea674 -Block 0012 [ 93]: 0305780721fc75b9 -Block 0012 [ 94]: 9b43ff8046dfd073 -Block 0012 [ 95]: 1f8406fcab692e3a -Block 0012 [ 96]: 87b7db6bd68117bf -Block 0012 [ 97]: 0fed7932df8a7c02 -Block 0012 [ 98]: a2480d823634a1cb -Block 0012 [ 99]: 599396eb3193929d -Block 0012 [100]: aa9daa60b3ee560a -Block 0012 [101]: 412dce8bf4f87d2c -Block 0012 [102]: 3e36a5398694573f -Block 0012 [103]: d7fb28a0679bae3a -Block 0012 [104]: 3d74fea861251b70 -Block 0012 [105]: 516254cd2865cee0 -Block 0012 [106]: 9ce59d8bef9b81f0 -Block 0012 [107]: 97edabc40b358a34 -Block 0012 [108]: c1da8b2dcb42b386 -Block 0012 [109]: 979a59bb41a1c6f9 -Block 0012 [110]: 7f2ce7c8350d6481 -Block 0012 [111]: 01f6f97f063f3cfb -Block 0012 [112]: 93d99359d44b5995 -Block 0012 [113]: 6fda1427ad9ffed2 -Block 0012 [114]: 1f94a1f1e8ac2548 -Block 0012 [115]: 9ce14a580a564fc5 -Block 0012 [116]: 5cd702995eafaab5 -Block 0012 [117]: 13cddde717fe137c -Block 0012 [118]: 32bbc3e14f19743c -Block 0012 [119]: 18b8fee621b29a66 -Block 0012 [120]: 6d324f4418d8d341 -Block 0012 [121]: 1af85a9d05911cb7 -Block 0012 [122]: e58c08b75a16ef4e -Block 0012 [123]: 7eed498732243b2a -Block 0012 [124]: 85ddb6c93b244e3a -Block 0012 [125]: 04c79ec3b6abdacd -Block 0012 [126]: d6ace9220597ec2d -Block 0012 [127]: c58e5433f48ee38f -Block 0013 [ 0]: 469b89bf35144e2d -Block 0013 [ 1]: f1bb807bcbd5492b -Block 0013 [ 2]: 91b9c93c749f507e -Block 0013 [ 3]: c680ccabc457bed4 -Block 0013 [ 4]: a479230d83618dc8 -Block 0013 [ 5]: 3a608e4b91e578c8 -Block 0013 [ 6]: f82f5fb88c62c45f -Block 0013 [ 7]: 9c0c70469edc71a8 -Block 0013 [ 8]: 109f3d2e62f8507e -Block 0013 [ 9]: be32a740c6fbf047 -Block 0013 [ 10]: d3c4eb40218c412c -Block 0013 [ 11]: fd85ca2ebb4cb9cf -Block 0013 [ 12]: f51fa3e9aff33cb3 -Block 0013 [ 13]: c4a86dbc5b4c4e04 -Block 0013 [ 14]: c9b4794615050c61 -Block 0013 [ 15]: 4e0a7930c1e9d6f6 -Block 0013 [ 16]: 41c663d90a0b34f8 -Block 0013 [ 17]: 117a51022de13b30 -Block 0013 [ 18]: e7fc0de7e64d2538 -Block 0013 [ 19]: 2d52025217802c22 -Block 0013 [ 20]: 4318fc8296bced59 -Block 0013 [ 21]: 9d48c41ffd81ceff -Block 0013 [ 22]: 667b1c99880199ed -Block 0013 [ 23]: 5b990dcfcbaaf93b -Block 0013 [ 24]: f37f472db4b6f7e8 -Block 0013 [ 25]: cc1008a071e70d81 -Block 0013 [ 26]: 75b3f963a92d01d4 -Block 0013 [ 27]: 47f644f4261bbcd2 -Block 0013 [ 28]: b48fc438ace2ec49 -Block 0013 [ 29]: 82306b345782219c -Block 0013 [ 30]: 3ba907903f025346 -Block 0013 [ 31]: 7a18eec36db22089 -Block 0013 [ 32]: 6e55e2b6898aaa84 -Block 0013 [ 33]: e730cd439b6e94b1 -Block 0013 [ 34]: 4fec54842c67cb85 -Block 0013 [ 35]: 5deadada3303fa9f -Block 0013 [ 36]: 176d6e6e4d0f3488 -Block 0013 [ 37]: 8725266fd29e99ab -Block 0013 [ 38]: 9f125355c004d01c -Block 0013 [ 39]: dc36f29aa027f5a6 -Block 0013 [ 40]: 525bf4bf8fb5bec4 -Block 0013 [ 41]: 8557409bab69aa67 -Block 0013 [ 42]: 3008d95b6835faab -Block 0013 [ 43]: 2fa1b7395cde8d4e -Block 0013 [ 44]: 8c23ee445af43f01 -Block 0013 [ 45]: 0e34c44d2c3c956e -Block 0013 [ 46]: f3ff515c41428f14 -Block 0013 [ 47]: 4bbd10994aa53ade -Block 0013 [ 48]: 70897165253d8ef9 -Block 0013 [ 49]: e4aa8b7916923cf9 -Block 0013 [ 50]: 46e24ef1ac6bfff1 -Block 0013 [ 51]: bc5d31a2b82f30dd -Block 0013 [ 52]: f57c5c12eed9c220 -Block 0013 [ 53]: 099affa1a90bc96f -Block 0013 [ 54]: 50d24186a40277a2 -Block 0013 [ 55]: bdf6cb0a23ab150a -Block 0013 [ 56]: c6550fbbb31eea4f -Block 0013 [ 57]: f2eb00dbbf2f741b -Block 0013 [ 58]: 705d493f35a221eb -Block 0013 [ 59]: 18c759f8d7372759 -Block 0013 [ 60]: cd53295156bbdaf7 -Block 0013 [ 61]: 55fcd365dffd3f54 -Block 0013 [ 62]: 5d1acc769fa1de1f -Block 0013 [ 63]: 2cd1a56d595cd38f -Block 0013 [ 64]: 781c267f2589cee0 -Block 0013 [ 65]: ee1c09ef98a5a1f1 -Block 0013 [ 66]: 7a1bfb603c4dba63 -Block 0013 [ 67]: 34514bf06f413a08 -Block 0013 [ 68]: f0ab7003938a1476 -Block 0013 [ 69]: 8192f273377b379b -Block 0013 [ 70]: 47728ee5081aef9a -Block 0013 [ 71]: 3a401ef54a86e805 -Block 0013 [ 72]: 09a3e8653cf89a9c -Block 0013 [ 73]: de57c3623c7c6716 -Block 0013 [ 74]: 531ccbe06178e4b7 -Block 0013 [ 75]: 9e7ab5d7f66c58c0 -Block 0013 [ 76]: 41ee6347824a9aec -Block 0013 [ 77]: 802ba21600951c51 -Block 0013 [ 78]: 8405a2255deae3cf -Block 0013 [ 79]: c03511dda328b340 -Block 0013 [ 80]: c28d190bbf5cf177 -Block 0013 [ 81]: 73871fd8db5c3f7b -Block 0013 [ 82]: 9c334dd4281aab96 -Block 0013 [ 83]: 292f2dda3329e449 -Block 0013 [ 84]: 2f541a89b08cf4ba -Block 0013 [ 85]: a2ab80002dcca405 -Block 0013 [ 86]: db676901ecd0fa45 -Block 0013 [ 87]: 096dfe473e13e96f -Block 0013 [ 88]: 53968abdbe6e4572 -Block 0013 [ 89]: c6e7b422616906dd -Block 0013 [ 90]: edc199a6e9f6778a -Block 0013 [ 91]: 8ae900b4c954e50d -Block 0013 [ 92]: f9ee03ef99ef37b4 -Block 0013 [ 93]: 8a20e8e614c05e8e -Block 0013 [ 94]: ad858cea0b6610cf -Block 0013 [ 95]: 48501c603e178f3e -Block 0013 [ 96]: 8ac0979a7338a41b -Block 0013 [ 97]: 89d0a41b5373145e -Block 0013 [ 98]: ba71436efa6b897d -Block 0013 [ 99]: 56f2a1a0ca08e284 -Block 0013 [100]: 760e5e43697efd46 -Block 0013 [101]: bae77c1a65bef07e -Block 0013 [102]: 25e18714ea68d2a2 -Block 0013 [103]: b8ca56d1a6018956 -Block 0013 [104]: 342258dccc6a6d80 -Block 0013 [105]: d1a935f161a883de -Block 0013 [106]: 223aa5ec5f1311dd -Block 0013 [107]: fc66376a80e78e43 -Block 0013 [108]: b465c3b8933975b9 -Block 0013 [109]: 2b805a1aa85636c2 -Block 0013 [110]: 3bdbd379782a4213 -Block 0013 [111]: b3443e45eaeed777 -Block 0013 [112]: 48a458478a4e1fd5 -Block 0013 [113]: ce95d563b9d2580c -Block 0013 [114]: ba1750aa2c93bb7a -Block 0013 [115]: c0a849e80ac219c1 -Block 0013 [116]: f7df4f1ee48f8e2e -Block 0013 [117]: 0c80dc43de98a7d2 -Block 0013 [118]: 2659164c58c94cc5 -Block 0013 [119]: 4add333f8e5b70b4 -Block 0013 [120]: 7ef8625419224a9f -Block 0013 [121]: 9438a803327d4709 -Block 0013 [122]: e52835e1e39dd129 -Block 0013 [123]: f703ee0b9232369c -Block 0013 [124]: ec1e4f18f2f11ef6 -Block 0013 [125]: a46901c0035eedd2 -Block 0013 [126]: 0cd3fcc9c81a85be -Block 0013 [127]: 1ebc5566d5fc58f6 -Block 0014 [ 0]: a6fd444da23d6e1c -Block 0014 [ 1]: 27d5f1f2edfa9804 -Block 0014 [ 2]: 049fe0712c2aabc8 -Block 0014 [ 3]: 83379947d2bd63e1 -Block 0014 [ 4]: 8c54d252f69aafae -Block 0014 [ 5]: e008c186c409521d -Block 0014 [ 6]: 8a4dd58902b9065d -Block 0014 [ 7]: 171da5b5d4ca2c54 -Block 0014 [ 8]: 47d296bbaffac7ca -Block 0014 [ 9]: 4245e46959d2ba01 -Block 0014 [ 10]: 0cd6fd7bed88782a -Block 0014 [ 11]: 789f688d25adb3ba -Block 0014 [ 12]: cfa2969bd35cdb01 -Block 0014 [ 13]: 8147baf43054c3c3 -Block 0014 [ 14]: f28980a5b7a66642 -Block 0014 [ 15]: 379842f855193f71 -Block 0014 [ 16]: 167618251bf12e1a -Block 0014 [ 17]: 3de4a36244acda65 -Block 0014 [ 18]: ff9e1b243a00498e -Block 0014 [ 19]: da067a939b699e93 -Block 0014 [ 20]: fafa959c3af548a9 -Block 0014 [ 21]: cd7fb142db37d651 -Block 0014 [ 22]: 57a08b06b92fe762 -Block 0014 [ 23]: f8f217cf85858346 -Block 0014 [ 24]: c633ded2a0a87279 -Block 0014 [ 25]: e9ae9e18c6a2185b -Block 0014 [ 26]: 7798a758f4c08d73 -Block 0014 [ 27]: 4dac706917b3a0e0 -Block 0014 [ 28]: 17f25c21df6f6ad8 -Block 0014 [ 29]: 72b898b7b31cf4d2 -Block 0014 [ 30]: 0fcdc820916a5f0d -Block 0014 [ 31]: f04a3dd5a97dec99 -Block 0014 [ 32]: 9266960d1846ae17 -Block 0014 [ 33]: 67bdcd5d02ce1ec5 -Block 0014 [ 34]: edc1a704aadbfce9 -Block 0014 [ 35]: 60605d2cf5826657 -Block 0014 [ 36]: 66a1abe201545d43 -Block 0014 [ 37]: c416a25c6add6379 -Block 0014 [ 38]: 14edd341150ffe0f -Block 0014 [ 39]: eb0a69d9692d422e -Block 0014 [ 40]: 5edc64141f3fe535 -Block 0014 [ 41]: 5517f8af8e63cfb0 -Block 0014 [ 42]: 6496e3427f0b72b4 -Block 0014 [ 43]: 533584b066c29739 -Block 0014 [ 44]: 5ef672ef52028670 -Block 0014 [ 45]: a3a73a265b5b4c68 -Block 0014 [ 46]: c317a90bed56f97f -Block 0014 [ 47]: b25eaa412e6826bf -Block 0014 [ 48]: c33ca6840a8f4a20 -Block 0014 [ 49]: 22ba3746a5d7c617 -Block 0014 [ 50]: f8d75f32795a920c -Block 0014 [ 51]: de36310091fe3fc4 -Block 0014 [ 52]: 8cd740bf21c74f09 -Block 0014 [ 53]: 1b06579f7fcc666c -Block 0014 [ 54]: 8ccc6d4c75062885 -Block 0014 [ 55]: 43fd4b36fb0f01e5 -Block 0014 [ 56]: f8a2253f4de60237 -Block 0014 [ 57]: a3a34bec7464896d -Block 0014 [ 58]: c7263f2c186fe862 -Block 0014 [ 59]: 52dbd94463c3e89d -Block 0014 [ 60]: 1bfb2ad7a5da2dcb -Block 0014 [ 61]: 242b1455089cb5e3 -Block 0014 [ 62]: 537f4c68e83e9592 -Block 0014 [ 63]: aa12ee9c267fbf0f -Block 0014 [ 64]: e1c90243ff1558fc -Block 0014 [ 65]: a3ec1df790d1dd94 -Block 0014 [ 66]: 839102ed6415bdcc -Block 0014 [ 67]: 41a1eb33046c79b4 -Block 0014 [ 68]: 70162541518db319 -Block 0014 [ 69]: 9e4a9ff2379777d2 -Block 0014 [ 70]: cd976546ac02b98c -Block 0014 [ 71]: e4d3c3e4d7bafa9c -Block 0014 [ 72]: 3006682d1102cd1e -Block 0014 [ 73]: 2dda21061d60eeb0 -Block 0014 [ 74]: be8a8a034b76bea0 -Block 0014 [ 75]: 41d84a746d71ab65 -Block 0014 [ 76]: 207ce30627e15f10 -Block 0014 [ 77]: fdf84363bc87a648 -Block 0014 [ 78]: c936d95a70ffc7e5 -Block 0014 [ 79]: b3827987cc12c8e0 -Block 0014 [ 80]: 1c9e093a8100d421 -Block 0014 [ 81]: cb08d8230707442f -Block 0014 [ 82]: a5030a8c92aa863e -Block 0014 [ 83]: aae38d609e0109b2 -Block 0014 [ 84]: 5eceb17f9447a99c -Block 0014 [ 85]: dbd9d5ee531b610b -Block 0014 [ 86]: 99711e89db1680b1 -Block 0014 [ 87]: 4f7a10b757cb608f -Block 0014 [ 88]: 68658d34dc7e94fb -Block 0014 [ 89]: 440eeb626787c17e -Block 0014 [ 90]: dc279af3228c0353 -Block 0014 [ 91]: 1dac0a35211d14ef -Block 0014 [ 92]: 33bfe237745a88be -Block 0014 [ 93]: f30c62a742b86288 -Block 0014 [ 94]: 343cfd6104f75999 -Block 0014 [ 95]: 931344dad6051583 -Block 0014 [ 96]: 1ce3c8aba7af78e3 -Block 0014 [ 97]: 27a53fdba01abe2f -Block 0014 [ 98]: 6b3a5a9d94b13792 -Block 0014 [ 99]: f2255279896284a1 -Block 0014 [100]: db937dc3e2711431 -Block 0014 [101]: 4320a35809367826 -Block 0014 [102]: 0b7cc7006e18961b -Block 0014 [103]: 498eedf7ae16de25 -Block 0014 [104]: 9ed3fd7b3616d7c5 -Block 0014 [105]: 2f215d99735d5724 -Block 0014 [106]: 3846a13d7f2189da -Block 0014 [107]: f0911c31c8b28468 -Block 0014 [108]: 6f905c811b277595 -Block 0014 [109]: 5b6b45083eecca78 -Block 0014 [110]: 30b9c29f7c5fa245 -Block 0014 [111]: ac8f586b04386777 -Block 0014 [112]: a774d9b1a99dff6e -Block 0014 [113]: 4e1aade50867b4df -Block 0014 [114]: 05056826da07617e -Block 0014 [115]: cfd596b007b261a1 -Block 0014 [116]: 2fb87c6b4b19e672 -Block 0014 [117]: dc7a50615db0941f -Block 0014 [118]: 5ad371dd8bbb2d82 -Block 0014 [119]: 7a0a4565560fcf8e -Block 0014 [120]: 8edfdbb2246844e5 -Block 0014 [121]: 78cba762a604171c -Block 0014 [122]: d4d5140c608e25fd -Block 0014 [123]: e9b7a0f411af0178 -Block 0014 [124]: 495579fde5795935 -Block 0014 [125]: 98e91ae67903df3a -Block 0014 [126]: fb858d0ce6815c77 -Block 0014 [127]: abf9a3b4783b95b9 -Block 0015 [ 0]: 48f1ac950cf3881c -Block 0015 [ 1]: eaf883ea6cf90acd -Block 0015 [ 2]: b2abd6966dde13e6 -Block 0015 [ 3]: 1c1dbd963e509e80 -Block 0015 [ 4]: 99bfefb56bcc8b5b -Block 0015 [ 5]: 91b695442100a299 -Block 0015 [ 6]: d83bece1229baf44 -Block 0015 [ 7]: fbce75e4f69616ef -Block 0015 [ 8]: 8c4c204a54ea028d -Block 0015 [ 9]: 6e6afa1b87e5a778 -Block 0015 [ 10]: 32a41c52296d6509 -Block 0015 [ 11]: d76d7f53b02b548b -Block 0015 [ 12]: 317a97a4e29484ae -Block 0015 [ 13]: 49b5a36d87c27964 -Block 0015 [ 14]: 39ea0bdaf61f37c3 -Block 0015 [ 15]: 9e9152c38d3e5f91 -Block 0015 [ 16]: 71416bda681eb455 -Block 0015 [ 17]: d0a7c1a1d26677c7 -Block 0015 [ 18]: e663c0641e7f5e4e -Block 0015 [ 19]: 4553876046389bb4 -Block 0015 [ 20]: 3cde6995f45a4871 -Block 0015 [ 21]: 52de8d0ebc9f2d28 -Block 0015 [ 22]: 60cd90051fb84a8c -Block 0015 [ 23]: e185ea6d7388200b -Block 0015 [ 24]: 8d7d7020905d621a -Block 0015 [ 25]: 900bec536616cc0f -Block 0015 [ 26]: 283f8b890d0ae676 -Block 0015 [ 27]: 680bb488f2b0c5ba -Block 0015 [ 28]: 605284785bf2f48f -Block 0015 [ 29]: 66f88983aa442e96 -Block 0015 [ 30]: 335863bf15240c60 -Block 0015 [ 31]: 75e73ea0b669185d -Block 0015 [ 32]: 5afe255a49284d18 -Block 0015 [ 33]: 42d132c12033b815 -Block 0015 [ 34]: 768745082542997a -Block 0015 [ 35]: 3eaaadd309f971dc -Block 0015 [ 36]: 60063eab924ef931 -Block 0015 [ 37]: f64bdc7714548239 -Block 0015 [ 38]: b72beb1f7a4047bc -Block 0015 [ 39]: a0180a0fe772d833 -Block 0015 [ 40]: 555207f87100a775 -Block 0015 [ 41]: 348ac5544e3e12c2 -Block 0015 [ 42]: c549140299b026c3 -Block 0015 [ 43]: f3658936873c5eba -Block 0015 [ 44]: 49ff7a8cd84acebc -Block 0015 [ 45]: fe9706b4679eae94 -Block 0015 [ 46]: 0abfa68ea8bc7995 -Block 0015 [ 47]: e04df13b96469667 -Block 0015 [ 48]: d2509b6a6f172a1e -Block 0015 [ 49]: 3f98700992a85d42 -Block 0015 [ 50]: 37d15e6350f1fcf2 -Block 0015 [ 51]: 6a4bedc47ff0824d -Block 0015 [ 52]: 70f4fe2199d457ff -Block 0015 [ 53]: 2c352f913ad00226 -Block 0015 [ 54]: 80ec73821a01a1b7 -Block 0015 [ 55]: 52f144a2b92a0b8b -Block 0015 [ 56]: 8cb51546d7a50169 -Block 0015 [ 57]: b11c13a15ec5255d -Block 0015 [ 58]: deaccaa72dfd73e6 -Block 0015 [ 59]: c0d8ff50d1a70a84 -Block 0015 [ 60]: 063070a7a03bf4c5 -Block 0015 [ 61]: 90aa76c10d2f3dcd -Block 0015 [ 62]: b3ea5c879e1b8f69 -Block 0015 [ 63]: 06d58d40b299fff5 -Block 0015 [ 64]: f0906a0cbb014658 -Block 0015 [ 65]: 03fb6e4c776e4e6b -Block 0015 [ 66]: 341efc293b930c6a -Block 0015 [ 67]: 8c3495057d757b46 -Block 0015 [ 68]: af0b9102cb848408 -Block 0015 [ 69]: 4a61c0921fbfdb02 -Block 0015 [ 70]: d3a97a49364fcc87 -Block 0015 [ 71]: d89c0d1eaef9131c -Block 0015 [ 72]: f4ee9aa2027b0a0e -Block 0015 [ 73]: 7af4d9b428349614 -Block 0015 [ 74]: 71ff65de539e5a82 -Block 0015 [ 75]: 8f83a497e1669ac7 -Block 0015 [ 76]: 825661a2b539797e -Block 0015 [ 77]: 391f3e236e22d860 -Block 0015 [ 78]: 5bd028a09b96c6b8 -Block 0015 [ 79]: d03b3abd6c7bd98b -Block 0015 [ 80]: b218c3cff8ca229a -Block 0015 [ 81]: 449e748579dd114a -Block 0015 [ 82]: e75e5765ec0ef4eb -Block 0015 [ 83]: 927a53763eb52763 -Block 0015 [ 84]: eb31bea6ac58be13 -Block 0015 [ 85]: 3f9e0b6243e43d9c -Block 0015 [ 86]: 7d36ccb527d2f47c -Block 0015 [ 87]: 2e6737d2ac42f8a4 -Block 0015 [ 88]: 6be4965ce76dcf99 -Block 0015 [ 89]: 5266eb13b7c0fb67 -Block 0015 [ 90]: bc4a02952a5c891e -Block 0015 [ 91]: 652f04e1955a0cb2 -Block 0015 [ 92]: 94a422e3d810af83 -Block 0015 [ 93]: 00952c083000917f -Block 0015 [ 94]: 14a67f3032a00925 -Block 0015 [ 95]: 69f7e91255059cd0 -Block 0015 [ 96]: 5a708dd19514a98f -Block 0015 [ 97]: 91316fabb0d60317 -Block 0015 [ 98]: 687b66014c5a7015 -Block 0015 [ 99]: 8ad7ed6406b0f002 -Block 0015 [100]: 1dfbff523447315d -Block 0015 [101]: 4c896e08bd7477bd -Block 0015 [102]: 1665790a010701f7 -Block 0015 [103]: 2dc97780c92719db -Block 0015 [104]: 404cc7858d36f9f1 -Block 0015 [105]: ca5feabd4fd0c204 -Block 0015 [106]: 2cabce3fa772a19d -Block 0015 [107]: b877c257103bf937 -Block 0015 [108]: 5f9ea2426ce35573 -Block 0015 [109]: e6845f8d690e983d -Block 0015 [110]: de3d1d493abb9fbd -Block 0015 [111]: 82371cfa0ff53dd6 -Block 0015 [112]: 3336ba8f5026315f -Block 0015 [113]: 8110fe8c4a0ec071 -Block 0015 [114]: abefc53ff83604ed -Block 0015 [115]: 432543ba9c4c5317 -Block 0015 [116]: 1c9ffaa7191280d0 -Block 0015 [117]: b822a777b82ae96e -Block 0015 [118]: 3c0200fd356b34a8 -Block 0015 [119]: 78702afdbecd0848 -Block 0015 [120]: ceb5463bb7e4c860 -Block 0015 [121]: d779daa42cbece71 -Block 0015 [122]: 0f648209e29f3ee7 -Block 0015 [123]: 7ae6b67331d4cd58 -Block 0015 [124]: 5ec5eff47f3c7ded -Block 0015 [125]: c0f9dd6c59ff0521 -Block 0015 [126]: 6dbda1415a779a2f -Block 0015 [127]: 6fae8d18b407e040 -Block 0016 [ 0]: 710cfaf0bee662a5 -Block 0016 [ 1]: 6912d7353809b4ec -Block 0016 [ 2]: f75afc8a20e77848 -Block 0016 [ 3]: ad2ce00df7907bc6 -Block 0016 [ 4]: d8609558c4656b32 -Block 0016 [ 5]: df01d7192f02d6ad -Block 0016 [ 6]: 352b6d394b14dcd7 -Block 0016 [ 7]: 8c2959de89207bbe -Block 0016 [ 8]: 23dfe7c79c0babe3 -Block 0016 [ 9]: 681ddaa5b4076422 -Block 0016 [ 10]: 97a39739ef278fa6 -Block 0016 [ 11]: f595186e3f7cfb95 -Block 0016 [ 12]: fd8237458bedd057 -Block 0016 [ 13]: 5af3ccf518f8a6a9 -Block 0016 [ 14]: b4e2d70622b28ad2 -Block 0016 [ 15]: 9c9d445d0fc67760 -Block 0016 [ 16]: fe51b49a33018412 -Block 0016 [ 17]: a64f16fe32b4663c -Block 0016 [ 18]: 8e00e12bdb7129df -Block 0016 [ 19]: f7ff04584b60c14f -Block 0016 [ 20]: 974549315b64ae56 -Block 0016 [ 21]: d2e2f3bad2f3c964 -Block 0016 [ 22]: 2ad09f40f62e916c -Block 0016 [ 23]: 834c123230fda32f -Block 0016 [ 24]: da3f268010f0ae2d -Block 0016 [ 25]: af77c72c041a267a -Block 0016 [ 26]: 0da0f22e2ab41b36 -Block 0016 [ 27]: ac4bb65a75a868ed -Block 0016 [ 28]: c07e1215f30f9b25 -Block 0016 [ 29]: fe9c83043786499d -Block 0016 [ 30]: 4156d45c9c90cda3 -Block 0016 [ 31]: a8ec3559f62350e4 -Block 0016 [ 32]: 7f30e5cb02bfe5fa -Block 0016 [ 33]: 0f6c1b3fdbaaf663 -Block 0016 [ 34]: b997ddb2b173d5eb -Block 0016 [ 35]: 19127cee6480525a -Block 0016 [ 36]: 397a7b2b5255dc3a -Block 0016 [ 37]: f605ad9c1aaa7ed5 -Block 0016 [ 38]: 05d03ece38045455 -Block 0016 [ 39]: d4d5d65162bcca6e -Block 0016 [ 40]: 3cb61f380c80a889 -Block 0016 [ 41]: 17d299f871ec5ea4 -Block 0016 [ 42]: 693b37025942dfd6 -Block 0016 [ 43]: c6c05c5b0dc9e3e8 -Block 0016 [ 44]: 4303937541762ac5 -Block 0016 [ 45]: 3abafd38ef6245ee -Block 0016 [ 46]: 4bc1936e70418b04 -Block 0016 [ 47]: 25f7c72049559b67 -Block 0016 [ 48]: a977bc3194d89a91 -Block 0016 [ 49]: 471fac0934c45a12 -Block 0016 [ 50]: 78804b9bc54e8573 -Block 0016 [ 51]: 295f435d98ee06f9 -Block 0016 [ 52]: 6a32dc0811626e3b -Block 0016 [ 53]: c4db418d2dc47928 -Block 0016 [ 54]: 577ba22ecf5d231a -Block 0016 [ 55]: 28482d1a3153e0f4 -Block 0016 [ 56]: b42b7f05d45a65e8 -Block 0016 [ 57]: 1e242452db0744f4 -Block 0016 [ 58]: d97329be8474cd63 -Block 0016 [ 59]: 7cf9eff8edd07327 -Block 0016 [ 60]: 9f13cceab620d429 -Block 0016 [ 61]: f28a3026dd1db08f -Block 0016 [ 62]: 1c856cac60b6ab53 -Block 0016 [ 63]: a65279bd15d7f9a9 -Block 0016 [ 64]: 803fefc16404a710 -Block 0016 [ 65]: abe288e325cb7802 -Block 0016 [ 66]: d805bdfcc44040ae -Block 0016 [ 67]: 3ddeb139a7a0ed25 -Block 0016 [ 68]: f70cf79756da13a3 -Block 0016 [ 69]: 973f68ed071dbb8a -Block 0016 [ 70]: f3a939066cd21bc9 -Block 0016 [ 71]: b88d5fa30a1bab23 -Block 0016 [ 72]: 72227642f90106d4 -Block 0016 [ 73]: 7881a0e385380ebd -Block 0016 [ 74]: 04fc2c77bab1f4e7 -Block 0016 [ 75]: 9bebb3381fd536e3 -Block 0016 [ 76]: ef66d65a4a6050ab -Block 0016 [ 77]: a0c9b8785e782343 -Block 0016 [ 78]: a47023641507e262 -Block 0016 [ 79]: 465731861624687d -Block 0016 [ 80]: 2ae9549efc699fa5 -Block 0016 [ 81]: 6a15176ff48c36e5 -Block 0016 [ 82]: 82b481f1af0802e4 -Block 0016 [ 83]: b8c2d24bef0b79e5 -Block 0016 [ 84]: 269962820b63ad6b -Block 0016 [ 85]: e8d57e0ce2d8fa9b -Block 0016 [ 86]: d7fa415b4526ff7d -Block 0016 [ 87]: fafefe6b65041c41 -Block 0016 [ 88]: bfdef0334b2045a2 -Block 0016 [ 89]: feedd024bc36e30f -Block 0016 [ 90]: 20f45c92eb155f9c -Block 0016 [ 91]: 871efb3f3f90dbcd -Block 0016 [ 92]: 521a292c3cb15113 -Block 0016 [ 93]: 38662f1474beb8c1 -Block 0016 [ 94]: 69b8e7fc0ac12eed -Block 0016 [ 95]: 6ccfa59f401331ea -Block 0016 [ 96]: db7ad7c040889c92 -Block 0016 [ 97]: e0b3515aef70da17 -Block 0016 [ 98]: 529d53c2147f38f6 -Block 0016 [ 99]: 22c0f0ab0f5153d9 -Block 0016 [100]: e3a1e05598ad1072 -Block 0016 [101]: e0b0d28ad8a3e7eb -Block 0016 [102]: 7f68b2c84d2af77b -Block 0016 [103]: 466cc2bb5864b911 -Block 0016 [104]: ee63ea577f1f4e3f -Block 0016 [105]: 41ccb035b33684e4 -Block 0016 [106]: d90e6188131d652c -Block 0016 [107]: b13d24b082aca657 -Block 0016 [108]: 286d91f7dae701f6 -Block 0016 [109]: 7ddff979b2863b0d -Block 0016 [110]: 29b0f3577ed4f54d -Block 0016 [111]: e7b2fc6f93e22cd4 -Block 0016 [112]: 481aa7ea963c8277 -Block 0016 [113]: 5bbfd2c5c401194a -Block 0016 [114]: 773fa381b1d58f24 -Block 0016 [115]: fcdd4ac68cf673f4 -Block 0016 [116]: c2e5d48aee88b451 -Block 0016 [117]: 96ee1b09d99bac93 -Block 0016 [118]: f594138e33640e81 -Block 0016 [119]: e33f50e896cbcddb -Block 0016 [120]: d81f98bb8eecfdaf -Block 0016 [121]: ec31d99173fb77a4 -Block 0016 [122]: f2acc3b6fb255414 -Block 0016 [123]: bfef242337128b14 -Block 0016 [124]: bb663dc0e3338f7b -Block 0016 [125]: f49c51621d4201cb -Block 0016 [126]: e53c1fedd3052913 -Block 0016 [127]: ed6a6fe4f31cecdf -Block 0017 [ 0]: 952aece0f16fb3b6 -Block 0017 [ 1]: c94589dd7551b542 -Block 0017 [ 2]: be3fd2c66132daa4 -Block 0017 [ 3]: 81c48a0b3f2de2bc -Block 0017 [ 4]: 9ac5a66a083de3a1 -Block 0017 [ 5]: 17ec452a15738cf9 -Block 0017 [ 6]: 56671b153c50b567 -Block 0017 [ 7]: a738f66fc6633cd6 -Block 0017 [ 8]: e2f5b4c00b04b715 -Block 0017 [ 9]: 3cb7271c9e33787a -Block 0017 [ 10]: 4afb98c129a9ba81 -Block 0017 [ 11]: 401f1034d0cdcef6 -Block 0017 [ 12]: b3efedcb63fd0b52 -Block 0017 [ 13]: 4ca2a7602ee2abc3 -Block 0017 [ 14]: 7e220a5a8e56f8f4 -Block 0017 [ 15]: 627b16f115ab64b3 -Block 0017 [ 16]: 9005adb61ec4d578 -Block 0017 [ 17]: a40878f747dc0488 -Block 0017 [ 18]: 716efca0eefef3fb -Block 0017 [ 19]: 267e4dd2ce4a37d4 -Block 0017 [ 20]: 1852a3b61229cd4b -Block 0017 [ 21]: d9e05bec5abb0cfb -Block 0017 [ 22]: 809000e0ce09670a -Block 0017 [ 23]: f63651bc886e9b53 -Block 0017 [ 24]: 6618b2ab81b879b1 -Block 0017 [ 25]: 1c47da92a5d1c8c9 -Block 0017 [ 26]: 783113941e83d8da -Block 0017 [ 27]: 78201466eedd7fe9 -Block 0017 [ 28]: 89d3b3aa0c047056 -Block 0017 [ 29]: ddd16957defe030d -Block 0017 [ 30]: db81dbb7545aacfc -Block 0017 [ 31]: 80932e26f6ac5e56 -Block 0017 [ 32]: d590d512dec1e8bc -Block 0017 [ 33]: 22d20bd8220c4073 -Block 0017 [ 34]: 7f7993cab07534c6 -Block 0017 [ 35]: d738bd5c4c396610 -Block 0017 [ 36]: 15f88e3db0cd588f -Block 0017 [ 37]: b297a18e99f05f81 -Block 0017 [ 38]: d2fcbe03ca586a9f -Block 0017 [ 39]: da08c038b2aa3bef -Block 0017 [ 40]: 5a190360d985b628 -Block 0017 [ 41]: 41b215e0ed7bb415 -Block 0017 [ 42]: b38b27298d8dd9da -Block 0017 [ 43]: 011f566449fdc64c -Block 0017 [ 44]: 70367da514bde68d -Block 0017 [ 45]: 663e8093c3095c2d -Block 0017 [ 46]: 4872581648e38cf3 -Block 0017 [ 47]: a24469e0e2bb9daa -Block 0017 [ 48]: 95f032b49673e322 -Block 0017 [ 49]: ac1b38e53d2fb7c9 -Block 0017 [ 50]: 9179c042a54419a1 -Block 0017 [ 51]: f754d6e4ba540299 -Block 0017 [ 52]: fd2c6f8f49d6b42d -Block 0017 [ 53]: 5afa29c2f36e9a2f -Block 0017 [ 54]: ac740f84ffaca274 -Block 0017 [ 55]: 7e0fd8c31320c792 -Block 0017 [ 56]: 9b16d4d7fc190110 -Block 0017 [ 57]: a49b6f07283e4e86 -Block 0017 [ 58]: 040b686ee5047205 -Block 0017 [ 59]: 8aed40cb6e27e3eb -Block 0017 [ 60]: 4ca31b9fd4606d5f -Block 0017 [ 61]: 74c87970a65f8356 -Block 0017 [ 62]: 1eb1d933307076b2 -Block 0017 [ 63]: 304aa86fa95d0ee4 -Block 0017 [ 64]: cfb6cbac1b17beee -Block 0017 [ 65]: 2661f3e0b33a5a4d -Block 0017 [ 66]: 18e500d1ef4fd8bc -Block 0017 [ 67]: 9afec62590f199db -Block 0017 [ 68]: 26e4843c77db29e4 -Block 0017 [ 69]: 91603b76ec35253b -Block 0017 [ 70]: 1756708a5280549d -Block 0017 [ 71]: ca5eaeed94c69c73 -Block 0017 [ 72]: 2ca3c6040c38b167 -Block 0017 [ 73]: 3013413ecde7db9a -Block 0017 [ 74]: a0691438772206c4 -Block 0017 [ 75]: 06561b5f445b5b51 -Block 0017 [ 76]: 0d197b9980a81b16 -Block 0017 [ 77]: e71cd08afa96a69c -Block 0017 [ 78]: 71d606b12ccac9c4 -Block 0017 [ 79]: 8b80d848ff657dbc -Block 0017 [ 80]: 1ef4e7aa2eb67ca1 -Block 0017 [ 81]: fd3cbb5c194e156a -Block 0017 [ 82]: 943b8a9eea7c81d8 -Block 0017 [ 83]: fdba08a52c123357 -Block 0017 [ 84]: 282d371eace2eca3 -Block 0017 [ 85]: 44ddb3bc4d49b335 -Block 0017 [ 86]: a86a22dd6190e990 -Block 0017 [ 87]: 85a33224357364fa -Block 0017 [ 88]: ed80d83fc228f476 -Block 0017 [ 89]: ac8539c903ad25ae -Block 0017 [ 90]: 2face77d2e2c1eb8 -Block 0017 [ 91]: 4aed4cbac77719fd -Block 0017 [ 92]: 89ae974f79cf3813 -Block 0017 [ 93]: 6cd3ac7cab276e7f -Block 0017 [ 94]: d32cf45b417879f7 -Block 0017 [ 95]: 1b5e429dc8b9b907 -Block 0017 [ 96]: 6bf3ebfe54c463d6 -Block 0017 [ 97]: 92b310b3afe0e8b8 -Block 0017 [ 98]: 39f4fb9b656899c6 -Block 0017 [ 99]: 5235703fecb3f167 -Block 0017 [100]: 9ea64cd88ba4357b -Block 0017 [101]: ea54ed9dbe94c8ff -Block 0017 [102]: c5cea8ee03f01ecb -Block 0017 [103]: 0f3640c69fedd57d -Block 0017 [104]: 36aefd6f034c6728 -Block 0017 [105]: b44915a3339efeb6 -Block 0017 [106]: d0bb17f934bc2700 -Block 0017 [107]: 983ad4dd718a532e -Block 0017 [108]: 35be08b039710fb5 -Block 0017 [109]: 38acd5446171ca7d -Block 0017 [110]: ec2ecb38c65e8336 -Block 0017 [111]: ef3da5eac5cc16bb -Block 0017 [112]: bfef6c86c428166d -Block 0017 [113]: 7d7f878381f100da -Block 0017 [114]: 36537e58dbe2ef59 -Block 0017 [115]: 53a2a7328158b0b0 -Block 0017 [116]: e5a265a5833444c0 -Block 0017 [117]: a523477bb35aed86 -Block 0017 [118]: 820aead8675755b4 -Block 0017 [119]: 1599320a5cd31db5 -Block 0017 [120]: 1e2832448cafe90e -Block 0017 [121]: fc80c971ff3a0716 -Block 0017 [122]: 05c122688dc31dc4 -Block 0017 [123]: 7e1d0c1c98f81cb3 -Block 0017 [124]: 8931b0cb5450a64b -Block 0017 [125]: 8f1db3816e6d618b -Block 0017 [126]: 0ed498b9dd789b3c -Block 0017 [127]: c125a3023d2920de -Block 0018 [ 0]: 8fabded4e0f2a1e4 -Block 0018 [ 1]: 68d45e22ed92b46d -Block 0018 [ 2]: c71a5ed100fc0449 -Block 0018 [ 3]: 7280db58709e201d -Block 0018 [ 4]: 9bbba222ee9a909b -Block 0018 [ 5]: d104738019223045 -Block 0018 [ 6]: e79cf9aecc636fd5 -Block 0018 [ 7]: 0c3e482363104c2e -Block 0018 [ 8]: 168dea4b19461c22 -Block 0018 [ 9]: 0a430224f27650db -Block 0018 [ 10]: 5876a9465dff7324 -Block 0018 [ 11]: cd5bdc51f16cdc6a -Block 0018 [ 12]: f7485bceab705b14 -Block 0018 [ 13]: 0194df9b6c93fdee -Block 0018 [ 14]: 64c4504f4cad09b6 -Block 0018 [ 15]: 39cb64e258fc4c55 -Block 0018 [ 16]: b6be51ba477832fb -Block 0018 [ 17]: a67ce79038849bc7 -Block 0018 [ 18]: 3fe1784e2a94738f -Block 0018 [ 19]: c3a849b6a92cfcfa -Block 0018 [ 20]: fcc82176f80498c2 -Block 0018 [ 21]: 263341b189902b6e -Block 0018 [ 22]: 417defc8c7f8f3c9 -Block 0018 [ 23]: f6644368b34df787 -Block 0018 [ 24]: ec2a2afb635a3784 -Block 0018 [ 25]: 0b701ff950a6425a -Block 0018 [ 26]: 9050f2cf14974fc1 -Block 0018 [ 27]: eabdb9008b5d7451 -Block 0018 [ 28]: 87294049cce968f8 -Block 0018 [ 29]: 3229fd9d6e0208d4 -Block 0018 [ 30]: 2711963d8828f89d -Block 0018 [ 31]: a36db7b573f46447 -Block 0018 [ 32]: adb0af4d022fde58 -Block 0018 [ 33]: 1ae6dfe87b9c72d0 -Block 0018 [ 34]: a84b81e0c9d4b3a3 -Block 0018 [ 35]: 2b938f9ba0f08d63 -Block 0018 [ 36]: 3636e2dbc0451bc0 -Block 0018 [ 37]: 4296eb63bdc8dbed -Block 0018 [ 38]: 55b9f09671453ea8 -Block 0018 [ 39]: ff7c0de03e212c77 -Block 0018 [ 40]: 4fe5bc2a5b762094 -Block 0018 [ 41]: aea3348becc82a97 -Block 0018 [ 42]: a0a6f19496037fd6 -Block 0018 [ 43]: 08f83b9ee8b1aec9 -Block 0018 [ 44]: c603a7b74d79d52d -Block 0018 [ 45]: 25bc006f70c29714 -Block 0018 [ 46]: 781425263a5ee427 -Block 0018 [ 47]: da4a74361607728d -Block 0018 [ 48]: dc6e928f3fcecee9 -Block 0018 [ 49]: a4e0922764d6f97f -Block 0018 [ 50]: 230b19a966032ca7 -Block 0018 [ 51]: e11298c93942a1f0 -Block 0018 [ 52]: 15a770dff2136cb8 -Block 0018 [ 53]: b99ec484f91812de -Block 0018 [ 54]: a2f500db72ef0d4e -Block 0018 [ 55]: c452e832489cccd3 -Block 0018 [ 56]: b55fbd3ae1cd35d4 -Block 0018 [ 57]: c74f7c32d7acb75f -Block 0018 [ 58]: 164e2f10659a683f -Block 0018 [ 59]: 9eb1438025013929 -Block 0018 [ 60]: 7899f290de335c1f -Block 0018 [ 61]: 18901b574e91a434 -Block 0018 [ 62]: a2a6f1685e526f95 -Block 0018 [ 63]: 077130043c8eda1b -Block 0018 [ 64]: cde5f3f6fb439b5a -Block 0018 [ 65]: b2e556df38615dc4 -Block 0018 [ 66]: b15ac399f94a6ff6 -Block 0018 [ 67]: c9647f6c2465eb54 -Block 0018 [ 68]: 3dfa14a29e41088d -Block 0018 [ 69]: 5e9712b7ec261592 -Block 0018 [ 70]: 9bbd51d4b33f949a -Block 0018 [ 71]: 10ac40fab5131993 -Block 0018 [ 72]: 91d646159065a62d -Block 0018 [ 73]: 3fbc0be21b7cedf9 -Block 0018 [ 74]: d6693caf5b42f0e4 -Block 0018 [ 75]: ae9de9793e268970 -Block 0018 [ 76]: 3c53254b71f4fa2d -Block 0018 [ 77]: 55b9ba93b4d18f36 -Block 0018 [ 78]: 2bb3e1e9c076965b -Block 0018 [ 79]: 45d215bb3c731484 -Block 0018 [ 80]: c3944831932612a0 -Block 0018 [ 81]: 7fd4c8b7fa48ffaa -Block 0018 [ 82]: ec86027bbdf08fe2 -Block 0018 [ 83]: c8a4d2c4a28d0b45 -Block 0018 [ 84]: 795c2d1e57a61e77 -Block 0018 [ 85]: 92bf81b1f4d87b5a -Block 0018 [ 86]: 1ef911d4a9425b17 -Block 0018 [ 87]: 6d25fa4b3185b9d4 -Block 0018 [ 88]: a93f54aa4124c757 -Block 0018 [ 89]: 48af4d4768aecbee -Block 0018 [ 90]: 35d4abed720841ed -Block 0018 [ 91]: 665b3ac85fc4ee43 -Block 0018 [ 92]: 7ab4ca6ce7050e88 -Block 0018 [ 93]: 5c153804cce23a8e -Block 0018 [ 94]: 08a7790b6ae73d7e -Block 0018 [ 95]: 783cf66f52f2e00f -Block 0018 [ 96]: f7b816646210de2b -Block 0018 [ 97]: 09b82cc60113ef18 -Block 0018 [ 98]: f01c85f079ba8c5d -Block 0018 [ 99]: a6b659870e6f818c -Block 0018 [100]: 3455c90f45c36368 -Block 0018 [101]: 4aaff880c2bf4336 -Block 0018 [102]: 3ca38b4514afaf7b -Block 0018 [103]: ae6baefa48127298 -Block 0018 [104]: 56c02afca5fa1ee6 -Block 0018 [105]: 276b9dc16980b90f -Block 0018 [106]: 3b7059c3608de518 -Block 0018 [107]: daafa75eb308f5d4 -Block 0018 [108]: 5106f5a61bf578e2 -Block 0018 [109]: 61298f9f09494838 -Block 0018 [110]: 898ce468450ba934 -Block 0018 [111]: 4603cddb732f5d23 -Block 0018 [112]: 4f992f8582a5558d -Block 0018 [113]: c04fa5bcc8962b01 -Block 0018 [114]: e7a91e75d0fb9d85 -Block 0018 [115]: 0d8618021c04f84f -Block 0018 [116]: 44805dbf1d4e2f5f -Block 0018 [117]: 1e3e39a6076048c9 -Block 0018 [118]: dce41a86d7fb8643 -Block 0018 [119]: 70645bbe501fe7a4 -Block 0018 [120]: 4e47b5e159be52ce -Block 0018 [121]: 87f87906a56eb933 -Block 0018 [122]: e3d1788b0c2aba8b -Block 0018 [123]: 33be685aa22ab3ee -Block 0018 [124]: 8ced6b6f38143c6c -Block 0018 [125]: 7423f8ec9a516e00 -Block 0018 [126]: d7f7c1ff44c6d67d -Block 0018 [127]: f23b8867d4dd6fe1 -Block 0019 [ 0]: e68c94b2460ec841 -Block 0019 [ 1]: 99aaac0b34f4f8b7 -Block 0019 [ 2]: 3c66c650488686ee -Block 0019 [ 3]: 006374c400feb21d -Block 0019 [ 4]: eea0a1659a2c98e5 -Block 0019 [ 5]: 780c33d6870d93a5 -Block 0019 [ 6]: 2194f53780f57e6d -Block 0019 [ 7]: 151aadf89b99214b -Block 0019 [ 8]: 8e2994935a4ace33 -Block 0019 [ 9]: 3fea9a95dd889748 -Block 0019 [ 10]: 25bda6a6de6c9a02 -Block 0019 [ 11]: e2e31f2388fb26bb -Block 0019 [ 12]: e67486341d841440 -Block 0019 [ 13]: 633ac48051c0a0f1 -Block 0019 [ 14]: 62ebe294b85f42bf -Block 0019 [ 15]: 4ae4d2d157c1aa18 -Block 0019 [ 16]: 82e4215bf4d93f58 -Block 0019 [ 17]: a2ca18667bd8f7ff -Block 0019 [ 18]: 3037c66438e88973 -Block 0019 [ 19]: da18a6f3fef45119 -Block 0019 [ 20]: 3437a3d396527380 -Block 0019 [ 21]: 13cee0476a7e3f5f -Block 0019 [ 22]: 8ec5610e05e28f37 -Block 0019 [ 23]: 4d48ec3452f91e7b -Block 0019 [ 24]: 3a793c6dde0c489d -Block 0019 [ 25]: 7b79a433882146fd -Block 0019 [ 26]: 6e8562d28af6c353 -Block 0019 [ 27]: 9a0b815272ab6b2d -Block 0019 [ 28]: 989089e323496f7e -Block 0019 [ 29]: 30df1bdc4aea0225 -Block 0019 [ 30]: 6a3a564f55f4b3dd -Block 0019 [ 31]: fc50dc83bceb546c -Block 0019 [ 32]: 447e4405aa759904 -Block 0019 [ 33]: 58266b1f78f2ac2e -Block 0019 [ 34]: 31dd27bf51d0d63a -Block 0019 [ 35]: 735e46b955e39717 -Block 0019 [ 36]: 1137bbe17d3b419b -Block 0019 [ 37]: ce95092221294cf2 -Block 0019 [ 38]: b6d43f6023590ef7 -Block 0019 [ 39]: b9d3ffdc98719c65 -Block 0019 [ 40]: ff3be96758e36733 -Block 0019 [ 41]: a12599993003b4a9 -Block 0019 [ 42]: 5223772f965c4f8e -Block 0019 [ 43]: a78299a08abeb803 -Block 0019 [ 44]: e90d78a70c0e8e0f -Block 0019 [ 45]: 74ecc0d57a293296 -Block 0019 [ 46]: d4ca0fa2a509d91e -Block 0019 [ 47]: 86618f44fa0a98d8 -Block 0019 [ 48]: daffa696aa145a98 -Block 0019 [ 49]: f80e1bbe12db884f -Block 0019 [ 50]: ebe33c1b5affb1fd -Block 0019 [ 51]: 44d448690ffbe1c9 -Block 0019 [ 52]: 9ca41894f7191203 -Block 0019 [ 53]: 1d2a66481d0d7db1 -Block 0019 [ 54]: 76920c05c68f5a3e -Block 0019 [ 55]: 0324f0278705d5af -Block 0019 [ 56]: 3452c35f0f075a17 -Block 0019 [ 57]: cde1816fe56e2fbe -Block 0019 [ 58]: 61abb618c5c0121c -Block 0019 [ 59]: f38bbdf15d765970 -Block 0019 [ 60]: 64706d4efadddf8f -Block 0019 [ 61]: 668bacefb840fa45 -Block 0019 [ 62]: 81231b2e6d5a7228 -Block 0019 [ 63]: e0d93a1b5bcd2131 -Block 0019 [ 64]: 0bacf6789927c3e9 -Block 0019 [ 65]: 7450e8b30f92531e -Block 0019 [ 66]: 05870796723598e7 -Block 0019 [ 67]: 50387864aef7f3a6 -Block 0019 [ 68]: 2a5cc79b01e2d90b -Block 0019 [ 69]: d51ae1a77c1dd0c4 -Block 0019 [ 70]: d79de203232c010b -Block 0019 [ 71]: 4f9bdd24343d3330 -Block 0019 [ 72]: c1aaa24ff29cfcdf -Block 0019 [ 73]: c84dbb8f6f12e921 -Block 0019 [ 74]: dc444657b3bf3c81 -Block 0019 [ 75]: 18267cb2799f6008 -Block 0019 [ 76]: d9f2cb8a341fe77f -Block 0019 [ 77]: e291cf5c2060b212 -Block 0019 [ 78]: 46cb0528271d6244 -Block 0019 [ 79]: b734aca21de50d61 -Block 0019 [ 80]: 5a5de201bf6a2673 -Block 0019 [ 81]: 19a117528479480c -Block 0019 [ 82]: e79b301c2d155dd0 -Block 0019 [ 83]: 0be0429e25f3d73f -Block 0019 [ 84]: cf50115c5a8756f4 -Block 0019 [ 85]: ee9df0785e86b82c -Block 0019 [ 86]: 867ee8925e4a829f -Block 0019 [ 87]: db6994d375cd1c5d -Block 0019 [ 88]: 613424ffe028a72b -Block 0019 [ 89]: cf2819132c6b90fb -Block 0019 [ 90]: ae7c354a78ceefa7 -Block 0019 [ 91]: 6ee261ad0d0a6524 -Block 0019 [ 92]: e063d7b6752108d8 -Block 0019 [ 93]: d400d60801ad65fe -Block 0019 [ 94]: 056813fbb4b32958 -Block 0019 [ 95]: da6538dd2c171c1e -Block 0019 [ 96]: f5620f8890c1353e -Block 0019 [ 97]: c3915a2bedda38fc -Block 0019 [ 98]: f28944cea0d819ed -Block 0019 [ 99]: 07e0317ad31d983a -Block 0019 [100]: 54bdd629f270f9db -Block 0019 [101]: 96936d62fda5b903 -Block 0019 [102]: ca7bf41d8b5afa41 -Block 0019 [103]: 4930a62f8787eef7 -Block 0019 [104]: 055401e28cace080 -Block 0019 [105]: b22d6a0368a17683 -Block 0019 [106]: 8153868647380d50 -Block 0019 [107]: 72e5c3f1ec2ccb24 -Block 0019 [108]: 5ef04cea652960ab -Block 0019 [109]: d1c491afee065791 -Block 0019 [110]: 9123e3d65be41ef6 -Block 0019 [111]: 5e573c21771a6e0f -Block 0019 [112]: 4c233c6896ad2bd8 -Block 0019 [113]: 0917fac4bef0e86a -Block 0019 [114]: d5eba161cdd4b19c -Block 0019 [115]: 231e08de94edb6a1 -Block 0019 [116]: 4238a5d0b6fee732 -Block 0019 [117]: 2ec30accc4214752 -Block 0019 [118]: 08adfd6dbb5c724f -Block 0019 [119]: 2bba105466e32b7c -Block 0019 [120]: e55defcb46625080 -Block 0019 [121]: 855a7f9b856df6b7 -Block 0019 [122]: 1a800bd9d8f62493 -Block 0019 [123]: 5c5a069470c15cc2 -Block 0019 [124]: fcc3739e177a54e1 -Block 0019 [125]: 76a1b592006e7414 -Block 0019 [126]: 5e597cdfa3b799a0 -Block 0019 [127]: c57e11887fcf795c -Block 0020 [ 0]: c54d3e2cb71bdcb3 -Block 0020 [ 1]: 045b75b5a325da89 -Block 0020 [ 2]: b9e14f31c00c36a4 -Block 0020 [ 3]: 966cda36e60c59d2 -Block 0020 [ 4]: 1f2fed12ae03196a -Block 0020 [ 5]: 394d0e3f47889ec9 -Block 0020 [ 6]: 1dfa30485d24f092 -Block 0020 [ 7]: 85fc989151ff8366 -Block 0020 [ 8]: 178abd2a02a4a8e9 -Block 0020 [ 9]: 0f95d8d8b4b33b17 -Block 0020 [ 10]: 7ce14c39ea336a61 -Block 0020 [ 11]: 8588e56ba55173b4 -Block 0020 [ 12]: 7c9f9fef0393618e -Block 0020 [ 13]: 3981488aa716fff4 -Block 0020 [ 14]: 2de3fcfec310f1f7 -Block 0020 [ 15]: 64c8abbb27c8ccb6 -Block 0020 [ 16]: a71a061b8aad5f01 -Block 0020 [ 17]: 4a8299be564abd67 -Block 0020 [ 18]: 928630af5033c132 -Block 0020 [ 19]: 35c2cf541f2c3539 -Block 0020 [ 20]: 934b011ac1d5f33f -Block 0020 [ 21]: f0261dfa4a0b84ff -Block 0020 [ 22]: a88a1ff2595f7ae4 -Block 0020 [ 23]: a03126345067fa76 -Block 0020 [ 24]: 3df3835b2c16eb32 -Block 0020 [ 25]: 60b4166b25329b80 -Block 0020 [ 26]: a8d471f7d45ff5ba -Block 0020 [ 27]: 2e6fe056562554d2 -Block 0020 [ 28]: 3d07f858142c2fe3 -Block 0020 [ 29]: dddfeca432ccd3ba -Block 0020 [ 30]: 8400fb66a8db5b16 -Block 0020 [ 31]: a748bca7d7302b54 -Block 0020 [ 32]: f925832d18b51065 -Block 0020 [ 33]: 77cb3f75fde4d890 -Block 0020 [ 34]: f35d2422522de8c3 -Block 0020 [ 35]: dfa7fde45521747b -Block 0020 [ 36]: df0695c8e0139c4d -Block 0020 [ 37]: 51047eb7b5dd8aba -Block 0020 [ 38]: 7c44efc45de0bcfd -Block 0020 [ 39]: 1491c82e92645137 -Block 0020 [ 40]: 6e6ecc04f4212e26 -Block 0020 [ 41]: 9d5b9ebb54f1e541 -Block 0020 [ 42]: 598e7f273d8a08ee -Block 0020 [ 43]: 3b6e27abfb649a5a -Block 0020 [ 44]: d0c6518b5a6a4791 -Block 0020 [ 45]: 2cbcf2c3c944b133 -Block 0020 [ 46]: ac7f945b5e493475 -Block 0020 [ 47]: 028cefefd0a89765 -Block 0020 [ 48]: de50ac74cb3dfc57 -Block 0020 [ 49]: c1f212cb7ff0e154 -Block 0020 [ 50]: 6c12225df148f8c9 -Block 0020 [ 51]: a531d30641fb8f3e -Block 0020 [ 52]: feb48fd4409e38ea -Block 0020 [ 53]: 7d97606342d70db7 -Block 0020 [ 54]: 25e4dc7a78a45ed1 -Block 0020 [ 55]: 213b0ad8218be4b2 -Block 0020 [ 56]: 907b03533fe689f6 -Block 0020 [ 57]: 0254dbaa7b4d1cb4 -Block 0020 [ 58]: fa2127039a17e414 -Block 0020 [ 59]: 8e42e9379fc70e9a -Block 0020 [ 60]: 7d6fcd35dfdc3df8 -Block 0020 [ 61]: 7c117c259b7f677b -Block 0020 [ 62]: ced9a88d8b6d21b9 -Block 0020 [ 63]: 3cd93f07ac90b6dd -Block 0020 [ 64]: 3f64026f2f2d5d21 -Block 0020 [ 65]: 918da82771c98e07 -Block 0020 [ 66]: fa0bcaa023b52934 -Block 0020 [ 67]: d254161d884dab65 -Block 0020 [ 68]: 0ab9fb2e38f39aa0 -Block 0020 [ 69]: 9b0ad40ca7a7e53d -Block 0020 [ 70]: a59718f79af53441 -Block 0020 [ 71]: 61dd123c0753cd8b -Block 0020 [ 72]: 9be36512f98bf123 -Block 0020 [ 73]: 1b10f5701374b409 -Block 0020 [ 74]: d2a9ecd263a43767 -Block 0020 [ 75]: 5588fcb390d08fc6 -Block 0020 [ 76]: 48c7d0ccbd865afa -Block 0020 [ 77]: baf1f14150d0c6ac -Block 0020 [ 78]: a513e811bed260aa -Block 0020 [ 79]: e2256898e554eabe -Block 0020 [ 80]: 245d08410ddc2073 -Block 0020 [ 81]: cac07dbc1480586f -Block 0020 [ 82]: 7af04b8310ad0ece -Block 0020 [ 83]: 5a12c12021d4c398 -Block 0020 [ 84]: 6e6771bb7a6146d5 -Block 0020 [ 85]: 3fec7cc7d0f05f06 -Block 0020 [ 86]: dac5d20d4a7f0558 -Block 0020 [ 87]: 36e29accf65b0fbf -Block 0020 [ 88]: 17f4cafd73b22af1 -Block 0020 [ 89]: bc3daf981eae353f -Block 0020 [ 90]: 9ea48362e9375a28 -Block 0020 [ 91]: dfe05001142b3662 -Block 0020 [ 92]: 66a26ef9cb3c9a62 -Block 0020 [ 93]: 7d9fece4c8e9060d -Block 0020 [ 94]: 67a9a26a7af4d68f -Block 0020 [ 95]: 0c73007e1b65eeb4 -Block 0020 [ 96]: bb0815188f59f189 -Block 0020 [ 97]: 532b8112c89fb754 -Block 0020 [ 98]: fe870b6acefedf44 -Block 0020 [ 99]: 87ffc30535a4e771 -Block 0020 [100]: 3065fc324181dea9 -Block 0020 [101]: bb66f0d2a87bebb6 -Block 0020 [102]: ec737a39dcfc4886 -Block 0020 [103]: a790b38df1cd0369 -Block 0020 [104]: fde7bcafccb7dec9 -Block 0020 [105]: fab95e7a5e1e9896 -Block 0020 [106]: 8fa2fb1044142009 -Block 0020 [107]: 13369c517008a55a -Block 0020 [108]: 51ebff2547ca9d7d -Block 0020 [109]: b4fec36f856ee016 -Block 0020 [110]: 522b8ce6e5135485 -Block 0020 [111]: 875bae25f8ac8cb3 -Block 0020 [112]: eff897d039cdc9b9 -Block 0020 [113]: 99758f2baea77a83 -Block 0020 [114]: d58ad76dd94db6e5 -Block 0020 [115]: 9b328f1e84364f75 -Block 0020 [116]: 4243923d22b1457d -Block 0020 [117]: 96de22ee64f80846 -Block 0020 [118]: 9663e19dc0808f0e -Block 0020 [119]: a31787db1626f171 -Block 0020 [120]: fe941f17981bedc3 -Block 0020 [121]: 24925bbf73d23de8 -Block 0020 [122]: d87e2a9df7952d66 -Block 0020 [123]: 163a92313113e2b6 -Block 0020 [124]: 8fcde73c94fb861b -Block 0020 [125]: 599d993568adde24 -Block 0020 [126]: ef53a06b7dc3ab34 -Block 0020 [127]: 6164df011b9803ce -Block 0021 [ 0]: b4359aafad15cb66 -Block 0021 [ 1]: 7ce75a4dc9d24ad5 -Block 0021 [ 2]: 80628ac68feba208 -Block 0021 [ 3]: 647a73904f76cf42 -Block 0021 [ 4]: 054f3fa5406f291c -Block 0021 [ 5]: 2a8a0ce8ca579a6c -Block 0021 [ 6]: 241db1a3fca580d8 -Block 0021 [ 7]: 53be796a6148af72 -Block 0021 [ 8]: 2c3f7ef0d9fa0fa6 -Block 0021 [ 9]: 232118c9bc2c1821 -Block 0021 [ 10]: 4732801687b6ad99 -Block 0021 [ 11]: 091eede831c70741 -Block 0021 [ 12]: 390b7bad92e5aad4 -Block 0021 [ 13]: 0e3bd13e7b8cf2b2 -Block 0021 [ 14]: a5d92db9aad5ebcb -Block 0021 [ 15]: 33096e82e7d9a193 -Block 0021 [ 16]: 345a736d05b8ae2e -Block 0021 [ 17]: 3cf0b101b23e68e3 -Block 0021 [ 18]: 3f206123e8289d5e -Block 0021 [ 19]: b3b82744857e6420 -Block 0021 [ 20]: 09fe2ef20ed5f50e -Block 0021 [ 21]: 309b9c0a7ebde4b3 -Block 0021 [ 22]: 110b6319f949d6d6 -Block 0021 [ 23]: 33afd02b5efd01cb -Block 0021 [ 24]: 1c64e2a0bf49aa3b -Block 0021 [ 25]: 91f7d6182f04c9e0 -Block 0021 [ 26]: f838cbeb18e1c36a -Block 0021 [ 27]: 83b0dbfaa26dd968 -Block 0021 [ 28]: b4bd77cde2e42069 -Block 0021 [ 29]: 92fb33478ed213fc -Block 0021 [ 30]: bd155dc19753e426 -Block 0021 [ 31]: b3baebd3c6baecac -Block 0021 [ 32]: 5503e71b97973de3 -Block 0021 [ 33]: 36191e2eb2082f5a -Block 0021 [ 34]: ee885969b22aad9c -Block 0021 [ 35]: 2134f58df159795c -Block 0021 [ 36]: dcf3454302715c0c -Block 0021 [ 37]: 96d6f6d96728028f -Block 0021 [ 38]: a6c2214609c42c1b -Block 0021 [ 39]: b4c9277ac8edc055 -Block 0021 [ 40]: 5ee3a94d1fbb0c98 -Block 0021 [ 41]: 5c6cc1572251a5df -Block 0021 [ 42]: 65460fd6055384d0 -Block 0021 [ 43]: 53046124ab0bb1ce -Block 0021 [ 44]: c1588ca311f6229b -Block 0021 [ 45]: af4c3450fd49bde2 -Block 0021 [ 46]: d8bd84abebca4b44 -Block 0021 [ 47]: 0dbd468e2ce4c736 -Block 0021 [ 48]: a05732cb618fb3d2 -Block 0021 [ 49]: 4285ee522591c15a -Block 0021 [ 50]: 226f73bbeb355b3d -Block 0021 [ 51]: 71eaaa9babe05328 -Block 0021 [ 52]: 34e517122258eb4f -Block 0021 [ 53]: 8db93c1689432f17 -Block 0021 [ 54]: cc042f252799cbdc -Block 0021 [ 55]: eb7bc92c56f1a160 -Block 0021 [ 56]: 93e3f8caf83238ff -Block 0021 [ 57]: 3d09fe62b2cec6ee -Block 0021 [ 58]: 0b3506ec7cc5c28b -Block 0021 [ 59]: 593b5033fc8e18eb -Block 0021 [ 60]: 09082196bc215c48 -Block 0021 [ 61]: 653aac366e202636 -Block 0021 [ 62]: d7c8fc4e7aff96b2 -Block 0021 [ 63]: 091ebda3ffbaba3e -Block 0021 [ 64]: d3b37b144c8d36ef -Block 0021 [ 65]: 88a95e9be1dc5dc8 -Block 0021 [ 66]: 083c1a074ea5a5e9 -Block 0021 [ 67]: 34a11d71b4925a91 -Block 0021 [ 68]: ac3f2081b74276e1 -Block 0021 [ 69]: e178dc364e9ce587 -Block 0021 [ 70]: fc358da58b918d09 -Block 0021 [ 71]: c98f6b556d55d177 -Block 0021 [ 72]: aef7971cfa9ff37d -Block 0021 [ 73]: b5d411fd662c5fba -Block 0021 [ 74]: 4e2562e0dbfdcbcb -Block 0021 [ 75]: b03ab288ba43ac82 -Block 0021 [ 76]: 9b7cd3120b8eecce -Block 0021 [ 77]: d311e41b9b961a2c -Block 0021 [ 78]: d74f38c1f470407b -Block 0021 [ 79]: b436ea598c38c2e8 -Block 0021 [ 80]: be7c8e0d99fcfa5b -Block 0021 [ 81]: 277bb5b7d604b0f3 -Block 0021 [ 82]: 95aa4567c7c08ced -Block 0021 [ 83]: b983c108c9552cc5 -Block 0021 [ 84]: dad3e1c67fc6291e -Block 0021 [ 85]: eea86a2a4fa30ee2 -Block 0021 [ 86]: 8e5e499491ad8d27 -Block 0021 [ 87]: c16da828dbb58de5 -Block 0021 [ 88]: aa1c634f7b67da81 -Block 0021 [ 89]: f6880237a2459b29 -Block 0021 [ 90]: 2cfc0b5833399be9 -Block 0021 [ 91]: 3714e3f38337f68a -Block 0021 [ 92]: 31d6460f7d0e5979 -Block 0021 [ 93]: 2caa43efea4389c2 -Block 0021 [ 94]: 4386b7afe0d31674 -Block 0021 [ 95]: 85fb37a557a28138 -Block 0021 [ 96]: 9cbbd44c38af6793 -Block 0021 [ 97]: bee341aebbcfe36c -Block 0021 [ 98]: 674ce8f742369cbb -Block 0021 [ 99]: 856b0b350bae5187 -Block 0021 [100]: 02a68a5823e3b954 -Block 0021 [101]: 6704e91be87c9ea0 -Block 0021 [102]: d92888c4a8c08134 -Block 0021 [103]: 87472fbfbc2fcfd5 -Block 0021 [104]: a50169e2fa648772 -Block 0021 [105]: 4feb188466f7e52d -Block 0021 [106]: 0d79238c73a589fa -Block 0021 [107]: 6332ffb33d56c49c -Block 0021 [108]: 68607184ed0754b1 -Block 0021 [109]: f272d2e8b08e7a34 -Block 0021 [110]: a968fd194564013f -Block 0021 [111]: 60e08b245657d2b2 -Block 0021 [112]: b473337ba3a572da -Block 0021 [113]: bdb28b111b33fcc1 -Block 0021 [114]: 7e4fc761ee70caf0 -Block 0021 [115]: b3fa3d33d9bf2517 -Block 0021 [116]: 93d97291bed8d833 -Block 0021 [117]: d8ee5c9a49a96764 -Block 0021 [118]: bb2bce5f4a8040e0 -Block 0021 [119]: 266fd5ba94493f99 -Block 0021 [120]: ea3e1b720fc5638a -Block 0021 [121]: 7ec3443cf459c697 -Block 0021 [122]: 670b59b62d2c1552 -Block 0021 [123]: 7ea24423e5485f69 -Block 0021 [124]: 86a381d3e697ec37 -Block 0021 [125]: 7ef381fd980cd373 -Block 0021 [126]: 4d97d8f2f15a08fd -Block 0021 [127]: f241c79c4336e5ee -Block 0022 [ 0]: 813e36b57f736f0e -Block 0022 [ 1]: 345edbccfd655060 -Block 0022 [ 2]: 45f4ada44a2382e7 -Block 0022 [ 3]: 62cd805ccbcf63e1 -Block 0022 [ 4]: 2609d71d9286f6d5 -Block 0022 [ 5]: 39eb81718e588a4c -Block 0022 [ 6]: 20b478f3eb7e3cc2 -Block 0022 [ 7]: 253c29e9bedcefc1 -Block 0022 [ 8]: 08004243908f4f1d -Block 0022 [ 9]: b7a67c83f293d403 -Block 0022 [ 10]: 1911fd2dda85e2f8 -Block 0022 [ 11]: 70f5f853b83b5dd7 -Block 0022 [ 12]: a67f4eba9920c6e3 -Block 0022 [ 13]: 56f13344621a0e61 -Block 0022 [ 14]: 971f77f862b273dc -Block 0022 [ 15]: e12eefe0abcc5b4e -Block 0022 [ 16]: 59b4f8f1a60fed17 -Block 0022 [ 17]: 2051dbd0c486d542 -Block 0022 [ 18]: 7f6423db1c459ead -Block 0022 [ 19]: 85293e221fc0b143 -Block 0022 [ 20]: d96e5034170a075a -Block 0022 [ 21]: c7c39f32dcaf4a9f -Block 0022 [ 22]: 2a880940c67864c4 -Block 0022 [ 23]: a54c6f2d14dd1e7e -Block 0022 [ 24]: 6dfc7feebdf6b0c7 -Block 0022 [ 25]: 716b53a52f1ca01e -Block 0022 [ 26]: ee494ea0dcd25617 -Block 0022 [ 27]: 9da47bea3267169d -Block 0022 [ 28]: 9b1cedca1279315e -Block 0022 [ 29]: a05e91f4da37ba4b -Block 0022 [ 30]: 3f9012c056d9ea0a -Block 0022 [ 31]: 9eafd586517cf956 -Block 0022 [ 32]: 33fc7e8fb52d11ce -Block 0022 [ 33]: 360c77ad386602e1 -Block 0022 [ 34]: 239bc09dbae396f3 -Block 0022 [ 35]: db564062b886e0db -Block 0022 [ 36]: 5b99052adc7fb1f4 -Block 0022 [ 37]: afbba2175808419a -Block 0022 [ 38]: 8584484a2cf421f3 -Block 0022 [ 39]: df26603c940349d7 -Block 0022 [ 40]: d44ba11ddfaa77d3 -Block 0022 [ 41]: ff903fbd137aa9b3 -Block 0022 [ 42]: e92191a967f00fe5 -Block 0022 [ 43]: eeacdc65c294236a -Block 0022 [ 44]: 8efaeac4c8bfc2c6 -Block 0022 [ 45]: 65842ccf54771329 -Block 0022 [ 46]: ff0a8a16832baa5f -Block 0022 [ 47]: dc2d92bd7ea194c3 -Block 0022 [ 48]: bb6baaa1316affbc -Block 0022 [ 49]: 9dba26c40d1f4c5c -Block 0022 [ 50]: 5c5dcaf5cc029b7b -Block 0022 [ 51]: 76dde8e5937ed9fa -Block 0022 [ 52]: 8c6912cf71d1b0f7 -Block 0022 [ 53]: c291157fa8faf585 -Block 0022 [ 54]: 846626675908e472 -Block 0022 [ 55]: 703c628a4b8160db -Block 0022 [ 56]: ba20a5ac7c56f3c8 -Block 0022 [ 57]: aeeda4e5faf9bd4f -Block 0022 [ 58]: 66a610879006072d -Block 0022 [ 59]: 056d180bd4f6af2f -Block 0022 [ 60]: 7505b0cdb9c93e64 -Block 0022 [ 61]: 0293ba0f95b4517e -Block 0022 [ 62]: befb683208444571 -Block 0022 [ 63]: 69035d1ab4c773c5 -Block 0022 [ 64]: 6b53ad1a6b633732 -Block 0022 [ 65]: 7942fdfc3c8d30fd -Block 0022 [ 66]: f631898c080bd8cf -Block 0022 [ 67]: 16eca90577600ed0 -Block 0022 [ 68]: 7029d3f17b6914d0 -Block 0022 [ 69]: 4779698217fce0c1 -Block 0022 [ 70]: 2a8b2a94619361dd -Block 0022 [ 71]: 280f6adcac49f9b9 -Block 0022 [ 72]: 42771780bbf292ed -Block 0022 [ 73]: 486b0fb39b59fd26 -Block 0022 [ 74]: ea95b24743c40e47 -Block 0022 [ 75]: 75dd1f2a65fc4348 -Block 0022 [ 76]: 9dcfc10e5d7d78f6 -Block 0022 [ 77]: 2cb8a82aafe24993 -Block 0022 [ 78]: 57e2a0c1b90752a5 -Block 0022 [ 79]: 6ec85892729bb3e9 -Block 0022 [ 80]: d7656c1d56dbcecf -Block 0022 [ 81]: 8f73225a3350f820 -Block 0022 [ 82]: 477edcbc02afc238 -Block 0022 [ 83]: e4275a1b9aa7e943 -Block 0022 [ 84]: 3ae96dad9513e87b -Block 0022 [ 85]: fb7fa4b503184cbd -Block 0022 [ 86]: 3ef220b5ca9bd822 -Block 0022 [ 87]: 6cc1b23ce216063c -Block 0022 [ 88]: a8bfec1577b858b5 -Block 0022 [ 89]: bc88a540cf4ccea0 -Block 0022 [ 90]: 8ef8ff6f9d2b187b -Block 0022 [ 91]: 87c6df841301e4fe -Block 0022 [ 92]: 63403f90699e4971 -Block 0022 [ 93]: 172ccd9b90911d01 -Block 0022 [ 94]: 627145555f3ca629 -Block 0022 [ 95]: 9598aa5a5d03ad85 -Block 0022 [ 96]: d1a9fd862eaad482 -Block 0022 [ 97]: eb84b9bd1db4e5f9 -Block 0022 [ 98]: a4e82f816e247783 -Block 0022 [ 99]: fdb966659f11201c -Block 0022 [100]: 54f4ceecbb73d1fd -Block 0022 [101]: 31237b6a155ac335 -Block 0022 [102]: ed9cdd6bc0440c99 -Block 0022 [103]: 5df61b5eafba2445 -Block 0022 [104]: c2e8a0b81e9f2861 -Block 0022 [105]: 50d50587c5ccf4d4 -Block 0022 [106]: 9f798cca5d417467 -Block 0022 [107]: e1a40ba6506cd7d9 -Block 0022 [108]: 14f6fbba5f8381b9 -Block 0022 [109]: 1507d17ae17e99e5 -Block 0022 [110]: 5b6a8344c3bf8a4e -Block 0022 [111]: 3a4b5da9f312b9e7 -Block 0022 [112]: 980d402ac279c4a1 -Block 0022 [113]: 4a83e58717bfdf2e -Block 0022 [114]: edfda956f994881e -Block 0022 [115]: dd928d191f2bad0f -Block 0022 [116]: 32f2b58f81e9db2e -Block 0022 [117]: 795786215883c510 -Block 0022 [118]: 2ea35a3be27dc59a -Block 0022 [119]: 696cb31e49444600 -Block 0022 [120]: d37ca87ae65fe96b -Block 0022 [121]: 7db487549599b66e -Block 0022 [122]: 02a9a74bad372257 -Block 0022 [123]: 81c7c8d7e3864a39 -Block 0022 [124]: dcb6a7a05eeafd74 -Block 0022 [125]: 899c2040fa48c0dd -Block 0022 [126]: 1ba5009a290db5af -Block 0022 [127]: 90f532941e285313 -Block 0023 [ 0]: d92feaf9ce8f832f -Block 0023 [ 1]: 3de3b81d2dab8116 -Block 0023 [ 2]: cf1e8cca6963628c -Block 0023 [ 3]: 07cb29d6ba973354 -Block 0023 [ 4]: c348b52ae94fbd89 -Block 0023 [ 5]: 61ce2eecdec8a31b -Block 0023 [ 6]: 82a2130eaea128dc -Block 0023 [ 7]: 4f8aa3e0d7d6710c -Block 0023 [ 8]: bcd653f901fb9f3b -Block 0023 [ 9]: 3bb0a8d09248a0e1 -Block 0023 [ 10]: 310899a7c559e07d -Block 0023 [ 11]: 621fb1b749c89c1d -Block 0023 [ 12]: e5dd90a69a7c2088 -Block 0023 [ 13]: df25ff336f01b4f3 -Block 0023 [ 14]: e82704f1da52db54 -Block 0023 [ 15]: 6cf8eaf00efd333b -Block 0023 [ 16]: 656e8a75c9990167 -Block 0023 [ 17]: 2495bd9a4e94b6ff -Block 0023 [ 18]: dc75566d181ba85d -Block 0023 [ 19]: 4b41a1f74adca60e -Block 0023 [ 20]: 7e2a74ac28620381 -Block 0023 [ 21]: ae2c8230deddc7ca -Block 0023 [ 22]: db57b6833bd71c5c -Block 0023 [ 23]: b98fe4728a732634 -Block 0023 [ 24]: ec0bdcfb62bf1944 -Block 0023 [ 25]: f118264665f3c202 -Block 0023 [ 26]: cbb5a036c33319fe -Block 0023 [ 27]: f327b9bae21d24fe -Block 0023 [ 28]: 4478291d73a3bf0d -Block 0023 [ 29]: e5fb606769ddfb31 -Block 0023 [ 30]: f523956060e94a9a -Block 0023 [ 31]: 8c32c1450c832977 -Block 0023 [ 32]: 430f30e003942c3b -Block 0023 [ 33]: 5b8dacd457d7041a -Block 0023 [ 34]: 512765b9187e2778 -Block 0023 [ 35]: 34683aff41f7d9d6 -Block 0023 [ 36]: 16ded03fb6edc604 -Block 0023 [ 37]: 60f18b90ca5ccbce -Block 0023 [ 38]: 26afa948ec150fdd -Block 0023 [ 39]: f1572bab289539ae -Block 0023 [ 40]: 54c85f3574d44104 -Block 0023 [ 41]: d7ae5531e526625c -Block 0023 [ 42]: 48ceb1160c16bc68 -Block 0023 [ 43]: a7f5980b2fef07ed -Block 0023 [ 44]: b0e154d525eab517 -Block 0023 [ 45]: 354c61f188ac9c85 -Block 0023 [ 46]: 1735825e0dcbb3c8 -Block 0023 [ 47]: 6c85a29988884a89 -Block 0023 [ 48]: 183d32c1c7b75210 -Block 0023 [ 49]: 1c61dd508c241991 -Block 0023 [ 50]: 5c1749abe0f7f0e1 -Block 0023 [ 51]: dfd50644c2722393 -Block 0023 [ 52]: a32f6e257045aa4f -Block 0023 [ 53]: 5f0d63a2fa6b9db5 -Block 0023 [ 54]: 8137c4a1649ff49e -Block 0023 [ 55]: 0361fd084a8429b4 -Block 0023 [ 56]: 2fff5a3d5978327d -Block 0023 [ 57]: 647412ac4a4a5db8 -Block 0023 [ 58]: 7c538866533b8084 -Block 0023 [ 59]: 9bd01c9630abd6e4 -Block 0023 [ 60]: 49d58e98765e7062 -Block 0023 [ 61]: d28099be1bebcfda -Block 0023 [ 62]: 4a299a576da2a4c5 -Block 0023 [ 63]: f3189872d6fb849f -Block 0023 [ 64]: 7dda31d38325b7e9 -Block 0023 [ 65]: 0f4c97f756b82ae3 -Block 0023 [ 66]: 6bb0608531658ea5 -Block 0023 [ 67]: 15eadad675329af7 -Block 0023 [ 68]: 27808f4042c4396c -Block 0023 [ 69]: 46ed46f38dd41e57 -Block 0023 [ 70]: ecf63b28dbc424ca -Block 0023 [ 71]: d39f3e9fd8c74f10 -Block 0023 [ 72]: 09bc3876def81567 -Block 0023 [ 73]: 712a20a8ac895b22 -Block 0023 [ 74]: 4d4110dc7b315e87 -Block 0023 [ 75]: 5ca2290813579508 -Block 0023 [ 76]: ca993d8a3e8fe80b -Block 0023 [ 77]: 8fa2d7afd58c99fb -Block 0023 [ 78]: 871df3e6bdd85cf8 -Block 0023 [ 79]: bd87aa5c46bcd0a5 -Block 0023 [ 80]: 29bc11f4b6940ae4 -Block 0023 [ 81]: 0f0cc784b683f458 -Block 0023 [ 82]: 3173391b65289758 -Block 0023 [ 83]: 80b49ee12ff0ea70 -Block 0023 [ 84]: ad29a311a9ac5e0c -Block 0023 [ 85]: fa4bce3853385cfd -Block 0023 [ 86]: 5ba5787462f7a889 -Block 0023 [ 87]: 8f881e91d93bb917 -Block 0023 [ 88]: 44e7b45101b23012 -Block 0023 [ 89]: 3700c0182238d7e7 -Block 0023 [ 90]: 25b2fcddc913a952 -Block 0023 [ 91]: b6187c757f862577 -Block 0023 [ 92]: 6fd30e484383d75d -Block 0023 [ 93]: 12e9bb3086090629 -Block 0023 [ 94]: 2d5019d6344d9351 -Block 0023 [ 95]: 4c5fc7108e6c87b3 -Block 0023 [ 96]: 16b1525a3b280956 -Block 0023 [ 97]: 98987e0229057d3d -Block 0023 [ 98]: fd8b47ca62cafec7 -Block 0023 [ 99]: 69fd38fae9a7c741 -Block 0023 [100]: 8c2e4f14813d552b -Block 0023 [101]: 2e9a7c9a55d324ff -Block 0023 [102]: 9b345c3bcbefe217 -Block 0023 [103]: 52962171fbaea0b7 -Block 0023 [104]: 856e0e7ac867e1ac -Block 0023 [105]: c0ebd9d4b59f5031 -Block 0023 [106]: eb5c94df7be654d7 -Block 0023 [107]: 0725acfb389c822e -Block 0023 [108]: 2ae46cf5dc01fb3d -Block 0023 [109]: 4c8c87d24c4c396d -Block 0023 [110]: 8e37af365f796e24 -Block 0023 [111]: cb454318ca6dd824 -Block 0023 [112]: 6669edae28765b15 -Block 0023 [113]: ecc90a6c75263179 -Block 0023 [114]: 91ae80ee00e213b2 -Block 0023 [115]: e4f6ae47598bd7c8 -Block 0023 [116]: d4d306030ee62936 -Block 0023 [117]: 7caa0f1a1bbb26ed -Block 0023 [118]: 2ae6972e42774638 -Block 0023 [119]: 4ecaf984d41d9d63 -Block 0023 [120]: 2d6aab1800387fb6 -Block 0023 [121]: 0a7a2961cc0f0e8c -Block 0023 [122]: 46e5b112f06ad739 -Block 0023 [123]: 44c5ad17398f4bc0 -Block 0023 [124]: 64be1d1b9194f92e -Block 0023 [125]: 3046768d16c6d93f -Block 0023 [126]: 59ac6bb60f2c9c85 -Block 0023 [127]: 95595e52b7f2152f -Block 0024 [ 0]: 421df20d08fd899e -Block 0024 [ 1]: 06490f067ca5f4c0 -Block 0024 [ 2]: 4b7bab14d2317386 -Block 0024 [ 3]: 928cb31a919ac9e0 -Block 0024 [ 4]: 8eeb69c9bf35ca26 -Block 0024 [ 5]: 3b871b2affbf59cb -Block 0024 [ 6]: 9a44775f57d70b0c -Block 0024 [ 7]: d1753e76fd4cd2f5 -Block 0024 [ 8]: 23beccd32f5a538c -Block 0024 [ 9]: 26cb1bfdc1bfe467 -Block 0024 [ 10]: d27541618bf4a7a7 -Block 0024 [ 11]: 0aa0a42080544478 -Block 0024 [ 12]: bc8f20da1a6e40e4 -Block 0024 [ 13]: e875b5a98a112900 -Block 0024 [ 14]: ca61219887cb4959 -Block 0024 [ 15]: e2493c2da5dc45cc -Block 0024 [ 16]: 376be64ae523a96d -Block 0024 [ 17]: bc26c2991a963b5d -Block 0024 [ 18]: d507fa831eb0b11c -Block 0024 [ 19]: cbb1fae2e8a7724d -Block 0024 [ 20]: 0d57265e72b6fcaf -Block 0024 [ 21]: 57bda72893b0ba2c -Block 0024 [ 22]: b1dfd60192386ed2 -Block 0024 [ 23]: dcfe908cf1bed33c -Block 0024 [ 24]: 3cf2ae1e6ba2f37b -Block 0024 [ 25]: c26c60ad1b72cec6 -Block 0024 [ 26]: 227b729e4be43c89 -Block 0024 [ 27]: f1698cc673f4b33d -Block 0024 [ 28]: 6d6a36ee935bd1be -Block 0024 [ 29]: e044d40fe77c96fd -Block 0024 [ 30]: 51f025fc9570d3b1 -Block 0024 [ 31]: 9047ccdcadfba8f3 -Block 0024 [ 32]: 4fbfd7f34c1fc530 -Block 0024 [ 33]: a21db2877a70cffe -Block 0024 [ 34]: 6779dd725caffcfa -Block 0024 [ 35]: abd46d03ab30e7e8 -Block 0024 [ 36]: 3df9ce3d3f9b8d77 -Block 0024 [ 37]: 79c4e82b1d66f2b2 -Block 0024 [ 38]: f6e56a9befd85521 -Block 0024 [ 39]: 63effa4aac8c722f -Block 0024 [ 40]: 5d95c78b470b652b -Block 0024 [ 41]: 0d49b3bd5c53de96 -Block 0024 [ 42]: 677fdc7ac25e2963 -Block 0024 [ 43]: 64cf061a259c532e -Block 0024 [ 44]: 2f9da934b23e75a0 -Block 0024 [ 45]: b8889059afbcd633 -Block 0024 [ 46]: 87268a47bdacb91a -Block 0024 [ 47]: bdd1d344a00442ce -Block 0024 [ 48]: ed2fb8fcfcccfd0f -Block 0024 [ 49]: 9702e80222aaa0a2 -Block 0024 [ 50]: b59fd3607c6f4a99 -Block 0024 [ 51]: b5a3abe17118d3f5 -Block 0024 [ 52]: b36e4548145308e8 -Block 0024 [ 53]: 9f58a90d739baeb2 -Block 0024 [ 54]: 949e5504da615608 -Block 0024 [ 55]: 8be00e3ae5fe9cae -Block 0024 [ 56]: 32c6269ff1f417d3 -Block 0024 [ 57]: a0fd7a40f50436bc -Block 0024 [ 58]: 804eddf125b05db8 -Block 0024 [ 59]: e412fa3b09805e30 -Block 0024 [ 60]: ee38f256fefee213 -Block 0024 [ 61]: 4700102c10caca7b -Block 0024 [ 62]: 7c72c70089dfa961 -Block 0024 [ 63]: bab72c9336d9b835 -Block 0024 [ 64]: 2146a5760b289949 -Block 0024 [ 65]: 9d3846479be2a556 -Block 0024 [ 66]: 6a81e0b707146bbc -Block 0024 [ 67]: 7648f0711580ddfe -Block 0024 [ 68]: aab8aee50021b344 -Block 0024 [ 69]: 38f296313d23ec72 -Block 0024 [ 70]: 04b4905eaec03ac5 -Block 0024 [ 71]: fe0f55aaeb91559f -Block 0024 [ 72]: 5fb453a232b4a989 -Block 0024 [ 73]: daa1ab85149235e2 -Block 0024 [ 74]: c825ee74fa3cfa1b -Block 0024 [ 75]: 6113b7f6fa3aa5fa -Block 0024 [ 76]: 9f3e6aea3b3be4d5 -Block 0024 [ 77]: f7d471f5f8ae3ce3 -Block 0024 [ 78]: c68f97bfab689e30 -Block 0024 [ 79]: b7c234060a797abf -Block 0024 [ 80]: 6041520f55b95a30 -Block 0024 [ 81]: 56ea11838e34faab -Block 0024 [ 82]: e2fa113ac34a4e76 -Block 0024 [ 83]: 952a842f6f1f0ea6 -Block 0024 [ 84]: 2bcdfb5279443993 -Block 0024 [ 85]: 10946fdd29e96316 -Block 0024 [ 86]: 5f908e7a28f81708 -Block 0024 [ 87]: d289b647f332fbe9 -Block 0024 [ 88]: f16d8e959f359c08 -Block 0024 [ 89]: 18601d046daf6b9f -Block 0024 [ 90]: 66214e8c17b7a365 -Block 0024 [ 91]: c6c7b0aeef79013c -Block 0024 [ 92]: dc20cc64d5a79a4c -Block 0024 [ 93]: 5187e9a6ff899eb1 -Block 0024 [ 94]: 730cac806359e63c -Block 0024 [ 95]: 9691bae04c4bbd94 -Block 0024 [ 96]: 0fa7b3a871abe79d -Block 0024 [ 97]: b3a3883ad7a4e928 -Block 0024 [ 98]: f1b2d895589851d8 -Block 0024 [ 99]: 6f905a6249a50eae -Block 0024 [100]: 4cf1840c45bca0d9 -Block 0024 [101]: 782e7ffb69c668aa -Block 0024 [102]: fe55c440f0227790 -Block 0024 [103]: dec111756b979cbc -Block 0024 [104]: 9e1621f10dc6142e -Block 0024 [105]: af92a355e0758599 -Block 0024 [106]: 1f85ba4b4b00884b -Block 0024 [107]: aff87e8f36e044cf -Block 0024 [108]: 87667d6990985f08 -Block 0024 [109]: 5e7d62dd0e2b654a -Block 0024 [110]: 984eeff01ce256d9 -Block 0024 [111]: 5d76c092a79bca15 -Block 0024 [112]: cb2ff31e3e9de68d -Block 0024 [113]: a4a6cc101833f846 -Block 0024 [114]: 0eeb05c1eac92920 -Block 0024 [115]: 3795d878dfbaaa3c -Block 0024 [116]: a363bb42a0bf4fd4 -Block 0024 [117]: 212c42d91a79e145 -Block 0024 [118]: 844305ca7ebe404e -Block 0024 [119]: c23c2a10a961d67c -Block 0024 [120]: 2038404d2ceadec9 -Block 0024 [121]: 71f48b5bff5b4c03 -Block 0024 [122]: 00d97ddde74a8b18 -Block 0024 [123]: d4a629a0f481c37b -Block 0024 [124]: a31ac02725842396 -Block 0024 [125]: 26c90ede186fd85f -Block 0024 [126]: 32d3c3f0385d16a2 -Block 0024 [127]: a58053f744dc93ad -Block 0025 [ 0]: 75e219ce652f9e9b -Block 0025 [ 1]: 5192d14a2c29f461 -Block 0025 [ 2]: ecadcc07806d90a7 -Block 0025 [ 3]: cb8f9debaf8159b8 -Block 0025 [ 4]: 922fd6b8cb6a2641 -Block 0025 [ 5]: fc1677aa64a158b1 -Block 0025 [ 6]: 0c24c2820ef42f14 -Block 0025 [ 7]: b3cd3deb0443f694 -Block 0025 [ 8]: 52b0ac996c835048 -Block 0025 [ 9]: 7b69b5d070589932 -Block 0025 [ 10]: 0381d9fcdb0803a1 -Block 0025 [ 11]: d7cf49bf4207a833 -Block 0025 [ 12]: 64bc64f604b3f54e -Block 0025 [ 13]: b37bfc379b820700 -Block 0025 [ 14]: f6fcf8867e9ed30a -Block 0025 [ 15]: 2cf52fe2e641e6cd -Block 0025 [ 16]: d9b5d1d957265528 -Block 0025 [ 17]: 456c76fd493723d9 -Block 0025 [ 18]: d09ec25592ba65e1 -Block 0025 [ 19]: 74ead8f490ea2724 -Block 0025 [ 20]: 1fcd94f345103418 -Block 0025 [ 21]: 28191af193f3b4a8 -Block 0025 [ 22]: 00ba309bea6bc75e -Block 0025 [ 23]: f820f928e042b770 -Block 0025 [ 24]: 0096864fb4a6195a -Block 0025 [ 25]: 1deb4dd4d925fc05 -Block 0025 [ 26]: 28e822e800e1f326 -Block 0025 [ 27]: 8a9e61f3ff3536f6 -Block 0025 [ 28]: 7bd53608d022cc05 -Block 0025 [ 29]: dc1da98bfbf23a80 -Block 0025 [ 30]: 335ec2757c72f04a -Block 0025 [ 31]: c699727d298109d9 -Block 0025 [ 32]: 5c4f4efb6a24011c -Block 0025 [ 33]: 45abc8326a1c11a6 -Block 0025 [ 34]: ea1ec080a5afa957 -Block 0025 [ 35]: c710f53a3016e4cf -Block 0025 [ 36]: 48bc8eae571960ee -Block 0025 [ 37]: 9717942f28632927 -Block 0025 [ 38]: baefc76649ee961b -Block 0025 [ 39]: 913d6a3d5cbebe92 -Block 0025 [ 40]: 3d486447ff8cdeb9 -Block 0025 [ 41]: 738e311c3606c310 -Block 0025 [ 42]: 752814a9b8a98007 -Block 0025 [ 43]: ea80a6739c87925e -Block 0025 [ 44]: d05607c48043b531 -Block 0025 [ 45]: 4e8077320bcb121a -Block 0025 [ 46]: db134a8b3ce51f86 -Block 0025 [ 47]: a3b62a8db4d931cb -Block 0025 [ 48]: 479838f512a07a3c -Block 0025 [ 49]: ad416f96a9c1dc62 -Block 0025 [ 50]: 2ce8d6c41e022354 -Block 0025 [ 51]: 02e88e689bb3c9bc -Block 0025 [ 52]: 4c4fa4dfd77f1efc -Block 0025 [ 53]: e481206da484d670 -Block 0025 [ 54]: 43a91e27c52cb0de -Block 0025 [ 55]: 9a3863141390c605 -Block 0025 [ 56]: db07004e00d8628d -Block 0025 [ 57]: b05ad69ed0d8db58 -Block 0025 [ 58]: aa78c6f41ae31f4c -Block 0025 [ 59]: 372bc9ff8debf9a9 -Block 0025 [ 60]: 832af3443b613cd2 -Block 0025 [ 61]: 10176ea29c715def -Block 0025 [ 62]: f1ae3f51da186219 -Block 0025 [ 63]: eb93e663b63849a0 -Block 0025 [ 64]: 0a10808e97df2cc8 -Block 0025 [ 65]: 0a8b16edfe0a46d6 -Block 0025 [ 66]: 25ee9dabd8559f47 -Block 0025 [ 67]: aae095f6613e07f8 -Block 0025 [ 68]: 6dee9a39650d583a -Block 0025 [ 69]: c8da4f9ba5efc464 -Block 0025 [ 70]: 2057651e6272cecf -Block 0025 [ 71]: 5bcf7937a601500b -Block 0025 [ 72]: 8c3097be523605ec -Block 0025 [ 73]: 12008ec70fc55a6b -Block 0025 [ 74]: 1dc40873a708a3a0 -Block 0025 [ 75]: 8550840bfb0b2a74 -Block 0025 [ 76]: 71b76f86ed93b236 -Block 0025 [ 77]: ada3b0d78299d2f3 -Block 0025 [ 78]: 196bbca1dd53c6ba -Block 0025 [ 79]: 25ae9a9b7a909ffd -Block 0025 [ 80]: 8332bc00f837a920 -Block 0025 [ 81]: bb13e06b3dcd6274 -Block 0025 [ 82]: 724e07a3c76bdcd3 -Block 0025 [ 83]: c11a941aa4678ac6 -Block 0025 [ 84]: d69d1f13fabb164e -Block 0025 [ 85]: 2d518e00e58c92ea -Block 0025 [ 86]: 698ecf7437bf07dc -Block 0025 [ 87]: c5758b279f98a217 -Block 0025 [ 88]: 4ace1d8069fb04c7 -Block 0025 [ 89]: 3a6848ca135c48a1 -Block 0025 [ 90]: 1284342c28b552e4 -Block 0025 [ 91]: a7bf09a8fb448bce -Block 0025 [ 92]: 23652822eef77d5b -Block 0025 [ 93]: ede7aa7d9975c43e -Block 0025 [ 94]: ec8d6127d93a7b37 -Block 0025 [ 95]: 38f50b3d0f17f5c9 -Block 0025 [ 96]: 91a10d4b7fe9f30b -Block 0025 [ 97]: 63112ee0f40a6241 -Block 0025 [ 98]: fad7e72daa8ad18d -Block 0025 [ 99]: 07e0f4d64d5744cc -Block 0025 [100]: aafbd22997d5cb7c -Block 0025 [101]: 76e6e220725528df -Block 0025 [102]: d540860ca129a3d4 -Block 0025 [103]: c652f20d7f2dafc6 -Block 0025 [104]: 39619c788de5f720 -Block 0025 [105]: b1153fbf6bc05c68 -Block 0025 [106]: 7936d6405a7745b0 -Block 0025 [107]: 69e1ea5b7dddab89 -Block 0025 [108]: a535615b5285f419 -Block 0025 [109]: c7039ed18206a233 -Block 0025 [110]: 0edf3cf1262dcd26 -Block 0025 [111]: 1f0b4499b2b9e8b2 -Block 0025 [112]: 671bed1ce2de5052 -Block 0025 [113]: 0e8b79824c58ca80 -Block 0025 [114]: 874458d3d760dd5a -Block 0025 [115]: 249f129d67cf59a5 -Block 0025 [116]: bc6962f83ec41f7d -Block 0025 [117]: 3b5b2bf5dbba3f76 -Block 0025 [118]: bc3213efa967e1e2 -Block 0025 [119]: 6a9208a3b0e96a13 -Block 0025 [120]: 4cc594a949c15018 -Block 0025 [121]: edc4f2d74b9ed106 -Block 0025 [122]: 17189edb9d25be84 -Block 0025 [123]: 335cacc975861bdb -Block 0025 [124]: 4e40d19267f33144 -Block 0025 [125]: fe8b5e16f077d4dd -Block 0025 [126]: eef70082d8d8ca4d -Block 0025 [127]: 0e35a18383368440 -Block 0026 [ 0]: f5fb505370677e73 -Block 0026 [ 1]: 3d8aab3e00026248 -Block 0026 [ 2]: 039ea2f2dc076a2b -Block 0026 [ 3]: 39c8d87ab919d22d -Block 0026 [ 4]: 5e4289e8494d7e21 -Block 0026 [ 5]: b62799988c90ffa4 -Block 0026 [ 6]: e4bbf6d54ec025a4 -Block 0026 [ 7]: d4906bcf299eb95f -Block 0026 [ 8]: 65430d2f59e217cf -Block 0026 [ 9]: 82d0ebd6510efa74 -Block 0026 [ 10]: 7631d5fc46073cb9 -Block 0026 [ 11]: 37293f77752fbc98 -Block 0026 [ 12]: cce2024931226a4e -Block 0026 [ 13]: 0b3e54fd2ae0b3ce -Block 0026 [ 14]: 35e2af0be586cf66 -Block 0026 [ 15]: f94a5a46a427b24c -Block 0026 [ 16]: 4030eb43a50f4bc6 -Block 0026 [ 17]: e5e817c211ffd536 -Block 0026 [ 18]: ce4d39f262d8906f -Block 0026 [ 19]: e109bca81d06ea97 -Block 0026 [ 20]: a52c2ea963311247 -Block 0026 [ 21]: ea1050b3679d3f68 -Block 0026 [ 22]: c9dae9c84e36b885 -Block 0026 [ 23]: 1e6a0ef172a58c1f -Block 0026 [ 24]: a1cdd2e6d157f211 -Block 0026 [ 25]: c2b28b17582588b2 -Block 0026 [ 26]: a2269ef1361a34d1 -Block 0026 [ 27]: 6f4108d0009a0a4a -Block 0026 [ 28]: 67e945bdf88e3a45 -Block 0026 [ 29]: 2734e1edf6b6d1ff -Block 0026 [ 30]: 64003857fe488908 -Block 0026 [ 31]: 23097d34ae04fdaa -Block 0026 [ 32]: 9f0ea9d7bac5f1ee -Block 0026 [ 33]: 16f9ff9a693423f8 -Block 0026 [ 34]: e8d94b5ad2280a5d -Block 0026 [ 35]: e08e8d1fddc32380 -Block 0026 [ 36]: a1ac08a8060bcaab -Block 0026 [ 37]: 437c08cbae28e67f -Block 0026 [ 38]: 3d269e57e32cecd0 -Block 0026 [ 39]: 8337155690848c62 -Block 0026 [ 40]: a868cc5d9c97cc04 -Block 0026 [ 41]: 9f719a13b79ba555 -Block 0026 [ 42]: c06df5e22c349b6d -Block 0026 [ 43]: 8fcbaad237433b6a -Block 0026 [ 44]: fc34c1b9d2bdd5f4 -Block 0026 [ 45]: b9bb08869920d24b -Block 0026 [ 46]: baf85dcd7f37fa00 -Block 0026 [ 47]: 35a40e91760a75c1 -Block 0026 [ 48]: 6e93320f5d477425 -Block 0026 [ 49]: 826a134a9801cb0b -Block 0026 [ 50]: 910033d07a75c521 -Block 0026 [ 51]: 755b3bc8251407db -Block 0026 [ 52]: 8dd64b25a605b6b8 -Block 0026 [ 53]: b950fbb99e155c2b -Block 0026 [ 54]: e87b27b31068f5b0 -Block 0026 [ 55]: ba423858cdff8905 -Block 0026 [ 56]: 642636c58acba031 -Block 0026 [ 57]: 017a0449dd896efd -Block 0026 [ 58]: 7620fc91870c63e7 -Block 0026 [ 59]: 3b757db72cc7c3e0 -Block 0026 [ 60]: 52c6505f35dea770 -Block 0026 [ 61]: bd6ed47f26715259 -Block 0026 [ 62]: f0d6f2d380f155fd -Block 0026 [ 63]: c6c8518a64cac880 -Block 0026 [ 64]: 53f09f11d506562c -Block 0026 [ 65]: c51aac6790e918c7 -Block 0026 [ 66]: 93a2ca9a510fb338 -Block 0026 [ 67]: f4974aa31138dd1f -Block 0026 [ 68]: ea548f592104df60 -Block 0026 [ 69]: d099d955bc104c10 -Block 0026 [ 70]: 8feaf5ad3acbeead -Block 0026 [ 71]: d774bca52aa40db1 -Block 0026 [ 72]: 631b8c8e5206ef96 -Block 0026 [ 73]: c2467f34313a2f1a -Block 0026 [ 74]: fbe46c13ef4734a9 -Block 0026 [ 75]: 84277835d9d323b2 -Block 0026 [ 76]: 2e4d98f1a671683d -Block 0026 [ 77]: e86bcdfafe1c9704 -Block 0026 [ 78]: 858d689f5447874c -Block 0026 [ 79]: 34c11778bae7a605 -Block 0026 [ 80]: c63373727a5b4951 -Block 0026 [ 81]: 2b6ee36647dbeab0 -Block 0026 [ 82]: 593c1210e15b9a2e -Block 0026 [ 83]: 7cbabf2d6a7f60dd -Block 0026 [ 84]: f6286c13a4054115 -Block 0026 [ 85]: d504d66401d19f08 -Block 0026 [ 86]: 4377a456061e4ba4 -Block 0026 [ 87]: bedc6a171c2c9f7d -Block 0026 [ 88]: daaa4c2b70e89d78 -Block 0026 [ 89]: b43f52f216b02a80 -Block 0026 [ 90]: b5938ee138c6bc1c -Block 0026 [ 91]: 0877679273c8f0c6 -Block 0026 [ 92]: f6fe77bd04c9e7a1 -Block 0026 [ 93]: 851cbda45a28add1 -Block 0026 [ 94]: 5fe2bc3b7c34160f -Block 0026 [ 95]: 7e04cfbb08fbfec3 -Block 0026 [ 96]: 560e3def15d51f49 -Block 0026 [ 97]: aa9dd5cd812de83c -Block 0026 [ 98]: fb96e9ac7eb362fb -Block 0026 [ 99]: 77a97e7fe8461cc4 -Block 0026 [100]: 49d6ef7afeabf9df -Block 0026 [101]: 2db33b3eab3c3e74 -Block 0026 [102]: 22ee497b98aff5a0 -Block 0026 [103]: daa8c64262e0e084 -Block 0026 [104]: ac2047b2a642b5f6 -Block 0026 [105]: c6a1bdbe1afafe7a -Block 0026 [106]: 40cc38524f5589f7 -Block 0026 [107]: 981613d268c3c78f -Block 0026 [108]: 9db3258cd0588b72 -Block 0026 [109]: ec987d516209c1d3 -Block 0026 [110]: e186f53aa49c1c16 -Block 0026 [111]: e21f193c314f6914 -Block 0026 [112]: 8b8f04c5e30d6a65 -Block 0026 [113]: 32f0379b3e282763 -Block 0026 [114]: 74611ed89926c85b -Block 0026 [115]: 82cb876074150f22 -Block 0026 [116]: b4e8636aa8d530e4 -Block 0026 [117]: 98c5cb9f36e3ca0e -Block 0026 [118]: 562de3e3a60b6377 -Block 0026 [119]: 6a9abbd609e9a77b -Block 0026 [120]: 963e356cec311d7b -Block 0026 [121]: 7075034174072426 -Block 0026 [122]: f58b94caf83bbb5c -Block 0026 [123]: 3d6e98f918fc35fc -Block 0026 [124]: c5408b21805a47a6 -Block 0026 [125]: b708ec7ca7019412 -Block 0026 [126]: b092d3938ed92f30 -Block 0026 [127]: cff8bf31a57540ef -Block 0027 [ 0]: 3833936ed309a40e -Block 0027 [ 1]: aa12aa94d9454a14 -Block 0027 [ 2]: 72c4a5b5e0eeb799 -Block 0027 [ 3]: 4024ffdb54eef730 -Block 0027 [ 4]: cd7bf4160fba3fff -Block 0027 [ 5]: 167d04d9139c38c7 -Block 0027 [ 6]: 570f0841b540745e -Block 0027 [ 7]: af34a7133cd2a7eb -Block 0027 [ 8]: 8e02eb212ba5d1e4 -Block 0027 [ 9]: 84756a529a924066 -Block 0027 [ 10]: fe2a7294d8395683 -Block 0027 [ 11]: 227ea6f39aa2db15 -Block 0027 [ 12]: 35891d0ffa4e156f -Block 0027 [ 13]: 73602a9a8749e196 -Block 0027 [ 14]: 4a85f3a4d4d8da72 -Block 0027 [ 15]: 334564cd39f78db5 -Block 0027 [ 16]: bb50ff365ec10d5b -Block 0027 [ 17]: 15af66399cd11253 -Block 0027 [ 18]: a7cf019ed9b1246b -Block 0027 [ 19]: fe94c3e001243205 -Block 0027 [ 20]: 9778185b3cad932f -Block 0027 [ 21]: 7f1bd55772064b0b -Block 0027 [ 22]: 9e13e24cbfc382ca -Block 0027 [ 23]: dbd4d1bbc191d0f7 -Block 0027 [ 24]: 7dd89184bbe49fd5 -Block 0027 [ 25]: 5af27c9e566eac9c -Block 0027 [ 26]: ed57cf89c8c5f4a7 -Block 0027 [ 27]: 836c0c093002e5f3 -Block 0027 [ 28]: dff3d9f1eb535dc4 -Block 0027 [ 29]: 327d67fc2049f8fb -Block 0027 [ 30]: 605fd14694fa9449 -Block 0027 [ 31]: 66822ee641a6ca0c -Block 0027 [ 32]: bc7c177b547a9299 -Block 0027 [ 33]: b228d67439803c1d -Block 0027 [ 34]: e80660f6a38d8930 -Block 0027 [ 35]: 48465638b515839e -Block 0027 [ 36]: f59aa28a2b5dfb4d -Block 0027 [ 37]: 451ed876660c6810 -Block 0027 [ 38]: 29ebbdcc493a13e4 -Block 0027 [ 39]: 9ad95963564f5e59 -Block 0027 [ 40]: d9f513c58466e6e4 -Block 0027 [ 41]: e8502393e51b4216 -Block 0027 [ 42]: 55410a20946569e7 -Block 0027 [ 43]: ac2e16e37e14263e -Block 0027 [ 44]: 8cc37d82b6dd99d5 -Block 0027 [ 45]: 018bb84f0209f5ce -Block 0027 [ 46]: af3e3d76394cb3e7 -Block 0027 [ 47]: ab519dd479103c56 -Block 0027 [ 48]: ec37868d55b82a51 -Block 0027 [ 49]: 0bd60f8790e408f8 -Block 0027 [ 50]: ca67177c3f31c96b -Block 0027 [ 51]: f6b20d690e55b321 -Block 0027 [ 52]: cb607a912230f0eb -Block 0027 [ 53]: 7c7c06a2d370ef3b -Block 0027 [ 54]: a5398513af3fed38 -Block 0027 [ 55]: a8e6ec3c16cda63f -Block 0027 [ 56]: a7288864d44f667b -Block 0027 [ 57]: 360e196a67d37b9e -Block 0027 [ 58]: ec06a0c378b7b1cc -Block 0027 [ 59]: f826d0f0aca8de3d -Block 0027 [ 60]: c8d1345bd495ce06 -Block 0027 [ 61]: c8cb738599268128 -Block 0027 [ 62]: 0f077e43a8105e05 -Block 0027 [ 63]: 5949111094f84982 -Block 0027 [ 64]: caab31a8dce41c8e -Block 0027 [ 65]: 14ec39b16f79a72c -Block 0027 [ 66]: 30f52ced8af85cbf -Block 0027 [ 67]: e7ecff9e0e0e5770 -Block 0027 [ 68]: bade9fd9644f14fc -Block 0027 [ 69]: f070e6746d4f632b -Block 0027 [ 70]: 928f8d1f8a137183 -Block 0027 [ 71]: fa7d998ddba748bb -Block 0027 [ 72]: 844b46d51416c7d8 -Block 0027 [ 73]: a8ce3dccbf849300 -Block 0027 [ 74]: 40b5bf59fac37079 -Block 0027 [ 75]: e693d904e51eef2d -Block 0027 [ 76]: 90fef2b130484972 -Block 0027 [ 77]: ad5b43c0ad1315fb -Block 0027 [ 78]: f5c51886d9fd50ee -Block 0027 [ 79]: 804c2aa34fba3aee -Block 0027 [ 80]: 4108d414e6218b42 -Block 0027 [ 81]: a055d4fb2e34d89f -Block 0027 [ 82]: d2341e113762009e -Block 0027 [ 83]: b0fc9752a454da10 -Block 0027 [ 84]: d1288c476704b25b -Block 0027 [ 85]: d3c4c572d91465ac -Block 0027 [ 86]: 2f8069a8289e7aca -Block 0027 [ 87]: 71f3b6a4b26995d6 -Block 0027 [ 88]: 4441ff6c4000ce3c -Block 0027 [ 89]: d3c96f999b30851e -Block 0027 [ 90]: 009122df0b16cfdf -Block 0027 [ 91]: bcdd32311dca65de -Block 0027 [ 92]: d1eb48772ad5d526 -Block 0027 [ 93]: 23906d56ebf95940 -Block 0027 [ 94]: 3d320da7906f09ca -Block 0027 [ 95]: 806162060635d7cf -Block 0027 [ 96]: a65c264228f152ef -Block 0027 [ 97]: 8402f96b258bbb89 -Block 0027 [ 98]: 49a04047c237edd3 -Block 0027 [ 99]: 3042a8a4678be559 -Block 0027 [100]: d3f7d3340ec80df8 -Block 0027 [101]: 1d17540fc5c633d1 -Block 0027 [102]: 4ad144abcec46b9c -Block 0027 [103]: 3a6805112b3af97e -Block 0027 [104]: a6772ba931271c65 -Block 0027 [105]: 24807675ebbd48e4 -Block 0027 [106]: d58fbed9e7350632 -Block 0027 [107]: 52454dc82c274360 -Block 0027 [108]: b12793e27b3e12f6 -Block 0027 [109]: 9269abbd3d9d1ae1 -Block 0027 [110]: 7b980387ddcb0e90 -Block 0027 [111]: 3338569394aa1806 -Block 0027 [112]: 1c985037c4308c4c -Block 0027 [113]: 3740dd5683d775d5 -Block 0027 [114]: acec65817bd7ba6c -Block 0027 [115]: 41ab62f1c98e3bfb -Block 0027 [116]: 973525758db70ade -Block 0027 [117]: d8d9076c0fe5513b -Block 0027 [118]: b9dda9b5d7a00cc6 -Block 0027 [119]: 85c1543f46708ec5 -Block 0027 [120]: 72bd1954fc92405c -Block 0027 [121]: 00f76076b61ace34 -Block 0027 [122]: a98d6335766bf76f -Block 0027 [123]: 1fbd089ee7c6f748 -Block 0027 [124]: 10136fb34cf6aaa2 -Block 0027 [125]: 50c5846e44fbc975 -Block 0027 [126]: 977ddbb793a83311 -Block 0027 [127]: d501160dda0add24 -Block 0028 [ 0]: b3f74da78e4bb4d1 -Block 0028 [ 1]: 0068b2500f8b2107 -Block 0028 [ 2]: acf96291acfb9feb -Block 0028 [ 3]: 43200819c384e18f -Block 0028 [ 4]: 54dccb52bc0ed9d4 -Block 0028 [ 5]: dd7d449eb8389b6d -Block 0028 [ 6]: 4c47575882bed005 -Block 0028 [ 7]: dccf5ec02f7b653e -Block 0028 [ 8]: 81d84bb23c0c4d99 -Block 0028 [ 9]: 3cc8ff7f6b1670dc -Block 0028 [ 10]: eb5447dc01331f1b -Block 0028 [ 11]: e6c5f694f1638081 -Block 0028 [ 12]: 5cfa9e9831bfd598 -Block 0028 [ 13]: 2cf881d2dfb3bb2e -Block 0028 [ 14]: 6e80b12a71cdf77b -Block 0028 [ 15]: 8379ddd89673f35e -Block 0028 [ 16]: ce5154ab9a574b72 -Block 0028 [ 17]: 41ea66748e335062 -Block 0028 [ 18]: 657679fce01a5d7d -Block 0028 [ 19]: 3896c88c2e5baabc -Block 0028 [ 20]: 315589187590cf3d -Block 0028 [ 21]: 0d39974eeae411ab -Block 0028 [ 22]: 84d402703dbdb892 -Block 0028 [ 23]: ba96e74e1919a832 -Block 0028 [ 24]: 30b7a76e90011125 -Block 0028 [ 25]: 28f312dc69ad2ffb -Block 0028 [ 26]: 81700effa6f96864 -Block 0028 [ 27]: 92c92ea93e3095e2 -Block 0028 [ 28]: 371c9bd565a0debc -Block 0028 [ 29]: f9337cdf06c282f3 -Block 0028 [ 30]: 27217fa566a5bbce -Block 0028 [ 31]: 10c312681c3491c5 -Block 0028 [ 32]: e7cdf437453ca28d -Block 0028 [ 33]: 4530c7ee1fd2677a -Block 0028 [ 34]: d16c39d8950b1db1 -Block 0028 [ 35]: 5ee3b113a97369c0 -Block 0028 [ 36]: f96a3796450f218d -Block 0028 [ 37]: 9dbbf0bbb9c7affc -Block 0028 [ 38]: 9367894b04cb7525 -Block 0028 [ 39]: 63d505005ca97afc -Block 0028 [ 40]: 755fba7c0546dab4 -Block 0028 [ 41]: 2c94e4f1ea898b9f -Block 0028 [ 42]: aaa9b9248181e1c3 -Block 0028 [ 43]: ba827f64a01f2b84 -Block 0028 [ 44]: 36e310230e22e0cf -Block 0028 [ 45]: d76f7cb6c31c910f -Block 0028 [ 46]: 7f55c08ca24c175f -Block 0028 [ 47]: 70d59843f362422b -Block 0028 [ 48]: fb2cc00b52176c97 -Block 0028 [ 49]: 9e91c272a354ccf9 -Block 0028 [ 50]: fedfa3bbfd084038 -Block 0028 [ 51]: 66c268e3d3471545 -Block 0028 [ 52]: cdcd7168925ae4eb -Block 0028 [ 53]: 1816c7d21f19a754 -Block 0028 [ 54]: 9e3100dd7798b55f -Block 0028 [ 55]: da2ef9205dcf4b82 -Block 0028 [ 56]: 372619bb220cf87c -Block 0028 [ 57]: 22a4413ecb6e4f99 -Block 0028 [ 58]: 03717cf0bfe1503d -Block 0028 [ 59]: 3caaa69489d9b6fb -Block 0028 [ 60]: cb98f0775973e3df -Block 0028 [ 61]: 1d888ba44c947535 -Block 0028 [ 62]: fc0d0ddb3ec24d7b -Block 0028 [ 63]: 1bc085ba44559e11 -Block 0028 [ 64]: 8953975b8539d843 -Block 0028 [ 65]: f96aea013628b82c -Block 0028 [ 66]: b419370dd5c74690 -Block 0028 [ 67]: fb6c6aa70aee9799 -Block 0028 [ 68]: 85c3aaeb348e6555 -Block 0028 [ 69]: 59dc27ad4cb80f88 -Block 0028 [ 70]: ed7afeffdf385af3 -Block 0028 [ 71]: 0f0dfd4dc6230c52 -Block 0028 [ 72]: 4636832c11781396 -Block 0028 [ 73]: 2c33a5a47579ca10 -Block 0028 [ 74]: ad88de9061a25e88 -Block 0028 [ 75]: d1224222eeedd591 -Block 0028 [ 76]: 69bc46adc65fa8ad -Block 0028 [ 77]: 1ee3233180d64833 -Block 0028 [ 78]: 11948dbb66ed6a04 -Block 0028 [ 79]: 31488740e7c9662d -Block 0028 [ 80]: 16df31894039b685 -Block 0028 [ 81]: af4f60facedaede6 -Block 0028 [ 82]: d683f45a39bb4306 -Block 0028 [ 83]: 13c961bf8ba5a0ec -Block 0028 [ 84]: 03530369d1cf43d4 -Block 0028 [ 85]: 71d91b318967084c -Block 0028 [ 86]: 32274b144bac8237 -Block 0028 [ 87]: d6d8eaac469832c5 -Block 0028 [ 88]: 3fefc193c0e9bbae -Block 0028 [ 89]: 54c4d65a3dbc724e -Block 0028 [ 90]: 9f5f3ada21ba189f -Block 0028 [ 91]: c6f754427c4d6fbc -Block 0028 [ 92]: aa2578e45b353de0 -Block 0028 [ 93]: a189e64da4c5edee -Block 0028 [ 94]: d8925737d18ba6cf -Block 0028 [ 95]: 19e7541d4bb078e6 -Block 0028 [ 96]: 6257ce84db6a0585 -Block 0028 [ 97]: c28fd38e38d259f5 -Block 0028 [ 98]: 21e5bbd6bc911d42 -Block 0028 [ 99]: 9e7ff827f7a6aa0b -Block 0028 [100]: 87b9d2b325e2d51e -Block 0028 [101]: 063d74eb3465a8f1 -Block 0028 [102]: fa4ce27126d960c1 -Block 0028 [103]: 6cf8a01df2a65fb7 -Block 0028 [104]: d3dd5981fd75d786 -Block 0028 [105]: 1d2aeee33712ebd9 -Block 0028 [106]: aef7d538f83bd76a -Block 0028 [107]: bc930cdb8705578e -Block 0028 [108]: 7cadc7439eb2940a -Block 0028 [109]: 169745940d7e1948 -Block 0028 [110]: 7d8665a74288db3c -Block 0028 [111]: b748b1cd8d96ba2a -Block 0028 [112]: defaba3d0b9aec81 -Block 0028 [113]: 7a5caf35df223c73 -Block 0028 [114]: b4a74e84a51b11fa -Block 0028 [115]: ebf12950c6f34a6e -Block 0028 [116]: 05683a715cc17966 -Block 0028 [117]: df2e9871efcc643d -Block 0028 [118]: 1b66b82b99320384 -Block 0028 [119]: 997df1a8e8e9244a -Block 0028 [120]: 20263014f76f78e8 -Block 0028 [121]: 42769a9211f735e5 -Block 0028 [122]: e8cc76e32520ff1b -Block 0028 [123]: 0a9130ff5bb61092 -Block 0028 [124]: 1bac198c40fb6a57 -Block 0028 [125]: fa685df2fe727bb3 -Block 0028 [126]: b3e7bcfd42ffe2d7 -Block 0028 [127]: 66be499624073e2d -Block 0029 [ 0]: 1178d0480551dfc6 -Block 0029 [ 1]: 5187eed47212089f -Block 0029 [ 2]: 42898321caf5af34 -Block 0029 [ 3]: 1e0565d05fb9f254 -Block 0029 [ 4]: 68d1cf52778d2feb -Block 0029 [ 5]: 2fc1c91be6b25822 -Block 0029 [ 6]: 9e616744ca1cd585 -Block 0029 [ 7]: cb52d5be9e180b62 -Block 0029 [ 8]: ca2217ead26e1eab -Block 0029 [ 9]: 75f749c30dfb9fab -Block 0029 [ 10]: 7ee7fba56c86c33b -Block 0029 [ 11]: 6d5b689f4f800858 -Block 0029 [ 12]: 28a17498950b879a -Block 0029 [ 13]: cb81340219891240 -Block 0029 [ 14]: c273841814b1e916 -Block 0029 [ 15]: f1674554a51e9b34 -Block 0029 [ 16]: b8edcf4f61113467 -Block 0029 [ 17]: 4c9fed95227d3220 -Block 0029 [ 18]: ea2560287408d60b -Block 0029 [ 19]: 910e6ebd0d760e08 -Block 0029 [ 20]: 7249b66d9458152d -Block 0029 [ 21]: 5bbbafb398ebe2af -Block 0029 [ 22]: d14cca3302065ae9 -Block 0029 [ 23]: 2381a24f70d7461f -Block 0029 [ 24]: 4610f2b3c45aaa48 -Block 0029 [ 25]: 0770c2aafa948d59 -Block 0029 [ 26]: 4b88fdc8aa300ec9 -Block 0029 [ 27]: 8be083716fb9ec8a -Block 0029 [ 28]: 57fc57bbf62aea8f -Block 0029 [ 29]: bdfcd3491ba8f1ff -Block 0029 [ 30]: 0aeed63235663fd9 -Block 0029 [ 31]: 191012cb4aa161e1 -Block 0029 [ 32]: 60678d765589fd1d -Block 0029 [ 33]: 223281bdd84345cb -Block 0029 [ 34]: 1a3f94b2164cc584 -Block 0029 [ 35]: 15e66f71f0544969 -Block 0029 [ 36]: a1b51a96bf12eb48 -Block 0029 [ 37]: 8b0a8a65b688eb0d -Block 0029 [ 38]: 6b0b58dd2d36652a -Block 0029 [ 39]: e5539a59cfcdefe7 -Block 0029 [ 40]: f2008d87b7556a7c -Block 0029 [ 41]: 84110ef2f60a53ee -Block 0029 [ 42]: b733f4f75f4b849d -Block 0029 [ 43]: a47f8945a6faebc6 -Block 0029 [ 44]: 3d5d650d8bb93088 -Block 0029 [ 45]: f5fc955ad93ab98a -Block 0029 [ 46]: 8af341c08d45dee8 -Block 0029 [ 47]: 7d07c8d014e9163f -Block 0029 [ 48]: 887a2fca5f135987 -Block 0029 [ 49]: ab251174f76ad2b9 -Block 0029 [ 50]: 404602ca6bcd80df -Block 0029 [ 51]: b4c2749a49e85a7d -Block 0029 [ 52]: 0d5d67e561f20bf6 -Block 0029 [ 53]: 53db11a315a12a0f -Block 0029 [ 54]: d802cc1dd33b595b -Block 0029 [ 55]: 68afa26bb1bc8087 -Block 0029 [ 56]: 9fa3a9eeee65c849 -Block 0029 [ 57]: 166ad5e90e1fb34a -Block 0029 [ 58]: 111cbb03483c7948 -Block 0029 [ 59]: d1a00ee3bc309870 -Block 0029 [ 60]: c26b7662c5117bcc -Block 0029 [ 61]: 02fd9550715a76b9 -Block 0029 [ 62]: 3bd94c9f496d061b -Block 0029 [ 63]: bd8c34d3de23173b -Block 0029 [ 64]: 73903c5a6130726c -Block 0029 [ 65]: 14e7ae74063b1c41 -Block 0029 [ 66]: 880c6cab2bf1f166 -Block 0029 [ 67]: f9766e9ef9d5bfd9 -Block 0029 [ 68]: addb32c388d90782 -Block 0029 [ 69]: 6554423048bedf74 -Block 0029 [ 70]: 51c6576b5281b903 -Block 0029 [ 71]: eeecd5b168b9b5bf -Block 0029 [ 72]: 062dca803c473ec9 -Block 0029 [ 73]: fb84d11eb83a1f48 -Block 0029 [ 74]: 9163949866a646c6 -Block 0029 [ 75]: ae458ee2c4aa38b0 -Block 0029 [ 76]: ba7b37a0fe308791 -Block 0029 [ 77]: 23bdb9b915739e12 -Block 0029 [ 78]: cebef87ee8e00146 -Block 0029 [ 79]: 1ff5050825cb849a -Block 0029 [ 80]: dcaf4b96d9369968 -Block 0029 [ 81]: cbd9923d4a25e778 -Block 0029 [ 82]: fda760b9bcce8309 -Block 0029 [ 83]: 9ba39fcea41dea54 -Block 0029 [ 84]: ff89703e444c7d03 -Block 0029 [ 85]: c1528bfd6f82fb85 -Block 0029 [ 86]: 04d4c35cba24af07 -Block 0029 [ 87]: 5d34229c32c2f458 -Block 0029 [ 88]: 8d07eb7d2dc56870 -Block 0029 [ 89]: 6dd6ea0c611eb1b5 -Block 0029 [ 90]: bac1f9799d2ab54e -Block 0029 [ 91]: 173b5b2a973bdaaf -Block 0029 [ 92]: b1a4d48e7ee1a46f -Block 0029 [ 93]: 0fb36719adc8e91c -Block 0029 [ 94]: faefc2753cb6cdb7 -Block 0029 [ 95]: 3427dee22c050a26 -Block 0029 [ 96]: 648629655322c85e -Block 0029 [ 97]: da6a37e23216fe1e -Block 0029 [ 98]: dac40e7d38f3ada2 -Block 0029 [ 99]: 1f9e046da29bcca6 -Block 0029 [100]: b0fa2e7b8f53a3ad -Block 0029 [101]: 4b7971342bd55433 -Block 0029 [102]: 14101d41f2afb513 -Block 0029 [103]: 1f0363b9b7c93230 -Block 0029 [104]: c26b7dc1abe4c074 -Block 0029 [105]: 511202c932605bc3 -Block 0029 [106]: 506f446b14c2fa0d -Block 0029 [107]: 9e5d0d754af3c04b -Block 0029 [108]: 2e79bcb2c0a7e061 -Block 0029 [109]: 5ce8a45905514efd -Block 0029 [110]: bb21b252b1c6abce -Block 0029 [111]: 27a6a502660183c1 -Block 0029 [112]: 3b27a572ce4e05c6 -Block 0029 [113]: a0e0c0768b022220 -Block 0029 [114]: 4873709f797c3e92 -Block 0029 [115]: 3fa74bae85c78557 -Block 0029 [116]: 330626653f791311 -Block 0029 [117]: 4e3401cd1d1f092e -Block 0029 [118]: f4ab84a94f25d989 -Block 0029 [119]: c1f9db3453d949e2 -Block 0029 [120]: d00d0eae1c6b4941 -Block 0029 [121]: 2f72341a47394d0f -Block 0029 [122]: 9faf011956ae9b44 -Block 0029 [123]: 6d5af027411369bf -Block 0029 [124]: 3ba9db1f0e087f5c -Block 0029 [125]: ff5f35b92c04605d -Block 0029 [126]: 6b522baa870cd062 -Block 0029 [127]: 116c95d872b06470 -Block 0030 [ 0]: a497707d907bdbb5 -Block 0030 [ 1]: 1387b1d7e2de9fb2 -Block 0030 [ 2]: e9b7a5ae2c3911c3 -Block 0030 [ 3]: 2304e30b4abe1342 -Block 0030 [ 4]: 6569e5e7e495cac3 -Block 0030 [ 5]: e781abd4b3be3fa2 -Block 0030 [ 6]: cec45944649475fe -Block 0030 [ 7]: e3fd8069db7556ca -Block 0030 [ 8]: 12aad9e722e95123 -Block 0030 [ 9]: f63c54f3569a0288 -Block 0030 [ 10]: 602202c9a3326c48 -Block 0030 [ 11]: 034a4bb4f502d541 -Block 0030 [ 12]: 906032657dd97cfa -Block 0030 [ 13]: b5a1edcb89d7eeae -Block 0030 [ 14]: b40c965b3a0ec87e -Block 0030 [ 15]: 19beb1de7d74c858 -Block 0030 [ 16]: 84d9844f4f30b2cd -Block 0030 [ 17]: 2de7df0d9270a720 -Block 0030 [ 18]: 987353a68f551dfe -Block 0030 [ 19]: 87231e01671d5682 -Block 0030 [ 20]: 95e08d7d4d13e893 -Block 0030 [ 21]: c9d54121b1cbe05a -Block 0030 [ 22]: 9173beb279257e2f -Block 0030 [ 23]: 6c0b47361287718b -Block 0030 [ 24]: d815836edde64e0d -Block 0030 [ 25]: 3aab70f8ef8acd58 -Block 0030 [ 26]: 3d4eacbb303b8942 -Block 0030 [ 27]: 47074d7a499f1b4d -Block 0030 [ 28]: 6b77d29cc5814f8e -Block 0030 [ 29]: 4a22120fe4303e54 -Block 0030 [ 30]: 788b37c81c090145 -Block 0030 [ 31]: 944d5943a04e0b67 -Block 0030 [ 32]: b3581ddd1331a125 -Block 0030 [ 33]: 9f34510aa2b7d72d -Block 0030 [ 34]: 1c612fbaac10b0c4 -Block 0030 [ 35]: ed62acd73a0b0d39 -Block 0030 [ 36]: 1eb6b7c4c3b33953 -Block 0030 [ 37]: 9598308b94b5e7d8 -Block 0030 [ 38]: c28392bfb3e48aff -Block 0030 [ 39]: 86833aec5beb2fd1 -Block 0030 [ 40]: be199029fcd63ac9 -Block 0030 [ 41]: 146e2a07296b54bc -Block 0030 [ 42]: 1b42bea1f2fffb84 -Block 0030 [ 43]: 4e01f060efa7f0dd -Block 0030 [ 44]: dfc3a66f34fdc191 -Block 0030 [ 45]: aaba1fb5f896bb29 -Block 0030 [ 46]: 3297ba5c2b77908a -Block 0030 [ 47]: dbb1641509d7d204 -Block 0030 [ 48]: 2a8a4be0b611de11 -Block 0030 [ 49]: 5abb85518f96f0ce -Block 0030 [ 50]: 23eec337eedea731 -Block 0030 [ 51]: f581a8d567be23b7 -Block 0030 [ 52]: 877c88e984fc6794 -Block 0030 [ 53]: fdf883e49b5450ae -Block 0030 [ 54]: 81ad8e2532db6a2b -Block 0030 [ 55]: a6d3644b428394df -Block 0030 [ 56]: ade7c3614a7f3454 -Block 0030 [ 57]: 4789c2d8ffd935b2 -Block 0030 [ 58]: 09571ee74ecdaeb9 -Block 0030 [ 59]: 5ec25b62459cd7df -Block 0030 [ 60]: ae9063222cebedd0 -Block 0030 [ 61]: 838691ff044dac26 -Block 0030 [ 62]: 9c2b1ff5d82f5c48 -Block 0030 [ 63]: 4ed661d83f838188 -Block 0030 [ 64]: da11ffe4f89a98bf -Block 0030 [ 65]: 026102a18ff640c3 -Block 0030 [ 66]: b40d27b026bd55a3 -Block 0030 [ 67]: 65dd56b86986b85f -Block 0030 [ 68]: b5f744df59d5cf0b -Block 0030 [ 69]: a9d05b38d431021e -Block 0030 [ 70]: 7aa376509a108cbb -Block 0030 [ 71]: 7e0cae8ca01a7ba2 -Block 0030 [ 72]: f257fb68679f2ba5 -Block 0030 [ 73]: a027a9a021201e96 -Block 0030 [ 74]: 8ff39ab8e46c65db -Block 0030 [ 75]: 1f61e97c20b1922b -Block 0030 [ 76]: 2e8f687076b3cbaf -Block 0030 [ 77]: 7d8107a7e3840cd5 -Block 0030 [ 78]: 2f65babde65d296f -Block 0030 [ 79]: 1897c1b8df8db90f -Block 0030 [ 80]: 7d431f0d0229c28d -Block 0030 [ 81]: a1f1c590f3ac726c -Block 0030 [ 82]: 5868070e74cecb5a -Block 0030 [ 83]: 6fca45ad6efdcb57 -Block 0030 [ 84]: ececbb1ddd986c18 -Block 0030 [ 85]: bb4f79fa8793727b -Block 0030 [ 86]: e9ccb85cba576ede -Block 0030 [ 87]: cad0e15d66710c9e -Block 0030 [ 88]: 47339a449ddf32bc -Block 0030 [ 89]: 9d82700ead343ae7 -Block 0030 [ 90]: 48d7c02a64d34fdd -Block 0030 [ 91]: a47baf96226a594f -Block 0030 [ 92]: c1bd47b224ffaa1b -Block 0030 [ 93]: 280edfb69fd7ea1a -Block 0030 [ 94]: 64417df4d9700c3e -Block 0030 [ 95]: a559eb16ca1690aa -Block 0030 [ 96]: 7a4cfedb4e665af8 -Block 0030 [ 97]: e9635d0de30f731a -Block 0030 [ 98]: 5e40ef66b6a35488 -Block 0030 [ 99]: a6c5a440428cae6b -Block 0030 [100]: 464bbed452e49552 -Block 0030 [101]: 2cd703be6cb48289 -Block 0030 [102]: 19814217d930cbb8 -Block 0030 [103]: 9ca6007e94343418 -Block 0030 [104]: 83628a532ebee52b -Block 0030 [105]: b96a42109d9b7797 -Block 0030 [106]: ccc287509dc3a229 -Block 0030 [107]: bcb1714a388e28ab -Block 0030 [108]: 7c0210e4bc243b95 -Block 0030 [109]: 0701316191270f44 -Block 0030 [110]: fe186f16bf6a4331 -Block 0030 [111]: ca565a897bcd7ef8 -Block 0030 [112]: fe5a66451bdf69f5 -Block 0030 [113]: 076858ec4a523860 -Block 0030 [114]: efe04a084a633f98 -Block 0030 [115]: be0a2c63541771bb -Block 0030 [116]: f32d430350e88858 -Block 0030 [117]: 7817ff971e7f4810 -Block 0030 [118]: b6f18c6e97c66e6b -Block 0030 [119]: ad4804cbb61673f5 -Block 0030 [120]: 4001049c9d5a4a69 -Block 0030 [121]: 7d04aa55446e6096 -Block 0030 [122]: 3bd9c63472650ea6 -Block 0030 [123]: c7b3e0272cfcd957 -Block 0030 [124]: 2dc05b7529c3166d -Block 0030 [125]: 7eb2b09e8b11d32e -Block 0030 [126]: d91455278416d563 -Block 0030 [127]: 66d637a2a2b6c5cc -Block 0031 [ 0]: 944a7ec736864f24 -Block 0031 [ 1]: 62207f9b144f6041 -Block 0031 [ 2]: 1b91de707e936258 -Block 0031 [ 3]: b11599a08b417d8b -Block 0031 [ 4]: 89ee0ff3f7266b4e -Block 0031 [ 5]: 36fb1c44fefd9e7f -Block 0031 [ 6]: 5cd146a84de48497 -Block 0031 [ 7]: d729287c49dba1ee -Block 0031 [ 8]: f63844866eab1228 -Block 0031 [ 9]: a28a6b71ea46f38a -Block 0031 [ 10]: 9aec7730893dbc33 -Block 0031 [ 11]: 8ef663a07b64cc7d -Block 0031 [ 12]: 05cc88303838c4be -Block 0031 [ 13]: 462bd3ab56e8a6a6 -Block 0031 [ 14]: 4f3d76237943927f -Block 0031 [ 15]: f6b6653932fe9ef0 -Block 0031 [ 16]: 6d7b4d2aa239c737 -Block 0031 [ 17]: caae7db69aa59aa7 -Block 0031 [ 18]: 1e31c6f143d9952a -Block 0031 [ 19]: 6b60a98e290ca696 -Block 0031 [ 20]: 940ca1bbcd3f7463 -Block 0031 [ 21]: e2018e95efea6502 -Block 0031 [ 22]: 723653c1f8b8b5aa -Block 0031 [ 23]: 44e8613497d80985 -Block 0031 [ 24]: 47fc4079d7548605 -Block 0031 [ 25]: 12c033e65ead5787 -Block 0031 [ 26]: 7e35d99dd937027d -Block 0031 [ 27]: db08418fcf1de9e2 -Block 0031 [ 28]: 962efd855a0c9915 -Block 0031 [ 29]: 49a9432586bd141c -Block 0031 [ 30]: 3e934ae2d20d3bf4 -Block 0031 [ 31]: ca3878557731e31b -Block 0031 [ 32]: 5a2e3f7af5fd99fc -Block 0031 [ 33]: d4cdb70de69868a7 -Block 0031 [ 34]: 2e466841a0631c49 -Block 0031 [ 35]: ad2cce77b3eaac9b -Block 0031 [ 36]: d7457681c1d3b8d1 -Block 0031 [ 37]: 21f8b6b030430d7e -Block 0031 [ 38]: 52e8e9ef6f17868d -Block 0031 [ 39]: 74643040276b49e0 -Block 0031 [ 40]: fa0fc64652a88bbe -Block 0031 [ 41]: b85368143ee3fc44 -Block 0031 [ 42]: ceb7bf6f9163bf98 -Block 0031 [ 43]: 014748d0c2530c89 -Block 0031 [ 44]: f08c8d17798594a5 -Block 0031 [ 45]: 300302703d482fb6 -Block 0031 [ 46]: f6c702c1f364984a -Block 0031 [ 47]: 88e96d54da28c933 -Block 0031 [ 48]: 600731f1d5e30200 -Block 0031 [ 49]: 3fafb57df73906ee -Block 0031 [ 50]: 50676df27723e8dc -Block 0031 [ 51]: 35276a345eafaa5b -Block 0031 [ 52]: 6836ff29f04060fb -Block 0031 [ 53]: f836a93b5a0e07b5 -Block 0031 [ 54]: 7ff0ec0945b7555f -Block 0031 [ 55]: 9a978bbe613eee43 -Block 0031 [ 56]: 0cb6317840199246 -Block 0031 [ 57]: 9ac40873681cb4f3 -Block 0031 [ 58]: ef3ab4e1f58c04cb -Block 0031 [ 59]: cf511bdcbbaab45a -Block 0031 [ 60]: ac604c91d14a4a8b -Block 0031 [ 61]: 5d9a3364c9cfe64a -Block 0031 [ 62]: 8f3c791a7e3997cd -Block 0031 [ 63]: af6786e36a555a52 -Block 0031 [ 64]: aa4c4498263bd24a -Block 0031 [ 65]: 17bb504c406e501c -Block 0031 [ 66]: 5605458618bb7567 -Block 0031 [ 67]: 23dba58aeaf90514 -Block 0031 [ 68]: ddf47fc505d368f3 -Block 0031 [ 69]: d020a357a81d8f2a -Block 0031 [ 70]: 5a8105998d6289cc -Block 0031 [ 71]: cc09c874e9ad7fb4 -Block 0031 [ 72]: 6e0e7a023893dea4 -Block 0031 [ 73]: 9bb514c8b1d2d2bd -Block 0031 [ 74]: 9afbba056d6b02db -Block 0031 [ 75]: 567639eeb1c4f4f3 -Block 0031 [ 76]: b23981b08a43352d -Block 0031 [ 77]: 8a99b8cb4cf52afd -Block 0031 [ 78]: 4c9ae1dcc386ba60 -Block 0031 [ 79]: 5877d8ffcee47c72 -Block 0031 [ 80]: 08ec719cd344b3d9 -Block 0031 [ 81]: 5fed35d31f385127 -Block 0031 [ 82]: a98b4f7dcb2fb022 -Block 0031 [ 83]: bed0b0d8eeb49d83 -Block 0031 [ 84]: 353088c2e9bffc0c -Block 0031 [ 85]: 621cd0ea9f951e5e -Block 0031 [ 86]: 15b6e21e7fe5cff1 -Block 0031 [ 87]: fb256930ba770de1 -Block 0031 [ 88]: 58153034cf988f39 -Block 0031 [ 89]: b135d6b52572443a -Block 0031 [ 90]: b46c8c25d02e20e1 -Block 0031 [ 91]: cdf31cdd2a5e6c86 -Block 0031 [ 92]: e5df8b1870d0fa5f -Block 0031 [ 93]: ff58e219eb2aaef9 -Block 0031 [ 94]: 7b7bf59a19bf4b82 -Block 0031 [ 95]: a83c4eddca7251b7 -Block 0031 [ 96]: e6846c08a364b23b -Block 0031 [ 97]: ce1e0e3990a0b85c -Block 0031 [ 98]: 4805db1de087560c -Block 0031 [ 99]: 65510d9d724717cf -Block 0031 [100]: a5083efef98e595a -Block 0031 [101]: eff774bbf800218d -Block 0031 [102]: fda9598516b2db5d -Block 0031 [103]: 4c1a7ec2bfbca7b7 -Block 0031 [104]: 805250bd4ac405ed -Block 0031 [105]: f11b412261ec3b87 -Block 0031 [106]: e08f40d87a900ff8 -Block 0031 [107]: 99b8fbca386979b6 -Block 0031 [108]: 07aa22432c786a5a -Block 0031 [109]: 585b41d00bc71127 -Block 0031 [110]: 0b03483ac6511c99 -Block 0031 [111]: 6d4cc89b3af28b23 -Block 0031 [112]: 6970451c183ee79a -Block 0031 [113]: f5580761f2eccdc7 -Block 0031 [114]: 0424ccc22b9d54f9 -Block 0031 [115]: 9c48d9de801d0bf0 -Block 0031 [116]: 54fa4f6346f39b22 -Block 0031 [117]: 1ece637d6f675279 -Block 0031 [118]: 260b9ebb18ab1078 -Block 0031 [119]: 4ec528bb24040a3f -Block 0031 [120]: 383fd565da93d8cd -Block 0031 [121]: 6935146f0387f41a -Block 0031 [122]: ae152b1a7f1d5c85 -Block 0031 [123]: d6269b14a3203dcc -Block 0031 [124]: 975f596583745e30 -Block 0031 [125]: e349bdd7edeb3092 -Block 0031 [126]: b751a689b7a83659 -Block 0031 [127]: c570f2ab2a86cf00 - - After pass 1: -Block 0000 [ 0]: b2e4ddfcf76dc85a -Block 0000 [ 1]: 4ffd0626c89a2327 -Block 0000 [ 2]: 4af1440fff212980 -Block 0000 [ 3]: 1e77299c7408505b -Block 0000 [ 4]: 7e672fb78ae3238d -Block 0000 [ 5]: e1cd67bfe18df2a1 -Block 0000 [ 6]: a8c04ae868f9e203 -Block 0000 [ 7]: 37a422ec2be1e14a -Block 0000 [ 8]: ea9c1ad5c2eb5a3c -Block 0000 [ 9]: 3c3424244acf65b3 -Block 0000 [ 10]: 989f059deef06d0e -Block 0000 [ 11]: da5804817b974b81 -Block 0000 [ 12]: 568bf960dcd66161 -Block 0000 [ 13]: c7e121cade4f297b -Block 0000 [ 14]: 27137ecb75c49a3f -Block 0000 [ 15]: 2dcd6d8f395ca8e2 -Block 0000 [ 16]: f54545a15ff00e31 -Block 0000 [ 17]: 3a7c1498b8d66c10 -Block 0000 [ 18]: 4a2d2bb85113a135 -Block 0000 [ 19]: 78b94e1def66f354 -Block 0000 [ 20]: e2c64ed507262087 -Block 0000 [ 21]: e6ca912ac501b306 -Block 0000 [ 22]: c0550c72d9d27c6f -Block 0000 [ 23]: 0a989bf18f3d182f -Block 0000 [ 24]: 03021933aeecca55 -Block 0000 [ 25]: a2c5723fd06c1245 -Block 0000 [ 26]: 29deb6fc754291db -Block 0000 [ 27]: 01e5e4663bd45e9b -Block 0000 [ 28]: 42df9217bad5bad4 -Block 0000 [ 29]: cbce9a4ee35f8a19 -Block 0000 [ 30]: 5e3da2d83d8eb369 -Block 0000 [ 31]: 4aa815e870f6d260 -Block 0000 [ 32]: 9fb5792a7cacd0dd -Block 0000 [ 33]: 537c357f3389887d -Block 0000 [ 34]: 85ab6defa2a243a6 -Block 0000 [ 35]: 9a0d93d5abead9c9 -Block 0000 [ 36]: 8db03096016980a9 -Block 0000 [ 37]: 8136c1a3dd0bb522 -Block 0000 [ 38]: 8cf8da44ab7d86b7 -Block 0000 [ 39]: e6f2cf5e26222f47 -Block 0000 [ 40]: fb2c472f85b81433 -Block 0000 [ 41]: 86e420d43e669e99 -Block 0000 [ 42]: a94125c90c4e51eb -Block 0000 [ 43]: f0cdfc7f5d9661d5 -Block 0000 [ 44]: f35814a7d0533f8e -Block 0000 [ 45]: eaee32abeeb1d71d -Block 0000 [ 46]: 5a19ad61e8018c3b -Block 0000 [ 47]: 42dc03945b12adb0 -Block 0000 [ 48]: 0efc60abd50a2629 -Block 0000 [ 49]: 71682cdb7a674bcc -Block 0000 [ 50]: b91c1757438caaa3 -Block 0000 [ 51]: 456a17580d4264d0 -Block 0000 [ 52]: e2830a456e3be8d1 -Block 0000 [ 53]: 6984a07c7eb39daa -Block 0000 [ 54]: 129d6a66f99e7c51 -Block 0000 [ 55]: 49cd04749c85f25d -Block 0000 [ 56]: cf5e1f90e3ccacea -Block 0000 [ 57]: e00d2db8929c2342 -Block 0000 [ 58]: 4a50a98f75a4d23a -Block 0000 [ 59]: 06f3a32ee178e8a3 -Block 0000 [ 60]: e34113ed208c810e -Block 0000 [ 61]: 2ded060db2eebe26 -Block 0000 [ 62]: dd60eb35ca0c7625 -Block 0000 [ 63]: ad1d92d562b0d222 -Block 0000 [ 64]: 047447517d666518 -Block 0000 [ 65]: 613ce6bb0ff26d08 -Block 0000 [ 66]: 5521788de49616b7 -Block 0000 [ 67]: 3a5056474730596e -Block 0000 [ 68]: d5cbdad593ff2517 -Block 0000 [ 69]: 61fa2a8e714695c1 -Block 0000 [ 70]: 23baaccba2490eb5 -Block 0000 [ 71]: 655cfc83b1a82fc5 -Block 0000 [ 72]: a5c66c25b7fc4ebf -Block 0000 [ 73]: 95f66ee973a5b6e3 -Block 0000 [ 74]: 082e286bdaa2cd49 -Block 0000 [ 75]: 849a992344f431c8 -Block 0000 [ 76]: 9bbc20fce1f8e3fc -Block 0000 [ 77]: 1b7586e5ce69f2b5 -Block 0000 [ 78]: 9a263f9fdd4628fc -Block 0000 [ 79]: 7cd5ff4d7eb3c224 -Block 0000 [ 80]: 76dd41d1fc458a1f -Block 0000 [ 81]: e7db382f1cb0c2c9 -Block 0000 [ 82]: 837e7a11ad6033c2 -Block 0000 [ 83]: eaf7ed04d62b47a7 -Block 0000 [ 84]: 7f3e93feae950543 -Block 0000 [ 85]: f43dce98db930c6c -Block 0000 [ 86]: 034085278bfb1aaf -Block 0000 [ 87]: 047c628b27d21682 -Block 0000 [ 88]: ff6f46a71535f39d -Block 0000 [ 89]: cf8b2ec8ea64daa0 -Block 0000 [ 90]: 7798fea1844fc894 -Block 0000 [ 91]: e5a89e1eaa8c2be8 -Block 0000 [ 92]: 7da8c3309f71a9c4 -Block 0000 [ 93]: 126aa1334fabc285 -Block 0000 [ 94]: a31b8a6990dff9ea -Block 0000 [ 95]: b6f753045da7efcb -Block 0000 [ 96]: d5f7ae86280997fb -Block 0000 [ 97]: 4ac781ee5a227dc2 -Block 0000 [ 98]: 90bf68c528de1614 -Block 0000 [ 99]: f2b948077c97bb31 -Block 0000 [100]: ed9869cd2fcc01d6 -Block 0000 [101]: dd757dd9bb87c485 -Block 0000 [102]: 401e6dfaeb98fdc1 -Block 0000 [103]: ce46cebd1c998df8 -Block 0000 [104]: 2c96b3649229238c -Block 0000 [105]: d73d3649246a34e8 -Block 0000 [106]: f8c09d8ed3624653 -Block 0000 [107]: 4b00e20ec3ef6334 -Block 0000 [108]: fc612e9aea430b66 -Block 0000 [109]: 082cb1bffd463327 -Block 0000 [110]: 708afd583f223878 -Block 0000 [111]: bacc8830cdfb689a -Block 0000 [112]: 51c543c47d97a5e5 -Block 0000 [113]: 088ddff206e1af93 -Block 0000 [114]: 14ba0bf68723ea38 -Block 0000 [115]: 60cec002007482d7 -Block 0000 [116]: cc35a0963e1e318e -Block 0000 [117]: e49f60771b29722a -Block 0000 [118]: 571920b4c7fc0351 -Block 0000 [119]: fb7800322db6813b -Block 0000 [120]: d6ee0ab287858786 -Block 0000 [121]: 8a78e72d193027b9 -Block 0000 [122]: 6e5c870b4156f14e -Block 0000 [123]: 940e690ff9bd0e4b -Block 0000 [124]: e4ceee2788ca1338 -Block 0000 [125]: 107efa0a04948bea -Block 0000 [126]: 54169c55f786c3de -Block 0000 [127]: 27f4ddbe3b4bfb29 -Block 0001 [ 0]: 7c7e4e842a102e2d -Block 0001 [ 1]: d97fb43fe330bc52 -Block 0001 [ 2]: dbb3531f03bfaed0 -Block 0001 [ 3]: 379d167ac7eb5f37 -Block 0001 [ 4]: bcac160bbdff1487 -Block 0001 [ 5]: a2ddda9500ea90be -Block 0001 [ 6]: 1d7966fb7d9f62f3 -Block 0001 [ 7]: f015be978fbcd6e9 -Block 0001 [ 8]: 6f6b9177dbf23924 -Block 0001 [ 9]: cd3d5950128429bc -Block 0001 [ 10]: 6002e39a85144740 -Block 0001 [ 11]: 9af2c013af0db2a5 -Block 0001 [ 12]: 32d56e0705ddb5d4 -Block 0001 [ 13]: f8ed5a41bf619926 -Block 0001 [ 14]: a48b07b10a30d3f0 -Block 0001 [ 15]: 30c347cbeac2dba4 -Block 0001 [ 16]: 0705452f5690858e -Block 0001 [ 17]: 91214114cad3fbb2 -Block 0001 [ 18]: c3c528bbc2f2b866 -Block 0001 [ 19]: 8449f042c4edcb84 -Block 0001 [ 20]: b4f8190f05d2860b -Block 0001 [ 21]: ff0e2dbbc88c0452 -Block 0001 [ 22]: d063b4424c6fabf3 -Block 0001 [ 23]: 79785bfe15e572e9 -Block 0001 [ 24]: 8b9cf846aeb1ad6e -Block 0001 [ 25]: 06384456c23106a8 -Block 0001 [ 26]: f67379d12f8af09c -Block 0001 [ 27]: d557757d96eb9d12 -Block 0001 [ 28]: b153ed5e9e18c9f8 -Block 0001 [ 29]: 9e865cefbd445b3a -Block 0001 [ 30]: 84a87d3cf1d42139 -Block 0001 [ 31]: 98eff782bd9f7acf -Block 0001 [ 32]: baa280b8075cae9b -Block 0001 [ 33]: 64ac022bf3b0cf64 -Block 0001 [ 34]: e445bbadf36fea9f -Block 0001 [ 35]: 7a638052234cecc5 -Block 0001 [ 36]: d1561f72f4db01a3 -Block 0001 [ 37]: c0ee406b5dab7a6c -Block 0001 [ 38]: 03999c6c700e7e52 -Block 0001 [ 39]: c2adb31c6e041da3 -Block 0001 [ 40]: fca2270651bb2959 -Block 0001 [ 41]: 5ee8f5be5975c4d7 -Block 0001 [ 42]: abe285efbc633b22 -Block 0001 [ 43]: 1232e79db37874d7 -Block 0001 [ 44]: 6f8b937469210023 -Block 0001 [ 45]: b6771199336d27d2 -Block 0001 [ 46]: 68261151e67ef112 -Block 0001 [ 47]: a3d3c5385acb39f3 -Block 0001 [ 48]: e13cc3158a887bad -Block 0001 [ 49]: 6e49bbe54dcdd6e1 -Block 0001 [ 50]: 7b53792348cebf03 -Block 0001 [ 51]: 2bad526dc40fd5ed -Block 0001 [ 52]: 4fc378646d4f270e -Block 0001 [ 53]: 7e1238268cb3c608 -Block 0001 [ 54]: 3e6bef59b00ed662 -Block 0001 [ 55]: 6cbc24d59c79bf65 -Block 0001 [ 56]: 93bf6f73eaaa18d3 -Block 0001 [ 57]: 3086062a47b65381 -Block 0001 [ 58]: 0a573df850f72ca7 -Block 0001 [ 59]: a34505f05cd9b423 -Block 0001 [ 60]: 73dc824fcfcd196e -Block 0001 [ 61]: ca8eb6deca473c6d -Block 0001 [ 62]: 6c750f133ae71a99 -Block 0001 [ 63]: 88c12f0eab06a0b1 -Block 0001 [ 64]: 1a0db5c1522ab263 -Block 0001 [ 65]: 99da78e8b8ff09d5 -Block 0001 [ 66]: fb8842c7292ca975 -Block 0001 [ 67]: 1ddb8ed4f63a9f47 -Block 0001 [ 68]: 70f53652df585383 -Block 0001 [ 69]: bf24132118dc24b4 -Block 0001 [ 70]: 937839e1f511fb44 -Block 0001 [ 71]: 65dc97b180f7d8df -Block 0001 [ 72]: f98385784dd99067 -Block 0001 [ 73]: aee167d39d525b8b -Block 0001 [ 74]: 11eb5ba83feaff09 -Block 0001 [ 75]: 3113331bd4fe5849 -Block 0001 [ 76]: c087bac03cc593eb -Block 0001 [ 77]: 911541803860d5ad -Block 0001 [ 78]: 972796bde9d1c42e -Block 0001 [ 79]: c8cd6935d63f999a -Block 0001 [ 80]: 4eb3a3310ac0652b -Block 0001 [ 81]: 5faa0e3ba17495cc -Block 0001 [ 82]: 54538022fe6f9c31 -Block 0001 [ 83]: 85ad4868c2fdd47a -Block 0001 [ 84]: 2e7bd3ad0d2a35b0 -Block 0001 [ 85]: 35087db302505af5 -Block 0001 [ 86]: 7b06c9fb29e26df2 -Block 0001 [ 87]: 9df831ef57448e1c -Block 0001 [ 88]: 1d908722a58fa4c6 -Block 0001 [ 89]: 9cfe0815564ca490 -Block 0001 [ 90]: 1b3cdb61b5feaa18 -Block 0001 [ 91]: e37917c95e8105a1 -Block 0001 [ 92]: 5704635a0737b2be -Block 0001 [ 93]: 734708322a4f163f -Block 0001 [ 94]: 65c5c56111e21f7b -Block 0001 [ 95]: 48a7e79585c82ac8 -Block 0001 [ 96]: 90b83ac17e185667 -Block 0001 [ 97]: 1e2d69687bb0f277 -Block 0001 [ 98]: 551effebbb0677cf -Block 0001 [ 99]: 7c7e64cb0b4a9dfb -Block 0001 [100]: b6e6a9e294ae2aef -Block 0001 [101]: c772befaa7b7d5a2 -Block 0001 [102]: 705a0ae7722982bd -Block 0001 [103]: 487550a7ae562b33 -Block 0001 [104]: c978ab00275b329b -Block 0001 [105]: ef22ed8e7ca24204 -Block 0001 [106]: c80b4bc89eab8590 -Block 0001 [107]: f02f2945d3db6813 -Block 0001 [108]: 1258ee15004331a1 -Block 0001 [109]: 12a45ca546f3f203 -Block 0001 [110]: 7eb5ba10595ab1bd -Block 0001 [111]: 83c50861b087e83b -Block 0001 [112]: e5c3369514f76c3b -Block 0001 [113]: b6f0b3be44be16bb -Block 0001 [114]: d90429b12ea6a18e -Block 0001 [115]: ce343138c9908c54 -Block 0001 [116]: f5b8874f958cca3b -Block 0001 [117]: 0e90768218b2827f -Block 0001 [118]: d10d62333598e847 -Block 0001 [119]: b7adbe6b921354b9 -Block 0001 [120]: f867bae8bff66bc4 -Block 0001 [121]: ec4fc408964ee14a -Block 0001 [122]: db1e5b94bf1a6ba9 -Block 0001 [123]: 4427a9a3b206a22e -Block 0001 [124]: f680b8152ab38fe3 -Block 0001 [125]: 57e82afc40c6bdb3 -Block 0001 [126]: 62669624fa9f150e -Block 0001 [127]: 3e2b78aca9af3e85 -Block 0002 [ 0]: 86efaf80eac2ed5e -Block 0002 [ 1]: 6cbb794e606e30fa -Block 0002 [ 2]: 58ba8f651613a62f -Block 0002 [ 3]: 39e6c82450a725ef -Block 0002 [ 4]: f7c274a22d6358b2 -Block 0002 [ 5]: 540c17b677071a38 -Block 0002 [ 6]: d5e18b9c175e9391 -Block 0002 [ 7]: 84142a92ecfb7e48 -Block 0002 [ 8]: 98fb5a0b8f3b87d5 -Block 0002 [ 9]: 1bac756bfe70762c -Block 0002 [ 10]: 426e9fdea7694bd7 -Block 0002 [ 11]: 2b2bc7b298230b84 -Block 0002 [ 12]: 2ba0f4d8cd3744e7 -Block 0002 [ 13]: c16dc3f56fefbe36 -Block 0002 [ 14]: 9456970ece1ae4f5 -Block 0002 [ 15]: dc71b76d67640fbd -Block 0002 [ 16]: 6a51483c1bcbd225 -Block 0002 [ 17]: ca5a32517132a4a7 -Block 0002 [ 18]: ba7b715053f1efd6 -Block 0002 [ 19]: a8c07fef13c81b75 -Block 0002 [ 20]: d08df79370575fa9 -Block 0002 [ 21]: 461e63a5da271692 -Block 0002 [ 22]: d13f39e35427319e -Block 0002 [ 23]: 727864f49a85bc04 -Block 0002 [ 24]: 229ef524b7660d7b -Block 0002 [ 25]: f2f4edb42bf81a78 -Block 0002 [ 26]: 2752e760c33b9a2b -Block 0002 [ 27]: 8c9a11a95b09715c -Block 0002 [ 28]: d0e9e5f5f517a199 -Block 0002 [ 29]: 9dad9e62f67e8afc -Block 0002 [ 30]: b8e5565ca41ee587 -Block 0002 [ 31]: 4bd71f8bcb062846 -Block 0002 [ 32]: 5e8a7c70a0cf04be -Block 0002 [ 33]: c26facf6fc442e2e -Block 0002 [ 34]: 8242539af817aec3 -Block 0002 [ 35]: 5c756cf641282347 -Block 0002 [ 36]: 209cf98052588aba -Block 0002 [ 37]: b1d35f1ccd13c627 -Block 0002 [ 38]: 66071ccee68fe1ba -Block 0002 [ 39]: c3221a5092ac879b -Block 0002 [ 40]: 789f48d15ef8de9e -Block 0002 [ 41]: ee6b857cb4aa1847 -Block 0002 [ 42]: 15c376adfaa40762 -Block 0002 [ 43]: eb0f698827d47eb1 -Block 0002 [ 44]: a394d2ea11fc10c2 -Block 0002 [ 45]: d67cf8f561e9a481 -Block 0002 [ 46]: a7acf11f6419b8e2 -Block 0002 [ 47]: e2612a660bb29fd8 -Block 0002 [ 48]: cf40e044fd3406b9 -Block 0002 [ 49]: f181e86d1eb929e5 -Block 0002 [ 50]: b730f4a0313a0f9d -Block 0002 [ 51]: ad12579bcb46430f -Block 0002 [ 52]: 65cf23444e237272 -Block 0002 [ 53]: 0c1f74ebcc48766a -Block 0002 [ 54]: c481845a7c971d93 -Block 0002 [ 55]: 4681c7fad6c494db -Block 0002 [ 56]: b7c59834dcc299b6 -Block 0002 [ 57]: 00d2679dca310ece -Block 0002 [ 58]: 186b0718dcbce10b -Block 0002 [ 59]: cdac40832d0120df -Block 0002 [ 60]: 2f74751ad7d219d3 -Block 0002 [ 61]: 36e9506170140101 -Block 0002 [ 62]: 63a29d721621df3a -Block 0002 [ 63]: f2bbb30328991022 -Block 0002 [ 64]: cf784e1f178183cb -Block 0002 [ 65]: c551388392a229d4 -Block 0002 [ 66]: e43c737c16a2998c -Block 0002 [ 67]: edba1c64023e06a8 -Block 0002 [ 68]: d30148725b097c00 -Block 0002 [ 69]: 2f7aacc907a0a410 -Block 0002 [ 70]: 0529807f7bfc11fb -Block 0002 [ 71]: 9c1fdcd641d1a7da -Block 0002 [ 72]: 432594adb3c7420b -Block 0002 [ 73]: a672c3e18f45886e -Block 0002 [ 74]: 9fdf014ee62a9a15 -Block 0002 [ 75]: 1eb438533674ead2 -Block 0002 [ 76]: 1667a75fdd2f08a4 -Block 0002 [ 77]: 88ef55710e08a035 -Block 0002 [ 78]: 2ed94808e5cbbc40 -Block 0002 [ 79]: 9e6c492a9369ab82 -Block 0002 [ 80]: 241d77bfa45b6e7a -Block 0002 [ 81]: 72b39a71964e5854 -Block 0002 [ 82]: 84de18604265df39 -Block 0002 [ 83]: 7c3edb10801b0d48 -Block 0002 [ 84]: 42f315c78dd33bb2 -Block 0002 [ 85]: 02d84c0fcc17dcde -Block 0002 [ 86]: 4361ab015f3f710b -Block 0002 [ 87]: 3f61db1d858a6be6 -Block 0002 [ 88]: 4f9efe1458258efa -Block 0002 [ 89]: 9245fc3739c44c2f -Block 0002 [ 90]: 60ceab1c851628c0 -Block 0002 [ 91]: 5e15d09383818a4c -Block 0002 [ 92]: 679f64a7cca20698 -Block 0002 [ 93]: b69349974a5e49ed -Block 0002 [ 94]: ac12e9258f2d6e04 -Block 0002 [ 95]: 489d9fd811795ec7 -Block 0002 [ 96]: 2e8296f89c6838c7 -Block 0002 [ 97]: c11755f2925691a7 -Block 0002 [ 98]: 41dbe65271283b39 -Block 0002 [ 99]: 409c1cf3e5788ed3 -Block 0002 [100]: 3e54cdb0b3fce3c4 -Block 0002 [101]: 955c3fb2dcb5810a -Block 0002 [102]: 16ae1a9795a45a40 -Block 0002 [103]: 715877d9f3b5b47e -Block 0002 [104]: 8e738b5a56e7fbdb -Block 0002 [105]: 3d2921bb972e0556 -Block 0002 [106]: 0085d78ec42ba7ff -Block 0002 [107]: 07f45baf4bcef049 -Block 0002 [108]: 6d775cc56a00f99f -Block 0002 [109]: 39217ea705c54f90 -Block 0002 [110]: 3881e3250797c790 -Block 0002 [111]: b055d6d9879ab68e -Block 0002 [112]: d947b16d523ab838 -Block 0002 [113]: 46e931e12f2d9197 -Block 0002 [114]: 85593910a8e77820 -Block 0002 [115]: d437375c655d1e9b -Block 0002 [116]: 952ba7cb1d8f446e -Block 0002 [117]: f5db5b403f667c07 -Block 0002 [118]: a72ced86fedf6fbd -Block 0002 [119]: e40062d8c9b929b1 -Block 0002 [120]: 18ab405d561e23e6 -Block 0002 [121]: db3f1f52d33e8521 -Block 0002 [122]: 526fc65c3d4198ce -Block 0002 [123]: 1c02368aedb009a0 -Block 0002 [124]: f0193b1322fea1eb -Block 0002 [125]: 08160def3ed589ba -Block 0002 [126]: c3d02084ef29e3a8 -Block 0002 [127]: 9e3c26c84794b742 -Block 0003 [ 0]: 47e4b55ca3a68849 -Block 0003 [ 1]: ce3677e651b75c83 -Block 0003 [ 2]: 93052446e287428b -Block 0003 [ 3]: 0f05057bdc434eb2 -Block 0003 [ 4]: 36bf9cdd1805985d -Block 0003 [ 5]: b9d6973b140575af -Block 0003 [ 6]: 536655215a96fc07 -Block 0003 [ 7]: 9f2c073205f1eefb -Block 0003 [ 8]: 49035726d5561411 -Block 0003 [ 9]: b19c87fa5805385d -Block 0003 [ 10]: c2048432848d1599 -Block 0003 [ 11]: 452a4980262dde88 -Block 0003 [ 12]: 6c2ff858fdd69274 -Block 0003 [ 13]: a9edd1d47c90287a -Block 0003 [ 14]: e52a0eab7afc24ef -Block 0003 [ 15]: 25eee1c982f06bba -Block 0003 [ 16]: 90bd4e021a66270e -Block 0003 [ 17]: 327bfcebf1d1c9cf -Block 0003 [ 18]: a6f77c2fcb3b40ea -Block 0003 [ 19]: cbd7b68a0d625e45 -Block 0003 [ 20]: 6a4943f1ff2876c2 -Block 0003 [ 21]: 7633be8700da0f98 -Block 0003 [ 22]: e3ec9e32f16a2da8 -Block 0003 [ 23]: fc7d59dcf497c0f5 -Block 0003 [ 24]: 5edb6a169eafd532 -Block 0003 [ 25]: d0e3c0cc94079a25 -Block 0003 [ 26]: 6f0c0ea1da6b3d56 -Block 0003 [ 27]: 0410e06dffe05b11 -Block 0003 [ 28]: a3b230d46679e317 -Block 0003 [ 29]: 5b18d07ed650f566 -Block 0003 [ 30]: 3ad4a7d10e729f78 -Block 0003 [ 31]: 1c6faf65c5e7880d -Block 0003 [ 32]: 28b6cb21416f151a -Block 0003 [ 33]: 21f23de1fb58bc00 -Block 0003 [ 34]: dba935f0876504d0 -Block 0003 [ 35]: 1b422804c8124bdb -Block 0003 [ 36]: d459afe5f9cad581 -Block 0003 [ 37]: df451308c78343c9 -Block 0003 [ 38]: 67752625a5ef6a7b -Block 0003 [ 39]: dfa0c32b55c7990b -Block 0003 [ 40]: dfa65d3cb4eff6f4 -Block 0003 [ 41]: 9d44a5a4583abc39 -Block 0003 [ 42]: 81221f10ce31c4cf -Block 0003 [ 43]: 2c75eaf2aae12a92 -Block 0003 [ 44]: 5c73ea9099605ec4 -Block 0003 [ 45]: e38ce91cc6fb0c88 -Block 0003 [ 46]: 59607ea7ed2cf60c -Block 0003 [ 47]: dc478047f6b71620 -Block 0003 [ 48]: 5857e51b6d638f28 -Block 0003 [ 49]: 280fbc8107a5c239 -Block 0003 [ 50]: 32ba01e4cffbd141 -Block 0003 [ 51]: 2052dd85024e1869 -Block 0003 [ 52]: 812f491bd5de07bb -Block 0003 [ 53]: dc80c11853ab55ff -Block 0003 [ 54]: 0be2e2faca6cd724 -Block 0003 [ 55]: 3de4a64cad66aff2 -Block 0003 [ 56]: dd39f6170b7ebb97 -Block 0003 [ 57]: 5deefd62fa73991d -Block 0003 [ 58]: 4d81ea48d0879d8d -Block 0003 [ 59]: 5e287e11a01fa8cc -Block 0003 [ 60]: 1750e9cdaa57979d -Block 0003 [ 61]: d44bc2a6bb5e0c1d -Block 0003 [ 62]: 3eb6172aa93f7235 -Block 0003 [ 63]: 625851b0f51453cd -Block 0003 [ 64]: 787aa08312b800c2 -Block 0003 [ 65]: 926dd8711de0aa81 -Block 0003 [ 66]: f92c3b44a3930a99 -Block 0003 [ 67]: 202321fd495bc4dd -Block 0003 [ 68]: 8ba8059f755bc587 -Block 0003 [ 69]: 912c62454af1486b -Block 0003 [ 70]: abc58ea3d020e71c -Block 0003 [ 71]: 019f064393246e8e -Block 0003 [ 72]: 447d2b297c5c0a60 -Block 0003 [ 73]: 8b10703382e5d0c2 -Block 0003 [ 74]: 1d3bc2052bace4dd -Block 0003 [ 75]: d840e74802a71b30 -Block 0003 [ 76]: 9860620a312cd5e1 -Block 0003 [ 77]: e02377a18ac65e65 -Block 0003 [ 78]: 11871fd45a03d051 -Block 0003 [ 79]: feaa331ec85d2e65 -Block 0003 [ 80]: 54b602f1cec5a912 -Block 0003 [ 81]: d03a5a9d3de97d60 -Block 0003 [ 82]: bcb99e1b95b67044 -Block 0003 [ 83]: 35976d9cac311fc1 -Block 0003 [ 84]: a838d7c9595d830d -Block 0003 [ 85]: ca8276cafa72e5be -Block 0003 [ 86]: 76b9769123938b18 -Block 0003 [ 87]: 3bb48f4670306aa0 -Block 0003 [ 88]: fbd323102d37a4cc -Block 0003 [ 89]: 7a787b482ae5c679 -Block 0003 [ 90]: 41759fa5a6c77e1d -Block 0003 [ 91]: 5eba576416c98141 -Block 0003 [ 92]: 0a4420853cd2220b -Block 0003 [ 93]: 764c40c685f1ad35 -Block 0003 [ 94]: b9c859e929596367 -Block 0003 [ 95]: c49f156da3049e06 -Block 0003 [ 96]: 0601b22007d45a9d -Block 0003 [ 97]: 7342d9112bdf462f -Block 0003 [ 98]: 57a4ea145c8dfd59 -Block 0003 [ 99]: 6713f392d28f454b -Block 0003 [100]: 54769b84908fe40a -Block 0003 [101]: 18ee40ca2547674d -Block 0003 [102]: 2e9b828597481407 -Block 0003 [103]: 7fcc3d5791033ac8 -Block 0003 [104]: 74163ca2e9f91de5 -Block 0003 [105]: 916299261106d2ee -Block 0003 [106]: c5c5798b20f0f813 -Block 0003 [107]: b98bfea35c51037c -Block 0003 [108]: e8907314d75807c4 -Block 0003 [109]: fc5ab15c031499db -Block 0003 [110]: a1ffdca0b3446d30 -Block 0003 [111]: f084211b0c5e43b2 -Block 0003 [112]: 52e7554b5df72092 -Block 0003 [113]: e55a86c0b8f08a81 -Block 0003 [114]: 9f021f191a8bef77 -Block 0003 [115]: b45e6d2a520505ac -Block 0003 [116]: 9bf1e40036d9fbee -Block 0003 [117]: 8df547b45358d289 -Block 0003 [118]: 543f8dac24f4841a -Block 0003 [119]: 33e7a353ca697ef7 -Block 0003 [120]: e8f81c6070ff2b86 -Block 0003 [121]: 05a0a6c1a44952d8 -Block 0003 [122]: dc1f07f38de6e460 -Block 0003 [123]: 381b8afc1b6d7bf6 -Block 0003 [124]: 8f92a8605ccc67e7 -Block 0003 [125]: e2a38a24d6c52813 -Block 0003 [126]: 8f69eb2814952c79 -Block 0003 [127]: 62a72909082d270e -Block 0004 [ 0]: 871209abdcbd4665 -Block 0004 [ 1]: 6ab1ca5cd5ecef94 -Block 0004 [ 2]: 1fea45956063895b -Block 0004 [ 3]: ee58d6590d1676bb -Block 0004 [ 4]: 3dc00f189dc5c3fa -Block 0004 [ 5]: a5b8ce1a1f4e7020 -Block 0004 [ 6]: 7b1f6d1a4a686357 -Block 0004 [ 7]: 8b1edaacca4590b2 -Block 0004 [ 8]: 60fedc7502cc9fa5 -Block 0004 [ 9]: b68e2a1d1dd5dfd9 -Block 0004 [ 10]: ad3a8268c1e90b40 -Block 0004 [ 11]: 84b4724c4bd5fc51 -Block 0004 [ 12]: 968da98760d2c519 -Block 0004 [ 13]: 7e20bddeea2c88c5 -Block 0004 [ 14]: 35cf39e20d289cb8 -Block 0004 [ 15]: c17a80a2c0a9250d -Block 0004 [ 16]: 801d2fe51918e490 -Block 0004 [ 17]: 334599dfe6468fcb -Block 0004 [ 18]: 05e2044464c256dc -Block 0004 [ 19]: 506830970d8ae416 -Block 0004 [ 20]: 97acbf19c3efd58b -Block 0004 [ 21]: 2dbf1feb30fa28c8 -Block 0004 [ 22]: 7d79f356d1d44674 -Block 0004 [ 23]: 40812a1b85e1aae2 -Block 0004 [ 24]: e4a94f755dfb89de -Block 0004 [ 25]: a683e248949966dc -Block 0004 [ 26]: 33f3a86f657124ef -Block 0004 [ 27]: fabc367ac27942c3 -Block 0004 [ 28]: b99e431918cc7c59 -Block 0004 [ 29]: 6d033fc5e284994e -Block 0004 [ 30]: b07e2fa321621b2c -Block 0004 [ 31]: f7535b1505615d74 -Block 0004 [ 32]: 68bb97943fa339cf -Block 0004 [ 33]: 91672a586f73085e -Block 0004 [ 34]: 7c3b401568284ce5 -Block 0004 [ 35]: fbc4adc821140d2d -Block 0004 [ 36]: ca5599b6de915aca -Block 0004 [ 37]: b3b6a518685f440b -Block 0004 [ 38]: a03850795b7c782e -Block 0004 [ 39]: 75020b29baf49164 -Block 0004 [ 40]: 86f193633b5f37af -Block 0004 [ 41]: fe3460ff365fd099 -Block 0004 [ 42]: db4921a0057c5560 -Block 0004 [ 43]: a9cbc706024dfa2b -Block 0004 [ 44]: 31d16202356d73a3 -Block 0004 [ 45]: 30e16b62c4099af6 -Block 0004 [ 46]: a6c9b1183dcd19f7 -Block 0004 [ 47]: 4d9e959d8d6b3754 -Block 0004 [ 48]: 61b83b597030b1c8 -Block 0004 [ 49]: ae6fcee3be93f61e -Block 0004 [ 50]: 50fc16f00eba0f19 -Block 0004 [ 51]: 0a64962755c66c4f -Block 0004 [ 52]: 6ccf1966f53437c9 -Block 0004 [ 53]: 3f5226c05a50ca43 -Block 0004 [ 54]: acaa53ac8359b625 -Block 0004 [ 55]: 938f69e09741ac2c -Block 0004 [ 56]: 0f0ac9cc7eb41bb3 -Block 0004 [ 57]: b5969b3c1fe6b866 -Block 0004 [ 58]: 07ca5b9db7f95807 -Block 0004 [ 59]: b063da491eb1c31e -Block 0004 [ 60]: 65ff8c77bead17f7 -Block 0004 [ 61]: ed8040671c8d7f81 -Block 0004 [ 62]: 464389f4113f5e88 -Block 0004 [ 63]: 7c48c61726449223 -Block 0004 [ 64]: 9f7b6bf8527d1d1f -Block 0004 [ 65]: e709423c16c82110 -Block 0004 [ 66]: 337f9777fa88c26c -Block 0004 [ 67]: 02d89d338ed99ff6 -Block 0004 [ 68]: d35b61d714e2159c -Block 0004 [ 69]: ef0065d8a46d091d -Block 0004 [ 70]: 21bbb304a6c274ce -Block 0004 [ 71]: 9754ea69566260de -Block 0004 [ 72]: 15af436883827327 -Block 0004 [ 73]: 294ebef6568a9143 -Block 0004 [ 74]: 216c83e9fb7bfefc -Block 0004 [ 75]: 6ea0a345816ae474 -Block 0004 [ 76]: 0d877976466f0287 -Block 0004 [ 77]: 455498ff52f8a84a -Block 0004 [ 78]: 4a048b3ee88673e7 -Block 0004 [ 79]: 3660bd8483ac2d36 -Block 0004 [ 80]: 391af29c8b695622 -Block 0004 [ 81]: 4f62ea7ffbe0a95c -Block 0004 [ 82]: 9b2b3f4d04352770 -Block 0004 [ 83]: 44c1cff0e51499b3 -Block 0004 [ 84]: a1e531f8cf6edf18 -Block 0004 [ 85]: 39419f0074881536 -Block 0004 [ 86]: cef4024632610741 -Block 0004 [ 87]: 11049ca17737c32c -Block 0004 [ 88]: 0a10c0cd7a189f1b -Block 0004 [ 89]: 687c690e01cd83cd -Block 0004 [ 90]: f06a0133bfce8cdc -Block 0004 [ 91]: 66df6a2e23c8944b -Block 0004 [ 92]: fbcff4b3ed651268 -Block 0004 [ 93]: 8ad5f038e3123bb7 -Block 0004 [ 94]: 6bb487bb9c8d8cd0 -Block 0004 [ 95]: 93cf69fc27d4689a -Block 0004 [ 96]: 2afec0f26e5bf277 -Block 0004 [ 97]: 31134929d344d951 -Block 0004 [ 98]: ffd87f78eb17b89c -Block 0004 [ 99]: faa9ec74ce7f8e49 -Block 0004 [100]: b3259d1d6c5be3e2 -Block 0004 [101]: 45b02bd8b76389f9 -Block 0004 [102]: bec627f348f56a93 -Block 0004 [103]: cbcae4615e596978 -Block 0004 [104]: 80c9283195da7520 -Block 0004 [105]: e8e6d067602f52a8 -Block 0004 [106]: 48a563e2f8a17c40 -Block 0004 [107]: 2d7194ce9e175b97 -Block 0004 [108]: f3bada1842a83c8d -Block 0004 [109]: 10a24148069fb4d0 -Block 0004 [110]: 87b4ac62310e3055 -Block 0004 [111]: 70b8e8adc9d8d6a9 -Block 0004 [112]: 988c39066b575815 -Block 0004 [113]: adaea6def4975f21 -Block 0004 [114]: e09dcaf815dd8dac -Block 0004 [115]: 790523ec82c9ba99 -Block 0004 [116]: 4e4f599373a63715 -Block 0004 [117]: e5d6a1032a0bbfcd -Block 0004 [118]: a87032ec60719b7e -Block 0004 [119]: 5522154a317e43a4 -Block 0004 [120]: 8c2420ea268cf592 -Block 0004 [121]: 50ca5df1c96c8b97 -Block 0004 [122]: 9361eceab543a181 -Block 0004 [123]: bce9db3fb691ac63 -Block 0004 [124]: bbaebb394c9fe4af -Block 0004 [125]: ed63ee581ce22d7e -Block 0004 [126]: 94ae21616c5b3094 -Block 0004 [127]: d95da019e0999430 -Block 0005 [ 0]: 155ccff39341aa6f -Block 0005 [ 1]: 54a69c64dcb493ca -Block 0005 [ 2]: eef63d3a6926f8d9 -Block 0005 [ 3]: e9ca019f8c490de2 -Block 0005 [ 4]: ef5fe2e9fe1cfda3 -Block 0005 [ 5]: e06a975887aa3e04 -Block 0005 [ 6]: 7f838117d20e0aee -Block 0005 [ 7]: f06651485d09f94b -Block 0005 [ 8]: ad01c8ce33481657 -Block 0005 [ 9]: f148a24f675e9076 -Block 0005 [ 10]: bf2b9ec0049a032b -Block 0005 [ 11]: 79852b9bfb6698d7 -Block 0005 [ 12]: 6bd08e133c925b5d -Block 0005 [ 13]: 27447ed323030ef8 -Block 0005 [ 14]: 7895b4059a429434 -Block 0005 [ 15]: 017379983bc697eb -Block 0005 [ 16]: 28633004c9c92418 -Block 0005 [ 17]: 49fe67b1a66ba90e -Block 0005 [ 18]: 46420673b44352d3 -Block 0005 [ 19]: 174a91fd26893166 -Block 0005 [ 20]: 7ccbf4705560e6d8 -Block 0005 [ 21]: cca42142125d19e2 -Block 0005 [ 22]: 2be2e05c33484649 -Block 0005 [ 23]: 06b455f3384c102b -Block 0005 [ 24]: d91ee93c8e0a32c8 -Block 0005 [ 25]: b8b3676e186c199a -Block 0005 [ 26]: 5318de0cac98b443 -Block 0005 [ 27]: cf2f2eafd31ecb65 -Block 0005 [ 28]: aa2c13d8af3ac49c -Block 0005 [ 29]: f13e38159c731e1d -Block 0005 [ 30]: bfb273d30db0ea8b -Block 0005 [ 31]: e9ee2ed512ec4707 -Block 0005 [ 32]: 536e64c7cd9be92d -Block 0005 [ 33]: 32d61c4f2eb9be8b -Block 0005 [ 34]: d1c1f55c0da42e83 -Block 0005 [ 35]: 5fe40d60e4f9a806 -Block 0005 [ 36]: 1bd9c2a64123ffe8 -Block 0005 [ 37]: d8c68b4b6755892c -Block 0005 [ 38]: 224f6d01f3b8dc87 -Block 0005 [ 39]: 95987eb6fd5f46fa -Block 0005 [ 40]: 09fb258b50b2b264 -Block 0005 [ 41]: 34f3e6a34baf8636 -Block 0005 [ 42]: 5663b55c7b79c10e -Block 0005 [ 43]: 264e60d189cd2be0 -Block 0005 [ 44]: a1aad8cc73e60800 -Block 0005 [ 45]: 87343e7c26f33a7a -Block 0005 [ 46]: f4c06e87f63e3ae3 -Block 0005 [ 47]: ef2a9f44d99cdc77 -Block 0005 [ 48]: 0c37d5b69521bdd3 -Block 0005 [ 49]: bf1a13fedd395420 -Block 0005 [ 50]: 5b555201c45b3bde -Block 0005 [ 51]: d697bb37c4d40ad5 -Block 0005 [ 52]: e05a26e4b9f4ccc5 -Block 0005 [ 53]: 0ec56bfea415df1f -Block 0005 [ 54]: 7a75ac9069cd78ef -Block 0005 [ 55]: 246d2c2beaa6c1b0 -Block 0005 [ 56]: 6140b1bda15aab8f -Block 0005 [ 57]: 7b8ef6f99539bf8c -Block 0005 [ 58]: fb5e418d315c83b3 -Block 0005 [ 59]: d6fe3bddeee33757 -Block 0005 [ 60]: 325bc7c925602628 -Block 0005 [ 61]: 43516cffe54b3b0a -Block 0005 [ 62]: 384035fcf36ccb13 -Block 0005 [ 63]: 3c9539555b7f3987 -Block 0005 [ 64]: 22b1ac749010da2c -Block 0005 [ 65]: 031eaeb8a8f08b92 -Block 0005 [ 66]: 6a63b6c7815d478e -Block 0005 [ 67]: dd27ffc33860c497 -Block 0005 [ 68]: 99126b88405bf412 -Block 0005 [ 69]: abccb2bd8cf0704b -Block 0005 [ 70]: 2b1bfcd0f9d379b3 -Block 0005 [ 71]: 3551021bf0ad8ee0 -Block 0005 [ 72]: 3aa0cb329547f7db -Block 0005 [ 73]: c780c336227e34f2 -Block 0005 [ 74]: caf8eacb9a26c871 -Block 0005 [ 75]: b3134f664b9dd172 -Block 0005 [ 76]: 8b23138df8a9fd40 -Block 0005 [ 77]: da12b22060a68654 -Block 0005 [ 78]: 266cb3df2a3e1018 -Block 0005 [ 79]: 492187e0415be49e -Block 0005 [ 80]: 312347210bf47feb -Block 0005 [ 81]: affa92d1b4555ad1 -Block 0005 [ 82]: 70328f688d12367b -Block 0005 [ 83]: 58818080e3e91734 -Block 0005 [ 84]: e36e9321b2429731 -Block 0005 [ 85]: 86b75de040abcef0 -Block 0005 [ 86]: 3306f439957b9731 -Block 0005 [ 87]: 06e0997abfb5d79f -Block 0005 [ 88]: a77295a2f4538305 -Block 0005 [ 89]: 6c0a3e8b55c9e35b -Block 0005 [ 90]: 568bae7e7d1b9abd -Block 0005 [ 91]: 1d3b9385bd55d372 -Block 0005 [ 92]: 4f536880c060d963 -Block 0005 [ 93]: 606521fc00a08c7f -Block 0005 [ 94]: ca173b52b80a7952 -Block 0005 [ 95]: 01c0457196c7269b -Block 0005 [ 96]: ac7a2712fb33911f -Block 0005 [ 97]: 77feb9e9ccf48ecf -Block 0005 [ 98]: b1c088252562dee0 -Block 0005 [ 99]: 5523c9d087069aaf -Block 0005 [100]: e878930aefaddd43 -Block 0005 [101]: 7487a72baff492ef -Block 0005 [102]: 6891437d8a389bd5 -Block 0005 [103]: bfa3113471fd5d18 -Block 0005 [104]: 0d3ddbe17f9e084e -Block 0005 [105]: 2cc1c5a314f6e837 -Block 0005 [106]: 03e0d06131142837 -Block 0005 [107]: 28537aa176e020fc -Block 0005 [108]: e410025b3345934b -Block 0005 [109]: 62c4883861dfd8ae -Block 0005 [110]: 12b80d8ab0a37f1a -Block 0005 [111]: 82b705019cec0fb3 -Block 0005 [112]: ec1ca9634dbffe5b -Block 0005 [113]: 72feedad093bb4b0 -Block 0005 [114]: 6abee7fca315e0d4 -Block 0005 [115]: 5d75e6744aef9203 -Block 0005 [116]: 6be017c75c642aa1 -Block 0005 [117]: 7e172e238794d952 -Block 0005 [118]: 142a6d2f23e2eb72 -Block 0005 [119]: 6c39eb4627fdce76 -Block 0005 [120]: 0f61eb951bb9a8c7 -Block 0005 [121]: f51a98b0335ee217 -Block 0005 [122]: 89f7533015d3b6c5 -Block 0005 [123]: 7c5f4947988a52bc -Block 0005 [124]: 737c5304fdea7426 -Block 0005 [125]: 34f53ef7e17fc1f4 -Block 0005 [126]: 62c66398981ea1e2 -Block 0005 [127]: 39c9a16aee082d52 -Block 0006 [ 0]: c3bcb1abd61815c0 -Block 0006 [ 1]: 83b7950cbd0c5c0e -Block 0006 [ 2]: 3f4b1eb8ca73ddd7 -Block 0006 [ 3]: 4941802796861b2f -Block 0006 [ 4]: d2423564817e9c63 -Block 0006 [ 5]: 30d3554169a39bc3 -Block 0006 [ 6]: 79325b66f3c62418 -Block 0006 [ 7]: a292650ed9851d8b -Block 0006 [ 8]: 5966a6a6a6b98159 -Block 0006 [ 9]: d3d0f7de1865efe1 -Block 0006 [ 10]: f806353da999c88c -Block 0006 [ 11]: 2596be1606155ac3 -Block 0006 [ 12]: 44f7e2410fdade67 -Block 0006 [ 13]: 3ae822a453e5df49 -Block 0006 [ 14]: c709635132fb5232 -Block 0006 [ 15]: 22f02a7d54e8c5ac -Block 0006 [ 16]: cb9702971b3c0666 -Block 0006 [ 17]: 83997e32defcc4f6 -Block 0006 [ 18]: 512837aa821221ac -Block 0006 [ 19]: 9b6396869872661c -Block 0006 [ 20]: 2fe121552172eddd -Block 0006 [ 21]: 946a4d7435354818 -Block 0006 [ 22]: 87b54129576c4a9c -Block 0006 [ 23]: 28b86e840a4064d9 -Block 0006 [ 24]: f9f1822ce98f3ca0 -Block 0006 [ 25]: 344e3c556a58cc14 -Block 0006 [ 26]: 883035b52362e185 -Block 0006 [ 27]: f36ba02aa3454e68 -Block 0006 [ 28]: 048750f15e3ffd00 -Block 0006 [ 29]: 51caa2d99e8a24ab -Block 0006 [ 30]: 7811c3a5ede085db -Block 0006 [ 31]: 191cd21a6481418d -Block 0006 [ 32]: af23c99585efa784 -Block 0006 [ 33]: 009b765496773741 -Block 0006 [ 34]: 6b2f4fc088cd7915 -Block 0006 [ 35]: 2f47f7ffb875f613 -Block 0006 [ 36]: 4d4bc03237a6f45d -Block 0006 [ 37]: 05a194b584b3e4f3 -Block 0006 [ 38]: 876c8e1c406258a9 -Block 0006 [ 39]: 094c4a65daf31597 -Block 0006 [ 40]: 71979d2c94876815 -Block 0006 [ 41]: d95fbb18cdde807b -Block 0006 [ 42]: 56873c3c6a77ea27 -Block 0006 [ 43]: 0e8ee552d3dbb73c -Block 0006 [ 44]: 354914b53c56f3cf -Block 0006 [ 45]: 3af03f752ae6d89f -Block 0006 [ 46]: 9cf11128e09615c1 -Block 0006 [ 47]: 2b1793be04e3d175 -Block 0006 [ 48]: 152c18eb08686b4e -Block 0006 [ 49]: ea062b401a839631 -Block 0006 [ 50]: aee5f2f751f1c24a -Block 0006 [ 51]: 174e16304bc95ced -Block 0006 [ 52]: 31afd4326e143511 -Block 0006 [ 53]: 3e6bb44a56e9adff -Block 0006 [ 54]: a9ab2ae4f513489b -Block 0006 [ 55]: e8b59bb6b3ed5627 -Block 0006 [ 56]: 1a0098009a7d2d2f -Block 0006 [ 57]: f768c69efa1d67b4 -Block 0006 [ 58]: bf24fd4213be81d2 -Block 0006 [ 59]: 26707139bbe1b40d -Block 0006 [ 60]: b0664adea7357dd7 -Block 0006 [ 61]: 048453a9909258e6 -Block 0006 [ 62]: b69cdb041e2b2de0 -Block 0006 [ 63]: 5430e7650ccd9852 -Block 0006 [ 64]: 019f7e73ee6525ac -Block 0006 [ 65]: 1bb5a8b0938dd82c -Block 0006 [ 66]: 5091e79b43e23f21 -Block 0006 [ 67]: f2da3be4a013db03 -Block 0006 [ 68]: 98b2008447c0b8ac -Block 0006 [ 69]: 8846b0e94373ea1f -Block 0006 [ 70]: fbe04b9847c48704 -Block 0006 [ 71]: d1cf382289dc3c2f -Block 0006 [ 72]: 3a29efe90d33f696 -Block 0006 [ 73]: f22903e77daf981e -Block 0006 [ 74]: e6db7a462ee8c50b -Block 0006 [ 75]: c0509059ce0d3cff -Block 0006 [ 76]: 1f46c664bba8807d -Block 0006 [ 77]: 6379a85f3aa0f184 -Block 0006 [ 78]: cc4ba6f32664b4fc -Block 0006 [ 79]: 4c915b1a7bee1063 -Block 0006 [ 80]: b9212960b6c24468 -Block 0006 [ 81]: 79b4f92e0c689f7a -Block 0006 [ 82]: c0f3af7508f81d94 -Block 0006 [ 83]: 58d580eb8f6cab7e -Block 0006 [ 84]: bab9252d091f5a2a -Block 0006 [ 85]: de577666a2048bc7 -Block 0006 [ 86]: 33632662d8715400 -Block 0006 [ 87]: 6d0ea1c72b931660 -Block 0006 [ 88]: a3da78066b27764c -Block 0006 [ 89]: a278a6ddc80a80df -Block 0006 [ 90]: 3c2c1591ff0ff037 -Block 0006 [ 91]: a0e81559825b745b -Block 0006 [ 92]: 7a39c65250040b17 -Block 0006 [ 93]: effd385d0bbfbd5c -Block 0006 [ 94]: a690fb0e8ffc9158 -Block 0006 [ 95]: 142669d9ce44d588 -Block 0006 [ 96]: 90af245b7597b010 -Block 0006 [ 97]: 7f81e10489d3f752 -Block 0006 [ 98]: 98d6bf0d23b826f9 -Block 0006 [ 99]: ff2b06359fa73091 -Block 0006 [100]: b9891d8a4e86a7d1 -Block 0006 [101]: 2f76cd97393807b0 -Block 0006 [102]: a6e08dbea22fdbb4 -Block 0006 [103]: 5e438ed85d0c539a -Block 0006 [104]: adbe1afcb407cd9d -Block 0006 [105]: f8c35e7209ae8fc2 -Block 0006 [106]: f01786a381e5f75d -Block 0006 [107]: a0fd8d9144d2038e -Block 0006 [108]: 559367e9de9364f0 -Block 0006 [109]: 2ccf232c8f6ca882 -Block 0006 [110]: 0e1db01c3b4c62f0 -Block 0006 [111]: 8113e8478672ec59 -Block 0006 [112]: f1ea0ae15d78c389 -Block 0006 [113]: c33cf9e67f720c6d -Block 0006 [114]: 2824d46afa608c48 -Block 0006 [115]: e9ede0276710d159 -Block 0006 [116]: 93e0433df7fc77f6 -Block 0006 [117]: 7d69e3993c1460f3 -Block 0006 [118]: 72abf66864ec87a3 -Block 0006 [119]: 605deff9007bc0ce -Block 0006 [120]: 21b78f4f4ea41262 -Block 0006 [121]: 93e4596f4d325cd0 -Block 0006 [122]: 9b7dee7ba08c21f6 -Block 0006 [123]: eaf1b9c52f63d89a -Block 0006 [124]: 89c423612f0c9ffd -Block 0006 [125]: 9418a0e8c1e851a7 -Block 0006 [126]: 69955c65a7490b33 -Block 0006 [127]: 3173a0c424292d3d -Block 0007 [ 0]: 6ba8496b38841197 -Block 0007 [ 1]: ff6a2e6d337b1531 -Block 0007 [ 2]: fec2383a55d6d0d3 -Block 0007 [ 3]: 822585037db7b999 -Block 0007 [ 4]: 6834a1dab9935597 -Block 0007 [ 5]: 3313c569327449d3 -Block 0007 [ 6]: 53e24b910c22985b -Block 0007 [ 7]: 1e8b33d9e05abd81 -Block 0007 [ 8]: 6670313249886b9e -Block 0007 [ 9]: 207e04ab88f7cf12 -Block 0007 [ 10]: 8a6f5bd892a41752 -Block 0007 [ 11]: b84a87556a3e88e3 -Block 0007 [ 12]: 21b205650be73cf2 -Block 0007 [ 13]: 1eb1561c9672c294 -Block 0007 [ 14]: 3e9a33b36d56b481 -Block 0007 [ 15]: f6ca32e7178da473 -Block 0007 [ 16]: e1ac00984e2fdf66 -Block 0007 [ 17]: e1f213beb00420fe -Block 0007 [ 18]: 70c93c4772003b75 -Block 0007 [ 19]: 2178696de08e8af6 -Block 0007 [ 20]: 0bffb4fc05ac46e1 -Block 0007 [ 21]: 49d5777efd5c299c -Block 0007 [ 22]: 4acec3e85211a3d1 -Block 0007 [ 23]: de3d57be5a2f1031 -Block 0007 [ 24]: 85044f690b7477ce -Block 0007 [ 25]: cd0d85379c56058f -Block 0007 [ 26]: 1c71b6be61c6b3b7 -Block 0007 [ 27]: 31190408aac590f1 -Block 0007 [ 28]: ce49aa0929d8a6ea -Block 0007 [ 29]: d9e6a8f41ec97ed4 -Block 0007 [ 30]: e50cc28d487bcddf -Block 0007 [ 31]: 6e68852e0fb4ea28 -Block 0007 [ 32]: adb9ee01a0fffb02 -Block 0007 [ 33]: 51dba1925c8aa63f -Block 0007 [ 34]: 6e92ab6f38465397 -Block 0007 [ 35]: c2ec2bcdf128653b -Block 0007 [ 36]: b25694a246c4592f -Block 0007 [ 37]: 66410b37f06c626d -Block 0007 [ 38]: 2ccad97a38b8a60d -Block 0007 [ 39]: e80513476e773cb6 -Block 0007 [ 40]: a766c53f0ad112c9 -Block 0007 [ 41]: 4427c130a94fe37a -Block 0007 [ 42]: 2060b67375f3ad3d -Block 0007 [ 43]: 74a58556cc0e6489 -Block 0007 [ 44]: c58074434fddc554 -Block 0007 [ 45]: 858a27583a085017 -Block 0007 [ 46]: f88a99df8f73b570 -Block 0007 [ 47]: c21bb09e329ac925 -Block 0007 [ 48]: 29ea872c5e08034c -Block 0007 [ 49]: bbd71198f12c71df -Block 0007 [ 50]: f6404ea4ef1d6f2e -Block 0007 [ 51]: 145386a7ced124d6 -Block 0007 [ 52]: 69cbf3fc4068f8d6 -Block 0007 [ 53]: d7b7cc641a2170bb -Block 0007 [ 54]: b83c95965b03faed -Block 0007 [ 55]: a4157cf188bb4117 -Block 0007 [ 56]: 7172143717acef86 -Block 0007 [ 57]: cdb6489f49711464 -Block 0007 [ 58]: 1b21f5488c062af2 -Block 0007 [ 59]: 281e751e504dbf68 -Block 0007 [ 60]: 60d0f12dc5e74185 -Block 0007 [ 61]: b08294081e8249ef -Block 0007 [ 62]: 4e5b7b8e64f09128 -Block 0007 [ 63]: 66add7f61b5c0e95 -Block 0007 [ 64]: 675debc5d747afae -Block 0007 [ 65]: 794d5d3f683068a8 -Block 0007 [ 66]: 36e8710f090ebac1 -Block 0007 [ 67]: 13529fc886acb59c -Block 0007 [ 68]: 1d3c5a8f79042ef6 -Block 0007 [ 69]: 3b0927181306d5e0 -Block 0007 [ 70]: 4873c12d854f2927 -Block 0007 [ 71]: a8ef6fb5a498fefc -Block 0007 [ 72]: 8e55a9e91f278162 -Block 0007 [ 73]: f5629f3cd20af0c5 -Block 0007 [ 74]: ae75e9f6c80cf778 -Block 0007 [ 75]: 38fa5d2caefb359b -Block 0007 [ 76]: 1fcfb6d2bbf23517 -Block 0007 [ 77]: 372d4e12820e8f5e -Block 0007 [ 78]: ac9dd03841fc2c41 -Block 0007 [ 79]: 76b002cdba27d3e0 -Block 0007 [ 80]: 1bf59879b1e30e6e -Block 0007 [ 81]: 8a68990cf2a5a8f5 -Block 0007 [ 82]: 632afa5231f6d3d4 -Block 0007 [ 83]: bbf44429a770bb79 -Block 0007 [ 84]: 746687e36209f07b -Block 0007 [ 85]: fad5bc64f3274572 -Block 0007 [ 86]: a018eb23b8814708 -Block 0007 [ 87]: b41cb61d4ad7753e -Block 0007 [ 88]: 580314d1a213d60b -Block 0007 [ 89]: 4e427e87fdc6d92d -Block 0007 [ 90]: 1cb485f5924de8fd -Block 0007 [ 91]: 687fdb6bb6ac98a9 -Block 0007 [ 92]: 04e069dd82a73b0b -Block 0007 [ 93]: 8925a70571fb554e -Block 0007 [ 94]: 14860dde567eb785 -Block 0007 [ 95]: 2426e70c2283d948 -Block 0007 [ 96]: 505e230457a88d97 -Block 0007 [ 97]: 1078e11353e9cfad -Block 0007 [ 98]: 9c29e7f7217ca11c -Block 0007 [ 99]: 3d22a8e0d5b6c73b -Block 0007 [100]: 0e9a6cfffddba9ae -Block 0007 [101]: 038737d6db808e1e -Block 0007 [102]: 76106281d3f52bad -Block 0007 [103]: 433a57c1931117b4 -Block 0007 [104]: 3195542f3f970037 -Block 0007 [105]: f390555bc1c142e8 -Block 0007 [106]: 6e393054580d5c77 -Block 0007 [107]: b59995f826e3ea8a -Block 0007 [108]: 8b67b02c62482a00 -Block 0007 [109]: fc571f50017bf799 -Block 0007 [110]: be5aea8814966996 -Block 0007 [111]: 0806343d7b049900 -Block 0007 [112]: e185db328360b1f7 -Block 0007 [113]: f592ab2705a7630c -Block 0007 [114]: 19a218f17ffaf619 -Block 0007 [115]: 11243b99852c5781 -Block 0007 [116]: e491ffdd746b6f91 -Block 0007 [117]: 2bb1bbc794389f18 -Block 0007 [118]: 05545e1dfa2952e1 -Block 0007 [119]: fae4b68ab089c759 -Block 0007 [120]: 2406bc9a7d295f89 -Block 0007 [121]: 4d14821942c2c37a -Block 0007 [122]: 9455321b00e5824b -Block 0007 [123]: c12b3a7316ccd0ad -Block 0007 [124]: 962ae5fed17351e4 -Block 0007 [125]: b4e0b6e97f44972b -Block 0007 [126]: 4b452df74ac1020e -Block 0007 [127]: 7e0d387b75c20cf5 -Block 0008 [ 0]: 5259ca6d3a36b313 -Block 0008 [ 1]: 1d6d1ead6f5edbf9 -Block 0008 [ 2]: 3e626075da15b3c4 -Block 0008 [ 3]: 159304bf818a9646 -Block 0008 [ 4]: 40f28de5b742a00d -Block 0008 [ 5]: fd764500ccda300a -Block 0008 [ 6]: 93c1a2d82fcfe062 -Block 0008 [ 7]: 891b24e3f7120153 -Block 0008 [ 8]: 27f332ccb78f83d4 -Block 0008 [ 9]: d3df53656df5e84a -Block 0008 [ 10]: b3e520d550fa7e1c -Block 0008 [ 11]: b1018a57bdd1e9f3 -Block 0008 [ 12]: 61b86a7179c4f80d -Block 0008 [ 13]: 4a03abac5da9f1ca -Block 0008 [ 14]: 8fda17eda1a0a156 -Block 0008 [ 15]: 1addce7e73437ac2 -Block 0008 [ 16]: fea9bedf8bb82502 -Block 0008 [ 17]: 4c5840bef9c83e56 -Block 0008 [ 18]: a5b218fc4e41c532 -Block 0008 [ 19]: 5ec230403ad39835 -Block 0008 [ 20]: c7f49b16c6102a74 -Block 0008 [ 21]: 9b2602c9f497a960 -Block 0008 [ 22]: 9b2d5fe555b3465f -Block 0008 [ 23]: 47122c2f575c13c1 -Block 0008 [ 24]: 50a4d6db14d04ddc -Block 0008 [ 25]: 410dc8958a5e2e93 -Block 0008 [ 26]: 20f5192234fac4b5 -Block 0008 [ 27]: b4c41f2c0051c250 -Block 0008 [ 28]: 4ba7da28b90c27e0 -Block 0008 [ 29]: 6c6b3db5578529b8 -Block 0008 [ 30]: 1108be2d43f32bf7 -Block 0008 [ 31]: 6c77b6100babf0a2 -Block 0008 [ 32]: 830dba5dc317b352 -Block 0008 [ 33]: 03da88c747d12d8c -Block 0008 [ 34]: 34dd0664bda16e49 -Block 0008 [ 35]: b78e41567969e6d6 -Block 0008 [ 36]: 92ee7dcaf0366a9e -Block 0008 [ 37]: e61fe366d2213950 -Block 0008 [ 38]: e8ddfcdef2070068 -Block 0008 [ 39]: a525d18a51ef42bf -Block 0008 [ 40]: 2914e74d1937b200 -Block 0008 [ 41]: 828e147751e87a58 -Block 0008 [ 42]: 6678f5b97860ff7e -Block 0008 [ 43]: b92df23d8cd7cf61 -Block 0008 [ 44]: 6249bd3a4dc38950 -Block 0008 [ 45]: 9cf718b68e6260af -Block 0008 [ 46]: 355b1eb992fff80e -Block 0008 [ 47]: fa39bf26a986146e -Block 0008 [ 48]: 4d50d1700b363539 -Block 0008 [ 49]: b576745005e28e0c -Block 0008 [ 50]: 4103cf637375435b -Block 0008 [ 51]: d73e3ce76a4a54a0 -Block 0008 [ 52]: 3afb76f130d0b780 -Block 0008 [ 53]: c107de104e9f2dd5 -Block 0008 [ 54]: 73cb0720c2240f50 -Block 0008 [ 55]: 1bf896e70d6c2083 -Block 0008 [ 56]: a45e07f0cff18009 -Block 0008 [ 57]: 4d7612f5a121ea61 -Block 0008 [ 58]: 893f75beaddfc367 -Block 0008 [ 59]: e370e0dfde0d5d99 -Block 0008 [ 60]: 0c6c3872aa92803d -Block 0008 [ 61]: 29af23c163072580 -Block 0008 [ 62]: e1932b09eba1f3f9 -Block 0008 [ 63]: 85f51b011b100456 -Block 0008 [ 64]: 00a9e1bc03e8991f -Block 0008 [ 65]: d09e12552ef1c5d1 -Block 0008 [ 66]: cc824029d72b7bdc -Block 0008 [ 67]: 05a5cd6e9b167495 -Block 0008 [ 68]: 6d4dcb4d9f5445a8 -Block 0008 [ 69]: cc98c830e7008817 -Block 0008 [ 70]: 814a7125a194beca -Block 0008 [ 71]: 5808972b2747fe67 -Block 0008 [ 72]: 7a81cd0866c59672 -Block 0008 [ 73]: 9d9f58c494142020 -Block 0008 [ 74]: 9b4faa9e4ada6403 -Block 0008 [ 75]: bb43d73d368406b5 -Block 0008 [ 76]: a975c8724e5db21e -Block 0008 [ 77]: 3f7a667f5f787811 -Block 0008 [ 78]: e4a9d2d0fb77087f -Block 0008 [ 79]: 739edaaa0e25def1 -Block 0008 [ 80]: d582427ee94572e7 -Block 0008 [ 81]: 3c8c45c831998bd6 -Block 0008 [ 82]: 4c344b54c0ccaf0c -Block 0008 [ 83]: cf7dd330084c741a -Block 0008 [ 84]: 953fa1dcf74a93e5 -Block 0008 [ 85]: 8084832af5b9a52d -Block 0008 [ 86]: 55baac78297fc151 -Block 0008 [ 87]: fae1b46c08dbc171 -Block 0008 [ 88]: a3d0bdb749a194e0 -Block 0008 [ 89]: e87d1b2638d34859 -Block 0008 [ 90]: 2b9f364c44ab2eb9 -Block 0008 [ 91]: d8262a2360ce0759 -Block 0008 [ 92]: 346bb034f119271c -Block 0008 [ 93]: c94b9fb51412a621 -Block 0008 [ 94]: 4225b9cde4fc86ac -Block 0008 [ 95]: 4e8e3c64415b1ee4 -Block 0008 [ 96]: 60009e56552c6993 -Block 0008 [ 97]: d1abc108a143c4e2 -Block 0008 [ 98]: ce5bdcb7836aa2ca -Block 0008 [ 99]: 1a010f4ef1d0b16c -Block 0008 [100]: 7c3a56be69587764 -Block 0008 [101]: 7369edd379ab8b63 -Block 0008 [102]: eb059375e9d81e38 -Block 0008 [103]: ae49a0bebd2c2ac9 -Block 0008 [104]: 8add79962ff22ad5 -Block 0008 [105]: 2dfb46381509ec52 -Block 0008 [106]: 04de7d1dae36bc35 -Block 0008 [107]: 99e3ae5cacf38f66 -Block 0008 [108]: 5b4db397ff6f28f8 -Block 0008 [109]: 89abdd89178308c5 -Block 0008 [110]: e54007bba21fe65d -Block 0008 [111]: c0e9fdadf5e1e527 -Block 0008 [112]: 3d0f9bbae6d4610a -Block 0008 [113]: df4b0e09deee4fe4 -Block 0008 [114]: 08cf08a9a18f088a -Block 0008 [115]: 58c8f1ae000a0d79 -Block 0008 [116]: 7744856a25d26d97 -Block 0008 [117]: f246a2fab3db25d9 -Block 0008 [118]: 54cf019234a9b36e -Block 0008 [119]: c793d0b47c8dbd37 -Block 0008 [120]: e8c663169cb43d49 -Block 0008 [121]: 19b18b1eb53f8254 -Block 0008 [122]: 483a04f336087aca -Block 0008 [123]: 97493df4888c1ba2 -Block 0008 [124]: e446534935ffa48b -Block 0008 [125]: ad8fa4e6f8cb4598 -Block 0008 [126]: dff80c58fb8dcf69 -Block 0008 [127]: 9615048467e85223 -Block 0009 [ 0]: 8d963957a536997f -Block 0009 [ 1]: c4a6ad17a4903963 -Block 0009 [ 2]: 3ee60a10fade64bd -Block 0009 [ 3]: 918230770a0bda88 -Block 0009 [ 4]: 4dad1f4d8f17a928 -Block 0009 [ 5]: 870a1122e272b9c3 -Block 0009 [ 6]: 899e307819c85ebc -Block 0009 [ 7]: 5641cd3d43fdfaa0 -Block 0009 [ 8]: 69c1d89c1ba02780 -Block 0009 [ 9]: 128b497198c1865c -Block 0009 [ 10]: 4160861b315ab2ee -Block 0009 [ 11]: 784697c277a6072e -Block 0009 [ 12]: 5d62d29bec87100c -Block 0009 [ 13]: 2e6e695196fc9121 -Block 0009 [ 14]: 86a30cd6b0741842 -Block 0009 [ 15]: 1e18a364e5529621 -Block 0009 [ 16]: a311f98926327790 -Block 0009 [ 17]: e32d9b217b876772 -Block 0009 [ 18]: 4582229ca541e0a1 -Block 0009 [ 19]: 8ddbf5257cd31eeb -Block 0009 [ 20]: 42b4f8b1484aac1b -Block 0009 [ 21]: b6c08be2826d7c43 -Block 0009 [ 22]: 848ef012c2332b6c -Block 0009 [ 23]: 4858f635c0303546 -Block 0009 [ 24]: eaed088be0c2a16c -Block 0009 [ 25]: bb4c1b64e3521fc1 -Block 0009 [ 26]: 67cba8006304295c -Block 0009 [ 27]: 95ed7e2dc98c07de -Block 0009 [ 28]: 4f0b541907b7ab11 -Block 0009 [ 29]: 7aaf4aadb5919b8a -Block 0009 [ 30]: 65c3144eacb5e21c -Block 0009 [ 31]: b870063bb1c29683 -Block 0009 [ 32]: d1fccbcb6ac869a8 -Block 0009 [ 33]: e19c542080c1037a -Block 0009 [ 34]: b782df41419c71b7 -Block 0009 [ 35]: 4a15b9dcf0f2914a -Block 0009 [ 36]: 5da3c185b1920dbc -Block 0009 [ 37]: 1e4f4ca00f51a8da -Block 0009 [ 38]: 4540b427d7986a06 -Block 0009 [ 39]: fafd493c29276799 -Block 0009 [ 40]: 6ed26c50e7f2f666 -Block 0009 [ 41]: 65aff4e3d3229085 -Block 0009 [ 42]: c9e8ba24fd75136c -Block 0009 [ 43]: 663fa64fa9fe42f7 -Block 0009 [ 44]: c7544b471dae4d4d -Block 0009 [ 45]: 517114e5034b0c26 -Block 0009 [ 46]: f24e844f304a3465 -Block 0009 [ 47]: 6e5db83b787cb0f8 -Block 0009 [ 48]: 723ec7e828d038fc -Block 0009 [ 49]: 0db3e649393b0c13 -Block 0009 [ 50]: 970b65347ed76a0b -Block 0009 [ 51]: 67b8830d910eb7d8 -Block 0009 [ 52]: cf84ec1f4b8d86eb -Block 0009 [ 53]: be876b2a347b2cfa -Block 0009 [ 54]: 81bb175f13040617 -Block 0009 [ 55]: 29674b23bc32c06a -Block 0009 [ 56]: 034979be2e66bd20 -Block 0009 [ 57]: 16616446a32d1454 -Block 0009 [ 58]: 4c3b6001cf1aa63f -Block 0009 [ 59]: c16597bd1140e5f8 -Block 0009 [ 60]: 4915156867633734 -Block 0009 [ 61]: c58d3c905365d036 -Block 0009 [ 62]: a1a58f8411565ab5 -Block 0009 [ 63]: e0b468700d2b3969 -Block 0009 [ 64]: af4e54cfdabd7edb -Block 0009 [ 65]: 8b634eecb5a46d85 -Block 0009 [ 66]: 5c923be735f6b858 -Block 0009 [ 67]: c0f362cb40cfd94e -Block 0009 [ 68]: c67c2ba34bda20ec -Block 0009 [ 69]: a3413ddc6029885f -Block 0009 [ 70]: cc207f19ab7e5f18 -Block 0009 [ 71]: c73bfd337bf0f0b1 -Block 0009 [ 72]: ee284443d5ced8cf -Block 0009 [ 73]: 1b9232b01fad047e -Block 0009 [ 74]: 703688554bee2ae4 -Block 0009 [ 75]: f597ac898a79680c -Block 0009 [ 76]: 5325576a2e5adbaf -Block 0009 [ 77]: b2781327e24f8204 -Block 0009 [ 78]: c6840aa28b3e3b9a -Block 0009 [ 79]: b80c00e463ce419e -Block 0009 [ 80]: 08c14af5fd669746 -Block 0009 [ 81]: cbf2715a3e703b03 -Block 0009 [ 82]: 5c5252edfcefc3fe -Block 0009 [ 83]: c48bbd0ba30fd38c -Block 0009 [ 84]: 0355e5b24d75ccb0 -Block 0009 [ 85]: 95339e461d24b225 -Block 0009 [ 86]: b9d5a4b5eb19ce67 -Block 0009 [ 87]: 7781e7c609adb4ba -Block 0009 [ 88]: fdef794fbe63f3a6 -Block 0009 [ 89]: bb85bdfff07b8070 -Block 0009 [ 90]: c1564b6b30544c8b -Block 0009 [ 91]: ca50d06573e145b8 -Block 0009 [ 92]: c8b9a64f3c9dcdfe -Block 0009 [ 93]: 96384a8d0c02ed62 -Block 0009 [ 94]: a3e0251da1846848 -Block 0009 [ 95]: 9e46f28821fcd8a3 -Block 0009 [ 96]: d511566c1b2a611a -Block 0009 [ 97]: b3f0b3d1d6decdf6 -Block 0009 [ 98]: b356cc84ab1dd563 -Block 0009 [ 99]: 79385780cdc22aa6 -Block 0009 [100]: 8e54d0f99da0ba48 -Block 0009 [101]: eeb4bbc030ecb64f -Block 0009 [102]: aa65a55cb2217b98 -Block 0009 [103]: 74c0f4b18cb18580 -Block 0009 [104]: 8800a12932cafd8d -Block 0009 [105]: dc3f1cafe3ef4169 -Block 0009 [106]: e22f0b7715086a3a -Block 0009 [107]: 23e7ff371f808fab -Block 0009 [108]: 2722c0cd8303729a -Block 0009 [109]: 2e19a354daddf68e -Block 0009 [110]: bf066010ca4d2470 -Block 0009 [111]: 93bf7152d6c01024 -Block 0009 [112]: bf0e9c8587beeeea -Block 0009 [113]: bdcd171d0af4f8c8 -Block 0009 [114]: 50d615372d928f8a -Block 0009 [115]: e6e1a1f298ead702 -Block 0009 [116]: 688961c8eef31af0 -Block 0009 [117]: 6286463479291f80 -Block 0009 [118]: 2326971a8e438ca8 -Block 0009 [119]: cfabc762664132ba -Block 0009 [120]: 453e4d9874f8c7d2 -Block 0009 [121]: 252f5639b54d91c1 -Block 0009 [122]: bdfadba3e20d0814 -Block 0009 [123]: c7e2ea1a068ac5fc -Block 0009 [124]: 60b0c61c569a38a9 -Block 0009 [125]: 23697167f4e5bca5 -Block 0009 [126]: f0f6d6ba1b088fc4 -Block 0009 [127]: 45c7753fff713126 -Block 0010 [ 0]: a155295b01ac4d30 -Block 0010 [ 1]: 68ab16c5843df6cb -Block 0010 [ 2]: ed7098da0bd1ff3b -Block 0010 [ 3]: 0db2099cb481af2f -Block 0010 [ 4]: a52db650e07ce567 -Block 0010 [ 5]: 2750f845c384504b -Block 0010 [ 6]: 0a83bf1dae23e4c3 -Block 0010 [ 7]: de8d504a2708cdf3 -Block 0010 [ 8]: f93265ef617dff1d -Block 0010 [ 9]: aeeff126f1e4567c -Block 0010 [ 10]: be36af22f2341833 -Block 0010 [ 11]: e237aa380f006bde -Block 0010 [ 12]: 2841c97e30c36218 -Block 0010 [ 13]: 184af4aea8cd5e3d -Block 0010 [ 14]: 876a611ed9d49bdf -Block 0010 [ 15]: 88dcffa6fdff7e0f -Block 0010 [ 16]: e868b86f79e7c8e5 -Block 0010 [ 17]: fc48a515f1f1fc7a -Block 0010 [ 18]: 4de6909906d51551 -Block 0010 [ 19]: f405e8ed00ab8bcb -Block 0010 [ 20]: 303ec10c8f448bfc -Block 0010 [ 21]: 356c758cb6c5a6e1 -Block 0010 [ 22]: 81c1c60cbfe526f3 -Block 0010 [ 23]: 67769a6e5c0614a4 -Block 0010 [ 24]: 808c3f810c6ae10a -Block 0010 [ 25]: 1311e7194ea63ca3 -Block 0010 [ 26]: 51d884b09a5f06c9 -Block 0010 [ 27]: 31f59e84e05466e3 -Block 0010 [ 28]: bbec4b3666df4af1 -Block 0010 [ 29]: 7cf8ac6e32ec9c9b -Block 0010 [ 30]: 6df4b0777ac0d800 -Block 0010 [ 31]: c044519371be85bd -Block 0010 [ 32]: c904303d438b2327 -Block 0010 [ 33]: d37cc11f5a390efe -Block 0010 [ 34]: a442a081b209a435 -Block 0010 [ 35]: ea5fd8c62a00f630 -Block 0010 [ 36]: f29acbd22fe24aba -Block 0010 [ 37]: 58250563d6e9d821 -Block 0010 [ 38]: b6aa81f0386d4805 -Block 0010 [ 39]: 2959dfb28bbfdc1d -Block 0010 [ 40]: afb376911753d340 -Block 0010 [ 41]: ff93ed94cac1679a -Block 0010 [ 42]: 255a7e056235ca61 -Block 0010 [ 43]: c53082cfa7444f13 -Block 0010 [ 44]: 85c5e2c1da5750c9 -Block 0010 [ 45]: 3d830e2c63bb654c -Block 0010 [ 46]: 38d498ed77856052 -Block 0010 [ 47]: 9f5bfa824372f0b0 -Block 0010 [ 48]: fa2a179bd8996d69 -Block 0010 [ 49]: 40f27a5bd12cf513 -Block 0010 [ 50]: 0e2770ef9875c3fd -Block 0010 [ 51]: 0b0605ce69236666 -Block 0010 [ 52]: e300caa5339b66d9 -Block 0010 [ 53]: ea15eb73ed763d9f -Block 0010 [ 54]: aca1d069a5b673ed -Block 0010 [ 55]: eb1582e734dca43b -Block 0010 [ 56]: ae1f595784c7a0d1 -Block 0010 [ 57]: 11773c35e07ad36e -Block 0010 [ 58]: ade39ad32aa382df -Block 0010 [ 59]: a0cd5005220bf1d2 -Block 0010 [ 60]: 4cd54612e5ae3ab1 -Block 0010 [ 61]: 718c32e1f0f4d42d -Block 0010 [ 62]: ed1f4959e2732ab9 -Block 0010 [ 63]: 56a9fd7a2779ec0d -Block 0010 [ 64]: 6c26e13421fc4adf -Block 0010 [ 65]: 2aef67967429131f -Block 0010 [ 66]: 98a3c0c68368bd99 -Block 0010 [ 67]: a26987ead29cc55d -Block 0010 [ 68]: 52488b2265b5c01b -Block 0010 [ 69]: 151cf48de1fe8f67 -Block 0010 [ 70]: 8ca385421622de8f -Block 0010 [ 71]: 030a4ed9cdbac297 -Block 0010 [ 72]: 648302f6f37362dd -Block 0010 [ 73]: 100a968b3ee2cbf2 -Block 0010 [ 74]: eedf1aef6c2dd804 -Block 0010 [ 75]: 0d715cdd579b672a -Block 0010 [ 76]: 0a5ea66e059bae9e -Block 0010 [ 77]: ef9f5ac4fbc451da -Block 0010 [ 78]: 845ea8478e73a043 -Block 0010 [ 79]: a77ccaf8cdd52b7f -Block 0010 [ 80]: 91ea5e5d11aef2cf -Block 0010 [ 81]: ff048e6f903d4a54 -Block 0010 [ 82]: 822305d17b8f1f91 -Block 0010 [ 83]: d73824354065568c -Block 0010 [ 84]: 2b44d0d77e59f310 -Block 0010 [ 85]: ec92eab7de901b36 -Block 0010 [ 86]: 6e08016fa0d063c3 -Block 0010 [ 87]: 4bf9004837e9583b -Block 0010 [ 88]: 3e90cf88cd76ef51 -Block 0010 [ 89]: 922de6420db4e9ad -Block 0010 [ 90]: 061881dfad24119a -Block 0010 [ 91]: 8f6a872a98be535b -Block 0010 [ 92]: 22ae2709eec244b2 -Block 0010 [ 93]: f236154cda27421c -Block 0010 [ 94]: 518cd738e05da247 -Block 0010 [ 95]: fc03cebe3057d920 -Block 0010 [ 96]: bb23eb6eb9e60b8e -Block 0010 [ 97]: 6193477b593d97fe -Block 0010 [ 98]: 40f082b0b3d57018 -Block 0010 [ 99]: 096790e49d224334 -Block 0010 [100]: d2dafff37dbffd43 -Block 0010 [101]: 3574fcbfe52e8b8c -Block 0010 [102]: 6ec82c308a5e69c1 -Block 0010 [103]: 583434560a091635 -Block 0010 [104]: 06829557ec535cfb -Block 0010 [105]: f4043f12018d3761 -Block 0010 [106]: 8e388c730ec84362 -Block 0010 [107]: 2a6e35d51235dbb2 -Block 0010 [108]: 1b9442bc195397f4 -Block 0010 [109]: 0936c2e76ce5a0df -Block 0010 [110]: 8d684e8befbbd5c7 -Block 0010 [111]: 0a1240e8def43989 -Block 0010 [112]: bfb4b54653ff9af3 -Block 0010 [113]: 25ae9402aa130a0d -Block 0010 [114]: 7d276ec556940d88 -Block 0010 [115]: cda890baf010f915 -Block 0010 [116]: 56f9901e7075728b -Block 0010 [117]: 6b73d35e23ddba2c -Block 0010 [118]: a89df666576093f2 -Block 0010 [119]: 8f65a1ede29fbd78 -Block 0010 [120]: a68506cdaef8c905 -Block 0010 [121]: a1470990c4b30b1a -Block 0010 [122]: 0eb09895d515d9b1 -Block 0010 [123]: bf69f75cdd17fcfa -Block 0010 [124]: eb84a10c20614087 -Block 0010 [125]: 96379c54d0c2023b -Block 0010 [126]: a7477d567fd71950 -Block 0010 [127]: f037e9b031a97504 -Block 0011 [ 0]: 16d5da761e2acf6f -Block 0011 [ 1]: 6ad87f540d41f387 -Block 0011 [ 2]: 6f820405b2971af5 -Block 0011 [ 3]: 17b25af4c1c16f5e -Block 0011 [ 4]: 2ee33eb0bfaa58f9 -Block 0011 [ 5]: b7485047f793e807 -Block 0011 [ 6]: e52fab8ca2aaf375 -Block 0011 [ 7]: d6acc6a7c567b85c -Block 0011 [ 8]: b9ab663e0824a963 -Block 0011 [ 9]: 3ed7c09ce01c8ad6 -Block 0011 [ 10]: 837443ede4f8bed6 -Block 0011 [ 11]: 8353cf5e1459756d -Block 0011 [ 12]: 01c08edcae2527d6 -Block 0011 [ 13]: db388b3e6b962544 -Block 0011 [ 14]: c113c7ed15543703 -Block 0011 [ 15]: 0bc986fa7737339d -Block 0011 [ 16]: e17dd29e93c96a73 -Block 0011 [ 17]: 7d4e5d3027092ecb -Block 0011 [ 18]: 8c165d43a9b74c65 -Block 0011 [ 19]: 11d3bb05f3c2dca0 -Block 0011 [ 20]: 8b12c7a8b3767321 -Block 0011 [ 21]: 24cce4a0f3500b45 -Block 0011 [ 22]: 7d6eaa8f935fe7fd -Block 0011 [ 23]: 149d30539dfa5940 -Block 0011 [ 24]: 23d0f122c7c0cbcf -Block 0011 [ 25]: d899562ed181b04e -Block 0011 [ 26]: dbc100cb4edfc990 -Block 0011 [ 27]: 177854a7449272f6 -Block 0011 [ 28]: 44d3ff8214a0f0c3 -Block 0011 [ 29]: 233f4fab487f5942 -Block 0011 [ 30]: c94a38017b4d0e24 -Block 0011 [ 31]: 14907f985d2d0332 -Block 0011 [ 32]: 3521d2a02c50eada -Block 0011 [ 33]: 329f4202c68dc27a -Block 0011 [ 34]: 5648323f8456bd6c -Block 0011 [ 35]: 9381cfcfb0b9a3da -Block 0011 [ 36]: 7420d4017e432c52 -Block 0011 [ 37]: 74ea06fcaf152880 -Block 0011 [ 38]: 7b44ce911f823401 -Block 0011 [ 39]: b923ee926f87622c -Block 0011 [ 40]: 0283c7a1f167499b -Block 0011 [ 41]: e1737ba82a19c571 -Block 0011 [ 42]: f9b63927e53a45f6 -Block 0011 [ 43]: 9550a830500a3210 -Block 0011 [ 44]: 05c7a35d07ade74f -Block 0011 [ 45]: ed1a289ffb3f305e -Block 0011 [ 46]: 2c8d598ad77f601b -Block 0011 [ 47]: 25e4baff52399210 -Block 0011 [ 48]: e74b1e3b49e9a78b -Block 0011 [ 49]: 18b4b3f39c90f7c7 -Block 0011 [ 50]: 329822ea868b1fd7 -Block 0011 [ 51]: 6411cb3574b64ade -Block 0011 [ 52]: 947891798fd01f8d -Block 0011 [ 53]: 3dd08d795b8c02c2 -Block 0011 [ 54]: 478fd0d43a7fa288 -Block 0011 [ 55]: 88a9b9dc0ae9c7a9 -Block 0011 [ 56]: b9583b9e42ba1802 -Block 0011 [ 57]: e1e9bc1d711c8f22 -Block 0011 [ 58]: 15881e0659ceda04 -Block 0011 [ 59]: d1501a760d3d4a33 -Block 0011 [ 60]: 038c4699f07c1fc5 -Block 0011 [ 61]: 89a0f133277bf367 -Block 0011 [ 62]: 67129d0a742b771b -Block 0011 [ 63]: d55736ca7e7d5c13 -Block 0011 [ 64]: 66d17ba5ebb98138 -Block 0011 [ 65]: 905043e0102e5136 -Block 0011 [ 66]: 5ce42fae82caeeb5 -Block 0011 [ 67]: eee0b24c626ccfb2 -Block 0011 [ 68]: f13b34cfa160faa6 -Block 0011 [ 69]: d152913d8434e565 -Block 0011 [ 70]: 46f08fa361436ed8 -Block 0011 [ 71]: 476fe95a3eb25b18 -Block 0011 [ 72]: d0821f62c54f4b63 -Block 0011 [ 73]: af1912c68f81b8b5 -Block 0011 [ 74]: 7d0aed1b7cfe9215 -Block 0011 [ 75]: f7013ad16ab17ac1 -Block 0011 [ 76]: bdea73e717e5e9c7 -Block 0011 [ 77]: 36d8d670c31182db -Block 0011 [ 78]: 50f5bbe3f051fcd9 -Block 0011 [ 79]: 5d410ac5d4379955 -Block 0011 [ 80]: 4b9720ccfbe61a3d -Block 0011 [ 81]: 6c63bd26273ad3d8 -Block 0011 [ 82]: 9909be9a65ef8aae -Block 0011 [ 83]: 47d7660487d79065 -Block 0011 [ 84]: 9b65b7f5ca6f10f7 -Block 0011 [ 85]: 5c30891026346e3a -Block 0011 [ 86]: 0955df9ce73a911a -Block 0011 [ 87]: 235c4f3afaac52f4 -Block 0011 [ 88]: d3fa46a611e7ae27 -Block 0011 [ 89]: 89c0db05c5f3024f -Block 0011 [ 90]: dbcb01a6c0e4050b -Block 0011 [ 91]: abca89b857e99e18 -Block 0011 [ 92]: eb31d6fb723e632a -Block 0011 [ 93]: 031c7b76283804d5 -Block 0011 [ 94]: 30ccac15e32a08ed -Block 0011 [ 95]: 242f2b13e7fe0266 -Block 0011 [ 96]: 0b1b51fdcaab6bb8 -Block 0011 [ 97]: 9d336dfd23b236a3 -Block 0011 [ 98]: 4eeaf99bcf0c1173 -Block 0011 [ 99]: 9294e337605f02d2 -Block 0011 [100]: b7391a42963d8a3f -Block 0011 [101]: 8c7f9f625e1c4ffb -Block 0011 [102]: 7c202d63402ffb12 -Block 0011 [103]: 465d394021fba944 -Block 0011 [104]: b70e74918fcf4e79 -Block 0011 [105]: a02932280e957875 -Block 0011 [106]: b82709862601c6e7 -Block 0011 [107]: 4dcd278efa73b84f -Block 0011 [108]: c989a31b52fe9ea3 -Block 0011 [109]: 3e67e65ed7d255b1 -Block 0011 [110]: 5bd18bc29536ccc3 -Block 0011 [111]: b23efe04420321f9 -Block 0011 [112]: c57b1b093eabd7a7 -Block 0011 [113]: bdefbdc6c8803be8 -Block 0011 [114]: cae880e44d925961 -Block 0011 [115]: 7cf1bf54e78c13ba -Block 0011 [116]: aafa3cf4189ae522 -Block 0011 [117]: 41b52b96d7aa2e0c -Block 0011 [118]: 9f67eff23fffc6e1 -Block 0011 [119]: 9eef0c2059cc2b4e -Block 0011 [120]: d0014fdd3e2eaaa9 -Block 0011 [121]: d6dc04699625b658 -Block 0011 [122]: ee5b509a8fec397d -Block 0011 [123]: e99b5a5b20642de4 -Block 0011 [124]: 1853735329636fde -Block 0011 [125]: 6249b557a6fb93d9 -Block 0011 [126]: 2502ceca006bcbef -Block 0011 [127]: 691208dd510b74b4 -Block 0012 [ 0]: 479bed6dde74697b -Block 0012 [ 1]: c837d8d60d2214a3 -Block 0012 [ 2]: 2cce7a5664653b4e -Block 0012 [ 3]: d5f47908104f9dfe -Block 0012 [ 4]: 8f33f1a3401ce873 -Block 0012 [ 5]: 6318d20c310aa3f3 -Block 0012 [ 6]: 9a8c1067e646cf2f -Block 0012 [ 7]: da0411c4f0b9d646 -Block 0012 [ 8]: 4f1a128c6195af3e -Block 0012 [ 9]: f66c9e56cb5f4ff4 -Block 0012 [ 10]: bb192d9a6e711985 -Block 0012 [ 11]: 57136bae517fc91d -Block 0012 [ 12]: a4b51776c440f3ae -Block 0012 [ 13]: 9948574e322d3dd9 -Block 0012 [ 14]: 9ea814ec6cbb9955 -Block 0012 [ 15]: 55b4234e06276f01 -Block 0012 [ 16]: 384ba30dd3183608 -Block 0012 [ 17]: dcc76d5af8b9f6e1 -Block 0012 [ 18]: 80d439b91f04b10f -Block 0012 [ 19]: b72f956fb72c081b -Block 0012 [ 20]: 78cc14d32f4f1cdc -Block 0012 [ 21]: ad99b2f9a74185f2 -Block 0012 [ 22]: 987dc5012ae1a664 -Block 0012 [ 23]: ebc1098f16346958 -Block 0012 [ 24]: 7cf6fb6601ad0cff -Block 0012 [ 25]: d53828e896e30068 -Block 0012 [ 26]: 80f07625663e91e9 -Block 0012 [ 27]: da9aa3dcebf93e45 -Block 0012 [ 28]: 5f7d20f04cfa78c6 -Block 0012 [ 29]: f880f90b6a602855 -Block 0012 [ 30]: 5e52e35b8b9910c5 -Block 0012 [ 31]: 6edaa56bdea58a09 -Block 0012 [ 32]: bd3bf1ccf3b938b5 -Block 0012 [ 33]: a72a4a89ab2fdc74 -Block 0012 [ 34]: 080d919b24f87a04 -Block 0012 [ 35]: 27e7d16d439111d6 -Block 0012 [ 36]: aa9674480df2c6e0 -Block 0012 [ 37]: 2f69d96019e10cdd -Block 0012 [ 38]: 522951c9583f8368 -Block 0012 [ 39]: e443adf29afac5f2 -Block 0012 [ 40]: 748efa26a7b9f7b4 -Block 0012 [ 41]: c1d82ff00f41a415 -Block 0012 [ 42]: 93b12a65b481644c -Block 0012 [ 43]: 3a9361a1a24fb8fe -Block 0012 [ 44]: 9fa9db4674c4ae0b -Block 0012 [ 45]: 6c09c898703d18dd -Block 0012 [ 46]: a2364154f4aa1c76 -Block 0012 [ 47]: 0317e1ab68529d62 -Block 0012 [ 48]: 82a51ec093f4e4ac -Block 0012 [ 49]: 7e1b86bae00f0341 -Block 0012 [ 50]: 4d9e742cc0951668 -Block 0012 [ 51]: d1bd11f39b511da6 -Block 0012 [ 52]: eb509302c5ed1b65 -Block 0012 [ 53]: e3a4db785c5e6419 -Block 0012 [ 54]: 5b43dc7bce9ac02c -Block 0012 [ 55]: 8fb29954e608f2fd -Block 0012 [ 56]: 2cf4847ccfd29810 -Block 0012 [ 57]: 7054dfa1e24ea4a1 -Block 0012 [ 58]: 413d54995b4a3847 -Block 0012 [ 59]: 0ca94a54d1234516 -Block 0012 [ 60]: e3f21986e65a1276 -Block 0012 [ 61]: 9d30023f2b0de00d -Block 0012 [ 62]: c57c67ac34de2acb -Block 0012 [ 63]: cea1c131b2e6f6f1 -Block 0012 [ 64]: 44d107c62c763d74 -Block 0012 [ 65]: c4b1203184ceac4a -Block 0012 [ 66]: 7726c5e222f77f87 -Block 0012 [ 67]: 96b88e59365ac05c -Block 0012 [ 68]: 94b969b2c696dc77 -Block 0012 [ 69]: 37b575acdafcdcbc -Block 0012 [ 70]: cb8e3c2b408d264d -Block 0012 [ 71]: 36e779fd95a9693c -Block 0012 [ 72]: d7e90f25f0da03d4 -Block 0012 [ 73]: e4975c96652101fe -Block 0012 [ 74]: 249694d8ba8080c7 -Block 0012 [ 75]: 078fbed98e73cf86 -Block 0012 [ 76]: 3dfa5218e5f22b77 -Block 0012 [ 77]: 9b3a6a1272d472dc -Block 0012 [ 78]: e3c6ce5493d39837 -Block 0012 [ 79]: 53518b494be87ca8 -Block 0012 [ 80]: cb9b6888c60d8336 -Block 0012 [ 81]: c73e313c1f688a9e -Block 0012 [ 82]: b732289be782b0dc -Block 0012 [ 83]: a23853027cf2a452 -Block 0012 [ 84]: 6203d97675096015 -Block 0012 [ 85]: 8cd7d53aeb740717 -Block 0012 [ 86]: 57d24cb2a31b5720 -Block 0012 [ 87]: b1b20f5f0cdfbc58 -Block 0012 [ 88]: 5e7adb7681cffb5c -Block 0012 [ 89]: 2ecba812756d30ab -Block 0012 [ 90]: 3ee2f6f4691fc2ee -Block 0012 [ 91]: 7ad83ed55ea1e4de -Block 0012 [ 92]: 8145b77b8bb02543 -Block 0012 [ 93]: 12ba71f86b801c88 -Block 0012 [ 94]: d742db3bb16c11ef -Block 0012 [ 95]: b6f3487e39bbbfea -Block 0012 [ 96]: 3c807e44e0f76419 -Block 0012 [ 97]: 2b67cb709daaba44 -Block 0012 [ 98]: 854e279d27594d9d -Block 0012 [ 99]: c6c5fc086e450097 -Block 0012 [100]: 60c96c36a34f567e -Block 0012 [101]: 320b1a20620c6a52 -Block 0012 [102]: e261aef2b4735167 -Block 0012 [103]: 38c79e39edd260f8 -Block 0012 [104]: 80d057ab61c1c373 -Block 0012 [105]: 3d843068498eaa9d -Block 0012 [106]: f7200a89d0b53ec2 -Block 0012 [107]: 208a5da69d2804cd -Block 0012 [108]: cdc8eb2dd5303721 -Block 0012 [109]: d553e50ff2dc23ad -Block 0012 [110]: b8a284c5390a6677 -Block 0012 [111]: 2e8337fb6b5a8068 -Block 0012 [112]: 8aa4ee1b63809c68 -Block 0012 [113]: cb2d7ce6f22bfe1c -Block 0012 [114]: 45884652a6502a3d -Block 0012 [115]: b70308e7a301b39a -Block 0012 [116]: 5e0fbc5229a687fb -Block 0012 [117]: e6090e6b6d4afdce -Block 0012 [118]: 283f22d8fb804f61 -Block 0012 [119]: 0140e2e41a6c1064 -Block 0012 [120]: 3bc6a2c13687a35e -Block 0012 [121]: 709c8a7b7787060a -Block 0012 [122]: 395451d23660c97e -Block 0012 [123]: 9de1b10411494865 -Block 0012 [124]: c7901a854d4b2ac0 -Block 0012 [125]: 36c185f932b47622 -Block 0012 [126]: 8da1cc1943d6651d -Block 0012 [127]: 84a6607c1b0506c9 -Block 0013 [ 0]: 869de2c4be545941 -Block 0013 [ 1]: 4e3e2310099f6efc -Block 0013 [ 2]: 53cf9c3ba87811c0 -Block 0013 [ 3]: 45ba8f270479088c -Block 0013 [ 4]: cbc47bdb4bfb9512 -Block 0013 [ 5]: 705f37996c447d25 -Block 0013 [ 6]: 64f985dd3edfb36a -Block 0013 [ 7]: 30dc1cccd7a15a67 -Block 0013 [ 8]: 9d64ca45397a3987 -Block 0013 [ 9]: 643c9f78432b9e83 -Block 0013 [ 10]: 59bb13fda190b187 -Block 0013 [ 11]: 9c133bb3453ed3c4 -Block 0013 [ 12]: 632fc9efd5701891 -Block 0013 [ 13]: 12849ab202ce82fb -Block 0013 [ 14]: 1ef1705beb9facec -Block 0013 [ 15]: 18c2856c7f1ffd53 -Block 0013 [ 16]: ec08f1d3139e748f -Block 0013 [ 17]: 6a9555f38829e066 -Block 0013 [ 18]: a266ec1c4d6a0914 -Block 0013 [ 19]: 9da85111fa971270 -Block 0013 [ 20]: d2703c03675b4d56 -Block 0013 [ 21]: 052169e2a88da447 -Block 0013 [ 22]: 4df8ea75293ef8eb -Block 0013 [ 23]: 98a67dffd7bf1584 -Block 0013 [ 24]: 9e0ea048198f4e6b -Block 0013 [ 25]: c0ced52ac8776fc1 -Block 0013 [ 26]: 5dc759a20859e47f -Block 0013 [ 27]: 3eaa91ec50be0842 -Block 0013 [ 28]: e01f425fff0d5ccd -Block 0013 [ 29]: 5bc54a37268f877d -Block 0013 [ 30]: d70aaf26f46b54ca -Block 0013 [ 31]: 38cc404e371a5fa3 -Block 0013 [ 32]: 8caf2d6497da9dd7 -Block 0013 [ 33]: 0f59968a70e65c73 -Block 0013 [ 34]: 5df8b31703ac512a -Block 0013 [ 35]: 6a282d3ccc9974d9 -Block 0013 [ 36]: 7e1f19160264cc76 -Block 0013 [ 37]: 31384a7c8ddbe02c -Block 0013 [ 38]: cc2366252232f299 -Block 0013 [ 39]: 3edae45774890aca -Block 0013 [ 40]: 0d68e6d5ab8a3789 -Block 0013 [ 41]: 0a6311497373525e -Block 0013 [ 42]: 392f2b5968e6da1d -Block 0013 [ 43]: f51bfde00fd8ae12 -Block 0013 [ 44]: f745dd5d22f2389f -Block 0013 [ 45]: 8a29d9d8e38d6abd -Block 0013 [ 46]: 43dfa80fbaee264f -Block 0013 [ 47]: 41c8f46d33dbc1df -Block 0013 [ 48]: 38e4ffeac09c1559 -Block 0013 [ 49]: 35e68675c46dd316 -Block 0013 [ 50]: cf7dd905cbcdfc71 -Block 0013 [ 51]: 0ecb3be43721b94f -Block 0013 [ 52]: d2df07056860f6bf -Block 0013 [ 53]: 4375012359501fab -Block 0013 [ 54]: 5f0f024635f27998 -Block 0013 [ 55]: 605253df9c015df1 -Block 0013 [ 56]: 52ef0714a0978174 -Block 0013 [ 57]: 1e0cbe08d115392d -Block 0013 [ 58]: b0861399e44a6671 -Block 0013 [ 59]: 12f06ce67cb65a63 -Block 0013 [ 60]: 88e2b2f4d5aa270c -Block 0013 [ 61]: b416ae8495cdb1dd -Block 0013 [ 62]: 476eb9a14827f2d6 -Block 0013 [ 63]: 3fe106fdc31e49b7 -Block 0013 [ 64]: f65c055ed52486ec -Block 0013 [ 65]: 520ce94b1bdf56fc -Block 0013 [ 66]: cb665701c023670b -Block 0013 [ 67]: efffd466a44a6ecc -Block 0013 [ 68]: 5d4016d66b7428c0 -Block 0013 [ 69]: 21dc31325439d1f1 -Block 0013 [ 70]: 09269f65d8343f6c -Block 0013 [ 71]: b8911cbf45e6e91e -Block 0013 [ 72]: 57917b9b8f857336 -Block 0013 [ 73]: d5936dc55b3b8dfa -Block 0013 [ 74]: 6bbcfb958f006d1b -Block 0013 [ 75]: 3eee9ffc6db62eaa -Block 0013 [ 76]: 0c27000175b7c256 -Block 0013 [ 77]: 7b57e54e0f284814 -Block 0013 [ 78]: ce5c71ad657a0f9e -Block 0013 [ 79]: 113fd1f5a39d12ab -Block 0013 [ 80]: 5d310f2e39a4ebf9 -Block 0013 [ 81]: caef54f2ee5bc4af -Block 0013 [ 82]: 74d02a51575f9d89 -Block 0013 [ 83]: cbe8c9b293f234a3 -Block 0013 [ 84]: 97664e656bdf7a18 -Block 0013 [ 85]: 50cadc8443995bfe -Block 0013 [ 86]: c5bc3dbcd40bfb84 -Block 0013 [ 87]: 4f182b51402a7fdd -Block 0013 [ 88]: 82e5cb9b38d5147d -Block 0013 [ 89]: 9f96d4d29ad743bb -Block 0013 [ 90]: 9df98bdaf7111234 -Block 0013 [ 91]: fa101598dbefaff3 -Block 0013 [ 92]: 0a9112ed1833295d -Block 0013 [ 93]: 5a1819c534c75f6e -Block 0013 [ 94]: 863b85ee5f040587 -Block 0013 [ 95]: 536a68ab78ce76db -Block 0013 [ 96]: e63773caba37d0d7 -Block 0013 [ 97]: 3019b9bcbc3f7f0c -Block 0013 [ 98]: c1dfb09fe2d9ed0b -Block 0013 [ 99]: ebe8e7e4e4d0bf5c -Block 0013 [100]: 55af1a98cd9c8eaf -Block 0013 [101]: 5a491d1c5210d0b7 -Block 0013 [102]: 36b51725274f3586 -Block 0013 [103]: d479ff760a6da201 -Block 0013 [104]: 5502a0a5abd69dc5 -Block 0013 [105]: cc7e981900143bb3 -Block 0013 [106]: 08262d89452d89bb -Block 0013 [107]: 2ade91d1358ef400 -Block 0013 [108]: 45a1bf547d66f5ad -Block 0013 [109]: f8534c4b19fdec11 -Block 0013 [110]: c2dc68df97f00da1 -Block 0013 [111]: 9a67651f64fc054c -Block 0013 [112]: 51cbcbb7f2388fc1 -Block 0013 [113]: b22586297e8d659b -Block 0013 [114]: 111c205af275e222 -Block 0013 [115]: a1b63b89156d22d0 -Block 0013 [116]: f00bc4173610a284 -Block 0013 [117]: 807f16cfa68d7daf -Block 0013 [118]: 131e2a15d73586be -Block 0013 [119]: 99c188d88b8b19f8 -Block 0013 [120]: b191a1d6a7f7025f -Block 0013 [121]: f9901cf222b01b1b -Block 0013 [122]: 64bcf834a02188bc -Block 0013 [123]: 268289b3f602d318 -Block 0013 [124]: d77bc155075f3301 -Block 0013 [125]: 3db1c22c96a653fe -Block 0013 [126]: ae5bfce1a9f3044e -Block 0013 [127]: 78d5aaf71c2a77d7 -Block 0014 [ 0]: 00c86bd24802ea9d -Block 0014 [ 1]: 70eaa8e2d857454e -Block 0014 [ 2]: b8461f74bdaeebea -Block 0014 [ 3]: 5b0fbdada15fa94d -Block 0014 [ 4]: 4e1c6a1b0d24fb70 -Block 0014 [ 5]: 6356e350ec69a25a -Block 0014 [ 6]: 9082450c3aed4839 -Block 0014 [ 7]: 5ce7c454002a4f90 -Block 0014 [ 8]: 41761904fd5e0795 -Block 0014 [ 9]: a51251eab300a4fe -Block 0014 [ 10]: 993abaa3ca0ef769 -Block 0014 [ 11]: a06ff7ca3a082cc8 -Block 0014 [ 12]: 32e0401836b47569 -Block 0014 [ 13]: 2d275468ec43edc1 -Block 0014 [ 14]: add41de9575a0742 -Block 0014 [ 15]: 106c2c271f1d5489 -Block 0014 [ 16]: 0484e39a05e6a3d9 -Block 0014 [ 17]: d1f40dc02a507f75 -Block 0014 [ 18]: 50f7834440e25b0e -Block 0014 [ 19]: 2fc995af1911e6a6 -Block 0014 [ 20]: ced0b1d1001c1dc0 -Block 0014 [ 21]: 8ba00763ea1a115d -Block 0014 [ 22]: 7a434535db10fa25 -Block 0014 [ 23]: dc56a10a894c332d -Block 0014 [ 24]: 87491bfa1203b506 -Block 0014 [ 25]: 96e8a73d3e8e437a -Block 0014 [ 26]: 713d91ffc723b560 -Block 0014 [ 27]: ae4ccde8b1e2f38b -Block 0014 [ 28]: c5ccc7ae6f2be8f9 -Block 0014 [ 29]: 79fca3dfceb34b7e -Block 0014 [ 30]: 549551fa994d9055 -Block 0014 [ 31]: a2629606bfb6448c -Block 0014 [ 32]: f1676c661be1fbd7 -Block 0014 [ 33]: 38d4e94c23878d90 -Block 0014 [ 34]: 36d2170e5cdfdcc5 -Block 0014 [ 35]: 201d50c4600eafac -Block 0014 [ 36]: 4e8a7a0f4774f2e1 -Block 0014 [ 37]: 56f3c307d20765eb -Block 0014 [ 38]: dafb7f11ad7730a2 -Block 0014 [ 39]: be6722b2fadb6160 -Block 0014 [ 40]: c8d96d73c11db8ce -Block 0014 [ 41]: f6ecadc3bd4ecf5b -Block 0014 [ 42]: 7beedae27ab13341 -Block 0014 [ 43]: 56f3ede80c8750c8 -Block 0014 [ 44]: ad31b1489aca9fc5 -Block 0014 [ 45]: cede55663da2fc9e -Block 0014 [ 46]: 6dd2af6408693a2c -Block 0014 [ 47]: 04d961d026175067 -Block 0014 [ 48]: 7c6fd82af1d6e8cf -Block 0014 [ 49]: 95397dbf1f7a6c38 -Block 0014 [ 50]: bdae428ffc7de7e7 -Block 0014 [ 51]: 84b8ef4eeb1d144b -Block 0014 [ 52]: 71f06279ec183109 -Block 0014 [ 53]: 7e2d2144e3364773 -Block 0014 [ 54]: 0ea7b5505ec554d4 -Block 0014 [ 55]: e43d0b3a8714b1b0 -Block 0014 [ 56]: 9e34e938edc4832a -Block 0014 [ 57]: 623e7858c67c1456 -Block 0014 [ 58]: ce8cbfa434ed6ab3 -Block 0014 [ 59]: 1bff169a2dd33fd1 -Block 0014 [ 60]: 5114fd75790e1723 -Block 0014 [ 61]: 2866e974f1feed4c -Block 0014 [ 62]: a8e955affe2235a9 -Block 0014 [ 63]: 3b57591f37fd14cd -Block 0014 [ 64]: 7b218b6b041d1a0a -Block 0014 [ 65]: f0f792a5970adb06 -Block 0014 [ 66]: 96885001e6238bbb -Block 0014 [ 67]: 7307175080bda5d8 -Block 0014 [ 68]: 8dcec3b6bc0a928a -Block 0014 [ 69]: 8edf3697e22d9995 -Block 0014 [ 70]: 5a6069964e3ad92c -Block 0014 [ 71]: c3075b22691aee95 -Block 0014 [ 72]: d0cde2edb64c8ca8 -Block 0014 [ 73]: 60e9d510f0d624c2 -Block 0014 [ 74]: 9d7c5975380b0389 -Block 0014 [ 75]: 4e361fe607121311 -Block 0014 [ 76]: b934e471d7f25770 -Block 0014 [ 77]: 3cc1b0b276a87957 -Block 0014 [ 78]: 36c3c3ccafbd940c -Block 0014 [ 79]: cdbacd401c0d26ac -Block 0014 [ 80]: e8cf26f9266243bc -Block 0014 [ 81]: 3e494b39746897f8 -Block 0014 [ 82]: 76f70f73a95d5040 -Block 0014 [ 83]: 9fcf6d04848799fc -Block 0014 [ 84]: 420adba2d5a0ffd8 -Block 0014 [ 85]: 7d3179bf1094ac98 -Block 0014 [ 86]: bf1c368e3f8db189 -Block 0014 [ 87]: 555766187874c3ba -Block 0014 [ 88]: 947d88cf25d2e292 -Block 0014 [ 89]: b3ad799755e3bdf4 -Block 0014 [ 90]: 329adf355bdb795b -Block 0014 [ 91]: a20dabdff81c9d7f -Block 0014 [ 92]: 102479e949df8a5a -Block 0014 [ 93]: 6eaf90100f244259 -Block 0014 [ 94]: 847dabe1ca858f90 -Block 0014 [ 95]: a996b83fe8181714 -Block 0014 [ 96]: ba3d4069779e6e66 -Block 0014 [ 97]: 9419a60629bd868c -Block 0014 [ 98]: 86babe464aeb9d25 -Block 0014 [ 99]: 3a1d5a4844a955f3 -Block 0014 [100]: 5c8e5dc4986e5d34 -Block 0014 [101]: a146bff2dd80ffc0 -Block 0014 [102]: 14f526ae0bf9f335 -Block 0014 [103]: 7068780723340465 -Block 0014 [104]: 8f05ac83e14eea15 -Block 0014 [105]: 6e977e15d10e6f06 -Block 0014 [106]: aabe0b897bedbac4 -Block 0014 [107]: ac46c22beea3cd31 -Block 0014 [108]: c2d1847c1152e335 -Block 0014 [109]: bd1ca29ae5b34d5b -Block 0014 [110]: 496331e4757ab303 -Block 0014 [111]: 9c79b215bf4472af -Block 0014 [112]: 36c603bf5809aa33 -Block 0014 [113]: 3bada4e0890a89eb -Block 0014 [114]: de41b684fe909f5c -Block 0014 [115]: 77acbca5c6cf32cf -Block 0014 [116]: 0a537ea31cb3da7f -Block 0014 [117]: 1cdcec02169ec735 -Block 0014 [118]: 802d3fdb8d8849b4 -Block 0014 [119]: faee1668d1e776b8 -Block 0014 [120]: 57981790a57fac50 -Block 0014 [121]: e4791f7d957ccf0e -Block 0014 [122]: b7ee4984decb37ec -Block 0014 [123]: 95264b7a43318d79 -Block 0014 [124]: 52a8fdf5c03e06d0 -Block 0014 [125]: e569b4bf5c4574d2 -Block 0014 [126]: a36df387d9cc8f37 -Block 0014 [127]: 57068ca334d423d0 -Block 0015 [ 0]: d75972ef03571f4c -Block 0015 [ 1]: 5e5e8b05d98f3896 -Block 0015 [ 2]: b04e1c546ce6d8e3 -Block 0015 [ 3]: 53f2adda47a9cc25 -Block 0015 [ 4]: 3eac52ee5a2cb38e -Block 0015 [ 5]: 7b694a48e0d2819e -Block 0015 [ 6]: c241e4ea0bd4ebab -Block 0015 [ 7]: d0375209fb4ee4b3 -Block 0015 [ 8]: 34cfe8cb52316010 -Block 0015 [ 9]: 149b360c2e1998a4 -Block 0015 [ 10]: 79be196992f3e9cf -Block 0015 [ 11]: 58bf824ecf470a1b -Block 0015 [ 12]: 81889fe16317e424 -Block 0015 [ 13]: 204b5157bbbae499 -Block 0015 [ 14]: a816fa2fe32c2baf -Block 0015 [ 15]: d3e6f71c565b77c3 -Block 0015 [ 16]: 441439ca5abafa8d -Block 0015 [ 17]: 7c203cbd869c4977 -Block 0015 [ 18]: 8ffef24d751f61da -Block 0015 [ 19]: 8700964313db8a34 -Block 0015 [ 20]: 7eb15ce9dce6d5e6 -Block 0015 [ 21]: a8ea8be42ba1aedb -Block 0015 [ 22]: 68e0cdf37d17d392 -Block 0015 [ 23]: c29c6cc7611a110b -Block 0015 [ 24]: 953e2e65492a624d -Block 0015 [ 25]: 885259398da320e3 -Block 0015 [ 26]: 83e966e8a38610d4 -Block 0015 [ 27]: 83ea8061ea029504 -Block 0015 [ 28]: 34b9a1d0d654badb -Block 0015 [ 29]: 5577f100ceb1ab30 -Block 0015 [ 30]: a4415f554a54f985 -Block 0015 [ 31]: f41f0445612657d3 -Block 0015 [ 32]: 4e6632178ddeebc7 -Block 0015 [ 33]: 8ed0150b5f742a90 -Block 0015 [ 34]: a0e50dc6f98027d6 -Block 0015 [ 35]: 9c2e0784a086a19d -Block 0015 [ 36]: f1250326cfeecf5f -Block 0015 [ 37]: f26f569ac0c27156 -Block 0015 [ 38]: d8b7aa1999e7bcf2 -Block 0015 [ 39]: 21afc665eef7f8f6 -Block 0015 [ 40]: 79c5529b8dbbfdce -Block 0015 [ 41]: d694d8c3fb45b159 -Block 0015 [ 42]: c87437dd97abd34c -Block 0015 [ 43]: 22a0fe0c8b91c357 -Block 0015 [ 44]: cdfe2967d8eca54b -Block 0015 [ 45]: b6637f2c58b8962a -Block 0015 [ 46]: fffe389ff9e282f8 -Block 0015 [ 47]: 01037b1735f05742 -Block 0015 [ 48]: fc0c711b36244e13 -Block 0015 [ 49]: 5a5cadf6259259e4 -Block 0015 [ 50]: 5b25a4892c1bbf2a -Block 0015 [ 51]: 0970a7cddc1a7638 -Block 0015 [ 52]: f1836959c9326f9d -Block 0015 [ 53]: 3cfc6246151da4d1 -Block 0015 [ 54]: 8021e484b484b98e -Block 0015 [ 55]: 09452842146e5091 -Block 0015 [ 56]: 92df9ea332551b95 -Block 0015 [ 57]: 708084655fe8fbdf -Block 0015 [ 58]: c5514438a489ff6d -Block 0015 [ 59]: 633d707db2ca6b0f -Block 0015 [ 60]: 503042eb463ed026 -Block 0015 [ 61]: 9047897e1216e5c1 -Block 0015 [ 62]: c5decb95009acd93 -Block 0015 [ 63]: 86a70312b794373b -Block 0015 [ 64]: 40543a7d1ff593eb -Block 0015 [ 65]: cde3c0e472895075 -Block 0015 [ 66]: bb4f1933fd49e35a -Block 0015 [ 67]: 8b07d06d62e39575 -Block 0015 [ 68]: fc7bd9dbb50d5b5d -Block 0015 [ 69]: 5385e3f433ad4c7d -Block 0015 [ 70]: d9e08a5968386621 -Block 0015 [ 71]: 1a8034bdf1d062a7 -Block 0015 [ 72]: d71633748f0984a6 -Block 0015 [ 73]: 30db9941ccca4edf -Block 0015 [ 74]: 1a07d24906730427 -Block 0015 [ 75]: 3713bff74517517b -Block 0015 [ 76]: c9fee35405dadbc1 -Block 0015 [ 77]: 31c5bbd7159c97d2 -Block 0015 [ 78]: 6963f0bd077b6b28 -Block 0015 [ 79]: 6e348b2cdbb823a0 -Block 0015 [ 80]: 7b57b1ff3d8ff3a5 -Block 0015 [ 81]: 6e2b1699acf177ae -Block 0015 [ 82]: 8678cbbc62f66658 -Block 0015 [ 83]: 40600816986324ff -Block 0015 [ 84]: 7c8cb0e28a6f28ae -Block 0015 [ 85]: a8cff1d4f445c4ee -Block 0015 [ 86]: 341612ac59cc7847 -Block 0015 [ 87]: d1deacb53809d7fd -Block 0015 [ 88]: 9b50a6ee5d7d1948 -Block 0015 [ 89]: 9d15c478f7dcc4b9 -Block 0015 [ 90]: 59d7263057f177ea -Block 0015 [ 91]: 289f4fc690f576c2 -Block 0015 [ 92]: 902d29652c8d7a5f -Block 0015 [ 93]: ebb6de4f2680ad2e -Block 0015 [ 94]: aebe09766aae6aed -Block 0015 [ 95]: a010352a4a466549 -Block 0015 [ 96]: 6d01abc20434cf28 -Block 0015 [ 97]: ef5490c26c7160db -Block 0015 [ 98]: c8967bdad6fec7d4 -Block 0015 [ 99]: 1f3f3b7d011a59ac -Block 0015 [100]: 14649f16126e9144 -Block 0015 [101]: 7514a5b367741bd2 -Block 0015 [102]: f3048e4c58fa961d -Block 0015 [103]: b2029cf4babc2ece -Block 0015 [104]: 57d3d365f470df82 -Block 0015 [105]: f26caa1e504b2cee -Block 0015 [106]: 4e14ee1162f1aba0 -Block 0015 [107]: 8b404c1894a6cd7e -Block 0015 [108]: 7e59e9ad0315edb9 -Block 0015 [109]: 2982da0a40e3c999 -Block 0015 [110]: 5ee7b95068be9b9d -Block 0015 [111]: 2189fd2f1977ba4e -Block 0015 [112]: 9ce806b536243b71 -Block 0015 [113]: d9111bcc2d73ef11 -Block 0015 [114]: a1ec7c389432f66b -Block 0015 [115]: ebc58ec09735e09e -Block 0015 [116]: a6a66414ae766b22 -Block 0015 [117]: c0c662760fcb1852 -Block 0015 [118]: 04b77f032d2d29fb -Block 0015 [119]: 8dfac7b3bc22a617 -Block 0015 [120]: b0c1f84766e79592 -Block 0015 [121]: d97f09302ba87684 -Block 0015 [122]: 8961b89bb1dd5ada -Block 0015 [123]: 0d5c705785872c8c -Block 0015 [124]: ba3e87aaaa1a8399 -Block 0015 [125]: 6a2d50a64a414a9e -Block 0015 [126]: 3e921708eacebd87 -Block 0015 [127]: a57e9e6d210d9d86 -Block 0016 [ 0]: df185dd78c1f2b78 -Block 0016 [ 1]: 49f9a99335a422c3 -Block 0016 [ 2]: 02f5635e3b743a97 -Block 0016 [ 3]: 55f4724e5adf72c0 -Block 0016 [ 4]: e30716783fee2adb -Block 0016 [ 5]: 39dfe7810c7dd4e6 -Block 0016 [ 6]: 1dc5bb0e8e136978 -Block 0016 [ 7]: d13e3eaa24203ad3 -Block 0016 [ 8]: 4339943877cf7d96 -Block 0016 [ 9]: b918c90f4188fa29 -Block 0016 [ 10]: 907d0ff73d281017 -Block 0016 [ 11]: 425fce389b70a999 -Block 0016 [ 12]: c3baf4d09f9ec2ad -Block 0016 [ 13]: 69d75dbceb4b915d -Block 0016 [ 14]: a29ffd628df96321 -Block 0016 [ 15]: cf88189cf78fdfb6 -Block 0016 [ 16]: ef07b5d1da111948 -Block 0016 [ 17]: 4a3a74f1376d0d9e -Block 0016 [ 18]: 1b01accbc747837f -Block 0016 [ 19]: b48871a477381e4b -Block 0016 [ 20]: c7b3494dcf85abbd -Block 0016 [ 21]: 8aee4be839ba50cb -Block 0016 [ 22]: e6a4fc4ea169d857 -Block 0016 [ 23]: edfb8357401cb614 -Block 0016 [ 24]: f9dc1ba46003757c -Block 0016 [ 25]: ec9c465391eaeea3 -Block 0016 [ 26]: 1e1402a3ab178ad0 -Block 0016 [ 27]: 5a5810524c1f782b -Block 0016 [ 28]: 475df04282096019 -Block 0016 [ 29]: be53861dcdf717aa -Block 0016 [ 30]: 517ee91e28c1e49b -Block 0016 [ 31]: 4f6e9f32312fe2b8 -Block 0016 [ 32]: 374a8ff4124c3ba5 -Block 0016 [ 33]: 0a9add0bf6378093 -Block 0016 [ 34]: a17a2a5d0e3ff0d0 -Block 0016 [ 35]: 833253687ab236c9 -Block 0016 [ 36]: 10f5c2b5789316ca -Block 0016 [ 37]: c4055ea79dc80e81 -Block 0016 [ 38]: 333e55f91ae29671 -Block 0016 [ 39]: 150e8674d536a0a0 -Block 0016 [ 40]: 28c66be816ffcaa1 -Block 0016 [ 41]: 592a94f3b1459cab -Block 0016 [ 42]: eea6ec4cba337888 -Block 0016 [ 43]: 8600219ec14cde04 -Block 0016 [ 44]: 3a9b5cdd3568b325 -Block 0016 [ 45]: aad6128a2a76c958 -Block 0016 [ 46]: bfb8cade0905c962 -Block 0016 [ 47]: dda1376b4299b18a -Block 0016 [ 48]: bd0078b78f05094a -Block 0016 [ 49]: ab94838730040fb3 -Block 0016 [ 50]: 8891b571e9e2336e -Block 0016 [ 51]: 5c18d22f60a1a657 -Block 0016 [ 52]: b4615a5fb8572c23 -Block 0016 [ 53]: d3cbac3c3adecd23 -Block 0016 [ 54]: 71cf3196d24159dd -Block 0016 [ 55]: e5b0c73bdb337098 -Block 0016 [ 56]: 8849fdd41969d56e -Block 0016 [ 57]: c24297d105b05808 -Block 0016 [ 58]: 3d206c5fe6f6289d -Block 0016 [ 59]: a9a8333d832b2199 -Block 0016 [ 60]: e66ec8f0873f231b -Block 0016 [ 61]: ca9905c770bfe992 -Block 0016 [ 62]: f63c14054d5124e9 -Block 0016 [ 63]: d58d91fd3ee2b1a1 -Block 0016 [ 64]: 6ff32629231dc72b -Block 0016 [ 65]: 255d68cb56d3fa47 -Block 0016 [ 66]: 6b0af8028d7ca3a3 -Block 0016 [ 67]: 736d0fe6f9f80d52 -Block 0016 [ 68]: 90d1bde757cd5e96 -Block 0016 [ 69]: 07db8b6e1b4d5c34 -Block 0016 [ 70]: 791b2ff7ef295bd7 -Block 0016 [ 71]: fae425b3e1da0fd8 -Block 0016 [ 72]: 9f19178f83fe4783 -Block 0016 [ 73]: 1167f6d05e9820f4 -Block 0016 [ 74]: 7df7b36d7debf250 -Block 0016 [ 75]: 82113bee719dd1b5 -Block 0016 [ 76]: 5e798b4976c90140 -Block 0016 [ 77]: 3290bcc2692f2fc9 -Block 0016 [ 78]: 79ca6777cbe0ae0a -Block 0016 [ 79]: 32a54689489dc4ea -Block 0016 [ 80]: ea95bbfbeec60577 -Block 0016 [ 81]: ef12d7710711faae -Block 0016 [ 82]: 7866976349319235 -Block 0016 [ 83]: b321f8967d8fe701 -Block 0016 [ 84]: 0edcf290c5c241b3 -Block 0016 [ 85]: 92cfa62cadaef334 -Block 0016 [ 86]: c0c4c0077068d155 -Block 0016 [ 87]: ee895ccf8a30ce54 -Block 0016 [ 88]: f71204e73361a729 -Block 0016 [ 89]: 157afabb278e2f75 -Block 0016 [ 90]: f44173218e7734b5 -Block 0016 [ 91]: 8ce162e3111fe98d -Block 0016 [ 92]: 3f5f5a4acbc10d7e -Block 0016 [ 93]: 8fec68852d8995ab -Block 0016 [ 94]: ff2eed0c3d136a66 -Block 0016 [ 95]: 431218a26b23c2cf -Block 0016 [ 96]: 01264b38f47d5244 -Block 0016 [ 97]: 92bc9bd098e8c02a -Block 0016 [ 98]: bb4d45a1401c21f3 -Block 0016 [ 99]: c98791ab390af0a3 -Block 0016 [100]: 8fe6c5109d119811 -Block 0016 [101]: c00cf15abf0089cb -Block 0016 [102]: 57038fc4a333e7b5 -Block 0016 [103]: 82b257d90a52da30 -Block 0016 [104]: b9cc96cce73c1c99 -Block 0016 [105]: dacefe330d03e9e2 -Block 0016 [106]: e811034d6fe46bb0 -Block 0016 [107]: 96cb3e04aa68af22 -Block 0016 [108]: d6c949273c0f6012 -Block 0016 [109]: edb20985c7cc041b -Block 0016 [110]: 8569c84b201e2722 -Block 0016 [111]: 37b8fbe2e91d4cce -Block 0016 [112]: 4f25db3dad602ad2 -Block 0016 [113]: ad25504f1f0029f8 -Block 0016 [114]: 55d05138e5fc67ea -Block 0016 [115]: 8abba493f0b14307 -Block 0016 [116]: dbda5a77b570203c -Block 0016 [117]: 6c0e73d8df2a5cbf -Block 0016 [118]: ab1675a4c073aa1b -Block 0016 [119]: c28837a4d5785148 -Block 0016 [120]: 6be217b67e87d0cd -Block 0016 [121]: 96b6f0aada351d55 -Block 0016 [122]: d7b08772796b0ca3 -Block 0016 [123]: b0b5beb384738224 -Block 0016 [124]: 2766dfdc8eebb835 -Block 0016 [125]: 6fbe781c87b91676 -Block 0016 [126]: ef9dae4fda31bf35 -Block 0016 [127]: 41ce4b9bfdcd494c -Block 0017 [ 0]: c255f12517b5f528 -Block 0017 [ 1]: 1a7c91d6a62de6c6 -Block 0017 [ 2]: 6042723b63c8b725 -Block 0017 [ 3]: edc1e525aace3c4d -Block 0017 [ 4]: 9083bb02e70719bf -Block 0017 [ 5]: dff2e711c263aad0 -Block 0017 [ 6]: 643e8a1676401ac9 -Block 0017 [ 7]: 67ee406626e2af5b -Block 0017 [ 8]: 2ca94c000c31762e -Block 0017 [ 9]: e3975e35e2eb5398 -Block 0017 [ 10]: 2088403155c03d95 -Block 0017 [ 11]: 1146ad509ae7d17e -Block 0017 [ 12]: ebf6b18eb6274f96 -Block 0017 [ 13]: 74c2258314569745 -Block 0017 [ 14]: d1a25a287f9acbc0 -Block 0017 [ 15]: 306846f42d1db68f -Block 0017 [ 16]: 4d07dc025ac6f493 -Block 0017 [ 17]: d014df675b0095b9 -Block 0017 [ 18]: 0cac62bf06a23332 -Block 0017 [ 19]: 6c579b8f790fc721 -Block 0017 [ 20]: 5aff18b8d7750ee6 -Block 0017 [ 21]: 5c41322f23c3d21b -Block 0017 [ 22]: cd64bb030c6d4c14 -Block 0017 [ 23]: d6abf4f11955fba4 -Block 0017 [ 24]: f08e1d8bb5aa745e -Block 0017 [ 25]: 51f0dd60784369cf -Block 0017 [ 26]: d3eea3880a74e837 -Block 0017 [ 27]: 027fb4558c227054 -Block 0017 [ 28]: 69705de9eb976c9e -Block 0017 [ 29]: 029ed81f3b8083fe -Block 0017 [ 30]: 6174a0327bbb3513 -Block 0017 [ 31]: f0865510be03373f -Block 0017 [ 32]: c06d8ae72cb28b64 -Block 0017 [ 33]: 619282b2915316e8 -Block 0017 [ 34]: 9544171bca5aba07 -Block 0017 [ 35]: 2bb07513d70af873 -Block 0017 [ 36]: 4a0649f9bcd697c1 -Block 0017 [ 37]: 569952b056a02d6a -Block 0017 [ 38]: ecc1a448e97ec334 -Block 0017 [ 39]: 3a3f886128900cb6 -Block 0017 [ 40]: 59ab40a31e998543 -Block 0017 [ 41]: 464c956704a1522f -Block 0017 [ 42]: 0a88e34421502b80 -Block 0017 [ 43]: 11f29238c24ca7ae -Block 0017 [ 44]: 4c4ed3acdc97d6c7 -Block 0017 [ 45]: b3dd9cbf8e290895 -Block 0017 [ 46]: 58597d61f7166115 -Block 0017 [ 47]: 0a3668475c207ac0 -Block 0017 [ 48]: 16bf61e088c6a552 -Block 0017 [ 49]: fb03ea187661dbbb -Block 0017 [ 50]: 936a42f8220b9daf -Block 0017 [ 51]: 8e534cb1de16ae4a -Block 0017 [ 52]: 10ce6cb9da19db43 -Block 0017 [ 53]: 440a033c0cbcfb97 -Block 0017 [ 54]: 8e1d18c6fe8879b2 -Block 0017 [ 55]: 9f8c3b96301f169d -Block 0017 [ 56]: 7aad3cbcacc015db -Block 0017 [ 57]: 7129d8ac7b3ac45b -Block 0017 [ 58]: 6459133e511c248d -Block 0017 [ 59]: afcaf25b44ac2cc0 -Block 0017 [ 60]: 5e50b5ab3bf43e66 -Block 0017 [ 61]: 6ead49151f1d1b6f -Block 0017 [ 62]: 84105ac703c1d668 -Block 0017 [ 63]: fe6ea623494ad5df -Block 0017 [ 64]: c0f2820a0784bcea -Block 0017 [ 65]: 6192b3775d188c4e -Block 0017 [ 66]: b80f2e5d98cb4314 -Block 0017 [ 67]: 62e6d5758eef3792 -Block 0017 [ 68]: 51e207f92257bdf8 -Block 0017 [ 69]: 871b10b5dcbd15fb -Block 0017 [ 70]: c293d554a47db14a -Block 0017 [ 71]: b01ccdc84de5763a -Block 0017 [ 72]: 5b7beabd11951254 -Block 0017 [ 73]: 3059926a0f099e08 -Block 0017 [ 74]: 9caf0ff4887cc6c1 -Block 0017 [ 75]: 3bc6b264d764258e -Block 0017 [ 76]: 790512ed0dd294c9 -Block 0017 [ 77]: 72ef920edb63ec2c -Block 0017 [ 78]: 394da25fd4f9e123 -Block 0017 [ 79]: aa54ec6877648eb7 -Block 0017 [ 80]: 44e1b077b8a7565b -Block 0017 [ 81]: 45857d0b5ad9479a -Block 0017 [ 82]: f062f65b5d503323 -Block 0017 [ 83]: a168acb912f125be -Block 0017 [ 84]: 15630c565fab9475 -Block 0017 [ 85]: 11455ef696ae101e -Block 0017 [ 86]: 86763895b6fe2b49 -Block 0017 [ 87]: 654cead6b7d65bba -Block 0017 [ 88]: 7632b64be27554b3 -Block 0017 [ 89]: ac562a4331bdf6b2 -Block 0017 [ 90]: 70438f6240517dcb -Block 0017 [ 91]: e5b1bbdd81883384 -Block 0017 [ 92]: e5406e221cfcc990 -Block 0017 [ 93]: 694c710d4750bc8d -Block 0017 [ 94]: dd1729bf7e0b12d3 -Block 0017 [ 95]: 55886f912b344cd3 -Block 0017 [ 96]: c902a53f97ba19a0 -Block 0017 [ 97]: b66c74cd9e7a20c1 -Block 0017 [ 98]: 2308e5b036079da4 -Block 0017 [ 99]: cdc526b983a98cfc -Block 0017 [100]: 9868dc35af76d88e -Block 0017 [101]: 1166ed598c534c7e -Block 0017 [102]: 66ed886b20c6ae61 -Block 0017 [103]: 804b12b774cb411d -Block 0017 [104]: a8e1de357f7444b5 -Block 0017 [105]: 7375b1c693cb1e59 -Block 0017 [106]: fdea379b45e1d482 -Block 0017 [107]: a7ae259328e505e1 -Block 0017 [108]: 4a498055e9c7a4e5 -Block 0017 [109]: fdb7762264b16d42 -Block 0017 [110]: b0afc809e1b4d93e -Block 0017 [111]: 4143e78d76c21ae8 -Block 0017 [112]: ede783054972535d -Block 0017 [113]: a30b50251b9a735c -Block 0017 [114]: bfdc3808fef4acd5 -Block 0017 [115]: af990dac9a2314f7 -Block 0017 [116]: 44e37b021779c6d1 -Block 0017 [117]: d846b03cfc7637b1 -Block 0017 [118]: a7c373274faff42e -Block 0017 [119]: bc9c3a5ab89c8aaa -Block 0017 [120]: 3b5a5fa7262355f3 -Block 0017 [121]: 1bc2d9f69829a86a -Block 0017 [122]: 3546ed470b5a8723 -Block 0017 [123]: 97f881b5aff970d3 -Block 0017 [124]: 1ac3821269c2ee8f -Block 0017 [125]: 1d24698d02c09cca -Block 0017 [126]: e968c1d7e6f7f983 -Block 0017 [127]: 615ae91ba244796e -Block 0018 [ 0]: c56353865706e01e -Block 0018 [ 1]: 2008deada2479371 -Block 0018 [ 2]: 6bf9640afa0be017 -Block 0018 [ 3]: cbff064315b5c969 -Block 0018 [ 4]: 73c6647d9e81768f -Block 0018 [ 5]: 54c35767415dcc0f -Block 0018 [ 6]: 85789ed843f63faa -Block 0018 [ 7]: a29e6d2bad36be72 -Block 0018 [ 8]: b301ef96181f4af9 -Block 0018 [ 9]: 623461467a1d50b8 -Block 0018 [ 10]: 779c081d5dd2a8d8 -Block 0018 [ 11]: 97d9bfcc4d7c1bf0 -Block 0018 [ 12]: a1d72012d47fa27c -Block 0018 [ 13]: 0d3641842d3e8f4e -Block 0018 [ 14]: 7b0c3ed769c28a37 -Block 0018 [ 15]: a16e60ca97b4983f -Block 0018 [ 16]: 2bcb4545dfdfa02f -Block 0018 [ 17]: 2852a84faf0688da -Block 0018 [ 18]: e4cf9192f6f7df0f -Block 0018 [ 19]: d79e3702087b824d -Block 0018 [ 20]: a3b87e0702914795 -Block 0018 [ 21]: e2f14145b5897d88 -Block 0018 [ 22]: 9fbb5bbc9089bc9b -Block 0018 [ 23]: d1a2d108b965ee75 -Block 0018 [ 24]: d3965baad215bdae -Block 0018 [ 25]: 5146559ceb1203f7 -Block 0018 [ 26]: 438229a438f64d84 -Block 0018 [ 27]: d52ea8df05362ef2 -Block 0018 [ 28]: f65849b93cac0fbc -Block 0018 [ 29]: 91d10136de976abc -Block 0018 [ 30]: a6e405c4cc904a3b -Block 0018 [ 31]: 680b6f21abd89675 -Block 0018 [ 32]: a71ce0ee26d18c2e -Block 0018 [ 33]: ce26ebecb85e8737 -Block 0018 [ 34]: 142f9a78e5c1538b -Block 0018 [ 35]: d05611f217f38322 -Block 0018 [ 36]: 831121ec0775df8d -Block 0018 [ 37]: fde91d847c51ecdd -Block 0018 [ 38]: 3ad5f8d0ccb56e6f -Block 0018 [ 39]: 9fcd5e80613b6c23 -Block 0018 [ 40]: cfc5db7486fd0e95 -Block 0018 [ 41]: e5a1867214869654 -Block 0018 [ 42]: acb382ffbe5139e6 -Block 0018 [ 43]: 1ed3941d890bb088 -Block 0018 [ 44]: a4145acf9ec95a86 -Block 0018 [ 45]: 78da7311f5416211 -Block 0018 [ 46]: 939b875265496872 -Block 0018 [ 47]: e1bb9c5c2220f3ff -Block 0018 [ 48]: 1c24f60c4ce3bae3 -Block 0018 [ 49]: 414f56e67af2736c -Block 0018 [ 50]: f1a5fd7110bda591 -Block 0018 [ 51]: ebd71b667376a60c -Block 0018 [ 52]: e6cd6e0aa97da042 -Block 0018 [ 53]: 653f9b43d66fd80e -Block 0018 [ 54]: 52db371819ad4bbe -Block 0018 [ 55]: 20b98ebd399caa7e -Block 0018 [ 56]: c3cba3ea8af37c61 -Block 0018 [ 57]: 20340256ad3a6278 -Block 0018 [ 58]: e9bba7cc05e901e8 -Block 0018 [ 59]: ef99a3e5e269af3f -Block 0018 [ 60]: 4ec9e41d99c9c61b -Block 0018 [ 61]: e737c793049f51fd -Block 0018 [ 62]: 735095de5b23f4af -Block 0018 [ 63]: 68702e4e0d7a42c4 -Block 0018 [ 64]: e74de4a633120e8b -Block 0018 [ 65]: 6dae24a779a30904 -Block 0018 [ 66]: c6a469551c191227 -Block 0018 [ 67]: b7967b46207c2c5c -Block 0018 [ 68]: 71379f1e1b5162b0 -Block 0018 [ 69]: 5ab11e0f2cc5802a -Block 0018 [ 70]: 55643f358e6e9381 -Block 0018 [ 71]: afb36c68f8206119 -Block 0018 [ 72]: 7d179088c52f6798 -Block 0018 [ 73]: 551634a47e4951ad -Block 0018 [ 74]: 752eda55f86b960f -Block 0018 [ 75]: a73594a6d81887f9 -Block 0018 [ 76]: 246794e4638b41e6 -Block 0018 [ 77]: 409b195249a51f5a -Block 0018 [ 78]: f7bd3026e193d18c -Block 0018 [ 79]: 4be5161c5bdd6e8b -Block 0018 [ 80]: de96cd3c413a8be9 -Block 0018 [ 81]: aba764ceb1adb102 -Block 0018 [ 82]: b7842636bd5aa117 -Block 0018 [ 83]: a9c14fdc42872e40 -Block 0018 [ 84]: a15963f20588b09c -Block 0018 [ 85]: 368cecfa2963a40d -Block 0018 [ 86]: 053d9f8602aa5b63 -Block 0018 [ 87]: 760fba8205ffcb02 -Block 0018 [ 88]: 38a771fa1838dc59 -Block 0018 [ 89]: c99bfa719cb66fe5 -Block 0018 [ 90]: b073ace471a2021e -Block 0018 [ 91]: fd7e19c27d2f7eca -Block 0018 [ 92]: 38fc7cb22e67dbf3 -Block 0018 [ 93]: 9a03652a320f0213 -Block 0018 [ 94]: f1cc4b1493b3703f -Block 0018 [ 95]: 1b3306a2f3865325 -Block 0018 [ 96]: 2595f7949a755f71 -Block 0018 [ 97]: 78e9fa382d0927d3 -Block 0018 [ 98]: 8b85e76f7f397022 -Block 0018 [ 99]: a19f6dd3b8dca52d -Block 0018 [100]: 00e82e5576b941e6 -Block 0018 [101]: a7fa7ae6faddf0d9 -Block 0018 [102]: d99ff748568de1f9 -Block 0018 [103]: 4e2675753ff9d242 -Block 0018 [104]: d0cd9788bfee8164 -Block 0018 [105]: f2da4d54b004e796 -Block 0018 [106]: 5b1a0f55a7d95023 -Block 0018 [107]: e4ef7b231962072e -Block 0018 [108]: 729cf2df66d37c30 -Block 0018 [109]: 40c7b786a7aed4b0 -Block 0018 [110]: 3ac08ac29d39223d -Block 0018 [111]: 203dc268677ed0e9 -Block 0018 [112]: 52c84d8337fd4d66 -Block 0018 [113]: 139e5667061027e1 -Block 0018 [114]: 6c078c85ee42c4aa -Block 0018 [115]: 63833db031595429 -Block 0018 [116]: d447ec89081e5689 -Block 0018 [117]: 840de94326fb0d5c -Block 0018 [118]: 410e13a5634eae20 -Block 0018 [119]: d7b756d4a7b1697f -Block 0018 [120]: 1050513a1e7b7326 -Block 0018 [121]: 08a14292e030a2a3 -Block 0018 [122]: 30d6edcc44ef12f2 -Block 0018 [123]: 77d8788d3cf22d4b -Block 0018 [124]: 9066b21a6c79f00e -Block 0018 [125]: c3eab9a459f9fcb8 -Block 0018 [126]: 3bdd440ce2e5e1f4 -Block 0018 [127]: 8f973dff57dbd378 -Block 0019 [ 0]: 01fb129cc5b77b4f -Block 0019 [ 1]: d97f57425162ea3e -Block 0019 [ 2]: e8276a92492039e6 -Block 0019 [ 3]: 3608e78e794a18a4 -Block 0019 [ 4]: 4b11369193064da4 -Block 0019 [ 5]: b0de35a83d3f72e4 -Block 0019 [ 6]: d2a6b44f3df673a8 -Block 0019 [ 7]: 2ac37c9b9bd04ab3 -Block 0019 [ 8]: 488c7cd49282a0a0 -Block 0019 [ 9]: 8c380c95963e6b4f -Block 0019 [ 10]: 81d5c1c378d59641 -Block 0019 [ 11]: 2d857e93286b67ae -Block 0019 [ 12]: 6a58c08de951b4d0 -Block 0019 [ 13]: 6ab7d4bee5b738d3 -Block 0019 [ 14]: 88bf6dc38b506d3b -Block 0019 [ 15]: 009b889d679b8497 -Block 0019 [ 16]: 59b1f1f74efb2322 -Block 0019 [ 17]: 52ceaeb9154ca50c -Block 0019 [ 18]: 28c0cd203b6b6fc9 -Block 0019 [ 19]: aad7e207dff3cec6 -Block 0019 [ 20]: 9ffd1e22884b708b -Block 0019 [ 21]: 06e86279cd514c88 -Block 0019 [ 22]: cb899f826746fe5d -Block 0019 [ 23]: 10b5ecf199c8d34d -Block 0019 [ 24]: faae19be3f1a73b1 -Block 0019 [ 25]: c05fa929156bb2b8 -Block 0019 [ 26]: 966ee6906bcc9ca0 -Block 0019 [ 27]: 910f75707b22bbeb -Block 0019 [ 28]: 05bea73cdcad1abe -Block 0019 [ 29]: 2a217ca21b87f4ea -Block 0019 [ 30]: 9803db62cd649fdb -Block 0019 [ 31]: e41f40690f0acedb -Block 0019 [ 32]: 2704ac203dbf666a -Block 0019 [ 33]: de3867742cda737b -Block 0019 [ 34]: 5e891ddbc0ebf80f -Block 0019 [ 35]: a26084633cbc25c6 -Block 0019 [ 36]: e324a914bb6ee989 -Block 0019 [ 37]: 12af57e4ebd54cfc -Block 0019 [ 38]: 7326a4ef7bb3ce72 -Block 0019 [ 39]: 96ebd2aacd9ea28a -Block 0019 [ 40]: 177b393db4a26bd8 -Block 0019 [ 41]: 1885addd7e6227f2 -Block 0019 [ 42]: 707cc6e9254dd0e5 -Block 0019 [ 43]: fbafea1c9cac4810 -Block 0019 [ 44]: f650d8ca36a2cc92 -Block 0019 [ 45]: df88d3699c7fd4ff -Block 0019 [ 46]: d01a174fa16b4df5 -Block 0019 [ 47]: e8c9e9b1426c2e01 -Block 0019 [ 48]: 13ca5016746e7cc2 -Block 0019 [ 49]: fa7bb4c75626d3b2 -Block 0019 [ 50]: 0f844dd13a6eedf9 -Block 0019 [ 51]: 2bdf7095dddb0eca -Block 0019 [ 52]: 70020701e7728c78 -Block 0019 [ 53]: 1b7cc5becedf1a6e -Block 0019 [ 54]: 4402873b468a684c -Block 0019 [ 55]: 9c7cbbb1df70289c -Block 0019 [ 56]: bd1d0dd77aa7b618 -Block 0019 [ 57]: 750c4d82f4c0978e -Block 0019 [ 58]: dbdc7edc1833b96b -Block 0019 [ 59]: bb7dba594b1c100f -Block 0019 [ 60]: ece11ceaa82d9904 -Block 0019 [ 61]: 7b808930d82a9020 -Block 0019 [ 62]: b06d85c1d2424bdd -Block 0019 [ 63]: 64ffd652a760ed2c -Block 0019 [ 64]: 4562d6f8e3b5dccb -Block 0019 [ 65]: 87e6d56d65c283c6 -Block 0019 [ 66]: 9fe94fc027c21a00 -Block 0019 [ 67]: 8dc400478b9f1163 -Block 0019 [ 68]: 029c14bce5524f9e -Block 0019 [ 69]: 423deec939785c44 -Block 0019 [ 70]: a969d7c12fea9a28 -Block 0019 [ 71]: cec54cf9731902f2 -Block 0019 [ 72]: 6cac7755e0231ce0 -Block 0019 [ 73]: 3ed2da7f7fdfa17c -Block 0019 [ 74]: 6469eff8bafbf4c0 -Block 0019 [ 75]: 5619e6ce49fea452 -Block 0019 [ 76]: 5ff711a1d157e9c6 -Block 0019 [ 77]: bbbb1e51b7c0fa8d -Block 0019 [ 78]: ff6020f896d4aa0a -Block 0019 [ 79]: 7793af1f4cb28be8 -Block 0019 [ 80]: d4119423ff81e99a -Block 0019 [ 81]: 87071a0fe6f1fdb2 -Block 0019 [ 82]: fe52ad7fc16253e8 -Block 0019 [ 83]: 7f5f03545de2fefc -Block 0019 [ 84]: 7b38fc2bb6260261 -Block 0019 [ 85]: da971613e240efe7 -Block 0019 [ 86]: 7a86717ff3583bc9 -Block 0019 [ 87]: 41e9e68bbc8d3459 -Block 0019 [ 88]: 352101524d076bdf -Block 0019 [ 89]: 56bc810db202a661 -Block 0019 [ 90]: 724895de53780184 -Block 0019 [ 91]: 472995ae2902dc14 -Block 0019 [ 92]: e26c34719dc75f33 -Block 0019 [ 93]: 284575a822951dee -Block 0019 [ 94]: 3c34de13fbf1fd82 -Block 0019 [ 95]: b7dd994c13edd4d0 -Block 0019 [ 96]: 8811e94ca8eabca9 -Block 0019 [ 97]: 02ea332997305ef9 -Block 0019 [ 98]: ade80b60a9a5e79e -Block 0019 [ 99]: 66077ba1b5565540 -Block 0019 [100]: 7388da600272d9d3 -Block 0019 [101]: def87e32345358d6 -Block 0019 [102]: e71436c27aa3f5e4 -Block 0019 [103]: a6c69a8fbb9110c0 -Block 0019 [104]: 48000a8ca2db151d -Block 0019 [105]: b2f16745a08b53c3 -Block 0019 [106]: a9bd83427a1fb1b2 -Block 0019 [107]: 3b5eaf5351dad3d7 -Block 0019 [108]: f6b94b7083aefcc2 -Block 0019 [109]: b460241c7ab61f9b -Block 0019 [110]: c239335eb5ed5785 -Block 0019 [111]: b73d576203875b21 -Block 0019 [112]: 0513d7728b6dabaa -Block 0019 [113]: 1be1815371f2da1a -Block 0019 [114]: 80af69b2bb1f5078 -Block 0019 [115]: 4ca38ab5b8309e95 -Block 0019 [116]: 330b528faad28a90 -Block 0019 [117]: 71ad5e378ee67af2 -Block 0019 [118]: 0c600c1d3b739681 -Block 0019 [119]: cec06a6b8cec5726 -Block 0019 [120]: 9f24740e13ae7b5e -Block 0019 [121]: bad1bf8dd52977b4 -Block 0019 [122]: 6a6858419908532f -Block 0019 [123]: d81b57f836be3478 -Block 0019 [124]: 20f707578f0627bb -Block 0019 [125]: eac9fa947830264d -Block 0019 [126]: d3bda8399e5f7b2f -Block 0019 [127]: a0c476401ade3caa -Block 0020 [ 0]: 2904d477754f1182 -Block 0020 [ 1]: c7817f8c904876aa -Block 0020 [ 2]: ef630ae6c82fdd4b -Block 0020 [ 3]: 2b90f2f26913e67e -Block 0020 [ 4]: 4a00e183ac3b02f2 -Block 0020 [ 5]: d36d5d6dd25c2444 -Block 0020 [ 6]: 2f6ff1b1a0d64a92 -Block 0020 [ 7]: fbaa201fda84ce01 -Block 0020 [ 8]: 4b29cc7f03ce8132 -Block 0020 [ 9]: baf31290c098e42d -Block 0020 [ 10]: fe21fd15da24aadf -Block 0020 [ 11]: b46774f27b1b06a9 -Block 0020 [ 12]: 7fd84d48a8f2dc8a -Block 0020 [ 13]: 42a97fe50cdce3cb -Block 0020 [ 14]: c597b37c0fbbdf6d -Block 0020 [ 15]: cefba6997f40e239 -Block 0020 [ 16]: ba63b0a3b6a92f33 -Block 0020 [ 17]: 3d2c8dc2af6de650 -Block 0020 [ 18]: 0416456efe02d663 -Block 0020 [ 19]: 8bb54ac882e37ad3 -Block 0020 [ 20]: 90873df0d3d9cdf2 -Block 0020 [ 21]: 27c896216f937720 -Block 0020 [ 22]: ae591b750081df20 -Block 0020 [ 23]: a1d13beb52615120 -Block 0020 [ 24]: 58242fd330b617fe -Block 0020 [ 25]: cea097568f1d910c -Block 0020 [ 26]: 06d3145ceb011b4c -Block 0020 [ 27]: c0907ede1d338bed -Block 0020 [ 28]: 5d647e9063e3a000 -Block 0020 [ 29]: fb2bc9ff8eb0da2b -Block 0020 [ 30]: cafc25218c1854f4 -Block 0020 [ 31]: 9494568ebe7b081f -Block 0020 [ 32]: 2fce8d55463d09b0 -Block 0020 [ 33]: 8bdf4e97534ee12c -Block 0020 [ 34]: 0f07aa1a0fcc4e9f -Block 0020 [ 35]: 084dc457956a6a0e -Block 0020 [ 36]: 232705d7f0cab526 -Block 0020 [ 37]: d448fb450c080da5 -Block 0020 [ 38]: 48b7912f7fe83b1e -Block 0020 [ 39]: 6489d462f6978400 -Block 0020 [ 40]: fad910fea0c872f7 -Block 0020 [ 41]: a2bc6a2472d0de22 -Block 0020 [ 42]: 1da8c7cc8c2a0ead -Block 0020 [ 43]: bda44d0c59102810 -Block 0020 [ 44]: bed9ec721abf77bd -Block 0020 [ 45]: 5eb04509a4efa5fe -Block 0020 [ 46]: 147abfb14b55ff4d -Block 0020 [ 47]: 464db5cb2ab081e4 -Block 0020 [ 48]: 347a42f1646122f7 -Block 0020 [ 49]: 6c60a9d4d4809c39 -Block 0020 [ 50]: 0faa4393af952836 -Block 0020 [ 51]: e96e650e09870d44 -Block 0020 [ 52]: f2fbbf0ea59259f6 -Block 0020 [ 53]: f9d39cf808465afa -Block 0020 [ 54]: 4f41c740452f42d8 -Block 0020 [ 55]: ccd0940ced56b760 -Block 0020 [ 56]: cfc2c111d630bb14 -Block 0020 [ 57]: 00bb0851dabe0d80 -Block 0020 [ 58]: 0db0f1293ff7fe6b -Block 0020 [ 59]: 6021268000713de0 -Block 0020 [ 60]: 8dd8a5cd7c133a5a -Block 0020 [ 61]: e2603e8416c2dcfc -Block 0020 [ 62]: aeece433db673608 -Block 0020 [ 63]: 06411431eb04ce7b -Block 0020 [ 64]: b4cde9369fd8fedd -Block 0020 [ 65]: ead8fa31d96ead7d -Block 0020 [ 66]: f1498c4b282142fc -Block 0020 [ 67]: 9a6bf2a2920dcc07 -Block 0020 [ 68]: ef19df470784a666 -Block 0020 [ 69]: 7b19ef45403eb2aa -Block 0020 [ 70]: 7f87efe8bb1347b9 -Block 0020 [ 71]: 966b6c76676b7cb2 -Block 0020 [ 72]: ddfde750a3792957 -Block 0020 [ 73]: af435d6f749595f3 -Block 0020 [ 74]: 6b66903f330cb882 -Block 0020 [ 75]: 2f5d5734383ab9b2 -Block 0020 [ 76]: 16c84ef3653ec28d -Block 0020 [ 77]: ed267393d64b8ca9 -Block 0020 [ 78]: 37617f3ef3cc84a2 -Block 0020 [ 79]: 0392cc1ddb7741bd -Block 0020 [ 80]: 3e4cd2bd5d298731 -Block 0020 [ 81]: fad5bfe2a757e129 -Block 0020 [ 82]: 77200759f5610f93 -Block 0020 [ 83]: c4a3a70476b47735 -Block 0020 [ 84]: 67d711646fe329a3 -Block 0020 [ 85]: a297b952e77fb1a5 -Block 0020 [ 86]: 6667da2228cad03d -Block 0020 [ 87]: 61e9958285b43f16 -Block 0020 [ 88]: 9ed6b30497286eee -Block 0020 [ 89]: a1390ee861b2ab3a -Block 0020 [ 90]: 4ed79e20591d2fd6 -Block 0020 [ 91]: d48ed0be2c925b76 -Block 0020 [ 92]: c822e029ac094eb3 -Block 0020 [ 93]: ba2d8c8a4a67e483 -Block 0020 [ 94]: ccb998f8886aa893 -Block 0020 [ 95]: 280cc0b728b73fad -Block 0020 [ 96]: 277e12cadbf7798d -Block 0020 [ 97]: 7f57143f08c86d28 -Block 0020 [ 98]: 1ca6f11a4b1e25ff -Block 0020 [ 99]: b2db91c288ed40cd -Block 0020 [100]: f2c6434730b685b2 -Block 0020 [101]: 0f9a24dd1275f7b9 -Block 0020 [102]: 9bd27d8fcac17d47 -Block 0020 [103]: af38fcf1b8cb26da -Block 0020 [104]: 16a1f451c0e83e8b -Block 0020 [105]: a8c2fb8a2cd2a9af -Block 0020 [106]: 686efdc520934059 -Block 0020 [107]: 23cb0295bad5928e -Block 0020 [108]: 22e331a0e82ae918 -Block 0020 [109]: b246bdcdcb1b3dc8 -Block 0020 [110]: e706d48f7b4be38b -Block 0020 [111]: f6b8e33579072361 -Block 0020 [112]: d093370d12803e37 -Block 0020 [113]: f5ee3f6bbe485f0c -Block 0020 [114]: ff26642a6224ef14 -Block 0020 [115]: 8e060f75459b1591 -Block 0020 [116]: 92d11d49029def67 -Block 0020 [117]: 83686769d908640a -Block 0020 [118]: 982d2d9cc1892c1a -Block 0020 [119]: d182c0a05d04be1f -Block 0020 [120]: 085b197d2ae051ef -Block 0020 [121]: 6a9f23d9345da493 -Block 0020 [122]: f1de02d627b8e3ad -Block 0020 [123]: 274aabf0e728e979 -Block 0020 [124]: f296c23bfd3ddd40 -Block 0020 [125]: d2d634b5e3eb437f -Block 0020 [126]: 28a830d2b2a53ae3 -Block 0020 [127]: 0204d4ecf900d9fd -Block 0021 [ 0]: c12cc1a7630ab20c -Block 0021 [ 1]: 7d843f9d1bb57449 -Block 0021 [ 2]: 4ec1c00fb99466b5 -Block 0021 [ 3]: 76f7b0ad0b006ffe -Block 0021 [ 4]: f8c75bd78486fcd5 -Block 0021 [ 5]: 31b3c8708d155fe3 -Block 0021 [ 6]: 20c16f1e186a23e4 -Block 0021 [ 7]: a878075c67e6146e -Block 0021 [ 8]: c448dd6ff4914bf2 -Block 0021 [ 9]: f26dc8f66622ff67 -Block 0021 [ 10]: 42913728606ca3b4 -Block 0021 [ 11]: 08df8268d1ab2dea -Block 0021 [ 12]: 62d6424701b0d763 -Block 0021 [ 13]: 74c12644770da62b -Block 0021 [ 14]: 57fed96b12c80890 -Block 0021 [ 15]: 48d7d8d34fa4a950 -Block 0021 [ 16]: 6d572991f37958e3 -Block 0021 [ 17]: 63f5eafb7cd7efbc -Block 0021 [ 18]: 291c0fa67d95097d -Block 0021 [ 19]: d745f3585cae2a23 -Block 0021 [ 20]: 5b098367274119eb -Block 0021 [ 21]: eeb0b972239d67c3 -Block 0021 [ 22]: 6f8d5d30a3290b2d -Block 0021 [ 23]: 1cd930f80f508fed -Block 0021 [ 24]: 13252320a59f1add -Block 0021 [ 25]: c0bd534bb0880794 -Block 0021 [ 26]: 2ae82368d37658b1 -Block 0021 [ 27]: 0767e3162640b624 -Block 0021 [ 28]: 97a163f101921954 -Block 0021 [ 29]: 240e2369e5df1c54 -Block 0021 [ 30]: 796dc4405b1058ce -Block 0021 [ 31]: e32a4b28380c93fc -Block 0021 [ 32]: fe45b1a7bc753ed2 -Block 0021 [ 33]: 9e036ac9e7500849 -Block 0021 [ 34]: 4ccffa21cc335fb9 -Block 0021 [ 35]: a98d9e57a864f8be -Block 0021 [ 36]: c821969719d0b4ee -Block 0021 [ 37]: ea18b297cddc70f2 -Block 0021 [ 38]: f2c76c0b5f9f4096 -Block 0021 [ 39]: 54e08c67e0685193 -Block 0021 [ 40]: a75405fdc2ae7c40 -Block 0021 [ 41]: 8e7132965e9d271d -Block 0021 [ 42]: 998217fcf11ac2f2 -Block 0021 [ 43]: 3defa4721885a50e -Block 0021 [ 44]: 70699c4abc689fba -Block 0021 [ 45]: d746bef4daf4bcea -Block 0021 [ 46]: 600fdc290ee2027d -Block 0021 [ 47]: 67be6a9bd1e606bc -Block 0021 [ 48]: af28be9adba758ed -Block 0021 [ 49]: ad583090bd70d41c -Block 0021 [ 50]: 9f4b3857054b108d -Block 0021 [ 51]: 5310a2ea584dea4e -Block 0021 [ 52]: 1e6b0959fae98af3 -Block 0021 [ 53]: a13a136d93c676a6 -Block 0021 [ 54]: 137ecb0ff39d3409 -Block 0021 [ 55]: 7ca34f346ffe4eb0 -Block 0021 [ 56]: b31d811d53e9fd89 -Block 0021 [ 57]: 33e9ee66616eefa5 -Block 0021 [ 58]: 036a3a60147520c5 -Block 0021 [ 59]: e5e6b915e03d02e1 -Block 0021 [ 60]: f2b85ab4bee057cc -Block 0021 [ 61]: f020edf1cfa20c62 -Block 0021 [ 62]: 560116c2cd4749a5 -Block 0021 [ 63]: fee85e86bbcec42d -Block 0021 [ 64]: fd24d86bfbf48a4b -Block 0021 [ 65]: daa1ca90040ea1ec -Block 0021 [ 66]: c113e6c001bda230 -Block 0021 [ 67]: 06c9e40ff5c0514f -Block 0021 [ 68]: ad6e82c68f64cf0c -Block 0021 [ 69]: a92062c5f8ecf9a3 -Block 0021 [ 70]: f446d44ccd988cdb -Block 0021 [ 71]: 2665503730a90b3f -Block 0021 [ 72]: 0d5b91cb0378ac0a -Block 0021 [ 73]: 9e37095869eb5713 -Block 0021 [ 74]: 2321ce41dd8da5a3 -Block 0021 [ 75]: 64614f3ce5ebaf1e -Block 0021 [ 76]: 99b437d318b3fd65 -Block 0021 [ 77]: 8da370c7b0a99bd1 -Block 0021 [ 78]: b88f5071e7b1ff22 -Block 0021 [ 79]: e385367b7446a5d8 -Block 0021 [ 80]: 7fd00d9988d6298b -Block 0021 [ 81]: 6dacadf00512c4c7 -Block 0021 [ 82]: a79fafc4c62f47e0 -Block 0021 [ 83]: bec3c28b98e09481 -Block 0021 [ 84]: 59658b57a179c94d -Block 0021 [ 85]: 9b5655e529c865bb -Block 0021 [ 86]: 446468a9aef42973 -Block 0021 [ 87]: 8b17d0792b62b959 -Block 0021 [ 88]: 946928416f827f66 -Block 0021 [ 89]: bf1e4e1cf11e4d13 -Block 0021 [ 90]: ed26651a9cc1cf4c -Block 0021 [ 91]: 1999ecb0492dbf6d -Block 0021 [ 92]: 5ae6127f4aff6568 -Block 0021 [ 93]: d44ed717054f9942 -Block 0021 [ 94]: 5437b56726a956ed -Block 0021 [ 95]: 6f6befe7e5b92675 -Block 0021 [ 96]: 6417eb27b53301bb -Block 0021 [ 97]: 620f7d9b1e2c90b6 -Block 0021 [ 98]: ebb1aaf241321a4e -Block 0021 [ 99]: 5afdb7a0b59befa7 -Block 0021 [100]: fae040ea8eee04f4 -Block 0021 [101]: 88d12acc0b99fece -Block 0021 [102]: b5e1e7175ac7fc22 -Block 0021 [103]: 4c7bd92ede0a3303 -Block 0021 [104]: 8c9e433bd43d540d -Block 0021 [105]: b41d516eba7eb06f -Block 0021 [106]: 2d7c6d31687048be -Block 0021 [107]: f3ed5c6303fe8930 -Block 0021 [108]: 63adb43e1eb1c2b0 -Block 0021 [109]: 0fd88f6d8c134194 -Block 0021 [110]: 96e5248b15869af1 -Block 0021 [111]: 2b2214a414b91922 -Block 0021 [112]: ec49cf29cd39bcb0 -Block 0021 [113]: 30a080de12274f79 -Block 0021 [114]: fdda4ce0c746632f -Block 0021 [115]: 95e428f16be30440 -Block 0021 [116]: 517bd14be65778c5 -Block 0021 [117]: 8047066c240bf71f -Block 0021 [118]: 76e99bbe489edc17 -Block 0021 [119]: e38bbfc1500917cd -Block 0021 [120]: 47b495ea51ddde99 -Block 0021 [121]: a7f465121e6866d6 -Block 0021 [122]: bcad55441d717cf4 -Block 0021 [123]: c01b4ccf3af42871 -Block 0021 [124]: a2fac53753be25d4 -Block 0021 [125]: ecf463167e33c65f -Block 0021 [126]: b59ec66d36b26358 -Block 0021 [127]: 3c69b335560021a7 -Block 0022 [ 0]: ab16b3a56c5075d9 -Block 0022 [ 1]: bf6e87316986ed91 -Block 0022 [ 2]: 3706dc9baa34f072 -Block 0022 [ 3]: d000956d44f7d1a1 -Block 0022 [ 4]: b9042077b3ba870e -Block 0022 [ 5]: 23f4954484f46834 -Block 0022 [ 6]: 7f00ea023bd08390 -Block 0022 [ 7]: 6d36d08a66d30fc7 -Block 0022 [ 8]: 90b1d92efe744358 -Block 0022 [ 9]: 43148be233395484 -Block 0022 [ 10]: 529f606afdabaea5 -Block 0022 [ 11]: 0840d08dfdc8cf40 -Block 0022 [ 12]: d2d110baa6ed66df -Block 0022 [ 13]: d94d5feceb8b6693 -Block 0022 [ 14]: 9d5f3588931f8d56 -Block 0022 [ 15]: 5909bb597b2548db -Block 0022 [ 16]: 4ef8519c35d03e3b -Block 0022 [ 17]: 3c963b75c7aa5cfb -Block 0022 [ 18]: 262fb246be170e59 -Block 0022 [ 19]: d440145519b7ad26 -Block 0022 [ 20]: 73ab50c82577acdd -Block 0022 [ 21]: a898aeed8a2d8301 -Block 0022 [ 22]: 0f12e4d69e8ff588 -Block 0022 [ 23]: 42de1e1610bf5ac0 -Block 0022 [ 24]: c9d77bd96186c22b -Block 0022 [ 25]: 48224c45c85d1a7e -Block 0022 [ 26]: eb605118f55496a7 -Block 0022 [ 27]: eae4f2d623f09f0c -Block 0022 [ 28]: 1bc8533a22ade72e -Block 0022 [ 29]: c5d5d068055194ba -Block 0022 [ 30]: dc8091ca4b23c5c9 -Block 0022 [ 31]: 4f6ab36707a798d1 -Block 0022 [ 32]: f5661f644f082a87 -Block 0022 [ 33]: 89906ef40c28c45c -Block 0022 [ 34]: 8245084f1e623ca3 -Block 0022 [ 35]: eb80dabbf146dfd1 -Block 0022 [ 36]: 21597abb85a09601 -Block 0022 [ 37]: 911883ff4eaad8ce -Block 0022 [ 38]: 37a30fcfd4e7e78e -Block 0022 [ 39]: a0e80cdfa662c635 -Block 0022 [ 40]: 8eab544a96438380 -Block 0022 [ 41]: 82c38c4f95d1ae3f -Block 0022 [ 42]: 29fd6fd0a6903703 -Block 0022 [ 43]: b6a8e2cda01ed83e -Block 0022 [ 44]: f90b7e33a0165041 -Block 0022 [ 45]: 977f2a7ac3eaf97e -Block 0022 [ 46]: 1942327dddd81546 -Block 0022 [ 47]: 517c90126edcaaa0 -Block 0022 [ 48]: c5ffce11d9f5fd31 -Block 0022 [ 49]: e7bcbb02539969cf -Block 0022 [ 50]: a4657d205059500a -Block 0022 [ 51]: 61e75294e0c5a7dd -Block 0022 [ 52]: 4b2297b821bf9d6c -Block 0022 [ 53]: f5d35f75b3efe34f -Block 0022 [ 54]: 3069214b0c198625 -Block 0022 [ 55]: 58dc0964970a7436 -Block 0022 [ 56]: 5ab8e583fcf8cc8a -Block 0022 [ 57]: d3f90e125dc63769 -Block 0022 [ 58]: d99fdc3e92d27d41 -Block 0022 [ 59]: 59c8a73d0a38ef89 -Block 0022 [ 60]: 7cfee5d258168e40 -Block 0022 [ 61]: 7f9531f36c2b78d2 -Block 0022 [ 62]: 5fa407b6ae15296b -Block 0022 [ 63]: b52c77c541797d42 -Block 0022 [ 64]: 1ac5d4233901339e -Block 0022 [ 65]: b29e6f85131997a2 -Block 0022 [ 66]: 87147a9a6dc9db3c -Block 0022 [ 67]: 033f96b424f5af0d -Block 0022 [ 68]: ec33cf847ef40a18 -Block 0022 [ 69]: 0f8f314e8c3a0bec -Block 0022 [ 70]: d6c21ea4ba3358a0 -Block 0022 [ 71]: ac3d0f1c487d577b -Block 0022 [ 72]: 11937f11fc59a840 -Block 0022 [ 73]: 61674f505fd229ae -Block 0022 [ 74]: 5a00e6607ec78934 -Block 0022 [ 75]: e249c6cd3f887bff -Block 0022 [ 76]: 716deb4f18e87fba -Block 0022 [ 77]: 92dd5e6b87ae487d -Block 0022 [ 78]: d45ae78ffed12c55 -Block 0022 [ 79]: 2c5bfc277658f3a1 -Block 0022 [ 80]: db971b0168ea4745 -Block 0022 [ 81]: 46e39abd9f685214 -Block 0022 [ 82]: 93ee55707d51ac38 -Block 0022 [ 83]: 3764e134d7bc5e1e -Block 0022 [ 84]: c867ee52271ef46c -Block 0022 [ 85]: d41958c6c6cdd2fd -Block 0022 [ 86]: 21a4c738e6b32bbb -Block 0022 [ 87]: 9182f1362fbe103f -Block 0022 [ 88]: d4fc051a73c0ba4f -Block 0022 [ 89]: 4b3b78d41e673f1b -Block 0022 [ 90]: de8859d43a77db34 -Block 0022 [ 91]: 702f0530d93babe9 -Block 0022 [ 92]: b67f17c55e7f9629 -Block 0022 [ 93]: 04584cb783e39923 -Block 0022 [ 94]: fd138c6fabea3a81 -Block 0022 [ 95]: 43658bec8f80a41d -Block 0022 [ 96]: 0440da4de750eaab -Block 0022 [ 97]: 4b7702f3d6554710 -Block 0022 [ 98]: d68d5f3de84d37ca -Block 0022 [ 99]: 18ca44373c453767 -Block 0022 [100]: d1fdbbe79c392c87 -Block 0022 [101]: 9dae17d1f4740b9b -Block 0022 [102]: a9c52e3c1eb100ad -Block 0022 [103]: 8bd7475cfb22956c -Block 0022 [104]: 85eb6b76a6d2a8c8 -Block 0022 [105]: 198bec106136c9ce -Block 0022 [106]: 9b81158c4c3d0e51 -Block 0022 [107]: 2022774adeafe355 -Block 0022 [108]: 7a1b3f58e921bfd0 -Block 0022 [109]: 906523ea688ebb1b -Block 0022 [110]: 74472376d97f71b8 -Block 0022 [111]: e2a6b16fe40d2a75 -Block 0022 [112]: 9abc505f14c1dd63 -Block 0022 [113]: d0fa9c766f6d104c -Block 0022 [114]: adefe0e0ae4bb777 -Block 0022 [115]: a5d379758af224e6 -Block 0022 [116]: dc29361b4c8ebc7d -Block 0022 [117]: 5c091ed940780a84 -Block 0022 [118]: 7ffc0e4038e28779 -Block 0022 [119]: 80b312993291f81e -Block 0022 [120]: 39608712b2445c46 -Block 0022 [121]: bf879dc1b80ae860 -Block 0022 [122]: 514c6ab3ff330561 -Block 0022 [123]: 55370d7c118dd1fb -Block 0022 [124]: 846f03da6bfa17f1 -Block 0022 [125]: 87948df888a4cbf2 -Block 0022 [126]: 89ccbff86501eb61 -Block 0022 [127]: 6aa3800ea4c30a6d -Block 0023 [ 0]: 556721f6dc987249 -Block 0023 [ 1]: 99b4dfec9c302f7d -Block 0023 [ 2]: 1117e2bb2476093b -Block 0023 [ 3]: 1b2f958fa1e0291a -Block 0023 [ 4]: d2ec858fef0236e7 -Block 0023 [ 5]: c3b8b8774e30fa01 -Block 0023 [ 6]: fec88aa56118cd0b -Block 0023 [ 7]: 7482e9a6e06d2726 -Block 0023 [ 8]: 803534fe2cf0f98e -Block 0023 [ 9]: ff6d8c8018ede5a7 -Block 0023 [ 10]: 87d7eff1d657f2ac -Block 0023 [ 11]: 819c06f8a94ddad7 -Block 0023 [ 12]: 6341df572ace94c6 -Block 0023 [ 13]: 2f45f9db86cf0797 -Block 0023 [ 14]: 6555d7ef0a6fa787 -Block 0023 [ 15]: 9db255c7658fe518 -Block 0023 [ 16]: b34faa5c72edf4ad -Block 0023 [ 17]: ba7bd4028c089f1a -Block 0023 [ 18]: 09602adb7e3c7b36 -Block 0023 [ 19]: 1209106421591752 -Block 0023 [ 20]: 5819306a403cd8e4 -Block 0023 [ 21]: 53197970bb5fa1f9 -Block 0023 [ 22]: 16e8bbc10bec7ef8 -Block 0023 [ 23]: 6b01c4dd49a87999 -Block 0023 [ 24]: 7495246fdc5193b5 -Block 0023 [ 25]: b3a8f9152786463b -Block 0023 [ 26]: 23c964909608bb59 -Block 0023 [ 27]: d48cb6d946414714 -Block 0023 [ 28]: 0bf19bb18fbe8fd4 -Block 0023 [ 29]: 776e3968ded52066 -Block 0023 [ 30]: cb51fe52d0717809 -Block 0023 [ 31]: 51a4f168ef8c6df2 -Block 0023 [ 32]: 828e73597ba1ffb4 -Block 0023 [ 33]: 775664a0a94d9a38 -Block 0023 [ 34]: aa8d077ca94bd294 -Block 0023 [ 35]: 0f8d196531249306 -Block 0023 [ 36]: 18bdafa6230e7c58 -Block 0023 [ 37]: 828062267b0d6fd3 -Block 0023 [ 38]: a3bdf8db2fe6cf2f -Block 0023 [ 39]: b0733ce01f2b0704 -Block 0023 [ 40]: d1c49348c163ffd0 -Block 0023 [ 41]: 9ceaa71c0412483e -Block 0023 [ 42]: 270728a894443699 -Block 0023 [ 43]: 31e0b34e8a211d4b -Block 0023 [ 44]: 065f68d65aa2ce32 -Block 0023 [ 45]: b3a0f4c50ba17262 -Block 0023 [ 46]: 6e4a884360dc6018 -Block 0023 [ 47]: 0229bb9b7f74e2e3 -Block 0023 [ 48]: a0e2d3bb2aa6f992 -Block 0023 [ 49]: 51816f912c836575 -Block 0023 [ 50]: e0b825bbc0d3e078 -Block 0023 [ 51]: 4c479c9963e79cf4 -Block 0023 [ 52]: 73dca92a9169307e -Block 0023 [ 53]: b429a5f8c46bd932 -Block 0023 [ 54]: b0b7fb8ef64c1b04 -Block 0023 [ 55]: 8169f07c085d8b2a -Block 0023 [ 56]: 0e8394c61e8979cc -Block 0023 [ 57]: 09692e621ebe9fbe -Block 0023 [ 58]: 307da2a38a26abf7 -Block 0023 [ 59]: db57d2225640b395 -Block 0023 [ 60]: 764b4447978991f1 -Block 0023 [ 61]: 6ff6a890fce95daf -Block 0023 [ 62]: c3e624ade7d96d9c -Block 0023 [ 63]: 2b5053bfb7ef35c8 -Block 0023 [ 64]: 2e8a62d6bb119e7b -Block 0023 [ 65]: 8cac526cc4a7a645 -Block 0023 [ 66]: 8fbb0601586486ce -Block 0023 [ 67]: 8044ffb0401b4041 -Block 0023 [ 68]: 8798e3677b488295 -Block 0023 [ 69]: 7433a887af3dd05a -Block 0023 [ 70]: 3a7189e6fb1014a1 -Block 0023 [ 71]: 32d00c4bbcaac4a9 -Block 0023 [ 72]: a77359f3d6c159b6 -Block 0023 [ 73]: 74f343d44052937d -Block 0023 [ 74]: 0c66f82b096e4a8c -Block 0023 [ 75]: 986205cf0d8ddfd5 -Block 0023 [ 76]: 4505e8e3ff1955c7 -Block 0023 [ 77]: bdfdb8e10137d89c -Block 0023 [ 78]: 3cfab16a6e505749 -Block 0023 [ 79]: 0c9e89e21030cda5 -Block 0023 [ 80]: 9b39ebca2638fa57 -Block 0023 [ 81]: a39a852d538cc65a -Block 0023 [ 82]: 417ac20a52b358c5 -Block 0023 [ 83]: 57bb86093eb9779e -Block 0023 [ 84]: 6104a01c0efb313a -Block 0023 [ 85]: 9a76e197a2daaaa4 -Block 0023 [ 86]: 0ba50f40599759b0 -Block 0023 [ 87]: 82d2f09e12c993e1 -Block 0023 [ 88]: 8213a0d0c050aaf5 -Block 0023 [ 89]: 7850e59315f640ec -Block 0023 [ 90]: 742b954ff07ec512 -Block 0023 [ 91]: 1cc7b7a76ddb5908 -Block 0023 [ 92]: 90175fb8e3f50c78 -Block 0023 [ 93]: a9bb387ad0caedfb -Block 0023 [ 94]: 687bb45cc5c9cc4c -Block 0023 [ 95]: d452dfa463e6cb6a -Block 0023 [ 96]: 77f1cc9138028d48 -Block 0023 [ 97]: f8d09a3ea40682a7 -Block 0023 [ 98]: a5a831cab641262d -Block 0023 [ 99]: 131636b6651e56f4 -Block 0023 [100]: 540331e6bd311bc3 -Block 0023 [101]: 29392009473107a3 -Block 0023 [102]: 9171ce46a6d71344 -Block 0023 [103]: ece3a2c971e5d580 -Block 0023 [104]: 7a90cdaa7553b5a8 -Block 0023 [105]: ef302aa8ca894274 -Block 0023 [106]: 9f92c44cbc91bc72 -Block 0023 [107]: 0e85df7e88220c16 -Block 0023 [108]: b59f9d637a0f1de4 -Block 0023 [109]: 365dedbc87eb2698 -Block 0023 [110]: 14b1e9d4bd03ed33 -Block 0023 [111]: 6894880ded846900 -Block 0023 [112]: 4019b80ea900fce9 -Block 0023 [113]: bb9eaa2c25a5e283 -Block 0023 [114]: b02f512376bfd802 -Block 0023 [115]: f44a5e0fd7134db4 -Block 0023 [116]: 5385593b6cf69c33 -Block 0023 [117]: 651d8a75b4f5d8cd -Block 0023 [118]: d9fa29584a6b0b21 -Block 0023 [119]: b2c2fca9073c3882 -Block 0023 [120]: 810511ff5d9e8807 -Block 0023 [121]: f160852a94f55308 -Block 0023 [122]: 2f741d93d26befbc -Block 0023 [123]: 0504623ef78331ec -Block 0023 [124]: 73feb604a4e6f0f5 -Block 0023 [125]: 4ad832c77a9891bd -Block 0023 [126]: b5e45edc4e847c4b -Block 0023 [127]: 6ffd61b212eb8ea2 -Block 0024 [ 0]: d88284f50713c31b -Block 0024 [ 1]: 8c87762439effae4 -Block 0024 [ 2]: 627d88554d9c676c -Block 0024 [ 3]: 456a544d129f6a19 -Block 0024 [ 4]: 1bba14a4866d3eaa -Block 0024 [ 5]: 8b95d511ff8e5399 -Block 0024 [ 6]: 5d2f3d694b9f103a -Block 0024 [ 7]: c616b5caf714f117 -Block 0024 [ 8]: 78500c063a98f09a -Block 0024 [ 9]: f8d930b864f14db7 -Block 0024 [ 10]: 1fd61ead5acebd80 -Block 0024 [ 11]: b4528739e5183157 -Block 0024 [ 12]: 89e5791f65963437 -Block 0024 [ 13]: 68f5cc6a53562ec0 -Block 0024 [ 14]: 3871f32fdaa3b946 -Block 0024 [ 15]: 75344f511527fedf -Block 0024 [ 16]: 4fe8800adf2466be -Block 0024 [ 17]: 9ab4030c1a3aaddd -Block 0024 [ 18]: 8339ff862f1ab707 -Block 0024 [ 19]: 5c6597e27d49f75b -Block 0024 [ 20]: 1a14e616a338206c -Block 0024 [ 21]: 31eed02a0647075a -Block 0024 [ 22]: 8c7a00d30e7d31e9 -Block 0024 [ 23]: acd25fe6051b5363 -Block 0024 [ 24]: da738b6d3d6e875a -Block 0024 [ 25]: f24fca741d0f8de3 -Block 0024 [ 26]: 12ca39f6d6087516 -Block 0024 [ 27]: e40695661644eeda -Block 0024 [ 28]: 4c5b86c9fab6199c -Block 0024 [ 29]: 6c24d91cbd243752 -Block 0024 [ 30]: a6ba8fb90af10a20 -Block 0024 [ 31]: 298bbf7d91bd6df3 -Block 0024 [ 32]: cda34cf012e25d4b -Block 0024 [ 33]: aee2c946a2f594a0 -Block 0024 [ 34]: 8cb96f7da1a78ef2 -Block 0024 [ 35]: 0fc18547c433ba29 -Block 0024 [ 36]: 6f03257b4a4aa101 -Block 0024 [ 37]: 9f4a1bf963efe77f -Block 0024 [ 38]: 24eccb6c5c64d4a9 -Block 0024 [ 39]: 5d3c5a06a53c2cf7 -Block 0024 [ 40]: 01d604366f6dc1e0 -Block 0024 [ 41]: a8e0dba29a99108e -Block 0024 [ 42]: 1c47a9a5f396ab45 -Block 0024 [ 43]: d45cbbfbb03fd673 -Block 0024 [ 44]: ddc29f83a08238ba -Block 0024 [ 45]: efb52fda37fd5483 -Block 0024 [ 46]: 2252e2ce16b35dd2 -Block 0024 [ 47]: 037fc7a6c0ff0c5a -Block 0024 [ 48]: f202db23b64e1eb6 -Block 0024 [ 49]: 743410480c25aff3 -Block 0024 [ 50]: 640a479a6f306adf -Block 0024 [ 51]: 958e2253a8914ede -Block 0024 [ 52]: 8b1e51392300b250 -Block 0024 [ 53]: a699253416b612d4 -Block 0024 [ 54]: c4e9097a571bdb24 -Block 0024 [ 55]: f7f1162a4fbc75ee -Block 0024 [ 56]: 1b6dd1fe292d9c22 -Block 0024 [ 57]: 796d46d2f71d4e77 -Block 0024 [ 58]: 893ded32ffb7ac70 -Block 0024 [ 59]: bb6dab308f4cee79 -Block 0024 [ 60]: 8b18e8740f27d639 -Block 0024 [ 61]: f644b8c3df7db7e2 -Block 0024 [ 62]: 35c04f8f8824a45b -Block 0024 [ 63]: bcd9215d9a18a39d -Block 0024 [ 64]: e80b5dfa5dfe2d2c -Block 0024 [ 65]: 47ca09e8916c744a -Block 0024 [ 66]: 527d58c882db4fe4 -Block 0024 [ 67]: 384654cce68a5a48 -Block 0024 [ 68]: 1e917bd09d5fc395 -Block 0024 [ 69]: f2eeb59a136c23c5 -Block 0024 [ 70]: d0062fa155adcbd3 -Block 0024 [ 71]: 650d4fd65c081681 -Block 0024 [ 72]: 77535a18a15e4f39 -Block 0024 [ 73]: 2a081a72b7522a15 -Block 0024 [ 74]: 9c64ed7680bc0ab6 -Block 0024 [ 75]: dfd06369f31d6630 -Block 0024 [ 76]: f669d8a8c9f0eb39 -Block 0024 [ 77]: c296a9c2a9485dbb -Block 0024 [ 78]: 6214d2f5ba58a315 -Block 0024 [ 79]: 5b653348723c129d -Block 0024 [ 80]: 9c48f59c76fcf934 -Block 0024 [ 81]: fd7498527f17d3ab -Block 0024 [ 82]: 7ae20772d38bf8d4 -Block 0024 [ 83]: ef647a626247193c -Block 0024 [ 84]: 4d317391d8df4450 -Block 0024 [ 85]: 12558123e175f980 -Block 0024 [ 86]: fac8e511cba42c82 -Block 0024 [ 87]: 8069fb7578f5f0cb -Block 0024 [ 88]: 31858de29f739b86 -Block 0024 [ 89]: c1e68b8f0eef3ca6 -Block 0024 [ 90]: 95bb9e89125dca10 -Block 0024 [ 91]: c5d1abd5a40b7cae -Block 0024 [ 92]: 94f17725613a0eef -Block 0024 [ 93]: ad34e36ea76bb481 -Block 0024 [ 94]: d07439a3ef48bff7 -Block 0024 [ 95]: 0a0c062abfc544f3 -Block 0024 [ 96]: 24f99b247f7b7e5a -Block 0024 [ 97]: ed27a580eaaf4ee5 -Block 0024 [ 98]: ebc61a0a4c093f87 -Block 0024 [ 99]: d08946d03ff1542a -Block 0024 [100]: 0befcf9d5f571522 -Block 0024 [101]: b5be7e66b886472c -Block 0024 [102]: 0271a6c1f348073b -Block 0024 [103]: 7f24ce4f67784d15 -Block 0024 [104]: bf7b10d70723ba6e -Block 0024 [105]: f00edf5c303e9b06 -Block 0024 [106]: 7a7ef27f4872669f -Block 0024 [107]: fffd0af0f5e95a97 -Block 0024 [108]: 7dac32c65cebd8ad -Block 0024 [109]: 611bdbe7f7ac37b6 -Block 0024 [110]: db3b333b27fb4ced -Block 0024 [111]: bb3cefc08d708545 -Block 0024 [112]: 1a17b3c9ba7fdf10 -Block 0024 [113]: 288dd53e76b91f62 -Block 0024 [114]: d2795c6696a76238 -Block 0024 [115]: 3eaf16374449b54f -Block 0024 [116]: 7ec146ee77bd917d -Block 0024 [117]: a9e40f4aa4a25eb7 -Block 0024 [118]: b2afd186798bcdd5 -Block 0024 [119]: 94815c56ceb4e679 -Block 0024 [120]: b4bc677bddd6448e -Block 0024 [121]: 01cd724d3300bbd0 -Block 0024 [122]: 8343503e5e98eb96 -Block 0024 [123]: 6a7a4414b7ed645e -Block 0024 [124]: 672bac9c0ae51d50 -Block 0024 [125]: 640075a4cfd1f8dc -Block 0024 [126]: 136974d993c474b3 -Block 0024 [127]: 7ce21aafca4593ee -Block 0025 [ 0]: 9b02443a6f899e73 -Block 0025 [ 1]: c1ee68a9c94f0899 -Block 0025 [ 2]: a6eaf7a6b38f45dc -Block 0025 [ 3]: 66069bc282e196e8 -Block 0025 [ 4]: 6d15c727711caa68 -Block 0025 [ 5]: 1a1efa2d260f3cde -Block 0025 [ 6]: eff2a14ce540dca8 -Block 0025 [ 7]: 94b2877a291c2fa9 -Block 0025 [ 8]: 4d57f7b951ec9e6c -Block 0025 [ 9]: 38643647a66bad56 -Block 0025 [ 10]: f4949cf4a451d471 -Block 0025 [ 11]: 38f9d32110a50ed8 -Block 0025 [ 12]: 00892238ac194fef -Block 0025 [ 13]: 5cc481f19bd1b7b2 -Block 0025 [ 14]: 89eae5086a6fb7df -Block 0025 [ 15]: d339c86fe08eaaf6 -Block 0025 [ 16]: d3615f7f03f60511 -Block 0025 [ 17]: 5beafb3a682787a5 -Block 0025 [ 18]: 7e690364d56c6f35 -Block 0025 [ 19]: 715ba6f8d92cfde8 -Block 0025 [ 20]: da002adec3a9aec0 -Block 0025 [ 21]: f7fd26727e3c39de -Block 0025 [ 22]: 5ce5effbabeb778b -Block 0025 [ 23]: 82488be85fa89f69 -Block 0025 [ 24]: ebf34f3cf31e872f -Block 0025 [ 25]: 904e3442eb91077d -Block 0025 [ 26]: 4ccb7af848995148 -Block 0025 [ 27]: 6674e0d65423b763 -Block 0025 [ 28]: 441ff96ad8206f58 -Block 0025 [ 29]: 94666bf2dfc0b99b -Block 0025 [ 30]: ed05edb80461172e -Block 0025 [ 31]: 48a4835d15f5dd8d -Block 0025 [ 32]: b7ba7f265b645ae8 -Block 0025 [ 33]: c28982cf0cc46f5f -Block 0025 [ 34]: 0047564c7e3a987b -Block 0025 [ 35]: 49c42f1ca2a0a3ee -Block 0025 [ 36]: 5fd7a85954ea8759 -Block 0025 [ 37]: d3a2e6ddb90e1819 -Block 0025 [ 38]: ca044a91edca1181 -Block 0025 [ 39]: 7befe3a3efd19c8c -Block 0025 [ 40]: 12e2593aa586a908 -Block 0025 [ 41]: ca3204fd0293daa7 -Block 0025 [ 42]: 6fffdd8f81c7ec5b -Block 0025 [ 43]: a5a9e710a5c35441 -Block 0025 [ 44]: 8fc140c3dd6a23b9 -Block 0025 [ 45]: 4dc101b965e2bf8b -Block 0025 [ 46]: bfe30265551dfb70 -Block 0025 [ 47]: 4325a4ab2bffde44 -Block 0025 [ 48]: 0873c9bb55796104 -Block 0025 [ 49]: 3d855f2ccb7886cf -Block 0025 [ 50]: a892ad2f13aa23fd -Block 0025 [ 51]: 7ec7f45b1c3a13a3 -Block 0025 [ 52]: 7933b1cf28b7e587 -Block 0025 [ 53]: fb261404744b4403 -Block 0025 [ 54]: 1ce9fbf19e0b05ed -Block 0025 [ 55]: 081e058ac89cf91b -Block 0025 [ 56]: 0f4c61900902f20e -Block 0025 [ 57]: 6e4e47d0a76c7b2f -Block 0025 [ 58]: 31dfad465737d2d6 -Block 0025 [ 59]: c4e565cd4db9cf80 -Block 0025 [ 60]: 0fc21868de584fed -Block 0025 [ 61]: cf4bc3bdde019366 -Block 0025 [ 62]: d4b6def2b28c6197 -Block 0025 [ 63]: 1e091aa94e9efee1 -Block 0025 [ 64]: 920ae1dfc602caa9 -Block 0025 [ 65]: b9e32b85330f06cf -Block 0025 [ 66]: 622903a2ba1f7401 -Block 0025 [ 67]: 376fc0c285b6e1d6 -Block 0025 [ 68]: 58262b60f7222c02 -Block 0025 [ 69]: 48963a834c84e786 -Block 0025 [ 70]: cbf03b6c03b3f0b2 -Block 0025 [ 71]: bffe850121f01632 -Block 0025 [ 72]: 74a2031f32512b24 -Block 0025 [ 73]: 4adcf0a16a0f52f3 -Block 0025 [ 74]: 657fbc2930fa5547 -Block 0025 [ 75]: 775a8a54e8a2b61c -Block 0025 [ 76]: 603cd60bf170030e -Block 0025 [ 77]: 601ec99f484a891f -Block 0025 [ 78]: b933410f3e524173 -Block 0025 [ 79]: d86f3e3c5a2ea17a -Block 0025 [ 80]: ca2303f8e28d86d4 -Block 0025 [ 81]: c94d7faa2359de02 -Block 0025 [ 82]: 6fe0c5ecd10dd8f7 -Block 0025 [ 83]: 132b13bc110fd6bb -Block 0025 [ 84]: 1396a58273222139 -Block 0025 [ 85]: b10ff9ffee965ea2 -Block 0025 [ 86]: 835e56180aec7730 -Block 0025 [ 87]: 7e845526c7c472b9 -Block 0025 [ 88]: cf559646d6e7acfe -Block 0025 [ 89]: 6da5fa01922bc97b -Block 0025 [ 90]: 8a7cecf7918a97f5 -Block 0025 [ 91]: 75c63598267982a4 -Block 0025 [ 92]: fb62647242501a21 -Block 0025 [ 93]: 053879ca2e32577c -Block 0025 [ 94]: 328874c4f6657677 -Block 0025 [ 95]: cd160a4827bac171 -Block 0025 [ 96]: 366fb60bdfd14ec8 -Block 0025 [ 97]: 53042bee2ee8eea9 -Block 0025 [ 98]: daab24de7ed4b56e -Block 0025 [ 99]: 618bbb25385e03e7 -Block 0025 [100]: be554b98dbfc2a9d -Block 0025 [101]: 4566911b80d8dc2c -Block 0025 [102]: 8b5305bdbcd6075b -Block 0025 [103]: 67133a756f6a4b94 -Block 0025 [104]: 8284f40064d78922 -Block 0025 [105]: 5cf6fd63cf1d566a -Block 0025 [106]: b0175f63f4ddde67 -Block 0025 [107]: d7fb740f72bbda6d -Block 0025 [108]: 3f826efe67b1be5f -Block 0025 [109]: f3dc52433918e9a7 -Block 0025 [110]: 5de0272794bbdc54 -Block 0025 [111]: 240198167e58db76 -Block 0025 [112]: ca61e16751058de5 -Block 0025 [113]: 69ed01fd9dfb4e30 -Block 0025 [114]: 23264aec15e29210 -Block 0025 [115]: 0ed5522a78def765 -Block 0025 [116]: da43bf7acbd3db76 -Block 0025 [117]: 1b08030a1e29657c -Block 0025 [118]: 4421fe09e2526c19 -Block 0025 [119]: c752a808ce58ef11 -Block 0025 [120]: a4a0ae7b4c27f551 -Block 0025 [121]: a9bd8741f2ce61bb -Block 0025 [122]: 6806af701aaaff8e -Block 0025 [123]: f51d43bad7d70d80 -Block 0025 [124]: b6ef49db4b4be794 -Block 0025 [125]: e36d78c39c512816 -Block 0025 [126]: cc32f44ae037a86b -Block 0025 [127]: 880fecf11ba54ced -Block 0026 [ 0]: 7ef468a64079cd9a -Block 0026 [ 1]: 8546dfe9d161c4bc -Block 0026 [ 2]: eebf928e3390334e -Block 0026 [ 3]: 7218cc9841e59f45 -Block 0026 [ 4]: 95d9e37c4b9a4f4d -Block 0026 [ 5]: 276db3f95e1261bf -Block 0026 [ 6]: a97405ae99bfaab7 -Block 0026 [ 7]: 58d5a4bab4709e48 -Block 0026 [ 8]: 7d53c7ee5ec47ccb -Block 0026 [ 9]: bd8064b37e9fcd44 -Block 0026 [ 10]: 838bda546d531773 -Block 0026 [ 11]: fe3e588ecb36d23d -Block 0026 [ 12]: 2bd509e8359fb68c -Block 0026 [ 13]: 21e808c5ccbbb67d -Block 0026 [ 14]: c8c63b5118c5b7bc -Block 0026 [ 15]: 5aa30e29e87723ed -Block 0026 [ 16]: 9bee04350c6ac26b -Block 0026 [ 17]: fd5f59a6868ee80a -Block 0026 [ 18]: d03cd60f128a4d38 -Block 0026 [ 19]: 319edf5ae1fd16c3 -Block 0026 [ 20]: 55fae0ac08942a8c -Block 0026 [ 21]: 48efd5deba981eda -Block 0026 [ 22]: 4a9a42f6929229b4 -Block 0026 [ 23]: 6e5250d853603705 -Block 0026 [ 24]: 470392f63cf8c80b -Block 0026 [ 25]: af637923901c26d7 -Block 0026 [ 26]: e0357745a3c135d9 -Block 0026 [ 27]: 69a1a5a1594c5498 -Block 0026 [ 28]: 8b33325678af02cf -Block 0026 [ 29]: df2c0c4935f133fb -Block 0026 [ 30]: 41517c2801176075 -Block 0026 [ 31]: b91c2a723d9c6a4f -Block 0026 [ 32]: c8f49391d970a150 -Block 0026 [ 33]: 611642a25e792a1f -Block 0026 [ 34]: 93551770566de5ff -Block 0026 [ 35]: 05c6a42cf2ae5314 -Block 0026 [ 36]: c87777b796c9bc1b -Block 0026 [ 37]: 6e4c8c8598220e5c -Block 0026 [ 38]: 63f141c6a0d2312d -Block 0026 [ 39]: 45e19d756e512b56 -Block 0026 [ 40]: 2b34021cd96cc4f4 -Block 0026 [ 41]: e3d41f9435cbab53 -Block 0026 [ 42]: 82bff43da2662c43 -Block 0026 [ 43]: 5fbf81d0f198a14d -Block 0026 [ 44]: 0719beae98c62ff9 -Block 0026 [ 45]: 3cf8075583d96a30 -Block 0026 [ 46]: 5011d98a15533b7e -Block 0026 [ 47]: 9bc8ea4f4c71754e -Block 0026 [ 48]: 6ea994994cc966d1 -Block 0026 [ 49]: cd5b3d21e82a4b3e -Block 0026 [ 50]: a82cc5d874e19644 -Block 0026 [ 51]: 75225bcee41db2c8 -Block 0026 [ 52]: 6f91ce2ee312bc16 -Block 0026 [ 53]: 8e3a411f853d1ee8 -Block 0026 [ 54]: 6e20aa263bb03ddf -Block 0026 [ 55]: 2bc22c49f82ac92a -Block 0026 [ 56]: 6834393a3a72cb2d -Block 0026 [ 57]: 2c15e7ee39881b9b -Block 0026 [ 58]: 3b680656e204c6f8 -Block 0026 [ 59]: 0db101ef83bc6e1d -Block 0026 [ 60]: 4ef271dcf28d5ad7 -Block 0026 [ 61]: b25d0a8e922b17cd -Block 0026 [ 62]: c029827e59818eed -Block 0026 [ 63]: 01c3c5fa5b1910a0 -Block 0026 [ 64]: 7e2acaf23c628008 -Block 0026 [ 65]: 3966da46acdbf674 -Block 0026 [ 66]: 6c546372f285eb81 -Block 0026 [ 67]: 4c64673f1bd15733 -Block 0026 [ 68]: ddc0115b4f88d8b2 -Block 0026 [ 69]: 6699aee29d277d58 -Block 0026 [ 70]: 7060e5e8708be4a6 -Block 0026 [ 71]: b4e995b146fbf8e9 -Block 0026 [ 72]: 6ca7a550c9676696 -Block 0026 [ 73]: c8aaae0e7ae2e6ec -Block 0026 [ 74]: de456377963d8cf0 -Block 0026 [ 75]: 8fc337a19a8f1ac8 -Block 0026 [ 76]: 3d2dfe4e4df1d79c -Block 0026 [ 77]: eda051c4a2c7b70a -Block 0026 [ 78]: 57cbaf017e6723ab -Block 0026 [ 79]: b049d3e6d213512d -Block 0026 [ 80]: 2c8412eaa5c44735 -Block 0026 [ 81]: 827939a1f4a276e8 -Block 0026 [ 82]: 1ae471fd346f7a74 -Block 0026 [ 83]: dfd457440025ce20 -Block 0026 [ 84]: 3a85730d2e41a58b -Block 0026 [ 85]: f31fb93979c8085f -Block 0026 [ 86]: 94b2247bf9bbc38a -Block 0026 [ 87]: 57e6e4d2fb9ae750 -Block 0026 [ 88]: 29f72e206e450dea -Block 0026 [ 89]: 98126e68984fba49 -Block 0026 [ 90]: 54908e7e85c5d297 -Block 0026 [ 91]: 0d904ba583bf36c7 -Block 0026 [ 92]: 3186f67cde1b92eb -Block 0026 [ 93]: 9546a09b767f715d -Block 0026 [ 94]: ed2ab1b74f1f424f -Block 0026 [ 95]: 9d9121f5252a10d5 -Block 0026 [ 96]: 8b6c6cda6565b693 -Block 0026 [ 97]: 6a8e539240a22900 -Block 0026 [ 98]: 40b4f95b2a231d63 -Block 0026 [ 99]: 6293633c33154160 -Block 0026 [100]: 96b28f631411950e -Block 0026 [101]: 67fe40c1aa95a7a1 -Block 0026 [102]: 37d54121b4d85920 -Block 0026 [103]: 75b5cbd8b8660c06 -Block 0026 [104]: 24ebb2de04d1114b -Block 0026 [105]: 5fc419f35e7ce336 -Block 0026 [106]: d4afdb18dca824cf -Block 0026 [107]: 293f5840856b1ec9 -Block 0026 [108]: f232d1b7074a32b8 -Block 0026 [109]: 6f1fc4541b484666 -Block 0026 [110]: 8d148a83d4e93398 -Block 0026 [111]: d8c832cb07658c49 -Block 0026 [112]: 6ad0e8f6d9daa36e -Block 0026 [113]: dda24c063ae01145 -Block 0026 [114]: 3bde319d36725fbc -Block 0026 [115]: f3b9a9454c05da6e -Block 0026 [116]: 06e186ddc78cf92d -Block 0026 [117]: 2a596ae91800204d -Block 0026 [118]: 212c7c706f943811 -Block 0026 [119]: ae7db514d3b24213 -Block 0026 [120]: 672e25c5cef9deb8 -Block 0026 [121]: 19d761c0b6076ad3 -Block 0026 [122]: be9b211c5366c41e -Block 0026 [123]: 0deda395bd9a27d4 -Block 0026 [124]: e791c020717c6e02 -Block 0026 [125]: d7f77e53b85a47ff -Block 0026 [126]: 6e33712b6beac4ac -Block 0026 [127]: a532ad317ce50370 -Block 0027 [ 0]: 9fa1c53b690e5115 -Block 0027 [ 1]: 8b37cc2741764653 -Block 0027 [ 2]: e8c49cf23c0f8cfa -Block 0027 [ 3]: 2bb24b419bd5e104 -Block 0027 [ 4]: 89fffe467a5cfc5e -Block 0027 [ 5]: 60fd2c56d6210a00 -Block 0027 [ 6]: dbfac4f4146bb1d4 -Block 0027 [ 7]: ac59d69f4bd2f4b3 -Block 0027 [ 8]: d49097043be118e3 -Block 0027 [ 9]: 25a7ae779e708584 -Block 0027 [ 10]: a53eddfb92e77aeb -Block 0027 [ 11]: bef96fb2ccdb40ad -Block 0027 [ 12]: f745b82dffd9f4ff -Block 0027 [ 13]: 30e1c89daa429f25 -Block 0027 [ 14]: d7a3c4a8a2adfe8f -Block 0027 [ 15]: 5caaeea3a87c46c4 -Block 0027 [ 16]: 7849920c43db9b8f -Block 0027 [ 17]: 7330761405e5eef6 -Block 0027 [ 18]: 3df683244cf7df08 -Block 0027 [ 19]: d876761a60146318 -Block 0027 [ 20]: 168b6e118598ef85 -Block 0027 [ 21]: 374310fa30d84885 -Block 0027 [ 22]: 100757baa01e6c74 -Block 0027 [ 23]: d542a23309d78ddb -Block 0027 [ 24]: 500e1ac576de3a31 -Block 0027 [ 25]: 68c6493eafc727d1 -Block 0027 [ 26]: 51c529a4cdaafd71 -Block 0027 [ 27]: 6c886eed1dcd2a9d -Block 0027 [ 28]: 76e816b102474317 -Block 0027 [ 29]: 5db645c2d8bbc3b5 -Block 0027 [ 30]: 528b633a10bff528 -Block 0027 [ 31]: 2eca05eeee7f445d -Block 0027 [ 32]: b90ff76fe52371b4 -Block 0027 [ 33]: 0da08131b4982cac -Block 0027 [ 34]: 82277c1a16645af4 -Block 0027 [ 35]: da2bc08daf4a5290 -Block 0027 [ 36]: a0832f040c393c7f -Block 0027 [ 37]: dccf4d0ce8f6ecd4 -Block 0027 [ 38]: db23ff4aa8381bea -Block 0027 [ 39]: 61bf2705ff3119f6 -Block 0027 [ 40]: 76f344f53ed13981 -Block 0027 [ 41]: eb01f42010398423 -Block 0027 [ 42]: 43a19e52956f565d -Block 0027 [ 43]: addbba697b6aafd4 -Block 0027 [ 44]: 96fb2ff3add663ce -Block 0027 [ 45]: 5641ffd5d86e93fc -Block 0027 [ 46]: 6fd4691920b273b4 -Block 0027 [ 47]: b81e5f93eca99d62 -Block 0027 [ 48]: 8d093429f1ff1d82 -Block 0027 [ 49]: aea6e5fbfcc25a52 -Block 0027 [ 50]: 62e1ebe136fa8dba -Block 0027 [ 51]: 15db85e69ba386cd -Block 0027 [ 52]: 527710ee9951122a -Block 0027 [ 53]: 0f091dfc4a9af619 -Block 0027 [ 54]: 3d84ef91adcdec8a -Block 0027 [ 55]: 343ebe2dd28417fe -Block 0027 [ 56]: 9be06f5b49a6f05e -Block 0027 [ 57]: f4b1e0dc0e81697e -Block 0027 [ 58]: 2c32e3ee4934a9c2 -Block 0027 [ 59]: c5abee7d81abe68a -Block 0027 [ 60]: aab7d4a83d0ced99 -Block 0027 [ 61]: d70d53f57205e491 -Block 0027 [ 62]: 543646a33d67ab52 -Block 0027 [ 63]: 9e7720bce3cb5286 -Block 0027 [ 64]: f1e849ce5c52f1ad -Block 0027 [ 65]: 8ab8eda5cd40c8fc -Block 0027 [ 66]: 52864bf8c065bbc5 -Block 0027 [ 67]: f6e11187c4bd5aa7 -Block 0027 [ 68]: bd39792abd351168 -Block 0027 [ 69]: ae6b7e3a6a100a79 -Block 0027 [ 70]: 713b081c7958b546 -Block 0027 [ 71]: e984cae7793fe035 -Block 0027 [ 72]: 1094841fa7eec293 -Block 0027 [ 73]: a49f3fed3d1697ff -Block 0027 [ 74]: 57b7a9aa5209c9f3 -Block 0027 [ 75]: 75dfa69fc876bdf5 -Block 0027 [ 76]: afd6ca990dc04546 -Block 0027 [ 77]: 650fe9377d9cebe4 -Block 0027 [ 78]: cc9cc3acdd5b8345 -Block 0027 [ 79]: 5b193656205729ff -Block 0027 [ 80]: 45e61b89a2e05f16 -Block 0027 [ 81]: a005d8298561714e -Block 0027 [ 82]: 1fa74ae4179734b2 -Block 0027 [ 83]: 2ee4f5fab9189036 -Block 0027 [ 84]: ef17041c685d0e40 -Block 0027 [ 85]: 5f92a508530ff0c0 -Block 0027 [ 86]: cfa7a375870e09e8 -Block 0027 [ 87]: 261f7ef8b9bfbff3 -Block 0027 [ 88]: cbe7e553a0cf2e7f -Block 0027 [ 89]: 39eb11ca144e77ca -Block 0027 [ 90]: de08863c98348c66 -Block 0027 [ 91]: 8fb79e25b74d0a9d -Block 0027 [ 92]: 7b589fc28e7e49f5 -Block 0027 [ 93]: 2b36a30651701013 -Block 0027 [ 94]: 33f3d35fac3e386a -Block 0027 [ 95]: 9b8232dd011c0cd9 -Block 0027 [ 96]: c222979853df7368 -Block 0027 [ 97]: a75437ef2e7ebee2 -Block 0027 [ 98]: ca7290f054ee32ff -Block 0027 [ 99]: f7f615bb41c13909 -Block 0027 [100]: 98a41dab04c916e3 -Block 0027 [101]: 56bd9abe4ffea529 -Block 0027 [102]: ab9e8c1838f9140a -Block 0027 [103]: 73b7e554d7085f0c -Block 0027 [104]: aa5bbfdc2d18403a -Block 0027 [105]: e951d7c31bbfda11 -Block 0027 [106]: 929bd0980cc9638b -Block 0027 [107]: 52a2f3b285fac8be -Block 0027 [108]: 59fce169b2718b88 -Block 0027 [109]: 156cb6fa586ac342 -Block 0027 [110]: 16318cd4bd24716e -Block 0027 [111]: 7ca17d055bcd7b2c -Block 0027 [112]: 32053bfc51617177 -Block 0027 [113]: 28beddc1cdd676e7 -Block 0027 [114]: b2255a813a0861e3 -Block 0027 [115]: 4757a1408edd8347 -Block 0027 [116]: 5c92919ddd014b15 -Block 0027 [117]: 7ff74e029790456d -Block 0027 [118]: a4c0c1e2e59ce89b -Block 0027 [119]: 7f9713ca32bc0ba5 -Block 0027 [120]: a614204dcc6463a9 -Block 0027 [121]: 0cb7f1d92565704e -Block 0027 [122]: 5a26f2a6a5d8d1f3 -Block 0027 [123]: 09e8fbb79f46d15a -Block 0027 [124]: 60cba24dbc7a69ea -Block 0027 [125]: ddae6302e17afaf7 -Block 0027 [126]: 8fae3a02a0cd58ae -Block 0027 [127]: 739eabc30024614d -Block 0028 [ 0]: 0e85cca41243c749 -Block 0028 [ 1]: 40ba0b7c7b17a399 -Block 0028 [ 2]: 65ac8f2a7be3503c -Block 0028 [ 3]: b87f91c2b1c410b9 -Block 0028 [ 4]: 054c671cdf78fed8 -Block 0028 [ 5]: 5d3ec01ba37df53b -Block 0028 [ 6]: a41996c0d74d1d4f -Block 0028 [ 7]: bf981d07080966b7 -Block 0028 [ 8]: fb38da158b87f305 -Block 0028 [ 9]: 5c144628680ea65f -Block 0028 [ 10]: 8155b6fea71b9ca6 -Block 0028 [ 11]: a7e86b495469fd06 -Block 0028 [ 12]: eab1fc3d6ef06c16 -Block 0028 [ 13]: ed27acee6714900c -Block 0028 [ 14]: ab257e11a32f3e2b -Block 0028 [ 15]: 77edcc29b66e91dc -Block 0028 [ 16]: 7817bf469d8cf51e -Block 0028 [ 17]: 29d5b4a8f4d782e3 -Block 0028 [ 18]: 8a7ecb0fe133bd77 -Block 0028 [ 19]: dfcd56d9f51ee53d -Block 0028 [ 20]: 1bf3d77568b1cb75 -Block 0028 [ 21]: c751f52caa4356a6 -Block 0028 [ 22]: 39a6b3286a5c30e8 -Block 0028 [ 23]: c1e0704b2b8456b1 -Block 0028 [ 24]: cb6e541ae789f116 -Block 0028 [ 25]: 7374b85accd6ec1a -Block 0028 [ 26]: f88601a3d9333dec -Block 0028 [ 27]: 5aa74417a8bbd5e7 -Block 0028 [ 28]: b7b24ec3a0179349 -Block 0028 [ 29]: b899ea108a55cb30 -Block 0028 [ 30]: cf36370deb66ab32 -Block 0028 [ 31]: c62d26777d0cf3c0 -Block 0028 [ 32]: a859b878ba83a08b -Block 0028 [ 33]: a87be8e682613211 -Block 0028 [ 34]: d01855cabfba05be -Block 0028 [ 35]: a6263d2dc62ce85f -Block 0028 [ 36]: dc69da3a993bcc2c -Block 0028 [ 37]: 83b472fba8ccfc63 -Block 0028 [ 38]: e0d64b25c699d08f -Block 0028 [ 39]: 584d5affcacb1e9e -Block 0028 [ 40]: b98d206a1f3544ea -Block 0028 [ 41]: 26b5ec7a7c297725 -Block 0028 [ 42]: cd96ab285713d99f -Block 0028 [ 43]: df492f93837f09f2 -Block 0028 [ 44]: cb3c9ff1fe66ada8 -Block 0028 [ 45]: bb006aedfa2ea6ad -Block 0028 [ 46]: e3939acaf8abcd32 -Block 0028 [ 47]: 4b14c3952070da49 -Block 0028 [ 48]: 574efbbefdf497ea -Block 0028 [ 49]: af01ce5b7378b06f -Block 0028 [ 50]: 20a9929b5bdf186a -Block 0028 [ 51]: ea42fe634d665702 -Block 0028 [ 52]: 6b0bd4f2912b8b3e -Block 0028 [ 53]: 814db8e14f32ae57 -Block 0028 [ 54]: e69ae15f95df680e -Block 0028 [ 55]: 425a977565c863f7 -Block 0028 [ 56]: 973c97da3ba71ff9 -Block 0028 [ 57]: d7143cb537a9f71d -Block 0028 [ 58]: 73439409660c5c38 -Block 0028 [ 59]: c8430dc386fc9d15 -Block 0028 [ 60]: 0c67cd6e6fff1e63 -Block 0028 [ 61]: 62c0256fde5856ff -Block 0028 [ 62]: 3e25b0c0db1e3416 -Block 0028 [ 63]: b2187c58176ae515 -Block 0028 [ 64]: 8dd7227f711ffd7e -Block 0028 [ 65]: fcd1182ce333eb1e -Block 0028 [ 66]: 1afd2879ab103888 -Block 0028 [ 67]: ea6db3a5935c5592 -Block 0028 [ 68]: 86f39e2e75bef366 -Block 0028 [ 69]: b1d9454de3de9e74 -Block 0028 [ 70]: 37b20202c244827b -Block 0028 [ 71]: 1ebe94e672421dcb -Block 0028 [ 72]: 92129c6d6bfbeef1 -Block 0028 [ 73]: a6caab1ac6da487b -Block 0028 [ 74]: 19d015236d62b791 -Block 0028 [ 75]: 275f059bdb96f81c -Block 0028 [ 76]: aa6fb609adb40425 -Block 0028 [ 77]: 46770ee193d5f0ee -Block 0028 [ 78]: 3013c7b5504eefc0 -Block 0028 [ 79]: 37ebc9d99ab31363 -Block 0028 [ 80]: 37d64d1d0b77f7e7 -Block 0028 [ 81]: baf4d2355c9e3f91 -Block 0028 [ 82]: 713c207bd98f5bad -Block 0028 [ 83]: 4adf2c66093519a0 -Block 0028 [ 84]: 7d90ba3ac0b79e34 -Block 0028 [ 85]: 960e9309c6ef6ff6 -Block 0028 [ 86]: 399f055a58788bdb -Block 0028 [ 87]: 8ee4b1a6799cd390 -Block 0028 [ 88]: 3099856d626a230c -Block 0028 [ 89]: c1fe40bb28b691f7 -Block 0028 [ 90]: afe7e4123bc59379 -Block 0028 [ 91]: b08b56a71ef1bc17 -Block 0028 [ 92]: e910f52504e7136e -Block 0028 [ 93]: fa26cfc79fb74284 -Block 0028 [ 94]: 553ba6b7d0429bfd -Block 0028 [ 95]: 340061b6aa853ae3 -Block 0028 [ 96]: 191cdde0fd8de140 -Block 0028 [ 97]: 6ddb0e9ffdd173c8 -Block 0028 [ 98]: 67d0dfba86c27796 -Block 0028 [ 99]: 94ec1e01b3bd8632 -Block 0028 [100]: 31867525f8bc8238 -Block 0028 [101]: 65e995ab9307b566 -Block 0028 [102]: 377b3b891df93943 -Block 0028 [103]: a3b9fdce60c4261d -Block 0028 [104]: f08bc6604b98f79d -Block 0028 [105]: baec2e81d8b364a4 -Block 0028 [106]: 02f2edac0f508601 -Block 0028 [107]: f82d55936f52ebf4 -Block 0028 [108]: 2fa3ef0957aec0f5 -Block 0028 [109]: b1f637bbedb476d8 -Block 0028 [110]: bb5dc2a1eb0e9f7b -Block 0028 [111]: 9e67d8c0f07623f6 -Block 0028 [112]: 65f009064ff0e9c3 -Block 0028 [113]: 5d08017b855e7be7 -Block 0028 [114]: 5d8eed96a64db23d -Block 0028 [115]: 3512927f50b1b1e2 -Block 0028 [116]: dc15de89063b4012 -Block 0028 [117]: c4679f41c6c56a6e -Block 0028 [118]: 0a4e0b7e365782bb -Block 0028 [119]: 9b7444a953c6d6ba -Block 0028 [120]: 64d1f446d97216fe -Block 0028 [121]: aae982e26bbd3da9 -Block 0028 [122]: ef1cd05ad517ed77 -Block 0028 [123]: 97a7dac0ddaf58dc -Block 0028 [124]: b241dd4508b65f10 -Block 0028 [125]: ca9aa32702f4ad94 -Block 0028 [126]: 0b5df4481d1655ac -Block 0028 [127]: 1f127ce283eb9aa0 -Block 0029 [ 0]: b28d5deaef96e66a -Block 0029 [ 1]: 60faf86916b45b57 -Block 0029 [ 2]: 4e5fa33acc5404c5 -Block 0029 [ 3]: 9fd6a17e93d035d6 -Block 0029 [ 4]: 0893d077e4b8d174 -Block 0029 [ 5]: f03e7f804936297f -Block 0029 [ 6]: cc76ddd3b1f33443 -Block 0029 [ 7]: ca571fde36d623c2 -Block 0029 [ 8]: 6c90fdc13ceaaffa -Block 0029 [ 9]: d9e61e9c12a5f434 -Block 0029 [ 10]: c1ad29dcbb355739 -Block 0029 [ 11]: 89c3d212b96b585a -Block 0029 [ 12]: edc5d46da39f3664 -Block 0029 [ 13]: 76f1b5a61c0123f7 -Block 0029 [ 14]: fe328e8203051cc3 -Block 0029 [ 15]: 9bd4e4ee7952ad46 -Block 0029 [ 16]: a1d2164a687d7afe -Block 0029 [ 17]: 71d22e2206efe720 -Block 0029 [ 18]: dd570188cb4768ac -Block 0029 [ 19]: 73e76f871a564857 -Block 0029 [ 20]: 19984cb80773d41a -Block 0029 [ 21]: 1e5a525f66c2bfab -Block 0029 [ 22]: 9eb9d711dc54bdfe -Block 0029 [ 23]: 80202120abb1f2af -Block 0029 [ 24]: 762aad6301f0f687 -Block 0029 [ 25]: 924a11ab5bdd8d6d -Block 0029 [ 26]: 71a2bc27939e981b -Block 0029 [ 27]: bf6cd48e38e6fecb -Block 0029 [ 28]: c33e0fa6f3853d62 -Block 0029 [ 29]: 9cec1adb998c40e7 -Block 0029 [ 30]: 456c0560470631cc -Block 0029 [ 31]: cbc4831ba9510433 -Block 0029 [ 32]: df115dc56383ef17 -Block 0029 [ 33]: 3ae2401e3b9d1071 -Block 0029 [ 34]: 529a3c7e240815cc -Block 0029 [ 35]: 60e469e9b79ecfec -Block 0029 [ 36]: 48978c13a0db4353 -Block 0029 [ 37]: 2807c4ccad614aba -Block 0029 [ 38]: 36bc5a395ea99a2d -Block 0029 [ 39]: 2f5eeb78c5a901a3 -Block 0029 [ 40]: b10fc4c58c21db64 -Block 0029 [ 41]: 976836b2e1e3046f -Block 0029 [ 42]: 648d34fcc495dfff -Block 0029 [ 43]: cf4f898d00641f63 -Block 0029 [ 44]: 768f15f98e84fb17 -Block 0029 [ 45]: 6e5a7e27aa0874ee -Block 0029 [ 46]: fc9b1390cb33f4fc -Block 0029 [ 47]: 8c916f3ee985266a -Block 0029 [ 48]: ac4f0564ad44f4ec -Block 0029 [ 49]: 098adc10cdeef1d4 -Block 0029 [ 50]: ffb0f1701437ffbc -Block 0029 [ 51]: a4ce31038dfcd250 -Block 0029 [ 52]: 10a1f6563a54453a -Block 0029 [ 53]: f17f021dc41171e2 -Block 0029 [ 54]: 6877dec2a510de4d -Block 0029 [ 55]: f035c7817b56646a -Block 0029 [ 56]: 8d2dc75ed87d1f09 -Block 0029 [ 57]: def747cce81ffedb -Block 0029 [ 58]: a404e5187e7c88e9 -Block 0029 [ 59]: c8a8f0f2eee0ab45 -Block 0029 [ 60]: 5177d3db538e7006 -Block 0029 [ 61]: 2033765493f54c07 -Block 0029 [ 62]: d25e03408762825c -Block 0029 [ 63]: bf358da4de74d44f -Block 0029 [ 64]: 7169d9bac3f6b089 -Block 0029 [ 65]: 34aa5592008cb63e -Block 0029 [ 66]: 648460c51b3eb8e2 -Block 0029 [ 67]: 745f4d631c28ed67 -Block 0029 [ 68]: 15b07807de3167ec -Block 0029 [ 69]: b271a3455f6ad429 -Block 0029 [ 70]: 8a4c7a688f53849b -Block 0029 [ 71]: d47b0059ca698b91 -Block 0029 [ 72]: 5401fcaa6e1613f5 -Block 0029 [ 73]: eab2ed41c82503ed -Block 0029 [ 74]: b651b03e13eb8116 -Block 0029 [ 75]: 22441c0d3152627f -Block 0029 [ 76]: 086b49b7fd79cd37 -Block 0029 [ 77]: 6a2072fd35ec9ffd -Block 0029 [ 78]: d60ad9b09b6f53a2 -Block 0029 [ 79]: bed980f12e3e9942 -Block 0029 [ 80]: a8d2311811115bd4 -Block 0029 [ 81]: 047607dbd328a4ab -Block 0029 [ 82]: 57929ac9e5d669ac -Block 0029 [ 83]: 17521cb6eebc4cbd -Block 0029 [ 84]: ec29c8b11f03b546 -Block 0029 [ 85]: 8c3207b69a2e03fd -Block 0029 [ 86]: b6f8deb6a899dd69 -Block 0029 [ 87]: 50eb7a89a30eb2a9 -Block 0029 [ 88]: 2f2eda5c8d005e89 -Block 0029 [ 89]: b925767aa40ed8d0 -Block 0029 [ 90]: c0b7aae715772ac5 -Block 0029 [ 91]: dccbd919a7913b20 -Block 0029 [ 92]: 1d0904985d927067 -Block 0029 [ 93]: ea17fad0c1205cf5 -Block 0029 [ 94]: c79c19bab0477b58 -Block 0029 [ 95]: e2f4b87c67079492 -Block 0029 [ 96]: 648f8e57ca950544 -Block 0029 [ 97]: 09a16d4452a5aeff -Block 0029 [ 98]: 1020c0d715864a87 -Block 0029 [ 99]: ef4571edec273ee3 -Block 0029 [100]: bbfc9532f778a70e -Block 0029 [101]: 764cf7bb9dd250e6 -Block 0029 [102]: fd2ee8be4998c8bf -Block 0029 [103]: 400a72a9e344c2fa -Block 0029 [104]: 90acd7a2f8016e3c -Block 0029 [105]: a1fd46e9f88ef794 -Block 0029 [106]: fbc375521db9ff27 -Block 0029 [107]: 426e56c2b8dfa489 -Block 0029 [108]: e501faec2ebe5e48 -Block 0029 [109]: 88d8cb1d2b938fb1 -Block 0029 [110]: 22481c28a857b844 -Block 0029 [111]: 0f48a0190e3998f8 -Block 0029 [112]: b987462fcbd0d42d -Block 0029 [113]: 92b894ed5ae61019 -Block 0029 [114]: 96fef58b74fd323e -Block 0029 [115]: 96384b5f636f7fb4 -Block 0029 [116]: 1fe75196ac057245 -Block 0029 [117]: 667a495e0fcf1af3 -Block 0029 [118]: 3d0b9fc737dc4f2f -Block 0029 [119]: b1395938051b5c3b -Block 0029 [120]: 3e8dcddd601ec5ef -Block 0029 [121]: cbba85b46d84cbca -Block 0029 [122]: ea62a35c8d28304e -Block 0029 [123]: ebedde4456cf597f -Block 0029 [124]: a333b258a27b5373 -Block 0029 [125]: 6f4f7c2c51ebbf33 -Block 0029 [126]: d542eff31f159567 -Block 0029 [127]: 6869d4daa5acd753 -Block 0030 [ 0]: b0e5888ede5c8dac -Block 0030 [ 1]: 2947e0c66206b871 -Block 0030 [ 2]: 931942ce42ad27d6 -Block 0030 [ 3]: 3dd35c71fa980316 -Block 0030 [ 4]: b549254e041de1f8 -Block 0030 [ 5]: 288a295329a1bdae -Block 0030 [ 6]: af2667951e3fce86 -Block 0030 [ 7]: fc7543071c09d556 -Block 0030 [ 8]: 4957f01ef9fe1ffb -Block 0030 [ 9]: be316c502ec520ed -Block 0030 [ 10]: ece84265d2ef9b97 -Block 0030 [ 11]: 4eaa0d6c6bad20de -Block 0030 [ 12]: 7ca1f307b296c8e8 -Block 0030 [ 13]: c4e32d348044f957 -Block 0030 [ 14]: 50697fda97ed01e5 -Block 0030 [ 15]: cd2a914e1a30208a -Block 0030 [ 16]: 3227da448a87316e -Block 0030 [ 17]: 8896e1c09e53ac5e -Block 0030 [ 18]: 9a02a17295caac6e -Block 0030 [ 19]: fe260353800fb2c5 -Block 0030 [ 20]: 98fe9a5abbee7323 -Block 0030 [ 21]: d2e465ad6ff6522a -Block 0030 [ 22]: dc1ec4681a531d77 -Block 0030 [ 23]: a9be825083445307 -Block 0030 [ 24]: 20a55e7ef381eaad -Block 0030 [ 25]: 9329bb7819768457 -Block 0030 [ 26]: 0f244df63d40188f -Block 0030 [ 27]: b3dd7873d937c70c -Block 0030 [ 28]: af9f93785f756d37 -Block 0030 [ 29]: c797db32266d8ce2 -Block 0030 [ 30]: 35cf4b324e67541b -Block 0030 [ 31]: 01844a32e3bfd33d -Block 0030 [ 32]: fd342870363d3422 -Block 0030 [ 33]: 8c7dd1a49645c4a3 -Block 0030 [ 34]: 24a8f8142ad33503 -Block 0030 [ 35]: e2ae44a3ae5e7af6 -Block 0030 [ 36]: 8028ac5f745267a7 -Block 0030 [ 37]: b690a9a4bc11258d -Block 0030 [ 38]: 2ff9c51288b1e54f -Block 0030 [ 39]: c65ab253f9eddfb2 -Block 0030 [ 40]: ae808cc2f3522ea8 -Block 0030 [ 41]: b8523a531b8ee3de -Block 0030 [ 42]: eb10ca13497f0a14 -Block 0030 [ 43]: 0234eb8439b05aa1 -Block 0030 [ 44]: 99ae2d652ab5f6f7 -Block 0030 [ 45]: ee86a5751b6be154 -Block 0030 [ 46]: b317c57e22d2fd04 -Block 0030 [ 47]: 8e525bd89823545e -Block 0030 [ 48]: 6db14c7cce51c804 -Block 0030 [ 49]: e59635843f833bbc -Block 0030 [ 50]: 408d78e00bd38918 -Block 0030 [ 51]: 332152358dcd8d8b -Block 0030 [ 52]: 2e4f4081eef49dbb -Block 0030 [ 53]: fc17367edefa01f4 -Block 0030 [ 54]: 8e88915176024a3e -Block 0030 [ 55]: 6ae1773750423a1a -Block 0030 [ 56]: 049e6661027076f1 -Block 0030 [ 57]: da464aa051508136 -Block 0030 [ 58]: 668a19912111ba4b -Block 0030 [ 59]: 4fc0f8758e6b072b -Block 0030 [ 60]: 9249479ec4f9a25b -Block 0030 [ 61]: e1b761f5f33f625a -Block 0030 [ 62]: 66a54f4afac4195f -Block 0030 [ 63]: 36f04e02d4f3c336 -Block 0030 [ 64]: 1a322be91f026c16 -Block 0030 [ 65]: ecb88344974e5267 -Block 0030 [ 66]: 287435939e643bfd -Block 0030 [ 67]: e58ee2cc81e2327b -Block 0030 [ 68]: 4775f9b50e042d9c -Block 0030 [ 69]: b3599c38d982a55f -Block 0030 [ 70]: 8d0a150207232f9c -Block 0030 [ 71]: 586c4528d0d00293 -Block 0030 [ 72]: 3d913208cc402a16 -Block 0030 [ 73]: 9aae0a4db183400b -Block 0030 [ 74]: 3fce4b4358d6f960 -Block 0030 [ 75]: e2c34cae7121c6fa -Block 0030 [ 76]: fb6066a5eec05661 -Block 0030 [ 77]: 19e3f805f7f395b3 -Block 0030 [ 78]: ea57f581bb90bd1e -Block 0030 [ 79]: 4403ddb3d5d88d54 -Block 0030 [ 80]: 9ec5620c2650cada -Block 0030 [ 81]: e187151963499d27 -Block 0030 [ 82]: e1e490016d3e7a90 -Block 0030 [ 83]: 47dba15fb3114a6a -Block 0030 [ 84]: 00e6713e3524748c -Block 0030 [ 85]: 83830560126cdc8d -Block 0030 [ 86]: 8b9795d20eba6712 -Block 0030 [ 87]: 1f8f0e4cabdf4a19 -Block 0030 [ 88]: d5dbaee140cef589 -Block 0030 [ 89]: 592578e759114087 -Block 0030 [ 90]: eccc40aba3284be3 -Block 0030 [ 91]: 4b02c4c91e5ed750 -Block 0030 [ 92]: d6620771f12fdb1d -Block 0030 [ 93]: f1bd112af7f6a8e8 -Block 0030 [ 94]: f47bfff0211edb2f -Block 0030 [ 95]: e131d353a0967967 -Block 0030 [ 96]: 65aed7d87586ba45 -Block 0030 [ 97]: f15197b40f0b7b6d -Block 0030 [ 98]: 54e06f25fe4ee906 -Block 0030 [ 99]: 34b01354129382ec -Block 0030 [100]: c7f6988356e5d16e -Block 0030 [101]: cd5f18759d23da4c -Block 0030 [102]: a53a9b98e51aa5d7 -Block 0030 [103]: 9dcaaa20febf21d0 -Block 0030 [104]: 15d188f2c06e0fdd -Block 0030 [105]: 3df0c897dd56961f -Block 0030 [106]: 214e5774a75128c2 -Block 0030 [107]: 1f3d964be08e22c9 -Block 0030 [108]: 7e2da6a44beeba29 -Block 0030 [109]: 794b8f5662cd37fc -Block 0030 [110]: 87e1930746ed7aba -Block 0030 [111]: 63b38bc439afc3f8 -Block 0030 [112]: a4974dbb47bd4ddf -Block 0030 [113]: d8c3107a98637538 -Block 0030 [114]: e7bf1c42db1a76d9 -Block 0030 [115]: c40c2a46939cbfec -Block 0030 [116]: 2f9a1d4bda4a7f87 -Block 0030 [117]: a1f04a1cf57bee91 -Block 0030 [118]: 2c80d3b0b53a4ff8 -Block 0030 [119]: 6780c97b92b320fc -Block 0030 [120]: 6ffad7bf7a3cef66 -Block 0030 [121]: c3ea5d7dcda539e2 -Block 0030 [122]: a0ce5960ccb716e3 -Block 0030 [123]: 14e7d5d9cc4b77bc -Block 0030 [124]: 873764de6fc77a4f -Block 0030 [125]: d2e5faef31dafe08 -Block 0030 [126]: d2480de38d2bf7cb -Block 0030 [127]: 0508ce05f2d3c998 -Block 0031 [ 0]: 0be96ca10d034a45 -Block 0031 [ 1]: 9575d2e4602f4318 -Block 0031 [ 2]: 89214d75d56ed403 -Block 0031 [ 3]: 2cc7abbfb9839016 -Block 0031 [ 4]: 8f7133d96eb95c09 -Block 0031 [ 5]: 5fec17150c93946a -Block 0031 [ 6]: 04d71991c57dbe81 -Block 0031 [ 7]: 2b5ff0848d9af7c4 -Block 0031 [ 8]: a582464dd6a0ea81 -Block 0031 [ 9]: 4dd7a4072a85a7aa -Block 0031 [ 10]: 5ac584683d0796f8 -Block 0031 [ 11]: 441bbbff03f42a0f -Block 0031 [ 12]: bbdce2a42ef826de -Block 0031 [ 13]: d042fda562e0bb63 -Block 0031 [ 14]: 361d43ee2c58c5c4 -Block 0031 [ 15]: 7de686cf2d145af9 -Block 0031 [ 16]: 6ce7323d894eb8cc -Block 0031 [ 17]: 1547f88fc60a49ae -Block 0031 [ 18]: f9a6d4fd04247a06 -Block 0031 [ 19]: ab25c7afa49b95f8 -Block 0031 [ 20]: 3e7b0916c93b6e61 -Block 0031 [ 21]: 18da624648ab23b9 -Block 0031 [ 22]: 59e1d686864cf4ee -Block 0031 [ 23]: a02fac31694739c1 -Block 0031 [ 24]: 785530b6ae946af4 -Block 0031 [ 25]: 6b894bacaa6489ac -Block 0031 [ 26]: 22d346de32ad482d -Block 0031 [ 27]: 730aeb618656de77 -Block 0031 [ 28]: e9286e648c915180 -Block 0031 [ 29]: 48e61c353897c210 -Block 0031 [ 30]: c699de54ca1fb7f8 -Block 0031 [ 31]: 26e5dd847fcbc9e5 -Block 0031 [ 32]: 3ec9afd124b60527 -Block 0031 [ 33]: 7a6e5ae14fd233ed -Block 0031 [ 34]: d498d8fbd24c99a2 -Block 0031 [ 35]: 68f63c8302d0b2be -Block 0031 [ 36]: 92aa88c5af73ddcf -Block 0031 [ 37]: 33bad457727e53c1 -Block 0031 [ 38]: bba23119ee8d666f -Block 0031 [ 39]: d86b119eec24e821 -Block 0031 [ 40]: 1465044ba63b7eb1 -Block 0031 [ 41]: 89f0d0319c93d477 -Block 0031 [ 42]: bdaf399c54254189 -Block 0031 [ 43]: 4d8bdefbcc8e8c41 -Block 0031 [ 44]: 7bf584eac7a5b05d -Block 0031 [ 45]: f485dc24ad6145cf -Block 0031 [ 46]: 5b3dd93acc2f39f4 -Block 0031 [ 47]: b409d73cfacb198c -Block 0031 [ 48]: c7cc71f41e692bf6 -Block 0031 [ 49]: cc7fe606a9c98628 -Block 0031 [ 50]: 65a1bdefcc16e8b3 -Block 0031 [ 51]: bcf903babebec896 -Block 0031 [ 52]: 14195ac57e7acef3 -Block 0031 [ 53]: a17ad05681735026 -Block 0031 [ 54]: 83983688b4510a11 -Block 0031 [ 55]: 391b7ecf135fccf9 -Block 0031 [ 56]: 16c862996731d2e9 -Block 0031 [ 57]: 11755979836c247a -Block 0031 [ 58]: ec206587fd6e429b -Block 0031 [ 59]: c6929ef1d28fa1bb -Block 0031 [ 60]: 1a5a684997bed207 -Block 0031 [ 61]: 5af629a8bab5430f -Block 0031 [ 62]: 4f970b23c03c2a16 -Block 0031 [ 63]: db8874377f4d472f -Block 0031 [ 64]: 0a2a27ae4a441659 -Block 0031 [ 65]: d9ae804b74a44141 -Block 0031 [ 66]: b59b24aa9b2a0c71 -Block 0031 [ 67]: b108f0eee97f2e57 -Block 0031 [ 68]: 08a4ed01afb97547 -Block 0031 [ 69]: 6290765dcecd698c -Block 0031 [ 70]: f979a05daa8d8585 -Block 0031 [ 71]: 33aba4bbc37fdc4b -Block 0031 [ 72]: 0539e40be7d9b206 -Block 0031 [ 73]: 8a59244b8a0debb7 -Block 0031 [ 74]: cb223a21caf3211e -Block 0031 [ 75]: e93e6821e67d18a9 -Block 0031 [ 76]: 10b2e28b612beea9 -Block 0031 [ 77]: bac404af0b69285a -Block 0031 [ 78]: b447cd291a0a7376 -Block 0031 [ 79]: 47a74d8f58347ab5 -Block 0031 [ 80]: 4a48960ce6a6f756 -Block 0031 [ 81]: 606f7c3dfd074823 -Block 0031 [ 82]: 2076b15081d66c1e -Block 0031 [ 83]: 9c4cad0f6c5fbc82 -Block 0031 [ 84]: d0822b2857eca2df -Block 0031 [ 85]: de651eeb74c86bc8 -Block 0031 [ 86]: 2adc4589b575fb47 -Block 0031 [ 87]: 0defd70a578c0f1b -Block 0031 [ 88]: 165f5c7899be2a2a -Block 0031 [ 89]: 6c235e2602669359 -Block 0031 [ 90]: 1a7b3c2830c1c249 -Block 0031 [ 91]: 2ae61f42fba7c357 -Block 0031 [ 92]: a3e3134ac362997a -Block 0031 [ 93]: 612de1e90e7d2665 -Block 0031 [ 94]: 6a98f405d60a5897 -Block 0031 [ 95]: da640cf46db9f3ad -Block 0031 [ 96]: 192189ab2fce097c -Block 0031 [ 97]: 980c4190f2bdff0e -Block 0031 [ 98]: 2af5f4959ffe8833 -Block 0031 [ 99]: b21d820700a31cc1 -Block 0031 [100]: 6b7cef3303925760 -Block 0031 [101]: b7f918936d0a977c -Block 0031 [102]: 7516ea298918042d -Block 0031 [103]: 3093f3755c9ad8ac -Block 0031 [104]: d55b8196194f1851 -Block 0031 [105]: 5b13af0fcc6dd9fb -Block 0031 [106]: 48ab25b261495bd0 -Block 0031 [107]: f706bc4b314d3605 -Block 0031 [108]: 9dc7d9998834723f -Block 0031 [109]: b374304d5060f92e -Block 0031 [110]: b8cbfaa4f3d7f622 -Block 0031 [111]: a39e300ed046f5d3 -Block 0031 [112]: b5ba736e0e3ad706 -Block 0031 [113]: 4fc2a74746529f60 -Block 0031 [114]: 75f4c5700bb63dfc -Block 0031 [115]: 8879fe7c00cb6666 -Block 0031 [116]: 58164fb0826c7345 -Block 0031 [117]: 7f9ca9b024878a8e -Block 0031 [118]: 3ee1db46ada2e47d -Block 0031 [119]: 0c76e6496a69ad8b -Block 0031 [120]: 890e19b75bed5274 -Block 0031 [121]: d1105605f9410829 -Block 0031 [122]: a30e7a92069a2a6b -Block 0031 [123]: 175bc756d16f1316 -Block 0031 [124]: e4274fd675d1e1d6 -Block 0031 [125]: 903fffb7c4a14c98 -Block 0031 [126]: 7e5db55def471966 -Block 0031 [127]: 421b3c6e9555b79d - - After pass 2: -Block 0000 [ 0]: af2a8bd8482c2f11 -Block 0000 [ 1]: 785442294fa55e6d -Block 0000 [ 2]: 9256a768529a7f96 -Block 0000 [ 3]: 25a1c1f5bb953766 -Block 0000 [ 4]: 72a9cd9a10886cd8 -Block 0000 [ 5]: 3ecaa9543eb7af4f -Block 0000 [ 6]: 15ee21ef99126afa -Block 0000 [ 7]: d096e22d0fdccbed -Block 0000 [ 8]: 98695dc49460ec60 -Block 0000 [ 9]: ab044a53cf328972 -Block 0000 [ 10]: a8f4132856b85100 -Block 0000 [ 11]: e4e16ec3f4b0a8e4 -Block 0000 [ 12]: 8ffc55592cd030ce -Block 0000 [ 13]: 4ce7804c886fdefa -Block 0000 [ 14]: b023146da6402293 -Block 0000 [ 15]: 856585f1c5c743f1 -Block 0000 [ 16]: 718fa6455c5781f9 -Block 0000 [ 17]: db0177f7e7dcdc24 -Block 0000 [ 18]: 59646c865b04120d -Block 0000 [ 19]: 42fafc9a487ab374 -Block 0000 [ 20]: 7734cee2193a300a -Block 0000 [ 21]: ed753f1dc5975edd -Block 0000 [ 22]: 0f2ef8f86bc502e2 -Block 0000 [ 23]: 523d9a809c797111 -Block 0000 [ 24]: f8dccc9247fb54b3 -Block 0000 [ 25]: 5e75f97947c4f9ae -Block 0000 [ 26]: 8770611909c9eb72 -Block 0000 [ 27]: 01c898af62ec5a22 -Block 0000 [ 28]: a1acad245dec85df -Block 0000 [ 29]: d5d6e3f14ff07f69 -Block 0000 [ 30]: c98f44f03cc8540d -Block 0000 [ 31]: e9eff12cfc7ac7b3 -Block 0000 [ 32]: 696308a7c4841e57 -Block 0000 [ 33]: fa6699460fe0dad0 -Block 0000 [ 34]: b00c52019aaba84e -Block 0000 [ 35]: e8c46902a1a082c0 -Block 0000 [ 36]: c463b9a06f7bfe1c -Block 0000 [ 37]: 5f1588d9124740cc -Block 0000 [ 38]: 8a3845857d8e6450 -Block 0000 [ 39]: 098b1d2b3083364e -Block 0000 [ 40]: 2bdacbc5d75a3796 -Block 0000 [ 41]: 5fe02a54a1d09388 -Block 0000 [ 42]: 9dd25924ab01fd49 -Block 0000 [ 43]: 28fc235c36a67e69 -Block 0000 [ 44]: b9cdcc6aed6b42aa -Block 0000 [ 45]: 2292bf66aeecd9b4 -Block 0000 [ 46]: b65c616f92615e70 -Block 0000 [ 47]: 665d2a8cc95fda20 -Block 0000 [ 48]: 5d6015cd24d5b58e -Block 0000 [ 49]: 566e2511fc13e860 -Block 0000 [ 50]: 0e6d4172d299fda2 -Block 0000 [ 51]: 51711bb30a213fee -Block 0000 [ 52]: baa627b1b95efb66 -Block 0000 [ 53]: 553ef8b4d081f251 -Block 0000 [ 54]: dc296e21d3908bd2 -Block 0000 [ 55]: 0b5577934372e18b -Block 0000 [ 56]: 325a7c02c34a0063 -Block 0000 [ 57]: 511cd738a2bb29ec -Block 0000 [ 58]: 78bd842866f6081b -Block 0000 [ 59]: a4917fb40f795866 -Block 0000 [ 60]: f63451ab7fe45926 -Block 0000 [ 61]: e72da44da8fa2526 -Block 0000 [ 62]: cf7a0a79171c3dc5 -Block 0000 [ 63]: 5dffa87b6a19c377 -Block 0000 [ 64]: 87709249d1a67953 -Block 0000 [ 65]: 8c6e8aff0b893742 -Block 0000 [ 66]: 6d1644b786853055 -Block 0000 [ 67]: 45344b95703440e7 -Block 0000 [ 68]: 69d529484a27369c -Block 0000 [ 69]: 77cd187ff379d71e -Block 0000 [ 70]: 4695c1676a6297cb -Block 0000 [ 71]: 129c2e4d8f0d130f -Block 0000 [ 72]: 80df37b16e8e0120 -Block 0000 [ 73]: 36816cf794842bf6 -Block 0000 [ 74]: cd51ebe0bea75d4f -Block 0000 [ 75]: 6e2640064f0024a8 -Block 0000 [ 76]: 5fa751c45d4571e6 -Block 0000 [ 77]: be08b615e84e99e2 -Block 0000 [ 78]: aff895f6bd7ad5a2 -Block 0000 [ 79]: a94668aec045af6f -Block 0000 [ 80]: 7df54929439123b6 -Block 0000 [ 81]: 2177e81dc530a178 -Block 0000 [ 82]: 23702198b8815fd7 -Block 0000 [ 83]: c6cfdfc6c58b7c23 -Block 0000 [ 84]: f6665bdaec247318 -Block 0000 [ 85]: 25e38016bd0c2b13 -Block 0000 [ 86]: bda625c7027b06ab -Block 0000 [ 87]: 105491576c6bf104 -Block 0000 [ 88]: cdbf6de9ff65be01 -Block 0000 [ 89]: 87dca172936422a9 -Block 0000 [ 90]: 277f6a1f433f47f0 -Block 0000 [ 91]: 464d3691eb0eeb9f -Block 0000 [ 92]: ab180830e1806e1d -Block 0000 [ 93]: 488749a577657e8c -Block 0000 [ 94]: 1ffec0ce2790e240 -Block 0000 [ 95]: a0efe4db12ef9a4b -Block 0000 [ 96]: 1ce776a738fe62c5 -Block 0000 [ 97]: d693a4f99ad2ddc0 -Block 0000 [ 98]: a2b8ce9c5a1181f8 -Block 0000 [ 99]: 6e037c488d9505e0 -Block 0000 [100]: c7b6863367ad8547 -Block 0000 [101]: a41c214223ae4f53 -Block 0000 [102]: 0caca33bd0555161 -Block 0000 [103]: e8ab772466030bda -Block 0000 [104]: 55a5256adf841b5c -Block 0000 [105]: c26501daed133a58 -Block 0000 [106]: c6ee94951fd20f1a -Block 0000 [107]: f9f7da71e229eb3b -Block 0000 [108]: 1294145272aa8dd7 -Block 0000 [109]: 83806fd19da7fa36 -Block 0000 [110]: 043dff3929d76862 -Block 0000 [111]: b207d7f3d742fc0f -Block 0000 [112]: e5cd7f664d8b9d85 -Block 0000 [113]: d354f54da4494d6e -Block 0000 [114]: 9b5f7db77aaf43b1 -Block 0000 [115]: 8760c0fda9bd5ef2 -Block 0000 [116]: 82e8cefc4f50beb9 -Block 0000 [117]: e0792492c41de5d2 -Block 0000 [118]: 961d746857b85e19 -Block 0000 [119]: fd8924440157f644 -Block 0000 [120]: 309fa2d2f185eca2 -Block 0000 [121]: df4477ca4024ca5a -Block 0000 [122]: 69c6c1b33ae10cf4 -Block 0000 [123]: 58df5414cc861dde -Block 0000 [124]: 77b32f2a19a5f0cf -Block 0000 [125]: 28c446e2110842b6 -Block 0000 [126]: 196a06e7803f07af -Block 0000 [127]: 703b8726fa442184 -Block 0001 [ 0]: b39e52eb91c1bdc1 -Block 0001 [ 1]: d92c2860542c5eab -Block 0001 [ 2]: cf88b66662afd9a4 -Block 0001 [ 3]: ab205105abf50363 -Block 0001 [ 4]: 0cad5ffe232c1e55 -Block 0001 [ 5]: 482eab98f97f69aa -Block 0001 [ 6]: df181ad58c929eaa -Block 0001 [ 7]: 1ca9a83149e9ab89 -Block 0001 [ 8]: ba562d31e81f884b -Block 0001 [ 9]: f95357df37ae767e -Block 0001 [ 10]: 45b2892b275dda33 -Block 0001 [ 11]: 241585e03db70e6d -Block 0001 [ 12]: 5c3324c4c067ddd8 -Block 0001 [ 13]: dc259c66486556a0 -Block 0001 [ 14]: b7497cd48e74a4f1 -Block 0001 [ 15]: 64ea476ce1178638 -Block 0001 [ 16]: 9e7045e96a30f5b8 -Block 0001 [ 17]: 5a69a92c5a464b3e -Block 0001 [ 18]: c7a059805b6d1880 -Block 0001 [ 19]: 440f25c7f2b63692 -Block 0001 [ 20]: 526c9603d5bb0f81 -Block 0001 [ 21]: c777fa917cb46eb8 -Block 0001 [ 22]: 59e0889599745628 -Block 0001 [ 23]: bd82e71af2c4f941 -Block 0001 [ 24]: ef9eabbe63ed885b -Block 0001 [ 25]: e5e7357881f13ba0 -Block 0001 [ 26]: aae864789abb9006 -Block 0001 [ 27]: 62343cf1b559b572 -Block 0001 [ 28]: 94c06926a5f752fa -Block 0001 [ 29]: 0f574fb3d218ff4f -Block 0001 [ 30]: 32c072026d0ee272 -Block 0001 [ 31]: 0a569df20a2ed675 -Block 0001 [ 32]: 2cfbee56a5b095fb -Block 0001 [ 33]: 32152424daad99a0 -Block 0001 [ 34]: 7a0a45c7a647c2e3 -Block 0001 [ 35]: a919db876ec5ee05 -Block 0001 [ 36]: 751af0fcf6b4506c -Block 0001 [ 37]: a213cfa621dd3379 -Block 0001 [ 38]: f4976f69ca9fd2a0 -Block 0001 [ 39]: fb9e8a81c1ae1561 -Block 0001 [ 40]: eb99e9a23c2bd68d -Block 0001 [ 41]: 109614411df38ee3 -Block 0001 [ 42]: d830230cb9ef4eeb -Block 0001 [ 43]: 7b6534f6b9125e6f -Block 0001 [ 44]: 4b8d06409fe2dcc0 -Block 0001 [ 45]: 1539d75c386cb30f -Block 0001 [ 46]: 34f2a2d5e70c5291 -Block 0001 [ 47]: 5e2d0c48230ca61c -Block 0001 [ 48]: 3dc0983d88937207 -Block 0001 [ 49]: 2ea263335271880a -Block 0001 [ 50]: 2e12ff10bfc8720c -Block 0001 [ 51]: 159a0a7b98efb22e -Block 0001 [ 52]: 98ee6f8150bd1bf7 -Block 0001 [ 53]: 4ab37247230bf307 -Block 0001 [ 54]: 1e8e9811d03bb579 -Block 0001 [ 55]: 069a57f413b64703 -Block 0001 [ 56]: f293bc9dc1bac9f2 -Block 0001 [ 57]: 068b62897b97b078 -Block 0001 [ 58]: fa6870e9439ae4b9 -Block 0001 [ 59]: e1e9a4d4bf2934bd -Block 0001 [ 60]: bd272bf53d295610 -Block 0001 [ 61]: 645938ab64a6d8c5 -Block 0001 [ 62]: af436972fd38544f -Block 0001 [ 63]: 43daf23ba5ead97d -Block 0001 [ 64]: a809fa9d2be31c90 -Block 0001 [ 65]: 5c52fa2e2da1ab6e -Block 0001 [ 66]: 39bd7bbcd09f6dfe -Block 0001 [ 67]: 5badc190cccecf31 -Block 0001 [ 68]: f72407904b16eb9a -Block 0001 [ 69]: 402228c2604e2359 -Block 0001 [ 70]: f1d353798d59dc0e -Block 0001 [ 71]: 91bc64df9fff4545 -Block 0001 [ 72]: 33c824a2621fd4df -Block 0001 [ 73]: 3b8e88ca432c6d5a -Block 0001 [ 74]: 9a0cb3f1b6ab96c2 -Block 0001 [ 75]: 067359cdebe0d519 -Block 0001 [ 76]: b4aacccf376ceb8d -Block 0001 [ 77]: 2aa6e909369143aa -Block 0001 [ 78]: df538d112febd4c0 -Block 0001 [ 79]: e1befd0fb9173850 -Block 0001 [ 80]: d402f5534c7eb96b -Block 0001 [ 81]: fe5a069f1e0ae34d -Block 0001 [ 82]: 6961cbeafba1ff67 -Block 0001 [ 83]: 54cf6d2bb3b82b3e -Block 0001 [ 84]: d7df2164ffb14392 -Block 0001 [ 85]: 142c0d8c20c56e01 -Block 0001 [ 86]: 5d9760b1fe61e8ef -Block 0001 [ 87]: c231026b091606cb -Block 0001 [ 88]: f7ace6fd77b17264 -Block 0001 [ 89]: dbed7e84e0a1b29c -Block 0001 [ 90]: 6dff9c730a69a47e -Block 0001 [ 91]: 9b5fae14c1947799 -Block 0001 [ 92]: 4f92371285c77bf3 -Block 0001 [ 93]: 773b5d4c10922cf8 -Block 0001 [ 94]: 189f25e093ec733b -Block 0001 [ 95]: a46f6b50f17faa5f -Block 0001 [ 96]: d2d8cb0cd59536c3 -Block 0001 [ 97]: d4f22425b74219ad -Block 0001 [ 98]: 44ece7df86187831 -Block 0001 [ 99]: 9b3b0f6d79aa3073 -Block 0001 [100]: eb5cd8e3706408dc -Block 0001 [101]: 4d095338d1559076 -Block 0001 [102]: 6b983b34a3cd1d03 -Block 0001 [103]: 0b9fb83578dde9e0 -Block 0001 [104]: 241b795deea655a8 -Block 0001 [105]: 6e74249559871092 -Block 0001 [106]: 3233dd2ab0ff3d60 -Block 0001 [107]: e53a50d0a98d0822 -Block 0001 [108]: 7d2dcd3a0e8588f0 -Block 0001 [109]: 96b8a86fcd45c056 -Block 0001 [110]: e8049d66f30a33c7 -Block 0001 [111]: bfa5249f4e5a109b -Block 0001 [112]: 088bb1e4dcd92a86 -Block 0001 [113]: ec15ec59f08a90f5 -Block 0001 [114]: 7b46daf17afb9e94 -Block 0001 [115]: 630b22e55f889c44 -Block 0001 [116]: 783691d88df12293 -Block 0001 [117]: c09e1eef375a4cb1 -Block 0001 [118]: 5292cd778f7d358b -Block 0001 [119]: 2c3b0f3b876e25fb -Block 0001 [120]: bfb2636b9592f067 -Block 0001 [121]: 07f44ff9972385bf -Block 0001 [122]: ffbccd62f3ced551 -Block 0001 [123]: 1f0f08705400cb47 -Block 0001 [124]: ef68b6e60b36887c -Block 0001 [125]: e698259b92b2c83e -Block 0001 [126]: dff046d9c5520ca6 -Block 0001 [127]: 7991bf5453c3b638 -Block 0002 [ 0]: dd23e459ec7a7b44 -Block 0002 [ 1]: 28741e6fe272b23c -Block 0002 [ 2]: 3bc8ee6d9f0b29a2 -Block 0002 [ 3]: ae39b5cbb3437522 -Block 0002 [ 4]: 758846264ea5f488 -Block 0002 [ 5]: ec3446e7f72f599d -Block 0002 [ 6]: 0bc86bd3b02a4152 -Block 0002 [ 7]: 95b7b5188fa5ea77 -Block 0002 [ 8]: 8d54f41ac3e6b462 -Block 0002 [ 9]: c788eabc6fc4b0ff -Block 0002 [ 10]: de3c64851157af6b -Block 0002 [ 11]: 4f287f4af73c67e9 -Block 0002 [ 12]: b6a19fc4e95e8290 -Block 0002 [ 13]: 85dc2853f27e9133 -Block 0002 [ 14]: 5663079347682383 -Block 0002 [ 15]: 02ef93c528c8b425 -Block 0002 [ 16]: f4244ee9c891c2b9 -Block 0002 [ 17]: a5728848d80240af -Block 0002 [ 18]: b9144b5d186a8590 -Block 0002 [ 19]: aaffa101deb880ad -Block 0002 [ 20]: 8b64003a05a79b57 -Block 0002 [ 21]: 8058e18f9de6f322 -Block 0002 [ 22]: 55b089d2703cddb5 -Block 0002 [ 23]: 86028d18880f2ad2 -Block 0002 [ 24]: 31355b1568d7adcf -Block 0002 [ 25]: 859079281ec15b46 -Block 0002 [ 26]: 8eb2be5993c11d50 -Block 0002 [ 27]: 7bec18fb9a0e784a -Block 0002 [ 28]: b792de1f75db4c8e -Block 0002 [ 29]: a876e86413fa1fa9 -Block 0002 [ 30]: 4cd6f37fd4eccee5 -Block 0002 [ 31]: a9dbc182dfeae36c -Block 0002 [ 32]: c4ef190a1e9d616b -Block 0002 [ 33]: 7c9e0bd0a2c26296 -Block 0002 [ 34]: 16b6ba5e8894b634 -Block 0002 [ 35]: 65a451695eae46d1 -Block 0002 [ 36]: c379abceeaabb352 -Block 0002 [ 37]: 5e0be866fca09057 -Block 0002 [ 38]: f16d10590dfa812e -Block 0002 [ 39]: 9364c03e8bf533c6 -Block 0002 [ 40]: 70ea4fe297664dae -Block 0002 [ 41]: 75d8c06c28f33748 -Block 0002 [ 42]: 5cbbec46e77b4d15 -Block 0002 [ 43]: 179bee833c0e2b11 -Block 0002 [ 44]: 189911c825c302eb -Block 0002 [ 45]: 60e2164c39da5a7f -Block 0002 [ 46]: b27a85a209358502 -Block 0002 [ 47]: 1e1a71fac6640545 -Block 0002 [ 48]: 5f86db5fddde6641 -Block 0002 [ 49]: a183e0e4ad45bb17 -Block 0002 [ 50]: 5326fc28f8c52311 -Block 0002 [ 51]: ca76d903b860c5aa -Block 0002 [ 52]: 3f15e4902a35d379 -Block 0002 [ 53]: 0b8eb6ba289ec0f9 -Block 0002 [ 54]: 9507ca02e069a05a -Block 0002 [ 55]: 61e21d6c08e494b9 -Block 0002 [ 56]: 505b52f1a764340f -Block 0002 [ 57]: 9d7b12f00bb712b6 -Block 0002 [ 58]: 08e4cc9a9d6af979 -Block 0002 [ 59]: 885db0825a30acc6 -Block 0002 [ 60]: 4ac721007866bb40 -Block 0002 [ 61]: 35ebcebaa1754249 -Block 0002 [ 62]: 8ec3842db1d07b56 -Block 0002 [ 63]: 8c2bba8b54d248a4 -Block 0002 [ 64]: 73e4883914fd19f1 -Block 0002 [ 65]: a53eddc4cb8cab79 -Block 0002 [ 66]: 77ceae67ac3b62f6 -Block 0002 [ 67]: 60bbb32043d74028 -Block 0002 [ 68]: e2a4e36e43f74ff7 -Block 0002 [ 69]: 71909946ab7773d1 -Block 0002 [ 70]: 7b5acff55fbb7dfb -Block 0002 [ 71]: c794dfa7065f2c47 -Block 0002 [ 72]: 66af2decb5329261 -Block 0002 [ 73]: c384d12af9f93a8d -Block 0002 [ 74]: ff80a743def4f0d0 -Block 0002 [ 75]: 10cbb8eac2d1ad4c -Block 0002 [ 76]: 546181544e57eca5 -Block 0002 [ 77]: 32110a65918a7e2d -Block 0002 [ 78]: ec276d8f8c71a33c -Block 0002 [ 79]: f11461667246342f -Block 0002 [ 80]: da2610422692be8e -Block 0002 [ 81]: b932777284ab93ed -Block 0002 [ 82]: 39e843b0a462f822 -Block 0002 [ 83]: 56be82271e70a6f1 -Block 0002 [ 84]: 394e12432c8d1f14 -Block 0002 [ 85]: b50f3562e448dd1a -Block 0002 [ 86]: d7c13dcd7fb4369d -Block 0002 [ 87]: 5c137edb4d11128f -Block 0002 [ 88]: 496401fc2b3a0dca -Block 0002 [ 89]: 20dcd790fd23aec6 -Block 0002 [ 90]: 38a0cceecad50c53 -Block 0002 [ 91]: 2a36cb7180d23f3b -Block 0002 [ 92]: 06a936f29ee07f91 -Block 0002 [ 93]: 679b87be6661c48a -Block 0002 [ 94]: 3104acb9c9416273 -Block 0002 [ 95]: 62cdeaadccd66f6e -Block 0002 [ 96]: 675596e72b20db7e -Block 0002 [ 97]: df51b05fa30443d7 -Block 0002 [ 98]: e550f147d18fa4f8 -Block 0002 [ 99]: b7c92884f699b00e -Block 0002 [100]: 3971bfe495111ddc -Block 0002 [101]: be6c841f9298b987 -Block 0002 [102]: 36264fdf4d66cc1e -Block 0002 [103]: 3966c703cdd2876b -Block 0002 [104]: 31072cbb07905072 -Block 0002 [105]: bb5cb679fd65f45c -Block 0002 [106]: 428bfa358e73473b -Block 0002 [107]: 9a2642a566a546ae -Block 0002 [108]: 0d3de325716c09f2 -Block 0002 [109]: 7b2b9773aff01a0e -Block 0002 [110]: 4cbd6f15e2746305 -Block 0002 [111]: 3d36f63c2c825d13 -Block 0002 [112]: a554238bf607ba3c -Block 0002 [113]: 7a86a81e929f9d6c -Block 0002 [114]: 8cf93c67a08a5915 -Block 0002 [115]: f48891bd8223a8b3 -Block 0002 [116]: aaee89560ce32e57 -Block 0002 [117]: a65fdc297527cff5 -Block 0002 [118]: 5d4054b589611c4b -Block 0002 [119]: efc6f60b84cca568 -Block 0002 [120]: 2db2e8633528bffb -Block 0002 [121]: d32c09564b09f418 -Block 0002 [122]: ebfa0176bb5954f4 -Block 0002 [123]: 72244abd8cc810bc -Block 0002 [124]: d156dc75cad947e7 -Block 0002 [125]: 620bd5bd6831dc75 -Block 0002 [126]: be69b12e194293b6 -Block 0002 [127]: 899f2fee213f1de9 -Block 0003 [ 0]: fb56a6f3add6fbf5 -Block 0003 [ 1]: 0f70eeb79f04a036 -Block 0003 [ 2]: 21988c987d9a6bae -Block 0003 [ 3]: 520bceff7462ace7 -Block 0003 [ 4]: ad909e68c1f012ff -Block 0003 [ 5]: b0dea9d56bd02153 -Block 0003 [ 6]: 66c1d56a4bcd3c3d -Block 0003 [ 7]: edf4eb0acb6c312f -Block 0003 [ 8]: 812f098eb3f51d98 -Block 0003 [ 9]: cb57986e6a080edf -Block 0003 [ 10]: 3ff9cf96daa45e5e -Block 0003 [ 11]: f03a603e2493f062 -Block 0003 [ 12]: 3a9bd9a68d202e97 -Block 0003 [ 13]: 570a6752c0c5cb3f -Block 0003 [ 14]: 6e3ff8cfde441c1e -Block 0003 [ 15]: b9a2c0d8bd8578ff -Block 0003 [ 16]: 4b8d7ef427d31ae9 -Block 0003 [ 17]: 065cf6acfd5b2e03 -Block 0003 [ 18]: c63a2ced88f063b9 -Block 0003 [ 19]: 5de62ee0f73c89d0 -Block 0003 [ 20]: c205637146f8c78c -Block 0003 [ 21]: 53ffa1ca2347257e -Block 0003 [ 22]: c9bbf7444d9deef3 -Block 0003 [ 23]: 6b214fc5d13ca15b -Block 0003 [ 24]: 1983a8131af7010f -Block 0003 [ 25]: 723598dddf1db8aa -Block 0003 [ 26]: d1f125036bb68c2e -Block 0003 [ 27]: 573314a277cbd46d -Block 0003 [ 28]: 8fb5257f38a0893d -Block 0003 [ 29]: 6f82aa350258358f -Block 0003 [ 30]: 0d70c253df3fced4 -Block 0003 [ 31]: e595ca4e326dde32 -Block 0003 [ 32]: 7c93535f19f04c44 -Block 0003 [ 33]: 06924354b5324a58 -Block 0003 [ 34]: beaa0c1a43bd5458 -Block 0003 [ 35]: a1d149ea16c1162b -Block 0003 [ 36]: 01640d4273b5839d -Block 0003 [ 37]: dce6b17485cb9db1 -Block 0003 [ 38]: c89a52747f1821f5 -Block 0003 [ 39]: 30bb832e0f53e158 -Block 0003 [ 40]: 1a0847008fd1b846 -Block 0003 [ 41]: 4cebde059f835332 -Block 0003 [ 42]: 0f034ddd0d4e4bc7 -Block 0003 [ 43]: cbe3528d589b6a73 -Block 0003 [ 44]: 6025d2bc3be52d8b -Block 0003 [ 45]: 5778af30e8c961a3 -Block 0003 [ 46]: 9692098526efbd5f -Block 0003 [ 47]: abf4049842746f89 -Block 0003 [ 48]: b1b779375f25ddc2 -Block 0003 [ 49]: b39ee648800d7f0e -Block 0003 [ 50]: 6ed0f992f6759f6a -Block 0003 [ 51]: 1214315851996819 -Block 0003 [ 52]: 07abf5656070323e -Block 0003 [ 53]: 18ac860f782bc9d2 -Block 0003 [ 54]: 980218218884d219 -Block 0003 [ 55]: 2f3fb9ad24298ab8 -Block 0003 [ 56]: 45a188a99b980d81 -Block 0003 [ 57]: 43f9bb24b34929f4 -Block 0003 [ 58]: eacc9f32423a06bf -Block 0003 [ 59]: 61d00561386621a0 -Block 0003 [ 60]: b64fd998ca28cc23 -Block 0003 [ 61]: e62e2aa17a058fcf -Block 0003 [ 62]: 4da3729542018be2 -Block 0003 [ 63]: 7523de30690d87ad -Block 0003 [ 64]: a0d414d97ff76659 -Block 0003 [ 65]: 94d80303cdccbe07 -Block 0003 [ 66]: b81ffe4a4e106cf6 -Block 0003 [ 67]: 41712d3a88f571aa -Block 0003 [ 68]: 9d011e543a5ce6e3 -Block 0003 [ 69]: 69d69c1e69e5f972 -Block 0003 [ 70]: f25a39ed9a7ec482 -Block 0003 [ 71]: 5832d4812c8c4c57 -Block 0003 [ 72]: 1211a9c54c07f790 -Block 0003 [ 73]: 5303c102e9b45c21 -Block 0003 [ 74]: 97457d5738540218 -Block 0003 [ 75]: acea58c384e21618 -Block 0003 [ 76]: b6259e5a7ceb3df8 -Block 0003 [ 77]: 440656da0f3ef414 -Block 0003 [ 78]: d8c484440162ecb9 -Block 0003 [ 79]: 64c335a57eb00044 -Block 0003 [ 80]: 6cecee1ae6bfa0b4 -Block 0003 [ 81]: 0ffc22fcf7b03663 -Block 0003 [ 82]: 540137e7b4398a11 -Block 0003 [ 83]: 7ddf5807771780d9 -Block 0003 [ 84]: 0363d76635de4e70 -Block 0003 [ 85]: 0abca167960b4b39 -Block 0003 [ 86]: fb65298a875c60c6 -Block 0003 [ 87]: 6346ea3ff20181c5 -Block 0003 [ 88]: cd51ada4f78050b5 -Block 0003 [ 89]: 2a43d4e2bf47b952 -Block 0003 [ 90]: acfcb3001f913635 -Block 0003 [ 91]: 411deab07c65ee19 -Block 0003 [ 92]: 1d189a46754809e4 -Block 0003 [ 93]: babf37efbf18c86c -Block 0003 [ 94]: f92fcdece817e247 -Block 0003 [ 95]: 873afe7217b7851d -Block 0003 [ 96]: 927eeadc8fadd290 -Block 0003 [ 97]: 7213c6ef9ca89f8f -Block 0003 [ 98]: 954d08698a03ddf0 -Block 0003 [ 99]: ccb51edd7f11262b -Block 0003 [100]: 6a498937058d4c78 -Block 0003 [101]: 4b14b8c5878e068e -Block 0003 [102]: ba12a7b03972114b -Block 0003 [103]: dff12621c17eca1f -Block 0003 [104]: 61fd0fea28e34153 -Block 0003 [105]: f06cdd41da132ef8 -Block 0003 [106]: 35acbb677a549a48 -Block 0003 [107]: ffd667b4c8e806f3 -Block 0003 [108]: 49200825235fbffd -Block 0003 [109]: 88e3019f9e034791 -Block 0003 [110]: 83c9e3abe3ea87fd -Block 0003 [111]: 6c3cea295a2565e1 -Block 0003 [112]: 538fb21149a66ed5 -Block 0003 [113]: d65d2f8b53a9106b -Block 0003 [114]: f483d2cebd16dec2 -Block 0003 [115]: 5c2e9fc4f7bd8e5d -Block 0003 [116]: 0f2bf6a3814c58d8 -Block 0003 [117]: 94e762719e799f4d -Block 0003 [118]: 7906a64262e02bde -Block 0003 [119]: d278e23ff953b7cd -Block 0003 [120]: c389950788607700 -Block 0003 [121]: c415165302ce18fc -Block 0003 [122]: c00a856c40f4c8bf -Block 0003 [123]: 9d8693388f6c4448 -Block 0003 [124]: e3bf742527c158dc -Block 0003 [125]: 78f831362f7dc9d8 -Block 0003 [126]: 21b0450a4a162590 -Block 0003 [127]: 9f14702133338041 -Block 0004 [ 0]: 1f4bfff1169c239e -Block 0004 [ 1]: 7826a84aebd08cb9 -Block 0004 [ 2]: 77b687cdebbb8252 -Block 0004 [ 3]: bb622856ff91cfc5 -Block 0004 [ 4]: 1cb853de37e58f4c -Block 0004 [ 5]: 8ab731ee056473c1 -Block 0004 [ 6]: 7cc452a31f71474c -Block 0004 [ 7]: 7e6af8625ebbcad5 -Block 0004 [ 8]: 94b7a53c75f01f3f -Block 0004 [ 9]: 24ac4e19a5c0fb37 -Block 0004 [ 10]: 59ea871a2ad1e802 -Block 0004 [ 11]: a19069ea084df0d7 -Block 0004 [ 12]: 15c55a1d96698e7a -Block 0004 [ 13]: 50ee5f96169dc765 -Block 0004 [ 14]: feebfdf9c4e8c14d -Block 0004 [ 15]: 109dbc84bbae0c77 -Block 0004 [ 16]: 7980f4474000e12c -Block 0004 [ 17]: 7bfb1e76fae72ecf -Block 0004 [ 18]: 80202573c08d0304 -Block 0004 [ 19]: 690dacc76d735f59 -Block 0004 [ 20]: ef7e52019560e447 -Block 0004 [ 21]: 6600da7a6bf6125c -Block 0004 [ 22]: c24d2e58a8e90406 -Block 0004 [ 23]: 712b9c2015d10024 -Block 0004 [ 24]: df63b5ad68463243 -Block 0004 [ 25]: 1b9039493b5dfb54 -Block 0004 [ 26]: caf0ccf6b4216f1e -Block 0004 [ 27]: 8387560fa1ba0168 -Block 0004 [ 28]: 30436beed598ccef -Block 0004 [ 29]: 542cba1ef2ef1b4f -Block 0004 [ 30]: e2830b7cd8a885f4 -Block 0004 [ 31]: 3c783826b3557628 -Block 0004 [ 32]: bb7d60801f02ad76 -Block 0004 [ 33]: cc354aa998635e97 -Block 0004 [ 34]: 5a2c1af11968c3b4 -Block 0004 [ 35]: da0a5a4d4e7a0d25 -Block 0004 [ 36]: 905dfde8c9f5931e -Block 0004 [ 37]: e0d86aaf2bdc0a00 -Block 0004 [ 38]: 875f10db09de687e -Block 0004 [ 39]: d3acbd2b9691eebb -Block 0004 [ 40]: 0f4ab9500d27b7f6 -Block 0004 [ 41]: d769190449856fa2 -Block 0004 [ 42]: f71772fb0b6e1757 -Block 0004 [ 43]: 1971206973bd9365 -Block 0004 [ 44]: 51e23fe410819a38 -Block 0004 [ 45]: 1d58d69319e63a56 -Block 0004 [ 46]: f59e3060ed85225b -Block 0004 [ 47]: b4487ec84cd0746e -Block 0004 [ 48]: c2348b990c23dbb1 -Block 0004 [ 49]: 38c5c34f0a61b67a -Block 0004 [ 50]: ee9f2cc1650a9172 -Block 0004 [ 51]: 5746f1fd8fdf085b -Block 0004 [ 52]: 43c65f28351411cd -Block 0004 [ 53]: 1bf0c575dd03cc83 -Block 0004 [ 54]: 89fd5da38d99f58a -Block 0004 [ 55]: bb776e8c70834de0 -Block 0004 [ 56]: bf0f2292e55ec916 -Block 0004 [ 57]: d9d98cd9eebac545 -Block 0004 [ 58]: 58d5ca66c32ce98b -Block 0004 [ 59]: 4a457a8f1c16a8ac -Block 0004 [ 60]: 4b2d30b9453fac13 -Block 0004 [ 61]: 80dd455f23308749 -Block 0004 [ 62]: 7b8e9c21befca460 -Block 0004 [ 63]: 382d5f6f88bb45c6 -Block 0004 [ 64]: 5446ac8c9a13aa21 -Block 0004 [ 65]: 5af8a4bf1be1404b -Block 0004 [ 66]: 4bed69e773c3bc33 -Block 0004 [ 67]: de21f3f20c01e245 -Block 0004 [ 68]: 07947acd343ff718 -Block 0004 [ 69]: a3273639f6aa2e86 -Block 0004 [ 70]: 81af6e7d148105fa -Block 0004 [ 71]: 6d2a2d27c0240158 -Block 0004 [ 72]: 230228f9486c7d5f -Block 0004 [ 73]: d0f9502d095d1d61 -Block 0004 [ 74]: eda1dfc0163868ba -Block 0004 [ 75]: fba2e329e4b590a9 -Block 0004 [ 76]: 7e3981f5c94a32f4 -Block 0004 [ 77]: aebbf3e39f176adb -Block 0004 [ 78]: 286ca52dfb323f51 -Block 0004 [ 79]: 833cf31e0d466e90 -Block 0004 [ 80]: 4e300c1e306b8f13 -Block 0004 [ 81]: 824b53333fced271 -Block 0004 [ 82]: edf34cd945d7210b -Block 0004 [ 83]: 43038b680e9dffe3 -Block 0004 [ 84]: 2f9fb7b082d9c219 -Block 0004 [ 85]: 619bf28703df87b7 -Block 0004 [ 86]: fda84f7ae8ae73ac -Block 0004 [ 87]: 39ec5d049200ec6a -Block 0004 [ 88]: b7bee34b3af6a88f -Block 0004 [ 89]: 393690efa5e2fcec -Block 0004 [ 90]: 07a885a1ab63f35d -Block 0004 [ 91]: 094cf25fe38b00d2 -Block 0004 [ 92]: 7938fde0ce831763 -Block 0004 [ 93]: fa548a2a97932eac -Block 0004 [ 94]: ca747928b037d4e2 -Block 0004 [ 95]: d8052573416f9a31 -Block 0004 [ 96]: 3e61a2127a36ea9b -Block 0004 [ 97]: 19ea0b3a6cf1c9a2 -Block 0004 [ 98]: 4e83b355bc86006e -Block 0004 [ 99]: aacd8df333ea6d30 -Block 0004 [100]: b6bfd76c58c3d60d -Block 0004 [101]: c7d73525add3bd57 -Block 0004 [102]: cad6fe5d1b06a2c1 -Block 0004 [103]: c4ab56c924fe5b08 -Block 0004 [104]: dbe4e0b763bb6bb1 -Block 0004 [105]: c19c86942ec530fb -Block 0004 [106]: e888bb27b3995932 -Block 0004 [107]: 30a878899a87c2a4 -Block 0004 [108]: 42b160bf69b804c3 -Block 0004 [109]: 1b662e82f5ff668f -Block 0004 [110]: 400b9463e2b70039 -Block 0004 [111]: 0c42792dd517f120 -Block 0004 [112]: e5d2783bc74b1db1 -Block 0004 [113]: 616271ebb481803c -Block 0004 [114]: ce397db1ea2f109e -Block 0004 [115]: ff2a4d9a41f27cfe -Block 0004 [116]: 143f5545c3cb7ac5 -Block 0004 [117]: 043d1e2315ee9b12 -Block 0004 [118]: c9c5db186171120c -Block 0004 [119]: 162d0f20feb42416 -Block 0004 [120]: 9a6ad48ba5165f31 -Block 0004 [121]: 2745f1f5d8a83383 -Block 0004 [122]: fb642a715308dcd9 -Block 0004 [123]: f4aaf8ef74a9fed0 -Block 0004 [124]: 277f46cda4ec5361 -Block 0004 [125]: 633e4dd91025d362 -Block 0004 [126]: bbaa459b3f915cb5 -Block 0004 [127]: 06be040c42f5364a -Block 0005 [ 0]: 56bc1f3296dd2ce5 -Block 0005 [ 1]: 8bc5ab8496de707e -Block 0005 [ 2]: d9644efa47808ffa -Block 0005 [ 3]: 8efe9e433a0c85e3 -Block 0005 [ 4]: 4a5df187ab89e42c -Block 0005 [ 5]: a152346eda240da5 -Block 0005 [ 6]: 6d2987077fb98c71 -Block 0005 [ 7]: 57a42e75ca3586c2 -Block 0005 [ 8]: 0a0ba506c7b76ee4 -Block 0005 [ 9]: 4fd130bc473ca0b8 -Block 0005 [ 10]: 9b29c4ac1d976010 -Block 0005 [ 11]: ff7913480eebda94 -Block 0005 [ 12]: dc9e218864ce3ef0 -Block 0005 [ 13]: 3cf7dbd1727b82b2 -Block 0005 [ 14]: a71c3c0ec3aea67b -Block 0005 [ 15]: 57a88ca0e5a824de -Block 0005 [ 16]: edc7720b0e811eef -Block 0005 [ 17]: e5deb23e00cd70d3 -Block 0005 [ 18]: 360f8b0603d3e05f -Block 0005 [ 19]: eecdf9fd77f4f367 -Block 0005 [ 20]: 5fd47b07a4fba1b8 -Block 0005 [ 21]: d7e7892acda87447 -Block 0005 [ 22]: d8a65351566b4cef -Block 0005 [ 23]: b448eea0fbe46f4f -Block 0005 [ 24]: c14fc4e53e7665bc -Block 0005 [ 25]: c5af40847ee10c41 -Block 0005 [ 26]: ec9a322dbbc80e10 -Block 0005 [ 27]: 62b8d071bb6df9e3 -Block 0005 [ 28]: ebdb4bd5139ec05f -Block 0005 [ 29]: 2cbb1cb894674200 -Block 0005 [ 30]: cbac9276b8d62258 -Block 0005 [ 31]: 340cb88843557dbb -Block 0005 [ 32]: 175bd4c2baa4574e -Block 0005 [ 33]: 1fc98675a50be7fe -Block 0005 [ 34]: 2a99f47a058fc17e -Block 0005 [ 35]: e79fd453fc8a698b -Block 0005 [ 36]: 3308cfa89a737ee6 -Block 0005 [ 37]: 4d874d35563f79c9 -Block 0005 [ 38]: 0901887475a16e95 -Block 0005 [ 39]: ca90d7075224fd56 -Block 0005 [ 40]: e9ccbba72c73f229 -Block 0005 [ 41]: 9a58978532de573f -Block 0005 [ 42]: 72a7c483199477fd -Block 0005 [ 43]: 74ae4a95aa86f679 -Block 0005 [ 44]: 39196e3bb0f9465a -Block 0005 [ 45]: 7e0aa61bebb4f8b7 -Block 0005 [ 46]: 3b3e4cf3c3767634 -Block 0005 [ 47]: 385568a115a4b7ba -Block 0005 [ 48]: ee475f11f508e361 -Block 0005 [ 49]: e2817d692ac425ca -Block 0005 [ 50]: 6bcb654d71ad29c6 -Block 0005 [ 51]: b8e0f8d40bd34cdc -Block 0005 [ 52]: 23e1122ed5fe525b -Block 0005 [ 53]: 118d441dd90d22d6 -Block 0005 [ 54]: 964d711ace56313d -Block 0005 [ 55]: 839a28506c08d638 -Block 0005 [ 56]: 1a9816a29d9ce7e5 -Block 0005 [ 57]: 61754f0576224d87 -Block 0005 [ 58]: 3e6408809e4e7de7 -Block 0005 [ 59]: a8f4a10955bf4406 -Block 0005 [ 60]: 94a63146fb256183 -Block 0005 [ 61]: 920c1b3d2c902b66 -Block 0005 [ 62]: 2df4b46832d03909 -Block 0005 [ 63]: b796e7fb9e6618fb -Block 0005 [ 64]: 973fa1e3eb5fb6ef -Block 0005 [ 65]: decdd1da1988d287 -Block 0005 [ 66]: d0753db3225995d5 -Block 0005 [ 67]: fee17a05a4e947ee -Block 0005 [ 68]: 0ca155fc78aa8be7 -Block 0005 [ 69]: 5cec59b99faac731 -Block 0005 [ 70]: bde7a1777f4dcb64 -Block 0005 [ 71]: 902be95825b61c51 -Block 0005 [ 72]: 401aff6e1f334c13 -Block 0005 [ 73]: ca46b2a0c1072b10 -Block 0005 [ 74]: cb7b0928958fb7e4 -Block 0005 [ 75]: 7ecc13ba897596cc -Block 0005 [ 76]: b1fa2e9e2fdfdf4b -Block 0005 [ 77]: a7c61a3b18ce9503 -Block 0005 [ 78]: e30fa55955465c83 -Block 0005 [ 79]: a099c26f48aea2d2 -Block 0005 [ 80]: 489b23555922b0cd -Block 0005 [ 81]: 275e8c7c9e772d38 -Block 0005 [ 82]: 173510ec47a69499 -Block 0005 [ 83]: 7cd31916cc558393 -Block 0005 [ 84]: 3f30016de11fafaa -Block 0005 [ 85]: f5b2e0ba7f14b171 -Block 0005 [ 86]: bfef8224ae7a0a51 -Block 0005 [ 87]: 8de95384bae75e40 -Block 0005 [ 88]: 3b666c78a48b30d0 -Block 0005 [ 89]: fd2321a748238c90 -Block 0005 [ 90]: 69fdab228d29478a -Block 0005 [ 91]: e0103afd01ceacd7 -Block 0005 [ 92]: 8b9ea3e23dd777e9 -Block 0005 [ 93]: 08635e8e5113bb4a -Block 0005 [ 94]: 3d315ca4675a44b1 -Block 0005 [ 95]: b20e22e6f65e1102 -Block 0005 [ 96]: a038d3ea447aa7fe -Block 0005 [ 97]: 0882a3723c4de776 -Block 0005 [ 98]: 575df4bf97ea305b -Block 0005 [ 99]: d98ea42ef107f0f0 -Block 0005 [100]: 0cba1d48f83867e7 -Block 0005 [101]: 649696d1781d2d95 -Block 0005 [102]: 9510c80999da84f7 -Block 0005 [103]: ce2f3c2d0f0d3ce2 -Block 0005 [104]: 2f30fa615e5a6c65 -Block 0005 [105]: 3c8589ad2c05e3e6 -Block 0005 [106]: c3576d16bf3517eb -Block 0005 [107]: 9b74bfbfe2f00fdf -Block 0005 [108]: b790e014dad1acdd -Block 0005 [109]: 29487c81893a5b04 -Block 0005 [110]: 4cc9f4f313fd7fc4 -Block 0005 [111]: a04f0d2766655766 -Block 0005 [112]: 0902eed758e7d367 -Block 0005 [113]: b1fcd9d76e1b30c8 -Block 0005 [114]: aa4f588a3a4aac13 -Block 0005 [115]: 0e57ff97e192f16e -Block 0005 [116]: 570393a65214975e -Block 0005 [117]: fe2abc9fb39a3db3 -Block 0005 [118]: 5833d62b97534288 -Block 0005 [119]: 452997ed754f9159 -Block 0005 [120]: 5befe711f63a4ed4 -Block 0005 [121]: f7ec83aff1f3c8ef -Block 0005 [122]: bbb5bd1ed3e4a6b5 -Block 0005 [123]: 45589b32b3e51e9d -Block 0005 [124]: 5fcd06dcf0473856 -Block 0005 [125]: c450164cff4ffeae -Block 0005 [126]: c64495c818121aa9 -Block 0005 [127]: 9fc7e86dc33cd2f3 -Block 0006 [ 0]: 6a3b43a71fe61a9d -Block 0006 [ 1]: 65dc6f99a409b85f -Block 0006 [ 2]: 3bfb666d815258ae -Block 0006 [ 3]: f86ce9ab75ffde48 -Block 0006 [ 4]: 3314c1be16a6df50 -Block 0006 [ 5]: 4d306e1ec94e6edb -Block 0006 [ 6]: 43402b6d6db3fc24 -Block 0006 [ 7]: 7b0149cc45cfcd7b -Block 0006 [ 8]: f6bbdd7398ec689d -Block 0006 [ 9]: 238319ac77ccc6c6 -Block 0006 [ 10]: fc36c2be2be64d9a -Block 0006 [ 11]: b090143eeed5bde4 -Block 0006 [ 12]: b865b75955c172e0 -Block 0006 [ 13]: ac328bf104acb8c7 -Block 0006 [ 14]: 7ca6c932408f7981 -Block 0006 [ 15]: c48572b8cb7807b1 -Block 0006 [ 16]: ea7fd8ba0749e76f -Block 0006 [ 17]: eb0842a6a483c361 -Block 0006 [ 18]: 4cd81bc9b5b020b2 -Block 0006 [ 19]: e69b3e81d49cbb97 -Block 0006 [ 20]: cc2c403448ef287f -Block 0006 [ 21]: 5dbd5c6f2cc79089 -Block 0006 [ 22]: 8ce898ea5ed001b1 -Block 0006 [ 23]: a4a8fbf4399e580e -Block 0006 [ 24]: b266b33d76edabdd -Block 0006 [ 25]: 72861366950e1b06 -Block 0006 [ 26]: 12fb10321bf4e848 -Block 0006 [ 27]: 1483bf9793e16cac -Block 0006 [ 28]: bb3ad110fc9f9c9c -Block 0006 [ 29]: 7d9a1aa5cdab1074 -Block 0006 [ 30]: bf36d5753f1f3ad2 -Block 0006 [ 31]: 3467a9be322905a2 -Block 0006 [ 32]: 0e82a639e7b7e4d7 -Block 0006 [ 33]: 0e5ba0c9c730232e -Block 0006 [ 34]: 67184bbc003e15cb -Block 0006 [ 35]: 9b18396759ec49be -Block 0006 [ 36]: 663b4946e9a5969a -Block 0006 [ 37]: 410edc3cb9af3358 -Block 0006 [ 38]: b9df4e421d49fe3e -Block 0006 [ 39]: 7a438d221e257b59 -Block 0006 [ 40]: e0694ab5116881b9 -Block 0006 [ 41]: b73f3da5c0327d16 -Block 0006 [ 42]: ab045a79f78afe15 -Block 0006 [ 43]: dd4b109852035a50 -Block 0006 [ 44]: 82a051573f849056 -Block 0006 [ 45]: de6f5c7607962384 -Block 0006 [ 46]: 097933cffaf24632 -Block 0006 [ 47]: 2b80ece7ee4995a9 -Block 0006 [ 48]: 346dc5c2df8b4418 -Block 0006 [ 49]: eb61689e0bc584fd -Block 0006 [ 50]: b3bc2fa36dd52ef2 -Block 0006 [ 51]: 7822e567796619e5 -Block 0006 [ 52]: dfee366e46cf7b59 -Block 0006 [ 53]: a12c1e7450428bfc -Block 0006 [ 54]: c9df1ad369529065 -Block 0006 [ 55]: 83e046722a7ddf69 -Block 0006 [ 56]: 1e3d5f066847e240 -Block 0006 [ 57]: c640f33eb71ea4a6 -Block 0006 [ 58]: a462476761bc6aa7 -Block 0006 [ 59]: 9a9397e75b7e150c -Block 0006 [ 60]: c459d118bfadc25b -Block 0006 [ 61]: a53c8b75dce6dab0 -Block 0006 [ 62]: 10f1f11a7f7ae936 -Block 0006 [ 63]: c734b2a1de8c7b42 -Block 0006 [ 64]: 118e5468ccfd0f3c -Block 0006 [ 65]: ab57d27c81dacbb0 -Block 0006 [ 66]: 78d2e6c45ae1e7e3 -Block 0006 [ 67]: 5d27d4f803340141 -Block 0006 [ 68]: 96c66baf2f146389 -Block 0006 [ 69]: e566ced7ba2cddae -Block 0006 [ 70]: 3c012d4bd72c0348 -Block 0006 [ 71]: baf38d9b8e04daff -Block 0006 [ 72]: f6feed25399edac5 -Block 0006 [ 73]: 478b5cc3dcd96f42 -Block 0006 [ 74]: ae74579919b6fc92 -Block 0006 [ 75]: 51fc1fa68ac1f1db -Block 0006 [ 76]: fa3ed06ccadd40b5 -Block 0006 [ 77]: 1db8e7cd61efa227 -Block 0006 [ 78]: b3cfa541a286c6c3 -Block 0006 [ 79]: 3272804c4fe3bf91 -Block 0006 [ 80]: 0080c0901626b2fa -Block 0006 [ 81]: af0da6e3aead2853 -Block 0006 [ 82]: 7e21db22722f0e3c -Block 0006 [ 83]: ab683cc97e8da7db -Block 0006 [ 84]: 27263c6eac0c9972 -Block 0006 [ 85]: ceccc3f5227ea80a -Block 0006 [ 86]: 01831837084a501b -Block 0006 [ 87]: 70b067419f21b827 -Block 0006 [ 88]: 65cea757322ba00c -Block 0006 [ 89]: 41c1a0ff8b0c3f32 -Block 0006 [ 90]: 3712715a850f2838 -Block 0006 [ 91]: 2ac61cb666e74a4a -Block 0006 [ 92]: 493189c0f8d7596d -Block 0006 [ 93]: e2bb69d85549becf -Block 0006 [ 94]: 51c73d8bf21898ee -Block 0006 [ 95]: bdb01d4cae47277f -Block 0006 [ 96]: bc2a923ed80017d4 -Block 0006 [ 97]: 87a1c6c4d38c5e8e -Block 0006 [ 98]: 4cd2b7721dca75ea -Block 0006 [ 99]: 1b7ea031a5808da9 -Block 0006 [100]: feb8ddd109ac72b9 -Block 0006 [101]: c4130e2bf97ea60d -Block 0006 [102]: c63b7d61a4388b9c -Block 0006 [103]: 314db246c472fea4 -Block 0006 [104]: cb33dc35d7857304 -Block 0006 [105]: 9c79fae6464d9639 -Block 0006 [106]: 370775c05750999a -Block 0006 [107]: cc59cd15aff3fcf9 -Block 0006 [108]: 72c7a887702ef86c -Block 0006 [109]: 2eba1082d8d310dc -Block 0006 [110]: e5df92c0479c82a7 -Block 0006 [111]: 925fd4e76d8f9aa9 -Block 0006 [112]: cf517f3178d8e581 -Block 0006 [113]: 58d49010da08f568 -Block 0006 [114]: 0b424f5aa96687e0 -Block 0006 [115]: 05937aa9fa4dbbc5 -Block 0006 [116]: e439bf60bb1ab810 -Block 0006 [117]: f6ed43b26a6e203f -Block 0006 [118]: e6fa12f52fe77030 -Block 0006 [119]: cca64264e6d574c0 -Block 0006 [120]: d777282f425ea35e -Block 0006 [121]: 06ffcf55bf74e8a9 -Block 0006 [122]: 4302e2530cef5824 -Block 0006 [123]: 101bb2ae18dbf8e7 -Block 0006 [124]: 35ed76e0f0d3521e -Block 0006 [125]: 707fd23042d46e34 -Block 0006 [126]: 8ad45ad78d5bd6b1 -Block 0006 [127]: 090f7d08b06abe8d -Block 0007 [ 0]: 59e479e05f916b33 -Block 0007 [ 1]: d170629134a24177 -Block 0007 [ 2]: c5a78cf1009b05c1 -Block 0007 [ 3]: 83a9dcb5e2ec7231 -Block 0007 [ 4]: 1616b9f12a99a638 -Block 0007 [ 5]: 02fbd63ddf2af667 -Block 0007 [ 6]: f5c20436df6ca8ca -Block 0007 [ 7]: 08cbe91a8e8b7aeb -Block 0007 [ 8]: e99eaa8eed7ad3c4 -Block 0007 [ 9]: 6d76bb05e62f8041 -Block 0007 [ 10]: 43417e37d6ac6c02 -Block 0007 [ 11]: ff20ea03c37e7778 -Block 0007 [ 12]: dcfc35fd7cb8b236 -Block 0007 [ 13]: 6e73ef79ad4921b5 -Block 0007 [ 14]: a128f0bbad4dc092 -Block 0007 [ 15]: 819290ea07d314a1 -Block 0007 [ 16]: 3233cce2c9759135 -Block 0007 [ 17]: f8dc66d2d321fb10 -Block 0007 [ 18]: 66902d9a98315fde -Block 0007 [ 19]: 9afbc0551c0d1f7e -Block 0007 [ 20]: d6e8f5ff43afebed -Block 0007 [ 21]: f95778ae0fc77151 -Block 0007 [ 22]: 1837f0f3b7a76f9d -Block 0007 [ 23]: 605f3328875eec26 -Block 0007 [ 24]: 1eb6a84483461d88 -Block 0007 [ 25]: 21298bbe36e17930 -Block 0007 [ 26]: 1a8829e5cabfe38b -Block 0007 [ 27]: b9edb6a15d084218 -Block 0007 [ 28]: 85746018776d8a75 -Block 0007 [ 29]: bde38b66cb6021e3 -Block 0007 [ 30]: bc642e63ab6a6c04 -Block 0007 [ 31]: e76312b76b9a6c68 -Block 0007 [ 32]: e43d533d4d6c4221 -Block 0007 [ 33]: fc0bcfda1ea9bdc0 -Block 0007 [ 34]: e4005e3b2d530103 -Block 0007 [ 35]: b3b9e8837034900f -Block 0007 [ 36]: dfe56aa81655556e -Block 0007 [ 37]: 8ad6a320388c6d3f -Block 0007 [ 38]: 9ae987a2539bd378 -Block 0007 [ 39]: 1576f25b6c489173 -Block 0007 [ 40]: ec1a591044807eae -Block 0007 [ 41]: 0f99146dc1860c2b -Block 0007 [ 42]: 536637bf1e4fe122 -Block 0007 [ 43]: f4999739b04901e1 -Block 0007 [ 44]: 650f99cf58618218 -Block 0007 [ 45]: 9a1ae560b1ac7f46 -Block 0007 [ 46]: 80cf15b71c2fb100 -Block 0007 [ 47]: 124cd01eab0338ab -Block 0007 [ 48]: 046fe5ecba1b7e0f -Block 0007 [ 49]: f74a03ad56db554a -Block 0007 [ 50]: 8153889b066fb09c -Block 0007 [ 51]: 283033056c99b707 -Block 0007 [ 52]: 0c21b5f77978d727 -Block 0007 [ 53]: 866031cd62857a99 -Block 0007 [ 54]: 6f97e8f3138a4e11 -Block 0007 [ 55]: c8d25173bc0a3c50 -Block 0007 [ 56]: 82ca24fa507cbf0c -Block 0007 [ 57]: c357faf33c66cfcf -Block 0007 [ 58]: 064f0616fccfd6a5 -Block 0007 [ 59]: 9bf3f89a6d1354f3 -Block 0007 [ 60]: cc7cff8a4d27620b -Block 0007 [ 61]: c9fb56f1b1669a97 -Block 0007 [ 62]: a89f350519d56943 -Block 0007 [ 63]: 5c400048568d631d -Block 0007 [ 64]: a96bf018d584151f -Block 0007 [ 65]: 0a3035ab955a79a5 -Block 0007 [ 66]: a19d60cbbe48f711 -Block 0007 [ 67]: f5b135b6f8c2e8a6 -Block 0007 [ 68]: 33270a12add9e641 -Block 0007 [ 69]: 8c224ab20be246e3 -Block 0007 [ 70]: 60df4727935eb9ce -Block 0007 [ 71]: 9b5141d124ec88cf -Block 0007 [ 72]: bcf91ee278b6e202 -Block 0007 [ 73]: 3dcd55a57ff9f5eb -Block 0007 [ 74]: 1dce42dba8d41d03 -Block 0007 [ 75]: 6f383dd35cdec94e -Block 0007 [ 76]: 36ce0d873d5c1de8 -Block 0007 [ 77]: 26d0c0004b6f19c4 -Block 0007 [ 78]: e618af3d62fee3a5 -Block 0007 [ 79]: 345492f55b4e985c -Block 0007 [ 80]: 6e4a85c1607b2c4b -Block 0007 [ 81]: 52dd856c7bb5efa4 -Block 0007 [ 82]: 52dcb46b9c209104 -Block 0007 [ 83]: 32717127c3ee487a -Block 0007 [ 84]: 312697b5cf52940e -Block 0007 [ 85]: 2dcb97fcc018a163 -Block 0007 [ 86]: 177d895c77466d2f -Block 0007 [ 87]: 6e61c547bfb37079 -Block 0007 [ 88]: a59b315fa1be5b68 -Block 0007 [ 89]: 87d66bc90afb2ca6 -Block 0007 [ 90]: 8cf85500edeee702 -Block 0007 [ 91]: ecbbab4d2133b00c -Block 0007 [ 92]: b26d33321ac1abc3 -Block 0007 [ 93]: b4a52773a6207e7d -Block 0007 [ 94]: a209c5896bc6f12a -Block 0007 [ 95]: 41fb84a301cff0c3 -Block 0007 [ 96]: 09cdf552c77b557d -Block 0007 [ 97]: 1e52df18ab3dfb9a -Block 0007 [ 98]: 57fd74a68ad68378 -Block 0007 [ 99]: 07227e916b0f5996 -Block 0007 [100]: 32ef2531400d1b35 -Block 0007 [101]: 4fc2dc41f7b23ff4 -Block 0007 [102]: 0b020da0feb2a228 -Block 0007 [103]: 5cfc2db650991a48 -Block 0007 [104]: f81c0cd56cb9c08f -Block 0007 [105]: e60e21da2ebb7ce8 -Block 0007 [106]: 268739ac9bca060a -Block 0007 [107]: 92cd1e2104e368c5 -Block 0007 [108]: 98156dc095f52233 -Block 0007 [109]: 30f247cf0f011fa1 -Block 0007 [110]: 66f829551d2e0a3e -Block 0007 [111]: ea52274d79ff571e -Block 0007 [112]: acb6d370148653a4 -Block 0007 [113]: 3669b3147dfe731a -Block 0007 [114]: 1c8bdda97133b4ad -Block 0007 [115]: 0cc5dd86167dbc1b -Block 0007 [116]: dd0aa6d96f923c39 -Block 0007 [117]: 512fe7564b090b61 -Block 0007 [118]: c86816c60da06a46 -Block 0007 [119]: dedf55b9d5f4268e -Block 0007 [120]: d29c4a93d713b733 -Block 0007 [121]: f87604f8f94f5aea -Block 0007 [122]: 97d9788450105075 -Block 0007 [123]: 54e489cefdbfb9e0 -Block 0007 [124]: 934701adf12d8e81 -Block 0007 [125]: 95bc8d473335a595 -Block 0007 [126]: fab387b04eacbaaf -Block 0007 [127]: fc3e56a297370c38 -Block 0008 [ 0]: 282145945f12ecd3 -Block 0008 [ 1]: 1ac1aa0b5c30acd6 -Block 0008 [ 2]: 60f8604f21e73053 -Block 0008 [ 3]: 763bbde8b3025afe -Block 0008 [ 4]: 19813cdc34768a0d -Block 0008 [ 5]: 6c91e7d7cca6e347 -Block 0008 [ 6]: 3f049f472508cc53 -Block 0008 [ 7]: e0ffa88d72bebdc2 -Block 0008 [ 8]: de17f817893dfa9c -Block 0008 [ 9]: 2d63b8df6cdea739 -Block 0008 [ 10]: a7d7bc228a9b0279 -Block 0008 [ 11]: f07ab3a91ba1cba8 -Block 0008 [ 12]: 41a0157563872217 -Block 0008 [ 13]: c109c12ad61ddba8 -Block 0008 [ 14]: ecb3deb6a4142e08 -Block 0008 [ 15]: 2a932539267a41ae -Block 0008 [ 16]: 6d3a62fc8d00e500 -Block 0008 [ 17]: f0e439bef2eb6c6e -Block 0008 [ 18]: 1dd011595308ac57 -Block 0008 [ 19]: d60a8d118a649d8d -Block 0008 [ 20]: 37af5bc5a580eeed -Block 0008 [ 21]: 547777804b31ac21 -Block 0008 [ 22]: ceeaa2b7bc51f419 -Block 0008 [ 23]: 680d345e4dfeffa3 -Block 0008 [ 24]: 3047a84a4e3c615f -Block 0008 [ 25]: fc7b6f9717120164 -Block 0008 [ 26]: a106a1af037e2478 -Block 0008 [ 27]: f1d93c81c3d5999e -Block 0008 [ 28]: f5a65b33b2538b91 -Block 0008 [ 29]: 934f66c72c8f525d -Block 0008 [ 30]: dae4e5dffbac54bc -Block 0008 [ 31]: afb603ae332283d2 -Block 0008 [ 32]: af3f345a59ad6951 -Block 0008 [ 33]: bb3ecdfb2eb1d571 -Block 0008 [ 34]: 5ccc9de9818c13d0 -Block 0008 [ 35]: faf5de9da827896e -Block 0008 [ 36]: 952eb0543c6eaa82 -Block 0008 [ 37]: 2137bd47cd8e8d2e -Block 0008 [ 38]: 4767e8759b44592d -Block 0008 [ 39]: 7d5c195b08c35bf9 -Block 0008 [ 40]: 070453b9d1fa6fe1 -Block 0008 [ 41]: 210fb2c38527d6a2 -Block 0008 [ 42]: 6d0e9f7449f23c3e -Block 0008 [ 43]: bac26f89bffad658 -Block 0008 [ 44]: 25ac007e672ee346 -Block 0008 [ 45]: a3c85973642a0166 -Block 0008 [ 46]: 3a925b7f8ad6e011 -Block 0008 [ 47]: 15e0badde1d99090 -Block 0008 [ 48]: 42bf9c540f2e1394 -Block 0008 [ 49]: c2029ee97cd9c915 -Block 0008 [ 50]: 1927c36c7f975006 -Block 0008 [ 51]: 73fa08166e0f1951 -Block 0008 [ 52]: 1aa1638331153336 -Block 0008 [ 53]: a0d8ba67e8d3832c -Block 0008 [ 54]: 5a35f3574b0ecadc -Block 0008 [ 55]: b29d225c180b9d7f -Block 0008 [ 56]: e360ba0f450119ef -Block 0008 [ 57]: 0451064565c02bc1 -Block 0008 [ 58]: 3e41001b8b0e0bbd -Block 0008 [ 59]: 8ca745962358496c -Block 0008 [ 60]: 6fcee749ec5a01f4 -Block 0008 [ 61]: f74dc0b916dd8578 -Block 0008 [ 62]: d79d32fb1ac52b9a -Block 0008 [ 63]: 91c3f4695bb05f08 -Block 0008 [ 64]: aea5311cde98edcb -Block 0008 [ 65]: 29681dca687cb503 -Block 0008 [ 66]: 5ed29cfcf4a05c65 -Block 0008 [ 67]: 69996409342ed84f -Block 0008 [ 68]: 1eb369993397ea34 -Block 0008 [ 69]: abe7f5d61d819f02 -Block 0008 [ 70]: 128ac7ec2988131d -Block 0008 [ 71]: cbf98166be45c13b -Block 0008 [ 72]: 3eb0cc4cf3ffc15b -Block 0008 [ 73]: 4be0eb7cdc596327 -Block 0008 [ 74]: a53dfb2e9c4f1572 -Block 0008 [ 75]: 97628a447584028d -Block 0008 [ 76]: ad8efb47b9527bda -Block 0008 [ 77]: d898345e003d8bfc -Block 0008 [ 78]: aed572ff49f824da -Block 0008 [ 79]: effdfb03ca6d262b -Block 0008 [ 80]: 5c76b7e719d4b092 -Block 0008 [ 81]: 3fbc5d75533377a0 -Block 0008 [ 82]: c3e9be1e87fff04f -Block 0008 [ 83]: 6fd35d2bfd653013 -Block 0008 [ 84]: 8ae6fc6a2a959fe9 -Block 0008 [ 85]: 16c177dac219e4bb -Block 0008 [ 86]: b778cfd1541b7d86 -Block 0008 [ 87]: 71cdb864322493fd -Block 0008 [ 88]: c84ee1bb3002781c -Block 0008 [ 89]: cd3f3001e43f22f2 -Block 0008 [ 90]: ee0723c7e3fa57fa -Block 0008 [ 91]: 3b7905f9889f12ce -Block 0008 [ 92]: 201c9588c929d89e -Block 0008 [ 93]: b1537c7fb54bdfd3 -Block 0008 [ 94]: e258a3bc1d698cf3 -Block 0008 [ 95]: 83255c867a2e8677 -Block 0008 [ 96]: 0279b6538a409fcf -Block 0008 [ 97]: f74290c084079691 -Block 0008 [ 98]: 0632ffc7e37ad8d9 -Block 0008 [ 99]: a200d59ee03ea9d6 -Block 0008 [100]: 46803d61b515f08c -Block 0008 [101]: 6cf535987406656a -Block 0008 [102]: 3995a42c92cc7966 -Block 0008 [103]: 85df03e49bfe47d5 -Block 0008 [104]: 6cceb87dee9aa0c9 -Block 0008 [105]: fc9d31d40341a15e -Block 0008 [106]: 0a180adfadc6356c -Block 0008 [107]: 0e058b8ef724d830 -Block 0008 [108]: f2245297d8482ccf -Block 0008 [109]: b9f1451dc3145bbf -Block 0008 [110]: d0b4ffdea62b3e54 -Block 0008 [111]: 88212eb7971b3f49 -Block 0008 [112]: 10fedd9fe29e14bb -Block 0008 [113]: e3cbbff144f56d12 -Block 0008 [114]: 767f4fd28abed05a -Block 0008 [115]: a6b2027a43f64775 -Block 0008 [116]: ba11fb9502d4a9b6 -Block 0008 [117]: 89729444846e3174 -Block 0008 [118]: cc5ce515d1e99aae -Block 0008 [119]: d46cb5dcdecb9520 -Block 0008 [120]: eb33b12794818b53 -Block 0008 [121]: 6dc4bef6e24fdbfe -Block 0008 [122]: 79c4cad4c865e91a -Block 0008 [123]: f42028b04d0dbbd4 -Block 0008 [124]: 6b0fe2e42e2c8d5e -Block 0008 [125]: 6efc4e74787fb7ad -Block 0008 [126]: 62e777191870974b -Block 0008 [127]: b637d492fff7bf5b -Block 0009 [ 0]: b51ebc1ce5c54587 -Block 0009 [ 1]: f24cfd2d28416a55 -Block 0009 [ 2]: a56be5bda1d10f36 -Block 0009 [ 3]: 1a5f620482fa56e5 -Block 0009 [ 4]: c8cd41bdc76c0502 -Block 0009 [ 5]: 38253d2c027e8ff2 -Block 0009 [ 6]: 89af4f4315191f22 -Block 0009 [ 7]: 77cfcb90bfcb4c5c -Block 0009 [ 8]: 86dd4fda752a6933 -Block 0009 [ 9]: 478a200eb9585357 -Block 0009 [ 10]: 904df51f016d77d7 -Block 0009 [ 11]: 42f6090334873cf3 -Block 0009 [ 12]: 1d0acdb372df3f75 -Block 0009 [ 13]: 6d882e7dee617c83 -Block 0009 [ 14]: 903ec926348998cb -Block 0009 [ 15]: e77922f31cf1b89a -Block 0009 [ 16]: f1f1f3e73eec2745 -Block 0009 [ 17]: 5ba312d7d83b2883 -Block 0009 [ 18]: 5ff76517a1633867 -Block 0009 [ 19]: 41af74d8f12e3e1d -Block 0009 [ 20]: fdc04bd78cfa38a5 -Block 0009 [ 21]: 720cbde8e8dfd8fb -Block 0009 [ 22]: 346652d8064f3f80 -Block 0009 [ 23]: 317b0d033c38db97 -Block 0009 [ 24]: 718f7f0c4bf7e910 -Block 0009 [ 25]: e17fda1c6a8e6ec2 -Block 0009 [ 26]: 3884b2a7782be170 -Block 0009 [ 27]: 0b28a061c237c26e -Block 0009 [ 28]: adbb8d0872b20abf -Block 0009 [ 29]: 2fc555b807f6da68 -Block 0009 [ 30]: 2429a5e8fa7514a9 -Block 0009 [ 31]: dd89d41b0bfe36de -Block 0009 [ 32]: b7d1955a2e89df52 -Block 0009 [ 33]: 60a53a7e0095b3df -Block 0009 [ 34]: bbe12271d25326dd -Block 0009 [ 35]: 7383edb8add93339 -Block 0009 [ 36]: d2c1340e78b8eb9b -Block 0009 [ 37]: 48bb9b6bdddd1978 -Block 0009 [ 38]: bfc99101cf8a0151 -Block 0009 [ 39]: 2e3d430da5248b01 -Block 0009 [ 40]: 714972754e2a3b17 -Block 0009 [ 41]: 980bcc89c6b68d41 -Block 0009 [ 42]: b0bc1736129cd3da -Block 0009 [ 43]: b5e11d28394e62d4 -Block 0009 [ 44]: 66e520fd1c988ac5 -Block 0009 [ 45]: dedd7c5e4748fc1c -Block 0009 [ 46]: 996ff3699d168445 -Block 0009 [ 47]: dd6c882d28be792d -Block 0009 [ 48]: 8523e263ddc58b4a -Block 0009 [ 49]: 179e9ec6d8182cd1 -Block 0009 [ 50]: e9cef718f9504909 -Block 0009 [ 51]: 3b898f007e372a80 -Block 0009 [ 52]: 08a283c2f650064c -Block 0009 [ 53]: 810fefdccd438bda -Block 0009 [ 54]: d5e8770991d2486f -Block 0009 [ 55]: fc1ae28b281de523 -Block 0009 [ 56]: 736f486afd0d647a -Block 0009 [ 57]: bb2be00d646a5185 -Block 0009 [ 58]: 1ca35ad8ceb99210 -Block 0009 [ 59]: 48eacc4e7cb83759 -Block 0009 [ 60]: 3e1dcd336966003c -Block 0009 [ 61]: 9275a2b29941257c -Block 0009 [ 62]: 257e1a89c6d4c1cd -Block 0009 [ 63]: 8c8f67a882805a33 -Block 0009 [ 64]: e5fe75eda295409d -Block 0009 [ 65]: bfdcafe10fdb456f -Block 0009 [ 66]: 40ad88568c584e13 -Block 0009 [ 67]: fa20866a2766c7fe -Block 0009 [ 68]: b310c6d79e568ffb -Block 0009 [ 69]: 503d9253aff998e4 -Block 0009 [ 70]: 495f296b6b61f264 -Block 0009 [ 71]: beef0e82653e020f -Block 0009 [ 72]: be4811e8488ffd1e -Block 0009 [ 73]: 14fb1ffd5fd037e4 -Block 0009 [ 74]: 8afac21754fba78e -Block 0009 [ 75]: d8d9734e8005d3dc -Block 0009 [ 76]: bde1976942530836 -Block 0009 [ 77]: 5a36cfa5bc85404f -Block 0009 [ 78]: 3efcdd865f2ef595 -Block 0009 [ 79]: 8503f12ded4ba3a2 -Block 0009 [ 80]: 8b550ac564227c3c -Block 0009 [ 81]: 3b72f71db910d566 -Block 0009 [ 82]: bc422a71f193fb78 -Block 0009 [ 83]: ac534f6fc1e09dff -Block 0009 [ 84]: ad0b10c5fb42fc0b -Block 0009 [ 85]: 52a2d4dcf13d5e0a -Block 0009 [ 86]: df202d34863e7be9 -Block 0009 [ 87]: 09e4eb0e6fd242ac -Block 0009 [ 88]: cd33e3660e9c1a73 -Block 0009 [ 89]: b6e4d387310b7df0 -Block 0009 [ 90]: f1d8514afa7b45d3 -Block 0009 [ 91]: cf750fb315193dc3 -Block 0009 [ 92]: 0d1f7681fe88f783 -Block 0009 [ 93]: e2580891465c28f6 -Block 0009 [ 94]: 81edf01e45e5303a -Block 0009 [ 95]: 972e459a0b4b78a1 -Block 0009 [ 96]: 73d4b4cd70e66a45 -Block 0009 [ 97]: e8ae9b153e316496 -Block 0009 [ 98]: c5bf4b57c7ee3cf7 -Block 0009 [ 99]: 5f0e59387d54969e -Block 0009 [100]: 4f06752cd7252de1 -Block 0009 [101]: 8a206fbc01509988 -Block 0009 [102]: c9d48b8fbd5b7adc -Block 0009 [103]: dd331a619ec7fd24 -Block 0009 [104]: ce99e40346f40515 -Block 0009 [105]: bc258259f1ff919c -Block 0009 [106]: 3007e9ff3fe6a502 -Block 0009 [107]: 4c9bc60f05fe4dd6 -Block 0009 [108]: fcee0af0e0ab22b0 -Block 0009 [109]: 7bf90ecf20597b49 -Block 0009 [110]: 14c6e9adffbcb2cc -Block 0009 [111]: 57d24e03ac4a9495 -Block 0009 [112]: 6265cd2145acfcbb -Block 0009 [113]: 462777e67b621ec4 -Block 0009 [114]: d83e82f38e7f7089 -Block 0009 [115]: 8240ac135c1961cf -Block 0009 [116]: 9b5cfa591d26ff97 -Block 0009 [117]: 23fc3a587408818a -Block 0009 [118]: a406f4578dc58fca -Block 0009 [119]: 8997f1c33e411d00 -Block 0009 [120]: 8908c3f119cf398d -Block 0009 [121]: 7ca9090945d56951 -Block 0009 [122]: a3d87d8e207ed64d -Block 0009 [123]: 8ce2e01f7a194ebc -Block 0009 [124]: 70231c9ccdb58341 -Block 0009 [125]: 2b3dea3311b02815 -Block 0009 [126]: bdebaed5c4dc0a02 -Block 0009 [127]: 84af05b1e80139c5 -Block 0010 [ 0]: f173509e8c6951f0 -Block 0010 [ 1]: 5ecae05ac3a7f094 -Block 0010 [ 2]: 87b04b90fb412faf -Block 0010 [ 3]: 9d7a4584deb3c1bc -Block 0010 [ 4]: 938349d693eabff7 -Block 0010 [ 5]: e51daa894d1b1d86 -Block 0010 [ 6]: 7839e531eb3ef150 -Block 0010 [ 7]: dcc8bac832dd9263 -Block 0010 [ 8]: 503f31984a22a73d -Block 0010 [ 9]: 32dd0cf3b1a6f6da -Block 0010 [ 10]: 6232dd0ddf1f293a -Block 0010 [ 11]: c08cf7243d71db15 -Block 0010 [ 12]: 9dd223a71d553c7e -Block 0010 [ 13]: e705405f11c0c88a -Block 0010 [ 14]: a76cbcff056ea623 -Block 0010 [ 15]: 4211d6067c63e4ea -Block 0010 [ 16]: e38b95c43b6c8c42 -Block 0010 [ 17]: fa039b85f4e37025 -Block 0010 [ 18]: c7641d8b3c1d3d27 -Block 0010 [ 19]: a168373a6246e3b1 -Block 0010 [ 20]: 1c29f3c317d4a842 -Block 0010 [ 21]: 0e112c2b5002251c -Block 0010 [ 22]: 35edabf640a1a4be -Block 0010 [ 23]: fbece5e62986f45e -Block 0010 [ 24]: a0300d91ab35e389 -Block 0010 [ 25]: 2307aae53bb6cdff -Block 0010 [ 26]: 8ff7b4bbe121ebe8 -Block 0010 [ 27]: 9fa0f247c76473b3 -Block 0010 [ 28]: b3fba8860e65096e -Block 0010 [ 29]: bc5fae00925aa4bd -Block 0010 [ 30]: e45c0c1a94a0716e -Block 0010 [ 31]: 81e3abe71ec403bc -Block 0010 [ 32]: 8cf7ad3248baf5d4 -Block 0010 [ 33]: 42a689d358de4862 -Block 0010 [ 34]: 722e6ab07bb13dd4 -Block 0010 [ 35]: 4925a4d2c005727a -Block 0010 [ 36]: c15fd84720b2611a -Block 0010 [ 37]: d4d87de5205dfb30 -Block 0010 [ 38]: 22b28aa75745fc2d -Block 0010 [ 39]: 749dc8d5598179a6 -Block 0010 [ 40]: eeaa16e0659e0192 -Block 0010 [ 41]: fa25ab267613034e -Block 0010 [ 42]: 4508a5f87fe32a35 -Block 0010 [ 43]: 9540fef3fc000dac -Block 0010 [ 44]: 0541345b4b35787d -Block 0010 [ 45]: b6d197f33253019b -Block 0010 [ 46]: 40c00ee49dabe233 -Block 0010 [ 47]: 10dcffe3f4d84140 -Block 0010 [ 48]: 6f6504bd4202b80b -Block 0010 [ 49]: 4910aadb5d995e14 -Block 0010 [ 50]: 3be7598ad6b7b00f -Block 0010 [ 51]: 16d760387217d677 -Block 0010 [ 52]: 157c2603fb94d372 -Block 0010 [ 53]: 245a425507040bbd -Block 0010 [ 54]: 53119479f5874f90 -Block 0010 [ 55]: bf6f9b8692f0b837 -Block 0010 [ 56]: 0049c75dfc7dc720 -Block 0010 [ 57]: f238ae4395b094b4 -Block 0010 [ 58]: 2dcb2348df0bd8e1 -Block 0010 [ 59]: 3210cccdb289293f -Block 0010 [ 60]: 51c7facbf4d63c99 -Block 0010 [ 61]: eff7c07dfef9e59d -Block 0010 [ 62]: f2ab55b9e629297f -Block 0010 [ 63]: 8edf75faa3478b49 -Block 0010 [ 64]: 774ecc317f36cfe1 -Block 0010 [ 65]: db216cef5837ca17 -Block 0010 [ 66]: e9cd3059b825aae6 -Block 0010 [ 67]: f46039c3d87aeb33 -Block 0010 [ 68]: 420dd68f9b66827a -Block 0010 [ 69]: 34f07ae5e76d6e8a -Block 0010 [ 70]: d5ac5c911584d4cb -Block 0010 [ 71]: 058f82cec99756b0 -Block 0010 [ 72]: d11c2004749ba930 -Block 0010 [ 73]: 9f1ff374580eb6c0 -Block 0010 [ 74]: 9f957fa50da0b9f3 -Block 0010 [ 75]: 1c44951395918e91 -Block 0010 [ 76]: 7111b1a8aae6be7f -Block 0010 [ 77]: 0ab3388f275426ef -Block 0010 [ 78]: 26fc0217e12d62d0 -Block 0010 [ 79]: f2ce2aa321c90437 -Block 0010 [ 80]: 4fda333183fd6655 -Block 0010 [ 81]: e019af98f13ee4d9 -Block 0010 [ 82]: 6bab83f3f92f653b -Block 0010 [ 83]: ffee52f49e2f42a8 -Block 0010 [ 84]: f150c70d8514a7e6 -Block 0010 [ 85]: 806c48b29ace438b -Block 0010 [ 86]: 6c9f59490dc47c0c -Block 0010 [ 87]: d2da0113cc468eec -Block 0010 [ 88]: acd3870091fa11ae -Block 0010 [ 89]: b3349dd058479c88 -Block 0010 [ 90]: 9802b3b860a9a3cb -Block 0010 [ 91]: 00e0840446d6776e -Block 0010 [ 92]: 57ef8b24e3d3cd3e -Block 0010 [ 93]: 9eb466c964e0fe56 -Block 0010 [ 94]: 5a73a0ddbf0b8322 -Block 0010 [ 95]: bf5e064687ff3f2f -Block 0010 [ 96]: 5657e143ddc3b17c -Block 0010 [ 97]: fcf05095a8320084 -Block 0010 [ 98]: f9f69e9b630ee96a -Block 0010 [ 99]: f1c9e9bdbe357cdd -Block 0010 [100]: 77103f2471d037dc -Block 0010 [101]: 270fbe363e682e11 -Block 0010 [102]: e26bcc409254504e -Block 0010 [103]: f090445c6daa8d1d -Block 0010 [104]: f2b96cf4bd3aee9d -Block 0010 [105]: d4b5c4138079400b -Block 0010 [106]: 851896bd06456429 -Block 0010 [107]: b0e197d30c2302f0 -Block 0010 [108]: ad14c29915ce379d -Block 0010 [109]: f20a29201fb36736 -Block 0010 [110]: ea3f27b2e1aa01ef -Block 0010 [111]: ece60dc38bf94d59 -Block 0010 [112]: 4ff4f6bba8050abe -Block 0010 [113]: be89f5fb18df5156 -Block 0010 [114]: f44369b404835880 -Block 0010 [115]: 62e51fbf337ceb9a -Block 0010 [116]: 3e1079ced5348d06 -Block 0010 [117]: ebeedc4a3dd087bf -Block 0010 [118]: d26839c2654c02a1 -Block 0010 [119]: cb67fe217aa3fa9e -Block 0010 [120]: 2d9a64ea20bab5eb -Block 0010 [121]: d2685facf666715a -Block 0010 [122]: 70e5091ed6e07b6c -Block 0010 [123]: fb3438d9b59896ef -Block 0010 [124]: 45a3f4fb770aae6c -Block 0010 [125]: 34dcff3647fe618e -Block 0010 [126]: 317cdd9023e383f9 -Block 0010 [127]: e8a91e43c976159a -Block 0011 [ 0]: 1fd1594b82df1dfa -Block 0011 [ 1]: 8356d52c018e2d54 -Block 0011 [ 2]: 2b25d4c0ce6857dc -Block 0011 [ 3]: e38988c550171f57 -Block 0011 [ 4]: f256212a4b780db5 -Block 0011 [ 5]: 109671484ffeb0e1 -Block 0011 [ 6]: 07958db0c32c7ad7 -Block 0011 [ 7]: b5244109ffaec646 -Block 0011 [ 8]: 6deb9ce5497d4bbf -Block 0011 [ 9]: f6bd231e7e9e4664 -Block 0011 [ 10]: 0af37ff345afd9f3 -Block 0011 [ 11]: 4e116d808b9db908 -Block 0011 [ 12]: c14a0b50f20f7f5c -Block 0011 [ 13]: 015304b3b9c7b933 -Block 0011 [ 14]: 75938887ff2ed1f8 -Block 0011 [ 15]: d497584fe66718cb -Block 0011 [ 16]: 5f9c6abddfc3c763 -Block 0011 [ 17]: fccdaf55d21a649c -Block 0011 [ 18]: 64047640a2346f52 -Block 0011 [ 19]: 7f87cac3095edc21 -Block 0011 [ 20]: e316f30445340fe7 -Block 0011 [ 21]: 26b96f77308e2070 -Block 0011 [ 22]: cff78be364db6c6b -Block 0011 [ 23]: 557b2b82bfae51a1 -Block 0011 [ 24]: a54c3e902a240602 -Block 0011 [ 25]: 8d666deaaf8c83c3 -Block 0011 [ 26]: 7f4e040bf76908a8 -Block 0011 [ 27]: f6adecc892d33ab0 -Block 0011 [ 28]: 5fc73bd7e58f4a3e -Block 0011 [ 29]: a4d0cce01bbee3e0 -Block 0011 [ 30]: fb2d8fb79f6ab152 -Block 0011 [ 31]: 38e68dc30491f640 -Block 0011 [ 32]: 2c9de1778c5de4f6 -Block 0011 [ 33]: ace30ebb97b3bc42 -Block 0011 [ 34]: bffe6eb4b67452a8 -Block 0011 [ 35]: c78b6d4d48e23ddf -Block 0011 [ 36]: 7775c5958faa5a6c -Block 0011 [ 37]: 68014715c9f5e5ce -Block 0011 [ 38]: 898c95f1cde02893 -Block 0011 [ 39]: 13f5ea34f1732ec6 -Block 0011 [ 40]: 7318b943b749fa47 -Block 0011 [ 41]: 082e401cab2de318 -Block 0011 [ 42]: 4c32158ff923f585 -Block 0011 [ 43]: eef77621983721fb -Block 0011 [ 44]: 02d490a3209b78a7 -Block 0011 [ 45]: 8770be626e6e8c16 -Block 0011 [ 46]: 3ddf6df056b37443 -Block 0011 [ 47]: 44d477f220017c45 -Block 0011 [ 48]: 0466ab1b16d9daf0 -Block 0011 [ 49]: 6ddc70d233e22d85 -Block 0011 [ 50]: 63c9a17c29126f50 -Block 0011 [ 51]: a04bb2d97d9a6b41 -Block 0011 [ 52]: 019bd561e0b2a9c9 -Block 0011 [ 53]: 1d18fd9a1ba73242 -Block 0011 [ 54]: 88c4f53bf9e5ef1a -Block 0011 [ 55]: ff13b6aee469b983 -Block 0011 [ 56]: 5726af33d8098ff6 -Block 0011 [ 57]: d51ee36307e108d9 -Block 0011 [ 58]: eceb791278214d78 -Block 0011 [ 59]: 0145bc4302e4a279 -Block 0011 [ 60]: 103fc5eb0ca47ade -Block 0011 [ 61]: a0815229bbf5a6a1 -Block 0011 [ 62]: 152f5e569d9cd53a -Block 0011 [ 63]: 11f789c95adc2fd8 -Block 0011 [ 64]: 78c4c36d005d72b9 -Block 0011 [ 65]: 14c55c2f993804bc -Block 0011 [ 66]: f335bc41204c6a26 -Block 0011 [ 67]: a3b078547373e462 -Block 0011 [ 68]: 29fbcf862902747d -Block 0011 [ 69]: f526be07b3d4cd6d -Block 0011 [ 70]: 6cc9609dfade5ebc -Block 0011 [ 71]: 4f7efba69a0477a4 -Block 0011 [ 72]: dbabe545e63b086d -Block 0011 [ 73]: 4bc7c9a2eed311b7 -Block 0011 [ 74]: 64e54d8b1bab4a1f -Block 0011 [ 75]: d76fff4669327dfd -Block 0011 [ 76]: 321692d0e50cbb4b -Block 0011 [ 77]: aa32a5f7807d1935 -Block 0011 [ 78]: 4f5a8fbfcac5f52b -Block 0011 [ 79]: 60f86347392bbd97 -Block 0011 [ 80]: 74a612d2547ff8b8 -Block 0011 [ 81]: 86529138b37e41b1 -Block 0011 [ 82]: 07a56ff7d5df2923 -Block 0011 [ 83]: 48c0b2cd2c8ec937 -Block 0011 [ 84]: f25406b807d0509f -Block 0011 [ 85]: 7dd53859b3414d79 -Block 0011 [ 86]: a542f6bbc495ef25 -Block 0011 [ 87]: 467563dd0f231916 -Block 0011 [ 88]: 453396eac5ad4b1e -Block 0011 [ 89]: 54aaf9a724d9627d -Block 0011 [ 90]: 7f7a8d36b13cc862 -Block 0011 [ 91]: 9961e8e3fd191c9c -Block 0011 [ 92]: ba00227f9cbcaed2 -Block 0011 [ 93]: ae68b8273c755e87 -Block 0011 [ 94]: cdce8af651a75b3b -Block 0011 [ 95]: 839999074aab83eb -Block 0011 [ 96]: a3427e62f8a2fde7 -Block 0011 [ 97]: 5aa52a737e043106 -Block 0011 [ 98]: 140d77a072532183 -Block 0011 [ 99]: 1629c1497b7dca49 -Block 0011 [100]: 139701bbf30af41e -Block 0011 [101]: fa67c839cbd36888 -Block 0011 [102]: b93f013495c2fb7c -Block 0011 [103]: a780e94dc6aed270 -Block 0011 [104]: caf607bc55cedb65 -Block 0011 [105]: 101c942911ede959 -Block 0011 [106]: 0e29fa0ded8a9f09 -Block 0011 [107]: ad8be809951517f7 -Block 0011 [108]: 61c3d9430d2dc220 -Block 0011 [109]: 8f994499afc1a216 -Block 0011 [110]: 369a6933dab8d31f -Block 0011 [111]: 9829be415fb7ca60 -Block 0011 [112]: 7d81a1df1b3a8a4b -Block 0011 [113]: 4a1f610433899dac -Block 0011 [114]: 102c08b6e7485a6c -Block 0011 [115]: 1a20f39e1997f7df -Block 0011 [116]: dede8cdccea7dbc4 -Block 0011 [117]: fe662506f4ef1565 -Block 0011 [118]: c59f245f91cc9f21 -Block 0011 [119]: 7edf0558eed181ff -Block 0011 [120]: 52660f58659e6416 -Block 0011 [121]: 9a8652ba35ebbfe3 -Block 0011 [122]: 3ddcc3f3a9d0d4e9 -Block 0011 [123]: 9b77732233e29b31 -Block 0011 [124]: 5cca0503b8810763 -Block 0011 [125]: 20437f00f7599495 -Block 0011 [126]: 697494785bf513c0 -Block 0011 [127]: 3ab8bd182b6c8249 -Block 0012 [ 0]: 74c495065857a14a -Block 0012 [ 1]: ec96b80a6b33aca7 -Block 0012 [ 2]: f444c0ff27974ebd -Block 0012 [ 3]: 8be83acdb72435c6 -Block 0012 [ 4]: dd61727abd58d7f6 -Block 0012 [ 5]: 5cfb6a444de715d1 -Block 0012 [ 6]: 96783e23efc4d2a0 -Block 0012 [ 7]: 8676efba8fca7711 -Block 0012 [ 8]: 03b65deaa794547b -Block 0012 [ 9]: 723cbdd0b9bb8d66 -Block 0012 [ 10]: f41cacae2bcf2b0b -Block 0012 [ 11]: e2aec66d0247e1c1 -Block 0012 [ 12]: 3b397dcc3b4b0baa -Block 0012 [ 13]: c1b6183e2bb1ba29 -Block 0012 [ 14]: 872ddf74f2f0c4b6 -Block 0012 [ 15]: 7fa99dcf8c868329 -Block 0012 [ 16]: 81aaf228dab8d432 -Block 0012 [ 17]: f662d33a0d61f712 -Block 0012 [ 18]: fc94f70f5dbbd7f8 -Block 0012 [ 19]: 091fdf4051ca05bf -Block 0012 [ 20]: db86fbd51496da46 -Block 0012 [ 21]: e23f27c3e27cfce4 -Block 0012 [ 22]: b30cbb5f194f3665 -Block 0012 [ 23]: 098e970f7402448a -Block 0012 [ 24]: 8b8c305c65695a8b -Block 0012 [ 25]: 7d510babc681fec3 -Block 0012 [ 26]: 9730753a01829732 -Block 0012 [ 27]: 07fcd4c5caad3b8a -Block 0012 [ 28]: 0e460f3d1bd79795 -Block 0012 [ 29]: c4a603208e0f3b48 -Block 0012 [ 30]: 379b4e95cba16ceb -Block 0012 [ 31]: bc72b408d217a603 -Block 0012 [ 32]: c47562fb642367b8 -Block 0012 [ 33]: 7c3c05432783dc7e -Block 0012 [ 34]: d67d0d228e37ecf9 -Block 0012 [ 35]: a2af9cf396be30e5 -Block 0012 [ 36]: 5f9c37739225a9f6 -Block 0012 [ 37]: 1622955d4a9a1422 -Block 0012 [ 38]: 05813a48687001ac -Block 0012 [ 39]: 29b364a9d8d6ae47 -Block 0012 [ 40]: c669633534f43bee -Block 0012 [ 41]: 44cfaee91755b969 -Block 0012 [ 42]: b438bfa944ef8f40 -Block 0012 [ 43]: 8d70530a6dd56e35 -Block 0012 [ 44]: 400f2ca1ed882bc7 -Block 0012 [ 45]: 160924cb0e833079 -Block 0012 [ 46]: 35a0cba772432178 -Block 0012 [ 47]: 0c854eeba328e0af -Block 0012 [ 48]: ed795385b6c8c33d -Block 0012 [ 49]: 99e486b31d520a75 -Block 0012 [ 50]: 1b5b830b450e4c3b -Block 0012 [ 51]: 93d51f5a82abbfce -Block 0012 [ 52]: 1bc16f482ff354bb -Block 0012 [ 53]: 757533f073cc215d -Block 0012 [ 54]: d408a1d75467d7b5 -Block 0012 [ 55]: 17e3c3b05d2def65 -Block 0012 [ 56]: eb8227aaf6789f99 -Block 0012 [ 57]: 59ad64f49eb5e25e -Block 0012 [ 58]: f6388f3df1ffa208 -Block 0012 [ 59]: b538d46a9f9f5615 -Block 0012 [ 60]: d7fadc7f0d1a1a9b -Block 0012 [ 61]: cc5653b41856d599 -Block 0012 [ 62]: 2eb0cb645a22bc9f -Block 0012 [ 63]: a604231af8395b0a -Block 0012 [ 64]: a280f5b5784bb713 -Block 0012 [ 65]: 8127d0070d705591 -Block 0012 [ 66]: 9d027a04414ff63b -Block 0012 [ 67]: c18b91df73f8b2ee -Block 0012 [ 68]: baba58a0614a8348 -Block 0012 [ 69]: fa0979b12baca497 -Block 0012 [ 70]: 488e2446c1ace4eb -Block 0012 [ 71]: 61b55bd7789e6757 -Block 0012 [ 72]: a3792ee1291d3d19 -Block 0012 [ 73]: ec996ff15540cb7f -Block 0012 [ 74]: 846eb47bb5500c0a -Block 0012 [ 75]: 63004d98c3fa85ad -Block 0012 [ 76]: d5e0c488c883d3a5 -Block 0012 [ 77]: e17c041222078902 -Block 0012 [ 78]: 5229cef32a4a309d -Block 0012 [ 79]: ff7e6b193154b239 -Block 0012 [ 80]: 50b448deb704b282 -Block 0012 [ 81]: fdf2757c71dd05fe -Block 0012 [ 82]: 798ce5f0123757e3 -Block 0012 [ 83]: 2ee64751ff269375 -Block 0012 [ 84]: 07b502f310eeb614 -Block 0012 [ 85]: 5a2921f9d24871da -Block 0012 [ 86]: a84d011edf032722 -Block 0012 [ 87]: a06da58fec671444 -Block 0012 [ 88]: 7b29541f047f8c39 -Block 0012 [ 89]: f272e37908f33227 -Block 0012 [ 90]: 32fd9dccac14f94e -Block 0012 [ 91]: 472efa6203e12101 -Block 0012 [ 92]: cac17d5f64192468 -Block 0012 [ 93]: 59ef34af8d1d42a7 -Block 0012 [ 94]: 875aff50e380c04a -Block 0012 [ 95]: 2ab6fe1d9aea14e8 -Block 0012 [ 96]: c687fa35d4bf9769 -Block 0012 [ 97]: 5be39abfa75b0e19 -Block 0012 [ 98]: ba5f78e7bf0c55ad -Block 0012 [ 99]: 3cebbe87e128539a -Block 0012 [100]: 0919a876f25bc820 -Block 0012 [101]: 6c9791f13fbbca50 -Block 0012 [102]: 3f74e510198bfc60 -Block 0012 [103]: f1aa13bc480aaa8c -Block 0012 [104]: 973b47716c2abba4 -Block 0012 [105]: 471cc7d2ca3eb89e -Block 0012 [106]: 8455ba5c570cd648 -Block 0012 [107]: e3bb3806a7479560 -Block 0012 [108]: 7d4cab7697e464b0 -Block 0012 [109]: 6c0ca3ec57564285 -Block 0012 [110]: 3267684183405f26 -Block 0012 [111]: 498afc2bc754e598 -Block 0012 [112]: 55076940aea93c2d -Block 0012 [113]: c63498bc724b3e1c -Block 0012 [114]: 50286619f7262a6f -Block 0012 [115]: 7984fb064e978bfc -Block 0012 [116]: 336490a1908c9a5b -Block 0012 [117]: f09f3b5b9959b3b7 -Block 0012 [118]: 04eceef263776576 -Block 0012 [119]: c7c191df82ea3c6a -Block 0012 [120]: 5b752037136cbc1c -Block 0012 [121]: 551ebaf941eec52c -Block 0012 [122]: 4d83b34b970f4d4f -Block 0012 [123]: 2a3e438748d1dc29 -Block 0012 [124]: c5ef48e4d9a7f09b -Block 0012 [125]: 762f8a841324bd19 -Block 0012 [126]: 65bec05883e5886e -Block 0012 [127]: b2fc97d678dbd986 -Block 0013 [ 0]: f75d1354c7eff19d -Block 0013 [ 1]: f5fd92f820842d7c -Block 0013 [ 2]: a711022a884ef6a1 -Block 0013 [ 3]: 796eb5ae4cebbf72 -Block 0013 [ 4]: 34f4edb4b0bb102a -Block 0013 [ 5]: 527c17ebdfc0c883 -Block 0013 [ 6]: bac872ffd4a899e9 -Block 0013 [ 7]: 0522808bceae9ae7 -Block 0013 [ 8]: eb3916bea08873f3 -Block 0013 [ 9]: b760bfb7537a57fa -Block 0013 [ 10]: 23d02fe031ecd3b5 -Block 0013 [ 11]: e400bae4a51546a9 -Block 0013 [ 12]: 49809cc34eecfd88 -Block 0013 [ 13]: e448e83b2b95201f -Block 0013 [ 14]: 2dc1a9d3a9c51942 -Block 0013 [ 15]: 8fef158e528ff970 -Block 0013 [ 16]: d661aadbbce68680 -Block 0013 [ 17]: ea34db317a216dd2 -Block 0013 [ 18]: 587895e1bf64fb03 -Block 0013 [ 19]: 64a9ed9c8bda7ab4 -Block 0013 [ 20]: 740cefd8d01b7666 -Block 0013 [ 21]: 4b6789a28b65f286 -Block 0013 [ 22]: f76c5b55c95c36f9 -Block 0013 [ 23]: 53f061c978252730 -Block 0013 [ 24]: 16a8ffa2013f1ff2 -Block 0013 [ 25]: 10ebd23ff30f48a2 -Block 0013 [ 26]: 3218fed20a63abf3 -Block 0013 [ 27]: e963d15f8d882329 -Block 0013 [ 28]: d26c43ad40e39071 -Block 0013 [ 29]: e6bb387045d95f5e -Block 0013 [ 30]: 9f68984830dd0c41 -Block 0013 [ 31]: 50c0a501f586171a -Block 0013 [ 32]: 015ae6072d8b2cba -Block 0013 [ 33]: b4141c1309479d7a -Block 0013 [ 34]: 120fc0ddf04bf858 -Block 0013 [ 35]: e3c3b1d547f1fbc2 -Block 0013 [ 36]: 3f440891de34519c -Block 0013 [ 37]: 859a4ece024def20 -Block 0013 [ 38]: b5f5a36371af5e5f -Block 0013 [ 39]: 3f5240a23a119f8c -Block 0013 [ 40]: 1ad71f0a68b88ca8 -Block 0013 [ 41]: b86e1a786107d5c8 -Block 0013 [ 42]: 01753f0f078fd87d -Block 0013 [ 43]: db2d2c4971651e47 -Block 0013 [ 44]: e47a46551a5218d7 -Block 0013 [ 45]: 8e2a4bec6d4106ae -Block 0013 [ 46]: 2e4c7722d94c4d90 -Block 0013 [ 47]: dffa15c8668c5cfd -Block 0013 [ 48]: 8ae2b1e76e12b127 -Block 0013 [ 49]: 49a5545f357b871b -Block 0013 [ 50]: 55aeb2fb9171edec -Block 0013 [ 51]: 1231e0a504d2971e -Block 0013 [ 52]: 84eac2f928b0a9d7 -Block 0013 [ 53]: fd1663ff5d624cff -Block 0013 [ 54]: e43cd597b2e3bddd -Block 0013 [ 55]: 7f1b719416fe0e8b -Block 0013 [ 56]: 3ae44722630c4674 -Block 0013 [ 57]: 465dcfb6ac8ce226 -Block 0013 [ 58]: ebd6211d53806927 -Block 0013 [ 59]: dd0cba9b6ee34124 -Block 0013 [ 60]: c77893c04e5e94e0 -Block 0013 [ 61]: 84acbc610447e84d -Block 0013 [ 62]: d133ad166027d506 -Block 0013 [ 63]: 51ea6c487d52417c -Block 0013 [ 64]: 5b13f5e040466e87 -Block 0013 [ 65]: 5bd01c7053fcf695 -Block 0013 [ 66]: dc6959bdff3c7319 -Block 0013 [ 67]: e07a1be4b5c6bf3a -Block 0013 [ 68]: f0a93277edf0c0fe -Block 0013 [ 69]: b2868562b862b79c -Block 0013 [ 70]: a75ec6c9f1625a7e -Block 0013 [ 71]: a916ca4fec36d981 -Block 0013 [ 72]: 7a7ef1190665727e -Block 0013 [ 73]: c8f525083c5e2f46 -Block 0013 [ 74]: 3236e7db95f7edba -Block 0013 [ 75]: e14e241dcb7d0a5f -Block 0013 [ 76]: 052ee041aa00b158 -Block 0013 [ 77]: aa201a671fecd938 -Block 0013 [ 78]: 5d3255300f8debe0 -Block 0013 [ 79]: 1dbe7f19c75a9a1c -Block 0013 [ 80]: c584df9197af7e54 -Block 0013 [ 81]: cf170f2644304dff -Block 0013 [ 82]: 6608d6d6b6ea219f -Block 0013 [ 83]: a6b43893a8363c79 -Block 0013 [ 84]: 6af3db3e1a954246 -Block 0013 [ 85]: a8ab0b1f021db354 -Block 0013 [ 86]: 89d22a874897ce37 -Block 0013 [ 87]: 631a49f4a9227896 -Block 0013 [ 88]: 597052bc91749582 -Block 0013 [ 89]: f731597f0238a1e9 -Block 0013 [ 90]: 98cd65e35a8a9de7 -Block 0013 [ 91]: 34b7630d576bdab0 -Block 0013 [ 92]: ab6cbc4905e83f76 -Block 0013 [ 93]: 65063cddd2cd614f -Block 0013 [ 94]: 5c6cf191124f0ca8 -Block 0013 [ 95]: 1d3130a17463b667 -Block 0013 [ 96]: b5998c71dc07fb0c -Block 0013 [ 97]: 9b47c94dc9ff3346 -Block 0013 [ 98]: 96b2173e4523582c -Block 0013 [ 99]: f0809f5374eec4a6 -Block 0013 [100]: ddf0752aeaad2081 -Block 0013 [101]: 8c1fb3710eedcadb -Block 0013 [102]: 988382d33a7f7cd1 -Block 0013 [103]: 8e5e7ea83a32557f -Block 0013 [104]: 55e74a052f3ddf11 -Block 0013 [105]: c1061700ffde6f76 -Block 0013 [106]: 102873e597b7160b -Block 0013 [107]: 642bbdc433f89d4b -Block 0013 [108]: 48135512e4835333 -Block 0013 [109]: 2ff1ae6b4e916b1e -Block 0013 [110]: d28b18bb3a370a8c -Block 0013 [111]: 67b7e874386777f0 -Block 0013 [112]: 66b00fdb00abf17c -Block 0013 [113]: d3ceed959b096696 -Block 0013 [114]: d44bb11bde2609d3 -Block 0013 [115]: 1bce7a85faa938ba -Block 0013 [116]: 6d7ccb20622593cb -Block 0013 [117]: e35a6dcd4dafdb81 -Block 0013 [118]: 2a755a917cf7f449 -Block 0013 [119]: 88ffa8fdf6960caa -Block 0013 [120]: b4b74a1f5928c3c2 -Block 0013 [121]: 704dc3689cc7cc99 -Block 0013 [122]: 95388c99ba9e902f -Block 0013 [123]: 76ce0e7b84b21455 -Block 0013 [124]: af618d480e8cc3dd -Block 0013 [125]: e3d0d2c733f20c6e -Block 0013 [126]: 47aedb4b4130ed9c -Block 0013 [127]: 630a965da8802d51 -Block 0014 [ 0]: a461476242d7a59e -Block 0014 [ 1]: 793e7b824d249885 -Block 0014 [ 2]: 8b31bf1c5251fa4f -Block 0014 [ 3]: 8419da321623d533 -Block 0014 [ 4]: c4e7b053013901b4 -Block 0014 [ 5]: 968287121fe56806 -Block 0014 [ 6]: 01dd360820ab43cd -Block 0014 [ 7]: d9747eb7cb1ae162 -Block 0014 [ 8]: aa61246c0096cea4 -Block 0014 [ 9]: 184744ac0181d478 -Block 0014 [ 10]: d33b25b159cbad6d -Block 0014 [ 11]: 57dae905157b326c -Block 0014 [ 12]: d2dfb8667245f623 -Block 0014 [ 13]: 53c48207f3560823 -Block 0014 [ 14]: 463becfdfd0dc65f -Block 0014 [ 15]: 3478ccf1587fa3e6 -Block 0014 [ 16]: ed43411af9589a5f -Block 0014 [ 17]: 498ac28bddf50caa -Block 0014 [ 18]: fa10436f3b1d9768 -Block 0014 [ 19]: 9c44f3528091dfe5 -Block 0014 [ 20]: d0fcba297c327462 -Block 0014 [ 21]: ea24e68ccd7e5881 -Block 0014 [ 22]: b57b40034030946a -Block 0014 [ 23]: 50d76f6d5c6246a2 -Block 0014 [ 24]: 4dc5fe0132ace88c -Block 0014 [ 25]: 085b1be1857617f4 -Block 0014 [ 26]: 8f0834b6fd83ba12 -Block 0014 [ 27]: c94afed014cdc9ee -Block 0014 [ 28]: 889fe873e29786bd -Block 0014 [ 29]: 99fca3a0f55bcbf6 -Block 0014 [ 30]: db6fe5823ed66e32 -Block 0014 [ 31]: 2bd9fcf53c862b1a -Block 0014 [ 32]: ce81207a7f1acfa4 -Block 0014 [ 33]: 5d71bf5f5f5acc02 -Block 0014 [ 34]: 739fbc4887d79690 -Block 0014 [ 35]: 6f4a792cde2fd5cc -Block 0014 [ 36]: d24cbfa7ff261450 -Block 0014 [ 37]: 360bd520e4115330 -Block 0014 [ 38]: fdea52ae2de55082 -Block 0014 [ 39]: 78f9158b431687a0 -Block 0014 [ 40]: 7133a4a752cf05a1 -Block 0014 [ 41]: 01c66f39cb89826e -Block 0014 [ 42]: 4ae0f9368cc3ad78 -Block 0014 [ 43]: b3db2b553f9b03b9 -Block 0014 [ 44]: 1469154cc172f9d1 -Block 0014 [ 45]: e1b64f1c6626069c -Block 0014 [ 46]: 879aea87b0a3d20b -Block 0014 [ 47]: 8455677d1bdc2c33 -Block 0014 [ 48]: e80237fe8e642e21 -Block 0014 [ 49]: 504e4b88eccfcc84 -Block 0014 [ 50]: 1fc697e8a26e91d5 -Block 0014 [ 51]: 9465a35e1648397c -Block 0014 [ 52]: 4f34578d6c381f62 -Block 0014 [ 53]: 25f545b54ff5ae63 -Block 0014 [ 54]: 5691ccb5637ad97d -Block 0014 [ 55]: caa0275684145e40 -Block 0014 [ 56]: 641968a1daa8cb41 -Block 0014 [ 57]: fb0ff3c67859c362 -Block 0014 [ 58]: dd0bca636e098eb6 -Block 0014 [ 59]: 25c5ea8ff9947ae7 -Block 0014 [ 60]: fe2a2e75cdde7486 -Block 0014 [ 61]: 9786b6dcda3a8002 -Block 0014 [ 62]: e33401fa5a304bcf -Block 0014 [ 63]: 17cdb217f104d8ed -Block 0014 [ 64]: 529ec3b59e120728 -Block 0014 [ 65]: e0f25bcbedbdeb14 -Block 0014 [ 66]: e87e2a611e9762c3 -Block 0014 [ 67]: 903b6e004f8e2466 -Block 0014 [ 68]: e769cc9b54e7fc0d -Block 0014 [ 69]: 88ba247a1459c620 -Block 0014 [ 70]: 8296682d67304ca4 -Block 0014 [ 71]: a197e9f9c9c2d027 -Block 0014 [ 72]: 70d6e5f97e4c08c3 -Block 0014 [ 73]: 1282284c67db0021 -Block 0014 [ 74]: 257e4df3e88791da -Block 0014 [ 75]: ea369d60cbbfc3b0 -Block 0014 [ 76]: 899327fe7af1696c -Block 0014 [ 77]: e3eb9f568072d39c -Block 0014 [ 78]: 61c6e4bae139da6e -Block 0014 [ 79]: 82d73a7b518a484a -Block 0014 [ 80]: ae1daa5055c3d728 -Block 0014 [ 81]: 181eb0a5605fe5f2 -Block 0014 [ 82]: 4adc3042c5c248f6 -Block 0014 [ 83]: 75720e34a8c4f9c1 -Block 0014 [ 84]: 184a961bbedf8d78 -Block 0014 [ 85]: 480f01987dc39470 -Block 0014 [ 86]: e5288386e93dbaa8 -Block 0014 [ 87]: 24a2631823663560 -Block 0014 [ 88]: 09a52a4f0522d21d -Block 0014 [ 89]: 685b6edb99314395 -Block 0014 [ 90]: 7caf3c4dfea8f03d -Block 0014 [ 91]: 4ba45b9e8df91dad -Block 0014 [ 92]: a0954b2eee1375a2 -Block 0014 [ 93]: 766c3dd0e8c84041 -Block 0014 [ 94]: 7d6854ff9c364cf3 -Block 0014 [ 95]: c3c18738f3b47743 -Block 0014 [ 96]: 73c732161b75d23a -Block 0014 [ 97]: 8b72fa77eaff6848 -Block 0014 [ 98]: 97f4169cdbbcc478 -Block 0014 [ 99]: cc08d746666366f8 -Block 0014 [100]: b5226b34853ccf1a -Block 0014 [101]: a463a634b3869611 -Block 0014 [102]: 2444d5021c683565 -Block 0014 [103]: 6fcbaa410bb39f3a -Block 0014 [104]: 3238537afdc9c134 -Block 0014 [105]: 58ed9109edbaceaf -Block 0014 [106]: a6355dad9a1b2ed3 -Block 0014 [107]: 710d861bd7de4875 -Block 0014 [108]: 9e8eec1be822f14b -Block 0014 [109]: c30a549d276e50a4 -Block 0014 [110]: 57038585a5eb2ceb -Block 0014 [111]: 97502c4b617e6d93 -Block 0014 [112]: e462aac2eab81993 -Block 0014 [113]: e35d06c7c51c8dc9 -Block 0014 [114]: 396e9f2aa5e74cde -Block 0014 [115]: c908d13b62e112fb -Block 0014 [116]: 35aa4755a42ba0fb -Block 0014 [117]: f9426c2be943b5a9 -Block 0014 [118]: e2931431f1fe9dd7 -Block 0014 [119]: 0a6f56e4e9558739 -Block 0014 [120]: 8ab84a163f6eaa0c -Block 0014 [121]: 42a0f15d6a6efb41 -Block 0014 [122]: 6d28afefc7dcfe58 -Block 0014 [123]: 4901be47a8c58453 -Block 0014 [124]: 73ec4fc7c75e84ef -Block 0014 [125]: 2920efbb06d8e325 -Block 0014 [126]: a6ecd7e4ef96dc05 -Block 0014 [127]: 1d0a9b2dc6418672 -Block 0015 [ 0]: fe7dd39a618e71e5 -Block 0015 [ 1]: 01c07c1b068c39c5 -Block 0015 [ 2]: b2a41ba7002b15b5 -Block 0015 [ 3]: ae477e64c1faa49b -Block 0015 [ 4]: f3dcfd9e46024f3c -Block 0015 [ 5]: 0e600176e0542726 -Block 0015 [ 6]: 56e014096bbfcee2 -Block 0015 [ 7]: 39844d9641076e23 -Block 0015 [ 8]: 8101229338fa9230 -Block 0015 [ 9]: fff04a34e83a1d04 -Block 0015 [ 10]: 0b76c8b60d1bddfc -Block 0015 [ 11]: daca86bb2aa461a4 -Block 0015 [ 12]: ccad5b535053995c -Block 0015 [ 13]: dc086420ea32e2c4 -Block 0015 [ 14]: 3e5f7db426829fa4 -Block 0015 [ 15]: 028179b0a2202f2a -Block 0015 [ 16]: 84664b21b0bed003 -Block 0015 [ 17]: 6b0b075c2720f673 -Block 0015 [ 18]: 3ab59f67edf1a91f -Block 0015 [ 19]: 49a00e47fcea9c9a -Block 0015 [ 20]: b0af9ca77eef6bd7 -Block 0015 [ 21]: 3ff02605e750fb68 -Block 0015 [ 22]: 6f888572cf623bde -Block 0015 [ 23]: 90792eba7c50bc6c -Block 0015 [ 24]: f76e260b80eab35c -Block 0015 [ 25]: c454977d76d885bb -Block 0015 [ 26]: 5ab8d0754e3af5db -Block 0015 [ 27]: a64a547249b6c6dc -Block 0015 [ 28]: d0ebccff364df8dc -Block 0015 [ 29]: b13f9c1b1bd1d3b6 -Block 0015 [ 30]: 134227e11312862a -Block 0015 [ 31]: 81a635d0de25be20 -Block 0015 [ 32]: 2bb3ff35c40ea726 -Block 0015 [ 33]: f84a0782feabb913 -Block 0015 [ 34]: 28d4f1889a890868 -Block 0015 [ 35]: d01673b6e235fc51 -Block 0015 [ 36]: 42c447fef3385aa3 -Block 0015 [ 37]: 50ca4b017f0bdecf -Block 0015 [ 38]: 9ac9f0ddccd1e52d -Block 0015 [ 39]: 21f8411108200f80 -Block 0015 [ 40]: 69e6d3d7b2c7a786 -Block 0015 [ 41]: ec8cf819bb02bbcb -Block 0015 [ 42]: 1fb8e462e6c4ff72 -Block 0015 [ 43]: cc89eb4748626454 -Block 0015 [ 44]: 6f0230ec870c485a -Block 0015 [ 45]: e9d1c047f8322b0d -Block 0015 [ 46]: 86b194b1353a70ba -Block 0015 [ 47]: 43d1307e773654bf -Block 0015 [ 48]: f47b4224fcb3488a -Block 0015 [ 49]: d7eee8fd41f4ba01 -Block 0015 [ 50]: a8fa5f257bab0e5e -Block 0015 [ 51]: f3931c2abded9a59 -Block 0015 [ 52]: e41fbeda83d18a71 -Block 0015 [ 53]: bab3d48f7589b45f -Block 0015 [ 54]: 7b9ed122cdc05112 -Block 0015 [ 55]: 660ee625e579e10a -Block 0015 [ 56]: 9a8420edb4efc070 -Block 0015 [ 57]: 71cdd65ab37df1aa -Block 0015 [ 58]: 59ec57a4d785ec5b -Block 0015 [ 59]: 56de28c195a6c9c1 -Block 0015 [ 60]: 38b77aa786eb4274 -Block 0015 [ 61]: 0339ba8813a04d23 -Block 0015 [ 62]: 5ff04478b159e5a8 -Block 0015 [ 63]: bb59a232c2fb822f -Block 0015 [ 64]: ce9b98e4d5505d4e -Block 0015 [ 65]: d94474d5044efad8 -Block 0015 [ 66]: dd7581fca67e6b47 -Block 0015 [ 67]: e5cf5ee7a1d303a6 -Block 0015 [ 68]: de54eb260e28d75d -Block 0015 [ 69]: 8dbc69487a475fbd -Block 0015 [ 70]: 2e8038ba499f6dbb -Block 0015 [ 71]: 322093a75c524f72 -Block 0015 [ 72]: aa559fe61ea1a37e -Block 0015 [ 73]: cb547e6a9106e64c -Block 0015 [ 74]: 67111f017926588a -Block 0015 [ 75]: 0e71f13aaedca44c -Block 0015 [ 76]: 885341674bd4987a -Block 0015 [ 77]: e0c5efe697c9b140 -Block 0015 [ 78]: 324ea9daaa3b6ba0 -Block 0015 [ 79]: 545898fe29df7e96 -Block 0015 [ 80]: 18ca585d12d3c743 -Block 0015 [ 81]: 04cdfe6bdd202450 -Block 0015 [ 82]: 3e6104bf852b8a6a -Block 0015 [ 83]: 08544bdc6f38ba5d -Block 0015 [ 84]: 7e49bfeec5d001f2 -Block 0015 [ 85]: 3906196d6e3c53ab -Block 0015 [ 86]: 4778aeb472a70184 -Block 0015 [ 87]: 8cc7e9a207cd88f0 -Block 0015 [ 88]: c1e1aed42d388dd7 -Block 0015 [ 89]: 93228c878bd09ded -Block 0015 [ 90]: b3e312be518f5ca0 -Block 0015 [ 91]: c63977ba692aacfe -Block 0015 [ 92]: 18ef5824532327a3 -Block 0015 [ 93]: daa17d2619b74141 -Block 0015 [ 94]: 3524418eb248f814 -Block 0015 [ 95]: 262e4eab5b257010 -Block 0015 [ 96]: aa45cdd8e749ae80 -Block 0015 [ 97]: 46dd2149ce337b8f -Block 0015 [ 98]: 425c1c35463031a0 -Block 0015 [ 99]: b1747326431aa01b -Block 0015 [100]: 07b504f49c05fc9e -Block 0015 [101]: fe8fc4dad3d269d8 -Block 0015 [102]: f18aff22d8f09960 -Block 0015 [103]: 5247cf1a92ba2294 -Block 0015 [104]: 5a0cc7c71bfd6734 -Block 0015 [105]: 0c926b5deed53fb9 -Block 0015 [106]: 6be5ac8ee2c31367 -Block 0015 [107]: cf808455894c338c -Block 0015 [108]: af04367baa4bba7c -Block 0015 [109]: 26397d26480e815b -Block 0015 [110]: a58ca838afb9ac8b -Block 0015 [111]: 75413a501ff0a6c0 -Block 0015 [112]: 1fac4f16e8ab214f -Block 0015 [113]: 19be611a230ce4f2 -Block 0015 [114]: 6530a63352ee1b61 -Block 0015 [115]: 00dcabf53a8e84ad -Block 0015 [116]: 4087c0f326283555 -Block 0015 [117]: 791eafa5a317015e -Block 0015 [118]: ef0f3079c2280b9d -Block 0015 [119]: 1035069b01d04a74 -Block 0015 [120]: 7fc066ca3a0df359 -Block 0015 [121]: 2c7e872cae3aeb64 -Block 0015 [122]: ff9d282ac9e3a146 -Block 0015 [123]: beffa43e452ce374 -Block 0015 [124]: a0f34d378d418f73 -Block 0015 [125]: 5790929a42de0b61 -Block 0015 [126]: 5b23ec6f6be2aa90 -Block 0015 [127]: d04c5f31efbeccc4 -Block 0016 [ 0]: ee4284bd7e01037d -Block 0016 [ 1]: f6725c9d044b3582 -Block 0016 [ 2]: efc6d8945d76028d -Block 0016 [ 3]: 29e9791ebfed5ec9 -Block 0016 [ 4]: 4c4d74485e886bb9 -Block 0016 [ 5]: 7a227580ea77203c -Block 0016 [ 6]: 8b8a892a45ce7773 -Block 0016 [ 7]: f552f61ef6b9987f -Block 0016 [ 8]: b0be9423022aa3c4 -Block 0016 [ 9]: a581a3a65719e8ed -Block 0016 [ 10]: 0ed1efa5c7b9cdb3 -Block 0016 [ 11]: 459d8670734b7440 -Block 0016 [ 12]: 0651d5c945182f07 -Block 0016 [ 13]: bced7850cfe86416 -Block 0016 [ 14]: e0c4f34534f1c63a -Block 0016 [ 15]: 2c6cd7aa929d8645 -Block 0016 [ 16]: dadf71c6c32421f0 -Block 0016 [ 17]: f4e8a2bdc76f0d3f -Block 0016 [ 18]: 418b1053a3257ffa -Block 0016 [ 19]: 012e877fde3e24c9 -Block 0016 [ 20]: 14d59b7c02a2e97c -Block 0016 [ 21]: ee8c0895a34f08b8 -Block 0016 [ 22]: 71cf5cadb05b7782 -Block 0016 [ 23]: 6a5c0717ec891466 -Block 0016 [ 24]: 9c1c845254e692f3 -Block 0016 [ 25]: f0a44a90e65aee66 -Block 0016 [ 26]: e222177e3bdec9bc -Block 0016 [ 27]: a5fec919612d165c -Block 0016 [ 28]: 020201b7a839067b -Block 0016 [ 29]: 84e786fba4a60afb -Block 0016 [ 30]: f7b1f4f6feb1c1c3 -Block 0016 [ 31]: 1c85f25c69ef9fd7 -Block 0016 [ 32]: 285122b6579f7056 -Block 0016 [ 33]: a9e1eec26a14de95 -Block 0016 [ 34]: fda85512de5464d0 -Block 0016 [ 35]: 71e076da7e3910bd -Block 0016 [ 36]: d30baaa4b044367a -Block 0016 [ 37]: 0b504eb61b0d6c26 -Block 0016 [ 38]: d3c30d0d974ed9af -Block 0016 [ 39]: 282158fd3005a366 -Block 0016 [ 40]: eeacca7d7d8c1519 -Block 0016 [ 41]: 4511c26cd8af6099 -Block 0016 [ 42]: 16adfdb6ba659689 -Block 0016 [ 43]: 3186aed45d7aeeb2 -Block 0016 [ 44]: 247da487eba794b7 -Block 0016 [ 45]: 584c74265acf4b10 -Block 0016 [ 46]: 93913d9a23a4fc60 -Block 0016 [ 47]: 4703bb124037e1a5 -Block 0016 [ 48]: 37239d7ace81e41d -Block 0016 [ 49]: ba7923d2d1abf6aa -Block 0016 [ 50]: 81cff74cc3030c46 -Block 0016 [ 51]: 80781fbda30f2c67 -Block 0016 [ 52]: 1072611bab0d1c25 -Block 0016 [ 53]: 6dafe937e223ffd4 -Block 0016 [ 54]: 0c58c5ecde11f220 -Block 0016 [ 55]: 808b5df6b010f5f0 -Block 0016 [ 56]: 4d2c7c97deb8bb3a -Block 0016 [ 57]: 297865d69ab1b78f -Block 0016 [ 58]: 15ef9ca22dcc25c2 -Block 0016 [ 59]: 8f01f2fbec1e1cda -Block 0016 [ 60]: a9db3a3d7e817b2a -Block 0016 [ 61]: 4f2f469445248c76 -Block 0016 [ 62]: 60fdb8c20980baa8 -Block 0016 [ 63]: e0af63046dfb4ec4 -Block 0016 [ 64]: 3d416ab4bed81fcb -Block 0016 [ 65]: da1ff08a91bab1ff -Block 0016 [ 66]: 7ddb3de6427f6dc2 -Block 0016 [ 67]: 02ac68f8d7b59827 -Block 0016 [ 68]: 2f8b56ade21b2a31 -Block 0016 [ 69]: 5479394c6e8c51c4 -Block 0016 [ 70]: beb501097c9b856e -Block 0016 [ 71]: f5b7e186fd0a6d74 -Block 0016 [ 72]: 8632eceb3c644fe5 -Block 0016 [ 73]: 578be5498c159f6d -Block 0016 [ 74]: b92cbafdd2bd1bd7 -Block 0016 [ 75]: cc7bc5fe2e10e8eb -Block 0016 [ 76]: 472df28e66c5e218 -Block 0016 [ 77]: 64494c08516ca24c -Block 0016 [ 78]: 29919b2152b46616 -Block 0016 [ 79]: c98bf2c8d5a59d7b -Block 0016 [ 80]: 7b4d78ce47083d2a -Block 0016 [ 81]: 2150d9fb4190dd49 -Block 0016 [ 82]: f4787d0cc450ddad -Block 0016 [ 83]: bca37f309b16b787 -Block 0016 [ 84]: 77f29e0273601339 -Block 0016 [ 85]: 5512896f2d009278 -Block 0016 [ 86]: ef63fc2dc268d2b3 -Block 0016 [ 87]: 2a796379964010fc -Block 0016 [ 88]: 6a7f8c157f4907f4 -Block 0016 [ 89]: 4a7f538aa5761182 -Block 0016 [ 90]: 29004d473d72bee3 -Block 0016 [ 91]: 834d5222c0011172 -Block 0016 [ 92]: bd2606194d2d148b -Block 0016 [ 93]: 38a5b0decd299c4f -Block 0016 [ 94]: abf149883113a697 -Block 0016 [ 95]: 34e170f49d93c917 -Block 0016 [ 96]: 53fc696fcc977325 -Block 0016 [ 97]: 3e28ab82d63594f6 -Block 0016 [ 98]: 915a3ff472e74518 -Block 0016 [ 99]: 69a618df6f6f84ae -Block 0016 [100]: c5d813be21361d83 -Block 0016 [101]: 03ac0914b557c176 -Block 0016 [102]: 4bdd25ac2aaa20fe -Block 0016 [103]: a3817cab3aa0e229 -Block 0016 [104]: 3155f6e8898d3626 -Block 0016 [105]: edf42f9307673e12 -Block 0016 [106]: e14daae30223ed73 -Block 0016 [107]: 82613039e7c17acd -Block 0016 [108]: 2b67bfa4ba3d75f2 -Block 0016 [109]: ce95d235cd915890 -Block 0016 [110]: 75624ef53a39d48b -Block 0016 [111]: ad0303b31652499e -Block 0016 [112]: e351b76ad04c39d7 -Block 0016 [113]: a9aa8650ea6734a5 -Block 0016 [114]: 527b776775eab895 -Block 0016 [115]: c41ab8f180e85ccd -Block 0016 [116]: 8ad4ef151659d1da -Block 0016 [117]: d94e5cf2654d7e64 -Block 0016 [118]: 7269fa6ebe4d0148 -Block 0016 [119]: c4f576c71186fe07 -Block 0016 [120]: 8ddce8b24b0b5bfb -Block 0016 [121]: 821a74dbd82c5a16 -Block 0016 [122]: 9695f6ac80338bfb -Block 0016 [123]: 728dee32c6c2475e -Block 0016 [124]: 7bac74994b5bacff -Block 0016 [125]: 3da6eea76bd3692f -Block 0016 [126]: 23cb9f7fa694eaa1 -Block 0016 [127]: cfe06a085d267a99 -Block 0017 [ 0]: f356666f01196720 -Block 0017 [ 1]: d5b86a80e04f9357 -Block 0017 [ 2]: 94511da0aa428e7c -Block 0017 [ 3]: 3b7adcefeb2b6f65 -Block 0017 [ 4]: 4d5283d8063472cc -Block 0017 [ 5]: 890aedd9f9a726b1 -Block 0017 [ 6]: 2711463e6bc5421a -Block 0017 [ 7]: 19923254aef59f6c -Block 0017 [ 8]: 559d243da7765ab0 -Block 0017 [ 9]: 59492428d9c4c089 -Block 0017 [ 10]: 669da2bd92b8c392 -Block 0017 [ 11]: 0d84cfb304ed2cb2 -Block 0017 [ 12]: 9183922fe8dc1321 -Block 0017 [ 13]: c9ddad6110958678 -Block 0017 [ 14]: 8c4ec6de6ef52270 -Block 0017 [ 15]: 158509f02ed33558 -Block 0017 [ 16]: 15f62a574d357bff -Block 0017 [ 17]: 9fc31aa7b10bdb39 -Block 0017 [ 18]: 14acd0af756da166 -Block 0017 [ 19]: 2ecf2d49440a608d -Block 0017 [ 20]: b5056c5192f93b7b -Block 0017 [ 21]: 8e19ba7cdd948025 -Block 0017 [ 22]: 34fbc0f77ec37398 -Block 0017 [ 23]: 03bb7138974402f0 -Block 0017 [ 24]: 9ad98d6af59e2f2e -Block 0017 [ 25]: e1bddfddc591121e -Block 0017 [ 26]: b2f16e8b68e6d9c1 -Block 0017 [ 27]: 49a32b416ceeae94 -Block 0017 [ 28]: b3ad11b80ce3df7e -Block 0017 [ 29]: 3ec29abc1f218b1e -Block 0017 [ 30]: fb3d6da7508f17bd -Block 0017 [ 31]: c790abf197c4c647 -Block 0017 [ 32]: 2a1110d48162fcd4 -Block 0017 [ 33]: 43f22c7b2d34617e -Block 0017 [ 34]: ebf0db27d136245d -Block 0017 [ 35]: 55aeb56679c1f189 -Block 0017 [ 36]: 8714d1a5bb55b389 -Block 0017 [ 37]: 075c04ac4d453c9a -Block 0017 [ 38]: 24c791b59a1a8330 -Block 0017 [ 39]: 8b62655e797d9396 -Block 0017 [ 40]: 162b218ffe8a7c58 -Block 0017 [ 41]: 51003cf43cc27c45 -Block 0017 [ 42]: 40cc3394355f3e30 -Block 0017 [ 43]: 91779f6973a7a103 -Block 0017 [ 44]: 15c5320b25394348 -Block 0017 [ 45]: 0f10820130a04127 -Block 0017 [ 46]: 319487b379c5f1fa -Block 0017 [ 47]: f9a7af31b5e73c6b -Block 0017 [ 48]: 127d7dd8a8a1c85c -Block 0017 [ 49]: acb5ef7d8732298c -Block 0017 [ 50]: 08332232ae0382e5 -Block 0017 [ 51]: 51250582ebb94ee8 -Block 0017 [ 52]: f84fd3e861577bbd -Block 0017 [ 53]: 6b26fb58367feb95 -Block 0017 [ 54]: df9f3d32ba3336ee -Block 0017 [ 55]: 5155ebd220efb0d2 -Block 0017 [ 56]: e178c553b64a81a2 -Block 0017 [ 57]: 098ba741f03ad24a -Block 0017 [ 58]: c16f280067cc2729 -Block 0017 [ 59]: 574811b3d231a4df -Block 0017 [ 60]: b7c1e511893af569 -Block 0017 [ 61]: 3b29211f0bfdcc03 -Block 0017 [ 62]: b6fdcdb1dfb27df4 -Block 0017 [ 63]: 2f0623a423bf9f9b -Block 0017 [ 64]: 00c97f0fa03bbdcd -Block 0017 [ 65]: 8e59dac12903971c -Block 0017 [ 66]: c71492c17ca1818d -Block 0017 [ 67]: 848aa69aa03ae0c8 -Block 0017 [ 68]: 8ca690303a718a1a -Block 0017 [ 69]: 7da40f323bc9ee34 -Block 0017 [ 70]: 41ea847cc9b2bd76 -Block 0017 [ 71]: 25a49ea6de3f0c52 -Block 0017 [ 72]: cf4d93c48f1e35a8 -Block 0017 [ 73]: 585128d5942b0376 -Block 0017 [ 74]: ab55eb453653dd3e -Block 0017 [ 75]: 2c12f55af3e1917f -Block 0017 [ 76]: 9ee6da77a8e82cec -Block 0017 [ 77]: 4bd6ddf3cf83631a -Block 0017 [ 78]: 30e4321586605141 -Block 0017 [ 79]: bed6fc4f0aa92e30 -Block 0017 [ 80]: 03c788844da03ad5 -Block 0017 [ 81]: 6de6b8a439c2334a -Block 0017 [ 82]: 334cb662ea6a20c0 -Block 0017 [ 83]: 261c2af8bb1cac22 -Block 0017 [ 84]: ea99a5a644b0d2c7 -Block 0017 [ 85]: 5b26ae0f91bf750c -Block 0017 [ 86]: d8fca02a32b73e10 -Block 0017 [ 87]: 6565907dcf1117c1 -Block 0017 [ 88]: 85d1ea8df3a60d46 -Block 0017 [ 89]: 5d19125acf3da900 -Block 0017 [ 90]: 9efb704db3d51276 -Block 0017 [ 91]: af54ed8281a78e58 -Block 0017 [ 92]: beb7449f1abb2e44 -Block 0017 [ 93]: f75330d91676f212 -Block 0017 [ 94]: a94814d6ebced6fd -Block 0017 [ 95]: 897d9e15c5dfdcb4 -Block 0017 [ 96]: d8e34107028ad021 -Block 0017 [ 97]: 293ebcd4466abd1d -Block 0017 [ 98]: 7254ba81b6ba11ad -Block 0017 [ 99]: 0390db567a96a4d9 -Block 0017 [100]: ccfe39f1c384118c -Block 0017 [101]: 43267d510015e12b -Block 0017 [102]: 280f4476d6f3ebd9 -Block 0017 [103]: 8760238c8360fcbf -Block 0017 [104]: 035d4cecf2bb1f1d -Block 0017 [105]: c142fe72cf22a6ae -Block 0017 [106]: 00ebf2d0e311b27e -Block 0017 [107]: 47798bfb775c7d54 -Block 0017 [108]: ce977fbfe5b65e34 -Block 0017 [109]: 92ff9b8cbe72c795 -Block 0017 [110]: a52f9937120521fa -Block 0017 [111]: 4584b9e83174b1e9 -Block 0017 [112]: dfe536bdd20cc1b4 -Block 0017 [113]: ecf8f4f29948ea49 -Block 0017 [114]: df7bc0f579ebb12a -Block 0017 [115]: a681fdb86e177244 -Block 0017 [116]: 79b17e4d1501eb36 -Block 0017 [117]: 0b690bd9f1abbcc1 -Block 0017 [118]: ecbc6a4e04ae26f1 -Block 0017 [119]: 779d3fcee066dac9 -Block 0017 [120]: f753cfc8cf14a180 -Block 0017 [121]: f80641ab303d1d0a -Block 0017 [122]: f6c8e8efda680da1 -Block 0017 [123]: 59c2c42e5080db17 -Block 0017 [124]: 2236f9288ec4ee14 -Block 0017 [125]: c55aa668a6c449be -Block 0017 [126]: 79d280f9c001c3da -Block 0017 [127]: 6f7e15d0071cc9b3 -Block 0018 [ 0]: 24c3e56d5f903fef -Block 0018 [ 1]: d1b0155e7ed77407 -Block 0018 [ 2]: 48027b4c6cf64f88 -Block 0018 [ 3]: 94c3af58d3faf91b -Block 0018 [ 4]: 74f92c253dca8e1c -Block 0018 [ 5]: 67b167f78d2d6020 -Block 0018 [ 6]: 0c7de09b37c02759 -Block 0018 [ 7]: 277affceef993cbf -Block 0018 [ 8]: c1995b671cded43b -Block 0018 [ 9]: dddad34e544c7881 -Block 0018 [ 10]: f4a3055714a6c8c7 -Block 0018 [ 11]: c0315efb62348bd2 -Block 0018 [ 12]: e6326929632dac14 -Block 0018 [ 13]: a6c25d68f8803e4b -Block 0018 [ 14]: 7acf39beabb63f94 -Block 0018 [ 15]: 2f83fce37c19e21c -Block 0018 [ 16]: 23ccecc2a8a38fb1 -Block 0018 [ 17]: fb91eb5c043d2716 -Block 0018 [ 18]: 43857050f463159a -Block 0018 [ 19]: e4690d9134bb6514 -Block 0018 [ 20]: 65871d3e136a8576 -Block 0018 [ 21]: 0941849804523512 -Block 0018 [ 22]: a76c754906d20fa3 -Block 0018 [ 23]: 720b4d043f954698 -Block 0018 [ 24]: e8e1b34b97efe5c6 -Block 0018 [ 25]: d65e0cafff3ca81b -Block 0018 [ 26]: 1015b96aff86a531 -Block 0018 [ 27]: 93db3f39dac63b89 -Block 0018 [ 28]: 27c64da54455bcf3 -Block 0018 [ 29]: fc07e831d5c9b636 -Block 0018 [ 30]: 7b32cf773c07e91a -Block 0018 [ 31]: eaaf151121b66a71 -Block 0018 [ 32]: 50734ccbd7fa7692 -Block 0018 [ 33]: 256941e161c2ca80 -Block 0018 [ 34]: d1b1558a980f6d5d -Block 0018 [ 35]: 70600d0b1c5f5a7c -Block 0018 [ 36]: 1889c20f14b6d47e -Block 0018 [ 37]: 5777eb45b6bc874d -Block 0018 [ 38]: 942a16b3b13eda53 -Block 0018 [ 39]: 0b03ac0435aa85ca -Block 0018 [ 40]: aad10114f5b3049d -Block 0018 [ 41]: 76a55e7d54f2b10c -Block 0018 [ 42]: f5965a11ddf92aa8 -Block 0018 [ 43]: 8b0f6ae29a2a6c7a -Block 0018 [ 44]: 135df7badfa08c89 -Block 0018 [ 45]: ea2401066fe560d4 -Block 0018 [ 46]: 562477e4bac2d2b8 -Block 0018 [ 47]: 3c71fb5ce80d6dc0 -Block 0018 [ 48]: fe7f4945d69e4cd8 -Block 0018 [ 49]: 04fee43cb4f3a04d -Block 0018 [ 50]: cfba36d25cc153f4 -Block 0018 [ 51]: d1463b7a0a975ab2 -Block 0018 [ 52]: 58dc72898c0d1d72 -Block 0018 [ 53]: c3334b968fe7170f -Block 0018 [ 54]: fd0741b983e69520 -Block 0018 [ 55]: 9b12d151bbd1836f -Block 0018 [ 56]: 7b9397a8e0fabde0 -Block 0018 [ 57]: beba98d7bda9bfee -Block 0018 [ 58]: 0d7395b3269cda03 -Block 0018 [ 59]: 32873a46cb76a56f -Block 0018 [ 60]: c3a4bce067ed614b -Block 0018 [ 61]: 240f6d3a4c6262b3 -Block 0018 [ 62]: 0d8cca9e57ad555b -Block 0018 [ 63]: abd6bfd9fea3bdb6 -Block 0018 [ 64]: cb82a692a45e3d10 -Block 0018 [ 65]: 91c6c5fddef8bdc6 -Block 0018 [ 66]: 50540941a55abb53 -Block 0018 [ 67]: 0fde1a645bd882cc -Block 0018 [ 68]: 82bb1379fa735cc9 -Block 0018 [ 69]: 592909a24cf2e71d -Block 0018 [ 70]: a4975ee76da39b0f -Block 0018 [ 71]: bc5eb397c2d15dd5 -Block 0018 [ 72]: 9ff9590633f36e98 -Block 0018 [ 73]: 6a4c0f97ab0100f7 -Block 0018 [ 74]: e2f2a364cd055c28 -Block 0018 [ 75]: 1082a32edba76a53 -Block 0018 [ 76]: 97bedd180d0ab0f2 -Block 0018 [ 77]: 841320c0656d5175 -Block 0018 [ 78]: e2bcd615276667ff -Block 0018 [ 79]: b6da9d70f45a817f -Block 0018 [ 80]: 05c1b04651e11c0a -Block 0018 [ 81]: b14db892c3cfcb2c -Block 0018 [ 82]: b127f0a55737c345 -Block 0018 [ 83]: ebfbd4f00fc01572 -Block 0018 [ 84]: 6e9f87e406f2f1e8 -Block 0018 [ 85]: 5385af9c9576c568 -Block 0018 [ 86]: 810ae26edb1dcf61 -Block 0018 [ 87]: 10a849c52efbefa6 -Block 0018 [ 88]: 34f45af18a0b340c -Block 0018 [ 89]: 1954ce64d34fee83 -Block 0018 [ 90]: e93701e0e0cbbd56 -Block 0018 [ 91]: ec8dea4b632d62db -Block 0018 [ 92]: 17f5f64702395fd3 -Block 0018 [ 93]: 0df98d15faacf9aa -Block 0018 [ 94]: bcf18c74021649d9 -Block 0018 [ 95]: 9f736366b0aaf256 -Block 0018 [ 96]: 8051586167b2167e -Block 0018 [ 97]: 6c3a10856e183e33 -Block 0018 [ 98]: 6e5a3236190684e3 -Block 0018 [ 99]: afa62b28d151194b -Block 0018 [100]: b1511ff8ff9de709 -Block 0018 [101]: 9456ec3070684f51 -Block 0018 [102]: f8b2e2c6b3a5ede1 -Block 0018 [103]: 957b0cff38ff5d65 -Block 0018 [104]: 80f65db2f4bef519 -Block 0018 [105]: 0a4b7424f557a97b -Block 0018 [106]: dbb46c78d3b16657 -Block 0018 [107]: 4fb97f89dbf34615 -Block 0018 [108]: 605a46364190bf07 -Block 0018 [109]: 82ab49f116e2d3a0 -Block 0018 [110]: 7bdca67b36403e69 -Block 0018 [111]: 76ddd2407cf40c49 -Block 0018 [112]: 816b6bdb860dcf94 -Block 0018 [113]: b1ef58ee0d58bf9e -Block 0018 [114]: 0ff5e16892fdc1e2 -Block 0018 [115]: 42e71d4690469785 -Block 0018 [116]: b18acdb8a0b68672 -Block 0018 [117]: f155ac095d6fa2ea -Block 0018 [118]: f60c65958b44f393 -Block 0018 [119]: ff5eb4d397fbae23 -Block 0018 [120]: 659e7b8fc27b481c -Block 0018 [121]: 0b0fee39c9b4978b -Block 0018 [122]: 66cd6e8f09ff280e -Block 0018 [123]: 66457a5d611d56b0 -Block 0018 [124]: c2af5b83515d5470 -Block 0018 [125]: e29fba1fd62392ca -Block 0018 [126]: 4d83dbe95866b4d4 -Block 0018 [127]: 7536f8c68069e3f3 -Block 0019 [ 0]: 722f273fc2dcb808 -Block 0019 [ 1]: b8ed98643c9037c8 -Block 0019 [ 2]: 7750cffa290e9bf5 -Block 0019 [ 3]: 70b53d0852adcc2d -Block 0019 [ 4]: ff012ca82a8502fd -Block 0019 [ 5]: dd31cf64aba30b03 -Block 0019 [ 6]: 1f8089c7e49c0295 -Block 0019 [ 7]: fb69aae42cd06e3c -Block 0019 [ 8]: 863ddde246472a00 -Block 0019 [ 9]: c43713ae38173c0b -Block 0019 [ 10]: f3b11690fd627fc2 -Block 0019 [ 11]: 8df098f89832649f -Block 0019 [ 12]: ee1808239b90adc6 -Block 0019 [ 13]: a1de235cd0a91f3a -Block 0019 [ 14]: c5ebc70a2c39e8ba -Block 0019 [ 15]: 7261ba38f8c0efc4 -Block 0019 [ 16]: 19ee91a1cfbf5b3d -Block 0019 [ 17]: f0332768e28a1b3a -Block 0019 [ 18]: 44edb26d9179e9c1 -Block 0019 [ 19]: 0cf32f79888b897a -Block 0019 [ 20]: 28a16746b980aa69 -Block 0019 [ 21]: 52fece763bc4b874 -Block 0019 [ 22]: 492462ddf0453667 -Block 0019 [ 23]: 9d5640570d88fc56 -Block 0019 [ 24]: 70757405d529a0e8 -Block 0019 [ 25]: 3b2af6a9e0c5eb14 -Block 0019 [ 26]: 42fa393692961d9d -Block 0019 [ 27]: acccc4f1b9fa4d77 -Block 0019 [ 28]: 00b0b01dc131a9c1 -Block 0019 [ 29]: 2b9dd58298aff850 -Block 0019 [ 30]: 1f9e9c8090846f83 -Block 0019 [ 31]: 66160b59c3f5914c -Block 0019 [ 32]: b9f5f550888de83b -Block 0019 [ 33]: c4a56854d14903c5 -Block 0019 [ 34]: c6d14f5cc3951abc -Block 0019 [ 35]: 08abd46128eb2bda -Block 0019 [ 36]: b9fdcd88d36e67f0 -Block 0019 [ 37]: 90fa2dd4e03640cb -Block 0019 [ 38]: fd16d218f1e56234 -Block 0019 [ 39]: 091acccd9d0e30d1 -Block 0019 [ 40]: e42811b626289ff9 -Block 0019 [ 41]: 1ece05985826d671 -Block 0019 [ 42]: c5f482a21ee796e0 -Block 0019 [ 43]: c06e692ca9f056c0 -Block 0019 [ 44]: e23ed7c9253dcaab -Block 0019 [ 45]: 6690fc1182d74429 -Block 0019 [ 46]: 6ef5a397f829abdd -Block 0019 [ 47]: 2683521b224ee50d -Block 0019 [ 48]: 0182b3c186f873a3 -Block 0019 [ 49]: 20c92c0febd05d7d -Block 0019 [ 50]: 01cc133fee6460de -Block 0019 [ 51]: c86d8364e693b5b9 -Block 0019 [ 52]: 23d64e599970dae2 -Block 0019 [ 53]: 0de884eb725ae3af -Block 0019 [ 54]: 517bcd0201644ed8 -Block 0019 [ 55]: 8df33bfe21658050 -Block 0019 [ 56]: 0c9930ca602516ad -Block 0019 [ 57]: 0ebf7d34c36aa33a -Block 0019 [ 58]: f6ee1dead03b43eb -Block 0019 [ 59]: b73cd68edd7f8248 -Block 0019 [ 60]: 4aa35e26918206fe -Block 0019 [ 61]: 3d876cdef4c6bd47 -Block 0019 [ 62]: 4e865ec2782bb709 -Block 0019 [ 63]: f74308f5e970cb9b -Block 0019 [ 64]: 2771aadf679ec45d -Block 0019 [ 65]: 226c76e4ba2a5dd7 -Block 0019 [ 66]: de0cddc2ae4427c8 -Block 0019 [ 67]: dd0c4bd379edeabd -Block 0019 [ 68]: 55fc60cd41a55679 -Block 0019 [ 69]: 82eefb6749f7d7c2 -Block 0019 [ 70]: 869e68618a19c7c7 -Block 0019 [ 71]: 442afd2c618bb724 -Block 0019 [ 72]: 3b0c6ff27923c66d -Block 0019 [ 73]: 4c982cc1c9926132 -Block 0019 [ 74]: 4985e72e8435d8ba -Block 0019 [ 75]: 73bb50df4a57233e -Block 0019 [ 76]: 54598373775f7082 -Block 0019 [ 77]: 989acb275bcd8f7e -Block 0019 [ 78]: 54fed75c76e59e7c -Block 0019 [ 79]: 48ca047ac54c6922 -Block 0019 [ 80]: 026b2df39c6a513d -Block 0019 [ 81]: 173bf4ba8e04d1da -Block 0019 [ 82]: 8acf7f1b9248060b -Block 0019 [ 83]: 46dc23cee3392db4 -Block 0019 [ 84]: f2c380c3aa45c2b5 -Block 0019 [ 85]: 3c7cfde74b2c36c0 -Block 0019 [ 86]: b6717d3bc372759f -Block 0019 [ 87]: dc311a8650a95f41 -Block 0019 [ 88]: 726c9df5a72d6b12 -Block 0019 [ 89]: a5c78f4fb2c4616a -Block 0019 [ 90]: 99752c728e64b11c -Block 0019 [ 91]: 2db8af40223e6337 -Block 0019 [ 92]: daf0df2c0fa99d1c -Block 0019 [ 93]: fa15f1ef7b4c253f -Block 0019 [ 94]: 55d5026d18fee917 -Block 0019 [ 95]: b28e3db01632bd47 -Block 0019 [ 96]: cf92192dec2a2c40 -Block 0019 [ 97]: cf6d5d9bc091e6f5 -Block 0019 [ 98]: dbce992d8c254db9 -Block 0019 [ 99]: 2e7ae686b8ca7ee8 -Block 0019 [100]: 384527ee71744859 -Block 0019 [101]: f5792f72aff7ce1f -Block 0019 [102]: 218acc6d548bffbd -Block 0019 [103]: c55a6901afdba4ee -Block 0019 [104]: 3f0321e8047687ac -Block 0019 [105]: 8c83bf546e2f4145 -Block 0019 [106]: f9ac4b2a66d9464d -Block 0019 [107]: c33356e2116f19e7 -Block 0019 [108]: aa1803bb336e1592 -Block 0019 [109]: bcb3bcda523ff128 -Block 0019 [110]: a8196da62d735972 -Block 0019 [111]: 83ac3bc10374503d -Block 0019 [112]: 82183e223bcdccdf -Block 0019 [113]: 6bf482af8ce0e92f -Block 0019 [114]: d33807071afa3e61 -Block 0019 [115]: a0889cc00ee25304 -Block 0019 [116]: ddcc3d96df20e1de -Block 0019 [117]: f31f7dab248a58b2 -Block 0019 [118]: 8d19be8959a8441a -Block 0019 [119]: de4916c0bdd8f395 -Block 0019 [120]: 08337c3616acbff2 -Block 0019 [121]: 1da9ee3be188c357 -Block 0019 [122]: e2be5499c55d69d5 -Block 0019 [123]: 8a88a87d2fcfaba3 -Block 0019 [124]: 57aa516673cb6b71 -Block 0019 [125]: e3f755c6f20e652b -Block 0019 [126]: 5a4131bef1f62b97 -Block 0019 [127]: 3db701be2103d01a -Block 0020 [ 0]: 70c6576f2e77e09a -Block 0020 [ 1]: 6601863f6b696595 -Block 0020 [ 2]: b91a34ab981fa137 -Block 0020 [ 3]: 736b66b7aab81706 -Block 0020 [ 4]: 65fb0a72aebe5b19 -Block 0020 [ 5]: f50ce081b2505436 -Block 0020 [ 6]: 021d3df7daa304bf -Block 0020 [ 7]: 61794a7f35b9385c -Block 0020 [ 8]: 17459a4b0e86f16d -Block 0020 [ 9]: 261d20aec867b2b1 -Block 0020 [ 10]: 7d6b10cb9e1ca1b6 -Block 0020 [ 11]: e771ea00bab91811 -Block 0020 [ 12]: 3b8d4966dba2fcee -Block 0020 [ 13]: b8cb7efbd136e0c5 -Block 0020 [ 14]: e905a8786d5c35d6 -Block 0020 [ 15]: 0febce01d9281167 -Block 0020 [ 16]: 030162e4b1bd5620 -Block 0020 [ 17]: 1d6c869d5abd924e -Block 0020 [ 18]: adae1f14c28c19c0 -Block 0020 [ 19]: a964bb0864bc9d52 -Block 0020 [ 20]: 648ef646997cadb1 -Block 0020 [ 21]: ca0321a35bf0cbdc -Block 0020 [ 22]: 59335968255b796e -Block 0020 [ 23]: 031511e73acec4df -Block 0020 [ 24]: 8c357525c9ec70e9 -Block 0020 [ 25]: 8b25fdfb42423ce6 -Block 0020 [ 26]: dfb06a7440745242 -Block 0020 [ 27]: 9e94b7cf234b4956 -Block 0020 [ 28]: 8c401a90a8168e37 -Block 0020 [ 29]: 431d28542972c237 -Block 0020 [ 30]: 344546c0e699c834 -Block 0020 [ 31]: aece7d9d6960069d -Block 0020 [ 32]: ea42707eb3a32685 -Block 0020 [ 33]: fd57e3a5f6e998cc -Block 0020 [ 34]: 52a662c2f6de431c -Block 0020 [ 35]: 0b255cf4fdd8ac5e -Block 0020 [ 36]: bc320584a71ba9e3 -Block 0020 [ 37]: c5fb2fee1e9e8106 -Block 0020 [ 38]: c2932e7718e22b16 -Block 0020 [ 39]: afb8c659f04a1d2e -Block 0020 [ 40]: 082e620daeb79466 -Block 0020 [ 41]: 043991be836d5eae -Block 0020 [ 42]: ad16fddbaa7ae57e -Block 0020 [ 43]: ab45c1663a1320cf -Block 0020 [ 44]: 3e2e2fad4ab6dd15 -Block 0020 [ 45]: 184d7c29d383f9cb -Block 0020 [ 46]: 11037c7773292bc4 -Block 0020 [ 47]: fa5cc51fb7a55375 -Block 0020 [ 48]: 9a2c041b82bdf603 -Block 0020 [ 49]: 63e9dad5b5d8e60c -Block 0020 [ 50]: d9750b241682d4bc -Block 0020 [ 51]: 970d5276092a0ea4 -Block 0020 [ 52]: 9dddabc29fe7edfa -Block 0020 [ 53]: 681055dcbfb3006a -Block 0020 [ 54]: 01900b21d31eff67 -Block 0020 [ 55]: 449abc581135982c -Block 0020 [ 56]: db2ae53eeee1c299 -Block 0020 [ 57]: 3dd54a6de8697c5b -Block 0020 [ 58]: f1e82c286114ddcd -Block 0020 [ 59]: adb5c79c12d8be22 -Block 0020 [ 60]: a09972fb6b077bb9 -Block 0020 [ 61]: 68eac35dcc5ff9e4 -Block 0020 [ 62]: 6364b9e7d921d09d -Block 0020 [ 63]: cb5f436ca07c7324 -Block 0020 [ 64]: 4aa340986fc7deaa -Block 0020 [ 65]: 458a6cfa537b5882 -Block 0020 [ 66]: 2a7a4bfe3923b89c -Block 0020 [ 67]: 1635e10d6f5d7235 -Block 0020 [ 68]: 28f5135a470b8332 -Block 0020 [ 69]: ff1eb2e7f4de0b70 -Block 0020 [ 70]: 12b3703e48703d4e -Block 0020 [ 71]: 1fb4586aca631990 -Block 0020 [ 72]: b39ea3c1335582eb -Block 0020 [ 73]: 0dc229d3c3fb5f8e -Block 0020 [ 74]: 35038bbcf50f7fb0 -Block 0020 [ 75]: b344ab23680de774 -Block 0020 [ 76]: 9d0ddb2f1c714c58 -Block 0020 [ 77]: 32a29abd2d42c740 -Block 0020 [ 78]: ac9856eb75f6da54 -Block 0020 [ 79]: 6e482388986341bb -Block 0020 [ 80]: 1aadb77781c10d89 -Block 0020 [ 81]: 06dd3907baa24d9b -Block 0020 [ 82]: ce12640b5e68b68a -Block 0020 [ 83]: 4dc6af7465c30b2e -Block 0020 [ 84]: e30c7faf4af19ed5 -Block 0020 [ 85]: f3bd1a9b0441641e -Block 0020 [ 86]: 8d0718fc38801ab2 -Block 0020 [ 87]: 329621668d8cac25 -Block 0020 [ 88]: 08fd2a23b99a3393 -Block 0020 [ 89]: 2f34f0550c5bf928 -Block 0020 [ 90]: 8af250cc80bc53c3 -Block 0020 [ 91]: 6e84810898ec71ca -Block 0020 [ 92]: 6d2f03ab20dcc568 -Block 0020 [ 93]: 7b6094febddf53a9 -Block 0020 [ 94]: f88eb9e8a6710cef -Block 0020 [ 95]: 015aebc0e7561485 -Block 0020 [ 96]: a2f1e67b4f53ef64 -Block 0020 [ 97]: b2f41b99adcabcb8 -Block 0020 [ 98]: 072c7441cad288fa -Block 0020 [ 99]: b7d76739d790000f -Block 0020 [100]: 8246205c8c8839ed -Block 0020 [101]: 36bf703de23ab32f -Block 0020 [102]: f50d0586961e5e1e -Block 0020 [103]: 0362b485dc0ecde9 -Block 0020 [104]: 3e8a15277d2384d3 -Block 0020 [105]: b00a398ae5bd9dcf -Block 0020 [106]: 07dbd6088a9b7b2e -Block 0020 [107]: a593dea22ee8de23 -Block 0020 [108]: 9dcc69bd05b50111 -Block 0020 [109]: f44fe5efbbe2a788 -Block 0020 [110]: 4c6ba01e0ce4a7bd -Block 0020 [111]: 2b29897c88458722 -Block 0020 [112]: f40cdc0d0d03360c -Block 0020 [113]: 4dd21c19c6bbca01 -Block 0020 [114]: 14a6671b6214c164 -Block 0020 [115]: 3a32de50b729cccf -Block 0020 [116]: c9187a994af18415 -Block 0020 [117]: 7fa0474d79569967 -Block 0020 [118]: 1b4425996a0c6378 -Block 0020 [119]: 076afc6c51ea4651 -Block 0020 [120]: 8e2cfd3f8ded4d1f -Block 0020 [121]: 15fe894d46c20a6f -Block 0020 [122]: a3f83bb955872823 -Block 0020 [123]: e6da877d40219104 -Block 0020 [124]: 1c8278e557d5a2db -Block 0020 [125]: 59846d21cfa0d9f6 -Block 0020 [126]: 81182cda9a926198 -Block 0020 [127]: 66c4a4c4af6cf770 -Block 0021 [ 0]: 97ba12617248d3a0 -Block 0021 [ 1]: a7474da1f3722804 -Block 0021 [ 2]: d812872de7c68fb0 -Block 0021 [ 3]: 77ff9583abecf493 -Block 0021 [ 4]: a115af0254d43eba -Block 0021 [ 5]: d859a2a9e6f64e30 -Block 0021 [ 6]: 74a626581f652ae9 -Block 0021 [ 7]: 2bf0ecb0ef299a6b -Block 0021 [ 8]: a3ecc9fe27c3c4fa -Block 0021 [ 9]: a6b5ee67c56a8a12 -Block 0021 [ 10]: ebb75bfd61ab58d5 -Block 0021 [ 11]: 140540d69b6b749c -Block 0021 [ 12]: 49dafaaea1750e39 -Block 0021 [ 13]: 9ce0775336a3f77a -Block 0021 [ 14]: d3efbd276ec1a746 -Block 0021 [ 15]: a1c82b2d2fd832a3 -Block 0021 [ 16]: 1b55d6ca561cf8f6 -Block 0021 [ 17]: 970ebebc2dbb4c47 -Block 0021 [ 18]: 55229dad6951aa65 -Block 0021 [ 19]: f3310d064331b06d -Block 0021 [ 20]: 76d95cafb7ff4bc0 -Block 0021 [ 21]: 8d5fd733bf770e1a -Block 0021 [ 22]: f637058052bcc6d1 -Block 0021 [ 23]: 4ab98283fba0118e -Block 0021 [ 24]: e8e525c902663eec -Block 0021 [ 25]: 644cca7d985c8a91 -Block 0021 [ 26]: c6c2de6b0e4ff1be -Block 0021 [ 27]: fc412f9b8a8cedd9 -Block 0021 [ 28]: 0e92b41df490818d -Block 0021 [ 29]: 1d0c2c517f488689 -Block 0021 [ 30]: 18b2da63716f204d -Block 0021 [ 31]: e554edf33f346126 -Block 0021 [ 32]: c08bda271a758810 -Block 0021 [ 33]: 5dd523abea7efb83 -Block 0021 [ 34]: d847a64de969361d -Block 0021 [ 35]: a4f36d26b3b54449 -Block 0021 [ 36]: 1921a0afad9f8fbf -Block 0021 [ 37]: 70da571767923985 -Block 0021 [ 38]: 6c5064a53ec3e555 -Block 0021 [ 39]: 62bcba250774bb08 -Block 0021 [ 40]: 2b5625ff6f5ba533 -Block 0021 [ 41]: c072367cce735fad -Block 0021 [ 42]: 8936f7691d34a967 -Block 0021 [ 43]: be608f7337bfed83 -Block 0021 [ 44]: c5644153fd94cc02 -Block 0021 [ 45]: b6976c4c85e42f9e -Block 0021 [ 46]: f8ad6580cc9a7eb0 -Block 0021 [ 47]: 3d824a32e3758d65 -Block 0021 [ 48]: f169ed5f08f9b944 -Block 0021 [ 49]: e87427a90507fbd4 -Block 0021 [ 50]: 931fb1fe7d965ede -Block 0021 [ 51]: 9b260a432ad72c1c -Block 0021 [ 52]: 79deb2541ce7342d -Block 0021 [ 53]: 69e5e734dba1fd9c -Block 0021 [ 54]: 1247ebe158d28acb -Block 0021 [ 55]: 7dbd681956aeb23a -Block 0021 [ 56]: 300321372051ac95 -Block 0021 [ 57]: 29a1f904e3279041 -Block 0021 [ 58]: d05fccea3fe647f4 -Block 0021 [ 59]: 2385827f254d2b4c -Block 0021 [ 60]: 56b9609de765952f -Block 0021 [ 61]: c94741ba55b5597a -Block 0021 [ 62]: 9e7913dccfeedd26 -Block 0021 [ 63]: 81fbd1291f9421ee -Block 0021 [ 64]: d6262e0e770aeb51 -Block 0021 [ 65]: c827cfb3a6abddfd -Block 0021 [ 66]: 278464d02be24499 -Block 0021 [ 67]: 6128073fae8d69e1 -Block 0021 [ 68]: a787862adac1f282 -Block 0021 [ 69]: 298346627e145ab3 -Block 0021 [ 70]: 13f37d5f03d860c0 -Block 0021 [ 71]: 472bc88d39141ca4 -Block 0021 [ 72]: a32d647eda32d4ef -Block 0021 [ 73]: adb7b6dbfd3ae3ee -Block 0021 [ 74]: e1269626ab25c0a2 -Block 0021 [ 75]: 0a81d0098dcb18b8 -Block 0021 [ 76]: 5a30c38f68fd8627 -Block 0021 [ 77]: 06680a83a31773f1 -Block 0021 [ 78]: 3bb8bfe6fdd1042b -Block 0021 [ 79]: 1991fe79ca1e3d2c -Block 0021 [ 80]: df82bee963637ef6 -Block 0021 [ 81]: f5f6405ea41a34d2 -Block 0021 [ 82]: fecb4282706d12a3 -Block 0021 [ 83]: 08944da6b98b49ff -Block 0021 [ 84]: da3991a854ebdb1e -Block 0021 [ 85]: 96d59a0a8eb94f1d -Block 0021 [ 86]: da88007dad0fb44d -Block 0021 [ 87]: 3a3a7c6401caadd1 -Block 0021 [ 88]: d1a4830ea6a0930c -Block 0021 [ 89]: 90ba4c240ce23c60 -Block 0021 [ 90]: 3ed84aa792e55aab -Block 0021 [ 91]: 69b4b96240dbeb77 -Block 0021 [ 92]: 2e83b29f76581a62 -Block 0021 [ 93]: 9b76934ba16a709c -Block 0021 [ 94]: 133875a80ec7e428 -Block 0021 [ 95]: 0cf80a0eb6cd800f -Block 0021 [ 96]: 875d7cacffadd659 -Block 0021 [ 97]: 6e7b01bd211dea78 -Block 0021 [ 98]: 6f414ca19d49a25c -Block 0021 [ 99]: 1a39a444f5f57861 -Block 0021 [100]: a49caaba3d8e8821 -Block 0021 [101]: b56b6106a9bd904a -Block 0021 [102]: ad2463203a51043e -Block 0021 [103]: e9093114910e868a -Block 0021 [104]: ab7afec2cd298c7f -Block 0021 [105]: 5ca3db0f2755ec4e -Block 0021 [106]: 930f28588ce3c4d9 -Block 0021 [107]: b9caed8e764da044 -Block 0021 [108]: 4ad9f43753450d1b -Block 0021 [109]: 2fd204073599e2e3 -Block 0021 [110]: 32e29607e96dcc49 -Block 0021 [111]: 346f9459d20813e1 -Block 0021 [112]: b9216cc91d1a0b93 -Block 0021 [113]: b2d7287641a5aedc -Block 0021 [114]: 64e3459f766c19a4 -Block 0021 [115]: a94828e02268bc34 -Block 0021 [116]: ab0bf58173c54029 -Block 0021 [117]: 34ece02bab456ed0 -Block 0021 [118]: faa3ac8c0f216393 -Block 0021 [119]: c72717b9c6cfa5e4 -Block 0021 [120]: de532f61d7c21181 -Block 0021 [121]: aaa343e41d74e64b -Block 0021 [122]: bed79982c13e22bd -Block 0021 [123]: a9d0acedec7fb082 -Block 0021 [124]: 33f9ee6919e5e69e -Block 0021 [125]: 9461e87f0d76e520 -Block 0021 [126]: 50d39455a480016a -Block 0021 [127]: 69d241940768dccf -Block 0022 [ 0]: 99ac09d3ecbcdbb4 -Block 0022 [ 1]: 514dda00e5127ffa -Block 0022 [ 2]: 03059e9afb29b1b3 -Block 0022 [ 3]: 5f2b16eedb2625c9 -Block 0022 [ 4]: 8421eca1dbfec1b2 -Block 0022 [ 5]: 1d9cd95877a17d18 -Block 0022 [ 6]: 29ad26ed44443664 -Block 0022 [ 7]: d5e9d0548f100140 -Block 0022 [ 8]: f2f96df7101178e1 -Block 0022 [ 9]: fcde7cc6e739d68c -Block 0022 [ 10]: 9da5994233b3b92c -Block 0022 [ 11]: ede676a1cfb49424 -Block 0022 [ 12]: 87f04a8bd8f02c3c -Block 0022 [ 13]: 793aa15c08c7d1cb -Block 0022 [ 14]: 6782338db894b187 -Block 0022 [ 15]: c4f72a9a6bcf2c10 -Block 0022 [ 16]: 00f5af2f848eb2f3 -Block 0022 [ 17]: decf9043e63c9b1a -Block 0022 [ 18]: 300b96ee9ee506c4 -Block 0022 [ 19]: d36b4e566db81299 -Block 0022 [ 20]: 90ce5819385cd408 -Block 0022 [ 21]: d2013dfebf9c5a82 -Block 0022 [ 22]: dfed4093841d7dee -Block 0022 [ 23]: f74c019e0b5502b9 -Block 0022 [ 24]: 14c8588c2533f91d -Block 0022 [ 25]: f1f261ad12cb3a9e -Block 0022 [ 26]: 46be19a1a1a0ba7d -Block 0022 [ 27]: 01cf062fa2e7b479 -Block 0022 [ 28]: c33e050c6fea3bc7 -Block 0022 [ 29]: 438d65b4399cf820 -Block 0022 [ 30]: f727a7bd6e61ec49 -Block 0022 [ 31]: f95dda0e791f32ff -Block 0022 [ 32]: cf91506b6b6351cd -Block 0022 [ 33]: 44aaf19ab3c4e0ba -Block 0022 [ 34]: fd54a5b7aa337d99 -Block 0022 [ 35]: a141b7ffddcdb8e3 -Block 0022 [ 36]: 9f79915e6dedfdaa -Block 0022 [ 37]: a69bc9b18050b6c0 -Block 0022 [ 38]: 2ce0fe170467aab2 -Block 0022 [ 39]: 94f3b3443bafb15e -Block 0022 [ 40]: f6368a58cb0d19c5 -Block 0022 [ 41]: c0f357c51f5bdb47 -Block 0022 [ 42]: a7273145bca106fe -Block 0022 [ 43]: ce91916807ea540d -Block 0022 [ 44]: 85af3d0bc3cbbbdf -Block 0022 [ 45]: c5e75b71391eed9a -Block 0022 [ 46]: e990ab8763434522 -Block 0022 [ 47]: 0a18de6ffcea0072 -Block 0022 [ 48]: b6b99c2642b1f93d -Block 0022 [ 49]: 880547abadac4ead -Block 0022 [ 50]: 9c824e5c3e3d840d -Block 0022 [ 51]: 71459956dc736b45 -Block 0022 [ 52]: d53fb6e0f374761c -Block 0022 [ 53]: 61b08dcef0ef837e -Block 0022 [ 54]: 584dfc7b7b1ac55d -Block 0022 [ 55]: 6d260c9b48104e21 -Block 0022 [ 56]: 74bd628609d0579b -Block 0022 [ 57]: 4da07fd544e14216 -Block 0022 [ 58]: 44699551cc96435d -Block 0022 [ 59]: 5cb6d7b5d4d32315 -Block 0022 [ 60]: 002c55ac837869de -Block 0022 [ 61]: 33910a7581ce0934 -Block 0022 [ 62]: c20bb59e0cb163b7 -Block 0022 [ 63]: 5724a2c79e0d567d -Block 0022 [ 64]: fc12585573a969a1 -Block 0022 [ 65]: 0f1802284711fc36 -Block 0022 [ 66]: d18a8169e1a758d7 -Block 0022 [ 67]: 55d40c0d1aa9d93c -Block 0022 [ 68]: 66f4cc1fd0b4a21c -Block 0022 [ 69]: 626c0c97a5746c99 -Block 0022 [ 70]: 5a8387f8935bd8d3 -Block 0022 [ 71]: 5774a5ef99ef0fa4 -Block 0022 [ 72]: 345753a67f42ffaa -Block 0022 [ 73]: d5c7db73671dd400 -Block 0022 [ 74]: 1c876fbd31b40929 -Block 0022 [ 75]: adb555c8cd4c682e -Block 0022 [ 76]: 4e35e1ec3a2fa91a -Block 0022 [ 77]: 97837b1d4e9d22e3 -Block 0022 [ 78]: db4de1fa218320cb -Block 0022 [ 79]: 6949e60bd0a77306 -Block 0022 [ 80]: 5a1a9285b471e18b -Block 0022 [ 81]: 133e1594f9013500 -Block 0022 [ 82]: 4fed50832b7552db -Block 0022 [ 83]: ea8ec75578b38f5e -Block 0022 [ 84]: 55f680462419d053 -Block 0022 [ 85]: 57a6bf1ae4c5cdda -Block 0022 [ 86]: 4490fb9d7437ec6c -Block 0022 [ 87]: 5c20149c3fdc0f19 -Block 0022 [ 88]: 3e05dd84d1b96161 -Block 0022 [ 89]: 8ee14ba173ef628c -Block 0022 [ 90]: 7c7335a772f5d1a0 -Block 0022 [ 91]: 218d2dc1909539f1 -Block 0022 [ 92]: c864e8ba266a87d9 -Block 0022 [ 93]: d05aa03f1c192d28 -Block 0022 [ 94]: 1a5afc3d25c10a33 -Block 0022 [ 95]: 06ebd6b0cab2a596 -Block 0022 [ 96]: ec56d04aa2cac393 -Block 0022 [ 97]: 84114dcff89ed7d6 -Block 0022 [ 98]: 9236b4914b6853c3 -Block 0022 [ 99]: 19b19c03c9f2cf00 -Block 0022 [100]: f89d5d10e0f2206d -Block 0022 [101]: b8c0768373077807 -Block 0022 [102]: 5f93b788171e6a3d -Block 0022 [103]: 06b4bffc543ba5ba -Block 0022 [104]: 2160cc4bcb298ce1 -Block 0022 [105]: a31ebc8cd3fb8e43 -Block 0022 [106]: 840ed2e07f648e5f -Block 0022 [107]: 44f7dabc1fa4ce16 -Block 0022 [108]: f3da6300d6853673 -Block 0022 [109]: 83a2d663f5bd1f39 -Block 0022 [110]: 467a553afb39e207 -Block 0022 [111]: 7e5d07e9e34aa631 -Block 0022 [112]: c18efe2cbee27f59 -Block 0022 [113]: 88c337ece41089b9 -Block 0022 [114]: 836dbe9587d964bd -Block 0022 [115]: d5dae636d08de614 -Block 0022 [116]: 8d10eb8da0c2f53f -Block 0022 [117]: 4a0f03949bc56298 -Block 0022 [118]: 2e2610735ed2c5e8 -Block 0022 [119]: 04d88eefe8be430f -Block 0022 [120]: b6f232d66a064d22 -Block 0022 [121]: 8b43f223c3bab19e -Block 0022 [122]: 42189f5dd777bdc7 -Block 0022 [123]: 26aebb9a0c7930c0 -Block 0022 [124]: 745a32b9b6d6ce9b -Block 0022 [125]: d82e6fa1d9eaa64c -Block 0022 [126]: f5226b2114974004 -Block 0022 [127]: d411871aafe92d03 -Block 0023 [ 0]: 099bad02ce6364d6 -Block 0023 [ 1]: 946434f53c381dfa -Block 0023 [ 2]: 7cc764145dcff211 -Block 0023 [ 3]: 863a1d0f6917e81f -Block 0023 [ 4]: b07148fffbf35d2e -Block 0023 [ 5]: 06e0a8c35d673389 -Block 0023 [ 6]: 0836a7016c46218d -Block 0023 [ 7]: f7448c33afda380d -Block 0023 [ 8]: 9d70de7501979872 -Block 0023 [ 9]: 5ec479e097342787 -Block 0023 [ 10]: 4c328e947adc0a3b -Block 0023 [ 11]: 673b567c3f825c7d -Block 0023 [ 12]: 88bbe75df8436559 -Block 0023 [ 13]: 31e8b9ff423389e9 -Block 0023 [ 14]: 7569469bba244732 -Block 0023 [ 15]: 0f019e02e9d44270 -Block 0023 [ 16]: 2cf0f216bb23dcbc -Block 0023 [ 17]: f942da467c94c759 -Block 0023 [ 18]: c531370dff6c7550 -Block 0023 [ 19]: 76eb32b05537d887 -Block 0023 [ 20]: 09be023c2f37ef6c -Block 0023 [ 21]: 913b6fb2ae92aa17 -Block 0023 [ 22]: 3905230d429ddb42 -Block 0023 [ 23]: 8dacca73716bd067 -Block 0023 [ 24]: b767e0600fbcad20 -Block 0023 [ 25]: fc4bbc20c754fe8f -Block 0023 [ 26]: 010fb475210b4052 -Block 0023 [ 27]: 55c219fa4a4e2d4a -Block 0023 [ 28]: 346444d97bc6ae08 -Block 0023 [ 29]: 51b0dc31dfae6277 -Block 0023 [ 30]: bd9651aca77ac723 -Block 0023 [ 31]: a6139c546b9d8a72 -Block 0023 [ 32]: e9e26f0535ae93f1 -Block 0023 [ 33]: d029451bda2edfd0 -Block 0023 [ 34]: 3f52bfe31df12f36 -Block 0023 [ 35]: d51d4d9383579576 -Block 0023 [ 36]: 918b16322ea2cd12 -Block 0023 [ 37]: 0fb4466b28e900dd -Block 0023 [ 38]: d06552715cb858c5 -Block 0023 [ 39]: 66700db36d68fd04 -Block 0023 [ 40]: 6c5248d72cc78817 -Block 0023 [ 41]: 6237033fbadc51c0 -Block 0023 [ 42]: 70ce5003d36e91fd -Block 0023 [ 43]: 9473b2ba7e1ea0b7 -Block 0023 [ 44]: 8570a1a79d0de212 -Block 0023 [ 45]: 38128c19a8cf3d94 -Block 0023 [ 46]: 996d86984478edb2 -Block 0023 [ 47]: 13a573e574db3c5f -Block 0023 [ 48]: 14c8a880130edffa -Block 0023 [ 49]: daa29af545495cbe -Block 0023 [ 50]: 2966004bbf930356 -Block 0023 [ 51]: 6254df94f338f8ea -Block 0023 [ 52]: 48ceb67f8fcfb1a1 -Block 0023 [ 53]: 054af1ac0f6f178a -Block 0023 [ 54]: bd24a125e957879e -Block 0023 [ 55]: 855df59044ecdbc7 -Block 0023 [ 56]: 2bdd65a1b699e3bd -Block 0023 [ 57]: 6cebfbc55dc696a6 -Block 0023 [ 58]: 3812eff0201089e2 -Block 0023 [ 59]: 012595753609368d -Block 0023 [ 60]: ae37b3e38d73252c -Block 0023 [ 61]: fb9610e25ae10d9a -Block 0023 [ 62]: fd0493c39dff6521 -Block 0023 [ 63]: 1abead7fa22e7ee7 -Block 0023 [ 64]: fa54f2336e7a816b -Block 0023 [ 65]: c9ef67deeb2238af -Block 0023 [ 66]: 3bd2bafd83abf2fa -Block 0023 [ 67]: 995385d15f693c1b -Block 0023 [ 68]: 35409549ee4db0c7 -Block 0023 [ 69]: 1e501283957b8d79 -Block 0023 [ 70]: 57edfd6799c7b1a0 -Block 0023 [ 71]: 42d993d322a85ca3 -Block 0023 [ 72]: 49842f3edfe3a13f -Block 0023 [ 73]: eaed319e568fe464 -Block 0023 [ 74]: 4839e1a7a8233599 -Block 0023 [ 75]: f2d5f7df30b2e85e -Block 0023 [ 76]: c9a770a607739db1 -Block 0023 [ 77]: 02c54ed70c63a598 -Block 0023 [ 78]: 27b1e90934def83a -Block 0023 [ 79]: 476fe1ecd08c315d -Block 0023 [ 80]: e546b55b51e06075 -Block 0023 [ 81]: 8bf363a6252cb544 -Block 0023 [ 82]: f712f271ef124632 -Block 0023 [ 83]: 19bd4969355d67b1 -Block 0023 [ 84]: b505bc0de2bc042f -Block 0023 [ 85]: 0461f15ec598306a -Block 0023 [ 86]: 7e0734c6a49752a4 -Block 0023 [ 87]: e97530b659023c82 -Block 0023 [ 88]: df66806a45af7ed4 -Block 0023 [ 89]: a1ee45ca25a4e8ef -Block 0023 [ 90]: 85f36f0919bda565 -Block 0023 [ 91]: af8d1c2bc3c6cda2 -Block 0023 [ 92]: d5c8b3905d6c4684 -Block 0023 [ 93]: 924285ed85d7f4fe -Block 0023 [ 94]: e667250c7fe0448d -Block 0023 [ 95]: f18072539252e69b -Block 0023 [ 96]: 98f930d88a11d73d -Block 0023 [ 97]: 40ddc2faea46a6fe -Block 0023 [ 98]: 55edf0abf338fe23 -Block 0023 [ 99]: 137afd6aac160ea4 -Block 0023 [100]: a930757fe62a632b -Block 0023 [101]: f26ea4497a99a22a -Block 0023 [102]: f7dd63b836565686 -Block 0023 [103]: e16156ef2389802e -Block 0023 [104]: e3e02a7fa444bc54 -Block 0023 [105]: d3e93563d3276e5a -Block 0023 [106]: 55e761b504d23408 -Block 0023 [107]: 4c1f0a70be317833 -Block 0023 [108]: 20a59044cc69cabc -Block 0023 [109]: e5642bf5fbf7694c -Block 0023 [110]: dc1e13a4fe52198e -Block 0023 [111]: 118b7c4b6335ca02 -Block 0023 [112]: 4f677c8f3f7d1653 -Block 0023 [113]: e3623052b8793124 -Block 0023 [114]: 64e8edf529114177 -Block 0023 [115]: 1b40d9ea83af342b -Block 0023 [116]: 68e7c45d6fe85d2b -Block 0023 [117]: 8d33a45c58de3420 -Block 0023 [118]: 6205c61932eac00e -Block 0023 [119]: 4c9001286a4a5748 -Block 0023 [120]: 629740cfc16c5f44 -Block 0023 [121]: aac9b6c66cf37178 -Block 0023 [122]: 362f773d06d7b5e5 -Block 0023 [123]: 7145aea05eabfbca -Block 0023 [124]: 3fa429c42644e339 -Block 0023 [125]: 026700c0b6e2e78c -Block 0023 [126]: 0db5145e9f66582e -Block 0023 [127]: f013125cd14c2aa2 -Block 0024 [ 0]: e2165971c08fea98 -Block 0024 [ 1]: 956b34362d16bde6 -Block 0024 [ 2]: 0a750c1da3669c5a -Block 0024 [ 3]: 28f0cc2dec551759 -Block 0024 [ 4]: b460b783bb6ce4d4 -Block 0024 [ 5]: ccd11552304ffe83 -Block 0024 [ 6]: 895f1451900d0571 -Block 0024 [ 7]: c718c33fc912a775 -Block 0024 [ 8]: 6ac891a642a415e0 -Block 0024 [ 9]: f9cc3a0b0bfd732e -Block 0024 [ 10]: 32c8c20180df24fc -Block 0024 [ 11]: 083ec47a8fc783bf -Block 0024 [ 12]: 10d4a62e2dfca22d -Block 0024 [ 13]: a7cbc7fe934df62d -Block 0024 [ 14]: 60b767b23c7b5434 -Block 0024 [ 15]: 013a9f1758cd46f4 -Block 0024 [ 16]: c521969bc47e72bb -Block 0024 [ 17]: c8c2805cf7474ad1 -Block 0024 [ 18]: d73691bff67d34eb -Block 0024 [ 19]: 0109966c69bf5c53 -Block 0024 [ 20]: bcef0f8a35acd7dc -Block 0024 [ 21]: b5ab773d7386f310 -Block 0024 [ 22]: ddbe3e6b9b29d885 -Block 0024 [ 23]: 53d4e2d94e14df8d -Block 0024 [ 24]: dd77c5edfdebd8dd -Block 0024 [ 25]: 4dfe82d7fcb944f8 -Block 0024 [ 26]: 1dda860fdb104746 -Block 0024 [ 27]: 690c21298d00576a -Block 0024 [ 28]: 31f616a8603ba209 -Block 0024 [ 29]: df15e6faf136ed42 -Block 0024 [ 30]: a2d0b72888d9a03b -Block 0024 [ 31]: f22e82632b4cd9f9 -Block 0024 [ 32]: e15829a9ca7c6ff9 -Block 0024 [ 33]: d0e0c25534f07259 -Block 0024 [ 34]: 39a144104a62a724 -Block 0024 [ 35]: ba85ed7991504855 -Block 0024 [ 36]: 29bb22ded5d822d1 -Block 0024 [ 37]: dc45c5b64f27ac67 -Block 0024 [ 38]: b5ab1d0a5d3ca66d -Block 0024 [ 39]: ebdec5e7d82f2f5f -Block 0024 [ 40]: 2660e8938068ecbf -Block 0024 [ 41]: fc5c71724b0cb677 -Block 0024 [ 42]: 84ee0dc836f79250 -Block 0024 [ 43]: 5b679856c2388af0 -Block 0024 [ 44]: fbf4eb8f24c8e20c -Block 0024 [ 45]: 2fe8cbd52863716c -Block 0024 [ 46]: fede1a5b69045a28 -Block 0024 [ 47]: 65809054232875e1 -Block 0024 [ 48]: f1a33e9b660490ae -Block 0024 [ 49]: f728418282376b71 -Block 0024 [ 50]: 910beb5b9d19dd01 -Block 0024 [ 51]: 0ef1de00ba9c6f07 -Block 0024 [ 52]: 7a669f3a91b22362 -Block 0024 [ 53]: 80fb3d95430597a7 -Block 0024 [ 54]: 10b373244e409034 -Block 0024 [ 55]: 71aaa62305372b2e -Block 0024 [ 56]: 787cdf237ee54aab -Block 0024 [ 57]: 956c44880fd8f8cb -Block 0024 [ 58]: 60c90815957df46f -Block 0024 [ 59]: 83f28fcaeaf7efdf -Block 0024 [ 60]: 7817d1a16c11f2b8 -Block 0024 [ 61]: 8d957aba9fe91cde -Block 0024 [ 62]: cc487239691feca9 -Block 0024 [ 63]: 7223ce9510cd99f0 -Block 0024 [ 64]: 574f63f3b893bd20 -Block 0024 [ 65]: 2f2654e8cf49ca0e -Block 0024 [ 66]: 338f89121a53ea59 -Block 0024 [ 67]: 511e9d8f0027e12d -Block 0024 [ 68]: 31d58a613f863ff8 -Block 0024 [ 69]: ff90079b882b3303 -Block 0024 [ 70]: 3dbbf7c9ff0da4f4 -Block 0024 [ 71]: bb52ab6617231643 -Block 0024 [ 72]: e62a9b54fc156ac1 -Block 0024 [ 73]: fca1f4a80bb48a37 -Block 0024 [ 74]: 04106b8fa9a32d1c -Block 0024 [ 75]: 64d243aa253f7eb1 -Block 0024 [ 76]: 2f763fbb0c2adac4 -Block 0024 [ 77]: edc93685822747f9 -Block 0024 [ 78]: d4cd3faa4576d0ff -Block 0024 [ 79]: cdd3212556200783 -Block 0024 [ 80]: 0f6c01aa978124bc -Block 0024 [ 81]: daf5f1d5f6ebc523 -Block 0024 [ 82]: a6a7d120838f1a38 -Block 0024 [ 83]: a29692c9d853e590 -Block 0024 [ 84]: 7190defba554d3dd -Block 0024 [ 85]: d778f0e9b1a010ea -Block 0024 [ 86]: efca87f19ffc3d91 -Block 0024 [ 87]: d83dc74dad48654f -Block 0024 [ 88]: 83bbcf53dbe87809 -Block 0024 [ 89]: 954a6988f2584a5e -Block 0024 [ 90]: 5fa4f2aa07e61f2d -Block 0024 [ 91]: 4419aa301b0edf63 -Block 0024 [ 92]: ae2a42774762f64f -Block 0024 [ 93]: e8c6383746f81621 -Block 0024 [ 94]: 29c3f2535d94b29c -Block 0024 [ 95]: 0a04988ad66aa658 -Block 0024 [ 96]: 554e3723e34d327f -Block 0024 [ 97]: b8f13dac291e9a97 -Block 0024 [ 98]: 07aecb10260d229f -Block 0024 [ 99]: 34df4da902134c48 -Block 0024 [100]: 6496134cfe2ba958 -Block 0024 [101]: 35b7391dfa167dc7 -Block 0024 [102]: 1b746919447ddb5e -Block 0024 [103]: c567f3eb1deeeaf0 -Block 0024 [104]: 6c38ac1788c46474 -Block 0024 [105]: d95e56354346a0b8 -Block 0024 [106]: cd077f86ac3d4edb -Block 0024 [107]: 1bb1f6b8dc1fb74c -Block 0024 [108]: 34a43954ba7d40b0 -Block 0024 [109]: 8648223359c3c41b -Block 0024 [110]: 91367335cda75388 -Block 0024 [111]: c4c21989dadcacb9 -Block 0024 [112]: ed6f4ff9c4d511b0 -Block 0024 [113]: fa9839f79f324c1f -Block 0024 [114]: f9d30bbf2c448265 -Block 0024 [115]: e77b01d0fb7a56a6 -Block 0024 [116]: 1b32529459898945 -Block 0024 [117]: 597b007f6fce7bd5 -Block 0024 [118]: c2b1361d1d167c45 -Block 0024 [119]: 3af3e20caa6c0158 -Block 0024 [120]: 9e61cd876ca97f38 -Block 0024 [121]: a93f46dfd68eb195 -Block 0024 [122]: cc1861552459b84e -Block 0024 [123]: 7aaf11c61f8ee8cd -Block 0024 [124]: 7010b56bb3d8d5a0 -Block 0024 [125]: eba510b51849285a -Block 0024 [126]: 1c1cdef86a925a57 -Block 0024 [127]: ef174658add9bc4e -Block 0025 [ 0]: 7fec1e914e41b561 -Block 0025 [ 1]: 8d453719a29ade82 -Block 0025 [ 2]: 4c44899c93e4fc6c -Block 0025 [ 3]: 29c0996cb00e492f -Block 0025 [ 4]: f8a70a32463afdaf -Block 0025 [ 5]: 3a7899c650c11af9 -Block 0025 [ 6]: bab6cbf971ef5305 -Block 0025 [ 7]: a8b4f7ba8b398784 -Block 0025 [ 8]: 73211324c30b68f3 -Block 0025 [ 9]: 623fe1e8f3cc900d -Block 0025 [ 10]: dc28af58c2f66a8d -Block 0025 [ 11]: 97cad6d2d8c6a9a0 -Block 0025 [ 12]: 7cd26c2cdb0b33a9 -Block 0025 [ 13]: 4794dfd6fbc171f0 -Block 0025 [ 14]: 05249ce01b3a8164 -Block 0025 [ 15]: b76e3ffe8767ee52 -Block 0025 [ 16]: 7beffefcb5523eff -Block 0025 [ 17]: bb5bc39e22e26736 -Block 0025 [ 18]: ab7961a2693b9b73 -Block 0025 [ 19]: 6209dfcad9e4dd27 -Block 0025 [ 20]: a1e4650c2db6be75 -Block 0025 [ 21]: fda9226ba7242240 -Block 0025 [ 22]: cf61b8b6356eb618 -Block 0025 [ 23]: ac2640d22df34c79 -Block 0025 [ 24]: 5024c3162fc67605 -Block 0025 [ 25]: 02256e53ff6da584 -Block 0025 [ 26]: 93ce393513783a84 -Block 0025 [ 27]: f66dadb003f85c57 -Block 0025 [ 28]: 0845f1d883f7459b -Block 0025 [ 29]: 00c32dc23c554d5d -Block 0025 [ 30]: 8a08a8902817f8a6 -Block 0025 [ 31]: 5308f47b7bb4a416 -Block 0025 [ 32]: 0cbef7467a40258b -Block 0025 [ 33]: e38877ed232a6297 -Block 0025 [ 34]: cd673cc2e015e8c3 -Block 0025 [ 35]: 6ae3ce670e62e29b -Block 0025 [ 36]: 78406412241f4dbf -Block 0025 [ 37]: 82340f60ec09dc7c -Block 0025 [ 38]: 0389649c90d3bd0d -Block 0025 [ 39]: 925d8d83d4a607ed -Block 0025 [ 40]: 2729cf9bf166d4cc -Block 0025 [ 41]: d116cfe5268cffc4 -Block 0025 [ 42]: 6b20a063a5057041 -Block 0025 [ 43]: 695aec8a0fec8f9f -Block 0025 [ 44]: 31ada27506d76516 -Block 0025 [ 45]: bf876ae720b84147 -Block 0025 [ 46]: ca643a7481f8052d -Block 0025 [ 47]: 3aff4d1535fa8346 -Block 0025 [ 48]: e32ffbfb48fa5a47 -Block 0025 [ 49]: ca4cac70a619a571 -Block 0025 [ 50]: d87acc4e60f2ed5b -Block 0025 [ 51]: a6759d0d86d5a6de -Block 0025 [ 52]: 22b94e6b1b2404c8 -Block 0025 [ 53]: 5d393398fcf14d57 -Block 0025 [ 54]: ed5ccc3e832ed159 -Block 0025 [ 55]: 147825a8a16b75a4 -Block 0025 [ 56]: 60e4990ac55196d2 -Block 0025 [ 57]: c274b29fa07122a5 -Block 0025 [ 58]: f508a05f24ed2a53 -Block 0025 [ 59]: 18f64b9695cc5087 -Block 0025 [ 60]: 41301013a11a2eea -Block 0025 [ 61]: cf1f820abded4e61 -Block 0025 [ 62]: f945403230120a27 -Block 0025 [ 63]: 143916edcea38206 -Block 0025 [ 64]: b468dd69c66bc0a2 -Block 0025 [ 65]: e983ac240732b25d -Block 0025 [ 66]: b96d92378b0dd639 -Block 0025 [ 67]: 468af3ef419975a3 -Block 0025 [ 68]: fa16fabd0450c504 -Block 0025 [ 69]: d876668000d8d18b -Block 0025 [ 70]: aa94e1c840e22475 -Block 0025 [ 71]: 0d8c86f2c096de62 -Block 0025 [ 72]: 295fb4a3ed96d94f -Block 0025 [ 73]: 47e05d1e6dbee24b -Block 0025 [ 74]: fd6243959bdbb659 -Block 0025 [ 75]: 10dd4a463ea83767 -Block 0025 [ 76]: 0eaa5cc32a273b99 -Block 0025 [ 77]: 88912904ce45fc60 -Block 0025 [ 78]: ccb0d9f387f74dbd -Block 0025 [ 79]: 405c47e118dee494 -Block 0025 [ 80]: b3f306cf8fea7d62 -Block 0025 [ 81]: 9c91b96d5bb9a697 -Block 0025 [ 82]: 3aa3a7334cb4c9d5 -Block 0025 [ 83]: 77aa2074e793da72 -Block 0025 [ 84]: 373258b45e261ad0 -Block 0025 [ 85]: a51b5dae4eb90126 -Block 0025 [ 86]: fdea9113f6951015 -Block 0025 [ 87]: ef0d4164c8ee9560 -Block 0025 [ 88]: 1d23cb4d4c9e43ac -Block 0025 [ 89]: 42416e0e356e80ab -Block 0025 [ 90]: 803d276ae917a23d -Block 0025 [ 91]: 8369f2919b947247 -Block 0025 [ 92]: 2a2aa71103176ab1 -Block 0025 [ 93]: 57658b2de0fcff86 -Block 0025 [ 94]: 66a2f1e9854343bf -Block 0025 [ 95]: 63a8e311a7610e18 -Block 0025 [ 96]: 6fb19e84fc761401 -Block 0025 [ 97]: 3524af3cb2f85c3e -Block 0025 [ 98]: 7868214e92c478d4 -Block 0025 [ 99]: e58934b63e931f63 -Block 0025 [100]: 0f6f38837b3640c4 -Block 0025 [101]: 7ba53b2d8568d174 -Block 0025 [102]: d4287578bc4b9c80 -Block 0025 [103]: 3b81ca6bb022200e -Block 0025 [104]: 4a1c1961b6f6abef -Block 0025 [105]: 60b02a0b6fe0e5b2 -Block 0025 [106]: 960fe18d397dfc00 -Block 0025 [107]: 497c1301e2120010 -Block 0025 [108]: 2743e5a8fa54d8fd -Block 0025 [109]: d91051c35b6937d9 -Block 0025 [110]: 61cf2d54b6a88b23 -Block 0025 [111]: aa97b9a04103678e -Block 0025 [112]: 88e8cc12ce6811d8 -Block 0025 [113]: 55ffb84df352154f -Block 0025 [114]: bc142122988a14af -Block 0025 [115]: 37de60d0a05f0003 -Block 0025 [116]: 8e24d02b3a35ec25 -Block 0025 [117]: 102c19d5020c7991 -Block 0025 [118]: ecd2c067a6d6325e -Block 0025 [119]: 924903bbe73407f7 -Block 0025 [120]: 672e27fff84fcd25 -Block 0025 [121]: 55952481cec95079 -Block 0025 [122]: 895d0739c3033a5c -Block 0025 [123]: 49849f73384e29a1 -Block 0025 [124]: d886142337a344d5 -Block 0025 [125]: 4059e0437a4c4d45 -Block 0025 [126]: ab9f890c59d37d30 -Block 0025 [127]: d35dccaa6b900138 -Block 0026 [ 0]: eee79f21af3c1e8e -Block 0026 [ 1]: cc2b33ab486fc093 -Block 0026 [ 2]: 7db236b8961a5233 -Block 0026 [ 3]: 319862e736fc58f1 -Block 0026 [ 4]: bdfa5963f1a5be5b -Block 0026 [ 5]: 5cf9608979c5355e -Block 0026 [ 6]: 4175701f1efa27d6 -Block 0026 [ 7]: 24ef75feaae50536 -Block 0026 [ 8]: 955e1030a76356d9 -Block 0026 [ 9]: d4c681c9bdc99c39 -Block 0026 [ 10]: d85f521c1aed09e7 -Block 0026 [ 11]: 45b8930d91788202 -Block 0026 [ 12]: 3d0729ae0f077706 -Block 0026 [ 13]: 6b0aedc4b086f3ee -Block 0026 [ 14]: b13861f6559ad8b2 -Block 0026 [ 15]: 6e5711968499f603 -Block 0026 [ 16]: 2922cc84dace481e -Block 0026 [ 17]: 7bf9a9a7faf8ad75 -Block 0026 [ 18]: 0ea59090b01bb758 -Block 0026 [ 19]: 89fc6435584e1314 -Block 0026 [ 20]: 7d0b42809c01601f -Block 0026 [ 21]: cd0195da60ebc4ca -Block 0026 [ 22]: 4837f09b307c04c7 -Block 0026 [ 23]: 36d3ca566e75c126 -Block 0026 [ 24]: a72fab6fed57b401 -Block 0026 [ 25]: 1ab0894c537871df -Block 0026 [ 26]: 6e53e4d625a51697 -Block 0026 [ 27]: 3da3deee9e4bc1b9 -Block 0026 [ 28]: 3524a0a179c6c924 -Block 0026 [ 29]: 840b3b1ba8ce34b6 -Block 0026 [ 30]: 53632d16b059cd40 -Block 0026 [ 31]: 647a5a5a55faac31 -Block 0026 [ 32]: 549d91d1f69ad199 -Block 0026 [ 33]: 2d0fa16485540e89 -Block 0026 [ 34]: 5a720ab2729b3793 -Block 0026 [ 35]: 22bcd8adb364c826 -Block 0026 [ 36]: a5f4256a78698151 -Block 0026 [ 37]: 5d0db6ce354e4290 -Block 0026 [ 38]: 947386a9e7360515 -Block 0026 [ 39]: 2a602fa9c315d38d -Block 0026 [ 40]: 3b5f77908f5ac97e -Block 0026 [ 41]: f62232e1a9e7c5f2 -Block 0026 [ 42]: 2ddc59304e07afff -Block 0026 [ 43]: 77270e436e65970a -Block 0026 [ 44]: 7f4850d45d0749e0 -Block 0026 [ 45]: d45d4e3f3366ddc9 -Block 0026 [ 46]: b93f772be1a3c78c -Block 0026 [ 47]: 4ef41e1a491b0786 -Block 0026 [ 48]: fa1b81838aadaf3f -Block 0026 [ 49]: 25699d36489510a7 -Block 0026 [ 50]: a545657caf170dd7 -Block 0026 [ 51]: 72017a211d0bbe62 -Block 0026 [ 52]: 1e9f826d09a0cab0 -Block 0026 [ 53]: f460f400efdd444f -Block 0026 [ 54]: a13fe8780376dbd1 -Block 0026 [ 55]: 98de57bda86100c4 -Block 0026 [ 56]: 45ffa1109383aebb -Block 0026 [ 57]: 51140cd9ad461755 -Block 0026 [ 58]: a851fb5f98b0d712 -Block 0026 [ 59]: 129097e9827e8523 -Block 0026 [ 60]: 08d008e8b91022dc -Block 0026 [ 61]: f928103deb0d802f -Block 0026 [ 62]: 38fcb3cbe1b11398 -Block 0026 [ 63]: 884212b2014cbcde -Block 0026 [ 64]: 6eb5e9ea0e3d1e5f -Block 0026 [ 65]: b45d847bfbcc5d82 -Block 0026 [ 66]: fbb702537bcfad8c -Block 0026 [ 67]: 8c61ddcb3cc2c197 -Block 0026 [ 68]: 37d5c6fb5974522f -Block 0026 [ 69]: 8356ebe985ec8ee8 -Block 0026 [ 70]: 80699d5d11742823 -Block 0026 [ 71]: 1bb1bb7a29b5f605 -Block 0026 [ 72]: 563409efa7d51aec -Block 0026 [ 73]: 91f6bbd7bd7840db -Block 0026 [ 74]: 62b862178bbbdeff -Block 0026 [ 75]: 4421a9f0633e5051 -Block 0026 [ 76]: 4a516a9ba47089e1 -Block 0026 [ 77]: 62a99ffac0b6ac28 -Block 0026 [ 78]: b5de42edd231de76 -Block 0026 [ 79]: ab223fa9002f8262 -Block 0026 [ 80]: aa5f21352cb23793 -Block 0026 [ 81]: 2e8aecaff5c1920d -Block 0026 [ 82]: 6fd6c1fa0bdfe9ad -Block 0026 [ 83]: f41b93489dd5d2fc -Block 0026 [ 84]: b5879ed954e3753e -Block 0026 [ 85]: a9a6346518d7265f -Block 0026 [ 86]: 7e55ef6f8be4f96f -Block 0026 [ 87]: 8915bc4f72f7e290 -Block 0026 [ 88]: e8f985beffef4195 -Block 0026 [ 89]: 0df30da439929ad8 -Block 0026 [ 90]: 65715634474e0c57 -Block 0026 [ 91]: cf051f53301a1280 -Block 0026 [ 92]: c13d30b7dbd59dc6 -Block 0026 [ 93]: 24161f8474d19be2 -Block 0026 [ 94]: 360846888ff2e5ed -Block 0026 [ 95]: 38715e7b8b17fc35 -Block 0026 [ 96]: a4741555b86046e8 -Block 0026 [ 97]: aa9a1a9591d65a3e -Block 0026 [ 98]: 767e5303940f01ff -Block 0026 [ 99]: b5247410c8d63475 -Block 0026 [100]: 3925646e1d5aee02 -Block 0026 [101]: 1803e317f46525a6 -Block 0026 [102]: ffcda1f5e28d1756 -Block 0026 [103]: 6567f296ff4f4122 -Block 0026 [104]: 653dd7e1836c5988 -Block 0026 [105]: 886f7c81c988d824 -Block 0026 [106]: 0d013b026518c3dd -Block 0026 [107]: 4fe2dfc65b4fe2d2 -Block 0026 [108]: 0bf2a1b164b22c42 -Block 0026 [109]: c043304c9083f586 -Block 0026 [110]: faea655742205723 -Block 0026 [111]: f42d636411a368a2 -Block 0026 [112]: 61c54f74a70abaf0 -Block 0026 [113]: 2018d953876f6124 -Block 0026 [114]: be334d3bae590130 -Block 0026 [115]: f13b8cf85d13f182 -Block 0026 [116]: f21645954df1cd54 -Block 0026 [117]: 9b737e10256a2fb8 -Block 0026 [118]: b3cf82a575fbe5ab -Block 0026 [119]: 5f265cad6ea1b14f -Block 0026 [120]: 7ac6b2d3ddf28088 -Block 0026 [121]: 8379ed4fae10de46 -Block 0026 [122]: e7079089c6dc636c -Block 0026 [123]: b7baecd0386b51b7 -Block 0026 [124]: 22c242b2a6d72f34 -Block 0026 [125]: 667fe4a58f5d2dcd -Block 0026 [126]: 95fa7431de515fd0 -Block 0026 [127]: e4d3fb6334c9ce97 -Block 0027 [ 0]: 95cc13c27dac11e0 -Block 0027 [ 1]: 9cd4b9d03cfb1dca -Block 0027 [ 2]: 99dc6b6b20905e25 -Block 0027 [ 3]: c65a7b0d85a1b052 -Block 0027 [ 4]: 615780330d0d4fcb -Block 0027 [ 5]: 91063aeab24cc367 -Block 0027 [ 6]: 7fef51645f233b87 -Block 0027 [ 7]: ea98795e8670e73f -Block 0027 [ 8]: b1835ec86b349192 -Block 0027 [ 9]: 98d2ac020adc50b3 -Block 0027 [ 10]: c64169feae7a03ab -Block 0027 [ 11]: 2a0401a8673c849d -Block 0027 [ 12]: 9ec963971adafe0d -Block 0027 [ 13]: 23c8ee325fe41f07 -Block 0027 [ 14]: 9cd9a0ab69d88679 -Block 0027 [ 15]: 70620926995771f7 -Block 0027 [ 16]: 412a42d7552db869 -Block 0027 [ 17]: 127a9d4f512c8c78 -Block 0027 [ 18]: b1f768cb54661374 -Block 0027 [ 19]: 4c40d442e2be9165 -Block 0027 [ 20]: 196a5e740a20c61a -Block 0027 [ 21]: cd756f83cc1e67d1 -Block 0027 [ 22]: 2bd8b214950f2a2b -Block 0027 [ 23]: 89d607084ba66af5 -Block 0027 [ 24]: 94b170d6c657e48d -Block 0027 [ 25]: 47e7d25dee2010a0 -Block 0027 [ 26]: 75274d0f5d1749e0 -Block 0027 [ 27]: ebca58ce3bc31452 -Block 0027 [ 28]: 776047d1eeedd606 -Block 0027 [ 29]: 3407ed41b231de65 -Block 0027 [ 30]: 28839677058efe92 -Block 0027 [ 31]: 4f0ad4617266354d -Block 0027 [ 32]: b58d45fc16ace760 -Block 0027 [ 33]: 0b469c2426665e50 -Block 0027 [ 34]: 9567c3437165695d -Block 0027 [ 35]: 6a33dbd1b503711a -Block 0027 [ 36]: 7fabae608ee3e8b8 -Block 0027 [ 37]: 83db64f31f42033e -Block 0027 [ 38]: a0e5e912cc5d3d3e -Block 0027 [ 39]: 2d7ed49e3cbf01cd -Block 0027 [ 40]: 96d3428f9fb93f11 -Block 0027 [ 41]: cb3ad898f8306b30 -Block 0027 [ 42]: 976498e32043cb2d -Block 0027 [ 43]: a7bf2d8c654826b9 -Block 0027 [ 44]: 1b979445eeb0247c -Block 0027 [ 45]: 4900f21dfd9f261f -Block 0027 [ 46]: 0be7ad994dd83751 -Block 0027 [ 47]: 2a28f760e8cfa6b3 -Block 0027 [ 48]: 4763d85a8b97536d -Block 0027 [ 49]: 03c4986b76d07230 -Block 0027 [ 50]: 9295e3f685a292c0 -Block 0027 [ 51]: 8a13bfda9f53a779 -Block 0027 [ 52]: e6fbc596a08c812f -Block 0027 [ 53]: 6f2c97960a54b9ff -Block 0027 [ 54]: a95b9bb892e33ad9 -Block 0027 [ 55]: 027bdcb1d4b52e75 -Block 0027 [ 56]: 93f6f341920ffdc7 -Block 0027 [ 57]: a1fd97e0f5da32af -Block 0027 [ 58]: 0bcf62886848b1e9 -Block 0027 [ 59]: 6e25a14e5433ac03 -Block 0027 [ 60]: 132fcbfe477f036c -Block 0027 [ 61]: 75a92ed68ce010d8 -Block 0027 [ 62]: 7c83f7bd5b194717 -Block 0027 [ 63]: 9518cd21fd0f176b -Block 0027 [ 64]: c373918eeaff9a99 -Block 0027 [ 65]: f9d5cb0527a0fab2 -Block 0027 [ 66]: 6b8052ee4e6c9eb8 -Block 0027 [ 67]: 4475452b265d8526 -Block 0027 [ 68]: 97ff0a402d283f29 -Block 0027 [ 69]: 47a28f8f668be30b -Block 0027 [ 70]: 0ce6135b75db2705 -Block 0027 [ 71]: f64a8a64b9a8b771 -Block 0027 [ 72]: e1e3bb7060a7fc4b -Block 0027 [ 73]: 02d019461560420d -Block 0027 [ 74]: 2a0c7f3203179483 -Block 0027 [ 75]: 1e53454b8473f274 -Block 0027 [ 76]: b82e79d9ee2fb12c -Block 0027 [ 77]: bf5bb18121a39453 -Block 0027 [ 78]: 13db251407e143e9 -Block 0027 [ 79]: a14c8eeac312f066 -Block 0027 [ 80]: bda30209efbfd004 -Block 0027 [ 81]: a816c337d880067b -Block 0027 [ 82]: 1514d0b15f85f6c5 -Block 0027 [ 83]: 14cfce4e0208bfa9 -Block 0027 [ 84]: 3f51407c083bdf83 -Block 0027 [ 85]: a8f28065fc004cc2 -Block 0027 [ 86]: f568afd0750735d8 -Block 0027 [ 87]: 4ac604a9699fbf25 -Block 0027 [ 88]: 34bb3001275762df -Block 0027 [ 89]: d82c054cbfec3252 -Block 0027 [ 90]: efb756acf812c5af -Block 0027 [ 91]: 5e0c11a707b379c8 -Block 0027 [ 92]: 0c0b52a5aa880fdb -Block 0027 [ 93]: 23895fe21b252e23 -Block 0027 [ 94]: 0e09635640fbadc0 -Block 0027 [ 95]: 39254b4e838b2f32 -Block 0027 [ 96]: ef5aaa0ecfbcbff9 -Block 0027 [ 97]: bb973544611c61b6 -Block 0027 [ 98]: 092b871664df6963 -Block 0027 [ 99]: 9f53a82922c82954 -Block 0027 [100]: dd6b16d4e8a4cc08 -Block 0027 [101]: 729f3afc047e52fa -Block 0027 [102]: bf5afa90e0abcb45 -Block 0027 [103]: d08500e0472967d1 -Block 0027 [104]: 8a01c778549f1d5b -Block 0027 [105]: 508e2cae29cbd162 -Block 0027 [106]: f8aadda50119c6dd -Block 0027 [107]: 6471e9aacb4d3110 -Block 0027 [108]: 587e2be246825736 -Block 0027 [109]: 1c4870ef364e8310 -Block 0027 [110]: 38ff3234b1eab64f -Block 0027 [111]: 4777693323256caa -Block 0027 [112]: 546824a3717104ef -Block 0027 [113]: 7063337898d609ef -Block 0027 [114]: c47e1708358f5032 -Block 0027 [115]: 85a4009bc5ffacc4 -Block 0027 [116]: 6512c7fe4585fe84 -Block 0027 [117]: 64f96860f4ba19d9 -Block 0027 [118]: eea974193a470d0e -Block 0027 [119]: 4123eac778690e31 -Block 0027 [120]: 9e8db8ec03ba056e -Block 0027 [121]: 8d1c8ab5487d9c9e -Block 0027 [122]: 27bc44f8b6608e52 -Block 0027 [123]: c5bd310b76c5194b -Block 0027 [124]: 2dae5cc9b0c327ef -Block 0027 [125]: cd0b20120f305504 -Block 0027 [126]: da0438041b4d5fa6 -Block 0027 [127]: 2ba18b31e43eade9 -Block 0028 [ 0]: ad8685e10cf2f919 -Block 0028 [ 1]: f6d22e193cac9b5f -Block 0028 [ 2]: caf5f2aabad6ad7b -Block 0028 [ 3]: ff5f32793e153b97 -Block 0028 [ 4]: c874a053b7eb1054 -Block 0028 [ 5]: 017ead4ebd2919e1 -Block 0028 [ 6]: 16b3b42213fe9b27 -Block 0028 [ 7]: 51c42934f453d785 -Block 0028 [ 8]: 8a39cfedde85b7fd -Block 0028 [ 9]: 80c9b2edb6cfa758 -Block 0028 [ 10]: 9afbbdc13ebb7c56 -Block 0028 [ 11]: 757e8f7715fb1aec -Block 0028 [ 12]: 4819c7e370720a42 -Block 0028 [ 13]: 6d76add26824ec7c -Block 0028 [ 14]: 61369c6d5ca30058 -Block 0028 [ 15]: 6a45b512fcefd574 -Block 0028 [ 16]: 4b18609149cefbb1 -Block 0028 [ 17]: b4f97ebade05e5d3 -Block 0028 [ 18]: 7daa2261afde9c2f -Block 0028 [ 19]: 66a98710a8c996b3 -Block 0028 [ 20]: 775ec612f0bac175 -Block 0028 [ 21]: 4bec6cc007f93196 -Block 0028 [ 22]: 6b5f0ba5117c13f1 -Block 0028 [ 23]: 3c8c904aea6eb348 -Block 0028 [ 24]: 77d851f25de2106e -Block 0028 [ 25]: 5bc8c342588b6280 -Block 0028 [ 26]: 3b84b6c6c38f1d93 -Block 0028 [ 27]: 3c8d8be0fe63e3a2 -Block 0028 [ 28]: 8e522662eab779fd -Block 0028 [ 29]: 0ecc0852e256f091 -Block 0028 [ 30]: be8f1bc3d5c71d67 -Block 0028 [ 31]: aed364e39a0f9f78 -Block 0028 [ 32]: e9e3a26f011cc0ca -Block 0028 [ 33]: afdca7a6ed0dd0ce -Block 0028 [ 34]: 05e9611dbb492b0c -Block 0028 [ 35]: b2d474ae67fcf6cc -Block 0028 [ 36]: cca9ff415d063e5f -Block 0028 [ 37]: ad9c2063ab1dcfbe -Block 0028 [ 38]: 4a9b800d68b88e2b -Block 0028 [ 39]: cbc3811f6957142f -Block 0028 [ 40]: 4d0503c9d66615c1 -Block 0028 [ 41]: ce3260f867eb4c95 -Block 0028 [ 42]: d1e76a7573c84e69 -Block 0028 [ 43]: c2c0cd96186c1781 -Block 0028 [ 44]: 9f36ee52a4329b7a -Block 0028 [ 45]: 87577edce1de66e6 -Block 0028 [ 46]: 816f80f6b2061edf -Block 0028 [ 47]: 17f9254bbdb5ac9e -Block 0028 [ 48]: e40ba54a1dc58fb0 -Block 0028 [ 49]: c3c1eb8de29e7f18 -Block 0028 [ 50]: 354e33ca9c7dc248 -Block 0028 [ 51]: f9641c60a1a69d30 -Block 0028 [ 52]: 9cbb5f6e87f8c5fd -Block 0028 [ 53]: 64d73e9d34cf28c1 -Block 0028 [ 54]: d242fc42d7f2ffdd -Block 0028 [ 55]: f79e36c08fa89318 -Block 0028 [ 56]: 49e82aaed9ec936f -Block 0028 [ 57]: 1240ee732e47d6a3 -Block 0028 [ 58]: facae1f5c6ac05f4 -Block 0028 [ 59]: 166a45523aeb1bfc -Block 0028 [ 60]: b30a305b36f190f3 -Block 0028 [ 61]: 7d2a4d7e5d29121d -Block 0028 [ 62]: 968f49abe714a1b2 -Block 0028 [ 63]: 1cc6c2145467657a -Block 0028 [ 64]: cc01c5f6fd8a42ff -Block 0028 [ 65]: 024febbd2427e866 -Block 0028 [ 66]: 60a9cee8fce0c2d2 -Block 0028 [ 67]: e1fceead57c03d4e -Block 0028 [ 68]: 726d7063bfa06784 -Block 0028 [ 69]: f688bd3a4835db4e -Block 0028 [ 70]: ddb6cbdf3bc1bb02 -Block 0028 [ 71]: 6fa7b201ec1bc4ca -Block 0028 [ 72]: 95cf4dc66e7625e1 -Block 0028 [ 73]: 6ed3c8efe613bd10 -Block 0028 [ 74]: 757e4772cea3852e -Block 0028 [ 75]: ec993d1bf6628c4e -Block 0028 [ 76]: aafa342b0fca8218 -Block 0028 [ 77]: 3874afd94e642562 -Block 0028 [ 78]: cba5970115ce5176 -Block 0028 [ 79]: a7b71cdd3ad1acb7 -Block 0028 [ 80]: 62333c9468ca0305 -Block 0028 [ 81]: f1ef305c21e55009 -Block 0028 [ 82]: 718435bd796146f8 -Block 0028 [ 83]: 622ccb59f1a22063 -Block 0028 [ 84]: 70f09c47e1a6037c -Block 0028 [ 85]: 63f46f14080976fd -Block 0028 [ 86]: 634f6d468361e03d -Block 0028 [ 87]: a46eb367a206683f -Block 0028 [ 88]: e70c1678cdf68f8e -Block 0028 [ 89]: cbfb3a46a4d51de7 -Block 0028 [ 90]: d9ee4028cebda472 -Block 0028 [ 91]: be5a5e7eb14f4e97 -Block 0028 [ 92]: 54980c3d0e11d17e -Block 0028 [ 93]: 650d4b43e8c1ea7c -Block 0028 [ 94]: 2b416705ae191d8b -Block 0028 [ 95]: 3eaffbb3c482a960 -Block 0028 [ 96]: bd0c8d5322ccc92b -Block 0028 [ 97]: 8fbb7f24539b0a83 -Block 0028 [ 98]: a556eaba9a3ea820 -Block 0028 [ 99]: 7a17a82dccc42eff -Block 0028 [100]: 4ce767729f962f45 -Block 0028 [101]: 2cb0ef025528422e -Block 0028 [102]: f2bd0ef295a5e7ac -Block 0028 [103]: 0c1c521fe8e6e437 -Block 0028 [104]: d89928a6b49ac759 -Block 0028 [105]: 54be46737f4e6f23 -Block 0028 [106]: 60bce70bb0d241d9 -Block 0028 [107]: 54d68c8a0ae774bd -Block 0028 [108]: f0a53cfa33bac937 -Block 0028 [109]: 60a10ff7da90dd83 -Block 0028 [110]: 6853b2706aadea1a -Block 0028 [111]: 24f9ce2b7bc8be46 -Block 0028 [112]: 6c0fe4b51a2e19cf -Block 0028 [113]: 5a982a426db92263 -Block 0028 [114]: 482d0dd31690892b -Block 0028 [115]: 8efdc4d5017429be -Block 0028 [116]: f575bc4565d51dd5 -Block 0028 [117]: 0ea5dd071321eaf6 -Block 0028 [118]: 52fbf8d427e76b99 -Block 0028 [119]: 46b3e05be5e398e8 -Block 0028 [120]: 3ddf2eb3c2b8e700 -Block 0028 [121]: bc78f822a065e9f3 -Block 0028 [122]: bdf8d5b4c5a8ba2d -Block 0028 [123]: f9c2b061b26bd2b7 -Block 0028 [124]: 33fe73f04f25bab5 -Block 0028 [125]: 62e764f93e73da37 -Block 0028 [126]: fa48fb80cf7a027a -Block 0028 [127]: 2fe93dab8fc62031 -Block 0029 [ 0]: 1c25114d080054b2 -Block 0029 [ 1]: 3049978dd3910faa -Block 0029 [ 2]: 630665bb66071a71 -Block 0029 [ 3]: 615f93e0080ad64a -Block 0029 [ 4]: 2e0e1c1bff1818bb -Block 0029 [ 5]: e71abf025fe71ad9 -Block 0029 [ 6]: 8083e314d46d24cb -Block 0029 [ 7]: ef0ec0198e11c2d6 -Block 0029 [ 8]: 9c25fd2cca5a3433 -Block 0029 [ 9]: 17d6327676bc3cbd -Block 0029 [ 10]: 083ba01aa922c0b9 -Block 0029 [ 11]: fc7476498b286d72 -Block 0029 [ 12]: 45ef0a52cb9120c0 -Block 0029 [ 13]: bc92315cd1ad1289 -Block 0029 [ 14]: 8adbd6b2d9def208 -Block 0029 [ 15]: ef7f1d7f6b273fdd -Block 0029 [ 16]: e1a66a8a177b0e92 -Block 0029 [ 17]: 7f0c17759a6a2c81 -Block 0029 [ 18]: 74f038a1222ade0b -Block 0029 [ 19]: e6b639a3ee39c877 -Block 0029 [ 20]: 8e8271212187b0ed -Block 0029 [ 21]: d1119b8a538012b7 -Block 0029 [ 22]: 9684a1db67815f03 -Block 0029 [ 23]: 92f13cbbc4511e8e -Block 0029 [ 24]: 04402e8baa138996 -Block 0029 [ 25]: 1421773017b7fcd0 -Block 0029 [ 26]: 425e4a2efb095890 -Block 0029 [ 27]: 615c4f54d6c05360 -Block 0029 [ 28]: 3cc3440506895656 -Block 0029 [ 29]: fbf3191e5e1dec36 -Block 0029 [ 30]: 00924a5c517f3ba5 -Block 0029 [ 31]: 641949bc41558437 -Block 0029 [ 32]: 95851f54663602d5 -Block 0029 [ 33]: 13518907e57abcab -Block 0029 [ 34]: 10df5be39581451d -Block 0029 [ 35]: 8c26dfc57214aa1f -Block 0029 [ 36]: 440d0670541231b7 -Block 0029 [ 37]: 22adc451023f7135 -Block 0029 [ 38]: bf90ad6b7d57a9d8 -Block 0029 [ 39]: 65f314a76571d0e6 -Block 0029 [ 40]: 4521c4fe7648e0e5 -Block 0029 [ 41]: a7819acc24b48997 -Block 0029 [ 42]: 9cbe988f344202aa -Block 0029 [ 43]: a5d8ca9a782a8d01 -Block 0029 [ 44]: 402a6cbbab4fbaac -Block 0029 [ 45]: bdcb98d56cf4b174 -Block 0029 [ 46]: 0fb55ee8828984d7 -Block 0029 [ 47]: cba941a9289119f2 -Block 0029 [ 48]: 406e10fe6482ae08 -Block 0029 [ 49]: 2ddf615535d61c97 -Block 0029 [ 50]: 1169c7db459d36b5 -Block 0029 [ 51]: 7c69e32963774bc5 -Block 0029 [ 52]: bab51bdf732a22a9 -Block 0029 [ 53]: 72338e75da6941d7 -Block 0029 [ 54]: 05cdf8d4d23c1510 -Block 0029 [ 55]: 2404f79400e9fa76 -Block 0029 [ 56]: 847854111a5076f3 -Block 0029 [ 57]: e28e0bbd9ac7c69e -Block 0029 [ 58]: f3fd0ca625676710 -Block 0029 [ 59]: 002d56307624a3de -Block 0029 [ 60]: 133b4d50c98238bc -Block 0029 [ 61]: 3db2517e7c12314a -Block 0029 [ 62]: 2887c63233a5c95c -Block 0029 [ 63]: 5b3df7053a5627f1 -Block 0029 [ 64]: f2373bec9848cf4b -Block 0029 [ 65]: 4f588754eec3c136 -Block 0029 [ 66]: 9b21f67a882b1990 -Block 0029 [ 67]: 243398980ba0d418 -Block 0029 [ 68]: b8a6edd946336b02 -Block 0029 [ 69]: 972f614eaf755f5d -Block 0029 [ 70]: 95074346cac8ed2b -Block 0029 [ 71]: 3ac12cf785f77d86 -Block 0029 [ 72]: 60f68806dd076b17 -Block 0029 [ 73]: d17fd5032a3d6b02 -Block 0029 [ 74]: 814f967198fec4c8 -Block 0029 [ 75]: 83f7d4dadafc179b -Block 0029 [ 76]: e709c02efada24c5 -Block 0029 [ 77]: 0d0580392c94ef2b -Block 0029 [ 78]: 046f19ac94b708f0 -Block 0029 [ 79]: f72fd5548fe8734f -Block 0029 [ 80]: cf00ecb33d557287 -Block 0029 [ 81]: e92d7ff78dade0f8 -Block 0029 [ 82]: 40598f10781e56ff -Block 0029 [ 83]: 040feadfeed71c71 -Block 0029 [ 84]: 1063149856339077 -Block 0029 [ 85]: 4aa74045e43ea7e2 -Block 0029 [ 86]: 26bc42c15328824a -Block 0029 [ 87]: 30a9638eaf11ce13 -Block 0029 [ 88]: 2dab95d3873af38f -Block 0029 [ 89]: 1118fe8e5f9278f5 -Block 0029 [ 90]: 16a7a469defe11a0 -Block 0029 [ 91]: db2c2013d8e6ea43 -Block 0029 [ 92]: 7b4773221d047734 -Block 0029 [ 93]: 4a1983262693af37 -Block 0029 [ 94]: f06ee2140af0a9f9 -Block 0029 [ 95]: 850d8f5b7be81399 -Block 0029 [ 96]: 1a32294f6575ad23 -Block 0029 [ 97]: fe3be63e5a2e6017 -Block 0029 [ 98]: 62805a7392fd4ffb -Block 0029 [ 99]: 1b33f67dec4b3903 -Block 0029 [100]: 9984dc27e9ad088f -Block 0029 [101]: 812c94fe8957095c -Block 0029 [102]: cc8fb61d7c16933a -Block 0029 [103]: 85f5d2ab0045cefd -Block 0029 [104]: 1503d44775433d09 -Block 0029 [105]: 652bfd106009a78e -Block 0029 [106]: e24f695c93fd5286 -Block 0029 [107]: 52404a1998c8ecff -Block 0029 [108]: 7e6ea513c1f5d6da -Block 0029 [109]: eb3a8171f4c3792f -Block 0029 [110]: e07da16a2319a335 -Block 0029 [111]: 381983c2feec9e07 -Block 0029 [112]: 714b1e5e148d6efb -Block 0029 [113]: e8058f7258172de5 -Block 0029 [114]: ca88c08a5a4b3cd1 -Block 0029 [115]: a7964146721530a4 -Block 0029 [116]: ebda1b93e6508268 -Block 0029 [117]: 1db938a8c1b0fb0d -Block 0029 [118]: 5fc6ea1a90e9039f -Block 0029 [119]: 460363f3dfbc6922 -Block 0029 [120]: 3c47febd956a90d4 -Block 0029 [121]: 5bf8e6cf0e64a21f -Block 0029 [122]: 1f453952acab6593 -Block 0029 [123]: 223e2d93bb88d64e -Block 0029 [124]: b444bb7bffbf06a9 -Block 0029 [125]: 6a38ebfc13ea2972 -Block 0029 [126]: e2eef6c6de25759d -Block 0029 [127]: 9768792450c49524 -Block 0030 [ 0]: 7ba3f579ddca2190 -Block 0030 [ 1]: 22d29b3c61068d60 -Block 0030 [ 2]: 87e20cd13655d9e0 -Block 0030 [ 3]: 504338f38abb9345 -Block 0030 [ 4]: 203c4012aeca1437 -Block 0030 [ 5]: 7329325b4838e0af -Block 0030 [ 6]: bb401b9ee25b488f -Block 0030 [ 7]: b1ef9f8114b85fa7 -Block 0030 [ 8]: 1040cc21ec703f3a -Block 0030 [ 9]: 4024e59925036861 -Block 0030 [ 10]: 4f81c9b2909a55da -Block 0030 [ 11]: a2cfa25e0e056fee -Block 0030 [ 12]: 83597c4710a6133e -Block 0030 [ 13]: 10b0b67df1881d63 -Block 0030 [ 14]: 32537c2d1bf8dbf4 -Block 0030 [ 15]: 2309f58471c388ef -Block 0030 [ 16]: 4a92e3537e0f7ec3 -Block 0030 [ 17]: 7d7bcdb20434f4b3 -Block 0030 [ 18]: 41ce82991845a620 -Block 0030 [ 19]: 941e16e476dd2690 -Block 0030 [ 20]: 6722b57a04e8a452 -Block 0030 [ 21]: b362caa175d37ccf -Block 0030 [ 22]: e6da12fe73f8a7a4 -Block 0030 [ 23]: ab91792510f58cc9 -Block 0030 [ 24]: 2f276058b3ca8b9e -Block 0030 [ 25]: d03fcd3844ead151 -Block 0030 [ 26]: 2bbbcbb509696ccc -Block 0030 [ 27]: a3c4cbea53e221b4 -Block 0030 [ 28]: 0ca8c51c32abbd85 -Block 0030 [ 29]: 12cecfde86337188 -Block 0030 [ 30]: 9115c3760647e3e0 -Block 0030 [ 31]: f0872dd56649161c -Block 0030 [ 32]: 8323778bd67875eb -Block 0030 [ 33]: 20a38125a1456cdf -Block 0030 [ 34]: c7132e10f95659b5 -Block 0030 [ 35]: 43550cbfaf96e971 -Block 0030 [ 36]: 906c6e43621fb3ab -Block 0030 [ 37]: a96773c8c2bf7bb8 -Block 0030 [ 38]: 77d9183329e7d8db -Block 0030 [ 39]: 976779ce3d284ef1 -Block 0030 [ 40]: fd3d3938f738f649 -Block 0030 [ 41]: 604939458597a8f2 -Block 0030 [ 42]: c16d61d770651c85 -Block 0030 [ 43]: 1788013376bf8022 -Block 0030 [ 44]: 22a75751a1a17395 -Block 0030 [ 45]: 7829de955a6b8108 -Block 0030 [ 46]: 0022a57f1fb5f1a2 -Block 0030 [ 47]: 41994f78614e71f8 -Block 0030 [ 48]: f90c7409006cdef3 -Block 0030 [ 49]: 6a5cfff126910613 -Block 0030 [ 50]: 71c80cab4e5b7d18 -Block 0030 [ 51]: fa8aa1522ce8b68d -Block 0030 [ 52]: 820294d934fd6ced -Block 0030 [ 53]: d5e0cc4de5354cd7 -Block 0030 [ 54]: fcceb29cda3fbb78 -Block 0030 [ 55]: b594083617ab7aa0 -Block 0030 [ 56]: e325471e296b5e13 -Block 0030 [ 57]: f5a3bfa29afd89d9 -Block 0030 [ 58]: 8365b026b7ae8265 -Block 0030 [ 59]: 06c4fdf81946a2d5 -Block 0030 [ 60]: 5c48237336016b39 -Block 0030 [ 61]: 09530a283cfd6aab -Block 0030 [ 62]: cc6a6548585a674c -Block 0030 [ 63]: 9ff25b0d09e3e588 -Block 0030 [ 64]: 74b16415b3a2942c -Block 0030 [ 65]: a2e929656474b2cc -Block 0030 [ 66]: f4c527bff2e0e132 -Block 0030 [ 67]: ed1f016e22c6bd7f -Block 0030 [ 68]: 6eabcdb711291cbf -Block 0030 [ 69]: 1afcd226b75700c6 -Block 0030 [ 70]: 38c0c65b11670ab6 -Block 0030 [ 71]: d8ce9e6ece91a980 -Block 0030 [ 72]: 798152643540f8d7 -Block 0030 [ 73]: c6b670b1959efccc -Block 0030 [ 74]: b1e22df81dd3fedf -Block 0030 [ 75]: 9e1f11ba0e058be6 -Block 0030 [ 76]: 07bd69d09794811a -Block 0030 [ 77]: 2ec47cbcbddeaeaf -Block 0030 [ 78]: 2df03bc4ba861b66 -Block 0030 [ 79]: ba773ed001496798 -Block 0030 [ 80]: 569b7778aff8670b -Block 0030 [ 81]: f46700e1c69e0435 -Block 0030 [ 82]: 5d74c9c45ba0de59 -Block 0030 [ 83]: 663e4cc2d268901a -Block 0030 [ 84]: 00ed57ccb43adc65 -Block 0030 [ 85]: f1028091a25d523a -Block 0030 [ 86]: b58ed0b0be701cb5 -Block 0030 [ 87]: 7ec399c9d0e0541e -Block 0030 [ 88]: a19d52d03c224f50 -Block 0030 [ 89]: aec2c87ef572e728 -Block 0030 [ 90]: 86cb9de77d58a1ed -Block 0030 [ 91]: 8916cdedc2f849a7 -Block 0030 [ 92]: 923cd22741ba9877 -Block 0030 [ 93]: bad3241c62d70131 -Block 0030 [ 94]: b8c8a46b492cd0cf -Block 0030 [ 95]: 583734e81f9b799f -Block 0030 [ 96]: 99f4c7482bd62b5f -Block 0030 [ 97]: 662934d9c8f13647 -Block 0030 [ 98]: ddde62fd5a66320a -Block 0030 [ 99]: 36b6b76c7659e86a -Block 0030 [100]: a8a030b06bf008c3 -Block 0030 [101]: 4091921778cf0f24 -Block 0030 [102]: f81c778387bdbe2a -Block 0030 [103]: 2d6fda29822ccf34 -Block 0030 [104]: 248cd0848efa0c98 -Block 0030 [105]: 2c95378b298a51b2 -Block 0030 [106]: beef562930250524 -Block 0030 [107]: 297b07c36a410f16 -Block 0030 [108]: 81610babf47ce7c5 -Block 0030 [109]: 1ef0a62159d4fe68 -Block 0030 [110]: 123b278bfdc3cd4c -Block 0030 [111]: cb138a7cf3457b3b -Block 0030 [112]: 824a513598683458 -Block 0030 [113]: b95ad1a909d09977 -Block 0030 [114]: f440f03dd9315c6d -Block 0030 [115]: 38f7b95bb7a655f9 -Block 0030 [116]: 1aa8af7867cf8c4a -Block 0030 [117]: efbbb9c8ec4864fc -Block 0030 [118]: 2a65eab6449268f7 -Block 0030 [119]: 78445cb93766fe81 -Block 0030 [120]: 91e91b63495526ae -Block 0030 [121]: 58472c829e44b0ce -Block 0030 [122]: d6979f417e37ce01 -Block 0030 [123]: 50e1ee7e7bbcadc6 -Block 0030 [124]: ac9e9063117ce00a -Block 0030 [125]: 724bbcb180df74f7 -Block 0030 [126]: 81731221098e1b21 -Block 0030 [127]: c8a2a98bbc450bcd -Block 0031 [ 0]: 045d89b2fef33cae -Block 0031 [ 1]: 4e612fc089c32623 -Block 0031 [ 2]: 619e71d9bb28fd39 -Block 0031 [ 3]: 27c3e53832cf0a19 -Block 0031 [ 4]: 64bb6a5d7ec18d9d -Block 0031 [ 5]: 18ed96ac0b1c3404 -Block 0031 [ 6]: 6c2d9ab21881ebd2 -Block 0031 [ 7]: bdfced95a3534f2e -Block 0031 [ 8]: 7b94334f82a87289 -Block 0031 [ 9]: 99ce29bbd4828ee3 -Block 0031 [ 10]: 1382201a56c62bd1 -Block 0031 [ 11]: 4c3aecadfffa1945 -Block 0031 [ 12]: 5d02d36270de91d2 -Block 0031 [ 13]: 194281f0b57ab6ca -Block 0031 [ 14]: 17990c3c8c43ea86 -Block 0031 [ 15]: c2613028a91da2bc -Block 0031 [ 16]: dc3c6a6ec19da0b0 -Block 0031 [ 17]: 36e4423274b42bf8 -Block 0031 [ 18]: ad8b2b684edeb541 -Block 0031 [ 19]: 08eb08aad913784e -Block 0031 [ 20]: 1cc66b7889948507 -Block 0031 [ 21]: 947d8151367f648b -Block 0031 [ 22]: 593aca6896c0d97f -Block 0031 [ 23]: d4302083d98bc450 -Block 0031 [ 24]: 5a8574574458868c -Block 0031 [ 25]: 1358e4ef5db7ba7d -Block 0031 [ 26]: 17069e66d9b3d800 -Block 0031 [ 27]: 576bcf035773c6b1 -Block 0031 [ 28]: 538d9e73892dd9f7 -Block 0031 [ 29]: 6674a874367c772c -Block 0031 [ 30]: b13ea5a6e9df9ec6 -Block 0031 [ 31]: dcad1575df673343 -Block 0031 [ 32]: 050f04429eb1712b -Block 0031 [ 33]: 264e02bb067c8b4a -Block 0031 [ 34]: fed0d6d4f132aff4 -Block 0031 [ 35]: de49da3e89765b84 -Block 0031 [ 36]: f310a259437af7b7 -Block 0031 [ 37]: 96cba3209fdb91a4 -Block 0031 [ 38]: e1713be8fe273a54 -Block 0031 [ 39]: 72aa9606b5970df7 -Block 0031 [ 40]: 2952b1adbf775bb1 -Block 0031 [ 41]: 16bbf6b77d65e6ec -Block 0031 [ 42]: 8320bcdca2785491 -Block 0031 [ 43]: 37d95f58b90bab98 -Block 0031 [ 44]: 328bfb2bbff04f24 -Block 0031 [ 45]: 60f95e2c47abf3c9 -Block 0031 [ 46]: 8114ebf4c06c1fd5 -Block 0031 [ 47]: 987744ea5dd44993 -Block 0031 [ 48]: 1a52f5fbf382b4a1 -Block 0031 [ 49]: d3da784814b828d0 -Block 0031 [ 50]: 52160ed0d7d97b05 -Block 0031 [ 51]: c2f4933259e6811f -Block 0031 [ 52]: 5185c163da681943 -Block 0031 [ 53]: 8b23845e2e3882da -Block 0031 [ 54]: 80d9fac6cb2145c7 -Block 0031 [ 55]: bd41dce9bf49293d -Block 0031 [ 56]: f9c2b9b968add98d -Block 0031 [ 57]: adc8c1c37a5b3d0e -Block 0031 [ 58]: 44425cb926b1bff6 -Block 0031 [ 59]: d1b13e628afc2ebf -Block 0031 [ 60]: 55eb2ae5a985d74f -Block 0031 [ 61]: 766c24a1bf79b78a -Block 0031 [ 62]: d51884b12c88cb82 -Block 0031 [ 63]: 5d0e445e6570dce8 -Block 0031 [ 64]: 4e21b48646f9a771 -Block 0031 [ 65]: 0bd4d6db21e72904 -Block 0031 [ 66]: 4da30953463891b9 -Block 0031 [ 67]: 0b0814f7ff59b523 -Block 0031 [ 68]: d35ade128a30c877 -Block 0031 [ 69]: 420b85f8cc8377d5 -Block 0031 [ 70]: 44daac39899181fc -Block 0031 [ 71]: a3878fc959ebeccb -Block 0031 [ 72]: 3bc2ccee5ae74f04 -Block 0031 [ 73]: 825aee9eed476634 -Block 0031 [ 74]: e59cf558fd5436ef -Block 0031 [ 75]: de17bb16683b18d5 -Block 0031 [ 76]: 97332d9e6a8a9ecf -Block 0031 [ 77]: f08e0091c43ee3d8 -Block 0031 [ 78]: 306922dc76b5ae0d -Block 0031 [ 79]: feff7c3426166bce -Block 0031 [ 80]: 777c10e8ddddde60 -Block 0031 [ 81]: 295055e9b9b5424f -Block 0031 [ 82]: cec9b5204d1939aa -Block 0031 [ 83]: c8bef3c029ca1f65 -Block 0031 [ 84]: 821259a846615ffe -Block 0031 [ 85]: 6d7ee283234891a8 -Block 0031 [ 86]: ecd0d3ed18aac687 -Block 0031 [ 87]: b996bb7bd69d65fd -Block 0031 [ 88]: 308a1a6df3ac818f -Block 0031 [ 89]: 8ef7e58d209370ee -Block 0031 [ 90]: 4fbdbaed220cc53c -Block 0031 [ 91]: fbd95a395f35c150 -Block 0031 [ 92]: e5dbdc7151568326 -Block 0031 [ 93]: bfeb05033d338aab -Block 0031 [ 94]: 6b46732eb7a71a53 -Block 0031 [ 95]: 9a92d880da129da1 -Block 0031 [ 96]: 0a37604a4211898c -Block 0031 [ 97]: f428a8da533063bb -Block 0031 [ 98]: cb0045208c1e3454 -Block 0031 [ 99]: 0f4d726112cc9b2f -Block 0031 [100]: 11f1e6024bcd910d -Block 0031 [101]: f7318f0bd5bee90d -Block 0031 [102]: a297c92f45a29d29 -Block 0031 [103]: 059bc108e5efce3a -Block 0031 [104]: 59e3a1e984eb056d -Block 0031 [105]: 46b15c158c83b579 -Block 0031 [106]: 806e5e022db2e538 -Block 0031 [107]: bd279d5e3ede5f38 -Block 0031 [108]: d2b1a4167a1a1137 -Block 0031 [109]: 2ea81a04f1325445 -Block 0031 [110]: e25e685daabbfbac -Block 0031 [111]: 2401ac591482c6e7 -Block 0031 [112]: 402eb1307a787cc2 -Block 0031 [113]: 57bd18111412a735 -Block 0031 [114]: 5725174a85050656 -Block 0031 [115]: fd12978efd937b2b -Block 0031 [116]: 2364d2d3f85cf135 -Block 0031 [117]: 5215c25a1af83d5f -Block 0031 [118]: cb2275ad0647eede -Block 0031 [119]: fef22902860e8f90 -Block 0031 [120]: 9e44297bb1235d52 -Block 0031 [121]: ec31c49dc6741f04 -Block 0031 [122]: 649cb1eb5bb62de1 -Block 0031 [123]: 4df8c0ca005c51c3 -Block 0031 [124]: 68cf72fccc7112b9 -Block 0031 [125]: 91e8c6f8bb0ad70d -Block 0031 [126]: 4f59c8bd65cbb765 -Block 0031 [127]: 71e436f035f30ed0 -Tag: c8 14 d9 d1 dc 7f 37 aa 13 f0 d7 7f 24 94 bd a1 c8 de 6b 01 6d d3 88 d2 99 52 a4 c4 67 2b 6c e8 diff --git a/pkg/urcrypt/argon2/kats/argon2i.shasum b/pkg/urcrypt/argon2/kats/argon2i.shasum deleted file mode 100644 index eda8d2e3b..000000000 --- a/pkg/urcrypt/argon2/kats/argon2i.shasum +++ /dev/null @@ -1 +0,0 @@ -40a3aeafb092d10cf457a8ee0139c114c911ecf97bd5accf5a99c7ddd6917061 argon2i diff --git a/pkg/urcrypt/argon2/kats/argon2i_v16 b/pkg/urcrypt/argon2/kats/argon2i_v16 deleted file mode 100644 index 173ec023d..000000000 --- a/pkg/urcrypt/argon2/kats/argon2i_v16 +++ /dev/null @@ -1,12304 +0,0 @@ -======================================= -Argon2i version number 16 -======================================= -Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes -Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 -Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 -Secret[8]: 03 03 03 03 03 03 03 03 -Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 -Pre-hashing digest: 1c dc ec c8 58 ca 1b 6d 45 c7 3c 78 d0 00 76 c5 ec fc 5e df 14 45 b4 43 73 97 b1 b8 20 83 ff bf e3 c9 1a a8 f5 06 67 ad 8f b9 d4 e7 52 df b3 85 34 71 9f ba d2 22 61 33 7b 2b 55 29 81 44 09 af - - After pass 0: -Block 0000 [ 0]: 6126d83b5f468363 -Block 0000 [ 1]: 9cec095773e5c7f8 -Block 0000 [ 2]: a84490b8594d238b -Block 0000 [ 3]: 86d7c7521b274d47 -Block 0000 [ 4]: 16aac5132c95105a -Block 0000 [ 5]: 54cf92650efc678a -Block 0000 [ 6]: e5760496d9207afb -Block 0000 [ 7]: 73607b15c2c78c86 -Block 0000 [ 8]: 68c80dce96859e75 -Block 0000 [ 9]: 0db622c99a22a2c5 -Block 0000 [ 10]: 086c753c14616114 -Block 0000 [ 11]: 1fd8377e636de79a -Block 0000 [ 12]: 43f36cb6dbd379be -Block 0000 [ 13]: f3341d9504df2bcb -Block 0000 [ 14]: 3879688fac8074c2 -Block 0000 [ 15]: 71f8cfcd8d86a5ed -Block 0000 [ 16]: 15292c0733f9f8f3 -Block 0000 [ 17]: bf220d19096cccf9 -Block 0000 [ 18]: 6864881c48351e87 -Block 0000 [ 19]: 3f7b64feac03bce2 -Block 0000 [ 20]: 2fa888497c07adf2 -Block 0000 [ 21]: c83602a08906d723 -Block 0000 [ 22]: ed1689618b780c75 -Block 0000 [ 23]: 767529d68b6e5521 -Block 0000 [ 24]: 17c3be6adc708cb5 -Block 0000 [ 25]: b95620c1d8a30c10 -Block 0000 [ 26]: 9f31bffc559b4ad4 -Block 0000 [ 27]: 7b6b7f96f53bb140 -Block 0000 [ 28]: 22a444f84cff8b57 -Block 0000 [ 29]: ebbafed985afb9e8 -Block 0000 [ 30]: ee14d542a4a02cdf -Block 0000 [ 31]: 5344c6fb9868f64a -Block 0000 [ 32]: 9a735a38656ad1ac -Block 0000 [ 33]: 2d312367c8ed15d4 -Block 0000 [ 34]: a27c4eed35237b88 -Block 0000 [ 35]: 9a2738107e55c09d -Block 0000 [ 36]: 6469b001f096721e -Block 0000 [ 37]: e0c1fcda0c416371 -Block 0000 [ 38]: 7d93d0d141fc441e -Block 0000 [ 39]: e16df9690e7dfab6 -Block 0000 [ 40]: bcd40d45bc5f29b7 -Block 0000 [ 41]: 04e28612ee435e2d -Block 0000 [ 42]: f0503ca50e2613e0 -Block 0000 [ 43]: 16aff99842004bff -Block 0000 [ 44]: db80c479037c7341 -Block 0000 [ 45]: 3c0f3c5fb9df5453 -Block 0000 [ 46]: 2925f5e03e0fc637 -Block 0000 [ 47]: c355a96ae6aafd32 -Block 0000 [ 48]: 9e1de5a5c025a425 -Block 0000 [ 49]: d2771ce35d37f4a3 -Block 0000 [ 50]: 09a3d1fe048dab61 -Block 0000 [ 51]: 5a7a53f847dddeab -Block 0000 [ 52]: 09b1981f68879719 -Block 0000 [ 53]: 859259a2c6f6ecf9 -Block 0000 [ 54]: 7f1ae20e3c6194bd -Block 0000 [ 55]: 4976b29d1b927454 -Block 0000 [ 56]: 193f7c26c9631d2e -Block 0000 [ 57]: b64561e3fdb2eab1 -Block 0000 [ 58]: c258b7f17c258b1e -Block 0000 [ 59]: eaff69021f31833d -Block 0000 [ 60]: 8122ce733bef6097 -Block 0000 [ 61]: 3a0dfe60c8e1c168 -Block 0000 [ 62]: 482c1026fb53178a -Block 0000 [ 63]: 152902c04dce5e68 -Block 0000 [ 64]: 51d2259aed46e79c -Block 0000 [ 65]: 2e2eba00224ef895 -Block 0000 [ 66]: a551c68118673401 -Block 0000 [ 67]: c5f8bc7582a504a6 -Block 0000 [ 68]: 016006bd31e9ab43 -Block 0000 [ 69]: 481174e08a737735 -Block 0000 [ 70]: 20729d08a9c3b628 -Block 0000 [ 71]: b591394c7087860d -Block 0000 [ 72]: ea18d459ccaad353 -Block 0000 [ 73]: e7194fa273999f61 -Block 0000 [ 74]: 87b0fe402d666f40 -Block 0000 [ 75]: 024173d9a832f146 -Block 0000 [ 76]: 5bc42a7e424b22dc -Block 0000 [ 77]: 0fc06bb16b038380 -Block 0000 [ 78]: 383dc71785510d0d -Block 0000 [ 79]: c9d4f74c814623a6 -Block 0000 [ 80]: 641fe35196d102a0 -Block 0000 [ 81]: 7be5646169de6e15 -Block 0000 [ 82]: 4b63bbbfee994ef4 -Block 0000 [ 83]: f4d00905bed63c10 -Block 0000 [ 84]: f504a390bd52851b -Block 0000 [ 85]: c7fb46861975facc -Block 0000 [ 86]: e0de393085b3266d -Block 0000 [ 87]: 2a02a46e04ae3fa4 -Block 0000 [ 88]: e3fafc272d96d1b4 -Block 0000 [ 89]: e8ac1b6b0bad54b2 -Block 0000 [ 90]: b7dd7d62d0032fb8 -Block 0000 [ 91]: c1234d0d3389d412 -Block 0000 [ 92]: dd7ddcd2ffd6e04f -Block 0000 [ 93]: f2d7f262ecae94d9 -Block 0000 [ 94]: 419b597a15d167b6 -Block 0000 [ 95]: c4f2c9379b9a3154 -Block 0000 [ 96]: 006161370212d3b7 -Block 0000 [ 97]: e16892fa7f773edd -Block 0000 [ 98]: 90580be4dd441d12 -Block 0000 [ 99]: 78aeffd87f012ac5 -Block 0000 [100]: 0fb81138826cbc2b -Block 0000 [101]: 64a426a5e1791e8d -Block 0000 [102]: 3c66e38936a602f3 -Block 0000 [103]: a89c993bb0499fe2 -Block 0000 [104]: e6cbc1df59d1885e -Block 0000 [105]: bf38ae6bb2d4769a -Block 0000 [106]: 37ca1944b603ee41 -Block 0000 [107]: 8ff503377e1072d4 -Block 0000 [108]: 922633b17f9ccaf4 -Block 0000 [109]: 56d31d1f20067b7c -Block 0000 [110]: 1b4d792e51d685c7 -Block 0000 [111]: 91a44b2a93de6b8c -Block 0000 [112]: b15d5c7ff3e9c59d -Block 0000 [113]: e9592fbe759d075c -Block 0000 [114]: 57a8176f7ce9f926 -Block 0000 [115]: fe4d2b861ed7d098 -Block 0000 [116]: 032053e827a76ae4 -Block 0000 [117]: e36be8b30b418994 -Block 0000 [118]: 5f98474597bc3bec -Block 0000 [119]: 5957eaee755491e2 -Block 0000 [120]: d9e0725e803c1c07 -Block 0000 [121]: 266075388fd82552 -Block 0000 [122]: 445a45e21df8f188 -Block 0000 [123]: 60a723ac7c2094a4 -Block 0000 [124]: fc1a2264395abc60 -Block 0000 [125]: aff3ef6f5e074ab4 -Block 0000 [126]: 14a0d19a17b1dee6 -Block 0000 [127]: 88aca67a1ba1eb77 -Block 0001 [ 0]: 92f6a137c0116c49 -Block 0001 [ 1]: e5d1db692d347116 -Block 0001 [ 2]: cbbc23afa412c0ea -Block 0001 [ 3]: 4608ae1fefbf6190 -Block 0001 [ 4]: b6c69c46fe10980d -Block 0001 [ 5]: 3e8dc5292577d451 -Block 0001 [ 6]: b2e5fd338710a60f -Block 0001 [ 7]: 9b15da0956e750e9 -Block 0001 [ 8]: 38e6b65004ae22b7 -Block 0001 [ 9]: bb6f0805d7e41838 -Block 0001 [ 10]: f30692ae7925cd6f -Block 0001 [ 11]: c3aaecfd3bc42cab -Block 0001 [ 12]: 40ae8704cbc43eb3 -Block 0001 [ 13]: 396b0210df3d5259 -Block 0001 [ 14]: b1c6d3ef23e17d05 -Block 0001 [ 15]: e28b54f6f76dc643 -Block 0001 [ 16]: 6d37b5b3d8d148dc -Block 0001 [ 17]: 488fd552a2adf0cd -Block 0001 [ 18]: 20c3ec97ff51a0f9 -Block 0001 [ 19]: 4afbc70841dcb9a1 -Block 0001 [ 20]: 749d23053fef9e27 -Block 0001 [ 21]: d34e0743ccb60326 -Block 0001 [ 22]: 4c7003c00f6301c7 -Block 0001 [ 23]: a0c64f1efef2bbc0 -Block 0001 [ 24]: 68598d652cd039ac -Block 0001 [ 25]: ec6ef77eb3f130c7 -Block 0001 [ 26]: 4192ac59c1334185 -Block 0001 [ 27]: 3ba7656e7c7a2f56 -Block 0001 [ 28]: 8e7dc7a60815d820 -Block 0001 [ 29]: 476dc8d7b7d42d66 -Block 0001 [ 30]: 540b485f1a99f74c -Block 0001 [ 31]: e716e1fb8dc69710 -Block 0001 [ 32]: 6e195ca6cb50f9f3 -Block 0001 [ 33]: 8f36a6ee0da6dca7 -Block 0001 [ 34]: 7b5db8356ef1eb93 -Block 0001 [ 35]: 91140488c13fefbc -Block 0001 [ 36]: 5b56e3a18aff3217 -Block 0001 [ 37]: 370fc9d02e5fe3f3 -Block 0001 [ 38]: 4481fb4fb2ebc19d -Block 0001 [ 39]: ee8fba7c535c1bc1 -Block 0001 [ 40]: 4bcf4833510f8629 -Block 0001 [ 41]: 8b227c4bf2b48a58 -Block 0001 [ 42]: 2af8ade6f3ba0841 -Block 0001 [ 43]: d0db6ac77a485870 -Block 0001 [ 44]: 916c69962dc6559d -Block 0001 [ 45]: f4885d9b8596d135 -Block 0001 [ 46]: 4f7ae3e6c229d186 -Block 0001 [ 47]: 9a4e75876ca9f1ec -Block 0001 [ 48]: aee24bbeaaeecc3f -Block 0001 [ 49]: cb219d5fdbeaab9e -Block 0001 [ 50]: 5261aaea4dc3b83e -Block 0001 [ 51]: b385b79bc7afff44 -Block 0001 [ 52]: 4af98335575f5e2a -Block 0001 [ 53]: bda4053fd315675b -Block 0001 [ 54]: 41060f2406a1d20d -Block 0001 [ 55]: eb2c51d83ebbd8f1 -Block 0001 [ 56]: 89b7f8f524822057 -Block 0001 [ 57]: fa8cedb05e2f7f20 -Block 0001 [ 58]: 1ad99636edf5754c -Block 0001 [ 59]: 9227b48f92263da8 -Block 0001 [ 60]: 8379858725ac5a34 -Block 0001 [ 61]: e9175a515bc33fed -Block 0001 [ 62]: 45c1af539ca1533b -Block 0001 [ 63]: a750b46c1b9e2e48 -Block 0001 [ 64]: aa7fca933b3bb05b -Block 0001 [ 65]: e56faae612e75484 -Block 0001 [ 66]: 06fda8818cd441c6 -Block 0001 [ 67]: 2490ab894da253cc -Block 0001 [ 68]: 9658b30c03beead8 -Block 0001 [ 69]: 4c69b5b64065b426 -Block 0001 [ 70]: 66b2511ab48f50d8 -Block 0001 [ 71]: d5ad57400ce97db8 -Block 0001 [ 72]: 34878dab0a6554cc -Block 0001 [ 73]: d944d1b92feb67e1 -Block 0001 [ 74]: 8ecdec9887dbfbed -Block 0001 [ 75]: af2bc080b6d34198 -Block 0001 [ 76]: caa1dce2e4974dc8 -Block 0001 [ 77]: efc0177fbaebba33 -Block 0001 [ 78]: 48246fde6f3bf50e -Block 0001 [ 79]: 14347c1e4c9ad74d -Block 0001 [ 80]: c209d794edacac4a -Block 0001 [ 81]: f31388a91f3bc4d9 -Block 0001 [ 82]: 181e34af2ef27582 -Block 0001 [ 83]: 5842b6cd751dc7d5 -Block 0001 [ 84]: c21d7a803651f895 -Block 0001 [ 85]: 856fccb97b344959 -Block 0001 [ 86]: 92434d14dd17508d -Block 0001 [ 87]: f4381d6cfc07a63a -Block 0001 [ 88]: f518d3ea8402c5d7 -Block 0001 [ 89]: fe0bf4b0c78ee477 -Block 0001 [ 90]: ae3d7206a0eebf82 -Block 0001 [ 91]: f3dc7d33c1e5a11b -Block 0001 [ 92]: 47f59e53ce1d5866 -Block 0001 [ 93]: 10d77a10fa0b7fe8 -Block 0001 [ 94]: 08c1156c8d5ad237 -Block 0001 [ 95]: 0bdb8b7d95fef340 -Block 0001 [ 96]: 6b6340b64b078628 -Block 0001 [ 97]: 74538397e38f3063 -Block 0001 [ 98]: 9763d327a10b018b -Block 0001 [ 99]: 8c1ec3f8b67ef707 -Block 0001 [100]: a65855fb53b3cf03 -Block 0001 [101]: 8cd6cbe80fdda8a6 -Block 0001 [102]: 528561ab03e6bea0 -Block 0001 [103]: f3291f99743d5774 -Block 0001 [104]: 1872782ff0e09f79 -Block 0001 [105]: 1de6a683d5ba8800 -Block 0001 [106]: 6852b94ec920fd37 -Block 0001 [107]: aa5fe8aecba3dbd7 -Block 0001 [108]: 9548dcfb3649984d -Block 0001 [109]: ed7bf1bb77ec6a8c -Block 0001 [110]: 00919c392cf70d5d -Block 0001 [111]: c3fa99c16a895fba -Block 0001 [112]: d4a2013dd8193b51 -Block 0001 [113]: 164c8364b08aa019 -Block 0001 [114]: 1c361bb6197c21e6 -Block 0001 [115]: 6c5c0b2f1d028964 -Block 0001 [116]: bdc640b0cf73be16 -Block 0001 [117]: 4c7c28018a0967a1 -Block 0001 [118]: fff1ce82132d02c7 -Block 0001 [119]: 201194ce949e91c1 -Block 0001 [120]: 37f825509d769cf0 -Block 0001 [121]: 92c8a6398dfb5420 -Block 0001 [122]: d421323258148fbf -Block 0001 [123]: 884d799cfb6f9608 -Block 0001 [124]: 357c4fa87d8ea9c1 -Block 0001 [125]: 7ca853f594a806e4 -Block 0001 [126]: b24be8ccb1fd4e00 -Block 0001 [127]: d67d8ab9d0149c41 -Block 0002 [ 0]: 7cb64797e59c2898 -Block 0002 [ 1]: c2c69f1df26fe4f7 -Block 0002 [ 2]: 860e26b28a7f38e7 -Block 0002 [ 3]: 03cfde69ef53362f -Block 0002 [ 4]: ca8ad628ddfe0175 -Block 0002 [ 5]: 3e75216893b8f594 -Block 0002 [ 6]: 5982c82ad8d4f0b0 -Block 0002 [ 7]: dd49775772e79838 -Block 0002 [ 8]: 381be5cb41b74429 -Block 0002 [ 9]: 10e5363f909f7a2b -Block 0002 [ 10]: 0db1fd3b51c83a01 -Block 0002 [ 11]: db09eb1946c6ffbe -Block 0002 [ 12]: 690cc31db135feca -Block 0002 [ 13]: 2064f8998646e505 -Block 0002 [ 14]: 365a864afe9f4fa9 -Block 0002 [ 15]: 04711b105f55045b -Block 0002 [ 16]: 74f81257464e4670 -Block 0002 [ 17]: 81aa2ec1cf089f9d -Block 0002 [ 18]: d78e413290a42017 -Block 0002 [ 19]: 0710017afb761109 -Block 0002 [ 20]: 28ab93bf1da6eaf6 -Block 0002 [ 21]: db42dbd893083632 -Block 0002 [ 22]: 0b613e82d208d081 -Block 0002 [ 23]: f86ba76e6769ab87 -Block 0002 [ 24]: 37a53ed14eb96885 -Block 0002 [ 25]: 7fddf209b7a7aae0 -Block 0002 [ 26]: 27ee9147537a1ffa -Block 0002 [ 27]: 0d87db4ccb03dbd7 -Block 0002 [ 28]: 543598bf8db7090d -Block 0002 [ 29]: 72b4336c52c01431 -Block 0002 [ 30]: 71d3af6cae675c15 -Block 0002 [ 31]: 65b57dfc7adb95de -Block 0002 [ 32]: ce8b82f6d8a790bd -Block 0002 [ 33]: f14bf7489f1cfdea -Block 0002 [ 34]: 9779478ba92b8635 -Block 0002 [ 35]: e3c5d4eea1d1b38f -Block 0002 [ 36]: f726715c4e7d4596 -Block 0002 [ 37]: 460eda3b2a00f89a -Block 0002 [ 38]: f43a475d55f514a2 -Block 0002 [ 39]: debcfd04de87ef41 -Block 0002 [ 40]: ccb3c6e561b4c5c1 -Block 0002 [ 41]: ebf2866ca4dafa31 -Block 0002 [ 42]: 91bdefb27e3e4e1b -Block 0002 [ 43]: 528f3555c38a4d53 -Block 0002 [ 44]: 2497400fbe5afe51 -Block 0002 [ 45]: ff4b8c72c6e53f7f -Block 0002 [ 46]: 2c40cb7438aa7300 -Block 0002 [ 47]: 9943309c4e6444ab -Block 0002 [ 48]: 93bdb8c08c695d05 -Block 0002 [ 49]: 3e026f39af513ff6 -Block 0002 [ 50]: 94f1714790aabcef -Block 0002 [ 51]: 0795a3358040e131 -Block 0002 [ 52]: ae4830e6481ee1eb -Block 0002 [ 53]: 3ecc56c7b013fa4c -Block 0002 [ 54]: ddfff79f85dafcad -Block 0002 [ 55]: 1f0c9ef1a52df3ca -Block 0002 [ 56]: e909957e4e37ecc8 -Block 0002 [ 57]: c8a40a7602da74e9 -Block 0002 [ 58]: de8822670791deed -Block 0002 [ 59]: 65934f243e9e1e83 -Block 0002 [ 60]: 474cb0df3377639a -Block 0002 [ 61]: 1736eb3a980fd11d -Block 0002 [ 62]: 8fa8d44a066e5257 -Block 0002 [ 63]: 48e036872f7af05c -Block 0002 [ 64]: e521b7cd11db971b -Block 0002 [ 65]: 37f1ee21d8f892a6 -Block 0002 [ 66]: daf18f10b4c59135 -Block 0002 [ 67]: a92c39375926d19c -Block 0002 [ 68]: 61776d72b6dfcbf6 -Block 0002 [ 69]: 6cfd113b795956a6 -Block 0002 [ 70]: 41df6184c37d305d -Block 0002 [ 71]: da0ea530201657b3 -Block 0002 [ 72]: 0eaa8327f0b26deb -Block 0002 [ 73]: 749bef1979a66c54 -Block 0002 [ 74]: 0a4803ba5f98464d -Block 0002 [ 75]: aeef50b86747236a -Block 0002 [ 76]: 7c4204ccbdb87888 -Block 0002 [ 77]: a86c145c2617d45b -Block 0002 [ 78]: e6ec9cf481b74a97 -Block 0002 [ 79]: 52da1faf824b842b -Block 0002 [ 80]: eec0083945a6d2ed -Block 0002 [ 81]: 0d7b28e58b0982f0 -Block 0002 [ 82]: ec807b340dcde015 -Block 0002 [ 83]: ed0db6917d48a4d2 -Block 0002 [ 84]: 85bc55d932e3b3a5 -Block 0002 [ 85]: 71b54dd726a7a3dc -Block 0002 [ 86]: 86dacac98463a414 -Block 0002 [ 87]: 9d9adf7a9a974406 -Block 0002 [ 88]: 2b1ad483c47d825d -Block 0002 [ 89]: 1dd4baa8e20cc036 -Block 0002 [ 90]: 300f765115a0d235 -Block 0002 [ 91]: 34b0bbec6295a57d -Block 0002 [ 92]: 47c2dcab1c8dc56e -Block 0002 [ 93]: 909dcbf65dfd3e4a -Block 0002 [ 94]: bdf4ce01c995501f -Block 0002 [ 95]: 2692141f3829aa9b -Block 0002 [ 96]: d52f697f214d2ea2 -Block 0002 [ 97]: 4eec1c847a44b701 -Block 0002 [ 98]: a14e42edfcff1342 -Block 0002 [ 99]: 597274dab26579c9 -Block 0002 [100]: c8938ed8f54ade44 -Block 0002 [101]: bbdafc08ba8a311b -Block 0002 [102]: 1f77d352b3fb4974 -Block 0002 [103]: 94f2bc7fba84f2d0 -Block 0002 [104]: e2b7015dd2b71522 -Block 0002 [105]: 1a8d1766a4832f57 -Block 0002 [106]: c65a8b0b90388f29 -Block 0002 [107]: 4079af95ac5bb19e -Block 0002 [108]: 961a858ee6f4507d -Block 0002 [109]: e23387d57615d488 -Block 0002 [110]: ea54c14ae8386039 -Block 0002 [111]: c18c93179a7f881f -Block 0002 [112]: 8c8cf06e883a59d9 -Block 0002 [113]: 37cd8e83271d4f0d -Block 0002 [114]: d514a6baa9a22279 -Block 0002 [115]: ca7a1d07761bd380 -Block 0002 [116]: 6654e0ab9bddf7bd -Block 0002 [117]: 605c709efd511084 -Block 0002 [118]: 051a36cd71ce213b -Block 0002 [119]: 344cc6b3d6a1d436 -Block 0002 [120]: f455839c5d4d7a4f -Block 0002 [121]: 1c24c88988a49b33 -Block 0002 [122]: f01bf8d496ee65aa -Block 0002 [123]: e03b0ba3f6117b98 -Block 0002 [124]: 6bca08fdc5511ca7 -Block 0002 [125]: 7fb253076266795f -Block 0002 [126]: 1426489946579710 -Block 0002 [127]: 33d4fa27e9e37b58 -Block 0003 [ 0]: 046a31cd596782ec -Block 0003 [ 1]: bc54a531abfcfa7b -Block 0003 [ 2]: 4b77511da81d7d87 -Block 0003 [ 3]: 83b4ead00cda96fd -Block 0003 [ 4]: 8e7f5159419fa475 -Block 0003 [ 5]: dca90d89e4a289bb -Block 0003 [ 6]: 357863376708b679 -Block 0003 [ 7]: 39cbd5feb80d6deb -Block 0003 [ 8]: 36cc83eb85aca316 -Block 0003 [ 9]: a60c7bca46e83bf0 -Block 0003 [ 10]: b47654f5fb4b0af7 -Block 0003 [ 11]: 8a1f3a2a2a8379a9 -Block 0003 [ 12]: 794fe4476e91c2ac -Block 0003 [ 13]: 12e0f417e18416ba -Block 0003 [ 14]: b56e37032b2c5d1b -Block 0003 [ 15]: db9927e597d1feaf -Block 0003 [ 16]: 0f3d8291a8065f7f -Block 0003 [ 17]: c5bdad1ba4d491ac -Block 0003 [ 18]: b92dd3a668c599d0 -Block 0003 [ 19]: d3ed13931fd174f5 -Block 0003 [ 20]: dd56a98550e6d564 -Block 0003 [ 21]: e36bf64d1375e226 -Block 0003 [ 22]: 20deb434e56892c3 -Block 0003 [ 23]: 85f1359078ee2533 -Block 0003 [ 24]: f722f5fde663ada6 -Block 0003 [ 25]: 619831358089e591 -Block 0003 [ 26]: 7c580214447aefee -Block 0003 [ 27]: 3c2f950a7b194280 -Block 0003 [ 28]: 1aa7cc80aeff8f4a -Block 0003 [ 29]: ce8fa25f55bfe78f -Block 0003 [ 30]: 45dc872f693d4f0f -Block 0003 [ 31]: c9f8dbf8c2c180e0 -Block 0003 [ 32]: 8c312b4ef842d09b -Block 0003 [ 33]: c227867fddc7021b -Block 0003 [ 34]: 403eabd3b6b05550 -Block 0003 [ 35]: a9b1a0ee2cdba6ba -Block 0003 [ 36]: 4795c98a795d0c25 -Block 0003 [ 37]: c9e0d0c57a1241bd -Block 0003 [ 38]: 6c9928c206adef1c -Block 0003 [ 39]: ed3f418ed47e41c0 -Block 0003 [ 40]: 001154d3cc4ce182 -Block 0003 [ 41]: d1ad903c0f1f94b8 -Block 0003 [ 42]: c3c8cea43847addd -Block 0003 [ 43]: 15159c3d406282e4 -Block 0003 [ 44]: feda097ad8fb4a18 -Block 0003 [ 45]: b546ba8ab0e92e3e -Block 0003 [ 46]: d0f960d5f07c7716 -Block 0003 [ 47]: 93f1aeb83b8ccfa3 -Block 0003 [ 48]: b3a262d1b3fa3cb2 -Block 0003 [ 49]: 6a9aceae3eab8923 -Block 0003 [ 50]: 3dd182181b145c83 -Block 0003 [ 51]: b58be4a8bca5f09c -Block 0003 [ 52]: f3f5e5ccac8fe364 -Block 0003 [ 53]: f9cbfb4c276d7eb8 -Block 0003 [ 54]: c24235d25fdc45ce -Block 0003 [ 55]: d315a35ddcd17553 -Block 0003 [ 56]: e1cc7517fa37a8d4 -Block 0003 [ 57]: 308371963bdd138d -Block 0003 [ 58]: 013977ff0ffe9c54 -Block 0003 [ 59]: ad33021b070e8c14 -Block 0003 [ 60]: e710659ac74ab001 -Block 0003 [ 61]: 1bd0f3c858425586 -Block 0003 [ 62]: ed4295897e10f1a8 -Block 0003 [ 63]: 1053070c46b83401 -Block 0003 [ 64]: ca6b0e8a8ccdd08e -Block 0003 [ 65]: 7cedb28e772004b9 -Block 0003 [ 66]: bdaa36a79b505fae -Block 0003 [ 67]: 0d5698f9b8aa0f63 -Block 0003 [ 68]: 504ca8ea7543efa1 -Block 0003 [ 69]: 9610336b7f760920 -Block 0003 [ 70]: 5df8e1999e267562 -Block 0003 [ 71]: 803b49d953e979fa -Block 0003 [ 72]: bc983c4136089649 -Block 0003 [ 73]: edb1e4ffa2af0a7d -Block 0003 [ 74]: 49dc4796c1597e97 -Block 0003 [ 75]: 9ae9a350dbb18072 -Block 0003 [ 76]: 6a09bc7b6cddfa17 -Block 0003 [ 77]: 19eed074b1d94d1b -Block 0003 [ 78]: 5f79a4365291e828 -Block 0003 [ 79]: ed3903991e88d303 -Block 0003 [ 80]: e6b4f5655bf1a227 -Block 0003 [ 81]: a660d316b19c6cf5 -Block 0003 [ 82]: 1bba7c7f616017ec -Block 0003 [ 83]: 6efee2015ea709b5 -Block 0003 [ 84]: 7bca856327d86867 -Block 0003 [ 85]: f1d901fb696cfe6e -Block 0003 [ 86]: b61228cc0f5519e5 -Block 0003 [ 87]: f1cca47f7aa1de4c -Block 0003 [ 88]: c4b0874e7b7523bc -Block 0003 [ 89]: fbe80a4579da608b -Block 0003 [ 90]: 51065fdacf129897 -Block 0003 [ 91]: 5c98141f3b90991a -Block 0003 [ 92]: cd19889c4a4d7139 -Block 0003 [ 93]: f37f5d6b56d239a4 -Block 0003 [ 94]: 973d728bb837500d -Block 0003 [ 95]: 337e69253643f939 -Block 0003 [ 96]: 82e638ae9586e603 -Block 0003 [ 97]: cac9aee8ff136d3d -Block 0003 [ 98]: a1800829a1715101 -Block 0003 [ 99]: df0d298230fb784b -Block 0003 [100]: 6b13a7468f0c0a38 -Block 0003 [101]: 8f0d7471ac242b32 -Block 0003 [102]: f44e149f9b58111e -Block 0003 [103]: 067502de3af50b9f -Block 0003 [104]: fbb82fc217e4b529 -Block 0003 [105]: 7d9881a1bc0e688e -Block 0003 [106]: 30c4685e53b55a42 -Block 0003 [107]: ff9592613630fe41 -Block 0003 [108]: 8bf52e194266394e -Block 0003 [109]: fba0c347e59a5039 -Block 0003 [110]: a9c06323b6fa268a -Block 0003 [111]: c3bad73a55771917 -Block 0003 [112]: acc361d48a5ae241 -Block 0003 [113]: a943d90299f113eb -Block 0003 [114]: 044d325cedeceb09 -Block 0003 [115]: 8947b50203df6ac1 -Block 0003 [116]: 81bfe91acfdc25c9 -Block 0003 [117]: 2f855fd29282043f -Block 0003 [118]: aa61cf9492ad1d75 -Block 0003 [119]: 3b61c07d952c3c5c -Block 0003 [120]: 750c557fcb0419e2 -Block 0003 [121]: 4e111c1b09db20fa -Block 0003 [122]: 38bca5e15536cc63 -Block 0003 [123]: 5c302c1351c2027e -Block 0003 [124]: f02ca3291dec7a84 -Block 0003 [125]: d8a0d514adacb41f -Block 0003 [126]: 41839d029f843d21 -Block 0003 [127]: eaca093b268ad0ba -Block 0004 [ 0]: 4a6feab4b8d9a6aa -Block 0004 [ 1]: 0ec8b94daf8494c6 -Block 0004 [ 2]: 972a66e201c44775 -Block 0004 [ 3]: 81418e65b5078237 -Block 0004 [ 4]: 1df7116b310281b7 -Block 0004 [ 5]: 3d4997690fcf345e -Block 0004 [ 6]: 001b812e2e96b2b3 -Block 0004 [ 7]: d405f56aecafe337 -Block 0004 [ 8]: 5e4d67602b1feb88 -Block 0004 [ 9]: b4012dcdbfaa0f65 -Block 0004 [ 10]: f46b2fd7d7d7c3e8 -Block 0004 [ 11]: 7a72d1dc28a6bfc1 -Block 0004 [ 12]: c1b087e6e31ce345 -Block 0004 [ 13]: d9178f5cd1d422d5 -Block 0004 [ 14]: 2644c0c342f60248 -Block 0004 [ 15]: c115b4f1b91b13f7 -Block 0004 [ 16]: 4a0d701fd1916369 -Block 0004 [ 17]: dead3ce075e71585 -Block 0004 [ 18]: 5d1e8fc49ba9e218 -Block 0004 [ 19]: eebd4465be91bc50 -Block 0004 [ 20]: 589ebbd596dc3bb5 -Block 0004 [ 21]: 060dec3bbfcfdc3f -Block 0004 [ 22]: d845285a84c5e634 -Block 0004 [ 23]: a2955062ee1b9cb9 -Block 0004 [ 24]: 12f1189860b40ba2 -Block 0004 [ 25]: 0559be7877e4540c -Block 0004 [ 26]: fe890e64101def53 -Block 0004 [ 27]: 9c4840aef7a8e6d1 -Block 0004 [ 28]: 7cdffa34d374b5e1 -Block 0004 [ 29]: 34a58d6c1800aa7d -Block 0004 [ 30]: 013aab816c6af91f -Block 0004 [ 31]: d1b420ea039d2850 -Block 0004 [ 32]: 6831b26763d83168 -Block 0004 [ 33]: 4a501813320e3c48 -Block 0004 [ 34]: 21414a84abb62985 -Block 0004 [ 35]: eb1dfbac686d01c6 -Block 0004 [ 36]: ba34dcb11d258cce -Block 0004 [ 37]: 253065e795c10bd2 -Block 0004 [ 38]: 42479f2a35988b10 -Block 0004 [ 39]: 6b557161266ef5cd -Block 0004 [ 40]: 469ecbd406da560b -Block 0004 [ 41]: e23d234f1d05a4f3 -Block 0004 [ 42]: ca9c7960f939525e -Block 0004 [ 43]: e909a0ffbdb01d0b -Block 0004 [ 44]: 4fdb635d89483ec7 -Block 0004 [ 45]: 701151f5c1a33e07 -Block 0004 [ 46]: 6e3df7807c2f136a -Block 0004 [ 47]: 6b481771a4b587c3 -Block 0004 [ 48]: 784a686a8b5377a9 -Block 0004 [ 49]: af6b9b72b81bc979 -Block 0004 [ 50]: 2c531c77707496eb -Block 0004 [ 51]: 1b84970004449d05 -Block 0004 [ 52]: 11f6aee665db9d5e -Block 0004 [ 53]: 498bfbeb89786794 -Block 0004 [ 54]: b87e2adddba796d5 -Block 0004 [ 55]: bc96cf7212cc363f -Block 0004 [ 56]: 73f49d8035e3bb11 -Block 0004 [ 57]: 0af3303a963bf26a -Block 0004 [ 58]: 9ece6fc7aaebbe27 -Block 0004 [ 59]: 0ba41078e55b2dd8 -Block 0004 [ 60]: 148d93b8883cfcb0 -Block 0004 [ 61]: 28ca70d4d9951701 -Block 0004 [ 62]: 927b0485265f2fad -Block 0004 [ 63]: 7e4ec0be8d07f7a9 -Block 0004 [ 64]: 3d3b81c2d4b1ae15 -Block 0004 [ 65]: 122d786485d65f49 -Block 0004 [ 66]: 128a9238e8bf5f92 -Block 0004 [ 67]: 084139a82686dcc9 -Block 0004 [ 68]: c2753d962cfb45c1 -Block 0004 [ 69]: ed4317b6488d2ac4 -Block 0004 [ 70]: 1a481b6e1265293b -Block 0004 [ 71]: babc5d0e2bf24943 -Block 0004 [ 72]: 968f09611a557929 -Block 0004 [ 73]: f7634e9c15e1fe5f -Block 0004 [ 74]: e58dad4f0a4e3128 -Block 0004 [ 75]: 4c8100c8f517cb58 -Block 0004 [ 76]: adc2ff093d49c0bc -Block 0004 [ 77]: 0b1604ea8a1e4e67 -Block 0004 [ 78]: d2d82d3a7b47df02 -Block 0004 [ 79]: 119575d44af91d2d -Block 0004 [ 80]: c8744a6b6ef42198 -Block 0004 [ 81]: a0d452abd110d22f -Block 0004 [ 82]: f7b64c116254c2ba -Block 0004 [ 83]: 9e561c45cc5a1e50 -Block 0004 [ 84]: 881bca7ef16d5453 -Block 0004 [ 85]: eb70824146b76fa3 -Block 0004 [ 86]: b9e137f458dd4a4f -Block 0004 [ 87]: 1f9dcf6dbce23161 -Block 0004 [ 88]: e12e9a5372dc5bab -Block 0004 [ 89]: 2a2f664e8640cee1 -Block 0004 [ 90]: 52c789496b2e681d -Block 0004 [ 91]: 8f8d8cda2b15640d -Block 0004 [ 92]: 9fa2cd5d3d2cfbad -Block 0004 [ 93]: cba04f79b6f84afd -Block 0004 [ 94]: 503cc81918aa8bd2 -Block 0004 [ 95]: be6434cfd25eb26b -Block 0004 [ 96]: a66ff820241911fa -Block 0004 [ 97]: 40a982a33c6db17c -Block 0004 [ 98]: 1548a37aaa2f1bc4 -Block 0004 [ 99]: 1b5bed3a31c66cc2 -Block 0004 [100]: 5f3ffbc962f42ece -Block 0004 [101]: f36ec53e5c4b528a -Block 0004 [102]: 374516cf62043ac3 -Block 0004 [103]: d4ff691eaa9face7 -Block 0004 [104]: 02f5223343418fd0 -Block 0004 [105]: 5a661b3cbd12cb5f -Block 0004 [106]: 5e8da0dfc6608ca3 -Block 0004 [107]: f4d5dd36bf79a562 -Block 0004 [108]: 2a9987c9f4affcc2 -Block 0004 [109]: 6d64596b325a6b97 -Block 0004 [110]: 36acdce8f84fe5d8 -Block 0004 [111]: 7ec1222497a89aed -Block 0004 [112]: a6a766ae96d768d4 -Block 0004 [113]: 9df26ef4377da55d -Block 0004 [114]: 434c1c0bd115606e -Block 0004 [115]: 62037e156afcd340 -Block 0004 [116]: 29059457b8c8e505 -Block 0004 [117]: 3395589ee15940fd -Block 0004 [118]: 3eca700460f7fc72 -Block 0004 [119]: 58d784ed6d428152 -Block 0004 [120]: 1fcc76e9b80d0973 -Block 0004 [121]: 091bd0c42556bf76 -Block 0004 [122]: 38c09a184c120445 -Block 0004 [123]: a947cc2b9e52124f -Block 0004 [124]: dd743025e87af1d3 -Block 0004 [125]: be5f845d0929b7be -Block 0004 [126]: 3fe708f194a42cda -Block 0004 [127]: 867d4c61e71e0b67 -Block 0005 [ 0]: fb543df6749e523d -Block 0005 [ 1]: 8a78683e4ab04b93 -Block 0005 [ 2]: 02c841e680679b47 -Block 0005 [ 3]: 136516cc99423371 -Block 0005 [ 4]: a769b959d945e45b -Block 0005 [ 5]: 3a30bdb2c18f4de8 -Block 0005 [ 6]: 9ba3535a0f59c9cf -Block 0005 [ 7]: af1452e75ee21cd5 -Block 0005 [ 8]: c2d3a094e5573fc9 -Block 0005 [ 9]: 3b0730860b630abe -Block 0005 [ 10]: 990af4f8f2013efb -Block 0005 [ 11]: e8bb67f6fd509a41 -Block 0005 [ 12]: 1605d1f84eead1e9 -Block 0005 [ 13]: 2ea50d34856b87e6 -Block 0005 [ 14]: 4fe1a2161761fcd4 -Block 0005 [ 15]: 559c8caea9bcc491 -Block 0005 [ 16]: 1819c9b7b5dc24a1 -Block 0005 [ 17]: 416e8cecde86b2a1 -Block 0005 [ 18]: 88fbf997a5fb3fb6 -Block 0005 [ 19]: cb3f8e874f54615a -Block 0005 [ 20]: fcdf3457cbc48f47 -Block 0005 [ 21]: fe161ed6b5fa8562 -Block 0005 [ 22]: cb28c641f83c2721 -Block 0005 [ 23]: c447d47847225215 -Block 0005 [ 24]: 53f5947e2ac4a3c7 -Block 0005 [ 25]: d328ee7dddde7b7f -Block 0005 [ 26]: 6d418f9039e885a6 -Block 0005 [ 27]: c49bd9a76b507899 -Block 0005 [ 28]: 576fe9bb6ca62c00 -Block 0005 [ 29]: be801c3749b880c8 -Block 0005 [ 30]: 4b0059b06dd5e4a9 -Block 0005 [ 31]: 2c3a89bd77b33c57 -Block 0005 [ 32]: 68a1d3f04769b9d5 -Block 0005 [ 33]: f8fc066e5a6f0c9e -Block 0005 [ 34]: e42b2962808c4cf0 -Block 0005 [ 35]: c4c0584656e15e35 -Block 0005 [ 36]: 294d1e713a98b7d6 -Block 0005 [ 37]: afe0633eaac739e0 -Block 0005 [ 38]: af7222b24131006a -Block 0005 [ 39]: 6178bbfb2124d548 -Block 0005 [ 40]: 56f5c66b4fe10b8f -Block 0005 [ 41]: 53c90a148b2ebd77 -Block 0005 [ 42]: 417b844c1274d9d8 -Block 0005 [ 43]: c8907a79e976bd33 -Block 0005 [ 44]: 7064d869deaaa1b1 -Block 0005 [ 45]: 024ed97ff2245f12 -Block 0005 [ 46]: 14fdf38d1306d1b2 -Block 0005 [ 47]: cb298fbfc55f3ee4 -Block 0005 [ 48]: eecc9a5195beacdd -Block 0005 [ 49]: 9d9e953c57e3fa74 -Block 0005 [ 50]: 302d90e2c08746b1 -Block 0005 [ 51]: b002b433537ac056 -Block 0005 [ 52]: aff555002370f1d4 -Block 0005 [ 53]: f92f23141050b6ad -Block 0005 [ 54]: 06d4378ec748701c -Block 0005 [ 55]: 81eeed081edc7f48 -Block 0005 [ 56]: dfe8ae684fd0f17a -Block 0005 [ 57]: 92e63e7564fac228 -Block 0005 [ 58]: 86158a52ab99db1f -Block 0005 [ 59]: 8ed6cc492aac5b00 -Block 0005 [ 60]: 7f51ad01e4076720 -Block 0005 [ 61]: 45bea9c00a87bb9d -Block 0005 [ 62]: 45ec0de126d5ae46 -Block 0005 [ 63]: e427a45bc89c0131 -Block 0005 [ 64]: 0dd149ab71faba66 -Block 0005 [ 65]: cb2b2e0071fa7b53 -Block 0005 [ 66]: 71e77479e9ea7cb2 -Block 0005 [ 67]: ecd627c2257d5842 -Block 0005 [ 68]: 67e2ff459ff6512f -Block 0005 [ 69]: 18cbf83fc201d0a7 -Block 0005 [ 70]: 07c57ab8658d81ec -Block 0005 [ 71]: 6183584d0c49845f -Block 0005 [ 72]: 45e12ff25a656646 -Block 0005 [ 73]: d21335cd1ba3047c -Block 0005 [ 74]: 6b7378fc20768c3b -Block 0005 [ 75]: ee564c9a368c1e46 -Block 0005 [ 76]: d1d18cb6f72d0c79 -Block 0005 [ 77]: aebbeda36f0fc0e0 -Block 0005 [ 78]: 6580a8f2676dcdef -Block 0005 [ 79]: b34b0614331bd5fc -Block 0005 [ 80]: 2243be4dd2e49980 -Block 0005 [ 81]: 783960f9d625078a -Block 0005 [ 82]: b5fa94e6f91b72c9 -Block 0005 [ 83]: 2657b20f7f31b021 -Block 0005 [ 84]: a86de3ee9dd25b95 -Block 0005 [ 85]: 3af6e85645f80ea4 -Block 0005 [ 86]: 3a68ed98df3d594d -Block 0005 [ 87]: d2a68745e380dd7f -Block 0005 [ 88]: 437135cba7eaa3e7 -Block 0005 [ 89]: b80144de6b82a67b -Block 0005 [ 90]: ba03053d2bd25052 -Block 0005 [ 91]: dfe01934ef3be8df -Block 0005 [ 92]: cd9c64f1a2139ea9 -Block 0005 [ 93]: 5bd83d1399ed8a42 -Block 0005 [ 94]: a786e2e263c5e47b -Block 0005 [ 95]: e5cb1fbaaaf26d6d -Block 0005 [ 96]: 2a47e840cf6f84fa -Block 0005 [ 97]: b4a5f7d6cc8957b1 -Block 0005 [ 98]: a42e0f60094cc7cb -Block 0005 [ 99]: 335cd356be912b47 -Block 0005 [100]: d30485e50e27d062 -Block 0005 [101]: e59ebdfd8013f6d6 -Block 0005 [102]: 818a06f6b6266b88 -Block 0005 [103]: c995b852c6da3ca0 -Block 0005 [104]: b72676cffffaf86d -Block 0005 [105]: d2498a2128c52576 -Block 0005 [106]: 2debc84192d6fd30 -Block 0005 [107]: d48716be7be4e90d -Block 0005 [108]: 88f03985da415f6c -Block 0005 [109]: dff03e4cfdd02d4a -Block 0005 [110]: ae970d0e7425c8e4 -Block 0005 [111]: 53a3cee362ea1c8e -Block 0005 [112]: a000e14a36a528bc -Block 0005 [113]: 524c86fec28b74f3 -Block 0005 [114]: 0b528ba6288396a3 -Block 0005 [115]: 749c64a4b184569d -Block 0005 [116]: 2e9488cf658cbded -Block 0005 [117]: c587392b84ba8fb3 -Block 0005 [118]: 018fe60c724a8ba1 -Block 0005 [119]: 2d5b243a75ca9634 -Block 0005 [120]: 06b67ca8f1bd302c -Block 0005 [121]: 688d2272401624fd -Block 0005 [122]: b111f0c4872d900d -Block 0005 [123]: 33d51a30d35f4283 -Block 0005 [124]: b9464778209546b4 -Block 0005 [125]: 1e24119f455c36b2 -Block 0005 [126]: 41fca34623d8bd15 -Block 0005 [127]: dad7e567bc66f72c -Block 0006 [ 0]: a3a72e2c8604b578 -Block 0006 [ 1]: 4713a88b4d727ef8 -Block 0006 [ 2]: d750d3a721d9f31b -Block 0006 [ 3]: 6a465b3a9d114ce6 -Block 0006 [ 4]: 887a8704c786cd4c -Block 0006 [ 5]: d975e67288451b37 -Block 0006 [ 6]: e9c343f24b375d68 -Block 0006 [ 7]: eba23301fa7bd4bd -Block 0006 [ 8]: 14521b31b4bf1c46 -Block 0006 [ 9]: 8c13afd741f37d2b -Block 0006 [ 10]: 6f2b59d1cf12c855 -Block 0006 [ 11]: 5dd35e7e01350317 -Block 0006 [ 12]: 224a64109cc2743b -Block 0006 [ 13]: be90804f32ee3a28 -Block 0006 [ 14]: fe2a8bd84deb0852 -Block 0006 [ 15]: 01d3cf8a505adc92 -Block 0006 [ 16]: bc08b05300c76e75 -Block 0006 [ 17]: 999d681fb563dc43 -Block 0006 [ 18]: d1d4a0f963f8fa6f -Block 0006 [ 19]: 35b5d12da998aefc -Block 0006 [ 20]: 90ed25375fed8bb1 -Block 0006 [ 21]: 77daf28509710d25 -Block 0006 [ 22]: eee16b40398474df -Block 0006 [ 23]: 646f422d3bd880b6 -Block 0006 [ 24]: aa6c2956bd819ec5 -Block 0006 [ 25]: 17eef62e7bf6ca72 -Block 0006 [ 26]: 9b70680f409ebbbd -Block 0006 [ 27]: 101cae1679e39b1a -Block 0006 [ 28]: ae539343701e746d -Block 0006 [ 29]: 9ebe9838e1f9a97b -Block 0006 [ 30]: 1d7df5e0c1f03918 -Block 0006 [ 31]: f6d13d16d00019c7 -Block 0006 [ 32]: f373e4095564f479 -Block 0006 [ 33]: d442f06e4e98d587 -Block 0006 [ 34]: 3a69c10e6292e2f4 -Block 0006 [ 35]: 479e23c96fb7743d -Block 0006 [ 36]: 37ec26d28b38943c -Block 0006 [ 37]: 6c35b46dbb181347 -Block 0006 [ 38]: 28ab9b420f8d8b5d -Block 0006 [ 39]: f4c1deb2acc7dcde -Block 0006 [ 40]: ea7c5ea61f6e6ad3 -Block 0006 [ 41]: d7b4bff98caa97ab -Block 0006 [ 42]: fd2559b884c946ae -Block 0006 [ 43]: 62588e85fcce2f30 -Block 0006 [ 44]: 67ace8d1f36ec6cd -Block 0006 [ 45]: 7292a3420dba77c5 -Block 0006 [ 46]: e0d6c21b226e1f6b -Block 0006 [ 47]: ae1f28664a579217 -Block 0006 [ 48]: 4a5ab4b03d7380a6 -Block 0006 [ 49]: 8a2508f7c7f1b0f3 -Block 0006 [ 50]: 3567a420a49dc098 -Block 0006 [ 51]: 61ad122d9db36182 -Block 0006 [ 52]: d97878725887819b -Block 0006 [ 53]: e7e0ad17f72d3565 -Block 0006 [ 54]: 62bfa6c56235fbb9 -Block 0006 [ 55]: 19ba832db474c7da -Block 0006 [ 56]: 382213437f2b5e61 -Block 0006 [ 57]: 40f5b7b35538c7ad -Block 0006 [ 58]: d43ca697239bd77a -Block 0006 [ 59]: fa0faa43eea87e6b -Block 0006 [ 60]: 7e45f6c8dbd6821c -Block 0006 [ 61]: 7ffac662823ab66e -Block 0006 [ 62]: 8c3ffb2704479749 -Block 0006 [ 63]: 4cbfd18a06cfed3c -Block 0006 [ 64]: 3d4f99072714204a -Block 0006 [ 65]: 3ebc6d35e69c5b28 -Block 0006 [ 66]: de07a1e5ca926edb -Block 0006 [ 67]: 5571cf9aa39c3215 -Block 0006 [ 68]: 844ca33bf4947c5e -Block 0006 [ 69]: c6c99f7d74f39266 -Block 0006 [ 70]: a37b366ee3edb520 -Block 0006 [ 71]: 5c4ec2b2655a8a06 -Block 0006 [ 72]: 97a48f22a613f515 -Block 0006 [ 73]: 540a61e06b1c6ae3 -Block 0006 [ 74]: c865bc526dac7065 -Block 0006 [ 75]: a3a088fb6b1efa14 -Block 0006 [ 76]: 9beea238c77ab9f3 -Block 0006 [ 77]: 08b336770fbb1d8e -Block 0006 [ 78]: 409a15767d0707bf -Block 0006 [ 79]: 2825ba8f5eb9e2e5 -Block 0006 [ 80]: 6978f619ee3c20de -Block 0006 [ 81]: 6568588f224ce8ad -Block 0006 [ 82]: e0989069852bd360 -Block 0006 [ 83]: 9a203b316ac1558d -Block 0006 [ 84]: 405f2306f85335bd -Block 0006 [ 85]: f5e3c0dbc69f96d8 -Block 0006 [ 86]: 2a451adb35138baa -Block 0006 [ 87]: fffdc1f7a0148257 -Block 0006 [ 88]: 7d84d77440bee90a -Block 0006 [ 89]: 60e5f23c63fda19c -Block 0006 [ 90]: 5716d0a8c0650062 -Block 0006 [ 91]: 81c75ba2d5bf8206 -Block 0006 [ 92]: f93a47bde77c06e4 -Block 0006 [ 93]: 57dc3d4b8d84ba68 -Block 0006 [ 94]: 21eb9140c58ea159 -Block 0006 [ 95]: 8f3a87bbc66a532c -Block 0006 [ 96]: 93e91414d8d86305 -Block 0006 [ 97]: 334215982e161477 -Block 0006 [ 98]: 28bef7bb826b610b -Block 0006 [ 99]: 6ee7a816de4a890b -Block 0006 [100]: caff0d2a6443ab5b -Block 0006 [101]: f642a6b5153b3428 -Block 0006 [102]: c381f82d97488a06 -Block 0006 [103]: 9bd7117ff6ed1fa3 -Block 0006 [104]: c314e4ee3b0a9a1f -Block 0006 [105]: 76800ae8fba93619 -Block 0006 [106]: bd25cb81c4257d9f -Block 0006 [107]: 1ce3bf40c40723e5 -Block 0006 [108]: f5e417cbe472bb97 -Block 0006 [109]: 8cfd294fa8945406 -Block 0006 [110]: a4c5d94d07afe74d -Block 0006 [111]: bcb602e186f471ff -Block 0006 [112]: c02c0c2e0af63068 -Block 0006 [113]: bc27e62ff57050af -Block 0006 [114]: a6dc335ddf95c5b1 -Block 0006 [115]: b0e366f93847f756 -Block 0006 [116]: 7fe108fe80552259 -Block 0006 [117]: a49d9f9fca18b0f0 -Block 0006 [118]: 27aeee8d45049e51 -Block 0006 [119]: 314b70072932cf39 -Block 0006 [120]: 6ef20c87fc0697c9 -Block 0006 [121]: 19da493d127bbe55 -Block 0006 [122]: c5b5f7cc1c77beaa -Block 0006 [123]: f5e3973f36bdd3f1 -Block 0006 [124]: 52f7210c0f544bb2 -Block 0006 [125]: f7c8945cbbb13f68 -Block 0006 [126]: f30e60931430aa3b -Block 0006 [127]: 323c286c4ce01b9c -Block 0007 [ 0]: 6387ec0a9b706d60 -Block 0007 [ 1]: bb702446236f8be0 -Block 0007 [ 2]: f98b3dae492b7558 -Block 0007 [ 3]: caa8f2f9e58e5421 -Block 0007 [ 4]: 570bc5ea80d9d75e -Block 0007 [ 5]: 2f274d6c336d55bc -Block 0007 [ 6]: 977e5e3d3c58d830 -Block 0007 [ 7]: 85135d0217021ad5 -Block 0007 [ 8]: 740f76b2966956cb -Block 0007 [ 9]: 829305b653c36e53 -Block 0007 [ 10]: fe8820deb0a05b9a -Block 0007 [ 11]: 70487cca2fa7b66a -Block 0007 [ 12]: 9baf5077693e12ab -Block 0007 [ 13]: 86c7875c562e7817 -Block 0007 [ 14]: 6fda95b0820b7626 -Block 0007 [ 15]: 87759ed28fc95dc5 -Block 0007 [ 16]: 1914dd4b93217d74 -Block 0007 [ 17]: 3175851fcde71765 -Block 0007 [ 18]: 429d7afe1a305245 -Block 0007 [ 19]: dc47b73aeef3ed87 -Block 0007 [ 20]: 4ad7fe926a869547 -Block 0007 [ 21]: 08a805cc0ca53ee3 -Block 0007 [ 22]: 92eb59c00f0fc241 -Block 0007 [ 23]: 4a9207af3b1b09c2 -Block 0007 [ 24]: 00b6146a8e156963 -Block 0007 [ 25]: 30ab9619f07ea05b -Block 0007 [ 26]: f7b7b8ac33c5a933 -Block 0007 [ 27]: 8e245c42cf3cd563 -Block 0007 [ 28]: 5f46e9a882003c74 -Block 0007 [ 29]: 194b404af2af00cc -Block 0007 [ 30]: 0b4e9da19d8523b5 -Block 0007 [ 31]: a4b827d6768ad06a -Block 0007 [ 32]: 118a7958aae82170 -Block 0007 [ 33]: 3e8903e2c2ba80f4 -Block 0007 [ 34]: 07d87f37f9e20e96 -Block 0007 [ 35]: 05294a48cf03630b -Block 0007 [ 36]: b7f897cabe953dcb -Block 0007 [ 37]: a046083e04a24015 -Block 0007 [ 38]: eeb8efb5c70409f9 -Block 0007 [ 39]: bfe5de4db2fa7e0d -Block 0007 [ 40]: 24a7e8037b5d2ca0 -Block 0007 [ 41]: a315e9daa0998eb1 -Block 0007 [ 42]: bd52356dc28f6dac -Block 0007 [ 43]: 226fb1009dfc10be -Block 0007 [ 44]: a779004a2ded38af -Block 0007 [ 45]: 85c57f732e286ea9 -Block 0007 [ 46]: 30b6b1dbc7798fcf -Block 0007 [ 47]: c89e51d00e162333 -Block 0007 [ 48]: e4c9d91c7dcfd8e3 -Block 0007 [ 49]: 106ce6c585962d8f -Block 0007 [ 50]: 22cf9c3f79496b09 -Block 0007 [ 51]: d94d968fec6ea652 -Block 0007 [ 52]: fb0c6976e070caf2 -Block 0007 [ 53]: 1787da9837e8262e -Block 0007 [ 54]: 4e45822661217409 -Block 0007 [ 55]: 51f4c5bdba281a43 -Block 0007 [ 56]: 71f6f5746a9cdbc5 -Block 0007 [ 57]: dd45b228f797a3ed -Block 0007 [ 58]: 5829018cdd1ab9c6 -Block 0007 [ 59]: af606f89f13d4187 -Block 0007 [ 60]: faab7f9a3350f5ac -Block 0007 [ 61]: 09ec94cc822811a6 -Block 0007 [ 62]: 9bb2f1fb5c15a70e -Block 0007 [ 63]: fb37b1f9f3858291 -Block 0007 [ 64]: 12e2b535b7b01f3d -Block 0007 [ 65]: 319c071179726a9d -Block 0007 [ 66]: c4c40af8058a8900 -Block 0007 [ 67]: f52597b11ca98e1f -Block 0007 [ 68]: 0264495f476a7dde -Block 0007 [ 69]: 21d452f219468635 -Block 0007 [ 70]: 64cbc8315af032bb -Block 0007 [ 71]: 04629095edb84f96 -Block 0007 [ 72]: 42b7b37a32e08328 -Block 0007 [ 73]: a7c62acb4f22e113 -Block 0007 [ 74]: c93f84a445c8b8c4 -Block 0007 [ 75]: 210bf0fd5973d7a5 -Block 0007 [ 76]: c6598b4fb35eb70c -Block 0007 [ 77]: dc3ab8ae47c5ec9e -Block 0007 [ 78]: 932b8a0159b60161 -Block 0007 [ 79]: 1e886e331d1d815b -Block 0007 [ 80]: d57e42a90b5b5ea2 -Block 0007 [ 81]: c19836b4eebcf0e0 -Block 0007 [ 82]: 7bcf27db4f73cecf -Block 0007 [ 83]: 4f337cae713d7a49 -Block 0007 [ 84]: c74db29321d52f0a -Block 0007 [ 85]: 81757ef96322e580 -Block 0007 [ 86]: 1e4f7d1b8905b7a1 -Block 0007 [ 87]: 6fe9f441a85dac8d -Block 0007 [ 88]: bb2b2c459eaba1f5 -Block 0007 [ 89]: f7a9148b29d6bfeb -Block 0007 [ 90]: 0cc049b9c6e1237c -Block 0007 [ 91]: d297ff0079dbb8e3 -Block 0007 [ 92]: df4b35c29891f33b -Block 0007 [ 93]: 95c07dfb25bdb5d3 -Block 0007 [ 94]: a1b58642419c579d -Block 0007 [ 95]: e4f0ae1ce73b7a94 -Block 0007 [ 96]: 747795cbb741f532 -Block 0007 [ 97]: 58122055bd9967a8 -Block 0007 [ 98]: e6d2fe83ad0bb0c7 -Block 0007 [ 99]: 7c6733d7e587fece -Block 0007 [100]: 6b583826c192891a -Block 0007 [101]: 8ae9b5e57e175517 -Block 0007 [102]: 2f6e710fb49abdd8 -Block 0007 [103]: d5be1ac3dda22c8d -Block 0007 [104]: 5afff784fa1bf48b -Block 0007 [105]: 1fc1d96bc25caea1 -Block 0007 [106]: fb74ff65f0f24544 -Block 0007 [107]: e48fd5ba945b02a2 -Block 0007 [108]: b7de6a07cfbfdb0a -Block 0007 [109]: 151e19b16051ab9f -Block 0007 [110]: 9254ef841a98c808 -Block 0007 [111]: 4b373f36b0e31770 -Block 0007 [112]: a0d241c34ff8cfa6 -Block 0007 [113]: 76c7e4c042ec3aec -Block 0007 [114]: 4832326e33ed6314 -Block 0007 [115]: 2339915d2024ef5f -Block 0007 [116]: e0d8261905b27f66 -Block 0007 [117]: 2261a1333158bfdb -Block 0007 [118]: 78f4b91b214610b6 -Block 0007 [119]: 13d6a0120299a8d0 -Block 0007 [120]: 7c15f3b8582db3ab -Block 0007 [121]: 00b9f16978014f32 -Block 0007 [122]: c37476f83eab622f -Block 0007 [123]: 3b504a0cce417082 -Block 0007 [124]: 504d28bac5681fcf -Block 0007 [125]: 53fe3f3c188cfdfc -Block 0007 [126]: d2edb0da87468512 -Block 0007 [127]: 8dd7c8f05895eea8 -Block 0008 [ 0]: 5d390b079d0f3c47 -Block 0008 [ 1]: 631734483921758e -Block 0008 [ 2]: ed4bf986e07b5e28 -Block 0008 [ 3]: 9ffa103e77ebc487 -Block 0008 [ 4]: 5c194d18d89640e6 -Block 0008 [ 5]: 8603e18fc4fe0f6a -Block 0008 [ 6]: 00b9f5cee0eaadfc -Block 0008 [ 7]: 8b1ea916bb95a9f2 -Block 0008 [ 8]: 99099a16e443ef5f -Block 0008 [ 9]: b8e6ba465a8b10e9 -Block 0008 [ 10]: 756a2fbbf4f5a154 -Block 0008 [ 11]: 7bc7f48014c56e73 -Block 0008 [ 12]: 1e11511a7bf4bd41 -Block 0008 [ 13]: e949210b66327b58 -Block 0008 [ 14]: 051f0050d5aac874 -Block 0008 [ 15]: 1a2566c306ead6b9 -Block 0008 [ 16]: 930d022e7888d216 -Block 0008 [ 17]: 0582ec2e435a555f -Block 0008 [ 18]: fe0dd7d9465e1e29 -Block 0008 [ 19]: de2ee4564bce48a5 -Block 0008 [ 20]: 0d5072a51ecc0fa0 -Block 0008 [ 21]: 44427a90322926cf -Block 0008 [ 22]: 1d315d890f65e83d -Block 0008 [ 23]: e1f9ca311dc237b8 -Block 0008 [ 24]: 0baf3526a72a11bc -Block 0008 [ 25]: 9a0d03779403602c -Block 0008 [ 26]: b14361834efb1c72 -Block 0008 [ 27]: c93f96de539b5c4f -Block 0008 [ 28]: 0763882c2814ac4c -Block 0008 [ 29]: 1713c202a7fefb89 -Block 0008 [ 30]: a3d9d35d0f938ac9 -Block 0008 [ 31]: fa39df6510e6f52a -Block 0008 [ 32]: d0ad5e8ded8cb6af -Block 0008 [ 33]: 63fc4badd29ec94b -Block 0008 [ 34]: a4421774c98764ef -Block 0008 [ 35]: 3414be973e81f2ef -Block 0008 [ 36]: 74df078314799d9d -Block 0008 [ 37]: be229396be40f7b6 -Block 0008 [ 38]: e0d009aa0635bb4c -Block 0008 [ 39]: fab2695ac684c57a -Block 0008 [ 40]: 6c0a94812877f048 -Block 0008 [ 41]: 7dc440749ae442ab -Block 0008 [ 42]: d78523d4176e3f2f -Block 0008 [ 43]: b8019dac190a312e -Block 0008 [ 44]: 98750809c9fd9a29 -Block 0008 [ 45]: 97d93132f60ba799 -Block 0008 [ 46]: 4b78d6769101dec3 -Block 0008 [ 47]: 8dfc4271071b6374 -Block 0008 [ 48]: 0d93e5b71ba5accf -Block 0008 [ 49]: 55b8352ba3de28a7 -Block 0008 [ 50]: 1ff98ead8ed53bff -Block 0008 [ 51]: 4345c4c79dc0dc9b -Block 0008 [ 52]: 07a4077a5731b408 -Block 0008 [ 53]: ce6b2dda9f81e9d8 -Block 0008 [ 54]: a54293585c425cd6 -Block 0008 [ 55]: 75430004a8b7b2ff -Block 0008 [ 56]: cdff0f60d61ed3a9 -Block 0008 [ 57]: 40473d034cdc74cc -Block 0008 [ 58]: 9dace14d7adffd8b -Block 0008 [ 59]: cf19dab22e542598 -Block 0008 [ 60]: 3949259d09c091d8 -Block 0008 [ 61]: 7c81a97d86a30f01 -Block 0008 [ 62]: 4f676a32da1a29d0 -Block 0008 [ 63]: 66e8d05639fb0c14 -Block 0008 [ 64]: 4c1af73d9a85dd31 -Block 0008 [ 65]: 79e9b95889a88a16 -Block 0008 [ 66]: f9908b3531cc76ea -Block 0008 [ 67]: f6cfad223752eec7 -Block 0008 [ 68]: 41479ece4c58b371 -Block 0008 [ 69]: 82a169276b336f19 -Block 0008 [ 70]: d44954dbd75a21b8 -Block 0008 [ 71]: 1f95e2b453d4f78b -Block 0008 [ 72]: bced4e6da5ba36eb -Block 0008 [ 73]: 068eafdb44cbfbc2 -Block 0008 [ 74]: 0999d545028f9efe -Block 0008 [ 75]: eded6e0de0c417a7 -Block 0008 [ 76]: 29458d270d29c726 -Block 0008 [ 77]: ca47e3726b5c83b7 -Block 0008 [ 78]: 55d4767698536bfd -Block 0008 [ 79]: d6625a482a8db1b3 -Block 0008 [ 80]: 1cc4d3f6df69fe20 -Block 0008 [ 81]: e8b4b60c15d40dca -Block 0008 [ 82]: 32f048c6f0d48123 -Block 0008 [ 83]: 2f35db8679917a7e -Block 0008 [ 84]: 759b5ada93849d12 -Block 0008 [ 85]: 1ae3c2be42c6eea9 -Block 0008 [ 86]: 93e74ea55d8b0d66 -Block 0008 [ 87]: 68fcbcde1e1a6565 -Block 0008 [ 88]: 1889a5726a26da42 -Block 0008 [ 89]: 411b88d9b6db4828 -Block 0008 [ 90]: de23768fd2455c23 -Block 0008 [ 91]: 4f6067933ce44e02 -Block 0008 [ 92]: 8efa982c0485196c -Block 0008 [ 93]: 526025198657de26 -Block 0008 [ 94]: 419b492b3661f65d -Block 0008 [ 95]: fe15b81200f6eb75 -Block 0008 [ 96]: c6a9ecad13aadff8 -Block 0008 [ 97]: 0a76c404e5278377 -Block 0008 [ 98]: c8172a7c6942cc25 -Block 0008 [ 99]: 311b55b1905a0a60 -Block 0008 [100]: 724ab2c3127bfe21 -Block 0008 [101]: 75e4ec223a74f3f5 -Block 0008 [102]: 5764eaa3be4daec2 -Block 0008 [103]: d1ded8250f85689c -Block 0008 [104]: a2f7c754668a6481 -Block 0008 [105]: ead4eeb6d1d49959 -Block 0008 [106]: 47bb132a81f3c0da -Block 0008 [107]: f3051e81a5dd1079 -Block 0008 [108]: 9d12025fdde61890 -Block 0008 [109]: 63c8049a357ca2c0 -Block 0008 [110]: 83ebad4c3c2faba3 -Block 0008 [111]: 1007d48feef5049d -Block 0008 [112]: 88d09ba2a9e8e2a5 -Block 0008 [113]: 2afbe3f5d1b30d82 -Block 0008 [114]: 00004c21a628e91c -Block 0008 [115]: 0e46db5c9f6e12c9 -Block 0008 [116]: 9cf96fab1e4dd3f8 -Block 0008 [117]: a7703f68865b6af4 -Block 0008 [118]: ad53f4297b4dd1db -Block 0008 [119]: a012faa78331fc14 -Block 0008 [120]: d5aaf6aeabe110f8 -Block 0008 [121]: d6de328de4c92196 -Block 0008 [122]: 75827f679ab6b8a7 -Block 0008 [123]: fbf6da92a4f6ced0 -Block 0008 [124]: f9df80a3daf27bb8 -Block 0008 [125]: 0b35df003d687d2f -Block 0008 [126]: 69ebef0dc424ec77 -Block 0008 [127]: 150d2aaa755eee68 -Block 0009 [ 0]: ce8d377f08f7fe79 -Block 0009 [ 1]: 8c20bf58c17115cf -Block 0009 [ 2]: 9d58f26c303997fd -Block 0009 [ 3]: 908a17f607eafb21 -Block 0009 [ 4]: ca4c3bf6e41ffade -Block 0009 [ 5]: 9b23d7636fb3f276 -Block 0009 [ 6]: 31d57db44e9d7078 -Block 0009 [ 7]: 71494598e4916674 -Block 0009 [ 8]: 7f43fee7abb5a94f -Block 0009 [ 9]: cc0b2152cc614b56 -Block 0009 [ 10]: a4c240deb0eb1a93 -Block 0009 [ 11]: 8dc29aa7479a224a -Block 0009 [ 12]: 23d557074d98a0b7 -Block 0009 [ 13]: cbe656a292df3d02 -Block 0009 [ 14]: cb8dc6eefa34d7c8 -Block 0009 [ 15]: 8d5a12c06108e989 -Block 0009 [ 16]: bcf42fe767f10284 -Block 0009 [ 17]: 73e4f1efa605ee48 -Block 0009 [ 18]: 3b05f1b3e39ce7c4 -Block 0009 [ 19]: 44a0da643669026d -Block 0009 [ 20]: 730a137534d337bf -Block 0009 [ 21]: 007c05c1857fab4e -Block 0009 [ 22]: f99aac7ee7a70067 -Block 0009 [ 23]: e2c11ca64fb8518c -Block 0009 [ 24]: 2d0244c8a78b3f7f -Block 0009 [ 25]: 02d54c9795ed259d -Block 0009 [ 26]: 1ccb41de825eb282 -Block 0009 [ 27]: 094e02b949396d6a -Block 0009 [ 28]: fe86cfd514adaf77 -Block 0009 [ 29]: b92fa1cd5c496f06 -Block 0009 [ 30]: 278fcfe3a4b794fa -Block 0009 [ 31]: 8eb888dd3e6e1d0d -Block 0009 [ 32]: 39971bfaa759afc1 -Block 0009 [ 33]: 5efc9323d1eaa784 -Block 0009 [ 34]: 32fa6022074c0fcf -Block 0009 [ 35]: 484b81c4f4653609 -Block 0009 [ 36]: 7b8beed4c906adf7 -Block 0009 [ 37]: 2dbe5bb15be5770f -Block 0009 [ 38]: 71409b1f63ac2093 -Block 0009 [ 39]: de542f2668c63b10 -Block 0009 [ 40]: 44b0c9767d4418c8 -Block 0009 [ 41]: b90ef7ff84c5e1a4 -Block 0009 [ 42]: b9fd084eda79682b -Block 0009 [ 43]: d91a574bda76901f -Block 0009 [ 44]: 8bc9f293e1d45b6c -Block 0009 [ 45]: a55399657500adf4 -Block 0009 [ 46]: 4b12096ac90ccc73 -Block 0009 [ 47]: 715af0c0bb5895e3 -Block 0009 [ 48]: ef82a77202164329 -Block 0009 [ 49]: 3a8911d0d52aa2ee -Block 0009 [ 50]: dfe9a2c49fd37efc -Block 0009 [ 51]: 44b03a85493a87d1 -Block 0009 [ 52]: 67ef6a9d0b782657 -Block 0009 [ 53]: 7830301ca2b6de19 -Block 0009 [ 54]: b77da999c566c7f0 -Block 0009 [ 55]: 4f075e97d94a8e0a -Block 0009 [ 56]: 7f4072a94c94f761 -Block 0009 [ 57]: 16cdea91df85080d -Block 0009 [ 58]: 3874d09a0ea0f90c -Block 0009 [ 59]: cd40596f76232601 -Block 0009 [ 60]: 56c4d1d584fe9206 -Block 0009 [ 61]: 8353f143a48f7493 -Block 0009 [ 62]: 3b43a5839db205dd -Block 0009 [ 63]: 7911e3e5c874bea7 -Block 0009 [ 64]: a202515a2b192ac0 -Block 0009 [ 65]: 0389f1e56dc55e6a -Block 0009 [ 66]: 4e951464e5ad25c5 -Block 0009 [ 67]: 257ac4933f14f134 -Block 0009 [ 68]: 3287ef9942926b40 -Block 0009 [ 69]: 40cec3bd22c86041 -Block 0009 [ 70]: dbd6ec1749aa5e99 -Block 0009 [ 71]: 5788f14286b46a60 -Block 0009 [ 72]: 72760917498f959e -Block 0009 [ 73]: 9f36d2b48e2822b6 -Block 0009 [ 74]: 5081f0e45fb5fd67 -Block 0009 [ 75]: cc5fb925077bd013 -Block 0009 [ 76]: 6518a37a669fde5e -Block 0009 [ 77]: df366ef1564c60e4 -Block 0009 [ 78]: 55be980f77a07ec0 -Block 0009 [ 79]: f9873ade723e65b7 -Block 0009 [ 80]: f35f4a2816fc122c -Block 0009 [ 81]: cd1eb28cfa398921 -Block 0009 [ 82]: 09da96aa8bdac0d5 -Block 0009 [ 83]: eb6dc7aab11559dc -Block 0009 [ 84]: 25447fc0c67575d4 -Block 0009 [ 85]: 91a4d8daa8c810f5 -Block 0009 [ 86]: 9e31930d5aef7367 -Block 0009 [ 87]: 4f5a712ea723acc8 -Block 0009 [ 88]: edd07d6da9c84795 -Block 0009 [ 89]: 02d2177706dd53f7 -Block 0009 [ 90]: bf6c192b4cf63a91 -Block 0009 [ 91]: c78c4419b3ee8253 -Block 0009 [ 92]: a100748306111376 -Block 0009 [ 93]: 73ce0d73b1e79718 -Block 0009 [ 94]: 1014b78632ec0d41 -Block 0009 [ 95]: 734231d1617553de -Block 0009 [ 96]: 5988558d1a8d8e3a -Block 0009 [ 97]: 5629c3ede2e9d511 -Block 0009 [ 98]: 79e13d0d94340525 -Block 0009 [ 99]: f4c5c7336d169b86 -Block 0009 [100]: 5764cef5ad7fa93f -Block 0009 [101]: fb6234c6a6386257 -Block 0009 [102]: f4b994758a0f35e7 -Block 0009 [103]: 1a0cd87926b1fde2 -Block 0009 [104]: c72591e546983e39 -Block 0009 [105]: 0f7b07aaa5e224c3 -Block 0009 [106]: ab73b302681f5e62 -Block 0009 [107]: ce0ba76a4505aa4e -Block 0009 [108]: ff7210fcd2fde9a6 -Block 0009 [109]: 4629ed41f29c3515 -Block 0009 [110]: 13ec4b4caa1040d2 -Block 0009 [111]: d1ceeddad6ad578b -Block 0009 [112]: bac3f41626f8d3dc -Block 0009 [113]: ad4ff3709d35af50 -Block 0009 [114]: 5e9cf2efe0414e28 -Block 0009 [115]: 27ce4c9d35606793 -Block 0009 [116]: f46f2476963e3e88 -Block 0009 [117]: 5861232534f983cc -Block 0009 [118]: 0f9800c4a3832b80 -Block 0009 [119]: f1fcb7824c057729 -Block 0009 [120]: 945e20f06a155498 -Block 0009 [121]: ffa7dfbd69cd6bb1 -Block 0009 [122]: 9a1be0799dbe2856 -Block 0009 [123]: 681ba56766e190f6 -Block 0009 [124]: 5e326010ccbda0bd -Block 0009 [125]: 94f0f292bfb4113c -Block 0009 [126]: fa3b9bae5b239f61 -Block 0009 [127]: 37d071a4e980c4a0 -Block 0010 [ 0]: 6ae4225fd3354e7d -Block 0010 [ 1]: ae61c609843bcde0 -Block 0010 [ 2]: ed5854bb11b0d8f9 -Block 0010 [ 3]: 0120456d2ab6b157 -Block 0010 [ 4]: ab7db2b1fc378e9a -Block 0010 [ 5]: c97048fe8a2f5f4a -Block 0010 [ 6]: cba30aaab4ef2f74 -Block 0010 [ 7]: 56efcefbc8806464 -Block 0010 [ 8]: 47488cad6c56f9d0 -Block 0010 [ 9]: 5d99c80238f6ab3d -Block 0010 [ 10]: 2aaac7c0e0b8d7b2 -Block 0010 [ 11]: 54677ec26bdc9712 -Block 0010 [ 12]: 1aab36f7d8d09dbc -Block 0010 [ 13]: f437d5d7483ec013 -Block 0010 [ 14]: 707edb42a8a784d0 -Block 0010 [ 15]: e594c41a0b98992f -Block 0010 [ 16]: dbb919a6e327f5ac -Block 0010 [ 17]: 83bb58fbec7087d4 -Block 0010 [ 18]: 6cf134c837408aa5 -Block 0010 [ 19]: d871df3877e67200 -Block 0010 [ 20]: aa09bbdc731bec8c -Block 0010 [ 21]: 397bd2b0904d0eb4 -Block 0010 [ 22]: 12e5d0c755e90680 -Block 0010 [ 23]: 646867347d61108d -Block 0010 [ 24]: ae575603915fed70 -Block 0010 [ 25]: 963882db4d43ed3e -Block 0010 [ 26]: 331347bff0ca99fb -Block 0010 [ 27]: 85ec009fe77bbdf2 -Block 0010 [ 28]: 084715d977901d19 -Block 0010 [ 29]: 5d70ffa2c7e8fcd0 -Block 0010 [ 30]: aae90dd8c199a885 -Block 0010 [ 31]: 094f2087a840c4c3 -Block 0010 [ 32]: 78970a09ff9119ee -Block 0010 [ 33]: 19164104a0809a35 -Block 0010 [ 34]: 67cf795053fc548f -Block 0010 [ 35]: 15d39628c9533f25 -Block 0010 [ 36]: a8521d7d68c133f9 -Block 0010 [ 37]: da48eb5cbd765e6e -Block 0010 [ 38]: 1c4dbae1e77c7698 -Block 0010 [ 39]: 693ffe0f2fe3fe1d -Block 0010 [ 40]: 2d1edc2b4a72a1df -Block 0010 [ 41]: 8e561749154aad0e -Block 0010 [ 42]: 0fd72e31af0b850c -Block 0010 [ 43]: 165f1c19fbebadfe -Block 0010 [ 44]: b26ee88a45cb6beb -Block 0010 [ 45]: c0e826858ed46223 -Block 0010 [ 46]: f992b123f14f1cab -Block 0010 [ 47]: 8a347ffa03d4829d -Block 0010 [ 48]: 1c7682e743b0584d -Block 0010 [ 49]: 2d0ae08ec8c7aa45 -Block 0010 [ 50]: 01e6d7667bd54686 -Block 0010 [ 51]: 8f95e476ebd46d17 -Block 0010 [ 52]: 94ef46dbbba5d43f -Block 0010 [ 53]: 8d29e31a9f4cc10b -Block 0010 [ 54]: 1be3ba26e8284d00 -Block 0010 [ 55]: ad2cef78f2a69fbf -Block 0010 [ 56]: a10dfde3deac51a0 -Block 0010 [ 57]: 36376969357596b8 -Block 0010 [ 58]: c2d33dca853ea6a1 -Block 0010 [ 59]: 628d33bcabbefbef -Block 0010 [ 60]: f40ff3b9ccc10e17 -Block 0010 [ 61]: 1e5528923919f862 -Block 0010 [ 62]: 414e61378799210e -Block 0010 [ 63]: 62a81dce51d609a7 -Block 0010 [ 64]: 096e77f5d7249666 -Block 0010 [ 65]: 47820b3a33cd71d3 -Block 0010 [ 66]: 0bd5d6025f579a6c -Block 0010 [ 67]: a9fa38990d42aca5 -Block 0010 [ 68]: 27bd9b1bd1097a06 -Block 0010 [ 69]: 03dafb3b4f0a4028 -Block 0010 [ 70]: 5fb19963de1e3de9 -Block 0010 [ 71]: 4939211959107034 -Block 0010 [ 72]: 666da05a2d74db1c -Block 0010 [ 73]: f19cf56f0a6c1655 -Block 0010 [ 74]: 92c4b322f190d295 -Block 0010 [ 75]: 9ad74d6c542b329d -Block 0010 [ 76]: 989f4d9fa7c577ba -Block 0010 [ 77]: 225b7af5faafe2a4 -Block 0010 [ 78]: 5aa9ea1a78ec99e8 -Block 0010 [ 79]: 228e7be67b366548 -Block 0010 [ 80]: 150b81a49ddc73c6 -Block 0010 [ 81]: 2686be4153716d63 -Block 0010 [ 82]: ffebb344c1e28f03 -Block 0010 [ 83]: b08324cad8a5226d -Block 0010 [ 84]: 8d6d3d47c0d054ca -Block 0010 [ 85]: 3e184784291a476d -Block 0010 [ 86]: 32f84fc587b2c6b0 -Block 0010 [ 87]: a2b2b8f1589defd7 -Block 0010 [ 88]: 54977641b62ca3f6 -Block 0010 [ 89]: a28f16c81a04dc04 -Block 0010 [ 90]: 305249ff2c268843 -Block 0010 [ 91]: b1e0bd99bdb4c0bd -Block 0010 [ 92]: 7cf0826d7d7e0da9 -Block 0010 [ 93]: 52754123e360fc24 -Block 0010 [ 94]: 0526df5315c972ce -Block 0010 [ 95]: 99b71c3b595c570d -Block 0010 [ 96]: 3813b5c8bf718f26 -Block 0010 [ 97]: cc36301d8c899aca -Block 0010 [ 98]: a4de37d02e4590bf -Block 0010 [ 99]: 6f82a145af50d633 -Block 0010 [100]: de36d308ff4ef542 -Block 0010 [101]: 9a33a513b52c8d89 -Block 0010 [102]: ab2d45c941001698 -Block 0010 [103]: de21774c3a9e5d89 -Block 0010 [104]: 382200ec936fd74d -Block 0010 [105]: dd8d3ae52c7715fd -Block 0010 [106]: 842c4259c643aa09 -Block 0010 [107]: 0b829f3180e13902 -Block 0010 [108]: cec67d91ad380b93 -Block 0010 [109]: 4dc4beebbb42a6f5 -Block 0010 [110]: 5be736664c2d8d83 -Block 0010 [111]: e2f1024ba77d28fb -Block 0010 [112]: 81b0bb61533210ec -Block 0010 [113]: f83a00c51e3d5f38 -Block 0010 [114]: 7db95cbd56f98dcd -Block 0010 [115]: ee9f7501afa33446 -Block 0010 [116]: df7a7cf05087effe -Block 0010 [117]: 008776f8c2bb79ef -Block 0010 [118]: 64f2536d4fddec8a -Block 0010 [119]: 42233a0aaa87bd28 -Block 0010 [120]: aa47058137b994c5 -Block 0010 [121]: 79deaf8cb75ceefa -Block 0010 [122]: 88f20958cc05a49c -Block 0010 [123]: 2e3801065fdccaee -Block 0010 [124]: 53f1c983bea4c1ad -Block 0010 [125]: 6f75ee8921399ac7 -Block 0010 [126]: e1ef4f82c909106b -Block 0010 [127]: 2ad0bc617385b62e -Block 0011 [ 0]: 84a8bbec5e9ee507 -Block 0011 [ 1]: e8a03a4136c62548 -Block 0011 [ 2]: d6d377ef5a53f910 -Block 0011 [ 3]: 661ba9468903274e -Block 0011 [ 4]: 159beb64d3f0bc11 -Block 0011 [ 5]: 43118ec42adbd446 -Block 0011 [ 6]: c0f8908e19fdc2eb -Block 0011 [ 7]: 9f6c9cbf9f38a396 -Block 0011 [ 8]: ff27ec0e5b15b35b -Block 0011 [ 9]: a3c32c3786f7abed -Block 0011 [ 10]: de7a4b557b81bcd4 -Block 0011 [ 11]: 47f34f0379397d03 -Block 0011 [ 12]: a28b5dcc934a73ae -Block 0011 [ 13]: e5f091472cb1bfa1 -Block 0011 [ 14]: 21cface025922c20 -Block 0011 [ 15]: 34243b1d719f51b1 -Block 0011 [ 16]: 4646e791e97f3067 -Block 0011 [ 17]: 2c4737e43fc46a7c -Block 0011 [ 18]: 37576580cb2492c5 -Block 0011 [ 19]: 79f8b1d97f0e8175 -Block 0011 [ 20]: 54a860d192f9aa2c -Block 0011 [ 21]: 407cda5ad8c11036 -Block 0011 [ 22]: ea47f0af4b9e5a9a -Block 0011 [ 23]: 755da21d178d3913 -Block 0011 [ 24]: 3d220cc9bdc29123 -Block 0011 [ 25]: 890994f162b2fcb5 -Block 0011 [ 26]: 0ecd9a8a8ba69663 -Block 0011 [ 27]: 792867585bc69059 -Block 0011 [ 28]: 099c4e35d90e319b -Block 0011 [ 29]: f68ee3ac82745acb -Block 0011 [ 30]: 715ceab2ace61477 -Block 0011 [ 31]: add36ee92d210fd9 -Block 0011 [ 32]: 8941e202a8ac2505 -Block 0011 [ 33]: 337cbdd068139e15 -Block 0011 [ 34]: 493cc70a9def9bae -Block 0011 [ 35]: 726fa6f389708a0c -Block 0011 [ 36]: 791b092018711bae -Block 0011 [ 37]: ff5f50b1219a362e -Block 0011 [ 38]: 637297cc8f5aca78 -Block 0011 [ 39]: 384420634789c4da -Block 0011 [ 40]: da3e44be4ac76889 -Block 0011 [ 41]: 48394be7eeba3e3e -Block 0011 [ 42]: e176657fb6b322b8 -Block 0011 [ 43]: c513ffedae4caad1 -Block 0011 [ 44]: 4ddbc4eac9242fc7 -Block 0011 [ 45]: 362645696d67c92d -Block 0011 [ 46]: 95570dee7ffafff2 -Block 0011 [ 47]: 8f3b2a3d572a1ed0 -Block 0011 [ 48]: a79e0894ca3d905a -Block 0011 [ 49]: dce9aa88d8a9d75b -Block 0011 [ 50]: 2a82a5435a689d82 -Block 0011 [ 51]: 32d286f29f37cacf -Block 0011 [ 52]: b19ce4dca4005b60 -Block 0011 [ 53]: 40847a0db8fe5e34 -Block 0011 [ 54]: 6138dcc695f94762 -Block 0011 [ 55]: 491328f6caa72814 -Block 0011 [ 56]: d0b86718c90f93a6 -Block 0011 [ 57]: 48640b60a60db10b -Block 0011 [ 58]: ba701372be54710c -Block 0011 [ 59]: e89bf12522b18b59 -Block 0011 [ 60]: a0a5d8654266c996 -Block 0011 [ 61]: afe130022ad9628f -Block 0011 [ 62]: dd319661eb7f7aad -Block 0011 [ 63]: 98bf04f183e0b0bd -Block 0011 [ 64]: 521f230536266d1b -Block 0011 [ 65]: 4c964a1ca31865cf -Block 0011 [ 66]: 7983f4550bc3d6d2 -Block 0011 [ 67]: 0e164c3fbce581f2 -Block 0011 [ 68]: 637686674de50ddf -Block 0011 [ 69]: a19d2b703b28c51d -Block 0011 [ 70]: c504278031ca23f3 -Block 0011 [ 71]: 9026013bac4a5535 -Block 0011 [ 72]: 652a23d15b9afe84 -Block 0011 [ 73]: 2d45fc40abd2c9e6 -Block 0011 [ 74]: 0d920ca47339da99 -Block 0011 [ 75]: 19f051f1f60130b4 -Block 0011 [ 76]: e608f533dcd7a6e1 -Block 0011 [ 77]: 4d59c7dacc856135 -Block 0011 [ 78]: cdcc9c8f0b17ebfc -Block 0011 [ 79]: bb13ab77aeb72e83 -Block 0011 [ 80]: c5900c3d399e428d -Block 0011 [ 81]: ab7bd462910e6519 -Block 0011 [ 82]: f7dbc144cc0076c3 -Block 0011 [ 83]: 5d80b17f4bc6ccda -Block 0011 [ 84]: 55c0c5e537ee7d11 -Block 0011 [ 85]: f305d86abf28d135 -Block 0011 [ 86]: 668f8c1e60a8fffa -Block 0011 [ 87]: 8e6e92f12139d3e0 -Block 0011 [ 88]: 90b32c3b5e579f75 -Block 0011 [ 89]: 4804297542b36066 -Block 0011 [ 90]: 0d1933319e2a7ff9 -Block 0011 [ 91]: 290f8644fbf35131 -Block 0011 [ 92]: b358a81c7060c4fc -Block 0011 [ 93]: 45b588b79be669a3 -Block 0011 [ 94]: 31baa98245901537 -Block 0011 [ 95]: acd49bf29b0b0634 -Block 0011 [ 96]: 6d3f843799ff6816 -Block 0011 [ 97]: 26326dfc3bbbab3a -Block 0011 [ 98]: 9242f6493a116b59 -Block 0011 [ 99]: 67502898e5348f84 -Block 0011 [100]: 23571627a7c9d9e0 -Block 0011 [101]: 4d886d318333c3ee -Block 0011 [102]: 20ddc8838c57eccd -Block 0011 [103]: e601082750c1a449 -Block 0011 [104]: 7aa1f0317c03160a -Block 0011 [105]: 51b365b732b327db -Block 0011 [106]: e0763a1f51c3bb8f -Block 0011 [107]: ab1584266689907b -Block 0011 [108]: 389e5c3adfd8185e -Block 0011 [109]: c6442e5b62ed24d6 -Block 0011 [110]: 50af38d5cf0f09b5 -Block 0011 [111]: 1008d4f64bfc0129 -Block 0011 [112]: a364e313e91732fe -Block 0011 [113]: b226645180d50df3 -Block 0011 [114]: f163bc669cf4b70e -Block 0011 [115]: 187ce08474232ec3 -Block 0011 [116]: 59dd06d3949824d2 -Block 0011 [117]: 8bf0b3a673af1ab3 -Block 0011 [118]: c8b5d0c652513b9b -Block 0011 [119]: 76c43e6630c174ca -Block 0011 [120]: 8dc908bb6c08c8b4 -Block 0011 [121]: 0c76121879f3f9e2 -Block 0011 [122]: a9a9c39976c5da9a -Block 0011 [123]: 509e26ce42034853 -Block 0011 [124]: 9276f4686d96bab6 -Block 0011 [125]: 61bd632fddc5381c -Block 0011 [126]: af2cc8c6499fce15 -Block 0011 [127]: 55322a996015ca7e -Block 0012 [ 0]: 2de6a260b3dc7033 -Block 0012 [ 1]: b199b1c2a33061bc -Block 0012 [ 2]: 6934301e1592cc31 -Block 0012 [ 3]: 08329482bbd037a3 -Block 0012 [ 4]: 3b74c1c774a7c3ea -Block 0012 [ 5]: 29039e3efa32b00e -Block 0012 [ 6]: b71c527205dc00df -Block 0012 [ 7]: c0f4b25c94f538b0 -Block 0012 [ 8]: eca61e402daa6569 -Block 0012 [ 9]: ba4db20991e9824c -Block 0012 [ 10]: 3e869f7935d4a0d8 -Block 0012 [ 11]: 0b6273fb4e41db98 -Block 0012 [ 12]: a0f161fd742126cd -Block 0012 [ 13]: 163b553fa996c120 -Block 0012 [ 14]: 03519d81912f1029 -Block 0012 [ 15]: c8dace89c4d03838 -Block 0012 [ 16]: ea6b9219f18405a9 -Block 0012 [ 17]: 373bb78358988878 -Block 0012 [ 18]: bcd325dcfd7ceea5 -Block 0012 [ 19]: d2f1d6173a7ff965 -Block 0012 [ 20]: 947458a9bd5311e7 -Block 0012 [ 21]: 4a59302fc6fd2b1f -Block 0012 [ 22]: 78b06821a947c9b6 -Block 0012 [ 23]: 6f6089d041ec1ab6 -Block 0012 [ 24]: 52054e7c6e7d1dd3 -Block 0012 [ 25]: e08e2601656dac82 -Block 0012 [ 26]: bb4c9839ecfc7208 -Block 0012 [ 27]: 641f5afddf424d36 -Block 0012 [ 28]: 3b4433461c77cb42 -Block 0012 [ 29]: 4958d19b9f87a1d6 -Block 0012 [ 30]: dce1d42c81cf32bb -Block 0012 [ 31]: 919d8b4967b1c11d -Block 0012 [ 32]: 5483f958324ea9cc -Block 0012 [ 33]: e58572e35d604799 -Block 0012 [ 34]: 0f11afd06441b2ac -Block 0012 [ 35]: 9d32367932b3beef -Block 0012 [ 36]: be8229b34b4cce48 -Block 0012 [ 37]: 627d429986fd97a7 -Block 0012 [ 38]: f4d35eec751273f2 -Block 0012 [ 39]: 5cd90b57ccccc552 -Block 0012 [ 40]: 136897ab6168509e -Block 0012 [ 41]: 52e93c6b812b7c55 -Block 0012 [ 42]: 21b61e3e8248e02f -Block 0012 [ 43]: 80665bbe9536995b -Block 0012 [ 44]: 4ad516ad1744af03 -Block 0012 [ 45]: 58904e9d8d3bc697 -Block 0012 [ 46]: 20447941272fcfaf -Block 0012 [ 47]: 653141cbebb72f86 -Block 0012 [ 48]: de9a2934bef33099 -Block 0012 [ 49]: f05298f7aecaff8f -Block 0012 [ 50]: 6ad7aa44563c7750 -Block 0012 [ 51]: a354661a945226e9 -Block 0012 [ 52]: aade90283df08ab4 -Block 0012 [ 53]: 6ad86b10a2edb467 -Block 0012 [ 54]: 9cb6246359729643 -Block 0012 [ 55]: 5e775696928d0575 -Block 0012 [ 56]: 223c0aeeeaf88eb9 -Block 0012 [ 57]: b535c81ea45b395f -Block 0012 [ 58]: 7b3b6a488b140e18 -Block 0012 [ 59]: 78e63df0f33c4298 -Block 0012 [ 60]: 71626f7696d02487 -Block 0012 [ 61]: 33d189e34208a296 -Block 0012 [ 62]: 5b8628463bb8370e -Block 0012 [ 63]: 3d5297daeb8f37b4 -Block 0012 [ 64]: a15e54b4218955b2 -Block 0012 [ 65]: 51df554a50dd1ac5 -Block 0012 [ 66]: 469ebeeabe5cfa14 -Block 0012 [ 67]: af41090cd43b27c9 -Block 0012 [ 68]: 3dfc7c9a5249e757 -Block 0012 [ 69]: 8083dc62d2141666 -Block 0012 [ 70]: 2d0c10b32040a47e -Block 0012 [ 71]: 4f2f846df18c4408 -Block 0012 [ 72]: 645797be6008bdd9 -Block 0012 [ 73]: f884a7fb4b143954 -Block 0012 [ 74]: a98762ac97397fa2 -Block 0012 [ 75]: 36d8803c36f9d2fd -Block 0012 [ 76]: 8b29f727011addc1 -Block 0012 [ 77]: dbffb03d24c3da4f -Block 0012 [ 78]: 39daa7f462274b2f -Block 0012 [ 79]: 252aa6b07d2cc934 -Block 0012 [ 80]: 767071afdb1e350a -Block 0012 [ 81]: ed9a4efa0c0eb3f9 -Block 0012 [ 82]: 927fec2ec528d3e6 -Block 0012 [ 83]: 53a883fc6082b6b5 -Block 0012 [ 84]: 905abef6eb87256e -Block 0012 [ 85]: 78275c32b72139bf -Block 0012 [ 86]: 41bb9cfdf54b0482 -Block 0012 [ 87]: 3ebfdd007aadc9d1 -Block 0012 [ 88]: dd663de48827a68a -Block 0012 [ 89]: 0d429c3e4c10e1a5 -Block 0012 [ 90]: 8831e3e39090d478 -Block 0012 [ 91]: 872a68049b31b16d -Block 0012 [ 92]: 678981f3eba99ec9 -Block 0012 [ 93]: 948493a87aa77acc -Block 0012 [ 94]: 2cb67e3f3624efb7 -Block 0012 [ 95]: 159ba09c46348a0a -Block 0012 [ 96]: a6df6afbf948c76f -Block 0012 [ 97]: 5f3660d91d0610f0 -Block 0012 [ 98]: e10c380a75c30731 -Block 0012 [ 99]: a3380d1cb4baac6c -Block 0012 [100]: 412122860cd829d8 -Block 0012 [101]: 3d72e351561446cb -Block 0012 [102]: 0d5785e0927ba58a -Block 0012 [103]: 93c450bd6c5408f9 -Block 0012 [104]: c8355b234469e077 -Block 0012 [105]: 8c8c40d89ddec43a -Block 0012 [106]: f3691d1d60862edc -Block 0012 [107]: 9c065215f0575b2c -Block 0012 [108]: d04fa24b788a01ce -Block 0012 [109]: 64964611c2d67b52 -Block 0012 [110]: 34bdcf3613501bb2 -Block 0012 [111]: 39a15e92d0bcb765 -Block 0012 [112]: 84e3e3bd76d195a2 -Block 0012 [113]: 652826ce38d4132a -Block 0012 [114]: a7f30b86b195a2d9 -Block 0012 [115]: f5a9c54cd5550a81 -Block 0012 [116]: 86732d95071189b9 -Block 0012 [117]: dc95387282aace54 -Block 0012 [118]: d563b5079fbeb7d3 -Block 0012 [119]: 17cc96cb016981f6 -Block 0012 [120]: f944e8e5437e9952 -Block 0012 [121]: 37bafa81c06d834f -Block 0012 [122]: 22e4666dcab7f6fa -Block 0012 [123]: 233e45542ee96524 -Block 0012 [124]: 8a3f7acfe023efce -Block 0012 [125]: d477d8b3fb298a6c -Block 0012 [126]: 6d75071da1c053df -Block 0012 [127]: c093ab77397d2a75 -Block 0013 [ 0]: c934e1166fb27497 -Block 0013 [ 1]: c21b829ec1ba75ef -Block 0013 [ 2]: 1812447326ab1f03 -Block 0013 [ 3]: bc5755813b65d394 -Block 0013 [ 4]: 0c55b69fe830401e -Block 0013 [ 5]: f4c57cba458e7b69 -Block 0013 [ 6]: c62cbc15e1273ca6 -Block 0013 [ 7]: 4a15f61d64f24324 -Block 0013 [ 8]: 45a16d7ed87dac30 -Block 0013 [ 9]: 5a042bd17950b220 -Block 0013 [ 10]: 7439bea3d54b3792 -Block 0013 [ 11]: 3e1cfaf0e1b4f0f0 -Block 0013 [ 12]: 79b74477b3b8f188 -Block 0013 [ 13]: a15569fed14e9e1e -Block 0013 [ 14]: 38b701e8bfdfe751 -Block 0013 [ 15]: acdd26a445547733 -Block 0013 [ 16]: 004c8807ca75f2f9 -Block 0013 [ 17]: e7773758ddf0e773 -Block 0013 [ 18]: c17a446f90fb41cf -Block 0013 [ 19]: 2f39aa5712f469c0 -Block 0013 [ 20]: 68e1b4e5a9499402 -Block 0013 [ 21]: 957b2873c2f3338d -Block 0013 [ 22]: d4df5d49fbd9ed5a -Block 0013 [ 23]: e50d7395f7621dbf -Block 0013 [ 24]: 438023a14c97b6fd -Block 0013 [ 25]: aacac0eff810b018 -Block 0013 [ 26]: b3aea30d6fe91e2c -Block 0013 [ 27]: c584091675cc073f -Block 0013 [ 28]: ed36a29bf348e46f -Block 0013 [ 29]: acf0f6ff411f229e -Block 0013 [ 30]: 5d23587357b2ed19 -Block 0013 [ 31]: a7ec3719369e365a -Block 0013 [ 32]: f5ffc8f0c71cec6d -Block 0013 [ 33]: 2a1c6c9deb0fd24c -Block 0013 [ 34]: e1acb5bcfcb18757 -Block 0013 [ 35]: eac5c6ddb44af556 -Block 0013 [ 36]: 4dd3d82cac986cb7 -Block 0013 [ 37]: fe391a158b6ed299 -Block 0013 [ 38]: 911b2e37380edc23 -Block 0013 [ 39]: 3b0d4717aa0f1bf2 -Block 0013 [ 40]: 76db16591771fa79 -Block 0013 [ 41]: 311532f58f784756 -Block 0013 [ 42]: f53186855bac398c -Block 0013 [ 43]: 0bb05e55b79f24f3 -Block 0013 [ 44]: 5da0c076d4e66f1b -Block 0013 [ 45]: e7019aa47334131c -Block 0013 [ 46]: fa128e2a0ba6ea05 -Block 0013 [ 47]: a56fb7281e59f0d3 -Block 0013 [ 48]: 2dec34f65a6d6ceb -Block 0013 [ 49]: 846008f66a2e1bd8 -Block 0013 [ 50]: b722b27b2137e16a -Block 0013 [ 51]: 9158ec8c8966460b -Block 0013 [ 52]: 9be7de535630b177 -Block 0013 [ 53]: ac2f5e16909b6e24 -Block 0013 [ 54]: b5df85fe74b20693 -Block 0013 [ 55]: 360e07ff6b7e8bc6 -Block 0013 [ 56]: 2837a8ebf9aea4df -Block 0013 [ 57]: 755f9c69267634b5 -Block 0013 [ 58]: ea0b7c1912ae0ddb -Block 0013 [ 59]: 59a785481d7e94d2 -Block 0013 [ 60]: 02028a280cbf45a5 -Block 0013 [ 61]: 6b346c9114292b86 -Block 0013 [ 62]: 5ca8c8c68c670efa -Block 0013 [ 63]: 56b101657ac927a6 -Block 0013 [ 64]: ed2918c587aacf9b -Block 0013 [ 65]: ac661ef81f54d2df -Block 0013 [ 66]: 2bf19454b9253bf1 -Block 0013 [ 67]: b20e9398e7f84a5c -Block 0013 [ 68]: 82f05894b799e79c -Block 0013 [ 69]: ea7c2be4af767103 -Block 0013 [ 70]: b2864d47c9263edf -Block 0013 [ 71]: 822aec5441d8f031 -Block 0013 [ 72]: 1c2d2a70e5462d44 -Block 0013 [ 73]: 8b7f3a74a8194379 -Block 0013 [ 74]: 851d2805a7713935 -Block 0013 [ 75]: de57ab09d60d7670 -Block 0013 [ 76]: 150c1158ad23a5c7 -Block 0013 [ 77]: 3330b89c2ad3aa29 -Block 0013 [ 78]: 6996229e973d6fa8 -Block 0013 [ 79]: ac4a5134dd9ce25b -Block 0013 [ 80]: 170b80b260896799 -Block 0013 [ 81]: 9338012e71e3c028 -Block 0013 [ 82]: 2ffe8997c5501b2e -Block 0013 [ 83]: 3b508d7e08a587c4 -Block 0013 [ 84]: 1660331d4211cd03 -Block 0013 [ 85]: ddbddd90efbb854a -Block 0013 [ 86]: 2d19e60c554775cf -Block 0013 [ 87]: 7232777bb83c8091 -Block 0013 [ 88]: ae26f1d73ef906e2 -Block 0013 [ 89]: 0d0e0a3f9e33ecab -Block 0013 [ 90]: 3000d316d97d6ab3 -Block 0013 [ 91]: 3a0b66d12607e7de -Block 0013 [ 92]: 4b27c6b67ea6e15a -Block 0013 [ 93]: ab0dcdc3cf1999dc -Block 0013 [ 94]: 0285ba539708330e -Block 0013 [ 95]: 6427a3253ed229bf -Block 0013 [ 96]: 90594375f4cccd87 -Block 0013 [ 97]: b333fded244366f2 -Block 0013 [ 98]: a2aabc7bdfac9070 -Block 0013 [ 99]: 6be0afc5e0da2a78 -Block 0013 [100]: df9cf2b977e9fb08 -Block 0013 [101]: b13b6ab3692afa87 -Block 0013 [102]: ef38da964aef5164 -Block 0013 [103]: 7d02336c83eeb32d -Block 0013 [104]: d1dc7212202f4f3b -Block 0013 [105]: 55b795c3fb9d1d03 -Block 0013 [106]: 7bdc41fb15eea35a -Block 0013 [107]: c9c4b30e5bf50128 -Block 0013 [108]: 91699e9a73f24915 -Block 0013 [109]: 52c57d8c079bb422 -Block 0013 [110]: dab261157b8fd9d2 -Block 0013 [111]: fb51df0782c97c8c -Block 0013 [112]: ee63f89968c75234 -Block 0013 [113]: ce6aa08a457d9185 -Block 0013 [114]: 5c5b86551c42ca2e -Block 0013 [115]: 086d3b05312ef786 -Block 0013 [116]: eac057b016da257c -Block 0013 [117]: 7fae02b887d2cf96 -Block 0013 [118]: 49d9276493017238 -Block 0013 [119]: f8100fbad4b197f6 -Block 0013 [120]: d5fefd5c94672f5c -Block 0013 [121]: 57f41f71207b5bb5 -Block 0013 [122]: 3177eddf189dfefa -Block 0013 [123]: feb8bc98df27321f -Block 0013 [124]: b8aa1e5a76155617 -Block 0013 [125]: 568b228968f816d5 -Block 0013 [126]: e9d3c5ffe55a95b4 -Block 0013 [127]: 18c9f13295493060 -Block 0014 [ 0]: 751611a6dca217ef -Block 0014 [ 1]: f30d5326133f623f -Block 0014 [ 2]: 3348d361099f0d4c -Block 0014 [ 3]: 2efcfc874a138a09 -Block 0014 [ 4]: de42be1bb44d2dca -Block 0014 [ 5]: a626d8e36a9b0811 -Block 0014 [ 6]: 621d28f13cb2b6ba -Block 0014 [ 7]: 7aad6051000015fe -Block 0014 [ 8]: dd095ff42875292a -Block 0014 [ 9]: 801ee2fa2c5a64c6 -Block 0014 [ 10]: a2e0b624ee27581c -Block 0014 [ 11]: 01a1484d67c0f465 -Block 0014 [ 12]: 35bb3ad0a791c30c -Block 0014 [ 13]: 0d5eb3bd17797601 -Block 0014 [ 14]: 5bc25c1b31a89dbb -Block 0014 [ 15]: 24260bacab7442a7 -Block 0014 [ 16]: 177a9da3c6fcdea9 -Block 0014 [ 17]: d10744177252796c -Block 0014 [ 18]: 96892f2c00e816c2 -Block 0014 [ 19]: 87f1a18e861985db -Block 0014 [ 20]: 8f689942a92c0238 -Block 0014 [ 21]: dfbdc178de50e5a3 -Block 0014 [ 22]: bcd2f6bedc6cd773 -Block 0014 [ 23]: c01d8d73958f7fdf -Block 0014 [ 24]: af5e13a4d7875042 -Block 0014 [ 25]: c314e5fd4c872732 -Block 0014 [ 26]: b0efedef8a761145 -Block 0014 [ 27]: f4d46eddf74bfac0 -Block 0014 [ 28]: c85753d308fdcfb9 -Block 0014 [ 29]: 81be18ed087bc898 -Block 0014 [ 30]: b747d4c1e2d1321c -Block 0014 [ 31]: 3aebf5d50792e57f -Block 0014 [ 32]: fc1ef0d9219ec253 -Block 0014 [ 33]: e9280df09e9c11b7 -Block 0014 [ 34]: 994e37fe7614467f -Block 0014 [ 35]: 658cb28441ef2bd3 -Block 0014 [ 36]: da96518ad4a20c83 -Block 0014 [ 37]: 3b772763462c7f90 -Block 0014 [ 38]: 250390de0658fb04 -Block 0014 [ 39]: 07f7f41163308f82 -Block 0014 [ 40]: e28525fd41a4c30f -Block 0014 [ 41]: 0eabece269b5cbc6 -Block 0014 [ 42]: e14a2544deacd381 -Block 0014 [ 43]: e37ca1a406f2ee67 -Block 0014 [ 44]: 6efd3c0c1f01593a -Block 0014 [ 45]: b8bc58787428afbb -Block 0014 [ 46]: 714b0631106ebe7e -Block 0014 [ 47]: c3e96745f00db12f -Block 0014 [ 48]: ab68f71a401fbb43 -Block 0014 [ 49]: bb575726d4f2fd1a -Block 0014 [ 50]: a341648f21481b2f -Block 0014 [ 51]: bb6a9a5259ef911b -Block 0014 [ 52]: c9cea2228263bfb2 -Block 0014 [ 53]: c7f334b5bcd959de -Block 0014 [ 54]: e45a55828ebfaa40 -Block 0014 [ 55]: 6a630d357bacb358 -Block 0014 [ 56]: e36896f02c834c8d -Block 0014 [ 57]: 0aaa0006f56d9259 -Block 0014 [ 58]: 4b5c1d7ab0e03775 -Block 0014 [ 59]: 542dcdcb6922bf5e -Block 0014 [ 60]: b4cbccf8d655d557 -Block 0014 [ 61]: 22e9550073a55847 -Block 0014 [ 62]: 4d81e363a0bc3d7d -Block 0014 [ 63]: 88888fd834353993 -Block 0014 [ 64]: 3d24cdc7e52b1201 -Block 0014 [ 65]: 3d8b52965b0135a7 -Block 0014 [ 66]: cc9d378ef8def398 -Block 0014 [ 67]: bfa7c266b6442afa -Block 0014 [ 68]: 111e8c3e0da7dd1c -Block 0014 [ 69]: c5912da214c3b084 -Block 0014 [ 70]: 20e58f7585611c9a -Block 0014 [ 71]: 9f15f86d137b6a6a -Block 0014 [ 72]: 6f7a6213f30baf69 -Block 0014 [ 73]: 37fcf232b3e00ca5 -Block 0014 [ 74]: 05931457c9dac739 -Block 0014 [ 75]: 571448470ca168e9 -Block 0014 [ 76]: c27d607587d72d6c -Block 0014 [ 77]: 40d94f8aa07fd0f5 -Block 0014 [ 78]: 485dae40764e0136 -Block 0014 [ 79]: bddd055e69aa3228 -Block 0014 [ 80]: 80847e77d994fbcf -Block 0014 [ 81]: 2205602d7c7880a6 -Block 0014 [ 82]: 01b57845dc15aac7 -Block 0014 [ 83]: 0bcad09546e5910c -Block 0014 [ 84]: 822ed733aad0d4be -Block 0014 [ 85]: 36eff814bdbcce2a -Block 0014 [ 86]: d34eb84e1859a50a -Block 0014 [ 87]: 492482efab353be1 -Block 0014 [ 88]: c873ea2b88095564 -Block 0014 [ 89]: ea34805735c0e69b -Block 0014 [ 90]: 282dbc532a16f0b2 -Block 0014 [ 91]: 9d73a4d2b509f4ed -Block 0014 [ 92]: cbffe1430b613d50 -Block 0014 [ 93]: 5e76863adb84a188 -Block 0014 [ 94]: d54b2945b9d2bfd8 -Block 0014 [ 95]: eefee9aa2903e333 -Block 0014 [ 96]: 848e77aa097cad40 -Block 0014 [ 97]: fb9d26b96a14e021 -Block 0014 [ 98]: 1f2786497b51402f -Block 0014 [ 99]: 935d85b4dec778fa -Block 0014 [100]: 9f4c19a556583adc -Block 0014 [101]: 51b5266e1d568092 -Block 0014 [102]: e8857d4a180ea62c -Block 0014 [103]: 4dba7f4d5841f89c -Block 0014 [104]: 7fda01ec3ebe7925 -Block 0014 [105]: 4f81b02917212b96 -Block 0014 [106]: 0ef65535cb286212 -Block 0014 [107]: b2f2b7d55afd99cd -Block 0014 [108]: 0925aedc2dbed1e9 -Block 0014 [109]: 5e1427758f2d88d6 -Block 0014 [110]: 0a6dd2a5c2cd029f -Block 0014 [111]: 7de7196e1f00f1db -Block 0014 [112]: fa98e1bbc7c10663 -Block 0014 [113]: f289964e052b1262 -Block 0014 [114]: 1e283e3fd3c0d4fa -Block 0014 [115]: 7c9aa9705eb22b96 -Block 0014 [116]: f3bb07922a5d2279 -Block 0014 [117]: 34a8fcefce841ade -Block 0014 [118]: 0709034e1c06baa2 -Block 0014 [119]: 598a4c2c1c07c589 -Block 0014 [120]: 26d5573b1775fb83 -Block 0014 [121]: 9cc4fd42c8865d4f -Block 0014 [122]: cfcbe0a59328c84a -Block 0014 [123]: 6bb349e66195498b -Block 0014 [124]: 4be2f84e7f1a4bb7 -Block 0014 [125]: 625a08a3e55cc7ba -Block 0014 [126]: 703ca94204f1eb2e -Block 0014 [127]: ba100657462ad47b -Block 0015 [ 0]: 90f9cf97fdfb1212 -Block 0015 [ 1]: 4ebfd0eb7bde74fe -Block 0015 [ 2]: 5d4892b667d8fb9a -Block 0015 [ 3]: eee897de87730152 -Block 0015 [ 4]: bd8707434bfeaa0a -Block 0015 [ 5]: fd8aee451c60cd9d -Block 0015 [ 6]: c58c0e0ffcaaea7b -Block 0015 [ 7]: 03e0436c90051504 -Block 0015 [ 8]: 7ed836946cee6ad8 -Block 0015 [ 9]: 8b156f73ee007bdf -Block 0015 [ 10]: d541428ece1acb9e -Block 0015 [ 11]: c7a395429389dc5a -Block 0015 [ 12]: 010f3d509e0d6821 -Block 0015 [ 13]: 5fb4c498d4416f4c -Block 0015 [ 14]: 319941fd256f4759 -Block 0015 [ 15]: de2ecefec27cbf7a -Block 0015 [ 16]: ab5295b324401b40 -Block 0015 [ 17]: a41144e0c61bb357 -Block 0015 [ 18]: bf8edc2253a1dda5 -Block 0015 [ 19]: b6b3236c2bf5e09c -Block 0015 [ 20]: a41a3ebdf0eb9f03 -Block 0015 [ 21]: f037384bd85667d9 -Block 0015 [ 22]: cd3b6163484a9319 -Block 0015 [ 23]: de534447766d1f29 -Block 0015 [ 24]: 8c8cdb1d34d34914 -Block 0015 [ 25]: 11541705e8bcb3b2 -Block 0015 [ 26]: 801b40db1cd0a376 -Block 0015 [ 27]: 15ce882abff4aeb6 -Block 0015 [ 28]: 0b4eccb36e5447ce -Block 0015 [ 29]: 9305728451875b90 -Block 0015 [ 30]: d2640809e3215ee4 -Block 0015 [ 31]: cbd0dfb61bc5f357 -Block 0015 [ 32]: 1423c16dd0dec029 -Block 0015 [ 33]: d6dbef65de65761e -Block 0015 [ 34]: eb9546f8f440b03d -Block 0015 [ 35]: 25626b0b8c94132f -Block 0015 [ 36]: b6399c16cfbebc22 -Block 0015 [ 37]: c41694770a8a9b9f -Block 0015 [ 38]: 15ac9e81f8349080 -Block 0015 [ 39]: 52825e57cba50916 -Block 0015 [ 40]: 51d2c9935e17d98c -Block 0015 [ 41]: 5607b931b9cbc2f6 -Block 0015 [ 42]: c15e398a71664716 -Block 0015 [ 43]: 6196cb09666b8aa6 -Block 0015 [ 44]: d1f004bf865d712f -Block 0015 [ 45]: 71c4ab4eb1a8c76c -Block 0015 [ 46]: a6de3842bbbd1029 -Block 0015 [ 47]: b9ec26bd0cdfafac -Block 0015 [ 48]: 9b830f151684793e -Block 0015 [ 49]: a89763e63465931b -Block 0015 [ 50]: 9a85d13f5e810f61 -Block 0015 [ 51]: d310f5b7712d28da -Block 0015 [ 52]: 5b28e526e9fa2a09 -Block 0015 [ 53]: 966f7b02ae839c94 -Block 0015 [ 54]: 86a2d4c5e71e7ac8 -Block 0015 [ 55]: e96910b6d32b0b84 -Block 0015 [ 56]: 241237960baaadb8 -Block 0015 [ 57]: 93ee135d761f7ef1 -Block 0015 [ 58]: 458563f18c30d6ca -Block 0015 [ 59]: 20339a86a422f5dc -Block 0015 [ 60]: 8be24a5a13609cd0 -Block 0015 [ 61]: f2341abd8d040b8f -Block 0015 [ 62]: 9944dd3970485508 -Block 0015 [ 63]: b73d28e85eecf928 -Block 0015 [ 64]: b7bd00ecf6510e61 -Block 0015 [ 65]: e6eaaa07d887015b -Block 0015 [ 66]: e2201e7b73b2b762 -Block 0015 [ 67]: d22248c2d87a1e38 -Block 0015 [ 68]: c8e6b242348e7e4d -Block 0015 [ 69]: df21a46b6b9178b5 -Block 0015 [ 70]: f449e89387dd2d54 -Block 0015 [ 71]: f9588b623b526b80 -Block 0015 [ 72]: 70e38fa377d75afe -Block 0015 [ 73]: cbf379cb401301bd -Block 0015 [ 74]: 34a2ba0457b360b5 -Block 0015 [ 75]: 3fcd0772e15aa753 -Block 0015 [ 76]: e6a1ee7587f2b0cf -Block 0015 [ 77]: b2a399f2bb958f0c -Block 0015 [ 78]: cd702bc394a274d9 -Block 0015 [ 79]: 2cf2c4f609352e79 -Block 0015 [ 80]: 6f8742ba962af80a -Block 0015 [ 81]: 187d7781f5b58bcb -Block 0015 [ 82]: ea995eaf547b26f1 -Block 0015 [ 83]: 70ff6a3ec66b4560 -Block 0015 [ 84]: 335412fe69fff286 -Block 0015 [ 85]: d7d982d6bdc0eaf9 -Block 0015 [ 86]: 6a91a369ebe4c227 -Block 0015 [ 87]: bd7d3af9c4695372 -Block 0015 [ 88]: 517d76991499e3dd -Block 0015 [ 89]: 1b5a124e4c09386e -Block 0015 [ 90]: 9dc15484e994c472 -Block 0015 [ 91]: c30a4bf622feae78 -Block 0015 [ 92]: c15f1cf31d1d2e79 -Block 0015 [ 93]: fd4afd7d9800e3ca -Block 0015 [ 94]: 9abdcbeea24b166a -Block 0015 [ 95]: fad22e44fd945a51 -Block 0015 [ 96]: 187dbda78f640e08 -Block 0015 [ 97]: 6f2ad2ff1fddc51b -Block 0015 [ 98]: 5c9e3d2a789d01f4 -Block 0015 [ 99]: e17643ada188ca5d -Block 0015 [100]: daf7d892618a7687 -Block 0015 [101]: ac5aa9b82e8d53d9 -Block 0015 [102]: ae8c60a4c1bc63bb -Block 0015 [103]: b35f4d4e3ced26a2 -Block 0015 [104]: 55abe3d57678671a -Block 0015 [105]: eb15e0d818d1fd62 -Block 0015 [106]: b23a0d03863ed118 -Block 0015 [107]: cbc0e428e6d752fb -Block 0015 [108]: f1931d6c45be4320 -Block 0015 [109]: 2c8bd9097f39e50d -Block 0015 [110]: cc33e6016cc08ee6 -Block 0015 [111]: 2280ad7ea4fe9832 -Block 0015 [112]: 2a922a76400a5cbe -Block 0015 [113]: 2d1a097b36b2a380 -Block 0015 [114]: 25a31a1a2b373c9b -Block 0015 [115]: 77a19abf854f116a -Block 0015 [116]: fe66884f193b74d7 -Block 0015 [117]: 9dab1bf53a7a50b9 -Block 0015 [118]: fdd36d0f46d6abd6 -Block 0015 [119]: c32638540d68fb28 -Block 0015 [120]: 32788f09d80f0f11 -Block 0015 [121]: baf18788397a3a20 -Block 0015 [122]: 4729a150debebe00 -Block 0015 [123]: 98db2abeca755d0c -Block 0015 [124]: 9fa7f4acdbfc2075 -Block 0015 [125]: c79cc37a40fed18f -Block 0015 [126]: 0b1374123d496b56 -Block 0015 [127]: 723bd40bcc338eb9 -Block 0016 [ 0]: dba1631496e37081 -Block 0016 [ 1]: 7bcab81931f7fb3a -Block 0016 [ 2]: ec1b708517efc104 -Block 0016 [ 3]: 1d9620eab17a8af2 -Block 0016 [ 4]: 348e88a95a5b4836 -Block 0016 [ 5]: 08fd70a3903354b2 -Block 0016 [ 6]: 78878a368235854d -Block 0016 [ 7]: 94015822062f61f3 -Block 0016 [ 8]: e6261162790fc67a -Block 0016 [ 9]: d1bd71216db48ea3 -Block 0016 [ 10]: fa0163a85027dfef -Block 0016 [ 11]: 70d35155d8c744db -Block 0016 [ 12]: de5713bffb82c049 -Block 0016 [ 13]: 6a2f55255edc50b2 -Block 0016 [ 14]: 2de24cdba809978f -Block 0016 [ 15]: a9037f5f21ffcb62 -Block 0016 [ 16]: 61a14e0e21dfbbb3 -Block 0016 [ 17]: ff04c2acd3c56a2a -Block 0016 [ 18]: 0c34a70f918e0b8d -Block 0016 [ 19]: b41db4fe7e90d0c4 -Block 0016 [ 20]: 50fd52d4ac3dcef1 -Block 0016 [ 21]: 49f6930c4f261bbd -Block 0016 [ 22]: cebb8fc10d6916bd -Block 0016 [ 23]: d2a870eb3a73d5e8 -Block 0016 [ 24]: 026b068c396ee281 -Block 0016 [ 25]: 37e31bcb07d3d06d -Block 0016 [ 26]: 51e18129c808df2c -Block 0016 [ 27]: e38bd894c7346a95 -Block 0016 [ 28]: 4666a2e0a015d89b -Block 0016 [ 29]: 53080e6a73bd7b2b -Block 0016 [ 30]: ab69db3d9699ea9c -Block 0016 [ 31]: 0a5fff8051cd1caf -Block 0016 [ 32]: c16f87f1ff14ee00 -Block 0016 [ 33]: 4f8261979edac3f2 -Block 0016 [ 34]: 1a015a10b756c6ec -Block 0016 [ 35]: 66cdc7820398cc5c -Block 0016 [ 36]: 45706053e2b18e31 -Block 0016 [ 37]: 500d1855f2009c73 -Block 0016 [ 38]: eaab57647a45b537 -Block 0016 [ 39]: 92b7eedc890cec89 -Block 0016 [ 40]: 04f79aefec3bc0e9 -Block 0016 [ 41]: 144ac54f82047d86 -Block 0016 [ 42]: 2ae5c5f9e60f6674 -Block 0016 [ 43]: 29fb00da354c45ba -Block 0016 [ 44]: 6b9e88cc40d8650b -Block 0016 [ 45]: 843b907fe783927f -Block 0016 [ 46]: 09640d95f0038a53 -Block 0016 [ 47]: 556f347c654c5ab3 -Block 0016 [ 48]: 60531233a823cde3 -Block 0016 [ 49]: 97c638e1c4927b03 -Block 0016 [ 50]: 29d80aa6e06b0456 -Block 0016 [ 51]: 5d00fd9a7ca97121 -Block 0016 [ 52]: 765ffe668dfdc2c1 -Block 0016 [ 53]: 5a2331032829fd09 -Block 0016 [ 54]: 4373276735c93c1b -Block 0016 [ 55]: 23410a050fe40fc7 -Block 0016 [ 56]: c0396855da2eee42 -Block 0016 [ 57]: b69958feeb38026e -Block 0016 [ 58]: 02c4f30af9932784 -Block 0016 [ 59]: 89d2d63d9ff65483 -Block 0016 [ 60]: 69583bd38d980b3e -Block 0016 [ 61]: 1036e040b045969e -Block 0016 [ 62]: a87365c2d51d93b8 -Block 0016 [ 63]: 8047300e3464fbea -Block 0016 [ 64]: 7ba7e44ac1b4e18e -Block 0016 [ 65]: c9a5f9247ffa1caa -Block 0016 [ 66]: 2672f42a31dd76c9 -Block 0016 [ 67]: 600c1ca9792f48de -Block 0016 [ 68]: edc0454eb60f5efb -Block 0016 [ 69]: 24ca25768dac07e2 -Block 0016 [ 70]: 5a897a1a626401d2 -Block 0016 [ 71]: b873371b5c32a10d -Block 0016 [ 72]: a79f82e2fe9a33a9 -Block 0016 [ 73]: e17fbb6e884277b9 -Block 0016 [ 74]: 705da8d6af3afd19 -Block 0016 [ 75]: 351cc4f25d20e442 -Block 0016 [ 76]: efdc3cef63ed0468 -Block 0016 [ 77]: 109e45a160396cc3 -Block 0016 [ 78]: f61273c4f78110cb -Block 0016 [ 79]: a149ae2114ef95c9 -Block 0016 [ 80]: 9686ae2ab6e96c4b -Block 0016 [ 81]: 82e34d717130811f -Block 0016 [ 82]: 96b6238ab9e97331 -Block 0016 [ 83]: 10af26c305b949af -Block 0016 [ 84]: 73bc99c3c9614621 -Block 0016 [ 85]: 5c4c3ee6f3a0eda2 -Block 0016 [ 86]: 9b78611d8965dcc9 -Block 0016 [ 87]: 5704f8fa7d51b4ef -Block 0016 [ 88]: e1038992b0be6efd -Block 0016 [ 89]: 45d148b6187fe37f -Block 0016 [ 90]: 55bcd22852ed2762 -Block 0016 [ 91]: 0f64f49ccfa80f38 -Block 0016 [ 92]: b5fad479b4ff5934 -Block 0016 [ 93]: d7997477fbb706e0 -Block 0016 [ 94]: 8a959e6e9a047bfb -Block 0016 [ 95]: 34071c4c6c491070 -Block 0016 [ 96]: 287346060fa77813 -Block 0016 [ 97]: f1b6634dccf64cb8 -Block 0016 [ 98]: 790b18cf5d8f57b2 -Block 0016 [ 99]: 9d83ef55adbb4729 -Block 0016 [100]: d35f419bf33dc17e -Block 0016 [101]: 1e38549f1fd07181 -Block 0016 [102]: 5ab80e4b365c6a77 -Block 0016 [103]: 261245bb1406f154 -Block 0016 [104]: 8ebd555d5865a16a -Block 0016 [105]: fd4a78d20da3993b -Block 0016 [106]: 6cb78c2f1ca8d5cf -Block 0016 [107]: 49ce107e280365c8 -Block 0016 [108]: 55d5f2fabbdc5d25 -Block 0016 [109]: 5521ebac47859c8a -Block 0016 [110]: 042dd30ace63fef2 -Block 0016 [111]: e1ea2fea6c4e51e7 -Block 0016 [112]: c75573901eac10df -Block 0016 [113]: 3d3dcba0172f75b2 -Block 0016 [114]: 4869c7007eee34ce -Block 0016 [115]: 0597dfbf53b667bf -Block 0016 [116]: f9d4c4ef00f016cd -Block 0016 [117]: aabebc3cb036df01 -Block 0016 [118]: 27cbced80caa86fc -Block 0016 [119]: 7de1ba464cfdb5d4 -Block 0016 [120]: 14319a2c4420864d -Block 0016 [121]: 1fccc5e717075731 -Block 0016 [122]: af0125d5e39888e3 -Block 0016 [123]: ad39af88f22b67e3 -Block 0016 [124]: af50dd714b281182 -Block 0016 [125]: 718dd9ffe15c66a1 -Block 0016 [126]: 0acc2655ba4339a7 -Block 0016 [127]: be96794bc4a79dd0 -Block 0017 [ 0]: 7b5ba70f2c9ad40f -Block 0017 [ 1]: 36f0a9a53c4b55e5 -Block 0017 [ 2]: 5425515f3660e150 -Block 0017 [ 3]: fc8697830553a6b6 -Block 0017 [ 4]: 1edbcbccfc4e85a7 -Block 0017 [ 5]: fa7c7ec35e1768ec -Block 0017 [ 6]: ceff78f0f46f476a -Block 0017 [ 7]: f1e93938c38dd1e2 -Block 0017 [ 8]: 6047d8bd58ba9bca -Block 0017 [ 9]: 38cd284c1a5f1b37 -Block 0017 [ 10]: b8c0090901487ce8 -Block 0017 [ 11]: 9fa9f59f78f8ba47 -Block 0017 [ 12]: d76da75fc59dcac1 -Block 0017 [ 13]: 909bf97bdb3c3695 -Block 0017 [ 14]: fa5d1ebdfd13ec94 -Block 0017 [ 15]: 30d28c34a972f817 -Block 0017 [ 16]: 030bb56aea8cd4cb -Block 0017 [ 17]: ed751bf31759ec31 -Block 0017 [ 18]: c2bd766b1bc8addd -Block 0017 [ 19]: 4208e42284623d16 -Block 0017 [ 20]: 065b57cd2ddd5c5b -Block 0017 [ 21]: c61d4d148a518c1f -Block 0017 [ 22]: 192d41daeddc3371 -Block 0017 [ 23]: d107ec22d1460874 -Block 0017 [ 24]: 2325ca6bf51b9ec2 -Block 0017 [ 25]: bd758560a6ca5726 -Block 0017 [ 26]: 96d3f1c698632e5f -Block 0017 [ 27]: 1c97ae8f8065d4a1 -Block 0017 [ 28]: 78640186f05f5d2c -Block 0017 [ 29]: cf6d82819e18ed27 -Block 0017 [ 30]: 4d6ebb2f1b700728 -Block 0017 [ 31]: 97d8ddd7084eb125 -Block 0017 [ 32]: 09558992c97b4c0f -Block 0017 [ 33]: c0a6ad16e3c9be87 -Block 0017 [ 34]: 9b6a4e984e24c9fd -Block 0017 [ 35]: 5958f55b2a13037a -Block 0017 [ 36]: 2e147024c0cd4121 -Block 0017 [ 37]: ea367dabd7ab4246 -Block 0017 [ 38]: ea8ba7cbf2389d9d -Block 0017 [ 39]: 8738b7e8961c9462 -Block 0017 [ 40]: 37bc3c32461a8ba3 -Block 0017 [ 41]: 1a988f291046040f -Block 0017 [ 42]: ef0f85ad9a8b1836 -Block 0017 [ 43]: c78659d686fe952c -Block 0017 [ 44]: 6ee163f93d3b653a -Block 0017 [ 45]: 26152cf977f49a65 -Block 0017 [ 46]: d301680c980a2c51 -Block 0017 [ 47]: 70df093ef8894d17 -Block 0017 [ 48]: c96e160883c1827e -Block 0017 [ 49]: 989f8143b240ad5c -Block 0017 [ 50]: e16c1e6c01410167 -Block 0017 [ 51]: ee2f28e8df14830c -Block 0017 [ 52]: 7bacbee1e27659ad -Block 0017 [ 53]: fdeccb4e07c45761 -Block 0017 [ 54]: db3d31660a842a47 -Block 0017 [ 55]: 3ff4286194042d07 -Block 0017 [ 56]: 2a98eb4b903d0cc1 -Block 0017 [ 57]: e646d6112546a058 -Block 0017 [ 58]: 27f241d5db630dff -Block 0017 [ 59]: 5628d1ebd53f023a -Block 0017 [ 60]: ba56ca849da491cb -Block 0017 [ 61]: 9ecda254008b4e50 -Block 0017 [ 62]: f05f1f3722817ed2 -Block 0017 [ 63]: c3fa24f242c29b90 -Block 0017 [ 64]: 1eab33b1d0e2465b -Block 0017 [ 65]: b869cfee39139c0a -Block 0017 [ 66]: b2fd4681352495b5 -Block 0017 [ 67]: b4fa867b48fbccf1 -Block 0017 [ 68]: d1ff00418d9e5d6f -Block 0017 [ 69]: 98fb0e309c62edff -Block 0017 [ 70]: 9e5c8611322c3e74 -Block 0017 [ 71]: 5182de709dc58259 -Block 0017 [ 72]: 20931b51dcc31663 -Block 0017 [ 73]: bc90b255d0624f0b -Block 0017 [ 74]: 85322ecab55c9fb0 -Block 0017 [ 75]: 61d5ad563831d979 -Block 0017 [ 76]: b8d8aa275bbe6b4a -Block 0017 [ 77]: 4482a96f016b95ba -Block 0017 [ 78]: a5bfe0adace1726f -Block 0017 [ 79]: 3adab49f26f7bee9 -Block 0017 [ 80]: 140f7a360bfab47e -Block 0017 [ 81]: 5f31d06e631f52ac -Block 0017 [ 82]: 5915cbba03a5a890 -Block 0017 [ 83]: 04da8af5b2a4f869 -Block 0017 [ 84]: dc57e07f79a3c990 -Block 0017 [ 85]: 7a0497ae45c6982d -Block 0017 [ 86]: d14d30fea11a17e9 -Block 0017 [ 87]: 9de84c6eff9fa195 -Block 0017 [ 88]: 6b429b095cc24ef9 -Block 0017 [ 89]: a7c7f6ff316e378f -Block 0017 [ 90]: 2a3b2ac5d7607632 -Block 0017 [ 91]: ec137e7f80dd20fb -Block 0017 [ 92]: 22a8bd325c264ae2 -Block 0017 [ 93]: 7007457346e49179 -Block 0017 [ 94]: 2f217594c468138d -Block 0017 [ 95]: 578c7d6bb4817011 -Block 0017 [ 96]: 3a5d32b954ff5f25 -Block 0017 [ 97]: b5791614aa7bb694 -Block 0017 [ 98]: c827579c0a97168b -Block 0017 [ 99]: 5ca0639fd40b32d3 -Block 0017 [100]: 60d021d8b6af09de -Block 0017 [101]: 1a400c7e0c9c38c1 -Block 0017 [102]: 7baf9e6d7c46bcda -Block 0017 [103]: 2c55bc07321f9a05 -Block 0017 [104]: b89e768d47a785c1 -Block 0017 [105]: 39534ecb8b83e175 -Block 0017 [106]: 64ee6ce08a1052fc -Block 0017 [107]: bd3d62e2c912f0b5 -Block 0017 [108]: 59b4cf828ea54ee4 -Block 0017 [109]: a3b111d1605c01be -Block 0017 [110]: da7d23de96a490de -Block 0017 [111]: 7c75d813c58cb4f7 -Block 0017 [112]: 008950719cd0b4e5 -Block 0017 [113]: 179d3d56a1051f16 -Block 0017 [114]: 442b82c14e3edb7b -Block 0017 [115]: f6edb20604028f65 -Block 0017 [116]: ebe72e71d4c15cef -Block 0017 [117]: 550bfb8d9f4aae3c -Block 0017 [118]: 3f005851e118c76e -Block 0017 [119]: b778f46af664d0d0 -Block 0017 [120]: 314df035073b5033 -Block 0017 [121]: efc6f26a182fcb60 -Block 0017 [122]: ecbd01d4a2aad969 -Block 0017 [123]: 82d5571cce229a3f -Block 0017 [124]: d9045c594f34c332 -Block 0017 [125]: 6edb8400b36a321c -Block 0017 [126]: e603318505c4b41e -Block 0017 [127]: 53080a8ac05f8ee6 -Block 0018 [ 0]: 1c6575f9a10acd80 -Block 0018 [ 1]: 2a9e757fc1985b42 -Block 0018 [ 2]: 2a070582f4d7fd52 -Block 0018 [ 3]: ea86a49f36d096d4 -Block 0018 [ 4]: 9d8c34c6e3d60f08 -Block 0018 [ 5]: 1622e0f45989720a -Block 0018 [ 6]: f5a13aa7c469240c -Block 0018 [ 7]: dd068ad7fa4ddd64 -Block 0018 [ 8]: ce149b2e7c66a869 -Block 0018 [ 9]: e6856096802179be -Block 0018 [ 10]: 78ada9ed8703ae27 -Block 0018 [ 11]: 72020afe3448bfec -Block 0018 [ 12]: 3fddc3d8928c3b97 -Block 0018 [ 13]: a21b1a8a520e04d9 -Block 0018 [ 14]: 06690fadc6cd9f06 -Block 0018 [ 15]: cafb12d4baea0b81 -Block 0018 [ 16]: 86bbed9914ae8cf2 -Block 0018 [ 17]: bedc4febe4696bf8 -Block 0018 [ 18]: 9cf81017baec53a7 -Block 0018 [ 19]: 2d9dfeb07cb61303 -Block 0018 [ 20]: 8437a139617fd876 -Block 0018 [ 21]: 343fd4208419d50c -Block 0018 [ 22]: 0996be65d9fbcd0a -Block 0018 [ 23]: 3d0f66e79c7e8344 -Block 0018 [ 24]: f03c3694659bcf13 -Block 0018 [ 25]: 546982fe89617636 -Block 0018 [ 26]: c7dfd03bd4a2ac6a -Block 0018 [ 27]: 388400aeea1a4bdb -Block 0018 [ 28]: 41645c6cf37246b2 -Block 0018 [ 29]: 6c110f7bc4ac7599 -Block 0018 [ 30]: 159bf2f2d0528b8d -Block 0018 [ 31]: 7c0f6070254b07ec -Block 0018 [ 32]: 27b8114d303790c7 -Block 0018 [ 33]: 6e2eda0717b86cf0 -Block 0018 [ 34]: 59ded021767f3c97 -Block 0018 [ 35]: afc68e65f85bd36b -Block 0018 [ 36]: b86592e214789675 -Block 0018 [ 37]: 34e2c8570370feea -Block 0018 [ 38]: 58e92d613717584e -Block 0018 [ 39]: a37a32a2270a702c -Block 0018 [ 40]: ea60b7b999c47428 -Block 0018 [ 41]: 5ef5855061b18b9f -Block 0018 [ 42]: 3fa31397437f9ba5 -Block 0018 [ 43]: b6689ef5bf20ab34 -Block 0018 [ 44]: 132c885cc262e48f -Block 0018 [ 45]: ce57e7ce64ca9bb3 -Block 0018 [ 46]: 36b2e6285f8c6965 -Block 0018 [ 47]: bf007ccb66d99b55 -Block 0018 [ 48]: 3e28b50440f345d5 -Block 0018 [ 49]: e994a6e41a10f083 -Block 0018 [ 50]: b54b5d9057a568e5 -Block 0018 [ 51]: fb3d507834f0abeb -Block 0018 [ 52]: 72dbb34a878af028 -Block 0018 [ 53]: 1aee63ddfe080bfb -Block 0018 [ 54]: 0025dee0fed4e37e -Block 0018 [ 55]: 56292c8afd174199 -Block 0018 [ 56]: f0aa15dc972c2853 -Block 0018 [ 57]: 9024522f6bef47a1 -Block 0018 [ 58]: ee29d18b8eab9af9 -Block 0018 [ 59]: 23d3accf2bda84db -Block 0018 [ 60]: 074b4b5728ebb32d -Block 0018 [ 61]: aceacbf4a6a899cd -Block 0018 [ 62]: 6f354c27f02bf5d6 -Block 0018 [ 63]: 7ec9c7d50f228293 -Block 0018 [ 64]: 0d0a219e06a20d6c -Block 0018 [ 65]: 33ab995959bae7f0 -Block 0018 [ 66]: f59c2eb8d2386105 -Block 0018 [ 67]: df2f3cf73585bfc4 -Block 0018 [ 68]: a9fac0135ad5aed0 -Block 0018 [ 69]: 49556d419f8433b9 -Block 0018 [ 70]: dd3afeed8d935892 -Block 0018 [ 71]: b24e7e4f9fdeb0d7 -Block 0018 [ 72]: 0e8ddb6b5c6c053e -Block 0018 [ 73]: 9fb0b4b7040dff6f -Block 0018 [ 74]: 335c0af90c7326b1 -Block 0018 [ 75]: 2b3a8b28e360a720 -Block 0018 [ 76]: a38f7a1fcd4c6f18 -Block 0018 [ 77]: 2fc14a2922ba9086 -Block 0018 [ 78]: 06d2331d98825423 -Block 0018 [ 79]: 421f972c3f7780b0 -Block 0018 [ 80]: 202301ef938e0bad -Block 0018 [ 81]: 7a8c48b25afe353c -Block 0018 [ 82]: e791bbead44e88c3 -Block 0018 [ 83]: d3867de18af9ac71 -Block 0018 [ 84]: 52482b3fc98d7974 -Block 0018 [ 85]: fae31ef53fab928d -Block 0018 [ 86]: 4484e8d59a1d41e8 -Block 0018 [ 87]: 1a5864cb33974ce1 -Block 0018 [ 88]: 62ac9ca77f59a539 -Block 0018 [ 89]: 4d440ce8e80b0a44 -Block 0018 [ 90]: 3dd25a1e99e082f0 -Block 0018 [ 91]: 45b5b3fccd11c949 -Block 0018 [ 92]: 1b3a66418cd781e2 -Block 0018 [ 93]: 48a8ce412844a394 -Block 0018 [ 94]: de71390ba827ddbd -Block 0018 [ 95]: 85976922171b9790 -Block 0018 [ 96]: d8423a1ec6d5bab1 -Block 0018 [ 97]: 592b5d193a3b3609 -Block 0018 [ 98]: 7bd2b8149cb2495b -Block 0018 [ 99]: 02cbe78ebbd8270b -Block 0018 [100]: 1f626cc675e0140d -Block 0018 [101]: 423dac87eb9493d4 -Block 0018 [102]: eee2243fe0d74697 -Block 0018 [103]: 5a7074a3bdd5cfe4 -Block 0018 [104]: 957f4b71a6c0cd03 -Block 0018 [105]: ecbd98ef8d09798e -Block 0018 [106]: 8c46a8ed1afb3ed2 -Block 0018 [107]: 1cbf535b8e9a90cb -Block 0018 [108]: 52081ad1254109e7 -Block 0018 [109]: a7be109d2e24fc45 -Block 0018 [110]: 43c3d4693421c9c9 -Block 0018 [111]: 320187d82c7622aa -Block 0018 [112]: 3005f4a02db5cd47 -Block 0018 [113]: c9b593e108491b8d -Block 0018 [114]: 07b285d679681f35 -Block 0018 [115]: ff6ad0d67969793a -Block 0018 [116]: 371a921169811926 -Block 0018 [117]: 09f67f449b49116e -Block 0018 [118]: ec51b4a5f1646649 -Block 0018 [119]: f67366ba7a177373 -Block 0018 [120]: 74c538aa4fb2f123 -Block 0018 [121]: 8e454baf2b483190 -Block 0018 [122]: 68944332288eeeb7 -Block 0018 [123]: c1f577313d81ab15 -Block 0018 [124]: 6fdfb2cd1475387d -Block 0018 [125]: 2f5f80b2fe940caa -Block 0018 [126]: 6ff1d7b0f222212c -Block 0018 [127]: 92d7874653b70612 -Block 0019 [ 0]: 93acbaeacded228f -Block 0019 [ 1]: 04ffad08d7cf945e -Block 0019 [ 2]: 7da44d978886ff7e -Block 0019 [ 3]: ee06010d47c0e8a2 -Block 0019 [ 4]: 94286d1d3fabcd7f -Block 0019 [ 5]: ae490c824c9c668f -Block 0019 [ 6]: 5ae115d1ec752d80 -Block 0019 [ 7]: d2c876dd1b3610de -Block 0019 [ 8]: 88f2df0f35c1e7ee -Block 0019 [ 9]: b74d0ca61e7db938 -Block 0019 [ 10]: b1732a6f4fb48910 -Block 0019 [ 11]: d40c0f502021679f -Block 0019 [ 12]: ea19fc7983c1da39 -Block 0019 [ 13]: d2ee700063bbdc38 -Block 0019 [ 14]: f3df222db778b740 -Block 0019 [ 15]: 73f659a6f658f7cf -Block 0019 [ 16]: 325d3be05f9277c0 -Block 0019 [ 17]: 401dc2508f41181e -Block 0019 [ 18]: c4777c5dcfec3e9a -Block 0019 [ 19]: 850819df3005f9df -Block 0019 [ 20]: 98887f8b695a363d -Block 0019 [ 21]: 340a02bc90f72b07 -Block 0019 [ 22]: 8ee3a0a9f0109fa9 -Block 0019 [ 23]: 8627997126ab3ef9 -Block 0019 [ 24]: 42c3cb91c821ae6c -Block 0019 [ 25]: 52a80de8fe0d7818 -Block 0019 [ 26]: bf67209e92990da1 -Block 0019 [ 27]: 583f282cfa720749 -Block 0019 [ 28]: 803a59ff851a9629 -Block 0019 [ 29]: 19b5137c3e2855c1 -Block 0019 [ 30]: 7b3ee14ce1847f65 -Block 0019 [ 31]: f39c3c8919a04b8e -Block 0019 [ 32]: df6e94c2319f2fac -Block 0019 [ 33]: be81ad71d3da8b6e -Block 0019 [ 34]: 96b5d3134e72bbd7 -Block 0019 [ 35]: 01be7314fbab115b -Block 0019 [ 36]: 9b6573be1f901eaf -Block 0019 [ 37]: 0af9f25fc41f65f1 -Block 0019 [ 38]: ecf061cbec0301da -Block 0019 [ 39]: e1f6de6ecc2c51d9 -Block 0019 [ 40]: a21201bed7bc2ece -Block 0019 [ 41]: c1de087e0461f89b -Block 0019 [ 42]: 640531594f92810a -Block 0019 [ 43]: 2f7c47537c46dd26 -Block 0019 [ 44]: b9e806297c8e285d -Block 0019 [ 45]: 23fc05e71c7ca87f -Block 0019 [ 46]: 6947a7418de6e5d4 -Block 0019 [ 47]: 11006b4b6595fc58 -Block 0019 [ 48]: 41b286b38a4b607d -Block 0019 [ 49]: eba60946c062f7e9 -Block 0019 [ 50]: f38aae3089bff1e8 -Block 0019 [ 51]: e1d219dacc19a0aa -Block 0019 [ 52]: bbd69ed673b586b2 -Block 0019 [ 53]: f3604701136a8539 -Block 0019 [ 54]: ee988f9217ca7216 -Block 0019 [ 55]: 3ec40766c32f9872 -Block 0019 [ 56]: aa8e6f55082b9b3a -Block 0019 [ 57]: eaee4cbf152450a2 -Block 0019 [ 58]: 2d6d634a578c3768 -Block 0019 [ 59]: cd1b30693fc22fd3 -Block 0019 [ 60]: 9134ae73ba6a6338 -Block 0019 [ 61]: 55b9202e263576e2 -Block 0019 [ 62]: 5990cb5a6abdf6d4 -Block 0019 [ 63]: 90e9bf1096d341c3 -Block 0019 [ 64]: f1184eee8bf92bad -Block 0019 [ 65]: 11557621833c2667 -Block 0019 [ 66]: 7f4fe41022bbbe8f -Block 0019 [ 67]: 1ce4d6a3f00a45e2 -Block 0019 [ 68]: 4d1176a9d73fbd04 -Block 0019 [ 69]: 348095dd5ec67914 -Block 0019 [ 70]: f68943632a9b36f8 -Block 0019 [ 71]: 39cbd678a2013855 -Block 0019 [ 72]: d480608f385da36a -Block 0019 [ 73]: 543abadc4389aec2 -Block 0019 [ 74]: 4c0781a69dd4e5f0 -Block 0019 [ 75]: d70d0b4684ca6fdb -Block 0019 [ 76]: 9f69a1c7beebf974 -Block 0019 [ 77]: 3cc130fef00c1f6b -Block 0019 [ 78]: be0fcd7716b57997 -Block 0019 [ 79]: 91c8cce70af1d23c -Block 0019 [ 80]: f1780fc4eae113de -Block 0019 [ 81]: 9a650c9f13e21cfa -Block 0019 [ 82]: e2a32a8550f79448 -Block 0019 [ 83]: 45cdb0e228907359 -Block 0019 [ 84]: b12202933f6e041e -Block 0019 [ 85]: 1eb6ce2a66e64ad0 -Block 0019 [ 86]: 0fd90d326844b151 -Block 0019 [ 87]: bc9396831333f0ab -Block 0019 [ 88]: a046b58b763c42e1 -Block 0019 [ 89]: 9794be294b3c7fa1 -Block 0019 [ 90]: 8fe6176456bab7bf -Block 0019 [ 91]: aaa0183d2b59afec -Block 0019 [ 92]: 5fa1d31dacccd5a5 -Block 0019 [ 93]: 7f693802526c4520 -Block 0019 [ 94]: 19d1bb4a4461ea59 -Block 0019 [ 95]: e44b42735431ff9a -Block 0019 [ 96]: f346ac2045974039 -Block 0019 [ 97]: cf1da77245b6a0ad -Block 0019 [ 98]: 5936a6f1553ef342 -Block 0019 [ 99]: 812ddc076e3cb742 -Block 0019 [100]: bfaf4ac38c3e6141 -Block 0019 [101]: 14bb89ac7a67a8dd -Block 0019 [102]: b4f278d441a2b70d -Block 0019 [103]: 81abe3584ea009fa -Block 0019 [104]: 467ccf31d2d0db6f -Block 0019 [105]: 9ad73b369b947213 -Block 0019 [106]: 711dd4a31a270b27 -Block 0019 [107]: be20d05f48a4486a -Block 0019 [108]: 5b9bd8d50bbf51d9 -Block 0019 [109]: 6c761a9911cfe27b -Block 0019 [110]: de7b5c685a3a34d9 -Block 0019 [111]: c16444edde5c6871 -Block 0019 [112]: aee99d1b74c68d6d -Block 0019 [113]: 63cfa31ef288b980 -Block 0019 [114]: acc6f55eefa30a69 -Block 0019 [115]: be177ae1dcf072fc -Block 0019 [116]: e7f163e4b7836001 -Block 0019 [117]: 88a2d20a0a31b8e5 -Block 0019 [118]: ded1724eb03f5ff0 -Block 0019 [119]: c79e0c464b5894d2 -Block 0019 [120]: 6b6dc0b043b95513 -Block 0019 [121]: 0ab3dbe638e144f7 -Block 0019 [122]: 580714872c942d95 -Block 0019 [123]: e2133ff2c9b56f8f -Block 0019 [124]: 3f443e86590b195b -Block 0019 [125]: 9f0df786b9d11a62 -Block 0019 [126]: 6019a3f50eeef5ec -Block 0019 [127]: e3af4457c6c57d74 -Block 0020 [ 0]: 9615c6f04b125822 -Block 0020 [ 1]: bbc6a3cbad09ad63 -Block 0020 [ 2]: 8b33a8b1717ecfcd -Block 0020 [ 3]: d22a3d65e0e5dc56 -Block 0020 [ 4]: 5a9c7f600b17734a -Block 0020 [ 5]: 85f34ac002eaaadf -Block 0020 [ 6]: 19102949a7d35dba -Block 0020 [ 7]: eba5faf3e0c5162b -Block 0020 [ 8]: 8d92b1b1cfd06f92 -Block 0020 [ 9]: ab604d743633ee9d -Block 0020 [ 10]: 68e8508552ac02ca -Block 0020 [ 11]: 8dfb2cd0c8b11294 -Block 0020 [ 12]: b76523dd79a50b15 -Block 0020 [ 13]: 71a9e1dcc57a7e88 -Block 0020 [ 14]: fc3fe755fd7c2f49 -Block 0020 [ 15]: 73021f9dc36ac323 -Block 0020 [ 16]: 470194d113aee51d -Block 0020 [ 17]: 9610e1dfe0fa76e4 -Block 0020 [ 18]: f9650a6fdfa140f2 -Block 0020 [ 19]: bb46922d0495f3db -Block 0020 [ 20]: 637ca17912541ba3 -Block 0020 [ 21]: 8be12ee728df3bbe -Block 0020 [ 22]: 6781d218e518816c -Block 0020 [ 23]: b509d54cc8bc2d47 -Block 0020 [ 24]: cf6dbf9c499ecf06 -Block 0020 [ 25]: 907e1dcbd9445922 -Block 0020 [ 26]: d1cedb9860d7d44a -Block 0020 [ 27]: 4db3e6ea4f8e3939 -Block 0020 [ 28]: 2bd8107671b012dc -Block 0020 [ 29]: 1358200893cc352d -Block 0020 [ 30]: 4076651997b8041d -Block 0020 [ 31]: 99583565d39d102b -Block 0020 [ 32]: 9a369ae3653a4844 -Block 0020 [ 33]: ff517930e12d0fb3 -Block 0020 [ 34]: dfe95097f26f5912 -Block 0020 [ 35]: 347791101536883a -Block 0020 [ 36]: f6ebe0adc5e81a86 -Block 0020 [ 37]: 9ee257ca3cb95b47 -Block 0020 [ 38]: 98960e94bcd4efa8 -Block 0020 [ 39]: d2e3fe76d8616647 -Block 0020 [ 40]: d0b7771e1038c71d -Block 0020 [ 41]: 79746f8f40a842fe -Block 0020 [ 42]: ef76f485c0812c0e -Block 0020 [ 43]: 86a66bc0c07c2b7e -Block 0020 [ 44]: e75b56d4dbdbf024 -Block 0020 [ 45]: 32160a23df550a63 -Block 0020 [ 46]: 3ee01df8c98b32c0 -Block 0020 [ 47]: c77fdff62a8be1e8 -Block 0020 [ 48]: 9af667adde4e0ba0 -Block 0020 [ 49]: 7a82d438193aa28f -Block 0020 [ 50]: ca03ab93813051f7 -Block 0020 [ 51]: 97f07d37bafe132c -Block 0020 [ 52]: 7f27cb32f8866e02 -Block 0020 [ 53]: 1f8a6cf5a6d84fc7 -Block 0020 [ 54]: bfaf83737a01bcd3 -Block 0020 [ 55]: 7fef2c3149a0fef0 -Block 0020 [ 56]: 5674a6a7331b6a6d -Block 0020 [ 57]: 0ca447676d116f6b -Block 0020 [ 58]: 7452d755cd1b15c3 -Block 0020 [ 59]: 5681a228481aaacf -Block 0020 [ 60]: 870185f00101adb1 -Block 0020 [ 61]: 86e2191f974f08b0 -Block 0020 [ 62]: 40bd272e9e289567 -Block 0020 [ 63]: b17bb938155258da -Block 0020 [ 64]: 30718b28f21d46dd -Block 0020 [ 65]: 1cc99b8fc23bb1b5 -Block 0020 [ 66]: 498683869b7ecf4c -Block 0020 [ 67]: 58c22169dae7c96d -Block 0020 [ 68]: 0db1b1f0e729cf2d -Block 0020 [ 69]: 3a9085879af82b40 -Block 0020 [ 70]: 4db5e82575ef9d32 -Block 0020 [ 71]: b9e9488f9b515cfc -Block 0020 [ 72]: 8e81d7de5e6c4782 -Block 0020 [ 73]: a217c7f05630e843 -Block 0020 [ 74]: 1f1e764caf5ff5f9 -Block 0020 [ 75]: 3382e12b81b8fe90 -Block 0020 [ 76]: 74e7c5c8c55662c8 -Block 0020 [ 77]: 6b3d6ef4f0d5127e -Block 0020 [ 78]: 1f5927978da0630d -Block 0020 [ 79]: 3b736b8bd8408bd9 -Block 0020 [ 80]: 0dd0b3b98821f799 -Block 0020 [ 81]: 471755b90a64fcb6 -Block 0020 [ 82]: 50b6ac3114749ac5 -Block 0020 [ 83]: b557c9e857ccaadd -Block 0020 [ 84]: 88a2d12570bfe63d -Block 0020 [ 85]: 053d60a3e450e87c -Block 0020 [ 86]: eeb64921f5670705 -Block 0020 [ 87]: 2b1ec30ab15b52af -Block 0020 [ 88]: 23d5521b1e5f9957 -Block 0020 [ 89]: bd68c9ee34594385 -Block 0020 [ 90]: 8f5595c804b0b0cb -Block 0020 [ 91]: 1f7ca670dbae80e7 -Block 0020 [ 92]: 312d9a3dc213f619 -Block 0020 [ 93]: 917c68959a12da86 -Block 0020 [ 94]: ae6457d11e64ac5a -Block 0020 [ 95]: cf9ae240fcbf42d6 -Block 0020 [ 96]: 80336ea9a3d65f65 -Block 0020 [ 97]: 3b9b55736496fb29 -Block 0020 [ 98]: cdadaf18790a76f5 -Block 0020 [ 99]: 7aa4592b00522b5e -Block 0020 [100]: 27497d630ad191c2 -Block 0020 [101]: 885f2f8a1612535b -Block 0020 [102]: ba18ae7c42139005 -Block 0020 [103]: b3ae5a2310cf6cdf -Block 0020 [104]: b696d851371dda54 -Block 0020 [105]: 0d8026cd41c69440 -Block 0020 [106]: 2c724ccda4cef368 -Block 0020 [107]: 8b5300389120cbe7 -Block 0020 [108]: 63bd3c75a62a6b19 -Block 0020 [109]: a793cba536c65be9 -Block 0020 [110]: 311ca002baeec894 -Block 0020 [111]: e87ee22e79820e40 -Block 0020 [112]: bc3a2f78ed41d5d4 -Block 0020 [113]: d8e475e4faa40234 -Block 0020 [114]: c162560b8adc92d4 -Block 0020 [115]: 91b49d09f4ab3123 -Block 0020 [116]: 20f97e7e634a57f5 -Block 0020 [117]: 215f0e74cdcce539 -Block 0020 [118]: b91ad49b46090a89 -Block 0020 [119]: cff450a937dc6300 -Block 0020 [120]: f2f7cf24f1155489 -Block 0020 [121]: 108b2b71758f3215 -Block 0020 [122]: 620dd7da567e1eeb -Block 0020 [123]: a24dc8baad94e416 -Block 0020 [124]: b0d51a0f0414e089 -Block 0020 [125]: d3cf0eb94293600c -Block 0020 [126]: b64fcb808681de54 -Block 0020 [127]: 971f8b5cdc194991 -Block 0021 [ 0]: 5c7cfb56c8f911b3 -Block 0021 [ 1]: 8b7a71622e11aa73 -Block 0021 [ 2]: 1930406e86ee544b -Block 0021 [ 3]: 2f92752aee9653e5 -Block 0021 [ 4]: 1aa7899289031259 -Block 0021 [ 5]: 9276ab0e19abd61a -Block 0021 [ 6]: 8d97e0abed86d503 -Block 0021 [ 7]: 52102de7a0c2541d -Block 0021 [ 8]: a48fd49a819bc22d -Block 0021 [ 9]: 006985b359e6ef5e -Block 0021 [ 10]: 56bd98e477212867 -Block 0021 [ 11]: 87658890e4136505 -Block 0021 [ 12]: 36fcf1dac078bbe6 -Block 0021 [ 13]: c48fe29b58629a66 -Block 0021 [ 14]: c5e510b7790915b4 -Block 0021 [ 15]: c7915e58bc88b962 -Block 0021 [ 16]: 90c98628841ed410 -Block 0021 [ 17]: b948bf66a81acd79 -Block 0021 [ 18]: 20f00016b577ac52 -Block 0021 [ 19]: c0850950f5518e9e -Block 0021 [ 20]: 9cc22f365c9ce483 -Block 0021 [ 21]: d488a15d4f9a09ba -Block 0021 [ 22]: 671624e35e8524fd -Block 0021 [ 23]: fd9cb7702e5a6a18 -Block 0021 [ 24]: 4f6ceca22c7b8def -Block 0021 [ 25]: 35993124c3429808 -Block 0021 [ 26]: d480f9a34ae79284 -Block 0021 [ 27]: 41de8b418a16a33c -Block 0021 [ 28]: bfe94b084eb4cb62 -Block 0021 [ 29]: 1fc72a96b053ac3e -Block 0021 [ 30]: 1d7602e7c7a72141 -Block 0021 [ 31]: ec35d716ed423ae1 -Block 0021 [ 32]: 1457905f2311c807 -Block 0021 [ 33]: ac633f5403f7f962 -Block 0021 [ 34]: 29e5963ae5cafa7e -Block 0021 [ 35]: 05db765805f482aa -Block 0021 [ 36]: 73b42333acffddf7 -Block 0021 [ 37]: 0c7ff380d6f770be -Block 0021 [ 38]: 71155bb1f4cb4f64 -Block 0021 [ 39]: 35819e4d516ed1f1 -Block 0021 [ 40]: f86a4e927f75c684 -Block 0021 [ 41]: 3b94b76c1cebbc1b -Block 0021 [ 42]: 878bd26f6d680ee1 -Block 0021 [ 43]: c853a628c6a2ae2d -Block 0021 [ 44]: 9eb7a9fd5286ac26 -Block 0021 [ 45]: a71ad3bc763bd705 -Block 0021 [ 46]: 7a809af2e80d6e1c -Block 0021 [ 47]: e60a5368fc2f7dcf -Block 0021 [ 48]: ce424d140d2833d3 -Block 0021 [ 49]: 9e2ca4a277a9bfa7 -Block 0021 [ 50]: b6f56b2368f2b2b0 -Block 0021 [ 51]: 8d2831a80c681111 -Block 0021 [ 52]: efa2a6d6b54b372c -Block 0021 [ 53]: 2795838739598c33 -Block 0021 [ 54]: ad0898ef6e088b20 -Block 0021 [ 55]: 3bb14c01e2d26abb -Block 0021 [ 56]: 3715b7840dd14f3a -Block 0021 [ 57]: 11032380cfb1a4e3 -Block 0021 [ 58]: 657f3aa18721b06a -Block 0021 [ 59]: bbc4e34b1a57036f -Block 0021 [ 60]: bb5aab0086615334 -Block 0021 [ 61]: 243bff40cea40263 -Block 0021 [ 62]: 288a58457b364065 -Block 0021 [ 63]: ff3e5f084e886b5d -Block 0021 [ 64]: 266a88b7fa318607 -Block 0021 [ 65]: 46887c524b47738c -Block 0021 [ 66]: 05a41f5d76a98c33 -Block 0021 [ 67]: 1dfce7882e67acfe -Block 0021 [ 68]: 95d64866745a7c0a -Block 0021 [ 69]: 0ea59084765ae9d5 -Block 0021 [ 70]: 07a516edb29cfaba -Block 0021 [ 71]: 92428aea3ebb55a6 -Block 0021 [ 72]: c04928d77c86f0a6 -Block 0021 [ 73]: 74cfd4f2b2dea2f7 -Block 0021 [ 74]: 9a6e39c49f8b73d3 -Block 0021 [ 75]: 8576b61a109ddcd9 -Block 0021 [ 76]: 3f045563a643b7d3 -Block 0021 [ 77]: 10814c54c69bcc58 -Block 0021 [ 78]: 2a8db338c71915d9 -Block 0021 [ 79]: 4a3586847b1a4453 -Block 0021 [ 80]: 1795ab20987b66e8 -Block 0021 [ 81]: da147943c40a3b65 -Block 0021 [ 82]: 3cb7b96d98a10213 -Block 0021 [ 83]: 334d50efa35837ea -Block 0021 [ 84]: 718a8a5a89adcf22 -Block 0021 [ 85]: d0b88dd56ab65fdd -Block 0021 [ 86]: 20b6f89bc23153b4 -Block 0021 [ 87]: af569b830d970527 -Block 0021 [ 88]: 3284c6e30514ad11 -Block 0021 [ 89]: 5280e13f9029f0f1 -Block 0021 [ 90]: 849811b7dd25f028 -Block 0021 [ 91]: 47cb9f761527d86b -Block 0021 [ 92]: dbeacdc212f2ced3 -Block 0021 [ 93]: d7c78ff536cadd0b -Block 0021 [ 94]: 999673e828c35b56 -Block 0021 [ 95]: f87f792b57afadb9 -Block 0021 [ 96]: 29d82c85eced236d -Block 0021 [ 97]: 21be8a63f2ce3afe -Block 0021 [ 98]: 0dc79d3954446982 -Block 0021 [ 99]: 03ab07ee97d110de -Block 0021 [100]: acfbe4f974bb42f7 -Block 0021 [101]: 72e7650500174416 -Block 0021 [102]: 7d2b4bcd0b45804f -Block 0021 [103]: 3f82fcf386947bcb -Block 0021 [104]: b163d4a6610760bb -Block 0021 [105]: af9dee5e93e1628b -Block 0021 [106]: 78d71f93b81e5bd2 -Block 0021 [107]: 1336842f51e07e6e -Block 0021 [108]: be00ff96ecb0c7c3 -Block 0021 [109]: 949daf9fe70e5259 -Block 0021 [110]: d6e900117f863b9a -Block 0021 [111]: cb81b9f4a8f7297e -Block 0021 [112]: 5c65c123427d7bc3 -Block 0021 [113]: 1fc80884cfa7d639 -Block 0021 [114]: ab653c2ad98fe613 -Block 0021 [115]: f8a76a3b7183e378 -Block 0021 [116]: 5801569adbbec72f -Block 0021 [117]: 5dd8f25c9590a887 -Block 0021 [118]: 61db5e3c40bdef0a -Block 0021 [119]: 5c531abfe2cca2ce -Block 0021 [120]: 415c80196f173bf9 -Block 0021 [121]: a1769093654e290f -Block 0021 [122]: 3dded0331d22ead6 -Block 0021 [123]: 4aa06495cc77fb16 -Block 0021 [124]: ba821eca3ac7e893 -Block 0021 [125]: c3f6d28767c41456 -Block 0021 [126]: d09e98175a49ea3a -Block 0021 [127]: c71b672605fe10b8 -Block 0022 [ 0]: 64fd9b4965b7865c -Block 0022 [ 1]: b318e42646c614ab -Block 0022 [ 2]: b0acf9b55022d714 -Block 0022 [ 3]: 24c8da93562c711c -Block 0022 [ 4]: bc2a6302275eadd4 -Block 0022 [ 5]: 3ad682c508033828 -Block 0022 [ 6]: 1135c30b72574375 -Block 0022 [ 7]: 9f4e3111a45f174b -Block 0022 [ 8]: be83dc96a5b8a4ba -Block 0022 [ 9]: fcfe3ab091aca65a -Block 0022 [ 10]: 9390f7c4351730be -Block 0022 [ 11]: bf604eb636f62cc9 -Block 0022 [ 12]: f98ea9f7e17e70fb -Block 0022 [ 13]: 0b015cd145f26853 -Block 0022 [ 14]: ec9163fa13f74ce7 -Block 0022 [ 15]: 8ff97292d63bcab4 -Block 0022 [ 16]: d3feaf92c2d8b41f -Block 0022 [ 17]: d4566510bd20e7ec -Block 0022 [ 18]: afd8d144692a7f33 -Block 0022 [ 19]: e802522f54f2a988 -Block 0022 [ 20]: ac672a89864152a7 -Block 0022 [ 21]: 186e62c8651dd183 -Block 0022 [ 22]: 6e67bf8aea31dfbb -Block 0022 [ 23]: eb785c9679765811 -Block 0022 [ 24]: cae7b721f9066c1d -Block 0022 [ 25]: 87a4293682a4004f -Block 0022 [ 26]: 96748181c2c3c4fe -Block 0022 [ 27]: 0235a425b2c59625 -Block 0022 [ 28]: 32a9ad0c9ababac2 -Block 0022 [ 29]: a691969d4c8a0c62 -Block 0022 [ 30]: 8fde0adacef37668 -Block 0022 [ 31]: 116793c8d7eafcd9 -Block 0022 [ 32]: 22b38c1b92ffbcb7 -Block 0022 [ 33]: 6676a04278883071 -Block 0022 [ 34]: eb46aaf2e70c8316 -Block 0022 [ 35]: dbf45374f04b815e -Block 0022 [ 36]: 258bee0542c96efa -Block 0022 [ 37]: 907e4f6f7595a8ef -Block 0022 [ 38]: df765a9c4c218eae -Block 0022 [ 39]: 3d0e3375b574edbb -Block 0022 [ 40]: 35f13384a1c995ae -Block 0022 [ 41]: 3d0c667fe013a4a8 -Block 0022 [ 42]: 906807c8d09563b3 -Block 0022 [ 43]: fcc287c6a5bcd77b -Block 0022 [ 44]: 14367a708f16b036 -Block 0022 [ 45]: 4ba57f16db97c8eb -Block 0022 [ 46]: 2f970f37091fa261 -Block 0022 [ 47]: 6f40b4a61829c687 -Block 0022 [ 48]: 8ddbf5fd6a8b8d50 -Block 0022 [ 49]: 4a9338a492c0e4ab -Block 0022 [ 50]: ef65910de5dde029 -Block 0022 [ 51]: f1a5348f27802811 -Block 0022 [ 52]: d5af7a4002abceab -Block 0022 [ 53]: d7e088abfc4201df -Block 0022 [ 54]: 7e0dfe72426c89a4 -Block 0022 [ 55]: fad0116ee37d0d35 -Block 0022 [ 56]: e3ccd23e735c6370 -Block 0022 [ 57]: 14b635dad052af0e -Block 0022 [ 58]: bb4b95c0a662f3e1 -Block 0022 [ 59]: 9e1661bf69498511 -Block 0022 [ 60]: 9d3168e59f1d0ed6 -Block 0022 [ 61]: 054bbfbb6227b9c2 -Block 0022 [ 62]: 108a0be1a3e3437e -Block 0022 [ 63]: 8fd5bde2e8c51242 -Block 0022 [ 64]: ec830719ab04c9b7 -Block 0022 [ 65]: 21e51390f98ca718 -Block 0022 [ 66]: 7739557023bee6fc -Block 0022 [ 67]: 0bfff86bba432124 -Block 0022 [ 68]: 607dbfa6887d1a81 -Block 0022 [ 69]: 13060a984bf13d20 -Block 0022 [ 70]: f65ee280fc34e309 -Block 0022 [ 71]: 58ee7e200095a738 -Block 0022 [ 72]: 18453e4acd4adafe -Block 0022 [ 73]: 3b8541389d26247b -Block 0022 [ 74]: ca21feb22f02fd5e -Block 0022 [ 75]: 09caa3b763337817 -Block 0022 [ 76]: 0a6eb6fc271a194d -Block 0022 [ 77]: d0987e4b0bef2d4e -Block 0022 [ 78]: 4d95ded45c6ba518 -Block 0022 [ 79]: 934a752ae10e8b3c -Block 0022 [ 80]: 0903e0909bdea81b -Block 0022 [ 81]: 3534472f695ad1d7 -Block 0022 [ 82]: fe36851b1f2fe863 -Block 0022 [ 83]: 6a0458fca1095df9 -Block 0022 [ 84]: 17a70572293bad90 -Block 0022 [ 85]: e2a48e238aaddd2f -Block 0022 [ 86]: 3b2f3d364af66648 -Block 0022 [ 87]: b6ccb0a91ca2f8b5 -Block 0022 [ 88]: dfbd598aa7af5d05 -Block 0022 [ 89]: 3dea46fc047d9f8e -Block 0022 [ 90]: f35e090d51415634 -Block 0022 [ 91]: 5c0db506447169f3 -Block 0022 [ 92]: 590d2caff15b9a7f -Block 0022 [ 93]: bd6f691b9249e471 -Block 0022 [ 94]: 2e3c804924a7f4f0 -Block 0022 [ 95]: a370d8fd190c7576 -Block 0022 [ 96]: 88c7b5e26c6ff6b3 -Block 0022 [ 97]: 3e059d97d3e58cf1 -Block 0022 [ 98]: d7b099503b1b2fda -Block 0022 [ 99]: 708462a06022938b -Block 0022 [100]: e9c8ac7db507acaa -Block 0022 [101]: 442d1076e088613c -Block 0022 [102]: 9d7ce0f464ff1b07 -Block 0022 [103]: f63b65ffb38aa005 -Block 0022 [104]: 4b5c0033e9502909 -Block 0022 [105]: 6c773a3cd7b5e4f0 -Block 0022 [106]: 08f1e94be69a4fd6 -Block 0022 [107]: 1c373be886f35eb0 -Block 0022 [108]: b14dc4794c9b8cb1 -Block 0022 [109]: f3fbc1e0f5bb285b -Block 0022 [110]: b2d27593c7a712e4 -Block 0022 [111]: c9dfab152aa78ea7 -Block 0022 [112]: 06fb9ca2a671a544 -Block 0022 [113]: 05c4cd7d6203176f -Block 0022 [114]: b295a9ef3a79401a -Block 0022 [115]: 9451857213b32bbb -Block 0022 [116]: 92eb9750a6bae538 -Block 0022 [117]: 0cb4db498fc3bba0 -Block 0022 [118]: ca36208bf56a1e9c -Block 0022 [119]: 901d87ba10136d72 -Block 0022 [120]: 2cac1b66b391c7c6 -Block 0022 [121]: df54b5eab81b24bf -Block 0022 [122]: d3c88b759a23a4fe -Block 0022 [123]: 4097fe18adbfbc6f -Block 0022 [124]: 47a3bc5614d062a3 -Block 0022 [125]: 7c94001e1a2d2c65 -Block 0022 [126]: 0e80b1921c8637a5 -Block 0022 [127]: 5abc6ef9377e861b -Block 0023 [ 0]: 6f1853c5319f9562 -Block 0023 [ 1]: e2276855409e9046 -Block 0023 [ 2]: 8de58f45d20e98b0 -Block 0023 [ 3]: 67f609324d652b57 -Block 0023 [ 4]: 3a4bb948f39345b9 -Block 0023 [ 5]: 7ef1f641e620643c -Block 0023 [ 6]: 28462ac5919ab4ef -Block 0023 [ 7]: 8f62db1f9b18733c -Block 0023 [ 8]: 31cd7b2ea2476fb1 -Block 0023 [ 9]: 11b9623ab428c965 -Block 0023 [ 10]: 5c2020f5c2fe21de -Block 0023 [ 11]: df5626fef0b5978d -Block 0023 [ 12]: e5345a586ff7176c -Block 0023 [ 13]: 5188b696ebed647f -Block 0023 [ 14]: 7a92ccf8de6e893e -Block 0023 [ 15]: 9dc2f344b4e2c921 -Block 0023 [ 16]: a9b5b02623130ebf -Block 0023 [ 17]: f2ff269b618ba660 -Block 0023 [ 18]: fcf6c01de14de5ce -Block 0023 [ 19]: 2e3457136a7e83fb -Block 0023 [ 20]: 2b61c5171f8159b1 -Block 0023 [ 21]: 14e562091620ae2c -Block 0023 [ 22]: 2c9d26f9a7b5e6d2 -Block 0023 [ 23]: d0cc7ace37891cee -Block 0023 [ 24]: e21b920a63af6535 -Block 0023 [ 25]: b2c622542bd642bb -Block 0023 [ 26]: c6d62b3c28afa5ea -Block 0023 [ 27]: 97e8bb80322d3307 -Block 0023 [ 28]: 39848b62b609a793 -Block 0023 [ 29]: 37b886a95aafbaf3 -Block 0023 [ 30]: cb0cdc116b750327 -Block 0023 [ 31]: 52ab4414c2ac68e7 -Block 0023 [ 32]: bdf682bba57bdedb -Block 0023 [ 33]: 944852982e2c5134 -Block 0023 [ 34]: 18e61b320d8fe09f -Block 0023 [ 35]: 396de631d0da3b9d -Block 0023 [ 36]: 03360f528e36c8aa -Block 0023 [ 37]: 2192278da2fcaeb9 -Block 0023 [ 38]: 9dc55ef7840d826c -Block 0023 [ 39]: 03da781c403b16e8 -Block 0023 [ 40]: a39c8b8a7c670aba -Block 0023 [ 41]: 97493ed7fa5943b4 -Block 0023 [ 42]: 9f2a1463c375c544 -Block 0023 [ 43]: 01be7e591061e086 -Block 0023 [ 44]: d5b3537bd8a31e5f -Block 0023 [ 45]: 9ce6039b063e6265 -Block 0023 [ 46]: df1b651695071d84 -Block 0023 [ 47]: acb5903b1934a4b4 -Block 0023 [ 48]: 35d9e6c2b39909e7 -Block 0023 [ 49]: 64a8b6b286de343e -Block 0023 [ 50]: 2c2de51a549d5b57 -Block 0023 [ 51]: 4867625ed31c0f96 -Block 0023 [ 52]: 9faeae884d5791d8 -Block 0023 [ 53]: 5bdf23a008c25bb1 -Block 0023 [ 54]: d2878f03e4fe900f -Block 0023 [ 55]: 017cd24a913bd254 -Block 0023 [ 56]: e271daebf861cf5b -Block 0023 [ 57]: 75477c84426b8f73 -Block 0023 [ 58]: c96a6bebf91e1a14 -Block 0023 [ 59]: 8e4277cc1fa2ce6b -Block 0023 [ 60]: 68c4a44a97ffba2f -Block 0023 [ 61]: f6c2c2b99f342b8c -Block 0023 [ 62]: 6690a2192de3c87f -Block 0023 [ 63]: 36a0d3497baa7820 -Block 0023 [ 64]: 157f9015c0c7f9f0 -Block 0023 [ 65]: 79e419eb8e807756 -Block 0023 [ 66]: e66cc11ff8aa6f61 -Block 0023 [ 67]: 7e9b408465e7ce4e -Block 0023 [ 68]: 52c6a49a03883386 -Block 0023 [ 69]: f03fb132eebd2045 -Block 0023 [ 70]: cd567beb7556ec86 -Block 0023 [ 71]: 85982ac59523492a -Block 0023 [ 72]: 20ee64cb514ad474 -Block 0023 [ 73]: 4d1c99a6a8c08e4f -Block 0023 [ 74]: 5131c291ea29e9c2 -Block 0023 [ 75]: 6235198630fad95b -Block 0023 [ 76]: 70fe76acb0b18fbd -Block 0023 [ 77]: b206b78ef678c1ba -Block 0023 [ 78]: 56a6db19ae8589e5 -Block 0023 [ 79]: 72cdedfbd94dce70 -Block 0023 [ 80]: 7a50b0bf9fd61a9e -Block 0023 [ 81]: 0c85f95eeb886204 -Block 0023 [ 82]: 816c6be3d15ff55d -Block 0023 [ 83]: 20817fd396239ec1 -Block 0023 [ 84]: d05612a38e22672f -Block 0023 [ 85]: f972bd8da51d6fdf -Block 0023 [ 86]: 20fc3311fd080dd7 -Block 0023 [ 87]: a176747132531fce -Block 0023 [ 88]: 2b22d83144efdc3b -Block 0023 [ 89]: 4f558ac03d6f9bed -Block 0023 [ 90]: 09b7bca775f5d9e2 -Block 0023 [ 91]: d3265666a853a184 -Block 0023 [ 92]: 485da114eaeed42f -Block 0023 [ 93]: 2d4bed5cb24a661c -Block 0023 [ 94]: 2a1ce8bc3865294d -Block 0023 [ 95]: ffa252bb0cd9df9f -Block 0023 [ 96]: 1f5c37a3ccd57245 -Block 0023 [ 97]: 0718e569a201014e -Block 0023 [ 98]: 4bb1602a978086bf -Block 0023 [ 99]: ebbd6e7528af36a9 -Block 0023 [100]: 2b4ab8751bc9fe94 -Block 0023 [101]: 68553e85db3f32b4 -Block 0023 [102]: e31ed80700c9fdbc -Block 0023 [103]: 93afa5f880862c8f -Block 0023 [104]: 4660514a885ff84b -Block 0023 [105]: 19b38d1f248013b6 -Block 0023 [106]: 2e3c39ec54094983 -Block 0023 [107]: 96c1dcf93b6c6f29 -Block 0023 [108]: a683f243ac481cfb -Block 0023 [109]: 309a7c76f0304c9e -Block 0023 [110]: f75b27228b66cac7 -Block 0023 [111]: 8eb73c3b7595d5b9 -Block 0023 [112]: 69bc2ff710baec62 -Block 0023 [113]: 1602ea60ad1ee868 -Block 0023 [114]: 73ba0e151c086ee9 -Block 0023 [115]: 6fadbbbc8e00a7cf -Block 0023 [116]: f238a3ba1b46babc -Block 0023 [117]: dd3d5b22a7f66c81 -Block 0023 [118]: f1d34a91886de3fd -Block 0023 [119]: c1671928190cea58 -Block 0023 [120]: 47174dba3a407fed -Block 0023 [121]: c7ddfc44251d0ed0 -Block 0023 [122]: 72f4f8a5b1cec9ff -Block 0023 [123]: 20999d3b61bc0eb4 -Block 0023 [124]: 0a75094f49d3ad65 -Block 0023 [125]: dc9350409c61baed -Block 0023 [126]: 0fd7037aa67bac99 -Block 0023 [127]: e287e0e42246c7f4 -Block 0024 [ 0]: 0432574fbc9d5dd8 -Block 0024 [ 1]: c204e6cbddc0e513 -Block 0024 [ 2]: bff86a52bbb84772 -Block 0024 [ 3]: a4ad714647a24141 -Block 0024 [ 4]: 306dfb160cb0168b -Block 0024 [ 5]: 103af7fecdc4e474 -Block 0024 [ 6]: dc7c2fbc8418ae2c -Block 0024 [ 7]: f9b9db9b5b00530a -Block 0024 [ 8]: fdd811cc89258674 -Block 0024 [ 9]: c021d74c30791cad -Block 0024 [ 10]: e1e3a2611ee62cdc -Block 0024 [ 11]: b4376209f57ba102 -Block 0024 [ 12]: 485bad429d7a74d1 -Block 0024 [ 13]: 2f00dd21f7cba740 -Block 0024 [ 14]: eeedb2ea7180653e -Block 0024 [ 15]: 21bd09fbe74d0c42 -Block 0024 [ 16]: 1c3cf40409d194b3 -Block 0024 [ 17]: abb803645f3d4eef -Block 0024 [ 18]: 760aeea7a9b5cc3f -Block 0024 [ 19]: 19fae830355800be -Block 0024 [ 20]: 141dba19caf13520 -Block 0024 [ 21]: 8ca23b8f3cd2633e -Block 0024 [ 22]: 78b7a41e4ac99edc -Block 0024 [ 23]: 531d130dcf9774d8 -Block 0024 [ 24]: 837e14d422f7557e -Block 0024 [ 25]: 1a8dbdfb37af6c74 -Block 0024 [ 26]: 134301202c87ec18 -Block 0024 [ 27]: fcbb7a22c5b3df52 -Block 0024 [ 28]: 32f4e44e9fac6b59 -Block 0024 [ 29]: 13ef9cf9aaee02e2 -Block 0024 [ 30]: 80418abbff69af85 -Block 0024 [ 31]: 3fdc185377252bae -Block 0024 [ 32]: 313c10ca6661d457 -Block 0024 [ 33]: 11f9b04c374037ca -Block 0024 [ 34]: 8f318bc97ca0a623 -Block 0024 [ 35]: 25567955504565ab -Block 0024 [ 36]: 94a627d187cb82aa -Block 0024 [ 37]: 6312efdd2a1b6b15 -Block 0024 [ 38]: 578d72ee851807a4 -Block 0024 [ 39]: 0d7ea132d31936ad -Block 0024 [ 40]: 1e7a1b0c13069b01 -Block 0024 [ 41]: 0c0ac3cd3fb22d0e -Block 0024 [ 42]: 0d86238598ac86a4 -Block 0024 [ 43]: 4f8fc85ec52bd436 -Block 0024 [ 44]: 656e06c90e503727 -Block 0024 [ 45]: f879f0a09097b288 -Block 0024 [ 46]: e5de3d1a739a7d89 -Block 0024 [ 47]: c0f9d1fcf2ae3a40 -Block 0024 [ 48]: 5abc3ec589836477 -Block 0024 [ 49]: 2b1b22823ca247b4 -Block 0024 [ 50]: fa725af759926695 -Block 0024 [ 51]: 451275844fc4cee2 -Block 0024 [ 52]: d55319d56a1d94f7 -Block 0024 [ 53]: a013da8d2b0cd1f4 -Block 0024 [ 54]: ed7a84ba49aff786 -Block 0024 [ 55]: 89d502e82eb686b5 -Block 0024 [ 56]: 15952ee29e0e742b -Block 0024 [ 57]: 38bad0e41edf0fda -Block 0024 [ 58]: 0917ac2e67e4abf4 -Block 0024 [ 59]: 3f1d8424ff0b061b -Block 0024 [ 60]: b28a7c092d523671 -Block 0024 [ 61]: 648492402817887a -Block 0024 [ 62]: 98392a38e1d1cb57 -Block 0024 [ 63]: 6c3f7e8f7284210b -Block 0024 [ 64]: fdf9ed8aab0dddee -Block 0024 [ 65]: d7cd3a000a642aa5 -Block 0024 [ 66]: 818c0c07e43eabc2 -Block 0024 [ 67]: 8f0cec21539c9184 -Block 0024 [ 68]: 3290a8bf82fbb054 -Block 0024 [ 69]: 774f9f56cb180482 -Block 0024 [ 70]: 05c93d89441573e2 -Block 0024 [ 71]: 6d909bbec0f2b043 -Block 0024 [ 72]: 9f5fd6cd2e4972ec -Block 0024 [ 73]: 1529c07b366527fc -Block 0024 [ 74]: 046f880c84a32721 -Block 0024 [ 75]: 9ead89d33173d633 -Block 0024 [ 76]: 14db9d8f07af67f7 -Block 0024 [ 77]: 7a39735cb6469f13 -Block 0024 [ 78]: effbe25d83c95cef -Block 0024 [ 79]: 1c13ef9b8127cca1 -Block 0024 [ 80]: 8c6c66bf4007f535 -Block 0024 [ 81]: 0e43774693ab0d9f -Block 0024 [ 82]: ad94f20b17ac7409 -Block 0024 [ 83]: e7fc3a1411454e6c -Block 0024 [ 84]: 1ab8d0b17650a589 -Block 0024 [ 85]: 631bb50d34843850 -Block 0024 [ 86]: e4637482fe3a837b -Block 0024 [ 87]: 4904d626a5376682 -Block 0024 [ 88]: a2f694ab52ba264b -Block 0024 [ 89]: 4665d1ef7c41f849 -Block 0024 [ 90]: b4ea1371947d2810 -Block 0024 [ 91]: 79fb98770f2d912c -Block 0024 [ 92]: 2ce74cabf98919a3 -Block 0024 [ 93]: 762030a596c31be3 -Block 0024 [ 94]: 01f6ec6459e8170f -Block 0024 [ 95]: d43caf792539d9fb -Block 0024 [ 96]: 6100b03b6bede581 -Block 0024 [ 97]: b5524ced6d9dd33f -Block 0024 [ 98]: f7b50e455bcd2eba -Block 0024 [ 99]: fd24d6a38ab51643 -Block 0024 [100]: 35629cf1b450109a -Block 0024 [101]: 1f2304fe412e1390 -Block 0024 [102]: 81c4f114d70aee49 -Block 0024 [103]: cd63c0935c4c8e31 -Block 0024 [104]: 4111632fd7eaa644 -Block 0024 [105]: e4eba60023668c10 -Block 0024 [106]: 1b391550d1793d68 -Block 0024 [107]: f834a1e65bd10e66 -Block 0024 [108]: 04cf3169883c1761 -Block 0024 [109]: 3feb52f056a0ffb3 -Block 0024 [110]: 00b5f30a55a77677 -Block 0024 [111]: a885fd7ce60d83f6 -Block 0024 [112]: d2e107f102334203 -Block 0024 [113]: 3964a70ec5b6cab3 -Block 0024 [114]: b613b663f0093f9f -Block 0024 [115]: 35b11d5e2f64070d -Block 0024 [116]: 97965edbda06083a -Block 0024 [117]: b034b567199107ec -Block 0024 [118]: 95aca8d8108d34a2 -Block 0024 [119]: 02a7090233566f9b -Block 0024 [120]: 67a7495b336b06d2 -Block 0024 [121]: 4281aa7d3ee9611b -Block 0024 [122]: 468dea7a61d1edca -Block 0024 [123]: 238094066657c3fe -Block 0024 [124]: 0e1ab01381100ee6 -Block 0024 [125]: 0f1af8701c31727d -Block 0024 [126]: 9c94844cef907f44 -Block 0024 [127]: 902e335c261a32e7 -Block 0025 [ 0]: 6a33df8f52ad99bf -Block 0025 [ 1]: 1e4738940d06379b -Block 0025 [ 2]: b9f081d1f8243661 -Block 0025 [ 3]: 7df44c97870c6e9d -Block 0025 [ 4]: fbf7eaee7c04aab3 -Block 0025 [ 5]: c625e47ec737f9d4 -Block 0025 [ 6]: dfdb0e81b1004005 -Block 0025 [ 7]: 1bbc61627ecbd467 -Block 0025 [ 8]: 5bddb477803f2e65 -Block 0025 [ 9]: 9027be96a3f42340 -Block 0025 [ 10]: 558c0c7b4e389af7 -Block 0025 [ 11]: 448b3293b8a175b1 -Block 0025 [ 12]: 0a65e5e6cee01e24 -Block 0025 [ 13]: e599d714f1493875 -Block 0025 [ 14]: 0a7f22d619766c70 -Block 0025 [ 15]: fb02933939450b2a -Block 0025 [ 16]: 3f12eff85ecd0b82 -Block 0025 [ 17]: 956e0ca5e3c0c248 -Block 0025 [ 18]: 22ff792f503db151 -Block 0025 [ 19]: 17084ef5418273dc -Block 0025 [ 20]: ce747362530ae619 -Block 0025 [ 21]: 20b416abcb77c071 -Block 0025 [ 22]: deb39aca8d50640b -Block 0025 [ 23]: d31cdd0763cc5c81 -Block 0025 [ 24]: 84a8e613c349b233 -Block 0025 [ 25]: e8bc7a697643f7b5 -Block 0025 [ 26]: 0c36ddfc4171a8f8 -Block 0025 [ 27]: 4dbd968c9d34bed6 -Block 0025 [ 28]: e1d57c69a41636f3 -Block 0025 [ 29]: 766ae46b78df2f2e -Block 0025 [ 30]: 8f8f7f5a4c864ab9 -Block 0025 [ 31]: 878f468c99598ee7 -Block 0025 [ 32]: c4352b3d5e7b6a9f -Block 0025 [ 33]: b09e084d0f9e7188 -Block 0025 [ 34]: 2f9356019d974131 -Block 0025 [ 35]: 648b17019e5e2026 -Block 0025 [ 36]: fc5d8f769a45c489 -Block 0025 [ 37]: 02622e6a0de5e763 -Block 0025 [ 38]: ed36ab59ab7f18b8 -Block 0025 [ 39]: 4a7b050e74b8645f -Block 0025 [ 40]: 7221af6a190edb2a -Block 0025 [ 41]: b3f8f1aec73b76e7 -Block 0025 [ 42]: 0c8a615a280f8d8f -Block 0025 [ 43]: a46ec28c5ad8b7e2 -Block 0025 [ 44]: f038bfe29ade127b -Block 0025 [ 45]: 463ebb4801f169eb -Block 0025 [ 46]: 393b89ae6915a527 -Block 0025 [ 47]: 4c9de27e93368fcf -Block 0025 [ 48]: 476798d8e490924a -Block 0025 [ 49]: 58dd5a5031d795fb -Block 0025 [ 50]: 7c2b0b7e8ac62762 -Block 0025 [ 51]: c14ec516db75e3ce -Block 0025 [ 52]: 809ef653b7973236 -Block 0025 [ 53]: 6d0c17627f8457d0 -Block 0025 [ 54]: 5e4c5707ec7a312a -Block 0025 [ 55]: 10cc52c802e38f2a -Block 0025 [ 56]: 53832930d7f99e6f -Block 0025 [ 57]: e87111500e7eaf61 -Block 0025 [ 58]: 201807f71790abb0 -Block 0025 [ 59]: 6654a2ef4dbadf77 -Block 0025 [ 60]: abc3f86ab105500c -Block 0025 [ 61]: d5e670d24870e38a -Block 0025 [ 62]: 73df25444586e7e5 -Block 0025 [ 63]: 3604c5115f172cd6 -Block 0025 [ 64]: 3ea3445257cc3d20 -Block 0025 [ 65]: 0bf5afbad73b5237 -Block 0025 [ 66]: daf94be6af7bf1a0 -Block 0025 [ 67]: 370dde956abb776e -Block 0025 [ 68]: 802bd2a5fa2661e7 -Block 0025 [ 69]: ae052a4ce269f03c -Block 0025 [ 70]: d6ca5a4ac9dd3989 -Block 0025 [ 71]: ef2f6fe0822d0e9d -Block 0025 [ 72]: 0f28e85470f7823a -Block 0025 [ 73]: 241bf3e44e28ec45 -Block 0025 [ 74]: f304a89cb0cc1ae4 -Block 0025 [ 75]: 1967071e8d5f3958 -Block 0025 [ 76]: 15f52e78a9be5e6f -Block 0025 [ 77]: 36eb08b3e5658be2 -Block 0025 [ 78]: d4cf1ad4b5a79ed1 -Block 0025 [ 79]: fd4e0abe38be5444 -Block 0025 [ 80]: 297b66d84318d18b -Block 0025 [ 81]: 49b339bf3e8d42f0 -Block 0025 [ 82]: f282d4d78d5450c8 -Block 0025 [ 83]: 0064797664727d25 -Block 0025 [ 84]: ccbc9790b4fd936f -Block 0025 [ 85]: 15ac480e2508669b -Block 0025 [ 86]: fea4af22a8cb5003 -Block 0025 [ 87]: 1b4b21e63b6e9cda -Block 0025 [ 88]: 47e39f00b6418d15 -Block 0025 [ 89]: 33cab571c1aa93fc -Block 0025 [ 90]: 4fdadc07cc36e16d -Block 0025 [ 91]: bcf8cbe2a449f361 -Block 0025 [ 92]: b180fbeff2434f3d -Block 0025 [ 93]: 450472dcb53e8d52 -Block 0025 [ 94]: 51a5bdfc173ca0c6 -Block 0025 [ 95]: eba8b59eedcfe0f9 -Block 0025 [ 96]: fbe4510c8c404a78 -Block 0025 [ 97]: 0ed380b414a806e8 -Block 0025 [ 98]: a601ac4334f312b4 -Block 0025 [ 99]: 4c3df8d16dcc6031 -Block 0025 [100]: a9ee4854b8c57d47 -Block 0025 [101]: abebcdf52911dca8 -Block 0025 [102]: 6099abea1e246362 -Block 0025 [103]: f5f62963254c90d9 -Block 0025 [104]: 6fbbb44ecb8ac43c -Block 0025 [105]: 6a1ed1569ec8b87e -Block 0025 [106]: 4ae870e93ab864c3 -Block 0025 [107]: 0f2d84f09dd60efd -Block 0025 [108]: 5d2f346e77e5f9aa -Block 0025 [109]: 6ee2faa370274d62 -Block 0025 [110]: c7ef7e1d468fafae -Block 0025 [111]: 45b5d7078557dfed -Block 0025 [112]: 1df7503c1707885b -Block 0025 [113]: cf4db59f80be2658 -Block 0025 [114]: d075daea15b69025 -Block 0025 [115]: d46e2b1666564126 -Block 0025 [116]: b20de022658b0937 -Block 0025 [117]: 5bbdd8ea5ac84fdc -Block 0025 [118]: d11604e8a302ef3d -Block 0025 [119]: b7989bb11e8896fe -Block 0025 [120]: cd1a256af97a7065 -Block 0025 [121]: 3be04657757ea2c6 -Block 0025 [122]: 2bf0875d14cfb3fe -Block 0025 [123]: 7a17400be50e0372 -Block 0025 [124]: cfb3e6c1c5b72e4e -Block 0025 [125]: 51f1f3f96adc1d38 -Block 0025 [126]: cb6895cf3808177e -Block 0025 [127]: c372ac9e2280b766 -Block 0026 [ 0]: d4644b09c003253e -Block 0026 [ 1]: 12f7dd4cf4963e9f -Block 0026 [ 2]: 475ce25005e2660c -Block 0026 [ 3]: 0ee5d9d17575e7a5 -Block 0026 [ 4]: bff637afde37cda0 -Block 0026 [ 5]: 652429dbc2fffdfb -Block 0026 [ 6]: 0d600cbf7fdb1a88 -Block 0026 [ 7]: 49d337d8aa97c307 -Block 0026 [ 8]: 753808c8f5df9e29 -Block 0026 [ 9]: 70d05d603f8072fc -Block 0026 [ 10]: 3e38c9a4da895bb4 -Block 0026 [ 11]: 75173dd8ccb661b9 -Block 0026 [ 12]: 1f0fa6398c2162f5 -Block 0026 [ 13]: 905141a22ebf8360 -Block 0026 [ 14]: a070815d16d7cc44 -Block 0026 [ 15]: b2e0243bca0b9076 -Block 0026 [ 16]: f2da1f4202bfdd0d -Block 0026 [ 17]: 29c4deffd4129b54 -Block 0026 [ 18]: 053ffdde9e7578a3 -Block 0026 [ 19]: 93d82106bf559278 -Block 0026 [ 20]: d0c048e1c812fb7e -Block 0026 [ 21]: 8a60d0a5eba8b872 -Block 0026 [ 22]: 93a6956d1f540594 -Block 0026 [ 23]: 68d6c2c6d0cc49dc -Block 0026 [ 24]: 24add3c074371dee -Block 0026 [ 25]: 98425302f639d739 -Block 0026 [ 26]: b0f100a24e4e3c5c -Block 0026 [ 27]: f04de3ee7d7b230f -Block 0026 [ 28]: eebe1a10cc7a109a -Block 0026 [ 29]: 286d1aa98409a5a9 -Block 0026 [ 30]: 998eb27d9099fab7 -Block 0026 [ 31]: 782979936291e152 -Block 0026 [ 32]: f6e7a458a0dd3f32 -Block 0026 [ 33]: 1eee46fd1322e250 -Block 0026 [ 34]: d3be4374c23bb5a3 -Block 0026 [ 35]: 36a7f2642043491f -Block 0026 [ 36]: 0d8bb89da3a2d8c3 -Block 0026 [ 37]: 92a7d48e3745a5f8 -Block 0026 [ 38]: 02d855e4fddf98c3 -Block 0026 [ 39]: 3bd76c9b741fc555 -Block 0026 [ 40]: 9a58c2c02a3e8bb0 -Block 0026 [ 41]: 0d5587098b39ec0b -Block 0026 [ 42]: 0573c24e48f0c8e1 -Block 0026 [ 43]: 124716b689c0b68e -Block 0026 [ 44]: e71a1a03bbb1d432 -Block 0026 [ 45]: dfec9f9aa29448dc -Block 0026 [ 46]: 96e73736125c28ef -Block 0026 [ 47]: 389e19fca6820912 -Block 0026 [ 48]: db4a9c13301cb73d -Block 0026 [ 49]: 64b8097bc2acee2e -Block 0026 [ 50]: 6f13f445b46f092f -Block 0026 [ 51]: 2ca17f8ca1d0c9f0 -Block 0026 [ 52]: ad6814b85cdc3d75 -Block 0026 [ 53]: a2e9688b5c45d0b6 -Block 0026 [ 54]: 13b9954b1eff332f -Block 0026 [ 55]: bfb42ee6c61c2332 -Block 0026 [ 56]: 84b305a26d7d025a -Block 0026 [ 57]: d3b86917d5344169 -Block 0026 [ 58]: 309d160aaf7f21ee -Block 0026 [ 59]: 3a613153a6461ad3 -Block 0026 [ 60]: 6289de5bb1473da6 -Block 0026 [ 61]: 2931e93ed65c9c23 -Block 0026 [ 62]: de5613d1dd794cb5 -Block 0026 [ 63]: 45348e49103c2238 -Block 0026 [ 64]: d75eb060ca91922b -Block 0026 [ 65]: 3e841a14d2279025 -Block 0026 [ 66]: cfe5bf05de6129e7 -Block 0026 [ 67]: cc13a37b4b7fdbd4 -Block 0026 [ 68]: 2cfc21d2a742ed01 -Block 0026 [ 69]: 48358561341ccf61 -Block 0026 [ 70]: 7bac9e21d22b5d0b -Block 0026 [ 71]: 3d4f67f5dd597ce2 -Block 0026 [ 72]: 4b3dece6f7e0b1ee -Block 0026 [ 73]: 821441b39b6550ed -Block 0026 [ 74]: 0e7ad63d6847df36 -Block 0026 [ 75]: d5b6800ce41af41a -Block 0026 [ 76]: 2ab97c68612fe7e6 -Block 0026 [ 77]: 6e1c48f0697fe866 -Block 0026 [ 78]: d91966706c816313 -Block 0026 [ 79]: c270124d3ba5d069 -Block 0026 [ 80]: 3b98e12b91834469 -Block 0026 [ 81]: 921de3f47bb28efa -Block 0026 [ 82]: a9ffcbbefa055af8 -Block 0026 [ 83]: fc739c1f52d29c26 -Block 0026 [ 84]: 51c10952e7468dfa -Block 0026 [ 85]: b36cda035eedcfca -Block 0026 [ 86]: 9345c125f02e59cd -Block 0026 [ 87]: 77c8410841bf9f1b -Block 0026 [ 88]: 45ebed6372f51109 -Block 0026 [ 89]: bde310d799c65859 -Block 0026 [ 90]: f6751c32b3de8aa5 -Block 0026 [ 91]: bfd9e8b6ec61500d -Block 0026 [ 92]: 3878727b18396b95 -Block 0026 [ 93]: c44e906a21a72ae0 -Block 0026 [ 94]: 0709e625a56972cd -Block 0026 [ 95]: 02e1c37389617f94 -Block 0026 [ 96]: be53ee0cd959341d -Block 0026 [ 97]: 149d1af43d748caa -Block 0026 [ 98]: 68a219dd25c29566 -Block 0026 [ 99]: a865c2b5613af47b -Block 0026 [100]: 926200d4e41c8575 -Block 0026 [101]: 66c9d78f346bddd6 -Block 0026 [102]: 8ca35ac9bc3429c0 -Block 0026 [103]: 5f6e6c772d04c958 -Block 0026 [104]: 6876462dcbd7cf6e -Block 0026 [105]: dc96acd154a932e8 -Block 0026 [106]: 169dd1dfed20ede8 -Block 0026 [107]: 427e326fc5947488 -Block 0026 [108]: d1f9248337185dd5 -Block 0026 [109]: ef948dfb4d3cfe6f -Block 0026 [110]: 7c3b1733fa34d810 -Block 0026 [111]: 4f3678050ba9b9a5 -Block 0026 [112]: 6d2b0ab3102f5e0c -Block 0026 [113]: 1b129019ac99b656 -Block 0026 [114]: 61b7cb5bf8d5bfe6 -Block 0026 [115]: 8a9962b673ceb4bd -Block 0026 [116]: 266264ff1a486ee8 -Block 0026 [117]: e9bae0cc052322f2 -Block 0026 [118]: 264fdf5a1384c5a3 -Block 0026 [119]: 0da1f3a192b8f17d -Block 0026 [120]: ab5b52630aee7555 -Block 0026 [121]: e1c6aca80af029b7 -Block 0026 [122]: 7faad66596f50406 -Block 0026 [123]: 0afb5266837fc857 -Block 0026 [124]: 49836a76ba3f17f5 -Block 0026 [125]: a4f2be896b9a7faa -Block 0026 [126]: 896d8796bedac776 -Block 0026 [127]: 54c0cec184484beb -Block 0027 [ 0]: f61ccbc977a56f2a -Block 0027 [ 1]: 16a2fc666566d811 -Block 0027 [ 2]: dbdcef27043ee92c -Block 0027 [ 3]: 7bf75d5f65e78a65 -Block 0027 [ 4]: 0a15def59f31c142 -Block 0027 [ 5]: 831022f386d0b2a2 -Block 0027 [ 6]: 932e0543e746b58a -Block 0027 [ 7]: 496766ab72544725 -Block 0027 [ 8]: 355cfe19f9116a8d -Block 0027 [ 9]: 88d0d1a1d56bef94 -Block 0027 [ 10]: 3d19de35a7a14699 -Block 0027 [ 11]: ae51010a38de2ffd -Block 0027 [ 12]: 801daa838f87964a -Block 0027 [ 13]: 07b4368ee07db13d -Block 0027 [ 14]: 50b5f86bff7d4ab8 -Block 0027 [ 15]: 9df3735a949255bd -Block 0027 [ 16]: a8f2cb1fccf4258e -Block 0027 [ 17]: b78d1707330d5940 -Block 0027 [ 18]: 22e52dec13656ede -Block 0027 [ 19]: d9169565e082d981 -Block 0027 [ 20]: 9201b66dd9cc75df -Block 0027 [ 21]: de3b5b1d58b0a378 -Block 0027 [ 22]: ac99bd46131880bc -Block 0027 [ 23]: 8ba435f5db7fd1a1 -Block 0027 [ 24]: bd66ac15d4312fd7 -Block 0027 [ 25]: d6ded2fbdcf07f22 -Block 0027 [ 26]: ffdd843379defc18 -Block 0027 [ 27]: 175c1d853ab71b75 -Block 0027 [ 28]: aa2852e60c337b14 -Block 0027 [ 29]: 4b653b3ba64d4260 -Block 0027 [ 30]: c87559ba9bdc7d9d -Block 0027 [ 31]: 269034d8bf7b97f2 -Block 0027 [ 32]: bc6aa987a9a62dae -Block 0027 [ 33]: 90d49b0713c77323 -Block 0027 [ 34]: c48082b5b4a54927 -Block 0027 [ 35]: 51b5179740948ce8 -Block 0027 [ 36]: a68528d3e9f7ec4d -Block 0027 [ 37]: d4ffa0faa6cc3e32 -Block 0027 [ 38]: e1a43960e3fe86e0 -Block 0027 [ 39]: 9ed0c70304b2b51c -Block 0027 [ 40]: b89813269c079a30 -Block 0027 [ 41]: 8feb1556e23194f2 -Block 0027 [ 42]: bd439d3c8324dd8f -Block 0027 [ 43]: 647365a561b4f90d -Block 0027 [ 44]: d112b5668642c8d7 -Block 0027 [ 45]: fedfa6bc506a5cca -Block 0027 [ 46]: 8f3a47e825ac7e6e -Block 0027 [ 47]: 5974748b49bf0f5b -Block 0027 [ 48]: d1712b6d08e1775e -Block 0027 [ 49]: 7d63514c4c7b44e7 -Block 0027 [ 50]: d276fe180222463a -Block 0027 [ 51]: d409b7d46cbb8991 -Block 0027 [ 52]: c8bde5ae23928e0c -Block 0027 [ 53]: 257f8a112f710427 -Block 0027 [ 54]: 99307b3d2515b0b5 -Block 0027 [ 55]: 56f7bffe335d7bdb -Block 0027 [ 56]: 36bcfee53e19166b -Block 0027 [ 57]: f4ec1ab9701e3895 -Block 0027 [ 58]: 1c5df9cda8fc7cd6 -Block 0027 [ 59]: fb688c2afeeaa596 -Block 0027 [ 60]: 50b6afe08a28dafb -Block 0027 [ 61]: 64ab62e27c9d676d -Block 0027 [ 62]: 573e46f4f67708fb -Block 0027 [ 63]: 63659fcb0d92a75b -Block 0027 [ 64]: 51f92b0593c5b597 -Block 0027 [ 65]: 3f9a9f503844da60 -Block 0027 [ 66]: 2784db967aa7752a -Block 0027 [ 67]: 83f1a4885aba587c -Block 0027 [ 68]: c736f3d979e01d86 -Block 0027 [ 69]: 838c3a38d5df2224 -Block 0027 [ 70]: f5101255016d63fa -Block 0027 [ 71]: 6a2d21ac3cdb4216 -Block 0027 [ 72]: 5dfdfc52471007a6 -Block 0027 [ 73]: 8e0494b3ae831e6e -Block 0027 [ 74]: 0ca49adfe68d6e46 -Block 0027 [ 75]: e212b64996b824ec -Block 0027 [ 76]: 3bf7a8b725b94547 -Block 0027 [ 77]: 0c70cff5245765dc -Block 0027 [ 78]: b02efdf665ad2ce7 -Block 0027 [ 79]: add07405dc8f4bbb -Block 0027 [ 80]: 58bdb3ce3fa596ce -Block 0027 [ 81]: f46e119a901ef320 -Block 0027 [ 82]: 3d9b2c5765e6a815 -Block 0027 [ 83]: 8bc0e93794000096 -Block 0027 [ 84]: 3f2ef8e5cc121cf8 -Block 0027 [ 85]: 9c16d0dcf88aa1e4 -Block 0027 [ 86]: d12ace2887043640 -Block 0027 [ 87]: c8264013644d8e79 -Block 0027 [ 88]: 30e6157603308b2e -Block 0027 [ 89]: 5e5f2fe403cf044e -Block 0027 [ 90]: ccbad96f2d1ab536 -Block 0027 [ 91]: b036220cbfe7a195 -Block 0027 [ 92]: d80a67932c54111f -Block 0027 [ 93]: c3d187db6e9107e0 -Block 0027 [ 94]: 753b5db43665d4b8 -Block 0027 [ 95]: db0ff374dbaa1a09 -Block 0027 [ 96]: 514410f945dd118f -Block 0027 [ 97]: 57be8156f07071d6 -Block 0027 [ 98]: 20831c61b0b1efb2 -Block 0027 [ 99]: 66ffa9cc28cb58df -Block 0027 [100]: 5277e5ed3417bb29 -Block 0027 [101]: 74cd388100954b51 -Block 0027 [102]: 3f77adb63994e9cc -Block 0027 [103]: b114e4175adb6f67 -Block 0027 [104]: 584c55bf7efe2059 -Block 0027 [105]: f761b03aca13740b -Block 0027 [106]: f43ef2edb5b1c54f -Block 0027 [107]: f79c3eb23dbfc248 -Block 0027 [108]: 81cd4a75d42e1e27 -Block 0027 [109]: 3166561195b94ac4 -Block 0027 [110]: 826f483d5befa9ee -Block 0027 [111]: 1d9d8e376a6f48b8 -Block 0027 [112]: 25017bc5b9a0dd4c -Block 0027 [113]: 15f0fbf1e2f697ce -Block 0027 [114]: 9418301b7413dc13 -Block 0027 [115]: 6d4eb8ca015f7bd9 -Block 0027 [116]: 55cf81dd7bf59dab -Block 0027 [117]: 3acfb1bf664fac56 -Block 0027 [118]: 998d482b2c6fafff -Block 0027 [119]: ba9136aaac2f7dd8 -Block 0027 [120]: 3c057d31fb558e0e -Block 0027 [121]: c6b8fa4d73cfe12f -Block 0027 [122]: 4afd2610bce623fc -Block 0027 [123]: 8735afac2aef1c73 -Block 0027 [124]: d10aa2652a6b0eda -Block 0027 [125]: 66f953bde6d06ea7 -Block 0027 [126]: 39652bf53e0ee8e6 -Block 0027 [127]: 89a6db078ffde367 -Block 0028 [ 0]: 088aac2c3857a577 -Block 0028 [ 1]: a0b6fed09124ac4b -Block 0028 [ 2]: 362ffa99f02943c9 -Block 0028 [ 3]: 642585817f143c4a -Block 0028 [ 4]: 208cdb81bd9b3d70 -Block 0028 [ 5]: 0e8678f22bebe281 -Block 0028 [ 6]: f1c23f381e42bffe -Block 0028 [ 7]: 80239e3f68f08461 -Block 0028 [ 8]: a1a3854533eff47b -Block 0028 [ 9]: cef9e5e06b8f5d1c -Block 0028 [ 10]: 4b500e643d6e2a75 -Block 0028 [ 11]: cd40cd86e0c473d1 -Block 0028 [ 12]: a0f5a6551cf8b3a5 -Block 0028 [ 13]: 966f11064e299e87 -Block 0028 [ 14]: eb918189c4486e01 -Block 0028 [ 15]: c52bd0d591f11524 -Block 0028 [ 16]: d85699f0dd4d09cb -Block 0028 [ 17]: a998379519b903d2 -Block 0028 [ 18]: 8233976a1289a10d -Block 0028 [ 19]: a908225bc32e5bbb -Block 0028 [ 20]: b783103dd9dbcc87 -Block 0028 [ 21]: e179ccd6917bcd5c -Block 0028 [ 22]: ddca54948b1a3d91 -Block 0028 [ 23]: 02bd15a442b61f38 -Block 0028 [ 24]: f9a5a27a56dd5c77 -Block 0028 [ 25]: d1922e84331e4a15 -Block 0028 [ 26]: 0968424d0a903155 -Block 0028 [ 27]: fbb63f95b1027d55 -Block 0028 [ 28]: 9b1be6806db0be87 -Block 0028 [ 29]: b21ddfd09c727934 -Block 0028 [ 30]: 0d277d7fe3649aa5 -Block 0028 [ 31]: dae278bdc8f4e2c0 -Block 0028 [ 32]: 709a6d6c85fa293e -Block 0028 [ 33]: a842ba1029339035 -Block 0028 [ 34]: 168829ae6706aa0a -Block 0028 [ 35]: 3f984a5e4fdb2013 -Block 0028 [ 36]: adbe084b6c4dcc9a -Block 0028 [ 37]: 9700c392f4b4bf99 -Block 0028 [ 38]: a35e4e093e46bda8 -Block 0028 [ 39]: dc1d5c11087128cb -Block 0028 [ 40]: 6a88231cbb42f9ef -Block 0028 [ 41]: b06b59352d903657 -Block 0028 [ 42]: dd2d0e40b3c26c89 -Block 0028 [ 43]: 52394f18a73620fa -Block 0028 [ 44]: c4549f455acd5498 -Block 0028 [ 45]: 9a84a37bebc72e51 -Block 0028 [ 46]: 9ab08cb35b3a30b0 -Block 0028 [ 47]: bb110b5dbe5976d9 -Block 0028 [ 48]: ba0bbf9ea786754d -Block 0028 [ 49]: 13b07b4afb7dcee3 -Block 0028 [ 50]: fa94d4c9fcc3234d -Block 0028 [ 51]: 5adba4b8489fc0e2 -Block 0028 [ 52]: 1c0b608a49d31305 -Block 0028 [ 53]: 1ed3c3c41a036183 -Block 0028 [ 54]: f0f0b7a20ef30fb0 -Block 0028 [ 55]: 3303b0304d01be85 -Block 0028 [ 56]: f1c10f3b34586772 -Block 0028 [ 57]: 37bf3b20abe148dd -Block 0028 [ 58]: 08dd78d309816e36 -Block 0028 [ 59]: 606df5b9c82c35fa -Block 0028 [ 60]: a93bcb45203e4766 -Block 0028 [ 61]: 18e782252b192fe5 -Block 0028 [ 62]: a5b432fe27b22a6b -Block 0028 [ 63]: 815befa4dbfb304c -Block 0028 [ 64]: 44b8a91d7d1945c3 -Block 0028 [ 65]: 5fe76cf485a03ea3 -Block 0028 [ 66]: 6d39d90222a44ea5 -Block 0028 [ 67]: 5b6a2edd580ba743 -Block 0028 [ 68]: 440f7c6240bb750a -Block 0028 [ 69]: d2b85d4e3d80d7a3 -Block 0028 [ 70]: 4d28137d3f7ded74 -Block 0028 [ 71]: de28ddfce56388df -Block 0028 [ 72]: a2108b11c471e2d4 -Block 0028 [ 73]: 4298b69f391e4244 -Block 0028 [ 74]: ac65036956570a74 -Block 0028 [ 75]: c45a698f324c1be7 -Block 0028 [ 76]: 89bde3ac62e3798f -Block 0028 [ 77]: 9b5ba6bd4a39a824 -Block 0028 [ 78]: 06a98f7479d97126 -Block 0028 [ 79]: 9fb5f80568d1e565 -Block 0028 [ 80]: 25da5865646da062 -Block 0028 [ 81]: 056993803daee9e4 -Block 0028 [ 82]: d79b510e6a2497ad -Block 0028 [ 83]: e57cccea49ab9d2e -Block 0028 [ 84]: 0573cd7a8a9f686b -Block 0028 [ 85]: e0bdb3957003d683 -Block 0028 [ 86]: 4cf9e311e9eb0697 -Block 0028 [ 87]: 1de23f2b155fa2c6 -Block 0028 [ 88]: 713f6f60a9ac9366 -Block 0028 [ 89]: 40660511f45d715c -Block 0028 [ 90]: 3d044bc452be348e -Block 0028 [ 91]: b1a3d26f9109e36c -Block 0028 [ 92]: b70831d9b9ad1111 -Block 0028 [ 93]: 45df8d4fca891faa -Block 0028 [ 94]: d71dac9055088d48 -Block 0028 [ 95]: 13a504472229514e -Block 0028 [ 96]: 8d8bd291fe868bfd -Block 0028 [ 97]: 1f66d37590815231 -Block 0028 [ 98]: b859beb049bd4b66 -Block 0028 [ 99]: 89829ed4ffb5170b -Block 0028 [100]: 52e8375395a467d7 -Block 0028 [101]: dcca6c6931e8cdde -Block 0028 [102]: 00f90463fbd8fc5a -Block 0028 [103]: 0a5f42e01c5b667b -Block 0028 [104]: e46cf47f24bedf8e -Block 0028 [105]: 034b1dd0073689d1 -Block 0028 [106]: a612861d03331e5f -Block 0028 [107]: 68ac52c319095484 -Block 0028 [108]: 350bc6c86e048311 -Block 0028 [109]: c1ae658f7f8af644 -Block 0028 [110]: 3c4c6ec5e982d732 -Block 0028 [111]: 3a7dea9db1cf7e6f -Block 0028 [112]: a00f6c189a25561f -Block 0028 [113]: d705eb5c682176f3 -Block 0028 [114]: 8195aed15af503da -Block 0028 [115]: 6ea0bc3009ae67b9 -Block 0028 [116]: bb40bd941cefcc70 -Block 0028 [117]: 60f5cc6a11061338 -Block 0028 [118]: 51e2aef2ef59d60e -Block 0028 [119]: b70676b31c174219 -Block 0028 [120]: 6a2ba18907524637 -Block 0028 [121]: 9d7c64aefab310f4 -Block 0028 [122]: 997067b75f51b90e -Block 0028 [123]: dc3bfa47e95a49a6 -Block 0028 [124]: eaec533ed804b5b7 -Block 0028 [125]: 5547101d57e37aef -Block 0028 [126]: 799dfdd22151025a -Block 0028 [127]: 90cc16f473dba724 -Block 0029 [ 0]: 572f1144c32f7dab -Block 0029 [ 1]: c31548f5a66c3fb6 -Block 0029 [ 2]: ca490b90ff80f8de -Block 0029 [ 3]: b146116df806ef35 -Block 0029 [ 4]: 6d600a5153b6a469 -Block 0029 [ 5]: 2da404efd679d833 -Block 0029 [ 6]: dbeb8ec42cc45f9e -Block 0029 [ 7]: 88739fea24e59cca -Block 0029 [ 8]: ca9ff1be0ebab86c -Block 0029 [ 9]: 7cdd3f4397352ced -Block 0029 [ 10]: e41b1f1cf69b0cc6 -Block 0029 [ 11]: 7e8932d1c89a6ed9 -Block 0029 [ 12]: 046c06abfd2f94e4 -Block 0029 [ 13]: 2a9fdb55d946d935 -Block 0029 [ 14]: 1eb8f81ae510e952 -Block 0029 [ 15]: 081ea3edc46f7990 -Block 0029 [ 16]: f189d1aa25714359 -Block 0029 [ 17]: 2614f7d8b82ca013 -Block 0029 [ 18]: 58787f4689125662 -Block 0029 [ 19]: 1e9f16c6744d5785 -Block 0029 [ 20]: 171cf29f14bcee0c -Block 0029 [ 21]: 9bdbd58787ca6a0c -Block 0029 [ 22]: 375d6ea49ab671d6 -Block 0029 [ 23]: 2ccefc0df4a3db19 -Block 0029 [ 24]: 5e2503088efa948f -Block 0029 [ 25]: a78105b291f531e6 -Block 0029 [ 26]: 418f0c8f58232cfa -Block 0029 [ 27]: bb3151e53430f7c0 -Block 0029 [ 28]: c080596a5a33fdc0 -Block 0029 [ 29]: ab40cbac0a446b74 -Block 0029 [ 30]: a4d39e0180a840d8 -Block 0029 [ 31]: e486a9d4701353a1 -Block 0029 [ 32]: 1980896626f0214c -Block 0029 [ 33]: 5e2b407a0b8452aa -Block 0029 [ 34]: 0ff5680993263bea -Block 0029 [ 35]: d8f68bc617df56c1 -Block 0029 [ 36]: 7a09a3bc6e3f2115 -Block 0029 [ 37]: 3de17c917e933d70 -Block 0029 [ 38]: 7d5f24bffa2f5bb0 -Block 0029 [ 39]: 28dbfce634746d88 -Block 0029 [ 40]: 378806628dd28ec9 -Block 0029 [ 41]: 531568e58a28c770 -Block 0029 [ 42]: 31228f6199722c5a -Block 0029 [ 43]: 1ed5d3b9e627c8c4 -Block 0029 [ 44]: 608a0a1d3af68c46 -Block 0029 [ 45]: 973dcfd310312d48 -Block 0029 [ 46]: 813e441942018cb7 -Block 0029 [ 47]: 13dc1955ca36589b -Block 0029 [ 48]: 7e5ead81cdeda257 -Block 0029 [ 49]: 0f4367bbc560ef51 -Block 0029 [ 50]: 5dc3771d1decf53d -Block 0029 [ 51]: cfbec72c90933cf2 -Block 0029 [ 52]: c1a6158ea9e320aa -Block 0029 [ 53]: 33c06d86c91ed670 -Block 0029 [ 54]: 85467d056d9b4f04 -Block 0029 [ 55]: 4a039fca79da2fb7 -Block 0029 [ 56]: d3b862a69ea8455a -Block 0029 [ 57]: 8df2d2a5ef2884d2 -Block 0029 [ 58]: ded0120bb11702e2 -Block 0029 [ 59]: 7c9c6143da42a5a2 -Block 0029 [ 60]: 8f5e253428b8c855 -Block 0029 [ 61]: 5bf874199625330c -Block 0029 [ 62]: b93ce12a653f7d23 -Block 0029 [ 63]: 67a439b00b8e30f7 -Block 0029 [ 64]: c266ff756d585cb8 -Block 0029 [ 65]: 1e42a8b331e42a23 -Block 0029 [ 66]: 7a160fbda5d05715 -Block 0029 [ 67]: 12920934bcce7a7a -Block 0029 [ 68]: 9c3f9b96c11b8bc7 -Block 0029 [ 69]: 1597088b19ac236a -Block 0029 [ 70]: f0211c610b4e66ca -Block 0029 [ 71]: a6ecc66bab3fcf49 -Block 0029 [ 72]: 3c16a295685c5d8a -Block 0029 [ 73]: c0d3f25b295e2acc -Block 0029 [ 74]: 6a25ba69a766c8aa -Block 0029 [ 75]: 15dac6fcd74d2ca7 -Block 0029 [ 76]: d66ee559cf707ee1 -Block 0029 [ 77]: 376cf4b0a389b1d1 -Block 0029 [ 78]: 95b7cccaa711e62a -Block 0029 [ 79]: 045137ff521630b6 -Block 0029 [ 80]: e80209e08c0b77d4 -Block 0029 [ 81]: 6f7d6fdb47d99fa6 -Block 0029 [ 82]: ca327877c6ea5a6c -Block 0029 [ 83]: aa2e63dc8dfa2102 -Block 0029 [ 84]: 6d074e9ebe45b594 -Block 0029 [ 85]: 43b8a4e840ade226 -Block 0029 [ 86]: 270b901b540052b0 -Block 0029 [ 87]: 4dfddc88d72aeff2 -Block 0029 [ 88]: 8bf43db820319d2f -Block 0029 [ 89]: 331ca9d80f2ec3e0 -Block 0029 [ 90]: 060830ef760715bc -Block 0029 [ 91]: 8a8325d30998d393 -Block 0029 [ 92]: aeaa2f11004e419d -Block 0029 [ 93]: fa8d7e4b5e7ab8c8 -Block 0029 [ 94]: 1baabae972b14d49 -Block 0029 [ 95]: 76d1394e3ba03bd8 -Block 0029 [ 96]: a0a0953687d17827 -Block 0029 [ 97]: 051b864ddf100caf -Block 0029 [ 98]: 514e508badc56cbf -Block 0029 [ 99]: d7a8c578e557b1d5 -Block 0029 [100]: caed014550fae99b -Block 0029 [101]: 0836242ac75e3bdb -Block 0029 [102]: 64a6302124675915 -Block 0029 [103]: f1c003c69d8e303f -Block 0029 [104]: fa0d37a15250c31c -Block 0029 [105]: f8e1724351bba255 -Block 0029 [106]: 667b6b5f6cc79af9 -Block 0029 [107]: ddc2b84fd4bd3e79 -Block 0029 [108]: 50d991c07f996c66 -Block 0029 [109]: 02c92496716cf522 -Block 0029 [110]: 04ab44d396d9c9c4 -Block 0029 [111]: 96c9ae1f87be0ad7 -Block 0029 [112]: f7796644baaf6e90 -Block 0029 [113]: 0f249954ee125408 -Block 0029 [114]: b0d2205cb60bf289 -Block 0029 [115]: b9c5ec1762ebc57c -Block 0029 [116]: 31f029ed8dfc27dd -Block 0029 [117]: 0893c028683bf03b -Block 0029 [118]: e830266fd7940a0e -Block 0029 [119]: 5485c0e009244e39 -Block 0029 [120]: a0432c001528bd5b -Block 0029 [121]: b0d05b8d644891d9 -Block 0029 [122]: 83199ca64c50deef -Block 0029 [123]: f26cb6a7a2b998aa -Block 0029 [124]: 05006e76730d7ad4 -Block 0029 [125]: cb1707a747abe93c -Block 0029 [126]: ca20245fdf028ad9 -Block 0029 [127]: 0eaa767ba568dda0 -Block 0030 [ 0]: 35eec3a1bdd9dcdf -Block 0030 [ 1]: b6d1023e5b82a174 -Block 0030 [ 2]: 5a08eb6fc3b96090 -Block 0030 [ 3]: c22a681ecb82a62d -Block 0030 [ 4]: 5cf2c83f5feaf5bb -Block 0030 [ 5]: d58d528b0d9792a8 -Block 0030 [ 6]: e269e6a6101c9310 -Block 0030 [ 7]: 0c71f9e54ed5b711 -Block 0030 [ 8]: daa5bc93c7835c15 -Block 0030 [ 9]: 0e733d8eafc9075d -Block 0030 [ 10]: a98ad05698c3ebb9 -Block 0030 [ 11]: cad1a03b880005b8 -Block 0030 [ 12]: 264d34c610ff7458 -Block 0030 [ 13]: 8120a277df740d4a -Block 0030 [ 14]: 0f0df615f4690f6e -Block 0030 [ 15]: 460c0f1ebed7ba74 -Block 0030 [ 16]: 98b68c7ea1bfc4dc -Block 0030 [ 17]: 0c3770b51f0ef728 -Block 0030 [ 18]: bf5a91880cec573b -Block 0030 [ 19]: 00dec1a05964e9c8 -Block 0030 [ 20]: 91472db675baf6aa -Block 0030 [ 21]: 57b966cc8b970571 -Block 0030 [ 22]: fe83863b3b423d83 -Block 0030 [ 23]: c4511487b6e058bf -Block 0030 [ 24]: f866ad2a5e3ef155 -Block 0030 [ 25]: d00d1a3b6d7e2143 -Block 0030 [ 26]: 09ccaa4d528b7f6f -Block 0030 [ 27]: 443a1754209266bb -Block 0030 [ 28]: 0658c243f1d4e623 -Block 0030 [ 29]: 1f15e52d01020370 -Block 0030 [ 30]: 3d29b62d3a00e90f -Block 0030 [ 31]: c801d874113fb712 -Block 0030 [ 32]: 31f1a0f6fa357f53 -Block 0030 [ 33]: d8a3901a28ad6915 -Block 0030 [ 34]: 6514a01c4bba4865 -Block 0030 [ 35]: 96d805c9c39a91fa -Block 0030 [ 36]: 0b53a27c8f27fbba -Block 0030 [ 37]: 61135b0d7c903e3c -Block 0030 [ 38]: 02a6bcae74e89195 -Block 0030 [ 39]: 0183b5104d995a56 -Block 0030 [ 40]: 8e6f77bb221c1b2f -Block 0030 [ 41]: 94257e6f522ab7e9 -Block 0030 [ 42]: 7935f5eb602ae0f0 -Block 0030 [ 43]: c190b3613d89e268 -Block 0030 [ 44]: fa8027f56884201f -Block 0030 [ 45]: 8452d5d1e97c7b9a -Block 0030 [ 46]: a744289083376f31 -Block 0030 [ 47]: 955ea0a65d356d40 -Block 0030 [ 48]: c7e8ebd7c1035444 -Block 0030 [ 49]: 32ee6c0c63df2a06 -Block 0030 [ 50]: c9c50a65fdcfa136 -Block 0030 [ 51]: 7c3949da834717e4 -Block 0030 [ 52]: 749ee2a2e64ef7e2 -Block 0030 [ 53]: 354171f4cf739fe8 -Block 0030 [ 54]: 6acdc20bc8cfff15 -Block 0030 [ 55]: 16332b8970b0b731 -Block 0030 [ 56]: 39a030c4e7303b1e -Block 0030 [ 57]: 0a8c7141990a51fd -Block 0030 [ 58]: 4994ff90a28e39d3 -Block 0030 [ 59]: 2b5f4aa3c04531ec -Block 0030 [ 60]: b4ca924c16740047 -Block 0030 [ 61]: 907c8e5f7fdac555 -Block 0030 [ 62]: 663590f5934b831a -Block 0030 [ 63]: 4814910e7ae9334e -Block 0030 [ 64]: 42f7f287225986de -Block 0030 [ 65]: a0a7c150090e9296 -Block 0030 [ 66]: e280f437ed51ac54 -Block 0030 [ 67]: 3aa6abcd3a48d52f -Block 0030 [ 68]: 4f3401719d462eb9 -Block 0030 [ 69]: f834a32b293e01bd -Block 0030 [ 70]: c2810f77328910af -Block 0030 [ 71]: 627f172bf1a181f2 -Block 0030 [ 72]: 64d92ef494745621 -Block 0030 [ 73]: 2cf202565cc16c7d -Block 0030 [ 74]: 737df2974bcb0abf -Block 0030 [ 75]: acf603206208444f -Block 0030 [ 76]: fa6edee39a5297d3 -Block 0030 [ 77]: cc4623ae6d994d2a -Block 0030 [ 78]: fd3675f83fde5920 -Block 0030 [ 79]: 2bb1331f7bd2ea92 -Block 0030 [ 80]: fb52ae43c3c284dd -Block 0030 [ 81]: 4825a51327dd0b90 -Block 0030 [ 82]: 45bd078cd0197078 -Block 0030 [ 83]: 71c34f74f169fa00 -Block 0030 [ 84]: ef1ad43c0d37519f -Block 0030 [ 85]: be67d13de95a25ac -Block 0030 [ 86]: 5629c929e6e1b125 -Block 0030 [ 87]: 91af1482e10844f5 -Block 0030 [ 88]: dcf844cf39afaf79 -Block 0030 [ 89]: e47b0b0d29cfaf1f -Block 0030 [ 90]: ac6f4fee2312428c -Block 0030 [ 91]: 3c8a03041548a4d3 -Block 0030 [ 92]: c34935ad9024a98e -Block 0030 [ 93]: 3282a01b8e51f0b2 -Block 0030 [ 94]: 48c5ff2f324f1d28 -Block 0030 [ 95]: 6b35fc1a36a9ecf6 -Block 0030 [ 96]: a41e7feb2b71d512 -Block 0030 [ 97]: e94cecb45a14c029 -Block 0030 [ 98]: 5aa3f223b12c8de9 -Block 0030 [ 99]: c6d730ea67389b8c -Block 0030 [100]: d488cfc4528666c0 -Block 0030 [101]: 600f2ccc30b2208b -Block 0030 [102]: 8d5c68cd498eb292 -Block 0030 [103]: 5f909bb9f8fc4aae -Block 0030 [104]: 033d0c61f989ea55 -Block 0030 [105]: 8a5c19ca84fb2c16 -Block 0030 [106]: a1b0a2c8dcc38ad5 -Block 0030 [107]: 8603876466cd7a1d -Block 0030 [108]: 6a282ca5a8f9dee4 -Block 0030 [109]: 0ded75533e1fa4d0 -Block 0030 [110]: 605949936666b3a5 -Block 0030 [111]: 5103e954515f21a5 -Block 0030 [112]: bf640ae5e6d30198 -Block 0030 [113]: 501e4517d702b2bd -Block 0030 [114]: bbb83c6ed92fde1d -Block 0030 [115]: e24b7bf1f4048387 -Block 0030 [116]: 27a75bde0d4482a5 -Block 0030 [117]: 1fee004f4ea1caa8 -Block 0030 [118]: a35697de43230d57 -Block 0030 [119]: 8e1a3dee6d4fc04e -Block 0030 [120]: 7137020314cc8f22 -Block 0030 [121]: b7df79f263c55815 -Block 0030 [122]: 5ae620c98adcc163 -Block 0030 [123]: 6f3cdde1d908d6cd -Block 0030 [124]: 0df0a1525bb95f5a -Block 0030 [125]: 8ec8f8c55d340d8a -Block 0030 [126]: a350788bd3453cc8 -Block 0030 [127]: 6d8d2e9626e4a502 -Block 0031 [ 0]: 17f04bbc11e7dc2d -Block 0031 [ 1]: 56fa16e87ce4a877 -Block 0031 [ 2]: 414aacac928886f9 -Block 0031 [ 3]: c278b12dd24e8545 -Block 0031 [ 4]: 900bbae93aa324a2 -Block 0031 [ 5]: e565209f68e87880 -Block 0031 [ 6]: e12768818997bd3a -Block 0031 [ 7]: ec463ae609e2980d -Block 0031 [ 8]: ef1eda834df17eed -Block 0031 [ 9]: ea6c80cd4897d934 -Block 0031 [ 10]: 4759ca11b6b43585 -Block 0031 [ 11]: 0a700649d273d4ff -Block 0031 [ 12]: a0292650159af12c -Block 0031 [ 13]: 5c51f53ededcb01d -Block 0031 [ 14]: b1eb730446485b2a -Block 0031 [ 15]: 28e955476e94c4c8 -Block 0031 [ 16]: cda545bde429a516 -Block 0031 [ 17]: a163659a8296eb0f -Block 0031 [ 18]: 554ef34819b72063 -Block 0031 [ 19]: 593178b25e0048b1 -Block 0031 [ 20]: 466f63e300bd02de -Block 0031 [ 21]: cd588de4d77a35cb -Block 0031 [ 22]: d1ebe193548aa8ac -Block 0031 [ 23]: 660dfe5583b59609 -Block 0031 [ 24]: 7caa8441a5730345 -Block 0031 [ 25]: ccc888ec843789e4 -Block 0031 [ 26]: 9103953a6cf5c334 -Block 0031 [ 27]: 5c422704f88d39ba -Block 0031 [ 28]: c8be51040c12db07 -Block 0031 [ 29]: 84858398a40042ad -Block 0031 [ 30]: dfcaa049225d167c -Block 0031 [ 31]: 98f2cc9f4e4258d0 -Block 0031 [ 32]: f3fae3fa4db6bfb0 -Block 0031 [ 33]: 8bfa9c45c8a401d2 -Block 0031 [ 34]: ab66cd15c2f7af11 -Block 0031 [ 35]: 62e64fbaf0892bb1 -Block 0031 [ 36]: 078c18524a46e818 -Block 0031 [ 37]: 8f6b27dda6f09cb9 -Block 0031 [ 38]: a906170570ca0e20 -Block 0031 [ 39]: 44369154789511f4 -Block 0031 [ 40]: 4f859124dc22dc99 -Block 0031 [ 41]: d968707bbce205da -Block 0031 [ 42]: 7ff0fd984ff0a1c6 -Block 0031 [ 43]: b944db9fec0c5cb1 -Block 0031 [ 44]: 5f54ca0bce6d4739 -Block 0031 [ 45]: 3c1776b8a9b1e6a0 -Block 0031 [ 46]: f4243052fe6111ac -Block 0031 [ 47]: 09731689890469fd -Block 0031 [ 48]: ee8c13fe19a0fc7d -Block 0031 [ 49]: cca002284ad8f54c -Block 0031 [ 50]: 11e37c8ef20aae2d -Block 0031 [ 51]: 8af27a895dc48c82 -Block 0031 [ 52]: 807a0952da78d9cf -Block 0031 [ 53]: bad0e80749fe807e -Block 0031 [ 54]: 076a367d0ed3de20 -Block 0031 [ 55]: 4c8f43e0f8ea7a22 -Block 0031 [ 56]: 02000f1a9bd4d6d9 -Block 0031 [ 57]: 25f514284bf170c0 -Block 0031 [ 58]: ebf76a18430a3683 -Block 0031 [ 59]: 9d7f67409a259d66 -Block 0031 [ 60]: 3b50b369a4c34bd1 -Block 0031 [ 61]: f385dcc6299ce473 -Block 0031 [ 62]: 1d22709b4dd07705 -Block 0031 [ 63]: 92ff35c57fb9a700 -Block 0031 [ 64]: 0d50a1ac1ca57f4b -Block 0031 [ 65]: 7ee41d83eb6124ab -Block 0031 [ 66]: 5691ff7e8fa8e58a -Block 0031 [ 67]: b3e4310469c63efa -Block 0031 [ 68]: e24a8771310b52a2 -Block 0031 [ 69]: a733c130da1b32eb -Block 0031 [ 70]: 44c32f9cd6c3ed90 -Block 0031 [ 71]: 4b20203253583d31 -Block 0031 [ 72]: 996147e6477e0ad6 -Block 0031 [ 73]: d86db7272010bbeb -Block 0031 [ 74]: c7fc45ee0dec0947 -Block 0031 [ 75]: 25a1645723db3526 -Block 0031 [ 76]: 7da54338e579e32d -Block 0031 [ 77]: 5f29c738c150bb1f -Block 0031 [ 78]: 34dcc2d8376aeb0e -Block 0031 [ 79]: 1921234d4052d257 -Block 0031 [ 80]: 004f0640368bd0c2 -Block 0031 [ 81]: 89f931c647d8f9b4 -Block 0031 [ 82]: 1f4a7045198e2d2a -Block 0031 [ 83]: e49345423ffa0203 -Block 0031 [ 84]: 42f67a45efede962 -Block 0031 [ 85]: 51ebcf52c66ad71b -Block 0031 [ 86]: 8c93f1d50c18862c -Block 0031 [ 87]: f9cbe34de0b63e22 -Block 0031 [ 88]: dc02d2c3e2a0e1d2 -Block 0031 [ 89]: f8fe0b8ce04e52f2 -Block 0031 [ 90]: 08b3785b2ed9f6b4 -Block 0031 [ 91]: a39851d6ab2f3f70 -Block 0031 [ 92]: b69af0d633f40c6e -Block 0031 [ 93]: 9a1aaa50cc9336ca -Block 0031 [ 94]: 64455ddbd424fb68 -Block 0031 [ 95]: 512cadd6b83a7da9 -Block 0031 [ 96]: 74439d194a299b98 -Block 0031 [ 97]: 09e7891d17775e57 -Block 0031 [ 98]: 863f478b9c56d481 -Block 0031 [ 99]: 0156ad653deb9a3a -Block 0031 [100]: 35ef7b185e953464 -Block 0031 [101]: bb34f03813de8918 -Block 0031 [102]: f73a6350becbab3b -Block 0031 [103]: a1dedf24e6b0e9aa -Block 0031 [104]: b61134a8ce3b8f8d -Block 0031 [105]: 5c24eb885f2838ec -Block 0031 [106]: c74db3229966d2b3 -Block 0031 [107]: 7f146ecea2afb556 -Block 0031 [108]: b59cbee73722bfe7 -Block 0031 [109]: 97a08d2807abf018 -Block 0031 [110]: a202a7d3bc2c1631 -Block 0031 [111]: f0f2c48ba5fb6065 -Block 0031 [112]: 669d543a28958dca -Block 0031 [113]: 3384de016a7ddbbf -Block 0031 [114]: a5881297663e6707 -Block 0031 [115]: a70d745c38904dc4 -Block 0031 [116]: 9f4d179cc16fe173 -Block 0031 [117]: aa6771a8009e295e -Block 0031 [118]: fb1a4e991991c6f3 -Block 0031 [119]: f2505e38b73a62ea -Block 0031 [120]: b3016d3b6191fc27 -Block 0031 [121]: 9fb9d1486ebe88c8 -Block 0031 [122]: a37b0ffd9bee0c99 -Block 0031 [123]: ff109aeefd852972 -Block 0031 [124]: 7f7e2156c126d827 -Block 0031 [125]: 8d0ed8ad89cac26e -Block 0031 [126]: ca21425508286511 -Block 0031 [127]: c5a87589413a5f41 - - After pass 1: -Block 0000 [ 0]: e9550cb7441be892 -Block 0000 [ 1]: a3fd96fddca6f69d -Block 0000 [ 2]: 0a0727a61a894945 -Block 0000 [ 3]: 11fe2d86c258ae46 -Block 0000 [ 4]: a9ef7448a0ccab00 -Block 0000 [ 5]: 06d8a79699b1e047 -Block 0000 [ 6]: 7fcb9ae69b0aaac7 -Block 0000 [ 7]: 69343012c3076ea1 -Block 0000 [ 8]: 6e00d67ace2ec3f8 -Block 0000 [ 9]: a49d58c0eba07a30 -Block 0000 [ 10]: 90926900f4773099 -Block 0000 [ 11]: a3da3441347fe815 -Block 0000 [ 12]: a79e6d347b657244 -Block 0000 [ 13]: 4285744253dfd00e -Block 0000 [ 14]: aa1fa5ed81b624df -Block 0000 [ 15]: 3d9b7373f8597467 -Block 0000 [ 16]: bd4379f32f94f0fc -Block 0000 [ 17]: 40355ac4178d53f3 -Block 0000 [ 18]: bd78c72572a6af61 -Block 0000 [ 19]: 281f99f8dc8d9050 -Block 0000 [ 20]: c97e563c83178d2f -Block 0000 [ 21]: 8d9d1e26b9db8034 -Block 0000 [ 22]: 3902197d294ef4aa -Block 0000 [ 23]: 1b57f06a2a0b709f -Block 0000 [ 24]: 277f75af34316bac -Block 0000 [ 25]: 32bc11625c1b2751 -Block 0000 [ 26]: a76f4d56e2bbd31c -Block 0000 [ 27]: 4383d549b9fee150 -Block 0000 [ 28]: ec4da4283ee19a25 -Block 0000 [ 29]: db40a685d75a97eb -Block 0000 [ 30]: f7e95a4293a58b67 -Block 0000 [ 31]: 459ce6d7ad8fb97e -Block 0000 [ 32]: e5da1d30fe9710fb -Block 0000 [ 33]: d47c35f1319eb43f -Block 0000 [ 34]: 4a3baab52a5da348 -Block 0000 [ 35]: 581d9990ca7d2c5c -Block 0000 [ 36]: f035855e7c5a0dba -Block 0000 [ 37]: 11729bc0a2cc2e05 -Block 0000 [ 38]: 2439be4b37549988 -Block 0000 [ 39]: 15fc82bfc2bc04e4 -Block 0000 [ 40]: f1560d8eafded40c -Block 0000 [ 41]: d139264a0bca6726 -Block 0000 [ 42]: 3ebd6bebc32c796f -Block 0000 [ 43]: 3c6dab5ba747707a -Block 0000 [ 44]: 83ec6820e1b375c7 -Block 0000 [ 45]: 0660dfa463fc9981 -Block 0000 [ 46]: a38630c563e0783d -Block 0000 [ 47]: bc7d652ca8672d8e -Block 0000 [ 48]: bfb5d9999448c339 -Block 0000 [ 49]: e56e2a8aaf192956 -Block 0000 [ 50]: 2d444595302a6f8f -Block 0000 [ 51]: 7ee4948d1aa843e8 -Block 0000 [ 52]: 40225ab51ab422af -Block 0000 [ 53]: 30c483daeb628c24 -Block 0000 [ 54]: 9025b7151da6425c -Block 0000 [ 55]: 8d032f891b7d9f4c -Block 0000 [ 56]: 769969c276f48220 -Block 0000 [ 57]: a935b2664cb6de87 -Block 0000 [ 58]: 388e764dc3e2db3a -Block 0000 [ 59]: 91191a07635348d1 -Block 0000 [ 60]: f2141c06c59d34f4 -Block 0000 [ 61]: 75cefd44bf8d34cc -Block 0000 [ 62]: 564f6e178f57da02 -Block 0000 [ 63]: b0288d8fb8ec24c6 -Block 0000 [ 64]: 53f404b6bada7fd5 -Block 0000 [ 65]: ce387b78af2e7da9 -Block 0000 [ 66]: 961019ec3bf5a7ba -Block 0000 [ 67]: 9c707e03c2138397 -Block 0000 [ 68]: b6e4104f00124c70 -Block 0000 [ 69]: f3ffa2968fa42fe1 -Block 0000 [ 70]: b41ac152d1da73dd -Block 0000 [ 71]: 546289e70071e674 -Block 0000 [ 72]: 6937af57f76368e8 -Block 0000 [ 73]: daffc82f1b00a6ec -Block 0000 [ 74]: dc8a1f1f6c1a3769 -Block 0000 [ 75]: 20d75bd00bfe8391 -Block 0000 [ 76]: 83dcbf84758e8b00 -Block 0000 [ 77]: 3c52616b112557bd -Block 0000 [ 78]: a6416f1995e460da -Block 0000 [ 79]: b0a1591f1e34c1d8 -Block 0000 [ 80]: 4602f24366054da3 -Block 0000 [ 81]: 808e8b80d660df50 -Block 0000 [ 82]: 93f7ff5247d8f563 -Block 0000 [ 83]: be9bd2e8847c9cfd -Block 0000 [ 84]: 78fe2bda93162b53 -Block 0000 [ 85]: 9ec83bb297e1f2ee -Block 0000 [ 86]: b90706d2bf061ff3 -Block 0000 [ 87]: 186c3646c266ca2c -Block 0000 [ 88]: 628050acddf15f79 -Block 0000 [ 89]: cc88eb65b6f03fec -Block 0000 [ 90]: de96108afee33c3e -Block 0000 [ 91]: c156d449313bfd02 -Block 0000 [ 92]: 58a2c3a3fc41adae -Block 0000 [ 93]: 3dfeb8dff8aa5b80 -Block 0000 [ 94]: a28048dfd71dc8d8 -Block 0000 [ 95]: b0d8d6bbc430f3ee -Block 0000 [ 96]: cbf2194f578d6db2 -Block 0000 [ 97]: 01ccb4d39161aac4 -Block 0000 [ 98]: f44fe5fff3ae387e -Block 0000 [ 99]: b1813dfa99c6953d -Block 0000 [100]: 5bca760ee97db409 -Block 0000 [101]: 3ce9ff5ec3099a35 -Block 0000 [102]: 9e1cb135ab1b42a0 -Block 0000 [103]: b251228dd5eb5ae0 -Block 0000 [104]: 66304590c17b8117 -Block 0000 [105]: a46257f0e6f256ed -Block 0000 [106]: 14e299ab4f2d187e -Block 0000 [107]: 24228dec25e8772d -Block 0000 [108]: f8f029106762c0d7 -Block 0000 [109]: 2f261305d9b518d1 -Block 0000 [110]: c6b27f4786596697 -Block 0000 [111]: 7e9a5e51425764ad -Block 0000 [112]: f6674f15be253b39 -Block 0000 [113]: 0922afec1f60f831 -Block 0000 [114]: 6c729428d9d0a23f -Block 0000 [115]: b673cf5b43402f36 -Block 0000 [116]: 9010b9a37fa13310 -Block 0000 [117]: 7b3b5f677ab6c0a1 -Block 0000 [118]: 6f0099ca29449c51 -Block 0000 [119]: 08941902d462588f -Block 0000 [120]: e7180fff290542e9 -Block 0000 [121]: 0ee4cd5dfee583ec -Block 0000 [122]: 7a60e32fe35b330e -Block 0000 [123]: daf1ffa261adc82f -Block 0000 [124]: 1a160254df704091 -Block 0000 [125]: ac5bf3535385f59a -Block 0000 [126]: f9decabf3ad9b4a4 -Block 0000 [127]: f7654a3f226adfa7 -Block 0001 [ 0]: bc459e0eea13a1f3 -Block 0001 [ 1]: 49eef4a59a5aa372 -Block 0001 [ 2]: 401c002334495016 -Block 0001 [ 3]: 88b39619877d25ff -Block 0001 [ 4]: 9f7cb547d36211b6 -Block 0001 [ 5]: 6cc6287d95e294a8 -Block 0001 [ 6]: d0e2fa02854d590e -Block 0001 [ 7]: e0370ab791652bac -Block 0001 [ 8]: eacbc294d4a30a44 -Block 0001 [ 9]: aeb62d61bc7705c0 -Block 0001 [ 10]: 1c6ec07f7cea9f47 -Block 0001 [ 11]: 6417fa6afaa2c5cf -Block 0001 [ 12]: c2f9504724c3bc92 -Block 0001 [ 13]: 83f7e665d693c1a0 -Block 0001 [ 14]: 0c6380b41a0201b9 -Block 0001 [ 15]: 7579e63288ae9d3a -Block 0001 [ 16]: d82ca980319e8378 -Block 0001 [ 17]: 5e71e4d4f0c94f01 -Block 0001 [ 18]: e2ae1815182d371a -Block 0001 [ 19]: 4dc20804ef3373b3 -Block 0001 [ 20]: ce746d95dc63549d -Block 0001 [ 21]: 5b0dca46deda0e87 -Block 0001 [ 22]: ed85a89304dee634 -Block 0001 [ 23]: ac266927481f3736 -Block 0001 [ 24]: cb290eb0eee448f7 -Block 0001 [ 25]: 6ed16ca8b8a80515 -Block 0001 [ 26]: 7ddef21f6d32effb -Block 0001 [ 27]: a698cfebc42f8b78 -Block 0001 [ 28]: 586ac3c8ca8a541b -Block 0001 [ 29]: fe5d850bfd7dc57b -Block 0001 [ 30]: 9118360b7d2bc4c9 -Block 0001 [ 31]: 80c528b10fb625d7 -Block 0001 [ 32]: 747b7d55cd6d5f31 -Block 0001 [ 33]: c5d7ead5b3d77159 -Block 0001 [ 34]: 0b587e890235e645 -Block 0001 [ 35]: c2484fa9b0f2be70 -Block 0001 [ 36]: 1c8a3c5bf70785db -Block 0001 [ 37]: f0eee081b3f166e3 -Block 0001 [ 38]: 53107934144a5cd8 -Block 0001 [ 39]: 0e460822accb4724 -Block 0001 [ 40]: 9fa234759c8ca51b -Block 0001 [ 41]: 73398d40f1ad7336 -Block 0001 [ 42]: ac0ffffe28ec0bd6 -Block 0001 [ 43]: 126739a06ed1fabb -Block 0001 [ 44]: 778065fea1b348d4 -Block 0001 [ 45]: 9e149c4d19c48b7d -Block 0001 [ 46]: 3ab9809fb1e88ea4 -Block 0001 [ 47]: 24edb1342bd45b11 -Block 0001 [ 48]: 794fd23b6fd32b33 -Block 0001 [ 49]: a793ee83b72c1c48 -Block 0001 [ 50]: 89b55cdc62adb18b -Block 0001 [ 51]: ccec9d11f1f473aa -Block 0001 [ 52]: ead0ddbdcf12d5da -Block 0001 [ 53]: 7f1b64e493de3a42 -Block 0001 [ 54]: 6b9a688eacb29c53 -Block 0001 [ 55]: 041ff10a56bfd124 -Block 0001 [ 56]: 11bcdfea9f4778ba -Block 0001 [ 57]: 5c3452982c95f36d -Block 0001 [ 58]: 78043a6334282ade -Block 0001 [ 59]: 2e6b32801d204496 -Block 0001 [ 60]: eda1e9230c69988f -Block 0001 [ 61]: b1e38ba52270d65a -Block 0001 [ 62]: 59867bea79e81eea -Block 0001 [ 63]: 4950d787032cab9c -Block 0001 [ 64]: a2e26164012c30ac -Block 0001 [ 65]: 47ffcfe006607e62 -Block 0001 [ 66]: 75e57bb2c0fecc99 -Block 0001 [ 67]: 8377f8cb872ff188 -Block 0001 [ 68]: 4f2f480425512165 -Block 0001 [ 69]: f11118f5c806ed9f -Block 0001 [ 70]: 5371a6d76715055a -Block 0001 [ 71]: dc71cfd303bcbbed -Block 0001 [ 72]: 432d3e34de79ea75 -Block 0001 [ 73]: b3c05a6624da3011 -Block 0001 [ 74]: b2b40d56350b73fe -Block 0001 [ 75]: 3f2065a4bdde3ef8 -Block 0001 [ 76]: d5d8a80cc0ace697 -Block 0001 [ 77]: 4f3bb1e4743984e7 -Block 0001 [ 78]: 52025366f9be8b92 -Block 0001 [ 79]: e476f5f80de3d2f3 -Block 0001 [ 80]: 4342bb1beb580982 -Block 0001 [ 81]: 67990f5680d612b2 -Block 0001 [ 82]: e2b764c69f871d05 -Block 0001 [ 83]: 5c115c46a9d77e7f -Block 0001 [ 84]: 1277b1cc8d0822a2 -Block 0001 [ 85]: 87483e53ebb66247 -Block 0001 [ 86]: f41b286b6678a395 -Block 0001 [ 87]: 39be6db92f34b25d -Block 0001 [ 88]: 05c798faca043d57 -Block 0001 [ 89]: 339176afa15c57e4 -Block 0001 [ 90]: addfacb21e7b3899 -Block 0001 [ 91]: 347baed2dc7e123e -Block 0001 [ 92]: c8e17e46dd176bf4 -Block 0001 [ 93]: ccb8aad34aa26683 -Block 0001 [ 94]: 6ebf6b0c3d9dca90 -Block 0001 [ 95]: aa78863c92270242 -Block 0001 [ 96]: 4b045aa366cce2d8 -Block 0001 [ 97]: 5d81d95a2df235c3 -Block 0001 [ 98]: bde894f1a74a76dc -Block 0001 [ 99]: ed38f15b1391dd95 -Block 0001 [100]: cabbae2dc702f85e -Block 0001 [101]: 31af49571ab46d58 -Block 0001 [102]: f6018e52178a3abd -Block 0001 [103]: 0b931029db37f1f3 -Block 0001 [104]: d335f2a1a4506271 -Block 0001 [105]: 47dee6e4d062a924 -Block 0001 [106]: 712500aad5917547 -Block 0001 [107]: ce52485b1c1c0c96 -Block 0001 [108]: 5201c069725f1e4a -Block 0001 [109]: 0baed79cad097c37 -Block 0001 [110]: 5ac9a6873ff1723c -Block 0001 [111]: 981afe97c87bf63c -Block 0001 [112]: c663cda5fc535e6f -Block 0001 [113]: c420f671a527e73e -Block 0001 [114]: 466add63b316c409 -Block 0001 [115]: 94b0804574e0bd8e -Block 0001 [116]: aa686639b37e98dc -Block 0001 [117]: 14907009742c9497 -Block 0001 [118]: e113a3c0fce07bbb -Block 0001 [119]: 7fc91c5d001b7b66 -Block 0001 [120]: d8857f78a9765b73 -Block 0001 [121]: 7b95fd0a7f2c2019 -Block 0001 [122]: 7d4b660fef058423 -Block 0001 [123]: d09a7312abec290a -Block 0001 [124]: 4526d55249dbaef2 -Block 0001 [125]: ed73e279750b1079 -Block 0001 [126]: 104eda79f420b860 -Block 0001 [127]: 8c421efbfcb0e58d -Block 0002 [ 0]: 8ea6f3005dc0961e -Block 0002 [ 1]: ec57014cac3899fa -Block 0002 [ 2]: 0a17bf60fd070a86 -Block 0002 [ 3]: ced6318e68a05ee3 -Block 0002 [ 4]: 3102b5632405b609 -Block 0002 [ 5]: 945825ed9f453504 -Block 0002 [ 6]: 46db680acf41a392 -Block 0002 [ 7]: eb65ee89868ba4fd -Block 0002 [ 8]: a5f85f09d827ec4b -Block 0002 [ 9]: 4d96ccbe256e70d0 -Block 0002 [ 10]: 6135bfdc5221cd76 -Block 0002 [ 11]: 7cdc62f1d3090016 -Block 0002 [ 12]: 4b8dfa10673895b0 -Block 0002 [ 13]: 81730e01622d73e7 -Block 0002 [ 14]: 0ed2a4e5cfd12538 -Block 0002 [ 15]: 76e6f0a376770db5 -Block 0002 [ 16]: 1f264bfa43ab6bcb -Block 0002 [ 17]: 76018b12515c9f17 -Block 0002 [ 18]: 4dabcc6ba9eef055 -Block 0002 [ 19]: 1d9b4b208308d0a5 -Block 0002 [ 20]: a5416a049c3e72b0 -Block 0002 [ 21]: 2ddd518f7db7c3eb -Block 0002 [ 22]: 82fc34c909e9d5cc -Block 0002 [ 23]: 0b7e631ea36dc9c7 -Block 0002 [ 24]: b4af6334fe3f2bf2 -Block 0002 [ 25]: 9900eef4c64644cd -Block 0002 [ 26]: 3023e322496d1d24 -Block 0002 [ 27]: b522c4417bd3e4a6 -Block 0002 [ 28]: e1f0b6d0e64ddc94 -Block 0002 [ 29]: 89391fd4c6bb340f -Block 0002 [ 30]: 1266543a5647e447 -Block 0002 [ 31]: 7a7af30f1460bedc -Block 0002 [ 32]: 0571774e124ed17a -Block 0002 [ 33]: c90b8125f3e09457 -Block 0002 [ 34]: 2c666a53b7d80823 -Block 0002 [ 35]: f03a8512d71da199 -Block 0002 [ 36]: 84501a2dc0eac1ca -Block 0002 [ 37]: 4c6ff369671d3097 -Block 0002 [ 38]: e019828aef77eb48 -Block 0002 [ 39]: 08324da56e7ec80c -Block 0002 [ 40]: 47c3fea7a541ad83 -Block 0002 [ 41]: bcd3e94fbfa1a121 -Block 0002 [ 42]: 914a7ea99ef847fd -Block 0002 [ 43]: 49d81b057bdb45a5 -Block 0002 [ 44]: 8d579d6ad1c0e128 -Block 0002 [ 45]: 1d5a3539225b32d1 -Block 0002 [ 46]: 70b078ed8c701e4e -Block 0002 [ 47]: b35f51f72d549a13 -Block 0002 [ 48]: 005cf45452fd26c1 -Block 0002 [ 49]: 795b4bb077b874d1 -Block 0002 [ 50]: 4d71a5da9eb1cba7 -Block 0002 [ 51]: 3187129a79216fc2 -Block 0002 [ 52]: ac146ec59c7e5314 -Block 0002 [ 53]: 85bafe512fac7623 -Block 0002 [ 54]: 60550bce77e85eca -Block 0002 [ 55]: 3ab28c531280f09b -Block 0002 [ 56]: 9b11b44f7ccb1823 -Block 0002 [ 57]: 668f4045e06ba4c3 -Block 0002 [ 58]: 879f1b67e5d8c5b8 -Block 0002 [ 59]: cc60238d7597d594 -Block 0002 [ 60]: 4e2a2cb3015a0467 -Block 0002 [ 61]: 7ef9528b0ae50aae -Block 0002 [ 62]: 7d8beaec217e81d8 -Block 0002 [ 63]: 348b9275fbfa1ff5 -Block 0002 [ 64]: ed1fb63138e1f50d -Block 0002 [ 65]: 9562d27cab09e659 -Block 0002 [ 66]: d806069af50f7794 -Block 0002 [ 67]: 8d0aff57a148caaf -Block 0002 [ 68]: 421250e9be352352 -Block 0002 [ 69]: 2b4fe8b0e3bf35e4 -Block 0002 [ 70]: 18211dcc5cc9deca -Block 0002 [ 71]: 540b72659f89c190 -Block 0002 [ 72]: 670c27e851cf8a60 -Block 0002 [ 73]: 71acec32b29a2caa -Block 0002 [ 74]: 0450e5f6eee18092 -Block 0002 [ 75]: a34227efcd51b86b -Block 0002 [ 76]: 5771a997c605dc6c -Block 0002 [ 77]: bf0edb63ee2e0696 -Block 0002 [ 78]: 22ff838a15ca6ff2 -Block 0002 [ 79]: e7d11842b9259ad8 -Block 0002 [ 80]: 9cc9014a99f2611f -Block 0002 [ 81]: 0712115fb800308e -Block 0002 [ 82]: b96fc2b34d47d68e -Block 0002 [ 83]: 09a3e5aebd720b56 -Block 0002 [ 84]: b8d5d104ab68646e -Block 0002 [ 85]: c73444d9a5bd5654 -Block 0002 [ 86]: d47e4cc54ffcaa43 -Block 0002 [ 87]: d8a7927fb3c75190 -Block 0002 [ 88]: 29a0cd526e8dbb27 -Block 0002 [ 89]: b686f1b621196790 -Block 0002 [ 90]: 631b2f9b530a956b -Block 0002 [ 91]: 4e18d6969ba0469d -Block 0002 [ 92]: 481c27be7030bf9d -Block 0002 [ 93]: 70c84dbe84d309a4 -Block 0002 [ 94]: 256841264bac123a -Block 0002 [ 95]: f908a6a11dfb21a6 -Block 0002 [ 96]: 6b4b356c30c62feb -Block 0002 [ 97]: 3dd9a072eecbe065 -Block 0002 [ 98]: c1d53bba775c35f0 -Block 0002 [ 99]: b8df34d4f7524d02 -Block 0002 [100]: 7b0deca6efdcc24d -Block 0002 [101]: 41cd9462a7992850 -Block 0002 [102]: 09e79c11f183be33 -Block 0002 [103]: 790cb6ea025ffb3f -Block 0002 [104]: 8698c499823ef322 -Block 0002 [105]: 58420a3826a66ddd -Block 0002 [106]: 3960ba6dcab5a023 -Block 0002 [107]: 4ce166e82c51c7f4 -Block 0002 [108]: 5bad585f7b816ff0 -Block 0002 [109]: 16f986b7b02f37d8 -Block 0002 [110]: 2fdf5d3c4e2fe48f -Block 0002 [111]: ab8562fe42ed05ed -Block 0002 [112]: e877cee731f0bdd1 -Block 0002 [113]: 0b4db86764860ebe -Block 0002 [114]: a391de7c10742d2a -Block 0002 [115]: 51e83db8e0dbffae -Block 0002 [116]: aa61f4616c0435bf -Block 0002 [117]: 6aa788d842071eb4 -Block 0002 [118]: 6f26ca76fe57f044 -Block 0002 [119]: 7fbefcb634977e04 -Block 0002 [120]: 040c1c551559d36e -Block 0002 [121]: 815326b814713dce -Block 0002 [122]: 21f8873f3284b327 -Block 0002 [123]: a7e2847d61bc0562 -Block 0002 [124]: 8aee0731ab4fec14 -Block 0002 [125]: 9391faf54a0cee1d -Block 0002 [126]: 6de600cf8c504229 -Block 0002 [127]: 51c20222f3371f26 -Block 0003 [ 0]: defbdd269247dccf -Block 0003 [ 1]: a917d017cd53d490 -Block 0003 [ 2]: c3fc89bccf53c160 -Block 0003 [ 3]: 7376b84e5a2841c0 -Block 0003 [ 4]: 27b9260af8a1fa18 -Block 0003 [ 5]: 0cd10e63618be28c -Block 0003 [ 6]: 688e75fad0999fa0 -Block 0003 [ 7]: 2f87962677d4456a -Block 0003 [ 8]: e6e8a06140ae4a8f -Block 0003 [ 9]: 43727e81157c3358 -Block 0003 [ 10]: 5f1af471ccecfecd -Block 0003 [ 11]: 282523c737f3ce59 -Block 0003 [ 12]: 4a4b20d1ca4a9f17 -Block 0003 [ 13]: 23f214ca8b99105d -Block 0003 [ 14]: 7f0bfc572d230507 -Block 0003 [ 15]: 921657836a1dc6e2 -Block 0003 [ 16]: d973ca4bd087d756 -Block 0003 [ 17]: 68dee0aaf60192c9 -Block 0003 [ 18]: f6b7b805b67d4c7d -Block 0003 [ 19]: f8e1402819b76190 -Block 0003 [ 20]: e45aee5f37907bf1 -Block 0003 [ 21]: 74d4bbcc731d7953 -Block 0003 [ 22]: 9c538094d34703c0 -Block 0003 [ 23]: 049f293341fd0f49 -Block 0003 [ 24]: 56d1af89b6934f7b -Block 0003 [ 25]: c06d5f12a9b959a0 -Block 0003 [ 26]: 0a738ab49d7f1140 -Block 0003 [ 27]: 4974722a08b9fb21 -Block 0003 [ 28]: 5515a5cdb9883b82 -Block 0003 [ 29]: 6ef52e56c7851f82 -Block 0003 [ 30]: 188325e68f1cd2a6 -Block 0003 [ 31]: 32a4559fe61d175e -Block 0003 [ 32]: e05943e39bc77ba1 -Block 0003 [ 33]: c63d13028907a676 -Block 0003 [ 34]: d2e643ec53311e10 -Block 0003 [ 35]: 831b2fd9c1d12049 -Block 0003 [ 36]: ec518b7b076fda55 -Block 0003 [ 37]: d0365d93bf0a67d8 -Block 0003 [ 38]: d12bab124b767c5c -Block 0003 [ 39]: 6debf3c5a3a87481 -Block 0003 [ 40]: 9b76bacb4feda29d -Block 0003 [ 41]: 972e482832ed1908 -Block 0003 [ 42]: f321cb74fc7ff73c -Block 0003 [ 43]: fef7f9306e1cadfe -Block 0003 [ 44]: 78bcc32d5bd4a468 -Block 0003 [ 45]: 05bb30b58e106a1c -Block 0003 [ 46]: 458e661c3edbb4f2 -Block 0003 [ 47]: c815023fe10e2953 -Block 0003 [ 48]: 5b9afadba0a0e2c2 -Block 0003 [ 49]: 9060bd4a68ba7683 -Block 0003 [ 50]: bd96ae69c1b0579c -Block 0003 [ 51]: 3c600e6edc5fb733 -Block 0003 [ 52]: 44f2242a97981614 -Block 0003 [ 53]: 2b8f3f6bcc388531 -Block 0003 [ 54]: 91975b293e5949ae -Block 0003 [ 55]: 7cd6d80733367b44 -Block 0003 [ 56]: 2893286bf377e181 -Block 0003 [ 57]: 9e9f576eb644c715 -Block 0003 [ 58]: aa0c95c6c0a9480a -Block 0003 [ 59]: ea0d7c84fb9073c2 -Block 0003 [ 60]: 6ea5293ca5a921dd -Block 0003 [ 61]: 00dbac8af8a1e88a -Block 0003 [ 62]: c29aa3e9e50972de -Block 0003 [ 63]: 0268e6c5804c49f2 -Block 0003 [ 64]: f6a3c6f98b724c4d -Block 0003 [ 65]: 2d179d15f41417c0 -Block 0003 [ 66]: 4a857320b45dac41 -Block 0003 [ 67]: 37b8660f7f759f67 -Block 0003 [ 68]: 3b37a0016af45092 -Block 0003 [ 69]: fd1a3627e2181f91 -Block 0003 [ 70]: 94136a9d4c1638b6 -Block 0003 [ 71]: 96bf6341988daf8f -Block 0003 [ 72]: ba9d427269beb6d8 -Block 0003 [ 73]: 338d43784b16339e -Block 0003 [ 74]: 258c9e2de5604f9f -Block 0003 [ 75]: bcc5d156fa5d3ee9 -Block 0003 [ 76]: f9ea8ceb3436b998 -Block 0003 [ 77]: 6681d34ea3bd3ac2 -Block 0003 [ 78]: 21230fcd512e1244 -Block 0003 [ 79]: a4c206a99699b869 -Block 0003 [ 80]: 23ca11323d64870f -Block 0003 [ 81]: 69d4bd4b5aecd7bc -Block 0003 [ 82]: 7926fc7c4fd85592 -Block 0003 [ 83]: f9981dc25da060dc -Block 0003 [ 84]: a56518aab4d26c6c -Block 0003 [ 85]: 5ebd99314579c81a -Block 0003 [ 86]: 697e53bcc2ce74da -Block 0003 [ 87]: ea7023bbe8c224b7 -Block 0003 [ 88]: 02ca6e8b3f6245d7 -Block 0003 [ 89]: bc369564806f736c -Block 0003 [ 90]: 74b2b79ff4a09b6e -Block 0003 [ 91]: ef509a784173335a -Block 0003 [ 92]: 7fdfed2b6024ecfe -Block 0003 [ 93]: f94c2475c3c2d394 -Block 0003 [ 94]: 70b5e9ca66108b36 -Block 0003 [ 95]: d833ab68bb44ffc4 -Block 0003 [ 96]: f77ece8ea46e2580 -Block 0003 [ 97]: 1ae7df31658e35a2 -Block 0003 [ 98]: ab0db62f9e77a1be -Block 0003 [ 99]: c46e14bf97493e69 -Block 0003 [100]: 5e103177d0a282df -Block 0003 [101]: 1d407aa0d722553c -Block 0003 [102]: 9a1b070f453e77eb -Block 0003 [103]: 7a49e2ccb043e84b -Block 0003 [104]: 128fa604e2049e13 -Block 0003 [105]: e8b0460a76453345 -Block 0003 [106]: ad6bbcbd5aad6663 -Block 0003 [107]: 86602cf6d3c04a63 -Block 0003 [108]: ddf5ed92306f5bb8 -Block 0003 [109]: a6d8b31feff6b5d5 -Block 0003 [110]: 0b31d395a152d5f2 -Block 0003 [111]: 8e19f1722242b1c7 -Block 0003 [112]: 4a2789d0abf4b6da -Block 0003 [113]: 91c7ea611376ca9c -Block 0003 [114]: 383d8259508783d3 -Block 0003 [115]: 2832818d509c32cf -Block 0003 [116]: 9bb26c92a26c6eed -Block 0003 [117]: baae366114f3ca3e -Block 0003 [118]: 09c413ff09704cbe -Block 0003 [119]: 5fc1338780cf93eb -Block 0003 [120]: 352469a1770e3e65 -Block 0003 [121]: 09d9489be33e8698 -Block 0003 [122]: 293a5c2b387975cf -Block 0003 [123]: 4d830525800bf49a -Block 0003 [124]: f60036d7c3126c7e -Block 0003 [125]: cce1956b6bb6f18e -Block 0003 [126]: b8e6e522b7f67d04 -Block 0003 [127]: b1833790bfe9a358 -Block 0004 [ 0]: 3d0218d3c7b74ca8 -Block 0004 [ 1]: d775ea77a653a27c -Block 0004 [ 2]: c176afeeeeec983f -Block 0004 [ 3]: 2f56b580b3d2038a -Block 0004 [ 4]: dd4f6cb833299896 -Block 0004 [ 5]: 36280f762b6d9d1f -Block 0004 [ 6]: e7931d5f58536e7f -Block 0004 [ 7]: 816acd37e673e4b1 -Block 0004 [ 8]: 252097ce80cf4471 -Block 0004 [ 9]: 53b5435ba1c7f8c3 -Block 0004 [ 10]: 64d876af9ba2b092 -Block 0004 [ 11]: f596aaf38f0d531c -Block 0004 [ 12]: daf15fd14343faf1 -Block 0004 [ 13]: 653e245995afa924 -Block 0004 [ 14]: 5d7490c3b74a7283 -Block 0004 [ 15]: 2938b33cd3959722 -Block 0004 [ 16]: fad161088d3d6d90 -Block 0004 [ 17]: a20f95889e04cc34 -Block 0004 [ 18]: ad95b5eff6f7e807 -Block 0004 [ 19]: 9c6a5409137873ec -Block 0004 [ 20]: d69f52d77ced25a0 -Block 0004 [ 21]: 30326cf9e8b26b65 -Block 0004 [ 22]: 27840208a4f1c105 -Block 0004 [ 23]: 9447a046e4644347 -Block 0004 [ 24]: 56087f6a44fdb588 -Block 0004 [ 25]: 6dc364d36cbf26d5 -Block 0004 [ 26]: 87b683d67201cdad -Block 0004 [ 27]: ba8742cda32586ce -Block 0004 [ 28]: b6cde1778051b9f3 -Block 0004 [ 29]: 1b82b268556f6c57 -Block 0004 [ 30]: 8339ec4f63995a93 -Block 0004 [ 31]: d606bc0fd42b9e00 -Block 0004 [ 32]: 15f734c2f1851101 -Block 0004 [ 33]: f506350a9337d1b1 -Block 0004 [ 34]: ddea2ea066855ca4 -Block 0004 [ 35]: 9854e88b7a91c00d -Block 0004 [ 36]: b9192978b32d53a4 -Block 0004 [ 37]: 525af839f9719cb5 -Block 0004 [ 38]: f0dd9f4c07a3c131 -Block 0004 [ 39]: 45168595c23f263c -Block 0004 [ 40]: 69b2bb5c381988d8 -Block 0004 [ 41]: 61ae296ca95aa156 -Block 0004 [ 42]: 61cc529c1199b52e -Block 0004 [ 43]: 6c7bea9a5fd4bd67 -Block 0004 [ 44]: ab7369fc537d81ee -Block 0004 [ 45]: 3cfe32d2a3865e9b -Block 0004 [ 46]: da5f06ec7db73c9d -Block 0004 [ 47]: d30bd62324bc5f48 -Block 0004 [ 48]: bdc0079a0cd32c12 -Block 0004 [ 49]: 102579dd0f6cbe7c -Block 0004 [ 50]: d28913132bdfa5a2 -Block 0004 [ 51]: 0c8d094baa236d78 -Block 0004 [ 52]: 06e461788c5b69a9 -Block 0004 [ 53]: 371dbf3107c1193b -Block 0004 [ 54]: f6aaab2550a65da8 -Block 0004 [ 55]: 428d89d340f1606f -Block 0004 [ 56]: 0533b686a16599e3 -Block 0004 [ 57]: 9b0a6ecddeea2536 -Block 0004 [ 58]: 4ec61df5ae2925ba -Block 0004 [ 59]: 889f3f5d3ab01086 -Block 0004 [ 60]: 1ba9860ad05bba5e -Block 0004 [ 61]: 44ae777798e36c5a -Block 0004 [ 62]: b2c5b481c53e9d60 -Block 0004 [ 63]: 4b880b2cf31f1b39 -Block 0004 [ 64]: 31c4ad49902e93f8 -Block 0004 [ 65]: c3406a45d218a4de -Block 0004 [ 66]: c55c240f9476ed2d -Block 0004 [ 67]: 8536df39d71e4bb2 -Block 0004 [ 68]: 880364005d870893 -Block 0004 [ 69]: f0399130b975e981 -Block 0004 [ 70]: 2a1cc94a9540bbc2 -Block 0004 [ 71]: 66ddc8498908dd94 -Block 0004 [ 72]: 29da7f4fb91fcafd -Block 0004 [ 73]: 3da5be32b39d893c -Block 0004 [ 74]: 400c926600b93260 -Block 0004 [ 75]: 3c0bc8a864c63ac5 -Block 0004 [ 76]: 1fa284b1929fedda -Block 0004 [ 77]: d8fbff92df12283a -Block 0004 [ 78]: 6f8a370ab6454744 -Block 0004 [ 79]: a8353ea2070b0cb0 -Block 0004 [ 80]: 8d1d9a211ae4a7b6 -Block 0004 [ 81]: e75caccf836fec07 -Block 0004 [ 82]: 13cd97d9ce0fd07e -Block 0004 [ 83]: a0acba9e9458bbe2 -Block 0004 [ 84]: da451f32ace6d295 -Block 0004 [ 85]: aeb5717f0b40d2a3 -Block 0004 [ 86]: 871bb5d3228b213e -Block 0004 [ 87]: e652337cacaea165 -Block 0004 [ 88]: 00827f84524518ab -Block 0004 [ 89]: 1dc3281fe4bbd871 -Block 0004 [ 90]: 070965dd4c53abbf -Block 0004 [ 91]: 01d7e50991766fb4 -Block 0004 [ 92]: 764d7031b5313c1f -Block 0004 [ 93]: a09cf477a95cb6be -Block 0004 [ 94]: 72f8e7681d5fff45 -Block 0004 [ 95]: 683674587d64b187 -Block 0004 [ 96]: b6b323e20a11c95f -Block 0004 [ 97]: 2efd915bd3a4378a -Block 0004 [ 98]: 70be9263eed7a411 -Block 0004 [ 99]: 6639b57c9775cd57 -Block 0004 [100]: 7111d121f936a543 -Block 0004 [101]: cc0465d2ded37ea0 -Block 0004 [102]: c1bc4dcc13cf1463 -Block 0004 [103]: faeaf234269d808b -Block 0004 [104]: 608c4812ec403401 -Block 0004 [105]: e6c45eb5bd0df3f5 -Block 0004 [106]: 157fc891efe07dd8 -Block 0004 [107]: f6063de8c707fbe1 -Block 0004 [108]: ea0cf9feb531ee49 -Block 0004 [109]: 7f03acb918dbed1b -Block 0004 [110]: 84d076272170fc4d -Block 0004 [111]: d630f0dab96da15f -Block 0004 [112]: cfc05aed43413a43 -Block 0004 [113]: 16cfe392a4b08a15 -Block 0004 [114]: f24f9093be143b5e -Block 0004 [115]: 4213be434fbf3ef1 -Block 0004 [116]: 8323183a4feccd4a -Block 0004 [117]: 0874e2b43461cff1 -Block 0004 [118]: 6bda6c5beef6b654 -Block 0004 [119]: b94f755575072464 -Block 0004 [120]: a0f1e43e0a95d678 -Block 0004 [121]: d99619485b84aed5 -Block 0004 [122]: 05a4613a31743eef -Block 0004 [123]: 9fb6cbf1a149fd72 -Block 0004 [124]: 9f5e4bd27a21db84 -Block 0004 [125]: de2deee92e6a36dc -Block 0004 [126]: 865c61eedf06610d -Block 0004 [127]: 5df4327e934a0615 -Block 0005 [ 0]: ebe0a110a19e35f6 -Block 0005 [ 1]: 008d2bc14ad221da -Block 0005 [ 2]: 7b650b6ffcc7419b -Block 0005 [ 3]: 3abb4c43361f8a2e -Block 0005 [ 4]: 91f87a4a3f6ee7db -Block 0005 [ 5]: 11426d9377c1fc47 -Block 0005 [ 6]: a87dceffb866d6d7 -Block 0005 [ 7]: dc1f68c91ea3b945 -Block 0005 [ 8]: 58baa73c25e5a80d -Block 0005 [ 9]: b4726199470be696 -Block 0005 [ 10]: 0f19e0f822013b8b -Block 0005 [ 11]: 5ec73451f5da8127 -Block 0005 [ 12]: e4a685a8b846beae -Block 0005 [ 13]: 7ab8a6acfb017f42 -Block 0005 [ 14]: 1b697272c549671a -Block 0005 [ 15]: e7cafbec03487054 -Block 0005 [ 16]: 6169e3164a21d81f -Block 0005 [ 17]: ebd69195322ce5f3 -Block 0005 [ 18]: c2e7ea52115ef8fe -Block 0005 [ 19]: 4505bdda7f1ec096 -Block 0005 [ 20]: e6223c84cb44d2bb -Block 0005 [ 21]: 9a66897d2f668bb1 -Block 0005 [ 22]: 361a9d11f702134c -Block 0005 [ 23]: 225333e618b38c82 -Block 0005 [ 24]: 938b95b671a477da -Block 0005 [ 25]: 12c1b35d3d957d84 -Block 0005 [ 26]: a8de7a408626987e -Block 0005 [ 27]: be99d2a21d4e6aaa -Block 0005 [ 28]: 3e00b15f24872c30 -Block 0005 [ 29]: 25da7df53480716b -Block 0005 [ 30]: d763b510a5b5176e -Block 0005 [ 31]: fb750bfaa121d443 -Block 0005 [ 32]: 29f3320b70f1fd51 -Block 0005 [ 33]: d8d0f3d810ea4631 -Block 0005 [ 34]: 249cfce46ad07796 -Block 0005 [ 35]: 48e2df9063c20c0a -Block 0005 [ 36]: d156ca43b733ee10 -Block 0005 [ 37]: 6e3211c3e811ef2e -Block 0005 [ 38]: b07c3324072f3e60 -Block 0005 [ 39]: f0876351201cd7e6 -Block 0005 [ 40]: 1d6b7c6248336fad -Block 0005 [ 41]: 711e290de918ef7e -Block 0005 [ 42]: db4cb24ab1ba3de1 -Block 0005 [ 43]: 04922f11be1c59d4 -Block 0005 [ 44]: d176c2007870606a -Block 0005 [ 45]: 3f9de1763ca7b9ac -Block 0005 [ 46]: 9e907691b4a675ef -Block 0005 [ 47]: 8a844094fdc5a88d -Block 0005 [ 48]: 511a7bdd9977d2d1 -Block 0005 [ 49]: 4c9b696660f251bf -Block 0005 [ 50]: 6564036fa992787e -Block 0005 [ 51]: e42d539963cacd5d -Block 0005 [ 52]: 21062cfef86ee74e -Block 0005 [ 53]: d3d66a92c9290c5b -Block 0005 [ 54]: e1cf3b28dbafede3 -Block 0005 [ 55]: b92371b18732fabc -Block 0005 [ 56]: 361ebd40a008b0f5 -Block 0005 [ 57]: 808be947d48db0a1 -Block 0005 [ 58]: c06627cff85764e2 -Block 0005 [ 59]: 6a5386c596fa2f1a -Block 0005 [ 60]: 2fb06a7a33185b99 -Block 0005 [ 61]: 3466d1791387669c -Block 0005 [ 62]: 6ddf4d98b1fdfdbf -Block 0005 [ 63]: a556957e3fd45eb2 -Block 0005 [ 64]: 10f86898cd368eb9 -Block 0005 [ 65]: 150e99f8016f90fa -Block 0005 [ 66]: 37ceaa78780b2975 -Block 0005 [ 67]: 53f47026278b7aa5 -Block 0005 [ 68]: 793cd8d42494022d -Block 0005 [ 69]: 28ebaa1ba5f09bb8 -Block 0005 [ 70]: 1e7e3efd8fa75642 -Block 0005 [ 71]: f74412432c5a7339 -Block 0005 [ 72]: 1e6634dab86ffc70 -Block 0005 [ 73]: 2a853b1f0398398e -Block 0005 [ 74]: b77ade9731734f4d -Block 0005 [ 75]: 5eb23b7a5395d0f5 -Block 0005 [ 76]: 65eb315d342866fb -Block 0005 [ 77]: 953b95837df8e936 -Block 0005 [ 78]: 599f63583bbde92d -Block 0005 [ 79]: 42b78d9dd0e0029f -Block 0005 [ 80]: 9f7d0390e5b45eb3 -Block 0005 [ 81]: 751ad633e588ae66 -Block 0005 [ 82]: c2d4bea00853cde0 -Block 0005 [ 83]: 4fd032806ea5b569 -Block 0005 [ 84]: fba664901a55f304 -Block 0005 [ 85]: 6c7c644ba5157365 -Block 0005 [ 86]: 23542e368ec13c64 -Block 0005 [ 87]: 04f8fadd8b735b7d -Block 0005 [ 88]: 0d145631c75c088e -Block 0005 [ 89]: eb1e0e1fe5cd7995 -Block 0005 [ 90]: deab81e9e69fcd13 -Block 0005 [ 91]: db8c1140e5e91a33 -Block 0005 [ 92]: 2fb6401714e6c913 -Block 0005 [ 93]: d5a647aae640d351 -Block 0005 [ 94]: 7ff7506e47258938 -Block 0005 [ 95]: 44e5d15a02d6f281 -Block 0005 [ 96]: 298a1c196621f326 -Block 0005 [ 97]: 8fd931f209c2a308 -Block 0005 [ 98]: 8f4b8fe6227c86d2 -Block 0005 [ 99]: 9cdb3001ef490ce4 -Block 0005 [100]: 13dde2bb569cbb44 -Block 0005 [101]: 1b0e09c4897bbb9f -Block 0005 [102]: 7956ff7a15ee636b -Block 0005 [103]: e1aafb98d48a4eb3 -Block 0005 [104]: 92f32b059f056a35 -Block 0005 [105]: 884387d7450e6955 -Block 0005 [106]: bfe97055990c8bb4 -Block 0005 [107]: 5e992b7b49084a96 -Block 0005 [108]: 28e360b2c013b884 -Block 0005 [109]: 1f9e7336eb1bb691 -Block 0005 [110]: 47c117348af2a6f8 -Block 0005 [111]: ccc5140886ca66b4 -Block 0005 [112]: 9b9c7e02d210182a -Block 0005 [113]: 4bf5e7c7b5c586d8 -Block 0005 [114]: 1b64a31ed9c6a34e -Block 0005 [115]: bfecc90bf4fa043b -Block 0005 [116]: 6e0a25e5fb276cf0 -Block 0005 [117]: c1baa5232ad374e7 -Block 0005 [118]: 4f68f109df6c02d5 -Block 0005 [119]: cb004fb5c813273b -Block 0005 [120]: fa71b52ef5384747 -Block 0005 [121]: b5a18bd9701b0c1f -Block 0005 [122]: 31e001f95dfa27db -Block 0005 [123]: d66ee543167724a2 -Block 0005 [124]: 4170180f6fa36c26 -Block 0005 [125]: 5ab82751d0014c9b -Block 0005 [126]: fdd4df1f9de608d1 -Block 0005 [127]: dbee35b29953798d -Block 0006 [ 0]: 953da22d91b4cdf1 -Block 0006 [ 1]: 9676f207e657a260 -Block 0006 [ 2]: 9060fb9cc1ee9e6f -Block 0006 [ 3]: 7e0c7d3e2a542fd3 -Block 0006 [ 4]: 6a61b82d82d10d4a -Block 0006 [ 5]: a32383166b9bcd0e -Block 0006 [ 6]: 4c3eee661bf1c858 -Block 0006 [ 7]: 0968e35bc6cccd6c -Block 0006 [ 8]: 741e38f728c12bcb -Block 0006 [ 9]: ff2f75f3742598b3 -Block 0006 [ 10]: 83ba2331f338c6e5 -Block 0006 [ 11]: a63ef474f95b8b64 -Block 0006 [ 12]: a3f5994b4d5b907b -Block 0006 [ 13]: 941c1189b8f92824 -Block 0006 [ 14]: 70aaf42c80f88f0a -Block 0006 [ 15]: 1aa7b30acb6c4b53 -Block 0006 [ 16]: 4e3b293be10ddaac -Block 0006 [ 17]: 9147f8c3764087cc -Block 0006 [ 18]: 51c784834665e149 -Block 0006 [ 19]: 360469980c63db76 -Block 0006 [ 20]: 4e95eac04f96ae83 -Block 0006 [ 21]: 2983d0f8d9631a7c -Block 0006 [ 22]: a16e8c2b0e6b6a42 -Block 0006 [ 23]: f61fa745edf7e028 -Block 0006 [ 24]: 9f706afd3abf305d -Block 0006 [ 25]: 309486cc6bf90c4f -Block 0006 [ 26]: be344cda4ca29fbf -Block 0006 [ 27]: 12b16f6034f6d56f -Block 0006 [ 28]: 4bea1e5d93ffb5aa -Block 0006 [ 29]: 903f34584a5c9d85 -Block 0006 [ 30]: eef4fb8144be4ec0 -Block 0006 [ 31]: a003f06275ca97ec -Block 0006 [ 32]: a8d5232e929c0325 -Block 0006 [ 33]: d468707146178f06 -Block 0006 [ 34]: 35afe4cf3e359f4e -Block 0006 [ 35]: c37deaea22cf78f8 -Block 0006 [ 36]: c32828ebe2f5f03f -Block 0006 [ 37]: 35544b4bc72bb7e5 -Block 0006 [ 38]: 0ff984bebbe4332f -Block 0006 [ 39]: aa90abc10b8bf925 -Block 0006 [ 40]: a30fae740369aeaa -Block 0006 [ 41]: b0d40ff0e1405b0b -Block 0006 [ 42]: 41e0ebd013434b43 -Block 0006 [ 43]: 93329fd5a2a0a615 -Block 0006 [ 44]: c5ce5a077ae78cfb -Block 0006 [ 45]: 2d7603c16f625bbe -Block 0006 [ 46]: 6d448aa77a0ba910 -Block 0006 [ 47]: 734effe2c30da157 -Block 0006 [ 48]: 6467bdbcac0a2e60 -Block 0006 [ 49]: a4a967217ec67c6e -Block 0006 [ 50]: 84088bfdd1f8fd6c -Block 0006 [ 51]: ceb0dff92ef2bf56 -Block 0006 [ 52]: e8d89cbeb4e6aafd -Block 0006 [ 53]: d7577f5276c6efff -Block 0006 [ 54]: 7b8666cbd445a194 -Block 0006 [ 55]: 283cbe1fca02ff49 -Block 0006 [ 56]: c1130c6e56caad55 -Block 0006 [ 57]: e703eb1b9cfb064b -Block 0006 [ 58]: 20681d5f25a51792 -Block 0006 [ 59]: 6b99ced7f66ff2f2 -Block 0006 [ 60]: ede2f8f94072ed04 -Block 0006 [ 61]: 35d4fdb152f85e55 -Block 0006 [ 62]: 5972cde3573436c5 -Block 0006 [ 63]: 514169dadd86b036 -Block 0006 [ 64]: dfb4a43b017afa26 -Block 0006 [ 65]: f3659113f547fc9d -Block 0006 [ 66]: f783483cc199a4cd -Block 0006 [ 67]: 880a64abd07e7226 -Block 0006 [ 68]: da74ccf3914aa25b -Block 0006 [ 69]: 0ef7529a6523ac67 -Block 0006 [ 70]: c7b2350d91c2ad1d -Block 0006 [ 71]: 00fe4d981f08cda3 -Block 0006 [ 72]: f109e3bea43047b4 -Block 0006 [ 73]: b11a591cabae2527 -Block 0006 [ 74]: 8584e130c4aa28f6 -Block 0006 [ 75]: e6cc066b517f3bf2 -Block 0006 [ 76]: c61d848b3604f406 -Block 0006 [ 77]: a6e481e6f62d417e -Block 0006 [ 78]: 98374fb8b642277d -Block 0006 [ 79]: 3cd691a8e368c1a3 -Block 0006 [ 80]: f5e4b070e60c6371 -Block 0006 [ 81]: ae704193c93f858a -Block 0006 [ 82]: 91ba194d1daa0855 -Block 0006 [ 83]: 94733c71d403736b -Block 0006 [ 84]: 2ba3e7fd9c6a3cd5 -Block 0006 [ 85]: 1afb61c7bf872e72 -Block 0006 [ 86]: d3725b5b472693e9 -Block 0006 [ 87]: 5a37d40a1ea35b2f -Block 0006 [ 88]: fb9b6b1b8c900513 -Block 0006 [ 89]: 9ccf2941f4f80c3c -Block 0006 [ 90]: 0c987b97df5adf27 -Block 0006 [ 91]: 76174bbba6dbfe6f -Block 0006 [ 92]: 94aac5d0f17cb183 -Block 0006 [ 93]: 3c1c6d2e3ba1ee47 -Block 0006 [ 94]: 830b0554211273d4 -Block 0006 [ 95]: c0be78c4cfb035d6 -Block 0006 [ 96]: 6d73af45c4760ff7 -Block 0006 [ 97]: 7f1c9d632ff58ddf -Block 0006 [ 98]: 4d28f566ec1be67b -Block 0006 [ 99]: ddddae2263706ff7 -Block 0006 [100]: b7d1ea8ff5b40ed9 -Block 0006 [101]: 060f1e1a15cf24c0 -Block 0006 [102]: b8ef978d9367132b -Block 0006 [103]: 75051540922cf5f7 -Block 0006 [104]: 9acab99071475dca -Block 0006 [105]: 9cf6fa671ba3c5e8 -Block 0006 [106]: da306220d6d92f3f -Block 0006 [107]: 96f370ed24c0a715 -Block 0006 [108]: eef65720ca00c62c -Block 0006 [109]: d0a4896fef4fbb76 -Block 0006 [110]: 34cb832b72571c57 -Block 0006 [111]: b6f372cf70846a46 -Block 0006 [112]: 089b00b51e7e7bb3 -Block 0006 [113]: 3a67f4f3a4e2ba6d -Block 0006 [114]: 3efe256bac84de46 -Block 0006 [115]: 7e12bd4d6af4d9f3 -Block 0006 [116]: 6081aefcc1b62159 -Block 0006 [117]: 9eee22656bd81016 -Block 0006 [118]: ab2ec3390f6456a0 -Block 0006 [119]: 7a3555752b91ecb3 -Block 0006 [120]: a32e7434fd10c015 -Block 0006 [121]: 1475b5ce252f4f53 -Block 0006 [122]: d75c74f6e22b18f0 -Block 0006 [123]: ea383d46ae76a8f5 -Block 0006 [124]: b9439a5a2a0342d7 -Block 0006 [125]: 0866fc6c0bc150dd -Block 0006 [126]: 1a48b3e6e8e7128f -Block 0006 [127]: f99acc084060ccc6 -Block 0007 [ 0]: 002beefd6242b6fc -Block 0007 [ 1]: ccd632cc9923d203 -Block 0007 [ 2]: 811448a01c1cee37 -Block 0007 [ 3]: bdb5d29914d0fd4b -Block 0007 [ 4]: aa8a6e84e5b9862d -Block 0007 [ 5]: 5cfe285ab264bdd1 -Block 0007 [ 6]: 9e007b855f8c4198 -Block 0007 [ 7]: a26ae8c98fd60957 -Block 0007 [ 8]: 8898a87f9d06ea7c -Block 0007 [ 9]: fc5224caf8054b51 -Block 0007 [ 10]: 6da6869d93083849 -Block 0007 [ 11]: c1816abe2cb148d3 -Block 0007 [ 12]: 6d526b4c8d7a7194 -Block 0007 [ 13]: b9b0ee4d9e221379 -Block 0007 [ 14]: 5eb5a2c637d58307 -Block 0007 [ 15]: 699550723f3335b9 -Block 0007 [ 16]: 8bd3efa71abca2da -Block 0007 [ 17]: 286304f7c483ef5f -Block 0007 [ 18]: 4b9273444ac054aa -Block 0007 [ 19]: 6665269cc5fe3c67 -Block 0007 [ 20]: 028c169ce962a690 -Block 0007 [ 21]: 932821205bda6248 -Block 0007 [ 22]: 12e7e8141030e59f -Block 0007 [ 23]: 6e53a28d9d6ed667 -Block 0007 [ 24]: a1b5387b05bbf7aa -Block 0007 [ 25]: eb32cc77b091f595 -Block 0007 [ 26]: ce2c166ab58cbbe0 -Block 0007 [ 27]: 03b1037106b358e2 -Block 0007 [ 28]: 3f92863ea1f614d0 -Block 0007 [ 29]: f05841d5cd327092 -Block 0007 [ 30]: 91e0fd9692bff005 -Block 0007 [ 31]: afd5f332341584c6 -Block 0007 [ 32]: 15071f83f2203c21 -Block 0007 [ 33]: 43ebdc1864818a2a -Block 0007 [ 34]: 0156f8f1493fce68 -Block 0007 [ 35]: f64e6ebe8e490ce8 -Block 0007 [ 36]: 6eed6c06e9e02dd6 -Block 0007 [ 37]: 9922babb8a661298 -Block 0007 [ 38]: b813c6bddbb4ac83 -Block 0007 [ 39]: 5b698fe61fc5208f -Block 0007 [ 40]: e706c9f769eba549 -Block 0007 [ 41]: df0f332b5b107970 -Block 0007 [ 42]: 0da80b0ad28623de -Block 0007 [ 43]: cf850bcda6e3de54 -Block 0007 [ 44]: 169055a58391024e -Block 0007 [ 45]: f92b9ffcf48a04df -Block 0007 [ 46]: 4124880c61e033e2 -Block 0007 [ 47]: e8345420f69b7b09 -Block 0007 [ 48]: db8e71e39ff08397 -Block 0007 [ 49]: 05bdc9300e0865d2 -Block 0007 [ 50]: 3109c1b72e9e5fc0 -Block 0007 [ 51]: f12bee6915c31c92 -Block 0007 [ 52]: c7d8812129b1e13f -Block 0007 [ 53]: 63fe835118a4449c -Block 0007 [ 54]: 66134014e4f99a06 -Block 0007 [ 55]: e03ed3e8aed721b1 -Block 0007 [ 56]: be7ddd16a45ed362 -Block 0007 [ 57]: 5d85f460481ef486 -Block 0007 [ 58]: 0d4e3d285acb2128 -Block 0007 [ 59]: a999dea8ad365308 -Block 0007 [ 60]: ca02a8b6803967e2 -Block 0007 [ 61]: a1c4d8818baeeb35 -Block 0007 [ 62]: 555ce5d78543ede5 -Block 0007 [ 63]: eb9ff1a5add111e3 -Block 0007 [ 64]: 439f9aea1de62ee3 -Block 0007 [ 65]: 7b59bf01ff510d8c -Block 0007 [ 66]: da2ac155c61c1f0b -Block 0007 [ 67]: 331dbc2c66eed4f2 -Block 0007 [ 68]: 652a5f3ab977b23b -Block 0007 [ 69]: 83fb468bb3e13696 -Block 0007 [ 70]: 03de2ebdd3f9bb1c -Block 0007 [ 71]: 5b3ca2644926db6c -Block 0007 [ 72]: 297776bedec9267b -Block 0007 [ 73]: 95beda56a6edbb35 -Block 0007 [ 74]: 94071492eece3348 -Block 0007 [ 75]: d77a89f14e33d1ee -Block 0007 [ 76]: d76fd7c32602756e -Block 0007 [ 77]: 1200fa9a61602f57 -Block 0007 [ 78]: 574bec69a352b0db -Block 0007 [ 79]: d42f7ae3ce87fc4e -Block 0007 [ 80]: a217f4ec297fe743 -Block 0007 [ 81]: 0d01f7578cf0e679 -Block 0007 [ 82]: ec97b5ce481abc89 -Block 0007 [ 83]: 656c1293bab962fb -Block 0007 [ 84]: 297a9721b48fa834 -Block 0007 [ 85]: 70a5ff29c7941f90 -Block 0007 [ 86]: b60f45feda3af7a6 -Block 0007 [ 87]: 548bdd7d053a03bd -Block 0007 [ 88]: 62d72d1ef6df5827 -Block 0007 [ 89]: 6131ae7350b40cc0 -Block 0007 [ 90]: 6b9f43233ba759c6 -Block 0007 [ 91]: 176cdac2adb09b47 -Block 0007 [ 92]: 6267a0329806fa44 -Block 0007 [ 93]: 3c305808bd0d2120 -Block 0007 [ 94]: 6479e3f470857aca -Block 0007 [ 95]: 8b0cf70ea2dc68d0 -Block 0007 [ 96]: 3de9c929d4af52fb -Block 0007 [ 97]: f80508a3f0cf5428 -Block 0007 [ 98]: 515b50830dc5d290 -Block 0007 [ 99]: bdcd51b2125a83ec -Block 0007 [100]: 3ed75ff8432271e0 -Block 0007 [101]: 4ba6ec3635b0e76b -Block 0007 [102]: 9ded925bce57397c -Block 0007 [103]: b93bdb8173bed393 -Block 0007 [104]: a11d019347a2c33c -Block 0007 [105]: 94101a31465b3284 -Block 0007 [106]: 7479e1eb888e7500 -Block 0007 [107]: b92a49c6d49f27bf -Block 0007 [108]: adf40d53776ed568 -Block 0007 [109]: f53fbe73cda6090f -Block 0007 [110]: 9b808347790c5d5a -Block 0007 [111]: 9622af5b138e5d69 -Block 0007 [112]: 4b659ba374ae26c0 -Block 0007 [113]: 24b1b1604d43976f -Block 0007 [114]: 1f8a68ffcab10d30 -Block 0007 [115]: 4535ac37b39b03b8 -Block 0007 [116]: 8f7f3080deaf81a1 -Block 0007 [117]: 603995246b14f01b -Block 0007 [118]: a780b701f2faaa04 -Block 0007 [119]: 156703383b497d9f -Block 0007 [120]: 38f0ec51b9bb66e0 -Block 0007 [121]: 1036342f66765314 -Block 0007 [122]: eb7c88a00e41ace8 -Block 0007 [123]: 9845e713fc5c9e5d -Block 0007 [124]: 1c99a9eaec15012c -Block 0007 [125]: 86fc425ad1459f8c -Block 0007 [126]: ecff41d17bc36118 -Block 0007 [127]: 0a65099375079ce5 -Block 0008 [ 0]: c7b8373a03afcf19 -Block 0008 [ 1]: a909269230364d43 -Block 0008 [ 2]: d799ffd1c5da04bd -Block 0008 [ 3]: 05f61178010cbb0b -Block 0008 [ 4]: 64b06d70c562fe17 -Block 0008 [ 5]: aa26efa251b45eb5 -Block 0008 [ 6]: 043edbf927768e4c -Block 0008 [ 7]: 4687854c9c446387 -Block 0008 [ 8]: 2ae6746e9e695849 -Block 0008 [ 9]: d632eaddeed40e2e -Block 0008 [ 10]: 2e1894229225f690 -Block 0008 [ 11]: cc681f3a01d12db0 -Block 0008 [ 12]: 59aa54aacd5118eb -Block 0008 [ 13]: b329a0950a899a89 -Block 0008 [ 14]: 49e3b4972c0de6f3 -Block 0008 [ 15]: 202fae02c2e5620a -Block 0008 [ 16]: f95b327c27fc70f3 -Block 0008 [ 17]: 3d5bb13789a7f840 -Block 0008 [ 18]: ca538a32e5cf05d7 -Block 0008 [ 19]: 6adc8c09af9cdd36 -Block 0008 [ 20]: 8009e1c4be9c7f1a -Block 0008 [ 21]: b6d9ebf3902cc509 -Block 0008 [ 22]: edfdc70b68ffe682 -Block 0008 [ 23]: 85971773ea2e2aa4 -Block 0008 [ 24]: fd5713a4dd2aae2f -Block 0008 [ 25]: 7fc21515c6515c23 -Block 0008 [ 26]: 134b73c32ec830e7 -Block 0008 [ 27]: 16835d88c1333f50 -Block 0008 [ 28]: 3bb27ca7d7a87a53 -Block 0008 [ 29]: 95714e2ec1a0baa0 -Block 0008 [ 30]: cc22ea124de03f5c -Block 0008 [ 31]: 6904cc3dfb20281f -Block 0008 [ 32]: 01f0d8396bee58ef -Block 0008 [ 33]: 01eec7dd2eff4865 -Block 0008 [ 34]: ed2bc2842d0add18 -Block 0008 [ 35]: 939c7b2dfe867802 -Block 0008 [ 36]: c5f57f1b42747a1f -Block 0008 [ 37]: 18af1227ebd86903 -Block 0008 [ 38]: 29b7dc33247912c4 -Block 0008 [ 39]: 00f4e97989cc3d8b -Block 0008 [ 40]: 61dd12b31336dd1d -Block 0008 [ 41]: 4b03857af3a06d71 -Block 0008 [ 42]: 725514d41421a49b -Block 0008 [ 43]: 23b3cbb357607d19 -Block 0008 [ 44]: 9b3927ecce07ceb9 -Block 0008 [ 45]: d0b7796042bfa8c6 -Block 0008 [ 46]: dd05d92323d8f813 -Block 0008 [ 47]: edf698eca5b99165 -Block 0008 [ 48]: b1dfdf82b4674811 -Block 0008 [ 49]: d5ca255656a63e19 -Block 0008 [ 50]: 197aac7dc09b8972 -Block 0008 [ 51]: d8d7a090740cf39a -Block 0008 [ 52]: b3ba2e7e524e0333 -Block 0008 [ 53]: 15ee29644b30bc96 -Block 0008 [ 54]: 12659f1a6a71b53b -Block 0008 [ 55]: e660b364e9e01413 -Block 0008 [ 56]: d8e60ba470f76e03 -Block 0008 [ 57]: 2268390a9c96548c -Block 0008 [ 58]: c2718c9dad08f162 -Block 0008 [ 59]: 65873efcb59a5197 -Block 0008 [ 60]: 2e05ebb8441f3edc -Block 0008 [ 61]: 6a9d2c0ab8c851db -Block 0008 [ 62]: ad24c928e658d046 -Block 0008 [ 63]: 50b6fc4bb8747b9b -Block 0008 [ 64]: 9be93e96d85b3f3a -Block 0008 [ 65]: c5ddc41b9c0c0433 -Block 0008 [ 66]: 5951b4a1ef885444 -Block 0008 [ 67]: dda7ec0d8457ebdf -Block 0008 [ 68]: 3ea34e7424121003 -Block 0008 [ 69]: 6351dfbe0f2744ef -Block 0008 [ 70]: baae70fdb538a0eb -Block 0008 [ 71]: 4e3a6085ef5f6c36 -Block 0008 [ 72]: bc0b3847702a388c -Block 0008 [ 73]: 2632f243eae0de51 -Block 0008 [ 74]: 83f4c3031c53da8f -Block 0008 [ 75]: 7ca1d5c056c3212c -Block 0008 [ 76]: e91d5c35bf2ac359 -Block 0008 [ 77]: 6ef5fcb669f8ba32 -Block 0008 [ 78]: a2d6070fb37dcea8 -Block 0008 [ 79]: d97f93802d983edb -Block 0008 [ 80]: 6f8d6d93927e937f -Block 0008 [ 81]: 539b8ba74e47a85a -Block 0008 [ 82]: d267a050f43e6edd -Block 0008 [ 83]: 9d606704b2663688 -Block 0008 [ 84]: 8b2648fb1289be9a -Block 0008 [ 85]: 21423b5e0d4e0114 -Block 0008 [ 86]: 502ea60aafcca859 -Block 0008 [ 87]: 2a71e295504afee6 -Block 0008 [ 88]: e27ca4bbe595d9c9 -Block 0008 [ 89]: 5b6f28b95c8ef12d -Block 0008 [ 90]: fa7883e79e4ebc9d -Block 0008 [ 91]: 74e9bd98da31842a -Block 0008 [ 92]: e7b9a0a7b5a3bf38 -Block 0008 [ 93]: dd3e398aebf1a877 -Block 0008 [ 94]: 07695e81f360ae4e -Block 0008 [ 95]: b6b30c9f4a29c2e8 -Block 0008 [ 96]: a9e06a63186894a6 -Block 0008 [ 97]: 7eb26e252eaa9995 -Block 0008 [ 98]: 93c64e8f318d7406 -Block 0008 [ 99]: 3adec85056ae3778 -Block 0008 [100]: 27f889dd9c85f165 -Block 0008 [101]: bd35ba0e789faee7 -Block 0008 [102]: 2c7c406b25d07593 -Block 0008 [103]: fb8a4b223e6131d3 -Block 0008 [104]: b5420c0981e94c1c -Block 0008 [105]: c2c33dc496497614 -Block 0008 [106]: 29df3353953d0207 -Block 0008 [107]: 5549a76b170723a4 -Block 0008 [108]: c20d3ae7f46d1982 -Block 0008 [109]: 422a49338347bbf8 -Block 0008 [110]: bfdec4da70aaedda -Block 0008 [111]: d91860f96421332f -Block 0008 [112]: 7b83b4377f28e210 -Block 0008 [113]: 45883aaa3c712c74 -Block 0008 [114]: 5b9bf0574f48e65a -Block 0008 [115]: 1ca2c6c126b50d21 -Block 0008 [116]: 9c1d4d9a7b519d7a -Block 0008 [117]: d1b495c6e63178de -Block 0008 [118]: c7f5aedc253cc38a -Block 0008 [119]: c10d67ddd0010dcd -Block 0008 [120]: d26f4968efdf04e4 -Block 0008 [121]: 254d3c73de94f530 -Block 0008 [122]: ee5fe9b21a65c3c2 -Block 0008 [123]: 0da2241e73889e92 -Block 0008 [124]: 15e1ecdf444ae9d9 -Block 0008 [125]: 5a0c111eb92c79ed -Block 0008 [126]: be331ef95f53d838 -Block 0008 [127]: 77474ea5a67680d4 -Block 0009 [ 0]: df0b91c201ac9942 -Block 0009 [ 1]: 6f84a33c554aa710 -Block 0009 [ 2]: 35ba5e6d84d3003f -Block 0009 [ 3]: b9456bd3dbb0a7f0 -Block 0009 [ 4]: 414d82dc7ee872f1 -Block 0009 [ 5]: a691e74cb34e90e1 -Block 0009 [ 6]: 221c06abd68740bc -Block 0009 [ 7]: ffad697908129e72 -Block 0009 [ 8]: 62a15c20d7cd2102 -Block 0009 [ 9]: d673060f04c04527 -Block 0009 [ 10]: cb6edf766a1bb01a -Block 0009 [ 11]: 0935c95a41b7811c -Block 0009 [ 12]: 448cb94eb2908b5b -Block 0009 [ 13]: ec311c1e42dce2e6 -Block 0009 [ 14]: 62982ffdc03b54a1 -Block 0009 [ 15]: a717faed7ee8fe1f -Block 0009 [ 16]: ba087cf64c4f938b -Block 0009 [ 17]: 6c895b58388893e9 -Block 0009 [ 18]: 3aca50c898a8b894 -Block 0009 [ 19]: 6f42216ee699b812 -Block 0009 [ 20]: f1a0099713f54a5b -Block 0009 [ 21]: e8e9afff66b861a8 -Block 0009 [ 22]: d5a17492de8da115 -Block 0009 [ 23]: 88acec5c381891ef -Block 0009 [ 24]: b094197c22566803 -Block 0009 [ 25]: 09139c3d2e44ffd2 -Block 0009 [ 26]: a41e2680e6f77d5c -Block 0009 [ 27]: 9e5dfcf66915ec5c -Block 0009 [ 28]: ece54cdfb9c923bb -Block 0009 [ 29]: 6b26d1a619995eb8 -Block 0009 [ 30]: 1fde8b780d9e7644 -Block 0009 [ 31]: 5b20ab006f62f2ea -Block 0009 [ 32]: e7fb9f5efb397851 -Block 0009 [ 33]: ec03581a4debc462 -Block 0009 [ 34]: 2739621c0dc6a51c -Block 0009 [ 35]: 43a677040f16655f -Block 0009 [ 36]: 8a86af39727c0788 -Block 0009 [ 37]: 67f66e4a6f77a496 -Block 0009 [ 38]: 3706c9a8b8ce7405 -Block 0009 [ 39]: 7c64362723e93e2a -Block 0009 [ 40]: d5ff005efd480c4e -Block 0009 [ 41]: 35f1600688530496 -Block 0009 [ 42]: 6aab73eb7272c1f7 -Block 0009 [ 43]: 6e4358e5606a2975 -Block 0009 [ 44]: a9f7d62b60fde122 -Block 0009 [ 45]: c8feb2c548dc793d -Block 0009 [ 46]: 9fe4708f7b2674b6 -Block 0009 [ 47]: 77a810d3a075fb57 -Block 0009 [ 48]: 3c0aa6c3fd7c85c5 -Block 0009 [ 49]: f2ffdbe790966f93 -Block 0009 [ 50]: 124ac9d5b645bc85 -Block 0009 [ 51]: 3060cc4d585e3d3e -Block 0009 [ 52]: 6dc9615348e9a3a2 -Block 0009 [ 53]: 853c7f38065107a9 -Block 0009 [ 54]: 421c82c549418317 -Block 0009 [ 55]: 3876db61dfb07871 -Block 0009 [ 56]: df06b1a43b9f66e4 -Block 0009 [ 57]: dff0f687fb927041 -Block 0009 [ 58]: 28cea38d6bd0ad43 -Block 0009 [ 59]: 0919aefbb62cae91 -Block 0009 [ 60]: 5746f327f0d2c535 -Block 0009 [ 61]: bb1365ac1e29ed76 -Block 0009 [ 62]: 93e745dad8a15140 -Block 0009 [ 63]: 3e3b193f8039d2fc -Block 0009 [ 64]: 85f0282c2d6a7563 -Block 0009 [ 65]: 0817805a055c26d1 -Block 0009 [ 66]: bfc51a96ba75a093 -Block 0009 [ 67]: 373fa1d846b62445 -Block 0009 [ 68]: e5cca7f5e9a9cbfa -Block 0009 [ 69]: a9ae844f885d9717 -Block 0009 [ 70]: 033be7201ffbb7fb -Block 0009 [ 71]: fe195a9b641b8799 -Block 0009 [ 72]: 6faba5c8e09d08a7 -Block 0009 [ 73]: 741b0907be8041ad -Block 0009 [ 74]: a96e074f55d6e5d4 -Block 0009 [ 75]: c6357f6ea02ffebd -Block 0009 [ 76]: b73816039f6bfb08 -Block 0009 [ 77]: f751a43d44b91ae2 -Block 0009 [ 78]: 1c3f09adcb6ba95d -Block 0009 [ 79]: cf75b0d707c9076d -Block 0009 [ 80]: 0a36fbe33c195174 -Block 0009 [ 81]: 453d81dcc483bdfd -Block 0009 [ 82]: 167edac1e41e46a7 -Block 0009 [ 83]: 328951c98589b0c0 -Block 0009 [ 84]: 160b54035815a09b -Block 0009 [ 85]: 00c1a36ce87d19ea -Block 0009 [ 86]: ef89588811143eae -Block 0009 [ 87]: 937f4f7560fce6a6 -Block 0009 [ 88]: 6cdec3ff6d2fa1e5 -Block 0009 [ 89]: 1a4ce03b83a4756e -Block 0009 [ 90]: da04b76d964e22c1 -Block 0009 [ 91]: a687274ca5a25edb -Block 0009 [ 92]: 84550fb207c15e94 -Block 0009 [ 93]: 55750f5fc80b47cd -Block 0009 [ 94]: cad236b1b597349e -Block 0009 [ 95]: 4e727ce399eff6d4 -Block 0009 [ 96]: 9d505481b2e3a51d -Block 0009 [ 97]: d5dfe11e287ed9d8 -Block 0009 [ 98]: 8ce7404ff599fc0d -Block 0009 [ 99]: 470204f510acde3d -Block 0009 [100]: 7ba66fe889c92854 -Block 0009 [101]: 87a5e69764636033 -Block 0009 [102]: 1e9001e57e736fd8 -Block 0009 [103]: 314909f6a2145aeb -Block 0009 [104]: efcf1e079bd105d6 -Block 0009 [105]: 8d242a18dcaa54e8 -Block 0009 [106]: a0a0573d9ce69ea3 -Block 0009 [107]: 938f115268396030 -Block 0009 [108]: c0378868d849d6e3 -Block 0009 [109]: ff1ee578eb3efd31 -Block 0009 [110]: d99a19b5bab336b5 -Block 0009 [111]: 1a7ba6b9c5872d86 -Block 0009 [112]: f9def2da6991a973 -Block 0009 [113]: 66a1e2cfaf0e0306 -Block 0009 [114]: 08fc893a0791480b -Block 0009 [115]: 1a73d52f72c63b82 -Block 0009 [116]: a33f2756e9253bbf -Block 0009 [117]: db0eff2fe9b13cd1 -Block 0009 [118]: 20973b7c758a661b -Block 0009 [119]: 2ff8806c93d75f4d -Block 0009 [120]: 9f1b9a5847d11da0 -Block 0009 [121]: 7d3b5cf7a4b7480d -Block 0009 [122]: 1d9fc165c758470b -Block 0009 [123]: 20b09f8a91462fef -Block 0009 [124]: 2129bc88a3e6a062 -Block 0009 [125]: f60f313a41a62bc4 -Block 0009 [126]: b2b2b34de8ebc90b -Block 0009 [127]: c6fd6b970f06e693 -Block 0010 [ 0]: 7f28485fae41c61c -Block 0010 [ 1]: fa0e3699cacc16d6 -Block 0010 [ 2]: a39c1aeed6d8b1c5 -Block 0010 [ 3]: 2883a312a09ad027 -Block 0010 [ 4]: cd3dd30e9b73b638 -Block 0010 [ 5]: 0c230d1074fe6f1f -Block 0010 [ 6]: 872452b98d232b2d -Block 0010 [ 7]: d775c1dacfaa7291 -Block 0010 [ 8]: 4d18e07ff6ca6eca -Block 0010 [ 9]: c348c6fbe35488f1 -Block 0010 [ 10]: 0c5f31be7aa5dd25 -Block 0010 [ 11]: 19d25fc35b7d789c -Block 0010 [ 12]: 7d366311f524a40a -Block 0010 [ 13]: fd82d9e641be9ce2 -Block 0010 [ 14]: f36648db501fc410 -Block 0010 [ 15]: 1fc0a7744abcfa1d -Block 0010 [ 16]: 2a74b93921014e03 -Block 0010 [ 17]: b3a6cfb22b82411f -Block 0010 [ 18]: 51e31c21bf3b2e34 -Block 0010 [ 19]: 6fb5abccf04dd2ec -Block 0010 [ 20]: 6dec81c70a782857 -Block 0010 [ 21]: 7d6c3372de7fbc24 -Block 0010 [ 22]: b5b6db12d3950a7e -Block 0010 [ 23]: 0e302839a31adc16 -Block 0010 [ 24]: 7cfba0473276dfc8 -Block 0010 [ 25]: e76109ead5cb5713 -Block 0010 [ 26]: 977e8bb574655f2f -Block 0010 [ 27]: c018185c2e3194dc -Block 0010 [ 28]: af61a2e2ebd8d8b4 -Block 0010 [ 29]: ee452ff8638d2b76 -Block 0010 [ 30]: ad55d266b0a40fb7 -Block 0010 [ 31]: 9889b7b971559a8e -Block 0010 [ 32]: a0fc23672a1e3bdf -Block 0010 [ 33]: 22ce2f07ad81e8de -Block 0010 [ 34]: 36ad96edda3bc8ca -Block 0010 [ 35]: 798d57c8c93f90e8 -Block 0010 [ 36]: e92afe4eabe2a1fa -Block 0010 [ 37]: 2dbb943d1de32244 -Block 0010 [ 38]: 84185c9ff10b4bcd -Block 0010 [ 39]: 25dae614f6f1e22b -Block 0010 [ 40]: ff3eee5a96aaf550 -Block 0010 [ 41]: 81381c491228560f -Block 0010 [ 42]: 803068857fd344e6 -Block 0010 [ 43]: c262bae576bdc7a9 -Block 0010 [ 44]: dfcec333f8b614b2 -Block 0010 [ 45]: 0aea3363bc3f344f -Block 0010 [ 46]: e18f0e0fcfa93d3c -Block 0010 [ 47]: 163e0a5dc3385a98 -Block 0010 [ 48]: 33c39e1b90c79bd6 -Block 0010 [ 49]: 5103572896584153 -Block 0010 [ 50]: 96623b63a57b0bcc -Block 0010 [ 51]: 8e5ee0c45887b09e -Block 0010 [ 52]: 7d6a8e036120ab2d -Block 0010 [ 53]: 32e46fc380011af5 -Block 0010 [ 54]: 557a7fb0b35b654f -Block 0010 [ 55]: 1d761afb9840f219 -Block 0010 [ 56]: afdad24da5bb7960 -Block 0010 [ 57]: bec28f0e94eec4a2 -Block 0010 [ 58]: b7fa86989ab8d5b4 -Block 0010 [ 59]: 66a4445fc047769a -Block 0010 [ 60]: 77e19aa42c9d10dc -Block 0010 [ 61]: 07a2a97a497dddca -Block 0010 [ 62]: b3571484eb5cdd0d -Block 0010 [ 63]: e175aa9b42cf3f42 -Block 0010 [ 64]: ddca20a6db44c602 -Block 0010 [ 65]: ef338426828143e3 -Block 0010 [ 66]: dd54632ca39231d3 -Block 0010 [ 67]: da1a2aa2859745fe -Block 0010 [ 68]: 74c97c8b2f33815a -Block 0010 [ 69]: c587421d57acf7f7 -Block 0010 [ 70]: 40d9dac9740b5349 -Block 0010 [ 71]: 0079c459c34cbc1f -Block 0010 [ 72]: 11e22f1682a3d113 -Block 0010 [ 73]: 9f49acd929fb413a -Block 0010 [ 74]: 8d55e456f55ed16d -Block 0010 [ 75]: cde96d37e1873857 -Block 0010 [ 76]: d1085cc95b3f405c -Block 0010 [ 77]: 37d477127dbef7bb -Block 0010 [ 78]: ead42fea0cf6cc80 -Block 0010 [ 79]: 044df94d21ddf550 -Block 0010 [ 80]: c53012b904c24725 -Block 0010 [ 81]: 95525031d1d04639 -Block 0010 [ 82]: 3863c49fc1087d2c -Block 0010 [ 83]: e6cf4f4ff7ce84da -Block 0010 [ 84]: bf23a90a9ae33ca2 -Block 0010 [ 85]: c47710c3a39f7fb6 -Block 0010 [ 86]: 948a6ccc2dfebdde -Block 0010 [ 87]: 7e021070b78e487a -Block 0010 [ 88]: 8ca241ffb7134f11 -Block 0010 [ 89]: 53cc15226ffa4c7b -Block 0010 [ 90]: bda5cfd2e8dd1214 -Block 0010 [ 91]: 8013e83689e4af42 -Block 0010 [ 92]: 832f073728faedfc -Block 0010 [ 93]: 2b696689ba886915 -Block 0010 [ 94]: f0122a38f0387b7b -Block 0010 [ 95]: d937260fe6a46278 -Block 0010 [ 96]: b623d52be1e296b9 -Block 0010 [ 97]: b49b26e8a40c5ae9 -Block 0010 [ 98]: 070f2c1b5c164fbd -Block 0010 [ 99]: ae118485ef77d8a2 -Block 0010 [100]: 1ccd3e8d85b1349d -Block 0010 [101]: df681302bae21e79 -Block 0010 [102]: a3e3e386c1566cd8 -Block 0010 [103]: dbf2c62d8af9d80b -Block 0010 [104]: 3fbd2fe86a0b078c -Block 0010 [105]: fd47ca2204a21f5b -Block 0010 [106]: 29cae7cb46b8a80b -Block 0010 [107]: 591c6568a46874b5 -Block 0010 [108]: 3f9df5a1623a987c -Block 0010 [109]: 11078c2b31dc9255 -Block 0010 [110]: 573467550986e576 -Block 0010 [111]: 5e6d3a4952a53546 -Block 0010 [112]: f0028177e38f421f -Block 0010 [113]: faf300a788ac70f8 -Block 0010 [114]: 1d79e8592eccf877 -Block 0010 [115]: 9f54739a8ac85f76 -Block 0010 [116]: a9e12fbae12e7a33 -Block 0010 [117]: 2584032801e3d559 -Block 0010 [118]: 11ff32939bd33fc2 -Block 0010 [119]: dd1e2b237b40a4d5 -Block 0010 [120]: 40b45c342afb5ed2 -Block 0010 [121]: 61bebe9cc3085fd4 -Block 0010 [122]: f4414aa37eab423e -Block 0010 [123]: 883c290ebbd8386e -Block 0010 [124]: ceeee1728db78c38 -Block 0010 [125]: 1e9954eaf177ed07 -Block 0010 [126]: 80018b0ffa4ada6b -Block 0010 [127]: 69ea0fe2bdb6aa7a -Block 0011 [ 0]: d823f2ebb073e169 -Block 0011 [ 1]: 46519cc7f32a3184 -Block 0011 [ 2]: 4f848c9df11c5dda -Block 0011 [ 3]: 0f95888556fe6484 -Block 0011 [ 4]: 5911f3c5a44cdb8f -Block 0011 [ 5]: 047ccd76c309cd9d -Block 0011 [ 6]: 8c7b47757a961e06 -Block 0011 [ 7]: a04e66f30643b51a -Block 0011 [ 8]: 7e9952d3090e28c7 -Block 0011 [ 9]: 27affecba3781f12 -Block 0011 [ 10]: 9655174693d550f4 -Block 0011 [ 11]: ee56b2a2a45941c6 -Block 0011 [ 12]: 8444478ca6156892 -Block 0011 [ 13]: 2744ee006e719b9d -Block 0011 [ 14]: c206b56f3ad73389 -Block 0011 [ 15]: 90eeab895899816c -Block 0011 [ 16]: 47b96ec2889a0e0b -Block 0011 [ 17]: 42ad9f254176d076 -Block 0011 [ 18]: f2f0875c81641f2c -Block 0011 [ 19]: d22978dd69845640 -Block 0011 [ 20]: ac102ad40d55b4f2 -Block 0011 [ 21]: 7dd10f15753e0c69 -Block 0011 [ 22]: a5af151b885e7e1c -Block 0011 [ 23]: 0f61a9031d9ad58a -Block 0011 [ 24]: 96147a38e8dd8e86 -Block 0011 [ 25]: 03b33d8df8bd05c1 -Block 0011 [ 26]: 2eb2d3b258561281 -Block 0011 [ 27]: 10340f5f1464ceda -Block 0011 [ 28]: e84e6ce48d91c47c -Block 0011 [ 29]: 2f52565f4b181ee7 -Block 0011 [ 30]: 99a673ad0f52411c -Block 0011 [ 31]: d238746f84d376a7 -Block 0011 [ 32]: ca2e030fb3e59fac -Block 0011 [ 33]: b33a1e2a6e6c32c8 -Block 0011 [ 34]: 4f5c8d8b74603beb -Block 0011 [ 35]: 5815912b2102decb -Block 0011 [ 36]: a6342080776818bc -Block 0011 [ 37]: 65465d7fe8ba063c -Block 0011 [ 38]: 924c3979ef6625a7 -Block 0011 [ 39]: 5f7b5b4d3f1a7de7 -Block 0011 [ 40]: 1387c91b9e3db3c2 -Block 0011 [ 41]: 3f969d2f0cf22e3d -Block 0011 [ 42]: 2ca2cda6f702248a -Block 0011 [ 43]: 07c264c15cb53a0a -Block 0011 [ 44]: 4d68922b1bf0578f -Block 0011 [ 45]: 9f4c622f27a9a767 -Block 0011 [ 46]: 551068996b9b9536 -Block 0011 [ 47]: 5ce843c9978c4d5f -Block 0011 [ 48]: d2af7fa4b7eb3eca -Block 0011 [ 49]: 4f1f0be1f941743a -Block 0011 [ 50]: b4ac8888be21332c -Block 0011 [ 51]: 270213a33fd89c67 -Block 0011 [ 52]: 4c9a215ddea4eebd -Block 0011 [ 53]: d0d8fb405477e881 -Block 0011 [ 54]: 3228f4ef397151a0 -Block 0011 [ 55]: a65c58eff39fa3d3 -Block 0011 [ 56]: 69c1497ca3b35d50 -Block 0011 [ 57]: 6b3aefd106898e22 -Block 0011 [ 58]: f4c3551419449f2b -Block 0011 [ 59]: a83c18e589503f1c -Block 0011 [ 60]: c97a73e6930cd38c -Block 0011 [ 61]: d11ab42796550a96 -Block 0011 [ 62]: 21bb952c8d1522ba -Block 0011 [ 63]: b3efb673edd0a50f -Block 0011 [ 64]: 6f3405964b106ed3 -Block 0011 [ 65]: 0fd159cc65a4e29f -Block 0011 [ 66]: a446f1dadfe504ce -Block 0011 [ 67]: 09bf99d9e804173e -Block 0011 [ 68]: 8470e09c51c6888c -Block 0011 [ 69]: e322d994f8b8e653 -Block 0011 [ 70]: 03e5107f547300e7 -Block 0011 [ 71]: 231647ee75a19f77 -Block 0011 [ 72]: 792ebd93791dd994 -Block 0011 [ 73]: 6684d2596987264d -Block 0011 [ 74]: 990e8bb7a7203131 -Block 0011 [ 75]: e432392c73dfc169 -Block 0011 [ 76]: 6aa53e7f024864bb -Block 0011 [ 77]: 90b67a6404e4845e -Block 0011 [ 78]: cbb23f233d34e66f -Block 0011 [ 79]: ff24fa04d9641ec6 -Block 0011 [ 80]: 778a4af4e74881db -Block 0011 [ 81]: 55907243faa69d05 -Block 0011 [ 82]: 4d4eabb494518c3b -Block 0011 [ 83]: 51c8c63a21531614 -Block 0011 [ 84]: cb1f11f105d6527a -Block 0011 [ 85]: 8fa5d40948ca6b4b -Block 0011 [ 86]: aeec5faad1b394de -Block 0011 [ 87]: 566679c3acdfdc7f -Block 0011 [ 88]: 6aeaa509ee1684f3 -Block 0011 [ 89]: e5e1f3b93ab07726 -Block 0011 [ 90]: 8cc62c076b72fe44 -Block 0011 [ 91]: f050819d8070c2d8 -Block 0011 [ 92]: a1654238bfb3e902 -Block 0011 [ 93]: 3e144a6601da32e4 -Block 0011 [ 94]: 8533f4d5df28925b -Block 0011 [ 95]: a0bf7983730213ee -Block 0011 [ 96]: 2d567f30d0b78b29 -Block 0011 [ 97]: fc8ffa1db1747998 -Block 0011 [ 98]: 7a79aea920f07bf1 -Block 0011 [ 99]: 60af46d99fb415d9 -Block 0011 [100]: 98a8e3eac4feab2f -Block 0011 [101]: cde6076dc1e41778 -Block 0011 [102]: 81b0b241fbfd5723 -Block 0011 [103]: 54d86946e10611d4 -Block 0011 [104]: be570072842ef00c -Block 0011 [105]: da8ba670370d14d9 -Block 0011 [106]: c9a8c79266e18357 -Block 0011 [107]: 4662021e96128f26 -Block 0011 [108]: b8890ef03513d9bd -Block 0011 [109]: b1e765b25512b72b -Block 0011 [110]: acc815dc214f985a -Block 0011 [111]: f2ff2d27f6197b46 -Block 0011 [112]: b0a04bbe8189bd51 -Block 0011 [113]: 038adddc71436c5c -Block 0011 [114]: 78be2a6b143beef9 -Block 0011 [115]: d47ef4fc71fd2449 -Block 0011 [116]: 1ac251a8b10bdaa5 -Block 0011 [117]: 38b1bdca6eb395b5 -Block 0011 [118]: 91cdd37a5d6d2917 -Block 0011 [119]: 6468c1d2a90a4b95 -Block 0011 [120]: f38298e9fbc627c5 -Block 0011 [121]: 281974ebb62f612f -Block 0011 [122]: dae84d62736df3f7 -Block 0011 [123]: 883fd538755b4678 -Block 0011 [124]: 0cb05ee801034510 -Block 0011 [125]: 380a81fcaae4ffe7 -Block 0011 [126]: 1c67d5d638d87f6e -Block 0011 [127]: b411a4d3d2ec2e9a -Block 0012 [ 0]: 255a9eb92510e44c -Block 0012 [ 1]: ab09530dd4233898 -Block 0012 [ 2]: cc05fd96a7df19de -Block 0012 [ 3]: 5da89b50eb7b0b3a -Block 0012 [ 4]: 312be76cd0558c61 -Block 0012 [ 5]: 6f5bcb47082a3df8 -Block 0012 [ 6]: 9f3c3393b98d51af -Block 0012 [ 7]: 5920d6c03f222d41 -Block 0012 [ 8]: 6f8a719295acfb80 -Block 0012 [ 9]: 6d7eed73e7fe9237 -Block 0012 [ 10]: 50ef8a3b6ebca6e9 -Block 0012 [ 11]: 99630c77a40fd8a3 -Block 0012 [ 12]: 9f9c89e408a22382 -Block 0012 [ 13]: e7e28e5874c52548 -Block 0012 [ 14]: 622a178029f344dc -Block 0012 [ 15]: b67d1c8303474a0a -Block 0012 [ 16]: 8bcede5c0ce2b4bb -Block 0012 [ 17]: a8b113091a2d1018 -Block 0012 [ 18]: 6fb492543aef040b -Block 0012 [ 19]: 0fdd1b28f42219fd -Block 0012 [ 20]: 8747821d660abab9 -Block 0012 [ 21]: 1911fb0f8d6a8859 -Block 0012 [ 22]: 729b9d38a3a185ac -Block 0012 [ 23]: 22154ac1267c55f6 -Block 0012 [ 24]: 768581ee4cbf975a -Block 0012 [ 25]: d25cdb1b4eab5257 -Block 0012 [ 26]: c8d1be9a40ebb82a -Block 0012 [ 27]: 90fdbe85e0f2fa15 -Block 0012 [ 28]: 054f461c93f2cec6 -Block 0012 [ 29]: a7496a0a5b20aeff -Block 0012 [ 30]: e01336457c5f1c2f -Block 0012 [ 31]: 69b6b95906a2eeaf -Block 0012 [ 32]: af2080da4ac007b2 -Block 0012 [ 33]: dc62b604cb5a4602 -Block 0012 [ 34]: 2b75460cd6b53759 -Block 0012 [ 35]: 9c947680980c66e9 -Block 0012 [ 36]: 2046e8f3c6a206f6 -Block 0012 [ 37]: c7e1eb7be31fa0b7 -Block 0012 [ 38]: 10b8eb7cc13e0991 -Block 0012 [ 39]: bea9cad97d149702 -Block 0012 [ 40]: b024e48f310144e0 -Block 0012 [ 41]: b9567a121acd2beb -Block 0012 [ 42]: 13b54389c87bd0b9 -Block 0012 [ 43]: e840a59948b3ec6f -Block 0012 [ 44]: 4909028080039634 -Block 0012 [ 45]: 0940ce4447d5a1e3 -Block 0012 [ 46]: 7ace92df7b8ad234 -Block 0012 [ 47]: 70a2a6faedf67a19 -Block 0012 [ 48]: d95b9fa5d551d6ca -Block 0012 [ 49]: d28fea58f9706160 -Block 0012 [ 50]: 4f6a0afa04d55adc -Block 0012 [ 51]: 4aec847e4b35b540 -Block 0012 [ 52]: 4798eedea9043c96 -Block 0012 [ 53]: 29fcb2a949e28343 -Block 0012 [ 54]: 50fee2618212eac1 -Block 0012 [ 55]: a2deb2055db58493 -Block 0012 [ 56]: 2130cae1cfaa3b52 -Block 0012 [ 57]: ed2a5651338720be -Block 0012 [ 58]: 74f9f622c7c4cb2c -Block 0012 [ 59]: c7f914e1e1ee88e9 -Block 0012 [ 60]: 4dd5bdd2e0dfb82d -Block 0012 [ 61]: 761e7529cfa5d50a -Block 0012 [ 62]: aee434fec94bea69 -Block 0012 [ 63]: 4fb829ad4214b9a3 -Block 0012 [ 64]: 45a6f3618a66137b -Block 0012 [ 65]: 759f870df4bb89ff -Block 0012 [ 66]: d5d451ab02f2fb17 -Block 0012 [ 67]: 065ee57f45efe776 -Block 0012 [ 68]: c440fda2ebae75a1 -Block 0012 [ 69]: 3619f9566b18cb66 -Block 0012 [ 70]: 4f694a31736272c0 -Block 0012 [ 71]: 83dcedfe72f8a5a6 -Block 0012 [ 72]: fd5ed48b69e26467 -Block 0012 [ 73]: c3ad2a9085b2350a -Block 0012 [ 74]: 0fa2a974fa66c2c5 -Block 0012 [ 75]: 824b1a0c0e320544 -Block 0012 [ 76]: 481a05e369d0b679 -Block 0012 [ 77]: 88d130e03144508c -Block 0012 [ 78]: 8fee335301144988 -Block 0012 [ 79]: 07497f7f4f8f897f -Block 0012 [ 80]: ebadd1b8bab2e986 -Block 0012 [ 81]: 1fdc42aa71ec04af -Block 0012 [ 82]: c830f16a2bce327f -Block 0012 [ 83]: 5c3422bc14a97050 -Block 0012 [ 84]: 555dc50f03762d67 -Block 0012 [ 85]: 465d7bb016a6feb5 -Block 0012 [ 86]: 2846817750c5d35d -Block 0012 [ 87]: 39543ba8b29341bc -Block 0012 [ 88]: b57a159c3bb2983b -Block 0012 [ 89]: 83a82c2208e51f99 -Block 0012 [ 90]: 60af61a328b09433 -Block 0012 [ 91]: d88f44d23202be03 -Block 0012 [ 92]: d766959e1b39aee3 -Block 0012 [ 93]: f8f2f9fef0993a41 -Block 0012 [ 94]: 3d4ef27f410409b0 -Block 0012 [ 95]: be039e6fec5957e7 -Block 0012 [ 96]: 088f51f404d0521d -Block 0012 [ 97]: 9b65dc9f2cc2aede -Block 0012 [ 98]: dc7536661a38a7a6 -Block 0012 [ 99]: bdd0ab6161ff4b1f -Block 0012 [100]: 389e53c15ff15cfd -Block 0012 [101]: 5defd83b8336d489 -Block 0012 [102]: 82302e22360576cc -Block 0012 [103]: 63dbfb98dc759bf0 -Block 0012 [104]: d320499ef0240bff -Block 0012 [105]: 867e9e1e82eeea0b -Block 0012 [106]: 11892cf6c3b16ea4 -Block 0012 [107]: 97425b3f8cc22294 -Block 0012 [108]: 6b60c1ee9c86bcac -Block 0012 [109]: 8f670c048b878783 -Block 0012 [110]: 1cbc5ee997483f3f -Block 0012 [111]: 4e5f800e1f0ed9fb -Block 0012 [112]: ac4d54811845bca5 -Block 0012 [113]: 83d6a4180f6c8246 -Block 0012 [114]: 87152434ac5293c0 -Block 0012 [115]: d396cbfe0bc020d8 -Block 0012 [116]: 332f6ef4428d5b67 -Block 0012 [117]: 24cc04221d2e1699 -Block 0012 [118]: effe0e0dce6c104f -Block 0012 [119]: 1deeabd514dc5327 -Block 0012 [120]: 7d59839dee7245b2 -Block 0012 [121]: 0f700c906b853913 -Block 0012 [122]: a2d8cc9aaf4d3706 -Block 0012 [123]: b7e258900647c992 -Block 0012 [124]: 5bec1c3ad11b4eb1 -Block 0012 [125]: 6c80045a4fee4b05 -Block 0012 [126]: e1552dff02e38133 -Block 0012 [127]: 679e80e021c84ecd -Block 0013 [ 0]: 1723ee8ce9fe1cac -Block 0013 [ 1]: d2f1cf9a4efa84b5 -Block 0013 [ 2]: 21587dbfcad9c4f5 -Block 0013 [ 3]: 5f871948d46daee6 -Block 0013 [ 4]: 068d97e3ae68ef93 -Block 0013 [ 5]: d538dcb328807ab7 -Block 0013 [ 6]: 113a40488be45963 -Block 0013 [ 7]: 37012839c0b5d310 -Block 0013 [ 8]: 8d6f6941e2bd76e9 -Block 0013 [ 9]: aa2ffed5d74653c8 -Block 0013 [ 10]: e9164847b7b793b8 -Block 0013 [ 11]: b7539783560cb3ab -Block 0013 [ 12]: 8de392422de03196 -Block 0013 [ 13]: 7b38cb4bbe90d7f9 -Block 0013 [ 14]: 20a86166f8a23ddb -Block 0013 [ 15]: 8b97d267f05b6cfa -Block 0013 [ 16]: 911169ae5649dd39 -Block 0013 [ 17]: 768d987294702a52 -Block 0013 [ 18]: 8bdfb68d467ab96d -Block 0013 [ 19]: 9bf0c3c34022df10 -Block 0013 [ 20]: bc787b4af1321929 -Block 0013 [ 21]: a8a08098fa5e3ea1 -Block 0013 [ 22]: 7b2bb14c18b18dac -Block 0013 [ 23]: 2bf9072250cfbd58 -Block 0013 [ 24]: 10712cfa1552dc46 -Block 0013 [ 25]: 1fdedfc0b64c31dd -Block 0013 [ 26]: 7e366ca0e007c421 -Block 0013 [ 27]: f73cb101f76605d5 -Block 0013 [ 28]: c7f412423441e907 -Block 0013 [ 29]: d287f4339efbb55b -Block 0013 [ 30]: 9769f3f35d0f638b -Block 0013 [ 31]: 35208e3a65e08351 -Block 0013 [ 32]: 36fddf107a016fc4 -Block 0013 [ 33]: be86c0425851e7b0 -Block 0013 [ 34]: b941755a95f42f24 -Block 0013 [ 35]: aca5df3e21444d03 -Block 0013 [ 36]: a4a0384e3a78c869 -Block 0013 [ 37]: 010bbb7f8f85b95b -Block 0013 [ 38]: e55b719afc352f94 -Block 0013 [ 39]: acae794987894403 -Block 0013 [ 40]: bd806954f12b3ba8 -Block 0013 [ 41]: 7da659f1b0c29ad2 -Block 0013 [ 42]: e3b91d833ae0ecf4 -Block 0013 [ 43]: 8347b8bb6a793d24 -Block 0013 [ 44]: b488b65397e96b6d -Block 0013 [ 45]: 5be99ed08c53a17d -Block 0013 [ 46]: a1ca5de1c1efcbae -Block 0013 [ 47]: 689c9bdec537707d -Block 0013 [ 48]: cf934aabeb0cb430 -Block 0013 [ 49]: fb07ca7786243a5a -Block 0013 [ 50]: 9777c81195f714d5 -Block 0013 [ 51]: 74d6b3d255765f83 -Block 0013 [ 52]: d00c729a6e17621e -Block 0013 [ 53]: a5286754e36a2203 -Block 0013 [ 54]: 7adcc00eeff68ddc -Block 0013 [ 55]: 9a2e26a365eff54d -Block 0013 [ 56]: 9cabb250d5fa0e23 -Block 0013 [ 57]: 0938223fe49c9b73 -Block 0013 [ 58]: 21de6e98149643e5 -Block 0013 [ 59]: 333f16a2bafe6b2e -Block 0013 [ 60]: 8cb6959855ac3912 -Block 0013 [ 61]: d0a62347d3e64023 -Block 0013 [ 62]: 0a60c2b8e08acf42 -Block 0013 [ 63]: 1ef0860ef26f3312 -Block 0013 [ 64]: 30d01dfc4917ece0 -Block 0013 [ 65]: d85ea32036c4831c -Block 0013 [ 66]: b28f30aee13c8a12 -Block 0013 [ 67]: 65fa8757876a80ed -Block 0013 [ 68]: 29042b6a76ac23ec -Block 0013 [ 69]: 72b48bf0a7a0e204 -Block 0013 [ 70]: 894b73d9ef351322 -Block 0013 [ 71]: b2c87ae7c7e6d450 -Block 0013 [ 72]: 48cd6faeb75b7817 -Block 0013 [ 73]: 68461c999cea7fea -Block 0013 [ 74]: 1214f93aae6260ed -Block 0013 [ 75]: 0cb603e467252906 -Block 0013 [ 76]: 9cd6831e38c65b5a -Block 0013 [ 77]: 65c0a8e3497f195f -Block 0013 [ 78]: 7b0d1aecc3c1795c -Block 0013 [ 79]: 62993f6f4b2c06a8 -Block 0013 [ 80]: 5641d96b7e258f5a -Block 0013 [ 81]: 8420cc555ff8fe86 -Block 0013 [ 82]: 7bb68c81a5e30422 -Block 0013 [ 83]: 61e4006de902467f -Block 0013 [ 84]: c2e36bc580b71a6d -Block 0013 [ 85]: 797567bb6f7b5f08 -Block 0013 [ 86]: c1c88c12cd86592e -Block 0013 [ 87]: 0f381934cb0eb20b -Block 0013 [ 88]: e3fd14470d2fb3b1 -Block 0013 [ 89]: 5ad7c316da0754ab -Block 0013 [ 90]: 2fd4793ba5ce45d3 -Block 0013 [ 91]: 160895ed4541c2ea -Block 0013 [ 92]: e4c8a7fc865ef8fc -Block 0013 [ 93]: c20c133ca98bc6dc -Block 0013 [ 94]: 35006a7edd252d4a -Block 0013 [ 95]: 087391913b15a62e -Block 0013 [ 96]: df00d5e689294f1a -Block 0013 [ 97]: 91574a55e924a080 -Block 0013 [ 98]: 31b5d04701a2f55d -Block 0013 [ 99]: cc6255b36e700629 -Block 0013 [100]: e23b9c536e5388ad -Block 0013 [101]: 4f73f1b7fb7c103b -Block 0013 [102]: 59e564baecaac210 -Block 0013 [103]: 593a399aa604bb7e -Block 0013 [104]: 4f844dcf478e5a28 -Block 0013 [105]: c5a527ec4bf2ceef -Block 0013 [106]: 646f87228d0f36ac -Block 0013 [107]: ef7b4c95a2c43d9a -Block 0013 [108]: c7175c798fc1cebc -Block 0013 [109]: fb091b378f8cd986 -Block 0013 [110]: 3e6ad6b16c8dd94d -Block 0013 [111]: 5781768ab765ed4e -Block 0013 [112]: f82a9a6a9cbb2a7a -Block 0013 [113]: 88213573967f2637 -Block 0013 [114]: f9fdec29c0653e8b -Block 0013 [115]: 28029582a0c7a607 -Block 0013 [116]: 08f4d18472a711b7 -Block 0013 [117]: 46f99803f13ab2a0 -Block 0013 [118]: b8850f6995e1e41c -Block 0013 [119]: baaeaa2334a63967 -Block 0013 [120]: d833632166dfe229 -Block 0013 [121]: af0d68b77fb4b447 -Block 0013 [122]: 2ae378be285f6729 -Block 0013 [123]: 627e3307d7300095 -Block 0013 [124]: 200c8902704a45f8 -Block 0013 [125]: 343efdcf7c4ffa75 -Block 0013 [126]: bb6dc112ef5e114b -Block 0013 [127]: d159229bbf65f47c -Block 0014 [ 0]: 3dd943aa31f9a0b1 -Block 0014 [ 1]: c5bc6fd1670258cb -Block 0014 [ 2]: 18e6da67d66b9d53 -Block 0014 [ 3]: 81b4aa65e75e9b58 -Block 0014 [ 4]: d6cd172a4942404c -Block 0014 [ 5]: bdfe9d1b90dc4cf7 -Block 0014 [ 6]: e774682eba357510 -Block 0014 [ 7]: 9bf9e106f2cd11f2 -Block 0014 [ 8]: cbb5a04871e1a89f -Block 0014 [ 9]: 546e0edc7e7fc7e3 -Block 0014 [ 10]: cc7f7879341493c4 -Block 0014 [ 11]: fc96d04ca1ae2938 -Block 0014 [ 12]: 287b2d8c7efff3f1 -Block 0014 [ 13]: 20bc2acd3175e0c3 -Block 0014 [ 14]: 6cac2eb9def0d010 -Block 0014 [ 15]: b25cd833fd0b0574 -Block 0014 [ 16]: 88ea49aca89c0d1d -Block 0014 [ 17]: 52f984ec11c6cbc5 -Block 0014 [ 18]: 103c897b024d6b14 -Block 0014 [ 19]: a8c5efeb3fbe112f -Block 0014 [ 20]: 8ac8deaf1292e525 -Block 0014 [ 21]: 7ce42b5ef1ce3574 -Block 0014 [ 22]: b79c78fc9d327ad0 -Block 0014 [ 23]: 2188e50592bc5be2 -Block 0014 [ 24]: 495d110805fadcd4 -Block 0014 [ 25]: 2a9d1c998c7c3540 -Block 0014 [ 26]: 0395da083459ffd4 -Block 0014 [ 27]: 498ecca4b155842c -Block 0014 [ 28]: e381623e361cf077 -Block 0014 [ 29]: 8d07c9891cc2f309 -Block 0014 [ 30]: d02d5dc9f6cca3cb -Block 0014 [ 31]: fed2d25cec28e05c -Block 0014 [ 32]: c9e92f090bf0d04c -Block 0014 [ 33]: 47a0990fa9157507 -Block 0014 [ 34]: 7e1bf44a16c871bb -Block 0014 [ 35]: 9f6c048c95381368 -Block 0014 [ 36]: 8063de969373331e -Block 0014 [ 37]: 7324b36e0b9f90de -Block 0014 [ 38]: a07493f91f829c82 -Block 0014 [ 39]: 23cae39877ead327 -Block 0014 [ 40]: 8dd2a700ff49698b -Block 0014 [ 41]: 676482fa3081bc05 -Block 0014 [ 42]: cad059f5f87db5ce -Block 0014 [ 43]: dc8480c0389142cd -Block 0014 [ 44]: f116d8e5fe656eec -Block 0014 [ 45]: cf3f2882b2e22c4a -Block 0014 [ 46]: 7e168a8d46c08b5c -Block 0014 [ 47]: 13b2d64679c8f22f -Block 0014 [ 48]: 6c2725e46c4c33ee -Block 0014 [ 49]: 20c13cc1814b51b5 -Block 0014 [ 50]: caa64bc4dbc09904 -Block 0014 [ 51]: 054539afaca09ca4 -Block 0014 [ 52]: 4f8bcdc220da40c7 -Block 0014 [ 53]: 700931050e282836 -Block 0014 [ 54]: 2e05c642fb88539a -Block 0014 [ 55]: bb8e2fa2b15b66cd -Block 0014 [ 56]: 166a88d4afe3b3a6 -Block 0014 [ 57]: f576f0924284caf9 -Block 0014 [ 58]: 09340b71709aee33 -Block 0014 [ 59]: b82d179ec03a5d78 -Block 0014 [ 60]: c532af4d7e5cc29a -Block 0014 [ 61]: 7f67a63723bd08d0 -Block 0014 [ 62]: 7a277c9c32390651 -Block 0014 [ 63]: 7998e89ea54051cb -Block 0014 [ 64]: 51aec979c6fb169d -Block 0014 [ 65]: e38fa59e7f37e8a0 -Block 0014 [ 66]: e6e78774d14022e6 -Block 0014 [ 67]: c09c69967c73416f -Block 0014 [ 68]: 94d52919c6ab33bd -Block 0014 [ 69]: 7db4b6c8e6f8791a -Block 0014 [ 70]: f8b7978d2cb7365b -Block 0014 [ 71]: 4d85b5c76fa67522 -Block 0014 [ 72]: 483495d94dcec2fc -Block 0014 [ 73]: ec09c3a7b1e17f3a -Block 0014 [ 74]: 596bb09b4d921b21 -Block 0014 [ 75]: 850a53a2f88792fa -Block 0014 [ 76]: 9d99c3421c09d6c2 -Block 0014 [ 77]: 24453adc8bf994cc -Block 0014 [ 78]: bd76bcd6b7a011d5 -Block 0014 [ 79]: 396ca885fbec8c16 -Block 0014 [ 80]: fc6bb33caee725ee -Block 0014 [ 81]: 2a080b313e6c4f2d -Block 0014 [ 82]: 86ec7cb50654b1ba -Block 0014 [ 83]: 0b92269a68747a49 -Block 0014 [ 84]: a98e133d367630a6 -Block 0014 [ 85]: 75b450bfdad3ef46 -Block 0014 [ 86]: 6813552bd0497e69 -Block 0014 [ 87]: f07fe4afdb8ea39d -Block 0014 [ 88]: 54d6068dbeb342e0 -Block 0014 [ 89]: a15aaf21c44ee8d0 -Block 0014 [ 90]: b63ee2cbe2c95663 -Block 0014 [ 91]: 166f73caabf49c4c -Block 0014 [ 92]: 76c8835f88e53e8c -Block 0014 [ 93]: ba720e37091d56c5 -Block 0014 [ 94]: f2fb3992b75480ea -Block 0014 [ 95]: 70100e90ad4018bc -Block 0014 [ 96]: e05af6957917481d -Block 0014 [ 97]: 22d8926bca1eea81 -Block 0014 [ 98]: 41e68fc80ea5f78a -Block 0014 [ 99]: 0db147a5541b7be8 -Block 0014 [100]: 6fa71cc135c40318 -Block 0014 [101]: c3a5d25e006850f5 -Block 0014 [102]: 78dd6b4586b53616 -Block 0014 [103]: 956f727c8d423a5a -Block 0014 [104]: 13a2c0b038967c05 -Block 0014 [105]: 81188925c367f9ae -Block 0014 [106]: 61d42f2b5c2bafff -Block 0014 [107]: 94e70ed21445617c -Block 0014 [108]: e3c84a00a8a71f34 -Block 0014 [109]: 9dfd45ca105a6a1c -Block 0014 [110]: 6b4b2fa24d42cf81 -Block 0014 [111]: 5d61008fbef90a71 -Block 0014 [112]: 6d901238e1b52e4e -Block 0014 [113]: 5babe5134ec46268 -Block 0014 [114]: 69f295aedc81d28d -Block 0014 [115]: faccc7d986350652 -Block 0014 [116]: e974271561377bb4 -Block 0014 [117]: 0e06e727ece35f86 -Block 0014 [118]: 03649503edee0552 -Block 0014 [119]: 3a19e21c2c08225f -Block 0014 [120]: 983714b28acfa352 -Block 0014 [121]: aec143ba15c3ae13 -Block 0014 [122]: eda04483d75a4442 -Block 0014 [123]: 1915bf9e51452160 -Block 0014 [124]: 14bbe5004ccafb94 -Block 0014 [125]: 160191ad91cfa45c -Block 0014 [126]: 5797b27c188b9f46 -Block 0014 [127]: 07ef94bd73c522ec -Block 0015 [ 0]: 1fcd62604579cf9a -Block 0015 [ 1]: f7472d4cf4966feb -Block 0015 [ 2]: 40070f3f8b371041 -Block 0015 [ 3]: 1c5f4fa46291cff6 -Block 0015 [ 4]: 50d96202fa98746f -Block 0015 [ 5]: 28bae24d7859cd0f -Block 0015 [ 6]: 6f29c3214bf42a3f -Block 0015 [ 7]: 0f43542ad0d68908 -Block 0015 [ 8]: 64f7623b19206023 -Block 0015 [ 9]: 0e5bb2b9695c3f2b -Block 0015 [ 10]: 4bd6cf02b5053f13 -Block 0015 [ 11]: 3cf06693539f0209 -Block 0015 [ 12]: 933c76f4958f88c7 -Block 0015 [ 13]: 224ba767c721b85e -Block 0015 [ 14]: bd89d30e7b07f405 -Block 0015 [ 15]: 621659f508fea9c1 -Block 0015 [ 16]: 93b29390eb009b18 -Block 0015 [ 17]: cb0b2c63381c225e -Block 0015 [ 18]: a9df8f2f799b3895 -Block 0015 [ 19]: 9540633258d0559b -Block 0015 [ 20]: 5799b367a1035c27 -Block 0015 [ 21]: ab039ef579d12f72 -Block 0015 [ 22]: fd4e1f97bbcec3f9 -Block 0015 [ 23]: 58020468792e3149 -Block 0015 [ 24]: f80fbbef9020ba14 -Block 0015 [ 25]: edb184adc37f8bac -Block 0015 [ 26]: ddf6607be258d11b -Block 0015 [ 27]: d6d3c7b02fd17a59 -Block 0015 [ 28]: 61f878685218fbfe -Block 0015 [ 29]: c4e7098d87c5131e -Block 0015 [ 30]: e3b30f966a024bcf -Block 0015 [ 31]: 7042a343ad0ac25d -Block 0015 [ 32]: 57c131ab1ce93055 -Block 0015 [ 33]: 587673bd57cbc69f -Block 0015 [ 34]: 027e042e33b06a63 -Block 0015 [ 35]: 1f8adfff35f9340c -Block 0015 [ 36]: 7d4d3c87affa8399 -Block 0015 [ 37]: 4ee69b09b0b7ff8c -Block 0015 [ 38]: 7362cbcb388e62fb -Block 0015 [ 39]: 1f610ec02a68ba5b -Block 0015 [ 40]: 9f7de6ce0b8ed8ab -Block 0015 [ 41]: ba792317ef6dbc5c -Block 0015 [ 42]: 1132f78837fea094 -Block 0015 [ 43]: 40a59b89aa43d01e -Block 0015 [ 44]: 6a09803f185e3ff2 -Block 0015 [ 45]: 07c1eecad1350467 -Block 0015 [ 46]: 09d90f88782c0bfe -Block 0015 [ 47]: b35c6cfa35224654 -Block 0015 [ 48]: 823bce98edaaecba -Block 0015 [ 49]: cbafd6a0c0bb6e02 -Block 0015 [ 50]: 61fe96f3b326f598 -Block 0015 [ 51]: 4fb52b9081149314 -Block 0015 [ 52]: 91663e8113a6ce4e -Block 0015 [ 53]: d476a59721dd319f -Block 0015 [ 54]: e4ccc1ce980d0c4c -Block 0015 [ 55]: f25acea299080098 -Block 0015 [ 56]: e90608f35587edff -Block 0015 [ 57]: aefcf2950ba5b9d9 -Block 0015 [ 58]: cc1af8155c48305f -Block 0015 [ 59]: 53dcfac38ec8f86f -Block 0015 [ 60]: fc1bb1f2e32d255b -Block 0015 [ 61]: 99284548c15668e5 -Block 0015 [ 62]: 27a476f03f858b6f -Block 0015 [ 63]: b825e395361306bc -Block 0015 [ 64]: dac2f0f879838706 -Block 0015 [ 65]: 386a43788954e7b6 -Block 0015 [ 66]: 1386add44c82e486 -Block 0015 [ 67]: 08f3bc30f205f92a -Block 0015 [ 68]: 472237068205e714 -Block 0015 [ 69]: 1201daecc5585bf1 -Block 0015 [ 70]: c5220e46003ba5af -Block 0015 [ 71]: c868b77f92aa8ee9 -Block 0015 [ 72]: a420eaa74ae15349 -Block 0015 [ 73]: 012441dcfc778c24 -Block 0015 [ 74]: e17ee3e175498905 -Block 0015 [ 75]: a95c4b9354624bd9 -Block 0015 [ 76]: 9fbfee215c9f6c86 -Block 0015 [ 77]: cc06de59a8c1d3cd -Block 0015 [ 78]: 15de5b29f117cd89 -Block 0015 [ 79]: c5afb057b3707956 -Block 0015 [ 80]: 46ddbeb2548e5444 -Block 0015 [ 81]: 7acaa8b02a4ee9d1 -Block 0015 [ 82]: f2c310c24529d4fd -Block 0015 [ 83]: 4687e251ff0c69de -Block 0015 [ 84]: 0637bec2b4fa9428 -Block 0015 [ 85]: cf3cf91402099626 -Block 0015 [ 86]: f5367cfdb8e40c50 -Block 0015 [ 87]: fee6d52ad443fd1f -Block 0015 [ 88]: 3729210175b2e368 -Block 0015 [ 89]: 61034e7d4b15c174 -Block 0015 [ 90]: e967558ab3fb8207 -Block 0015 [ 91]: 1b5d9942a291afc5 -Block 0015 [ 92]: 0042a21711dfe84e -Block 0015 [ 93]: c7e5cc3dfae41eb5 -Block 0015 [ 94]: 8d6815ea8462e1e0 -Block 0015 [ 95]: 24ddc84f6012c07a -Block 0015 [ 96]: dde6c9697b197fb7 -Block 0015 [ 97]: c1d334ede0e974a0 -Block 0015 [ 98]: 9b6e88f1fac64efc -Block 0015 [ 99]: 73a77f1cec717036 -Block 0015 [100]: 00ae8968991efbc1 -Block 0015 [101]: 2fcd04ae7f546d1d -Block 0015 [102]: 0a740ec11d3a5148 -Block 0015 [103]: 45b310eb7fd15383 -Block 0015 [104]: 4c958457fa24116a -Block 0015 [105]: 03da5f6480bda485 -Block 0015 [106]: 7f35c38b67402824 -Block 0015 [107]: 656b4a01fd263d60 -Block 0015 [108]: aad8afd7d59def4f -Block 0015 [109]: 75cf46c914b75c59 -Block 0015 [110]: ed93be8debefe186 -Block 0015 [111]: 9b7ec89183978119 -Block 0015 [112]: e20f3d6e8843d5c1 -Block 0015 [113]: d7bb812401bebff1 -Block 0015 [114]: 3f8d6dd1ecc81f66 -Block 0015 [115]: bc14386a3526f895 -Block 0015 [116]: 7e5b6f713419c4c1 -Block 0015 [117]: 2a64698fce16995d -Block 0015 [118]: d000adb7e6c0e4cd -Block 0015 [119]: 434f679a9fc3e1fe -Block 0015 [120]: dd426ee945045809 -Block 0015 [121]: 65aae23f6aea9ad2 -Block 0015 [122]: 7143ebecafad3dca -Block 0015 [123]: da4bd54be8467ce8 -Block 0015 [124]: f0fa70e0d98c6d2b -Block 0015 [125]: aea09c38188881df -Block 0015 [126]: 0e157482fd1280cd -Block 0015 [127]: 2ff51beaf585df53 -Block 0016 [ 0]: 828f2c485352fa60 -Block 0016 [ 1]: ee9c2f3cdcdb75e7 -Block 0016 [ 2]: 6d2e391e86d67ea9 -Block 0016 [ 3]: 596b9e719c06cc50 -Block 0016 [ 4]: 975e16e18ae5361c -Block 0016 [ 5]: 5c298c05b5f32e6e -Block 0016 [ 6]: 2916891dda24445a -Block 0016 [ 7]: 9f4a2af86a69d3e2 -Block 0016 [ 8]: 9d73dc719f872257 -Block 0016 [ 9]: b85fdf131fd717bf -Block 0016 [ 10]: 684eb6e9ed1c01e2 -Block 0016 [ 11]: 58839608215647dd -Block 0016 [ 12]: 206f268b4bb14be4 -Block 0016 [ 13]: 3d5b535329a6e403 -Block 0016 [ 14]: 2d568898552d4f8d -Block 0016 [ 15]: cfa37381a03a351c -Block 0016 [ 16]: c5028c29947c2d50 -Block 0016 [ 17]: 5a1d933fbd3848d5 -Block 0016 [ 18]: f59bf46a0f063ed1 -Block 0016 [ 19]: f6918f04111ddf7e -Block 0016 [ 20]: 7c1a166bb214a687 -Block 0016 [ 21]: 030c31f7244caa61 -Block 0016 [ 22]: cdb9751e424616cd -Block 0016 [ 23]: 4f3781a5f53bfa20 -Block 0016 [ 24]: 3b738ad910526fe5 -Block 0016 [ 25]: 34ab1ab51eb39bbf -Block 0016 [ 26]: 17f0896ca1d91ba2 -Block 0016 [ 27]: b26a95d6456610bc -Block 0016 [ 28]: 03dc598e5cb3b7bb -Block 0016 [ 29]: e1fb90ce6575dec7 -Block 0016 [ 30]: 51d6e111b898b9c9 -Block 0016 [ 31]: 3f4558387cd2857d -Block 0016 [ 32]: 2ac861cb9daba66e -Block 0016 [ 33]: fda318969d2509d3 -Block 0016 [ 34]: d1ab2a61acf0255f -Block 0016 [ 35]: 0a9e98014ff5cf4b -Block 0016 [ 36]: ff43d5718bf7cbb3 -Block 0016 [ 37]: 72c67b78b2e7f5bd -Block 0016 [ 38]: a86c7fe600e056bd -Block 0016 [ 39]: db522fb8a02ae5b5 -Block 0016 [ 40]: e1e0e75d8068687f -Block 0016 [ 41]: 3c941e212ba6b1e9 -Block 0016 [ 42]: 45569ae66e23158f -Block 0016 [ 43]: df5c11c7b63709ae -Block 0016 [ 44]: 983865fb4f8604c9 -Block 0016 [ 45]: 7e9b885b83d8778d -Block 0016 [ 46]: 111f961443264301 -Block 0016 [ 47]: 9cfd8ed196e60d9e -Block 0016 [ 48]: bf7213b901a84b8e -Block 0016 [ 49]: c978661dccd27fff -Block 0016 [ 50]: 332866198ac75a46 -Block 0016 [ 51]: 1c2a325ed328f960 -Block 0016 [ 52]: 3c90439149af1767 -Block 0016 [ 53]: 64358b7436fd7e49 -Block 0016 [ 54]: 4f1b49d1a5ab7c61 -Block 0016 [ 55]: c0020c4113fa374c -Block 0016 [ 56]: 011fb18c45527243 -Block 0016 [ 57]: e3307f47d8975757 -Block 0016 [ 58]: f11e000f080d427f -Block 0016 [ 59]: 8a1c4f73ecc4cc6c -Block 0016 [ 60]: ede7aa790f594024 -Block 0016 [ 61]: 1e9da7f180802051 -Block 0016 [ 62]: b61dde0eb7fbd6a7 -Block 0016 [ 63]: 18f38ca82589db1e -Block 0016 [ 64]: 1528f9a1be07c0e7 -Block 0016 [ 65]: b4db60957f7f7843 -Block 0016 [ 66]: 2ae17ca586b28099 -Block 0016 [ 67]: ca802df042e060a0 -Block 0016 [ 68]: 66e6272aa9b71072 -Block 0016 [ 69]: c6936825f7ea9448 -Block 0016 [ 70]: ef51f540db1acddd -Block 0016 [ 71]: 8e369ac72e128edd -Block 0016 [ 72]: ec3326007dfed530 -Block 0016 [ 73]: 481e96df8097d470 -Block 0016 [ 74]: a24dcf16cfcf0fd2 -Block 0016 [ 75]: fb2479a8d49620df -Block 0016 [ 76]: 23414d1bad1076ab -Block 0016 [ 77]: c38b43413e97af83 -Block 0016 [ 78]: b41ff2ea8766dea1 -Block 0016 [ 79]: 3b7889f6916fe377 -Block 0016 [ 80]: fb186b87a016d7e7 -Block 0016 [ 81]: f9f91628758f3d8a -Block 0016 [ 82]: 8e03f7277994f2bb -Block 0016 [ 83]: 3765d40583c11dd6 -Block 0016 [ 84]: 6eee2373f6845dc4 -Block 0016 [ 85]: 2d2c93802e0b7b1f -Block 0016 [ 86]: 9b56e3de8c9284ac -Block 0016 [ 87]: 949074807d4ae859 -Block 0016 [ 88]: fa061f193f91a1e2 -Block 0016 [ 89]: 866754e4d501c4e1 -Block 0016 [ 90]: f0f62ee9946919c2 -Block 0016 [ 91]: bc6601547ee7ea0a -Block 0016 [ 92]: 86ddb62db8a4ad05 -Block 0016 [ 93]: 7c2ca09bb50b0457 -Block 0016 [ 94]: dacdf825d404c6a8 -Block 0016 [ 95]: aa08d84ff6cba406 -Block 0016 [ 96]: f6535c1116e5584d -Block 0016 [ 97]: 3e704757e9cde846 -Block 0016 [ 98]: d45aeab671b384c2 -Block 0016 [ 99]: 3d62e2b86d26fcbc -Block 0016 [100]: 8646641e89e86d48 -Block 0016 [101]: 7228a5842048e2f8 -Block 0016 [102]: 5b119dd26a1e68fd -Block 0016 [103]: 429a898d9d3ce5d7 -Block 0016 [104]: cc6e4b52a982d9e0 -Block 0016 [105]: d103b261bcdbeca3 -Block 0016 [106]: b8a7f23f4e37272f -Block 0016 [107]: 394e766157d29364 -Block 0016 [108]: de712ec28a18e23a -Block 0016 [109]: 0099369d1b32a993 -Block 0016 [110]: c2e3a4bd0b76be77 -Block 0016 [111]: 0a114ec44e541a6c -Block 0016 [112]: 4bf70291b97e5fab -Block 0016 [113]: 58a20499d06c57b5 -Block 0016 [114]: 61475e499642a467 -Block 0016 [115]: 7236975c5f0543a2 -Block 0016 [116]: ff5105b25e9e2406 -Block 0016 [117]: 0bc2e103b353c08f -Block 0016 [118]: 11661c9354381a9c -Block 0016 [119]: 007a690c3be22cf7 -Block 0016 [120]: dfc24ca0f9fe2f3d -Block 0016 [121]: 3e0f8b301beff690 -Block 0016 [122]: 64fcc11a9d2784ff -Block 0016 [123]: e09df3c52e21b280 -Block 0016 [124]: ee0b7ad59d2e4023 -Block 0016 [125]: aae7d5b2bb5fea4b -Block 0016 [126]: 959230be28937e41 -Block 0016 [127]: dba56bccbac64216 -Block 0017 [ 0]: ce89ee786b4ad569 -Block 0017 [ 1]: 7f47eb49a6a2def9 -Block 0017 [ 2]: 917b0181dd4105a1 -Block 0017 [ 3]: 07237dccaedf6cd3 -Block 0017 [ 4]: 12929ecda91d89f6 -Block 0017 [ 5]: 00b197a5047feea3 -Block 0017 [ 6]: 0c297a666e52cddc -Block 0017 [ 7]: 7434d14db56879b2 -Block 0017 [ 8]: bcb39c6b20f1f1df -Block 0017 [ 9]: cbb3b0039d74b088 -Block 0017 [ 10]: 7f59794de02e8ecb -Block 0017 [ 11]: 0b00abbd728f59f5 -Block 0017 [ 12]: 953a6e0bfc2990fb -Block 0017 [ 13]: 757fa841f8272e10 -Block 0017 [ 14]: b3a6ad2578bf0524 -Block 0017 [ 15]: 01580bb744060c8c -Block 0017 [ 16]: 09f46e44bb89ab50 -Block 0017 [ 17]: bff0a3e576ce3a29 -Block 0017 [ 18]: 57e01d4799886e73 -Block 0017 [ 19]: fcbd0ba0b95b90c8 -Block 0017 [ 20]: 5915db9b56ccf74b -Block 0017 [ 21]: 3d5047a4c1b29cc4 -Block 0017 [ 22]: d44becc901d3505c -Block 0017 [ 23]: 7a63ffe683770972 -Block 0017 [ 24]: 282df0a2d43f0d8e -Block 0017 [ 25]: 819737a32c170191 -Block 0017 [ 26]: 18639d1ca84fd3de -Block 0017 [ 27]: 139d002bc502eed1 -Block 0017 [ 28]: cc15c143c4160e0b -Block 0017 [ 29]: ca15cd9ed3ceee15 -Block 0017 [ 30]: cd914797b4580e11 -Block 0017 [ 31]: d30007cd76eb5135 -Block 0017 [ 32]: a6b3d1c21f962019 -Block 0017 [ 33]: e9e17570fbf99c2d -Block 0017 [ 34]: 06b7f2b094af388b -Block 0017 [ 35]: 3a69df521f36251c -Block 0017 [ 36]: aa87a601f41bd67e -Block 0017 [ 37]: 9229f8b1a24e5b67 -Block 0017 [ 38]: 5ab8c75edb0059b0 -Block 0017 [ 39]: 56643d5fca625320 -Block 0017 [ 40]: ed6fa0b07679d6cc -Block 0017 [ 41]: 7a926a3962dce5f0 -Block 0017 [ 42]: 2e7c1a857712e07d -Block 0017 [ 43]: 4dbb3257c9e970c9 -Block 0017 [ 44]: 0ba7bfae2aa6d059 -Block 0017 [ 45]: 1e2693085a857605 -Block 0017 [ 46]: 8c4dc6356e6b63bc -Block 0017 [ 47]: e7a68e11969060d9 -Block 0017 [ 48]: af934b59932e7ce5 -Block 0017 [ 49]: 422b2f5359c2a256 -Block 0017 [ 50]: 1f1b19d8966dc78a -Block 0017 [ 51]: 660b8ae28928d1a2 -Block 0017 [ 52]: 392835f375a3af76 -Block 0017 [ 53]: 3c6935b1b3486332 -Block 0017 [ 54]: c31ea11b1e409293 -Block 0017 [ 55]: b21e17ef8df2ef53 -Block 0017 [ 56]: dc4178e3d0a64cb0 -Block 0017 [ 57]: fa75d4ad1fa3d373 -Block 0017 [ 58]: 4eac80114c6c6158 -Block 0017 [ 59]: 55f95b24bbb020ab -Block 0017 [ 60]: 16e59f5e48cd1bb6 -Block 0017 [ 61]: f9b03ec078552e6e -Block 0017 [ 62]: be5279d4eb39a799 -Block 0017 [ 63]: 328f860bd398d08b -Block 0017 [ 64]: 5a2703aecc6123b4 -Block 0017 [ 65]: 3c536d8d1b2c0a62 -Block 0017 [ 66]: bbc3db06535d4571 -Block 0017 [ 67]: 3268741c1d27962a -Block 0017 [ 68]: a3805e8aba7ea59e -Block 0017 [ 69]: 9cfbfe725de47a2a -Block 0017 [ 70]: decf2774dbfa59fd -Block 0017 [ 71]: a72c3ba7a281d12d -Block 0017 [ 72]: d72902af4fd00bcd -Block 0017 [ 73]: 76390014d18f1677 -Block 0017 [ 74]: ee8e96345cf54d5f -Block 0017 [ 75]: b922dd921b1fb99e -Block 0017 [ 76]: f37ec8053e0a744b -Block 0017 [ 77]: 2b251571cb4e3ae8 -Block 0017 [ 78]: 148910b407121353 -Block 0017 [ 79]: e137db2fd45ee69d -Block 0017 [ 80]: d3a8552ea211ac6c -Block 0017 [ 81]: e39ebc4e55c4e37a -Block 0017 [ 82]: 3d3f2f341fefd6ef -Block 0017 [ 83]: a15f09d4c3515aa4 -Block 0017 [ 84]: ddcfe559098640f8 -Block 0017 [ 85]: 52fefc5d7f069b8d -Block 0017 [ 86]: abf081ef47ab4cbd -Block 0017 [ 87]: 3a9858342a54b761 -Block 0017 [ 88]: 4efe1d20e12d73c5 -Block 0017 [ 89]: a6d1453039a41e47 -Block 0017 [ 90]: b1d47dae231d0d96 -Block 0017 [ 91]: f0e2ce92b7dfde39 -Block 0017 [ 92]: 156f6ba6e2c11d91 -Block 0017 [ 93]: d6684423fcccdaf0 -Block 0017 [ 94]: 871ceabb32883b09 -Block 0017 [ 95]: a436eb1d424978a5 -Block 0017 [ 96]: aba685bbc36e6d44 -Block 0017 [ 97]: 801ca6d910fd784c -Block 0017 [ 98]: dd575ba7405b9867 -Block 0017 [ 99]: 315ede332333372d -Block 0017 [100]: 12b3dd1cecdd07fc -Block 0017 [101]: a70b713c012a83d6 -Block 0017 [102]: 40688d2f420f956f -Block 0017 [103]: d5b2cc8a746b8091 -Block 0017 [104]: 2c1d498434463441 -Block 0017 [105]: 61fd1e197d6f8f86 -Block 0017 [106]: 1c51a98dd35e3943 -Block 0017 [107]: e44df0b88a454f73 -Block 0017 [108]: 8bef184df0b10365 -Block 0017 [109]: 7d2fd9f74196fa5e -Block 0017 [110]: 467821ae9c30a343 -Block 0017 [111]: 8dfa81eac2bf791c -Block 0017 [112]: 68591ee38e2be85e -Block 0017 [113]: 4c20506c12f9c8cb -Block 0017 [114]: af9e7d7413a73de9 -Block 0017 [115]: f4da9e2ec5bae137 -Block 0017 [116]: b06eae767eda651b -Block 0017 [117]: a7708b469b78bfe1 -Block 0017 [118]: dc46cbb4f8f38ff5 -Block 0017 [119]: 57e84ca7c9457579 -Block 0017 [120]: ac9f054f49663052 -Block 0017 [121]: 7f1de271ca02e347 -Block 0017 [122]: 15a54e4e09cd829b -Block 0017 [123]: 39a9d0616902cc17 -Block 0017 [124]: e1553e5d4ba03e55 -Block 0017 [125]: cb4e29473f8d4e18 -Block 0017 [126]: e016eab995590f27 -Block 0017 [127]: e5c9315c3fe9e037 -Block 0018 [ 0]: d73e6cb4f600d92e -Block 0018 [ 1]: 4ff7703a923020fe -Block 0018 [ 2]: 4411633c5a210fb1 -Block 0018 [ 3]: fd544fe9e0e9fdaa -Block 0018 [ 4]: 067626b375f3e8b4 -Block 0018 [ 5]: f64824c7a0c9bdf0 -Block 0018 [ 6]: 65507b2d7cb1fb42 -Block 0018 [ 7]: 97fb9eb3215e84b6 -Block 0018 [ 8]: 35912760e121dba3 -Block 0018 [ 9]: 70d05b2b45d3fcb3 -Block 0018 [ 10]: 6f3c9f75e54cb571 -Block 0018 [ 11]: 50b765e15fb480b2 -Block 0018 [ 12]: 5c1a3001a2530b03 -Block 0018 [ 13]: 256ad981d34f716e -Block 0018 [ 14]: f233c26131fd0541 -Block 0018 [ 15]: 1bd106c75c804353 -Block 0018 [ 16]: f22341bd2cd671b4 -Block 0018 [ 17]: 36126083ed04bd4c -Block 0018 [ 18]: 06ab2af20b4d85a4 -Block 0018 [ 19]: f34414b1c4800e19 -Block 0018 [ 20]: eb1dcf5c4c788abb -Block 0018 [ 21]: da8b8fdee6a4b98a -Block 0018 [ 22]: 2d11a43e6b207fda -Block 0018 [ 23]: 56765cf6baf60079 -Block 0018 [ 24]: 33dd629347c11c5e -Block 0018 [ 25]: f7eda83186e4886e -Block 0018 [ 26]: 2aebe5a3f0b4b297 -Block 0018 [ 27]: 5382619de4eb3788 -Block 0018 [ 28]: 4684d6997e414414 -Block 0018 [ 29]: 9dee04efbe7b2e82 -Block 0018 [ 30]: 6f0a3cd1e45ac162 -Block 0018 [ 31]: dd84e7982526cdbd -Block 0018 [ 32]: f4b17125344b6916 -Block 0018 [ 33]: 25eddc5a7fe26243 -Block 0018 [ 34]: db8c36c50f7bc812 -Block 0018 [ 35]: 58fbe2f0d288772e -Block 0018 [ 36]: 6b49d7be66155606 -Block 0018 [ 37]: e1f9c8ea25df1450 -Block 0018 [ 38]: 16e995512253005a -Block 0018 [ 39]: 37c3d7d37d78351b -Block 0018 [ 40]: e949d536bc8d6387 -Block 0018 [ 41]: 9efef5f12072a753 -Block 0018 [ 42]: 867fafe2afc9a465 -Block 0018 [ 43]: 0dafd80edaaa5872 -Block 0018 [ 44]: 6952f071a1c64048 -Block 0018 [ 45]: 56bff386a78386f3 -Block 0018 [ 46]: 9760b6f85d0c5c4d -Block 0018 [ 47]: eda2dcbb0efb9077 -Block 0018 [ 48]: b1d892f1748b0004 -Block 0018 [ 49]: 2e122bfcbdcf902e -Block 0018 [ 50]: 0ec3ebd60bac9671 -Block 0018 [ 51]: 975c7b0e154db60f -Block 0018 [ 52]: 3c0c3947068dac74 -Block 0018 [ 53]: 0370cfde4fc9316b -Block 0018 [ 54]: 056b25931cd1ee5b -Block 0018 [ 55]: f6f424d19e6afbe6 -Block 0018 [ 56]: e0ef6348fffb105a -Block 0018 [ 57]: 0d23302398aa31d5 -Block 0018 [ 58]: 1066b74ec1400fa9 -Block 0018 [ 59]: 2a05cd7fce6a2910 -Block 0018 [ 60]: eb51397926f7d88a -Block 0018 [ 61]: 728f3bd5238b8cb0 -Block 0018 [ 62]: 72a124a00a7a4df1 -Block 0018 [ 63]: d2db366281f2bdbc -Block 0018 [ 64]: 6e2f9b75321efbae -Block 0018 [ 65]: 7f514005c44610d9 -Block 0018 [ 66]: cf19d6e9232b1a5c -Block 0018 [ 67]: f8abdf7c86dcd958 -Block 0018 [ 68]: c3f1174767399f88 -Block 0018 [ 69]: 9245d5ef34aaaac6 -Block 0018 [ 70]: 60ca2b939a60556d -Block 0018 [ 71]: 868adc9ef194e4d4 -Block 0018 [ 72]: 1386a0335edcd1eb -Block 0018 [ 73]: 6a23a25059e5f2a8 -Block 0018 [ 74]: 2d641127b0301ef5 -Block 0018 [ 75]: daefe2bb3a31a00e -Block 0018 [ 76]: 2c11b078b722b266 -Block 0018 [ 77]: 6a23c72c4b218626 -Block 0018 [ 78]: fe528c5309492c9c -Block 0018 [ 79]: fdca411f1c0afa6d -Block 0018 [ 80]: f76b41c6ab138d85 -Block 0018 [ 81]: 989699d1634c6df6 -Block 0018 [ 82]: e8a767bac83906bc -Block 0018 [ 83]: caefa4594e0dd565 -Block 0018 [ 84]: 3f4c782be2bcb4a8 -Block 0018 [ 85]: 8197ac8d57d06e73 -Block 0018 [ 86]: 61278eca7c5c1e5f -Block 0018 [ 87]: 229b2d380d87d45c -Block 0018 [ 88]: 21b608cd3f165344 -Block 0018 [ 89]: c0ffd42b993ea5dd -Block 0018 [ 90]: 78dafbd6d85212d6 -Block 0018 [ 91]: 4ca01529d90f1566 -Block 0018 [ 92]: 8a60560d75426e37 -Block 0018 [ 93]: 07017df87b5faa68 -Block 0018 [ 94]: d480dba8df4ee24f -Block 0018 [ 95]: 171853f0c7b9e99f -Block 0018 [ 96]: b77ae974ab8f2c8f -Block 0018 [ 97]: b3ede770aa3bb08b -Block 0018 [ 98]: 945ba501a3770bf1 -Block 0018 [ 99]: 3fe6e485d4993670 -Block 0018 [100]: 56a70e0511dff037 -Block 0018 [101]: 5a7b44bcf455425e -Block 0018 [102]: 13b8f7ceb3154c5b -Block 0018 [103]: a6ce1a824666c259 -Block 0018 [104]: 0f85b8ebc2b82e58 -Block 0018 [105]: e51da2e0d636f019 -Block 0018 [106]: 14af0a6aa3d06111 -Block 0018 [107]: 1f28c97aa3505adc -Block 0018 [108]: aaf9a553387b914d -Block 0018 [109]: d1e1cad1e47e6ef9 -Block 0018 [110]: 990bbd3ef7b12da5 -Block 0018 [111]: feb392b66f7f164d -Block 0018 [112]: 5a9ec205e41b7b8a -Block 0018 [113]: 0df4470a3854ce68 -Block 0018 [114]: a4324c6a3b2998c9 -Block 0018 [115]: 305d72d1ffaece34 -Block 0018 [116]: de4ae4a306ed3089 -Block 0018 [117]: 15c9c221e4856d2e -Block 0018 [118]: 822ce405f96cabcb -Block 0018 [119]: 6f9d0074fdfa6fcb -Block 0018 [120]: 50eeefcb50d1e0fb -Block 0018 [121]: a8ca87a02c7dd5f5 -Block 0018 [122]: 87e6756b1c1f9a88 -Block 0018 [123]: c83b55d91835afd4 -Block 0018 [124]: f8b21499a265096b -Block 0018 [125]: d2c88fc6864098d1 -Block 0018 [126]: d31599a122ec4b33 -Block 0018 [127]: b2a8a53f6cc6c035 -Block 0019 [ 0]: c0a747c4e28329e1 -Block 0019 [ 1]: e5903abdd4685ea0 -Block 0019 [ 2]: f624dbf4eab2eac1 -Block 0019 [ 3]: a7bdb44367b6d439 -Block 0019 [ 4]: bb398b8a231ca85e -Block 0019 [ 5]: e4204b07902d3f6e -Block 0019 [ 6]: 4cf5c1556e8a6a99 -Block 0019 [ 7]: 8e4b37c7c8196407 -Block 0019 [ 8]: 9b9c40f5d78e30aa -Block 0019 [ 9]: e7ab522bc1a9e428 -Block 0019 [ 10]: e598184e9e82ac8d -Block 0019 [ 11]: 85d11f6a0ec8e397 -Block 0019 [ 12]: feb1e8fb825dfa31 -Block 0019 [ 13]: 093d569d83fd45ec -Block 0019 [ 14]: aba7cb862bd83ccf -Block 0019 [ 15]: b903dd3e66e5fad7 -Block 0019 [ 16]: 6c9163634e7d4721 -Block 0019 [ 17]: 3891d444fc59e86c -Block 0019 [ 18]: 106020d458ffd0b1 -Block 0019 [ 19]: 70c32531ff689b86 -Block 0019 [ 20]: f2c322c30200d1bb -Block 0019 [ 21]: 0ba7383adf6e0690 -Block 0019 [ 22]: 2467345100b70ae8 -Block 0019 [ 23]: b158590311fe6486 -Block 0019 [ 24]: 484daadfb022e2af -Block 0019 [ 25]: b1097ef6f21175bd -Block 0019 [ 26]: 270dabd2d26940b9 -Block 0019 [ 27]: 18983ac19d92c698 -Block 0019 [ 28]: a8b17d5ba3423a19 -Block 0019 [ 29]: a87220ce023ac5bc -Block 0019 [ 30]: a36bb40525f87baf -Block 0019 [ 31]: 4bf5ed1ea08d2b1d -Block 0019 [ 32]: 9c7dceaf23358f5b -Block 0019 [ 33]: 5e6b6a50b9317e1b -Block 0019 [ 34]: fba24c695b6d9940 -Block 0019 [ 35]: 44e6d0d7c8f3c59d -Block 0019 [ 36]: 7e1b616776b587d3 -Block 0019 [ 37]: a335932288c6b015 -Block 0019 [ 38]: 70029a6ff40cbc91 -Block 0019 [ 39]: bf199bf017a4dd32 -Block 0019 [ 40]: 4d0e92e558b43b51 -Block 0019 [ 41]: 19752bbee2635be6 -Block 0019 [ 42]: 9eaaf852febb4173 -Block 0019 [ 43]: 766784a43f0a887e -Block 0019 [ 44]: 7c6d151066f51ced -Block 0019 [ 45]: 24f6521ec26f2069 -Block 0019 [ 46]: 4e960d6ea50022ea -Block 0019 [ 47]: 9049d12e39ce2484 -Block 0019 [ 48]: fd2ff51c2f5f8821 -Block 0019 [ 49]: ccf41c9939ca7d20 -Block 0019 [ 50]: e50aee1c5e97559b -Block 0019 [ 51]: 92b6559486a3382b -Block 0019 [ 52]: e649679609765362 -Block 0019 [ 53]: af60c4de383ea2c1 -Block 0019 [ 54]: 4e208398efa77945 -Block 0019 [ 55]: 1d01cc680dc510e6 -Block 0019 [ 56]: 70ed10fb8a669ee6 -Block 0019 [ 57]: 4ad094cc1b463933 -Block 0019 [ 58]: d1c6678cb703cf1e -Block 0019 [ 59]: 5932c03c8411ca45 -Block 0019 [ 60]: 7a3f6207de673d9c -Block 0019 [ 61]: 08c1ead7ae9bc357 -Block 0019 [ 62]: 3aed1f0b8721f33b -Block 0019 [ 63]: 4f9b463e022ebb8b -Block 0019 [ 64]: e21373749f526c05 -Block 0019 [ 65]: 15f877a94e4cc28c -Block 0019 [ 66]: b6f4ee9b7a853074 -Block 0019 [ 67]: feddee4b7089ab99 -Block 0019 [ 68]: 177cbe49bb7f1c47 -Block 0019 [ 69]: d2f486e7840fa52e -Block 0019 [ 70]: 1efbe813d77b3386 -Block 0019 [ 71]: 204ad6780ac5dbda -Block 0019 [ 72]: 4ef70ce7237e9423 -Block 0019 [ 73]: 56c850fae048f8d5 -Block 0019 [ 74]: 272f156eb2b5e4f1 -Block 0019 [ 75]: fdaed8f20cbb428f -Block 0019 [ 76]: 7dd9edf940b064e2 -Block 0019 [ 77]: 2ba1f25cd640890d -Block 0019 [ 78]: cd62db094c06521c -Block 0019 [ 79]: fd309eaa17862655 -Block 0019 [ 80]: fdd1a5f7f2e77ef6 -Block 0019 [ 81]: 2ced967d6a27fbb5 -Block 0019 [ 82]: d13b492e289631cb -Block 0019 [ 83]: 0299503d00b6af73 -Block 0019 [ 84]: 037ebf2f3ab92248 -Block 0019 [ 85]: d1eba5f6791d01af -Block 0019 [ 86]: 2a8c256540a80ec6 -Block 0019 [ 87]: e5d327a9af2ffed5 -Block 0019 [ 88]: 7238fd1a386a597b -Block 0019 [ 89]: 8305be11f9cd3923 -Block 0019 [ 90]: 7ac3169632caca5d -Block 0019 [ 91]: e711a9fda50e3844 -Block 0019 [ 92]: 3f2ec23d73a53df1 -Block 0019 [ 93]: e85438d9247b7063 -Block 0019 [ 94]: 369701c20fc048b8 -Block 0019 [ 95]: f147196fe629cad4 -Block 0019 [ 96]: eff4bd0fe6e9d785 -Block 0019 [ 97]: 55b98aae7df801f8 -Block 0019 [ 98]: 473bd8bf72e9d80f -Block 0019 [ 99]: 372113d6a79fbd61 -Block 0019 [100]: 5ec994ad59527b5d -Block 0019 [101]: 370957d1ba5eb9cd -Block 0019 [102]: b94bf1c3a9b67714 -Block 0019 [103]: c384f86146bce9a9 -Block 0019 [104]: ae5905325523c818 -Block 0019 [105]: 313d63f1a1ca488e -Block 0019 [106]: 408bd8f292c44421 -Block 0019 [107]: 2c7809887d5a742e -Block 0019 [108]: e481163da10fd561 -Block 0019 [109]: 5aac3786bf38ed9d -Block 0019 [110]: 61a76e808c1333c3 -Block 0019 [111]: 9b7955f93efbd457 -Block 0019 [112]: d3281738a72230e2 -Block 0019 [113]: 170818a8479da122 -Block 0019 [114]: c62bf1703287d997 -Block 0019 [115]: 032a13da2248d702 -Block 0019 [116]: dddbcd0ac02f9f71 -Block 0019 [117]: 713bae2d25fa4e42 -Block 0019 [118]: fd8ae9d115a20f7c -Block 0019 [119]: 229ceef5f318ddce -Block 0019 [120]: 1f29d53de834e081 -Block 0019 [121]: bb291d7d59f10f19 -Block 0019 [122]: b8dbcf3c3f3583bb -Block 0019 [123]: 9753f2819307b322 -Block 0019 [124]: ebd2fb222df580fc -Block 0019 [125]: c948516bf1b366d1 -Block 0019 [126]: 52cdc69534a37726 -Block 0019 [127]: 2ef56f44cf9436f9 -Block 0020 [ 0]: 734e629a628dd5de -Block 0020 [ 1]: 5a58aafa604d7cea -Block 0020 [ 2]: decd1fa291ea7349 -Block 0020 [ 3]: a6d23612f86139d7 -Block 0020 [ 4]: a5af09fbf4a787ac -Block 0020 [ 5]: ef9d693b8a2de764 -Block 0020 [ 6]: 505c1353a5bae511 -Block 0020 [ 7]: 1200f97cfd770359 -Block 0020 [ 8]: 477d6b28d05cf49c -Block 0020 [ 9]: b8e6c1e506c7b188 -Block 0020 [ 10]: 4c3ed38e467d8962 -Block 0020 [ 11]: ff09466393490693 -Block 0020 [ 12]: f42acf0d7a204245 -Block 0020 [ 13]: 4c828fbde0a65ff1 -Block 0020 [ 14]: 63aab903dc0ea9fb -Block 0020 [ 15]: f7dd14cd6009a8e8 -Block 0020 [ 16]: c25eebdc89fdf70d -Block 0020 [ 17]: 430f2f1baa30da8c -Block 0020 [ 18]: dbc784f1638697ff -Block 0020 [ 19]: e6e761901024928c -Block 0020 [ 20]: 63f5db6ab1252d0c -Block 0020 [ 21]: a16b91f6d5ee2d14 -Block 0020 [ 22]: f8460fc61abc3765 -Block 0020 [ 23]: e5a7daf71f12150f -Block 0020 [ 24]: 8727e6edc4cb70f7 -Block 0020 [ 25]: f5fb5eac08f0ee73 -Block 0020 [ 26]: d5d2b60b4cbb1b7d -Block 0020 [ 27]: 0bc179a997f53853 -Block 0020 [ 28]: 88d40013d3c597da -Block 0020 [ 29]: 8520fd776fea57d1 -Block 0020 [ 30]: ff41c92a18c1f5e6 -Block 0020 [ 31]: 7d1170ecd08a140f -Block 0020 [ 32]: 9e9ecb61bdbecba1 -Block 0020 [ 33]: 8a05443ef9e3fd46 -Block 0020 [ 34]: 49ee58c153b1c903 -Block 0020 [ 35]: c4809f9cebbb67c1 -Block 0020 [ 36]: 8d05a31a29871b15 -Block 0020 [ 37]: 1f7fe6dbf3a2d1ff -Block 0020 [ 38]: 1d462a2121191cf8 -Block 0020 [ 39]: e752ebf763b17942 -Block 0020 [ 40]: 3f9d429a5326ea77 -Block 0020 [ 41]: ead587a738e81dcb -Block 0020 [ 42]: a9bcdecf85c217fd -Block 0020 [ 43]: a26d47b8c1238157 -Block 0020 [ 44]: 651a66b3bb581f2c -Block 0020 [ 45]: cfa955096506a3f7 -Block 0020 [ 46]: 035c92416aae689b -Block 0020 [ 47]: 87b078db6f37b7ec -Block 0020 [ 48]: 488698e807ebe8de -Block 0020 [ 49]: dacebd9d66eff4fb -Block 0020 [ 50]: 576420c8fb5df97f -Block 0020 [ 51]: 59c8ff43f450eef5 -Block 0020 [ 52]: c24907642efa69f8 -Block 0020 [ 53]: c2780f0f0ca49e23 -Block 0020 [ 54]: b8b7ed7ed06fe78a -Block 0020 [ 55]: dba3e1ea470d7fc5 -Block 0020 [ 56]: 8afdb154ef51f907 -Block 0020 [ 57]: 0f6e3c0f727f3195 -Block 0020 [ 58]: 155cc979261a61f4 -Block 0020 [ 59]: 2fa61a7f141c36c9 -Block 0020 [ 60]: 03ea29e722963040 -Block 0020 [ 61]: 0b872d389e13e0f1 -Block 0020 [ 62]: af9883b7f36b8a79 -Block 0020 [ 63]: e423bfee1d544df7 -Block 0020 [ 64]: c6a2b6850e3d148d -Block 0020 [ 65]: 2bded84ad45688c0 -Block 0020 [ 66]: 012306a6d0350fc4 -Block 0020 [ 67]: e241389275cbae09 -Block 0020 [ 68]: 35817c5ede994e82 -Block 0020 [ 69]: e8e061fe79ffa788 -Block 0020 [ 70]: a7047fdafab17a66 -Block 0020 [ 71]: 9b283ba2aacc46ca -Block 0020 [ 72]: 48df0e8e03643311 -Block 0020 [ 73]: d5bb8debb5655152 -Block 0020 [ 74]: e6067c7db547dabf -Block 0020 [ 75]: 6be963ea0e0aed0a -Block 0020 [ 76]: 6b33437061cb8be1 -Block 0020 [ 77]: d0bd3e644206102e -Block 0020 [ 78]: 78a388f73a7b53a6 -Block 0020 [ 79]: 5d24627ef8abb4f9 -Block 0020 [ 80]: 055be9e53c43c554 -Block 0020 [ 81]: e32509d26029caa5 -Block 0020 [ 82]: b3d8f6b2fd6bb726 -Block 0020 [ 83]: 2b4c4351318bdbc7 -Block 0020 [ 84]: df8a4d376a62be6f -Block 0020 [ 85]: 275bc692f96b3a4b -Block 0020 [ 86]: 3b91dbf87b274d2e -Block 0020 [ 87]: b0d17c2b706ebdc5 -Block 0020 [ 88]: e25acdbf9bdf0f66 -Block 0020 [ 89]: a5af03b271405b48 -Block 0020 [ 90]: a2a1d259bb89d2dd -Block 0020 [ 91]: ec334f738b812ea8 -Block 0020 [ 92]: 2b4502c4ef6d706c -Block 0020 [ 93]: 5d59dbc73eb0c655 -Block 0020 [ 94]: 62dd5829cecbfab6 -Block 0020 [ 95]: 61d3300680db7001 -Block 0020 [ 96]: ff825644b486bc24 -Block 0020 [ 97]: fa770c7fc3c288b3 -Block 0020 [ 98]: 5993533c0cc4f3ae -Block 0020 [ 99]: 3c8fb5b08245af96 -Block 0020 [100]: dec90adee7025117 -Block 0020 [101]: fb6af315a87846e5 -Block 0020 [102]: cb6df9e5f37b9030 -Block 0020 [103]: 46a9e3bf64dd2107 -Block 0020 [104]: 91bba1949e9e2858 -Block 0020 [105]: 89b5583cf4442bb0 -Block 0020 [106]: 2ef8ecf98a0d53a0 -Block 0020 [107]: a3fd11ccd3d2e41e -Block 0020 [108]: 197f99094a56452b -Block 0020 [109]: 893307690eeda57e -Block 0020 [110]: 04027b05e83cf5dd -Block 0020 [111]: 4e0240c99df4a613 -Block 0020 [112]: acfc2275643fdab0 -Block 0020 [113]: f63b244b2fbd5148 -Block 0020 [114]: edab8427721c3f75 -Block 0020 [115]: 72d7f7d722f2065e -Block 0020 [116]: a822ddfd1bc95aa2 -Block 0020 [117]: 9e6ff4809803e545 -Block 0020 [118]: 8dd66544283171fb -Block 0020 [119]: ddac6524728f6767 -Block 0020 [120]: a798cc0c897cbc15 -Block 0020 [121]: 3eee203dd63489c5 -Block 0020 [122]: 84ec9fb95b124ef8 -Block 0020 [123]: a52586f61e51857b -Block 0020 [124]: d62a8a6195a96220 -Block 0020 [125]: e64fbb51d72dadcc -Block 0020 [126]: 77256737a1bfb5b0 -Block 0020 [127]: b8de0df9be9d957e -Block 0021 [ 0]: 48f20b10689f4e83 -Block 0021 [ 1]: 39e62f37a525d865 -Block 0021 [ 2]: 4e47ab2acb135d33 -Block 0021 [ 3]: c42c2049323a9ce2 -Block 0021 [ 4]: 7026754810320262 -Block 0021 [ 5]: fdabf4cc98d526f2 -Block 0021 [ 6]: de98230ccc90e91d -Block 0021 [ 7]: 091a9b3d240576e6 -Block 0021 [ 8]: 68afd8c0f731cc3f -Block 0021 [ 9]: c78bf9764d661a01 -Block 0021 [ 10]: 5bea6ba0ff4287bb -Block 0021 [ 11]: 45454840c15c0c3e -Block 0021 [ 12]: b35b87954cbcddb5 -Block 0021 [ 13]: 573a5477da3314cb -Block 0021 [ 14]: 70f7bf27c2ce76a8 -Block 0021 [ 15]: e4368c992fceecac -Block 0021 [ 16]: ba96394ad6d02e53 -Block 0021 [ 17]: 641bfb72dc066998 -Block 0021 [ 18]: 65e25ca33cccf184 -Block 0021 [ 19]: ed8d73c34e56770a -Block 0021 [ 20]: 720a1d1d280cf938 -Block 0021 [ 21]: 75ced9e0e3a035af -Block 0021 [ 22]: c88e8062d9f9c06b -Block 0021 [ 23]: 00fef53c0c05d145 -Block 0021 [ 24]: 67cf04ecd6d30055 -Block 0021 [ 25]: 8377a625564c8266 -Block 0021 [ 26]: f688bacf63fe2148 -Block 0021 [ 27]: f6fcdfe3932894fb -Block 0021 [ 28]: 951c5ecc941392f9 -Block 0021 [ 29]: 3250b3ba358c5582 -Block 0021 [ 30]: 90b4f720fa9e460c -Block 0021 [ 31]: f963935871671ca0 -Block 0021 [ 32]: eceeb74ebc564d21 -Block 0021 [ 33]: b39c5c19445b7b9f -Block 0021 [ 34]: 0c7997285ec7189b -Block 0021 [ 35]: 2ecb5769ee985f73 -Block 0021 [ 36]: 83c9fcfabb40a364 -Block 0021 [ 37]: 0d792da304cc4f2c -Block 0021 [ 38]: c812537235db19f0 -Block 0021 [ 39]: ae460c73e6c63488 -Block 0021 [ 40]: 08a215922c6041de -Block 0021 [ 41]: c97a377b4a718b36 -Block 0021 [ 42]: fca614307204c74a -Block 0021 [ 43]: 3ef0c90941c10f62 -Block 0021 [ 44]: ebe065caa726b6ba -Block 0021 [ 45]: 587f7d1fb0a2cc4c -Block 0021 [ 46]: 4982d8334e60f667 -Block 0021 [ 47]: c1df28b2ec657562 -Block 0021 [ 48]: 02f1ea6a2701137e -Block 0021 [ 49]: b9a461776c3fd823 -Block 0021 [ 50]: d0324040a86b75a4 -Block 0021 [ 51]: ad3fd886752ccf0d -Block 0021 [ 52]: f1918a52c6e8c4df -Block 0021 [ 53]: d1b7ad59e221c111 -Block 0021 [ 54]: f5f4a3e2afd0f619 -Block 0021 [ 55]: 65ead9ca48410c43 -Block 0021 [ 56]: 1f5bac3f2b3a0481 -Block 0021 [ 57]: 6c750bb2492f27e5 -Block 0021 [ 58]: 47d3af1c99ff70f5 -Block 0021 [ 59]: 3f9213b0e327063a -Block 0021 [ 60]: 5df60788e29688d2 -Block 0021 [ 61]: 8cb58a31f2df38b8 -Block 0021 [ 62]: ac6f9bb436912716 -Block 0021 [ 63]: 0fd04153e2dff0b8 -Block 0021 [ 64]: 77194b4b3557e8c6 -Block 0021 [ 65]: ab697cf5b4580f90 -Block 0021 [ 66]: 3ed2f55b7a42844a -Block 0021 [ 67]: 604a957093fae6a0 -Block 0021 [ 68]: e5b816f30faf227c -Block 0021 [ 69]: 344c389ed851b0a7 -Block 0021 [ 70]: e4cda77cbf72b80f -Block 0021 [ 71]: 4ef8b3e43d395020 -Block 0021 [ 72]: a10e58d927f9f9b4 -Block 0021 [ 73]: 49b8db015f4dae6c -Block 0021 [ 74]: dcf8799bd62305f6 -Block 0021 [ 75]: 0aae21512005eda1 -Block 0021 [ 76]: a425eb287bb0d675 -Block 0021 [ 77]: 624d06068c67cb67 -Block 0021 [ 78]: 9ba0e3ab7d63b33f -Block 0021 [ 79]: e7883082beee3ea5 -Block 0021 [ 80]: 72a7baae685ab8fa -Block 0021 [ 81]: 77624b29d9937c07 -Block 0021 [ 82]: fd015836bb1dd973 -Block 0021 [ 83]: fc334f9178f9b1ba -Block 0021 [ 84]: 0dc2b5797a4fc547 -Block 0021 [ 85]: 632ab6ef84e992dc -Block 0021 [ 86]: da79d4b3e5c42721 -Block 0021 [ 87]: 6b75fb145aaf3905 -Block 0021 [ 88]: 76b4485790fb7531 -Block 0021 [ 89]: b6f39ef0d1f3215b -Block 0021 [ 90]: 7edd8123d87869e5 -Block 0021 [ 91]: 5670f2bc2d962483 -Block 0021 [ 92]: 5d574c361b64ecc4 -Block 0021 [ 93]: 6b57df741d9a6420 -Block 0021 [ 94]: 78e76645eddb15fd -Block 0021 [ 95]: f4383deaae902412 -Block 0021 [ 96]: 3a81a7f781de1169 -Block 0021 [ 97]: 1bcf6da80c7a9f6a -Block 0021 [ 98]: 39c5577fd931dd80 -Block 0021 [ 99]: b16dfc78e8f90081 -Block 0021 [100]: f833577181c9b58e -Block 0021 [101]: 55fe82a0d6b525ec -Block 0021 [102]: 32f776a8dfa3c62e -Block 0021 [103]: e0e24059fb11ef83 -Block 0021 [104]: bb196f3c2e138f6e -Block 0021 [105]: 668483f4d9d9afe8 -Block 0021 [106]: fdc40fd165bd8d81 -Block 0021 [107]: 2e3eca136e35b37a -Block 0021 [108]: 3fe1ab36fb63b066 -Block 0021 [109]: 3ab084f6f91109cc -Block 0021 [110]: ea32e83f7d7f53cc -Block 0021 [111]: 9bd8c601a541a041 -Block 0021 [112]: 056399de05e2d664 -Block 0021 [113]: 84bee8b3ad9a1002 -Block 0021 [114]: 53b65ae6f2ac7620 -Block 0021 [115]: 1266879844255f8f -Block 0021 [116]: f1b1e45e64da8ace -Block 0021 [117]: ef8fb8ebe51bfe21 -Block 0021 [118]: 834b1615e554d69d -Block 0021 [119]: bc44d1a4080cff7b -Block 0021 [120]: 60642bf7a867e050 -Block 0021 [121]: 0b0d757e35e73640 -Block 0021 [122]: 5909d96b6a9defef -Block 0021 [123]: c60ce5d733fd4646 -Block 0021 [124]: f5a292fb1e0043ed -Block 0021 [125]: 40f6cfb2c8902681 -Block 0021 [126]: 0dec03fdf115dfc2 -Block 0021 [127]: c985316bfe35e532 -Block 0022 [ 0]: 804791fca9c1392b -Block 0022 [ 1]: e4c1e426881c2e87 -Block 0022 [ 2]: 344b8889ea4ad4ac -Block 0022 [ 3]: 1a04e6befb3d575b -Block 0022 [ 4]: 5bef6e064c648074 -Block 0022 [ 5]: 11c161d08bf9428f -Block 0022 [ 6]: d067ddca34550faf -Block 0022 [ 7]: 69ef5611390631e5 -Block 0022 [ 8]: 6afe225214318138 -Block 0022 [ 9]: 80af3c0b4b02a81a -Block 0022 [ 10]: 14bf5b64af634b3f -Block 0022 [ 11]: 9abcb0455be97f1d -Block 0022 [ 12]: ea75c0baee66705c -Block 0022 [ 13]: fe701bea2d3b26ca -Block 0022 [ 14]: 67c4c6258ed27322 -Block 0022 [ 15]: 429a289edde69d6e -Block 0022 [ 16]: f4f4c2d615d9a7be -Block 0022 [ 17]: 59f7a6c990794400 -Block 0022 [ 18]: 0bdd7b9e5fcb9d42 -Block 0022 [ 19]: c853bb1b4bca7df7 -Block 0022 [ 20]: 52f6bc0c799da19a -Block 0022 [ 21]: 943bdeab5accea7b -Block 0022 [ 22]: 73d7bd65c013fa43 -Block 0022 [ 23]: 1ad34d66c52d0ec5 -Block 0022 [ 24]: b6094fcbf860e74a -Block 0022 [ 25]: e7422f4d5128dcb5 -Block 0022 [ 26]: 87ef0706c8c88aad -Block 0022 [ 27]: ea9163e940b85771 -Block 0022 [ 28]: 0042fd3e3c33bbb3 -Block 0022 [ 29]: 16afcdb6b697a7f8 -Block 0022 [ 30]: 82a36bc54241dc84 -Block 0022 [ 31]: 3c32121ed362c31a -Block 0022 [ 32]: 71b3b15fbb31d804 -Block 0022 [ 33]: 7f11cdbd64ac602b -Block 0022 [ 34]: 6c2c665c0c0b1422 -Block 0022 [ 35]: 13273bca3537684c -Block 0022 [ 36]: d2797a8549da57c7 -Block 0022 [ 37]: f486e3f08054fbb8 -Block 0022 [ 38]: 2749de998f4434bb -Block 0022 [ 39]: b04d3f88514a28bf -Block 0022 [ 40]: 89e0e0f8e42d378a -Block 0022 [ 41]: 9635003f04a988b6 -Block 0022 [ 42]: ba273189836e43a2 -Block 0022 [ 43]: a3e7e916b15ec2ed -Block 0022 [ 44]: 933afb5cbbc5a346 -Block 0022 [ 45]: b2fe858fb64c56ec -Block 0022 [ 46]: 93397c330c834d3b -Block 0022 [ 47]: 9ac6374db29ba4af -Block 0022 [ 48]: 9abbf0baf99066b9 -Block 0022 [ 49]: 53fe093bcfa30abf -Block 0022 [ 50]: 59f06188b9aeac95 -Block 0022 [ 51]: 4f203567486f8e1f -Block 0022 [ 52]: 399c129eb1954981 -Block 0022 [ 53]: 9e8f3df04edd855c -Block 0022 [ 54]: c7839759458f28b7 -Block 0022 [ 55]: 0680b6a90eab4916 -Block 0022 [ 56]: cec145b80fe78247 -Block 0022 [ 57]: 808b65ea6e63e98b -Block 0022 [ 58]: 2c1e5538262fdfec -Block 0022 [ 59]: 81b30dc073b434c5 -Block 0022 [ 60]: c0707436657289e6 -Block 0022 [ 61]: 120a7eca718d4092 -Block 0022 [ 62]: 3175853539247ab9 -Block 0022 [ 63]: 5d0c743b9b6ffd0b -Block 0022 [ 64]: d8c28ec0886e9d48 -Block 0022 [ 65]: 594d6544fd87ae3a -Block 0022 [ 66]: a0758e83bad55871 -Block 0022 [ 67]: 19629e54112a76c1 -Block 0022 [ 68]: c39adb24ef1e776e -Block 0022 [ 69]: 99ad43408d60ab08 -Block 0022 [ 70]: 33d692124c11d9ae -Block 0022 [ 71]: ca6ae3cd5e089872 -Block 0022 [ 72]: 96128569361b5183 -Block 0022 [ 73]: 3264c5006587f2f5 -Block 0022 [ 74]: 927b19661155b67d -Block 0022 [ 75]: 27577a0564c02580 -Block 0022 [ 76]: 4be4137d71a8d20f -Block 0022 [ 77]: e8fbb27cfb3dd116 -Block 0022 [ 78]: c546d54308c8238b -Block 0022 [ 79]: 0e6ea22a889661de -Block 0022 [ 80]: df0e770ab52e0f23 -Block 0022 [ 81]: 912c757dd483dcd1 -Block 0022 [ 82]: 28b07c4d25d2f527 -Block 0022 [ 83]: f833999f75dfde74 -Block 0022 [ 84]: 3f3bfa3feb61ff0e -Block 0022 [ 85]: fde9b05908908e32 -Block 0022 [ 86]: f37ac6a234f6d531 -Block 0022 [ 87]: 3002a06806c5a7b7 -Block 0022 [ 88]: 0ced9647463145f0 -Block 0022 [ 89]: f7103a918f8fc100 -Block 0022 [ 90]: c4533d7cc476b9fc -Block 0022 [ 91]: 100e0006dd1153e5 -Block 0022 [ 92]: 6a811c609480f8f1 -Block 0022 [ 93]: 510c39c9cd86173e -Block 0022 [ 94]: 2246697bda28e904 -Block 0022 [ 95]: d868a2e13c102004 -Block 0022 [ 96]: 6034a466933b698e -Block 0022 [ 97]: 8fc5e7a66acb11df -Block 0022 [ 98]: 2910e9f3ee967fef -Block 0022 [ 99]: 001b92fb7e89022f -Block 0022 [100]: ca87fa7b53499719 -Block 0022 [101]: 0154d784444d9cbd -Block 0022 [102]: 1bfa559512ce29d4 -Block 0022 [103]: 1e1d40d77e9b399e -Block 0022 [104]: f88aae2191055b90 -Block 0022 [105]: 504de7f12bff97d5 -Block 0022 [106]: ab03a38e37df0236 -Block 0022 [107]: 46bc61f156525399 -Block 0022 [108]: 5a36598201775ada -Block 0022 [109]: ef27216b243ec78b -Block 0022 [110]: c2013097bf9ec3cf -Block 0022 [111]: fde08a7d93d60ceb -Block 0022 [112]: 0080c53706f954e4 -Block 0022 [113]: b4588d78793f9818 -Block 0022 [114]: 1662c3cb14cabdf2 -Block 0022 [115]: b0c52775f338135a -Block 0022 [116]: d80afb191b9680cb -Block 0022 [117]: 01517fed70270cba -Block 0022 [118]: 7278e7ac5099dcb0 -Block 0022 [119]: 18b2779f192c0034 -Block 0022 [120]: d12a9b462f01e32e -Block 0022 [121]: 728c46acedd7f19c -Block 0022 [122]: a05306d6b31b2833 -Block 0022 [123]: d331c8c206fa1146 -Block 0022 [124]: 04605c92d2bfcc35 -Block 0022 [125]: ef83c4117b4716d2 -Block 0022 [126]: f612d22f4c162415 -Block 0022 [127]: 4a95bc5ff1436d26 -Block 0023 [ 0]: 1c27f28962d9a429 -Block 0023 [ 1]: ce6c0454be7f138d -Block 0023 [ 2]: fa0537b5173deb1e -Block 0023 [ 3]: c81af57b4e80e20a -Block 0023 [ 4]: e9c46fbaafffbd2d -Block 0023 [ 5]: 0cc31492e65580b5 -Block 0023 [ 6]: 2d51c8f8079dc721 -Block 0023 [ 7]: 74bb329130090ca2 -Block 0023 [ 8]: ef4e6d8e93662b43 -Block 0023 [ 9]: 283af41e7ee42300 -Block 0023 [ 10]: 743f3e00e4c57e0b -Block 0023 [ 11]: 8136ce7b15199709 -Block 0023 [ 12]: 047c5f46fbfc2269 -Block 0023 [ 13]: 02a5b806ee4bf5a2 -Block 0023 [ 14]: 09d40c72fefc6003 -Block 0023 [ 15]: b4e2241710c816ae -Block 0023 [ 16]: 855c2cac8c80c773 -Block 0023 [ 17]: 00e22cc97a97a901 -Block 0023 [ 18]: ba6785d60b8b5829 -Block 0023 [ 19]: d0678d50aa3b6566 -Block 0023 [ 20]: b0a18530b287b9c4 -Block 0023 [ 21]: 1425826dfb827651 -Block 0023 [ 22]: 3d79c30454292023 -Block 0023 [ 23]: ed52ad874ea725cb -Block 0023 [ 24]: 2f558b4c56382176 -Block 0023 [ 25]: 6dfbbf532ea34f0e -Block 0023 [ 26]: 9d86b03d15bb15f7 -Block 0023 [ 27]: dc229f5621ef7476 -Block 0023 [ 28]: 7f3914d304294e74 -Block 0023 [ 29]: c0cb249d4790157e -Block 0023 [ 30]: 1b549da01f8a3df0 -Block 0023 [ 31]: ba62cf7efd468685 -Block 0023 [ 32]: f454b7eeaa12a6c9 -Block 0023 [ 33]: a91074d5378b8494 -Block 0023 [ 34]: 88bce18fb76b8c48 -Block 0023 [ 35]: cfc04ad4fe68543e -Block 0023 [ 36]: df2057be18d33517 -Block 0023 [ 37]: 13226baa4125c349 -Block 0023 [ 38]: ef72cb1c23da3691 -Block 0023 [ 39]: da5f4f3db8bd3806 -Block 0023 [ 40]: 359ecf2233bbdd88 -Block 0023 [ 41]: 2da0dce2855ec11f -Block 0023 [ 42]: 53923497e1825a07 -Block 0023 [ 43]: 315b7d8242ce8993 -Block 0023 [ 44]: e6c20a9f32744b30 -Block 0023 [ 45]: b8280f049700fad3 -Block 0023 [ 46]: 9f86dfc83e311396 -Block 0023 [ 47]: 3d5389c7505ed7bc -Block 0023 [ 48]: 92f5d210510ee9ac -Block 0023 [ 49]: 5946a782c5e82902 -Block 0023 [ 50]: c2d548fa66061623 -Block 0023 [ 51]: e7bad6532357494d -Block 0023 [ 52]: d321776f0276918c -Block 0023 [ 53]: bd456bc123259f0c -Block 0023 [ 54]: 54a21561cdf88a8c -Block 0023 [ 55]: 5e358a502537b2f7 -Block 0023 [ 56]: 99b132361d154089 -Block 0023 [ 57]: 84f703f283fe9a3d -Block 0023 [ 58]: 69eb4b5540c63b45 -Block 0023 [ 59]: 1ccbb5de665d2f72 -Block 0023 [ 60]: fcaf74364ac9f8f8 -Block 0023 [ 61]: 5a8d6fc4175344c8 -Block 0023 [ 62]: 429cf28518d1d6b1 -Block 0023 [ 63]: 12fda086ea0009d9 -Block 0023 [ 64]: 2ec00664a4b15dd8 -Block 0023 [ 65]: 140a9b9ef7dfc853 -Block 0023 [ 66]: eddb2f43f8549e7c -Block 0023 [ 67]: 5782bd1f045fd9d0 -Block 0023 [ 68]: b8c6d19545590a92 -Block 0023 [ 69]: 7d575aadcfc41096 -Block 0023 [ 70]: 2c670dc169fca4d4 -Block 0023 [ 71]: 969e7c181c013882 -Block 0023 [ 72]: 707699fae53be225 -Block 0023 [ 73]: 599817453061b3aa -Block 0023 [ 74]: de50b8984deb3024 -Block 0023 [ 75]: 6577cebcd06675c7 -Block 0023 [ 76]: bf27f2775367d22a -Block 0023 [ 77]: 128b7a09850d97c6 -Block 0023 [ 78]: 3f505f36eb4ffd30 -Block 0023 [ 79]: 60d9c8a881890405 -Block 0023 [ 80]: a7f7eb087c7fcde3 -Block 0023 [ 81]: 87e5ffb94b2ccd52 -Block 0023 [ 82]: a2b3896a1578b3d0 -Block 0023 [ 83]: c730dc0d5c857ae6 -Block 0023 [ 84]: b78c67dd4544d4dc -Block 0023 [ 85]: e85429d5ddd6af9d -Block 0023 [ 86]: 91f7ba9e9b8195df -Block 0023 [ 87]: 1d0aa5dcb28f18a0 -Block 0023 [ 88]: 0ba3b3eeb02a966d -Block 0023 [ 89]: 6c8ceaf6d8f05ed7 -Block 0023 [ 90]: 2c969fc5f825097b -Block 0023 [ 91]: 548be2850059ff36 -Block 0023 [ 92]: 0493917ec9802a30 -Block 0023 [ 93]: fc068b2212e7cac1 -Block 0023 [ 94]: 7cc3b76b0709e28a -Block 0023 [ 95]: 81dbc467d1c7ae3a -Block 0023 [ 96]: 682dafd7341f6c2b -Block 0023 [ 97]: f4b958705828befb -Block 0023 [ 98]: c33bfff261f156b1 -Block 0023 [ 99]: fe8c617a34065ba0 -Block 0023 [100]: 6a6450fdd5369973 -Block 0023 [101]: a9ec838e3d01cf5c -Block 0023 [102]: d3624f4619c4ed6b -Block 0023 [103]: 2e27333b8045636f -Block 0023 [104]: 4302af176e71aabb -Block 0023 [105]: 47a021cc276346df -Block 0023 [106]: acab4e93993f3d4c -Block 0023 [107]: 915fc7ff50fec218 -Block 0023 [108]: 38d6b82052587c54 -Block 0023 [109]: 1785046ff7d042fc -Block 0023 [110]: 377a9b13fc1b9ea5 -Block 0023 [111]: 7265d3d78a9c6b2a -Block 0023 [112]: 6ccc5f6b63b72992 -Block 0023 [113]: 3d955c8dbd4680e2 -Block 0023 [114]: 1958ed0640792519 -Block 0023 [115]: 96d15acd6268fac3 -Block 0023 [116]: fce9b335ff6813bf -Block 0023 [117]: 31944f568c7a6e61 -Block 0023 [118]: 62474e159b6a69d0 -Block 0023 [119]: ba17ccc3e51ad03a -Block 0023 [120]: 06a4820b0ac6731d -Block 0023 [121]: 12d6b8463c7ee240 -Block 0023 [122]: 21ad64133acd11e4 -Block 0023 [123]: 9626ab9a178836a0 -Block 0023 [124]: 26427719be3fe4d2 -Block 0023 [125]: 43c7d5348eb934ac -Block 0023 [126]: a37be69b3f09895c -Block 0023 [127]: da21d8760a0a86df -Block 0024 [ 0]: cf8f96856b27bef3 -Block 0024 [ 1]: 538374b5db2e53df -Block 0024 [ 2]: 77081bd0b0d9303c -Block 0024 [ 3]: 71ea9b2f87d82f65 -Block 0024 [ 4]: b84b47aafe046d8d -Block 0024 [ 5]: 32281e46cb82140b -Block 0024 [ 6]: d74a975383daa261 -Block 0024 [ 7]: eb8ddf6fef2eab2c -Block 0024 [ 8]: 85efa5cdd2797a28 -Block 0024 [ 9]: 8988c6d6537f20cf -Block 0024 [ 10]: afa3befc0a1d0bd3 -Block 0024 [ 11]: 68594b431cfa9b37 -Block 0024 [ 12]: 8b4e0694766c9879 -Block 0024 [ 13]: 194ae444c11e14ae -Block 0024 [ 14]: 41c1f537433d5b74 -Block 0024 [ 15]: 32d80469d8e340f1 -Block 0024 [ 16]: 9c95332fe3ede149 -Block 0024 [ 17]: ba7e3eb54c1902f2 -Block 0024 [ 18]: a95e5ac9d8efdafc -Block 0024 [ 19]: 764b2f25047d6bc7 -Block 0024 [ 20]: 89beee560f2d500e -Block 0024 [ 21]: 17c78d78930ad71b -Block 0024 [ 22]: 703ee2ce41a0897d -Block 0024 [ 23]: 410353a71ad59e8b -Block 0024 [ 24]: ce133957feae7ab6 -Block 0024 [ 25]: ed83c399c42aba92 -Block 0024 [ 26]: ad9f3f30874f6cb1 -Block 0024 [ 27]: 353a7816060b52f3 -Block 0024 [ 28]: 55d24c9cd5567345 -Block 0024 [ 29]: 9576e73cb0f9cd57 -Block 0024 [ 30]: 3e4a93744b472b59 -Block 0024 [ 31]: 094a77da6bcb9b8f -Block 0024 [ 32]: 21cc11ecbc0347c7 -Block 0024 [ 33]: 858eab66e89d80a3 -Block 0024 [ 34]: a373da912a23fff5 -Block 0024 [ 35]: 6d01a0e582a1eb6a -Block 0024 [ 36]: cef03bd93495ff85 -Block 0024 [ 37]: 71f0d1a6b596741d -Block 0024 [ 38]: eb089e9710cf726d -Block 0024 [ 39]: f4ad37046aee8555 -Block 0024 [ 40]: 51a415a98700ba18 -Block 0024 [ 41]: 7492605ee6b50bf5 -Block 0024 [ 42]: e9d0aa6cf26ef7dc -Block 0024 [ 43]: fae3257644711601 -Block 0024 [ 44]: ef4ea37a228d87ab -Block 0024 [ 45]: 8cb0e52f96ad89c8 -Block 0024 [ 46]: 3a9beaac8a7c6673 -Block 0024 [ 47]: 2b8b083eaf9e5bea -Block 0024 [ 48]: b7017c5a9b985cc8 -Block 0024 [ 49]: ac45b63f5c03446e -Block 0024 [ 50]: 603871e8fa7c1798 -Block 0024 [ 51]: 95108dd25de5bf40 -Block 0024 [ 52]: 1b39f2a620715e4b -Block 0024 [ 53]: e7f278a6c8d5ef0a -Block 0024 [ 54]: 4522cbafa997ee91 -Block 0024 [ 55]: c5c456681b67ba2f -Block 0024 [ 56]: a5738a9048687c75 -Block 0024 [ 57]: 26f555b171320f58 -Block 0024 [ 58]: a37fae3c988a9d41 -Block 0024 [ 59]: 5070dedba406729b -Block 0024 [ 60]: 27b120850e97e811 -Block 0024 [ 61]: ca12b508cf982bd3 -Block 0024 [ 62]: d8f86605ff5ad305 -Block 0024 [ 63]: 27fff09a65e13879 -Block 0024 [ 64]: 80302fa5d0884bd4 -Block 0024 [ 65]: 218a5d3bc896af5f -Block 0024 [ 66]: 0782c41608278c7a -Block 0024 [ 67]: f06173fdf5887776 -Block 0024 [ 68]: 3f413e52c28415fc -Block 0024 [ 69]: 6ed1d893f9aee791 -Block 0024 [ 70]: 4a4438fdc957d30c -Block 0024 [ 71]: 048018874b319afa -Block 0024 [ 72]: f8b978784278cb81 -Block 0024 [ 73]: 195c322da4ada50a -Block 0024 [ 74]: f1f4fa13504e30ab -Block 0024 [ 75]: 0b5f3914ca1e9f56 -Block 0024 [ 76]: 43ccdf096c495bca -Block 0024 [ 77]: 147f901fdd3f63d6 -Block 0024 [ 78]: 641a252f4db1fb6a -Block 0024 [ 79]: 2af292c339ad3501 -Block 0024 [ 80]: b42ca580e00a0cfa -Block 0024 [ 81]: d2a6f637d9ff9533 -Block 0024 [ 82]: dd7000216156156a -Block 0024 [ 83]: bd4efc849861550a -Block 0024 [ 84]: 8cde35a8e7597756 -Block 0024 [ 85]: a2beeb20448d9965 -Block 0024 [ 86]: b29f413d5ce01443 -Block 0024 [ 87]: 53a07a46cf956d2f -Block 0024 [ 88]: 843f107c4755d038 -Block 0024 [ 89]: 270ce395f4d98ba0 -Block 0024 [ 90]: 16936e6d71963d18 -Block 0024 [ 91]: d1cfb0e9575879e3 -Block 0024 [ 92]: e430bc6bccf2553b -Block 0024 [ 93]: 6ca082f5aa5d3883 -Block 0024 [ 94]: 2fd0d4cabae6c843 -Block 0024 [ 95]: 062e2b70c3ac9f47 -Block 0024 [ 96]: 9e08deeeffdcfd2c -Block 0024 [ 97]: e0aea6ad8b918f2d -Block 0024 [ 98]: b5a3ae6b8fb101a5 -Block 0024 [ 99]: e4d6ce06de13dbda -Block 0024 [100]: e47bd4c9d5920c29 -Block 0024 [101]: 2ad1bf91ee2b946e -Block 0024 [102]: 1c7af48ddd4ab92f -Block 0024 [103]: 49d9829c93509027 -Block 0024 [104]: 7e16b2f4434eaf60 -Block 0024 [105]: 3b5fce28515d3e55 -Block 0024 [106]: ee5184f0bd0bc316 -Block 0024 [107]: 34f3fefa21929e75 -Block 0024 [108]: 29d7be32d5d1308f -Block 0024 [109]: 1af91678babbf821 -Block 0024 [110]: 4735c7e9971b1e95 -Block 0024 [111]: 6f5bdec6c62d2cf6 -Block 0024 [112]: 7b57d917f7916d98 -Block 0024 [113]: 4c305d9e6fe35298 -Block 0024 [114]: d078638df882056f -Block 0024 [115]: 3b319b154d4fa0d0 -Block 0024 [116]: 06900db2cbfe81c1 -Block 0024 [117]: 06673712431a59ae -Block 0024 [118]: 60f0a1274bae4374 -Block 0024 [119]: afcfbb81ba9212f6 -Block 0024 [120]: 6ecac6530deab23f -Block 0024 [121]: 69ae57c629abb352 -Block 0024 [122]: 266f0dabe5af7624 -Block 0024 [123]: 33eed4df71113084 -Block 0024 [124]: c6f13e96d5f6112d -Block 0024 [125]: 02efdc43c4e48b02 -Block 0024 [126]: 42283c13cdbfcd2c -Block 0024 [127]: 0436a1af463de562 -Block 0025 [ 0]: 5b9abfa7feb2a37c -Block 0025 [ 1]: 5d485f04bba0a1f8 -Block 0025 [ 2]: 46765ebb62cc41c3 -Block 0025 [ 3]: 557b8cfa9bd9e7df -Block 0025 [ 4]: 0e7716504d681b97 -Block 0025 [ 5]: 0b6bcf29374a050f -Block 0025 [ 6]: e98f9633d70cb263 -Block 0025 [ 7]: 800a0bb3298debd0 -Block 0025 [ 8]: d9f3f7cbabf9771c -Block 0025 [ 9]: 132e4129d1daffd1 -Block 0025 [ 10]: 39489c7cc8c2a06b -Block 0025 [ 11]: 9c2fdc9cda85c204 -Block 0025 [ 12]: 73a42d407e3a97bf -Block 0025 [ 13]: 59997a9a9ccd5086 -Block 0025 [ 14]: 475f0aa67e8087d5 -Block 0025 [ 15]: bdaee394ba5cf10a -Block 0025 [ 16]: ea729a7408010680 -Block 0025 [ 17]: 56a1679ad9ad4ebe -Block 0025 [ 18]: 1cc56e01ad0b38c4 -Block 0025 [ 19]: d46ece129d9a289a -Block 0025 [ 20]: 1390f7ce5344e77e -Block 0025 [ 21]: 8f781e2c5ab8fe80 -Block 0025 [ 22]: 997e9d8fd86ed661 -Block 0025 [ 23]: c6e26d91f5e89382 -Block 0025 [ 24]: 81ae4d5b3b765fa8 -Block 0025 [ 25]: 264e78c06f79d41e -Block 0025 [ 26]: 19e2b6aebb075733 -Block 0025 [ 27]: 4acc50b54032408a -Block 0025 [ 28]: 5ac7f30e4aaae5f4 -Block 0025 [ 29]: 0397e9e0f5d6e6ad -Block 0025 [ 30]: 0e711ba1239e83a4 -Block 0025 [ 31]: 0895d50a8ec9f19a -Block 0025 [ 32]: 3af5724f6e6c1e8d -Block 0025 [ 33]: 5af8c0606a4dc339 -Block 0025 [ 34]: 8096410d4630434c -Block 0025 [ 35]: 5cfdd78aa4075d16 -Block 0025 [ 36]: 2154a4ecd25dc45c -Block 0025 [ 37]: f0bb154e287e08e9 -Block 0025 [ 38]: 114f2bed186ce33e -Block 0025 [ 39]: 6d9c780293d2cd4c -Block 0025 [ 40]: 23612d45f0d156c9 -Block 0025 [ 41]: fa5e7e052ae2ba8e -Block 0025 [ 42]: 9eb8416e705b3c2c -Block 0025 [ 43]: ba6586685b87bd09 -Block 0025 [ 44]: 361a1cca5d78684f -Block 0025 [ 45]: f045f145f1047ecd -Block 0025 [ 46]: b66a58c8db976ddc -Block 0025 [ 47]: 1ff9eabf3e99d098 -Block 0025 [ 48]: bf57a4d81e63a4e5 -Block 0025 [ 49]: e9ba5c410ed8eeca -Block 0025 [ 50]: c2d46dbc68733832 -Block 0025 [ 51]: 5efc7dcb9b5bfe6d -Block 0025 [ 52]: 4154c8d811ee1e5a -Block 0025 [ 53]: b4cc77c95c0185c8 -Block 0025 [ 54]: 3d6ee2f21788c74a -Block 0025 [ 55]: 27588eb02b04eb8e -Block 0025 [ 56]: 28fb9544bf40218d -Block 0025 [ 57]: ca084c249c06f53d -Block 0025 [ 58]: d60b3b0c9ad45f54 -Block 0025 [ 59]: 65af42b7955016c8 -Block 0025 [ 60]: ddcff7cb451a8a7a -Block 0025 [ 61]: 399126720a6c58fb -Block 0025 [ 62]: cb9ca1ce53e78936 -Block 0025 [ 63]: 93a027cf494dd4d0 -Block 0025 [ 64]: 35ed9cd12a3a26eb -Block 0025 [ 65]: 4290e096ff8d8e24 -Block 0025 [ 66]: 45321339efcabf66 -Block 0025 [ 67]: a7721e8468b60e4c -Block 0025 [ 68]: 7cbc7aa27492601a -Block 0025 [ 69]: e1f50ea06a229f6c -Block 0025 [ 70]: 5691f85c4f126e26 -Block 0025 [ 71]: 874a48f6977c98b0 -Block 0025 [ 72]: 202b5f82a5b84018 -Block 0025 [ 73]: 7b32c5128fecb612 -Block 0025 [ 74]: a37ea9f179c0d7a0 -Block 0025 [ 75]: 327b8fc50cce958b -Block 0025 [ 76]: a8e2a1258fb1da80 -Block 0025 [ 77]: f80691238a1eef40 -Block 0025 [ 78]: 6c182b612af57ece -Block 0025 [ 79]: 178e573cc0d200e5 -Block 0025 [ 80]: bb8b504ceae9afe2 -Block 0025 [ 81]: 3c59e39992ae4a3c -Block 0025 [ 82]: 22b54658fd492202 -Block 0025 [ 83]: 52aea26785cac12b -Block 0025 [ 84]: 7c29b08458b0e3c3 -Block 0025 [ 85]: fd88eab7d627a17c -Block 0025 [ 86]: 37f909c6bd36b704 -Block 0025 [ 87]: 9f52cb379a083d4c -Block 0025 [ 88]: caee6a1fcad15eb9 -Block 0025 [ 89]: f7fd9d1a6b2bb28a -Block 0025 [ 90]: 304f7769dd3975f1 -Block 0025 [ 91]: 212c30fd3d98e27a -Block 0025 [ 92]: fef3d2bf4c3f7d45 -Block 0025 [ 93]: 2f0beb68030bb52e -Block 0025 [ 94]: ea352eb79030ef21 -Block 0025 [ 95]: 8d79331061c22ba6 -Block 0025 [ 96]: 770e83d3e6b823b1 -Block 0025 [ 97]: 89a9ec7c4487297f -Block 0025 [ 98]: 8dbcad4c4e11be67 -Block 0025 [ 99]: 8b7d38ef5fec1601 -Block 0025 [100]: e93c587d6bf2cbf9 -Block 0025 [101]: a53137a33d258830 -Block 0025 [102]: 7a0d11ca5acf1788 -Block 0025 [103]: b3dbaa7d7ecebd4d -Block 0025 [104]: d882e019de21daf8 -Block 0025 [105]: 45d2cdf54ca6be9a -Block 0025 [106]: 33d36d64d12442b6 -Block 0025 [107]: 8fc0b56aa86049d0 -Block 0025 [108]: 0b3fd87ac5ed9c10 -Block 0025 [109]: f3865aaea80fc664 -Block 0025 [110]: 5c85cbd5e3bbfcac -Block 0025 [111]: a2cc7235f21769e3 -Block 0025 [112]: 5ec5ce43bf29dd82 -Block 0025 [113]: de410519cd682004 -Block 0025 [114]: 3267444c60d75f3f -Block 0025 [115]: acd6ba02e82c6225 -Block 0025 [116]: 0322e9d6a5053284 -Block 0025 [117]: 4df45251e620c948 -Block 0025 [118]: adccf0d3de3bea09 -Block 0025 [119]: cb5bca189109f1ca -Block 0025 [120]: af2f65bee48c15b5 -Block 0025 [121]: 52989089263dd3d8 -Block 0025 [122]: 793c1f6d08cbe93f -Block 0025 [123]: d990a75b2ad2ff08 -Block 0025 [124]: 24e34bd7efd6d0d0 -Block 0025 [125]: c31b33bd91bcd47a -Block 0025 [126]: 34b1e70c5d8a133e -Block 0025 [127]: dd9b5f4b960c1c19 -Block 0026 [ 0]: dee9b2aa87871f5c -Block 0026 [ 1]: dd29e85f6d4b3046 -Block 0026 [ 2]: 983313f6040a4701 -Block 0026 [ 3]: 60e421701b903eb5 -Block 0026 [ 4]: aa1760fc7944b723 -Block 0026 [ 5]: 5e9cfdd75c022ec3 -Block 0026 [ 6]: 2344dd4599365deb -Block 0026 [ 7]: 46bcf69ff591ace9 -Block 0026 [ 8]: 67e126c5dffc41b8 -Block 0026 [ 9]: 6d03149e72cd6ad2 -Block 0026 [ 10]: ffd3ebb4669f8fb5 -Block 0026 [ 11]: 4f1f99d9f00858c8 -Block 0026 [ 12]: d188674d4f5880d3 -Block 0026 [ 13]: 4a9ed6f5c0f1136c -Block 0026 [ 14]: 293fac32e9fe652f -Block 0026 [ 15]: ca87659e3a8cb9f2 -Block 0026 [ 16]: 37f8096aae66b859 -Block 0026 [ 17]: 88efabca999b09d5 -Block 0026 [ 18]: f531a630ca5aea1f -Block 0026 [ 19]: c8d98dbee1b05b62 -Block 0026 [ 20]: 12296953234eed5f -Block 0026 [ 21]: 9d339201956f944d -Block 0026 [ 22]: eeda4cdc2976f262 -Block 0026 [ 23]: ba41e3628c946c9f -Block 0026 [ 24]: 1216bb9dce7018b2 -Block 0026 [ 25]: 1b261d6a529167cd -Block 0026 [ 26]: 4125bad6e4a3384d -Block 0026 [ 27]: db476851fa256b4a -Block 0026 [ 28]: b2fc7dc141cadae7 -Block 0026 [ 29]: c5eb5cb966d9dad9 -Block 0026 [ 30]: 3393e3a31b11a880 -Block 0026 [ 31]: ac872ec83d51cd5f -Block 0026 [ 32]: 29c51b4bd0274682 -Block 0026 [ 33]: c6c83089cb723994 -Block 0026 [ 34]: 1b0d4fe0d6e9f14b -Block 0026 [ 35]: 3cdce9f955907277 -Block 0026 [ 36]: 875c09bda8862c96 -Block 0026 [ 37]: 1d4e56b54e562742 -Block 0026 [ 38]: 12d9c0e0ac84c079 -Block 0026 [ 39]: ae01999edf7225b0 -Block 0026 [ 40]: 0e20472caed467fe -Block 0026 [ 41]: 6e487ddc7ea710e7 -Block 0026 [ 42]: a280d9ea0a29224c -Block 0026 [ 43]: 98126e05f1ce5ad4 -Block 0026 [ 44]: 9eb6223f8a3d336c -Block 0026 [ 45]: 60cec3a9a070e8e0 -Block 0026 [ 46]: 017adf6fe630672e -Block 0026 [ 47]: 3b7a7736523bc3bc -Block 0026 [ 48]: 9d5fb41cbf6adb09 -Block 0026 [ 49]: 48600b688c8c577e -Block 0026 [ 50]: 1051ce0ea3a4cfbc -Block 0026 [ 51]: a50896f93ece5cd0 -Block 0026 [ 52]: 4ff442fe3230ad8b -Block 0026 [ 53]: 604ceece7911b994 -Block 0026 [ 54]: 6541af944a04d111 -Block 0026 [ 55]: 8e987b86a8afdddd -Block 0026 [ 56]: ccac943c5646f2a4 -Block 0026 [ 57]: 86b5be6691aa654c -Block 0026 [ 58]: 412c474818edcb3b -Block 0026 [ 59]: 4b49534018da9114 -Block 0026 [ 60]: 9340dfc1b986dfa3 -Block 0026 [ 61]: dc0730e95c51f794 -Block 0026 [ 62]: f169981fadfc5549 -Block 0026 [ 63]: c71a8ee88ffef06c -Block 0026 [ 64]: eef8c797696883bd -Block 0026 [ 65]: 3dd92ac77d49f446 -Block 0026 [ 66]: 496d5985927355d0 -Block 0026 [ 67]: 5284e7cb68c2ca1b -Block 0026 [ 68]: 3c9719c5303b55fc -Block 0026 [ 69]: e3fb82f8ad2e8391 -Block 0026 [ 70]: d30b1110f61916d3 -Block 0026 [ 71]: 32512588b786c1fb -Block 0026 [ 72]: e010bdf498d961c9 -Block 0026 [ 73]: 074b5eb7e84d6ca2 -Block 0026 [ 74]: 44f8b7e9a934e38f -Block 0026 [ 75]: dde33fd942e913eb -Block 0026 [ 76]: f28b6b5e26433af4 -Block 0026 [ 77]: 8bbe1f779ca8dd98 -Block 0026 [ 78]: a804df4bb4ec3dd8 -Block 0026 [ 79]: daa6d81df64040fe -Block 0026 [ 80]: 842e1580985fd685 -Block 0026 [ 81]: 3c81fdf208936747 -Block 0026 [ 82]: 2f66d5edb35d9b3e -Block 0026 [ 83]: f0237f2a4fc163db -Block 0026 [ 84]: f019ee576d7661c2 -Block 0026 [ 85]: 0f7c9a4b83b83b05 -Block 0026 [ 86]: 5d6298890f9310f6 -Block 0026 [ 87]: 0ede0453519b1eda -Block 0026 [ 88]: 13af8affb04a2663 -Block 0026 [ 89]: 80872076367bfc81 -Block 0026 [ 90]: 2ea2f0780da7f2be -Block 0026 [ 91]: a99f73ce6a2a05c4 -Block 0026 [ 92]: b80dc9d2a2600dca -Block 0026 [ 93]: d4b9bc8454ffab5b -Block 0026 [ 94]: d200e46e43f879a9 -Block 0026 [ 95]: 537c6054435cb95c -Block 0026 [ 96]: 01b1a480310f40f5 -Block 0026 [ 97]: c05eec0798009539 -Block 0026 [ 98]: 47d145ed55765f11 -Block 0026 [ 99]: bc359cf5298fb1fb -Block 0026 [100]: 7a4fc2282e858a1e -Block 0026 [101]: 922e6d1261fe72a1 -Block 0026 [102]: 9233e06069f676ae -Block 0026 [103]: 28fd56cf04f236e6 -Block 0026 [104]: 2af5cbbab60a6994 -Block 0026 [105]: 8a035717c193c0e1 -Block 0026 [106]: be4d991be04daf58 -Block 0026 [107]: d62d6c8670910ca6 -Block 0026 [108]: ac8f20c64229cf79 -Block 0026 [109]: a0be7a6a741cb355 -Block 0026 [110]: 23a995532d6388a1 -Block 0026 [111]: b1538a43a24cd9f4 -Block 0026 [112]: e77500799ebece8d -Block 0026 [113]: ca127140631ad537 -Block 0026 [114]: 60a4f9f085cc5132 -Block 0026 [115]: 8e8bed70b3926177 -Block 0026 [116]: 208e7b4eb75dfb2e -Block 0026 [117]: 3b8f8ba0e8efffc7 -Block 0026 [118]: 8f18cb6e7a8d0f29 -Block 0026 [119]: 8f37d725599de412 -Block 0026 [120]: e14a83c050008162 -Block 0026 [121]: d2d6e966cbf9611a -Block 0026 [122]: ba9a2378c5dac511 -Block 0026 [123]: ba716dabf5ccd414 -Block 0026 [124]: 877f060b5aed5b8a -Block 0026 [125]: ad9db071b4cbcb75 -Block 0026 [126]: cab1f62b8803c369 -Block 0026 [127]: f050f7dbe5e6fd66 -Block 0027 [ 0]: 6cee4b9d191832e4 -Block 0027 [ 1]: a9ed71c242860d65 -Block 0027 [ 2]: 9d57bd98dc8c821a -Block 0027 [ 3]: 059bde7efdbfd8c1 -Block 0027 [ 4]: 269e8e1f20a45148 -Block 0027 [ 5]: 151e005fb247eb07 -Block 0027 [ 6]: d50170ee221d6e0e -Block 0027 [ 7]: 2c15fd72d852f3f9 -Block 0027 [ 8]: a170b2c99c039fbb -Block 0027 [ 9]: bb540d6fe2f80c7b -Block 0027 [ 10]: 26be1fccf08e833b -Block 0027 [ 11]: bec687afce3a11b5 -Block 0027 [ 12]: 49fbc628b10960c1 -Block 0027 [ 13]: 9ed97c1da2275ef6 -Block 0027 [ 14]: 67023b2e3ed8d148 -Block 0027 [ 15]: 6aaaff9a46cf4044 -Block 0027 [ 16]: ef946e6176c9df2d -Block 0027 [ 17]: 1924ca3e69fe39f1 -Block 0027 [ 18]: 3ab1dfab6b50980c -Block 0027 [ 19]: b70e0bc7440fc385 -Block 0027 [ 20]: fecdf018f791586e -Block 0027 [ 21]: 1236618a4c2e1d64 -Block 0027 [ 22]: aadc58b1c7562781 -Block 0027 [ 23]: 74394ced4218af4d -Block 0027 [ 24]: 1aef33449aa870fa -Block 0027 [ 25]: 20effaa9d742e0b6 -Block 0027 [ 26]: 2eac80dba70985a0 -Block 0027 [ 27]: a398c86bf53fc422 -Block 0027 [ 28]: b77b10e2168cc4d1 -Block 0027 [ 29]: fce8d4978068cf3d -Block 0027 [ 30]: 8bde6bd1a6bfb867 -Block 0027 [ 31]: 1a37ab91af293735 -Block 0027 [ 32]: ab2284a7ceced18a -Block 0027 [ 33]: 6d23a4a8dd5fcac2 -Block 0027 [ 34]: 01783511ff88040f -Block 0027 [ 35]: 0bfaa3cdd7629a5f -Block 0027 [ 36]: d1466859d1700abf -Block 0027 [ 37]: a323bfe6d5924ef6 -Block 0027 [ 38]: b0630ada9d4fa447 -Block 0027 [ 39]: 07621e3b349c5909 -Block 0027 [ 40]: fff27196da746f6e -Block 0027 [ 41]: ea43e184f8a6532e -Block 0027 [ 42]: 1998186d499f4e18 -Block 0027 [ 43]: 402e532b78357606 -Block 0027 [ 44]: e0a649a10d61d091 -Block 0027 [ 45]: 1eaf8a6209b93c4f -Block 0027 [ 46]: e1010b48889983a3 -Block 0027 [ 47]: 25655970b2a8d6de -Block 0027 [ 48]: 00a51d8b8c8e84e4 -Block 0027 [ 49]: 4f5db1b5e6dc5525 -Block 0027 [ 50]: fcc650fae81b515f -Block 0027 [ 51]: 0f676bb6cf68c300 -Block 0027 [ 52]: 860a1250580ae58d -Block 0027 [ 53]: eeef9111751458da -Block 0027 [ 54]: a789af0aaa552763 -Block 0027 [ 55]: ce24c29680c629d8 -Block 0027 [ 56]: 34ed0a8ee22bf010 -Block 0027 [ 57]: 3b0a4c70c76ffa93 -Block 0027 [ 58]: e9772cfe2b1b4614 -Block 0027 [ 59]: 0e0497ca49fd7322 -Block 0027 [ 60]: 85d0a7c5fdf74b8d -Block 0027 [ 61]: cd3891e2f2e49aa0 -Block 0027 [ 62]: 230c209081749b87 -Block 0027 [ 63]: 7295114e617d5b51 -Block 0027 [ 64]: 83d5c5fc1bfc5c22 -Block 0027 [ 65]: 2b9a2dfe113c5c95 -Block 0027 [ 66]: f388a2a9b91c3ed0 -Block 0027 [ 67]: ec61a56fc4028a0a -Block 0027 [ 68]: 7f32595cfd7865a8 -Block 0027 [ 69]: 85b7093f80093890 -Block 0027 [ 70]: 0b4d7bda002ad0de -Block 0027 [ 71]: 5b2b1bf027012ab1 -Block 0027 [ 72]: 9325569531e2db66 -Block 0027 [ 73]: 6c1ff4360235586d -Block 0027 [ 74]: d8ba96751d53a852 -Block 0027 [ 75]: 83410fdb0a21173a -Block 0027 [ 76]: 790fb01da6186465 -Block 0027 [ 77]: 7d3904d42d029f49 -Block 0027 [ 78]: c4ce0b7f94be6679 -Block 0027 [ 79]: c612310f9131c614 -Block 0027 [ 80]: d61e9b1f7a785d1f -Block 0027 [ 81]: f185e40a8bd95c05 -Block 0027 [ 82]: 4b6fb8883a1666e1 -Block 0027 [ 83]: ab03fcd9e323c69f -Block 0027 [ 84]: 42de84498a783ae8 -Block 0027 [ 85]: 7d16a844e4d8dcc9 -Block 0027 [ 86]: e81580d22a7bb2c1 -Block 0027 [ 87]: 7ed219f3a8c679b9 -Block 0027 [ 88]: 68f7c86d984e6784 -Block 0027 [ 89]: 7d123922ed59bbb9 -Block 0027 [ 90]: b45c03de2d713b60 -Block 0027 [ 91]: 99788dd95bc08ca7 -Block 0027 [ 92]: 09139929de450f31 -Block 0027 [ 93]: e76251a2f16af5f7 -Block 0027 [ 94]: f7087f98b0f45cad -Block 0027 [ 95]: 9d0dbd832c11fed4 -Block 0027 [ 96]: 49cfad882ed6c191 -Block 0027 [ 97]: 6aeb515660237856 -Block 0027 [ 98]: 02c5740c70202deb -Block 0027 [ 99]: 577d95f21e2e3bbf -Block 0027 [100]: c03e5473a2080989 -Block 0027 [101]: c262c10f462a8bc2 -Block 0027 [102]: 6fa94f1eacda3c70 -Block 0027 [103]: 45faae378c209581 -Block 0027 [104]: c7c7058e5f11b1b7 -Block 0027 [105]: 575cf1e4b381d95d -Block 0027 [106]: f5f663d9108800d4 -Block 0027 [107]: cb1fb7f209fd05d5 -Block 0027 [108]: 4841189501751a1b -Block 0027 [109]: 39a866af5fe517d2 -Block 0027 [110]: f9bbd9eec0fc0977 -Block 0027 [111]: 084fde551a81270d -Block 0027 [112]: 96923f1be57c5de3 -Block 0027 [113]: 808364e601919381 -Block 0027 [114]: 87bd3c59be533277 -Block 0027 [115]: 4e8f81a1886691f8 -Block 0027 [116]: 37e1a86f4b0f6f29 -Block 0027 [117]: 2bcd52d24d0d5585 -Block 0027 [118]: e583d419264bac50 -Block 0027 [119]: ba04b34eaa228f04 -Block 0027 [120]: 734b7b7ed2514509 -Block 0027 [121]: 8d48fa46cdf4380a -Block 0027 [122]: 07755610226a02a9 -Block 0027 [123]: d982c0b08c29f64a -Block 0027 [124]: 0213185434795e00 -Block 0027 [125]: 3f91b4136d9ab75e -Block 0027 [126]: 75a3cccc78dc560d -Block 0027 [127]: ca7664e9950ea00b -Block 0028 [ 0]: 021ba1bcdde6ad58 -Block 0028 [ 1]: 05754433d559cc24 -Block 0028 [ 2]: 13d1a128aa990eef -Block 0028 [ 3]: 1c5ba0f62141a511 -Block 0028 [ 4]: 8af1f026e263b7ab -Block 0028 [ 5]: e78a7881940a6c49 -Block 0028 [ 6]: cac7b0b9c260d131 -Block 0028 [ 7]: ce6a8fb8aa5ea347 -Block 0028 [ 8]: 244f1b3865d09688 -Block 0028 [ 9]: aa0a003891c3bfd7 -Block 0028 [ 10]: 3fe713094ec02d02 -Block 0028 [ 11]: ea6b606d3bce5251 -Block 0028 [ 12]: 9d66dfa678ded00a -Block 0028 [ 13]: c40de07bdf0185b6 -Block 0028 [ 14]: a3c77fc2f3c0fbb6 -Block 0028 [ 15]: 946bb60ad124c187 -Block 0028 [ 16]: c167a3e4cc7cfa26 -Block 0028 [ 17]: 54bc0c1e2d674273 -Block 0028 [ 18]: 105fc327f7e8ee3d -Block 0028 [ 19]: 16f039b56fc0a5a7 -Block 0028 [ 20]: a37bb14db8a46a9a -Block 0028 [ 21]: 48a54dec7fc69d51 -Block 0028 [ 22]: 9bce116e5facd867 -Block 0028 [ 23]: eb04c9f0019a2662 -Block 0028 [ 24]: b04eb3fd473a5d7b -Block 0028 [ 25]: 94b871a19cd1649a -Block 0028 [ 26]: 9ed5121361ce3387 -Block 0028 [ 27]: 6a1d11715db6979f -Block 0028 [ 28]: 59e15eddeb67ab7a -Block 0028 [ 29]: 839ccd2cb4c3318c -Block 0028 [ 30]: 7024ee61e96cee9f -Block 0028 [ 31]: 311c0401c64c981c -Block 0028 [ 32]: 65fc4884b80591cd -Block 0028 [ 33]: 3108e4165add79c1 -Block 0028 [ 34]: 0a3d0907c7ec23d5 -Block 0028 [ 35]: 94a38dd3f4ee55ab -Block 0028 [ 36]: 72faac9eabdaecca -Block 0028 [ 37]: 7a82e8dce2ea29f8 -Block 0028 [ 38]: 13c99f27feba2587 -Block 0028 [ 39]: 65c726d1264eb57c -Block 0028 [ 40]: 3f8c0497ad70ada4 -Block 0028 [ 41]: 0298113f4159a8ab -Block 0028 [ 42]: 458c01cb8c3ea337 -Block 0028 [ 43]: 1cf949c1a75e5e92 -Block 0028 [ 44]: 1e7253bebed45d79 -Block 0028 [ 45]: d55a5ec3329d8193 -Block 0028 [ 46]: e519244e1d684c9c -Block 0028 [ 47]: 7a0fa26b4cdc9472 -Block 0028 [ 48]: b0bf49049bc0740d -Block 0028 [ 49]: 1a7fc20aabf75ef8 -Block 0028 [ 50]: 38e09ddc184047e0 -Block 0028 [ 51]: 8516c0eec030039b -Block 0028 [ 52]: 6f9ea72875456583 -Block 0028 [ 53]: 4f013974f9881a3c -Block 0028 [ 54]: d0e3b2abf57f9778 -Block 0028 [ 55]: 4e114931fa4f38e3 -Block 0028 [ 56]: aa2c1b90c2b84707 -Block 0028 [ 57]: 7cf9e1bec166fa3c -Block 0028 [ 58]: 1d14ff9ce7c7c685 -Block 0028 [ 59]: 9b88487090e17bf9 -Block 0028 [ 60]: 150c3ca35ccf0b87 -Block 0028 [ 61]: daac811c31be3821 -Block 0028 [ 62]: bcdd701f9e1b680f -Block 0028 [ 63]: 9efb7a1bade02efb -Block 0028 [ 64]: 965ec869ef55fa1f -Block 0028 [ 65]: bc5ebba00a595680 -Block 0028 [ 66]: d230a4dc0284e46b -Block 0028 [ 67]: 823fec805865fb74 -Block 0028 [ 68]: fed454a3199ac15d -Block 0028 [ 69]: 68bf5dcdfd59023a -Block 0028 [ 70]: 03fb3802c49c76d3 -Block 0028 [ 71]: 640356823d9e1f25 -Block 0028 [ 72]: 9af81ea04ffae2d6 -Block 0028 [ 73]: dfe109e2b7d0bf40 -Block 0028 [ 74]: 66fc8c0daf88a898 -Block 0028 [ 75]: c75315d22fe1aa30 -Block 0028 [ 76]: f0caf3aea9d40a17 -Block 0028 [ 77]: afdbdabb57ab2819 -Block 0028 [ 78]: 174e7c9c1c84c955 -Block 0028 [ 79]: b6a536c200abab95 -Block 0028 [ 80]: d613e8709aa02577 -Block 0028 [ 81]: 39241a2e6f32c0af -Block 0028 [ 82]: 2f5332d5bf68ae62 -Block 0028 [ 83]: 92c842d69e754894 -Block 0028 [ 84]: dcb13e9f3e408523 -Block 0028 [ 85]: b3d1ecfdc8704dd6 -Block 0028 [ 86]: aaee559c5be890d6 -Block 0028 [ 87]: 393b7f63de100e35 -Block 0028 [ 88]: 322cf47045b22301 -Block 0028 [ 89]: 19ff6b2aa2ac9277 -Block 0028 [ 90]: dce7764521ba0a7b -Block 0028 [ 91]: ec055028f6e83fb8 -Block 0028 [ 92]: f2f20eeb21b515e9 -Block 0028 [ 93]: b9fd8d709f86f77e -Block 0028 [ 94]: f87e5b1d24d6bec3 -Block 0028 [ 95]: 5545693938b9b1b0 -Block 0028 [ 96]: d79b6740a34e5f86 -Block 0028 [ 97]: 1019c5dbba476ad9 -Block 0028 [ 98]: 9a55366e9030da6f -Block 0028 [ 99]: d43822683b3e8be4 -Block 0028 [100]: f966c8e1e7a36675 -Block 0028 [101]: fbf3966b8b80870d -Block 0028 [102]: 66d11762697d27b0 -Block 0028 [103]: 75969a1a3942deb2 -Block 0028 [104]: f28afc2f58cf33d6 -Block 0028 [105]: 55d35c2336ca57ee -Block 0028 [106]: 667d8b6d12f977e1 -Block 0028 [107]: 771b375bfff2802b -Block 0028 [108]: 21dc11f30d79569c -Block 0028 [109]: f02c16d785001d38 -Block 0028 [110]: aacb1ac75e686919 -Block 0028 [111]: 4ab85ab2b6c1835c -Block 0028 [112]: 049a59753bcfea7c -Block 0028 [113]: d8ec0bbcaff19bf1 -Block 0028 [114]: 555b8fb2fb3fc18a -Block 0028 [115]: 8c21368e54c09192 -Block 0028 [116]: f63dc13c28a441d3 -Block 0028 [117]: a9fe5883c3d89563 -Block 0028 [118]: 08d8ea5088dffb01 -Block 0028 [119]: dca841375d9b9868 -Block 0028 [120]: 667c3365686b7486 -Block 0028 [121]: 49bf1533c8b4064f -Block 0028 [122]: 602aea24f66274ea -Block 0028 [123]: bfc3de51f2c4d4c4 -Block 0028 [124]: ec8c6cdd1a00e16b -Block 0028 [125]: a9193f90093496b2 -Block 0028 [126]: 256c38224299ea19 -Block 0028 [127]: 57639a4bcfa0922e -Block 0029 [ 0]: bd80fcc7c493a4cc -Block 0029 [ 1]: c5023918f090ee9e -Block 0029 [ 2]: 120c321b4380db6a -Block 0029 [ 3]: af7830696eae7fca -Block 0029 [ 4]: eae34d49a4d64266 -Block 0029 [ 5]: 90ae58d5d4b35e0e -Block 0029 [ 6]: c7e27180eb24ab38 -Block 0029 [ 7]: 41a8a21726d95593 -Block 0029 [ 8]: aa48d5fffffa1bec -Block 0029 [ 9]: cd0a98894a346d20 -Block 0029 [ 10]: e9918f3944c6c57a -Block 0029 [ 11]: 0d51b503be8b7d3f -Block 0029 [ 12]: c01a39d6e5a816d3 -Block 0029 [ 13]: d98714fb42090c9a -Block 0029 [ 14]: 5b0f8b46c6552043 -Block 0029 [ 15]: f67ebb64f9c95c72 -Block 0029 [ 16]: 7a327ab56661672d -Block 0029 [ 17]: 014e44f8e1d6f4d0 -Block 0029 [ 18]: 22b0135ae6ce2169 -Block 0029 [ 19]: 5acb3fe8583bbbd4 -Block 0029 [ 20]: 8b77215be2ee636d -Block 0029 [ 21]: e1ceeab70e75a00b -Block 0029 [ 22]: 23bfe2afcc7274cb -Block 0029 [ 23]: e999907479ac7504 -Block 0029 [ 24]: 1a6263a273550a10 -Block 0029 [ 25]: 1d859d178a3556ee -Block 0029 [ 26]: d64aaa268bb5dfd5 -Block 0029 [ 27]: e5828d9d546d97cd -Block 0029 [ 28]: 6d1b4cd3c40591cc -Block 0029 [ 29]: 0661a62919dcf007 -Block 0029 [ 30]: fe81c4564cb304a9 -Block 0029 [ 31]: 79cf16a922a779bc -Block 0029 [ 32]: ff1c06acaca27742 -Block 0029 [ 33]: 23560b1205c5d4b1 -Block 0029 [ 34]: cecc64bc877212ae -Block 0029 [ 35]: 825465623ee4a468 -Block 0029 [ 36]: eea58b7496232e66 -Block 0029 [ 37]: 183cb64d603654f4 -Block 0029 [ 38]: 8f8bd8e1ba69fa6c -Block 0029 [ 39]: 46f47e6e0d443920 -Block 0029 [ 40]: 9278985cd955bac8 -Block 0029 [ 41]: eac6643986183a3f -Block 0029 [ 42]: 192c91da027c23de -Block 0029 [ 43]: f57b6cc6e82866cd -Block 0029 [ 44]: d231ac4c4df30e2c -Block 0029 [ 45]: 2cd3b6b6246d7aca -Block 0029 [ 46]: 7c1568e891d26f7b -Block 0029 [ 47]: 9021075d21c78aed -Block 0029 [ 48]: aefe6fca182c4173 -Block 0029 [ 49]: 636f6b7c9baf5612 -Block 0029 [ 50]: b03144eca38c224f -Block 0029 [ 51]: f2b62ee56a803d3a -Block 0029 [ 52]: 8f74f5b5a60a3836 -Block 0029 [ 53]: c7178cc43f208500 -Block 0029 [ 54]: 7f13626ba8001211 -Block 0029 [ 55]: 488a9269357691d2 -Block 0029 [ 56]: d7cb7779d0658d00 -Block 0029 [ 57]: 9b149d43a08de81a -Block 0029 [ 58]: 5e7353a6bb2c1b8c -Block 0029 [ 59]: dfe5cf98b5a80325 -Block 0029 [ 60]: b3650e30db17f3f8 -Block 0029 [ 61]: 6175497305602f2c -Block 0029 [ 62]: cdb7de41d2d8920c -Block 0029 [ 63]: 2f1c8b7cdc478ba1 -Block 0029 [ 64]: 3ff1f88d8c4322b6 -Block 0029 [ 65]: 536a009eddf2acc2 -Block 0029 [ 66]: 1d1f7900970142d0 -Block 0029 [ 67]: be173300ae594dc5 -Block 0029 [ 68]: d834bc0fb7c26737 -Block 0029 [ 69]: d0e6a394e14a8afa -Block 0029 [ 70]: 1c6f7dc2b61a68ba -Block 0029 [ 71]: 6d4108d773a24064 -Block 0029 [ 72]: 165a18fae86da727 -Block 0029 [ 73]: 2c630bded29340eb -Block 0029 [ 74]: d5484247b2b1b85b -Block 0029 [ 75]: fac0b38c5baeca1b -Block 0029 [ 76]: 910314fa78a08093 -Block 0029 [ 77]: 45e5737d9f5ba290 -Block 0029 [ 78]: 7e16e0d27234eda1 -Block 0029 [ 79]: 87090ffaf76b4dc8 -Block 0029 [ 80]: d5a96bdc6813af4f -Block 0029 [ 81]: 8c76742877047af9 -Block 0029 [ 82]: a8e3c59550fdaa11 -Block 0029 [ 83]: e63a45ddb7435b1e -Block 0029 [ 84]: 6f6ce4dd69a8b71f -Block 0029 [ 85]: f68f28b76c6af71d -Block 0029 [ 86]: ad52a1a38c74efae -Block 0029 [ 87]: c0025f62b2b43ca1 -Block 0029 [ 88]: bdfab290d7ceef39 -Block 0029 [ 89]: 4d997d3fcd108ee8 -Block 0029 [ 90]: 6e24a833e1d8a49f -Block 0029 [ 91]: 349585e1656c0931 -Block 0029 [ 92]: 7a38ee0f7efd88dc -Block 0029 [ 93]: 77f60e1ef786ab0b -Block 0029 [ 94]: 29490d414e566f59 -Block 0029 [ 95]: e9093cb773a67699 -Block 0029 [ 96]: 5636f645e6065f9b -Block 0029 [ 97]: 413cdadedad007a6 -Block 0029 [ 98]: 3ce17b377bb2ad09 -Block 0029 [ 99]: 9521a534bacb031b -Block 0029 [100]: 546c24c320ead0ef -Block 0029 [101]: e0675e71649d878b -Block 0029 [102]: a47fad1344a99e2e -Block 0029 [103]: 408876c4f82c47dc -Block 0029 [104]: dca85e162f8d0d36 -Block 0029 [105]: 6877846c40c7f0f2 -Block 0029 [106]: d864a84891ab5412 -Block 0029 [107]: f258de875bdca86d -Block 0029 [108]: 03e85378a491acbf -Block 0029 [109]: ef4333022e5e2266 -Block 0029 [110]: 7e5cab39863e81d4 -Block 0029 [111]: afda4f13115bf9e9 -Block 0029 [112]: 0862355e4c705112 -Block 0029 [113]: 0adbeb157deff933 -Block 0029 [114]: 059707393cc95e97 -Block 0029 [115]: fd3182b6cc4b166c -Block 0029 [116]: 2c961278c9d1f4b5 -Block 0029 [117]: a26f46272f117fe1 -Block 0029 [118]: d6cc93a6f359730d -Block 0029 [119]: d3c00e15a7b16c88 -Block 0029 [120]: 126313ed08ab6177 -Block 0029 [121]: 07fedc02098d9756 -Block 0029 [122]: 3eea4cd3ad6e17df -Block 0029 [123]: 77383c002c96a26f -Block 0029 [124]: 6f84dcc0df35965f -Block 0029 [125]: fda794b95a3ed635 -Block 0029 [126]: 17c31f69d737fecd -Block 0029 [127]: 1d0bb16832a5d8d9 -Block 0030 [ 0]: 06faaf86c4357a63 -Block 0030 [ 1]: 187215eb774ab9c4 -Block 0030 [ 2]: e5d6061e3a116325 -Block 0030 [ 3]: 56360afd6c76444b -Block 0030 [ 4]: e2ae61086f6baa40 -Block 0030 [ 5]: 95404adbf442bf22 -Block 0030 [ 6]: 17f373fd6aafa6e8 -Block 0030 [ 7]: a41d44529d3c7702 -Block 0030 [ 8]: f16f0c58c5a515a3 -Block 0030 [ 9]: 2cf725568683bad4 -Block 0030 [ 10]: 46fb319e77174ad4 -Block 0030 [ 11]: 0e7ad98d8b446f88 -Block 0030 [ 12]: 11001e00646f1339 -Block 0030 [ 13]: d13329ad0f7eeca2 -Block 0030 [ 14]: f87b30bd41ec5063 -Block 0030 [ 15]: 83f6de915368cb97 -Block 0030 [ 16]: 1d72642a0cfc2c12 -Block 0030 [ 17]: 1c49f60f8fe27a9d -Block 0030 [ 18]: e14c4a9eb832fb0a -Block 0030 [ 19]: 0558b1e4c804f704 -Block 0030 [ 20]: ae214c39704454c7 -Block 0030 [ 21]: e1543cded2b2b1a4 -Block 0030 [ 22]: 50025cf0f167f678 -Block 0030 [ 23]: 1ddd862ffe3480aa -Block 0030 [ 24]: 767efd1c4f0c72d0 -Block 0030 [ 25]: 02801327344e815f -Block 0030 [ 26]: 9501d4e0f2971e86 -Block 0030 [ 27]: fd0c9541a4739bc0 -Block 0030 [ 28]: af1851ea44b3e369 -Block 0030 [ 29]: 37215e2791a82a3e -Block 0030 [ 30]: d0c64eeb8306a627 -Block 0030 [ 31]: 1f592f7e1dcc4ea0 -Block 0030 [ 32]: 2ffe7eeb807e5dd1 -Block 0030 [ 33]: ecd4afdf62b6a263 -Block 0030 [ 34]: 588674ffb6710991 -Block 0030 [ 35]: bbe3344c63d991fe -Block 0030 [ 36]: 4d25aba6ecb0ab9e -Block 0030 [ 37]: b97c6198cb98993a -Block 0030 [ 38]: faf1d9e4b742e20b -Block 0030 [ 39]: a0fa95a0d9036fed -Block 0030 [ 40]: 10c92928749af328 -Block 0030 [ 41]: a2f08707d69942f0 -Block 0030 [ 42]: 14ed52c3376fbbb1 -Block 0030 [ 43]: 491744b39b23ec69 -Block 0030 [ 44]: 3d6fb0f811e1fa93 -Block 0030 [ 45]: b16b0918d1822cd1 -Block 0030 [ 46]: 4e9e24e3d83f58d7 -Block 0030 [ 47]: 937438d4d16a045d -Block 0030 [ 48]: 5c4dfe9183e7027d -Block 0030 [ 49]: 242d26fab41e8429 -Block 0030 [ 50]: 837997f2bcb0a989 -Block 0030 [ 51]: 733af3308f05666b -Block 0030 [ 52]: 9e7eff9d395b0d26 -Block 0030 [ 53]: f5eddbcb0359d70a -Block 0030 [ 54]: 6fb6f80eee13ee63 -Block 0030 [ 55]: 79705f3b3e8f50e6 -Block 0030 [ 56]: d400902a38bf8231 -Block 0030 [ 57]: 87905ac331d93527 -Block 0030 [ 58]: 759a79c21cdbe946 -Block 0030 [ 59]: 6e1bab338c267a63 -Block 0030 [ 60]: 2aaeddc1fd55ec08 -Block 0030 [ 61]: 73dcdb99d6529922 -Block 0030 [ 62]: fc20a90382ff207e -Block 0030 [ 63]: cd9951922068a854 -Block 0030 [ 64]: 99a2d615ce8f36d0 -Block 0030 [ 65]: 214b493680f9162a -Block 0030 [ 66]: 82a32c9170dd7706 -Block 0030 [ 67]: e7480d0108c76bee -Block 0030 [ 68]: 8a7f18a34fffdc27 -Block 0030 [ 69]: 2b2785750dcc7550 -Block 0030 [ 70]: 481082b18dbf5424 -Block 0030 [ 71]: 52583c728ae14666 -Block 0030 [ 72]: 5f5f694e2b724738 -Block 0030 [ 73]: 36f9c65d26534609 -Block 0030 [ 74]: 62cc88761fca9a68 -Block 0030 [ 75]: 0dd13380d7ac1f16 -Block 0030 [ 76]: 35fb9d078427ad24 -Block 0030 [ 77]: 1700fcdf1b796e53 -Block 0030 [ 78]: 158003d77db2d9d0 -Block 0030 [ 79]: 7cb7c0c420b5d9b1 -Block 0030 [ 80]: 782c4d56a15aebcd -Block 0030 [ 81]: ffe85632965712b0 -Block 0030 [ 82]: 129aee8c44b285ed -Block 0030 [ 83]: 21190577528afe47 -Block 0030 [ 84]: db9c19d775e6f11d -Block 0030 [ 85]: ac43b65cd70c76d2 -Block 0030 [ 86]: d325e5810a76c6b5 -Block 0030 [ 87]: 8f034f7e0eb746e5 -Block 0030 [ 88]: c8df3124c2cb3557 -Block 0030 [ 89]: 2f12b6192f15485a -Block 0030 [ 90]: ddb7107ff4a7f86b -Block 0030 [ 91]: 2887b68c44815c3e -Block 0030 [ 92]: 857831851a4949cc -Block 0030 [ 93]: a1f5e6dade25bc50 -Block 0030 [ 94]: 484f51bbb5b197e7 -Block 0030 [ 95]: b0d74bffbdee2ded -Block 0030 [ 96]: 6385f08f32511be4 -Block 0030 [ 97]: 4a67a1191db0dfa1 -Block 0030 [ 98]: 805ca6260698783f -Block 0030 [ 99]: 96c092604ed6b946 -Block 0030 [100]: 66893b81339d9ca9 -Block 0030 [101]: 51369a103bfb3948 -Block 0030 [102]: a8aa1fa92bf61251 -Block 0030 [103]: 6e09aaba9f66053c -Block 0030 [104]: c5ce3eb103dd370a -Block 0030 [105]: 4a2aaa9aaf6215ee -Block 0030 [106]: c67a60f23cc8a558 -Block 0030 [107]: a55e72a95dd53eea -Block 0030 [108]: dc97febd17830de0 -Block 0030 [109]: 635d64d5daf2bae4 -Block 0030 [110]: 6a2c19df26561bf8 -Block 0030 [111]: 1c87e6f1395ecce8 -Block 0030 [112]: 30654b9719440212 -Block 0030 [113]: 3eaf14e4981b3a4c -Block 0030 [114]: 39ec1251215373a9 -Block 0030 [115]: 5409e426ae48c456 -Block 0030 [116]: 438a2a14e43f1c87 -Block 0030 [117]: ffa3bfcd4f2e9316 -Block 0030 [118]: 0d0731d2e6465b95 -Block 0030 [119]: 6a8389557c831fd5 -Block 0030 [120]: 87f96e864fd48bc3 -Block 0030 [121]: 21cff67fa2b9db4a -Block 0030 [122]: 715fe10e95ff3746 -Block 0030 [123]: f2ade635af167312 -Block 0030 [124]: f7b3dd2ddbbbc129 -Block 0030 [125]: e3318db2d934c7f1 -Block 0030 [126]: e859c153c96218ce -Block 0030 [127]: 164fe9bc73bb26b4 -Block 0031 [ 0]: 1b75efd5304f056d -Block 0031 [ 1]: bf463e41d488275c -Block 0031 [ 2]: 941b47873adff5fe -Block 0031 [ 3]: 2e9b6397d72d3c3f -Block 0031 [ 4]: 5c5cbd4b38fbb99c -Block 0031 [ 5]: 35c8fb736f64ceeb -Block 0031 [ 6]: f09d8a73916dac38 -Block 0031 [ 7]: 93fba50823df06e6 -Block 0031 [ 8]: 0b7757128f783ae7 -Block 0031 [ 9]: bdee6f93051c40aa -Block 0031 [ 10]: c66cbdc6778c0eac -Block 0031 [ 11]: b033a39dac87bfd7 -Block 0031 [ 12]: 02b71a0ce04fadbe -Block 0031 [ 13]: 22e11dc3dc9e2bbd -Block 0031 [ 14]: b34ca0ba5283da3d -Block 0031 [ 15]: 6d6e3e83c2054d72 -Block 0031 [ 16]: cee1e38f20aabb40 -Block 0031 [ 17]: e60fd2fca2962346 -Block 0031 [ 18]: 6271c1ea64d3acab -Block 0031 [ 19]: e53b94baf089a82a -Block 0031 [ 20]: 986c8964a9c8856e -Block 0031 [ 21]: 634dab64bedb01cd -Block 0031 [ 22]: 3f102b85059c1b57 -Block 0031 [ 23]: 56bb3aa72f1cfe45 -Block 0031 [ 24]: 624cad38f78c2c7c -Block 0031 [ 25]: a41c872fb170de87 -Block 0031 [ 26]: fca6abd7af42e829 -Block 0031 [ 27]: 656d576d3c7dcf23 -Block 0031 [ 28]: 5a3ea0d15d914a77 -Block 0031 [ 29]: 68b39ed03d43822c -Block 0031 [ 30]: 326f2a39f2cf6e71 -Block 0031 [ 31]: 87032ea9406a27a3 -Block 0031 [ 32]: 290b8ca6f768dcd5 -Block 0031 [ 33]: 971ad7984f60d557 -Block 0031 [ 34]: f969c776d05a6ba2 -Block 0031 [ 35]: 568f1669228eae4f -Block 0031 [ 36]: 66c7df737d2d098c -Block 0031 [ 37]: 5991c4325083ca15 -Block 0031 [ 38]: 0a33cadfa5489d6b -Block 0031 [ 39]: 85161c0f20ada2e7 -Block 0031 [ 40]: 753e2541d4f26d3c -Block 0031 [ 41]: 529bd28c7b89855c -Block 0031 [ 42]: f37985cd14b0fc66 -Block 0031 [ 43]: 0d543ab4a2ab4a2c -Block 0031 [ 44]: d9821ac717c5da03 -Block 0031 [ 45]: 13aa09d388b150ca -Block 0031 [ 46]: 9d892c542b2da4f8 -Block 0031 [ 47]: 4596a049a50684c7 -Block 0031 [ 48]: 25fb0e9d2e35a2a6 -Block 0031 [ 49]: d53a3dde8446ae68 -Block 0031 [ 50]: 7a3670321ac561e6 -Block 0031 [ 51]: bb08107f2560b09f -Block 0031 [ 52]: 14c3857b159792dc -Block 0031 [ 53]: 6210affb7186cee3 -Block 0031 [ 54]: 7e1eb58956a1fb4a -Block 0031 [ 55]: e2b2d6ce4588401d -Block 0031 [ 56]: 5a6f61240e364ad2 -Block 0031 [ 57]: b6c884fdf1050aeb -Block 0031 [ 58]: f6286b150c1da490 -Block 0031 [ 59]: bb8e51a87b94f8a0 -Block 0031 [ 60]: 332ce9283f68d85e -Block 0031 [ 61]: c38fdd3f7434f32d -Block 0031 [ 62]: 228866b2c26e34c8 -Block 0031 [ 63]: f85ebc1618b79b6d -Block 0031 [ 64]: b518f14fc56caef6 -Block 0031 [ 65]: 752a292663431849 -Block 0031 [ 66]: 9d5fe9dac0697517 -Block 0031 [ 67]: b535a68f65c57dc0 -Block 0031 [ 68]: e348ea1cdac43f44 -Block 0031 [ 69]: 13f1334d6e9bf85e -Block 0031 [ 70]: 283b8fe3a17c3fea -Block 0031 [ 71]: 21bd877a7a74957a -Block 0031 [ 72]: ee156e24dd64640c -Block 0031 [ 73]: 22cfce14f0330ae5 -Block 0031 [ 74]: eb54556dd37c24d1 -Block 0031 [ 75]: 7d801f2118f7fa33 -Block 0031 [ 76]: 4c617d0148a382a9 -Block 0031 [ 77]: 58bf2b668a7c045d -Block 0031 [ 78]: 4cb48eb731183f86 -Block 0031 [ 79]: c3079adbfc30460d -Block 0031 [ 80]: 49215e84eb3b907f -Block 0031 [ 81]: f152c24a4624747e -Block 0031 [ 82]: 450842e74d33266d -Block 0031 [ 83]: 572ae15c16095fa3 -Block 0031 [ 84]: 5a5fc57805f2adc5 -Block 0031 [ 85]: 05c3fb94ed3ea6fa -Block 0031 [ 86]: 780589833f0abe13 -Block 0031 [ 87]: 87825a64c89e9a64 -Block 0031 [ 88]: ddaf109d7b13c739 -Block 0031 [ 89]: e8ebb94b4825d7bb -Block 0031 [ 90]: 62a82e219106de32 -Block 0031 [ 91]: f39e2861606df718 -Block 0031 [ 92]: e6210ab24e5b2584 -Block 0031 [ 93]: 770ea215d0556c76 -Block 0031 [ 94]: c974eef2fe9709e2 -Block 0031 [ 95]: fccb2cd4fe87501e -Block 0031 [ 96]: f12e254dc0df1911 -Block 0031 [ 97]: 26f01267d74549b5 -Block 0031 [ 98]: f9945591c29e5796 -Block 0031 [ 99]: f25bf3d06f6e0cdb -Block 0031 [100]: 29dd601fc1ebd250 -Block 0031 [101]: 9e1a251ecd42416a -Block 0031 [102]: c5f64ffca0f15a94 -Block 0031 [103]: 6b77e4cd72364bc2 -Block 0031 [104]: 87d514d8c7a2177a -Block 0031 [105]: b78b0f6991278189 -Block 0031 [106]: 3d2bcaa959d93492 -Block 0031 [107]: f45032027a4fcb81 -Block 0031 [108]: 9d96e07f3d41419c -Block 0031 [109]: 8e83ef21420b0263 -Block 0031 [110]: 0b834ffee596a9f1 -Block 0031 [111]: 987b7f1f2c86475d -Block 0031 [112]: 24840f2805ee7c0f -Block 0031 [113]: 23629efc11196286 -Block 0031 [114]: 56fd8771a0bc617a -Block 0031 [115]: 125e85de9586d448 -Block 0031 [116]: 4f194efe3a546712 -Block 0031 [117]: 0aabaee1afd9f936 -Block 0031 [118]: 47cb3f180ec29af9 -Block 0031 [119]: 8d3169c8810c7258 -Block 0031 [120]: cc9ab6861463e518 -Block 0031 [121]: cb72c54e6e7bd740 -Block 0031 [122]: a3161c47c51f546d -Block 0031 [123]: 38292d24214a65ab -Block 0031 [124]: a67ff90c16266a3c -Block 0031 [125]: 241fe584e4283bd8 -Block 0031 [126]: 16e73c7bc1067de9 -Block 0031 [127]: 78f5f3c568b26d50 - - After pass 2: -Block 0000 [ 0]: b2db2cba8393858f -Block 0000 [ 1]: b1645132ef755439 -Block 0000 [ 2]: c65526cc5b1ba836 -Block 0000 [ 3]: 0ceb6fde5a697c6d -Block 0000 [ 4]: cfba7c49d2c8a63e -Block 0000 [ 5]: ecca6830247751b0 -Block 0000 [ 6]: dfbcd384882e51bd -Block 0000 [ 7]: 0fae5c46e1916edd -Block 0000 [ 8]: b66226556fb54ed2 -Block 0000 [ 9]: 42677ba7315d3bdf -Block 0000 [ 10]: 51e965bd9678b787 -Block 0000 [ 11]: 41c58891359f7528 -Block 0000 [ 12]: 07c3c951dd9888f4 -Block 0000 [ 13]: b962bd19f8ad4887 -Block 0000 [ 14]: d9bcf1cb6d828ed1 -Block 0000 [ 15]: 1df7994029c16524 -Block 0000 [ 16]: 2c7c3b51da8ff0aa -Block 0000 [ 17]: 1419e9fa233b18a5 -Block 0000 [ 18]: 3a214d367965963a -Block 0000 [ 19]: 43b20d50ee8bdda7 -Block 0000 [ 20]: df32702230d38d42 -Block 0000 [ 21]: 7ee13d5892a9fde2 -Block 0000 [ 22]: fae7bfbcc7f2aae1 -Block 0000 [ 23]: 40045b3b20d1866a -Block 0000 [ 24]: 83d006d8e9595c48 -Block 0000 [ 25]: e1212375d386d373 -Block 0000 [ 26]: 0b72f1ff6dfae513 -Block 0000 [ 27]: 9bcd8a180ed0bbf9 -Block 0000 [ 28]: 3e1a3d7fa172da36 -Block 0000 [ 29]: 3bac80b4cedb219e -Block 0000 [ 30]: 3c3459c96616599e -Block 0000 [ 31]: b592b19385558ea1 -Block 0000 [ 32]: fbd2493ed10bb2a7 -Block 0000 [ 33]: 250e933ef6c9c020 -Block 0000 [ 34]: 0d7e0cefe3d0a15a -Block 0000 [ 35]: 6a7662c61a16f7fe -Block 0000 [ 36]: 245ee24b96eb96f1 -Block 0000 [ 37]: f06fce3e54a2d2bf -Block 0000 [ 38]: 89645646c43d254d -Block 0000 [ 39]: 1d6e702c0b24a3e2 -Block 0000 [ 40]: 4f29b5744156c572 -Block 0000 [ 41]: e510c23181c5b3ff -Block 0000 [ 42]: c19e9621e1c84234 -Block 0000 [ 43]: 97a28b13fd5bc3ce -Block 0000 [ 44]: d9e3c96741d996fa -Block 0000 [ 45]: 1b76d65989002d8c -Block 0000 [ 46]: 6dcb12f59eb46a20 -Block 0000 [ 47]: cdea2a6952939ac9 -Block 0000 [ 48]: 73cde7598b16f5e6 -Block 0000 [ 49]: 6e8d427a1fa79cc6 -Block 0000 [ 50]: 09231b609a9afff8 -Block 0000 [ 51]: daa1b5f0188f0433 -Block 0000 [ 52]: 893dfceae459725d -Block 0000 [ 53]: 592be1b00b7b28c8 -Block 0000 [ 54]: ac7c1b8ab820cf31 -Block 0000 [ 55]: 781a15a64a128347 -Block 0000 [ 56]: eb8d6ff2c23512dd -Block 0000 [ 57]: ec5bc9d05a4e273c -Block 0000 [ 58]: bd384a622836102a -Block 0000 [ 59]: 5076d7e3dcf92f7d -Block 0000 [ 60]: 439801ec770beae5 -Block 0000 [ 61]: 85ac3cddfe44da89 -Block 0000 [ 62]: 99b614b31261a345 -Block 0000 [ 63]: e2933b5f9611fc54 -Block 0000 [ 64]: 3037fa06b1ece01e -Block 0000 [ 65]: c9e51071135fa751 -Block 0000 [ 66]: 05bb076f2cc813f6 -Block 0000 [ 67]: 9f4717653db38ec9 -Block 0000 [ 68]: 41c71e48750cee5c -Block 0000 [ 69]: 9a0efdc6a8348896 -Block 0000 [ 70]: e8d34542f503625f -Block 0000 [ 71]: 6ac59a202acd31be -Block 0000 [ 72]: 0c6c398fd2b99bed -Block 0000 [ 73]: d7ed380318328435 -Block 0000 [ 74]: e1298d4fc69251c3 -Block 0000 [ 75]: 1b2f183356e54668 -Block 0000 [ 76]: 6eebc1ee8ed6cb90 -Block 0000 [ 77]: c261fa0c99a39c45 -Block 0000 [ 78]: 6df71efdef5b48c9 -Block 0000 [ 79]: 07162892169da587 -Block 0000 [ 80]: 5e736de2bdac47a6 -Block 0000 [ 81]: fde80f2d0a04bdfc -Block 0000 [ 82]: fd8486ce15f751d2 -Block 0000 [ 83]: e0f22c17510e70ac -Block 0000 [ 84]: 6a30ca58582063c8 -Block 0000 [ 85]: b325e44084988694 -Block 0000 [ 86]: 89f74d37d22ff300 -Block 0000 [ 87]: e9c409d05c38072b -Block 0000 [ 88]: 5fe0a89cb1e2e19b -Block 0000 [ 89]: c090cb619dbb525d -Block 0000 [ 90]: 0507d89abbab17f6 -Block 0000 [ 91]: 2fee6db9325d264f -Block 0000 [ 92]: e3fd1f8eedbda3e4 -Block 0000 [ 93]: 3424a4136765270d -Block 0000 [ 94]: c5b19c3af1971bbc -Block 0000 [ 95]: 6cb49826baeea0fd -Block 0000 [ 96]: b9b340de7a225a23 -Block 0000 [ 97]: 4b725cbedf9b7b08 -Block 0000 [ 98]: 7c75fc3b73e1b6d2 -Block 0000 [ 99]: fcd2e45c0fcd34aa -Block 0000 [100]: a5ad7705b674a22e -Block 0000 [101]: 6e2745f70d2e377d -Block 0000 [102]: 59006b446c4c82bb -Block 0000 [103]: 703f52dcee2e81d1 -Block 0000 [104]: 3f6b82b93effffb4 -Block 0000 [105]: 13ed467534c82418 -Block 0000 [106]: a55f4cb20247b2ee -Block 0000 [107]: 7131d4f50e8b890a -Block 0000 [108]: 73490c08292f39ff -Block 0000 [109]: 850a4da396b62427 -Block 0000 [110]: 1c1b4d28ed1be0a3 -Block 0000 [111]: bb9dc05ac200bc36 -Block 0000 [112]: eb87ae6d49a2fea9 -Block 0000 [113]: 8b01b4b60607e7b7 -Block 0000 [114]: 5601e9b4050e26a4 -Block 0000 [115]: 1a708020cf30e8c4 -Block 0000 [116]: 357787f560b3e117 -Block 0000 [117]: 270c70ba1394aeb3 -Block 0000 [118]: e974ce82f577c8af -Block 0000 [119]: e99a323c29101242 -Block 0000 [120]: df5246c0a22ef3aa -Block 0000 [121]: faa08f3454fa7b73 -Block 0000 [122]: 7703d220dfff70de -Block 0000 [123]: 3572d880754b85de -Block 0000 [124]: 74fd304cf2220306 -Block 0000 [125]: 0efda171378283b6 -Block 0000 [126]: 95d2fb71f0e67df6 -Block 0000 [127]: 5281bd4c8f8e3bfc -Block 0001 [ 0]: a601dc0876e7f5d2 -Block 0001 [ 1]: e8156a6fee9202a4 -Block 0001 [ 2]: e10d48d53f592f17 -Block 0001 [ 3]: 2112303d6ee471f4 -Block 0001 [ 4]: f625e1a0f9017d96 -Block 0001 [ 5]: 5b17ed2f17876d0f -Block 0001 [ 6]: 0c890126ce1adb94 -Block 0001 [ 7]: 78dff2e392d3a0c6 -Block 0001 [ 8]: f282dbd5f3ef11a5 -Block 0001 [ 9]: 524cb81ea5960dae -Block 0001 [ 10]: 4004d121dc3f834e -Block 0001 [ 11]: 774715d1bbafb642 -Block 0001 [ 12]: f99dd9b032874b77 -Block 0001 [ 13]: dffa663def2f79f6 -Block 0001 [ 14]: 16b48144484f1878 -Block 0001 [ 15]: b13072d77e12ced8 -Block 0001 [ 16]: 165681d7f28c89d7 -Block 0001 [ 17]: aec8db840bc885be -Block 0001 [ 18]: 02c41c5cc33323f6 -Block 0001 [ 19]: ac51867a32fae7d3 -Block 0001 [ 20]: a6662cf115cab5e4 -Block 0001 [ 21]: a7dfac6e1453e9ca -Block 0001 [ 22]: ecccdc35fe6a81da -Block 0001 [ 23]: 27a9a3e8bfc62791 -Block 0001 [ 24]: 2b33ed723d62b490 -Block 0001 [ 25]: 19568a46fb5516d7 -Block 0001 [ 26]: f204bae6ccfaa8b5 -Block 0001 [ 27]: 996cba2cf431026e -Block 0001 [ 28]: 61f7dd05475d6ee6 -Block 0001 [ 29]: 2962068995d86580 -Block 0001 [ 30]: 418e5d7ec95f73a4 -Block 0001 [ 31]: dbdc12a8702d4c8d -Block 0001 [ 32]: 749b9bc8a38f50d6 -Block 0001 [ 33]: 7a0f8357fd40f318 -Block 0001 [ 34]: 7cb99e83a49df9ea -Block 0001 [ 35]: f448e5b423259aa5 -Block 0001 [ 36]: fbb55be1b0dc18f1 -Block 0001 [ 37]: f9d3e9671ac793a5 -Block 0001 [ 38]: d7ed26cad3bd50dd -Block 0001 [ 39]: 7bdc2b25b7b4380e -Block 0001 [ 40]: 564193ed46bbd38f -Block 0001 [ 41]: bf93c93f54ad58fb -Block 0001 [ 42]: 968566bd98935a80 -Block 0001 [ 43]: 32aea1755a271495 -Block 0001 [ 44]: 1070a94cbe2953f5 -Block 0001 [ 45]: 400ea4d9f1a3fa35 -Block 0001 [ 46]: 7c935e65d9c735a1 -Block 0001 [ 47]: a8175cb4c5a150cc -Block 0001 [ 48]: 443e38c447553835 -Block 0001 [ 49]: ce0dff4aacadc471 -Block 0001 [ 50]: 53be5d9176c17ca0 -Block 0001 [ 51]: 3256ac925d114b7e -Block 0001 [ 52]: c48e34ab7016cf82 -Block 0001 [ 53]: 6785fc5ebe921c3f -Block 0001 [ 54]: dc79dc6a77fe9386 -Block 0001 [ 55]: 9d6d1d9be125d35c -Block 0001 [ 56]: 712b2f8118afd099 -Block 0001 [ 57]: d809acd71157d73a -Block 0001 [ 58]: ff16fadc5fb7dd6d -Block 0001 [ 59]: d67b1cb17bd3725b -Block 0001 [ 60]: 3daccb55beb052d8 -Block 0001 [ 61]: 35c964dec1386806 -Block 0001 [ 62]: bc105f476a5e1249 -Block 0001 [ 63]: 46ecb66699fa57e2 -Block 0001 [ 64]: f88e5a59aefe6cf2 -Block 0001 [ 65]: 5eadb66d6c148e37 -Block 0001 [ 66]: 7cf87f7735867538 -Block 0001 [ 67]: f6be4a2544f47f38 -Block 0001 [ 68]: 55266e0cead300c7 -Block 0001 [ 69]: 7e11af1a2670a739 -Block 0001 [ 70]: 9a2af3f6913c8ee4 -Block 0001 [ 71]: 394a6f1984e6d539 -Block 0001 [ 72]: ff7ed615ae767138 -Block 0001 [ 73]: d3ceb96f26db3d27 -Block 0001 [ 74]: 30d3b4ba1b1a0af8 -Block 0001 [ 75]: 0e45f476265b4d99 -Block 0001 [ 76]: cdbad3cd5ff77a1e -Block 0001 [ 77]: ef3187975a8f442b -Block 0001 [ 78]: c1308929690f0031 -Block 0001 [ 79]: 6d85c6d286a25367 -Block 0001 [ 80]: dac2896b549657a4 -Block 0001 [ 81]: 23e32881a1b09a6d -Block 0001 [ 82]: ec20c667fcbdeb4e -Block 0001 [ 83]: 87bbeb980e67d712 -Block 0001 [ 84]: 20cfdefef627dd01 -Block 0001 [ 85]: 621ae179a533c9a2 -Block 0001 [ 86]: a84be778d4427ffd -Block 0001 [ 87]: d0855b3fe58411a3 -Block 0001 [ 88]: 9754baed0bbe3f81 -Block 0001 [ 89]: 1f4bc2bd47559c8c -Block 0001 [ 90]: e9ee56d7d1e3fa45 -Block 0001 [ 91]: 19f21b10f69a7a56 -Block 0001 [ 92]: b40c652a7f4731d8 -Block 0001 [ 93]: 81e38a68107cbc0f -Block 0001 [ 94]: 49560f11e34b7439 -Block 0001 [ 95]: bbfdc16f8fbd75bf -Block 0001 [ 96]: e31edc9e8fceabcf -Block 0001 [ 97]: 32b1765671372267 -Block 0001 [ 98]: 8ad8dae552057de1 -Block 0001 [ 99]: 346aae886e91cc51 -Block 0001 [100]: b5531256bf78f06b -Block 0001 [101]: d79ecff14855b40f -Block 0001 [102]: 242357b9aed4b7d1 -Block 0001 [103]: 84845b5d45408e08 -Block 0001 [104]: d7dbef959f78cea2 -Block 0001 [105]: 21618b4913dfaa30 -Block 0001 [106]: 45761e263069a8a9 -Block 0001 [107]: 10994f746838cb8a -Block 0001 [108]: 9103b613cdcab634 -Block 0001 [109]: 7836e88870955857 -Block 0001 [110]: 8f0c4de9d1a2f683 -Block 0001 [111]: 30b4a1e9ab436f45 -Block 0001 [112]: f33c6c4d38df040b -Block 0001 [113]: 2f85731764ed984a -Block 0001 [114]: 30fbf7039eef9644 -Block 0001 [115]: ad98773602b57959 -Block 0001 [116]: 497ae71d5f2a1d4a -Block 0001 [117]: b21fa18653c5cdbc -Block 0001 [118]: ef19121d61008f70 -Block 0001 [119]: 66b6825d50197690 -Block 0001 [120]: 843664a09f8c1636 -Block 0001 [121]: 16a7ce3bd9d2eb0b -Block 0001 [122]: b22c00136e008148 -Block 0001 [123]: 7ea52a8d4177b05e -Block 0001 [124]: 18989952ed74fa99 -Block 0001 [125]: bce998118659ba50 -Block 0001 [126]: 3928fafd8927bcca -Block 0001 [127]: 68902f7910072951 -Block 0002 [ 0]: e81e0bbaf6f28522 -Block 0002 [ 1]: 396861783abb23b8 -Block 0002 [ 2]: 3d5d4742fb81fbd5 -Block 0002 [ 3]: 4fa13942992ac0da -Block 0002 [ 4]: b561199a7d8503a0 -Block 0002 [ 5]: c21da733b005a908 -Block 0002 [ 6]: c26444122b6b9274 -Block 0002 [ 7]: 36a63f4646df05b8 -Block 0002 [ 8]: 6b2a0c7fb0b6adc5 -Block 0002 [ 9]: c156d6f3856e3678 -Block 0002 [ 10]: 4c504d2c87841d81 -Block 0002 [ 11]: 4905e03cf1e6f0ee -Block 0002 [ 12]: 87a0c471ff7526ce -Block 0002 [ 13]: 26367649350d355e -Block 0002 [ 14]: 00e857202c91a68a -Block 0002 [ 15]: f9d076b2e46ebdaa -Block 0002 [ 16]: 9611b8a77b3aa7f3 -Block 0002 [ 17]: b14be5ae4ac7412e -Block 0002 [ 18]: 1eeebb9c268d7ef3 -Block 0002 [ 19]: d86c569647cbd1ad -Block 0002 [ 20]: a8fa312f44927434 -Block 0002 [ 21]: 82dcc374e99677b9 -Block 0002 [ 22]: 93ab2bccf995139d -Block 0002 [ 23]: 9b3ca0906a1d8569 -Block 0002 [ 24]: 705ba90bec5e96a5 -Block 0002 [ 25]: 737cd17db84d185b -Block 0002 [ 26]: 309057ac43fd66d9 -Block 0002 [ 27]: 220a24df79ee088d -Block 0002 [ 28]: 9d33ecdbf98b6765 -Block 0002 [ 29]: 52cb5ef7639b9dfe -Block 0002 [ 30]: 9007776749321e4a -Block 0002 [ 31]: db73be5f61995fe6 -Block 0002 [ 32]: 2dc127b7bee524b6 -Block 0002 [ 33]: b5abec945d264219 -Block 0002 [ 34]: 0031ea20aa52c2a2 -Block 0002 [ 35]: 3eed4344c253c7e0 -Block 0002 [ 36]: 6437a60bd66f53c4 -Block 0002 [ 37]: 6615df9a4e849340 -Block 0002 [ 38]: 8f86a3766032871a -Block 0002 [ 39]: ca4d635a6e057619 -Block 0002 [ 40]: 4390465343d27c46 -Block 0002 [ 41]: 3f2043373696faf4 -Block 0002 [ 42]: de93732af23f352a -Block 0002 [ 43]: da6778068e73ddd4 -Block 0002 [ 44]: 7453b8124450b27e -Block 0002 [ 45]: 5f51a2d57181f2b9 -Block 0002 [ 46]: de9c940fa9ab4c04 -Block 0002 [ 47]: 9d6d029e75c9a64f -Block 0002 [ 48]: 9073d8c7c776ac96 -Block 0002 [ 49]: 465b289ca08e6714 -Block 0002 [ 50]: aa890c575a2d7ec8 -Block 0002 [ 51]: 1cdb78c4199a40c5 -Block 0002 [ 52]: bce111d86807b484 -Block 0002 [ 53]: 3ab2d84a54074b6c -Block 0002 [ 54]: b8cc3aa6e3d80a02 -Block 0002 [ 55]: f1acd8318d693ac8 -Block 0002 [ 56]: 5eecf38eadaf104f -Block 0002 [ 57]: 4e79ef3026ab811b -Block 0002 [ 58]: 235310779616b594 -Block 0002 [ 59]: 73438a3256d1eaea -Block 0002 [ 60]: f4495e9185ed3c12 -Block 0002 [ 61]: c7a28910ae700391 -Block 0002 [ 62]: 742a596e1015c48f -Block 0002 [ 63]: 41178157bc7ce775 -Block 0002 [ 64]: edc6a55966707331 -Block 0002 [ 65]: 39497b1bd3a41980 -Block 0002 [ 66]: f4a3315a41c01d71 -Block 0002 [ 67]: 297dc5267a33faab -Block 0002 [ 68]: 170949ed98cc4fce -Block 0002 [ 69]: d2dc12ec69896786 -Block 0002 [ 70]: 434d5a5851822fe8 -Block 0002 [ 71]: 00118dec328147d3 -Block 0002 [ 72]: 03c8fc8c4d44db96 -Block 0002 [ 73]: ae231e8f920cac47 -Block 0002 [ 74]: d6b307e598cc639a -Block 0002 [ 75]: 2469cf2fe0950b18 -Block 0002 [ 76]: 0d9c209438395613 -Block 0002 [ 77]: e335d06493895f16 -Block 0002 [ 78]: b1b305629be232bd -Block 0002 [ 79]: 22b2c7be104a04f2 -Block 0002 [ 80]: 42956faf6651efdc -Block 0002 [ 81]: 98ffb95158f24920 -Block 0002 [ 82]: 4850d302878117b6 -Block 0002 [ 83]: a5d4ed41b0c9d2d8 -Block 0002 [ 84]: 4e3c6348c9371002 -Block 0002 [ 85]: 88608e6e14bffbc2 -Block 0002 [ 86]: 6cd8c4cf2259886c -Block 0002 [ 87]: 45139c5b12f9478d -Block 0002 [ 88]: 1f48e72c84f9dda5 -Block 0002 [ 89]: 6c546f01160e44a7 -Block 0002 [ 90]: 8b4efbca6310e636 -Block 0002 [ 91]: 40a500807dc6cd0e -Block 0002 [ 92]: dc02b2343fddfa24 -Block 0002 [ 93]: 4c4089218010c44b -Block 0002 [ 94]: 27eb0fc83d7da899 -Block 0002 [ 95]: c47a3ba94694ceb4 -Block 0002 [ 96]: 335f4d446479fd60 -Block 0002 [ 97]: 7e9c301621d8ab89 -Block 0002 [ 98]: 5fda24db61006fba -Block 0002 [ 99]: ff01a0a153fe3d37 -Block 0002 [100]: ab885dbb1dad5aa1 -Block 0002 [101]: 6da318547e8e48b3 -Block 0002 [102]: c67697e19524a439 -Block 0002 [103]: ea239bcd02527492 -Block 0002 [104]: edd3ee8a9021717f -Block 0002 [105]: ab51683a66552c40 -Block 0002 [106]: 2c887237f11c913d -Block 0002 [107]: 3f61e4b082c3b242 -Block 0002 [108]: c50d3d277054c9a7 -Block 0002 [109]: 2778d9b6e554a6e6 -Block 0002 [110]: 09641d71ffe05a4d -Block 0002 [111]: 58b8442be16e21a6 -Block 0002 [112]: d44d5b2dc2f9c20a -Block 0002 [113]: 677f96f5bbf6f9e5 -Block 0002 [114]: 06f53f76f2eb2e5a -Block 0002 [115]: b9e4fb1a579ac9b6 -Block 0002 [116]: 8252a5262e683358 -Block 0002 [117]: 11101fdb6e7d6be8 -Block 0002 [118]: 68a3174bf60b8d0f -Block 0002 [119]: cc1f471969d8661f -Block 0002 [120]: 6e2eb3874dfb9351 -Block 0002 [121]: 3dfe41bca6aeb9b6 -Block 0002 [122]: 2ca94479c1d9d9c3 -Block 0002 [123]: cd4cd1e58f0c1a4d -Block 0002 [124]: 220bc444db0c796e -Block 0002 [125]: 0165437e149e3cb5 -Block 0002 [126]: 2c8f5ef3fb489b1c -Block 0002 [127]: c74852363b7f3587 -Block 0003 [ 0]: 367c594bdf96b819 -Block 0003 [ 1]: 862711026ec3ec03 -Block 0003 [ 2]: 4291182dfe50a8a4 -Block 0003 [ 3]: 1968e610fb9b86ff -Block 0003 [ 4]: 1f73c18425908927 -Block 0003 [ 5]: 661b7f342e040cd4 -Block 0003 [ 6]: 8b88a35abe465f87 -Block 0003 [ 7]: 2b53235fa03d495e -Block 0003 [ 8]: 737a290089b25de2 -Block 0003 [ 9]: bf9058e3c9eec8d0 -Block 0003 [ 10]: 99b0126fab231886 -Block 0003 [ 11]: 16bdcc5a061cc916 -Block 0003 [ 12]: 667e764247e2e7be -Block 0003 [ 13]: 65a6b50454441f43 -Block 0003 [ 14]: be337b287eac42d9 -Block 0003 [ 15]: d5bed46e6c3349b1 -Block 0003 [ 16]: c2ea41bc5b6d4bd7 -Block 0003 [ 17]: 4ca8e1e8433670e4 -Block 0003 [ 18]: 759ab2d889551680 -Block 0003 [ 19]: e378158572542bfa -Block 0003 [ 20]: 6b1da15ac3fa96c0 -Block 0003 [ 21]: 8d36589f4cf25ddc -Block 0003 [ 22]: 503549d93ab6c1b7 -Block 0003 [ 23]: b8e8322845e29937 -Block 0003 [ 24]: 180c25fd2dbb1b48 -Block 0003 [ 25]: 6202f1842ab61832 -Block 0003 [ 26]: 5d4c894f0c4737c9 -Block 0003 [ 27]: 88f5a64b933a33df -Block 0003 [ 28]: 84eb153038e7aecc -Block 0003 [ 29]: 0d2621f75b1ae3e9 -Block 0003 [ 30]: b9123ff33039d4fe -Block 0003 [ 31]: 9ed38c24a4e1f8fb -Block 0003 [ 32]: 0c31e521335c8456 -Block 0003 [ 33]: db817288bd62628e -Block 0003 [ 34]: 7ff3b354dbaf962f -Block 0003 [ 35]: e183c8060ab80c30 -Block 0003 [ 36]: 9da848355b0a6225 -Block 0003 [ 37]: 0ceea1cf2734396c -Block 0003 [ 38]: 4432eeb03658f476 -Block 0003 [ 39]: b5b618f8b86b216b -Block 0003 [ 40]: 0d2d80ffd5e95700 -Block 0003 [ 41]: 159c8064f2989f4a -Block 0003 [ 42]: 760c9bcc3f6593ff -Block 0003 [ 43]: 8762acb41bfb6c63 -Block 0003 [ 44]: 4f7ea2fafcaa0e88 -Block 0003 [ 45]: c74933b7dbed9627 -Block 0003 [ 46]: cce5fe1d79ea5c75 -Block 0003 [ 47]: 4b231f4b26c89beb -Block 0003 [ 48]: caaea7d2fd4fd308 -Block 0003 [ 49]: 86b9c4f42595461d -Block 0003 [ 50]: 7ebf7c975364fa90 -Block 0003 [ 51]: 677efa86562f6c9c -Block 0003 [ 52]: 0e82d10cf9f1219a -Block 0003 [ 53]: d670593b1e019fd2 -Block 0003 [ 54]: 972cfb60ed8dba68 -Block 0003 [ 55]: f911987a43fc0a10 -Block 0003 [ 56]: 234a4ede8f00bc1f -Block 0003 [ 57]: 7967eb7e80ae4e59 -Block 0003 [ 58]: fb1a0481cc491916 -Block 0003 [ 59]: 0b058ac506301f85 -Block 0003 [ 60]: a74df515d9e08d97 -Block 0003 [ 61]: 383be2d3251aae14 -Block 0003 [ 62]: b3fd02e917a223ce -Block 0003 [ 63]: 29f39b011fad54c0 -Block 0003 [ 64]: f680bd509bcfdccd -Block 0003 [ 65]: 04d6aefd19cf741c -Block 0003 [ 66]: 0f1252791a746f17 -Block 0003 [ 67]: ab65eb095a9eeafd -Block 0003 [ 68]: c2928de1fe693493 -Block 0003 [ 69]: 048c2309b1815c9b -Block 0003 [ 70]: 8c54712e30b1bd31 -Block 0003 [ 71]: c63b79997378fcaa -Block 0003 [ 72]: 06a86dd8ad9696b5 -Block 0003 [ 73]: c38fc208cb319dc2 -Block 0003 [ 74]: 11cd45107d1f2e50 -Block 0003 [ 75]: e1d87aa8c5e1632e -Block 0003 [ 76]: 5ecdb4d890540442 -Block 0003 [ 77]: 686823fdee54d4ad -Block 0003 [ 78]: 6baade1b2d66b8bf -Block 0003 [ 79]: d55142011ebdea9c -Block 0003 [ 80]: 3c550a40516b719b -Block 0003 [ 81]: 09f369f036292023 -Block 0003 [ 82]: 7211fc8b5f134080 -Block 0003 [ 83]: 956d062cc49f7e15 -Block 0003 [ 84]: 7d04474795e014b4 -Block 0003 [ 85]: 0e8e5948404b3ac4 -Block 0003 [ 86]: 218ff6e138727371 -Block 0003 [ 87]: a1df22c6fbdf78f9 -Block 0003 [ 88]: 290465977b3b3ab9 -Block 0003 [ 89]: 862b0d5bfbf64d5a -Block 0003 [ 90]: c9b4eb5dceb436f5 -Block 0003 [ 91]: 480aa45ac4592905 -Block 0003 [ 92]: 1b42e2a9df42461f -Block 0003 [ 93]: 976e78dabb9a1f6d -Block 0003 [ 94]: 861d4a9050ee9931 -Block 0003 [ 95]: 5b4ae97afa1f29f0 -Block 0003 [ 96]: 61678bcd4367c07f -Block 0003 [ 97]: acefa26ea748ab48 -Block 0003 [ 98]: 0dbf00fa98bb3e54 -Block 0003 [ 99]: 7c8e72baf51824ce -Block 0003 [100]: b8f04cd864a6ff07 -Block 0003 [101]: 371431c4a64aa613 -Block 0003 [102]: 6ff7f3a454608db7 -Block 0003 [103]: cd7fdda08d309d9a -Block 0003 [104]: fc26af4ae96673b0 -Block 0003 [105]: 1e6021dc4f2fdd58 -Block 0003 [106]: 3e11ed915f93ea58 -Block 0003 [107]: 0b1d721f76ca5c50 -Block 0003 [108]: 74d56f4a98df89fd -Block 0003 [109]: 4ab79e7dece12d01 -Block 0003 [110]: 953ff63d4231cb98 -Block 0003 [111]: 29c749ebc02147e1 -Block 0003 [112]: ed59f5603d2dd69b -Block 0003 [113]: 42e81940699fdaf5 -Block 0003 [114]: 4fafbaf8edd4fab0 -Block 0003 [115]: 9591251ce09a535e -Block 0003 [116]: 2a17d91f13eefd80 -Block 0003 [117]: df438c508fc636ad -Block 0003 [118]: 94b1054862d5203a -Block 0003 [119]: 6e4f1e45898dba82 -Block 0003 [120]: 2b00c9cda99f2824 -Block 0003 [121]: f68ddd0fd8c7efe0 -Block 0003 [122]: 4faf35b95430fc43 -Block 0003 [123]: 09adc28b97ecf942 -Block 0003 [124]: 8bef2eb8712226f2 -Block 0003 [125]: 1be57ca4510531d2 -Block 0003 [126]: db6b46a50db33ef9 -Block 0003 [127]: d9871aeb9860bdc4 -Block 0004 [ 0]: 5f103c79d2da016e -Block 0004 [ 1]: eee0f4e13e3d408a -Block 0004 [ 2]: 5dac3a3b0c267dc0 -Block 0004 [ 3]: e7e4dd5e37f8be65 -Block 0004 [ 4]: cec7474083af3f60 -Block 0004 [ 5]: 95fb7feaf43b8be6 -Block 0004 [ 6]: 85d6a9e5c3a3f907 -Block 0004 [ 7]: e829e06d777ca98e -Block 0004 [ 8]: dcfd1b0ec732826c -Block 0004 [ 9]: 2cdefd109e8d3664 -Block 0004 [ 10]: 23ba90d2242bd021 -Block 0004 [ 11]: f86bd3217354cc3c -Block 0004 [ 12]: f79ce3b15e828607 -Block 0004 [ 13]: 83aae383ff27522f -Block 0004 [ 14]: 1d71b7ce3d807890 -Block 0004 [ 15]: 5d95cfd58d4d1f8c -Block 0004 [ 16]: 278cf931bd1e902a -Block 0004 [ 17]: 68fa20d22ba2aa27 -Block 0004 [ 18]: 9327a826bc94458f -Block 0004 [ 19]: 2501172b7436fe18 -Block 0004 [ 20]: 6f1c6c6d7179888e -Block 0004 [ 21]: f4446befe7c6ef7b -Block 0004 [ 22]: 84d0a72f5234af5a -Block 0004 [ 23]: 7394bf556f42d372 -Block 0004 [ 24]: acb72c38ced2fce7 -Block 0004 [ 25]: dea10a43040e26b2 -Block 0004 [ 26]: e77f7881689a7e3f -Block 0004 [ 27]: 83113c6790591257 -Block 0004 [ 28]: fe9c162fd48cb7d8 -Block 0004 [ 29]: 98ce1459c8390957 -Block 0004 [ 30]: bd0966102efc0163 -Block 0004 [ 31]: 1dc21f406c8f4ca5 -Block 0004 [ 32]: d8454639a35d8f9e -Block 0004 [ 33]: bf881beb1f767534 -Block 0004 [ 34]: 26288b46058cc1da -Block 0004 [ 35]: 413dd03618a00931 -Block 0004 [ 36]: f075d2081403a45b -Block 0004 [ 37]: 3cc6fea5be9893e4 -Block 0004 [ 38]: 22729e702fee4ce4 -Block 0004 [ 39]: 433011e48bc915db -Block 0004 [ 40]: 7e7d28c42751a323 -Block 0004 [ 41]: c67c60627460056b -Block 0004 [ 42]: 67a62b635341b39f -Block 0004 [ 43]: 0035c747ab878c83 -Block 0004 [ 44]: 4f0159abc209fa70 -Block 0004 [ 45]: 7696bf70050e4504 -Block 0004 [ 46]: 26fc497cdec0484d -Block 0004 [ 47]: 7be5f428ff505ed0 -Block 0004 [ 48]: 8bbe65a740edbbd9 -Block 0004 [ 49]: fd0216c36ed4ec06 -Block 0004 [ 50]: 353980216bb85309 -Block 0004 [ 51]: 5209b3883318741a -Block 0004 [ 52]: e299cd297f7b2f28 -Block 0004 [ 53]: c75e1bc0a94122b5 -Block 0004 [ 54]: 30bd876ace118de3 -Block 0004 [ 55]: c30156b792358312 -Block 0004 [ 56]: b06c27e9ae5a2e89 -Block 0004 [ 57]: 0ed2f057d2a6d8d9 -Block 0004 [ 58]: cbfbec25de3432fb -Block 0004 [ 59]: 32468164b6e0674d -Block 0004 [ 60]: b98ad9729363b082 -Block 0004 [ 61]: e2947ae8ab741abd -Block 0004 [ 62]: 8f3197f4de5f96a3 -Block 0004 [ 63]: 1dbc661b48b411f7 -Block 0004 [ 64]: 3509f4a7e745c326 -Block 0004 [ 65]: cfb820680c8d9be2 -Block 0004 [ 66]: 684ca83f500fda1b -Block 0004 [ 67]: 0de75f8640a01f43 -Block 0004 [ 68]: 325fbc7a5cba9916 -Block 0004 [ 69]: 1d18d81e36e58e94 -Block 0004 [ 70]: e71446e04328bed6 -Block 0004 [ 71]: ebd7f55759aa2912 -Block 0004 [ 72]: f5742bb63f673fef -Block 0004 [ 73]: 59a68c6bbdded65d -Block 0004 [ 74]: 85b002cb9cd71d15 -Block 0004 [ 75]: 0ac41456c7bddad7 -Block 0004 [ 76]: 6ac6ce40c3366d27 -Block 0004 [ 77]: 1a20a174adc1fbfb -Block 0004 [ 78]: 58f79bbc86149583 -Block 0004 [ 79]: 694506e12f0d36f8 -Block 0004 [ 80]: f8f2c809554e5b1a -Block 0004 [ 81]: 53a7dc845be334fe -Block 0004 [ 82]: 4a9131d02ccf2006 -Block 0004 [ 83]: 53a54f39969a27ee -Block 0004 [ 84]: 01cfbabc16bc8017 -Block 0004 [ 85]: 5a8e945f16d66035 -Block 0004 [ 86]: 8bbbe36c9b09a75d -Block 0004 [ 87]: b40e4c1cb50dc463 -Block 0004 [ 88]: a413bb190d1ce779 -Block 0004 [ 89]: dbdd0e71c83dfc68 -Block 0004 [ 90]: 32ba1eb6c9f3f028 -Block 0004 [ 91]: bcc99f21a9599f46 -Block 0004 [ 92]: 574636b0906e2dd3 -Block 0004 [ 93]: df111f20ab6f8e1a -Block 0004 [ 94]: c2d8a911b5f5d9a5 -Block 0004 [ 95]: 72bec94da09ffe7f -Block 0004 [ 96]: 1f14cea9804067db -Block 0004 [ 97]: 9d6c3f1bc1083432 -Block 0004 [ 98]: 73a2aadbe11f1f22 -Block 0004 [ 99]: 296f99c2f5d56e0b -Block 0004 [100]: fe74b6ff494c6fb0 -Block 0004 [101]: 6d2ebdd6ed290d80 -Block 0004 [102]: a3912c85e1036671 -Block 0004 [103]: 896a9c1bba98abdd -Block 0004 [104]: f174ddf24e51901f -Block 0004 [105]: 814150ce82c9a2d5 -Block 0004 [106]: 2d37595c363875f7 -Block 0004 [107]: 619771e8822004e7 -Block 0004 [108]: 935b811317780722 -Block 0004 [109]: c80e5b3e2f6ef79f -Block 0004 [110]: 62d855626bee4e94 -Block 0004 [111]: 8b43e0e640d7047b -Block 0004 [112]: 7c5fce5d045b0f97 -Block 0004 [113]: 2f9fd0f39d32d1d8 -Block 0004 [114]: cbb11bb386457bd2 -Block 0004 [115]: 0585288d1d9c986e -Block 0004 [116]: 613cbb2ffa954b64 -Block 0004 [117]: 6f5afd9be23f168e -Block 0004 [118]: dde300cbf5d3dc44 -Block 0004 [119]: 553b142212a32a0b -Block 0004 [120]: 042c170ebc9db65d -Block 0004 [121]: e551aed0fb8d12bd -Block 0004 [122]: 548a9bb03e34feda -Block 0004 [123]: d0a2064746a8003d -Block 0004 [124]: 8833977b70ec7fa4 -Block 0004 [125]: 192397378ba94c61 -Block 0004 [126]: 6ff2940ba5b14026 -Block 0004 [127]: 1ab6430ee436c0dd -Block 0005 [ 0]: 0de966218271a4ef -Block 0005 [ 1]: a2cfeb2c0d84198d -Block 0005 [ 2]: cfa60d565dfffca1 -Block 0005 [ 3]: 412f4c2588c3cc19 -Block 0005 [ 4]: 2728830ca24bb956 -Block 0005 [ 5]: b49f93ae79d1312f -Block 0005 [ 6]: 7306da5787f5ec0e -Block 0005 [ 7]: 1b8a34fdc9622b8c -Block 0005 [ 8]: e36370b335d7d928 -Block 0005 [ 9]: 49b86dbdccf03005 -Block 0005 [ 10]: 3b28005aa830ac5d -Block 0005 [ 11]: ca9b1344d3837c42 -Block 0005 [ 12]: 45c0c9b592e9b02f -Block 0005 [ 13]: cf0d005546e76fcd -Block 0005 [ 14]: e2def891d0fc245b -Block 0005 [ 15]: e90e1fc95f6596b3 -Block 0005 [ 16]: 0d62ca02afae51d9 -Block 0005 [ 17]: 93fc60ae47aa667c -Block 0005 [ 18]: 3718672a4e69c6d4 -Block 0005 [ 19]: da994e550ec5fdd3 -Block 0005 [ 20]: 80a8774d11086f21 -Block 0005 [ 21]: 57409662528e89c6 -Block 0005 [ 22]: 78558bcff1421a62 -Block 0005 [ 23]: 4ab11538852e391b -Block 0005 [ 24]: 13b25048138916a9 -Block 0005 [ 25]: 6148f40c5a20e12b -Block 0005 [ 26]: 4810c828883bf1df -Block 0005 [ 27]: f5fcb4e0a1a969c3 -Block 0005 [ 28]: a40583814da5f417 -Block 0005 [ 29]: 1cf1c7155698d64b -Block 0005 [ 30]: aa3ad1d538a2d02c -Block 0005 [ 31]: 4de3e769c1a3ad08 -Block 0005 [ 32]: 682669d5d0c75064 -Block 0005 [ 33]: f736e483fc776e37 -Block 0005 [ 34]: baa34ad440f7e5da -Block 0005 [ 35]: 2d3124c6a820d898 -Block 0005 [ 36]: c10dbfe5c258327a -Block 0005 [ 37]: 304c1f87ae94460e -Block 0005 [ 38]: 47a434b76b85d0be -Block 0005 [ 39]: 38e23fe30cc250a9 -Block 0005 [ 40]: d4fea920dc38e276 -Block 0005 [ 41]: 0b7ffb666eefc033 -Block 0005 [ 42]: 70338ebcb4e61d73 -Block 0005 [ 43]: 84bded0682d10c94 -Block 0005 [ 44]: dc5a559cdead2372 -Block 0005 [ 45]: 21c73103fb718573 -Block 0005 [ 46]: f9bbdac6c16e68d0 -Block 0005 [ 47]: b2bd3a0fe844c85f -Block 0005 [ 48]: 2ab10c961a078f5b -Block 0005 [ 49]: 39325e7ee2529990 -Block 0005 [ 50]: 9e6c5c8a54327c97 -Block 0005 [ 51]: 52ad7165f82b5620 -Block 0005 [ 52]: b5cc621f5c656ff2 -Block 0005 [ 53]: 380688bbca3ecd58 -Block 0005 [ 54]: 883889c2ea9d3295 -Block 0005 [ 55]: e079e44a0a62c366 -Block 0005 [ 56]: b8284494c8213bf1 -Block 0005 [ 57]: cdbe7f6c9ba93301 -Block 0005 [ 58]: 2d823bfcc8436620 -Block 0005 [ 59]: 1e158609ca45522a -Block 0005 [ 60]: 407a6f26a9fb16a7 -Block 0005 [ 61]: 218cf687d2746ee7 -Block 0005 [ 62]: 722be79206a7e5ad -Block 0005 [ 63]: 6bdc5a7cda224de3 -Block 0005 [ 64]: d8f66abdb2a506f5 -Block 0005 [ 65]: 2d54821b6d9a1cff -Block 0005 [ 66]: df77e54336ec9c2b -Block 0005 [ 67]: c499fdccf24a0513 -Block 0005 [ 68]: 87c5a41b01c159fe -Block 0005 [ 69]: db244459e270a8ef -Block 0005 [ 70]: 4aee9e7b4763c17a -Block 0005 [ 71]: 8f205d84ac9a1280 -Block 0005 [ 72]: 49197ac6271bbb2e -Block 0005 [ 73]: cdaf49b7a1767e0b -Block 0005 [ 74]: f7cf565d6c117301 -Block 0005 [ 75]: 88346bc563cf09c3 -Block 0005 [ 76]: 6ff639fb39b9d0c3 -Block 0005 [ 77]: e48aba9275f3daa9 -Block 0005 [ 78]: 7541718c0f5c899e -Block 0005 [ 79]: a422f5b2f1400761 -Block 0005 [ 80]: 8d6a5c361a594604 -Block 0005 [ 81]: e50ed69a6300ff68 -Block 0005 [ 82]: d16049e9eb4e38e8 -Block 0005 [ 83]: aa15939e849c1ebd -Block 0005 [ 84]: 059eb7b453f27287 -Block 0005 [ 85]: 45fb8533f5c7c986 -Block 0005 [ 86]: 4c76c301de9ab48c -Block 0005 [ 87]: 90b1a56887fd2c48 -Block 0005 [ 88]: 9fd7813a1508ff41 -Block 0005 [ 89]: 2a326b09fb8c9b9a -Block 0005 [ 90]: efb4350edbcdd5e6 -Block 0005 [ 91]: 7a36dc0b9babdeee -Block 0005 [ 92]: a25fe4ca39355228 -Block 0005 [ 93]: 5303077523d42415 -Block 0005 [ 94]: e026575393d878e2 -Block 0005 [ 95]: 373ce0152a6ee33c -Block 0005 [ 96]: 4f54a4afbcac993d -Block 0005 [ 97]: 36f7cc82d6a97698 -Block 0005 [ 98]: feddd35fdb839178 -Block 0005 [ 99]: a396259146239082 -Block 0005 [100]: cc1856fafbb4f906 -Block 0005 [101]: 85a1cf13ea55a8e6 -Block 0005 [102]: 16625d5ecefd1f48 -Block 0005 [103]: 6787085c993ce90f -Block 0005 [104]: 6d29d9f3d8e7dc82 -Block 0005 [105]: 44a6fbff8f68674c -Block 0005 [106]: ca8e8d86a15d66fe -Block 0005 [107]: 5cdcedee5006de76 -Block 0005 [108]: 2b090088bb3e641d -Block 0005 [109]: 258237f0878ffef1 -Block 0005 [110]: 8196ca4021a3eb70 -Block 0005 [111]: a2b8fe6e9572cff6 -Block 0005 [112]: c6d7aa973cf67d73 -Block 0005 [113]: 819e4db32d3f0c59 -Block 0005 [114]: 649053f6570cc68c -Block 0005 [115]: 3a3d451dc343d91d -Block 0005 [116]: 686e60f8c4207de9 -Block 0005 [117]: 3ee6eb06f251a0b8 -Block 0005 [118]: 32bf0426e100dc27 -Block 0005 [119]: af48b2f87b27c29f -Block 0005 [120]: 9b203f41b8d56660 -Block 0005 [121]: 100656e1838e23a3 -Block 0005 [122]: f3c1c20a03b2b109 -Block 0005 [123]: c14358b21020c956 -Block 0005 [124]: 100d50847f25bac5 -Block 0005 [125]: 6e474ffc741155a5 -Block 0005 [126]: d3837abc5cafb4b4 -Block 0005 [127]: 73413ce42e07707a -Block 0006 [ 0]: 207b10db5cffe8cc -Block 0006 [ 1]: 7313b549d3e7287a -Block 0006 [ 2]: 9a98eb99c3deb891 -Block 0006 [ 3]: 10069e28d0435cbf -Block 0006 [ 4]: e8ca034c80738973 -Block 0006 [ 5]: f1cb47ee4a476ca4 -Block 0006 [ 6]: f98e0d9a7b3678a9 -Block 0006 [ 7]: d87ddc69b89c26e3 -Block 0006 [ 8]: 5fb6984dca5a0935 -Block 0006 [ 9]: a74dc6254fd7a241 -Block 0006 [ 10]: fd190e53b4b1128a -Block 0006 [ 11]: da794330c18a845e -Block 0006 [ 12]: a1172aceb9a39806 -Block 0006 [ 13]: c73e42398788695a -Block 0006 [ 14]: db7ce46bae7ae7f8 -Block 0006 [ 15]: a1ba8bd31fb8f0ee -Block 0006 [ 16]: 74012a4340f94011 -Block 0006 [ 17]: efa47c287cf1a3ad -Block 0006 [ 18]: 6dc566a1c1f9638e -Block 0006 [ 19]: 3613a14178c896da -Block 0006 [ 20]: 0e38b0039e779469 -Block 0006 [ 21]: cf9888dc3ee62faf -Block 0006 [ 22]: 7367cf6b70ec5012 -Block 0006 [ 23]: d2f068c75b9b7789 -Block 0006 [ 24]: eb2a65901b5e03ee -Block 0006 [ 25]: 648b57529bde77bc -Block 0006 [ 26]: 4aff37b8b76729e6 -Block 0006 [ 27]: 609cbf9c2e072b5f -Block 0006 [ 28]: 46e369a4d063dedb -Block 0006 [ 29]: 373eb5b30e919ac0 -Block 0006 [ 30]: aa9243610f11f8b8 -Block 0006 [ 31]: 4fce70d711ae62ba -Block 0006 [ 32]: 564d752fbb623966 -Block 0006 [ 33]: a1f6ba47632f0206 -Block 0006 [ 34]: 62367c5cce6f7e03 -Block 0006 [ 35]: 82de40ea4cae8fc2 -Block 0006 [ 36]: 1309ab5fb6673aba -Block 0006 [ 37]: 4aca55f3f9f4aeb5 -Block 0006 [ 38]: b7b531d28376686a -Block 0006 [ 39]: f26fd9a982569b7b -Block 0006 [ 40]: 5b9ce5ded879f6e2 -Block 0006 [ 41]: 18c59a8d77053b18 -Block 0006 [ 42]: c499ad269fa61497 -Block 0006 [ 43]: 6e8b4060b8c502a8 -Block 0006 [ 44]: 9a8cb6bad14c9d0f -Block 0006 [ 45]: 1e98359f33b83bf7 -Block 0006 [ 46]: 1604438faacfdc2a -Block 0006 [ 47]: bedd53bcdb427d14 -Block 0006 [ 48]: 1dae57588a99d154 -Block 0006 [ 49]: 0fdcb29413b7167b -Block 0006 [ 50]: 23ce479ac77ec8fe -Block 0006 [ 51]: 3057176fbc13ce27 -Block 0006 [ 52]: 9d97168136290f32 -Block 0006 [ 53]: 10e9f9dfb8be79b7 -Block 0006 [ 54]: bf046bc5effedc65 -Block 0006 [ 55]: 1d119988b12ea53a -Block 0006 [ 56]: 62f88ac4a406d5f5 -Block 0006 [ 57]: 36e3dad6d5889c8f -Block 0006 [ 58]: c03ad9fdedb44c1a -Block 0006 [ 59]: 2ca0a0a505d6ad48 -Block 0006 [ 60]: 47b8d37b661e5d02 -Block 0006 [ 61]: d63f3d361ad0e2e8 -Block 0006 [ 62]: 0fec955ea758c8bd -Block 0006 [ 63]: de10b7c48004cb60 -Block 0006 [ 64]: 8e986ea33b73db2f -Block 0006 [ 65]: bb8e714f470452b1 -Block 0006 [ 66]: cdc713d39cd1ab4c -Block 0006 [ 67]: c05a6a8689e023c8 -Block 0006 [ 68]: 120b9b26cfd19db7 -Block 0006 [ 69]: b67ef16cc74f266b -Block 0006 [ 70]: 86cb36ab2f361439 -Block 0006 [ 71]: 29e7c9695a1d2a49 -Block 0006 [ 72]: 83f364c881607b8f -Block 0006 [ 73]: 23f6fa8bd886a772 -Block 0006 [ 74]: bed21643e5e7e5e1 -Block 0006 [ 75]: e2e97a56b51a2859 -Block 0006 [ 76]: 4d393e0b6d1d88bf -Block 0006 [ 77]: 35003e2abf8863ac -Block 0006 [ 78]: 0f488382a32f7c19 -Block 0006 [ 79]: 9ca2d208e38ce69f -Block 0006 [ 80]: 9625b25216944457 -Block 0006 [ 81]: 7e32ef15494d8452 -Block 0006 [ 82]: 4b1054077944dd66 -Block 0006 [ 83]: 1c036bb21867b709 -Block 0006 [ 84]: 303cd1949081adad -Block 0006 [ 85]: a0feb5be65aa2980 -Block 0006 [ 86]: a33c51024a269ba8 -Block 0006 [ 87]: 72035f020c2d5116 -Block 0006 [ 88]: c1b8f4a8bb0d6bef -Block 0006 [ 89]: 0c24bdf244970c9e -Block 0006 [ 90]: 458bdb8d42dff226 -Block 0006 [ 91]: da9ade8459a83877 -Block 0006 [ 92]: c62aa75f3ad8af18 -Block 0006 [ 93]: f3b0115b81a85189 -Block 0006 [ 94]: 4f8d10e3c8fa60bc -Block 0006 [ 95]: a8dc8bb82dd96d89 -Block 0006 [ 96]: ffbd8ca9279e0cab -Block 0006 [ 97]: fca3dc86e42bd209 -Block 0006 [ 98]: ea64792c1ebc8f5f -Block 0006 [ 99]: 3591955004fca6ee -Block 0006 [100]: 0ac25778983c4707 -Block 0006 [101]: 74368e8884bcdfec -Block 0006 [102]: 7151d6032e06d71c -Block 0006 [103]: c5c71b6560554c76 -Block 0006 [104]: de23bf17c2bb8819 -Block 0006 [105]: cfbb7295c3416e6a -Block 0006 [106]: 5df2f35264853653 -Block 0006 [107]: 1975d4925e2750d7 -Block 0006 [108]: 38c55cb4882a2065 -Block 0006 [109]: 9981db2c4bde5e81 -Block 0006 [110]: 7b60c41a8467a595 -Block 0006 [111]: 1f293556774eb26e -Block 0006 [112]: 41a0d1cbb6b9aebe -Block 0006 [113]: 74283de191cbbe30 -Block 0006 [114]: 6b4304c9721b5bed -Block 0006 [115]: e28ef6c6cb719ebb -Block 0006 [116]: 0008cae5ec0089d9 -Block 0006 [117]: ad90327c0ee207de -Block 0006 [118]: 447a5a24fcd4685d -Block 0006 [119]: 7facf44fef9d195e -Block 0006 [120]: 867f839cbc6f4034 -Block 0006 [121]: f06f3f89a4a07ca3 -Block 0006 [122]: 4edf63ff12b9ec51 -Block 0006 [123]: f3b59e506fa26a18 -Block 0006 [124]: d0076e1bcff93428 -Block 0006 [125]: 883962735cdcb10e -Block 0006 [126]: 91a342d726712b8d -Block 0006 [127]: ca9bfa6141a1cd99 -Block 0007 [ 0]: 92639f7eb0201bd1 -Block 0007 [ 1]: bff508c654d0a316 -Block 0007 [ 2]: c9e10ded181c85ba -Block 0007 [ 3]: dd0aa4c62496168a -Block 0007 [ 4]: 53e56c347c3e1748 -Block 0007 [ 5]: a7667ba20750c0ba -Block 0007 [ 6]: a61e71761bd77790 -Block 0007 [ 7]: 71aa5648045f8cc6 -Block 0007 [ 8]: 69c05be9057e6342 -Block 0007 [ 9]: e364571564765b59 -Block 0007 [ 10]: 9238a5a2f5275a39 -Block 0007 [ 11]: 258858e5c66c9c22 -Block 0007 [ 12]: 90001218c66bf46e -Block 0007 [ 13]: 62c859ae59c89890 -Block 0007 [ 14]: be72cd6ac393716e -Block 0007 [ 15]: 3d0e18a8bcfa640a -Block 0007 [ 16]: b375985c889a06fc -Block 0007 [ 17]: 7c13c1a3ac44b123 -Block 0007 [ 18]: 0c1fe0ed44844d8d -Block 0007 [ 19]: 67a5e7752a98dcdf -Block 0007 [ 20]: 1d3b696ebf5de5d1 -Block 0007 [ 21]: 90359e733d5c16c5 -Block 0007 [ 22]: 449f5afedd4f6996 -Block 0007 [ 23]: 97bcc0ff0a526ea9 -Block 0007 [ 24]: 13ed6824d6340099 -Block 0007 [ 25]: 354e5fbc6ca1ee51 -Block 0007 [ 26]: 9adfd16d27171d30 -Block 0007 [ 27]: 7f6316276addaf9c -Block 0007 [ 28]: b101e4b18cec1fa2 -Block 0007 [ 29]: d722bb7c8ddaa4cf -Block 0007 [ 30]: 724909c312c8404b -Block 0007 [ 31]: acf2bc435642575e -Block 0007 [ 32]: a39218a487e82583 -Block 0007 [ 33]: 8d14f885962058a5 -Block 0007 [ 34]: 9851440cfcde2435 -Block 0007 [ 35]: 492f52a3a4a9b67d -Block 0007 [ 36]: 970b91f982d92634 -Block 0007 [ 37]: 8442989dac511e75 -Block 0007 [ 38]: 203380bb904165df -Block 0007 [ 39]: d58a7d10d08d2272 -Block 0007 [ 40]: 79d5c3c7a956e43e -Block 0007 [ 41]: f7a74819963be129 -Block 0007 [ 42]: 061b0ae3c553a728 -Block 0007 [ 43]: a7721db2c9fcebeb -Block 0007 [ 44]: 3b1d4a9bbab3af2a -Block 0007 [ 45]: 811931ac1fa3f917 -Block 0007 [ 46]: acb7322a63fb6bda -Block 0007 [ 47]: 4984832580dd5c34 -Block 0007 [ 48]: 9ad12e5479f0c30c -Block 0007 [ 49]: d9473ecdaea89765 -Block 0007 [ 50]: c8caaf4bdf8f477e -Block 0007 [ 51]: 2fdaab5ff4b494e1 -Block 0007 [ 52]: fdef30421b7a39cd -Block 0007 [ 53]: 967217fa1e92ec59 -Block 0007 [ 54]: 728d382342a4159c -Block 0007 [ 55]: 1be6595bce295dbc -Block 0007 [ 56]: b4c40d238800cfc5 -Block 0007 [ 57]: 607c2d4a27c2b5e4 -Block 0007 [ 58]: 4fc7458f38ac2e19 -Block 0007 [ 59]: 846fea2ac878596d -Block 0007 [ 60]: af34e79d00b74c2a -Block 0007 [ 61]: 3956cc0c34643e42 -Block 0007 [ 62]: ba6d0365319d1bec -Block 0007 [ 63]: 60e4e131ada578d1 -Block 0007 [ 64]: 341af8d301af17ba -Block 0007 [ 65]: 9e9f8e4207a22688 -Block 0007 [ 66]: 9f79b73e65d02b06 -Block 0007 [ 67]: 59301917c3c15263 -Block 0007 [ 68]: 63e34dd709186a30 -Block 0007 [ 69]: ec7fd27fc8dbb1e5 -Block 0007 [ 70]: 440aa98a418a2131 -Block 0007 [ 71]: f9c5ba9031b1d826 -Block 0007 [ 72]: 0f4d36a43c029a63 -Block 0007 [ 73]: 1284d8e357e3bd01 -Block 0007 [ 74]: 3146e0c36173477b -Block 0007 [ 75]: 9c2fcd46d491155d -Block 0007 [ 76]: d25b78f7801545fd -Block 0007 [ 77]: cee8bc67c23b793e -Block 0007 [ 78]: f287bddf96962f7b -Block 0007 [ 79]: 890f655ea4780197 -Block 0007 [ 80]: 4ccdb583e3e68835 -Block 0007 [ 81]: 8e49d38352df80a8 -Block 0007 [ 82]: 9007f0b9b1644498 -Block 0007 [ 83]: 669e52534a22731f -Block 0007 [ 84]: 3ee66d53b92d25db -Block 0007 [ 85]: 3fa32c7f315a0bee -Block 0007 [ 86]: 75b06f3b0a679c4f -Block 0007 [ 87]: ce797b9e220966bf -Block 0007 [ 88]: fc782c6fe2e4bf15 -Block 0007 [ 89]: 508a1982385f1673 -Block 0007 [ 90]: 44713c78ff218860 -Block 0007 [ 91]: 5c57bb791463b88a -Block 0007 [ 92]: b556c28d6fffd834 -Block 0007 [ 93]: 02c839a4bea833dd -Block 0007 [ 94]: 1a6657fa702d17eb -Block 0007 [ 95]: 0aab5f5ea6a8025e -Block 0007 [ 96]: acac9efcbcf36c9c -Block 0007 [ 97]: 8656aec03615c4aa -Block 0007 [ 98]: 6bf56fc498e7d86f -Block 0007 [ 99]: 0dded31589058143 -Block 0007 [100]: bc0a945089635b30 -Block 0007 [101]: 11a4b1441f22f9e7 -Block 0007 [102]: 1e0f1d0b550519fa -Block 0007 [103]: b274b5ad1da912df -Block 0007 [104]: 9ca07448302011e4 -Block 0007 [105]: d9a97724cf0aef36 -Block 0007 [106]: a98a48483cf87837 -Block 0007 [107]: 16fe627774fe37f2 -Block 0007 [108]: 70ae49b3f2cba3de -Block 0007 [109]: c6019a28d8a84f51 -Block 0007 [110]: eeafcdadd890b0de -Block 0007 [111]: 612d51f03688bc5a -Block 0007 [112]: fe6e77f4f6aca6a5 -Block 0007 [113]: ae8b12a53d5578c6 -Block 0007 [114]: 4da5f1027fd097c3 -Block 0007 [115]: 1bdab124d64647aa -Block 0007 [116]: d4826060be069d2a -Block 0007 [117]: 408604168027ec6d -Block 0007 [118]: cd600a0f0e5aeaa4 -Block 0007 [119]: 6fbb6c43c9599aff -Block 0007 [120]: a2333bb2cd3ac800 -Block 0007 [121]: e66d8b6a4c823ae4 -Block 0007 [122]: 8e0606698decd1e7 -Block 0007 [123]: 92641e8250e01937 -Block 0007 [124]: fced8360f3192cb3 -Block 0007 [125]: 336ab5f395df00ad -Block 0007 [126]: 8a9c07658ef7a919 -Block 0007 [127]: 5ec2585c7bfc1859 -Block 0008 [ 0]: d7a32f2a0827cf48 -Block 0008 [ 1]: fe8e9442ca7c4a62 -Block 0008 [ 2]: 1ac3dc6903359815 -Block 0008 [ 3]: 0b8aa4ccce92d934 -Block 0008 [ 4]: 190ec5dd8cdd386e -Block 0008 [ 5]: 71029c05d16f33fe -Block 0008 [ 6]: 40fd5e4026f04da3 -Block 0008 [ 7]: 21ae9adc0a409886 -Block 0008 [ 8]: 3527516b3b50cd47 -Block 0008 [ 9]: fae211122ef4573f -Block 0008 [ 10]: b966633eefce1852 -Block 0008 [ 11]: 60286b42d102da9c -Block 0008 [ 12]: d2e444236395a76d -Block 0008 [ 13]: f3ceb35748329935 -Block 0008 [ 14]: 319a9a0cc9a31169 -Block 0008 [ 15]: 3df93869b18eba70 -Block 0008 [ 16]: c57e131d63fcedbc -Block 0008 [ 17]: 385aa44fdb7ff617 -Block 0008 [ 18]: cf0c30a4cc6101d3 -Block 0008 [ 19]: ed75e4cc5671b6d4 -Block 0008 [ 20]: 620b7dc94ff1745a -Block 0008 [ 21]: c0999aae6e9a6811 -Block 0008 [ 22]: b109ebd952882999 -Block 0008 [ 23]: 08544ca1ac4126c9 -Block 0008 [ 24]: 737cd559fcf13146 -Block 0008 [ 25]: 99381d9f2e261370 -Block 0008 [ 26]: 4d6bc4fbfe2a7172 -Block 0008 [ 27]: dc1979f94ea499e3 -Block 0008 [ 28]: 96067d03816361c7 -Block 0008 [ 29]: c63e0755acec2839 -Block 0008 [ 30]: c1e7c6a51b2d7641 -Block 0008 [ 31]: 08d90379743b61bd -Block 0008 [ 32]: 1c44e7b97c4219de -Block 0008 [ 33]: 857e0800382ca589 -Block 0008 [ 34]: 8433eebf9e376bd4 -Block 0008 [ 35]: 608b1b0186eea6a0 -Block 0008 [ 36]: 353d894da9c34618 -Block 0008 [ 37]: 4639dad690f86eba -Block 0008 [ 38]: f298b2ad3a061766 -Block 0008 [ 39]: d6f200ebb8e1690d -Block 0008 [ 40]: d3f9dd948ade14d4 -Block 0008 [ 41]: 31fdfe49f48b9ab1 -Block 0008 [ 42]: cf4cb128bd5b1eef -Block 0008 [ 43]: b5738119a2e3d243 -Block 0008 [ 44]: ffe9215e317c3db3 -Block 0008 [ 45]: fac8155e1d260771 -Block 0008 [ 46]: 1ca35710531e97f8 -Block 0008 [ 47]: 63980f2b3269a767 -Block 0008 [ 48]: 4a19b88413d2406e -Block 0008 [ 49]: ccb23a68dace3ab4 -Block 0008 [ 50]: db2e6cfd5f51b867 -Block 0008 [ 51]: e581eb27d138b8a4 -Block 0008 [ 52]: f3ba0e830dfa85ea -Block 0008 [ 53]: b19f82a630ccde90 -Block 0008 [ 54]: 7ca6e40cc6ea95cf -Block 0008 [ 55]: 02cc3c74c2ac7018 -Block 0008 [ 56]: 5b75a9db29883cdb -Block 0008 [ 57]: 68fd811e9657d448 -Block 0008 [ 58]: d0c70b19b4dc4445 -Block 0008 [ 59]: 337a8e2f147a9ac4 -Block 0008 [ 60]: 48ec26c7bcb09b5d -Block 0008 [ 61]: 7ee3b7f669944a69 -Block 0008 [ 62]: 85cbafaaabc1b7c0 -Block 0008 [ 63]: d378282d6a4fb14b -Block 0008 [ 64]: b5c4a859f972ba41 -Block 0008 [ 65]: 32f0e6bf92d52494 -Block 0008 [ 66]: 07a59fe5a1dcbefb -Block 0008 [ 67]: 65b8f375d97a8db7 -Block 0008 [ 68]: 094215233f0b5f31 -Block 0008 [ 69]: d4b8d0f377e48fb9 -Block 0008 [ 70]: 4d78725fbff27412 -Block 0008 [ 71]: 82b5f15be44fee37 -Block 0008 [ 72]: 6f08db1d8df4f3cf -Block 0008 [ 73]: faf6cede70806639 -Block 0008 [ 74]: ea2eba07c4477062 -Block 0008 [ 75]: 3482d24b81175403 -Block 0008 [ 76]: da24ea0a67f78c64 -Block 0008 [ 77]: 65e8b030ef344807 -Block 0008 [ 78]: 6c1c6aa7ee9efa9f -Block 0008 [ 79]: 5000bebc24e9ef81 -Block 0008 [ 80]: a6c7736f0d6b9957 -Block 0008 [ 81]: 7707cc16f7366011 -Block 0008 [ 82]: 10929dbf80c11f98 -Block 0008 [ 83]: 2c7d3a22de876b27 -Block 0008 [ 84]: 80fba4b809012410 -Block 0008 [ 85]: 056466ea9c0247b5 -Block 0008 [ 86]: 36956578b3fddd5f -Block 0008 [ 87]: 4e5743b85aa96859 -Block 0008 [ 88]: be09680812e0851e -Block 0008 [ 89]: 1e5bec4834ac4753 -Block 0008 [ 90]: d0f9372e3f60a200 -Block 0008 [ 91]: 5ab4bcef8bb03df9 -Block 0008 [ 92]: e2aea9de802983af -Block 0008 [ 93]: ffb26f08985e0ef1 -Block 0008 [ 94]: bb27500db2718bd8 -Block 0008 [ 95]: b45c0e6aaa63c7a5 -Block 0008 [ 96]: aa8b69bb102e1432 -Block 0008 [ 97]: 67f4724f3fe700e9 -Block 0008 [ 98]: b1fa8f95fa91138c -Block 0008 [ 99]: 74dcfc6303efd795 -Block 0008 [100]: 697820b63ee7881b -Block 0008 [101]: f1d5749128d4d216 -Block 0008 [102]: ca5eb06b4b2187ec -Block 0008 [103]: 6d4799a6e896b61c -Block 0008 [104]: 843d5dc3b6fbd6ef -Block 0008 [105]: e361b3c450ecbe54 -Block 0008 [106]: 3f2a65193e245e32 -Block 0008 [107]: ae54b6aaa09ce1c1 -Block 0008 [108]: 70a4df8bbfa5261c -Block 0008 [109]: 5df00fda80ad67f3 -Block 0008 [110]: 3ac1c4e9fb82980c -Block 0008 [111]: ea1f0237d8bd0dad -Block 0008 [112]: adafe0783378514b -Block 0008 [113]: efb23364e431ea53 -Block 0008 [114]: c884c5872ee09321 -Block 0008 [115]: 068919a5229618d7 -Block 0008 [116]: 7139accfe2fd404f -Block 0008 [117]: a2547790240851ef -Block 0008 [118]: 95eb676d47ba8dda -Block 0008 [119]: 4b9972623559149a -Block 0008 [120]: 57ff7b71148c3c54 -Block 0008 [121]: 8ffa691b244d70d4 -Block 0008 [122]: 09f8ffb1e6a08534 -Block 0008 [123]: 70a88fcae9d3ee9d -Block 0008 [124]: adcc44492f34a7fd -Block 0008 [125]: 62b1621dd05211f6 -Block 0008 [126]: 7c8764d0b5fba3a1 -Block 0008 [127]: d3ea7a45dd01bd53 -Block 0009 [ 0]: d08bd259d340d3c6 -Block 0009 [ 1]: 429557aed2016d51 -Block 0009 [ 2]: 77d12b978a1e2319 -Block 0009 [ 3]: c31ca96bc3b42584 -Block 0009 [ 4]: 962c4d3cc4a5e623 -Block 0009 [ 5]: 232c507b19dcc018 -Block 0009 [ 6]: e674558b67e49478 -Block 0009 [ 7]: 0c738b0c0e08dc01 -Block 0009 [ 8]: a3a4cea8b57f348e -Block 0009 [ 9]: 0b0bcc420dc8797d -Block 0009 [ 10]: 08de0203f13d7df6 -Block 0009 [ 11]: 59a6c3129e0ca977 -Block 0009 [ 12]: 313d1fe2cf306fff -Block 0009 [ 13]: 22aa2ef78c7bd925 -Block 0009 [ 14]: 509e5b5e3f9caa3d -Block 0009 [ 15]: d35f6e1bad7c86c0 -Block 0009 [ 16]: b8d48c2439aa2a25 -Block 0009 [ 17]: 2903a4a01fbf6f28 -Block 0009 [ 18]: 9837daa60b4a5d60 -Block 0009 [ 19]: e73aa62e324f8def -Block 0009 [ 20]: 7a8dedaef7c8081d -Block 0009 [ 21]: 8883f66b856f9b32 -Block 0009 [ 22]: bfc326c218d22ba8 -Block 0009 [ 23]: b8caa2dd6e3571fe -Block 0009 [ 24]: 65a52b4fca1522ce -Block 0009 [ 25]: 25cbc74d57b444df -Block 0009 [ 26]: 26fdc5d7ddf5b9e7 -Block 0009 [ 27]: 88228a1eeffe1815 -Block 0009 [ 28]: 8c45034ca552fcaf -Block 0009 [ 29]: 18e4642b4e82d914 -Block 0009 [ 30]: 4ff981f2eaf571b5 -Block 0009 [ 31]: 6e157fb736d60562 -Block 0009 [ 32]: 2b10660f514d312b -Block 0009 [ 33]: 22bf3a2837801aff -Block 0009 [ 34]: 61eafbb9e3b6fca0 -Block 0009 [ 35]: 823bd01b1aecd107 -Block 0009 [ 36]: b2a19bdfe12307ab -Block 0009 [ 37]: 8927f7176f855d06 -Block 0009 [ 38]: d4aef8e75777bdf1 -Block 0009 [ 39]: 206d9dccb1b939c8 -Block 0009 [ 40]: ac91b41fba63216e -Block 0009 [ 41]: b5b84fbdd569bfec -Block 0009 [ 42]: 146e312d7f6172c6 -Block 0009 [ 43]: de088fc95a4d0346 -Block 0009 [ 44]: b3c6e981c37559cb -Block 0009 [ 45]: 1001b9616071239d -Block 0009 [ 46]: 6bea9f89abb17a30 -Block 0009 [ 47]: 4a5a14d2853f60da -Block 0009 [ 48]: 41f418210e2573df -Block 0009 [ 49]: 5e39b91f69b7c397 -Block 0009 [ 50]: b521aaa82df655fc -Block 0009 [ 51]: 2f64b711ee0fc787 -Block 0009 [ 52]: d221cf816168ba5e -Block 0009 [ 53]: a39af1e90a530697 -Block 0009 [ 54]: aee2d02a683e92c2 -Block 0009 [ 55]: b5daa3e78190eec5 -Block 0009 [ 56]: cafd3d830ab10c85 -Block 0009 [ 57]: dbd796641fce27f9 -Block 0009 [ 58]: d24bfc0d8a99ab4b -Block 0009 [ 59]: 830bdc94684153de -Block 0009 [ 60]: 5b78fd0467e15764 -Block 0009 [ 61]: 55137012f62f906d -Block 0009 [ 62]: 866455113a07ed78 -Block 0009 [ 63]: 2191af3b847267ea -Block 0009 [ 64]: e5ebaa3dade7a97d -Block 0009 [ 65]: 5d8fb9aecb948a7f -Block 0009 [ 66]: 427619aedba4c182 -Block 0009 [ 67]: fb24b376bee4df10 -Block 0009 [ 68]: 95135cf1d29f80e2 -Block 0009 [ 69]: 2c51e533bdede03c -Block 0009 [ 70]: 52893b83af5480a4 -Block 0009 [ 71]: 1e0e0da7ac8c89d8 -Block 0009 [ 72]: f7c523e21b168bad -Block 0009 [ 73]: ea4e481e5969e7a9 -Block 0009 [ 74]: 39237fe8a127f2ea -Block 0009 [ 75]: 9c6d958103b2d551 -Block 0009 [ 76]: 75e38e8091abc932 -Block 0009 [ 77]: 3ddc63b07a1be378 -Block 0009 [ 78]: f11233b5add5cdff -Block 0009 [ 79]: 864ffb38776d09a1 -Block 0009 [ 80]: b6c93a2056ee2423 -Block 0009 [ 81]: f3b5e151ea4b7cf7 -Block 0009 [ 82]: bda60b0a42c98afc -Block 0009 [ 83]: 206c01f4b12908a5 -Block 0009 [ 84]: f9def6d5ac997ba6 -Block 0009 [ 85]: 01b680f90d692a0b -Block 0009 [ 86]: c4a90cb124152693 -Block 0009 [ 87]: 14d55e7fa42e375b -Block 0009 [ 88]: 2b8018bd80552d61 -Block 0009 [ 89]: 8eddde6c73a88c9d -Block 0009 [ 90]: 30c144a558c0e6c6 -Block 0009 [ 91]: 4f6c61db03719125 -Block 0009 [ 92]: 6771f4cdf1120f56 -Block 0009 [ 93]: a4a063679ad7d497 -Block 0009 [ 94]: 75aa05ef51f93d80 -Block 0009 [ 95]: 325c97906db37c77 -Block 0009 [ 96]: f09a14aa1fb090e1 -Block 0009 [ 97]: fa726606823f5fad -Block 0009 [ 98]: f8eb5b5c0703b09b -Block 0009 [ 99]: 228067ce5a3320ba -Block 0009 [100]: 1e74f435eb43fb9a -Block 0009 [101]: 004d5f043957d65a -Block 0009 [102]: 20dcf6bc285d9d0d -Block 0009 [103]: 848a0e38582a8944 -Block 0009 [104]: 3c1c49835ec69491 -Block 0009 [105]: 20063d3af3417cdc -Block 0009 [106]: 87dc824cb5c06c12 -Block 0009 [107]: 6525776d6502bb13 -Block 0009 [108]: 2e026670ca887659 -Block 0009 [109]: bd8efc8d29eb72af -Block 0009 [110]: 74991100959b9f7a -Block 0009 [111]: a5a2288c26fee2bb -Block 0009 [112]: 7283dd8ffcb0940d -Block 0009 [113]: 16a092fca662c662 -Block 0009 [114]: 5ed480134578c559 -Block 0009 [115]: 2663252693a54b82 -Block 0009 [116]: 95cf4c81e9f4ab71 -Block 0009 [117]: 4ab2f95d78af71da -Block 0009 [118]: 66eec9677f23b9f3 -Block 0009 [119]: 87ed8660f5c913c0 -Block 0009 [120]: fc892530429a248a -Block 0009 [121]: 03589e9cea760810 -Block 0009 [122]: 5b399da3f98c3128 -Block 0009 [123]: 26dcf9d52c2b9e31 -Block 0009 [124]: 5424678fc32d6683 -Block 0009 [125]: dc1009703fe5413b -Block 0009 [126]: 03ce3ad9c886da37 -Block 0009 [127]: f1a4cfd3a16361cf -Block 0010 [ 0]: f7102b7819862507 -Block 0010 [ 1]: df56220925ba6a2f -Block 0010 [ 2]: f51393014936014f -Block 0010 [ 3]: 15625042d501fdb0 -Block 0010 [ 4]: b21e29b86660cac3 -Block 0010 [ 5]: d29185b644e83366 -Block 0010 [ 6]: fa2820732246e503 -Block 0010 [ 7]: 7010a476d2a6d4d5 -Block 0010 [ 8]: ce54fa5cfee22a4a -Block 0010 [ 9]: f1ee891589e25001 -Block 0010 [ 10]: e25da33d7e215be9 -Block 0010 [ 11]: 384f8897822a8f92 -Block 0010 [ 12]: 65ee848c4bf3d662 -Block 0010 [ 13]: a945e8a041ebf8ff -Block 0010 [ 14]: fbcdf5feb172a921 -Block 0010 [ 15]: edd4b6fc18863cfa -Block 0010 [ 16]: 3ea4af86b1b8bcf1 -Block 0010 [ 17]: 5090e9061cdffe2b -Block 0010 [ 18]: 4ed2f171a8d3dc71 -Block 0010 [ 19]: 1d34acc8a37014b0 -Block 0010 [ 20]: 435fde3f03d94963 -Block 0010 [ 21]: ef7e011a248d9ab4 -Block 0010 [ 22]: b2713d0d04158674 -Block 0010 [ 23]: 34eda70ee54044aa -Block 0010 [ 24]: c17ffee696268e67 -Block 0010 [ 25]: bcf94972d44ac6aa -Block 0010 [ 26]: 62d4b2a710f28bc4 -Block 0010 [ 27]: cd3e1061b949f164 -Block 0010 [ 28]: 66bb3435151cb7c0 -Block 0010 [ 29]: 04927566e052dc70 -Block 0010 [ 30]: c6098d954b703238 -Block 0010 [ 31]: 6b38cac5f7e384fd -Block 0010 [ 32]: ad827462ecc594a1 -Block 0010 [ 33]: dc7dffd943b711d8 -Block 0010 [ 34]: 48acb309728fc0f3 -Block 0010 [ 35]: 23990349a973f2bd -Block 0010 [ 36]: 9858087a1350d908 -Block 0010 [ 37]: 830e4c7c0d3063ff -Block 0010 [ 38]: 353c20afdd0ce145 -Block 0010 [ 39]: 477c80401d92b4bb -Block 0010 [ 40]: 223aaa363c3131bc -Block 0010 [ 41]: 92bf771465be2dc7 -Block 0010 [ 42]: 4962650f4ca85833 -Block 0010 [ 43]: 9ff477d2bc5a5b4f -Block 0010 [ 44]: cedea84b3e0ae182 -Block 0010 [ 45]: 9bbb316a0430e7af -Block 0010 [ 46]: de5b2d55ef08bc41 -Block 0010 [ 47]: 4a68404c3af4cc55 -Block 0010 [ 48]: 322aa531e0e70d38 -Block 0010 [ 49]: d732a5c235c785f2 -Block 0010 [ 50]: d194b97d72dc3a39 -Block 0010 [ 51]: 6dbc081f1151718d -Block 0010 [ 52]: 82a2d3af9f897794 -Block 0010 [ 53]: 43d7a43718dc4bd2 -Block 0010 [ 54]: db61a4b356a2743a -Block 0010 [ 55]: 9ab6f0349b657e9f -Block 0010 [ 56]: 2c6065c9334fd4db -Block 0010 [ 57]: 5e2704a1d1060351 -Block 0010 [ 58]: 582a4a05cedddd44 -Block 0010 [ 59]: b958a045ff37830f -Block 0010 [ 60]: a34c2c509ac32f79 -Block 0010 [ 61]: 02ef34ca4730d0fa -Block 0010 [ 62]: 239172f43950d8fd -Block 0010 [ 63]: b79d7a305227b957 -Block 0010 [ 64]: ce660699f2567824 -Block 0010 [ 65]: 2226ac90308bc88b -Block 0010 [ 66]: 74afc00999644831 -Block 0010 [ 67]: 3b0ee6ea37495e91 -Block 0010 [ 68]: 6d04170b6116e08e -Block 0010 [ 69]: 57a1fffb9171a6c5 -Block 0010 [ 70]: 8e042dce88bf04e5 -Block 0010 [ 71]: a1f101a34208d1ff -Block 0010 [ 72]: 77be77d55ba39cf1 -Block 0010 [ 73]: f2f5463a10c77c0a -Block 0010 [ 74]: 54f36a5d93ebf9e0 -Block 0010 [ 75]: 1c270347feab23c3 -Block 0010 [ 76]: 4a4f45c009372f5f -Block 0010 [ 77]: 210b3203bd710469 -Block 0010 [ 78]: 0e3b847d4b92d146 -Block 0010 [ 79]: b3f0c7a18d6da095 -Block 0010 [ 80]: 53d3d14e7bc0cc98 -Block 0010 [ 81]: 3b8a954fce979752 -Block 0010 [ 82]: 8571c0ff14544b35 -Block 0010 [ 83]: cf52cb49f383d078 -Block 0010 [ 84]: 34b9a8d088b46a7d -Block 0010 [ 85]: 0c02556204f91c44 -Block 0010 [ 86]: 4ff85a111866656c -Block 0010 [ 87]: e8b7f0a60d9d78b0 -Block 0010 [ 88]: 7d50a0180d5ab40e -Block 0010 [ 89]: 5f26a2da9d155f4a -Block 0010 [ 90]: cb8e7b8dccbb09e2 -Block 0010 [ 91]: 548c3d903b2c3721 -Block 0010 [ 92]: dbed09ba9901f9af -Block 0010 [ 93]: 8f3bd6baed72f42f -Block 0010 [ 94]: c0523988601177b1 -Block 0010 [ 95]: 9479077ded200101 -Block 0010 [ 96]: 22bb9c0414c5311d -Block 0010 [ 97]: 0aa62726ef5006b1 -Block 0010 [ 98]: 65725877f28d41c0 -Block 0010 [ 99]: 1bf3fbbf62dc434f -Block 0010 [100]: 8d24325a2de1c34c -Block 0010 [101]: ad1ebc03915d3632 -Block 0010 [102]: a80744af224bc6e5 -Block 0010 [103]: a42f36ce1b331fa7 -Block 0010 [104]: 7f5b84c2264dde29 -Block 0010 [105]: 9d68aa35b0346155 -Block 0010 [106]: 106ec871bc9af474 -Block 0010 [107]: 0f30036315e3358f -Block 0010 [108]: ea0e307ee2de4cc0 -Block 0010 [109]: b8c78ff0b390416c -Block 0010 [110]: cb061486cafe634b -Block 0010 [111]: 1f65dc0a96c2df8c -Block 0010 [112]: 63509f1498fc4195 -Block 0010 [113]: 7958c9554127aa5d -Block 0010 [114]: aea53f20e9ae91f8 -Block 0010 [115]: d96a52977e99cfa9 -Block 0010 [116]: 9dd0669bf8bb9e4c -Block 0010 [117]: 17335cfb0b4a101b -Block 0010 [118]: ac83e8c088b3faa2 -Block 0010 [119]: e2d00f77ebdcb5d5 -Block 0010 [120]: 8953e063a53473cb -Block 0010 [121]: 0bf9340b692adf71 -Block 0010 [122]: 18e1d770623f5000 -Block 0010 [123]: b7f46f05950588e5 -Block 0010 [124]: bf82a3830897c743 -Block 0010 [125]: 45388ba792780880 -Block 0010 [126]: f298b7d1db9beaed -Block 0010 [127]: 80d82aaf83329f45 -Block 0011 [ 0]: 52b29e21da352337 -Block 0011 [ 1]: 2f0c85e24b2bb285 -Block 0011 [ 2]: 8bf5ede2af27b80b -Block 0011 [ 3]: d1d7798e3b7628b5 -Block 0011 [ 4]: 763577566ec4d2fb -Block 0011 [ 5]: 3e99eae6b9383da2 -Block 0011 [ 6]: 221dec4413c09f83 -Block 0011 [ 7]: f904d4d3e4bc9689 -Block 0011 [ 8]: 8f21dcec402bf89f -Block 0011 [ 9]: 68de13304dae5f9c -Block 0011 [ 10]: c464d43bf7ffb197 -Block 0011 [ 11]: 20d3b21625176b70 -Block 0011 [ 12]: e07b11307fa74f2e -Block 0011 [ 13]: 2a9fa72207dde048 -Block 0011 [ 14]: de300c37b9d59c53 -Block 0011 [ 15]: 8ed2a9fec9001675 -Block 0011 [ 16]: a411fa308bfb9948 -Block 0011 [ 17]: 01ae829642ff7219 -Block 0011 [ 18]: 5921b35dbafc1448 -Block 0011 [ 19]: cd2799228fd0dc30 -Block 0011 [ 20]: 00230c328bf3ef57 -Block 0011 [ 21]: d5a491d6021ae832 -Block 0011 [ 22]: c82ec6c1daaa93be -Block 0011 [ 23]: 40463c0836a29bd1 -Block 0011 [ 24]: 634d1419bbf24614 -Block 0011 [ 25]: 4a76864de4c728d4 -Block 0011 [ 26]: ccd8b6c9e22139c8 -Block 0011 [ 27]: b5e12193d76044c9 -Block 0011 [ 28]: 6d419f9ca6b2da18 -Block 0011 [ 29]: 631a3d2466f751c7 -Block 0011 [ 30]: eee3161ed510c1bc -Block 0011 [ 31]: 5c205b1ec867db89 -Block 0011 [ 32]: 57847ca52d6d1ca8 -Block 0011 [ 33]: a29a80eae282a2f9 -Block 0011 [ 34]: f75a6d57836ce3e3 -Block 0011 [ 35]: 46c644fe81a06770 -Block 0011 [ 36]: 89f77255596c64e7 -Block 0011 [ 37]: 557c8a199b0f3e57 -Block 0011 [ 38]: eece7fb87c820f63 -Block 0011 [ 39]: e9933bd1bfcb2efa -Block 0011 [ 40]: bc50e18635f727bb -Block 0011 [ 41]: d9abdabbba515124 -Block 0011 [ 42]: 3cf140d714fa3ab9 -Block 0011 [ 43]: 68b66ca1c4946d68 -Block 0011 [ 44]: 2cbe90f574d0aa6c -Block 0011 [ 45]: 942b66c749d50e3d -Block 0011 [ 46]: 14fe3b269ae7f924 -Block 0011 [ 47]: c34e24597c89e72d -Block 0011 [ 48]: 7db2d50634769bfc -Block 0011 [ 49]: 26b7f4115e5fa3e6 -Block 0011 [ 50]: 5c8811c8bb1f8518 -Block 0011 [ 51]: 5ccbd037664bbe60 -Block 0011 [ 52]: ae1a273e7682b4a7 -Block 0011 [ 53]: 992756342215636f -Block 0011 [ 54]: 41dd622f491d72ec -Block 0011 [ 55]: 157f7c4d6fa92e6b -Block 0011 [ 56]: 57f7c8e41f0843d8 -Block 0011 [ 57]: 06f4a658f7020d2f -Block 0011 [ 58]: b1900511e44d09ae -Block 0011 [ 59]: 2c636b5655bdca66 -Block 0011 [ 60]: f0cd0d2759b2a414 -Block 0011 [ 61]: aaa255272e910ba1 -Block 0011 [ 62]: f6cdfda91907a87b -Block 0011 [ 63]: 4daff4894e8c371c -Block 0011 [ 64]: 4b3fc1ed98b5c960 -Block 0011 [ 65]: 45aff93643e9bed6 -Block 0011 [ 66]: e57396cddcb85de0 -Block 0011 [ 67]: 453f06ae61b1ae84 -Block 0011 [ 68]: 92abd804af471c8c -Block 0011 [ 69]: de3db2263d007ea9 -Block 0011 [ 70]: 1cf00b12f02d302c -Block 0011 [ 71]: 4c98f282e6ed2ff4 -Block 0011 [ 72]: 7013d0175b3e1ade -Block 0011 [ 73]: 7d901f769d0fd762 -Block 0011 [ 74]: 554be32102a647ed -Block 0011 [ 75]: f027c617e3d22010 -Block 0011 [ 76]: 6e82b9c24aa56fea -Block 0011 [ 77]: dae2d2bbf585d44a -Block 0011 [ 78]: 8670017c6f7d7c45 -Block 0011 [ 79]: 95f5b9cc9521bf43 -Block 0011 [ 80]: 377311361d5e899f -Block 0011 [ 81]: c94963d5ff411540 -Block 0011 [ 82]: fd0a1ed433ef0547 -Block 0011 [ 83]: 0f52b42c428ecfa8 -Block 0011 [ 84]: 3da24c53fd340e11 -Block 0011 [ 85]: bc740a59bf3b9d91 -Block 0011 [ 86]: 47f7f84d80da6885 -Block 0011 [ 87]: cc33ce5dda2b18cd -Block 0011 [ 88]: a1079f9f43146d8d -Block 0011 [ 89]: 347b41316856a399 -Block 0011 [ 90]: de2a70e8fe948431 -Block 0011 [ 91]: 18f7a1e23950188c -Block 0011 [ 92]: e894053df2fb27d0 -Block 0011 [ 93]: 0bf2d7f61afac33a -Block 0011 [ 94]: f032f17390e9b43f -Block 0011 [ 95]: 76c2d93bdc87a6b2 -Block 0011 [ 96]: 5f94f381efd95cf0 -Block 0011 [ 97]: 780711e49c97fbf0 -Block 0011 [ 98]: ac9c82eade6bdeee -Block 0011 [ 99]: 5f55749397478696 -Block 0011 [100]: b6b8ee8ff05567af -Block 0011 [101]: 6215630fc4c7cd17 -Block 0011 [102]: c558c8971ccea93d -Block 0011 [103]: 55ba80c1a0b927b5 -Block 0011 [104]: f570ae43f549994c -Block 0011 [105]: 959ef14d47a74adf -Block 0011 [106]: 4ad49eefa6970106 -Block 0011 [107]: 32cd02e6655349bf -Block 0011 [108]: 3097c4d675de4902 -Block 0011 [109]: e1fdfd6688d3737f -Block 0011 [110]: 652ebc315836722f -Block 0011 [111]: 40f5ebd42d545915 -Block 0011 [112]: fbff4103ef433bc3 -Block 0011 [113]: 74d1748ea3a5bcd8 -Block 0011 [114]: 040978aca26fc2dd -Block 0011 [115]: 3650e07dce35b076 -Block 0011 [116]: 79100977dfc30b24 -Block 0011 [117]: ecc54d3e4c8bd3a6 -Block 0011 [118]: fe9a8fa9060ac214 -Block 0011 [119]: 850e726eeec182b6 -Block 0011 [120]: a21893e9f7760054 -Block 0011 [121]: bcb7f6992bd1051e -Block 0011 [122]: 69cc6743de97b4fc -Block 0011 [123]: 78a246a84319d5bc -Block 0011 [124]: 6719991920301152 -Block 0011 [125]: 62d3c940b1c82c4d -Block 0011 [126]: b8d54eaa8eefc9f1 -Block 0011 [127]: ef7cbc469902080a -Block 0012 [ 0]: b41d6643cd2d35e7 -Block 0012 [ 1]: 451993e7a1f452c9 -Block 0012 [ 2]: 19281a7c2c187a74 -Block 0012 [ 3]: f131ed721856f22c -Block 0012 [ 4]: f5aa54c24851e293 -Block 0012 [ 5]: 6daf0679c90cc7de -Block 0012 [ 6]: 6485b2c039fa9d7d -Block 0012 [ 7]: c6c2d967bf31e9aa -Block 0012 [ 8]: 6a373dfeb854197f -Block 0012 [ 9]: e721c34905b59088 -Block 0012 [ 10]: 177fe1b6c1bba1f4 -Block 0012 [ 11]: bdedea02f28e67ae -Block 0012 [ 12]: d96cf43dbb140033 -Block 0012 [ 13]: bc90d7ece2f06f22 -Block 0012 [ 14]: b1b149dbf7aafbf9 -Block 0012 [ 15]: 543a2bc21a6ef1c7 -Block 0012 [ 16]: c6adf0b95602151b -Block 0012 [ 17]: 1fa634a5014e68e0 -Block 0012 [ 18]: 156388d5b2cc39a4 -Block 0012 [ 19]: 3fa5584b8347398b -Block 0012 [ 20]: b80171c006813e45 -Block 0012 [ 21]: 93484f2494cb26a2 -Block 0012 [ 22]: d2a44226231d38b4 -Block 0012 [ 23]: 455dce0f0897d143 -Block 0012 [ 24]: 42a964a2f8b736a5 -Block 0012 [ 25]: 7b689eaed9d611cc -Block 0012 [ 26]: 748fac9d29981ff4 -Block 0012 [ 27]: 872a2f30efd85b27 -Block 0012 [ 28]: cc407811a5c3f5a3 -Block 0012 [ 29]: 5c901be277ec8973 -Block 0012 [ 30]: 1c2dd0eb9e25b060 -Block 0012 [ 31]: 57a92565827a07e5 -Block 0012 [ 32]: 1d1700d8734c11ec -Block 0012 [ 33]: 1edccd23555de63b -Block 0012 [ 34]: 10d90e9483ffdc52 -Block 0012 [ 35]: 9659c355ed944511 -Block 0012 [ 36]: df47ea500fa0a91f -Block 0012 [ 37]: c8eec40887899cb3 -Block 0012 [ 38]: 5afbb3990d6eb059 -Block 0012 [ 39]: c70615e230e7c4f6 -Block 0012 [ 40]: b7bafcae05874a33 -Block 0012 [ 41]: fa5d359d3482072a -Block 0012 [ 42]: 25106f2afcad8db9 -Block 0012 [ 43]: 1b5a77262e0c9ba6 -Block 0012 [ 44]: 5be08c2e2a919eae -Block 0012 [ 45]: 44bdb7ca0710d72e -Block 0012 [ 46]: 397cb3144bacf2ab -Block 0012 [ 47]: 511b264d429427f7 -Block 0012 [ 48]: aea9bc9f1b764af3 -Block 0012 [ 49]: 8d4a43506453f1d4 -Block 0012 [ 50]: 9806a89a986b115f -Block 0012 [ 51]: 0459b1632e869a12 -Block 0012 [ 52]: 4523dd7dd5485183 -Block 0012 [ 53]: f9c89833fdbda2ee -Block 0012 [ 54]: b89588ce4d5ba944 -Block 0012 [ 55]: afafcb5633f00c84 -Block 0012 [ 56]: 3677b05a67fa39bf -Block 0012 [ 57]: eafbe7bb4e4b8646 -Block 0012 [ 58]: 909a0b6387f8e49f -Block 0012 [ 59]: 6e858a5ea6670358 -Block 0012 [ 60]: 96915161672d880c -Block 0012 [ 61]: c179a9e40d93249a -Block 0012 [ 62]: e90403400d9b3166 -Block 0012 [ 63]: 1752659b1bae5d9f -Block 0012 [ 64]: 6fd39575db6a44e8 -Block 0012 [ 65]: 013de9bf0dbbdd11 -Block 0012 [ 66]: 73463d2189ada915 -Block 0012 [ 67]: 630fc52f88cb47b3 -Block 0012 [ 68]: ca4773724596e785 -Block 0012 [ 69]: cb5c2febf665f7b7 -Block 0012 [ 70]: 4e93e7dd9addea58 -Block 0012 [ 71]: 743c251ec9a34932 -Block 0012 [ 72]: 2056026bdde0ddaf -Block 0012 [ 73]: 8a2be10548d1b30b -Block 0012 [ 74]: a288353ffe05df65 -Block 0012 [ 75]: 5249529f94c8b330 -Block 0012 [ 76]: b4550cbf29ecdc90 -Block 0012 [ 77]: 962d8f1e68ef1beb -Block 0012 [ 78]: 84f687b4f6d8bb6e -Block 0012 [ 79]: 7444c30f326decca -Block 0012 [ 80]: 6fd686446a43aef2 -Block 0012 [ 81]: de5c7a070b961f9b -Block 0012 [ 82]: 21b25a9cd4f19753 -Block 0012 [ 83]: 88775ad5cdd7ea52 -Block 0012 [ 84]: aed154cdf4b74243 -Block 0012 [ 85]: 4ae9f92e0709773d -Block 0012 [ 86]: 107ff1bb7b349ad5 -Block 0012 [ 87]: aadc86f968bd0dcf -Block 0012 [ 88]: b4fed81d3a24dea6 -Block 0012 [ 89]: f2294093f5adcd7f -Block 0012 [ 90]: 7bb112a949891139 -Block 0012 [ 91]: dd9cd22cca3d4b50 -Block 0012 [ 92]: d3189d2bb0251c29 -Block 0012 [ 93]: 9d4ef66818294568 -Block 0012 [ 94]: fd6dbeeda6d42b41 -Block 0012 [ 95]: 34beb6e1fa79d1ff -Block 0012 [ 96]: 611fcfb5ea500a95 -Block 0012 [ 97]: 95c907722fb52e7e -Block 0012 [ 98]: ff44d6d256799080 -Block 0012 [ 99]: a0bed9defcd56afb -Block 0012 [100]: b580d489e3f02e54 -Block 0012 [101]: 72c5370840bf7f9b -Block 0012 [102]: 43441a6eab55953f -Block 0012 [103]: 945f22a7f40bb828 -Block 0012 [104]: dc99449d78dc5f4d -Block 0012 [105]: c7258afc1d62d9f3 -Block 0012 [106]: 53502b7babad94d8 -Block 0012 [107]: e44bb55a7247d194 -Block 0012 [108]: 703624923d1c44ac -Block 0012 [109]: de3b62036f77a962 -Block 0012 [110]: fdace61fd734e777 -Block 0012 [111]: e31fb59abb89ff5e -Block 0012 [112]: e0a50c2aa645a460 -Block 0012 [113]: 364d99f0e8cfaf47 -Block 0012 [114]: 0a3ceb5e14ae97fd -Block 0012 [115]: 068cf774cccf0b87 -Block 0012 [116]: 9078bf33cc1ea4cf -Block 0012 [117]: 102bdc8556c4aadc -Block 0012 [118]: 3d8218690d0a2275 -Block 0012 [119]: 02f8bb9d9554011e -Block 0012 [120]: b89e8162dfdc469e -Block 0012 [121]: e44a945e2c65f5d0 -Block 0012 [122]: af1e6328c8235052 -Block 0012 [123]: 1e841c1f63dea326 -Block 0012 [124]: 2db7659be0b50d50 -Block 0012 [125]: 50dccdf28a626d0e -Block 0012 [126]: d7c52028c281cd8c -Block 0012 [127]: e529fc89af20d455 -Block 0013 [ 0]: 3f79f1e30b5e7726 -Block 0013 [ 1]: 6b6c441852a1437f -Block 0013 [ 2]: 524c143552902847 -Block 0013 [ 3]: f9b339800d2d28cb -Block 0013 [ 4]: cf55d282c610193a -Block 0013 [ 5]: bf832f49274a60b8 -Block 0013 [ 6]: 45a4e7155816ac7e -Block 0013 [ 7]: e64bec13052f6941 -Block 0013 [ 8]: d6242b89535de78a -Block 0013 [ 9]: 918e2e27f15f721a -Block 0013 [ 10]: 31f4ea9a9d2857ff -Block 0013 [ 11]: 4c319ff476195c38 -Block 0013 [ 12]: d4355f6d48776116 -Block 0013 [ 13]: 93ffbeccc98cf397 -Block 0013 [ 14]: 25cfa21890d33df7 -Block 0013 [ 15]: cf5a579647ea0d8d -Block 0013 [ 16]: d727a14fcba6e5a0 -Block 0013 [ 17]: 6071de36f5e1028e -Block 0013 [ 18]: c93483002c5999dc -Block 0013 [ 19]: e58513e2865352fa -Block 0013 [ 20]: 03ca90a9f479c70e -Block 0013 [ 21]: e3a1a02a869e3683 -Block 0013 [ 22]: dacc0c5f28ba73cf -Block 0013 [ 23]: e1ae25441e581087 -Block 0013 [ 24]: 2e5a29a2d4985b3e -Block 0013 [ 25]: 6de6b2e0f421263f -Block 0013 [ 26]: 53dc84682df0c994 -Block 0013 [ 27]: f888d4cba517b460 -Block 0013 [ 28]: ff439db232b6fc9e -Block 0013 [ 29]: 7d58f7a83ac2c2e1 -Block 0013 [ 30]: c9b857272b2969d0 -Block 0013 [ 31]: 51855dab8e1357c6 -Block 0013 [ 32]: 16417e3b16743c74 -Block 0013 [ 33]: 0b32891249dc6a63 -Block 0013 [ 34]: a43b213b7bb8af74 -Block 0013 [ 35]: d4ed5f9f0696585a -Block 0013 [ 36]: e7082aad8d1d9fed -Block 0013 [ 37]: ccb027b71e7d70cf -Block 0013 [ 38]: 1908f7d226bd2374 -Block 0013 [ 39]: cd2c56282338cf35 -Block 0013 [ 40]: 465723b104c27515 -Block 0013 [ 41]: 6ebb42a9d3221d0d -Block 0013 [ 42]: 3edb4eacf01bbf7d -Block 0013 [ 43]: 86effc21d67d7342 -Block 0013 [ 44]: a18cb75bdb19e26b -Block 0013 [ 45]: 031ebbc38fca0940 -Block 0013 [ 46]: 9dca893dba6fabe7 -Block 0013 [ 47]: 16dc0a306d559c2c -Block 0013 [ 48]: 05d692d2e8d71369 -Block 0013 [ 49]: 7529565f8a9d4191 -Block 0013 [ 50]: 9dc457838464926f -Block 0013 [ 51]: 98dd7fe4c8308784 -Block 0013 [ 52]: 83f4a014c9dd1ebd -Block 0013 [ 53]: d1cf7b70be1c12a4 -Block 0013 [ 54]: df7fafe2f2b05c5c -Block 0013 [ 55]: 89f33833c8bb9933 -Block 0013 [ 56]: f8983927ab303c4f -Block 0013 [ 57]: ab385ef38e912d62 -Block 0013 [ 58]: 96b4e9e50cd94e26 -Block 0013 [ 59]: f8011b1cbea250a9 -Block 0013 [ 60]: 06cc68c9612a8547 -Block 0013 [ 61]: 9eb5fdb60d7dd9ff -Block 0013 [ 62]: 0ab426dd8341c5af -Block 0013 [ 63]: 6f5a384f223e4bda -Block 0013 [ 64]: 43a425b96623aad2 -Block 0013 [ 65]: 58a19d4d1e96aac2 -Block 0013 [ 66]: fefcab43331184f0 -Block 0013 [ 67]: 352a12578ddeebe8 -Block 0013 [ 68]: 5a8ba5c164aff53b -Block 0013 [ 69]: fd34095dec7f6a43 -Block 0013 [ 70]: 59ef6a514af304ee -Block 0013 [ 71]: b3f28a6b50e9eefc -Block 0013 [ 72]: f364142ad5f6f2a0 -Block 0013 [ 73]: 14c080411768f284 -Block 0013 [ 74]: 369ee6619b655c82 -Block 0013 [ 75]: 0e1b76fd96acdbe3 -Block 0013 [ 76]: 88616fdcf90cefd8 -Block 0013 [ 77]: a57f0eb8309ec5d2 -Block 0013 [ 78]: e46225f231033231 -Block 0013 [ 79]: 0f7bff3fb56060d0 -Block 0013 [ 80]: 864926034a3d58be -Block 0013 [ 81]: b4f4ff182a193fa9 -Block 0013 [ 82]: 42a9eda20b28ce4d -Block 0013 [ 83]: 48942f8c13152016 -Block 0013 [ 84]: b52c3f1d87a6b25e -Block 0013 [ 85]: c76ccf82bd8ace4a -Block 0013 [ 86]: eb6225fcafb3d553 -Block 0013 [ 87]: b38eeac9c4ed180b -Block 0013 [ 88]: 0e3726f21e5833e5 -Block 0013 [ 89]: 134bac0f131f4988 -Block 0013 [ 90]: 75d5e1d3db15b9ff -Block 0013 [ 91]: 7b85824230fe3a0c -Block 0013 [ 92]: ebd181d68697d465 -Block 0013 [ 93]: f197bfb66bc00c9f -Block 0013 [ 94]: 22bf2bfb071c6456 -Block 0013 [ 95]: d082ebcd3e459d4c -Block 0013 [ 96]: f44ca9dbaddfc73e -Block 0013 [ 97]: 0f4bd40e2efc8bcc -Block 0013 [ 98]: 9a177f8107cf3d7c -Block 0013 [ 99]: 35c4f26aad7c9e5b -Block 0013 [100]: 3a113403023d6b10 -Block 0013 [101]: 89daa9698721de5a -Block 0013 [102]: 0010e90c8d3451fb -Block 0013 [103]: ab8cea9f5a22f47b -Block 0013 [104]: abea62261666385e -Block 0013 [105]: c2fa2c669d87a44f -Block 0013 [106]: e97d4fee1a2ad6e5 -Block 0013 [107]: 39f4c7c19abf0718 -Block 0013 [108]: e902f38fd4a7f2e5 -Block 0013 [109]: 7883dc63e607eddf -Block 0013 [110]: d0d19d2d6ba8a80b -Block 0013 [111]: e87329db2f6aaf67 -Block 0013 [112]: efaabe1b2bf88c42 -Block 0013 [113]: f616ae68edba0dc3 -Block 0013 [114]: 58bf7d614b08eadd -Block 0013 [115]: b209c040f8a23484 -Block 0013 [116]: 1cde8c5201fb1b69 -Block 0013 [117]: 13b4333e71d45941 -Block 0013 [118]: 946305a39fe8b48b -Block 0013 [119]: 78a4c0885a91e21f -Block 0013 [120]: bc3fab5ac339e717 -Block 0013 [121]: 7d72b057bbb11f71 -Block 0013 [122]: a848b011f3c9bd93 -Block 0013 [123]: ba5bf9f6a7e1e947 -Block 0013 [124]: 4c929b7f7c4125d3 -Block 0013 [125]: c779bbe51677c684 -Block 0013 [126]: 7ce69656016bc8cc -Block 0013 [127]: 4060f77a3f4f375e -Block 0014 [ 0]: 36eb877e2cb684d6 -Block 0014 [ 1]: f9e8ab338f6c1e51 -Block 0014 [ 2]: 52faedc92b2e8b61 -Block 0014 [ 3]: 9bb1469da336c2a0 -Block 0014 [ 4]: 585fa4eec702f668 -Block 0014 [ 5]: fd7c1e2b7777ef25 -Block 0014 [ 6]: 2a7173209ca4ff4d -Block 0014 [ 7]: 0fcb08a71c391504 -Block 0014 [ 8]: 3b610bc5a7a224f5 -Block 0014 [ 9]: 25dd0a482210acc5 -Block 0014 [ 10]: 9694d8f19a8a0a91 -Block 0014 [ 11]: adfa18f2c0ca7f44 -Block 0014 [ 12]: 8ee2b1e1409e71bd -Block 0014 [ 13]: bea7a5183e79e431 -Block 0014 [ 14]: 98bd569af79c14f5 -Block 0014 [ 15]: b4dd008366f82442 -Block 0014 [ 16]: e9f3b4fc450e4d19 -Block 0014 [ 17]: bc9b583e1ee06e2c -Block 0014 [ 18]: 25cd0f442e01ed38 -Block 0014 [ 19]: edd96c9655cc3214 -Block 0014 [ 20]: 2b19a0e6b9ccb78a -Block 0014 [ 21]: 6b71b8e90c93cea0 -Block 0014 [ 22]: ad0b9f452be42586 -Block 0014 [ 23]: 52e78d83f9aee524 -Block 0014 [ 24]: c78174b11c8d5c1f -Block 0014 [ 25]: 0bd632f0fb2eae74 -Block 0014 [ 26]: 8c75e9efe3f75b38 -Block 0014 [ 27]: 712469cdfa1db23b -Block 0014 [ 28]: 625175cc28636029 -Block 0014 [ 29]: f7414204e9b1abb5 -Block 0014 [ 30]: cb2d8243eb03a7fd -Block 0014 [ 31]: b25d487501f1232d -Block 0014 [ 32]: 7ba19300c55e1518 -Block 0014 [ 33]: f380f524ba88d8fe -Block 0014 [ 34]: 23bdbd7438c69060 -Block 0014 [ 35]: a521773558402ff0 -Block 0014 [ 36]: dfdcb5870ffef2cc -Block 0014 [ 37]: c9fdcf18dc1f0529 -Block 0014 [ 38]: 2f9087ce5ac19e93 -Block 0014 [ 39]: 73b60c28230016b8 -Block 0014 [ 40]: f3ed5041b360449b -Block 0014 [ 41]: bbd4bc9021b7619d -Block 0014 [ 42]: ae9c40ba07422d8c -Block 0014 [ 43]: 09785605bd9eda18 -Block 0014 [ 44]: a6f7aa266270f957 -Block 0014 [ 45]: 051cdfcd704e0384 -Block 0014 [ 46]: 7387dbbf3e1a10c4 -Block 0014 [ 47]: 5dc0e14b24286a1f -Block 0014 [ 48]: e1d8bf350ff87374 -Block 0014 [ 49]: b9a99daa52530e06 -Block 0014 [ 50]: 116ffffb006a2144 -Block 0014 [ 51]: dd7a66d2e636a525 -Block 0014 [ 52]: 61db77a021ac3926 -Block 0014 [ 53]: 30d1f7744e647694 -Block 0014 [ 54]: 96fd74b22f5fcac1 -Block 0014 [ 55]: c1adc9f2b5a985ad -Block 0014 [ 56]: f09d8dacf51ec7c2 -Block 0014 [ 57]: aefd81d2e006dc85 -Block 0014 [ 58]: 9376229c3023edd2 -Block 0014 [ 59]: ae18700eda3b7964 -Block 0014 [ 60]: 8b997011c74aa16e -Block 0014 [ 61]: 4a552a9044f14799 -Block 0014 [ 62]: 9b5a9b4c5a5da0d0 -Block 0014 [ 63]: 3b8ee69a48ad75d5 -Block 0014 [ 64]: 87aec64397996f21 -Block 0014 [ 65]: 04eb7548c1fef388 -Block 0014 [ 66]: 6341ec25b8aa3747 -Block 0014 [ 67]: 35317eb9c4abfac9 -Block 0014 [ 68]: 45ea12041a15a084 -Block 0014 [ 69]: fda06c6db17ba115 -Block 0014 [ 70]: 7779d9b3b76283be -Block 0014 [ 71]: da844a2473775aac -Block 0014 [ 72]: 89f91c2c6564a50c -Block 0014 [ 73]: c8cd0aa7a3b1ddd7 -Block 0014 [ 74]: ff6abb5a4a485dad -Block 0014 [ 75]: d1ed559cae3e4b62 -Block 0014 [ 76]: 7b8437f83c6fc847 -Block 0014 [ 77]: 4e0be6962713d580 -Block 0014 [ 78]: 4443da814792ef38 -Block 0014 [ 79]: a93d0ea553d8a296 -Block 0014 [ 80]: a528a4bf080ac4c0 -Block 0014 [ 81]: 49dd9762b2f9aef2 -Block 0014 [ 82]: b2c920ce86a13d59 -Block 0014 [ 83]: 3dacedf3585ea447 -Block 0014 [ 84]: cbe8d2c6d0ad075a -Block 0014 [ 85]: a52b9f3aaa3b273c -Block 0014 [ 86]: ed2b0107316af4da -Block 0014 [ 87]: 5a10f265bb50b93d -Block 0014 [ 88]: 1417bf78895d5e7f -Block 0014 [ 89]: f5bcd9d996444e4d -Block 0014 [ 90]: 590307488b720fa3 -Block 0014 [ 91]: dea8e9d408b06dea -Block 0014 [ 92]: 872b059e9003b56b -Block 0014 [ 93]: 2ed43f98fd6f6254 -Block 0014 [ 94]: 93f57c98bd5b6cd7 -Block 0014 [ 95]: 9beeeb8e9207043f -Block 0014 [ 96]: dd54000038b5110d -Block 0014 [ 97]: 5332e79251d56378 -Block 0014 [ 98]: 5e48996dcaff378b -Block 0014 [ 99]: d56e7faf27afcffb -Block 0014 [100]: 90b6bed608144802 -Block 0014 [101]: 45cccf54d9317392 -Block 0014 [102]: 54ed8e4ac5dc2b76 -Block 0014 [103]: 885c812d8ff62a5f -Block 0014 [104]: bbcc2cb34eb38c9a -Block 0014 [105]: 9e9ebda71224a82f -Block 0014 [106]: 41b45afcdbc3c630 -Block 0014 [107]: 91d46218f582c264 -Block 0014 [108]: 0827c73740b561b5 -Block 0014 [109]: c4a54b4d6ec74a50 -Block 0014 [110]: 024ae95eaae719dc -Block 0014 [111]: 17117b346ffd2a35 -Block 0014 [112]: 39b7db4226a72f84 -Block 0014 [113]: 92886993615d1335 -Block 0014 [114]: 12b61372d0e851e0 -Block 0014 [115]: 8c4001f05b029c7c -Block 0014 [116]: 8a53cdb6444a882b -Block 0014 [117]: 3c685889fc62db28 -Block 0014 [118]: cfdc76e52e7c5f13 -Block 0014 [119]: f7f1a83420e11a14 -Block 0014 [120]: d5cb9b8ce8d28da4 -Block 0014 [121]: bed926b463fc5156 -Block 0014 [122]: a5f62e9940463b0a -Block 0014 [123]: a4089b6edc533caf -Block 0014 [124]: 097ac21fa0279d86 -Block 0014 [125]: 8c794c5f42e95e72 -Block 0014 [126]: d9d2a89c3ff25c4b -Block 0014 [127]: e012ba6c11d061f5 -Block 0015 [ 0]: fae64e566868810a -Block 0015 [ 1]: 8d81e940b129371d -Block 0015 [ 2]: 60106c5b4eb20b4c -Block 0015 [ 3]: 6e42f90ad23c62f6 -Block 0015 [ 4]: 131cc364e92de603 -Block 0015 [ 5]: de343b93a6d3549d -Block 0015 [ 6]: 1515a10f85cb86b3 -Block 0015 [ 7]: b57a75500f76cba3 -Block 0015 [ 8]: 75a2e082477a26e6 -Block 0015 [ 9]: 9a308ff19ea5aae9 -Block 0015 [ 10]: a8ad46a547e00b2f -Block 0015 [ 11]: 7275c3e38c70e7ff -Block 0015 [ 12]: 746ed2626d4cd88d -Block 0015 [ 13]: e922d7d439ec9044 -Block 0015 [ 14]: c0632b55bf466718 -Block 0015 [ 15]: ef8b572c9176d1f2 -Block 0015 [ 16]: f4492a45664b88f3 -Block 0015 [ 17]: 07527af74fabd39f -Block 0015 [ 18]: cb49229072c2db98 -Block 0015 [ 19]: 461026f699be3402 -Block 0015 [ 20]: b745dc7f8ebf58a0 -Block 0015 [ 21]: 194b7c920c12c491 -Block 0015 [ 22]: 1536ca06f172ea55 -Block 0015 [ 23]: 830173431c36eede -Block 0015 [ 24]: 463d0c62573022d6 -Block 0015 [ 25]: 62c887bed7ffa30b -Block 0015 [ 26]: ee75ec33cb8c4aa4 -Block 0015 [ 27]: 592d8ee4f8d69036 -Block 0015 [ 28]: b9a3ce12337d4c0f -Block 0015 [ 29]: 781e9fcad1891be8 -Block 0015 [ 30]: db46bad27e7e1dfe -Block 0015 [ 31]: 9028a7155a0860aa -Block 0015 [ 32]: a01a5ec2351afc02 -Block 0015 [ 33]: a09fb40edf104427 -Block 0015 [ 34]: 262fcbe6832677f2 -Block 0015 [ 35]: 5f52e7ce1df6560d -Block 0015 [ 36]: dc190299cc11093e -Block 0015 [ 37]: 34281d9238950010 -Block 0015 [ 38]: 225a27cf8bee7277 -Block 0015 [ 39]: 3429996a5c48f38d -Block 0015 [ 40]: c87e9a63ad2c0282 -Block 0015 [ 41]: 018b4e3e01fc9ecd -Block 0015 [ 42]: 392312f8091a3d85 -Block 0015 [ 43]: 7fd5794b59cd95fe -Block 0015 [ 44]: ef83133e4e2d939b -Block 0015 [ 45]: d0580c8013286eec -Block 0015 [ 46]: 5bbf1246d831f631 -Block 0015 [ 47]: 0054687cd3a0dec5 -Block 0015 [ 48]: 90ac0d297fa9aab7 -Block 0015 [ 49]: 51f36150003f7e04 -Block 0015 [ 50]: b9ef0b30c558aba6 -Block 0015 [ 51]: 460bc7e1538d62fd -Block 0015 [ 52]: 6d3e852ceeb68b69 -Block 0015 [ 53]: 568de03409ae5007 -Block 0015 [ 54]: c6ffdcfbeeaa12cb -Block 0015 [ 55]: 6a5e7db56071847c -Block 0015 [ 56]: d28c5793ae7d1d55 -Block 0015 [ 57]: 0267fd8e150f21be -Block 0015 [ 58]: 00bc5f653b17bf7b -Block 0015 [ 59]: 585da8b6ec306b61 -Block 0015 [ 60]: 1353061d1e353110 -Block 0015 [ 61]: 2fa207e0f1f0a407 -Block 0015 [ 62]: 7c977b733683ac75 -Block 0015 [ 63]: 241449dccd64fb26 -Block 0015 [ 64]: 338082d508dafcb0 -Block 0015 [ 65]: 3cd8e424bce5d327 -Block 0015 [ 66]: 31cce94299bf729a -Block 0015 [ 67]: f17f0248495e1a5b -Block 0015 [ 68]: 36e2da2618aa0127 -Block 0015 [ 69]: 38b639fb327e03b1 -Block 0015 [ 70]: a43510ced8f7dc89 -Block 0015 [ 71]: b3bfbbf1b59bbd75 -Block 0015 [ 72]: 75c1d4dff925a032 -Block 0015 [ 73]: 77c09a0b485faa19 -Block 0015 [ 74]: 8dd892fbb9ff328a -Block 0015 [ 75]: 017b4d0408cf7bbe -Block 0015 [ 76]: 51f3c7cba9a58139 -Block 0015 [ 77]: 049e4a5ccc4b17f9 -Block 0015 [ 78]: 19616ffc15a221e6 -Block 0015 [ 79]: 2ce8c0e5d2e7d1ab -Block 0015 [ 80]: 79c0d484fb10455e -Block 0015 [ 81]: a3fc63a5f8a9b9c0 -Block 0015 [ 82]: 9cfebe8a3d549467 -Block 0015 [ 83]: 09c06fe1b4c3a7c7 -Block 0015 [ 84]: 8607f6041ada778b -Block 0015 [ 85]: fae4e290100273e7 -Block 0015 [ 86]: fdd1e469396a400b -Block 0015 [ 87]: 4cd57f460af7a766 -Block 0015 [ 88]: 23321695a8adaf2e -Block 0015 [ 89]: fdfa218394a41fc8 -Block 0015 [ 90]: 9db89b71db54b466 -Block 0015 [ 91]: b405819d71bee318 -Block 0015 [ 92]: f7696c155cbb0ba0 -Block 0015 [ 93]: b5bee158592d57e7 -Block 0015 [ 94]: 618aa1003551b462 -Block 0015 [ 95]: b61d64015dc2a730 -Block 0015 [ 96]: 5b4387973c664b83 -Block 0015 [ 97]: c2fa9ee8ac6b02f9 -Block 0015 [ 98]: e3221b93bea4bf64 -Block 0015 [ 99]: 6dee17d482d317fd -Block 0015 [100]: 1130d6a3d3173623 -Block 0015 [101]: c9b57db857fdc466 -Block 0015 [102]: 9318a307bd7dd5df -Block 0015 [103]: f3efea82eb010ea7 -Block 0015 [104]: 835aa1bb7f95a2a6 -Block 0015 [105]: 97788be80f52b675 -Block 0015 [106]: 064691f59ec2de3d -Block 0015 [107]: 4aad4ab8889ac979 -Block 0015 [108]: 9f77af86a93272be -Block 0015 [109]: 57e46db473688315 -Block 0015 [110]: 9f45f229a6d63e5e -Block 0015 [111]: 37858db05cfa4789 -Block 0015 [112]: abe16cff88d854a9 -Block 0015 [113]: 85fef1d6f322d26c -Block 0015 [114]: 85558f7f6c6bf35d -Block 0015 [115]: 54be5379ce62b83b -Block 0015 [116]: f0427f7a71563307 -Block 0015 [117]: 695bd133f77e11a2 -Block 0015 [118]: 9efe3ed4696fdc1e -Block 0015 [119]: 703c4220f9092896 -Block 0015 [120]: ee71111a428823a2 -Block 0015 [121]: 2bdf0bc45eec47de -Block 0015 [122]: 50f379acec7ee7b8 -Block 0015 [123]: 6a7ce42b0a5ebc49 -Block 0015 [124]: 974e974bd88474c1 -Block 0015 [125]: d861a0a5c5c10163 -Block 0015 [126]: 73bdaf6e50134eb1 -Block 0015 [127]: acf7664666733c67 -Block 0016 [ 0]: 50ab0f9bfac24f78 -Block 0016 [ 1]: 76e94cfff68ea616 -Block 0016 [ 2]: c00150a5b14757e7 -Block 0016 [ 3]: 4d19657ab2083347 -Block 0016 [ 4]: 017ccdbd18f7aa76 -Block 0016 [ 5]: c8627a4acfcf9382 -Block 0016 [ 6]: 635afa6f665f6306 -Block 0016 [ 7]: 82a8a745b4d6d8ae -Block 0016 [ 8]: 4582bba135f3b4a1 -Block 0016 [ 9]: 526f1a88af7428bd -Block 0016 [ 10]: 9494aa25932ca80f -Block 0016 [ 11]: 90887f9ad9692795 -Block 0016 [ 12]: 967c01323dd819cc -Block 0016 [ 13]: b15b74896960da9a -Block 0016 [ 14]: b25030a5374f74da -Block 0016 [ 15]: e3383256ba6017ff -Block 0016 [ 16]: d999eb0ee0664b0c -Block 0016 [ 17]: f641eb0285a3c506 -Block 0016 [ 18]: 1b3bbbabcdb8314a -Block 0016 [ 19]: bb0fefad44cf0cac -Block 0016 [ 20]: e8e80497833606fc -Block 0016 [ 21]: dd7d61d1f3e68772 -Block 0016 [ 22]: 7ef78dd8add877e7 -Block 0016 [ 23]: 92a015aad5502ec8 -Block 0016 [ 24]: 4d31d23941318dd6 -Block 0016 [ 25]: e2559bbb689e5fb4 -Block 0016 [ 26]: e2503c10c55eaf2a -Block 0016 [ 27]: f903e0f1ac637eb5 -Block 0016 [ 28]: 5fa77cf36d36fc99 -Block 0016 [ 29]: b49c467b28d24b67 -Block 0016 [ 30]: c71141752046355f -Block 0016 [ 31]: 4f02b25bf2fbd626 -Block 0016 [ 32]: 266976c4945f8a20 -Block 0016 [ 33]: 4dff49abef037976 -Block 0016 [ 34]: 1db92cf72045c0ce -Block 0016 [ 35]: 646d8c11e8cc7da8 -Block 0016 [ 36]: d69609eed1e112eb -Block 0016 [ 37]: f71f70d33e21865e -Block 0016 [ 38]: 99723999d0b88330 -Block 0016 [ 39]: 602c4d8d6bc8f7d5 -Block 0016 [ 40]: 0675d32998c77081 -Block 0016 [ 41]: 74ec88c7c20a9ce9 -Block 0016 [ 42]: 2d6be9f55b35e386 -Block 0016 [ 43]: c5dceca8c3e9aa0e -Block 0016 [ 44]: ef7c553de2ac1b6e -Block 0016 [ 45]: ed1d4f23e7a0ec44 -Block 0016 [ 46]: ecaa70a863786230 -Block 0016 [ 47]: 6c00fb7c75083cba -Block 0016 [ 48]: 358ab6100cfadb0e -Block 0016 [ 49]: d355f128ad812a42 -Block 0016 [ 50]: 6e5ff1b32f8cd116 -Block 0016 [ 51]: b652b670ced34b15 -Block 0016 [ 52]: 869f55f7d310d958 -Block 0016 [ 53]: 1c7ab17e1b2a923c -Block 0016 [ 54]: 9bb5d4bcc6c5fb44 -Block 0016 [ 55]: abdd670dcbc1ab98 -Block 0016 [ 56]: 13f1ea2cd9968cf2 -Block 0016 [ 57]: 4468b4a8063832f4 -Block 0016 [ 58]: 5cd65db1b412d694 -Block 0016 [ 59]: 15ccb512736cd4f8 -Block 0016 [ 60]: ba3e10fd0ca3138b -Block 0016 [ 61]: da3c85d02e8eb749 -Block 0016 [ 62]: de0b8e8e36f82366 -Block 0016 [ 63]: 0842ec8f33175a3c -Block 0016 [ 64]: 2a1bc0208d7d4a97 -Block 0016 [ 65]: 16530cb323ff1d7d -Block 0016 [ 66]: 1f0966930be20b84 -Block 0016 [ 67]: bb9512a98ef21706 -Block 0016 [ 68]: bdd948ccde317cd6 -Block 0016 [ 69]: 7fa5e561bc345638 -Block 0016 [ 70]: 6fc7243a84e185dc -Block 0016 [ 71]: dfad6179cb99a475 -Block 0016 [ 72]: 9e61c0bb96277f9b -Block 0016 [ 73]: e6b08e6cad02b1cd -Block 0016 [ 74]: 78ac4aeb2e48dc4b -Block 0016 [ 75]: 6abc9082cae40c99 -Block 0016 [ 76]: 51a1fdb5e4afbb95 -Block 0016 [ 77]: 55740e7c226f47ba -Block 0016 [ 78]: d38187c139231aa1 -Block 0016 [ 79]: 9f8284a871165782 -Block 0016 [ 80]: 9e825895c153205a -Block 0016 [ 81]: 7e4c90935b6ffe4e -Block 0016 [ 82]: a357f20371f2a364 -Block 0016 [ 83]: 318e03f3f2513efb -Block 0016 [ 84]: 1c42a251389bd43a -Block 0016 [ 85]: 8564c0d088201c30 -Block 0016 [ 86]: 7fca97b124234e78 -Block 0016 [ 87]: b00bd077743cda70 -Block 0016 [ 88]: b055fd596a99aca0 -Block 0016 [ 89]: 34771a1332ffd9b4 -Block 0016 [ 90]: 78064a51b2f57bb7 -Block 0016 [ 91]: b6978318f72a3ccc -Block 0016 [ 92]: 3d3f08940ddfa044 -Block 0016 [ 93]: 87c148a2bcc7728f -Block 0016 [ 94]: e4cd764d8ab0deb1 -Block 0016 [ 95]: 549d8816dc2c1d5b -Block 0016 [ 96]: 0247cc6a27c0578c -Block 0016 [ 97]: 571f950746e01e76 -Block 0016 [ 98]: 900bf2c386989787 -Block 0016 [ 99]: 9e4c53d37c530595 -Block 0016 [100]: bb6db1a208af1e6a -Block 0016 [101]: b6cac57f894b24b7 -Block 0016 [102]: d16d7ef19e90d4bd -Block 0016 [103]: c8d8ef59dbe1a8c2 -Block 0016 [104]: c1f551eebbf00b0d -Block 0016 [105]: fe625b5dfd27d1f1 -Block 0016 [106]: d4aca3870d30cfa4 -Block 0016 [107]: 53b585bf2b9a34eb -Block 0016 [108]: e554344eab7dec31 -Block 0016 [109]: 8ca4ee2b6de70004 -Block 0016 [110]: 8612d6c8a635b35e -Block 0016 [111]: 494263004ad7e202 -Block 0016 [112]: 5e80b92e4d0d81e2 -Block 0016 [113]: c189db989da4db9a -Block 0016 [114]: 9fadfa6afccbbe8a -Block 0016 [115]: 6b69af4f59accb96 -Block 0016 [116]: 315bf00062219e81 -Block 0016 [117]: 471cc1fd1305a04a -Block 0016 [118]: 753f539eb4dd0e81 -Block 0016 [119]: 8927ac6207b8482a -Block 0016 [120]: 7f8216083c95518f -Block 0016 [121]: 8d5a275aabb839f2 -Block 0016 [122]: 53cdeeb793a608e9 -Block 0016 [123]: 1fb14ce52c620b71 -Block 0016 [124]: c37c9e2533a5c59e -Block 0016 [125]: 563255fb5ee7c5f7 -Block 0016 [126]: 46b2bc381f2d0cdb -Block 0016 [127]: 022b6a3f91aa7fe6 -Block 0017 [ 0]: f148c6ecfacf9073 -Block 0017 [ 1]: 4c2e5320c6a82272 -Block 0017 [ 2]: c85fa2b8cc946410 -Block 0017 [ 3]: 8641a7078f51c3bb -Block 0017 [ 4]: 1a1a5660deb38c86 -Block 0017 [ 5]: 9f9021e30fef3113 -Block 0017 [ 6]: 162b92533a701e91 -Block 0017 [ 7]: 1ff3c3be2ca424fc -Block 0017 [ 8]: 9863521a2fcc57d3 -Block 0017 [ 9]: 48a8854bcaf7a038 -Block 0017 [ 10]: 146063d72bc22e43 -Block 0017 [ 11]: 24df9b1f4ea286a8 -Block 0017 [ 12]: 2790a76d3c1763b7 -Block 0017 [ 13]: 1bc7152d8e234249 -Block 0017 [ 14]: d8e02822fd457154 -Block 0017 [ 15]: 70ceee9275bfacb2 -Block 0017 [ 16]: 9d3772a593d4dbcd -Block 0017 [ 17]: 422e9bfe5dc92050 -Block 0017 [ 18]: 60e0d65beab7c333 -Block 0017 [ 19]: 236ec0961a3ec888 -Block 0017 [ 20]: 370f39ef4114dc14 -Block 0017 [ 21]: d84485b6ed907549 -Block 0017 [ 22]: d84b2719fdea3830 -Block 0017 [ 23]: afabab6a0aef3b37 -Block 0017 [ 24]: b20c3789e2428092 -Block 0017 [ 25]: fe219a3fccb3f109 -Block 0017 [ 26]: 49a2b15d29d94d35 -Block 0017 [ 27]: a8a33c545ca0a806 -Block 0017 [ 28]: 87ee050651ec250c -Block 0017 [ 29]: cf2d7d720281726d -Block 0017 [ 30]: 39c95dd1a0cc479e -Block 0017 [ 31]: bf7ba9a85a58dfeb -Block 0017 [ 32]: 8a58d87bc1d64e80 -Block 0017 [ 33]: 1c1e5872a341c842 -Block 0017 [ 34]: f6ed8ebe2c5fb8f7 -Block 0017 [ 35]: 204e8c80cb442cf6 -Block 0017 [ 36]: 439feed11ebdc53d -Block 0017 [ 37]: f2a15c2e5e9203f9 -Block 0017 [ 38]: fdb84ef6548b0d53 -Block 0017 [ 39]: 27eabee46992a24b -Block 0017 [ 40]: 3d85395558467bef -Block 0017 [ 41]: ee324a06a5df5c58 -Block 0017 [ 42]: a22120d5f734e984 -Block 0017 [ 43]: 2bc5053e90ba8225 -Block 0017 [ 44]: e09f8948fbf44b20 -Block 0017 [ 45]: 896d207c32bd6b2d -Block 0017 [ 46]: 7bfa2e74b6011818 -Block 0017 [ 47]: 0889d124b7c363aa -Block 0017 [ 48]: b8ce5f77da6250aa -Block 0017 [ 49]: 7411129130218a47 -Block 0017 [ 50]: 37bdb739c55b5dd0 -Block 0017 [ 51]: 539e3e5695d9132e -Block 0017 [ 52]: d45f10156352999a -Block 0017 [ 53]: 3589cd477c5dec79 -Block 0017 [ 54]: 0ed10a28987665fc -Block 0017 [ 55]: 8eb3aaf7cb073a56 -Block 0017 [ 56]: f025d1b5eff402b3 -Block 0017 [ 57]: 6f5327448591fb37 -Block 0017 [ 58]: f530dcea50113637 -Block 0017 [ 59]: 75d2d8f0b0697456 -Block 0017 [ 60]: 8bd10f66b3aebaca -Block 0017 [ 61]: 6f93760f7113d397 -Block 0017 [ 62]: 42e8504c969a9ca3 -Block 0017 [ 63]: d122bf99d1f2738a -Block 0017 [ 64]: 050f1ef18fe956dd -Block 0017 [ 65]: 7f9a0b2a550f4886 -Block 0017 [ 66]: c211410f6f6346b7 -Block 0017 [ 67]: d21fac80ef0580f7 -Block 0017 [ 68]: 313089c250c94891 -Block 0017 [ 69]: 5b8c12ab6f45d396 -Block 0017 [ 70]: 0cc757071306a08c -Block 0017 [ 71]: 0cd18b8157d80d65 -Block 0017 [ 72]: 5378531ce24a9fe0 -Block 0017 [ 73]: 619ac127f25314b8 -Block 0017 [ 74]: 289666e9273cd9cf -Block 0017 [ 75]: 9d683046f40fd118 -Block 0017 [ 76]: 48056be7488a4d3b -Block 0017 [ 77]: 4cee9208e330d9da -Block 0017 [ 78]: 531b8009a08f8667 -Block 0017 [ 79]: bd5736dfe9c65709 -Block 0017 [ 80]: e9386f17671521bc -Block 0017 [ 81]: 640ff74bd3f62e82 -Block 0017 [ 82]: 2d298c4e677a4ae6 -Block 0017 [ 83]: 1b8df78a8d84216f -Block 0017 [ 84]: 9933fca3997cf107 -Block 0017 [ 85]: 08e19896c2ef82b5 -Block 0017 [ 86]: f55bae80ac972a6c -Block 0017 [ 87]: ebc1fdd921f50518 -Block 0017 [ 88]: c526c7fff85c0cd6 -Block 0017 [ 89]: 958988f409748aa8 -Block 0017 [ 90]: 9f53bfc38a3f99f8 -Block 0017 [ 91]: 30cb279e1a4180b0 -Block 0017 [ 92]: 68cbb795935906b6 -Block 0017 [ 93]: bbe023cd06ba4bec -Block 0017 [ 94]: ba0b431efd7f641d -Block 0017 [ 95]: 7f830d88ec16d7c7 -Block 0017 [ 96]: f51bc5bb8e0f60f3 -Block 0017 [ 97]: 6a090a16ea0664a5 -Block 0017 [ 98]: b60a6b89b78d5a41 -Block 0017 [ 99]: 3ee08774310d4b7f -Block 0017 [100]: 8cf3a2caa05293ee -Block 0017 [101]: 029abaacc0f9e5ec -Block 0017 [102]: aa5b96c1138bc2fb -Block 0017 [103]: 33f5ffa151ca2c41 -Block 0017 [104]: 723b07282d65a43a -Block 0017 [105]: 05d3f744eb0afc52 -Block 0017 [106]: 04d5d592022801dd -Block 0017 [107]: 3a85abb4dae37695 -Block 0017 [108]: 64930e7129ed9f6f -Block 0017 [109]: 569521d11e337955 -Block 0017 [110]: 0019d5e39e6101db -Block 0017 [111]: 7bb63a5d60fe40b7 -Block 0017 [112]: 086e09b78786e706 -Block 0017 [113]: a82a6aaa0d0e37c5 -Block 0017 [114]: d202447290bdfa0e -Block 0017 [115]: 50f4ac3092a59fe8 -Block 0017 [116]: 607d6f205e9684f8 -Block 0017 [117]: 2f0fcf52aa5c84fe -Block 0017 [118]: 71497f707f6c2992 -Block 0017 [119]: 6488988f6a29f694 -Block 0017 [120]: 9b1841ebe4358b52 -Block 0017 [121]: de02ad91f6ff73e7 -Block 0017 [122]: da7a221d3a007196 -Block 0017 [123]: e15636f251d68894 -Block 0017 [124]: c737efef4be1c6cd -Block 0017 [125]: bec2c5eb4b1f4b1f -Block 0017 [126]: 1bff0563b0dbfffb -Block 0017 [127]: e09006a90e6ead01 -Block 0018 [ 0]: faa545eff119cfb9 -Block 0018 [ 1]: 95d936643121d1da -Block 0018 [ 2]: ae713aa879b76334 -Block 0018 [ 3]: 2db08b3dc9fdb7be -Block 0018 [ 4]: 63485723e7e088b1 -Block 0018 [ 5]: a8b1ff1d0d8ad0fc -Block 0018 [ 6]: 157c01d987bcf4f6 -Block 0018 [ 7]: e9d5737671f2fc98 -Block 0018 [ 8]: 08931d6bba1ec789 -Block 0018 [ 9]: ecd9633e941073ea -Block 0018 [ 10]: 27850a0730f28ddf -Block 0018 [ 11]: df919fb65835d9d0 -Block 0018 [ 12]: be70c1c2f80a744f -Block 0018 [ 13]: 5f42037e0810283e -Block 0018 [ 14]: 1fa0a087aca0d0f5 -Block 0018 [ 15]: 88850bd42d42433c -Block 0018 [ 16]: 4c351ab8ac31727b -Block 0018 [ 17]: 032e362e9961c2c0 -Block 0018 [ 18]: a46fd3113d1903f0 -Block 0018 [ 19]: 76df2ea4d4fc4cd3 -Block 0018 [ 20]: 6360aef426b20c5f -Block 0018 [ 21]: c6c75e30d3125b04 -Block 0018 [ 22]: 2b4604dcc9fa89f0 -Block 0018 [ 23]: 71809018e3f08fd1 -Block 0018 [ 24]: eae38831b0434502 -Block 0018 [ 25]: 12354e8863578f73 -Block 0018 [ 26]: cc67649ed524fcda -Block 0018 [ 27]: f3fa35e89b0a0628 -Block 0018 [ 28]: dd4b39ce157c3917 -Block 0018 [ 29]: 79b3eac67611c5b3 -Block 0018 [ 30]: 18d646a35047896f -Block 0018 [ 31]: 7ad67c7909c4214a -Block 0018 [ 32]: 0f85a71cea5458fb -Block 0018 [ 33]: 5a496c5b9a42a99e -Block 0018 [ 34]: f41955d00a6cb89b -Block 0018 [ 35]: 6979ed134db972e2 -Block 0018 [ 36]: c52bc00afcba0bd5 -Block 0018 [ 37]: 0b593fa777b11fdc -Block 0018 [ 38]: ec522ff3dbdc5727 -Block 0018 [ 39]: 5d3c6969d329ff41 -Block 0018 [ 40]: 9c3eee30b62c351c -Block 0018 [ 41]: a5e4421accee4716 -Block 0018 [ 42]: 2dd1bbb8a07019c1 -Block 0018 [ 43]: be3f1ebb698a80fa -Block 0018 [ 44]: 25f84725c715ba2b -Block 0018 [ 45]: de0fa263fc4ef327 -Block 0018 [ 46]: 3309df9d4cab5b46 -Block 0018 [ 47]: 191d6e408413ccc2 -Block 0018 [ 48]: 4ffa07c911bd50b1 -Block 0018 [ 49]: 51513298dcb7e64f -Block 0018 [ 50]: bd61e5ebbb03d888 -Block 0018 [ 51]: 113fd47c82d2bfbc -Block 0018 [ 52]: 7ebc5acf30a5427b -Block 0018 [ 53]: 401178ea14ff6343 -Block 0018 [ 54]: 3dd4c60b0f20b1a0 -Block 0018 [ 55]: 24bec1bc4a96ebeb -Block 0018 [ 56]: dd6f9948397d00f7 -Block 0018 [ 57]: 6e7d7f79b6f68812 -Block 0018 [ 58]: 1ee287e74910a6fc -Block 0018 [ 59]: 32af1d9c9b8b5759 -Block 0018 [ 60]: f55d837645ddc363 -Block 0018 [ 61]: ee8fcf0ba4de85e4 -Block 0018 [ 62]: 0389e54df125e829 -Block 0018 [ 63]: 7b3147558a74ae2b -Block 0018 [ 64]: b3e867428af1fef8 -Block 0018 [ 65]: 3335faa99d817c04 -Block 0018 [ 66]: 9c451ddf0a477fc3 -Block 0018 [ 67]: 248deb6f91ea029a -Block 0018 [ 68]: 9505f628226f2289 -Block 0018 [ 69]: f2bc362d1106f544 -Block 0018 [ 70]: 19a8d07be37f7f36 -Block 0018 [ 71]: c8a3e7b320ee2940 -Block 0018 [ 72]: 20ad585907ffe654 -Block 0018 [ 73]: e5035ad9e307c077 -Block 0018 [ 74]: dbbb5bb28adecaa3 -Block 0018 [ 75]: e036b59cd6ebbca7 -Block 0018 [ 76]: dbf0ead323d11f90 -Block 0018 [ 77]: 32f54a06d8aed030 -Block 0018 [ 78]: 3130833bfebc3fa1 -Block 0018 [ 79]: 3afd1ffe68ed72be -Block 0018 [ 80]: 7ee64d0db46abd24 -Block 0018 [ 81]: 1aebcb1924869cd3 -Block 0018 [ 82]: ede2f00caa0a1709 -Block 0018 [ 83]: c20e575ac91f9e57 -Block 0018 [ 84]: 9895a20bc7b8ceb6 -Block 0018 [ 85]: a4568ccf1f27ca68 -Block 0018 [ 86]: 38e5616cefcb46dc -Block 0018 [ 87]: c8b38ec003578587 -Block 0018 [ 88]: 1558b927e2b931ff -Block 0018 [ 89]: 5f1573189ec111a8 -Block 0018 [ 90]: 744851f93a97bfea -Block 0018 [ 91]: f43418a1064d0e4b -Block 0018 [ 92]: 8f5a287077430279 -Block 0018 [ 93]: d57f9b51bb604f0e -Block 0018 [ 94]: fb3569fb2c75a1db -Block 0018 [ 95]: 698fe004d6cfbb9e -Block 0018 [ 96]: 3d16340d04a7867e -Block 0018 [ 97]: 4f12b922e3535727 -Block 0018 [ 98]: e322253e8d863075 -Block 0018 [ 99]: 70a9f11b9df32318 -Block 0018 [100]: 7b18fa5540acc374 -Block 0018 [101]: dcc69cc272dc099c -Block 0018 [102]: 79dddaee86527df3 -Block 0018 [103]: 71bde3173831260e -Block 0018 [104]: 553a53f6947f6ac8 -Block 0018 [105]: 385427965d6dd5c4 -Block 0018 [106]: 27c9cf044489d353 -Block 0018 [107]: 6c531adefac2ea14 -Block 0018 [108]: f484b2f5da906611 -Block 0018 [109]: 653af921e8b2dbd6 -Block 0018 [110]: 0613e26bb5977c9c -Block 0018 [111]: 2739f8817b25d1c2 -Block 0018 [112]: a561daf1a53fca8c -Block 0018 [113]: 0222fce2fd94825d -Block 0018 [114]: ff6fc60ed882c744 -Block 0018 [115]: 128a12162a13f8ba -Block 0018 [116]: b6ee7893fe13a3a2 -Block 0018 [117]: eca30b64cd3fe660 -Block 0018 [118]: d1e97f13d096b037 -Block 0018 [119]: 24010b30f6f9e86e -Block 0018 [120]: 3ec7a219f8ad7f02 -Block 0018 [121]: 921f39d9d108de43 -Block 0018 [122]: 99d4628829193a58 -Block 0018 [123]: 64edb398a333656d -Block 0018 [124]: eddc6a51f7ace163 -Block 0018 [125]: 64929280d38ce455 -Block 0018 [126]: 03510f854d5915aa -Block 0018 [127]: ee55ebedae2bcfee -Block 0019 [ 0]: 51156b1e59b20401 -Block 0019 [ 1]: a0cfc6bae59d1b2e -Block 0019 [ 2]: 74b5c25d0f7ab4b5 -Block 0019 [ 3]: 1c914ed0a727b1d0 -Block 0019 [ 4]: 72c91b18095608c3 -Block 0019 [ 5]: 715a5de0af7d9766 -Block 0019 [ 6]: 09d3d606f47b011d -Block 0019 [ 7]: 16c20f8f77c792fe -Block 0019 [ 8]: b3273069a0e10f98 -Block 0019 [ 9]: da691a5910c208e2 -Block 0019 [ 10]: cbf00e60d6a3de8d -Block 0019 [ 11]: 6278b92100223543 -Block 0019 [ 12]: 8d914b69ccc4fddb -Block 0019 [ 13]: 8d7764485ef210c7 -Block 0019 [ 14]: 38825b734f595024 -Block 0019 [ 15]: e3156907a6e20477 -Block 0019 [ 16]: 513e73ce59181e8b -Block 0019 [ 17]: 9a07ef1bb6ba4098 -Block 0019 [ 18]: 814cc7d9baa18105 -Block 0019 [ 19]: 930ff0e7542c339b -Block 0019 [ 20]: 13b4c760a11bd633 -Block 0019 [ 21]: 271e942aa0d31858 -Block 0019 [ 22]: b78d78f9b71e233a -Block 0019 [ 23]: 150cda71b9d5693b -Block 0019 [ 24]: bdf8115d41b0a85b -Block 0019 [ 25]: 3c3135d676d3c5f3 -Block 0019 [ 26]: 63a686736848d856 -Block 0019 [ 27]: ae8e8caf724b1a86 -Block 0019 [ 28]: 62b0cef1adc0882c -Block 0019 [ 29]: bd890c5b29317812 -Block 0019 [ 30]: 6ae86cf1fbf29ecc -Block 0019 [ 31]: 2363bbb76324e527 -Block 0019 [ 32]: e2155105647d2c32 -Block 0019 [ 33]: d751ac49af5305b6 -Block 0019 [ 34]: 87cd90883e5f4e4a -Block 0019 [ 35]: 1ea924e56f888b93 -Block 0019 [ 36]: c51aa77e288a938a -Block 0019 [ 37]: 08b4a2c85b40d94e -Block 0019 [ 38]: d6aa32c1ef08d3c2 -Block 0019 [ 39]: 77c3660ec5353f19 -Block 0019 [ 40]: 07c9e33daeb74568 -Block 0019 [ 41]: 9bd8f6448761708a -Block 0019 [ 42]: eb874940d021d769 -Block 0019 [ 43]: 6151f0ede0583917 -Block 0019 [ 44]: fcbb88e020140621 -Block 0019 [ 45]: 0e532e3d4bc81dc0 -Block 0019 [ 46]: 2da87c43744e95e4 -Block 0019 [ 47]: a65ccd771e8f10a1 -Block 0019 [ 48]: cd3fe32ccd77935b -Block 0019 [ 49]: 37aa26376d20f6ae -Block 0019 [ 50]: 1bf80fbff942c050 -Block 0019 [ 51]: 76b51d1eb128cbe5 -Block 0019 [ 52]: 8788a0ccf97411ae -Block 0019 [ 53]: 0628b1237ec140b3 -Block 0019 [ 54]: b2147e4a8c83871e -Block 0019 [ 55]: 181d78bd66418200 -Block 0019 [ 56]: 431ff7c40ae96867 -Block 0019 [ 57]: 88548a84877077df -Block 0019 [ 58]: 378d340893c16a54 -Block 0019 [ 59]: 2151705d33bf835a -Block 0019 [ 60]: fc79c670c5413994 -Block 0019 [ 61]: 16c5bd79dbfa8967 -Block 0019 [ 62]: da634c6f7a83f03a -Block 0019 [ 63]: b420552b64b33783 -Block 0019 [ 64]: 06ac23a0f3b74e58 -Block 0019 [ 65]: a7327fee9ac0294f -Block 0019 [ 66]: f191e1ad2217703a -Block 0019 [ 67]: e53781ab62f0818c -Block 0019 [ 68]: f72f0cd8463f8228 -Block 0019 [ 69]: ccf24473c682f82b -Block 0019 [ 70]: 4cf42b53bec904cc -Block 0019 [ 71]: ed68232d9606760e -Block 0019 [ 72]: 4ee6da37428d239c -Block 0019 [ 73]: eb519e362a49f472 -Block 0019 [ 74]: 1cb3b7e393614967 -Block 0019 [ 75]: 7498007ec5defa40 -Block 0019 [ 76]: eb29564f5a80ce82 -Block 0019 [ 77]: ab56822a376bec75 -Block 0019 [ 78]: e646e9ced0205651 -Block 0019 [ 79]: cb56383cab821219 -Block 0019 [ 80]: d983a7932f436ca4 -Block 0019 [ 81]: 5a4dc7700cfe9515 -Block 0019 [ 82]: ec041f5ca30771db -Block 0019 [ 83]: 79d89b4394c9f93f -Block 0019 [ 84]: df61390b9e6f09bb -Block 0019 [ 85]: ead82beea5c58374 -Block 0019 [ 86]: 420ec98edea624fb -Block 0019 [ 87]: 82c6ba1d1d626c10 -Block 0019 [ 88]: 5d9505914adf649b -Block 0019 [ 89]: 8772eb7b04f29a02 -Block 0019 [ 90]: 8877a6e531032495 -Block 0019 [ 91]: b959c48e2c45a09f -Block 0019 [ 92]: 98bade59b92f14df -Block 0019 [ 93]: d80e8b763aa82afe -Block 0019 [ 94]: 90a62a4170b0afd9 -Block 0019 [ 95]: 4b6592da812760c2 -Block 0019 [ 96]: a121ecfb71c1eb1c -Block 0019 [ 97]: db1a767dcea7a999 -Block 0019 [ 98]: e5da01ee35c87e2e -Block 0019 [ 99]: 94ef21581c109698 -Block 0019 [100]: 870d7a1b74517e73 -Block 0019 [101]: 21193745713987d4 -Block 0019 [102]: 9a1e85064a182266 -Block 0019 [103]: 1f9124bb0d2cb4d2 -Block 0019 [104]: ff6902372d42a1a3 -Block 0019 [105]: c98b73edf2c207c7 -Block 0019 [106]: b0f6926ce2b9ce80 -Block 0019 [107]: 0e908f07eafb7898 -Block 0019 [108]: 8cbc193b329811d2 -Block 0019 [109]: d664f2d6272d3043 -Block 0019 [110]: 9c8450d1be037ef3 -Block 0019 [111]: cda6a04729fee455 -Block 0019 [112]: 1b96fd0c0e48ee86 -Block 0019 [113]: 4edfd43166ff8978 -Block 0019 [114]: 69d814cf195ff166 -Block 0019 [115]: 93656f22239260af -Block 0019 [116]: 6bbcaeff4a7a65a5 -Block 0019 [117]: 597cfeb021b3a839 -Block 0019 [118]: 07630947c089ea53 -Block 0019 [119]: 54544623c47a5e06 -Block 0019 [120]: f7acde6ac2995642 -Block 0019 [121]: 9d72c9bd012683a5 -Block 0019 [122]: 9c79f0e0bcaa18dc -Block 0019 [123]: 7cabc98e881b8fd5 -Block 0019 [124]: ac3a9a98ad95aae3 -Block 0019 [125]: 229a698070456d46 -Block 0019 [126]: f32db81398e49b5c -Block 0019 [127]: 83ab49dd8530b868 -Block 0020 [ 0]: e85992534b52b52e -Block 0020 [ 1]: f61354ae69bf8266 -Block 0020 [ 2]: 2189370fe268fc96 -Block 0020 [ 3]: 3ac2683aeb082adc -Block 0020 [ 4]: 6675872a5f886c76 -Block 0020 [ 5]: 594cc7787962d384 -Block 0020 [ 6]: 22d19fcad3648a3b -Block 0020 [ 7]: 7cbc8c3dec075825 -Block 0020 [ 8]: ee9f47c460c21add -Block 0020 [ 9]: 3641c274622ad42a -Block 0020 [ 10]: d51e286ed408b52f -Block 0020 [ 11]: b6e079c56147eb83 -Block 0020 [ 12]: f1c571e5c2dd437a -Block 0020 [ 13]: 170fcb05bed6e518 -Block 0020 [ 14]: 993c03f74b4f2f0e -Block 0020 [ 15]: 61cf7ac5747d9e17 -Block 0020 [ 16]: 2a8f513411963e3b -Block 0020 [ 17]: 4210c7f3dca178ef -Block 0020 [ 18]: 685c12a359327905 -Block 0020 [ 19]: cbd3fe04536f559f -Block 0020 [ 20]: 48ca877575d6674e -Block 0020 [ 21]: 271824743d2baff8 -Block 0020 [ 22]: ddf15d645723b79b -Block 0020 [ 23]: 71ec825ec5920c7c -Block 0020 [ 24]: c41f5cac7e0cf7ca -Block 0020 [ 25]: 7239a2d67055bcd1 -Block 0020 [ 26]: d773129866bcca99 -Block 0020 [ 27]: 567e5380bf4023b6 -Block 0020 [ 28]: 2265061bedd0f5e2 -Block 0020 [ 29]: ae15b953f2f6075c -Block 0020 [ 30]: 3197600cca3ecc16 -Block 0020 [ 31]: 52331e2bdf3d7f35 -Block 0020 [ 32]: cc661f4d0d802264 -Block 0020 [ 33]: 4abb5d426a4c05bb -Block 0020 [ 34]: 4b4ab952f30f21d8 -Block 0020 [ 35]: e47bf862aabe3e43 -Block 0020 [ 36]: a56438e599749cff -Block 0020 [ 37]: 7e88f730db0f5a51 -Block 0020 [ 38]: 02bd9a4ecd19dca1 -Block 0020 [ 39]: 789f62a6a44aa6a0 -Block 0020 [ 40]: 608cfe89b7c64305 -Block 0020 [ 41]: 9b0a9e3421114bf1 -Block 0020 [ 42]: 550d3f8d2bd63adc -Block 0020 [ 43]: 8733fcf078850b5d -Block 0020 [ 44]: 9866076a077c6fb5 -Block 0020 [ 45]: 6fb0147fa3e62c27 -Block 0020 [ 46]: a99f21e68aee3e65 -Block 0020 [ 47]: 589f8ff0158d1a23 -Block 0020 [ 48]: 31bcc76a59d047c9 -Block 0020 [ 49]: 9acdc9ab75f3a2d5 -Block 0020 [ 50]: 6868dfabd0fcf609 -Block 0020 [ 51]: e8aeaa973386a2ae -Block 0020 [ 52]: b0d60c3ddd71dc28 -Block 0020 [ 53]: d3d1cd9f303d3566 -Block 0020 [ 54]: 135d83379d63f3d8 -Block 0020 [ 55]: 265efc06899b4ed7 -Block 0020 [ 56]: c3895da03fa54b01 -Block 0020 [ 57]: bc0827502c9f333d -Block 0020 [ 58]: 335cf97881ed15af -Block 0020 [ 59]: 6b2bf00fb0fddd51 -Block 0020 [ 60]: 79fc0cf1f58be11c -Block 0020 [ 61]: 475e5b6f80b01e2b -Block 0020 [ 62]: 5f75c519a34aabc6 -Block 0020 [ 63]: 78c40a13e5360eac -Block 0020 [ 64]: d5baae967881b47f -Block 0020 [ 65]: f5f084c072b3cb4d -Block 0020 [ 66]: a68f891b7c71f817 -Block 0020 [ 67]: 562984e5d6215c7c -Block 0020 [ 68]: 6d7bd3c4f1a4ca8b -Block 0020 [ 69]: 5e730c9b9dc46542 -Block 0020 [ 70]: a4960b310ef10938 -Block 0020 [ 71]: 63764644a4183792 -Block 0020 [ 72]: 10822c35fef06151 -Block 0020 [ 73]: e5405919f5c8c53b -Block 0020 [ 74]: 58bb97e26251352b -Block 0020 [ 75]: dfd2ba15930180ef -Block 0020 [ 76]: 4b94d59c8069f5f4 -Block 0020 [ 77]: 2783164757466e67 -Block 0020 [ 78]: 82a63e11c945edd9 -Block 0020 [ 79]: ded3949304f2233a -Block 0020 [ 80]: c63e9a32698d7505 -Block 0020 [ 81]: 05ad1f94bc351c70 -Block 0020 [ 82]: 5491ac37abc73f1a -Block 0020 [ 83]: 164f3bb7d7765b93 -Block 0020 [ 84]: eca8c78b3c984428 -Block 0020 [ 85]: 5b9fabc93ad5d131 -Block 0020 [ 86]: 7fba9cf868e3f45f -Block 0020 [ 87]: c381821248a668c9 -Block 0020 [ 88]: 2f587c8807d8b617 -Block 0020 [ 89]: 459ca25197ebb81e -Block 0020 [ 90]: 3e5affb81962a6dd -Block 0020 [ 91]: b070badc22c2dbb4 -Block 0020 [ 92]: 0733d88dca0ba766 -Block 0020 [ 93]: 902b8fbc9e12f340 -Block 0020 [ 94]: 7bc7921592e9a5ad -Block 0020 [ 95]: a8fd1807f6d40c01 -Block 0020 [ 96]: 5ae0ab72dc04eedd -Block 0020 [ 97]: fa802d4a9821620e -Block 0020 [ 98]: 8baba494675f4156 -Block 0020 [ 99]: ff5ec2b3a0d5fcdf -Block 0020 [100]: a6460e7d5190118c -Block 0020 [101]: 4444827f3408cb94 -Block 0020 [102]: fb0b35803100ae19 -Block 0020 [103]: 9eed6e1a3abadd09 -Block 0020 [104]: 9b7b0600d055aeb2 -Block 0020 [105]: 77864bc48531546a -Block 0020 [106]: a53237e754c26b62 -Block 0020 [107]: 72bbd37fa894c2f0 -Block 0020 [108]: ed3eb4b2d686977d -Block 0020 [109]: 8d89e405248d512d -Block 0020 [110]: d8fb95216b5e0fd4 -Block 0020 [111]: 33bae91d35125e6d -Block 0020 [112]: 7117375e729dc431 -Block 0020 [113]: 68c443e213bb91c3 -Block 0020 [114]: 7ac856210ec3cfa4 -Block 0020 [115]: dea14ee7fed209f1 -Block 0020 [116]: 1d7dfcc3060859c8 -Block 0020 [117]: 049728f7bddf2f37 -Block 0020 [118]: b2d10f09f53a3be9 -Block 0020 [119]: 3149a2ec78e05acc -Block 0020 [120]: b2b2e4015754424d -Block 0020 [121]: 09622de722d9b4c0 -Block 0020 [122]: ed71dda8b87529c9 -Block 0020 [123]: 53e64f56cef18c5a -Block 0020 [124]: d9c6011c8605417c -Block 0020 [125]: 0c36da5b8af617e3 -Block 0020 [126]: eae8ed3d7d9bfcee -Block 0020 [127]: 9e92d4f5cc6930b8 -Block 0021 [ 0]: 44985db9e0d0d5cd -Block 0021 [ 1]: 7956b565c894de54 -Block 0021 [ 2]: f6e635f3c0db6f2d -Block 0021 [ 3]: fa78335d39a6d106 -Block 0021 [ 4]: cd831adb42c2eeba -Block 0021 [ 5]: dce9ca3d0982e302 -Block 0021 [ 6]: a9f3c863d73ddcf3 -Block 0021 [ 7]: 5b2b8053f70e71d6 -Block 0021 [ 8]: 926e3e83f2779add -Block 0021 [ 9]: 7d12ee3c87a7e354 -Block 0021 [ 10]: 244574f45210fa3c -Block 0021 [ 11]: 9ca1f0da6e24c4ed -Block 0021 [ 12]: de23064711375377 -Block 0021 [ 13]: e6b3575a0d6530ec -Block 0021 [ 14]: cb37b6cb29c790ea -Block 0021 [ 15]: 0d7394ad50729ec1 -Block 0021 [ 16]: ee4511db89da128d -Block 0021 [ 17]: 60c263f7e0943e58 -Block 0021 [ 18]: 74ff35474102dd03 -Block 0021 [ 19]: fe8da1de78cae60a -Block 0021 [ 20]: 8378dc12ff0411a0 -Block 0021 [ 21]: ef43399ed115049b -Block 0021 [ 22]: ce60008f30dc972b -Block 0021 [ 23]: fd48adaefb079b60 -Block 0021 [ 24]: 00dc34d2f5e9e336 -Block 0021 [ 25]: a168e8e31ce93d72 -Block 0021 [ 26]: b206314a6d3852e1 -Block 0021 [ 27]: 32945a1b34ccf798 -Block 0021 [ 28]: b6a2d70441e25d74 -Block 0021 [ 29]: 5189961081aedaf3 -Block 0021 [ 30]: d089d9ae0e6ac5ed -Block 0021 [ 31]: a4e562c76ebc01c7 -Block 0021 [ 32]: 5b1498a98c21068e -Block 0021 [ 33]: 4973ca78752b0432 -Block 0021 [ 34]: 7bf9c40a387df3d9 -Block 0021 [ 35]: 55a1778719be59c3 -Block 0021 [ 36]: 5500e9f3a7369575 -Block 0021 [ 37]: c69c8ef4d7f206fb -Block 0021 [ 38]: c67db3b601347b37 -Block 0021 [ 39]: 64939709d97d89e9 -Block 0021 [ 40]: b4948a1be2068243 -Block 0021 [ 41]: a5d7fd8e568b5cf9 -Block 0021 [ 42]: 09be3ebd25b0f943 -Block 0021 [ 43]: a04507d93f31fe78 -Block 0021 [ 44]: e732c2df513e8110 -Block 0021 [ 45]: b802e0d7c1a290d4 -Block 0021 [ 46]: 4b6bf519c99ae9b0 -Block 0021 [ 47]: 85792737e8be632e -Block 0021 [ 48]: 564fc5a46434e372 -Block 0021 [ 49]: aa8ce8ef23751750 -Block 0021 [ 50]: df75fdd2692a5d60 -Block 0021 [ 51]: 1e34ef41f7558203 -Block 0021 [ 52]: 85c68a3c8d591bb2 -Block 0021 [ 53]: 95ffccb84560b190 -Block 0021 [ 54]: c6329218a27e2430 -Block 0021 [ 55]: e8156443949278ec -Block 0021 [ 56]: 44bf970f7595eeb3 -Block 0021 [ 57]: 7f4745a48d409f34 -Block 0021 [ 58]: 283bb7b02e09a7c2 -Block 0021 [ 59]: e4f46238114fdd65 -Block 0021 [ 60]: 10535b408b72de34 -Block 0021 [ 61]: 3c64d16cfd92bd3f -Block 0021 [ 62]: 398092839b05a0a7 -Block 0021 [ 63]: 5f90e13e1c2f6143 -Block 0021 [ 64]: 8801a1020f792fe7 -Block 0021 [ 65]: 22009e6c49c289c1 -Block 0021 [ 66]: 7728eed80c2a225c -Block 0021 [ 67]: ae8b07a069418ee5 -Block 0021 [ 68]: e388086ae4de33c8 -Block 0021 [ 69]: 969308d65d29f310 -Block 0021 [ 70]: e26c571c259f52dd -Block 0021 [ 71]: 2a4a8580482b06cc -Block 0021 [ 72]: 5bcb5a34fffb96df -Block 0021 [ 73]: c819c17d707e281a -Block 0021 [ 74]: 47edf648395c27e0 -Block 0021 [ 75]: 247d4a2ca0f4dc59 -Block 0021 [ 76]: 183dc03432665caf -Block 0021 [ 77]: e9475ae82292c354 -Block 0021 [ 78]: cb4fe59e9130040d -Block 0021 [ 79]: 67e9681701be322d -Block 0021 [ 80]: 238953b3c2a838bf -Block 0021 [ 81]: 9f0ccae6e48a3061 -Block 0021 [ 82]: 17c218b8b8a799a4 -Block 0021 [ 83]: 6d77392eddc506b7 -Block 0021 [ 84]: 1d871bc3cc1ffb1f -Block 0021 [ 85]: b854e20d68df0832 -Block 0021 [ 86]: 739148762da737cf -Block 0021 [ 87]: ddb87e4b0773508d -Block 0021 [ 88]: 8bfbcffb98ed3b64 -Block 0021 [ 89]: 7ee8acf2f2d2af37 -Block 0021 [ 90]: 0c1ce1ab8bf0cd37 -Block 0021 [ 91]: 0208258d0e1ce2da -Block 0021 [ 92]: e54eeb09da26d0da -Block 0021 [ 93]: 6b62121f7f624310 -Block 0021 [ 94]: 66596927e38bd357 -Block 0021 [ 95]: 22b936173f0670e0 -Block 0021 [ 96]: 42d6b168957c9057 -Block 0021 [ 97]: 2dea30b7ad13294c -Block 0021 [ 98]: ef66a9ebc13538fd -Block 0021 [ 99]: abb52bb31f79729e -Block 0021 [100]: e24db95af6322403 -Block 0021 [101]: ebdb0c859fffcd60 -Block 0021 [102]: d1a06b46377eec61 -Block 0021 [103]: e2d31763aed1ed82 -Block 0021 [104]: ffe24b1f9d5c98b7 -Block 0021 [105]: a4c2e29ed729ab15 -Block 0021 [106]: e726cc9788e7d9db -Block 0021 [107]: c97057fbbe9e7cbe -Block 0021 [108]: d62f0209ac1a3070 -Block 0021 [109]: 2cdae15e7d2da1d3 -Block 0021 [110]: d9cd90c13b3a3646 -Block 0021 [111]: 57fde2b7db2b52e5 -Block 0021 [112]: 1d5cf0b89f587221 -Block 0021 [113]: 78013d6bba9ef856 -Block 0021 [114]: 3995718292542768 -Block 0021 [115]: b1671c5b8290bac1 -Block 0021 [116]: c5a2c85029dbe997 -Block 0021 [117]: b87428b2ccbe4eb7 -Block 0021 [118]: 0dec848541a1d9c3 -Block 0021 [119]: e6c9b99297b41448 -Block 0021 [120]: 788939a6276d7865 -Block 0021 [121]: 713fb3b29fc991be -Block 0021 [122]: 321a3868527330a2 -Block 0021 [123]: 7cf41f165199b48d -Block 0021 [124]: 5fc478500e5d2f18 -Block 0021 [125]: e4f2597a03e914c3 -Block 0021 [126]: 555d961eb62d4030 -Block 0021 [127]: 8ff3daa8c0416f13 -Block 0022 [ 0]: 359ea034194e9837 -Block 0022 [ 1]: d78550ca0ab16474 -Block 0022 [ 2]: 40ba684936f5571b -Block 0022 [ 3]: d5123d27cf585581 -Block 0022 [ 4]: 2416be15e92484f4 -Block 0022 [ 5]: f3fa77ad7aaa55c1 -Block 0022 [ 6]: 583928692aec8b0e -Block 0022 [ 7]: ed3df1623952b0ea -Block 0022 [ 8]: c57e9f7c7c0bcad3 -Block 0022 [ 9]: 885ab6cd1c632566 -Block 0022 [ 10]: 1290294c7c6580ad -Block 0022 [ 11]: fa01cbb3169e5bb7 -Block 0022 [ 12]: 6ec333a957dcb800 -Block 0022 [ 13]: 9d42f781b8392cbf -Block 0022 [ 14]: 1af51dd0d78a0777 -Block 0022 [ 15]: 27ca875f7007076d -Block 0022 [ 16]: d45bd1b2b7496a3f -Block 0022 [ 17]: 71d0bc4df457c664 -Block 0022 [ 18]: cff1e3749eff7fc3 -Block 0022 [ 19]: 9547fd4c77ca5038 -Block 0022 [ 20]: 6a888adc9f599a51 -Block 0022 [ 21]: 9b809dbb86136958 -Block 0022 [ 22]: 430f8942f4df64df -Block 0022 [ 23]: 0e90501ceeb9b589 -Block 0022 [ 24]: 806e49712709b024 -Block 0022 [ 25]: 1742e2f60a8cd3a6 -Block 0022 [ 26]: dbfc8e83d1d512ad -Block 0022 [ 27]: 0cf7f132a3e20ad1 -Block 0022 [ 28]: 9e873b4c0dc1dac6 -Block 0022 [ 29]: 89945226c2272e7a -Block 0022 [ 30]: b5d181ce274a0b0c -Block 0022 [ 31]: 116b16c196bc7d09 -Block 0022 [ 32]: 2d8c6d3a492cddbb -Block 0022 [ 33]: ce8279161863b53b -Block 0022 [ 34]: b8df4aa4a78722b6 -Block 0022 [ 35]: 8c7e68419060d08c -Block 0022 [ 36]: 0d68f7355f83d095 -Block 0022 [ 37]: e0d6b93af3c1f8e8 -Block 0022 [ 38]: 8e7ab9c04b9304f9 -Block 0022 [ 39]: 2e1aea547be324fa -Block 0022 [ 40]: 452ee11bfe9775f2 -Block 0022 [ 41]: b40b63ca6ca959f7 -Block 0022 [ 42]: c7e2522bdf39ee22 -Block 0022 [ 43]: 3252b7ea0f42c364 -Block 0022 [ 44]: bf83748abdd885a8 -Block 0022 [ 45]: 3a41fbd16b55e560 -Block 0022 [ 46]: 1bdc3ad30ab8281e -Block 0022 [ 47]: f43e3102c2b2f31e -Block 0022 [ 48]: aaf357cba9b1fcdf -Block 0022 [ 49]: 89dd304402be8aa2 -Block 0022 [ 50]: 0f096417aa7934f0 -Block 0022 [ 51]: 9ed6d449bcbb0f4a -Block 0022 [ 52]: ec6fbbd7257fa97c -Block 0022 [ 53]: d258163a989c0cb1 -Block 0022 [ 54]: f87de0405bfd2a85 -Block 0022 [ 55]: 8fadee635ca3bf8b -Block 0022 [ 56]: 8c2b49b3389dd1b6 -Block 0022 [ 57]: 0965075129b75a38 -Block 0022 [ 58]: 5ca5e173f8903715 -Block 0022 [ 59]: 45eff6a7d24a1f97 -Block 0022 [ 60]: 9b51a40c8c8988c6 -Block 0022 [ 61]: 637b89f48ff3fec8 -Block 0022 [ 62]: 728f9d6f9bb2b21a -Block 0022 [ 63]: 89bc904decbb53b6 -Block 0022 [ 64]: db8e98e0e80c8c9b -Block 0022 [ 65]: 6a4f479b00afcdf0 -Block 0022 [ 66]: d3746d207db7569a -Block 0022 [ 67]: 708951244e5efdb3 -Block 0022 [ 68]: 0e39a86b20244617 -Block 0022 [ 69]: 89c550440a864e0d -Block 0022 [ 70]: 18f302e1690bdddc -Block 0022 [ 71]: d4d88aeb6aa90eb3 -Block 0022 [ 72]: 3ed14399fd19860a -Block 0022 [ 73]: 36771b7d82612ee4 -Block 0022 [ 74]: b316cc4bdae219f0 -Block 0022 [ 75]: 0912a4991e79007e -Block 0022 [ 76]: 4855b6f6cc5af6c8 -Block 0022 [ 77]: d2204ba86d9e3306 -Block 0022 [ 78]: 7c4afeed2a1d6ea8 -Block 0022 [ 79]: 3a23c2802e4cd40e -Block 0022 [ 80]: c22a2e7614514d95 -Block 0022 [ 81]: f313d4c25b03d71c -Block 0022 [ 82]: 479ca05314ec2c7d -Block 0022 [ 83]: 97c41ff46cfafc0a -Block 0022 [ 84]: a60ff47aba2ce596 -Block 0022 [ 85]: b391956a26acb634 -Block 0022 [ 86]: cdfe906b5c69ffc4 -Block 0022 [ 87]: 4f6721d63000152a -Block 0022 [ 88]: 5231ddf2b368af61 -Block 0022 [ 89]: 57a45b3ca6f71734 -Block 0022 [ 90]: 81d6271b2f60cabd -Block 0022 [ 91]: 2950a00d07534dec -Block 0022 [ 92]: 74e039f97e8aa73b -Block 0022 [ 93]: b4b2578228ce5af6 -Block 0022 [ 94]: 7b8a152b75883d1d -Block 0022 [ 95]: d207419167a96c24 -Block 0022 [ 96]: 0a523f2a8a05ae17 -Block 0022 [ 97]: b7f339aa5cc88542 -Block 0022 [ 98]: 9df6fd53a0623750 -Block 0022 [ 99]: cc1f852330d28cbd -Block 0022 [100]: 1d0a822c3693df89 -Block 0022 [101]: 6aaf30c9ddcdfc08 -Block 0022 [102]: 7ef3d4bec6351a5b -Block 0022 [103]: 6bba1464a14c1035 -Block 0022 [104]: 39c41d54e5f6f1b4 -Block 0022 [105]: 653ccaab162e37f1 -Block 0022 [106]: fa8694d3ba064670 -Block 0022 [107]: 910c761a8683388c -Block 0022 [108]: a733cb24de424eea -Block 0022 [109]: d1898453e8fa3db0 -Block 0022 [110]: 017ce73367ee47ea -Block 0022 [111]: 558eb8c4c3d20b56 -Block 0022 [112]: 969ac56f171863bc -Block 0022 [113]: 0858ecb8b8c6eb6b -Block 0022 [114]: deb137af8f3eda8c -Block 0022 [115]: 0957d06a65ca1dc4 -Block 0022 [116]: 05f09e10f775c81b -Block 0022 [117]: 2b076311329a4de4 -Block 0022 [118]: 756805c001922f19 -Block 0022 [119]: 05362ff8a52ebdba -Block 0022 [120]: 6ea323dd5b100acd -Block 0022 [121]: 28356b4faf87aca5 -Block 0022 [122]: 0dcdf79812e24903 -Block 0022 [123]: 2ad46475db731dfe -Block 0022 [124]: ed69c60c6bd370e2 -Block 0022 [125]: d2278b5b0062c149 -Block 0022 [126]: f4beefe92919c42f -Block 0022 [127]: c74f504d0b914a3b -Block 0023 [ 0]: 9ecdaf0f036d9ce1 -Block 0023 [ 1]: 15bb004c9a72d549 -Block 0023 [ 2]: 98c6ea40c940ce55 -Block 0023 [ 3]: 22ddd937c9c8d11c -Block 0023 [ 4]: 47479edda8ec7d63 -Block 0023 [ 5]: 3170bd3d10b6085e -Block 0023 [ 6]: c4409c14ffbc7e23 -Block 0023 [ 7]: a23c1d3d828c0386 -Block 0023 [ 8]: 9be7bbe3ce098999 -Block 0023 [ 9]: c24d972e14b96d6c -Block 0023 [ 10]: 5cee6a54dd460a3a -Block 0023 [ 11]: a49b4acbe7c13c60 -Block 0023 [ 12]: 3d39dc57c0c1d9d4 -Block 0023 [ 13]: 393a08415acbe137 -Block 0023 [ 14]: 6c12cd1742129218 -Block 0023 [ 15]: 34c456e39a4db7a5 -Block 0023 [ 16]: 77ce8fbc96d845ad -Block 0023 [ 17]: 5edee26d8cd5eca7 -Block 0023 [ 18]: 61ec669dea36a9b2 -Block 0023 [ 19]: 4787a5cc99a772bf -Block 0023 [ 20]: c73394f2ccffbc07 -Block 0023 [ 21]: 671d17c8d052dfed -Block 0023 [ 22]: b1b88ea17fbfd701 -Block 0023 [ 23]: 9959c72ac7eec701 -Block 0023 [ 24]: c3cd2df338951e0f -Block 0023 [ 25]: ddd17a9cde144bbf -Block 0023 [ 26]: a911e79da9825e9d -Block 0023 [ 27]: e0a95e40de7e7382 -Block 0023 [ 28]: cc2dc82e6831f869 -Block 0023 [ 29]: b6e5f24cd89351c5 -Block 0023 [ 30]: 69427de8682af684 -Block 0023 [ 31]: 6de1377357db2537 -Block 0023 [ 32]: e64c80f7e437a546 -Block 0023 [ 33]: 2241320a7b0aa93d -Block 0023 [ 34]: 7d010e32a1d2f256 -Block 0023 [ 35]: 48f7fae3620d0480 -Block 0023 [ 36]: 54031a0fd9d37022 -Block 0023 [ 37]: c983112ebbb5577b -Block 0023 [ 38]: 7247d8d4af455e74 -Block 0023 [ 39]: fa37b1bf19707b2b -Block 0023 [ 40]: 1c058b748007d18f -Block 0023 [ 41]: 2329b9492da173f6 -Block 0023 [ 42]: a8041bb66c9d96ce -Block 0023 [ 43]: bb83baef9acfc540 -Block 0023 [ 44]: 73408477183e2d79 -Block 0023 [ 45]: 3add56150f9d7204 -Block 0023 [ 46]: a5f7f5331c633042 -Block 0023 [ 47]: 9daeca7cf30a5c23 -Block 0023 [ 48]: 2cc58e8b2baa07c3 -Block 0023 [ 49]: e61a53aef76f133a -Block 0023 [ 50]: ebd6b3e48a056905 -Block 0023 [ 51]: b39932f0b836380c -Block 0023 [ 52]: 3e09ce899bff870b -Block 0023 [ 53]: 112e5f19f35c392f -Block 0023 [ 54]: 90748bbcb7404a8c -Block 0023 [ 55]: 27cef22f1eab2918 -Block 0023 [ 56]: 0093c1bff0ae57c3 -Block 0023 [ 57]: 75fb7bc0725e013c -Block 0023 [ 58]: 8c8599b959463f3b -Block 0023 [ 59]: b6542538c6a52c8a -Block 0023 [ 60]: b24a4df10594c149 -Block 0023 [ 61]: 5c7cee7c1cb8c0ab -Block 0023 [ 62]: c340366544c200ed -Block 0023 [ 63]: 4321cb1f4b967b2a -Block 0023 [ 64]: 374c3b926409f144 -Block 0023 [ 65]: 4aaafaae953a4c57 -Block 0023 [ 66]: f6a5da47b793e418 -Block 0023 [ 67]: 99708b9fb00f25d6 -Block 0023 [ 68]: da07362b0cc5dbc0 -Block 0023 [ 69]: 988a57c3161a6c40 -Block 0023 [ 70]: 1d1cc8be2f734650 -Block 0023 [ 71]: a45ad1cae81bd6e2 -Block 0023 [ 72]: 95bca8f0129ec299 -Block 0023 [ 73]: 4ab488175d7722db -Block 0023 [ 74]: 1a7e32485afd1c14 -Block 0023 [ 75]: 489731ed70ac12f5 -Block 0023 [ 76]: f4d27e08c22a40b3 -Block 0023 [ 77]: b5d68acf7a4254e0 -Block 0023 [ 78]: 8a6caec3444e603d -Block 0023 [ 79]: 7c0e44ba09f71c7d -Block 0023 [ 80]: c9b6b103b57878e1 -Block 0023 [ 81]: ebbc7a32b28ab234 -Block 0023 [ 82]: 17219f0386f3711f -Block 0023 [ 83]: 916a5dae24a64bf1 -Block 0023 [ 84]: aa935a0cccf96eae -Block 0023 [ 85]: 1040a92200392b52 -Block 0023 [ 86]: 352255483f46b903 -Block 0023 [ 87]: a978a95cb8cb0690 -Block 0023 [ 88]: 56c1ab16770cbc9b -Block 0023 [ 89]: 10ec2e950f5019a9 -Block 0023 [ 90]: 5e63ede0ae88dd9c -Block 0023 [ 91]: 70edb6a07f8797cf -Block 0023 [ 92]: 380536c55eb0b657 -Block 0023 [ 93]: 99c90414e820bfe8 -Block 0023 [ 94]: 47d46b72322e67c8 -Block 0023 [ 95]: fb848a7235f26a57 -Block 0023 [ 96]: 554aca7cd22b15ac -Block 0023 [ 97]: 379eeafe44ac5c97 -Block 0023 [ 98]: 45bd5bf613ad3fbc -Block 0023 [ 99]: 4c075438f295c44b -Block 0023 [100]: 7a45259b4559b474 -Block 0023 [101]: 92e838e8f0d7514e -Block 0023 [102]: aafdbbc3728f02e5 -Block 0023 [103]: a8e5e2bde478bae6 -Block 0023 [104]: 4c04ee73d4039bab -Block 0023 [105]: 586028282e5a2b3b -Block 0023 [106]: 022ad23278d18381 -Block 0023 [107]: cf51eb4d0d0bee7a -Block 0023 [108]: c7899e6732468800 -Block 0023 [109]: 82ffce02be29df97 -Block 0023 [110]: 6e036a2149410e95 -Block 0023 [111]: e0fbf0b38edbd512 -Block 0023 [112]: 334146973c3d6796 -Block 0023 [113]: 8ee18e6e829696dc -Block 0023 [114]: df103a940c74bbb8 -Block 0023 [115]: 8a46aa1191367d55 -Block 0023 [116]: f6a251ccb3620d10 -Block 0023 [117]: 7d3c88419220f214 -Block 0023 [118]: 26d3efe32bfedbf4 -Block 0023 [119]: 358e3d026b5f1178 -Block 0023 [120]: 32fa00e6c78ead6a -Block 0023 [121]: fcfdf868bc542c1a -Block 0023 [122]: f782e4caddde1d36 -Block 0023 [123]: 063cc660d7e819ca -Block 0023 [124]: 227a62857637cb1f -Block 0023 [125]: 82f3260fc275ab7a -Block 0023 [126]: 5b258ef618e41d5a -Block 0023 [127]: 9fb85be580e013c8 -Block 0024 [ 0]: 4990efe3269d5190 -Block 0024 [ 1]: de2c7f2e0c863a82 -Block 0024 [ 2]: 2fc9b3b341c04b15 -Block 0024 [ 3]: 3cf7381ab954a760 -Block 0024 [ 4]: 3408457092a69446 -Block 0024 [ 5]: 07d5d09002020f66 -Block 0024 [ 6]: 6f91ac20f06809b2 -Block 0024 [ 7]: 7b7a1387adfd44ca -Block 0024 [ 8]: 195bd6087a492267 -Block 0024 [ 9]: fd32ea59e44f93e0 -Block 0024 [ 10]: d1a3ec8e6a5a6f05 -Block 0024 [ 11]: 7f4c56252644fb33 -Block 0024 [ 12]: 8c4222c5464aa757 -Block 0024 [ 13]: c5326c5b79c1a2ba -Block 0024 [ 14]: 69afb22efed068e0 -Block 0024 [ 15]: 2603fd0ad02aaefd -Block 0024 [ 16]: c6edb5b04d0b579b -Block 0024 [ 17]: 9c68f8b1f3174966 -Block 0024 [ 18]: 79cf677075fba1d4 -Block 0024 [ 19]: 06e7cd18bef5a8bb -Block 0024 [ 20]: ccfc328dd4eebf8c -Block 0024 [ 21]: eba236e2136dfb89 -Block 0024 [ 22]: 7a67510261cc7eb1 -Block 0024 [ 23]: 6bd8b5df55f8b189 -Block 0024 [ 24]: 3305f90891829603 -Block 0024 [ 25]: 57e22d3264c1c974 -Block 0024 [ 26]: e918af423b0e7ace -Block 0024 [ 27]: a14c87f217094fe6 -Block 0024 [ 28]: 5e1313148ffaa2f6 -Block 0024 [ 29]: a00b46a3ed740d35 -Block 0024 [ 30]: 6472f8cb7670d61f -Block 0024 [ 31]: 6212299758ed000b -Block 0024 [ 32]: d2c50ca6a7359192 -Block 0024 [ 33]: 4e4d28d7a3810410 -Block 0024 [ 34]: 4238403cbcc1811d -Block 0024 [ 35]: 25b212262b1f6f34 -Block 0024 [ 36]: ef1f75a6346ada54 -Block 0024 [ 37]: 0f525c2ea4c32274 -Block 0024 [ 38]: 6c9395bfdaa1dbcf -Block 0024 [ 39]: c546ecc90cf6e07f -Block 0024 [ 40]: fd5b00b32147080a -Block 0024 [ 41]: 1c334957e7f45b7a -Block 0024 [ 42]: 88746c5e040809f1 -Block 0024 [ 43]: 1ac21097902fe27f -Block 0024 [ 44]: b50743a5490fc1dd -Block 0024 [ 45]: aeb2f2e0a3e6963a -Block 0024 [ 46]: 50e7629dc0fca8d4 -Block 0024 [ 47]: 634eb720976d1003 -Block 0024 [ 48]: cf926f81c7565370 -Block 0024 [ 49]: 04de21ea98c18906 -Block 0024 [ 50]: 09142b802328cfa8 -Block 0024 [ 51]: 152ef632d6c6ae7a -Block 0024 [ 52]: 9648d7f59744787e -Block 0024 [ 53]: 91bd54a13baa8696 -Block 0024 [ 54]: cadc45d3793b4719 -Block 0024 [ 55]: bdf2781f42523f09 -Block 0024 [ 56]: 78d8660f7981b790 -Block 0024 [ 57]: 4eda5ebdf5661493 -Block 0024 [ 58]: c254878496ae6395 -Block 0024 [ 59]: bdb4be227efa75ec -Block 0024 [ 60]: f32b3ef66ddd6a1e -Block 0024 [ 61]: 48ee09f020365f7c -Block 0024 [ 62]: ca415ffea519bff8 -Block 0024 [ 63]: c9cf7b1e7d3c05c2 -Block 0024 [ 64]: 37c77300cea00abe -Block 0024 [ 65]: 36e86532cac039e1 -Block 0024 [ 66]: 7b6e3d9501dcb1cc -Block 0024 [ 67]: 6a0bb5ff356e9afe -Block 0024 [ 68]: b874304d7cb5fc40 -Block 0024 [ 69]: 2dd866d1436d39b3 -Block 0024 [ 70]: dbb43f77cad44c96 -Block 0024 [ 71]: c6b3721f8d6602b1 -Block 0024 [ 72]: c4b3809a4a4f408e -Block 0024 [ 73]: a51c769bdfeaf335 -Block 0024 [ 74]: 41081e8888f060df -Block 0024 [ 75]: 4d2ce53a9c342b5d -Block 0024 [ 76]: 5dad598c2776ba1a -Block 0024 [ 77]: c4775d2b1722a14f -Block 0024 [ 78]: 504200a6ac05d630 -Block 0024 [ 79]: 111b8bafc6c72466 -Block 0024 [ 80]: f5a33557e079957e -Block 0024 [ 81]: 5804085cc0549387 -Block 0024 [ 82]: bdaa7d6a7d1e7d1c -Block 0024 [ 83]: a6b9fad1ceb81824 -Block 0024 [ 84]: 899a505eb3391c27 -Block 0024 [ 85]: b3b40c70b9c66298 -Block 0024 [ 86]: 3eade0f6f5a9a69a -Block 0024 [ 87]: 8248d3340a7e619b -Block 0024 [ 88]: 16992f40e4158081 -Block 0024 [ 89]: 88499feb90e076f9 -Block 0024 [ 90]: d354bea70857875e -Block 0024 [ 91]: 19e861311fd36926 -Block 0024 [ 92]: 6f7790ebb65649b4 -Block 0024 [ 93]: cc7c3b143901e609 -Block 0024 [ 94]: 5cec2c0da25e936b -Block 0024 [ 95]: acd296bbbdeee1e2 -Block 0024 [ 96]: 402648821a389d58 -Block 0024 [ 97]: e890e079b9bd16d7 -Block 0024 [ 98]: 6acd81b06dec0c16 -Block 0024 [ 99]: ea87dab66e6fc421 -Block 0024 [100]: 0f3bbf2dc7c30982 -Block 0024 [101]: 3d1587feca99c0c4 -Block 0024 [102]: e8f6a80acf77a2c9 -Block 0024 [103]: 8814ba98d498427d -Block 0024 [104]: 4a34a60453fb977d -Block 0024 [105]: d04ccdd2f9a3f548 -Block 0024 [106]: 8c34e54ce961698e -Block 0024 [107]: 836c4707f77a4aae -Block 0024 [108]: 7fabdff455eace22 -Block 0024 [109]: 571b7698bdee8f84 -Block 0024 [110]: eb4100011b8ea9c3 -Block 0024 [111]: 40d475bcd627d0d3 -Block 0024 [112]: 32015db9bfea8194 -Block 0024 [113]: 37ef2a82ea82a822 -Block 0024 [114]: fe1032d3b905860d -Block 0024 [115]: a64397eda2c55368 -Block 0024 [116]: 615d50ceaf17c2ad -Block 0024 [117]: 59834237582754bf -Block 0024 [118]: a8c401a6a54999b0 -Block 0024 [119]: 59bb3ab34c05bda7 -Block 0024 [120]: 4e6a17e54f84868a -Block 0024 [121]: f189612ce7bfb6a6 -Block 0024 [122]: f232b4146d455183 -Block 0024 [123]: 298ca1081e693861 -Block 0024 [124]: 4c1982293ae974f1 -Block 0024 [125]: be436e96e2b3315c -Block 0024 [126]: 8c202ac8e574a446 -Block 0024 [127]: a2e7143eac000937 -Block 0025 [ 0]: 83fb6773de7ee2a3 -Block 0025 [ 1]: 2f3f9a6e1097d055 -Block 0025 [ 2]: 4c58fde56056258c -Block 0025 [ 3]: 4800796ee0c17895 -Block 0025 [ 4]: 7b7b6e9b672619b5 -Block 0025 [ 5]: 34f5a9e9f27f1a0b -Block 0025 [ 6]: 98b0e4c973e59b81 -Block 0025 [ 7]: 6d6001fffd3a09e1 -Block 0025 [ 8]: d7eaaebdcaeed771 -Block 0025 [ 9]: e88750c97cc45fbc -Block 0025 [ 10]: 75b10f14afb791a3 -Block 0025 [ 11]: 0f1a1b3808dbfa46 -Block 0025 [ 12]: cc35f51b6c288799 -Block 0025 [ 13]: 2926ff23d9fc1949 -Block 0025 [ 14]: 58254c89114006d6 -Block 0025 [ 15]: 9b899c4474155956 -Block 0025 [ 16]: 9f0470e645231c0b -Block 0025 [ 17]: a8e8d9fd81d99af7 -Block 0025 [ 18]: e8f5cc60fa860462 -Block 0025 [ 19]: fe355997e93e244c -Block 0025 [ 20]: 57452ab41cb95712 -Block 0025 [ 21]: 2b26bc00f6214e40 -Block 0025 [ 22]: 44ef8f293b8f1c11 -Block 0025 [ 23]: 089ae8103f3d4570 -Block 0025 [ 24]: 5d494295b9843491 -Block 0025 [ 25]: f1cb3831ffac7950 -Block 0025 [ 26]: 953d0f93faff8597 -Block 0025 [ 27]: ebd32513d2d9e83d -Block 0025 [ 28]: e00e64064b795a05 -Block 0025 [ 29]: cc1ce85b988b2930 -Block 0025 [ 30]: 31b45b9e5913546a -Block 0025 [ 31]: fbc8663cbc5b3c8a -Block 0025 [ 32]: a0874e3d61998c17 -Block 0025 [ 33]: 2366253e2ce491a5 -Block 0025 [ 34]: 0dfa45c95520aade -Block 0025 [ 35]: cec2ff4872e41c30 -Block 0025 [ 36]: 6321e4ff66dacaa0 -Block 0025 [ 37]: d0a5ec07b94fa10b -Block 0025 [ 38]: ccf37ab4f06dc63c -Block 0025 [ 39]: 56c3a31b8a4df791 -Block 0025 [ 40]: 83fff10db0078edc -Block 0025 [ 41]: 8f1a6a3fad3deee0 -Block 0025 [ 42]: 355f982b93c0f558 -Block 0025 [ 43]: 2a104e98645f490a -Block 0025 [ 44]: 26329d3151f97586 -Block 0025 [ 45]: f237846adf58e843 -Block 0025 [ 46]: d1d0d81185241166 -Block 0025 [ 47]: bd0cd9d7753072f7 -Block 0025 [ 48]: 14d4456cea2d67f9 -Block 0025 [ 49]: b81c2dc3628c7a8c -Block 0025 [ 50]: 8377344995ea8f48 -Block 0025 [ 51]: a5fbdca45d23262e -Block 0025 [ 52]: 5405165af97282a2 -Block 0025 [ 53]: d7d8c5a6ef3d9636 -Block 0025 [ 54]: 7394338a30f9141d -Block 0025 [ 55]: 064f55f35c47c381 -Block 0025 [ 56]: 367133384ae9180c -Block 0025 [ 57]: c74c9847614cfcb5 -Block 0025 [ 58]: 69d72fce07cbfdda -Block 0025 [ 59]: 6290c4b0a2e5e4d7 -Block 0025 [ 60]: d34cf7fb1b36f0e7 -Block 0025 [ 61]: 79107022ff338846 -Block 0025 [ 62]: 59959d367d0afc7c -Block 0025 [ 63]: 2f4345e5dd70a2e0 -Block 0025 [ 64]: aa6cbc0ca3123b15 -Block 0025 [ 65]: 182754d354e32e42 -Block 0025 [ 66]: 42408d91ef9bef4e -Block 0025 [ 67]: 213a0d2a2221598f -Block 0025 [ 68]: 0c4db076adcf874d -Block 0025 [ 69]: f5f16511a505658b -Block 0025 [ 70]: afe3a3731826ea43 -Block 0025 [ 71]: e21e33ce36edcb3a -Block 0025 [ 72]: 5cc73976cd2aaeaa -Block 0025 [ 73]: f275f27ca3e29acf -Block 0025 [ 74]: f3ef40acfe1d2b26 -Block 0025 [ 75]: 0ca134ce6045384d -Block 0025 [ 76]: 19b70338de252080 -Block 0025 [ 77]: 494a7e5b797427f4 -Block 0025 [ 78]: 1e79faba6fe15775 -Block 0025 [ 79]: d5f42e805029c0e3 -Block 0025 [ 80]: 2de1c5e2403fbc13 -Block 0025 [ 81]: 4a29e0cb9a65a3dc -Block 0025 [ 82]: 36c4842e37c2e07d -Block 0025 [ 83]: 026ae795b0a9f8b8 -Block 0025 [ 84]: 28a421d6a6cb2dbf -Block 0025 [ 85]: 95ad6b9ad86aa9ab -Block 0025 [ 86]: 5032fa51cd430007 -Block 0025 [ 87]: f78595ca07627684 -Block 0025 [ 88]: 465d8ed01526d77d -Block 0025 [ 89]: ac72274a02829c93 -Block 0025 [ 90]: 3de7df864a1e4f02 -Block 0025 [ 91]: 7ffa83d36ca1d61f -Block 0025 [ 92]: 15168df4da4775bf -Block 0025 [ 93]: ee9c34ba1a22ea61 -Block 0025 [ 94]: 4e3f3840f0d16db6 -Block 0025 [ 95]: b35fc77b895c3520 -Block 0025 [ 96]: d61bd96d8e1eaf08 -Block 0025 [ 97]: 22e57bbd848a9a73 -Block 0025 [ 98]: b693b10703481d23 -Block 0025 [ 99]: e7ad60adc325637d -Block 0025 [100]: 5fc51fe5584dc47b -Block 0025 [101]: 69fc11a044cb4d63 -Block 0025 [102]: 848d29cf57a45cc5 -Block 0025 [103]: 9e6696565e4584c4 -Block 0025 [104]: b597941cf768d408 -Block 0025 [105]: 6bed7072ef2144c7 -Block 0025 [106]: 776e13b6104dabb2 -Block 0025 [107]: 17666dc6fbe4840e -Block 0025 [108]: 9cf43d0ee9a9e822 -Block 0025 [109]: a1c11bda92e88ebb -Block 0025 [110]: 578bae4e9c1422ab -Block 0025 [111]: 8e0da066b8d902cb -Block 0025 [112]: e0a073edaf4ce1c3 -Block 0025 [113]: 3196d4508872812c -Block 0025 [114]: 7e7556b7c1b17f23 -Block 0025 [115]: d6ac91eee3bb6d46 -Block 0025 [116]: cccf91331656dff0 -Block 0025 [117]: ab87613dd7be1b14 -Block 0025 [118]: 2aad5227e58efc81 -Block 0025 [119]: 5018f9becceee5b0 -Block 0025 [120]: 49fe66a791ae8a46 -Block 0025 [121]: 299180a2768e190e -Block 0025 [122]: 76ae76a2fc1f75c7 -Block 0025 [123]: 7a4df9344eb55360 -Block 0025 [124]: 8e5772c8e118692b -Block 0025 [125]: 8408d3b455eb9437 -Block 0025 [126]: f9c9413266d6934a -Block 0025 [127]: e7eef672fbce6f1c -Block 0026 [ 0]: 1d7f4927cf91b037 -Block 0026 [ 1]: b36f320a28dfa026 -Block 0026 [ 2]: 4ad8b0cf2627ee42 -Block 0026 [ 3]: 0e38890d5df29444 -Block 0026 [ 4]: cf130312e3b781c0 -Block 0026 [ 5]: f27a461c0c52ba67 -Block 0026 [ 6]: 8830659de72797b6 -Block 0026 [ 7]: ec5a1697788f2be5 -Block 0026 [ 8]: 3324bcfa95092292 -Block 0026 [ 9]: 5444e023e975233e -Block 0026 [ 10]: 17f17a88758745a6 -Block 0026 [ 11]: 905851cf4421945c -Block 0026 [ 12]: 425408f96645858a -Block 0026 [ 13]: b68e85073ba4560a -Block 0026 [ 14]: 8eb4e618a957c503 -Block 0026 [ 15]: 305d2389814e00ae -Block 0026 [ 16]: 1613bfd014f3863b -Block 0026 [ 17]: 124258b390774c76 -Block 0026 [ 18]: f54f555e709aed15 -Block 0026 [ 19]: 7851eb99d58f2d46 -Block 0026 [ 20]: 8e09eca1320c689f -Block 0026 [ 21]: aee8d938c18a8c86 -Block 0026 [ 22]: 4afe50ff7d4bee03 -Block 0026 [ 23]: 11bf5c86116564c1 -Block 0026 [ 24]: 2d5f27ffac73811f -Block 0026 [ 25]: 0fa8c081b90eb9b2 -Block 0026 [ 26]: e2ce79be549933e7 -Block 0026 [ 27]: 1ea09ba7396e97e4 -Block 0026 [ 28]: 4b15fefc4863125a -Block 0026 [ 29]: 7758686a57392a75 -Block 0026 [ 30]: 6c43ead08b17d18a -Block 0026 [ 31]: f9d1a4e2bf73bc26 -Block 0026 [ 32]: 7ccef85867766cd1 -Block 0026 [ 33]: 2bb5ded12fe3e02a -Block 0026 [ 34]: bec9fda8bfa42f84 -Block 0026 [ 35]: 478be943487266c6 -Block 0026 [ 36]: 9002b673f9edfd55 -Block 0026 [ 37]: ddf42d90f8a74261 -Block 0026 [ 38]: 20b556c2f2e0e6a3 -Block 0026 [ 39]: d42493e8a60bc244 -Block 0026 [ 40]: 01465bcb695bc90c -Block 0026 [ 41]: 3a7c2d16c3992ad4 -Block 0026 [ 42]: 6308ef7380ab5f06 -Block 0026 [ 43]: 001a0e8c275832fd -Block 0026 [ 44]: e44a6b19e4d42cd8 -Block 0026 [ 45]: 4a2ba8cd72cbb52f -Block 0026 [ 46]: ace3f2f2acdf83fb -Block 0026 [ 47]: 26ac91bbae138132 -Block 0026 [ 48]: 7a2a681a01b40d1f -Block 0026 [ 49]: 7531b75bf6547ded -Block 0026 [ 50]: a3635ecd6aeec9b3 -Block 0026 [ 51]: 41243a17c9b41fe6 -Block 0026 [ 52]: c8d4da0b24b4544b -Block 0026 [ 53]: 3fada7d00f7414b3 -Block 0026 [ 54]: 8010bd0c0fdac063 -Block 0026 [ 55]: 230dbac6bc804ba7 -Block 0026 [ 56]: 70b351bdfd17062c -Block 0026 [ 57]: c40153db32947b71 -Block 0026 [ 58]: 32303a32a5423c24 -Block 0026 [ 59]: cc7b4a7e222623f5 -Block 0026 [ 60]: 0be07177569be4b6 -Block 0026 [ 61]: 09626cfd002e5705 -Block 0026 [ 62]: a2723a44848ddf64 -Block 0026 [ 63]: 226e8e82c0a835c0 -Block 0026 [ 64]: 4b2b3d701a2de1e5 -Block 0026 [ 65]: 7cd8435a86fad908 -Block 0026 [ 66]: 37b6e6c9d066e67f -Block 0026 [ 67]: db0cc96460d11f0b -Block 0026 [ 68]: 9f2dac0a2723c7c3 -Block 0026 [ 69]: 0e57f0560eafb201 -Block 0026 [ 70]: d771d6806fb188d9 -Block 0026 [ 71]: 5929952563b4ed22 -Block 0026 [ 72]: 994276262b7e4ab1 -Block 0026 [ 73]: befac9989fed281f -Block 0026 [ 74]: 16f13e5571e13be3 -Block 0026 [ 75]: 06cd705ada9f5c1c -Block 0026 [ 76]: 76763ad787351b02 -Block 0026 [ 77]: 2511361d83fe6e48 -Block 0026 [ 78]: b17e849b57e3ccd7 -Block 0026 [ 79]: 5b8eaf1c99be1ae0 -Block 0026 [ 80]: b6388ba2df9110d7 -Block 0026 [ 81]: 7f950313727a4b9c -Block 0026 [ 82]: 03dbf52f47e9ab21 -Block 0026 [ 83]: 1665660ce900a15e -Block 0026 [ 84]: 399e52875c07ed05 -Block 0026 [ 85]: 9eebf23eb3158a72 -Block 0026 [ 86]: 39efc5fb6b50e8ee -Block 0026 [ 87]: 02f7af4888f1fe47 -Block 0026 [ 88]: da6f6b90c0824864 -Block 0026 [ 89]: e871096ed23c51c0 -Block 0026 [ 90]: 435550640fd29909 -Block 0026 [ 91]: 9e2000a4691e2c7e -Block 0026 [ 92]: 53b2e98931e022af -Block 0026 [ 93]: 8548b40e0782ef18 -Block 0026 [ 94]: a343286e3be791e9 -Block 0026 [ 95]: d4a4262e32be6ded -Block 0026 [ 96]: d1451f414ea309f6 -Block 0026 [ 97]: 1caa15323232d92d -Block 0026 [ 98]: 7998831dffde384f -Block 0026 [ 99]: 3f6edbdb62446b2e -Block 0026 [100]: ef7cb7f074dc2fbd -Block 0026 [101]: 878afe5b75496afb -Block 0026 [102]: 91ff31fd58fe0def -Block 0026 [103]: c362ee5cd095f0e2 -Block 0026 [104]: d0e01f0cd9c2c496 -Block 0026 [105]: 49ea9bdcf1af8406 -Block 0026 [106]: 82e7e34660e1af7f -Block 0026 [107]: 0418d8471413ebf7 -Block 0026 [108]: 0fc73170d4dd1bc4 -Block 0026 [109]: 09c9249f15bfd20f -Block 0026 [110]: 1e173eb678957dcf -Block 0026 [111]: bf4cbf2f50b1638e -Block 0026 [112]: 9b6b09ffe7ad97b8 -Block 0026 [113]: 333156bf88027c1d -Block 0026 [114]: a24da656f801a65b -Block 0026 [115]: 521e82065aaed63f -Block 0026 [116]: 8a612eac6157b096 -Block 0026 [117]: 2aed99d6d7bbfd85 -Block 0026 [118]: 347cb6498a5f56fb -Block 0026 [119]: dcfa294054e70dbd -Block 0026 [120]: da4b9b4be8d545ee -Block 0026 [121]: b70a983c8de64987 -Block 0026 [122]: cb6a7222c7f95960 -Block 0026 [123]: 3f434acae0d95acf -Block 0026 [124]: 1ef173dee9eb44aa -Block 0026 [125]: 99356ed40eb7f3b8 -Block 0026 [126]: ba6b9c1c50492163 -Block 0026 [127]: e16309f90bcac92f -Block 0027 [ 0]: 439badfadf3479ca -Block 0027 [ 1]: 10f2cab73da23168 -Block 0027 [ 2]: 14ae9e557289684e -Block 0027 [ 3]: 6dad6cd6175b9497 -Block 0027 [ 4]: 102397f5c9c719e0 -Block 0027 [ 5]: a7eec5535492fd55 -Block 0027 [ 6]: 0b07bfcc45032b83 -Block 0027 [ 7]: 44fc1bcecf90e4e9 -Block 0027 [ 8]: eed8c2e02524204f -Block 0027 [ 9]: 935100ae85d08641 -Block 0027 [ 10]: 4aaebb5f361261cf -Block 0027 [ 11]: 1b8d7a9d97940db2 -Block 0027 [ 12]: 4318646c94c73b35 -Block 0027 [ 13]: d6655631500b729d -Block 0027 [ 14]: c2a9b85b96924a8e -Block 0027 [ 15]: 418c589a875653bb -Block 0027 [ 16]: bf082ba5c245765d -Block 0027 [ 17]: ccfc9eda23db1947 -Block 0027 [ 18]: 2de1c5c6f46db28a -Block 0027 [ 19]: 9cd06b50cf2bd2dd -Block 0027 [ 20]: dd962d2da10fc57c -Block 0027 [ 21]: a4b0686c11d81fb1 -Block 0027 [ 22]: bbc792a8c5c45ed4 -Block 0027 [ 23]: ac4483c0b511e762 -Block 0027 [ 24]: 5ad3c417ae5d8871 -Block 0027 [ 25]: 3a19b24b75fa3514 -Block 0027 [ 26]: c521b53027336b12 -Block 0027 [ 27]: d203b85c63c61d3d -Block 0027 [ 28]: c6a2d3ec7903561f -Block 0027 [ 29]: 9f3f4f2f68dab3b1 -Block 0027 [ 30]: b6ed64cc82dd7184 -Block 0027 [ 31]: 66d3d950dae1ea0d -Block 0027 [ 32]: 3302197c3166af1e -Block 0027 [ 33]: 2de9bcdd7e955b18 -Block 0027 [ 34]: 91774354af3f130e -Block 0027 [ 35]: 49fd29c31e5afa37 -Block 0027 [ 36]: cf15127b9889ccff -Block 0027 [ 37]: bf32b130475e7d2b -Block 0027 [ 38]: 8f6baa093c6922c4 -Block 0027 [ 39]: e536f69deb3f39f7 -Block 0027 [ 40]: b3aa896557db63a9 -Block 0027 [ 41]: cd5fadd0b10d9fbd -Block 0027 [ 42]: 1b2b35742385b35c -Block 0027 [ 43]: 968f676a7871062f -Block 0027 [ 44]: a9781975ef83fb7c -Block 0027 [ 45]: 03afc77a1c96d39d -Block 0027 [ 46]: 06e3fc87d2ec14b5 -Block 0027 [ 47]: 9f39adf7aeb1428a -Block 0027 [ 48]: 65792cbead640b35 -Block 0027 [ 49]: 1b01e121b917630e -Block 0027 [ 50]: 8f723e7ce5b7055a -Block 0027 [ 51]: 56e9cd8c13dcc689 -Block 0027 [ 52]: 779dcb4521e9450f -Block 0027 [ 53]: 4f816a3a79510b60 -Block 0027 [ 54]: 940968d0ff51043f -Block 0027 [ 55]: e3eb22ae71285ae3 -Block 0027 [ 56]: 5352d586b008f4b7 -Block 0027 [ 57]: 8968e2c80e34acf6 -Block 0027 [ 58]: 2fe4cbd66f0f62bd -Block 0027 [ 59]: 4412e98455d6b3c4 -Block 0027 [ 60]: 63dc9bd7674922fa -Block 0027 [ 61]: d62b9d372afaa8f8 -Block 0027 [ 62]: 3a3006d8fb94068e -Block 0027 [ 63]: 815e5f34f114968f -Block 0027 [ 64]: 884b99ab2472754c -Block 0027 [ 65]: f1b2eee8980314d2 -Block 0027 [ 66]: afcd0ea9ab782db0 -Block 0027 [ 67]: b9f1099e5dd97c02 -Block 0027 [ 68]: 9d6a1efbaf0cf440 -Block 0027 [ 69]: 11a007aa120f33d5 -Block 0027 [ 70]: 71a3f28332e22030 -Block 0027 [ 71]: 1ce6c4c0557f9c71 -Block 0027 [ 72]: e73571a85fd50173 -Block 0027 [ 73]: b64062eeeff4f8a6 -Block 0027 [ 74]: 1d4cc08c7c2a207b -Block 0027 [ 75]: 0413f787be8d7ca2 -Block 0027 [ 76]: d6287956626cc661 -Block 0027 [ 77]: 3159344b2e846c85 -Block 0027 [ 78]: 43d31539e09f2836 -Block 0027 [ 79]: c2f5b559e744a524 -Block 0027 [ 80]: 36a04346972a8e8d -Block 0027 [ 81]: 2b042a7c4e11eb16 -Block 0027 [ 82]: 2d6f6d59abca49af -Block 0027 [ 83]: c5e53fcc980a48fd -Block 0027 [ 84]: 97e35b537b4026ab -Block 0027 [ 85]: 909f2b09fa4a1cc2 -Block 0027 [ 86]: 62d2991a26be778b -Block 0027 [ 87]: a2425e86eb634fc8 -Block 0027 [ 88]: fb5640a059777a34 -Block 0027 [ 89]: 6a6eadde6ac7d594 -Block 0027 [ 90]: c0dbcd91d345ae09 -Block 0027 [ 91]: bf86ddc82ffd7d46 -Block 0027 [ 92]: ee815de26480a96b -Block 0027 [ 93]: b8ec956a34ee0486 -Block 0027 [ 94]: 07c555d99b043186 -Block 0027 [ 95]: 50a6ccdf83ee32dc -Block 0027 [ 96]: 48c40754eb0e5f57 -Block 0027 [ 97]: 39f05bbdd7b34d53 -Block 0027 [ 98]: 44a0e87f40e81992 -Block 0027 [ 99]: 7b32b1e3c6cb70a8 -Block 0027 [100]: 48c0c2e5a96f4309 -Block 0027 [101]: b0511dbd8b6f12e7 -Block 0027 [102]: 2327388ee4d6a519 -Block 0027 [103]: fcad9620b5f1d221 -Block 0027 [104]: ada988a1f98ae5fb -Block 0027 [105]: 941ab7d039656ff3 -Block 0027 [106]: a76b601d1469fc73 -Block 0027 [107]: 14840c333bd2fef9 -Block 0027 [108]: 9379106ce5adb55d -Block 0027 [109]: cd8e74667be14476 -Block 0027 [110]: f85336be53c43cb4 -Block 0027 [111]: f77eac2a589fae03 -Block 0027 [112]: 5eca210b987e2152 -Block 0027 [113]: 0f4c81d45eec28cc -Block 0027 [114]: a3677c3e83fc85b2 -Block 0027 [115]: ad84372c49345a2c -Block 0027 [116]: c936edbc9678f9d1 -Block 0027 [117]: 108af1465cebeeb2 -Block 0027 [118]: 4c69155540d282ca -Block 0027 [119]: 301cd4b7c6dfbc68 -Block 0027 [120]: 156f18eb609f9765 -Block 0027 [121]: 6e71b4bd0d6080cc -Block 0027 [122]: 3302923e332b9357 -Block 0027 [123]: e6dd3be8a881de18 -Block 0027 [124]: b2b04b33b588c3e6 -Block 0027 [125]: ce90c3fe9a0f4fd8 -Block 0027 [126]: 9028ea580a0f0a34 -Block 0027 [127]: d1201d962a6ef6c4 -Block 0028 [ 0]: a41067023facdbf1 -Block 0028 [ 1]: 42117505215fc851 -Block 0028 [ 2]: 108e80c173bd1c3f -Block 0028 [ 3]: 9141f7051483092c -Block 0028 [ 4]: 88b65a6f33e76738 -Block 0028 [ 5]: 274cc7845b9c6bcf -Block 0028 [ 6]: bda833869a62b8ec -Block 0028 [ 7]: 9baaae5b2628bf1b -Block 0028 [ 8]: 43d0f6acfbd5dd99 -Block 0028 [ 9]: a4ebf0896a3ae6e6 -Block 0028 [ 10]: fb9f2b0ff49710b8 -Block 0028 [ 11]: 7d0d05487d725a95 -Block 0028 [ 12]: 5c6a9fdd3885e820 -Block 0028 [ 13]: 94538a83eab9a2fc -Block 0028 [ 14]: 2e67502e854ccabd -Block 0028 [ 15]: 7f64f88fcce2535d -Block 0028 [ 16]: ed492c4e4992f88f -Block 0028 [ 17]: 9ecd515f9bf644cf -Block 0028 [ 18]: 192662dc782b6033 -Block 0028 [ 19]: c9e27c60336ef812 -Block 0028 [ 20]: f13adf1dba915c6f -Block 0028 [ 21]: e16ae4b064097259 -Block 0028 [ 22]: ba6acd840f6a95b9 -Block 0028 [ 23]: bd28c64416c87497 -Block 0028 [ 24]: a5694c6e1739296c -Block 0028 [ 25]: 2837fe7f1fc557f5 -Block 0028 [ 26]: 08adc15f77d25f7e -Block 0028 [ 27]: e76b6f75fc8c2044 -Block 0028 [ 28]: cf0755893ea4cbd2 -Block 0028 [ 29]: fe6bde1aa534077f -Block 0028 [ 30]: e0e8dca015cdaf13 -Block 0028 [ 31]: 1e12ce621518c367 -Block 0028 [ 32]: a46d5f31d4ad951d -Block 0028 [ 33]: bf9f1f29eec79a2b -Block 0028 [ 34]: 75fb87621dfaca5e -Block 0028 [ 35]: aa99a18fba30b9f4 -Block 0028 [ 36]: f340a2b9afe49e12 -Block 0028 [ 37]: a0c81166fe523ec0 -Block 0028 [ 38]: 18c5679fa18d8dec -Block 0028 [ 39]: 857f448b84cc46a6 -Block 0028 [ 40]: 28cfbe6f6fa9b7a5 -Block 0028 [ 41]: 1ff21c3f36c2108c -Block 0028 [ 42]: 2f66b9fb1363117f -Block 0028 [ 43]: dc0e82d652c2af78 -Block 0028 [ 44]: da14d9d236e1fed8 -Block 0028 [ 45]: 69204ca8ee4a6ed0 -Block 0028 [ 46]: 6ba8d0459653c081 -Block 0028 [ 47]: e98016f805291524 -Block 0028 [ 48]: 18f419584af64630 -Block 0028 [ 49]: 43bc85ffca0777e9 -Block 0028 [ 50]: b580e2fc779e6b2b -Block 0028 [ 51]: 28c19f5fa2ff0cc4 -Block 0028 [ 52]: e442186be0b5bba6 -Block 0028 [ 53]: dee3e42871bf79f1 -Block 0028 [ 54]: 64657b9b60bbe4c8 -Block 0028 [ 55]: 57a9f6c1a5fa724d -Block 0028 [ 56]: ccd48a4a80eeb087 -Block 0028 [ 57]: fb27c006c1b2f679 -Block 0028 [ 58]: 2fb81d57f7ad6cdc -Block 0028 [ 59]: bd3d9dbcd1118622 -Block 0028 [ 60]: 226e915fbad9b815 -Block 0028 [ 61]: 30a8efcbcd761a5c -Block 0028 [ 62]: fd5a51699d07d18e -Block 0028 [ 63]: 60feb45effa98a6f -Block 0028 [ 64]: e389526027b2d2f9 -Block 0028 [ 65]: e9a895742299a978 -Block 0028 [ 66]: 836cce4801d4f3f4 -Block 0028 [ 67]: 63a827f820eb9a56 -Block 0028 [ 68]: e2463a1337fa5ecb -Block 0028 [ 69]: 538e061174fe9d02 -Block 0028 [ 70]: ff3da50f9eacc5b7 -Block 0028 [ 71]: 72ff747a14b4deaf -Block 0028 [ 72]: 562a5e613f9216a6 -Block 0028 [ 73]: 09b455e274ecf7b9 -Block 0028 [ 74]: 4571adb359ffae0f -Block 0028 [ 75]: 77d145773f85eb65 -Block 0028 [ 76]: 653321f0978aa9b0 -Block 0028 [ 77]: d833640bae64a928 -Block 0028 [ 78]: 134c2d009161de97 -Block 0028 [ 79]: 572a9974caf440ce -Block 0028 [ 80]: 6e34acfc2479246b -Block 0028 [ 81]: 94fbf1aecbe288e9 -Block 0028 [ 82]: 8369eb0748dc31dc -Block 0028 [ 83]: 83a3a5121aadb6ba -Block 0028 [ 84]: 264e9a697238aa7b -Block 0028 [ 85]: e6ffe60119c76ed8 -Block 0028 [ 86]: 2c430f7143906fec -Block 0028 [ 87]: 9238a6c9d5f4afba -Block 0028 [ 88]: c00da35614c2881f -Block 0028 [ 89]: dfbc346cc39bf049 -Block 0028 [ 90]: 0656ce19387c8113 -Block 0028 [ 91]: 4a4cde62fb6ff8ab -Block 0028 [ 92]: 6e55b2f1984647e6 -Block 0028 [ 93]: 007cafd08b7aaad7 -Block 0028 [ 94]: 0384f97188460e76 -Block 0028 [ 95]: 4338c2b4b83d2539 -Block 0028 [ 96]: b73322013357363d -Block 0028 [ 97]: 451e6927a0913d00 -Block 0028 [ 98]: 58b2043cdd7c6a0d -Block 0028 [ 99]: 183122cadbe9185f -Block 0028 [100]: 81ee6f18af45d9b6 -Block 0028 [101]: e327593257a949fc -Block 0028 [102]: af66fc72039ece5d -Block 0028 [103]: 64c3f12a6828d7e6 -Block 0028 [104]: 535baf0447dd7dc9 -Block 0028 [105]: ab3685133dcea01c -Block 0028 [106]: 63521d74e4720a83 -Block 0028 [107]: 62fdb26fb8a968cc -Block 0028 [108]: 890dc6bee39e6960 -Block 0028 [109]: b3a588db142d1862 -Block 0028 [110]: d454509c53f9c707 -Block 0028 [111]: cc13b42b0dda6ff1 -Block 0028 [112]: 93b74454d71b4c67 -Block 0028 [113]: 9408f46f656aa155 -Block 0028 [114]: 7916c34481f18bc1 -Block 0028 [115]: adc72713cc045345 -Block 0028 [116]: efc93c7841bdfbb8 -Block 0028 [117]: 72cd273c12380207 -Block 0028 [118]: b52e668f7efbb3fb -Block 0028 [119]: 03bab24694276f9c -Block 0028 [120]: 3c204b2118460028 -Block 0028 [121]: c909683316566d5a -Block 0028 [122]: 5ed142b9097de57e -Block 0028 [123]: 7fde438b177fd13e -Block 0028 [124]: c690af7205e3ccfe -Block 0028 [125]: 8b26df008256dd60 -Block 0028 [126]: 5f029a090522e2f5 -Block 0028 [127]: 88b8989232f47a0d -Block 0029 [ 0]: 313681c3e41acd60 -Block 0029 [ 1]: d91bca0ae66c637a -Block 0029 [ 2]: 04e8251a37da2c17 -Block 0029 [ 3]: 07da61fc730e3511 -Block 0029 [ 4]: 6f9ffac85007ca4d -Block 0029 [ 5]: 3f58445980f06d19 -Block 0029 [ 6]: 09b199b3c76b4124 -Block 0029 [ 7]: 6ec402f46805c58d -Block 0029 [ 8]: d2eace042511a80a -Block 0029 [ 9]: f8da4c2a47e93bd4 -Block 0029 [ 10]: 4953ed5a237778ae -Block 0029 [ 11]: b705e27de76a555b -Block 0029 [ 12]: b0a7712f715a3503 -Block 0029 [ 13]: 2135389da8281211 -Block 0029 [ 14]: 5b599493e2f700f1 -Block 0029 [ 15]: 5a3533a86bc338d6 -Block 0029 [ 16]: d6fb3dd373c3fb84 -Block 0029 [ 17]: 9c4ccc8d1de3d9e7 -Block 0029 [ 18]: 4ea73fc13e1fd243 -Block 0029 [ 19]: b0b41da7ddc2d3a6 -Block 0029 [ 20]: d67556a766650ca3 -Block 0029 [ 21]: 7a87f2feea5c1da9 -Block 0029 [ 22]: ecfc385d0e2cf083 -Block 0029 [ 23]: 45368d1461cd994c -Block 0029 [ 24]: 407868af14ee24fb -Block 0029 [ 25]: a571550c7a1f0a73 -Block 0029 [ 26]: bc1ee9e657c9c105 -Block 0029 [ 27]: de2cc5016e459ee6 -Block 0029 [ 28]: ac85c053069088a0 -Block 0029 [ 29]: bd6aeb9b0ac2ead5 -Block 0029 [ 30]: d82d50fd33a3e8e2 -Block 0029 [ 31]: 307f52bdb3c29795 -Block 0029 [ 32]: 77a59a437b39120e -Block 0029 [ 33]: fce9e3144f78a966 -Block 0029 [ 34]: 3e1cc37711a7e326 -Block 0029 [ 35]: 2c628f1777d983a0 -Block 0029 [ 36]: 77648411897e4a1b -Block 0029 [ 37]: 98ab98c193783931 -Block 0029 [ 38]: ad036d72d5f29806 -Block 0029 [ 39]: 847bd5a73b146f88 -Block 0029 [ 40]: cd354a5bd2ccf5b4 -Block 0029 [ 41]: e806000c105fa663 -Block 0029 [ 42]: e070bb267fcd1243 -Block 0029 [ 43]: 120004ab2f855dfd -Block 0029 [ 44]: b2bbc2f65eabe428 -Block 0029 [ 45]: 4a098eb8a9a91ff3 -Block 0029 [ 46]: 1c00224e70a288a3 -Block 0029 [ 47]: 6d6a3fbd85a2f765 -Block 0029 [ 48]: 86b7c5d758c179a9 -Block 0029 [ 49]: b9418fcf1228990a -Block 0029 [ 50]: f3c6fa47d9a5da91 -Block 0029 [ 51]: afff8e6eb6b0d7d8 -Block 0029 [ 52]: fbe80c00bb485eb6 -Block 0029 [ 53]: 01378709c95d69e3 -Block 0029 [ 54]: 0d2b433f15c611ef -Block 0029 [ 55]: 7981be0be2a9d437 -Block 0029 [ 56]: 0d022dd3b0fef0b9 -Block 0029 [ 57]: 09b6fab3474a2f73 -Block 0029 [ 58]: 0d91c6a6e3cc9ec7 -Block 0029 [ 59]: f87b83735d308ba8 -Block 0029 [ 60]: 54b4dba310bd88f0 -Block 0029 [ 61]: 5ea520e83c20b705 -Block 0029 [ 62]: 59d2670bc502f17f -Block 0029 [ 63]: 721ca4b5908f7718 -Block 0029 [ 64]: ef0e946d1bf3bcb9 -Block 0029 [ 65]: 62fa48ad21c43e0c -Block 0029 [ 66]: 2a04832751467d97 -Block 0029 [ 67]: b2ec95e1d26942a8 -Block 0029 [ 68]: 8327ee8a28c749a1 -Block 0029 [ 69]: a5d8165578262604 -Block 0029 [ 70]: f0ea267b8c26b91c -Block 0029 [ 71]: 084cb7cf5531ef87 -Block 0029 [ 72]: 2732e9aaef147d79 -Block 0029 [ 73]: 1b6381fd914644c4 -Block 0029 [ 74]: 7419b71780d0d784 -Block 0029 [ 75]: f201bac39c320b37 -Block 0029 [ 76]: ce42070184066dd5 -Block 0029 [ 77]: 1df651ec7cf8e733 -Block 0029 [ 78]: ad1d8f667d73481e -Block 0029 [ 79]: 1f78565b46eb434a -Block 0029 [ 80]: 1a3f3009b4522979 -Block 0029 [ 81]: 6cd47ef6d04267d9 -Block 0029 [ 82]: 4a39fd5f469d8cc7 -Block 0029 [ 83]: 65f91813538053bc -Block 0029 [ 84]: a9a31eb605527161 -Block 0029 [ 85]: 2fd1255b5bcd6375 -Block 0029 [ 86]: 3f8542e21d0b690f -Block 0029 [ 87]: 114947f1e9ec2f9d -Block 0029 [ 88]: 4eebd36c8b747ca1 -Block 0029 [ 89]: 6c79dc594ac2b6d2 -Block 0029 [ 90]: 15ec09b5e91b9baa -Block 0029 [ 91]: 6b679f91d2e70b05 -Block 0029 [ 92]: 9044112a597d98ff -Block 0029 [ 93]: cd7356cf331ed49e -Block 0029 [ 94]: 2289fbcca68f8155 -Block 0029 [ 95]: 8e5210925b9bb7ab -Block 0029 [ 96]: 6102352f068f8cf4 -Block 0029 [ 97]: f75c6f5b364bdf6e -Block 0029 [ 98]: 4adb44d199e1b21d -Block 0029 [ 99]: 8572a78f72832a67 -Block 0029 [100]: 8a9be9459af145e7 -Block 0029 [101]: 7bbeb2a6194f8e9f -Block 0029 [102]: 946d6c9ce885afe8 -Block 0029 [103]: 2987514adc28fdef -Block 0029 [104]: d0ce50a68492e30a -Block 0029 [105]: 1dd87ea896a6cfda -Block 0029 [106]: 52018b7afc5d29c8 -Block 0029 [107]: 3f330a5203e6aba8 -Block 0029 [108]: 1ab316917f2550ec -Block 0029 [109]: 6f8eab32629a33bf -Block 0029 [110]: d946f816df91e2a9 -Block 0029 [111]: df0394272a8cf558 -Block 0029 [112]: c16fa502a1922da4 -Block 0029 [113]: 78981886ab7de65a -Block 0029 [114]: afc8ec9eddb17556 -Block 0029 [115]: 6095037aac2aac51 -Block 0029 [116]: be57b59cfec2d1ac -Block 0029 [117]: 32c35f6fb6388eab -Block 0029 [118]: f999903a5ee8f53d -Block 0029 [119]: 3b31837023238e6a -Block 0029 [120]: 7f0aef84e38845aa -Block 0029 [121]: b95f6cc42f15da2b -Block 0029 [122]: a110466efa197c33 -Block 0029 [123]: d672b963a4412d2a -Block 0029 [124]: 5cff9e860875e69e -Block 0029 [125]: e54a688a18a957dc -Block 0029 [126]: 4ea7386eb37b515b -Block 0029 [127]: 832110aef15e3a90 -Block 0030 [ 0]: 408b6edf7b6d76e8 -Block 0030 [ 1]: cdaec40a044edb88 -Block 0030 [ 2]: 67889ab6152afdcb -Block 0030 [ 3]: 9c05e196f92a3324 -Block 0030 [ 4]: 29b2b7b66c085796 -Block 0030 [ 5]: 15cfb2dca4c5ba8e -Block 0030 [ 6]: a6e2210668385b94 -Block 0030 [ 7]: 304e1faa20dde4eb -Block 0030 [ 8]: e020b30a1328a914 -Block 0030 [ 9]: 0bb51200dbae1919 -Block 0030 [ 10]: 1f89827bd0cd2685 -Block 0030 [ 11]: 4cf3c6e4183bb1d8 -Block 0030 [ 12]: 5b5df3a9e149e3e7 -Block 0030 [ 13]: 709b4402dafd008d -Block 0030 [ 14]: db17b2eafdb45f94 -Block 0030 [ 15]: 7d58b94409ca3b26 -Block 0030 [ 16]: 6a7a2a97933ce9f5 -Block 0030 [ 17]: 99c1673a757ca868 -Block 0030 [ 18]: 66be0bde99848db5 -Block 0030 [ 19]: 76778cdc3fd87363 -Block 0030 [ 20]: 8f7ba763e2500708 -Block 0030 [ 21]: 0030035d07ec5fdc -Block 0030 [ 22]: 9aec4aef00b2caf7 -Block 0030 [ 23]: ea91bb0a91fd2fd4 -Block 0030 [ 24]: e855a4fef28c4723 -Block 0030 [ 25]: a8ba555f79797dd8 -Block 0030 [ 26]: dba4f3b6d82436fb -Block 0030 [ 27]: 8e8937633dad67b1 -Block 0030 [ 28]: f3dcb5ff246778ce -Block 0030 [ 29]: 90f60fec9a7fe473 -Block 0030 [ 30]: a8f3330c49c7604f -Block 0030 [ 31]: c206d8fc6e4d656c -Block 0030 [ 32]: 472f2e4653c80e9d -Block 0030 [ 33]: a005dce2b9f47d49 -Block 0030 [ 34]: d211d4ea5cd4b7d6 -Block 0030 [ 35]: fe0f1444120846c6 -Block 0030 [ 36]: fa15fd1def127e14 -Block 0030 [ 37]: ac5dcf2b0a9576e0 -Block 0030 [ 38]: 455f0aa7ccc51e38 -Block 0030 [ 39]: 2359b04ce4ffa824 -Block 0030 [ 40]: e67bcab71417291e -Block 0030 [ 41]: c9842a22e6413101 -Block 0030 [ 42]: 40d66ed0eec1ff05 -Block 0030 [ 43]: e619379508a2380d -Block 0030 [ 44]: ed3128999706b8d4 -Block 0030 [ 45]: daf43ff2b3798f3b -Block 0030 [ 46]: 2297a50f89ea911e -Block 0030 [ 47]: 24974ef6978c6171 -Block 0030 [ 48]: af122d8bc2966070 -Block 0030 [ 49]: 3b1395bede3a62d0 -Block 0030 [ 50]: f2c9c53f8acc34b5 -Block 0030 [ 51]: 09592eed7eca3ba6 -Block 0030 [ 52]: 6265fa73035f278c -Block 0030 [ 53]: 27453b057745b250 -Block 0030 [ 54]: 58e561ff7c846a07 -Block 0030 [ 55]: d703c5f4913bc827 -Block 0030 [ 56]: 36271bffda0486c9 -Block 0030 [ 57]: d2d39c21360fe92e -Block 0030 [ 58]: e672846c80d55aef -Block 0030 [ 59]: 7d105fc325c91c5a -Block 0030 [ 60]: 68f9b57df6b83bff -Block 0030 [ 61]: 2082748779c8daf8 -Block 0030 [ 62]: 5a9c85cdc522417f -Block 0030 [ 63]: e96bcd019b9b486c -Block 0030 [ 64]: 235ee28d5d55e0c3 -Block 0030 [ 65]: eb3a4896469f0ec4 -Block 0030 [ 66]: a9463daca7c68291 -Block 0030 [ 67]: db08678f6153d8c7 -Block 0030 [ 68]: 1ec5fe9d4876f955 -Block 0030 [ 69]: 438d1307299993f2 -Block 0030 [ 70]: b0072c378b6cfb5d -Block 0030 [ 71]: 301ce10babee8f5d -Block 0030 [ 72]: 7c9b9bb3656e2db4 -Block 0030 [ 73]: 2d5b823e615ed753 -Block 0030 [ 74]: 4d673c349f7f8f13 -Block 0030 [ 75]: 50563f67797ec11f -Block 0030 [ 76]: 2685632a636d8aad -Block 0030 [ 77]: f83472de5cbbe1c6 -Block 0030 [ 78]: 0a6afea051cfb234 -Block 0030 [ 79]: eb98b35bf0f22db7 -Block 0030 [ 80]: 33ae1a95abbc098c -Block 0030 [ 81]: e91616e1ee4ef918 -Block 0030 [ 82]: 85716d42d5117cac -Block 0030 [ 83]: 8b0cfd81e670d7fe -Block 0030 [ 84]: c4bcb8dfeab2d5f1 -Block 0030 [ 85]: 8e0919c4bba64c94 -Block 0030 [ 86]: 4975b344cea18ee4 -Block 0030 [ 87]: 113039374ab49733 -Block 0030 [ 88]: f45ac779ae82a794 -Block 0030 [ 89]: dc1997bc3e941b34 -Block 0030 [ 90]: 17e3bdb9964e15a4 -Block 0030 [ 91]: 96ef0d0a598f7fd1 -Block 0030 [ 92]: df40353b051d5733 -Block 0030 [ 93]: e9332d784569c844 -Block 0030 [ 94]: e1d787472d41400a -Block 0030 [ 95]: e2869b0fa1f50af8 -Block 0030 [ 96]: af4af34b650d6926 -Block 0030 [ 97]: cfbcf7752b18c771 -Block 0030 [ 98]: 14887d9431f8c85a -Block 0030 [ 99]: 0cabbcef9a8e83ae -Block 0030 [100]: 62603de80ca6f069 -Block 0030 [101]: 460cce0f55659156 -Block 0030 [102]: 45f9e9b01da609cb -Block 0030 [103]: 957f9ba08dc91aea -Block 0030 [104]: 2716e73926fee4e8 -Block 0030 [105]: 9f30d53562bf353f -Block 0030 [106]: 0c91e8e4bd2ad7d0 -Block 0030 [107]: f31e079c8f7caeee -Block 0030 [108]: 05088ae684266d49 -Block 0030 [109]: b2413829a2145da5 -Block 0030 [110]: e1d9ad663aeb39fa -Block 0030 [111]: 4da017dc0924aa29 -Block 0030 [112]: a349f9eab20ea439 -Block 0030 [113]: 4752d31b48cbae21 -Block 0030 [114]: fbd84024e44caf92 -Block 0030 [115]: ba45887fb5412ff6 -Block 0030 [116]: 8de783c468d6448b -Block 0030 [117]: 7caa49cbd2592562 -Block 0030 [118]: 0cba3416ddd50181 -Block 0030 [119]: f2a52ea38b17cd73 -Block 0030 [120]: 2b627bf5f43c795f -Block 0030 [121]: d4f2048eed46a1cf -Block 0030 [122]: 9869b787c2659a03 -Block 0030 [123]: 291e0afd857d3d1d -Block 0030 [124]: ab227091de0a2ff0 -Block 0030 [125]: 0c09f15ca0e8bd34 -Block 0030 [126]: 6f4f9df1ea2ff4ca -Block 0030 [127]: d30af31b90a27ba7 -Block 0031 [ 0]: 89c7770e0637993f -Block 0031 [ 1]: 07197d828987a604 -Block 0031 [ 2]: 1eb45ba81728e842 -Block 0031 [ 3]: bb5a9840b6356a29 -Block 0031 [ 4]: af7780e7c496d1ff -Block 0031 [ 5]: dc8dccbf1fc8877a -Block 0031 [ 6]: 415d6cd8f543d990 -Block 0031 [ 7]: 4ea854c764c72a91 -Block 0031 [ 8]: 23fa956665955178 -Block 0031 [ 9]: 9a623692c01c8c3b -Block 0031 [ 10]: feb64166768fdbe9 -Block 0031 [ 11]: 4bcc60ef9434362c -Block 0031 [ 12]: 1fe8f1363f2c7b8c -Block 0031 [ 13]: 1f534df306ebb6a1 -Block 0031 [ 14]: ca7cc8fa8a7ccdf6 -Block 0031 [ 15]: cffc2531375c9e14 -Block 0031 [ 16]: 5a2bc32f0685bf45 -Block 0031 [ 17]: 3623f096a638438b -Block 0031 [ 18]: 57f791cf43d44568 -Block 0031 [ 19]: 470709fe0f7cdb14 -Block 0031 [ 20]: ea55cd16896a0b6b -Block 0031 [ 21]: 88bcb41ef6b2b157 -Block 0031 [ 22]: facb052f4d2c0d29 -Block 0031 [ 23]: 0a9b9eee1015ec4c -Block 0031 [ 24]: 13a0ade94e8d5555 -Block 0031 [ 25]: 96d74483bbc65425 -Block 0031 [ 26]: 5c5b3ca4b394be63 -Block 0031 [ 27]: 7ba2bfd959972e5f -Block 0031 [ 28]: b6522c3447665f79 -Block 0031 [ 29]: 64f6d68df4731ab4 -Block 0031 [ 30]: 560814a1051309c3 -Block 0031 [ 31]: 66ddf600fc6df4ee -Block 0031 [ 32]: 9900dc54c58d033f -Block 0031 [ 33]: 47f59e6b327d8e20 -Block 0031 [ 34]: bf33aa2244234bf1 -Block 0031 [ 35]: d3f691ecfe8c299b -Block 0031 [ 36]: 9e873b677f39ab86 -Block 0031 [ 37]: 75280f1c41300133 -Block 0031 [ 38]: 871e6602bb3ffb07 -Block 0031 [ 39]: 2a6319f258314678 -Block 0031 [ 40]: 97c2aaa125822db6 -Block 0031 [ 41]: e7bf880a1c7206ea -Block 0031 [ 42]: 196205598ec8f3b8 -Block 0031 [ 43]: cc6facefe12a1646 -Block 0031 [ 44]: a084acb57b445ceb -Block 0031 [ 45]: 052a7e2f7445bd31 -Block 0031 [ 46]: 7aa75e11161a5c24 -Block 0031 [ 47]: 686b9c4f2f5a23f6 -Block 0031 [ 48]: caa72eb4f8224ccf -Block 0031 [ 49]: a49541af0e3e242f -Block 0031 [ 50]: 3d2466672beea318 -Block 0031 [ 51]: c06207046ee65d5b -Block 0031 [ 52]: fe85635b22b6c656 -Block 0031 [ 53]: 229f18db75c70852 -Block 0031 [ 54]: 7dd9b36113efb72d -Block 0031 [ 55]: def0c1642032db45 -Block 0031 [ 56]: f320411dd1e888cd -Block 0031 [ 57]: 941e400b71a1335a -Block 0031 [ 58]: 67096e11cbc4fd48 -Block 0031 [ 59]: 4da96e1352bfcbfe -Block 0031 [ 60]: 156d67b4034efb2e -Block 0031 [ 61]: 7c3382bc2090a28f -Block 0031 [ 62]: 4bfa37978e24699a -Block 0031 [ 63]: 0bd050e6315619cf -Block 0031 [ 64]: 655205650866af61 -Block 0031 [ 65]: 017af77ec3ade1f6 -Block 0031 [ 66]: 9e9a2de2b181699d -Block 0031 [ 67]: b0146094deb7f12d -Block 0031 [ 68]: a8af88fffce3f712 -Block 0031 [ 69]: b109acbac6a3c08a -Block 0031 [ 70]: f80e22eac1c0e74e -Block 0031 [ 71]: 0ae3ce8462a0c4b5 -Block 0031 [ 72]: b9dd83c924e9009c -Block 0031 [ 73]: 5641c337ad3ec86e -Block 0031 [ 74]: d9f5563f75b4bf20 -Block 0031 [ 75]: bce9dbc659678f09 -Block 0031 [ 76]: 79250dd6a0392f8d -Block 0031 [ 77]: f8bef33608540e87 -Block 0031 [ 78]: d1c55b7b0584153a -Block 0031 [ 79]: 57776b6e818f7892 -Block 0031 [ 80]: c142b628cc6ee052 -Block 0031 [ 81]: e96b4db38bca244e -Block 0031 [ 82]: 556f1f3a16838b79 -Block 0031 [ 83]: bc475f68d72ddd98 -Block 0031 [ 84]: 7052f29f0da9b557 -Block 0031 [ 85]: 7b0cd825716d371b -Block 0031 [ 86]: 39ad7edbd2183ec5 -Block 0031 [ 87]: 84bef8ba060cefee -Block 0031 [ 88]: 812874fe8c3d0e0e -Block 0031 [ 89]: 11221a9493e8000a -Block 0031 [ 90]: ece764a8577a86f5 -Block 0031 [ 91]: a2f854d90a6987e0 -Block 0031 [ 92]: b1ea4324413dee11 -Block 0031 [ 93]: 4d76b35d0630f2ce -Block 0031 [ 94]: 1c14e37978e625c7 -Block 0031 [ 95]: a7a2956659999cfb -Block 0031 [ 96]: 2a1bc299a08be7d5 -Block 0031 [ 97]: 8b1de787db57d8b6 -Block 0031 [ 98]: 84546aabc8dcec8d -Block 0031 [ 99]: 74c55dc4c475fdd6 -Block 0031 [100]: 2fb4398a4f038499 -Block 0031 [101]: b3c6fa84200af9ab -Block 0031 [102]: 6a238dbd35570832 -Block 0031 [103]: 93a6a66d30e78ca7 -Block 0031 [104]: c2cf43cab843ba27 -Block 0031 [105]: 693cd69603e50ea4 -Block 0031 [106]: 6c14b77422c297a3 -Block 0031 [107]: d4fde0d4961b0b2a -Block 0031 [108]: 17f5c37030ca0df1 -Block 0031 [109]: 0a59e439206f2146 -Block 0031 [110]: 893f7ea1fce91480 -Block 0031 [111]: 0e89dfb3c481025f -Block 0031 [112]: d353be1933487620 -Block 0031 [113]: 88281e8286858847 -Block 0031 [114]: 2121b95d14d599b2 -Block 0031 [115]: e8dbf256a428526d -Block 0031 [116]: f7a6a26ab63a5bd4 -Block 0031 [117]: a05b9862052e1a49 -Block 0031 [118]: cf06bdbbda98c3f6 -Block 0031 [119]: 2001d765e3a3df2d -Block 0031 [120]: 33cb41b5981d1d85 -Block 0031 [121]: ffde63f1ee689564 -Block 0031 [122]: d2285236a47f5f22 -Block 0031 [123]: 2137a6082473dd47 -Block 0031 [124]: b350898ce34e6313 -Block 0031 [125]: 0e6a8437f71591eb -Block 0031 [126]: 262f62ad801339fe -Block 0031 [127]: 5e74704b5c91286c -Tag: 87 ae ed d6 51 7a b8 30 cd 97 65 cd 82 31 ab b2 e6 47 a5 de e0 8f 7c 05 e0 2f cb 76 33 35 d0 fd diff --git a/pkg/urcrypt/argon2/kats/argon2i_v16.shasum b/pkg/urcrypt/argon2/kats/argon2i_v16.shasum deleted file mode 100644 index d36ecf6bc..000000000 --- a/pkg/urcrypt/argon2/kats/argon2i_v16.shasum +++ /dev/null @@ -1 +0,0 @@ -334f03e627afb67b946a530b90d2e11fb2e6abb44df992c0fb3198c7bacf5930 argon2i_v16 diff --git a/pkg/urcrypt/argon2/kats/argon2id b/pkg/urcrypt/argon2/kats/argon2id deleted file mode 100644 index e5cdc6bb4..000000000 --- a/pkg/urcrypt/argon2/kats/argon2id +++ /dev/null @@ -1,12304 +0,0 @@ -======================================= -Argon2id version number 19 -======================================= -Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes -Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 -Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 -Secret[8]: 03 03 03 03 03 03 03 03 -Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 -Pre-hashing digest: 28 89 de 48 7e b4 2a e5 00 c0 00 7e d9 25 2f 10 69 ea de c4 0d 57 65 b4 85 de 6d c2 43 7a 67 b8 54 6a 2f 0a cc 1a 08 82 db 8f cf 74 71 4b 47 2e 94 df 42 1a 5d a1 11 2f fa 11 43 43 70 a1 e9 97 - - After pass 0: -Block 0000 [ 0]: 6b2e09f10671bd43 -Block 0000 [ 1]: f69f5c27918a21be -Block 0000 [ 2]: dea7810ea41290e1 -Block 0000 [ 3]: 6787f7171870f893 -Block 0000 [ 4]: ca5aa8f5067b374c -Block 0000 [ 5]: 44cfcab94f414104 -Block 0000 [ 6]: 52525e831cf8cd52 -Block 0000 [ 7]: 3a1dcb76ae77f701 -Block 0000 [ 8]: db83ddac706d23d2 -Block 0000 [ 9]: ff63a62e68b98fa3 -Block 0000 [ 10]: 41ed55a99544e453 -Block 0000 [ 11]: 2ff6fa0d226c86fd -Block 0000 [ 12]: d7bf6d9a64e8b77b -Block 0000 [ 13]: a91ad24e61bffd45 -Block 0000 [ 14]: 7ebe9eea09adcd6c -Block 0000 [ 15]: e36884638b4c2996 -Block 0000 [ 16]: 5a54f32034697f4f -Block 0000 [ 17]: c885338cc4b929b7 -Block 0000 [ 18]: 51ba0bc044e3824c -Block 0000 [ 19]: ed9f60beee0ef312 -Block 0000 [ 20]: 6b169d498354fc50 -Block 0000 [ 21]: 32558851498c40ab -Block 0000 [ 22]: 8ba7642fbeb45909 -Block 0000 [ 23]: 8f9116af74ac6f46 -Block 0000 [ 24]: 2bff5ab7dbafffc7 -Block 0000 [ 25]: e49180713e66f3b3 -Block 0000 [ 26]: 332fe6daa4470665 -Block 0000 [ 27]: 7020c366c240dcfb -Block 0000 [ 28]: e5d88f78ac3e34dd -Block 0000 [ 29]: c52d58be17414590 -Block 0000 [ 30]: 3352cf25776e1689 -Block 0000 [ 31]: a08e922d19fdd765 -Block 0000 [ 32]: e810be2e50ffb55b -Block 0000 [ 33]: b159f1df83ab1136 -Block 0000 [ 34]: 0bf0fc23087ada59 -Block 0000 [ 35]: 991bfc5546f666a1 -Block 0000 [ 36]: 53a8168331d2e667 -Block 0000 [ 37]: 0a22a7e602c9abf5 -Block 0000 [ 38]: f646df091f9fab89 -Block 0000 [ 39]: 443c5ccb1ce10fc4 -Block 0000 [ 40]: 5fd384c9733ed4db -Block 0000 [ 41]: ce9a8f3699656a0d -Block 0000 [ 42]: cd37f767761c01ce -Block 0000 [ 43]: 2cc83d42946298b7 -Block 0000 [ 44]: 2bf5e7f0cb3dcb42 -Block 0000 [ 45]: e7a9e9eb031220ef -Block 0000 [ 46]: f78ddc5798e9be61 -Block 0000 [ 47]: c1bae043cab313a2 -Block 0000 [ 48]: 20e56ae7aa583904 -Block 0000 [ 49]: 0427402b61da57e0 -Block 0000 [ 50]: 770213016f71783c -Block 0000 [ 51]: 0b27d25052c1318b -Block 0000 [ 52]: d0caa69623b7e3ca -Block 0000 [ 53]: 9d7687e6a4ddce68 -Block 0000 [ 54]: e11ccf69d0f43b9c -Block 0000 [ 55]: 3f5a72caca81768b -Block 0000 [ 56]: e176a61b2e4da20f -Block 0000 [ 57]: 78a1aadbd9034284 -Block 0000 [ 58]: 49c049c7e00f9f59 -Block 0000 [ 59]: 6516f857a388f947 -Block 0000 [ 60]: a20d291c489e2e8b -Block 0000 [ 61]: e458d45b639d473c -Block 0000 [ 62]: 710c8c68ea1a26f7 -Block 0000 [ 63]: b290e665e27ab467 -Block 0000 [ 64]: 5c7633ea3703456b -Block 0000 [ 65]: 97571c02d657ce16 -Block 0000 [ 66]: 7b74cb951bc63514 -Block 0000 [ 67]: 23df75070130eb01 -Block 0000 [ 68]: eaace1e4ef1c8468 -Block 0000 [ 69]: d4dbceb8be3b1453 -Block 0000 [ 70]: 6a9fbba608aef476 -Block 0000 [ 71]: ddde0d99a8064a7a -Block 0000 [ 72]: 441a8cb66f88155b -Block 0000 [ 73]: 4a4c89ff8ea10fb4 -Block 0000 [ 74]: 3150ca9f9aed17cd -Block 0000 [ 75]: 6fc43b923d8ef6bd -Block 0000 [ 76]: 0b052515cb3197ab -Block 0000 [ 77]: 2a7f5d8c9f488664 -Block 0000 [ 78]: 110677ccfae3c81d -Block 0000 [ 79]: 1361f368edc978a2 -Block 0000 [ 80]: 51ad3a92b967d0c9 -Block 0000 [ 81]: 0f2ea496b44e1770 -Block 0000 [ 82]: 6f9c634a373cd5ff -Block 0000 [ 83]: aa21db063b0fb2be -Block 0000 [ 84]: 9ee5aa9033b8f489 -Block 0000 [ 85]: 3f56fd9d86dadea5 -Block 0000 [ 86]: 66f16b9849a00547 -Block 0000 [ 87]: 36171aaaeec11729 -Block 0000 [ 88]: 727119a32839d715 -Block 0000 [ 89]: 6278f4ba2188b967 -Block 0000 [ 90]: 6016719be569d76d -Block 0000 [ 91]: 36ac551e8e4a7bb5 -Block 0000 [ 92]: 06856164afe00095 -Block 0000 [ 93]: b8352672d69e8fd3 -Block 0000 [ 94]: 14926dad97d80627 -Block 0000 [ 95]: 6580259e95e8bd50 -Block 0000 [ 96]: 1932b5ff8287678f -Block 0000 [ 97]: 5d1a6bc6990f5960 -Block 0000 [ 98]: d7c5f4e4c3a7d856 -Block 0000 [ 99]: 88ad4b387d04817c -Block 0000 [100]: 38274590e64966c4 -Block 0000 [101]: 3ff81dc3610d60c6 -Block 0000 [102]: fbdc0c109a21d105 -Block 0000 [103]: bd77872efc5408ab -Block 0000 [104]: 6fa6bf9d96867be7 -Block 0000 [105]: f9cadf98fd4cf9ed -Block 0000 [106]: b23ffef15cbc7050 -Block 0000 [107]: 18aaa665bcc3b0e2 -Block 0000 [108]: 01070129cd4180f2 -Block 0000 [109]: f2514e7444d5cc41 -Block 0000 [110]: 998b45553a602fdd -Block 0000 [111]: 60094a7dc2ea8067 -Block 0000 [112]: faf57e40a119f4cf -Block 0000 [113]: 0b8c446b4b92020e -Block 0000 [114]: 6328254d21dcd105 -Block 0000 [115]: 7d88651de8ae3b6d -Block 0000 [116]: 03b5dcb7d1c28dbb -Block 0000 [117]: a61907655686f033 -Block 0000 [118]: 72831d520ad11387 -Block 0000 [119]: 33c98216d672085a -Block 0000 [120]: 578c5b7e80bf4671 -Block 0000 [121]: 52ddcbcc04e51448 -Block 0000 [122]: 01d951ee5923331b -Block 0000 [123]: d4a4597a1810415c -Block 0000 [124]: 420f07791bc9ecc3 -Block 0000 [125]: 3cd3138619d3f4fa -Block 0000 [126]: 137074e156a0690a -Block 0000 [127]: 8e4dd579ca1c1da0 -Block 0001 [ 0]: f727b5d2f5c54303 -Block 0001 [ 1]: 2fc5a656b980caa6 -Block 0001 [ 2]: 5c08c32e1796ab0e -Block 0001 [ 3]: 4ca1ed895a4692d5 -Block 0001 [ 4]: 68f05910c89460ef -Block 0001 [ 5]: 1ec8ac48623f9981 -Block 0001 [ 6]: 79bbc5c7317644d5 -Block 0001 [ 7]: 0d863b20b80d7266 -Block 0001 [ 8]: 8aa4ed020a3baeb2 -Block 0001 [ 9]: 8f72ae567b348b9d -Block 0001 [ 10]: a1f7a1370c9b7573 -Block 0001 [ 11]: 41d52ec493493843 -Block 0001 [ 12]: 780010b2f82c41e2 -Block 0001 [ 13]: 9227cb89939c4cf1 -Block 0001 [ 14]: 6d47b74940af209f -Block 0001 [ 15]: 22cf0b5f094be138 -Block 0001 [ 16]: eb3e235ec8745428 -Block 0001 [ 17]: fe2c2122d0d5741c -Block 0001 [ 18]: 48ca66bf709ae635 -Block 0001 [ 19]: 15975e305ed93fa3 -Block 0001 [ 20]: d6505e1ef94f37d0 -Block 0001 [ 21]: 0694f39f81e3a524 -Block 0001 [ 22]: 070c243d124b0a45 -Block 0001 [ 23]: b4492e0d58c75f3d -Block 0001 [ 24]: 26cdf6dc18a05336 -Block 0001 [ 25]: a1d074f1742e7363 -Block 0001 [ 26]: 45573fceeb9df977 -Block 0001 [ 27]: dcf4f450214c6422 -Block 0001 [ 28]: be560e719551ec36 -Block 0001 [ 29]: 22047152294cf78f -Block 0001 [ 30]: b1a69d55260c455b -Block 0001 [ 31]: a5b140ee053a67fe -Block 0001 [ 32]: 504074e4519947c8 -Block 0001 [ 33]: 0c956c5016864c1e -Block 0001 [ 34]: 38252f16cd4047f3 -Block 0001 [ 35]: 98c45cddb7290653 -Block 0001 [ 36]: 4e2cb095a3c32d7b -Block 0001 [ 37]: 27bc5bdf70afa578 -Block 0001 [ 38]: ed72b0e3ef683363 -Block 0001 [ 39]: 073f517b2dd80ea8 -Block 0001 [ 40]: 3be98a1a15a06f5f -Block 0001 [ 41]: 45f8a0bb8c3311f9 -Block 0001 [ 42]: 2652050c60058b35 -Block 0001 [ 43]: 220db5da269c42e9 -Block 0001 [ 44]: c9873eca93f9284d -Block 0001 [ 45]: 51e541e20ed3b717 -Block 0001 [ 46]: ab5577167a08dbe0 -Block 0001 [ 47]: dba843bcce1a4f97 -Block 0001 [ 48]: 7522310037167b42 -Block 0001 [ 49]: ae4f7625ac90fe15 -Block 0001 [ 50]: d0e88f7c46c53b68 -Block 0001 [ 51]: 44493d819ccf6116 -Block 0001 [ 52]: fb4a375515aac232 -Block 0001 [ 53]: 4eaf852bb04d832b -Block 0001 [ 54]: e004532fdf1f8a77 -Block 0001 [ 55]: 9e42ab4ede979be6 -Block 0001 [ 56]: eca0e805ad14469d -Block 0001 [ 57]: 2376bdd6b2a4e830 -Block 0001 [ 58]: fd4e52a9d1bbcb1e -Block 0001 [ 59]: 98fe361ab93d4cad -Block 0001 [ 60]: 6eaba863b1306d52 -Block 0001 [ 61]: 3e3eba82e84b50ce -Block 0001 [ 62]: 109393a39574f740 -Block 0001 [ 63]: 71d8dff2a4631238 -Block 0001 [ 64]: 023b3d3a21dbd6bf -Block 0001 [ 65]: 5777a50dbb69bbea -Block 0001 [ 66]: 67d2e2b98a33d217 -Block 0001 [ 67]: 2770484d5df31656 -Block 0001 [ 68]: 44ad2348a99a53e6 -Block 0001 [ 69]: 192bdd10c8741f1c -Block 0001 [ 70]: 26bc650bf48813cf -Block 0001 [ 71]: 00b6212dd45770e3 -Block 0001 [ 72]: d3b303f8d0e40ad7 -Block 0001 [ 73]: 511f3b88d352e54b -Block 0001 [ 74]: d39bc6144ac34aaa -Block 0001 [ 75]: 655c0808fdbd0c47 -Block 0001 [ 76]: d47c00e57c1d9dc4 -Block 0001 [ 77]: 27047a13946a7b07 -Block 0001 [ 78]: ba6afef7bf5c92d9 -Block 0001 [ 79]: 06a21ec0edb3ef37 -Block 0001 [ 80]: 78fad9da3ec74d75 -Block 0001 [ 81]: 2c5ee3cf300d5035 -Block 0001 [ 82]: 48cd34c84833254b -Block 0001 [ 83]: c72859ba124c6410 -Block 0001 [ 84]: 1a95c95581d67a24 -Block 0001 [ 85]: 469ff3df7e307532 -Block 0001 [ 86]: 7f1b94f113685691 -Block 0001 [ 87]: 91302b3fb0dc0f5e -Block 0001 [ 88]: c2307db64d2c4b4f -Block 0001 [ 89]: f2e3aeaea45bf48b -Block 0001 [ 90]: a3a4456787fe1021 -Block 0001 [ 91]: f9d9f56ed79a693e -Block 0001 [ 92]: d499174ccec1aa6a -Block 0001 [ 93]: 9d736ac57aec8096 -Block 0001 [ 94]: 7d02face37b3f3f5 -Block 0001 [ 95]: 26b5b9d2ccf4936b -Block 0001 [ 96]: 91d5c0393d5e4342 -Block 0001 [ 97]: 56594cb140bc3e21 -Block 0001 [ 98]: 35d8e19e19052a57 -Block 0001 [ 99]: 76a3e30c157a2394 -Block 0001 [100]: 3931ad30ac2f1385 -Block 0001 [101]: 7be8a2faaab85a90 -Block 0001 [102]: 02c7a5787f806c64 -Block 0001 [103]: 45b6a0efbe86d4b2 -Block 0001 [104]: deb784749dde8bc7 -Block 0001 [105]: a66bb8858e7500cb -Block 0001 [106]: bd8d508588c76ec4 -Block 0001 [107]: 6cb11235b27459a1 -Block 0001 [108]: 98e417a18c80222a -Block 0001 [109]: 39d142ff0552ddfb -Block 0001 [110]: 743c8580c0b99adb -Block 0001 [111]: f636e439e816b733 -Block 0001 [112]: 93b827603b32c52d -Block 0001 [113]: bba4334422741b32 -Block 0001 [114]: 2f4de2810b3a5cad -Block 0001 [115]: 5d0d8ccf002b95be -Block 0001 [116]: 921acd65ef4dd220 -Block 0001 [117]: 0fb7f4732577649f -Block 0001 [118]: 262d7ab021de8924 -Block 0001 [119]: 29aff84fbb4f249e -Block 0001 [120]: a503d32085ca5f78 -Block 0001 [121]: e244661f87621638 -Block 0001 [122]: 93f2ff03e3997016 -Block 0001 [123]: 69c2d47c210f47e5 -Block 0001 [124]: e782c3726723d164 -Block 0001 [125]: cac6f9d71f31beae -Block 0001 [126]: ed0e35037219abf0 -Block 0001 [127]: c56325d142c23d49 -Block 0002 [ 0]: 37542c2df4c423ff -Block 0002 [ 1]: 6cf1d602626f0fc1 -Block 0002 [ 2]: 449e5a5d622d8883 -Block 0002 [ 3]: 79ec5285f3ba957c -Block 0002 [ 4]: cc62f30b0b412ef0 -Block 0002 [ 5]: b47e35f1c950a027 -Block 0002 [ 6]: c5a5c6ab91729a64 -Block 0002 [ 7]: 020dbf60ec862cd5 -Block 0002 [ 8]: cf41de734d20ea2a -Block 0002 [ 9]: f9deadfe55574976 -Block 0002 [ 10]: ed50e4af98091491 -Block 0002 [ 11]: 500489fa3ba28742 -Block 0002 [ 12]: da566e1b85f51522 -Block 0002 [ 13]: b8f8ef6271893952 -Block 0002 [ 14]: cc1705c220d77c80 -Block 0002 [ 15]: 1e4dcb35323c2b1f -Block 0002 [ 16]: 0454a227bbf5c043 -Block 0002 [ 17]: e8a04d31c4d0918d -Block 0002 [ 18]: 6869e1be1a48b6e8 -Block 0002 [ 19]: 9fc384834694d4a3 -Block 0002 [ 20]: a14a4ff00ef57672 -Block 0002 [ 21]: c1a352faf5ec4bf7 -Block 0002 [ 22]: b5304731b08b2bca -Block 0002 [ 23]: 1524a444b939f583 -Block 0002 [ 24]: dfdfc62e544ee931 -Block 0002 [ 25]: 5b419d64efb6b859 -Block 0002 [ 26]: 1cad24e9741c95a9 -Block 0002 [ 27]: 9f3d3cd6121481be -Block 0002 [ 28]: 2bcf04a2f0a5ab51 -Block 0002 [ 29]: 6ab606ce39530d4e -Block 0002 [ 30]: b3d73d18a2d59067 -Block 0002 [ 31]: 73d5536c83faca70 -Block 0002 [ 32]: 1643a26ee60dd698 -Block 0002 [ 33]: b696edd0dcf041ab -Block 0002 [ 34]: 59374f36716bf5e4 -Block 0002 [ 35]: 15f5b0bc4ef1e83e -Block 0002 [ 36]: 51593489c4070cd7 -Block 0002 [ 37]: 8ea9d72e8ed25933 -Block 0002 [ 38]: ec1cff045b2851da -Block 0002 [ 39]: fc8ca9e07c1e5b94 -Block 0002 [ 40]: a80f56f79969cb47 -Block 0002 [ 41]: bce30dd5ee75b67b -Block 0002 [ 42]: 1b92c884e1fc7dcd -Block 0002 [ 43]: f6cdb641c3499906 -Block 0002 [ 44]: d7a61c7ceda83b95 -Block 0002 [ 45]: ef369d5b2addc65a -Block 0002 [ 46]: 41a37a1593450b26 -Block 0002 [ 47]: d67ee1a0ed052b6f -Block 0002 [ 48]: 790670599857280d -Block 0002 [ 49]: ef09a474d602a71f -Block 0002 [ 50]: 5c848619faeb4345 -Block 0002 [ 51]: 11ed266e34885c8b -Block 0002 [ 52]: 441142a800d7110e -Block 0002 [ 53]: c38c2899b733098d -Block 0002 [ 54]: 28ba4d75aca037e4 -Block 0002 [ 55]: 68090ec72cb7c46b -Block 0002 [ 56]: 760c2760e04a7c2a -Block 0002 [ 57]: 9b97c70acceb8c92 -Block 0002 [ 58]: 5fba5c38b2e15641 -Block 0002 [ 59]: 50f86dd277b866a4 -Block 0002 [ 60]: 8039c1367519c219 -Block 0002 [ 61]: 5e757c150da38ee9 -Block 0002 [ 62]: 07b859d43b600353 -Block 0002 [ 63]: 75c2360defe114f1 -Block 0002 [ 64]: a7759837a37400b7 -Block 0002 [ 65]: ba58e8ee8b8f1c39 -Block 0002 [ 66]: 864efeada86a8473 -Block 0002 [ 67]: 771d733623a03670 -Block 0002 [ 68]: 82ae44a9cec2888c -Block 0002 [ 69]: 39767840d86b49f9 -Block 0002 [ 70]: 862efb1223f3dd57 -Block 0002 [ 71]: 6c0a1554741c61bc -Block 0002 [ 72]: 220c6a98d43773a3 -Block 0002 [ 73]: 666ce3eb68da30ff -Block 0002 [ 74]: 4aabf6192271b063 -Block 0002 [ 75]: b97d63b09305732b -Block 0002 [ 76]: 9c036e99fdc41a86 -Block 0002 [ 77]: 0c9553db473231e8 -Block 0002 [ 78]: d3943f668c0b6c0b -Block 0002 [ 79]: 07cd9bf597d17086 -Block 0002 [ 80]: be683d427fc7bd35 -Block 0002 [ 81]: 278c7dac1544b192 -Block 0002 [ 82]: 251fefb71350aed4 -Block 0002 [ 83]: 85f9242deb8e6dc2 -Block 0002 [ 84]: 6c2d92e5b026defa -Block 0002 [ 85]: 8a6e5a2c0dd4f320 -Block 0002 [ 86]: 9feb2206de02a227 -Block 0002 [ 87]: ebf895ed6bf28049 -Block 0002 [ 88]: 4370fe0c90ded371 -Block 0002 [ 89]: 3e15ac9b74b8bd29 -Block 0002 [ 90]: 6aee88d8288707eb -Block 0002 [ 91]: a2c4a130ef335227 -Block 0002 [ 92]: 49e0065e1e168905 -Block 0002 [ 93]: 7c8f1d39d365f761 -Block 0002 [ 94]: 17f3a79f154e7af3 -Block 0002 [ 95]: 8556abf3d775a8cb -Block 0002 [ 96]: e92cb241d42d215d -Block 0002 [ 97]: e27038d2dc363774 -Block 0002 [ 98]: c698e01379eee779 -Block 0002 [ 99]: 0e9851af7296a899 -Block 0002 [100]: 35796451a0ba1749 -Block 0002 [101]: a699ea7d0e2a1754 -Block 0002 [102]: b16fb729ee40602a -Block 0002 [103]: ae3d2de416b7a411 -Block 0002 [104]: d009f76fb4349a93 -Block 0002 [105]: 82e6e58f5f7af70f -Block 0002 [106]: 16e405c51698662e -Block 0002 [107]: 95f4af34a6330e64 -Block 0002 [108]: 94f7bf613dbaa17f -Block 0002 [109]: 5152a3ff25691dbc -Block 0002 [110]: 5e86235d0c82f951 -Block 0002 [111]: d8ac241b4ceb3803 -Block 0002 [112]: 9244e793ca60a5f3 -Block 0002 [113]: 76dab340096fabbf -Block 0002 [114]: c5adf98472940f8a -Block 0002 [115]: 106b551d058f8f19 -Block 0002 [116]: bb258b750fc215de -Block 0002 [117]: ad7140812d40e929 -Block 0002 [118]: 3ad057869afaed79 -Block 0002 [119]: c254bf68bb31355b -Block 0002 [120]: ac8b17e9691a2c01 -Block 0002 [121]: a0f5d368cc92d6b2 -Block 0002 [122]: 57e474eee518e257 -Block 0002 [123]: 4eb432e176d82c1e -Block 0002 [124]: e8dc2a67bc27044e -Block 0002 [125]: ccca0b36894bae07 -Block 0002 [126]: c50e115a40135881 -Block 0002 [127]: 31ab7e9610be77cb -Block 0003 [ 0]: 033a9a825c0e3375 -Block 0003 [ 1]: ffb04963be6b3b77 -Block 0003 [ 2]: a5cd46d300b6dd82 -Block 0003 [ 3]: ec36c67ff576986c -Block 0003 [ 4]: 437b5a54375ab6c7 -Block 0003 [ 5]: 927811ef085e09c0 -Block 0003 [ 6]: 51c5e874382b475c -Block 0003 [ 7]: 13b5997ee7466630 -Block 0003 [ 8]: 84521039bc284d2f -Block 0003 [ 9]: 34791762f12cdc8c -Block 0003 [ 10]: f82a6cea29c3f956 -Block 0003 [ 11]: cecc35a9a9869d35 -Block 0003 [ 12]: 921553f94b2ad7b1 -Block 0003 [ 13]: bd151a3ae8982435 -Block 0003 [ 14]: e44961547aa6b6e8 -Block 0003 [ 15]: 35791c0b88a53841 -Block 0003 [ 16]: 6c1f506cd6b169f4 -Block 0003 [ 17]: c3d5841e25436bc4 -Block 0003 [ 18]: 9865ad21e2f62b1f -Block 0003 [ 19]: 65447e3aa9771e88 -Block 0003 [ 20]: 1a215926fc24f395 -Block 0003 [ 21]: 511db9dcacc2fde0 -Block 0003 [ 22]: 688e9980afdd513c -Block 0003 [ 23]: 902888d7ee355198 -Block 0003 [ 24]: e1888488338e8264 -Block 0003 [ 25]: 6f8d93269dc9670c -Block 0003 [ 26]: 0ea20bdd457c7ec7 -Block 0003 [ 27]: d6f10dea0ab8fa38 -Block 0003 [ 28]: dd69440b4f6d86bb -Block 0003 [ 29]: f218fbd09c06ff41 -Block 0003 [ 30]: 00fbfd70204fc266 -Block 0003 [ 31]: ab4a93d83956e58b -Block 0003 [ 32]: d7a6b398a589f492 -Block 0003 [ 33]: be8ceac4195f4c7e -Block 0003 [ 34]: e82963ea0389aef3 -Block 0003 [ 35]: 3adba6ba5dfbc70b -Block 0003 [ 36]: 959083b7cabe53dd -Block 0003 [ 37]: f5537e16031a1451 -Block 0003 [ 38]: 70689da6075493cc -Block 0003 [ 39]: 86054b0238ed2f05 -Block 0003 [ 40]: 5a4ae91c92ed9852 -Block 0003 [ 41]: 482499c5469d6a79 -Block 0003 [ 42]: ba459a7de4e0170b -Block 0003 [ 43]: 42009024a1939a39 -Block 0003 [ 44]: ff24fe13344a4ea2 -Block 0003 [ 45]: a9881fa40b1d5c30 -Block 0003 [ 46]: 76fbff24e8820359 -Block 0003 [ 47]: 1e12b2bfee1d5674 -Block 0003 [ 48]: 3973d0650a945227 -Block 0003 [ 49]: 7f5916266bf603ad -Block 0003 [ 50]: 95977d0c7146a89e -Block 0003 [ 51]: db9d6047fbbc11d9 -Block 0003 [ 52]: 165175c973740ccd -Block 0003 [ 53]: 980c7be752aa9399 -Block 0003 [ 54]: 310d0c54051b9783 -Block 0003 [ 55]: 6d66372da35a61d7 -Block 0003 [ 56]: 25512dba862b2c55 -Block 0003 [ 57]: f9519f53a64c2007 -Block 0003 [ 58]: 412c96e8a04d50dc -Block 0003 [ 59]: e267e74a4f486eca -Block 0003 [ 60]: 1692d421119d95f1 -Block 0003 [ 61]: 59acacdf9054a080 -Block 0003 [ 62]: e21e41c233e654dd -Block 0003 [ 63]: 776c9d31c68eeac1 -Block 0003 [ 64]: 469a74646cbff04f -Block 0003 [ 65]: cdc326fbc1217c85 -Block 0003 [ 66]: 9839d2208cf23d14 -Block 0003 [ 67]: 7f8d6f4fdd508aac -Block 0003 [ 68]: ec2c7129c1ede201 -Block 0003 [ 69]: eaa1d41993b894ac -Block 0003 [ 70]: 62a6ff95af57746e -Block 0003 [ 71]: e3cfb9e09b389b62 -Block 0003 [ 72]: e5d8e6b2f5c56087 -Block 0003 [ 73]: fea52606f876dd3d -Block 0003 [ 74]: 09d42ae72aab03ed -Block 0003 [ 75]: 469ca64f7e95bd2f -Block 0003 [ 76]: 03a141e08956df41 -Block 0003 [ 77]: 0c675a6d49a093ce -Block 0003 [ 78]: 904622e9fc3aeeea -Block 0003 [ 79]: 352fa38b9134c932 -Block 0003 [ 80]: 68e940494610d7cb -Block 0003 [ 81]: 37fc53a67dedf748 -Block 0003 [ 82]: fd3a7cd03312fec2 -Block 0003 [ 83]: 5cad438e52ed4347 -Block 0003 [ 84]: 80ebab1679b71b8b -Block 0003 [ 85]: 87497f358d6563f0 -Block 0003 [ 86]: 4a8b3c7f3126291a -Block 0003 [ 87]: d39ab8372acfa450 -Block 0003 [ 88]: db936c859ee7eec1 -Block 0003 [ 89]: d0e3658c3584931b -Block 0003 [ 90]: 70b321e145b7fde0 -Block 0003 [ 91]: 4b378a260b92af14 -Block 0003 [ 92]: 3b0726497f9ec36d -Block 0003 [ 93]: da1ef2a3ae8bed54 -Block 0003 [ 94]: 66d75fc3b087213d -Block 0003 [ 95]: f4c8a72b9d79bf0c -Block 0003 [ 96]: a2b1447f1b6df16d -Block 0003 [ 97]: 7d5a9efbc2dce79b -Block 0003 [ 98]: 62fbf22cf1fc124e -Block 0003 [ 99]: 4242820b9c5e47ef -Block 0003 [100]: 9f10556f00ffe526 -Block 0003 [101]: 6a08ccdc012d3608 -Block 0003 [102]: 9c4f3aefa54c172e -Block 0003 [103]: 04c665a5be09ef37 -Block 0003 [104]: 513f5ecfd230b7a4 -Block 0003 [105]: 9af91bcb5a94e05a -Block 0003 [106]: 67e742dd8815f572 -Block 0003 [107]: 3bb0fc4e2dbc9c6b -Block 0003 [108]: 140a635b9dce287f -Block 0003 [109]: 07f4465d81127d05 -Block 0003 [110]: 689d3f84aa045d3f -Block 0003 [111]: a60b928eeb7c986c -Block 0003 [112]: fd2f18537d468745 -Block 0003 [113]: 0c23e02868032019 -Block 0003 [114]: f68a25333b834b6b -Block 0003 [115]: 8a4ed24e784b3a47 -Block 0003 [116]: 46bf8147421a0572 -Block 0003 [117]: 369fa72d40415b7f -Block 0003 [118]: 6882dabd6a068f34 -Block 0003 [119]: dc8e2cdfe017dbee -Block 0003 [120]: e0f8c59632b31b30 -Block 0003 [121]: 7ce3a83234277cc4 -Block 0003 [122]: 7523755ddae51a70 -Block 0003 [123]: 727cbd57e13e08bb -Block 0003 [124]: 3d25e43aeb8ab15a -Block 0003 [125]: bb434251e358c81e -Block 0003 [126]: ccfcf5ef39898f2f -Block 0003 [127]: 5c7b6af56dc93d90 -Block 0004 [ 0]: 4aad2c9e9615357d -Block 0004 [ 1]: ce6a489393264830 -Block 0004 [ 2]: 44f6dd677120c34c -Block 0004 [ 3]: 9b54b4c637722c0d -Block 0004 [ 4]: 36b59880f89ce66b -Block 0004 [ 5]: f9941dacf99fa3b2 -Block 0004 [ 6]: 0561133fe2413998 -Block 0004 [ 7]: 3624f439f0356886 -Block 0004 [ 8]: 7f69556b861dc791 -Block 0004 [ 9]: 2b2c080682a158f9 -Block 0004 [ 10]: b5cd679b5b98078b -Block 0004 [ 11]: f50bda1f106687ab -Block 0004 [ 12]: 6a7fd322c9d0e356 -Block 0004 [ 13]: c0d57b7d551517f0 -Block 0004 [ 14]: cb0076497b271329 -Block 0004 [ 15]: 1ee3a218ac2e94bb -Block 0004 [ 16]: f81fd9c8ad33ab94 -Block 0004 [ 17]: 06f74124853c642c -Block 0004 [ 18]: af67e59ca12aba8b -Block 0004 [ 19]: c69ab433b4e3f026 -Block 0004 [ 20]: 066b5f97e6f94a14 -Block 0004 [ 21]: a660fc3551a8ccdb -Block 0004 [ 22]: f6e647def8255386 -Block 0004 [ 23]: deeaae8a41569d89 -Block 0004 [ 24]: 502dfea1f3866170 -Block 0004 [ 25]: 0055e5035ee2effd -Block 0004 [ 26]: ea1bc368a36a4989 -Block 0004 [ 27]: d187d3b09c31bd2e -Block 0004 [ 28]: ecc108964a73eea1 -Block 0004 [ 29]: 6f03013c3375bea4 -Block 0004 [ 30]: 4d2b4f01c9a594a1 -Block 0004 [ 31]: 6afa1c3705bceb93 -Block 0004 [ 32]: 29a3def8590e29e2 -Block 0004 [ 33]: 388e0b50d37ca6fb -Block 0004 [ 34]: a9a2be5abc3ae355 -Block 0004 [ 35]: 655154a45cf28d3f -Block 0004 [ 36]: b4bf1f57bcb985a5 -Block 0004 [ 37]: 74ac80093cc72816 -Block 0004 [ 38]: dc10be4b89ecc2c9 -Block 0004 [ 39]: a8f3d3892d18f8c5 -Block 0004 [ 40]: 2a9bedb7783e517e -Block 0004 [ 41]: 8fb2d64cdddb85e2 -Block 0004 [ 42]: c9426c402d69e384 -Block 0004 [ 43]: b4d887a9f0e27244 -Block 0004 [ 44]: 131338affae1913f -Block 0004 [ 45]: bea6e8197ecf2b57 -Block 0004 [ 46]: 2beb9a0a4629ea26 -Block 0004 [ 47]: a0b1321c16b6df16 -Block 0004 [ 48]: 5e803cc0fda654b4 -Block 0004 [ 49]: 51d8ea1da44ff8c8 -Block 0004 [ 50]: 31724ec603231a0f -Block 0004 [ 51]: 11e7d7c7d3f87451 -Block 0004 [ 52]: 73a6efc08a63c816 -Block 0004 [ 53]: 0f5007b3893fde88 -Block 0004 [ 54]: 9639fa7d1f9ba15d -Block 0004 [ 55]: 75857f3fc55b11b3 -Block 0004 [ 56]: e16f7ae209135d5b -Block 0004 [ 57]: 4c9884238bfb53ec -Block 0004 [ 58]: c66cbb76ade05220 -Block 0004 [ 59]: 7060a8642a6358f1 -Block 0004 [ 60]: e1441ddd05e3e94a -Block 0004 [ 61]: 40eb35e6b1fe60a4 -Block 0004 [ 62]: 32db0c582a9a1c4b -Block 0004 [ 63]: 156d62abf13c8d42 -Block 0004 [ 64]: 6386901cfaf4cd5f -Block 0004 [ 65]: d485163ee2894a0a -Block 0004 [ 66]: 5bbd9371b6ddbda8 -Block 0004 [ 67]: 617f0a95d0d1ebad -Block 0004 [ 68]: ddda42edd989a5de -Block 0004 [ 69]: bf6218a5e8a4fc7f -Block 0004 [ 70]: 948c99e73dcef198 -Block 0004 [ 71]: d2dae1cc5189a2ac -Block 0004 [ 72]: 9ab9309c75d14489 -Block 0004 [ 73]: 0096c018c9922cc0 -Block 0004 [ 74]: c55d076c6afdfb36 -Block 0004 [ 75]: 6940a46c5f5f8ff7 -Block 0004 [ 76]: 1f821452ed6805d5 -Block 0004 [ 77]: a5e13572d196c88f -Block 0004 [ 78]: fb84aca56c950808 -Block 0004 [ 79]: db36d78614fdcae1 -Block 0004 [ 80]: f74f05e57df8e0a6 -Block 0004 [ 81]: 4a6cd2d0b706fd77 -Block 0004 [ 82]: 77b1998388a62f9d -Block 0004 [ 83]: 843d8aa68f4738e7 -Block 0004 [ 84]: e50d81d9d86bb937 -Block 0004 [ 85]: b35517d78153e1f0 -Block 0004 [ 86]: 4d6667011dc0f5c9 -Block 0004 [ 87]: bdfbb81b05906373 -Block 0004 [ 88]: ff1c544cb9c55da0 -Block 0004 [ 89]: 7be55700f0926509 -Block 0004 [ 90]: 0a049f631a618979 -Block 0004 [ 91]: e185e5ca1f799f6e -Block 0004 [ 92]: a810f75491b3cfb7 -Block 0004 [ 93]: af77d89abab3e2d8 -Block 0004 [ 94]: c7c7fcf6f7e1fb7e -Block 0004 [ 95]: de4a29cc78702394 -Block 0004 [ 96]: 71e58cf077d6d85d -Block 0004 [ 97]: b73fc4a749b34ead -Block 0004 [ 98]: ffeccad0666cc6af -Block 0004 [ 99]: 69fbdea85dcd455f -Block 0004 [100]: 278f863ba6acabc5 -Block 0004 [101]: e66965a305bc4c40 -Block 0004 [102]: b9423de0dce901b7 -Block 0004 [103]: 15e0c769d840331e -Block 0004 [104]: 928eec9442a6b06f -Block 0004 [105]: db36ba9eca162aa9 -Block 0004 [106]: 11ce79a96c435d1e -Block 0004 [107]: c4950d5470035ce8 -Block 0004 [108]: 1730ef3bde3b5b6a -Block 0004 [109]: ac80f0e3f59a5d5c -Block 0004 [110]: 8ea557f8180c1661 -Block 0004 [111]: 1bf6e898445a963d -Block 0004 [112]: c004558618166516 -Block 0004 [113]: 4fbb7d0b5c4c5f59 -Block 0004 [114]: c81240d4eae498d0 -Block 0004 [115]: a6671d0bcaa177dc -Block 0004 [116]: 1b413c8e690567d0 -Block 0004 [117]: f5f3e1c8221f09e0 -Block 0004 [118]: 9c8f5fec57d0e3c0 -Block 0004 [119]: e343869ffa9b4f43 -Block 0004 [120]: 29dc7ffa4ba5bc92 -Block 0004 [121]: 708cb720e2816ba8 -Block 0004 [122]: 52a1d85807f13c6a -Block 0004 [123]: 561e4a36786d4bef -Block 0004 [124]: 2966f347c17a3914 -Block 0004 [125]: 3dc4aac7982d3f1c -Block 0004 [126]: aae55b9282ac0bb3 -Block 0004 [127]: 0f4767a8e4081496 -Block 0005 [ 0]: a2f1f29ea7aa2805 -Block 0005 [ 1]: d8c3cbc2ebbf0eb4 -Block 0005 [ 2]: a6b62b7344e68672 -Block 0005 [ 3]: e5dad5558824578c -Block 0005 [ 4]: 7f4977662f4a9dcd -Block 0005 [ 5]: 9740712b639051f1 -Block 0005 [ 6]: 76d060bce2adac18 -Block 0005 [ 7]: e00a0d348c440e6c -Block 0005 [ 8]: 3ee6477fdaa4d664 -Block 0005 [ 9]: 64008d83e1dfc177 -Block 0005 [ 10]: 430dc48d1c295406 -Block 0005 [ 11]: 9552e22ed145e6c1 -Block 0005 [ 12]: 57bd17aae86ad663 -Block 0005 [ 13]: 606091bc16a9bba7 -Block 0005 [ 14]: 28194ab3da1ac0a2 -Block 0005 [ 15]: 5e56b17cd078d2f4 -Block 0005 [ 16]: c248a735043acb68 -Block 0005 [ 17]: 42e8f874f7436184 -Block 0005 [ 18]: 376109d627e2c7b5 -Block 0005 [ 19]: e991290d19bfafbe -Block 0005 [ 20]: 2d6674137d9e9a54 -Block 0005 [ 21]: 281d16baf189e1b0 -Block 0005 [ 22]: 2ccf19eeb3111b77 -Block 0005 [ 23]: 6d296a58e66dc49d -Block 0005 [ 24]: c6f697703d9dc1d6 -Block 0005 [ 25]: b05254caf35910c6 -Block 0005 [ 26]: 3c72ab46ee180152 -Block 0005 [ 27]: 213a5becbe4615e1 -Block 0005 [ 28]: 4d84d1ee510b9e93 -Block 0005 [ 29]: 0160bed22edeeb55 -Block 0005 [ 30]: c1433fd0b0655b60 -Block 0005 [ 31]: 32632df221174ebc -Block 0005 [ 32]: 2a2e3e2f009f4034 -Block 0005 [ 33]: 0bbfc3da3267d57b -Block 0005 [ 34]: 0a14a644572cee42 -Block 0005 [ 35]: 7e77789809f9720d -Block 0005 [ 36]: 563ecb03c2c90611 -Block 0005 [ 37]: dbac4b6bbe26ad50 -Block 0005 [ 38]: 6af6d1b08b1e4c18 -Block 0005 [ 39]: 4e33c9a639b36584 -Block 0005 [ 40]: a5ec9a23696f2405 -Block 0005 [ 41]: 54c69b780e8359a4 -Block 0005 [ 42]: 1b6458e286139e45 -Block 0005 [ 43]: 4bb6edeecdc79d8f -Block 0005 [ 44]: 87a0dfbfedb05191 -Block 0005 [ 45]: e5e875ee54c10ac7 -Block 0005 [ 46]: 412b2c305de89dfb -Block 0005 [ 47]: c6968cb2716aee54 -Block 0005 [ 48]: 9c17a0b772b6afa9 -Block 0005 [ 49]: b37a9be1538f0d5c -Block 0005 [ 50]: 3783ecd08d568855 -Block 0005 [ 51]: 66a9730d0497e4a8 -Block 0005 [ 52]: 946f1aa176c96d55 -Block 0005 [ 53]: b932be7315159d78 -Block 0005 [ 54]: 82c9b2f8adf545bd -Block 0005 [ 55]: 939c6ec3e66ab28b -Block 0005 [ 56]: b705f1ba2b442544 -Block 0005 [ 57]: cbfc1c2c0437fe1e -Block 0005 [ 58]: b5d171e06a5b5d94 -Block 0005 [ 59]: b65e7548e4290c0f -Block 0005 [ 60]: f6c904d14c184ba5 -Block 0005 [ 61]: 821801c0227e5b4f -Block 0005 [ 62]: bb008a3cd10a6657 -Block 0005 [ 63]: c8291b37511aba68 -Block 0005 [ 64]: ece5c306e15e7e96 -Block 0005 [ 65]: acee9e6ec3a7d921 -Block 0005 [ 66]: 8d8bebf10b2b4e4a -Block 0005 [ 67]: 409a9c93cf143f39 -Block 0005 [ 68]: 8c4ff0acc0d623a8 -Block 0005 [ 69]: 5ac7f3561a57f8d7 -Block 0005 [ 70]: fe65f00fb63d9dc7 -Block 0005 [ 71]: 01ff21e3cc1f8c6d -Block 0005 [ 72]: 84ffd934b4ebac8d -Block 0005 [ 73]: d21cd538a03232b2 -Block 0005 [ 74]: 781980610b7ec7cc -Block 0005 [ 75]: 2dbdd60528669805 -Block 0005 [ 76]: dc589c07d2a661e0 -Block 0005 [ 77]: 6cdcdafe025e33bd -Block 0005 [ 78]: a6ee8906b4c238df -Block 0005 [ 79]: c7143cca9dfeb415 -Block 0005 [ 80]: aa309e94e2fd2005 -Block 0005 [ 81]: d5bc5fd1818a2a9c -Block 0005 [ 82]: b0bcb4f73a966742 -Block 0005 [ 83]: 691034d3a4ea3d87 -Block 0005 [ 84]: 624b83b2ae0a36de -Block 0005 [ 85]: ccf54a71ef5cea9e -Block 0005 [ 86]: 98bd28052ea1d0f6 -Block 0005 [ 87]: 991501ef48472656 -Block 0005 [ 88]: c1d7473fdfb08370 -Block 0005 [ 89]: 2aa6152966242ae0 -Block 0005 [ 90]: 2d40e50c8215c370 -Block 0005 [ 91]: 56021a10aadab2e1 -Block 0005 [ 92]: 428a2318bda6f282 -Block 0005 [ 93]: c9e69a34fb9adcab -Block 0005 [ 94]: f1268c07cafdd8f1 -Block 0005 [ 95]: fd32e5974bf062eb -Block 0005 [ 96]: 1cdd56ebf5ba0507 -Block 0005 [ 97]: 5e3b11a31da2c99f -Block 0005 [ 98]: e5415a8ecdafc162 -Block 0005 [ 99]: 94a646f31cc04a45 -Block 0005 [100]: dc9b968dee2c9fa4 -Block 0005 [101]: f11bfa8be33bc828 -Block 0005 [102]: 1e2665e7c975664b -Block 0005 [103]: 91e3dd22bf7a1234 -Block 0005 [104]: 5582d2aacadf6df0 -Block 0005 [105]: 849d237cdd44ae40 -Block 0005 [106]: a13b1559d1af395e -Block 0005 [107]: 9cce1d491b39e1c6 -Block 0005 [108]: 70eaf0cc0fabdec7 -Block 0005 [109]: 58afa558c5085ad4 -Block 0005 [110]: 1df4bf8dc0d9fdc7 -Block 0005 [111]: 374ccf1f6c700a11 -Block 0005 [112]: f2359455e8a72dee -Block 0005 [113]: 783b339c402acef2 -Block 0005 [114]: 68db356ec17dd7e5 -Block 0005 [115]: e0a6272e6e7d4674 -Block 0005 [116]: 4378e4ce8e70fdd1 -Block 0005 [117]: fde5aad0d4eabc79 -Block 0005 [118]: fee53869ca65168f -Block 0005 [119]: 0693da99c2db079a -Block 0005 [120]: 634b973c45b8868e -Block 0005 [121]: e92f4f9f9e1bc735 -Block 0005 [122]: b139bd321251d73a -Block 0005 [123]: fdc440e07c89d790 -Block 0005 [124]: c1aa16205718b13e -Block 0005 [125]: 9025eabecbc713a9 -Block 0005 [126]: 3908a16b231be5ed -Block 0005 [127]: f25730b2867d5c06 -Block 0006 [ 0]: 7b857b3d24027d7a -Block 0006 [ 1]: 670e23eb8eddb301 -Block 0006 [ 2]: 98ea5e36eb4479e4 -Block 0006 [ 3]: acd0b9ac97eff6d6 -Block 0006 [ 4]: 2d5d6e6fff1f133e -Block 0006 [ 5]: 3e9c9726b56417fd -Block 0006 [ 6]: 0b2113fa483c195b -Block 0006 [ 7]: 0d7815ec05700375 -Block 0006 [ 8]: c9ce6d95ea5b4118 -Block 0006 [ 9]: 84d2a7f11bb92f51 -Block 0006 [ 10]: ff88f9ad86a45ec7 -Block 0006 [ 11]: daabf03c40b04299 -Block 0006 [ 12]: a36b60cd4f1f18d9 -Block 0006 [ 13]: 5276d5d41107068d -Block 0006 [ 14]: 3c8812f7fae8511a -Block 0006 [ 15]: 00ea06ce780472ef -Block 0006 [ 16]: da887f5b84c9446a -Block 0006 [ 17]: 22963be370b288ac -Block 0006 [ 18]: e28b0a612196ecfb -Block 0006 [ 19]: 3464fdec28ec9b0a -Block 0006 [ 20]: fa6ec6bad95f4402 -Block 0006 [ 21]: 432bef4e4df0f410 -Block 0006 [ 22]: 65a1743f094c0a95 -Block 0006 [ 23]: 6d5fe021a6e4c314 -Block 0006 [ 24]: 063eefd04decef61 -Block 0006 [ 25]: 9ba8d1161a35e920 -Block 0006 [ 26]: c07b0a96bd9d8ad9 -Block 0006 [ 27]: bb3445c95c196591 -Block 0006 [ 28]: 03be97064ca1affa -Block 0006 [ 29]: 2c3516d2305cc315 -Block 0006 [ 30]: 9ee9f1966dba334a -Block 0006 [ 31]: c0084070fe554f10 -Block 0006 [ 32]: 9748b391ae2fab76 -Block 0006 [ 33]: 33126d30ae96ffa3 -Block 0006 [ 34]: 39014f0169e1c26f -Block 0006 [ 35]: bc404f8df7c3b6ac -Block 0006 [ 36]: 6f38d8b40e328fa7 -Block 0006 [ 37]: ea41a3c6af4de161 -Block 0006 [ 38]: 3c6ce1d92d28b6f7 -Block 0006 [ 39]: 0f21c2beb3532f2f -Block 0006 [ 40]: e97e210adf0719ed -Block 0006 [ 41]: 675a5e9cb9db4567 -Block 0006 [ 42]: 31e1a7b269d6b285 -Block 0006 [ 43]: 44ac563ff5e53808 -Block 0006 [ 44]: d0d372a450bc4ada -Block 0006 [ 45]: 56920c3e83187e3f -Block 0006 [ 46]: 6050aeab33d1bc78 -Block 0006 [ 47]: d3531018166aadcb -Block 0006 [ 48]: e17ecc7ab99821d8 -Block 0006 [ 49]: 6d834b4f7339ffb0 -Block 0006 [ 50]: 3204684b11bc5980 -Block 0006 [ 51]: ea1151eabade396e -Block 0006 [ 52]: 6128c25e683d160c -Block 0006 [ 53]: 8c0ef568267bea08 -Block 0006 [ 54]: 03b1bd05ca7e5001 -Block 0006 [ 55]: 38cac78af248a0b9 -Block 0006 [ 56]: 10ffb451715cee6b -Block 0006 [ 57]: ef6d04a4f1ec1d74 -Block 0006 [ 58]: 6a297e69b85cd261 -Block 0006 [ 59]: 2bc18ab7193c4c21 -Block 0006 [ 60]: cb7f4bc462ef08b2 -Block 0006 [ 61]: 4ee107eb89fb137e -Block 0006 [ 62]: be0f603727354ad1 -Block 0006 [ 63]: afd1b9370c0d7968 -Block 0006 [ 64]: 0305d9efc0311865 -Block 0006 [ 65]: 1032112aeaa89455 -Block 0006 [ 66]: ce49fb76a0b83076 -Block 0006 [ 67]: ec6e151b76fa77d8 -Block 0006 [ 68]: 371418d689a2d5a4 -Block 0006 [ 69]: d9c5334e0c47a1cd -Block 0006 [ 70]: 913eaa395a285969 -Block 0006 [ 71]: f08763e057afa76e -Block 0006 [ 72]: 7631cdccff84471b -Block 0006 [ 73]: a342a0f5e6f83766 -Block 0006 [ 74]: 4d695ec17f4bbedb -Block 0006 [ 75]: 0b545b7424550c2a -Block 0006 [ 76]: ee0ed6a60ba12640 -Block 0006 [ 77]: feedf9c1dd874bbb -Block 0006 [ 78]: d98bc0d816cb95a7 -Block 0006 [ 79]: eb0741af1baad547 -Block 0006 [ 80]: 8e93a084a2424ad7 -Block 0006 [ 81]: c3cd385ac22c3c52 -Block 0006 [ 82]: 1c77772d8c2c0027 -Block 0006 [ 83]: 21b2168299524a1b -Block 0006 [ 84]: 9567267e57296be0 -Block 0006 [ 85]: b56c8396a3b091b0 -Block 0006 [ 86]: c7c10a15a74e8571 -Block 0006 [ 87]: ea1c3042c44207d6 -Block 0006 [ 88]: 6742e3b27f35614e -Block 0006 [ 89]: bce288c416a4a1a0 -Block 0006 [ 90]: 65fcd11e00339496 -Block 0006 [ 91]: e67e7eded2b536a1 -Block 0006 [ 92]: 5d098437a8a3ebd4 -Block 0006 [ 93]: 31795fa9106a4bc0 -Block 0006 [ 94]: a7ce44f182090b1b -Block 0006 [ 95]: 751260bb3a27d1aa -Block 0006 [ 96]: 33503caa08511bf0 -Block 0006 [ 97]: 536660418ba83289 -Block 0006 [ 98]: 87b8a807cc5293b5 -Block 0006 [ 99]: 51d441ea07531a62 -Block 0006 [100]: e81ae81332626b23 -Block 0006 [101]: 198f2e7ad0bdde83 -Block 0006 [102]: 6602ecd3435f38fa -Block 0006 [103]: ef4ed5ae8c04a191 -Block 0006 [104]: ad7118965ce19207 -Block 0006 [105]: beceb37944041b29 -Block 0006 [106]: 9950cc0263c218af -Block 0006 [107]: dd901769a63cf8ad -Block 0006 [108]: e937cffb5bcf57da -Block 0006 [109]: 757d31c1038a3efc -Block 0006 [110]: e707bd06b982ec9b -Block 0006 [111]: 344b079fdaefe261 -Block 0006 [112]: c948b487c045297f -Block 0006 [113]: 7c5efd50b6b9fc05 -Block 0006 [114]: 793518d8884351b5 -Block 0006 [115]: 03a220cc3b6b0bac -Block 0006 [116]: 8acaeeb52f5bf9db -Block 0006 [117]: 6b6ca24c516f3630 -Block 0006 [118]: f1f18a0d0dabb238 -Block 0006 [119]: 3b6dd6c80029e41c -Block 0006 [120]: 61e47fac13560b97 -Block 0006 [121]: 40f95b60e3f455b3 -Block 0006 [122]: c5c12caa860093d0 -Block 0006 [123]: d6eebf3713c71294 -Block 0006 [124]: e8771758ded57a2a -Block 0006 [125]: 2ffc02a6788b96fb -Block 0006 [126]: a40be550c4eddc5f -Block 0006 [127]: 81549e4142e1e679 -Block 0007 [ 0]: cbd74b5de20ab9d1 -Block 0007 [ 1]: 069f835c6c371c52 -Block 0007 [ 2]: 549921e520e39b0b -Block 0007 [ 3]: ecafef6e201dd829 -Block 0007 [ 4]: e895078c61997563 -Block 0007 [ 5]: eeee9440731fef0e -Block 0007 [ 6]: e95318ed6834ae3b -Block 0007 [ 7]: 027475fbbf66dcdf -Block 0007 [ 8]: a43a9293b3e38f3b -Block 0007 [ 9]: 1f9915da007f1592 -Block 0007 [ 10]: ae236073ad2102cc -Block 0007 [ 11]: 9e25b23b79285968 -Block 0007 [ 12]: 7b706f1d817899d4 -Block 0007 [ 13]: 84539b7008808bfe -Block 0007 [ 14]: 0950e99c573cedc3 -Block 0007 [ 15]: e66b2657900c9272 -Block 0007 [ 16]: 0b96a42e35afbc8b -Block 0007 [ 17]: d478a0000f487073 -Block 0007 [ 18]: 20ed2e94d9ad0fee -Block 0007 [ 19]: b2c41d52cfd89c96 -Block 0007 [ 20]: 34b98f3bdd359a1b -Block 0007 [ 21]: f4b8f4cd882469b5 -Block 0007 [ 22]: de740288c4dd8814 -Block 0007 [ 23]: bb6c3dcddd7bf5e1 -Block 0007 [ 24]: d4d1dd393a008f68 -Block 0007 [ 25]: 075eff96e269493a -Block 0007 [ 26]: b86e3218edd9bc08 -Block 0007 [ 27]: 42961d0ae2475362 -Block 0007 [ 28]: 36e917be404ad4ae -Block 0007 [ 29]: 7b85718ee0d3a183 -Block 0007 [ 30]: cff2414b88a46e65 -Block 0007 [ 31]: 4d16a9abae20145f -Block 0007 [ 32]: 9af2efcbda4d978b -Block 0007 [ 33]: a298fc0b755813ba -Block 0007 [ 34]: b25ada405da06d1e -Block 0007 [ 35]: fa055c5401c7d4f1 -Block 0007 [ 36]: 5510c526f81544ec -Block 0007 [ 37]: 5220eac16fa61f19 -Block 0007 [ 38]: ca9217915cfebd40 -Block 0007 [ 39]: 21dce31f7e0bbf6e -Block 0007 [ 40]: 735629aba76c5193 -Block 0007 [ 41]: 5650bebd950400f9 -Block 0007 [ 42]: d88244c4ea7e1988 -Block 0007 [ 43]: 978894543c3aced7 -Block 0007 [ 44]: 05ff38136fd6eb33 -Block 0007 [ 45]: b5688908d324bcdf -Block 0007 [ 46]: 2bbab520f88ef570 -Block 0007 [ 47]: 7a7c83601701b57c -Block 0007 [ 48]: 255efc836007b5e6 -Block 0007 [ 49]: 1b30dd3585c9b70b -Block 0007 [ 50]: a8bd72c447522052 -Block 0007 [ 51]: 1403f1e5e5fe134b -Block 0007 [ 52]: ff1216684f23c30b -Block 0007 [ 53]: fcd6579dc09d9f85 -Block 0007 [ 54]: fce3fac568271041 -Block 0007 [ 55]: b12b60ff57582a3f -Block 0007 [ 56]: 1e2dd9bba2500f5b -Block 0007 [ 57]: 9a7de93d03ced58a -Block 0007 [ 58]: 4d3df93e0200e39b -Block 0007 [ 59]: e1788059b82c7370 -Block 0007 [ 60]: 3f7ecc5a406cdd2f -Block 0007 [ 61]: 06349b60a500246a -Block 0007 [ 62]: 4c98b89ece9ff485 -Block 0007 [ 63]: 5bb16f3627484aa5 -Block 0007 [ 64]: 813f6f26460cc402 -Block 0007 [ 65]: 67410f23f96e2365 -Block 0007 [ 66]: 73e92652b073b3b0 -Block 0007 [ 67]: ebff9c4a696d5e98 -Block 0007 [ 68]: 9fb510070498976f -Block 0007 [ 69]: be13bab83c7eec26 -Block 0007 [ 70]: 653e037d01574d3a -Block 0007 [ 71]: e97d4817e3df0f7c -Block 0007 [ 72]: 5d7324090040b36e -Block 0007 [ 73]: bf38fc9dedb9f5f2 -Block 0007 [ 74]: e5c653ec3e6a4793 -Block 0007 [ 75]: 4da77df57c179235 -Block 0007 [ 76]: 2c649e286f0c43ed -Block 0007 [ 77]: be652eadd041075f -Block 0007 [ 78]: 79069677f34cffd3 -Block 0007 [ 79]: 8521077f81ee5286 -Block 0007 [ 80]: 32ffd57924cce5e3 -Block 0007 [ 81]: a08d28a183c2820f -Block 0007 [ 82]: 084ddd57f4e7a4af -Block 0007 [ 83]: f20ece27cf7b3070 -Block 0007 [ 84]: 92765b71341157c3 -Block 0007 [ 85]: fece00bc6540950b -Block 0007 [ 86]: d535974bf65eff54 -Block 0007 [ 87]: 56381f317bfdcbf4 -Block 0007 [ 88]: 99ad3075084c09b3 -Block 0007 [ 89]: e77a51ba4c432c1d -Block 0007 [ 90]: 23414e1a6a2cb731 -Block 0007 [ 91]: 2eb44b11c04487cc -Block 0007 [ 92]: eb7fa79b38d738b9 -Block 0007 [ 93]: 2186fe3f06fe37be -Block 0007 [ 94]: 09d20f838aed21e6 -Block 0007 [ 95]: 20763bae6782ed73 -Block 0007 [ 96]: 7f77e32f99cb82a5 -Block 0007 [ 97]: 54732576ff03cd99 -Block 0007 [ 98]: f24943112b33c21b -Block 0007 [ 99]: ba870e486d3d25fb -Block 0007 [100]: f2f0d442cdee87f6 -Block 0007 [101]: 9967a1189153605a -Block 0007 [102]: 0659c8d86e94106e -Block 0007 [103]: d15c1188dbf88255 -Block 0007 [104]: 49c1b38e89bff99e -Block 0007 [105]: 897a56428d590bea -Block 0007 [106]: 8a69fc0a8d9fdc49 -Block 0007 [107]: 4053e20eedb6240f -Block 0007 [108]: bda7f38ff8060e5b -Block 0007 [109]: 26662d48fec1b428 -Block 0007 [110]: dd1807eb486ca979 -Block 0007 [111]: fbd38679dbda71ce -Block 0007 [112]: 7a003a6a3f9a8337 -Block 0007 [113]: 1b97d4193f09c77c -Block 0007 [114]: 4102e8562e63c88e -Block 0007 [115]: d7113253d81dab54 -Block 0007 [116]: fb4d461dbb0f2503 -Block 0007 [117]: 6ce29c2c44c5bc85 -Block 0007 [118]: ad164eeb092acedc -Block 0007 [119]: 8dcd7d0a350897e6 -Block 0007 [120]: d31c533da647ca96 -Block 0007 [121]: 0fbbd94ef2a850a8 -Block 0007 [122]: 87a1f639157371a0 -Block 0007 [123]: 963a2edc6b8eea2b -Block 0007 [124]: 4d85f73159a7c1d2 -Block 0007 [125]: 521258a9c11cf845 -Block 0007 [126]: b1e156d3aded4403 -Block 0007 [127]: bab4461b92a6d246 -Block 0008 [ 0]: 49810a135d23848d -Block 0008 [ 1]: c5fb6b64acec2f07 -Block 0008 [ 2]: b21039c31baa6a85 -Block 0008 [ 3]: 59ddd031e891f6c1 -Block 0008 [ 4]: fbd02629488b6f03 -Block 0008 [ 5]: 750daf568847dcec -Block 0008 [ 6]: 5a831b03655916bb -Block 0008 [ 7]: 13e56690ccfea95e -Block 0008 [ 8]: 8d0ebc46bbca100f -Block 0008 [ 9]: ea51440b7e612514 -Block 0008 [ 10]: 335baaae9400aaac -Block 0008 [ 11]: b5933841b061ce8a -Block 0008 [ 12]: 19508e7ed81c705a -Block 0008 [ 13]: 1fab466e7a08e521 -Block 0008 [ 14]: 0eb76ec6880aabc5 -Block 0008 [ 15]: 38ede80f16088a3f -Block 0008 [ 16]: 9bd9db78e66ba36c -Block 0008 [ 17]: 59ac330b234f7859 -Block 0008 [ 18]: 5471aae498410f2d -Block 0008 [ 19]: e46c4a537ac489fc -Block 0008 [ 20]: 1e150a4fc119f670 -Block 0008 [ 21]: 1f46297a17317c1b -Block 0008 [ 22]: 77ea0959747eff81 -Block 0008 [ 23]: 49fd0b629bb908a2 -Block 0008 [ 24]: f992e47ff5e9d868 -Block 0008 [ 25]: a3413f49c7c9d95e -Block 0008 [ 26]: cf82992aa2d170b0 -Block 0008 [ 27]: 6c5af6b653da5d23 -Block 0008 [ 28]: db2c84f1046363a5 -Block 0008 [ 29]: 0162677ae885ebbd -Block 0008 [ 30]: 4ad08976d9ac5cd5 -Block 0008 [ 31]: cab94bb197e87fde -Block 0008 [ 32]: b8108a671bd72082 -Block 0008 [ 33]: 0bc24e9246cc32df -Block 0008 [ 34]: b8372308888de12a -Block 0008 [ 35]: a3c9f48c3da21e62 -Block 0008 [ 36]: 4950e962fb134b36 -Block 0008 [ 37]: b2a057b57cbb42f8 -Block 0008 [ 38]: 48d43b3afb165bcf -Block 0008 [ 39]: 437889cf607a9e60 -Block 0008 [ 40]: 06151c357288e43f -Block 0008 [ 41]: dd22524b377abd1f -Block 0008 [ 42]: 2991dc1a5ba6a272 -Block 0008 [ 43]: 6e8462e3c4c4a52e -Block 0008 [ 44]: c29b6c46e28d584e -Block 0008 [ 45]: c42ea1bbbc1b2850 -Block 0008 [ 46]: 7dbaebcb56d11ba8 -Block 0008 [ 47]: 708d3efac76f39a9 -Block 0008 [ 48]: 4a2f95422230c076 -Block 0008 [ 49]: 9a0a954e98315e7b -Block 0008 [ 50]: 5defbf0083498f26 -Block 0008 [ 51]: 52bf33f0e7c85da4 -Block 0008 [ 52]: 59145e8443478adc -Block 0008 [ 53]: 6b19b474dd7f76ba -Block 0008 [ 54]: 3f45c02a6b921241 -Block 0008 [ 55]: 840224b795f8b504 -Block 0008 [ 56]: f0d45196a750b0b0 -Block 0008 [ 57]: 25a127d6701f5652 -Block 0008 [ 58]: ff91a51c1a397e29 -Block 0008 [ 59]: 2dcafc69b2117ecc -Block 0008 [ 60]: 6435dac1235931b5 -Block 0008 [ 61]: 0a4ad316c9bbe7c8 -Block 0008 [ 62]: 859f3b5ce4df8f7d -Block 0008 [ 63]: 2160d3995fc309d1 -Block 0008 [ 64]: f75150bda784be85 -Block 0008 [ 65]: 43209c0f168d6ccd -Block 0008 [ 66]: d722ce6d5236fe8e -Block 0008 [ 67]: 61ab9b1730e0a0f2 -Block 0008 [ 68]: 0dd835d189f07128 -Block 0008 [ 69]: 6262694c58a27366 -Block 0008 [ 70]: 953fcc80a60a385a -Block 0008 [ 71]: d66a9dc26fa4270f -Block 0008 [ 72]: 8c576d5d2bdc352b -Block 0008 [ 73]: 2393381634b054c8 -Block 0008 [ 74]: b7c1d4a34dd6fa51 -Block 0008 [ 75]: 78e43d59bd6ee5c7 -Block 0008 [ 76]: b0d26b781e9db988 -Block 0008 [ 77]: a3d1a106c4bdce54 -Block 0008 [ 78]: 2d0ea43d9f3e1ccb -Block 0008 [ 79]: b5190de85c5ede44 -Block 0008 [ 80]: db944f7005a335dc -Block 0008 [ 81]: 4792f06c1c01aa49 -Block 0008 [ 82]: 447bc88f6aad8315 -Block 0008 [ 83]: 2e0f90160429ba9e -Block 0008 [ 84]: 8d3e34c597304f3b -Block 0008 [ 85]: b074f272830745ca -Block 0008 [ 86]: c57f98d934bfb801 -Block 0008 [ 87]: c4f9f1e0778d1b75 -Block 0008 [ 88]: 7b65c984cd76a09b -Block 0008 [ 89]: 99ab030c32f5c65f -Block 0008 [ 90]: 533ed86b000db977 -Block 0008 [ 91]: fb2e743093cb4a6a -Block 0008 [ 92]: a037ae30c9bbab47 -Block 0008 [ 93]: b79a3d0425bb1fb5 -Block 0008 [ 94]: 8f3bffc4de6c8a1c -Block 0008 [ 95]: 337f68561fca37de -Block 0008 [ 96]: 71e8a7aecc2c8e5b -Block 0008 [ 97]: a069fdd75748f6c2 -Block 0008 [ 98]: d0b72d9d6f35f9ff -Block 0008 [ 99]: c60ddb9972fa9637 -Block 0008 [100]: 67d8d738d603c096 -Block 0008 [101]: c01884c88af7e5eb -Block 0008 [102]: 233ea0fb4074af49 -Block 0008 [103]: fc512d625685a05c -Block 0008 [104]: 825a1ad4f9b32360 -Block 0008 [105]: a8140fbebb3e9f88 -Block 0008 [106]: 2c75b6eb2e0c729d -Block 0008 [107]: 2245291ba5bb71f1 -Block 0008 [108]: 0f8b727153c9dd26 -Block 0008 [109]: 5ffbc2a779f4f875 -Block 0008 [110]: 5403a28def13fdb7 -Block 0008 [111]: e2b550641220e443 -Block 0008 [112]: daab51866915e110 -Block 0008 [113]: 6ef62f9d1561ddd8 -Block 0008 [114]: 07be6b68fffb670e -Block 0008 [115]: 8b2f23c509e7a758 -Block 0008 [116]: d3f2d3974ac24e65 -Block 0008 [117]: d03efadd3456fe74 -Block 0008 [118]: 24e47b1737f64d0b -Block 0008 [119]: 096eacd3c4542623 -Block 0008 [120]: 69004ef3d7635037 -Block 0008 [121]: f58c7cb54f9a7dc0 -Block 0008 [122]: 596f8e75930c52d7 -Block 0008 [123]: 020df1d3b0948128 -Block 0008 [124]: 7c47d5b3983b3c68 -Block 0008 [125]: 052123dc6c678c3f -Block 0008 [126]: 0960000fab5b881a -Block 0008 [127]: d79461cc07c58a09 -Block 0009 [ 0]: 8f10324fec56e694 -Block 0009 [ 1]: d7ed856c90f1792b -Block 0009 [ 2]: 81c93c47655d28e1 -Block 0009 [ 3]: 00f1a9f07340d401 -Block 0009 [ 4]: c1f826207229e1de -Block 0009 [ 5]: f0d4e3753fe51344 -Block 0009 [ 6]: c247c5e6b921fa36 -Block 0009 [ 7]: 533b9c2edadba55c -Block 0009 [ 8]: 9bdbbede3a72fa25 -Block 0009 [ 9]: ce4640f3d00d0efb -Block 0009 [ 10]: a81d8a468d49bda4 -Block 0009 [ 11]: 8b5d127765966b11 -Block 0009 [ 12]: 9e0523bb613da0a8 -Block 0009 [ 13]: 0d384fbafe2fbb48 -Block 0009 [ 14]: 9797872ada1e40e6 -Block 0009 [ 15]: dc4f1ab87690ac0c -Block 0009 [ 16]: df15fe4e883a1279 -Block 0009 [ 17]: 309fe51a46dbacbb -Block 0009 [ 18]: 514715fbb6e3495e -Block 0009 [ 19]: d84f1004b3b0fee1 -Block 0009 [ 20]: 4eedebbcc5229e81 -Block 0009 [ 21]: 6a462f88c59008c8 -Block 0009 [ 22]: f77c6c77c51c98f4 -Block 0009 [ 23]: 33fb105b08c16694 -Block 0009 [ 24]: f99547074a293b3d -Block 0009 [ 25]: 249c163feda9fd8d -Block 0009 [ 26]: dcad1e67251ceb28 -Block 0009 [ 27]: 804887249ad5f39b -Block 0009 [ 28]: 2308ad17da1325e8 -Block 0009 [ 29]: 86597bbcfaa35975 -Block 0009 [ 30]: bd680ac7468b0754 -Block 0009 [ 31]: 342c12b38df254c7 -Block 0009 [ 32]: af68032dd2f83449 -Block 0009 [ 33]: 27bb2dfa39194e08 -Block 0009 [ 34]: 3f59dd7618ff8dc0 -Block 0009 [ 35]: 0107202b45469b55 -Block 0009 [ 36]: c0d5858005acdaeb -Block 0009 [ 37]: 458e2dd418b389ca -Block 0009 [ 38]: 6797aa6e279ff000 -Block 0009 [ 39]: 377d84675641a0b2 -Block 0009 [ 40]: 8ab76786012cf2ca -Block 0009 [ 41]: 682e9edbf126ce86 -Block 0009 [ 42]: 2c8027347b86cdb8 -Block 0009 [ 43]: a6b43bd58d550cc3 -Block 0009 [ 44]: c85e4ed50e2825fd -Block 0009 [ 45]: aa468c840ed8925c -Block 0009 [ 46]: 33dce055f80b3e04 -Block 0009 [ 47]: 5cf91043e6438686 -Block 0009 [ 48]: 7027e073ee1e6a0d -Block 0009 [ 49]: d6523597b0efd084 -Block 0009 [ 50]: 06beff55ac8ad958 -Block 0009 [ 51]: 11a7295f9c49415c -Block 0009 [ 52]: 2d6ad8ebe51699e6 -Block 0009 [ 53]: c669cf5a75cded9c -Block 0009 [ 54]: f9cbe12aaa048c0f -Block 0009 [ 55]: 61f64d7b974376ec -Block 0009 [ 56]: 27ed0511d5d62b2e -Block 0009 [ 57]: d6c99d8a5a63b963 -Block 0009 [ 58]: 6cf61de8bf3b3c34 -Block 0009 [ 59]: 260c0c298313625b -Block 0009 [ 60]: 5f2f13989a4e3ac7 -Block 0009 [ 61]: f6348e4014ced3ea -Block 0009 [ 62]: 8f64770fff6e8e52 -Block 0009 [ 63]: d98d39df837a1d24 -Block 0009 [ 64]: 42cd4f3d324607f9 -Block 0009 [ 65]: 6a05b3eb6bc86b52 -Block 0009 [ 66]: 54ab7895dfd5ef3e -Block 0009 [ 67]: 87ce4c55ce837d03 -Block 0009 [ 68]: 0dd5bf6275289bde -Block 0009 [ 69]: 013249225e8064f1 -Block 0009 [ 70]: 9e3d201d4565f7c8 -Block 0009 [ 71]: 2fdae8c6facce85b -Block 0009 [ 72]: d5bc766cfb5a3a28 -Block 0009 [ 73]: 439960f185fce94a -Block 0009 [ 74]: ece23c957b11e9d5 -Block 0009 [ 75]: f6e0b3533a9f3f95 -Block 0009 [ 76]: a22fc51d008e4bf9 -Block 0009 [ 77]: cb680f02e1990cfa -Block 0009 [ 78]: 185c7bdaa5dcf252 -Block 0009 [ 79]: 453f6e9af5d0f170 -Block 0009 [ 80]: aa5b6c77c3fb3d90 -Block 0009 [ 81]: 93eb8c30d16ffc4d -Block 0009 [ 82]: a39c62ec54134634 -Block 0009 [ 83]: e0a7caafc2db836c -Block 0009 [ 84]: 83875234b21af749 -Block 0009 [ 85]: da643b9c28847b1f -Block 0009 [ 86]: 351aa155caaea342 -Block 0009 [ 87]: 0bcdf67e7b60d68f -Block 0009 [ 88]: dd02d20ca2b455de -Block 0009 [ 89]: d1ff457af51b13e2 -Block 0009 [ 90]: ad85fd80a21341a7 -Block 0009 [ 91]: 49e4c98c7993c631 -Block 0009 [ 92]: 10e271200df6f8dd -Block 0009 [ 93]: 3f2f7eb823487a2f -Block 0009 [ 94]: c5a47081e476ea08 -Block 0009 [ 95]: 8d9ce2305405aa84 -Block 0009 [ 96]: 458a19672aed7d90 -Block 0009 [ 97]: 717e5c2a2b0072a1 -Block 0009 [ 98]: 798ca280ae0916d9 -Block 0009 [ 99]: 5682c3918180e4e3 -Block 0009 [100]: 4415c9d3b81cf579 -Block 0009 [101]: f33257c46ac83ff5 -Block 0009 [102]: d8a0f2223c150a81 -Block 0009 [103]: 754789e94abc1903 -Block 0009 [104]: 2ad6c644cef873b3 -Block 0009 [105]: 89c251b261082328 -Block 0009 [106]: 677d37f1ba1b3057 -Block 0009 [107]: cdd6475b9ad6217d -Block 0009 [108]: 7f4ded50c6fe7f40 -Block 0009 [109]: a4cda2e8d74eaceb -Block 0009 [110]: 904b3a87abc580f1 -Block 0009 [111]: 4e7cbfca207fd75e -Block 0009 [112]: 77bf2f8d2fb3795a -Block 0009 [113]: c688b3b54922e3c2 -Block 0009 [114]: 2ecfaff08f7126c4 -Block 0009 [115]: cc4d3d8658ed74cc -Block 0009 [116]: b89ce6baa994bc9a -Block 0009 [117]: 3730d3da60644764 -Block 0009 [118]: a7a865cceffafce8 -Block 0009 [119]: 1109b27e1103515a -Block 0009 [120]: 1d4c47d0c96e6910 -Block 0009 [121]: 482ffef73d24e21c -Block 0009 [122]: 21c2b643561ae19e -Block 0009 [123]: 1afe123081bf17f6 -Block 0009 [124]: 482515b28e1e40d7 -Block 0009 [125]: 60089b8f8007589c -Block 0009 [126]: 9a36c2163a57af6b -Block 0009 [127]: 2691dac7ff440545 -Block 0010 [ 0]: 4c0cae7a5f3383b2 -Block 0010 [ 1]: 2746eaf25922ad05 -Block 0010 [ 2]: e9e80804d1b3f226 -Block 0010 [ 3]: 59fa228adb1eda14 -Block 0010 [ 4]: e582cbb4f3b9576f -Block 0010 [ 5]: b80c019e0ea7eab8 -Block 0010 [ 6]: a73739cc9db1ad73 -Block 0010 [ 7]: a7b0cd338fa1cf1b -Block 0010 [ 8]: 252c67d72c6ac4a8 -Block 0010 [ 9]: 0c3c0e6781f3eb81 -Block 0010 [ 10]: fe1f102df9f0b806 -Block 0010 [ 11]: b89b9e173019c6cf -Block 0010 [ 12]: c5013011387f50f6 -Block 0010 [ 13]: 2eab89d0488a9a7e -Block 0010 [ 14]: 02ca43db72497e3e -Block 0010 [ 15]: 307203eb009cf75b -Block 0010 [ 16]: 05b01e3aefd4878f -Block 0010 [ 17]: 3612ac74f0d5170a -Block 0010 [ 18]: 8daf36dce9f2e9a7 -Block 0010 [ 19]: 54c3330f25910c57 -Block 0010 [ 20]: f87715fa424a0839 -Block 0010 [ 21]: ad1332fccae47161 -Block 0010 [ 22]: b8a422e2b5582533 -Block 0010 [ 23]: e5befd94beb663cd -Block 0010 [ 24]: 60c4ea23220d90b7 -Block 0010 [ 25]: 901eaf711ce8764e -Block 0010 [ 26]: d6580e9182bd3903 -Block 0010 [ 27]: b65cac8618125e29 -Block 0010 [ 28]: 9ecf0b829ca00680 -Block 0010 [ 29]: 38a8a24b66b897f0 -Block 0010 [ 30]: 484c4c95e098e64a -Block 0010 [ 31]: 1a6ae9168d0447cd -Block 0010 [ 32]: cf313c511f61b901 -Block 0010 [ 33]: 8bae89882d5e7a01 -Block 0010 [ 34]: 656441ea59351b15 -Block 0010 [ 35]: e31514645b38d9a0 -Block 0010 [ 36]: 1d6dadf5597c1815 -Block 0010 [ 37]: 3da76ad8a5c580bb -Block 0010 [ 38]: e5e3c09d8c592f29 -Block 0010 [ 39]: 16f27dddce30cf95 -Block 0010 [ 40]: 79f1bea8070d35a0 -Block 0010 [ 41]: bd7b9a3490b907ad -Block 0010 [ 42]: a07cc139ec3bd656 -Block 0010 [ 43]: 5233b458e20d03f6 -Block 0010 [ 44]: 4acbe33dcfa5c649 -Block 0010 [ 45]: 87d5ad1d40b8b202 -Block 0010 [ 46]: 3976aa47398125c9 -Block 0010 [ 47]: d291614f69de847e -Block 0010 [ 48]: 13a16f5b281fb9d4 -Block 0010 [ 49]: 1c797bc612ca1f82 -Block 0010 [ 50]: f5beae4f224c9321 -Block 0010 [ 51]: 7db0d5ed4c07630d -Block 0010 [ 52]: beb7330445c2ca6d -Block 0010 [ 53]: e731beeb9d467c0b -Block 0010 [ 54]: 1d54feb368611ee7 -Block 0010 [ 55]: 867e42cb54d1de3c -Block 0010 [ 56]: 0cbed3a4b9f2cb06 -Block 0010 [ 57]: 5fd4987bd2232365 -Block 0010 [ 58]: cdb5d06722188f40 -Block 0010 [ 59]: 1874ea0a91f80e61 -Block 0010 [ 60]: a2eee7960b21f392 -Block 0010 [ 61]: 9be712e323a7b2c3 -Block 0010 [ 62]: 34579ed0a814abd8 -Block 0010 [ 63]: f91ecee07025c62c -Block 0010 [ 64]: b1152f25e6c4975e -Block 0010 [ 65]: 5423198f63ac9610 -Block 0010 [ 66]: 2c047a3e33046d0d -Block 0010 [ 67]: e4b7fb2fa554697f -Block 0010 [ 68]: 0a5119fe103e2e42 -Block 0010 [ 69]: 76628fe4b3ddc06e -Block 0010 [ 70]: e25bdee1ab84b29f -Block 0010 [ 71]: b3c66c128c6e172b -Block 0010 [ 72]: 1c1ed217a2064416 -Block 0010 [ 73]: 09c7294bb8a49019 -Block 0010 [ 74]: 50eb01126d9ce564 -Block 0010 [ 75]: 940cc33aa111befd -Block 0010 [ 76]: 3de5ddd735a13811 -Block 0010 [ 77]: 7588285dc6ddede1 -Block 0010 [ 78]: 49346c2f2215fc55 -Block 0010 [ 79]: 48b6752b1b61c33f -Block 0010 [ 80]: e26c26a0794051fe -Block 0010 [ 81]: 31d38c5a3509612d -Block 0010 [ 82]: 6146c61851115d95 -Block 0010 [ 83]: 47e6aabfc5ff3e65 -Block 0010 [ 84]: 3a839fe889b3af91 -Block 0010 [ 85]: ba2d3f73d2136b84 -Block 0010 [ 86]: 16e05e4258596fd5 -Block 0010 [ 87]: f2e9314743ae4056 -Block 0010 [ 88]: 4ed85292abee248a -Block 0010 [ 89]: 4180aadcaeabdba4 -Block 0010 [ 90]: 7243e54a9e5b66a6 -Block 0010 [ 91]: 23fefc955c79e003 -Block 0010 [ 92]: ea06ca4f79b525c8 -Block 0010 [ 93]: a5064ee3381b5ab3 -Block 0010 [ 94]: c4893642bf4855fd -Block 0010 [ 95]: cc7e6a851f510ac8 -Block 0010 [ 96]: 275f83a560de48eb -Block 0010 [ 97]: dadbbca628c47c37 -Block 0010 [ 98]: 43ea6bf21aaa217c -Block 0010 [ 99]: f6671c25326c25e2 -Block 0010 [100]: 9fe3da8da6fd66b1 -Block 0010 [101]: 1035284ec7d5cce8 -Block 0010 [102]: bcb76977f690ebd0 -Block 0010 [103]: 97c1c31326790609 -Block 0010 [104]: 60fe481489c8c7e0 -Block 0010 [105]: af3be98f8809a66e -Block 0010 [106]: 9efe199ec3055305 -Block 0010 [107]: a4178436d0019dc1 -Block 0010 [108]: adbe3754fd2a5efc -Block 0010 [109]: 13ba4c060bf37fa5 -Block 0010 [110]: 966fb1a7c7e3c345 -Block 0010 [111]: 24bc28eacb75fba4 -Block 0010 [112]: 6f3e77e11f50a350 -Block 0010 [113]: f10a1ad34d072b69 -Block 0010 [114]: a5eb7b5284a30af7 -Block 0010 [115]: 452bea2326fc9279 -Block 0010 [116]: 4f2620c07573e27c -Block 0010 [117]: 12ec5c1510264364 -Block 0010 [118]: 1f80f928362f38e2 -Block 0010 [119]: 5f237e27d0f4ecb9 -Block 0010 [120]: a339a5fb171dddbe -Block 0010 [121]: 2bfc05c38f009206 -Block 0010 [122]: b99f8b1cfb89a9fd -Block 0010 [123]: f69ed6324e29ded2 -Block 0010 [124]: e106652bf5c4359c -Block 0010 [125]: 43e7d05dd5d3a025 -Block 0010 [126]: 95abfc33449e7724 -Block 0010 [127]: 48442542e1841324 -Block 0011 [ 0]: 7d75ce5fa7bff5b8 -Block 0011 [ 1]: 7f2e89d0a725ab36 -Block 0011 [ 2]: 2c3c03e9df7c7105 -Block 0011 [ 3]: 74b4814e87507e51 -Block 0011 [ 4]: 05197c1924b2f07e -Block 0011 [ 5]: 7120ecede87fd521 -Block 0011 [ 6]: ad19163b841847fa -Block 0011 [ 7]: 9f763fdab3d9b36b -Block 0011 [ 8]: eb936f33fd7b5ff7 -Block 0011 [ 9]: f120e7f05bb937d1 -Block 0011 [ 10]: b6f7cc7f4fe84750 -Block 0011 [ 11]: dbd7c9d78d20bc0d -Block 0011 [ 12]: 87e06285a63783c9 -Block 0011 [ 13]: 0d5ddbfd00f5ea5b -Block 0011 [ 14]: 7c489013dd470b1b -Block 0011 [ 15]: 83ec59292926733c -Block 0011 [ 16]: ac257f950008cd69 -Block 0011 [ 17]: a2d7ecc111c3a0a9 -Block 0011 [ 18]: 760ba922715999ea -Block 0011 [ 19]: 8f4b4e79229250d8 -Block 0011 [ 20]: 93698a5454d1e5d2 -Block 0011 [ 21]: 356f4c72fdef4c47 -Block 0011 [ 22]: 016317b9a7bab55c -Block 0011 [ 23]: a065ec2988075b38 -Block 0011 [ 24]: 74954845ab8f5e37 -Block 0011 [ 25]: 695fcb3c9b2022ef -Block 0011 [ 26]: b4cefacc655d91b0 -Block 0011 [ 27]: 3102128e494987be -Block 0011 [ 28]: de17e55c8e103800 -Block 0011 [ 29]: 99dcb0473277c31d -Block 0011 [ 30]: 3bf83e1004706630 -Block 0011 [ 31]: 8290bfd936d4b300 -Block 0011 [ 32]: 025b012c50744ed5 -Block 0011 [ 33]: 6434159aecf89ea5 -Block 0011 [ 34]: 5bcd6a922a522af2 -Block 0011 [ 35]: 0a32efa2193ef3c4 -Block 0011 [ 36]: 413e02628d5bba55 -Block 0011 [ 37]: 10e072e4d52b2e8f -Block 0011 [ 38]: 308bbdf27f5c5ec1 -Block 0011 [ 39]: e0231b4d70374d20 -Block 0011 [ 40]: b938efa9c5cb6803 -Block 0011 [ 41]: b6b7f40f63d57ca1 -Block 0011 [ 42]: 1cd0b3715b504879 -Block 0011 [ 43]: 41f040cbbd927796 -Block 0011 [ 44]: b8dd16700e5f1a81 -Block 0011 [ 45]: 86b2df0d5ef0af94 -Block 0011 [ 46]: 37cc4cfbfd2e8337 -Block 0011 [ 47]: 65c41fe7bf004d02 -Block 0011 [ 48]: 1a525ca0ea028384 -Block 0011 [ 49]: 6e32af56d64bae96 -Block 0011 [ 50]: 7c67c0b0cf2354d1 -Block 0011 [ 51]: 9e6557336cad5f50 -Block 0011 [ 52]: 652baadcc1b11edc -Block 0011 [ 53]: ed9a449e0ff3d91e -Block 0011 [ 54]: b7f42bb2d1b8044f -Block 0011 [ 55]: 6e10cd8504194195 -Block 0011 [ 56]: 44324821824d14a3 -Block 0011 [ 57]: 7748f553748cce54 -Block 0011 [ 58]: 3388449102791469 -Block 0011 [ 59]: 525f839f18b87655 -Block 0011 [ 60]: 2239393539b2c86b -Block 0011 [ 61]: e3a316be17ab8107 -Block 0011 [ 62]: a6eddc9b040c199f -Block 0011 [ 63]: 62d1e6c9fb86d8a3 -Block 0011 [ 64]: 46d51d807d430972 -Block 0011 [ 65]: 4105dab993959ac0 -Block 0011 [ 66]: 5ffc090c3a929ead -Block 0011 [ 67]: 96e520ccdf93dfd2 -Block 0011 [ 68]: b6c210605de8d022 -Block 0011 [ 69]: 36f0c76223b2118b -Block 0011 [ 70]: 1ac03a506b84230a -Block 0011 [ 71]: 56702701f4c5a27b -Block 0011 [ 72]: 9a945ff533305f3d -Block 0011 [ 73]: 7cbea0f13d5dbf79 -Block 0011 [ 74]: 82274a2996cde7eb -Block 0011 [ 75]: 2c2d132fb2f58964 -Block 0011 [ 76]: b2b87eca7228d56c -Block 0011 [ 77]: 3a317d54a1d0048b -Block 0011 [ 78]: bf30630cceb13b33 -Block 0011 [ 79]: a4bd496da07527c5 -Block 0011 [ 80]: 16be6e1abab4689a -Block 0011 [ 81]: 870725dc928766c0 -Block 0011 [ 82]: b48e00a90347041a -Block 0011 [ 83]: 6d067251f331ae0c -Block 0011 [ 84]: 8f71090940cfca1d -Block 0011 [ 85]: 8e34c70df30e8c5a -Block 0011 [ 86]: bff713c1bda82f91 -Block 0011 [ 87]: 155d9e44ef0fc0b8 -Block 0011 [ 88]: 9bcec01ffc3698d1 -Block 0011 [ 89]: 3a338a45cf09ac03 -Block 0011 [ 90]: e36cd0e18e526e88 -Block 0011 [ 91]: 15f9626e5c77678f -Block 0011 [ 92]: 957b1847d0c89faf -Block 0011 [ 93]: 4a01a3d9db34519f -Block 0011 [ 94]: a03bdf4dac769213 -Block 0011 [ 95]: f4e37a15121e7c8b -Block 0011 [ 96]: 0374f95ee3ef5a2c -Block 0011 [ 97]: 6c849b52d5534909 -Block 0011 [ 98]: 28ff9c5ff87184d2 -Block 0011 [ 99]: a4223029e0b33123 -Block 0011 [100]: d149a075822d818d -Block 0011 [101]: 0a44cb9a3f0ef28d -Block 0011 [102]: df4da9204f1c039c -Block 0011 [103]: afac39d02c8afb71 -Block 0011 [104]: eee021deffed678d -Block 0011 [105]: d9a05d6d5b4f100d -Block 0011 [106]: 1cc09a57c9758d0d -Block 0011 [107]: 0e7556e329adbf17 -Block 0011 [108]: 13e6e5b2d9c0dd04 -Block 0011 [109]: bd463eb78a6d781f -Block 0011 [110]: a574a71e8b9bb8e0 -Block 0011 [111]: e4c7da41ff696fb5 -Block 0011 [112]: eb5ed56726da5bc6 -Block 0011 [113]: 5c07bbf9cd4f0539 -Block 0011 [114]: 501627fbad7ec4e0 -Block 0011 [115]: 95b770f2c1cb8346 -Block 0011 [116]: 518881e38b2824fb -Block 0011 [117]: b18951d660d4b6a8 -Block 0011 [118]: 90a160786aeb030a -Block 0011 [119]: c410a74193a2e691 -Block 0011 [120]: ef904dddb38d6417 -Block 0011 [121]: 3bbe7862a4fcb3e3 -Block 0011 [122]: c479db89c8121be5 -Block 0011 [123]: 4b36d107268a163c -Block 0011 [124]: e3d1ba33dc695cda -Block 0011 [125]: e81631c9b7968018 -Block 0011 [126]: 253f79b55ca7e1b0 -Block 0011 [127]: fd8e591864884fe2 -Block 0012 [ 0]: 1a0f6b8bd90a8f6b -Block 0012 [ 1]: 3f148e75f890d12e -Block 0012 [ 2]: b0e4ad7278b53c00 -Block 0012 [ 3]: 5f75cd0153783d80 -Block 0012 [ 4]: 4e56a55713194945 -Block 0012 [ 5]: 73de9e24d2add2f8 -Block 0012 [ 6]: 5c2bb2c5c8abb760 -Block 0012 [ 7]: ecceb3494123cdcb -Block 0012 [ 8]: aa6fae9b4396b84e -Block 0012 [ 9]: efde2dcd2b59052c -Block 0012 [ 10]: 2ef556dc87d5253f -Block 0012 [ 11]: a3991d1311a4f9b3 -Block 0012 [ 12]: b7059de7de2bb844 -Block 0012 [ 13]: bf011dca91c7e273 -Block 0012 [ 14]: c2e6134ad765db8b -Block 0012 [ 15]: c1919d11a4b00cb1 -Block 0012 [ 16]: 86523fcc48c8f0f6 -Block 0012 [ 17]: c250fe494cd0cb21 -Block 0012 [ 18]: c399c6549c49e114 -Block 0012 [ 19]: 3a820ca5281b0fff -Block 0012 [ 20]: 8559650005ca9fc7 -Block 0012 [ 21]: 730dd261c68edca1 -Block 0012 [ 22]: 4f28617d9790df64 -Block 0012 [ 23]: 83c104c3c5ea6f97 -Block 0012 [ 24]: 0fa8dd73f8607c76 -Block 0012 [ 25]: 272f75c6177ae094 -Block 0012 [ 26]: ddb498b135aac7a1 -Block 0012 [ 27]: 8c0d78b3e4e48313 -Block 0012 [ 28]: 43d1f1cf0c96233a -Block 0012 [ 29]: c9c9b06a3b555527 -Block 0012 [ 30]: abd3b3725979428f -Block 0012 [ 31]: 8669315d316ad7a3 -Block 0012 [ 32]: 5292d2808a046200 -Block 0012 [ 33]: a63717f5f4a24e37 -Block 0012 [ 34]: 41ba0350e19b3a75 -Block 0012 [ 35]: 43f2101a657de10a -Block 0012 [ 36]: d0095f929c14a82b -Block 0012 [ 37]: ac0883a2214af148 -Block 0012 [ 38]: 2c1fe77ae7fde7cc -Block 0012 [ 39]: 493d2debae0e95e4 -Block 0012 [ 40]: f3c3c98e07ecc949 -Block 0012 [ 41]: b370498229161188 -Block 0012 [ 42]: 70ba98dc3b17b2ea -Block 0012 [ 43]: d8009b297ec52812 -Block 0012 [ 44]: cbe0b026ba0c41a5 -Block 0012 [ 45]: 1d3e537f321cd9b4 -Block 0012 [ 46]: a691dda68fa6a57a -Block 0012 [ 47]: 77d7e2829a6fd056 -Block 0012 [ 48]: c61add89b7e17a03 -Block 0012 [ 49]: 8e61eaab8e9c4898 -Block 0012 [ 50]: 3650b222230bea53 -Block 0012 [ 51]: de129062ae4d78d2 -Block 0012 [ 52]: da20af31bbb90c04 -Block 0012 [ 53]: 4b00bae7eb8dbc7d -Block 0012 [ 54]: ed4567ce76c1d897 -Block 0012 [ 55]: 1e2a7f8a0d959306 -Block 0012 [ 56]: fefb51b8fc4b90db -Block 0012 [ 57]: e0aa1ee1bfca5d5e -Block 0012 [ 58]: 6732b1b2d7b4938b -Block 0012 [ 59]: 340a69cde3609951 -Block 0012 [ 60]: ed09fdea837845c0 -Block 0012 [ 61]: a06202e5db3a827b -Block 0012 [ 62]: cdb5fc28fd93966b -Block 0012 [ 63]: f4db11521a821378 -Block 0012 [ 64]: 0684d55a3b041eed -Block 0012 [ 65]: 41b1618f070e568b -Block 0012 [ 66]: 7c8e0bb4b5dfeab9 -Block 0012 [ 67]: a66bc80228683b6c -Block 0012 [ 68]: 0b28c1b7a888dd1d -Block 0012 [ 69]: c580445de500dcf5 -Block 0012 [ 70]: 93e59092902873da -Block 0012 [ 71]: 7b2fd4c1e522b87d -Block 0012 [ 72]: e4fed98fd79e533c -Block 0012 [ 73]: 496f026546e203a8 -Block 0012 [ 74]: 6d23a500ffb4fb77 -Block 0012 [ 75]: c47216920d8051ee -Block 0012 [ 76]: 31f82579385688b5 -Block 0012 [ 77]: b981e4cbbe00fe6b -Block 0012 [ 78]: 751b005aff1af776 -Block 0012 [ 79]: f3f53e2a82b3dd4d -Block 0012 [ 80]: 59a5b0923b01eeff -Block 0012 [ 81]: eccddd7c199344d1 -Block 0012 [ 82]: 2ca389e5c3dfb601 -Block 0012 [ 83]: c1da5ba037f769b2 -Block 0012 [ 84]: f2254420165887d3 -Block 0012 [ 85]: 9bdd424e42fb8ac9 -Block 0012 [ 86]: 86fb7baf70bbf2fb -Block 0012 [ 87]: 2b2d10e8f3bef9c9 -Block 0012 [ 88]: 2565f40d83456e2e -Block 0012 [ 89]: cffffd2f8773cfff -Block 0012 [ 90]: e2c3da055e49a29d -Block 0012 [ 91]: 69fd03274ac5f972 -Block 0012 [ 92]: 617379ad227cdba7 -Block 0012 [ 93]: 75b8e9a5226d60c0 -Block 0012 [ 94]: c334dc62de54a707 -Block 0012 [ 95]: e10f057ea8ca79d8 -Block 0012 [ 96]: eb7578bcf8f91690 -Block 0012 [ 97]: 425d6867253950a0 -Block 0012 [ 98]: 4adf5f12fe580e80 -Block 0012 [ 99]: 3b150fa0259d5a29 -Block 0012 [100]: 724683f2870b357f -Block 0012 [101]: a70ff766a5dec7f2 -Block 0012 [102]: bb26aac1eca8ad4f -Block 0012 [103]: 2a96bcef60d625bd -Block 0012 [104]: 03d1a4ae39e15fe9 -Block 0012 [105]: 609a20dd739a73a6 -Block 0012 [106]: 6cdc368e10912c82 -Block 0012 [107]: f86603e14f2349dc -Block 0012 [108]: 326c08a9609a812f -Block 0012 [109]: 1236430f64cc8466 -Block 0012 [110]: a5101a852da2b1a6 -Block 0012 [111]: af36da8f2afb00b5 -Block 0012 [112]: c337670fc34ee15b -Block 0012 [113]: ee6de63f856faf8d -Block 0012 [114]: 2c7bfea979dfc827 -Block 0012 [115]: 599f095c9a74bf90 -Block 0012 [116]: c08d305518a79a2e -Block 0012 [117]: aa2b928943937431 -Block 0012 [118]: 49afefc091ee6c9e -Block 0012 [119]: 61dda0dd29a1b55d -Block 0012 [120]: b25ceb200c524ded -Block 0012 [121]: 1f61aeae22d7737b -Block 0012 [122]: 75eb6d9ac881e97a -Block 0012 [123]: b6d4098a91934f5e -Block 0012 [124]: 334052b5ff62e98c -Block 0012 [125]: 9feccb8757580ece -Block 0012 [126]: 5702c6ec61ba797c -Block 0012 [127]: 82b8728b9614e1e6 -Block 0013 [ 0]: eaedddbe8af5aa2d -Block 0013 [ 1]: eaf925271bb772a9 -Block 0013 [ 2]: 2d52d74cf80f7f01 -Block 0013 [ 3]: 2b3dfef3de0f72a3 -Block 0013 [ 4]: b78c1d365ac715ca -Block 0013 [ 5]: ca3be4f4d86ed487 -Block 0013 [ 6]: bde70152fc817d13 -Block 0013 [ 7]: 7849235bcca4fe00 -Block 0013 [ 8]: ff1834255d9b0889 -Block 0013 [ 9]: 473ce32fac80f41d -Block 0013 [ 10]: aea46e05204bde46 -Block 0013 [ 11]: 66652914efed3406 -Block 0013 [ 12]: 3c341756d52915c2 -Block 0013 [ 13]: 2b1ba4fe3b0dc84f -Block 0013 [ 14]: 9937c961d64aeea4 -Block 0013 [ 15]: 27c2ef5ccf7c4d78 -Block 0013 [ 16]: 6a8fb6caad026005 -Block 0013 [ 17]: cba08dd959b1af0c -Block 0013 [ 18]: 75eb392a6e373db0 -Block 0013 [ 19]: fa107b1d60385685 -Block 0013 [ 20]: 64e4cb093dc69ee7 -Block 0013 [ 21]: 86034fe04390fb84 -Block 0013 [ 22]: 2a15637b8bfdb518 -Block 0013 [ 23]: 04262d2c68a9fb36 -Block 0013 [ 24]: 8869385ea5c0cea8 -Block 0013 [ 25]: 7a86c32291c7ff6e -Block 0013 [ 26]: be1e8f1d75cdbf2f -Block 0013 [ 27]: 58ce0de04a34cccd -Block 0013 [ 28]: 6f01e5967938b60c -Block 0013 [ 29]: 3a40f4a0dc93af25 -Block 0013 [ 30]: 88551df24fef2831 -Block 0013 [ 31]: 8654d6f1a3dce07b -Block 0013 [ 32]: baca7a9bf3a39df2 -Block 0013 [ 33]: 1c18fa53b02620f2 -Block 0013 [ 34]: 450203b941e55a6b -Block 0013 [ 35]: bf7c2e108a5de644 -Block 0013 [ 36]: 4417511c93c0dac9 -Block 0013 [ 37]: 24ffae020a5271ec -Block 0013 [ 38]: 69ee3ae4f949cb5e -Block 0013 [ 39]: 6478ca927bbfc07d -Block 0013 [ 40]: d6ce680d1e16842f -Block 0013 [ 41]: b992d6d900efdab2 -Block 0013 [ 42]: 310fe3c85b5d034d -Block 0013 [ 43]: 1c0dbe4c1f8ef62f -Block 0013 [ 44]: a46a74e0b2e9c447 -Block 0013 [ 45]: ad08f0145b3ea23c -Block 0013 [ 46]: 22a925dbe1442573 -Block 0013 [ 47]: aa6a1baef218fcb9 -Block 0013 [ 48]: 60c92121636f3dd4 -Block 0013 [ 49]: afe5802f9891e2bc -Block 0013 [ 50]: 92e099d0d5629dac -Block 0013 [ 51]: a9957aa663b6c719 -Block 0013 [ 52]: a1a95d7da22e9ffd -Block 0013 [ 53]: e715e53f426b0777 -Block 0013 [ 54]: 6e75377d68214b21 -Block 0013 [ 55]: eb04609119f57bf0 -Block 0013 [ 56]: 67889f4c9664d51a -Block 0013 [ 57]: 5411bbc4b8581969 -Block 0013 [ 58]: de2e7ffdabeff744 -Block 0013 [ 59]: 2deef12e5291bd14 -Block 0013 [ 60]: c86a647b52a5741f -Block 0013 [ 61]: 0394fe241338b4a6 -Block 0013 [ 62]: 186f28e9a9ac3ecf -Block 0013 [ 63]: 1d1722559db5565b -Block 0013 [ 64]: 4415f30c59b9d38d -Block 0013 [ 65]: d6269156a21ce3f0 -Block 0013 [ 66]: 92677e2f8134ec2c -Block 0013 [ 67]: c931b7415a95b276 -Block 0013 [ 68]: 716b0900181c27c7 -Block 0013 [ 69]: 0bf16f91499d7cbc -Block 0013 [ 70]: 24bbec0fe3215012 -Block 0013 [ 71]: 01bf2fcb5b05b6fa -Block 0013 [ 72]: a61e758aa17c3052 -Block 0013 [ 73]: 276ba08d67f150e2 -Block 0013 [ 74]: 22458dd5ee4542fa -Block 0013 [ 75]: 15eaa2f726b1deeb -Block 0013 [ 76]: 98754f686e166252 -Block 0013 [ 77]: c6c4887f77c1a9bf -Block 0013 [ 78]: da5651b242cf01fe -Block 0013 [ 79]: a02bd8001bd9d144 -Block 0013 [ 80]: 3e983a05c2b09cb9 -Block 0013 [ 81]: 7ef8ebad3c99e296 -Block 0013 [ 82]: 20370b5f68fe88a6 -Block 0013 [ 83]: 410fc8b8a3d86a66 -Block 0013 [ 84]: 088156fc052f6b47 -Block 0013 [ 85]: 6c708714938d49bb -Block 0013 [ 86]: be01727481ba5050 -Block 0013 [ 87]: ae8304c820f46aae -Block 0013 [ 88]: 27035fb860b61d9b -Block 0013 [ 89]: a1f5a3b7563660c4 -Block 0013 [ 90]: 4979cee149320d6d -Block 0013 [ 91]: 18497836284ca22b -Block 0013 [ 92]: 2878ce670185ee41 -Block 0013 [ 93]: dc8ffb1d7ea3c8df -Block 0013 [ 94]: 39ef70ffdf088fc7 -Block 0013 [ 95]: 0db82c5c234434b4 -Block 0013 [ 96]: aaca65cbabcbcf0f -Block 0013 [ 97]: 9185fb1315bae27e -Block 0013 [ 98]: 9d1c06a4bdd28482 -Block 0013 [ 99]: 9bd183dfb7f54cf4 -Block 0013 [100]: 3a695d353dfe6678 -Block 0013 [101]: f317b70f64f99610 -Block 0013 [102]: 4c1714fdc792a6e7 -Block 0013 [103]: aa3279d8c71e496e -Block 0013 [104]: d116e54970b5bf96 -Block 0013 [105]: bc89a65d590e3ca7 -Block 0013 [106]: eb48ceb2b57199ea -Block 0013 [107]: 2d43919e25c5f31e -Block 0013 [108]: cc035b7aa6c3a661 -Block 0013 [109]: 588a1e634e20470f -Block 0013 [110]: 418fbd6f77c03100 -Block 0013 [111]: 69ee0ffada874b58 -Block 0013 [112]: 754f34b783f15b81 -Block 0013 [113]: 419f3bd6c0eb4125 -Block 0013 [114]: 4251821a6d37d18b -Block 0013 [115]: 7331d86f98b0fc61 -Block 0013 [116]: ea664445edff9a79 -Block 0013 [117]: bdb834e86f0ee159 -Block 0013 [118]: 5cb72085004e82b5 -Block 0013 [119]: f23b2f4fbdcf5630 -Block 0013 [120]: 7a6732b1bd75a364 -Block 0013 [121]: d6e72bf9884e9967 -Block 0013 [122]: ed7718afffa3d73e -Block 0013 [123]: 682a608b55b3b23e -Block 0013 [124]: 1b74eb5bdc16cea1 -Block 0013 [125]: f05f334d68ec7da1 -Block 0013 [126]: 5177e2e0715c6108 -Block 0013 [127]: 766ae72a7c5c3aaa -Block 0014 [ 0]: 5b2550e4dbc7fa18 -Block 0014 [ 1]: 6b354d6d6b10cac7 -Block 0014 [ 2]: 0ca396bc8d3c4b0c -Block 0014 [ 3]: 000380927b45a85c -Block 0014 [ 4]: e7244935d8f887b1 -Block 0014 [ 5]: 200a8bedc1f6f499 -Block 0014 [ 6]: e427956b507ba1d8 -Block 0014 [ 7]: 6a81cda7910edc35 -Block 0014 [ 8]: 0cfe0f81f9f471a8 -Block 0014 [ 9]: 4b63ce3ecfaaf474 -Block 0014 [ 10]: 75e7cf9ad2a4841f -Block 0014 [ 11]: a3ee8e6cc201c825 -Block 0014 [ 12]: 73dafadc861c7df2 -Block 0014 [ 13]: 6be0047a88a0238e -Block 0014 [ 14]: 9f8bb8d87202d10b -Block 0014 [ 15]: 813971bc045d2c3c -Block 0014 [ 16]: 56e8be12b1264a52 -Block 0014 [ 17]: 276607bedf97436d -Block 0014 [ 18]: ac106bf67df98c68 -Block 0014 [ 19]: 14320d22ab2b8bec -Block 0014 [ 20]: e475a0090015d65f -Block 0014 [ 21]: fb3669a47ffda9a2 -Block 0014 [ 22]: fb70122cd1be3d5d -Block 0014 [ 23]: ee01966d661ab3de -Block 0014 [ 24]: 4dd4c509dc6db43e -Block 0014 [ 25]: 1ba046bdee661628 -Block 0014 [ 26]: 759e90552ec1ed7e -Block 0014 [ 27]: df0886efca925c51 -Block 0014 [ 28]: 23e9c7649656d24e -Block 0014 [ 29]: f7238ddfa18b24c2 -Block 0014 [ 30]: a45035e54a7bc958 -Block 0014 [ 31]: 378186a620803ba2 -Block 0014 [ 32]: cea0ebd7326ea234 -Block 0014 [ 33]: 54ebe0504125676b -Block 0014 [ 34]: 8e36f6d9013959c4 -Block 0014 [ 35]: 38cdcf121287b284 -Block 0014 [ 36]: e967d2462682298c -Block 0014 [ 37]: cea743b39e721689 -Block 0014 [ 38]: 64edd2b710dfb750 -Block 0014 [ 39]: 2d08633513a5ad71 -Block 0014 [ 40]: b895ddebbba5fefb -Block 0014 [ 41]: 02a7678001e2d450 -Block 0014 [ 42]: 27ef9e13015d8dec -Block 0014 [ 43]: 7a1eb3493df50849 -Block 0014 [ 44]: fe1303ec8c91a5bb -Block 0014 [ 45]: 1f9bd7cf219083e6 -Block 0014 [ 46]: c6bb9a21589475af -Block 0014 [ 47]: 873a0fc391188d09 -Block 0014 [ 48]: 190e7438692bf635 -Block 0014 [ 49]: 6ec2aa43c5e2bbe3 -Block 0014 [ 50]: 96ef69d3e95556c8 -Block 0014 [ 51]: ba7fdbdd8a70de10 -Block 0014 [ 52]: 4882e9ddcd522412 -Block 0014 [ 53]: f79160e8864da5c0 -Block 0014 [ 54]: c59223402b843174 -Block 0014 [ 55]: 761b74085fb46dc0 -Block 0014 [ 56]: ca3bbd50a8d27333 -Block 0014 [ 57]: 6cfdf0de3135521a -Block 0014 [ 58]: 79f989869f12e370 -Block 0014 [ 59]: 7d32646711d7741c -Block 0014 [ 60]: fa27ea9d16dc3dd9 -Block 0014 [ 61]: c7956b2f34e15b5e -Block 0014 [ 62]: 314442e9edc14f26 -Block 0014 [ 63]: 6218d35af723ed10 -Block 0014 [ 64]: cc31ba85bb2f651b -Block 0014 [ 65]: 8f7da3844d1645f4 -Block 0014 [ 66]: 0fba3bc9e0d62b47 -Block 0014 [ 67]: eb98f7c11eb98b8e -Block 0014 [ 68]: 5cace434044bfb20 -Block 0014 [ 69]: 6fb70bebb1a8a8a9 -Block 0014 [ 70]: 3375536d4cb653c2 -Block 0014 [ 71]: 64a94ec4d81b77f9 -Block 0014 [ 72]: e531b41790e67c68 -Block 0014 [ 73]: 82d347e282201bb8 -Block 0014 [ 74]: 80bc6a0af7bfc60f -Block 0014 [ 75]: f318824f23cfb4eb -Block 0014 [ 76]: 329345055d886557 -Block 0014 [ 77]: b3c2ec627aa4363a -Block 0014 [ 78]: 4962272584497597 -Block 0014 [ 79]: 7692ceb70ff5980f -Block 0014 [ 80]: f319241988a13e94 -Block 0014 [ 81]: eb94732cfdeea4af -Block 0014 [ 82]: fcddd9e2c11c393a -Block 0014 [ 83]: 3d6ac4f492d7df7a -Block 0014 [ 84]: 9d912c5c969aaaf5 -Block 0014 [ 85]: a91136e982c7f4da -Block 0014 [ 86]: 0a7cda3f50f68fd2 -Block 0014 [ 87]: 903eb02643c18396 -Block 0014 [ 88]: a0649fbd5f0b970b -Block 0014 [ 89]: c10eb8ea019f102c -Block 0014 [ 90]: 17c34c7c16665e57 -Block 0014 [ 91]: 27254dd5e6f4709f -Block 0014 [ 92]: 3d7772bc8265a912 -Block 0014 [ 93]: a0172dafb378d99b -Block 0014 [ 94]: 778d8f7d9b515750 -Block 0014 [ 95]: 944406206db979ea -Block 0014 [ 96]: 509d1f46f87cc0a7 -Block 0014 [ 97]: 33f6690915ed2412 -Block 0014 [ 98]: f34179142c23746e -Block 0014 [ 99]: a78c7b1cdc3ce7da -Block 0014 [100]: d640afa9bd498f05 -Block 0014 [101]: bc20596310df8b3c -Block 0014 [102]: 14dafd36a5a4d228 -Block 0014 [103]: e1b0807ba915d237 -Block 0014 [104]: 3a30e6af3668fd21 -Block 0014 [105]: fc4e6de5a31ff542 -Block 0014 [106]: 6c39a88ef296ed5a -Block 0014 [107]: 05e873d69b4438f7 -Block 0014 [108]: fae4b618526422d4 -Block 0014 [109]: 16123e4dd6f2a12e -Block 0014 [110]: e2c4bf1ac9b284e1 -Block 0014 [111]: 2ead3cdbfbe99ed7 -Block 0014 [112]: 6e2d576c0c2ae51b -Block 0014 [113]: 95626ec048beb8a7 -Block 0014 [114]: 328db9b409d90732 -Block 0014 [115]: 31e631764dcd4f5f -Block 0014 [116]: 3bdbf0835a077ce6 -Block 0014 [117]: ab57496d09a6756e -Block 0014 [118]: 6fc0f3ff3af34c5e -Block 0014 [119]: c4eb12c1e9ee0082 -Block 0014 [120]: bdf93172143e9b0e -Block 0014 [121]: 96475254ea6bce21 -Block 0014 [122]: b951bc13b50b8d94 -Block 0014 [123]: c74e588c176a5ac4 -Block 0014 [124]: f50cbab1174678bf -Block 0014 [125]: 9c0ab31431c2ef5d -Block 0014 [126]: 61dbaeec02095a86 -Block 0014 [127]: 26257729719307f2 -Block 0015 [ 0]: bffa5134f891815d -Block 0015 [ 1]: c9d1e86859077437 -Block 0015 [ 2]: 77d57dca52d915e4 -Block 0015 [ 3]: d9c785a6fe75a1c1 -Block 0015 [ 4]: 0b70b72c7f07897d -Block 0015 [ 5]: a3be1edec51134ab -Block 0015 [ 6]: a2c658c0c467bfcb -Block 0015 [ 7]: 0d793e8f6b15d9b8 -Block 0015 [ 8]: 597e8e8b9f5f50bd -Block 0015 [ 9]: a81216501f4f3790 -Block 0015 [ 10]: 5124ccd8eb141ab3 -Block 0015 [ 11]: 2aadc51f9f1db29c -Block 0015 [ 12]: 595d8bfc6ab47015 -Block 0015 [ 13]: c8f2521f504b34c4 -Block 0015 [ 14]: 49920f23c3e00a08 -Block 0015 [ 15]: 8b5e8857dcc09534 -Block 0015 [ 16]: 3446613c42b95a3d -Block 0015 [ 17]: f311d4e2180cddf6 -Block 0015 [ 18]: 330dcbb4036f4c43 -Block 0015 [ 19]: c1abc25872408257 -Block 0015 [ 20]: ea8ca75355745b41 -Block 0015 [ 21]: 3edbc39cabf21ddc -Block 0015 [ 22]: a7453f4b18499b7a -Block 0015 [ 23]: 42508913574e3416 -Block 0015 [ 24]: 7c3c53f6522e1e58 -Block 0015 [ 25]: 4ac931ea5a311b70 -Block 0015 [ 26]: bcf6e7a4a8050c6b -Block 0015 [ 27]: 98c6e929c86f3fa2 -Block 0015 [ 28]: 25451aaace81f7ee -Block 0015 [ 29]: 5313185413450a07 -Block 0015 [ 30]: 69293c347974ba7a -Block 0015 [ 31]: d48883fdfdc19477 -Block 0015 [ 32]: 3a0ce3cc08024172 -Block 0015 [ 33]: 66bd0a95bf2b998a -Block 0015 [ 34]: 8ab3300f23d9abe2 -Block 0015 [ 35]: aaac3dcf691b6fa1 -Block 0015 [ 36]: ef4ac0dd37e0aba3 -Block 0015 [ 37]: 311431df9bb602c5 -Block 0015 [ 38]: 74edd18f5de5bf86 -Block 0015 [ 39]: 4ffd577d73bcbd05 -Block 0015 [ 40]: 214f9d188d2f36d9 -Block 0015 [ 41]: b446680a08db1c7f -Block 0015 [ 42]: 44f50256a68647f4 -Block 0015 [ 43]: 2456dd7fb1a98133 -Block 0015 [ 44]: 5a4f92d4794ac4c3 -Block 0015 [ 45]: f7fd907c3384360d -Block 0015 [ 46]: cb979d6a0dd8436b -Block 0015 [ 47]: 0f7dec5cf75ce956 -Block 0015 [ 48]: bc9227dc2eb2db73 -Block 0015 [ 49]: 94cafc1d1646ed66 -Block 0015 [ 50]: f3a475e8f020b13a -Block 0015 [ 51]: 22b0f1229ae9a821 -Block 0015 [ 52]: 333762086c0d1d63 -Block 0015 [ 53]: 69e584834b611f03 -Block 0015 [ 54]: ccc3dbf7c70523fe -Block 0015 [ 55]: b976aa72c341c6dc -Block 0015 [ 56]: c57a56dce39435e1 -Block 0015 [ 57]: e3ad1c396a6e98d1 -Block 0015 [ 58]: e1eb535fc12f237a -Block 0015 [ 59]: 31b646b18f7a60a7 -Block 0015 [ 60]: 8b5aedc11623526c -Block 0015 [ 61]: 6946cbcf48d09dde -Block 0015 [ 62]: 881b0e743e1f8c04 -Block 0015 [ 63]: 04db0580164c9224 -Block 0015 [ 64]: bd8c78074008c1cf -Block 0015 [ 65]: 662baa93b93e46ad -Block 0015 [ 66]: 3b6e57fee4d1eef2 -Block 0015 [ 67]: ea5709e05b86b1e3 -Block 0015 [ 68]: f6114fe2c56f8a91 -Block 0015 [ 69]: 3e1a3204a2616fa5 -Block 0015 [ 70]: 420210852fdf71ee -Block 0015 [ 71]: 006a843a0c6cc9c6 -Block 0015 [ 72]: 896cddd3e1719215 -Block 0015 [ 73]: 59a6b53c4f06fb52 -Block 0015 [ 74]: b819297575c796ad -Block 0015 [ 75]: 130d7e7b3c82284c -Block 0015 [ 76]: a6e0893c54adda2e -Block 0015 [ 77]: cacdc1057579975e -Block 0015 [ 78]: 8eaaff716864cf5c -Block 0015 [ 79]: 6aa150222002d534 -Block 0015 [ 80]: 2ad6f73b950c9641 -Block 0015 [ 81]: 042b0a08f2daf138 -Block 0015 [ 82]: d77dca90a93ea577 -Block 0015 [ 83]: 1be098db6c2283bb -Block 0015 [ 84]: a8ef13df654b6224 -Block 0015 [ 85]: ac70aaa59942e32e -Block 0015 [ 86]: 049cade3d2bd666a -Block 0015 [ 87]: 6f95a90efbc8f023 -Block 0015 [ 88]: 1ad8afc58cd1852c -Block 0015 [ 89]: c1f8c28aab6c0a2c -Block 0015 [ 90]: 1deb0ff6f03546b6 -Block 0015 [ 91]: 2919e466740b12ec -Block 0015 [ 92]: 6068f5c8e3687356 -Block 0015 [ 93]: 94c6e3c042e0c45b -Block 0015 [ 94]: 299f2690cdc3f2ae -Block 0015 [ 95]: 371e0b2f24c55dd1 -Block 0015 [ 96]: 68b2d5a79a498a9d -Block 0015 [ 97]: f90d22cd6b28fbcb -Block 0015 [ 98]: 0a540f5bb4c626da -Block 0015 [ 99]: 22a7872cc893ccbc -Block 0015 [100]: 3f88c5459cb3d544 -Block 0015 [101]: c4ea6b59c1c6b0a7 -Block 0015 [102]: d4bdb7a882c60a7b -Block 0015 [103]: 6de6f73d38b41093 -Block 0015 [104]: 75eea05cb9d3455f -Block 0015 [105]: e3e2ee7697b87d31 -Block 0015 [106]: a5229ba65fed9c39 -Block 0015 [107]: bae498bf96e2bb0d -Block 0015 [108]: 9929fb2d2d6a097e -Block 0015 [109]: d2dfe8b87b7474d9 -Block 0015 [110]: bf2d786bfa03556b -Block 0015 [111]: 2037ef5875f48234 -Block 0015 [112]: 79fc5cc5dcb41d0d -Block 0015 [113]: 5956deb9a21e81cc -Block 0015 [114]: ee7fb1ac03532faf -Block 0015 [115]: 3c3640a2fc5ccf9f -Block 0015 [116]: 249ae749f07b477e -Block 0015 [117]: 3dfb90c35bae2e4c -Block 0015 [118]: 656a4faf5d4139d0 -Block 0015 [119]: 49d42d1ec6342c7d -Block 0015 [120]: 3a0f3ecf42effdd9 -Block 0015 [121]: 1ee8e527e656374f -Block 0015 [122]: 8d027e114f72d46b -Block 0015 [123]: 16219eeebed66173 -Block 0015 [124]: dbaa98ff73905ee1 -Block 0015 [125]: e1bb04410cc1bc8b -Block 0015 [126]: ca336c250756275f -Block 0015 [127]: 1bfba5b1b19c3f88 -Block 0016 [ 0]: 6010e5a01db5f196 -Block 0016 [ 1]: ef7ac9e4440495c3 -Block 0016 [ 2]: da642ab2564f83df -Block 0016 [ 3]: 422fbcb748ee5d27 -Block 0016 [ 4]: c5b382f0a17717bf -Block 0016 [ 5]: d4425eca0af816fb -Block 0016 [ 6]: e024f3f05918d81a -Block 0016 [ 7]: 53d9fc82bfcc0ff7 -Block 0016 [ 8]: 0d0ffa5876f6e615 -Block 0016 [ 9]: 7fa7188fff681a48 -Block 0016 [ 10]: 28f5d8b757cb69d2 -Block 0016 [ 11]: f59ff3e8dcabb89b -Block 0016 [ 12]: c086251a5ad5708f -Block 0016 [ 13]: 10f5b28138ae33ab -Block 0016 [ 14]: 1273805b77cb7e11 -Block 0016 [ 15]: b3d83b7e6cf2b8d6 -Block 0016 [ 16]: 68b4cab9ec0bb673 -Block 0016 [ 17]: 9db6bb436dc180a3 -Block 0016 [ 18]: f8941e643334bd45 -Block 0016 [ 19]: 60f497755d89255c -Block 0016 [ 20]: 41d7f475a441ec8a -Block 0016 [ 21]: 4d662dce1c1c6cd8 -Block 0016 [ 22]: 6d61fde8d9a5f590 -Block 0016 [ 23]: 949d73cecd9a94af -Block 0016 [ 24]: 2a621fcccc89a379 -Block 0016 [ 25]: e3b9f35f13264c99 -Block 0016 [ 26]: 665090516cab8704 -Block 0016 [ 27]: 54358d6530ea9a16 -Block 0016 [ 28]: 484b3f465d14d230 -Block 0016 [ 29]: 7f14f35e09e986bf -Block 0016 [ 30]: 1f25c14168d491a2 -Block 0016 [ 31]: a86ffa29322d3c60 -Block 0016 [ 32]: 4dbe9a8213819da6 -Block 0016 [ 33]: 79a23c6d9e0b6eab -Block 0016 [ 34]: 030791bdea94c4e9 -Block 0016 [ 35]: a791b204d75e3f3d -Block 0016 [ 36]: 81d8761e8890bcab -Block 0016 [ 37]: 050fe1821d706207 -Block 0016 [ 38]: 18825ead7299224e -Block 0016 [ 39]: 001a96583c7d6f09 -Block 0016 [ 40]: 0001d2e81148000f -Block 0016 [ 41]: 372fc268847321c6 -Block 0016 [ 42]: 9d07aad08cff66f9 -Block 0016 [ 43]: 69ed41995677bedc -Block 0016 [ 44]: 7019349cab952e6d -Block 0016 [ 45]: a5e5b7c45b17ffe5 -Block 0016 [ 46]: 6dac282c45d97b01 -Block 0016 [ 47]: 824ff45d1aa89d6d -Block 0016 [ 48]: 813df0ece26aa83e -Block 0016 [ 49]: 1ab5dd2ab168553c -Block 0016 [ 50]: 1cb81038942c1ea0 -Block 0016 [ 51]: a992785912314770 -Block 0016 [ 52]: 56da8dcd757f3f9c -Block 0016 [ 53]: 6d9a48dc8fb83789 -Block 0016 [ 54]: b08051aeeefb1bd3 -Block 0016 [ 55]: 557f90a417a97732 -Block 0016 [ 56]: df1e927d53570ac2 -Block 0016 [ 57]: 5a61d6997a74e714 -Block 0016 [ 58]: 6d493a2ff2550d90 -Block 0016 [ 59]: ef3747c93347f033 -Block 0016 [ 60]: e4e55b94cfe605f0 -Block 0016 [ 61]: 22d8d26ec147d337 -Block 0016 [ 62]: c81d012c9200276f -Block 0016 [ 63]: 359774aa24a65129 -Block 0016 [ 64]: 9f4b8f9fb5cefffc -Block 0016 [ 65]: 0d933ec3e5e2a12a -Block 0016 [ 66]: 9b91aa03e72879cd -Block 0016 [ 67]: d663e27e00b62076 -Block 0016 [ 68]: f4b8905b594a2974 -Block 0016 [ 69]: e62dfc1510ebcecd -Block 0016 [ 70]: 9c0148ce0ee08434 -Block 0016 [ 71]: 99c1407c889dffab -Block 0016 [ 72]: 9048f4117c0cc6d3 -Block 0016 [ 73]: 98b2b397d668d6e8 -Block 0016 [ 74]: cc063ea8e2f217a9 -Block 0016 [ 75]: 9aaaa458736bd6c1 -Block 0016 [ 76]: 48e7a37c45aff5ba -Block 0016 [ 77]: 8b5e80eb8a66e2b6 -Block 0016 [ 78]: ea967076787d21cf -Block 0016 [ 79]: 4b47a086ab30cf99 -Block 0016 [ 80]: 2a37cf84213864aa -Block 0016 [ 81]: fe9988bd22317576 -Block 0016 [ 82]: 04d3c4a70f6eaa56 -Block 0016 [ 83]: 8121c0c9771de687 -Block 0016 [ 84]: 8e900e643824ff7d -Block 0016 [ 85]: 70b3c663c2497b1a -Block 0016 [ 86]: fc2bc4df54195dcb -Block 0016 [ 87]: ec6a71b75fabcfd4 -Block 0016 [ 88]: 99bb729eb37d40d7 -Block 0016 [ 89]: 6c1cf32dbae62277 -Block 0016 [ 90]: 1dd8a791c33baf55 -Block 0016 [ 91]: 3fcde3086a1bbe80 -Block 0016 [ 92]: afba9f9bbe6fd48e -Block 0016 [ 93]: b2cfce14af04208e -Block 0016 [ 94]: eac8a967896115ec -Block 0016 [ 95]: ea2143acd19ef83a -Block 0016 [ 96]: 701456ec354ba67e -Block 0016 [ 97]: 49d65a46e413858a -Block 0016 [ 98]: 8f07bd7412b0e8f1 -Block 0016 [ 99]: 68a8f4cc7f10eb91 -Block 0016 [100]: 9c01a08f0af1afa5 -Block 0016 [101]: b820f47feba63788 -Block 0016 [102]: 03190ea5d4871819 -Block 0016 [103]: 3b651df26d5cd723 -Block 0016 [104]: 26ca939e5080c15b -Block 0016 [105]: cc70e85496103f56 -Block 0016 [106]: 80ffd1c901698be2 -Block 0016 [107]: 522441509970ea18 -Block 0016 [108]: 1022a4692594b2bd -Block 0016 [109]: 2985962eb8b814b3 -Block 0016 [110]: 264aa5f3c50eaa8b -Block 0016 [111]: eadbbfa147a88690 -Block 0016 [112]: 878ea9e03d8fde59 -Block 0016 [113]: 85ecf7c34da61ad3 -Block 0016 [114]: a2d465943921114e -Block 0016 [115]: 3f515b15670ca854 -Block 0016 [116]: 78682e4a3d933c57 -Block 0016 [117]: 0741db2c00eaf60c -Block 0016 [118]: 14aebc91873c8271 -Block 0016 [119]: bfcb1cf854c7ffef -Block 0016 [120]: 1ff0f28ec53228dc -Block 0016 [121]: 665ded777f9ff07c -Block 0016 [122]: bf3a4430fc18db0d -Block 0016 [123]: 111121717f28e4b0 -Block 0016 [124]: 0a7e2d46fa48c688 -Block 0016 [125]: 1d9111141c20dd7d -Block 0016 [126]: 97dc7f23a15e420d -Block 0016 [127]: 7d0f97200592ac0f -Block 0017 [ 0]: 6c854de359a27b14 -Block 0017 [ 1]: ab170011524b516b -Block 0017 [ 2]: d9ca751dd898771a -Block 0017 [ 3]: 8c4633d5f1018345 -Block 0017 [ 4]: 644e77aaccec2780 -Block 0017 [ 5]: ca368c8fc382be50 -Block 0017 [ 6]: a3750492ea2d3743 -Block 0017 [ 7]: 710724317321ea99 -Block 0017 [ 8]: 506e1f6c741c754b -Block 0017 [ 9]: 0b20985a71e306ce -Block 0017 [ 10]: 6aff8cd2138fb4a4 -Block 0017 [ 11]: c6f99c5928d42e0e -Block 0017 [ 12]: 5474a832d3fec864 -Block 0017 [ 13]: 4e2c6f89c04b4ce3 -Block 0017 [ 14]: 20951424bd88158f -Block 0017 [ 15]: 049ddd7039249b57 -Block 0017 [ 16]: 9d11626ed63e9d75 -Block 0017 [ 17]: 5dcd2c7b8fed81df -Block 0017 [ 18]: 32e63465360993cf -Block 0017 [ 19]: e5291e13dac657ef -Block 0017 [ 20]: 19b49c016d92ef9f -Block 0017 [ 21]: 25c4060f2e5a141b -Block 0017 [ 22]: 01c62152a6855bd0 -Block 0017 [ 23]: 5614450e855dff8e -Block 0017 [ 24]: 3dea2a55b44ed33d -Block 0017 [ 25]: 1e9ee197c2152f09 -Block 0017 [ 26]: 35ed915e6967ed30 -Block 0017 [ 27]: 4653b34c57a70bee -Block 0017 [ 28]: 6d7aef2d7c05145e -Block 0017 [ 29]: 17adee6b3e41fb2a -Block 0017 [ 30]: 8e12058d65ac98d6 -Block 0017 [ 31]: 0046d2058b5368ee -Block 0017 [ 32]: e212e8b2e97a58f0 -Block 0017 [ 33]: 8d36be0c3106f8ba -Block 0017 [ 34]: 48c69e10aa22904d -Block 0017 [ 35]: 8ebd7ca19f445bce -Block 0017 [ 36]: f03a9a76d79f28a1 -Block 0017 [ 37]: 70c4181d29e54c96 -Block 0017 [ 38]: 77a364b32253cf9d -Block 0017 [ 39]: 3391b9f1953c8b37 -Block 0017 [ 40]: aa993339b8e0bfb0 -Block 0017 [ 41]: ec54e0387ad67f2d -Block 0017 [ 42]: 2134419c0745c71b -Block 0017 [ 43]: 793be7c16a647a0f -Block 0017 [ 44]: c69c2aad8535c856 -Block 0017 [ 45]: b39230bf5914c583 -Block 0017 [ 46]: 6a22086fafce953c -Block 0017 [ 47]: 4db7d73d6688a25d -Block 0017 [ 48]: ac9b96d3af4ad9eb -Block 0017 [ 49]: e6a8d0830e5f9a8a -Block 0017 [ 50]: 8ead43f5c86a6c53 -Block 0017 [ 51]: ee14b2ad8035a82e -Block 0017 [ 52]: aedad0d1aeee646a -Block 0017 [ 53]: fd496ca2fa94be9f -Block 0017 [ 54]: 704655cfbf0bb174 -Block 0017 [ 55]: 643542ce119cfce6 -Block 0017 [ 56]: 2756dd234a28b75e -Block 0017 [ 57]: 46774c4f9c4faeef -Block 0017 [ 58]: e880c1a7748827da -Block 0017 [ 59]: 7ed6aa78f60fb5b2 -Block 0017 [ 60]: 996be9d3a1251b76 -Block 0017 [ 61]: def3a7360b6b00e0 -Block 0017 [ 62]: fd47dff4e7918935 -Block 0017 [ 63]: 8e1a79b1ab106b77 -Block 0017 [ 64]: 4bc31eacee4bd340 -Block 0017 [ 65]: 68194d5d5b0de56d -Block 0017 [ 66]: 2386852248a5f801 -Block 0017 [ 67]: 1f5a334f4ccf1a17 -Block 0017 [ 68]: 026e07926322d862 -Block 0017 [ 69]: eb5210fcb5e9bb76 -Block 0017 [ 70]: 491d5a771e931209 -Block 0017 [ 71]: 0711fe3ff0b0102a -Block 0017 [ 72]: 32652a737fa96536 -Block 0017 [ 73]: 1ad92094bb31a0c5 -Block 0017 [ 74]: 2ec5dd2510484a03 -Block 0017 [ 75]: e6602baec448ceea -Block 0017 [ 76]: 6dd6c94678ff2b44 -Block 0017 [ 77]: 6c2145a06e193d1c -Block 0017 [ 78]: 0924fba0cdad5d27 -Block 0017 [ 79]: 29e57377cbe5aef7 -Block 0017 [ 80]: ef001f269aa4ee67 -Block 0017 [ 81]: dbfb6698ab8f3bc7 -Block 0017 [ 82]: 29b3658753624eb5 -Block 0017 [ 83]: e0b1c5dba16f8047 -Block 0017 [ 84]: a13b1b94185ffa59 -Block 0017 [ 85]: abc67b4f1d7f428d -Block 0017 [ 86]: 1a83e1d56da1feaa -Block 0017 [ 87]: c4d6aca2025b742c -Block 0017 [ 88]: f89b51f7fb2ead81 -Block 0017 [ 89]: 7a2c8bdfbad523ba -Block 0017 [ 90]: f146ec07790bdc42 -Block 0017 [ 91]: 18424f72b9b1807c -Block 0017 [ 92]: b348077960d66ab3 -Block 0017 [ 93]: f6e54d7ecbe2bf1d -Block 0017 [ 94]: c6d51695b65c1709 -Block 0017 [ 95]: 18afc845c30ff3b4 -Block 0017 [ 96]: 3ffccd9ef3011b87 -Block 0017 [ 97]: c7bc87390fa969e1 -Block 0017 [ 98]: 34a9bafacf6fa83c -Block 0017 [ 99]: c5e6c743af000704 -Block 0017 [100]: 6af212c30a350c1d -Block 0017 [101]: 88d55b4862fc3d9c -Block 0017 [102]: cc48a109df597048 -Block 0017 [103]: 09ef4343d8c9fc76 -Block 0017 [104]: c6c72a8f20bfc65d -Block 0017 [105]: af5d9436947d2da2 -Block 0017 [106]: 83e806505df923fc -Block 0017 [107]: 4d1b57f48a901f47 -Block 0017 [108]: 3a7224caac737486 -Block 0017 [109]: 9ad46a15a95bd9b9 -Block 0017 [110]: 2c605f1dd6fb13b0 -Block 0017 [111]: 5b58702ada82fb6d -Block 0017 [112]: 56ad71be835153be -Block 0017 [113]: 702a54e878158665 -Block 0017 [114]: bc63b93cb901b390 -Block 0017 [115]: bf5286b83aeacabe -Block 0017 [116]: 2447ce3ac7607e12 -Block 0017 [117]: 18591f38ccec50b0 -Block 0017 [118]: 2f43769546a049c3 -Block 0017 [119]: 875a0634f2bdb29b -Block 0017 [120]: ff423c951924c37f -Block 0017 [121]: f3fdc563e8968307 -Block 0017 [122]: ef523a21adfa27a9 -Block 0017 [123]: 4b97c503e8f1c16a -Block 0017 [124]: 49fbc58c69cf60e3 -Block 0017 [125]: 9d083b9159a3342e -Block 0017 [126]: e6150d9b263368e9 -Block 0017 [127]: 91c8e3518b925665 -Block 0018 [ 0]: 09169bcd34088b6b -Block 0018 [ 1]: 86acc703eeac4a74 -Block 0018 [ 2]: acb4afde4e700884 -Block 0018 [ 3]: f74c9f748888b3d2 -Block 0018 [ 4]: 053604400798d750 -Block 0018 [ 5]: dbfb2e0558912262 -Block 0018 [ 6]: 434957deab5f0be5 -Block 0018 [ 7]: 1d1a36215fab5839 -Block 0018 [ 8]: 2b3c96e646cb7b58 -Block 0018 [ 9]: 5f0c334b5cf5e76d -Block 0018 [ 10]: 25c500806d58bb88 -Block 0018 [ 11]: c363a6a0ea48185a -Block 0018 [ 12]: 72a9ca02fd66fb79 -Block 0018 [ 13]: 3e098c02b5525add -Block 0018 [ 14]: 38abb765bebc5ef9 -Block 0018 [ 15]: c166ffc83198c88e -Block 0018 [ 16]: fb77428692d231d3 -Block 0018 [ 17]: 3539b44b84631eb5 -Block 0018 [ 18]: f4123116001a9a3c -Block 0018 [ 19]: 8939910fa3c492f0 -Block 0018 [ 20]: c9a9f3ca2aa9b956 -Block 0018 [ 21]: 733b09b7c6e375b4 -Block 0018 [ 22]: 4be150262a693b43 -Block 0018 [ 23]: 80c2356af1c3e4e2 -Block 0018 [ 24]: 78f6b4660d1fcbd4 -Block 0018 [ 25]: b5cb5cc48f8ce6d8 -Block 0018 [ 26]: 6163248cf38ee860 -Block 0018 [ 27]: 3149c7c21d9c1bcc -Block 0018 [ 28]: a46dd5ce559b3301 -Block 0018 [ 29]: 82a377709679db16 -Block 0018 [ 30]: df41d3ae50c3e9fa -Block 0018 [ 31]: 20cc71102bcbc203 -Block 0018 [ 32]: 87c7cefcafdd7f1a -Block 0018 [ 33]: 974b1dd1e6abcf25 -Block 0018 [ 34]: 0c957cfeacbba93e -Block 0018 [ 35]: 624b4138281d73cb -Block 0018 [ 36]: 5e5376ec02786a25 -Block 0018 [ 37]: cd87356fed667155 -Block 0018 [ 38]: 22da3a402996ee25 -Block 0018 [ 39]: d61015447f0e6bf2 -Block 0018 [ 40]: 636d57f3d02a806c -Block 0018 [ 41]: 298521b455db8a42 -Block 0018 [ 42]: 863be3dca5457525 -Block 0018 [ 43]: 6a2bc1f83f302d42 -Block 0018 [ 44]: 20fc3e21514b4937 -Block 0018 [ 45]: 9066233a2cdfac93 -Block 0018 [ 46]: 2f7acb4b162ac38c -Block 0018 [ 47]: 1e9e4cc0ff3d03de -Block 0018 [ 48]: 1dd520d008ee3700 -Block 0018 [ 49]: d422d313c724d22e -Block 0018 [ 50]: bd2891bb12d658cb -Block 0018 [ 51]: ee7255f1b11eb395 -Block 0018 [ 52]: 6a5c5a4933ff4d0c -Block 0018 [ 53]: 938ea358a4fcdaa0 -Block 0018 [ 54]: faea433823bec653 -Block 0018 [ 55]: 5a8cbbd843d89aad -Block 0018 [ 56]: 00a4ab591ec20403 -Block 0018 [ 57]: dfef10cd77bb704c -Block 0018 [ 58]: 84fe88c092442226 -Block 0018 [ 59]: e945709daa309822 -Block 0018 [ 60]: 5f5f457b0f044e15 -Block 0018 [ 61]: 0962103719625665 -Block 0018 [ 62]: 392e21509f3e2b85 -Block 0018 [ 63]: 79db0d5e62d4a35f -Block 0018 [ 64]: b1cc4815490b2a15 -Block 0018 [ 65]: 2a27bd31361243ff -Block 0018 [ 66]: 534931fd3119c337 -Block 0018 [ 67]: f2de675fd4477358 -Block 0018 [ 68]: 3ce1d2a9d12283a3 -Block 0018 [ 69]: 3529aeb38b7f494c -Block 0018 [ 70]: 859608bcef46cd68 -Block 0018 [ 71]: 92e002e9919eb521 -Block 0018 [ 72]: e94a244299ef800e -Block 0018 [ 73]: 3b52ecf16f8af708 -Block 0018 [ 74]: 7ba9b8b344d26286 -Block 0018 [ 75]: 65c1c368b537a81b -Block 0018 [ 76]: 0a00be152dce8df4 -Block 0018 [ 77]: 8a5639a940bdce45 -Block 0018 [ 78]: 41767d6c8bf15e7c -Block 0018 [ 79]: 5215d97498dd4741 -Block 0018 [ 80]: c70d80194c256712 -Block 0018 [ 81]: c8f08d28ec7265b5 -Block 0018 [ 82]: 394757f13699ce10 -Block 0018 [ 83]: 00184fc5a16919ba -Block 0018 [ 84]: 4f9a458762b2ff08 -Block 0018 [ 85]: e92b2319026bb801 -Block 0018 [ 86]: 14e47983ebef3da7 -Block 0018 [ 87]: b7afe7d7785d842c -Block 0018 [ 88]: da2999c313f6bebd -Block 0018 [ 89]: dbb0219158918ad4 -Block 0018 [ 90]: 0ff465d811aea3a4 -Block 0018 [ 91]: bb700ac4d2a8934a -Block 0018 [ 92]: 40552366f56fa6e8 -Block 0018 [ 93]: 9bc93fc38182a556 -Block 0018 [ 94]: bec6d8f0f9967bb9 -Block 0018 [ 95]: 6d6a8136627b7a9c -Block 0018 [ 96]: d2662137f57a7c6c -Block 0018 [ 97]: 5bb3b7ddf0963885 -Block 0018 [ 98]: 2e862fc79af5d102 -Block 0018 [ 99]: 2184d2e48441702b -Block 0018 [100]: 06d9bd4aedc4e8d5 -Block 0018 [101]: 4724e53387679683 -Block 0018 [102]: 6aac974179446794 -Block 0018 [103]: d7e60f9c73e24088 -Block 0018 [104]: 9db1ee2eacf97545 -Block 0018 [105]: dbaed3874219a120 -Block 0018 [106]: 76dbbdc4483bde99 -Block 0018 [107]: 39a4b5d1b9d35ec4 -Block 0018 [108]: ba2913d05acbc99d -Block 0018 [109]: 3938947bec18c8d3 -Block 0018 [110]: 7e4d1a1004fc2bf8 -Block 0018 [111]: 19a777b4f19d49f9 -Block 0018 [112]: dcc44d359edf7ba7 -Block 0018 [113]: 187b0ef4c810a9c6 -Block 0018 [114]: b073241a034b70cb -Block 0018 [115]: 4f30b75c95304517 -Block 0018 [116]: d431a15ac9c55e98 -Block 0018 [117]: 97b7e619a567d98e -Block 0018 [118]: 0b86895e716fe184 -Block 0018 [119]: 8f232e76cccd2fec -Block 0018 [120]: fb6b2f0ac4ee2162 -Block 0018 [121]: 35850bcb3c03430b -Block 0018 [122]: 6b7a17b5c64c950f -Block 0018 [123]: 024be1006b69f750 -Block 0018 [124]: 587cb3d3632ce41b -Block 0018 [125]: 44e4206f94a46c91 -Block 0018 [126]: 9d92bd06844fd42e -Block 0018 [127]: 1a362e419ebc0ebf -Block 0019 [ 0]: fb1a18dd9d7050cf -Block 0019 [ 1]: 8003990d8ce31314 -Block 0019 [ 2]: 5a1fe2fd55f52157 -Block 0019 [ 3]: f2c627a6c5b50c9c -Block 0019 [ 4]: 7df91a65f111fc48 -Block 0019 [ 5]: 4373c58ce1b6834d -Block 0019 [ 6]: 7a63036740cfc7e9 -Block 0019 [ 7]: f706a4864759b418 -Block 0019 [ 8]: 93acd66513889d55 -Block 0019 [ 9]: 48854dbcd9a36a91 -Block 0019 [ 10]: dc3409afd0b364d2 -Block 0019 [ 11]: 82d5350cc4216ae5 -Block 0019 [ 12]: 67656d5e97f0d6f3 -Block 0019 [ 13]: 08ffde5c41840d3d -Block 0019 [ 14]: a6e2e49699662cf6 -Block 0019 [ 15]: 1165624c23dc6a59 -Block 0019 [ 16]: 9b257613376b98bb -Block 0019 [ 17]: 5b3b3a9b22f18fc6 -Block 0019 [ 18]: 8e180a717652d9de -Block 0019 [ 19]: ee887439b80d6210 -Block 0019 [ 20]: 7dad12f1ebf23f4a -Block 0019 [ 21]: 8fbcd1a17cfc4382 -Block 0019 [ 22]: 9569665875fc1a39 -Block 0019 [ 23]: 32ef4ca936ecd698 -Block 0019 [ 24]: 6b143f4ff90bc9b8 -Block 0019 [ 25]: 3125e294dc69e551 -Block 0019 [ 26]: 8dfeae4343a1ab97 -Block 0019 [ 27]: 0d515500a7396b53 -Block 0019 [ 28]: f9aff1f427be7093 -Block 0019 [ 29]: 661148ebd0368628 -Block 0019 [ 30]: 405568cdd4f64a35 -Block 0019 [ 31]: 68db03ab59e58d23 -Block 0019 [ 32]: 4852cd76fea75ea2 -Block 0019 [ 33]: ef11900d02739bd6 -Block 0019 [ 34]: e54ac5c2a8fed901 -Block 0019 [ 35]: ebac4ca2e70572af -Block 0019 [ 36]: 11f503055e2f369a -Block 0019 [ 37]: 3cb7ec7a47ece701 -Block 0019 [ 38]: 741ac40ccb35b5f6 -Block 0019 [ 39]: 0988537de00f2f86 -Block 0019 [ 40]: 03c72d2e04a2b7d1 -Block 0019 [ 41]: bcdcf97b2046cf23 -Block 0019 [ 42]: e6abec7d693a2d78 -Block 0019 [ 43]: 17b3a2364d5d591e -Block 0019 [ 44]: 635b0613ef26c2f6 -Block 0019 [ 45]: f2dac357e00b0473 -Block 0019 [ 46]: 7b3f889632f9216f -Block 0019 [ 47]: b276ed10296d8bc0 -Block 0019 [ 48]: ca7bf1ac91f14ae3 -Block 0019 [ 49]: 67f2fbcfac4f0b3e -Block 0019 [ 50]: 3d410c3d2788dfc0 -Block 0019 [ 51]: e82b4e26ed7c2956 -Block 0019 [ 52]: 1b1ebf1749f98ac5 -Block 0019 [ 53]: 7606f41eb6e43647 -Block 0019 [ 54]: 72d8654a0024c77f -Block 0019 [ 55]: e8931c577a41a343 -Block 0019 [ 56]: c87455bf23cf0d7d -Block 0019 [ 57]: fd35a720c62f1148 -Block 0019 [ 58]: 740ba36ec29256dc -Block 0019 [ 59]: 3e58d08b19c34732 -Block 0019 [ 60]: 20b08e2a659869b6 -Block 0019 [ 61]: abf550ee47b890c4 -Block 0019 [ 62]: 6b51a125c9a5b1c8 -Block 0019 [ 63]: 8c2f07fa117246fc -Block 0019 [ 64]: d9dcd942493ffc8b -Block 0019 [ 65]: a67f91a1888767dd -Block 0019 [ 66]: cb0a25f005618897 -Block 0019 [ 67]: fe031e918884083e -Block 0019 [ 68]: b5f2696212d55bf4 -Block 0019 [ 69]: d6f0f120d54a2056 -Block 0019 [ 70]: b8aa60ecefdbf3ea -Block 0019 [ 71]: b1d50e6dba68c17a -Block 0019 [ 72]: ee748a952573ecdb -Block 0019 [ 73]: 9ca785a74983ceae -Block 0019 [ 74]: 44ec1f1bbc910c5e -Block 0019 [ 75]: 0fec54467df78766 -Block 0019 [ 76]: 624b8e56f6d980ec -Block 0019 [ 77]: fa07a5f17f84a623 -Block 0019 [ 78]: cd00a41e8aa5b6ce -Block 0019 [ 79]: 5697364234152d21 -Block 0019 [ 80]: 7b8a32e4f0d1af0d -Block 0019 [ 81]: 5d64cc8f68a0f974 -Block 0019 [ 82]: 7dcb4f15a3b8f121 -Block 0019 [ 83]: 9367b5b9258a325b -Block 0019 [ 84]: 4de4da6d8e0866d9 -Block 0019 [ 85]: c7b3b0f3abc15394 -Block 0019 [ 86]: d33b87d1eed4a337 -Block 0019 [ 87]: b9ed2e72bb6ebea4 -Block 0019 [ 88]: 10572f65d1efbe1f -Block 0019 [ 89]: 9e7a73cc84aba6fb -Block 0019 [ 90]: a53e0e4dda2544d6 -Block 0019 [ 91]: 65c60263116b0f00 -Block 0019 [ 92]: 83c981db596413a1 -Block 0019 [ 93]: cf570ce8ecef3c30 -Block 0019 [ 94]: 2260ce8de0bfabec -Block 0019 [ 95]: 7ad56b5059153188 -Block 0019 [ 96]: 802fe70bfdf0be5c -Block 0019 [ 97]: cacfaf3c2282467d -Block 0019 [ 98]: 8c51a731d976194b -Block 0019 [ 99]: 8ff60d9c20b335b6 -Block 0019 [100]: 7d574bc7d328545a -Block 0019 [101]: aa1c5b56f88145dd -Block 0019 [102]: a488018cf5b62cd4 -Block 0019 [103]: ccd5645cf5740f5a -Block 0019 [104]: 704c1487b8459aa3 -Block 0019 [105]: 01c90b93b0ec25f7 -Block 0019 [106]: 41bd7eb3eb05c641 -Block 0019 [107]: 49c7afa99bb7c26c -Block 0019 [108]: 9d20a21a25836732 -Block 0019 [109]: 463ce6f1868c2f65 -Block 0019 [110]: e4f900a4886c99f0 -Block 0019 [111]: ee60e1befabcb60e -Block 0019 [112]: 0f7b00260ee93605 -Block 0019 [113]: e42b603722eda7d4 -Block 0019 [114]: e7a6276083514d86 -Block 0019 [115]: 02c2b63554903e2c -Block 0019 [116]: 4f859183eddd47dd -Block 0019 [117]: 0f03d0c14a6dc8d6 -Block 0019 [118]: 6dccfeb204bb0ca6 -Block 0019 [119]: b81012e04b46c739 -Block 0019 [120]: 6ae65826188c494f -Block 0019 [121]: 5f1d0ccc8cc57df8 -Block 0019 [122]: 99a54746e5107aaa -Block 0019 [123]: ca505c81f9fa3408 -Block 0019 [124]: c6a0cd042b95a9c7 -Block 0019 [125]: 36249fc5a945bd11 -Block 0019 [126]: bd2b9f7b8007a925 -Block 0019 [127]: bd6acb937aa3d609 -Block 0020 [ 0]: 93e99e1a4d5cafe6 -Block 0020 [ 1]: a72d7a8f6c8bd7b1 -Block 0020 [ 2]: 2e3721ed3f80e3a3 -Block 0020 [ 3]: 67d1c3ab3ca8fb8c -Block 0020 [ 4]: 58473a4fb39b5fc8 -Block 0020 [ 5]: baacddb76a1ec395 -Block 0020 [ 6]: 352536841d5ec4c2 -Block 0020 [ 7]: fcdffbff05cbedc8 -Block 0020 [ 8]: 8d714be4151cd6c6 -Block 0020 [ 9]: dfecaef9c28affba -Block 0020 [ 10]: a7858f9938883a19 -Block 0020 [ 11]: e4c53a0816a41501 -Block 0020 [ 12]: 377d5cf1a6986c84 -Block 0020 [ 13]: a9ac07e1b5a080e9 -Block 0020 [ 14]: ae99f8c51cd373ec -Block 0020 [ 15]: 12384a0487d433fc -Block 0020 [ 16]: 4698f7ce1fa3b1b0 -Block 0020 [ 17]: 97244a2a1f70a34b -Block 0020 [ 18]: 66be91d82e66baed -Block 0020 [ 19]: 50082984074633db -Block 0020 [ 20]: 78790f2200af5109 -Block 0020 [ 21]: 9cdbb17e403ff77d -Block 0020 [ 22]: 6c7093dcf04ec559 -Block 0020 [ 23]: da5a75b7609646c9 -Block 0020 [ 24]: 9891ed3d657a93a2 -Block 0020 [ 25]: 6633e0030e2ccbaa -Block 0020 [ 26]: ac54b0cae8689083 -Block 0020 [ 27]: 5ca70788548dc642 -Block 0020 [ 28]: 4ef57fc92ba214e2 -Block 0020 [ 29]: 63c98636e210fea3 -Block 0020 [ 30]: 30a067f161164299 -Block 0020 [ 31]: 3a90bc7c0aab6dcb -Block 0020 [ 32]: 22d0b830145dd692 -Block 0020 [ 33]: 58eb216edaf79a23 -Block 0020 [ 34]: 761a26319013323c -Block 0020 [ 35]: 3faa99cd9bfa1a7a -Block 0020 [ 36]: 39f41dd6dbd06fa3 -Block 0020 [ 37]: 5afed9b5a2b82ca5 -Block 0020 [ 38]: 9c443f55e47693d1 -Block 0020 [ 39]: a473bda54f0dc5f6 -Block 0020 [ 40]: 1e395aa2ff689e85 -Block 0020 [ 41]: 849554a9fa1f5be3 -Block 0020 [ 42]: 5c4eac11a2154c7a -Block 0020 [ 43]: 20ff6540e40a983e -Block 0020 [ 44]: 3d3d4e80e458026d -Block 0020 [ 45]: 0522d503f1d01502 -Block 0020 [ 46]: 84baad09aa6b20dc -Block 0020 [ 47]: a106f6f61dcf6dbe -Block 0020 [ 48]: d9d379be17e5967a -Block 0020 [ 49]: f185e3a9bb50534f -Block 0020 [ 50]: 3da8b9f6d098a6b8 -Block 0020 [ 51]: 6e6f730ea70d8786 -Block 0020 [ 52]: 81b1e83fe22360b9 -Block 0020 [ 53]: 86dac8a4879d9fb5 -Block 0020 [ 54]: 45af3825912fc730 -Block 0020 [ 55]: f1a9b71aca4f6551 -Block 0020 [ 56]: e1d9b026f0b7938a -Block 0020 [ 57]: 8df5dd6c6294fc4a -Block 0020 [ 58]: 4e80499d795899b6 -Block 0020 [ 59]: 12dfd949141111a5 -Block 0020 [ 60]: 3c9ffe57f82daf39 -Block 0020 [ 61]: 9a7f1c23364f5009 -Block 0020 [ 62]: 186a6ada368e4893 -Block 0020 [ 63]: 0a17d3a733979d36 -Block 0020 [ 64]: 4f5aa0f6fe22c3c2 -Block 0020 [ 65]: 86ec04d35b55a87c -Block 0020 [ 66]: 0a388fa14d9e6216 -Block 0020 [ 67]: a7246e7258fab3d4 -Block 0020 [ 68]: b97873950381dbf3 -Block 0020 [ 69]: a89a63ec31e7cd17 -Block 0020 [ 70]: 974570cf18ddf858 -Block 0020 [ 71]: e69fcff456743df7 -Block 0020 [ 72]: 7270cd2d21b3fe4f -Block 0020 [ 73]: 5dd9c708a90939c9 -Block 0020 [ 74]: 4f0a8e1d1c27911b -Block 0020 [ 75]: f2956630ced19a12 -Block 0020 [ 76]: 8c26559e9f4aeeb3 -Block 0020 [ 77]: 832bd56ed44df813 -Block 0020 [ 78]: a0a56833974fbd01 -Block 0020 [ 79]: 906d7fe71992e65b -Block 0020 [ 80]: d4c217803f3a7716 -Block 0020 [ 81]: dc1a97ad52f78526 -Block 0020 [ 82]: 582c9767fdda19c9 -Block 0020 [ 83]: ce76b52dc1bf15e5 -Block 0020 [ 84]: 0268d969d029150a -Block 0020 [ 85]: 88052230b7458333 -Block 0020 [ 86]: 5e1f7b9ba31b1333 -Block 0020 [ 87]: 8242632c3b0864d5 -Block 0020 [ 88]: 0cd8f1f8f00971ca -Block 0020 [ 89]: bd962d94ea033a5c -Block 0020 [ 90]: d63a1b79c3e6242b -Block 0020 [ 91]: 01a22d486e6b8e9c -Block 0020 [ 92]: a661c99fa0781484 -Block 0020 [ 93]: 1113254c08f73e66 -Block 0020 [ 94]: 6ae7da400d7b7dfa -Block 0020 [ 95]: 6c0b3a4352aae071 -Block 0020 [ 96]: 9b28401625f225a3 -Block 0020 [ 97]: 244431aaaa2ef136 -Block 0020 [ 98]: 6789a61760180eb2 -Block 0020 [ 99]: 2bfb1ebfd7ff7106 -Block 0020 [100]: 1cbce3dbe1abe62a -Block 0020 [101]: 0a6ff21405d9f53a -Block 0020 [102]: ee640dd0cc788bf6 -Block 0020 [103]: ca888e3c4fd1b3c9 -Block 0020 [104]: e8d377e280f8f3f4 -Block 0020 [105]: 523230c4f5a953ef -Block 0020 [106]: abfa551596ebb0b4 -Block 0020 [107]: 2e0410edfcd22b5d -Block 0020 [108]: ef0dbab28d43cbdd -Block 0020 [109]: 2eff15435fab9442 -Block 0020 [110]: 0457c09ddbfedefc -Block 0020 [111]: b80cf1f200f6e482 -Block 0020 [112]: 7fe4d532644492df -Block 0020 [113]: 05bea3f2cbcfb741 -Block 0020 [114]: 72819b801a6ffbe8 -Block 0020 [115]: 71ddf2972b276d32 -Block 0020 [116]: 4ecdc15a724bb226 -Block 0020 [117]: ec507010237304a5 -Block 0020 [118]: 2448b19e22bd07a3 -Block 0020 [119]: 0897f27fd48afee3 -Block 0020 [120]: 4cd72010a43a8c50 -Block 0020 [121]: 75ab73a21d166ef1 -Block 0020 [122]: c339bd901702475f -Block 0020 [123]: 617029f43a64733b -Block 0020 [124]: fefec09ffe51f09b -Block 0020 [125]: d6758bc1df4e59de -Block 0020 [126]: 129f67a4801e5ee8 -Block 0020 [127]: be78463817131abc -Block 0021 [ 0]: e9e21481f3ee3f3a -Block 0021 [ 1]: fed52a84c085c6ed -Block 0021 [ 2]: 709f85b64e624464 -Block 0021 [ 3]: b3505f6446a9c658 -Block 0021 [ 4]: 56e6bbc2de2b8686 -Block 0021 [ 5]: a01832cc4d381458 -Block 0021 [ 6]: 28792d5e35039a14 -Block 0021 [ 7]: b68293379e015981 -Block 0021 [ 8]: d91a438da9e8148f -Block 0021 [ 9]: f284b0068ccbb947 -Block 0021 [ 10]: d82aff158b7ff636 -Block 0021 [ 11]: 62453db3456f56a9 -Block 0021 [ 12]: fb9be58c6e337392 -Block 0021 [ 13]: f15f76741214a579 -Block 0021 [ 14]: 89040978229c8229 -Block 0021 [ 15]: 445a51444b4ed6d2 -Block 0021 [ 16]: 0c2016bcdd4444f8 -Block 0021 [ 17]: cc58c2e1f7a8ef74 -Block 0021 [ 18]: c56685d74767ab8d -Block 0021 [ 19]: 05b0ce7ea4729d75 -Block 0021 [ 20]: c2679824b11d3a7b -Block 0021 [ 21]: e530c3134cb491ec -Block 0021 [ 22]: a1d54a6ff8e08c8c -Block 0021 [ 23]: 3723a2fec2faf94a -Block 0021 [ 24]: 8be73a3427edb4ff -Block 0021 [ 25]: e23b14038a2cdc8d -Block 0021 [ 26]: 23f92fec3c845d10 -Block 0021 [ 27]: 62dc4b7f7fe4baff -Block 0021 [ 28]: dfa4860130a123d8 -Block 0021 [ 29]: 41e6014b50bda4a2 -Block 0021 [ 30]: b742c21808987bc7 -Block 0021 [ 31]: ce3351e6589dfa12 -Block 0021 [ 32]: 1b107becc66f8cc8 -Block 0021 [ 33]: 7c1b0a560d8d31dd -Block 0021 [ 34]: fb90ae2933aa6acd -Block 0021 [ 35]: 240d3e273b67cb83 -Block 0021 [ 36]: ffc9b0b54f41adc7 -Block 0021 [ 37]: ad002fb0bb2adf07 -Block 0021 [ 38]: af1393d8bee411e8 -Block 0021 [ 39]: c19215172044891d -Block 0021 [ 40]: e65121884cf94253 -Block 0021 [ 41]: 2768d775293609b5 -Block 0021 [ 42]: 1fc4a96085da417b -Block 0021 [ 43]: 5b1ea60d366ddb87 -Block 0021 [ 44]: 588eeca5735e0d4d -Block 0021 [ 45]: 13b5eebb92686954 -Block 0021 [ 46]: 0f268f398fa1d4f7 -Block 0021 [ 47]: b2418155a9b0bb20 -Block 0021 [ 48]: 858e8cd90b227b5c -Block 0021 [ 49]: 6edb7199a0bb2d89 -Block 0021 [ 50]: 2d49d5351079c672 -Block 0021 [ 51]: b5c2cd06e4f80951 -Block 0021 [ 52]: 107e74d83f7d4b69 -Block 0021 [ 53]: 4831e86b26067716 -Block 0021 [ 54]: e24aa23186ef628b -Block 0021 [ 55]: 99cd343ea5a67ac0 -Block 0021 [ 56]: ffb7d321efcf243f -Block 0021 [ 57]: 1d6ac055a62ef2fa -Block 0021 [ 58]: 4c87aa50ec37d94e -Block 0021 [ 59]: 08c40682ba554409 -Block 0021 [ 60]: f00e40bf4a8d090a -Block 0021 [ 61]: ad5bf9861e7832c5 -Block 0021 [ 62]: cdf5453220419e2c -Block 0021 [ 63]: 5e035115961ff553 -Block 0021 [ 64]: ac014e59931b1719 -Block 0021 [ 65]: 84d65f93135d21b5 -Block 0021 [ 66]: 2d96485bd6dcf756 -Block 0021 [ 67]: f2cc93cb5dcd9f02 -Block 0021 [ 68]: b6f93e1c657a780e -Block 0021 [ 69]: 5f81025581879599 -Block 0021 [ 70]: 9e3102b71c46f3b8 -Block 0021 [ 71]: 828d1a2f8bc61193 -Block 0021 [ 72]: a461cbeb81445a3b -Block 0021 [ 73]: f2ed387337c2b77a -Block 0021 [ 74]: 3466edf9fd5c7475 -Block 0021 [ 75]: 19015d8ff2e0668e -Block 0021 [ 76]: 1a595c4a11abf791 -Block 0021 [ 77]: b00ca0d08cea35f2 -Block 0021 [ 78]: 86f1738ddd5f5c7f -Block 0021 [ 79]: 98a41e9eac5e201a -Block 0021 [ 80]: 315f0615eace01ec -Block 0021 [ 81]: 67ef04d09e49d1f9 -Block 0021 [ 82]: 7c95edab62fb113c -Block 0021 [ 83]: f258ea5ffde8eeae -Block 0021 [ 84]: 2c0ca0a6f3de727a -Block 0021 [ 85]: adef8be4987599ee -Block 0021 [ 86]: acd4da447f9fb36d -Block 0021 [ 87]: c7442fac27ee58f2 -Block 0021 [ 88]: 63ef62153ec0219f -Block 0021 [ 89]: 5912c663cee52508 -Block 0021 [ 90]: 43b80d1f08e25858 -Block 0021 [ 91]: b11d841a93c9ab57 -Block 0021 [ 92]: 573381ecc2746f28 -Block 0021 [ 93]: da95a423b8aaa3f6 -Block 0021 [ 94]: a74baf9b9b9cd1d6 -Block 0021 [ 95]: d3bdb02257e0ead2 -Block 0021 [ 96]: de9a1d8345598394 -Block 0021 [ 97]: 2c520473e0b78004 -Block 0021 [ 98]: 2b45c427d526d9f7 -Block 0021 [ 99]: 5c42be040a4bcb6d -Block 0021 [100]: 732d0f4b457582cb -Block 0021 [101]: 800260cc6bc9e2b6 -Block 0021 [102]: bfdee932c42edd4a -Block 0021 [103]: ca96276597473186 -Block 0021 [104]: 0f7244fcb34b528e -Block 0021 [105]: 7218c8c434ecdb4c -Block 0021 [106]: 745223365be6f238 -Block 0021 [107]: 2240cdda4143f9d1 -Block 0021 [108]: 683ae21c2e68a835 -Block 0021 [109]: f4d8be8f482bc078 -Block 0021 [110]: aade23a2859475a0 -Block 0021 [111]: 7ef8552d415107b4 -Block 0021 [112]: 50b6f85bde4b95d5 -Block 0021 [113]: 72c68fd8083bdb4b -Block 0021 [114]: 8430408343777d38 -Block 0021 [115]: d531368e35fa0bfc -Block 0021 [116]: b838e6201bccf0ca -Block 0021 [117]: 48c2bfb75a462bd6 -Block 0021 [118]: c33044442c9b393f -Block 0021 [119]: e474e5d7d70d880d -Block 0021 [120]: 4dfe1dc828adec32 -Block 0021 [121]: 3ef49af889009bc3 -Block 0021 [122]: cc2489247a2514e0 -Block 0021 [123]: 646482202c13e4ae -Block 0021 [124]: a49464d18f5e58ba -Block 0021 [125]: d6590167ad99694a -Block 0021 [126]: 41b6882b4cb13285 -Block 0021 [127]: f44b1ce4e610ff1d -Block 0022 [ 0]: 10516fe48bd992d6 -Block 0022 [ 1]: 6e80ad662a5249a0 -Block 0022 [ 2]: 9e4c06f4c020cfd2 -Block 0022 [ 3]: 61c51d3b26043155 -Block 0022 [ 4]: a6e8e47d334b4620 -Block 0022 [ 5]: 7103ec6a7b808730 -Block 0022 [ 6]: ab7207bd00414df1 -Block 0022 [ 7]: fd847b3057de9efa -Block 0022 [ 8]: 2fd0a594818276a8 -Block 0022 [ 9]: 708eee6a6bad30fd -Block 0022 [ 10]: 955bf28de3f535dd -Block 0022 [ 11]: 6d002962ec0c3b62 -Block 0022 [ 12]: ed3789bea8e1cb91 -Block 0022 [ 13]: cec3c50996e4d7a5 -Block 0022 [ 14]: 99a41b50ca1ed0a6 -Block 0022 [ 15]: 160e0ab9a0a4bc11 -Block 0022 [ 16]: 25bdb628732f1036 -Block 0022 [ 17]: f83b95562f875270 -Block 0022 [ 18]: e1161c3e5e33ae07 -Block 0022 [ 19]: e0d2924a83aa3a87 -Block 0022 [ 20]: c17673d548c6b215 -Block 0022 [ 21]: 5157a65c923beb29 -Block 0022 [ 22]: e94d6cbd03cda367 -Block 0022 [ 23]: 35d5aa15e62a946c -Block 0022 [ 24]: ec42ddc3f35fd651 -Block 0022 [ 25]: 1f4467ff293980ea -Block 0022 [ 26]: fd1b51fd8670f1c4 -Block 0022 [ 27]: eb484dd78071a143 -Block 0022 [ 28]: 8ac6e5fc54ab2f6b -Block 0022 [ 29]: 64463e0b03e7b07d -Block 0022 [ 30]: 0640bcfd3d78dc7d -Block 0022 [ 31]: f83e88ee65da93ea -Block 0022 [ 32]: d6df547213734546 -Block 0022 [ 33]: f029efdf2eaada54 -Block 0022 [ 34]: f785a308b8742c3f -Block 0022 [ 35]: ab6fb9b561569ae2 -Block 0022 [ 36]: c1bfad8d27e5b694 -Block 0022 [ 37]: 23bc68913631aa36 -Block 0022 [ 38]: 93f6b948c9fdef23 -Block 0022 [ 39]: 5edbee1a84d1f0a7 -Block 0022 [ 40]: 5bedf33c32a8665a -Block 0022 [ 41]: aa5a5d90dcac3d50 -Block 0022 [ 42]: eafcf9c119242b16 -Block 0022 [ 43]: e0e8518fcbe1abaf -Block 0022 [ 44]: 1cac6136bba6de36 -Block 0022 [ 45]: 9d83d72eec3e7108 -Block 0022 [ 46]: 3ffafb300b518e01 -Block 0022 [ 47]: 6fa4d3a312908d27 -Block 0022 [ 48]: 142c69037840cd39 -Block 0022 [ 49]: 280e1c649ba0260a -Block 0022 [ 50]: 55dc74836fe074df -Block 0022 [ 51]: 9703e674a4721656 -Block 0022 [ 52]: c069c595578ce657 -Block 0022 [ 53]: ac365998563c1143 -Block 0022 [ 54]: c85611d8d5d27e34 -Block 0022 [ 55]: ba4c934267f56ef5 -Block 0022 [ 56]: 103b25f8f428f4ce -Block 0022 [ 57]: e06848354bf96054 -Block 0022 [ 58]: aa5e6ba9c44c7a4b -Block 0022 [ 59]: 978bcbd3eede5e10 -Block 0022 [ 60]: 626d30eac9c66050 -Block 0022 [ 61]: 7479182c697b1ec6 -Block 0022 [ 62]: c1f34e2bdcdb7717 -Block 0022 [ 63]: ab17a27bd9e11520 -Block 0022 [ 64]: df9389a6153b5408 -Block 0022 [ 65]: 46a5ea923a45aabe -Block 0022 [ 66]: b8adeb3d2292be64 -Block 0022 [ 67]: 11e599917a19aee6 -Block 0022 [ 68]: 623ec355fc76dd16 -Block 0022 [ 69]: a51ac58cfe62691b -Block 0022 [ 70]: 2bd1c93b73345e7a -Block 0022 [ 71]: 0616e323173f8d81 -Block 0022 [ 72]: 2c3a81db077e2fba -Block 0022 [ 73]: cc66b376b64785d8 -Block 0022 [ 74]: 200d21fcf32e37ea -Block 0022 [ 75]: 13fef3f2b68463a0 -Block 0022 [ 76]: 28733ed577c7f7a5 -Block 0022 [ 77]: cfb7a1fd8a7da043 -Block 0022 [ 78]: 8502c5188ec6f568 -Block 0022 [ 79]: fff355982c5d5a35 -Block 0022 [ 80]: 3a2c65bd989cd16a -Block 0022 [ 81]: ac5d14d1805f8b4b -Block 0022 [ 82]: 9383626d4a1c5102 -Block 0022 [ 83]: 9803d583927d0984 -Block 0022 [ 84]: 498897d793f168c2 -Block 0022 [ 85]: 10251e23be6ac284 -Block 0022 [ 86]: 87919d5d2320d30d -Block 0022 [ 87]: 2f14689f30ea0eb8 -Block 0022 [ 88]: cb59ab5a48c10a12 -Block 0022 [ 89]: caaa6b45434178ca -Block 0022 [ 90]: ed5eae615338303e -Block 0022 [ 91]: 322586e5fc7a210c -Block 0022 [ 92]: c3bfb2fa7b1d8c70 -Block 0022 [ 93]: ed9cd80167917df4 -Block 0022 [ 94]: 49a1812cfb438ffa -Block 0022 [ 95]: 19f731eb01464eaa -Block 0022 [ 96]: 0369b5bddf4a867f -Block 0022 [ 97]: 7bfdd90aa04766e1 -Block 0022 [ 98]: 06a00edab882cc0c -Block 0022 [ 99]: 26d2c21ae47a0a3e -Block 0022 [100]: 673148ac664b927d -Block 0022 [101]: 5371f1dacb6189ab -Block 0022 [102]: dfd2dd883cf0ebf3 -Block 0022 [103]: 3dd89111bf1405b7 -Block 0022 [104]: 87d8e5833a8a4d8a -Block 0022 [105]: c28cc9f25cc89887 -Block 0022 [106]: 94f708bddbd46d36 -Block 0022 [107]: ba69d4f56b3b6f00 -Block 0022 [108]: 8d2d9679e0e99180 -Block 0022 [109]: 38c61e2d8f3c3a6c -Block 0022 [110]: 42fca3d24f84e642 -Block 0022 [111]: 5d59762e5a3944ff -Block 0022 [112]: 8ccf9047384acd68 -Block 0022 [113]: 6a0bd116f828077a -Block 0022 [114]: e807ea99cb1bc3e1 -Block 0022 [115]: 600c98e9e25fa233 -Block 0022 [116]: bee422c9314529e4 -Block 0022 [117]: 137d1cdcdcb07e6a -Block 0022 [118]: 9064f3eccd37e15e -Block 0022 [119]: 65a371f3bc67a32c -Block 0022 [120]: 8a30ca0e610902a2 -Block 0022 [121]: 7fe6c6b430c1d9a9 -Block 0022 [122]: 23e3a862121bac8e -Block 0022 [123]: 9d11401f5b21ef70 -Block 0022 [124]: 7fe3e8254eb4b904 -Block 0022 [125]: 8fd618e2b06951c9 -Block 0022 [126]: f0f4543eb4268123 -Block 0022 [127]: f82a3b4cbb64e6ff -Block 0023 [ 0]: 51b8f26d399c69bc -Block 0023 [ 1]: c071fa67c98eb6ab -Block 0023 [ 2]: cdab8aaa7131c6c1 -Block 0023 [ 3]: 75492b8715e5cf49 -Block 0023 [ 4]: c5b2b58f9b1a600d -Block 0023 [ 5]: a72ab04580d73772 -Block 0023 [ 6]: a9118d6a68c5b451 -Block 0023 [ 7]: 1a43b68a96e27b34 -Block 0023 [ 8]: bfc42018edd2ad91 -Block 0023 [ 9]: 5d1a6a93d9cd45cc -Block 0023 [ 10]: 3389bc0ca66422ab -Block 0023 [ 11]: d819b30b62996b9b -Block 0023 [ 12]: fca4eee794dcb19a -Block 0023 [ 13]: 824c758dafa29d8e -Block 0023 [ 14]: 96acaefa149817f9 -Block 0023 [ 15]: 554c904f393d2266 -Block 0023 [ 16]: ce8f97770d672269 -Block 0023 [ 17]: 8c643e7b155b1645 -Block 0023 [ 18]: 1e921a6839e64a92 -Block 0023 [ 19]: 82c49b54962e5525 -Block 0023 [ 20]: c805f82c3c20e36d -Block 0023 [ 21]: 69c9422e6d381027 -Block 0023 [ 22]: b04f13b7d1000957 -Block 0023 [ 23]: a307a1a3f4c2b044 -Block 0023 [ 24]: 111d0db7963f011f -Block 0023 [ 25]: 693d84f951fb010b -Block 0023 [ 26]: 38408ba11be93312 -Block 0023 [ 27]: 0f14c006cef1fcb2 -Block 0023 [ 28]: ebe364aeed4b3ec8 -Block 0023 [ 29]: c7712fdf99b74c7d -Block 0023 [ 30]: 01673c55e0bfdd6d -Block 0023 [ 31]: 60d075cd5efcbc0b -Block 0023 [ 32]: 647a26de4adf2227 -Block 0023 [ 33]: 585c686a2b7f32fa -Block 0023 [ 34]: 8cbc3c41b6d6fff3 -Block 0023 [ 35]: 8f101fdaf888b67e -Block 0023 [ 36]: 76df5f51b1d1a638 -Block 0023 [ 37]: f858bcc3c4e06420 -Block 0023 [ 38]: 0f72ef7a092b0a23 -Block 0023 [ 39]: 8bf7b4639413c9bd -Block 0023 [ 40]: 29a6c46f51ebe568 -Block 0023 [ 41]: a40fc18bf17b5490 -Block 0023 [ 42]: 98645e432602caca -Block 0023 [ 43]: 27f6f7eff49ede5e -Block 0023 [ 44]: 822b275c48e9d987 -Block 0023 [ 45]: bd8c451a58146d33 -Block 0023 [ 46]: cbd9150b80ba7822 -Block 0023 [ 47]: 762e616beb4ff189 -Block 0023 [ 48]: b7faabd20293c82d -Block 0023 [ 49]: c0ea5ba064106a91 -Block 0023 [ 50]: fc8d4176e1956aa3 -Block 0023 [ 51]: eef76c2a172e309d -Block 0023 [ 52]: 028b9a0678496439 -Block 0023 [ 53]: 02431190caf3229e -Block 0023 [ 54]: 93f958d07904ba5c -Block 0023 [ 55]: 7f9228bea5b3e7d3 -Block 0023 [ 56]: f7e8a67449b73db5 -Block 0023 [ 57]: e184d8d39ebfd9d7 -Block 0023 [ 58]: 458c260628950d29 -Block 0023 [ 59]: d5d59493f4f3ab49 -Block 0023 [ 60]: 52810f0d895154e6 -Block 0023 [ 61]: 48890c4359d36387 -Block 0023 [ 62]: d9ed391fc01aa28f -Block 0023 [ 63]: 7dc15dfc8848a73e -Block 0023 [ 64]: 0f5e24c089911cf7 -Block 0023 [ 65]: fb2d00b5197c5a9f -Block 0023 [ 66]: a585c2cd2050c293 -Block 0023 [ 67]: 822f77775f03bc9d -Block 0023 [ 68]: da1d24c62e225517 -Block 0023 [ 69]: c19dde644105c3f1 -Block 0023 [ 70]: e73998960ea21e02 -Block 0023 [ 71]: 18b22d33c3a507e1 -Block 0023 [ 72]: 92efaec756b407f2 -Block 0023 [ 73]: 69b5b5b9ac8e6902 -Block 0023 [ 74]: b92f44a99a2ed037 -Block 0023 [ 75]: 55c9ef9deced5f41 -Block 0023 [ 76]: adafa68c9b162398 -Block 0023 [ 77]: c81ddc531fe06ae2 -Block 0023 [ 78]: e04b242b72f95238 -Block 0023 [ 79]: 51c490474495bd78 -Block 0023 [ 80]: fb6f199815333b03 -Block 0023 [ 81]: 7112249b96f1b0e4 -Block 0023 [ 82]: 83231ce5117bcd91 -Block 0023 [ 83]: aa7e1b7fb06c7d1e -Block 0023 [ 84]: 3a2d3d8b02473340 -Block 0023 [ 85]: de732586a74d9314 -Block 0023 [ 86]: 7298cf9215c7f6b1 -Block 0023 [ 87]: 35ce550af4ddbc36 -Block 0023 [ 88]: b3030a9d8df310cc -Block 0023 [ 89]: d49daa0e515db0b6 -Block 0023 [ 90]: a408538a1a3757ce -Block 0023 [ 91]: 03cc331f9ac38ffe -Block 0023 [ 92]: 1fbe448017465116 -Block 0023 [ 93]: 53cc67fc2adf1894 -Block 0023 [ 94]: d16c84dc21a96369 -Block 0023 [ 95]: 45c1d58d1c6635cc -Block 0023 [ 96]: 3e9fdcaeb9ead4a3 -Block 0023 [ 97]: 453f5fbdb21f9e1a -Block 0023 [ 98]: 853b01fa14cffe9e -Block 0023 [ 99]: 429987c05c91ef53 -Block 0023 [100]: a2072cb67ffc5a65 -Block 0023 [101]: 37454a3792e46599 -Block 0023 [102]: 167b3dd6a5c04120 -Block 0023 [103]: 2a1f42086bfca6d1 -Block 0023 [104]: 3e13e3d094a55227 -Block 0023 [105]: 700908d898fd16de -Block 0023 [106]: b4ebced8311a6bbf -Block 0023 [107]: 4190aed4811f39c0 -Block 0023 [108]: 2a58b7961c373ac6 -Block 0023 [109]: e665ef6a1251f3c7 -Block 0023 [110]: d9add80a10d174dd -Block 0023 [111]: 90adc031a2dbf94c -Block 0023 [112]: 699c684665ad5329 -Block 0023 [113]: 872a3b6d8bbef466 -Block 0023 [114]: a20f7b5c18ce00fb -Block 0023 [115]: d07632df9d2f5403 -Block 0023 [116]: 237ac845201a666a -Block 0023 [117]: 04f4008ea14c1e58 -Block 0023 [118]: 67f8329c63fcfc8b -Block 0023 [119]: 1f2483d57a31386c -Block 0023 [120]: 9bc69c6b59e71be3 -Block 0023 [121]: 85f450aba2d1577b -Block 0023 [122]: fcb1312231908bf0 -Block 0023 [123]: 237d458ea94e6b6d -Block 0023 [124]: e49fba5fdf5c3936 -Block 0023 [125]: d2fdeee74597fb69 -Block 0023 [126]: 4928a8d471128e8b -Block 0023 [127]: 1a6082c717abd94c -Block 0024 [ 0]: 5958a22b70bf98ca -Block 0024 [ 1]: 57f117fb171d2dbd -Block 0024 [ 2]: 34312fb32bd1c304 -Block 0024 [ 3]: 8f2cd82a0db46627 -Block 0024 [ 4]: 298399822348198c -Block 0024 [ 5]: 7288500bf16998fe -Block 0024 [ 6]: dd3c003edb9de752 -Block 0024 [ 7]: fba874c3a38ab35b -Block 0024 [ 8]: 3a800e3301af7c15 -Block 0024 [ 9]: c8cccd3056b2e62a -Block 0024 [ 10]: 306cb44417a427f6 -Block 0024 [ 11]: caaf0cb8f35d653d -Block 0024 [ 12]: 4fe793dac54e868f -Block 0024 [ 13]: d52bda7f705b6301 -Block 0024 [ 14]: 82299afb64fb7cf3 -Block 0024 [ 15]: 1dd68220ead6db39 -Block 0024 [ 16]: f89c457e0b441514 -Block 0024 [ 17]: f6ed96b4cc9d62d7 -Block 0024 [ 18]: 9de2a04caa98deca -Block 0024 [ 19]: d0d9a743cdad41f1 -Block 0024 [ 20]: 092684735b3f7ed0 -Block 0024 [ 21]: ba06f39a89ddeac5 -Block 0024 [ 22]: cf5bf8b8feb52f7f -Block 0024 [ 23]: 2a1a3ebfd5664ee5 -Block 0024 [ 24]: 715c4f5c10c7df9b -Block 0024 [ 25]: 17e1625499f291ee -Block 0024 [ 26]: e42bb7eb1c580aca -Block 0024 [ 27]: e15b4ea4978bcf4e -Block 0024 [ 28]: a4ef3f981f368ac3 -Block 0024 [ 29]: dd2be60dc6fa8fe0 -Block 0024 [ 30]: 00bc12eb1460e664 -Block 0024 [ 31]: 6df456cc5c9a8e30 -Block 0024 [ 32]: 81ee03abc1b94e11 -Block 0024 [ 33]: 229eee89fa6765ba -Block 0024 [ 34]: 05c980ceda880f9e -Block 0024 [ 35]: 144fb8a0cbb32810 -Block 0024 [ 36]: 9d15ce141d201e80 -Block 0024 [ 37]: b83ba7e41fc01637 -Block 0024 [ 38]: 37418fc74877b29d -Block 0024 [ 39]: 3f539195743daba2 -Block 0024 [ 40]: 3973112b38cb695b -Block 0024 [ 41]: 690ac2df3a6e866a -Block 0024 [ 42]: b820d3887c305fda -Block 0024 [ 43]: 96398cc15455712e -Block 0024 [ 44]: 302d7154b452879a -Block 0024 [ 45]: 2a068b244898efe1 -Block 0024 [ 46]: c7f92e307cb22ece -Block 0024 [ 47]: 65360372a6062f65 -Block 0024 [ 48]: e1bb18c2e2e801b0 -Block 0024 [ 49]: 917ba27e80909276 -Block 0024 [ 50]: 893817757c7712ee -Block 0024 [ 51]: 1b8f1913ca9115ee -Block 0024 [ 52]: e66dbbc3f5b52329 -Block 0024 [ 53]: 1a3c941cab6e616a -Block 0024 [ 54]: 9c1d4791e9e03dd1 -Block 0024 [ 55]: d0bcd8855fec2860 -Block 0024 [ 56]: f4753fc9d00e3f17 -Block 0024 [ 57]: ee417f71c775107f -Block 0024 [ 58]: e5d134ad67ce823f -Block 0024 [ 59]: 73603420f330dc9b -Block 0024 [ 60]: 16cc64de47137a67 -Block 0024 [ 61]: abd7703e1a9697b4 -Block 0024 [ 62]: 9fe7e2341ea7d03a -Block 0024 [ 63]: 35e71533e92a5003 -Block 0024 [ 64]: 0cfb5d944e248005 -Block 0024 [ 65]: 0de2faf144671ca5 -Block 0024 [ 66]: 57a900216c27fa3c -Block 0024 [ 67]: 856a2968ecb60014 -Block 0024 [ 68]: ad045c92a406d6b6 -Block 0024 [ 69]: 55b8ccc11f289add -Block 0024 [ 70]: 485aa0c406a78646 -Block 0024 [ 71]: 598beecd4819c981 -Block 0024 [ 72]: 3e484b387f29eb7f -Block 0024 [ 73]: 5dffd582a0b86268 -Block 0024 [ 74]: e02bd64109d369c5 -Block 0024 [ 75]: 8ae28641db25300a -Block 0024 [ 76]: 349c098672bcacc1 -Block 0024 [ 77]: e513fedd3a71aa98 -Block 0024 [ 78]: 5b9db396f85b4b5e -Block 0024 [ 79]: c69258b2c8510a52 -Block 0024 [ 80]: 282e375ed617f67b -Block 0024 [ 81]: c7500ba4a34668cd -Block 0024 [ 82]: 096a1dc27f0d1c36 -Block 0024 [ 83]: 542bdf2ef5fab14f -Block 0024 [ 84]: eb7d48d2d0946bfb -Block 0024 [ 85]: 86cc9ba19e5d1b0a -Block 0024 [ 86]: af4ff929a67207a2 -Block 0024 [ 87]: 3b1a65ca42d52005 -Block 0024 [ 88]: 6f30cf327e92c077 -Block 0024 [ 89]: 26a74ed43084c50e -Block 0024 [ 90]: f139cd5c4604a050 -Block 0024 [ 91]: 65d1584ad83cff5d -Block 0024 [ 92]: 465ab84996ad2ad2 -Block 0024 [ 93]: 966ad44cd9213b19 -Block 0024 [ 94]: 3bb32bded3e109f1 -Block 0024 [ 95]: ec424f052913176c -Block 0024 [ 96]: d3f8b90bd9d7a44e -Block 0024 [ 97]: a57c3f3d5f7e3894 -Block 0024 [ 98]: dd295ea31e430456 -Block 0024 [ 99]: fa5d6f3c749c02b2 -Block 0024 [100]: 464ad61952defe18 -Block 0024 [101]: 35e8649acef1722f -Block 0024 [102]: ee5ae50599920a74 -Block 0024 [103]: f3824a188dde4bb6 -Block 0024 [104]: 95af191695fabeb1 -Block 0024 [105]: 303b94514b6547b8 -Block 0024 [106]: 038c732c6e2d8596 -Block 0024 [107]: f759939b268ab594 -Block 0024 [108]: a56dff1812e139bc -Block 0024 [109]: 98b71668f976ce94 -Block 0024 [110]: 6c29893f6b176e92 -Block 0024 [111]: 460d68ff632de327 -Block 0024 [112]: 87e56f61054566d3 -Block 0024 [113]: 5e40442c09947b73 -Block 0024 [114]: 8f55f37db55c1dfa -Block 0024 [115]: d6939ee647a66aea -Block 0024 [116]: ca69515ea441ad2f -Block 0024 [117]: 50ca5d2bdaff963f -Block 0024 [118]: eb78460ef25de562 -Block 0024 [119]: cbc0fd708d5c0dab -Block 0024 [120]: 66f619ea39fddc1f -Block 0024 [121]: d4446cedd28cafbb -Block 0024 [122]: 1777b81c1958776f -Block 0024 [123]: bdcabfc84292b6fe -Block 0024 [124]: 7d940c9fa0dde6bd -Block 0024 [125]: 1c177188c4335364 -Block 0024 [126]: cd9baecf1bb872ef -Block 0024 [127]: fbc047fb9b439a29 -Block 0025 [ 0]: fffb955af57af90b -Block 0025 [ 1]: e4871b8f02f26ecb -Block 0025 [ 2]: b89f59c3a5f723e6 -Block 0025 [ 3]: 6a8a73613f18f0ff -Block 0025 [ 4]: 040d4829377eb6ae -Block 0025 [ 5]: b94070732353e4d1 -Block 0025 [ 6]: fca08ebbbcdce029 -Block 0025 [ 7]: cdd7097aab05e4ab -Block 0025 [ 8]: f75a8252080cef39 -Block 0025 [ 9]: 1e961f4e04b6f7af -Block 0025 [ 10]: 0ce9670791be9695 -Block 0025 [ 11]: da78cba39e099ce9 -Block 0025 [ 12]: 3e636f44b1f40d7f -Block 0025 [ 13]: 6e37649cb5b98488 -Block 0025 [ 14]: 7fbe2099551d03d7 -Block 0025 [ 15]: 4a7a23f6d644562e -Block 0025 [ 16]: c4409c1f9e401137 -Block 0025 [ 17]: a4e562c13b8d87a1 -Block 0025 [ 18]: 1224688a119818cf -Block 0025 [ 19]: eeb1a045a905ea51 -Block 0025 [ 20]: 95a8e3c3ac0353c3 -Block 0025 [ 21]: 54678ef6109a8f3f -Block 0025 [ 22]: 97803b357d69c9b1 -Block 0025 [ 23]: 8e411ea1f50c55ba -Block 0025 [ 24]: 1d48fbcb0f4be52e -Block 0025 [ 25]: 4ea786fff3a71734 -Block 0025 [ 26]: dc2ee88f078ffbe6 -Block 0025 [ 27]: b3d61433d92e6848 -Block 0025 [ 28]: 7ebb5413bb1a23f8 -Block 0025 [ 29]: 338e907d6713761e -Block 0025 [ 30]: 612968dd685c9da2 -Block 0025 [ 31]: 64e5797faad44d22 -Block 0025 [ 32]: b1b4a32066421b11 -Block 0025 [ 33]: 7c110e3f427e61d6 -Block 0025 [ 34]: 6cd462dd0ab4293a -Block 0025 [ 35]: e4c99723248a7290 -Block 0025 [ 36]: eadfc82582c03ea0 -Block 0025 [ 37]: 129612d57eb1dfbb -Block 0025 [ 38]: 6a8862a2b2688716 -Block 0025 [ 39]: abef922090105cff -Block 0025 [ 40]: cf0f91207c4df18a -Block 0025 [ 41]: 4bda9ddc69523982 -Block 0025 [ 42]: 105980383d263220 -Block 0025 [ 43]: c4cafc2fa2a587a3 -Block 0025 [ 44]: bf50382c61e8fe19 -Block 0025 [ 45]: 692c2622e148a03e -Block 0025 [ 46]: 2a6d1d440295bcd0 -Block 0025 [ 47]: d62efe2d0f92e710 -Block 0025 [ 48]: 826da3a890c5e1e2 -Block 0025 [ 49]: 663723f1834287b5 -Block 0025 [ 50]: f46454259bead5fa -Block 0025 [ 51]: 1e1a2680b594fd39 -Block 0025 [ 52]: 52a4a56d81b88b95 -Block 0025 [ 53]: 92748b0473ce8d9f -Block 0025 [ 54]: ee6f171b385e5d19 -Block 0025 [ 55]: aacfdddac7c3f517 -Block 0025 [ 56]: 539a85613e58bf5d -Block 0025 [ 57]: 2b4cf3a7835ff74c -Block 0025 [ 58]: 45483cef811ca2e8 -Block 0025 [ 59]: c6873023ebf4778b -Block 0025 [ 60]: 9e5089ac1526d66f -Block 0025 [ 61]: 5cd34c48f407df18 -Block 0025 [ 62]: 2bac068ca9b03ef4 -Block 0025 [ 63]: 915a96c8e754fd66 -Block 0025 [ 64]: cf074a9cc0a6b214 -Block 0025 [ 65]: fb1fd47a829329e5 -Block 0025 [ 66]: b580c0a7affee031 -Block 0025 [ 67]: b3370d02e6d57513 -Block 0025 [ 68]: c88763d6f3f26905 -Block 0025 [ 69]: 824015be540107e8 -Block 0025 [ 70]: 974852db1cc7cfd9 -Block 0025 [ 71]: c0c548f28c6acdaa -Block 0025 [ 72]: 74c0e45d099d474c -Block 0025 [ 73]: e01c4e0b64b77834 -Block 0025 [ 74]: 0533c14d980c6add -Block 0025 [ 75]: 7931a36cd22d2a8b -Block 0025 [ 76]: 647eed006a3fc885 -Block 0025 [ 77]: 88940919b5005bf1 -Block 0025 [ 78]: 1332011b4b4e24c7 -Block 0025 [ 79]: bd4d710d4b931591 -Block 0025 [ 80]: 3d89c84970ea6107 -Block 0025 [ 81]: b04c056f00571ca2 -Block 0025 [ 82]: d0bd666534c0d44f -Block 0025 [ 83]: 9f1164e75cf94894 -Block 0025 [ 84]: c6c56ddd0f5f4493 -Block 0025 [ 85]: 1ed747a48ee8f87d -Block 0025 [ 86]: 9cac80352e623c0a -Block 0025 [ 87]: cbdea7a2df6bfb4e -Block 0025 [ 88]: 3d6ecb1d982994e9 -Block 0025 [ 89]: d4c792872c764c15 -Block 0025 [ 90]: 79faf69807727613 -Block 0025 [ 91]: 1c405ccc2f32aa26 -Block 0025 [ 92]: e96dc0bfec0ffe37 -Block 0025 [ 93]: 1ddcf2a5a9a12c0c -Block 0025 [ 94]: 3b21043c19368275 -Block 0025 [ 95]: 58c025bc65af4427 -Block 0025 [ 96]: daa87500eb620a38 -Block 0025 [ 97]: 3790f46f2d01a114 -Block 0025 [ 98]: 087569d8c107b1d9 -Block 0025 [ 99]: 10f1119e07b0104a -Block 0025 [100]: 981b39ea26ef6710 -Block 0025 [101]: a40aca9a880d40c2 -Block 0025 [102]: 276ad3400db54205 -Block 0025 [103]: be927efd5bb6802f -Block 0025 [104]: 6b1117aad52e6712 -Block 0025 [105]: e3869b2533e5096b -Block 0025 [106]: 710997b71098645e -Block 0025 [107]: 95dd77a863f9a024 -Block 0025 [108]: 6c76d5d9e63fc207 -Block 0025 [109]: dfcf1703e32fbfa5 -Block 0025 [110]: 2983d700ab45e0a3 -Block 0025 [111]: c841bfe21f9eb608 -Block 0025 [112]: 72d9ff6681ba6a74 -Block 0025 [113]: 711238b8a95c3e82 -Block 0025 [114]: 272454ca5092cf79 -Block 0025 [115]: 5f4bcda7442c1e30 -Block 0025 [116]: b66944c097396096 -Block 0025 [117]: ed46ed6d53e1f5db -Block 0025 [118]: b36d5660ece1b88b -Block 0025 [119]: 88e858ca46e2305e -Block 0025 [120]: 11108330154b20c1 -Block 0025 [121]: ae10945de50396a1 -Block 0025 [122]: 00601fe44af3dc39 -Block 0025 [123]: cded1287f7aa43cd -Block 0025 [124]: 6125ca775f4cfc39 -Block 0025 [125]: 3706dc4eb6d80eb1 -Block 0025 [126]: 5ce8104cd2e618f5 -Block 0025 [127]: 7f16a3db08aab211 -Block 0026 [ 0]: 3b6d558b7fccdd53 -Block 0026 [ 1]: a544c949c207d436 -Block 0026 [ 2]: 4f05ca25a912bec0 -Block 0026 [ 3]: a6b6f42c94bc91f3 -Block 0026 [ 4]: 4c4eb732113ce6fe -Block 0026 [ 5]: 6afec4690e064a81 -Block 0026 [ 6]: a9323369420d2f5b -Block 0026 [ 7]: 96c7bc19f69257a9 -Block 0026 [ 8]: 9d7db71bd4074103 -Block 0026 [ 9]: 88d2a1c41a6ce81a -Block 0026 [ 10]: e40db3394f14b5a5 -Block 0026 [ 11]: a967fefac9d7e8a3 -Block 0026 [ 12]: 2fd7352e854b1206 -Block 0026 [ 13]: be2e6a28eab6128d -Block 0026 [ 14]: a9729098c0f878d9 -Block 0026 [ 15]: 0e1b105835094b57 -Block 0026 [ 16]: f4f8507148d7f0cc -Block 0026 [ 17]: 35847eb6b06e585b -Block 0026 [ 18]: fe0df436b8c4df7c -Block 0026 [ 19]: b54dfc1bddb831e0 -Block 0026 [ 20]: 94264483b7a844c8 -Block 0026 [ 21]: dcb003a6f54fdf81 -Block 0026 [ 22]: ae895c4749947d07 -Block 0026 [ 23]: bed43306a1331e1e -Block 0026 [ 24]: 2a4edc085592e99f -Block 0026 [ 25]: 1d06dca4f7fb434e -Block 0026 [ 26]: e11459b38294321c -Block 0026 [ 27]: 09649d2543a5580d -Block 0026 [ 28]: a5b7173e47b3406c -Block 0026 [ 29]: e7cf3f358b5ab1f1 -Block 0026 [ 30]: 8aff441ef512a931 -Block 0026 [ 31]: 7be19ef04fdc3d2c -Block 0026 [ 32]: c81d7667a07aaa9e -Block 0026 [ 33]: fe4823fbe0bb8a55 -Block 0026 [ 34]: f73b8a0ac6af9b7c -Block 0026 [ 35]: 1ca6b1c30eabb8d3 -Block 0026 [ 36]: b0b4bcc8c37d93d7 -Block 0026 [ 37]: 72469952f139ff3a -Block 0026 [ 38]: d40d54c30124b2ed -Block 0026 [ 39]: d84403e6a4c3e34e -Block 0026 [ 40]: d93aaad4d2527f83 -Block 0026 [ 41]: f1f949a66f3a18d7 -Block 0026 [ 42]: c7d30c69a5f5c6cf -Block 0026 [ 43]: 76ae6fdef0d1071b -Block 0026 [ 44]: ab5c585cdfcb6660 -Block 0026 [ 45]: 75b33764c05e3c1c -Block 0026 [ 46]: 8d2f1ddc99b4d99b -Block 0026 [ 47]: 9132c9b1d5e1e4e3 -Block 0026 [ 48]: 9c95a9501e691354 -Block 0026 [ 49]: a1c0ea6541164f7e -Block 0026 [ 50]: 1a49c52ea7f4184d -Block 0026 [ 51]: f838de5180921654 -Block 0026 [ 52]: f2e2dff13e56428d -Block 0026 [ 53]: 71a8509caea45532 -Block 0026 [ 54]: 4e0da0f5e8cbdb8d -Block 0026 [ 55]: d39178911c31f23d -Block 0026 [ 56]: 4d059db4fe3d169c -Block 0026 [ 57]: 26587aa03357b26c -Block 0026 [ 58]: a47c0cf82a6040d3 -Block 0026 [ 59]: a07bf1b71f367b38 -Block 0026 [ 60]: 2b342ef89c62082b -Block 0026 [ 61]: a3cc586fb2337cab -Block 0026 [ 62]: 7eefd8d0cd7df4c2 -Block 0026 [ 63]: 52afa96dbe082021 -Block 0026 [ 64]: 30f55321f2854f92 -Block 0026 [ 65]: 115d29bd6dece5fd -Block 0026 [ 66]: 1d0f141ad5d8719b -Block 0026 [ 67]: 4afbed23cc14e230 -Block 0026 [ 68]: 30ec5385851eb75f -Block 0026 [ 69]: f942b6889c0db151 -Block 0026 [ 70]: 0ce65f36b9fc6e1e -Block 0026 [ 71]: ac1adbd125d68e79 -Block 0026 [ 72]: b68d2c6c2fbe117a -Block 0026 [ 73]: 4232b02967e3bcbf -Block 0026 [ 74]: 8ef379e8c5e55b42 -Block 0026 [ 75]: d4ed00451596a830 -Block 0026 [ 76]: bd35cd14d571e4d7 -Block 0026 [ 77]: 30bd60dfda09b19e -Block 0026 [ 78]: cdfac1b883b76655 -Block 0026 [ 79]: e3d86b100591fb9d -Block 0026 [ 80]: 59ac24671e7d91af -Block 0026 [ 81]: 1025f27f0920055d -Block 0026 [ 82]: 5c02dce58a113ddb -Block 0026 [ 83]: acea7e212c79dee5 -Block 0026 [ 84]: 23d9b815b356c83b -Block 0026 [ 85]: aaa4b234d49dad9e -Block 0026 [ 86]: 444d0ee609380e75 -Block 0026 [ 87]: 654226c4b8f021d2 -Block 0026 [ 88]: 8a35cd5fd6e1f1ab -Block 0026 [ 89]: 862ed14517163100 -Block 0026 [ 90]: 84c0af64eecbf39c -Block 0026 [ 91]: 7e0e4dda300a5a06 -Block 0026 [ 92]: 3d9c7f8c3f41b725 -Block 0026 [ 93]: a35832a7eed21f0a -Block 0026 [ 94]: 0e6bd91ab1c37748 -Block 0026 [ 95]: 3b3f02996786041a -Block 0026 [ 96]: ca39b69b0189da7b -Block 0026 [ 97]: 85685752f7f2a6ee -Block 0026 [ 98]: 8083b8fef5bce9e7 -Block 0026 [ 99]: a04409fb917324af -Block 0026 [100]: 5149daf90529e164 -Block 0026 [101]: fd670942829b7d61 -Block 0026 [102]: 044c3084bb345c6d -Block 0026 [103]: 7bc15cb8f326fb8d -Block 0026 [104]: 9d5fed35368ce865 -Block 0026 [105]: 032b26359ab11c29 -Block 0026 [106]: dde5da90ee01852e -Block 0026 [107]: dfde2792e941c242 -Block 0026 [108]: 45a07e3678367b66 -Block 0026 [109]: e4edb6bde64b0e64 -Block 0026 [110]: 1286bd9d9c15602e -Block 0026 [111]: 1a6f9332b8991cd6 -Block 0026 [112]: 51462feab66fe436 -Block 0026 [113]: 41b7a2049b1d12aa -Block 0026 [114]: 957d14cf0a3493b5 -Block 0026 [115]: b6babfaffaa0bbd5 -Block 0026 [116]: d0e64434099d290b -Block 0026 [117]: 98fbc6565c59cd02 -Block 0026 [118]: deb0588aea27fbba -Block 0026 [119]: 468f0be17af8d3ff -Block 0026 [120]: 94c95df708a119cc -Block 0026 [121]: 6feeb4e265a0b9c9 -Block 0026 [122]: 60e9bdaed056d95e -Block 0026 [123]: feaee97d93a661b5 -Block 0026 [124]: 1a9af81d81a90039 -Block 0026 [125]: 67d6562cf870264e -Block 0026 [126]: 0879f3db8106fff8 -Block 0026 [127]: c43a9b2adb848626 -Block 0027 [ 0]: e31278b9d98ae491 -Block 0027 [ 1]: d91a581dc45b28ca -Block 0027 [ 2]: e538e13966ffa8f6 -Block 0027 [ 3]: ac33db0c5c683ccf -Block 0027 [ 4]: 0a2cdded2dd669be -Block 0027 [ 5]: 91159d8febc616a2 -Block 0027 [ 6]: 491e41276e638eda -Block 0027 [ 7]: a450647808334031 -Block 0027 [ 8]: a49dc91b02dd152a -Block 0027 [ 9]: a1df5af93a458258 -Block 0027 [ 10]: 460ce6ddd889f093 -Block 0027 [ 11]: 2b83ec3afbce05d7 -Block 0027 [ 12]: 1feb1038e4a41337 -Block 0027 [ 13]: d894f759db4aa187 -Block 0027 [ 14]: 9cd3e83bd2ce2a3c -Block 0027 [ 15]: 122329bec91f22ae -Block 0027 [ 16]: 3164305c06597ed1 -Block 0027 [ 17]: 15ea332d31d63ba0 -Block 0027 [ 18]: 332575da2a0d5a15 -Block 0027 [ 19]: d3a985b92cd0052a -Block 0027 [ 20]: 7a3093d0e4099f67 -Block 0027 [ 21]: ba30f2011e951173 -Block 0027 [ 22]: 4f642efd6120e0a2 -Block 0027 [ 23]: 30da68372ea56477 -Block 0027 [ 24]: a8c50c022cc2621c -Block 0027 [ 25]: 1843c5f366fa233b -Block 0027 [ 26]: 81977f521ced01ed -Block 0027 [ 27]: 8ff95bacc0bf5d46 -Block 0027 [ 28]: 371e8ae93b4429ae -Block 0027 [ 29]: 30b09e60a2275b62 -Block 0027 [ 30]: 421c4df3058f5fc8 -Block 0027 [ 31]: 1d844cdbfc4783e1 -Block 0027 [ 32]: 209fd5f6c6242e1f -Block 0027 [ 33]: e31964f0c87dd5a3 -Block 0027 [ 34]: 0bff3b23315f2228 -Block 0027 [ 35]: 7ee79794c7d9698c -Block 0027 [ 36]: c2078da63d1be25a -Block 0027 [ 37]: 54cfc650dc428f86 -Block 0027 [ 38]: c1170df8c640ac41 -Block 0027 [ 39]: f6374626601c138f -Block 0027 [ 40]: b3305d99f063651f -Block 0027 [ 41]: 5fa3a3b86034d02c -Block 0027 [ 42]: 43d617ee14d7394c -Block 0027 [ 43]: f0b3e3740ecad01a -Block 0027 [ 44]: 1484e54190aaefad -Block 0027 [ 45]: 886306c94039c2e5 -Block 0027 [ 46]: 453f49ff9990d8f4 -Block 0027 [ 47]: a160b0bf87129ee1 -Block 0027 [ 48]: 14b6ebec2855245e -Block 0027 [ 49]: be87ad9bbb8fc5d5 -Block 0027 [ 50]: 4e4f69ba2205542d -Block 0027 [ 51]: eeec95e6f93b691b -Block 0027 [ 52]: 2374eda0b7e30be3 -Block 0027 [ 53]: 4f375a04345486a9 -Block 0027 [ 54]: c16f94d33a670c38 -Block 0027 [ 55]: edce5f8c4a99318a -Block 0027 [ 56]: c7bd4b43701dd32b -Block 0027 [ 57]: c5a828d63f58f1f7 -Block 0027 [ 58]: d9d5ff2b896b3531 -Block 0027 [ 59]: 883a28b0478db04d -Block 0027 [ 60]: 2aa444c3b59378c8 -Block 0027 [ 61]: 8af8d16ebf538d25 -Block 0027 [ 62]: 67a9d02865c2ab42 -Block 0027 [ 63]: 4a6439bdb7311890 -Block 0027 [ 64]: f935e598a1205145 -Block 0027 [ 65]: 8d4ae634d1a9a333 -Block 0027 [ 66]: 05657afa85fe632a -Block 0027 [ 67]: 079e46ed57d012c5 -Block 0027 [ 68]: 03230abf66c1b425 -Block 0027 [ 69]: c54bebb4faccaee9 -Block 0027 [ 70]: 6b28e6219d1019bd -Block 0027 [ 71]: 16d88dd182ed969a -Block 0027 [ 72]: 626866912c3eb137 -Block 0027 [ 73]: 193204f7038cb9ac -Block 0027 [ 74]: 156377647e514c90 -Block 0027 [ 75]: 29f72e6ff7e69cc7 -Block 0027 [ 76]: a6145fd88785d18a -Block 0027 [ 77]: ea5e0c3735fee25c -Block 0027 [ 78]: f2e3c04a7f3d6d3f -Block 0027 [ 79]: 3420eedce88e6a7d -Block 0027 [ 80]: 527cbae723451344 -Block 0027 [ 81]: 01c3b478819839eb -Block 0027 [ 82]: f43ca33dd55c49ec -Block 0027 [ 83]: 84722b68ed9b37a1 -Block 0027 [ 84]: 71aaae11c3523d4e -Block 0027 [ 85]: 0cab426f58a8fbde -Block 0027 [ 86]: 2f5fc56279063dd9 -Block 0027 [ 87]: fd3487c76bdfdfdc -Block 0027 [ 88]: b1fcd893026ef087 -Block 0027 [ 89]: ae175ee5084c0d71 -Block 0027 [ 90]: 1c70e03b18315565 -Block 0027 [ 91]: b4e8b34398ea69aa -Block 0027 [ 92]: 07ae38f296bb69fa -Block 0027 [ 93]: 2faee36940f2aa3c -Block 0027 [ 94]: 1e941b12ecb46c33 -Block 0027 [ 95]: 47f49d65e574cad5 -Block 0027 [ 96]: 0a5724315ec4a324 -Block 0027 [ 97]: 2c4efcb88bcad6a0 -Block 0027 [ 98]: ed6990a06e8bf816 -Block 0027 [ 99]: 6df7b115876ed9fd -Block 0027 [100]: 3c3f84384e37e9e7 -Block 0027 [101]: 4b709add16911961 -Block 0027 [102]: 7082128e781fb92f -Block 0027 [103]: 836d704d595fc0a5 -Block 0027 [104]: 0d9e0264bfabdc41 -Block 0027 [105]: fad2dbb39cf7aad9 -Block 0027 [106]: 6e9a57fb1ce6b7b9 -Block 0027 [107]: 625b2973f4342d84 -Block 0027 [108]: 24aa411e48a6ec83 -Block 0027 [109]: 2cc130bd20f276a2 -Block 0027 [110]: 509f9bd51c0dd4ae -Block 0027 [111]: 63a7c8803249998f -Block 0027 [112]: a384c027387b681e -Block 0027 [113]: 701a14dc10ed445f -Block 0027 [114]: 9b4a9df7cf4cba15 -Block 0027 [115]: aa8620c74110cd2c -Block 0027 [116]: 55fb138ff1bbf400 -Block 0027 [117]: 434796a4f710f9be -Block 0027 [118]: a186f7c79917528c -Block 0027 [119]: 314348a58aa47154 -Block 0027 [120]: 0d274caa7dd6c7bc -Block 0027 [121]: 78dfe448ab422a4c -Block 0027 [122]: ea252bcb1be302c2 -Block 0027 [123]: 11761870538cf90f -Block 0027 [124]: f4aa00a486ac10fa -Block 0027 [125]: ee815be93ebf5894 -Block 0027 [126]: 0aaf12c8aec427b7 -Block 0027 [127]: 7b96d15b1284c04e -Block 0028 [ 0]: 82408712ce17f7a9 -Block 0028 [ 1]: f3e8c6e4c2f3e305 -Block 0028 [ 2]: a1581ca69ca9f63b -Block 0028 [ 3]: 50375c67927594de -Block 0028 [ 4]: 03b078c2c1613ef7 -Block 0028 [ 5]: f25f8649d71d7906 -Block 0028 [ 6]: d404193575b2833d -Block 0028 [ 7]: 0875a307b451cb1b -Block 0028 [ 8]: fea3dc97668368ed -Block 0028 [ 9]: 410ef3337a1a4548 -Block 0028 [ 10]: ec3acd7c9bc49f3c -Block 0028 [ 11]: ea5cbdc2f31e3bb2 -Block 0028 [ 12]: 3a061ca85fa84ea9 -Block 0028 [ 13]: d14f05b512c0e069 -Block 0028 [ 14]: ab58a9b9c9d15251 -Block 0028 [ 15]: 6a04b0b1c6a5c825 -Block 0028 [ 16]: 9ae70846c06f4457 -Block 0028 [ 17]: ee90f2fd9876bd4b -Block 0028 [ 18]: 42507e9f20bfd886 -Block 0028 [ 19]: 311aa207eeee0e0d -Block 0028 [ 20]: 6c9695e4d7e07918 -Block 0028 [ 21]: 011cdbb9ef07be82 -Block 0028 [ 22]: aa0a6e601a7bae7c -Block 0028 [ 23]: a3a986d785723d13 -Block 0028 [ 24]: f09ae3599dc42a45 -Block 0028 [ 25]: dab459b86f3f5ac2 -Block 0028 [ 26]: a54c5e996255ca2c -Block 0028 [ 27]: 3dcb342379aff5fa -Block 0028 [ 28]: 0ba802ee0df38dbe -Block 0028 [ 29]: 19515b83587e110a -Block 0028 [ 30]: a12d0bed5dab0a06 -Block 0028 [ 31]: ac84bf5e3a98b0be -Block 0028 [ 32]: e79e0e2a508e9386 -Block 0028 [ 33]: f1cde8b958b67cf4 -Block 0028 [ 34]: 4a13d79c7f6cb7a0 -Block 0028 [ 35]: 2f300090f464a21c -Block 0028 [ 36]: b6fc86496fc9aec2 -Block 0028 [ 37]: 3dfc35eca793cb7f -Block 0028 [ 38]: d2e1696c9a5a2928 -Block 0028 [ 39]: 7c795e7fffd86289 -Block 0028 [ 40]: 52c0ee95ea6fdd02 -Block 0028 [ 41]: b311d199b6aa9218 -Block 0028 [ 42]: 8d56ba4b30fb07e3 -Block 0028 [ 43]: ce62133b53ec1832 -Block 0028 [ 44]: 058384bef5f3d313 -Block 0028 [ 45]: fc95f2620df24e07 -Block 0028 [ 46]: f431e68bf6a58395 -Block 0028 [ 47]: 85ee8f4c9006b459 -Block 0028 [ 48]: cd5fa5365ae87a42 -Block 0028 [ 49]: 1f2288fd8d5dee5c -Block 0028 [ 50]: cd6374c3e2531ff9 -Block 0028 [ 51]: ba608140ca8b7b5c -Block 0028 [ 52]: 9aff6af649f3f64f -Block 0028 [ 53]: 2303c6e1cc4e2dd0 -Block 0028 [ 54]: ef87ff083178fa81 -Block 0028 [ 55]: 26ea3aad00f9e95f -Block 0028 [ 56]: 2e57136f63ca2fd8 -Block 0028 [ 57]: e61e0f60a1830217 -Block 0028 [ 58]: 0bacb0ed448e2b29 -Block 0028 [ 59]: 0f317990dade48ed -Block 0028 [ 60]: c3e2cb9770557283 -Block 0028 [ 61]: 8f97cbf5fc705c60 -Block 0028 [ 62]: 288061965c9746da -Block 0028 [ 63]: b154d61f4849d1ec -Block 0028 [ 64]: 8e9397a83d213b4e -Block 0028 [ 65]: 3e6ad59c9c4acb0f -Block 0028 [ 66]: 8fcf18a12abee65a -Block 0028 [ 67]: d5388ddf42a6c674 -Block 0028 [ 68]: cda99d9620ef82c6 -Block 0028 [ 69]: a119d3c283ed8468 -Block 0028 [ 70]: 30cdcad011da7a62 -Block 0028 [ 71]: a64f272088e46d39 -Block 0028 [ 72]: e672d69e8780b365 -Block 0028 [ 73]: e13f1c2a7ba72820 -Block 0028 [ 74]: 45343118a2755927 -Block 0028 [ 75]: b1ec327fd0a4ff57 -Block 0028 [ 76]: d1e0af3240192798 -Block 0028 [ 77]: 24ec1776f40433bf -Block 0028 [ 78]: 47d7132f3de6411f -Block 0028 [ 79]: 02d281c561b8ced6 -Block 0028 [ 80]: 2caed014dd19d801 -Block 0028 [ 81]: 6545a1f9c40f7e7c -Block 0028 [ 82]: 88258916728f5bb7 -Block 0028 [ 83]: d97be6e93280df68 -Block 0028 [ 84]: 6a4f41e251970d36 -Block 0028 [ 85]: c284daf1359e41d9 -Block 0028 [ 86]: 1fea88bb5cc85cc7 -Block 0028 [ 87]: f1b628fc85ecf74b -Block 0028 [ 88]: 35060adb5334aa39 -Block 0028 [ 89]: f0da6211239f1269 -Block 0028 [ 90]: f1e5bf17338128c2 -Block 0028 [ 91]: b5db0ef6368d57ce -Block 0028 [ 92]: 0d1481e26bf9adb5 -Block 0028 [ 93]: 8c03a83009478238 -Block 0028 [ 94]: dbaf06e92da90e37 -Block 0028 [ 95]: c69d1544bd0221b4 -Block 0028 [ 96]: 36e0a7c126fb9e05 -Block 0028 [ 97]: 5aa9391a902aaf36 -Block 0028 [ 98]: 77c19e82519e5f61 -Block 0028 [ 99]: 9acdb0dc8e2ad24a -Block 0028 [100]: de2075d90c6af446 -Block 0028 [101]: df405d10e227bd96 -Block 0028 [102]: eecb434ab0e99e4c -Block 0028 [103]: 6f464c7524235641 -Block 0028 [104]: 681e7bb3b3f94a16 -Block 0028 [105]: c814771fb2efa395 -Block 0028 [106]: c0b3c7fa8bec6349 -Block 0028 [107]: bf9dfc97a5f3249d -Block 0028 [108]: 34801d8873481e24 -Block 0028 [109]: 15675a609abee274 -Block 0028 [110]: 02e87c0225da6405 -Block 0028 [111]: d28117b6afe29a54 -Block 0028 [112]: 2c542767ebc86fd3 -Block 0028 [113]: 9114939163ffd3a2 -Block 0028 [114]: 39a0e8876489cce5 -Block 0028 [115]: bbe0cc86440e5373 -Block 0028 [116]: 5c952928c554bc57 -Block 0028 [117]: 34adbba55eccd688 -Block 0028 [118]: 7265edb6c99b1b04 -Block 0028 [119]: 011de91e6ab8b36d -Block 0028 [120]: d7726399cd53e5b3 -Block 0028 [121]: 8baf8b805bed1886 -Block 0028 [122]: c8395bc031b6ccf6 -Block 0028 [123]: 0f71ca7ca368a89e -Block 0028 [124]: a5a1786001895577 -Block 0028 [125]: 709d49b068d06531 -Block 0028 [126]: 0b27ca67ef1d7153 -Block 0028 [127]: 7e427c6463689e90 -Block 0029 [ 0]: ce34cb10538a4488 -Block 0029 [ 1]: 211d7a9991acb9e3 -Block 0029 [ 2]: 75f08e5bb287cf6c -Block 0029 [ 3]: 4eeced3480b5d365 -Block 0029 [ 4]: 6caec38b6e905cd4 -Block 0029 [ 5]: d58d7afd8bcc419d -Block 0029 [ 6]: 28c97c8881b3dd13 -Block 0029 [ 7]: cb7b9b3bfaf46afe -Block 0029 [ 8]: dbc42c4b47931b08 -Block 0029 [ 9]: 805428575a21e671 -Block 0029 [ 10]: 0e64fc553cdc48f2 -Block 0029 [ 11]: bffbd5d1dd48fb3f -Block 0029 [ 12]: 58abded29f1e14b4 -Block 0029 [ 13]: 957d09bfd9417b5e -Block 0029 [ 14]: 757184cd6a80c2ca -Block 0029 [ 15]: fffb01be941b2719 -Block 0029 [ 16]: b1bac4e2e7d85eb2 -Block 0029 [ 17]: 6b6df4ba8b62d354 -Block 0029 [ 18]: 37ab98e92c226ac1 -Block 0029 [ 19]: 8da51813d943ef0e -Block 0029 [ 20]: 7c5ecf9ef55246d8 -Block 0029 [ 21]: afcb74a0b3c74e32 -Block 0029 [ 22]: 9ff7327fb6626ec6 -Block 0029 [ 23]: 6d88801c470a838c -Block 0029 [ 24]: e381a1d478169f61 -Block 0029 [ 25]: c4f6ed8539d52fb6 -Block 0029 [ 26]: 9dd42394f963ec51 -Block 0029 [ 27]: 608e7c79c7e9ebd7 -Block 0029 [ 28]: 635bf787f483f095 -Block 0029 [ 29]: ba3ea37f512a88e1 -Block 0029 [ 30]: d59c8e73f3f6f620 -Block 0029 [ 31]: 0bcab889d84e2297 -Block 0029 [ 32]: eba1a6994b5a806d -Block 0029 [ 33]: e5800b70faf85d82 -Block 0029 [ 34]: 17543408abf86929 -Block 0029 [ 35]: d2742aed91d14b30 -Block 0029 [ 36]: 8d864eb756300f8f -Block 0029 [ 37]: 2602a7f3885d0b00 -Block 0029 [ 38]: 38a96b1f178072af -Block 0029 [ 39]: 99f063fa0e0257b0 -Block 0029 [ 40]: 553e5382a39016b2 -Block 0029 [ 41]: 40e5c09d46bf467c -Block 0029 [ 42]: 151efa072d8c3041 -Block 0029 [ 43]: e6b90bff69fb7364 -Block 0029 [ 44]: 2f3d83591040ef91 -Block 0029 [ 45]: 9a51b0677c6883cd -Block 0029 [ 46]: e954652d3758b685 -Block 0029 [ 47]: efc3b3718b8b9d5e -Block 0029 [ 48]: e3b40fcd501db6b2 -Block 0029 [ 49]: 007b05e3352c4a78 -Block 0029 [ 50]: f66361d2e4399495 -Block 0029 [ 51]: 0e6b2a8c1385c597 -Block 0029 [ 52]: 3d8955a1de9f30e2 -Block 0029 [ 53]: 4eaecd9633dc2db8 -Block 0029 [ 54]: 0b0db104ae05c9e2 -Block 0029 [ 55]: b8d8a61f200d677c -Block 0029 [ 56]: e9b85044e092c51f -Block 0029 [ 57]: 9aa1b914b367bf0c -Block 0029 [ 58]: f87f835683f94dc6 -Block 0029 [ 59]: ea3d166054271b20 -Block 0029 [ 60]: bbb5e4b368a6a76a -Block 0029 [ 61]: 2ebacce22764c387 -Block 0029 [ 62]: eea281c46296adc7 -Block 0029 [ 63]: f6b70768992d4a3f -Block 0029 [ 64]: 008caf1824393415 -Block 0029 [ 65]: 6e1e17e781647ede -Block 0029 [ 66]: 96471c30c4fad451 -Block 0029 [ 67]: dbea40a67071a38d -Block 0029 [ 68]: 6a68c126f7df8502 -Block 0029 [ 69]: 55f3b484495c01f5 -Block 0029 [ 70]: 71f1ceeebaab92ba -Block 0029 [ 71]: aa7d9f1f1d542cd3 -Block 0029 [ 72]: 57a7e002e8148b3f -Block 0029 [ 73]: d066574b2673ec63 -Block 0029 [ 74]: fa064ece3661f27c -Block 0029 [ 75]: 59c0c37896842666 -Block 0029 [ 76]: b9907779bbbfefdd -Block 0029 [ 77]: 3a3c0948985d0305 -Block 0029 [ 78]: 4399ad0a4be323a9 -Block 0029 [ 79]: 016efe5c4529314a -Block 0029 [ 80]: 7345362c79299fbe -Block 0029 [ 81]: 3890e8bd3dc199ed -Block 0029 [ 82]: a9f84b570d9caf19 -Block 0029 [ 83]: 12e79bf3de2f764d -Block 0029 [ 84]: e1279245288ab28c -Block 0029 [ 85]: c042d0f79b5efb78 -Block 0029 [ 86]: 4b595741415f2dd7 -Block 0029 [ 87]: 661557ace1e3bda7 -Block 0029 [ 88]: a4ebbccc3c16fe3e -Block 0029 [ 89]: 97b76196c5c64fb0 -Block 0029 [ 90]: 6ab0d520070ae215 -Block 0029 [ 91]: cf04f4e7f61c6ddd -Block 0029 [ 92]: 39bbdca29baf8767 -Block 0029 [ 93]: 4728cb7d2d918220 -Block 0029 [ 94]: 8cea866afb3619b5 -Block 0029 [ 95]: 983d3c2dd31d6d69 -Block 0029 [ 96]: c16d0d3adc9f83b3 -Block 0029 [ 97]: 9010a83289cfb845 -Block 0029 [ 98]: 65cc7b1c436419ca -Block 0029 [ 99]: a50cf5e64562c1ec -Block 0029 [100]: 0f45ea095a9b45f7 -Block 0029 [101]: 550cc6f9be6b48f6 -Block 0029 [102]: c9a3f23adc2dd645 -Block 0029 [103]: 6ffa2f9d7f00f22b -Block 0029 [104]: 3f491b65d9a190da -Block 0029 [105]: 9da25d64e68ef5c7 -Block 0029 [106]: 4e9c12aeb5b97c2f -Block 0029 [107]: b59116c75353ce2a -Block 0029 [108]: 78bde1417564ec29 -Block 0029 [109]: 6fe1002528bdf6a0 -Block 0029 [110]: a965b63d2265c7f3 -Block 0029 [111]: 3f3222d651afad85 -Block 0029 [112]: 78964a97c84f4574 -Block 0029 [113]: a1f7808dfb3a8d18 -Block 0029 [114]: 53c18846d2abe738 -Block 0029 [115]: c07f6787ec22fff1 -Block 0029 [116]: e0b52b87e0f04cc4 -Block 0029 [117]: 0a67631a61fa149f -Block 0029 [118]: c17063aa02acb80a -Block 0029 [119]: 435f430b7080099d -Block 0029 [120]: 02eda91081cbf64c -Block 0029 [121]: 3a1fef6339dfbeec -Block 0029 [122]: 821837c795d62201 -Block 0029 [123]: f7415295fd0566f8 -Block 0029 [124]: 002af4e7624778e0 -Block 0029 [125]: 44c86de1dba9e648 -Block 0029 [126]: d13799f233f47269 -Block 0029 [127]: 62a153063663a128 -Block 0030 [ 0]: cb74d134bab6af1e -Block 0030 [ 1]: ab9139ca3e85e177 -Block 0030 [ 2]: 9621e7b27594caba -Block 0030 [ 3]: 4a56f22b1f95e350 -Block 0030 [ 4]: 7ba0a9626274b5aa -Block 0030 [ 5]: f1e47cfd11b89c41 -Block 0030 [ 6]: 6e60e2043581457e -Block 0030 [ 7]: b5baadc50e169bd4 -Block 0030 [ 8]: 35d0006692605bcc -Block 0030 [ 9]: 89285fd649487c0f -Block 0030 [ 10]: eed082cc1ca0a043 -Block 0030 [ 11]: 4d9b0cd9d0281f25 -Block 0030 [ 12]: b55bb9d61c0b63e6 -Block 0030 [ 13]: ccfc302b1ab3e413 -Block 0030 [ 14]: f5da9ad788fdf771 -Block 0030 [ 15]: 5869f718f687b0c8 -Block 0030 [ 16]: 4380f6ac31d55bb7 -Block 0030 [ 17]: fd59c18a39161816 -Block 0030 [ 18]: 2c82dd132b577957 -Block 0030 [ 19]: b90e90d65d0218c2 -Block 0030 [ 20]: c7933579f4e7371b -Block 0030 [ 21]: 25738f968c48b489 -Block 0030 [ 22]: 663ea3e6e1060896 -Block 0030 [ 23]: fe99b4410d933510 -Block 0030 [ 24]: 65ca199967fc758b -Block 0030 [ 25]: fc90f25e8372fb67 -Block 0030 [ 26]: fb913979e7f4b1e4 -Block 0030 [ 27]: 864b7e4de3fc5054 -Block 0030 [ 28]: d183f3e8faf284d4 -Block 0030 [ 29]: f5b2909c45867bfd -Block 0030 [ 30]: fa6a2176bbf0d3a7 -Block 0030 [ 31]: 008c78a9bab195cc -Block 0030 [ 32]: bdf9a2cb8d1c3a97 -Block 0030 [ 33]: f84c7c9cbab7d537 -Block 0030 [ 34]: 0bd511cb729e9313 -Block 0030 [ 35]: b4700a2eef01d3d5 -Block 0030 [ 36]: 6e4e3a5dad8e2b39 -Block 0030 [ 37]: 6e4175da89e007e1 -Block 0030 [ 38]: 359996202e7388a9 -Block 0030 [ 39]: 54584a0d03f2c6a8 -Block 0030 [ 40]: e427aee0fcbf2ed2 -Block 0030 [ 41]: a7e40b854431f3e0 -Block 0030 [ 42]: 5bf9228dca48af5e -Block 0030 [ 43]: 94c0ccd190109464 -Block 0030 [ 44]: 7a2df0d59d50f12e -Block 0030 [ 45]: c002ab1a1baed32e -Block 0030 [ 46]: 682d82c9a7884da3 -Block 0030 [ 47]: 9b1487167135ae71 -Block 0030 [ 48]: bf2a8533abb8919d -Block 0030 [ 49]: 26e7c343260a13d7 -Block 0030 [ 50]: 7a362cbe6db84f0a -Block 0030 [ 51]: 7e9d180198969377 -Block 0030 [ 52]: cb69a25076a05638 -Block 0030 [ 53]: dc0e76db9f2f52a3 -Block 0030 [ 54]: ce43a758d54a4f41 -Block 0030 [ 55]: 356825d901de7161 -Block 0030 [ 56]: 315a55a0af60ad63 -Block 0030 [ 57]: 4824c7effdfbd07b -Block 0030 [ 58]: c638523a5383ba1a -Block 0030 [ 59]: 4edc3a0bc3c78832 -Block 0030 [ 60]: 8ac605905eb84c4e -Block 0030 [ 61]: d2900261470e1a67 -Block 0030 [ 62]: 05d65c06e6a24220 -Block 0030 [ 63]: 8435ff377b5ff7e0 -Block 0030 [ 64]: 2bcd4b532b81bdf6 -Block 0030 [ 65]: ec252e030064a0b4 -Block 0030 [ 66]: 524cf8e135a3b747 -Block 0030 [ 67]: 278f7b7951c7e470 -Block 0030 [ 68]: 0f77150c9e415e43 -Block 0030 [ 69]: 99caa3c58f33c0e1 -Block 0030 [ 70]: ce440f899289cc0d -Block 0030 [ 71]: 9e26e5b9a2dfe6c7 -Block 0030 [ 72]: 7e11aa36d81f216a -Block 0030 [ 73]: 79ed978e247bb8a9 -Block 0030 [ 74]: 732b4d5012bbdd26 -Block 0030 [ 75]: e82b506b197611ba -Block 0030 [ 76]: 82ced7eae9605c32 -Block 0030 [ 77]: de31b9ed48fc41c3 -Block 0030 [ 78]: c8bde09405c92a1c -Block 0030 [ 79]: 3e1a29cf3f4a5776 -Block 0030 [ 80]: fd7e85092fc9a5be -Block 0030 [ 81]: f68ed9c8d8bc10b4 -Block 0030 [ 82]: 8db739301e460d8b -Block 0030 [ 83]: 016ee7802d808790 -Block 0030 [ 84]: c7334fbbe7c7617e -Block 0030 [ 85]: bd7cb0187038f41a -Block 0030 [ 86]: cf4f5bb891351075 -Block 0030 [ 87]: 57a50cc2a966e2b3 -Block 0030 [ 88]: 4df30e75df349360 -Block 0030 [ 89]: f6ee30a92abccd66 -Block 0030 [ 90]: 330110ce83d23bc6 -Block 0030 [ 91]: 7a2d87b1916840f9 -Block 0030 [ 92]: 6480fafbacf1bf46 -Block 0030 [ 93]: 8c8df72a73b670f0 -Block 0030 [ 94]: 509f06fe2f62ed7a -Block 0030 [ 95]: 3ca2dacea09e846c -Block 0030 [ 96]: b2c0f93dd6edc763 -Block 0030 [ 97]: f35e434d06f52de1 -Block 0030 [ 98]: 4cd8554a66f8fd3a -Block 0030 [ 99]: 36464d67ffd919cb -Block 0030 [100]: d159b776820b30d5 -Block 0030 [101]: c520a82f0474cd8d -Block 0030 [102]: b86f0ac925d8a02b -Block 0030 [103]: 32078216de9940ee -Block 0030 [104]: e5237ffb6a726a31 -Block 0030 [105]: 5c6d7d3176378cc2 -Block 0030 [106]: 31929784e802d335 -Block 0030 [107]: 70215d61e6fb7cfe -Block 0030 [108]: 29211cace6a7f1d8 -Block 0030 [109]: faeef455cd5b7582 -Block 0030 [110]: fc0a0780010b856b -Block 0030 [111]: fe71632fb6931fcd -Block 0030 [112]: da0efe624942d9fd -Block 0030 [113]: 7ad3b463f50f27cd -Block 0030 [114]: 995014de8f61fbfb -Block 0030 [115]: af5d8a32f37e474d -Block 0030 [116]: 37fb11c2566e3136 -Block 0030 [117]: ca1b55d0775da139 -Block 0030 [118]: 6dcb9acd9f90a0e7 -Block 0030 [119]: 575bea75322eee40 -Block 0030 [120]: 03388524c06fc342 -Block 0030 [121]: b87fba57be6a7d1e -Block 0030 [122]: ece9497a243c32bc -Block 0030 [123]: 5a01f4734f05fbe2 -Block 0030 [124]: fc6e4fa8a0b860b2 -Block 0030 [125]: 7002e3123bfdb5df -Block 0030 [126]: 7804b63c35fbe698 -Block 0030 [127]: c9c8f414df7820cb -Block 0031 [ 0]: b2ad75524c3d2a81 -Block 0031 [ 1]: fab04039a96af6d0 -Block 0031 [ 2]: 8494705bd7a6eaa4 -Block 0031 [ 3]: 814756c584e7272d -Block 0031 [ 4]: 927c5b0c90d75d6b -Block 0031 [ 5]: f888d4ed7afe38a6 -Block 0031 [ 6]: 982046c3b2d45322 -Block 0031 [ 7]: c24ce29090879caa -Block 0031 [ 8]: a4b4eb89764c8d01 -Block 0031 [ 9]: 1f09e9c76fcd765c -Block 0031 [ 10]: 1659b74e12faff66 -Block 0031 [ 11]: bf5b57bc59958c88 -Block 0031 [ 12]: 0eec19264c1d7051 -Block 0031 [ 13]: 1715310a772896f3 -Block 0031 [ 14]: 557e296e0f059142 -Block 0031 [ 15]: ac4535969b81e7d7 -Block 0031 [ 16]: aaba64a3051b10c6 -Block 0031 [ 17]: 13afbdc722284e8a -Block 0031 [ 18]: 5546653a8b26b3df -Block 0031 [ 19]: 8384fe398ed31455 -Block 0031 [ 20]: a2697ab5df6b271e -Block 0031 [ 21]: 8e1d55e24a96e84b -Block 0031 [ 22]: 0e654de47d5a74ee -Block 0031 [ 23]: 4e7ac436b7f97825 -Block 0031 [ 24]: 3591d7151256c14e -Block 0031 [ 25]: 0b6607c547626a3d -Block 0031 [ 26]: 0ea9d4e533da04b7 -Block 0031 [ 27]: b519298b2333dbe0 -Block 0031 [ 28]: c9cb7b614d5c918a -Block 0031 [ 29]: f0a5f1041cab56ae -Block 0031 [ 30]: d1442001904abff9 -Block 0031 [ 31]: b097acb54c2d261b -Block 0031 [ 32]: c1d50486ebb4f4e1 -Block 0031 [ 33]: 6dfb55d658d7e408 -Block 0031 [ 34]: 65182f413c8a6f35 -Block 0031 [ 35]: 4fc028be89308272 -Block 0031 [ 36]: a0c559768bb48b2e -Block 0031 [ 37]: 42770640b289c67f -Block 0031 [ 38]: 8796a70b12d4e4bb -Block 0031 [ 39]: b7f621233f598131 -Block 0031 [ 40]: 2f506feb2e3ec6e6 -Block 0031 [ 41]: de73f26918d7cd59 -Block 0031 [ 42]: dbc7b351f3247b08 -Block 0031 [ 43]: 28ea9c36274ce050 -Block 0031 [ 44]: 2abebad94846282d -Block 0031 [ 45]: 83eb22a616227ead -Block 0031 [ 46]: 342a5e9acca0cf39 -Block 0031 [ 47]: 840ba32a918920d7 -Block 0031 [ 48]: f5aa7f6f0df6e05b -Block 0031 [ 49]: 906884611a46cf58 -Block 0031 [ 50]: e3a046400e2ee967 -Block 0031 [ 51]: 8e76abba13b3814a -Block 0031 [ 52]: 75b5822697cfe363 -Block 0031 [ 53]: c3627120cc9bc843 -Block 0031 [ 54]: 0328e0f870076cc6 -Block 0031 [ 55]: 831f34dbcbdc6961 -Block 0031 [ 56]: ce2d8f9f7aeeef1a -Block 0031 [ 57]: 609845487b08ba98 -Block 0031 [ 58]: 6f726d45e2e3b3a0 -Block 0031 [ 59]: ba0632a27042f031 -Block 0031 [ 60]: 46c959e91f4a5b3f -Block 0031 [ 61]: 583c6d6e3a34d9f9 -Block 0031 [ 62]: befa926623f509d2 -Block 0031 [ 63]: 4a4915a0a0e22615 -Block 0031 [ 64]: 1f2646e77fdc1e4e -Block 0031 [ 65]: 0caa62caf21df1f1 -Block 0031 [ 66]: f311e1d1f8213e5c -Block 0031 [ 67]: ec49f4c725ae6e90 -Block 0031 [ 68]: 9ff8475fddb053ee -Block 0031 [ 69]: 0bb1bd705e94b7b1 -Block 0031 [ 70]: fd35b76f36338f73 -Block 0031 [ 71]: 6474c9a0a5b6c69f -Block 0031 [ 72]: 91921541f2e2291f -Block 0031 [ 73]: 5e2acd572e3fc12e -Block 0031 [ 74]: 9bb771e4e18a755f -Block 0031 [ 75]: 8caf6c26722198cf -Block 0031 [ 76]: 33dbf836dae269d3 -Block 0031 [ 77]: c841bcc4839a9e52 -Block 0031 [ 78]: b15fd0aa30b4a4e4 -Block 0031 [ 79]: b1d063d4fe67e21c -Block 0031 [ 80]: d4a1a03300a6e442 -Block 0031 [ 81]: f81d00de7f973647 -Block 0031 [ 82]: dcd91b2b94d78125 -Block 0031 [ 83]: 76da9792b43e75b8 -Block 0031 [ 84]: a7e3f6568c0a0388 -Block 0031 [ 85]: 566feb89b3d88185 -Block 0031 [ 86]: 8c4d3688f80e91b6 -Block 0031 [ 87]: 8fe53124e6104a2e -Block 0031 [ 88]: da5da5041344dd1b -Block 0031 [ 89]: 721b41ec066d2189 -Block 0031 [ 90]: 074debbac6f9761b -Block 0031 [ 91]: 6a07879fc9bf2ec9 -Block 0031 [ 92]: ccc3e1eb61fad409 -Block 0031 [ 93]: 3be4750e63efdf7b -Block 0031 [ 94]: 013c1f56ea5b8ce9 -Block 0031 [ 95]: 2072659db16979f8 -Block 0031 [ 96]: be5ac68e4277d087 -Block 0031 [ 97]: 65e7fcc9935f7384 -Block 0031 [ 98]: 2af35d2546b9a4b3 -Block 0031 [ 99]: 50d9bc80f125eeef -Block 0031 [100]: 31573ae31f5913b8 -Block 0031 [101]: aa2fe8799d89d353 -Block 0031 [102]: 0dd3e255f4addbe8 -Block 0031 [103]: 48d05bb4cf7721ad -Block 0031 [104]: 0158e051ef3d08cf -Block 0031 [105]: 0a56281c57ad20c4 -Block 0031 [106]: 80396de3b32e46c3 -Block 0031 [107]: 6bcc4e1db72d4e2c -Block 0031 [108]: 1d723a0ad2f4e794 -Block 0031 [109]: 7ff3511be9bcb0eb -Block 0031 [110]: cc6493fcb3730f84 -Block 0031 [111]: 9ecdcbc35ead32f5 -Block 0031 [112]: 426b36f39c969d5b -Block 0031 [113]: 25e66eca6aeed6af -Block 0031 [114]: 94eeb55600b80f69 -Block 0031 [115]: 5e1f278e6ea9b3fe -Block 0031 [116]: 903011fc53d26f6e -Block 0031 [117]: 800522387513c939 -Block 0031 [118]: 25125a6704c6bc7e -Block 0031 [119]: 2fa464d5b41a34fb -Block 0031 [120]: c72f0545be5542a3 -Block 0031 [121]: a10f157445827b48 -Block 0031 [122]: d2d0f854a21a9fb2 -Block 0031 [123]: 35bf180e3e99d207 -Block 0031 [124]: 377fa81666dc7f2b -Block 0031 [125]: 50e586398a9c39c8 -Block 0031 [126]: 6f732732a550924a -Block 0031 [127]: 81f88b28683ea8e5 - - After pass 1: -Block 0000 [ 0]: 3653ec9d01583df9 -Block 0000 [ 1]: 69ef53a72d1e1fd3 -Block 0000 [ 2]: 35635631744ab54f -Block 0000 [ 3]: 599512e96a37ab6e -Block 0000 [ 4]: 11391e9e42d1727c -Block 0000 [ 5]: 68d9d83a0713308b -Block 0000 [ 6]: 444c077ac115bb06 -Block 0000 [ 7]: fa68fa58d2b1fe8c -Block 0000 [ 8]: 8cf2e516a943abc4 -Block 0000 [ 9]: 891ca59c509138e1 -Block 0000 [ 10]: 7291b599e55eef18 -Block 0000 [ 11]: 1cf3e52886b2d9a4 -Block 0000 [ 12]: f3d4f1c26d3bc3a7 -Block 0000 [ 13]: ebc0f159103930fb -Block 0000 [ 14]: 9d0e061ef578e457 -Block 0000 [ 15]: 657a0e383db3614f -Block 0000 [ 16]: 2f1a908810976771 -Block 0000 [ 17]: 2ee9ce495a10b1bf -Block 0000 [ 18]: 0a60ade9f8611f08 -Block 0000 [ 19]: 907562b6de768481 -Block 0000 [ 20]: abbc7c71a02ff51c -Block 0000 [ 21]: 0a4e54f1106b6829 -Block 0000 [ 22]: 19937636107aa126 -Block 0000 [ 23]: 94f317629d1e115e -Block 0000 [ 24]: 01735b70329da1ba -Block 0000 [ 25]: 2da84930050a9c85 -Block 0000 [ 26]: 9f5332bdeed5ddeb -Block 0000 [ 27]: f42fecaeb7c25ba7 -Block 0000 [ 28]: db04f73f19403546 -Block 0000 [ 29]: 50697466fc80a862 -Block 0000 [ 30]: 78e038fe6c14fbb6 -Block 0000 [ 31]: 9b3de1088ce8033b -Block 0000 [ 32]: a63d4e4238b04a7a -Block 0000 [ 33]: 23ebc3adb723f426 -Block 0000 [ 34]: 1e421bae1038fd72 -Block 0000 [ 35]: f32e959bd493074a -Block 0000 [ 36]: 54e7f63fbdb5120c -Block 0000 [ 37]: 5f13118507e32e40 -Block 0000 [ 38]: 8cfd2f530eb342c6 -Block 0000 [ 39]: 42a4662bc122631e -Block 0000 [ 40]: 2f2a42c25eb6b1d0 -Block 0000 [ 41]: c614544be8fd0242 -Block 0000 [ 42]: 8bff294407d8be83 -Block 0000 [ 43]: 379e972199be20d0 -Block 0000 [ 44]: 7cdcb86a483bdb13 -Block 0000 [ 45]: 7a9efb775d45fd5d -Block 0000 [ 46]: 805dde2ff0070620 -Block 0000 [ 47]: 90dd43d77ad18c6f -Block 0000 [ 48]: 7ff0f47c081cd430 -Block 0000 [ 49]: 3b4bc5b40c3a8bb0 -Block 0000 [ 50]: 244fd293bf92f6f0 -Block 0000 [ 51]: 918b5d7d87043317 -Block 0000 [ 52]: 325716b7c7d591ac -Block 0000 [ 53]: 5827e7dc7460861d -Block 0000 [ 54]: 3afde4f1a339ba42 -Block 0000 [ 55]: 113ebacbd3fc27b5 -Block 0000 [ 56]: 7a392c2c66580dd2 -Block 0000 [ 57]: e78dc05db58e9e56 -Block 0000 [ 58]: 2ce081c891f27df0 -Block 0000 [ 59]: 498e7444269edb84 -Block 0000 [ 60]: 30f49d0dff3d19d9 -Block 0000 [ 61]: ebf523ff60b33bdf -Block 0000 [ 62]: 0c526595a91783b3 -Block 0000 [ 63]: bf93e7a4c4ca448a -Block 0000 [ 64]: eccc571eea4e0e3c -Block 0000 [ 65]: 0515ef24beec6eba -Block 0000 [ 66]: d4c7f0191146a785 -Block 0000 [ 67]: 28510792c00ea028 -Block 0000 [ 68]: eabbb492bb8ddc72 -Block 0000 [ 69]: 2b5630d0f66edb76 -Block 0000 [ 70]: c7900d53d49bd11a -Block 0000 [ 71]: a7397a31b873a4ed -Block 0000 [ 72]: a934024c7831ee82 -Block 0000 [ 73]: 99687c5827049c6e -Block 0000 [ 74]: 2463b0944f7afc99 -Block 0000 [ 75]: 127d0cea387336aa -Block 0000 [ 76]: cc47e487d5302850 -Block 0000 [ 77]: d0c679f4fb3f254f -Block 0000 [ 78]: 4de0fe5b2c042730 -Block 0000 [ 79]: 087acaa178249a56 -Block 0000 [ 80]: 716b39281e7f58e8 -Block 0000 [ 81]: 9684bb90ccd593d9 -Block 0000 [ 82]: e19085d10568c895 -Block 0000 [ 83]: bdc586c127426313 -Block 0000 [ 84]: e33ec65fad156adf -Block 0000 [ 85]: bd93ce1323fa699f -Block 0000 [ 86]: 3756176df8374754 -Block 0000 [ 87]: 1091998d92ded6ac -Block 0000 [ 88]: 683e5b4e92cb1ca6 -Block 0000 [ 89]: 778091253835a3eb -Block 0000 [ 90]: 07e28c26450e8693 -Block 0000 [ 91]: 1da773d2e6d92769 -Block 0000 [ 92]: 3989bc2c07ba9834 -Block 0000 [ 93]: 0d93ca091aad8e43 -Block 0000 [ 94]: 37af1ccf9e1cefa3 -Block 0000 [ 95]: 0fd62080ccb4ce31 -Block 0000 [ 96]: 03a1b7f8d0162e46 -Block 0000 [ 97]: 6ac173fb65e1cbbf -Block 0000 [ 98]: 189075a0659f064f -Block 0000 [ 99]: c29a285760117d92 -Block 0000 [100]: 247843ddcddc7890 -Block 0000 [101]: 1be24f8cb903a20a -Block 0000 [102]: 46eb5d3b470786ce -Block 0000 [103]: be56c4d643934ba1 -Block 0000 [104]: 9e651893bc735d5d -Block 0000 [105]: 4f871eaf1f794e49 -Block 0000 [106]: 56273f5a6c3b89f5 -Block 0000 [107]: 02ffd0b92501d42f -Block 0000 [108]: 4a5227dd9f8fa8d1 -Block 0000 [109]: 0a99d3c9b46c7166 -Block 0000 [110]: bb35852244977767 -Block 0000 [111]: 7cb7a53b429942f3 -Block 0000 [112]: 8e33186e83a78946 -Block 0000 [113]: 0f32b608e1669ccc -Block 0000 [114]: 21e1bff9df3954b3 -Block 0000 [115]: 75296cac5717c7cd -Block 0000 [116]: 8872ab5cd801dc1b -Block 0000 [117]: c603b4e7ead82b88 -Block 0000 [118]: 4947f3d801e8b66f -Block 0000 [119]: 5041f62cd217a07c -Block 0000 [120]: 71dfe74776cc6427 -Block 0000 [121]: 88c82a82688ebec4 -Block 0000 [122]: 0653c4287a96288b -Block 0000 [123]: 861f5e03145e80e3 -Block 0000 [124]: 1b6d130eb435f36c -Block 0000 [125]: d7e886df048e697c -Block 0000 [126]: 22b36cb1baeb62cd -Block 0000 [127]: b77f140e91100813 -Block 0001 [ 0]: 81124fce35cc5710 -Block 0001 [ 1]: 43ec50543b0faaac -Block 0001 [ 2]: 6c565d6733116dec -Block 0001 [ 3]: 1759dc023b510979 -Block 0001 [ 4]: 1b5519894c7b2078 -Block 0001 [ 5]: bc4bed6befe8d304 -Block 0001 [ 6]: 178492a875711577 -Block 0001 [ 7]: e1cbb4c720abb332 -Block 0001 [ 8]: 733611dc7bbae615 -Block 0001 [ 9]: 567709079916a34a -Block 0001 [ 10]: 36858b8177a813dc -Block 0001 [ 11]: 0dd1613f2a714398 -Block 0001 [ 12]: c5e7877dfbd1eaae -Block 0001 [ 13]: a315d2540b581798 -Block 0001 [ 14]: f18cfd0db8736089 -Block 0001 [ 15]: e7072ac65ddb839b -Block 0001 [ 16]: 3bed624365a97822 -Block 0001 [ 17]: 304a75bc092ee455 -Block 0001 [ 18]: 32a64b19179742b1 -Block 0001 [ 19]: c82223ccdc54d357 -Block 0001 [ 20]: 1eb47f0156342bbc -Block 0001 [ 21]: b36bebef735e1852 -Block 0001 [ 22]: 7fe800c212f0906c -Block 0001 [ 23]: 579d6218ce6fe61e -Block 0001 [ 24]: d4b3493b26c9f785 -Block 0001 [ 25]: 775ab9715439d3c5 -Block 0001 [ 26]: 2e630456603452e6 -Block 0001 [ 27]: 834cd73b296d494e -Block 0001 [ 28]: 553bbbf94cfff19c -Block 0001 [ 29]: e78310bf508983a6 -Block 0001 [ 30]: a352a63a40dda197 -Block 0001 [ 31]: e9cad1f6ed343b8b -Block 0001 [ 32]: 204d0835f3bf7718 -Block 0001 [ 33]: 47b32e01810c9d29 -Block 0001 [ 34]: c957ec19cd11646a -Block 0001 [ 35]: 255112dd67affbec -Block 0001 [ 36]: 348b305e17163ed5 -Block 0001 [ 37]: 56a926ac34bca1c8 -Block 0001 [ 38]: fa7a6a2922b31af6 -Block 0001 [ 39]: 1bd79c636e0f2a74 -Block 0001 [ 40]: 42519d33f9f14e23 -Block 0001 [ 41]: a85dda53cf3578dc -Block 0001 [ 42]: 304d870f2b18c29a -Block 0001 [ 43]: b892e91867ad87a3 -Block 0001 [ 44]: 0367569c89868574 -Block 0001 [ 45]: c047ce8c1af8ed45 -Block 0001 [ 46]: 7f6b62534d011f4f -Block 0001 [ 47]: 3b8a08ed0cd898bc -Block 0001 [ 48]: 579b179396a0c222 -Block 0001 [ 49]: 60111f485f3242b6 -Block 0001 [ 50]: ef8f04ab050255e2 -Block 0001 [ 51]: 5ca4ce2a56f8a405 -Block 0001 [ 52]: 1d0bc04b788dd5bf -Block 0001 [ 53]: fe0b8ea94c6e44fd -Block 0001 [ 54]: ac51b0ea5463fb69 -Block 0001 [ 55]: b53cc41288485a16 -Block 0001 [ 56]: 3b172d8c9ba1f26c -Block 0001 [ 57]: 755aaeabee7d1ed1 -Block 0001 [ 58]: ae6f57837889a218 -Block 0001 [ 59]: c4b68cf3ba7e9d31 -Block 0001 [ 60]: 785c5926588d66ad -Block 0001 [ 61]: 16ee9e11e724cac2 -Block 0001 [ 62]: 99aa9c0135bbd6c9 -Block 0001 [ 63]: fe66ef3ee8b5e358 -Block 0001 [ 64]: 7f6bd31c05aaea24 -Block 0001 [ 65]: 8c81895933056445 -Block 0001 [ 66]: 05a4b86707aa6002 -Block 0001 [ 67]: 4d096ba83f4475dc -Block 0001 [ 68]: b490dfd82309ef2a -Block 0001 [ 69]: 5a9260540e60db06 -Block 0001 [ 70]: 2474f0859aa0ac72 -Block 0001 [ 71]: 7300eacf9d86d2c1 -Block 0001 [ 72]: 1556af20a3ef8067 -Block 0001 [ 73]: 86c16a21ce83eb70 -Block 0001 [ 74]: 6b5302cadc4572c5 -Block 0001 [ 75]: 9b7922765f0e0354 -Block 0001 [ 76]: e3f2198c12a9712a -Block 0001 [ 77]: bf9819c3f7cc5a86 -Block 0001 [ 78]: afee5f2d3320b0bd -Block 0001 [ 79]: 379115408f928093 -Block 0001 [ 80]: 908219f9bcb28820 -Block 0001 [ 81]: 4665baf819453030 -Block 0001 [ 82]: c90a059a656fc183 -Block 0001 [ 83]: 33c3291622ecdf31 -Block 0001 [ 84]: 775a68f8b3966014 -Block 0001 [ 85]: 53ef801db9388b80 -Block 0001 [ 86]: 81cbda0dfbf65fa1 -Block 0001 [ 87]: fd4ac24b61d3c8d7 -Block 0001 [ 88]: 5e7046798be87806 -Block 0001 [ 89]: aa4e6b8bfcca95fb -Block 0001 [ 90]: a2001d03233b2f0e -Block 0001 [ 91]: 7d538530f96085a0 -Block 0001 [ 92]: d38f62f231f9b52e -Block 0001 [ 93]: 8dc3081a086d9daa -Block 0001 [ 94]: 883c50417dbaf081 -Block 0001 [ 95]: bd002bb540f35485 -Block 0001 [ 96]: cc68837fc25c9a87 -Block 0001 [ 97]: 4ed107bce88e73c1 -Block 0001 [ 98]: e7ff0c41a1e3bc4a -Block 0001 [ 99]: 488b1809f472dc9d -Block 0001 [100]: 35410408ece21800 -Block 0001 [101]: 7b50848a016e79cb -Block 0001 [102]: e985719d6f64a9b2 -Block 0001 [103]: 006df69a7bca976f -Block 0001 [104]: e890b263c7cc5970 -Block 0001 [105]: 35979016181fbbd2 -Block 0001 [106]: e4fff85feadc39b9 -Block 0001 [107]: 87f8a036894442e2 -Block 0001 [108]: 2c4dfff4c9de094a -Block 0001 [109]: 51b8eea696cbde4c -Block 0001 [110]: b8768c7bf0ac6cdb -Block 0001 [111]: 03ade3d5b85bd0de -Block 0001 [112]: 3e34032d46be2e95 -Block 0001 [113]: d552fe73d03a380d -Block 0001 [114]: 610b3c1ec2e06ab6 -Block 0001 [115]: fff69e45577af380 -Block 0001 [116]: cd645a3a107953e7 -Block 0001 [117]: 99edaeb0890c5417 -Block 0001 [118]: ac44c680e31c3d51 -Block 0001 [119]: 9b6a30e934f83dad -Block 0001 [120]: 31b9d0d40d03a80f -Block 0001 [121]: 1dc2ec1683f87714 -Block 0001 [122]: 4e6fd78afefad588 -Block 0001 [123]: 0a7857fe9c9ae15d -Block 0001 [124]: 5a894bc70b57a8f5 -Block 0001 [125]: 82a6248eefbd8c0c -Block 0001 [126]: ac1200ef990a5f7f -Block 0001 [127]: 7e2b809c5e620aca -Block 0002 [ 0]: ab531950d650d8de -Block 0002 [ 1]: afbbd0a8f33b8f3f -Block 0002 [ 2]: eae43ba8d1fada95 -Block 0002 [ 3]: 37a7c613b7bc4b8e -Block 0002 [ 4]: 797c0187f0118661 -Block 0002 [ 5]: e975fc3402de84be -Block 0002 [ 6]: 5f7211c91b7f2f1f -Block 0002 [ 7]: a82fccd7a5c06f12 -Block 0002 [ 8]: 99a47006ee9f1139 -Block 0002 [ 9]: f539ccdbc25a4cc1 -Block 0002 [ 10]: e71e6596f62cdd5a -Block 0002 [ 11]: 451148e009460163 -Block 0002 [ 12]: d9ee486b10b2806e -Block 0002 [ 13]: 33f5d1433c73585e -Block 0002 [ 14]: a8490151cb101d0d -Block 0002 [ 15]: da549e6dd1679df6 -Block 0002 [ 16]: 809e74b211e1b935 -Block 0002 [ 17]: df0bd60e619d438a -Block 0002 [ 18]: a6e4f669e3ef3bd6 -Block 0002 [ 19]: 2dbb7b100306ab24 -Block 0002 [ 20]: 9ec25a6c655e51da -Block 0002 [ 21]: 12c2c6acc71c45ef -Block 0002 [ 22]: 4a3b0beb690d22dc -Block 0002 [ 23]: c4bd5a1b4d874685 -Block 0002 [ 24]: 4eb892c29db734d7 -Block 0002 [ 25]: 682d40abc1e166f4 -Block 0002 [ 26]: 2f78b0124d8e32d7 -Block 0002 [ 27]: 2d2c778215c4ea0c -Block 0002 [ 28]: 6adfd023b9c5f338 -Block 0002 [ 29]: 05db2297aaf11e44 -Block 0002 [ 30]: a0f73a984d9e0238 -Block 0002 [ 31]: 2dd204256a5cb98b -Block 0002 [ 32]: 0ed19af8022fa4c1 -Block 0002 [ 33]: 627728cb1394e70d -Block 0002 [ 34]: 69672f8719e2e5dd -Block 0002 [ 35]: b39ccb2cbead4f2d -Block 0002 [ 36]: b43115927b03a204 -Block 0002 [ 37]: b29801888849ff61 -Block 0002 [ 38]: 2264364d78cf3b02 -Block 0002 [ 39]: f7ba1d0121f6ef7c -Block 0002 [ 40]: fa25d47c97fa15ac -Block 0002 [ 41]: 89d5f89c7be0bb71 -Block 0002 [ 42]: c49cb4541a91cff2 -Block 0002 [ 43]: 874cd8a4985d7834 -Block 0002 [ 44]: c19261e8fcea632c -Block 0002 [ 45]: 5c1502cfccc2fd3f -Block 0002 [ 46]: 2da9a13eda8e52a1 -Block 0002 [ 47]: 02f150e62533f71f -Block 0002 [ 48]: edee37caa7ee96f9 -Block 0002 [ 49]: e4f1a0e7a4b3c668 -Block 0002 [ 50]: fc406148b9820e81 -Block 0002 [ 51]: 61483457659a1799 -Block 0002 [ 52]: 0e1206f1271f31c8 -Block 0002 [ 53]: 3ff4bbc6d461f3ac -Block 0002 [ 54]: 9e90a4737c444a98 -Block 0002 [ 55]: 22842091eb2c29a4 -Block 0002 [ 56]: 1ca1cde6be37047e -Block 0002 [ 57]: f1e25e0707ef49aa -Block 0002 [ 58]: a38d779f21fb8b07 -Block 0002 [ 59]: 74da26b2d7e0d0de -Block 0002 [ 60]: 46940323ba8bef91 -Block 0002 [ 61]: c9847d40fab9bfa0 -Block 0002 [ 62]: a9ccbe9433dbf6b6 -Block 0002 [ 63]: 62d4ee530f84a01e -Block 0002 [ 64]: 5369331cd64476b9 -Block 0002 [ 65]: 71ba63d911ac6a6b -Block 0002 [ 66]: 8cc19167baf65398 -Block 0002 [ 67]: 3fe137a2879f96b4 -Block 0002 [ 68]: 23dfc6dd2b17a041 -Block 0002 [ 69]: fd166bb09127747f -Block 0002 [ 70]: f3af31fbfab8d809 -Block 0002 [ 71]: 1d2ea2a7374e0840 -Block 0002 [ 72]: ac710d268cf4fedf -Block 0002 [ 73]: d6beb900625d1592 -Block 0002 [ 74]: 3b1486fa3ecd52d7 -Block 0002 [ 75]: 5dfd7eb55f80fff5 -Block 0002 [ 76]: c4920a178a657dee -Block 0002 [ 77]: 3063bc7bc258632e -Block 0002 [ 78]: 08c72633ff8367e8 -Block 0002 [ 79]: de6c96890b8211fa -Block 0002 [ 80]: d533e2e5b99f9a89 -Block 0002 [ 81]: 42b6177c238f3592 -Block 0002 [ 82]: 45db675f166d2098 -Block 0002 [ 83]: 1aa0362d889db002 -Block 0002 [ 84]: 5fb5a8a899e7bbcc -Block 0002 [ 85]: ec4a77566773352f -Block 0002 [ 86]: 2809156527466d15 -Block 0002 [ 87]: 2395d97c5e4a147a -Block 0002 [ 88]: b7c8d8a20eb785cf -Block 0002 [ 89]: 55929cfe6fed4017 -Block 0002 [ 90]: 796542310b3a982b -Block 0002 [ 91]: 430a76aedcbd90e8 -Block 0002 [ 92]: 91ca8acd0ac2e067 -Block 0002 [ 93]: 8e50acb8e6952585 -Block 0002 [ 94]: 16df2d074b132b4b -Block 0002 [ 95]: 6ba2c1cefbcd3d32 -Block 0002 [ 96]: 4ca35f90ee6f3c02 -Block 0002 [ 97]: 1f4823f43e7e6f71 -Block 0002 [ 98]: b903b08436d87058 -Block 0002 [ 99]: 38245ec648896e53 -Block 0002 [100]: 14e189a61fd2515a -Block 0002 [101]: ef047f9f62ff6510 -Block 0002 [102]: e72313e49aea7f82 -Block 0002 [103]: 9d9d1757de6992f5 -Block 0002 [104]: ea4e379b2df83c29 -Block 0002 [105]: 4478302ccd041aad -Block 0002 [106]: 4990a52062b9ac3a -Block 0002 [107]: 83a0f64a2dea0624 -Block 0002 [108]: d55acd58d33318fd -Block 0002 [109]: e458ab245697ea63 -Block 0002 [110]: 49d0c9d161371688 -Block 0002 [111]: ea5b74ea5b08df9d -Block 0002 [112]: 1a8c184bdd4c5d10 -Block 0002 [113]: f2f629e6d8394674 -Block 0002 [114]: 220964837a6027fe -Block 0002 [115]: 0bc1a4f85c884971 -Block 0002 [116]: c3f1f53a0ac51dc6 -Block 0002 [117]: 80a8dc394d87d919 -Block 0002 [118]: 6d1280c6a5c91b09 -Block 0002 [119]: eccddb278024b896 -Block 0002 [120]: 52647d0bba74326c -Block 0002 [121]: 7f3932ec89410d41 -Block 0002 [122]: 191c10651d52883e -Block 0002 [123]: 090ec2202a9104ba -Block 0002 [124]: da6067ea0f944450 -Block 0002 [125]: 9c0972bbbc1bf1ae -Block 0002 [126]: 3c76df28bddfe68c -Block 0002 [127]: 0c5f6c7f878eeb0b -Block 0003 [ 0]: 900b4b46200c544c -Block 0003 [ 1]: 615068c6f1fa70ed -Block 0003 [ 2]: 541d13b0280f8175 -Block 0003 [ 3]: 2082941de980cd5a -Block 0003 [ 4]: e8bccb1c26ab9eca -Block 0003 [ 5]: 0eb12abb2cf24ebe -Block 0003 [ 6]: bab6e5aaa8018b20 -Block 0003 [ 7]: 89c0c47763af65c5 -Block 0003 [ 8]: 95a65ab140f1a880 -Block 0003 [ 9]: fa3be1c08532ac8c -Block 0003 [ 10]: abd4a26b5bca2cef -Block 0003 [ 11]: 9508af0ae337fb13 -Block 0003 [ 12]: 13cdb71b243ba1f5 -Block 0003 [ 13]: b8bd7f941f99939b -Block 0003 [ 14]: eedb84a6e3a05437 -Block 0003 [ 15]: ee12d5518952c311 -Block 0003 [ 16]: 8112689e24a4e808 -Block 0003 [ 17]: 7636f3bf1162eacb -Block 0003 [ 18]: a0c0dc2987fd137c -Block 0003 [ 19]: c0ddfb772fca4563 -Block 0003 [ 20]: aae0e0cd7d6ebd31 -Block 0003 [ 21]: b2379a164f186276 -Block 0003 [ 22]: f19ea49023ba40d6 -Block 0003 [ 23]: d105094e90aef0f4 -Block 0003 [ 24]: 7318160321ff1700 -Block 0003 [ 25]: 341d4c2f419d17e0 -Block 0003 [ 26]: 9d0f35e38570b55e -Block 0003 [ 27]: 6bec7aa0ed8e99e2 -Block 0003 [ 28]: c25d45befa00a97f -Block 0003 [ 29]: 88fed968820f8c7a -Block 0003 [ 30]: bd3ba51f94404e43 -Block 0003 [ 31]: 505f67420bf9ff3b -Block 0003 [ 32]: aadc81c468be4ade -Block 0003 [ 33]: d9d04aa55df15541 -Block 0003 [ 34]: a9d4605b808b26ed -Block 0003 [ 35]: 77c0c653d677e5f4 -Block 0003 [ 36]: 66cf4b2c33ba1287 -Block 0003 [ 37]: 2159d8f669619152 -Block 0003 [ 38]: 277494e693e2260c -Block 0003 [ 39]: 6a4efa2a28476fbb -Block 0003 [ 40]: 6d89a658a8eb3a87 -Block 0003 [ 41]: 6643282f4e2e20b7 -Block 0003 [ 42]: 8d73318f6b37ba20 -Block 0003 [ 43]: 7ac12f40ea088cc1 -Block 0003 [ 44]: 039ab18a2301f45e -Block 0003 [ 45]: ee739603d11dd438 -Block 0003 [ 46]: a2d0758ff2bb7b61 -Block 0003 [ 47]: 6f7513923aa239c5 -Block 0003 [ 48]: 479251793a6d48a8 -Block 0003 [ 49]: bbd36f9d5c56e87a -Block 0003 [ 50]: 31f653eaa9248c6c -Block 0003 [ 51]: 59178b13140a219d -Block 0003 [ 52]: f0c95af03d8f1f07 -Block 0003 [ 53]: a0d93bfd437f6a41 -Block 0003 [ 54]: 9921b64737fbc37c -Block 0003 [ 55]: d513001e5cb70077 -Block 0003 [ 56]: e90e86c3875d03f9 -Block 0003 [ 57]: f77c90cb5f773667 -Block 0003 [ 58]: 842c4f09e1d44a70 -Block 0003 [ 59]: 9473717f368e17ef -Block 0003 [ 60]: 2fa7191e160f1367 -Block 0003 [ 61]: 188343023d77c117 -Block 0003 [ 62]: f90ab2a6f3513ddb -Block 0003 [ 63]: ef07e1df547670de -Block 0003 [ 64]: 490a9760f108ceba -Block 0003 [ 65]: e6bba096cca0cc3d -Block 0003 [ 66]: 88afb830cf0d6afc -Block 0003 [ 67]: a24603d655ac3411 -Block 0003 [ 68]: c92928a948c09aaf -Block 0003 [ 69]: 0b235502de082b53 -Block 0003 [ 70]: 68e2d92139a102a1 -Block 0003 [ 71]: db636a19651b1a8f -Block 0003 [ 72]: 55fb8586acbeb7bd -Block 0003 [ 73]: 59ee9cfe10e2852e -Block 0003 [ 74]: 9cfce7017ba9c310 -Block 0003 [ 75]: ce69b85ed419b61d -Block 0003 [ 76]: 8e537f5cd92f07d5 -Block 0003 [ 77]: 0936bcb0af45c502 -Block 0003 [ 78]: addef0747ad3a8b3 -Block 0003 [ 79]: 9f33d7ea62dbaaf0 -Block 0003 [ 80]: cc7c8f4bd3d7277c -Block 0003 [ 81]: 63a72c0deaaeedba -Block 0003 [ 82]: 388eab0b99643af1 -Block 0003 [ 83]: 043e0dbc4e83be89 -Block 0003 [ 84]: 3ff59b09ab580288 -Block 0003 [ 85]: 70e006315ebdd36f -Block 0003 [ 86]: 47539c3896477284 -Block 0003 [ 87]: 0e94787998b6ef6c -Block 0003 [ 88]: be9581f1e03e87c9 -Block 0003 [ 89]: f601b4d2eb8452a9 -Block 0003 [ 90]: d833a7b59bf0ce2e -Block 0003 [ 91]: 636c7c907e257e8c -Block 0003 [ 92]: 9e60534288ef4d3f -Block 0003 [ 93]: 06e24a4afbfe1966 -Block 0003 [ 94]: a583680ac97a5613 -Block 0003 [ 95]: e095788f1dff0b5b -Block 0003 [ 96]: 24dbe8854bbd48d2 -Block 0003 [ 97]: 7319443a645f08f9 -Block 0003 [ 98]: 1cf2b175e298deca -Block 0003 [ 99]: 2d2763dc7e9eda81 -Block 0003 [100]: dc126b0b72b35bf1 -Block 0003 [101]: 93a439b4fd315f79 -Block 0003 [102]: 78d19ab12b8c62e6 -Block 0003 [103]: 6a99a2c98bb11d86 -Block 0003 [104]: 0eb95ec61f83e17d -Block 0003 [105]: 52f93eae017bdcde -Block 0003 [106]: f17fe7695bfab7db -Block 0003 [107]: 383c915348e737f8 -Block 0003 [108]: 7914b38aba5db79c -Block 0003 [109]: d8d1c709cb8f241e -Block 0003 [110]: 294637fa5e5c37ed -Block 0003 [111]: 141f9ef0a4fe5043 -Block 0003 [112]: d8b7cff4b0ee2ad1 -Block 0003 [113]: eecd8ab86cd37c3b -Block 0003 [114]: 687500a2b5b4f93f -Block 0003 [115]: 44d162fe6c806b6e -Block 0003 [116]: 1ec5716982b0455c -Block 0003 [117]: cd14a043b1d36a07 -Block 0003 [118]: 65e6ba21c7bc7a01 -Block 0003 [119]: 75dd70547da224a6 -Block 0003 [120]: 34f11d3e0d8cc470 -Block 0003 [121]: a570799323b61b23 -Block 0003 [122]: b5179a8f90876b2c -Block 0003 [123]: ca8c1f20370d6660 -Block 0003 [124]: b2cc48f3ba63ce4a -Block 0003 [125]: b7d244b86a5bec49 -Block 0003 [126]: 652da4cd7f33df45 -Block 0003 [127]: 428a6992769973ce -Block 0004 [ 0]: 61b02e80b3742763 -Block 0004 [ 1]: 7e4bbe3e73625805 -Block 0004 [ 2]: 9790e6cd9c3c8462 -Block 0004 [ 3]: 1df4ccf80bf227b5 -Block 0004 [ 4]: 4ff867d3cbffcba1 -Block 0004 [ 5]: 95bd5d47bbf4659f -Block 0004 [ 6]: 09a513dbaf9233e3 -Block 0004 [ 7]: f1baabf4d227a53a -Block 0004 [ 8]: e50869ba195d6894 -Block 0004 [ 9]: ff35af7749193c12 -Block 0004 [ 10]: 5e7bc4a2e3ebbe22 -Block 0004 [ 11]: 11b86088eb9621f6 -Block 0004 [ 12]: 86e651a025016040 -Block 0004 [ 13]: 55e06a939610f6a9 -Block 0004 [ 14]: fc2beb0ea89cc482 -Block 0004 [ 15]: c8ad6ac2bae5f83e -Block 0004 [ 16]: 03bc33fff2eb1397 -Block 0004 [ 17]: b5c261acc0f09c2a -Block 0004 [ 18]: 4341b9dbdf7fc906 -Block 0004 [ 19]: 50087675709002b7 -Block 0004 [ 20]: 31b7a5a936823271 -Block 0004 [ 21]: daafcb9b596d616f -Block 0004 [ 22]: 110b5732b99d44e8 -Block 0004 [ 23]: 398968e362e86395 -Block 0004 [ 24]: 504a5d24eaf60bd9 -Block 0004 [ 25]: ac01c13c036ce4ea -Block 0004 [ 26]: 5a78894638c5997d -Block 0004 [ 27]: d036b615e6fad450 -Block 0004 [ 28]: 19590cb7addd10d3 -Block 0004 [ 29]: df16c271a9d2f62f -Block 0004 [ 30]: 77c26a898e5afeb8 -Block 0004 [ 31]: c94fe3300508a570 -Block 0004 [ 32]: 0459cadd307ce63c -Block 0004 [ 33]: a788a865094778af -Block 0004 [ 34]: 87d7fff2870f9b3a -Block 0004 [ 35]: beac32cc09233860 -Block 0004 [ 36]: c742017d94927d64 -Block 0004 [ 37]: 96eb65f7d55dc6b8 -Block 0004 [ 38]: 743f7a221041ffbd -Block 0004 [ 39]: 08770530af9fa225 -Block 0004 [ 40]: a6f3a50f3e197a38 -Block 0004 [ 41]: 412cd2c6a82d7310 -Block 0004 [ 42]: afa426a667e12057 -Block 0004 [ 43]: 5782330a3c19f0b6 -Block 0004 [ 44]: be1c3e6883a0cb0e -Block 0004 [ 45]: 3df0ec64890ea638 -Block 0004 [ 46]: 56288a35cf5aafbf -Block 0004 [ 47]: 55ecfc3aab7211ac -Block 0004 [ 48]: 362fd07efe33163c -Block 0004 [ 49]: 10320ae4802a7e1a -Block 0004 [ 50]: db36f926291f2f23 -Block 0004 [ 51]: bd8ef19f5cb6749a -Block 0004 [ 52]: 362419cdfa58aa47 -Block 0004 [ 53]: 6ccc46d502e8389b -Block 0004 [ 54]: d489a2400b6489ff -Block 0004 [ 55]: 6781ec15707fedbd -Block 0004 [ 56]: b3b2f0f1f23caa08 -Block 0004 [ 57]: 382870e8ab1f2bcb -Block 0004 [ 58]: 00fac8357b77af84 -Block 0004 [ 59]: 1d1bb0ac845b3bb3 -Block 0004 [ 60]: bf88c0aac2057a72 -Block 0004 [ 61]: 5224c313bf757c14 -Block 0004 [ 62]: 9cb8edce4fcd9f3d -Block 0004 [ 63]: ee5b8b3f1b45c6bc -Block 0004 [ 64]: 92941e57904256e2 -Block 0004 [ 65]: 3410ce980b6075cd -Block 0004 [ 66]: 4c2a6351368555d4 -Block 0004 [ 67]: 7192ebc6e89fa9da -Block 0004 [ 68]: ae566e908918769e -Block 0004 [ 69]: 469bdcf0eb62d144 -Block 0004 [ 70]: 7605e6b1f8d0ebe9 -Block 0004 [ 71]: 5ad66be7fc63f10d -Block 0004 [ 72]: 184ae200186ceaba -Block 0004 [ 73]: a2fd668b31a0247e -Block 0004 [ 74]: 6cfa785e22b348f8 -Block 0004 [ 75]: 09b9f880d8d0e434 -Block 0004 [ 76]: 642517279598b38e -Block 0004 [ 77]: cd70e90d7bc4844a -Block 0004 [ 78]: 1cf34c8fbc595a38 -Block 0004 [ 79]: 92d7f6b098188e10 -Block 0004 [ 80]: 9fff24b7d7e875ff -Block 0004 [ 81]: 89fb31a1adecd0ca -Block 0004 [ 82]: 390c984f20f90dd8 -Block 0004 [ 83]: db611b87ccee8357 -Block 0004 [ 84]: d7c03146d2095e03 -Block 0004 [ 85]: 0d673441a5213ee2 -Block 0004 [ 86]: 3bf960e76ad98bf2 -Block 0004 [ 87]: 15ba7ca167b4fc58 -Block 0004 [ 88]: 2f8e1e77cb6059f3 -Block 0004 [ 89]: 230ad60f2c671f48 -Block 0004 [ 90]: c126fbb6f4664282 -Block 0004 [ 91]: bc37cb058c16f1af -Block 0004 [ 92]: 25b5b798646af7b8 -Block 0004 [ 93]: 41660c72b268e9fc -Block 0004 [ 94]: ac7bd5845cdb1ad1 -Block 0004 [ 95]: 9071233c92d8571b -Block 0004 [ 96]: 262c8f321ce0f391 -Block 0004 [ 97]: 3bb8082c589edf4f -Block 0004 [ 98]: 9d995d6561df731c -Block 0004 [ 99]: a68fcc1451a03d2a -Block 0004 [100]: 47ba7944bbd6d890 -Block 0004 [101]: 241167f695259047 -Block 0004 [102]: b3aead0264ffffd1 -Block 0004 [103]: 6c1a163b6c3a5822 -Block 0004 [104]: b03149730b57a7f9 -Block 0004 [105]: e5ba3f27b2107055 -Block 0004 [106]: d2b99238801a8045 -Block 0004 [107]: 4d64f86efc903560 -Block 0004 [108]: 91d8cfea06ed3527 -Block 0004 [109]: d89d6a658d7b6d16 -Block 0004 [110]: 5bdff6f547dd7cf9 -Block 0004 [111]: 68a46fd7b88d76ca -Block 0004 [112]: 7a139992edf32a73 -Block 0004 [113]: d8d8f02739b14a2c -Block 0004 [114]: 4afc51977b857384 -Block 0004 [115]: 593d06a3b1553ab4 -Block 0004 [116]: d21e157f895b9e53 -Block 0004 [117]: c36a81244ef9742a -Block 0004 [118]: acb7d5a719a87b5f -Block 0004 [119]: c81acf2539e71b78 -Block 0004 [120]: cb8b1d5dc9ab6dae -Block 0004 [121]: 40fb035745072ee1 -Block 0004 [122]: 33995806abd29a5b -Block 0004 [123]: 32095e26c80ce6e4 -Block 0004 [124]: 59b15a44c845141d -Block 0004 [125]: bd3f0650de4e7544 -Block 0004 [126]: 9e7a71f80dc928fa -Block 0004 [127]: 15cb1ef5d3503f23 -Block 0005 [ 0]: 2407d195e807548c -Block 0005 [ 1]: ad26e752874ecef7 -Block 0005 [ 2]: 8e956c0210f8a850 -Block 0005 [ 3]: f0823911ea3dc266 -Block 0005 [ 4]: 8ca2efdc25c95c1a -Block 0005 [ 5]: b1b295e6d5938e90 -Block 0005 [ 6]: 61e589e7bc7ee50a -Block 0005 [ 7]: 70f8b036f79e182c -Block 0005 [ 8]: d3b2034f7eb8397e -Block 0005 [ 9]: ed85a59503e729b2 -Block 0005 [ 10]: a59b1e9d7ac407f0 -Block 0005 [ 11]: 18e4697aff4d626e -Block 0005 [ 12]: 48f23c53a192e907 -Block 0005 [ 13]: 0353e7f7a3399bc7 -Block 0005 [ 14]: c20df991d82562c8 -Block 0005 [ 15]: 87e4856a098eff96 -Block 0005 [ 16]: c6609c87275e754e -Block 0005 [ 17]: 648ab718ca0925cf -Block 0005 [ 18]: e8697ef67043a622 -Block 0005 [ 19]: 269e9739151af066 -Block 0005 [ 20]: f770e93308cd4431 -Block 0005 [ 21]: a04fcb290799218f -Block 0005 [ 22]: 59794f1b24bf075b -Block 0005 [ 23]: be22ca6ca634779f -Block 0005 [ 24]: e513bdcc17002a69 -Block 0005 [ 25]: 990138964e16fdab -Block 0005 [ 26]: fcc15a89ed35c704 -Block 0005 [ 27]: 72d582eaac1af2b9 -Block 0005 [ 28]: 967f93d54b867ef4 -Block 0005 [ 29]: 26b2833e0a4acd9f -Block 0005 [ 30]: 879536890775795c -Block 0005 [ 31]: deda9793b9079cbc -Block 0005 [ 32]: 40277ca0d59f9553 -Block 0005 [ 33]: fd363f7c9c4a6785 -Block 0005 [ 34]: f9de8f1d3f2c0e67 -Block 0005 [ 35]: 71369da8fff5907c -Block 0005 [ 36]: bce335eab4d82e69 -Block 0005 [ 37]: 9fc21e6cdd0d1703 -Block 0005 [ 38]: e434cb9db85055b1 -Block 0005 [ 39]: 9d46064ec1920847 -Block 0005 [ 40]: 215478858606f725 -Block 0005 [ 41]: 6f5cebdb2261f718 -Block 0005 [ 42]: 581ec1c91f3d7950 -Block 0005 [ 43]: ec09884a2f860205 -Block 0005 [ 44]: 016e9b7dd3e34056 -Block 0005 [ 45]: ecf6fadac4ec557e -Block 0005 [ 46]: 911fdf83e6dd3f16 -Block 0005 [ 47]: 43e1c6222f494622 -Block 0005 [ 48]: 67ccba4578b4514a -Block 0005 [ 49]: 518530888f2bf6c1 -Block 0005 [ 50]: cab80f10eb75afc7 -Block 0005 [ 51]: c1311903e3e18720 -Block 0005 [ 52]: 24b9703f88280748 -Block 0005 [ 53]: bc46a3e55ea93315 -Block 0005 [ 54]: 2ef89852f18c8127 -Block 0005 [ 55]: af8a0afc790b5578 -Block 0005 [ 56]: 62fb6e62bbc51408 -Block 0005 [ 57]: 867eee397ba52395 -Block 0005 [ 58]: be71ea6f48ab5c12 -Block 0005 [ 59]: 9f69cc05adf942d6 -Block 0005 [ 60]: 83a151c54916331b -Block 0005 [ 61]: 5d3a15c2e8af73f4 -Block 0005 [ 62]: f9f93eb16073140d -Block 0005 [ 63]: 0910cd3454b972f2 -Block 0005 [ 64]: d005e33b360488ce -Block 0005 [ 65]: a736866bbcf4ffca -Block 0005 [ 66]: b28e1240544033f8 -Block 0005 [ 67]: efd0572e93a73dc2 -Block 0005 [ 68]: eca676cca54e0ab7 -Block 0005 [ 69]: 3cee98c6a68f966f -Block 0005 [ 70]: a64b18091a53a60d -Block 0005 [ 71]: a995405e7bae7c46 -Block 0005 [ 72]: 2f78d1dcb0d0b9d1 -Block 0005 [ 73]: 1599269b0c2b7437 -Block 0005 [ 74]: 10aea6df58285014 -Block 0005 [ 75]: eb818d62aef8326c -Block 0005 [ 76]: 2d0dcaf1692efb64 -Block 0005 [ 77]: 5bacab67370fccd0 -Block 0005 [ 78]: 009f834eb54066b0 -Block 0005 [ 79]: 74864cfcea1d792a -Block 0005 [ 80]: 12ac904270b3fc5d -Block 0005 [ 81]: c006df57f8fd380c -Block 0005 [ 82]: 3ef11bbc90a1db48 -Block 0005 [ 83]: 889ef4b880ea6ecb -Block 0005 [ 84]: 4df0d8edb2998f16 -Block 0005 [ 85]: 3244d5eb9c8f6c52 -Block 0005 [ 86]: db58706bfff2bb30 -Block 0005 [ 87]: 8acb6d2afb8d1c9d -Block 0005 [ 88]: 8dd675246a44ed27 -Block 0005 [ 89]: f74402d04b7ec003 -Block 0005 [ 90]: d65b9bad8454198d -Block 0005 [ 91]: 3a797de67bd036be -Block 0005 [ 92]: 276fdd9689e47ba3 -Block 0005 [ 93]: 5f7038a2ab05ed2c -Block 0005 [ 94]: fe99c638c6fd40b7 -Block 0005 [ 95]: e3b66576ea866d69 -Block 0005 [ 96]: 8e71e25e4507d7c7 -Block 0005 [ 97]: 66c0a136a58be7df -Block 0005 [ 98]: ff379f99bf7eff87 -Block 0005 [ 99]: 7efd44f99e27d64e -Block 0005 [100]: 14a4178d8cbceaa0 -Block 0005 [101]: 127f27d7ac910aa2 -Block 0005 [102]: 6d1b02b836d71016 -Block 0005 [103]: 9e3d713b59e00ec2 -Block 0005 [104]: b20d6c08dc20ba5f -Block 0005 [105]: 829c1593f35d8c24 -Block 0005 [106]: dfbc57940e7617f4 -Block 0005 [107]: c9307700a9a945d8 -Block 0005 [108]: e3ffdba608ed4a2b -Block 0005 [109]: e4e0a880030cfd51 -Block 0005 [110]: e82581940a60a73f -Block 0005 [111]: 961f7c02492c8ad0 -Block 0005 [112]: 7b68992d2ec8bfec -Block 0005 [113]: a9ed907126332abe -Block 0005 [114]: 1e9ff58ebb76a6e1 -Block 0005 [115]: 6df86aab244d8840 -Block 0005 [116]: df4e831b85698b17 -Block 0005 [117]: 11207ef7be5bfb12 -Block 0005 [118]: 3f01cfd40c02f939 -Block 0005 [119]: acde7f4b1ef88c4a -Block 0005 [120]: 16ba6e86679b1fc6 -Block 0005 [121]: 0425258ae0bff899 -Block 0005 [122]: dd3f322d634c7ee4 -Block 0005 [123]: facf4e27f9226ef2 -Block 0005 [124]: 5219c0be52c577cb -Block 0005 [125]: 5d75edbd61cfcd91 -Block 0005 [126]: 1e605cef3901869b -Block 0005 [127]: efb73d6caa30c73e -Block 0006 [ 0]: 3ff3a1afd0287ee4 -Block 0006 [ 1]: 8ca4bc3a401187fd -Block 0006 [ 2]: d6deee7adb44fba7 -Block 0006 [ 3]: 8470d1f12ed83a47 -Block 0006 [ 4]: 360da0d7a0ef1a64 -Block 0006 [ 5]: 9445900620a0a602 -Block 0006 [ 6]: 74f4f0bfdfb57627 -Block 0006 [ 7]: a9554312a94fba41 -Block 0006 [ 8]: 440d33dddeb8e7a4 -Block 0006 [ 9]: 1cfeca050ed3777f -Block 0006 [ 10]: 378d6e95e3ba9e2e -Block 0006 [ 11]: c7873bfc22f0b158 -Block 0006 [ 12]: 7615f8f3ea9d5066 -Block 0006 [ 13]: c192d1eace8734c7 -Block 0006 [ 14]: 59001048d79ce77a -Block 0006 [ 15]: 24a85dd3291370d1 -Block 0006 [ 16]: 26015473273796de -Block 0006 [ 17]: 2111331b5d78a152 -Block 0006 [ 18]: 59a673addca8de42 -Block 0006 [ 19]: 01af263b093990d1 -Block 0006 [ 20]: 51164c5ef3541c08 -Block 0006 [ 21]: 1fd97bf87d831222 -Block 0006 [ 22]: 06062501657f1216 -Block 0006 [ 23]: ce7591de5d57b2c6 -Block 0006 [ 24]: 66c5854489d1e428 -Block 0006 [ 25]: 645ef5b210eba0a2 -Block 0006 [ 26]: 1f491e6a4e84ea25 -Block 0006 [ 27]: 7213087c5172a501 -Block 0006 [ 28]: c7b25be9ee141c2b -Block 0006 [ 29]: 9976c16c2781fdba -Block 0006 [ 30]: c29356f98d3db616 -Block 0006 [ 31]: aa386b24200a43dc -Block 0006 [ 32]: fe70bb4bec6b5b41 -Block 0006 [ 33]: 32c2b83189c14540 -Block 0006 [ 34]: a23a4380e66c805b -Block 0006 [ 35]: b8ab5c47ad64932f -Block 0006 [ 36]: 10725e3944caf2cc -Block 0006 [ 37]: f2e966b3dbc19222 -Block 0006 [ 38]: 30e5235f28c74dc7 -Block 0006 [ 39]: b54130ec0ccbec56 -Block 0006 [ 40]: f3625f5da42b7608 -Block 0006 [ 41]: 03ac15b3e4169a49 -Block 0006 [ 42]: 2b6a38cb869b0513 -Block 0006 [ 43]: 2eaeccba916989e2 -Block 0006 [ 44]: 05de41a48fd7b5f3 -Block 0006 [ 45]: 0803930bd83b9dfd -Block 0006 [ 46]: 8f9df1a8fbc17c4f -Block 0006 [ 47]: fec29c915cc85d6f -Block 0006 [ 48]: d59694a63eb621bb -Block 0006 [ 49]: ad0039ddfa6f7c94 -Block 0006 [ 50]: e6c51080e91e2c65 -Block 0006 [ 51]: 9af773fba01cfa91 -Block 0006 [ 52]: d5925d2b89484ba4 -Block 0006 [ 53]: ecf696532e4fdd23 -Block 0006 [ 54]: f0df670517da09bc -Block 0006 [ 55]: ea7e01665a3cf857 -Block 0006 [ 56]: 5bc706445614cb34 -Block 0006 [ 57]: d8c70f6ea4efa21c -Block 0006 [ 58]: 65cece98eb9de6b0 -Block 0006 [ 59]: 034d88bb29152fe2 -Block 0006 [ 60]: 5a87695852af3a27 -Block 0006 [ 61]: c1dc8d2c14ed9a61 -Block 0006 [ 62]: 7085ba9e2f9465e9 -Block 0006 [ 63]: 4f27ca7fc1d5e71b -Block 0006 [ 64]: fb73df4ffb4471c5 -Block 0006 [ 65]: 34ddabe0f1cb85a0 -Block 0006 [ 66]: 722b6f02d3545f03 -Block 0006 [ 67]: 0a58e8a36fddff54 -Block 0006 [ 68]: 2e97d1e015bf2f63 -Block 0006 [ 69]: 776125a3910e5d4f -Block 0006 [ 70]: 729397c1d34cdea8 -Block 0006 [ 71]: 64597d1994f4d652 -Block 0006 [ 72]: d6992e763e6b1840 -Block 0006 [ 73]: 3993b16e66ede21a -Block 0006 [ 74]: a0be3073b4e14898 -Block 0006 [ 75]: f46816ac0e771788 -Block 0006 [ 76]: a46a90f9a7afeccb -Block 0006 [ 77]: fccd118b8fea8bd5 -Block 0006 [ 78]: b54dab5d51abd35b -Block 0006 [ 79]: 547391e2f8849128 -Block 0006 [ 80]: 3419a829cc70d369 -Block 0006 [ 81]: f360b66e6e553ad0 -Block 0006 [ 82]: 4fd56e15625edc4d -Block 0006 [ 83]: c9a47e605b88d954 -Block 0006 [ 84]: 0664eb35ef23db11 -Block 0006 [ 85]: cae0f76f194aa390 -Block 0006 [ 86]: c7dfd32a29944973 -Block 0006 [ 87]: 752bc7b7cf0fcb1b -Block 0006 [ 88]: bfe3dc9327344fcc -Block 0006 [ 89]: 9896372af3cd20ef -Block 0006 [ 90]: 7b4ede0b565b084c -Block 0006 [ 91]: 5b487d697f173dc4 -Block 0006 [ 92]: 1daa7c1f5f228977 -Block 0006 [ 93]: 7a6c2f3b95e1caff -Block 0006 [ 94]: 7f36d68986a0d334 -Block 0006 [ 95]: 200bee502f854de3 -Block 0006 [ 96]: 888eb05b94542d07 -Block 0006 [ 97]: d8351131c91ec207 -Block 0006 [ 98]: 93a9257e9aa1fea1 -Block 0006 [ 99]: e4aa639e529bcd51 -Block 0006 [100]: f399e0dd84eb87d4 -Block 0006 [101]: e30a3a4b710ab0e0 -Block 0006 [102]: 201575d6c8b2cf4c -Block 0006 [103]: 4f2f409fa698e1c6 -Block 0006 [104]: c31d6e53d8ff5c77 -Block 0006 [105]: 2a03c26df00ad954 -Block 0006 [106]: 7bf48d33462027ac -Block 0006 [107]: 69c7a27ac1f42530 -Block 0006 [108]: 5f8655cb9f1caf86 -Block 0006 [109]: c75036252990cd7a -Block 0006 [110]: 836c76f7f654afa3 -Block 0006 [111]: 1f662ad2c72fb72a -Block 0006 [112]: c3193d05baf51ec5 -Block 0006 [113]: be6f4e4e3d55b8f2 -Block 0006 [114]: 6357f734699f9364 -Block 0006 [115]: e010aa2880f76f07 -Block 0006 [116]: c63892677e1ca8d7 -Block 0006 [117]: a97c8af5b70ad709 -Block 0006 [118]: 485e66af8cf92518 -Block 0006 [119]: 3d2554521a20a959 -Block 0006 [120]: ecaad94a70b67b4d -Block 0006 [121]: 28d5edff6ba11007 -Block 0006 [122]: 5203c747cc86bc72 -Block 0006 [123]: 1039392bca8ed32a -Block 0006 [124]: 90e4d2fd2838c6b8 -Block 0006 [125]: 1df342bc30f9e4b3 -Block 0006 [126]: 824417f3d1e2d67a -Block 0006 [127]: 49f96e7286a4e916 -Block 0007 [ 0]: 84354e382811563e -Block 0007 [ 1]: 45743b71925744fc -Block 0007 [ 2]: 3ba51f6da99da397 -Block 0007 [ 3]: e7153d5f0689ff7d -Block 0007 [ 4]: 9a7ea4aa9d5d501c -Block 0007 [ 5]: e602de901d1e0157 -Block 0007 [ 6]: 16809cb4f1197684 -Block 0007 [ 7]: ab2de4cb53458600 -Block 0007 [ 8]: 845c5a7a2bee2d83 -Block 0007 [ 9]: a0745796de1efd92 -Block 0007 [ 10]: 419624f4df71da51 -Block 0007 [ 11]: 76bbe67f53d2c67a -Block 0007 [ 12]: 3539abbbb0b07204 -Block 0007 [ 13]: eb8503675fe3c338 -Block 0007 [ 14]: 1d937c7a62ab6702 -Block 0007 [ 15]: 059a53998e17631f -Block 0007 [ 16]: 6d990f3234b4951a -Block 0007 [ 17]: 4932b85c51c10895 -Block 0007 [ 18]: 0201b22ddd936f3d -Block 0007 [ 19]: a690abdce969b3ff -Block 0007 [ 20]: 07e773ac444aa3af -Block 0007 [ 21]: 6c0eae8430a1ded7 -Block 0007 [ 22]: 5ac933f9d33495c8 -Block 0007 [ 23]: 724fd0a679dbc18e -Block 0007 [ 24]: 8a877920c8ca8eba -Block 0007 [ 25]: 532913359620fe2a -Block 0007 [ 26]: 43722492fb8181c6 -Block 0007 [ 27]: e8ae5979a35787db -Block 0007 [ 28]: b2e7e6fb8f466bb4 -Block 0007 [ 29]: 33647c4c1e55316a -Block 0007 [ 30]: 3d91ecccab5b22e6 -Block 0007 [ 31]: 3184dc8fb3d09ecc -Block 0007 [ 32]: e95ffd2964578bd2 -Block 0007 [ 33]: f794fb50980a42a0 -Block 0007 [ 34]: 028aed107dc68f09 -Block 0007 [ 35]: f4f799b91100aaf2 -Block 0007 [ 36]: b523dd437403fe2e -Block 0007 [ 37]: 0b6a883c2834f238 -Block 0007 [ 38]: 4d1a1e1cf7462f91 -Block 0007 [ 39]: 90467f9adfd369cc -Block 0007 [ 40]: 0737252fe727088d -Block 0007 [ 41]: 036daf3edf06ad86 -Block 0007 [ 42]: 22cea14d595c060b -Block 0007 [ 43]: 313f948ca727d091 -Block 0007 [ 44]: 5699968513387150 -Block 0007 [ 45]: e21ec1b28d52caae -Block 0007 [ 46]: 4f64f523d5fda9a2 -Block 0007 [ 47]: d6d18166064574ee -Block 0007 [ 48]: 783f5c64134a8883 -Block 0007 [ 49]: b29e30cc712b31b9 -Block 0007 [ 50]: 95f12fbfae39c0bf -Block 0007 [ 51]: fda076c8d35ae9fc -Block 0007 [ 52]: b82f473fc8631979 -Block 0007 [ 53]: 4f6970787ac503de -Block 0007 [ 54]: cadff9d6e5647f89 -Block 0007 [ 55]: 4a831039e1f31433 -Block 0007 [ 56]: ade6d8cd941f47ea -Block 0007 [ 57]: f88ae33e5050d752 -Block 0007 [ 58]: 799c3b44d09fd711 -Block 0007 [ 59]: 8e4011e1f5c0bf7f -Block 0007 [ 60]: f3beb9b4b5e9eecc -Block 0007 [ 61]: 463050ab643a76bb -Block 0007 [ 62]: a5ff9886a55515ed -Block 0007 [ 63]: 32d4cc9d0768f0f5 -Block 0007 [ 64]: e5e9367d6dbfb5df -Block 0007 [ 65]: 9bf89cf290ebd025 -Block 0007 [ 66]: b9dc0ca9a6066c11 -Block 0007 [ 67]: d9e6a7a7d1549407 -Block 0007 [ 68]: 708b02a53354d50d -Block 0007 [ 69]: fcd4038bd4ed92e4 -Block 0007 [ 70]: 879afb895a5562ac -Block 0007 [ 71]: f84b300e452230e8 -Block 0007 [ 72]: 1e056e1eb0df87eb -Block 0007 [ 73]: a4f406ae37a5bfb0 -Block 0007 [ 74]: cfd6acf7f684477c -Block 0007 [ 75]: 9a0c3bd9bfa97762 -Block 0007 [ 76]: 7dc2fd0cf9c1698f -Block 0007 [ 77]: 5a6803439aa62d7c -Block 0007 [ 78]: a300c3f035c0a906 -Block 0007 [ 79]: 7d93e3df4d332583 -Block 0007 [ 80]: 9f0a41eb6cf81aa3 -Block 0007 [ 81]: 090d4d5491402f2f -Block 0007 [ 82]: db71454163e4d82f -Block 0007 [ 83]: f280fbe4abd57828 -Block 0007 [ 84]: 7ba860252f9fca17 -Block 0007 [ 85]: 8f97f52ff384b305 -Block 0007 [ 86]: a5ac80ed19180eac -Block 0007 [ 87]: 4271fc976d660442 -Block 0007 [ 88]: 7ffbac72edba0eb4 -Block 0007 [ 89]: 2507d3a8c064829f -Block 0007 [ 90]: ae63553febe76e59 -Block 0007 [ 91]: 5f980ae5b5d227c6 -Block 0007 [ 92]: 6c6e292330408622 -Block 0007 [ 93]: 86ff7aa8e27fe84f -Block 0007 [ 94]: 191145bd78a49426 -Block 0007 [ 95]: 5245342b117c9e22 -Block 0007 [ 96]: 639aa498da7959b9 -Block 0007 [ 97]: a8ab257350cd755b -Block 0007 [ 98]: 2a865d9545a18b9a -Block 0007 [ 99]: 03253d93314b53a9 -Block 0007 [100]: 8253d22ddb5d6bec -Block 0007 [101]: b6e36234dad1aba7 -Block 0007 [102]: 68830cbc1c67cc2b -Block 0007 [103]: 3329e21d4d26fe24 -Block 0007 [104]: c12e237cc006fac7 -Block 0007 [105]: 10cd1052f800660c -Block 0007 [106]: d21a79dfe11e09e1 -Block 0007 [107]: 1e13955a2b50bce6 -Block 0007 [108]: 9f49277660c9eae2 -Block 0007 [109]: 6404ee69235748b8 -Block 0007 [110]: 91fe5838faba8e93 -Block 0007 [111]: 92edcd3e257759b3 -Block 0007 [112]: 7f2b1a31c0f364b0 -Block 0007 [113]: 09f0b9b566fd7e16 -Block 0007 [114]: e36832a08f2aa2af -Block 0007 [115]: 1305d3b423f27290 -Block 0007 [116]: b98b05f6f4ada98e -Block 0007 [117]: fe4b59fea117a0cc -Block 0007 [118]: e32a71359fc93132 -Block 0007 [119]: d623901ca1f81d14 -Block 0007 [120]: 5a81370130e84352 -Block 0007 [121]: b426f6c7233c9577 -Block 0007 [122]: e437e7ab8d1b79dc -Block 0007 [123]: 90588535ecf2e177 -Block 0007 [124]: 915c2947d730404e -Block 0007 [125]: 3afc9bc412d60ec7 -Block 0007 [126]: 52968dd0d114c6fd -Block 0007 [127]: 349bf7ebd16f7787 -Block 0008 [ 0]: a4adfe4d99910cf4 -Block 0008 [ 1]: c351bfb2ad7543fc -Block 0008 [ 2]: ab7df1fb899a8162 -Block 0008 [ 3]: 84a70a38b48d6841 -Block 0008 [ 4]: 8cf53bd5d8be66b2 -Block 0008 [ 5]: fb54f442f6eb52b8 -Block 0008 [ 6]: 88adf1690f5ec2ed -Block 0008 [ 7]: 41380e64b80584c9 -Block 0008 [ 8]: 3d4641ace2233214 -Block 0008 [ 9]: ffa746589d1272b4 -Block 0008 [ 10]: 2725655f6415ce90 -Block 0008 [ 11]: 04be018f0b904cf9 -Block 0008 [ 12]: 5384ff540a51785f -Block 0008 [ 13]: 666d47030ccbde5e -Block 0008 [ 14]: f213da828329e2f0 -Block 0008 [ 15]: 75f9c65103f5f46c -Block 0008 [ 16]: e2ae9c2ee2f4816c -Block 0008 [ 17]: 52e1c215442ecfcf -Block 0008 [ 18]: 9cfb83358ca0ec12 -Block 0008 [ 19]: 8a5b5cc7efc4a9ac -Block 0008 [ 20]: 6a19c286f0a8c950 -Block 0008 [ 21]: 30177985adb92f43 -Block 0008 [ 22]: 20424653cddc8ff3 -Block 0008 [ 23]: 9e4c2cd726e699d5 -Block 0008 [ 24]: 88eee79981120ff7 -Block 0008 [ 25]: f57cb3fe062a3966 -Block 0008 [ 26]: 4aaf82b7910e692d -Block 0008 [ 27]: 1cb38ac0c88552e0 -Block 0008 [ 28]: b79d8c8cd58a1d65 -Block 0008 [ 29]: db54e9d4af253bdd -Block 0008 [ 30]: c1b223dbd47298d9 -Block 0008 [ 31]: 9b3d45d10d3c1d55 -Block 0008 [ 32]: ea124c969e5bc7a9 -Block 0008 [ 33]: 3980294920c96453 -Block 0008 [ 34]: 8f78b5e306f50322 -Block 0008 [ 35]: 4b3d1b73f5c51af2 -Block 0008 [ 36]: d4838a6dbf5a9c58 -Block 0008 [ 37]: 73d5ccd5a3f0051f -Block 0008 [ 38]: bad7923df6b64217 -Block 0008 [ 39]: cbc27176d94d8498 -Block 0008 [ 40]: 1bd98448f65a8b40 -Block 0008 [ 41]: 68046fcd71bdbed8 -Block 0008 [ 42]: 324abd87c40e8445 -Block 0008 [ 43]: 959a955259823db0 -Block 0008 [ 44]: 2048e1d260ea23d2 -Block 0008 [ 45]: 057b0df5e8d5e41a -Block 0008 [ 46]: f258852b6cf19613 -Block 0008 [ 47]: 50062fb8f780806e -Block 0008 [ 48]: 30547b8f4794d029 -Block 0008 [ 49]: 012c05500a35cde0 -Block 0008 [ 50]: 92f444164303e83f -Block 0008 [ 51]: 1672d08bf96d6f0e -Block 0008 [ 52]: f6a0ded2c321e7e4 -Block 0008 [ 53]: 320b4bffaae2630a -Block 0008 [ 54]: 3be9b3af44cef7fa -Block 0008 [ 55]: 4a7e4f662cd9e95c -Block 0008 [ 56]: 5960721992ad56b6 -Block 0008 [ 57]: dcd75636e45c61c1 -Block 0008 [ 58]: aab8dae08205ab21 -Block 0008 [ 59]: ebc5255b469a3007 -Block 0008 [ 60]: 9f3d591c663d9fbf -Block 0008 [ 61]: 3d2c288bcff83b4f -Block 0008 [ 62]: 06cc6f2c6628cdfe -Block 0008 [ 63]: 87550de6e0e963a2 -Block 0008 [ 64]: 23c6f424e3e75f4d -Block 0008 [ 65]: 8b9f92a37e9e0344 -Block 0008 [ 66]: d868b102a5d6b48d -Block 0008 [ 67]: 8447e4e667c0f561 -Block 0008 [ 68]: 3b744353d55d66b4 -Block 0008 [ 69]: 85a405846a2b4b86 -Block 0008 [ 70]: 83608220e4b3e470 -Block 0008 [ 71]: 55ee0e8c99df68e4 -Block 0008 [ 72]: b67848f9d16ec6c7 -Block 0008 [ 73]: 91fa8ec5b14a0193 -Block 0008 [ 74]: 5fb3f547492c3bfe -Block 0008 [ 75]: 99aa6950926c7bbb -Block 0008 [ 76]: 2868d23e0f3ba62c -Block 0008 [ 77]: 54a21971a3e6da83 -Block 0008 [ 78]: a7983f5690608187 -Block 0008 [ 79]: eda562b615edd8d0 -Block 0008 [ 80]: b143f81d4b57824b -Block 0008 [ 81]: 74989288dffa4df4 -Block 0008 [ 82]: 9dc7eb0a82f1d679 -Block 0008 [ 83]: 7fd6bc8054abd40f -Block 0008 [ 84]: 4a48ff43f5bc9a80 -Block 0008 [ 85]: 082ecbf4328c43b2 -Block 0008 [ 86]: 2e62efd01a152b8c -Block 0008 [ 87]: 9af6685e941965cc -Block 0008 [ 88]: 5ea16be4325897b4 -Block 0008 [ 89]: a3e786beb9ecac26 -Block 0008 [ 90]: 46373672e4bcaf5b -Block 0008 [ 91]: 1b37a65c3723de2b -Block 0008 [ 92]: 02d2cbcdf3b176a6 -Block 0008 [ 93]: cf60c07520e43204 -Block 0008 [ 94]: a9dd60666862b745 -Block 0008 [ 95]: d19216d3b85289b2 -Block 0008 [ 96]: a9d0aabe8fb0372c -Block 0008 [ 97]: be4b2f13878b6352 -Block 0008 [ 98]: 34e617f56db7b896 -Block 0008 [ 99]: d4805ff266e25b86 -Block 0008 [100]: 1a5a5256713b4124 -Block 0008 [101]: 86522d688fdd84bd -Block 0008 [102]: 7aa5fd0f76300aa4 -Block 0008 [103]: a8d4aa55e2b89413 -Block 0008 [104]: 0a998b3dc3bf2286 -Block 0008 [105]: 23b251906b5d1e24 -Block 0008 [106]: 21343137b70583fb -Block 0008 [107]: cc7d731a0ce049fb -Block 0008 [108]: d9832268500fba4c -Block 0008 [109]: cd23dae93244b015 -Block 0008 [110]: 97d872af6b818e31 -Block 0008 [111]: 50334b1da8bc7bcc -Block 0008 [112]: 2e490372855964ab -Block 0008 [113]: f982b1ac2b70bcb6 -Block 0008 [114]: d2bc8ddd5b404223 -Block 0008 [115]: 662e20f88734c872 -Block 0008 [116]: 3a803c69c553cc66 -Block 0008 [117]: ee233774c332dfc5 -Block 0008 [118]: e2e869ba8cdc3903 -Block 0008 [119]: e1664fc0d03b347b -Block 0008 [120]: ad772ab8bc1bf39c -Block 0008 [121]: 08dcd88f94d043f1 -Block 0008 [122]: 9fe0e02801d766f7 -Block 0008 [123]: 97308e7df7cfdadf -Block 0008 [124]: 49652ba3d55c20cf -Block 0008 [125]: 90e173da7f1ed0bc -Block 0008 [126]: cf9ed0890c4db7bc -Block 0008 [127]: 7e19886a294ac8db -Block 0009 [ 0]: 09f17821e07e1488 -Block 0009 [ 1]: 0554c6983ae28b5d -Block 0009 [ 2]: 8ee2caa35450bbad -Block 0009 [ 3]: 01c4a311d85f2003 -Block 0009 [ 4]: 47abed6fae824a3a -Block 0009 [ 5]: dab8aa500bb36756 -Block 0009 [ 6]: 3c423358682ce690 -Block 0009 [ 7]: fc56cd8481c94c36 -Block 0009 [ 8]: 9bcd7052c2c57813 -Block 0009 [ 9]: 3176b04677072ef9 -Block 0009 [ 10]: 0e40514b0f205bc4 -Block 0009 [ 11]: 5cfaf5cda95b5e0a -Block 0009 [ 12]: 9178402699e0f83c -Block 0009 [ 13]: 6352ff0713d6ece0 -Block 0009 [ 14]: 5b51c880851011ce -Block 0009 [ 15]: d70b2cbcb65a0f17 -Block 0009 [ 16]: 0bf009b67d4c8d93 -Block 0009 [ 17]: 6b1aafe855552a0a -Block 0009 [ 18]: e5eec0f59e9b4d80 -Block 0009 [ 19]: f90e33441caf7aca -Block 0009 [ 20]: f214ea315a60a5f6 -Block 0009 [ 21]: 0fd7c5216bc8ebed -Block 0009 [ 22]: 9722d73114abecbc -Block 0009 [ 23]: e009b1ef945a8936 -Block 0009 [ 24]: db081479f27340b0 -Block 0009 [ 25]: e2de9dffd79edb4e -Block 0009 [ 26]: 2cc6c9f0fd511465 -Block 0009 [ 27]: 3b5333ee1d8a2224 -Block 0009 [ 28]: 44e8af9a7430f239 -Block 0009 [ 29]: 9750f732ae9076a0 -Block 0009 [ 30]: 36b3884c52b1af6e -Block 0009 [ 31]: e348d29ed7a38013 -Block 0009 [ 32]: 19f6e8d1091eabbf -Block 0009 [ 33]: fb504d067a79ee87 -Block 0009 [ 34]: dc0ba069d7b9931a -Block 0009 [ 35]: 1709287edac154ce -Block 0009 [ 36]: d2617168f799c765 -Block 0009 [ 37]: bee76e43b816db93 -Block 0009 [ 38]: 08220ebdd94c3483 -Block 0009 [ 39]: e4c3aeba402c8638 -Block 0009 [ 40]: d860d8f3168e0eb6 -Block 0009 [ 41]: 8c706849ef5d2401 -Block 0009 [ 42]: 6d4c71aaaf0a530a -Block 0009 [ 43]: 6d1bc6e62a4c7a30 -Block 0009 [ 44]: 726e724258001102 -Block 0009 [ 45]: 380d272cdda1e903 -Block 0009 [ 46]: 9847d7ed2c1c338f -Block 0009 [ 47]: a200ae61c442cc25 -Block 0009 [ 48]: 815db01a7abec286 -Block 0009 [ 49]: fba18c65c3a93858 -Block 0009 [ 50]: fcf116b5e2222869 -Block 0009 [ 51]: 7508f3f16631617c -Block 0009 [ 52]: b52195f06b14bdf0 -Block 0009 [ 53]: 8a06e98b5b5b613a -Block 0009 [ 54]: 49422e71e2234817 -Block 0009 [ 55]: 8de98eea443a260c -Block 0009 [ 56]: 5136fc901d80e8f3 -Block 0009 [ 57]: a8c7dbb57a73b022 -Block 0009 [ 58]: ba64ee6d819d2f3f -Block 0009 [ 59]: 13b3e12f58c43960 -Block 0009 [ 60]: 48192ef6f55be023 -Block 0009 [ 61]: c04ec3cea66c260c -Block 0009 [ 62]: eaf4df200430c2c4 -Block 0009 [ 63]: c1330fc0dda60a8f -Block 0009 [ 64]: e2c7288214e2c0b9 -Block 0009 [ 65]: 45445f674fc36f02 -Block 0009 [ 66]: 399650904d856e33 -Block 0009 [ 67]: 6f521e3ce0776e50 -Block 0009 [ 68]: 90c29418e38f5286 -Block 0009 [ 69]: 33539205795b2e63 -Block 0009 [ 70]: aa12f6a11f38ef2c -Block 0009 [ 71]: 19e8c3ee38fca760 -Block 0009 [ 72]: 9915a4b915d55aef -Block 0009 [ 73]: c9378ab272fc0be3 -Block 0009 [ 74]: 9d6658d8a490556d -Block 0009 [ 75]: 8ac8734763fcf96a -Block 0009 [ 76]: 958fc74e8fe74cb5 -Block 0009 [ 77]: ff88ff2708eaccad -Block 0009 [ 78]: 340b5e67653d2214 -Block 0009 [ 79]: d1518d5a212ed742 -Block 0009 [ 80]: f6035f27a7435d1c -Block 0009 [ 81]: 3df889579023879e -Block 0009 [ 82]: bc2cb961e5e0cd29 -Block 0009 [ 83]: 06844112e407e60b -Block 0009 [ 84]: 598dc02a9a0428b9 -Block 0009 [ 85]: ca1cf5e0d56f7662 -Block 0009 [ 86]: 26db48300084fa3c -Block 0009 [ 87]: 575426242bc7e8a0 -Block 0009 [ 88]: 32982bb40322f4f2 -Block 0009 [ 89]: 8e24407528115daf -Block 0009 [ 90]: 956edfaf67d87ae3 -Block 0009 [ 91]: 1b2f925a514bcc53 -Block 0009 [ 92]: b3355bd8dda18359 -Block 0009 [ 93]: a44ea31b9e7b6365 -Block 0009 [ 94]: 9a31090deb917e2a -Block 0009 [ 95]: 0bacdf86671a9864 -Block 0009 [ 96]: 157ea61ef1e8b98e -Block 0009 [ 97]: a3b2090dcdaed2c6 -Block 0009 [ 98]: 9a894301b2305c71 -Block 0009 [ 99]: e39b034c47a9c2cb -Block 0009 [100]: 19f37631d9364cc9 -Block 0009 [101]: 482137d0abe23a00 -Block 0009 [102]: f74577849b6b85b3 -Block 0009 [103]: d4b3699288d88fbe -Block 0009 [104]: 24e2f75d49900d15 -Block 0009 [105]: d03357e4681ffbe6 -Block 0009 [106]: 3bf863ce22c7b264 -Block 0009 [107]: 09e48b1c12a8e22a -Block 0009 [108]: 5ecedc63d6d4fdae -Block 0009 [109]: d4152d6ad81f7f49 -Block 0009 [110]: ec521ae1d465e34d -Block 0009 [111]: 1cf63c849f966159 -Block 0009 [112]: bbe8f99053e9c272 -Block 0009 [113]: 22c8313fcdf6dd2b -Block 0009 [114]: 5a33b67ef927a384 -Block 0009 [115]: 45eb429e89648b5e -Block 0009 [116]: 6a70eebb130273bb -Block 0009 [117]: 279d1b9a1c92987a -Block 0009 [118]: 8e87f531707bad10 -Block 0009 [119]: e28fb73bc2645dcb -Block 0009 [120]: e101cbcb663ae481 -Block 0009 [121]: e13638603439422f -Block 0009 [122]: 31ab2be0b269b032 -Block 0009 [123]: 94ed21ee47b10cad -Block 0009 [124]: f870cdcc24169da9 -Block 0009 [125]: 36d7d00fdf82170d -Block 0009 [126]: 3803dacdc76a154e -Block 0009 [127]: 977e4fa3ffa1fce6 -Block 0010 [ 0]: 2cd2736a0c31ac9d -Block 0010 [ 1]: dcc65d317a7255b8 -Block 0010 [ 2]: d0b0e18c3e5a8ced -Block 0010 [ 3]: 472d60d4c41fa394 -Block 0010 [ 4]: 6f37e1f6c0e9cfb4 -Block 0010 [ 5]: d5d419fe7c4458a5 -Block 0010 [ 6]: 5fca139c0b7b7e73 -Block 0010 [ 7]: 3580da18ec70231e -Block 0010 [ 8]: d33560fda3ebfb80 -Block 0010 [ 9]: 43ecf3f017da5852 -Block 0010 [ 10]: 42875a570ead27c0 -Block 0010 [ 11]: a34885ed7ee14e47 -Block 0010 [ 12]: 7d6d2f6dcb52a0c2 -Block 0010 [ 13]: 784941bde6ce9680 -Block 0010 [ 14]: caf67a8b7846409b -Block 0010 [ 15]: 0626914ae112efce -Block 0010 [ 16]: aea97d1be487d29c -Block 0010 [ 17]: 74db6aa3ab481fde -Block 0010 [ 18]: b75f913dc34d0736 -Block 0010 [ 19]: 276708b32e055bef -Block 0010 [ 20]: c13113ed4225fdcd -Block 0010 [ 21]: 25f85027d97a3a99 -Block 0010 [ 22]: bde953054d7c7005 -Block 0010 [ 23]: 6efb2749e94eb5f1 -Block 0010 [ 24]: b24b2abb0bd4d463 -Block 0010 [ 25]: 965b9abee3eec977 -Block 0010 [ 26]: 4fc350cecc888839 -Block 0010 [ 27]: d46aed5e86aee3a5 -Block 0010 [ 28]: eeb73b706839f597 -Block 0010 [ 29]: 54e359783ca6afcb -Block 0010 [ 30]: 07981e7399d2a1e4 -Block 0010 [ 31]: 3f6a165af1041a1a -Block 0010 [ 32]: 9211fb454c73bee6 -Block 0010 [ 33]: 54601d385755903a -Block 0010 [ 34]: cbe9cd78be150f78 -Block 0010 [ 35]: 71dd09ef23a29059 -Block 0010 [ 36]: 076ea4fd1ca5e7bf -Block 0010 [ 37]: 878b5d6b4b5e4f24 -Block 0010 [ 38]: 30dbe4a9a1fee881 -Block 0010 [ 39]: eab7308f1f869ef9 -Block 0010 [ 40]: f166aa28a9230046 -Block 0010 [ 41]: e0a76678b27c054e -Block 0010 [ 42]: 4214eb3dbe411aab -Block 0010 [ 43]: 7f1f277a3838c0bb -Block 0010 [ 44]: a1c1fbad31bf29bc -Block 0010 [ 45]: df12890cbd39bb6b -Block 0010 [ 46]: ad1db3698cbb8a59 -Block 0010 [ 47]: 5d19cf1c7323e374 -Block 0010 [ 48]: f027c256ee46d7a9 -Block 0010 [ 49]: 931057e2d0031fc0 -Block 0010 [ 50]: abae826e0949155a -Block 0010 [ 51]: 12b61077f83a110e -Block 0010 [ 52]: a441fb7eb8bded8f -Block 0010 [ 53]: eafca6ccb9ca3b45 -Block 0010 [ 54]: d21d577c96969983 -Block 0010 [ 55]: 84ca9a33efb36cc3 -Block 0010 [ 56]: 4b7aab67b2056e06 -Block 0010 [ 57]: 5f5c3987109e8148 -Block 0010 [ 58]: 5ac22f97baac7ee6 -Block 0010 [ 59]: ccde1c3d416b0a2b -Block 0010 [ 60]: d058c4af79ae2615 -Block 0010 [ 61]: e7cf10480cc90823 -Block 0010 [ 62]: 423f4c0f01616a13 -Block 0010 [ 63]: 5dfbcaf113167b33 -Block 0010 [ 64]: 7246e0389e71b4be -Block 0010 [ 65]: e5ed12c82501482c -Block 0010 [ 66]: b76896f90ab7ca0a -Block 0010 [ 67]: d64da0fa30ddb24f -Block 0010 [ 68]: c576b92ebf881110 -Block 0010 [ 69]: 7f95954959d11974 -Block 0010 [ 70]: 2ab42627d90c8ba2 -Block 0010 [ 71]: 40547841497f36f8 -Block 0010 [ 72]: eb3f2ad272f78ec1 -Block 0010 [ 73]: 22b73352e10f41ae -Block 0010 [ 74]: 90d25ab70e6314c6 -Block 0010 [ 75]: 23a3e76a227e11ba -Block 0010 [ 76]: a29fdd5f72e3706b -Block 0010 [ 77]: 0062d09724e9f921 -Block 0010 [ 78]: ff10f4c4b92fc872 -Block 0010 [ 79]: 6d032244533214f8 -Block 0010 [ 80]: ebaa8e53dbb544e9 -Block 0010 [ 81]: 3dfcfb35ce8415fc -Block 0010 [ 82]: a1db26743136be25 -Block 0010 [ 83]: 08da5ebe546aa00a -Block 0010 [ 84]: 328ff22d9350a5b0 -Block 0010 [ 85]: c90d2a256453e3c7 -Block 0010 [ 86]: c20d55b299a46cc3 -Block 0010 [ 87]: 76f774e1da4ed025 -Block 0010 [ 88]: 9d16640a64b2a68d -Block 0010 [ 89]: 49c4888454b71b63 -Block 0010 [ 90]: 68877f13347ae22a -Block 0010 [ 91]: 6e4c2912cc08f132 -Block 0010 [ 92]: d782009fb171ef5f -Block 0010 [ 93]: 55a323816326dec3 -Block 0010 [ 94]: 49ef50ca0e06e7fb -Block 0010 [ 95]: f121a1f5e771d82a -Block 0010 [ 96]: e1674249ba7eb13f -Block 0010 [ 97]: a4e34d3547a55437 -Block 0010 [ 98]: 1efabf15dd59ca9e -Block 0010 [ 99]: 38035e0f6d953c25 -Block 0010 [100]: 61c54328b018e179 -Block 0010 [101]: 5c8acc1033e41bd7 -Block 0010 [102]: cb0590ec61f7547f -Block 0010 [103]: f16395274831b1d4 -Block 0010 [104]: 2cd896877bc900c9 -Block 0010 [105]: 6e89957d98c368db -Block 0010 [106]: 1bde150709223401 -Block 0010 [107]: f53b7684c366a59a -Block 0010 [108]: 05f7a3c51c6fa561 -Block 0010 [109]: 1c79ecc5c88f4294 -Block 0010 [110]: 43401ccb858beb97 -Block 0010 [111]: b1ff788ac449a9bc -Block 0010 [112]: afc78a2a7b2f8df7 -Block 0010 [113]: 5c4be1d58dcb21d6 -Block 0010 [114]: fbf8923851ea390f -Block 0010 [115]: ad469cac1beb1c25 -Block 0010 [116]: 440f0a4b28b9857c -Block 0010 [117]: 2237d018e37b09cc -Block 0010 [118]: 04e3b98e10c07b8d -Block 0010 [119]: 40cc39ec5451fd13 -Block 0010 [120]: 9ddda8cba4ba5cca -Block 0010 [121]: 1780b1d3fc89c520 -Block 0010 [122]: 41a26a9570784453 -Block 0010 [123]: 294f98302d4dcb1f -Block 0010 [124]: a738b915d18269f7 -Block 0010 [125]: 31ca696d21c1e964 -Block 0010 [126]: 262a41789e59e5e8 -Block 0010 [127]: 6ec7d6dba9d819a1 -Block 0011 [ 0]: 0f6421dd331b68b8 -Block 0011 [ 1]: 9413d7c0380a4d33 -Block 0011 [ 2]: 6b45410505eff308 -Block 0011 [ 3]: a6f16907b9695bb4 -Block 0011 [ 4]: aa1748d117d465d1 -Block 0011 [ 5]: 01f4898f474f9d23 -Block 0011 [ 6]: 75723750b635c9ac -Block 0011 [ 7]: af079cf715419ac9 -Block 0011 [ 8]: aa83ee3d9d07606d -Block 0011 [ 9]: 4747e13ef6d298bf -Block 0011 [ 10]: 20a2ade15d33fc37 -Block 0011 [ 11]: 42e60057b83fb44e -Block 0011 [ 12]: ee98b76ec63deffc -Block 0011 [ 13]: 419e5830efe4e409 -Block 0011 [ 14]: 76b6283fdc169e13 -Block 0011 [ 15]: 46e3a31e70abd7cf -Block 0011 [ 16]: c884f047bad0bf39 -Block 0011 [ 17]: 791c979423d7c3a2 -Block 0011 [ 18]: 9782203d7c5362c1 -Block 0011 [ 19]: 061473dc9597fdb4 -Block 0011 [ 20]: 5b1ea358780aaa6b -Block 0011 [ 21]: d299edc50d5d3e96 -Block 0011 [ 22]: 060bb17f50a3894d -Block 0011 [ 23]: 6310b765febd6abc -Block 0011 [ 24]: 6e1ea1dc10032c2b -Block 0011 [ 25]: 650e5f41f0f2a992 -Block 0011 [ 26]: 86b0974ac30a726e -Block 0011 [ 27]: 8e07f730a4d9fb09 -Block 0011 [ 28]: b298d0f2abc1e051 -Block 0011 [ 29]: 1c97e22a82872845 -Block 0011 [ 30]: 3c7afb67a01d9fbf -Block 0011 [ 31]: f97947fe02896866 -Block 0011 [ 32]: 64ddd9338e040673 -Block 0011 [ 33]: ca32b60af15430d0 -Block 0011 [ 34]: ac82cf7952571c60 -Block 0011 [ 35]: e49b241ed1479725 -Block 0011 [ 36]: 94d8bd284469e7f4 -Block 0011 [ 37]: 3cd12e6ac8f2908d -Block 0011 [ 38]: 86b4b6a7ee8cb8ea -Block 0011 [ 39]: 66ac6958355ce1cd -Block 0011 [ 40]: f0386d92899099d0 -Block 0011 [ 41]: ae778abc76351811 -Block 0011 [ 42]: 1debb933e04038ee -Block 0011 [ 43]: d2c247b52435f51d -Block 0011 [ 44]: f472cc4452e1ba9d -Block 0011 [ 45]: 715d658a7579e3b6 -Block 0011 [ 46]: 3468752ad88c0800 -Block 0011 [ 47]: 5d734fd451962958 -Block 0011 [ 48]: 8f3cae63cc94fbd1 -Block 0011 [ 49]: 0ed93eeb2a695b7f -Block 0011 [ 50]: 538bff2fe68fb26d -Block 0011 [ 51]: 535f13594389cc58 -Block 0011 [ 52]: 016c66a1fa857ada -Block 0011 [ 53]: 8167376a56a3ffe8 -Block 0011 [ 54]: 05d622a6c5d7ccc4 -Block 0011 [ 55]: 99582c4d66b60ec5 -Block 0011 [ 56]: 8eefee640a12d44c -Block 0011 [ 57]: 0d65ce7b71a01dbd -Block 0011 [ 58]: 68c10cdeb6fb7df3 -Block 0011 [ 59]: 427cf7bd7b9d8de3 -Block 0011 [ 60]: 81a91f6e0691e347 -Block 0011 [ 61]: 25bdf7508bdff3eb -Block 0011 [ 62]: 8921ddc40ad9116a -Block 0011 [ 63]: c3b1b8a27d0f423d -Block 0011 [ 64]: ccdbdc89c8597ada -Block 0011 [ 65]: ecb2e8b2e7a8029a -Block 0011 [ 66]: 1bf60102f57e1d60 -Block 0011 [ 67]: c83a409a09df2a59 -Block 0011 [ 68]: 42651a751bd12911 -Block 0011 [ 69]: c61a61ba19ef7d31 -Block 0011 [ 70]: 4350de115dfc549e -Block 0011 [ 71]: 53029cf951569652 -Block 0011 [ 72]: e6596db8f557adc6 -Block 0011 [ 73]: e3e97f2eb8d1f70d -Block 0011 [ 74]: 373826b668131e1d -Block 0011 [ 75]: 741d95fcdb504062 -Block 0011 [ 76]: 2d8f911340f42f6a -Block 0011 [ 77]: 4474f5c71c4bc0fb -Block 0011 [ 78]: b4c4237d4433fb15 -Block 0011 [ 79]: ad8293c1e42fb43f -Block 0011 [ 80]: ed72954da0ad7fdf -Block 0011 [ 81]: e3ae9b0886c8d0b0 -Block 0011 [ 82]: 48d24c36990ec552 -Block 0011 [ 83]: 7f4da5fc0275065d -Block 0011 [ 84]: 2c1b31339565a745 -Block 0011 [ 85]: 616eedeac31c2781 -Block 0011 [ 86]: 6d468bbf6faf2dd9 -Block 0011 [ 87]: 59f69b71c6b459d9 -Block 0011 [ 88]: 783e7a635929d6e9 -Block 0011 [ 89]: 87bb13d51620b4c0 -Block 0011 [ 90]: 861e265d55e3b85e -Block 0011 [ 91]: 237cbd385ffd69a1 -Block 0011 [ 92]: 7babcd805ad96950 -Block 0011 [ 93]: ae71fea660d0fe46 -Block 0011 [ 94]: 6b3810a5232a039c -Block 0011 [ 95]: 2e87a630dae147e3 -Block 0011 [ 96]: 9d0fc975282cc88c -Block 0011 [ 97]: 9c35c8dcb1527fd0 -Block 0011 [ 98]: 99acd6a25ed6832a -Block 0011 [ 99]: f800832e202306bc -Block 0011 [100]: 154425c5c3070b92 -Block 0011 [101]: 033363274ed6b05d -Block 0011 [102]: 848069f7be4fa5c0 -Block 0011 [103]: 5d096e92cb952782 -Block 0011 [104]: a5c9710bff476a41 -Block 0011 [105]: 1ce68073e94d5602 -Block 0011 [106]: 123f120f04020240 -Block 0011 [107]: baf32cb1dfec19c4 -Block 0011 [108]: 1fb86ac5927d03da -Block 0011 [109]: 51c31b1882823de3 -Block 0011 [110]: f576c0710e67d98b -Block 0011 [111]: 4d0c15d414d97441 -Block 0011 [112]: bc5c5ee50ce748b6 -Block 0011 [113]: 6ced2e7f71ae5b2e -Block 0011 [114]: 6f029d91e0b73516 -Block 0011 [115]: 994dbd69f5b63c41 -Block 0011 [116]: ae45ee977791b483 -Block 0011 [117]: d7648f8fa1274743 -Block 0011 [118]: a6ff2d48dc1038f9 -Block 0011 [119]: e0b8353327619fc0 -Block 0011 [120]: ab88d74f0f3fbb52 -Block 0011 [121]: 6405b628531b4e3f -Block 0011 [122]: 8107aad4c2445a1c -Block 0011 [123]: 7af51bc5013db8c3 -Block 0011 [124]: 3b11a69b3cafd3d7 -Block 0011 [125]: 99c8791112918afc -Block 0011 [126]: e40140d75b01ebd2 -Block 0011 [127]: 421f17c323b1999a -Block 0012 [ 0]: 57b45e2155eb09a6 -Block 0012 [ 1]: e4c2f41f5c9422d1 -Block 0012 [ 2]: 805fc558ad63876c -Block 0012 [ 3]: f20bc926472e526a -Block 0012 [ 4]: 9cb136333a7f408b -Block 0012 [ 5]: f56a257cf12bd95a -Block 0012 [ 6]: 73677f0919085ceb -Block 0012 [ 7]: ec308986d1942ad1 -Block 0012 [ 8]: 67797afdca9d0e01 -Block 0012 [ 9]: 3d9eda562601b379 -Block 0012 [ 10]: 05841d4e15c878d8 -Block 0012 [ 11]: 305f2848b06d57ba -Block 0012 [ 12]: caa5f6f7a0a27afd -Block 0012 [ 13]: 62953adc90c85900 -Block 0012 [ 14]: da34c2d07a919662 -Block 0012 [ 15]: f4e763cabfaefb12 -Block 0012 [ 16]: 134b35d39509ea42 -Block 0012 [ 17]: 6bdedb78e7034c61 -Block 0012 [ 18]: 59a488e36bbedcc7 -Block 0012 [ 19]: 4a1e6deab9ba69f6 -Block 0012 [ 20]: 41302fa4cd7d9d2c -Block 0012 [ 21]: c6e1a3e3382aaa5e -Block 0012 [ 22]: 6fb61a14363537ed -Block 0012 [ 23]: d037afec313500fa -Block 0012 [ 24]: be19c63a67ced569 -Block 0012 [ 25]: 7927ca951ae66c45 -Block 0012 [ 26]: 377278d9c42dfce2 -Block 0012 [ 27]: d094448fc4dca475 -Block 0012 [ 28]: 8fe33e63b5464cd7 -Block 0012 [ 29]: 534c6bfd73b1664d -Block 0012 [ 30]: 2349185e29a74d3e -Block 0012 [ 31]: 874af27d7ebfefc3 -Block 0012 [ 32]: f3db4272da3cb08d -Block 0012 [ 33]: 07adcb591bf14309 -Block 0012 [ 34]: 4bdbafae807c3807 -Block 0012 [ 35]: fa27aa7f5667425b -Block 0012 [ 36]: 471d38e55b583a78 -Block 0012 [ 37]: 96f6c0c0a1240588 -Block 0012 [ 38]: 75401db0a1c25736 -Block 0012 [ 39]: 1398216942c7c35c -Block 0012 [ 40]: 5343467b1ae7b457 -Block 0012 [ 41]: fa32b8553f7446c2 -Block 0012 [ 42]: c2c850718c009070 -Block 0012 [ 43]: 366dfd2bc6951ed0 -Block 0012 [ 44]: 5bb3d45dc4af7ae8 -Block 0012 [ 45]: b085e329d6294897 -Block 0012 [ 46]: a95768badd7960f6 -Block 0012 [ 47]: 80413c11bd367b42 -Block 0012 [ 48]: 5a9807a2c57b5fcd -Block 0012 [ 49]: d2a9b8e1d8d0e483 -Block 0012 [ 50]: b0465723a123b002 -Block 0012 [ 51]: 1bcf94c7e694c4fb -Block 0012 [ 52]: 92423c23eb077412 -Block 0012 [ 53]: 3932c2fbba7db8d4 -Block 0012 [ 54]: 5b3bccb0b9cf3829 -Block 0012 [ 55]: b29df488af3b7740 -Block 0012 [ 56]: 0b9538420af6f746 -Block 0012 [ 57]: 4bd159e8c22fceba -Block 0012 [ 58]: 1b772f85b3153005 -Block 0012 [ 59]: dcb156af6d11d4e6 -Block 0012 [ 60]: 58156afd7dc41c29 -Block 0012 [ 61]: 7d3b2509e63033d5 -Block 0012 [ 62]: 6f1c580bb2f3d9b1 -Block 0012 [ 63]: c6c37c1d6eb4daee -Block 0012 [ 64]: cfeb8d6cb8866495 -Block 0012 [ 65]: dd17d3852ed6a6e8 -Block 0012 [ 66]: e41c7e41f538dbe7 -Block 0012 [ 67]: 5768bf57b3a5ed86 -Block 0012 [ 68]: 78046e27e202f6aa -Block 0012 [ 69]: a3e201aefc301b70 -Block 0012 [ 70]: 50a0d5a4a91b8af4 -Block 0012 [ 71]: a5e559a8a6c437d6 -Block 0012 [ 72]: fac6cd8e65d46ff9 -Block 0012 [ 73]: 0d9fa685d3eb2111 -Block 0012 [ 74]: 9623a5bd74bbf9df -Block 0012 [ 75]: cc8c1640de946f03 -Block 0012 [ 76]: 45895a3b3b44202b -Block 0012 [ 77]: fc89b3976c685cdc -Block 0012 [ 78]: cd752649ff454671 -Block 0012 [ 79]: 93772ab678e8e9ca -Block 0012 [ 80]: 298a19530983c336 -Block 0012 [ 81]: de1d36ad501353d6 -Block 0012 [ 82]: dd964f96de8650e4 -Block 0012 [ 83]: 25ae2833905c7023 -Block 0012 [ 84]: 519edf230c5711f2 -Block 0012 [ 85]: 256dc6f35b268020 -Block 0012 [ 86]: 9e3b5315d2df8c07 -Block 0012 [ 87]: a492a2843836e071 -Block 0012 [ 88]: b93bcf95d01975d9 -Block 0012 [ 89]: 48db0c4bc87eff40 -Block 0012 [ 90]: 2d78c22e82fdba57 -Block 0012 [ 91]: 39d7e857cd35e0ce -Block 0012 [ 92]: 41482071123589ac -Block 0012 [ 93]: b8d24d5a6203255f -Block 0012 [ 94]: cb4c0f936f2ae1ac -Block 0012 [ 95]: cc2c6d7046f20ea6 -Block 0012 [ 96]: 611bb8e43b69c470 -Block 0012 [ 97]: cb76f40096c7a527 -Block 0012 [ 98]: 041160b6d87e85b3 -Block 0012 [ 99]: 14a808513a59ddeb -Block 0012 [100]: 3146e51118b5d3f0 -Block 0012 [101]: a4d48814108462aa -Block 0012 [102]: b09a74a839ffd0e3 -Block 0012 [103]: 41887c72e8ecefac -Block 0012 [104]: a39e60aca9f9c1c6 -Block 0012 [105]: 94d3fed99796f4c5 -Block 0012 [106]: 915e01be08a71f60 -Block 0012 [107]: 5bc9a224b7417179 -Block 0012 [108]: 9b5ea49fadf9ea41 -Block 0012 [109]: b5734c9ea85c13c6 -Block 0012 [110]: 3ddc1878140e662e -Block 0012 [111]: 62878bb723c8e92c -Block 0012 [112]: 8d25065038213031 -Block 0012 [113]: c0ce352747559d71 -Block 0012 [114]: af42da990cb5f109 -Block 0012 [115]: 8f0854be4578b5a9 -Block 0012 [116]: 52633445299a0dc7 -Block 0012 [117]: 55b95c2c08739647 -Block 0012 [118]: a514cc136aac3485 -Block 0012 [119]: bed4bd5515c62d15 -Block 0012 [120]: bb4dc5594c8bde63 -Block 0012 [121]: 7088341e9ec16414 -Block 0012 [122]: ac9f56158d64d176 -Block 0012 [123]: 8170c10d3291daa2 -Block 0012 [124]: eb1e1b04ccc6ebc5 -Block 0012 [125]: c691cccb6c298e64 -Block 0012 [126]: 28db423772d9387d -Block 0012 [127]: fd201e0664640880 -Block 0013 [ 0]: 00ec39c939db9894 -Block 0013 [ 1]: 4420dfaadbee3c0b -Block 0013 [ 2]: 22cd108c9c63be9d -Block 0013 [ 3]: 20d0476679e15210 -Block 0013 [ 4]: 2dcee690366bb2c1 -Block 0013 [ 5]: a02c85486eb5afb1 -Block 0013 [ 6]: eb947f30e07f57b8 -Block 0013 [ 7]: 39071f737c63767a -Block 0013 [ 8]: 8c6f6c62ab515304 -Block 0013 [ 9]: 76e6e0129fefa947 -Block 0013 [ 10]: 755233c73eaeca92 -Block 0013 [ 11]: 175b46741a8bbd82 -Block 0013 [ 12]: 701ecdbaafa63a3f -Block 0013 [ 13]: f617280a7cb6df16 -Block 0013 [ 14]: ec2232a64ca32ca7 -Block 0013 [ 15]: 30b4d00845ef206b -Block 0013 [ 16]: ba9401ae6e780dce -Block 0013 [ 17]: 5b3e6e06b9a491af -Block 0013 [ 18]: d4fb8f043100e234 -Block 0013 [ 19]: 57e533e169fea374 -Block 0013 [ 20]: 01161771c7a81f08 -Block 0013 [ 21]: 0eefac8dbffd9218 -Block 0013 [ 22]: f23c581ed1df6a37 -Block 0013 [ 23]: 3553c1f8392e6ea8 -Block 0013 [ 24]: 169ae5c8916d1e80 -Block 0013 [ 25]: f7769df26dfc84a0 -Block 0013 [ 26]: acb68b419526eaec -Block 0013 [ 27]: 1291357db928c5cd -Block 0013 [ 28]: 5b6d8961bd429b19 -Block 0013 [ 29]: 4ff6515925c988fe -Block 0013 [ 30]: fdca8898314dbe4a -Block 0013 [ 31]: fd36e4c1d14ba7ca -Block 0013 [ 32]: 22009a75e3fc39df -Block 0013 [ 33]: dc7fe86e4949f847 -Block 0013 [ 34]: 59ef8d7b9e7ba1cb -Block 0013 [ 35]: eb72886e925b1acb -Block 0013 [ 36]: 5fad5d3c38006489 -Block 0013 [ 37]: 82dba341d15d2d56 -Block 0013 [ 38]: 05905e9e7ba6a663 -Block 0013 [ 39]: 7f3abe8f31b94ff2 -Block 0013 [ 40]: 3856453ab6d5c126 -Block 0013 [ 41]: 09b5552fc65cd05e -Block 0013 [ 42]: 2722b2ff56ee67fd -Block 0013 [ 43]: 44d9b85865a9b868 -Block 0013 [ 44]: 3090dc42cb77ced4 -Block 0013 [ 45]: 7acf325fabaaa4a8 -Block 0013 [ 46]: f61a814966f6c305 -Block 0013 [ 47]: 5f542e6b87babffc -Block 0013 [ 48]: f0425b7d0f75d5f4 -Block 0013 [ 49]: c5cbf2e60208c5f4 -Block 0013 [ 50]: 5b973edabe0361a2 -Block 0013 [ 51]: 7f5fe5324e325ab8 -Block 0013 [ 52]: ccec55217f3b82b4 -Block 0013 [ 53]: d676cba9ec6dd723 -Block 0013 [ 54]: 05da0d6ac5ecc58e -Block 0013 [ 55]: 6d6272bec3a4b8e8 -Block 0013 [ 56]: af31a6e8e6fb4cb9 -Block 0013 [ 57]: 29f435a830199118 -Block 0013 [ 58]: b9fc088f00f87093 -Block 0013 [ 59]: d68752cc88ab7438 -Block 0013 [ 60]: 8a9efac1e54c242d -Block 0013 [ 61]: 0fbfc535af7c20ff -Block 0013 [ 62]: 2cea3ebba917e008 -Block 0013 [ 63]: 55433086e2f6a6f6 -Block 0013 [ 64]: b0df96ad91c9e607 -Block 0013 [ 65]: 2fd6cfe69c5836f6 -Block 0013 [ 66]: 6c67ba628134d091 -Block 0013 [ 67]: fbd246e6c7e42035 -Block 0013 [ 68]: 651f33a83004fc17 -Block 0013 [ 69]: e1cbf99d4ec8b300 -Block 0013 [ 70]: ebd68429770d021a -Block 0013 [ 71]: 4fa7c8d34bb4ee9c -Block 0013 [ 72]: c6931ce85af3d3be -Block 0013 [ 73]: 287d02f736567dfd -Block 0013 [ 74]: 4df9653cd7145f81 -Block 0013 [ 75]: 3c61284f1698bfff -Block 0013 [ 76]: ccd0ea56458bc87d -Block 0013 [ 77]: dc15ea6cb6c7c8b7 -Block 0013 [ 78]: 9502b9bb7e8ca6e1 -Block 0013 [ 79]: 299464cddd3989db -Block 0013 [ 80]: 16dbe8345daf1e54 -Block 0013 [ 81]: 775459707e99df40 -Block 0013 [ 82]: c2b6e5a6cc36de56 -Block 0013 [ 83]: 9469ef94adebd6aa -Block 0013 [ 84]: e35eef9407cda49b -Block 0013 [ 85]: ddd463c60effea37 -Block 0013 [ 86]: c226c4c1033ae080 -Block 0013 [ 87]: a7f4bfd8c2100edb -Block 0013 [ 88]: ea2510b8c5811c62 -Block 0013 [ 89]: dcd044cdbbdfb940 -Block 0013 [ 90]: 938cc1cbfc8b94b7 -Block 0013 [ 91]: 437bc57fa90a3bbb -Block 0013 [ 92]: 7aa81548d40db03a -Block 0013 [ 93]: f8a292046d2fa796 -Block 0013 [ 94]: f2897d6e468bf8f6 -Block 0013 [ 95]: 901e412b7dc65309 -Block 0013 [ 96]: fb4891cd5a32b7db -Block 0013 [ 97]: 1a60255326e37f8a -Block 0013 [ 98]: 59c7a05cf45dc39a -Block 0013 [ 99]: 1b5b8c8670e944ff -Block 0013 [100]: 47145bf58a812d96 -Block 0013 [101]: 26e8ccd5429be8d0 -Block 0013 [102]: 046f3c2096f6bbc4 -Block 0013 [103]: 8482a9a6df7a65e4 -Block 0013 [104]: 50f04dcaf51f2d3d -Block 0013 [105]: 48d5efc4ddb27a70 -Block 0013 [106]: 2cb4d612eef96b21 -Block 0013 [107]: 7d49b448cca8912e -Block 0013 [108]: 129f7b291b96760f -Block 0013 [109]: 0493b40e6e7f3570 -Block 0013 [110]: 098c8184c1d123d0 -Block 0013 [111]: 8e42072653043cc7 -Block 0013 [112]: 6be95bddd1de01b2 -Block 0013 [113]: e06f858fad85516e -Block 0013 [114]: 43ffbff8f1706507 -Block 0013 [115]: eefd484bb56c691b -Block 0013 [116]: 61b105589d9b338c -Block 0013 [117]: 8e990037df282132 -Block 0013 [118]: 9763cc54d2f2cfc4 -Block 0013 [119]: 56e6c9eb670a2adc -Block 0013 [120]: a212057df0c0f6ea -Block 0013 [121]: f98be4183c32d1af -Block 0013 [122]: 478533919d7eaa3c -Block 0013 [123]: af360d62679b4f94 -Block 0013 [124]: a9acbd9a987da35e -Block 0013 [125]: b122a3845a30bf92 -Block 0013 [126]: a2d07821a856e6b2 -Block 0013 [127]: 04f46f78a0683224 -Block 0014 [ 0]: d0a71e6d68c6aecf -Block 0014 [ 1]: befd296e9a6f7bf7 -Block 0014 [ 2]: eb23e47984363429 -Block 0014 [ 3]: 9b4787767e96a598 -Block 0014 [ 4]: 08abd2c594da070c -Block 0014 [ 5]: 24cce834cf67ad28 -Block 0014 [ 6]: 1b09c6978feb2fc9 -Block 0014 [ 7]: ee90c0baca774d1a -Block 0014 [ 8]: 3708f4a4039a19eb -Block 0014 [ 9]: 0d496aa6634c2540 -Block 0014 [ 10]: 6bc152a0b15b3a2b -Block 0014 [ 11]: d10bfad6b4b43f2c -Block 0014 [ 12]: e96e477855119ddc -Block 0014 [ 13]: 1a544b91b3ce7fbc -Block 0014 [ 14]: cafc0eb55c122d6f -Block 0014 [ 15]: 037d2bc2a0f7530a -Block 0014 [ 16]: 95c2dd7aff0844be -Block 0014 [ 17]: 585ab21fe56d6e98 -Block 0014 [ 18]: 5b904ca8d183d28a -Block 0014 [ 19]: a2448fed9c557e8f -Block 0014 [ 20]: bc185e3656899faa -Block 0014 [ 21]: f4c474da33d146bb -Block 0014 [ 22]: 909b452e8713fe6f -Block 0014 [ 23]: cd9d52c628288b86 -Block 0014 [ 24]: 61e30da08cc69ad7 -Block 0014 [ 25]: 05e27f3a2c9cab56 -Block 0014 [ 26]: 4f6ce1ac6e1ae127 -Block 0014 [ 27]: a8f7e36d3e33f1f3 -Block 0014 [ 28]: b71335ed65487cce -Block 0014 [ 29]: 6ab069bebe4243a7 -Block 0014 [ 30]: 619ede30c4ef2624 -Block 0014 [ 31]: 692a41b133b0675f -Block 0014 [ 32]: 00215d331c4ce791 -Block 0014 [ 33]: f80accc7ba9eacd3 -Block 0014 [ 34]: 66c0e64361080502 -Block 0014 [ 35]: 561863112c28976f -Block 0014 [ 36]: 38d087594c680141 -Block 0014 [ 37]: 3fa2c7b0be344d66 -Block 0014 [ 38]: f3f51a71ee9ca468 -Block 0014 [ 39]: 95f467cf50cc8fc3 -Block 0014 [ 40]: d4a888b561d86fb0 -Block 0014 [ 41]: de87bb7e76a0dd0a -Block 0014 [ 42]: 61a14fb5723e3c91 -Block 0014 [ 43]: bfeb22754475e5e8 -Block 0014 [ 44]: f0b89172e3f1bc5b -Block 0014 [ 45]: d98d5b096ea38b76 -Block 0014 [ 46]: b6b790d56ab53d4c -Block 0014 [ 47]: 5ffd1be544675851 -Block 0014 [ 48]: 87b87fa919bd7fa7 -Block 0014 [ 49]: c478617f8f272678 -Block 0014 [ 50]: fb8fe0c3f64a0ccf -Block 0014 [ 51]: 8b551243e6d9382d -Block 0014 [ 52]: e1f38e5d1b03713e -Block 0014 [ 53]: e745fd4b6020c5f6 -Block 0014 [ 54]: 16f084e01fbc7f76 -Block 0014 [ 55]: fb9d312f55c899d4 -Block 0014 [ 56]: 380ceef8173536a8 -Block 0014 [ 57]: ed8d72a941db2c19 -Block 0014 [ 58]: 4002123ba862890e -Block 0014 [ 59]: 8a04fb41a64f5768 -Block 0014 [ 60]: fc1e9a8656875926 -Block 0014 [ 61]: f786b160707ffa14 -Block 0014 [ 62]: 987cf0bd188183ec -Block 0014 [ 63]: dcf2fe8c41728578 -Block 0014 [ 64]: f7e5aca070f4b430 -Block 0014 [ 65]: 96eb8b8b4d8cf4c8 -Block 0014 [ 66]: 866d2f63f3029682 -Block 0014 [ 67]: 2047180121f91c40 -Block 0014 [ 68]: 348ef39663476deb -Block 0014 [ 69]: fac01230e6089aba -Block 0014 [ 70]: 89f17de15e72ebe2 -Block 0014 [ 71]: 36e1d38205fa23f2 -Block 0014 [ 72]: 29faa8623e80e6ae -Block 0014 [ 73]: 76a33f8dc35f3290 -Block 0014 [ 74]: 1937ab138d449122 -Block 0014 [ 75]: e2aa81e221944c31 -Block 0014 [ 76]: fae8a6eab442f6af -Block 0014 [ 77]: 96a75c5ecae96184 -Block 0014 [ 78]: bbba5f15491b96a7 -Block 0014 [ 79]: 3dac0a6277186f87 -Block 0014 [ 80]: 2d026ceb7958bc42 -Block 0014 [ 81]: 2f5fcb9728eb62ce -Block 0014 [ 82]: 555e861c60727892 -Block 0014 [ 83]: 75daea44d6cbaa81 -Block 0014 [ 84]: b24c44f14fc25965 -Block 0014 [ 85]: 857b89408e44d277 -Block 0014 [ 86]: eca4d2d1efa199a3 -Block 0014 [ 87]: 33088d7ed812412e -Block 0014 [ 88]: 0263a5d914d3b296 -Block 0014 [ 89]: 83a093e24510f6f6 -Block 0014 [ 90]: aa67ef4b716938f7 -Block 0014 [ 91]: 6e7b4232ff800496 -Block 0014 [ 92]: 4297489b99c5964b -Block 0014 [ 93]: 9153dd490c532185 -Block 0014 [ 94]: 103733d2498559da -Block 0014 [ 95]: 36fac0d23f9ea533 -Block 0014 [ 96]: d736564ae0dda60d -Block 0014 [ 97]: abed530c0d96db44 -Block 0014 [ 98]: 266962ee099dcd61 -Block 0014 [ 99]: 6f3940d172461d85 -Block 0014 [100]: 731737d40a0b355f -Block 0014 [101]: f72f0c4d4441d25c -Block 0014 [102]: bec49deeb8ef1984 -Block 0014 [103]: d0859ff42db3710e -Block 0014 [104]: 99ff2ce81eb466c5 -Block 0014 [105]: ee5306c14d628890 -Block 0014 [106]: 40ea0b4fd6716f3d -Block 0014 [107]: b7c4ac4c8d4332a9 -Block 0014 [108]: a597ac3013e292c7 -Block 0014 [109]: da6fbb8fcc6b97a1 -Block 0014 [110]: f10c43f6c9e5ccd3 -Block 0014 [111]: 5b47d9496ff528ed -Block 0014 [112]: 91acaa483333c642 -Block 0014 [113]: 1ad7706921b3b8a9 -Block 0014 [114]: d9d2b9b18576072e -Block 0014 [115]: 210a8f3abe9db6b5 -Block 0014 [116]: ca41fc26bb135d0a -Block 0014 [117]: 384e457b4d13f8d8 -Block 0014 [118]: de698e11114e709d -Block 0014 [119]: 816dd5eebeca22c8 -Block 0014 [120]: 239a7c8bb28894fd -Block 0014 [121]: 6aba2b3bed305bdd -Block 0014 [122]: 668ccac32780f6e0 -Block 0014 [123]: 021c76c0b0d47e7f -Block 0014 [124]: 4b5939ee4c221e0f -Block 0014 [125]: e80bcb585f7ccc31 -Block 0014 [126]: 684c34269fa69d57 -Block 0014 [127]: 6051e4b2d171b880 -Block 0015 [ 0]: 923f88bc8b5c3f52 -Block 0015 [ 1]: 578d8d59d1604075 -Block 0015 [ 2]: 8db95b3e67603af3 -Block 0015 [ 3]: aeea5af3a1f5ebe4 -Block 0015 [ 4]: 669c71c88c1b0c60 -Block 0015 [ 5]: 03f5e673d2527562 -Block 0015 [ 6]: b0848a843a9482bb -Block 0015 [ 7]: afbb02cefb95a4d7 -Block 0015 [ 8]: b7e5388eeb15745d -Block 0015 [ 9]: 588e578329ef8f4e -Block 0015 [ 10]: 2caddb62b1e9c5d6 -Block 0015 [ 11]: 3303a6fbc816f592 -Block 0015 [ 12]: 16737e3f4ed44a71 -Block 0015 [ 13]: a8b076096115662b -Block 0015 [ 14]: 16647f89bd24e716 -Block 0015 [ 15]: d0f259b51d08173f -Block 0015 [ 16]: a5927a2b6b3cf0cf -Block 0015 [ 17]: 3dbd0814a2f17812 -Block 0015 [ 18]: b79afd45fff6c5e5 -Block 0015 [ 19]: 03d017c92f2dcf22 -Block 0015 [ 20]: bf6ec040d37e2e9e -Block 0015 [ 21]: a701255712aec166 -Block 0015 [ 22]: a270f973b6012ccc -Block 0015 [ 23]: a1567cbeec8ddabc -Block 0015 [ 24]: d7c5214c306eae0d -Block 0015 [ 25]: aaec001997c49c8a -Block 0015 [ 26]: cbb52fa37bfd7250 -Block 0015 [ 27]: f7995bb6508a5700 -Block 0015 [ 28]: bd8a678f71474623 -Block 0015 [ 29]: 8452544953085607 -Block 0015 [ 30]: ceae2bf6b80a08a0 -Block 0015 [ 31]: fab325a1606b95b7 -Block 0015 [ 32]: c60c406dc5bc8cf0 -Block 0015 [ 33]: d341ebfa38d4f533 -Block 0015 [ 34]: 29952b959eb7a7cf -Block 0015 [ 35]: 2435ccdb02c1647b -Block 0015 [ 36]: d4d48fdfd42fc50c -Block 0015 [ 37]: 33894bd3e7a843a6 -Block 0015 [ 38]: 931856766f61418f -Block 0015 [ 39]: 155b15cb5f31088a -Block 0015 [ 40]: 36e19042006d6ae4 -Block 0015 [ 41]: 26902564c5616d2d -Block 0015 [ 42]: 3d871267705f550e -Block 0015 [ 43]: 468c267fda5c995e -Block 0015 [ 44]: 0419b87d2e3443a1 -Block 0015 [ 45]: b379cb451c29225f -Block 0015 [ 46]: 15e1d708a734946c -Block 0015 [ 47]: 9457cc9185579480 -Block 0015 [ 48]: ab504b97cc71044e -Block 0015 [ 49]: c63d7adb7bda6984 -Block 0015 [ 50]: 630b7c072eb9859a -Block 0015 [ 51]: c242e7abbe745fb5 -Block 0015 [ 52]: 2b33e28cdde69822 -Block 0015 [ 53]: 5790e885c8928ec9 -Block 0015 [ 54]: b9dc2d755ec7ce01 -Block 0015 [ 55]: 163c9515259b0cc0 -Block 0015 [ 56]: 106cc0c8480f9779 -Block 0015 [ 57]: 2ba3947ecac1e765 -Block 0015 [ 58]: 9d447f56b9396f2e -Block 0015 [ 59]: 89f3ce4303d2d00a -Block 0015 [ 60]: 9a078e49f2a8274b -Block 0015 [ 61]: 81387c0c5d7360e0 -Block 0015 [ 62]: 78682bf4c2a1ed78 -Block 0015 [ 63]: f84c95533b6aee11 -Block 0015 [ 64]: 580a5a9f3738e4f8 -Block 0015 [ 65]: c8d7f364e82ad3de -Block 0015 [ 66]: 5875aba510ec2da2 -Block 0015 [ 67]: 88478a8b3b59dcea -Block 0015 [ 68]: 01547ea51866c827 -Block 0015 [ 69]: afc771726e09e872 -Block 0015 [ 70]: f26b84f1b29a9348 -Block 0015 [ 71]: 303d359c7983a4d8 -Block 0015 [ 72]: eed535f30aefb0e3 -Block 0015 [ 73]: b35dac44826075af -Block 0015 [ 74]: 9ca73ef717f6088d -Block 0015 [ 75]: 35cd92ec0fc882ba -Block 0015 [ 76]: f1cf7a2fb713126f -Block 0015 [ 77]: 6969c74bb3141567 -Block 0015 [ 78]: 9d334636658af1df -Block 0015 [ 79]: 6150b2c859b234f3 -Block 0015 [ 80]: d037be4342803988 -Block 0015 [ 81]: f0da5e16bba7397f -Block 0015 [ 82]: 3790c5cdec48ad9b -Block 0015 [ 83]: 93242fd303780d00 -Block 0015 [ 84]: 2fa1418df86105d7 -Block 0015 [ 85]: 0a44dd03fa02f75b -Block 0015 [ 86]: d48a3861b1e3a969 -Block 0015 [ 87]: 65fd27ced6dc8d8a -Block 0015 [ 88]: b8d911426f028ffe -Block 0015 [ 89]: 3cb6290c59a92c01 -Block 0015 [ 90]: df4bef9b8bb44949 -Block 0015 [ 91]: 4e4b57b894398fde -Block 0015 [ 92]: b55bbdb66340f7fd -Block 0015 [ 93]: 97a871f202f9ce22 -Block 0015 [ 94]: 6be3274e3c7061ad -Block 0015 [ 95]: e251e778d2c93834 -Block 0015 [ 96]: 70c4773d57021e1e -Block 0015 [ 97]: 798995170b281ec9 -Block 0015 [ 98]: f52ff5999ad3eb1e -Block 0015 [ 99]: a237d0e96b97782b -Block 0015 [100]: 1b7c02de9a73e9a9 -Block 0015 [101]: 1ee14242dd56c19c -Block 0015 [102]: 2487022c07200707 -Block 0015 [103]: 0921886a5777e70b -Block 0015 [104]: 3f0efb8959d4b9bf -Block 0015 [105]: 84e1a5aa909ff0f3 -Block 0015 [106]: 1ebf8bb3129f68d1 -Block 0015 [107]: f9b9c60235424d48 -Block 0015 [108]: 76a095cb8fbb24db -Block 0015 [109]: 99db66cf266191e9 -Block 0015 [110]: 66c87dc70f5d5ba8 -Block 0015 [111]: f7444d7763b939e1 -Block 0015 [112]: 858d7c9b41041901 -Block 0015 [113]: 1e89ff599a30d4e1 -Block 0015 [114]: f2f8685605d12f90 -Block 0015 [115]: 099ed67176ce729d -Block 0015 [116]: 8173bec3b6783e38 -Block 0015 [117]: db8b13db63f43ee8 -Block 0015 [118]: 4384ccd8d151b2ca -Block 0015 [119]: a29fbce4bd7b522d -Block 0015 [120]: 8c88929d17922135 -Block 0015 [121]: 3165fa6c0833ba1d -Block 0015 [122]: 02d6b259de6986fe -Block 0015 [123]: 488a4f9ac7f2b3e4 -Block 0015 [124]: 066aa29e0239ad1a -Block 0015 [125]: eefaf94deba147e8 -Block 0015 [126]: 81a56974feab366b -Block 0015 [127]: 0cf0d0f0e9684b43 -Block 0016 [ 0]: a58755fd5aba14e1 -Block 0016 [ 1]: 4bba15d271ff7b86 -Block 0016 [ 2]: 2af24b430abe13dd -Block 0016 [ 3]: fdfc62a4a6465f25 -Block 0016 [ 4]: 0110b3c714fa6324 -Block 0016 [ 5]: 44eaab03c972e7c5 -Block 0016 [ 6]: bab5296e3e127f16 -Block 0016 [ 7]: 221dd2a707de8136 -Block 0016 [ 8]: bae66312a437d33c -Block 0016 [ 9]: 41b70180f3c522cc -Block 0016 [ 10]: 01d87bb602992349 -Block 0016 [ 11]: fa9ec46adc863906 -Block 0016 [ 12]: 55236bf04fcec435 -Block 0016 [ 13]: c2b853f237529a47 -Block 0016 [ 14]: b1b2b7599d8d3389 -Block 0016 [ 15]: 50e07c48ec97fafc -Block 0016 [ 16]: efbc4a65ee24334c -Block 0016 [ 17]: e65f79b3c431511f -Block 0016 [ 18]: 83e3c9ff15b0ad16 -Block 0016 [ 19]: ff122406db689e4d -Block 0016 [ 20]: f724e24cd66a82ba -Block 0016 [ 21]: e96fa8228fe49099 -Block 0016 [ 22]: 1ebcf3357fa22834 -Block 0016 [ 23]: 8706c397861d4952 -Block 0016 [ 24]: d7d2622673c4f5fb -Block 0016 [ 25]: acd59a1abf98b00a -Block 0016 [ 26]: a80d7e6af7bcdd24 -Block 0016 [ 27]: 95e87ac9fd9082fc -Block 0016 [ 28]: e0f922992d427fbb -Block 0016 [ 29]: e67de2dece52c91c -Block 0016 [ 30]: 2353af574cc5d73a -Block 0016 [ 31]: 351ea23270c34b97 -Block 0016 [ 32]: a66303a5404984ed -Block 0016 [ 33]: 62502bd41ad3c8ea -Block 0016 [ 34]: bc0818e328e16211 -Block 0016 [ 35]: 1830d7f7a26ad737 -Block 0016 [ 36]: 0e2e1872ef33a31a -Block 0016 [ 37]: e07e2056add9fe1d -Block 0016 [ 38]: cecb5b5225a9d577 -Block 0016 [ 39]: 211cac8b11c45352 -Block 0016 [ 40]: f650fd25271b9c5a -Block 0016 [ 41]: 4a010b0f77e26da8 -Block 0016 [ 42]: 1f6f7df490099b1b -Block 0016 [ 43]: 36022d365802f027 -Block 0016 [ 44]: e35a379738a296e5 -Block 0016 [ 45]: 6491f8b4a212791c -Block 0016 [ 46]: b2d54c7989b5b0c1 -Block 0016 [ 47]: a0a7315c0eb890eb -Block 0016 [ 48]: 940c2febc8456f00 -Block 0016 [ 49]: afe584e0974acadc -Block 0016 [ 50]: 0237152efebb2203 -Block 0016 [ 51]: 519b38e94ad527c9 -Block 0016 [ 52]: 9e499dfc5a979151 -Block 0016 [ 53]: 45cbafa954f7b16f -Block 0016 [ 54]: 71124a4a9b161aee -Block 0016 [ 55]: b380225a3fc8298f -Block 0016 [ 56]: b8515b64f5e35d14 -Block 0016 [ 57]: 82d8b9dbe548ccd5 -Block 0016 [ 58]: 24c4387c54c4d022 -Block 0016 [ 59]: 850905f5110be9e8 -Block 0016 [ 60]: f8c0e31453bcb207 -Block 0016 [ 61]: 8a251ccea3671489 -Block 0016 [ 62]: ae373b1f897efb7f -Block 0016 [ 63]: ac8d3162c76d1c2c -Block 0016 [ 64]: 0d11769e3e5db3f2 -Block 0016 [ 65]: 02b25c0908ce43e4 -Block 0016 [ 66]: e61e2f849cec89d4 -Block 0016 [ 67]: d52c8897b2f3d019 -Block 0016 [ 68]: 75a7a2ae83d80ae6 -Block 0016 [ 69]: 9f18bcbdc9f84991 -Block 0016 [ 70]: e517fce50ccfd1e9 -Block 0016 [ 71]: 980bc68313152f3f -Block 0016 [ 72]: 4eee0692b9465b9d -Block 0016 [ 73]: 3d2e94a50e49e795 -Block 0016 [ 74]: 7943364021b4fea2 -Block 0016 [ 75]: bd284dd3f7ad94c7 -Block 0016 [ 76]: 8221ee08403f3e10 -Block 0016 [ 77]: a40cc63f8c9de094 -Block 0016 [ 78]: 6e6f2f7d80d7d21e -Block 0016 [ 79]: 91c0201f23fd6e6c -Block 0016 [ 80]: 8ed2b314946e622b -Block 0016 [ 81]: dd48c6c2a1d335d4 -Block 0016 [ 82]: 41ee6f41ab208bf2 -Block 0016 [ 83]: 31a77119b6432a9c -Block 0016 [ 84]: 1b2cafacf9b54382 -Block 0016 [ 85]: 5eebbe897674fa7a -Block 0016 [ 86]: b73ac43a8686afc1 -Block 0016 [ 87]: 1f18f754b7db2092 -Block 0016 [ 88]: 186a7e1729c70dd8 -Block 0016 [ 89]: b7bf5151c6cf12bc -Block 0016 [ 90]: a31c2209f7d6c042 -Block 0016 [ 91]: e4db5452b81a01a7 -Block 0016 [ 92]: e73013b5645ff098 -Block 0016 [ 93]: a72bcbd72ec7b4b5 -Block 0016 [ 94]: d210d34e4b8e4532 -Block 0016 [ 95]: 09ee1b5d61bce6c2 -Block 0016 [ 96]: 86b41575fd474119 -Block 0016 [ 97]: 75be5fc8ece614b5 -Block 0016 [ 98]: 96e9e61dee37c9c5 -Block 0016 [ 99]: 994b01e9f1345ba2 -Block 0016 [100]: e80cc816ade968fc -Block 0016 [101]: b6484de03360d188 -Block 0016 [102]: 1b5c090b15e4c7c0 -Block 0016 [103]: 81d0ca62028f558e -Block 0016 [104]: 1b888c6c14f4bad0 -Block 0016 [105]: 7eb7c64e6674cc77 -Block 0016 [106]: 27823d303ac7ab60 -Block 0016 [107]: 9bd5fc1e140bea6a -Block 0016 [108]: d3d5b0ec1bcc3af2 -Block 0016 [109]: a36ec3bae283e8c0 -Block 0016 [110]: a7ff28d89cdd37b1 -Block 0016 [111]: 10177e9779913f70 -Block 0016 [112]: e9cd34aca1c47853 -Block 0016 [113]: cd309025c34ee78c -Block 0016 [114]: 4b8ffe18a3795079 -Block 0016 [115]: 5739338964cdf1b6 -Block 0016 [116]: e12aa70c2d91e4e5 -Block 0016 [117]: 618f77eeb7756c59 -Block 0016 [118]: a2f6ed98f55b12db -Block 0016 [119]: 7b7c4a38542aa6e7 -Block 0016 [120]: 3de134f1ba20445f -Block 0016 [121]: 7e2d2dc86a558720 -Block 0016 [122]: 5d239acb1ace723f -Block 0016 [123]: 57a5a103088725d5 -Block 0016 [124]: 3d4216b97e1d53fd -Block 0016 [125]: 8e2a754bad98d6fa -Block 0016 [126]: a4a1b2c34a1e2235 -Block 0016 [127]: a893790880d4e4af -Block 0017 [ 0]: 6a568b087362d599 -Block 0017 [ 1]: f4d0b004b7cfb215 -Block 0017 [ 2]: 24a403b15457faf9 -Block 0017 [ 3]: 7d6970151918144c -Block 0017 [ 4]: af8a64ff39a95eae -Block 0017 [ 5]: 13595c675e901bbe -Block 0017 [ 6]: c813ac2e1400d481 -Block 0017 [ 7]: 4e2af4e6504acfe0 -Block 0017 [ 8]: d488199a10e3c70e -Block 0017 [ 9]: f0621ceecae39807 -Block 0017 [ 10]: c37349a0628508cb -Block 0017 [ 11]: 00a2ca683ec5d0ff -Block 0017 [ 12]: b3d531564dffb295 -Block 0017 [ 13]: 96707bff9634dffe -Block 0017 [ 14]: bfd49981867297ca -Block 0017 [ 15]: 2795dbda22feda25 -Block 0017 [ 16]: 2a5b8637c6281074 -Block 0017 [ 17]: 18ec37929c342379 -Block 0017 [ 18]: c5e6f284b4821ac9 -Block 0017 [ 19]: 1ece865da7d295ed -Block 0017 [ 20]: e6b4925e308e6c53 -Block 0017 [ 21]: 5fb9738e778c653f -Block 0017 [ 22]: 19c8799cf625c2e6 -Block 0017 [ 23]: 407f2e253c3af503 -Block 0017 [ 24]: c062e4fb2bb75df6 -Block 0017 [ 25]: c9d993dbf3164d9d -Block 0017 [ 26]: d0f246dc1158028c -Block 0017 [ 27]: d1a0f91ccf9fcc7f -Block 0017 [ 28]: e97b91e45fce6044 -Block 0017 [ 29]: 7bc62e06a2248cf4 -Block 0017 [ 30]: c281b558f2f173c7 -Block 0017 [ 31]: 6548c47523b7b599 -Block 0017 [ 32]: c8af3c342b29b9ba -Block 0017 [ 33]: 0ee797539b104687 -Block 0017 [ 34]: 05b4ae0694f8472f -Block 0017 [ 35]: ec28f954ce73d75b -Block 0017 [ 36]: 956f6450c1306ae2 -Block 0017 [ 37]: e724ccd7925f9f45 -Block 0017 [ 38]: 0ed70803fc818da5 -Block 0017 [ 39]: b572f98a6f8a7408 -Block 0017 [ 40]: e93f48a2b46521ca -Block 0017 [ 41]: 0ebdc3c0b4a01fce -Block 0017 [ 42]: 1ec3dc824a30c790 -Block 0017 [ 43]: eee337efed2704ef -Block 0017 [ 44]: e801fa17db118356 -Block 0017 [ 45]: c20c79e85d2d88fa -Block 0017 [ 46]: 53359a3630c47888 -Block 0017 [ 47]: aee440b14a6c2c65 -Block 0017 [ 48]: 7cc5eae37cb7130e -Block 0017 [ 49]: 5641a3381f4bd0b5 -Block 0017 [ 50]: ada41bdbe746d269 -Block 0017 [ 51]: 22c263b7a9cedb8d -Block 0017 [ 52]: ada822e4bb4dfc81 -Block 0017 [ 53]: d91077f9e2b69e6c -Block 0017 [ 54]: 9dda916a85e71ba0 -Block 0017 [ 55]: 34c6398e727921de -Block 0017 [ 56]: 656e3e5b64f11348 -Block 0017 [ 57]: bf722197a87a9e52 -Block 0017 [ 58]: 3412696cf67a0536 -Block 0017 [ 59]: 61afa66a68537b17 -Block 0017 [ 60]: b81c87fc04ae41db -Block 0017 [ 61]: 2006797527ace218 -Block 0017 [ 62]: cdf9ed1a65c5523a -Block 0017 [ 63]: 81bfcdc44b341b2a -Block 0017 [ 64]: f8dfcaa6a6ed8007 -Block 0017 [ 65]: c9780e1c6c00a316 -Block 0017 [ 66]: 39569b0ad9ecf7bb -Block 0017 [ 67]: 369c5f6bf36daf32 -Block 0017 [ 68]: 2ef698ce1aabd3df -Block 0017 [ 69]: 5a3c9c147d106e0c -Block 0017 [ 70]: 6058270a1c6223b2 -Block 0017 [ 71]: 3e8ff7df68b29d00 -Block 0017 [ 72]: 0b2f4f395130e03c -Block 0017 [ 73]: 6ff710b6c6a86c61 -Block 0017 [ 74]: c16f6cc4ad8cfb65 -Block 0017 [ 75]: 759be4c5c0300c9a -Block 0017 [ 76]: dcae568becb44d58 -Block 0017 [ 77]: 4033bfa7607e6be6 -Block 0017 [ 78]: b445e7f3dbdef860 -Block 0017 [ 79]: ed0713c8f7d26751 -Block 0017 [ 80]: c84474035912a985 -Block 0017 [ 81]: 736f9184cdaa51f0 -Block 0017 [ 82]: ca0200924a6c76ba -Block 0017 [ 83]: d2e7fa645197c8e7 -Block 0017 [ 84]: 684cff2a784c969a -Block 0017 [ 85]: a81dbbbd245b5e1d -Block 0017 [ 86]: ed7a637fa3edc4b5 -Block 0017 [ 87]: 5f633a937e8ac431 -Block 0017 [ 88]: d25f821a1705e8f7 -Block 0017 [ 89]: d70c4299eb339515 -Block 0017 [ 90]: eff333ecf0353a1a -Block 0017 [ 91]: f401acd34391980f -Block 0017 [ 92]: 0295ac459f82e8c7 -Block 0017 [ 93]: 8b3ad6255b4780f7 -Block 0017 [ 94]: d2e7679d3ab1059d -Block 0017 [ 95]: 113876dd59c72996 -Block 0017 [ 96]: 17402099db10b612 -Block 0017 [ 97]: 0b01e2395ce384ba -Block 0017 [ 98]: 6bf5bb488801618b -Block 0017 [ 99]: 478b5a50bc3a2c4e -Block 0017 [100]: 0691aed65eefc1cb -Block 0017 [101]: 26ca3fad5466834e -Block 0017 [102]: 13113afc925a6817 -Block 0017 [103]: aa0e3ed28b3748e2 -Block 0017 [104]: b05cab417dac8424 -Block 0017 [105]: 0d6e4d86a0c912f7 -Block 0017 [106]: 9296ffd1c9e73921 -Block 0017 [107]: 1e03c605386af466 -Block 0017 [108]: 91cb867eeda11be3 -Block 0017 [109]: 3f1d5547f2c285c5 -Block 0017 [110]: 5a44678b78e7f616 -Block 0017 [111]: e5c07179aa7f608c -Block 0017 [112]: 083d0125aef8a233 -Block 0017 [113]: 179fd2d54fd4b257 -Block 0017 [114]: 7317cfd85758e269 -Block 0017 [115]: a21a270edc02b12e -Block 0017 [116]: 1a91dea7cd6e3221 -Block 0017 [117]: 55e99b07ffbeb71b -Block 0017 [118]: 5d6602f3d5351f15 -Block 0017 [119]: 1ddeb23652a7e470 -Block 0017 [120]: 41f0237d9948fc2d -Block 0017 [121]: 5ff55d244a864d70 -Block 0017 [122]: 8a6286abb55ce32f -Block 0017 [123]: f43c75e4d707e357 -Block 0017 [124]: 0b4c2b087242ca7c -Block 0017 [125]: 004f4ad50e58ac07 -Block 0017 [126]: 8648d433233bb2f5 -Block 0017 [127]: ee0bb08cd06e652f -Block 0018 [ 0]: 74bf48c25eaede69 -Block 0018 [ 1]: 0400a05f89a28857 -Block 0018 [ 2]: 0ab09e32a93bef73 -Block 0018 [ 3]: 05057d01ce0ef39f -Block 0018 [ 4]: 5c7978beb2277bb5 -Block 0018 [ 5]: a5d253e71f9ccae2 -Block 0018 [ 6]: c1f315aa6f3e9f74 -Block 0018 [ 7]: e72ff5afa533a4d4 -Block 0018 [ 8]: ecb3208c2142c54a -Block 0018 [ 9]: 0e2f949b8ee280ca -Block 0018 [ 10]: 7e3c92a4356588c0 -Block 0018 [ 11]: 9964e66e407bf3df -Block 0018 [ 12]: db714a9185258f27 -Block 0018 [ 13]: e65e22001dc81e32 -Block 0018 [ 14]: 90d8961c9c3756c7 -Block 0018 [ 15]: e2591928d215597e -Block 0018 [ 16]: c73cf20184efb1bc -Block 0018 [ 17]: 4f1a1044384c6f4f -Block 0018 [ 18]: 7e6b458e6fb0da22 -Block 0018 [ 19]: 8643245d817c7fbb -Block 0018 [ 20]: 11fdba7a2f78305b -Block 0018 [ 21]: f83ea63c173e06b1 -Block 0018 [ 22]: 9c7a045abe8c90a8 -Block 0018 [ 23]: b36c2a3626317afa -Block 0018 [ 24]: 3a44cafe43247699 -Block 0018 [ 25]: 0a141875b2a3608e -Block 0018 [ 26]: fcff57382918c295 -Block 0018 [ 27]: 8953eebab5b47e2b -Block 0018 [ 28]: 304750d888f8cf36 -Block 0018 [ 29]: 7eda590b3eecc804 -Block 0018 [ 30]: 65387915616d50d9 -Block 0018 [ 31]: 3227c1b6926315ea -Block 0018 [ 32]: b66da09195679368 -Block 0018 [ 33]: 5d3680c936733dc9 -Block 0018 [ 34]: 787cb30e129ab8bf -Block 0018 [ 35]: d356deaf9969ecd8 -Block 0018 [ 36]: e1cbceb0c6301fec -Block 0018 [ 37]: b65960ffae6c48c7 -Block 0018 [ 38]: 26a3712c2c111301 -Block 0018 [ 39]: 3579927152608c6a -Block 0018 [ 40]: ee4ca14008db9e5a -Block 0018 [ 41]: 012d00b0c4f6d234 -Block 0018 [ 42]: fe0f71ad0c37f2c5 -Block 0018 [ 43]: 63278fe0caa8ae1b -Block 0018 [ 44]: a304e7cadc483280 -Block 0018 [ 45]: f05f6bd6733075d4 -Block 0018 [ 46]: 534f8814741a4e0f -Block 0018 [ 47]: 8c21885188289bbb -Block 0018 [ 48]: d84ae9b0b404d205 -Block 0018 [ 49]: b3bc7c1e0afb6704 -Block 0018 [ 50]: 12c688be5d993b2e -Block 0018 [ 51]: aba988c6fc3bdb09 -Block 0018 [ 52]: 19b70cbd0d319bca -Block 0018 [ 53]: a51c29abe752369f -Block 0018 [ 54]: 4b0c55f1078c21b6 -Block 0018 [ 55]: ec9469aa4c1641e5 -Block 0018 [ 56]: dce1e647f70717c8 -Block 0018 [ 57]: c0887888f6060dd7 -Block 0018 [ 58]: 62af261baa0346ef -Block 0018 [ 59]: 3791ff08130c2ec5 -Block 0018 [ 60]: 40db56c530ff4828 -Block 0018 [ 61]: ad33136573457d2d -Block 0018 [ 62]: 4798cf53b26c7995 -Block 0018 [ 63]: bec038a566ee052f -Block 0018 [ 64]: 28fea35a44a8ad77 -Block 0018 [ 65]: 87922d63a04a7714 -Block 0018 [ 66]: 9fd1568b3961a755 -Block 0018 [ 67]: b814da74cb12e514 -Block 0018 [ 68]: 1e27e85db17b9b89 -Block 0018 [ 69]: 792060548ca6833f -Block 0018 [ 70]: 7f2633d664ef5ae0 -Block 0018 [ 71]: 93141a17f55c38d6 -Block 0018 [ 72]: c425ffa62860b3c4 -Block 0018 [ 73]: 126d931e23550e3a -Block 0018 [ 74]: f564b0e7a0fecec7 -Block 0018 [ 75]: 04fa1b585c310f79 -Block 0018 [ 76]: 61a14482bfc01919 -Block 0018 [ 77]: d63d6673e239bab0 -Block 0018 [ 78]: 98497f450519caf4 -Block 0018 [ 79]: 77a388d80ef61859 -Block 0018 [ 80]: afb4830ccf82147c -Block 0018 [ 81]: 56c5184493808a78 -Block 0018 [ 82]: 61b0745753eb147a -Block 0018 [ 83]: f3dc622060ceeddb -Block 0018 [ 84]: 2c16e6a7f4f85a80 -Block 0018 [ 85]: b5a812a2eaa530ce -Block 0018 [ 86]: 7355aec5721f7c5a -Block 0018 [ 87]: c8ad08d26497df3b -Block 0018 [ 88]: 8e0e0ca4e4e6a84b -Block 0018 [ 89]: 6574239609c73bee -Block 0018 [ 90]: 400d0a8a2958e233 -Block 0018 [ 91]: 0d12d5aaedfa7ee2 -Block 0018 [ 92]: ce01ba6a21f45b55 -Block 0018 [ 93]: 64fc77da92ebace2 -Block 0018 [ 94]: d94e61b2c96c1b88 -Block 0018 [ 95]: 46e4dff70fbb78e0 -Block 0018 [ 96]: 27e6ff694f3a7e44 -Block 0018 [ 97]: ba79e628d78eccdb -Block 0018 [ 98]: d3896748607f61f3 -Block 0018 [ 99]: 854a68e059d889e7 -Block 0018 [100]: 17cec322e53e3376 -Block 0018 [101]: e2a0da69fbe10025 -Block 0018 [102]: 125d98efed8be71b -Block 0018 [103]: 554a109e66331278 -Block 0018 [104]: 5f7d27d772887cf9 -Block 0018 [105]: 06666ff797d87c2b -Block 0018 [106]: 7a5e44a65427fbf1 -Block 0018 [107]: 3fefa1be4c489aaf -Block 0018 [108]: 031406bfb5cfdcf3 -Block 0018 [109]: d26b2c2a6f1a7bbe -Block 0018 [110]: 6fe546818e5f0997 -Block 0018 [111]: 05fbde7911b35967 -Block 0018 [112]: 922377a3eb2369cb -Block 0018 [113]: 754e283ffb70c99e -Block 0018 [114]: 3b7334104b59591c -Block 0018 [115]: cab8aeb7fc317a77 -Block 0018 [116]: f58d70ddb079d0af -Block 0018 [117]: 869d96630428ee86 -Block 0018 [118]: f792876a73b5557b -Block 0018 [119]: d95d44f60a27c85f -Block 0018 [120]: 1ce5feae87c3c213 -Block 0018 [121]: b5a536920eefc202 -Block 0018 [122]: b4b10901d5a76a60 -Block 0018 [123]: 37fec8e389f4692e -Block 0018 [124]: 3a2d7166807e2a10 -Block 0018 [125]: 97b37652df6d8c82 -Block 0018 [126]: c10e61a6454af63f -Block 0018 [127]: 7543572a7389b452 -Block 0019 [ 0]: 722ded4f56a565fb -Block 0019 [ 1]: 66f81b75a79a68f9 -Block 0019 [ 2]: 2ed3e3524e669534 -Block 0019 [ 3]: 3d0249646b4e5ceb -Block 0019 [ 4]: 23702f362b010609 -Block 0019 [ 5]: 66c14af9081b479c -Block 0019 [ 6]: fe76e828c7874bb5 -Block 0019 [ 7]: c9df351081f32a1a -Block 0019 [ 8]: f10f2645d1a94c61 -Block 0019 [ 9]: 8882d7a1ac2ebb6b -Block 0019 [ 10]: 60942a191d37a892 -Block 0019 [ 11]: 5d13500bcaf64c75 -Block 0019 [ 12]: e82b0f549cef7b8c -Block 0019 [ 13]: eaadf7ce53b92191 -Block 0019 [ 14]: 99bcb35755b3e095 -Block 0019 [ 15]: 37d06d28a2bc5920 -Block 0019 [ 16]: 96bfe103e6756fc6 -Block 0019 [ 17]: 9998b5c265a72545 -Block 0019 [ 18]: 2a19f9ad33a764f4 -Block 0019 [ 19]: 1f58324f51536c9d -Block 0019 [ 20]: cc1ed217c0b8fa81 -Block 0019 [ 21]: 8ddea022746359cb -Block 0019 [ 22]: 598c823a015eff37 -Block 0019 [ 23]: b61185018876e8d7 -Block 0019 [ 24]: a2c60b6f3af802e3 -Block 0019 [ 25]: f687430b8a1995e1 -Block 0019 [ 26]: 408885fd6d7e25e8 -Block 0019 [ 27]: b6c64003bb3f1fbf -Block 0019 [ 28]: 5685b41a4d53d6b8 -Block 0019 [ 29]: 4275961a2e03b3bf -Block 0019 [ 30]: ba8c2c7d52ce5eef -Block 0019 [ 31]: 4b7a2193a5a42fb6 -Block 0019 [ 32]: 82ef795089ef1b6b -Block 0019 [ 33]: b92848e62bb47aba -Block 0019 [ 34]: e3ada75122fc94c0 -Block 0019 [ 35]: c0100b3a7a64a3eb -Block 0019 [ 36]: 81a50e5cf971bfdf -Block 0019 [ 37]: 54b58468e7722c0d -Block 0019 [ 38]: 5be0ac9c0bbadf47 -Block 0019 [ 39]: 8bbc079daf10cd6c -Block 0019 [ 40]: c15bcc3683e366df -Block 0019 [ 41]: 8b5e324a9ed3f23f -Block 0019 [ 42]: 4aa03e81d768546d -Block 0019 [ 43]: fea6138015a2067f -Block 0019 [ 44]: 8c551c9fa08bc353 -Block 0019 [ 45]: abc876b122520670 -Block 0019 [ 46]: 2cd7558d5b3be7e0 -Block 0019 [ 47]: ccf6a4b816c33ec8 -Block 0019 [ 48]: baba433c49797864 -Block 0019 [ 49]: 197ede8f7c567203 -Block 0019 [ 50]: fae9d3460ac15df5 -Block 0019 [ 51]: f3adae0f64326ece -Block 0019 [ 52]: 6e528bdb47402901 -Block 0019 [ 53]: 2492762ac597d40a -Block 0019 [ 54]: 6ba4c5c3d5bb98f1 -Block 0019 [ 55]: cd54dbf31e0abbdc -Block 0019 [ 56]: 54a77ea4cd91551f -Block 0019 [ 57]: dbb8c88ac1eaa8c0 -Block 0019 [ 58]: f88ca1ca32f1e921 -Block 0019 [ 59]: 3cf0026636693684 -Block 0019 [ 60]: fe13df5cdc931e0e -Block 0019 [ 61]: 3e568d869926bfc6 -Block 0019 [ 62]: 12b1e4f3b127b510 -Block 0019 [ 63]: 9571189e9fc54658 -Block 0019 [ 64]: d8e0280cc71d7261 -Block 0019 [ 65]: 1414ad7e77dec5b5 -Block 0019 [ 66]: 9d50c531d4e3b1f1 -Block 0019 [ 67]: a837736eb0b178bf -Block 0019 [ 68]: c7c3f7c72c12f553 -Block 0019 [ 69]: 514e9b4b12844d0a -Block 0019 [ 70]: 099df6d12c31f66c -Block 0019 [ 71]: 6c6130e568dae72b -Block 0019 [ 72]: 026ffd1b61ef6c3f -Block 0019 [ 73]: 85efd65d354c2027 -Block 0019 [ 74]: 8d228ab3cc044105 -Block 0019 [ 75]: 3a7e4faeeccb8b06 -Block 0019 [ 76]: e1ead5f1b2a58f7c -Block 0019 [ 77]: 80e45edbc5b44843 -Block 0019 [ 78]: 417757c3dc6e2c89 -Block 0019 [ 79]: c5cef9b96a73f341 -Block 0019 [ 80]: d2d3360debbc854b -Block 0019 [ 81]: ea796d996d79773a -Block 0019 [ 82]: 43b9ec58d25ccb0d -Block 0019 [ 83]: 909a2980fafca057 -Block 0019 [ 84]: 957bbb801c361db5 -Block 0019 [ 85]: ce623364956f8eb1 -Block 0019 [ 86]: a9e1ea98da49fcfb -Block 0019 [ 87]: 084eb35a88326f27 -Block 0019 [ 88]: 80507bdf2e3a52c1 -Block 0019 [ 89]: 65e09bdedcdbfe26 -Block 0019 [ 90]: f9c5e870eab6e090 -Block 0019 [ 91]: 64c80b52255ace7e -Block 0019 [ 92]: cb9a1a29583766a7 -Block 0019 [ 93]: da6dbd5eb460785c -Block 0019 [ 94]: a78ad96bb297cb22 -Block 0019 [ 95]: 56f43ee98185b433 -Block 0019 [ 96]: 0be8bfd2f08db3c4 -Block 0019 [ 97]: 9a7df19eee797962 -Block 0019 [ 98]: b6846d0300b15563 -Block 0019 [ 99]: 2926611424a3c93a -Block 0019 [100]: 4e4bb76824d55a36 -Block 0019 [101]: 6390753096176e1b -Block 0019 [102]: b7fa767b6bfc44fb -Block 0019 [103]: d23a521d68c0cf75 -Block 0019 [104]: 51addd0e823b81ed -Block 0019 [105]: ec0627f8110db6a7 -Block 0019 [106]: db4f2d5cac87bd60 -Block 0019 [107]: 4c3cee848d16c717 -Block 0019 [108]: 7648ac62be70e5be -Block 0019 [109]: f5c6484cb942ac44 -Block 0019 [110]: b43fc27e9e6a4773 -Block 0019 [111]: b82a706ea829cb5b -Block 0019 [112]: 982b0c739e53385d -Block 0019 [113]: 1ebb4a34c10626c0 -Block 0019 [114]: 3e59c0dff3f1ec58 -Block 0019 [115]: 37a5c1a1a05f14ef -Block 0019 [116]: fe04a5fb0a9c8c3d -Block 0019 [117]: 736febc5e56a2aae -Block 0019 [118]: 01c6ae60f536f04c -Block 0019 [119]: 10ac08179e2a0a44 -Block 0019 [120]: 62eda4c56851c55a -Block 0019 [121]: 3655c086ab4dc453 -Block 0019 [122]: 6204a37f1668346b -Block 0019 [123]: d06115aa65a09d31 -Block 0019 [124]: cf4b6b55d0123805 -Block 0019 [125]: f205092073e33b99 -Block 0019 [126]: 33200ae2e1abaa05 -Block 0019 [127]: 44fc4dde9d1ebe43 -Block 0020 [ 0]: 41b07971e71a2e54 -Block 0020 [ 1]: 6f2089d15ada03ee -Block 0020 [ 2]: 6d0330debb1e1bc7 -Block 0020 [ 3]: 9d7ab01519234721 -Block 0020 [ 4]: b7183d6569ecf0b9 -Block 0020 [ 5]: 853a4e3facbc0533 -Block 0020 [ 6]: b06e176fa56954a7 -Block 0020 [ 7]: 27f4c2e2b2be4b39 -Block 0020 [ 8]: 33080d0850a86c1b -Block 0020 [ 9]: 2d8b3a453d3cbb50 -Block 0020 [ 10]: f4147219e8bcd1d4 -Block 0020 [ 11]: 430706f6860388f2 -Block 0020 [ 12]: 51c540fee2514f0d -Block 0020 [ 13]: 8ccdad415ea6ee66 -Block 0020 [ 14]: f520cd207b48edc6 -Block 0020 [ 15]: 87a9d3aba575a7ce -Block 0020 [ 16]: 210f9df0bc9e9108 -Block 0020 [ 17]: ee022c298f3942b6 -Block 0020 [ 18]: 9bc38103277c849c -Block 0020 [ 19]: c75db3f801f64ec0 -Block 0020 [ 20]: 2ae94ab7f9f8942f -Block 0020 [ 21]: a257534ac5235d94 -Block 0020 [ 22]: 188a094687c623a3 -Block 0020 [ 23]: d08168250ca805e3 -Block 0020 [ 24]: f3e4d78cf027612a -Block 0020 [ 25]: 392503cd6ae2f3b0 -Block 0020 [ 26]: 00a1bc98866892b4 -Block 0020 [ 27]: 52d5b875e04684e0 -Block 0020 [ 28]: 10eaadda403ba853 -Block 0020 [ 29]: 31fb34dee9418d93 -Block 0020 [ 30]: 19e4ab017f8d5d32 -Block 0020 [ 31]: 58154f814ce6de3b -Block 0020 [ 32]: 300d30a35d50ff55 -Block 0020 [ 33]: 5bc5a82f48804532 -Block 0020 [ 34]: 1b0f36ce4856deb0 -Block 0020 [ 35]: 825a2dbdb23e6f97 -Block 0020 [ 36]: 77966bdabcdbc0a5 -Block 0020 [ 37]: e4399601c93be292 -Block 0020 [ 38]: d8af3dc1dc33bf15 -Block 0020 [ 39]: 86ef6420ae6283cc -Block 0020 [ 40]: 455268aba83b61f2 -Block 0020 [ 41]: d2c002689ec6cfb7 -Block 0020 [ 42]: 2045ec9ab1b82eaa -Block 0020 [ 43]: f090b6215091285b -Block 0020 [ 44]: db2f72dbec97da20 -Block 0020 [ 45]: ad4d8b2ff8b2135e -Block 0020 [ 46]: a5b25c830e505d23 -Block 0020 [ 47]: a9faa876a6161e58 -Block 0020 [ 48]: 9aacdb2111fa9989 -Block 0020 [ 49]: 6f29852abb002e42 -Block 0020 [ 50]: 147df596b36eb419 -Block 0020 [ 51]: 70059f6668ce6269 -Block 0020 [ 52]: 7636a5a116415e7a -Block 0020 [ 53]: de880241472a104b -Block 0020 [ 54]: bcc7b804ee025dcd -Block 0020 [ 55]: 3b7ecef3fd470a6a -Block 0020 [ 56]: 6139fcff135af1a9 -Block 0020 [ 57]: 703ef43ec763d407 -Block 0020 [ 58]: edfa811c241aaab8 -Block 0020 [ 59]: 4505a1b1377c7490 -Block 0020 [ 60]: 017655ace5ef1544 -Block 0020 [ 61]: e65824ab647d2c63 -Block 0020 [ 62]: bbf0c4e392476d22 -Block 0020 [ 63]: 09222639f2e1b822 -Block 0020 [ 64]: 1b45cf3b00b6cb95 -Block 0020 [ 65]: 4550026be5fa7271 -Block 0020 [ 66]: c06ad1f579d397ea -Block 0020 [ 67]: 64af21038c5e7b8a -Block 0020 [ 68]: 5b20ab16b33f03b9 -Block 0020 [ 69]: e849677673c9f8a8 -Block 0020 [ 70]: 3fe654d05ce1ae5e -Block 0020 [ 71]: 5825aba0671ac6e7 -Block 0020 [ 72]: 426d8a7b658fae5e -Block 0020 [ 73]: 0b7c48925a17445d -Block 0020 [ 74]: cd814a10d3c250a9 -Block 0020 [ 75]: e1b89d7598c24c73 -Block 0020 [ 76]: 8fd426f1e17e74c5 -Block 0020 [ 77]: f5a5ee0f82556b39 -Block 0020 [ 78]: 493624eb4ef93c0e -Block 0020 [ 79]: aea2a200cbc14750 -Block 0020 [ 80]: 808720a7c98fe9ff -Block 0020 [ 81]: 38ef2a776caad830 -Block 0020 [ 82]: 03ebc1bc2b48add4 -Block 0020 [ 83]: e0b48d9257cffc58 -Block 0020 [ 84]: b65a3be5a325716c -Block 0020 [ 85]: 45978217eda2c997 -Block 0020 [ 86]: 733948d9a58f9ae9 -Block 0020 [ 87]: b7b731f51be4173a -Block 0020 [ 88]: 9b28a46c6801aefc -Block 0020 [ 89]: 3e7391b2e7dfcbe4 -Block 0020 [ 90]: 8ea972520400f578 -Block 0020 [ 91]: 91949581521e1e4b -Block 0020 [ 92]: 1d9aab7d0c9209c6 -Block 0020 [ 93]: 9e289a904e90a578 -Block 0020 [ 94]: c580ae13f3a13a7f -Block 0020 [ 95]: 0975acd1f64f31c2 -Block 0020 [ 96]: d880c8480b663a97 -Block 0020 [ 97]: b20a8a30f36969b2 -Block 0020 [ 98]: 494bbd11053ada9d -Block 0020 [ 99]: 6c5976a5348e6cf7 -Block 0020 [100]: 7f6c2e22a6603550 -Block 0020 [101]: a7fa0251004384bb -Block 0020 [102]: a7a22b9632283a45 -Block 0020 [103]: fc0986d873115470 -Block 0020 [104]: 71555418129d0b36 -Block 0020 [105]: 9e00a18a599c1fea -Block 0020 [106]: 6deaac74ca260a50 -Block 0020 [107]: e1c8fe4ef7a9de6d -Block 0020 [108]: 01171cb695ed590d -Block 0020 [109]: 47bb44260c897574 -Block 0020 [110]: 530fc16d6918e1b9 -Block 0020 [111]: e8df2c3b9139fd0b -Block 0020 [112]: 4cb5e096924f0984 -Block 0020 [113]: 027123d359f10fb0 -Block 0020 [114]: 55027b0c9f2435bd -Block 0020 [115]: 272d5f7961436e9c -Block 0020 [116]: e5b9d9a32412556f -Block 0020 [117]: 457880a2978e3c7d -Block 0020 [118]: 035359bb4cc2bf39 -Block 0020 [119]: 106c5417cb96c096 -Block 0020 [120]: 3873b238fbff0942 -Block 0020 [121]: 17ae8af56a1c42e0 -Block 0020 [122]: d1ba5b1140949f1f -Block 0020 [123]: e47d23a41498eb54 -Block 0020 [124]: 0c90f5bafd925619 -Block 0020 [125]: 9ea964113672b524 -Block 0020 [126]: 57728a9955920a13 -Block 0020 [127]: 35977a9645b06609 -Block 0021 [ 0]: 99c90699f26a1583 -Block 0021 [ 1]: d62506b1691ce83e -Block 0021 [ 2]: f95c5d44ea02239c -Block 0021 [ 3]: fcf27c44241cd6c8 -Block 0021 [ 4]: a0d86491c7ceb500 -Block 0021 [ 5]: 4dd10f8ab9541a9f -Block 0021 [ 6]: ae17a91916abe872 -Block 0021 [ 7]: 9d67d7d00fbe0a70 -Block 0021 [ 8]: f1a88d532cd28a63 -Block 0021 [ 9]: 39dd4f50229a82bf -Block 0021 [ 10]: 76a06d0dee8b8ade -Block 0021 [ 11]: 9aef30b84382c629 -Block 0021 [ 12]: 6ac22e4389612006 -Block 0021 [ 13]: d6f9d4d874e6e975 -Block 0021 [ 14]: 93dca20f9d1e625c -Block 0021 [ 15]: 2b264238671a0857 -Block 0021 [ 16]: a0bd56d8e2e3f336 -Block 0021 [ 17]: 9e854d3d7dba0d74 -Block 0021 [ 18]: a1e92df035152bd8 -Block 0021 [ 19]: 99d496cda4159e13 -Block 0021 [ 20]: a774e449e3e60348 -Block 0021 [ 21]: d1ac8ce6802fc4a8 -Block 0021 [ 22]: 97e20ec345140420 -Block 0021 [ 23]: 9f61750cd5ad600c -Block 0021 [ 24]: 7fe30c292f6519a2 -Block 0021 [ 25]: 45b180ba23bd51ec -Block 0021 [ 26]: a21343dd46c044f3 -Block 0021 [ 27]: 7bbb471ba8cff820 -Block 0021 [ 28]: 3ecad47da26e6430 -Block 0021 [ 29]: 61cb0da0292bcba7 -Block 0021 [ 30]: e419902f76899dee -Block 0021 [ 31]: 38525a26a35795dd -Block 0021 [ 32]: fcb9b939e7f343f0 -Block 0021 [ 33]: 6494c6a7a62d017f -Block 0021 [ 34]: d4a8a76c81242c2a -Block 0021 [ 35]: 7a6343b883eca4c3 -Block 0021 [ 36]: 6b52b95e7513d6cf -Block 0021 [ 37]: bce9e80e22a770db -Block 0021 [ 38]: 34996a31fed99173 -Block 0021 [ 39]: d75d7573d84fa88e -Block 0021 [ 40]: cc9e1bac5dad04de -Block 0021 [ 41]: a3b704494d792b36 -Block 0021 [ 42]: 0b0e12bcf6320ed3 -Block 0021 [ 43]: d28103a70d3e3655 -Block 0021 [ 44]: a177e02a07d98275 -Block 0021 [ 45]: 79ea910a8dd1c191 -Block 0021 [ 46]: fb03b764354a515f -Block 0021 [ 47]: 68a2728a2f946b07 -Block 0021 [ 48]: 996e901859fe60c4 -Block 0021 [ 49]: 5527efc44a3296a2 -Block 0021 [ 50]: 5845975faf68289b -Block 0021 [ 51]: 73d6ec705f545c49 -Block 0021 [ 52]: 5fa6778e2931528c -Block 0021 [ 53]: d9b6ddfe8040afd0 -Block 0021 [ 54]: 47a62e52424a7e33 -Block 0021 [ 55]: 47d07505251483e4 -Block 0021 [ 56]: 22ab3a448d5d134f -Block 0021 [ 57]: 4ce926e1a6df0cb8 -Block 0021 [ 58]: 72e00206862d8fa3 -Block 0021 [ 59]: 4b21559bab3f86f9 -Block 0021 [ 60]: 5a980c3b46d2be8e -Block 0021 [ 61]: 2ad9c2bcfe81e3b0 -Block 0021 [ 62]: 3bc624dfc37b8678 -Block 0021 [ 63]: 6d0d890bf0e9383f -Block 0021 [ 64]: 13d4089c25ec8ffe -Block 0021 [ 65]: c6e423ff6deb38d0 -Block 0021 [ 66]: ed6efbb604ad58c3 -Block 0021 [ 67]: efff5f38588ee612 -Block 0021 [ 68]: e3a7dae5a4ed29f1 -Block 0021 [ 69]: 38f2b792dfa1f064 -Block 0021 [ 70]: 94df3e2e745001a8 -Block 0021 [ 71]: 191a9276726070d9 -Block 0021 [ 72]: a510d07a141e7c38 -Block 0021 [ 73]: 5187183f8bb6e37a -Block 0021 [ 74]: a89e8c635f78a474 -Block 0021 [ 75]: ef39d133b7b710bd -Block 0021 [ 76]: ca5d7f377ef97849 -Block 0021 [ 77]: d7fb3c6e198ce5c4 -Block 0021 [ 78]: 16df2cc9d3071253 -Block 0021 [ 79]: 304e49111ea36b61 -Block 0021 [ 80]: 5919cd2abde8b09b -Block 0021 [ 81]: b27c8cb92e63932c -Block 0021 [ 82]: a03cfa230885f078 -Block 0021 [ 83]: 8855f9e6a50e0f00 -Block 0021 [ 84]: 83776b22df33ddf2 -Block 0021 [ 85]: 9275ae6a25ef9eb7 -Block 0021 [ 86]: 77f4f48c8d1fe5aa -Block 0021 [ 87]: 69e9c3ee6a313b91 -Block 0021 [ 88]: 34b2295d5b3cdfcb -Block 0021 [ 89]: 12ff0fd856bf17ec -Block 0021 [ 90]: 587825e8731f7532 -Block 0021 [ 91]: 7dc7d996c3b4dce1 -Block 0021 [ 92]: 5f94801d9ed7653b -Block 0021 [ 93]: 348f649bc8b74dac -Block 0021 [ 94]: dad511c9cd3dcd6c -Block 0021 [ 95]: 0d917c4a0c43537f -Block 0021 [ 96]: 543656e021e84162 -Block 0021 [ 97]: 1b5ad2836aeceb01 -Block 0021 [ 98]: 4ec9892cdf9bfaab -Block 0021 [ 99]: 8d95edf99171f888 -Block 0021 [100]: e184a5d6e42b9a7d -Block 0021 [101]: 23d27bc89de6801d -Block 0021 [102]: 236dc56a8fb5bb28 -Block 0021 [103]: f4e9ad75c9164dfb -Block 0021 [104]: ca92660dd6587d3a -Block 0021 [105]: 2822f9d7244bcc6d -Block 0021 [106]: 48b9cdca7b7159e1 -Block 0021 [107]: 97aa097f37692268 -Block 0021 [108]: 55e71fb044d7240a -Block 0021 [109]: fda7d8cead56d549 -Block 0021 [110]: af1e22ae2acae662 -Block 0021 [111]: 0bcbdf3af40e9c02 -Block 0021 [112]: 36b682b884dd3d7f -Block 0021 [113]: 5d29a9d2d1151a44 -Block 0021 [114]: 854dba4dc22926c5 -Block 0021 [115]: 75bccec357d65282 -Block 0021 [116]: 5fde2a2fd1a4d824 -Block 0021 [117]: ed6998c95c8c6031 -Block 0021 [118]: e42e6570c0ad8465 -Block 0021 [119]: 5363ae9589974f9d -Block 0021 [120]: 40209c1636899495 -Block 0021 [121]: 12f654e59f60f899 -Block 0021 [122]: 823fe8ba8eeb4649 -Block 0021 [123]: aa89425aa56b89b0 -Block 0021 [124]: 1c9a89ffa7aa2e7d -Block 0021 [125]: 0a1444d8cc22176f -Block 0021 [126]: d609a1c4ba94fa64 -Block 0021 [127]: ced53958b80bec2b -Block 0022 [ 0]: 1da00099e66ef42d -Block 0022 [ 1]: 60051fa3148b044e -Block 0022 [ 2]: 5dffa61c0c4dd432 -Block 0022 [ 3]: 18ac1fc7126204a2 -Block 0022 [ 4]: 753c3e883f63ef2f -Block 0022 [ 5]: a06af327af4c353b -Block 0022 [ 6]: 2c7e5aeb619e62cd -Block 0022 [ 7]: 067369e344526c25 -Block 0022 [ 8]: cf2dc2a2129f8283 -Block 0022 [ 9]: 6a7c0f5c06bffe14 -Block 0022 [ 10]: 4dd26b4524d0ea86 -Block 0022 [ 11]: a2e396830d604849 -Block 0022 [ 12]: ef540d936920acf0 -Block 0022 [ 13]: 53ef06d1f724d53a -Block 0022 [ 14]: 54ae1738225434d1 -Block 0022 [ 15]: d1835a92bc86f620 -Block 0022 [ 16]: 2aab6f075442a3cc -Block 0022 [ 17]: 603b2ca9761f8d49 -Block 0022 [ 18]: c6568ac3285d529e -Block 0022 [ 19]: 58fdad7c1b55134e -Block 0022 [ 20]: 90624214e9a57b86 -Block 0022 [ 21]: a6cd63cab7904bfb -Block 0022 [ 22]: 83ad727778cde839 -Block 0022 [ 23]: 9ab8afa2286e842e -Block 0022 [ 24]: edbdb92663550224 -Block 0022 [ 25]: fbd29a092c3e61d4 -Block 0022 [ 26]: c8e6d473fa37ab66 -Block 0022 [ 27]: d673deaa1518e949 -Block 0022 [ 28]: bab2538d9670730a -Block 0022 [ 29]: 8781d6b5b1282389 -Block 0022 [ 30]: 889a278999b787f5 -Block 0022 [ 31]: 5c9130cc500dcff6 -Block 0022 [ 32]: 2aa0f7ccb6d323ce -Block 0022 [ 33]: 98aa0c33857b56ae -Block 0022 [ 34]: dd2d61bed7326a1f -Block 0022 [ 35]: e8ae346eaa70e1b9 -Block 0022 [ 36]: 0ca297ee47dc5c23 -Block 0022 [ 37]: a85828fd8f6a48f1 -Block 0022 [ 38]: 3fada5811a2f45ff -Block 0022 [ 39]: a4a18e6dec23bce2 -Block 0022 [ 40]: 9dde4721c7b04949 -Block 0022 [ 41]: 8fd9ad826dbd0158 -Block 0022 [ 42]: c1ed3966f87f77cc -Block 0022 [ 43]: aa5fc4506ce403a0 -Block 0022 [ 44]: ac4850b5ea87864e -Block 0022 [ 45]: f5735e71c2cb42a4 -Block 0022 [ 46]: 823529430c10d420 -Block 0022 [ 47]: 446df0a78e000e46 -Block 0022 [ 48]: 8771cc750136b8e5 -Block 0022 [ 49]: 2e2628823443a8db -Block 0022 [ 50]: c6a6187323f4cd6b -Block 0022 [ 51]: 265ab59a5990dc4f -Block 0022 [ 52]: b0c3110cdc2358f1 -Block 0022 [ 53]: bcf49b9c3004c09d -Block 0022 [ 54]: 9e83ebc5241caa96 -Block 0022 [ 55]: ef830b3712383b1f -Block 0022 [ 56]: 17f539868f6e9713 -Block 0022 [ 57]: db242d8e258930e1 -Block 0022 [ 58]: 88f6704ee750c93d -Block 0022 [ 59]: 98009f6dfda71343 -Block 0022 [ 60]: 211be7123434fa67 -Block 0022 [ 61]: 06d86941cf2a41d4 -Block 0022 [ 62]: 934e8ed1001c3173 -Block 0022 [ 63]: 5ff02cafaab08125 -Block 0022 [ 64]: 0e9cbe1181a2d948 -Block 0022 [ 65]: d604a87b2427a6d7 -Block 0022 [ 66]: 067b185ccdf74dfe -Block 0022 [ 67]: 52e829ca3ed629ea -Block 0022 [ 68]: 9736d99f80701d87 -Block 0022 [ 69]: 974b0fcce11b2b77 -Block 0022 [ 70]: bd0d279e5421bbb8 -Block 0022 [ 71]: 29ee3bee260e3d67 -Block 0022 [ 72]: ee83a1cb54c014e2 -Block 0022 [ 73]: 2e0108d2ddb29065 -Block 0022 [ 74]: b927a78661625a92 -Block 0022 [ 75]: d320d1edd78cdea1 -Block 0022 [ 76]: 90216cccaa408bcb -Block 0022 [ 77]: a30bf5e18568c173 -Block 0022 [ 78]: c4eeff092463f5bc -Block 0022 [ 79]: 6a02e06c90988918 -Block 0022 [ 80]: 75aa0513c85bee76 -Block 0022 [ 81]: 0d90c10fbfc98f6a -Block 0022 [ 82]: 22b1277d2a8a16f5 -Block 0022 [ 83]: cee277dd005434d8 -Block 0022 [ 84]: 74b9b4123bcd58d4 -Block 0022 [ 85]: 9f595ac2fae9e5d0 -Block 0022 [ 86]: 11abb45b6c9e5e94 -Block 0022 [ 87]: a5b6868faac30a9a -Block 0022 [ 88]: beb8eb90a2d94bdc -Block 0022 [ 89]: 85a2eb37e235c906 -Block 0022 [ 90]: 9812df8e1698ebeb -Block 0022 [ 91]: 80fd679454d57b52 -Block 0022 [ 92]: dedd235f5d241dc2 -Block 0022 [ 93]: 58dc832f313f86c9 -Block 0022 [ 94]: ca49428581158610 -Block 0022 [ 95]: 5592c3992f35b6a0 -Block 0022 [ 96]: e918d5519bc97f48 -Block 0022 [ 97]: dbed179659801803 -Block 0022 [ 98]: f3d1e84ec1682838 -Block 0022 [ 99]: 81d088fb0163ce0c -Block 0022 [100]: 44ab8f0a5f398e60 -Block 0022 [101]: 44d8d113cd76dd7e -Block 0022 [102]: 36bec6685b0e2d9f -Block 0022 [103]: 0eb2d2eac32b9963 -Block 0022 [104]: 4319f79d45e9a910 -Block 0022 [105]: e91892e798e42160 -Block 0022 [106]: fc49ca22cf5ee046 -Block 0022 [107]: ae47cad9b1a1efc0 -Block 0022 [108]: 7a2169fbcb66d15a -Block 0022 [109]: 8f288a3ed7cfb7a4 -Block 0022 [110]: 54c6d694a74d8134 -Block 0022 [111]: eb036b45a1f164cd -Block 0022 [112]: 1c2b92bfca286309 -Block 0022 [113]: d8f1e23b89f1b7fe -Block 0022 [114]: 226ed913a04440a9 -Block 0022 [115]: 820a7e2c62b61278 -Block 0022 [116]: 317c3873e97ad322 -Block 0022 [117]: 5fd5401f349640d4 -Block 0022 [118]: 6c261c7094ca1894 -Block 0022 [119]: 6382563616dde40e -Block 0022 [120]: a38efddd2856ad4e -Block 0022 [121]: 1a69eefa3f5d897c -Block 0022 [122]: d7facfcc348f5df3 -Block 0022 [123]: 774ad01cea97b6a1 -Block 0022 [124]: 310b32b642e47ac4 -Block 0022 [125]: 5cf3f59234fdabd9 -Block 0022 [126]: afcde19d8250f01a -Block 0022 [127]: 73328111c1ff8e50 -Block 0023 [ 0]: faf8e9819ed5bddf -Block 0023 [ 1]: eccb38057063208a -Block 0023 [ 2]: 3adf2ab57c6b8f56 -Block 0023 [ 3]: 7dcf4b78f7bb04b3 -Block 0023 [ 4]: 4d2f1ba17b270c57 -Block 0023 [ 5]: c864e4d4a99505c3 -Block 0023 [ 6]: a982c508981e425a -Block 0023 [ 7]: 84cb024b0c7d338b -Block 0023 [ 8]: 029d5ef435e63d19 -Block 0023 [ 9]: fc3e60863ada3dae -Block 0023 [ 10]: 737600c47f97ce5e -Block 0023 [ 11]: 65217fb0d1dadfca -Block 0023 [ 12]: bedac75aceac13be -Block 0023 [ 13]: 13462535ec401e42 -Block 0023 [ 14]: b90362ff75f3748c -Block 0023 [ 15]: 2f14623975e76b86 -Block 0023 [ 16]: 5da24444ab904020 -Block 0023 [ 17]: cbe1f774a01e2f3b -Block 0023 [ 18]: c5d93ae8ce4b962b -Block 0023 [ 19]: 222078ec418a87f9 -Block 0023 [ 20]: 80eda9084671249c -Block 0023 [ 21]: 407a498fce9f0d04 -Block 0023 [ 22]: d2b0138e498b6e94 -Block 0023 [ 23]: c59c1082ad4b29f6 -Block 0023 [ 24]: 46825537441ee810 -Block 0023 [ 25]: 1042ed08a5bf3469 -Block 0023 [ 26]: 3c0e1d1399319bcc -Block 0023 [ 27]: 123d3ce43366c509 -Block 0023 [ 28]: 00d397e032073e5e -Block 0023 [ 29]: 530fe801dab60de3 -Block 0023 [ 30]: ef7ad81167eb858a -Block 0023 [ 31]: 9492afcc63f9ea32 -Block 0023 [ 32]: bfe0b391b47f7973 -Block 0023 [ 33]: b639f555332b4fe3 -Block 0023 [ 34]: e1129cba1e65010f -Block 0023 [ 35]: e9b83917c8c13e91 -Block 0023 [ 36]: d2670a2b61cacd37 -Block 0023 [ 37]: 4e78ec9b164e5bf1 -Block 0023 [ 38]: 3092b980e27b7a1f -Block 0023 [ 39]: 793e9e597fae61ec -Block 0023 [ 40]: 7dda455f6c75d509 -Block 0023 [ 41]: bec876d0c771025f -Block 0023 [ 42]: b78a89de75325485 -Block 0023 [ 43]: a9f8958f42f33a10 -Block 0023 [ 44]: 0b3447955fb4e758 -Block 0023 [ 45]: 28446ee528e4cd59 -Block 0023 [ 46]: 604e8bd784cd3ba6 -Block 0023 [ 47]: 3c912cc538cca5b3 -Block 0023 [ 48]: 741c792f2c3a4a0b -Block 0023 [ 49]: b4722b59af1a557a -Block 0023 [ 50]: e52547909fcce41c -Block 0023 [ 51]: 68b46f3279fbf078 -Block 0023 [ 52]: 85f8e8bc7cf12bf3 -Block 0023 [ 53]: ad38c4a35d905536 -Block 0023 [ 54]: 063595dad207d323 -Block 0023 [ 55]: f71031a227512f69 -Block 0023 [ 56]: 4ac439cdebafec2d -Block 0023 [ 57]: e078b646b0719629 -Block 0023 [ 58]: 1c4b81ae2e88830d -Block 0023 [ 59]: 79f0d8cdd68f73b6 -Block 0023 [ 60]: a1fafd44511427c7 -Block 0023 [ 61]: 66d93adf43233b03 -Block 0023 [ 62]: 1636143df56e8772 -Block 0023 [ 63]: 5cedadb5f28e2570 -Block 0023 [ 64]: c6ff0ff6a873f2f7 -Block 0023 [ 65]: 199c0fe56105dbd8 -Block 0023 [ 66]: 1d536db41a15e3ec -Block 0023 [ 67]: 2f3c1ccac0000382 -Block 0023 [ 68]: a1f851c2d4b678ff -Block 0023 [ 69]: 0b36f32d125eb826 -Block 0023 [ 70]: 930f979e90e57598 -Block 0023 [ 71]: 12333ed69bef1402 -Block 0023 [ 72]: e687b3b4a3161910 -Block 0023 [ 73]: 12892d2c474af808 -Block 0023 [ 74]: 0a49954cfa818951 -Block 0023 [ 75]: 941d67e1c257e64b -Block 0023 [ 76]: 7e1dab4cc29a7933 -Block 0023 [ 77]: 5680a5c2b4a0093b -Block 0023 [ 78]: 1c8ebc520f63dc7d -Block 0023 [ 79]: 954009640c5cd903 -Block 0023 [ 80]: 55c38777364d760d -Block 0023 [ 81]: ce1a639680c6a023 -Block 0023 [ 82]: 511ee04acd10108e -Block 0023 [ 83]: d1510a9008f09249 -Block 0023 [ 84]: 7b9a19216657b159 -Block 0023 [ 85]: faa8582af2b3db8e -Block 0023 [ 86]: c4061811ead08447 -Block 0023 [ 87]: cad84668ae016d39 -Block 0023 [ 88]: ef3640496cc9588a -Block 0023 [ 89]: ac39f3b0ceb4aa9a -Block 0023 [ 90]: b26a9ecd567574dc -Block 0023 [ 91]: 00998111e686b2c9 -Block 0023 [ 92]: 973a00f3999a3a92 -Block 0023 [ 93]: c161a546f0c3e1b2 -Block 0023 [ 94]: de438b4c09d5854c -Block 0023 [ 95]: 54d7959cb76b95c8 -Block 0023 [ 96]: 55f7e6bcaac2d916 -Block 0023 [ 97]: 2a5de324b05240c4 -Block 0023 [ 98]: 1ac57ed83b36faad -Block 0023 [ 99]: da4099839839045b -Block 0023 [100]: 948131c194fe93e7 -Block 0023 [101]: 25001100a7255b6f -Block 0023 [102]: 7d5e296f2bf89d76 -Block 0023 [103]: 14a719781b1d50c8 -Block 0023 [104]: b5e48bd6f1ae0d9c -Block 0023 [105]: 69fe928c15164672 -Block 0023 [106]: 84aedfb328f02943 -Block 0023 [107]: ef8562e07624e197 -Block 0023 [108]: 5a6c16acadaa34be -Block 0023 [109]: 88867f07c62771b1 -Block 0023 [110]: f64097b47fe933c2 -Block 0023 [111]: 51859b2ba28f5018 -Block 0023 [112]: c96039bb54f111cc -Block 0023 [113]: e1b258bd6911df4e -Block 0023 [114]: 0815493ac5753d45 -Block 0023 [115]: 1f518bdb944073fb -Block 0023 [116]: 5333e99b8fba57ce -Block 0023 [117]: b6f8303b0458a5b4 -Block 0023 [118]: 1aa8b1886f0b33bf -Block 0023 [119]: 2c35ae0c01ff50ef -Block 0023 [120]: 6654fb783d5aa92d -Block 0023 [121]: 1e4340d082bc77c4 -Block 0023 [122]: 69d9b51e51cd50ec -Block 0023 [123]: 4235db7b068113c4 -Block 0023 [124]: fdc2d233d7d7bafa -Block 0023 [125]: a18c7f0cdd7e8890 -Block 0023 [126]: 5b42758a3efe822b -Block 0023 [127]: f4638cf24778606d -Block 0024 [ 0]: eede245f62d6b577 -Block 0024 [ 1]: c6b62ea9fdc6142b -Block 0024 [ 2]: 07a53b2091483089 -Block 0024 [ 3]: 1c93aea4d9a35d62 -Block 0024 [ 4]: c1c60c54c0c0d661 -Block 0024 [ 5]: 332221c32a0d4d91 -Block 0024 [ 6]: f308d5930bec5a1d -Block 0024 [ 7]: c82a96464710a6db -Block 0024 [ 8]: 13baec0de6add849 -Block 0024 [ 9]: b21027d16856a35c -Block 0024 [ 10]: d4120090de5d2acf -Block 0024 [ 11]: d59cf58286fd56b6 -Block 0024 [ 12]: f1eee49bc25f62ea -Block 0024 [ 13]: 80dcd989334316cb -Block 0024 [ 14]: 8fa965baa1026e5e -Block 0024 [ 15]: 23004dfde370bcff -Block 0024 [ 16]: 1bf2b01c7eaea454 -Block 0024 [ 17]: f28c8ba81c2679e2 -Block 0024 [ 18]: 48a7f8e65ea3c438 -Block 0024 [ 19]: 1860f45e52dbdff8 -Block 0024 [ 20]: a6541ed3cfe56f87 -Block 0024 [ 21]: c0c390bf2874899f -Block 0024 [ 22]: 8cda1867dd43bae3 -Block 0024 [ 23]: 7e3737d3238e4828 -Block 0024 [ 24]: 0554841098d2f975 -Block 0024 [ 25]: ba874d0cfbe4b8ab -Block 0024 [ 26]: 3d4ee63595093a5a -Block 0024 [ 27]: 1831ccf9f743da0f -Block 0024 [ 28]: 256415728708fdcf -Block 0024 [ 29]: b89ac656cc195d25 -Block 0024 [ 30]: 762e4d59c63b9928 -Block 0024 [ 31]: 1c8e480bbeca26b1 -Block 0024 [ 32]: 338efb2028c0d276 -Block 0024 [ 33]: 4e65e5221e6c5930 -Block 0024 [ 34]: 7be1b555ee8e1874 -Block 0024 [ 35]: 73de51347a49cc52 -Block 0024 [ 36]: 5151e631e2068475 -Block 0024 [ 37]: cb849b87e9fbb077 -Block 0024 [ 38]: a80d236c4eaad045 -Block 0024 [ 39]: c4743fd9a8ab34f2 -Block 0024 [ 40]: 05086ce35f1883f3 -Block 0024 [ 41]: f0c6c851c57f3f3a -Block 0024 [ 42]: baee7da68afca3f7 -Block 0024 [ 43]: 9df2ab3434594dd8 -Block 0024 [ 44]: 21de27a863a0aff4 -Block 0024 [ 45]: 8c6e79b495631870 -Block 0024 [ 46]: f0040b82d1f897ab -Block 0024 [ 47]: 4997a4b76d71ff0f -Block 0024 [ 48]: 77d45defbcbac7d3 -Block 0024 [ 49]: 4a6d6b54eefd88f3 -Block 0024 [ 50]: a25ebeab65950052 -Block 0024 [ 51]: d1479e6759f85ac8 -Block 0024 [ 52]: 73b34805eb4c7a5d -Block 0024 [ 53]: 1839fb1fa6848c68 -Block 0024 [ 54]: b16fcedc4a4c8c10 -Block 0024 [ 55]: 16742af6d1a4e07f -Block 0024 [ 56]: 38902d0357d9cd3b -Block 0024 [ 57]: e876ace74310956a -Block 0024 [ 58]: 625cc2ce73444d0e -Block 0024 [ 59]: 5f56ff8c51eae272 -Block 0024 [ 60]: 07d4f94ae96c62e9 -Block 0024 [ 61]: 8995abc4d648eb30 -Block 0024 [ 62]: 61a9f3fe748a4f06 -Block 0024 [ 63]: cf61aa691d442796 -Block 0024 [ 64]: 338b61d249f3b5e9 -Block 0024 [ 65]: 717365edf81451f1 -Block 0024 [ 66]: 9a742011e04f375d -Block 0024 [ 67]: 3c0252fe6de830ef -Block 0024 [ 68]: 6899219a79fdc193 -Block 0024 [ 69]: 504a88f79250caa8 -Block 0024 [ 70]: f4e05155f4831a41 -Block 0024 [ 71]: 62fee29baa3057cb -Block 0024 [ 72]: 3390df119145c16c -Block 0024 [ 73]: d906cdd000e605a7 -Block 0024 [ 74]: 325fb08618b04c18 -Block 0024 [ 75]: 2acbe70a78ff91aa -Block 0024 [ 76]: 5c96139edb859139 -Block 0024 [ 77]: 8da58b7f1bd0ac62 -Block 0024 [ 78]: 8e2f4141ed578ad4 -Block 0024 [ 79]: caea07cd0ce4b5bb -Block 0024 [ 80]: a7c2ffdd3516b9e4 -Block 0024 [ 81]: ac43c5e993b9ce14 -Block 0024 [ 82]: 481b6801f8c2063d -Block 0024 [ 83]: 0841d396219513f6 -Block 0024 [ 84]: 3d80af294dfd644d -Block 0024 [ 85]: 1befd999c362b731 -Block 0024 [ 86]: dea7977c821944f3 -Block 0024 [ 87]: 4da1b2e0d258d35d -Block 0024 [ 88]: 23a9c13ca2a0b486 -Block 0024 [ 89]: 7ba4f890dfd2b82c -Block 0024 [ 90]: 27cfe434289ae1c4 -Block 0024 [ 91]: 68ae670da4c955bf -Block 0024 [ 92]: a1c07262a98aeb32 -Block 0024 [ 93]: 2f6b00fabadaac7c -Block 0024 [ 94]: 0b5225ee63dabb02 -Block 0024 [ 95]: 3a6700470ef3e0e2 -Block 0024 [ 96]: c27e4da0a2ee8b4d -Block 0024 [ 97]: 4ce0d0d2911807e5 -Block 0024 [ 98]: 884397c050782809 -Block 0024 [ 99]: 381d7284b47cc0c7 -Block 0024 [100]: 76218d054ed13066 -Block 0024 [101]: 3e55924005389d0e -Block 0024 [102]: 4e4e054ee33ce746 -Block 0024 [103]: bf52a035a9414a25 -Block 0024 [104]: 7aa1b6ccaf1d8994 -Block 0024 [105]: 3dc748c450ed599e -Block 0024 [106]: 8cacad0b108b0f28 -Block 0024 [107]: 1a432b914c8d5210 -Block 0024 [108]: 7d818e692d3f9972 -Block 0024 [109]: edea37c6abb5dfa2 -Block 0024 [110]: cd092a596f8ec84d -Block 0024 [111]: d126fb730532177a -Block 0024 [112]: 3644902afe1a1fb5 -Block 0024 [113]: ab379711a8617714 -Block 0024 [114]: 5cedc841b324d74f -Block 0024 [115]: 7a1923e48401c96b -Block 0024 [116]: 0d13f3c7afedf5ce -Block 0024 [117]: 3a254a12b84e65c2 -Block 0024 [118]: d2b9727614bd0d81 -Block 0024 [119]: 44e2f34c09858189 -Block 0024 [120]: 166b8e0202435648 -Block 0024 [121]: ccabaea87b867ba8 -Block 0024 [122]: 04730c71031c17b0 -Block 0024 [123]: 5dc755d938cb2582 -Block 0024 [124]: a959def8cc5e35b5 -Block 0024 [125]: 0be10f243c731296 -Block 0024 [126]: 0b297eb58896c6b3 -Block 0024 [127]: 7824efd8483d8404 -Block 0025 [ 0]: 889096729509e78f -Block 0025 [ 1]: 26504b43a3100a77 -Block 0025 [ 2]: fbd049c773a1b6ad -Block 0025 [ 3]: eb252d4ae7f1aa63 -Block 0025 [ 4]: f9589a22c2b52a79 -Block 0025 [ 5]: cee8068ebcc7d015 -Block 0025 [ 6]: 21d4347432ee8ffb -Block 0025 [ 7]: 0f47228c6bb465a0 -Block 0025 [ 8]: bdc2c807d0b93a9e -Block 0025 [ 9]: 93b6f9ff6cf28394 -Block 0025 [ 10]: 269f5146a44db948 -Block 0025 [ 11]: 582214ba08e90d6b -Block 0025 [ 12]: a9a68dba1d170a12 -Block 0025 [ 13]: ef85ecbd10051753 -Block 0025 [ 14]: 06851cfd8c42322f -Block 0025 [ 15]: a4d5a440a88d43be -Block 0025 [ 16]: 989dc221ec5b9c58 -Block 0025 [ 17]: 474f59f0f6ff1af4 -Block 0025 [ 18]: 125416e66c19634f -Block 0025 [ 19]: 10215d521ffcd58e -Block 0025 [ 20]: e3f09f59d9104eb3 -Block 0025 [ 21]: 586e10dccc5020b9 -Block 0025 [ 22]: 0a768305fbc81885 -Block 0025 [ 23]: d14874001b4e4e1b -Block 0025 [ 24]: c8547ecfa52d48c7 -Block 0025 [ 25]: ce6b1e03845c17bd -Block 0025 [ 26]: fe11c378c83a2fbe -Block 0025 [ 27]: 8d1d43284d915d96 -Block 0025 [ 28]: 5727fa24758d9ed0 -Block 0025 [ 29]: 5b0b345f44d4f221 -Block 0025 [ 30]: 5c49add60390df39 -Block 0025 [ 31]: d1e23f9755e06462 -Block 0025 [ 32]: 3eb908b7f7ac2f1e -Block 0025 [ 33]: 7a3e86d7ff618c2c -Block 0025 [ 34]: c6b860295828261a -Block 0025 [ 35]: aa89774a7391397f -Block 0025 [ 36]: b3c4c8a8e2d6bce2 -Block 0025 [ 37]: 7ec5d12cd0535cc1 -Block 0025 [ 38]: 921353ef549581ee -Block 0025 [ 39]: bd1222482408e2fd -Block 0025 [ 40]: d4e2ba07d4b4b8cc -Block 0025 [ 41]: bafd05d23599cee3 -Block 0025 [ 42]: de67ee39feea0dc8 -Block 0025 [ 43]: 2b78f8b27eb882b4 -Block 0025 [ 44]: e9b625124d311892 -Block 0025 [ 45]: 98b2752764b4242a -Block 0025 [ 46]: 9362523bc3747c43 -Block 0025 [ 47]: 1c2a20d8c40f7892 -Block 0025 [ 48]: 5dd771a35bc3a0f9 -Block 0025 [ 49]: b08916d994485d92 -Block 0025 [ 50]: 9cc23af3e5b71b77 -Block 0025 [ 51]: fdc1a420cfdbfeeb -Block 0025 [ 52]: 671430b738686c6d -Block 0025 [ 53]: 9e263c7e72dcd4e4 -Block 0025 [ 54]: 808ef8d04feaed7e -Block 0025 [ 55]: 0c3977d862a087b3 -Block 0025 [ 56]: da21711205931d65 -Block 0025 [ 57]: 57e9163e89a92b2d -Block 0025 [ 58]: f6d9b7c75e22884a -Block 0025 [ 59]: 53df53f21c5ea344 -Block 0025 [ 60]: ce09a21b516d77c2 -Block 0025 [ 61]: dc90da4a018d70d5 -Block 0025 [ 62]: 9c2bee3bf5be28f9 -Block 0025 [ 63]: 9b14f3d069e0cc8f -Block 0025 [ 64]: 5dfa874c5de65c73 -Block 0025 [ 65]: 41d8f48bf256f7b5 -Block 0025 [ 66]: 2c54c97b6bdd1922 -Block 0025 [ 67]: 8fdd86c673d73ceb -Block 0025 [ 68]: 2ddcdadc28e483ec -Block 0025 [ 69]: 448999231656a9a2 -Block 0025 [ 70]: c5c6a22e814c20da -Block 0025 [ 71]: fb4b60da77b78d76 -Block 0025 [ 72]: 8d75e91ace57a779 -Block 0025 [ 73]: dce603b830d17e29 -Block 0025 [ 74]: c0fb7a05b851bb35 -Block 0025 [ 75]: bec24336a6634ce4 -Block 0025 [ 76]: b55f22fde59c3c73 -Block 0025 [ 77]: bb8ec536ffb476bc -Block 0025 [ 78]: c0071e75308ba8bb -Block 0025 [ 79]: 0bbf0dd52d5a7851 -Block 0025 [ 80]: 15162c10635898d5 -Block 0025 [ 81]: 0bf8bf14a900705f -Block 0025 [ 82]: 080296ee3c6634a9 -Block 0025 [ 83]: 00b4294bf795c0fa -Block 0025 [ 84]: c54eedcb4aa6b04d -Block 0025 [ 85]: 4dce146af1deee86 -Block 0025 [ 86]: b5756a48df564404 -Block 0025 [ 87]: 3b57c67dab0f2b0d -Block 0025 [ 88]: ea8543a2e6c25c74 -Block 0025 [ 89]: 7e0b4eed8f64f29a -Block 0025 [ 90]: ab6d723b4b394b67 -Block 0025 [ 91]: af40edc026dc2ba1 -Block 0025 [ 92]: 3c29390e269e5370 -Block 0025 [ 93]: 5dd8288dc9b5d1df -Block 0025 [ 94]: 580507dfc21aacfb -Block 0025 [ 95]: 71ded7a2579ce4f7 -Block 0025 [ 96]: 11960be7aaa8b291 -Block 0025 [ 97]: 4c1ad7455e167c48 -Block 0025 [ 98]: ace29f6a0682b5cf -Block 0025 [ 99]: be946a8dc92261e1 -Block 0025 [100]: 222c5dd20af62343 -Block 0025 [101]: a0775badb4aff215 -Block 0025 [102]: 3c9f963838fb6d7e -Block 0025 [103]: 4610d1f8e37983e0 -Block 0025 [104]: dbf7cef0b1205e12 -Block 0025 [105]: 2e9bc9577a01c3d5 -Block 0025 [106]: 4b6af5055b61fa2b -Block 0025 [107]: b34c71830d8049d2 -Block 0025 [108]: 950edfdd91e5039a -Block 0025 [109]: 2d6a84d97cadb803 -Block 0025 [110]: f39c28169a8e3866 -Block 0025 [111]: ec6b338b4691fdc4 -Block 0025 [112]: bdfd62ce06287de0 -Block 0025 [113]: ca64badc1cdd288b -Block 0025 [114]: ddbe34f9611eb577 -Block 0025 [115]: ff863bdd914bec12 -Block 0025 [116]: e10bb8be4463770c -Block 0025 [117]: 6f8f73d44abb7141 -Block 0025 [118]: e4b1d9c741f6a21c -Block 0025 [119]: 1c04f10cdd385724 -Block 0025 [120]: b174b35f63d28944 -Block 0025 [121]: 456e620925bf1183 -Block 0025 [122]: 3e842a5ffbcaff84 -Block 0025 [123]: 5f15a4541e8d31c2 -Block 0025 [124]: 4a1fb9f305052b69 -Block 0025 [125]: dd5a871c34527adf -Block 0025 [126]: 8c9555e9a3e8db72 -Block 0025 [127]: 916f214630c35e17 -Block 0026 [ 0]: 2326110607fb8417 -Block 0026 [ 1]: 21b903b553877ad5 -Block 0026 [ 2]: 7bf33b6460d88269 -Block 0026 [ 3]: bba47143c058e26b -Block 0026 [ 4]: 2afe479df5bc918c -Block 0026 [ 5]: b5c079c195f10ebb -Block 0026 [ 6]: a044c29d531bf3b5 -Block 0026 [ 7]: 56f1163c045bb5fe -Block 0026 [ 8]: b1ce2026934db6a6 -Block 0026 [ 9]: 960e96adf333dca7 -Block 0026 [ 10]: 18bf65450e272e42 -Block 0026 [ 11]: f5a21856543a7b9d -Block 0026 [ 12]: 645ea64c689df21b -Block 0026 [ 13]: e88bf5f0b955b02f -Block 0026 [ 14]: 173079ea4b1f8103 -Block 0026 [ 15]: 3d84f3c858f0ccd3 -Block 0026 [ 16]: 760b040af26a6bf2 -Block 0026 [ 17]: bbfb4c8b40e1d3e6 -Block 0026 [ 18]: 94d0e5dd9242dade -Block 0026 [ 19]: 2e2442678afc3aa3 -Block 0026 [ 20]: 353afcd33f4afa1a -Block 0026 [ 21]: ee4e5d3cee3e4781 -Block 0026 [ 22]: 6da71c25f9f701ce -Block 0026 [ 23]: 22f0b96255b98c5a -Block 0026 [ 24]: acda353def1501a8 -Block 0026 [ 25]: 6e2ab8c1cc80c3c2 -Block 0026 [ 26]: e1346169d7e5b09c -Block 0026 [ 27]: 45c9152befd73b11 -Block 0026 [ 28]: 8c05ab64b0ca9770 -Block 0026 [ 29]: 2de1a8a073329d58 -Block 0026 [ 30]: f8f6cc6e4937aa1b -Block 0026 [ 31]: b393299e7441c42b -Block 0026 [ 32]: 0e1e9127e5d82ca7 -Block 0026 [ 33]: d9e7f884fb9ee6ea -Block 0026 [ 34]: 55d357a28fcf5eea -Block 0026 [ 35]: f576e6e9dec9afd7 -Block 0026 [ 36]: 636f2ad51c9aa17f -Block 0026 [ 37]: 8295f555f60629fa -Block 0026 [ 38]: 221787f92c6c7b8c -Block 0026 [ 39]: ee58f217a2ab0f23 -Block 0026 [ 40]: 8829bc3c625a98e5 -Block 0026 [ 41]: c881d4c765796859 -Block 0026 [ 42]: 1b64a1dc1b25c4c8 -Block 0026 [ 43]: f721e2fe7139e377 -Block 0026 [ 44]: d772ffbaff52e88d -Block 0026 [ 45]: 025700398018d483 -Block 0026 [ 46]: 91e64ffe14eae36f -Block 0026 [ 47]: cc697adbae578f77 -Block 0026 [ 48]: 6f08adbdca0bdcca -Block 0026 [ 49]: 98b466ad258f6b37 -Block 0026 [ 50]: a0f5d3967adf3fca -Block 0026 [ 51]: 7f55d062e14d1007 -Block 0026 [ 52]: 35d6e09308b0911e -Block 0026 [ 53]: 388da57d96f7e6d9 -Block 0026 [ 54]: 1852c831a455e118 -Block 0026 [ 55]: ee9971f15fe61186 -Block 0026 [ 56]: 3d9082f42b74ad35 -Block 0026 [ 57]: a438c3d34632fe2a -Block 0026 [ 58]: b4662befdf3c5ef1 -Block 0026 [ 59]: 48c830419f16033c -Block 0026 [ 60]: d73a1597abfd5bd9 -Block 0026 [ 61]: 92c1097e4689a942 -Block 0026 [ 62]: 23af79f5ad04dfed -Block 0026 [ 63]: 17cfa050f7849186 -Block 0026 [ 64]: 2ddfa8eff84229be -Block 0026 [ 65]: d2497269ae78a31f -Block 0026 [ 66]: aed694da1b5e26c2 -Block 0026 [ 67]: 440119e2e1622879 -Block 0026 [ 68]: c20615b4339db9e5 -Block 0026 [ 69]: 40507bb2ae718a09 -Block 0026 [ 70]: 009544db73aca08f -Block 0026 [ 71]: e3cbc7a0b359738e -Block 0026 [ 72]: 5f5c27f846aae2ab -Block 0026 [ 73]: 90a2ac6ad788b5a7 -Block 0026 [ 74]: 7c62662eebd39cff -Block 0026 [ 75]: 8a74179c8de76ffb -Block 0026 [ 76]: ddc0b6c5d5b098fe -Block 0026 [ 77]: d2ece0d030c8fbb0 -Block 0026 [ 78]: 997b8866ce9776ea -Block 0026 [ 79]: a43e344f370b3a57 -Block 0026 [ 80]: bac0ea91e352be1c -Block 0026 [ 81]: f01b639687e116bc -Block 0026 [ 82]: 960021d6f3a14e28 -Block 0026 [ 83]: 66da0b9f7a6f4578 -Block 0026 [ 84]: cfeabacf62e0980f -Block 0026 [ 85]: 91e586937a842ba8 -Block 0026 [ 86]: 3d1edbdf53bcc328 -Block 0026 [ 87]: fe5db209ef765995 -Block 0026 [ 88]: 09dae8069afa3d9f -Block 0026 [ 89]: 642b6eefcc740e1d -Block 0026 [ 90]: 4e966039b4a33618 -Block 0026 [ 91]: 43a2c47ee03be541 -Block 0026 [ 92]: ef2d8306430732d2 -Block 0026 [ 93]: ba85666f042ac669 -Block 0026 [ 94]: 6feec7335af83185 -Block 0026 [ 95]: fa2030d6bd78c524 -Block 0026 [ 96]: 47f0b74e4cbb7eda -Block 0026 [ 97]: 6da6378c64c7ce1f -Block 0026 [ 98]: 5a9e6857b6a5289c -Block 0026 [ 99]: caade4b95bdfd06f -Block 0026 [100]: a2d84e8435913de6 -Block 0026 [101]: 34cc36e53cb7bcb9 -Block 0026 [102]: 702ea8254a5b7678 -Block 0026 [103]: aca6662a073790b3 -Block 0026 [104]: d3e8062924413a1d -Block 0026 [105]: d35eb40e29a1ab60 -Block 0026 [106]: d7d8dace18d04b73 -Block 0026 [107]: a485fec173de15ed -Block 0026 [108]: 9e985148c2f9e73e -Block 0026 [109]: 1bc9a4156367266f -Block 0026 [110]: 92088b95d082b203 -Block 0026 [111]: 7411e3d921612b6b -Block 0026 [112]: d7a0707c5b8dfffb -Block 0026 [113]: 3a69e8206ac6bab2 -Block 0026 [114]: 681fcdcf147b5797 -Block 0026 [115]: e3f729a959d114f1 -Block 0026 [116]: 1c27652b63160462 -Block 0026 [117]: aa4a57250c8ba710 -Block 0026 [118]: 7749feff623165bd -Block 0026 [119]: c7424c1ba697125e -Block 0026 [120]: c8c9202a695524c7 -Block 0026 [121]: 8557a3857e1ce2ae -Block 0026 [122]: bdd7467b6dcb5b80 -Block 0026 [123]: 818b955fdbe8ea65 -Block 0026 [124]: 5b4cba042cf69bd4 -Block 0026 [125]: 4c5de11255f2c061 -Block 0026 [126]: ef15e5aeca3dbb79 -Block 0026 [127]: 6d08853bd67bf454 -Block 0027 [ 0]: 1b9e0a2a48f03548 -Block 0027 [ 1]: 79d13f7464dfe544 -Block 0027 [ 2]: ae09bc1e24b9eb78 -Block 0027 [ 3]: 5c9dc0dade572ed1 -Block 0027 [ 4]: f5938effd3acac03 -Block 0027 [ 5]: 1c07f12951ab8c4d -Block 0027 [ 6]: 24430282ba5c1d54 -Block 0027 [ 7]: a6b6b6e3ad35b065 -Block 0027 [ 8]: 867d937a7f04fc08 -Block 0027 [ 9]: 530134b0935bab05 -Block 0027 [ 10]: 2ba6e88fbc07b2ae -Block 0027 [ 11]: ba41f5c456dc4700 -Block 0027 [ 12]: adce9ae24bbd8c39 -Block 0027 [ 13]: d2fd86dde81b100c -Block 0027 [ 14]: 7af41baa6ea9a086 -Block 0027 [ 15]: 6eabe51c178df50f -Block 0027 [ 16]: 201e933537af8b09 -Block 0027 [ 17]: d25c2965cb10515d -Block 0027 [ 18]: b1efcc4a704af07d -Block 0027 [ 19]: 8785462fbd5cf444 -Block 0027 [ 20]: b57c06385432db42 -Block 0027 [ 21]: 70dd9f26e498c6a1 -Block 0027 [ 22]: cc22b2a4f0abdd3b -Block 0027 [ 23]: 1194085fcfe927a4 -Block 0027 [ 24]: db74fcdece66f9f4 -Block 0027 [ 25]: 3ccd6b68246b978b -Block 0027 [ 26]: ca025c07ce8350f8 -Block 0027 [ 27]: 5e8982b4a36d138a -Block 0027 [ 28]: bf37b6c0aa764378 -Block 0027 [ 29]: bbfa64d026622763 -Block 0027 [ 30]: 751189774b34475d -Block 0027 [ 31]: 5438b191939688ee -Block 0027 [ 32]: 736af831e42315b8 -Block 0027 [ 33]: e7189b709e88e8d6 -Block 0027 [ 34]: 37eee5970edc1e23 -Block 0027 [ 35]: b80aaf8f94ee1561 -Block 0027 [ 36]: 9141705d6a2c0863 -Block 0027 [ 37]: 10cd015b94f60ac6 -Block 0027 [ 38]: 373292f9c6b9e3d3 -Block 0027 [ 39]: 4906ca8fd4933a34 -Block 0027 [ 40]: 5425ba952f1c2b16 -Block 0027 [ 41]: ba91ab6c019d10b5 -Block 0027 [ 42]: ae1813ab9eb3f165 -Block 0027 [ 43]: 80ce5f31929c977e -Block 0027 [ 44]: 9cb8f3c169cfc2ea -Block 0027 [ 45]: caeafec4696d86fb -Block 0027 [ 46]: b5d1dab3619428b8 -Block 0027 [ 47]: 2dc1b1f6148a1945 -Block 0027 [ 48]: 2b36aa468d722a62 -Block 0027 [ 49]: f89f92967c61807b -Block 0027 [ 50]: 8bb5c07804484e62 -Block 0027 [ 51]: 1f495abf9906b02c -Block 0027 [ 52]: f8d4f663a8db2006 -Block 0027 [ 53]: 37b5730fc4bc7bb8 -Block 0027 [ 54]: 474e85daaa7f8f4c -Block 0027 [ 55]: 103c08f71ca71f7d -Block 0027 [ 56]: f6ee3f551142f93d -Block 0027 [ 57]: df49d32e32813a59 -Block 0027 [ 58]: 7893d42f39de58c1 -Block 0027 [ 59]: 612d282bf0114e57 -Block 0027 [ 60]: 06526d52faa7c46f -Block 0027 [ 61]: ef0a4a21543b4210 -Block 0027 [ 62]: 659aad06a6dac23b -Block 0027 [ 63]: 83349711eaf33ff6 -Block 0027 [ 64]: 2619d9d15a1f40a1 -Block 0027 [ 65]: 0d6e01f3a6780617 -Block 0027 [ 66]: 537b02711650672b -Block 0027 [ 67]: f2f8e6138ef4f708 -Block 0027 [ 68]: c979e70587b593e8 -Block 0027 [ 69]: 598534c232f66a7b -Block 0027 [ 70]: aaa5368ca7adf19e -Block 0027 [ 71]: fbd81073ff635f77 -Block 0027 [ 72]: c511c8fdb4816452 -Block 0027 [ 73]: dabdda9675b10982 -Block 0027 [ 74]: ce6811b03950e826 -Block 0027 [ 75]: fc9eaed22fc499aa -Block 0027 [ 76]: f7ab1b9e96c241f1 -Block 0027 [ 77]: 90f391f585de581d -Block 0027 [ 78]: 3393d992ef6ec67d -Block 0027 [ 79]: dc1542690885d37b -Block 0027 [ 80]: 3b6a43d43bb4a8f1 -Block 0027 [ 81]: 1ccbba638d9ebf11 -Block 0027 [ 82]: 34e474ffaa3ae841 -Block 0027 [ 83]: 10b28634c65339de -Block 0027 [ 84]: 89962338c5ec0536 -Block 0027 [ 85]: 4066ccc9321462bf -Block 0027 [ 86]: 9158b68f05139c91 -Block 0027 [ 87]: eafb568fd6c32965 -Block 0027 [ 88]: 5d0afd995ccf6838 -Block 0027 [ 89]: 5467f717aa461520 -Block 0027 [ 90]: 3f46d011a0aa6852 -Block 0027 [ 91]: 5be8246d25d1e221 -Block 0027 [ 92]: 0411b41ce73cf8d3 -Block 0027 [ 93]: f4603c9d26fdabc5 -Block 0027 [ 94]: 0bea0ce54205b484 -Block 0027 [ 95]: 676106d61b20001a -Block 0027 [ 96]: ae1363d24d05bb51 -Block 0027 [ 97]: b137b076a0bd62c3 -Block 0027 [ 98]: b2a47ba9c55e2008 -Block 0027 [ 99]: cb536401ca240734 -Block 0027 [100]: bc644a7e4db2fbcb -Block 0027 [101]: d4657f37c824c0b1 -Block 0027 [102]: 2e43c799ce19ba2a -Block 0027 [103]: 71f4e39a7105f08c -Block 0027 [104]: cd60684a48c35aae -Block 0027 [105]: 630e5d2c33dd141e -Block 0027 [106]: 644c3710f4e576b8 -Block 0027 [107]: e0a79b23fcecda7e -Block 0027 [108]: ae487ac85808d582 -Block 0027 [109]: 310c4b78ed84735f -Block 0027 [110]: 8869ccf9539f8d29 -Block 0027 [111]: e961d241232d8eb4 -Block 0027 [112]: e08dbd615c20c18b -Block 0027 [113]: d27009a6d7f7383a -Block 0027 [114]: fb086f56179222d1 -Block 0027 [115]: 318b6465bf6f11e6 -Block 0027 [116]: 1096b60a36bc2adc -Block 0027 [117]: 5a19cb04e9138bd5 -Block 0027 [118]: d70194664ef36242 -Block 0027 [119]: 66b5846972e6d4b5 -Block 0027 [120]: a9ed1ab8cf8eda55 -Block 0027 [121]: ac4a13bc160e8dbc -Block 0027 [122]: 36c095d46c0fd19f -Block 0027 [123]: d884e38b9dbee228 -Block 0027 [124]: 19fd4af11f29f87f -Block 0027 [125]: c59730708224a0ad -Block 0027 [126]: ab650e5c4054b735 -Block 0027 [127]: 70f375ab9c7e144e -Block 0028 [ 0]: 97232791402bcb44 -Block 0028 [ 1]: 35f792c0b2f4984b -Block 0028 [ 2]: 3226a2aea0ebf600 -Block 0028 [ 3]: 7fe74755e5f13d9e -Block 0028 [ 4]: f3d5b6f172056b7d -Block 0028 [ 5]: e94896db4a53432b -Block 0028 [ 6]: 45630e66b33caf9d -Block 0028 [ 7]: 5b3b5a0b10aad49b -Block 0028 [ 8]: 309b69543ee4a396 -Block 0028 [ 9]: 7d170df8695dfdc0 -Block 0028 [ 10]: 294542494a30d442 -Block 0028 [ 11]: 3ffe9c43d6b9c1df -Block 0028 [ 12]: db7ef4608692decc -Block 0028 [ 13]: fbc4dca927251720 -Block 0028 [ 14]: 5039450e98f1c2a1 -Block 0028 [ 15]: 8bc1f444fa5731ae -Block 0028 [ 16]: 83d87fd302dfec84 -Block 0028 [ 17]: abbd969ea7fc60db -Block 0028 [ 18]: b4e0305c8e8631dc -Block 0028 [ 19]: da6a912f0b3017cf -Block 0028 [ 20]: 9d0be0c7dad3eac9 -Block 0028 [ 21]: 0b88a014922d1de9 -Block 0028 [ 22]: b543e19840551a05 -Block 0028 [ 23]: 270e6f8a4712c6e4 -Block 0028 [ 24]: e95d6fb939fa034e -Block 0028 [ 25]: e8e03357bebe3443 -Block 0028 [ 26]: b405c25554d5c7b5 -Block 0028 [ 27]: b32ec2395f791b42 -Block 0028 [ 28]: d2813288d84d51f4 -Block 0028 [ 29]: e4f492ae99d62fc9 -Block 0028 [ 30]: e58241d84db85374 -Block 0028 [ 31]: d4270cccafb0d652 -Block 0028 [ 32]: 0f504b2abf3fffdd -Block 0028 [ 33]: 942c9a112e819d77 -Block 0028 [ 34]: cf69b53975cd82ac -Block 0028 [ 35]: cbdcbd422cfdeaae -Block 0028 [ 36]: 04e8634692186628 -Block 0028 [ 37]: 0fc7ca7bc72f1a50 -Block 0028 [ 38]: 35a9f84173bd61bd -Block 0028 [ 39]: 045006fdb2984625 -Block 0028 [ 40]: a66cf861729ba243 -Block 0028 [ 41]: 51b2bae79c014af5 -Block 0028 [ 42]: 51d30a112158b84a -Block 0028 [ 43]: 00bf5e0aac36c45d -Block 0028 [ 44]: 81bf6d928cd7d70a -Block 0028 [ 45]: 6980b3c243c53ab8 -Block 0028 [ 46]: f21ad5f134ad738b -Block 0028 [ 47]: 5e68587e40d67c25 -Block 0028 [ 48]: 1601c62c372c34f7 -Block 0028 [ 49]: ef991ed46d8962bb -Block 0028 [ 50]: c46aaf9aad78363c -Block 0028 [ 51]: ae3d60d0f936b476 -Block 0028 [ 52]: 586497acea9f825f -Block 0028 [ 53]: 1e5e9b93f8e908b4 -Block 0028 [ 54]: 84150a537817bbed -Block 0028 [ 55]: 9c90f15684c67664 -Block 0028 [ 56]: 748bce5e9ace006c -Block 0028 [ 57]: 40806573bfee5c67 -Block 0028 [ 58]: e3733f18a4c45c64 -Block 0028 [ 59]: 57daf992dedd6bd8 -Block 0028 [ 60]: 576e707078a8fdf4 -Block 0028 [ 61]: a666874b98a57c09 -Block 0028 [ 62]: 2f46e59e30aced2e -Block 0028 [ 63]: 227c2fbdab49e93b -Block 0028 [ 64]: 22dc42d4f0c4ff92 -Block 0028 [ 65]: 68d18cd2f1a92b20 -Block 0028 [ 66]: f0901635eb95dfe6 -Block 0028 [ 67]: ebbf5fc8f1c08a24 -Block 0028 [ 68]: 3560e312285ddca2 -Block 0028 [ 69]: 286222d30dd6e292 -Block 0028 [ 70]: 0e38078f4970af1a -Block 0028 [ 71]: a4b5730f656a7f48 -Block 0028 [ 72]: 5490a1f601b9815d -Block 0028 [ 73]: a55db213eb190453 -Block 0028 [ 74]: 31e4ae9fe533b445 -Block 0028 [ 75]: 1785f0289aefae64 -Block 0028 [ 76]: 7335275f1235e537 -Block 0028 [ 77]: 4bbf52e14238737a -Block 0028 [ 78]: 6861fe9ddce61ee8 -Block 0028 [ 79]: e60dadb10ce28e0e -Block 0028 [ 80]: 814f56901266955d -Block 0028 [ 81]: b70226ef0a619175 -Block 0028 [ 82]: 655ee0e452b64755 -Block 0028 [ 83]: 559e78bc00e00d4c -Block 0028 [ 84]: 2d365d7d806b2c66 -Block 0028 [ 85]: a76e099c88382c82 -Block 0028 [ 86]: 7c54f1a662d1b2f0 -Block 0028 [ 87]: f8d6b44f41b1fbde -Block 0028 [ 88]: aec2525faee8e074 -Block 0028 [ 89]: 3ba7df6ba9154052 -Block 0028 [ 90]: 10ab17547d300b4b -Block 0028 [ 91]: 631645cf561c2263 -Block 0028 [ 92]: 38deeb67de925bd6 -Block 0028 [ 93]: 247d70ecaea720a9 -Block 0028 [ 94]: 3942012c3e59cd0a -Block 0028 [ 95]: 79a8e59965f50d74 -Block 0028 [ 96]: ae64ce04808b8731 -Block 0028 [ 97]: a82922e0aef538b3 -Block 0028 [ 98]: 4896dd57583cf5c1 -Block 0028 [ 99]: 1b54a6fe3f0402fe -Block 0028 [100]: a3bbdef1744dedd2 -Block 0028 [101]: 50d7c4ec590c94d8 -Block 0028 [102]: 0412d51b93b7c6fa -Block 0028 [103]: b284143fa99ccfed -Block 0028 [104]: 26afb8dcd15eb953 -Block 0028 [105]: 780412654e5192b6 -Block 0028 [106]: 1b5a25166f37ae89 -Block 0028 [107]: a2fe1bdcc97ff964 -Block 0028 [108]: 0a76accb203f1b96 -Block 0028 [109]: a3776057d2937236 -Block 0028 [110]: 97a41d4001d420ea -Block 0028 [111]: 1983d7acbfe92b00 -Block 0028 [112]: 467fc549919b5a61 -Block 0028 [113]: 102dd46280e147de -Block 0028 [114]: 82fced5a379d04e5 -Block 0028 [115]: 34c59296d5c25fee -Block 0028 [116]: 33984b7359faf528 -Block 0028 [117]: 19644a6bbb96873b -Block 0028 [118]: a8e0d86b9c37af6d -Block 0028 [119]: 26772e3696ef3b35 -Block 0028 [120]: 53441d026ca0b04b -Block 0028 [121]: f6369a5b0acb8901 -Block 0028 [122]: d39b69a195db4abd -Block 0028 [123]: e4ea5c6afc40960f -Block 0028 [124]: 7eb6485d679d4104 -Block 0028 [125]: f8eddbdf128b40cb -Block 0028 [126]: aa922a03672a8939 -Block 0028 [127]: bbfa96187ed10163 -Block 0029 [ 0]: 4404e79fd03776e5 -Block 0029 [ 1]: 808f9962df1ae158 -Block 0029 [ 2]: 5f35ae1b31a76bb2 -Block 0029 [ 3]: 3fc4547a07bf1854 -Block 0029 [ 4]: 488f357d253a1362 -Block 0029 [ 5]: 7d6ab99447468ed2 -Block 0029 [ 6]: e101c05afc23a427 -Block 0029 [ 7]: 54c4ef1b9b855bd3 -Block 0029 [ 8]: a1d03a62e43f8292 -Block 0029 [ 9]: 12b6785de8a09162 -Block 0029 [ 10]: 000aff43ee79c784 -Block 0029 [ 11]: d8a67d7f4a0d5d5d -Block 0029 [ 12]: 974e8d8c31633393 -Block 0029 [ 13]: 0023f6283566393b -Block 0029 [ 14]: 0f8e8e0a9c856b92 -Block 0029 [ 15]: f0e6de7574e8de59 -Block 0029 [ 16]: 1511602535645209 -Block 0029 [ 17]: 4c1ec498b136967f -Block 0029 [ 18]: 6c8f610c2eb03554 -Block 0029 [ 19]: d263fd514948af88 -Block 0029 [ 20]: 202e17af99bb4866 -Block 0029 [ 21]: 9ac97f5b38973aef -Block 0029 [ 22]: cb2fb07f80b1f4c1 -Block 0029 [ 23]: a5fe298d9d72f14e -Block 0029 [ 24]: 0aa60ccb80278f06 -Block 0029 [ 25]: 34445d153a674af2 -Block 0029 [ 26]: a5ae2e22aae768ed -Block 0029 [ 27]: 537de1e920729bd6 -Block 0029 [ 28]: 1801f662131749ca -Block 0029 [ 29]: 97d8767044f9da6a -Block 0029 [ 30]: d29160e91e40ce69 -Block 0029 [ 31]: 1978451d11883970 -Block 0029 [ 32]: d45fa773f4c17640 -Block 0029 [ 33]: df102fe3ad8418fe -Block 0029 [ 34]: 1f4383bb94bfeb5c -Block 0029 [ 35]: f204dd9bf62006e6 -Block 0029 [ 36]: f5e9aa1cc8f2c452 -Block 0029 [ 37]: 68c8e2541b2eb1e1 -Block 0029 [ 38]: bd6a08255d83d623 -Block 0029 [ 39]: 141d4413b7e27035 -Block 0029 [ 40]: 8fc28425f1c6ddc8 -Block 0029 [ 41]: 315763c020ce0df9 -Block 0029 [ 42]: 2ef188655ccd4d54 -Block 0029 [ 43]: 2504ded0510bf310 -Block 0029 [ 44]: e00bb1157c2e8c4f -Block 0029 [ 45]: 05ae8d1643d868c5 -Block 0029 [ 46]: 1fff0638a5999406 -Block 0029 [ 47]: 283b28c741de7e21 -Block 0029 [ 48]: 2c493d2dacdf78d7 -Block 0029 [ 49]: 26ec38c4797ec312 -Block 0029 [ 50]: 0a8fbbb46f9d7121 -Block 0029 [ 51]: 9a46c3b15aa183b4 -Block 0029 [ 52]: 8ed11099f2761e80 -Block 0029 [ 53]: 90dd32bb0a45c3a5 -Block 0029 [ 54]: 34f51968efdca622 -Block 0029 [ 55]: e457943a6bc598f9 -Block 0029 [ 56]: ed880470e5758747 -Block 0029 [ 57]: a85c6ca1aedc0d64 -Block 0029 [ 58]: 520e443c4e066074 -Block 0029 [ 59]: 48b78160b6d911d3 -Block 0029 [ 60]: 2f9656ebb9d37abc -Block 0029 [ 61]: c3d117cc1ab3c489 -Block 0029 [ 62]: 5f997145c2c8ebbf -Block 0029 [ 63]: e12b0fa58ed93dd1 -Block 0029 [ 64]: 4543581fe2f0990a -Block 0029 [ 65]: ce9ec79474f06130 -Block 0029 [ 66]: 13d572daac86fdb1 -Block 0029 [ 67]: ae6cd4b262974a62 -Block 0029 [ 68]: 23497b36a1c78cec -Block 0029 [ 69]: 63b4c4217de59bfc -Block 0029 [ 70]: 3155fe204edc09b1 -Block 0029 [ 71]: fbdf0237d6ac506a -Block 0029 [ 72]: ee79105c9807021e -Block 0029 [ 73]: 6bfb8a1bbb310ef3 -Block 0029 [ 74]: 74622d1cca0ed342 -Block 0029 [ 75]: c539105c9e727e74 -Block 0029 [ 76]: c0a399a42230055c -Block 0029 [ 77]: 203053df632abe24 -Block 0029 [ 78]: 13732ba10ce9e8e0 -Block 0029 [ 79]: 92d8c6a7eb4cba2f -Block 0029 [ 80]: 8827ab8b69c0f7f9 -Block 0029 [ 81]: 88f40ead7dfa7fb2 -Block 0029 [ 82]: 431eccb39d1abf56 -Block 0029 [ 83]: dacff364cb26e27d -Block 0029 [ 84]: 241bc13751a6e283 -Block 0029 [ 85]: 46cb1c43864dc5b8 -Block 0029 [ 86]: 49d69a774a299d69 -Block 0029 [ 87]: 2bff0e7b35995290 -Block 0029 [ 88]: 3a659105b325fb4e -Block 0029 [ 89]: b5bce292f719867c -Block 0029 [ 90]: 80090c29789ca112 -Block 0029 [ 91]: 15a5ca1fa6e2aaea -Block 0029 [ 92]: de25532e31966d8c -Block 0029 [ 93]: f8ffde1a1c637f85 -Block 0029 [ 94]: 9171e29e4280937d -Block 0029 [ 95]: 90b45cfcb848b517 -Block 0029 [ 96]: edfd832a481a152b -Block 0029 [ 97]: f810f6f8064f465f -Block 0029 [ 98]: 39d750ed2039d0bf -Block 0029 [ 99]: fa4a1e1447324c92 -Block 0029 [100]: 824aadeb266b642e -Block 0029 [101]: 9f4c17afc1a606bd -Block 0029 [102]: 09bf69caf3c721d6 -Block 0029 [103]: b25dc5501a7f4814 -Block 0029 [104]: 881d3b32751e2a35 -Block 0029 [105]: a88d79d4c1fba15e -Block 0029 [106]: 4fe4c1bbe47dee02 -Block 0029 [107]: 23bf5f2de21587cd -Block 0029 [108]: df7aa3ce6c9c0a09 -Block 0029 [109]: a02e74446e2657e6 -Block 0029 [110]: cc60e31e33d6c4f6 -Block 0029 [111]: a09f2da2481b0763 -Block 0029 [112]: 0b2b1384f2124f27 -Block 0029 [113]: 89c63ba718168c82 -Block 0029 [114]: 5a61043d96d13192 -Block 0029 [115]: ebb1ce98d35b8f90 -Block 0029 [116]: 9dc50f8e18d13718 -Block 0029 [117]: e7d6c964ead7f9da -Block 0029 [118]: 90b675087a3940b3 -Block 0029 [119]: 5eef50e3c9b68430 -Block 0029 [120]: 62af3a224e6ce28c -Block 0029 [121]: 96984c57b60d4916 -Block 0029 [122]: aba3c89e948b9f92 -Block 0029 [123]: 57544a942bb5af40 -Block 0029 [124]: f66ae56a55153ab6 -Block 0029 [125]: 97309420faef1165 -Block 0029 [126]: a6cb3a785aea74fb -Block 0029 [127]: e1a5f37573462dbe -Block 0030 [ 0]: c4a8fd9627c5a47d -Block 0030 [ 1]: d372d170bd35b961 -Block 0030 [ 2]: 42a1b3a62c1169b2 -Block 0030 [ 3]: 9ab6aa1587d3eddf -Block 0030 [ 4]: f84406b7bd4594e4 -Block 0030 [ 5]: 6ddfeddd2b6bdc53 -Block 0030 [ 6]: 687c4b18ffbf9edd -Block 0030 [ 7]: a15d1e1b71b743d0 -Block 0030 [ 8]: 52730cd446dbd63e -Block 0030 [ 9]: fbbe0a5c53261dca -Block 0030 [ 10]: 33047cce19568e37 -Block 0030 [ 11]: addb511156a7a1af -Block 0030 [ 12]: c5477d82bbf2559a -Block 0030 [ 13]: 70b11daf1aaf02bb -Block 0030 [ 14]: 27251b8da2d89443 -Block 0030 [ 15]: 03b0356e4fd322ed -Block 0030 [ 16]: 9d4406baa010c2a1 -Block 0030 [ 17]: b005a3f65cd63694 -Block 0030 [ 18]: 29d46007f3ee0b7e -Block 0030 [ 19]: 64da2e53786f2126 -Block 0030 [ 20]: fe798fa3c3e26050 -Block 0030 [ 21]: 12a97db444270c96 -Block 0030 [ 22]: 2e0b9d47bf16f5f2 -Block 0030 [ 23]: cdcc69ab3c8ef1f2 -Block 0030 [ 24]: 4741e45445a6678e -Block 0030 [ 25]: 45abf8aebeb6f00a -Block 0030 [ 26]: 226f2f6953ec7ca3 -Block 0030 [ 27]: 13bc983dbcc285ed -Block 0030 [ 28]: 72d40c37c20a02c4 -Block 0030 [ 29]: 4c102717d6d656a9 -Block 0030 [ 30]: 5e79aaa2746e67d8 -Block 0030 [ 31]: 42cc680d6b4afd2b -Block 0030 [ 32]: b9d632fae3cc28d5 -Block 0030 [ 33]: c64d4ab875cb86b6 -Block 0030 [ 34]: 67c11e81b2ba60b4 -Block 0030 [ 35]: 6a6c40d772023a89 -Block 0030 [ 36]: e19dd8badb2e4216 -Block 0030 [ 37]: 53be5e4e20b1a601 -Block 0030 [ 38]: e4fc0a59fa146e1f -Block 0030 [ 39]: 99758907b065fbd5 -Block 0030 [ 40]: a80984191480bba0 -Block 0030 [ 41]: 5025c806e0569a00 -Block 0030 [ 42]: c0a535e23e65470d -Block 0030 [ 43]: e77995c440572a44 -Block 0030 [ 44]: d7c79537a8455c12 -Block 0030 [ 45]: 2b0bcc76eb68b8b8 -Block 0030 [ 46]: 0031fb133528a9ad -Block 0030 [ 47]: ebca5f4fca5a5287 -Block 0030 [ 48]: dba025e2aee7ee4a -Block 0030 [ 49]: de18654fd5a6daec -Block 0030 [ 50]: 68354a5bb40295bb -Block 0030 [ 51]: c7076ac90199a35f -Block 0030 [ 52]: 114405fe1c60af8d -Block 0030 [ 53]: 947ce0c0a8c90790 -Block 0030 [ 54]: 3361310a6fdea716 -Block 0030 [ 55]: 02bb9db176c892e7 -Block 0030 [ 56]: f90d5706fd35e35a -Block 0030 [ 57]: e2156232141eeb9f -Block 0030 [ 58]: 08f4471efa0ff800 -Block 0030 [ 59]: 3974a0f6c247c3bd -Block 0030 [ 60]: fed6515e21fbecea -Block 0030 [ 61]: 30ea20c394760c0c -Block 0030 [ 62]: d87e4d6eddbbb745 -Block 0030 [ 63]: 7b8cccfb2880810b -Block 0030 [ 64]: f1c99e4632e9f1ce -Block 0030 [ 65]: 6948a03ef039d701 -Block 0030 [ 66]: edca546e83989230 -Block 0030 [ 67]: 241d8f3bfa875aa7 -Block 0030 [ 68]: afd7565f7cd31111 -Block 0030 [ 69]: 7e36338afc723b26 -Block 0030 [ 70]: a0a901bf1ef2491d -Block 0030 [ 71]: 9704ec662a6f2274 -Block 0030 [ 72]: 1b9be6bf68a5f7b4 -Block 0030 [ 73]: 001627847aaaee2d -Block 0030 [ 74]: 43161987fbb74519 -Block 0030 [ 75]: dd31369e9bb1335c -Block 0030 [ 76]: 33814586064f1d5f -Block 0030 [ 77]: cc77565fc68364b1 -Block 0030 [ 78]: 89cc92134c98053c -Block 0030 [ 79]: ca22c6467315c0a5 -Block 0030 [ 80]: 49a66c3163bc8199 -Block 0030 [ 81]: 60abfd7551756c62 -Block 0030 [ 82]: 371443ce3e11231c -Block 0030 [ 83]: 49abdd0cc8d76912 -Block 0030 [ 84]: d4cb7475a4aa3404 -Block 0030 [ 85]: 8e824478b5989403 -Block 0030 [ 86]: 3886b07905fd269a -Block 0030 [ 87]: 1f0dc4948652f82a -Block 0030 [ 88]: b62bad9cb5c30a59 -Block 0030 [ 89]: aeae875734cf2887 -Block 0030 [ 90]: 0c986e320f30ee81 -Block 0030 [ 91]: 4b827cd42945a6d9 -Block 0030 [ 92]: e9cb7e75d24e1356 -Block 0030 [ 93]: d6d32db5b7ec3445 -Block 0030 [ 94]: 16aa7c5a5bad7059 -Block 0030 [ 95]: 43d59f33f342c8b5 -Block 0030 [ 96]: 2dcc68bca46025d2 -Block 0030 [ 97]: 429ac7c8ee851217 -Block 0030 [ 98]: 90c904513d9aa7bf -Block 0030 [ 99]: ba350b48edc86579 -Block 0030 [100]: 426a30161f7839d5 -Block 0030 [101]: c25cc2d336a32e58 -Block 0030 [102]: b958cfc711b9f939 -Block 0030 [103]: 1d4229ac7bb5dd8c -Block 0030 [104]: c5e93255ecab4ce0 -Block 0030 [105]: 2b86aa91c6e2e4fa -Block 0030 [106]: 0cc7a6672d285c49 -Block 0030 [107]: c2d7eee9234269e5 -Block 0030 [108]: f0707ce0a1f4d8a8 -Block 0030 [109]: 8378a40dcbfca7a7 -Block 0030 [110]: 1d127ac9de087e9b -Block 0030 [111]: 3fe93574207e1ad1 -Block 0030 [112]: b776f8bb45223858 -Block 0030 [113]: f7c51e3003714e52 -Block 0030 [114]: 3501b4ec55b44791 -Block 0030 [115]: 2bce85a6e98b7159 -Block 0030 [116]: aee18f3255b44e69 -Block 0030 [117]: 3993a16d5f337dd2 -Block 0030 [118]: a79ef642ab3a25f7 -Block 0030 [119]: fd5598a10072459a -Block 0030 [120]: e5a711c5649ed84a -Block 0030 [121]: 87b3640e02241add -Block 0030 [122]: ac919e23ba1fb501 -Block 0030 [123]: 5d44ecc8c2749ba8 -Block 0030 [124]: 8d41f01e81fc287f -Block 0030 [125]: 183a90a82f6b00e8 -Block 0030 [126]: 8620ea87468a36fb -Block 0030 [127]: 8165d72c97466f11 -Block 0031 [ 0]: 575e616d866cded1 -Block 0031 [ 1]: d0c56fd53ebd74ff -Block 0031 [ 2]: 2a86edaf4d858805 -Block 0031 [ 3]: f639bf1987b479e5 -Block 0031 [ 4]: 730a432c62f491c5 -Block 0031 [ 5]: 1202b29b1cda7af8 -Block 0031 [ 6]: ce2dd01e1073741d -Block 0031 [ 7]: 36cb3d0949b5025b -Block 0031 [ 8]: 13e050ab11ea1337 -Block 0031 [ 9]: b4f44504e0be684d -Block 0031 [ 10]: 5c9fc9aebb6d6612 -Block 0031 [ 11]: ea0d448cd81ca4ac -Block 0031 [ 12]: a82b03ccf692d521 -Block 0031 [ 13]: 3d06ef267f0bbe24 -Block 0031 [ 14]: c5f8328a157b9f06 -Block 0031 [ 15]: 20a38ddff1a49442 -Block 0031 [ 16]: 5dcb0b307bf4d126 -Block 0031 [ 17]: c01b94bac0a4e5e9 -Block 0031 [ 18]: 11c3448ab906e24e -Block 0031 [ 19]: 355a0574c7d70dee -Block 0031 [ 20]: 0ea006d78c090c69 -Block 0031 [ 21]: 2ddcc814e8f5ec0c -Block 0031 [ 22]: fff0739c85757a45 -Block 0031 [ 23]: 7ee4982a1bfc4d86 -Block 0031 [ 24]: 3b67e4e2526ff9b7 -Block 0031 [ 25]: d7f70eb9fa227ead -Block 0031 [ 26]: 3544acf4b54868ec -Block 0031 [ 27]: 8bc614f0e28b6a92 -Block 0031 [ 28]: d2a934f539079ac3 -Block 0031 [ 29]: db0f9b2faf6c2b37 -Block 0031 [ 30]: fdcd90fa6b0f84ba -Block 0031 [ 31]: 8d0a2beb899c00fd -Block 0031 [ 32]: dc25a4332c55ea3d -Block 0031 [ 33]: 50881241f8e00f6e -Block 0031 [ 34]: 41cfcce5a5b3880a -Block 0031 [ 35]: 11614daf5026c828 -Block 0031 [ 36]: 3ddd9b304e9728d8 -Block 0031 [ 37]: e818ac2a459b8457 -Block 0031 [ 38]: 5cb8cdc8827cb247 -Block 0031 [ 39]: d5efdbab1707f2e9 -Block 0031 [ 40]: 7c65151a829c07dc -Block 0031 [ 41]: 7f6338d31e6fc39e -Block 0031 [ 42]: 8af2bcf2ed1333c8 -Block 0031 [ 43]: dda0aefa5afd4b09 -Block 0031 [ 44]: 5facf7534d9abe1f -Block 0031 [ 45]: 8ffe5101be9bd433 -Block 0031 [ 46]: 7e1a89924bab3829 -Block 0031 [ 47]: e0661ca19ba8b1bf -Block 0031 [ 48]: a8e58db69a52cdf9 -Block 0031 [ 49]: 2bcd1dd9262df44b -Block 0031 [ 50]: 2f555295c6346155 -Block 0031 [ 51]: 03f489ded473a2fb -Block 0031 [ 52]: f28bc8d4dbc4b7ec -Block 0031 [ 53]: 26d6c84798ffe2e3 -Block 0031 [ 54]: 97fae729b30dd563 -Block 0031 [ 55]: b12635047eb3acee -Block 0031 [ 56]: aff7ba90ab778f21 -Block 0031 [ 57]: 67fe61d236c7c6cf -Block 0031 [ 58]: cbae983adaf97906 -Block 0031 [ 59]: 30e8875063ca7545 -Block 0031 [ 60]: 19bf0a1582f83725 -Block 0031 [ 61]: 4c8341ee3ebf8e31 -Block 0031 [ 62]: a4a540b030e4792b -Block 0031 [ 63]: 138e0472265a2539 -Block 0031 [ 64]: 7fd36c1c40af40ec -Block 0031 [ 65]: 38be5ae88c76e298 -Block 0031 [ 66]: 18c6155b61fdc2a6 -Block 0031 [ 67]: d32f23f583f7b9c0 -Block 0031 [ 68]: 47c87ed6db4f5c38 -Block 0031 [ 69]: 9360da426e7b9ec5 -Block 0031 [ 70]: 471ca3f4eb2c7fd6 -Block 0031 [ 71]: 29ec5e7bc232e2a3 -Block 0031 [ 72]: 7686edcfdfed7037 -Block 0031 [ 73]: c35f7c9ac6b415a3 -Block 0031 [ 74]: fc56d6e6f2c6b330 -Block 0031 [ 75]: 802fb1c790d59658 -Block 0031 [ 76]: 919bf5530ba7c278 -Block 0031 [ 77]: 3a8aa8e56fd3c622 -Block 0031 [ 78]: 7d88cdd1f416e205 -Block 0031 [ 79]: 5e87c9fbc69552fc -Block 0031 [ 80]: e498a967d0ff8ec3 -Block 0031 [ 81]: 7c4349736a7b011b -Block 0031 [ 82]: 12adf2f4f56813de -Block 0031 [ 83]: d39787d17315a62d -Block 0031 [ 84]: 5a8a67341b955b7b -Block 0031 [ 85]: 8b65860241795c97 -Block 0031 [ 86]: 2c23d7d3bb43b2d6 -Block 0031 [ 87]: 43563f6cebd735b9 -Block 0031 [ 88]: 2aac7340a8a95510 -Block 0031 [ 89]: 79d30b598e436c93 -Block 0031 [ 90]: 1ca23b39c9a1f01a -Block 0031 [ 91]: 6d0bbace3cb89348 -Block 0031 [ 92]: 6268a2d39a912f00 -Block 0031 [ 93]: f5e167b29717e9ff -Block 0031 [ 94]: c5adfac7cfb2e07c -Block 0031 [ 95]: fe31b165de131497 -Block 0031 [ 96]: eda3b5f044a5650c -Block 0031 [ 97]: f2ffe58385c2cc7d -Block 0031 [ 98]: c85a79c4a8b5ed65 -Block 0031 [ 99]: a7063351c8c83c32 -Block 0031 [100]: ceafa39d17f8c3d9 -Block 0031 [101]: 341cd82e8aedd1ca -Block 0031 [102]: 0a42ae65f74aaf51 -Block 0031 [103]: e3d41dd612a09b65 -Block 0031 [104]: f3ae25982ef782f8 -Block 0031 [105]: ff109e3fbd5ee836 -Block 0031 [106]: c03d53f10518d1fc -Block 0031 [107]: 14d022a4b677f1be -Block 0031 [108]: 1c130fc69a5e1c06 -Block 0031 [109]: e2b85a1ca95da14c -Block 0031 [110]: 85d97caf315c08ef -Block 0031 [111]: 30029f09eb2e6383 -Block 0031 [112]: 2921e8257b92bcbe -Block 0031 [113]: fb97db2b711a3e60 -Block 0031 [114]: ff464a83e7152778 -Block 0031 [115]: 3b8f587cfef05f26 -Block 0031 [116]: 04d9e75c766c2b45 -Block 0031 [117]: d7bc0ceef1fd32d6 -Block 0031 [118]: 8ae936c2ca91af09 -Block 0031 [119]: d777bdec939101d6 -Block 0031 [120]: d3b1abe83999ee4c -Block 0031 [121]: 6ff4ee863c1ade4b -Block 0031 [122]: 17fa2286d2d5536e -Block 0031 [123]: d16cb8c7377ff3ab -Block 0031 [124]: 4d4b435cea35caa6 -Block 0031 [125]: c582210d99ad1359 -Block 0031 [126]: d087971b36fd6d77 -Block 0031 [127]: a55222a93754c692 - - After pass 2: -Block 0000 [ 0]: 942363968ce597a4 -Block 0000 [ 1]: a22448c0bdad5760 -Block 0000 [ 2]: a5f80662b6fa8748 -Block 0000 [ 3]: a0f9b9ce392f719f -Block 0000 [ 4]: 24771fac2c17fe57 -Block 0000 [ 5]: 6e05b2f1ffe5958f -Block 0000 [ 6]: cc45370bae5b130c -Block 0000 [ 7]: 0461f05eb0d65592 -Block 0000 [ 8]: 2eea1c82a49d6d34 -Block 0000 [ 9]: 12272607e15dfaa6 -Block 0000 [ 10]: 216906860b21749d -Block 0000 [ 11]: 00f651387251d250 -Block 0000 [ 12]: bcd2a5a392a2a43b -Block 0000 [ 13]: 9ee681ed300fdaaa -Block 0000 [ 14]: 318842723fcaae05 -Block 0000 [ 15]: d85a06bed01fb22b -Block 0000 [ 16]: 046350dc9c48ebbc -Block 0000 [ 17]: 647ee04f98fa7866 -Block 0000 [ 18]: 4dbe4ba16bfe120d -Block 0000 [ 19]: b45bca27a0cc788f -Block 0000 [ 20]: 7389557b3110dc12 -Block 0000 [ 21]: f67c7e37ff5ca6ca -Block 0000 [ 22]: 8d537efc16faac0d -Block 0000 [ 23]: 7a1eec8e08032c79 -Block 0000 [ 24]: 18bd8c2566663679 -Block 0000 [ 25]: 37593d71f6d59696 -Block 0000 [ 26]: 5f3d78a4aa578228 -Block 0000 [ 27]: e7cc793ba9a67c95 -Block 0000 [ 28]: 11761062c6beafc8 -Block 0000 [ 29]: 7a83734d47c94656 -Block 0000 [ 30]: 696353b55d34a549 -Block 0000 [ 31]: 0aa08d75ceaa2e4f -Block 0000 [ 32]: 020d1de2ccff07b8 -Block 0000 [ 33]: 3ac26f355b98a77f -Block 0000 [ 34]: 586b7fb7feac8d82 -Block 0000 [ 35]: 93520e3647f3fe9c -Block 0000 [ 36]: 3c40d90c4b43341b -Block 0000 [ 37]: 08d66d2abf80b9f5 -Block 0000 [ 38]: 1449609ac46a56d9 -Block 0000 [ 39]: 3ba305ee8fe112da -Block 0000 [ 40]: 75cb629b14266f70 -Block 0000 [ 41]: a27b5b5bfd1c5714 -Block 0000 [ 42]: 49f36a01e2990b54 -Block 0000 [ 43]: f5931fd9cdc548b0 -Block 0000 [ 44]: 126f15612a2b63ce -Block 0000 [ 45]: 16a3669213a9a111 -Block 0000 [ 46]: 86401a84f8178304 -Block 0000 [ 47]: af79709b402f275c -Block 0000 [ 48]: d8930abf6da1c122 -Block 0000 [ 49]: ce56fbf6ebc01e9f -Block 0000 [ 50]: bd302509949084b3 -Block 0000 [ 51]: 64571e4fbbb3a212 -Block 0000 [ 52]: 56989272fe4320c3 -Block 0000 [ 53]: cb17c879d6d1f781 -Block 0000 [ 54]: d47a5d5f78d8f717 -Block 0000 [ 55]: 7bd868fbb7d3bf87 -Block 0000 [ 56]: 3e06553276dd63fe -Block 0000 [ 57]: 96466ee2d93c3caf -Block 0000 [ 58]: c2795e4533e384ab -Block 0000 [ 59]: 4ecabafa9d24c35e -Block 0000 [ 60]: 3e49dda72dfec548 -Block 0000 [ 61]: d027a1cb462d9ece -Block 0000 [ 62]: c93fe06270637d9d -Block 0000 [ 63]: 9ec49544e821fe72 -Block 0000 [ 64]: 97422029aef16a01 -Block 0000 [ 65]: 509e9e1054482d9d -Block 0000 [ 66]: 4d81c6d9e4fc0b4a -Block 0000 [ 67]: 59d4d46649466f76 -Block 0000 [ 68]: 7cb23f332c9e4b4c -Block 0000 [ 69]: bb795a50d4cd9f67 -Block 0000 [ 70]: 03b3a556f49e6d9f -Block 0000 [ 71]: 46a55683aa7cef1e -Block 0000 [ 72]: c7ede4dc5bc2f8e7 -Block 0000 [ 73]: 9533f8b974ea3cdd -Block 0000 [ 74]: b14b8a6d3399fb80 -Block 0000 [ 75]: 27c6b38badcaaeb8 -Block 0000 [ 76]: d7f483a98d2fa5ef -Block 0000 [ 77]: 4dce2ae80c619079 -Block 0000 [ 78]: 76219242e50e0e96 -Block 0000 [ 79]: a6d693a4c51dae38 -Block 0000 [ 80]: 2dcfbb729b1c3980 -Block 0000 [ 81]: 25f0264a26573a39 -Block 0000 [ 82]: b33a6ef25e1913bb -Block 0000 [ 83]: 7517c5c1acea4bea -Block 0000 [ 84]: 2c4ef6504acd5c35 -Block 0000 [ 85]: 129b9cb8b3cdd94d -Block 0000 [ 86]: dbdd6a53ddf36d6e -Block 0000 [ 87]: 78afa24a3cb6b14b -Block 0000 [ 88]: 53bce6911d203682 -Block 0000 [ 89]: 1a34077b1e8e0eef -Block 0000 [ 90]: ae9e591ae3feb90b -Block 0000 [ 91]: 691a26ef618ecf6d -Block 0000 [ 92]: 8bb8d772358e5b1e -Block 0000 [ 93]: cffd14266ff9bb4d -Block 0000 [ 94]: 3ba46898bd5d5cfe -Block 0000 [ 95]: 77ad33988adec25a -Block 0000 [ 96]: ed3dead883350bea -Block 0000 [ 97]: 5d0a7ac353b24c31 -Block 0000 [ 98]: 6e6ac3e921ba46c9 -Block 0000 [ 99]: bed9e5b4d3899d3f -Block 0000 [100]: 9c0a0d3141428032 -Block 0000 [101]: 4a7f5f1c6292066b -Block 0000 [102]: 8761870ad510760d -Block 0000 [103]: 34938635ae1e4ad2 -Block 0000 [104]: 319eef4153643e18 -Block 0000 [105]: 27c87dfc969ea38d -Block 0000 [106]: 1737ef12f143cf54 -Block 0000 [107]: f815a1261999f96c -Block 0000 [108]: b5a14e371b524464 -Block 0000 [109]: 375979aa1d218a95 -Block 0000 [110]: cc671fe6a831c39d -Block 0000 [111]: 066dfa49ab4e6a24 -Block 0000 [112]: a4e5ab7b49e89ee7 -Block 0000 [113]: 314a326354659a90 -Block 0000 [114]: 6a0b43eff1de6f34 -Block 0000 [115]: 511b2e464fbc1f54 -Block 0000 [116]: 9937ac736a9569bb -Block 0000 [117]: d4259cc337fc3d15 -Block 0000 [118]: 588c20cfd35c4f5a -Block 0000 [119]: 6de3c00c4bc54f53 -Block 0000 [120]: f59c53752dd831a3 -Block 0000 [121]: 0f0d13178cea41b4 -Block 0000 [122]: a2eb999a027b86bf -Block 0000 [123]: e3559fb8e02731a4 -Block 0000 [124]: 8f9d752260ae9a4e -Block 0000 [125]: 29610b46dc6b52d2 -Block 0000 [126]: 42c6958af7594776 -Block 0000 [127]: 3b85740e71d4f71c -Block 0001 [ 0]: 8933e64816bc3c32 -Block 0001 [ 1]: 6b5d511f307c772b -Block 0001 [ 2]: 640e9c6f13125dac -Block 0001 [ 3]: c92724968dd54857 -Block 0001 [ 4]: d01ef9226eea4842 -Block 0001 [ 5]: e4655aa75ade15e7 -Block 0001 [ 6]: d477f48bed63310e -Block 0001 [ 7]: 69446abfe437eed2 -Block 0001 [ 8]: c4d1ea35f24a6f9a -Block 0001 [ 9]: b722107dc9c051e5 -Block 0001 [ 10]: 7750e4d202970704 -Block 0001 [ 11]: 8f8d1225a1bb42b7 -Block 0001 [ 12]: 4815590b75935d30 -Block 0001 [ 13]: 8208be64cc777087 -Block 0001 [ 14]: 73658f6c3af494a8 -Block 0001 [ 15]: 8b45b07ebadf1b2e -Block 0001 [ 16]: f34672d581652805 -Block 0001 [ 17]: 3e3c2ed161e9783c -Block 0001 [ 18]: a96412916e27cc5e -Block 0001 [ 19]: 06c01bf7826e9676 -Block 0001 [ 20]: 9f2f79747ae9907d -Block 0001 [ 21]: 86d22c1e939b23c8 -Block 0001 [ 22]: 860e87de53661ec9 -Block 0001 [ 23]: 1b19dd2913f34830 -Block 0001 [ 24]: c482338b59ef1ceb -Block 0001 [ 25]: eef02a98bb1718f8 -Block 0001 [ 26]: 2a3028c482d0d6b8 -Block 0001 [ 27]: 41a33e0a0ee4ca9d -Block 0001 [ 28]: 9a9456826ba1f74b -Block 0001 [ 29]: dc7a699855869415 -Block 0001 [ 30]: 852d03d25c3c5552 -Block 0001 [ 31]: d2ee86e4fbf9a4e1 -Block 0001 [ 32]: e2a9984de71206b5 -Block 0001 [ 33]: 728a26a15dbe1fb8 -Block 0001 [ 34]: ec818010efee7f6b -Block 0001 [ 35]: f4c8deb3dda7c786 -Block 0001 [ 36]: 6cfb96299a245412 -Block 0001 [ 37]: 7c5d4798b69ca9db -Block 0001 [ 38]: 5117608953ac40a3 -Block 0001 [ 39]: 1ff1030837f3a401 -Block 0001 [ 40]: 0129f0e17cf81a8d -Block 0001 [ 41]: c1f67504af11f24b -Block 0001 [ 42]: 7c9d811e29ef25a8 -Block 0001 [ 43]: 81f677f8e4fb8d59 -Block 0001 [ 44]: 6a40f0cc7a8a67c9 -Block 0001 [ 45]: e364bcdbac9c6792 -Block 0001 [ 46]: 29dad8b26f8cc597 -Block 0001 [ 47]: 1de18f044b5ba657 -Block 0001 [ 48]: 560dcf64c69a6c6a -Block 0001 [ 49]: 6aa1734eeb3f606b -Block 0001 [ 50]: 832b835316929e03 -Block 0001 [ 51]: 515d7e6ed1bf35c7 -Block 0001 [ 52]: 44d6de77335af04b -Block 0001 [ 53]: cf83557f9c2f3136 -Block 0001 [ 54]: 1251e369a95fcbbd -Block 0001 [ 55]: 608ba509ab302690 -Block 0001 [ 56]: 0423987eaafa50ab -Block 0001 [ 57]: d6cc93d3499879ee -Block 0001 [ 58]: 2456b39d82c2cba5 -Block 0001 [ 59]: fb07b4c94e7fa26f -Block 0001 [ 60]: eef2846f701cfa79 -Block 0001 [ 61]: 396ef23e96ed436b -Block 0001 [ 62]: dfa3b158325a5a2b -Block 0001 [ 63]: 8328fe5f61fb1f69 -Block 0001 [ 64]: 67c5143d52a8bfa7 -Block 0001 [ 65]: 19c43cb4735b5a86 -Block 0001 [ 66]: c810ae9fa3aa1c65 -Block 0001 [ 67]: 644eaeb65e569d04 -Block 0001 [ 68]: e10b2172426640c7 -Block 0001 [ 69]: 8082ae7cea9ae7a7 -Block 0001 [ 70]: 4dad45a8e8ddcd81 -Block 0001 [ 71]: dbd1226270739902 -Block 0001 [ 72]: 68635f3be55dd5ce -Block 0001 [ 73]: b457f93d06b180fb -Block 0001 [ 74]: a0d61375996e95f0 -Block 0001 [ 75]: 12a32b840ad8cd18 -Block 0001 [ 76]: 7809824b4aaf59a5 -Block 0001 [ 77]: 606f87eaf9341152 -Block 0001 [ 78]: 1683a54b647f2788 -Block 0001 [ 79]: 8df012b829206704 -Block 0001 [ 80]: bb1e1e560210a4a5 -Block 0001 [ 81]: 085ce09838b355f0 -Block 0001 [ 82]: 1cbe49273e85fb04 -Block 0001 [ 83]: fdcb4b14f445be52 -Block 0001 [ 84]: 1741411a9c533a72 -Block 0001 [ 85]: a7754cc877040650 -Block 0001 [ 86]: 547b7149971b51e6 -Block 0001 [ 87]: 3ca1ecc928d222b5 -Block 0001 [ 88]: 89e6059b31bd2f39 -Block 0001 [ 89]: 5e89a65cfd712b20 -Block 0001 [ 90]: 8631701b830060cc -Block 0001 [ 91]: c26929b72cca2ba2 -Block 0001 [ 92]: 71e0ce4bc264c5bc -Block 0001 [ 93]: dbebf21eab539724 -Block 0001 [ 94]: 7e1172df492bc6ac -Block 0001 [ 95]: 1a5b7631e6107903 -Block 0001 [ 96]: 0b1f56228c4984ee -Block 0001 [ 97]: 9197c0f66deb44a2 -Block 0001 [ 98]: 2f590db75fecbcda -Block 0001 [ 99]: cc5337b5eac68e3c -Block 0001 [100]: 29dde35d7b47d989 -Block 0001 [101]: ef51d99f8cee0410 -Block 0001 [102]: b11819e8450fa788 -Block 0001 [103]: 7ddbf15350186d69 -Block 0001 [104]: 568a1d424a1f63a4 -Block 0001 [105]: 7484d6c5e05e9998 -Block 0001 [106]: 2ac73044bf7528d3 -Block 0001 [107]: 433686c08c23d13f -Block 0001 [108]: 02dfbbff143a2605 -Block 0001 [109]: 9b0b16287f9868ae -Block 0001 [110]: f0f555d7f2b42574 -Block 0001 [111]: 5753eae110f92768 -Block 0001 [112]: 1558a16313a709c0 -Block 0001 [113]: 00e7dd7e011f526b -Block 0001 [114]: 47b62bca94aabcb8 -Block 0001 [115]: c44a080576b41634 -Block 0001 [116]: 51d000afc76f6940 -Block 0001 [117]: e8f146885de969e6 -Block 0001 [118]: 7d755b45c4babd6d -Block 0001 [119]: e8dcb75ff43079d7 -Block 0001 [120]: cd8686c282174b8e -Block 0001 [121]: 0437758a4f2771cb -Block 0001 [122]: 36547a9cf289cecd -Block 0001 [123]: 73eb73f11a143bc1 -Block 0001 [124]: 77a96e30c3bbbe56 -Block 0001 [125]: 3adf14fe652f6b47 -Block 0001 [126]: c39db9672c033a5e -Block 0001 [127]: 5428b1c8e77ae9bd -Block 0002 [ 0]: 27143d2f1efffa3b -Block 0002 [ 1]: 92054d8203ce8b23 -Block 0002 [ 2]: 7adfb7b6bcc72a95 -Block 0002 [ 3]: 2e9b30722a801455 -Block 0002 [ 4]: 07d38bb53dc981b9 -Block 0002 [ 5]: 50aef2f924d4aeec -Block 0002 [ 6]: 63356ab028532887 -Block 0002 [ 7]: 3d81696f259e64e0 -Block 0002 [ 8]: b7687d4458cd64ef -Block 0002 [ 9]: 2bd8d2f76c5905d0 -Block 0002 [ 10]: 79f82c385784f252 -Block 0002 [ 11]: 1c81144344d2b68e -Block 0002 [ 12]: 883d9dc766b4a30c -Block 0002 [ 13]: 611e0378bc6a49c8 -Block 0002 [ 14]: 7a9cad2711172433 -Block 0002 [ 15]: 787c5fb132ea2d0a -Block 0002 [ 16]: d27f3d126ba19edd -Block 0002 [ 17]: 02dde8594c9906eb -Block 0002 [ 18]: 3c6e00c96752f958 -Block 0002 [ 19]: 4fddb42e97f8d0d3 -Block 0002 [ 20]: 3f19d4814968bf82 -Block 0002 [ 21]: e08abaf6f1035dd9 -Block 0002 [ 22]: b80a7e82adf0f85c -Block 0002 [ 23]: 298a9a8108dbf8e9 -Block 0002 [ 24]: 784856c72cf9ac8f -Block 0002 [ 25]: ffaccb829fa5f65c -Block 0002 [ 26]: ed2bf64259ea583f -Block 0002 [ 27]: ffe048699cd2a692 -Block 0002 [ 28]: f564e04d1a8a4252 -Block 0002 [ 29]: 6902f9c761dadfe7 -Block 0002 [ 30]: f3875beb4192b204 -Block 0002 [ 31]: ed38974911bda5e5 -Block 0002 [ 32]: 41e7282b8648818e -Block 0002 [ 33]: 457d44a3523f3b8a -Block 0002 [ 34]: 26140075cd70fb63 -Block 0002 [ 35]: c12aa89584f45da2 -Block 0002 [ 36]: 445c6774b1be85b5 -Block 0002 [ 37]: d82f3fe66a9835de -Block 0002 [ 38]: 272b4c1b006f6458 -Block 0002 [ 39]: e18a80e5de5f8f92 -Block 0002 [ 40]: b279ec48aba4a2cc -Block 0002 [ 41]: 2ef21bdf8fc95896 -Block 0002 [ 42]: f9378d25e10c2b8a -Block 0002 [ 43]: 9d2e6cea6629a6c0 -Block 0002 [ 44]: 2eae57a0d6ba83ad -Block 0002 [ 45]: 2eb4d8a56c8ca748 -Block 0002 [ 46]: ee9ddb4fd7973dad -Block 0002 [ 47]: c4bf57a84c7bf795 -Block 0002 [ 48]: 6c4d217528dbf560 -Block 0002 [ 49]: 7d6f8af4eab0cd59 -Block 0002 [ 50]: 776bd3efb2f3b8fe -Block 0002 [ 51]: 8e0795aba13eb6a6 -Block 0002 [ 52]: dd5aae2ed78391da -Block 0002 [ 53]: d53a11f1b81cfee2 -Block 0002 [ 54]: c344c6012479f24d -Block 0002 [ 55]: f86d097070bba89a -Block 0002 [ 56]: 85403fe0759bd9c0 -Block 0002 [ 57]: 6e351347eced8994 -Block 0002 [ 58]: 170574bf614f349e -Block 0002 [ 59]: 4a7477ce0bc54b02 -Block 0002 [ 60]: 2bec0e0a6e1f375a -Block 0002 [ 61]: 7216226a67c5d6ba -Block 0002 [ 62]: b44cf28046c7a845 -Block 0002 [ 63]: 3f0c4129f395817e -Block 0002 [ 64]: ffc0ff91b9057736 -Block 0002 [ 65]: ab1078ce910f14e2 -Block 0002 [ 66]: b2e8408a2695b35d -Block 0002 [ 67]: 8c1848ddfa66636f -Block 0002 [ 68]: 1faec37f9f1428ba -Block 0002 [ 69]: 19a8ca8cb3592af5 -Block 0002 [ 70]: 8c55e560993ea226 -Block 0002 [ 71]: 2b466f00788d83c3 -Block 0002 [ 72]: 04219396cc82f878 -Block 0002 [ 73]: 644028c105701847 -Block 0002 [ 74]: 71a90499ea6846bf -Block 0002 [ 75]: 1eafc2706c7debdf -Block 0002 [ 76]: 32d47b4a9d6c04f0 -Block 0002 [ 77]: b3e8d611184079c8 -Block 0002 [ 78]: 60c1676692032ccd -Block 0002 [ 79]: 51b6316cf58681da -Block 0002 [ 80]: fdd554b4196037df -Block 0002 [ 81]: 7311347f4036ef59 -Block 0002 [ 82]: 54da8cce51af74bb -Block 0002 [ 83]: 15dc8d1e1fcc4c47 -Block 0002 [ 84]: e1242b600438eb26 -Block 0002 [ 85]: 5e9af3576b040c3a -Block 0002 [ 86]: 9d498016f4513d1f -Block 0002 [ 87]: dc77cdca25c279da -Block 0002 [ 88]: 64b1c3dafd531d4c -Block 0002 [ 89]: daa8b3064bcd92f8 -Block 0002 [ 90]: 18c717b9bd23c6ff -Block 0002 [ 91]: 641efa1283ce1a64 -Block 0002 [ 92]: e812f651876e59d6 -Block 0002 [ 93]: dc93172e4dfdd48d -Block 0002 [ 94]: cb833b72b2363cde -Block 0002 [ 95]: 1e55a82cf0179cb9 -Block 0002 [ 96]: 898d29a991b9d2a1 -Block 0002 [ 97]: f08ac0673cb42432 -Block 0002 [ 98]: c70ab8e1546f0596 -Block 0002 [ 99]: d04126ac1778f91d -Block 0002 [100]: 4d89cc5ac78f54da -Block 0002 [101]: e61701e9ef2fd2ed -Block 0002 [102]: 27a0a559bfed8bc1 -Block 0002 [103]: 8bc653b6f5616da6 -Block 0002 [104]: b25b95c11540f139 -Block 0002 [105]: 935de0b89e2bf3a3 -Block 0002 [106]: c1ca9175889860ae -Block 0002 [107]: bad4d3e6aeef6ab6 -Block 0002 [108]: 8227429a091f7cac -Block 0002 [109]: bdaaa59b9599f80e -Block 0002 [110]: a5e0837fe0c873c4 -Block 0002 [111]: 218d782e87b94143 -Block 0002 [112]: c0697881686f0cbe -Block 0002 [113]: 08708761b2c12a57 -Block 0002 [114]: 990e8e0e2cc49a1a -Block 0002 [115]: 8159be87497fee30 -Block 0002 [116]: 770200c1ce09a3ee -Block 0002 [117]: 46f87161802bf7ae -Block 0002 [118]: 4d8ecc452b78cdb2 -Block 0002 [119]: eb42428ee6d8ebad -Block 0002 [120]: 6791a4843ae97f7e -Block 0002 [121]: 0844f63752143720 -Block 0002 [122]: 6d4ec9812e538900 -Block 0002 [123]: cac8c8d555e27212 -Block 0002 [124]: 50f57f07badc20af -Block 0002 [125]: 6878628488adcd8c -Block 0002 [126]: 456985a0caaca233 -Block 0002 [127]: 69bed6dacc1aecc6 -Block 0003 [ 0]: 4b0e087d223f8e25 -Block 0003 [ 1]: 910b21c025d932ed -Block 0003 [ 2]: 0f6b2e762d91655e -Block 0003 [ 3]: 7c0f520bc631d589 -Block 0003 [ 4]: 9823f0419761c5fe -Block 0003 [ 5]: bb8812442cf4a512 -Block 0003 [ 6]: 2ee03b353b0d5d03 -Block 0003 [ 7]: b73de85aea332935 -Block 0003 [ 8]: 0a633692f8316ba4 -Block 0003 [ 9]: 8b1c009d2c67cc73 -Block 0003 [ 10]: 1ecce5d630554dd9 -Block 0003 [ 11]: 443732d25e36560b -Block 0003 [ 12]: 544796fd126802aa -Block 0003 [ 13]: b04709f729b457ae -Block 0003 [ 14]: fcc5e7a2070bbbff -Block 0003 [ 15]: 1303b873028b16d8 -Block 0003 [ 16]: 8281b07b71a7b53b -Block 0003 [ 17]: ae345eb749a3b061 -Block 0003 [ 18]: f8c3c7d848a57090 -Block 0003 [ 19]: 2bc012ffd8e67259 -Block 0003 [ 20]: daa5f0425df20682 -Block 0003 [ 21]: 633c21a777c64b34 -Block 0003 [ 22]: 760a52c5bd088239 -Block 0003 [ 23]: 680d3b03371886cb -Block 0003 [ 24]: 1ddaff5ab4514179 -Block 0003 [ 25]: 3fc2baa599d33474 -Block 0003 [ 26]: 9331275233ff8127 -Block 0003 [ 27]: 6d8f7b0d99b8b9d6 -Block 0003 [ 28]: f11fdc68569752a4 -Block 0003 [ 29]: 46b1545d247bcdca -Block 0003 [ 30]: 07a9fa589f450696 -Block 0003 [ 31]: f94751714c942d6b -Block 0003 [ 32]: e936d6d0f1a555c1 -Block 0003 [ 33]: 9f23639b50f7b3eb -Block 0003 [ 34]: 77ecd6638ee94110 -Block 0003 [ 35]: 96692e332c8b554f -Block 0003 [ 36]: 5c0d272f724ef7d7 -Block 0003 [ 37]: c1522f5e06bd81a6 -Block 0003 [ 38]: 0b5c007bf5f11d0d -Block 0003 [ 39]: 62c5150317c2cdf5 -Block 0003 [ 40]: c97d944f9acbb3c8 -Block 0003 [ 41]: 9715798f0363471c -Block 0003 [ 42]: 1c1b4fef37aa3c9c -Block 0003 [ 43]: 7a86df1842374201 -Block 0003 [ 44]: 4f47ea46bef1b0da -Block 0003 [ 45]: fd6fa9c86175a7ea -Block 0003 [ 46]: 0f9f9b1230c86278 -Block 0003 [ 47]: 3995b03527037d27 -Block 0003 [ 48]: c263efdc370cdce2 -Block 0003 [ 49]: 84f20badc86c03f8 -Block 0003 [ 50]: 7c1005ec5f211ed6 -Block 0003 [ 51]: f8d06c05e9a72026 -Block 0003 [ 52]: 4aae8636403d1108 -Block 0003 [ 53]: 4546835813223393 -Block 0003 [ 54]: 1c2764d4cd5313cf -Block 0003 [ 55]: 725136f3051ef360 -Block 0003 [ 56]: b4d0034de3d614b0 -Block 0003 [ 57]: 792103a24761ffd4 -Block 0003 [ 58]: 4e38609d0044e97c -Block 0003 [ 59]: 9afa00b1d5dd4333 -Block 0003 [ 60]: 97dd3b7a6fa89f13 -Block 0003 [ 61]: e6092892e8bf751c -Block 0003 [ 62]: 6f55cba23b48301f -Block 0003 [ 63]: f1dccdff20ae0d89 -Block 0003 [ 64]: c3a9a019a2058563 -Block 0003 [ 65]: 765f13d5212bbed6 -Block 0003 [ 66]: be12cda3cad84c16 -Block 0003 [ 67]: ae93875e493e512f -Block 0003 [ 68]: 7ebc4b263a43ffb8 -Block 0003 [ 69]: 437953643dddd941 -Block 0003 [ 70]: 6e505fc1442766f0 -Block 0003 [ 71]: fee308509c0fb33a -Block 0003 [ 72]: 5636969202552bf8 -Block 0003 [ 73]: 27676e0c252b1003 -Block 0003 [ 74]: 186b7418403aa6e5 -Block 0003 [ 75]: 558cfdc97fbd6c3f -Block 0003 [ 76]: 631f97c52eb34738 -Block 0003 [ 77]: 9b3fc9f6107fa759 -Block 0003 [ 78]: cfd95882728d049b -Block 0003 [ 79]: 9c7f58fb99e270f7 -Block 0003 [ 80]: 7e38dc0cca98a684 -Block 0003 [ 81]: 198f7cf761235866 -Block 0003 [ 82]: 5319b61c46bda215 -Block 0003 [ 83]: f8c46a363243225b -Block 0003 [ 84]: d2740b3e180bb236 -Block 0003 [ 85]: 8254e42ad7fe9ca4 -Block 0003 [ 86]: 1d008ab69a2fd975 -Block 0003 [ 87]: b207601e992f963d -Block 0003 [ 88]: 3184eff21f0bfb58 -Block 0003 [ 89]: a9a6ddda5b3d04af -Block 0003 [ 90]: ca7eb6a074c159be -Block 0003 [ 91]: 22a707e28bf36d07 -Block 0003 [ 92]: d2274395db860d0e -Block 0003 [ 93]: 9532e6a03fbe3374 -Block 0003 [ 94]: 722c4483d24e0771 -Block 0003 [ 95]: 09529f5e75d973d7 -Block 0003 [ 96]: e6fde2e300ac1149 -Block 0003 [ 97]: e5ea399e35b56d85 -Block 0003 [ 98]: 76b8fccf34f67e03 -Block 0003 [ 99]: 685031d32e27fe9e -Block 0003 [100]: 21fd6ea20cfc5f82 -Block 0003 [101]: 888bffd8fe0e3b39 -Block 0003 [102]: 20056565ed74a83b -Block 0003 [103]: 86ae5f8cfec26527 -Block 0003 [104]: 045f8635c5deb96b -Block 0003 [105]: bf46419a235d6a27 -Block 0003 [106]: ed55a12bd839eefd -Block 0003 [107]: a46b03852768129f -Block 0003 [108]: e9392a5d93768be7 -Block 0003 [109]: 1755683d48f0c69b -Block 0003 [110]: f06e2709a9cd9675 -Block 0003 [111]: e589e4292cf704b5 -Block 0003 [112]: 6603b685775f4b74 -Block 0003 [113]: 6c64f5abd9163d64 -Block 0003 [114]: 8701c20eb13acd97 -Block 0003 [115]: 9d2f0e480ee351b5 -Block 0003 [116]: 7e2c0a9376088c82 -Block 0003 [117]: 6aa8c72815a770f1 -Block 0003 [118]: 0feb7b00d5113c68 -Block 0003 [119]: 72e79efd4e6f678c -Block 0003 [120]: 9c24b446c6641bd4 -Block 0003 [121]: 92a43699ecc3988f -Block 0003 [122]: 9dd3422d698d52c4 -Block 0003 [123]: 586130e96521c849 -Block 0003 [124]: a3a9e2624c22e9e2 -Block 0003 [125]: 7e982432d8e1761c -Block 0003 [126]: de238c4c31ab9518 -Block 0003 [127]: 9806bfa8d721de9f -Block 0004 [ 0]: db756afb20d0f801 -Block 0004 [ 1]: 52403c4b7098c439 -Block 0004 [ 2]: 060476b1eb46d30b -Block 0004 [ 3]: 28981d0098506ae3 -Block 0004 [ 4]: 0f05c643aa615a21 -Block 0004 [ 5]: cf2cc1388fa6c1d2 -Block 0004 [ 6]: 86fc3b76a8468c99 -Block 0004 [ 7]: a84397030daf6d8a -Block 0004 [ 8]: c650eb82be15bb19 -Block 0004 [ 9]: 253cf6e26b4655a8 -Block 0004 [ 10]: 085677dbf1566016 -Block 0004 [ 11]: 40fe9d75102201a6 -Block 0004 [ 12]: 613a5d61cdeb1b35 -Block 0004 [ 13]: fadad5a34a9cf63b -Block 0004 [ 14]: c3dd954823b55935 -Block 0004 [ 15]: b67522507c43fb2b -Block 0004 [ 16]: 601c060f0e8e6141 -Block 0004 [ 17]: ea466cf84f084dbd -Block 0004 [ 18]: f23820d8c13abd43 -Block 0004 [ 19]: b0e74adb6b084535 -Block 0004 [ 20]: c78e726fcffcbe09 -Block 0004 [ 21]: 398b885ddca727ab -Block 0004 [ 22]: 8e78fcdbf9a66417 -Block 0004 [ 23]: 5dbc6191b2232c06 -Block 0004 [ 24]: d706a14b2fc8ce39 -Block 0004 [ 25]: e4535ac6c8a26ed0 -Block 0004 [ 26]: 3805dfffecd51d9f -Block 0004 [ 27]: b4c63b72deaba3a6 -Block 0004 [ 28]: adb0c3bbb220b8e1 -Block 0004 [ 29]: 830dd01847112438 -Block 0004 [ 30]: c65d1ed36fe0fa0a -Block 0004 [ 31]: 449b624d9f7e4314 -Block 0004 [ 32]: 47856deea66fd6b6 -Block 0004 [ 33]: 336fd6e2c0b459dd -Block 0004 [ 34]: b24c5155dc84165f -Block 0004 [ 35]: 5b2785f6a2715313 -Block 0004 [ 36]: 4e1898ef2bf8c505 -Block 0004 [ 37]: d8b9094a47f656f2 -Block 0004 [ 38]: 12519f417bf4dfa7 -Block 0004 [ 39]: a977d962d47e354f -Block 0004 [ 40]: 691f4e137dbf082e -Block 0004 [ 41]: 5ad29eed2bac7fec -Block 0004 [ 42]: 427572e48fd7644e -Block 0004 [ 43]: 1b8cf180a1c73237 -Block 0004 [ 44]: 1aabf9f1184937da -Block 0004 [ 45]: 891cbda9e37ba68d -Block 0004 [ 46]: 0418daabe2c16169 -Block 0004 [ 47]: 64a7382e19d51973 -Block 0004 [ 48]: 8dbb4ef40e24566f -Block 0004 [ 49]: b11b05b045872fda -Block 0004 [ 50]: f3a6e55d9b5e47ff -Block 0004 [ 51]: b014a28f4444c68d -Block 0004 [ 52]: 36fd09913e88cc14 -Block 0004 [ 53]: 57dd73f3f6d83016 -Block 0004 [ 54]: 4fa25ff086004319 -Block 0004 [ 55]: 935ac3b9db1501e2 -Block 0004 [ 56]: 6e1a4444010c3cb4 -Block 0004 [ 57]: bde290d21f347b04 -Block 0004 [ 58]: 05fd38a4d47f0af6 -Block 0004 [ 59]: a3fbc08baf1fbede -Block 0004 [ 60]: 9595005e75362334 -Block 0004 [ 61]: 0b2ecde0552078e7 -Block 0004 [ 62]: be64f75e7900a732 -Block 0004 [ 63]: dfb4eb288d7eb5e4 -Block 0004 [ 64]: 20b14d8b83924244 -Block 0004 [ 65]: 04868735f30b39cf -Block 0004 [ 66]: c64982adce3c469f -Block 0004 [ 67]: 5b7b474fede2087a -Block 0004 [ 68]: 2c0a1912ad737151 -Block 0004 [ 69]: 1f4b24117b480cd2 -Block 0004 [ 70]: effcecfccbcfff8e -Block 0004 [ 71]: 2b0cb96832d4dc16 -Block 0004 [ 72]: e7fccf6dfa07ecd8 -Block 0004 [ 73]: 953afc6f861b1c94 -Block 0004 [ 74]: 725f8ba6d97ef823 -Block 0004 [ 75]: 5d2c69fd94b7e3d5 -Block 0004 [ 76]: f9fc85d4bd30520b -Block 0004 [ 77]: 54450477c83e21d1 -Block 0004 [ 78]: 2acbb625eda3b2f6 -Block 0004 [ 79]: 65ce6cc83e36847c -Block 0004 [ 80]: 157b6fcc033f9508 -Block 0004 [ 81]: 1e87646b58a7f2ad -Block 0004 [ 82]: 67d06c966e2ec700 -Block 0004 [ 83]: 7bb67c9e07139485 -Block 0004 [ 84]: 3c2a6ffb331055e9 -Block 0004 [ 85]: 3222341a5a4bfaa8 -Block 0004 [ 86]: 925790ae0fa10d1f -Block 0004 [ 87]: f2ef3171c9df4d0e -Block 0004 [ 88]: e3222a1744853453 -Block 0004 [ 89]: cc4a70c90ed4e3d1 -Block 0004 [ 90]: a6acce36d3cbff61 -Block 0004 [ 91]: 7d50ae85b9affa5d -Block 0004 [ 92]: 568200dc03447ed8 -Block 0004 [ 93]: 71ff3b3a01fab487 -Block 0004 [ 94]: 1c985317bb54925c -Block 0004 [ 95]: 05f623542b7f3397 -Block 0004 [ 96]: be9b653e7d14f39b -Block 0004 [ 97]: bf0c1f7dd51c1302 -Block 0004 [ 98]: bf86d9a6345007e9 -Block 0004 [ 99]: b820c3d21badb127 -Block 0004 [100]: 02834afe16035acc -Block 0004 [101]: 7fa95f3e1a84f66d -Block 0004 [102]: 515b912d57908619 -Block 0004 [103]: baa33b5032e8fcd6 -Block 0004 [104]: 7483cbfdef56254c -Block 0004 [105]: 3832871e97423269 -Block 0004 [106]: 72c7246ea679e000 -Block 0004 [107]: c9f8babb13cc69b0 -Block 0004 [108]: fb8757f84e77c30e -Block 0004 [109]: 9fdde5e1bb0e383e -Block 0004 [110]: 1766df9e43c5e58f -Block 0004 [111]: c618e86b1af6da02 -Block 0004 [112]: d7d9c781b3015ab0 -Block 0004 [113]: 51841b0d440e3795 -Block 0004 [114]: 282e5dcc69d5d2ec -Block 0004 [115]: 8cdad5cc0e82a1dc -Block 0004 [116]: e68c2af47545fd32 -Block 0004 [117]: 8350a28d7b542bb9 -Block 0004 [118]: 91372fdbb5b852bb -Block 0004 [119]: ded3484130d33a67 -Block 0004 [120]: f185eaf9a77023b2 -Block 0004 [121]: 26205250ddc11c7f -Block 0004 [122]: 39c3a7fcd987d77e -Block 0004 [123]: 8ff0734fe37406ac -Block 0004 [124]: 776c54ae235ecceb -Block 0004 [125]: 1df84f1a5ef7bc3d -Block 0004 [126]: f02e8b997b65c12f -Block 0004 [127]: d0efa6b02e97ed1d -Block 0005 [ 0]: 97365ec5d5feb9dc -Block 0005 [ 1]: 405a3347fb59461c -Block 0005 [ 2]: f9e0c320e8d154ed -Block 0005 [ 3]: 93d762daab5535f2 -Block 0005 [ 4]: e1279c771bb7ad39 -Block 0005 [ 5]: 2ddd3606c554bc2c -Block 0005 [ 6]: 6450a2130996c4f6 -Block 0005 [ 7]: 885bb49a481d2fe7 -Block 0005 [ 8]: 362b94e89df1c117 -Block 0005 [ 9]: 5ab9b69f2c8ac46c -Block 0005 [ 10]: 40ad27720d57185a -Block 0005 [ 11]: 8d50540d4e6e6d7b -Block 0005 [ 12]: 83a9e4ef385fe9d5 -Block 0005 [ 13]: b9b54d8b8f2984f5 -Block 0005 [ 14]: e1735ae8748ed910 -Block 0005 [ 15]: 0e446a07067a4e8e -Block 0005 [ 16]: c647cabca2bf8f7a -Block 0005 [ 17]: 94b2083ffab378f8 -Block 0005 [ 18]: ac8c8efc5e9ebb71 -Block 0005 [ 19]: a3c091fb4042d4fb -Block 0005 [ 20]: 0d3396a94e8f94e3 -Block 0005 [ 21]: 96d1456fabae1b0b -Block 0005 [ 22]: 26c474009eba6d80 -Block 0005 [ 23]: 5957c46a8e1c0c39 -Block 0005 [ 24]: d5aafbccb10c5642 -Block 0005 [ 25]: 1dd59c0f842f7fca -Block 0005 [ 26]: e3fa2b6c3eeca025 -Block 0005 [ 27]: 67c4520871b2e932 -Block 0005 [ 28]: 5ebd6871c2fc0b59 -Block 0005 [ 29]: 90d2edee6c1d9005 -Block 0005 [ 30]: dad34dbac094b87f -Block 0005 [ 31]: e54438ecb4b24f62 -Block 0005 [ 32]: 6eb10b8511b48f6d -Block 0005 [ 33]: 863ac85b81bb1c2b -Block 0005 [ 34]: 00ec6014392eb5b3 -Block 0005 [ 35]: 20c55c34c775b35b -Block 0005 [ 36]: 6a2efc2c5917a502 -Block 0005 [ 37]: b8cb8a562d9fd683 -Block 0005 [ 38]: f42931a0a29ccba2 -Block 0005 [ 39]: c3964b6d73dd347e -Block 0005 [ 40]: f23949b6fa10adc0 -Block 0005 [ 41]: 19a24ae861a83ccc -Block 0005 [ 42]: 49b34dc230aa14f5 -Block 0005 [ 43]: 277cc5b873776b0e -Block 0005 [ 44]: 6732bd0cbadb9619 -Block 0005 [ 45]: 2be9ae36f860f161 -Block 0005 [ 46]: 61592c3eb719855a -Block 0005 [ 47]: d2b629caba2aebec -Block 0005 [ 48]: 96247c1ae0664282 -Block 0005 [ 49]: 655c7c4537585a3c -Block 0005 [ 50]: 60b569ae13b6c8b1 -Block 0005 [ 51]: f335d545e50a4530 -Block 0005 [ 52]: 0bbbfaf0be722cbf -Block 0005 [ 53]: dfc61e9e557e44e5 -Block 0005 [ 54]: f15ae5152f91946f -Block 0005 [ 55]: 8b10184967e65648 -Block 0005 [ 56]: ee62ab86f357fbf6 -Block 0005 [ 57]: a676cd316f73b00a -Block 0005 [ 58]: e15dd8ae85ef70f7 -Block 0005 [ 59]: 0ed5e6375469b87b -Block 0005 [ 60]: bf4ad0c50a762ab1 -Block 0005 [ 61]: 0895b67633c14add -Block 0005 [ 62]: d4e44141246331d4 -Block 0005 [ 63]: 7bfc4a0d5c60bd78 -Block 0005 [ 64]: c88fee400aba9ca4 -Block 0005 [ 65]: b2bb482d8f37f64b -Block 0005 [ 66]: 8d19eb8ae10bb8e0 -Block 0005 [ 67]: 71647d13b3f2df80 -Block 0005 [ 68]: 330809743e2acd7a -Block 0005 [ 69]: 0b0a6e291fdd4d64 -Block 0005 [ 70]: 6ed960c9c7d0147a -Block 0005 [ 71]: 3d3453b5908f2eaf -Block 0005 [ 72]: 666a42e1953f7783 -Block 0005 [ 73]: 563179451c527b5e -Block 0005 [ 74]: 98de158b342a81a9 -Block 0005 [ 75]: 70ea5bed36f0c27c -Block 0005 [ 76]: c5d48e5c75044ac4 -Block 0005 [ 77]: 131d1cf79497fce4 -Block 0005 [ 78]: 502d4f9d9722d95a -Block 0005 [ 79]: 8cfd3119d03532ba -Block 0005 [ 80]: 847c8fed220b551f -Block 0005 [ 81]: 2de629f67b80ab43 -Block 0005 [ 82]: 366f96d310b73f7a -Block 0005 [ 83]: 882854c6aad02e67 -Block 0005 [ 84]: 655b8de717029a52 -Block 0005 [ 85]: ec848e02d002b2e7 -Block 0005 [ 86]: f468bcae80307e3b -Block 0005 [ 87]: e945840327a82759 -Block 0005 [ 88]: 44a9540fbc154202 -Block 0005 [ 89]: 92ecb8e9953e4b4a -Block 0005 [ 90]: 507abd983ab15f66 -Block 0005 [ 91]: 4b74dd58863117aa -Block 0005 [ 92]: 8f0c16a602e827b6 -Block 0005 [ 93]: 04dabe99055c7911 -Block 0005 [ 94]: 751498662fa26b4c -Block 0005 [ 95]: cab90768d911184e -Block 0005 [ 96]: f788ce69a19245e2 -Block 0005 [ 97]: d82096d5861d09b4 -Block 0005 [ 98]: d5a49556dd1a64a3 -Block 0005 [ 99]: 33c5d1ff3108f1c3 -Block 0005 [100]: 7000ced324095021 -Block 0005 [101]: 9c0b106f237035b0 -Block 0005 [102]: 5b0a824629eefaad -Block 0005 [103]: 9f3a70a53f500991 -Block 0005 [104]: 738807452e3a3632 -Block 0005 [105]: 2ed22603a5665055 -Block 0005 [106]: afe9ee256c051b3f -Block 0005 [107]: ac36d88864dd45fc -Block 0005 [108]: 4fcaa3b6e807e1ce -Block 0005 [109]: c149207930dabc97 -Block 0005 [110]: 2ac814034dc81dfc -Block 0005 [111]: 71edb390a916a67f -Block 0005 [112]: 20cf554180ffe9e0 -Block 0005 [113]: bb54c1d8ea79d355 -Block 0005 [114]: 2eb620e1e1811427 -Block 0005 [115]: 58d664027883cedf -Block 0005 [116]: a8fec49038889919 -Block 0005 [117]: a3bdcbb52bd4b630 -Block 0005 [118]: f6cd25ab758341dd -Block 0005 [119]: ae448eb1a7acb711 -Block 0005 [120]: 5d0d3d360339943f -Block 0005 [121]: 6b9a3ecd474aba3b -Block 0005 [122]: 2c534ae7c2a3b04f -Block 0005 [123]: e892ccac17c6456d -Block 0005 [124]: 7ff808f37169c921 -Block 0005 [125]: b8614be60c9c41bc -Block 0005 [126]: 439810b13ed01e1c -Block 0005 [127]: ca192babb18518cb -Block 0006 [ 0]: 5567c3fe090dd28e -Block 0006 [ 1]: 8d67a7ba019c88dc -Block 0006 [ 2]: 8caff62eff631181 -Block 0006 [ 3]: d72eddba14b5c03d -Block 0006 [ 4]: d7630af139b87bd7 -Block 0006 [ 5]: 750853f41bb331a8 -Block 0006 [ 6]: f8d103c297762291 -Block 0006 [ 7]: 2dae083ec585a586 -Block 0006 [ 8]: 626b2b63d161498a -Block 0006 [ 9]: c81de669dfeb13aa -Block 0006 [ 10]: 9c41b20f9889274c -Block 0006 [ 11]: 5c064dc661bbc6d6 -Block 0006 [ 12]: d8f6cb69aa556f7d -Block 0006 [ 13]: 569c7a1de808caf8 -Block 0006 [ 14]: f212e8fc9864aa7f -Block 0006 [ 15]: 784a66ec8fded6bf -Block 0006 [ 16]: 7b3644d8c7cc6ee2 -Block 0006 [ 17]: 47de720ab8662dc8 -Block 0006 [ 18]: b60758c5f35d33a3 -Block 0006 [ 19]: e82bc4ee11789ccd -Block 0006 [ 20]: b4b14f39ad071939 -Block 0006 [ 21]: cdc572feb64c77f6 -Block 0006 [ 22]: 4f1d233e9d2afb7a -Block 0006 [ 23]: 083f6f09f3589c18 -Block 0006 [ 24]: 91e9bb64b39eedc6 -Block 0006 [ 25]: ff631632c44b9be5 -Block 0006 [ 26]: 5f1d74f19fcf9ebb -Block 0006 [ 27]: c18575702765f410 -Block 0006 [ 28]: cb4c1f6b4b92ae73 -Block 0006 [ 29]: 2c47acff08aa3b6a -Block 0006 [ 30]: 7614e988f5de7f0d -Block 0006 [ 31]: 00aef92bc84ab36c -Block 0006 [ 32]: 8d568e3899bc329d -Block 0006 [ 33]: 93ee0cbb3fa97312 -Block 0006 [ 34]: 13d5658a3a5c3c06 -Block 0006 [ 35]: a19ab4c531fc3f3f -Block 0006 [ 36]: 0339f774914c7335 -Block 0006 [ 37]: 54e78c34c50dd35c -Block 0006 [ 38]: e222bc860018290d -Block 0006 [ 39]: 9c28c86cd7f61b70 -Block 0006 [ 40]: a85380135b847fc1 -Block 0006 [ 41]: 225414a9bdb19b61 -Block 0006 [ 42]: a0fbd39ccb46aa3f -Block 0006 [ 43]: 1ca6eb4988648f69 -Block 0006 [ 44]: 01695df4d0f0409a -Block 0006 [ 45]: d3b450827a33f3a7 -Block 0006 [ 46]: f5bfe4e78dc9b627 -Block 0006 [ 47]: 100ab041786e41d4 -Block 0006 [ 48]: 9d9d415f459fbe98 -Block 0006 [ 49]: 853fd4f2e9a42867 -Block 0006 [ 50]: ea657b6b10faf0d4 -Block 0006 [ 51]: 259e1b12b0f171fa -Block 0006 [ 52]: e8976ec91290563d -Block 0006 [ 53]: 1e412ebf6e0db035 -Block 0006 [ 54]: 849d615c1c6cfca2 -Block 0006 [ 55]: 5c11d9c6ce174cdb -Block 0006 [ 56]: 30b41a0e826fd9c2 -Block 0006 [ 57]: 31d73e96955f1340 -Block 0006 [ 58]: 14f074b7e26e3baa -Block 0006 [ 59]: 8eb1bec37ae581dc -Block 0006 [ 60]: 746facce259c02c9 -Block 0006 [ 61]: 03d1f7778abbe63f -Block 0006 [ 62]: eeff2118997dc86d -Block 0006 [ 63]: 90627027834a05e4 -Block 0006 [ 64]: 4bd0242cc3f044f7 -Block 0006 [ 65]: 519c2452cd1ca543 -Block 0006 [ 66]: e0ae6c47d727d6be -Block 0006 [ 67]: a913d15ae450d102 -Block 0006 [ 68]: 2823ac24a8d8fb6c -Block 0006 [ 69]: e907eb50e28565b1 -Block 0006 [ 70]: be0384795f998c29 -Block 0006 [ 71]: 3e3f5d9c252d4a47 -Block 0006 [ 72]: ed46fba6166a296e -Block 0006 [ 73]: 411e90d0cc8328fa -Block 0006 [ 74]: 332ca370c5b19bed -Block 0006 [ 75]: ac912248b236590e -Block 0006 [ 76]: 3ebd9154aea3189b -Block 0006 [ 77]: f3adf95f07c7edeb -Block 0006 [ 78]: 832321ca2483199f -Block 0006 [ 79]: 4b3578726e6d548e -Block 0006 [ 80]: b00c1ef3d8cbd83a -Block 0006 [ 81]: 7c29df3c99839f71 -Block 0006 [ 82]: 7825fea5c6892b1e -Block 0006 [ 83]: e99043733d5c8d15 -Block 0006 [ 84]: 3caccd923a60f855 -Block 0006 [ 85]: 2a3e154af80bf594 -Block 0006 [ 86]: 6688cc7c4764e11e -Block 0006 [ 87]: fa6ca05d1a601f5e -Block 0006 [ 88]: 04b5e8c105dd4562 -Block 0006 [ 89]: cbac7817e2e863ba -Block 0006 [ 90]: 58cd92a6c13b357e -Block 0006 [ 91]: ce4db34ad1d1bcbe -Block 0006 [ 92]: 68e21a26f2c97d49 -Block 0006 [ 93]: 53e396abb44d6f2c -Block 0006 [ 94]: 5cd31a0480291e4b -Block 0006 [ 95]: c91a9f8b190a4897 -Block 0006 [ 96]: 02ff4635b1f7bd99 -Block 0006 [ 97]: 6cea31788a0a3c45 -Block 0006 [ 98]: f22d5bf22fd3eb77 -Block 0006 [ 99]: 910e7439df3e5050 -Block 0006 [100]: ff94f950ee74b111 -Block 0006 [101]: b05178c84ae6c19f -Block 0006 [102]: eb2a7088c937b565 -Block 0006 [103]: 50d5dd2aea376866 -Block 0006 [104]: 7f629a6dd240c30b -Block 0006 [105]: 08a59c5edfe98396 -Block 0006 [106]: 55b920176a53d4c7 -Block 0006 [107]: 472c966c32a73ab0 -Block 0006 [108]: 6a1bcc98b4f8ed3d -Block 0006 [109]: b721fed948523009 -Block 0006 [110]: a0b34a33f38b99e6 -Block 0006 [111]: e748ba007b3555cd -Block 0006 [112]: e250a1b0cf3d4a97 -Block 0006 [113]: d0bc4b21724a5ef7 -Block 0006 [114]: 7b76eda1a50018cc -Block 0006 [115]: 71e663016941db15 -Block 0006 [116]: 9d11173466ba18c0 -Block 0006 [117]: 897602359be6f8c5 -Block 0006 [118]: 992dc7c6cfe686d7 -Block 0006 [119]: 69ed7655026d535b -Block 0006 [120]: 43619f859b7aa47e -Block 0006 [121]: 6f5f09231bc6deed -Block 0006 [122]: a7417d3014bb3f89 -Block 0006 [123]: cbf7dc5b9be3b6b4 -Block 0006 [124]: 61d700db25e0f849 -Block 0006 [125]: 70873a47587525cf -Block 0006 [126]: 58adc5e65f2ab161 -Block 0006 [127]: 6372caf551890b02 -Block 0007 [ 0]: e5af68ac92e3ce1d -Block 0007 [ 1]: 8ab48a815360139e -Block 0007 [ 2]: 599ee02270046677 -Block 0007 [ 3]: 3115b3b36ec22e74 -Block 0007 [ 4]: 133e5b0cc50ea01e -Block 0007 [ 5]: 66f56e0ec496e469 -Block 0007 [ 6]: 3c1fffec56f01c76 -Block 0007 [ 7]: e43cc0fb2e85690f -Block 0007 [ 8]: 85862c5ce7ac45c4 -Block 0007 [ 9]: 186e2f634a9f3780 -Block 0007 [ 10]: 24ef18172244e1cd -Block 0007 [ 11]: 943f3473b412bd6c -Block 0007 [ 12]: a477e8ba6d59ca13 -Block 0007 [ 13]: 5336924c59df8222 -Block 0007 [ 14]: abb2069e9dc9fb01 -Block 0007 [ 15]: 3d292c01089a9fe9 -Block 0007 [ 16]: 3b5d694eecf98e24 -Block 0007 [ 17]: e92b9a00a8274bf3 -Block 0007 [ 18]: a6d88a75c29b9553 -Block 0007 [ 19]: 9fe8d0d1b63840ce -Block 0007 [ 20]: 41d4833824e399d5 -Block 0007 [ 21]: 2e4556d5479df56b -Block 0007 [ 22]: d7beb6ba52a5e3cf -Block 0007 [ 23]: 60179b8e6b5bd794 -Block 0007 [ 24]: 9f76a53ba039b1c6 -Block 0007 [ 25]: 5ed48af982352227 -Block 0007 [ 26]: d58547fca3fb1f52 -Block 0007 [ 27]: 4ced6a9525b712c4 -Block 0007 [ 28]: f9e3aa78460a304b -Block 0007 [ 29]: b104cf2a586b2933 -Block 0007 [ 30]: 75eb7a8bca1ab23f -Block 0007 [ 31]: 3cdffacf21180e11 -Block 0007 [ 32]: 58d54ba682343f53 -Block 0007 [ 33]: 1ef6dcc2c4f22240 -Block 0007 [ 34]: 4d70211dafb7c9e8 -Block 0007 [ 35]: 2e3401d6c153aeff -Block 0007 [ 36]: a4829109c6b8d4c9 -Block 0007 [ 37]: d450dfd117330fc2 -Block 0007 [ 38]: bf9e6e9530001a66 -Block 0007 [ 39]: 35da1a2fa6ee32ce -Block 0007 [ 40]: f50b3d2a1f42afc6 -Block 0007 [ 41]: fedc5dfd801eb77e -Block 0007 [ 42]: 75bb865d03ea9a33 -Block 0007 [ 43]: 0ce9dfee891b34da -Block 0007 [ 44]: 965b86361b92d34c -Block 0007 [ 45]: 21c534a143787b87 -Block 0007 [ 46]: 872689c786a12d77 -Block 0007 [ 47]: 82c87d77434d10f1 -Block 0007 [ 48]: 31dbd1a3f4dcb526 -Block 0007 [ 49]: 98401b45be41281c -Block 0007 [ 50]: 493b2c530ac904ab -Block 0007 [ 51]: e64002673ddbe2c4 -Block 0007 [ 52]: ffa237b4d9f7c6b1 -Block 0007 [ 53]: f5c89a2d0c692df0 -Block 0007 [ 54]: ceaa1fcc80d1a707 -Block 0007 [ 55]: f0ed73be2d486643 -Block 0007 [ 56]: 2ce9741d5fd0d29a -Block 0007 [ 57]: b45b037a600dd4a8 -Block 0007 [ 58]: b6b867bf58753eba -Block 0007 [ 59]: dd0ba939cdef4048 -Block 0007 [ 60]: 67d73557e89394ab -Block 0007 [ 61]: f74e86f788e87bf0 -Block 0007 [ 62]: d2d266baf5e9202b -Block 0007 [ 63]: 995f928b5e0dc659 -Block 0007 [ 64]: b07a140277d0f7c8 -Block 0007 [ 65]: f05e1ae0444eccc6 -Block 0007 [ 66]: 33b96c500cb1d1b6 -Block 0007 [ 67]: 45136441ee11fd1b -Block 0007 [ 68]: 84c8824ae1e5edc3 -Block 0007 [ 69]: 860ba57d1b23aa52 -Block 0007 [ 70]: c84a54c4c7720146 -Block 0007 [ 71]: 2c35fbedbdace5a3 -Block 0007 [ 72]: ee3471988c8956d5 -Block 0007 [ 73]: c8e562b360fd8beb -Block 0007 [ 74]: 3ce39b5be84dc44f -Block 0007 [ 75]: 8e9a81d4cf5091e7 -Block 0007 [ 76]: 2661b97ce55a2d40 -Block 0007 [ 77]: 40f1554966b6a83a -Block 0007 [ 78]: b6a91f1e82939351 -Block 0007 [ 79]: 1ea224ba61929ccf -Block 0007 [ 80]: 24bbb716c04b5a1d -Block 0007 [ 81]: 3463f2a6a33663ba -Block 0007 [ 82]: 88c8abbed9e2fdf0 -Block 0007 [ 83]: 8124cf569702027c -Block 0007 [ 84]: 72d2441e9ad6a642 -Block 0007 [ 85]: bc4b5dcf6644ede7 -Block 0007 [ 86]: dccb3ae0b36a046c -Block 0007 [ 87]: 6634272be8ced6f9 -Block 0007 [ 88]: 891305818c792103 -Block 0007 [ 89]: f34a4ad0981c2e3d -Block 0007 [ 90]: 14c59749c7a6612d -Block 0007 [ 91]: 03f986b1327f47a6 -Block 0007 [ 92]: 43d9aeba262bce21 -Block 0007 [ 93]: 34f1ac6a86561bab -Block 0007 [ 94]: cdcb3b817cd99bcd -Block 0007 [ 95]: 95643e60b01b6c29 -Block 0007 [ 96]: 461a3563fc0e56f7 -Block 0007 [ 97]: bd3a2d183f293aab -Block 0007 [ 98]: d5789e856dd151bd -Block 0007 [ 99]: 7ed20b41f22451ac -Block 0007 [100]: 49712994024f26bb -Block 0007 [101]: a6d211b07780fd1d -Block 0007 [102]: 4f66c78a2f221653 -Block 0007 [103]: 0bc1dd9aa0830a9e -Block 0007 [104]: 250eeda980c9d642 -Block 0007 [105]: d201c949e6b6e459 -Block 0007 [106]: 576cde4cea26ab80 -Block 0007 [107]: 0bfc56658c0245d4 -Block 0007 [108]: e9f18a507c911fa4 -Block 0007 [109]: 2af0d6ca54f00132 -Block 0007 [110]: 297e9aaabf0d2ffa -Block 0007 [111]: 9f27fcd100c680dc -Block 0007 [112]: 8d39aeff9847b7ee -Block 0007 [113]: c80985dc01487e1e -Block 0007 [114]: f2fa0eb778c7af62 -Block 0007 [115]: f6394cf305a48740 -Block 0007 [116]: 015e6eabbb90e264 -Block 0007 [117]: bab21f929b7aab7e -Block 0007 [118]: dd466aed8166cfb7 -Block 0007 [119]: 4b6cb5dee28bc25b -Block 0007 [120]: 6098a17ecfe1a437 -Block 0007 [121]: b17491387f8bf0c0 -Block 0007 [122]: e8150e053b31d264 -Block 0007 [123]: 9603509225977b3c -Block 0007 [124]: bc8cd3f9c06cad39 -Block 0007 [125]: 3eaa4a01951d171c -Block 0007 [126]: 2ced5b180814e072 -Block 0007 [127]: 0060e85c62d0a2ec -Block 0008 [ 0]: 3bb7ae9e189f4b3f -Block 0008 [ 1]: 4871d3c6722a6c16 -Block 0008 [ 2]: 49d7f564e969f85c -Block 0008 [ 3]: 226bfa8e3fb66cc5 -Block 0008 [ 4]: 815d9f89ac664b79 -Block 0008 [ 5]: 7ca4a873f2e1ddbf -Block 0008 [ 6]: 0b3d92d79b49ee8c -Block 0008 [ 7]: 51c76e7c8fd0fb4f -Block 0008 [ 8]: 878b42e3b329ddb1 -Block 0008 [ 9]: 0c80181f9f2f6526 -Block 0008 [ 10]: 47eb5ddebb1291ff -Block 0008 [ 11]: 1c488d86f2f956a7 -Block 0008 [ 12]: 81063e175c0a41a9 -Block 0008 [ 13]: 78c27945ab3a11d0 -Block 0008 [ 14]: fa89b846df65fa62 -Block 0008 [ 15]: 54c262700a93c68f -Block 0008 [ 16]: b00923d64112c59c -Block 0008 [ 17]: f74e7ffa228ce2f0 -Block 0008 [ 18]: f2cfb80fec37299d -Block 0008 [ 19]: 43c5da6cb3d29e09 -Block 0008 [ 20]: 37c1cc0b0b683be4 -Block 0008 [ 21]: dbe418ef69d874c7 -Block 0008 [ 22]: c3a4dc36b63bdc1b -Block 0008 [ 23]: 4ad7a00fd1e79824 -Block 0008 [ 24]: af828d9bdb440528 -Block 0008 [ 25]: 7d89ae469511193d -Block 0008 [ 26]: f8569a874d5b7dba -Block 0008 [ 27]: e8966f0eff46620d -Block 0008 [ 28]: 221fd7081112bdb9 -Block 0008 [ 29]: 93b8a531f5841506 -Block 0008 [ 30]: 0f91faef8f459fe8 -Block 0008 [ 31]: ca2bd49cc88768f9 -Block 0008 [ 32]: 06e4a1f88407371e -Block 0008 [ 33]: a0658ae49d0e9b23 -Block 0008 [ 34]: 1e4cb8e54cc2324e -Block 0008 [ 35]: 2203d1a291721284 -Block 0008 [ 36]: d770a74079e19623 -Block 0008 [ 37]: 7206051e5574dd29 -Block 0008 [ 38]: cd399fada5c4aaaa -Block 0008 [ 39]: 0cb6960a5fa42edf -Block 0008 [ 40]: 5635ab47d64748d7 -Block 0008 [ 41]: 2bc716b701300050 -Block 0008 [ 42]: cef5872ca6db902e -Block 0008 [ 43]: 7160475a5e5c24b9 -Block 0008 [ 44]: 6f46f4222ed2e9ea -Block 0008 [ 45]: 9654e52ebcf77fc7 -Block 0008 [ 46]: 66ada969429a579c -Block 0008 [ 47]: dd4e6035012a1865 -Block 0008 [ 48]: 4c58b068f5496cd1 -Block 0008 [ 49]: ca46c2e8b1bc480b -Block 0008 [ 50]: b03db2a00420d0e6 -Block 0008 [ 51]: b0104b03cd81c752 -Block 0008 [ 52]: ccb51bf267691516 -Block 0008 [ 53]: 6f1b00350c4eb690 -Block 0008 [ 54]: 7a7d94de4caa1729 -Block 0008 [ 55]: d1e775ab9a27e50c -Block 0008 [ 56]: 2006ab215b5eae17 -Block 0008 [ 57]: 8876c48940376930 -Block 0008 [ 58]: 04f7adad534d0b43 -Block 0008 [ 59]: f36daf3f73b7648d -Block 0008 [ 60]: 11e7f9899d271b42 -Block 0008 [ 61]: 8ac2f8f3de06d2d4 -Block 0008 [ 62]: f258d11c38c78a60 -Block 0008 [ 63]: 0b4ebd059552ee96 -Block 0008 [ 64]: 9231af72054c88a6 -Block 0008 [ 65]: b2d22d56255d6a4c -Block 0008 [ 66]: 208809ca11cf7847 -Block 0008 [ 67]: 8df34a7478f9f5dd -Block 0008 [ 68]: 810e372ab981ce4b -Block 0008 [ 69]: 89c6f38f39971b50 -Block 0008 [ 70]: 900b46092a6eb453 -Block 0008 [ 71]: 63557a31e1c33595 -Block 0008 [ 72]: bb476c42a9874589 -Block 0008 [ 73]: d18c6d27105e48d2 -Block 0008 [ 74]: 67b78021633eb776 -Block 0008 [ 75]: 26a4cc2ec7627975 -Block 0008 [ 76]: 7a41ebe91b61c303 -Block 0008 [ 77]: 8719434029afdeb2 -Block 0008 [ 78]: 5ccc65a3dca58b5e -Block 0008 [ 79]: 151cf064fd68cf19 -Block 0008 [ 80]: 099a4141eaf944c9 -Block 0008 [ 81]: 1a00a7b15177c815 -Block 0008 [ 82]: 9617f3c9d79165e5 -Block 0008 [ 83]: 0633785f3798595f -Block 0008 [ 84]: 82989ddd8ed0cddc -Block 0008 [ 85]: f971723863681e7f -Block 0008 [ 86]: 006885f72ad83a6e -Block 0008 [ 87]: 0eea05ecafdf9994 -Block 0008 [ 88]: 3becdde2c8756f9b -Block 0008 [ 89]: ba5b7af0494782b9 -Block 0008 [ 90]: 8e093c4a112c3c00 -Block 0008 [ 91]: b6c1189d04a1d340 -Block 0008 [ 92]: 4d319e9ab94d3e23 -Block 0008 [ 93]: 6eeaecfc749aa50d -Block 0008 [ 94]: 3ec3286ab90d3c76 -Block 0008 [ 95]: 4d6f7eab345c86ac -Block 0008 [ 96]: 2468ec86927b1207 -Block 0008 [ 97]: c8545e1af6328683 -Block 0008 [ 98]: 18358c7f4c4e0a2f -Block 0008 [ 99]: d5a6d7e7269f1227 -Block 0008 [100]: c8554d835c547ae6 -Block 0008 [101]: 36c2c174e2e5a35b -Block 0008 [102]: acbb1f4892e38b4f -Block 0008 [103]: 841fed21e8a055fe -Block 0008 [104]: 9210713ecb31879c -Block 0008 [105]: 4a94e2cc4ea5c9f5 -Block 0008 [106]: e16adbea83dc65c4 -Block 0008 [107]: d1886e10ac7639b8 -Block 0008 [108]: b7567cc205f8d932 -Block 0008 [109]: 686815e7e302618a -Block 0008 [110]: 52d2241453c9f024 -Block 0008 [111]: 675cd693897661df -Block 0008 [112]: 25da19f17758d75b -Block 0008 [113]: 680c603aeea91871 -Block 0008 [114]: 0422985fee134a01 -Block 0008 [115]: 4876e8adceacc9b1 -Block 0008 [116]: 11d14285f3963391 -Block 0008 [117]: e7d41ef32a1da72e -Block 0008 [118]: e2ed3e4d9b6c04a1 -Block 0008 [119]: 4aabfde7e0b605cf -Block 0008 [120]: 83889bda82352bec -Block 0008 [121]: 137f3bfdce40f1cf -Block 0008 [122]: f5a57480af315e41 -Block 0008 [123]: 215ab203e038df23 -Block 0008 [124]: 1cfd21d6e3ef2735 -Block 0008 [125]: c956265ca56c41e8 -Block 0008 [126]: fc7298a18032efb9 -Block 0008 [127]: 62f5cc7e96f7a920 -Block 0009 [ 0]: 7df42ba8721fe889 -Block 0009 [ 1]: b6111ac624204424 -Block 0009 [ 2]: 486c98ce436fbd12 -Block 0009 [ 3]: 5e04a7f67216dcc6 -Block 0009 [ 4]: 65139d842c4ef511 -Block 0009 [ 5]: 60d706c1b4966e8d -Block 0009 [ 6]: 7a4d779951af65a7 -Block 0009 [ 7]: 80e0677d98c29149 -Block 0009 [ 8]: 515c99c1666d19ff -Block 0009 [ 9]: ec2aeec569c003c8 -Block 0009 [ 10]: 3bf671e9aa667761 -Block 0009 [ 11]: 140f53c675250fdb -Block 0009 [ 12]: 384950521419cf61 -Block 0009 [ 13]: dd96fe61cd894c12 -Block 0009 [ 14]: a54a4ef56712c263 -Block 0009 [ 15]: 686ca4e06fdea640 -Block 0009 [ 16]: c1d579d5fbe3b115 -Block 0009 [ 17]: bb1b7cd496096326 -Block 0009 [ 18]: a1f841ee18949ddd -Block 0009 [ 19]: e2d3370969b910c1 -Block 0009 [ 20]: 36d89c41fe3b46f5 -Block 0009 [ 21]: c63f9856d0426952 -Block 0009 [ 22]: fe27ac9b573089d3 -Block 0009 [ 23]: 6d6260bfd54cf612 -Block 0009 [ 24]: e0f205707d67ffe4 -Block 0009 [ 25]: 6bd588e661ba4e14 -Block 0009 [ 26]: 9bf7be2e77cbf233 -Block 0009 [ 27]: b6f5fdaa0dc4cd84 -Block 0009 [ 28]: 576a8562230ab47c -Block 0009 [ 29]: f4ccb57d9ab736ab -Block 0009 [ 30]: 8b0e76738b5fc872 -Block 0009 [ 31]: f7803b666ec8957a -Block 0009 [ 32]: 3f78fe043e0cfb43 -Block 0009 [ 33]: c913f2699d20c470 -Block 0009 [ 34]: 0ab2e84f3bcf8e09 -Block 0009 [ 35]: f5e7b0abee13f4f1 -Block 0009 [ 36]: cc161bdb34537218 -Block 0009 [ 37]: 7944df80e54a3be5 -Block 0009 [ 38]: 50356cde8f0d4d57 -Block 0009 [ 39]: 82502cbfd481d12e -Block 0009 [ 40]: 3ba30a673984c1ad -Block 0009 [ 41]: 56039a33423c9980 -Block 0009 [ 42]: 0f13c649e5a88821 -Block 0009 [ 43]: dfbbb9d225918f1b -Block 0009 [ 44]: fb8c47279fb810ab -Block 0009 [ 45]: ed67b9d5c4e6646d -Block 0009 [ 46]: 7bb9fea2ec9ddcce -Block 0009 [ 47]: f0daea90ef3b24f6 -Block 0009 [ 48]: 5845fd237b74c7a7 -Block 0009 [ 49]: f45163287bbf8b0a -Block 0009 [ 50]: 163c3282c762765a -Block 0009 [ 51]: c3b1de32025b97d9 -Block 0009 [ 52]: 5974b7e5aa241d3d -Block 0009 [ 53]: 0b8b540ed5bab753 -Block 0009 [ 54]: 6fbe481d7973d25f -Block 0009 [ 55]: 3882cf518bede3f7 -Block 0009 [ 56]: 960cb62d91c9c8f6 -Block 0009 [ 57]: 110dbc0c5ca2aef5 -Block 0009 [ 58]: c1309fbafeb3a68c -Block 0009 [ 59]: 064288ce0deb4656 -Block 0009 [ 60]: b2a7d1d41301758e -Block 0009 [ 61]: af9697b91850edda -Block 0009 [ 62]: 4d24cea246737528 -Block 0009 [ 63]: 784b376cfb2d0ba6 -Block 0009 [ 64]: d1f48e9c5e8af3de -Block 0009 [ 65]: 20eedfb6217c4983 -Block 0009 [ 66]: 7d2f4abd53e7c5b9 -Block 0009 [ 67]: 58f1ece95d65b46e -Block 0009 [ 68]: bc4b428f80c0af7c -Block 0009 [ 69]: 4585bb3525f1e55a -Block 0009 [ 70]: f324251c9d77b113 -Block 0009 [ 71]: 33f191b5173a42eb -Block 0009 [ 72]: 28ebdc374de36598 -Block 0009 [ 73]: 32f3a953382a498b -Block 0009 [ 74]: d35e9c131e3608a7 -Block 0009 [ 75]: f689a7d106420841 -Block 0009 [ 76]: 30995ce163c77fa5 -Block 0009 [ 77]: e8faa3ecf1de154c -Block 0009 [ 78]: 57530aa7a61fc0cc -Block 0009 [ 79]: 35efd5a0d158dcdc -Block 0009 [ 80]: 4e73e2d6aa2ac171 -Block 0009 [ 81]: 15771f08e1ef7fe5 -Block 0009 [ 82]: e66a3071a132f10c -Block 0009 [ 83]: 843e20be6f0785b0 -Block 0009 [ 84]: b07328be06c772eb -Block 0009 [ 85]: f9e991fed1add433 -Block 0009 [ 86]: cc2f21af35d479ca -Block 0009 [ 87]: 8e8419f0ca164d71 -Block 0009 [ 88]: 2cd7dcf212b3abfe -Block 0009 [ 89]: 2d64fac5a0b31d64 -Block 0009 [ 90]: 3ba34d7c079bebb6 -Block 0009 [ 91]: 90f66d7ee104c55f -Block 0009 [ 92]: e1456b346478113d -Block 0009 [ 93]: 0c285835265f3be3 -Block 0009 [ 94]: 7f9309a63daa86b8 -Block 0009 [ 95]: ac44c96a04460a00 -Block 0009 [ 96]: d135bc938ce01955 -Block 0009 [ 97]: 54fc07c195ab1407 -Block 0009 [ 98]: 39274ffa1a180bcd -Block 0009 [ 99]: 49cb9ea57622632f -Block 0009 [100]: b1f6e49b17a8d39f -Block 0009 [101]: 99b4eaef9f2e5908 -Block 0009 [102]: c027417b95f7828f -Block 0009 [103]: d98dfdbb969617a4 -Block 0009 [104]: 86032385ce09b244 -Block 0009 [105]: 786206950707f208 -Block 0009 [106]: d6d6aa444b93e383 -Block 0009 [107]: 6f3d16d5d71e52bc -Block 0009 [108]: ff6886abc5180c26 -Block 0009 [109]: 7ec9e1efd2d57ca5 -Block 0009 [110]: 497ca9c5dc68f98e -Block 0009 [111]: b4b70a21809a2988 -Block 0009 [112]: ddde3f879a1408ec -Block 0009 [113]: 35d73f42f4bee7b3 -Block 0009 [114]: 86bb8179313e38b2 -Block 0009 [115]: fbf1f7eb83326ddd -Block 0009 [116]: 7c362173a3a1d41b -Block 0009 [117]: cb9c8ca6a2c391fb -Block 0009 [118]: 16a3ab8a50ebc7c1 -Block 0009 [119]: b47dbea03b193d60 -Block 0009 [120]: 6e61db495e175da2 -Block 0009 [121]: e2dfec565ea44be2 -Block 0009 [122]: 62b2cd09575b9f1b -Block 0009 [123]: a86f0c012f643b10 -Block 0009 [124]: 4df4c66286c2beb3 -Block 0009 [125]: f92d1ef872a19f93 -Block 0009 [126]: 239813284a14780c -Block 0009 [127]: 2b8b5b9e47737d9b -Block 0010 [ 0]: d49f88dd8c8f6dca -Block 0010 [ 1]: 360d985177d3eb44 -Block 0010 [ 2]: 56e7f795256a450d -Block 0010 [ 3]: 016e1e47163f4bd7 -Block 0010 [ 4]: fcdd1debf16667bc -Block 0010 [ 5]: 4a0f1022f7a85f2c -Block 0010 [ 6]: e251feccd36d554d -Block 0010 [ 7]: d36d92ecc2b785cf -Block 0010 [ 8]: f2e379c0e8fc1248 -Block 0010 [ 9]: c3ba2a1d541d48a2 -Block 0010 [ 10]: f616ffee327e5c77 -Block 0010 [ 11]: 1a66afea7fe7a12f -Block 0010 [ 12]: b49783cdc2c97ff5 -Block 0010 [ 13]: dd9d58b1dee8b006 -Block 0010 [ 14]: 52fdd6bc21a7d42e -Block 0010 [ 15]: 89ee24884725e7dd -Block 0010 [ 16]: 19a9257c35240187 -Block 0010 [ 17]: 8fbefe8e54c3e278 -Block 0010 [ 18]: 546556e542abe8f5 -Block 0010 [ 19]: 336fe46a3902f155 -Block 0010 [ 20]: a2845437c78ec507 -Block 0010 [ 21]: c3fbb5a6fc4a4ddb -Block 0010 [ 22]: 1f2b44c37f824805 -Block 0010 [ 23]: 094c983c04543c5d -Block 0010 [ 24]: fb6b47e6cdce5891 -Block 0010 [ 25]: be5642c616a0c685 -Block 0010 [ 26]: 0db4788cd321d134 -Block 0010 [ 27]: 058a7158a4cca32e -Block 0010 [ 28]: 93fb20628ea97197 -Block 0010 [ 29]: 1a67eefe57587edb -Block 0010 [ 30]: feccbe28169abf9e -Block 0010 [ 31]: f23b74ca80971ba3 -Block 0010 [ 32]: 5c8fdeb0ddef1927 -Block 0010 [ 33]: 259d3c1365429795 -Block 0010 [ 34]: 6bf4940821839897 -Block 0010 [ 35]: ebaa2c513a084143 -Block 0010 [ 36]: 69bcf4a9aca7694f -Block 0010 [ 37]: bfbdda770ce93f75 -Block 0010 [ 38]: 8d444baf0f379a72 -Block 0010 [ 39]: 7ae56503dd3a1bcb -Block 0010 [ 40]: 2b899d8e61c4940f -Block 0010 [ 41]: bd879011317e4fa4 -Block 0010 [ 42]: 27fbc73f925b5004 -Block 0010 [ 43]: 254a67007562e302 -Block 0010 [ 44]: f73bd24b48e0ef31 -Block 0010 [ 45]: 0ddd73fb51ede360 -Block 0010 [ 46]: 1022a4004d4afb08 -Block 0010 [ 47]: a9df352deae2801e -Block 0010 [ 48]: 06006b210dfe4dda -Block 0010 [ 49]: 5c8edeb2290aeb31 -Block 0010 [ 50]: bcd906b29d549f4f -Block 0010 [ 51]: 02a71e9974436135 -Block 0010 [ 52]: d55765d1ec13a881 -Block 0010 [ 53]: 564a87e2a5d3c32c -Block 0010 [ 54]: 78be17f315291f85 -Block 0010 [ 55]: 12c3fe39d3c08b81 -Block 0010 [ 56]: 0f2055677ab1abbd -Block 0010 [ 57]: 19b266cbb045ad88 -Block 0010 [ 58]: 3927c1ec77870400 -Block 0010 [ 59]: 92170da5db938208 -Block 0010 [ 60]: 645e079da5039e12 -Block 0010 [ 61]: f2173bb060d3dcdb -Block 0010 [ 62]: 2c50ac91eed833fb -Block 0010 [ 63]: 3a6c74dd1f99824a -Block 0010 [ 64]: e3b11ae8f06a4f4e -Block 0010 [ 65]: 2f3b265788c439b1 -Block 0010 [ 66]: 352355d6897b041e -Block 0010 [ 67]: da1fecab11ff2979 -Block 0010 [ 68]: 5edb674437a9b9b0 -Block 0010 [ 69]: 05752057c0bb1191 -Block 0010 [ 70]: 480910f6930fde33 -Block 0010 [ 71]: df4e2f47f791170e -Block 0010 [ 72]: b3f1dcf371a00e65 -Block 0010 [ 73]: 726c421348a10f7d -Block 0010 [ 74]: 41233522f097cb65 -Block 0010 [ 75]: 76af4be633a5ceb6 -Block 0010 [ 76]: 53b1493022908c55 -Block 0010 [ 77]: 438211be870d4a48 -Block 0010 [ 78]: 0bdb60cc8666ddc2 -Block 0010 [ 79]: 2dcfc92e4aff5d2d -Block 0010 [ 80]: 279ed9fc4f5c6aa9 -Block 0010 [ 81]: 26dc91dc7bd21318 -Block 0010 [ 82]: 023588e6b690addc -Block 0010 [ 83]: 16e0b899efea3059 -Block 0010 [ 84]: 444c13f234914022 -Block 0010 [ 85]: ed59783c05ac18b2 -Block 0010 [ 86]: bf921c1b5d40b7b7 -Block 0010 [ 87]: 13b6d88fdede6b59 -Block 0010 [ 88]: fdb2cdb9b0928760 -Block 0010 [ 89]: afe345c0aa8f90d1 -Block 0010 [ 90]: 056db68149846e3e -Block 0010 [ 91]: bae26f87d7e35c28 -Block 0010 [ 92]: f1884846cb258f29 -Block 0010 [ 93]: 8afcddda851c8896 -Block 0010 [ 94]: beba967b77f35c8d -Block 0010 [ 95]: 78f26d6f9670cd7f -Block 0010 [ 96]: 6439369632df21fd -Block 0010 [ 97]: 1e1cc5433abf0e2f -Block 0010 [ 98]: cbc9411fda3913ed -Block 0010 [ 99]: 2364eb785d28c211 -Block 0010 [100]: d391a1f40d206429 -Block 0010 [101]: 4db905b5e46aa4bc -Block 0010 [102]: 6023079f7ad4d5b0 -Block 0010 [103]: 8c784b971cfeab58 -Block 0010 [104]: d1522490e5dd6703 -Block 0010 [105]: 6796509ff2b72dd0 -Block 0010 [106]: e858ef632e8b3308 -Block 0010 [107]: d38f1c0d3643f057 -Block 0010 [108]: 8b8477a36603a379 -Block 0010 [109]: 0e8d6b8e97ee02fc -Block 0010 [110]: 4cf6d7daf0cd2036 -Block 0010 [111]: 13f6d2ff8b73a439 -Block 0010 [112]: e40b0130ebe6625c -Block 0010 [113]: b7128faf5839f977 -Block 0010 [114]: 7d6b4a598cfab926 -Block 0010 [115]: d111f97b32f40ac5 -Block 0010 [116]: c2c9cc6270932cd9 -Block 0010 [117]: 67c6151923ea573d -Block 0010 [118]: 9e30aba29249e704 -Block 0010 [119]: d409dd6ed1a5a5cf -Block 0010 [120]: 9be62c106675eba5 -Block 0010 [121]: d01fa6dfa39f78c2 -Block 0010 [122]: e040f5d7d9af83db -Block 0010 [123]: c2091487fc3e0f14 -Block 0010 [124]: ee226530a2f80bdd -Block 0010 [125]: 2109d0f9b7c7fcfd -Block 0010 [126]: 3d48628f535998f3 -Block 0010 [127]: a70033bcbcf46e83 -Block 0011 [ 0]: b66c2134a1f0cd79 -Block 0011 [ 1]: 202885bd2ca49a11 -Block 0011 [ 2]: 2445e4ee7bfecd31 -Block 0011 [ 3]: 5cc3f7f2be3df555 -Block 0011 [ 4]: 514daa6533b7b0c6 -Block 0011 [ 5]: b34debea62c9c8cb -Block 0011 [ 6]: 571514fc3e6fde7c -Block 0011 [ 7]: fca236241d126fe1 -Block 0011 [ 8]: f26bf4187119f8d1 -Block 0011 [ 9]: 0d8ed9d08606e3b6 -Block 0011 [ 10]: a899d6fcf0c58909 -Block 0011 [ 11]: ac5e087dd562c2a1 -Block 0011 [ 12]: 9df83e30ecc1dded -Block 0011 [ 13]: d2567b9e5da4b16e -Block 0011 [ 14]: c735486fb3a67b04 -Block 0011 [ 15]: 35c89d639f469f20 -Block 0011 [ 16]: 9abc02750af5f859 -Block 0011 [ 17]: 82576ed164b7e5dd -Block 0011 [ 18]: b2dc3d5197bc726f -Block 0011 [ 19]: 8a665fd2f6ed15f9 -Block 0011 [ 20]: ea0247aa64bf75b8 -Block 0011 [ 21]: 02c8eeecb3cbabbc -Block 0011 [ 22]: 8de76739bf0b6a2b -Block 0011 [ 23]: 129b74f249187f3e -Block 0011 [ 24]: d89529b9d70d730f -Block 0011 [ 25]: 1c60c20a05d2292d -Block 0011 [ 26]: 5bb763432466d75d -Block 0011 [ 27]: acfea8c8aa0f6859 -Block 0011 [ 28]: e64be8815b20811c -Block 0011 [ 29]: 0b755066138281a5 -Block 0011 [ 30]: 6fbd7306f2136c31 -Block 0011 [ 31]: 1c73a2fdee607efb -Block 0011 [ 32]: d658c0320021835e -Block 0011 [ 33]: 8e6e5c6e2867d5e2 -Block 0011 [ 34]: feab06d1861517a4 -Block 0011 [ 35]: 2f948ed83df46ee2 -Block 0011 [ 36]: af8bcbb827657fd5 -Block 0011 [ 37]: 82e89a681a4eb1e3 -Block 0011 [ 38]: 8544c46336fce186 -Block 0011 [ 39]: 604325005561f515 -Block 0011 [ 40]: cb65d782aa201563 -Block 0011 [ 41]: db31e8f4ba31346b -Block 0011 [ 42]: a882920f87d38613 -Block 0011 [ 43]: 31d7b9eb7e37efcb -Block 0011 [ 44]: 69c119cf8b14de0b -Block 0011 [ 45]: 9e6da3ff2e4fa029 -Block 0011 [ 46]: 009f44d1f5196a70 -Block 0011 [ 47]: 7399a403bbc3528c -Block 0011 [ 48]: c6c3f4e4a86c5e9d -Block 0011 [ 49]: ebdefa9151e4b6c4 -Block 0011 [ 50]: 01f9381e2eec2d7f -Block 0011 [ 51]: 0a4f62720056d84b -Block 0011 [ 52]: f1b5d3943f6a6a36 -Block 0011 [ 53]: cd1cd5c0e4eb1968 -Block 0011 [ 54]: 64edcc8e3d9f041e -Block 0011 [ 55]: 1461c578c39411e7 -Block 0011 [ 56]: 980fa6747c3617ed -Block 0011 [ 57]: 912b11adeeaf3f89 -Block 0011 [ 58]: 44bedf9a5a0b49a9 -Block 0011 [ 59]: 73e8f9a17326ceb4 -Block 0011 [ 60]: 3da6232cd6f4e3d1 -Block 0011 [ 61]: f6bd9062c0a9a0f7 -Block 0011 [ 62]: 742b4fcb7a91ab94 -Block 0011 [ 63]: ad9a328d007c5f99 -Block 0011 [ 64]: 84a388ca8674bc11 -Block 0011 [ 65]: e3f44e84b345d055 -Block 0011 [ 66]: 844c544bb0b9eb92 -Block 0011 [ 67]: e8dfc0e52a0761ae -Block 0011 [ 68]: 26731ccc5a836fd2 -Block 0011 [ 69]: 1e0b377e3315a662 -Block 0011 [ 70]: 391388067845b573 -Block 0011 [ 71]: 3dbc149f246cc13c -Block 0011 [ 72]: a25e2f5cd2ed7edb -Block 0011 [ 73]: df0b0b57a05a4d4e -Block 0011 [ 74]: 27132d8a640ba7b5 -Block 0011 [ 75]: e69181cea76e2cae -Block 0011 [ 76]: 4daaa663f4404681 -Block 0011 [ 77]: 49a8afc952ddcbd2 -Block 0011 [ 78]: 693c5c586cea9fce -Block 0011 [ 79]: f3dc02748c485cb7 -Block 0011 [ 80]: ffe3bc71b550dcd1 -Block 0011 [ 81]: c8f9d3cebc8de1e8 -Block 0011 [ 82]: ad1c3edf36a89697 -Block 0011 [ 83]: 5e89cc9aae4230a6 -Block 0011 [ 84]: eac0ae1626e15120 -Block 0011 [ 85]: 1690d63d60da6ecf -Block 0011 [ 86]: cd6a8d2091ad354b -Block 0011 [ 87]: 89d80dacaca9a6c5 -Block 0011 [ 88]: 218a6801d99baec8 -Block 0011 [ 89]: 9bba7e969afd1280 -Block 0011 [ 90]: 95554c042732942d -Block 0011 [ 91]: f1280331f91dcf91 -Block 0011 [ 92]: 15a800cf6915edcb -Block 0011 [ 93]: f9d41a977057e236 -Block 0011 [ 94]: 92988fb9b5045e1a -Block 0011 [ 95]: 2e76d5e4179de340 -Block 0011 [ 96]: 245aff980f5489f2 -Block 0011 [ 97]: 93a5ca99c887937f -Block 0011 [ 98]: 5abda23787990c23 -Block 0011 [ 99]: 2e30f40479f01957 -Block 0011 [100]: 5d9f127f80dcccb2 -Block 0011 [101]: 732679dbaed99681 -Block 0011 [102]: 41a91b8ffb33f013 -Block 0011 [103]: ca61b392f2d825ad -Block 0011 [104]: 2c2c33ec377b6095 -Block 0011 [105]: a1a188e86aa1e8a4 -Block 0011 [106]: 332b4a653b70442c -Block 0011 [107]: b93cb4970048caf3 -Block 0011 [108]: 2aa4e90db458be01 -Block 0011 [109]: 22f51f6dba083e78 -Block 0011 [110]: 0f65a4027cce4035 -Block 0011 [111]: e462aa5a3a7758af -Block 0011 [112]: b4b0c947df9f5840 -Block 0011 [113]: 1fcaa15e4ad8a448 -Block 0011 [114]: 6427ad1753ef4834 -Block 0011 [115]: 8880f19df4f32d7e -Block 0011 [116]: fe7b7c61fb009823 -Block 0011 [117]: be45b0a066d3b99d -Block 0011 [118]: 13edbd36864553ea -Block 0011 [119]: 56bd3ff3f46a4ad3 -Block 0011 [120]: a94c52ae99da87f2 -Block 0011 [121]: 9e56cea44848fdd4 -Block 0011 [122]: c9a9fa5471582833 -Block 0011 [123]: 5d6e10df4b4a15eb -Block 0011 [124]: 0a33444ac38b9f7d -Block 0011 [125]: 1f19a38690e0c6d0 -Block 0011 [126]: b5604cbe201ba644 -Block 0011 [127]: 044e9c26b9b8b616 -Block 0012 [ 0]: 1521a6fe2a3cbece -Block 0012 [ 1]: a7d81f737de3454e -Block 0012 [ 2]: 1fe9b28e4f948672 -Block 0012 [ 3]: 2a5fa3d7342b35bf -Block 0012 [ 4]: b115d311ab4cd25a -Block 0012 [ 5]: 2d38601cecc89013 -Block 0012 [ 6]: ff433fe8560a7164 -Block 0012 [ 7]: bf7185448ec49c76 -Block 0012 [ 8]: b6ff855b1bd63b0d -Block 0012 [ 9]: b4259325faad52c0 -Block 0012 [ 10]: 1001b5b3752d9b8b -Block 0012 [ 11]: a035e989d9fa78bd -Block 0012 [ 12]: da47171b2d168957 -Block 0012 [ 13]: 283081670260f019 -Block 0012 [ 14]: e0e05c5685c4d96a -Block 0012 [ 15]: 103e296afff49848 -Block 0012 [ 16]: 57dc23c3022b4da2 -Block 0012 [ 17]: 7d7cd99264c05881 -Block 0012 [ 18]: 16c82e8ffb88b24a -Block 0012 [ 19]: 02199a086680f0f7 -Block 0012 [ 20]: 2edd2f82ad7873ef -Block 0012 [ 21]: 14a147da23d0ae31 -Block 0012 [ 22]: 94e3899e23500ffe -Block 0012 [ 23]: 7960ac7264b703fb -Block 0012 [ 24]: c477d8358c227328 -Block 0012 [ 25]: 92d4856648af1644 -Block 0012 [ 26]: eb4d563cb3c888dd -Block 0012 [ 27]: 21828c52d31318ff -Block 0012 [ 28]: 6f0b647c003e5e61 -Block 0012 [ 29]: 93df61e1c563b8d9 -Block 0012 [ 30]: 3e3a6e9a1d36221b -Block 0012 [ 31]: d3bc1703065b4948 -Block 0012 [ 32]: 26e095f3098e2046 -Block 0012 [ 33]: 40ce4bb1796cc0ad -Block 0012 [ 34]: 399bf9686c5f4172 -Block 0012 [ 35]: efab37a5b75401dd -Block 0012 [ 36]: 41f176e4dace1866 -Block 0012 [ 37]: 30398f14205df259 -Block 0012 [ 38]: ea28ab83bcc97663 -Block 0012 [ 39]: 46419c78901bfae2 -Block 0012 [ 40]: 7bb5dc11f1fdf71e -Block 0012 [ 41]: e7a8d22a68619e2f -Block 0012 [ 42]: 3b8598c5e66799c0 -Block 0012 [ 43]: 35ef25baa6522dc4 -Block 0012 [ 44]: 0a8cd7304fbad8fd -Block 0012 [ 45]: b6b77e8381e2b1e3 -Block 0012 [ 46]: 94e8a9260e0318eb -Block 0012 [ 47]: 187fc38067c321bd -Block 0012 [ 48]: 792444f2f5192e33 -Block 0012 [ 49]: 1ae621d7081363c4 -Block 0012 [ 50]: adf8a1e712b76bec -Block 0012 [ 51]: a6c358e41cd69e3a -Block 0012 [ 52]: f9a268fb81ff1a3e -Block 0012 [ 53]: 19e6ad4f49dbe780 -Block 0012 [ 54]: 2870c4d3d70e8415 -Block 0012 [ 55]: d3766936b9513f74 -Block 0012 [ 56]: dceffb34b052d439 -Block 0012 [ 57]: eb3174432a9d0be7 -Block 0012 [ 58]: ccfa40d103153fe6 -Block 0012 [ 59]: 534ebb23424bcb89 -Block 0012 [ 60]: 244091afd20eb5b6 -Block 0012 [ 61]: 9a423392b7f3ed66 -Block 0012 [ 62]: 27738dffe52b48e0 -Block 0012 [ 63]: 44738bbe4dbaaea2 -Block 0012 [ 64]: 126229c01cc19fc6 -Block 0012 [ 65]: b7279c2c19910800 -Block 0012 [ 66]: 14726366b2401939 -Block 0012 [ 67]: 31970a53eb02e7f0 -Block 0012 [ 68]: 78fffed7e5970889 -Block 0012 [ 69]: 6983240bd4fd24bd -Block 0012 [ 70]: 8e6224c568706241 -Block 0012 [ 71]: 7cb66edcc2ba1663 -Block 0012 [ 72]: c2107dc218f05722 -Block 0012 [ 73]: 80afaf9eb0637341 -Block 0012 [ 74]: 409e5654971093e2 -Block 0012 [ 75]: 6f8b0f36a1ed94f9 -Block 0012 [ 76]: 27f581045be8a309 -Block 0012 [ 77]: 67710b4de2a9d74c -Block 0012 [ 78]: ee34520edc8e6c17 -Block 0012 [ 79]: 59d4c363e50fa509 -Block 0012 [ 80]: 8dcc5ab12801cdcb -Block 0012 [ 81]: d8ce48c767ff9f63 -Block 0012 [ 82]: 0ece3e843169e6dd -Block 0012 [ 83]: ca4ac3965825308d -Block 0012 [ 84]: a241fef0307cd5e5 -Block 0012 [ 85]: 35b7fbe5e89252a9 -Block 0012 [ 86]: d1b1a3c397c5a3f7 -Block 0012 [ 87]: c128e35949dc65ee -Block 0012 [ 88]: 3d3527f69e1b4629 -Block 0012 [ 89]: 8f9ea6f3b86a8849 -Block 0012 [ 90]: e91d3a831d1ac20a -Block 0012 [ 91]: 190b39a143752fed -Block 0012 [ 92]: c2a9162e88a085f1 -Block 0012 [ 93]: 83bda5257560eef9 -Block 0012 [ 94]: f424f969d8c05562 -Block 0012 [ 95]: cc28cd4499193be4 -Block 0012 [ 96]: 1bf847eedd7cee4e -Block 0012 [ 97]: d9f5044a5b463833 -Block 0012 [ 98]: 84ac651e312f0432 -Block 0012 [ 99]: 68f5261410bfa67d -Block 0012 [100]: 1a7754c5d4962c35 -Block 0012 [101]: 9bb7c786d4b17660 -Block 0012 [102]: 80b10d80bbc35af6 -Block 0012 [103]: dbc449b22af06364 -Block 0012 [104]: a208fe1fdc561708 -Block 0012 [105]: 58d743f0df17acd1 -Block 0012 [106]: 2ad9b89d389b2577 -Block 0012 [107]: fb0c666799206c63 -Block 0012 [108]: de656171ca8e75c8 -Block 0012 [109]: 0ffb8f41cc0596c7 -Block 0012 [110]: 238eaa9b108e8d10 -Block 0012 [111]: 39973bb952ddbcc0 -Block 0012 [112]: d7f4fbabdc63e190 -Block 0012 [113]: b3d832966453066b -Block 0012 [114]: 339a0be96c03ef8a -Block 0012 [115]: e79366e9be1d4fe2 -Block 0012 [116]: 9b4e4d6f05538c35 -Block 0012 [117]: cef433fc39a11471 -Block 0012 [118]: 595dd5d830434c4f -Block 0012 [119]: b7454a6e8b03848a -Block 0012 [120]: d63ea04a761806c0 -Block 0012 [121]: 173d2a2a5fc3178c -Block 0012 [122]: eaec6276b5a137a7 -Block 0012 [123]: 095b05a6303723b8 -Block 0012 [124]: 94c49de0d9c605e5 -Block 0012 [125]: 2873ee8bf2d4e699 -Block 0012 [126]: 1cde14681dd09f70 -Block 0012 [127]: 68a708e89034c7b3 -Block 0013 [ 0]: 8d167cc15d9b4e8a -Block 0013 [ 1]: 861a89ec67dd708a -Block 0013 [ 2]: b536a27e36288413 -Block 0013 [ 3]: 7b0ada901678953d -Block 0013 [ 4]: 07d12c9abc737f67 -Block 0013 [ 5]: c89adf2ede21b1ad -Block 0013 [ 6]: 594950d5b9d5346b -Block 0013 [ 7]: 2ed48f395600081f -Block 0013 [ 8]: 4f24214c834fe8b7 -Block 0013 [ 9]: 54aa160c0cd977bf -Block 0013 [ 10]: 07370ae67985e0df -Block 0013 [ 11]: a7771205e6facde8 -Block 0013 [ 12]: 7a439605aae13efd -Block 0013 [ 13]: 74c0a731668944a9 -Block 0013 [ 14]: f45cc05ff3acc878 -Block 0013 [ 15]: d238ddd1f8d956d1 -Block 0013 [ 16]: 9d9465e667febb00 -Block 0013 [ 17]: e326ebeea2c77cb1 -Block 0013 [ 18]: 8e00c650856da819 -Block 0013 [ 19]: 584380ef75efc1f1 -Block 0013 [ 20]: 81e10bb7e2a69853 -Block 0013 [ 21]: 41ecfa387c696224 -Block 0013 [ 22]: 68372408a7693477 -Block 0013 [ 23]: 62737f80e951a66e -Block 0013 [ 24]: 44a11e5e2535ea2e -Block 0013 [ 25]: 937b04e3a723122e -Block 0013 [ 26]: 85bcf09f61703332 -Block 0013 [ 27]: b27523bbcc80a5ae -Block 0013 [ 28]: bccde6994ef38d25 -Block 0013 [ 29]: 6e105429a2a107e3 -Block 0013 [ 30]: d84e9c1b2d47135e -Block 0013 [ 31]: 528cfb9a9ff1f423 -Block 0013 [ 32]: c931f1187fefc477 -Block 0013 [ 33]: 11322efa705a8857 -Block 0013 [ 34]: 2ff596d5ff43a189 -Block 0013 [ 35]: 951b4868c0d65755 -Block 0013 [ 36]: 6fa72219d7003b25 -Block 0013 [ 37]: eaaad06e85076fec -Block 0013 [ 38]: 7608dad58553f3a2 -Block 0013 [ 39]: 200e76b7f948c812 -Block 0013 [ 40]: 3d15f2c7d3fce6a2 -Block 0013 [ 41]: d184805422d69913 -Block 0013 [ 42]: 44d6c50290ef4592 -Block 0013 [ 43]: bc31bf15ea1dc2f8 -Block 0013 [ 44]: 29f08b8fca962939 -Block 0013 [ 45]: c62430d5104c6482 -Block 0013 [ 46]: 3c57292c4ce39649 -Block 0013 [ 47]: ffc10dcad32cc41b -Block 0013 [ 48]: dd41f5f46122a206 -Block 0013 [ 49]: 7abc60696111bfbe -Block 0013 [ 50]: aa9886bc1a563464 -Block 0013 [ 51]: 9c057de649695c35 -Block 0013 [ 52]: f712052195155a09 -Block 0013 [ 53]: 91980809bdb97825 -Block 0013 [ 54]: 07bcdeab983ab6ca -Block 0013 [ 55]: 277119a97dbb4a80 -Block 0013 [ 56]: 8ca65b723aeafec2 -Block 0013 [ 57]: ff49c19c4b00e57d -Block 0013 [ 58]: 7f7bc5d343003b9e -Block 0013 [ 59]: 62348f62c00612c6 -Block 0013 [ 60]: 2d762b01998ac125 -Block 0013 [ 61]: 0c240959e10da0cc -Block 0013 [ 62]: 9aba78f773642caf -Block 0013 [ 63]: 129a78baa32e409c -Block 0013 [ 64]: 1d1b48d6c8ba21f5 -Block 0013 [ 65]: f8b15521108a73a2 -Block 0013 [ 66]: 60be83175fcd4908 -Block 0013 [ 67]: bc3ce648b5c35454 -Block 0013 [ 68]: 215dc943e9f120ab -Block 0013 [ 69]: 5f2868bb13088cf5 -Block 0013 [ 70]: 3a73e7d41c02c847 -Block 0013 [ 71]: bcbb0d37b7c38980 -Block 0013 [ 72]: 5b5a5f184f699a50 -Block 0013 [ 73]: 5adc34c4275ed7c9 -Block 0013 [ 74]: a871c5cdd8a1ab2c -Block 0013 [ 75]: 88561e9f2c362be0 -Block 0013 [ 76]: 10244ff1b8d1d56a -Block 0013 [ 77]: a49c34c978e7d103 -Block 0013 [ 78]: 46e8015d871645c2 -Block 0013 [ 79]: f9a15b708c4a5405 -Block 0013 [ 80]: ceaf74f1fd233a55 -Block 0013 [ 81]: f43065e6cd47d568 -Block 0013 [ 82]: afa4bf36adb7eaf9 -Block 0013 [ 83]: 578a68b9edfd4dfd -Block 0013 [ 84]: 7386e803ae1db4e9 -Block 0013 [ 85]: 894c8dfb4cd9e99e -Block 0013 [ 86]: 577d2667cb82bbec -Block 0013 [ 87]: 2c4e1db5a2d177b5 -Block 0013 [ 88]: 0e88639a76844ba1 -Block 0013 [ 89]: 7805203eeff9051d -Block 0013 [ 90]: c5413f00f0b91101 -Block 0013 [ 91]: 5e46c72bbabf4d30 -Block 0013 [ 92]: 166521536d596e63 -Block 0013 [ 93]: ae4ebc3a25bc2ee3 -Block 0013 [ 94]: b6a6ad1a93c69390 -Block 0013 [ 95]: 50e799ffe04d392c -Block 0013 [ 96]: 3799e5290de54a4d -Block 0013 [ 97]: a8a1350877af05cc -Block 0013 [ 98]: 082a6bbe71cbd228 -Block 0013 [ 99]: a23f327a5924959d -Block 0013 [100]: 63305cc5f84f7ad7 -Block 0013 [101]: 60e488a0a896838e -Block 0013 [102]: c9230c3dd009e753 -Block 0013 [103]: 8f5d22bc1cf3bd22 -Block 0013 [104]: 8a3d52eb933b24c2 -Block 0013 [105]: 2ad1125ab1c2d795 -Block 0013 [106]: 922d4810438a44d5 -Block 0013 [107]: c40e43485037b3ad -Block 0013 [108]: 4e1faefdcfd8b6af -Block 0013 [109]: 94cce4010a943fa6 -Block 0013 [110]: 8d1cba48ce5b96bc -Block 0013 [111]: 15d6d33ad7328fd1 -Block 0013 [112]: d9d43c592bb4ea95 -Block 0013 [113]: 318cdfb666ab0cc8 -Block 0013 [114]: 29a76f09f474b27f -Block 0013 [115]: 20c2f46af8f3ab77 -Block 0013 [116]: 11e70eb455d06061 -Block 0013 [117]: b8228af2094f3ef0 -Block 0013 [118]: 6a5668e37110e003 -Block 0013 [119]: 7439532142a76261 -Block 0013 [120]: fde1e2387a515dae -Block 0013 [121]: f4a706d8c81fd2b7 -Block 0013 [122]: 31aaeab172a5b26a -Block 0013 [123]: def4e2002ba919df -Block 0013 [124]: 733a09a01284bb71 -Block 0013 [125]: 185e24ee64af2b43 -Block 0013 [126]: 9bb76ee7896dfdd8 -Block 0013 [127]: 10931278d80e9141 -Block 0014 [ 0]: 74ff9d5c77dec9d4 -Block 0014 [ 1]: 5c43cf4044006ba8 -Block 0014 [ 2]: 0f82682a392e457f -Block 0014 [ 3]: 68a068cdb5d93548 -Block 0014 [ 4]: 2c346f466ae5e7d1 -Block 0014 [ 5]: c6cfc46081912068 -Block 0014 [ 6]: 5e1937c9d4be2fde -Block 0014 [ 7]: 06202be4e8e07d2d -Block 0014 [ 8]: b519876ca35a277c -Block 0014 [ 9]: e90a83fe7aa91f68 -Block 0014 [ 10]: 5a40cbcba1fd98b2 -Block 0014 [ 11]: af80019f52b0fa1f -Block 0014 [ 12]: 884eb3548131a3ce -Block 0014 [ 13]: 7ad391d105237118 -Block 0014 [ 14]: 39e6610113fcfad0 -Block 0014 [ 15]: 07de5d06c76eb406 -Block 0014 [ 16]: 8688b7645a136c23 -Block 0014 [ 17]: 6dcc57f776a9d635 -Block 0014 [ 18]: cb181be1ae3bd3c9 -Block 0014 [ 19]: 6dd5f461a2bb5689 -Block 0014 [ 20]: c72926f7695b359d -Block 0014 [ 21]: 44de6b300a058825 -Block 0014 [ 22]: 974882d513ef95f3 -Block 0014 [ 23]: d15ab03ef6cda7b6 -Block 0014 [ 24]: f229a5561dfced9d -Block 0014 [ 25]: 315dfd5d23f77ab0 -Block 0014 [ 26]: 0f4c630cf7a1eca6 -Block 0014 [ 27]: 9ac5d4b7330b0dc3 -Block 0014 [ 28]: 4f8f5b7351624574 -Block 0014 [ 29]: de862b07a2cc18ba -Block 0014 [ 30]: 14591145d7f607ad -Block 0014 [ 31]: 87fd81764a47690f -Block 0014 [ 32]: 5e10a6935358171d -Block 0014 [ 33]: d9c8e6cd97276274 -Block 0014 [ 34]: 82d006a140133f2b -Block 0014 [ 35]: 340644ad9e6e7b28 -Block 0014 [ 36]: 2263be163aa68eee -Block 0014 [ 37]: e09c4a3f4e5d5bdd -Block 0014 [ 38]: c3345b0ce22aa154 -Block 0014 [ 39]: c8b4ab7e3c472850 -Block 0014 [ 40]: 30ce87661e7b26d4 -Block 0014 [ 41]: 654a95b6605e75d7 -Block 0014 [ 42]: 65e72a3539dd0d69 -Block 0014 [ 43]: 7c5ec1d1e68f4ab8 -Block 0014 [ 44]: c9251e2fd5ced854 -Block 0014 [ 45]: 52a85c5f5eb40c8e -Block 0014 [ 46]: 93bb9274d2da8a35 -Block 0014 [ 47]: 649d8c4a78fc904c -Block 0014 [ 48]: 8d79747667f51c89 -Block 0014 [ 49]: 23c7788205023d76 -Block 0014 [ 50]: 10224bc903e4a2b2 -Block 0014 [ 51]: af5793eca095fb61 -Block 0014 [ 52]: bb659fa94d39b1fa -Block 0014 [ 53]: 94520e9b6eefb936 -Block 0014 [ 54]: b035b95b939dcf3a -Block 0014 [ 55]: bfdeaa96331cce54 -Block 0014 [ 56]: 659dae83a17a437e -Block 0014 [ 57]: 598cbd962aebb606 -Block 0014 [ 58]: 8e43f705504059a1 -Block 0014 [ 59]: 811d0b66f4bf5789 -Block 0014 [ 60]: 3ea3eb13fd65c42d -Block 0014 [ 61]: f3289de2785a60c4 -Block 0014 [ 62]: b296d786e3f06f5d -Block 0014 [ 63]: cfe3c32da650f0d5 -Block 0014 [ 64]: dd0ed6f96a0c0322 -Block 0014 [ 65]: 70cceb6f30048949 -Block 0014 [ 66]: fa8cfe4efbc75cbf -Block 0014 [ 67]: cb7c5b09addd875a -Block 0014 [ 68]: 6483aca29f985f7e -Block 0014 [ 69]: 80b161cba70da102 -Block 0014 [ 70]: 52d76763bfb5065f -Block 0014 [ 71]: 4713c4241809bd0f -Block 0014 [ 72]: 176223d6501bb138 -Block 0014 [ 73]: a0d90adc0a733942 -Block 0014 [ 74]: c444f1cbfe698930 -Block 0014 [ 75]: c362e053f5370d7b -Block 0014 [ 76]: 04795823c3e290f3 -Block 0014 [ 77]: 21fa15483eb82289 -Block 0014 [ 78]: bdee31d1be32c895 -Block 0014 [ 79]: aa20de91077e0361 -Block 0014 [ 80]: 1292f113842e3b2d -Block 0014 [ 81]: 3da9e8e8f35b6370 -Block 0014 [ 82]: 1587c4af6af71ce8 -Block 0014 [ 83]: 027ed030408cc841 -Block 0014 [ 84]: d45f3eb0f7b7f052 -Block 0014 [ 85]: 083e586b7012eb4c -Block 0014 [ 86]: 81759483e9052d0f -Block 0014 [ 87]: 23e2772882e5546c -Block 0014 [ 88]: 1d74a83735a0db58 -Block 0014 [ 89]: 5d935ea8473c6398 -Block 0014 [ 90]: 0b0fd563c775880f -Block 0014 [ 91]: 1218a8d3ba6ae9a4 -Block 0014 [ 92]: d5c911bd9a8640cc -Block 0014 [ 93]: 376494e621d203cd -Block 0014 [ 94]: 8c2c4494b9df3951 -Block 0014 [ 95]: 130978d97331600b -Block 0014 [ 96]: 765194ab231b7bed -Block 0014 [ 97]: b53f722b638245e1 -Block 0014 [ 98]: c6856ff721c9c1ed -Block 0014 [ 99]: 523f867258c71f59 -Block 0014 [100]: d642325da3bd09cb -Block 0014 [101]: 8b366095a9e51ed0 -Block 0014 [102]: 6ece98e19c16ee25 -Block 0014 [103]: 957e4fbfc5b2a2d8 -Block 0014 [104]: a41385404b565c53 -Block 0014 [105]: 26fc269b14a47524 -Block 0014 [106]: 3a4683b556b2f6bd -Block 0014 [107]: 6ccea20da5f82531 -Block 0014 [108]: c3ffc17acf0393c6 -Block 0014 [109]: bf08ac75b90d98e0 -Block 0014 [110]: 5a122193aed55940 -Block 0014 [111]: 084d049330ecadec -Block 0014 [112]: 1706e0a7dcccabb7 -Block 0014 [113]: 000991105c6c8f3d -Block 0014 [114]: c1c69b4ac877565c -Block 0014 [115]: 595a2b07288ab253 -Block 0014 [116]: a8aa03a94753404c -Block 0014 [117]: f809a07b03509229 -Block 0014 [118]: cbc91fdf8b43211e -Block 0014 [119]: 98e2b8994604e2ec -Block 0014 [120]: c4b3d55bc831b4cd -Block 0014 [121]: 3e9c014657b846ae -Block 0014 [122]: e7274ed01235e01e -Block 0014 [123]: c841b3db0f707035 -Block 0014 [124]: fb05ca324bc6dcd2 -Block 0014 [125]: 43188f4c2a383a69 -Block 0014 [126]: 745be1744b87f4d0 -Block 0014 [127]: be5103b3da91537f -Block 0015 [ 0]: 0b1e73a777ee2ef4 -Block 0015 [ 1]: e27b761a060bee9d -Block 0015 [ 2]: d537468cff417c96 -Block 0015 [ 3]: 43ff10be2ed97ac1 -Block 0015 [ 4]: f17596d1bb685e01 -Block 0015 [ 5]: 577cb81c02ade2a1 -Block 0015 [ 6]: 8932ec48abcdd2c2 -Block 0015 [ 7]: cfd3b31d0422a34f -Block 0015 [ 8]: 6bd786099bc0232e -Block 0015 [ 9]: 637418cbc60b7be7 -Block 0015 [ 10]: d4f327b243b4a6b7 -Block 0015 [ 11]: f6d161e009a4fa7e -Block 0015 [ 12]: 00ed2aeb4d221e4b -Block 0015 [ 13]: 677611509c496f06 -Block 0015 [ 14]: a0ce344aeaa2755b -Block 0015 [ 15]: d5afc0b55da2dc8c -Block 0015 [ 16]: cacf20ccd42a49c6 -Block 0015 [ 17]: 44dcbf6eb1d6fa74 -Block 0015 [ 18]: acf25a1ccd4e91d1 -Block 0015 [ 19]: acb38fadd1728e39 -Block 0015 [ 20]: c8a3a11dfb0dd493 -Block 0015 [ 21]: a68cbe6742cd613c -Block 0015 [ 22]: 477497ecfaf2de1a -Block 0015 [ 23]: 836f2083f0746bd9 -Block 0015 [ 24]: 03ebbf00cbfa617e -Block 0015 [ 25]: 6d9e84e99c076053 -Block 0015 [ 26]: 4296c823a4da4a26 -Block 0015 [ 27]: e2dcd3f04aa2616a -Block 0015 [ 28]: 01dc0b71c8fb76be -Block 0015 [ 29]: 60ca19bf120a2f95 -Block 0015 [ 30]: bfeb35484f61d378 -Block 0015 [ 31]: 6bf92228db9a33e8 -Block 0015 [ 32]: 396144e9a551c26a -Block 0015 [ 33]: 2765913f3336e0b2 -Block 0015 [ 34]: 85b9cefe4821e0a2 -Block 0015 [ 35]: 35687f89b0820450 -Block 0015 [ 36]: c5ecb87365bdfcb2 -Block 0015 [ 37]: 6666f725b2ea9dd8 -Block 0015 [ 38]: a2cb973d7c42b0a5 -Block 0015 [ 39]: ebb5253e5c84a52e -Block 0015 [ 40]: 71eff3a4c6e669e6 -Block 0015 [ 41]: 6813a4ef356a43f7 -Block 0015 [ 42]: 7676968dbdd07d6e -Block 0015 [ 43]: d1e5e68bd9d4893f -Block 0015 [ 44]: faf8c89f950a8265 -Block 0015 [ 45]: b97a51d9f801af68 -Block 0015 [ 46]: 9033cfbabc39abe6 -Block 0015 [ 47]: 2b42295a82afd95c -Block 0015 [ 48]: 8756894b48b6a194 -Block 0015 [ 49]: 0b246f0a868a7be3 -Block 0015 [ 50]: 23198a6685fdeac2 -Block 0015 [ 51]: 45a73cc01fdfacdd -Block 0015 [ 52]: 0d7a0e2ebc480c33 -Block 0015 [ 53]: cf4b325e8bab511e -Block 0015 [ 54]: 3eff637988cf0774 -Block 0015 [ 55]: c76b19610482d56c -Block 0015 [ 56]: 8e73b0efde325f6e -Block 0015 [ 57]: 30baa18d52a190f9 -Block 0015 [ 58]: 04bc7cbec3e1296d -Block 0015 [ 59]: 27f1935bf5070068 -Block 0015 [ 60]: d6b815634d4ae1e3 -Block 0015 [ 61]: 83894d0b328a58d6 -Block 0015 [ 62]: a3de5c70b944f94a -Block 0015 [ 63]: 094ee1ace2b659ec -Block 0015 [ 64]: c10fc00408bf8c9c -Block 0015 [ 65]: 9d8ffe4ba77a69d1 -Block 0015 [ 66]: 32a011b4bc285e9e -Block 0015 [ 67]: 8a79607034c38a6b -Block 0015 [ 68]: bd5608f27c6b7742 -Block 0015 [ 69]: 40ea6a827e3722f2 -Block 0015 [ 70]: f5e3a539cd3d7503 -Block 0015 [ 71]: f5b21cff542fd4ce -Block 0015 [ 72]: fe85cad6c8b8ea59 -Block 0015 [ 73]: f2cd28dcea30e15b -Block 0015 [ 74]: f2316ae6f6cef0cf -Block 0015 [ 75]: 4d87f7d71c8dc4d6 -Block 0015 [ 76]: 7dd9488c06f66047 -Block 0015 [ 77]: 16dedd6ee0192839 -Block 0015 [ 78]: 9914849e597348d4 -Block 0015 [ 79]: d43eb9ac42da1e48 -Block 0015 [ 80]: c39efef1ab2785f9 -Block 0015 [ 81]: ad73868ea70052e5 -Block 0015 [ 82]: f3d8083fd9d07e1a -Block 0015 [ 83]: f87a8d342547820b -Block 0015 [ 84]: cb403cea0a57424a -Block 0015 [ 85]: 060dcd9833e6ec1c -Block 0015 [ 86]: b3d75fd35640b405 -Block 0015 [ 87]: 135c300438f94989 -Block 0015 [ 88]: 48d1266ae1d00a17 -Block 0015 [ 89]: c06da4eb674abfbd -Block 0015 [ 90]: ce4421fd18d801e4 -Block 0015 [ 91]: c7a9b0668bdf8c15 -Block 0015 [ 92]: f46bd3cae3612fc0 -Block 0015 [ 93]: a3cbe2c4df6f9392 -Block 0015 [ 94]: 515c3b7d9af607a7 -Block 0015 [ 95]: b01dd0fa390288bb -Block 0015 [ 96]: 9393af62fec2df24 -Block 0015 [ 97]: 422015611463c8ce -Block 0015 [ 98]: af3a8db165bcce2b -Block 0015 [ 99]: 81d31594a3ba8043 -Block 0015 [100]: 3858b6ff51b69612 -Block 0015 [101]: 4647cbf86795a5e0 -Block 0015 [102]: 61c0214fd46752b3 -Block 0015 [103]: dfe53ac91b2bc371 -Block 0015 [104]: 4f82c67ab717dbdd -Block 0015 [105]: c9e3bbe1facd12f3 -Block 0015 [106]: cd2ad18317a7cfd1 -Block 0015 [107]: 6e259d50f4c9e146 -Block 0015 [108]: 74c1f8e97c3c3414 -Block 0015 [109]: 7f61b05064b73433 -Block 0015 [110]: 896499834b24fa2c -Block 0015 [111]: fc607cee2c0c4911 -Block 0015 [112]: dd9e1d6f7c0dca82 -Block 0015 [113]: cfd61ea3a923cb9f -Block 0015 [114]: 27bdfb046533bbf7 -Block 0015 [115]: 68b8b91fc9d5e2bc -Block 0015 [116]: c41f9c3252585ef7 -Block 0015 [117]: 121fc0b83aca80d3 -Block 0015 [118]: 28c99e1fe846c40e -Block 0015 [119]: f5cb391772578157 -Block 0015 [120]: fc057e59876dadc8 -Block 0015 [121]: df615ef69f9d5003 -Block 0015 [122]: c318561811c5b2f8 -Block 0015 [123]: eaf943ad5437bf9c -Block 0015 [124]: 602cfc1d54fb6b87 -Block 0015 [125]: e83566f7d16e8b6e -Block 0015 [126]: c608bee43eda7ccc -Block 0015 [127]: 811a4bfb6e79bb5f -Block 0016 [ 0]: 5aa613f43289c678 -Block 0016 [ 1]: eb1cf650e24f64e4 -Block 0016 [ 2]: d7de8f818eea22a3 -Block 0016 [ 3]: 929f209f685d0a56 -Block 0016 [ 4]: 1d1190318e29cc38 -Block 0016 [ 5]: 643340be7d550134 -Block 0016 [ 6]: d60a19f28325f117 -Block 0016 [ 7]: c28ddf5ac5d01fbc -Block 0016 [ 8]: 4eaa66adb9c0f9f9 -Block 0016 [ 9]: c368ae8857416af0 -Block 0016 [ 10]: 26334597db375712 -Block 0016 [ 11]: 988de515dbe320d5 -Block 0016 [ 12]: 0cd7dd0ccbdb2e97 -Block 0016 [ 13]: 43cac731180562be -Block 0016 [ 14]: eebae2e8c065ccd1 -Block 0016 [ 15]: c4c5b81c55bac77c -Block 0016 [ 16]: 21a360ff74a67369 -Block 0016 [ 17]: c7c681a57877b6fa -Block 0016 [ 18]: 05e6a04af6e587c3 -Block 0016 [ 19]: b8d073cb845684bd -Block 0016 [ 20]: 49f10e47eb5ff574 -Block 0016 [ 21]: 5b4fa94638350588 -Block 0016 [ 22]: 2730010cdfcf27a3 -Block 0016 [ 23]: 7ecae19dffd91500 -Block 0016 [ 24]: 41131fc8f0614eac -Block 0016 [ 25]: 372476265e12ad62 -Block 0016 [ 26]: e3f6d0ffd33e4270 -Block 0016 [ 27]: 2a9748775d87bf7a -Block 0016 [ 28]: d9cb255da617b822 -Block 0016 [ 29]: 59aaeb79c983f697 -Block 0016 [ 30]: 4177b94dacf2d10f -Block 0016 [ 31]: 333b04a58feb4e3d -Block 0016 [ 32]: 14c8ca8825310e99 -Block 0016 [ 33]: c3a4ce660e9c5798 -Block 0016 [ 34]: 001881b7d15216ef -Block 0016 [ 35]: d6de939535180d21 -Block 0016 [ 36]: d265e410d5f506dd -Block 0016 [ 37]: d7e8f17f836ca622 -Block 0016 [ 38]: da4fe4e81cc609cd -Block 0016 [ 39]: 8c95ff4268b77b20 -Block 0016 [ 40]: b564b4648cd5acff -Block 0016 [ 41]: 47809e79e0e48077 -Block 0016 [ 42]: 9d1490dd04b1cc81 -Block 0016 [ 43]: 8efffc9fae826537 -Block 0016 [ 44]: 34aa25d1eb75e78f -Block 0016 [ 45]: 5777189b9ed6025d -Block 0016 [ 46]: 90fd722d4411962f -Block 0016 [ 47]: bc2372752ce8cf84 -Block 0016 [ 48]: 1381285845dd8d69 -Block 0016 [ 49]: 7ce920c4389441d2 -Block 0016 [ 50]: a93d565658f24c2e -Block 0016 [ 51]: 008ccb8a47b9442e -Block 0016 [ 52]: 10f37f8f6e6bc101 -Block 0016 [ 53]: bb972856b12de631 -Block 0016 [ 54]: 4209e28b0e6baf1f -Block 0016 [ 55]: 055ed32244ea5546 -Block 0016 [ 56]: 8c4ff16eb6e336f4 -Block 0016 [ 57]: e6c6bbbe43af4439 -Block 0016 [ 58]: ba0241f2ff155ac7 -Block 0016 [ 59]: c7610b8ede3442e8 -Block 0016 [ 60]: 65ecf5ecc7d7b66d -Block 0016 [ 61]: 1acb0b6fdf2ccc61 -Block 0016 [ 62]: 7bcd0d4f4abad1b5 -Block 0016 [ 63]: 628f518a0e821ecd -Block 0016 [ 64]: e68760a4e903c2b6 -Block 0016 [ 65]: 6afa82a957226547 -Block 0016 [ 66]: dde32db99e588dfd -Block 0016 [ 67]: 7a8fefe578b65cdf -Block 0016 [ 68]: 9b389330d717ed64 -Block 0016 [ 69]: 43bdf11a17170565 -Block 0016 [ 70]: 8202c7f51d57555a -Block 0016 [ 71]: 6774f52f4386d0f9 -Block 0016 [ 72]: 061c87e870cce6cd -Block 0016 [ 73]: 4fb3cbc0e190081c -Block 0016 [ 74]: aea43a9c584b3bd1 -Block 0016 [ 75]: 7814f7a36dbecc04 -Block 0016 [ 76]: 36942f8d18a60829 -Block 0016 [ 77]: 3af6fd6eb129deaf -Block 0016 [ 78]: f6d8cb57312b2f93 -Block 0016 [ 79]: 0d09e153aa59daef -Block 0016 [ 80]: 6694dd3785ad79a2 -Block 0016 [ 81]: f804675b1db096ca -Block 0016 [ 82]: af28c00169838f9a -Block 0016 [ 83]: 7e9f31e2ca03f44d -Block 0016 [ 84]: 0a40a5fea905e6da -Block 0016 [ 85]: ea6e6ad593c9a00a -Block 0016 [ 86]: 60ce67973717f0af -Block 0016 [ 87]: 5119b20ef9174210 -Block 0016 [ 88]: 4ad6e8d2ea685ad4 -Block 0016 [ 89]: f23bea2bb343d013 -Block 0016 [ 90]: 8c18a4ec72902c35 -Block 0016 [ 91]: a5bdc1cbada363a0 -Block 0016 [ 92]: 225d167810799ed8 -Block 0016 [ 93]: 028f905fc8f31809 -Block 0016 [ 94]: 929022764e02b432 -Block 0016 [ 95]: 39cabbd42dbca708 -Block 0016 [ 96]: c622b92e3a1f8a98 -Block 0016 [ 97]: f5411fb0c090febe -Block 0016 [ 98]: 1577aa81965ac648 -Block 0016 [ 99]: 7244612848c73c2f -Block 0016 [100]: 3e2ce65d4f47fa17 -Block 0016 [101]: 3fb2a4d1c9be489e -Block 0016 [102]: 0287f8413494b77d -Block 0016 [103]: 8c5a45a4cf7fd7a6 -Block 0016 [104]: f59eb76ce9ee5824 -Block 0016 [105]: eb2ef1cd6870c0cf -Block 0016 [106]: 8a634c740861120e -Block 0016 [107]: 50fd7f477fadbbba -Block 0016 [108]: 972e3be524189b9d -Block 0016 [109]: fdcc72540a485d9d -Block 0016 [110]: 431ff388b18c20b2 -Block 0016 [111]: 84b14a35e1651e87 -Block 0016 [112]: 049c81788d686bea -Block 0016 [113]: 841227e268589776 -Block 0016 [114]: 1984c047ffeb7202 -Block 0016 [115]: 2debb849661993bc -Block 0016 [116]: 64e24153b0795338 -Block 0016 [117]: 68a8fd2c8eaea8c4 -Block 0016 [118]: 4588aa2a8b4b7e64 -Block 0016 [119]: ffc79b51ee4aa24e -Block 0016 [120]: ee0108716b3720aa -Block 0016 [121]: 815b13553b12bf61 -Block 0016 [122]: ede614d36497d5a6 -Block 0016 [123]: 8ddd0e3f2fe5e85e -Block 0016 [124]: 530dca4f54d31258 -Block 0016 [125]: 61edbf72ee4111ce -Block 0016 [126]: 6f9d762b442949b7 -Block 0016 [127]: 824443969c263569 -Block 0017 [ 0]: c26b5fb7ee819975 -Block 0017 [ 1]: 222cc666ae909d6d -Block 0017 [ 2]: c47520b833dde283 -Block 0017 [ 3]: d8df98adf7c4e9de -Block 0017 [ 4]: e5de16b4d34325af -Block 0017 [ 5]: b00cea65fe6cfe19 -Block 0017 [ 6]: 46db08563e7ea0e1 -Block 0017 [ 7]: a5893dba47999f5f -Block 0017 [ 8]: c085e21bb0da3d0f -Block 0017 [ 9]: 1f172eef8cb80b7f -Block 0017 [ 10]: 6b6f645c2443cc04 -Block 0017 [ 11]: b5686dbe596aab80 -Block 0017 [ 12]: cc34ea0ef0d73359 -Block 0017 [ 13]: 97a568c24dc38146 -Block 0017 [ 14]: 778f6cdeb2dae4d9 -Block 0017 [ 15]: 31f8d50c4456bcf2 -Block 0017 [ 16]: c28a9374fe7ba670 -Block 0017 [ 17]: 7b3a8991f0c13cd0 -Block 0017 [ 18]: 6fa3b1c8458e7844 -Block 0017 [ 19]: ea444aa2832d39a3 -Block 0017 [ 20]: fbc811cc74910198 -Block 0017 [ 21]: 2ba1f1b6c73336d6 -Block 0017 [ 22]: b6ca4186998da588 -Block 0017 [ 23]: adf168017ff13adb -Block 0017 [ 24]: e5a80bad1ce6fd4c -Block 0017 [ 25]: 5a006185c3bf0e46 -Block 0017 [ 26]: c018264d3a3303a3 -Block 0017 [ 27]: 6d4f26be949b0710 -Block 0017 [ 28]: 570663118a4576b5 -Block 0017 [ 29]: cf8c5362ef21623d -Block 0017 [ 30]: 5a58b134066bb910 -Block 0017 [ 31]: dc8a5af3b6d8e51a -Block 0017 [ 32]: c91e14f271afe7c8 -Block 0017 [ 33]: 837d36649ff731f0 -Block 0017 [ 34]: 255f48975a9c1166 -Block 0017 [ 35]: 36b33685679ae942 -Block 0017 [ 36]: b78188f30b332a6e -Block 0017 [ 37]: fbd802b61918aaab -Block 0017 [ 38]: 95a224cf20cabbdf -Block 0017 [ 39]: e4fafe09ac44ceae -Block 0017 [ 40]: 8795c7eb6ce53357 -Block 0017 [ 41]: 9baf142cd14ebc74 -Block 0017 [ 42]: e056de9c637bce60 -Block 0017 [ 43]: 41cb37b4eef494eb -Block 0017 [ 44]: 82e788786c7c4b2d -Block 0017 [ 45]: ba3fade55b845c0a -Block 0017 [ 46]: 61ab9386f6de7b43 -Block 0017 [ 47]: b27f8f4f8801afe5 -Block 0017 [ 48]: e7545b6b407bb4e5 -Block 0017 [ 49]: 1b6b292aebb22e12 -Block 0017 [ 50]: 4ea78d3346c80c00 -Block 0017 [ 51]: e51c4614215b48e3 -Block 0017 [ 52]: 350a5fcfa8096d76 -Block 0017 [ 53]: beb0d442e51228f6 -Block 0017 [ 54]: 2dd148dbc8e4339e -Block 0017 [ 55]: b6f6e6939139ed26 -Block 0017 [ 56]: 55bae151f650b757 -Block 0017 [ 57]: 3ecc387a6897bb4b -Block 0017 [ 58]: 81f3ba27544462df -Block 0017 [ 59]: aa724cba27fb7ada -Block 0017 [ 60]: 49f4c6cd3d1001b7 -Block 0017 [ 61]: 5de8a69be3fc4b01 -Block 0017 [ 62]: e7660de671733a47 -Block 0017 [ 63]: 4c848327b9258030 -Block 0017 [ 64]: e1af30e156752a3e -Block 0017 [ 65]: f888b1b30c51e5c2 -Block 0017 [ 66]: cefd61d444cdb0aa -Block 0017 [ 67]: 1366818eee49b310 -Block 0017 [ 68]: 28ef872bff4aaa9d -Block 0017 [ 69]: 52b64397c2378327 -Block 0017 [ 70]: 72dba4affff12aa3 -Block 0017 [ 71]: 43bd82be33a14f30 -Block 0017 [ 72]: 373da4a41d079ee3 -Block 0017 [ 73]: 70610f826873a4be -Block 0017 [ 74]: efc8a7cefecfc06b -Block 0017 [ 75]: a65c4ddf436da72a -Block 0017 [ 76]: ff4128178e114153 -Block 0017 [ 77]: 933bb6ef1ba8b391 -Block 0017 [ 78]: 24da4f6be714eede -Block 0017 [ 79]: 8476945cdffce2bc -Block 0017 [ 80]: 1060159b32839b9a -Block 0017 [ 81]: 7f3b13732e126432 -Block 0017 [ 82]: 1a67a6f096398f36 -Block 0017 [ 83]: 0050c03fde4ebbf2 -Block 0017 [ 84]: 2e33bfd7b983f684 -Block 0017 [ 85]: 142db665d25ff4f5 -Block 0017 [ 86]: 7be937815c018b34 -Block 0017 [ 87]: 44a52fc1a3a14b11 -Block 0017 [ 88]: 122f8c4bf8af9792 -Block 0017 [ 89]: 7df91926add2170d -Block 0017 [ 90]: 14368020f2506eab -Block 0017 [ 91]: 8d32bfcb10d230bc -Block 0017 [ 92]: 3043ef1eb7d8fc1b -Block 0017 [ 93]: 3ac8946c053bb698 -Block 0017 [ 94]: 20881f9043aea007 -Block 0017 [ 95]: 96f9edafe87ebeef -Block 0017 [ 96]: b258dfed76ad1d36 -Block 0017 [ 97]: 6eff6e88a743b710 -Block 0017 [ 98]: 6fba5b916d6e9901 -Block 0017 [ 99]: aa78a708b02b1617 -Block 0017 [100]: 6acf76f47da59dc5 -Block 0017 [101]: d822d6b28b552d9d -Block 0017 [102]: 07e626d948208797 -Block 0017 [103]: e6155e0219831643 -Block 0017 [104]: 910e0e6785c65ce3 -Block 0017 [105]: a5baf4068d6ba4dc -Block 0017 [106]: 393b2a4e94962d2b -Block 0017 [107]: bf728ee972d385b6 -Block 0017 [108]: 38b80e3235f30a5a -Block 0017 [109]: 396bfe4a2864e7df -Block 0017 [110]: 34111fbf07f6a12e -Block 0017 [111]: 63e095883c1ee1cf -Block 0017 [112]: 59eabda66b1b80f8 -Block 0017 [113]: f014bd7d3796df5a -Block 0017 [114]: 4f1349f9a0845b27 -Block 0017 [115]: cf273ea085e693ee -Block 0017 [116]: 24c5445ef8c8ce4f -Block 0017 [117]: 3f5a67d8f3695ed0 -Block 0017 [118]: 3eecddc14dd84a98 -Block 0017 [119]: bcc6260622f109a7 -Block 0017 [120]: 73c11a320135cbba -Block 0017 [121]: 6ff7603869077601 -Block 0017 [122]: c05b3dc3b45d2d9d -Block 0017 [123]: 641bbf7fccc74c80 -Block 0017 [124]: b9727ef5a77e7fa1 -Block 0017 [125]: 47cdc8eb2d9d4edf -Block 0017 [126]: 29a16a1ecda84ccc -Block 0017 [127]: 63550fc73aec391a -Block 0018 [ 0]: 73a43a37ceeea256 -Block 0018 [ 1]: 0e2035fdf4ef4e88 -Block 0018 [ 2]: 55cf35b8b5a10862 -Block 0018 [ 3]: 64e77a47e8032bc4 -Block 0018 [ 4]: a9576618de3cb90e -Block 0018 [ 5]: b833f7216445c57c -Block 0018 [ 6]: 759f838d4ad4c434 -Block 0018 [ 7]: abb5f81f0725a89b -Block 0018 [ 8]: e3b1552cc9c71c21 -Block 0018 [ 9]: 3d9a2f3d93020b83 -Block 0018 [ 10]: 0e53a0bfb7f81d39 -Block 0018 [ 11]: ae796955deec0480 -Block 0018 [ 12]: 7693d55f8a2e92eb -Block 0018 [ 13]: 991c70ec78caa12a -Block 0018 [ 14]: 4d7eab83941af3d2 -Block 0018 [ 15]: 81326a33ee4182c2 -Block 0018 [ 16]: 06c1b888e42568f6 -Block 0018 [ 17]: d5c51a781034bc9b -Block 0018 [ 18]: 119a5b2752527a89 -Block 0018 [ 19]: 50b5d7b5c7eb7f9b -Block 0018 [ 20]: d8f6e49e832454eb -Block 0018 [ 21]: 9f7e79eb57294218 -Block 0018 [ 22]: 3b5c4a73081250de -Block 0018 [ 23]: d0733808f1314c8c -Block 0018 [ 24]: e63fe566af3cc19d -Block 0018 [ 25]: 2272a3a74553c0c8 -Block 0018 [ 26]: e90c71421873c571 -Block 0018 [ 27]: a9cb61075002ac10 -Block 0018 [ 28]: d8b97ef74f52228b -Block 0018 [ 29]: 9b4eac66fb0f74c1 -Block 0018 [ 30]: b022a4d505f08e11 -Block 0018 [ 31]: 85663ee1ac562468 -Block 0018 [ 32]: e241e44001a29b80 -Block 0018 [ 33]: 592e7308934d23d3 -Block 0018 [ 34]: e731a6b6b0c36f9e -Block 0018 [ 35]: 41493fb1cb8eaa8a -Block 0018 [ 36]: 9dbf21d7ce4bc63f -Block 0018 [ 37]: 5a9234f5bdd75f32 -Block 0018 [ 38]: 5b81afda5c8f5380 -Block 0018 [ 39]: d5a7986b11dff5f0 -Block 0018 [ 40]: 505b095dce538a6e -Block 0018 [ 41]: 8409cedfb662722a -Block 0018 [ 42]: a760af89ad1bd964 -Block 0018 [ 43]: 9ccf16a9261ec931 -Block 0018 [ 44]: dc673b0119a3477f -Block 0018 [ 45]: 1bb7fefe35bd686c -Block 0018 [ 46]: 83d8053357e55423 -Block 0018 [ 47]: 2f537a2d509a82d6 -Block 0018 [ 48]: 33212ec5cb2789c2 -Block 0018 [ 49]: d12d2b59b2261562 -Block 0018 [ 50]: b071f8845b921091 -Block 0018 [ 51]: 9c8ffe0baa746df0 -Block 0018 [ 52]: dbf600f18d293676 -Block 0018 [ 53]: 3ada85d4b8e36c52 -Block 0018 [ 54]: faba10ce3a1e786a -Block 0018 [ 55]: 980f6bc7809fd949 -Block 0018 [ 56]: 604a76d6b5170460 -Block 0018 [ 57]: d91b2079a9fdeaf1 -Block 0018 [ 58]: 2f1f4ec73b007466 -Block 0018 [ 59]: 730c109369577f61 -Block 0018 [ 60]: 66c9a5d237aabd90 -Block 0018 [ 61]: c3621cfd2e1b32d2 -Block 0018 [ 62]: be084ebc2ad00f94 -Block 0018 [ 63]: cf9043e50b81646c -Block 0018 [ 64]: 9275b31fbb6fa821 -Block 0018 [ 65]: 4ae62cefc32f71df -Block 0018 [ 66]: 66221bf21cb89a3f -Block 0018 [ 67]: 58ffbd72ed2a8af9 -Block 0018 [ 68]: b85a6fc928ff7cff -Block 0018 [ 69]: a53d773bd978acde -Block 0018 [ 70]: ed70197136db8b0e -Block 0018 [ 71]: b683e16a459a9666 -Block 0018 [ 72]: f6e9b4d1d0f7c0d2 -Block 0018 [ 73]: a3dd151d4bd18e9e -Block 0018 [ 74]: c88c2079b78e4f1b -Block 0018 [ 75]: d619e95f24b470a7 -Block 0018 [ 76]: 38d915f1c4df1bb3 -Block 0018 [ 77]: 9a52ef525657b9a4 -Block 0018 [ 78]: c3004355d9ea136f -Block 0018 [ 79]: 4f2231eb8ed9c0b5 -Block 0018 [ 80]: cce5f29cfb7e1899 -Block 0018 [ 81]: 6dccea4449b58d06 -Block 0018 [ 82]: 41a0939b714ac5bd -Block 0018 [ 83]: da4c028c51d8bba0 -Block 0018 [ 84]: 1235b86184cd97ce -Block 0018 [ 85]: e0bcb44cc34c9f8a -Block 0018 [ 86]: 2a8e24cc0dd2c27a -Block 0018 [ 87]: cde65c0fa2707b5b -Block 0018 [ 88]: a6d09ebe2b21cf33 -Block 0018 [ 89]: 8626d21d80c62123 -Block 0018 [ 90]: ac3923b1e61979a9 -Block 0018 [ 91]: dd237b455e10839a -Block 0018 [ 92]: d4036773fa739341 -Block 0018 [ 93]: 7a4fb3e21a5fac16 -Block 0018 [ 94]: affec1c8b426dc28 -Block 0018 [ 95]: 8cf50bb8fa9b855d -Block 0018 [ 96]: 0fdc69cd6c830993 -Block 0018 [ 97]: 097a687fdf92aaf9 -Block 0018 [ 98]: 188b0ddccfdd4db9 -Block 0018 [ 99]: 1313002013950cf0 -Block 0018 [100]: 5369119751e8098c -Block 0018 [101]: 03067881a7f54f35 -Block 0018 [102]: 3e75d27737b8145f -Block 0018 [103]: a7c719391c252bbd -Block 0018 [104]: d07640453388401f -Block 0018 [105]: b8647a6324a5229d -Block 0018 [106]: 803bc6e3d4e596d5 -Block 0018 [107]: 11a7ef37af4a42db -Block 0018 [108]: 2b1fe566afb105be -Block 0018 [109]: 37e0b8ae65f50773 -Block 0018 [110]: b2164d7e5c798eba -Block 0018 [111]: de438d75388cf065 -Block 0018 [112]: 13d152df2161c345 -Block 0018 [113]: f5fbef555db63c4e -Block 0018 [114]: 91ae316a4024ff0b -Block 0018 [115]: 067cb50b87d9c64d -Block 0018 [116]: 6d428f1e643cb8cd -Block 0018 [117]: 59974616208dae08 -Block 0018 [118]: 5301b3d1c726cf2e -Block 0018 [119]: 8ed2dd2fc14af4e1 -Block 0018 [120]: 8bfb8ebcfa3fbd57 -Block 0018 [121]: 9211c9360b96b845 -Block 0018 [122]: 51ef8411a5e32f44 -Block 0018 [123]: 1c15a0f64623bb38 -Block 0018 [124]: da59218d786afcd6 -Block 0018 [125]: 6ceed727611ae6d9 -Block 0018 [126]: 68ad4703452f6c84 -Block 0018 [127]: 1435aec09f183fb8 -Block 0019 [ 0]: db7857f2d02de914 -Block 0019 [ 1]: be1d2ca2f8f4075b -Block 0019 [ 2]: 3cacf2b9675c4610 -Block 0019 [ 3]: b87fbbaf79c1c56b -Block 0019 [ 4]: 2be598ef088c38a3 -Block 0019 [ 5]: 7b85cb8efe6326f6 -Block 0019 [ 6]: 07ee0d3a22efc0dd -Block 0019 [ 7]: 2bc9056257f239cf -Block 0019 [ 8]: 4cbcf454a2ab394b -Block 0019 [ 9]: 021316d70a2b01ea -Block 0019 [ 10]: 1c5a2e1c4ef3294c -Block 0019 [ 11]: a5510b60639664fe -Block 0019 [ 12]: a260b09b9f8c9822 -Block 0019 [ 13]: b1152f2ebb303876 -Block 0019 [ 14]: a6c677798fb6cb53 -Block 0019 [ 15]: 8c3e0ce6406f8da1 -Block 0019 [ 16]: cd7a1f62071c8b92 -Block 0019 [ 17]: 921e44594ca4e496 -Block 0019 [ 18]: d571d4ddfc513301 -Block 0019 [ 19]: 27d1849bdc7457ea -Block 0019 [ 20]: 5bbfb2ea78c0fd8d -Block 0019 [ 21]: 4dfe80df57f16197 -Block 0019 [ 22]: d7373d84a238e7c4 -Block 0019 [ 23]: b32dd784b7551e77 -Block 0019 [ 24]: 7755a8fafb9982c0 -Block 0019 [ 25]: 951adac79fec5f93 -Block 0019 [ 26]: 73d8aa9cd3a6c6b9 -Block 0019 [ 27]: 19b34676edb7b671 -Block 0019 [ 28]: 15f74ed11989580c -Block 0019 [ 29]: 3abaaf249c172ce8 -Block 0019 [ 30]: 92180c83d6ae4cac -Block 0019 [ 31]: c7d7991a9072de3f -Block 0019 [ 32]: 01d93f684dede00b -Block 0019 [ 33]: 13aeba95c44ad304 -Block 0019 [ 34]: 74080c28c6a71794 -Block 0019 [ 35]: 11576f82596677c5 -Block 0019 [ 36]: eeda905afd7677b3 -Block 0019 [ 37]: 9b31f5f2dafd2d5c -Block 0019 [ 38]: 1debb34c8287cfe8 -Block 0019 [ 39]: f59cc690e1b67d64 -Block 0019 [ 40]: bf2f8c54adb32bc0 -Block 0019 [ 41]: fb307c505280b40e -Block 0019 [ 42]: d10c03fbc2ece8dc -Block 0019 [ 43]: 47aa1323473fffae -Block 0019 [ 44]: 34a1e267c5bf8b28 -Block 0019 [ 45]: 330076c1b27ac30b -Block 0019 [ 46]: b355799c94a30d3b -Block 0019 [ 47]: 759bc21292cc7209 -Block 0019 [ 48]: 6b9408f24caf17ee -Block 0019 [ 49]: 9961d984925ba515 -Block 0019 [ 50]: 4cfbca8d8ba561af -Block 0019 [ 51]: 47060c3700a13560 -Block 0019 [ 52]: d5e2ca29a0b8c65f -Block 0019 [ 53]: 28c833e35cc6dec0 -Block 0019 [ 54]: 6a262ee512b37c9c -Block 0019 [ 55]: 612cc2c7bbf208a2 -Block 0019 [ 56]: 4ec329d8efe4ed3f -Block 0019 [ 57]: 1cddbd0577186377 -Block 0019 [ 58]: 517c387099bb54ba -Block 0019 [ 59]: 186fa06056a9d5e9 -Block 0019 [ 60]: e35aa42952e22c35 -Block 0019 [ 61]: a2c47f55554aadab -Block 0019 [ 62]: efd55e5dcbf3de9f -Block 0019 [ 63]: 368011c1f565c120 -Block 0019 [ 64]: 99f2d82e3ac72e75 -Block 0019 [ 65]: ca63fee28220696b -Block 0019 [ 66]: 79735e120b709d74 -Block 0019 [ 67]: 0e5a0bcf65320750 -Block 0019 [ 68]: 87d6697d5526af66 -Block 0019 [ 69]: e59c1874a397ed6c -Block 0019 [ 70]: f46542c5f5320deb -Block 0019 [ 71]: 6ab985988050992e -Block 0019 [ 72]: 46ddc8f51e8bdfaa -Block 0019 [ 73]: 0af96f044bb69b5d -Block 0019 [ 74]: bdf2a9eb1cbb60a2 -Block 0019 [ 75]: 427a9e01b056e536 -Block 0019 [ 76]: ba27781cc41cbe82 -Block 0019 [ 77]: acd6fe3b7560d239 -Block 0019 [ 78]: e6942df20c5330a5 -Block 0019 [ 79]: 801fd2c2a27fee79 -Block 0019 [ 80]: 78df49edf83e411a -Block 0019 [ 81]: d0b13589858cd937 -Block 0019 [ 82]: 07e475122d4e1ca9 -Block 0019 [ 83]: a6080a9af8853c8c -Block 0019 [ 84]: 5b0fd38d93c861f0 -Block 0019 [ 85]: 789fa96618507733 -Block 0019 [ 86]: c23044d37fc96600 -Block 0019 [ 87]: f9efa88ccb76e47d -Block 0019 [ 88]: 8c8c5d49a22aebeb -Block 0019 [ 89]: 33d452028ad70cd2 -Block 0019 [ 90]: d1ebb9dac3b1eb18 -Block 0019 [ 91]: 2cacfb9ed2b42519 -Block 0019 [ 92]: 583943507463e237 -Block 0019 [ 93]: e8d35b87bd10da44 -Block 0019 [ 94]: 57a83ae010eaa129 -Block 0019 [ 95]: abd24c860084ab8b -Block 0019 [ 96]: aad60968ff3e72a7 -Block 0019 [ 97]: db6b818b858e0f95 -Block 0019 [ 98]: a236a5f5e6ed5c34 -Block 0019 [ 99]: 9ee495a89806571d -Block 0019 [100]: d5309240aeaa129b -Block 0019 [101]: 0678c6008b7bdfa3 -Block 0019 [102]: 898c9b9a4ecc1135 -Block 0019 [103]: 04c9d151c3936024 -Block 0019 [104]: fe5419eeb8909a79 -Block 0019 [105]: db4cde09a43e55ef -Block 0019 [106]: 03e287f745584c27 -Block 0019 [107]: 4b3e7c901a287e12 -Block 0019 [108]: b0fe9f54ac5d1820 -Block 0019 [109]: 19e9481bfb234548 -Block 0019 [110]: e70140dc32fae16c -Block 0019 [111]: 4907fc614c8e02be -Block 0019 [112]: 432d7fd638580bb0 -Block 0019 [113]: 63214685454ffc72 -Block 0019 [114]: 8607ce6bf48c49a4 -Block 0019 [115]: 2b5fcb115af940dc -Block 0019 [116]: f962622b16c92e01 -Block 0019 [117]: b658504aff081cbd -Block 0019 [118]: 2f3c28ad121165d2 -Block 0019 [119]: e936d9ec4aa94cba -Block 0019 [120]: b293e61ee1d30dd3 -Block 0019 [121]: 002c110dd8033a59 -Block 0019 [122]: eeb3a96e2e3d21ca -Block 0019 [123]: d845813fc15e9aaa -Block 0019 [124]: 92bd97abd662fc28 -Block 0019 [125]: 750f33bbce352254 -Block 0019 [126]: 4ebd7cdf6cf9494c -Block 0019 [127]: 795e82c67139eded -Block 0020 [ 0]: 9294d03a99a22ea2 -Block 0020 [ 1]: bcbe0550584228d4 -Block 0020 [ 2]: 129427d353d8d19b -Block 0020 [ 3]: adf1508aa2cd80e4 -Block 0020 [ 4]: 9828e5b07118f247 -Block 0020 [ 5]: 647a7614912b1565 -Block 0020 [ 6]: d75cecc203293be3 -Block 0020 [ 7]: 3bfa93828245a58e -Block 0020 [ 8]: 3e42f663df86163d -Block 0020 [ 9]: db1e8f2db4fd5f56 -Block 0020 [ 10]: b125c16e117becf8 -Block 0020 [ 11]: 833b41751fa36e5b -Block 0020 [ 12]: 37268fc1e7f53398 -Block 0020 [ 13]: 07675cb6e4d9bb8f -Block 0020 [ 14]: 9600f42ea7df9ed2 -Block 0020 [ 15]: 07c775af5e73d44a -Block 0020 [ 16]: a3e3837421f150d4 -Block 0020 [ 17]: d723ae6724085247 -Block 0020 [ 18]: 4990be7e8e59bc2f -Block 0020 [ 19]: eab56ec270c5406b -Block 0020 [ 20]: 2a637389d65100a1 -Block 0020 [ 21]: 6ea26e1c777c46bf -Block 0020 [ 22]: 4d73b17ca5cbdcad -Block 0020 [ 23]: 6f8633a6620733e8 -Block 0020 [ 24]: 5898847821535a03 -Block 0020 [ 25]: 00240261b3893620 -Block 0020 [ 26]: e78807d720e2ebb6 -Block 0020 [ 27]: cada2395683f15f6 -Block 0020 [ 28]: e5532f20a6a36a89 -Block 0020 [ 29]: 631360de14c68435 -Block 0020 [ 30]: 89af90b96ce933f3 -Block 0020 [ 31]: 4ad6b40a8c905c15 -Block 0020 [ 32]: c70d0b81ef0c42f1 -Block 0020 [ 33]: 20d63097de1d4de7 -Block 0020 [ 34]: ac0400d142902ffe -Block 0020 [ 35]: a610f81e4f689fbb -Block 0020 [ 36]: 654a691945e85e07 -Block 0020 [ 37]: 969fe8ef61a96f68 -Block 0020 [ 38]: dd6fc34852f483fd -Block 0020 [ 39]: 8b71d5372e78ef9a -Block 0020 [ 40]: cfba508a76e196b8 -Block 0020 [ 41]: 6c59d9046bebffb4 -Block 0020 [ 42]: f13099cba8d740ce -Block 0020 [ 43]: eb37028ca5947e71 -Block 0020 [ 44]: d3dbd1e481e68acc -Block 0020 [ 45]: 3e849d5566fc85d8 -Block 0020 [ 46]: 52d830c107762635 -Block 0020 [ 47]: baf382c743e99512 -Block 0020 [ 48]: 6dde1e25fa33d385 -Block 0020 [ 49]: 9221fbbb14a0bf8d -Block 0020 [ 50]: d2cf64a8acd2cbfa -Block 0020 [ 51]: 963ac3fea12bb6ef -Block 0020 [ 52]: fcc8a4d451074c43 -Block 0020 [ 53]: 5f8ffd9acd32770a -Block 0020 [ 54]: 93ade0ae517c1f8b -Block 0020 [ 55]: fe4f24c61406fe19 -Block 0020 [ 56]: 5ac0e7d577b9c4e2 -Block 0020 [ 57]: 1f75439ea80cefc1 -Block 0020 [ 58]: 58cd99e49c0988de -Block 0020 [ 59]: 62a1a9b784d8b18a -Block 0020 [ 60]: 0c176450f8146fc9 -Block 0020 [ 61]: c029579dde36ea3c -Block 0020 [ 62]: a35011efa2d65949 -Block 0020 [ 63]: 2cc8d2701c8aebcc -Block 0020 [ 64]: 7845f2cd112dde51 -Block 0020 [ 65]: f1bae9587bbfa28b -Block 0020 [ 66]: 54496f8e331e1446 -Block 0020 [ 67]: 4d2e4c57635a03e1 -Block 0020 [ 68]: 72103a072560e9bc -Block 0020 [ 69]: c745a628447a5af9 -Block 0020 [ 70]: 91f670902f16dacb -Block 0020 [ 71]: 62d1ca75b9ad91e2 -Block 0020 [ 72]: afc5227e1e44618c -Block 0020 [ 73]: a4fd99486eec9a91 -Block 0020 [ 74]: 8586b7e15415c117 -Block 0020 [ 75]: 1dadb8849f653aa2 -Block 0020 [ 76]: 0339d57b42b089d1 -Block 0020 [ 77]: d78c92f8f9795a06 -Block 0020 [ 78]: 884cfcc0e359526c -Block 0020 [ 79]: 92fa9ce765e41900 -Block 0020 [ 80]: a2d47dc9e631b6d3 -Block 0020 [ 81]: 391b00d07320a9d4 -Block 0020 [ 82]: 3b8d6c8e47756f40 -Block 0020 [ 83]: 9595b80e703f79a5 -Block 0020 [ 84]: c174a3c3ace67621 -Block 0020 [ 85]: e26ea90d8b631563 -Block 0020 [ 86]: d840f747d6ecd7c6 -Block 0020 [ 87]: e6791933345cb262 -Block 0020 [ 88]: 2c8a9090108ce066 -Block 0020 [ 89]: 40144400f1a0c9c6 -Block 0020 [ 90]: c586c2db746bae6a -Block 0020 [ 91]: 3f44a45296c0082f -Block 0020 [ 92]: 4c9b5aedf10ebcbb -Block 0020 [ 93]: 07f801aae09a5075 -Block 0020 [ 94]: 6b0bcdf6993e4798 -Block 0020 [ 95]: 775ba96ebbc4eb20 -Block 0020 [ 96]: 8ba6fcbafbd2e642 -Block 0020 [ 97]: 448a0cf251a78843 -Block 0020 [ 98]: 6d1dd0ebb0de9a55 -Block 0020 [ 99]: b0b75a709ef51af2 -Block 0020 [100]: da09cb3af69ae050 -Block 0020 [101]: 59618274a5cb8a5d -Block 0020 [102]: 39595dbc3386c825 -Block 0020 [103]: 7a3a85e38a8751b7 -Block 0020 [104]: 212b32e2fa3f18ba -Block 0020 [105]: 70e7978eb642c740 -Block 0020 [106]: 145bf98bd9db7579 -Block 0020 [107]: e6cd3e7a38171268 -Block 0020 [108]: 28048150f17004e5 -Block 0020 [109]: 4a084ad678c3c285 -Block 0020 [110]: 14f2417d89dfa4dc -Block 0020 [111]: 31405f3f5922edfb -Block 0020 [112]: b3696b2d430a74d0 -Block 0020 [113]: 24a857990340927f -Block 0020 [114]: cec0c14446ee4bd5 -Block 0020 [115]: 3973f485c6208c36 -Block 0020 [116]: dfb726454a565cdf -Block 0020 [117]: e2afb5ccf8b2fff9 -Block 0020 [118]: 6d10ba676dba16b9 -Block 0020 [119]: 53d268907b9738fd -Block 0020 [120]: 38d4d0c62ea273a9 -Block 0020 [121]: 077fd8691c47430f -Block 0020 [122]: a8d0a3cf26b3e70f -Block 0020 [123]: ca812c92fbd348a9 -Block 0020 [124]: 44481748bc8a4958 -Block 0020 [125]: 433a65429d7fc46f -Block 0020 [126]: a5b3568bfcbaceef -Block 0020 [127]: ca3f2394209c5459 -Block 0021 [ 0]: c9cee1441d5f5eab -Block 0021 [ 1]: 52930f80be51d785 -Block 0021 [ 2]: d9ca1edef07331fa -Block 0021 [ 3]: 5b3585e29a75d026 -Block 0021 [ 4]: bb429c762a3842d4 -Block 0021 [ 5]: ba9162cb2e4a3841 -Block 0021 [ 6]: aaaf69053cad1b02 -Block 0021 [ 7]: 75009de437add431 -Block 0021 [ 8]: 127799b6080ff74e -Block 0021 [ 9]: 0f8b60aadc4f92cd -Block 0021 [ 10]: b42e05642dd12542 -Block 0021 [ 11]: 235523f7fb4904a2 -Block 0021 [ 12]: 1e74a64fd16a30dd -Block 0021 [ 13]: 53c398ac3ae69a51 -Block 0021 [ 14]: be6c14cd42d53a85 -Block 0021 [ 15]: eb766ffac3813cbd -Block 0021 [ 16]: 3ebe536b4fc09b06 -Block 0021 [ 17]: d8ecfbaee3f55493 -Block 0021 [ 18]: b3635f0a71d9c6e3 -Block 0021 [ 19]: 6bba95ce1e1bec06 -Block 0021 [ 20]: 25c3fdd4e94e91c2 -Block 0021 [ 21]: d8c4b4c3ffc73bc2 -Block 0021 [ 22]: 3affdbdc7d5986d4 -Block 0021 [ 23]: 0b550b10e081e257 -Block 0021 [ 24]: 8c19a8f9dcefcbbb -Block 0021 [ 25]: bdeb52643dcbae10 -Block 0021 [ 26]: 07aa196ad4b3a0cf -Block 0021 [ 27]: 342eae16c8c58e7f -Block 0021 [ 28]: 22160b2900a419ff -Block 0021 [ 29]: b385c2b64b3aaad9 -Block 0021 [ 30]: 46eca5a6d39f1dd5 -Block 0021 [ 31]: af5f93e38f53ad14 -Block 0021 [ 32]: ddf78e43a91bf838 -Block 0021 [ 33]: 31489cb54c9612f6 -Block 0021 [ 34]: b55b6627a2a238f0 -Block 0021 [ 35]: 3ba6a3fe33f75e0c -Block 0021 [ 36]: a65e93a773f427b4 -Block 0021 [ 37]: 619b72827915658e -Block 0021 [ 38]: da1b7dafcb6d5810 -Block 0021 [ 39]: 331d8479540385ff -Block 0021 [ 40]: ca7f376ba1cee5fd -Block 0021 [ 41]: da53bb16660e43aa -Block 0021 [ 42]: d132a1801b2a1e36 -Block 0021 [ 43]: 0d8b0985e1dfbae8 -Block 0021 [ 44]: 06a6a8c448731c99 -Block 0021 [ 45]: e883d74d86960172 -Block 0021 [ 46]: 7353308be911a737 -Block 0021 [ 47]: 61b9f5c7f1f2c0d7 -Block 0021 [ 48]: 2dec7ab9f7231caa -Block 0021 [ 49]: 2bce285600143fd9 -Block 0021 [ 50]: 39010c3aeca34306 -Block 0021 [ 51]: d115577f0d727858 -Block 0021 [ 52]: 2a14cf35dba86061 -Block 0021 [ 53]: d7874bb05167b114 -Block 0021 [ 54]: b9037cbd42674941 -Block 0021 [ 55]: c8ae7d2d8a9f1dfb -Block 0021 [ 56]: 40007b2a39fb2388 -Block 0021 [ 57]: 24dd8e28b9f2f95b -Block 0021 [ 58]: 69c38f54dc7d736c -Block 0021 [ 59]: 8e5b642cc1c69c96 -Block 0021 [ 60]: c3a36b2d0869a075 -Block 0021 [ 61]: af9801df2f72627e -Block 0021 [ 62]: 34e29558db1d4cc9 -Block 0021 [ 63]: 4bfad5cab74d4d79 -Block 0021 [ 64]: c6967c9a66a2b9de -Block 0021 [ 65]: ff7ca71448d89f34 -Block 0021 [ 66]: b707949980d581d8 -Block 0021 [ 67]: c23a42309200643b -Block 0021 [ 68]: 765664b4e14d5f21 -Block 0021 [ 69]: 70e9c6872e68a5d4 -Block 0021 [ 70]: 71f3602f8bb547e7 -Block 0021 [ 71]: d3d1c0da3feadf0e -Block 0021 [ 72]: b1a26e7ff9b1f302 -Block 0021 [ 73]: 2fedaa2c8b5162fb -Block 0021 [ 74]: d0424eeff22c0329 -Block 0021 [ 75]: 15ad3cc810e0f5ff -Block 0021 [ 76]: b0fbe0010dc2693c -Block 0021 [ 77]: 8461b38939d3db18 -Block 0021 [ 78]: 11fac6794cee84c9 -Block 0021 [ 79]: 16fc287e9a19e926 -Block 0021 [ 80]: 6ec8980df000fef0 -Block 0021 [ 81]: b75eee5a272a9564 -Block 0021 [ 82]: 3b28e5b52c6bb35b -Block 0021 [ 83]: 78699bb3b652c6eb -Block 0021 [ 84]: 6c41404ab2b098b2 -Block 0021 [ 85]: 3d28235a57851c08 -Block 0021 [ 86]: ea29322b64acd257 -Block 0021 [ 87]: c966e9bcb6a9c8eb -Block 0021 [ 88]: 35c6802a7cce1d18 -Block 0021 [ 89]: f42843fa222dccde -Block 0021 [ 90]: 2aebadee62fc8979 -Block 0021 [ 91]: c475f0875b0a7105 -Block 0021 [ 92]: 7ee5af7c946e09c2 -Block 0021 [ 93]: 37f9b4fea2e215d2 -Block 0021 [ 94]: 3a9de7e350019af4 -Block 0021 [ 95]: 33b7efe13b4b9454 -Block 0021 [ 96]: 39d2d89f04964241 -Block 0021 [ 97]: 14db73f346b5a0c0 -Block 0021 [ 98]: 5bfb2a9cc35360d9 -Block 0021 [ 99]: 729eb1694f7c60aa -Block 0021 [100]: 7117bbfaf1f19d62 -Block 0021 [101]: a3c58fc555bf2ca0 -Block 0021 [102]: 13c1b7c5f1378202 -Block 0021 [103]: 7399c842479a898a -Block 0021 [104]: 9e1f5697bede7ff0 -Block 0021 [105]: 0564149b9c476558 -Block 0021 [106]: 3bc1b90131692b4c -Block 0021 [107]: 1bfccfcf22e3a1cb -Block 0021 [108]: 3da368666200d8ed -Block 0021 [109]: 033e93f46e8d4743 -Block 0021 [110]: 11c36841131b1891 -Block 0021 [111]: d8f96a26a37dc7ab -Block 0021 [112]: f4a1ae508ac48041 -Block 0021 [113]: 6c495e2ef1d1103a -Block 0021 [114]: 58ae115d9d807cce -Block 0021 [115]: 4c82fdf95cbcbcc0 -Block 0021 [116]: 39f51ce1da9b6c3d -Block 0021 [117]: 4205730f6328d09b -Block 0021 [118]: ea4360a7b8c07f77 -Block 0021 [119]: d7d81fb0a057e3ce -Block 0021 [120]: ba8ca586118d56d6 -Block 0021 [121]: 120e233f49d0028d -Block 0021 [122]: cb40ca113e6da130 -Block 0021 [123]: 764c1e104bac5294 -Block 0021 [124]: d56f2844dc2583bb -Block 0021 [125]: 879a3936fc5755b9 -Block 0021 [126]: 70acbe6e098056cb -Block 0021 [127]: 7afca87ff2b79b00 -Block 0022 [ 0]: bc7d82733ef71b9c -Block 0022 [ 1]: 1394cb4e08693d8a -Block 0022 [ 2]: 18efd91732233110 -Block 0022 [ 3]: b20b21aef6a3926f -Block 0022 [ 4]: 3592daf273bc0c49 -Block 0022 [ 5]: 33d46dc9f07a46e4 -Block 0022 [ 6]: 73d1fb77948b06eb -Block 0022 [ 7]: 8a63f8dfbb800d0a -Block 0022 [ 8]: b86fdf7d3f73ff2c -Block 0022 [ 9]: 3bc6f91dde8086a3 -Block 0022 [ 10]: c8e447a640139dfa -Block 0022 [ 11]: 2297e787b750829d -Block 0022 [ 12]: f128b83545fa0a12 -Block 0022 [ 13]: cb1b9787fdb730d7 -Block 0022 [ 14]: 6627c9718a8bc950 -Block 0022 [ 15]: 8e9e75b67ebc26cf -Block 0022 [ 16]: 317809a1ecf9fd10 -Block 0022 [ 17]: 0b948f6d198e306c -Block 0022 [ 18]: 43830167f0277d31 -Block 0022 [ 19]: acefad5b0faba0ba -Block 0022 [ 20]: 883907843665ddd3 -Block 0022 [ 21]: 6c7ba74784193ecc -Block 0022 [ 22]: 221ab9d2f05a09ac -Block 0022 [ 23]: 706261e61b707c75 -Block 0022 [ 24]: 0a3ab628c11d07f4 -Block 0022 [ 25]: 71c1113dde1d533f -Block 0022 [ 26]: 4a35095412392314 -Block 0022 [ 27]: 6924221e002e1078 -Block 0022 [ 28]: fdd4f0e2b1570056 -Block 0022 [ 29]: 2b9d802e0bc07966 -Block 0022 [ 30]: f489dd59e2a6d0ea -Block 0022 [ 31]: a1388929da27122a -Block 0022 [ 32]: 46e85b9ad9e8cce8 -Block 0022 [ 33]: 749fb8d43225808b -Block 0022 [ 34]: e6153f61998e80d5 -Block 0022 [ 35]: f469291ceb31747b -Block 0022 [ 36]: d2919925b4c5071b -Block 0022 [ 37]: ae3fc5256ebda2a8 -Block 0022 [ 38]: 6f6679fc8264c35c -Block 0022 [ 39]: 3d7dad770a274f01 -Block 0022 [ 40]: 379bcf2fd1e137c2 -Block 0022 [ 41]: e32a82c804274e00 -Block 0022 [ 42]: e0de77e0762f4f07 -Block 0022 [ 43]: 4d57ae811094fa42 -Block 0022 [ 44]: 7552dcd84eed2528 -Block 0022 [ 45]: 22a0822ada306970 -Block 0022 [ 46]: e7296732d4e69866 -Block 0022 [ 47]: a20ec5bacb74fb8d -Block 0022 [ 48]: 6786cf2ad5572d0a -Block 0022 [ 49]: f2549f26dce94274 -Block 0022 [ 50]: ce524392221e9ce9 -Block 0022 [ 51]: fb222ef56a02c3f1 -Block 0022 [ 52]: ce29627b2c55b120 -Block 0022 [ 53]: b00fc98e487d33bc -Block 0022 [ 54]: ba9a1a9236ebcb8d -Block 0022 [ 55]: 96d87fce20966dfe -Block 0022 [ 56]: 5719501da01a5fb4 -Block 0022 [ 57]: 1bef1c286a9f357b -Block 0022 [ 58]: a472acbd08f7d091 -Block 0022 [ 59]: dfb4ab50795f5a56 -Block 0022 [ 60]: 175c667d2966d000 -Block 0022 [ 61]: d1535a2fa23c2dfc -Block 0022 [ 62]: 0276066c52933b9b -Block 0022 [ 63]: a789683dd9e8cc16 -Block 0022 [ 64]: 3ea422cc751cad5d -Block 0022 [ 65]: 357842eb4fd985e8 -Block 0022 [ 66]: cd55f90fc562d75c -Block 0022 [ 67]: 38109086d68f4095 -Block 0022 [ 68]: 70b6bd256c6daedc -Block 0022 [ 69]: 5a350e041de1919c -Block 0022 [ 70]: a536eaa4af68d2fe -Block 0022 [ 71]: 3077af0c5eed3c22 -Block 0022 [ 72]: 3123f4d9aad3b3ba -Block 0022 [ 73]: 9fb0ff34bfaa2270 -Block 0022 [ 74]: b658b0cd00d5802f -Block 0022 [ 75]: 97b2e143fd7c3c5c -Block 0022 [ 76]: 88dee4acf47e5419 -Block 0022 [ 77]: b826a726db361361 -Block 0022 [ 78]: 7b671285d2803d20 -Block 0022 [ 79]: b671334ae4049a01 -Block 0022 [ 80]: b5d4701309738c4d -Block 0022 [ 81]: eec51b2dd9ca1524 -Block 0022 [ 82]: 8ea2e7cbe7849f38 -Block 0022 [ 83]: 6b654a5540635dc2 -Block 0022 [ 84]: 3d4295e4d19615ac -Block 0022 [ 85]: eb5e5915a0642148 -Block 0022 [ 86]: f893ec41ab06137c -Block 0022 [ 87]: bad2cf30b8bb3273 -Block 0022 [ 88]: 6352142d0b470b26 -Block 0022 [ 89]: 5467740c7733e65a -Block 0022 [ 90]: a6bbbae22894b638 -Block 0022 [ 91]: 2a35ebb87114b880 -Block 0022 [ 92]: d989e7a00d5ec8e9 -Block 0022 [ 93]: af7b8a32afdb6885 -Block 0022 [ 94]: 4efcdde6bc2d75f5 -Block 0022 [ 95]: 7f8f41d919eced9a -Block 0022 [ 96]: 4787f909f8dc245d -Block 0022 [ 97]: d40d8d2b70c01d96 -Block 0022 [ 98]: c7adee6cc4517d3a -Block 0022 [ 99]: 92ed4ee8f5b01a49 -Block 0022 [100]: c01843707b5b5c7e -Block 0022 [101]: d32ae3a801bae8e4 -Block 0022 [102]: 7803de6e9eeea070 -Block 0022 [103]: f8529b389c8e28e6 -Block 0022 [104]: 040625e29005b5be -Block 0022 [105]: 624d205de5ae4dec -Block 0022 [106]: 78a524f7d7e34d89 -Block 0022 [107]: 9186f14434d72086 -Block 0022 [108]: e50b8c43f0ad97df -Block 0022 [109]: c7023c88b8797c5f -Block 0022 [110]: 280a5ce52b4dbdc0 -Block 0022 [111]: a1508547bfb3aa05 -Block 0022 [112]: 82e67edf8fd56984 -Block 0022 [113]: 0fe3f32b800eeb47 -Block 0022 [114]: 4951bd7622ad0d9a -Block 0022 [115]: 070fc7de56bb23af -Block 0022 [116]: 88d09d9a518a0377 -Block 0022 [117]: b7607d77aec85aa6 -Block 0022 [118]: 6ca70a4b33e651b9 -Block 0022 [119]: cecd51f1d0e710fb -Block 0022 [120]: ee38237e293e8f11 -Block 0022 [121]: 6c568b3fcf1d17a3 -Block 0022 [122]: b792e4c460d81205 -Block 0022 [123]: 7c2468923361bf6f -Block 0022 [124]: 09953de49fdbc9ac -Block 0022 [125]: b985b06398326895 -Block 0022 [126]: ac8e2c083ba0e907 -Block 0022 [127]: b289adef24fcb269 -Block 0023 [ 0]: f887a0362d97bbe5 -Block 0023 [ 1]: bc39eae32801eb35 -Block 0023 [ 2]: b5a675c89e71c050 -Block 0023 [ 3]: ac732ed0c2509276 -Block 0023 [ 4]: 5b53d3ce4dd394fe -Block 0023 [ 5]: 31b0557388dedb15 -Block 0023 [ 6]: 3cf538f405228614 -Block 0023 [ 7]: 940b0e9c63cb21da -Block 0023 [ 8]: 73e8facbd92099bd -Block 0023 [ 9]: 2432843309adcd8f -Block 0023 [ 10]: b31c4d7d1699ec2f -Block 0023 [ 11]: af05004ebd7f9d33 -Block 0023 [ 12]: 9db5a872e714329e -Block 0023 [ 13]: 91ea75883b762e4a -Block 0023 [ 14]: f38638108dabdd90 -Block 0023 [ 15]: 26861e1cd975cd97 -Block 0023 [ 16]: 05715021862d5b3a -Block 0023 [ 17]: 8882e5dc0d315aed -Block 0023 [ 18]: 4e420d6af5cba865 -Block 0023 [ 19]: 2dbbabb447434fe8 -Block 0023 [ 20]: 4fb80c868a970369 -Block 0023 [ 21]: 04d0a9abb8a0f861 -Block 0023 [ 22]: 6b2501fafcc000e9 -Block 0023 [ 23]: 201b740e3be2dac6 -Block 0023 [ 24]: 185afa423a4fb1b5 -Block 0023 [ 25]: 53afaec388322182 -Block 0023 [ 26]: 0c2814b50d6e577e -Block 0023 [ 27]: 26b4946dfa2d52d9 -Block 0023 [ 28]: 1f1b128b10855cb4 -Block 0023 [ 29]: 132c09b9061898f2 -Block 0023 [ 30]: 471c578b8492a910 -Block 0023 [ 31]: b258bbd42e271fd7 -Block 0023 [ 32]: 93f8cb887270d643 -Block 0023 [ 33]: e42960f495f58326 -Block 0023 [ 34]: c6d908e361617ce2 -Block 0023 [ 35]: b8cdb4bdda047621 -Block 0023 [ 36]: 3a8286ee5cef4d67 -Block 0023 [ 37]: 49f526689fcd933a -Block 0023 [ 38]: 55d05b37b4a6d448 -Block 0023 [ 39]: 22ca23986b8c5204 -Block 0023 [ 40]: 9f685412374be015 -Block 0023 [ 41]: 6f0ba8b6e35e70ab -Block 0023 [ 42]: fe318f443beb5657 -Block 0023 [ 43]: 6a705817f928cc9d -Block 0023 [ 44]: 00bd93bc3e34ff51 -Block 0023 [ 45]: c99dd7521242e14c -Block 0023 [ 46]: f9253088dea37570 -Block 0023 [ 47]: 1e2d13deb310f931 -Block 0023 [ 48]: 19c2c371e1f661a9 -Block 0023 [ 49]: 7a06fd0f6d70a89c -Block 0023 [ 50]: 4587e9d4990f201c -Block 0023 [ 51]: 2ca4ab657130bbe7 -Block 0023 [ 52]: dee5ca875175476d -Block 0023 [ 53]: 78420fa068dbccca -Block 0023 [ 54]: 826f3deed3c1b6a0 -Block 0023 [ 55]: e7e50e4cfe7647db -Block 0023 [ 56]: affaeaf92cb991a2 -Block 0023 [ 57]: 49625c0a8611bec8 -Block 0023 [ 58]: b58dcfd9919c942a -Block 0023 [ 59]: 6077cbec91448280 -Block 0023 [ 60]: fbb108e9bf221d99 -Block 0023 [ 61]: 5b51277c1bb05b10 -Block 0023 [ 62]: 636343b6a796fba4 -Block 0023 [ 63]: ef13787e68ae51b8 -Block 0023 [ 64]: ee5b8487cb5693c8 -Block 0023 [ 65]: 7c28f2ce84a277dc -Block 0023 [ 66]: 26d883051560b97f -Block 0023 [ 67]: a89a03bedc2cdcb6 -Block 0023 [ 68]: 301f3a02f1b052ea -Block 0023 [ 69]: 9184eebcb7de3579 -Block 0023 [ 70]: 19ce01730fc35b1e -Block 0023 [ 71]: 15802e8ab6283689 -Block 0023 [ 72]: 9aa02a56f7c5d4e2 -Block 0023 [ 73]: 68d84ecf84d7072e -Block 0023 [ 74]: fde125e9672c9d76 -Block 0023 [ 75]: 9bb65a3334c84bce -Block 0023 [ 76]: 166cf59fdeaf06e9 -Block 0023 [ 77]: 28ecda6662343772 -Block 0023 [ 78]: c8899d575e4b40ad -Block 0023 [ 79]: 8db3dd5266989dc4 -Block 0023 [ 80]: 2d5d7afab6ae495d -Block 0023 [ 81]: 3e57e86bf7615941 -Block 0023 [ 82]: 7abd5fafae678d60 -Block 0023 [ 83]: 8c7d5e8c79bc0b95 -Block 0023 [ 84]: 1bf47b24e046db46 -Block 0023 [ 85]: 0366b4dbb095fc65 -Block 0023 [ 86]: a9403c73e1b574ff -Block 0023 [ 87]: 77fab0f60a5df650 -Block 0023 [ 88]: cc7ba3e9add465cf -Block 0023 [ 89]: b1feaef54d44d684 -Block 0023 [ 90]: 70c59b46799527d1 -Block 0023 [ 91]: 532b0ebc0afad373 -Block 0023 [ 92]: d04a620645a05717 -Block 0023 [ 93]: d7eb5dd9e3cdfdc6 -Block 0023 [ 94]: 1fa15db4d90e9643 -Block 0023 [ 95]: 150689421f9c19e5 -Block 0023 [ 96]: e8776793ccc305ac -Block 0023 [ 97]: 4720c416da67d942 -Block 0023 [ 98]: e0295389706e7198 -Block 0023 [ 99]: 61ddae9836604da5 -Block 0023 [100]: 0efa90593f7d286d -Block 0023 [101]: 5f470d10224b43db -Block 0023 [102]: 8cdb8a1c385b1ab5 -Block 0023 [103]: f65982042e0a4a53 -Block 0023 [104]: 5b914b8a3a09cca3 -Block 0023 [105]: 87d96b0eb194aae3 -Block 0023 [106]: 4b01105d03b0431f -Block 0023 [107]: b05129a7d4de80e1 -Block 0023 [108]: fa485ef8d1ea275a -Block 0023 [109]: 619da5c52438dc97 -Block 0023 [110]: 3ddd40726265c8fb -Block 0023 [111]: 9145517022fa85e0 -Block 0023 [112]: cd491181f5af124b -Block 0023 [113]: cf6a59f7420de634 -Block 0023 [114]: cb3249abde961732 -Block 0023 [115]: db33911f535c7f10 -Block 0023 [116]: 0b1c13597b7662f4 -Block 0023 [117]: ec9cdcbb4a807d87 -Block 0023 [118]: df7248a43cb72d02 -Block 0023 [119]: f97318ca3b133c5c -Block 0023 [120]: ac640dc6b2c51f82 -Block 0023 [121]: 2dbfb7a7aefcaa9b -Block 0023 [122]: d96e33495832ee13 -Block 0023 [123]: eb2b11dca1b85b4d -Block 0023 [124]: 0f1fa072f4eb94f1 -Block 0023 [125]: 795f7ad648403ed8 -Block 0023 [126]: c39a5565f68468df -Block 0023 [127]: 9b5911137e833734 -Block 0024 [ 0]: 19544ae260a1fe89 -Block 0024 [ 1]: a90b484bf81248d3 -Block 0024 [ 2]: 3aa17c66521420be -Block 0024 [ 3]: 6c997d1851d26765 -Block 0024 [ 4]: c58a7ea82170ab8b -Block 0024 [ 5]: 9ea19a31d951f70f -Block 0024 [ 6]: 5c0d564309159517 -Block 0024 [ 7]: b58da24d46ace1d0 -Block 0024 [ 8]: d5c1217fa46ae430 -Block 0024 [ 9]: f304ab6d7e537669 -Block 0024 [ 10]: aeea1b75e3507989 -Block 0024 [ 11]: 5eec96bd59daae4c -Block 0024 [ 12]: 1faacc7160416a4f -Block 0024 [ 13]: 28298c25197a9fea -Block 0024 [ 14]: 86944857f501fde4 -Block 0024 [ 15]: dc99890d787159b1 -Block 0024 [ 16]: 00abf614fa34bee2 -Block 0024 [ 17]: 8e9a6dbc73768e97 -Block 0024 [ 18]: 67c946912bf3035f -Block 0024 [ 19]: ec802a2fbbbc4854 -Block 0024 [ 20]: 837f827386a46736 -Block 0024 [ 21]: 9e0043e3ca1aa1d2 -Block 0024 [ 22]: 589f0de39b42db52 -Block 0024 [ 23]: 71f125e96c2e1d7c -Block 0024 [ 24]: bb410c18015520a9 -Block 0024 [ 25]: 46f6d90e6a2c94ed -Block 0024 [ 26]: 425626f90495ed2a -Block 0024 [ 27]: 8560f25c13bf5d47 -Block 0024 [ 28]: 5cad47824a048dba -Block 0024 [ 29]: f76db517190747c5 -Block 0024 [ 30]: c2afcae5d789b38d -Block 0024 [ 31]: 3aa9073bbee11840 -Block 0024 [ 32]: 692f0d7b53aeb157 -Block 0024 [ 33]: e589327308612979 -Block 0024 [ 34]: e2e90881ef58cd84 -Block 0024 [ 35]: 710422fdfc67897b -Block 0024 [ 36]: d2ddcfd2206b8463 -Block 0024 [ 37]: 86ce852d6197f6e1 -Block 0024 [ 38]: e3562daafb454d13 -Block 0024 [ 39]: 3183eec11eb00f1a -Block 0024 [ 40]: 59e474969a554c65 -Block 0024 [ 41]: 0047f774fd077fc8 -Block 0024 [ 42]: 1652bbe0098b386a -Block 0024 [ 43]: a3bc06c2c6f6b033 -Block 0024 [ 44]: 626a0b0174685989 -Block 0024 [ 45]: 7a0713a7d2284f17 -Block 0024 [ 46]: db7e15fe42c8e495 -Block 0024 [ 47]: a8e7232dc2034778 -Block 0024 [ 48]: d9edd376cb77b4c8 -Block 0024 [ 49]: 46a60d186591f2a8 -Block 0024 [ 50]: befd4ae47857cf74 -Block 0024 [ 51]: 34ef4d23f15d6ad2 -Block 0024 [ 52]: cb1890237eb064cf -Block 0024 [ 53]: 647d271993d6799f -Block 0024 [ 54]: a166dc6b15384277 -Block 0024 [ 55]: 24b2c02c08b4493c -Block 0024 [ 56]: 48f180b05feb6757 -Block 0024 [ 57]: 750330054f5166b7 -Block 0024 [ 58]: e791c9cf836a894b -Block 0024 [ 59]: 350c62af591a89b1 -Block 0024 [ 60]: 8068c97e650a680b -Block 0024 [ 61]: 602e5d7ec3090f9f -Block 0024 [ 62]: 5d895adb104bbfdb -Block 0024 [ 63]: 4969f86f4ed6ee1f -Block 0024 [ 64]: 2ade07ec3ae6b981 -Block 0024 [ 65]: 219647c06ad79029 -Block 0024 [ 66]: dfd39cd6e3477b99 -Block 0024 [ 67]: ef7aa5a0098cf293 -Block 0024 [ 68]: c051e96271121718 -Block 0024 [ 69]: 8c9ce5b1dea5759d -Block 0024 [ 70]: fdea1017a321e726 -Block 0024 [ 71]: 7512c935f90ed960 -Block 0024 [ 72]: b8d8d75db8272af7 -Block 0024 [ 73]: 1f14c26126a3e03a -Block 0024 [ 74]: d12a32abf2203212 -Block 0024 [ 75]: bc8807f4672f7316 -Block 0024 [ 76]: 653f65788dbe664d -Block 0024 [ 77]: fdc38532e373de3a -Block 0024 [ 78]: 8604aa43d188008e -Block 0024 [ 79]: f769e2f202d04174 -Block 0024 [ 80]: 4f033ec36a5422ab -Block 0024 [ 81]: 6b4f439714a27419 -Block 0024 [ 82]: 0e63fd9261f6eac4 -Block 0024 [ 83]: 398a388cabf5af9a -Block 0024 [ 84]: 3075d5227839e900 -Block 0024 [ 85]: d87769ccc8b9b72a -Block 0024 [ 86]: cef1dd87cddcb9d7 -Block 0024 [ 87]: 602486b18d8b3b6f -Block 0024 [ 88]: 095bc7aa54e363a8 -Block 0024 [ 89]: 869b52eee9661873 -Block 0024 [ 90]: 41efeea963d375f1 -Block 0024 [ 91]: f39ddd993bc819f1 -Block 0024 [ 92]: 732cd74c9521f132 -Block 0024 [ 93]: 42bd27be85ff5f7d -Block 0024 [ 94]: b84b542491097234 -Block 0024 [ 95]: 6e728e49d0c13956 -Block 0024 [ 96]: a0560af5f85a9640 -Block 0024 [ 97]: cb9e4f7c029b4388 -Block 0024 [ 98]: b31c47b6c7db14fe -Block 0024 [ 99]: e22c5792d48ae63b -Block 0024 [100]: e21fd21ac5af8e63 -Block 0024 [101]: 5fd33dcb458b29dc -Block 0024 [102]: bd284c0e68f994d6 -Block 0024 [103]: d5bf807f4b9cecd9 -Block 0024 [104]: 8f42b5d58b200307 -Block 0024 [105]: 2280b5e6d94f43e2 -Block 0024 [106]: 19e9b92a0f0c54e2 -Block 0024 [107]: 55e67859224bea91 -Block 0024 [108]: 8f5d82f0d4e29050 -Block 0024 [109]: 4d500153a41c5faa -Block 0024 [110]: 3dc5aa1f24e10a18 -Block 0024 [111]: c64497a88ab19e13 -Block 0024 [112]: ee171eff18a2e8eb -Block 0024 [113]: 8a2bdd1af95429af -Block 0024 [114]: 5bed3c8488f49a43 -Block 0024 [115]: 9c11cba1d6d29d63 -Block 0024 [116]: fd2ef7237161c78b -Block 0024 [117]: fe83e69bdaea394c -Block 0024 [118]: f4eddd0618cb4d93 -Block 0024 [119]: 8deb5cb8b9536492 -Block 0024 [120]: b6de734754f92f1c -Block 0024 [121]: e3ae9642edd9edb8 -Block 0024 [122]: 71a85b6a1bb7e4e8 -Block 0024 [123]: 9464bb6dfd50f897 -Block 0024 [124]: db5e7e8b0d3d21dd -Block 0024 [125]: 4d2defa4a0d165f7 -Block 0024 [126]: 59664f6fa7f0d2ca -Block 0024 [127]: 8b6bb9688d145794 -Block 0025 [ 0]: c320877b761ba145 -Block 0025 [ 1]: b4a070fa931b59cc -Block 0025 [ 2]: 55f0dae9ab8959c6 -Block 0025 [ 3]: 48963ab3a5a3ab38 -Block 0025 [ 4]: 59c647c2fd70c35d -Block 0025 [ 5]: a24c7b50ceb02a78 -Block 0025 [ 6]: 6bbb53aeb0e275fb -Block 0025 [ 7]: 0bca6bfb5cf30d40 -Block 0025 [ 8]: fe50a6541bee00b9 -Block 0025 [ 9]: a200dbab13260ed0 -Block 0025 [ 10]: fb7e0640663aa3d5 -Block 0025 [ 11]: ad5b65eb577ab28a -Block 0025 [ 12]: c42e17a46768d25b -Block 0025 [ 13]: c0f25775be4bde1b -Block 0025 [ 14]: a03f4ab570eb0864 -Block 0025 [ 15]: b876833a9029276f -Block 0025 [ 16]: bf9341b678c791bb -Block 0025 [ 17]: cda314edc730979c -Block 0025 [ 18]: 37e2272bd5e77953 -Block 0025 [ 19]: 2d1737c17a79ac4a -Block 0025 [ 20]: 19588d0cd12717fb -Block 0025 [ 21]: 3fb22e5d6d00a14d -Block 0025 [ 22]: b8b180c8b64598a7 -Block 0025 [ 23]: c62a52b1873fa546 -Block 0025 [ 24]: d13f17fd366423aa -Block 0025 [ 25]: f7ca73a416f130d7 -Block 0025 [ 26]: 97c6de62108ea500 -Block 0025 [ 27]: 7c8a275dc4b0527c -Block 0025 [ 28]: 22e257327c9bd81a -Block 0025 [ 29]: 1005107b639db935 -Block 0025 [ 30]: 56ccf5386e0a797e -Block 0025 [ 31]: c434dbd212be0379 -Block 0025 [ 32]: c5e828156b2b1724 -Block 0025 [ 33]: d149d5eef4038aae -Block 0025 [ 34]: f20dc40228486a09 -Block 0025 [ 35]: c23b6038712599fb -Block 0025 [ 36]: c084fafb50e196be -Block 0025 [ 37]: 8401889d76da39c0 -Block 0025 [ 38]: 1bf4be3a8eb6580c -Block 0025 [ 39]: 50613c74ba8b2c36 -Block 0025 [ 40]: 0c5d8e3387b53b46 -Block 0025 [ 41]: b5496f10e08319bd -Block 0025 [ 42]: 4d0b58b1b36a5a04 -Block 0025 [ 43]: f26cfd5a23651288 -Block 0025 [ 44]: 511fae11df2b925c -Block 0025 [ 45]: 2a584bc4560e6b06 -Block 0025 [ 46]: 2f0d04783ef0ae17 -Block 0025 [ 47]: 61b2862af0e16017 -Block 0025 [ 48]: 393c0a2cb70ed4d4 -Block 0025 [ 49]: 70b771d466036515 -Block 0025 [ 50]: f702840aa7265d51 -Block 0025 [ 51]: e7be7ec6074b425a -Block 0025 [ 52]: 0fb8dff33cee9f39 -Block 0025 [ 53]: 4b4ce08a3d4a0165 -Block 0025 [ 54]: 802f78c379876de2 -Block 0025 [ 55]: 0e2793e42daeca5c -Block 0025 [ 56]: d4abf5fab9b4995e -Block 0025 [ 57]: 82ebf71518037bef -Block 0025 [ 58]: 3ce0728aa4758e65 -Block 0025 [ 59]: bb3b390fc4ba0cb2 -Block 0025 [ 60]: 42839bb443791583 -Block 0025 [ 61]: 2cfb87bc983e7870 -Block 0025 [ 62]: f42330724740380d -Block 0025 [ 63]: 98f4628dac1e99bc -Block 0025 [ 64]: c4c9c879c60adc22 -Block 0025 [ 65]: 3eead01a59e0b172 -Block 0025 [ 66]: 66b0b83a428296bb -Block 0025 [ 67]: 2dfc02e721a693a6 -Block 0025 [ 68]: ab9b6351ebc16419 -Block 0025 [ 69]: 6d0b84af8fc9cc0c -Block 0025 [ 70]: bd78dc4faf96665b -Block 0025 [ 71]: 366e84d6687882e7 -Block 0025 [ 72]: 6e4be22e1794d368 -Block 0025 [ 73]: ef83a9f950487282 -Block 0025 [ 74]: efd690a7c965908c -Block 0025 [ 75]: 81aa5bb0ba86005c -Block 0025 [ 76]: 7fb6b179052765ed -Block 0025 [ 77]: f7740714636229c5 -Block 0025 [ 78]: 594bab77f4fc97bb -Block 0025 [ 79]: 9c532bc00614dc28 -Block 0025 [ 80]: 74259d5f871c69e7 -Block 0025 [ 81]: ade983a76defaa4e -Block 0025 [ 82]: 3929c168c2ae7ec2 -Block 0025 [ 83]: 46da67711bb8a797 -Block 0025 [ 84]: 9e4d6605e5865868 -Block 0025 [ 85]: 03f54e2a451ae7d1 -Block 0025 [ 86]: bfa46927418df17e -Block 0025 [ 87]: d46bee7f24a285b2 -Block 0025 [ 88]: d8cb8e1968495eaa -Block 0025 [ 89]: 0cd0dc3525ba10c7 -Block 0025 [ 90]: baca910a7552ead2 -Block 0025 [ 91]: 0f8d9cc7b91e3a23 -Block 0025 [ 92]: fb724d1bfe345f18 -Block 0025 [ 93]: e8a17fc3a88a79c8 -Block 0025 [ 94]: de1c975f49d11ea4 -Block 0025 [ 95]: 83932ec2bb6f4ce7 -Block 0025 [ 96]: d36001488800d278 -Block 0025 [ 97]: 2acc2e4f98349965 -Block 0025 [ 98]: ade89929772b2233 -Block 0025 [ 99]: 71b0bf3568125f41 -Block 0025 [100]: fc9b1cce8dacff6a -Block 0025 [101]: 3dd2ded9dc844bda -Block 0025 [102]: d430deac04e9f487 -Block 0025 [103]: 27651351fec68a87 -Block 0025 [104]: 3e0284bc16405c08 -Block 0025 [105]: 49a51c86dce8dd94 -Block 0025 [106]: 37c724beed957310 -Block 0025 [107]: 2b434cbd05e98b33 -Block 0025 [108]: 3d8a05458c115608 -Block 0025 [109]: 40a3068e604b61db -Block 0025 [110]: b5c7a77e038abc55 -Block 0025 [111]: 253c5666950181ab -Block 0025 [112]: 96daf52bd1165717 -Block 0025 [113]: 2adc2ddae4b5ff82 -Block 0025 [114]: a3df6a379964cb33 -Block 0025 [115]: 07437f2749ead995 -Block 0025 [116]: 696d5df46fe37235 -Block 0025 [117]: 39ac9b4253bc8c74 -Block 0025 [118]: 1f4d4f88f980a8f5 -Block 0025 [119]: 4f8c0a082057e21d -Block 0025 [120]: e137d8667c968404 -Block 0025 [121]: f4a5e049476831a3 -Block 0025 [122]: 01c28ffd0c6afa51 -Block 0025 [123]: edb93ba57f459a65 -Block 0025 [124]: 91c72c2b3df105f5 -Block 0025 [125]: e5082ab282eb7758 -Block 0025 [126]: dc10549b836c0675 -Block 0025 [127]: 8a6fd560181ca34a -Block 0026 [ 0]: 7787e1b17f8b7213 -Block 0026 [ 1]: 38b0ed15bcfd0d2b -Block 0026 [ 2]: a2e51631d461450d -Block 0026 [ 3]: 0d43a20398da0d83 -Block 0026 [ 4]: 66bd336361cbe7ea -Block 0026 [ 5]: 9b1b590e17ed1971 -Block 0026 [ 6]: e0ed8e7f87628cba -Block 0026 [ 7]: 3709e578ed58d044 -Block 0026 [ 8]: 6f3c9df36aed3800 -Block 0026 [ 9]: 6f7a33ee11f88d24 -Block 0026 [ 10]: aed550ae646f153b -Block 0026 [ 11]: 36457ca90d54a60a -Block 0026 [ 12]: 7d06b80d22b9a481 -Block 0026 [ 13]: 6b4733c01744613d -Block 0026 [ 14]: 7c17d3703fd46741 -Block 0026 [ 15]: 04ae98470050c642 -Block 0026 [ 16]: a5a19388adf1e43e -Block 0026 [ 17]: fbc2a2dc038db68f -Block 0026 [ 18]: c4bdd4abd293f1b0 -Block 0026 [ 19]: 5d2331ad37f0bbe8 -Block 0026 [ 20]: effca955c329ca97 -Block 0026 [ 21]: 2a1a32ef4ca5397b -Block 0026 [ 22]: aa8f102b0737879e -Block 0026 [ 23]: 0a4af7962c2815b8 -Block 0026 [ 24]: e2902b18ce3342e7 -Block 0026 [ 25]: 44e98690c16d907d -Block 0026 [ 26]: 717ecd63fb9bc693 -Block 0026 [ 27]: 1a7c4a0985a0070e -Block 0026 [ 28]: dae416e8736f2537 -Block 0026 [ 29]: 6a608b0ea85cf02e -Block 0026 [ 30]: efc4102444c22c9d -Block 0026 [ 31]: e731ea0b9f46e701 -Block 0026 [ 32]: 60ae50f08358b083 -Block 0026 [ 33]: cac388635b6cfd3e -Block 0026 [ 34]: 95c96e422e666b00 -Block 0026 [ 35]: 27e360107749d81c -Block 0026 [ 36]: b5324834762b6f59 -Block 0026 [ 37]: 6063ebe9a361f5e6 -Block 0026 [ 38]: 7cd3ca1c59dc2cf5 -Block 0026 [ 39]: dcd32c6af49be138 -Block 0026 [ 40]: 1114a79b8559972e -Block 0026 [ 41]: d754b3285bfbe7c8 -Block 0026 [ 42]: 65a05b0cbbaba55a -Block 0026 [ 43]: 0a345bdf50bf9271 -Block 0026 [ 44]: 4f8fca8cf71ecc35 -Block 0026 [ 45]: 9af421d42dd3e2fd -Block 0026 [ 46]: 790a2c830694f95e -Block 0026 [ 47]: 13277aca6f47c0ca -Block 0026 [ 48]: faf7b46c0635c300 -Block 0026 [ 49]: 9bb87d21df5ce055 -Block 0026 [ 50]: 9ea3ccf7593f4223 -Block 0026 [ 51]: 972196d81877e016 -Block 0026 [ 52]: ee24e2390712cef0 -Block 0026 [ 53]: 0d5ba8f740c8635a -Block 0026 [ 54]: 9cbe5eed690355fa -Block 0026 [ 55]: 9ae45b8ba88a7ee8 -Block 0026 [ 56]: cbc74d17ca2e2120 -Block 0026 [ 57]: f1dbff2e0a0a963a -Block 0026 [ 58]: 898dceb936985d35 -Block 0026 [ 59]: 68399cc0fb5b4f5b -Block 0026 [ 60]: 6b339f4dd21ee52b -Block 0026 [ 61]: 1ccb60bbece0b314 -Block 0026 [ 62]: 67ef77abb1f679e3 -Block 0026 [ 63]: 725403dfdfea6766 -Block 0026 [ 64]: ceea6a9482466593 -Block 0026 [ 65]: 0f6fe2bf8ebd08aa -Block 0026 [ 66]: 4c93f88b4040ce00 -Block 0026 [ 67]: 461c420c864292d2 -Block 0026 [ 68]: 005fffeac6bf989d -Block 0026 [ 69]: 8e57dc0cd187b0a8 -Block 0026 [ 70]: 40e56f7495b3245d -Block 0026 [ 71]: fc30919451bff2dd -Block 0026 [ 72]: e6bc501d0d5f6627 -Block 0026 [ 73]: 06302090b6c9a247 -Block 0026 [ 74]: 8108bbb6f845954c -Block 0026 [ 75]: a46a02be4fd8109b -Block 0026 [ 76]: 18449b4910984976 -Block 0026 [ 77]: 627d1da56c93283f -Block 0026 [ 78]: 3ea2709034683c54 -Block 0026 [ 79]: aa66780464acc060 -Block 0026 [ 80]: 3799a4195532e48a -Block 0026 [ 81]: 2be57e5e6d2574dd -Block 0026 [ 82]: 6b175c17210e5f83 -Block 0026 [ 83]: 36d9322e01b4d188 -Block 0026 [ 84]: 8903c58d72114572 -Block 0026 [ 85]: eb12c42494273c25 -Block 0026 [ 86]: 2ff9cf1cba192da0 -Block 0026 [ 87]: ece184354ffaca0f -Block 0026 [ 88]: 8be22a1b176220f4 -Block 0026 [ 89]: f389e6c2a34d6f02 -Block 0026 [ 90]: 5eb639bbfcac89e3 -Block 0026 [ 91]: ee4954ff1088d75f -Block 0026 [ 92]: 40fc9ea79cb8ea53 -Block 0026 [ 93]: 37031bf3a0da4c68 -Block 0026 [ 94]: a3d7d6b500f23ea1 -Block 0026 [ 95]: 0e25050f11b8c6e2 -Block 0026 [ 96]: 1dcfef79189cd6ea -Block 0026 [ 97]: d55c64e2688a9387 -Block 0026 [ 98]: 854f67dff13be8dc -Block 0026 [ 99]: 73d776ccda670f31 -Block 0026 [100]: 733597e56ce06e48 -Block 0026 [101]: b1ba59f9fdd19824 -Block 0026 [102]: 505cb5283934f36f -Block 0026 [103]: 76a4a4e76280bd43 -Block 0026 [104]: 82762a9747778007 -Block 0026 [105]: 0b8e9ba737a69853 -Block 0026 [106]: 07eb4517abf8f59e -Block 0026 [107]: 6cfa132c67ddaf9f -Block 0026 [108]: dc82c73163acec84 -Block 0026 [109]: 8d2b9b17c3ec0528 -Block 0026 [110]: 39af2ae695f99141 -Block 0026 [111]: 19a879e403ee3f71 -Block 0026 [112]: b7b713bc8c58b905 -Block 0026 [113]: 8837db614637ff11 -Block 0026 [114]: 72420905a2ba9df5 -Block 0026 [115]: 8b4a379f3e156cd9 -Block 0026 [116]: 399fc6bbc18599a3 -Block 0026 [117]: cd9f7dacec38c90f -Block 0026 [118]: 1e50976d023819ca -Block 0026 [119]: 702eea7106b1ee55 -Block 0026 [120]: e822fcb19d6bddf8 -Block 0026 [121]: 9c1d0a694f21ef4b -Block 0026 [122]: 81edbcb110767596 -Block 0026 [123]: 68177967dab9ea1c -Block 0026 [124]: e63bb5189aaefafd -Block 0026 [125]: 07b85177bdec787e -Block 0026 [126]: 82e90e729283b121 -Block 0026 [127]: 5c38fc13b16fadd7 -Block 0027 [ 0]: 12930e6a057db3dc -Block 0027 [ 1]: d36a092bdc01e5e2 -Block 0027 [ 2]: 9f38ab342482fe49 -Block 0027 [ 3]: f974fc7ba1aa4fa8 -Block 0027 [ 4]: a92ee342c95f0c16 -Block 0027 [ 5]: 5fa4cd78ef7c546e -Block 0027 [ 6]: 7530efe11190c6cf -Block 0027 [ 7]: 7dc4e9115082c64a -Block 0027 [ 8]: 7e50a5c226d14b92 -Block 0027 [ 9]: c10c38aedbde3476 -Block 0027 [ 10]: 63a10362c500407c -Block 0027 [ 11]: 38d06cebed582370 -Block 0027 [ 12]: a6d17e59dd8d79e1 -Block 0027 [ 13]: 3f560be8c3116feb -Block 0027 [ 14]: f1a98624843f0e06 -Block 0027 [ 15]: 5b605da6ea36cb76 -Block 0027 [ 16]: 0a998d1b462b9636 -Block 0027 [ 17]: 20c9bc32a8fb2c68 -Block 0027 [ 18]: 6b033a31a9d38e4d -Block 0027 [ 19]: 71e616a3e9371928 -Block 0027 [ 20]: fb93b58238f371bc -Block 0027 [ 21]: 19c3c8b589136419 -Block 0027 [ 22]: b58736bab4e0456d -Block 0027 [ 23]: a26647abf0d6ecbd -Block 0027 [ 24]: ebbf19504cbf5844 -Block 0027 [ 25]: 4c5efff112625110 -Block 0027 [ 26]: 59dc758ebdb3f7db -Block 0027 [ 27]: b37f98da7ebec9f1 -Block 0027 [ 28]: cfd2e95dda6b5110 -Block 0027 [ 29]: f1f99e59b552c90b -Block 0027 [ 30]: e47fc3a80048984b -Block 0027 [ 31]: a91ae33cac719918 -Block 0027 [ 32]: 13183079f3445bb9 -Block 0027 [ 33]: b11458d8655b5d1e -Block 0027 [ 34]: 344e18738fc9a152 -Block 0027 [ 35]: 4b5e13937faa8d66 -Block 0027 [ 36]: bef80972ec679c98 -Block 0027 [ 37]: 03e5e4f7b3a6f1f1 -Block 0027 [ 38]: ea70f0fddee3e6d9 -Block 0027 [ 39]: 146fb2c49fdf235f -Block 0027 [ 40]: 6047ed94889fcd7a -Block 0027 [ 41]: 4ca5532aa52131f0 -Block 0027 [ 42]: cbb5b45a4c542dca -Block 0027 [ 43]: e653642f7a991cee -Block 0027 [ 44]: 02df1b6bcd671363 -Block 0027 [ 45]: bfccfd002b010fc1 -Block 0027 [ 46]: 932095f8fcb37e53 -Block 0027 [ 47]: 35e614f689c05f47 -Block 0027 [ 48]: 1b74807f55e0b06a -Block 0027 [ 49]: 4eb2f12dba075a46 -Block 0027 [ 50]: f0982642ef5559ac -Block 0027 [ 51]: 3422bc053329d35f -Block 0027 [ 52]: 8e431bb2418f2552 -Block 0027 [ 53]: bfac86b81ed9ae9a -Block 0027 [ 54]: cacc8aa08da0e75b -Block 0027 [ 55]: ee31b0c8eb4204b5 -Block 0027 [ 56]: cbdbcfd30e0cba0f -Block 0027 [ 57]: 671d0b0c3726efc9 -Block 0027 [ 58]: b0c4ab8d5906da13 -Block 0027 [ 59]: e5b95a70fa01a0eb -Block 0027 [ 60]: a1d1f26bfd9f3577 -Block 0027 [ 61]: 359023a672a6a5f0 -Block 0027 [ 62]: 370ddd312a434fb5 -Block 0027 [ 63]: 74da84c2881a3683 -Block 0027 [ 64]: d6828e4ba965222d -Block 0027 [ 65]: 595dc11dad7f9a30 -Block 0027 [ 66]: 73068b819a5e5aee -Block 0027 [ 67]: 15369ddd1a6d970c -Block 0027 [ 68]: 3f462c04b0b7a365 -Block 0027 [ 69]: 917e1403575f4ab6 -Block 0027 [ 70]: 2273d2ffdcbf1d12 -Block 0027 [ 71]: ddd0ba35d1168aa3 -Block 0027 [ 72]: 75cbb653840a4cbf -Block 0027 [ 73]: a6c8c0c60b0d8586 -Block 0027 [ 74]: eff7b12a4d557ec8 -Block 0027 [ 75]: 120404a563f5833a -Block 0027 [ 76]: 0126fd04246359fc -Block 0027 [ 77]: 7b062c25b5f01e0e -Block 0027 [ 78]: d77425a03db505f5 -Block 0027 [ 79]: 0f3cb0da8c62a3c1 -Block 0027 [ 80]: 36e521a3f8ee260e -Block 0027 [ 81]: 6daabf1b23d415e9 -Block 0027 [ 82]: 351544dc1bc2ade2 -Block 0027 [ 83]: 73a2f4cbf0c61a71 -Block 0027 [ 84]: 9b85fb6bf47e113b -Block 0027 [ 85]: 1069d94fb273a533 -Block 0027 [ 86]: ce9b89a370984d0a -Block 0027 [ 87]: 6450d2025404e384 -Block 0027 [ 88]: fb7a4386879734bc -Block 0027 [ 89]: e46fd6fd1275c166 -Block 0027 [ 90]: ee016a4cac3d0cee -Block 0027 [ 91]: fffc68927242f65b -Block 0027 [ 92]: 0a1887efbe2788b7 -Block 0027 [ 93]: 1b58841d77287271 -Block 0027 [ 94]: d152260d9308572b -Block 0027 [ 95]: ece6f963e3ebbbc5 -Block 0027 [ 96]: e7223810f5627ce1 -Block 0027 [ 97]: 1b3981f28853088f -Block 0027 [ 98]: 65c286c9e8dcfbd0 -Block 0027 [ 99]: 1ee47c556fbc9547 -Block 0027 [100]: 6143d92f2a00e43e -Block 0027 [101]: 0910c819d3fbd6c5 -Block 0027 [102]: 83a6c3c6178941aa -Block 0027 [103]: fdcae49032578ab3 -Block 0027 [104]: d401f44c9ce96675 -Block 0027 [105]: 38f7ee360016ae89 -Block 0027 [106]: dce9785998cd7e5a -Block 0027 [107]: 1d62c2e64198819b -Block 0027 [108]: de11552f926a3154 -Block 0027 [109]: 70c03577942da684 -Block 0027 [110]: bbd8b1f50967abcf -Block 0027 [111]: dbc8c3667580889f -Block 0027 [112]: 8149d1c48a57948e -Block 0027 [113]: 61f5496ee9cfbbd2 -Block 0027 [114]: 4ac6319d2de8dc93 -Block 0027 [115]: 27c3d16c6b798aba -Block 0027 [116]: c88e4c2f6f071746 -Block 0027 [117]: edcd89159e9013ce -Block 0027 [118]: 8e2e169861431d0d -Block 0027 [119]: 5edebc7fcf5da7bc -Block 0027 [120]: 382bbc7274d680db -Block 0027 [121]: 00b6ff6e1d75dc45 -Block 0027 [122]: a76a9eed4900a8d1 -Block 0027 [123]: 7f484b5d28c8a586 -Block 0027 [124]: 295b53fe63506698 -Block 0027 [125]: 558a174b4e127e0e -Block 0027 [126]: 684094fc58d7e254 -Block 0027 [127]: dbe06eb544f1906e -Block 0028 [ 0]: ddb78852644e4fb9 -Block 0028 [ 1]: 8157ed8a8df838d8 -Block 0028 [ 2]: 368f13a1b3a19b11 -Block 0028 [ 3]: d4f19f1eb6e95356 -Block 0028 [ 4]: 1e1b78d80bf53bd4 -Block 0028 [ 5]: 4fdb694933b6c774 -Block 0028 [ 6]: 6ddfca93b71e9a0f -Block 0028 [ 7]: a57c49965a92a2ab -Block 0028 [ 8]: 4fcc400c2b8db1d1 -Block 0028 [ 9]: 64cc43e293565b56 -Block 0028 [ 10]: 4b45a5f1b8517500 -Block 0028 [ 11]: 11e2bab5266c6f45 -Block 0028 [ 12]: 86beeced6cae59b9 -Block 0028 [ 13]: 45dffb5c4715fe45 -Block 0028 [ 14]: 2c9591fd02b19e55 -Block 0028 [ 15]: dab8017fe48f8420 -Block 0028 [ 16]: 25c31011171393eb -Block 0028 [ 17]: 5cbd5c588c21d872 -Block 0028 [ 18]: 316d50b90b137b97 -Block 0028 [ 19]: 5924c498b1765b2f -Block 0028 [ 20]: 2a0f743760ccc424 -Block 0028 [ 21]: 30f97a465a2b737b -Block 0028 [ 22]: 4646d157fecaceb8 -Block 0028 [ 23]: e5f9e8a4c6f1115c -Block 0028 [ 24]: 1766f2e20c969a26 -Block 0028 [ 25]: 6c2e97942c33c4e5 -Block 0028 [ 26]: 7424f24156e95a3f -Block 0028 [ 27]: 872bbb2e45e22ce5 -Block 0028 [ 28]: 5c11165dd1a85e90 -Block 0028 [ 29]: 34dceb5459d0114d -Block 0028 [ 30]: a1f187f262b4e88c -Block 0028 [ 31]: 9e1ca88530d2b53c -Block 0028 [ 32]: fc6a2ecbab308670 -Block 0028 [ 33]: 3fd7c88081e86c28 -Block 0028 [ 34]: f38d8bd2f6673049 -Block 0028 [ 35]: d5d9f983810b9631 -Block 0028 [ 36]: b22bb71dc25daa1a -Block 0028 [ 37]: fbe85a9b293b63c4 -Block 0028 [ 38]: 1b267938f53b24be -Block 0028 [ 39]: 646356bba6645a62 -Block 0028 [ 40]: 08c4f441c8b9e50c -Block 0028 [ 41]: ac2a12479f405658 -Block 0028 [ 42]: 2154f7818668aaba -Block 0028 [ 43]: 5020654424e00306 -Block 0028 [ 44]: f69468f9c6058b91 -Block 0028 [ 45]: edb043fd6c771c66 -Block 0028 [ 46]: 1287182ed24b66af -Block 0028 [ 47]: 5fa6715eb508cb2f -Block 0028 [ 48]: 7f2e3eebc7622dd2 -Block 0028 [ 49]: 4872d48ca3d3044a -Block 0028 [ 50]: 9afe8b801d70981e -Block 0028 [ 51]: 37dc872e96e1fa5e -Block 0028 [ 52]: 065674818a30fb71 -Block 0028 [ 53]: f15637fc6066ab39 -Block 0028 [ 54]: dd012664e2e963fc -Block 0028 [ 55]: 11f468e6f8ead720 -Block 0028 [ 56]: 0d4bf81380f5f7b7 -Block 0028 [ 57]: bf387f5347f51a2b -Block 0028 [ 58]: 80830d570d6be9fa -Block 0028 [ 59]: 0fbdf32510ef4109 -Block 0028 [ 60]: 865abaf1fad7c7c6 -Block 0028 [ 61]: 5f8a61d65fbcff4e -Block 0028 [ 62]: ca1e5596912d75b7 -Block 0028 [ 63]: 7b12b1246fbb312a -Block 0028 [ 64]: 216f63fbd7cee1ad -Block 0028 [ 65]: 3304bd0ad61aa327 -Block 0028 [ 66]: 7b406a15e6a554dd -Block 0028 [ 67]: 4b861fd7abc69337 -Block 0028 [ 68]: cd61bc81c3a5710a -Block 0028 [ 69]: bacf74038200ade1 -Block 0028 [ 70]: 2eb50854ecb1b89c -Block 0028 [ 71]: 6ce4f13fcd047978 -Block 0028 [ 72]: 1ffd893cf06817b1 -Block 0028 [ 73]: 019e6cdd343ba3b5 -Block 0028 [ 74]: 6ad77b96e6cb27f7 -Block 0028 [ 75]: fd0447e79123f630 -Block 0028 [ 76]: 60c59aa378c9d746 -Block 0028 [ 77]: b7047b78dcdda7f6 -Block 0028 [ 78]: 1675c7d66cb47094 -Block 0028 [ 79]: ca5eefb7cb436aee -Block 0028 [ 80]: a4207e30dd8f6abe -Block 0028 [ 81]: cd3d5e1bc0851543 -Block 0028 [ 82]: 59df14e5a994447b -Block 0028 [ 83]: 6212bdad1c5236ba -Block 0028 [ 84]: 50f2b2aa5d88720e -Block 0028 [ 85]: 7e957c908b1fe13f -Block 0028 [ 86]: 8faccec71ce74717 -Block 0028 [ 87]: 694c00d349687830 -Block 0028 [ 88]: 2c4704f4942761f9 -Block 0028 [ 89]: 2b7f14df7894d243 -Block 0028 [ 90]: e6690e21770bdbd8 -Block 0028 [ 91]: c5f1b5c597c611d4 -Block 0028 [ 92]: 695bfbb7c5b6d205 -Block 0028 [ 93]: 7f4dd31a22323b21 -Block 0028 [ 94]: 1c82e4fe143a3a87 -Block 0028 [ 95]: 3d67e3a318ec260f -Block 0028 [ 96]: 0e1d2cf60450d635 -Block 0028 [ 97]: 2616a3ea45b9fe98 -Block 0028 [ 98]: fc913a01b60d4ef4 -Block 0028 [ 99]: dce48585f1e70b80 -Block 0028 [100]: 86ca2b0246017f0e -Block 0028 [101]: 603a6902077571cd -Block 0028 [102]: 10dc341e0cfd16f1 -Block 0028 [103]: e541553b8d4335c9 -Block 0028 [104]: 66d981c8d54ab580 -Block 0028 [105]: bf4d8514c40adadc -Block 0028 [106]: 10d48b8199c6b610 -Block 0028 [107]: b5bc74240320de57 -Block 0028 [108]: af7668ece2e84c7e -Block 0028 [109]: e3130bb9f194f006 -Block 0028 [110]: ac94f63610240c95 -Block 0028 [111]: a57c35e5bc18208a -Block 0028 [112]: e1e559ad43561660 -Block 0028 [113]: 9e0396432e4fb2b0 -Block 0028 [114]: d9eecd132cf253e7 -Block 0028 [115]: 5c6c1e86338d3843 -Block 0028 [116]: 4a0f9767c564c7fd -Block 0028 [117]: 451ad2c0b4837694 -Block 0028 [118]: b919b729cdf423bc -Block 0028 [119]: 38166219dae5e549 -Block 0028 [120]: d80cee45d4cec8d6 -Block 0028 [121]: b29d77b88e5d7043 -Block 0028 [122]: d3a30d963e19f957 -Block 0028 [123]: 97dabe16dde3eb61 -Block 0028 [124]: baf0424359c13ff1 -Block 0028 [125]: fc25e968e22146eb -Block 0028 [126]: 8aba818396994000 -Block 0028 [127]: c48f6fdace29cf9d -Block 0029 [ 0]: 225b64c780f39256 -Block 0029 [ 1]: 5147dc905e69a0db -Block 0029 [ 2]: 4c7942255ca27d88 -Block 0029 [ 3]: 8229b91388cfb1ae -Block 0029 [ 4]: 77e41def90535d0b -Block 0029 [ 5]: 60e9faecef01a27c -Block 0029 [ 6]: 588f421dc2ceaeec -Block 0029 [ 7]: abdd9949472c2af1 -Block 0029 [ 8]: a2b25cd56b4a8e35 -Block 0029 [ 9]: c7a089f905ef9af7 -Block 0029 [ 10]: 984e0141b144c4ac -Block 0029 [ 11]: e7e81071cf5a3a28 -Block 0029 [ 12]: e1877aa5c8515358 -Block 0029 [ 13]: e2b44eec3f348c9d -Block 0029 [ 14]: 2c656eabc4c92995 -Block 0029 [ 15]: 7a4b4b7e40cd548d -Block 0029 [ 16]: a3256ff7e5eb7769 -Block 0029 [ 17]: dd83e20dbf429f74 -Block 0029 [ 18]: 70a48f575e6f5d04 -Block 0029 [ 19]: 4127e6148d99f6ca -Block 0029 [ 20]: 472d9760ec55f6c2 -Block 0029 [ 21]: 4a13aa3a38cbd14e -Block 0029 [ 22]: 45203b263388ba70 -Block 0029 [ 23]: 20cc48efc33f1c47 -Block 0029 [ 24]: d37ae14d8c380707 -Block 0029 [ 25]: 5d88011d318a9eb1 -Block 0029 [ 26]: 5a7bcd8ae96845a8 -Block 0029 [ 27]: 82fb579f8cae5f10 -Block 0029 [ 28]: e0b5c3cd5c716035 -Block 0029 [ 29]: b23baef06e65d007 -Block 0029 [ 30]: e74730eecf9fe525 -Block 0029 [ 31]: a58d022815708b41 -Block 0029 [ 32]: ad2f92a14bd509e1 -Block 0029 [ 33]: 4c263e4d0ba9f61f -Block 0029 [ 34]: ef945be10969cf1d -Block 0029 [ 35]: 26238bd507503c18 -Block 0029 [ 36]: 10edc88eae06b7f1 -Block 0029 [ 37]: aa77af94ae98a96a -Block 0029 [ 38]: f5b6f7f01849769f -Block 0029 [ 39]: 018464b91abc2a1c -Block 0029 [ 40]: 09bb750f89cf9c2c -Block 0029 [ 41]: bdf625a05c80e043 -Block 0029 [ 42]: 004149c8ac887102 -Block 0029 [ 43]: a32bff9a62c2a7e3 -Block 0029 [ 44]: b1db20ddbe124fad -Block 0029 [ 45]: 1e55616eb04c3f84 -Block 0029 [ 46]: 56f964e84266f7e8 -Block 0029 [ 47]: 372a6c740da9c762 -Block 0029 [ 48]: 2604cb4e6455c382 -Block 0029 [ 49]: 3959bcce8d32b584 -Block 0029 [ 50]: 20c4a1dce4e44856 -Block 0029 [ 51]: e872e71fdd213d98 -Block 0029 [ 52]: ff576355fbe1ce1f -Block 0029 [ 53]: 168d7d1478765f35 -Block 0029 [ 54]: ef0928a5c3c145a1 -Block 0029 [ 55]: d293b5b27b7e72ec -Block 0029 [ 56]: e5dc2424b6f8b604 -Block 0029 [ 57]: f2983bcacecf4aa1 -Block 0029 [ 58]: 456d60bc3fee9203 -Block 0029 [ 59]: 1fc3a7781da2242c -Block 0029 [ 60]: a2c160c30dba2e35 -Block 0029 [ 61]: 82ed201b0e1caa9b -Block 0029 [ 62]: 06cf39b3dfc2f9f8 -Block 0029 [ 63]: 094b0feafb722040 -Block 0029 [ 64]: 8d98b7132e79384a -Block 0029 [ 65]: bd1f6dcf9268e96c -Block 0029 [ 66]: 65794241aa1db26a -Block 0029 [ 67]: 6ba30654dd5508d7 -Block 0029 [ 68]: 38e2cecc5ef5b3c3 -Block 0029 [ 69]: c0caeedd012543b1 -Block 0029 [ 70]: 97d124d6b9231255 -Block 0029 [ 71]: 924a3eabe40ed3c2 -Block 0029 [ 72]: bef4ffe2aa528ad5 -Block 0029 [ 73]: 7459989ae48c7456 -Block 0029 [ 74]: 15af22c8d046ed3d -Block 0029 [ 75]: b9a7b35b20e04a44 -Block 0029 [ 76]: a9fa2b538f6fdc91 -Block 0029 [ 77]: 627e222380b163a6 -Block 0029 [ 78]: 750e4474b3fedbc4 -Block 0029 [ 79]: fd8f06d128d7122d -Block 0029 [ 80]: dcca40c3aad30d42 -Block 0029 [ 81]: c9e560e59aff9e68 -Block 0029 [ 82]: af44daa4c21961fd -Block 0029 [ 83]: 68d956313ca4ee2a -Block 0029 [ 84]: 559f4802f58cab76 -Block 0029 [ 85]: de4b232ebdb885e9 -Block 0029 [ 86]: da18676f9822e90e -Block 0029 [ 87]: c7faa08eac54f0e9 -Block 0029 [ 88]: 7bbee29f3ae924d6 -Block 0029 [ 89]: b31156de74c31bdd -Block 0029 [ 90]: dd612ef379062a16 -Block 0029 [ 91]: b9a6fa7267d37107 -Block 0029 [ 92]: 978f2e1b5d57ef40 -Block 0029 [ 93]: 1257fa63203fa38c -Block 0029 [ 94]: b45bff452b049baf -Block 0029 [ 95]: 2b052d00e1cfdbff -Block 0029 [ 96]: 10a504192a1ca782 -Block 0029 [ 97]: 422b6d5a607e0f53 -Block 0029 [ 98]: 994b4ab3f3455574 -Block 0029 [ 99]: f404410879ee0682 -Block 0029 [100]: d24490a97ed582df -Block 0029 [101]: bf58aa9a14b30fb6 -Block 0029 [102]: ab05a7e1e0869b08 -Block 0029 [103]: 7438c7a055aabd68 -Block 0029 [104]: e6b4f489e314de4a -Block 0029 [105]: e367879a4a2ab4e2 -Block 0029 [106]: 932b68f955ae8e57 -Block 0029 [107]: 9349bc1c55f6f161 -Block 0029 [108]: 9c06b3701e4698ba -Block 0029 [109]: 380d6750f198b3a8 -Block 0029 [110]: 5c9f51e2bb2a361e -Block 0029 [111]: f01e94b44e75a07f -Block 0029 [112]: 51c80affa2375a90 -Block 0029 [113]: 7b759d95208f711c -Block 0029 [114]: a77b52fcc15720c0 -Block 0029 [115]: d30091a259eb7f97 -Block 0029 [116]: 559a223d0ac376f1 -Block 0029 [117]: 7f6859520b5d60ff -Block 0029 [118]: 3134e71b8672b420 -Block 0029 [119]: f36a26683f6c70f1 -Block 0029 [120]: 8e884ac595a80e59 -Block 0029 [121]: f1bd754af2d86f17 -Block 0029 [122]: 2dbe0b4c1021e2c6 -Block 0029 [123]: bcf728a6ed7761e2 -Block 0029 [124]: f5848563661b7e5f -Block 0029 [125]: 92bb5c63faae7980 -Block 0029 [126]: 5085c2ab6ec27a8d -Block 0029 [127]: d149a43c8cf72c8e -Block 0030 [ 0]: f7b3915b5d795911 -Block 0030 [ 1]: 6d4650cabf59a5cd -Block 0030 [ 2]: 029120b97e43b2d5 -Block 0030 [ 3]: e786cadd86d3dd06 -Block 0030 [ 4]: f6950a4bcd2ab3de -Block 0030 [ 5]: a6dbc2bc0254abdc -Block 0030 [ 6]: b00616f4dd9e6f91 -Block 0030 [ 7]: ddbdcf163e532e9d -Block 0030 [ 8]: eef8ba582ed02591 -Block 0030 [ 9]: 9ae7f79060ab2642 -Block 0030 [ 10]: 7781023d613e84b0 -Block 0030 [ 11]: 9950b8da56ed918a -Block 0030 [ 12]: 14327600d58edc95 -Block 0030 [ 13]: 25eefe4b4e9dca67 -Block 0030 [ 14]: 7c1e048e6ad65e96 -Block 0030 [ 15]: 4355b2bf89b78bde -Block 0030 [ 16]: 902b3d09bbc68c14 -Block 0030 [ 17]: 3fbeea70676782db -Block 0030 [ 18]: bc9b363de9aab773 -Block 0030 [ 19]: 6f636ac7a5600379 -Block 0030 [ 20]: 07d1d0f408cbb928 -Block 0030 [ 21]: 2cf99690cd52a6c4 -Block 0030 [ 22]: ed547993fa52bf98 -Block 0030 [ 23]: f2a63153b4adf41d -Block 0030 [ 24]: 5185c3b0c39c3b2f -Block 0030 [ 25]: a0a83717bfed6aee -Block 0030 [ 26]: 8cb03a53f0475da6 -Block 0030 [ 27]: 80dae49c5af616ed -Block 0030 [ 28]: 4b3402af281e060b -Block 0030 [ 29]: a94d8af4e395da7a -Block 0030 [ 30]: 11deecee4671f9ad -Block 0030 [ 31]: 365a38641405b0ba -Block 0030 [ 32]: a5102f86395d3699 -Block 0030 [ 33]: 461c09efa6e93ef1 -Block 0030 [ 34]: e45d8eede2db61d3 -Block 0030 [ 35]: e2b1c9e863fb2219 -Block 0030 [ 36]: 742d101cca54f303 -Block 0030 [ 37]: 100668962e6d6721 -Block 0030 [ 38]: 7fdb9ee7c8e721bb -Block 0030 [ 39]: 4f628199abab6233 -Block 0030 [ 40]: e174091ad6b99767 -Block 0030 [ 41]: 7abd35fcbb0b48f7 -Block 0030 [ 42]: af92e9ef5cd4585c -Block 0030 [ 43]: 26d4a48f93f87bc3 -Block 0030 [ 44]: 1e66402195c79874 -Block 0030 [ 45]: 558b6146fe4ed7cf -Block 0030 [ 46]: 1ff7e9f8c9241ab0 -Block 0030 [ 47]: bd94bee9062f44b3 -Block 0030 [ 48]: 93468af3821a9124 -Block 0030 [ 49]: 77be11517873c6da -Block 0030 [ 50]: ebf6a732f56ee38d -Block 0030 [ 51]: 8ab2665e5f16ce08 -Block 0030 [ 52]: 9e0c5672a77d425a -Block 0030 [ 53]: ccac47c85570221b -Block 0030 [ 54]: ba072ec00b35f6e1 -Block 0030 [ 55]: e2a9b77a273ed38e -Block 0030 [ 56]: 01e6d7f004980390 -Block 0030 [ 57]: 94aeef81a472125b -Block 0030 [ 58]: e623ce55ea9d2032 -Block 0030 [ 59]: 511db694687283ca -Block 0030 [ 60]: 6042414f19f4e2d9 -Block 0030 [ 61]: 622142095d269bf8 -Block 0030 [ 62]: ea39bdbd152c17e2 -Block 0030 [ 63]: ee70e17e9b9cd618 -Block 0030 [ 64]: 819eacf187136971 -Block 0030 [ 65]: abdd3aea4a6fc239 -Block 0030 [ 66]: fdbc3148fbc4b4a2 -Block 0030 [ 67]: aa5fa1241d9bcd8b -Block 0030 [ 68]: 8c74b7bb21e39c8e -Block 0030 [ 69]: 9b41e6764ef9c3b5 -Block 0030 [ 70]: d6df0e067e697f53 -Block 0030 [ 71]: 21def006cbc46fd3 -Block 0030 [ 72]: 42001961e18394fc -Block 0030 [ 73]: 78f9eb324a136de0 -Block 0030 [ 74]: 07659bd985720b63 -Block 0030 [ 75]: 5b3090c256c8624e -Block 0030 [ 76]: f8e77a5f9188017a -Block 0030 [ 77]: dde950f5c8aebd6c -Block 0030 [ 78]: 9ec2bd7d0dd13bd4 -Block 0030 [ 79]: f055ecc5524dec99 -Block 0030 [ 80]: 454c290ecf753728 -Block 0030 [ 81]: f1077cae3c387789 -Block 0030 [ 82]: e58f4e8e70ea5d33 -Block 0030 [ 83]: a9cf7b5b92cdc5c5 -Block 0030 [ 84]: abbe97dc3a615361 -Block 0030 [ 85]: 101c5e27366532d6 -Block 0030 [ 86]: 2a5b85b9cc569c7f -Block 0030 [ 87]: d5415ec260957678 -Block 0030 [ 88]: 6f148b5e1ee726ab -Block 0030 [ 89]: 3e83ac5b68c27c1e -Block 0030 [ 90]: caf9feedae1d27fd -Block 0030 [ 91]: f386d285ebd0f0d7 -Block 0030 [ 92]: 931684e917211689 -Block 0030 [ 93]: 0dd6cfb9b9d794a9 -Block 0030 [ 94]: edf6589e6eaaffef -Block 0030 [ 95]: a6778256939a1e88 -Block 0030 [ 96]: 7b4e279e4456a902 -Block 0030 [ 97]: e86fb8cf00b9c11c -Block 0030 [ 98]: 3abe1cb80e77dbc7 -Block 0030 [ 99]: 804a5a863239744b -Block 0030 [100]: 0ff09f689b9155cf -Block 0030 [101]: 7e35cd3b02dce640 -Block 0030 [102]: 2bacf335b1976e89 -Block 0030 [103]: 8233ef17131bcce6 -Block 0030 [104]: aaa2ec0b9d1fa066 -Block 0030 [105]: ec9a0aa1be68200d -Block 0030 [106]: 90716606866689c6 -Block 0030 [107]: 4d76da6c80d13d62 -Block 0030 [108]: f8a464f45e6f2003 -Block 0030 [109]: f5b00f8b927fd15f -Block 0030 [110]: 3304bcbc42a900be -Block 0030 [111]: a097ee36d01a0e12 -Block 0030 [112]: 85759ff3b8dab8a2 -Block 0030 [113]: d0d2dd58bd000a59 -Block 0030 [114]: bdd16ffb771df25c -Block 0030 [115]: 3b7f17d65e21bcbc -Block 0030 [116]: a8db992d9372a410 -Block 0030 [117]: cc57b4adaa4c9451 -Block 0030 [118]: 45075ac086aa5d4a -Block 0030 [119]: 597367349e9a2e79 -Block 0030 [120]: 2696d9e2cddad3f6 -Block 0030 [121]: aa76a82770ea0cd7 -Block 0030 [122]: 22b00c94404e8392 -Block 0030 [123]: f1e2d0a68f50b3c5 -Block 0030 [124]: 47fc2760188717f2 -Block 0030 [125]: eea23f3a62cbc15e -Block 0030 [126]: 9777733407a94e0b -Block 0030 [127]: 10e2bcf209ac3c93 -Block 0031 [ 0]: ba2551a378c910e2 -Block 0031 [ 1]: a2a4b5ae9f029037 -Block 0031 [ 2]: fbcb00039788e99c -Block 0031 [ 3]: 3d51678e868d16f2 -Block 0031 [ 4]: eccd26287b0b4b8c -Block 0031 [ 5]: d125b4a30ae07da8 -Block 0031 [ 6]: bdc4f0f2711802cc -Block 0031 [ 7]: ec04266df056401e -Block 0031 [ 8]: b676b85760e7e3aa -Block 0031 [ 9]: 34d7afd67018978d -Block 0031 [ 10]: 72f33357e0a3d0d5 -Block 0031 [ 11]: 5953e85b40b1db60 -Block 0031 [ 12]: 9f60e209dcffd146 -Block 0031 [ 13]: ebf4ae0739a7190c -Block 0031 [ 14]: e786bde349ffa078 -Block 0031 [ 15]: 45f2e51c23815e96 -Block 0031 [ 16]: 6db7c74b5c15185d -Block 0031 [ 17]: 64c6cfba2c5c8db0 -Block 0031 [ 18]: b3825f9409265373 -Block 0031 [ 19]: dfe0cbda0725f952 -Block 0031 [ 20]: fd0c2b34aeb78b75 -Block 0031 [ 21]: ce8a795131a4905d -Block 0031 [ 22]: b05f59cbde1b730c -Block 0031 [ 23]: bc9f44070df95cad -Block 0031 [ 24]: 8b04c461747caca8 -Block 0031 [ 25]: 24ab937d9e282f53 -Block 0031 [ 26]: b73a19bef82cb8a3 -Block 0031 [ 27]: 9685f40b24ca7f3b -Block 0031 [ 28]: cdca3329cc0cd294 -Block 0031 [ 29]: d2bfcd5eba17fd63 -Block 0031 [ 30]: cb91a04e00308585 -Block 0031 [ 31]: b4d1cdfe27f9f1b9 -Block 0031 [ 32]: 3a179be974a2a00f -Block 0031 [ 33]: 9adf724e4a740c28 -Block 0031 [ 34]: 08ee5f4f7d8b7a4d -Block 0031 [ 35]: 5798d8357833307a -Block 0031 [ 36]: 1c10594518a0094e -Block 0031 [ 37]: d6bf9b976f3007b7 -Block 0031 [ 38]: c971f67f6f5f69d8 -Block 0031 [ 39]: f71ef932e83d37c6 -Block 0031 [ 40]: ed96d8d9ae4aa39a -Block 0031 [ 41]: e2b9b38b144f690b -Block 0031 [ 42]: cadf4da1e346adb8 -Block 0031 [ 43]: 9df212ccd4768f96 -Block 0031 [ 44]: e0beb6841adf50bb -Block 0031 [ 45]: f568bce2d32ac0ff -Block 0031 [ 46]: 094cba4a582410b1 -Block 0031 [ 47]: 0bc73e23027ae171 -Block 0031 [ 48]: df30cb7f6c304933 -Block 0031 [ 49]: e5c9de323c73aeaa -Block 0031 [ 50]: 7309a5a4d46d2400 -Block 0031 [ 51]: 87577abd3a5847f6 -Block 0031 [ 52]: f34e46c0adbc27cc -Block 0031 [ 53]: 8fbc9c9ecef4712c -Block 0031 [ 54]: bb236365dab5f0f9 -Block 0031 [ 55]: e883770727b59df2 -Block 0031 [ 56]: 24a2400329decffe -Block 0031 [ 57]: 72ed72838f62bd8b -Block 0031 [ 58]: 2ff20a50b9edaf02 -Block 0031 [ 59]: c49a571662434a4c -Block 0031 [ 60]: 7c9ad60d62c4b1bf -Block 0031 [ 61]: 51875a75e552ada6 -Block 0031 [ 62]: 3a32f8ab24e7c732 -Block 0031 [ 63]: c340f6a12b945d83 -Block 0031 [ 64]: f3504c15c9f162f3 -Block 0031 [ 65]: d9daa82ba3ba8977 -Block 0031 [ 66]: 54dba94ce2ec870d -Block 0031 [ 67]: 68331ed60a1d5037 -Block 0031 [ 68]: 3a0a89f98e28d0ed -Block 0031 [ 69]: d11a497c98dd7363 -Block 0031 [ 70]: 4fb9ba15f43a8737 -Block 0031 [ 71]: fab603bffcad233c -Block 0031 [ 72]: 24cdf04cc2b5eead -Block 0031 [ 73]: e8b572d365f625c5 -Block 0031 [ 74]: 257ec3762e4f6da8 -Block 0031 [ 75]: b81b255403c274fe -Block 0031 [ 76]: 926ff7a24d12bae5 -Block 0031 [ 77]: 2cd251efd351ffde -Block 0031 [ 78]: c31eef31e805f738 -Block 0031 [ 79]: dc62d5543b95daab -Block 0031 [ 80]: bd9e0bfe62400899 -Block 0031 [ 81]: a1cc9f496b9c829c -Block 0031 [ 82]: b2043c89cf626b77 -Block 0031 [ 83]: f64141cb97fee59a -Block 0031 [ 84]: dd1df4f4706c011f -Block 0031 [ 85]: 16df9a3054c8c96f -Block 0031 [ 86]: 3a63828fe124a3fe -Block 0031 [ 87]: c1452b04bdd1c318 -Block 0031 [ 88]: e20e6c50c7dd975a -Block 0031 [ 89]: 39c1a21562c5b7f3 -Block 0031 [ 90]: e6843aefccf4dfbc -Block 0031 [ 91]: 1aa4dfa03bc5a0e1 -Block 0031 [ 92]: 8922b48b6a4d7d7f -Block 0031 [ 93]: 9e574f8825317718 -Block 0031 [ 94]: dbcb8c6c40d31bda -Block 0031 [ 95]: 909c4929f0d98608 -Block 0031 [ 96]: f42329ae93383145 -Block 0031 [ 97]: 4677e44aa39abf60 -Block 0031 [ 98]: 9c9ffdbb0d6b608f -Block 0031 [ 99]: 108a41fe19860021 -Block 0031 [100]: 1a9bfb05d9e8ec88 -Block 0031 [101]: 1c4ad68f5d425047 -Block 0031 [102]: e7b1051a96ec60dd -Block 0031 [103]: fda74634f0acc4cf -Block 0031 [104]: fe56b2bcd5bdf3e7 -Block 0031 [105]: 5a1e699aecbc292d -Block 0031 [106]: bcceb2f10ab70062 -Block 0031 [107]: 2a800d4cbc728faa -Block 0031 [108]: c588289811f8e84a -Block 0031 [109]: ec40fab8651154f3 -Block 0031 [110]: 16b0936827dff2f4 -Block 0031 [111]: 26c7e63292ff15db -Block 0031 [112]: 93e056413e2e0b56 -Block 0031 [113]: 200d76516fd463c6 -Block 0031 [114]: 101af0e2b9f88293 -Block 0031 [115]: 48427c1c972109bd -Block 0031 [116]: 0c0c3a0ea1e847aa -Block 0031 [117]: d045ad28fceda383 -Block 0031 [118]: 54418ca0530783a4 -Block 0031 [119]: 11bcd435d2dcea04 -Block 0031 [120]: 0e7c42682b68b097 -Block 0031 [121]: 8a597b4d94ebef39 -Block 0031 [122]: e3cf70f8cc329f05 -Block 0031 [123]: a60a793d19a77883 -Block 0031 [124]: d723359b485f509b -Block 0031 [125]: cb78824f42375111 -Block 0031 [126]: 35bc8cc6e83b1875 -Block 0031 [127]: 0b012846a40f346a -Tag: 0d 64 0d f5 8d 78 76 6c 08 c0 37 a3 4a 8b 53 c9 d0 1e f0 45 2d 75 b6 5e b5 25 20 e9 6b 01 e6 59 diff --git a/pkg/urcrypt/argon2/kats/argon2id.shasum b/pkg/urcrypt/argon2/kats/argon2id.shasum deleted file mode 100644 index 54755af41..000000000 --- a/pkg/urcrypt/argon2/kats/argon2id.shasum +++ /dev/null @@ -1 +0,0 @@ -ba05643e504fc5778dda99e2d9f42ebe7d22ebb3923cc719fd591b1b14a8d28d argon2id diff --git a/pkg/urcrypt/argon2/kats/argon2id_v16 b/pkg/urcrypt/argon2/kats/argon2id_v16 deleted file mode 100644 index 05ea2b315..000000000 --- a/pkg/urcrypt/argon2/kats/argon2id_v16 +++ /dev/null @@ -1,12304 +0,0 @@ -======================================= -Argon2id version number 16 -======================================= -Memory: 32 KiB, Iterations: 3, Parallelism: 4 lanes, Tag length: 32 bytes -Password[32]: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 -Salt[16]: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 -Secret[8]: 03 03 03 03 03 03 03 03 -Associated data[12]: 04 04 04 04 04 04 04 04 04 04 04 04 -Pre-hashing digest: 70 65 ab 9c 82 b5 f0 e8 71 28 c7 84 7a 02 1d 1e 59 aa 16 66 6f c8 b4 ef ac a3 86 3f bf d6 5e 0e 8b a6 f6 09 eb bc 9b 60 e2 78 22 c8 24 b7 50 6f b9 f9 5b e9 0e e5 84 2a ac 6e d6 b7 da 67 30 44 - - After pass 0: -Block 0000 [ 0]: b7bb842644fb909e -Block 0000 [ 1]: 92e351e160803c45 -Block 0000 [ 2]: a9c24b300afd7b10 -Block 0000 [ 3]: 182cf4233ee44cab -Block 0000 [ 4]: 7a683cbc2906379b -Block 0000 [ 5]: 137aafb620c6c117 -Block 0000 [ 6]: dd9b43b0486b7c7d -Block 0000 [ 7]: 92e2f6c74a74a3e1 -Block 0000 [ 8]: aff35a4302c3fa3b -Block 0000 [ 9]: d76b047857f6f390 -Block 0000 [ 10]: 564f0363488ee83d -Block 0000 [ 11]: ec358c2dfd0bd18a -Block 0000 [ 12]: 42257160ad69eb83 -Block 0000 [ 13]: 147a568114a9c596 -Block 0000 [ 14]: d5db25b5740efc84 -Block 0000 [ 15]: ab0eb206883645d3 -Block 0000 [ 16]: 6e64467db82d4fb5 -Block 0000 [ 17]: 651ed1e53f297dc8 -Block 0000 [ 18]: 9ccbad51593abaf5 -Block 0000 [ 19]: 01b5546e1177ee58 -Block 0000 [ 20]: 3d26eaa9524ea4cd -Block 0000 [ 21]: a722e88f9651424c -Block 0000 [ 22]: be078be7e13a8978 -Block 0000 [ 23]: 23be5ef0c66109a4 -Block 0000 [ 24]: eec08b3431a67aac -Block 0000 [ 25]: 20b7e59878714c02 -Block 0000 [ 26]: 7b508a53c69a8118 -Block 0000 [ 27]: f2dd15049b78f666 -Block 0000 [ 28]: 5ab1d2113edc5ccb -Block 0000 [ 29]: 6e7aeeabf3241f19 -Block 0000 [ 30]: 64d84116592594e5 -Block 0000 [ 31]: 44cd928f35735d7b -Block 0000 [ 32]: 80c1c80000870823 -Block 0000 [ 33]: 86971eb2fd4f3ea1 -Block 0000 [ 34]: ebe240672e818b64 -Block 0000 [ 35]: cc50a5172a798ec1 -Block 0000 [ 36]: e214795d6bdfae01 -Block 0000 [ 37]: 34dbbd4f0ce743bf -Block 0000 [ 38]: 5f6d7fc0d14a42ee -Block 0000 [ 39]: 6c27bde0a4ad06fe -Block 0000 [ 40]: a225c3d053439aaf -Block 0000 [ 41]: 0611f32af47fd4ce -Block 0000 [ 42]: d36dd06bd1c0e42a -Block 0000 [ 43]: 53e31d06d89c4a89 -Block 0000 [ 44]: 4277658b3a5f2d44 -Block 0000 [ 45]: 5fa68495fa98f654 -Block 0000 [ 46]: 8cd4c77eb8f00cbd -Block 0000 [ 47]: 4e27f32130c34f99 -Block 0000 [ 48]: 4ffe69553622b576 -Block 0000 [ 49]: 0d3d7cfe462e2320 -Block 0000 [ 50]: b49324bce6b5ad1d -Block 0000 [ 51]: 260756703f023635 -Block 0000 [ 52]: 075d11855cd036ee -Block 0000 [ 53]: 091d19705c2756c7 -Block 0000 [ 54]: a19671b274bba372 -Block 0000 [ 55]: fc31225731e966d1 -Block 0000 [ 56]: 0a815245c504bc91 -Block 0000 [ 57]: 28f97817e690971c -Block 0000 [ 58]: 1f0ec3c0944cbfb8 -Block 0000 [ 59]: c962eee584d3c73b -Block 0000 [ 60]: 67f9d5c835378007 -Block 0000 [ 61]: 009b9cb5bea18286 -Block 0000 [ 62]: 32030ee639fbc966 -Block 0000 [ 63]: 97e2f25a2a1f20d2 -Block 0000 [ 64]: 6f1d7029455bcd55 -Block 0000 [ 65]: fd9a2926cf439cc5 -Block 0000 [ 66]: d1dbc75a7185af29 -Block 0000 [ 67]: 7fa8a98ec6a29827 -Block 0000 [ 68]: a3866a840b3965a4 -Block 0000 [ 69]: 29fca433e0e6ef44 -Block 0000 [ 70]: a593ade0db8f7ec9 -Block 0000 [ 71]: 2adaac3102271ace -Block 0000 [ 72]: fce7ff27e5e58473 -Block 0000 [ 73]: bf8142dd4ecbcb09 -Block 0000 [ 74]: fedc7c9f228859f6 -Block 0000 [ 75]: 0aabb19220a4f3ad -Block 0000 [ 76]: 22fc0ef92d52ce3c -Block 0000 [ 77]: 2f6f3cbca11dd133 -Block 0000 [ 78]: dbeab62bcbdcdadd -Block 0000 [ 79]: 3a3b61f68b3ce981 -Block 0000 [ 80]: 8d282775d4af2f1d -Block 0000 [ 81]: e059e025f4bb11b6 -Block 0000 [ 82]: b459e07a4d1332cf -Block 0000 [ 83]: ff670c951d4088ef -Block 0000 [ 84]: 5f02a137760cd098 -Block 0000 [ 85]: 028d44dfbfcbf8d5 -Block 0000 [ 86]: 87c733e1437000d9 -Block 0000 [ 87]: bd10e034a941e140 -Block 0000 [ 88]: d6720d6b9fc190f5 -Block 0000 [ 89]: acc2a8fba56df010 -Block 0000 [ 90]: a4d4ed3a2e2c9756 -Block 0000 [ 91]: 61c59c4afe1108e8 -Block 0000 [ 92]: 835bded44ae46619 -Block 0000 [ 93]: 7604a9417fbcb100 -Block 0000 [ 94]: 7b6b82b2b4d5bd03 -Block 0000 [ 95]: d5d332c71a0796a4 -Block 0000 [ 96]: 6ea1beba2fc89505 -Block 0000 [ 97]: bc9a6d44b6fb35d5 -Block 0000 [ 98]: ef5f34e62a190c89 -Block 0000 [ 99]: 9225f838b53a9ff5 -Block 0000 [100]: 32cf867e4da92862 -Block 0000 [101]: 2d44b91e42b6f427 -Block 0000 [102]: b440105f96b5aa28 -Block 0000 [103]: 6dc7ad77ea4436d8 -Block 0000 [104]: 66b875b7fe6a9311 -Block 0000 [105]: 9e2fab0c24b0d64f -Block 0000 [106]: 0b1dd725737b7f3b -Block 0000 [107]: 94ef03eb08cc55ef -Block 0000 [108]: 1ed223c9a1336e80 -Block 0000 [109]: 2cf999095e0d6221 -Block 0000 [110]: 39013cd6edf14711 -Block 0000 [111]: 904707a0a83add60 -Block 0000 [112]: e7033770da7cc6b9 -Block 0000 [113]: fb8b1159e1f3f8a1 -Block 0000 [114]: 92193aa808ad5cce -Block 0000 [115]: 867817b80eecfae7 -Block 0000 [116]: c5e66800c996653e -Block 0000 [117]: 58af09ad292272a7 -Block 0000 [118]: 04a55bd2fbc01564 -Block 0000 [119]: a311c88b41d523a9 -Block 0000 [120]: 2b9a9aff6bf7709d -Block 0000 [121]: 31e30127149627d8 -Block 0000 [122]: 5740a54a7b639f73 -Block 0000 [123]: 9703586c49fb0606 -Block 0000 [124]: 70390e67afe1b8dc -Block 0000 [125]: 0f325c6d3360d2f2 -Block 0000 [126]: e6a8d366efa0e311 -Block 0000 [127]: 991d1c2356575c44 -Block 0001 [ 0]: 4989449a68e198d1 -Block 0001 [ 1]: aac7c71d1ea9fb8a -Block 0001 [ 2]: bffe61b60a3415e7 -Block 0001 [ 3]: 22ace2760745f322 -Block 0001 [ 4]: 98e9bdf579ce947d -Block 0001 [ 5]: 579ac1aa9816b6b7 -Block 0001 [ 6]: facaffddebb6af72 -Block 0001 [ 7]: 32e2f6d192fb854c -Block 0001 [ 8]: af32a447f0be2e29 -Block 0001 [ 9]: a1814c09ff4f0884 -Block 0001 [ 10]: f8e4fe08bf29e1cb -Block 0001 [ 11]: 031661363b5d1c11 -Block 0001 [ 12]: 30ffeecd88ae1eba -Block 0001 [ 13]: bdf0af5a211ac806 -Block 0001 [ 14]: 768dc6f50b127a9f -Block 0001 [ 15]: 542257ab5e538f55 -Block 0001 [ 16]: 6732a2223c18f7fa -Block 0001 [ 17]: 55a9d185f27f23dc -Block 0001 [ 18]: 7183c9cd634bba75 -Block 0001 [ 19]: 8a19eea90e714ab9 -Block 0001 [ 20]: ae1bb8c05dd6f11a -Block 0001 [ 21]: 5fa3d9764c1ddaec -Block 0001 [ 22]: 6e6e2e5aab3ccf55 -Block 0001 [ 23]: cb837d78aa562983 -Block 0001 [ 24]: a04bb4ec37dc3d98 -Block 0001 [ 25]: cc1aee40aaeca6f3 -Block 0001 [ 26]: 894e1a07105ae34d -Block 0001 [ 27]: 095f5f736684f22e -Block 0001 [ 28]: b61b098dec5b1bcb -Block 0001 [ 29]: 2f6f0a7aac3e7d7d -Block 0001 [ 30]: 7cca77be88fb9ac8 -Block 0001 [ 31]: 4ed7ac1f943ba626 -Block 0001 [ 32]: 99b65c01eff31eae -Block 0001 [ 33]: b6318dcbde5ff590 -Block 0001 [ 34]: 8b796acde72309e5 -Block 0001 [ 35]: 499cf47baeadf720 -Block 0001 [ 36]: a32218dbd7d5adcc -Block 0001 [ 37]: 7949d40904da59ce -Block 0001 [ 38]: 09661301016e59ab -Block 0001 [ 39]: 70f26a07ffdb712e -Block 0001 [ 40]: e6c82c6406165b80 -Block 0001 [ 41]: 814e816ac9f9a2b4 -Block 0001 [ 42]: 496d86e303148ed4 -Block 0001 [ 43]: d1e4bbdbfa7d3a5e -Block 0001 [ 44]: 47b20d59c80de303 -Block 0001 [ 45]: cedbb73656945872 -Block 0001 [ 46]: 51008402396799b4 -Block 0001 [ 47]: c6b40630f55c127d -Block 0001 [ 48]: f5c33a25f18f5414 -Block 0001 [ 49]: 9c5e5cbcea9ea36e -Block 0001 [ 50]: 91b8dde2229043c6 -Block 0001 [ 51]: 09a3758ac8c98c10 -Block 0001 [ 52]: cb01be64d49c0ae9 -Block 0001 [ 53]: 35d0314dcd303998 -Block 0001 [ 54]: ebe659e766b0e53c -Block 0001 [ 55]: 7072ca398c13bc0f -Block 0001 [ 56]: 9bcafff66942d0b0 -Block 0001 [ 57]: 08817355cd91cbed -Block 0001 [ 58]: 899593aaf6da849c -Block 0001 [ 59]: 4030562b4eed8597 -Block 0001 [ 60]: 1484266e897f6914 -Block 0001 [ 61]: 16fd5ec0071832cf -Block 0001 [ 62]: 4ed582a91d56f940 -Block 0001 [ 63]: 36abb39293cf4bf0 -Block 0001 [ 64]: 5d7484473e5d8a04 -Block 0001 [ 65]: bbcf74106083eba3 -Block 0001 [ 66]: 560b914df76246d9 -Block 0001 [ 67]: af464c1fea2ca5ca -Block 0001 [ 68]: 216867dc0b9b7c90 -Block 0001 [ 69]: 96d67e8f0f693365 -Block 0001 [ 70]: 2739b94e414cdafc -Block 0001 [ 71]: c6b8dc19ead4928c -Block 0001 [ 72]: 7a9fe9cbc3f72e77 -Block 0001 [ 73]: c827d1f0528a71bd -Block 0001 [ 74]: fdc8d9d91b2e451e -Block 0001 [ 75]: 4766a4895d720dad -Block 0001 [ 76]: 906df9428d4b5a64 -Block 0001 [ 77]: 8f66bb2ff99ab56c -Block 0001 [ 78]: b24995e98def0601 -Block 0001 [ 79]: 23f1c3730a825da3 -Block 0001 [ 80]: 0e10371ce089e1a0 -Block 0001 [ 81]: 02819025568c858f -Block 0001 [ 82]: 83b7d7de6bc785f9 -Block 0001 [ 83]: 53dfc6036dc2e85f -Block 0001 [ 84]: 376a29d0e3df59fd -Block 0001 [ 85]: d2e0a4b79b2f8da0 -Block 0001 [ 86]: f628d7114cc3c0a2 -Block 0001 [ 87]: 488c816bb711e8c8 -Block 0001 [ 88]: ab068042a90b22e1 -Block 0001 [ 89]: cceebdeec3145b3d -Block 0001 [ 90]: e21c35cefde7c532 -Block 0001 [ 91]: e14779df3245336c -Block 0001 [ 92]: c03a6a5512faec48 -Block 0001 [ 93]: ba1076e5b5741fe7 -Block 0001 [ 94]: 0f9f26e7faba7e68 -Block 0001 [ 95]: 0e3aa048e46652ee -Block 0001 [ 96]: 2c2bfe5250cd7d69 -Block 0001 [ 97]: da2d90c03212c196 -Block 0001 [ 98]: ef221053390bf8f5 -Block 0001 [ 99]: bbee8da4bd00eb83 -Block 0001 [100]: 72988cedc04a7404 -Block 0001 [101]: bf9247326f867410 -Block 0001 [102]: 69bc52fe67110ad1 -Block 0001 [103]: 0a0139a6c2871ef2 -Block 0001 [104]: bf19681a29325ec9 -Block 0001 [105]: d2ed912dd05cf74d -Block 0001 [106]: 971c8d36dc2cb154 -Block 0001 [107]: 4b3b44a4b160b82c -Block 0001 [108]: 511a2c743551fb28 -Block 0001 [109]: 4b653e1a1439f5f6 -Block 0001 [110]: ce08f68913b83d02 -Block 0001 [111]: eb214b52ece94ac3 -Block 0001 [112]: 8e11f305344a105f -Block 0001 [113]: 39246a558de64f47 -Block 0001 [114]: 950849228224ea14 -Block 0001 [115]: 07bc212b67e22525 -Block 0001 [116]: b1e0e7c9963f2a2f -Block 0001 [117]: 116bc563c9208ff8 -Block 0001 [118]: 6565ad2b648c3a7c -Block 0001 [119]: 6f09b6666053c99b -Block 0001 [120]: 62f49638f17f3b56 -Block 0001 [121]: ec838fec0902fff1 -Block 0001 [122]: 46ed99217ecbaa8d -Block 0001 [123]: 9edebaa010e017da -Block 0001 [124]: 139a0bef21d0f3aa -Block 0001 [125]: 1ef7b4576ff34afe -Block 0001 [126]: 3a4464ac6e7f071a -Block 0001 [127]: 30171c4c18317182 -Block 0002 [ 0]: 24c21ae335819e56 -Block 0002 [ 1]: 601d30c94d2e382a -Block 0002 [ 2]: e5412235e4a6c8ec -Block 0002 [ 3]: dd62751df8e64482 -Block 0002 [ 4]: 10b820d4a82f6a30 -Block 0002 [ 5]: 7114921b2c7b4f68 -Block 0002 [ 6]: fd6d583479fe9e50 -Block 0002 [ 7]: 08dd2365f0ea39e5 -Block 0002 [ 8]: 0b47040470279f87 -Block 0002 [ 9]: 60c2e2004d640023 -Block 0002 [ 10]: a3f666b591d2d5cc -Block 0002 [ 11]: f599e8dae9cf4c17 -Block 0002 [ 12]: bb231e2ac9813744 -Block 0002 [ 13]: efa35e61e2d89b82 -Block 0002 [ 14]: 9f8b8c91cee90678 -Block 0002 [ 15]: 28830b6c98df40f4 -Block 0002 [ 16]: 77612a6d00de8081 -Block 0002 [ 17]: efe02ae6acb10b34 -Block 0002 [ 18]: 6b4f29bebacd7be1 -Block 0002 [ 19]: 158325aff1916099 -Block 0002 [ 20]: 56f939cf16094218 -Block 0002 [ 21]: 7a4f363b4a6b2b34 -Block 0002 [ 22]: f3549b12cf9766d7 -Block 0002 [ 23]: 47ff03692dd05813 -Block 0002 [ 24]: 67ed1e764a840d37 -Block 0002 [ 25]: c0246ce5119f7ddc -Block 0002 [ 26]: 368ce2d96d5aec4b -Block 0002 [ 27]: 1c54267ac4f601ba -Block 0002 [ 28]: a3f06cfd58dbb222 -Block 0002 [ 29]: 577e96a10fe791c7 -Block 0002 [ 30]: d2dcf043c789b0c6 -Block 0002 [ 31]: ccb46504b140cf69 -Block 0002 [ 32]: 299bbf17b285382f -Block 0002 [ 33]: bb0227b4333e65f6 -Block 0002 [ 34]: 0a70c61fdc8038bc -Block 0002 [ 35]: 76c1158a301e3f46 -Block 0002 [ 36]: 89dfb9dad24976c8 -Block 0002 [ 37]: b44434f360e7d14a -Block 0002 [ 38]: d770b3764a8feaa8 -Block 0002 [ 39]: 76f949e55d5a89cd -Block 0002 [ 40]: 1c36e36f410b1630 -Block 0002 [ 41]: f28727a81f389b82 -Block 0002 [ 42]: 910014a75422a2c8 -Block 0002 [ 43]: 707a170ed1cca0b8 -Block 0002 [ 44]: dc2a3f8429661e83 -Block 0002 [ 45]: 115acbc62e271ece -Block 0002 [ 46]: 8cf57a93bb3461df -Block 0002 [ 47]: ee2c1130ccdb726b -Block 0002 [ 48]: cb7ddc22591e441b -Block 0002 [ 49]: 474d91327a32a5cc -Block 0002 [ 50]: 7daed6758b6a410a -Block 0002 [ 51]: c53600dea10f0106 -Block 0002 [ 52]: c2c3f543492143f2 -Block 0002 [ 53]: 50dbd7c5f7c49d67 -Block 0002 [ 54]: 19e198b23b48f41a -Block 0002 [ 55]: 721a24a2f1a040af -Block 0002 [ 56]: 87a1f26f63415ae7 -Block 0002 [ 57]: 1fe92d42e285a0d0 -Block 0002 [ 58]: bdff0f31c7ac33ae -Block 0002 [ 59]: 34818607ca6bf098 -Block 0002 [ 60]: 246e9c6d966abab4 -Block 0002 [ 61]: 00df3f61d9d1c40e -Block 0002 [ 62]: dcdbf723ef8f59bb -Block 0002 [ 63]: 4ba7740f25cb55cf -Block 0002 [ 64]: 36979f0554bed212 -Block 0002 [ 65]: 68f80c30266ec1bf -Block 0002 [ 66]: 267c7fde426025be -Block 0002 [ 67]: ba8045963d719af1 -Block 0002 [ 68]: 38bbbccf8baaeb66 -Block 0002 [ 69]: 3065e858181b0fb8 -Block 0002 [ 70]: 6baa55f49cb0568d -Block 0002 [ 71]: 9ebcbac2f77f5358 -Block 0002 [ 72]: 077fcaab8f11c30b -Block 0002 [ 73]: c704229ec6fec90b -Block 0002 [ 74]: 55f41bb14942a8a0 -Block 0002 [ 75]: 897d3baedb5ed2b5 -Block 0002 [ 76]: 49f246b7168f9dc8 -Block 0002 [ 77]: 8c96ba1b9b4c41a2 -Block 0002 [ 78]: 41bdc5587984225c -Block 0002 [ 79]: 61e336c165a40f81 -Block 0002 [ 80]: bdea7a574e497f98 -Block 0002 [ 81]: 19f5f36af4648b25 -Block 0002 [ 82]: 8f6875a054a82387 -Block 0002 [ 83]: ed5168ce782b0640 -Block 0002 [ 84]: 45b8c6e6e2e76f7d -Block 0002 [ 85]: c1f52f9df2eca9c8 -Block 0002 [ 86]: 02267b3230f0aaab -Block 0002 [ 87]: c69417603e967088 -Block 0002 [ 88]: 99a511f031fa15d3 -Block 0002 [ 89]: 6db8d498977fc845 -Block 0002 [ 90]: ee30da815f04b60f -Block 0002 [ 91]: 1e084eb4933d7b77 -Block 0002 [ 92]: 293593e3c2716d5e -Block 0002 [ 93]: f8c1a970668fddfd -Block 0002 [ 94]: 3521b3d01777ed06 -Block 0002 [ 95]: f052856c2f8802b2 -Block 0002 [ 96]: 4f8f389ab16c382d -Block 0002 [ 97]: 562718613169889c -Block 0002 [ 98]: ffde08ea100c3153 -Block 0002 [ 99]: 611599a690a3277b -Block 0002 [100]: 552079197b4336f5 -Block 0002 [101]: da82d17e1de8c79c -Block 0002 [102]: 4115b237c53c1f83 -Block 0002 [103]: d708eb0e30b42883 -Block 0002 [104]: b0b18a3eea85d88e -Block 0002 [105]: 43ec3c16b2adc1c2 -Block 0002 [106]: 6de6378febe403ec -Block 0002 [107]: 555c763388342eb2 -Block 0002 [108]: 7a41c6af4cb6b129 -Block 0002 [109]: 8927fff2d7af49c3 -Block 0002 [110]: 047412244022377f -Block 0002 [111]: c009518d28032a28 -Block 0002 [112]: df79a603af8c3c94 -Block 0002 [113]: 1347dab66dadd37a -Block 0002 [114]: 5db0afec1448b60e -Block 0002 [115]: bf5528101823da52 -Block 0002 [116]: e12eae4521d48cdc -Block 0002 [117]: 34375ad9b2971a0c -Block 0002 [118]: f48f86a00ace3b40 -Block 0002 [119]: 370b5bfab63d4f28 -Block 0002 [120]: efce287ee0351954 -Block 0002 [121]: 044a9c406b2bb32b -Block 0002 [122]: ed4e010c9b545cd5 -Block 0002 [123]: 9b396320258b99c7 -Block 0002 [124]: e21cdcb067b0d15a -Block 0002 [125]: 30377005aba2b601 -Block 0002 [126]: fa5dc1b9e10ff4d8 -Block 0002 [127]: de315986d0882d3a -Block 0003 [ 0]: 3a621db3273f359a -Block 0003 [ 1]: 4047196c41f1524b -Block 0003 [ 2]: fa2688b40792a1f9 -Block 0003 [ 3]: 3154d37f7c22c796 -Block 0003 [ 4]: 45ca5d1e973b4a0a -Block 0003 [ 5]: 3d2ee4ccd078c494 -Block 0003 [ 6]: 582c73563edbc927 -Block 0003 [ 7]: 3cc861617fad4a2e -Block 0003 [ 8]: 3cdfd91759faf401 -Block 0003 [ 9]: e78963e4abc16439 -Block 0003 [ 10]: 62bd98693f37e328 -Block 0003 [ 11]: cb080db0922c5f84 -Block 0003 [ 12]: 53af8fec0501215a -Block 0003 [ 13]: 9c3880f8091d0f71 -Block 0003 [ 14]: c91b6905e177bb6d -Block 0003 [ 15]: c360a6d7a963824e -Block 0003 [ 16]: 3e0d3af059637a63 -Block 0003 [ 17]: 249895f95d98a0d4 -Block 0003 [ 18]: 348907f710637f06 -Block 0003 [ 19]: ed70cec52cb8c4c4 -Block 0003 [ 20]: 6b26125834bf9762 -Block 0003 [ 21]: c510d89c728f8e15 -Block 0003 [ 22]: 4fee6316b7220507 -Block 0003 [ 23]: 873169071c7554b2 -Block 0003 [ 24]: f0c6b431aea72a4e -Block 0003 [ 25]: 2d43d09e4bffa899 -Block 0003 [ 26]: 7e57d491232aa95b -Block 0003 [ 27]: 8ad078fecf493153 -Block 0003 [ 28]: 6044c0465cf0f980 -Block 0003 [ 29]: 8b593cf1a747c5a4 -Block 0003 [ 30]: ee73b6e055d1ef6e -Block 0003 [ 31]: 8e33bbd1d69b8fa2 -Block 0003 [ 32]: 8fc4730708924366 -Block 0003 [ 33]: 36ee3e79986b1ef9 -Block 0003 [ 34]: 4c230230865b00f0 -Block 0003 [ 35]: fb9cf11da328be01 -Block 0003 [ 36]: 61d1df1a2c5cc787 -Block 0003 [ 37]: 82a0892fe171649e -Block 0003 [ 38]: 2436e9c8cc05b23e -Block 0003 [ 39]: f5f386f91bd7ee43 -Block 0003 [ 40]: b9bb843e5edc7f18 -Block 0003 [ 41]: 746c6f332e610545 -Block 0003 [ 42]: 1417f4efb16df4dc -Block 0003 [ 43]: 3388a6155da804e4 -Block 0003 [ 44]: d15ea1b0c45a05e3 -Block 0003 [ 45]: 761b17ebf05a866d -Block 0003 [ 46]: 9eb91984c3894226 -Block 0003 [ 47]: d23e58b95ff8c101 -Block 0003 [ 48]: 0011ab7a454d971f -Block 0003 [ 49]: a8887ef7321ee7fd -Block 0003 [ 50]: 6840484cfa171c0e -Block 0003 [ 51]: 24a6a3a8e9bc9e74 -Block 0003 [ 52]: b4589a254e2ac698 -Block 0003 [ 53]: 60284a0ed564491b -Block 0003 [ 54]: 6bf793dac7365ff0 -Block 0003 [ 55]: 55a84bfa60e541e5 -Block 0003 [ 56]: fc4931e0181bb6bd -Block 0003 [ 57]: 80989348d3e35790 -Block 0003 [ 58]: 2360aff3fe62e608 -Block 0003 [ 59]: bef9c4109d0b6bd7 -Block 0003 [ 60]: 7cbfc6aaef0fe537 -Block 0003 [ 61]: 74d89e72401f06ba -Block 0003 [ 62]: 82724458b4f710ea -Block 0003 [ 63]: e6153debefc9115d -Block 0003 [ 64]: bb00e792996e8e34 -Block 0003 [ 65]: 000f4177bff067dd -Block 0003 [ 66]: 715a9c5f425b7e42 -Block 0003 [ 67]: cb03ec5a383cf32e -Block 0003 [ 68]: f95a8953f7c868df -Block 0003 [ 69]: 63380b9e43cc443b -Block 0003 [ 70]: 6221768cf16abbce -Block 0003 [ 71]: d5dd916210f3923c -Block 0003 [ 72]: 8656553bbae2f7ce -Block 0003 [ 73]: b8604a325957eca7 -Block 0003 [ 74]: 9a33dbdce26ac7b1 -Block 0003 [ 75]: b41660e1a955da10 -Block 0003 [ 76]: 6f0ade62f0f845f2 -Block 0003 [ 77]: 2386c997551e5c5d -Block 0003 [ 78]: c6438a3931843bb5 -Block 0003 [ 79]: 0085de6ae7761d5e -Block 0003 [ 80]: a78c57d5fb2e7a91 -Block 0003 [ 81]: 7b4978bb4bb67319 -Block 0003 [ 82]: 3e8ca77fae7674dd -Block 0003 [ 83]: b26cfd2ffc983aaf -Block 0003 [ 84]: 6484e38c994fbd3b -Block 0003 [ 85]: 605770b4251f184b -Block 0003 [ 86]: e57180c11d5c30be -Block 0003 [ 87]: 011f2cc3f5bbbd2e -Block 0003 [ 88]: a640d723650e4980 -Block 0003 [ 89]: 288cf3cc99b8dccb -Block 0003 [ 90]: 31cef0a30021cc02 -Block 0003 [ 91]: 798234c5e2b7b865 -Block 0003 [ 92]: ac978dae820ea3d2 -Block 0003 [ 93]: 3af8966c1a02e6e6 -Block 0003 [ 94]: 9ccacba3bb710f28 -Block 0003 [ 95]: 62cb957608e3675a -Block 0003 [ 96]: a6446ccd9f64cfaf -Block 0003 [ 97]: 678d6a43ec4a5dab -Block 0003 [ 98]: 11bbf8c5b3fec1a6 -Block 0003 [ 99]: d51b0480b7c23f63 -Block 0003 [100]: 248f7cf55bf3871b -Block 0003 [101]: d2b6d85f3ae823cd -Block 0003 [102]: c64d167b352c09d4 -Block 0003 [103]: 0d55701832cb81f9 -Block 0003 [104]: 7227e11818addfd4 -Block 0003 [105]: 3078f8d1789c36dd -Block 0003 [106]: ad6f540f4e7db26f -Block 0003 [107]: baae6f778b35844d -Block 0003 [108]: b3b72e41abb9bd23 -Block 0003 [109]: b71d94a62dff1edb -Block 0003 [110]: 7a7ff9eaa271ddd0 -Block 0003 [111]: f826f99201bef179 -Block 0003 [112]: f9b09d1af4b07f1d -Block 0003 [113]: caeb03e5651d778c -Block 0003 [114]: 61d2f77e5ae93537 -Block 0003 [115]: 50786f03f2ecb739 -Block 0003 [116]: d975d339277d68c4 -Block 0003 [117]: 20e243be79a74394 -Block 0003 [118]: 514b73cdf5af9ccb -Block 0003 [119]: 72afe6bf8cbcfe05 -Block 0003 [120]: 06cbfcd153da2144 -Block 0003 [121]: 2d8c338bca6ab827 -Block 0003 [122]: ded3d3e9e3570eff -Block 0003 [123]: 95c1b00841b97c6c -Block 0003 [124]: bba5191e9b0d02d1 -Block 0003 [125]: ba4cc2f9551a2a3b -Block 0003 [126]: 635acd7e64497561 -Block 0003 [127]: aa10e683c112f660 -Block 0004 [ 0]: ee25b842dd1028d0 -Block 0004 [ 1]: 2ed715595f506b40 -Block 0004 [ 2]: 947fac8e22ca7f24 -Block 0004 [ 3]: 09ab93ff09e5e62e -Block 0004 [ 4]: a14d8c61a2f55832 -Block 0004 [ 5]: ce88af1e27d4ca5f -Block 0004 [ 6]: 8e3f281228c34fcc -Block 0004 [ 7]: 4f2f6319e15de25a -Block 0004 [ 8]: 86d2f5b3ce0497e3 -Block 0004 [ 9]: 4721f61cb78a1095 -Block 0004 [ 10]: c30f671aaa85b620 -Block 0004 [ 11]: 95f215c9b0aae3ab -Block 0004 [ 12]: 432f59b01fc61738 -Block 0004 [ 13]: e823ad7b415f84e6 -Block 0004 [ 14]: 7d6a9539afd8ef81 -Block 0004 [ 15]: 1057b188ac56165e -Block 0004 [ 16]: 60ccf5b1bc26c7be -Block 0004 [ 17]: 4d5167cbea8b8396 -Block 0004 [ 18]: 22973aa3683a0f6d -Block 0004 [ 19]: a8174c08193c8958 -Block 0004 [ 20]: 86cf239cf1874206 -Block 0004 [ 21]: c3caa54bd46d745f -Block 0004 [ 22]: b4d09a1cce238f94 -Block 0004 [ 23]: 071d45abf0a9a213 -Block 0004 [ 24]: 30223c62e113cde1 -Block 0004 [ 25]: e189297945a1827b -Block 0004 [ 26]: 0f7aa0e721ac38ef -Block 0004 [ 27]: 988d5d24022c4815 -Block 0004 [ 28]: 37c3795c3f8b89ef -Block 0004 [ 29]: 5a04aeda9f3bb282 -Block 0004 [ 30]: 3fe3a1c2dc39757c -Block 0004 [ 31]: f6bc623989c520e7 -Block 0004 [ 32]: 75c7ecc00cdf5fa6 -Block 0004 [ 33]: 3eea4e42b17c6ca9 -Block 0004 [ 34]: e8f5859c23a09def -Block 0004 [ 35]: 3aa61eb3e0026c4c -Block 0004 [ 36]: bd28de51a7d8f724 -Block 0004 [ 37]: b033d2aa2f841ef5 -Block 0004 [ 38]: 3200146d502d3e9d -Block 0004 [ 39]: de45254e8a677f08 -Block 0004 [ 40]: 5166cbf9383d36ad -Block 0004 [ 41]: fc6d0d8ad27c2730 -Block 0004 [ 42]: f777750b38d200c7 -Block 0004 [ 43]: e36447ba9506c06a -Block 0004 [ 44]: c59c6174109c5d14 -Block 0004 [ 45]: 029d17478e2ac687 -Block 0004 [ 46]: 47e20f6875c23553 -Block 0004 [ 47]: 7d21abcc6ef487a7 -Block 0004 [ 48]: 1cc21cead2b0900d -Block 0004 [ 49]: 521067f187e0f84f -Block 0004 [ 50]: 12f4f40b0988bce9 -Block 0004 [ 51]: 93ada3888ff5d5be -Block 0004 [ 52]: 6b06ff16afa7880b -Block 0004 [ 53]: 7e25b21e917fe499 -Block 0004 [ 54]: 4723a49985b8bfd2 -Block 0004 [ 55]: b5af89f623fb6ef4 -Block 0004 [ 56]: 4c3cb4cc19ab2299 -Block 0004 [ 57]: 8c3343eb7237df51 -Block 0004 [ 58]: c73074b58962f9a1 -Block 0004 [ 59]: 2391b6786e026957 -Block 0004 [ 60]: b65e63b2a65058ad -Block 0004 [ 61]: 9ceb8f638fad4c04 -Block 0004 [ 62]: 440c10dc66a7d19b -Block 0004 [ 63]: 8869ce3907567f9d -Block 0004 [ 64]: ef88a87436c5471b -Block 0004 [ 65]: 17c0a7d91fe78c12 -Block 0004 [ 66]: 417925054fa70397 -Block 0004 [ 67]: 8227d9460cafec86 -Block 0004 [ 68]: e459824688b10895 -Block 0004 [ 69]: e1e7b4f26aedffd1 -Block 0004 [ 70]: 6a26857c2a751c4c -Block 0004 [ 71]: fa532c478e7109fb -Block 0004 [ 72]: eaa69731f00e3797 -Block 0004 [ 73]: ede32dada031de42 -Block 0004 [ 74]: 7e078ac0aa12e932 -Block 0004 [ 75]: 5ebd149479dd59d6 -Block 0004 [ 76]: b4abda1136d84a77 -Block 0004 [ 77]: 19309276689f520a -Block 0004 [ 78]: 1151e9ff304bd0c2 -Block 0004 [ 79]: 09013f55742b99e9 -Block 0004 [ 80]: 70ccb323acdc21f8 -Block 0004 [ 81]: 47e6e19c7f159c79 -Block 0004 [ 82]: 856125cbb7f1560a -Block 0004 [ 83]: 94d9e08696ce69bd -Block 0004 [ 84]: 3df82baf27432f08 -Block 0004 [ 85]: 040765d9c32066c7 -Block 0004 [ 86]: 6638d7601a10ad98 -Block 0004 [ 87]: 94806fe5c853291d -Block 0004 [ 88]: 29249caa73578203 -Block 0004 [ 89]: 33ded5cabacf4386 -Block 0004 [ 90]: a4541fbd8b572b8c -Block 0004 [ 91]: c0c35b42df4b4753 -Block 0004 [ 92]: bad2b200390209c0 -Block 0004 [ 93]: 02a30010cce3c7e6 -Block 0004 [ 94]: 6597c0199fab753b -Block 0004 [ 95]: e5a658e801d90560 -Block 0004 [ 96]: b6cf3d60fe336766 -Block 0004 [ 97]: 4c9d67ce99148e41 -Block 0004 [ 98]: 13c3de54535784be -Block 0004 [ 99]: b85504983a5b7eeb -Block 0004 [100]: 6fafec81d9c04432 -Block 0004 [101]: a98fecab58f016e9 -Block 0004 [102]: 5c02119bf6068de1 -Block 0004 [103]: 0a41f857c077ddf5 -Block 0004 [104]: 3d4616ba64b92389 -Block 0004 [105]: ecb0d2bbdf882091 -Block 0004 [106]: ba1839c9c25219b1 -Block 0004 [107]: 27f560c257eee4ac -Block 0004 [108]: 93419274e76aed92 -Block 0004 [109]: 22ebb8365e049b12 -Block 0004 [110]: 3cb9c4e2d09ce774 -Block 0004 [111]: 45d6d6270525382f -Block 0004 [112]: 45c94644cc18e44e -Block 0004 [113]: 4c0fa7900f09b1fb -Block 0004 [114]: 9625c4a32bad4cc6 -Block 0004 [115]: badc03a1437ac0b0 -Block 0004 [116]: ed0c7eff9275830b -Block 0004 [117]: 69df81fb157d1bcb -Block 0004 [118]: b8bf266ddade37ee -Block 0004 [119]: 7db1d92a4ad082c0 -Block 0004 [120]: cc023380f5dc9df6 -Block 0004 [121]: b882628f9e80fb8e -Block 0004 [122]: da2acdf9a6fceb5e -Block 0004 [123]: d94f7f3fd42195d8 -Block 0004 [124]: 220a0b123697729f -Block 0004 [125]: 341dfea1ad6775b6 -Block 0004 [126]: 8aa9b49d00a41903 -Block 0004 [127]: bf3069c13296c94d -Block 0005 [ 0]: 8391a22525ac3129 -Block 0005 [ 1]: 2182bd7744cc7dcd -Block 0005 [ 2]: f4ca6a851736d626 -Block 0005 [ 3]: 84dd65d9ab943166 -Block 0005 [ 4]: e8e94d6cad517204 -Block 0005 [ 5]: 47c6f8e3d4d65b1c -Block 0005 [ 6]: bcf41f0cd8b65235 -Block 0005 [ 7]: de9625fb97faf26e -Block 0005 [ 8]: 9fd27f84ef4d3f76 -Block 0005 [ 9]: 9b4a643a6ff1b646 -Block 0005 [ 10]: 16addf741451ddbc -Block 0005 [ 11]: f8d7025745a12b1d -Block 0005 [ 12]: 8f6d75b3b17b278d -Block 0005 [ 13]: a469173ba8a5a3a9 -Block 0005 [ 14]: 85cb66a59564b901 -Block 0005 [ 15]: db2396a9310fc6eb -Block 0005 [ 16]: 53f9ae5d6180de0c -Block 0005 [ 17]: 17cfe30a3b903a1b -Block 0005 [ 18]: bb7ee3aa20b8ecb1 -Block 0005 [ 19]: 9b195332c7aadcfb -Block 0005 [ 20]: 16ff8c53dd2b5a29 -Block 0005 [ 21]: 3960274b38939f87 -Block 0005 [ 22]: 0c8c0bdd86aec0f0 -Block 0005 [ 23]: 091dbf94b5caa021 -Block 0005 [ 24]: ea0513282b1c6255 -Block 0005 [ 25]: 09ac386212407947 -Block 0005 [ 26]: 49f2cae638f284bb -Block 0005 [ 27]: 952b85e4556639f9 -Block 0005 [ 28]: ead8b8898ad0008a -Block 0005 [ 29]: a417d718d505d3ef -Block 0005 [ 30]: c9c71e3b1bef1728 -Block 0005 [ 31]: 63ba210eaedb878f -Block 0005 [ 32]: dbb902a61a4a0d6f -Block 0005 [ 33]: 6b93ab239e25d3ad -Block 0005 [ 34]: b9129537cb026700 -Block 0005 [ 35]: bd91b9a32e77e588 -Block 0005 [ 36]: 02bc137c047026d8 -Block 0005 [ 37]: 5e45723770933ec3 -Block 0005 [ 38]: 62f2b3d63d5ee519 -Block 0005 [ 39]: 35ee95ac9c58ebb8 -Block 0005 [ 40]: ad5734706fca0a0e -Block 0005 [ 41]: b86bbbfc96117bec -Block 0005 [ 42]: 3bc87262733b7282 -Block 0005 [ 43]: 68ebc4cbeb9cec24 -Block 0005 [ 44]: 92ed87b13532d74f -Block 0005 [ 45]: 9a46327d7172032c -Block 0005 [ 46]: c7c96af35b519031 -Block 0005 [ 47]: af4f0c07f9b2189d -Block 0005 [ 48]: 62a0c50c5a81915c -Block 0005 [ 49]: c76619e60b2d6f57 -Block 0005 [ 50]: 8a408ebb2d8e6aa2 -Block 0005 [ 51]: 463dedfed695fb54 -Block 0005 [ 52]: 88ba683a691878c6 -Block 0005 [ 53]: fede06e5c3bba35d -Block 0005 [ 54]: 233bf8dd96537fcd -Block 0005 [ 55]: 206f746116d7f2fe -Block 0005 [ 56]: 5271fbcfcaaae79e -Block 0005 [ 57]: acd38e85d5866021 -Block 0005 [ 58]: f9288fc3bfac49e6 -Block 0005 [ 59]: 79152b6b2eba8650 -Block 0005 [ 60]: 59a68943df8275e3 -Block 0005 [ 61]: 353694a518fdc5f8 -Block 0005 [ 62]: f8f0c9633cdc7981 -Block 0005 [ 63]: fb863297e68449db -Block 0005 [ 64]: ed977fcc8d1753ee -Block 0005 [ 65]: 812a3620c5954450 -Block 0005 [ 66]: e0387dabb56ef298 -Block 0005 [ 67]: 8009724bfa5dc0a7 -Block 0005 [ 68]: eee72aba6a6981bd -Block 0005 [ 69]: d6c66556c7982a51 -Block 0005 [ 70]: 1dbeb7ef05b9af0a -Block 0005 [ 71]: 3ac6cb726b5c73a8 -Block 0005 [ 72]: 2fab5ab0cc5997cf -Block 0005 [ 73]: 01006d1c447bb1e4 -Block 0005 [ 74]: 9479fcd0179a3dda -Block 0005 [ 75]: e43035ac067168c9 -Block 0005 [ 76]: 0e85b3d737226573 -Block 0005 [ 77]: b837e5a0e5a53abd -Block 0005 [ 78]: fe771479539c1c89 -Block 0005 [ 79]: 4eddd82075211cf6 -Block 0005 [ 80]: 3c6bb423e7ae496e -Block 0005 [ 81]: 531fb5cf7a66ab9a -Block 0005 [ 82]: 7f0c1e54ce41f6a9 -Block 0005 [ 83]: e44c93d2903de35e -Block 0005 [ 84]: e283572bb36042c3 -Block 0005 [ 85]: 48e05314b53e3a1d -Block 0005 [ 86]: c70ae3facad90bd8 -Block 0005 [ 87]: f7eb9795516c8aea -Block 0005 [ 88]: a9d51ea53fb7924f -Block 0005 [ 89]: a57400f858ed1a7b -Block 0005 [ 90]: ae17e7e53c36bdfb -Block 0005 [ 91]: 2be1ebc515e4c8ac -Block 0005 [ 92]: c6a75341f60ffa74 -Block 0005 [ 93]: 7fc9ae81f5cc2d1e -Block 0005 [ 94]: a9649bda41f37a2e -Block 0005 [ 95]: 3064212b87faf4a0 -Block 0005 [ 96]: 36ed3a9ed060e28f -Block 0005 [ 97]: cc3270a31fe515ca -Block 0005 [ 98]: 007183ca10e9e347 -Block 0005 [ 99]: ebab95c5a38ca512 -Block 0005 [100]: 616f7791bf38526a -Block 0005 [101]: 09cd415bc99fe122 -Block 0005 [102]: 0d91db2b5019ab35 -Block 0005 [103]: 0af30e6c4d5df4fe -Block 0005 [104]: d70f046467e13eb1 -Block 0005 [105]: 400d8ffbaedafe7e -Block 0005 [106]: 1f1f784f3160475f -Block 0005 [107]: 06ab9a4525d06e64 -Block 0005 [108]: 94742662a6e3cf77 -Block 0005 [109]: fc8c036aae7ccdbc -Block 0005 [110]: b56943232f6f229f -Block 0005 [111]: 3097ca2857f1c581 -Block 0005 [112]: da13102ef8466c04 -Block 0005 [113]: 191606c8d1d9841b -Block 0005 [114]: da7eb6f5863dd3ec -Block 0005 [115]: 1c5b95b054389563 -Block 0005 [116]: 26e0c33221d98a92 -Block 0005 [117]: 89a4f59ce9c97e71 -Block 0005 [118]: b809de06baa73578 -Block 0005 [119]: 6928a344f6bdcb28 -Block 0005 [120]: f998ade4988f120a -Block 0005 [121]: 0a6a9628d3dc7d99 -Block 0005 [122]: db07326bfcb54303 -Block 0005 [123]: 90c6cc27b5a77e17 -Block 0005 [124]: a7681add7323eca3 -Block 0005 [125]: a51c7ba17966d7e5 -Block 0005 [126]: 14a6283d83fabc6d -Block 0005 [127]: 584b27da48ba5899 -Block 0006 [ 0]: 2a64800c5487eab2 -Block 0006 [ 1]: 0bbe7d78e8791b55 -Block 0006 [ 2]: e6a143d1ab8b7b33 -Block 0006 [ 3]: ce93fb3c45c7443e -Block 0006 [ 4]: 10bfc25e34411ee8 -Block 0006 [ 5]: 2d5786d8bf589d5d -Block 0006 [ 6]: 1f8aeedd5b310f90 -Block 0006 [ 7]: 9ddbae1650fd61cd -Block 0006 [ 8]: 2fcf25ecaa72b648 -Block 0006 [ 9]: 4605e3f83638bc92 -Block 0006 [ 10]: 63fc5a831158a3c8 -Block 0006 [ 11]: 9431f1ed7556ece6 -Block 0006 [ 12]: a90f7eaafbac597f -Block 0006 [ 13]: f419db68c98b63af -Block 0006 [ 14]: 16a63bda59843e82 -Block 0006 [ 15]: 4a81a3dc88c84a66 -Block 0006 [ 16]: 90218025c0709f55 -Block 0006 [ 17]: a3f055b0a64e7826 -Block 0006 [ 18]: 8a814617fed0de21 -Block 0006 [ 19]: b32bdca9f00f7ae9 -Block 0006 [ 20]: 95aa9d629f4ed584 -Block 0006 [ 21]: 975350c26848cc2a -Block 0006 [ 22]: 3466b4991d492d30 -Block 0006 [ 23]: b5a3be561cde3612 -Block 0006 [ 24]: 7756124275a76154 -Block 0006 [ 25]: 49fa854f823ba873 -Block 0006 [ 26]: 4a2e0caa9712712e -Block 0006 [ 27]: 4cc6115574357b8f -Block 0006 [ 28]: 726dd8a92ff4733c -Block 0006 [ 29]: 687da442592f16a0 -Block 0006 [ 30]: 465daa3b6227c2f0 -Block 0006 [ 31]: 70345f239134961f -Block 0006 [ 32]: 93e4d66cf4241219 -Block 0006 [ 33]: f5aa4517e4562711 -Block 0006 [ 34]: 4444b64467a42d3b -Block 0006 [ 35]: 60b1f0ee9c363d65 -Block 0006 [ 36]: 7fa2479e123a67bf -Block 0006 [ 37]: bdeccba4bd322330 -Block 0006 [ 38]: 9cddff99f7042194 -Block 0006 [ 39]: 1255bfb92429d58e -Block 0006 [ 40]: 973a6877ecba92e1 -Block 0006 [ 41]: d22760276a21f9e6 -Block 0006 [ 42]: e3cbb4fb39655c00 -Block 0006 [ 43]: 6e1d33fbaca85766 -Block 0006 [ 44]: 9a800276744f8d6a -Block 0006 [ 45]: 8d0438d86a3f81db -Block 0006 [ 46]: ccdf247b55ccbd75 -Block 0006 [ 47]: aad33246518c0867 -Block 0006 [ 48]: d973e214a5dc1cf0 -Block 0006 [ 49]: 2c91065b5ab54743 -Block 0006 [ 50]: 091087b3e2a08216 -Block 0006 [ 51]: 30791badfa9890a5 -Block 0006 [ 52]: 62313b92c720912d -Block 0006 [ 53]: 7088235adf696700 -Block 0006 [ 54]: 52f03c4478e57e2e -Block 0006 [ 55]: 674263a7cc168cd3 -Block 0006 [ 56]: 450cab3338ebcafe -Block 0006 [ 57]: 1c86fcc8b6e9d2e7 -Block 0006 [ 58]: 9a3a7830220d6438 -Block 0006 [ 59]: 549e8d6e9749ece1 -Block 0006 [ 60]: 88ea236eed27143e -Block 0006 [ 61]: 3c0655d2f401e316 -Block 0006 [ 62]: cbc8a061330b6c63 -Block 0006 [ 63]: ce24d3dfe441fbce -Block 0006 [ 64]: 3506770825bb2ff8 -Block 0006 [ 65]: e6b01a6305481a92 -Block 0006 [ 66]: 20588369cbb512ad -Block 0006 [ 67]: 2213a5633d8e0647 -Block 0006 [ 68]: 9bb32b48673b5798 -Block 0006 [ 69]: ea2fb93e9b591ecb -Block 0006 [ 70]: 00b19e24edf72a78 -Block 0006 [ 71]: 6a3d3d8108e22084 -Block 0006 [ 72]: b725028aed7ae3c3 -Block 0006 [ 73]: bc3369b7f2b43268 -Block 0006 [ 74]: 59c97d54baba82c4 -Block 0006 [ 75]: 0fe70407db1d2ba8 -Block 0006 [ 76]: cedfed90946c12ea -Block 0006 [ 77]: e8b302ab9870454b -Block 0006 [ 78]: 9425e2a143c7796b -Block 0006 [ 79]: d3c73764a8ba8779 -Block 0006 [ 80]: 1abb5199656d79c2 -Block 0006 [ 81]: abe611198bf39091 -Block 0006 [ 82]: ea770a7acf0f8dff -Block 0006 [ 83]: 31939c4a98849740 -Block 0006 [ 84]: 336d0dfecd7680e4 -Block 0006 [ 85]: 89fc6ca46752584d -Block 0006 [ 86]: 9fcee800a2106f67 -Block 0006 [ 87]: 7cf89434037d523f -Block 0006 [ 88]: 1f3e0d1299972f00 -Block 0006 [ 89]: 06e93a81e91c6e20 -Block 0006 [ 90]: d2c72df7d0b4ab95 -Block 0006 [ 91]: b110bdcf9a586775 -Block 0006 [ 92]: 813dadde4b30fa89 -Block 0006 [ 93]: db80f76e630d57cb -Block 0006 [ 94]: 602148fcb776b5ee -Block 0006 [ 95]: f1de2acbe6ff5cc5 -Block 0006 [ 96]: 5cf779b56f544cbe -Block 0006 [ 97]: 517edbe4f764fa33 -Block 0006 [ 98]: 3b5962d26315a1c1 -Block 0006 [ 99]: 15132f4f65ed2b57 -Block 0006 [100]: 2cafb09101715abb -Block 0006 [101]: 24dc4c76915eb435 -Block 0006 [102]: 1cde78f968f5010b -Block 0006 [103]: 4a75e687c0e5addb -Block 0006 [104]: 2f4a7597b54a2108 -Block 0006 [105]: 92e11114a0a5b310 -Block 0006 [106]: 4081de32dda7c0c4 -Block 0006 [107]: 9a7eaefebd1be3a1 -Block 0006 [108]: e13f144ac34f24f8 -Block 0006 [109]: dfb987c2a58a6a77 -Block 0006 [110]: ac923f395dad20e9 -Block 0006 [111]: 5fe73860f784ff60 -Block 0006 [112]: 073a06f8b4645382 -Block 0006 [113]: d21dd239689f7774 -Block 0006 [114]: adbed6f36c5dc450 -Block 0006 [115]: 09fe2f54e53f957c -Block 0006 [116]: 03f20be6777b28c8 -Block 0006 [117]: 2ac305f861ae2328 -Block 0006 [118]: 010adf7244a13818 -Block 0006 [119]: f05617a0eddcdef9 -Block 0006 [120]: 176ec1e4b3ae2bc9 -Block 0006 [121]: 49711ed542b61a0c -Block 0006 [122]: 6ff51b60fbe95318 -Block 0006 [123]: ffbe244c9716d1f4 -Block 0006 [124]: ca3bc1d5d9a3fbde -Block 0006 [125]: 9e2baedc2994282d -Block 0006 [126]: f6904d88ad361783 -Block 0006 [127]: 4d18f37dff245cc9 -Block 0007 [ 0]: 08608d905459ab8f -Block 0007 [ 1]: 1511828c58cb7034 -Block 0007 [ 2]: f86b4d6c64eca18e -Block 0007 [ 3]: 910dfd16115bfb3d -Block 0007 [ 4]: ca995462cd7af35e -Block 0007 [ 5]: b534a28406293927 -Block 0007 [ 6]: 1f68b528fa0c341f -Block 0007 [ 7]: b71403d04beb1023 -Block 0007 [ 8]: 21d143863c913455 -Block 0007 [ 9]: 397b158ee9f2145a -Block 0007 [ 10]: 47c50637ac89043d -Block 0007 [ 11]: 24aafe85e6a98baa -Block 0007 [ 12]: f1c5bfb9f0edeba9 -Block 0007 [ 13]: 1c39dfe2091acdb7 -Block 0007 [ 14]: 1f98012686c7998b -Block 0007 [ 15]: e573b35664f125a2 -Block 0007 [ 16]: 41ce6387c3e14737 -Block 0007 [ 17]: ce201b6c25da8642 -Block 0007 [ 18]: 9c9485712de6749e -Block 0007 [ 19]: 4d3a0bf96ca9ca6f -Block 0007 [ 20]: cd4fa04baa256fa7 -Block 0007 [ 21]: 6cd2937c55e5014e -Block 0007 [ 22]: cb8094a12bc4c1f1 -Block 0007 [ 23]: 7fc7ab4a85360e65 -Block 0007 [ 24]: 15abc9339bd24b42 -Block 0007 [ 25]: db40bb117871eeb9 -Block 0007 [ 26]: 018b1e3d8797c114 -Block 0007 [ 27]: 443d81d72040af1f -Block 0007 [ 28]: 72839cad763233e5 -Block 0007 [ 29]: 36d144ac4578ff44 -Block 0007 [ 30]: 63550c21a7bb87ce -Block 0007 [ 31]: 11a2bf477a1047d7 -Block 0007 [ 32]: 62b98316a7cab0ed -Block 0007 [ 33]: ef19b4e1fa47ba2a -Block 0007 [ 34]: 8e4f5c797d9f4a5e -Block 0007 [ 35]: fb00bb2ba50c8e4a -Block 0007 [ 36]: 01d2a7386d887c79 -Block 0007 [ 37]: 038dc5d5b2c8f5bc -Block 0007 [ 38]: 7a209db9e4f51364 -Block 0007 [ 39]: ba2a35dba5398ca7 -Block 0007 [ 40]: 6cba5fff356d9204 -Block 0007 [ 41]: c436134c5ebd356c -Block 0007 [ 42]: 1f6d8f881c02f0c8 -Block 0007 [ 43]: 79f9578b66208cba -Block 0007 [ 44]: 883185e36262f210 -Block 0007 [ 45]: 38176e84f5759211 -Block 0007 [ 46]: 8b43fd09a06fd161 -Block 0007 [ 47]: 6b9f93a341204534 -Block 0007 [ 48]: 4864822e6186c325 -Block 0007 [ 49]: bbd10df9fbc66070 -Block 0007 [ 50]: f0a23fc17d85b8f3 -Block 0007 [ 51]: be609b77f183932b -Block 0007 [ 52]: 6299e15b8a2b4009 -Block 0007 [ 53]: d1df320b1814ecce -Block 0007 [ 54]: f88f9bc47a139371 -Block 0007 [ 55]: c6a533a5162809c7 -Block 0007 [ 56]: 22681af809918410 -Block 0007 [ 57]: 9f3fd2b6df45c0f6 -Block 0007 [ 58]: 3788af79005ce204 -Block 0007 [ 59]: 2551096b7e3e19c6 -Block 0007 [ 60]: e235c16d902a1fd6 -Block 0007 [ 61]: 0ba2daf3304459cd -Block 0007 [ 62]: 9e89013d8084f438 -Block 0007 [ 63]: 0ebd56ba7c464c74 -Block 0007 [ 64]: d941bf430957620a -Block 0007 [ 65]: d199fa7b0fc1fd73 -Block 0007 [ 66]: eb12abb0b8c3b518 -Block 0007 [ 67]: 79d00813cd6fa842 -Block 0007 [ 68]: a3b5710cae3cdb38 -Block 0007 [ 69]: 97e08b6907ef3aed -Block 0007 [ 70]: 10aa67cb010f8b7e -Block 0007 [ 71]: 006c99f1d172a5b8 -Block 0007 [ 72]: e8eedd0b54d5912a -Block 0007 [ 73]: d3ad4a66fc9bc685 -Block 0007 [ 74]: 04250ff0ff18d510 -Block 0007 [ 75]: 28aa693c71ea9463 -Block 0007 [ 76]: 01cad69143959494 -Block 0007 [ 77]: 0fe7efd57c37f1e5 -Block 0007 [ 78]: 220ee298dd71cc97 -Block 0007 [ 79]: f1ad80c0364ebea2 -Block 0007 [ 80]: b28b619e39a54e73 -Block 0007 [ 81]: f352f9ec4e3cf0c9 -Block 0007 [ 82]: 8be9b61e4ef0ae13 -Block 0007 [ 83]: 17958922c5e6a5ec -Block 0007 [ 84]: 3e950262449ea946 -Block 0007 [ 85]: a589af9c99c64ee1 -Block 0007 [ 86]: cfd47d0f5355f4bd -Block 0007 [ 87]: ea12164e719b9492 -Block 0007 [ 88]: 8ee249d8f1768e78 -Block 0007 [ 89]: 466bb597b18b234e -Block 0007 [ 90]: 42755351f0e5e364 -Block 0007 [ 91]: 77ca28c93d5e2d74 -Block 0007 [ 92]: 15518e8fdb4168fb -Block 0007 [ 93]: 7553eb89b7f7532c -Block 0007 [ 94]: 1aa86b8147238d58 -Block 0007 [ 95]: 1840fe7056c6aacc -Block 0007 [ 96]: 7f66b3a3d933cf77 -Block 0007 [ 97]: 91af6df904b8463d -Block 0007 [ 98]: 425c11f6d2454abc -Block 0007 [ 99]: 7de0228d7120af37 -Block 0007 [100]: a550e3769a171d93 -Block 0007 [101]: cb3c95affdf18fbd -Block 0007 [102]: 16771c9dcce5c43c -Block 0007 [103]: 137a85b35f26d6ee -Block 0007 [104]: 29f6df8f1d328a22 -Block 0007 [105]: 16356bd0f965c768 -Block 0007 [106]: c4c7d7f62b45b3f2 -Block 0007 [107]: 4145056ff2a545a6 -Block 0007 [108]: ff890a907437fdbf -Block 0007 [109]: 963f6c2a400ffa0a -Block 0007 [110]: 7ba3c82d26272ae7 -Block 0007 [111]: c670f2ad133b47b6 -Block 0007 [112]: 72b9358c18abf37f -Block 0007 [113]: 163ab2fffb5913ce -Block 0007 [114]: f19f2924afcf23c9 -Block 0007 [115]: 3a538ddf827a8f98 -Block 0007 [116]: 5e3d8b7b6b6c2dfe -Block 0007 [117]: ced14853d3425a5c -Block 0007 [118]: 644d427a8a85255c -Block 0007 [119]: 82b35f11e9d4e812 -Block 0007 [120]: 1a48a1724f09fbcc -Block 0007 [121]: 97bed0697f72c04a -Block 0007 [122]: b186b43c326a39a5 -Block 0007 [123]: ddf61b0a584c18e5 -Block 0007 [124]: dfee01b0cf4b1d1c -Block 0007 [125]: 657a9eb97cc78f0f -Block 0007 [126]: 73578c46ea1e8957 -Block 0007 [127]: 49f86e12151ef106 -Block 0008 [ 0]: 946f4172e48f45bc -Block 0008 [ 1]: 4fd6a390d54f945a -Block 0008 [ 2]: 8865c95f19e75cee -Block 0008 [ 3]: 12b699dae0b3ddd3 -Block 0008 [ 4]: ddd01143c698c3f2 -Block 0008 [ 5]: f35fc1ca1e31aca2 -Block 0008 [ 6]: 754e1f2cd4478969 -Block 0008 [ 7]: 685b4614b0e6c929 -Block 0008 [ 8]: e9bb122d275abae4 -Block 0008 [ 9]: 722dcbe15fe893e1 -Block 0008 [ 10]: 023d47887e8f9080 -Block 0008 [ 11]: 580112892d2b59d2 -Block 0008 [ 12]: 453e419fb2ae1043 -Block 0008 [ 13]: e5df64f679b21648 -Block 0008 [ 14]: 19af9f0e31b485dc -Block 0008 [ 15]: 056c9b976642c3b3 -Block 0008 [ 16]: df670b491825f243 -Block 0008 [ 17]: a5b9b53a9d497b95 -Block 0008 [ 18]: 93b566c5fed67bbc -Block 0008 [ 19]: 06163c7c0221eb12 -Block 0008 [ 20]: f7814aecb5ca06ed -Block 0008 [ 21]: 7dbf805ff7f9b301 -Block 0008 [ 22]: ebee1eb85c3c7e40 -Block 0008 [ 23]: a8c47e069b866088 -Block 0008 [ 24]: cc2880bf6f2f0e96 -Block 0008 [ 25]: f2cf558ee4c8dcaf -Block 0008 [ 26]: 8ce788341bbd111a -Block 0008 [ 27]: 7f2f058fb26c87bf -Block 0008 [ 28]: 12a14abafb6f4f38 -Block 0008 [ 29]: 48c255f582c25422 -Block 0008 [ 30]: 94dc2052aeac3a6f -Block 0008 [ 31]: dc2055d354763c6e -Block 0008 [ 32]: 4baa321da5cf5e9a -Block 0008 [ 33]: a661864923404713 -Block 0008 [ 34]: 1ebe736b08681b33 -Block 0008 [ 35]: d83e4d40de6eb189 -Block 0008 [ 36]: a266bf404b5d5c24 -Block 0008 [ 37]: 2fa6f24d6e092634 -Block 0008 [ 38]: acba046ce6646f82 -Block 0008 [ 39]: 1199b380d3e3f4e7 -Block 0008 [ 40]: 3154f06582957cbb -Block 0008 [ 41]: 3a0377b1ab9b4fc4 -Block 0008 [ 42]: 8dc110da76e9a284 -Block 0008 [ 43]: dd5e35a105c5946f -Block 0008 [ 44]: 9cb0ca79e28f3eaf -Block 0008 [ 45]: 283c6a6c3eb90ebd -Block 0008 [ 46]: 31f66b0292bcc039 -Block 0008 [ 47]: d41696b4fd10cfa8 -Block 0008 [ 48]: 00fe0d0c621b8f20 -Block 0008 [ 49]: 4becb6cc90553656 -Block 0008 [ 50]: d1b39d40b8f41f66 -Block 0008 [ 51]: f53bd48378d17266 -Block 0008 [ 52]: f6aa1c7e25b26c41 -Block 0008 [ 53]: 919e55fbae1380c8 -Block 0008 [ 54]: 5c3b125145acb6a6 -Block 0008 [ 55]: 7ab641db973f7140 -Block 0008 [ 56]: 8915b982cab617cd -Block 0008 [ 57]: d5a724abf6557eed -Block 0008 [ 58]: 42a99fa8123c786c -Block 0008 [ 59]: be5eaa49caf3160e -Block 0008 [ 60]: b374f4875813075f -Block 0008 [ 61]: 6a36ea7dfd371bb9 -Block 0008 [ 62]: 30eb208b42bd275e -Block 0008 [ 63]: 0443c2562a8b5f4e -Block 0008 [ 64]: 4a92f155246fc7e4 -Block 0008 [ 65]: 51333423de414931 -Block 0008 [ 66]: 93690a0e6bc3f988 -Block 0008 [ 67]: bbded4c9c730092a -Block 0008 [ 68]: 6a77514e8f4c6880 -Block 0008 [ 69]: ba63ec70fd3c2990 -Block 0008 [ 70]: 30107af2e79e0701 -Block 0008 [ 71]: 9e950d669014bfd3 -Block 0008 [ 72]: a7e7a792cd861334 -Block 0008 [ 73]: fd06832f385545af -Block 0008 [ 74]: 157fe306e5bef4e5 -Block 0008 [ 75]: 85b14138dc2c7322 -Block 0008 [ 76]: 194556fde93950d1 -Block 0008 [ 77]: ce5fc7d07a7bd136 -Block 0008 [ 78]: 8ee3180753b18551 -Block 0008 [ 79]: 948111f20c9e8750 -Block 0008 [ 80]: 850b46a1dba94e1a -Block 0008 [ 81]: d09e265fbf143a5e -Block 0008 [ 82]: e656195021c81e6c -Block 0008 [ 83]: b086545044b0fa3c -Block 0008 [ 84]: c8ebf0e1123a77e4 -Block 0008 [ 85]: bec9fc82189da93a -Block 0008 [ 86]: 4c8e0ef40119f4b8 -Block 0008 [ 87]: 04b99d99695a5a90 -Block 0008 [ 88]: dbdc22a5e4670bb0 -Block 0008 [ 89]: 55998f7982da27d7 -Block 0008 [ 90]: 39d7e7207e08e692 -Block 0008 [ 91]: 23897adcf2de8b18 -Block 0008 [ 92]: 8cc4c0cb5139bf2d -Block 0008 [ 93]: 2fda1e43e2fd09f3 -Block 0008 [ 94]: 9b079a6c80332e62 -Block 0008 [ 95]: a5e3689bb46ada0c -Block 0008 [ 96]: ab0283b1669ed18f -Block 0008 [ 97]: c41a2cfc00bb7e7b -Block 0008 [ 98]: 67513e080d26eaae -Block 0008 [ 99]: 722eb41b16a72fc0 -Block 0008 [100]: cb7323c1e23ddf5e -Block 0008 [101]: 1cd886fb9ec9ae72 -Block 0008 [102]: 91ba26c41e5524e8 -Block 0008 [103]: 7962eea4c76742bb -Block 0008 [104]: c99d15b6866d9227 -Block 0008 [105]: 4d653a74e6460512 -Block 0008 [106]: 4bc6875015fb2e86 -Block 0008 [107]: 9a002b9f8363c254 -Block 0008 [108]: 63fc83030f07c2b3 -Block 0008 [109]: cbccdb9b7a520112 -Block 0008 [110]: 9a309ce71918c835 -Block 0008 [111]: 1ad52732f060dd9b -Block 0008 [112]: f8a23f1db24f6873 -Block 0008 [113]: 589d7da3d7a98965 -Block 0008 [114]: 688ac7a334d9b1f8 -Block 0008 [115]: 32273c7cb982809f -Block 0008 [116]: 1092db0c6e60e72d -Block 0008 [117]: fdfcce143a3a4316 -Block 0008 [118]: 7f57fde95e5fe647 -Block 0008 [119]: c32cc72f104f110e -Block 0008 [120]: b586a6c4bef3aeda -Block 0008 [121]: 51fd5b6b873c9d93 -Block 0008 [122]: 98bdb34ea394faff -Block 0008 [123]: f203ac855a3cf9b0 -Block 0008 [124]: 1ed469c0614791eb -Block 0008 [125]: 9c66a82bdb1086a8 -Block 0008 [126]: d5fce0f666b9fbf4 -Block 0008 [127]: b5240fccb0474593 -Block 0009 [ 0]: f71d7ac1b31d0c03 -Block 0009 [ 1]: 36fa1fc6951a7721 -Block 0009 [ 2]: b07b4cbe51b81815 -Block 0009 [ 3]: aa592611faa7919f -Block 0009 [ 4]: e9ffefb063d7fb93 -Block 0009 [ 5]: 64d095d28ffd4ce5 -Block 0009 [ 6]: 426b82d6b296bdd4 -Block 0009 [ 7]: 36f597f7872bbcad -Block 0009 [ 8]: 8c67a5d17176ca0a -Block 0009 [ 9]: 009c72d087e528a1 -Block 0009 [ 10]: 45c5258429ffa95c -Block 0009 [ 11]: 041138902f445757 -Block 0009 [ 12]: e5df17e7b58ad6f5 -Block 0009 [ 13]: f77248f48fdf93f7 -Block 0009 [ 14]: 2ccd21f49fdbf5f3 -Block 0009 [ 15]: 868eb9581ad8bf6a -Block 0009 [ 16]: 7d9886dd8b20f0a5 -Block 0009 [ 17]: f1ba13572e7ce9ce -Block 0009 [ 18]: f948533dd4c66c0a -Block 0009 [ 19]: 57beec10df13ae28 -Block 0009 [ 20]: 6814a2ab7a2333bd -Block 0009 [ 21]: c8a582737a34001f -Block 0009 [ 22]: baf3cd295d2b578a -Block 0009 [ 23]: ff97f37cb11c3bb6 -Block 0009 [ 24]: ff7086083e75499f -Block 0009 [ 25]: 98a45ac01d889f68 -Block 0009 [ 26]: 00c4213dcebd6abb -Block 0009 [ 27]: 224554dbd2866552 -Block 0009 [ 28]: 84172c50092aecc2 -Block 0009 [ 29]: 0e7cc7829edd193d -Block 0009 [ 30]: ffbd59d32a3e1ccd -Block 0009 [ 31]: 3fea118182ed825d -Block 0009 [ 32]: b177558628cb6ff0 -Block 0009 [ 33]: ce032e12a93a2858 -Block 0009 [ 34]: 9a80ee26047468c1 -Block 0009 [ 35]: 9558d50a7013d04b -Block 0009 [ 36]: 7d03afab6ba77a9f -Block 0009 [ 37]: 0571cb3f95cb4f8e -Block 0009 [ 38]: 3efadf43d1515bbd -Block 0009 [ 39]: d295f20ebaea1299 -Block 0009 [ 40]: d952805bfc5f5522 -Block 0009 [ 41]: 8456b9125f950b3b -Block 0009 [ 42]: caeba582f5b9cfad -Block 0009 [ 43]: 8cf13134eff66040 -Block 0009 [ 44]: d3a4f52954197a2c -Block 0009 [ 45]: a812afdce439ff9e -Block 0009 [ 46]: 2aa4e9f9b348c5c3 -Block 0009 [ 47]: 1705ece947e35bab -Block 0009 [ 48]: 7f7397aa223f771b -Block 0009 [ 49]: fce2f4b15034ab54 -Block 0009 [ 50]: b1d69da4139bdbd8 -Block 0009 [ 51]: f67e6b188989fbe8 -Block 0009 [ 52]: d125a99b2095a29d -Block 0009 [ 53]: 9d6e470ec6c25b36 -Block 0009 [ 54]: 593b160d49e18c79 -Block 0009 [ 55]: ed6025de9776525e -Block 0009 [ 56]: 5ac3eee54aae2a66 -Block 0009 [ 57]: 5a1638b2cbdada77 -Block 0009 [ 58]: 156cd95ddfad2d28 -Block 0009 [ 59]: d204813e7b31cb39 -Block 0009 [ 60]: d4103b3f53448bed -Block 0009 [ 61]: 0c9995ac4f2738a2 -Block 0009 [ 62]: d2594d28f9c96d9c -Block 0009 [ 63]: 5bc9e9ea7845875f -Block 0009 [ 64]: 09c43be218bf86cc -Block 0009 [ 65]: c27f3f6dc8e0c8cc -Block 0009 [ 66]: c66918b7a291eb26 -Block 0009 [ 67]: b2a8f2f585ec2dae -Block 0009 [ 68]: 823f44a98b3a53df -Block 0009 [ 69]: 4d341334a6a465af -Block 0009 [ 70]: 75bee2f35122ae8e -Block 0009 [ 71]: 06f62f8c153e04ba -Block 0009 [ 72]: 802b3ff14a2babcd -Block 0009 [ 73]: 3323648a36eae7aa -Block 0009 [ 74]: 94b9cd482286815b -Block 0009 [ 75]: 67a61292a4e88710 -Block 0009 [ 76]: 8b9931e1b76cc41e -Block 0009 [ 77]: cf8d25db33f394aa -Block 0009 [ 78]: aafd87d7ef762aa9 -Block 0009 [ 79]: 3185333e28669e62 -Block 0009 [ 80]: b4ea67c36b38149c -Block 0009 [ 81]: e0a1000041058445 -Block 0009 [ 82]: 1362ecd144a7e52c -Block 0009 [ 83]: 049dfe5437183e02 -Block 0009 [ 84]: eb6e27e92a174754 -Block 0009 [ 85]: 595fbc74a2ef367f -Block 0009 [ 86]: 9a72a7c3f1ee3e84 -Block 0009 [ 87]: e9a6bcecc3f22d81 -Block 0009 [ 88]: 9347bcd9fdf576c5 -Block 0009 [ 89]: 1f7c38ff13ef70a7 -Block 0009 [ 90]: 2d274d7abcafd26c -Block 0009 [ 91]: 447ca88566a2e3f8 -Block 0009 [ 92]: 4e5711ab025a6c83 -Block 0009 [ 93]: 9aaf73a660580ec6 -Block 0009 [ 94]: d1ebf9c02c730018 -Block 0009 [ 95]: 29c443177aa901ec -Block 0009 [ 96]: 16c3dfdb779b9b0d -Block 0009 [ 97]: ee249c54b6696abb -Block 0009 [ 98]: 69547342e8b883c8 -Block 0009 [ 99]: bd8bd8373c27cbac -Block 0009 [100]: 04fc66d6d9746631 -Block 0009 [101]: fb13da4119808ae9 -Block 0009 [102]: 8bc9611f01757e03 -Block 0009 [103]: ec43bd9892f5a8f1 -Block 0009 [104]: b613e812c583a1e5 -Block 0009 [105]: 286cf5d1233abbdf -Block 0009 [106]: 18fcc7aea4a0bd0c -Block 0009 [107]: 373ce49dd8d1f90d -Block 0009 [108]: d55e507149c98c70 -Block 0009 [109]: 742ee9093356cbe0 -Block 0009 [110]: c4e5b39c1d5bad53 -Block 0009 [111]: 8c9982400af91fcf -Block 0009 [112]: e09dcaace809588a -Block 0009 [113]: aeff10b1b2894146 -Block 0009 [114]: 726fceb7fbc3f85e -Block 0009 [115]: 31d37b1028d0ae76 -Block 0009 [116]: 1275fc397d70d627 -Block 0009 [117]: c67f66396627ace7 -Block 0009 [118]: 7f90a6cdf3bdfdce -Block 0009 [119]: 0b76c955b3916250 -Block 0009 [120]: 29204a35ad80e350 -Block 0009 [121]: 11c718719db93a70 -Block 0009 [122]: 26538a9df69b4dfc -Block 0009 [123]: 476356b8a4742fc4 -Block 0009 [124]: 17c1abfa8181bb99 -Block 0009 [125]: 3a4c58a598605a4a -Block 0009 [126]: d04b9c190601d94c -Block 0009 [127]: 4955d571b6b302b8 -Block 0010 [ 0]: b993c1bd5f7029d0 -Block 0010 [ 1]: b335e227fdf8ef5f -Block 0010 [ 2]: 9237fba47420f671 -Block 0010 [ 3]: a126898dbeec57ed -Block 0010 [ 4]: 4bca4ce84aa86b25 -Block 0010 [ 5]: c038226b443c4b80 -Block 0010 [ 6]: 6f53e9bec75433a4 -Block 0010 [ 7]: c501a2f82d230b2e -Block 0010 [ 8]: e20cbbc1cdbb3fde -Block 0010 [ 9]: 7e74310ac3390e93 -Block 0010 [ 10]: 607d4856e41e6770 -Block 0010 [ 11]: 0d873576fe594cb9 -Block 0010 [ 12]: 466a5cc0b9dcb10b -Block 0010 [ 13]: 5ac4ae018e1244b6 -Block 0010 [ 14]: 6f5ea0c731cb993f -Block 0010 [ 15]: 8ae0464499a1a18b -Block 0010 [ 16]: 5786d33860ddc6aa -Block 0010 [ 17]: fbc2a7fee48c5262 -Block 0010 [ 18]: df7df9334ecc008b -Block 0010 [ 19]: 3c12389cf675c070 -Block 0010 [ 20]: 63b680dd695239e1 -Block 0010 [ 21]: 82b6b20c15633ecd -Block 0010 [ 22]: 72a8465d6fec39ae -Block 0010 [ 23]: a2e32e750d9d73d5 -Block 0010 [ 24]: bd50d62e43faed3c -Block 0010 [ 25]: d24d65fa3b7b739e -Block 0010 [ 26]: 7a13fff894085e72 -Block 0010 [ 27]: e78d115cfbe3e775 -Block 0010 [ 28]: 4ddccccaccf56fd4 -Block 0010 [ 29]: 5d4630d9d429597d -Block 0010 [ 30]: aff631f79f7cd167 -Block 0010 [ 31]: 61123ce2e2e19e76 -Block 0010 [ 32]: c493743bc954fc27 -Block 0010 [ 33]: 0cda5a79ca021b0b -Block 0010 [ 34]: f471cf3d3f0732da -Block 0010 [ 35]: aa21229ac8b02a9f -Block 0010 [ 36]: c5d1681941b6c405 -Block 0010 [ 37]: 7c4cde8e970cf13d -Block 0010 [ 38]: d9b7771cee19b845 -Block 0010 [ 39]: 2e4fc10fff00cd49 -Block 0010 [ 40]: 33ed5782df2e21ea -Block 0010 [ 41]: 93dcf1fd021b2823 -Block 0010 [ 42]: c40e0f1eedd64802 -Block 0010 [ 43]: 864794e39416a59d -Block 0010 [ 44]: e3b59bbb7918d16b -Block 0010 [ 45]: 0835a0d6bd7c4736 -Block 0010 [ 46]: cb3a4d7a2c7258d6 -Block 0010 [ 47]: d1d7a03d5b4a3e40 -Block 0010 [ 48]: 0085b98ff324f040 -Block 0010 [ 49]: 8d90ef0683b47f76 -Block 0010 [ 50]: babed82c6e950da3 -Block 0010 [ 51]: a521d85c113afa18 -Block 0010 [ 52]: e894e2a0970c9369 -Block 0010 [ 53]: cce9bdabfeb53b33 -Block 0010 [ 54]: 082a4efdfe16a2d1 -Block 0010 [ 55]: f8051ce466344f8d -Block 0010 [ 56]: ea14a2998800d044 -Block 0010 [ 57]: dda2b7fac4d942fd -Block 0010 [ 58]: 30eb10a454538f7c -Block 0010 [ 59]: c774e4c9906a7024 -Block 0010 [ 60]: 54f054ebfc467c29 -Block 0010 [ 61]: 8bf568d3a3c5fd99 -Block 0010 [ 62]: 7b399a300a0b9cc5 -Block 0010 [ 63]: 3ab29955ed1ac168 -Block 0010 [ 64]: 442c5ac818b0487f -Block 0010 [ 65]: 1b0763e5c951a8c7 -Block 0010 [ 66]: 1d9be376de427fc1 -Block 0010 [ 67]: de496feb7dc80268 -Block 0010 [ 68]: e62a4cdfa2bafa48 -Block 0010 [ 69]: da8322a3ed887c0b -Block 0010 [ 70]: 85a1645342749fbf -Block 0010 [ 71]: 7ce2a7496bc24cf6 -Block 0010 [ 72]: 6e8921ed63828c7f -Block 0010 [ 73]: 8237828d04979c41 -Block 0010 [ 74]: a80bc40b91f7d49a -Block 0010 [ 75]: 6e6a295d6e35b945 -Block 0010 [ 76]: 89e7346006fa765a -Block 0010 [ 77]: 669c918f21489879 -Block 0010 [ 78]: 8920540f8131241f -Block 0010 [ 79]: 4945d49ed827838b -Block 0010 [ 80]: 332e127fabb53df8 -Block 0010 [ 81]: 7d21956c64b39744 -Block 0010 [ 82]: 5773e3c42b68bfa4 -Block 0010 [ 83]: 18e24882ca88acb9 -Block 0010 [ 84]: 9daf7d7818505288 -Block 0010 [ 85]: a082a00e4cafa716 -Block 0010 [ 86]: 26d4a2d3df30febb -Block 0010 [ 87]: 9580317f69598ad6 -Block 0010 [ 88]: 7484c89ffe4b2eef -Block 0010 [ 89]: b8617bf6a8e210ad -Block 0010 [ 90]: 730e1d6b1b3526d5 -Block 0010 [ 91]: 07288bde84d4c8e3 -Block 0010 [ 92]: 9f5268a294e2adfc -Block 0010 [ 93]: 661bcbe84714c7c2 -Block 0010 [ 94]: 374431dc30ad551a -Block 0010 [ 95]: 77b23b931fe980e6 -Block 0010 [ 96]: 7c88f25c1256f646 -Block 0010 [ 97]: 59e2afc7421061dc -Block 0010 [ 98]: 05134ad1fd1939ce -Block 0010 [ 99]: d699e236278af73c -Block 0010 [100]: e3bce3ca0ad1bd89 -Block 0010 [101]: cab0b5500d334a45 -Block 0010 [102]: 39d1b45c25ccb8df -Block 0010 [103]: a3821ced65f2f532 -Block 0010 [104]: 41cf244e80d20bb3 -Block 0010 [105]: 9593af67ca6b8665 -Block 0010 [106]: c1f9e1e46f96689f -Block 0010 [107]: b6bdef4c8c84e74f -Block 0010 [108]: 94d40f31eaaa2e44 -Block 0010 [109]: bbec161350126a1a -Block 0010 [110]: 60b54428ddd5b5fe -Block 0010 [111]: 1d2a926c9ede4276 -Block 0010 [112]: d095c896f08970e5 -Block 0010 [113]: 0b8903eed5e169c7 -Block 0010 [114]: 28c8e70eae29763a -Block 0010 [115]: f1b2260d6d41e7ee -Block 0010 [116]: 126762a86c807865 -Block 0010 [117]: eaf3b1bd561d8a6c -Block 0010 [118]: cf6ac32eded6a9c1 -Block 0010 [119]: f039b2bcefc45b52 -Block 0010 [120]: c93b02aa4366b822 -Block 0010 [121]: f68b6515d2589d6c -Block 0010 [122]: 230c8155563a5498 -Block 0010 [123]: 229abab769c2c232 -Block 0010 [124]: b7bab4bf507dd51c -Block 0010 [125]: 865b9289dbb02d72 -Block 0010 [126]: 8a3ffe783605f32b -Block 0010 [127]: 1edb7add047109a5 -Block 0011 [ 0]: 5fe2c3629fa3ee83 -Block 0011 [ 1]: b3d2beefbabce8ac -Block 0011 [ 2]: 72942fa98eec830c -Block 0011 [ 3]: 227ad56dfb1dfcbb -Block 0011 [ 4]: 64c0845d046c046b -Block 0011 [ 5]: 3f2c34f5b626488b -Block 0011 [ 6]: 4ebce1ad53d2f691 -Block 0011 [ 7]: aa5e798ff6600903 -Block 0011 [ 8]: c882e71490d159ee -Block 0011 [ 9]: 139b21b383b533b6 -Block 0011 [ 10]: 413204981bd82a87 -Block 0011 [ 11]: 36f87f9bddf156b0 -Block 0011 [ 12]: 22ea88710821972c -Block 0011 [ 13]: e8be47cfb4f1bde8 -Block 0011 [ 14]: b8b556041f484f9c -Block 0011 [ 15]: 66e82cc41de0d401 -Block 0011 [ 16]: bca8191ac28313bc -Block 0011 [ 17]: abb7463754f598bc -Block 0011 [ 18]: 5d7a40b1f8394347 -Block 0011 [ 19]: 927a3616b1c69ade -Block 0011 [ 20]: 476045d4c050649e -Block 0011 [ 21]: f8e3b38bd6919cd5 -Block 0011 [ 22]: 54e3eda0ad5ef065 -Block 0011 [ 23]: cf1f60f880e92a70 -Block 0011 [ 24]: 77ce0b66240f6bb3 -Block 0011 [ 25]: 5fccfa14a0aac40f -Block 0011 [ 26]: e92b36364de83bc2 -Block 0011 [ 27]: 2fac24203b29d455 -Block 0011 [ 28]: 1f59b91c3e8ce701 -Block 0011 [ 29]: f6325db0e6cf5db7 -Block 0011 [ 30]: cde857254c0d8753 -Block 0011 [ 31]: 270efe3a4d4383cf -Block 0011 [ 32]: 6fa171ad462e1d5f -Block 0011 [ 33]: 7f898ecf3127d9de -Block 0011 [ 34]: 395ff0b219c6fd34 -Block 0011 [ 35]: 8ce0d1368c66870e -Block 0011 [ 36]: 04e5aa8dd7049358 -Block 0011 [ 37]: 1c93fd6ce65f1517 -Block 0011 [ 38]: 7a4c941e71b3e0a7 -Block 0011 [ 39]: c6cf012a56968ade -Block 0011 [ 40]: e2f74e80ee223964 -Block 0011 [ 41]: d29e097677b886b3 -Block 0011 [ 42]: af5dd662ba49095b -Block 0011 [ 43]: 6978e6c06707d66c -Block 0011 [ 44]: b465f5b5226979d4 -Block 0011 [ 45]: 94fdf590ea8fff6e -Block 0011 [ 46]: fc00f5336bb3a35d -Block 0011 [ 47]: f1a63dd0547ac7d0 -Block 0011 [ 48]: 0b63794ae2fd4f9a -Block 0011 [ 49]: b5686907a46a9428 -Block 0011 [ 50]: e59fe5615f29bf23 -Block 0011 [ 51]: 33fafa9d750c4cc9 -Block 0011 [ 52]: 4fa3df448e6effbc -Block 0011 [ 53]: d8fd1d31e7daf2ef -Block 0011 [ 54]: 22eebb769680e792 -Block 0011 [ 55]: e812f157611f5675 -Block 0011 [ 56]: 93fedfe6bd369c49 -Block 0011 [ 57]: 59dc7eeb904773dd -Block 0011 [ 58]: a4b40ad32d554888 -Block 0011 [ 59]: 744d37f36abb0092 -Block 0011 [ 60]: 059214737176c6ba -Block 0011 [ 61]: 1a700fa9557eef5f -Block 0011 [ 62]: eca56e2d91882ba4 -Block 0011 [ 63]: 14f42776e4cf5381 -Block 0011 [ 64]: 44756fc06ec6c65c -Block 0011 [ 65]: 2fe700f9173ba95c -Block 0011 [ 66]: 1e0107f5209a8329 -Block 0011 [ 67]: b4c0f8a00d972eee -Block 0011 [ 68]: f180516da3569255 -Block 0011 [ 69]: ff000c7df6506db2 -Block 0011 [ 70]: c6771d7e25863436 -Block 0011 [ 71]: aae7b9969ec5b78d -Block 0011 [ 72]: bec55327abb230ce -Block 0011 [ 73]: b8a95311da085eef -Block 0011 [ 74]: 80a76344e94d37a6 -Block 0011 [ 75]: e7322b491ae64268 -Block 0011 [ 76]: 60b731f8b9bce8f5 -Block 0011 [ 77]: dcb8a5456a58e1b4 -Block 0011 [ 78]: f3c5081fd8222c9a -Block 0011 [ 79]: c821603c76a0a1a1 -Block 0011 [ 80]: 4246de6a30129f61 -Block 0011 [ 81]: a86b679c621e62bd -Block 0011 [ 82]: 2e726675015a9f66 -Block 0011 [ 83]: 6397c3c8d8b1a8ef -Block 0011 [ 84]: 8f7e51fdd1484e23 -Block 0011 [ 85]: 6fa5dce93186cdcd -Block 0011 [ 86]: ddca57f16e3ceea5 -Block 0011 [ 87]: 6c7c6df39e7f1011 -Block 0011 [ 88]: a4e2f226b52098e8 -Block 0011 [ 89]: 9559cebee47939c3 -Block 0011 [ 90]: b0c9f32b08a3ab5a -Block 0011 [ 91]: eea0d795a627fd1a -Block 0011 [ 92]: 448fc1ead715ad85 -Block 0011 [ 93]: d19610358c85ac0c -Block 0011 [ 94]: 62ee1eed08cb519c -Block 0011 [ 95]: 787ed35781df088b -Block 0011 [ 96]: 4f79006cc037761e -Block 0011 [ 97]: 4bc68ec57b36a9f7 -Block 0011 [ 98]: 9e74541e84cfa14e -Block 0011 [ 99]: 06d86aafd803d99b -Block 0011 [100]: 6e3eca30777d4653 -Block 0011 [101]: 69d1b2810057a1de -Block 0011 [102]: 2231841468d29508 -Block 0011 [103]: 6b30141f71aac157 -Block 0011 [104]: dbbf724568091549 -Block 0011 [105]: d8a9c58e4d894d80 -Block 0011 [106]: 43ff74eb372afdc5 -Block 0011 [107]: f42c4e3a8ac0c408 -Block 0011 [108]: b7c05437c026add9 -Block 0011 [109]: b31f94ec29d359f2 -Block 0011 [110]: 5e288d4c73af4bdb -Block 0011 [111]: 756a80665001aed3 -Block 0011 [112]: 736d66df99a2be76 -Block 0011 [113]: a606c036d92fcffe -Block 0011 [114]: cb37bd31ede4471a -Block 0011 [115]: ba27d12d88a27fe0 -Block 0011 [116]: 2f5873817e1c35de -Block 0011 [117]: 84e8bcb44320ef4f -Block 0011 [118]: b855efc385514b4b -Block 0011 [119]: 1c2fb55a05c6d53f -Block 0011 [120]: 64969aa359025900 -Block 0011 [121]: 1fae4a4302afbc5d -Block 0011 [122]: 82681cfa3cf9ceb7 -Block 0011 [123]: 60d5c0017e77004b -Block 0011 [124]: 5d6b52231aa6c2fc -Block 0011 [125]: 590d6387fc05be07 -Block 0011 [126]: 5ab275846b663589 -Block 0011 [127]: 6d63a6652c9780d1 -Block 0012 [ 0]: 5eb35b81bd053cc0 -Block 0012 [ 1]: 7641c90975633b66 -Block 0012 [ 2]: f8a2d4bd05fea682 -Block 0012 [ 3]: dbf53b206e11489c -Block 0012 [ 4]: c243472fca0f1d05 -Block 0012 [ 5]: f246293a97b52cd9 -Block 0012 [ 6]: 222860d28a78faee -Block 0012 [ 7]: aff4e84133704f8d -Block 0012 [ 8]: 0085dd170896441d -Block 0012 [ 9]: 6dd0efebc63d9a57 -Block 0012 [ 10]: 42fc1383e469732c -Block 0012 [ 11]: 20ec25037814bdbb -Block 0012 [ 12]: b8c240862f80a62d -Block 0012 [ 13]: af389ee2c0de45e3 -Block 0012 [ 14]: 9ede39da388711c5 -Block 0012 [ 15]: c988c927980074c4 -Block 0012 [ 16]: 42742d6879986b1a -Block 0012 [ 17]: 1cd69a0069e8b6d6 -Block 0012 [ 18]: c089f385e42a7554 -Block 0012 [ 19]: 93cd82acbefbe235 -Block 0012 [ 20]: 5d4d15930067eb4d -Block 0012 [ 21]: a0f32413740ccd14 -Block 0012 [ 22]: e8d285495c219573 -Block 0012 [ 23]: 6767ce984f856d11 -Block 0012 [ 24]: 6157243bb3276f9e -Block 0012 [ 25]: fe40efcb6d208003 -Block 0012 [ 26]: b089203e8d0bbe9e -Block 0012 [ 27]: 352ed22a2abeed77 -Block 0012 [ 28]: 9a283ee0cb62412f -Block 0012 [ 29]: af670ea81a83f914 -Block 0012 [ 30]: 8110d525c2cbf453 -Block 0012 [ 31]: 1fef517c56f77b24 -Block 0012 [ 32]: d4446f905d7f1e5c -Block 0012 [ 33]: 977e658395321308 -Block 0012 [ 34]: 3001f86c9432b412 -Block 0012 [ 35]: 062b559150d175b8 -Block 0012 [ 36]: 8d24f46cbd21f974 -Block 0012 [ 37]: 911a79204b56fd9b -Block 0012 [ 38]: 36d534094c932cd2 -Block 0012 [ 39]: c52abffaf521c660 -Block 0012 [ 40]: 01e338e319177a5a -Block 0012 [ 41]: bbfe5ed4bf00aca5 -Block 0012 [ 42]: c782e6aeb0a43c30 -Block 0012 [ 43]: b027e3d82037f5cc -Block 0012 [ 44]: 64a4103b744e4e94 -Block 0012 [ 45]: 9670a86aeb267168 -Block 0012 [ 46]: 6d82ef7ebc12d747 -Block 0012 [ 47]: c0ce445100e0814b -Block 0012 [ 48]: 3ebd68e5b7f8c349 -Block 0012 [ 49]: 62a4cd03600e4f0f -Block 0012 [ 50]: ed30bd78b1885ff0 -Block 0012 [ 51]: 0fd66bdd36d98a98 -Block 0012 [ 52]: 03abfc600e92f6c3 -Block 0012 [ 53]: c9696dbd2e2eba13 -Block 0012 [ 54]: cc14dc0fe7d114cc -Block 0012 [ 55]: e8ea18a97e82d90c -Block 0012 [ 56]: 0424e0fe0044c042 -Block 0012 [ 57]: ffae154a49dd9d01 -Block 0012 [ 58]: 6658a1ed74f08a8b -Block 0012 [ 59]: 248914e8d4de3743 -Block 0012 [ 60]: 23b1a8a054fc2dc9 -Block 0012 [ 61]: 54bb6b0f239a1202 -Block 0012 [ 62]: b26d8545b0b8d431 -Block 0012 [ 63]: 41029e4ba502397a -Block 0012 [ 64]: 421e06ec5441bcb2 -Block 0012 [ 65]: 1ba5b0ee439d2d63 -Block 0012 [ 66]: 2da3a807f3ff4323 -Block 0012 [ 67]: 2742b4c66c62189d -Block 0012 [ 68]: bd9d25027fc2314a -Block 0012 [ 69]: 66d3b6f9cbb56538 -Block 0012 [ 70]: d33c241653c83fe5 -Block 0012 [ 71]: 7ae3528f6e512592 -Block 0012 [ 72]: ef5a0296a28a43fd -Block 0012 [ 73]: a0edb71f2487989b -Block 0012 [ 74]: a4cb2cec23ed537c -Block 0012 [ 75]: b5f488772baa93eb -Block 0012 [ 76]: 49ca7fa7da5fdf94 -Block 0012 [ 77]: 888430579906b669 -Block 0012 [ 78]: c19fcbbe58ec7891 -Block 0012 [ 79]: aa6d5dfa8e7cb53e -Block 0012 [ 80]: 0615bb3755e4ddbb -Block 0012 [ 81]: 6a7f71b5130eab08 -Block 0012 [ 82]: 0ea866119ff0f0ea -Block 0012 [ 83]: 97830e7c4f50687b -Block 0012 [ 84]: 4bcb4a4a73359185 -Block 0012 [ 85]: 0f1ca64127e1448c -Block 0012 [ 86]: 2d16448bcc734e2f -Block 0012 [ 87]: 9ff24758d2990ee0 -Block 0012 [ 88]: 7cc84dfc8b738b71 -Block 0012 [ 89]: 9aa3f9947fb1f62d -Block 0012 [ 90]: 09354a98af66a3fe -Block 0012 [ 91]: 612103bfbda63484 -Block 0012 [ 92]: ab307f9b9f62e01b -Block 0012 [ 93]: ed837a895bb8b2d6 -Block 0012 [ 94]: 141d971b389f1d29 -Block 0012 [ 95]: bbba4eea3e13b193 -Block 0012 [ 96]: e3532479251d0b57 -Block 0012 [ 97]: 2c32b548cb6bf2ed -Block 0012 [ 98]: ed5ee29a68174778 -Block 0012 [ 99]: aa55d7b0274f0e31 -Block 0012 [100]: e4b5d717ba725392 -Block 0012 [101]: de42cbaad6431d7e -Block 0012 [102]: 860180f00221947b -Block 0012 [103]: 78472da3db1201a5 -Block 0012 [104]: b52ac1918c4c2ed7 -Block 0012 [105]: 17391fc4569e555c -Block 0012 [106]: 499819cf76e30f9b -Block 0012 [107]: a675cac605905f75 -Block 0012 [108]: 6a665ec6d7126dce -Block 0012 [109]: 4f94b37966787280 -Block 0012 [110]: de10b2867e5dbe38 -Block 0012 [111]: 832cbd205f28a0ea -Block 0012 [112]: 44e056fd2e9b0082 -Block 0012 [113]: 81855caf3d872ca9 -Block 0012 [114]: 54fe1974935fd3b9 -Block 0012 [115]: 68c029edb1ee47be -Block 0012 [116]: 0c79bbc7e8ac560f -Block 0012 [117]: 2656c97869498c44 -Block 0012 [118]: 58ca9f1682a82cff -Block 0012 [119]: 35232b69467d0037 -Block 0012 [120]: 7d4e47ee2c0cca0b -Block 0012 [121]: 808132432378c13c -Block 0012 [122]: 6fe35ab35928b42c -Block 0012 [123]: e5b761f541a98818 -Block 0012 [124]: debb7cca4239ab7d -Block 0012 [125]: d2c77542f359d6f4 -Block 0012 [126]: 6dee7cf3e7094763 -Block 0012 [127]: 412d341f4db85305 -Block 0013 [ 0]: c70920a92cb26ed9 -Block 0013 [ 1]: d9d1a305c3c4ab20 -Block 0013 [ 2]: 5e105d030521a722 -Block 0013 [ 3]: b699dcfc017a8eed -Block 0013 [ 4]: f186fb821a424d24 -Block 0013 [ 5]: 3cbdc486daf92b0b -Block 0013 [ 6]: 73ead930b6005763 -Block 0013 [ 7]: 369651d278a36f82 -Block 0013 [ 8]: 6b321d4426764d6d -Block 0013 [ 9]: 65359c09f4aa9130 -Block 0013 [ 10]: bac29a7788b63d81 -Block 0013 [ 11]: 6141dc0be16d635d -Block 0013 [ 12]: d71fe34cdb32c062 -Block 0013 [ 13]: 783373adad773100 -Block 0013 [ 14]: 623a786f866c4040 -Block 0013 [ 15]: f36347067043d854 -Block 0013 [ 16]: 30caf9b9782c9dfb -Block 0013 [ 17]: 61ca4437a6c3fde3 -Block 0013 [ 18]: f7187ef60eab8508 -Block 0013 [ 19]: 65246f0526f71516 -Block 0013 [ 20]: 7d487059b075eb12 -Block 0013 [ 21]: 5188536efc815a54 -Block 0013 [ 22]: 2d5101c366b1f784 -Block 0013 [ 23]: dcdb485cb186f0cd -Block 0013 [ 24]: 3252c1a7fd162804 -Block 0013 [ 25]: 433de6dac35f9057 -Block 0013 [ 26]: f95f0f0b42c73d69 -Block 0013 [ 27]: 67f3b675462b1dda -Block 0013 [ 28]: d39c71d2476e87ea -Block 0013 [ 29]: f652d879ced55160 -Block 0013 [ 30]: dde336e862764fdf -Block 0013 [ 31]: 6088281a6f50fbda -Block 0013 [ 32]: b852cf8a0737bd37 -Block 0013 [ 33]: 6263a7ac759c6f6f -Block 0013 [ 34]: 07eacff726a0e0c2 -Block 0013 [ 35]: c88b010fea77e722 -Block 0013 [ 36]: 957d644af7a1d16e -Block 0013 [ 37]: e14ff78741afe828 -Block 0013 [ 38]: a327f71f969be502 -Block 0013 [ 39]: 7de49f4e170813f4 -Block 0013 [ 40]: e2d814b3994b3fca -Block 0013 [ 41]: 1908fb9c157569bb -Block 0013 [ 42]: 976111c502a0f245 -Block 0013 [ 43]: 89cf1accc7dbfd36 -Block 0013 [ 44]: fc3de0f3e74f5c88 -Block 0013 [ 45]: 8a2959b9ecaaf303 -Block 0013 [ 46]: b933b20c6cc38c3b -Block 0013 [ 47]: 821d84298c43a930 -Block 0013 [ 48]: 3fff1ee1832c4e0a -Block 0013 [ 49]: d0f56311037d5f41 -Block 0013 [ 50]: 371028f135ed5c9e -Block 0013 [ 51]: 05d816f92a122587 -Block 0013 [ 52]: 95f0eb6798d608e7 -Block 0013 [ 53]: 80c91b584f0b03fc -Block 0013 [ 54]: 44d1a6ae6e195f06 -Block 0013 [ 55]: ce1a69c88ccfde9e -Block 0013 [ 56]: 55e6aa8a5921a608 -Block 0013 [ 57]: a9d857bfc24a2e17 -Block 0013 [ 58]: a4ab20a453ef665c -Block 0013 [ 59]: b9ea6bada03f6b71 -Block 0013 [ 60]: 093918f0708179c8 -Block 0013 [ 61]: 57224c2518e38f9d -Block 0013 [ 62]: 546a6137c5c52378 -Block 0013 [ 63]: cdab2811db1a5e0c -Block 0013 [ 64]: f69c38c0b38d90d3 -Block 0013 [ 65]: b6917c99e10d6f0a -Block 0013 [ 66]: f692ef24bd348ce5 -Block 0013 [ 67]: c0e6070792830b70 -Block 0013 [ 68]: 60cae1d8de0a398d -Block 0013 [ 69]: 3bcc56d30a556965 -Block 0013 [ 70]: c0f29dfeb7b5e34a -Block 0013 [ 71]: 2704f9c770be92bc -Block 0013 [ 72]: 00b3a71eacbebfab -Block 0013 [ 73]: 5b92d32543716583 -Block 0013 [ 74]: 7e24bb60453c2970 -Block 0013 [ 75]: 2df67c4143260c92 -Block 0013 [ 76]: c5fde8273c0137f7 -Block 0013 [ 77]: b0a7848eac665513 -Block 0013 [ 78]: 4ccb4516a016c07d -Block 0013 [ 79]: 60c02bf8de4f1bc3 -Block 0013 [ 80]: e8e6b622b3d9bfbb -Block 0013 [ 81]: 379e0403b68c16ca -Block 0013 [ 82]: f0971a9a29bc1c8b -Block 0013 [ 83]: b86253946474734d -Block 0013 [ 84]: f1abbc26aca6f49a -Block 0013 [ 85]: c1b54462f1ac893e -Block 0013 [ 86]: 5d524385f72433bb -Block 0013 [ 87]: 44453f44df1d2608 -Block 0013 [ 88]: a17c13e65c78dc86 -Block 0013 [ 89]: d920daf0f8abf0fa -Block 0013 [ 90]: 24d05fcfb4261ea7 -Block 0013 [ 91]: fe57e1c7dbd46e45 -Block 0013 [ 92]: e0cf1d36c1482a53 -Block 0013 [ 93]: 0099360275359288 -Block 0013 [ 94]: 875df94b517090c8 -Block 0013 [ 95]: 771125540ad7b6e0 -Block 0013 [ 96]: 658769481c9f2d91 -Block 0013 [ 97]: 8e96e8797fc2b335 -Block 0013 [ 98]: c117f6b6519475c6 -Block 0013 [ 99]: 30b95e0e37f7f933 -Block 0013 [100]: 55e73cb5fa5b4735 -Block 0013 [101]: 7ea0b7d4a9b76057 -Block 0013 [102]: 878a1c10e2d6523e -Block 0013 [103]: d675de48042f30fe -Block 0013 [104]: 17f3d868f1c5e8a3 -Block 0013 [105]: 3d341616c62ce828 -Block 0013 [106]: 268acb2a936b4cc3 -Block 0013 [107]: d1bf24d7d14d8894 -Block 0013 [108]: 75e5104aa5274d8f -Block 0013 [109]: fa23bc856604f803 -Block 0013 [110]: 79c3a14ed5cec597 -Block 0013 [111]: eaf01ffc019b86bd -Block 0013 [112]: 4b2f2e5888831da1 -Block 0013 [113]: 8097cfa74319e9a6 -Block 0013 [114]: d9d2a50cdda6e52c -Block 0013 [115]: 39f7e9e70a8fc338 -Block 0013 [116]: 00a53fba2c35f3d6 -Block 0013 [117]: 8c93edd0ff109ca1 -Block 0013 [118]: f6075da5089f6509 -Block 0013 [119]: bf06e904ef71e7b2 -Block 0013 [120]: c7052c3a08ac9384 -Block 0013 [121]: a283f90913024a36 -Block 0013 [122]: d1097e4b32547ab2 -Block 0013 [123]: 14f15ce9846360cf -Block 0013 [124]: e896c41d236001a5 -Block 0013 [125]: 28834b042100ffff -Block 0013 [126]: cd4684cbb6e07746 -Block 0013 [127]: 9e9e5138ae2447c6 -Block 0014 [ 0]: 464fe499fd4bc54a -Block 0014 [ 1]: 01ca27117a522b27 -Block 0014 [ 2]: cefb91b50a87ec01 -Block 0014 [ 3]: 0bd05a9a7af64404 -Block 0014 [ 4]: 41514da378231234 -Block 0014 [ 5]: cc3c841b4962d7e6 -Block 0014 [ 6]: 59d32fdfa0f1799c -Block 0014 [ 7]: 27cad6e8edad4f2c -Block 0014 [ 8]: 594398209f4b2930 -Block 0014 [ 9]: f6c5854c48e52087 -Block 0014 [ 10]: 29d68e913c165052 -Block 0014 [ 11]: ce2fb5ab0f259e1f -Block 0014 [ 12]: 3ba0c01b6b7786d1 -Block 0014 [ 13]: 3c00b361c52adae1 -Block 0014 [ 14]: 3a86e3364e49fa6e -Block 0014 [ 15]: db551315c92412f7 -Block 0014 [ 16]: 528d22685ecbe099 -Block 0014 [ 17]: 0771dc1de2c966bf -Block 0014 [ 18]: b144f684b0e297cb -Block 0014 [ 19]: a23b7edda45b4e67 -Block 0014 [ 20]: 67fb1a46a13ad6ea -Block 0014 [ 21]: 9f1dd5edf2d9eb38 -Block 0014 [ 22]: bb2cafbb4897b681 -Block 0014 [ 23]: 0cb4c83cd099415e -Block 0014 [ 24]: da038126b8389fca -Block 0014 [ 25]: ce8f9af6da253e4f -Block 0014 [ 26]: 92f710c97b9f1a93 -Block 0014 [ 27]: 4d8a396ead1f1b3f -Block 0014 [ 28]: 926c1378e72539b1 -Block 0014 [ 29]: 46534e08a849cc26 -Block 0014 [ 30]: c990cb8c547e8a1e -Block 0014 [ 31]: 88b8edf87ece7489 -Block 0014 [ 32]: 4e69a49536b34b2e -Block 0014 [ 33]: f565f19fed18634a -Block 0014 [ 34]: 267d9281fcfafcd7 -Block 0014 [ 35]: 150c54e6e1e509f1 -Block 0014 [ 36]: 04b62fc3c290d9cf -Block 0014 [ 37]: 03e5edb36f774565 -Block 0014 [ 38]: 6fdca22c7481ed92 -Block 0014 [ 39]: 2d2be57e0ae66e0b -Block 0014 [ 40]: 42865d66ac66c1b3 -Block 0014 [ 41]: f843b00c30d7c44f -Block 0014 [ 42]: 5e412a9e2d78a1cc -Block 0014 [ 43]: cf217c5b54fdabec -Block 0014 [ 44]: d6d5c47336e51500 -Block 0014 [ 45]: 2e99184e7e141c40 -Block 0014 [ 46]: 8aa25d6a64b77d55 -Block 0014 [ 47]: d61047ee538eb859 -Block 0014 [ 48]: 37e959cef2486752 -Block 0014 [ 49]: 9d9b9432b971d5c8 -Block 0014 [ 50]: de1dfe11560c27c2 -Block 0014 [ 51]: 7463c62e208d9a50 -Block 0014 [ 52]: 1a271dcd0843ecdd -Block 0014 [ 53]: a4b6a899d90b4216 -Block 0014 [ 54]: 5aa12825aba07285 -Block 0014 [ 55]: e4c55247c2be17ac -Block 0014 [ 56]: d2f98ffbef59c5d1 -Block 0014 [ 57]: b06dec47496fe53b -Block 0014 [ 58]: 97c77c0aebd0fe77 -Block 0014 [ 59]: d428ee00d7ffb69a -Block 0014 [ 60]: 994609d7fdf59129 -Block 0014 [ 61]: 44ddec16911fa14e -Block 0014 [ 62]: 6bac7e6b73a99555 -Block 0014 [ 63]: b9cd8040e25ab661 -Block 0014 [ 64]: a910eb8e41cf223f -Block 0014 [ 65]: 722fd0baa5b77c73 -Block 0014 [ 66]: 0b44f42d90da09fa -Block 0014 [ 67]: deb45959e84b5f57 -Block 0014 [ 68]: 80b9388d473ff3f3 -Block 0014 [ 69]: 2e30383755ef7114 -Block 0014 [ 70]: 7b2169c31fe6f39a -Block 0014 [ 71]: 9e7583bfcde8e7b6 -Block 0014 [ 72]: dcf529aff86152bb -Block 0014 [ 73]: 31451434cedfaeac -Block 0014 [ 74]: 88d86ffc5ba97e6f -Block 0014 [ 75]: 78335f8de49f182b -Block 0014 [ 76]: 9048a85e52e84c34 -Block 0014 [ 77]: cdfa26b74260f3f2 -Block 0014 [ 78]: 68328318c0cd0702 -Block 0014 [ 79]: cedbff36e47cae15 -Block 0014 [ 80]: 21ff51c6aed6d794 -Block 0014 [ 81]: dd8e212e2e46c0f6 -Block 0014 [ 82]: 9485c1a009bd5e98 -Block 0014 [ 83]: 9479bd87f489267d -Block 0014 [ 84]: 36d19db1b3894049 -Block 0014 [ 85]: 17625eaad7eb635f -Block 0014 [ 86]: 08afd5df602241e2 -Block 0014 [ 87]: d12f716d01def27a -Block 0014 [ 88]: e10451a6441ecd00 -Block 0014 [ 89]: 81b2ccdc64736c07 -Block 0014 [ 90]: 07bb4d968b09b954 -Block 0014 [ 91]: 442e179652c03202 -Block 0014 [ 92]: 2663dfd4ed026986 -Block 0014 [ 93]: 21dcbad0d595f34c -Block 0014 [ 94]: f290c650c607c61e -Block 0014 [ 95]: 0558c655f8baacb2 -Block 0014 [ 96]: 76880b01adcce90f -Block 0014 [ 97]: 4f9060d2c6065d59 -Block 0014 [ 98]: c11f4eb991497926 -Block 0014 [ 99]: df91c784b49cfa8a -Block 0014 [100]: b28e4591441e80d5 -Block 0014 [101]: 6210f99cc16bf292 -Block 0014 [102]: 3773ca1ff7918a52 -Block 0014 [103]: bdaad928b768f9e9 -Block 0014 [104]: 8ca72c318c9e4eaa -Block 0014 [105]: 93d6a168756cc4df -Block 0014 [106]: 531c0f8459e00218 -Block 0014 [107]: 24cd1b413c399ac8 -Block 0014 [108]: 85d74155ca0afbc3 -Block 0014 [109]: e31c316e7a391faa -Block 0014 [110]: 53e9550145a43efa -Block 0014 [111]: 0efaf72fee17caf8 -Block 0014 [112]: 6e53a1b3b4451058 -Block 0014 [113]: 326429769306e1cd -Block 0014 [114]: 5f28af8f91b9094b -Block 0014 [115]: 86ec80f642192573 -Block 0014 [116]: 743c986ada4f4279 -Block 0014 [117]: 4672258b7ac2db20 -Block 0014 [118]: cd4c5ef34f20f7bd -Block 0014 [119]: c633106a5ff76cca -Block 0014 [120]: e15b5f635bba35ed -Block 0014 [121]: ed2563411ee74df7 -Block 0014 [122]: 33641bd5355327d8 -Block 0014 [123]: 2417d1d6977cbbdf -Block 0014 [124]: 4a84eca8fbd6b23a -Block 0014 [125]: aa8c5732a97e917e -Block 0014 [126]: 70e8d8c96fbcaf79 -Block 0014 [127]: 018888d29ee05f5a -Block 0015 [ 0]: 603ea679f1f7f248 -Block 0015 [ 1]: 51a571c385f5ae35 -Block 0015 [ 2]: 7c3362cd969131c5 -Block 0015 [ 3]: dfb8c198f2780d3e -Block 0015 [ 4]: c1e8e34f1518a415 -Block 0015 [ 5]: 828f73908e5ff6bc -Block 0015 [ 6]: 168506eaeae05625 -Block 0015 [ 7]: 9443dbd5a6a34152 -Block 0015 [ 8]: b1fc6687b6c1f551 -Block 0015 [ 9]: a943dfaeb6b48116 -Block 0015 [ 10]: ebf2b2633b70f35e -Block 0015 [ 11]: 33da4887c873fff2 -Block 0015 [ 12]: 07ea6837a6474d37 -Block 0015 [ 13]: 3160ebf9f74f9ddf -Block 0015 [ 14]: 9d84df5f33ca9058 -Block 0015 [ 15]: 2fb11cddd7f966f6 -Block 0015 [ 16]: 3368e81e0b610af2 -Block 0015 [ 17]: 58a7f918c416cc7e -Block 0015 [ 18]: 8edb15b8658b1678 -Block 0015 [ 19]: 923c66271573e83c -Block 0015 [ 20]: 71368b07cb9ec2bb -Block 0015 [ 21]: abae2356cd9054ca -Block 0015 [ 22]: ec213efd5a710eed -Block 0015 [ 23]: 029899dfc5d97961 -Block 0015 [ 24]: 83c20d46709f4846 -Block 0015 [ 25]: bcf0c30d35ed67f1 -Block 0015 [ 26]: 476549a704059ff9 -Block 0015 [ 27]: a36d09d17ca38288 -Block 0015 [ 28]: 2bbdd13b236e6f77 -Block 0015 [ 29]: 3cf08ae267be5c1c -Block 0015 [ 30]: 7ad9e9f695a7d8f6 -Block 0015 [ 31]: a5218e662af06188 -Block 0015 [ 32]: fef135b2545f0c23 -Block 0015 [ 33]: fdc6c6552ae5abd6 -Block 0015 [ 34]: e214be48ab403d6e -Block 0015 [ 35]: 0aea253269b32b8a -Block 0015 [ 36]: d0fcdf7a175c3065 -Block 0015 [ 37]: 16c08c1a401ac22c -Block 0015 [ 38]: b6ebf9a47b78ae82 -Block 0015 [ 39]: 40c0d3a431d427cb -Block 0015 [ 40]: 1d2df60774b7516c -Block 0015 [ 41]: 970c0594bf1713ce -Block 0015 [ 42]: caacc697b1a924fb -Block 0015 [ 43]: b0fb0798fc30f008 -Block 0015 [ 44]: 5d479f4719cda2bf -Block 0015 [ 45]: 8817e1456a05ea6f -Block 0015 [ 46]: ef0efd291b92072a -Block 0015 [ 47]: 3a780a8cebe24df0 -Block 0015 [ 48]: 0a0f36708d009961 -Block 0015 [ 49]: e84fd081785e063e -Block 0015 [ 50]: 3aebd3af46afc993 -Block 0015 [ 51]: 9790053e206326e7 -Block 0015 [ 52]: a6698e15adffe4d7 -Block 0015 [ 53]: 17fc42f0ab69daf6 -Block 0015 [ 54]: 13e801bb0cb130ac -Block 0015 [ 55]: 74c7936ec777b871 -Block 0015 [ 56]: a0790fdfd41c239c -Block 0015 [ 57]: d74c250b3121d152 -Block 0015 [ 58]: 281f4425d101ad0b -Block 0015 [ 59]: 0be22b3281ad2682 -Block 0015 [ 60]: 7e58fdb0fe4341c5 -Block 0015 [ 61]: 7f0583da9709897f -Block 0015 [ 62]: 681fe8e0ca6b1695 -Block 0015 [ 63]: 4c82c9b2df29eb43 -Block 0015 [ 64]: 39bfdc09e2a0cd2c -Block 0015 [ 65]: 26a802e658b08bef -Block 0015 [ 66]: ae718a50c8b36a6a -Block 0015 [ 67]: 91dfcdc079f34a1a -Block 0015 [ 68]: 022fdcd482307022 -Block 0015 [ 69]: a01e00a7edbac6fb -Block 0015 [ 70]: f733e881c118aa60 -Block 0015 [ 71]: c3e9f578ceb4e304 -Block 0015 [ 72]: c2f9ab41fc414115 -Block 0015 [ 73]: 0be7e099471776f7 -Block 0015 [ 74]: a9cf9956c86573e6 -Block 0015 [ 75]: 3f578a80a849cff9 -Block 0015 [ 76]: c7e3fc9e98f31471 -Block 0015 [ 77]: 42aecfc7b1de9948 -Block 0015 [ 78]: 1d57c7a1272b411d -Block 0015 [ 79]: 35fa53c2bd8b60ae -Block 0015 [ 80]: 36946b2539dda39c -Block 0015 [ 81]: fe67152e6cbe4982 -Block 0015 [ 82]: aad7c71ee4ccb815 -Block 0015 [ 83]: a6bf82bbd66eb497 -Block 0015 [ 84]: e98a7e8ea4f112cb -Block 0015 [ 85]: 3b9739ac57c554bf -Block 0015 [ 86]: 7d42c2c864dfc6d7 -Block 0015 [ 87]: eec7b548af5dd60d -Block 0015 [ 88]: 3cf9455dabe479ed -Block 0015 [ 89]: eb13c9385b4acca1 -Block 0015 [ 90]: 6a117a05a0e1bb28 -Block 0015 [ 91]: 37ed6e0757e5f90f -Block 0015 [ 92]: c65e56b9dab724ab -Block 0015 [ 93]: feb99f41fe526cb1 -Block 0015 [ 94]: f786c4f5cf059e0c -Block 0015 [ 95]: 71db252a2f4b9ed2 -Block 0015 [ 96]: 229d49ab07869a0a -Block 0015 [ 97]: c32662ec9787492d -Block 0015 [ 98]: 5357479f687d9fc1 -Block 0015 [ 99]: a1a909546c0e6b00 -Block 0015 [100]: 8ea67c98294f92ed -Block 0015 [101]: d22dfd0daa54e93f -Block 0015 [102]: da3491c6459dec56 -Block 0015 [103]: ec8c7390216ea15a -Block 0015 [104]: fc9e949d441d1a4e -Block 0015 [105]: 02e380d6957e504b -Block 0015 [106]: 0bd1228a3012bb24 -Block 0015 [107]: 2f50cf0174c5d7d0 -Block 0015 [108]: adb8c69342185bee -Block 0015 [109]: a77cda66bf9982b9 -Block 0015 [110]: 50157252fe6fc4ef -Block 0015 [111]: 89ce6579014b9c4c -Block 0015 [112]: 937b1f6a3e284633 -Block 0015 [113]: d2b1a673d7435110 -Block 0015 [114]: 062c9baf56a8b934 -Block 0015 [115]: ac7dddf61f0ffdd9 -Block 0015 [116]: c6a368e433f4f7c9 -Block 0015 [117]: 5cc234b0de9285ba -Block 0015 [118]: 5d4b8ac62c3ca1a2 -Block 0015 [119]: 5c401334236bd30e -Block 0015 [120]: a8970643f53adef3 -Block 0015 [121]: 7e4d52a2c6d13a4d -Block 0015 [122]: d96227253b2326ea -Block 0015 [123]: e53d4d32bc256c93 -Block 0015 [124]: c9f1dd4e0ec95dd6 -Block 0015 [125]: bb16f7f16252f690 -Block 0015 [126]: ed270d162b295110 -Block 0015 [127]: 902f2b9becfc2a4b -Block 0016 [ 0]: f836c8867716a95d -Block 0016 [ 1]: 5a4bbaa6cf32467f -Block 0016 [ 2]: 647e9aa3fc560638 -Block 0016 [ 3]: ba25f0998ebcfa33 -Block 0016 [ 4]: 900f4408aabd1bb7 -Block 0016 [ 5]: 8bd32329f62d4b10 -Block 0016 [ 6]: ac707aabf76ce122 -Block 0016 [ 7]: d4db0063a2957e5d -Block 0016 [ 8]: a94142b9a40be515 -Block 0016 [ 9]: 263b51c8382d8587 -Block 0016 [ 10]: bf9465acb39eb20c -Block 0016 [ 11]: 20d8fdd516335d90 -Block 0016 [ 12]: bc8151d59a7bae83 -Block 0016 [ 13]: 7b95f1c93208ea74 -Block 0016 [ 14]: 30bb2707ae422542 -Block 0016 [ 15]: cbddfc342ebe96b4 -Block 0016 [ 16]: 246f4b3b6937b59e -Block 0016 [ 17]: 4ba7cc438bb1386f -Block 0016 [ 18]: bc1fd9fb6fe3f6f8 -Block 0016 [ 19]: dae17cb442f9b24c -Block 0016 [ 20]: 3b3fc8c27189c245 -Block 0016 [ 21]: d4d7d0899e9ea324 -Block 0016 [ 22]: 3ce0fb5494ba0170 -Block 0016 [ 23]: 82e5dc4f44e8b47e -Block 0016 [ 24]: a9aee19dce0afb3d -Block 0016 [ 25]: 4b9285c7ff0e0ce8 -Block 0016 [ 26]: 28238fd7e0c3ec24 -Block 0016 [ 27]: 5caeaca234324edc -Block 0016 [ 28]: f584af325ebfffa6 -Block 0016 [ 29]: 045bc01a53084a77 -Block 0016 [ 30]: e109164036727cdf -Block 0016 [ 31]: 1d70d0b4c938b25d -Block 0016 [ 32]: c0743c96c42f74ad -Block 0016 [ 33]: 5a8a03c8f46b9403 -Block 0016 [ 34]: 2238c6a81150dd4d -Block 0016 [ 35]: 1839e472eeeb8e5d -Block 0016 [ 36]: 32d4283b30cbe865 -Block 0016 [ 37]: a542972b4e3753fe -Block 0016 [ 38]: 3f3aad5eea35871f -Block 0016 [ 39]: 29ba28eacaa5c78e -Block 0016 [ 40]: ae006eae0c91ad2c -Block 0016 [ 41]: 8f914e0a5325134e -Block 0016 [ 42]: 545d1e53d212ff70 -Block 0016 [ 43]: e1bb1b4a69250da0 -Block 0016 [ 44]: 9598c702643d6912 -Block 0016 [ 45]: 3120a69431919925 -Block 0016 [ 46]: 267c164eb862ef68 -Block 0016 [ 47]: 58ec801c08b2a209 -Block 0016 [ 48]: 8434d9c58bb0c83c -Block 0016 [ 49]: c355b1a66654f11f -Block 0016 [ 50]: ecaf01bf6b020fb2 -Block 0016 [ 51]: 2f80a7d1262946fb -Block 0016 [ 52]: f2bbfcc21cf454ca -Block 0016 [ 53]: 166391329b9a3d9f -Block 0016 [ 54]: 89b5d0f35ee79a41 -Block 0016 [ 55]: d82ae0163df57fed -Block 0016 [ 56]: 87e2107fe01defcd -Block 0016 [ 57]: 308626494e60a17f -Block 0016 [ 58]: 938403add94b7b0b -Block 0016 [ 59]: 552911a95afc65bd -Block 0016 [ 60]: cfe25f13b0e9ac9a -Block 0016 [ 61]: fc4b24701453d163 -Block 0016 [ 62]: 8227318e53a02d82 -Block 0016 [ 63]: 21e3868e59d26094 -Block 0016 [ 64]: 406a7c293dd09893 -Block 0016 [ 65]: 8fab59fa2babd787 -Block 0016 [ 66]: 5c9da0afeeb011dc -Block 0016 [ 67]: d7fead76e8beefed -Block 0016 [ 68]: 91a3c3d0314379df -Block 0016 [ 69]: d4996fd2cb307612 -Block 0016 [ 70]: 479c9afc5fd7df83 -Block 0016 [ 71]: 91f712370a2b2e50 -Block 0016 [ 72]: ce62c61596018526 -Block 0016 [ 73]: 337f114ee290c307 -Block 0016 [ 74]: 8ae21a80e12d0b54 -Block 0016 [ 75]: 378f97ecf04ec20b -Block 0016 [ 76]: 32b60ae20ad4e0dd -Block 0016 [ 77]: 770a606fcf9e97a3 -Block 0016 [ 78]: b60142050eb6279f -Block 0016 [ 79]: 575da5e303a30734 -Block 0016 [ 80]: 20582e58e2aa8014 -Block 0016 [ 81]: 3e4ad6ba61641b82 -Block 0016 [ 82]: d180814d2fd1e616 -Block 0016 [ 83]: 2500b543e8d9348f -Block 0016 [ 84]: 7c26490c272be0fa -Block 0016 [ 85]: ef7bbb8de2331053 -Block 0016 [ 86]: a9577d5498ccd0f4 -Block 0016 [ 87]: 59969085678603a8 -Block 0016 [ 88]: 9eae26d422a33fc8 -Block 0016 [ 89]: 9c64d10a63f57074 -Block 0016 [ 90]: f347be4d488db2ed -Block 0016 [ 91]: 8d5b6cb28b5a19b0 -Block 0016 [ 92]: d86e4e6383dd2e6d -Block 0016 [ 93]: f2d2668b62b1a509 -Block 0016 [ 94]: 9d07c6329537bbf3 -Block 0016 [ 95]: 5143198e6c6043dd -Block 0016 [ 96]: f10ae67a04a6a65d -Block 0016 [ 97]: bbd5b7bdd2d537c2 -Block 0016 [ 98]: 013697d11cc0a779 -Block 0016 [ 99]: 3a55d5f35217ee01 -Block 0016 [100]: ebee5db9b8b39ba4 -Block 0016 [101]: efd5091112d5b476 -Block 0016 [102]: 0fd56e730bb61cc7 -Block 0016 [103]: cca6e754652c9753 -Block 0016 [104]: fdc7de8f402e9c30 -Block 0016 [105]: 215147cf5757c82f -Block 0016 [106]: 22b0d7672b12e4a7 -Block 0016 [107]: 6e32440373ff7d8f -Block 0016 [108]: 46ff737e2ecc4655 -Block 0016 [109]: 31dcd39c1348711d -Block 0016 [110]: 19fd948d367828d5 -Block 0016 [111]: 81211b6835204ac8 -Block 0016 [112]: 654a8be36e225e7f -Block 0016 [113]: b544dbdc7cfe4f25 -Block 0016 [114]: 48cfaad52a6df0dc -Block 0016 [115]: 350f7225a0f0a998 -Block 0016 [116]: f24baaeedfc1a089 -Block 0016 [117]: c360f609af476cba -Block 0016 [118]: c63c26deff4fc434 -Block 0016 [119]: 1be928444f947c27 -Block 0016 [120]: 18f278838397f4f3 -Block 0016 [121]: 9db306ee0e37be90 -Block 0016 [122]: e952905cfad5f42b -Block 0016 [123]: e6fd94188892b180 -Block 0016 [124]: caaa7624da0c7804 -Block 0016 [125]: ba7f688ce75ab500 -Block 0016 [126]: 3f3617b538632d14 -Block 0016 [127]: 55d601b6e6b0a93e -Block 0017 [ 0]: d3809e57fd122a36 -Block 0017 [ 1]: 27018400b40b6bd4 -Block 0017 [ 2]: 2eb5b349cda48fdb -Block 0017 [ 3]: 8c521093b5689d2d -Block 0017 [ 4]: 757bdf1deedda6d3 -Block 0017 [ 5]: dc07883fdadd0cd2 -Block 0017 [ 6]: fe371ca4088efdc6 -Block 0017 [ 7]: 7c87450f671ae946 -Block 0017 [ 8]: 183f7c12e15e0f1d -Block 0017 [ 9]: 679c5df134ee1f53 -Block 0017 [ 10]: 58e3679afa64e3ba -Block 0017 [ 11]: f3e42838526fee18 -Block 0017 [ 12]: 908f66c2693ffab4 -Block 0017 [ 13]: b1ef6cf1bd798b84 -Block 0017 [ 14]: 3ec433347fefcbe5 -Block 0017 [ 15]: 6e77dbbe5e3e2b98 -Block 0017 [ 16]: 5825a9a768529f5e -Block 0017 [ 17]: 0e78d85f0e84b2d8 -Block 0017 [ 18]: b25e77fe4055bc58 -Block 0017 [ 19]: 5fa90a623f667c03 -Block 0017 [ 20]: 2d328a4e5bb76f56 -Block 0017 [ 21]: d9363cc3f91a4305 -Block 0017 [ 22]: 1f4b73633fd449a1 -Block 0017 [ 23]: 6e9e53a5ef87c14a -Block 0017 [ 24]: c5c0e550d61c051f -Block 0017 [ 25]: 5a26d972eaf76bfb -Block 0017 [ 26]: fbcbc4188c8c046e -Block 0017 [ 27]: bc90cd94be174eb5 -Block 0017 [ 28]: b80cc0e6f43bf47f -Block 0017 [ 29]: f197c2cb917ea7f8 -Block 0017 [ 30]: 6c71dfd84ef19721 -Block 0017 [ 31]: 4d6fdb854dd626bc -Block 0017 [ 32]: b8da64ba92e8a4af -Block 0017 [ 33]: d0514211c433cc99 -Block 0017 [ 34]: aa3f38f68bf6d132 -Block 0017 [ 35]: 9f1b318a2966cd09 -Block 0017 [ 36]: 498ecaf3121f536c -Block 0017 [ 37]: cc993fe794ecb670 -Block 0017 [ 38]: 07a9140fe68437ee -Block 0017 [ 39]: 159cbe19720fbd1a -Block 0017 [ 40]: 4d295994454b9205 -Block 0017 [ 41]: 4a6e4ae9c6294094 -Block 0017 [ 42]: e0f8cd2e5c659727 -Block 0017 [ 43]: e6c3f289a5793bfd -Block 0017 [ 44]: 15c797a37a8a8ea1 -Block 0017 [ 45]: dc808110ff558d6a -Block 0017 [ 46]: 1a5b59df6789e4cd -Block 0017 [ 47]: 4f634c7faa765d12 -Block 0017 [ 48]: 0d401f0b8d3fa3a2 -Block 0017 [ 49]: 1ba8bccb5137d6b2 -Block 0017 [ 50]: 6e925344599411bd -Block 0017 [ 51]: 7cb832ff5effa69c -Block 0017 [ 52]: d7631ef9410c81ac -Block 0017 [ 53]: adb5e7c5a9e5ee14 -Block 0017 [ 54]: d2263024d7dca964 -Block 0017 [ 55]: 4b4771c86ab28b85 -Block 0017 [ 56]: 79a09d79ca354333 -Block 0017 [ 57]: 6f3f5d45545ad500 -Block 0017 [ 58]: c8396ed371075a63 -Block 0017 [ 59]: e33a3b847439afff -Block 0017 [ 60]: 067a10405ad20ab2 -Block 0017 [ 61]: 518f07d02ad01a53 -Block 0017 [ 62]: 6d7efef33c97a6f0 -Block 0017 [ 63]: 20a0c2de6dd3c691 -Block 0017 [ 64]: 111bf03e43199f49 -Block 0017 [ 65]: 2ccc61157376219e -Block 0017 [ 66]: 3e941c50ec51a496 -Block 0017 [ 67]: 1dc0c5b8298d1bba -Block 0017 [ 68]: 8926cf9eee3716a0 -Block 0017 [ 69]: 589269c4ec6a13d7 -Block 0017 [ 70]: e3fad0bae9c71b1b -Block 0017 [ 71]: 6788c55d89db279a -Block 0017 [ 72]: 8f9a6cb1ae837299 -Block 0017 [ 73]: 9b417ea21f94c675 -Block 0017 [ 74]: 60516ddded254e8f -Block 0017 [ 75]: 708da0a62da471bc -Block 0017 [ 76]: 23be51f1da5fa6c2 -Block 0017 [ 77]: 3d654b78d4365097 -Block 0017 [ 78]: e0c50ebdd1ee10b5 -Block 0017 [ 79]: 4b1e8568fd44fbc2 -Block 0017 [ 80]: fdeaf05a29c509e3 -Block 0017 [ 81]: e9b00163c325096c -Block 0017 [ 82]: a00e565603383ded -Block 0017 [ 83]: 162eba41653cdfcb -Block 0017 [ 84]: 885280cb80784958 -Block 0017 [ 85]: 7523c5fb2d9f4739 -Block 0017 [ 86]: da3b098695b8aed7 -Block 0017 [ 87]: ee65585c4ce64e55 -Block 0017 [ 88]: 21c5babe35daba71 -Block 0017 [ 89]: a790750bee4b4361 -Block 0017 [ 90]: 5abbcf4a40653f30 -Block 0017 [ 91]: bcbe524de12b23db -Block 0017 [ 92]: b65696da967ba08d -Block 0017 [ 93]: e243e42d5f8dce1e -Block 0017 [ 94]: 5b8c7410ae02faaa -Block 0017 [ 95]: 3e03cb2c5c85496e -Block 0017 [ 96]: ea598cb74e12061b -Block 0017 [ 97]: adcfe1fce7ae1c3e -Block 0017 [ 98]: 728aaffcdc65b0e3 -Block 0017 [ 99]: 4d8d42d7f2b5465d -Block 0017 [100]: c70bf4211b94781f -Block 0017 [101]: 0bd066da9fa67568 -Block 0017 [102]: 27106a16e99c3820 -Block 0017 [103]: ae0758d6242923cb -Block 0017 [104]: b407bdd5f28c05a1 -Block 0017 [105]: f6d90560bcb6318e -Block 0017 [106]: 4c5210db01183f45 -Block 0017 [107]: cd9ee9c94df96e76 -Block 0017 [108]: e67355c9eef04f59 -Block 0017 [109]: 9ccf945294bcc3e4 -Block 0017 [110]: 922bc6af265ca962 -Block 0017 [111]: 2079e039460ec203 -Block 0017 [112]: a0e5bc615fc9ec33 -Block 0017 [113]: ffc3b98b6ed99d2f -Block 0017 [114]: 1072f708aea08b8e -Block 0017 [115]: a403be88ef0551e8 -Block 0017 [116]: 4f15c6100dcff2e6 -Block 0017 [117]: 4c03d3981f3b97bd -Block 0017 [118]: a46b77a99582507a -Block 0017 [119]: e221b79479ff67a8 -Block 0017 [120]: e4608ec676d5c1f7 -Block 0017 [121]: 8b6aebe9d18e5ead -Block 0017 [122]: 68ce6934678c18e1 -Block 0017 [123]: 6a6c0394eb8364f3 -Block 0017 [124]: 698108ae1f0af293 -Block 0017 [125]: 6fa0f6019a3a26cb -Block 0017 [126]: b868100fd8592784 -Block 0017 [127]: 6e58d5bbcc595213 -Block 0018 [ 0]: 57cebef82247f856 -Block 0018 [ 1]: 5e1f658f847d7865 -Block 0018 [ 2]: a7c6fe3ce6328555 -Block 0018 [ 3]: 631a4d11151e3705 -Block 0018 [ 4]: 6d284d4539081116 -Block 0018 [ 5]: 20d3a3ddd286d249 -Block 0018 [ 6]: fec04211ce617a63 -Block 0018 [ 7]: 7ee644759f4ebabc -Block 0018 [ 8]: 77562a61df6192e6 -Block 0018 [ 9]: f265d9297cf6614e -Block 0018 [ 10]: b2e83323b0fc0b58 -Block 0018 [ 11]: eccdb2ba777b86e1 -Block 0018 [ 12]: 5beae34fb3a6464c -Block 0018 [ 13]: b84166f5573d083c -Block 0018 [ 14]: 1fcda2af39c04119 -Block 0018 [ 15]: b8f70b179be17b47 -Block 0018 [ 16]: f3d8e53e6acc4177 -Block 0018 [ 17]: 19b95a946fed4e76 -Block 0018 [ 18]: ba2a8da965fc652f -Block 0018 [ 19]: b6701b63b3c4fc96 -Block 0018 [ 20]: 8c0b9123f5c11b4c -Block 0018 [ 21]: a0eb8910a8bd6d94 -Block 0018 [ 22]: 93aa541f6111cc04 -Block 0018 [ 23]: b3bec4a835858bf4 -Block 0018 [ 24]: 6e9ffdead30aa373 -Block 0018 [ 25]: dddd7ebaf76ea68f -Block 0018 [ 26]: 700692576d8960c3 -Block 0018 [ 27]: 45dcd0e76ce97c06 -Block 0018 [ 28]: 21b4ecad0175b5e4 -Block 0018 [ 29]: af4ed71c398c3ee2 -Block 0018 [ 30]: 80150398b797ce1e -Block 0018 [ 31]: 2daad86a706f4a4f -Block 0018 [ 32]: 420910e6608e98b7 -Block 0018 [ 33]: 4b29efc147979616 -Block 0018 [ 34]: 4f07907f12fa57dd -Block 0018 [ 35]: 2a81c8fc27ce4f90 -Block 0018 [ 36]: 529b811ba96962c4 -Block 0018 [ 37]: f2fc49e09b7af4b2 -Block 0018 [ 38]: a3bb2de56f665a4b -Block 0018 [ 39]: 3e514d87d7a29f21 -Block 0018 [ 40]: ec6b790cb0e59612 -Block 0018 [ 41]: 3bb1e91e151a466f -Block 0018 [ 42]: b73d5669c1d8216e -Block 0018 [ 43]: 7921ef01b7a4a93c -Block 0018 [ 44]: c8f6a995b360a712 -Block 0018 [ 45]: c34c6643843bd1a8 -Block 0018 [ 46]: 2b38febb4cd8f83f -Block 0018 [ 47]: dc4aa5ba31eff726 -Block 0018 [ 48]: df14215ffed3c376 -Block 0018 [ 49]: 9b5dbf6414a9f1d2 -Block 0018 [ 50]: c29eff069950104d -Block 0018 [ 51]: 2d6338ef7fba9bdb -Block 0018 [ 52]: 9cc4a960bb018ab8 -Block 0018 [ 53]: c0a5e0d3abbf0f8a -Block 0018 [ 54]: 09286cd24df88a53 -Block 0018 [ 55]: 134e6e53b4a1bf27 -Block 0018 [ 56]: 3d13daee8f39f022 -Block 0018 [ 57]: 6f1948c976a77be1 -Block 0018 [ 58]: d87832289e19e4ba -Block 0018 [ 59]: 7911cc3b53031ecd -Block 0018 [ 60]: b039845d8fdabb03 -Block 0018 [ 61]: 653addad2bacb75b -Block 0018 [ 62]: f65b51e7d8cad424 -Block 0018 [ 63]: 1f1d8139580c42cb -Block 0018 [ 64]: 5df05979b549dc5a -Block 0018 [ 65]: b20119fa66364ed9 -Block 0018 [ 66]: c97d32c279b9e2a1 -Block 0018 [ 67]: a918cf46e6737eae -Block 0018 [ 68]: ff21a9765032ef71 -Block 0018 [ 69]: 770f9f55a1e0200e -Block 0018 [ 70]: 480640feb18878ee -Block 0018 [ 71]: 0b77e9233263a358 -Block 0018 [ 72]: 0ccd9e0ebb663e1e -Block 0018 [ 73]: ced6ad184df7f058 -Block 0018 [ 74]: a925f1a938c57899 -Block 0018 [ 75]: 488da2f7160d6b2a -Block 0018 [ 76]: 65ff5349e555c646 -Block 0018 [ 77]: 956a1540757fe764 -Block 0018 [ 78]: 3377c61981a12707 -Block 0018 [ 79]: 6eda3ab6e5e5eef8 -Block 0018 [ 80]: ff28308032454454 -Block 0018 [ 81]: 894ebc48430bf23a -Block 0018 [ 82]: f972de40f6a522ca -Block 0018 [ 83]: 7f49a08de82f7586 -Block 0018 [ 84]: 0a9019c61f419e5f -Block 0018 [ 85]: bb6373eef70f6d9b -Block 0018 [ 86]: f998096fc62599be -Block 0018 [ 87]: 881633292e2bb822 -Block 0018 [ 88]: a8930b1906414588 -Block 0018 [ 89]: 05adc6acd9fa9c3b -Block 0018 [ 90]: 2037174e25917500 -Block 0018 [ 91]: fafe025db1dce058 -Block 0018 [ 92]: f29f8690945d2c1b -Block 0018 [ 93]: b574e9a567c92aab -Block 0018 [ 94]: f41f39ce02847751 -Block 0018 [ 95]: d330c19a9157fdbe -Block 0018 [ 96]: f188b654ff3cd095 -Block 0018 [ 97]: ecf62aaa970134db -Block 0018 [ 98]: df0e5a2106bf3d9d -Block 0018 [ 99]: f270149014f17360 -Block 0018 [100]: be18751373df5e3f -Block 0018 [101]: e170117374a725b7 -Block 0018 [102]: c6bc16281586428d -Block 0018 [103]: c8807c5440d9bbd3 -Block 0018 [104]: 6bb82e0b5d4c2e0d -Block 0018 [105]: 970ede93e5e27ac5 -Block 0018 [106]: b5ea53ff534622ac -Block 0018 [107]: 9e31a90a85f46a62 -Block 0018 [108]: 5f4ef09dcbb5efab -Block 0018 [109]: 23395b9e4a40f367 -Block 0018 [110]: 72d21b94738593e4 -Block 0018 [111]: a670eedbeefa24a9 -Block 0018 [112]: 17b433b9fff934b3 -Block 0018 [113]: 9e32a1bcfedc24f5 -Block 0018 [114]: 8c7f89b2615962f2 -Block 0018 [115]: ff57e2e77b2b0b9e -Block 0018 [116]: 4600f965f407f74c -Block 0018 [117]: 08d3a4358c03a513 -Block 0018 [118]: cfae58aad32697f8 -Block 0018 [119]: 885eff2ac7f41837 -Block 0018 [120]: 8102758546e1a4e4 -Block 0018 [121]: 08b04d9a0ea9a613 -Block 0018 [122]: c256b07aa6468a27 -Block 0018 [123]: e4b64c775459a54c -Block 0018 [124]: 473bb3721002e35b -Block 0018 [125]: 473153000fa4c19b -Block 0018 [126]: 89f0318e36108337 -Block 0018 [127]: 922f0bccba570e30 -Block 0019 [ 0]: c5ad90619dfd5e40 -Block 0019 [ 1]: c7a17173d9d7fb02 -Block 0019 [ 2]: f53d0f0a42ee0a9a -Block 0019 [ 3]: 0b7c95192969e642 -Block 0019 [ 4]: 4ec957e5121f3f42 -Block 0019 [ 5]: cfcd0f545351d53b -Block 0019 [ 6]: 6c34a64d935b4658 -Block 0019 [ 7]: b1c1c307e575bddb -Block 0019 [ 8]: 6c4416051314ab4e -Block 0019 [ 9]: eaccc46dd8f286ac -Block 0019 [ 10]: 62a0006c7175dfc9 -Block 0019 [ 11]: 4adca8b27b853e25 -Block 0019 [ 12]: 86a7d4cb588b926f -Block 0019 [ 13]: a6e880192be9c7be -Block 0019 [ 14]: f0c0fb7163e2b077 -Block 0019 [ 15]: 9fbbd47dbd1ba544 -Block 0019 [ 16]: 6c7004e5e7299324 -Block 0019 [ 17]: 25fd6d2fe2c989ef -Block 0019 [ 18]: 66d6f0c88cb197be -Block 0019 [ 19]: c68bd38566a7889a -Block 0019 [ 20]: 6b59f19ea29b979a -Block 0019 [ 21]: 556774aadc3ca297 -Block 0019 [ 22]: 9ca1c21e961ce72a -Block 0019 [ 23]: f9f2543958ee6de0 -Block 0019 [ 24]: 00374860910b1734 -Block 0019 [ 25]: 9ff6c7f7fdc33655 -Block 0019 [ 26]: ae7d2f154985cc00 -Block 0019 [ 27]: 92a2c2482f099495 -Block 0019 [ 28]: 7738918b896f3d10 -Block 0019 [ 29]: 08e8c151ef9737ec -Block 0019 [ 30]: b8afe6375af2c425 -Block 0019 [ 31]: d7e6532c1ced5359 -Block 0019 [ 32]: 7be417b2d69cc776 -Block 0019 [ 33]: 2f6fbad042b2f4db -Block 0019 [ 34]: 5140dbe6e03c861f -Block 0019 [ 35]: f22d890534c7d2ec -Block 0019 [ 36]: 258963384931adcf -Block 0019 [ 37]: 436cf5639400c61d -Block 0019 [ 38]: e5a63ecdd892893c -Block 0019 [ 39]: 142303f752328d3c -Block 0019 [ 40]: b84d6cce42f3d817 -Block 0019 [ 41]: 652494812170e1d6 -Block 0019 [ 42]: 0b2b77f9cee1fdf6 -Block 0019 [ 43]: c0ecd695297e1d8a -Block 0019 [ 44]: 0fb2e95fd2501d97 -Block 0019 [ 45]: 17c31477c069de81 -Block 0019 [ 46]: e6a0304b074a6eb3 -Block 0019 [ 47]: 26b214308f38795c -Block 0019 [ 48]: 833065117a06860b -Block 0019 [ 49]: d232939089b96074 -Block 0019 [ 50]: 0ee7847f85b38318 -Block 0019 [ 51]: 5fb81785945027f5 -Block 0019 [ 52]: 66ee79d0649c1686 -Block 0019 [ 53]: 3168d562f60ce6eb -Block 0019 [ 54]: bc250a9b52bf4b79 -Block 0019 [ 55]: 1146b33494baaf3e -Block 0019 [ 56]: 5af799d7e5e5dc5d -Block 0019 [ 57]: 89fa4d5028946c9f -Block 0019 [ 58]: 4fd1a798e66663dd -Block 0019 [ 59]: 664c5598e474d6af -Block 0019 [ 60]: 4a1e655f90de3a52 -Block 0019 [ 61]: 65583cea2fe72c1b -Block 0019 [ 62]: 31e99d437b588dea -Block 0019 [ 63]: 810131ed2e8b9e65 -Block 0019 [ 64]: 57140b352a98809c -Block 0019 [ 65]: 3481662f102896d2 -Block 0019 [ 66]: d9c307711dd70af6 -Block 0019 [ 67]: 0fc4ac1b83b21810 -Block 0019 [ 68]: 2dae24938d937d66 -Block 0019 [ 69]: 2db9258eaa41d588 -Block 0019 [ 70]: adfd9117017aea52 -Block 0019 [ 71]: 0aebc8a663734e63 -Block 0019 [ 72]: 3396cb042fa4b880 -Block 0019 [ 73]: d4cb797e806a037d -Block 0019 [ 74]: a0f73b8e65666fc3 -Block 0019 [ 75]: 5f7bce07ca7a1a9c -Block 0019 [ 76]: 2e4629b685833c46 -Block 0019 [ 77]: 0a3ee3fee444ba36 -Block 0019 [ 78]: 3969024563655ce5 -Block 0019 [ 79]: c0a5abd78ef0340c -Block 0019 [ 80]: 0b5519a847a09112 -Block 0019 [ 81]: 96b6762e8665b8a0 -Block 0019 [ 82]: 843e8b1b4dd4a82b -Block 0019 [ 83]: c1232100906be7e6 -Block 0019 [ 84]: b58edd29906a9027 -Block 0019 [ 85]: 8b68b6b6d36b9834 -Block 0019 [ 86]: a7233e790cc6d3f8 -Block 0019 [ 87]: aa5355f0929c4e25 -Block 0019 [ 88]: a7bf6e2e15ab5153 -Block 0019 [ 89]: 8e67f62642cf57f4 -Block 0019 [ 90]: 27a5776e9a7b75a1 -Block 0019 [ 91]: 2b224c1e181b69ff -Block 0019 [ 92]: 0b8b8c0abcd1d13e -Block 0019 [ 93]: fab9b35bb3eab270 -Block 0019 [ 94]: ce9dbe7e3a0a52dc -Block 0019 [ 95]: e1e8f7f3190b8e1e -Block 0019 [ 96]: 886847dd5ed1f8e7 -Block 0019 [ 97]: fa6d5fe42cfb394a -Block 0019 [ 98]: e2eb739c588d8234 -Block 0019 [ 99]: ac2065febf36ce11 -Block 0019 [100]: b3cb7ccab2ffd914 -Block 0019 [101]: dd8092f3fff7970d -Block 0019 [102]: c8dae2e160cab03a -Block 0019 [103]: 37f22b36dfebf4db -Block 0019 [104]: 065bbc14bb0bacf0 -Block 0019 [105]: 83a1d51c798c6087 -Block 0019 [106]: a03604d715375f8a -Block 0019 [107]: e923aa07e8ab2f05 -Block 0019 [108]: 6c0ad55a7926bc90 -Block 0019 [109]: b9b36ec828ffdfb8 -Block 0019 [110]: de0ef5c4811b2689 -Block 0019 [111]: 5c4552c66dfb0c17 -Block 0019 [112]: 8a73ff2d0e32ed9e -Block 0019 [113]: 6c23835f0b616d34 -Block 0019 [114]: 449cb97303cf1125 -Block 0019 [115]: 7e2b8fcd2ddd9aeb -Block 0019 [116]: 247dece373dc3697 -Block 0019 [117]: bb2f3c2b502ceba2 -Block 0019 [118]: 0c0d8f96dde7434d -Block 0019 [119]: 774ef5d4a277649d -Block 0019 [120]: 7504d6f1d03c0af2 -Block 0019 [121]: 05c154722007b939 -Block 0019 [122]: 355b5642800985f3 -Block 0019 [123]: c96e5fd5893fa7d4 -Block 0019 [124]: 6972429b8fcf426a -Block 0019 [125]: 0ff43afbf9106cf4 -Block 0019 [126]: d76130589a9529b8 -Block 0019 [127]: ff105728dbed9657 -Block 0020 [ 0]: e97e984c9a0a4680 -Block 0020 [ 1]: 42695651c0c21502 -Block 0020 [ 2]: 688550ecf3b8a149 -Block 0020 [ 3]: 54d395b8b07ec587 -Block 0020 [ 4]: ddf6a33155b38ed7 -Block 0020 [ 5]: 3b1f998dda326511 -Block 0020 [ 6]: 7f97ac3d9a2bbf9b -Block 0020 [ 7]: a27b1b7ac6676309 -Block 0020 [ 8]: 485aece5fc3cd6a3 -Block 0020 [ 9]: 49bf335ba618a23a -Block 0020 [ 10]: 8a88e9e925d5183b -Block 0020 [ 11]: 2f7d04ac18ea96ab -Block 0020 [ 12]: 6a9f50381a60ab92 -Block 0020 [ 13]: ba7df623a93121ae -Block 0020 [ 14]: f3f273bc52a41207 -Block 0020 [ 15]: 36b4e08e05652348 -Block 0020 [ 16]: f88c278ea3981491 -Block 0020 [ 17]: 22a34c75759f0912 -Block 0020 [ 18]: 1e6462a023e62bbb -Block 0020 [ 19]: 0577a4f764f2a20b -Block 0020 [ 20]: a1efd6253ade82bb -Block 0020 [ 21]: 81dbf5c8455a8524 -Block 0020 [ 22]: 1bae23a8beada114 -Block 0020 [ 23]: 188c9816116da639 -Block 0020 [ 24]: 05bd99543f3907fb -Block 0020 [ 25]: b1b890cd005ccfa8 -Block 0020 [ 26]: 1f83e83507988f54 -Block 0020 [ 27]: 0b9692c75b1a65d2 -Block 0020 [ 28]: 9b7d295ace6adcfd -Block 0020 [ 29]: af01c0de42d753a0 -Block 0020 [ 30]: 3fe167f7dc207394 -Block 0020 [ 31]: 0a4e33a76c72e144 -Block 0020 [ 32]: 79a74d89cd804e34 -Block 0020 [ 33]: 9237f7a0ae9a4d0e -Block 0020 [ 34]: 0d160320f7c748f2 -Block 0020 [ 35]: 209870f6869b388a -Block 0020 [ 36]: 786b9215ade0ed30 -Block 0020 [ 37]: 418d4c6b3f042ebe -Block 0020 [ 38]: 831a0ba554ad8bf7 -Block 0020 [ 39]: 28e14dc0cc08c931 -Block 0020 [ 40]: a6a161729c772dff -Block 0020 [ 41]: f3324db122373805 -Block 0020 [ 42]: af4e084231220ba4 -Block 0020 [ 43]: 96e990b23fb09510 -Block 0020 [ 44]: bc6a4abca65e47f4 -Block 0020 [ 45]: f12789b5a6b25fbd -Block 0020 [ 46]: f800e966b67d385b -Block 0020 [ 47]: 173ed5f3e710b749 -Block 0020 [ 48]: 03d4dd0e15fc509a -Block 0020 [ 49]: f6cc9939e80900e6 -Block 0020 [ 50]: 93c884512d37d9a2 -Block 0020 [ 51]: ad4dafb167dfe39c -Block 0020 [ 52]: 08881f5c9431990b -Block 0020 [ 53]: d7ee8ce6cb74ebb6 -Block 0020 [ 54]: e264efef38081687 -Block 0020 [ 55]: cf420221c00d899c -Block 0020 [ 56]: 3df9cb9efa6deb77 -Block 0020 [ 57]: 65536cc67d0ad05a -Block 0020 [ 58]: 3fba9e1952e19b67 -Block 0020 [ 59]: f1a1f331ef40d048 -Block 0020 [ 60]: 04fa0694742fee2c -Block 0020 [ 61]: 32bd2eb3c55e5ae0 -Block 0020 [ 62]: a9c7205ffb68b28f -Block 0020 [ 63]: 658112db2feabc85 -Block 0020 [ 64]: 2cf847284d0921b3 -Block 0020 [ 65]: 2e539b5f05a65789 -Block 0020 [ 66]: 9f74bfde4246094a -Block 0020 [ 67]: 21f71cec771a994f -Block 0020 [ 68]: 502671b3198d83ad -Block 0020 [ 69]: 38f91177744c228c -Block 0020 [ 70]: 63b43e2ef56b5e7b -Block 0020 [ 71]: 7765db54b31c5521 -Block 0020 [ 72]: 981336e740ce20f6 -Block 0020 [ 73]: 7c3b4ce651e9fb5b -Block 0020 [ 74]: 0401d7d8cc9a42a3 -Block 0020 [ 75]: 714b58a1a936c453 -Block 0020 [ 76]: 49bc384451c5bf0a -Block 0020 [ 77]: 028894e2178d6e0c -Block 0020 [ 78]: 5496f8c54b09dc58 -Block 0020 [ 79]: e6eb176a966a4632 -Block 0020 [ 80]: 5fd3242e6c512e2e -Block 0020 [ 81]: be012a4516b19ecd -Block 0020 [ 82]: 5a029ae5b0ba77fc -Block 0020 [ 83]: 6bdf22f7170b33cd -Block 0020 [ 84]: 72d7181008703761 -Block 0020 [ 85]: 71a0a89e374da324 -Block 0020 [ 86]: a3029e6857c84d5d -Block 0020 [ 87]: be4e2d573ab4a5af -Block 0020 [ 88]: c7d6f811e2e1a452 -Block 0020 [ 89]: 544ff9d9df359257 -Block 0020 [ 90]: 88a253dee5cffe09 -Block 0020 [ 91]: fd218a89570ea21b -Block 0020 [ 92]: 3562bca5d5463c5c -Block 0020 [ 93]: a8e3e455e840e5d3 -Block 0020 [ 94]: 8b5b33b3f605dea4 -Block 0020 [ 95]: 54927c551ce7109a -Block 0020 [ 96]: d9edbc7e8ed262ea -Block 0020 [ 97]: 13ba2da8af1586e0 -Block 0020 [ 98]: 7e7b4839ec9c9d15 -Block 0020 [ 99]: c7a7f365046242e5 -Block 0020 [100]: c0a02a96e116e7a9 -Block 0020 [101]: c4294c90c5b60aab -Block 0020 [102]: de88e0255c80e8bd -Block 0020 [103]: dda0a1b50a84f594 -Block 0020 [104]: 32abd57a4a3d8fa1 -Block 0020 [105]: 6a3b6003128b7e4b -Block 0020 [106]: 2e75d71ec1f459ea -Block 0020 [107]: d8b3d56bb6370ce8 -Block 0020 [108]: a6e50c3c3fdeedcf -Block 0020 [109]: 615fe054b22c3f57 -Block 0020 [110]: d187b0d5e9a82f07 -Block 0020 [111]: 0b661aecd8b6acfd -Block 0020 [112]: ae5739a352aefc0b -Block 0020 [113]: a19b37d3f4358fab -Block 0020 [114]: ec3f64064528e5ca -Block 0020 [115]: 871eee2897672b5d -Block 0020 [116]: 13723605168a4370 -Block 0020 [117]: 09f3b1ce20ee4693 -Block 0020 [118]: cf07035c40670104 -Block 0020 [119]: f940f27353d6bce9 -Block 0020 [120]: 7bca9f2599febfce -Block 0020 [121]: 46a694fb7c23db99 -Block 0020 [122]: d7d065950f1fbd4b -Block 0020 [123]: cbe415b30043b7c9 -Block 0020 [124]: 1ec55ec99495a768 -Block 0020 [125]: 296f6c6f5078b47d -Block 0020 [126]: cdc04d1f06b9f4cb -Block 0020 [127]: abc7a9f4595d035c -Block 0021 [ 0]: f91e15dddb3b51ec -Block 0021 [ 1]: ee5c3d4169c6340e -Block 0021 [ 2]: ffbb26bf19a1114e -Block 0021 [ 3]: 07051d000ee6fdc8 -Block 0021 [ 4]: 1abe4b454438ac8e -Block 0021 [ 5]: 7248966a2670c010 -Block 0021 [ 6]: b7b5def30b008c50 -Block 0021 [ 7]: f9b852777fcdf0cb -Block 0021 [ 8]: 33883d34b6746279 -Block 0021 [ 9]: 8ed5aed9f146bbbc -Block 0021 [ 10]: b185ef5eeb6b7c93 -Block 0021 [ 11]: deab3ab480df25e2 -Block 0021 [ 12]: 54c50a10ef514a95 -Block 0021 [ 13]: b22a360cd6e84781 -Block 0021 [ 14]: ccd176f2fd328583 -Block 0021 [ 15]: 0c6197874a4c1899 -Block 0021 [ 16]: d7baf5b0d78951d9 -Block 0021 [ 17]: 4f0bcf25c024e4c9 -Block 0021 [ 18]: 37ce212b48d1dc8c -Block 0021 [ 19]: 1406aa351a3956ec -Block 0021 [ 20]: af53d87e3d339f12 -Block 0021 [ 21]: 4099481b37dd2332 -Block 0021 [ 22]: 99705cd0ace2b2e5 -Block 0021 [ 23]: a7b4ccf587f655a4 -Block 0021 [ 24]: 4fc2ea4c8dacd3f0 -Block 0021 [ 25]: 5f3edbe69906aea8 -Block 0021 [ 26]: e3ce2749b7e3501a -Block 0021 [ 27]: 6df82def0953f475 -Block 0021 [ 28]: 29a3b1a8d54cd7eb -Block 0021 [ 29]: 238fd775eb58ce16 -Block 0021 [ 30]: f4428dd2aa26f05d -Block 0021 [ 31]: 5f5f090f6985661e -Block 0021 [ 32]: 3c11b73b96af5348 -Block 0021 [ 33]: 4803704f02a187d7 -Block 0021 [ 34]: 5fee6cd368efb42a -Block 0021 [ 35]: c11e6dc965fa6f04 -Block 0021 [ 36]: b4ea2de0b9c26784 -Block 0021 [ 37]: 89353cfb63665713 -Block 0021 [ 38]: ef0888efce116445 -Block 0021 [ 39]: fb04167ad5f72e1f -Block 0021 [ 40]: 3c5ed288e8f05a1d -Block 0021 [ 41]: 624547a17957b850 -Block 0021 [ 42]: 04732141a8ccba36 -Block 0021 [ 43]: 2685fb50ec390be3 -Block 0021 [ 44]: b02549b55b50976f -Block 0021 [ 45]: fa4fdce5517c2a24 -Block 0021 [ 46]: f11439e0775486f2 -Block 0021 [ 47]: 56c79606aba98cd0 -Block 0021 [ 48]: ed0641ad608278c0 -Block 0021 [ 49]: 514624364ea4b59f -Block 0021 [ 50]: 7fd4817bc3eeba5b -Block 0021 [ 51]: a8ee1d20b2d7d0b5 -Block 0021 [ 52]: ae596aa5f3dc543c -Block 0021 [ 53]: b799fbc080499d82 -Block 0021 [ 54]: ed54f1d15d90f8eb -Block 0021 [ 55]: 1a31da56664a72cc -Block 0021 [ 56]: 12da9d1c9cf10ddb -Block 0021 [ 57]: 2f4913b380d74a10 -Block 0021 [ 58]: 8ba9185c45a65ba3 -Block 0021 [ 59]: da683bf7f2029425 -Block 0021 [ 60]: 559fbf449c0da608 -Block 0021 [ 61]: 7dcd27cf098ba795 -Block 0021 [ 62]: 3ddd05c0df1cab14 -Block 0021 [ 63]: 83fd62730a702ce3 -Block 0021 [ 64]: 15a6c578f742d175 -Block 0021 [ 65]: 016f807d1ab2e6c3 -Block 0021 [ 66]: 61dbe68679f42a35 -Block 0021 [ 67]: 34098d8930ef469b -Block 0021 [ 68]: 6e4f258a5c1c061c -Block 0021 [ 69]: 94b80e2098f6de46 -Block 0021 [ 70]: f75eb09315ac2b17 -Block 0021 [ 71]: dcd61677a8230fb3 -Block 0021 [ 72]: aba074f342936c30 -Block 0021 [ 73]: ef82cb98e5b62732 -Block 0021 [ 74]: 92e2a728a9cf67a9 -Block 0021 [ 75]: a63711b57bf4c895 -Block 0021 [ 76]: ca84f36a5aed6490 -Block 0021 [ 77]: fac131451564800d -Block 0021 [ 78]: db9274384c879da5 -Block 0021 [ 79]: b8103c7a0b1e2280 -Block 0021 [ 80]: 475816e960b808f9 -Block 0021 [ 81]: 022248d13db87cb1 -Block 0021 [ 82]: a93f6128a0e9ec01 -Block 0021 [ 83]: e968dd4874743f07 -Block 0021 [ 84]: 31da295f50067bb4 -Block 0021 [ 85]: fac3e0d7554a109e -Block 0021 [ 86]: e9e77599410d4626 -Block 0021 [ 87]: 018184166eab6fba -Block 0021 [ 88]: 230e3e6976d1929f -Block 0021 [ 89]: 8038f6ce937203dc -Block 0021 [ 90]: feae676d6efd362b -Block 0021 [ 91]: eb9e5d2e229876af -Block 0021 [ 92]: ffb1be82fa0129d3 -Block 0021 [ 93]: a9861a02c73e3766 -Block 0021 [ 94]: 4705e2143470ea47 -Block 0021 [ 95]: d35816871f69c4ff -Block 0021 [ 96]: 74f13edfb6f9f2fd -Block 0021 [ 97]: 5856910ab5e781c9 -Block 0021 [ 98]: 3ceb888953da86b9 -Block 0021 [ 99]: 0ab510d037c87b43 -Block 0021 [100]: 138c27555c6626b4 -Block 0021 [101]: 3c131e8b21e1d1a7 -Block 0021 [102]: dcf5a6b3fb5e6966 -Block 0021 [103]: 0559f144bd001f36 -Block 0021 [104]: 3018a36d9ad1ecd4 -Block 0021 [105]: 31e3c99700980d11 -Block 0021 [106]: 1d189ab56c882f89 -Block 0021 [107]: ac93920aa320911e -Block 0021 [108]: 680b39dadc4c977f -Block 0021 [109]: 7072e9abbc6eec02 -Block 0021 [110]: 1136fc6624a8283d -Block 0021 [111]: d1cafe5cb563a9f2 -Block 0021 [112]: cb42169a90e18f42 -Block 0021 [113]: ef07f6cc1da57b09 -Block 0021 [114]: 186c57d289ca3d25 -Block 0021 [115]: 168f8783db16497f -Block 0021 [116]: eb5d26010ccc0661 -Block 0021 [117]: 7dfc4b2061132276 -Block 0021 [118]: 318fa486a5e55435 -Block 0021 [119]: 4f081059273cff64 -Block 0021 [120]: 8e2f8e9f645fe5c5 -Block 0021 [121]: b0f117bf26cac7a6 -Block 0021 [122]: a7cc624a25420744 -Block 0021 [123]: 5996f6f569411c8d -Block 0021 [124]: d1fe256f06785230 -Block 0021 [125]: 6a5c4fd0332f388a -Block 0021 [126]: 671310faa364b89a -Block 0021 [127]: ae23fc2ee74b6a2e -Block 0022 [ 0]: fd0d5fe6e4463eb9 -Block 0022 [ 1]: 45c83ce9563fa053 -Block 0022 [ 2]: d727b2657ba26cdc -Block 0022 [ 3]: 8c6aa3c945e80ead -Block 0022 [ 4]: e97f7f5e8c5999b1 -Block 0022 [ 5]: 4aa3da0ced32965b -Block 0022 [ 6]: 060ddad87e312da8 -Block 0022 [ 7]: 240061d56cfae2ae -Block 0022 [ 8]: 762ab59bcd9861af -Block 0022 [ 9]: 83c44976e648170e -Block 0022 [ 10]: 7c72093e5af38945 -Block 0022 [ 11]: 502321f2bc7210d8 -Block 0022 [ 12]: 5c48ba68baea259d -Block 0022 [ 13]: bf10399b4ceb7350 -Block 0022 [ 14]: c01e2a7ea191f992 -Block 0022 [ 15]: 65d8e06801e875fd -Block 0022 [ 16]: dd58879fa6c6beca -Block 0022 [ 17]: e759e40819e1c2ee -Block 0022 [ 18]: 0cb2744881da40ad -Block 0022 [ 19]: ec193df705eb9ce1 -Block 0022 [ 20]: 64f0b30e24639350 -Block 0022 [ 21]: 383d137d52aa756d -Block 0022 [ 22]: c7508534f947fe85 -Block 0022 [ 23]: 8d1c55b6a2c65b4b -Block 0022 [ 24]: 817d5358205f8c7f -Block 0022 [ 25]: 3e7dcc1e2d0ad5d2 -Block 0022 [ 26]: 3806b0590ebc33d0 -Block 0022 [ 27]: 4b7410df24c582fc -Block 0022 [ 28]: ef8eb90023866f1b -Block 0022 [ 29]: 16d5e2706b950dbf -Block 0022 [ 30]: 6eab6cfa739f915c -Block 0022 [ 31]: b739804c9bc88231 -Block 0022 [ 32]: 92306a3666206f77 -Block 0022 [ 33]: 18551d1e9274bc10 -Block 0022 [ 34]: 62d127a51fa91e89 -Block 0022 [ 35]: f64fce4c0035ee41 -Block 0022 [ 36]: 008856cec7508d20 -Block 0022 [ 37]: 742b2b65beb517f5 -Block 0022 [ 38]: 71b98ea6f9a17f89 -Block 0022 [ 39]: 7ca177831758d428 -Block 0022 [ 40]: b4063a44e0c5c0f4 -Block 0022 [ 41]: bfff91cfe779f7a0 -Block 0022 [ 42]: 561c77eb787158ad -Block 0022 [ 43]: c6511c6cdc7d5c92 -Block 0022 [ 44]: 1a4ef74ddd5319f5 -Block 0022 [ 45]: 4e3a92e3669e405c -Block 0022 [ 46]: 99699ce6bada48e9 -Block 0022 [ 47]: 673ab31ec7a3cef4 -Block 0022 [ 48]: 321c4e8a6b736843 -Block 0022 [ 49]: 6937b8bf90276a67 -Block 0022 [ 50]: 9e5e5c323a841df2 -Block 0022 [ 51]: 7543434ac4a6f31d -Block 0022 [ 52]: 8a4fadf7ad9b08b0 -Block 0022 [ 53]: e6e169443491062c -Block 0022 [ 54]: 1dc490d3fd26094c -Block 0022 [ 55]: f2548a4d64cee2e9 -Block 0022 [ 56]: 80de1a7ca870fd3e -Block 0022 [ 57]: 59d42a990f21e43c -Block 0022 [ 58]: 1c71ffde3c1c610e -Block 0022 [ 59]: eaacdba19e48f030 -Block 0022 [ 60]: 2b3529474cf24ffb -Block 0022 [ 61]: e6a4d2aaf27c0f19 -Block 0022 [ 62]: 18e558a5a4fd3e88 -Block 0022 [ 63]: dd61e9dc8af7b78e -Block 0022 [ 64]: 1cceaeba3e18faa6 -Block 0022 [ 65]: c8403af754002891 -Block 0022 [ 66]: 9877ab739868aeaf -Block 0022 [ 67]: 337f8dc58d7c3769 -Block 0022 [ 68]: cc7a204b0b743765 -Block 0022 [ 69]: 72c89f06c66f5f5f -Block 0022 [ 70]: 4e40dff46b027e59 -Block 0022 [ 71]: 9719284ab7e5a198 -Block 0022 [ 72]: c6fd4d54a74793d7 -Block 0022 [ 73]: 13cfcefd75aacc2b -Block 0022 [ 74]: f4def331cc0c787d -Block 0022 [ 75]: 440d0ad4ad9d17b0 -Block 0022 [ 76]: fbded143712b01c0 -Block 0022 [ 77]: 0a4b41e4e7e441a2 -Block 0022 [ 78]: 344938acef21e9c8 -Block 0022 [ 79]: 8eb1bf62f25c514e -Block 0022 [ 80]: c4522c100a390623 -Block 0022 [ 81]: 2f9c189f55588477 -Block 0022 [ 82]: 2d09452db6b0a890 -Block 0022 [ 83]: 06e3609424bda06d -Block 0022 [ 84]: f1d375b04a8be629 -Block 0022 [ 85]: c156f32f41541ab4 -Block 0022 [ 86]: 0258f1c58671feda -Block 0022 [ 87]: 4b97162ad3411aeb -Block 0022 [ 88]: 62b252050436a943 -Block 0022 [ 89]: ca82902a3725daa3 -Block 0022 [ 90]: 259a316a3ddf2da2 -Block 0022 [ 91]: 959a008ad357c995 -Block 0022 [ 92]: 9b738b6b170453a3 -Block 0022 [ 93]: 1cc4c1f4a499b0e9 -Block 0022 [ 94]: 6675ddd817df816d -Block 0022 [ 95]: 6b6454ef7dc27dd0 -Block 0022 [ 96]: e41db01be78437f1 -Block 0022 [ 97]: 45978d6fee9df995 -Block 0022 [ 98]: 50291ef2c016d553 -Block 0022 [ 99]: 3bcacbec1fead10f -Block 0022 [100]: 58007e967ebe5d2a -Block 0022 [101]: 4a38aeef5991445c -Block 0022 [102]: d11bb156aad884b9 -Block 0022 [103]: cdf7aa50f549b11c -Block 0022 [104]: e00f671baa7d6614 -Block 0022 [105]: 3d63468b5f660350 -Block 0022 [106]: 8ca6a1aafda8586c -Block 0022 [107]: eb5fe9a0beec3ba6 -Block 0022 [108]: 8a8dfa227db49a88 -Block 0022 [109]: 123379b9e95f344a -Block 0022 [110]: fc90400b40cae726 -Block 0022 [111]: a8372e72fae29434 -Block 0022 [112]: 30e7ed83a43bc676 -Block 0022 [113]: 24b0b45b9e9295d1 -Block 0022 [114]: 1064b0ba66872a1a -Block 0022 [115]: 016f81848aac5da0 -Block 0022 [116]: 70010ce2cc015342 -Block 0022 [117]: 0cb94916bdd2c824 -Block 0022 [118]: 84f7f072795efdaa -Block 0022 [119]: ae02558711928c7e -Block 0022 [120]: ce1412eaa5f5e0aa -Block 0022 [121]: a48e1cc58caae3d3 -Block 0022 [122]: fa202b0d1f05dc84 -Block 0022 [123]: 8d47e4b2d0870c63 -Block 0022 [124]: 47f21005485aa20e -Block 0022 [125]: 97af7fca33748f3d -Block 0022 [126]: 465983ece771eef3 -Block 0022 [127]: 14ec860030ff375e -Block 0023 [ 0]: 6f210fe216a3512c -Block 0023 [ 1]: 386cee177ac993a4 -Block 0023 [ 2]: 49bd76ebf083db21 -Block 0023 [ 3]: 1215eb06184503da -Block 0023 [ 4]: 49f3e037ad08fb69 -Block 0023 [ 5]: 564544fefa7fe65c -Block 0023 [ 6]: b21298e5160968ec -Block 0023 [ 7]: a786e653fdc46e4a -Block 0023 [ 8]: f209b1eaf8ea1a45 -Block 0023 [ 9]: 19b76bc48434ff35 -Block 0023 [ 10]: 2c12edbd7079ce66 -Block 0023 [ 11]: 664e44229e14ed62 -Block 0023 [ 12]: bb50a711aecd4206 -Block 0023 [ 13]: 4f9a0c9f37757465 -Block 0023 [ 14]: f5059360bcec58ae -Block 0023 [ 15]: 6033b3f8943691c3 -Block 0023 [ 16]: 317bee308f9535fd -Block 0023 [ 17]: c8d8ef6cc0e20a42 -Block 0023 [ 18]: 45ad5b2bab1aff18 -Block 0023 [ 19]: 36accf772101e38c -Block 0023 [ 20]: 3e0f5b1c20b1bb60 -Block 0023 [ 21]: 5ed93c2d23e2cdd5 -Block 0023 [ 22]: 090c5583d65eb905 -Block 0023 [ 23]: ed85a9a130d4bc94 -Block 0023 [ 24]: 7cb9a06ca5fcca44 -Block 0023 [ 25]: f20a018628cec16d -Block 0023 [ 26]: b33762850d0020d0 -Block 0023 [ 27]: 89c6f1adabcad35a -Block 0023 [ 28]: c9b2fa8540aea613 -Block 0023 [ 29]: b0cad3cccc014204 -Block 0023 [ 30]: fefd95b1dc5bd64f -Block 0023 [ 31]: 9ea654d3e93f1d5c -Block 0023 [ 32]: 3be47c28bba7bf4d -Block 0023 [ 33]: 914bf4bc99537ff9 -Block 0023 [ 34]: e72d69aa549754a8 -Block 0023 [ 35]: 159b7e1c6a4947f6 -Block 0023 [ 36]: 7b6467463a0d70fb -Block 0023 [ 37]: d21aabe90be5a3af -Block 0023 [ 38]: 0d0f5cdcb0e3c7bc -Block 0023 [ 39]: d768d5aa9aeefdb3 -Block 0023 [ 40]: b32ee41f0365e839 -Block 0023 [ 41]: 73a927ae2ea373cd -Block 0023 [ 42]: ba1522fe3f400fe5 -Block 0023 [ 43]: 79488e5d595ff114 -Block 0023 [ 44]: a0dda12acb33e1f5 -Block 0023 [ 45]: d72e4dcef04d8449 -Block 0023 [ 46]: 3b3597920b77fadd -Block 0023 [ 47]: 9a537d5d1e0f93a9 -Block 0023 [ 48]: d64b12633f104e41 -Block 0023 [ 49]: 15b77de207900141 -Block 0023 [ 50]: 67d09cbd6ff6244c -Block 0023 [ 51]: 9f57287b704d96f2 -Block 0023 [ 52]: 7cac8a39c31aaeb0 -Block 0023 [ 53]: c19e4ada63e422c1 -Block 0023 [ 54]: d967b2aca7b30b24 -Block 0023 [ 55]: 4ce1e7848cfada9c -Block 0023 [ 56]: fffee85be7b18870 -Block 0023 [ 57]: 53a89fc1aa515131 -Block 0023 [ 58]: 144547ad34b63494 -Block 0023 [ 59]: 9da4e4628b19b6af -Block 0023 [ 60]: 647a68eaa3008b91 -Block 0023 [ 61]: 011b88ec013bef9d -Block 0023 [ 62]: 3132eafeabbdbae3 -Block 0023 [ 63]: 5b9dc02adda74b1b -Block 0023 [ 64]: 0bfc5e6055737ffd -Block 0023 [ 65]: 79dfe16a4a331f60 -Block 0023 [ 66]: e62d717d47fa1f54 -Block 0023 [ 67]: 5f68e4b38ba5ac85 -Block 0023 [ 68]: 2739094dc8306afa -Block 0023 [ 69]: f438221f45366a87 -Block 0023 [ 70]: aa2c60c6b544d641 -Block 0023 [ 71]: f5210c6369a0ea40 -Block 0023 [ 72]: 63450f97178b6fea -Block 0023 [ 73]: 1e84ddb1d5d39662 -Block 0023 [ 74]: 1d562cdfeb699bde -Block 0023 [ 75]: 1f1640bc5f7f3b7c -Block 0023 [ 76]: fb9c4fd39e52de2b -Block 0023 [ 77]: 982dfc06061900ef -Block 0023 [ 78]: e3683cd9ad6c3506 -Block 0023 [ 79]: f58197aa96b567e8 -Block 0023 [ 80]: 166f8f63b0b5544b -Block 0023 [ 81]: 15acc79dcfd350b5 -Block 0023 [ 82]: 04d81c7adfc06c8b -Block 0023 [ 83]: cc1aa55ae4714aa5 -Block 0023 [ 84]: 1adf79595b037147 -Block 0023 [ 85]: 80182d8e6626ec1a -Block 0023 [ 86]: dcca7cd67b36f1d4 -Block 0023 [ 87]: 956c021ecf0004c2 -Block 0023 [ 88]: be4644c7b2abf40e -Block 0023 [ 89]: 5052284ea5c9cbfd -Block 0023 [ 90]: 2b98113bb7cfa963 -Block 0023 [ 91]: 95ccc61b0c97d568 -Block 0023 [ 92]: def94c38764899e4 -Block 0023 [ 93]: 661f98ae30046991 -Block 0023 [ 94]: d5f7cb256077ee95 -Block 0023 [ 95]: f18d4c7e877b2ed6 -Block 0023 [ 96]: e9f45ead3383c0fe -Block 0023 [ 97]: f9ad0574a3390523 -Block 0023 [ 98]: 23ff3b411095754b -Block 0023 [ 99]: 5272d0a3733568f5 -Block 0023 [100]: 57514c47b994f41a -Block 0023 [101]: f887dc7638fe516d -Block 0023 [102]: 63eac3154753f392 -Block 0023 [103]: 870c5cd60a22e090 -Block 0023 [104]: 3e03fba18c9cf510 -Block 0023 [105]: 82b3e1766e2b4fd4 -Block 0023 [106]: 2f328027ee47edbc -Block 0023 [107]: b848509d94957f5a -Block 0023 [108]: 1ce36525b23e18c8 -Block 0023 [109]: 8dc9806873cfcdc6 -Block 0023 [110]: f8104fce855b73a7 -Block 0023 [111]: 2ab1006d7d216b5b -Block 0023 [112]: 759d5c0fbad338e7 -Block 0023 [113]: d701785324bde3cc -Block 0023 [114]: e8a9f5a0f3ee07ef -Block 0023 [115]: 508b2a5f7bccb887 -Block 0023 [116]: 10c1764cf106251e -Block 0023 [117]: 0aaaef13d29c993f -Block 0023 [118]: 3bba7fa3b579643f -Block 0023 [119]: 80ab232f73189d56 -Block 0023 [120]: 397cb8a63dea3e0c -Block 0023 [121]: 3f42d5bc48fb92d6 -Block 0023 [122]: 811a23b4e2622e92 -Block 0023 [123]: 940f776c7ce48d13 -Block 0023 [124]: e6fc34563a84c17b -Block 0023 [125]: c1bbe67ee7f4e9b7 -Block 0023 [126]: 2f82722c13d7231d -Block 0023 [127]: 3432cd292161ed18 -Block 0024 [ 0]: eddf447b2d99795d -Block 0024 [ 1]: f61c77799f2cdf40 -Block 0024 [ 2]: e28436e1ceaa784a -Block 0024 [ 3]: fcf4e94439a4d452 -Block 0024 [ 4]: 59bd07ad0230777c -Block 0024 [ 5]: 2fa46f9955e19408 -Block 0024 [ 6]: 1dd1577be731eb19 -Block 0024 [ 7]: f6de459101fd739a -Block 0024 [ 8]: 1e804a7ed486f185 -Block 0024 [ 9]: cbbdf6514607376f -Block 0024 [ 10]: 01d56e7417f13081 -Block 0024 [ 11]: 897b5f91b941f660 -Block 0024 [ 12]: 8af0d7ea758c00fd -Block 0024 [ 13]: f0cf6e790ddf7761 -Block 0024 [ 14]: 3e2c532714e5038f -Block 0024 [ 15]: e6f882c03d7cf6dc -Block 0024 [ 16]: cf547b6801a01f9d -Block 0024 [ 17]: 12ae95bbda085530 -Block 0024 [ 18]: df01d1be5bbbaf21 -Block 0024 [ 19]: 968c5616afa5b119 -Block 0024 [ 20]: b7d192ebfe911df9 -Block 0024 [ 21]: ebe5a10764df10d0 -Block 0024 [ 22]: ff723e49b4afe96f -Block 0024 [ 23]: 13176fcffc8a0847 -Block 0024 [ 24]: be8ba44311abe23d -Block 0024 [ 25]: a629337958920760 -Block 0024 [ 26]: bffde970d04070ad -Block 0024 [ 27]: d5a0a926331eca17 -Block 0024 [ 28]: 846c9178100ed813 -Block 0024 [ 29]: 853d3d58c58b6e7a -Block 0024 [ 30]: 25ada3b57eacb250 -Block 0024 [ 31]: 8af5791678f8c074 -Block 0024 [ 32]: 300720a2acff0dc2 -Block 0024 [ 33]: 7e314768bfab2fc5 -Block 0024 [ 34]: e74d5a2c5e533222 -Block 0024 [ 35]: b252ddeddceab59c -Block 0024 [ 36]: 4ab8e05633797c9d -Block 0024 [ 37]: 6a29e9db5618a8a6 -Block 0024 [ 38]: adbeafb95c1275a9 -Block 0024 [ 39]: b56750cb22ea0567 -Block 0024 [ 40]: 6993e457678b21cc -Block 0024 [ 41]: f7856e2c511dc311 -Block 0024 [ 42]: fe5deac34863c661 -Block 0024 [ 43]: 88fff230d20d378a -Block 0024 [ 44]: 5b6ea59f9fd09360 -Block 0024 [ 45]: 6c4d35d69bdf7074 -Block 0024 [ 46]: 33580293fccd086b -Block 0024 [ 47]: f2e9ac8d2dee6bc6 -Block 0024 [ 48]: 6f6cf4ad82fee9b5 -Block 0024 [ 49]: 23ee0fdc617b3371 -Block 0024 [ 50]: 72977b49dd5fca77 -Block 0024 [ 51]: 078a29609707ed86 -Block 0024 [ 52]: 1e845ec6fcf9c4de -Block 0024 [ 53]: d4a1726c95c2aaa7 -Block 0024 [ 54]: ae506ede75e7f045 -Block 0024 [ 55]: 9190f1966395a9c6 -Block 0024 [ 56]: dbe7fcbbc526a184 -Block 0024 [ 57]: 586d5c3aeacd5226 -Block 0024 [ 58]: 8dd269404c21d3ff -Block 0024 [ 59]: 751301d17ef82189 -Block 0024 [ 60]: 2402993470e97de7 -Block 0024 [ 61]: cd51ad3dbb4c82c8 -Block 0024 [ 62]: 1daaaa3c21724b8c -Block 0024 [ 63]: b5db8cf3570d6ef0 -Block 0024 [ 64]: 0805b730d8f5d05c -Block 0024 [ 65]: d5a3ea8f5af2c8a6 -Block 0024 [ 66]: d9cc8848e10d4454 -Block 0024 [ 67]: ddf5e1979b9f92e2 -Block 0024 [ 68]: e4803ed4852c4d01 -Block 0024 [ 69]: ba880da04eef76a3 -Block 0024 [ 70]: 5d09daab04b87464 -Block 0024 [ 71]: c7d4f0c9549daa28 -Block 0024 [ 72]: ddbf43d719d53d4f -Block 0024 [ 73]: 6183763c5124b98b -Block 0024 [ 74]: d7ab532519584b50 -Block 0024 [ 75]: b0118b2eb9ef7eeb -Block 0024 [ 76]: 95c105df44141ee0 -Block 0024 [ 77]: 49b86cc9e5725918 -Block 0024 [ 78]: 79b784b0e19e0b33 -Block 0024 [ 79]: ed2979473ac724b6 -Block 0024 [ 80]: ad9f1b4a8c7e911c -Block 0024 [ 81]: 090389b737090273 -Block 0024 [ 82]: 511aae0be50fbf75 -Block 0024 [ 83]: 17716e9bd857569a -Block 0024 [ 84]: 31ac183381af8091 -Block 0024 [ 85]: e9e2884a1dce54cb -Block 0024 [ 86]: f382872d696cbc17 -Block 0024 [ 87]: b189af8cf1ab4cda -Block 0024 [ 88]: 8004a6a570d4442c -Block 0024 [ 89]: 5ba22dff2b0fa063 -Block 0024 [ 90]: 3f7eb430c756173b -Block 0024 [ 91]: 3a5fde8ae23af414 -Block 0024 [ 92]: 65198d9cc3245bd9 -Block 0024 [ 93]: 6b98f194dd3f6cb1 -Block 0024 [ 94]: 870bab4461fee657 -Block 0024 [ 95]: ae5c9422a34d026b -Block 0024 [ 96]: 91fc1fa9414a8b35 -Block 0024 [ 97]: 621f9c8eb0c7576a -Block 0024 [ 98]: 3d0a760827b710a7 -Block 0024 [ 99]: 8049a9ea4814f2a7 -Block 0024 [100]: cb242cd27cfb7aaf -Block 0024 [101]: 9900ad26b5ef0f3f -Block 0024 [102]: 4e6bec2d38ea9a6e -Block 0024 [103]: e887522bb791be19 -Block 0024 [104]: d54f9af1c2b5bc9b -Block 0024 [105]: 794fb8d07ba2c552 -Block 0024 [106]: b04274ed8f5dd494 -Block 0024 [107]: d71bf4bf9a0c5c17 -Block 0024 [108]: 63ace587142a3f25 -Block 0024 [109]: c18c02ae52a2c624 -Block 0024 [110]: 1671b09e592f3356 -Block 0024 [111]: 667d5a337850c037 -Block 0024 [112]: 63ed9adb5ff40317 -Block 0024 [113]: 09761522bdd824cd -Block 0024 [114]: c9f5ceeeb0acce0d -Block 0024 [115]: f372bebae8903146 -Block 0024 [116]: 6c9eda686ff955b6 -Block 0024 [117]: c908b03d9a7ef4dd -Block 0024 [118]: 27a1fb4ad5462cfe -Block 0024 [119]: 65adea8ae2a3691c -Block 0024 [120]: d2f8455998158ff1 -Block 0024 [121]: 4e8d8cff4287451d -Block 0024 [122]: 373a40bd398b3b56 -Block 0024 [123]: 00d65a5e941cf620 -Block 0024 [124]: 1d372b94a5e9724e -Block 0024 [125]: fd18b7bdefd3cc85 -Block 0024 [126]: b73020928acc6ec7 -Block 0024 [127]: 5866a79c2f9b9ec2 -Block 0025 [ 0]: 2c8561d11345bbcb -Block 0025 [ 1]: ce6b125eaa1ab9cd -Block 0025 [ 2]: ef91bc08ad2244e5 -Block 0025 [ 3]: ec81f10048ac717e -Block 0025 [ 4]: a9affd940d74bf39 -Block 0025 [ 5]: cd98cc9c5393538f -Block 0025 [ 6]: 1b7c025eeb86399c -Block 0025 [ 7]: 4440b32b87d747c0 -Block 0025 [ 8]: c0054024c9250c55 -Block 0025 [ 9]: f03d35557436b20c -Block 0025 [ 10]: 764f39d7dd1f043e -Block 0025 [ 11]: 17ac1f78e9f775b1 -Block 0025 [ 12]: 62d840c226d25a5a -Block 0025 [ 13]: d5ef4813fe759d16 -Block 0025 [ 14]: f3baaaedccdeb3f9 -Block 0025 [ 15]: c0feebdc9ba007b3 -Block 0025 [ 16]: 2df4f2102dc70b1f -Block 0025 [ 17]: e14ea24eb589dcbf -Block 0025 [ 18]: 14be7f23ca6820fd -Block 0025 [ 19]: 4c9de98e69afbcd2 -Block 0025 [ 20]: f20fedd341647ed0 -Block 0025 [ 21]: e70fcbb02c9f4f79 -Block 0025 [ 22]: 7f59100d250af8cd -Block 0025 [ 23]: c76e62d635d909c0 -Block 0025 [ 24]: eab76215f68d0071 -Block 0025 [ 25]: 9fa18ffe8b564ddc -Block 0025 [ 26]: 40df692eaa9bee66 -Block 0025 [ 27]: b3a82daf41021a13 -Block 0025 [ 28]: 4199c651a6bd5120 -Block 0025 [ 29]: 89a07dd41b1161fd -Block 0025 [ 30]: 0f47fe85a659fa91 -Block 0025 [ 31]: 040a9d9ee85cfd1e -Block 0025 [ 32]: 92234c7a2bf25570 -Block 0025 [ 33]: b9675da57984dcb4 -Block 0025 [ 34]: d8bf2ee4b5bb9c8d -Block 0025 [ 35]: 32fcffbf779a3384 -Block 0025 [ 36]: 81f8caec0275cb10 -Block 0025 [ 37]: e756b8355cc18d9f -Block 0025 [ 38]: 210c41a46917854e -Block 0025 [ 39]: bbe7ae313f50b74d -Block 0025 [ 40]: 5a0e6077c90b80f3 -Block 0025 [ 41]: 20cbcf55a59f0ae9 -Block 0025 [ 42]: 1a9bf5275e23f6ae -Block 0025 [ 43]: b60aba0334ebd328 -Block 0025 [ 44]: 6232098b300f34c2 -Block 0025 [ 45]: 8b1262163e3ecbe9 -Block 0025 [ 46]: 9450850dc44e0827 -Block 0025 [ 47]: 800f5c08eb0de9be -Block 0025 [ 48]: e02529340ab3491e -Block 0025 [ 49]: 14448f2f13e3eac8 -Block 0025 [ 50]: ca3a090b7fa5fd5c -Block 0025 [ 51]: 2e2855e54d1e7d4d -Block 0025 [ 52]: d80732c77d3b75db -Block 0025 [ 53]: af59db9a16d1295a -Block 0025 [ 54]: db8a6b5029f7e1d0 -Block 0025 [ 55]: cb24634059acee01 -Block 0025 [ 56]: 80d3b1a96dccb73a -Block 0025 [ 57]: d674a0056f0f898b -Block 0025 [ 58]: 7d4e4dc314a7973f -Block 0025 [ 59]: d330792bac28cf76 -Block 0025 [ 60]: adddec91b6a078fe -Block 0025 [ 61]: 9f897bcb1daa95b8 -Block 0025 [ 62]: c5d47c497ba05724 -Block 0025 [ 63]: 36bd497fe0ee75e5 -Block 0025 [ 64]: e41394607adf5f0b -Block 0025 [ 65]: ee10a8850916afa0 -Block 0025 [ 66]: 440a2c96a32b150f -Block 0025 [ 67]: 11a62fe43c209a7d -Block 0025 [ 68]: 2483e11426e0bfbd -Block 0025 [ 69]: 24bbbcbbb3d29f48 -Block 0025 [ 70]: d4922b4a42b77a9b -Block 0025 [ 71]: bd8f38e3a1cbca43 -Block 0025 [ 72]: 5a944ab4975ffc86 -Block 0025 [ 73]: 0a94006a12ca9108 -Block 0025 [ 74]: 2d049664d5293f21 -Block 0025 [ 75]: de2d183b83723606 -Block 0025 [ 76]: 908ce9b248b632fe -Block 0025 [ 77]: 4d2399cbea6d11eb -Block 0025 [ 78]: d3a61307f6d2e71b -Block 0025 [ 79]: d78ff693a340c1b9 -Block 0025 [ 80]: e2b7dedc3bfe183e -Block 0025 [ 81]: f7f9130cf2bc302f -Block 0025 [ 82]: 7ec60ab2f056dddf -Block 0025 [ 83]: 9eb37b7bf5425ae8 -Block 0025 [ 84]: 4c9d4276d205539c -Block 0025 [ 85]: 8b0c8fbabf1d8e4c -Block 0025 [ 86]: 52c844a54b3c0d74 -Block 0025 [ 87]: 85082ba1b87e8697 -Block 0025 [ 88]: fde7046900f73003 -Block 0025 [ 89]: 2885d7326f19e580 -Block 0025 [ 90]: 629e3906763fa72e -Block 0025 [ 91]: 8155ef418fa73ed0 -Block 0025 [ 92]: 9702b7e6c0917c24 -Block 0025 [ 93]: ccbb8af78a30c364 -Block 0025 [ 94]: 3c06039ccc5c1250 -Block 0025 [ 95]: b21fb045ad23a550 -Block 0025 [ 96]: efc77389136204d2 -Block 0025 [ 97]: 4c8fc177b55d223f -Block 0025 [ 98]: 6d303bee7329d236 -Block 0025 [ 99]: 347855b3983e06cf -Block 0025 [100]: 96475c0602f7ab59 -Block 0025 [101]: 0eff8ef338e4c7b4 -Block 0025 [102]: a8358c0ef351209f -Block 0025 [103]: 6400fc24e1bf0846 -Block 0025 [104]: e5893beeb36900c7 -Block 0025 [105]: 8a5c06564967d92a -Block 0025 [106]: f4481f247efaff02 -Block 0025 [107]: 69f0148dbc2507e4 -Block 0025 [108]: 7b19b02cfbd82ab0 -Block 0025 [109]: 4469137a30358b3b -Block 0025 [110]: b1a01da0f55b563f -Block 0025 [111]: b899bcd1494fe3e4 -Block 0025 [112]: e995344bcb8a69cb -Block 0025 [113]: 4862fb4389d31d3a -Block 0025 [114]: cdd82bd88a77097b -Block 0025 [115]: d906fcd88852d153 -Block 0025 [116]: e73aee160b2f9f77 -Block 0025 [117]: 2cf4ab8864284ead -Block 0025 [118]: 94983532f5b9e9d0 -Block 0025 [119]: 8902bb6ab139c3b4 -Block 0025 [120]: d965e225233846ca -Block 0025 [121]: 0febb5dde12e73e6 -Block 0025 [122]: 5dcf41f7ac767e41 -Block 0025 [123]: abe3a933299c8864 -Block 0025 [124]: d52527ce42a74ef7 -Block 0025 [125]: 81a8bf9a14401ee2 -Block 0025 [126]: 5780722f3c56e71a -Block 0025 [127]: 1b5b439ac8fce429 -Block 0026 [ 0]: ae548c9772346e38 -Block 0026 [ 1]: 4fa526f2904c3366 -Block 0026 [ 2]: 9a8e9ea747daadca -Block 0026 [ 3]: 46973c0cd183d6ad -Block 0026 [ 4]: ce6a0e48d6f080dd -Block 0026 [ 5]: 5327d1f0c37edf5a -Block 0026 [ 6]: 5fe636ad749684f6 -Block 0026 [ 7]: 3b569db4a5edbfcf -Block 0026 [ 8]: 90a8b454e4cf3ed7 -Block 0026 [ 9]: 7cdc08367e3e2b71 -Block 0026 [ 10]: dda1e07bca57c639 -Block 0026 [ 11]: 72135942b792af04 -Block 0026 [ 12]: f5d3dbcfb527f94c -Block 0026 [ 13]: 5d53092f61d8b459 -Block 0026 [ 14]: 047f8cf54161ed96 -Block 0026 [ 15]: 28de041eca46827e -Block 0026 [ 16]: 9e852eb5ea2e9fc9 -Block 0026 [ 17]: b7bc6bfbdf8d9473 -Block 0026 [ 18]: 2327a4982d9b8658 -Block 0026 [ 19]: de0448dedc439638 -Block 0026 [ 20]: 934fe5cc76d058dc -Block 0026 [ 21]: 7dd47c7d0611bd3c -Block 0026 [ 22]: ff6491f77d6c374f -Block 0026 [ 23]: 6f2ee705e23e1a62 -Block 0026 [ 24]: d95c95a7c376023f -Block 0026 [ 25]: ebb90bcb0d9a2e1a -Block 0026 [ 26]: 3598ae7c8025d27e -Block 0026 [ 27]: 3acf5e34e2a22c29 -Block 0026 [ 28]: eaa7b06e760fdf0d -Block 0026 [ 29]: c48e161cc6f08026 -Block 0026 [ 30]: dc2f743f8d9ef409 -Block 0026 [ 31]: 66c36a950778d2ef -Block 0026 [ 32]: d9d698a90de3fcc9 -Block 0026 [ 33]: dfaaa9c45957f231 -Block 0026 [ 34]: fa96f793b50fb045 -Block 0026 [ 35]: d12152c0bb31e67e -Block 0026 [ 36]: a9cbe26a967a23e8 -Block 0026 [ 37]: a483b2137eba42a7 -Block 0026 [ 38]: 678e8942ca66a847 -Block 0026 [ 39]: b6c8df9f4f648309 -Block 0026 [ 40]: 85be6df849950f62 -Block 0026 [ 41]: 4a9b1e4f16d00056 -Block 0026 [ 42]: fbf726756de4f7cd -Block 0026 [ 43]: f5f74eee063e34b7 -Block 0026 [ 44]: 52c1dcab8bcb3aa6 -Block 0026 [ 45]: 11fa37fea38d4b35 -Block 0026 [ 46]: a22979225556a561 -Block 0026 [ 47]: 7b6cdcaf026a134f -Block 0026 [ 48]: 02215c77ffb8ba6f -Block 0026 [ 49]: 24c28f63fb82bbcc -Block 0026 [ 50]: 6641a2d247b276ca -Block 0026 [ 51]: 463e403d21ed000f -Block 0026 [ 52]: e1d1c18d038ac211 -Block 0026 [ 53]: b74b95388ef69417 -Block 0026 [ 54]: 5de1e73a34c312c0 -Block 0026 [ 55]: 919719bbabaa83dd -Block 0026 [ 56]: 65b50e27ffe6a184 -Block 0026 [ 57]: 51dac09fb50c02d1 -Block 0026 [ 58]: 2a9815328a8815c2 -Block 0026 [ 59]: ffc7ea217c6861d0 -Block 0026 [ 60]: e020534e9bcd9d60 -Block 0026 [ 61]: fc3b710fa977051a -Block 0026 [ 62]: c8d68adcf4dc7857 -Block 0026 [ 63]: 55d86434ab763b69 -Block 0026 [ 64]: 6fa6c5d1d43e9faa -Block 0026 [ 65]: 2ec426b514999842 -Block 0026 [ 66]: 5884ee9d8bf1835a -Block 0026 [ 67]: 05ef086605a8ef52 -Block 0026 [ 68]: 6a9d4ee140146fca -Block 0026 [ 69]: d6a60aedc3bc7081 -Block 0026 [ 70]: 04b0a19c5451e4f7 -Block 0026 [ 71]: 0ea33ec34ba6b2de -Block 0026 [ 72]: ae420c0fee6ac2b4 -Block 0026 [ 73]: 3fee59ec7d4b26f0 -Block 0026 [ 74]: cfe1ebb530f09ee3 -Block 0026 [ 75]: 45c85970af8da75e -Block 0026 [ 76]: feb044354d937fc6 -Block 0026 [ 77]: 75fa91e6d156063c -Block 0026 [ 78]: f0479b4d513cf9e7 -Block 0026 [ 79]: f8cdc62687425767 -Block 0026 [ 80]: f73dfe8ab5567ae2 -Block 0026 [ 81]: 85c68e4020055359 -Block 0026 [ 82]: 91ed030700606540 -Block 0026 [ 83]: 7f59b1cc08cdd6de -Block 0026 [ 84]: 6503c24c1f5b5c90 -Block 0026 [ 85]: cee0c563eb591403 -Block 0026 [ 86]: a303bfa7eb1b3032 -Block 0026 [ 87]: 99ad670a2df52aae -Block 0026 [ 88]: 5ec0d7924bc8bcfa -Block 0026 [ 89]: f15dc0086097353e -Block 0026 [ 90]: 2aebc4f955613c0b -Block 0026 [ 91]: 5ca9833074c616e9 -Block 0026 [ 92]: 0c833254e30c2f41 -Block 0026 [ 93]: 9b1036a798694f12 -Block 0026 [ 94]: 0baf65d1f2a96312 -Block 0026 [ 95]: d67aad555f4881a6 -Block 0026 [ 96]: 99363147a71a98a9 -Block 0026 [ 97]: b18ba165a3222f8e -Block 0026 [ 98]: 4d6a118499101f4b -Block 0026 [ 99]: 77adecd01727a763 -Block 0026 [100]: 9d9155117157c8b5 -Block 0026 [101]: 9334b2f46d38d90e -Block 0026 [102]: 033648fbf89c6a27 -Block 0026 [103]: 6c96ba978dd3f8c0 -Block 0026 [104]: 91127e21031763c7 -Block 0026 [105]: 7f45dd941d58c054 -Block 0026 [106]: 0c1f22840b808997 -Block 0026 [107]: 9a9c45cb2f25b945 -Block 0026 [108]: 95f018d01ddb615f -Block 0026 [109]: b4a4286739862bdd -Block 0026 [110]: 12b248b330903c22 -Block 0026 [111]: 97867ec381bfee1d -Block 0026 [112]: a3370bd49b04d2ca -Block 0026 [113]: 8ab03ff18952afc9 -Block 0026 [114]: 81c74f0e0e9f3e18 -Block 0026 [115]: 9baa92ecb9564b1d -Block 0026 [116]: 707f7364a07d053e -Block 0026 [117]: b781cb02fb407b4d -Block 0026 [118]: cbef3f8e31dd48f4 -Block 0026 [119]: d3c7cdf145f5d28b -Block 0026 [120]: 24c9538782719f61 -Block 0026 [121]: 6e01e7f44c899af6 -Block 0026 [122]: ba51a4e8a6f5c5c1 -Block 0026 [123]: 42b49d032c5116f7 -Block 0026 [124]: 22c17a60e3321c7f -Block 0026 [125]: 6891d19c5ea28025 -Block 0026 [126]: 2a2c4cf8b6b67af8 -Block 0026 [127]: 89fdbf5492ff1c7f -Block 0027 [ 0]: ac48f5e7f46f4fc7 -Block 0027 [ 1]: 111bfa2387fe89c8 -Block 0027 [ 2]: a6c13eb1f00dcd99 -Block 0027 [ 3]: fb5add8b9675f2ad -Block 0027 [ 4]: 947336bbc2c39d5f -Block 0027 [ 5]: 79170081b46d1552 -Block 0027 [ 6]: faeebc5d66735e64 -Block 0027 [ 7]: d157ef9d8d14e44d -Block 0027 [ 8]: e1108af73d0163a7 -Block 0027 [ 9]: 4dbbd37910f1d938 -Block 0027 [ 10]: 80e8c0cfe5358976 -Block 0027 [ 11]: a3764edca50cfea2 -Block 0027 [ 12]: 3ad83939c168f63d -Block 0027 [ 13]: e3d3799c94fc7059 -Block 0027 [ 14]: 10206472c79f89e5 -Block 0027 [ 15]: a9d5ef9a59a886c6 -Block 0027 [ 16]: 88133d2608d75bfe -Block 0027 [ 17]: d08bc087021ec134 -Block 0027 [ 18]: 7a4a97baf35864f6 -Block 0027 [ 19]: b9e73155448e7298 -Block 0027 [ 20]: a275b2e3bb59940c -Block 0027 [ 21]: d26622791d1b2e81 -Block 0027 [ 22]: da05dba481c66703 -Block 0027 [ 23]: 8633f6b013f0583d -Block 0027 [ 24]: ce34bddc5869a81b -Block 0027 [ 25]: 0da213a70c07c86a -Block 0027 [ 26]: 388e524b02744481 -Block 0027 [ 27]: 08a5c9ca9689ff59 -Block 0027 [ 28]: 9821e14ebc900143 -Block 0027 [ 29]: cfa50a6b406ff2e2 -Block 0027 [ 30]: 1a53259a976999ae -Block 0027 [ 31]: 897f319a5c192ce7 -Block 0027 [ 32]: 74f531c163c3f191 -Block 0027 [ 33]: 0c5f7df2dde9b276 -Block 0027 [ 34]: 3ab217cf1fc819db -Block 0027 [ 35]: bc2c75715c05513d -Block 0027 [ 36]: 45a36d781eba43bd -Block 0027 [ 37]: bee1fe714b21e563 -Block 0027 [ 38]: e6479e8fab9dc871 -Block 0027 [ 39]: 0e1ae1d2ac24ae18 -Block 0027 [ 40]: 32baba742e8b9c07 -Block 0027 [ 41]: 9c5d49921197e424 -Block 0027 [ 42]: 94df5e61cac42a41 -Block 0027 [ 43]: db7a15804336237c -Block 0027 [ 44]: cbebc89ec1ae1ea3 -Block 0027 [ 45]: 2df7c9e2fcd66a2b -Block 0027 [ 46]: addfa745e2f0b541 -Block 0027 [ 47]: 60d4ee32d06bff3c -Block 0027 [ 48]: c0a1d3ff568071a7 -Block 0027 [ 49]: 68ced550e0fe7d47 -Block 0027 [ 50]: 3e06864703d2343a -Block 0027 [ 51]: d4e22f553815e7e5 -Block 0027 [ 52]: 257066f1cd8a6b09 -Block 0027 [ 53]: 8f1b8af2f45309ee -Block 0027 [ 54]: 5b0b4b45373d7762 -Block 0027 [ 55]: b55556164e87c922 -Block 0027 [ 56]: b4855a07acff4d93 -Block 0027 [ 57]: f14c1f32e16d6632 -Block 0027 [ 58]: 5cc4fc4c46151abc -Block 0027 [ 59]: bee51a57eb866845 -Block 0027 [ 60]: f8882d4179c8ba00 -Block 0027 [ 61]: f4668d69538eb68a -Block 0027 [ 62]: 83e8c1cc3aa26049 -Block 0027 [ 63]: 88fb20ca9c98fb62 -Block 0027 [ 64]: f2c3e5d04b183fe9 -Block 0027 [ 65]: 81bd1bc05a4f33a5 -Block 0027 [ 66]: 87f468bfc53c09b3 -Block 0027 [ 67]: d086962547462880 -Block 0027 [ 68]: 5f8c35242d9984c9 -Block 0027 [ 69]: e98e3bdff1298505 -Block 0027 [ 70]: 8eb0beddde71346f -Block 0027 [ 71]: 51338a7e4f3d297b -Block 0027 [ 72]: 472b3c3d565087b9 -Block 0027 [ 73]: 46eb999bac7333a6 -Block 0027 [ 74]: 62443cbed1cadc8a -Block 0027 [ 75]: 26b71b069331c7dc -Block 0027 [ 76]: ad2a45d57cbc6a55 -Block 0027 [ 77]: fd55b1459e4123ca -Block 0027 [ 78]: 823c12d897da595e -Block 0027 [ 79]: 84d4986bafc471e6 -Block 0027 [ 80]: 66a05a4298ca3345 -Block 0027 [ 81]: 7a37fcdfea6adb51 -Block 0027 [ 82]: 56bc9ff1d5f7b168 -Block 0027 [ 83]: db14aae988498545 -Block 0027 [ 84]: 66d40028cd079b41 -Block 0027 [ 85]: 05c66fa63c2fc32d -Block 0027 [ 86]: b49425bd113a373c -Block 0027 [ 87]: ee8be4598a806743 -Block 0027 [ 88]: b83f1835026b9428 -Block 0027 [ 89]: 0b73aec123c56947 -Block 0027 [ 90]: 9a8b473b45918be7 -Block 0027 [ 91]: 93658a783b0883d1 -Block 0027 [ 92]: 1410b26a183a87f1 -Block 0027 [ 93]: 927f2f28732ea0b9 -Block 0027 [ 94]: e921bc3435bf0ac7 -Block 0027 [ 95]: ae24686894148506 -Block 0027 [ 96]: 13bd6039622f0fd5 -Block 0027 [ 97]: c91481340d2e127a -Block 0027 [ 98]: eea71ccc0b4a481a -Block 0027 [ 99]: 0bca32d3fdc77f24 -Block 0027 [100]: 1039e2ff86cb7d80 -Block 0027 [101]: b8eb26ad8ac50063 -Block 0027 [102]: ba25c859c968fcdd -Block 0027 [103]: b1602a88979ec508 -Block 0027 [104]: 99d39c292843e6e9 -Block 0027 [105]: 69c41a0141112cb2 -Block 0027 [106]: 17ff8363cca7f3a2 -Block 0027 [107]: d18ede26963ab3fe -Block 0027 [108]: 14b7b1e93d8b5a3f -Block 0027 [109]: 11191c6bac847bbe -Block 0027 [110]: 6ae81e2647196e86 -Block 0027 [111]: c21472f1a15dbd0f -Block 0027 [112]: 72eef955654aaca2 -Block 0027 [113]: b270a62ad0597a99 -Block 0027 [114]: 984cbc12b08ef54f -Block 0027 [115]: a5315c5bfdfe25c3 -Block 0027 [116]: 5f76937e43898671 -Block 0027 [117]: 7364633ab3970ce5 -Block 0027 [118]: 4f374b7d7f8a1b0a -Block 0027 [119]: 190506b0bb55d642 -Block 0027 [120]: eae14ea2387914da -Block 0027 [121]: 0dc68aced754b64c -Block 0027 [122]: 075bd13c980f8d5d -Block 0027 [123]: c409e3f292bd7f17 -Block 0027 [124]: 693248d680ad014b -Block 0027 [125]: 0e3b9002bf420a1e -Block 0027 [126]: 7ce6516b1b1fbf1f -Block 0027 [127]: 4c4e29ee31589c05 -Block 0028 [ 0]: b8e62f53d2ce1494 -Block 0028 [ 1]: 4716437de3cb4939 -Block 0028 [ 2]: e743de1560497632 -Block 0028 [ 3]: 4aef44990a0ce04e -Block 0028 [ 4]: 789495cb8eb2e15c -Block 0028 [ 5]: 2f4c1a5e7daeab2f -Block 0028 [ 6]: 6d5dec3557836315 -Block 0028 [ 7]: 7d4122e1a18253a5 -Block 0028 [ 8]: 2fd87fc3fad80e4f -Block 0028 [ 9]: 560b67a39b7c6946 -Block 0028 [ 10]: fb71469993b02a5d -Block 0028 [ 11]: b843138e008b7e8b -Block 0028 [ 12]: 752d820480fa2a86 -Block 0028 [ 13]: 436b4bbfb932c72b -Block 0028 [ 14]: fb01a61c5836da08 -Block 0028 [ 15]: db034cda046b6127 -Block 0028 [ 16]: 94e8d49a336311cd -Block 0028 [ 17]: 85525bd6d9b150ac -Block 0028 [ 18]: e281ba6b1984ffae -Block 0028 [ 19]: 341cd2cf27ed0fbe -Block 0028 [ 20]: 255fb900f9ee2a57 -Block 0028 [ 21]: 3d2ca7c55efd98b6 -Block 0028 [ 22]: e1bc705a1a4e5936 -Block 0028 [ 23]: 743d8a0984645c1e -Block 0028 [ 24]: d2a25ac5b7a0ae02 -Block 0028 [ 25]: 8464596d961c2fec -Block 0028 [ 26]: 56ccfff6f3f24d1e -Block 0028 [ 27]: 22e2f8934e984ff3 -Block 0028 [ 28]: 81d80069716afabf -Block 0028 [ 29]: 00bda8f056cac233 -Block 0028 [ 30]: facaf2ef615a11b3 -Block 0028 [ 31]: 16220aea7c2361cb -Block 0028 [ 32]: 7a98c8ac8b212c86 -Block 0028 [ 33]: be2046ffd6d4f005 -Block 0028 [ 34]: 4d3a8bfadb8130a6 -Block 0028 [ 35]: e69d29b66fa2840e -Block 0028 [ 36]: 82e6a4458387ec9c -Block 0028 [ 37]: e2fd832d31bc7e24 -Block 0028 [ 38]: 734a2b7a8215dc6f -Block 0028 [ 39]: 3318314708cd9804 -Block 0028 [ 40]: e3ef4eebaa2b3437 -Block 0028 [ 41]: 264b0dbfd42251dc -Block 0028 [ 42]: 666aa0a1091a9f29 -Block 0028 [ 43]: c0dc13ba6d3e4215 -Block 0028 [ 44]: f2d6adf01f5535c2 -Block 0028 [ 45]: 79889c421015c458 -Block 0028 [ 46]: 9f037ee45505e117 -Block 0028 [ 47]: 6e710fbc8eb69ec8 -Block 0028 [ 48]: 2a2c67c6b94577fa -Block 0028 [ 49]: 7076c829b540fcaa -Block 0028 [ 50]: d6a0e63df1de5e75 -Block 0028 [ 51]: 6b915128089dfa26 -Block 0028 [ 52]: 24a738c1369229d6 -Block 0028 [ 53]: 38b6a31386518342 -Block 0028 [ 54]: 2504a90ba6da1fb8 -Block 0028 [ 55]: 3aaca316b13bd802 -Block 0028 [ 56]: d4ded71c362c675a -Block 0028 [ 57]: d279da15ea3260a8 -Block 0028 [ 58]: 622877b73a43e0bc -Block 0028 [ 59]: ed8fdde4c02d0c1f -Block 0028 [ 60]: 9f65a667b53b1f5b -Block 0028 [ 61]: 054434ff440c6b0f -Block 0028 [ 62]: 521510fe15be4238 -Block 0028 [ 63]: 09d1cb3dbbfab3d2 -Block 0028 [ 64]: 60c405bae52b27bb -Block 0028 [ 65]: 4b8430f61f53bffb -Block 0028 [ 66]: ddea9aa360566f0b -Block 0028 [ 67]: 9e4b0cdf140e2d2d -Block 0028 [ 68]: eeb7e866539ca7b8 -Block 0028 [ 69]: 2305d2ec0c38569e -Block 0028 [ 70]: ba3c174f1af83f49 -Block 0028 [ 71]: cf1716cd5dbff726 -Block 0028 [ 72]: c69d9b4bb6156859 -Block 0028 [ 73]: e3fcef7fc8facb83 -Block 0028 [ 74]: b9c49c1058079ee0 -Block 0028 [ 75]: be2238660af66738 -Block 0028 [ 76]: 29e7854ac183dc60 -Block 0028 [ 77]: b093d02735b183c7 -Block 0028 [ 78]: 0d97fe09adb193b0 -Block 0028 [ 79]: 8d4d0e8859e01b2a -Block 0028 [ 80]: 1c09ca06b9d70f7a -Block 0028 [ 81]: 03efd2a5e5867887 -Block 0028 [ 82]: a33148a972381c6d -Block 0028 [ 83]: c5028b2c7cf9d4cd -Block 0028 [ 84]: 8b891e1df0374009 -Block 0028 [ 85]: fdaedfb6277b0c64 -Block 0028 [ 86]: 01f362abbe4b7d66 -Block 0028 [ 87]: 1593ceb38675eb7a -Block 0028 [ 88]: 4851adf7198e4466 -Block 0028 [ 89]: 9723e4ff1426733f -Block 0028 [ 90]: 2d6f41236ebaeb0d -Block 0028 [ 91]: acbf9afa3d54103c -Block 0028 [ 92]: 089f3f91047ae09c -Block 0028 [ 93]: e20fd7da3b7332c5 -Block 0028 [ 94]: 8c3d70105a8261fc -Block 0028 [ 95]: 5234c9bc7fb63220 -Block 0028 [ 96]: 9c483af4900f0f6f -Block 0028 [ 97]: 9cd23f8cdbc29189 -Block 0028 [ 98]: 0d20be4fe1b12641 -Block 0028 [ 99]: 247545f7ebc6b9c5 -Block 0028 [100]: 59d21e2223d7b032 -Block 0028 [101]: 5fddedd3de444155 -Block 0028 [102]: 57c23649004c94a0 -Block 0028 [103]: 47f8c185c7daa78e -Block 0028 [104]: 7a436d32bb4ea254 -Block 0028 [105]: 1ea2b132562f308f -Block 0028 [106]: 1df0c44ae53da0c1 -Block 0028 [107]: 5d94631c278430df -Block 0028 [108]: 223f090e4799308e -Block 0028 [109]: c34b01200a5f0902 -Block 0028 [110]: 28988167ff0bcfd9 -Block 0028 [111]: ca3efac91e41e25f -Block 0028 [112]: d24655cf3dd291cd -Block 0028 [113]: a89f8a7709cf0cc7 -Block 0028 [114]: 77207aee3ce2d692 -Block 0028 [115]: 15447a4d13aee4f0 -Block 0028 [116]: 4eeb873ecdee4dee -Block 0028 [117]: 22fe4e3a6e49ac5d -Block 0028 [118]: b3589967e475ff68 -Block 0028 [119]: 82b89afabfa951b1 -Block 0028 [120]: 507f14e7277ca935 -Block 0028 [121]: 8fc0cdbca8b10d5a -Block 0028 [122]: 468f7431d1d35d51 -Block 0028 [123]: 0d1db698bf4056f7 -Block 0028 [124]: d48ceb4a52d6c49e -Block 0028 [125]: 4bb84640eada6d78 -Block 0028 [126]: e8436d8fac0e9480 -Block 0028 [127]: 26861997b678a434 -Block 0029 [ 0]: dc0dc7d0a82c999a -Block 0029 [ 1]: 0e7cd16d2f440e38 -Block 0029 [ 2]: 9f26fad50ff36536 -Block 0029 [ 3]: cea8f4c5df334ab7 -Block 0029 [ 4]: f300d6980ad722ff -Block 0029 [ 5]: 8eb946655f1d9632 -Block 0029 [ 6]: 0b922b678d8cadbf -Block 0029 [ 7]: ed47f3a695e54f8a -Block 0029 [ 8]: a04f84304cf89f71 -Block 0029 [ 9]: 8ce09bb046ec0a8c -Block 0029 [ 10]: 9d6490006c2a5257 -Block 0029 [ 11]: b3199e810bcfbb88 -Block 0029 [ 12]: 0e207156c4f218a0 -Block 0029 [ 13]: a6398c4e9dbcea21 -Block 0029 [ 14]: c1b9e1a00b8a739f -Block 0029 [ 15]: c526710d98b6bf9b -Block 0029 [ 16]: 456b74b8105ae58b -Block 0029 [ 17]: 1627450bd0fba708 -Block 0029 [ 18]: 41857be6b6848579 -Block 0029 [ 19]: 5233421198274bae -Block 0029 [ 20]: 4b2bd848cd0384c0 -Block 0029 [ 21]: 06e3d552d3f4bb55 -Block 0029 [ 22]: 775fb045ea301961 -Block 0029 [ 23]: b8a46779d7f319f2 -Block 0029 [ 24]: a1727300e2873c49 -Block 0029 [ 25]: 2b547509b7138ebb -Block 0029 [ 26]: dbdcef5e8a67474f -Block 0029 [ 27]: a441df44126436be -Block 0029 [ 28]: 16402d492197daed -Block 0029 [ 29]: 77279d37d3daef7b -Block 0029 [ 30]: 4c6f50e750e0efea -Block 0029 [ 31]: 69a69d2e077902b0 -Block 0029 [ 32]: bee3b81216877446 -Block 0029 [ 33]: 9255f02e02972175 -Block 0029 [ 34]: 7d47b932a7bdc11e -Block 0029 [ 35]: 9b6d5923af072c99 -Block 0029 [ 36]: 0a3819ce8e9f49ed -Block 0029 [ 37]: 98ed9e938b421644 -Block 0029 [ 38]: d1cffdb408dc5063 -Block 0029 [ 39]: 2e615c6fbd0b9642 -Block 0029 [ 40]: ba63184fc76368e8 -Block 0029 [ 41]: 903af699e71bfe3a -Block 0029 [ 42]: 73218c8b59c6af76 -Block 0029 [ 43]: 0fa0e272f3735d96 -Block 0029 [ 44]: 2a287ece60d08fa8 -Block 0029 [ 45]: 4d5475661899e55f -Block 0029 [ 46]: 69d8074c9d0f42ad -Block 0029 [ 47]: 30eebd523eb0754e -Block 0029 [ 48]: b53f283d7752fc7d -Block 0029 [ 49]: 5dea1409e6111e21 -Block 0029 [ 50]: dcd6aba8a5dfe8c6 -Block 0029 [ 51]: ea3657c1e57689fe -Block 0029 [ 52]: d46407d5713004ee -Block 0029 [ 53]: 7cdd19952ee13591 -Block 0029 [ 54]: 38f3d88b0ae422c5 -Block 0029 [ 55]: e7da12227354c586 -Block 0029 [ 56]: 113440ada1f5e39e -Block 0029 [ 57]: 8ccb809fafc63799 -Block 0029 [ 58]: bfd3985569626cf8 -Block 0029 [ 59]: 7ad94e3e7b06e8e8 -Block 0029 [ 60]: 6b444ae566e62a4f -Block 0029 [ 61]: ed7960eada1d2774 -Block 0029 [ 62]: b0bdc355d05782ef -Block 0029 [ 63]: 6e25edee7de6f5e8 -Block 0029 [ 64]: 9d0e81797df63c41 -Block 0029 [ 65]: 693a3bc26573c32a -Block 0029 [ 66]: e7229482ee70c324 -Block 0029 [ 67]: edf62e67ad4eaa5a -Block 0029 [ 68]: bbb26d77c48c9954 -Block 0029 [ 69]: 870f2d918efb8fdc -Block 0029 [ 70]: 422a46134ec8d22c -Block 0029 [ 71]: 35644114b3f8fc04 -Block 0029 [ 72]: 3532571a5c119a3a -Block 0029 [ 73]: aa8b114087670213 -Block 0029 [ 74]: 6006a9a76ab59c06 -Block 0029 [ 75]: 255230fdb77abea5 -Block 0029 [ 76]: bb50b303992eb4bd -Block 0029 [ 77]: 502b81a9140cc5e8 -Block 0029 [ 78]: d1f6edb3918526e5 -Block 0029 [ 79]: 3d729e074a33c655 -Block 0029 [ 80]: 297a725b9b3dafe2 -Block 0029 [ 81]: 8a436bdf75e0799f -Block 0029 [ 82]: f32829e3052dd6e7 -Block 0029 [ 83]: e8020c256d086133 -Block 0029 [ 84]: 3e868bd1c14c4a35 -Block 0029 [ 85]: 510fa73c666a05cf -Block 0029 [ 86]: 2de06be3807cfa46 -Block 0029 [ 87]: 1131a6fc025f90f0 -Block 0029 [ 88]: d948da793fcf0195 -Block 0029 [ 89]: f59ea5fff22c69f3 -Block 0029 [ 90]: 8a8b281df8a1573b -Block 0029 [ 91]: aa614b1304208961 -Block 0029 [ 92]: 4b791a952fc31b04 -Block 0029 [ 93]: 9653dc5b85510b5a -Block 0029 [ 94]: 8391634e659159dc -Block 0029 [ 95]: 6b090f8a6b59c4cd -Block 0029 [ 96]: 04c73c62fb1a121a -Block 0029 [ 97]: 186e3e22f6df5d01 -Block 0029 [ 98]: 775987313eba92bd -Block 0029 [ 99]: b150a5063cd54416 -Block 0029 [100]: a898b872c4290dc0 -Block 0029 [101]: 2dec9c175eaa421e -Block 0029 [102]: f2349cc83080779d -Block 0029 [103]: 7b8a3330d6cc6828 -Block 0029 [104]: 57a82d270e0d0a83 -Block 0029 [105]: f7c09940f35b45e2 -Block 0029 [106]: 395dca91740b4d8f -Block 0029 [107]: dc452d4bb0ff7b49 -Block 0029 [108]: c928d4f1f5feae04 -Block 0029 [109]: 29a21f9c67cb6c67 -Block 0029 [110]: c7192e442ca9c08c -Block 0029 [111]: 86846d3ffae5176f -Block 0029 [112]: 466454ea82069d53 -Block 0029 [113]: 7cbb9ec68b6f3b37 -Block 0029 [114]: 1a3483f87e349bce -Block 0029 [115]: 72735395b8866f07 -Block 0029 [116]: b7845e72f6a6c391 -Block 0029 [117]: d3cd149c07e70ed4 -Block 0029 [118]: 70152f3ba32dadef -Block 0029 [119]: 9b2fc8cf00a302e9 -Block 0029 [120]: a6f923e577c940bd -Block 0029 [121]: 958c7b390683bf99 -Block 0029 [122]: 6835bc14651b0d68 -Block 0029 [123]: 4af56df7bc755c90 -Block 0029 [124]: 1d299f11bef26d4a -Block 0029 [125]: 3c33f78a4e2c7041 -Block 0029 [126]: 1e7aa5bfab2de5f6 -Block 0029 [127]: a1cfbf5cc9690a29 -Block 0030 [ 0]: 56403ff10624a725 -Block 0030 [ 1]: cb21b53aeebf1911 -Block 0030 [ 2]: 6a4b03dec8d7576a -Block 0030 [ 3]: 0a959378af94d9a2 -Block 0030 [ 4]: 76740a8361f993da -Block 0030 [ 5]: f7ec77e7d0a9c2e3 -Block 0030 [ 6]: 930548e31bf90bb6 -Block 0030 [ 7]: 33e8969a8fefb02a -Block 0030 [ 8]: b80b5bdea558ae41 -Block 0030 [ 9]: 7afcf57879a14ff7 -Block 0030 [ 10]: e9a58a4d57c0b159 -Block 0030 [ 11]: b46f819f25300f6d -Block 0030 [ 12]: 73a8dd3fec3d706b -Block 0030 [ 13]: 8df47cfad884b6b8 -Block 0030 [ 14]: db32b4826baff56d -Block 0030 [ 15]: 93fca71b86463568 -Block 0030 [ 16]: 958fb17a99858dc9 -Block 0030 [ 17]: bf8b9deaae690142 -Block 0030 [ 18]: 5d69921ae34a496c -Block 0030 [ 19]: cd9430b2765c1a00 -Block 0030 [ 20]: 3cc3eac00ab30b27 -Block 0030 [ 21]: 784c9d59ff888702 -Block 0030 [ 22]: 5ebfde2ffc5e8612 -Block 0030 [ 23]: fa94037530fc9117 -Block 0030 [ 24]: f1aad571330e6f2d -Block 0030 [ 25]: 12242a0143d83d9a -Block 0030 [ 26]: 067f6bae76476b1f -Block 0030 [ 27]: ab1e017f3b96cf7b -Block 0030 [ 28]: b07114c3fc1b52c3 -Block 0030 [ 29]: d395f25bf240f4cd -Block 0030 [ 30]: 2c4f65c1a5891610 -Block 0030 [ 31]: fd8971a418f37a17 -Block 0030 [ 32]: 59b41782840c6382 -Block 0030 [ 33]: a4609b7937256a85 -Block 0030 [ 34]: 4060a0ad26047191 -Block 0030 [ 35]: d6bb43e24964ce71 -Block 0030 [ 36]: 070744845b3e8c27 -Block 0030 [ 37]: 8a3aced5135b61d5 -Block 0030 [ 38]: 2d361d2aa3d973f6 -Block 0030 [ 39]: f8b7b6450c897249 -Block 0030 [ 40]: c21c5d01c2061db5 -Block 0030 [ 41]: 708ee32963504c80 -Block 0030 [ 42]: e0526f18fa7286fa -Block 0030 [ 43]: 452c1cc6bd2a3df8 -Block 0030 [ 44]: e7ee8913d0dcbe12 -Block 0030 [ 45]: 0d20f9888247400c -Block 0030 [ 46]: c57bb303384000c1 -Block 0030 [ 47]: 8bdbdfd39f23cafd -Block 0030 [ 48]: d3d2db36d3f0bfe9 -Block 0030 [ 49]: 57842c57448b4d21 -Block 0030 [ 50]: 67cccfdc58e9425e -Block 0030 [ 51]: 0a77bcda03f8e7ab -Block 0030 [ 52]: 08162d72f21cd178 -Block 0030 [ 53]: d862f85ef1aad708 -Block 0030 [ 54]: 33a2c7c7302cf000 -Block 0030 [ 55]: 733964f2f7d11f3a -Block 0030 [ 56]: f500fc23d8b85449 -Block 0030 [ 57]: 61de1eb634e3fd8d -Block 0030 [ 58]: fcb8381a3c9cd9b6 -Block 0030 [ 59]: 7017a157f66d15f1 -Block 0030 [ 60]: c64e8b189a954811 -Block 0030 [ 61]: 9ba76d687b94adaf -Block 0030 [ 62]: a6b272e5d92188b8 -Block 0030 [ 63]: 6841fdc815be462f -Block 0030 [ 64]: 1b53ca5fe4da04f9 -Block 0030 [ 65]: d140a9681de7f793 -Block 0030 [ 66]: 2864833625fb709b -Block 0030 [ 67]: 466e842a1e25b9d1 -Block 0030 [ 68]: 6b18539a0e8f361b -Block 0030 [ 69]: bfb3f75745f472ce -Block 0030 [ 70]: 57c2b7c84c8ec029 -Block 0030 [ 71]: 07e8170512cda2eb -Block 0030 [ 72]: 5eb697918e0df23d -Block 0030 [ 73]: a452ae051564b908 -Block 0030 [ 74]: 6de6f313b67d0582 -Block 0030 [ 75]: 134f87167e7c40b2 -Block 0030 [ 76]: eccecc2fe1055b86 -Block 0030 [ 77]: a4ca7026209e9bb1 -Block 0030 [ 78]: 7552964676a78b35 -Block 0030 [ 79]: 7a61cf6633e2fbeb -Block 0030 [ 80]: 784b00f1cbb29afe -Block 0030 [ 81]: 9fcdddd078b1e257 -Block 0030 [ 82]: 00e101054f707c03 -Block 0030 [ 83]: db5adaf60bf2e437 -Block 0030 [ 84]: ef81ffd1dfef4efe -Block 0030 [ 85]: 67485ac05e54166b -Block 0030 [ 86]: f9f051d395efb2ef -Block 0030 [ 87]: 4771eeb1bca6abc0 -Block 0030 [ 88]: 25ed681a049a8932 -Block 0030 [ 89]: 85aa643b1e215974 -Block 0030 [ 90]: b95ce7df5509a035 -Block 0030 [ 91]: dd7ee5ec984e80f7 -Block 0030 [ 92]: b5082241623dec7e -Block 0030 [ 93]: 360e2f0aa5094574 -Block 0030 [ 94]: ecb1e918ba947537 -Block 0030 [ 95]: 4b39a59cf5a4724c -Block 0030 [ 96]: 2c2e27bc2a4aa6cb -Block 0030 [ 97]: daba908b41132d44 -Block 0030 [ 98]: c67199b898cf8033 -Block 0030 [ 99]: 9ea02120498927e8 -Block 0030 [100]: 6f05fdbc9fa3d5b2 -Block 0030 [101]: bb4b7047cfb8b9b5 -Block 0030 [102]: dc3841c0c91928f8 -Block 0030 [103]: 5ecc900dfacc478a -Block 0030 [104]: eb131107b102b5ed -Block 0030 [105]: ef986a212c71b150 -Block 0030 [106]: 8c0346f529d89ff8 -Block 0030 [107]: 15a3dbebdffac0ef -Block 0030 [108]: 23b8ff1afadba569 -Block 0030 [109]: cec9a5bcfeb89a9d -Block 0030 [110]: dfa3a9eab4e56646 -Block 0030 [111]: 6f249dbe4936c946 -Block 0030 [112]: 7cd49a60875ff3b8 -Block 0030 [113]: 456f7d13c3c46c7d -Block 0030 [114]: 06f3cd65d03cb442 -Block 0030 [115]: 2304f587a79164fb -Block 0030 [116]: fa9507f37257dd34 -Block 0030 [117]: e436215a2968e923 -Block 0030 [118]: fadb5d64c644c1f0 -Block 0030 [119]: 6586ddb3ac4ec704 -Block 0030 [120]: c259fb75e774f567 -Block 0030 [121]: 9c6f25ac91097ef7 -Block 0030 [122]: 53a3aa7b117fd8d2 -Block 0030 [123]: a222c5dbfcea5b17 -Block 0030 [124]: f5c7264e4298f7dd -Block 0030 [125]: e42b8aab71526f4c -Block 0030 [126]: 36a06cedca259e6e -Block 0030 [127]: 7d4c74d40f6cf9b1 -Block 0031 [ 0]: 23096d324bc688ac -Block 0031 [ 1]: aaaf0d73fe233abf -Block 0031 [ 2]: 45deb0feb5cfe89f -Block 0031 [ 3]: e75e8591c13fa1c1 -Block 0031 [ 4]: 58fc4134fad92e02 -Block 0031 [ 5]: 5db26a376b615c02 -Block 0031 [ 6]: da053b431ef56ee5 -Block 0031 [ 7]: 6441eaa8d6f4b63b -Block 0031 [ 8]: e505203c43439709 -Block 0031 [ 9]: 6cc836cf5a1d4dd4 -Block 0031 [ 10]: 035f77a001795210 -Block 0031 [ 11]: f7d84a712a0be8c6 -Block 0031 [ 12]: 6374683fe43aafb2 -Block 0031 [ 13]: 79b63ad8b92922bc -Block 0031 [ 14]: c406f248eabf2717 -Block 0031 [ 15]: 575a5c692ab42804 -Block 0031 [ 16]: c6d10060a1cd2621 -Block 0031 [ 17]: 92da1e6618e11b43 -Block 0031 [ 18]: b523f610826573ec -Block 0031 [ 19]: 91647f861a1b738d -Block 0031 [ 20]: 53b2d479aecaeac9 -Block 0031 [ 21]: d718fdfb5f58610d -Block 0031 [ 22]: 093838aa5ff089da -Block 0031 [ 23]: 38372e3db58bffd4 -Block 0031 [ 24]: 8d378223cde74bd9 -Block 0031 [ 25]: b88babf6be9b7885 -Block 0031 [ 26]: 37798d42f3b741e5 -Block 0031 [ 27]: 617dd90119c8ed1e -Block 0031 [ 28]: f16f7f20516e2a35 -Block 0031 [ 29]: c93603426642baa6 -Block 0031 [ 30]: 146abacd69d959f5 -Block 0031 [ 31]: c4247f51d67c6cbd -Block 0031 [ 32]: c0510ff3c43f68a4 -Block 0031 [ 33]: d52b68f374ae3d9a -Block 0031 [ 34]: e5939a3a19bd722d -Block 0031 [ 35]: d5290857364573f0 -Block 0031 [ 36]: 17aa070d61e5c302 -Block 0031 [ 37]: 1f37f8771382a8b5 -Block 0031 [ 38]: 9732439f2585d52c -Block 0031 [ 39]: cb0ff8ecf1a64368 -Block 0031 [ 40]: 6b3aa8cb0652f1d3 -Block 0031 [ 41]: bc79601df3ef67fd -Block 0031 [ 42]: 21a77f1daa776047 -Block 0031 [ 43]: 60f67b8268745ff7 -Block 0031 [ 44]: 6461989778c5c365 -Block 0031 [ 45]: f66c239e51ace489 -Block 0031 [ 46]: 1f4215447e8b95c5 -Block 0031 [ 47]: fda49d068c4cca64 -Block 0031 [ 48]: b82ecf8e54b7be06 -Block 0031 [ 49]: ca622a0f405ecce9 -Block 0031 [ 50]: 486f841dff09d069 -Block 0031 [ 51]: 630e220de62c44b8 -Block 0031 [ 52]: dcd5e3d43775f5c0 -Block 0031 [ 53]: f51e1db1beb85f5d -Block 0031 [ 54]: 9bebcb6211ea1418 -Block 0031 [ 55]: 27c12b98ab0cde15 -Block 0031 [ 56]: 577c8483cefbe03a -Block 0031 [ 57]: f18162e7dfe1fa28 -Block 0031 [ 58]: 4550ae5a14910ef5 -Block 0031 [ 59]: 68c17796c3e18462 -Block 0031 [ 60]: ce3f1bc4d8ca6ea0 -Block 0031 [ 61]: 0a7f6c8713171bf4 -Block 0031 [ 62]: 49db8e353dbc6c63 -Block 0031 [ 63]: 3c1b03bcbf973b61 -Block 0031 [ 64]: 50b73b5a2be2d01a -Block 0031 [ 65]: cad103e62cd424b7 -Block 0031 [ 66]: b63bb94a03e96b94 -Block 0031 [ 67]: 3dce33f43571b63b -Block 0031 [ 68]: 8991efdcd68b1881 -Block 0031 [ 69]: 7991bec920dc2513 -Block 0031 [ 70]: 543bd896a0aec32a -Block 0031 [ 71]: 31975407e35ffbda -Block 0031 [ 72]: 91bf1882d9f04f82 -Block 0031 [ 73]: 915b49ba75abd738 -Block 0031 [ 74]: c14e94a2903fb3dd -Block 0031 [ 75]: 8dd6532f78147d7f -Block 0031 [ 76]: 0451fc2ab0afb3fb -Block 0031 [ 77]: cca805260a94a9f1 -Block 0031 [ 78]: 9d2e561caf0bfae7 -Block 0031 [ 79]: cb48e4c034cb2f70 -Block 0031 [ 80]: e6296174922c963e -Block 0031 [ 81]: bc32fcbb313624c7 -Block 0031 [ 82]: 75c4a636f8acf6cb -Block 0031 [ 83]: 4ad9dd3db09f06c8 -Block 0031 [ 84]: 50edd6878814ca57 -Block 0031 [ 85]: 5bfe1ff263a3ae46 -Block 0031 [ 86]: 68ee772f72f6c8b2 -Block 0031 [ 87]: 9735d4d4522038cb -Block 0031 [ 88]: 6c8b146a8e5bd46e -Block 0031 [ 89]: 786f50b346deed51 -Block 0031 [ 90]: 01b34a7881702460 -Block 0031 [ 91]: 062f20d6acb3e8df -Block 0031 [ 92]: 906c1d926d2fd7ca -Block 0031 [ 93]: e1101e03b5f2f535 -Block 0031 [ 94]: 489144da468edbe4 -Block 0031 [ 95]: 7c69834cb26f3591 -Block 0031 [ 96]: fe71ee9f1eda2fa8 -Block 0031 [ 97]: f686a8a9f320c81d -Block 0031 [ 98]: 0f36ac84e3b1ab3a -Block 0031 [ 99]: 62c84899bff9c8ea -Block 0031 [100]: ab6c693fd5812652 -Block 0031 [101]: 2490c249e4bdc896 -Block 0031 [102]: 90165b9d7707d15d -Block 0031 [103]: 602089074e333b10 -Block 0031 [104]: cfeeb42b75b826f2 -Block 0031 [105]: 25df5eb36f0fcbe6 -Block 0031 [106]: 6c610a78e7e2c121 -Block 0031 [107]: ba9ef75c8b1ab051 -Block 0031 [108]: 751580ae24ffafff -Block 0031 [109]: 796d75c2626f151e -Block 0031 [110]: 51a674f9cd60f453 -Block 0031 [111]: 4092b7a9db825e4b -Block 0031 [112]: 03b892952b3a6783 -Block 0031 [113]: 984f1224c15e46d3 -Block 0031 [114]: 577f3987e96bc50a -Block 0031 [115]: 48c651195cc2f54a -Block 0031 [116]: a188e49cafffb66b -Block 0031 [117]: de2fe79179d0d038 -Block 0031 [118]: 752817094fda94c8 -Block 0031 [119]: ee7fc1aebfdf6676 -Block 0031 [120]: 9ef3229e4a43bc12 -Block 0031 [121]: 4ed60db4a70c9ebc -Block 0031 [122]: ca210a90d1e7b1d5 -Block 0031 [123]: e4ac7e478e4c5742 -Block 0031 [124]: e6495ff396d8363d -Block 0031 [125]: 6ff03b334458fbbe -Block 0031 [126]: 9837e423a5dfa741 -Block 0031 [127]: 047d44015a325363 - - After pass 1: -Block 0000 [ 0]: e3fb2e268f900f66 -Block 0000 [ 1]: 7439378a0a6639f2 -Block 0000 [ 2]: c20177f77b9e57f7 -Block 0000 [ 3]: 62d1c2f3b177e775 -Block 0000 [ 4]: 010b430eca211c55 -Block 0000 [ 5]: 581f6b73beb358a2 -Block 0000 [ 6]: de4531f2d3e9e765 -Block 0000 [ 7]: 354d361204880bc4 -Block 0000 [ 8]: 60f45d3ec3e81426 -Block 0000 [ 9]: 59d1b09beef4315c -Block 0000 [ 10]: 4c32367f94014002 -Block 0000 [ 11]: c62f23749953a777 -Block 0000 [ 12]: 96ba213b1c87add4 -Block 0000 [ 13]: 9d4a8c5f9f9979bf -Block 0000 [ 14]: ceba387fd3bf3ce8 -Block 0000 [ 15]: dcb091e26fdcb1fe -Block 0000 [ 16]: 40c140ea86068435 -Block 0000 [ 17]: 6da8a0c2a2c9f431 -Block 0000 [ 18]: 354901ef32128b87 -Block 0000 [ 19]: d46f9eb89dad9f84 -Block 0000 [ 20]: 1fcc3f60149dc112 -Block 0000 [ 21]: 2a341f1c1dc3af46 -Block 0000 [ 22]: 22659f2bfd353eeb -Block 0000 [ 23]: 4d6d28963f38a164 -Block 0000 [ 24]: df5d69f9d0b40c13 -Block 0000 [ 25]: 89abf69974dd6c09 -Block 0000 [ 26]: a46625c20113d827 -Block 0000 [ 27]: 6f65f7f4457eea4b -Block 0000 [ 28]: 4a2166aeb2c13701 -Block 0000 [ 29]: cc33af554ce1f9d5 -Block 0000 [ 30]: 2af8f0a4ab422f82 -Block 0000 [ 31]: 1471f3986be1318e -Block 0000 [ 32]: c189f6ad217e1902 -Block 0000 [ 33]: a4025f02c6f24e1b -Block 0000 [ 34]: 000270894020bf40 -Block 0000 [ 35]: ac654c608f7f6b1a -Block 0000 [ 36]: e890c2c953eb6cff -Block 0000 [ 37]: f70fd27b375d00c9 -Block 0000 [ 38]: f818fd8309282f55 -Block 0000 [ 39]: 0f82560ec9db8484 -Block 0000 [ 40]: 2fadca952c97e08d -Block 0000 [ 41]: 560503e18158235b -Block 0000 [ 42]: 8f75cedfa48eae2c -Block 0000 [ 43]: b0c0ba0f37f28d8c -Block 0000 [ 44]: 0ab11a787093b7c8 -Block 0000 [ 45]: 4ae894919c99adfd -Block 0000 [ 46]: b9438539887c129e -Block 0000 [ 47]: 652052807b9b929e -Block 0000 [ 48]: 1030a36998d8fc43 -Block 0000 [ 49]: 0d78648b147fc3fb -Block 0000 [ 50]: a3935a0d4d807f6b -Block 0000 [ 51]: 18322a1a3359986f -Block 0000 [ 52]: 39a4740b865a74d9 -Block 0000 [ 53]: efa0e864a84dbda3 -Block 0000 [ 54]: e2f7ea75d1373e2f -Block 0000 [ 55]: 52f49da5261114b3 -Block 0000 [ 56]: 6a9f76e97f268ed1 -Block 0000 [ 57]: 43b853a2d338a8a0 -Block 0000 [ 58]: e1ae6a0bd807180b -Block 0000 [ 59]: 01040029cc767661 -Block 0000 [ 60]: 5e58e78ee50a1767 -Block 0000 [ 61]: 57ec24216fc63ed8 -Block 0000 [ 62]: 80a49c3f22fdd85d -Block 0000 [ 63]: d5d0e4eead2e4ef1 -Block 0000 [ 64]: d90cd2dea871320e -Block 0000 [ 65]: 4898d8ab95cc1eac -Block 0000 [ 66]: b2526ee0ecd1b7c3 -Block 0000 [ 67]: 3f1304f97e40d1fd -Block 0000 [ 68]: 4fe7f903ccd50fc7 -Block 0000 [ 69]: b09f1e4534a2b086 -Block 0000 [ 70]: 15b2d783fef56d65 -Block 0000 [ 71]: 623b233f45b78357 -Block 0000 [ 72]: 222b8328857cbbf3 -Block 0000 [ 73]: 9e8b591e3ddc674b -Block 0000 [ 74]: 9d5f9c1175d3cfac -Block 0000 [ 75]: cdfed2479475ff0f -Block 0000 [ 76]: 578303162fa2fd68 -Block 0000 [ 77]: abdff1e5a90040df -Block 0000 [ 78]: 8bdf145f562c9439 -Block 0000 [ 79]: 6fdd6ee3687d0755 -Block 0000 [ 80]: e79896384171ce2c -Block 0000 [ 81]: 5fe7b604f2342731 -Block 0000 [ 82]: ce9aaeb79e334ae3 -Block 0000 [ 83]: ff7393ad8d8452ab -Block 0000 [ 84]: 1340d485daddd017 -Block 0000 [ 85]: 9f5e61eb20c73f56 -Block 0000 [ 86]: 12708fe8ee89f971 -Block 0000 [ 87]: 83e57ca3b90fd30d -Block 0000 [ 88]: 57bd5a009e893c1a -Block 0000 [ 89]: e8a2427f400a6b68 -Block 0000 [ 90]: 1864104374f0922c -Block 0000 [ 91]: 3a07637c208d2efe -Block 0000 [ 92]: 621a846dcbfb1ced -Block 0000 [ 93]: 533f537dd33899fb -Block 0000 [ 94]: 56054d47bd2bf2bc -Block 0000 [ 95]: bd5da1e233daecba -Block 0000 [ 96]: c828f6e61986518c -Block 0000 [ 97]: f776e421d7691707 -Block 0000 [ 98]: dd4d1701c47721a0 -Block 0000 [ 99]: ef2a67d69b2090a4 -Block 0000 [100]: 0e48ac99d7796b67 -Block 0000 [101]: 6f35548fd9821251 -Block 0000 [102]: e360107576a231e4 -Block 0000 [103]: 85b6afa7a07e8f2e -Block 0000 [104]: 80df552826894974 -Block 0000 [105]: 85fb118f9f9acbca -Block 0000 [106]: f9e6526764ae5abc -Block 0000 [107]: 3166d902c90b73ab -Block 0000 [108]: 2db764f075d97191 -Block 0000 [109]: 91bb8e6002bcdd69 -Block 0000 [110]: 3b4bd48482fc18a0 -Block 0000 [111]: 1964e27d7b517411 -Block 0000 [112]: 04bce2ee1a2ae0fb -Block 0000 [113]: c8b55cdb33615758 -Block 0000 [114]: 5571d3cf275d9e9a -Block 0000 [115]: eb7dc587cf0ba5c3 -Block 0000 [116]: f42371866a0ba059 -Block 0000 [117]: a0096158492b1118 -Block 0000 [118]: d5fbd8925fbca58a -Block 0000 [119]: bc448b96f2f5d0f8 -Block 0000 [120]: 017a72102e722138 -Block 0000 [121]: 8eef302392d4e786 -Block 0000 [122]: 8ecde5ec0f48c234 -Block 0000 [123]: 8484b051cf5d7390 -Block 0000 [124]: 341edf1f8ce7f000 -Block 0000 [125]: 20997c56a8c10e85 -Block 0000 [126]: 23b51c14aa856b3e -Block 0000 [127]: 46e559dac5ea41be -Block 0001 [ 0]: 1d46a5b2e77de72b -Block 0001 [ 1]: ee043289f4d0831d -Block 0001 [ 2]: 1a413147f5e3b9f7 -Block 0001 [ 3]: 137f3aef8602d2f1 -Block 0001 [ 4]: d454d1ffa74dc5fb -Block 0001 [ 5]: 828cda6b79135058 -Block 0001 [ 6]: 278f3ea96a5cd853 -Block 0001 [ 7]: afdb583dd84a8191 -Block 0001 [ 8]: 1642eb90bbf75ac2 -Block 0001 [ 9]: 3b841aa72f245bda -Block 0001 [ 10]: f3b6ce618684abd1 -Block 0001 [ 11]: d9111cea61e82f2c -Block 0001 [ 12]: b00bc3cfc9f3e0ec -Block 0001 [ 13]: 13e0841f678146d0 -Block 0001 [ 14]: 87344022a6314341 -Block 0001 [ 15]: 16ebe5bbda788f2c -Block 0001 [ 16]: f31897fc7711373d -Block 0001 [ 17]: 95646b8a01c39e6d -Block 0001 [ 18]: 9978b1566a604df2 -Block 0001 [ 19]: 28e3b9275aa1cb95 -Block 0001 [ 20]: fbe7b8cd882db34e -Block 0001 [ 21]: 68db9956b0687fd5 -Block 0001 [ 22]: e3a130ad0550deb5 -Block 0001 [ 23]: 48816eecc8abd94a -Block 0001 [ 24]: 7d6fc00b6ba0c2bf -Block 0001 [ 25]: 2f4472d95cf686fe -Block 0001 [ 26]: 327f0b645db59ab9 -Block 0001 [ 27]: 829296ca1a22fc08 -Block 0001 [ 28]: 0f0a79cdf903f2e8 -Block 0001 [ 29]: 6c332ecad39a87bd -Block 0001 [ 30]: 1e260f565f5989b7 -Block 0001 [ 31]: d5a1473dbe2d0aa2 -Block 0001 [ 32]: 096a921679ba2dd1 -Block 0001 [ 33]: 7619e7d77c9d01bb -Block 0001 [ 34]: 3b56411b799de6e2 -Block 0001 [ 35]: c949efaa5d0a4df2 -Block 0001 [ 36]: e53adb20842f3ca6 -Block 0001 [ 37]: 136521fd46a4acb8 -Block 0001 [ 38]: 8197cfc0a1fcf52f -Block 0001 [ 39]: 311a717a05a453f1 -Block 0001 [ 40]: f1fefcc0c061303e -Block 0001 [ 41]: f847097f596a3f8e -Block 0001 [ 42]: f194b08886ac3cad -Block 0001 [ 43]: a9246165ca378831 -Block 0001 [ 44]: 8ac25ee4ae34f610 -Block 0001 [ 45]: 33df3ba56469a9ea -Block 0001 [ 46]: 9eee7810a9d70864 -Block 0001 [ 47]: 6c75b1e152236a92 -Block 0001 [ 48]: 752235f00bb5c903 -Block 0001 [ 49]: f164925c2a7be36c -Block 0001 [ 50]: 2da1e30108fc8fb4 -Block 0001 [ 51]: 6c3771e335d6017a -Block 0001 [ 52]: cf4b88a58975d2be -Block 0001 [ 53]: a88c5459281f39b1 -Block 0001 [ 54]: 60905f0a77168ee8 -Block 0001 [ 55]: f94282bf2a421210 -Block 0001 [ 56]: fc76fc1fc2f01720 -Block 0001 [ 57]: 6da2751d9852faed -Block 0001 [ 58]: 986d26816864de3d -Block 0001 [ 59]: c553f05019d4a321 -Block 0001 [ 60]: 68c6e60d0a99ebf5 -Block 0001 [ 61]: 57b8d0f980f32975 -Block 0001 [ 62]: dcf1a931b0a4d91a -Block 0001 [ 63]: b524327c5a6cba95 -Block 0001 [ 64]: 0177bc3461dae88d -Block 0001 [ 65]: 06334cd19b2360ff -Block 0001 [ 66]: b4c95ce9ae0a4f33 -Block 0001 [ 67]: d7db629a31078d2d -Block 0001 [ 68]: 7d5508fc240cfafa -Block 0001 [ 69]: f1ac892f9fca325b -Block 0001 [ 70]: 4ac67ba91de337bb -Block 0001 [ 71]: b585e1542b744ef2 -Block 0001 [ 72]: a5ec9f043faa061b -Block 0001 [ 73]: 9f14c405dcc67e3d -Block 0001 [ 74]: fc1a0455604f4d26 -Block 0001 [ 75]: 6e47c36365efe9dc -Block 0001 [ 76]: 72c7224932bb6a4c -Block 0001 [ 77]: 88cccd6e1051059c -Block 0001 [ 78]: a2af3bfda6893035 -Block 0001 [ 79]: e2661142356aa6df -Block 0001 [ 80]: 7fc859e8fb9fc4c5 -Block 0001 [ 81]: e01830977c1c69cd -Block 0001 [ 82]: bdc1fbb0acfc8c68 -Block 0001 [ 83]: c4de467177585060 -Block 0001 [ 84]: fb0eb9f25baeaa8d -Block 0001 [ 85]: 5543c3b2d23a6aaf -Block 0001 [ 86]: fc5364f361affef3 -Block 0001 [ 87]: 2661b6ec9e3e81df -Block 0001 [ 88]: 159eb8a3dbaa5544 -Block 0001 [ 89]: 832e5850eff81dc6 -Block 0001 [ 90]: dfb275dfc14906d6 -Block 0001 [ 91]: 5750dd06ccfc208d -Block 0001 [ 92]: 9d11f0f4f89bdf02 -Block 0001 [ 93]: 01e7694ed5472b3f -Block 0001 [ 94]: 4324d37e2bfbf8e5 -Block 0001 [ 95]: 8521c6316b93ac44 -Block 0001 [ 96]: 98dc479af8e8a9f2 -Block 0001 [ 97]: d2f8f5aad51138b3 -Block 0001 [ 98]: 58726306640d6589 -Block 0001 [ 99]: 5c4ecb3b0d6b62ec -Block 0001 [100]: 8945f8442b28eb03 -Block 0001 [101]: 524b58de58beaaa5 -Block 0001 [102]: 9c56af0137be0cbf -Block 0001 [103]: ef5fbe2d37f124fe -Block 0001 [104]: d6e3bc8059623ca4 -Block 0001 [105]: b0de22803b1601f5 -Block 0001 [106]: 5c315b2b993bb075 -Block 0001 [107]: b384762e9a33032d -Block 0001 [108]: 0ef7659cc86a507c -Block 0001 [109]: 3955126c3bd9622f -Block 0001 [110]: 135f29240906f1f4 -Block 0001 [111]: 5075234a142090cd -Block 0001 [112]: 8a8be6391efa19fc -Block 0001 [113]: a7a10c3e7ff74a32 -Block 0001 [114]: 5c2627796eff60c7 -Block 0001 [115]: 821550147aa89280 -Block 0001 [116]: be80b9eb6aabadea -Block 0001 [117]: 798d50a096ea77ab -Block 0001 [118]: dcce0f3961cfb9a3 -Block 0001 [119]: 0acc89da98f8679a -Block 0001 [120]: 57f813a9c5319e77 -Block 0001 [121]: f59343cd09f18438 -Block 0001 [122]: 027826810b9e9474 -Block 0001 [123]: b0b30ee45fc4a37c -Block 0001 [124]: 67634e6f8a5f6fc5 -Block 0001 [125]: 78d288209655dfea -Block 0001 [126]: 5def1a47dc8ca912 -Block 0001 [127]: cb8baddc01104603 -Block 0002 [ 0]: b4f32766fc2fb715 -Block 0002 [ 1]: b4be7123402136f7 -Block 0002 [ 2]: 76c140b72f75b567 -Block 0002 [ 3]: 3ddae7ab29a3f6b0 -Block 0002 [ 4]: da2ef6fd1cb4794a -Block 0002 [ 5]: 07df94d5ee2a521d -Block 0002 [ 6]: f25b5953f3000e6a -Block 0002 [ 7]: dbbee6dfb89a14b2 -Block 0002 [ 8]: 0b8316e5ed48a90b -Block 0002 [ 9]: 1581355e70cc9236 -Block 0002 [ 10]: afbd73fed4169592 -Block 0002 [ 11]: 9ff78789ddd91d69 -Block 0002 [ 12]: 96c564bc213dfe7d -Block 0002 [ 13]: 112d0463dc156aee -Block 0002 [ 14]: 6527a1ad0c92b02e -Block 0002 [ 15]: ad9c72af7b646823 -Block 0002 [ 16]: 5ea4b9e339b1d704 -Block 0002 [ 17]: 3979e9bea09cd602 -Block 0002 [ 18]: 4723715624125911 -Block 0002 [ 19]: b5df880742867f2e -Block 0002 [ 20]: c108f080d30b96ae -Block 0002 [ 21]: a8561bf92ae22acb -Block 0002 [ 22]: 6f308a25cb4f44d0 -Block 0002 [ 23]: 49210f1bf5f858c5 -Block 0002 [ 24]: 103369041f7680e8 -Block 0002 [ 25]: 25d0b08974d86a6b -Block 0002 [ 26]: 7bbf1e22d47e3d65 -Block 0002 [ 27]: 05fe020bbba43726 -Block 0002 [ 28]: 93e03d5983cef0e7 -Block 0002 [ 29]: 114d01ffcecdeb5b -Block 0002 [ 30]: f919d06131c10a1e -Block 0002 [ 31]: a22840ab2762cbc3 -Block 0002 [ 32]: 097d11bec1f7cbc6 -Block 0002 [ 33]: d52cecc28a335714 -Block 0002 [ 34]: 63122b395c488511 -Block 0002 [ 35]: 64472a45b661ef38 -Block 0002 [ 36]: ea07ed5de91005d4 -Block 0002 [ 37]: 33c0d9c1cc815745 -Block 0002 [ 38]: 0b2e7b3981120872 -Block 0002 [ 39]: 732b2581fd570e0f -Block 0002 [ 40]: c8695bf549790cb4 -Block 0002 [ 41]: 8df10d022cd4fd88 -Block 0002 [ 42]: 995ff789a7cb6b50 -Block 0002 [ 43]: 70cf63fd75857b7a -Block 0002 [ 44]: 4f555cef13ca0d28 -Block 0002 [ 45]: 17d3047d6d033515 -Block 0002 [ 46]: 6c5ae23de1db47ac -Block 0002 [ 47]: 625eb5cc235887a0 -Block 0002 [ 48]: 73af705d95f9cf8d -Block 0002 [ 49]: 1ac7e7701ba27dca -Block 0002 [ 50]: c4843a320e7b9fc6 -Block 0002 [ 51]: 3f25a42a594fa429 -Block 0002 [ 52]: 55f42396f1bf059c -Block 0002 [ 53]: 0e8cd0250b6d8625 -Block 0002 [ 54]: 0f2258ea9f4861cf -Block 0002 [ 55]: 681355aa8627bdb8 -Block 0002 [ 56]: ad29e95503aa1771 -Block 0002 [ 57]: 94a9f6879c452369 -Block 0002 [ 58]: 149cb980146efa30 -Block 0002 [ 59]: 602a44afe93a9f5f -Block 0002 [ 60]: fd14465f4f512e10 -Block 0002 [ 61]: 3413ec3ca9fdb30b -Block 0002 [ 62]: 8427afaf7ab98367 -Block 0002 [ 63]: 434e9e4d896635f2 -Block 0002 [ 64]: e4eb02c319e2ead2 -Block 0002 [ 65]: 448e0fafa49c93ff -Block 0002 [ 66]: 8726e904d7e8f0f6 -Block 0002 [ 67]: 73ae51697f0ab4f8 -Block 0002 [ 68]: 5142c819e36f773e -Block 0002 [ 69]: 7f5a2d32df8d53a1 -Block 0002 [ 70]: cc2846c871a2889c -Block 0002 [ 71]: 6e2b8567fea69da2 -Block 0002 [ 72]: 91100438361d9622 -Block 0002 [ 73]: 4cb71cf58ceaf767 -Block 0002 [ 74]: fe8a9955a43595eb -Block 0002 [ 75]: b97e39ed024a43c8 -Block 0002 [ 76]: 4d6414f34e9caffa -Block 0002 [ 77]: 5b5bed31c60830e3 -Block 0002 [ 78]: cf165fb09f73fb04 -Block 0002 [ 79]: 17abd5f9f889a471 -Block 0002 [ 80]: c6f73bf10ba51c54 -Block 0002 [ 81]: 65da4391f68a8e02 -Block 0002 [ 82]: 67bf0346f3d53a10 -Block 0002 [ 83]: 77f940e9eb97d2d4 -Block 0002 [ 84]: 605974ad27989635 -Block 0002 [ 85]: 21b0ec7eaedf7a33 -Block 0002 [ 86]: 88eb7335366fb318 -Block 0002 [ 87]: b73c625a6339d2b3 -Block 0002 [ 88]: 5c8dc992d77e8e90 -Block 0002 [ 89]: d50c7a303def9f09 -Block 0002 [ 90]: 1b199eb77a37ac69 -Block 0002 [ 91]: 31b378bdafeeb51a -Block 0002 [ 92]: 2023a7c7e4f019d6 -Block 0002 [ 93]: cd3b1c43efd5849b -Block 0002 [ 94]: f021ebf3bfa3b6c6 -Block 0002 [ 95]: 83626e46f7f59e0d -Block 0002 [ 96]: f883913b9ae4b67a -Block 0002 [ 97]: 10327dd93721f1cd -Block 0002 [ 98]: 16921c8fa5cefadc -Block 0002 [ 99]: 6e26e0a2bbdcbc3e -Block 0002 [100]: 725dfa6d9c0bc5b5 -Block 0002 [101]: 1b650e997b82bcd8 -Block 0002 [102]: 968189d7fb58b109 -Block 0002 [103]: e2f3a2b6dddf70f4 -Block 0002 [104]: 05417319b93fbce2 -Block 0002 [105]: 715b3caa09ba64a4 -Block 0002 [106]: 5ad3b9ea8304a1ff -Block 0002 [107]: da2ab3d41e9ad55c -Block 0002 [108]: 14a0134d456f6a5e -Block 0002 [109]: aa1a634770dd5c11 -Block 0002 [110]: 49affc08d9c2903b -Block 0002 [111]: 48b0f1a6ae6b2d1d -Block 0002 [112]: 768313caff151bef -Block 0002 [113]: ecbc63fec84ea4ca -Block 0002 [114]: b4577151fb984765 -Block 0002 [115]: d2d1985874cb658d -Block 0002 [116]: bc43a0591a20cd5f -Block 0002 [117]: 592a7265947f118d -Block 0002 [118]: 0993d95f533614b8 -Block 0002 [119]: d8fb1f2db0ba6cf1 -Block 0002 [120]: 1e272a1ceb9723d2 -Block 0002 [121]: 7e8d79d8729e9b85 -Block 0002 [122]: 11a54d8443ef30ef -Block 0002 [123]: 13ebd278cf6408d0 -Block 0002 [124]: 0cb0c6f9c1c0e050 -Block 0002 [125]: 79a3979f69f9b011 -Block 0002 [126]: d9766dc5dc6a6d28 -Block 0002 [127]: 5dff30db21f8d34b -Block 0003 [ 0]: 5c0e8eb2ac341116 -Block 0003 [ 1]: d6cbfe9db820a7e5 -Block 0003 [ 2]: 88492690bb5b492f -Block 0003 [ 3]: 575b925dbc5bdd67 -Block 0003 [ 4]: ae23b16af730b3fb -Block 0003 [ 5]: 4061245bdf3d1d82 -Block 0003 [ 6]: bfe1c0711a35e1fb -Block 0003 [ 7]: 7c9e1bef0badaa6f -Block 0003 [ 8]: 88577520aff0bb2f -Block 0003 [ 9]: 7acf6df13b05aac3 -Block 0003 [ 10]: 623a024f7e05b7fe -Block 0003 [ 11]: 34df9986d84cba1a -Block 0003 [ 12]: 5891c7d8f9ad674a -Block 0003 [ 13]: 32bb68644f3f58c7 -Block 0003 [ 14]: 193a98d182752695 -Block 0003 [ 15]: 7348c6bb53017adb -Block 0003 [ 16]: a88c1149dda47535 -Block 0003 [ 17]: 809e8ecfc2c5cd1c -Block 0003 [ 18]: 7d1aeb5921a12730 -Block 0003 [ 19]: 088ff3b306bc7c7f -Block 0003 [ 20]: 61528227a0238c93 -Block 0003 [ 21]: 70cfaec7557e33b7 -Block 0003 [ 22]: f6b2d0f57f22ad1e -Block 0003 [ 23]: 788ad5922ecef9eb -Block 0003 [ 24]: 33cbd46c228be5d4 -Block 0003 [ 25]: a93f311e2b4b75c9 -Block 0003 [ 26]: 484459669692d78c -Block 0003 [ 27]: 541c85a4417d9430 -Block 0003 [ 28]: 72d61a7a6b6d38bd -Block 0003 [ 29]: e0361f44eda3b596 -Block 0003 [ 30]: 692540b77b35ebef -Block 0003 [ 31]: 76b1bf917b94fa09 -Block 0003 [ 32]: eb5172026b59e31c -Block 0003 [ 33]: b76d44dd4831053e -Block 0003 [ 34]: d7c26331cb64f3ba -Block 0003 [ 35]: d95df2282cb8145c -Block 0003 [ 36]: 2c762e95be0804b2 -Block 0003 [ 37]: 3b88edbe0e2d4479 -Block 0003 [ 38]: ed5d75dc5a5c0c96 -Block 0003 [ 39]: 8ddcccf638269fa1 -Block 0003 [ 40]: ef30ba9ec1903bcd -Block 0003 [ 41]: 7889f9abfdc37681 -Block 0003 [ 42]: 2b5df0abfa9b20f0 -Block 0003 [ 43]: a4e7f0b03ca55b8f -Block 0003 [ 44]: 68ee4e5ed9fe7b3f -Block 0003 [ 45]: ff112f684abee477 -Block 0003 [ 46]: 92b431d39e2a5763 -Block 0003 [ 47]: e8e36d6f8ee809c1 -Block 0003 [ 48]: d0237005b70919ef -Block 0003 [ 49]: 9957f98730d4b330 -Block 0003 [ 50]: 8d18db3c306a60ef -Block 0003 [ 51]: 6d2162fb5f2a8aac -Block 0003 [ 52]: 78993074cf0cb196 -Block 0003 [ 53]: 6d78ef0d260570da -Block 0003 [ 54]: c90be290f0c0db9a -Block 0003 [ 55]: e48d40d1222f1f75 -Block 0003 [ 56]: f1b0f25d7bae9f64 -Block 0003 [ 57]: b1d85163880e9e9c -Block 0003 [ 58]: 248f2f66c9bd3bf4 -Block 0003 [ 59]: 2db350fc6b31ff01 -Block 0003 [ 60]: 72c42963f8f7b1a3 -Block 0003 [ 61]: ce4692fb8577a860 -Block 0003 [ 62]: e8acb2712ccc1ac1 -Block 0003 [ 63]: e9e0055b9eb7d5b0 -Block 0003 [ 64]: c542863e636709ff -Block 0003 [ 65]: 208b57f939fa9149 -Block 0003 [ 66]: eeaecbacd2d723f3 -Block 0003 [ 67]: 2dd1762f5f3a4599 -Block 0003 [ 68]: a0b5bd72118eff35 -Block 0003 [ 69]: 87872e604d5acaf7 -Block 0003 [ 70]: 9d8df3f9ac5fac10 -Block 0003 [ 71]: 38ab8f0728f28d9f -Block 0003 [ 72]: bb869f5c8685f822 -Block 0003 [ 73]: 3cc84bfa15771927 -Block 0003 [ 74]: b33d955eb5058f87 -Block 0003 [ 75]: 50c5a14edb21eda3 -Block 0003 [ 76]: d0f8e0798baa0b9e -Block 0003 [ 77]: ffc370f5bce3ae00 -Block 0003 [ 78]: c7c8d7aeff8c896a -Block 0003 [ 79]: afc9c0f4d2bf5a7e -Block 0003 [ 80]: 180a72ef88468cb6 -Block 0003 [ 81]: 325d27bcb46aad62 -Block 0003 [ 82]: 6eae39a4e3d0412c -Block 0003 [ 83]: 7563b8c1117a5e34 -Block 0003 [ 84]: 3256ecedd245c3b6 -Block 0003 [ 85]: b9dad1a682af2e64 -Block 0003 [ 86]: 3be5053f516bd861 -Block 0003 [ 87]: 8f5580350b1f1212 -Block 0003 [ 88]: 3a5ccfa24b2ebe57 -Block 0003 [ 89]: 8fb6a522f6840c70 -Block 0003 [ 90]: 5f489838feb925d6 -Block 0003 [ 91]: ebf8889f46a7b1c3 -Block 0003 [ 92]: 7af558e63b7fdad4 -Block 0003 [ 93]: cb28e374292c5329 -Block 0003 [ 94]: 3e4d57c7c3c5138b -Block 0003 [ 95]: 3fb472e35ef05d18 -Block 0003 [ 96]: 4cc10388414f7b2e -Block 0003 [ 97]: 8d8911921bd3a077 -Block 0003 [ 98]: 8d8e0f8cabe24271 -Block 0003 [ 99]: 321a7ed80bacd083 -Block 0003 [100]: 08b6e452b7cb9101 -Block 0003 [101]: bf7529ac1a982911 -Block 0003 [102]: 189ec2106b3b9e2f -Block 0003 [103]: 4548441cb8bb8c67 -Block 0003 [104]: b64d0428974aefac -Block 0003 [105]: 4cac530a3a32b006 -Block 0003 [106]: 5d423e10b4b3083c -Block 0003 [107]: 2e1761749687ae73 -Block 0003 [108]: 340f9d62fb353269 -Block 0003 [109]: d3e4357d05a5b5b7 -Block 0003 [110]: 3ee8e727877f459a -Block 0003 [111]: 86ee8a747f8c4c60 -Block 0003 [112]: c47587b82dc2ce57 -Block 0003 [113]: 59a52a6228b02fe8 -Block 0003 [114]: 6cdd8f8ef8169bd6 -Block 0003 [115]: 532e68c714326200 -Block 0003 [116]: 622f1cf40a3a2cb9 -Block 0003 [117]: 2bae9b42f187e06f -Block 0003 [118]: 8cd5bfae2e4c553a -Block 0003 [119]: c50e498ca51b5a5b -Block 0003 [120]: 1a41b794933f4cc5 -Block 0003 [121]: 5689b19baedfdedb -Block 0003 [122]: cef70989efd8920e -Block 0003 [123]: ceca1ea83d0b60ba -Block 0003 [124]: a86ddf3979f92931 -Block 0003 [125]: a130cfdb97e45d2e -Block 0003 [126]: 214bcbaec54c3ac9 -Block 0003 [127]: 2ae65944689850ef -Block 0004 [ 0]: 68763d8f4dc6b797 -Block 0004 [ 1]: c35b04acb749b220 -Block 0004 [ 2]: 9e008e900fa39b5a -Block 0004 [ 3]: ffdbb9dfa13daf2c -Block 0004 [ 4]: 0f832d5d8848af84 -Block 0004 [ 5]: 3aa712fbe5be6260 -Block 0004 [ 6]: 910492358708f68a -Block 0004 [ 7]: e70d0f634aab150b -Block 0004 [ 8]: e54b338756626586 -Block 0004 [ 9]: cb975f4aa84cd76c -Block 0004 [ 10]: 4c5b052fc9500259 -Block 0004 [ 11]: 9ee8907736c84f2a -Block 0004 [ 12]: 5467359eceb669f0 -Block 0004 [ 13]: dddc583bd4fcc220 -Block 0004 [ 14]: 57c8fa73553d00fd -Block 0004 [ 15]: 7fb1e689663cd50d -Block 0004 [ 16]: 3338faf00a97252b -Block 0004 [ 17]: d5cfae162045a520 -Block 0004 [ 18]: 4b4b806e2a0fe0cd -Block 0004 [ 19]: fd3174851ec2d025 -Block 0004 [ 20]: 7a178853679f3cbc -Block 0004 [ 21]: 6ddad1a999b5fd67 -Block 0004 [ 22]: 99954bf164561cd6 -Block 0004 [ 23]: af17c5929f3ca759 -Block 0004 [ 24]: f181b23304e08f50 -Block 0004 [ 25]: 7f8f7622fd244742 -Block 0004 [ 26]: f14caa940328b8ef -Block 0004 [ 27]: ad856d81e450d0ba -Block 0004 [ 28]: fb922822ca811607 -Block 0004 [ 29]: c358b3e22f333870 -Block 0004 [ 30]: 6e24412ddd113d83 -Block 0004 [ 31]: cca88416017d9909 -Block 0004 [ 32]: 187412167e28c809 -Block 0004 [ 33]: 682ffb02ef727f6b -Block 0004 [ 34]: 47611191fa734e0a -Block 0004 [ 35]: fd3bd5309b064b17 -Block 0004 [ 36]: 4195c7523172d21c -Block 0004 [ 37]: 423a276c971cc93d -Block 0004 [ 38]: bc792a0f02a63fe0 -Block 0004 [ 39]: 527c3b8788e27a62 -Block 0004 [ 40]: 239da2b419083b40 -Block 0004 [ 41]: 072907b2d91069cc -Block 0004 [ 42]: 724ade176929ac75 -Block 0004 [ 43]: 5edc7e2fed571ec0 -Block 0004 [ 44]: fe0a60d8ea3ad1d9 -Block 0004 [ 45]: 57320b55e6fe925a -Block 0004 [ 46]: 8caf29ab89416bb8 -Block 0004 [ 47]: 764bead9160af40e -Block 0004 [ 48]: 3ea1e124b3b51bbd -Block 0004 [ 49]: a609833ebfbeb514 -Block 0004 [ 50]: 620da2d8d4f48d94 -Block 0004 [ 51]: 384a58568455b659 -Block 0004 [ 52]: b8080a5acf01e30b -Block 0004 [ 53]: c86519dab9e33c81 -Block 0004 [ 54]: 4d7235e7cb324477 -Block 0004 [ 55]: afff27bf710bc021 -Block 0004 [ 56]: a3efa9413cbe4f06 -Block 0004 [ 57]: 51e5da49f2d11d10 -Block 0004 [ 58]: 8192b313dff9a6d6 -Block 0004 [ 59]: cc85033019cfb146 -Block 0004 [ 60]: 9a80cf8c4b64c6af -Block 0004 [ 61]: 87a3b9ab1bbe8222 -Block 0004 [ 62]: 6f9f7f808cb3a616 -Block 0004 [ 63]: 5397b40781320e51 -Block 0004 [ 64]: a274c7a9d7565533 -Block 0004 [ 65]: 366db58498da3ad9 -Block 0004 [ 66]: d6984fc1d3dd4abf -Block 0004 [ 67]: 07b70e89b0368f17 -Block 0004 [ 68]: e4dbd66550f2f540 -Block 0004 [ 69]: 5c26abe1ca1e6d6b -Block 0004 [ 70]: 3194d9d33fef1fcf -Block 0004 [ 71]: 1df384259125c83d -Block 0004 [ 72]: d4b8d2eab54bb74e -Block 0004 [ 73]: 6f177beaa794fd94 -Block 0004 [ 74]: 858bfefff34c9703 -Block 0004 [ 75]: a610fe0abb020ddf -Block 0004 [ 76]: 0d605f849ce756eb -Block 0004 [ 77]: e9e3eb0aab42f6a8 -Block 0004 [ 78]: d8cd6f9dd7d1e9c1 -Block 0004 [ 79]: 33570318a05f6a3a -Block 0004 [ 80]: c62f3a7c4675f109 -Block 0004 [ 81]: c0e5c409e7ed3601 -Block 0004 [ 82]: 67d5d3f564f4dcb3 -Block 0004 [ 83]: 8bc802ac83110e66 -Block 0004 [ 84]: b11a610332acecfd -Block 0004 [ 85]: b898c9697bbab146 -Block 0004 [ 86]: b2ebcc2537b600d2 -Block 0004 [ 87]: 4a1860d084ad41ef -Block 0004 [ 88]: 4dbee3a9b3a59057 -Block 0004 [ 89]: b5eec319f63e48e5 -Block 0004 [ 90]: 1ba03fedd1e5988e -Block 0004 [ 91]: b876ab6ed1290b26 -Block 0004 [ 92]: 41910fdd76e03a6e -Block 0004 [ 93]: 9dd560edb3b7fc36 -Block 0004 [ 94]: 40a4b579c8c2757a -Block 0004 [ 95]: e32220051bb6714b -Block 0004 [ 96]: f9e4dbf9770bf1de -Block 0004 [ 97]: a054ed0072a59a4e -Block 0004 [ 98]: 52073e12ecb338da -Block 0004 [ 99]: 410d9b0385df6bf5 -Block 0004 [100]: 4f25338e8af6d101 -Block 0004 [101]: 3027043a4b4d617f -Block 0004 [102]: 022269273a4cc7cc -Block 0004 [103]: 5f86ce2a1aa00a74 -Block 0004 [104]: e14370945c586ef8 -Block 0004 [105]: bcb1fbf3fa607acd -Block 0004 [106]: 170b991401a249a7 -Block 0004 [107]: 834ab77e65d7e23a -Block 0004 [108]: 3f4d81e34b8d43c8 -Block 0004 [109]: df4afb352b1f524f -Block 0004 [110]: a34a706b25eb7856 -Block 0004 [111]: 3e05113600a02864 -Block 0004 [112]: 365e6d8f7f1f4a31 -Block 0004 [113]: 9606eee8204e5272 -Block 0004 [114]: 68d8d969b28fb0c2 -Block 0004 [115]: 1a9eb8715cd6e9b7 -Block 0004 [116]: 185eff4ddb1caae7 -Block 0004 [117]: 3117894ffc3ae59b -Block 0004 [118]: fe3026e14f87ecfe -Block 0004 [119]: 10c7a423fe7a65d5 -Block 0004 [120]: 755e21fe87353390 -Block 0004 [121]: 9aaddb3f131f925b -Block 0004 [122]: 9e7c0ccff3b00927 -Block 0004 [123]: 0ec0b338915b28f7 -Block 0004 [124]: ef3c96c7857be687 -Block 0004 [125]: 1da7a673eb189fc4 -Block 0004 [126]: ca663b09033a76b2 -Block 0004 [127]: af7a04a40a5669b0 -Block 0005 [ 0]: c79f4392922276a5 -Block 0005 [ 1]: a7253a2ca884d327 -Block 0005 [ 2]: 7769226ce18835a5 -Block 0005 [ 3]: ef64f75207d7a252 -Block 0005 [ 4]: 1f0991dd322affcf -Block 0005 [ 5]: 898493c297e98333 -Block 0005 [ 6]: d0e9e2f2b5868767 -Block 0005 [ 7]: 85892737b8197939 -Block 0005 [ 8]: 895c9e23adf70a30 -Block 0005 [ 9]: 22884227ac287b79 -Block 0005 [ 10]: 25a5984034fb6bd4 -Block 0005 [ 11]: b4b07194a249522b -Block 0005 [ 12]: 89da853c03c31e14 -Block 0005 [ 13]: 15a7a78cf6416ebd -Block 0005 [ 14]: 3a8c41f24d324c76 -Block 0005 [ 15]: 09b9a07581e53c67 -Block 0005 [ 16]: 55727b44460f1587 -Block 0005 [ 17]: be8ab83014f30c2b -Block 0005 [ 18]: d9cd66f01251b7ab -Block 0005 [ 19]: 0461e20365959dbf -Block 0005 [ 20]: 241084d60bf65bcc -Block 0005 [ 21]: e75c5a65ee3d4eff -Block 0005 [ 22]: e9f6084efb8ecff1 -Block 0005 [ 23]: 085c72bdd1bcd079 -Block 0005 [ 24]: c549f8fc232e2c28 -Block 0005 [ 25]: 9063e1d7ee8cfcb5 -Block 0005 [ 26]: aadf049b59766f22 -Block 0005 [ 27]: cfaf89321f6518ae -Block 0005 [ 28]: cce38daaa1867f33 -Block 0005 [ 29]: 03d7036bef580c0d -Block 0005 [ 30]: 508c0c9ea2a798fb -Block 0005 [ 31]: b01529d286e93d65 -Block 0005 [ 32]: 4cfe9506c06bc256 -Block 0005 [ 33]: 498ee5c7db7d3807 -Block 0005 [ 34]: cee012266c0edead -Block 0005 [ 35]: 2d3191fb61c9a30a -Block 0005 [ 36]: 483dd47bae7d85af -Block 0005 [ 37]: fb1b86b513e3f3ef -Block 0005 [ 38]: f643356d32817575 -Block 0005 [ 39]: 8c8f5065f019d85b -Block 0005 [ 40]: f85db49390c3d299 -Block 0005 [ 41]: 44907a02d33986ca -Block 0005 [ 42]: 28181cfdf6531de1 -Block 0005 [ 43]: a5663011f4aa85e4 -Block 0005 [ 44]: 08b43bcf0a4969b1 -Block 0005 [ 45]: af80cab64d8993a6 -Block 0005 [ 46]: c213202a03c9bd91 -Block 0005 [ 47]: 2a250caf5ac630b1 -Block 0005 [ 48]: c44cba4ba3cb48f7 -Block 0005 [ 49]: 433ad275fccbbdea -Block 0005 [ 50]: 0a663ebe1d740d6a -Block 0005 [ 51]: 9ec6d6bb7b72c222 -Block 0005 [ 52]: cc9ffe088f352287 -Block 0005 [ 53]: c98e5332fcfb0673 -Block 0005 [ 54]: b4236c49582216c7 -Block 0005 [ 55]: c4ed9ee4a7981541 -Block 0005 [ 56]: b2c45cfe65ab2eaf -Block 0005 [ 57]: 59c96abdfd1407b9 -Block 0005 [ 58]: 7ff11a8f764220d5 -Block 0005 [ 59]: 157c7ff6478bde5d -Block 0005 [ 60]: 98c24690d8f30515 -Block 0005 [ 61]: d6d37a82b506a60e -Block 0005 [ 62]: c522a84da212bc98 -Block 0005 [ 63]: 997f388966e7baa4 -Block 0005 [ 64]: c1c9995da3c387aa -Block 0005 [ 65]: 34fe68e44dc522d0 -Block 0005 [ 66]: 1ab418a3576ee0bc -Block 0005 [ 67]: 7061a489d80cf327 -Block 0005 [ 68]: 1305e4fa6caf1ed2 -Block 0005 [ 69]: b2b45190832ec6f4 -Block 0005 [ 70]: 779b0dcf42ee74ff -Block 0005 [ 71]: c2476ddfa33ada3a -Block 0005 [ 72]: c761829994837032 -Block 0005 [ 73]: d9a5ca71039fd50f -Block 0005 [ 74]: fea0745a0379c2ce -Block 0005 [ 75]: 51af17867d02c11d -Block 0005 [ 76]: 9294a53dfd591bd7 -Block 0005 [ 77]: d667cdaab8f5e3bb -Block 0005 [ 78]: f5ea5fe6aefb5f53 -Block 0005 [ 79]: 5d459d2c30fcc6d1 -Block 0005 [ 80]: 33e69f05e4d8d74f -Block 0005 [ 81]: 70c1b4348dee2873 -Block 0005 [ 82]: 95ba9ff1042c12d4 -Block 0005 [ 83]: 432b08a428b58915 -Block 0005 [ 84]: cccba8edde21f947 -Block 0005 [ 85]: 55d8ad6ab53fa0b4 -Block 0005 [ 86]: bb5120a1a45b5a62 -Block 0005 [ 87]: f0e50743f06c14d2 -Block 0005 [ 88]: b53a15f7cad3bd0e -Block 0005 [ 89]: e6832b49d6199846 -Block 0005 [ 90]: a857a8dec81b60be -Block 0005 [ 91]: 7581c0148642dd49 -Block 0005 [ 92]: 2389a4431ef7b450 -Block 0005 [ 93]: 59ce3937b5323f22 -Block 0005 [ 94]: f865028678e00b6b -Block 0005 [ 95]: 3da9f4dc5683e6c2 -Block 0005 [ 96]: ffaf9831c6329c1f -Block 0005 [ 97]: abc13a6ab1f09987 -Block 0005 [ 98]: 4f0fc5bcfc2a695e -Block 0005 [ 99]: 02e416ddee499f04 -Block 0005 [100]: cce92bc13079d077 -Block 0005 [101]: 10eb05f19080143e -Block 0005 [102]: 8b5a265b5fb50b0a -Block 0005 [103]: bc0632a8d5b9f9bf -Block 0005 [104]: a06a19d109966629 -Block 0005 [105]: ca993df44d412034 -Block 0005 [106]: 53cdd2e1e2ec5765 -Block 0005 [107]: 39e4f9f131761ca3 -Block 0005 [108]: 989b04fb1a9f90ab -Block 0005 [109]: 48831eff4e20554e -Block 0005 [110]: 4a2f93cae239783d -Block 0005 [111]: bc27a7e3199c806c -Block 0005 [112]: 8e195628a423d227 -Block 0005 [113]: 96de54e58d7f5c3e -Block 0005 [114]: 4ceede7688f7cc59 -Block 0005 [115]: 55c85913b9c14ec4 -Block 0005 [116]: f2ec832ba525d2d6 -Block 0005 [117]: 8f1edd91a8c7d1a8 -Block 0005 [118]: d7b17c40419c28ff -Block 0005 [119]: b17bc3c7508c5c1d -Block 0005 [120]: 64f123c8c38b2123 -Block 0005 [121]: efcec0aa0694a403 -Block 0005 [122]: 4257a1f86f7525c5 -Block 0005 [123]: 5c0b23bd01538eff -Block 0005 [124]: c548b0ee675348a5 -Block 0005 [125]: acd324367e84b36d -Block 0005 [126]: 4594b480fe27d287 -Block 0005 [127]: 19723de0e11f6a79 -Block 0006 [ 0]: a579aa0c6f3d472b -Block 0006 [ 1]: c086d8015e821720 -Block 0006 [ 2]: b0aff8baf2c7a915 -Block 0006 [ 3]: b1a52a27f2a6f5bb -Block 0006 [ 4]: f7a8ba507512affd -Block 0006 [ 5]: 189943ac17f52f74 -Block 0006 [ 6]: 09b050a91a7865f9 -Block 0006 [ 7]: fad3bba5cdc75e8f -Block 0006 [ 8]: a27db619efa13e78 -Block 0006 [ 9]: d7721c064ba824f2 -Block 0006 [ 10]: 9fdd5929958052be -Block 0006 [ 11]: cf2e2fe2c371b18b -Block 0006 [ 12]: 2131a496ffe7297d -Block 0006 [ 13]: 200b9a107faaa7c6 -Block 0006 [ 14]: 4dd6326851f612cd -Block 0006 [ 15]: e6f69fb0fa79e2d1 -Block 0006 [ 16]: 5666dbc6001c374e -Block 0006 [ 17]: fb1170afe5bba42e -Block 0006 [ 18]: e54d768d5140ed79 -Block 0006 [ 19]: bd4cb0de13f5c9e6 -Block 0006 [ 20]: f03b2b449f970a60 -Block 0006 [ 21]: 0da341fe0e6d9a69 -Block 0006 [ 22]: d43cbecae54f2c9c -Block 0006 [ 23]: 18e027f5b1014028 -Block 0006 [ 24]: ed27e494d9ca89d4 -Block 0006 [ 25]: 641298a39d1729e5 -Block 0006 [ 26]: 378a0e8c21129585 -Block 0006 [ 27]: c289147b34edc8f6 -Block 0006 [ 28]: 101ffb96b6ecbf60 -Block 0006 [ 29]: b3672dd20ce9fedf -Block 0006 [ 30]: 966dd9d9747a53f5 -Block 0006 [ 31]: f788ba6aa3e750fc -Block 0006 [ 32]: 87481cafc604ab49 -Block 0006 [ 33]: 4c64a15cd56861dc -Block 0006 [ 34]: 571e41e24bbcf5a6 -Block 0006 [ 35]: 5cdaf199d6c2d284 -Block 0006 [ 36]: 5d324f03722535e3 -Block 0006 [ 37]: 8456661dc13f04c4 -Block 0006 [ 38]: f5f533a3a90f6591 -Block 0006 [ 39]: 2eeb195c30fd5223 -Block 0006 [ 40]: 2761630d222c4be3 -Block 0006 [ 41]: 4b25e08ea39d2694 -Block 0006 [ 42]: 94c885e05b6311ec -Block 0006 [ 43]: 0fbd250920340527 -Block 0006 [ 44]: 6d4ed073c6c82daf -Block 0006 [ 45]: a814caf69863bff7 -Block 0006 [ 46]: 357950ed6e3db084 -Block 0006 [ 47]: 7f5b7f5f9713ab4b -Block 0006 [ 48]: f687be5cd8c6a2c3 -Block 0006 [ 49]: de98a4e2947adde6 -Block 0006 [ 50]: eae6cc68785d7a42 -Block 0006 [ 51]: 90f99300beaaea42 -Block 0006 [ 52]: 85aaed99d15ae2ef -Block 0006 [ 53]: 14ea09b591ddc64f -Block 0006 [ 54]: 82caced71a210d49 -Block 0006 [ 55]: 4a5544de2a5c2ae4 -Block 0006 [ 56]: 2b923417fd0e61a0 -Block 0006 [ 57]: 634358024288709d -Block 0006 [ 58]: 5051199e0c43bc67 -Block 0006 [ 59]: 4797c2f7d6181283 -Block 0006 [ 60]: 3cd2cab46f2be6b5 -Block 0006 [ 61]: 3a286986ea78b194 -Block 0006 [ 62]: 368e222bc11aae07 -Block 0006 [ 63]: 53d09dcde580dea8 -Block 0006 [ 64]: e789b54396eae809 -Block 0006 [ 65]: 5e58f4d02f90e164 -Block 0006 [ 66]: 3db837b465c72d91 -Block 0006 [ 67]: 3c93731de2b96f9f -Block 0006 [ 68]: 461bceda725dc09c -Block 0006 [ 69]: 605ae454b60ff23c -Block 0006 [ 70]: 9f6a7a55a20ce329 -Block 0006 [ 71]: afb30dfbb337a2e0 -Block 0006 [ 72]: 9a998168eb24849d -Block 0006 [ 73]: ae602889800db9c2 -Block 0006 [ 74]: a454c61c98327969 -Block 0006 [ 75]: 43b2763fda7e3d88 -Block 0006 [ 76]: 930a27bde3230189 -Block 0006 [ 77]: d146c0ee73488a3e -Block 0006 [ 78]: 160ca96d9bfbed68 -Block 0006 [ 79]: 73293ed851a68617 -Block 0006 [ 80]: a36a4af5095d53a7 -Block 0006 [ 81]: 4a884b706ee970fc -Block 0006 [ 82]: d3109874f0af31b3 -Block 0006 [ 83]: f62579e6a2dc3ce6 -Block 0006 [ 84]: 8d8796ad737a807a -Block 0006 [ 85]: 16077474eac18b07 -Block 0006 [ 86]: cfb80495e3fc3968 -Block 0006 [ 87]: dd93a9afb9c29429 -Block 0006 [ 88]: 29d61ca2814efa90 -Block 0006 [ 89]: 1261d10c14bf5fce -Block 0006 [ 90]: 9c86148ae36de74e -Block 0006 [ 91]: 0a2cc430be322e03 -Block 0006 [ 92]: fc9e07eedd148823 -Block 0006 [ 93]: 4bf350d0a4134d0e -Block 0006 [ 94]: 04e0631b64ecb7a2 -Block 0006 [ 95]: 43613e7ed6f1abff -Block 0006 [ 96]: 0f40979016e9c14b -Block 0006 [ 97]: 5815db6affdde07d -Block 0006 [ 98]: 3a304f5e227a8db5 -Block 0006 [ 99]: 9cf57fa62861ff03 -Block 0006 [100]: 5cb225c33209c40f -Block 0006 [101]: 2e391fe6ac391667 -Block 0006 [102]: 4518d90f949029ca -Block 0006 [103]: 6812eeafd26ea2aa -Block 0006 [104]: 1740c3c6ac78a991 -Block 0006 [105]: 207fbbab00cfa9ea -Block 0006 [106]: 23b41c5538b54596 -Block 0006 [107]: 5c1a9846f3319d0a -Block 0006 [108]: ed0078df05ce5e78 -Block 0006 [109]: 1324436b2d341a1d -Block 0006 [110]: 9f2b021f23a9d7cb -Block 0006 [111]: 6062d1f1d78311ca -Block 0006 [112]: 46509742c9200b71 -Block 0006 [113]: ece3943c9e12eef0 -Block 0006 [114]: c73efbf60644e765 -Block 0006 [115]: 014a3dc6d06c6401 -Block 0006 [116]: 4b829e9135631a97 -Block 0006 [117]: ac9f2ff9fbaa7f91 -Block 0006 [118]: 6c6511c442badeac -Block 0006 [119]: 29c3cb582054dd11 -Block 0006 [120]: 11b0047447e6156a -Block 0006 [121]: 05a9c4e4a5c6c429 -Block 0006 [122]: 018f420c32088be5 -Block 0006 [123]: f9cab0a6bff629ba -Block 0006 [124]: c3fbfc7ef9137714 -Block 0006 [125]: bc21a904c77e3ee3 -Block 0006 [126]: 809708782db7e0df -Block 0006 [127]: 718ca5bb3325a712 -Block 0007 [ 0]: 679e5aa8bdb71148 -Block 0007 [ 1]: e52a4af98006d3af -Block 0007 [ 2]: 9bde8ffbf95a10e8 -Block 0007 [ 3]: 59ee657ba4c106ad -Block 0007 [ 4]: 7276d2be25b70db9 -Block 0007 [ 5]: 8cc316c6089731d3 -Block 0007 [ 6]: 0f8657ba3ed3ae33 -Block 0007 [ 7]: 2f46e993af8d552b -Block 0007 [ 8]: a6a692d0a552f72d -Block 0007 [ 9]: 6e44096c463f5d2e -Block 0007 [ 10]: c344ea724ec74d4c -Block 0007 [ 11]: 690720809067447f -Block 0007 [ 12]: ae98d2977e34d409 -Block 0007 [ 13]: aab2ad8df1555bd4 -Block 0007 [ 14]: 8eb9ca41b2b45cff -Block 0007 [ 15]: 050599bf6f9ccf7b -Block 0007 [ 16]: b6b088c1acdd99e0 -Block 0007 [ 17]: 2f90e028fe32dcb2 -Block 0007 [ 18]: b8306c79f804adef -Block 0007 [ 19]: a3e24a843b7ca29a -Block 0007 [ 20]: 0b8e77e3832ef3c8 -Block 0007 [ 21]: d637788f5e8dd05c -Block 0007 [ 22]: 2ebb94462d5113c5 -Block 0007 [ 23]: c66e4a37b8ad1814 -Block 0007 [ 24]: 65e4545e584a515e -Block 0007 [ 25]: 8ca0b4eccf78c6d3 -Block 0007 [ 26]: febdbf5fc5eac3d4 -Block 0007 [ 27]: 8562b8d8f97d89a8 -Block 0007 [ 28]: 0005ba229d50fba0 -Block 0007 [ 29]: 6cdfedeca2fd1dc2 -Block 0007 [ 30]: 2e4d347e29c5126f -Block 0007 [ 31]: 92886832b01eed2a -Block 0007 [ 32]: b7f9dc7507a4e172 -Block 0007 [ 33]: 59728e465793e7a3 -Block 0007 [ 34]: eb3dbcf6094b9240 -Block 0007 [ 35]: 97b821b7f00e8629 -Block 0007 [ 36]: 54923f9a30b4e08c -Block 0007 [ 37]: 86a192f6a1e2112e -Block 0007 [ 38]: dc45560679db5c56 -Block 0007 [ 39]: 45413880bccb1603 -Block 0007 [ 40]: 7e1f09b1bc5d1ae8 -Block 0007 [ 41]: 6096cc8b8fe59162 -Block 0007 [ 42]: 9ffae29e2299b8b6 -Block 0007 [ 43]: b5bc95f2788c9e85 -Block 0007 [ 44]: 3e190ccc066ef8df -Block 0007 [ 45]: d93486140d5ee3f1 -Block 0007 [ 46]: 2ac3e607c8b1d7c9 -Block 0007 [ 47]: 24bad7515f760446 -Block 0007 [ 48]: 04e2792a896c3f85 -Block 0007 [ 49]: b47d1828a1f93e00 -Block 0007 [ 50]: 386850552302bcc2 -Block 0007 [ 51]: 3fd81ce12de631cd -Block 0007 [ 52]: 3b22930854f81ab5 -Block 0007 [ 53]: f501fbe750c61790 -Block 0007 [ 54]: 4d9005cae80c1b24 -Block 0007 [ 55]: efc1ae5de289ac33 -Block 0007 [ 56]: cfd69c8680e56308 -Block 0007 [ 57]: b2d5960ef58f360d -Block 0007 [ 58]: b147affb8c0bbbeb -Block 0007 [ 59]: 8a735b6080032cf6 -Block 0007 [ 60]: 194422f951c47d81 -Block 0007 [ 61]: 80751ac2883c7a4a -Block 0007 [ 62]: b002aeda5c86b283 -Block 0007 [ 63]: 96638bab02ddb989 -Block 0007 [ 64]: 0ef4e1e6322f788c -Block 0007 [ 65]: a29ada7d72130b46 -Block 0007 [ 66]: 77808fc4013a706f -Block 0007 [ 67]: 3acdb0967aecedd2 -Block 0007 [ 68]: 266a5df400a52d45 -Block 0007 [ 69]: 8aae40a11f5e48dd -Block 0007 [ 70]: d18744d894a4fd1d -Block 0007 [ 71]: e33f5cf0e01fc6de -Block 0007 [ 72]: 20748919e3d7e65e -Block 0007 [ 73]: 4041301accc810ce -Block 0007 [ 74]: 030e795d4b993886 -Block 0007 [ 75]: b1d47145d7c960ec -Block 0007 [ 76]: 853e8a6cd32c30a7 -Block 0007 [ 77]: d292da728306fab9 -Block 0007 [ 78]: ed372918abebcb2e -Block 0007 [ 79]: 1b88c15b2df4c942 -Block 0007 [ 80]: 081124b00d8ae4b4 -Block 0007 [ 81]: 43ba0fa1c38abc22 -Block 0007 [ 82]: 1561283a9709be85 -Block 0007 [ 83]: dc611021b8c8a9a7 -Block 0007 [ 84]: a81f1a2099efa89d -Block 0007 [ 85]: 4f85a4a88026f842 -Block 0007 [ 86]: d623064c9fa5e490 -Block 0007 [ 87]: a2c7668d9858c9c4 -Block 0007 [ 88]: 29e292811318c3d6 -Block 0007 [ 89]: 2b3b2a810a5df6a7 -Block 0007 [ 90]: 1b64f6c64c8a59bc -Block 0007 [ 91]: 977cbe40ed8cec43 -Block 0007 [ 92]: e31fcc085f38d53d -Block 0007 [ 93]: 8dacbd1659aa5d75 -Block 0007 [ 94]: db7be4515fae98c8 -Block 0007 [ 95]: 0e09711fddfd8a93 -Block 0007 [ 96]: 1c5e2497f8f99c08 -Block 0007 [ 97]: 14939a9fe8eeab78 -Block 0007 [ 98]: 16c9e45e8d4980b4 -Block 0007 [ 99]: 8ca0e091985666a7 -Block 0007 [100]: 40fc23e58c19d0f3 -Block 0007 [101]: 629724e6f7b62068 -Block 0007 [102]: 4408d2e716e924a5 -Block 0007 [103]: 92783fff1ffb2acc -Block 0007 [104]: a4b31f42c0b49ce3 -Block 0007 [105]: 2e79a2eb24310368 -Block 0007 [106]: 18944b2c88b72f51 -Block 0007 [107]: 64edf93e2f552fe5 -Block 0007 [108]: 71adf42caa82f448 -Block 0007 [109]: 9eca8ad4193ffb57 -Block 0007 [110]: 24b96774da15ca98 -Block 0007 [111]: 24e33d65fafaa4c7 -Block 0007 [112]: a7778267896812a4 -Block 0007 [113]: 818644acf15c0f9b -Block 0007 [114]: 6a23c1b96974dbf9 -Block 0007 [115]: 1a0b06a6608dccd8 -Block 0007 [116]: 74c08a50ef521a62 -Block 0007 [117]: 69c228cd79693adc -Block 0007 [118]: cfed8d7c69622e4b -Block 0007 [119]: e3dea674e760140f -Block 0007 [120]: 65dae947d1ea893d -Block 0007 [121]: 9851ca478cbe9e9f -Block 0007 [122]: f249edf6a015a470 -Block 0007 [123]: 45130f054a2a4e29 -Block 0007 [124]: 78c9c8039a51b9d1 -Block 0007 [125]: abb83061e831180a -Block 0007 [126]: 1e7449084d6645f0 -Block 0007 [127]: 9515bc4201360828 -Block 0008 [ 0]: d612868adf2be803 -Block 0008 [ 1]: cfadcc4be9960938 -Block 0008 [ 2]: 8a6e53600b22fe5d -Block 0008 [ 3]: 940f606aa08d0978 -Block 0008 [ 4]: a75de52bf3ae5864 -Block 0008 [ 5]: df442c83c925988a -Block 0008 [ 6]: 011e6fe8140509cb -Block 0008 [ 7]: 29440fa1ce9bfb2c -Block 0008 [ 8]: 0bf70af269753b37 -Block 0008 [ 9]: aec81a2b9dd57a05 -Block 0008 [ 10]: e923ae5f3cccfa82 -Block 0008 [ 11]: 089509caeb6454df -Block 0008 [ 12]: b2816034783a877b -Block 0008 [ 13]: 067e43081088354b -Block 0008 [ 14]: de1fcdc9ae795382 -Block 0008 [ 15]: a89e60140948d636 -Block 0008 [ 16]: 37d60ed78adc0155 -Block 0008 [ 17]: 00052b4747a78d14 -Block 0008 [ 18]: 847a306b7847724f -Block 0008 [ 19]: 3b9618df7794b366 -Block 0008 [ 20]: 75146dcfcbe1ef44 -Block 0008 [ 21]: ebdf91041a31624a -Block 0008 [ 22]: b7aaa244076549af -Block 0008 [ 23]: 95d3c561896e5c28 -Block 0008 [ 24]: 25b0a3359ad1d016 -Block 0008 [ 25]: 402e9816f5390dfc -Block 0008 [ 26]: b2c169f382b15d8e -Block 0008 [ 27]: 5e0fdc4d5d1612f1 -Block 0008 [ 28]: d8d5df2ca9ebf712 -Block 0008 [ 29]: cc215dfcbcf9b770 -Block 0008 [ 30]: 8514fc780bdfcde7 -Block 0008 [ 31]: 0c50b022e82144b9 -Block 0008 [ 32]: 5ef663b5e0fbbb26 -Block 0008 [ 33]: 5e49adb486b18df1 -Block 0008 [ 34]: 2b1c1c29dc240f7b -Block 0008 [ 35]: e214e55d4e685822 -Block 0008 [ 36]: 3083cc17110d4f82 -Block 0008 [ 37]: 753666ba11662ec3 -Block 0008 [ 38]: 1e3910d2e6ce1865 -Block 0008 [ 39]: 97264a9ffca56797 -Block 0008 [ 40]: 37dc35846509817b -Block 0008 [ 41]: 2fe851c388035963 -Block 0008 [ 42]: fbec63882e44a721 -Block 0008 [ 43]: caa997de14a10a02 -Block 0008 [ 44]: 91654566db990d85 -Block 0008 [ 45]: e66261d038c7cfd5 -Block 0008 [ 46]: 9d9528279755927e -Block 0008 [ 47]: f0656ba33f251801 -Block 0008 [ 48]: e678422625446138 -Block 0008 [ 49]: 96836ea927d354fb -Block 0008 [ 50]: d20bb54a0a4d2aff -Block 0008 [ 51]: 6f97b5db80f2ea76 -Block 0008 [ 52]: 0ce72591ed30245e -Block 0008 [ 53]: baeb8eae606fa8db -Block 0008 [ 54]: 904731f491268647 -Block 0008 [ 55]: 31dab2253f1536f2 -Block 0008 [ 56]: e2b55e214e264441 -Block 0008 [ 57]: ee95fc0ecab6d1c3 -Block 0008 [ 58]: f774d2422e8b994d -Block 0008 [ 59]: fc88a999c4c8a0e3 -Block 0008 [ 60]: ffec6c149c7b427d -Block 0008 [ 61]: f6e51ed622a2a404 -Block 0008 [ 62]: aa819f8fdf3a958a -Block 0008 [ 63]: d0bb4e5ed627ea69 -Block 0008 [ 64]: b4caf41d477be373 -Block 0008 [ 65]: c038ef1d14571811 -Block 0008 [ 66]: 5704f751069ef5c4 -Block 0008 [ 67]: 4e7d469a2b2906f0 -Block 0008 [ 68]: 6aebc5c3c6bb95ce -Block 0008 [ 69]: 07f82299037a65aa -Block 0008 [ 70]: d1a145cc12979796 -Block 0008 [ 71]: 7f005b1a0f789208 -Block 0008 [ 72]: d9fcf1ff4ddb4ee6 -Block 0008 [ 73]: b2af7d93b0bad697 -Block 0008 [ 74]: dd83b72b38f9fe4c -Block 0008 [ 75]: e3ef160315685757 -Block 0008 [ 76]: 11bb09b41d219cc1 -Block 0008 [ 77]: 6ab0fe2b24116968 -Block 0008 [ 78]: 0269d9d391b55937 -Block 0008 [ 79]: a47bf48a84c1a1af -Block 0008 [ 80]: c151934dd17851da -Block 0008 [ 81]: 28bfa5b23c63aacf -Block 0008 [ 82]: d3b26f606f9a13f3 -Block 0008 [ 83]: 4220b1ba4f653965 -Block 0008 [ 84]: af0ea18acf4b14a2 -Block 0008 [ 85]: 0a90b45dbcaf578c -Block 0008 [ 86]: 801cd8073692870c -Block 0008 [ 87]: 9ad5d654b02497a2 -Block 0008 [ 88]: 07e72f75fce4df71 -Block 0008 [ 89]: 00e4d4a54752e61d -Block 0008 [ 90]: 9c8895477b9162b2 -Block 0008 [ 91]: 1944bf577facafe6 -Block 0008 [ 92]: 2d02b70de5b04770 -Block 0008 [ 93]: 3c412182dbb85c17 -Block 0008 [ 94]: dc7f7011983e1dc4 -Block 0008 [ 95]: 2302a2015b57e359 -Block 0008 [ 96]: 83d9dd6fdad21b11 -Block 0008 [ 97]: 77b45f920c4bb8e2 -Block 0008 [ 98]: 80080b2c8d7780c0 -Block 0008 [ 99]: a9912a4771a82866 -Block 0008 [100]: ac1ada4b6da0456d -Block 0008 [101]: 0658745593b304e6 -Block 0008 [102]: 92b03ac114e5fe68 -Block 0008 [103]: a82b5eb91e9ccfd1 -Block 0008 [104]: f2374d1a660d4063 -Block 0008 [105]: 057c5713519cd9c7 -Block 0008 [106]: 5c4e596261ed929d -Block 0008 [107]: 2177c5a8322cccea -Block 0008 [108]: 1e78ddef6bfa16b5 -Block 0008 [109]: d6d0c5e8ad21dba7 -Block 0008 [110]: 3c6bf2bf4b6bb17d -Block 0008 [111]: 1a403df00f872d84 -Block 0008 [112]: e335758e00e7b5f9 -Block 0008 [113]: 0451e19983c182fe -Block 0008 [114]: d4f463b36d4b82df -Block 0008 [115]: ade54bf28baf7fcc -Block 0008 [116]: 19187ba45ba81b07 -Block 0008 [117]: 3ae1a97b3547e1aa -Block 0008 [118]: 279eb8108c2c7c64 -Block 0008 [119]: 06fa325c5342f8ed -Block 0008 [120]: 9966212e31b37911 -Block 0008 [121]: 1d9ed6b6f63f37e5 -Block 0008 [122]: 9978feff7fc82305 -Block 0008 [123]: 365c4624ef40dcab -Block 0008 [124]: 4bfaa74a2040ec68 -Block 0008 [125]: 6f833682c02a1557 -Block 0008 [126]: 60bf6db28614e2a4 -Block 0008 [127]: a0197e1101aaf452 -Block 0009 [ 0]: 125e7be23f9e2ae1 -Block 0009 [ 1]: 2dcf9e588ed34492 -Block 0009 [ 2]: dfdf0d708569f1a6 -Block 0009 [ 3]: d77f32b42b708d36 -Block 0009 [ 4]: 39312541fea455d5 -Block 0009 [ 5]: c89d0097d6fd04df -Block 0009 [ 6]: c6472c07ea14897c -Block 0009 [ 7]: 8327ca84204733a4 -Block 0009 [ 8]: f641bd8b6287310f -Block 0009 [ 9]: 1dcb8588aceb1b07 -Block 0009 [ 10]: 9651afb7ccffb052 -Block 0009 [ 11]: 3d3b291ea2ea6980 -Block 0009 [ 12]: 30a22195a702c490 -Block 0009 [ 13]: a6c7624a0c702031 -Block 0009 [ 14]: 315b0b5a03664357 -Block 0009 [ 15]: 39195128217b4b65 -Block 0009 [ 16]: 0f1bdb60cee30e1d -Block 0009 [ 17]: 4770e0438fabf04b -Block 0009 [ 18]: 07157794fcedc106 -Block 0009 [ 19]: 2822a230fedd1687 -Block 0009 [ 20]: d496741d207ab651 -Block 0009 [ 21]: 5fc8ebcc49e1454f -Block 0009 [ 22]: bb37c289793ff950 -Block 0009 [ 23]: a76dad3a5aa92cc9 -Block 0009 [ 24]: eed1c1f29d84c0ce -Block 0009 [ 25]: 635eb6e9dccb1a80 -Block 0009 [ 26]: c98604090fce7bff -Block 0009 [ 27]: 510fb045776b5356 -Block 0009 [ 28]: 8365b2db92ae9754 -Block 0009 [ 29]: f4586c23569b182e -Block 0009 [ 30]: 21315b52057b3ce7 -Block 0009 [ 31]: 90fe05d38503aea6 -Block 0009 [ 32]: 464d22ee86afa981 -Block 0009 [ 33]: d47dafe23a351752 -Block 0009 [ 34]: 71fec7c68e0a5dcf -Block 0009 [ 35]: 0bb36472e5739015 -Block 0009 [ 36]: 131f692e1c0acc56 -Block 0009 [ 37]: 73fd04a2086c8019 -Block 0009 [ 38]: 0e4908b3c94e8804 -Block 0009 [ 39]: 8048d6398b615965 -Block 0009 [ 40]: 2b89ac9aa1266744 -Block 0009 [ 41]: 1518d4a0ecd512dc -Block 0009 [ 42]: 604926c415520f1e -Block 0009 [ 43]: cb40f5c76d04dc9c -Block 0009 [ 44]: d6949d19afbab75e -Block 0009 [ 45]: a747e5b0858042f8 -Block 0009 [ 46]: 954282663fa679c9 -Block 0009 [ 47]: 1d04afb228acb029 -Block 0009 [ 48]: 2f4a1b0fc1bc470f -Block 0009 [ 49]: 267680f7f260a7ff -Block 0009 [ 50]: 411fbc5bb703f140 -Block 0009 [ 51]: bbecaa9a4b82896a -Block 0009 [ 52]: a6e3704961a41f31 -Block 0009 [ 53]: bd98c5c49517a749 -Block 0009 [ 54]: e6cb85d82369a3b9 -Block 0009 [ 55]: 69ba7c14225446b2 -Block 0009 [ 56]: fbf4a6a5eddcff1d -Block 0009 [ 57]: 41838c9bceb91e05 -Block 0009 [ 58]: b6474fb523ddbc62 -Block 0009 [ 59]: b715ba6ba33f0865 -Block 0009 [ 60]: aa4a68df42f44cdc -Block 0009 [ 61]: 2335e406b1c939b2 -Block 0009 [ 62]: 87883da03f5c0db8 -Block 0009 [ 63]: 5ec1b07fbc6aa2cc -Block 0009 [ 64]: c1854b3649373eef -Block 0009 [ 65]: 2c2de0c02c401a2f -Block 0009 [ 66]: 5131d3ba29a37386 -Block 0009 [ 67]: 362306b98176e59d -Block 0009 [ 68]: 3e0e950c86020ddd -Block 0009 [ 69]: 5f04586af32cfd6d -Block 0009 [ 70]: d667c126d71adacb -Block 0009 [ 71]: dee8b5c518f125b0 -Block 0009 [ 72]: 5a46d25441f985f1 -Block 0009 [ 73]: 5211e3c653809142 -Block 0009 [ 74]: 856ad42591bf52e4 -Block 0009 [ 75]: 41bea57d8612affe -Block 0009 [ 76]: b1b5f95510720687 -Block 0009 [ 77]: 346ceb0bbb618336 -Block 0009 [ 78]: e85af44a94adf434 -Block 0009 [ 79]: 3ea25ef8070fc019 -Block 0009 [ 80]: bdcee6ac0eb4fb02 -Block 0009 [ 81]: 73874f00a8de263b -Block 0009 [ 82]: c93632643699d45d -Block 0009 [ 83]: fde27892dc08d5dd -Block 0009 [ 84]: 289f26ea163aa0c1 -Block 0009 [ 85]: 3584be4e9437b93f -Block 0009 [ 86]: 834990ca8bd21dd5 -Block 0009 [ 87]: 369f2fed26bd92bd -Block 0009 [ 88]: dcc1434bfb54747d -Block 0009 [ 89]: 381849ce1dad2ccf -Block 0009 [ 90]: daa863935ed2c6d5 -Block 0009 [ 91]: bd40cf4c84e93cd4 -Block 0009 [ 92]: 05f9a3dc63c2556b -Block 0009 [ 93]: 240d5ee74a78afa3 -Block 0009 [ 94]: 62410111fa5baa41 -Block 0009 [ 95]: 17478960fcad0d45 -Block 0009 [ 96]: 3ca87435e9d056c3 -Block 0009 [ 97]: e44fdd8c185102b2 -Block 0009 [ 98]: ffe99cb0769d8875 -Block 0009 [ 99]: 86030c14d82dcf62 -Block 0009 [100]: 8cafeeb18e2a8c0a -Block 0009 [101]: d6c34798b443f4c3 -Block 0009 [102]: 2c744cd44d7d9699 -Block 0009 [103]: 9496d6df24516281 -Block 0009 [104]: 8d2389d16d1a2219 -Block 0009 [105]: 37ccfa20bb9b4d03 -Block 0009 [106]: 349448539bace7cf -Block 0009 [107]: 11c5dce1acc8f8d6 -Block 0009 [108]: 393f9cb72aa6fcca -Block 0009 [109]: f6fab4f88677c049 -Block 0009 [110]: 8ea980189bbd81c1 -Block 0009 [111]: 5933bbc1c4935c8f -Block 0009 [112]: bf544ba618f1e3aa -Block 0009 [113]: 6ecf8ab649253235 -Block 0009 [114]: f3d9299efd50d9f2 -Block 0009 [115]: acf6c3053c7f71fe -Block 0009 [116]: 985bdc30cc7b3a1e -Block 0009 [117]: 2c6fa017544c2f8a -Block 0009 [118]: 3873d757ebdf92ef -Block 0009 [119]: f50c701f870493b5 -Block 0009 [120]: 154a8ade495cd5f9 -Block 0009 [121]: a44c8210a1194465 -Block 0009 [122]: 372c54dca2cd833b -Block 0009 [123]: 4e21a61415e2e767 -Block 0009 [124]: 081706a771aed571 -Block 0009 [125]: 44f4da88dc2a3ccc -Block 0009 [126]: caa2180bab53cbd2 -Block 0009 [127]: d19f36217137e69d -Block 0010 [ 0]: 50f129c8314b1dd2 -Block 0010 [ 1]: f1faf24252b5ce03 -Block 0010 [ 2]: fd846116d2778287 -Block 0010 [ 3]: e172de82b6a5dd78 -Block 0010 [ 4]: 8511807345a45e26 -Block 0010 [ 5]: e2765515697dfe71 -Block 0010 [ 6]: 0011ec204248c60e -Block 0010 [ 7]: d2da550b83c17296 -Block 0010 [ 8]: a3cde273a1015bd8 -Block 0010 [ 9]: f16021f0e048fc2b -Block 0010 [ 10]: 2bfd6df1b3474b63 -Block 0010 [ 11]: e44905e2946d56e2 -Block 0010 [ 12]: f0c73e131fb1ca92 -Block 0010 [ 13]: c475c70e8fee063f -Block 0010 [ 14]: 1656f9ca27728999 -Block 0010 [ 15]: c1e395aa563f0bf4 -Block 0010 [ 16]: 18710644253867db -Block 0010 [ 17]: 7281e128ff73c012 -Block 0010 [ 18]: 17ce526cf0f21f1d -Block 0010 [ 19]: d273ebb95002216e -Block 0010 [ 20]: 440c93c6690146c6 -Block 0010 [ 21]: 7e72aab8480f9c9a -Block 0010 [ 22]: 76e632e3b3a3a1a3 -Block 0010 [ 23]: 03afa7847fbfb8af -Block 0010 [ 24]: f676d56ad1793b27 -Block 0010 [ 25]: a09d705d9e2da6a1 -Block 0010 [ 26]: 1d5d9f3397c5583d -Block 0010 [ 27]: 38d36e89deb44a7f -Block 0010 [ 28]: 87532c117619729d -Block 0010 [ 29]: b4fe29f51a9981bd -Block 0010 [ 30]: d534cbcf713073f8 -Block 0010 [ 31]: fec16e1d25805876 -Block 0010 [ 32]: 60dce345c4ecc2fc -Block 0010 [ 33]: 5dc5e0be360e32ca -Block 0010 [ 34]: 5ed0afb1d650acdc -Block 0010 [ 35]: 33c1a3ba91199c17 -Block 0010 [ 36]: 7b85af6946855eea -Block 0010 [ 37]: 4bf8f4ef629acb53 -Block 0010 [ 38]: 641454e004536e75 -Block 0010 [ 39]: e9598a67bb9e010d -Block 0010 [ 40]: 1ae66b61ba9f5fef -Block 0010 [ 41]: 8b5689f5690af5ad -Block 0010 [ 42]: c1ebe39324b7ad10 -Block 0010 [ 43]: 8d8f1a6801c2fcee -Block 0010 [ 44]: d0353ed7e27aa209 -Block 0010 [ 45]: 408cb141d33c282a -Block 0010 [ 46]: 3cec0ba738981253 -Block 0010 [ 47]: 12836a28882cec64 -Block 0010 [ 48]: 55ab2da84afa1e73 -Block 0010 [ 49]: e012d8cbba55e196 -Block 0010 [ 50]: 225e87dd4ba15450 -Block 0010 [ 51]: 97f5b2554a53497a -Block 0010 [ 52]: 858392bd86337c0c -Block 0010 [ 53]: 1e9d8ec565431484 -Block 0010 [ 54]: be25bb549fc5ad96 -Block 0010 [ 55]: 8cae37b6260f400f -Block 0010 [ 56]: 2fa1da62403ff22b -Block 0010 [ 57]: 73ef3777277c6deb -Block 0010 [ 58]: 47ffd701d6a542c1 -Block 0010 [ 59]: d21c8613fc4ad450 -Block 0010 [ 60]: 741808629149aa29 -Block 0010 [ 61]: 0dee7475344afc27 -Block 0010 [ 62]: 69f162864b0d0ba8 -Block 0010 [ 63]: e723d4414dc01d9a -Block 0010 [ 64]: 1348ee9b939a06aa -Block 0010 [ 65]: 0cd2fa596564c17b -Block 0010 [ 66]: 1e529efd0d986c9d -Block 0010 [ 67]: b2b66e0e074ceade -Block 0010 [ 68]: 2d92a419c4c8b2f6 -Block 0010 [ 69]: eb7f325a95c509b4 -Block 0010 [ 70]: 3e20722bdf51270f -Block 0010 [ 71]: cfb337b8069800dd -Block 0010 [ 72]: c2e783ed1deac4f7 -Block 0010 [ 73]: 820ca55e6f468a61 -Block 0010 [ 74]: e51d88ed7abbd53f -Block 0010 [ 75]: 0110137ae06a717c -Block 0010 [ 76]: e416efaaf88fa43f -Block 0010 [ 77]: d76b9191eb39cf1e -Block 0010 [ 78]: ff49071437550b9c -Block 0010 [ 79]: 10dd148cc497ef63 -Block 0010 [ 80]: a70022eda2cf3692 -Block 0010 [ 81]: cdbdaea580ee59ff -Block 0010 [ 82]: 0f393ef6ea262c86 -Block 0010 [ 83]: f7d2feedf24469e1 -Block 0010 [ 84]: ac673c848c7c11f0 -Block 0010 [ 85]: e2c6354b76edff69 -Block 0010 [ 86]: 9f3dab5a88e0cb1b -Block 0010 [ 87]: 4609b3ae383b07d1 -Block 0010 [ 88]: 452daef051d9f3d6 -Block 0010 [ 89]: 7a5f2288dd741e6c -Block 0010 [ 90]: d455d1c591fa4c41 -Block 0010 [ 91]: 5a6f3fc8998258ef -Block 0010 [ 92]: 9bf8f2287a507cb0 -Block 0010 [ 93]: fb689cdc1a0e2ec6 -Block 0010 [ 94]: 272c0ea1d13bed54 -Block 0010 [ 95]: 05efb5ef98d49b9c -Block 0010 [ 96]: 264f51dd7bc348d1 -Block 0010 [ 97]: eb7b7b016051f0c3 -Block 0010 [ 98]: d3b72adf5543f07b -Block 0010 [ 99]: 73ee82f261419fb2 -Block 0010 [100]: 00c085c84a773a67 -Block 0010 [101]: bf55023775668108 -Block 0010 [102]: 3f30efe65be484b0 -Block 0010 [103]: 0aaa470843840516 -Block 0010 [104]: aea27105281c4c68 -Block 0010 [105]: d42cbbc0b5c316dd -Block 0010 [106]: 5df8a9f6551e5787 -Block 0010 [107]: 5cd2d2ede1052bd1 -Block 0010 [108]: 8223be1c3f2a91f4 -Block 0010 [109]: d54cc5cb370bd398 -Block 0010 [110]: 86ec22bbbba3940b -Block 0010 [111]: 0db251349f6a3137 -Block 0010 [112]: 3c7977d6b2c09e56 -Block 0010 [113]: 18ac0e2c26a7153b -Block 0010 [114]: ffc869a4015c94e6 -Block 0010 [115]: cae6a67f644893ab -Block 0010 [116]: 3ce008df44afc6e8 -Block 0010 [117]: 470862fa2a90614b -Block 0010 [118]: 07aeeb964afbdd88 -Block 0010 [119]: efc86a0ca279152c -Block 0010 [120]: 92a22900f73b72d4 -Block 0010 [121]: ee34e6f5e7f5e239 -Block 0010 [122]: b6f97e0f206095cd -Block 0010 [123]: 05e6087e10ee7492 -Block 0010 [124]: 44a92d7be34a8939 -Block 0010 [125]: 142bf79b42ded951 -Block 0010 [126]: 28c3115e72f22ac2 -Block 0010 [127]: 3ea771b69e0e20c8 -Block 0011 [ 0]: 67512d1435cecef5 -Block 0011 [ 1]: 7b3853dbd933132a -Block 0011 [ 2]: 04edbbc01b9db0c7 -Block 0011 [ 3]: 530b98198518d7f8 -Block 0011 [ 4]: be9dc30940a7f1c1 -Block 0011 [ 5]: 51a3c35cc4e653ed -Block 0011 [ 6]: 48b8b2a91f5ab89b -Block 0011 [ 7]: 34aa887df6ebc1d6 -Block 0011 [ 8]: 92808ce9522cd897 -Block 0011 [ 9]: 624554ca78ddf7c6 -Block 0011 [ 10]: d8d17dd8cf835d2e -Block 0011 [ 11]: d0f2fe94951e9b56 -Block 0011 [ 12]: 143aa6711edf3fc5 -Block 0011 [ 13]: 07f2c6da0bd5af83 -Block 0011 [ 14]: 4e2e8b6acaea8714 -Block 0011 [ 15]: 7b0af574d5bd3bc2 -Block 0011 [ 16]: 9c8143772912448d -Block 0011 [ 17]: 613bfb2f7aefae51 -Block 0011 [ 18]: e80c8ce117a18814 -Block 0011 [ 19]: 575113a5a2211a01 -Block 0011 [ 20]: 6f3b49506671f35c -Block 0011 [ 21]: ec1c2d06d6697205 -Block 0011 [ 22]: bae45b9236962eed -Block 0011 [ 23]: 3627b2e939003bab -Block 0011 [ 24]: 21774e1f96ad4838 -Block 0011 [ 25]: 2f800b944b7f6e57 -Block 0011 [ 26]: f0f2ff9fa1e034ca -Block 0011 [ 27]: 568079414c1f5a64 -Block 0011 [ 28]: e0baa5b7614e4eb5 -Block 0011 [ 29]: efa7e51a03dd0222 -Block 0011 [ 30]: 5c50c5b5b5c5d9a1 -Block 0011 [ 31]: e954ba4be27d866d -Block 0011 [ 32]: e57766953b5f9969 -Block 0011 [ 33]: ecb7768b12667cbf -Block 0011 [ 34]: 4301f0b613246862 -Block 0011 [ 35]: d93ffef1cb456260 -Block 0011 [ 36]: 0766ad3114adbb26 -Block 0011 [ 37]: 74eb304b074faa52 -Block 0011 [ 38]: d27a3c9fbafd5b4b -Block 0011 [ 39]: e0ef96f6ed891ad1 -Block 0011 [ 40]: 48f176fa99f985bb -Block 0011 [ 41]: 1974187aeee6d69f -Block 0011 [ 42]: 1ebd104a6633296d -Block 0011 [ 43]: 7ee2a80d355fd18c -Block 0011 [ 44]: 54a44e3c90c36dc6 -Block 0011 [ 45]: 9b0e66f2251bbb4c -Block 0011 [ 46]: 40f28eb7dda899b2 -Block 0011 [ 47]: 2ae0fa589b6250e1 -Block 0011 [ 48]: cd597aa36c476ce6 -Block 0011 [ 49]: 2eeb9ab504f496e0 -Block 0011 [ 50]: feec00a7be156598 -Block 0011 [ 51]: 30f53c1d18968187 -Block 0011 [ 52]: 6f9bafc19dcc2d61 -Block 0011 [ 53]: 73dc2454808cae11 -Block 0011 [ 54]: dcfd7e7fbedaacef -Block 0011 [ 55]: 4202bfb9dad21ea0 -Block 0011 [ 56]: 79c44999c00cba6f -Block 0011 [ 57]: 602afb4925164920 -Block 0011 [ 58]: 0d08bb98820069e0 -Block 0011 [ 59]: 38181becacb9e937 -Block 0011 [ 60]: db1e2b378e2d2a64 -Block 0011 [ 61]: 6adf3645089751a7 -Block 0011 [ 62]: c63fd2836c831717 -Block 0011 [ 63]: 65e2f35fbe50b14d -Block 0011 [ 64]: 891eaf8bdf76f675 -Block 0011 [ 65]: d941b71fe6f89a8e -Block 0011 [ 66]: 9d58bc95cd06559d -Block 0011 [ 67]: 6dc168dd4383a7d8 -Block 0011 [ 68]: f4b6cad30a873798 -Block 0011 [ 69]: 9a0e5c1331340531 -Block 0011 [ 70]: 083a83268a0330d0 -Block 0011 [ 71]: 8bd4149399bc73c8 -Block 0011 [ 72]: 8864a769ea615522 -Block 0011 [ 73]: 5784251b23d40f2c -Block 0011 [ 74]: b130e47a99eb64bc -Block 0011 [ 75]: da0ef3e1b92c46d5 -Block 0011 [ 76]: 531761fde0a4d6f2 -Block 0011 [ 77]: 2856066cd9d39c8e -Block 0011 [ 78]: 26d416107a1ef8ea -Block 0011 [ 79]: eba3079322eb430b -Block 0011 [ 80]: 9f6777c77a534d6b -Block 0011 [ 81]: bb626be70b4118c2 -Block 0011 [ 82]: b61ba058ea11eb53 -Block 0011 [ 83]: 382829f1d82aeae2 -Block 0011 [ 84]: 59cdae0ac56c6a78 -Block 0011 [ 85]: c7f42b8d265831bb -Block 0011 [ 86]: e013aaa66cf03cfb -Block 0011 [ 87]: f278b94057371dac -Block 0011 [ 88]: b26876fc500fa63e -Block 0011 [ 89]: 86527c99624a20ef -Block 0011 [ 90]: 73d7f4bd8683351e -Block 0011 [ 91]: 8354b399f12c0892 -Block 0011 [ 92]: 303d51dc0f77aef1 -Block 0011 [ 93]: eb114cf73af14329 -Block 0011 [ 94]: 74267d913db759de -Block 0011 [ 95]: 4fec949ebb3a3a64 -Block 0011 [ 96]: 15c00518ee4adf4e -Block 0011 [ 97]: 1d8cf07d6edde475 -Block 0011 [ 98]: e954c8785b16eb02 -Block 0011 [ 99]: 18074db3522c065d -Block 0011 [100]: 9b1b13cad5b57149 -Block 0011 [101]: 67ac13cad09e6cf7 -Block 0011 [102]: 61c268324fc61790 -Block 0011 [103]: f917ea42c1d4aae8 -Block 0011 [104]: 4afd468a75a15d75 -Block 0011 [105]: d45f3f38a34cb34c -Block 0011 [106]: 042cd7de25fd793e -Block 0011 [107]: 72fd02ada9fd644c -Block 0011 [108]: 46bbf9e498748729 -Block 0011 [109]: c45d10a65df0705d -Block 0011 [110]: 7d1f38b2568fd31e -Block 0011 [111]: 4e5eeab86f171c9c -Block 0011 [112]: e4191d1be8010499 -Block 0011 [113]: b7e7d91669716bfd -Block 0011 [114]: a84d284ad0514913 -Block 0011 [115]: de2454e3bb127b5c -Block 0011 [116]: 5593b362d34e3236 -Block 0011 [117]: 3a97eddc885470b8 -Block 0011 [118]: d49f0989505a3e20 -Block 0011 [119]: a49c29255d2ff768 -Block 0011 [120]: 36229ee8d46ded5d -Block 0011 [121]: befd8c33cbd6a7cf -Block 0011 [122]: 54d6daeb3ae7f016 -Block 0011 [123]: 2dd97a531e383ad2 -Block 0011 [124]: 7c86ce3b32d61ef6 -Block 0011 [125]: c6febd2bdbc678b9 -Block 0011 [126]: 7e4d8df7e7698f3c -Block 0011 [127]: 876051736f645364 -Block 0012 [ 0]: 0c9c55c8c1620b64 -Block 0012 [ 1]: 60b4c465dea9fd66 -Block 0012 [ 2]: 80c4d91289e2cea1 -Block 0012 [ 3]: b3c19eb8f6a03464 -Block 0012 [ 4]: 3b5b05dc4d420ced -Block 0012 [ 5]: 89e95d39facd3e56 -Block 0012 [ 6]: d0fe580b20f54961 -Block 0012 [ 7]: 9dfd776ddc178519 -Block 0012 [ 8]: 43601291ac36ceb8 -Block 0012 [ 9]: fc448a430a414e43 -Block 0012 [ 10]: 6cfc44fc6bafb7d7 -Block 0012 [ 11]: cd74be8ef63bb036 -Block 0012 [ 12]: a92d857c51adb1cd -Block 0012 [ 13]: d784ad0dfe421f93 -Block 0012 [ 14]: d0d6f388f86e6275 -Block 0012 [ 15]: 2fccfe5542011b8f -Block 0012 [ 16]: 830f41df00cb8562 -Block 0012 [ 17]: 976279793f5baea7 -Block 0012 [ 18]: 67a85e07df4f61fb -Block 0012 [ 19]: eea4a6c342ab9d54 -Block 0012 [ 20]: 148054c90a308c58 -Block 0012 [ 21]: 922b40f7d90153b2 -Block 0012 [ 22]: 7c562e744deeae9e -Block 0012 [ 23]: a5d4d940c2efb1ca -Block 0012 [ 24]: 00bbe2405465d5f2 -Block 0012 [ 25]: 3768c36968e26558 -Block 0012 [ 26]: bb52349064085d3e -Block 0012 [ 27]: 90e8687c09aa2434 -Block 0012 [ 28]: f21c0ec2f9965d13 -Block 0012 [ 29]: f8e377812defeda9 -Block 0012 [ 30]: 3f90e96ef79c7b2d -Block 0012 [ 31]: 452f07cd905ed4b6 -Block 0012 [ 32]: 807f5b0ef43b1da5 -Block 0012 [ 33]: afc8923951d0d506 -Block 0012 [ 34]: 7a1f5bc2c3ef6c85 -Block 0012 [ 35]: 767992930b29dccb -Block 0012 [ 36]: ecf316593a3da03e -Block 0012 [ 37]: 49c984f3f324e369 -Block 0012 [ 38]: e8216f5411b321af -Block 0012 [ 39]: 55789c3b8e15c9b2 -Block 0012 [ 40]: 4aea9d0280102cac -Block 0012 [ 41]: f4b3419d7c1f3f32 -Block 0012 [ 42]: 390aee0ac1556c0f -Block 0012 [ 43]: 8cdf8035335a8cd3 -Block 0012 [ 44]: d7997f4c4defb85a -Block 0012 [ 45]: 3f6131d71978435b -Block 0012 [ 46]: 30e1589f1892c546 -Block 0012 [ 47]: 7ccc22fc004e262b -Block 0012 [ 48]: 3b9215cdd270937f -Block 0012 [ 49]: 738a9ba2b1780540 -Block 0012 [ 50]: 35661290e6c6e77a -Block 0012 [ 51]: c03a8402fa536118 -Block 0012 [ 52]: 06c68549dad7e79c -Block 0012 [ 53]: 4ea85ff21f91688a -Block 0012 [ 54]: 59b6c557566d8806 -Block 0012 [ 55]: 40e5d7c4370d7591 -Block 0012 [ 56]: ae1fffaab705275e -Block 0012 [ 57]: 311a8f16b107444d -Block 0012 [ 58]: e5218d5c0bcbd99a -Block 0012 [ 59]: d186ea05ba56676f -Block 0012 [ 60]: 834789ab82021d40 -Block 0012 [ 61]: 7df30c5e52929b05 -Block 0012 [ 62]: e8207858eb71f698 -Block 0012 [ 63]: 1d58bde3a5edc66b -Block 0012 [ 64]: ceb2be18efa776bb -Block 0012 [ 65]: e835d65827147cbe -Block 0012 [ 66]: 6a2f35bdd998fd14 -Block 0012 [ 67]: 9d40dd80a0faeae7 -Block 0012 [ 68]: e538055c4776c3ac -Block 0012 [ 69]: 5d1742a4d04bc17f -Block 0012 [ 70]: 163deb8613e852b3 -Block 0012 [ 71]: 15d2f3f0737d3bc7 -Block 0012 [ 72]: 2f5a3cdc39a7b986 -Block 0012 [ 73]: 2326e3dab7239771 -Block 0012 [ 74]: e72036e822906a5c -Block 0012 [ 75]: c5a549423bee0d90 -Block 0012 [ 76]: 902eb12ae0f8d17f -Block 0012 [ 77]: 25bb071a5a78682c -Block 0012 [ 78]: 454ada6ff7c65c8d -Block 0012 [ 79]: 8492e6db1f105910 -Block 0012 [ 80]: 0277193e9f99c46f -Block 0012 [ 81]: fa22603432d42324 -Block 0012 [ 82]: 8a83b69bc46f979c -Block 0012 [ 83]: a520140a955e36e4 -Block 0012 [ 84]: b1433fe02f4a349e -Block 0012 [ 85]: aa1113f8aae73b93 -Block 0012 [ 86]: d488ad30309c8498 -Block 0012 [ 87]: 0aec428b70ef549a -Block 0012 [ 88]: 93170079c6ab05e5 -Block 0012 [ 89]: e8f49d763907ca5a -Block 0012 [ 90]: 457e13af2923e613 -Block 0012 [ 91]: 6fa78b78b42065ef -Block 0012 [ 92]: 9338260a24b8d082 -Block 0012 [ 93]: a0b96f8e1511c315 -Block 0012 [ 94]: a513b98c6efdf8fa -Block 0012 [ 95]: 1b85f765892bcbc3 -Block 0012 [ 96]: ad139621f5e39c91 -Block 0012 [ 97]: 2d402ba231db9ef5 -Block 0012 [ 98]: b4deb002cc235b5e -Block 0012 [ 99]: 9f0d0a1a3ed3483a -Block 0012 [100]: 21d90ab3bd5a3701 -Block 0012 [101]: 586ab5d2732fb68b -Block 0012 [102]: 01af6c32fb19d96d -Block 0012 [103]: fbd622c0016b31db -Block 0012 [104]: 3d4b5bc64a1d3339 -Block 0012 [105]: f1e8dfb0e0e91615 -Block 0012 [106]: 0f8843aadd79799d -Block 0012 [107]: a79a41fa433b098e -Block 0012 [108]: c5fedee1f6b6efcb -Block 0012 [109]: ccf42653de5fded8 -Block 0012 [110]: bdeda18634357c04 -Block 0012 [111]: 9528f3f925aa6429 -Block 0012 [112]: 82d67bfd27bd3925 -Block 0012 [113]: 3a3abffe6da6bfd1 -Block 0012 [114]: c07698673bd83a29 -Block 0012 [115]: bb0b238da2a7505c -Block 0012 [116]: 7e0526fc80fb6f31 -Block 0012 [117]: f495215c56b1848f -Block 0012 [118]: 3bcf9ea980c04c60 -Block 0012 [119]: 4450f7ac179026f5 -Block 0012 [120]: 0fa713d584b0a2fe -Block 0012 [121]: a89d1b4ce7960428 -Block 0012 [122]: dd7afc7858234e35 -Block 0012 [123]: 8ff4307248170757 -Block 0012 [124]: 4eb19cae24707b6f -Block 0012 [125]: 44c60d71ffa74cb8 -Block 0012 [126]: 0c9c8a53e0cd54da -Block 0012 [127]: a734adb6b6a5601f -Block 0013 [ 0]: 8275ecaccc771ae4 -Block 0013 [ 1]: 712b01e69497cdf0 -Block 0013 [ 2]: 9301d483ae27c7fb -Block 0013 [ 3]: fab6f5ae8d80d6e2 -Block 0013 [ 4]: 1235754d7932aa8b -Block 0013 [ 5]: a65db531a30872df -Block 0013 [ 6]: 19241353a5c8f96b -Block 0013 [ 7]: 1c7b9a24517300ed -Block 0013 [ 8]: 6abeebaa06ff012c -Block 0013 [ 9]: f7cbcf3ee950e0f2 -Block 0013 [ 10]: 3192592d817f7b66 -Block 0013 [ 11]: 1753f87f59ea11c4 -Block 0013 [ 12]: 1fee77a9b4337ed8 -Block 0013 [ 13]: c57c6ca745154184 -Block 0013 [ 14]: f820b945f1e9848a -Block 0013 [ 15]: 2ce9b26044524919 -Block 0013 [ 16]: a40929146cea1a84 -Block 0013 [ 17]: e2687b7dea13e4dd -Block 0013 [ 18]: e7e5f533dc5348aa -Block 0013 [ 19]: b58852ce4757e67c -Block 0013 [ 20]: fc907be6692563c0 -Block 0013 [ 21]: 3900c482ae9f91a5 -Block 0013 [ 22]: 5e295867887dcb10 -Block 0013 [ 23]: 654906b021548d4c -Block 0013 [ 24]: 9f4d7100ad4a0312 -Block 0013 [ 25]: b429941b74aca665 -Block 0013 [ 26]: 24302c7eef140f1b -Block 0013 [ 27]: b2bb1998988469b9 -Block 0013 [ 28]: aef2456f2a23f536 -Block 0013 [ 29]: 9fe997b9e5f076df -Block 0013 [ 30]: 964e88a1b7455124 -Block 0013 [ 31]: 48cbd6d14f3570cd -Block 0013 [ 32]: 01393d0b6b8dfed3 -Block 0013 [ 33]: 1ede0fc24adb8a29 -Block 0013 [ 34]: b8698c7cbd4fef3b -Block 0013 [ 35]: d0cd560c48061859 -Block 0013 [ 36]: 38eabed90236c69c -Block 0013 [ 37]: 867fb49f0e401a6b -Block 0013 [ 38]: ac87846cb0a5255e -Block 0013 [ 39]: 38c89d68e6b27e7f -Block 0013 [ 40]: 15ddcc3b0d8f4e59 -Block 0013 [ 41]: 7e5cd39650a9b8fd -Block 0013 [ 42]: 037597aed87bc45f -Block 0013 [ 43]: 8d7729fcbfeeb3a8 -Block 0013 [ 44]: caa354f01d65dc58 -Block 0013 [ 45]: c8957f052aa6a2e8 -Block 0013 [ 46]: 41c0210c578d283f -Block 0013 [ 47]: 83241ee0a1d76e67 -Block 0013 [ 48]: dbd133c3b5071d9b -Block 0013 [ 49]: 3a82af1f045c7285 -Block 0013 [ 50]: cfb78c8781164562 -Block 0013 [ 51]: a2f06254dc93d0c1 -Block 0013 [ 52]: e9cc73236c17b29f -Block 0013 [ 53]: 068bf08bba7082b0 -Block 0013 [ 54]: 5602462888861686 -Block 0013 [ 55]: 9be6367d1bc248e8 -Block 0013 [ 56]: 224ec458cc53339f -Block 0013 [ 57]: cdd7f95f932daeb7 -Block 0013 [ 58]: 5b128a412967f6ae -Block 0013 [ 59]: f9b3ed0a3cf99ce3 -Block 0013 [ 60]: bbd741a9ecbebf82 -Block 0013 [ 61]: 79c4e0435f9b7bb1 -Block 0013 [ 62]: 2b692de61c9e122a -Block 0013 [ 63]: cf7bdf8929ff7d59 -Block 0013 [ 64]: 422af9f6beedd316 -Block 0013 [ 65]: 83fdd9968655f57e -Block 0013 [ 66]: 2984ca92c54934e6 -Block 0013 [ 67]: aa0a628463151601 -Block 0013 [ 68]: c9adc7e102d4e926 -Block 0013 [ 69]: f01036ed1cb180e2 -Block 0013 [ 70]: 49e6b538ffd429b0 -Block 0013 [ 71]: b034ead8223c890f -Block 0013 [ 72]: 7ff44edfd6d170e9 -Block 0013 [ 73]: 7a41e3fcb64f759a -Block 0013 [ 74]: 27c8457a4e19fc28 -Block 0013 [ 75]: 1ae95273cda41b9b -Block 0013 [ 76]: fd793d32c7886449 -Block 0013 [ 77]: 0dbd25cc3a9ba9bf -Block 0013 [ 78]: 7bc222a6d2cc88c2 -Block 0013 [ 79]: fcb5b217e43bf8a2 -Block 0013 [ 80]: 22185604488f3d51 -Block 0013 [ 81]: ffd19371c12ee9df -Block 0013 [ 82]: adb9635e61703b6a -Block 0013 [ 83]: aad4fc87c38c44dc -Block 0013 [ 84]: 8a5de034bf8bcb91 -Block 0013 [ 85]: 4873cf7a56632be6 -Block 0013 [ 86]: 640ad84374233383 -Block 0013 [ 87]: 4a78c06e4d724966 -Block 0013 [ 88]: f9af0f5f824ce1ac -Block 0013 [ 89]: 5cd8b424e7987fb2 -Block 0013 [ 90]: 63a749f3340a966f -Block 0013 [ 91]: 3be590e829a06c9d -Block 0013 [ 92]: 673669b53e42dfe0 -Block 0013 [ 93]: 4e13df1d4e996c1d -Block 0013 [ 94]: a75e97ca20914ac7 -Block 0013 [ 95]: 06a3ce6a1baa5937 -Block 0013 [ 96]: 8aef6dcf730b9d73 -Block 0013 [ 97]: 24c7e0759a8d4c95 -Block 0013 [ 98]: 9caf4fd316f89fc1 -Block 0013 [ 99]: 0a3319bc486637f3 -Block 0013 [100]: a0fea48059b4450e -Block 0013 [101]: c77f3111142a13c2 -Block 0013 [102]: f0e6031c0805f946 -Block 0013 [103]: 132dc730e7f7a4ac -Block 0013 [104]: a629264d94905d3a -Block 0013 [105]: fadc414873129baa -Block 0013 [106]: 86517cdce724b24d -Block 0013 [107]: 16a1b02cd6e750be -Block 0013 [108]: 04289a27673f1549 -Block 0013 [109]: b8701a1caf37ac45 -Block 0013 [110]: efc66529c438bcce -Block 0013 [111]: a3c68f26e26dde3e -Block 0013 [112]: 56f23362b31847df -Block 0013 [113]: 9d7e4e342eaf8a46 -Block 0013 [114]: a13cff8866f5ef49 -Block 0013 [115]: bf9964d57fe229ee -Block 0013 [116]: 3740b695ae269e6e -Block 0013 [117]: ba792fe8b9716c43 -Block 0013 [118]: 30f784e82dd0ab70 -Block 0013 [119]: e4f57cc08fa17da7 -Block 0013 [120]: 3d71b796968fa33f -Block 0013 [121]: 2dca46842308f3ec -Block 0013 [122]: 47db0499dfa0d745 -Block 0013 [123]: 195e3c1253ad056e -Block 0013 [124]: fbb2fe6b8b8d6721 -Block 0013 [125]: 971cb37328f7faec -Block 0013 [126]: c8bd887da9b96df4 -Block 0013 [127]: bc7f954a8dd53168 -Block 0014 [ 0]: 6b65de3737ca07f1 -Block 0014 [ 1]: a38cfa10cc2fc974 -Block 0014 [ 2]: e5198f5c31a8e3bf -Block 0014 [ 3]: 698e33db1e1ae03f -Block 0014 [ 4]: 14aea1e3f7b1bd88 -Block 0014 [ 5]: 23c7733a20c49535 -Block 0014 [ 6]: 708851504763e011 -Block 0014 [ 7]: 76d0191e1a308c7d -Block 0014 [ 8]: f221c44adbd9b02b -Block 0014 [ 9]: 45aa8795ece63642 -Block 0014 [ 10]: fd36d6c27b71b0bd -Block 0014 [ 11]: 0466e55299276cb5 -Block 0014 [ 12]: 725c41544c13d899 -Block 0014 [ 13]: f39ff57f5cd5f7f6 -Block 0014 [ 14]: f75b827542bb8030 -Block 0014 [ 15]: 8da5061bcb6a1352 -Block 0014 [ 16]: a108e3b625bdbbcf -Block 0014 [ 17]: eac50e88be6d72a8 -Block 0014 [ 18]: 52d7194dd03336c7 -Block 0014 [ 19]: 56025dc3f3ad86d9 -Block 0014 [ 20]: d7eb51a996fbcba4 -Block 0014 [ 21]: 3d590b82bab819bb -Block 0014 [ 22]: 1b6c96df6bf886f7 -Block 0014 [ 23]: ac25d4e6becf60d8 -Block 0014 [ 24]: 4af59e5a68c7a59e -Block 0014 [ 25]: fb1b4dfa899c0105 -Block 0014 [ 26]: 633e645801856648 -Block 0014 [ 27]: fa8ddeec6a823001 -Block 0014 [ 28]: a93a5e82198f77dd -Block 0014 [ 29]: 7ae453b0348fc6b2 -Block 0014 [ 30]: b6ebc8deda885562 -Block 0014 [ 31]: 72b3e8c629996c84 -Block 0014 [ 32]: 1317aeba03e2ad29 -Block 0014 [ 33]: 5234e64535c737c1 -Block 0014 [ 34]: 3b1fd79ba314ab07 -Block 0014 [ 35]: 9590c7b6fb1ea91b -Block 0014 [ 36]: 213f6ce02e02ad0d -Block 0014 [ 37]: 335b424cc634d4df -Block 0014 [ 38]: 34c1735174d44758 -Block 0014 [ 39]: ce9dfe46f52eebea -Block 0014 [ 40]: 6d6258ac61b821ab -Block 0014 [ 41]: 622d8e13ca29ed5c -Block 0014 [ 42]: b14226e2f8fad082 -Block 0014 [ 43]: a93cb7beed7dde9e -Block 0014 [ 44]: a65734f842749fc1 -Block 0014 [ 45]: ab77788d3cf8f1ce -Block 0014 [ 46]: f52b8d0ebafeda0f -Block 0014 [ 47]: 1127e07be84bfd23 -Block 0014 [ 48]: 18686c88d0eb20ee -Block 0014 [ 49]: 40dc4902a0305d3d -Block 0014 [ 50]: 632b9eec4405efec -Block 0014 [ 51]: 4702de3a2aae239c -Block 0014 [ 52]: e48306bb379a9526 -Block 0014 [ 53]: a6ffe75f5fb984fb -Block 0014 [ 54]: 729613e8c57feda1 -Block 0014 [ 55]: 12db6c406f5109a1 -Block 0014 [ 56]: 82802a8a7d811b58 -Block 0014 [ 57]: 3d4608d23971ec28 -Block 0014 [ 58]: ddebf41cb589e3d0 -Block 0014 [ 59]: a42eeb040b316ab4 -Block 0014 [ 60]: 3d4c8ddcdc91e2aa -Block 0014 [ 61]: 5dfc6656546c3b7b -Block 0014 [ 62]: 9d3044336e86a500 -Block 0014 [ 63]: 28b157087b452bd4 -Block 0014 [ 64]: d1070174c8a7a390 -Block 0014 [ 65]: 2cdffe736e143896 -Block 0014 [ 66]: e6ce15c80ba25385 -Block 0014 [ 67]: 417c84a7716d6e88 -Block 0014 [ 68]: f23a783da3ee4d2d -Block 0014 [ 69]: f537e7ce5c1c0c39 -Block 0014 [ 70]: f46211b54393895e -Block 0014 [ 71]: 8c1ff4607c78b5ff -Block 0014 [ 72]: 7a21a28042361b41 -Block 0014 [ 73]: d9d58f1b9ecc30de -Block 0014 [ 74]: 9a14fdb7b925ca4e -Block 0014 [ 75]: d6f7e86f1f500aa7 -Block 0014 [ 76]: c67fcb17f8ea4dd5 -Block 0014 [ 77]: 5f8d1c92691b14f1 -Block 0014 [ 78]: 104380e8c6d970cc -Block 0014 [ 79]: 7e353764f8c4619e -Block 0014 [ 80]: 030a672223596dcf -Block 0014 [ 81]: 6a78a93e7ebb6a14 -Block 0014 [ 82]: ca4c3cd24c3241d4 -Block 0014 [ 83]: ffb2874333097bf1 -Block 0014 [ 84]: 05316d934e1b5aab -Block 0014 [ 85]: 6ea2923030b2957b -Block 0014 [ 86]: 58be8db0cfb34d06 -Block 0014 [ 87]: 817cd34fcb68b398 -Block 0014 [ 88]: 6d25bb5ce9050af7 -Block 0014 [ 89]: 4f9fafe3d7836fc6 -Block 0014 [ 90]: 6b7a93aa1cbda794 -Block 0014 [ 91]: 12ae5bba84ff7fd9 -Block 0014 [ 92]: 1218cc6230a5eb3b -Block 0014 [ 93]: 4bbe6b14f7016cef -Block 0014 [ 94]: 712c225c222af1ed -Block 0014 [ 95]: eb274453bb34e6b7 -Block 0014 [ 96]: 5281165a73e35393 -Block 0014 [ 97]: a94e6d7fa4fa9d4b -Block 0014 [ 98]: cdac43d087fbf972 -Block 0014 [ 99]: c355f65033fff80c -Block 0014 [100]: 468d2835f99af1df -Block 0014 [101]: 97e10c620d78e48e -Block 0014 [102]: 4f7b455aa232f45a -Block 0014 [103]: 5642a41b8ba9ee5b -Block 0014 [104]: faab295a130f9450 -Block 0014 [105]: 354f050566475e75 -Block 0014 [106]: 1c147cc5765a61a5 -Block 0014 [107]: 546efd3bc03ae530 -Block 0014 [108]: 60d4770b9f8a3f15 -Block 0014 [109]: 4255516387bcc8cf -Block 0014 [110]: a2790cee31f12d9e -Block 0014 [111]: a61eb9ad582e94f2 -Block 0014 [112]: 2eef0642ebdb8b8e -Block 0014 [113]: 0dc8d04ae9e3a9c6 -Block 0014 [114]: b7d4a52e7df1cb7a -Block 0014 [115]: cb0cd12cbd577028 -Block 0014 [116]: fe77a376f1b80f27 -Block 0014 [117]: 55278752a92407f0 -Block 0014 [118]: 9d0c1acd148e5559 -Block 0014 [119]: 340d1b249a9f55e5 -Block 0014 [120]: e6b7fe56fb8beb34 -Block 0014 [121]: bfd595920d4c4730 -Block 0014 [122]: 53b698d6f41e0cdd -Block 0014 [123]: 25fd2b8c6fe7f60a -Block 0014 [124]: fcea31c1417d4d81 -Block 0014 [125]: 24d019132ba89b33 -Block 0014 [126]: 2c948d81f3196e46 -Block 0014 [127]: 5c9666b2e5bc5342 -Block 0015 [ 0]: b7a4c2b9a0491aa5 -Block 0015 [ 1]: d574fd14cfdceaa2 -Block 0015 [ 2]: 161e82ce52847ee9 -Block 0015 [ 3]: 87235a1ff06b32e3 -Block 0015 [ 4]: 25a15747451e13fb -Block 0015 [ 5]: 6fa0f15caf9a7b92 -Block 0015 [ 6]: bca7275912ca1bbe -Block 0015 [ 7]: 007874cae255dc7a -Block 0015 [ 8]: 1c2fc30cbbe3d6b0 -Block 0015 [ 9]: 037bf8fc3ccc60cf -Block 0015 [ 10]: c632e67a7898f97f -Block 0015 [ 11]: 1dbb324de0847142 -Block 0015 [ 12]: a22b1b5771e2fbc8 -Block 0015 [ 13]: 951e518ea73e1b70 -Block 0015 [ 14]: f65e911962b66a90 -Block 0015 [ 15]: 50ea5c8c71cc78c9 -Block 0015 [ 16]: 070b252030059571 -Block 0015 [ 17]: da2472f16b32c9d1 -Block 0015 [ 18]: ac991222ab1c212a -Block 0015 [ 19]: d201f392decf93bf -Block 0015 [ 20]: e4110edc7738c123 -Block 0015 [ 21]: 36c2faaffb2119a0 -Block 0015 [ 22]: d1243bf8984c942a -Block 0015 [ 23]: 380d70ebee5c486b -Block 0015 [ 24]: 4095da46a98e2e18 -Block 0015 [ 25]: f2d74db9726fcf0a -Block 0015 [ 26]: 48a1e0775c37687c -Block 0015 [ 27]: cb8f3d9e25f552f1 -Block 0015 [ 28]: 0595754dcb15d8c2 -Block 0015 [ 29]: c2bfae8c0074c656 -Block 0015 [ 30]: ce3a27a49064fd5e -Block 0015 [ 31]: bd9badeb87e71305 -Block 0015 [ 32]: 1332e5808a07898f -Block 0015 [ 33]: 447fc211923c7aae -Block 0015 [ 34]: 1b59d811f5a4174a -Block 0015 [ 35]: 9d77b466014e9c29 -Block 0015 [ 36]: abeeb15d32d4f5b0 -Block 0015 [ 37]: ed14c5bef6f13c5c -Block 0015 [ 38]: aebe3967f70094b2 -Block 0015 [ 39]: 5f9ed7861a69e3bd -Block 0015 [ 40]: b322fb95fae25c6b -Block 0015 [ 41]: 0590b396ab8b5077 -Block 0015 [ 42]: b9321d42b1b1a985 -Block 0015 [ 43]: f35f227bd94dd2f4 -Block 0015 [ 44]: caec578bdf1f9b9d -Block 0015 [ 45]: 25e0ba5c01a2c4bc -Block 0015 [ 46]: fc07695214589266 -Block 0015 [ 47]: 54503ba957c594ea -Block 0015 [ 48]: eaabac32c678ccad -Block 0015 [ 49]: 21175b4197624e82 -Block 0015 [ 50]: 0cebeb3aa5f3bbcb -Block 0015 [ 51]: c008177cfbfb0d60 -Block 0015 [ 52]: 2f801d1502ff2f12 -Block 0015 [ 53]: 7fcd684c565db3f6 -Block 0015 [ 54]: 62ff2ec38af1cafd -Block 0015 [ 55]: 914667196dd9d450 -Block 0015 [ 56]: 972932ff5be835e9 -Block 0015 [ 57]: 23a8368787a7335c -Block 0015 [ 58]: b2cae148e1b122c0 -Block 0015 [ 59]: 199b383227c05f08 -Block 0015 [ 60]: 1cb16ee897019269 -Block 0015 [ 61]: 510e0d439341c00d -Block 0015 [ 62]: 35cf3ac76d96edb3 -Block 0015 [ 63]: d940abb75cfa43cd -Block 0015 [ 64]: 3c4b3944ab11c757 -Block 0015 [ 65]: 4d9ccb418c25ad94 -Block 0015 [ 66]: 91c86a252e663075 -Block 0015 [ 67]: cb49238e4e128b91 -Block 0015 [ 68]: 6f11423978bed4e7 -Block 0015 [ 69]: 753573f75865542c -Block 0015 [ 70]: 650c04ea734b4449 -Block 0015 [ 71]: 880ebf2c16710b74 -Block 0015 [ 72]: 05fc3180f4138190 -Block 0015 [ 73]: ed721684f7dceb37 -Block 0015 [ 74]: e31f19710f7b0fe4 -Block 0015 [ 75]: 0463bb78656fae47 -Block 0015 [ 76]: 074f9a2583ca00e9 -Block 0015 [ 77]: 2f13e8db7be5969a -Block 0015 [ 78]: 9b5b5730a2f128b3 -Block 0015 [ 79]: f7cd36dc5c92e817 -Block 0015 [ 80]: f820cd395a7a86ae -Block 0015 [ 81]: 123f8d7cf1618e07 -Block 0015 [ 82]: 152f4e50e44750c7 -Block 0015 [ 83]: ad4c70516d41bab9 -Block 0015 [ 84]: 8bcb61e869a0807e -Block 0015 [ 85]: 9755cf2f6719e65f -Block 0015 [ 86]: c2c6ba4f970cb4ef -Block 0015 [ 87]: 457911ad86c1abc6 -Block 0015 [ 88]: 578a53b51ce1efcd -Block 0015 [ 89]: f6320caff8a0504b -Block 0015 [ 90]: 83ca5981239afa37 -Block 0015 [ 91]: 70c661c67ab92780 -Block 0015 [ 92]: 10bcfbdac8f01e97 -Block 0015 [ 93]: 94bdbd2609891909 -Block 0015 [ 94]: 1bb65f7b193d8c2f -Block 0015 [ 95]: f31366a301363c4f -Block 0015 [ 96]: 99fec0db195ee485 -Block 0015 [ 97]: ed4bc8f8d3ba4536 -Block 0015 [ 98]: 0a70086003a26263 -Block 0015 [ 99]: 345032952fe4effc -Block 0015 [100]: 2bb2e1a44c1f1326 -Block 0015 [101]: 21a33eddbefcbc66 -Block 0015 [102]: bb19b421edb329fa -Block 0015 [103]: 543c1de6fe03d61f -Block 0015 [104]: 8aed84a2fecd94d6 -Block 0015 [105]: b35b89557851b663 -Block 0015 [106]: f6a7be0e250ef42f -Block 0015 [107]: 3a290088a027faf7 -Block 0015 [108]: bce61f09e1310a04 -Block 0015 [109]: 0333886001acdb36 -Block 0015 [110]: 9d74d89762647905 -Block 0015 [111]: f49619828e0119bf -Block 0015 [112]: b7e584f437a3b086 -Block 0015 [113]: 252e2d8ecd0bd16d -Block 0015 [114]: 53ee0c9765660436 -Block 0015 [115]: 91f68f6a9a1b0bdb -Block 0015 [116]: c632c4e10c36b1b6 -Block 0015 [117]: 33145dd6a602a6b0 -Block 0015 [118]: 2d587480bdb222a3 -Block 0015 [119]: f0fd639a4880f0c3 -Block 0015 [120]: 211d17b5b475ef02 -Block 0015 [121]: f1fcfd14a52db0f6 -Block 0015 [122]: 064389ed71e2ef25 -Block 0015 [123]: c2acdfbb258af29a -Block 0015 [124]: dc814aa34930fc48 -Block 0015 [125]: 30ba919b66d5ddf3 -Block 0015 [126]: 1b3834a139ab499a -Block 0015 [127]: d5e674d6693bcd45 -Block 0016 [ 0]: 8f53985b3a68410e -Block 0016 [ 1]: f55650961898842f -Block 0016 [ 2]: 037efaa1cd23a098 -Block 0016 [ 3]: 3a31cf1b76c2758c -Block 0016 [ 4]: f4199b180eac0136 -Block 0016 [ 5]: 300b003da6fcbaf8 -Block 0016 [ 6]: f609345ed3053222 -Block 0016 [ 7]: 62b9a7bf80c4dd81 -Block 0016 [ 8]: 04f7fb1c97f94a19 -Block 0016 [ 9]: 20b4c7dcec025e7c -Block 0016 [ 10]: 86823ef3e716e64a -Block 0016 [ 11]: cc7b74f62ba0184b -Block 0016 [ 12]: b9346d50cf2e7038 -Block 0016 [ 13]: 49d8cc875f611ddf -Block 0016 [ 14]: 47e3d6bca96310b2 -Block 0016 [ 15]: 2b648844a3fc609a -Block 0016 [ 16]: d4324fd7f2bc2e0b -Block 0016 [ 17]: 9362f80e1d3fdc2b -Block 0016 [ 18]: 49225d97af47012d -Block 0016 [ 19]: 8035ab307fb284dd -Block 0016 [ 20]: 177fe4ed6ed816b5 -Block 0016 [ 21]: 91c26e2152032480 -Block 0016 [ 22]: 30604656e18cc814 -Block 0016 [ 23]: 70437cfb1f32fb43 -Block 0016 [ 24]: d1036df63cc6eee4 -Block 0016 [ 25]: 5dee0b34fa2c7707 -Block 0016 [ 26]: da74b65827b46a81 -Block 0016 [ 27]: 84e911553294f034 -Block 0016 [ 28]: d279a6a1e4904a83 -Block 0016 [ 29]: 8688e6979c347b06 -Block 0016 [ 30]: 740f20573f3de341 -Block 0016 [ 31]: d81c19459351f118 -Block 0016 [ 32]: 8f3262e1b89a27fd -Block 0016 [ 33]: efbef386858e969a -Block 0016 [ 34]: 48d49036dd2a63cc -Block 0016 [ 35]: 51a53f1cd99c239d -Block 0016 [ 36]: 69f02d56b69b080c -Block 0016 [ 37]: b58cdc35836d7e6a -Block 0016 [ 38]: b64765b6745af0db -Block 0016 [ 39]: d0cffdc5cd0ddd71 -Block 0016 [ 40]: d026cf29b9eadaec -Block 0016 [ 41]: 190259edbc0e09fb -Block 0016 [ 42]: fea21cb0734e621f -Block 0016 [ 43]: 3b8c48529162eca2 -Block 0016 [ 44]: 53ec43dd984b9ad2 -Block 0016 [ 45]: 7274f4839297fcc2 -Block 0016 [ 46]: 14d7275914f4a84c -Block 0016 [ 47]: cdff249b4bae7c12 -Block 0016 [ 48]: b32a9a4b48d6f22f -Block 0016 [ 49]: 0320bd7e7f48b4f4 -Block 0016 [ 50]: 42be9ca3da80c6fa -Block 0016 [ 51]: 358bd7e3eb8fada9 -Block 0016 [ 52]: dfe1dbbfca140598 -Block 0016 [ 53]: 1b4db106a75053c1 -Block 0016 [ 54]: 0b91f05e6625f711 -Block 0016 [ 55]: 1001ad2ee30a9d82 -Block 0016 [ 56]: 740b036b5748bea0 -Block 0016 [ 57]: 3168f06e761fb765 -Block 0016 [ 58]: 71d10306a2fe7973 -Block 0016 [ 59]: 1faa34f320f87936 -Block 0016 [ 60]: d91db435304a17a5 -Block 0016 [ 61]: 30430ec5d6f3ad2a -Block 0016 [ 62]: cb197690414e41b6 -Block 0016 [ 63]: f6779e44ae25c2d7 -Block 0016 [ 64]: 6b94597b50f594af -Block 0016 [ 65]: 075a280984aed80a -Block 0016 [ 66]: d54a50a999345ae3 -Block 0016 [ 67]: 2caab9d8cfd6d3e2 -Block 0016 [ 68]: 7851c907c69feb69 -Block 0016 [ 69]: 5ca2e8965cd0c96c -Block 0016 [ 70]: 28ab1227b13da504 -Block 0016 [ 71]: 686f14d57531b14b -Block 0016 [ 72]: 3b5a11c818a1ec14 -Block 0016 [ 73]: 5a4f6b4be61809aa -Block 0016 [ 74]: ce900ccf21eededc -Block 0016 [ 75]: d0d2187be91e67a5 -Block 0016 [ 76]: a92d1b14da7b0101 -Block 0016 [ 77]: 71d2ac9a9bfc3eab -Block 0016 [ 78]: 3c7857f37e5fbd14 -Block 0016 [ 79]: 1c64281a444f792f -Block 0016 [ 80]: b999c6b9f7738096 -Block 0016 [ 81]: db1e1182630f00f6 -Block 0016 [ 82]: 0807b0bd2f37fa78 -Block 0016 [ 83]: e9f307ad3c4e8b74 -Block 0016 [ 84]: 79c841933e70c1da -Block 0016 [ 85]: cb663333c394a92a -Block 0016 [ 86]: 13c6ab3371e87b02 -Block 0016 [ 87]: 047fa349cd71f72e -Block 0016 [ 88]: 6fd668ad1c07ee9d -Block 0016 [ 89]: 890e7546afcd50f3 -Block 0016 [ 90]: 8fd5e4eb7d62ece7 -Block 0016 [ 91]: fe3efd3fba7302ed -Block 0016 [ 92]: d0dd2f8d2a385e85 -Block 0016 [ 93]: 5b6271669fae3e0a -Block 0016 [ 94]: d83477ae521cb0cd -Block 0016 [ 95]: 032ea7a424669708 -Block 0016 [ 96]: a74455ce63af6f96 -Block 0016 [ 97]: f622454de29f608b -Block 0016 [ 98]: 237f28a1d7382575 -Block 0016 [ 99]: f38e224b5ab4c811 -Block 0016 [100]: 2e28cbd870f74ad5 -Block 0016 [101]: 9b02a754a53eea78 -Block 0016 [102]: 64ef1fa6609e77de -Block 0016 [103]: a9a49c283d2b79eb -Block 0016 [104]: 628ff70e0dcb9620 -Block 0016 [105]: e5eab5e455302769 -Block 0016 [106]: be2ead710a9b85f7 -Block 0016 [107]: 4139690693c5d1de -Block 0016 [108]: cb79d6351ff25123 -Block 0016 [109]: 766767dd95ef924a -Block 0016 [110]: 7a57e4a083f964f3 -Block 0016 [111]: f5a7eff23abff0e6 -Block 0016 [112]: fa62e8e8b38623f9 -Block 0016 [113]: aa3edb47ecdc0377 -Block 0016 [114]: cfcf56fd674a3d2d -Block 0016 [115]: 3cdd8c5d983a1bb4 -Block 0016 [116]: fb6f6bceb5db5b26 -Block 0016 [117]: 89fd727b53ec9e75 -Block 0016 [118]: 97600bafacfb83ef -Block 0016 [119]: 8b094ea63455850c -Block 0016 [120]: 4ba706a569460f60 -Block 0016 [121]: f3f4781fabbc676f -Block 0016 [122]: 5c5e73cc56d1ce93 -Block 0016 [123]: 2ea6a7856cc27120 -Block 0016 [124]: 9cb33d05ffd27f28 -Block 0016 [125]: 79796b487462562e -Block 0016 [126]: 30c5bd9655219145 -Block 0016 [127]: b994aa85d73dd810 -Block 0017 [ 0]: 25af99c7dd2c4372 -Block 0017 [ 1]: 9737394118f299bb -Block 0017 [ 2]: d2de9ee44efcd374 -Block 0017 [ 3]: fc03033c2fdc08f0 -Block 0017 [ 4]: 3f880894b78aed28 -Block 0017 [ 5]: 6c8a9e4ef84e12eb -Block 0017 [ 6]: bbfda7a204c749ae -Block 0017 [ 7]: 5bd6718dc48c323b -Block 0017 [ 8]: b90c762a037aeae9 -Block 0017 [ 9]: 649d8a54f608176c -Block 0017 [ 10]: 786afe00b006a485 -Block 0017 [ 11]: e37a432bc2cc9822 -Block 0017 [ 12]: de19379656716c29 -Block 0017 [ 13]: fcf6fbc0df6c2616 -Block 0017 [ 14]: a5707ebe5c43ce27 -Block 0017 [ 15]: 0022eb27e8a28351 -Block 0017 [ 16]: 8eba1f29bb9649e9 -Block 0017 [ 17]: a14ede529e77c948 -Block 0017 [ 18]: 679d0fd464f5a7c1 -Block 0017 [ 19]: 1d5e242fe07d4499 -Block 0017 [ 20]: e5d9ecb94d96426f -Block 0017 [ 21]: b55c342da4c92a45 -Block 0017 [ 22]: 46f6ffbe914fa536 -Block 0017 [ 23]: 8831b50a46c6b9fa -Block 0017 [ 24]: 98d34ad0e739e4d9 -Block 0017 [ 25]: 34c995923bd2c3c1 -Block 0017 [ 26]: 42cf969aab5942c1 -Block 0017 [ 27]: c9b437a842d875b3 -Block 0017 [ 28]: 5925675213537e33 -Block 0017 [ 29]: d46c58bc487a34f6 -Block 0017 [ 30]: 806a4619dbfc03dd -Block 0017 [ 31]: b45295959812bcec -Block 0017 [ 32]: aebc1f1371e2fc47 -Block 0017 [ 33]: f09f1a1c3121e7cd -Block 0017 [ 34]: 4d1d9a11dcae8b67 -Block 0017 [ 35]: f38a9759bc5d17c6 -Block 0017 [ 36]: 2e20740f5524dae3 -Block 0017 [ 37]: 40f1d3e4f71041db -Block 0017 [ 38]: 844a27fd35e7da66 -Block 0017 [ 39]: b4b854cae05e9e9a -Block 0017 [ 40]: 5e6964c38ac50871 -Block 0017 [ 41]: 3c18498deb7d982e -Block 0017 [ 42]: 647c7a8c145356a1 -Block 0017 [ 43]: d737b5773a76b636 -Block 0017 [ 44]: 48037c19a592c44d -Block 0017 [ 45]: acc24bb4b271d775 -Block 0017 [ 46]: 393897168ab1a9e2 -Block 0017 [ 47]: 06f964d7bea429f1 -Block 0017 [ 48]: bf04c3f8df53259d -Block 0017 [ 49]: 3149fc5f1f43994e -Block 0017 [ 50]: 063319bf41479907 -Block 0017 [ 51]: 1854281df4864ba9 -Block 0017 [ 52]: 92edcdb4c263a03d -Block 0017 [ 53]: d780b3bd4caae765 -Block 0017 [ 54]: 02b5d0ebf0cda39d -Block 0017 [ 55]: a0f5a5211ca3bd07 -Block 0017 [ 56]: 5636022ed78cfd97 -Block 0017 [ 57]: 1cce86221184e63a -Block 0017 [ 58]: 6a012fa4ac7d9313 -Block 0017 [ 59]: 93f395e140a8fbe4 -Block 0017 [ 60]: 985ecc071322bcf3 -Block 0017 [ 61]: 1ea42f6dec2fc89e -Block 0017 [ 62]: 3ec7da55e6f3650b -Block 0017 [ 63]: 1617261e0b1e885f -Block 0017 [ 64]: 27ce65eca8e2c7ec -Block 0017 [ 65]: 5e989683b826cca5 -Block 0017 [ 66]: 1095accf790c67e6 -Block 0017 [ 67]: 092884b7e068124e -Block 0017 [ 68]: 3a9e2a925ea19187 -Block 0017 [ 69]: c6962ab8187140c5 -Block 0017 [ 70]: 9edd8afc314c0744 -Block 0017 [ 71]: cd9cea440f39fa0b -Block 0017 [ 72]: adc2e65d1d5f4612 -Block 0017 [ 73]: 8d271b9d779bd3c1 -Block 0017 [ 74]: 8d98f39f07ed40d5 -Block 0017 [ 75]: 9a350daa5e1185bc -Block 0017 [ 76]: a50155990d517040 -Block 0017 [ 77]: 9737cb03db154e43 -Block 0017 [ 78]: 5b62dbdb43a7ae36 -Block 0017 [ 79]: 718dcab45caefd1d -Block 0017 [ 80]: 198ce38e06e84855 -Block 0017 [ 81]: a334190d64a3c358 -Block 0017 [ 82]: 9324456d4c2eebc5 -Block 0017 [ 83]: ac6677767b0e8589 -Block 0017 [ 84]: 99fcdac332ca73cb -Block 0017 [ 85]: ccc87d5cbd040dd9 -Block 0017 [ 86]: 7ba741ad5e014fdc -Block 0017 [ 87]: 04b98a5dbb9858d3 -Block 0017 [ 88]: 48f83e1d55782a3e -Block 0017 [ 89]: 7fdc976538a9605d -Block 0017 [ 90]: 34696b986f3276a1 -Block 0017 [ 91]: d2e5952e0e8c1513 -Block 0017 [ 92]: d3d6f03d384bff58 -Block 0017 [ 93]: ea50faff9497e736 -Block 0017 [ 94]: 923567f0b71393cb -Block 0017 [ 95]: 999b7be894d806fa -Block 0017 [ 96]: bff84f0b93f93adb -Block 0017 [ 97]: 36550f9621d9e1d2 -Block 0017 [ 98]: 98b3bd27313db1ee -Block 0017 [ 99]: a0fd0d843f1d9c2a -Block 0017 [100]: c2af36b6ac1bff35 -Block 0017 [101]: cf1f5dd60b32741c -Block 0017 [102]: a73467edf0046e40 -Block 0017 [103]: bc88e01dc0b3ead3 -Block 0017 [104]: 76c60f22353f13da -Block 0017 [105]: b4426004fec916fc -Block 0017 [106]: 515940091ded755a -Block 0017 [107]: e2e1105fc6ce1c1f -Block 0017 [108]: b97b4018796ee38b -Block 0017 [109]: a24f467b8b444546 -Block 0017 [110]: 82ae89263b2f72b9 -Block 0017 [111]: c88e67246622bf95 -Block 0017 [112]: df50ff12b0d1b15b -Block 0017 [113]: 51bbb2e9a6005550 -Block 0017 [114]: 91cb844ea94a3792 -Block 0017 [115]: bbc07e5ad7e82009 -Block 0017 [116]: 60c62d377e5be69a -Block 0017 [117]: 4c56a5431c2b3e76 -Block 0017 [118]: 193324e72943dc20 -Block 0017 [119]: 25441dced351b789 -Block 0017 [120]: 040d53f6f1512c9d -Block 0017 [121]: 130e48953283e7d1 -Block 0017 [122]: 2d326e978ff8130a -Block 0017 [123]: 2000c765fc63f72f -Block 0017 [124]: ccd4bc7dbd218e40 -Block 0017 [125]: 163c65d57d0ec8d8 -Block 0017 [126]: 4ec3e83cf091cb11 -Block 0017 [127]: d0c37c0476196abf -Block 0018 [ 0]: cc16b40ad5747e4e -Block 0018 [ 1]: fc9cea26229979aa -Block 0018 [ 2]: 71c2ce72e2969701 -Block 0018 [ 3]: 791cbfcbc3dcbeac -Block 0018 [ 4]: 9f87de4eb6bd1c78 -Block 0018 [ 5]: b2299523780f6e83 -Block 0018 [ 6]: 3cab22b2571bb002 -Block 0018 [ 7]: e84bc808526ba1c4 -Block 0018 [ 8]: 1e6da5a620d1763a -Block 0018 [ 9]: d43041a9052354e7 -Block 0018 [ 10]: 2adfd5010c727d11 -Block 0018 [ 11]: 07d408bc985c47fc -Block 0018 [ 12]: cb0735fa154efb20 -Block 0018 [ 13]: 5d9cd38a29c6c593 -Block 0018 [ 14]: e6acfe5ea8e9d8de -Block 0018 [ 15]: 93fbaf947ed59bc3 -Block 0018 [ 16]: 8bcd692f1b47b6a6 -Block 0018 [ 17]: 9f1234cb7653eb74 -Block 0018 [ 18]: cb83ea20a50f3f7e -Block 0018 [ 19]: 00f9c746d11f2227 -Block 0018 [ 20]: f7402e994a250230 -Block 0018 [ 21]: 982c78f9d63107c2 -Block 0018 [ 22]: a34d035c8788a81e -Block 0018 [ 23]: fe5e3d1993d4e860 -Block 0018 [ 24]: 1ebf3aef0c6b10bf -Block 0018 [ 25]: f28b8fff6ccc27a4 -Block 0018 [ 26]: d2b59050aff341c5 -Block 0018 [ 27]: 5a820ee8a39572fe -Block 0018 [ 28]: 6f963e89e1c54e52 -Block 0018 [ 29]: fc1b178e6b97e4ac -Block 0018 [ 30]: 7e9a9c313e4efb8a -Block 0018 [ 31]: 9d471890801a8ab3 -Block 0018 [ 32]: 5f7e0de0ae64c1db -Block 0018 [ 33]: 1ec697d242aa51f5 -Block 0018 [ 34]: 7b8e0b9d219a2029 -Block 0018 [ 35]: 8d08d76f52bdaa6e -Block 0018 [ 36]: 66b0c4a5cc40d799 -Block 0018 [ 37]: 942c84e05d97fffa -Block 0018 [ 38]: bbb862ba00327b6d -Block 0018 [ 39]: bef2092925db17f5 -Block 0018 [ 40]: 4e31cd9dfdbae400 -Block 0018 [ 41]: 46e528452ba8856e -Block 0018 [ 42]: 35d3f0910e752f79 -Block 0018 [ 43]: 8e47a91e5c44463f -Block 0018 [ 44]: 96a6455e5072b431 -Block 0018 [ 45]: 8b64f956cd48dc1b -Block 0018 [ 46]: 12e0ddef27aafdfe -Block 0018 [ 47]: 82da7ffbc3218c92 -Block 0018 [ 48]: 23390a781bd0644c -Block 0018 [ 49]: 52e2ed3f08f461c6 -Block 0018 [ 50]: 97d91cd63f28c587 -Block 0018 [ 51]: bc6a807a9e196641 -Block 0018 [ 52]: c357ff64c15aa403 -Block 0018 [ 53]: e6f47d41087b1758 -Block 0018 [ 54]: 7fd24e9a098fe9ea -Block 0018 [ 55]: eb58ad3c5f2ddb88 -Block 0018 [ 56]: d886a29c6469e51e -Block 0018 [ 57]: ae13ef46d94ca5dd -Block 0018 [ 58]: f0227a75ed41f619 -Block 0018 [ 59]: f726ec8a5fb32899 -Block 0018 [ 60]: c2cb9cb1c7d6b1dc -Block 0018 [ 61]: 94e5e8d5c146ccd1 -Block 0018 [ 62]: a0914d9445df8d98 -Block 0018 [ 63]: baf4a01d25ce6f40 -Block 0018 [ 64]: 972694d1ba5d3873 -Block 0018 [ 65]: 28f525a4ae211560 -Block 0018 [ 66]: a60d9477eae5e7b6 -Block 0018 [ 67]: cedfb2bd66a74fea -Block 0018 [ 68]: cf2a8795c497b516 -Block 0018 [ 69]: e311460034b81676 -Block 0018 [ 70]: 6101999febaa6a08 -Block 0018 [ 71]: 0f414973e6b7ddd4 -Block 0018 [ 72]: 26eddd7b3b23e908 -Block 0018 [ 73]: 814c7d4f61874c5d -Block 0018 [ 74]: 066f27c905b2af02 -Block 0018 [ 75]: 6af0b152e8bf5b4a -Block 0018 [ 76]: 2b83b61d77577710 -Block 0018 [ 77]: 772757c567f0994e -Block 0018 [ 78]: 889bac540251180e -Block 0018 [ 79]: 5390db775c6a30a1 -Block 0018 [ 80]: f0601f43f63551b8 -Block 0018 [ 81]: 0fe587bca1b1370e -Block 0018 [ 82]: be51925e9397cb1f -Block 0018 [ 83]: 684159088b026646 -Block 0018 [ 84]: 83947593200cc262 -Block 0018 [ 85]: 6cff3fef11aaf653 -Block 0018 [ 86]: a0a529421d6a0530 -Block 0018 [ 87]: fc223917e2488077 -Block 0018 [ 88]: e920da644e7d73cd -Block 0018 [ 89]: 8d7df56be3c7fcd0 -Block 0018 [ 90]: 572aaa5457003a1f -Block 0018 [ 91]: a7f3c24f4ccbf913 -Block 0018 [ 92]: 62eb3807aa42d76d -Block 0018 [ 93]: 74d20a064449b36c -Block 0018 [ 94]: 7f3d004af82674eb -Block 0018 [ 95]: e7aa407b9f2eaffe -Block 0018 [ 96]: 05bde0b72833ede7 -Block 0018 [ 97]: 9a529018d06b1a9c -Block 0018 [ 98]: f0556a4f08155dab -Block 0018 [ 99]: 0317465138ab2d53 -Block 0018 [100]: f7fc8b6426c8adbd -Block 0018 [101]: 08769ef8a31b39a0 -Block 0018 [102]: 80b95e7ed0f363e5 -Block 0018 [103]: 1d2325b8911f1fd3 -Block 0018 [104]: fedeb4b73b6da294 -Block 0018 [105]: 7c9d104827324f47 -Block 0018 [106]: 9d9c711b4934c8c8 -Block 0018 [107]: 9092d112bd03fb13 -Block 0018 [108]: 01d8fe13c4484a3a -Block 0018 [109]: dd422ca0ce650b57 -Block 0018 [110]: 144c0dfb1afcc139 -Block 0018 [111]: 1c7b4586ca53a390 -Block 0018 [112]: 6c29fc6c25d93b1e -Block 0018 [113]: 1922cf3c0eb0eae1 -Block 0018 [114]: 692a594c53cbfe12 -Block 0018 [115]: a17a0f7581201eea -Block 0018 [116]: 8e3a0fab7f26a4a7 -Block 0018 [117]: 6e81606212a24250 -Block 0018 [118]: 46f94f333f1b0c80 -Block 0018 [119]: 8fb29cf58b02f7dc -Block 0018 [120]: 751c4d607d662b1f -Block 0018 [121]: 011b138878fd82f2 -Block 0018 [122]: ca6cda756a32627e -Block 0018 [123]: 18c16dd1426c836e -Block 0018 [124]: 1553aab1ec673729 -Block 0018 [125]: 05277de65fa287a5 -Block 0018 [126]: 7c4752344b98dbfa -Block 0018 [127]: ca946d048696b8d2 -Block 0019 [ 0]: f1e7830fd25fae5c -Block 0019 [ 1]: e722f627ee827cc2 -Block 0019 [ 2]: dbdda4176637645f -Block 0019 [ 3]: fed075b832e6d60d -Block 0019 [ 4]: 31b4a8232cf0f6d1 -Block 0019 [ 5]: 995419324435bafe -Block 0019 [ 6]: 7f034194b003a341 -Block 0019 [ 7]: e32c00e524f3b869 -Block 0019 [ 8]: 9221dd1d02dd673c -Block 0019 [ 9]: 1fe96cc1a3e8b14a -Block 0019 [ 10]: e13fd9248af85745 -Block 0019 [ 11]: 6f6abd3d84d25afd -Block 0019 [ 12]: 6b53d7b291973d82 -Block 0019 [ 13]: dfd270032800df30 -Block 0019 [ 14]: 51b8b57c7af83dc3 -Block 0019 [ 15]: f1a2060eff3d4026 -Block 0019 [ 16]: f04338a9d4813cb5 -Block 0019 [ 17]: 8dab994cf44555a1 -Block 0019 [ 18]: 0016c2f1d822e72b -Block 0019 [ 19]: 03611fcb09c2844a -Block 0019 [ 20]: 47931e1325d7bfa2 -Block 0019 [ 21]: 6e2435a2f5877a18 -Block 0019 [ 22]: 17a14f7a04c53a6c -Block 0019 [ 23]: e2b9ac28f13fdb09 -Block 0019 [ 24]: b02fbc04a68ef177 -Block 0019 [ 25]: b68dbee4c144f618 -Block 0019 [ 26]: 0b1bb54e3a825b1f -Block 0019 [ 27]: 5e8cb76f0a913e10 -Block 0019 [ 28]: 520a35dbde052eec -Block 0019 [ 29]: 7e5f3cdec8f738f0 -Block 0019 [ 30]: f0f3b74b494d30da -Block 0019 [ 31]: 6da6d4492f5d5fd6 -Block 0019 [ 32]: 4569a5b7c1000bc4 -Block 0019 [ 33]: 6a98b609ae531d7f -Block 0019 [ 34]: 5f3a721f2348256e -Block 0019 [ 35]: 174e5479fb6e0de4 -Block 0019 [ 36]: 3f6b47e56470492d -Block 0019 [ 37]: 5e1f6f163f69b6be -Block 0019 [ 38]: f6e998276b3b2e4c -Block 0019 [ 39]: bcfa0808cd732980 -Block 0019 [ 40]: 41664d9e8bd9ab30 -Block 0019 [ 41]: a88910d2af9784fe -Block 0019 [ 42]: 0e58fd96c2b966dd -Block 0019 [ 43]: 0975037f9bebef17 -Block 0019 [ 44]: fe17294a640aaf22 -Block 0019 [ 45]: d82e4987ba7c5899 -Block 0019 [ 46]: 4f5875e05025ed65 -Block 0019 [ 47]: f47b5bc7d131c365 -Block 0019 [ 48]: 88949148f6381880 -Block 0019 [ 49]: 49790168c570dbc6 -Block 0019 [ 50]: 91179f41bc61d381 -Block 0019 [ 51]: 964e6647b2240b9d -Block 0019 [ 52]: 469a2ca044a46f99 -Block 0019 [ 53]: 775719640dd3ea02 -Block 0019 [ 54]: c326dd47988e09e8 -Block 0019 [ 55]: 4b89a1a069646be5 -Block 0019 [ 56]: dbdc5efe88ee654f -Block 0019 [ 57]: a591fe65df404742 -Block 0019 [ 58]: e9e4ed0c20f77666 -Block 0019 [ 59]: 914d772c94508d51 -Block 0019 [ 60]: 73799663310c1cf8 -Block 0019 [ 61]: 004529e670391934 -Block 0019 [ 62]: 96298c287e11af1f -Block 0019 [ 63]: 4764493038171a0c -Block 0019 [ 64]: 99ae7d71ebaf7e2d -Block 0019 [ 65]: d64eb6712f31477c -Block 0019 [ 66]: 33006d2453c52a29 -Block 0019 [ 67]: f456ea4e8dffa076 -Block 0019 [ 68]: f02b73dab38ddb48 -Block 0019 [ 69]: 89a4f3e96b085ec1 -Block 0019 [ 70]: 09fb004b8f42a6f7 -Block 0019 [ 71]: d021ef6317f882d8 -Block 0019 [ 72]: 290f3c3c926f7b1c -Block 0019 [ 73]: dabdfda18f650705 -Block 0019 [ 74]: 08a5e3a99446a79f -Block 0019 [ 75]: 53f8f9da1dddbd37 -Block 0019 [ 76]: d74f4c4c9a5f1e24 -Block 0019 [ 77]: 873af7345e779b6e -Block 0019 [ 78]: e5700386448f5d64 -Block 0019 [ 79]: 8c8bf0c2e92f6e8c -Block 0019 [ 80]: a61cc56c8cb40a09 -Block 0019 [ 81]: 8ab9deff5491f6cc -Block 0019 [ 82]: 8d90f91fdb55411f -Block 0019 [ 83]: 42f1723a12eacd4a -Block 0019 [ 84]: 62ea21253514ef3e -Block 0019 [ 85]: 8be3a6b87b767626 -Block 0019 [ 86]: e53f23ab3302fab7 -Block 0019 [ 87]: 8d7406f24d644e37 -Block 0019 [ 88]: 11eb7eeae417a83c -Block 0019 [ 89]: 9378ff2094390edd -Block 0019 [ 90]: 0cab6e06dea4e6d7 -Block 0019 [ 91]: e1a91d302fcb830b -Block 0019 [ 92]: 05a8b103c49b749e -Block 0019 [ 93]: b835a812caa13495 -Block 0019 [ 94]: 9e4a7d6008dc0d07 -Block 0019 [ 95]: 18d0fa5ba8e5d485 -Block 0019 [ 96]: 9e9398529ce75aca -Block 0019 [ 97]: 17057081a418bacf -Block 0019 [ 98]: 4e0f27d1838154bd -Block 0019 [ 99]: 8d44877ca2051aa8 -Block 0019 [100]: 0a4cd6358d00bf87 -Block 0019 [101]: 7c0bff02bb67c59c -Block 0019 [102]: aa3fa4ef9b5dd781 -Block 0019 [103]: 97a50d863ffc53d9 -Block 0019 [104]: 7eb0b749989ef4eb -Block 0019 [105]: 42f2c7f29e17413c -Block 0019 [106]: 645d879ee4b51f59 -Block 0019 [107]: c762cc190f4efb3f -Block 0019 [108]: 770003ec55c205d9 -Block 0019 [109]: 42846df1c4848f87 -Block 0019 [110]: 624ea1aba2a7b90e -Block 0019 [111]: 381df621938f285d -Block 0019 [112]: a46b93b0ffca4de9 -Block 0019 [113]: dceffbeebcd085c6 -Block 0019 [114]: a64c1f001498c383 -Block 0019 [115]: 6a5b51a09044452e -Block 0019 [116]: 198bcaa970ec0793 -Block 0019 [117]: 4927e17271e075e9 -Block 0019 [118]: 655157bfc11bc960 -Block 0019 [119]: 5820ba92b019f490 -Block 0019 [120]: a6404d587984349d -Block 0019 [121]: a3b6baa1ee83ff71 -Block 0019 [122]: 01bd468653db5771 -Block 0019 [123]: 41bb6a30fd950b20 -Block 0019 [124]: cbebc0f2d3027bbe -Block 0019 [125]: b1ba5e6e7fa4566e -Block 0019 [126]: c18c520e0cd81007 -Block 0019 [127]: 59769107732ed252 -Block 0020 [ 0]: f7a02540719722b2 -Block 0020 [ 1]: 793647276c046ccd -Block 0020 [ 2]: a14522df2ec9b017 -Block 0020 [ 3]: 40410f02a5eec424 -Block 0020 [ 4]: 20d579f606b8ed32 -Block 0020 [ 5]: 48f51282fca74fa4 -Block 0020 [ 6]: a39c1f758e17b6c9 -Block 0020 [ 7]: 23439532dad82587 -Block 0020 [ 8]: 56140cf3ddec83cc -Block 0020 [ 9]: 8103508d26c631c0 -Block 0020 [ 10]: da9965e5fcfb1f83 -Block 0020 [ 11]: e25790b322b33fad -Block 0020 [ 12]: b1abd7a58bb1d66e -Block 0020 [ 13]: b7758cdd576e14ac -Block 0020 [ 14]: 5bc5572e7650aac5 -Block 0020 [ 15]: bc6293a4d42190da -Block 0020 [ 16]: bbd6b2a25f3eb6f1 -Block 0020 [ 17]: 6eb99b410f0e9b09 -Block 0020 [ 18]: e6801c5d1e4c07a5 -Block 0020 [ 19]: 6e4e0a6c98f91237 -Block 0020 [ 20]: acdc7d2e237f9c58 -Block 0020 [ 21]: d0b6bd85fe772acb -Block 0020 [ 22]: 3af46184aab0899b -Block 0020 [ 23]: d64a30d79a2a8656 -Block 0020 [ 24]: 6bb8c7cc6580c8a8 -Block 0020 [ 25]: 9dba817881a14fc5 -Block 0020 [ 26]: 11b2964245a99f2f -Block 0020 [ 27]: b05f003f2c62dbb9 -Block 0020 [ 28]: 8efc3f9e00d0742c -Block 0020 [ 29]: eef2abfa36296b80 -Block 0020 [ 30]: 33f504553ee7aefb -Block 0020 [ 31]: e515f172cbc15f96 -Block 0020 [ 32]: f1b5332ce18d2068 -Block 0020 [ 33]: 629f71da3729dd4c -Block 0020 [ 34]: ca8740743450e9e4 -Block 0020 [ 35]: cd2a84fe1e4beadc -Block 0020 [ 36]: 337e086b0da43f8d -Block 0020 [ 37]: af09ba250c1835d1 -Block 0020 [ 38]: c726a7ae8cd2b9cc -Block 0020 [ 39]: a6d6197a3b32d1a5 -Block 0020 [ 40]: 7c59469d97032861 -Block 0020 [ 41]: 18870f3f29d0ff6c -Block 0020 [ 42]: e223d42a40f6fc86 -Block 0020 [ 43]: 2b097cab1e3e202b -Block 0020 [ 44]: 1067b29eac4bf9ef -Block 0020 [ 45]: a17d4321bd1ffc44 -Block 0020 [ 46]: 28bd1bc360800b69 -Block 0020 [ 47]: efbd0b5a815fab67 -Block 0020 [ 48]: dfb2c5c83c089ade -Block 0020 [ 49]: 1d72cee46ff73a07 -Block 0020 [ 50]: e65150c76a3b93ad -Block 0020 [ 51]: 01463480b6e07432 -Block 0020 [ 52]: dbb11d4d1ab842a5 -Block 0020 [ 53]: 1aa01282303809a1 -Block 0020 [ 54]: 0407d2b151f26a2e -Block 0020 [ 55]: bda5259c36ffe4e2 -Block 0020 [ 56]: 5ba64524226b17b0 -Block 0020 [ 57]: 14ebbabdc5c1081b -Block 0020 [ 58]: 8e28b79933734dcc -Block 0020 [ 59]: b1912c7bb67162da -Block 0020 [ 60]: 2246ca2915c0b57c -Block 0020 [ 61]: 44ca8e8b31882e92 -Block 0020 [ 62]: 153b19cca0f2e70f -Block 0020 [ 63]: 36c1a2b1fdbafed1 -Block 0020 [ 64]: 80b5d29d62621bd0 -Block 0020 [ 65]: 2f6b6a4977d304b0 -Block 0020 [ 66]: 8b4745ab709f83b6 -Block 0020 [ 67]: 79b5a11fba60e3ac -Block 0020 [ 68]: 5f5a066b534ccdb4 -Block 0020 [ 69]: b0a5387823264e55 -Block 0020 [ 70]: 4a8dc8d0b937aef0 -Block 0020 [ 71]: 64fe1e285c9a489b -Block 0020 [ 72]: 7e9ebfdfd7b3b128 -Block 0020 [ 73]: 3830d2dcfa33d585 -Block 0020 [ 74]: 95ddc376097e5fed -Block 0020 [ 75]: da61f020a5bd1ec0 -Block 0020 [ 76]: 58261f1a2ec1ec2a -Block 0020 [ 77]: d9d5d2badbc4b092 -Block 0020 [ 78]: 21fad4988a0d3b1a -Block 0020 [ 79]: 2515690a13cdf56a -Block 0020 [ 80]: fe9dae3553a4b5f8 -Block 0020 [ 81]: 01017f26017236f0 -Block 0020 [ 82]: e53fee225d251aa4 -Block 0020 [ 83]: 97a9dc2f4b919e45 -Block 0020 [ 84]: aba7bb7807dac22e -Block 0020 [ 85]: 8396a7f53ed6fe73 -Block 0020 [ 86]: d59d2a7855619f38 -Block 0020 [ 87]: 19e81207e1990d14 -Block 0020 [ 88]: 6af6cb67ba215ab1 -Block 0020 [ 89]: a0bd23fd1394eb2c -Block 0020 [ 90]: b8fd28ac5847a3a3 -Block 0020 [ 91]: d06e21a15fd9a785 -Block 0020 [ 92]: cbb84febca6dbed1 -Block 0020 [ 93]: ac1a9ca2f04ecc67 -Block 0020 [ 94]: c3265cfa6411f43a -Block 0020 [ 95]: 1f967f21c14b7864 -Block 0020 [ 96]: 463514566c30d67f -Block 0020 [ 97]: 9ab54cf19f8332b9 -Block 0020 [ 98]: 752ef52670d62f4f -Block 0020 [ 99]: 94c30bbb67d74756 -Block 0020 [100]: 9da7e0413f23ef7a -Block 0020 [101]: 5b14c9078edcea1c -Block 0020 [102]: f1fc1cf31932181a -Block 0020 [103]: a58aedabd43ed327 -Block 0020 [104]: 0df7f94de81d72f1 -Block 0020 [105]: 7605dd82b1ba6494 -Block 0020 [106]: b4990feceae9fdd4 -Block 0020 [107]: b111dccb67f5c7bb -Block 0020 [108]: b8fea154255b39ca -Block 0020 [109]: f89e4f433d96c7ee -Block 0020 [110]: 5b29c9419b89452f -Block 0020 [111]: d847da18c88976f3 -Block 0020 [112]: 39256fb09713f686 -Block 0020 [113]: dac4ef8fba50a8e2 -Block 0020 [114]: 661120873a7a18fd -Block 0020 [115]: 093892e68c1baf73 -Block 0020 [116]: 480b98fe82c235af -Block 0020 [117]: 59a4a56b2f12be74 -Block 0020 [118]: ed31ee49a5ada172 -Block 0020 [119]: 56785be3b6f96319 -Block 0020 [120]: f18290424c5a7936 -Block 0020 [121]: fa7ac39ca22d0d14 -Block 0020 [122]: 65c55663ec05b2dc -Block 0020 [123]: 2aea00dee01a3d80 -Block 0020 [124]: 655e16c05e192f42 -Block 0020 [125]: eff65a062d00ffe3 -Block 0020 [126]: f54f1777a25e8532 -Block 0020 [127]: 27cbbe27f5e27d94 -Block 0021 [ 0]: bfd6eab6c93af588 -Block 0021 [ 1]: ad7bf667d74382bf -Block 0021 [ 2]: 195c9027fa5471a6 -Block 0021 [ 3]: e46b052225d48ff4 -Block 0021 [ 4]: bdecfecafa6a38bc -Block 0021 [ 5]: e83caa5b213c1e8b -Block 0021 [ 6]: f7702d25f2b78730 -Block 0021 [ 7]: cc3925d4a5576071 -Block 0021 [ 8]: 45bc491d19dee84f -Block 0021 [ 9]: f9e0f6aa40ea1e2a -Block 0021 [ 10]: dfddefe2f3dffedb -Block 0021 [ 11]: 51a67880957d41b5 -Block 0021 [ 12]: b5e4c52bb847719f -Block 0021 [ 13]: c3d3d442d7d04b01 -Block 0021 [ 14]: 41b24a8baab2743c -Block 0021 [ 15]: 9b24d52938f52dff -Block 0021 [ 16]: 905f1e4aa19f311f -Block 0021 [ 17]: c218f0877c51e7ec -Block 0021 [ 18]: 349e76744f0adfe1 -Block 0021 [ 19]: ddb86c3804bf7e1a -Block 0021 [ 20]: 13ec9499abbe7937 -Block 0021 [ 21]: d1d469ae5ad012d7 -Block 0021 [ 22]: d7dd5edd9095df07 -Block 0021 [ 23]: 0216b1a8773bdfaf -Block 0021 [ 24]: 9f00d6e95b2d9ec8 -Block 0021 [ 25]: 177ff8139aaf8ddc -Block 0021 [ 26]: 91ab06e0ea538b7f -Block 0021 [ 27]: c8ee413463c95948 -Block 0021 [ 28]: b380238800f34bb7 -Block 0021 [ 29]: c348baeacae00aee -Block 0021 [ 30]: a29035c81c82cc3c -Block 0021 [ 31]: 5aa027cec856d613 -Block 0021 [ 32]: 7f1c40b8ca270064 -Block 0021 [ 33]: c1da08eb9998bc13 -Block 0021 [ 34]: d96369fba84991a5 -Block 0021 [ 35]: fd429c5bc5a47b9f -Block 0021 [ 36]: 2cb3b03b63293434 -Block 0021 [ 37]: fc16874d8a7048fd -Block 0021 [ 38]: 315165d7372d919b -Block 0021 [ 39]: e61b47c3fbb0f3e9 -Block 0021 [ 40]: c06be41275be05df -Block 0021 [ 41]: b6b0bcc0385226a8 -Block 0021 [ 42]: a0901451e99dd6c6 -Block 0021 [ 43]: 461b409bcf5e456b -Block 0021 [ 44]: f71d25ab1f2a9be4 -Block 0021 [ 45]: 305ee7a1da0bb5bd -Block 0021 [ 46]: 86de5e6c7154859d -Block 0021 [ 47]: 13153d375530110d -Block 0021 [ 48]: 36caf631256e646a -Block 0021 [ 49]: f3ee304459b4c7d8 -Block 0021 [ 50]: da5d4e8f60c5caf6 -Block 0021 [ 51]: f12e4872f6a309a5 -Block 0021 [ 52]: 5071f661e0c41de0 -Block 0021 [ 53]: 0e722f9d6c262798 -Block 0021 [ 54]: 0843991f14584c74 -Block 0021 [ 55]: f9396f94941f43a8 -Block 0021 [ 56]: 20b21b680df90975 -Block 0021 [ 57]: 5218eaa41848907c -Block 0021 [ 58]: 948a98480c904dbb -Block 0021 [ 59]: 8bbdc9bea2f2bb35 -Block 0021 [ 60]: de07b3bf633a6f7f -Block 0021 [ 61]: d3441a0e8a43ba32 -Block 0021 [ 62]: 0930cd161608ed60 -Block 0021 [ 63]: 82eac0f3f0cb4d93 -Block 0021 [ 64]: 5d2554e80c592f61 -Block 0021 [ 65]: 0b4d795191a1a0cc -Block 0021 [ 66]: 47781616e393a9f6 -Block 0021 [ 67]: 0141f3281f27b0b5 -Block 0021 [ 68]: 85f3409041a14ae0 -Block 0021 [ 69]: 5cef02eed4234029 -Block 0021 [ 70]: 20dd9d63eb26cd01 -Block 0021 [ 71]: 9d7d0a521a7af92a -Block 0021 [ 72]: d8d3e1c076a87892 -Block 0021 [ 73]: b90f777ec24e7ac0 -Block 0021 [ 74]: 9ea20e84c909e4fb -Block 0021 [ 75]: ebfd11b636e7c0c3 -Block 0021 [ 76]: 5869c138199cd51c -Block 0021 [ 77]: 82636d9abb871ac6 -Block 0021 [ 78]: f29d20bd5bdb4e69 -Block 0021 [ 79]: 23d4511db11567a9 -Block 0021 [ 80]: 3d835bc54cef8608 -Block 0021 [ 81]: 04969d7cab622099 -Block 0021 [ 82]: 3618a47cdc52b86f -Block 0021 [ 83]: 8bb7e5f00f82a717 -Block 0021 [ 84]: 78b6b0fbadb81833 -Block 0021 [ 85]: 8cea7501cda689cb -Block 0021 [ 86]: 4bdae18a70a17cc9 -Block 0021 [ 87]: 6c43ff3639b50017 -Block 0021 [ 88]: 120c5e735bdb9cac -Block 0021 [ 89]: d3c5af830d2f8a22 -Block 0021 [ 90]: 416d45e8451b7ec9 -Block 0021 [ 91]: 08e5a871de90d1a5 -Block 0021 [ 92]: e5bd017839cd86cb -Block 0021 [ 93]: 60cbd3a0f5574267 -Block 0021 [ 94]: b2311da13916fbf0 -Block 0021 [ 95]: f649c4268b3b1004 -Block 0021 [ 96]: da07e07655c4ea3e -Block 0021 [ 97]: 9b81ceea2d8cc09b -Block 0021 [ 98]: 76c82448b661e9a5 -Block 0021 [ 99]: e1600857cac5f82e -Block 0021 [100]: c276019df0aff223 -Block 0021 [101]: c4159c82ce1759c9 -Block 0021 [102]: a8819419a1ca07b5 -Block 0021 [103]: d936c69fca5ebcff -Block 0021 [104]: 5a321197a10f2110 -Block 0021 [105]: 43ecd6f6263d6a9e -Block 0021 [106]: 171147256f82baf2 -Block 0021 [107]: 408889d9a2e0ce35 -Block 0021 [108]: 4db62bb985872235 -Block 0021 [109]: 639fe3ec59c94969 -Block 0021 [110]: df52168a89a2c597 -Block 0021 [111]: cb2feded0a29878d -Block 0021 [112]: 459d214c60703bcb -Block 0021 [113]: 552d28886db5aea0 -Block 0021 [114]: 04b39edf3c3928ba -Block 0021 [115]: 8d1e04bd3620fbfd -Block 0021 [116]: 214cc46309c47dd3 -Block 0021 [117]: bb5da5d2925b3f41 -Block 0021 [118]: 3d71d050b5ae430b -Block 0021 [119]: 147073d48eaebf82 -Block 0021 [120]: 1f14584e6ab6c89f -Block 0021 [121]: 96133f813ee480ae -Block 0021 [122]: 1f360d067304e68b -Block 0021 [123]: eca5c02b7cc59bae -Block 0021 [124]: 3f6d2990b6b2f4c6 -Block 0021 [125]: b17f55e33484f2a0 -Block 0021 [126]: 8326c91f7d817407 -Block 0021 [127]: e2887aca53b66b78 -Block 0022 [ 0]: e6aebae353209478 -Block 0022 [ 1]: 73f7093c56dc1ace -Block 0022 [ 2]: cbb17f35cc2d94f0 -Block 0022 [ 3]: 207b71cc74eb4a3a -Block 0022 [ 4]: a835377b1188a381 -Block 0022 [ 5]: dea6f51eeef750e6 -Block 0022 [ 6]: 96e3f6731120ffcb -Block 0022 [ 7]: efb291d841331342 -Block 0022 [ 8]: 661fcf2917e4c7df -Block 0022 [ 9]: a2ea63a6d1bc87d5 -Block 0022 [ 10]: dce3646661bc277e -Block 0022 [ 11]: 08b4db396e39172e -Block 0022 [ 12]: 3fd3b7ed0c8f9372 -Block 0022 [ 13]: 64f933a9aa9e2c45 -Block 0022 [ 14]: f57c3b1213b0e55b -Block 0022 [ 15]: bda13485c5e6a7aa -Block 0022 [ 16]: 895a50a3e2cd9749 -Block 0022 [ 17]: 0d28357ed7a4e5b7 -Block 0022 [ 18]: fa0a4eb2ac0f950d -Block 0022 [ 19]: 020e6223653e46fd -Block 0022 [ 20]: 41ee467849f3fc13 -Block 0022 [ 21]: 2ddd403329149463 -Block 0022 [ 22]: a295bed7816b6d78 -Block 0022 [ 23]: 1af232ba23cacd51 -Block 0022 [ 24]: a32afd0f1aa57733 -Block 0022 [ 25]: c1a0195cf8bfddec -Block 0022 [ 26]: b690f9cad66ed79b -Block 0022 [ 27]: ff0dc5cb227a5d18 -Block 0022 [ 28]: f977e52d62c8c680 -Block 0022 [ 29]: a9d48b790e4e3317 -Block 0022 [ 30]: a95cb5c1da25321d -Block 0022 [ 31]: c87cf4f39475eb74 -Block 0022 [ 32]: 4cc4b06a7072c566 -Block 0022 [ 33]: 7d418a41060b64ab -Block 0022 [ 34]: a35688c3121bc461 -Block 0022 [ 35]: eda3ac1ec9757af2 -Block 0022 [ 36]: fcc499f57f65c6f0 -Block 0022 [ 37]: 7063f182bf81de29 -Block 0022 [ 38]: b052c0a286dfa31d -Block 0022 [ 39]: 6de768033d343d50 -Block 0022 [ 40]: f7126aeccef9949b -Block 0022 [ 41]: 54ac140aeb7edc36 -Block 0022 [ 42]: 681e9a2cd77288a0 -Block 0022 [ 43]: 152105f3f58885fa -Block 0022 [ 44]: 0bad8acdee14f1dd -Block 0022 [ 45]: 17ddc6ff0cdc9027 -Block 0022 [ 46]: 3960712a29f04ddf -Block 0022 [ 47]: 31a59c5ea6f5ef04 -Block 0022 [ 48]: dbdf5706690f3369 -Block 0022 [ 49]: 605e544a914b48b0 -Block 0022 [ 50]: f8b5076b859268d9 -Block 0022 [ 51]: eaa1cb07b39eb746 -Block 0022 [ 52]: 6ea36d5c167e6090 -Block 0022 [ 53]: 1e9177d5d1227f5a -Block 0022 [ 54]: 13288139d616d58e -Block 0022 [ 55]: 44d89de91c0094f2 -Block 0022 [ 56]: e1d4e392f90bed20 -Block 0022 [ 57]: cb4ca95eb02c10cb -Block 0022 [ 58]: cea536c5ef0e83e9 -Block 0022 [ 59]: 411e652988782c19 -Block 0022 [ 60]: c901bec92b3aae2f -Block 0022 [ 61]: b99853310b82da18 -Block 0022 [ 62]: b49ca7bd55c047e3 -Block 0022 [ 63]: 67a86fc6b6316c66 -Block 0022 [ 64]: b0c36eedbe865583 -Block 0022 [ 65]: 6e6f2a1e8c25bf4a -Block 0022 [ 66]: 6b12221dcfec802b -Block 0022 [ 67]: c8f78e123c452cd3 -Block 0022 [ 68]: 67ba9bd6eeb72d98 -Block 0022 [ 69]: 78dada521d580f88 -Block 0022 [ 70]: 6e75b4b8cb56e190 -Block 0022 [ 71]: 52e12f9b94421ae2 -Block 0022 [ 72]: 26d286f2cc846f83 -Block 0022 [ 73]: 2357111ee979aa38 -Block 0022 [ 74]: 2b432dd9af72cd33 -Block 0022 [ 75]: 9c6ece8d30cf1391 -Block 0022 [ 76]: 4d9a922090731d77 -Block 0022 [ 77]: 34aa94b5f4b1e909 -Block 0022 [ 78]: 029ede7220b86663 -Block 0022 [ 79]: 032e7cf13bd08994 -Block 0022 [ 80]: c957dfd60e828645 -Block 0022 [ 81]: 82f0c77773249e7d -Block 0022 [ 82]: e8a4e1ef01948e77 -Block 0022 [ 83]: 3af1103eb60fcfba -Block 0022 [ 84]: d1e5148298f8ff80 -Block 0022 [ 85]: d04723f7ddde5770 -Block 0022 [ 86]: 9cfd844a33052a27 -Block 0022 [ 87]: 3c7901823cce023c -Block 0022 [ 88]: 5325fd52717f59f1 -Block 0022 [ 89]: df61355f6a9a0aef -Block 0022 [ 90]: 3ea37bffd497f8b5 -Block 0022 [ 91]: 3bbad908578892a3 -Block 0022 [ 92]: 049747b87164eeff -Block 0022 [ 93]: 1828cb6db435ec53 -Block 0022 [ 94]: 4c96ec4e154bb840 -Block 0022 [ 95]: 7303f1a3e5392122 -Block 0022 [ 96]: 5264e0842f256c9f -Block 0022 [ 97]: 9bd3752d4828dc4f -Block 0022 [ 98]: 69b307e7e956af8f -Block 0022 [ 99]: 7d5d5d6813bcee75 -Block 0022 [100]: a3a17f8d2aad5d30 -Block 0022 [101]: ea39fb0a88e7cd07 -Block 0022 [102]: cc4430d5ed7000cc -Block 0022 [103]: c664d64c236bcc4f -Block 0022 [104]: c475595c8ab3ec47 -Block 0022 [105]: 6c9cc890702453db -Block 0022 [106]: 323e596761bc223e -Block 0022 [107]: f11210530c7260f6 -Block 0022 [108]: 2442847da422d9bb -Block 0022 [109]: f42ba4d9043843f2 -Block 0022 [110]: 934892245c31ba35 -Block 0022 [111]: 4ed499734276ef4c -Block 0022 [112]: 5e5e5543390e5683 -Block 0022 [113]: ffab89c5036c4b53 -Block 0022 [114]: ad1021520de84f65 -Block 0022 [115]: b4ccf7022b5d8288 -Block 0022 [116]: 5c586acc6ea27398 -Block 0022 [117]: d5446287a9a13644 -Block 0022 [118]: 6a06a8f31064a550 -Block 0022 [119]: f6a1c23a9314ba58 -Block 0022 [120]: 7b48abb370998f31 -Block 0022 [121]: 03a1b00f23c8a0d1 -Block 0022 [122]: 1743a200b4b64a2b -Block 0022 [123]: 3abcfaa93432c7b8 -Block 0022 [124]: d120c946b3c79489 -Block 0022 [125]: e29e9017dba0f398 -Block 0022 [126]: 4e1d6694af3c32f4 -Block 0022 [127]: 8e810ad3516f24b2 -Block 0023 [ 0]: 56c432170f2350e5 -Block 0023 [ 1]: 09db8b18388cb582 -Block 0023 [ 2]: 2eafa8786064ffe0 -Block 0023 [ 3]: 1141a78f575e12b4 -Block 0023 [ 4]: 26f04196b7234286 -Block 0023 [ 5]: 5dd6537d4851feb5 -Block 0023 [ 6]: c583ed23a795fe4c -Block 0023 [ 7]: 6368c86ccb8d83d5 -Block 0023 [ 8]: fb7b278ee8366750 -Block 0023 [ 9]: cac13b3bd11c9f83 -Block 0023 [ 10]: dd2c59c38a8c2011 -Block 0023 [ 11]: 26145ddd34cf879b -Block 0023 [ 12]: e62a5c5aadb86abb -Block 0023 [ 13]: 38d268fa1e7df6b3 -Block 0023 [ 14]: 8126b9192e3557c6 -Block 0023 [ 15]: 027ea8e6cce918f3 -Block 0023 [ 16]: e2b722e572bac272 -Block 0023 [ 17]: 5f8d26dad7112659 -Block 0023 [ 18]: edc60e812ddcd7ae -Block 0023 [ 19]: c072593563543ddf -Block 0023 [ 20]: 340063081ae79b39 -Block 0023 [ 21]: 6232714e9e32cf6c -Block 0023 [ 22]: 05066590c3c27c81 -Block 0023 [ 23]: d76f4d930392174a -Block 0023 [ 24]: 0068bf676811bb4b -Block 0023 [ 25]: 1f69480b3055af3f -Block 0023 [ 26]: 1643fc248280c10e -Block 0023 [ 27]: 589a6e562b4f32b2 -Block 0023 [ 28]: 7463dc6fc808f4a2 -Block 0023 [ 29]: 8fdcf4ef08a01295 -Block 0023 [ 30]: 1dc6d09c09e5778e -Block 0023 [ 31]: bfb449c78123c47f -Block 0023 [ 32]: 5a5513c27bc4dfa5 -Block 0023 [ 33]: b12582f5860a7211 -Block 0023 [ 34]: 4b6eb353c9d6db6d -Block 0023 [ 35]: e073bb08023d543d -Block 0023 [ 36]: 302cf4a9a92dabc0 -Block 0023 [ 37]: 5eed7cd8055d637a -Block 0023 [ 38]: 2c2d45738b604d2b -Block 0023 [ 39]: 21c4a193ffd0bded -Block 0023 [ 40]: 526f7e03af98d7cc -Block 0023 [ 41]: bc42211893504613 -Block 0023 [ 42]: 629c9782a6c51994 -Block 0023 [ 43]: c807b62f77a64154 -Block 0023 [ 44]: 7db0caa237f90623 -Block 0023 [ 45]: e4e31f5a1f573bdf -Block 0023 [ 46]: 22145e4b3d1bdf3f -Block 0023 [ 47]: c92877319bb7f189 -Block 0023 [ 48]: d6d0953f49d547f5 -Block 0023 [ 49]: eb948a13d7bc979a -Block 0023 [ 50]: fdd2ab73cc437323 -Block 0023 [ 51]: 221e8102a15e5083 -Block 0023 [ 52]: 6a5f1d9c0ccc6187 -Block 0023 [ 53]: e05665f2bc8ac301 -Block 0023 [ 54]: c88e6f5a59ebe911 -Block 0023 [ 55]: 3bb8dc1b633e72c2 -Block 0023 [ 56]: bde7b8b01205c612 -Block 0023 [ 57]: dd524b90844f7ba1 -Block 0023 [ 58]: af22ac3d14da5c59 -Block 0023 [ 59]: 788c8edcab69224e -Block 0023 [ 60]: 22842e87b2c24640 -Block 0023 [ 61]: a7b74dbad49f1372 -Block 0023 [ 62]: 25cc466c7add69f0 -Block 0023 [ 63]: c43262f642817169 -Block 0023 [ 64]: 0261f94d0723ef00 -Block 0023 [ 65]: 45284f8434b96e32 -Block 0023 [ 66]: f2768808b5945e24 -Block 0023 [ 67]: 41bae50aad6b6004 -Block 0023 [ 68]: 699000306ac34f2c -Block 0023 [ 69]: 1a9ba2af157bec9b -Block 0023 [ 70]: a15f1015af21ae84 -Block 0023 [ 71]: a2170eae6ca7bcb2 -Block 0023 [ 72]: a300fb755441f126 -Block 0023 [ 73]: 605825ac585f01eb -Block 0023 [ 74]: 932fe9bcad3e6079 -Block 0023 [ 75]: 7333f0b0da8ebdb8 -Block 0023 [ 76]: 8b0609b3c74b0edd -Block 0023 [ 77]: 69c76359d05b6145 -Block 0023 [ 78]: 7673d116e0ea1fb5 -Block 0023 [ 79]: 9014432d5e138eed -Block 0023 [ 80]: 250a2478d5e3f8fb -Block 0023 [ 81]: 42cba2e0fcbee17c -Block 0023 [ 82]: c8458235c5da47a2 -Block 0023 [ 83]: dfff25a5ba1fc6c9 -Block 0023 [ 84]: 92703172255bb700 -Block 0023 [ 85]: e88c4cd1910b5970 -Block 0023 [ 86]: bf49d0c32b5817c0 -Block 0023 [ 87]: a34efec5c482d20e -Block 0023 [ 88]: 08da80ad9449951f -Block 0023 [ 89]: ea848364740c829b -Block 0023 [ 90]: 851bf1c0f5ef6823 -Block 0023 [ 91]: 1100dae7f77fbb50 -Block 0023 [ 92]: 84b5dea318af2953 -Block 0023 [ 93]: d1642d506dbe74f9 -Block 0023 [ 94]: 853cee1e33c1c7ea -Block 0023 [ 95]: a9cf960261092974 -Block 0023 [ 96]: ba9e6115e04834f5 -Block 0023 [ 97]: 4e50532738f12659 -Block 0023 [ 98]: 052f606345e1ff96 -Block 0023 [ 99]: 29e56a5493554852 -Block 0023 [100]: 0a19df56263743bd -Block 0023 [101]: c424aa2d2486bde2 -Block 0023 [102]: 716e469f3592cb31 -Block 0023 [103]: c185624c1b8100e3 -Block 0023 [104]: 3fa3d101c5d5d337 -Block 0023 [105]: c3ed572269f1a21a -Block 0023 [106]: 5dcbbb1c55a6c46e -Block 0023 [107]: fafdd0b079d1e17e -Block 0023 [108]: 59ae6c87e343ebc8 -Block 0023 [109]: f56b124af7fdaae3 -Block 0023 [110]: a6142fc6bc7ded24 -Block 0023 [111]: 5281bfd0a97ee90e -Block 0023 [112]: fa4c9312ae8fea59 -Block 0023 [113]: 7220d85ddf5189d5 -Block 0023 [114]: fd43bac28e5fc21d -Block 0023 [115]: 14f7b1cc68901e54 -Block 0023 [116]: edbb0d51fa8eaec6 -Block 0023 [117]: b0ddf87a9ab31b2f -Block 0023 [118]: b224e3f04051574b -Block 0023 [119]: 635ea2f0116832c0 -Block 0023 [120]: 2f401e4abc05157c -Block 0023 [121]: 97b35ceeab754f7d -Block 0023 [122]: 1516a371e7bce932 -Block 0023 [123]: 8bb0ae9a2479fb3a -Block 0023 [124]: a4bc96317fcdb39a -Block 0023 [125]: 99990935644f7cab -Block 0023 [126]: 803015feda571015 -Block 0023 [127]: bf6f10ca00fa56a9 -Block 0024 [ 0]: bf4583539793038a -Block 0024 [ 1]: a17c89373c8ce1e5 -Block 0024 [ 2]: ce3c740ff9fc039f -Block 0024 [ 3]: 0fcd6129f8693784 -Block 0024 [ 4]: 2b91dea6ff4f7d7d -Block 0024 [ 5]: de737e6b686d3e94 -Block 0024 [ 6]: 18f8502cf6bf3292 -Block 0024 [ 7]: c509b7c2f0c6b80f -Block 0024 [ 8]: 3798e4457863c1c7 -Block 0024 [ 9]: 83a45a83121a14db -Block 0024 [ 10]: 27ad4af2107c034a -Block 0024 [ 11]: 5e270c568a5b643d -Block 0024 [ 12]: ab71bd7d07387c74 -Block 0024 [ 13]: 397c6c11039e74e6 -Block 0024 [ 14]: 9ec8188c1c345aad -Block 0024 [ 15]: eb475b8ef473c9a5 -Block 0024 [ 16]: 063b4373964fcac8 -Block 0024 [ 17]: 56a19139acc3e00a -Block 0024 [ 18]: 5c6c0962cce29939 -Block 0024 [ 19]: c30c330fcf7f2ce9 -Block 0024 [ 20]: c34d6b95046e5d85 -Block 0024 [ 21]: 2be11b238ee6440f -Block 0024 [ 22]: 1a5c6d4f08682679 -Block 0024 [ 23]: a932cb224913a6a0 -Block 0024 [ 24]: c3017b46720b70d5 -Block 0024 [ 25]: 321ba2d126fa85b4 -Block 0024 [ 26]: 8b8a46577b354b9b -Block 0024 [ 27]: 960d623c0fcf928b -Block 0024 [ 28]: 425dc11904ef5d13 -Block 0024 [ 29]: 0bdf7c53e9d6bee5 -Block 0024 [ 30]: c516bc641e4b1f1d -Block 0024 [ 31]: 25f662caf0d04b3d -Block 0024 [ 32]: 5b5591788337116d -Block 0024 [ 33]: 1bb6a3bb7d5d719f -Block 0024 [ 34]: 4f4eac6f99213a41 -Block 0024 [ 35]: 6110dccb11538dab -Block 0024 [ 36]: fe3a9bcf6bae2aeb -Block 0024 [ 37]: 0e4eeb46d2241e19 -Block 0024 [ 38]: 5430d892c2402540 -Block 0024 [ 39]: 7300cf1e7395132c -Block 0024 [ 40]: 9eef4a35f6a3434b -Block 0024 [ 41]: 5de169249ac21ed4 -Block 0024 [ 42]: dd5bcbfb73fbac29 -Block 0024 [ 43]: 9a519a7819957bb5 -Block 0024 [ 44]: 43a764312cc8eb3c -Block 0024 [ 45]: 90415d896ca55079 -Block 0024 [ 46]: 9c164d7287a565a2 -Block 0024 [ 47]: 772a76696f95564c -Block 0024 [ 48]: 8b7ce044b06ecd47 -Block 0024 [ 49]: f06ef02dad18d78e -Block 0024 [ 50]: 0bc55e7139bb155a -Block 0024 [ 51]: 10b453718a9a703b -Block 0024 [ 52]: 86142a57693f45d2 -Block 0024 [ 53]: 6aef05ae9239a7cc -Block 0024 [ 54]: 64a39acbeb568504 -Block 0024 [ 55]: 7ff67b699718e578 -Block 0024 [ 56]: cd937dff7a44924b -Block 0024 [ 57]: 898fb355fdfeb447 -Block 0024 [ 58]: b8e6d5c6c740496a -Block 0024 [ 59]: e94a587019efa9e7 -Block 0024 [ 60]: b4ab7648fbeaa80a -Block 0024 [ 61]: 06ffb6590f1a5d03 -Block 0024 [ 62]: 3c5471d0243bf38c -Block 0024 [ 63]: a69751062e586e77 -Block 0024 [ 64]: 15fd3817247a48d4 -Block 0024 [ 65]: cf28aba007081d83 -Block 0024 [ 66]: f945831954967149 -Block 0024 [ 67]: 69fbe1a2a75f20d5 -Block 0024 [ 68]: 4e99a17284e7b791 -Block 0024 [ 69]: cf192f2db04ea91c -Block 0024 [ 70]: 052810ee50fe71b7 -Block 0024 [ 71]: 8a2545a5e11b3b73 -Block 0024 [ 72]: c95cf992b14eeb3f -Block 0024 [ 73]: b9c6c0d5db9b389a -Block 0024 [ 74]: d6a69487f68b0a3f -Block 0024 [ 75]: 6627c4401d399868 -Block 0024 [ 76]: dbecbe752ef44c3f -Block 0024 [ 77]: 56107ba6bba3b5e6 -Block 0024 [ 78]: 1efa55d9357e3c36 -Block 0024 [ 79]: 75c196453b59d5d8 -Block 0024 [ 80]: 075c84f5c4220859 -Block 0024 [ 81]: 1ee5ed8b313d643c -Block 0024 [ 82]: a317ba82d759163f -Block 0024 [ 83]: 35cd189af03482ec -Block 0024 [ 84]: ac634c2f4243c07e -Block 0024 [ 85]: 79d3939c35b5089c -Block 0024 [ 86]: b710ad495a2cbb68 -Block 0024 [ 87]: 369aaf0dff97c5ba -Block 0024 [ 88]: cc006a1073be4438 -Block 0024 [ 89]: 572432551b3263c3 -Block 0024 [ 90]: f4f77e3d2bcd718e -Block 0024 [ 91]: ef501a909b51cded -Block 0024 [ 92]: 3976ade1b6c3aba2 -Block 0024 [ 93]: 2edb1dbaa3bf1291 -Block 0024 [ 94]: 4049b2246d256e2c -Block 0024 [ 95]: 61ecd1c32040d453 -Block 0024 [ 96]: 95b0d49df09785e3 -Block 0024 [ 97]: 11a5fc067b184817 -Block 0024 [ 98]: e61a1c43133192b5 -Block 0024 [ 99]: 98d2b7f72d011248 -Block 0024 [100]: b7cb87305e2c2d6c -Block 0024 [101]: 3ecd32c1442f0ba0 -Block 0024 [102]: 4b2b29d933d1a0ba -Block 0024 [103]: 082d6c40ec561561 -Block 0024 [104]: d0367dcd61953e5d -Block 0024 [105]: 5f5fdc6102d5f068 -Block 0024 [106]: 03f9d3ad8a170315 -Block 0024 [107]: 1190264775912229 -Block 0024 [108]: c05460add736d870 -Block 0024 [109]: 25549b26ee5ff9f9 -Block 0024 [110]: 813ace59e299a68d -Block 0024 [111]: 6e37401ff41cf522 -Block 0024 [112]: 147bc89d451108eb -Block 0024 [113]: 0d7cda879c204b37 -Block 0024 [114]: 123e210727972bd8 -Block 0024 [115]: 6d883176b8208687 -Block 0024 [116]: 8e357a934b760e90 -Block 0024 [117]: db5d53313dca142a -Block 0024 [118]: 75e330f8c2124699 -Block 0024 [119]: 4a19313f121fca58 -Block 0024 [120]: 7ff60a770158fa90 -Block 0024 [121]: 3c0a19b1a1f5d2b5 -Block 0024 [122]: 652f82db23b0a84d -Block 0024 [123]: 97c8cc772d1a046a -Block 0024 [124]: 3d344d83dd1222f2 -Block 0024 [125]: 36b1311e5f306e76 -Block 0024 [126]: 4d0e2efe680dac8a -Block 0024 [127]: 04f7d812aa2eaeaa -Block 0025 [ 0]: c02432f28c2417d3 -Block 0025 [ 1]: df87602337c3a6f9 -Block 0025 [ 2]: 5110847f56262cec -Block 0025 [ 3]: 667874afa6398847 -Block 0025 [ 4]: fce31cfadf459e4d -Block 0025 [ 5]: 66f6b0e60c20429f -Block 0025 [ 6]: 46e276fafd0f6fa8 -Block 0025 [ 7]: f18d5cea31632fd7 -Block 0025 [ 8]: 2c35e2d80febaebe -Block 0025 [ 9]: b715f95b99a138dd -Block 0025 [ 10]: e3ce6ad753f97bb7 -Block 0025 [ 11]: 0b1c03d9e3055dd5 -Block 0025 [ 12]: c81cfc50ea63ed16 -Block 0025 [ 13]: 0f0efa659cc7a0d5 -Block 0025 [ 14]: 1f22de1b208d8902 -Block 0025 [ 15]: 7a54fe2921bb3c5b -Block 0025 [ 16]: 459491d187d5d127 -Block 0025 [ 17]: 57835c920fa586de -Block 0025 [ 18]: a0e9bdbdbc618028 -Block 0025 [ 19]: 8690ca28ab9eb4dc -Block 0025 [ 20]: d2b3717338e9dab5 -Block 0025 [ 21]: 5517d82ff815a3d4 -Block 0025 [ 22]: 61d2473ffb17c7d8 -Block 0025 [ 23]: e17a2341eb0c6cd6 -Block 0025 [ 24]: 739a0048cc303c17 -Block 0025 [ 25]: a4851011974f86eb -Block 0025 [ 26]: 8ae3ad2f3ffa111c -Block 0025 [ 27]: e8af30509554ec6d -Block 0025 [ 28]: c57fbf894b4fd6c0 -Block 0025 [ 29]: b95b55c2cb11472a -Block 0025 [ 30]: 6f008cc63addd4ff -Block 0025 [ 31]: 1dc3088cea2a1b22 -Block 0025 [ 32]: 84633af6989cf352 -Block 0025 [ 33]: 17a125e0c3b5c2c1 -Block 0025 [ 34]: 4def7ed3f310945a -Block 0025 [ 35]: 2d4ce7d225767a3b -Block 0025 [ 36]: b0d6d5d58b2a27bc -Block 0025 [ 37]: 417f22c60aa21e5e -Block 0025 [ 38]: fc956d2285a9df13 -Block 0025 [ 39]: b8b540b099f63f9c -Block 0025 [ 40]: 16b8b55c4bc899c9 -Block 0025 [ 41]: 55d749c549a67d03 -Block 0025 [ 42]: 06de19aade179b34 -Block 0025 [ 43]: f61325120460b6d1 -Block 0025 [ 44]: 2a435584cc068deb -Block 0025 [ 45]: 4cda20238b6d5ad3 -Block 0025 [ 46]: b9737adb88b005db -Block 0025 [ 47]: 4508c56a58d8ae5e -Block 0025 [ 48]: 0482d6af7fbea373 -Block 0025 [ 49]: 6585dfa97dd12063 -Block 0025 [ 50]: f93072a78e60443c -Block 0025 [ 51]: 9f3b8e80ceb2be48 -Block 0025 [ 52]: ac3dca4c9351e194 -Block 0025 [ 53]: e7f631ef15301c18 -Block 0025 [ 54]: 68728ff86e8a4194 -Block 0025 [ 55]: f03ff7621a6d5870 -Block 0025 [ 56]: 3accf9ea2059eecc -Block 0025 [ 57]: 7a40cf8588638006 -Block 0025 [ 58]: 350f2d401ea54bb1 -Block 0025 [ 59]: ca51085f93522a79 -Block 0025 [ 60]: 5f399b01bac94b46 -Block 0025 [ 61]: 9e368d5a39e1fb12 -Block 0025 [ 62]: bb2416c37abcc1b3 -Block 0025 [ 63]: 19dc1cd6f4a76c4b -Block 0025 [ 64]: fbd4a85f08b0b9e1 -Block 0025 [ 65]: 19e05bf1c8e5908d -Block 0025 [ 66]: a3580dba7331f036 -Block 0025 [ 67]: e5e1f78a4ba3c135 -Block 0025 [ 68]: df3942721112d8fc -Block 0025 [ 69]: 9f6d750b6aad4e32 -Block 0025 [ 70]: ef21ed902d825a07 -Block 0025 [ 71]: 02229fc7704f4ce6 -Block 0025 [ 72]: cc9f877c1a7fbb28 -Block 0025 [ 73]: 585758a87439684a -Block 0025 [ 74]: d683487687b26588 -Block 0025 [ 75]: 557a58c22b055c6b -Block 0025 [ 76]: a2fc0615b68bd40d -Block 0025 [ 77]: 87359f418f519671 -Block 0025 [ 78]: 0fc028f7e8906d85 -Block 0025 [ 79]: bb95f948e6dfcdcf -Block 0025 [ 80]: 6965ad87b5767d38 -Block 0025 [ 81]: 2d8901cf61c109a4 -Block 0025 [ 82]: c70396ce64fca092 -Block 0025 [ 83]: d8fe94a458caa96a -Block 0025 [ 84]: 2eb3aa977607b5da -Block 0025 [ 85]: 46a0d02635179182 -Block 0025 [ 86]: 4e4a181bb6863f9c -Block 0025 [ 87]: 83e9577ebf6541b7 -Block 0025 [ 88]: 6ad5847b07e2d7e4 -Block 0025 [ 89]: e72aba6841351302 -Block 0025 [ 90]: 71430efde4cc5e33 -Block 0025 [ 91]: 7929e91d90beb2d3 -Block 0025 [ 92]: bd32d8a056d5015a -Block 0025 [ 93]: 151c1a43811166be -Block 0025 [ 94]: 375388f1993cc412 -Block 0025 [ 95]: 7d2bf3945ffa18a3 -Block 0025 [ 96]: b14ba53feffbd4aa -Block 0025 [ 97]: 1247e167acbfcb9a -Block 0025 [ 98]: 0681b2a261a84b3e -Block 0025 [ 99]: e442452a213a150f -Block 0025 [100]: a6b905c8a0123984 -Block 0025 [101]: c100981f0d06b5c4 -Block 0025 [102]: 8bfd02fe184df9fb -Block 0025 [103]: ddde8aeba5183593 -Block 0025 [104]: 32db716a84582a8a -Block 0025 [105]: ac355eedc7f49408 -Block 0025 [106]: 3da2b0d8519c1b15 -Block 0025 [107]: dac49f353fddaa69 -Block 0025 [108]: bd7f699cff3533a3 -Block 0025 [109]: 00b566b84c3484ee -Block 0025 [110]: c17836603b52c2bd -Block 0025 [111]: 0ccb3ebedcc8521d -Block 0025 [112]: 5d6354d205c2f95b -Block 0025 [113]: a0739f76d327a0ae -Block 0025 [114]: 87f95a702c784a57 -Block 0025 [115]: 3cbb3370f55e43ea -Block 0025 [116]: 73c8a4fab081f398 -Block 0025 [117]: e396f8aa17ac238a -Block 0025 [118]: b1d821c495c15e82 -Block 0025 [119]: 14a010fec47a0821 -Block 0025 [120]: 7bac85187b17ee2f -Block 0025 [121]: 747e057340c77098 -Block 0025 [122]: 063a1073e710e631 -Block 0025 [123]: 50486c906b695b0e -Block 0025 [124]: 0c21d4640f2ebf12 -Block 0025 [125]: 56c75fbca558ff8f -Block 0025 [126]: ed1f21c46ca001a2 -Block 0025 [127]: 0655ca00aa6cf206 -Block 0026 [ 0]: f494004f57652dfb -Block 0026 [ 1]: bc7e125318991a1b -Block 0026 [ 2]: e0bca0c2987576a7 -Block 0026 [ 3]: b50d0ad8d594113a -Block 0026 [ 4]: 008b0507da0f62da -Block 0026 [ 5]: 1e2005c9d8a76b37 -Block 0026 [ 6]: d87490552095e57a -Block 0026 [ 7]: 1d0c4a322d90cf92 -Block 0026 [ 8]: 7f7e3e3b8f23b544 -Block 0026 [ 9]: a53ea6aee892f339 -Block 0026 [ 10]: c0db804430533d72 -Block 0026 [ 11]: ef53afbe282d23bf -Block 0026 [ 12]: a14a274b4211571c -Block 0026 [ 13]: e92d574a0220dc63 -Block 0026 [ 14]: d8e73b91c7451253 -Block 0026 [ 15]: cf66dab9ed5f2d0d -Block 0026 [ 16]: fcf7f593af1ed8b5 -Block 0026 [ 17]: fe08b6e491f27c07 -Block 0026 [ 18]: 3735fb0c10e76f9d -Block 0026 [ 19]: 1e1cd603e9e24d57 -Block 0026 [ 20]: f213036e8ae6d3d1 -Block 0026 [ 21]: 203d48f8758f733b -Block 0026 [ 22]: c60391b6f63feb61 -Block 0026 [ 23]: dfb7479caaa34a7a -Block 0026 [ 24]: 4905e186a30eb530 -Block 0026 [ 25]: c381ad611910a956 -Block 0026 [ 26]: 9cd4cdf8fcbf4f55 -Block 0026 [ 27]: 7c5391a58a474b18 -Block 0026 [ 28]: 10f8ddbc2b08af01 -Block 0026 [ 29]: 5c58a04b90dd99c4 -Block 0026 [ 30]: b54eb06dd4f3b121 -Block 0026 [ 31]: 52c10afe187e6003 -Block 0026 [ 32]: 0a456b9ce2a1aa7f -Block 0026 [ 33]: fca647d9bbfd8a6a -Block 0026 [ 34]: ed1828078039d0c5 -Block 0026 [ 35]: d8acca3425d069d2 -Block 0026 [ 36]: 8d63e69d7caaa236 -Block 0026 [ 37]: 3f435d73b7c96834 -Block 0026 [ 38]: b8e18b5f7a57c987 -Block 0026 [ 39]: ae572beb041f8112 -Block 0026 [ 40]: 62f2f9c8e8eb29ba -Block 0026 [ 41]: 4884560ebf91effe -Block 0026 [ 42]: 06fc59f34d083054 -Block 0026 [ 43]: bea4929f625e12ef -Block 0026 [ 44]: d7f563446d7a99f3 -Block 0026 [ 45]: 991b0cb2578290fb -Block 0026 [ 46]: 37ffd37e3981ceb6 -Block 0026 [ 47]: 409c1563471126d4 -Block 0026 [ 48]: da9781a2c63abf64 -Block 0026 [ 49]: 0137c07fdbbcc294 -Block 0026 [ 50]: a8820a87393425ad -Block 0026 [ 51]: c81a5d873fe20ba4 -Block 0026 [ 52]: 94ced49aed91e7a7 -Block 0026 [ 53]: 017404af79573a0b -Block 0026 [ 54]: cc9e2a7c25237895 -Block 0026 [ 55]: 12b48ebd3118e19b -Block 0026 [ 56]: 9fc306d0849cd11d -Block 0026 [ 57]: 3d336e0e4429ca67 -Block 0026 [ 58]: aff7b98ac4959a06 -Block 0026 [ 59]: fd6785fd204e650d -Block 0026 [ 60]: d493f601d16a4f5f -Block 0026 [ 61]: 610f4837f2db6f9b -Block 0026 [ 62]: b82085a6fd0ece16 -Block 0026 [ 63]: e8ea02d44b708977 -Block 0026 [ 64]: 428531978f14951a -Block 0026 [ 65]: 9507b6cca5306aa4 -Block 0026 [ 66]: f857f06106ad3bee -Block 0026 [ 67]: 55944ea007f7863b -Block 0026 [ 68]: 67f2e7babb7a331f -Block 0026 [ 69]: 0252b8482b88acce -Block 0026 [ 70]: db6a01e15738a091 -Block 0026 [ 71]: 1b04caba54505b61 -Block 0026 [ 72]: b0e0f8fb29a8479c -Block 0026 [ 73]: aa670af602c88243 -Block 0026 [ 74]: bace61d13223063d -Block 0026 [ 75]: fa19f9fa8261fc1d -Block 0026 [ 76]: f6761126d8b2e7b9 -Block 0026 [ 77]: 0f210f240f996092 -Block 0026 [ 78]: e6fad1e1ece1bf4e -Block 0026 [ 79]: 16dcef2a0c6338ea -Block 0026 [ 80]: 30ecd57a88f7a7a0 -Block 0026 [ 81]: 0e4c0c7cd4f24d0c -Block 0026 [ 82]: aaa080d230cff24a -Block 0026 [ 83]: 6dea8082160fbbe6 -Block 0026 [ 84]: 9ff45a0bcb4e0713 -Block 0026 [ 85]: 0b1e282a7d2b3a90 -Block 0026 [ 86]: f27f08967fb050fc -Block 0026 [ 87]: 0151762582ff58d0 -Block 0026 [ 88]: 974e23cb4f05ba88 -Block 0026 [ 89]: 0a4a783b22dcf61d -Block 0026 [ 90]: 45e31764f17f08f9 -Block 0026 [ 91]: 86f9f88e402bff39 -Block 0026 [ 92]: 2ea75c01660b1fab -Block 0026 [ 93]: f1bf9d413751c414 -Block 0026 [ 94]: f2e7e9c1b77090d2 -Block 0026 [ 95]: 71130e18edf585b1 -Block 0026 [ 96]: 6bc7fa4a4f49b58d -Block 0026 [ 97]: 1a04dbebef1d435e -Block 0026 [ 98]: be6c4fb73bbae267 -Block 0026 [ 99]: 32d9b418f26ca8c9 -Block 0026 [100]: f370c6ec416fea29 -Block 0026 [101]: c87d56d2cfd5c25e -Block 0026 [102]: b556a8dff75b4350 -Block 0026 [103]: 6cf4866f115bc1ba -Block 0026 [104]: a5ea80b67d3eb546 -Block 0026 [105]: 32408068477f9617 -Block 0026 [106]: 53ed9037f0ab6c6e -Block 0026 [107]: 551c462f6733f83e -Block 0026 [108]: 13d45815ff2fd652 -Block 0026 [109]: ec1a210c404d6357 -Block 0026 [110]: 4b5b3c04beb5bd39 -Block 0026 [111]: 43b1945dd83a0494 -Block 0026 [112]: 850af53380605933 -Block 0026 [113]: 8b6bd0fec9d3b815 -Block 0026 [114]: 66c9634a5e8c9fb5 -Block 0026 [115]: 446198f1911917a3 -Block 0026 [116]: 0611350c10b0d1f7 -Block 0026 [117]: 3a7bcd48a10a0605 -Block 0026 [118]: ef1451b6313c81dc -Block 0026 [119]: a7aedb9836bce03c -Block 0026 [120]: 59649ed78381cfd3 -Block 0026 [121]: f9e660ad51495ee1 -Block 0026 [122]: 3d614c33fb37cfe8 -Block 0026 [123]: e28e1e9046aa5e92 -Block 0026 [124]: 9e3cc15ddcaf388f -Block 0026 [125]: 298db70bfacfcecc -Block 0026 [126]: 561e51e85006f3e2 -Block 0026 [127]: 002328b2a64d32de -Block 0027 [ 0]: 6a36e474ffc79b28 -Block 0027 [ 1]: 23d140862dbcc4b2 -Block 0027 [ 2]: 93463b5d7c02a877 -Block 0027 [ 3]: b7e8766c02109d51 -Block 0027 [ 4]: 7415cf4fddc0f993 -Block 0027 [ 5]: 7b769c8a60707898 -Block 0027 [ 6]: 06506a25457a2e6b -Block 0027 [ 7]: a65e8cdc5e651394 -Block 0027 [ 8]: 7da1e70686b4a92b -Block 0027 [ 9]: b17edc4e65c4c678 -Block 0027 [ 10]: bec581f37d2834fb -Block 0027 [ 11]: 082185c8ae0b588f -Block 0027 [ 12]: 23916c8338f8e07e -Block 0027 [ 13]: a99a11467da9428c -Block 0027 [ 14]: a111edfe969ec9bc -Block 0027 [ 15]: d0a76e461410f68a -Block 0027 [ 16]: e37f0624904ef553 -Block 0027 [ 17]: 1088077172f1161a -Block 0027 [ 18]: b376e4c161878402 -Block 0027 [ 19]: d4121c48e0c06c13 -Block 0027 [ 20]: 96fc4febca9c3457 -Block 0027 [ 21]: 25686c76fd01241b -Block 0027 [ 22]: e4f8119ac946d1be -Block 0027 [ 23]: d751327cd43388c3 -Block 0027 [ 24]: a91b144c324f497d -Block 0027 [ 25]: bd2ea57c9df15ca4 -Block 0027 [ 26]: 4e737444370dd320 -Block 0027 [ 27]: faafe5c1916300d9 -Block 0027 [ 28]: 2ab42667cbfc6b89 -Block 0027 [ 29]: afb23472890580d3 -Block 0027 [ 30]: 9713478003ef4a7c -Block 0027 [ 31]: ff9423eabb33c603 -Block 0027 [ 32]: 3d821a656ae4161e -Block 0027 [ 33]: 6db448e9dc48798a -Block 0027 [ 34]: 9669bc7908d86520 -Block 0027 [ 35]: 59828038647baa96 -Block 0027 [ 36]: c403678a1b89ac4b -Block 0027 [ 37]: d3b58972a9491d6f -Block 0027 [ 38]: 99169151602ed624 -Block 0027 [ 39]: c1d2702f140f997d -Block 0027 [ 40]: caf644fd739cd0ab -Block 0027 [ 41]: be2632b181d35323 -Block 0027 [ 42]: 8230428a04d6b83f -Block 0027 [ 43]: dbda70b473488888 -Block 0027 [ 44]: 2686f0b232aba4b3 -Block 0027 [ 45]: 9f7c2482dba52baf -Block 0027 [ 46]: e1ccb89ae28e33bc -Block 0027 [ 47]: d0ea305527865a20 -Block 0027 [ 48]: 4273f862776fb381 -Block 0027 [ 49]: 5138176b7f8b1a41 -Block 0027 [ 50]: 741205d181d13544 -Block 0027 [ 51]: ecfcb8ee67b67e55 -Block 0027 [ 52]: 1533882648e638bc -Block 0027 [ 53]: 03518b85a85d0338 -Block 0027 [ 54]: 431d11df78672d82 -Block 0027 [ 55]: 75b2b7116f34ecd9 -Block 0027 [ 56]: 9b51ce7a4981f2a0 -Block 0027 [ 57]: 7a5ada2b2f45fe13 -Block 0027 [ 58]: 10cd88ba6d9f0f20 -Block 0027 [ 59]: 49fb947141ac117b -Block 0027 [ 60]: 2094194379412634 -Block 0027 [ 61]: 1e9a4382d1ca8191 -Block 0027 [ 62]: 457cabdfeb42ccd6 -Block 0027 [ 63]: ad924df310f759a7 -Block 0027 [ 64]: 3e7d1fdc291df527 -Block 0027 [ 65]: b8cacac133a45f3d -Block 0027 [ 66]: 037581754bfd253c -Block 0027 [ 67]: ca53c63794ee1736 -Block 0027 [ 68]: 714981936dd5487c -Block 0027 [ 69]: bf620ebbc920a960 -Block 0027 [ 70]: 835eebf18d80d70b -Block 0027 [ 71]: 174364bafd7c500f -Block 0027 [ 72]: 52e32e79e987e339 -Block 0027 [ 73]: ea2ee4ae5c85f9b7 -Block 0027 [ 74]: 9082578fc32e5522 -Block 0027 [ 75]: 49e1f8e5fec29c66 -Block 0027 [ 76]: bc22280c92dc8017 -Block 0027 [ 77]: 4651bc598c0d68a2 -Block 0027 [ 78]: 9f7f11d764f462b0 -Block 0027 [ 79]: bbf0fdc8d0ed58cb -Block 0027 [ 80]: d21fde1da96d257f -Block 0027 [ 81]: b92685188bd54f18 -Block 0027 [ 82]: 24795ac1884dff14 -Block 0027 [ 83]: e4cf58770c7a3eb7 -Block 0027 [ 84]: 32524079585dc4be -Block 0027 [ 85]: 8d312885fca8e395 -Block 0027 [ 86]: 235d50fc5fb93f7c -Block 0027 [ 87]: 9f7ebfa431d9c8f1 -Block 0027 [ 88]: b36af9bb14781ae2 -Block 0027 [ 89]: 86026a8db22332b0 -Block 0027 [ 90]: 08585886343fc383 -Block 0027 [ 91]: 9c6e402057a0aaf2 -Block 0027 [ 92]: 5defa125fd09ed1b -Block 0027 [ 93]: 5ce30d50933c40f8 -Block 0027 [ 94]: 6b1e678501b2c9d4 -Block 0027 [ 95]: 8725a68615e4d34f -Block 0027 [ 96]: 8c5cdfb8d3795da0 -Block 0027 [ 97]: 5a75edcd8c6d26ab -Block 0027 [ 98]: 88bbf5bd5f9321a0 -Block 0027 [ 99]: d01b8e4553dacfcc -Block 0027 [100]: 6d44604ed05684e3 -Block 0027 [101]: c1d9efbf51f08c0f -Block 0027 [102]: d32861a79d3d3591 -Block 0027 [103]: 0f5e0fdfe060ad48 -Block 0027 [104]: 1aa10c6249e9c203 -Block 0027 [105]: 034b3cd30d6f47db -Block 0027 [106]: 7bbbfa8311733087 -Block 0027 [107]: 218f81120456f524 -Block 0027 [108]: d7068a533876beca -Block 0027 [109]: 903b66e838ceb3a8 -Block 0027 [110]: 30b1296695f436b2 -Block 0027 [111]: c96450f5b09229e7 -Block 0027 [112]: 279d31b6dd521c73 -Block 0027 [113]: c49dd63f87db05e5 -Block 0027 [114]: 4f4183be215209e7 -Block 0027 [115]: 0618248e89512325 -Block 0027 [116]: 1630e2f1fb6f8c9d -Block 0027 [117]: cffa863752fdff8b -Block 0027 [118]: 277bb464fe923265 -Block 0027 [119]: b69f98e413055782 -Block 0027 [120]: be757ac9e2b1afe9 -Block 0027 [121]: 1d505a0e9d9d71f8 -Block 0027 [122]: 851fecc06495f5d8 -Block 0027 [123]: f7130c2a62201dec -Block 0027 [124]: f3a890c658c9a653 -Block 0027 [125]: 913ae2dd0b1b4348 -Block 0027 [126]: dcf627b503666a13 -Block 0027 [127]: 03c2439ffb970ee6 -Block 0028 [ 0]: ca58222c0335fad4 -Block 0028 [ 1]: 9c72e23adf9c0d86 -Block 0028 [ 2]: 1b6707cf48c561d1 -Block 0028 [ 3]: 2b6cda976b746358 -Block 0028 [ 4]: d7a615afa3f55997 -Block 0028 [ 5]: 013fa2f590c128bc -Block 0028 [ 6]: 4cd3353543de39e0 -Block 0028 [ 7]: 61abbc1a37e87eed -Block 0028 [ 8]: 5cb0f9c53b2cfc8e -Block 0028 [ 9]: 86a2c36cadd9f0dd -Block 0028 [ 10]: 238f6eec4bce7605 -Block 0028 [ 11]: cf1d0ef7179792bc -Block 0028 [ 12]: 1df1c207447534c9 -Block 0028 [ 13]: 4201704843e7c5c9 -Block 0028 [ 14]: 9626a9eb6fe0ebc9 -Block 0028 [ 15]: 86e48febc40a64ed -Block 0028 [ 16]: a20402933b241b8a -Block 0028 [ 17]: 6f9031d281bac12b -Block 0028 [ 18]: f45a47b2853694ba -Block 0028 [ 19]: 917a448aef9f4195 -Block 0028 [ 20]: e046f6a5473fb03f -Block 0028 [ 21]: 479b43fc599c24ec -Block 0028 [ 22]: 0abbaa3b84d91c79 -Block 0028 [ 23]: df37b61116fe98d5 -Block 0028 [ 24]: 519ebd6232590101 -Block 0028 [ 25]: 783c4a632e6a81a8 -Block 0028 [ 26]: df754093dd079428 -Block 0028 [ 27]: faa49281ccc74f7f -Block 0028 [ 28]: afe16685c78a1dd6 -Block 0028 [ 29]: 051c80fb6fa24c14 -Block 0028 [ 30]: 08072ecbb0e8f1e0 -Block 0028 [ 31]: 499ac14bf47b5a27 -Block 0028 [ 32]: 5d421f66de4c0e98 -Block 0028 [ 33]: 077ce2dc6718cb84 -Block 0028 [ 34]: f48ab05c57970f5c -Block 0028 [ 35]: 6075db6f8cdd475d -Block 0028 [ 36]: 7c6a41c738738787 -Block 0028 [ 37]: c5f5a1740f2fb839 -Block 0028 [ 38]: 08bc03d5f44201ec -Block 0028 [ 39]: 199605d142f2b604 -Block 0028 [ 40]: 01c3c9f476c868ba -Block 0028 [ 41]: faf406aee9364a54 -Block 0028 [ 42]: 619f3f52adacd452 -Block 0028 [ 43]: 0ecebc2f592ab9c7 -Block 0028 [ 44]: 1d96a7c554184a37 -Block 0028 [ 45]: fda76281db32047b -Block 0028 [ 46]: 269961a043864803 -Block 0028 [ 47]: e40a3252cb410e50 -Block 0028 [ 48]: d5c5b3ac3d004a7a -Block 0028 [ 49]: f47f6d2f7aefe242 -Block 0028 [ 50]: acf22ef8b04c3b2c -Block 0028 [ 51]: 5075c6cab2c6f889 -Block 0028 [ 52]: 0f660a376a8d2aa0 -Block 0028 [ 53]: 34a32efc55b524a6 -Block 0028 [ 54]: 7ff61a76b03cb19e -Block 0028 [ 55]: f74c34ccf42e4b1f -Block 0028 [ 56]: 16f872636b8352b5 -Block 0028 [ 57]: 3201a2c20a72ca41 -Block 0028 [ 58]: c28509cb9041444e -Block 0028 [ 59]: f36347f3390a1e11 -Block 0028 [ 60]: ab7c16ee3e5803a5 -Block 0028 [ 61]: 0de99e30139c5009 -Block 0028 [ 62]: 6d17d8c75edb2365 -Block 0028 [ 63]: cfb612cdaf8f4af7 -Block 0028 [ 64]: f4df991c468e2438 -Block 0028 [ 65]: 2899f895e46033fc -Block 0028 [ 66]: 75ad9f046f559763 -Block 0028 [ 67]: cbec52939ec63cda -Block 0028 [ 68]: c7a89aea82d11cfd -Block 0028 [ 69]: b01c19568317176c -Block 0028 [ 70]: 0d6c0a5b0484270d -Block 0028 [ 71]: 9bb0780452840077 -Block 0028 [ 72]: 3f2c4a2039120ffc -Block 0028 [ 73]: 987360f6050272c0 -Block 0028 [ 74]: 801dfe8bb2f2679e -Block 0028 [ 75]: 220a91558f9fb887 -Block 0028 [ 76]: f9412b28325f93fe -Block 0028 [ 77]: bd02fcadc4e5ba2b -Block 0028 [ 78]: 0db3de28db8c9ac9 -Block 0028 [ 79]: 368f26c4652a64dd -Block 0028 [ 80]: d6c337bf5f03ac89 -Block 0028 [ 81]: 4c714a4305e3aab9 -Block 0028 [ 82]: e6af815ca778f926 -Block 0028 [ 83]: e1859b016348fdbc -Block 0028 [ 84]: b8f5b3c3c49c4cf3 -Block 0028 [ 85]: 670773281ca0da2a -Block 0028 [ 86]: 920d99d5e17eeb64 -Block 0028 [ 87]: 3a864dcfa57eb353 -Block 0028 [ 88]: 0d1b7223e949754f -Block 0028 [ 89]: 0bfc2f27302028c6 -Block 0028 [ 90]: ebca4178f60078f8 -Block 0028 [ 91]: 4ccc4d65bbdc0bed -Block 0028 [ 92]: 8e5363eb76fb3293 -Block 0028 [ 93]: 093c5e82b6095b67 -Block 0028 [ 94]: d0068768e1bdec5b -Block 0028 [ 95]: 0a00c488260db6d5 -Block 0028 [ 96]: 7f7d0d7ac47a81ee -Block 0028 [ 97]: 3ae04e17dd01c279 -Block 0028 [ 98]: f8e6ac29f780be7f -Block 0028 [ 99]: 19c50b7052ac4f44 -Block 0028 [100]: 5303f461feccb497 -Block 0028 [101]: 1854a6ec35aee128 -Block 0028 [102]: db1b041a1ee7a79d -Block 0028 [103]: 7e81f884f7a0a6fc -Block 0028 [104]: bf9bb929bcb9e874 -Block 0028 [105]: 336e80069f3dedd2 -Block 0028 [106]: 035b55ca20c76598 -Block 0028 [107]: b293f79a77cda448 -Block 0028 [108]: 9a763760c91b6714 -Block 0028 [109]: 13302f9a51a34c5a -Block 0028 [110]: 6b2eb8d6aa3b5277 -Block 0028 [111]: bf17d582179db4ce -Block 0028 [112]: 6357d1d0595e0b06 -Block 0028 [113]: 0ea204e3887f1b12 -Block 0028 [114]: ab106f68ffe98952 -Block 0028 [115]: edccf1f4a537c038 -Block 0028 [116]: 4dd30ae007433edb -Block 0028 [117]: 70bf808ff6ed6e4e -Block 0028 [118]: 1bc10a2d27b5e5fc -Block 0028 [119]: cc9bafd348bf29df -Block 0028 [120]: 4958087b121642b4 -Block 0028 [121]: 8ffec5b4c6f60cc5 -Block 0028 [122]: 6d94d7276ac67cee -Block 0028 [123]: 4a878a121591ea5c -Block 0028 [124]: e5ae3c3689f8ab9f -Block 0028 [125]: 779480dd69065bb8 -Block 0028 [126]: be6df4df52c18560 -Block 0028 [127]: 6f1fb1a9cf64874f -Block 0029 [ 0]: 0207741c8146dfa3 -Block 0029 [ 1]: 406a47b4c1e4b7cf -Block 0029 [ 2]: ab350bd11dae3ab1 -Block 0029 [ 3]: b5fcdce3f5af5c51 -Block 0029 [ 4]: 03b1acacafc20140 -Block 0029 [ 5]: 2a425cee09634812 -Block 0029 [ 6]: e552ee3615a33f43 -Block 0029 [ 7]: 5befe9ff059e7bfb -Block 0029 [ 8]: 6794a847fab871cc -Block 0029 [ 9]: 8ff9bbbcffb980a5 -Block 0029 [ 10]: 7cb0bc045830ef7b -Block 0029 [ 11]: 859d5d5109ac4f06 -Block 0029 [ 12]: e8250fd2cc3dcdef -Block 0029 [ 13]: c3a134684c9dd60e -Block 0029 [ 14]: 227e5b09f927b571 -Block 0029 [ 15]: 68c856cec2a47082 -Block 0029 [ 16]: fce4acd1eb9c2fd6 -Block 0029 [ 17]: 1874384733f72647 -Block 0029 [ 18]: 0bb44bf1fef26640 -Block 0029 [ 19]: b6b304e2fa351043 -Block 0029 [ 20]: 751d92d62903ef35 -Block 0029 [ 21]: e78b53c855c5c602 -Block 0029 [ 22]: 0812dcb3268b6d78 -Block 0029 [ 23]: bc792d9a692eafd5 -Block 0029 [ 24]: 33b96da127e9ce75 -Block 0029 [ 25]: 70e99f06a02da8be -Block 0029 [ 26]: a53adf7c364dc22c -Block 0029 [ 27]: e141512a24b1f401 -Block 0029 [ 28]: cd3ca1c7a59cd510 -Block 0029 [ 29]: 0bd3b7d6078e4eed -Block 0029 [ 30]: ab7c6554f4c11436 -Block 0029 [ 31]: 89914cb1067af8ee -Block 0029 [ 32]: c75b936a76746c31 -Block 0029 [ 33]: 024785728db3a789 -Block 0029 [ 34]: 9e58b0afbfdfeb19 -Block 0029 [ 35]: 373f25548779c51f -Block 0029 [ 36]: 543724293d0d8c2d -Block 0029 [ 37]: 62aeaa9b19808110 -Block 0029 [ 38]: 93f21989d783801c -Block 0029 [ 39]: 775dffbce376deb4 -Block 0029 [ 40]: 6f426ae9af1c783e -Block 0029 [ 41]: 48bf94b9dbd7ee4b -Block 0029 [ 42]: f094f91d25ee627d -Block 0029 [ 43]: 9a827b7dc6e0896d -Block 0029 [ 44]: 7910f54893fa8fc3 -Block 0029 [ 45]: 37b30dc28c6049bc -Block 0029 [ 46]: 29ef9da058cb5b84 -Block 0029 [ 47]: 5c403d77779566e1 -Block 0029 [ 48]: 4f409c72a1e0fdec -Block 0029 [ 49]: ae587790d92a03af -Block 0029 [ 50]: 69e0a91db119465e -Block 0029 [ 51]: 0ee30615e5df5ecc -Block 0029 [ 52]: 3dca48a0c98120d6 -Block 0029 [ 53]: 77e254ca3afb9f84 -Block 0029 [ 54]: 7bc434ae14f6f06c -Block 0029 [ 55]: 9775face0be26982 -Block 0029 [ 56]: 6d2f36d11088d913 -Block 0029 [ 57]: 4aa3cc0bff9a1e5c -Block 0029 [ 58]: 005d8f72e50124cf -Block 0029 [ 59]: d76cbf27873f19e3 -Block 0029 [ 60]: 0d4f957d7949663e -Block 0029 [ 61]: 14f198a3447b7039 -Block 0029 [ 62]: 0622617d5f71b2d4 -Block 0029 [ 63]: 8abb43cfcbca2586 -Block 0029 [ 64]: 478b55022fdb873e -Block 0029 [ 65]: 24cd75b9b9e06db9 -Block 0029 [ 66]: 49acbda91ffaa950 -Block 0029 [ 67]: 15c03d8770ed999d -Block 0029 [ 68]: 17a0e368a53308b3 -Block 0029 [ 69]: 4f61904cdaf364f3 -Block 0029 [ 70]: 92db2822da9abc66 -Block 0029 [ 71]: b89ef67c8cd09463 -Block 0029 [ 72]: fdf5ce73da75a752 -Block 0029 [ 73]: 715da75d29a11d0c -Block 0029 [ 74]: 1c4a97738457a7c0 -Block 0029 [ 75]: 01cda83c3413395e -Block 0029 [ 76]: 4a621ae732bad57a -Block 0029 [ 77]: 41f23ad22e523495 -Block 0029 [ 78]: dc7098ac146ea569 -Block 0029 [ 79]: a2cf720400e39c0c -Block 0029 [ 80]: 09aa559ce750a2c7 -Block 0029 [ 81]: 5a44bd0df4be581e -Block 0029 [ 82]: 8a77c840fcaabe6b -Block 0029 [ 83]: bbe29d575a3978ef -Block 0029 [ 84]: 790f91e76c826d67 -Block 0029 [ 85]: c2bceae4dd73f8ba -Block 0029 [ 86]: 683088167d2926ba -Block 0029 [ 87]: 49957770e745d01d -Block 0029 [ 88]: 17b96ee43d3a76c5 -Block 0029 [ 89]: 43328a4e158c81cf -Block 0029 [ 90]: e76baf7b9aef84a3 -Block 0029 [ 91]: d4c264c8a6994714 -Block 0029 [ 92]: 8ee8e576bebec7bf -Block 0029 [ 93]: 6411980b914b9662 -Block 0029 [ 94]: 745acc8565779744 -Block 0029 [ 95]: 30ce9cf530824795 -Block 0029 [ 96]: b78a1629bb41a6d6 -Block 0029 [ 97]: 67ad7c8dc3e08d91 -Block 0029 [ 98]: c0146364b77acb3c -Block 0029 [ 99]: 75bbe8fafef1de11 -Block 0029 [100]: 795f2830cecab6eb -Block 0029 [101]: 3ac583d316cf3a15 -Block 0029 [102]: 9d0b885e2fbcf626 -Block 0029 [103]: c91bea4d5cdd103d -Block 0029 [104]: d9d5df2d889b62cb -Block 0029 [105]: aa660e50a1c8ca3b -Block 0029 [106]: 83ad208abfb4a5db -Block 0029 [107]: 0c41929e4aac98a6 -Block 0029 [108]: 732c3d845a3dd9ad -Block 0029 [109]: 5d90d1e6b10da9ba -Block 0029 [110]: 7f5899546758538e -Block 0029 [111]: 81035b8ef4ccb393 -Block 0029 [112]: 3bce5002a0e42a9e -Block 0029 [113]: 49728c1521571871 -Block 0029 [114]: 2dde86b7d59ec9f6 -Block 0029 [115]: 982676db6df43385 -Block 0029 [116]: 5cba52ad4c42077a -Block 0029 [117]: 0172b3408cbe8d23 -Block 0029 [118]: 3f410a84fb1722f6 -Block 0029 [119]: 85bdb25c8eceda0e -Block 0029 [120]: 4ff1c2d46a2b487b -Block 0029 [121]: 9fe47fbe9734d275 -Block 0029 [122]: 4b396e3adbd6abcc -Block 0029 [123]: 4f2dd219ae0a599d -Block 0029 [124]: bf73abc3293e108c -Block 0029 [125]: 158517dd7f973123 -Block 0029 [126]: 9d70f00766295708 -Block 0029 [127]: 67ad678c811a378e -Block 0030 [ 0]: 1f9e38f15c0b4acf -Block 0030 [ 1]: f0e0a264cd839857 -Block 0030 [ 2]: 50bc35d79237b54e -Block 0030 [ 3]: 3857d320bcefd875 -Block 0030 [ 4]: 2d1318855b016e6c -Block 0030 [ 5]: 967241dbadfdb565 -Block 0030 [ 6]: 800753ca23565b99 -Block 0030 [ 7]: fee608d250770302 -Block 0030 [ 8]: 7dddd4f29e607658 -Block 0030 [ 9]: 819a24edf268fcb2 -Block 0030 [ 10]: 6880a1d3d9812700 -Block 0030 [ 11]: 57d3fc07966300b6 -Block 0030 [ 12]: 8f946b77f29001d7 -Block 0030 [ 13]: bb0abfac9eb9dda3 -Block 0030 [ 14]: 34839f915d84aa17 -Block 0030 [ 15]: 30688be9d1e7e726 -Block 0030 [ 16]: 6b1f946cf0e14b98 -Block 0030 [ 17]: 0b5de2f45696efef -Block 0030 [ 18]: 6fb9961aa06875b7 -Block 0030 [ 19]: 7bc7176c8c9874e2 -Block 0030 [ 20]: 840507101c0c10ec -Block 0030 [ 21]: 8f9fcb5775408171 -Block 0030 [ 22]: b7f561bf6420bf4b -Block 0030 [ 23]: 408d65ea6ace1994 -Block 0030 [ 24]: 72b7b6ad2a8710e1 -Block 0030 [ 25]: b959adeff619c82d -Block 0030 [ 26]: 7b8858d87a632c81 -Block 0030 [ 27]: c8b936af201270e6 -Block 0030 [ 28]: cfe54bccb6a654a6 -Block 0030 [ 29]: 907e9744d4483668 -Block 0030 [ 30]: 8d3199d677ba43d4 -Block 0030 [ 31]: 257ce84b68bad3f2 -Block 0030 [ 32]: c824aa1982671945 -Block 0030 [ 33]: e2e9dd16e403e398 -Block 0030 [ 34]: 1daa88aeb3675d8d -Block 0030 [ 35]: 9c8265c6f92c91e9 -Block 0030 [ 36]: 95e78fae8367fd87 -Block 0030 [ 37]: 68dd4415761ad758 -Block 0030 [ 38]: 1eb7f341ac811efb -Block 0030 [ 39]: a777790a8ef0ba3e -Block 0030 [ 40]: 237e7e319e1876da -Block 0030 [ 41]: 10d59f907a261f1a -Block 0030 [ 42]: 5f6993574dacb849 -Block 0030 [ 43]: 4aafd981472ab898 -Block 0030 [ 44]: 7a39e6aa861f86e4 -Block 0030 [ 45]: de79f33874b17af6 -Block 0030 [ 46]: 5ae77d3ff4d97e32 -Block 0030 [ 47]: bfb9a79eac24988b -Block 0030 [ 48]: cd4b0f3306bc2285 -Block 0030 [ 49]: 79587c4db17ce2d5 -Block 0030 [ 50]: df3c2a26a81def00 -Block 0030 [ 51]: f91aa04a4584fb96 -Block 0030 [ 52]: 319293679662fb6e -Block 0030 [ 53]: 2cf5cb1c39d7e349 -Block 0030 [ 54]: d8c7d314fde62100 -Block 0030 [ 55]: d49acb9f84ddeee0 -Block 0030 [ 56]: b308ba9300dac74d -Block 0030 [ 57]: 56ec31602722bdd4 -Block 0030 [ 58]: 5d31ea5dfd133be3 -Block 0030 [ 59]: 61dfe7872e811d02 -Block 0030 [ 60]: 1a82dbdb52cd4ea4 -Block 0030 [ 61]: 599ddbd51c7386bf -Block 0030 [ 62]: 4186c201a09ea371 -Block 0030 [ 63]: cf5c3bfef67e4229 -Block 0030 [ 64]: d8dcbf137d92f555 -Block 0030 [ 65]: 83e7b079d384deba -Block 0030 [ 66]: 5c92cecdadee4f1f -Block 0030 [ 67]: 02bb23eda398826e -Block 0030 [ 68]: 9f1eaaf0ab692fdd -Block 0030 [ 69]: 3e762c6854d3d4b4 -Block 0030 [ 70]: 3d9920cae2bc168e -Block 0030 [ 71]: 03730d8cf69a8947 -Block 0030 [ 72]: 57e3e8be34628ccf -Block 0030 [ 73]: dc8cc84b253302fa -Block 0030 [ 74]: f34b5dd75cf375ab -Block 0030 [ 75]: eb39e41a160e9bd5 -Block 0030 [ 76]: 19cb451eeae042ac -Block 0030 [ 77]: 31ba85ddb8a465bd -Block 0030 [ 78]: 86493a0e610f4c97 -Block 0030 [ 79]: 2f3a02b6f7c68509 -Block 0030 [ 80]: 5accf78953cbe2f6 -Block 0030 [ 81]: 1a5b00f4a378d40c -Block 0030 [ 82]: d21871f9f4a302dc -Block 0030 [ 83]: 366e91b6368ce852 -Block 0030 [ 84]: 871f4b10870f96b3 -Block 0030 [ 85]: ca76bcbeb17e4388 -Block 0030 [ 86]: 4a9a238334ed233d -Block 0030 [ 87]: d548e679c135e3ec -Block 0030 [ 88]: 14caee6503e8b5c7 -Block 0030 [ 89]: c313e7bdbf043aae -Block 0030 [ 90]: 2ea1a9cb349a2e18 -Block 0030 [ 91]: a66ff32802eee268 -Block 0030 [ 92]: 4f74c552992434ad -Block 0030 [ 93]: 1fb689ea6ebf5016 -Block 0030 [ 94]: c61a5622a5650bdb -Block 0030 [ 95]: bf3f5fa2876962ad -Block 0030 [ 96]: 4a35ba57808f1408 -Block 0030 [ 97]: b9cc98fb701693e8 -Block 0030 [ 98]: 4f0191eeaa9c9104 -Block 0030 [ 99]: fd94c892d297bc01 -Block 0030 [100]: ee5b3c3aec2fc3e6 -Block 0030 [101]: 944c5da066f03024 -Block 0030 [102]: 49bc29ef54fa14c6 -Block 0030 [103]: 103dab1249b26ed0 -Block 0030 [104]: fa3f5194e6aa4932 -Block 0030 [105]: bd5a531ed38fe96e -Block 0030 [106]: 32eb829d00e9e523 -Block 0030 [107]: cd00296881ca0348 -Block 0030 [108]: fa39b8a99f7ab372 -Block 0030 [109]: 614cc3127e419850 -Block 0030 [110]: edeb6ab484faf67f -Block 0030 [111]: 02c355973c574d1d -Block 0030 [112]: 198b58c82f416d64 -Block 0030 [113]: d332fa14092a550a -Block 0030 [114]: bc2317ef3bdb5e88 -Block 0030 [115]: 31bc87b1ed42e2a9 -Block 0030 [116]: a8dd6cdbbb306d5f -Block 0030 [117]: b5c2153c6e5cc25e -Block 0030 [118]: 8aa4063415e7c7ef -Block 0030 [119]: d11033bd5e3cb501 -Block 0030 [120]: d9910a22a988ffee -Block 0030 [121]: c54b0e343365f143 -Block 0030 [122]: b6bac0a513cb7c38 -Block 0030 [123]: 8a797f119a8fa477 -Block 0030 [124]: 8a9fdb5f6f892ef3 -Block 0030 [125]: d4abea5cf9bb068a -Block 0030 [126]: 81388ea4ad703fd7 -Block 0030 [127]: 00ad23051eb6accc -Block 0031 [ 0]: c214853efbb75de4 -Block 0031 [ 1]: aad6885569088f52 -Block 0031 [ 2]: d86f98b36790f5b8 -Block 0031 [ 3]: e77655a17cbb7f4c -Block 0031 [ 4]: 0ecb507ed5dc329a -Block 0031 [ 5]: 5ed932eb7a74d4fa -Block 0031 [ 6]: 4585ba06399f2072 -Block 0031 [ 7]: 1ed9ff754566cca5 -Block 0031 [ 8]: 32a32d4a331b0087 -Block 0031 [ 9]: a3ca9ccdb628ef78 -Block 0031 [ 10]: 7306560670f1d0c2 -Block 0031 [ 11]: d4a872959695ec2c -Block 0031 [ 12]: 80eb229e4932edff -Block 0031 [ 13]: d101308963991194 -Block 0031 [ 14]: 73085ee7d8211718 -Block 0031 [ 15]: 161e14bd7afc6265 -Block 0031 [ 16]: 66bfe3b7b09efea6 -Block 0031 [ 17]: 7c9e052377cc0d52 -Block 0031 [ 18]: 14265c7dc1f5df42 -Block 0031 [ 19]: d4b6f6fb6358f6f6 -Block 0031 [ 20]: 881eb8e86ab22017 -Block 0031 [ 21]: 118f820d2363c8c9 -Block 0031 [ 22]: aff520d67dd66e3b -Block 0031 [ 23]: 29aec74c592a814a -Block 0031 [ 24]: 0ed40fccb5f07c87 -Block 0031 [ 25]: 51941c3d5c31379c -Block 0031 [ 26]: f7cbf86cac7c6434 -Block 0031 [ 27]: f61fa7f0e2b3cbc8 -Block 0031 [ 28]: 9f5e9f66cf4114ad -Block 0031 [ 29]: 0652344032753e1b -Block 0031 [ 30]: fef2a3ea3dfcf379 -Block 0031 [ 31]: a6fea6258e518ebc -Block 0031 [ 32]: 856a99f86c7e762d -Block 0031 [ 33]: 42e85fcd24e8b41e -Block 0031 [ 34]: 148d9e623e851dea -Block 0031 [ 35]: e76f445a76772983 -Block 0031 [ 36]: 361241968174001f -Block 0031 [ 37]: 83b64baebf5a4908 -Block 0031 [ 38]: d3373289c148463a -Block 0031 [ 39]: 639a1909b1574a93 -Block 0031 [ 40]: 1756d9dec3da6a64 -Block 0031 [ 41]: 7a2bf952a65a0da7 -Block 0031 [ 42]: 25e97e5cc04b243b -Block 0031 [ 43]: bb33ad4b697daeed -Block 0031 [ 44]: cd751a3f5385f8e1 -Block 0031 [ 45]: 9ce29b4e243aa4c9 -Block 0031 [ 46]: 98f94b6f1479af37 -Block 0031 [ 47]: 8bcfa0eb52e00b18 -Block 0031 [ 48]: afbf5c00f6b6342a -Block 0031 [ 49]: d754c66aed0d0132 -Block 0031 [ 50]: d5e4093177c9e92d -Block 0031 [ 51]: 61bab57ba23847d3 -Block 0031 [ 52]: 1fc3b0cfce64bb77 -Block 0031 [ 53]: 0f98a6bc191d3213 -Block 0031 [ 54]: 7e609553847c0e6f -Block 0031 [ 55]: 361304bb6138aac0 -Block 0031 [ 56]: 878872e076fc08aa -Block 0031 [ 57]: 6c153b5fd7d11503 -Block 0031 [ 58]: 06b4f4ad17802f4d -Block 0031 [ 59]: 6d77ff7b0f34ee7c -Block 0031 [ 60]: 670dd85ba6194fca -Block 0031 [ 61]: 5671b23c77e3d057 -Block 0031 [ 62]: 35119e2f853fbc9d -Block 0031 [ 63]: def753f2a7ef264a -Block 0031 [ 64]: e85bdbe442ed3f43 -Block 0031 [ 65]: f4fc248a745d8f9c -Block 0031 [ 66]: 9ba20fdd79e80b8c -Block 0031 [ 67]: b6d9f5945f9a664d -Block 0031 [ 68]: 20fbd28b785e0329 -Block 0031 [ 69]: f85e52ac3767b3f5 -Block 0031 [ 70]: 2b1eb317ddab4fa8 -Block 0031 [ 71]: 93cfe1a3f0d85bf0 -Block 0031 [ 72]: d58de87c9917fb35 -Block 0031 [ 73]: b6d7bcd756819f50 -Block 0031 [ 74]: 8de20a6619d151d8 -Block 0031 [ 75]: 87bd14b028d9216c -Block 0031 [ 76]: 15a2eba464d56e8f -Block 0031 [ 77]: 2465311173907873 -Block 0031 [ 78]: eb9c61925e7c58b3 -Block 0031 [ 79]: 0ed7cbeb1492c923 -Block 0031 [ 80]: 77a798a571f4450a -Block 0031 [ 81]: 482b893c546ff4a6 -Block 0031 [ 82]: 39ac176fb2b483db -Block 0031 [ 83]: 32437a31965a733c -Block 0031 [ 84]: be933e433f586338 -Block 0031 [ 85]: 40f25a7ed2c5120c -Block 0031 [ 86]: 49d2f77c6aff30fc -Block 0031 [ 87]: a1ad34b9bf94bf07 -Block 0031 [ 88]: a77f1a70cdb0dd06 -Block 0031 [ 89]: 106afffa50facc31 -Block 0031 [ 90]: ba8826e4219dc476 -Block 0031 [ 91]: e02982181e0870ee -Block 0031 [ 92]: 8480c3aae6e896aa -Block 0031 [ 93]: 297f2c7a272a8b2f -Block 0031 [ 94]: c5036bb595909a84 -Block 0031 [ 95]: a08327fabb4d3fb8 -Block 0031 [ 96]: 53f22cc5481afc88 -Block 0031 [ 97]: f067dcc8b804378f -Block 0031 [ 98]: 17894a8680e925b3 -Block 0031 [ 99]: 6078d7556d2fcdfc -Block 0031 [100]: 2a83f75567f6b751 -Block 0031 [101]: 80fb55cfa65a6155 -Block 0031 [102]: db56da1e25853d68 -Block 0031 [103]: f211137a22a34c75 -Block 0031 [104]: ceeea03f75fa41c6 -Block 0031 [105]: a56305173372f075 -Block 0031 [106]: 13bcf10f6f52c543 -Block 0031 [107]: 8cce231f5c882992 -Block 0031 [108]: 2dd59abd3326b1d0 -Block 0031 [109]: bf2adce673d93e75 -Block 0031 [110]: aff796ec3520ea12 -Block 0031 [111]: ed4a55e41b122765 -Block 0031 [112]: 51e63bc4199c4fc4 -Block 0031 [113]: 64631c52d2bbe92a -Block 0031 [114]: e30d2cbd6fc1fb0e -Block 0031 [115]: 6b67d0c31a71f6d8 -Block 0031 [116]: 53093eabfb3a0e16 -Block 0031 [117]: 4cdd35a55bd56663 -Block 0031 [118]: bb4297a99e734daf -Block 0031 [119]: 0d5dd07557b2d5c7 -Block 0031 [120]: fb351e6ce72b7a37 -Block 0031 [121]: 06f324ad64676de7 -Block 0031 [122]: c18903237861cf21 -Block 0031 [123]: 1672989332c783ea -Block 0031 [124]: 4a14c84a31058542 -Block 0031 [125]: 25c544df9faab7be -Block 0031 [126]: 4627ff2abce83845 -Block 0031 [127]: 6316fd56c69344f1 - - After pass 2: -Block 0000 [ 0]: d2bfbbc5538d0691 -Block 0000 [ 1]: fdd30b9eda25954b -Block 0000 [ 2]: 3acab43f4e2d35bd -Block 0000 [ 3]: 6a7098a3676964bd -Block 0000 [ 4]: bea6794f73dc88ec -Block 0000 [ 5]: 837d3ad2b07a12c9 -Block 0000 [ 6]: 3e2421fcf8eda94e -Block 0000 [ 7]: 3ca9a53c07522ccd -Block 0000 [ 8]: 863e66bbd66c6273 -Block 0000 [ 9]: 17ae74a98b994202 -Block 0000 [ 10]: 4ff8af313326b54b -Block 0000 [ 11]: a12468f5a7ae468d -Block 0000 [ 12]: fa69e7a7bac72caa -Block 0000 [ 13]: 5cdc71c04b8b8306 -Block 0000 [ 14]: 85b8eafdbb7f9d3d -Block 0000 [ 15]: c3a68f3de40b258a -Block 0000 [ 16]: f10227d4f1d7f387 -Block 0000 [ 17]: 68983d628ad03716 -Block 0000 [ 18]: 59041153fb987a38 -Block 0000 [ 19]: a2e96838b1930c0c -Block 0000 [ 20]: f775642275053088 -Block 0000 [ 21]: 3dd0a9996c16b353 -Block 0000 [ 22]: 30de7ea84550d566 -Block 0000 [ 23]: 52ff98bec2f102e3 -Block 0000 [ 24]: d7bf180f18129d8c -Block 0000 [ 25]: 0b20025f9425bdd8 -Block 0000 [ 26]: 34c4cf7f7094b7f4 -Block 0000 [ 27]: 04d626f3b9f4296b -Block 0000 [ 28]: 3c327a1aeab45c96 -Block 0000 [ 29]: faf97a90c9cee32f -Block 0000 [ 30]: c79d3bc514100ac0 -Block 0000 [ 31]: 478d91a10654e435 -Block 0000 [ 32]: 3a251ea52e5265b0 -Block 0000 [ 33]: c2d308d9c012c0b7 -Block 0000 [ 34]: 6f12cd0ba5e43e8e -Block 0000 [ 35]: c60725db674efc2f -Block 0000 [ 36]: 84b934ebec83b87a -Block 0000 [ 37]: d1f2a34706cac386 -Block 0000 [ 38]: 85cf00381149b292 -Block 0000 [ 39]: f2d45baf330d70fa -Block 0000 [ 40]: 949ac580ffdee39f -Block 0000 [ 41]: 939d7c5244ce5026 -Block 0000 [ 42]: 62604d407db2dc10 -Block 0000 [ 43]: c561714c5baca244 -Block 0000 [ 44]: d793e68d21b8d785 -Block 0000 [ 45]: 9218155894eb4668 -Block 0000 [ 46]: a6d83e86dd08b536 -Block 0000 [ 47]: b12166b5fbf2622b -Block 0000 [ 48]: 087fc2807f6b0240 -Block 0000 [ 49]: a953331bf25793c6 -Block 0000 [ 50]: 395e56f54f367d58 -Block 0000 [ 51]: 71844b0ad60a4348 -Block 0000 [ 52]: bff48acffc4f1d86 -Block 0000 [ 53]: 08207d54623b8eff -Block 0000 [ 54]: d7976065b56b168b -Block 0000 [ 55]: 7a0a7f11ededbe27 -Block 0000 [ 56]: 5feed8c252d86bb0 -Block 0000 [ 57]: 9890890cfa9ac4dd -Block 0000 [ 58]: 4bccf79dae011a67 -Block 0000 [ 59]: 2cdc7e852e3325aa -Block 0000 [ 60]: 4b3f2056e3d09a17 -Block 0000 [ 61]: 3e3c49a5be718d8f -Block 0000 [ 62]: f3eeeabf2e588a37 -Block 0000 [ 63]: 1d163fbaea85c51e -Block 0000 [ 64]: 4e870740a63bfebe -Block 0000 [ 65]: fdea2486efd299f9 -Block 0000 [ 66]: 63c4c7642195538d -Block 0000 [ 67]: 6aa09c2a021a7e39 -Block 0000 [ 68]: 383de7f9fd0477e9 -Block 0000 [ 69]: a96d36027d5d40fa -Block 0000 [ 70]: 0c3389062b014fce -Block 0000 [ 71]: c114edae155883af -Block 0000 [ 72]: d34997d5da0d7faf -Block 0000 [ 73]: bb1a90429091d672 -Block 0000 [ 74]: f10646dc7472f874 -Block 0000 [ 75]: 799bad35f1b4b596 -Block 0000 [ 76]: 59b72d2dc1ec8265 -Block 0000 [ 77]: f862830aa16be38e -Block 0000 [ 78]: 87d27855b30d2e10 -Block 0000 [ 79]: 1b83b64e975578fb -Block 0000 [ 80]: 10b85998fc9683cb -Block 0000 [ 81]: 9e77d6fd752f56e4 -Block 0000 [ 82]: 0abae223a92a3866 -Block 0000 [ 83]: 50115aa654949866 -Block 0000 [ 84]: c7fce8bf28b52b61 -Block 0000 [ 85]: 7eab21dc322adcc7 -Block 0000 [ 86]: 385bf7b817b855a6 -Block 0000 [ 87]: 89a96d45fab99e0b -Block 0000 [ 88]: a4d612ec2b949d99 -Block 0000 [ 89]: 485ab81e2aa987c1 -Block 0000 [ 90]: fb668789e6a7cdb4 -Block 0000 [ 91]: 382820855bb0f925 -Block 0000 [ 92]: 4aefec40e2182c2e -Block 0000 [ 93]: d0bbfd373964563b -Block 0000 [ 94]: 522f590a62b06af5 -Block 0000 [ 95]: 4673911857dee9d0 -Block 0000 [ 96]: 60b473dcc47e9f98 -Block 0000 [ 97]: 58e120f49b52a745 -Block 0000 [ 98]: 1ef5e595d1f45259 -Block 0000 [ 99]: b864a94f27e6dced -Block 0000 [100]: 74a270f2b6b8048d -Block 0000 [101]: 79d8ba2427c45f6f -Block 0000 [102]: 43d10923485a498c -Block 0000 [103]: ae95c732560cf5a7 -Block 0000 [104]: eee43f84fb4f00c8 -Block 0000 [105]: 4f2c7238bed818d3 -Block 0000 [106]: 3021c423f992eea9 -Block 0000 [107]: 40e6a0f228776314 -Block 0000 [108]: f57ddf4d9227d927 -Block 0000 [109]: 67c9b4dd17f940f8 -Block 0000 [110]: 9e79fc2dfd0c3458 -Block 0000 [111]: 17f629e2d71e0631 -Block 0000 [112]: bf50ffc05622f1a1 -Block 0000 [113]: f722cd6173d05451 -Block 0000 [114]: aa7dd6a9bdb8fde7 -Block 0000 [115]: 96e948a8fffdad2b -Block 0000 [116]: 39fdd84328ad4a48 -Block 0000 [117]: 9ac11eda284697b2 -Block 0000 [118]: cd6a816bc4ef9279 -Block 0000 [119]: 7a9b9ff5570151d7 -Block 0000 [120]: 989fb3eccde11a2c -Block 0000 [121]: 42d0105e6df28303 -Block 0000 [122]: 385308a61f36a6b7 -Block 0000 [123]: d5d3b82a09e03e4e -Block 0000 [124]: 4eb69b6b8bdb50dc -Block 0000 [125]: b0bc8a268c477342 -Block 0000 [126]: d227cc6b292c97f3 -Block 0000 [127]: 5c14f1f815132a2d -Block 0001 [ 0]: 75c183401903f625 -Block 0001 [ 1]: 8c20fa12abcbce89 -Block 0001 [ 2]: a5ead7a57718ec5e -Block 0001 [ 3]: 18c5a981135c282c -Block 0001 [ 4]: 0590129aad6e72cf -Block 0001 [ 5]: e3dd77e6a4aac515 -Block 0001 [ 6]: 31521cb6071f820f -Block 0001 [ 7]: 172736e02c9cf05e -Block 0001 [ 8]: 7634b8f8e1fc0ce9 -Block 0001 [ 9]: e6812a3bc4ebf23d -Block 0001 [ 10]: 98e977becd8b7a7c -Block 0001 [ 11]: e65ec3b60b1db8e4 -Block 0001 [ 12]: 4f6113dafc47d70a -Block 0001 [ 13]: c85682ce4422cad9 -Block 0001 [ 14]: b32004f710920375 -Block 0001 [ 15]: 694cc7f9f95731e3 -Block 0001 [ 16]: 605bb861fc60749f -Block 0001 [ 17]: 72cec74a23d1eff0 -Block 0001 [ 18]: 6eac4f1a2540da41 -Block 0001 [ 19]: 5430aa5aa99cb80d -Block 0001 [ 20]: 8544c56488bb9e2d -Block 0001 [ 21]: 06a7423f86b8d125 -Block 0001 [ 22]: c7b7d5dd29a07e96 -Block 0001 [ 23]: ff83461fd40e9e74 -Block 0001 [ 24]: 9b4d52a073fb9d5c -Block 0001 [ 25]: 7415a3510a0a6a00 -Block 0001 [ 26]: 317d09aaf7cb9ba8 -Block 0001 [ 27]: cc2cfaf8b506d014 -Block 0001 [ 28]: b337c6e47c9d799e -Block 0001 [ 29]: ab67888b9e46f720 -Block 0001 [ 30]: 2affc2a33c986c0c -Block 0001 [ 31]: b2842aebb3e5d1e4 -Block 0001 [ 32]: b275965d992ff5fc -Block 0001 [ 33]: c39ddc5e9c6e04eb -Block 0001 [ 34]: 191f7cc2b3b8d5cb -Block 0001 [ 35]: 72937670bd7fb9d7 -Block 0001 [ 36]: 0645f6e8e81e617f -Block 0001 [ 37]: ef0c4ca70bf25f7a -Block 0001 [ 38]: a23a4bae4d1ef4ab -Block 0001 [ 39]: e4fead0ff40a9c42 -Block 0001 [ 40]: e3635b74da13fe52 -Block 0001 [ 41]: 149997696a79efdf -Block 0001 [ 42]: b4894283887470d6 -Block 0001 [ 43]: 5e8d46c852abb1fa -Block 0001 [ 44]: a820e4585c0fe1d5 -Block 0001 [ 45]: c3a70d7cd439a327 -Block 0001 [ 46]: 30744765900a5610 -Block 0001 [ 47]: 28ddbf796851f228 -Block 0001 [ 48]: f2581f003f82cfb1 -Block 0001 [ 49]: 0439eb009462786f -Block 0001 [ 50]: 15a35e8df68cff6b -Block 0001 [ 51]: ec8be6cf6684a129 -Block 0001 [ 52]: ad3f4e12a3154e8e -Block 0001 [ 53]: 5916f409d829443e -Block 0001 [ 54]: 8800db5cbfcb15a5 -Block 0001 [ 55]: 8d9e9349289e03dd -Block 0001 [ 56]: 19c47c8106c8577b -Block 0001 [ 57]: f88a37de8eeefed1 -Block 0001 [ 58]: 5eeed049b2ecec0e -Block 0001 [ 59]: b112cd4c54df3ac3 -Block 0001 [ 60]: 4ad2ec8a421490c4 -Block 0001 [ 61]: 9bc263ce61103790 -Block 0001 [ 62]: 4a730d5c30feecd0 -Block 0001 [ 63]: ffa189cc98d79651 -Block 0001 [ 64]: a40b5c0eae44d459 -Block 0001 [ 65]: 7045a68bdce9cb5d -Block 0001 [ 66]: 8f97e54a007d71e2 -Block 0001 [ 67]: ef560075b9d613a0 -Block 0001 [ 68]: a7fc257eb171bfd3 -Block 0001 [ 69]: 4c7082a1a4a5e593 -Block 0001 [ 70]: 500cfcccd795a009 -Block 0001 [ 71]: 80c8f60d8c9f8e30 -Block 0001 [ 72]: 08632801eff5e6ce -Block 0001 [ 73]: 67fbc4d781a5be67 -Block 0001 [ 74]: 7b7d12f4c1a69cfb -Block 0001 [ 75]: 0499393e9a0537b1 -Block 0001 [ 76]: 2646f7e44f09270e -Block 0001 [ 77]: 60ac80d07ac36ca2 -Block 0001 [ 78]: dcc8a040ab3e73f8 -Block 0001 [ 79]: fc12d44434965551 -Block 0001 [ 80]: 8b440689c5dedb15 -Block 0001 [ 81]: a7eae4713960017b -Block 0001 [ 82]: 35c85d575a40d8c5 -Block 0001 [ 83]: 25af4b3b414fea51 -Block 0001 [ 84]: 1cb81be8f18c4966 -Block 0001 [ 85]: 7e03a303fcedc7ce -Block 0001 [ 86]: cf6b0505c1cfd2ec -Block 0001 [ 87]: deaede9a78815a4f -Block 0001 [ 88]: 474545fe9136db82 -Block 0001 [ 89]: ae09452c35b774f6 -Block 0001 [ 90]: 9bbae009dde20ac9 -Block 0001 [ 91]: 935f97a69a6c68a3 -Block 0001 [ 92]: f92ba79f50fc101b -Block 0001 [ 93]: 12ec6069ff1d8542 -Block 0001 [ 94]: 27aa206ebdc64128 -Block 0001 [ 95]: 7e52fad9fc5791d2 -Block 0001 [ 96]: 10d211741d67c7a3 -Block 0001 [ 97]: c79233c1a34adef8 -Block 0001 [ 98]: 19059f2fb6098d55 -Block 0001 [ 99]: e51de33609f86618 -Block 0001 [100]: 2bc0bb88fef64262 -Block 0001 [101]: fa91ada28a84aebe -Block 0001 [102]: 6e02b86736cbf953 -Block 0001 [103]: cd3728d7d6bf9e98 -Block 0001 [104]: 7760845d9d81c2c3 -Block 0001 [105]: 8417879b22777f17 -Block 0001 [106]: cf881e44da6f7662 -Block 0001 [107]: 33e24c6ff1d99839 -Block 0001 [108]: 185cef30e7a37acf -Block 0001 [109]: 161026f1104186da -Block 0001 [110]: 73b72796317bed2d -Block 0001 [111]: 3562d0ff6ee7d268 -Block 0001 [112]: 872a7c67cc9a61bf -Block 0001 [113]: 79c4f22bebdf7b73 -Block 0001 [114]: f7a70fe4b9aeda09 -Block 0001 [115]: df9bceaeb3963845 -Block 0001 [116]: a5a655151f09c222 -Block 0001 [117]: febca01a48f68e1d -Block 0001 [118]: 2c3c859e18149bf3 -Block 0001 [119]: 8839f7dde56b0943 -Block 0001 [120]: a22a95c95645fd5e -Block 0001 [121]: 04d0cd5246f75ac2 -Block 0001 [122]: 965d0c6431059fe9 -Block 0001 [123]: 14e4627253a6c318 -Block 0001 [124]: 39f51177a99f2c70 -Block 0001 [125]: 78df225cea3e8413 -Block 0001 [126]: b486dbb11b49885a -Block 0001 [127]: e4b1362f7ec62876 -Block 0002 [ 0]: be82e39fb23497af -Block 0002 [ 1]: 97f7fc0dc8fa8561 -Block 0002 [ 2]: d305b88dd051b91a -Block 0002 [ 3]: bd8f0dfd151eae83 -Block 0002 [ 4]: 910b545ff2334fcd -Block 0002 [ 5]: 1ef0ece59fef86cd -Block 0002 [ 6]: fe5c03cd20349ba7 -Block 0002 [ 7]: d9782292d3ef95bf -Block 0002 [ 8]: 9d746018ea870fcd -Block 0002 [ 9]: 34db528ff7ce54bf -Block 0002 [ 10]: f301b4da637a91e2 -Block 0002 [ 11]: a1a2d26757179a10 -Block 0002 [ 12]: 02351e156a86d35d -Block 0002 [ 13]: 63143aa712192240 -Block 0002 [ 14]: 7a3ceffdd1a79ee8 -Block 0002 [ 15]: c40088234a6042d6 -Block 0002 [ 16]: eed93e9a2e88a2c7 -Block 0002 [ 17]: b0e0f7875f672d69 -Block 0002 [ 18]: 521f9a10146a7e31 -Block 0002 [ 19]: 39619c7eb1066700 -Block 0002 [ 20]: 5f6312b67651ecb5 -Block 0002 [ 21]: c0ed573071f12360 -Block 0002 [ 22]: eda1d8347de4efbc -Block 0002 [ 23]: 7e0819f293535c13 -Block 0002 [ 24]: ed47b829b1fc489b -Block 0002 [ 25]: 6c95dfd9a580c85b -Block 0002 [ 26]: 6ceb4e97a15ed8a0 -Block 0002 [ 27]: ef840f725146143c -Block 0002 [ 28]: b15bbf822cce3e84 -Block 0002 [ 29]: 72796b2867a1622f -Block 0002 [ 30]: 11d049b8c0e82587 -Block 0002 [ 31]: a4880ed5d4e8824a -Block 0002 [ 32]: 0cdc193f278373f9 -Block 0002 [ 33]: 9b1478114f594a80 -Block 0002 [ 34]: d0e03f2b6994e2b4 -Block 0002 [ 35]: 98b62f2de4e831e1 -Block 0002 [ 36]: 0416c2fdef1a17d6 -Block 0002 [ 37]: 10ad0d51eddd36df -Block 0002 [ 38]: be9b727601c88728 -Block 0002 [ 39]: 3a496f65a2a23980 -Block 0002 [ 40]: cb85f05f72d57364 -Block 0002 [ 41]: bf32c58ac37e31f3 -Block 0002 [ 42]: 7555f66129a05a3c -Block 0002 [ 43]: b09de73b8833d762 -Block 0002 [ 44]: 3aaddc025bc9c5f5 -Block 0002 [ 45]: d51d9b50e7ac1e10 -Block 0002 [ 46]: 72de8083b651b259 -Block 0002 [ 47]: 135411c956b1e691 -Block 0002 [ 48]: ca0aff548d7682d7 -Block 0002 [ 49]: f44b3e4210ba5898 -Block 0002 [ 50]: c691066bf3747eed -Block 0002 [ 51]: c1f9682454c740c5 -Block 0002 [ 52]: ad58f9792291cee0 -Block 0002 [ 53]: d592f5dbe2102500 -Block 0002 [ 54]: 635c299efb84bf42 -Block 0002 [ 55]: 8b80fa8e61d49dd9 -Block 0002 [ 56]: 87235af2e76b8301 -Block 0002 [ 57]: 8b1eb45875d5856a -Block 0002 [ 58]: 0f9b910c3a4fbdb0 -Block 0002 [ 59]: 4993f4819ce98005 -Block 0002 [ 60]: 1105c2cb4c3b7598 -Block 0002 [ 61]: f3b9a1cd3a053dde -Block 0002 [ 62]: e8af8b90c4a83b69 -Block 0002 [ 63]: 286800e9dd5ac648 -Block 0002 [ 64]: 425e495348603270 -Block 0002 [ 65]: 6b733fe715d77c47 -Block 0002 [ 66]: 53904c6dd1292c20 -Block 0002 [ 67]: a9f9a28c965ab818 -Block 0002 [ 68]: c59a31de2f00853a -Block 0002 [ 69]: afe438e57a6e0844 -Block 0002 [ 70]: bba45d22fb183db2 -Block 0002 [ 71]: b70d940e09e1b81d -Block 0002 [ 72]: 045016066a260fd1 -Block 0002 [ 73]: c77660f79caf487a -Block 0002 [ 74]: 19c598233c14b842 -Block 0002 [ 75]: c3058798c27f4e3f -Block 0002 [ 76]: 934c5db22edcef4a -Block 0002 [ 77]: 19d43250721ba51c -Block 0002 [ 78]: e517cfdcc01e129b -Block 0002 [ 79]: 168875877be5927f -Block 0002 [ 80]: d843abd7e0fdc1b3 -Block 0002 [ 81]: d55ac5e832bb21b3 -Block 0002 [ 82]: ac5c89e63cbe234b -Block 0002 [ 83]: 8a85ec876d0bf705 -Block 0002 [ 84]: 9ee8e11fe4759a5b -Block 0002 [ 85]: 968e7afa1b7420c2 -Block 0002 [ 86]: 6cdf8ac8a603bd9b -Block 0002 [ 87]: 023675d7ec048d55 -Block 0002 [ 88]: 06d17b5a31b1c518 -Block 0002 [ 89]: 2c47c4b74b5f2cf5 -Block 0002 [ 90]: 7191cd7ca21b8ab1 -Block 0002 [ 91]: 25dc32663c7b2174 -Block 0002 [ 92]: 28ec825eb4e3ea38 -Block 0002 [ 93]: 60740a51a33ef788 -Block 0002 [ 94]: c7cceed83266a33b -Block 0002 [ 95]: d84585bcd9baa1bb -Block 0002 [ 96]: 9b6f18b525e9b0d4 -Block 0002 [ 97]: eb54d4b34f780348 -Block 0002 [ 98]: 662009e73ec50ab8 -Block 0002 [ 99]: d1c22cb358cd3261 -Block 0002 [100]: 483f9163b91902b3 -Block 0002 [101]: a419d6e4fc164133 -Block 0002 [102]: 18a5cfa5516933a1 -Block 0002 [103]: 9429b99ee10a2064 -Block 0002 [104]: fb78da9d8ceeec6f -Block 0002 [105]: 9c9e8aef683443b3 -Block 0002 [106]: 4534b4fcba3f2646 -Block 0002 [107]: 0a1cf98c003e2e8f -Block 0002 [108]: 9f6f4800073ad33a -Block 0002 [109]: 22b728fc57a6609d -Block 0002 [110]: e298905fb4d0b68e -Block 0002 [111]: 2bcbdd9a1ce46c9d -Block 0002 [112]: 5c75108e7d6a55b9 -Block 0002 [113]: b605bd1023de8977 -Block 0002 [114]: 1c193d35b61e7d0c -Block 0002 [115]: f48c8741a50be2b2 -Block 0002 [116]: dde78777f41702fe -Block 0002 [117]: aa9668ae6a9b8ee6 -Block 0002 [118]: a4b91d2d5900c5e2 -Block 0002 [119]: b23f93527a5f6abf -Block 0002 [120]: 251cc8db145b7f60 -Block 0002 [121]: 42ffa58f6cae0c6b -Block 0002 [122]: e864e1c5256dd80d -Block 0002 [123]: 2253ebfd92490935 -Block 0002 [124]: 6409cf57bdbd6c68 -Block 0002 [125]: dfec737ab6849a31 -Block 0002 [126]: 894da96427deb540 -Block 0002 [127]: 4acc8d0d859fc71c -Block 0003 [ 0]: 7393659e41c0ffe8 -Block 0003 [ 1]: 2d1775dbb249bb5b -Block 0003 [ 2]: fae4f88f3e535a8b -Block 0003 [ 3]: de1631dcfbbb9157 -Block 0003 [ 4]: 7164b6d1e33a61dc -Block 0003 [ 5]: eb95a004610f2626 -Block 0003 [ 6]: 3ad93611b1c94541 -Block 0003 [ 7]: e7a453ce861ab3ba -Block 0003 [ 8]: 78adac795c376400 -Block 0003 [ 9]: 1afb8e1de9db5a87 -Block 0003 [ 10]: ce384f6674dd212a -Block 0003 [ 11]: 25c4c7c3d3efcb1d -Block 0003 [ 12]: aca174b4ef51cafc -Block 0003 [ 13]: eb1a3eee15c3169c -Block 0003 [ 14]: f85ce6304143c718 -Block 0003 [ 15]: 25cc4e07845bc0d3 -Block 0003 [ 16]: faf52d0c41d56a98 -Block 0003 [ 17]: da5600f13157ef01 -Block 0003 [ 18]: 96acfebd55f2437c -Block 0003 [ 19]: c214c0eb8a6bf5a7 -Block 0003 [ 20]: a8129fd25e9c4a6e -Block 0003 [ 21]: 9f9f490ee4c80129 -Block 0003 [ 22]: dd48fcad213f4121 -Block 0003 [ 23]: a48ea8e66dd84ac8 -Block 0003 [ 24]: 613cde171f240f13 -Block 0003 [ 25]: eace1402be0ad779 -Block 0003 [ 26]: b9d7bdbb30fcf1c8 -Block 0003 [ 27]: 4f135f12be01b425 -Block 0003 [ 28]: 4930fec1d4366e0b -Block 0003 [ 29]: fca833d55bf82ed9 -Block 0003 [ 30]: f2dcd795c9e1e354 -Block 0003 [ 31]: dab4e97ae334a48a -Block 0003 [ 32]: 05facd2a746f4fd7 -Block 0003 [ 33]: b7f5e73d82ede13e -Block 0003 [ 34]: 185a66e8575ac003 -Block 0003 [ 35]: 07c8314d75afa258 -Block 0003 [ 36]: 4b6de5582fbbba66 -Block 0003 [ 37]: 5e6e62eb4ecf1374 -Block 0003 [ 38]: ed59e2b8a754522b -Block 0003 [ 39]: 0cd50f2d238c80a3 -Block 0003 [ 40]: df8eb0346cb94c20 -Block 0003 [ 41]: ff3946e557683c77 -Block 0003 [ 42]: b08b188c5f361337 -Block 0003 [ 43]: 7c2e03108321abf4 -Block 0003 [ 44]: 78c17e33bccec828 -Block 0003 [ 45]: 9882c1219c8d702e -Block 0003 [ 46]: 791761d3870e074f -Block 0003 [ 47]: f2138d034225e07c -Block 0003 [ 48]: 522611a94c109b36 -Block 0003 [ 49]: a20e833c25511dfb -Block 0003 [ 50]: 20e9d9679ea1f760 -Block 0003 [ 51]: b4e3243f0559be69 -Block 0003 [ 52]: 8ec633381fa03a91 -Block 0003 [ 53]: d0cb963269d9698c -Block 0003 [ 54]: fedda033ed8a18a8 -Block 0003 [ 55]: a819c67dcaadb66f -Block 0003 [ 56]: 44319f03fb5dd547 -Block 0003 [ 57]: 754c3e6431751894 -Block 0003 [ 58]: 315467ad4cf190ef -Block 0003 [ 59]: f52ee658a9283a3f -Block 0003 [ 60]: 1ededd0b2ccf557a -Block 0003 [ 61]: 1ecc17875870bf83 -Block 0003 [ 62]: 3f14d3fa1b096cf7 -Block 0003 [ 63]: 4cd38f22d0117ce3 -Block 0003 [ 64]: 47ea92a6ee45f08a -Block 0003 [ 65]: cb1940e42c6993d1 -Block 0003 [ 66]: e6e77ade51a89648 -Block 0003 [ 67]: f577683fa0969dbe -Block 0003 [ 68]: 965466637e9bc32d -Block 0003 [ 69]: 94cb31ff56d5b9c2 -Block 0003 [ 70]: f766a40cdc318679 -Block 0003 [ 71]: 6ad738e65fb2615f -Block 0003 [ 72]: 27a15f49b513b95a -Block 0003 [ 73]: b7c75e1f6085abe1 -Block 0003 [ 74]: 12fb477a2785ab14 -Block 0003 [ 75]: 9592b64a56f72842 -Block 0003 [ 76]: 4400ce28a39a9a75 -Block 0003 [ 77]: 1058b921154e6887 -Block 0003 [ 78]: 901341cb4ef8df1d -Block 0003 [ 79]: 36c23f497125a204 -Block 0003 [ 80]: 9aa0d67ece136823 -Block 0003 [ 81]: 0bed05e22536d381 -Block 0003 [ 82]: de549c999d8e0c63 -Block 0003 [ 83]: 3f17aa1b293c9cf0 -Block 0003 [ 84]: d919d0de04950d58 -Block 0003 [ 85]: 75348400ea415bb8 -Block 0003 [ 86]: 4ccf124c6cfe712b -Block 0003 [ 87]: 39a8740c2720429c -Block 0003 [ 88]: f7698dfaa19b150b -Block 0003 [ 89]: 2b42bd8bc337db2f -Block 0003 [ 90]: 2aaf1982d64484d3 -Block 0003 [ 91]: 3aabe630047c593e -Block 0003 [ 92]: 2fe47f5bb56c5cf2 -Block 0003 [ 93]: cb2d883048b2c4d1 -Block 0003 [ 94]: 41c02dd86a8df448 -Block 0003 [ 95]: d28a5aed127310dc -Block 0003 [ 96]: 16b60a8c47c04a66 -Block 0003 [ 97]: 4665b179132f2186 -Block 0003 [ 98]: 0efe17af99cb9ae1 -Block 0003 [ 99]: df33778d909f84cc -Block 0003 [100]: 5f19ba2c8fa06a0e -Block 0003 [101]: 48fbe0f6122c7253 -Block 0003 [102]: 679cf02d3c42d7c7 -Block 0003 [103]: e4024bf993b5a1d5 -Block 0003 [104]: eaf6463430c49079 -Block 0003 [105]: 86b0f0afa95d3c5e -Block 0003 [106]: e955a61581d56a29 -Block 0003 [107]: 182f40b411056af3 -Block 0003 [108]: 965323563f02b1fe -Block 0003 [109]: 993f4c4f6f92df68 -Block 0003 [110]: 8cfe329259529560 -Block 0003 [111]: 253df070391de9fd -Block 0003 [112]: db2af946400e36dc -Block 0003 [113]: ae825c6ff52dd23b -Block 0003 [114]: c3108ee25e43b626 -Block 0003 [115]: bf02a0a2695652ce -Block 0003 [116]: 2f4d2e01345f8f8c -Block 0003 [117]: 4beb38ab3ad7a2cf -Block 0003 [118]: a927049b5e4d0367 -Block 0003 [119]: 684ff1b489531348 -Block 0003 [120]: 91deb2abe6282716 -Block 0003 [121]: 06a5d16d172ec748 -Block 0003 [122]: 74c6aec814cf0609 -Block 0003 [123]: 1245c8dd2e3be804 -Block 0003 [124]: bc1743e961ba8a2f -Block 0003 [125]: 1b43aa6d4214f09b -Block 0003 [126]: 67b87e4761320e77 -Block 0003 [127]: 15e55998edb32dcd -Block 0004 [ 0]: dc8e74b7fc590eaa -Block 0004 [ 1]: 9d6314b244b500ff -Block 0004 [ 2]: 3350958e5e7f2b09 -Block 0004 [ 3]: ec09ff4db1a6b148 -Block 0004 [ 4]: 9c3f7e2c451e9233 -Block 0004 [ 5]: e59dfa53f9aa9188 -Block 0004 [ 6]: 285cbdae58d70fdc -Block 0004 [ 7]: 9d9b7785a055f7c2 -Block 0004 [ 8]: e3f8faf32897907d -Block 0004 [ 9]: b5ca165b816256ad -Block 0004 [ 10]: c05851fad1b32958 -Block 0004 [ 11]: 52f6fe7a373b24e9 -Block 0004 [ 12]: b24bc961f3fe4019 -Block 0004 [ 13]: 02ffc3b077c07b95 -Block 0004 [ 14]: 3aaeb8c90ffff3a1 -Block 0004 [ 15]: 85fea4be84a3de96 -Block 0004 [ 16]: bd4b0eb6ae514a34 -Block 0004 [ 17]: cf1c358c1d01ce4d -Block 0004 [ 18]: 8c3bdde108df5c56 -Block 0004 [ 19]: 72aece74925a81ad -Block 0004 [ 20]: 5a08715b69113bef -Block 0004 [ 21]: 5c9474489416b531 -Block 0004 [ 22]: 2f0cb5a734c055c3 -Block 0004 [ 23]: b1087159c2f1e1c5 -Block 0004 [ 24]: b80d724159604e3b -Block 0004 [ 25]: 1b5d0f02f6fbddf7 -Block 0004 [ 26]: 8c5eeb140196e051 -Block 0004 [ 27]: 32b225f300b2b693 -Block 0004 [ 28]: 8cd5de71ce325031 -Block 0004 [ 29]: 9a7c5ffccf16b550 -Block 0004 [ 30]: c2b81918ce952de3 -Block 0004 [ 31]: a4e55a59535fa36f -Block 0004 [ 32]: 7f59e3befceb12f4 -Block 0004 [ 33]: 55e8178cedb51f45 -Block 0004 [ 34]: f0b04ee9e6643981 -Block 0004 [ 35]: e256ef0b24da2c69 -Block 0004 [ 36]: 4d1a151fcb27b6a5 -Block 0004 [ 37]: 699a3c78f1675517 -Block 0004 [ 38]: ced57d99187b60e6 -Block 0004 [ 39]: c108cdade276da75 -Block 0004 [ 40]: 99e0eaa3da5c44c2 -Block 0004 [ 41]: dfea1825e0d9a17b -Block 0004 [ 42]: 2cc613916948ea30 -Block 0004 [ 43]: cd819de0ca0212c2 -Block 0004 [ 44]: fac7dccc3e730827 -Block 0004 [ 45]: 105a03d54648fdd8 -Block 0004 [ 46]: 34312385ca673f6a -Block 0004 [ 47]: d0f822d27923ac11 -Block 0004 [ 48]: 100a29a4b1408466 -Block 0004 [ 49]: d6becda85ba0f5fe -Block 0004 [ 50]: 8ad493d4dfffb17d -Block 0004 [ 51]: 8cd3d3573d0bb163 -Block 0004 [ 52]: 43f071e93ad72fb9 -Block 0004 [ 53]: c87652edd33c7917 -Block 0004 [ 54]: 4e29ba26e813d81e -Block 0004 [ 55]: 3bcb08574e586c9a -Block 0004 [ 56]: c297461ec3887f17 -Block 0004 [ 57]: be25299cbbff60eb -Block 0004 [ 58]: 66a8d2171828e4ce -Block 0004 [ 59]: 4118a5209f57988f -Block 0004 [ 60]: b0babff16e382e50 -Block 0004 [ 61]: a0066510d52ada48 -Block 0004 [ 62]: 296ba2db305371b6 -Block 0004 [ 63]: 9f13dac104319d84 -Block 0004 [ 64]: 969cf4839e19a635 -Block 0004 [ 65]: c159007a9e201a66 -Block 0004 [ 66]: e1afcbef7896ecf3 -Block 0004 [ 67]: dce56985c9e55b74 -Block 0004 [ 68]: 06d217e23765ecd6 -Block 0004 [ 69]: 2e107a4e6b1b4855 -Block 0004 [ 70]: 4c56777504e10d30 -Block 0004 [ 71]: 835d33900ba6804b -Block 0004 [ 72]: 16f1261f30e2d4d7 -Block 0004 [ 73]: a0db1f831faa49c7 -Block 0004 [ 74]: 687f791433d3cfd4 -Block 0004 [ 75]: 2b8c8b5a1136b296 -Block 0004 [ 76]: 8b9f1fb39ff29266 -Block 0004 [ 77]: ead12a5b8be281cd -Block 0004 [ 78]: 542a14b6c7b4ca64 -Block 0004 [ 79]: 2ed2d673ff068df7 -Block 0004 [ 80]: 0834c45ece6ad1bd -Block 0004 [ 81]: 728d7efe5d32bad9 -Block 0004 [ 82]: 2b12522c55cffe6e -Block 0004 [ 83]: 3e485f8c32faec76 -Block 0004 [ 84]: 4495227ae0c7151e -Block 0004 [ 85]: 18ac2111c500173c -Block 0004 [ 86]: c305c7e0121db98a -Block 0004 [ 87]: dcedeacc5289d43f -Block 0004 [ 88]: ad0f3edf645cca7d -Block 0004 [ 89]: 7caf7e1cf8a716e5 -Block 0004 [ 90]: e7d28d7d683c41ef -Block 0004 [ 91]: a56b8c0c1a11a92a -Block 0004 [ 92]: b03d46bf8064efe4 -Block 0004 [ 93]: a707cf2d4b81db6f -Block 0004 [ 94]: 5780f483897f5950 -Block 0004 [ 95]: 0ecc14064af2288c -Block 0004 [ 96]: 01097e9ccdd30b9a -Block 0004 [ 97]: 0eda1ee216c84a6d -Block 0004 [ 98]: 537dfc124945de42 -Block 0004 [ 99]: 50517fc114230cac -Block 0004 [100]: 3c6ebe9d7aad9989 -Block 0004 [101]: 0c2f35ef9416183b -Block 0004 [102]: 1f6c86dd8a94640e -Block 0004 [103]: c70c2ce465657a97 -Block 0004 [104]: 047034fbcbcb9b29 -Block 0004 [105]: a1699cfb300ed9db -Block 0004 [106]: 3a6210af581ed116 -Block 0004 [107]: cd1bda027a3d3045 -Block 0004 [108]: 57a5caa0bc28e603 -Block 0004 [109]: 32d5e2ea8b30f6bb -Block 0004 [110]: 9ad895e8ab659736 -Block 0004 [111]: bdd2d25a6ddd70b5 -Block 0004 [112]: b24a12932881d44a -Block 0004 [113]: c02b01e7e74d263d -Block 0004 [114]: aaacd49e4471777c -Block 0004 [115]: 3d52fbae820ec99f -Block 0004 [116]: 916c93831f33935d -Block 0004 [117]: 9c8d5cec1a46aa63 -Block 0004 [118]: ddd4ac54f2291697 -Block 0004 [119]: 6f4468d2424dac96 -Block 0004 [120]: 15b42e0be06acd4e -Block 0004 [121]: 211f17f267cfb716 -Block 0004 [122]: 5094ed716457b202 -Block 0004 [123]: f633d3cf02f40fde -Block 0004 [124]: d4db8368201c498f -Block 0004 [125]: 2db510d98cfaff60 -Block 0004 [126]: b1e33c1b76f95a64 -Block 0004 [127]: df8c2031f482ac8f -Block 0005 [ 0]: 428f586174d3c70b -Block 0005 [ 1]: 8db491dcdebe8485 -Block 0005 [ 2]: 118abae9acec1292 -Block 0005 [ 3]: 0e078f30b1e631f4 -Block 0005 [ 4]: bdfac1c0ea61bb7a -Block 0005 [ 5]: 697bd8973c293700 -Block 0005 [ 6]: 3126ab7646837303 -Block 0005 [ 7]: f92297c907a1996d -Block 0005 [ 8]: 47d61a1d7f4d3325 -Block 0005 [ 9]: 34233a1540aecf67 -Block 0005 [ 10]: 0a46392ba9adc825 -Block 0005 [ 11]: 3d9bd182387ecbf1 -Block 0005 [ 12]: e156dd80f34c7a8c -Block 0005 [ 13]: be9123cc6bc7fe0d -Block 0005 [ 14]: 0672be8310b5b19f -Block 0005 [ 15]: 70e659fa9801eeee -Block 0005 [ 16]: 232dccf29d64f5bd -Block 0005 [ 17]: 92f3d4d13c5f3b43 -Block 0005 [ 18]: e992d055e8cac1f3 -Block 0005 [ 19]: 0525a4986101fba6 -Block 0005 [ 20]: c52ce6dfaaea5448 -Block 0005 [ 21]: ea9bbba9f06706c4 -Block 0005 [ 22]: 3f1b980a74b5d42a -Block 0005 [ 23]: 0a4c3eb9029ef23e -Block 0005 [ 24]: a1854f7401a80884 -Block 0005 [ 25]: 4dad34808194c21e -Block 0005 [ 26]: 1e02a809c838b8c7 -Block 0005 [ 27]: 8eef8cc8b2777486 -Block 0005 [ 28]: 9d1e414a0e247885 -Block 0005 [ 29]: b173e9f80513765a -Block 0005 [ 30]: 76d7e21bb9103ace -Block 0005 [ 31]: fc7db715558ae917 -Block 0005 [ 32]: fb2e166463f57ee9 -Block 0005 [ 33]: 9221afc54f4005ef -Block 0005 [ 34]: 45b88b3514280e3d -Block 0005 [ 35]: b7397620e64fa244 -Block 0005 [ 36]: 6a0fa21bce415918 -Block 0005 [ 37]: d7372a31d4f8d3d5 -Block 0005 [ 38]: b62a1edd3096653b -Block 0005 [ 39]: 3f6cad5032a7538f -Block 0005 [ 40]: 40862cb2bb527ab2 -Block 0005 [ 41]: d8fcabf1cf4a8c22 -Block 0005 [ 42]: 28cb352287c31ba9 -Block 0005 [ 43]: aa329a2b67718671 -Block 0005 [ 44]: fed28d465bb389d3 -Block 0005 [ 45]: 93155bf5106507fa -Block 0005 [ 46]: cdec2bffbabf3f51 -Block 0005 [ 47]: 194b17b5ccf2a0bd -Block 0005 [ 48]: 86ea4fc726fe1946 -Block 0005 [ 49]: 8eede1e171f208ea -Block 0005 [ 50]: dd0ef14e7ddbc0a9 -Block 0005 [ 51]: 22defa92554be18b -Block 0005 [ 52]: 71b1af77aca1137f -Block 0005 [ 53]: b901b61fbd2ee55a -Block 0005 [ 54]: 6eac949e49159e58 -Block 0005 [ 55]: cbe686bfe37766bb -Block 0005 [ 56]: 96f7755a97b83d81 -Block 0005 [ 57]: b3b3373331f8c909 -Block 0005 [ 58]: a8fd4a446f764b7b -Block 0005 [ 59]: 30ecc25bc5774ac5 -Block 0005 [ 60]: 3de797f5cddfbc8c -Block 0005 [ 61]: a467fa0dad2e8e9d -Block 0005 [ 62]: e6dedb97fec747f0 -Block 0005 [ 63]: 6d864b261ffbe29e -Block 0005 [ 64]: 5a20a290b71a73d2 -Block 0005 [ 65]: 4145c2e9c234a5d8 -Block 0005 [ 66]: da79eb6adc2cc4cd -Block 0005 [ 67]: 8d1209074f3917ac -Block 0005 [ 68]: 163d2ce278187e4c -Block 0005 [ 69]: 1cf8c5edfa5ee4da -Block 0005 [ 70]: 620b0a9e1056fcf2 -Block 0005 [ 71]: c2f976ead38341b2 -Block 0005 [ 72]: 2bff264920fce04e -Block 0005 [ 73]: d06343c6d8401fc2 -Block 0005 [ 74]: bfb9fcefa4bb830b -Block 0005 [ 75]: 2d6d546963be975c -Block 0005 [ 76]: 25866cb74e5e4fde -Block 0005 [ 77]: bb3b80728adbb3b8 -Block 0005 [ 78]: 59ffb3a2616f42d9 -Block 0005 [ 79]: 143f6b0612d48202 -Block 0005 [ 80]: dc7fe0f81b2728e7 -Block 0005 [ 81]: 1af6257676192ce4 -Block 0005 [ 82]: 362bc9ab7b4301d2 -Block 0005 [ 83]: b3b27a39ff1b93e2 -Block 0005 [ 84]: 6853a6bf9df6d437 -Block 0005 [ 85]: 27bfa4abf07b49b8 -Block 0005 [ 86]: bf1ecbb4aee2b6fd -Block 0005 [ 87]: 86aca973a86481c4 -Block 0005 [ 88]: 69b6116ecde430f5 -Block 0005 [ 89]: 39e413ab45810fb8 -Block 0005 [ 90]: dd6eea0068811533 -Block 0005 [ 91]: 77645481ca5b3fe1 -Block 0005 [ 92]: 0cd1fd5313e15278 -Block 0005 [ 93]: e6bfdc226276693a -Block 0005 [ 94]: 55421022e9411209 -Block 0005 [ 95]: 55e67f4cdf743c0c -Block 0005 [ 96]: e50ed02e64d454b4 -Block 0005 [ 97]: 0126f30b4983d907 -Block 0005 [ 98]: 53bcd1d00e93215a -Block 0005 [ 99]: 85b504f6ad323e91 -Block 0005 [100]: 6814f10585b91d90 -Block 0005 [101]: 45081065e5591a36 -Block 0005 [102]: 77f70317db7f7de1 -Block 0005 [103]: 57e18ad0cd094219 -Block 0005 [104]: 9b7a484a8a308720 -Block 0005 [105]: 46e1e3b2b52790db -Block 0005 [106]: 305905b73c2cb62e -Block 0005 [107]: cbcc69dc0a0c42f6 -Block 0005 [108]: d7eb3e010ce9bee9 -Block 0005 [109]: f1a6cf342bcdfea8 -Block 0005 [110]: b1618f5b9a9a98f8 -Block 0005 [111]: 8d8d779b3ce5835d -Block 0005 [112]: 9ca21c957973116d -Block 0005 [113]: 64083f3d9d18e4f8 -Block 0005 [114]: 6195ee7bb3ba04e3 -Block 0005 [115]: 97185e5d48380d48 -Block 0005 [116]: 82dbd9fc9e4c0e03 -Block 0005 [117]: e3913fe95965d557 -Block 0005 [118]: e2fa70aef1efe193 -Block 0005 [119]: d336389f1cbb77c0 -Block 0005 [120]: 559a7ab0def81cc1 -Block 0005 [121]: 870601ae9f31df12 -Block 0005 [122]: b045c7c5a43625c2 -Block 0005 [123]: cbdaaeb4c2565c6b -Block 0005 [124]: f83296cfab58be99 -Block 0005 [125]: d637b31caae3b66f -Block 0005 [126]: 9a3a611bb0de8640 -Block 0005 [127]: 958fe6c02727c98a -Block 0006 [ 0]: 13a5f2096ff5ca1f -Block 0006 [ 1]: 1b2f72026e4eb528 -Block 0006 [ 2]: eaa2ba7ac954db30 -Block 0006 [ 3]: b54ba8519e44db4a -Block 0006 [ 4]: c061311fd57a2eab -Block 0006 [ 5]: 83c9d06aa3983ca8 -Block 0006 [ 6]: b0c1008b6073ec65 -Block 0006 [ 7]: eba730c138748909 -Block 0006 [ 8]: b5d15ad429bfbd5a -Block 0006 [ 9]: da277ab755811426 -Block 0006 [ 10]: 65f8da290ecb3661 -Block 0006 [ 11]: fc9a09aeae2cec69 -Block 0006 [ 12]: 002f075123624389 -Block 0006 [ 13]: 5bd0d62a670fb3c8 -Block 0006 [ 14]: a5b1b4c10248f86d -Block 0006 [ 15]: 46dc458c8af1bc5b -Block 0006 [ 16]: b0109567fc2bb44d -Block 0006 [ 17]: 062cc29395ed989b -Block 0006 [ 18]: 908c3833f51a7a8c -Block 0006 [ 19]: 7c8baba41c73d5c8 -Block 0006 [ 20]: a884c98ecfa827f7 -Block 0006 [ 21]: 864b233581cebf3b -Block 0006 [ 22]: a69dc39ed76df5b1 -Block 0006 [ 23]: d287fd37bd184b4b -Block 0006 [ 24]: adcb508656f50a1d -Block 0006 [ 25]: 8345f93a185de052 -Block 0006 [ 26]: 32ee921a5af33f77 -Block 0006 [ 27]: d10349bb3f1a2e60 -Block 0006 [ 28]: 326d8e10ed711927 -Block 0006 [ 29]: f1ea40baf2e29205 -Block 0006 [ 30]: 5ddee886519f975b -Block 0006 [ 31]: 3e00b776de23dbf9 -Block 0006 [ 32]: 09b0fc2bcbc5ca5e -Block 0006 [ 33]: 6c9f8382caaf682b -Block 0006 [ 34]: bbce5e8d97ca0f8a -Block 0006 [ 35]: 94c9eea4942822ac -Block 0006 [ 36]: 09ed551735403790 -Block 0006 [ 37]: f7f7836b8a450424 -Block 0006 [ 38]: e7cc18315c9d0cc3 -Block 0006 [ 39]: e6ad27351c122000 -Block 0006 [ 40]: 60400244ed421285 -Block 0006 [ 41]: c803b2797ce9ead5 -Block 0006 [ 42]: 4fb1724c2afde396 -Block 0006 [ 43]: 62e51ea923c226b8 -Block 0006 [ 44]: c10866f10d269f8e -Block 0006 [ 45]: a291622995a7e4b9 -Block 0006 [ 46]: d457804368b2b68a -Block 0006 [ 47]: fd6bab4757e691bc -Block 0006 [ 48]: bb79b0ae54383df4 -Block 0006 [ 49]: 8775ea6bde327a09 -Block 0006 [ 50]: 0054bbfcce82e402 -Block 0006 [ 51]: 7ec75affa73a4918 -Block 0006 [ 52]: 7a01e09e750bea45 -Block 0006 [ 53]: 1da549e65e8991e6 -Block 0006 [ 54]: 65fff25852256be3 -Block 0006 [ 55]: 6054391646456bac -Block 0006 [ 56]: 75f3b5c0f96b5e33 -Block 0006 [ 57]: 89eebe6001f1afb0 -Block 0006 [ 58]: 98806a81763232bd -Block 0006 [ 59]: 77e23908d1632741 -Block 0006 [ 60]: 0898a711d56a4778 -Block 0006 [ 61]: 154939153173d960 -Block 0006 [ 62]: 279cf70d61ba82e0 -Block 0006 [ 63]: b90121d04bec0415 -Block 0006 [ 64]: 264b25de48cb8bfa -Block 0006 [ 65]: f82c5a6b2a60cde6 -Block 0006 [ 66]: 19d22e2cc1202e8e -Block 0006 [ 67]: fd2af76930971bfb -Block 0006 [ 68]: 1216b5c315238061 -Block 0006 [ 69]: c2e74ba6d227f392 -Block 0006 [ 70]: a9ec024ab42ed537 -Block 0006 [ 71]: aa8a6bcb77dd838a -Block 0006 [ 72]: dcc302dbc34f005d -Block 0006 [ 73]: 0f8b425a61ffee95 -Block 0006 [ 74]: 119c8ec42b470039 -Block 0006 [ 75]: 1e9df7d4fcd392c7 -Block 0006 [ 76]: 58efd0e8e7894f85 -Block 0006 [ 77]: 28bf582abcef94fd -Block 0006 [ 78]: f73f1167a97ff861 -Block 0006 [ 79]: 346d766e03a2ed71 -Block 0006 [ 80]: fc398b655ef68204 -Block 0006 [ 81]: 70e49a4e1c35da2a -Block 0006 [ 82]: 7c88d9a7e02dd08d -Block 0006 [ 83]: 1a242872c6c6501f -Block 0006 [ 84]: 45a6d35f0a769228 -Block 0006 [ 85]: 6ac75dc596984efe -Block 0006 [ 86]: 08a8c6acf1dbd35a -Block 0006 [ 87]: a7c96972f71393b7 -Block 0006 [ 88]: fcde534c13fb4f3a -Block 0006 [ 89]: 6e7791d3dca43b7b -Block 0006 [ 90]: b7e7e7149e54e311 -Block 0006 [ 91]: ae36663b75583d74 -Block 0006 [ 92]: ca29be960080870e -Block 0006 [ 93]: e9ae573efeba7733 -Block 0006 [ 94]: 7666da38d0256d63 -Block 0006 [ 95]: fc8fecc855b22f83 -Block 0006 [ 96]: 17aeb02e5bfd3870 -Block 0006 [ 97]: 523a873983a5fef4 -Block 0006 [ 98]: c517c29248c433ca -Block 0006 [ 99]: 9291190aa889242c -Block 0006 [100]: 5c165c8747de1f4d -Block 0006 [101]: 97e6a8ecc76b2408 -Block 0006 [102]: 0d661557f80eff9d -Block 0006 [103]: 11ff8003a5af2667 -Block 0006 [104]: adbd07f681b3df22 -Block 0006 [105]: 4696fd460dd67114 -Block 0006 [106]: a00ad52b70e15631 -Block 0006 [107]: 1c14750d3d9b138c -Block 0006 [108]: e89f1af55e6919ae -Block 0006 [109]: f3a07ba7492c8b43 -Block 0006 [110]: 6c6a30cf18f5b9a0 -Block 0006 [111]: 112f356d18dce24b -Block 0006 [112]: 90c160c1efaca7ff -Block 0006 [113]: 38a100656072b8ca -Block 0006 [114]: b6d618191ddbe1a1 -Block 0006 [115]: 953791eb67e3e8a4 -Block 0006 [116]: 064ed438e27e27ce -Block 0006 [117]: 513b1cec646ad039 -Block 0006 [118]: 4cbc5de8ec45b103 -Block 0006 [119]: 46905804d90bda25 -Block 0006 [120]: 9949ec8277cf3959 -Block 0006 [121]: 7581ae0071b4de6e -Block 0006 [122]: 4f266c522e844d11 -Block 0006 [123]: cd96ce921dd487e3 -Block 0006 [124]: 3abc3c9a1d0cbee1 -Block 0006 [125]: 666c8582319d34ea -Block 0006 [126]: 0e72bbb45584bf7d -Block 0006 [127]: 2e1c1e750188d265 -Block 0007 [ 0]: 3d6a0d353a582cc3 -Block 0007 [ 1]: 725b5cb52fdcc804 -Block 0007 [ 2]: 0d637aabd89a5f42 -Block 0007 [ 3]: cdd0faf2f954793d -Block 0007 [ 4]: a8a226bdfe9b303b -Block 0007 [ 5]: 5bb2904a4ffd77b0 -Block 0007 [ 6]: a6ff9e1e69e08a3b -Block 0007 [ 7]: 4d765e9f5a455668 -Block 0007 [ 8]: d8f5b730f9e01cb7 -Block 0007 [ 9]: ffc5170716649d8e -Block 0007 [ 10]: cbca0d385f668bb3 -Block 0007 [ 11]: 23124a2f75853cc6 -Block 0007 [ 12]: c266ba9d28147cc0 -Block 0007 [ 13]: 3433fdda5ee50401 -Block 0007 [ 14]: 83b14f2bb79849cc -Block 0007 [ 15]: 4e47b754dd755a6a -Block 0007 [ 16]: 0711503b0e364de1 -Block 0007 [ 17]: 96b399210d06c4bd -Block 0007 [ 18]: e7a0c87f6ce24190 -Block 0007 [ 19]: 952db034322194f7 -Block 0007 [ 20]: bf826ab367d69924 -Block 0007 [ 21]: ca7a0e451f0baedf -Block 0007 [ 22]: bc199a271346d96d -Block 0007 [ 23]: a89504ec33d58563 -Block 0007 [ 24]: 650fe1dd47c229ac -Block 0007 [ 25]: c8b248c48aab400f -Block 0007 [ 26]: 9c79799cb6d7b11e -Block 0007 [ 27]: ca00306b9e70a62f -Block 0007 [ 28]: 7a9afb832313f70d -Block 0007 [ 29]: 7699ea3c8b6d93f3 -Block 0007 [ 30]: 2081b3b9830ada40 -Block 0007 [ 31]: 84dfbb20400b7794 -Block 0007 [ 32]: 09711874dcde8f25 -Block 0007 [ 33]: 2146eefadd811802 -Block 0007 [ 34]: 38ed72bcae48eb1e -Block 0007 [ 35]: 1c780fddf3718799 -Block 0007 [ 36]: ec20a679b1ba8e16 -Block 0007 [ 37]: e2e3779e19f633a5 -Block 0007 [ 38]: 85b74c1f84fceede -Block 0007 [ 39]: 9982bbd5ae9822b6 -Block 0007 [ 40]: 4724c09a0f3a9eb3 -Block 0007 [ 41]: cc4b6ee011d10bf9 -Block 0007 [ 42]: 9c1d3294f23d0f61 -Block 0007 [ 43]: 2c7fbde5e6d9f1ef -Block 0007 [ 44]: 4cb326c5aeb97687 -Block 0007 [ 45]: 5ee9a98967f03584 -Block 0007 [ 46]: 54e070d3f4868d43 -Block 0007 [ 47]: fbed90f1e791fe2b -Block 0007 [ 48]: 5372b297fc080bb2 -Block 0007 [ 49]: f1eea4e6e651fa54 -Block 0007 [ 50]: 18e19f83b3845e8b -Block 0007 [ 51]: 982061488bf2c91e -Block 0007 [ 52]: 000f915b600b1bbf -Block 0007 [ 53]: 551754f75f24f4e2 -Block 0007 [ 54]: 9cb0d725abb977f2 -Block 0007 [ 55]: e41c7bc36ac799d2 -Block 0007 [ 56]: 83d055c7db8eb6a9 -Block 0007 [ 57]: 990206c62219daa6 -Block 0007 [ 58]: 6de34850e119e11f -Block 0007 [ 59]: 5e463ed17b7fec81 -Block 0007 [ 60]: 112ea7aefee3a408 -Block 0007 [ 61]: e0aa67218af846e5 -Block 0007 [ 62]: b85f6a690c0ddb39 -Block 0007 [ 63]: c1934b1adb438156 -Block 0007 [ 64]: c7d07d9d5667e378 -Block 0007 [ 65]: 210e4d69ecfb89e5 -Block 0007 [ 66]: ea7d450766f1afdc -Block 0007 [ 67]: 2f18fda4327f7130 -Block 0007 [ 68]: f3d7c1cc7034f9de -Block 0007 [ 69]: d83b6b3e29f818db -Block 0007 [ 70]: de251265d93d6b4e -Block 0007 [ 71]: bfe371f18fdaf889 -Block 0007 [ 72]: dfe78a1ad4ecd33d -Block 0007 [ 73]: 70bfbe20c89fe34b -Block 0007 [ 74]: dd52d0f45682a779 -Block 0007 [ 75]: fcbbb05bfcb94a23 -Block 0007 [ 76]: b872ebe1c252cf63 -Block 0007 [ 77]: 314c2bdb319a7747 -Block 0007 [ 78]: a966ac152070955b -Block 0007 [ 79]: bf909e5d43b0772b -Block 0007 [ 80]: d3d47c8e0514d23d -Block 0007 [ 81]: 94118497f2ab005e -Block 0007 [ 82]: 1911d0a7cf5af514 -Block 0007 [ 83]: b4a8a52ace59fe3d -Block 0007 [ 84]: 36c35f2fae28046a -Block 0007 [ 85]: 9efc57f45f906003 -Block 0007 [ 86]: 440f5c79192c80b4 -Block 0007 [ 87]: 647e0eb35cdd560f -Block 0007 [ 88]: 34fe5ab26c3ea8b3 -Block 0007 [ 89]: 945b70c653f76a84 -Block 0007 [ 90]: 67cd6bc8159d6ff9 -Block 0007 [ 91]: 2dc4f192345b95ec -Block 0007 [ 92]: f124ffb3359123ab -Block 0007 [ 93]: c4f88c028b3cd129 -Block 0007 [ 94]: a345e2bb55778fe4 -Block 0007 [ 95]: 691f7549a345d348 -Block 0007 [ 96]: 04486d82573ae921 -Block 0007 [ 97]: 98d3114ddc02a162 -Block 0007 [ 98]: 519bdca611bbeaa9 -Block 0007 [ 99]: 8791fba88b020099 -Block 0007 [100]: d514acbe5dfec5bb -Block 0007 [101]: e45d4389e86c7450 -Block 0007 [102]: 3a71f5aa2eb5cd8d -Block 0007 [103]: 80fdc6c491fea6c6 -Block 0007 [104]: b92d709cda9c22e5 -Block 0007 [105]: 59f0a6d67ae30bc3 -Block 0007 [106]: 563e24db351fec9c -Block 0007 [107]: 89319bc5b615c8e2 -Block 0007 [108]: cd24702c8f2b2a4b -Block 0007 [109]: f847342241040fc2 -Block 0007 [110]: fd5471a0f656059c -Block 0007 [111]: 2540eda8a41f5dc7 -Block 0007 [112]: 0938197b41f26a6e -Block 0007 [113]: 74bf1b4f4185530e -Block 0007 [114]: 0e9b724c2ead5c00 -Block 0007 [115]: 5dde068018d59b63 -Block 0007 [116]: 7d2300969b112ade -Block 0007 [117]: d143931a829a962e -Block 0007 [118]: 1130f16e830f47c1 -Block 0007 [119]: 4ca052b7c85637b6 -Block 0007 [120]: 9994f892e4ff0b39 -Block 0007 [121]: 5364a7ef273f73b1 -Block 0007 [122]: 4f17e1310ef3231a -Block 0007 [123]: 7f8a901ea990cf27 -Block 0007 [124]: 45c55fb656b02173 -Block 0007 [125]: 3a1ea5407b7fea45 -Block 0007 [126]: 002bf87dee768e57 -Block 0007 [127]: 2dc7651b0c5583f8 -Block 0008 [ 0]: 742f8fb520ae6daa -Block 0008 [ 1]: fce446d5bc718358 -Block 0008 [ 2]: a93b373872a69d36 -Block 0008 [ 3]: 13e5c9bc2e6affd2 -Block 0008 [ 4]: cc282d9f8703553b -Block 0008 [ 5]: 820575275919b5d9 -Block 0008 [ 6]: 817ea5478b0effd6 -Block 0008 [ 7]: f9881c280744754d -Block 0008 [ 8]: 7fb7b8fc7a1eb8ef -Block 0008 [ 9]: ffd4b707f3d45de2 -Block 0008 [ 10]: dd84ae76abbf5764 -Block 0008 [ 11]: a1021bea15349ebc -Block 0008 [ 12]: dc085965b90ef943 -Block 0008 [ 13]: 31e5c560a7d7b77b -Block 0008 [ 14]: be032148a0c07c8f -Block 0008 [ 15]: a753419700cfc665 -Block 0008 [ 16]: 6ebe31a9f4254abf -Block 0008 [ 17]: 55b9f7db14c8244e -Block 0008 [ 18]: 1a8b2e3ccf030e92 -Block 0008 [ 19]: 82636fca802840dd -Block 0008 [ 20]: f732a1969e172b06 -Block 0008 [ 21]: edd93cf252c26f25 -Block 0008 [ 22]: ac3ad0bbcdd482eb -Block 0008 [ 23]: d75ff2eaa53fd962 -Block 0008 [ 24]: 9c07e2e7b31a5b8e -Block 0008 [ 25]: addda03cda46d7cc -Block 0008 [ 26]: a5bf703a5fb91a4c -Block 0008 [ 27]: 741f1336aec16ba8 -Block 0008 [ 28]: 10182d82ff473a9c -Block 0008 [ 29]: 347fb75292f43be2 -Block 0008 [ 30]: 847b9eb98c312b36 -Block 0008 [ 31]: 33bc3ec0ad10331b -Block 0008 [ 32]: 15b2caf7cb5410db -Block 0008 [ 33]: 0c3550be731282e4 -Block 0008 [ 34]: 5a397cc26fff99fa -Block 0008 [ 35]: b17c5d6e4fd1ede4 -Block 0008 [ 36]: db2fa43068790f57 -Block 0008 [ 37]: 3269f58b18995887 -Block 0008 [ 38]: f47603af7a10d897 -Block 0008 [ 39]: f6d4a7472cf56197 -Block 0008 [ 40]: ef0d98db05c2bbcd -Block 0008 [ 41]: ce3f14c41600ff4b -Block 0008 [ 42]: 32f4c504313caf7d -Block 0008 [ 43]: f3b880db5af93e8f -Block 0008 [ 44]: 0fe500aa73c7088f -Block 0008 [ 45]: aee6e34e64b6cb6e -Block 0008 [ 46]: 3a05bef736d336dc -Block 0008 [ 47]: 6e853605e75f7183 -Block 0008 [ 48]: 206236c8094ebac1 -Block 0008 [ 49]: b35b4b3d8c5fb4ea -Block 0008 [ 50]: 28ecc628dc848c7d -Block 0008 [ 51]: 735c7631822806f4 -Block 0008 [ 52]: 31bb983646cd47f0 -Block 0008 [ 53]: 4bd96277dc02af9e -Block 0008 [ 54]: 70c3b35fda965c73 -Block 0008 [ 55]: 413eefd5bcafb495 -Block 0008 [ 56]: a1f06d3c4204d355 -Block 0008 [ 57]: f2b35ed34d3659ce -Block 0008 [ 58]: 5dbdb39ab57a8787 -Block 0008 [ 59]: d03c3ec335d9a228 -Block 0008 [ 60]: 5e440fcc902494ef -Block 0008 [ 61]: eeae54479b9f6253 -Block 0008 [ 62]: 12b636e97e88b26c -Block 0008 [ 63]: e392640ef6fbfccb -Block 0008 [ 64]: 439779f19e28aed4 -Block 0008 [ 65]: 8586ae7521b5f693 -Block 0008 [ 66]: 4c9c7e32a95bf1a6 -Block 0008 [ 67]: 7bd2f4eb39dd3020 -Block 0008 [ 68]: 486c6934408bedca -Block 0008 [ 69]: 99c8621fd54e9641 -Block 0008 [ 70]: ab95e5111f8a859a -Block 0008 [ 71]: 16c72004f220c79d -Block 0008 [ 72]: deef568d8f11d1ae -Block 0008 [ 73]: 3866577767167f84 -Block 0008 [ 74]: 448c4025a5b6b8c2 -Block 0008 [ 75]: 2601576f5e73029f -Block 0008 [ 76]: 48979d9e18c40aaa -Block 0008 [ 77]: f63696d7e72f4ab2 -Block 0008 [ 78]: e1be44739c6330cb -Block 0008 [ 79]: fcefc4f07881bedc -Block 0008 [ 80]: cb7bcf5fe34c782a -Block 0008 [ 81]: e536242d66e2b5e4 -Block 0008 [ 82]: d52c6c430151e02a -Block 0008 [ 83]: d67a851128f1af4b -Block 0008 [ 84]: 5c40071ed9fbe92d -Block 0008 [ 85]: ffea71996bb4f5c5 -Block 0008 [ 86]: daf4bdc1e45dcfdd -Block 0008 [ 87]: 91d04cfa46997480 -Block 0008 [ 88]: 3055156993a62fe4 -Block 0008 [ 89]: bbc1e67dfdb0f4cd -Block 0008 [ 90]: 39309ec35c7b4b49 -Block 0008 [ 91]: 303f31e117d00073 -Block 0008 [ 92]: 21a92f25e01fb7a0 -Block 0008 [ 93]: 0e0bc2d80d2f294e -Block 0008 [ 94]: 5ddf007474aec619 -Block 0008 [ 95]: 2cb4833140dbb020 -Block 0008 [ 96]: f7cc731050f4146b -Block 0008 [ 97]: d9c3005ec7fc26ac -Block 0008 [ 98]: 608d03d6c052d7e9 -Block 0008 [ 99]: 9dbe4bdff7dd483b -Block 0008 [100]: a735b1afee8074a6 -Block 0008 [101]: d85adbf0d4c585fe -Block 0008 [102]: 3d83720b804a263a -Block 0008 [103]: a9ad69e57cedb183 -Block 0008 [104]: a7d39c61c07eeb38 -Block 0008 [105]: c99c6f286d7b9431 -Block 0008 [106]: b8285a86d03c906b -Block 0008 [107]: df798910bc041924 -Block 0008 [108]: 8c49386589f299a7 -Block 0008 [109]: 45fe92757bf6d8d6 -Block 0008 [110]: 7dba0018b478baee -Block 0008 [111]: 56cf5f3f45a78ace -Block 0008 [112]: 1916dd1b710c89b8 -Block 0008 [113]: b02351109870d936 -Block 0008 [114]: e8ff79a2bd9e3d5d -Block 0008 [115]: d710953fc470a700 -Block 0008 [116]: 9cb71e374ecf8e65 -Block 0008 [117]: 6e95efbaafa1d7ca -Block 0008 [118]: 1d594725c8808490 -Block 0008 [119]: 792ca14862c298f8 -Block 0008 [120]: afa12fb82ecc5ec2 -Block 0008 [121]: ff7287be94d8ab12 -Block 0008 [122]: e36b81492fc2888e -Block 0008 [123]: c30a09066d63a87d -Block 0008 [124]: 6adde8f5e302d407 -Block 0008 [125]: a3d37dcc63d0ce1a -Block 0008 [126]: 5e5a76b9feac9179 -Block 0008 [127]: 38a72e7f58178079 -Block 0009 [ 0]: b0a3780fd2bdce93 -Block 0009 [ 1]: 27e7d325927ac969 -Block 0009 [ 2]: 2f2083aae423aaf9 -Block 0009 [ 3]: b4a06fe202ad3cac -Block 0009 [ 4]: 445f1088b3dc4aa1 -Block 0009 [ 5]: 13857c469c62aedb -Block 0009 [ 6]: afc29cfad94924af -Block 0009 [ 7]: face093366f984d4 -Block 0009 [ 8]: af941754039f0f69 -Block 0009 [ 9]: be3cf961d04b269b -Block 0009 [ 10]: 3570b906c3d08907 -Block 0009 [ 11]: bd2e3cd3bc2820a6 -Block 0009 [ 12]: a4211b9697d1882e -Block 0009 [ 13]: 304cbd04ac5ea0f1 -Block 0009 [ 14]: bc8a44351a93bf06 -Block 0009 [ 15]: dc35dce20205f20e -Block 0009 [ 16]: 27f87fc01a720476 -Block 0009 [ 17]: a7bf7924b4c9514d -Block 0009 [ 18]: 5711917da46d37d5 -Block 0009 [ 19]: 2b7871339e862ec0 -Block 0009 [ 20]: 37d5663947745563 -Block 0009 [ 21]: df99f88b5ad39469 -Block 0009 [ 22]: b8e2f35e53a7cec0 -Block 0009 [ 23]: 564180fd607bb368 -Block 0009 [ 24]: 8cad6f3858da8350 -Block 0009 [ 25]: fb611a961ad95aa5 -Block 0009 [ 26]: 98ef6ba355876428 -Block 0009 [ 27]: 1b32903fac102ee3 -Block 0009 [ 28]: 427ccb260b1e7f48 -Block 0009 [ 29]: 735c3b2404a42461 -Block 0009 [ 30]: 5bed75723136a22b -Block 0009 [ 31]: e962f930dc954571 -Block 0009 [ 32]: d4a907ed721dbd79 -Block 0009 [ 33]: 955bbdda37b3f34a -Block 0009 [ 34]: 8f1fdd908a91bda4 -Block 0009 [ 35]: 7b79831f7e8b8113 -Block 0009 [ 36]: 26a8e6613b3b2b49 -Block 0009 [ 37]: 180e1ee55b199460 -Block 0009 [ 38]: 1ca571295ae0ed7e -Block 0009 [ 39]: 3f5b7ca096599301 -Block 0009 [ 40]: e61f938973523bb8 -Block 0009 [ 41]: 87c36e5e521488f4 -Block 0009 [ 42]: d8d539b4d237e833 -Block 0009 [ 43]: 1ab7390b90a1a274 -Block 0009 [ 44]: bc917b2175e58dcb -Block 0009 [ 45]: a7d934862209853f -Block 0009 [ 46]: 637ca59d567b62e5 -Block 0009 [ 47]: fff021798cdf5193 -Block 0009 [ 48]: 9b19eb391a8ee238 -Block 0009 [ 49]: c11508809ecefdab -Block 0009 [ 50]: 4c86f3d3e42c58f9 -Block 0009 [ 51]: 40310029f5ea5939 -Block 0009 [ 52]: 17b721213f596d4e -Block 0009 [ 53]: 98c4d80ebebd4bd7 -Block 0009 [ 54]: c0a31eddf6a9d7d6 -Block 0009 [ 55]: a1fb4f66485fc6e2 -Block 0009 [ 56]: f11382f56acc85c5 -Block 0009 [ 57]: fa0b75b0a88d10e9 -Block 0009 [ 58]: 12ce42a670ce1fd0 -Block 0009 [ 59]: 76b4da0cef87cc68 -Block 0009 [ 60]: a8d6a4c9e8be9f7a -Block 0009 [ 61]: b907271a2a031157 -Block 0009 [ 62]: 199befa19191d2e4 -Block 0009 [ 63]: b0e40c9c1d56081b -Block 0009 [ 64]: 01e145b266f8de0b -Block 0009 [ 65]: e34b15fa79fa49d7 -Block 0009 [ 66]: 97fd6b6f65bb237e -Block 0009 [ 67]: d406737c4ba4e39e -Block 0009 [ 68]: ca55f8a35aba2d71 -Block 0009 [ 69]: be75c5e31dae69dd -Block 0009 [ 70]: e2f19bb804e76643 -Block 0009 [ 71]: 84c93f1a2d5406de -Block 0009 [ 72]: 71de7e8ea38acc40 -Block 0009 [ 73]: 6045de83dcd55a75 -Block 0009 [ 74]: 5fbb843a3027bc35 -Block 0009 [ 75]: 6a048e3c908d32d2 -Block 0009 [ 76]: e1786cec571f1b02 -Block 0009 [ 77]: b8017677e14f52ad -Block 0009 [ 78]: a9c1c3f396beb68a -Block 0009 [ 79]: 2dee5c5474e27a16 -Block 0009 [ 80]: a33ddec78c2791a2 -Block 0009 [ 81]: c3993ab011a8c326 -Block 0009 [ 82]: 0156139d60d9ef8f -Block 0009 [ 83]: b043451f90b79435 -Block 0009 [ 84]: fe0a7ab213f5c1ba -Block 0009 [ 85]: c938c6c891be1a10 -Block 0009 [ 86]: a622051332acc0d8 -Block 0009 [ 87]: 296927a8758884f9 -Block 0009 [ 88]: 56fd6a2eed0d9492 -Block 0009 [ 89]: 6a015aa7cfef1131 -Block 0009 [ 90]: a6b617e5eec737a2 -Block 0009 [ 91]: 513fc9c9cffdb081 -Block 0009 [ 92]: 735c5b12ec075d55 -Block 0009 [ 93]: 154db0572a26a799 -Block 0009 [ 94]: b52849ae516cbaa0 -Block 0009 [ 95]: 499bf311c6d637c2 -Block 0009 [ 96]: 7cc8a466ca999627 -Block 0009 [ 97]: c0c51ac7a40c09a8 -Block 0009 [ 98]: cc4a21f7d98856df -Block 0009 [ 99]: 2708b57c1aa732d9 -Block 0009 [100]: 288c8a7fa02d1c03 -Block 0009 [101]: bc0a22b5efb71cf7 -Block 0009 [102]: 3deb5b3417c4b18d -Block 0009 [103]: d51bc37c379fa6f5 -Block 0009 [104]: f514be36ce5779a1 -Block 0009 [105]: ea0e5b5b10e84798 -Block 0009 [106]: 79a473516c9e06bc -Block 0009 [107]: d40ede4f6f342260 -Block 0009 [108]: 7377637414121f62 -Block 0009 [109]: 9c494885f3873660 -Block 0009 [110]: 838cb9b3336aa24b -Block 0009 [111]: fa47362cdc574e05 -Block 0009 [112]: a5839dcd7114bd83 -Block 0009 [113]: 78a13f2beb6f9156 -Block 0009 [114]: 288375a664188f4f -Block 0009 [115]: 753c63ed46a2e9fe -Block 0009 [116]: 370dff8650c5b045 -Block 0009 [117]: 7aae6f1745618d97 -Block 0009 [118]: f43c9b5dcfee3f5a -Block 0009 [119]: b0680fd9491ad64c -Block 0009 [120]: 1141e3c369745435 -Block 0009 [121]: 85ca43583cf136a8 -Block 0009 [122]: bc81e26caa3450b8 -Block 0009 [123]: 45ab7b12ba8fa62d -Block 0009 [124]: 1ab06a8decb95464 -Block 0009 [125]: 02ea3e5285e64651 -Block 0009 [126]: 5bf0abfdda4580fd -Block 0009 [127]: 725f7b6cff77c6e0 -Block 0010 [ 0]: 03ddd0d5570954ca -Block 0010 [ 1]: ef3531bd3c791152 -Block 0010 [ 2]: 151dece8403c0d9d -Block 0010 [ 3]: da83b8a08211a3a1 -Block 0010 [ 4]: 74ce6090bbcddce1 -Block 0010 [ 5]: ca859424072c4c37 -Block 0010 [ 6]: 2a28b30cff906536 -Block 0010 [ 7]: eb19f039a6e709c2 -Block 0010 [ 8]: a8d51731be7af8e7 -Block 0010 [ 9]: f7b20930fb8c9e2f -Block 0010 [ 10]: 5817466b12638a27 -Block 0010 [ 11]: 9a148456eddfcfc6 -Block 0010 [ 12]: 809e57c067c64830 -Block 0010 [ 13]: f52a48b3b0a49652 -Block 0010 [ 14]: 46486dbab9e4f52e -Block 0010 [ 15]: d19cfd34073da96c -Block 0010 [ 16]: ae6c8f849700c5fa -Block 0010 [ 17]: bb26de83dc309ddd -Block 0010 [ 18]: 3621501f29e43d7e -Block 0010 [ 19]: 6d49650cb2caf71f -Block 0010 [ 20]: ff570032488b153e -Block 0010 [ 21]: 5f357afb9e6e2a54 -Block 0010 [ 22]: 645e38d8d1b39400 -Block 0010 [ 23]: 0741788f71b54260 -Block 0010 [ 24]: 0cee6a102d995f2d -Block 0010 [ 25]: 2a85c57a64e631e3 -Block 0010 [ 26]: 59f7db1d77c01f84 -Block 0010 [ 27]: 0c8e05b7b0b36d8f -Block 0010 [ 28]: a2e84e8433aef9d8 -Block 0010 [ 29]: 6ffcb0a98564a770 -Block 0010 [ 30]: 304677fa27561674 -Block 0010 [ 31]: cc9189fa4d49edc2 -Block 0010 [ 32]: e8f54aafcc8f43a3 -Block 0010 [ 33]: 46586c9b98c09a8c -Block 0010 [ 34]: 4d35918e1e54a1e3 -Block 0010 [ 35]: 21e45b306f3096b3 -Block 0010 [ 36]: 1efe6f135e4ded82 -Block 0010 [ 37]: ff0fe64bb2ce07d4 -Block 0010 [ 38]: 6ed2ce4f40dfdc7d -Block 0010 [ 39]: 77afc5bf75181a5b -Block 0010 [ 40]: ccd042f31c5ee238 -Block 0010 [ 41]: 52340d666cb68e95 -Block 0010 [ 42]: 97ab16d262602b70 -Block 0010 [ 43]: 1f39fd2aa184e1ed -Block 0010 [ 44]: c7702a1d4d12e238 -Block 0010 [ 45]: 84ceb8d458e0e33d -Block 0010 [ 46]: 9272dae6375d93c3 -Block 0010 [ 47]: d30477baec2da838 -Block 0010 [ 48]: 31bcea37afdc96bc -Block 0010 [ 49]: b6d44bf5e49542e8 -Block 0010 [ 50]: 11f9e05081bc0e28 -Block 0010 [ 51]: c6bb99b0a771061d -Block 0010 [ 52]: e1786981536369f7 -Block 0010 [ 53]: 28e61922e0e07d08 -Block 0010 [ 54]: ff3334fbd1246f0e -Block 0010 [ 55]: 902b19655419b125 -Block 0010 [ 56]: fa397b7ac7afe542 -Block 0010 [ 57]: 1d20f5e5297b3f68 -Block 0010 [ 58]: 7ad196c294115559 -Block 0010 [ 59]: e2df32ba888e23be -Block 0010 [ 60]: d61a690ecabc6747 -Block 0010 [ 61]: f70414d921fec4d8 -Block 0010 [ 62]: 87232a2ce7e819d2 -Block 0010 [ 63]: 48986188e833df7f -Block 0010 [ 64]: 6b691c31cc8cd991 -Block 0010 [ 65]: 3f6ecf0445fc11b4 -Block 0010 [ 66]: e3cf3c583bc686a2 -Block 0010 [ 67]: 4ba77f30caaeddd6 -Block 0010 [ 68]: 120abdd4f3be4414 -Block 0010 [ 69]: 135f1c23fb5fb6f0 -Block 0010 [ 70]: 523ec1b7a2c0dbbc -Block 0010 [ 71]: 68f0591525973d04 -Block 0010 [ 72]: 8dfbef7be78d85a8 -Block 0010 [ 73]: b6914a36a85c30d0 -Block 0010 [ 74]: e543aaa0bf3022fa -Block 0010 [ 75]: cd6a0586a48cbcbd -Block 0010 [ 76]: ecd093c52b48bb8f -Block 0010 [ 77]: 1fb1b6154d0885e9 -Block 0010 [ 78]: 9373b1fddfcd7095 -Block 0010 [ 79]: 839d266721445ca9 -Block 0010 [ 80]: 9eb08685427956ac -Block 0010 [ 81]: 0e67e850943c8234 -Block 0010 [ 82]: 48b1bfefc669f248 -Block 0010 [ 83]: 9ac301131fd1c8c9 -Block 0010 [ 84]: a24208585c03e11e -Block 0010 [ 85]: 3690d7a5278eeb32 -Block 0010 [ 86]: 6b0e1a590041722b -Block 0010 [ 87]: d716ae87093492fe -Block 0010 [ 88]: ed72bf36d55e6044 -Block 0010 [ 89]: eb728fd156a92044 -Block 0010 [ 90]: 73b4ba90f53fed19 -Block 0010 [ 91]: 12775011afcf408c -Block 0010 [ 92]: 4fdf59cac70fe25c -Block 0010 [ 93]: 686695291bcf42a5 -Block 0010 [ 94]: b6830f00eec798ae -Block 0010 [ 95]: 360858c0dcc89f12 -Block 0010 [ 96]: f8e4d23cd8dfe213 -Block 0010 [ 97]: 9c0e60bc54133096 -Block 0010 [ 98]: 4527904c9616d116 -Block 0010 [ 99]: 9c6c29121236d5f8 -Block 0010 [100]: 895f1da7f88403c5 -Block 0010 [101]: 66a84eb06f5d9f70 -Block 0010 [102]: d8c40c8c0fa58c6b -Block 0010 [103]: 1e3334879f0a2c95 -Block 0010 [104]: f5c5e477fce27587 -Block 0010 [105]: 8bf3ccd456124f33 -Block 0010 [106]: 35062f97ca508398 -Block 0010 [107]: 99f2ef47178939f3 -Block 0010 [108]: 25bec767a4353792 -Block 0010 [109]: 65cb0390af523f96 -Block 0010 [110]: f304b1bc4a25b07d -Block 0010 [111]: 38f3a810a5a125b7 -Block 0010 [112]: 550cfb4edbbd1860 -Block 0010 [113]: 1ae72d2f286bb73e -Block 0010 [114]: bdaf0575414d4b9f -Block 0010 [115]: c6c7935c63c31fe8 -Block 0010 [116]: e95b74dd288e34b2 -Block 0010 [117]: b1903cce17b3d187 -Block 0010 [118]: 0146aa1f3ad8af94 -Block 0010 [119]: e5dd909b6501de5f -Block 0010 [120]: 29b549c6418ca13e -Block 0010 [121]: 783588f7cb9812d2 -Block 0010 [122]: 12ebda418bc5d4a6 -Block 0010 [123]: 1c45f811c53c0cfa -Block 0010 [124]: e839adeabc081579 -Block 0010 [125]: c675e569e3e8c008 -Block 0010 [126]: f2fe4a325fbb0afb -Block 0010 [127]: 968e549856139bcf -Block 0011 [ 0]: 4c49fef7ac59b00f -Block 0011 [ 1]: 0b77e546680ba26c -Block 0011 [ 2]: 50f92c0489854697 -Block 0011 [ 3]: 9017915d63b7939f -Block 0011 [ 4]: fa05ffa87d836044 -Block 0011 [ 5]: e3f79adbb7a7a520 -Block 0011 [ 6]: 72daaff6c8d382f8 -Block 0011 [ 7]: e82c1da0c1930016 -Block 0011 [ 8]: 7cd9c05a7d016194 -Block 0011 [ 9]: 4cb21d45b7ccd0e9 -Block 0011 [ 10]: 15ca0a31b3e48180 -Block 0011 [ 11]: 8044760aaec86f6d -Block 0011 [ 12]: b6f642412cf27a8f -Block 0011 [ 13]: 9b60769987b2563c -Block 0011 [ 14]: e0ce63cb590a4ea2 -Block 0011 [ 15]: 94678a3461c13a0c -Block 0011 [ 16]: 84f191a8225d0e4c -Block 0011 [ 17]: 217d697f39654936 -Block 0011 [ 18]: f46ace239ca24436 -Block 0011 [ 19]: 04bdb1e1c224687a -Block 0011 [ 20]: c8246b5f41051cd0 -Block 0011 [ 21]: 816447ddbb3ac9c7 -Block 0011 [ 22]: d758792a4a7137e0 -Block 0011 [ 23]: e682f6f30d1d433b -Block 0011 [ 24]: 0858a63103128803 -Block 0011 [ 25]: 025739918a0a3f53 -Block 0011 [ 26]: a510d28ff33d16ee -Block 0011 [ 27]: 948f5fab13544be2 -Block 0011 [ 28]: 1a4309dbf409b687 -Block 0011 [ 29]: 8038e07e5565f2cd -Block 0011 [ 30]: c5b37d07e8ae12fc -Block 0011 [ 31]: 598afd83af3da73c -Block 0011 [ 32]: 7474f32deaab1535 -Block 0011 [ 33]: e48f764af2a6abcf -Block 0011 [ 34]: f5d7003e1d44ed2f -Block 0011 [ 35]: d724ef97ce8f28ef -Block 0011 [ 36]: 99c664b60d84b037 -Block 0011 [ 37]: e9fde5a58781af6e -Block 0011 [ 38]: b99837a91be9cb19 -Block 0011 [ 39]: 59f96c210e2fa6ac -Block 0011 [ 40]: ccc66eb3fa30a338 -Block 0011 [ 41]: b5c869fd62a7280e -Block 0011 [ 42]: 6e8aa1928d7dc215 -Block 0011 [ 43]: beee10b5278d8d87 -Block 0011 [ 44]: 6b5ed4ed79ed72c5 -Block 0011 [ 45]: 47f7b8798b2f68de -Block 0011 [ 46]: 543a7a6285c3dcc4 -Block 0011 [ 47]: e9d0f798b6d71392 -Block 0011 [ 48]: 46cfa43dbc22d22e -Block 0011 [ 49]: 1819aa20872a5242 -Block 0011 [ 50]: 14722a59b4bb23ff -Block 0011 [ 51]: cfd15dbf15de67cd -Block 0011 [ 52]: 5bff70426ec0d586 -Block 0011 [ 53]: 17cd19e555bac43a -Block 0011 [ 54]: 97d488c659d779da -Block 0011 [ 55]: 27b7a222c598758a -Block 0011 [ 56]: ccd1f8510e13d811 -Block 0011 [ 57]: 08a1336acf0b984a -Block 0011 [ 58]: 7068b21fb1f0d2c7 -Block 0011 [ 59]: 607953cb347f3495 -Block 0011 [ 60]: 1c8d465a07eaa402 -Block 0011 [ 61]: c66d8322c4b00513 -Block 0011 [ 62]: 277e0b3f25be599e -Block 0011 [ 63]: 181e765d17794631 -Block 0011 [ 64]: 915ed3d2877de1f3 -Block 0011 [ 65]: 692a313bbce47822 -Block 0011 [ 66]: b9023d0e3880e18c -Block 0011 [ 67]: 509fd562b469d027 -Block 0011 [ 68]: 2ee478a22da3b588 -Block 0011 [ 69]: fbb7f63122cf790b -Block 0011 [ 70]: ec7efcaba6205527 -Block 0011 [ 71]: b845a0646f3556de -Block 0011 [ 72]: 8bb8eacb976ff0ac -Block 0011 [ 73]: 8c4770b357cae7bb -Block 0011 [ 74]: e7ff1eb9e162b3c4 -Block 0011 [ 75]: 36bcc0ae6999e027 -Block 0011 [ 76]: d11efd1e6572021c -Block 0011 [ 77]: 86ff42cd01884655 -Block 0011 [ 78]: 4223544c88424dfe -Block 0011 [ 79]: 4b365a978fee311e -Block 0011 [ 80]: b12364feb3504070 -Block 0011 [ 81]: df25ceac79a9d96f -Block 0011 [ 82]: 17f4bca97d018e65 -Block 0011 [ 83]: 7246f6585ffb01e3 -Block 0011 [ 84]: a8b42a787c6b6022 -Block 0011 [ 85]: f2a78097b0b0680c -Block 0011 [ 86]: 752878d2782c7fe6 -Block 0011 [ 87]: 9c207d3c31347e90 -Block 0011 [ 88]: 80414cc28ab2a4ea -Block 0011 [ 89]: 939a5979926400f5 -Block 0011 [ 90]: 33ced62c0cf8eadd -Block 0011 [ 91]: e2641df66b2f2e14 -Block 0011 [ 92]: 343c1775a9713f11 -Block 0011 [ 93]: 15cc16374ac1ba54 -Block 0011 [ 94]: fd70d352bf97784f -Block 0011 [ 95]: 0b37018eeed56443 -Block 0011 [ 96]: 27628b3623c0d7d8 -Block 0011 [ 97]: 9313a39ec83b1ef8 -Block 0011 [ 98]: eba1b0a86789a078 -Block 0011 [ 99]: 549000caea6c2a19 -Block 0011 [100]: 246b8e1f709b1997 -Block 0011 [101]: b2499fdf4eff52d3 -Block 0011 [102]: 5b75d183d56dea28 -Block 0011 [103]: 853e211fa80b47f5 -Block 0011 [104]: 1e394452303cc7e8 -Block 0011 [105]: 8dbc8f821b10491b -Block 0011 [106]: e079ff1750b59d87 -Block 0011 [107]: a2d95011a7cf7c4a -Block 0011 [108]: 2f6d3ec06872984e -Block 0011 [109]: 3dc900a76fddb83b -Block 0011 [110]: fc3b3e3ea263f6bd -Block 0011 [111]: bf125c404f604562 -Block 0011 [112]: f79194f3adfd9393 -Block 0011 [113]: 2411362a7fe1ea6b -Block 0011 [114]: 22ba895c0df4f85d -Block 0011 [115]: c323d609ebc0c49c -Block 0011 [116]: 6f463a3c99faa919 -Block 0011 [117]: 84a00b8d7d5c20f5 -Block 0011 [118]: de2a24e2fb01945e -Block 0011 [119]: c14cc040ea714c20 -Block 0011 [120]: 84d876ac2e6173dd -Block 0011 [121]: 1cbe9815d0686423 -Block 0011 [122]: 0ab7fd6174e1bd51 -Block 0011 [123]: 76723d2beaaaf60f -Block 0011 [124]: e325ac3fb53fd90e -Block 0011 [125]: d773e4e19cc5b1ba -Block 0011 [126]: 2606fe90ceae82c1 -Block 0011 [127]: 228177ea8ed3ae89 -Block 0012 [ 0]: 1aa1f692b06591fe -Block 0012 [ 1]: 4ff66d69e7f3dd1c -Block 0012 [ 2]: 22c65efa4de36bf5 -Block 0012 [ 3]: a23b7f7edc05f69b -Block 0012 [ 4]: 02b0d70fa75a03c1 -Block 0012 [ 5]: 91a77e9c3938b41b -Block 0012 [ 6]: 01cd41809dded109 -Block 0012 [ 7]: f53382e6636f33de -Block 0012 [ 8]: 6d7f6a41e3560432 -Block 0012 [ 9]: d3beb64a595da5ab -Block 0012 [ 10]: 99dbe85c7dbf4eb3 -Block 0012 [ 11]: ac35273dd506ae67 -Block 0012 [ 12]: 76cc23ae6fe61472 -Block 0012 [ 13]: ac8f7d015d195a2c -Block 0012 [ 14]: c16e060450d1c5eb -Block 0012 [ 15]: 35a65ce2284ad0bb -Block 0012 [ 16]: 75389162f3327070 -Block 0012 [ 17]: e4a3379341461be6 -Block 0012 [ 18]: 734e3e9b0686dd0f -Block 0012 [ 19]: a2a2e80d0cf4dfaa -Block 0012 [ 20]: c6b14a60cfe360eb -Block 0012 [ 21]: 5f8d57f1d33c0144 -Block 0012 [ 22]: 5a7e396a6af6843d -Block 0012 [ 23]: 6d7a624d09556dfc -Block 0012 [ 24]: 4c175bf98ecd2b49 -Block 0012 [ 25]: d5297a8f57909d9d -Block 0012 [ 26]: a28975f58c2c59c9 -Block 0012 [ 27]: 3d8ee5d5caf9a91f -Block 0012 [ 28]: 430284948e2f06a8 -Block 0012 [ 29]: bc43c1cc56889cc5 -Block 0012 [ 30]: 97e712988e3a8b65 -Block 0012 [ 31]: a765e883df64b236 -Block 0012 [ 32]: 80dd97974d89bb83 -Block 0012 [ 33]: edcd7d4ab1718307 -Block 0012 [ 34]: 4c4cb5a8b9572ba2 -Block 0012 [ 35]: d7cc67bfc5484140 -Block 0012 [ 36]: 412863409d76bc0f -Block 0012 [ 37]: 8578c23a7d2742d3 -Block 0012 [ 38]: d6ba907e11fdaf70 -Block 0012 [ 39]: e41fdecb460897e3 -Block 0012 [ 40]: 550ebdb79d17f607 -Block 0012 [ 41]: 97a58453deb8a8ef -Block 0012 [ 42]: 237fc5519b9df07e -Block 0012 [ 43]: 357f19eedd0671f3 -Block 0012 [ 44]: b4b36cff5d679fda -Block 0012 [ 45]: bbc57b82f19ec6b0 -Block 0012 [ 46]: 9bb37ab02ce546be -Block 0012 [ 47]: 5f287acb1eaf68fc -Block 0012 [ 48]: 91107640cc7d0324 -Block 0012 [ 49]: a581af8774b2d68c -Block 0012 [ 50]: a73ce0d9e372c914 -Block 0012 [ 51]: 1fad2663947a6aa4 -Block 0012 [ 52]: 76bf7c2bef22fd78 -Block 0012 [ 53]: 2509b1a0ea1dd03f -Block 0012 [ 54]: 8a821d14ef35edbd -Block 0012 [ 55]: de48bc86661813ad -Block 0012 [ 56]: 2d12a49f8604079c -Block 0012 [ 57]: 6a841f234644afe3 -Block 0012 [ 58]: d2483a08b415b399 -Block 0012 [ 59]: 27fc874f14e55938 -Block 0012 [ 60]: 5d065817f04bf0fb -Block 0012 [ 61]: c21d5ee69cb65292 -Block 0012 [ 62]: 220b745cd78a8810 -Block 0012 [ 63]: c195af564cee2365 -Block 0012 [ 64]: 44f41833b93c1409 -Block 0012 [ 65]: ee9bf5e3123d0ab1 -Block 0012 [ 66]: 1194671b1341d19c -Block 0012 [ 67]: 9f26c3e94e234394 -Block 0012 [ 68]: d4eef2a61a8b6d4e -Block 0012 [ 69]: 0ac0b767072c4bf0 -Block 0012 [ 70]: 49ba7457a25f77f9 -Block 0012 [ 71]: 061dcba9406ff132 -Block 0012 [ 72]: f606b0e4b069928b -Block 0012 [ 73]: 3969b0cb47226af0 -Block 0012 [ 74]: 0aecdd23eab0f972 -Block 0012 [ 75]: e6a58eac70e044e8 -Block 0012 [ 76]: 270102338cb46cf6 -Block 0012 [ 77]: 22aeeac757cf607f -Block 0012 [ 78]: 1f228e34a8200d4d -Block 0012 [ 79]: 5e17277e4c10da0c -Block 0012 [ 80]: 5c88ae3dd3ea5417 -Block 0012 [ 81]: aad3d6b90c9a5620 -Block 0012 [ 82]: 1a5b3da07620b085 -Block 0012 [ 83]: c2b0ef4813ca090f -Block 0012 [ 84]: e7da9456205e044e -Block 0012 [ 85]: 96603c1683fb8124 -Block 0012 [ 86]: 25964d0131ece98e -Block 0012 [ 87]: 6692fa3c89ba0117 -Block 0012 [ 88]: bbcd1c40386e9fe1 -Block 0012 [ 89]: 8f96217bf8888393 -Block 0012 [ 90]: caf344b6650d2a8a -Block 0012 [ 91]: f3a842ccd3049b9d -Block 0012 [ 92]: 91e8af127f1ac37c -Block 0012 [ 93]: 60545d67f008014f -Block 0012 [ 94]: 610241b298102ec2 -Block 0012 [ 95]: 2fee36def2bcff5b -Block 0012 [ 96]: 96fd68d0e794897e -Block 0012 [ 97]: d208840dabc9d601 -Block 0012 [ 98]: e779e8f69cea5961 -Block 0012 [ 99]: a269dc901338443f -Block 0012 [100]: 0e87928cf416e99d -Block 0012 [101]: 8703d89cf0d3c7dc -Block 0012 [102]: 04def1cf5bef1ed9 -Block 0012 [103]: 13a87535ed94991c -Block 0012 [104]: b18452f74892b6aa -Block 0012 [105]: 4566d6996833aae0 -Block 0012 [106]: 9d2abd6fbcaceaae -Block 0012 [107]: 87517fc9e8b71e10 -Block 0012 [108]: 7846bada74ea3e86 -Block 0012 [109]: 832ce5b17274725a -Block 0012 [110]: 02d2923df96b12ce -Block 0012 [111]: fdfe0934a666c96d -Block 0012 [112]: 298bd9e467374d73 -Block 0012 [113]: 8db6e9c331b259b7 -Block 0012 [114]: b078a0eed2399812 -Block 0012 [115]: f7bba7f1bc418e5a -Block 0012 [116]: a95ac6d79c0221e4 -Block 0012 [117]: 73a71076b1880da2 -Block 0012 [118]: 5adf0a09f1bb7192 -Block 0012 [119]: 2fb1f63708d9b8ae -Block 0012 [120]: 0133e7c0e200a44b -Block 0012 [121]: f0c57cf2307571bb -Block 0012 [122]: fe8091f400d827e8 -Block 0012 [123]: a59343d47427e4ee -Block 0012 [124]: 31a936eed5ba7aa1 -Block 0012 [125]: e02ae76007527fc7 -Block 0012 [126]: 920785762df5bb3b -Block 0012 [127]: 578d1590559f9bdf -Block 0013 [ 0]: f9c15bd16c03239a -Block 0013 [ 1]: 85c0830339123a93 -Block 0013 [ 2]: afdec9a3430ee91a -Block 0013 [ 3]: 3aacac9cc4d9ed29 -Block 0013 [ 4]: 73278ef5208157fa -Block 0013 [ 5]: 1bc7ef529b5106c7 -Block 0013 [ 6]: 3309f9a85af31610 -Block 0013 [ 7]: 22bd82aad0437be0 -Block 0013 [ 8]: 332b11e289b2c3ca -Block 0013 [ 9]: 3b7efd6c480aab26 -Block 0013 [ 10]: 417f05eb1907725d -Block 0013 [ 11]: 24aed9811501da12 -Block 0013 [ 12]: fa537149a94750ba -Block 0013 [ 13]: 204a652aefa4e11d -Block 0013 [ 14]: 0bc3743c3b55dd7c -Block 0013 [ 15]: 49d71f9813bff428 -Block 0013 [ 16]: 27ef1ffa06e74a46 -Block 0013 [ 17]: 6abc24120f0c5b51 -Block 0013 [ 18]: 6cb123ac54b47ba4 -Block 0013 [ 19]: ae6a1e638e9ff6c0 -Block 0013 [ 20]: c12e5f4396f2b198 -Block 0013 [ 21]: 44549a8d343ab2bf -Block 0013 [ 22]: 49d5c59cc5ad6279 -Block 0013 [ 23]: b150f0724fc9b595 -Block 0013 [ 24]: f6e668a1af287f10 -Block 0013 [ 25]: 978c9313f02db8ff -Block 0013 [ 26]: 44789c797bed7560 -Block 0013 [ 27]: 1a96a5cf8d93929a -Block 0013 [ 28]: 9e8be9f3e5d17933 -Block 0013 [ 29]: 2eaf1e47ac0301c0 -Block 0013 [ 30]: a0e9fd0333d0fdf8 -Block 0013 [ 31]: 6a1f57508f7cf676 -Block 0013 [ 32]: 5f8d891ef567e252 -Block 0013 [ 33]: 1c24d2d0405e9bea -Block 0013 [ 34]: f1cf892b940462b4 -Block 0013 [ 35]: c43a6a871f5bdf30 -Block 0013 [ 36]: 7ca36bd207fda755 -Block 0013 [ 37]: 637d10dc44ee9657 -Block 0013 [ 38]: 6c3ba081af2c0c7a -Block 0013 [ 39]: a06156952886a451 -Block 0013 [ 40]: af5b9ae79550be4f -Block 0013 [ 41]: cfe7e3f7553433fc -Block 0013 [ 42]: 663cf8c55395264d -Block 0013 [ 43]: df7d30f272a46648 -Block 0013 [ 44]: 52565c59a983e2fd -Block 0013 [ 45]: 498707d1fb7a34e6 -Block 0013 [ 46]: 07a0757f9c76308a -Block 0013 [ 47]: 94e5798cef5748ca -Block 0013 [ 48]: 29c7689628e47c77 -Block 0013 [ 49]: 666547f5e5fbeaa0 -Block 0013 [ 50]: 49fe73222e065ab8 -Block 0013 [ 51]: 90d3cb7aece83cd9 -Block 0013 [ 52]: 234c16b21152d734 -Block 0013 [ 53]: 4e0f90f6a27d7d22 -Block 0013 [ 54]: 1a05d1a632b40370 -Block 0013 [ 55]: 985c7083435a8efb -Block 0013 [ 56]: 3962e05f618794cd -Block 0013 [ 57]: 734869661b5fad03 -Block 0013 [ 58]: 2f1d7666c26ef446 -Block 0013 [ 59]: bfb1ae896e4e66d6 -Block 0013 [ 60]: 5a3de7e5a0109719 -Block 0013 [ 61]: 626e36b1d0227c80 -Block 0013 [ 62]: 56c6109f4ffcd0fb -Block 0013 [ 63]: b90afc0a10791c1b -Block 0013 [ 64]: cdf40c151d47cbcf -Block 0013 [ 65]: 5212985d06f9803b -Block 0013 [ 66]: 86cce1587e82760c -Block 0013 [ 67]: 0f59e40dd4a7ec7e -Block 0013 [ 68]: eafc94430abe1f46 -Block 0013 [ 69]: d36c0e649d807ce2 -Block 0013 [ 70]: 57359cb98984b375 -Block 0013 [ 71]: 9f88333017ca8db6 -Block 0013 [ 72]: 1ef21abda65283b1 -Block 0013 [ 73]: 5b0b594338cb86ad -Block 0013 [ 74]: fc731c46858c4ad1 -Block 0013 [ 75]: f64b50653b123e97 -Block 0013 [ 76]: 4149e7bd3a8470dc -Block 0013 [ 77]: 810e51e831465239 -Block 0013 [ 78]: f223087791f47a5d -Block 0013 [ 79]: 6c375e1931df8730 -Block 0013 [ 80]: 0100dbd0e057cc2e -Block 0013 [ 81]: f70f8d61903f1969 -Block 0013 [ 82]: 08fc0da85e396251 -Block 0013 [ 83]: 2a538b02ae7d725c -Block 0013 [ 84]: b931a0cd7ad0af88 -Block 0013 [ 85]: e1bd9d0b2f53a9d7 -Block 0013 [ 86]: 76a341bc4aa349d0 -Block 0013 [ 87]: a529fce1c81e5153 -Block 0013 [ 88]: 63ef9d0b98124056 -Block 0013 [ 89]: c373059cdc3572c7 -Block 0013 [ 90]: 01fb3a4f4ce7b133 -Block 0013 [ 91]: 9c66c972692b09ad -Block 0013 [ 92]: c53255d410600bc6 -Block 0013 [ 93]: 14b9732a02daf5b6 -Block 0013 [ 94]: 396145830be7495f -Block 0013 [ 95]: 3187b2c21159f8d5 -Block 0013 [ 96]: a4e6df14aab4e467 -Block 0013 [ 97]: bc6c30500b613487 -Block 0013 [ 98]: e425c128f3fc06ad -Block 0013 [ 99]: 00545969fecdecc5 -Block 0013 [100]: 16a6082af5d25051 -Block 0013 [101]: 7b85adbd0a0b6781 -Block 0013 [102]: dc26cbeaaef7e3dd -Block 0013 [103]: 336a70650266e766 -Block 0013 [104]: 32ed681b360c3949 -Block 0013 [105]: dc6e83279d1061ab -Block 0013 [106]: f91da0a8b878c95d -Block 0013 [107]: 0beded6e5fcf6e23 -Block 0013 [108]: 0a262ed8436feb78 -Block 0013 [109]: a5b40f4468eed7a7 -Block 0013 [110]: b847a08fdd793947 -Block 0013 [111]: aedc1a4f95a80dbe -Block 0013 [112]: 321990b100f7c3e1 -Block 0013 [113]: c4d432cfbfb9ab49 -Block 0013 [114]: 7c1170d1453c684f -Block 0013 [115]: a77231522e4e7dce -Block 0013 [116]: e550d48f25611525 -Block 0013 [117]: e15fa2d871cb0666 -Block 0013 [118]: 625f0384c0dc09b9 -Block 0013 [119]: b5250d90664a29a1 -Block 0013 [120]: 3aa32adb69a6345f -Block 0013 [121]: 02fdae236288d0c7 -Block 0013 [122]: 7a760f94c41fb1f0 -Block 0013 [123]: 271282628e3fa3cd -Block 0013 [124]: c8131439d46a63e2 -Block 0013 [125]: 7afecdfd7821b924 -Block 0013 [126]: ee89bbe949c8804a -Block 0013 [127]: 7d15b9bc5a9241cb -Block 0014 [ 0]: a5fdb0379a2f67d1 -Block 0014 [ 1]: 4beccebadf13863c -Block 0014 [ 2]: 320d12b68b90e6be -Block 0014 [ 3]: 13b641fd6d1efddf -Block 0014 [ 4]: 5b64455f318e2dda -Block 0014 [ 5]: eb13edb9301764b7 -Block 0014 [ 6]: 7fb8e26f439e07cf -Block 0014 [ 7]: aad045eb983f729d -Block 0014 [ 8]: 7591d32caace7a43 -Block 0014 [ 9]: 8cb56fd7d3a1dcaa -Block 0014 [ 10]: 2cee1c68916a5758 -Block 0014 [ 11]: f72675fd1db957ca -Block 0014 [ 12]: 8f50f81824c9d070 -Block 0014 [ 13]: 5c4a051906547aaa -Block 0014 [ 14]: abde12eff8d4accd -Block 0014 [ 15]: 4a3cd15a48309dd6 -Block 0014 [ 16]: b69f970728e49140 -Block 0014 [ 17]: 1e1d9f854d8f75e5 -Block 0014 [ 18]: 8f13af133409471f -Block 0014 [ 19]: b7bbe727c90d9940 -Block 0014 [ 20]: 084a0defba13b012 -Block 0014 [ 21]: 078a024f9a13985c -Block 0014 [ 22]: 4c4c857f1f41f895 -Block 0014 [ 23]: 65bf4adab2fef170 -Block 0014 [ 24]: 61043bcf823addea -Block 0014 [ 25]: 01624a2a8889b77c -Block 0014 [ 26]: 5d513fe269c69198 -Block 0014 [ 27]: 16ce6daefe16dff8 -Block 0014 [ 28]: ae432bdac36c8a33 -Block 0014 [ 29]: c1de50c14bff375b -Block 0014 [ 30]: 57ee0d43ca409b6d -Block 0014 [ 31]: 001b5c41bc8a142e -Block 0014 [ 32]: 05cb8870e0b6086a -Block 0014 [ 33]: 5e7fa65b44b5a0c1 -Block 0014 [ 34]: 9c0c022e7c44739b -Block 0014 [ 35]: 8afde623afa779b4 -Block 0014 [ 36]: aa62668c188c901f -Block 0014 [ 37]: 4a0ad8711f40d437 -Block 0014 [ 38]: 227f69c54bf24cc2 -Block 0014 [ 39]: 9f8adbbe51dba14e -Block 0014 [ 40]: db44d83fa3b1d22e -Block 0014 [ 41]: c0f52cfbf369e5e0 -Block 0014 [ 42]: 8afd0b618bbf57b6 -Block 0014 [ 43]: 7ce708b422a4d051 -Block 0014 [ 44]: 9d47e802dc2a20a6 -Block 0014 [ 45]: c1f9652d8aee4eb0 -Block 0014 [ 46]: e862b0f9b6ab04c5 -Block 0014 [ 47]: 7cbdcb786d9c09de -Block 0014 [ 48]: 9a6cb37bddf2994d -Block 0014 [ 49]: 066ba841fa982410 -Block 0014 [ 50]: b4834a5707446e93 -Block 0014 [ 51]: cbfd37b56b781d90 -Block 0014 [ 52]: 296422ed06aaf2fe -Block 0014 [ 53]: b7977369fb47dd7f -Block 0014 [ 54]: 4503cd512f4f4028 -Block 0014 [ 55]: b44be03eac8f1fe1 -Block 0014 [ 56]: de3e3843100887d5 -Block 0014 [ 57]: 841cde4ce1d478c1 -Block 0014 [ 58]: ef725829892bcf5b -Block 0014 [ 59]: 8c4711ae368a72f5 -Block 0014 [ 60]: 53f0c71e38996687 -Block 0014 [ 61]: 41343b02dd8918e0 -Block 0014 [ 62]: 163283289fc722c9 -Block 0014 [ 63]: 01f2edede3c311e2 -Block 0014 [ 64]: 3fee9f2a8e2a8b0f -Block 0014 [ 65]: eaddca9f92035fa7 -Block 0014 [ 66]: c2a5277a46b3d9a8 -Block 0014 [ 67]: 634d95c58a63f283 -Block 0014 [ 68]: c47f081c88252fa2 -Block 0014 [ 69]: 904598e94495e0f5 -Block 0014 [ 70]: de689c2cfdc93c35 -Block 0014 [ 71]: bc058f656bef83a3 -Block 0014 [ 72]: 277c81509b3a6492 -Block 0014 [ 73]: bfecc6ad2847e452 -Block 0014 [ 74]: ee9cd7661778e71d -Block 0014 [ 75]: 7269eeab79003bf8 -Block 0014 [ 76]: ed88284a12b40d91 -Block 0014 [ 77]: 38a44ea62830a48c -Block 0014 [ 78]: 50d4aeb04809ea4e -Block 0014 [ 79]: b6d1b62b6b61937c -Block 0014 [ 80]: e8fbd7a0a6a9cea2 -Block 0014 [ 81]: 6958ff333ec80f17 -Block 0014 [ 82]: e894f15fb0abbab4 -Block 0014 [ 83]: cfbc02b2b06f8570 -Block 0014 [ 84]: 16cbaf773bf6e396 -Block 0014 [ 85]: 433bf2178262bf74 -Block 0014 [ 86]: 4df3a7ddabcebe8d -Block 0014 [ 87]: e92be4c401ccfa93 -Block 0014 [ 88]: d240cb8553fddff1 -Block 0014 [ 89]: 6396abb129c242a8 -Block 0014 [ 90]: 6e5a0ebf21156ff2 -Block 0014 [ 91]: 18b1d13bc9a30466 -Block 0014 [ 92]: 6368abbcdf6200b7 -Block 0014 [ 93]: 06e4d85eeae027dd -Block 0014 [ 94]: 74f3b09e191a8044 -Block 0014 [ 95]: a268ac0b727fe78b -Block 0014 [ 96]: 99f122b534e05fff -Block 0014 [ 97]: a860f26176823324 -Block 0014 [ 98]: ba7001ec057bdb68 -Block 0014 [ 99]: 63939774ca16cfc2 -Block 0014 [100]: bde7382f581de0de -Block 0014 [101]: 5225abbd7ca6bca8 -Block 0014 [102]: 88bfeda187528739 -Block 0014 [103]: ce9cb2a4d37873b7 -Block 0014 [104]: c85e0d170a16c786 -Block 0014 [105]: 705da215f97650da -Block 0014 [106]: 2538d74c16c8b6f6 -Block 0014 [107]: 3874bbcf85fe90ee -Block 0014 [108]: b91302b8f95e7800 -Block 0014 [109]: 85e59179b9bf2022 -Block 0014 [110]: e9773eafb420456f -Block 0014 [111]: a47f001781f19c2b -Block 0014 [112]: 46454b1b9811a851 -Block 0014 [113]: b622271e1e2346d1 -Block 0014 [114]: 215a5b75946f1355 -Block 0014 [115]: 0587f9fc3a3c2852 -Block 0014 [116]: 822ac16b0b07c3f2 -Block 0014 [117]: 363d4a260faa6131 -Block 0014 [118]: da569af084477b41 -Block 0014 [119]: fc7f20711ba4bf93 -Block 0014 [120]: 03255c99b59bd605 -Block 0014 [121]: 7dad82e9edae62bb -Block 0014 [122]: 71c0d73ea0908b90 -Block 0014 [123]: a34100e60a9ffbcb -Block 0014 [124]: edf05e0466f0e9cc -Block 0014 [125]: 6074b7aadb934a82 -Block 0014 [126]: 0a43a6e248912fd5 -Block 0014 [127]: 721d743314b6c59e -Block 0015 [ 0]: 6d40e87b8bbde68f -Block 0015 [ 1]: 5b90b02701c6ac80 -Block 0015 [ 2]: ce69aea584dac7a8 -Block 0015 [ 3]: 36cdd095ff0ff8d1 -Block 0015 [ 4]: de2ebcab7a438efc -Block 0015 [ 5]: 63e8709d10ecc3ac -Block 0015 [ 6]: 55cb9a18dab1d954 -Block 0015 [ 7]: 1507cff847848c71 -Block 0015 [ 8]: 1ccb861fbfc73c93 -Block 0015 [ 9]: 8c602a61b71e21dc -Block 0015 [ 10]: cfa87e439e758061 -Block 0015 [ 11]: bec7416cd772e599 -Block 0015 [ 12]: d7c68f196290b1cf -Block 0015 [ 13]: b3096ac4559e59d0 -Block 0015 [ 14]: 0ad10c64be9f9fbb -Block 0015 [ 15]: 8d59cc7c21f19fcf -Block 0015 [ 16]: e91efaa013a95b96 -Block 0015 [ 17]: 9a03aa23ee3ba180 -Block 0015 [ 18]: eb32afc653478bff -Block 0015 [ 19]: a993fc583751e9cb -Block 0015 [ 20]: e3b0246060a99012 -Block 0015 [ 21]: f96ac45a92c850ba -Block 0015 [ 22]: 548f1ff503119696 -Block 0015 [ 23]: 4479e6768506cdf5 -Block 0015 [ 24]: adcb44b753d48a61 -Block 0015 [ 25]: 97502483be77491b -Block 0015 [ 26]: 71fdbdd6b3769957 -Block 0015 [ 27]: f29fc96be6293883 -Block 0015 [ 28]: e7174c1b6cc33adf -Block 0015 [ 29]: c184b1c64ff3b2db -Block 0015 [ 30]: a08aa1da589ab43d -Block 0015 [ 31]: 97e85b9d3047be3e -Block 0015 [ 32]: 96929ff762408129 -Block 0015 [ 33]: aa8fa4af6720c65e -Block 0015 [ 34]: 5173b01272e389e1 -Block 0015 [ 35]: 97f40c7a887f7c65 -Block 0015 [ 36]: 07a2c0b90d5fbb9f -Block 0015 [ 37]: 0b4a888385bf6feb -Block 0015 [ 38]: 55c595b5297af0c0 -Block 0015 [ 39]: 534de9d4148ff660 -Block 0015 [ 40]: e1b2bd3e60767725 -Block 0015 [ 41]: e18662d315858833 -Block 0015 [ 42]: 4f39b642a465e587 -Block 0015 [ 43]: 9e7becfafea3a026 -Block 0015 [ 44]: 16bf66c4ce23a1d1 -Block 0015 [ 45]: 20d5eaa56dd0741b -Block 0015 [ 46]: f8389306df16ba8d -Block 0015 [ 47]: ca21d3ab3d5d9710 -Block 0015 [ 48]: d05e1b82cde9a7ee -Block 0015 [ 49]: 1b331a7ba4cbc44f -Block 0015 [ 50]: 3ab05714733e107b -Block 0015 [ 51]: 1ba0f22a6cacdccf -Block 0015 [ 52]: bef4345f3257cbab -Block 0015 [ 53]: dba354b6d105240e -Block 0015 [ 54]: 14860ea4ea9fa764 -Block 0015 [ 55]: c786947cbd54ba7e -Block 0015 [ 56]: c10a16322b02197f -Block 0015 [ 57]: a75e04a69f57a273 -Block 0015 [ 58]: 6a3d360f5d12a0e0 -Block 0015 [ 59]: 2d900aa01b4f1bc6 -Block 0015 [ 60]: 8e0b3af575027d01 -Block 0015 [ 61]: bebb2efa06d1b9b1 -Block 0015 [ 62]: 5041ec43eb8490ad -Block 0015 [ 63]: 02a0af26ec1cc245 -Block 0015 [ 64]: 315bd384780fb7dc -Block 0015 [ 65]: a6b78138e78ebca5 -Block 0015 [ 66]: e1e841cc673c6f59 -Block 0015 [ 67]: 92a63873ca308d4b -Block 0015 [ 68]: c475e47bc9375047 -Block 0015 [ 69]: 55a415c1b2a64d2d -Block 0015 [ 70]: bd814528ff874150 -Block 0015 [ 71]: a22ce025019fe9b9 -Block 0015 [ 72]: c07a7d13cc18bc6d -Block 0015 [ 73]: a42d2eedd8795c17 -Block 0015 [ 74]: 5944b7401cb892bb -Block 0015 [ 75]: 06b693ce393f7a31 -Block 0015 [ 76]: 30a523f276e03f66 -Block 0015 [ 77]: cc4cc7da45cb0629 -Block 0015 [ 78]: eb8a9cfac1608630 -Block 0015 [ 79]: c6827ec6db8fc29e -Block 0015 [ 80]: 72db1dde804b4e38 -Block 0015 [ 81]: 1d571faed8775322 -Block 0015 [ 82]: db5d406859784a76 -Block 0015 [ 83]: a5cc6c320631d459 -Block 0015 [ 84]: bc1b71dc3dc99f3d -Block 0015 [ 85]: 2316181ceed14d5c -Block 0015 [ 86]: 163d4f8beef254bc -Block 0015 [ 87]: d995b178a01e876c -Block 0015 [ 88]: b1f98f1d674c1514 -Block 0015 [ 89]: 7720ff1b73b9351e -Block 0015 [ 90]: ebedc7cd44c49577 -Block 0015 [ 91]: 8ed0d18c9c651634 -Block 0015 [ 92]: 7607fbdd198df036 -Block 0015 [ 93]: bbd9fd5b855b09f2 -Block 0015 [ 94]: 2b22bd2c4b0b39a7 -Block 0015 [ 95]: ba01fa0a17a1c7d7 -Block 0015 [ 96]: a26884728102cc54 -Block 0015 [ 97]: 984b67908d3a81ff -Block 0015 [ 98]: c7f618616a70b82a -Block 0015 [ 99]: 12084588cfa8b58b -Block 0015 [100]: e092eb391447359d -Block 0015 [101]: 3fc930be1935e61e -Block 0015 [102]: b26307005d1da4bc -Block 0015 [103]: 3c8b67e192736c4f -Block 0015 [104]: d630223907f9e1e7 -Block 0015 [105]: 5374c6efe2b8eb09 -Block 0015 [106]: 97acf57cd17738ce -Block 0015 [107]: 8170ce0222a7d000 -Block 0015 [108]: f70f5759aa53c360 -Block 0015 [109]: 60d7f3dec8f2ed62 -Block 0015 [110]: 789ae05a72878fac -Block 0015 [111]: 8d0afe37a8a13c61 -Block 0015 [112]: 1be773bd9b02f826 -Block 0015 [113]: d8858dceedd7e08d -Block 0015 [114]: 091aefbac72d8dad -Block 0015 [115]: 715b0c3d6bf488d9 -Block 0015 [116]: 11a401aeea39c245 -Block 0015 [117]: c71592475b7e2423 -Block 0015 [118]: e31b245bd5db158e -Block 0015 [119]: 1cdc0a528374eb3d -Block 0015 [120]: 75430ad2bebc3613 -Block 0015 [121]: 4df59d2626d82756 -Block 0015 [122]: 9b1226ce1e040731 -Block 0015 [123]: 33c1eb07bb17933b -Block 0015 [124]: c1c1837f4169196e -Block 0015 [125]: 474ff21ff2f94dbc -Block 0015 [126]: 851a9566610580c4 -Block 0015 [127]: 51ec2fcccdf48948 -Block 0016 [ 0]: 40173703c87730b2 -Block 0016 [ 1]: 467d38684f4c1c2a -Block 0016 [ 2]: 544062a527017b3e -Block 0016 [ 3]: 6f0706930c3c8ab0 -Block 0016 [ 4]: dc88053cfb45150b -Block 0016 [ 5]: 03884a54d2a29367 -Block 0016 [ 6]: 7a469b12d499697b -Block 0016 [ 7]: d54e0c405db9c12d -Block 0016 [ 8]: d6596bb2c7fbcb83 -Block 0016 [ 9]: e8ee63ceed57b956 -Block 0016 [ 10]: 3e510ed4a0c6aa29 -Block 0016 [ 11]: 782c2218330cbe22 -Block 0016 [ 12]: 95cb34607c5c6b15 -Block 0016 [ 13]: c3c9fb56dc22953b -Block 0016 [ 14]: 31f210a4cbcb2e4e -Block 0016 [ 15]: fb774215bd05f2fc -Block 0016 [ 16]: 1dce685944aa421c -Block 0016 [ 17]: 4455d28ad719716b -Block 0016 [ 18]: a8457a7fa7886bb8 -Block 0016 [ 19]: 798797d430101d64 -Block 0016 [ 20]: 7e5fee56cb31897c -Block 0016 [ 21]: 78580647125afa2a -Block 0016 [ 22]: f1bb1314ec84446b -Block 0016 [ 23]: b3fe6f51468c2893 -Block 0016 [ 24]: d1d4bdbe33707ead -Block 0016 [ 25]: bc6c03983cd4c708 -Block 0016 [ 26]: 57d747066891bb95 -Block 0016 [ 27]: bb4e9045fc3cb5ea -Block 0016 [ 28]: 614d2cf35a1f5655 -Block 0016 [ 29]: 04ae5d12ec440130 -Block 0016 [ 30]: 7d4f84adf2e6cb85 -Block 0016 [ 31]: 3a17a1a6cea939b1 -Block 0016 [ 32]: d2d6c3d261ac8e68 -Block 0016 [ 33]: cabd3dee2829e407 -Block 0016 [ 34]: 266220332527521c -Block 0016 [ 35]: 9551806567a27ff0 -Block 0016 [ 36]: d225b25411c7e2b6 -Block 0016 [ 37]: b259687bc0bd2f67 -Block 0016 [ 38]: 04845596cd58d81c -Block 0016 [ 39]: 4b0ad9bd79c5d18f -Block 0016 [ 40]: d902866ba26a936a -Block 0016 [ 41]: 404b11de86b46f03 -Block 0016 [ 42]: bd61fb21e5e12b7b -Block 0016 [ 43]: 6b1d2f923b434ab1 -Block 0016 [ 44]: 52c2dea3f21f8a13 -Block 0016 [ 45]: 140eebf3b69ee5bb -Block 0016 [ 46]: dd70de78b3c18b81 -Block 0016 [ 47]: ae7a74172565ac79 -Block 0016 [ 48]: 0dbad089af3e5104 -Block 0016 [ 49]: 8216ff935f515ebd -Block 0016 [ 50]: 1daa44a8acbd2140 -Block 0016 [ 51]: 9e5d3a46a80d13c9 -Block 0016 [ 52]: 8bb8019be2408232 -Block 0016 [ 53]: ffd311c5ea02f66f -Block 0016 [ 54]: 155ce4e0b5ed7634 -Block 0016 [ 55]: b5eaee0502427f59 -Block 0016 [ 56]: 7f426fa00393b3a1 -Block 0016 [ 57]: e13553aba4647bf1 -Block 0016 [ 58]: 93d7bf7dbbbf3ae9 -Block 0016 [ 59]: e69d740f7b2dad2d -Block 0016 [ 60]: 344d4eda5a81b335 -Block 0016 [ 61]: df65fb114c75b1be -Block 0016 [ 62]: 1990683f992d7c47 -Block 0016 [ 63]: 21073b4cbd089892 -Block 0016 [ 64]: 2dcb4d5b039d877d -Block 0016 [ 65]: c29429c9541f38a7 -Block 0016 [ 66]: 7f80e51bc2fe8e28 -Block 0016 [ 67]: f54f4cd646199cac -Block 0016 [ 68]: 85b2a1246ab1163b -Block 0016 [ 69]: daf60fc6375d3ad0 -Block 0016 [ 70]: 57e42e8d98f42fa0 -Block 0016 [ 71]: 0fb9391186b290ee -Block 0016 [ 72]: 959b7e51136817d1 -Block 0016 [ 73]: 5217b619c2d274c8 -Block 0016 [ 74]: b7c6978fc62db8c1 -Block 0016 [ 75]: 4554cc5aedf4af57 -Block 0016 [ 76]: 904db36c16602741 -Block 0016 [ 77]: 0abe05da8a2cb8e6 -Block 0016 [ 78]: 045614eb1b418847 -Block 0016 [ 79]: 32ae1dd042f49d68 -Block 0016 [ 80]: 99972d932984c765 -Block 0016 [ 81]: 4f469863eed3aa0a -Block 0016 [ 82]: ebc14e989ec8a561 -Block 0016 [ 83]: d8e7b72f71320e9f -Block 0016 [ 84]: 1c608b5af0726e22 -Block 0016 [ 85]: bbb551c4d1a9c4aa -Block 0016 [ 86]: acaef7a072fbfa03 -Block 0016 [ 87]: 20c4a900f3892aea -Block 0016 [ 88]: 4b161fcd5b15c8e6 -Block 0016 [ 89]: 426665ce2c0eeffe -Block 0016 [ 90]: 761fc26cafc86c26 -Block 0016 [ 91]: 8797c94e662ea9cc -Block 0016 [ 92]: 7bebc3c35e97780a -Block 0016 [ 93]: a579cfea019fe5d8 -Block 0016 [ 94]: 263bc7f813fa3bb9 -Block 0016 [ 95]: 45ef8c26eec2f7bb -Block 0016 [ 96]: 8a1e6d34c4cc77e8 -Block 0016 [ 97]: 27867f3613e4151d -Block 0016 [ 98]: c7db41cc0f06e783 -Block 0016 [ 99]: b4d76f059af6a433 -Block 0016 [100]: 40ee3aae849418c4 -Block 0016 [101]: 4bd4fc211c3a5c11 -Block 0016 [102]: 7da2668816494939 -Block 0016 [103]: 9e181a446642e6b7 -Block 0016 [104]: 8bda7cc03635fed7 -Block 0016 [105]: f816837b21b1806a -Block 0016 [106]: b30434f84336b715 -Block 0016 [107]: aaf97b333edca150 -Block 0016 [108]: 389485ffaad002cf -Block 0016 [109]: 8cbbfcd6ee186d33 -Block 0016 [110]: 3157b6dc9703b052 -Block 0016 [111]: 8b61c9bb15a97ad1 -Block 0016 [112]: 541844a6ef92801b -Block 0016 [113]: cd602e55c4497811 -Block 0016 [114]: 9ffd4436922d562c -Block 0016 [115]: f6a1f699a4599a18 -Block 0016 [116]: 01f4899e74a1d96c -Block 0016 [117]: 2ec1db479e5068a8 -Block 0016 [118]: bb0aa1fd26e19701 -Block 0016 [119]: 9b0786b32e156f06 -Block 0016 [120]: 5c30b07b934b48b7 -Block 0016 [121]: 3fd71c69e216b478 -Block 0016 [122]: 2e3d1d9b8b50f1f5 -Block 0016 [123]: 3f08a23d0830d1fd -Block 0016 [124]: b0499ad41f985e8d -Block 0016 [125]: ff70aeb3c2042aa6 -Block 0016 [126]: 4f79c964d3b38194 -Block 0016 [127]: 5f6535da90f53fb0 -Block 0017 [ 0]: 86dbf93ac3f80ebb -Block 0017 [ 1]: 2e0f2348ef2a155f -Block 0017 [ 2]: 0c4bb02597d00e8f -Block 0017 [ 3]: c6c302f463f13815 -Block 0017 [ 4]: e3ded630c721ae3b -Block 0017 [ 5]: 7c6410264643d2bf -Block 0017 [ 6]: c8e6e7102a26eb72 -Block 0017 [ 7]: 1915981300f3e25a -Block 0017 [ 8]: 8124aee938f2e8e7 -Block 0017 [ 9]: e971f39f0f644121 -Block 0017 [ 10]: 59b43310ff96f407 -Block 0017 [ 11]: 286319e85551fca5 -Block 0017 [ 12]: 74f4b2e706b20793 -Block 0017 [ 13]: 4ef0995dbff8d698 -Block 0017 [ 14]: 672a0541cf6e284b -Block 0017 [ 15]: dc96b4f476e7dee4 -Block 0017 [ 16]: 04a3cab22b85ff42 -Block 0017 [ 17]: ff0686a07cdca700 -Block 0017 [ 18]: 270bcda7065b6f36 -Block 0017 [ 19]: 8c5aed656f5257f8 -Block 0017 [ 20]: 2c694af32afaa420 -Block 0017 [ 21]: b7efae2361fd9dca -Block 0017 [ 22]: a527d0442a27a2ca -Block 0017 [ 23]: 159bf5aec6801f9c -Block 0017 [ 24]: 2fe99d0a7a7a6295 -Block 0017 [ 25]: ee6b6bbc10147795 -Block 0017 [ 26]: e8084f19550df76e -Block 0017 [ 27]: 63f3006ee592f0f3 -Block 0017 [ 28]: 6e7e7dd76106ea8c -Block 0017 [ 29]: 1488f210ed13602c -Block 0017 [ 30]: 5e9ff9270b0f5998 -Block 0017 [ 31]: ecbe1b3dbc8fc452 -Block 0017 [ 32]: cfd00abc7288fe28 -Block 0017 [ 33]: c460d10f01afe872 -Block 0017 [ 34]: 310843ff07177aed -Block 0017 [ 35]: ad4250b39e5a3502 -Block 0017 [ 36]: 656b54c454d2799b -Block 0017 [ 37]: 283ad8ce0753a41a -Block 0017 [ 38]: 8e69119059c57e58 -Block 0017 [ 39]: e8f339918afcf668 -Block 0017 [ 40]: 7172af6f36048460 -Block 0017 [ 41]: b1c6dcbb9bddc1e5 -Block 0017 [ 42]: ca25138560e0fd17 -Block 0017 [ 43]: c9187f543edfda65 -Block 0017 [ 44]: a20f9c88217536ab -Block 0017 [ 45]: e79d7d866f58d1b2 -Block 0017 [ 46]: 60039cdb76c295bc -Block 0017 [ 47]: 7fc953ce20b4af5f -Block 0017 [ 48]: 9eddbaa0058e131e -Block 0017 [ 49]: 5358296bd7a8f481 -Block 0017 [ 50]: a294668fd156d187 -Block 0017 [ 51]: 4e1423f5dc8827b6 -Block 0017 [ 52]: 0fed19a28e94d868 -Block 0017 [ 53]: 0c146f0ea97c2112 -Block 0017 [ 54]: 2923e8273ea54165 -Block 0017 [ 55]: c3e4cc115c57262d -Block 0017 [ 56]: b56a6e6f678fee68 -Block 0017 [ 57]: f3fae0ae2f09963d -Block 0017 [ 58]: eee2522b29737f05 -Block 0017 [ 59]: a207b298ef42b43d -Block 0017 [ 60]: 11a8f66bd4e22116 -Block 0017 [ 61]: 1c779bd8fa6bc463 -Block 0017 [ 62]: 6ed3d931275742d8 -Block 0017 [ 63]: 1acccf1c25c8574c -Block 0017 [ 64]: ea218800c030bd5c -Block 0017 [ 65]: b281e866406d231f -Block 0017 [ 66]: 0a94d7e48cd315b2 -Block 0017 [ 67]: afad93e2c88678bf -Block 0017 [ 68]: a4162b1541509f99 -Block 0017 [ 69]: d175f3bfe10cd670 -Block 0017 [ 70]: cba9fc2d548a01ae -Block 0017 [ 71]: e75e284c1c1a6083 -Block 0017 [ 72]: 2e4de0030e96358b -Block 0017 [ 73]: 714abf82a6e46c19 -Block 0017 [ 74]: 85ad2cfc6a8c7494 -Block 0017 [ 75]: d0ec0ff6a6e67854 -Block 0017 [ 76]: 257716a22e9cd988 -Block 0017 [ 77]: d72bb2bbc1694cdc -Block 0017 [ 78]: 7d2f54f06ed5f7bf -Block 0017 [ 79]: 7b02bb7cff05c815 -Block 0017 [ 80]: 493ca9570cdc1295 -Block 0017 [ 81]: 5fe4695940b889f5 -Block 0017 [ 82]: e42a80ea4be3cf58 -Block 0017 [ 83]: acba6f12179237a0 -Block 0017 [ 84]: 54046ed072a24683 -Block 0017 [ 85]: 1cf396162f7fe889 -Block 0017 [ 86]: 5c38a95c20a92398 -Block 0017 [ 87]: 0e26d36d6da00deb -Block 0017 [ 88]: 23f81145834c1082 -Block 0017 [ 89]: 5acae8767d95deca -Block 0017 [ 90]: a9d31c468300ddfe -Block 0017 [ 91]: d9b88af5c50cce46 -Block 0017 [ 92]: 37fa64e447e04020 -Block 0017 [ 93]: 2f7e076fc6dfd078 -Block 0017 [ 94]: b3cec9629d0deb36 -Block 0017 [ 95]: cc32bd7f4e7e9863 -Block 0017 [ 96]: b9aa3faa53bb0446 -Block 0017 [ 97]: 164ec64fcf81b584 -Block 0017 [ 98]: 34db7b26f3adca23 -Block 0017 [ 99]: 60196d64d2557550 -Block 0017 [100]: 5961b2f87d8ca589 -Block 0017 [101]: 1dfde0a6c0ccfbac -Block 0017 [102]: 2021c1740985d1a2 -Block 0017 [103]: 68b03224a5176ed4 -Block 0017 [104]: 36f11e2333501345 -Block 0017 [105]: 8e3f0518cf21c19c -Block 0017 [106]: 099a9f02563790b4 -Block 0017 [107]: f362f11b2efa6862 -Block 0017 [108]: 8ca6c4c97cc05f21 -Block 0017 [109]: 7c4a03dac87e4a9a -Block 0017 [110]: 3d401182bfae8e61 -Block 0017 [111]: 7ea885226fbbca06 -Block 0017 [112]: c3ed29c1b310b105 -Block 0017 [113]: 226e574ad2807ca2 -Block 0017 [114]: 56a513a2e353b82b -Block 0017 [115]: 9892fb94743ef93d -Block 0017 [116]: 24d14208ba945517 -Block 0017 [117]: 4fa0137b08a9a442 -Block 0017 [118]: 7dd70ce2ff2d0d57 -Block 0017 [119]: 6c19e2a32da81b67 -Block 0017 [120]: 0bcbb994195db761 -Block 0017 [121]: e34a4009f6bf3310 -Block 0017 [122]: b6575c391e05249a -Block 0017 [123]: ae0e26a5eeb66912 -Block 0017 [124]: 0bb87ddc0deb2b72 -Block 0017 [125]: 3be928c16a8d0b6b -Block 0017 [126]: 652748f115f4e754 -Block 0017 [127]: d0e359ef4d4f00af -Block 0018 [ 0]: 2aa5674fd1d8b40d -Block 0018 [ 1]: dbb9a569c03adf3c -Block 0018 [ 2]: 602a4a56802fb8ac -Block 0018 [ 3]: a9cefa9a07a02258 -Block 0018 [ 4]: 0983afffb71d58c1 -Block 0018 [ 5]: 4b64d1fb17618ef1 -Block 0018 [ 6]: 749a26d465aa0dd7 -Block 0018 [ 7]: 4a49a8308965e8c5 -Block 0018 [ 8]: 138fa766f93ea8c2 -Block 0018 [ 9]: 425c687587361644 -Block 0018 [ 10]: 7a1f4d575267c8f2 -Block 0018 [ 11]: 08c1c26e0511b1fb -Block 0018 [ 12]: 058b385ba386aebf -Block 0018 [ 13]: 2c65bfef8e4ee46a -Block 0018 [ 14]: d1f832ad7b80f7fa -Block 0018 [ 15]: 336ff88cc3d6951a -Block 0018 [ 16]: 7816362d30a559d4 -Block 0018 [ 17]: beabe02fbc7ae8a7 -Block 0018 [ 18]: c81e862255ea507e -Block 0018 [ 19]: c691eb61b2454b13 -Block 0018 [ 20]: bbda0810c15390f5 -Block 0018 [ 21]: d5f89bdfe8dcbea3 -Block 0018 [ 22]: 8ba98c6aca3f7890 -Block 0018 [ 23]: 4f8195b2abf68b50 -Block 0018 [ 24]: f244d7e00977c5b8 -Block 0018 [ 25]: 52d3e3893693be21 -Block 0018 [ 26]: d6ac75864a0a4b09 -Block 0018 [ 27]: 31737d76eeec0dac -Block 0018 [ 28]: 4343172dd2a3ed5f -Block 0018 [ 29]: a441605208364aa5 -Block 0018 [ 30]: 3f8e47e2b7bce73d -Block 0018 [ 31]: d6359b6b2f9e2a3c -Block 0018 [ 32]: 3b2561edb34f5eed -Block 0018 [ 33]: ccdd079b16d4c46e -Block 0018 [ 34]: fe2c16a3fbdeea17 -Block 0018 [ 35]: c8daa941845adf98 -Block 0018 [ 36]: ef7869ec52a59512 -Block 0018 [ 37]: e26ff84a493d7c7e -Block 0018 [ 38]: 9c0caa9fcc3df665 -Block 0018 [ 39]: 6c5281eaa7710399 -Block 0018 [ 40]: d0cda1785aa88e4e -Block 0018 [ 41]: a31d1beb969b45dc -Block 0018 [ 42]: 12afc4a7accbd8a2 -Block 0018 [ 43]: 56469fb7998e6378 -Block 0018 [ 44]: 01386c5908479b8b -Block 0018 [ 45]: 687415ab506cbc68 -Block 0018 [ 46]: 9d563191292a4dce -Block 0018 [ 47]: 7e1c8c7260b9c1e4 -Block 0018 [ 48]: 20a3a6d3018ab012 -Block 0018 [ 49]: 3bced6b3c5b1ed84 -Block 0018 [ 50]: aa8dcefad634e58b -Block 0018 [ 51]: 161ddb6e3d7d69f4 -Block 0018 [ 52]: 7039fa10ea0bbff0 -Block 0018 [ 53]: 32723d06737af10a -Block 0018 [ 54]: e84317749f1191e4 -Block 0018 [ 55]: 18c17d76251cd254 -Block 0018 [ 56]: e7bbacff780165c9 -Block 0018 [ 57]: a63258d3e9173063 -Block 0018 [ 58]: 9d845b2cdad3ae6c -Block 0018 [ 59]: 80863609a8080239 -Block 0018 [ 60]: aeb0108c57b35b0c -Block 0018 [ 61]: c3a6d8bfefbb126b -Block 0018 [ 62]: f9f3331294e28d63 -Block 0018 [ 63]: fff56675d44f84f4 -Block 0018 [ 64]: 2736d955ba5d90ba -Block 0018 [ 65]: 644358fe1ab9760e -Block 0018 [ 66]: 9ff9e6feaa53f66c -Block 0018 [ 67]: 9696bc3da3b68444 -Block 0018 [ 68]: 1367438ef5ff3c7e -Block 0018 [ 69]: 4845f05a87410ac9 -Block 0018 [ 70]: bec2379c4ee5d144 -Block 0018 [ 71]: 03de245819472430 -Block 0018 [ 72]: 1db9b5a009b81841 -Block 0018 [ 73]: c25196560bf2d51b -Block 0018 [ 74]: 0425d7bc03de37d5 -Block 0018 [ 75]: ed46c9003fe5cb7a -Block 0018 [ 76]: e1b1f09579ebf515 -Block 0018 [ 77]: 2e7c57b4160cf29b -Block 0018 [ 78]: f0304fe252d819e4 -Block 0018 [ 79]: 371a020d72b7d98f -Block 0018 [ 80]: 36e9b0cf530d0498 -Block 0018 [ 81]: 317ef0425f37e93a -Block 0018 [ 82]: 45c467bcd49da881 -Block 0018 [ 83]: 0e21ff32aec0927b -Block 0018 [ 84]: 8883c2b4291f6b51 -Block 0018 [ 85]: 708b49a444fe2ece -Block 0018 [ 86]: 8a8c752afa03aee1 -Block 0018 [ 87]: 9dafb4fcc13de535 -Block 0018 [ 88]: 8d7a457d16d7f49f -Block 0018 [ 89]: d3513c7f9cad018b -Block 0018 [ 90]: 03144dd828027e10 -Block 0018 [ 91]: c07fad863376caa3 -Block 0018 [ 92]: 8500f36e4cee0ceb -Block 0018 [ 93]: c597ca6cb805cbd2 -Block 0018 [ 94]: c05fb437b61b48da -Block 0018 [ 95]: 35145b4938a63b8c -Block 0018 [ 96]: 8bf9ebddcd0b7fb5 -Block 0018 [ 97]: d6668784244b88c5 -Block 0018 [ 98]: 45731fd06dfa60d4 -Block 0018 [ 99]: 7bf4cd52329f58f1 -Block 0018 [100]: 94afb89c3a052416 -Block 0018 [101]: e49c7c68d4c95176 -Block 0018 [102]: 0d046d2ae897f269 -Block 0018 [103]: 734d9e676f1d0600 -Block 0018 [104]: edb5c8933b81f706 -Block 0018 [105]: 9cdeadfc91f1ff95 -Block 0018 [106]: 33020a25481ff5f7 -Block 0018 [107]: 7afa457afdac3306 -Block 0018 [108]: 9122d216bc3de7c8 -Block 0018 [109]: e14dba25e7e091d8 -Block 0018 [110]: 62be3b4921bae56d -Block 0018 [111]: 45d8c7083076ca76 -Block 0018 [112]: 1b689948b01eeda1 -Block 0018 [113]: 4cefb70309c448fa -Block 0018 [114]: 6cdf7eb1412871a4 -Block 0018 [115]: 42cf57fdbd83ac27 -Block 0018 [116]: a566c79afba194e8 -Block 0018 [117]: c9918575e10df83a -Block 0018 [118]: a078bd2b5a6a3c9f -Block 0018 [119]: dc319fc197b36ae7 -Block 0018 [120]: 23d759be6893d7a4 -Block 0018 [121]: f8a1237465ab3c9b -Block 0018 [122]: cd47410ab3c90d76 -Block 0018 [123]: c3bfee20feb23cfb -Block 0018 [124]: b2f1f976ea8568d5 -Block 0018 [125]: e65206d65f01a1ae -Block 0018 [126]: 1b8f1facf8bb69eb -Block 0018 [127]: 44e81cb05a43dab5 -Block 0019 [ 0]: aa3e76015aa2c41a -Block 0019 [ 1]: cb622c70b808c1d5 -Block 0019 [ 2]: a0146068353cd441 -Block 0019 [ 3]: 7ccebe1e3e2e35d1 -Block 0019 [ 4]: b5fea95156ff6d79 -Block 0019 [ 5]: 77ef49a16920b5eb -Block 0019 [ 6]: c4774d26e217a901 -Block 0019 [ 7]: 1edca7593da10df0 -Block 0019 [ 8]: cb9d48e8bae900c9 -Block 0019 [ 9]: efaa7c38141f0935 -Block 0019 [ 10]: 2c24a8490894b89d -Block 0019 [ 11]: ef59dde9dc3f69e1 -Block 0019 [ 12]: 3e479bcc6807b6a2 -Block 0019 [ 13]: 1db94891d8de2438 -Block 0019 [ 14]: a9db4d224f6ab5ad -Block 0019 [ 15]: 616c6a1d422efe6c -Block 0019 [ 16]: adf176d6d1263636 -Block 0019 [ 17]: d82b220f874f7265 -Block 0019 [ 18]: c59dd97d04e43007 -Block 0019 [ 19]: 9a3b357237af7443 -Block 0019 [ 20]: 4a2c70a326668106 -Block 0019 [ 21]: 755df7a100e7f66c -Block 0019 [ 22]: d48f9b0e6440cfc9 -Block 0019 [ 23]: ca32b8caf8c8944b -Block 0019 [ 24]: fdb2e9c116686001 -Block 0019 [ 25]: 0b5bb6b191036570 -Block 0019 [ 26]: f5f2990e2ef67cc0 -Block 0019 [ 27]: c98661687f4685be -Block 0019 [ 28]: 65f6a375c3c611f8 -Block 0019 [ 29]: ef2e760822c6a47f -Block 0019 [ 30]: 225d6aa089d5268e -Block 0019 [ 31]: 62da55277aee1563 -Block 0019 [ 32]: 712dd1bec61a04a7 -Block 0019 [ 33]: 244be57459f4c76a -Block 0019 [ 34]: d32a36bff368c5d5 -Block 0019 [ 35]: 08047c20c35ee571 -Block 0019 [ 36]: 26e8068fc6b13eb5 -Block 0019 [ 37]: 56e005fd57f4b712 -Block 0019 [ 38]: 36f4d5514b4ad0cf -Block 0019 [ 39]: 577c56d82ce0f024 -Block 0019 [ 40]: a171c394367b6da2 -Block 0019 [ 41]: 32f8fa87524fe061 -Block 0019 [ 42]: 6612dd6bb411827d -Block 0019 [ 43]: e9c9229a1250942f -Block 0019 [ 44]: bdc28bc191e037e8 -Block 0019 [ 45]: 0c6451a576636faf -Block 0019 [ 46]: 9f168206eadcff9c -Block 0019 [ 47]: 83f94a286e1c1435 -Block 0019 [ 48]: 0c41dfcd624a9c7a -Block 0019 [ 49]: 7022a05fa7a76790 -Block 0019 [ 50]: ccc35774262e5cda -Block 0019 [ 51]: 375aae3a3cf6f07e -Block 0019 [ 52]: b73940411e1738cf -Block 0019 [ 53]: 2a5409d288e38616 -Block 0019 [ 54]: 07073fa0e861eb3c -Block 0019 [ 55]: 79469b12451cca2a -Block 0019 [ 56]: 723ebd6cb8093e12 -Block 0019 [ 57]: 363987806bd00b0f -Block 0019 [ 58]: 3cb6f8ba09c2ea95 -Block 0019 [ 59]: 520d977ef770e9db -Block 0019 [ 60]: 7778cc317565971b -Block 0019 [ 61]: bec212c43afb3adf -Block 0019 [ 62]: b666996aafbe2dbc -Block 0019 [ 63]: c9cb8e75500c38f2 -Block 0019 [ 64]: 8b5d717f1e733849 -Block 0019 [ 65]: cb94b06d182747c5 -Block 0019 [ 66]: a2fae8841d54f52f -Block 0019 [ 67]: db0e02a7c115504d -Block 0019 [ 68]: adfbdfac5438167d -Block 0019 [ 69]: f67d10aeb9d0b51b -Block 0019 [ 70]: 7b8cab32096b0baf -Block 0019 [ 71]: de09aecb032a0c31 -Block 0019 [ 72]: 509b16c99b879ae6 -Block 0019 [ 73]: f7641ecd12a66179 -Block 0019 [ 74]: 007ad1724fc84331 -Block 0019 [ 75]: efa6210dbe8c0764 -Block 0019 [ 76]: 37dc83be6aac171b -Block 0019 [ 77]: c96e4eea37d1e6eb -Block 0019 [ 78]: ddb040a43cf90b33 -Block 0019 [ 79]: 39b0cc39afba6089 -Block 0019 [ 80]: 9aa9caa334b61342 -Block 0019 [ 81]: 44b19b55c2903530 -Block 0019 [ 82]: 9217a7b8f7abbe7d -Block 0019 [ 83]: da0435f0e5f65479 -Block 0019 [ 84]: b4ea8b8f6fe9d01e -Block 0019 [ 85]: 6c6742cb6ae2d8fe -Block 0019 [ 86]: a8a1d0d317252abc -Block 0019 [ 87]: dbeb783190ce2842 -Block 0019 [ 88]: 6ab03dde0b190483 -Block 0019 [ 89]: 0ae262c79049e94c -Block 0019 [ 90]: 25e7abd3f3dc40d4 -Block 0019 [ 91]: 74ae75be5862d6ae -Block 0019 [ 92]: afba143705d3d17a -Block 0019 [ 93]: c0cb1d6a6cb6c7a5 -Block 0019 [ 94]: a7b59fb95d48c653 -Block 0019 [ 95]: 98bc8c61739f4de6 -Block 0019 [ 96]: 2d6848e5e862916c -Block 0019 [ 97]: d2e937fe621b933a -Block 0019 [ 98]: 52c035cade29df96 -Block 0019 [ 99]: 1a4598813b293978 -Block 0019 [100]: 1944c56096b3446a -Block 0019 [101]: 31d1d01ad95e0d41 -Block 0019 [102]: 929ed4acca116441 -Block 0019 [103]: d0f85d36d6357c63 -Block 0019 [104]: aa51d03fc905cf82 -Block 0019 [105]: 025aa197fe483a3d -Block 0019 [106]: 197c68bea90d901b -Block 0019 [107]: b9d621593657d1f7 -Block 0019 [108]: 57bef2332db7c6ef -Block 0019 [109]: a4b4fcb041fd73dc -Block 0019 [110]: ec3ba04676096512 -Block 0019 [111]: f0c29a9d37c08914 -Block 0019 [112]: 4d9d261e314064db -Block 0019 [113]: dc2314df89a11580 -Block 0019 [114]: a201d18ed2904ccc -Block 0019 [115]: 6d1eee9f8733e9ac -Block 0019 [116]: 52e03b595ab01453 -Block 0019 [117]: 2e185ddcae94e78e -Block 0019 [118]: a122c80cb676b5b2 -Block 0019 [119]: 7b094927f1ab7fd5 -Block 0019 [120]: e24f8e8700242727 -Block 0019 [121]: e547f9fbe6f25da0 -Block 0019 [122]: 1c032a1b7d889bd8 -Block 0019 [123]: f0065170035b78e0 -Block 0019 [124]: 9970454dd33cf256 -Block 0019 [125]: 857946d277b97210 -Block 0019 [126]: fc16e28cd750816e -Block 0019 [127]: 06f8ff690d41929d -Block 0020 [ 0]: 8a4f9db0ee84b35e -Block 0020 [ 1]: 05d43e724283fb22 -Block 0020 [ 2]: 1752db12ef2183eb -Block 0020 [ 3]: 178453f8a1f0e320 -Block 0020 [ 4]: ca2301d94bc879ae -Block 0020 [ 5]: bde50c8b0c995430 -Block 0020 [ 6]: 67161b155639636f -Block 0020 [ 7]: 85af2571c91c953c -Block 0020 [ 8]: d6233a7eae67bbb8 -Block 0020 [ 9]: ff9f6a7dd83865eb -Block 0020 [ 10]: cf3f19501b2b1097 -Block 0020 [ 11]: 36db51d1b9e6f85a -Block 0020 [ 12]: 5c5942dc39207d28 -Block 0020 [ 13]: 2b5a9939d050b99d -Block 0020 [ 14]: 8890b2c4de332010 -Block 0020 [ 15]: 2bffc5b880155776 -Block 0020 [ 16]: 9d689be3ee578244 -Block 0020 [ 17]: af66f1e4f8b45f62 -Block 0020 [ 18]: d1d0b72827268a6d -Block 0020 [ 19]: 7b4f96b5b5bb2ee7 -Block 0020 [ 20]: 34164e19532e3ff3 -Block 0020 [ 21]: 3b293d5ba9a9aa36 -Block 0020 [ 22]: 9a1d322d31de3ede -Block 0020 [ 23]: 209a2e31f28fbf4a -Block 0020 [ 24]: e96333b0e0307d67 -Block 0020 [ 25]: 74db7c84dbfb42b2 -Block 0020 [ 26]: 6a832659109cbeb6 -Block 0020 [ 27]: 40a88c9e7583cc27 -Block 0020 [ 28]: 2fb7884dc5dd65ec -Block 0020 [ 29]: 8622638205cd2f99 -Block 0020 [ 30]: 6f064114ced1864a -Block 0020 [ 31]: bc3837c3a04e9a7b -Block 0020 [ 32]: 3e8d79081e8567fb -Block 0020 [ 33]: f56eabf9f0595e78 -Block 0020 [ 34]: 8eed403a3c788b53 -Block 0020 [ 35]: 1378bf4dc47dfe48 -Block 0020 [ 36]: 084c595b8c3c4284 -Block 0020 [ 37]: 3b5361f50ffb9eaa -Block 0020 [ 38]: 8bce8704343749f9 -Block 0020 [ 39]: f1211e16a9112f82 -Block 0020 [ 40]: bd238d55c13f2400 -Block 0020 [ 41]: 34220ff220961874 -Block 0020 [ 42]: 8897e83d67d144c6 -Block 0020 [ 43]: 2db5b922527b964e -Block 0020 [ 44]: b52197589d437094 -Block 0020 [ 45]: 6a48ba9a9fa154de -Block 0020 [ 46]: e98bb88fd0e4dab7 -Block 0020 [ 47]: 2f84a701d1a03033 -Block 0020 [ 48]: fc772aae41afde53 -Block 0020 [ 49]: 636bb52ba1d4d9f4 -Block 0020 [ 50]: faec1cea1cc46a10 -Block 0020 [ 51]: 94d08005cfc3c287 -Block 0020 [ 52]: 9830390c9a830a8c -Block 0020 [ 53]: 1c8f499329eaf4d1 -Block 0020 [ 54]: 6853cf0db3311b76 -Block 0020 [ 55]: 83e79a680245e207 -Block 0020 [ 56]: 7cec49064e8bf50b -Block 0020 [ 57]: 4fd24b05836c01c4 -Block 0020 [ 58]: 905e99c68a4c100e -Block 0020 [ 59]: 4f9a89f3d7ac4e0b -Block 0020 [ 60]: c9c39471299e1ddb -Block 0020 [ 61]: e39efaf3b38813a4 -Block 0020 [ 62]: 286b4375813a437d -Block 0020 [ 63]: 98e5b9910e3934df -Block 0020 [ 64]: d521ed1fe8a87969 -Block 0020 [ 65]: db08009d9e929343 -Block 0020 [ 66]: a0c34ebe01219a67 -Block 0020 [ 67]: e0ce735c0009e0c1 -Block 0020 [ 68]: 4fb4716c4dbb61f8 -Block 0020 [ 69]: e59f27e642628964 -Block 0020 [ 70]: fff59eb4c7b5702c -Block 0020 [ 71]: 2a775ff254d62e30 -Block 0020 [ 72]: 0a081787e9771e82 -Block 0020 [ 73]: ec7dea5310431b84 -Block 0020 [ 74]: 2c490281ca5de0f6 -Block 0020 [ 75]: eead3e14ea1923fd -Block 0020 [ 76]: 3b833ad12c010798 -Block 0020 [ 77]: 363edc3e25c47661 -Block 0020 [ 78]: af78f9f2aec5fe6a -Block 0020 [ 79]: 31d902a64cbcb466 -Block 0020 [ 80]: f5c4812963178782 -Block 0020 [ 81]: 2922c5fc0ea4c6b8 -Block 0020 [ 82]: 31b289a43161a3e8 -Block 0020 [ 83]: ed8f261a426e4652 -Block 0020 [ 84]: e813c7f4b1ea1bd1 -Block 0020 [ 85]: 0760441a91fd6595 -Block 0020 [ 86]: 6584645ae348b4f0 -Block 0020 [ 87]: 087309d7d5028f81 -Block 0020 [ 88]: 68d7600f7a6987a9 -Block 0020 [ 89]: 2b3846321beb118c -Block 0020 [ 90]: 4f1633a0d3637086 -Block 0020 [ 91]: d3b8197641b70961 -Block 0020 [ 92]: 79e34df4822e23e3 -Block 0020 [ 93]: 1561ec3cb8df22a0 -Block 0020 [ 94]: 2caa46601b15c5a8 -Block 0020 [ 95]: efd91677fe9784df -Block 0020 [ 96]: 985faa6923818318 -Block 0020 [ 97]: 49c18986b6c3be49 -Block 0020 [ 98]: 7f60e94fb8ca654a -Block 0020 [ 99]: 9aa81a1c69b89835 -Block 0020 [100]: 804a4a140e6de1b3 -Block 0020 [101]: ad5e3b1de8e2fa89 -Block 0020 [102]: 9317892f7ff6495f -Block 0020 [103]: aedbce513941eb7e -Block 0020 [104]: bae93efd21fe2a00 -Block 0020 [105]: e8fd2f13cd90ddf5 -Block 0020 [106]: ca82b1623bfd32e2 -Block 0020 [107]: 45a3aa2da3795165 -Block 0020 [108]: 842eb4e38880bf30 -Block 0020 [109]: 94da58ed78612959 -Block 0020 [110]: 2b68ef59ef8d144c -Block 0020 [111]: 3a815560012d789a -Block 0020 [112]: cbf6b1e9b5757616 -Block 0020 [113]: 856022efc7259d65 -Block 0020 [114]: 1d546cfb010ccea0 -Block 0020 [115]: ead677ea82cde8c4 -Block 0020 [116]: c68f1c9ce7d502c8 -Block 0020 [117]: 01430c313a4da7de -Block 0020 [118]: d9bd21f426a60b45 -Block 0020 [119]: 367f365d76791fb5 -Block 0020 [120]: 450c3a5d659df17c -Block 0020 [121]: e4936ada9bf3874c -Block 0020 [122]: c022ef04e11cc79d -Block 0020 [123]: b8b492f9bd65b623 -Block 0020 [124]: bff3f85f55177ad6 -Block 0020 [125]: b5b12c22a577cc39 -Block 0020 [126]: f474903b19473bea -Block 0020 [127]: d79a7d13279e3b09 -Block 0021 [ 0]: 6a690d82f7468dd3 -Block 0021 [ 1]: 12441ba391c9594e -Block 0021 [ 2]: 8c5f0f5a0d1addfc -Block 0021 [ 3]: c889abe6f4d8422a -Block 0021 [ 4]: 5d763273270fbef6 -Block 0021 [ 5]: 4348880c55930785 -Block 0021 [ 6]: e620148dd4f6f217 -Block 0021 [ 7]: 3e029951e0b571b4 -Block 0021 [ 8]: 357a0d9da17a4feb -Block 0021 [ 9]: 0e50f4a16dfeff0c -Block 0021 [ 10]: 95d4a46a7f81baac -Block 0021 [ 11]: 539843f5fcfd02cd -Block 0021 [ 12]: 9d178b8212b0ff45 -Block 0021 [ 13]: 2a2f470cb36c100b -Block 0021 [ 14]: bf41303e9261b48e -Block 0021 [ 15]: 9b0862b229b83b6d -Block 0021 [ 16]: cc89cb6361314e2e -Block 0021 [ 17]: 268c35415ce6dc52 -Block 0021 [ 18]: a3a3f427c540d392 -Block 0021 [ 19]: 6bf8e2ed1915f860 -Block 0021 [ 20]: d71b137449672e9b -Block 0021 [ 21]: 629232b8316eb560 -Block 0021 [ 22]: 015105d3bd65ee42 -Block 0021 [ 23]: 7899ec0fb94c6aec -Block 0021 [ 24]: 87452e4e58a4db50 -Block 0021 [ 25]: 9eab92117f5864cc -Block 0021 [ 26]: c9b4aae2326ae591 -Block 0021 [ 27]: beb6cb972da0771c -Block 0021 [ 28]: ef51efd15eb76fdb -Block 0021 [ 29]: be1a9ed66325f1c8 -Block 0021 [ 30]: f9eb1c4a361d6a0b -Block 0021 [ 31]: f33919c3dbbd7564 -Block 0021 [ 32]: 09f88bba37d76cc5 -Block 0021 [ 33]: 626fab6de3cfcec7 -Block 0021 [ 34]: 1a641fe5d8c5f7dd -Block 0021 [ 35]: 16aafd5de0731c78 -Block 0021 [ 36]: e3c0c662199c1ca2 -Block 0021 [ 37]: 54d0766c3a0a5f59 -Block 0021 [ 38]: c13b58b4f9e87258 -Block 0021 [ 39]: ab4de1d30836c3c0 -Block 0021 [ 40]: 5d4af2bffc26448c -Block 0021 [ 41]: 6cbf772c8406ff83 -Block 0021 [ 42]: 2494f8048435f921 -Block 0021 [ 43]: b844fc339f0496b0 -Block 0021 [ 44]: 957800ddd4aa408e -Block 0021 [ 45]: 998fc5084c314ceb -Block 0021 [ 46]: 2eb014c15ff6239d -Block 0021 [ 47]: 6a779f0437c473bb -Block 0021 [ 48]: 1d68b14e7bf75d98 -Block 0021 [ 49]: c96192d0a155afa7 -Block 0021 [ 50]: ed980b6f7430035d -Block 0021 [ 51]: a282ae6ceae976e1 -Block 0021 [ 52]: 627d105e74b5809a -Block 0021 [ 53]: ef2583d01983d3e9 -Block 0021 [ 54]: 19702f856f10b49c -Block 0021 [ 55]: 878565afd439cff8 -Block 0021 [ 56]: 41e300a0e2ea091f -Block 0021 [ 57]: 813d4ae9df7ff99b -Block 0021 [ 58]: 876ed9836644b255 -Block 0021 [ 59]: e6f3cf1e523c47a2 -Block 0021 [ 60]: 5b3b6a50ddbe365a -Block 0021 [ 61]: a78355f9b796b48e -Block 0021 [ 62]: cee13fa63c34d91d -Block 0021 [ 63]: 3ad04395adaaa626 -Block 0021 [ 64]: 25f04f6fea52fad8 -Block 0021 [ 65]: b949d6ad6bd07455 -Block 0021 [ 66]: eace6d725bdd90e7 -Block 0021 [ 67]: 28ec322421ed16da -Block 0021 [ 68]: 53ef5acdcde08591 -Block 0021 [ 69]: 1731904e94e47535 -Block 0021 [ 70]: f905f30eaee0f5a4 -Block 0021 [ 71]: bf030f5796084fdb -Block 0021 [ 72]: 2727e18c596bcc5d -Block 0021 [ 73]: b41e211383e74c1c -Block 0021 [ 74]: ca7ac3560b209561 -Block 0021 [ 75]: c72caf41204b2f30 -Block 0021 [ 76]: 01c8ea4f3814837e -Block 0021 [ 77]: 6a6c6b41f86cd210 -Block 0021 [ 78]: 04666cea6797c53e -Block 0021 [ 79]: 31493ece7f7f369b -Block 0021 [ 80]: b54719467f58b743 -Block 0021 [ 81]: c994b462ca9e76fb -Block 0021 [ 82]: bca2b0d3356d6258 -Block 0021 [ 83]: 8ca7953de9bbcdff -Block 0021 [ 84]: 535469dd17595f7d -Block 0021 [ 85]: 923db89190ec8649 -Block 0021 [ 86]: 6a47a104d6085a31 -Block 0021 [ 87]: 99521adc90e0fb2e -Block 0021 [ 88]: 4f41ef6bb830f393 -Block 0021 [ 89]: 2eccdea43764c42c -Block 0021 [ 90]: 987fe3497b80df32 -Block 0021 [ 91]: b0efcf6157cbcf0b -Block 0021 [ 92]: 26e0b03471338ae5 -Block 0021 [ 93]: cf4ad2adf62522c4 -Block 0021 [ 94]: 4cb838ff8a040a42 -Block 0021 [ 95]: 437c3d04c884bb15 -Block 0021 [ 96]: 5b14b20bc5801714 -Block 0021 [ 97]: 56dba0d047b9059b -Block 0021 [ 98]: d69d5fa49a586a3a -Block 0021 [ 99]: 2d920c3b7cdbe2ee -Block 0021 [100]: a25b45eac0504268 -Block 0021 [101]: fefa93f49a07f52b -Block 0021 [102]: 6b800421cddbaceb -Block 0021 [103]: 8f4aa7cc052749cc -Block 0021 [104]: 91b8112dc322d756 -Block 0021 [105]: a693ecaab66dbce0 -Block 0021 [106]: 876ccc4f6a1e06ef -Block 0021 [107]: f1dceba8e8d281c8 -Block 0021 [108]: 9db34590d552f669 -Block 0021 [109]: c652413cce887046 -Block 0021 [110]: 3591284cc5019dd5 -Block 0021 [111]: 557c5ca2a73593f6 -Block 0021 [112]: 1ad1bbd2cdedd482 -Block 0021 [113]: 4a4411ef6795ebc6 -Block 0021 [114]: b3572af2889f1c36 -Block 0021 [115]: f68259a9ba57696d -Block 0021 [116]: c9343fffa8f8a568 -Block 0021 [117]: 2f7041694cec2149 -Block 0021 [118]: 7a0447037cc831ab -Block 0021 [119]: 51e939824bd21330 -Block 0021 [120]: fc74c47626ca3908 -Block 0021 [121]: bab7851bd8ed2716 -Block 0021 [122]: a159f8ec28517b61 -Block 0021 [123]: 7536651c332d5abe -Block 0021 [124]: 68913e0a98eed0fc -Block 0021 [125]: 0edcf5e40acaf20c -Block 0021 [126]: 3b248d434ed7bb55 -Block 0021 [127]: 39ab89f9d8b926b3 -Block 0022 [ 0]: 3f70cc0f9d47707f -Block 0022 [ 1]: f5eb80c359ef2a51 -Block 0022 [ 2]: d453f69f134da7de -Block 0022 [ 3]: 138b7cc85bb57594 -Block 0022 [ 4]: 74f9c1207bb6b4dd -Block 0022 [ 5]: 219a6ab1c89b4f55 -Block 0022 [ 6]: 8a494ac72680d673 -Block 0022 [ 7]: 267fc49b20bebc87 -Block 0022 [ 8]: e487c1458e1d57bb -Block 0022 [ 9]: ce2365f353681c6e -Block 0022 [ 10]: ead7a9af5856b905 -Block 0022 [ 11]: 686e9296790d47c4 -Block 0022 [ 12]: 262aa1e0a3aee9b8 -Block 0022 [ 13]: cf02b3e2b36c552f -Block 0022 [ 14]: cc89498295a3a56e -Block 0022 [ 15]: 59c0818ddb29c3b7 -Block 0022 [ 16]: 290e0e36ae0adb71 -Block 0022 [ 17]: 2b26f87ae8afd6d1 -Block 0022 [ 18]: 7eaf767983ed9a23 -Block 0022 [ 19]: 7d20d84ac0016375 -Block 0022 [ 20]: 8571c62882e1e05f -Block 0022 [ 21]: b02d4e3a32d7eb0f -Block 0022 [ 22]: 508db8ec23e8b660 -Block 0022 [ 23]: eb378e5c40b3c8f1 -Block 0022 [ 24]: 83cbba05d754b665 -Block 0022 [ 25]: d9d4c05f4f0318fa -Block 0022 [ 26]: f9c09b3d86d7f325 -Block 0022 [ 27]: fda56c3e88644d3d -Block 0022 [ 28]: 2c2aa62da14575bf -Block 0022 [ 29]: 6c64f927b3ab75ab -Block 0022 [ 30]: 935b4ee8b0eb2f84 -Block 0022 [ 31]: 8755b9ac7888c891 -Block 0022 [ 32]: 328982a5c3491d4b -Block 0022 [ 33]: 0f46472e28c9f157 -Block 0022 [ 34]: d4141d926cea8a31 -Block 0022 [ 35]: b83228a2302af08a -Block 0022 [ 36]: 85c24d6f72bca71a -Block 0022 [ 37]: b4abb81f797317be -Block 0022 [ 38]: d56c5d7910890829 -Block 0022 [ 39]: 80ec5e7003e1dcbe -Block 0022 [ 40]: 86f0590758cd27da -Block 0022 [ 41]: 4ef24b838af6cdf7 -Block 0022 [ 42]: 67e357a7beef393b -Block 0022 [ 43]: 63d780ac9193bd51 -Block 0022 [ 44]: 64bb5e3aa4e4e0a9 -Block 0022 [ 45]: a94f3197abecf10d -Block 0022 [ 46]: 63f34c088c47b6d6 -Block 0022 [ 47]: 9ddbf939d19d4778 -Block 0022 [ 48]: 5d08f10b95522795 -Block 0022 [ 49]: 78bba3c480deabdd -Block 0022 [ 50]: 8d59286c50ed63bc -Block 0022 [ 51]: 11e2e05af4e98a96 -Block 0022 [ 52]: 6c47d628f6bf8ae5 -Block 0022 [ 53]: 2a06375e05b36cc1 -Block 0022 [ 54]: 9dbca78d1d334ba4 -Block 0022 [ 55]: a1216d5e2ae50cf6 -Block 0022 [ 56]: a150c2b93d4afb34 -Block 0022 [ 57]: a2b13a50cd072fa1 -Block 0022 [ 58]: 7c03a9ea46b3e1be -Block 0022 [ 59]: 9a682f9b2c8a0ba5 -Block 0022 [ 60]: 836dd7bd4d152995 -Block 0022 [ 61]: f0176675ec8230f1 -Block 0022 [ 62]: 0481fd3ccc6daa78 -Block 0022 [ 63]: e3325ec7d894b781 -Block 0022 [ 64]: ea394932d67081f5 -Block 0022 [ 65]: 8e7c52d335e12e3b -Block 0022 [ 66]: fce337de40f0d41e -Block 0022 [ 67]: 58cffb116a73341c -Block 0022 [ 68]: c0296ad8d2c01ccc -Block 0022 [ 69]: 76d5795c8820068d -Block 0022 [ 70]: 1a29ad20fa1ab458 -Block 0022 [ 71]: 8619693bda7f0872 -Block 0022 [ 72]: 6b8b27f92588f5f9 -Block 0022 [ 73]: 5e76c336d09dc18b -Block 0022 [ 74]: c699fdcb6eecfc23 -Block 0022 [ 75]: b31ed01e22cb487f -Block 0022 [ 76]: 1496f91f13ec269a -Block 0022 [ 77]: d4090509dd4158e6 -Block 0022 [ 78]: 4a947a520f8810f6 -Block 0022 [ 79]: 065468219f73ab5a -Block 0022 [ 80]: 8a4b1ed17cae3bbb -Block 0022 [ 81]: c30a06c4a34d2887 -Block 0022 [ 82]: 5cddc373dbfc1593 -Block 0022 [ 83]: 04335ba1b963f666 -Block 0022 [ 84]: 85a31f5f5fa3e7eb -Block 0022 [ 85]: 232179a977e19047 -Block 0022 [ 86]: 26563ede801a4d94 -Block 0022 [ 87]: 4a7e1940462900f0 -Block 0022 [ 88]: b1e2be20bbf016c3 -Block 0022 [ 89]: 7db114728eee3040 -Block 0022 [ 90]: 4f182d12273166ae -Block 0022 [ 91]: 9c4aa74c698762ba -Block 0022 [ 92]: 03a3e790226c9265 -Block 0022 [ 93]: a31d876f8c84340a -Block 0022 [ 94]: ef732cbaa920286f -Block 0022 [ 95]: 3326b587e57c8933 -Block 0022 [ 96]: c1dcf40199a259d5 -Block 0022 [ 97]: 22b54da552e17174 -Block 0022 [ 98]: 54287619d13f4838 -Block 0022 [ 99]: ea44ee02ed3e4aec -Block 0022 [100]: e60d7f85f5abb1ee -Block 0022 [101]: 8b1a51a4211a7969 -Block 0022 [102]: 49c9292a1953bf9c -Block 0022 [103]: 202dc80570086a4b -Block 0022 [104]: 2dd572ef067f560a -Block 0022 [105]: 2ddebe7bd2a703ca -Block 0022 [106]: 289c61cdfd6966fb -Block 0022 [107]: 7156699a693063c1 -Block 0022 [108]: 244c502031ccd19f -Block 0022 [109]: a9436c05d1a5e0ba -Block 0022 [110]: 2ed5fbeafdd3128a -Block 0022 [111]: 27c4f3005c6ffa0c -Block 0022 [112]: b399e9c1b48ee737 -Block 0022 [113]: 26cf4190bd859535 -Block 0022 [114]: a97fa3395a24ead9 -Block 0022 [115]: 73032b5c7a73a24b -Block 0022 [116]: 3c6c63e68aa5e799 -Block 0022 [117]: 56d6fea9e6aee17e -Block 0022 [118]: 46487a212a0f03fd -Block 0022 [119]: 4108a5270f3d45e5 -Block 0022 [120]: 78808b44d4deb7b0 -Block 0022 [121]: a49cd7a2e771bec7 -Block 0022 [122]: c899d135f9a20151 -Block 0022 [123]: 397d1afb157e933d -Block 0022 [124]: b3e792595d5c92ab -Block 0022 [125]: 154fb67a3c72b825 -Block 0022 [126]: 7ef6c5601737fa2e -Block 0022 [127]: e876f8e91ea54fa3 -Block 0023 [ 0]: 341a79fe5b82da3b -Block 0023 [ 1]: 737f57840604464b -Block 0023 [ 2]: 1a7b402397450013 -Block 0023 [ 3]: 17424bc7740881d5 -Block 0023 [ 4]: 99730f5b1c4f162a -Block 0023 [ 5]: 1849c57fadf5c376 -Block 0023 [ 6]: bef6a16b254402fe -Block 0023 [ 7]: e446a0a7fe1b37d1 -Block 0023 [ 8]: e1c2dbb6e612b1c9 -Block 0023 [ 9]: 8d87fc8c05d17a91 -Block 0023 [ 10]: 0069fc8e5ec68712 -Block 0023 [ 11]: 03fe37e380527614 -Block 0023 [ 12]: d36a5d4153e36e01 -Block 0023 [ 13]: bcb47d6da610431e -Block 0023 [ 14]: 270f257c2355afd3 -Block 0023 [ 15]: 5ed5f32159550325 -Block 0023 [ 16]: f3d03d86e0697368 -Block 0023 [ 17]: 0e783d159193f647 -Block 0023 [ 18]: 10f1d60920b8df4b -Block 0023 [ 19]: aaaf13f7120fd26f -Block 0023 [ 20]: 4679458b37b0215b -Block 0023 [ 21]: 496624fd48549689 -Block 0023 [ 22]: b243733c6fae67a7 -Block 0023 [ 23]: bb53c16aca1dfdfb -Block 0023 [ 24]: 379a6e5c7b368ef2 -Block 0023 [ 25]: ab9a4ec2322b323e -Block 0023 [ 26]: ee320748a309795f -Block 0023 [ 27]: 08569d46951e5bcc -Block 0023 [ 28]: ec8ceeb84b74514d -Block 0023 [ 29]: 1f85bb224087633e -Block 0023 [ 30]: f28be6d460e221d0 -Block 0023 [ 31]: f661e32cb2e0cd48 -Block 0023 [ 32]: a89f51d1a649a311 -Block 0023 [ 33]: 91c15b946457231a -Block 0023 [ 34]: b3390d3c66d4fc3b -Block 0023 [ 35]: 6e3fe811c4117e98 -Block 0023 [ 36]: 647ae653447f7977 -Block 0023 [ 37]: 3e8451f63f8865fd -Block 0023 [ 38]: f8a6651886f512a4 -Block 0023 [ 39]: 7cf42922459c66c7 -Block 0023 [ 40]: 2577e967f9fda293 -Block 0023 [ 41]: 1389c8f92c268e06 -Block 0023 [ 42]: 5a35ff4199747016 -Block 0023 [ 43]: fc650deae93a7c1b -Block 0023 [ 44]: fcb7794763bf77db -Block 0023 [ 45]: e362533b122524f5 -Block 0023 [ 46]: 1ba9b1e64359b4f5 -Block 0023 [ 47]: 08b09e872e6e1dd9 -Block 0023 [ 48]: 4ee537f0830845cd -Block 0023 [ 49]: 5ce572b3f8832e90 -Block 0023 [ 50]: 1b725b41ecf6d0ad -Block 0023 [ 51]: aa647b27f5cc9c5b -Block 0023 [ 52]: 00a6b24dd3f367b6 -Block 0023 [ 53]: 7f68dbe2f046d0f9 -Block 0023 [ 54]: ce097da84f7194b7 -Block 0023 [ 55]: 58fea62c150d7901 -Block 0023 [ 56]: ef9a9a7cf0c9191a -Block 0023 [ 57]: 6fe8d189a04a105c -Block 0023 [ 58]: 420faab0945c162c -Block 0023 [ 59]: dfd6be3b647140af -Block 0023 [ 60]: dfb409380364365d -Block 0023 [ 61]: 36eeda04b5cfdee0 -Block 0023 [ 62]: 6326723b899f1ef1 -Block 0023 [ 63]: 6531688ea7ab1170 -Block 0023 [ 64]: 299fa844bd5b04de -Block 0023 [ 65]: 4a87c4d2dce5e89e -Block 0023 [ 66]: 8d85a67f07ba1ede -Block 0023 [ 67]: 30b6847d1025c641 -Block 0023 [ 68]: 4726562dd7a8d04e -Block 0023 [ 69]: 9c8829a7b56bf050 -Block 0023 [ 70]: 3f33335a10a6daa8 -Block 0023 [ 71]: ccb3b31d4131d58f -Block 0023 [ 72]: b715752217405e47 -Block 0023 [ 73]: 564adbc6c513bc0f -Block 0023 [ 74]: 5c755447a6582099 -Block 0023 [ 75]: 50987d33c2e8f403 -Block 0023 [ 76]: d370b629305d847f -Block 0023 [ 77]: 46c6ec2f63d39994 -Block 0023 [ 78]: e9e849a1a94b1417 -Block 0023 [ 79]: d5f7a7f69abc45d4 -Block 0023 [ 80]: 720953293ba3a6dc -Block 0023 [ 81]: 2e5a953a29ddae35 -Block 0023 [ 82]: 9389fb9b09621872 -Block 0023 [ 83]: 73fade635fe140b6 -Block 0023 [ 84]: 38bf4c3bce807b6a -Block 0023 [ 85]: 1ace5da62d54f17a -Block 0023 [ 86]: 1c80837442bb0b1f -Block 0023 [ 87]: 881ae1746297229b -Block 0023 [ 88]: f51d9dda7b6c623f -Block 0023 [ 89]: dec061d609ecb1da -Block 0023 [ 90]: 8bf9510cca4c204d -Block 0023 [ 91]: de8a16e97b4584f1 -Block 0023 [ 92]: d206442c8ac16e38 -Block 0023 [ 93]: c3c90cd9562e7732 -Block 0023 [ 94]: 01730c66e6a1026a -Block 0023 [ 95]: 929fffc02cfdbc95 -Block 0023 [ 96]: 1cc815084b846e70 -Block 0023 [ 97]: 4c93d56a06565b60 -Block 0023 [ 98]: 2224244f540ba2fb -Block 0023 [ 99]: 83560821e355eeaa -Block 0023 [100]: db0be31347b60ecc -Block 0023 [101]: cd1f9f68387bd646 -Block 0023 [102]: 86d24034913edc25 -Block 0023 [103]: f905de2d30889d35 -Block 0023 [104]: 87535a21323953b9 -Block 0023 [105]: 2366a1cb51f43ee7 -Block 0023 [106]: 704cc3e5fd36f427 -Block 0023 [107]: 7d59c38fdef90ccb -Block 0023 [108]: d68a4a721796fa30 -Block 0023 [109]: d333366213fa9686 -Block 0023 [110]: 5bdc922f53fc6ef9 -Block 0023 [111]: 07b301b7fece3102 -Block 0023 [112]: 90cc5ec9d6cae00f -Block 0023 [113]: 3c33243c58de4a81 -Block 0023 [114]: 69914a6327b42592 -Block 0023 [115]: aedb75ec336b0c83 -Block 0023 [116]: 0377d738f40b3b8a -Block 0023 [117]: a3b9cbf2d4c2d6bd -Block 0023 [118]: 8509d769b336d9a3 -Block 0023 [119]: f2ea16490855230e -Block 0023 [120]: 8a15faf44b0b37ed -Block 0023 [121]: d617ff1c420f1c63 -Block 0023 [122]: 543394d6ea952471 -Block 0023 [123]: 35409c8245a7c8dd -Block 0023 [124]: dd130b326c99b2f8 -Block 0023 [125]: 7b7d105a04932402 -Block 0023 [126]: ca6d2056cb49b043 -Block 0023 [127]: d1f6d11b9290e397 -Block 0024 [ 0]: e3b8be3b800bcac1 -Block 0024 [ 1]: 93592dd02f819503 -Block 0024 [ 2]: ec4973a83723ef80 -Block 0024 [ 3]: 477e80d3b8f24a0a -Block 0024 [ 4]: 34e1f886f9c40f36 -Block 0024 [ 5]: 6e4119b94c6aa498 -Block 0024 [ 6]: fd2c62ab5381b13b -Block 0024 [ 7]: ee123c46d80957ee -Block 0024 [ 8]: ed542b69841c3346 -Block 0024 [ 9]: cdebc6e16a3882c1 -Block 0024 [ 10]: a7306cb070193039 -Block 0024 [ 11]: ae674fdc1d730617 -Block 0024 [ 12]: 9ee6543905547df4 -Block 0024 [ 13]: cc0536cbba16bb9c -Block 0024 [ 14]: ac44f47060312756 -Block 0024 [ 15]: e48e593dce67bce0 -Block 0024 [ 16]: f5aff4db2366797c -Block 0024 [ 17]: eca2b65e0cd03f09 -Block 0024 [ 18]: a3fd2e7240d51d98 -Block 0024 [ 19]: bfbf1d554e80c436 -Block 0024 [ 20]: 2890165f5f8cbedc -Block 0024 [ 21]: b0637c303f1d1ac1 -Block 0024 [ 22]: dc15a716f869bee5 -Block 0024 [ 23]: c34be8e074b39c6f -Block 0024 [ 24]: 967f16eda9ee64fd -Block 0024 [ 25]: 14107a44211f4d4d -Block 0024 [ 26]: 18b413ce6910aac4 -Block 0024 [ 27]: 5604192a5b6eeecc -Block 0024 [ 28]: 6db3a8bf11a19c45 -Block 0024 [ 29]: 9be52589cd36b4f5 -Block 0024 [ 30]: 4ef35179c27e46f8 -Block 0024 [ 31]: 382e57343eb30442 -Block 0024 [ 32]: 7f9e80c90761e3c0 -Block 0024 [ 33]: f749d138d96e88e4 -Block 0024 [ 34]: d9f68571c4dd5c13 -Block 0024 [ 35]: 43939a9e9e5f7c88 -Block 0024 [ 36]: 1c29e903415c8bf9 -Block 0024 [ 37]: d89a7c5852bc1e1c -Block 0024 [ 38]: ae6caf5be4a605bf -Block 0024 [ 39]: 2d782b9acaf95fb3 -Block 0024 [ 40]: 797f01c34397e617 -Block 0024 [ 41]: 5fd2da21bf24713a -Block 0024 [ 42]: 5526c76a245b34c4 -Block 0024 [ 43]: bfc80ada0d455aa0 -Block 0024 [ 44]: 1793f4cd9103f76a -Block 0024 [ 45]: e8de97a775e1d0cd -Block 0024 [ 46]: df8a6cfa31192f7a -Block 0024 [ 47]: 640f146840f26415 -Block 0024 [ 48]: 4cbd3dd98219dcfe -Block 0024 [ 49]: 6ce1c9f112bec860 -Block 0024 [ 50]: ffbbc563a583b1d3 -Block 0024 [ 51]: 76c086ebfefb2b79 -Block 0024 [ 52]: 6758f6e588490093 -Block 0024 [ 53]: c5f82f0a9dd56b63 -Block 0024 [ 54]: 7530873426b32f4c -Block 0024 [ 55]: 22557a08fccfd756 -Block 0024 [ 56]: 585b5b8b59796d0a -Block 0024 [ 57]: b5ec994837d36005 -Block 0024 [ 58]: bed35897ce06d10a -Block 0024 [ 59]: 82e686ebd526b229 -Block 0024 [ 60]: d83388e341f49a52 -Block 0024 [ 61]: f44ff88f95a27c3d -Block 0024 [ 62]: 988230b216a9823e -Block 0024 [ 63]: 656518e36a1ece8a -Block 0024 [ 64]: 7942fe98ed267352 -Block 0024 [ 65]: 648ede8d1e5e7bda -Block 0024 [ 66]: 76ea13fb53c8b584 -Block 0024 [ 67]: 56387f677a110819 -Block 0024 [ 68]: 16ed666f4094cb45 -Block 0024 [ 69]: fe5a06c15b8aeec4 -Block 0024 [ 70]: 78773a1540aaa4e3 -Block 0024 [ 71]: f908d3a514f12aea -Block 0024 [ 72]: 7947a0a5e3de5695 -Block 0024 [ 73]: 6bf577dffd32e561 -Block 0024 [ 74]: ace24c27c6a31b3d -Block 0024 [ 75]: a98b813be7cc842d -Block 0024 [ 76]: ca9114e79885df7f -Block 0024 [ 77]: 05fa517bd6dd57a6 -Block 0024 [ 78]: b0ea1c66a2e97b8e -Block 0024 [ 79]: 17c7fc5ce92bcb6d -Block 0024 [ 80]: 7e9b1dc6ccbfc17e -Block 0024 [ 81]: 25c3624824af53ed -Block 0024 [ 82]: c1c82c49130c3477 -Block 0024 [ 83]: e1ecceb5ababf159 -Block 0024 [ 84]: 976f387136d4f7ce -Block 0024 [ 85]: 8b9999d864a74c63 -Block 0024 [ 86]: 215d99ed05fff16e -Block 0024 [ 87]: f4a5452133dd542f -Block 0024 [ 88]: 0da71140658ff706 -Block 0024 [ 89]: 47da481f4574299d -Block 0024 [ 90]: 63299064bb401eb2 -Block 0024 [ 91]: af13d9a8d97b37bb -Block 0024 [ 92]: 08359e9b80b0118c -Block 0024 [ 93]: 049e21cfaef9cbe7 -Block 0024 [ 94]: c12cb6dcf3e8de01 -Block 0024 [ 95]: 8bf57b075242998f -Block 0024 [ 96]: 88323e969cdaa1f2 -Block 0024 [ 97]: cdecc8f395cfadec -Block 0024 [ 98]: 03b15b330a376778 -Block 0024 [ 99]: 0099436d96a2cdef -Block 0024 [100]: b3a65c86f37ac4dd -Block 0024 [101]: 4949c9b0289557c8 -Block 0024 [102]: 8929e420dc60f1f0 -Block 0024 [103]: 7a8237af7d558536 -Block 0024 [104]: b2a234a509915dbf -Block 0024 [105]: 964803f63860414f -Block 0024 [106]: af7b6f0ab6aea78f -Block 0024 [107]: 87b040d11ef2b48e -Block 0024 [108]: 9a8d4e6c6209fee7 -Block 0024 [109]: 31363e0694cbe147 -Block 0024 [110]: a01753b413c3432b -Block 0024 [111]: e5ad598e657a3527 -Block 0024 [112]: 2bfbe1bccad1592b -Block 0024 [113]: eab4792c6dfcdb98 -Block 0024 [114]: 5bf3e2632baf57a0 -Block 0024 [115]: 24c47826d1b60b11 -Block 0024 [116]: 0fa3922337708149 -Block 0024 [117]: 23878fd8b3ee440a -Block 0024 [118]: e0da3fbaeb9b754f -Block 0024 [119]: 4c5845d295c8e130 -Block 0024 [120]: f9842cfb0519a77a -Block 0024 [121]: e78c8fc24df07468 -Block 0024 [122]: 22001bb20a856f72 -Block 0024 [123]: 21531c03ff79630c -Block 0024 [124]: e7c926c13079eb3d -Block 0024 [125]: 6ad556444199ea80 -Block 0024 [126]: 64da7b572b36f7ba -Block 0024 [127]: 799b25b56cf24c84 -Block 0025 [ 0]: a8ef4430ce39f78a -Block 0025 [ 1]: 6fa7bb074ca2d4c7 -Block 0025 [ 2]: c4328dc4903e2627 -Block 0025 [ 3]: 847f8a36c562ff2e -Block 0025 [ 4]: 8913562d5c4b41e0 -Block 0025 [ 5]: 1b8e8af880881f23 -Block 0025 [ 6]: e91da3d1a6f519eb -Block 0025 [ 7]: 8fae99cad26c52ed -Block 0025 [ 8]: afda62e3aabf1e6c -Block 0025 [ 9]: e7cfd7eb417b3c8b -Block 0025 [ 10]: ecc1f7be89deb6d3 -Block 0025 [ 11]: b9052fd2dee04394 -Block 0025 [ 12]: 097fc19d990754ba -Block 0025 [ 13]: 536dd6266bf8815d -Block 0025 [ 14]: 747d495d55abc42f -Block 0025 [ 15]: a2e5f741c0b61771 -Block 0025 [ 16]: b80db43d2e40ae7c -Block 0025 [ 17]: 17305d07336bd733 -Block 0025 [ 18]: 6b529470ae8322fa -Block 0025 [ 19]: 0499d8272f0b85df -Block 0025 [ 20]: 19d9e45c2cb59cb9 -Block 0025 [ 21]: 4bf3107858c7e5b4 -Block 0025 [ 22]: ae33fde859a9b807 -Block 0025 [ 23]: 1c2dc7ecfb7ac28e -Block 0025 [ 24]: f21b5a8f3d7a3939 -Block 0025 [ 25]: 4a4bf57af3ce07cc -Block 0025 [ 26]: 95095f2c45d29962 -Block 0025 [ 27]: eee227d0f71de589 -Block 0025 [ 28]: 4ed1dc11850b66f1 -Block 0025 [ 29]: 3b8e9ddf6115245e -Block 0025 [ 30]: 1cbce81b5582ce8b -Block 0025 [ 31]: c30c4b8efdac0046 -Block 0025 [ 32]: 340982707f9dff0d -Block 0025 [ 33]: d15a167fe9ce9b08 -Block 0025 [ 34]: bd66426cae072cff -Block 0025 [ 35]: 11045f18ef7e373e -Block 0025 [ 36]: a1c1d0dcb20dfb02 -Block 0025 [ 37]: bb2af69b82d672b0 -Block 0025 [ 38]: e9d38c0d0bb65923 -Block 0025 [ 39]: 74d87059aaeb21f5 -Block 0025 [ 40]: 46089bb77c69d9e0 -Block 0025 [ 41]: af2dc5813fc7be50 -Block 0025 [ 42]: b505c464526df042 -Block 0025 [ 43]: 5ebc52a55f0715b3 -Block 0025 [ 44]: e63b00f5cc681706 -Block 0025 [ 45]: 41200c17d4c5265b -Block 0025 [ 46]: 0571bb4eca0aa328 -Block 0025 [ 47]: d2c5967dee2efc65 -Block 0025 [ 48]: 386bf2ba93237452 -Block 0025 [ 49]: d9b495ea3d71c7ed -Block 0025 [ 50]: 6e9bcaac915ff914 -Block 0025 [ 51]: 61dcf57024b361e2 -Block 0025 [ 52]: dd1e6418cdfc55a1 -Block 0025 [ 53]: 89d6563948e8028a -Block 0025 [ 54]: 673410cb2802bb3c -Block 0025 [ 55]: fd72e7854b71fd95 -Block 0025 [ 56]: 9a62e33b6f8a2a6a -Block 0025 [ 57]: ea483d20be77a4d8 -Block 0025 [ 58]: beda36420dfed7d0 -Block 0025 [ 59]: ef739e227fdf5046 -Block 0025 [ 60]: 5f2ebac6da228070 -Block 0025 [ 61]: 1bd1dffbf8beeb5c -Block 0025 [ 62]: 2f82cba84b8c0705 -Block 0025 [ 63]: f0957223c4607115 -Block 0025 [ 64]: 9f205d55d2aa9dd4 -Block 0025 [ 65]: b35017d46c64b5ec -Block 0025 [ 66]: d1ebf1a5e25de936 -Block 0025 [ 67]: d9c3c72742de426f -Block 0025 [ 68]: 9a77f8612a8a9f7a -Block 0025 [ 69]: 22bbf7b831db85c3 -Block 0025 [ 70]: 915062521a86f132 -Block 0025 [ 71]: 66c1475a3005072a -Block 0025 [ 72]: 00876915bef9f5e8 -Block 0025 [ 73]: 49ec0d879061e52d -Block 0025 [ 74]: f1a9210a92a1ccf9 -Block 0025 [ 75]: a7a3aabec9a4c3fa -Block 0025 [ 76]: e5e1c5b6d2c89a59 -Block 0025 [ 77]: ecc3fffe9377b75c -Block 0025 [ 78]: e15d4dd0f77cae1a -Block 0025 [ 79]: 3ef1b0c90ea4140b -Block 0025 [ 80]: e7a1376406821cee -Block 0025 [ 81]: 3b9144b3a581e276 -Block 0025 [ 82]: cd78379531214835 -Block 0025 [ 83]: 18d8e611f3f4ca46 -Block 0025 [ 84]: efd481c945c81d76 -Block 0025 [ 85]: a0bec8b6bb02a64d -Block 0025 [ 86]: 8ed05673c1118581 -Block 0025 [ 87]: 24f2beac33e9b6f8 -Block 0025 [ 88]: 5b2869a7bbdea0b8 -Block 0025 [ 89]: 5691e816f20c7ff0 -Block 0025 [ 90]: 09b8f7c1c58bf06c -Block 0025 [ 91]: c22a0bebc36d1fe9 -Block 0025 [ 92]: 4a0f9fc41555f088 -Block 0025 [ 93]: e3a799377e1b4777 -Block 0025 [ 94]: 6c3968386d5bce8c -Block 0025 [ 95]: 5ff3108fab500908 -Block 0025 [ 96]: da7854699b50de6c -Block 0025 [ 97]: 0295929d4ff59ac2 -Block 0025 [ 98]: d7b85abf5f2f4db9 -Block 0025 [ 99]: f2f75a4a63347bc5 -Block 0025 [100]: 6644ecc4740d59e5 -Block 0025 [101]: 0700c3f8b34de41f -Block 0025 [102]: af122995d2173d4d -Block 0025 [103]: cabc6eea684c9dbf -Block 0025 [104]: 20fd25dcd332dac2 -Block 0025 [105]: a9a2c7f99cf8cab9 -Block 0025 [106]: 864c959115f406cf -Block 0025 [107]: bf96bf5323e7e5b0 -Block 0025 [108]: 01cd62dc9bb2b117 -Block 0025 [109]: ec0ddf4f05b7fe6f -Block 0025 [110]: 680b3f5dcd452651 -Block 0025 [111]: 1faa09f3557444f3 -Block 0025 [112]: 98ec5e21f49b8e57 -Block 0025 [113]: daf8ee24b8828f71 -Block 0025 [114]: 91d33ed62cd107f8 -Block 0025 [115]: 89413d1bca853d5f -Block 0025 [116]: 7fe807f969f415da -Block 0025 [117]: 67ff5407c0860624 -Block 0025 [118]: 603854576ed4f781 -Block 0025 [119]: 084738ed1f18ed62 -Block 0025 [120]: 4cdb0fae06091770 -Block 0025 [121]: b13f8bc9797ddfeb -Block 0025 [122]: 648ad341f0dca94e -Block 0025 [123]: 025348dce7ae008f -Block 0025 [124]: 048e0a463a7b8a32 -Block 0025 [125]: e1b2eeac660e780d -Block 0025 [126]: 29bac16444505a88 -Block 0025 [127]: 9cad798306f54409 -Block 0026 [ 0]: a67f2049ad6c8451 -Block 0026 [ 1]: 6e6ca1cdc41485a8 -Block 0026 [ 2]: f2ffabecd30ed9d4 -Block 0026 [ 3]: 2263bf9f96df54e5 -Block 0026 [ 4]: 5386c833d7affc6a -Block 0026 [ 5]: 9f2819f0b7f5da6b -Block 0026 [ 6]: 65221d900ac47a45 -Block 0026 [ 7]: c7a3388a192158c1 -Block 0026 [ 8]: ce3be92338e06123 -Block 0026 [ 9]: 9bc7d6a02266ff38 -Block 0026 [ 10]: a824f917c04f5b96 -Block 0026 [ 11]: ec600cae3f2419f8 -Block 0026 [ 12]: 5785857a85f7e6be -Block 0026 [ 13]: 2e6cf6e1adede0fb -Block 0026 [ 14]: 16947d46c61d02ec -Block 0026 [ 15]: ffb48b54c6461849 -Block 0026 [ 16]: 4e659132540c5954 -Block 0026 [ 17]: 39cd765cee548ebe -Block 0026 [ 18]: 65e2e928a5cbd062 -Block 0026 [ 19]: 61873257661cf542 -Block 0026 [ 20]: d3aff3680f7d74b4 -Block 0026 [ 21]: dd25b1e683c70efb -Block 0026 [ 22]: 918025d8585aaee4 -Block 0026 [ 23]: 5040001fcf34ed39 -Block 0026 [ 24]: 74156aeebd1d3057 -Block 0026 [ 25]: c4eb8075341fb9d7 -Block 0026 [ 26]: d4ae888603d85575 -Block 0026 [ 27]: 824c2294af9b2e43 -Block 0026 [ 28]: d40db17dee052e79 -Block 0026 [ 29]: c353b38b05fd93aa -Block 0026 [ 30]: fedc31fea04b7b57 -Block 0026 [ 31]: 7c62e359b5b346d5 -Block 0026 [ 32]: 529de169b8a883c2 -Block 0026 [ 33]: 3baa40cee0aafec8 -Block 0026 [ 34]: 39ea5c0da6ba803d -Block 0026 [ 35]: bb3600ed674e82db -Block 0026 [ 36]: e2cf7d3add431cd5 -Block 0026 [ 37]: 9919ac737f8e7bc1 -Block 0026 [ 38]: b1d621265207cd1b -Block 0026 [ 39]: 4124e55329618316 -Block 0026 [ 40]: 61ac39e893aa0b4a -Block 0026 [ 41]: b8828b7b916fcfd7 -Block 0026 [ 42]: 7717ca4b91f592d2 -Block 0026 [ 43]: b2d649a81b6b7715 -Block 0026 [ 44]: 94032e1f27dae77f -Block 0026 [ 45]: 91fc6ccebf3f3727 -Block 0026 [ 46]: 17cc1d27fd35298d -Block 0026 [ 47]: 484c55fc986929c6 -Block 0026 [ 48]: 262a103a08656541 -Block 0026 [ 49]: 9e528fb6c569622f -Block 0026 [ 50]: 85113abbb2977739 -Block 0026 [ 51]: c45cce441cad58db -Block 0026 [ 52]: e66de3dec4f1f53a -Block 0026 [ 53]: 6fe886047cac3746 -Block 0026 [ 54]: 37b647878b1d9d70 -Block 0026 [ 55]: 840d12b0ff087ec5 -Block 0026 [ 56]: 680aa2b9b0de658b -Block 0026 [ 57]: 35bdc3fe5b7c8413 -Block 0026 [ 58]: bba849ea8dd68a2b -Block 0026 [ 59]: e50508fec44716dc -Block 0026 [ 60]: e8218181df949251 -Block 0026 [ 61]: 76e583bfa8271ce1 -Block 0026 [ 62]: 093db4a24e8cf97f -Block 0026 [ 63]: a3198d72deba4ab1 -Block 0026 [ 64]: 8e70151c79a58a09 -Block 0026 [ 65]: 30b18f4b2a4ecc94 -Block 0026 [ 66]: efa939e486237d53 -Block 0026 [ 67]: 5a99de81200bd461 -Block 0026 [ 68]: 97c93faec22773f4 -Block 0026 [ 69]: 50cd83b3d81daef6 -Block 0026 [ 70]: a57f1cbc408a1472 -Block 0026 [ 71]: 601a83fbac217aa0 -Block 0026 [ 72]: ba61684f998db8ed -Block 0026 [ 73]: abf945da6e04b78a -Block 0026 [ 74]: 3f7f6a30a912e6fc -Block 0026 [ 75]: b5806b3204395493 -Block 0026 [ 76]: 4fbc9dc04d820d79 -Block 0026 [ 77]: ac843e3617426127 -Block 0026 [ 78]: c4a23662780b450f -Block 0026 [ 79]: b3add9936ecd3efa -Block 0026 [ 80]: 0e7adbdb1e97716f -Block 0026 [ 81]: 4855a05753a3d609 -Block 0026 [ 82]: 4a79a50f60147383 -Block 0026 [ 83]: 1a7bb1d968713322 -Block 0026 [ 84]: 560185cf7cea9af8 -Block 0026 [ 85]: 8090ae23b839fa7a -Block 0026 [ 86]: f0ef32dd60b80f4a -Block 0026 [ 87]: 75666acf1191bfac -Block 0026 [ 88]: 89122f4a6be676ed -Block 0026 [ 89]: 51c9082f91e7c815 -Block 0026 [ 90]: f57321fbf06bb01b -Block 0026 [ 91]: bf6b35695e671824 -Block 0026 [ 92]: 810270fa31267c02 -Block 0026 [ 93]: bb6d14fa78db2fd6 -Block 0026 [ 94]: 8d77c423bf297093 -Block 0026 [ 95]: f47f40b94b651b87 -Block 0026 [ 96]: ffdc7270f5ea0a0a -Block 0026 [ 97]: 110c0bed7cf02935 -Block 0026 [ 98]: 6e72a6f7e64ec1ff -Block 0026 [ 99]: 510f409d179fc3eb -Block 0026 [100]: b131bf1bf65cce12 -Block 0026 [101]: bb21fb13b27c3bd5 -Block 0026 [102]: 41148e2468bc2ea4 -Block 0026 [103]: bec352301ce4ce35 -Block 0026 [104]: d1d6655ab3dc54d1 -Block 0026 [105]: 03ebde5d7509564a -Block 0026 [106]: 8736b53e50d9254e -Block 0026 [107]: eef07ba85662fac2 -Block 0026 [108]: 866367405df3c14e -Block 0026 [109]: f4c6921e10ae40d1 -Block 0026 [110]: f84d745575f4a722 -Block 0026 [111]: 6139c48c50a9dc75 -Block 0026 [112]: 0034350a8573a8a8 -Block 0026 [113]: bd742a2290d519ad -Block 0026 [114]: 8fbf243347c92440 -Block 0026 [115]: cb51c42b54feeb1d -Block 0026 [116]: 360d009cf96e8411 -Block 0026 [117]: 4f4c61ebd49df995 -Block 0026 [118]: 0df6e047c17cb02d -Block 0026 [119]: 1875132489e84ff8 -Block 0026 [120]: 9db14fbd90640f6c -Block 0026 [121]: 4205a87bd2e27264 -Block 0026 [122]: 97da6c37e0d0f086 -Block 0026 [123]: a40bb2955b338f38 -Block 0026 [124]: ac3b50aa28c42530 -Block 0026 [125]: fc3b33ed20b81ce7 -Block 0026 [126]: 0915c6d398e25625 -Block 0026 [127]: 2e2c95a63d272437 -Block 0027 [ 0]: a94b04457a7eea5b -Block 0027 [ 1]: 3b934d4b2c4b05c1 -Block 0027 [ 2]: d36de4f08ea8241f -Block 0027 [ 3]: d8c5da183e55c800 -Block 0027 [ 4]: 798d0be96ebe4eb0 -Block 0027 [ 5]: 95b7010a3bc7d10f -Block 0027 [ 6]: 429979b7a221f329 -Block 0027 [ 7]: 2acf807b7fe97dad -Block 0027 [ 8]: a7b7429c53e9c732 -Block 0027 [ 9]: 207b679886cf1607 -Block 0027 [ 10]: 35d80c2f1ecbc709 -Block 0027 [ 11]: 7a6743313b489e3e -Block 0027 [ 12]: 450bca7213e37f0d -Block 0027 [ 13]: d204c3e3ca441327 -Block 0027 [ 14]: f0adec4a62fa0918 -Block 0027 [ 15]: 918063531c8dbfa3 -Block 0027 [ 16]: 6e3a5609838a4ba7 -Block 0027 [ 17]: 84b10132be6f1f21 -Block 0027 [ 18]: 1d7a65cf768de949 -Block 0027 [ 19]: 555bc5f7c86496e3 -Block 0027 [ 20]: b49806057b337c6a -Block 0027 [ 21]: 7568eeaada8f8866 -Block 0027 [ 22]: 2717ed3bc8dde632 -Block 0027 [ 23]: 0b277febfd999965 -Block 0027 [ 24]: 12c2942997f2b48b -Block 0027 [ 25]: bcc4355219c0f24d -Block 0027 [ 26]: e7be1d8cb552523b -Block 0027 [ 27]: 9175509980ac3f08 -Block 0027 [ 28]: 6e1453b6da39bbbb -Block 0027 [ 29]: a37b17231c4f1320 -Block 0027 [ 30]: a0a27e1f5bbb568b -Block 0027 [ 31]: da16ebc183e301a8 -Block 0027 [ 32]: b3c5c67da682c941 -Block 0027 [ 33]: 37dcdbd103c514d6 -Block 0027 [ 34]: 16ff2d29bfc64bfa -Block 0027 [ 35]: 4096c799e802154c -Block 0027 [ 36]: 59904ba66cc60d64 -Block 0027 [ 37]: 15a424885273edb0 -Block 0027 [ 38]: 1c3234b12ca31ca9 -Block 0027 [ 39]: bd6504e7e8cb0543 -Block 0027 [ 40]: 97d013f5f12883d6 -Block 0027 [ 41]: 206948310527b357 -Block 0027 [ 42]: aa674b50be674618 -Block 0027 [ 43]: f0a5f596fc0e3232 -Block 0027 [ 44]: 920409279bc2fc9c -Block 0027 [ 45]: 2ccf474d09d9aa0e -Block 0027 [ 46]: 6a8c7bdb7eb64efb -Block 0027 [ 47]: a756b71f41c37f8b -Block 0027 [ 48]: a5117f53be324b6b -Block 0027 [ 49]: 4171a67afcd26d32 -Block 0027 [ 50]: 21a3a9aaad777353 -Block 0027 [ 51]: 3755a858ffa57c1d -Block 0027 [ 52]: afc42a6207e4b2dd -Block 0027 [ 53]: aff8522b5f5d74a5 -Block 0027 [ 54]: ba69a2ef4f409d0d -Block 0027 [ 55]: b2b0b92ab9f12a08 -Block 0027 [ 56]: 21eb93c595416b78 -Block 0027 [ 57]: a3432a64639e980e -Block 0027 [ 58]: 8aa4d52c1d5aab1c -Block 0027 [ 59]: aab10fb875b1e745 -Block 0027 [ 60]: 187b116769a3ec3f -Block 0027 [ 61]: bdc6ce91397361cb -Block 0027 [ 62]: 2af6bcc7c50e4dd6 -Block 0027 [ 63]: baa220accd7571f4 -Block 0027 [ 64]: 67bf2a70cfa75599 -Block 0027 [ 65]: 12c82e4f98bf4d0b -Block 0027 [ 66]: af71e967c1cc8df4 -Block 0027 [ 67]: f4206f65d9b7c473 -Block 0027 [ 68]: 8bc2092c48b31cde -Block 0027 [ 69]: e65ddd646bb2c19d -Block 0027 [ 70]: 50103a958fb49166 -Block 0027 [ 71]: 83b31b086cae24e6 -Block 0027 [ 72]: 5473c5ef931bfc84 -Block 0027 [ 73]: 1792f55944917f79 -Block 0027 [ 74]: b29afd1445e3f3da -Block 0027 [ 75]: 71e5ed744d9305d0 -Block 0027 [ 76]: 531d8b48dac7c1b5 -Block 0027 [ 77]: 6182e94a6d8e8c99 -Block 0027 [ 78]: 8ec7ccbcf3425332 -Block 0027 [ 79]: 8a8b0b42cdb32c0b -Block 0027 [ 80]: c954b01ae022a01b -Block 0027 [ 81]: ebb1bcd82007bb85 -Block 0027 [ 82]: 73258bca7db6c40b -Block 0027 [ 83]: 0e9b383bc02dc5fb -Block 0027 [ 84]: 9e59c6692cfec4c1 -Block 0027 [ 85]: e290fea01fd49775 -Block 0027 [ 86]: 923e9787df7984d7 -Block 0027 [ 87]: d1ea99210d949bc6 -Block 0027 [ 88]: 2c50effbf9b56f5e -Block 0027 [ 89]: 6e587a90ffdd68e1 -Block 0027 [ 90]: 87343959fce072eb -Block 0027 [ 91]: 11f3166951d1ca97 -Block 0027 [ 92]: 77c0e15bce984be2 -Block 0027 [ 93]: 1bc4e230071347d9 -Block 0027 [ 94]: 02c821b44f0e8ff5 -Block 0027 [ 95]: 332b6548f6127d3b -Block 0027 [ 96]: f4385541e6afbce1 -Block 0027 [ 97]: f72f5977b5c5c6ed -Block 0027 [ 98]: 2932386da331a141 -Block 0027 [ 99]: 8bef50405d899e47 -Block 0027 [100]: 497f6baa584fa6f9 -Block 0027 [101]: 540629cf431edb97 -Block 0027 [102]: 86c980507916f687 -Block 0027 [103]: 74449f7ba5e33318 -Block 0027 [104]: 8f97362cd57e0c7e -Block 0027 [105]: a960d461bb2d1840 -Block 0027 [106]: 9f4b252316d9eb51 -Block 0027 [107]: 7c3623df2d051b80 -Block 0027 [108]: 195db846daca6692 -Block 0027 [109]: 54d546f2b2f6d64f -Block 0027 [110]: 5a59d33f102ea788 -Block 0027 [111]: 8464766e62720d0f -Block 0027 [112]: 13ca8b80ec64e90a -Block 0027 [113]: 6d0463cb48d4c035 -Block 0027 [114]: 7341120a83334b45 -Block 0027 [115]: 3124dd6543338087 -Block 0027 [116]: e5b444665d7e7853 -Block 0027 [117]: 7ff3f1e5c61bc6f7 -Block 0027 [118]: 139e7af02f838f97 -Block 0027 [119]: 11c5d0670f45901f -Block 0027 [120]: 0438e6b6dcc28c34 -Block 0027 [121]: 3d55b635792ea59a -Block 0027 [122]: 9c2161a0ae2eaa67 -Block 0027 [123]: 27b1456aa822bfdd -Block 0027 [124]: 235c3e9fc5839c4d -Block 0027 [125]: 4994a10b355fc603 -Block 0027 [126]: 9dab69bbda9885dc -Block 0027 [127]: 85868e2f304840ac -Block 0028 [ 0]: ff442bbaec0ee8f2 -Block 0028 [ 1]: 397f0ac19369cbb3 -Block 0028 [ 2]: 5dd4e0f3c854a4c2 -Block 0028 [ 3]: c0e9fb62003e329a -Block 0028 [ 4]: 3966e8fa89276742 -Block 0028 [ 5]: 1dfaa18a331d0a14 -Block 0028 [ 6]: e60263a328c6b785 -Block 0028 [ 7]: 0ccde2de16d1e234 -Block 0028 [ 8]: fa1212c9101ac939 -Block 0028 [ 9]: d312a0ca719acb8f -Block 0028 [ 10]: d505268bcce72092 -Block 0028 [ 11]: bef86b8938654712 -Block 0028 [ 12]: f9390b6b536a6e28 -Block 0028 [ 13]: 73203397a11a9ddd -Block 0028 [ 14]: 10714c45564394d8 -Block 0028 [ 15]: c48a3f6f54b5c280 -Block 0028 [ 16]: 9bf38e51f6bb8d8b -Block 0028 [ 17]: 40b6c835892e9da5 -Block 0028 [ 18]: 40a35a05db774cf5 -Block 0028 [ 19]: f583ac8c5f9a8da0 -Block 0028 [ 20]: 210fbd1e5f784271 -Block 0028 [ 21]: 281c7be77ab1715a -Block 0028 [ 22]: 4ecdc7b648a5f4a5 -Block 0028 [ 23]: 3ac0587b9fa149f2 -Block 0028 [ 24]: a83fd6762492a590 -Block 0028 [ 25]: 46276e3adefa023e -Block 0028 [ 26]: 3062f71a0b5b4db5 -Block 0028 [ 27]: 84677cc6dbdd3349 -Block 0028 [ 28]: 6a0193f318f262c2 -Block 0028 [ 29]: 85d971f7bd2ec8cd -Block 0028 [ 30]: 5e68bdf696e1caa5 -Block 0028 [ 31]: ab98223d0341c285 -Block 0028 [ 32]: cc1f28d587841e1d -Block 0028 [ 33]: 4ae6c7d78d556bbb -Block 0028 [ 34]: 1545d67077aaa97d -Block 0028 [ 35]: 6d57554ad0404144 -Block 0028 [ 36]: 3ffd7708b53f09ca -Block 0028 [ 37]: 752ac75ed9699a94 -Block 0028 [ 38]: 2b6f9e2bddd506a5 -Block 0028 [ 39]: 2e321132e9ee175e -Block 0028 [ 40]: 47e2496c8a2d1acb -Block 0028 [ 41]: 131f351bbb209db8 -Block 0028 [ 42]: bf2711d86386f027 -Block 0028 [ 43]: d9ab2f3fc427bd6c -Block 0028 [ 44]: 7395c8a0ec3bb0bf -Block 0028 [ 45]: 9b19f55f5a1d9d0b -Block 0028 [ 46]: 4c4e28b31fe9efb7 -Block 0028 [ 47]: 766aaaf6d8e58ccf -Block 0028 [ 48]: 93d602cc6df95547 -Block 0028 [ 49]: 7e7e2d6242c92532 -Block 0028 [ 50]: 2c7aa2e34ee337aa -Block 0028 [ 51]: 191e910507ff58b6 -Block 0028 [ 52]: acca633ff55014da -Block 0028 [ 53]: 616a8c612b51f84e -Block 0028 [ 54]: d99ac9561c46bb1e -Block 0028 [ 55]: afa50925b3566378 -Block 0028 [ 56]: ff89aecada6379ef -Block 0028 [ 57]: 391c1fb4b920d1c7 -Block 0028 [ 58]: 8747bfa2ff324d12 -Block 0028 [ 59]: 5d94c03b2f8cdec8 -Block 0028 [ 60]: 770a3a05a35e362a -Block 0028 [ 61]: 6cb772bc4ec41ab1 -Block 0028 [ 62]: 0f2fdc055326e8ff -Block 0028 [ 63]: 3a3b11af14ab1e63 -Block 0028 [ 64]: 129d79776bd33219 -Block 0028 [ 65]: b0506f0d0c919e36 -Block 0028 [ 66]: e7bd117a660adeb6 -Block 0028 [ 67]: d52239a183fb01aa -Block 0028 [ 68]: 95ac54ca7f4f6bc8 -Block 0028 [ 69]: 5939379f77d8b3ac -Block 0028 [ 70]: 9bb720708cf0f6d7 -Block 0028 [ 71]: 7f1d34ae76d402b3 -Block 0028 [ 72]: 6131f850ff18bade -Block 0028 [ 73]: 913ca32a0b48d34c -Block 0028 [ 74]: f34c46ff0482e064 -Block 0028 [ 75]: f155996fe258d6e3 -Block 0028 [ 76]: a49b7f75efc8d9e2 -Block 0028 [ 77]: 7e9214452d5ee55a -Block 0028 [ 78]: 4d85e8f92b2a44d5 -Block 0028 [ 79]: c67caf477cc36edd -Block 0028 [ 80]: 1a6567ad2f3daf1a -Block 0028 [ 81]: d77d2ca3f37ceebb -Block 0028 [ 82]: 6288ae549a89055b -Block 0028 [ 83]: 4a312a353b646a62 -Block 0028 [ 84]: cd5a4b9c1d058e51 -Block 0028 [ 85]: fba7578feeb5a716 -Block 0028 [ 86]: b088c6cf681457e5 -Block 0028 [ 87]: 0077380f016bda71 -Block 0028 [ 88]: 8020ddaf0bcebea8 -Block 0028 [ 89]: 9a2b154741d54daa -Block 0028 [ 90]: 1afaa7054fbe8d96 -Block 0028 [ 91]: 369d42bdf4fa66a3 -Block 0028 [ 92]: 65015d7c318f5744 -Block 0028 [ 93]: f05df78b62c00b95 -Block 0028 [ 94]: dc35b5addb87f3df -Block 0028 [ 95]: 71200e2738215b49 -Block 0028 [ 96]: 516f9ee82c4bffe0 -Block 0028 [ 97]: 786d6486ac6b32de -Block 0028 [ 98]: 3fb790dcf1083d03 -Block 0028 [ 99]: bc1d23cf4407874a -Block 0028 [100]: 5c571426ac41afe6 -Block 0028 [101]: fc65a8a0efe11ef7 -Block 0028 [102]: 3fbe1cd81cb6a3ff -Block 0028 [103]: 8ced051324b69348 -Block 0028 [104]: c30adc965eb97c7f -Block 0028 [105]: 95833707bd2b9d35 -Block 0028 [106]: ec607ffa194d628d -Block 0028 [107]: 82d8039297f79a59 -Block 0028 [108]: 9be590f65f2bfe7e -Block 0028 [109]: 6ea8bc541ef1a809 -Block 0028 [110]: 468e8a5028e309ea -Block 0028 [111]: 066d539b5cb3fc45 -Block 0028 [112]: b122605c2994f6a4 -Block 0028 [113]: e0b0a4293d357abe -Block 0028 [114]: c298743cb1546c15 -Block 0028 [115]: d12112a3bbba462e -Block 0028 [116]: 25f23407d14bf00b -Block 0028 [117]: fffa4e098bd9fca5 -Block 0028 [118]: 536c67c6b18b611a -Block 0028 [119]: dd4446f13b0cdefe -Block 0028 [120]: c35483e17e62402c -Block 0028 [121]: 2b376940537bd1f1 -Block 0028 [122]: 79f526535649257d -Block 0028 [123]: 07fab5dcdf990636 -Block 0028 [124]: d7cd70af1e091a6f -Block 0028 [125]: 1ce601ca8e8f6ff3 -Block 0028 [126]: 38660d0a553e5df2 -Block 0028 [127]: b785a3accdab6680 -Block 0029 [ 0]: 8faf4b0ab37bb4cd -Block 0029 [ 1]: 3d1c1f7d3ae8182f -Block 0029 [ 2]: df466b571761c0c9 -Block 0029 [ 3]: 2d07bc62e41c89d7 -Block 0029 [ 4]: a09dd4ea9e230e19 -Block 0029 [ 5]: 809522a586d0c419 -Block 0029 [ 6]: e680b196e8046fc5 -Block 0029 [ 7]: eaa13b4649e0c0cb -Block 0029 [ 8]: 2d3d06aa5b8edb28 -Block 0029 [ 9]: 7865ed89e33159be -Block 0029 [ 10]: 485224fbeea22d0f -Block 0029 [ 11]: a65a5f6540b240ca -Block 0029 [ 12]: 348125cd96e1f785 -Block 0029 [ 13]: aeeb91f724f6ec50 -Block 0029 [ 14]: 3f90ece311348fb9 -Block 0029 [ 15]: 0e46859f10cd1b23 -Block 0029 [ 16]: 3d8b6edd19045b53 -Block 0029 [ 17]: b6031066c4cba9da -Block 0029 [ 18]: 0dc8d49a7a957e8a -Block 0029 [ 19]: 6d1d8f8bbd92de25 -Block 0029 [ 20]: 853872816754a44d -Block 0029 [ 21]: d53c1cd854971f4d -Block 0029 [ 22]: d966f16ded474f1b -Block 0029 [ 23]: 45ce0b544d3e9b88 -Block 0029 [ 24]: 4c3a7aa58d405831 -Block 0029 [ 25]: 7e63d3e7065f17ae -Block 0029 [ 26]: 93372f660d53d0a7 -Block 0029 [ 27]: 4800a50d86bbe06d -Block 0029 [ 28]: 966a7de30936c0cc -Block 0029 [ 29]: 089a6729adb5db54 -Block 0029 [ 30]: 21f00018ba694b98 -Block 0029 [ 31]: c5c5612e86e9b676 -Block 0029 [ 32]: 30fda4daea44cdf0 -Block 0029 [ 33]: 884216b9e14f830f -Block 0029 [ 34]: f24d8260cb07fd49 -Block 0029 [ 35]: 0cc3a891ed3fd8ea -Block 0029 [ 36]: e02856a4a91db08f -Block 0029 [ 37]: ae2c54f2ccf5dc1b -Block 0029 [ 38]: 9e7ef199c3e37221 -Block 0029 [ 39]: e1cb74d4be169e03 -Block 0029 [ 40]: 51110481733e33eb -Block 0029 [ 41]: 64b33cc98342c30a -Block 0029 [ 42]: 50f64610177d09f6 -Block 0029 [ 43]: 49012867e90a48a3 -Block 0029 [ 44]: 55ea2c40bb9c7f20 -Block 0029 [ 45]: fa784ee9cbfb8d9f -Block 0029 [ 46]: bb1e86d607452f97 -Block 0029 [ 47]: da191adeae7a36c9 -Block 0029 [ 48]: c1f8675f0c312429 -Block 0029 [ 49]: 3b7517f906d8f8f3 -Block 0029 [ 50]: 71f698893dd93e57 -Block 0029 [ 51]: 239bab7f2539d70f -Block 0029 [ 52]: 3dbe941ce0653527 -Block 0029 [ 53]: 29938a8b81850f5c -Block 0029 [ 54]: bfb1c6cf4fce7c51 -Block 0029 [ 55]: b706d0ee9f81ad1e -Block 0029 [ 56]: 7d017ae67cc847d1 -Block 0029 [ 57]: 552b93624984511c -Block 0029 [ 58]: 867243a9d6d82053 -Block 0029 [ 59]: 456c49a67ef9036f -Block 0029 [ 60]: 0f6f4ca58cb23d3f -Block 0029 [ 61]: bd24cf3c5418ca87 -Block 0029 [ 62]: 7be8c1d1dc24f928 -Block 0029 [ 63]: 0ca043330b7e539e -Block 0029 [ 64]: b3ba1f6453f7bcd5 -Block 0029 [ 65]: ca549545a3d2ec8e -Block 0029 [ 66]: fcadea90e41cc1b8 -Block 0029 [ 67]: 602c84cfa6b20f66 -Block 0029 [ 68]: 5cdfbc4ae7c2c6b1 -Block 0029 [ 69]: 31f589f75d3749ef -Block 0029 [ 70]: 3e6e3d004ad60714 -Block 0029 [ 71]: 2dae53f27b8158ef -Block 0029 [ 72]: fd1e3b5a70d52eae -Block 0029 [ 73]: 6371016489f99170 -Block 0029 [ 74]: a6b8c488806d37c6 -Block 0029 [ 75]: 8831329cde00a7a7 -Block 0029 [ 76]: b36df29447c12794 -Block 0029 [ 77]: 852a80858f9d101f -Block 0029 [ 78]: 3c84dcfdecd46fff -Block 0029 [ 79]: 5b7dac0a8ffdd58a -Block 0029 [ 80]: d9dbe926eeb4fa23 -Block 0029 [ 81]: 7e6830e42b1ecaf0 -Block 0029 [ 82]: b40dbaa69df1e15b -Block 0029 [ 83]: 7f7d8f4fb9120fda -Block 0029 [ 84]: 26ed970120722676 -Block 0029 [ 85]: b4ec448d3b153327 -Block 0029 [ 86]: 75a0b7d6ceffa3d4 -Block 0029 [ 87]: efe467bc3841c69e -Block 0029 [ 88]: c0d4ffcf904aaa7e -Block 0029 [ 89]: e6bcb7717fc24d72 -Block 0029 [ 90]: ca0ebcf7b8f9fa08 -Block 0029 [ 91]: b082f39ade7a1219 -Block 0029 [ 92]: e23169e8f33a0b67 -Block 0029 [ 93]: b17ac3ff204b5cce -Block 0029 [ 94]: f4d05e9fa168d522 -Block 0029 [ 95]: b88db25f2938a3ab -Block 0029 [ 96]: 9c8ad5c2a2fecb89 -Block 0029 [ 97]: b642e3e932b49b6e -Block 0029 [ 98]: d52639e55f40db15 -Block 0029 [ 99]: ca80042bf923e26a -Block 0029 [100]: a451014b26a16f1e -Block 0029 [101]: 43dcc2aacc9c99da -Block 0029 [102]: d5496dfeb81f585b -Block 0029 [103]: d402ccce0025ff31 -Block 0029 [104]: b5dbb5516ddad03e -Block 0029 [105]: 27e1f84c7fd2e9a0 -Block 0029 [106]: 628bd072e84442c5 -Block 0029 [107]: b1b9154a8224f4be -Block 0029 [108]: 6bfdae5812e1c6f8 -Block 0029 [109]: 2fcae504e8132505 -Block 0029 [110]: 756911bf961d510e -Block 0029 [111]: 13e9e2d50966b88a -Block 0029 [112]: e6f6e771ba4662a5 -Block 0029 [113]: 869c3193f5686117 -Block 0029 [114]: 71e2fe403f536bf0 -Block 0029 [115]: 2c24c13eeafd203b -Block 0029 [116]: bc359aa26301f725 -Block 0029 [117]: 9a24bbad0f96c694 -Block 0029 [118]: ae363466f27f1397 -Block 0029 [119]: c835914f46bb961c -Block 0029 [120]: a32ebda4688b2687 -Block 0029 [121]: 6def7ad00976a80d -Block 0029 [122]: ec5057a1e29664ed -Block 0029 [123]: cb565f55f678f418 -Block 0029 [124]: 5908463419437b6d -Block 0029 [125]: 3f809409ee15556e -Block 0029 [126]: 6d2dbca4380dc585 -Block 0029 [127]: d08c46fc3a6806db -Block 0030 [ 0]: 2673e74f55281e8d -Block 0030 [ 1]: 6fe90eb7457da8ae -Block 0030 [ 2]: 540e4b56d72a5f0b -Block 0030 [ 3]: b7a76d0edc47aeea -Block 0030 [ 4]: 024292cf39046e35 -Block 0030 [ 5]: 30f439895732b133 -Block 0030 [ 6]: e61425415048bb34 -Block 0030 [ 7]: 609d4114a8c13fb7 -Block 0030 [ 8]: acafdbf6dfc05f2e -Block 0030 [ 9]: 1a2ae59a9c37f819 -Block 0030 [ 10]: c15aca088d429d16 -Block 0030 [ 11]: be74600a4a873ed0 -Block 0030 [ 12]: efd585ebe4080021 -Block 0030 [ 13]: b97042c53760080e -Block 0030 [ 14]: 74752a5c6626fbdf -Block 0030 [ 15]: 8dd34e1e8ac34303 -Block 0030 [ 16]: 6028d90d9c077f4b -Block 0030 [ 17]: 9fb5e7dda12ca4c4 -Block 0030 [ 18]: 2deecea6e979e693 -Block 0030 [ 19]: 54137a747abb3e6e -Block 0030 [ 20]: 8525896cc37fefc9 -Block 0030 [ 21]: 22819e91948ebe28 -Block 0030 [ 22]: 0c84b4ca88859926 -Block 0030 [ 23]: 7b1873fb531b24ae -Block 0030 [ 24]: a31ebd1169530f49 -Block 0030 [ 25]: 7cfe17083df06b3f -Block 0030 [ 26]: fb57eaec825a6b16 -Block 0030 [ 27]: 790885f4e350d418 -Block 0030 [ 28]: 7c9f69ffc0968483 -Block 0030 [ 29]: c27370a8319f0158 -Block 0030 [ 30]: 5a3f9b209a6e9c3c -Block 0030 [ 31]: 0de0b424b3927314 -Block 0030 [ 32]: 54398b47ec9fe8d3 -Block 0030 [ 33]: 103736f4a647d8fb -Block 0030 [ 34]: 2404fa93a1700ff0 -Block 0030 [ 35]: c57374a224da2b3c -Block 0030 [ 36]: e5cf61193ed5de57 -Block 0030 [ 37]: 5ab77e854c810cb9 -Block 0030 [ 38]: d8311483179c4a3c -Block 0030 [ 39]: 1a20963c1b6c2597 -Block 0030 [ 40]: faa542e8b73255b7 -Block 0030 [ 41]: 848f2ca099a33368 -Block 0030 [ 42]: 5510cd734cb3bc9f -Block 0030 [ 43]: 4a929bf87c2820c4 -Block 0030 [ 44]: 681ae77edf7bf1de -Block 0030 [ 45]: 6fae639ea38d29a2 -Block 0030 [ 46]: 616bacb8339d0cf7 -Block 0030 [ 47]: dbcb34373a210bed -Block 0030 [ 48]: 8032a3c8da22217f -Block 0030 [ 49]: 30701adaded4ce5b -Block 0030 [ 50]: a30850d70ad550db -Block 0030 [ 51]: cf3b45972d568ef6 -Block 0030 [ 52]: 78c85c49a224b205 -Block 0030 [ 53]: 5bc633598ccfbde3 -Block 0030 [ 54]: de6b2f772f1a0234 -Block 0030 [ 55]: 201b55b767e9b86b -Block 0030 [ 56]: 823a989a1765c637 -Block 0030 [ 57]: 2579a1ed7cd1e2ad -Block 0030 [ 58]: 03bfc58ff6722fb1 -Block 0030 [ 59]: a503f8fa679b0ad4 -Block 0030 [ 60]: 1b57b1af8e2f45a4 -Block 0030 [ 61]: 57fc7f7bcac0cacf -Block 0030 [ 62]: 7d1affd4927b5b9f -Block 0030 [ 63]: 901f27aaaf0b1abe -Block 0030 [ 64]: 5d8dcf10f365ec31 -Block 0030 [ 65]: 882189aefb46d03a -Block 0030 [ 66]: 2fe1601dbac7830f -Block 0030 [ 67]: 98b84984fd00714c -Block 0030 [ 68]: ae6d2f6efec14c11 -Block 0030 [ 69]: c9152a3abe0d1be6 -Block 0030 [ 70]: 77b7885fefb60ee8 -Block 0030 [ 71]: d3c839e65271a2fd -Block 0030 [ 72]: 295928eb632c919a -Block 0030 [ 73]: 28b2e3a4380ff380 -Block 0030 [ 74]: 979270a7e813d4ba -Block 0030 [ 75]: d9c31f525b9c8fe9 -Block 0030 [ 76]: c0d9d5975ad775b7 -Block 0030 [ 77]: 4bd3e7e7e29840b7 -Block 0030 [ 78]: e3bc3d0cfb465fd0 -Block 0030 [ 79]: 357557042ae99c1e -Block 0030 [ 80]: fbf15a3094fd1f91 -Block 0030 [ 81]: d1309d082bff6e72 -Block 0030 [ 82]: 88bac06cb9b4c7d3 -Block 0030 [ 83]: 7ddaeea4af589570 -Block 0030 [ 84]: 97558e43d7835daf -Block 0030 [ 85]: 0f317701853adbff -Block 0030 [ 86]: 9a7c0f2797b184b7 -Block 0030 [ 87]: 7e3bfe618a2ba655 -Block 0030 [ 88]: ace633529d25fab6 -Block 0030 [ 89]: e99211ba3fa2be8c -Block 0030 [ 90]: 867f7095ef7954b2 -Block 0030 [ 91]: 0fe750442983240e -Block 0030 [ 92]: 0f5253b35adc5e65 -Block 0030 [ 93]: f30a0002010b999c -Block 0030 [ 94]: c6154cda1a9af668 -Block 0030 [ 95]: c80c8afb80ed36dc -Block 0030 [ 96]: 273c700a3c4c50ec -Block 0030 [ 97]: 05f63b79716502f5 -Block 0030 [ 98]: a73664fb04fa538e -Block 0030 [ 99]: 341d1c9dc62af038 -Block 0030 [100]: 797a07a3c99fbf9d -Block 0030 [101]: 2775348e9153e991 -Block 0030 [102]: ec3239e82e480c18 -Block 0030 [103]: 3f14bf2f3a5f1137 -Block 0030 [104]: 3f797d11b5b2fa57 -Block 0030 [105]: e619c6d404875fc1 -Block 0030 [106]: 7fd919b61ce76c11 -Block 0030 [107]: 4fb5d42ca0d8d9b4 -Block 0030 [108]: 0839522fcda3518d -Block 0030 [109]: 48bebcc9957a352a -Block 0030 [110]: d856936973f9cd43 -Block 0030 [111]: ef65350eb285905e -Block 0030 [112]: 5ca32ecda2095ead -Block 0030 [113]: 395ebd8fd16af2b0 -Block 0030 [114]: 65257cb1dce18e85 -Block 0030 [115]: ae3b5c17f308d983 -Block 0030 [116]: f6b14bfd5d90c66b -Block 0030 [117]: 828b08f8a6ee1cd6 -Block 0030 [118]: af1a44ade6f2027b -Block 0030 [119]: 4918b320ae98582b -Block 0030 [120]: 15fc93c969d70364 -Block 0030 [121]: 1cc032eb533bf386 -Block 0030 [122]: 2c58b2dc22266e02 -Block 0030 [123]: e422db8d513b6687 -Block 0030 [124]: f437358d28f6d6f3 -Block 0030 [125]: 409139bd1af4c65a -Block 0030 [126]: 4e52aaa331e8b9a5 -Block 0030 [127]: 8c88340b9e5efd30 -Block 0031 [ 0]: 56b541595dcc6fb1 -Block 0031 [ 1]: 607ad882fb51aefb -Block 0031 [ 2]: 14debd64740fb455 -Block 0031 [ 3]: 26a1486601ba4014 -Block 0031 [ 4]: 6e226704fadf9b3a -Block 0031 [ 5]: 7071e97c033eecf0 -Block 0031 [ 6]: a48434d1a82936d2 -Block 0031 [ 7]: 447c72527f72e3e3 -Block 0031 [ 8]: 1348b0bc1c9707ba -Block 0031 [ 9]: eace622a944fabbe -Block 0031 [ 10]: 353ed00f73ca5d9e -Block 0031 [ 11]: a144765ce7ed48fa -Block 0031 [ 12]: 646405d2ec92b8d7 -Block 0031 [ 13]: c1373d2221f79859 -Block 0031 [ 14]: e934197d55225eaa -Block 0031 [ 15]: 80ba317a25065d33 -Block 0031 [ 16]: 33697268b6033e42 -Block 0031 [ 17]: e92077cb22a36918 -Block 0031 [ 18]: 1809cf4caffa039d -Block 0031 [ 19]: f83303c5920dfcc5 -Block 0031 [ 20]: f736cbeefc9ce798 -Block 0031 [ 21]: 3b54d82b41b098e0 -Block 0031 [ 22]: 335107c0a6b0c3d1 -Block 0031 [ 23]: 7a4df775b24a3cd6 -Block 0031 [ 24]: 25f851e8f3bd76d3 -Block 0031 [ 25]: b9d70e49f5750a56 -Block 0031 [ 26]: ae86aeb12f2305d7 -Block 0031 [ 27]: 12d00c57605652d8 -Block 0031 [ 28]: 44b7e9c35a83480a -Block 0031 [ 29]: 35cf1a769379beea -Block 0031 [ 30]: 0e3a103e7f95bb7e -Block 0031 [ 31]: 17023e6b0b5d90b8 -Block 0031 [ 32]: 2460dfb3f3d65760 -Block 0031 [ 33]: 1835e0a086678329 -Block 0031 [ 34]: 15e390201680a99f -Block 0031 [ 35]: e754ce9be5f9cd0c -Block 0031 [ 36]: b5cb81de27f762b5 -Block 0031 [ 37]: 738a4e685c3e6133 -Block 0031 [ 38]: bae8a4bbffd88861 -Block 0031 [ 39]: 38adfc6c4f01cace -Block 0031 [ 40]: ff79ca79d67eb124 -Block 0031 [ 41]: a4865b7a5ec5e9cb -Block 0031 [ 42]: fc64a20ca7eaa3f1 -Block 0031 [ 43]: 8eb112bdcab799a4 -Block 0031 [ 44]: 96764171a7ac544b -Block 0031 [ 45]: f0a6e23ac5949f6c -Block 0031 [ 46]: 79eae6371346533b -Block 0031 [ 47]: e4d4efb218c6aa83 -Block 0031 [ 48]: 2104d0468931261a -Block 0031 [ 49]: 4247e67e1ace7390 -Block 0031 [ 50]: 45d7d7a54dabbd76 -Block 0031 [ 51]: 4fd1267dffc9b30e -Block 0031 [ 52]: 69d51e78aa8db238 -Block 0031 [ 53]: 4329981502b3079a -Block 0031 [ 54]: a730594950e72400 -Block 0031 [ 55]: 3092c8aebb21060d -Block 0031 [ 56]: d5b8b21a483df5f7 -Block 0031 [ 57]: 6d38f87b8f847e91 -Block 0031 [ 58]: 7a258124daedb431 -Block 0031 [ 59]: 93a907049ee66c94 -Block 0031 [ 60]: 494b9730d1836f3c -Block 0031 [ 61]: 9114899e4a54157c -Block 0031 [ 62]: 44f5b117a277c5d1 -Block 0031 [ 63]: ddbb3504c7504716 -Block 0031 [ 64]: 44a033f4e223796c -Block 0031 [ 65]: 15cb2a4b270cef17 -Block 0031 [ 66]: 04b33e557ed91752 -Block 0031 [ 67]: e19d95ce702d48ca -Block 0031 [ 68]: 562375617142ee07 -Block 0031 [ 69]: 5a3bd82c7c20573f -Block 0031 [ 70]: 226cc32237617958 -Block 0031 [ 71]: f9e57d96d95d4758 -Block 0031 [ 72]: f2a9a8735160284d -Block 0031 [ 73]: ab7f9feb2455068f -Block 0031 [ 74]: c8a8382e34dc0830 -Block 0031 [ 75]: 8408be4da2bfdb2f -Block 0031 [ 76]: 6b917886a8e3169a -Block 0031 [ 77]: 739213ba742858f5 -Block 0031 [ 78]: ea55bddc54068058 -Block 0031 [ 79]: b5cb8166dd28d3a4 -Block 0031 [ 80]: a3aa143acf025806 -Block 0031 [ 81]: 3b2ee2b11caeea07 -Block 0031 [ 82]: 30d6c892ab7437e7 -Block 0031 [ 83]: 3ff9e26a35996936 -Block 0031 [ 84]: be4e56b1184d4dce -Block 0031 [ 85]: b6b0e4754d83366c -Block 0031 [ 86]: 2588d4680fcffa21 -Block 0031 [ 87]: 328dba1abda66139 -Block 0031 [ 88]: d4af6ec06461e8b2 -Block 0031 [ 89]: d123dea841375fe7 -Block 0031 [ 90]: e6492ccb67b26dd4 -Block 0031 [ 91]: 0906e849a240d13b -Block 0031 [ 92]: 0572c95c7c1d8032 -Block 0031 [ 93]: 4292844af9422a9e -Block 0031 [ 94]: aa719cd495649d5a -Block 0031 [ 95]: 718dd218c44e6a0b -Block 0031 [ 96]: fd114114a3789893 -Block 0031 [ 97]: 8c809ab7f96a4627 -Block 0031 [ 98]: 32c05157969648d3 -Block 0031 [ 99]: 76157a8d56ae11c6 -Block 0031 [100]: ca3d325fbf391e9a -Block 0031 [101]: 3af3fd2c41d20c1c -Block 0031 [102]: f903178e5dc9820b -Block 0031 [103]: 4f4d44b8f166f14b -Block 0031 [104]: 4a95f1cea33d5d91 -Block 0031 [105]: 23070893e589cbf9 -Block 0031 [106]: 4d25eed14ef764d4 -Block 0031 [107]: 0f3c464dbdf7cd1d -Block 0031 [108]: 8e3fef7b872504a5 -Block 0031 [109]: 113fe6e452255e08 -Block 0031 [110]: e9ec8f20a1e13b2a -Block 0031 [111]: 5b6ae06cea1b26d8 -Block 0031 [112]: b644922c1917bc5c -Block 0031 [113]: 1c760a6042dae15e -Block 0031 [114]: d5faba8f84e17a16 -Block 0031 [115]: 5401a69a243aa03e -Block 0031 [116]: 11ec3f83197a79e4 -Block 0031 [117]: 10cd56b78d507a76 -Block 0031 [118]: 4635cae680355717 -Block 0031 [119]: 2686da0dc5e13c02 -Block 0031 [120]: c9587e5ee5d0ed17 -Block 0031 [121]: cdb806b4f535e84a -Block 0031 [122]: 1e58ef0ea43a972f -Block 0031 [123]: 7af03e7afd1ff2e4 -Block 0031 [124]: 7f9f6d7b2f0da6f5 -Block 0031 [125]: 9f01140fa64778e6 -Block 0031 [126]: 3e66dc822c734438 -Block 0031 [127]: b3e7ac8ca5ed6ed9 -Tag: b6 46 15 f0 77 89 b6 6b 64 5b 67 ee 9e d3 b3 77 ae 35 0b 6b fc bb 0f c9 51 41 ea 8f 32 26 13 c0 diff --git a/pkg/urcrypt/argon2/kats/argon2id_v16.shasum b/pkg/urcrypt/argon2/kats/argon2id_v16.shasum deleted file mode 100644 index 33f1f4010..000000000 --- a/pkg/urcrypt/argon2/kats/argon2id_v16.shasum +++ /dev/null @@ -1 +0,0 @@ -680774be1d3ad2e74bbc56ee715dd6eb97a58279bf22edc57d00e840ca1ae469 argon2id_v16 diff --git a/pkg/urcrypt/argon2/kats/check-sums.ps1 b/pkg/urcrypt/argon2/kats/check-sums.ps1 deleted file mode 100644 index 36307bd7f..000000000 --- a/pkg/urcrypt/argon2/kats/check-sums.ps1 +++ /dev/null @@ -1,42 +0,0 @@ -Set-Variable tempfile -option Constant -value "tempfile" - -function hash($path) { - $fullPath = Resolve-Path $path - $hash = new-object -TypeName System.Security.Cryptography.SHA256CryptoServiceProvider - - $contents = [IO.File]::ReadAllText($fullPath) -replace "`r`n?", "`n" - # create UTF-8 encoding without signature - $utf8 = New-Object System.Text.UTF8Encoding $false - # write the text back - [IO.File]::WriteAllText($tempfile, $contents, $utf8) - - $file = [System.IO.File]::Open($tempfile,[System.IO.Filemode]::Open, [System.IO.FileAccess]::Read) - $result = [System.BitConverter]::ToString($hash.ComputeHash($file)) - $file.Dispose() - - if (Test-Path $tempfile) { - Remove-Item $tempfile - } - - return $result -} - -function main() { - $files = $(Get-ChildItem * | Where-Object { $_.Name -match '^[a-z2]*(_v)?[0-9]*$' } | select -ExpandProperty name) - - foreach ($file in $files) { - $new = $(hash $file).replace("-","") - $new = $new.ToLower() - - $old=$(Get-Content $file".shasum") - $old = $old.Substring(0, $old.IndexOf(" ")) - - if ($new -eq $old) { - Write-Host $file "`tOK" - } else { - Write-Host $file "`tERROR" - } - } -} - -main diff --git a/pkg/urcrypt/argon2/kats/check-sums.sh b/pkg/urcrypt/argon2/kats/check-sums.sh deleted file mode 100755 index b297a162e..000000000 --- a/pkg/urcrypt/argon2/kats/check-sums.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -for file in `ls | grep '^[a-z2]*\(_v\)\?[0-9]*$' | xargs` -do - new=`shasum -a 256 $file` - old=`cat $file.shasum` - if [ "$new" = "$old" ] - then - echo $file "\t" OK - else - echo $file "\t" ERROR - fi -done diff --git a/pkg/urcrypt/argon2/kats/test.ps1 b/pkg/urcrypt/argon2/kats/test.ps1 deleted file mode 100644 index d5db5b6ba..000000000 --- a/pkg/urcrypt/argon2/kats/test.ps1 +++ /dev/null @@ -1,50 +0,0 @@ -$ErrorActionPreference = "Stop" - -Set-Variable tempfile -option Constant -value "tempfile" - -function CompareFiles($f1, $f2, $i) { - $f1_content = $(Get-Content $f1) - $f2_content = $(Get-Content $f2) - - if (Compare-Object $f1_content $f2_content) { - Write-Host -NoNewline "ERROR" - exit $i - } else { - Write-Host -NoNewline "OK" - } -} - -function main() { - $i = 0 - foreach ($opt in @("Ref", "Opt")) { - Write-Output "$opt" - - foreach ($version in @(16, 19)) { - foreach ($type in @("i", "d", "id")) { - $i++ - - if ("Ref" -eq $opt) { - vs2015\build\Argon2RefGenKAT.exe $type $version > $tempfile - } else { - vs2015\build\Argon2OptGenKAT.exe $type $version > $tempfile - } - - if (19 -eq $version) { - $kats = "kats\argon2" + $type - } else { - $kats = "kats\argon2" + $type + "_v" + $version - } - - Write-Host -NoNewline "Argon2$type v=$version : " - CompareFiles $tempfile $kats $i - Write-Output "" - } - } - } - - if (Test-Path $tempfile) { - Remove-Item $tempfile - } -} - -main diff --git a/pkg/urcrypt/argon2/kats/test.sh b/pkg/urcrypt/argon2/kats/test.sh deleted file mode 100755 index b32097546..000000000 --- a/pkg/urcrypt/argon2/kats/test.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh - -for opttest in "" "OPTTEST=1" -do - if [ "" = "$opttest" ] - then - printf "Default build\n" - else - printf "Force OPTTEST=1\n" - fi - - make genkat $opttest > /dev/null - if [ $? -ne 0 ] - then - exit $? - fi - - i=0 - for version in 16 19 - do - for type in i d id - do - i=$(($i+1)) - - printf "argon2$type v=$version: " - - if [ 19 -eq $version ] - then - kats="kats/argon2"$type - else - kats="kats/argon2"$type"_v"$version - fi - - ./genkat $type $version > tmp - if diff tmp $kats - then - printf "OK" - else - printf "ERROR" - exit $i - fi - printf "\n" - done - done -done - -rm -f tmp - -exit 0 diff --git a/pkg/urcrypt/argon2/latex/IEEEtran.cls b/pkg/urcrypt/argon2/latex/IEEEtran.cls deleted file mode 100644 index 8d2b1c647..000000000 --- a/pkg/urcrypt/argon2/latex/IEEEtran.cls +++ /dev/null @@ -1,6347 +0,0 @@ -%% -%% IEEEtran.cls 2015/08/26 version V1.8b -%% -%% This is the IEEEtran LaTeX class for authors of the Institute of -%% Electrical and Electronics Engineers (IEEE) Transactions journals and -%% conferences. -%% -%% Support sites: -%% http://www.michaelshell.org/tex/ieeetran/ -%% http://www.ctan.org/pkg/ieeetran -%% and -%% http://www.ieee.org/ -%% -%% Based on the original 1993 IEEEtran.cls, but with many bug fixes -%% and enhancements (from both JVH and MDS) over the 1996/7 version. -%% -%% -%% Contributors: -%% Gerry Murray (1993), Silvano Balemi (1993), -%% Jon Dixon (1996), Peter N"uchter (1996), -%% Juergen von Hagen (2000), and Michael Shell (2001-2014) -%% -%% -%% Copyright (c) 1993-2000 by Gerry Murray, Silvano Balemi, -%% Jon Dixon, Peter N"uchter, -%% Juergen von Hagen -%% and -%% Copyright (c) 2001-2015 by Michael Shell -%% -%% Current maintainer (V1.3 to V1.8b): Michael Shell -%% See: -%% http://www.michaelshell.org/ -%% for current contact information. -%% -%% Special thanks to Peter Wilson (CUA) and Donald Arseneau -%% for allowing the inclusion of the \@ifmtarg command -%% from their ifmtarg LaTeX package. -%% -%%************************************************************************* -%% Legal Notice: -%% This code is offered as-is without any warranty either expressed or -%% implied; without even the implied warranty of MERCHANTABILITY or -%% FITNESS FOR A PARTICULAR PURPOSE! -%% User assumes all risk. -%% In no event shall the IEEE or any contributor to this code be liable for -%% any damages or losses, including, but not limited to, incidental, -%% consequential, or any other damages, resulting from the use or misuse -%% of any information contained here. -%% -%% All comments are the opinions of their respective authors and are not -%% necessarily endorsed by the IEEE. -%% -%% This work is distributed under the LaTeX Project Public License (LPPL) -%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, -%% distributed and modified. A copy of the LPPL, version 1.3, is included -%% in the base LaTeX documentation of all distributions of LaTeX released -%% 2003/12/01 or later. -%% Retain all contribution notices and credits. -%% ** Modified files should be clearly indicated as such, including ** -%% ** renaming them and changing author support contact information. ** -%% -%% File list of work: IEEEtran.cls, IEEEtran_HOWTO.pdf, bare_adv.tex, -%% bare_conf.tex, bare_jrnl.tex, bare_conf_compsoc.tex, -%% bare_jrnl_compsoc.tex -%% -%% Major changes to the user interface should be indicated by an -%% increase in the version numbers. If a version is a beta, it will -%% be indicated with a BETA suffix, i.e., 1.4 BETA. -%% Small changes can be indicated by appending letters to the version -%% such as "IEEEtran_v14a.cls". -%% In all cases, \Providesclass, any \typeout messages to the user, -%% \IEEEtransversionmajor and \IEEEtransversionminor must reflect the -%% correct version information. -%% The changes should also be documented via source comments. -%%************************************************************************* -%% -% -% Available class options -% e.g., \documentclass[10pt,conference]{IEEEtran} -% -% *** choose only one from each category *** -% -% 9pt, 10pt, 11pt, 12pt -% Sets normal font size. The default is 10pt. -% -% conference, journal, technote, peerreview, peerreviewca -% determines format mode - conference papers, journal papers, -% correspondence papers (technotes), or peer review papers. The user -% should also select 9pt when using technote. peerreview is like -% journal mode, but provides for a single-column "cover" title page for -% anonymous peer review. The paper title (without the author names) is -% repeated at the top of the page after the cover page. For peer review -% papers, the \IEEEpeerreviewmaketitle command must be executed (will -% automatically be ignored for non-peerreview modes) at the place the -% cover page is to end, usually just after the abstract (keywords are -% not normally used with peer review papers). peerreviewca is like -% peerreview, but allows the author names to be entered and formatted -% as with conference mode so that author affiliation and contact -% information can be easily seen on the cover page. -% The default is journal. -% -% draft, draftcls, draftclsnofoot, final -% determines if paper is formatted as a widely spaced draft (for -% handwritten editor comments) or as a properly typeset final version. -% draftcls restricts draft mode to the class file while all other LaTeX -% packages (i.e., \usepackage{graphicx}) will behave as final - allows -% for a draft paper with visible figures, etc. draftclsnofoot is like -% draftcls, but does not display the date and the word "DRAFT" at the foot -% of the pages. If using one of the draft modes, the user will probably -% also want to select onecolumn. -% The default is final. -% -% letterpaper, a4paper, cspaper -% determines paper size: 8.5in X 11in, 210mm X 297mm or 7.875in X 10.75in. -% Changing the paper size in the standard journal and conference modes -% will not alter the typesetting of the document - only the margins will -% be affected. In particular, documents using the a4paper option will -% have reduced side margins (A4 is narrower than US letter) and a longer -% bottom margin (A4 is longer than US letter). For both cases, the top -% margins will be the same and the text will be horizontally centered. -% For the compsoc conference and draft modes, it is the margins that will -% remain constant, and thus the text area size will vary, with changes in -% the paper size. -% The cspaper option is the special ``trim'' paper size (7.875in x 10.75in) -% used in the actual publication of Computer Society journals. Under -% compsoc journal mode, this option does not alter the typesetting of the -% document. Authors should invoke the cspaper option only if requested to -% do so by the editors of the specific journal they are submitting to. -% For final submission to the IEEE, authors should generally use US letter -% (8.5 X 11in) paper unless otherwise instructed. Note that authors should -% ensure that all post-processing (ps, pdf, etc.) uses the same paper -% specificiation as the .tex document. Problems here are by far the number -% one reason for incorrect margins. IEEEtran will automatically set the -% default paper size under pdflatex (without requiring any change to -% pdftex.cfg), so this issue is more important to dvips users. Fix -% config.ps, config.pdf, or ~/.dvipsrc for dvips, or use the -% dvips -t papersize option instead as needed. For the cspaper option, -% the corresponding dvips paper name is "ieeecs". -% See the testflow documentation -% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/testflow -% for more details on dvips paper size configuration. -% The default is letterpaper. -% -% oneside, twoside -% determines if layout follows single sided or two sided (duplex) -% printing. The only notable change is with the headings at the top of -% the pages. -% The default is oneside. -% -% onecolumn, twocolumn -% determines if text is organized into one or two columns per page. One -% column mode is usually used only with draft papers. -% The default is twocolumn. -% -% comsoc, compsoc, transmag -% Use the format of the IEEE Communications Society, IEEE Computer Society -% or IEEE Transactions on Magnetics, respectively. -% -% romanappendices -% Use the "Appendix I" convention when numbering appendices. IEEEtran.cls -% now defaults to Alpha "Appendix A" convention - the opposite of what -% v1.6b and earlier did. -% -% captionsoff -% disables the display of the figure/table captions. Some IEEE journals -% request that captions be removed and figures/tables be put on pages -% of their own at the end of an initial paper submission. The endfloat -% package can be used with this class option to achieve this format. -% -% nofonttune -% turns off tuning of the font interword spacing. Maybe useful to those -% not using the standard Times fonts or for those who have already "tuned" -% their fonts. -% The default is to enable IEEEtran to tune font parameters. -% -% -%---------- -% Available CLASSINPUTs provided (all are macros unless otherwise noted): -% \CLASSINPUTbaselinestretch -% \CLASSINPUTinnersidemargin -% \CLASSINPUToutersidemargin -% \CLASSINPUTtoptextmargin -% \CLASSINPUTbottomtextmargin -% -% Available CLASSINFOs provided: -% \ifCLASSINFOpdf (TeX if conditional) -% \CLASSINFOpaperwidth (macro) -% \CLASSINFOpaperheight (macro) -% \CLASSINFOnormalsizebaselineskip (length) -% \CLASSINFOnormalsizeunitybaselineskip (length) -% -% Available CLASSOPTIONs provided: -% all class option flags (TeX if conditionals) unless otherwise noted, -% e.g., \ifCLASSOPTIONcaptionsoff -% point size options provided as a single macro: -% \CLASSOPTIONpt -% which will be defined as 9, 10, 11, or 12 depending on the document's -% normalsize point size. -% also, class option peerreviewca implies the use of class option peerreview -% and classoption draft implies the use of class option draftcls - - - - - -\ProvidesClass{IEEEtran}[2015/08/26 V1.8b by Michael Shell] -\typeout{-- See the "IEEEtran_HOWTO" manual for usage information.} -\typeout{-- http://www.michaelshell.org/tex/ieeetran/} -\NeedsTeXFormat{LaTeX2e} - -% IEEEtran.cls version numbers, provided as of V1.3 -% These values serve as a way a .tex file can -% determine if the new features are provided. -% The version number of this IEEEtrans.cls can be obtained from -% these values. i.e., V1.4 -% KEEP THESE AS INTEGERS! i.e., NO {4a} or anything like that- -% (no need to enumerate "a" minor changes here) -\def\IEEEtransversionmajor{1} -\def\IEEEtransversionminor{8} - - -% hook to allow easy changeover to IEEEtran.cls/tools.sty error reporting -\def\@IEEEclspkgerror{\ClassError{IEEEtran}} - - -% These do nothing, but provide them like in article.cls -\newif\if@restonecol -\newif\if@titlepage - - -% class option conditionals -\newif\ifCLASSOPTIONonecolumn \CLASSOPTIONonecolumnfalse -\newif\ifCLASSOPTIONtwocolumn \CLASSOPTIONtwocolumntrue - -\newif\ifCLASSOPTIONoneside \CLASSOPTIONonesidetrue -\newif\ifCLASSOPTIONtwoside \CLASSOPTIONtwosidefalse - -\newif\ifCLASSOPTIONfinal \CLASSOPTIONfinaltrue -\newif\ifCLASSOPTIONdraft \CLASSOPTIONdraftfalse -\newif\ifCLASSOPTIONdraftcls \CLASSOPTIONdraftclsfalse -\newif\ifCLASSOPTIONdraftclsnofoot \CLASSOPTIONdraftclsnofootfalse - -\newif\ifCLASSOPTIONpeerreview \CLASSOPTIONpeerreviewfalse -\newif\ifCLASSOPTIONpeerreviewca \CLASSOPTIONpeerreviewcafalse - -\newif\ifCLASSOPTIONjournal \CLASSOPTIONjournaltrue -\newif\ifCLASSOPTIONconference \CLASSOPTIONconferencefalse -\newif\ifCLASSOPTIONtechnote \CLASSOPTIONtechnotefalse - -\newif\ifCLASSOPTIONnofonttune \CLASSOPTIONnofonttunefalse - -\newif\ifCLASSOPTIONcaptionsoff \CLASSOPTIONcaptionsofffalse - -\newif\ifCLASSOPTIONcomsoc \CLASSOPTIONcomsocfalse -\newif\ifCLASSOPTIONcompsoc \CLASSOPTIONcompsocfalse -\newif\ifCLASSOPTIONtransmag \CLASSOPTIONtransmagfalse - -\newif\ifCLASSOPTIONromanappendices \CLASSOPTIONromanappendicesfalse - - -% class info conditionals - -% indicates if pdf (via pdflatex) output -\newif\ifCLASSINFOpdf \CLASSINFOpdffalse - - -% V1.6b internal flag to show if using a4paper -\newif\if@IEEEusingAfourpaper \@IEEEusingAfourpaperfalse -% V1.6b internal flag to show if using cspaper -\newif\if@IEEEusingcspaper \@IEEEusingcspaperfalse - - -% IEEEtran class scratch pad registers -% dimen -\newdimen\@IEEEtrantmpdimenA -\newdimen\@IEEEtrantmpdimenB -\newdimen\@IEEEtrantmpdimenC -% count -\newcount\@IEEEtrantmpcountA -\newcount\@IEEEtrantmpcountB -\newcount\@IEEEtrantmpcountC -% token list -\newtoks\@IEEEtrantmptoksA - -% we use \CLASSOPTIONpt so that we can ID the point size (even for 9pt docs) -% as well as LaTeX's \@ptsize to retain some compatability with some -% external packages -\def\@ptsize{0} -% LaTeX does not support 9pt, so we set \@ptsize to 0 - same as that of 10pt -\DeclareOption{9pt}{\def\CLASSOPTIONpt{9}\def\@ptsize{0}} -\DeclareOption{10pt}{\def\CLASSOPTIONpt{10}\def\@ptsize{0}} -\DeclareOption{11pt}{\def\CLASSOPTIONpt{11}\def\@ptsize{1}} -\DeclareOption{12pt}{\def\CLASSOPTIONpt{12}\def\@ptsize{2}} - - - -\DeclareOption{letterpaper}{\setlength{\paperwidth}{8.5in}% - \setlength{\paperheight}{11in}% - \@IEEEusingAfourpaperfalse - \@IEEEusingcspaperfalse - \def\CLASSOPTIONpaper{letter}% - \def\CLASSINFOpaperwidth{8.5in}% - \def\CLASSINFOpaperheight{11in}} - - -\DeclareOption{a4paper}{\setlength{\paperwidth}{210mm}% - \setlength{\paperheight}{297mm}% - \@IEEEusingAfourpapertrue - \@IEEEusingcspaperfalse - \def\CLASSOPTIONpaper{a4}% - \def\CLASSINFOpaperwidth{210mm}% - \def\CLASSINFOpaperheight{297mm}} - -% special paper option for compsoc journals -\DeclareOption{cspaper}{\setlength{\paperwidth}{7.875in}% - \setlength{\paperheight}{10.75in}% - \@IEEEusingcspapertrue - \@IEEEusingAfourpaperfalse - \def\CLASSOPTIONpaper{ieeecs}% - \def\CLASSINFOpaperwidth{7.875in}% - \def\CLASSINFOpaperheight{10.75in}} - -\DeclareOption{oneside}{\@twosidefalse\@mparswitchfalse - \CLASSOPTIONonesidetrue\CLASSOPTIONtwosidefalse} -\DeclareOption{twoside}{\@twosidetrue\@mparswitchtrue - \CLASSOPTIONtwosidetrue\CLASSOPTIONonesidefalse} - -\DeclareOption{onecolumn}{\CLASSOPTIONonecolumntrue\CLASSOPTIONtwocolumnfalse} -\DeclareOption{twocolumn}{\CLASSOPTIONtwocolumntrue\CLASSOPTIONonecolumnfalse} - -% If the user selects draft, then this class AND any packages -% will go into draft mode. -\DeclareOption{draft}{\CLASSOPTIONdrafttrue\CLASSOPTIONdraftclstrue - \CLASSOPTIONdraftclsnofootfalse} -% draftcls is for a draft mode which will not affect any packages -% used by the document. -\DeclareOption{draftcls}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue - \CLASSOPTIONdraftclsnofootfalse} -% draftclsnofoot is like draftcls, but without the footer. -\DeclareOption{draftclsnofoot}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclstrue - \CLASSOPTIONdraftclsnofoottrue} -\DeclareOption{final}{\CLASSOPTIONdraftfalse\CLASSOPTIONdraftclsfalse - \CLASSOPTIONdraftclsnofootfalse} - -\DeclareOption{journal}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse - \CLASSOPTIONjournaltrue\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} - -\DeclareOption{conference}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse - \CLASSOPTIONjournalfalse\CLASSOPTIONconferencetrue\CLASSOPTIONtechnotefalse} - -\DeclareOption{technote}{\CLASSOPTIONpeerreviewfalse\CLASSOPTIONpeerreviewcafalse - \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotetrue} - -\DeclareOption{peerreview}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcafalse - \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} - -\DeclareOption{peerreviewca}{\CLASSOPTIONpeerreviewtrue\CLASSOPTIONpeerreviewcatrue - \CLASSOPTIONjournalfalse\CLASSOPTIONconferencefalse\CLASSOPTIONtechnotefalse} - -\DeclareOption{nofonttune}{\CLASSOPTIONnofonttunetrue} - -\DeclareOption{captionsoff}{\CLASSOPTIONcaptionsofftrue} - -\DeclareOption{comsoc}{\CLASSOPTIONcomsoctrue\CLASSOPTIONcompsocfalse\CLASSOPTIONtransmagfalse} - -\DeclareOption{compsoc}{\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsoctrue\CLASSOPTIONtransmagfalse} - -\DeclareOption{transmag}{\CLASSOPTIONtransmagtrue\CLASSOPTIONcomsocfalse\CLASSOPTIONcompsocfalse} - -\DeclareOption{romanappendices}{\CLASSOPTIONromanappendicestrue} - - -% default to US letter paper, 10pt, twocolumn, one sided, final, journal -\ExecuteOptions{letterpaper,10pt,twocolumn,oneside,final,journal} -% overrride these defaults per user requests -\ProcessOptions - - - -%% -- Command Argument Scanning Support Functions -- - -% Sets the category codes for punctuation to their normal values. -% For local use with argument scanning. -\def\IEEEnormalcatcodespunct{\catcode`\!=12 \catcode`\,=12 \catcode`\:=12 -\catcode`\;=12 \catcode`\`=12 \catcode`\'=12 \catcode`\"=12 \catcode`\.=12 -\catcode`\/=12 \catcode`\?=12 \catcode`\*=12 \catcode`\+=12 \catcode`\-=12 -\catcode`\<=12 \catcode`\>=12 \catcode`\(=12 \catcode`\)=12 \catcode`\[=12 -\catcode`\]=12 \catcode`\==12 \catcode`\|=12} -% Sets the category codes for numbers to their normal values. -% For local use with argument scanning. -\def\IEEEnormalcatcodesnum{\catcode`\0=12 \catcode`\1=12 \catcode`\2=12 -\catcode`\3=12 \catcode`\4=12 \catcode`\5=12 \catcode`\6=12 \catcode`\7=12 -\catcode`\8=12 \catcode`\9=12} -% combined action of \IEEEnormalcatcodespunct and \IEEEnormalcatcodesnum -\def\IEEEnormalcatcodes{\IEEEnormalcatcodespunct\IEEEnormalcatcodesnum} - - -% usage: \@IEEEextracttoken*{} -% \@IEEEextracttoken fully expands its argument (which it then stores in -% \@IEEEextracttokenarg) via \edef and then the meaning of the first -% nonbrace (but including the empty group) token found is assigned via \let -% to \@IEEEextractedtoken as well as stored in the macro -% \@IEEEextractedtokenmacro. Tokens that would otherwise be discarded during -% the acquisition of the first are stored in \@IEEEextractedtokensdiscarded, -% however their original relative brace nesting depths are not guaranteed to -% be preserved. -% If the argument is empty, or if a first nonbrace token does not exist (or -% is an empty group), \@IEEEextractedtoken will be \relax and -% \@IEEEextractedtokenmacro and \@IEEEextractedtokensdiscarded will be empty. -% -% For example: -% \@IEEEextracttoken{{{ab}{cd}}{{ef}g}} -% results in: -% -% \@IEEEextracttokenarg ==> a macro containing {{ab}{cd}}{{ef}g} -% \@IEEEextractedtoken ==> the letter a -% \@IEEEextractedtokenmacro ==> a macro containing a -% \@IEEEextractedtokensdiscarded ==> a macro containing bcd{ef}g -% -% the *-star form, \@IEEEextracttoken*, does not expand its argument -% contents during processing. -\def\@IEEEextracttoken{\@ifstar{\let\@IEEEextracttokendef=\def\@@IEEEextracttoken}{\let\@IEEEextracttokendef=\edef\@@IEEEextracttoken}} - -\def\@@IEEEextracttoken#1{\@IEEEextracttokendef\@IEEEextracttokenarg{#1}\relax -\def\@IEEEextractedtokensdiscarded{}\relax % initialize to empty -% if the macro is unchanged after being acquired as a single undelimited argument -% with anything after it being stripped off as a delimited argument -% we know we have one token without any enclosing braces. loop until this is true. -\let\@IEEEextracttokencurgroup\@IEEEextracttokenarg -\loop - % trap case of an empty argument as this would cause a problem with - % \@@@IEEEextracttoken's first (nondelimited) argument acquisition - \ifx\@IEEEextracttokencurgroup\@empty - \def\@IEEEextractedtokenmacro{}\relax - \else - \expandafter\@@@IEEEextracttoken\@IEEEextracttokencurgroup\@IEEEgeneralsequenceDELIMITER\relax - \fi - \ifx\@IEEEextractedtokenmacro\@IEEEextracttokencurgroup - \else - \let\@IEEEextracttokencurgroup=\@IEEEextractedtokenmacro -\repeat -% we can safely do a \let= here because there should be at most one token -% the relax is needed to handle the case of no token found -\expandafter\let\expandafter\@IEEEextractedtoken\@IEEEextractedtokenmacro\relax} - -\def\@@@IEEEextracttoken#1#2\@IEEEgeneralsequenceDELIMITER{\def\@IEEEextractedtokenmacro{#1}\relax -\def\@@IEEEextractedtokensdiscarded{#2}\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter -\@IEEEextractedtokensdiscarded\expandafter\expandafter\expandafter -{\expandafter\@@IEEEextractedtokensdiscarded\@IEEEextractedtokensdiscarded}} -%% -%% -- End of Command Argument Scanning Support Functions -- - - - -% Computer Society conditional execution command -\long\def\@IEEEcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\relax#1\relax\fi\relax} -% inverse -\long\def\@IEEEnotcompsoconly#1{\relax\ifCLASSOPTIONcompsoc\else\relax#1\relax\fi\relax} -% compsoc conference -\long\def\@IEEEcompsocconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\relax#1\relax\fi\fi\relax} -% compsoc not conference -\long\def\@IEEEcompsocnotconfonly#1{\relax\ifCLASSOPTIONcompsoc\ifCLASSOPTIONconference\else\relax#1\relax\fi\fi\relax} - - -% comsoc verify that newtxmath, mtpro2, mt11p or mathtime has been loaded -\def\@IEEEcomsocverifymathfont{\typeout{-- Verifying Times compatible math font.}\relax - \@ifpackageloaded{newtxmath}{\typeout{-- newtxmath loaded, OK.}}{\@@IEEEcomsocverifymathfont}} -\def\@@IEEEcomsocverifymathfont{\@ifpackageloaded{mtpro2}{\typeout{-- mtpro2 loaded, OK.}}{\@@@IEEEcomsocverifymathfont}} -\def\@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mt11p}{\typeout{-- mt11p2 loaded, OK.}}{\@@@@IEEEcomsocverifymathfont}} -\def\@@@@IEEEcomsocverifymathfont{\@ifpackageloaded{mathtime}{\typeout{-- mathtime loaded, OK.}}{\@IEEEcomsocenforcemathfont}} - -% comsoc, if a Times math font was not loaded by user, enforce it -\def\@IEEEcomsocenforcemathfont{\typeout{** Times compatible math font not found, forcing.}\relax -\IfFileExists{newtxmath.sty}{\typeout{-- Found newtxmath, loading.}\RequirePackage{newtxmath}}{\@@IEEEcomsocenforcemathfont}} -\def\@@IEEEcomsocenforcemathfont{\IfFileExists{mtpro2.sty}{\typeout{-- Found mtpro2, loading.}\RequirePackage{mtpro2}}{\@@@IEEEcomsocenforcemathfont}} -\def\@@@IEEEcomsocenforcemathfont{\IfFileExists{mt11p.sty}{\typeout{-- Found mt11p, loading.}\RequirePackage{mt11p}}{\@@@@IEEEcomsocenforcemathfont}} -\def\@@@@IEEEcomsocenforcemathfont{\IfFileExists{mathtime.sty}{\typeout{-- Found mathtime, loading.}\RequirePackage{mathtime}}{\@@@@@IEEEcomsocenforcemathfont}} -% if no acceptable Times math font package found, error with newtxmath requirement -\def\@@@@@IEEEcomsocenforcemathfont{\typeout{** No Times compatible math font package found. newtxmath is required.}\RequirePackage{newtxmath}} - - -\ifCLASSOPTIONcomsoc - % ensure that if newtxmath is used, the cmintegrals option is also invoked - \PassOptionsToPackage{cmintegrals}{newtxmath} - % comsoc requires a Times like math font - % ensure this requirement is satisfied at document start - \AtBeginDocument{\@IEEEcomsocverifymathfont} -\fi - - - -% The IEEE uses Times Roman font, so we'll default to Times. -% These three commands make up the entire times.sty package. -\renewcommand{\sfdefault}{phv} -\renewcommand{\rmdefault}{ptm} -\renewcommand{\ttdefault}{pcr} - -% V1.7 compsoc nonconference papers, use Palatino/Palladio as the main text font, -% not Times Roman. -\@IEEEcompsocnotconfonly{\renewcommand{\rmdefault}{ppl}} - -% enable the selected main text font -\normalfont\selectfont - - -\ifCLASSOPTIONcomsoc - \typeout{-- Using IEEE Communications Society mode.} -\fi - -\ifCLASSOPTIONcompsoc - \typeout{-- Using IEEE Computer Society mode.} -\fi - - -% V1.7 conference notice message hook -\def\@IEEEconsolenoticeconference{\typeout{}% -\typeout{** Conference Paper **}% -\typeout{Before submitting the final camera ready copy, remember to:}% -\typeout{}% -\typeout{ 1. Manually equalize the lengths of two columns on the last page}% -\typeout{ of your paper;}% -\typeout{}% -\typeout{ 2. Ensure that any PostScript and/or PDF output post-processing}% -\typeout{ uses only Type 1 fonts and that every step in the generation}% -\typeout{ process uses the appropriate paper size.}% -\typeout{}} - - -% we can send console reminder messages to the user here -\AtEndDocument{\ifCLASSOPTIONconference\@IEEEconsolenoticeconference\fi} - - -% warn about the use of single column other than for draft mode -\ifCLASSOPTIONtwocolumn\else% - \ifCLASSOPTIONdraftcls\else% - \typeout{** ATTENTION: Single column mode is not typically used with IEEE publications.}% - \fi% -\fi - - -% V1.7 improved paper size setting code. -% Set pdfpage and dvips paper sizes. Conditional tests are similar to that -% of ifpdf.sty. Retain within {} to ensure tested macros are never altered, -% even if only effect is to set them to \relax. -% if \pdfoutput is undefined or equal to relax, output a dvips special -{\@ifundefined{pdfoutput}{\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}}{% -% pdfoutput is defined and not equal to \relax -% check for pdfpageheight existence just in case someone sets pdfoutput -% under non-pdflatex. If exists, set them regardless of value of \pdfoutput. -\@ifundefined{pdfpageheight}{\relax}{\global\pdfpagewidth\paperwidth -\global\pdfpageheight\paperheight}% -% if using \pdfoutput=0 under pdflatex, send dvips papersize special -\ifcase\pdfoutput -\AtBeginDvi{\special{papersize=\CLASSINFOpaperwidth,\CLASSINFOpaperheight}}% -\else -% we are using pdf output, set CLASSINFOpdf flag -\global\CLASSINFOpdftrue -\fi}} - -% let the user know the selected papersize -\typeout{-- Using \CLASSINFOpaperwidth\space x \CLASSINFOpaperheight\space -(\CLASSOPTIONpaper)\space paper.} - -\ifCLASSINFOpdf -\typeout{-- Using PDF output.} -\else -\typeout{-- Using DVI output.} -\fi - - -% The idea hinted here is for LaTeX to generate markleft{} and markright{} -% automatically for you after you enter \author{}, \journal{}, -% \journaldate{}, journalvol{}, \journalnum{}, etc. -% However, there may be some backward compatibility issues here as -% well as some special applications for IEEEtran.cls and special issues -% that may require the flexible \markleft{}, \markright{} and/or \markboth{}. -% We'll leave this as an open future suggestion. -%\newcommand{\journal}[1]{\def\@journal{#1}} -%\def\@journal{} - - - -% pointsize values -% used with ifx to determine the document's normal size -\def\@IEEEptsizenine{9} -\def\@IEEEptsizeten{10} -\def\@IEEEptsizeeleven{11} -\def\@IEEEptsizetwelve{12} - - - -% FONT DEFINITIONS (No sizexx.clo file needed) -% V1.6 revised font sizes, displayskip values and -% revised normalsize baselineskip to reduce underfull vbox problems -% on the 58pc = 696pt = 9.5in text height we want -% normalsize #lines/column baselineskip (aka leading) -% 9pt 63 11.0476pt (truncated down) -% 10pt 58 12pt (exact) -% 11pt 52 13.3846pt (truncated down) -% 12pt 50 13.92pt (exact) -% - -% we need to store the nominal baselineskip for the given font size -% in case baselinestretch ever changes. -% this is a dimen, so it will not hold stretch or shrink -\newdimen\@IEEEnormalsizeunitybaselineskip -\@IEEEnormalsizeunitybaselineskip\baselineskip - - - -%% ******* WARNING! ******* -%% -%% Authors should not alter font sizes, baselineskip ("leading"), -%% margins or other spacing values in an attempt to squeeze more -%% material on each page. -%% -%% The IEEE's own typesetting software will restore the correct -%% values when re-typesetting/proofing the submitted document, -%% possibly resulting in unexpected article over length charges. -%% -%% ******* WARNING! ******* - - -% 9pt option defaults -\ifx\CLASSOPTIONpt\@IEEEptsizenine -\typeout{-- This is a 9 point document.} -\def\normalsize{\@setfontsize{\normalsize}{9}{11.0476pt}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{11.0476pt} -\normalsize -\abovedisplayskip 1.5ex plus 3pt minus 1pt -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 3pt -\belowdisplayshortskip 1.5ex plus 3pt minus 1pt -\def\small{\@setfontsize{\small}{8.5}{10pt}} -\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} -\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} -\def\tiny{\@setfontsize{\tiny}{5}{6pt}} -% sublargesize is the same as large - 10pt -\def\sublargesize{\@setfontsize{\sublargesize}{10}{12pt}} -\def\large{\@setfontsize{\large}{10}{12pt}} -\def\Large{\@setfontsize{\Large}{12}{14pt}} -\def\LARGE{\@setfontsize{\LARGE}{14}{17pt}} -\def\huge{\@setfontsize{\huge}{17}{20pt}} -\def\Huge{\@setfontsize{\Huge}{20}{24pt}} -\fi -% -% 10pt option defaults -\ifx\CLASSOPTIONpt\@IEEEptsizeten -\typeout{-- This is a 10 point document.} -\def\normalsize{\@setfontsize{\normalsize}{10}{12.00pt}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{12pt} -\normalsize -\abovedisplayskip 1.5ex plus 4pt minus 2pt -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 4pt -\belowdisplayshortskip 1.5ex plus 4pt minus 2pt -\def\small{\@setfontsize{\small}{9}{10pt}} -\def\footnotesize{\@setfontsize{\footnotesize}{8}{9pt}} -\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}} -\def\tiny{\@setfontsize{\tiny}{5}{6pt}} -% sublargesize is a tad smaller than large - 11pt -\def\sublargesize{\@setfontsize{\sublargesize}{11}{13.4pt}} -\def\large{\@setfontsize{\large}{12}{14pt}} -\def\Large{\@setfontsize{\Large}{14}{17pt}} -\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} -\def\huge{\@setfontsize{\huge}{20}{24pt}} -\def\Huge{\@setfontsize{\Huge}{24}{28pt}} -\fi -% -% 11pt option defaults -\ifx\CLASSOPTIONpt\@IEEEptsizeeleven -\typeout{-- This is an 11 point document.} -\def\normalsize{\@setfontsize{\normalsize}{11}{13.3846pt}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{13.3846pt} -\normalsize -\abovedisplayskip 1.5ex plus 5pt minus 3pt -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 5pt -\belowdisplayshortskip 1.5ex plus 5pt minus 3pt -\def\small{\@setfontsize{\small}{10}{12pt}} -\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} -\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} -\def\tiny{\@setfontsize{\tiny}{6}{7pt}} -% sublargesize is the same as large - 12pt -\def\sublargesize{\@setfontsize{\sublargesize}{12}{14pt}} -\def\large{\@setfontsize{\large}{12}{14pt}} -\def\Large{\@setfontsize{\Large}{14}{17pt}} -\def\LARGE{\@setfontsize{\LARGE}{17}{20pt}} -\def\huge{\@setfontsize{\huge}{20}{24pt}} -\def\Huge{\@setfontsize{\Huge}{24}{28pt}} -\fi -% -% 12pt option defaults -\ifx\CLASSOPTIONpt\@IEEEptsizetwelve -\typeout{-- This is a 12 point document.} -\def\normalsize{\@setfontsize{\normalsize}{12}{13.92pt}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{13.92pt} -\normalsize -\abovedisplayskip 1.5ex plus 6pt minus 4pt -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 6pt -\belowdisplayshortskip 1.5ex plus 6pt minus 4pt -\def\small{\@setfontsize{\small}{10}{12pt}} -\def\footnotesize{\@setfontsize{\footnotesize}{9}{10.5pt}} -\def\scriptsize{\@setfontsize{\scriptsize}{8}{9pt}} -\def\tiny{\@setfontsize{\tiny}{6}{7pt}} -% sublargesize is the same as large - 14pt -\def\sublargesize{\@setfontsize{\sublargesize}{14}{17pt}} -\def\large{\@setfontsize{\large}{14}{17pt}} -\def\Large{\@setfontsize{\Large}{17}{20pt}} -\def\LARGE{\@setfontsize{\LARGE}{20}{24pt}} -\def\huge{\@setfontsize{\huge}{22}{26pt}} -\def\Huge{\@setfontsize{\Huge}{24}{28pt}} -\fi - - - -% V1.8a compsoc font sizes -% compsoc font sizes use bp "Postscript" point units (1/72in) -% rather than the traditional pt (1/72.27) -\ifCLASSOPTIONcompsoc -% -- compsoc defaults -- -% ** will override some of these values later ** -% 9pt -\ifx\CLASSOPTIONpt\@IEEEptsizenine -\def\normalsize{\@setfontsize{\normalsize}{9bp}{11bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{11bp} -\normalsize -\abovedisplayskip 1.5ex plus 3bp minus 1bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0bp plus 3bp -\belowdisplayshortskip 1.5ex plus 3bp minus 1bp -\def\small{\@setfontsize{\small}{8.5bp}{10bp}} -\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} -\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} -\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} -% sublargesize is the same as large - 10bp -\def\sublargesize{\@setfontsize{\sublargesize}{10bp}{12bp}} -\def\large{\@setfontsize{\large}{10bp}{12bp}} -\def\Large{\@setfontsize{\Large}{12bp}{14bp}} -\def\LARGE{\@setfontsize{\LARGE}{14bp}{17bp}} -\def\huge{\@setfontsize{\huge}{17bp}{20bp}} -\def\Huge{\@setfontsize{\Huge}{20bp}{24bp}} -\fi -% -% 10pt -\ifx\CLASSOPTIONpt\@IEEEptsizeten -\def\normalsize{\@setfontsize{\normalsize}{10bp}{12bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{12bp} -\normalsize -\abovedisplayskip 1.5ex plus 4bp minus 2bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 4bp -\belowdisplayshortskip 1.5ex plus 4bp minus 2bp -\def\small{\@setfontsize{\small}{9bp}{10bp}} -\def\footnotesize{\@setfontsize{\footnotesize}{8bp}{9bp}} -\def\scriptsize{\@setfontsize{\scriptsize}{7bp}{8bp}} -\def\tiny{\@setfontsize{\tiny}{5bp}{6bp}} -% sublargesize is a tad smaller than large - 11bp -\def\sublargesize{\@setfontsize{\sublargesize}{11bp}{13.5bp}} -\def\large{\@setfontsize{\large}{12bp}{14bp}} -\def\Large{\@setfontsize{\Large}{14bp}{17bp}} -\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} -\def\huge{\@setfontsize{\huge}{20bp}{24bp}} -\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} -\fi -% -% 11pt -\ifx\CLASSOPTIONpt\@IEEEptsizeeleven -\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.5bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{13.5bp} -\normalsize -\abovedisplayskip 1.5ex plus 5bp minus 3bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 5bp -\belowdisplayshortskip 1.5ex plus 5bp minus 3bp -\def\small{\@setfontsize{\small}{10bp}{12bp}} -\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} -\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} -\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} -% sublargesize is the same as large - 12bp -\def\sublargesize{\@setfontsize{\sublargesize}{12bp}{14bp}} -\def\large{\@setfontsize{\large}{12bp}{14bp}} -\def\Large{\@setfontsize{\Large}{14bp}{17bp}} -\def\LARGE{\@setfontsize{\LARGE}{17bp}{20bp}} -\def\huge{\@setfontsize{\huge}{20bp}{24bp}} -\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} -\fi -% -% 12pt -\ifx\CLASSOPTIONpt\@IEEEptsizetwelve -\def\normalsize{\@setfontsize{\normalsize}{12bp}{14bp}}% -\setlength{\@IEEEnormalsizeunitybaselineskip}{14bp}% -\normalsize -\abovedisplayskip 1.5ex plus 6bp minus 4bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 6bp -\belowdisplayshortskip 1.5ex plus 6bp minus 4bp -\def\small{\@setfontsize{\small}{10bp}{12bp}} -\def\footnotesize{\@setfontsize{\footnotesize}{9bp}{10.5bp}} -\def\scriptsize{\@setfontsize{\scriptsize}{8bp}{9bp}} -\def\tiny{\@setfontsize{\tiny}{6bp}{7bp}} -% sublargesize is the same as large - 14bp -\def\sublargesize{\@setfontsize{\sublargesize}{14bp}{17bp}} -\def\large{\@setfontsize{\large}{14bp}{17bp}} -\def\Large{\@setfontsize{\Large}{17bp}{20bp}} -\def\LARGE{\@setfontsize{\LARGE}{20bp}{24bp}} -\def\huge{\@setfontsize{\huge}{22bp}{26bp}} -\def\Huge{\@setfontsize{\Huge}{24bp}{28bp}} -\fi -% -% -- override defaults: compsoc journals use special normalsizes -- -\ifCLASSOPTIONconference -% -% compsoc conferences -% 9pt -\ifx\CLASSOPTIONpt\@IEEEptsizenine -\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} -\normalsize -\abovedisplayskip 1.5ex plus 3bp minus 1bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0bp plus 3bp -\belowdisplayshortskip 1.5ex plus 3bp minus 1bp -\fi -% 10pt -\ifx\CLASSOPTIONpt\@IEEEptsizeten -\def\normalsize{\@setfontsize{\normalsize}{10bp}{11.2bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{11.2bp} -\normalsize -\abovedisplayskip 1.5ex plus 4bp minus 2bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 4bp -\belowdisplayshortskip 1.5ex plus 4bp minus 2bp -\fi -% 11pt -\ifx\CLASSOPTIONpt\@IEEEptsizeeleven -\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} -\normalsize -\abovedisplayskip 1.5ex plus 5bp minus 3bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 5bp -\belowdisplayshortskip 1.5ex plus 5bp minus 3bp -\fi -% 12pt -\ifx\CLASSOPTIONpt\@IEEEptsizetwelve -\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} -\normalsize -\abovedisplayskip 1.5ex plus 6bp minus 4bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 6bp -\belowdisplayshortskip 1.5ex plus 6bp minus 4bp -\fi -% -% compsoc nonconferences -\else -% 9pt -\ifx\CLASSOPTIONpt\@IEEEptsizenine -\def\normalsize{\@setfontsize{\normalsize}{9bp}{10.8bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{10.8bp} -\normalsize -\abovedisplayskip 1.5ex plus 3bp minus 1bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0bp plus 3bp -\belowdisplayshortskip 1.5ex plus 3bp minus 1bp -\fi -% 10pt -\ifx\CLASSOPTIONpt\@IEEEptsizeten -% the official spec is 9.5bp with 11.4bp leading for 10pt, -% but measurements of proofs suggest upto 11.723bp leading -% here we'll use 11.54bp which gives 61 lines per column -% with the standard compsoc margins -\def\normalsize{\@setfontsize{\normalsize}{9.5bp}{11.54bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{11.54bp} -\normalsize -\abovedisplayskip 1.5ex plus 4bp minus 2bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 4bp -\belowdisplayshortskip 1.5ex plus 4bp minus 2bp -\fi -% 11pt -\ifx\CLASSOPTIONpt\@IEEEptsizeeleven -\def\normalsize{\@setfontsize{\normalsize}{11bp}{13.2bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{13.2bp} -\normalsize -\abovedisplayskip 1.5ex plus 5bp minus 3bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 5bp -\belowdisplayshortskip 1.5ex plus 5bp minus 3bp -\fi -% 12pt -\ifx\CLASSOPTIONpt\@IEEEptsizetwelve -\def\normalsize{\@setfontsize{\normalsize}{12bp}{14.4bp}} -\setlength{\@IEEEnormalsizeunitybaselineskip}{14.4bp} -\normalsize -\abovedisplayskip 1.5ex plus 6bp minus 4bp -\belowdisplayskip \abovedisplayskip -\abovedisplayshortskip 0pt plus 6bp -\belowdisplayshortskip 1.5ex plus 6bp minus 4bp -\fi -\fi\fi - - - - -% V1.6 The Computer Modern Fonts will issue a substitution warning for -% 24pt titles (24.88pt is used instead, but the default and correct -% Times font will scale exactly as needed) increase the substitution -% tolerance to turn off this warning. -% -% V1.8a, the compsoc bp font sizes can also cause bogus font substitution -% warnings with footnote or scriptsize math and the $\bullet$ itemized -% list of \IEEEcompsocitemizethanks. So, increase this to 1.5pt or more. -\def\fontsubfuzz{1.7bp} - - -% warn the user in case they forget to use the 9pt option with -% technote -\ifCLASSOPTIONtechnote% - \ifx\CLASSOPTIONpt\@IEEEptsizenine\else% - \typeout{** ATTENTION: Technotes are normally 9pt documents.}% - \fi% -\fi - - -% V1.7 -% Improved \textunderscore to provide a much better fake _ when used with -% OT1 encoding. Under OT1, detect use of pcr or cmtt \ttfamily and use -% available true _ glyph for those two typewriter fonts. -\def\@IEEEstringptm{ptm} % Times Roman family -\def\@IEEEstringppl{ppl} % Palatino Roman family -\def\@IEEEstringphv{phv} % Helvetica Sans Serif family -\def\@IEEEstringpcr{pcr} % Courier typewriter family -\def\@IEEEstringcmtt{cmtt} % Computer Modern typewriter family -\DeclareTextCommandDefault{\textunderscore}{\leavevmode -\ifx\f@family\@IEEEstringpcr\string_\else -\ifx\f@family\@IEEEstringcmtt\string_\else -\ifx\f@family\@IEEEstringptm\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else -\ifx\f@family\@IEEEstringppl\kern 0em\vbox{\hrule\@width 0.5em\@height 0.5pt\kern -0.3ex}\else -\ifx\f@family\@IEEEstringphv\kern -0.03em\vbox{\hrule\@width 0.62em\@height 0.52pt\kern -0.33ex}\kern -0.03em\else -\kern 0.09em\vbox{\hrule\@width 0.6em\@height 0.44pt\kern -0.63pt\kern -0.42ex}\kern 0.09em\fi\fi\fi\fi\fi\relax} - - - - -% set the default \baselinestretch -\def\baselinestretch{1} -\ifCLASSOPTIONdraftcls - \def\baselinestretch{1.5}% default baselinestretch for draft modes -\fi - - -% process CLASSINPUT baselinestretch -\ifx\CLASSINPUTbaselinestretch\@IEEEundefined -\else - \edef\baselinestretch{\CLASSINPUTbaselinestretch} % user CLASSINPUT override - \typeout{** ATTENTION: Overriding \string\baselinestretch\space to - \baselinestretch\space via \string\CLASSINPUT.} -\fi - -\small\normalsize % make \baselinestretch take affect - - - - -% store the normalsize baselineskip -\newdimen\CLASSINFOnormalsizebaselineskip -\CLASSINFOnormalsizebaselineskip=\baselineskip\relax -% and the normalsize unity (baselinestretch=1) baselineskip -% we could save a register by giving the user access to -% \@IEEEnormalsizeunitybaselineskip. However, let's protect -% its read only internal status -\newdimen\CLASSINFOnormalsizeunitybaselineskip -\CLASSINFOnormalsizeunitybaselineskip=\@IEEEnormalsizeunitybaselineskip\relax -% store the nominal value of jot -\newdimen\IEEEnormaljot -\IEEEnormaljot=0.25\baselineskip\relax - -% set \jot -\jot=\IEEEnormaljot\relax - - - - -% V1.6, we are now going to fine tune the interword spacing -% The default interword glue for Times under TeX appears to use a -% nominal interword spacing of 25% (relative to the font size, i.e., 1em) -% a maximum of 40% and a minimum of 19%. -% For example, 10pt text uses an interword glue of: -% -% 2.5pt plus 1.49998pt minus 0.59998pt -% -% However, the IEEE allows for a more generous range which reduces the need -% for hyphenation, especially for two column text. Furthermore, the IEEE -% tends to use a little bit more nominal space between the words. -% The IEEE's interword spacing percentages appear to be: -% 35% nominal -% 23% minimum -% 50% maximum -% (They may even be using a tad more for the largest fonts such as 24pt.) -% -% for bold text, the IEEE increases the spacing a little more: -% 37.5% nominal -% 23% minimum -% 55% maximum - -% here are the interword spacing ratios we'll use -% for medium (normal weight) -\def\@IEEEinterspaceratioM{0.35} -\def\@IEEEinterspaceMINratioM{0.23} -\def\@IEEEinterspaceMAXratioM{0.50} - -% for bold -\def\@IEEEinterspaceratioB{0.375} -\def\@IEEEinterspaceMINratioB{0.23} -\def\@IEEEinterspaceMAXratioB{0.55} - - -% compsoc nonconference papers use Palatino, -% tweak settings to better match the proofs -\ifCLASSOPTIONcompsoc -\ifCLASSOPTIONconference\else -% for medium (normal weight) -\def\@IEEEinterspaceratioM{0.28} -\def\@IEEEinterspaceMINratioM{0.21} -\def\@IEEEinterspaceMAXratioM{0.47} -% for bold -\def\@IEEEinterspaceratioB{0.305} -\def\@IEEEinterspaceMINratioB{0.21} -\def\@IEEEinterspaceMAXratioB{0.52} -\fi\fi - - -% command to revise the interword spacing for the current font under TeX: -% \fontdimen2 = nominal interword space -% \fontdimen3 = interword stretch -% \fontdimen4 = interword shrink -% since all changes to the \fontdimen are global, we can enclose these commands -% in braces to confine any font attribute or length changes -\def\@@@IEEEsetfontdimens#1#2#3{{% -\setlength{\@IEEEtrantmpdimenB}{\f@size pt}% grab the font size in pt, could use 1em instead. -\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% -\fontdimen2\font=\@IEEEtrantmpdimenA\relax -\addtolength{\@IEEEtrantmpdimenA}{-#2\@IEEEtrantmpdimenB}% -\fontdimen3\font=-\@IEEEtrantmpdimenA\relax -\setlength{\@IEEEtrantmpdimenA}{#1\@IEEEtrantmpdimenB}% -\addtolength{\@IEEEtrantmpdimenA}{-#3\@IEEEtrantmpdimenB}% -\fontdimen4\font=\@IEEEtrantmpdimenA\relax}} - -% revise the interword spacing for each font weight -\def\@@IEEEsetfontdimens{{% -\mdseries -\@@@IEEEsetfontdimens{\@IEEEinterspaceratioM}{\@IEEEinterspaceMAXratioM}{\@IEEEinterspaceMINratioM}% -\bfseries -\@@@IEEEsetfontdimens{\@IEEEinterspaceratioB}{\@IEEEinterspaceMAXratioB}{\@IEEEinterspaceMINratioB}% -}} - -% revise the interword spacing for each font shape -% \slshape is not often used for IEEE work and is not altered here. The \scshape caps are -% already a tad too large in the free LaTeX fonts (as compared to what the IEEE uses) so we -% won't alter these either. -\def\@IEEEsetfontdimens{{% -\normalfont -\@@IEEEsetfontdimens -\normalfont\itshape -\@@IEEEsetfontdimens -}} - -% command to revise the interword spacing for each font size (and shape -% and weight). Only the \rmfamily is done here as \ttfamily uses a -% fixed spacing and \sffamily is not used as the main text of IEEE papers. -\def\@IEEEtunefonts{{\selectfont\rmfamily -\tiny\@IEEEsetfontdimens -\scriptsize\@IEEEsetfontdimens -\footnotesize\@IEEEsetfontdimens -\small\@IEEEsetfontdimens -\normalsize\@IEEEsetfontdimens -\sublargesize\@IEEEsetfontdimens -\large\@IEEEsetfontdimens -\LARGE\@IEEEsetfontdimens -\huge\@IEEEsetfontdimens -\Huge\@IEEEsetfontdimens}} - -% if the nofonttune class option is not given, revise the interword spacing -% now - in case IEEEtran makes any default length measurements, and make -% sure all the default fonts are loaded -\ifCLASSOPTIONnofonttune\else -\@IEEEtunefonts -\fi - -% and again at the start of the document in case the user loaded different fonts -\AtBeginDocument{\ifCLASSOPTIONnofonttune\else\@IEEEtunefonts\fi} - - - - - -% -- V1.8a page setup commands -- - -% The default sample text for calculating margins -% Note that IEEE publications use \scriptsize for headers and footers. -\def\IEEEdefaultsampletext{\normalfont\normalsize gT} -\def\IEEEdefaultheadersampletext{\normalfont\scriptsize T}% IEEE headers default to uppercase -\def\IEEEdefaultfootersampletext{\normalfont\scriptsize gT} - - - -% usage: \IEEEsettextwidth{inner margin}{outer margin} -% Sets \textwidth to allow the specified inner and outer margins -% for the current \paperwidth. -\def\IEEEsettextwidth#1#2{\@IEEEtrantmpdimenA\paperwidth -\@IEEEtrantmpdimenB#1\relax -\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB -\@IEEEtrantmpdimenB#2\relax -\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB -\textwidth\@IEEEtrantmpdimenA} - - - -% usage: \IEEEsetsidemargin{mode: i, o, c, a}{margin/offset} -% Sets \oddsidemargin and \evensidemargin to yield the specified margin -% of the given mode. -% The available modes are: -% i = inner margin -% o = outer margin -% c = centered, with the given offset -% a = adjust the margins using the given offset -% For the offsets, positive values increase the inner margin. -% \textwidth should be set properly for the given margins before calling this -% function. -\def\IEEEsetsidemargin#1#2{\@IEEEtrantmpdimenA #2\relax -\@IEEEextracttoken{#1}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `i'}{Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}\relax - \let\@IEEEextractedtoken=i\relax - \def\@IEEEextractedtokenmacro{i}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEsetsidemargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% handle each mode -\if\@IEEEextractedtoken a\relax - \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken c\relax - \oddsidemargin\paperwidth - \advance\oddsidemargin by -\textwidth - \divide\oddsidemargin by 2\relax - \advance\oddsidemargin by -1in\relax - \advance\oddsidemargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken o\relax - \oddsidemargin\paperwidth - \advance\oddsidemargin by -\textwidth - \advance\oddsidemargin by -\@IEEEtrantmpdimenA - \advance\oddsidemargin by -1in\relax -\else - \if\@IEEEextractedtoken i\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetsidemargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `i'}% - {Valid modes for \string\IEEEsetsidemargin\space are: i, o, c and a.}% - \fi - \oddsidemargin\@IEEEtrantmpdimenA - \advance\oddsidemargin by -1in\relax -\fi\fi\fi -% odd and even side margins both mean "inner" for single sided pages -\evensidemargin\oddsidemargin -% but are mirrors of each other when twosided is in effect -\if@twoside - \evensidemargin\paperwidth - \advance\evensidemargin by -\textwidth - \advance\evensidemargin by -\oddsidemargin - % have to compensate for both the builtin 1in LaTex offset - % and the fact we already subtracted this offset from \oddsidemargin - \advance\evensidemargin -2in\relax -\fi} - - - -% usage: \IEEEsettextheight[sample text]{top text margin}{bottom text margin} -% Sets \textheight based on the specified top margin and bottom margin. -% Takes into consideration \paperheight, \topskip, and (by default) the -% the actual height and depth of the \IEEEdefaultsampletext text. -\def\IEEEsettextheight{\@ifnextchar [{\@IEEEsettextheight}{\@IEEEsettextheight[\IEEEdefaultsampletext]}} -\def\@IEEEsettextheight[#1]#2#3{\textheight\paperheight\relax - \@IEEEtrantmpdimenA #2\relax - \advance \textheight by -\@IEEEtrantmpdimenA% subtract top margin - \@IEEEtrantmpdimenA #3\relax - \advance \textheight by -\@IEEEtrantmpdimenA% subtract bottom margin - \advance \textheight by \topskip% add \topskip - % subtract off everything above the top, and below the bottom, baselines - \settoheight{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance \textheight by -\@IEEEtrantmpdimenA - \settodepth{\@IEEEtrantmpdimenA}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance \textheight by -\@IEEEtrantmpdimenA} - - - -\newdimen\IEEEquantizedlength -\IEEEquantizedlength 0sp\relax -\newdimen\IEEEquantizedlengthdiff -\IEEEquantizedlengthdiff 0sp\relax -\def\IEEEquantizedlengthint{0} - -% usage: \IEEEquantizelength{mode: d, c, i}{base unit}{length} -% Sets the length \IEEEquantizedlength to be an integer multiple of the given -% (nonzero) base unit such that \IEEEquantizedlength approximates the given -% length. -% \IEEEquantizedlengthdiff is a length equal to the difference between the -% \IEEEquantizedlength and the given length. -% \IEEEquantizedlengthint is a macro containing the integer number of base units -% in \IEEEquantizedlength. -% i.e., \IEEEquantizedlength = \IEEEquantizedlengthint * base unit -% The mode determines how \IEEEquantizedlength is quantized: -% d = always decrease (always round down \IEEEquantizeint) -% c = use the closest match -% i = always increase (always round up \IEEEquantizeint) -% In anycase, if the given length is already quantized, -% \IEEEquantizedlengthdiff will be set to zero. -\def\IEEEquantizelength#1#2#3{\begingroup -% work in isolation so as not to externally disturb the \@IEEEtrantmp -% variables -% load the argument values indirectly via \IEEEquantizedlengthdiff -% in case the user refers to our \@IEEEtrantmpdimenX, \IEEEquantizedlength, -% etc. in the arguments. we also will work with these as counters, -% i.e., in sp units -% A has the base unit -\IEEEquantizedlengthdiff #2\relax\relax\relax\relax -\@IEEEtrantmpcountA\IEEEquantizedlengthdiff -% B has the input length -\IEEEquantizedlengthdiff #3\relax\relax\relax\relax -\@IEEEtrantmpcountB\IEEEquantizedlengthdiff -\@IEEEtrantmpdimenA\the\@IEEEtrantmpcountA sp\relax -\@IEEEtrantmpdimenB\the\@IEEEtrantmpcountB sp\relax -% \@IEEEtrantmpcountC will have the quantized int -% \IEEEquantizedlength will have the quantized length -% \@IEEEtrantmpdimenC will have the quantized diff -% initialize them to zero as this is what will be -% exported if an error occurs -\@IEEEtrantmpcountC 0\relax -\IEEEquantizedlength 0sp\relax -\@IEEEtrantmpdimenC 0sp\relax -% extract mode -\@IEEEextracttoken{#1}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak - Defaulting to `d'}{Valid modes for \string\IEEEquantizelength\space are: d, c and i.}\relax - \let\@IEEEextractedtoken=d\relax - \def\@IEEEextractedtokenmacro{d}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEquantizelength\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% check for base unit is zero error -\ifnum\@IEEEtrantmpcountA=0\relax -\@IEEEclspkgerror{Base unit is zero in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak - \string\IEEEquantizedlength\space and \string\IEEEquantizedlengthdiff\space are set to zero}{Division by zero is not allowed.}\relax -\else% base unit is nonzero - % \@IEEEtrantmpcountC carries the number of integer units - % in the quantized length (integer length \ base) - \@IEEEtrantmpcountC\@IEEEtrantmpcountB\relax - \divide\@IEEEtrantmpcountC by \@IEEEtrantmpcountA\relax - % \IEEEquantizedlength has the (rounded down) quantized length - % = base * int - \IEEEquantizedlength\@IEEEtrantmpdimenA\relax - \multiply\IEEEquantizedlength by \@IEEEtrantmpcountC\relax - % \@IEEEtrantmpdimenC has the difference - % = quantized length - length - \@IEEEtrantmpdimenC\IEEEquantizedlength\relax - \advance\@IEEEtrantmpdimenC by -\@IEEEtrantmpdimenB\relax - % trap special case of length being already quantized - % to avoid a roundup under i option - \ifdim\@IEEEtrantmpdimenC=0sp\relax - \else % length not is already quantized - % set dimenA to carry the upper quantized (absolute value) difference: - % quantizedlength + base - length - \advance\@IEEEtrantmpdimenA by \IEEEquantizedlength\relax - \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB\relax - % set dimenB to carry the lower quantized (absolute value) difference: - % length - quantizedlength - \advance\@IEEEtrantmpdimenB by -\IEEEquantizedlength\relax - % handle each mode - \if\@IEEEextractedtoken c\relax - % compare upper and lower amounts, select upper if lower > upper - \ifdim\@IEEEtrantmpdimenB>\@IEEEtrantmpdimenA\relax - % use upper - \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax - \advance\@IEEEtrantmpcountC by 1\relax - \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA - \else% <=. uselower - % no need to do anything for lower, use output values already setup - \fi - \else% not mode c - \if\@IEEEextractedtoken i\relax - % always round up under i mode - \advance\IEEEquantizedlength by \the\@IEEEtrantmpcountA sp\relax - \advance\@IEEEtrantmpcountC by 1\relax - \@IEEEtrantmpdimenC\@IEEEtrantmpdimenA - \else - \if\@IEEEextractedtoken d\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEquantizelength\space (line \the\inputlineno).\MessageBreak - Defaulting to `d'}% - {Valid modes for \string\IEEEquantizelength\space are: d, c, and i.}\relax - \fi % if d - % no need to do anything for d, use output values already setup - \fi\fi % if i, c - \fi % if length is already quantized -\fi% if base unit is zero -% globally assign the results to macros we use here to escape the enclosing -% group without needing to call \global on any of the \@IEEEtrantmp variables. -% \@IEEEtrantmpcountC has the quantized int -% \IEEEquantizedlength has the quantized length -% \@IEEEtrantmpdimenC has the quantized diff -\xdef\@IEEEquantizedlengthintmacro{\the\@IEEEtrantmpcountC}\relax -\@IEEEtrantmpcountC\IEEEquantizedlength\relax -\xdef\@IEEEquantizedlengthmacro{\the\@IEEEtrantmpcountC}\relax -\@IEEEtrantmpcountC\@IEEEtrantmpdimenC\relax -\xdef\@IEEEquantizedlengthdiffmacro{\the\@IEEEtrantmpcountC}\relax -\endgroup -% locally assign the outputs here from the macros -\expandafter\IEEEquantizedlength\@IEEEquantizedlengthmacro sp\relax -\expandafter\IEEEquantizedlengthdiff\@IEEEquantizedlengthdiffmacro sp\relax -\edef\IEEEquantizedlengthint{\@IEEEquantizedlengthintmacro}\relax} - - - -\newdimen\IEEEquantizedtextheightdiff -\IEEEquantizedtextheightdiff 0sp\relax - -% usage: \IEEEquantizetextheight[base unit]{mode: d, c, i} -% Sets \textheight to be an integer multiple of the current \baselineskip -% (or the optionally specified base unit) plus the first (\topskip) line. -% \IEEEquantizedtextheightdiff is a length equal to the difference between -% the new quantized and original \textheight. -% \IEEEquantizedtextheightlpc is a macro containing the integer number of -% lines per column under the quantized \textheight. i.e., -% \textheight = \IEEEquantizedtextheightlpc * \baselineskip + \topskip -% The mode determines how \textheight is quantized: -% d = always decrease (always round down the number of lines per column) -% c = use the closest match -% i = always increase (always round up the number of lines per column) -% In anycase, if \textheight is already quantized, it will remain unchanged, -% and \IEEEquantizedtextheightdiff will be set to zero. -% Depends on: \IEEEquantizelength -\def\IEEEquantizetextheight{\@ifnextchar [{\@IEEEquantizetextheight}{\@IEEEquantizetextheight[\baselineskip]}} -\def\@IEEEquantizetextheight[#1]#2{\begingroup -% use our \IEEEquantizedtextheightdiff as a scratch pad -% we need to subtract off \topskip before quantization -\IEEEquantizedtextheightdiff\textheight -\advance\IEEEquantizedtextheightdiff by -\topskip\relax -\IEEEquantizelength{#2}{#1}{\IEEEquantizedtextheightdiff} -% add back \topskip line -\advance\IEEEquantizedlength by \topskip -\@IEEEtrantmpcountC\IEEEquantizedlengthint\relax -\advance\@IEEEtrantmpcountC by 1\relax -% globally assign the results to macros we use here to escape the enclosing -% group without needing to call \global on any of the \@IEEEtrantmp variables. -\xdef\@IEEEquantizedtextheightlpcmacro{\the\@IEEEtrantmpcountC}\relax -\@IEEEtrantmpcountC\IEEEquantizedlength\relax -\xdef\@IEEEquantizedtextheightmacro{\the\@IEEEtrantmpcountC}\relax -\@IEEEtrantmpcountC\IEEEquantizedlengthdiff\relax -\xdef\@IEEEquantizedtextheightdiffmacro{\the\@IEEEtrantmpcountC}\relax -\endgroup -% locally assign the outputs here from the macros -\textheight\@IEEEquantizedtextheightmacro sp\relax -\IEEEquantizedtextheightdiff\@IEEEquantizedtextheightdiffmacro sp\relax -\edef\IEEEquantizedtextheightlpc{\@IEEEquantizedtextheightlpcmacro}} - - - -% usage: \IEEEsettopmargin[sample text]{mode: t, b, c, a, q}{margin/offset} -% Sets \topmargin based on the specified vertical margin. -% Takes into consideration the base 1in offset, \headheight, \headsep, -% \topskip, and (by default) the the actual height (or, for the bottom, depth) -% of the \IEEEdefaultsampletext text. -% The available modes are: -% t = top margin -% b = bottom margin -% c = vertically centered, with the given offset -% a = adjust the vertical margins using the given offset -% q = adjust the margins using \IEEEquantizedtextheightdiff and the given offset -% For the offsets, positive values increase the top margin. -% \headheight, \headsep, \topskip and \textheight should be set properly for the -% given margins before calling this function. -\def\IEEEsettopmargin{\@ifnextchar [{\@IEEEsettopmargin}{\@IEEEsettopmargin[\IEEEdefaultsampletext]}} -\def\@IEEEsettopmargin[#1]#2#3{\@IEEEtrantmpdimenA #3\relax -\@IEEEextracttoken{#2}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}{Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax - \let\@IEEEextractedtoken=t\relax - \def\@IEEEextractedtokenmacro{t}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEsettopmargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% handle each mode -\if\@IEEEextractedtoken a\relax - \advance\topmargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken q\relax - % we need to adjust by half the \IEEEquantizedtextheightdiff value - \@IEEEtrantmpdimenB\IEEEquantizedtextheightdiff\relax - \divide\@IEEEtrantmpdimenB by 2\relax - % a positive \IEEEquantizedtextheightdiff means we need to reduce \topmargin - % because \textheight has been lenghtened - \advance\topmargin by -\@IEEEtrantmpdimenB\relax - \advance\topmargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken c\relax - \topmargin\paperheight - \advance\topmargin by -\textheight - % \textheight includes \topskip, but we should not count topskip whitespace here, backout - \advance \topmargin by \topskip - \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\topmargin by -\@IEEEtrantmpdimenB\relax - \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\topmargin by -\@IEEEtrantmpdimenB\relax - \divide\topmargin by 2\relax - \advance\topmargin by \@IEEEtrantmpdimenA\relax -\else -\if\@IEEEextractedtoken b\relax - \topmargin\paperheight - \advance\topmargin by -\textheight - % \textheight includes \topskip, but we should not count topskip whitespace here, backout - \advance \topmargin by \topskip - \settodepth{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\topmargin by -\@IEEEtrantmpdimenB\relax - \advance\topmargin by -\@IEEEtrantmpdimenA\relax -\else - \if\@IEEEextractedtoken t\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsettopmargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}% - {Valid modes for \string\IEEEsettopmargin\space are: t, b, c, a and q.}\relax - \fi - \topmargin\@IEEEtrantmpdimenA\relax - \settoheight{\@IEEEtrantmpdimenB}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\topmargin by \@IEEEtrantmpdimenB\relax -\fi\fi % if t, b, c -% convert desired top margin into actual \topmargin -% this is not done for the q or a modes because they are only adjustments -\advance \topmargin by -\topskip -\advance \topmargin by -1in -\advance \topmargin by -\headheight -\advance \topmargin by -\headsep -\fi\fi % if q, a -} - - - -% usage: \IEEEsetheadermargin[header sample][text sample]{mode: t, b, c, a}{margin/offset} -% Differentially adjusts \topmargin and \headsep (such that their sum is unchanged) -% based on the specified header margin. -% Takes into consideration the base 1in offset, \headheight, \topskip, and (by default) -% the actual height (or depth) of the \IEEEdefaultheadersampletext and -% \IEEEdefaultsampletext text. -% The available modes are: -% t = top margin (top of the header text to the top of the page) -% b = bottom margin (bottom of the header text to the top of the main text) -% c = vertically centered between the main text and the top of the page, -% with the given offset -% a = adjust the vertical position using the given offset -% For the offsets, positive values move the header downward. -% \headheight, \headsep, \topskip and \topmargin should be set properly before -% calling this function. -\def\IEEEsetheadermargin{\@ifnextchar [{\@IEEEsetheadermargin}{\@IEEEsetheadermargin[\IEEEdefaultheadersampletext]}} -\def\@IEEEsetheadermargin[#1]{\@ifnextchar [{\@@IEEEsetheadermargin[#1]}{\@@IEEEsetheadermargin[#1][\IEEEdefaultsampletext]}} -\def\@@IEEEsetheadermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax -\@IEEEextracttoken{#3}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}{Valid modes for \string\IEEEsetheadermargin\space are: t, b, c, and a.}\relax - \let\@IEEEextractedtoken=t\relax - \def\@IEEEextractedtokenmacro{t}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEsetheadermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% handle each mode -\if\@IEEEextractedtoken a\relax - % No need to do anything here and can pass through the adjustment - % value as is. The end adjustment of \topmargin and \headsep will - % do all that is needed -\else -\if\@IEEEextractedtoken c\relax - % get the bottom margin - \@IEEEtrantmpdimenB\headsep\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - \advance\@IEEEtrantmpdimenB by \topskip - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual header bottom margin - % subtract from it the top header margin - \advance\@IEEEtrantmpdimenB -1in\relax % take into consideration the system 1in offset of the top margin - \advance\@IEEEtrantmpdimenB by -\topmargin - \advance\@IEEEtrantmpdimenB by -\headheight - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the difference between the bottom and top margins - % we need to adjust by half this amount to center the header - \divide\@IEEEtrantmpdimenB by 2\relax - % and add to offset - \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB -\else -\if\@IEEEextractedtoken b\relax - \@IEEEtrantmpdimenB\headsep\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - \advance\@IEEEtrantmpdimenB by \topskip - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual header bottom margin - % get the difference between the actual and the desired - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA - \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB -\else - \if\@IEEEextractedtoken t\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetheadermargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}% - {Valid modes for \string\IEEEsetheadermargin\space are: t, b, c and a.}\relax - \fi - \@IEEEtrantmpdimenB 1in\relax % take into consideration the system 1in offset of the top margin - \advance\@IEEEtrantmpdimenB by \topmargin - \advance\@IEEEtrantmpdimenB by \headheight - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual header top margin - % get the difference between the desired and the actual - \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB -\fi\fi % if t, b, c -\fi % if a -% advance \topmargin by the needed amount and reduce \headsep by the same -% so as not to disturb the location of the main text -\advance\topmargin by \@IEEEtrantmpdimenA\relax -\advance\headsep by -\@IEEEtrantmpdimenA\relax -} - - - -% usage: \IEEEsetfootermargin[footer sample][text sample]{mode: t, b, c, a}{margin/offset} -% Adjusts \footskip based on the specified footer margin. -% Takes into consideration the base 1in offset, \paperheight, \headheight, -% \headsep, \textheight and (by default) the actual height (or depth) of the -% \IEEEdefaultfootersampletext and \IEEEdefaultsampletext text. -% The available modes are: -% t = top margin (top of the footer text to the bottom of the main text) -% b = bottom margin (bottom of the footer text to the bottom of page) -% c = vertically centered between the main text and the bottom of the page, -% with the given offset -% a = adjust the vertical position using the given offset -% For the offsets, positive values move the footer downward. -% \headheight, \headsep, \topskip, \topmargin, and \textheight should be set -% properly before calling this function. -\def\IEEEsetfootermargin{\@ifnextchar [{\@IEEEsetfootermargin}{\@IEEEsetfootermargin[\IEEEdefaultfootersampletext]}} -\def\@IEEEsetfootermargin[#1]{\@ifnextchar [{\@@IEEEsetfootermargin[#1]}{\@@IEEEsetfootermargin[#1][\IEEEdefaultsampletext]}} -\def\@@IEEEsetfootermargin[#1][#2]#3#4{\@IEEEtrantmpdimenA #4\relax -\@IEEEextracttoken{#3}\relax -% check for mode errors -\ifx\@IEEEextractedtokenmacro\@empty - \@IEEEclspkgerror{Empty mode type in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}{Valid modes for \string\IEEEsetfootermargin\space are: t, b, c, and a.}\relax - \let\@IEEEextractedtoken=t\relax - \def\@IEEEextractedtokenmacro{t}\relax -\else - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: \string\IEEEsetfootermargin\space mode specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi -\fi -% handle each mode -\if\@IEEEextractedtoken a\relax - % No need to do anything here and can pass through the adjustment - % value as is. The end adjustment of \footskip will do all that - % is needed -\else -\if\@IEEEextractedtoken c\relax - % calculate the bottom margin - \@IEEEtrantmpdimenB 1in\relax % system 1in offset - \advance\@IEEEtrantmpdimenB\topmargin\relax - \advance\@IEEEtrantmpdimenB\headheight\relax - \advance\@IEEEtrantmpdimenB\headsep\relax - \advance\@IEEEtrantmpdimenB\textheight\relax - \advance\@IEEEtrantmpdimenB\footskip\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB - \@IEEEtrantmpdimenB\paperheight - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin - % now subtract off the footer top margin - \advance\@IEEEtrantmpdimenB -\footskip\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by \@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the difference between the bottom - % and top footer margins - % our adjustment must be half this value to center the footer - \divide\@IEEEtrantmpdimenB by 2\relax - % add to the offset - \advance\@IEEEtrantmpdimenA by \@IEEEtrantmpdimenB -\else -\if\@IEEEextractedtoken b\relax - % calculate the bottom margin - \@IEEEtrantmpdimenB 1in\relax % system 1in offset - \advance\@IEEEtrantmpdimenB\topmargin\relax - \advance\@IEEEtrantmpdimenB\headheight\relax - \advance\@IEEEtrantmpdimenB\headsep\relax - \advance\@IEEEtrantmpdimenB\textheight\relax - \advance\@IEEEtrantmpdimenB\footskip\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenC by \@IEEEtrantmpdimenB - \@IEEEtrantmpdimenB\paperheight - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual footer bottom margin - % get the difference between the actual and the desired - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenA - \@IEEEtrantmpdimenA\@IEEEtrantmpdimenB -\else - \if\@IEEEextractedtoken t\relax - \else - \@IEEEclspkgerror{Unknown mode type `\@IEEEextractedtokenmacro' in \string\IEEEsetfootermargin\space (line \the\inputlineno).\MessageBreak - Defaulting to `t'}% - {Valid modes for \string\IEEEsetfootermargin\space are: t, b, c and a.}\relax - \fi - \@IEEEtrantmpdimenB\footskip\relax - \settodepth{\@IEEEtrantmpdimenC}{\begingroup #2\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - \settoheight{\@IEEEtrantmpdimenC}{\begingroup #1\relax\relax\relax\endgroup}\relax - \advance\@IEEEtrantmpdimenB by -\@IEEEtrantmpdimenC - % at this point \@IEEEtrantmpdimenB has the actual footer top margin - % get the difference between the desired and the actual - \advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpdimenB -\fi\fi % if t, b, c -\fi % if a -% advance \footskip by the needed amount -\advance\footskip by \@IEEEtrantmpdimenA\relax -} - -% -- End V1.8a page setup commands -- - - - - - -% V1.6 -% LaTeX is a little to quick to use hyphenations -% So, we increase the penalty for their use and raise -% the badness level that triggers an underfull hbox -% warning. The author may still have to tweak things, -% but the appearance will be much better "right out -% of the box" than that under V1.5 and prior. -% TeX default is 50 -\hyphenpenalty=750 -\ifCLASSOPTIONcompsoc -\hyphenpenalty 500 -\fi -% If we didn't adjust the interword spacing, 2200 might be better. -% The TeX default is 1000 -\hbadness=1350 -% The IEEE does not use extra spacing after punctuation -\frenchspacing - -% V1.7 increase this a tad to discourage equation breaks -\binoppenalty=1000 % default 700 -\relpenalty=800 % default 500 - -% v1.8a increase these to discourage widows and orphans -\clubpenalty=1000 % default 150 -\widowpenalty=1000 % default 150 -\displaywidowpenalty=1000 % default 50 - - -% margin note stuff -\marginparsep 10pt -\marginparwidth 20pt -\marginparpush 25pt - - -% if things get too close, go ahead and let them touch -\lineskip 0pt -\normallineskip 0pt -\lineskiplimit 0pt -\normallineskiplimit 0pt - -% The distance from the lower edge of the text body to the -% footline -\footskip 0.4in - -% normally zero, should be relative to font height. -% put in a little rubber to help stop some bad breaks (underfull vboxes) -\parskip 0ex plus 0.2ex minus 0.1ex - -\parindent 1.0em -\ifCLASSOPTIONcompsoc - \parindent 1.5em -\fi - -\headheight 12pt -\headsep 18pt -% use the normal font baselineskip -% so that \topskip is unaffected by changes in \baselinestretch -\topskip=\@IEEEnormalsizeunitybaselineskip - - -% V1.8 \maxdepth defaults to 4pt, but should be font size dependent -\maxdepth=0.5\@IEEEnormalsizeunitybaselineskip -\textheight 58pc % 9.63in, 696pt - -% set the default top margin to 58pt -% which results in a \topmargin of -49.59pt for 10pt documents -\IEEEsettopmargin{t}{58pt} -% tweak textheight to a perfect integer number of lines/column. -% standard is: 9pt/63 lpc; 10pt/58 lpc; 11pt/52 lpc; 12pt/50 lpc -\IEEEquantizetextheight{c} -% tweak top margin so that the error is shared equally at the top and bottom -\IEEEsettopmargin{q}{0sp} - - -\columnsep 1pc -\textwidth 43pc % 2 x 21pc + 1pc = 43pc - -% set the default side margins to center the text -\IEEEsetsidemargin{c}{0pt} - - -% adjust margins for default conference mode -\ifCLASSOPTIONconference - \textheight 9.25in % The standard for conferences (668.4975pt) - \IEEEsettopmargin{t}{0.75in} - % tweak textheight to a perfect integer number of lines/page. - % standard is: 9pt/61 lpc; 10pt/56 lpc; 11pt/50 lpc; 12pt/48 lpc - \IEEEquantizetextheight{c} - % tweak top margin so that the error is shared equally at the top and bottom - \IEEEsettopmargin{q}{0sp} -\fi - - -% compsoc text sizes, margins and spacings -\ifCLASSOPTIONcompsoc - \columnsep 12bp - % CS specs for \textwdith are 6.875in - % \textwidth 6.875in - % however, measurements from proofs show they are using 3.5in columns - \textwidth 7in - \advance\textwidth by \columnsep - % set the side margins to center the text - \IEEEsetsidemargin{c}{0pt} - % top/bottom margins to center - % could just set \textheight to 9.75in for all the different paper sizes - % and then quantize, but we'll do it the long way here to allow for easy - % future per-paper size adjustments - \IEEEsettextheight{0.625in}{0.625in}% 11in - 2 * 0.625in = 9.75in is the standard text height for compsoc journals - \IEEEsettopmargin{t}{0.625in} - \if@IEEEusingcspaper - \IEEEsettextheight{0.5in}{0.5in}% 10.75in - 2 * 0.5in = 9.75in - \IEEEsettopmargin{t}{0.5in} - \fi - \if@IEEEusingAfourpaper - \IEEEsettextheight{24.675mm}{24.675mm}% 297mm - 2 * 24.675mm = 247.650mm (9.75in) - \IEEEsettopmargin{t}{24.675mm} - \fi - % tweak textheight to a perfect integer number of lines/page. - % standard is: 9pt/65 lpc; 10pt/61 lpc; 11pt/53 lpc; 12pt/49 lpc - \IEEEquantizetextheight{c} - % tweak top margin so that the error is shared equally at the top and bottom - \IEEEsettopmargin{q}{0sp} - -% compsoc conference - \ifCLASSOPTIONconference - % compsoc conference use a larger value for columnsep - \columnsep 0.25in - \IEEEsettextwidth{0.75in}{0.75in} - % set the side margins to center the text (0.75in for letterpaper) - \IEEEsetsidemargin{c}{0pt} - % compsoc conferences want 1in top and bottom margin - \IEEEsettextheight{1in}{1in} - \IEEEsettopmargin{t}{1in} - % tweak textheight to a perfect integer number of lines/page. - % standard is: 9pt/58 lpc; 10pt/53 lpc; 11pt/48 lpc; 12pt/46 lpc - \IEEEquantizetextheight{c} - % tweak top margin so that the error is shared equally at the top and bottom - \IEEEsettopmargin{q}{0sp} - \fi -\fi - - - -% draft mode settings override that of all other modes -% provides a nice 1in margin all around the paper and extra -% space between the lines for editor's comments -\ifCLASSOPTIONdraftcls - % we want 1in side margins regardless of paper type - \IEEEsettextwidth{1in}{1in} - \IEEEsetsidemargin{c}{0pt} - % want 1in top and bottom margins - \IEEEsettextheight{1in}{1in} - \IEEEsettopmargin{t}{1in} - % digitize textheight to be an integer number of lines. - % this may cause the top and bottom margins to be off a tad - \IEEEquantizetextheight{c} - % tweak top margin so that the error is shared equally at the top and bottom - \IEEEsettopmargin{q}{0sp} -\fi - - - -% process CLASSINPUT inner/outer margin -% if inner margin defined, but outer margin not, set outer to inner. -\ifx\CLASSINPUTinnersidemargin\@IEEEundefined -\else - \ifx\CLASSINPUToutersidemargin\@IEEEundefined - \edef\CLASSINPUToutersidemargin{\CLASSINPUTinnersidemargin} - \fi -\fi - -\ifx\CLASSINPUToutersidemargin\@IEEEundefined -\else - % if outer margin defined, but inner margin not, set inner to outer. - \ifx\CLASSINPUTinnersidemargin\@IEEEundefined - \edef\CLASSINPUTinnersidemargin{\CLASSINPUToutersidemargin} - \fi - \IEEEsettextwidth{\CLASSINPUTinnersidemargin}{\CLASSINPUToutersidemargin} - \IEEEsetsidemargin{i}{\CLASSINPUTinnersidemargin} - \typeout{** ATTENTION: Overriding inner side margin to \CLASSINPUTinnersidemargin\space and - outer side margin to \CLASSINPUToutersidemargin\space via \string\CLASSINPUT.} -\fi - - - -% process CLASSINPUT top/bottom text margin -% if toptext margin defined, but bottomtext margin not, set bottomtext to toptext margin -\ifx\CLASSINPUTtoptextmargin\@IEEEundefined -\else - \ifx\CLASSINPUTbottomtextmargin\@IEEEundefined - \edef\CLASSINPUTbottomtextmargin{\CLASSINPUTtoptextmargin} - \fi -\fi - -\ifx\CLASSINPUTbottomtextmargin\@IEEEundefined -\else - % if bottomtext margin defined, but toptext margin not, set toptext to bottomtext margin - \ifx\CLASSINPUTtoptextmargin\@IEEEundefined - \edef\CLASSINPUTtoptextmargin{\CLASSINPUTbottomtextmargin} - \fi - \IEEEsettextheight{\CLASSINPUTtoptextmargin}{\CLASSINPUTbottomtextmargin} - \IEEEsettopmargin{t}{\CLASSINPUTtoptextmargin} - \typeout{** ATTENTION: Overriding top text margin to \CLASSINPUTtoptextmargin\space and - bottom text margin to \CLASSINPUTbottomtextmargin\space via \string\CLASSINPUT.} -\fi - - - -% default to center header and footer text in the margins -\IEEEsetheadermargin{c}{0pt} -\IEEEsetfootermargin{c}{0pt} - -% adjust header and footer positions for compsoc journals -\ifCLASSOPTIONcompsoc - \ifCLASSOPTIONjournal - \IEEEsetheadermargin{b}{\@IEEEnormalsizeunitybaselineskip} - \IEEEsetfootermargin{t}{\@IEEEnormalsizeunitybaselineskip} - \fi -\fi - - -% V1.8a display lines per column info message on user's console -\def\IEEEdisplayinfolinespercolumn{\@IEEEtrantmpdimenA=\textheight -% topskip represents only one line even if > baselineskip -\advance\@IEEEtrantmpdimenA by -1\topskip -\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA -\@IEEEtrantmpcountB=\@IEEEtrantmpdimenA -\divide\@IEEEtrantmpcountB by \baselineskip -% need to add one line to include topskip (first) line -\advance\@IEEEtrantmpcountB by 1 -% save lines per column value as text -\edef\@IEEEnumlinespercolumninfotxt{\the\@IEEEtrantmpcountB} -% backout topskip advance to allow direct \@IEEEtrantmpcountA comparison -\advance\@IEEEtrantmpcountB by -1 -% restore value as text height (without topskip) rather than just as number of lines -\multiply\@IEEEtrantmpcountB by \baselineskip -% is the column height an integer number of lines per column? -\ifnum\@IEEEtrantmpcountA=\@IEEEtrantmpcountB -\edef\@IEEEnumlinespercolumnexactinfotxt{exact} -\else -\@IEEEtrantmpdimenA\@IEEEtrantmpcountA sp\relax -\advance\@IEEEtrantmpdimenA by -\@IEEEtrantmpcountB sp\relax -\edef\@IEEEnumlinespercolumnexactinfotxt{approximate, difference = \the\@IEEEtrantmpdimenA} -\fi -\typeout{-- Lines per column: \@IEEEnumlinespercolumninfotxt\space (\@IEEEnumlinespercolumnexactinfotxt).}} -% delay execution till start of document to allow for user changes -\AtBeginDocument{\IEEEdisplayinfolinespercolumn} - - - -% LIST SPACING CONTROLS - -% Controls the amount of EXTRA spacing -% above and below \trivlist -% Both \list and IED lists override this. -% However, \trivlist will use this as will most -% things built from \trivlist like the \center -% environment. -\topsep 0.5\baselineskip - -% Controls the additional spacing around lists preceded -% or followed by blank lines. the IEEE does not increase -% spacing before or after paragraphs so it is set to zero. -% \z@ is the same as zero, but faster. -\partopsep \z@ - -% Controls the spacing between paragraphs in lists. -% The IEEE does not increase spacing before or after paragraphs -% so this is also zero. -% With IEEEtran.cls, global changes to -% this value DO affect lists (but not IED lists). -\parsep \z@ - -% Controls the extra spacing between list items. -% The IEEE does not put extra spacing between items. -% With IEEEtran.cls, global changes to this value DO affect -% lists (but not IED lists). -\itemsep \z@ - -% \itemindent is the amount to indent the FIRST line of a list -% item. It is auto set to zero within the \list environment. To alter -% it, you have to do so when you call the \list. -% However, the IEEE uses this for the theorem environment -% There is an alternative value for this near \leftmargini below -\itemindent -1em - -% \leftmargin, the spacing from the left margin of the main text to -% the left of the main body of a list item is set by \list. -% Hence this statement does nothing for lists. -% But, quote and verse do use it for indention. -\leftmargin 2em - -% we retain this stuff from the older IEEEtran.cls so that \list -% will work the same way as before. However, itemize, enumerate and -% description (IED) could care less about what these are as they -% all are overridden. -\leftmargini 2em -%\itemindent 2em % Alternative values: sometimes used. -%\leftmargini 0em -\leftmarginii 1em -\leftmarginiii 1.5em -\leftmarginiv 1.5em -\leftmarginv 1.0em -\leftmarginvi 1.0em -\labelsep 0.5em -\labelwidth \z@ - - -% The old IEEEtran.cls behavior of \list is retained. -% However, the new V1.3 IED list environments override all the -% @list stuff (\@listX is called within \list for the -% appropriate level just before the user's list_decl is called). -% \topsep is now 2pt as the IEEE puts a little extra space around -% lists - used by those non-IED macros that depend on \list. -% Note that \parsep and \itemsep are not redefined as in -% the sizexx.clo \@listX (which article.cls uses) so global changes -% of these values DO affect \list -% -\def\@listi{\leftmargin\leftmargini \topsep 2pt plus 1pt minus 1pt} -\let\@listI\@listi -\def\@listii{\leftmargin\leftmarginii\labelwidth\leftmarginii% - \advance\labelwidth-\labelsep \topsep 2pt} -\def\@listiii{\leftmargin\leftmarginiii\labelwidth\leftmarginiii% - \advance\labelwidth-\labelsep \topsep 2pt} -\def\@listiv{\leftmargin\leftmarginiv\labelwidth\leftmarginiv% - \advance\labelwidth-\labelsep \topsep 2pt} -\def\@listv{\leftmargin\leftmarginv\labelwidth\leftmarginv% - \advance\labelwidth-\labelsep \topsep 2pt} -\def\@listvi{\leftmargin\leftmarginvi\labelwidth\leftmarginvi% - \advance\labelwidth-\labelsep \topsep 2pt} - - -% The IEEE uses 5) not 5. -\def\labelenumi{\theenumi)} \def\theenumi{\arabic{enumi}} - -% The IEEE uses a) not (a) -\def\labelenumii{\theenumii)} \def\theenumii{\alph{enumii}} - -% The IEEE uses iii) not iii. -\def\labelenumiii{\theenumiii)} \def\theenumiii{\roman{enumiii}} - -% The IEEE uses A) not A. -\def\labelenumiv{\theenumiv)} \def\theenumiv{\Alph{enumiv}} - -% exactly the same as in article.cls -\def\p@enumii{\theenumi} -\def\p@enumiii{\theenumi(\theenumii)} -\def\p@enumiv{\p@enumiii\theenumiii} - -% itemized list label styles -\def\labelitemi{$\scriptstyle\bullet$} -\def\labelitemii{\textbf{--}} -\def\labelitemiii{$\ast$} -\def\labelitemiv{$\cdot$} - - - -% **** V1.3 ENHANCEMENTS **** -% Itemize, Enumerate and Description (IED) List Controls -% *************************** -% -% -% The IEEE seems to use at least two different values by -% which ITEMIZED list labels are indented to the right -% For The Journal of Lightwave Technology (JLT) and The Journal -% on Selected Areas in Communications (JSAC), they tend to use -% an indention equal to \parindent. For Transactions on Communications -% they tend to indent ITEMIZED lists a little more--- 1.3\parindent. -% We'll provide both values here for you so that you can choose -% which one you like in your document using a command such as: -% setlength{\IEEEilabelindent}{\IEEEilabelindentB} -\newdimen\IEEEilabelindentA -\IEEEilabelindentA \parindent - -\newdimen\IEEEilabelindentB -\IEEEilabelindentB 1.3\parindent -% However, we'll default to using \parindent -% which makes more sense to me -\newdimen\IEEEilabelindent -\IEEEilabelindent \IEEEilabelindentA - - -% This controls the default amount the enumerated list labels -% are indented to the right. -% Normally, this is the same as the paragraph indention -\newdimen\IEEEelabelindent -\IEEEelabelindent \parindent - -% This controls the default amount the description list labels -% are indented to the right. -% Normally, this is the same as the paragraph indention -\newdimen\IEEEdlabelindent -\IEEEdlabelindent \parindent - -% This is the value actually used within the IED lists. -% The IED environments automatically set its value to -% one of the three values above, so global changes do -% not have any effect -\newdimen\IEEElabelindent -\IEEElabelindent \parindent - -% The actual amount labels will be indented is -% \IEEElabelindent multiplied by the factor below -% corresponding to the level of nesting depth -% This provides a means by which the user can -% alter the effective \IEEElabelindent for deeper -% levels -% There may not be such a thing as correct "standard IEEE" -% values. What the IEEE actually does may depend on the specific -% circumstances. -% The first list level almost always has full indention. -% The second levels I've seen have only 75% of the normal indentation -% Three level or greater nestings are very rare. I am guessing -% that they don't use any indentation. -\def\IEEElabelindentfactori{1.0} % almost always one -\def\IEEElabelindentfactorii{0.75} % 0.0 or 1.0 may be used in some cases -\def\IEEElabelindentfactoriii{0.0} % 0.75? 0.5? 0.0? -\def\IEEElabelindentfactoriv{0.0} -\def\IEEElabelindentfactorv{0.0} -\def\IEEElabelindentfactorvi{0.0} - -% value actually used within IED lists, it is auto -% set to one of the 6 values above -% global changes here have no effect -\def\IEEElabelindentfactor{1.0} - -% This controls the default spacing between the end of the IED -% list labels and the list text, when normal text is used for -% the labels. -% compsoc uses a larger value here, but we'll set that later -% in the class so that this code block area can be extracted -% as-is for IEEEtrantools.sty -\newdimen\IEEEiednormlabelsep -\IEEEiednormlabelsep 0.6em - -% This controls the default spacing between the end of the IED -% list labels and the list text, when math symbols are used for -% the labels (nomenclature lists). The IEEE usually increases the -% spacing in these cases -\newdimen\IEEEiedmathlabelsep -\IEEEiedmathlabelsep 1.2em - -% This controls the extra vertical separation put above and -% below each IED list. the IEEE usually puts a little extra spacing -% around each list. However, this spacing is barely noticeable. -% compsoc uses a larger value here, but we'll set that later -% in the class so that this code block area can be extracted -% as-is for IEEEtrantools.sty -\newskip\IEEEiedtopsep -\IEEEiedtopsep 2pt plus 1pt minus 1pt - - -% This command is executed within each IED list environment -% at the beginning of the list. You can use this to set the -% parameters for some/all your IED list(s) without disturbing -% global parameters that affect things other than lists. -% i.e., renewcommand{\IEEEiedlistdecl}{\setlength{\labelsep}{5em}} -% will alter the \labelsep for the next list(s) until -% \IEEEiedlistdecl is redefined. -\def\IEEEiedlistdecl{\relax} - -% This command provides an easy way to set \leftmargin based -% on the \labelwidth, \labelsep and the argument \IEEElabelindent -% Usage: \IEEEcalcleftmargin{width-to-indent-the-label} -% output is in the \leftmargin variable, i.e., effectively: -% \leftmargin = argument + \labelwidth + \labelsep -% Note controlled spacing here, shield end of lines with % -\def\IEEEcalcleftmargin#1{\setlength{\leftmargin}{#1}% -\addtolength{\leftmargin}{\labelwidth}% -\addtolength{\leftmargin}{\labelsep}} - -% This command provides an easy way to set \labelwidth to the -% width of the given text. It is the same as -% \settowidth{\labelwidth}{label-text} -% and useful as a shorter alternative. -% Typically used to set \labelwidth to be the width -% of the longest label in the list -\def\IEEEsetlabelwidth#1{\settowidth{\labelwidth}{#1}} - -% When this command is executed, IED lists will use the -% IEEEiedmathlabelsep label separation rather than the normal -% spacing. To have an effect, this command must be executed via -% the \IEEEiedlistdecl or within the option of the IED list -% environments. -\def\IEEEusemathlabelsep{\setlength{\labelsep}{\IEEEiedmathlabelsep}} - -% A flag which controls whether the IED lists automatically -% calculate \leftmargin from \IEEElabelindent, \labelwidth and \labelsep -% Useful if you want to specify your own \leftmargin -% This flag must be set (\IEEEnocalcleftmargintrue or \IEEEnocalcleftmarginfalse) -% via the \IEEEiedlistdecl or within the option of the IED list -% environments to have an effect. -\newif\ifIEEEnocalcleftmargin -\IEEEnocalcleftmarginfalse - -% A flag which controls whether \IEEElabelindent is multiplied by -% the \IEEElabelindentfactor for each list level. -% This flag must be set via the \IEEEiedlistdecl or within the option -% of the IED list environments to have an effect. -\newif\ifIEEEnolabelindentfactor -\IEEEnolabelindentfactorfalse - - -% internal variable to indicate type of IED label -% justification -% 0 - left; 1 - center; 2 - right -\def\@IEEEiedjustify{0} - - -% commands to allow the user to control IED -% label justifications. Use these commands within -% the IED environment option or in the \IEEEiedlistdecl -% Note that changing the normal list justifications -% is nonstandard and the IEEE may not like it if you do so! -% I include these commands as they may be helpful to -% those who are using these enhanced list controls for -% other non-IEEE related LaTeX work. -% itemize and enumerate automatically default to right -% justification, description defaults to left. -\def\IEEEiedlabeljustifyl{\def\@IEEEiedjustify{0}}%left -\def\IEEEiedlabeljustifyc{\def\@IEEEiedjustify{1}}%center -\def\IEEEiedlabeljustifyr{\def\@IEEEiedjustify{2}}%right - - - - -% commands to save to and restore from the list parameter copies -% this allows us to set all the list parameters within -% the list_decl and prevent \list (and its \@list) -% from overriding any of our parameters -% V1.6 use \edefs instead of dimen's to conserve dimen registers -% Note controlled spacing here, shield end of lines with % -\def\@IEEEsavelistparams{\edef\@IEEEiedtopsep{\the\topsep}% -\edef\@IEEEiedlabelwidth{\the\labelwidth}% -\edef\@IEEEiedlabelsep{\the\labelsep}% -\edef\@IEEEiedleftmargin{\the\leftmargin}% -\edef\@IEEEiedpartopsep{\the\partopsep}% -\edef\@IEEEiedparsep{\the\parsep}% -\edef\@IEEEieditemsep{\the\itemsep}% -\edef\@IEEEiedrightmargin{\the\rightmargin}% -\edef\@IEEEiedlistparindent{\the\listparindent}% -\edef\@IEEEieditemindent{\the\itemindent}} - -% Note controlled spacing here -\def\@IEEErestorelistparams{\topsep\@IEEEiedtopsep\relax% -\labelwidth\@IEEEiedlabelwidth\relax% -\labelsep\@IEEEiedlabelsep\relax% -\leftmargin\@IEEEiedleftmargin\relax% -\partopsep\@IEEEiedpartopsep\relax% -\parsep\@IEEEiedparsep\relax% -\itemsep\@IEEEieditemsep\relax% -\rightmargin\@IEEEiedrightmargin\relax% -\listparindent\@IEEEiedlistparindent\relax% -\itemindent\@IEEEieditemindent\relax} - - -% v1.6b provide original LaTeX IED list environments -% note that latex.ltx defines \itemize and \enumerate, but not \description -% which must be created by the base classes -% save original LaTeX itemize and enumerate -\let\LaTeXitemize\itemize -\let\endLaTeXitemize\enditemize -\let\LaTeXenumerate\enumerate -\let\endLaTeXenumerate\endenumerate - -% provide original LaTeX description environment from article.cls -\newenvironment{LaTeXdescription} - {\list{}{\labelwidth\z@ \itemindent-\leftmargin - \let\makelabel\descriptionlabel}} - {\endlist} -\newcommand*\descriptionlabel[1]{\hspace\labelsep - \normalfont\bfseries #1} - - -% override LaTeX's default IED lists -\def\itemize{\@IEEEitemize} -\def\enditemize{\@endIEEEitemize} -\def\enumerate{\@IEEEenumerate} -\def\endenumerate{\@endIEEEenumerate} -\def\description{\@IEEEdescription} -\def\enddescription{\@endIEEEdescription} - -% provide the user with aliases - may help those using packages that -% override itemize, enumerate, or description -\def\IEEEitemize{\@IEEEitemize} -\def\endIEEEitemize{\@endIEEEitemize} -\def\IEEEenumerate{\@IEEEenumerate} -\def\endIEEEenumerate{\@endIEEEenumerate} -\def\IEEEdescription{\@IEEEdescription} -\def\endIEEEdescription{\@endIEEEdescription} - - -% V1.6 we want to keep the IEEEtran IED list definitions as our own internal -% commands so they are protected against redefinition -\def\@IEEEitemize{\@ifnextchar[{\@@IEEEitemize}{\@@IEEEitemize[\relax]}} -\def\@IEEEenumerate{\@ifnextchar[{\@@IEEEenumerate}{\@@IEEEenumerate[\relax]}} -\def\@IEEEdescription{\@ifnextchar[{\@@IEEEdescription}{\@@IEEEdescription[\relax]}} -\def\@endIEEEitemize{\endlist} -\def\@endIEEEenumerate{\endlist} -\def\@endIEEEdescription{\endlist} - - -% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS -% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS -% IEEEtran itemized list MDS 1/2001 -% Note controlled spacing here, shield end of lines with % -\def\@@IEEEitemize[#1]{% - \ifnum\@itemdepth>3\relax\@toodeep\else% - \ifnum\@listdepth>5\relax\@toodeep\else% - \advance\@itemdepth\@ne% - \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% - % get the IEEElabelindentfactor for this level - \advance\@listdepth\@ne% we need to know what the level WILL be - \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% - \advance\@listdepth-\@ne% undo our increment - \def\@IEEEiedjustify{2}% right justified labels are default - % set other defaults - \IEEEnocalcleftmarginfalse% - \IEEEnolabelindentfactorfalse% - \topsep\IEEEiedtopsep% - \IEEElabelindent\IEEEilabelindent% - \labelsep\IEEEiednormlabelsep% - \partopsep 0ex% - \parsep 0ex% - \itemsep 0ex% - \rightmargin 0em% - \listparindent 0em% - \itemindent 0em% - % calculate the label width - % the user can override this later if - % they specified a \labelwidth - \settowidth{\labelwidth}{\csname labelitem\romannumeral\the\@itemdepth\endcsname}% - \@IEEEsavelistparams% save our list parameters - \list{\csname\@itemitem\endcsname}{% - \@IEEErestorelistparams% override any list{} changes - % to our globals - \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel - \IEEEiedlistdecl% let user alter parameters - #1\relax% - % If the user has requested not to use the - % IEEElabelindent factor, don't revise \IEEElabelindent - \ifIEEEnolabelindentfactor\relax% - \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% - \fi% - % Unless the user has requested otherwise, - % calculate our left margin based - % on \IEEElabelindent, \labelwidth and - % \labelsep - \ifIEEEnocalcleftmargin\relax% - \else\IEEEcalcleftmargin{\IEEElabelindent}% - \fi}\fi\fi}% - - -% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS -% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS -% IEEEtran enumerate list MDS 1/2001 -% Note controlled spacing here, shield end of lines with % -\def\@@IEEEenumerate[#1]{% - \ifnum\@enumdepth>3\relax\@toodeep\else% - \ifnum\@listdepth>5\relax\@toodeep\else% - \advance\@enumdepth\@ne% - \edef\@enumctr{enum\romannumeral\the\@enumdepth}% - % get the IEEElabelindentfactor for this level - \advance\@listdepth\@ne% we need to know what the level WILL be - \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% - \advance\@listdepth-\@ne% undo our increment - \def\@IEEEiedjustify{2}% right justified labels are default - % set other defaults - \IEEEnocalcleftmarginfalse% - \IEEEnolabelindentfactorfalse% - \topsep\IEEEiedtopsep% - \IEEElabelindent\IEEEelabelindent% - \labelsep\IEEEiednormlabelsep% - \partopsep 0ex% - \parsep 0ex% - \itemsep 0ex% - \rightmargin 0em% - \listparindent 0em% - \itemindent 0em% - % calculate the label width - % We'll set it to the width suitable for all labels using - % normalfont 1) to 9) - % The user can override this later - \settowidth{\labelwidth}{9)}% - \@IEEEsavelistparams% save our list parameters - \list{\csname label\@enumctr\endcsname}{\usecounter{\@enumctr}% - \@IEEErestorelistparams% override any list{} changes - % to our globals - \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel - \IEEEiedlistdecl% let user alter parameters - #1\relax% - % If the user has requested not to use the - % IEEElabelindent factor, don't revise \IEEElabelindent - \ifIEEEnolabelindentfactor\relax% - \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% - \fi% - % Unless the user has requested otherwise, - % calculate our left margin based - % on \IEEElabelindent, \labelwidth and - % \labelsep - \ifIEEEnocalcleftmargin\relax% - \else\IEEEcalcleftmargin{\IEEElabelindent}% - \fi}\fi\fi}% - - -% DO NOT ALLOW BLANK LINES TO BE IN THESE IED ENVIRONMENTS -% AS THIS WILL FORCE NEW PARAGRAPHS AFTER THE IED LISTS -% IEEEtran description list MDS 1/2001 -% Note controlled spacing here, shield end of lines with % -\def\@@IEEEdescription[#1]{% - \ifnum\@listdepth>5\relax\@toodeep\else% - % get the IEEElabelindentfactor for this level - \advance\@listdepth\@ne% we need to know what the level WILL be - \edef\IEEElabelindentfactor{\csname IEEElabelindentfactor\romannumeral\the\@listdepth\endcsname}% - \advance\@listdepth-\@ne% undo our increment - \def\@IEEEiedjustify{0}% left justified labels are default - % set other defaults - \IEEEnocalcleftmarginfalse% - \IEEEnolabelindentfactorfalse% - \topsep\IEEEiedtopsep% - \IEEElabelindent\IEEEdlabelindent% - % assume normal labelsep - \labelsep\IEEEiednormlabelsep% - \partopsep 0ex% - \parsep 0ex% - \itemsep 0ex% - \rightmargin 0em% - \listparindent 0em% - \itemindent 0em% - % Bogus label width in case the user forgets - % to set it. - % TIP: If you want to see what a variable's width is you - % can use the TeX command \showthe\width-variable to - % display it on the screen during compilation - % (This might be helpful to know when you need to find out - % which label is the widest) - \settowidth{\labelwidth}{Hello}% - \@IEEEsavelistparams% save our list parameters - \list{}{\@IEEErestorelistparams% override any list{} changes - % to our globals - \let\makelabel\@IEEEiedmakelabel% v1.6b setup \makelabel - \IEEEiedlistdecl% let user alter parameters - #1\relax% - % If the user has requested not to use the - % labelindent factor, don't revise \IEEElabelindent - \ifIEEEnolabelindentfactor\relax% - \else\IEEElabelindent=\IEEElabelindentfactor\IEEElabelindent% - \fi% - % Unless the user has requested otherwise, - % calculate our left margin based - % on \IEEElabelindent, \labelwidth and - % \labelsep - \ifIEEEnocalcleftmargin\relax% - \else\IEEEcalcleftmargin{\IEEElabelindent}\relax% - \fi}\fi} - -% v1.6b we use one makelabel that does justification as needed. -\def\@IEEEiedmakelabel#1{\relax\if\@IEEEiedjustify 0\relax -\makebox[\labelwidth][l]{\normalfont #1}\else -\if\@IEEEiedjustify 1\relax -\makebox[\labelwidth][c]{\normalfont #1}\else -\makebox[\labelwidth][r]{\normalfont #1}\fi\fi} - - -% compsoc uses a larger value for the normal labelsep -% and also extra spacing above and below each list -\ifCLASSOPTIONcompsoc - \IEEEiednormlabelsep 1.2em - \IEEEiedtopsep 6pt plus 3pt minus 3pt -\fi - - -% VERSE and QUOTE -% V1.7 define environments with newenvironment -\newenvironment{verse}{\let\\=\@centercr - \list{}{\itemsep\z@ \itemindent -1.5em \listparindent \itemindent - \rightmargin\leftmargin\advance\leftmargin 1.5em}\item\relax} - {\endlist} -\newenvironment{quotation}{\list{}{\listparindent 1.5em \itemindent\listparindent - \rightmargin\leftmargin \parsep 0pt plus 1pt}\item\relax} - {\endlist} -\newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item\relax} - {\endlist} - - -% \titlepage -% provided only for backward compatibility. \maketitle is the correct -% way to create the title page. -\def\titlepage{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn - \else \newpage \fi \thispagestyle{empty}\c@page\z@} -\def\endtitlepage{\if@restonecol\twocolumn \else \newpage \fi} - -% standard values from article.cls -\arraycolsep 5pt -\arrayrulewidth .4pt -\doublerulesep 2pt - -\tabcolsep 6pt -\tabbingsep 0.5em - - -%% FOOTNOTES -% -%\skip\footins 10pt plus 4pt minus 2pt -% V1.6 respond to changes in font size -% space added above the footnotes (if present) -\skip\footins 0.9\baselineskip plus 0.4\baselineskip minus 0.2\baselineskip - -% V1.6, we need to make \footnotesep responsive to changes -% in \baselineskip or strange spacings will result when in -% draft mode. Here is a little LaTeX secret - \footnotesep -% determines the height of an invisible strut that is placed -% *above* the baseline of footnotes after the first. Since -% LaTeX considers the space for characters to be 0.7\baselineskip -% above the baseline and 0.3\baselineskip below it, we need to -% use 0.7\baselineskip as a \footnotesep to maintain equal spacing -% between all the lines of the footnotes. The IEEE often uses a tad -% more, so use 0.8\baselineskip. This slightly larger value also helps -% the text to clear the footnote marks. Note that \thanks in IEEEtran -% uses its own value of \footnotesep which is set in \maketitle. -{\footnotesize -\global\footnotesep 0.8\baselineskip} - - -\skip\@mpfootins = \skip\footins -\fboxsep = 3pt -\fboxrule = .4pt -% V1.6 use 1em, then use LaTeX2e's \@makefnmark -% Note that the IEEE normally *left* aligns the footnote marks, so we don't need -% box resizing tricks here. -\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@makefnmark}#1}% V1.6 use 1em -% V1.7 compsoc does not use superscipts for footnote marks -\ifCLASSOPTIONcompsoc -\def\@IEEEcompsocmakefnmark{\hbox{\normalfont\@thefnmark.\ }} -\long\def\@makefntext#1{\parindent 1em\indent\hbox{\@IEEEcompsocmakefnmark}#1} -\fi - -% The IEEE does not use footnote rules -\def\footnoterule{} - -% V1.7 for compsoc, the IEEE uses a footnote rule only for \thanks. We devise a "one-shot" -% system to implement this. -\newif\if@IEEEenableoneshotfootnoterule -\@IEEEenableoneshotfootnoterulefalse -\ifCLASSOPTIONcompsoc -\def\footnoterule{\relax\if@IEEEenableoneshotfootnoterule -\kern-5pt -\hbox to \columnwidth{\hfill\vrule width 0.5\columnwidth height 0.4pt\hfill} -\kern4.6pt -\global\@IEEEenableoneshotfootnoterulefalse -\else -\relax -\fi} -\fi - -% V1.6 do not allow LaTeX to break a footnote across multiple pages -\interfootnotelinepenalty=10000 - -% V1.6 discourage breaks within equations -% Note that amsmath normally sets this to 10000, -% but LaTeX2e normally uses 100. -\interdisplaylinepenalty=2500 - -% default allows section depth up to /paragraph -\setcounter{secnumdepth}{4} - -% technotes do not allow /paragraph -\ifCLASSOPTIONtechnote - \setcounter{secnumdepth}{3} -\fi -% neither do compsoc conferences -\@IEEEcompsocconfonly{\setcounter{secnumdepth}{3}} - - -\newcounter{section} -\newcounter{subsection}[section] -\newcounter{subsubsection}[subsection] -\newcounter{paragraph}[subsubsection] - -% used only by IEEEtran's IEEEeqnarray as other packages may -% have their own, different, implementations -\newcounter{IEEEsubequation}[equation] - -% as shown when called by user from \ref, \label and in table of contents -\def\theequation{\arabic{equation}} % 1 -\def\theIEEEsubequation{\theequation\alph{IEEEsubequation}} % 1a (used only by IEEEtran's IEEEeqnarray) -\ifCLASSOPTIONcompsoc -% compsoc is all arabic -\def\thesection{\arabic{section}} -\def\thesubsection{\thesection.\arabic{subsection}} -\def\thesubsubsection{\thesubsection.\arabic{subsubsection}} -\def\theparagraph{\thesubsubsection.\arabic{paragraph}} -\else -\def\thesection{\Roman{section}} % I -% V1.7, \mbox prevents breaks around - -\def\thesubsection{\mbox{\thesection-\Alph{subsection}}} % I-A -% V1.7 use I-A1 format used by the IEEE rather than I-A.1 -\def\thesubsubsection{\thesubsection\arabic{subsubsection}} % I-A1 -\def\theparagraph{\thesubsubsection\alph{paragraph}} % I-A1a -\fi - -% From Heiko Oberdiek. Because of the \mbox in \thesubsection, we need to -% tell hyperref to disable the \mbox command when making PDF bookmarks. -% This done already with hyperref.sty version 6.74o and later, but -% it will not hurt to do it here again for users of older versions. -\@ifundefined{pdfstringdefPreHook}{\let\pdfstringdefPreHook\@empty}{}% -\g@addto@macro\pdfstringdefPreHook{\let\mbox\relax} - - -% Main text forms (how shown in main text headings) -% V1.6, using \thesection in \thesectiondis allows changes -% in the former to automatically appear in the latter -\ifCLASSOPTIONcompsoc - \ifCLASSOPTIONconference% compsoc conference - \def\thesectiondis{\thesection.} - \def\thesubsectiondis{\thesectiondis\arabic{subsection}.} - \def\thesubsubsectiondis{\thesubsectiondis\arabic{subsubsection}.} - \def\theparagraphdis{\thesubsubsectiondis\arabic{paragraph}.} - \else% compsoc not conferencs - \def\thesectiondis{\thesection} - \def\thesubsectiondis{\thesectiondis.\arabic{subsection}} - \def\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}} - \def\theparagraphdis{\thesubsubsectiondis.\arabic{paragraph}} - \fi -\else% not compsoc - \def\thesectiondis{\thesection.} % I. - \def\thesubsectiondis{\Alph{subsection}.} % B. - \def\thesubsubsectiondis{\arabic{subsubsection})} % 3) - \def\theparagraphdis{\alph{paragraph})} % d) -\fi - -% just like LaTeX2e's \@eqnnum -\def\theequationdis{{\normalfont \normalcolor (\theequation)}}% (1) -% IEEEsubequation used only by IEEEtran's IEEEeqnarray -\def\theIEEEsubequationdis{{\normalfont \normalcolor (\theIEEEsubequation)}}% (1a) -% redirect LaTeX2e's equation number display and all that depend on -% it, through IEEEtran's \theequationdis -\def\@eqnnum{\theequationdis} - - - -% V1.7 provide string macros as article.cls does -\def\contentsname{Contents} -\def\listfigurename{List of Figures} -\def\listtablename{List of Tables} -\def\refname{References} -\def\indexname{Index} -\def\figurename{Fig.} -\def\tablename{TABLE} -\@IEEEcompsocconfonly{\def\figurename{Figure}} -\def\partname{Part} -\def\appendixname{Appendix} -\def\abstractname{Abstract} -% IEEE specific names -\def\IEEEkeywordsname{Index Terms} -\def\IEEEproofname{Proof} - - -% LIST OF FIGURES AND TABLES AND TABLE OF CONTENTS -% -\def\@pnumwidth{1.55em} -\def\@tocrmarg{2.55em} -\def\@dotsep{4.5} -\setcounter{tocdepth}{3} - -% adjusted some spacings here so that section numbers will not easily -% collide with the section titles. -% VIII; VIII-A; and VIII-A.1 are usually the worst offenders. -% MDS 1/2001 -\def\tableofcontents{\section*{\contentsname}\@starttoc{toc}} -\def\l@section#1#2{\addpenalty{\@secpenalty}\addvspace{1.0em plus 1pt}% - \@tempdima 2.75em \begingroup \parindent \z@ \rightskip \@pnumwidth% - \parfillskip-\@pnumwidth {\bfseries\leavevmode #1}\hfil\hbox to\@pnumwidth{\hss #2}\par% - \endgroup} -% argument format #1:level, #2:labelindent,#3:labelsep -\def\l@subsection{\@dottedtocline{2}{2.75em}{3.75em}} -\def\l@subsubsection{\@dottedtocline{3}{6.5em}{4.5em}} -% must provide \l@ defs for ALL sublevels EVEN if tocdepth -% is such as they will not appear in the table of contents -% these defs are how TOC knows what level these things are! -\def\l@paragraph{\@dottedtocline{4}{6.5em}{5.5em}} -\def\l@subparagraph{\@dottedtocline{5}{6.5em}{6.5em}} -\def\listoffigures{\section*{\listfigurename}\@starttoc{lof}} -\def\l@figure{\@dottedtocline{1}{0em}{2.75em}} -\def\listoftables{\section*{\listtablename}\@starttoc{lot}} -\let\l@table\l@figure - - -% Definitions for floats -% -% Normal Floats -% V1.8 floatsep et al. revised down by 0.15\baselineskip -% to account for the sideeffects of \topskip compensation -\floatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip -\textfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip -\@fptop 0pt plus 1fil -\@fpsep 0.75\baselineskip plus 2fil -\@fpbot 0pt plus 1fil -\def\topfraction{0.9} -\def\bottomfraction{0.4} -\def\floatpagefraction{0.8} -% V1.7, let top floats approach 90% of page -\def\textfraction{0.1} - -% Double Column Floats -\dblfloatsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip - -\dbltextfloatsep 1.55\baselineskip plus 0.2\baselineskip minus 0.4\baselineskip -% Note that it would be nice if the rubber here actually worked in LaTeX2e. -% There is a long standing limitation in LaTeX, first discovered (to the best -% of my knowledge) by Alan Jeffrey in 1992. LaTeX ignores the stretchable -% portion of \dbltextfloatsep, and as a result, double column figures can and -% do result in an non-integer number of lines in the main text columns with -% underfull vbox errors as a consequence. A post to comp.text.tex -% by Donald Arseneau confirms that this had not yet been fixed in 1998. -% IEEEtran V1.6 will fix this problem for you in the titles, but it doesn't -% protect you from other double floats. Happy vspace'ing. - -\@dblfptop 0pt plus 1fil -\@dblfpsep 0.75\baselineskip plus 2fil -\@dblfpbot 0pt plus 1fil -\def\dbltopfraction{0.8} -\def\dblfloatpagefraction{0.8} -\setcounter{dbltopnumber}{4} - -\intextsep 0.85\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip -\setcounter{topnumber}{2} -\setcounter{bottomnumber}{2} -\setcounter{totalnumber}{4} - - - -% article class provides these, we should too. -\newlength\abovecaptionskip -\newlength\belowcaptionskip -% but only \abovecaptionskip is used above figure captions and *below* table -% captions -\setlength\abovecaptionskip{0.5\baselineskip} -% compsoc journals are a little more generous -\ifCLASSOPTIONcompsoc\ifCLASSOPTIONjournal - \setlength\abovecaptionskip{0.75\baselineskip} -\fi\fi -\setlength\belowcaptionskip{0pt} -% V1.6 create hooks in case the caption spacing ever needs to be -% overridden by a user -\def\@IEEEfigurecaptionsepspace{\vskip\abovecaptionskip\relax}% -\def\@IEEEtablecaptionsepspace{\vskip\abovecaptionskip\relax}% - - -% 1.6b revise caption system so that \@makecaption uses two arguments -% as with LaTeX2e. Otherwise, there will be problems when using hyperref. -\def\@IEEEtablestring{table} - - -% V1.8 compensate for \topskip so top of top figures align with tops of the first lines of main text -% here we calculate a space equal to the amount \topskip exceeds the main text height -% we hook in at \@floatboxreset -\def\@IEEEfiguretopskipspace{\ifdim\prevdepth=-1000pt\relax -\setlength{\@IEEEtrantmpdimenA}{1\topskip}\relax -\addtolength{\@IEEEtrantmpdimenA}{-0.7\@IEEEnormalsizeunitybaselineskip}\relax -\vspace*{\@IEEEtrantmpdimenA}\fi} -% V1.8 compensate for \topskip at the top of top tables so caption text is on main text baseline -% use a strut set on the caption baseline within \@makecaption -\def\@IEEEtabletopskipstrut{\ifdim\prevdepth=-1000pt\rule{0pt}{\topskip}\fi} -% the \ifdim\prevdepth checks are always expected to be true for IEEE style float caption ordering -% because top of figure content and top of captions in tables is the first thing on the vertical -% list of these floats -% thanks to Donald Arseneau for his 2000/11/11 post "Re: caption hacking" with info on this topic. - - -\ifCLASSOPTIONcompsoc -% V1.7 compsoc \@makecaption -\ifCLASSOPTIONconference% compsoc conference -\long\def\@makecaption#1#2{% -% test if is a for a figure or table -\ifx\@captype\@IEEEtablestring% -% if a table, do table caption -\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize {#1.}\nobreakspace\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% -\@IEEEtablecaptionsepspace -% if not a table, format it as a figure -\else -\@IEEEfigurecaptionsepspace -\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace #2}% -\ifdim \wd\@tempboxa >\hsize% -% if caption is longer than a line, let it wrap around -\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace}% -\parbox[t]{\hsize}{\normalfont\footnotesize \noindent\unhbox\@tempboxa#2}% -% if caption is shorter than a line, center -\else% -\hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% -\fi\fi} -% -\else% nonconference compsoc -\long\def\@makecaption#1#2{% -% test if is a for a figure or table -\ifx\@captype\@IEEEtablestring% -% if a table, do table caption -\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\sffamily\footnotesize #1}\\{\normalfont\sffamily\footnotesize #2}\par\addvspace{0.5\baselineskip}\egroup% -\@IEEEtablecaptionsepspace -% if not a table, format it as a figure -\else -\@IEEEfigurecaptionsepspace -\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace #2}% -\ifdim \wd\@tempboxa >\hsize% -% if caption is longer than a line, let it wrap around -\setbox\@tempboxa\hbox{\normalfont\sffamily\footnotesize {#1.}\nobreakspace}% -\parbox[t]{\hsize}{\normalfont\sffamily\footnotesize \noindent\unhbox\@tempboxa#2}% -% if caption is shorter than a line, left justify -\else% -\hbox to\hsize{\normalfont\sffamily\footnotesize\box\@tempboxa\hfil}% -\fi\fi} -\fi -% -\else% traditional noncompsoc \@makecaption -\long\def\@makecaption#1#2{% -% test if is a for a figure or table -\ifx\@captype\@IEEEtablestring% -% if a table, do table caption -\footnotesize\bgroup\par\centering\@IEEEtabletopskipstrut{\normalfont\footnotesize #1}\\{\normalfont\footnotesize\scshape #2}\par\addvspace{0.5\baselineskip}\egroup% -\@IEEEtablecaptionsepspace -% if not a table, format it as a figure -\else -\@IEEEfigurecaptionsepspace -% 3/2001 use footnotesize, not small; use two nonbreaking spaces, not one -\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace #2}% -\ifdim \wd\@tempboxa >\hsize% -% if caption is longer than a line, let it wrap around -\setbox\@tempboxa\hbox{\normalfont\footnotesize {#1.}\nobreakspace\nobreakspace}% -\parbox[t]{\hsize}{\normalfont\footnotesize\noindent\unhbox\@tempboxa#2}% -% if caption is shorter than a line, center if conference, left justify otherwise -\else% -\ifCLASSOPTIONconference \hbox to\hsize{\normalfont\footnotesize\hfil\box\@tempboxa\hfil}% -\else \hbox to\hsize{\normalfont\footnotesize\box\@tempboxa\hfil}% -\fi\fi\fi} -\fi - - - -% V1.7 disable captions class option, do so in a way that retains operation of \label -% within \caption -\ifCLASSOPTIONcaptionsoff -\long\def\@makecaption#1#2{\vspace*{2em}\footnotesize\bgroup\par\addvspace{0.5\baselineskip}\centering{\footnotesize #1}\par\addvspace{0.5\baselineskip}\egroup% -\let\@IEEEtemporiglabeldefsave\label -\let\@IEEEtemplabelargsave\relax -\def\label##1{\gdef\@IEEEtemplabelargsave{##1}}% -\setbox\@tempboxa\hbox{#2}% -\let\label\@IEEEtemporiglabeldefsave -\ifx\@IEEEtemplabelargsave\relax\else\label{\@IEEEtemplabelargsave}\fi} -\fi - - -% V1.7 define end environments with \def not \let so as to work OK with -% preview-latex -\newcounter{figure} -\def\thefigure{\@arabic\c@figure} -\def\fps@figure{tbp} -\def\ftype@figure{1} -\def\ext@figure{lof} -\def\fnum@figure{\figurename\nobreakspace\thefigure} -% V1.8 within figures add \@IEEEfiguretopskipspace compensation to LaTeX2e's \@floatboxreset -\def\figure{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@float{figure}} -\def\endfigure{\end@float} -% V1.8 also add \@IEEEfiguretopskipspace compensation to \figure* -\@namedef{figure*}{\def\@floatboxreset{\reset@font\normalsize\@setminipage\@IEEEfiguretopskipspace}\@dblfloat{figure}} -\@namedef{endfigure*}{\end@dblfloat} - -\newcounter{table} -\ifCLASSOPTIONcompsoc -\def\thetable{\arabic{table}} -\else -\def\thetable{\@Roman\c@table} -\fi -\def\fps@table{tbp} -\def\ftype@table{2} -\def\ext@table{lot} -\def\fnum@table{\tablename\nobreakspace\thetable} -% V1.6 The IEEE uses 8pt text for tables -% within tables alter LaTeX2e's \@floatboxreset to use \footnotesize -\def\table{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@float{table}} -\def\endtable{\end@float} -% v1.6b double column tables need to default to footnotesize as well. -\@namedef{table*}{\def\@floatboxreset{\reset@font\footnotesize\@setminipage}\@dblfloat{table}} -\@namedef{endtable*}{\end@dblfloat} - - - - -%% -- Command Argument Scanning Support Functions -- -%% V1.8a - -% usage: \@IEEEstripouterbraces*{} -% \@IEEEstripouterbraces fully expands its argument (which it then stores -% in \@IEEEstripouterbracesarg) via \edef, then removes any outer enclosing -% braces, and finally stores the result in the macro -% \@IEEEstrippedouterbraces. -% -% For example: -% \@IEEEstripouterbraces{{{{ab}c}}} -% results in: -% -% \@IEEEstripouterbracesarg ==> a macro containing {{{ab}c}} -% \@IEEEstrippedouterbraces ==> a macro containing {ab}c -% -% the *-star form,\@IEEEstripouterbraces*, does not expand the argument -% contents during processing -\def\@IEEEstripouterbraces{\@ifstar{\let\@IEEEstripouterbracesdef=\def\@@IEEEstripouterbraces}{\let\@IEEEstripouterbracesdef=\edef\@@IEEEstripouterbraces}} - -\def\@@IEEEstripouterbraces#1{\@IEEEstripouterbracesdef\@IEEEstripouterbracesarg{#1}\relax -% If the macro is unchanged after being acquired as a single delimited -% argument, we know we have one sequence of tokens without any enclosing -% braces. Loop until this is true. -\loop - \expandafter\@@@IEEEstripouterbraces\@IEEEstripouterbracesarg\@IEEEgeneralsequenceDELIMITER -\ifx\@IEEEstrippedouterbraces\@IEEEstripouterbracesarg -\else - \let\@IEEEstripouterbracesarg\@IEEEstrippedouterbraces -\repeat} - -\def\@@@IEEEstripouterbraces#1\@IEEEgeneralsequenceDELIMITER{\def\@IEEEstrippedouterbraces{#1}} - - - -% usage: \@IEEEextractgroup*{} -% \@IEEEextractgroup fully expands its argument (which it then stores in -% \@IEEEextractgrouparg) via \edef and then assigns the first "brace group" -% of tokens to the macro \@IEEEextractedgroup. -% The remaining groups, if any, are stored in the macro -% \@IEEEextractedgroupremain. If the argument does not contain the requisite -% groups, the respective macros will be defined to be empty. -% There is an asymmetry in that \@IEEEextractedgroup is stripped of its first -% outer grouping while \@IEEEextractedgroupremain retains even the outer -% grouping (if present) that originally identified it as a group. -% -% For example: -% \@IEEEextractgroup{{{ab}}{c{de}}} -% results in: -% -% \@IEEEextractgrouparg ==> a macro containing {{ab}}{c{de}} -% \@IEEEextractedgroup ==> a macro containing {ab} -% \@IEEEextractedgroupremain ==> a macro containing {c{de}} -% -% The *-star form, \@IEEEextractgroup*, does not expand its argument -% contents during processing. -\def\@IEEEextractgroup{\@ifstar{\let\@IEEEextractgroupdef=\def\@@IEEEextractgroup}{\let\@IEEEextractgroupdef=\edef\@@IEEEextractgroup}} - -\def\@@IEEEextractgroup#1{\@IEEEextractgroupdef\@IEEEextractgrouparg{#1}\relax -% trap the case of an empty extracted group as this would cause problems with -% \@IEEEextractgroupremain's argument acquisition -\ifx\@IEEEextractgrouparg\@empty - \def\@IEEEextractedgroup{}\relax - \def\@IEEEextractedgroupremain{}\relax -\else - % We have to use some dirty tricks here. We want to insert {} around - % whatever remains after the first group so that TeX's argument scanner - % will preserve any originally enclosing braces as well as provide an - % empty argument to acquire even if there isn't a second group. - % In this first of two dirty tricks, we put a } at the end of the structure - % we are going to extract from. The \ifnum0=`{\fi keeps TeX happy to allow - % what would otherwise be an unbalanced macro definition for - % \@@IEEEextractgroup to be acceptable to it. - \ifnum0=`{\fi\expandafter\@IEEEextractgroupremain\@IEEEextractgrouparg}\relax -\fi} - -% In the second part of the dirty tricks, we insert a leading { right after -% the first group is acquired, but before the remainder is. Again, the -% \ifnum0=`}\fi keeps TeX happy during definition time, but will disappear -% during run time. -\def\@IEEEextractgroupremain#1{\def\@IEEEextractedgroup{#1}\expandafter\@@IEEEextractgroupremain\expandafter{\ifnum0=`}\fi} - -\def\@@IEEEextractgroupremain#1{\def\@IEEEextractedgroupremain{#1}} - - - -% \@IEEEextracttoken relocated at top because margin setting commands rely on it - - - -% usage: \@IEEEextracttokengroups*{} -% \@IEEEextracttokengroups fully expands its argument (which it then stores -% in \@IEEEextracttokengroupsarg) and then assigns the first "brace group" of -% tokens (with the outermost braces removed) to the macro -% \@IEEEextractedfirstgroup. -% The meaning of the first nonbrace (but including the empty group) token -% within this first group is assigned via \let to \@IEEEextractedfirsttoken -% as well as stored in the macro \@IEEEextractedfirsttokenmacro. If a first -% nonbrace token does not exist (or is an empty group), these will be \relax -% and empty, respectively. Tokens that would otherwise be discarded during -% the acquisition of the first token in the first group are stored in -% \@IEEEextractedfirsttokensdiscarded, however their original relative brace -% nesting depths are not guaranteed to be preserved. -% The first group within this first group is stored in the macro -% \@IEEEextractedfirstfirstgroup. -% Likewise for the next group after the first: \@IEEEextractednextgroup, -% \@IEEEextractednextfirstgroup, \@IEEEextractednextgroupfirsttoken, -% \@IEEEextractednextgroupfirsttokenmacro, and -% \@IEEEextractednextfirsttokensdiscarded. -% All tokens/groups after the first group, including any enclosing braces, -% are stored in the macro \@IEEEextractedafterfirstgroupremain which will -% be empty if none exist. -% -% For example: -% \@IEEEextracttokengroups{{{ab}{cd}}{{ef}g}} -% will result in: -% -% \@IEEEextracttokengroupsarg ==> a macro containing {{ab}{cd}}{{ef}g} -% \@IEEEextractedfirstgroup ==> a macro containing {ab}{cd} -% \@IEEEextractedafterfirstgroupremain ==> a macro containing {{ef}g} -% \@IEEEextractedfirsttoken ==> the letter a -% \@IEEEextractedfirsttokenmacro ==> a macro containing a -% \@IEEEextractedfirsttokensdiscarded ==> a macro containing bcd -% \@IEEEextractedfirstfirstgroup ==> a macro containing ab -% \@IEEEextractednextgroup ==> a macro containing {ef}g -% \@IEEEextractednextfirsttoken ==> the letter e -% \@IEEEextractednextfirsttokenmacro ==> a macro containing e -% \@IEEEextractednextfirsttokensdiscarded ==> a macro containing fg -% \@IEEEextractednextfirstgroup ==> a macro containing ef -% -% If given an empty argument, \@IEEEextractedfirsttoken and -% \@IEEEextractednextfirsttoken will be set to \relax -% and all the macros will be empty. -% the *-star form, \@IEEEextracttokengroups*, does not expand its argument -% contents during processing. -% -% Depends on: \@IEEEextractgroup, \@IEEEextracttoken -\def\@IEEEextracttokengroups{\@ifstar{\let\@IEEEextracttokengroupsdef=\def\@@IEEEextracttokengroups}{\let\@IEEEextracttokengroupsdef=\edef\@@IEEEextracttokengroups}} -\def\@@IEEEextracttokengroups#1{\@IEEEextracttokengroupsdef\@IEEEextracttokengroupsarg{#1}\relax -% begin extraction, these functions are safe with empty arguments -% first group -\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextracttokengroupsarg}\relax -\let\@IEEEextractedfirstgroup\@IEEEextractedgroup -\let\@IEEEextractedafterfirstgroupremain\@IEEEextractedgroupremain -\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax -\let\@IEEEextractedfirsttoken\@IEEEextractedtoken -\let\@IEEEextractedfirsttokenmacro\@IEEEextractedtokenmacro -\let\@IEEEextractedfirsttokensdiscarded\@IEEEextractedtokensdiscarded -% first first group -\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedfirstgroup}\relax -\let\@IEEEextractedfirstfirstgroup\@IEEEextractedgroup -% next group -\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractedafterfirstgroupremain}\relax -\let\@IEEEextractednextgroup\@IEEEextractedgroup -\expandafter\@IEEEextracttoken\expandafter*\expandafter{\@IEEEextractednextgroup}\relax -\let\@IEEEextractednextfirsttoken\@IEEEextractedtoken -\let\@IEEEextractednextfirsttokenmacro\@IEEEextractedtokenmacro -\let\@IEEEextractednextfirsttokensdiscarded\@IEEEextractedtokensdiscarded -% next first group -\expandafter\@IEEEextractgroup\expandafter*\expandafter{\@IEEEextractednextgroup}\relax -\let\@IEEEextractednextfirstgroup\@IEEEextractedgroup} - - -%% -- End of Command Argument Scanning Support Functions -- - - - - -%% -%% START OF IEEEeqnarray DEFINITIONS -%% -%% Inspired by the concepts, examples, and previous works of LaTeX -%% coders and developers such as Donald Arseneau, Fred Bartlett, -%% David Carlisle, Tony Liu, Frank Mittelbach, Piet van Oostrum, -%% Roland Winkler and Mark Wooding. -%% I don't make the claim that my work here is even near their calibre. ;) - - -\newif\if@IEEEeqnarrayboxnojot% flag to indicate if the environment was called as the star form -\@IEEEeqnarrayboxnojotfalse - -\newif\if@advanceIEEEeqncolcnt% tracks if the environment should advance the col counter -% allows a way to make an \IEEEeqnarraybox that can be used within an \IEEEeqnarray -% used by IEEEeqnarraymulticol so that it can work properly in both -\@advanceIEEEeqncolcnttrue - -\newcount\@IEEEeqnnumcols % tracks how many IEEEeqnarray cols are defined -\newcount\@IEEEeqncolcnt % tracks how many IEEEeqnarray cols the user actually used - - -% The default math style used by the columns -\def\IEEEeqnarraymathstyle{\displaystyle} -% The default text style used by the columns -% default to using the current font -\def\IEEEeqnarraytextstyle{\relax} - -% like the iedlistdecl but for \IEEEeqnarray -\def\IEEEeqnarraydecl{\relax} -\def\IEEEeqnarrayboxdecl{\relax} - - - -% V1.8 flags to indicate that equation numbering is to persist -\newif\if@IEEEeqnumpersist% -\@IEEEeqnumpersistfalse -\newif\if@IEEEsubeqnumpersist% -\@IEEEsubeqnumpersistfalse -% -% V1.8 flags to indicate if (sub)equation number of last line was preadvanced -\newif\if@IEEEeqnumpreadv% -\@IEEEeqnumpreadvfalse -\newif\if@IEEEsubeqnumpreadv% -\@IEEEsubeqnumpreadvfalse - -\newcount\@IEEEsubeqnnumrollback% saves previous value of IEEEsubequation number in case we need to restore it - -% \yesnumber is the opposite of \nonumber -% a novel concept with the same def as the equationarray package -% However, we give IEEE versions too since some LaTeX packages such as -% the MDWtools mathenv.sty redefine \nonumber to something else. -% This command is intended for use in non-IEEEeqnarray math environments -\providecommand{\yesnumber}{\global\@eqnswtrue} - - -% IEEEyes/nonumber -% V1.8 add persistant * forms -% These commands can alter the type of equation an IEEEeqnarray line is. -\def\IEEEyesnumber{\@ifstar{\global\@IEEEeqnumpersisttrue\global\@IEEEsubeqnumpersistfalse\@IEEEyesnumber}{\@IEEEyesnumber}} - -\def\@IEEEyesnumber{\global\@eqnswtrue -\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray -\ifnum\c@IEEEsubequation>0\relax - \stepcounter{equation}\setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax - \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label -\fi -% even if we reached this eqn num via a preadv, it is legit now -\global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse -\fi} - -\def\IEEEnonumber{\@ifstar{\global\@IEEEeqnumpersistfalse\global\@IEEEsubeqnumpersistfalse\global\@eqnswfalse}{\global\@eqnswfalse}} - - -\def\IEEEyessubnumber{\@ifstar{\global\@IEEEsubeqnumpersisttrue\@IEEEyessubnumber}{\@IEEEyessubnumber}} -% -\def\@IEEEyessubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray - \ifnum\c@IEEEsubequation>0\relax% if it already is a subequation, we are good to go as-is - \else% if we are a regular equation we have to watch out for two cases - \if@IEEEeqnumpreadv% if this equation is the result of a preadvance, backout and bump the sub eqnnum - \global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\addtocounter{IEEEsubequation}{1}\relax - \else% non-preadvanced equations just need initialization of their sub eqnnum - \setcounter{IEEEsubequation}{1}\relax - \fi - \fi% fi already is subequation - \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax - \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label - \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore - \global\@eqnswtrue -\fi} - - -\def\IEEEnosubnumber{\@ifstar{\global\@IEEEsubeqnumpersistfalse\@IEEEnosubnumber}{\@IEEEnosubnumber}} -% -\def\@IEEEnosubnumber{\if@IEEEeqnarrayISinner% alter counters and label only inside an IEEEeqnarray - \if@eqnsw % we do nothing unless we know we will display because we play with the counters here - % if it currently is a subequation, bump up to the next equation number and turn off the subequation - \ifnum\c@IEEEsubequation>0\relax\addtocounter{equation}{1}\setcounter{IEEEsubequation}{0}\relax - \fi - \global\@IEEEeqnumpreadvfalse\global\@IEEEsubeqnumpreadvfalse% no longer a preadv anymore - \gdef\@currentlabel{\p@equation\theequation}\relax - \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label - \fi -\fi} - - - -% allows users to "push away" equations that get too close to the equation numbers -\def\IEEEeqnarraynumspace{\hphantom{\ifnum\c@IEEEsubequation>0\relax\theIEEEsubequationdis\else\theequationdis\fi}} - -% provides a way to span multiple columns within IEEEeqnarray environments -% will consider \if@advanceIEEEeqncolcnt before globally advancing the -% column counter - so as to work within \IEEEeqnarraybox -% usage: \IEEEeqnarraymulticol{number cols. to span}{col type}{cell text} -\long\def\IEEEeqnarraymulticol#1#2#3{\multispan{#1}\relax -% check if column is defined for the precolumn definition -% We have to be careful here because TeX scans for & even within an \iffalse -% where it does not expand macros. So, if we used only one \ifx and a #3 -% appeared in the false branch and the user inserted another alignment -% structure that uses & in the \IEEEeqnarraymulticol{}, TeX will not see that -% there is an inner alignment in the false branch yet still will see any & -% there and will think that they apply to the outer alignment resulting in an -% incomplete \ifx error. -% So, here we use separate checks for the pre and post parts in order to keep -% the #3 outside of all conditionals. -\relax\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax -\csname @IEEEeqnarraycolPRE#2\endcsname -\else% if not, error and use default type -\@IEEEclspkgerror{Invalid column type "#2" in \string\IEEEeqnarraymulticol.\MessageBreak -Using a default centering column instead}% -{You must define IEEEeqnarray column types before use.}% -\csname @IEEEeqnarraycolPRE@IEEEdefault\endcsname -\fi -% The ten \relax are to help prevent misleading error messages in case a user -% accidently inserted a macro that tries to acquire additional arguments. -#3\relax\relax\relax\relax\relax\relax\relax\relax\relax\relax -% check if column is defined for the postcolumn definition -\expandafter\ifx\csname @IEEEeqnarraycolDEF#2\endcsname\@IEEEeqnarraycolisdefined\relax -\csname @IEEEeqnarraycolPOST#2\endcsname -\else% if not, use the default type -\csname @IEEEeqnarraycolPOST@IEEEdefault\endcsname -\fi -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by #1\relax\fi} - -% like \omit, but maintains track of the column counter for \IEEEeqnarray -\def\IEEEeqnarrayomit{\omit\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by 1\relax\fi} - - -% provides a way to define a letter referenced column type -% usage: \IEEEeqnarraydefcol{col. type letter/name}{pre insertion text}{post insertion text} -\def\IEEEeqnarraydefcol#1#2#3{\expandafter\def\csname @IEEEeqnarraycolPRE#1\endcsname{#2}% -\expandafter\def\csname @IEEEeqnarraycolPOST#1\endcsname{#3}% -\expandafter\def\csname @IEEEeqnarraycolDEF#1\endcsname{1}} - - -% provides a way to define a numerically referenced inter-column glue types -% usage: \IEEEeqnarraydefcolsep{col. glue number}{glue definition} -\def\IEEEeqnarraydefcolsep#1#2{\expandafter\def\csname @IEEEeqnarraycolSEP\romannumeral #1\endcsname{#2}% -\expandafter\def\csname @IEEEeqnarraycolSEPDEF\romannumeral #1\endcsname{1}} - - -\def\@IEEEeqnarraycolisdefined{1}% just a macro for 1, used for checking undefined column types - - -% expands and appends the given argument to the \@IEEEtrantmptoksA token list -% used to build up the \halign preamble -\def\@IEEEappendtoksA#1{\edef\@@IEEEappendtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA #1}}% -\@@IEEEappendtoksA} - -% also appends to \@IEEEtrantmptoksA, but does not expand the argument -% uses \toks8 as a scratchpad register -\def\@IEEEappendNOEXPANDtoksA#1{\toks8={#1}% -\edef\@@IEEEappendNOEXPANDtoksA{\@IEEEtrantmptoksA={\the\@IEEEtrantmptoksA\the\toks8}}% -\@@IEEEappendNOEXPANDtoksA} - -% define some common column types for the user -% math -\IEEEeqnarraydefcol{l}{$\IEEEeqnarraymathstyle}{$\hfil} -\IEEEeqnarraydefcol{c}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} -\IEEEeqnarraydefcol{r}{\hfil$\IEEEeqnarraymathstyle}{$} -\IEEEeqnarraydefcol{L}{$\IEEEeqnarraymathstyle{}}{{}$\hfil} -\IEEEeqnarraydefcol{C}{\hfil$\IEEEeqnarraymathstyle{}}{{}$\hfil} -\IEEEeqnarraydefcol{R}{\hfil$\IEEEeqnarraymathstyle{}}{{}$} -% text -\IEEEeqnarraydefcol{s}{\IEEEeqnarraytextstyle}{\hfil} -\IEEEeqnarraydefcol{t}{\hfil\IEEEeqnarraytextstyle}{\hfil} -\IEEEeqnarraydefcol{u}{\hfil\IEEEeqnarraytextstyle}{} - -% vertical rules -\IEEEeqnarraydefcol{v}{}{\vrule width\arrayrulewidth} -\IEEEeqnarraydefcol{vv}{\vrule width\arrayrulewidth\hfil}{\hfil\vrule width\arrayrulewidth} -\IEEEeqnarraydefcol{V}{}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} -\IEEEeqnarraydefcol{VV}{\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth\hfil}% -{\hfil\vrule width\arrayrulewidth\hskip\doublerulesep\vrule width\arrayrulewidth} - -% horizontal rules -\IEEEeqnarraydefcol{h}{}{\leaders\hrule height\arrayrulewidth\hfil} -\IEEEeqnarraydefcol{H}{}{\leaders\vbox{\hrule width\arrayrulewidth\vskip\doublerulesep\hrule width\arrayrulewidth}\hfil} - -% plain -\IEEEeqnarraydefcol{x}{}{} -\IEEEeqnarraydefcol{X}{$}{$} - -% the default column type to use in the event a column type is not defined -\IEEEeqnarraydefcol{@IEEEdefault}{\hfil$\IEEEeqnarraymathstyle}{$\hfil} - - -% a zero tabskip (used for "-" col types) -\def\@IEEEeqnarraycolSEPzero{0pt plus 0pt minus 0pt} -% a centering tabskip (used for "+" col types) -\def\@IEEEeqnarraycolSEPcenter{1000pt plus 0pt minus 1000pt} - -% top level default tabskip glues for the start, end, and inter-column -% may be reset within environments not always at the top level, e.g., \IEEEeqnarraybox -\edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPcenter}% default start glue -\edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPcenter}% default end glue -\edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue - - - -% creates a vertical rule that extends from the bottom to the top a a cell -% Provided in case other packages redefine \vline some other way. -% usage: \IEEEeqnarrayvrule[rule thickness] -% If no argument is provided, \arrayrulewidth will be used for the rule thickness. -\newcommand\IEEEeqnarrayvrule[1][\arrayrulewidth]{\vrule\@width#1\relax} - -% creates a blank separator row -% usage: \IEEEeqnarrayseprow[separation length][font size commands] -% default is \IEEEeqnarrayseprow[0.25\normalbaselineskip][\relax] -% blank arguments inherit the default values -% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers -\def\IEEEeqnarrayseprow{\relax\@ifnextchar[{\@IEEEeqnarrayseprow}{\@IEEEeqnarrayseprow[0.25\normalbaselineskip]}} -\def\@IEEEeqnarrayseprow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprow[#1]}{\@@IEEEeqnarrayseprow[#1][\relax]}} -\def\@@IEEEeqnarrayseprow[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% -\ifx\@IEEEeqnarrayseprowARGONE\@empty% -% get the skip value, based on the font commands -% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 -% assign within a bogus box to confine the font changes -{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% -\else% -{\setbox0=\hbox{#2\relax\global\skip5=#1}}% -\fi% -\@IEEEeqnarrayhoptolastcolumn\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} - -% creates a blank separator row, but omits all the column templates -% usage: \IEEEeqnarrayseprowcut[separation length][font size commands] -% default is \IEEEeqnarrayseprowcut[0.25\normalbaselineskip][\relax] -% blank arguments inherit the default values -% uses \skip5 as a scratch register - calls \@IEEEeqnarraystrutsize which uses more scratch registers -\def\IEEEeqnarrayseprowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\@ifnextchar[{\@IEEEeqnarrayseprowcut}{\@IEEEeqnarrayseprowcut[0.25\normalbaselineskip]}} -\def\@IEEEeqnarrayseprowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarrayseprowcut[#1]}{\@@IEEEeqnarrayseprowcut[#1][\relax]}} -\def\@@IEEEeqnarrayseprowcut[#1][#2]{\def\@IEEEeqnarrayseprowARGONE{#1}% -\ifx\@IEEEeqnarrayseprowARGONE\@empty% -% get the skip value, based on the font commands -% use skip5 because \IEEEeqnarraystrutsize uses \skip0, \skip2, \skip3 -% assign within a bogus box to confine the font changes -{\setbox0=\hbox{#2\relax\global\skip5=0.25\normalbaselineskip}}% -\else% -{\setbox0=\hbox{#2\relax\global\skip5=#1}}% -\fi% -\IEEEeqnarraystrutsize{\skip5}{0pt}[\relax]\relax} - - - -% draws a single rule across all the columns optional -% argument determines the rule width, \arrayrulewidth is the default -% updates column counter as needed and turns off struts -% usage: \IEEEeqnarrayrulerow[rule line thickness] -\def\IEEEeqnarrayrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\@ifnextchar[{\@IEEEeqnarrayrulerow}{\@IEEEeqnarrayrulerow[\arrayrulewidth]}} -\def\@IEEEeqnarrayrulerow[#1]{\leaders\hrule height#1\hfil\relax% put in our rule -% turn off any struts -\IEEEeqnarraystrutsize{0pt}{0pt}[\relax]\relax} - - -% draws a double rule by using a single rule row, a separator row, and then -% another single rule row -% first optional argument determines the rule thicknesses, \arrayrulewidth is the default -% second optional argument determines the rule spacing, \doublerulesep is the default -% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] -\def\IEEEeqnarraydblrulerow{\multispan{\@IEEEeqnnumcols}\relax% span all the cols -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\@ifnextchar[{\@IEEEeqnarraydblrulerow}{\@IEEEeqnarraydblrulerow[\arrayrulewidth]}} -\def\@IEEEeqnarraydblrulerow[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerow[#1]}% -{\@@IEEEeqnarraydblrulerow[#1][\doublerulesep]}} -\def\@@IEEEeqnarraydblrulerow[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% -% we allow the user to say \IEEEeqnarraydblrulerow[][] -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\@IEEEeqnarrayrulerow[\arrayrulewidth]% -\else% -\@IEEEeqnarrayrulerow[#1]\relax% -\fi% -\def\@IEEEeqnarraydblrulerowARG{#2}% -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\\\IEEEeqnarrayseprow[\doublerulesep][\relax]% -\else% -\\\IEEEeqnarrayseprow[#2][\relax]% -\fi% -\\\multispan{\@IEEEeqnnumcols}% -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\def\@IEEEeqnarraydblrulerowARG{#1}% -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\@IEEEeqnarrayrulerow[\arrayrulewidth]% -\else% -\@IEEEeqnarrayrulerow[#1]% -\fi% -} - -% draws a double rule by using a single rule row, a separator (cutting) row, and then -% another single rule row -% first optional argument determines the rule thicknesses, \arrayrulewidth is the default -% second optional argument determines the rule spacing, \doublerulesep is the default -% usage: \IEEEeqnarraydblrulerow[rule line thickness][rule spacing] -\def\IEEEeqnarraydblrulerowcut{\multispan{\@IEEEeqnnumcols}\relax% span all the cols -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\@ifnextchar[{\@IEEEeqnarraydblrulerowcut}{\@IEEEeqnarraydblrulerowcut[\arrayrulewidth]}} -\def\@IEEEeqnarraydblrulerowcut[#1]{\relax\@ifnextchar[{\@@IEEEeqnarraydblrulerowcut[#1]}% -{\@@IEEEeqnarraydblrulerowcut[#1][\doublerulesep]}} -\def\@@IEEEeqnarraydblrulerowcut[#1][#2]{\def\@IEEEeqnarraydblrulerowARG{#1}% -% we allow the user to say \IEEEeqnarraydblrulerow[][] -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\@IEEEeqnarrayrulerow[\arrayrulewidth]% -\else% -\@IEEEeqnarrayrulerow[#1]% -\fi% -\def\@IEEEeqnarraydblrulerowARG{#2}% -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\\\IEEEeqnarrayseprowcut[\doublerulesep][\relax]% -\else% -\\\IEEEeqnarrayseprowcut[#2][\relax]% -\fi% -\\\multispan{\@IEEEeqnnumcols}% -% advance column counter only if the IEEEeqnarray environment wants it -\if@advanceIEEEeqncolcnt\global\advance\@IEEEeqncolcnt by \@IEEEeqnnumcols\relax\fi% -\def\@IEEEeqnarraydblrulerowARG{#1}% -\ifx\@IEEEeqnarraydblrulerowARG\@empty% -\@IEEEeqnarrayrulerow[\arrayrulewidth]% -\else% -\@IEEEeqnarrayrulerow[#1]% -\fi% -} - - - -% inserts a full row's worth of &'s -% relies on \@IEEEeqnnumcols to provide the correct number of columns -% uses \@IEEEtrantmptoksA, \count0 as scratch registers -\def\@IEEEeqnarrayhoptolastcolumn{\@IEEEtrantmptoksA={}\count0=1\relax% -\loop% add cols if the user did not use them all -\ifnum\count0<\@IEEEeqnnumcols\relax% -\@IEEEappendtoksA{&}% -\advance\count0 by 1\relax% update the col count -\repeat% -\the\@IEEEtrantmptoksA%execute the &'s -} - - - -\newif\if@IEEEeqnarrayISinner % flag to indicate if we are within the lines -\@IEEEeqnarrayISinnerfalse % of an IEEEeqnarray - after the IEEEeqnarraydecl - -\edef\@IEEEeqnarrayTHEstrutheight{0pt} % height and depth of IEEEeqnarray struts -\edef\@IEEEeqnarrayTHEstrutdepth{0pt} - -\edef\@IEEEeqnarrayTHEmasterstrutheight{0pt} % default height and depth of -\edef\@IEEEeqnarrayTHEmasterstrutdepth{0pt} % struts within an IEEEeqnarray - -\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{0pt} % saved master strut height -\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{0pt} % and depth - -\newif\if@IEEEeqnarrayusemasterstrut % flag to indicate that the master strut value -\@IEEEeqnarrayusemasterstruttrue % is to be used - - - -% saves the strut height and depth of the master strut -\def\@IEEEeqnarraymasterstrutsave{\relax% -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% -% remove stretchability -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% save values -\edef\@IEEEeqnarrayTHEmasterstrutHSAVE{\the\dimen0}% -\edef\@IEEEeqnarrayTHEmasterstrutDSAVE{\the\dimen2}} - -% restores the strut height and depth of the master strut -\def\@IEEEeqnarraymasterstrutrestore{\relax% -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutHSAVE\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutDSAVE\relax% -% remove stretchability -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% restore values -\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}} - - -% globally restores the strut height and depth to the -% master values and sets the master strut flag to true -\def\@IEEEeqnarraystrutreset{\relax% -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% -% remove stretchability -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% restore values -\xdef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\xdef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\global\@IEEEeqnarrayusemasterstruttrue} - - -% if the master strut is not to be used, make the current -% values of \@IEEEeqnarrayTHEstrutheight, \@IEEEeqnarrayTHEstrutdepth -% and the use master strut flag, global -% this allows user strut commands issued in the last column to be carried -% into the isolation/strut column -\def\@IEEEeqnarrayglobalizestrutstatus{\relax% -\if@IEEEeqnarrayusemasterstrut\else% -\xdef\@IEEEeqnarrayTHEstrutheight{\@IEEEeqnarrayTHEstrutheight}% -\xdef\@IEEEeqnarrayTHEstrutdepth{\@IEEEeqnarrayTHEstrutdepth}% -\global\@IEEEeqnarrayusemasterstrutfalse% -\fi} - - - -% usage: \IEEEeqnarraystrutsize{height}{depth}[font size commands] -% If called outside the lines of an IEEEeqnarray, sets the height -% and depth of both the master and local struts. If called inside -% an IEEEeqnarray line, sets the height and depth of the local strut -% only and sets the flag to indicate the use of the local strut -% values. If the height or depth is left blank, 0.7\normalbaselineskip -% and 0.3\normalbaselineskip will be used, respectively. -% The optional argument can be used to evaluate the lengths under -% a different font size and styles. If none is specified, the current -% font is used. -% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 -\def\IEEEeqnarraystrutsize#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsize{#1}{#2}}{\@IEEEeqnarraystrutsize{#1}{#2}[\relax]}} -\def\@IEEEeqnarraystrutsize#1#2[#3]{\def\@IEEEeqnarraystrutsizeARG{#1}% -\ifx\@IEEEeqnarraystrutsizeARG\@empty% -{\setbox0=\hbox{#3\relax\global\skip3=0.7\normalbaselineskip}}% -\skip0=\skip3\relax% -\else% arg one present -{\setbox0=\hbox{#3\relax\global\skip3=#1\relax}}% -\skip0=\skip3\relax% -\fi% if null arg -\def\@IEEEeqnarraystrutsizeARG{#2}% -\ifx\@IEEEeqnarraystrutsizeARG\@empty% -{\setbox0=\hbox{#3\relax\global\skip3=0.3\normalbaselineskip}}% -\skip2=\skip3\relax% -\else% arg two present -{\setbox0=\hbox{#3\relax\global\skip3=#2\relax}}% -\skip2=\skip3\relax% -\fi% if null arg -% remove stretchability, just to be safe -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% dimen0 = height, dimen2 = depth -\if@IEEEeqnarrayISinner% inner does not touch master strut size -\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\@IEEEeqnarrayusemasterstrutfalse% do not use master -\else% outer, have to set master strut too -\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% -\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\@IEEEeqnarrayusemasterstruttrue% use master strut -\fi} - - -% usage: \IEEEeqnarraystrutsizeadd{added height}{added depth}[font size commands] -% If called outside the lines of an IEEEeqnarray, adds the given height -% and depth to both the master and local struts. -% If called inside an IEEEeqnarray line, adds the given height and depth -% to the local strut only and sets the flag to indicate the use -% of the local strut values. -% In both cases, if a height or depth is left blank, 0pt is used instead. -% The optional argument can be used to evaluate the lengths under -% a different font size and styles. If none is specified, the current -% font is used. -% uses scratch registers \skip0, \skip2, \skip3, \dimen0, \dimen2 -\def\IEEEeqnarraystrutsizeadd#1#2{\relax\@ifnextchar[{\@IEEEeqnarraystrutsizeadd{#1}{#2}}{\@IEEEeqnarraystrutsizeadd{#1}{#2}[\relax]}} -\def\@IEEEeqnarraystrutsizeadd#1#2[#3]{\def\@IEEEeqnarraystrutsizearg{#1}% -\ifx\@IEEEeqnarraystrutsizearg\@empty% -\skip0=0pt\relax% -\else% arg one present -{\setbox0=\hbox{#3\relax\global\skip3=#1}}% -\skip0=\skip3\relax% -\fi% if null arg -\def\@IEEEeqnarraystrutsizearg{#2}% -\ifx\@IEEEeqnarraystrutsizearg\@empty% -\skip2=0pt\relax% -\else% arg two present -{\setbox0=\hbox{#3\relax\global\skip3=#2}}% -\skip2=\skip3\relax% -\fi% if null arg -% remove stretchability, just to be safe -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% dimen0 = height, dimen2 = depth -\if@IEEEeqnarrayISinner% inner does not touch master strut size -% get local strut size -\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% -% add it to the user supplied values -\advance\dimen0 by \skip0\relax% -\advance\dimen2 by \skip2\relax% -% update the local strut size -\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\@IEEEeqnarrayusemasterstrutfalse% do not use master -\else% outer, have to set master strut too -% get master strut size -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% -% add it to the user supplied values -\advance\dimen0 by \skip0\relax% -\advance\dimen2 by \skip2\relax% -% update the local and master strut sizes -\edef\@IEEEeqnarrayTHEmasterstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEmasterstrutdepth{\the\dimen2}% -\edef\@IEEEeqnarrayTHEstrutheight{\the\dimen0}% -\edef\@IEEEeqnarrayTHEstrutdepth{\the\dimen2}% -\@IEEEeqnarrayusemasterstruttrue% use master strut -\fi} - - -% allow user a way to see the struts -\newif\ifIEEEvisiblestruts -\IEEEvisiblestrutsfalse - -% inserts an invisible strut using the master or local strut values -% uses scratch registers \skip0, \skip2, \dimen0, \dimen2 -\def\@IEEEeqnarrayinsertstrut{\relax% -\if@IEEEeqnarrayusemasterstrut -% get master strut size -\expandafter\skip0=\@IEEEeqnarrayTHEmasterstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEmasterstrutdepth\relax% -\else% -% get local strut size -\expandafter\skip0=\@IEEEeqnarrayTHEstrutheight\relax% -\expandafter\skip2=\@IEEEeqnarrayTHEstrutdepth\relax% -\fi% -% remove stretchability, probably not needed -\dimen0\skip0\relax% -\dimen2\skip2\relax% -% dimen0 = height, dimen2 = depth -% allow user to see struts if desired -\ifIEEEvisiblestruts% -\vrule width0.2pt height\dimen0 depth\dimen2\relax% -\else% -\vrule width0pt height\dimen0 depth\dimen2\relax\fi} - - -% creates an invisible strut, useable even outside \IEEEeqnarray -% if \IEEEvisiblestrutstrue, the strut will be visible and 0.2pt wide. -% usage: \IEEEstrut[height][depth][font size commands] -% default is \IEEEstrut[0.7\normalbaselineskip][0.3\normalbaselineskip][\relax] -% blank arguments inherit the default values -% uses \dimen0, \dimen2, \skip0, \skip2 -\def\IEEEstrut{\relax\@ifnextchar[{\@IEEEstrut}{\@IEEEstrut[0.7\normalbaselineskip]}} -\def\@IEEEstrut[#1]{\relax\@ifnextchar[{\@@IEEEstrut[#1]}{\@@IEEEstrut[#1][0.3\normalbaselineskip]}} -\def\@@IEEEstrut[#1][#2]{\relax\@ifnextchar[{\@@@IEEEstrut[#1][#2]}{\@@@IEEEstrut[#1][#2][\relax]}} -\def\@@@IEEEstrut[#1][#2][#3]{\mbox{#3\relax% -\def\@IEEEstrutARG{#1}% -\ifx\@IEEEstrutARG\@empty% -\skip0=0.7\normalbaselineskip\relax% -\else% -\skip0=#1\relax% -\fi% -\def\@IEEEstrutARG{#2}% -\ifx\@IEEEstrutARG\@empty% -\skip2=0.3\normalbaselineskip\relax% -\else% -\skip2=#2\relax% -\fi% -% remove stretchability, probably not needed -\dimen0\skip0\relax% -\dimen2\skip2\relax% -\ifIEEEvisiblestruts% -\vrule width0.2pt height\dimen0 depth\dimen2\relax% -\else% -\vrule width0.0pt height\dimen0 depth\dimen2\relax\fi}} - - -% enables strut mode by setting a default strut size and then zeroing the -% \baselineskip, \lineskip, \lineskiplimit and \jot -\def\IEEEeqnarraystrutmode{\IEEEeqnarraystrutsize{0.7\normalbaselineskip}{0.3\normalbaselineskip}[\relax]% -\baselineskip=0pt\lineskip=0pt\lineskiplimit=0pt\jot=0pt} - - -% equation and subequation forms to use to setup hyperref's \@currentHref -\def\@IEEEtheHrefequation{equation.\theHequation} -\def\@IEEEtheHrefsubequation{equation.\theHequation\alph{IEEEsubequation}} - - -\def\IEEEeqnarray{\@IEEEeqnumpersisttrue\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} -\def\endIEEEeqnarray{\end@IEEEeqnarray} - -\@namedef{IEEEeqnarray*}{\@IEEEeqnumpersistfalse\@IEEEsubeqnumpersistfalse\@IEEEeqnarray} -\@namedef{endIEEEeqnarray*}{\end@IEEEeqnarray} - - -% \IEEEeqnarray is an enhanced \eqnarray. -% The star form defaults to not putting equation numbers at the end of each row. -% usage: \IEEEeqnarray[decl]{cols} -\def\@IEEEeqnarray{\relax\@ifnextchar[{\@@IEEEeqnarray}{\@@IEEEeqnarray[\relax]}} -% We have to be careful here to normalize catcodes just before acquiring the -% cols as that specification may contain punctuation which could be subject -% to document catcode changes. -\def\@@IEEEeqnarray[#1]{\begingroup\IEEEnormalcatcodes\@@@IEEEeqnarray[#1]} -\def\@@@IEEEeqnarray[#1]#2{\endgroup - % default to showing the equation number or not based on whether or not - % the star form was involked - \if@IEEEeqnumpersist\global\@eqnswtrue - \else% not the star form - \global\@eqnswfalse - \fi% if star form - % provide a basic hyperref \theHequation if this has not already been setup (hyperref not loaded, or no section counter) - \@ifundefined{theHequation}{\def\theHequation{\arabic{equation}}}{}\relax - % provide dummy hyperref commands in case hyperref is not loaded - \providecommand{\Hy@raisedlink}[1]{}\relax - \providecommand{\hyper@anchorstart}[1]{}\relax - \providecommand{\hyper@anchorend}{}\relax - \providecommand{\@currentHref}{}\relax - \@IEEEeqnumpreadvfalse% reset eqnpreadv flag - \@IEEEsubeqnumpreadvfalse% reset subeqnpreadv flag - \@IEEEeqnarrayISinnerfalse% not yet within the lines of the halign - \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default - \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise - \IEEEvisiblestrutsfalse% diagnostic mode defaults to off - % no extra space unless the user specifically requests it - \lineskip=0pt\relax - \lineskiplimit=0pt\relax - \baselineskip=\normalbaselineskip\relax% - \jot=\IEEEnormaljot\relax% - \mathsurround\z@\relax% no extra spacing around math - \@advanceIEEEeqncolcnttrue% advance the col counter for each col the user uses, - % used in \IEEEeqnarraymulticol and in the preamble build - %V1.8 Here we preadvance to the next equation number. - % If the user later wants a continued subequation, we can roll back. - \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation% - \stepcounter{equation}\@IEEEeqnumpreadvtrue% advance equation counter before first line - \setcounter{IEEEsubequation}{0}% no subequation yet - \let\@IEEEcurrentlabelsave\@currentlabel% save current label as we later change it globally - \let\@IEEEcurrentHrefsave\@currentHref% save current href label as we later change it globally - \def\@currentlabel{\p@equation\theequation}% redefine the ref label - \def\@currentHref{\@IEEEtheHrefequation}% setup hyperref label - \IEEEeqnarraydecl\relax% allow a way for the user to make global overrides - #1\relax% allow user to override defaults - \let\\\@IEEEeqnarraycr% replace newline with one that can put in eqn. numbers - \global\@IEEEeqncolcnt\z@% col. count = 0 for first line - \@IEEEbuildpreamble{#2}\relax% build the preamble and put it into \@IEEEtrantmptoksA - % put in the column for the equation number - \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first - \toks0={##}% - % advance the \@IEEEeqncolcnt for the isolation col, this helps with error checking - \@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}% - % add the isolation column - \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% - % advance the \@IEEEeqncolcnt for the equation number col, this helps with error checking - \@IEEEappendtoksA{&\global\advance\@IEEEeqncolcnt by 1\relax}% - % add the equation number col to the preamble - \@IEEEappendtoksA{\tabskip\z@skip\hb@xt@\z@\bgroup\hss\the\toks0\egroup}% - % note \@IEEEeqnnumcols does not count the equation col or isolation col - % set the starting tabskip glue as determined by the preamble build - \tabskip=\@IEEEBPstartglue\relax - % begin the display alignment - \@IEEEeqnarrayISinnertrue% commands are now within the lines - $$\everycr{}\halign to\displaywidth\bgroup - % "exspand" the preamble - \span\the\@IEEEtrantmptoksA\cr} - -% enter isolation/strut column (or the next column if the user did not use -% every column), record the strut status, complete the columns, do the strut if needed, -% restore counters (to backout any equation setup for a next line that was never used) -% to their correct values and exit -\def\end@IEEEeqnarray{\@IEEEeqnarrayglobalizestrutstatus&\@@IEEEeqnarraycr\egroup -\if@IEEEsubeqnumpreadv\global\advance\c@IEEEsubequation\m@ne\fi -\if@IEEEeqnumpreadv\global\advance\c@equation\m@ne\global\c@IEEEsubequation=\@IEEEsubeqnnumrollback\fi -\global\let\@currentlabel\@IEEEcurrentlabelsave% restore current label -\global\let\@currentHref\@IEEEcurrentHrefsave% restore current href label -$$\@ignoretrue} - - -% IEEEeqnarray uses a modifed \\ instead of the plain \cr to -% end rows. This allows for things like \\*[vskip amount] -% These "cr" macros are modified versions of those for LaTeX2e's eqnarray -% the {\ifnum0=`} braces must be kept away from the last column to avoid -% altering spacing of its math, so we use & to advance to the next column -% as there is an isolation/strut column after the user's columns -\def\@IEEEeqnarraycr{\@IEEEeqnarrayglobalizestrutstatus&% save strut status and advance to next column - {\ifnum0=`}\fi - \@ifstar{% - \global\@eqpen\@M\@IEEEeqnarrayYCR - }{% - \global\@eqpen\interdisplaylinepenalty \@IEEEeqnarrayYCR - }% -} - -\def\@IEEEeqnarrayYCR{\@testopt\@IEEEeqnarrayXCR\z@skip} - -\def\@IEEEeqnarrayXCR[#1]{% - \ifnum0=`{\fi}% - \@@IEEEeqnarraycr - \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}}% - -\def\@@IEEEeqnarraycr{\@IEEEtrantmptoksA={}% clear token register - \advance\@IEEEeqncolcnt by -1\relax% adjust col count because of the isolation column - \ifnum\@IEEEeqncolcnt>\@IEEEeqnnumcols\relax - \@IEEEclspkgerror{Too many columns within the IEEEeqnarray\MessageBreak - environment}% - {Use fewer \string &'s or put more columns in the IEEEeqnarray column\MessageBreak - specifications.}\relax% - \else - \loop% add cols if the user did not use them all - \ifnum\@IEEEeqncolcnt<\@IEEEeqnnumcols\relax - \@IEEEappendtoksA{&}% - \advance\@IEEEeqncolcnt by 1\relax% update the col count - \repeat - % this number of &'s will take us the the isolation column - \fi - % execute the &'s - \the\@IEEEtrantmptoksA% - % handle the strut/isolation column - \@IEEEeqnarrayinsertstrut% do the strut if needed - \@IEEEeqnarraystrutreset% reset the strut system for next line or IEEEeqnarray - &% and enter the equation number column - \if@eqnsw% only if we display something - \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}% start a hyperref anchor - \global\@IEEEeqnumpreadvfalse\relax% displaying an equation number means - \global\@IEEEsubeqnumpreadvfalse\relax% the equation counters point to valid equations - % V1.8 Here we setup the counters, currentlabel and status for what would be the *next* - % equation line as would be the case under the current settings. However, there are two problems. - % One problem is that there might not ever be a next line. The second problem is that the user - % may later alter the meaning of a line with commands such as \IEEEyessubnumber. So, to handle - % these cases we have to record the current values of the (sub)equation counters and revert back - % to them if the next line is changed or never comes. The \if@IEEEeqnumpreadv, \if@IEEEsubeqnumpreadv - % and \@IEEEsubeqnnumrollback stuff tracks this. - % The logic to handle all this is surprisingly complex, but a nice feature of the approach here is - % that the equation counters and labels remain valid for what the line would be unless a - % \IEEEyessubnumber et al. later changes it. So, any hyperref links are always correct. - \ifnum\c@IEEEsubequation>0\relax% handle subequation - \theIEEEsubequationdis\relax - \if@IEEEsubeqnumpersist% setup for default type of next line - \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax - \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax - \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label - \else - % if no subeqnum persist, go ahead and setup for a new equation number - \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation - \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax - \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax - \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label - \fi - \else% display a standard equation number - \theequationdis\relax - \setcounter{IEEEsubequation}{0}\relax% not really needed - \if@IEEEsubeqnumpersist% setup for default type of next line - % subequations that follow plain equations carry the same equation number e.g, 5, 5a rather than 5, 6a - \stepcounter{IEEEsubequation}\global\@IEEEsubeqnumpreadvtrue\relax - \gdef\@currentlabel{\p@IEEEsubequation\theIEEEsubequation}\relax - \gdef\@currentHref{\@IEEEtheHrefsubequation}% setup hyperref label - \else - % if no subeqnum persist, go ahead and setup for a new equation number - \global\@IEEEsubeqnnumrollback=\c@IEEEsubequation - \stepcounter{equation}\global\@IEEEeqnumpreadvtrue\relax - \setcounter{IEEEsubequation}{0}\gdef\@currentlabel{\p@equation\theequation}\relax - \gdef\@currentHref{\@IEEEtheHrefequation}% setup hyperref label - \fi - \fi% - \Hy@raisedlink{\hyper@anchorend}% end hyperref anchor - \fi% fi only if we display something - % reset the flags to indicate the default preferences of the display of equation numbers - \if@IEEEeqnumpersist\global\@eqnswtrue\else\global\@eqnswfalse\fi - \if@IEEEsubeqnumpersist\global\@eqnswtrue\fi% ditto for the subequation flag - % reset the number of columns the user actually used - \global\@IEEEeqncolcnt\z@\relax - % the real end of the line - \cr} - - - - - -% \IEEEeqnarraybox is like \IEEEeqnarray except the box form puts everything -% inside a vtop, vbox, or vcenter box depending on the letter in the second -% optional argument (t,b,c). Vbox is the default. Unlike \IEEEeqnarray, -% equation numbers are not displayed and \IEEEeqnarraybox can be nested. -% \IEEEeqnarrayboxm is for math mode (like \array) and does not put the vbox -% within an hbox. -% \IEEEeqnarrayboxt is for text mode (like \tabular) and puts the vbox within -% a \hbox{$ $} construct. -% \IEEEeqnarraybox will auto detect whether to use \IEEEeqnarrayboxm or -% \IEEEeqnarrayboxt depending on the math mode. -% The third optional argument specifies the width this box is to be set to - -% natural width is the default. -% The * forms do not add \jot line spacing -% usage: \IEEEeqnarraybox[decl][pos][width]{cols} -\def\IEEEeqnarrayboxm{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} -\def\endIEEEeqnarrayboxm{\end@IEEEeqnarraybox} -\@namedef{IEEEeqnarrayboxm*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWfalse\@IEEEeqnarraybox} -\@namedef{endIEEEeqnarrayboxm*}{\end@IEEEeqnarraybox} - -\def\IEEEeqnarrayboxt{\@IEEEeqnarrayboxnojotfalse\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} -\def\endIEEEeqnarrayboxt{\end@IEEEeqnarraybox} -\@namedef{IEEEeqnarrayboxt*}{\@IEEEeqnarrayboxnojottrue\@IEEEeqnarrayboxHBOXSWtrue\@IEEEeqnarraybox} -\@namedef{endIEEEeqnarrayboxt*}{\end@IEEEeqnarraybox} - -\def\IEEEeqnarraybox{\@IEEEeqnarrayboxnojotfalse\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% -\@IEEEeqnarraybox} -\def\endIEEEeqnarraybox{\end@IEEEeqnarraybox} - -\@namedef{IEEEeqnarraybox*}{\@IEEEeqnarrayboxnojottrue\ifmmode\@IEEEeqnarrayboxHBOXSWfalse\else\@IEEEeqnarrayboxHBOXSWtrue\fi% -\@IEEEeqnarraybox} -\@namedef{endIEEEeqnarraybox*}{\end@IEEEeqnarraybox} - -% flag to indicate if the \IEEEeqnarraybox needs to put things into an hbox{$ $} -% for \vcenter in non-math mode -\newif\if@IEEEeqnarrayboxHBOXSW% -\@IEEEeqnarrayboxHBOXSWfalse - -\def\@IEEEeqnarraybox{\relax\@ifnextchar[{\@@IEEEeqnarraybox}{\@@IEEEeqnarraybox[\relax]}} -% We have to be careful here to normalize catcodes just before acquiring the -% cols as that specification may contain punctuation which could be subject -% to document catcode changes. -\def\@@IEEEeqnarraybox[#1]{\relax\begingroup\IEEEnormalcatcodes\@ifnextchar[{\@@@IEEEeqnarraybox[#1]}{\@@@IEEEeqnarraybox[#1][b]}} -\def\@@@IEEEeqnarraybox[#1][#2]{\relax\@ifnextchar[{\@@@@IEEEeqnarraybox[#1][#2]}{\@@@@IEEEeqnarraybox[#1][#2][\relax]}} - -% #1 = decl; #2 = t,b,c; #3 = width, #4 = col specs -\def\@@@@IEEEeqnarraybox[#1][#2][#3]#4{\endgroup\@IEEEeqnarrayISinnerfalse % not yet within the lines of the halign - \@IEEEeqnarraymasterstrutsave% save current master strut values - \@IEEEeqnarraystrutsize{0pt}{0pt}[\relax]% turn off struts by default - \@IEEEeqnarrayusemasterstruttrue% use master strut till user asks otherwise - \IEEEvisiblestrutsfalse% diagnostic mode defaults to off - % no extra space unless the user specifically requests it - \lineskip=0pt\relax% - \lineskiplimit=0pt\relax% - \baselineskip=\normalbaselineskip\relax% - \jot=\IEEEnormaljot\relax% - \mathsurround\z@\relax% no extra spacing around math - % the default end glues are zero for an \IEEEeqnarraybox - \edef\@IEEEeqnarraycolSEPdefaultstart{\@IEEEeqnarraycolSEPzero}% default start glue - \edef\@IEEEeqnarraycolSEPdefaultend{\@IEEEeqnarraycolSEPzero}% default end glue - \edef\@IEEEeqnarraycolSEPdefaultmid{\@IEEEeqnarraycolSEPzero}% default inter-column glue - \@advanceIEEEeqncolcntfalse% do not advance the col counter for each col the user uses, - % used in \IEEEeqnarraymulticol and in the preamble build - \IEEEeqnarrayboxdecl\relax% allow a way for the user to make global overrides - #1\relax% allow user to override defaults - \let\\\@IEEEeqnarrayboxcr% replace newline with one that allows optional spacing - \@IEEEbuildpreamble{#4}\relax% build the preamble and put it into \@IEEEtrantmptoksA - % add an isolation column to the preamble to stop \\'s {} from getting into the last col - \ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi% col separator for those after the first - \toks0={##}% - % add the isolation column to the preamble - \@IEEEappendtoksA{\tabskip\z@skip\bgroup\the\toks0\egroup}% - % set the starting tabskip glue as determined by the preamble build - \tabskip=\@IEEEBPstartglue\relax - % begin the alignment - \everycr{}% - % use only the very first token to determine the positioning - \@IEEEextracttoken{#2}\relax - \ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: IEEEeqnarraybox position specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax - \fi - % \@IEEEextractedtoken has the first token, the rest are ignored - % if we need to put things into and hbox and go into math mode, do so now - \if@IEEEeqnarrayboxHBOXSW \leavevmode \hbox \bgroup $\fi% - % use the appropriate vbox type - \if\@IEEEextractedtoken t\relax\vtop\else\if\@IEEEextractedtoken c\relax% - \vcenter\else\vbox\fi\fi\bgroup% - \@IEEEeqnarrayISinnertrue% commands are now within the lines - \ifx#3\relax\halign\else\halign to #3\relax\fi% - \bgroup - % "exspand" the preamble - \span\the\@IEEEtrantmptoksA\cr} - -% carry strut status and enter the isolation/strut column, -% exit from math mode if needed, and exit -\def\end@IEEEeqnarraybox{\@IEEEeqnarrayglobalizestrutstatus% carry strut status -&% enter isolation/strut column -\@IEEEeqnarrayinsertstrut% do strut if needed -\@IEEEeqnarraymasterstrutrestore% restore the previous master strut values -% reset the strut system for next IEEEeqnarray -% (sets local strut values back to previous master strut values) -\@IEEEeqnarraystrutreset% -% ensure last line, exit from halign, close vbox -\crcr\egroup\egroup% -% exit from math mode and close hbox if needed -\if@IEEEeqnarrayboxHBOXSW $\egroup\fi} - - - -% IEEEeqnarraybox uses a modifed \\ instead of the plain \cr to -% end rows. This allows for things like \\[vskip amount] -% This "cr" macros are modified versions those for LaTeX2e's eqnarray -% For IEEEeqnarraybox, \\* is the same as \\ -% the {\ifnum0=`} braces must be kept away from the last column to avoid -% altering spacing of its math, so we use & to advance to the isolation/strut column -% carry strut status into isolation/strut column -\def\@IEEEeqnarrayboxcr{\@IEEEeqnarrayglobalizestrutstatus% carry strut status -&% enter isolation/strut column -\@IEEEeqnarrayinsertstrut% do strut if needed -% reset the strut system for next line or IEEEeqnarray -\@IEEEeqnarraystrutreset% -{\ifnum0=`}\fi% -\@ifstar{\@IEEEeqnarrayboxYCR}{\@IEEEeqnarrayboxYCR}} - -% test and setup the optional argument to \\[] -\def\@IEEEeqnarrayboxYCR{\@testopt\@IEEEeqnarrayboxXCR\z@skip} - -% IEEEeqnarraybox does not automatically increase line spacing by \jot -\def\@IEEEeqnarrayboxXCR[#1]{\ifnum0=`{\fi}% -\cr\noalign{\if@IEEEeqnarrayboxnojot\else\vskip\jot\fi\vskip#1\relax}} - - - -% usage: \@IEEEbuildpreamble{column specifiers} -% starts the halign preamble build -% the assembled preamble is put in \@IEEEtrantmptoksA -\def\@IEEEbuildpreamble#1{\@IEEEtrantmptoksA={}% clear token register -\let\@IEEEBPcurtype=u%current column type is not yet known -\let\@IEEEBPprevtype=s%the previous column type was the start -\let\@IEEEBPnexttype=u%next column type is not yet known -% ensure these are valid -\def\@IEEEBPcurglue={0pt plus 0pt minus 0pt}% -\def\@IEEEBPcurcolname{@IEEEdefault}% name of current column definition -% currently acquired numerically referenced glue -% use a name that is easier to remember -\let\@IEEEBPcurnum=\@IEEEtrantmpcountA% -\@IEEEBPcurnum=0% -% tracks number of columns in the preamble -\@IEEEeqnnumcols=0% -% record the default end glues -\edef\@IEEEBPstartglue{\@IEEEeqnarraycolSEPdefaultstart}% -\edef\@IEEEBPendglue{\@IEEEeqnarraycolSEPdefaultend}% -\edef\@IEEEedefMACRO{#1}\relax% fully expand the preamble to support macro containers -% now parse the user's column specifications -% \ignorespaces is used as a delimiter, need at least one trailing \relax because -% \@@IEEEbuildpreamble looks into the future -\expandafter\@@IEEEbuildpreamble\@IEEEedefMACRO\ignorespaces\relax\relax} - - -% usage: \@@IEEEbuildpreamble{current column}{next column} -% parses and builds the halign preamble -\def\@@IEEEbuildpreamble#1#2{\let\@@nextIEEEbuildpreamble=\@@IEEEbuildpreamble% -% use only the very first token to check the end -\@IEEEextracttokengroups{#1}\relax -\ifx\@IEEEextractedfirsttoken\ignorespaces\let\@@nextIEEEbuildpreamble=\@@IEEEfinishpreamble\else% -% identify current and next token type -\@IEEEgetcoltype{#1}{\@IEEEBPcurtype}{1}% current, error on invalid -\@IEEEgetcoltype{#2}{\@IEEEBPnexttype}{0}% next, no error on invalid next -% if curtype is a glue, get the glue def -\if\@IEEEBPcurtype g\@IEEEgetcurglue{#1}{\@IEEEBPcurglue}\fi% -% if curtype is a column, get the column def and set the current column name -\if\@IEEEBPcurtype c\@IEEEgetcurcol{#1}\fi% -% if curtype is a numeral, acquire the user defined glue -\if\@IEEEBPcurtype n\@IEEEprocessNcol{#1}\fi% -% process the acquired glue -\if\@IEEEBPcurtype g\@IEEEprocessGcol\fi% -% process the acquired col -\if\@IEEEBPcurtype c\@IEEEprocessCcol\fi% -% ready prevtype for next col spec. -\let\@IEEEBPprevtype=\@IEEEBPcurtype% -% be sure and put back the future token(s) as a group -\fi\@@nextIEEEbuildpreamble{#2}} - - -% usage: \@@IEEEfinishpreamble{discarded} -% executed just after preamble build is completed -% warn about zero cols, and if prevtype type = u, put in end tabskip glue -% argument is not used -\def\@@IEEEfinishpreamble#1{\ifnum\@IEEEeqnnumcols<1\relax -\@IEEEclspkgerror{No column specifiers declared for IEEEeqnarray}% -{At least one column type must be declared for each IEEEeqnarray.}% -\fi%num cols less than 1 -%if last type undefined, set default end tabskip glue -\if\@IEEEBPprevtype u\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue}\fi} - - -% usage: \@IEEEgetcoltype{col specifier}{\output}{error more} -% Identify and return the column specifier's type code in the given -% \output macro: -% n = number -% g = glue (any other char in catagory 12) -% c = letter -% e = \ignorespaces (end of sequence) -% u = undefined -% error mode: 0 = no error message, 1 = error on invalid char -\def\@IEEEgetcoltype#1#2#3{% -% use only the very first token to determine the type -\@IEEEextracttoken{#1}\relax -% \@IEEEextractedtoken has the first token, the rest are discarded -\let#2=u\relax% assume invalid until know otherwise -\ifx\@IEEEextractedtoken\ignorespaces\let#2=e\else -\ifcat\@IEEEextractedtoken\relax\else% screen out control sequences -\if0\@IEEEextractedtoken\let#2=n\else -\if1\@IEEEextractedtoken\let#2=n\else -\if2\@IEEEextractedtoken\let#2=n\else -\if3\@IEEEextractedtoken\let#2=n\else -\if4\@IEEEextractedtoken\let#2=n\else -\if5\@IEEEextractedtoken\let#2=n\else -\if6\@IEEEextractedtoken\let#2=n\else -\if7\@IEEEextractedtoken\let#2=n\else -\if8\@IEEEextractedtoken\let#2=n\else -\if9\@IEEEextractedtoken\let#2=n\else -\ifcat,\@IEEEextractedtoken\let#2=g\relax -\else\ifcat a\@IEEEextractedtoken\let#2=c\relax\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi -\if#2u\relax -\if0\noexpand#3\relax\else\@IEEEclspkgerror{Invalid character in column specifications}% -{Only letters, numerals and certain other symbols are allowed \MessageBreak -as IEEEeqnarray column specifiers.}\fi\fi} - - -% usage: \@IEEEgetcurcol{col specifier} -% verify the letter referenced column exists -% and return its name in \@IEEEBPcurcolname -% if column specifier is invalid, use the default column @IEEEdefault -\def\@IEEEgetcurcol#1{\expandafter\ifx\csname @IEEEeqnarraycolDEF#1\endcsname\@IEEEeqnarraycolisdefined% -\def\@IEEEBPcurcolname{#1}\else% invalid column name -\@IEEEclspkgerror{Invalid column type "#1" in column specifications.\MessageBreak -Using a default centering column instead}% -{You must define IEEEeqnarray column types before use.}% -\def\@IEEEBPcurcolname{@IEEEdefault}\fi} - - -% usage: \@IEEEgetcurglue{glue specifier}{\output} -% identify the predefined (punctuation) glue value -% and return it in the given output macro -\def\@IEEEgetcurglue#1#2{% -% ! = \! (neg small) -0.16667em (-3/18 em) -% , = \, (small) 0.16667em ( 3/18 em) -% : = \: (med) 0.22222em ( 4/18 em) -% ; = \; (large) 0.27778em ( 5/18 em) -% ' = \quad 1em -% " = \qquad 2em -% . = 0.5\arraycolsep -% / = \arraycolsep -% ? = 2\arraycolsep -% * = 1fil -% + = \@IEEEeqnarraycolSEPcenter -% - = \@IEEEeqnarraycolSEPzero -% Note that all em values are referenced to the math font (textfont2) fontdimen6 -% value for 1em. -% -% use only the very first token to determine the type -\@IEEEextracttoken{#1}\relax -\ifx\@IEEEextractedtokensdiscarded\@empty\else - \typeout{** WARNING: IEEEeqnarray predefined inter-column glue type specifiers after the first in `\@IEEEextracttokenarg' ignored (line \the\inputlineno).}\relax -\fi -% get the math font 1em value -% LaTeX2e's NFSS2 does not preload the fonts, but \IEEEeqnarray needs -% to gain access to the math (\textfont2) font's spacing parameters. -% So we create a bogus box here that uses the math font to ensure -% that \textfont2 is loaded and ready. If this is not done, -% the \textfont2 stuff here may not work. -% Thanks to Bernd Raichle for his 1997 post on this topic. -{\setbox0=\hbox{$\displaystyle\relax$}}% -% fontdimen6 has the width of 1em (a quad). -\@IEEEtrantmpdimenA=\fontdimen6\textfont2\relax% -% identify the glue value based on the first token -% we discard anything after the first -\if!\@IEEEextractedtoken\@IEEEtrantmpdimenA=-0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if,\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.16667\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if:\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.22222\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if;\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.27778\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if'\@IEEEextractedtoken\@IEEEtrantmpdimenA=1\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if"\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\@IEEEtrantmpdimenA\edef#2{\the\@IEEEtrantmpdimenA}\else -\if.\@IEEEextractedtoken\@IEEEtrantmpdimenA=0.5\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else -\if/\@IEEEextractedtoken\edef#2{\the\arraycolsep}\else -\if?\@IEEEextractedtoken\@IEEEtrantmpdimenA=2\arraycolsep\edef#2{\the\@IEEEtrantmpdimenA}\else -\if *\@IEEEextractedtoken\edef#2{0pt plus 1fil minus 0pt}\else -\if+\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPcenter}\else -\if-\@IEEEextractedtoken\edef#2{\@IEEEeqnarraycolSEPzero}\else -\edef#2{\@IEEEeqnarraycolSEPzero}% -\@IEEEclspkgerror{Invalid predefined inter-column glue type "#1" in\MessageBreak -column specifications. Using a default value of\MessageBreak -0pt instead}% -{Only !,:;'"./?*+ and - are valid predefined glue types in the\MessageBreak -IEEEeqnarray column specifications.}\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - - -% usage: \@IEEEprocessNcol{digit} -% process a numerical digit from the column specification -% and look up the corresponding user defined glue value -% can transform current type from n to g or a as the user defined glue is acquired -\def\@IEEEprocessNcol#1{\if\@IEEEBPprevtype g% -\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak -specifications. Ignoring consecutive glue specifiers\MessageBreak -after the first}% -{You cannot have two or more glue types next to each other\MessageBreak -in the IEEEeqnarray column specifications.}% -\let\@IEEEBPcurtype=a% abort this glue, future digits will be discarded -\@IEEEBPcurnum=0\relax% -\else% if we previously aborted a glue -\if\@IEEEBPprevtype a\@IEEEBPcurnum=0\let\@IEEEBPcurtype=a%maintain digit abortion -\else%acquire this number -% save the previous type before the numerical digits started -\if\@IEEEBPprevtype n\else\let\@IEEEBPprevsavedtype=\@IEEEBPprevtype\fi% -\multiply\@IEEEBPcurnum by 10\relax% -\advance\@IEEEBPcurnum by #1\relax% add in number, \relax is needed to stop TeX's number scan -\if\@IEEEBPnexttype n\else%close acquisition -\expandafter\ifx\csname @IEEEeqnarraycolSEPDEF\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname\@IEEEeqnarraycolisdefined% -\edef\@IEEEBPcurglue{\csname @IEEEeqnarraycolSEP\expandafter\romannumeral\number\@IEEEBPcurnum\endcsname}% -\else%user glue not defined -\@IEEEclspkgerror{Invalid user defined inter-column glue type "\number\@IEEEBPcurnum" in\MessageBreak -column specifications. Using a default value of\MessageBreak -0pt instead}% -{You must define all IEEEeqnarray numerical inter-column glue types via\MessageBreak -\string\IEEEeqnarraydefcolsep \space before they are used in column specifications.}% -\edef\@IEEEBPcurglue{\@IEEEeqnarraycolSEPzero}% -\fi% glue defined or not -\let\@IEEEBPcurtype=g% change the type to reflect the acquired glue -\let\@IEEEBPprevtype=\@IEEEBPprevsavedtype% restore the prev type before this number glue -\@IEEEBPcurnum=0\relax%ready for next acquisition -\fi%close acquisition, get glue -\fi%discard or acquire number -\fi%prevtype glue or not -} - - -% process an acquired glue -% add any acquired column/glue pair to the preamble -\def\@IEEEprocessGcol{\if\@IEEEBPprevtype a\let\@IEEEBPcurtype=a%maintain previous glue abortions -\else -% if this is the start glue, save it, but do nothing else -% as this is not used in the preamble, but before -\if\@IEEEBPprevtype s\edef\@IEEEBPstartglue{\@IEEEBPcurglue}% -\else%not the start glue -\if\@IEEEBPprevtype g%ignore if back to back glues -\@IEEEclspkgerror{Back-to-back inter-column glue specifiers in column\MessageBreak -specifications. Ignoring consecutive glue specifiers\MessageBreak -after the first}% -{You cannot have two or more glue types next to each other\MessageBreak -in the IEEEeqnarray column specifications.}% -\let\@IEEEBPcurtype=a% abort this glue -\else% not a back to back glue -\if\@IEEEBPprevtype c\relax% if the previoustype was a col, add column/glue pair to preamble -\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi -\toks0={##}% -% make preamble advance col counter if this environment needs this -\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi -% insert the column defintion into the preamble, being careful not to expand -% the column definition -\@IEEEappendtoksA{\tabskip=\@IEEEBPcurglue}% -\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% -\@IEEEappendtoksA{\@IEEEBPcurcolname}% -\@IEEEappendNOEXPANDtoksA{\endcsname}% -\@IEEEappendtoksA{\the\toks0}% -\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% -\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% -\@IEEEappendtoksA{\@IEEEBPcurcolname}% -\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% -\relax\relax\relax\relax\relax\endgroup}% -\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble -\else% error: non-start glue with no pending column -\@IEEEclspkgerror{Inter-column glue specifier without a prior column\MessageBreak -type in the column specifications. Ignoring this glue\MessageBreak -specifier}% -{Except for the first and last positions, glue can be placed only\MessageBreak -between column types.}% -\let\@IEEEBPcurtype=a% abort this glue -\fi% previous was a column -\fi% back-to-back glues -\fi% is start column glue -\fi% prev type not a -} - - -% process an acquired letter referenced column and, if necessary, add it to the preamble -\def\@IEEEprocessCcol{\if\@IEEEBPnexttype g\else -\if\@IEEEBPnexttype n\else -% we have a column followed by something other than a glue (or numeral glue) -% so we must add this column to the preamble now -\ifnum\@IEEEeqnnumcols>0\relax\@IEEEappendtoksA{&}\fi%col separator for those after the first -\if\@IEEEBPnexttype e\@IEEEappendtoksA{\tabskip=\@IEEEBPendglue\relax}\else%put in end glue -\@IEEEappendtoksA{\tabskip=\@IEEEeqnarraycolSEPdefaultmid\relax}\fi% or default mid glue -\toks0={##}% -% make preamble advance col counter if this environment needs this -\if@advanceIEEEeqncolcnt\@IEEEappendtoksA{\global\advance\@IEEEeqncolcnt by 1\relax}\fi -% insert the column definition into the preamble, being careful not to expand -% the column definition -\@IEEEappendNOEXPANDtoksA{\begingroup\csname @IEEEeqnarraycolPRE}% -\@IEEEappendtoksA{\@IEEEBPcurcolname}% -\@IEEEappendNOEXPANDtoksA{\endcsname}% -\@IEEEappendtoksA{\the\toks0}% -\@IEEEappendNOEXPANDtoksA{\relax\relax\relax\relax\relax% -\relax\relax\relax\relax\relax\csname @IEEEeqnarraycolPOST}% -\@IEEEappendtoksA{\@IEEEBPcurcolname}% -\@IEEEappendNOEXPANDtoksA{\endcsname\relax\relax\relax\relax\relax% -\relax\relax\relax\relax\relax\endgroup}% -\advance\@IEEEeqnnumcols by 1\relax%one more column in the preamble -\fi%next type not numeral -\fi%next type not glue -} - - -%% -%% END OF IEEEeqnarray DEFINITIONS -%% - - - - - -% set up the running headers and footers -% -% header and footer font and size specifications -\def\@IEEEheaderstyle{\normalfont\scriptsize} -\def\@IEEEfooterstyle{\normalfont\scriptsize} -% -% compsoc uses sans-serif headers and footers -\ifCLASSOPTIONcompsoc - \def\@IEEEheaderstyle{\normalfont\sffamily\scriptsize} - \def\@IEEEfooterstyle{\normalfont\sffamily\scriptsize} -\fi - - -% standard page style, ps@headings -\def\ps@headings{% default to standard twoside headers, no footers -% will change later if the mode requires otherwise -\def\@oddhead{\hbox{}\@IEEEheaderstyle\rightmark\hfil\thepage}\relax -\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax -\let\@oddfoot\@empty -\let\@evenfoot\@empty -\ifCLASSOPTIONtechnote - % technote twoside - \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax - \def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax -\fi -\ifCLASSOPTIONdraftcls - % draft footers - \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax - \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax -\fi -% oneside -\if@twoside\else - % standard one side headers - \def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax - \let\@evenhead\@empty - \ifCLASSOPTIONdraftcls - % oneside draft footers - \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax - \let\@evenfoot\@empty - \fi -\fi -% turn off headers for conferences -\ifCLASSOPTIONconference - \let\@oddhead\@empty - \let\@evenhead\@empty -\fi -% turn off footers for draftclsnofoot -\ifCLASSOPTIONdraftclsnofoot - \let\@oddfoot\@empty - \let\@evenfoot\@empty -\fi} - - -% title page style, ps@IEEEtitlepagestyle -\def\ps@IEEEtitlepagestyle{% default title page headers, no footers -\def\@oddhead{\hbox{}\@IEEEheaderstyle\leftmark\hfil\thepage}\relax -\def\@evenhead{\@IEEEheaderstyle\thepage\hfil\leftmark\hbox{}}\relax -\let\@oddfoot\@empty -\let\@evenfoot\@empty -% will change later if the mode requires otherwise -\ifCLASSOPTIONdraftcls - % draft footers - \ifCLASSOPTIONdraftclsnofoot\else - % but only if not draftclsnofoot - \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax - \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax - \fi -\else - % all nondraft mode footers - \if@IEEEusingpubid - % for title pages that are using a pubid - % do not repeat pubid on the title page if using a peer review cover page - \ifCLASSOPTIONpeerreview\else - % for noncompsoc papers, the pubid uses footnotesize and - % is at the same vertical position as where the last baseline would normally be - \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax - \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax - \ifCLASSOPTIONcompsoc - % for compsoc papers, the pubid is at the same vertical position as the normal footer - \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax - \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax - \fi - \fi - \fi -\fi -% turn off headers for conferences -\ifCLASSOPTIONconference - \let\@oddhead\@empty - \let\@evenhead\@empty -\fi} - - -% peer review cover page style, ps@IEEEpeerreviewcoverpagestyle -\def\ps@IEEEpeerreviewcoverpagestyle{% default peer review cover no headers, no footers -\let\@oddhead\@empty -\let\@evenhead\@empty -\let\@oddfoot\@empty -\let\@evenfoot\@empty -% will change later if the mode requires otherwise -\ifCLASSOPTIONdraftcls - % draft footers - \ifCLASSOPTIONdraftclsnofoot\else - % but only if not draftclsnofoot - \def\@oddfoot{\@IEEEfooterstyle\@date\hfil DRAFT}\relax - \def\@evenfoot{\@IEEEfooterstyle DRAFT\hfil\@date}\relax - \fi -\else - % all nondraft mode footers - \if@IEEEusingpubid - % for peer review cover pages that are using a pubid - % for noncompsoc papers, the pubid uses footnotesize and - % is at the same vertical position as where the last baseline would normally be - \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax - \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\footnotesize\raisebox{\footskip}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax - \ifCLASSOPTIONcompsoc - % for compsoc papers, the pubid is at the same vertical position as the normal footer - \def\@oddfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax - \def\@evenfoot{\hbox{}\hss\@IEEEfooterstyle\raisebox{0pt}[0pt][0pt]{\@IEEEpubid}\hss\hbox{}}\relax - \fi - \fi -\fi} - - - -%% Defines the command for putting the header. -%% Note that all the text is forced into uppercase, if you have some text -%% that needs to be in lower case, for instance et. al., then either manually -%% set \leftmark and \rightmark or use \MakeLowercase{et. al.} within the -%% arguments to \markboth. -%% V1.7b add \protect to work with Babel -\def\markboth#1#2{\def\leftmark{\MakeUppercase{\protect#1}}% -\def\rightmark{\MakeUppercase{\protect#2}}} - -\def\today{\ifcase\month\or - January\or February\or March\or April\or May\or June\or - July\or August\or September\or October\or November\or December\fi - \space\number\day, \number\year} - - - - -%% CITATION AND BIBLIOGRAPHY COMMANDS -%% -%% V1.6 no longer supports the older, nonstandard \shortcite and \citename setup stuff -% -% -% Modify Latex2e \@citex to separate citations with "], [" -\def\@citex[#1]#2{% - \let\@citea\@empty - \@cite{\@for\@citeb:=#2\do - {\@citea\def\@citea{], [}% - \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% - \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi - \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}% - \G@refundefinedtrue - \@latex@warning - {Citation `\@citeb' on page \thepage \space undefined}}% - {\hbox{\csname b@\@citeb\endcsname}}}}{#1}} - -% V1.6 we create hooks for the optional use of Donald Arseneau's -% cite.sty package. cite.sty is "smart" and will notice that the -% following format controls are already defined and will not -% redefine them. The result will be the proper sorting of the -% citation numbers and auto detection of 3 or more entry "ranges" - -% all in IEEE style: [1], [2], [5]--[7], [12] -% This also allows for an optional note, i.e., \cite[mynote]{..}. -% If the \cite with note has more than one reference, the note will -% be applied to the last of the listed references. It is generally -% desired that if a note is given, only one reference is listed in -% that \cite. -% Thanks to Mr. Arseneau for providing the required format arguments -% to produce the IEEE style. -\def\citepunct{], [} -\def\citedash{]--[} - -% V1.7 default to using same font for urls made by url.sty -\AtBeginDocument{\csname url@samestyle\endcsname} - -% V1.6 class files should always provide these -\def\newblock{\hskip .11em\@plus.33em\@minus.07em} -\let\@openbib@code\@empty -% V1.8b article.cls is now providing these too -% we do not use \@mkboth, nor alter the page style -\newenvironment{theindex} - {\if@twocolumn - \@restonecolfalse - \else - \@restonecoltrue - \fi - \twocolumn[\section*{\indexname}]% - \parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \columnseprule \z@ - \columnsep 35\p@ - \let\item\@idxitem} - {\if@restonecol\onecolumn\else\clearpage\fi} -\newcommand\@idxitem{\par\hangindent 40\p@} -\newcommand\subitem{\@idxitem \hspace*{20\p@}} -\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} -\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} - - - -% Provide support for the control entries of IEEEtran.bst V1.00 and later. -% V1.7 optional argument allows for a different aux file to be specified in -% order to handle multiple bibliographies. For example, with multibib.sty: -% \newcites{sec}{Secondary Literature} -% \bstctlcite[@auxoutsec]{BSTcontrolhak} -\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} -\def\@bstctlcite[#1]#2{\@bsphack - \@for\@citeb:=#2\do{% - \edef\@citeb{\expandafter\@firstofone\@citeb}% - \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% - \@esphack} - -% \IEEEnoauxwrite{} allows for citations that do not add to or affect -% the order of the existing citation list. Can be useful for \cite -% within \thanks{}. -\DeclareRobustCommand{\IEEEnoauxwrite}[1]{\relax -\if@filesw -\@fileswfalse -#1\relax\relax\relax\relax\relax -\@fileswtrue -\else -#1\relax\relax\relax\relax\relax -\fi} - -% V1.6 provide a way for a user to execute a command just before -% a given reference number - used to insert a \newpage to balance -% the columns on the last page -\edef\@IEEEtriggerrefnum{0} % the default of zero means that - % the command is not executed -\def\@IEEEtriggercmd{\newpage} - -% allow the user to alter the triggered command -\long\def\IEEEtriggercmd#1{\long\def\@IEEEtriggercmd{#1}} - -% allow user a way to specify the reference number just before the -% command is executed -\def\IEEEtriggeratref#1{\@IEEEtrantmpcountA=#1% -\edef\@IEEEtriggerrefnum{\the\@IEEEtrantmpcountA}}% - -% trigger command at the given reference -\def\@IEEEbibitemprefix{\@IEEEtrantmpcountA=\@IEEEtriggerrefnum\relax% -\advance\@IEEEtrantmpcountA by -1\relax% -\ifnum\c@enumiv=\@IEEEtrantmpcountA\relax\@IEEEtriggercmd\relax\fi} - - -\def\@biblabel#1{[#1]} - -% compsoc journals and conferences left align the reference numbers -\@IEEEcompsoconly{\def\@biblabel#1{[#1]\hfill}} - -% controls bib item spacing -\def\IEEEbibitemsep{0pt plus .5pt} - -\@IEEEcompsocconfonly{\def\IEEEbibitemsep{0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}} - - -\def\thebibliography#1{\section*{\refname}% - \addcontentsline{toc}{section}{\refname}% - % V1.6 add some rubber space here and provide a command trigger - \footnotesize\vskip 0.3\baselineskip plus 0.1\baselineskip minus 0.1\baselineskip% - \list{\@biblabel{\@arabic\c@enumiv}}% - {\settowidth\labelwidth{\@biblabel{#1}}% - \leftmargin\labelwidth - \advance\leftmargin\labelsep\relax - \itemsep \IEEEbibitemsep\relax - \usecounter{enumiv}% - \let\p@enumiv\@empty - \renewcommand\theenumiv{\@arabic\c@enumiv}}% - \let\@IEEElatexbibitem\bibitem% - \def\bibitem{\@IEEEbibitemprefix\@IEEElatexbibitem}% -\def\newblock{\hskip .11em plus .33em minus .07em}% -% originally: -% \sloppy\clubpenalty4000\widowpenalty4000% -% by adding the \interlinepenalty here, we make it more -% difficult, but not impossible, for LaTeX to break within a reference. -% The IEEE almost never breaks a reference (but they do it more often with -% technotes). You may get an underfull vbox warning around the bibliography, -% but the final result will be much more like what the IEEE will publish. -% MDS 11/2000 -\ifCLASSOPTIONtechnote\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty100% -\else\sloppy\clubpenalty4000\widowpenalty4000\interlinepenalty500\fi% - \sfcode`\.=1000\relax} -\let\endthebibliography=\endlist - - - - -% TITLE PAGE COMMANDS -% -% -% \IEEEmembership is used to produce the sublargesize italic font used to indicate author -% IEEE membership. compsoc uses a large size sans slant font -\def\IEEEmembership#1{{\@IEEEnotcompsoconly{\sublargesize}\normalfont\@IEEEcompsoconly{\sffamily}\textit{#1}}} - - -% \IEEEauthorrefmark{} produces a footnote type symbol to indicate author affiliation. -% When given an argument of 1 to 9, \IEEEauthorrefmark{} follows the standard LaTeX footnote -% symbol sequence convention. However, for arguments 10 and above, \IEEEauthorrefmark{} -% reverts to using lower case roman numerals, so it cannot overflow. Do note that you -% cannot use \footnotemark[] in place of \IEEEauthorrefmark{} within \author as the footnote -% symbols will have been turned off to prevent \thanks from creating footnote marks. -% \IEEEauthorrefmark{} produces a symbol that appears to LaTeX as having zero vertical -% height - this allows for a more compact line packing, but the user must ensure that -% the interline spacing is large enough to prevent \IEEEauthorrefmark{} from colliding -% with the text above. -% V1.7 make this a robust command -% V1.8 transmag uses an arabic author affiliation symbol -\ifCLASSOPTIONtransmag -\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize #1}}} -\else -\DeclareRobustCommand*{\IEEEauthorrefmark}[1]{\raisebox{0pt}[0pt][0pt]{\textsuperscript{\footnotesize\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or% - \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger% - \or \ddagger\ddagger \else\textsuperscript{\expandafter\romannumeral#1}\fi}}}} -\fi - - -% FONT CONTROLS AND SPACINGS FOR CONFERENCE MODE AUTHOR NAME AND AFFILIATION BLOCKS -% -% The default font styles for the author name and affiliation blocks (confmode) -\def\@IEEEauthorblockNstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} -\def\@IEEEauthorblockAstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\@IEEEcompsocconfonly{\itshape}\normalsize} -% The default if the user does not use an author block -\def\@IEEEauthordefaulttextstyle{\normalfont\@IEEEcompsocnotconfonly{\sffamily}\sublargesize} - -% adjustment spacing from title (or special paper notice) to author name blocks (confmode) -% can be negative -\def\@IEEEauthorblockconfadjspace{-0.25em} -% compsoc conferences need more space here -\@IEEEcompsocconfonly{\def\@IEEEauthorblockconfadjspace{0.75\@IEEEnormalsizeunitybaselineskip}} - -% spacing between name and affiliation blocks (confmode) -% This can be negative. -% The IEEE doesn't want any added spacing here, but I will leave these -% controls in place in case they ever change their mind. -% Personally, I like 0.75ex. -%\def\@IEEEauthorblockNtopspace{0.75ex} -%\def\@IEEEauthorblockAtopspace{0.75ex} -\def\@IEEEauthorblockNtopspace{0.0ex} -\def\@IEEEauthorblockAtopspace{0.0ex} -\ifCLASSOPTIONtransmag -% transmag uses one line of space above first affiliation block -\def\@IEEEauthorblockAtopspace{1\@IEEEnormalsizeunitybaselineskip} -\fi - -% baseline spacing within name and affiliation blocks (confmode) -% must be positive, spacings below certain values will make -% the position of line of text sensitive to the contents of the -% line above it i.e., whether or not the prior line has descenders, -% subscripts, etc. For this reason it is a good idea to keep -% these above 2.6ex -\def\@IEEEauthorblockNinterlinespace{2.6ex} -\def\@IEEEauthorblockAinterlinespace{2.75ex} - -% This tracks the required strut size. -% See the \@IEEEauthorhalign command for the actual default value used. -\def\@IEEEauthorblockXinterlinespace{2.7ex} - -% variables to retain font size and style across groups -% values given here have no effect as they will be overwritten later -\gdef\@IEEESAVESTATEfontsize{10} -\gdef\@IEEESAVESTATEfontbaselineskip{12} -\gdef\@IEEESAVESTATEfontencoding{OT1} -\gdef\@IEEESAVESTATEfontfamily{ptm} -\gdef\@IEEESAVESTATEfontseries{m} -\gdef\@IEEESAVESTATEfontshape{n} - -% saves the current font attributes -\def\@IEEEcurfontSAVE{\global\let\@IEEESAVESTATEfontsize\f@size% -\global\let\@IEEESAVESTATEfontbaselineskip\f@baselineskip% -\global\let\@IEEESAVESTATEfontencoding\f@encoding% -\global\let\@IEEESAVESTATEfontfamily\f@family% -\global\let\@IEEESAVESTATEfontseries\f@series% -\global\let\@IEEESAVESTATEfontshape\f@shape} - -% restores the saved font attributes -\def\@IEEEcurfontRESTORE{\fontsize{\@IEEESAVESTATEfontsize}{\@IEEESAVESTATEfontbaselineskip}% -\fontencoding{\@IEEESAVESTATEfontencoding}% -\fontfamily{\@IEEESAVESTATEfontfamily}% -\fontseries{\@IEEESAVESTATEfontseries}% -\fontshape{\@IEEESAVESTATEfontshape}% -\selectfont} - - -% variable to indicate if the current block is the first block in the column -\newif\if@IEEEprevauthorblockincol \@IEEEprevauthorblockincolfalse - - -% the command places a strut with height and depth = \@IEEEauthorblockXinterlinespace -% we use this technique to have complete manual control over the spacing of the lines -% within the halign environment. -% We set the below baseline portion at 30%, the above -% baseline portion at 70% of the total length. -% Responds to changes in the document's \baselinestretch -\def\@IEEEauthorstrutrule{\@IEEEtrantmpdimenA\@IEEEauthorblockXinterlinespace% -\@IEEEtrantmpdimenA=\baselinestretch\@IEEEtrantmpdimenA% -\rule[-0.3\@IEEEtrantmpdimenA]{0pt}{\@IEEEtrantmpdimenA}} - - -% blocks to hold the authors' names and affilations. -% Makes formatting easy for conferences -% -% use real definitions in conference mode -% name block -\def\IEEEauthorblockN#1{\relax\@IEEEauthorblockNstyle% set the default text style -\gdef\@IEEEauthorblockXinterlinespace{0pt}% disable strut for spacer row -% the \expandafter hides the \cr in conditional tex, see the array.sty docs -% for details, probably not needed here as the \cr is in a macro -% do a spacer row if needed -\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockNtopspaceline\fi -\global\@IEEEprevauthorblockincoltrue% we now have a block in this column -%restore the correct strut value -\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockNinterlinespace}% -% input the author names -#1% -% end the row if the user did not already -\crcr} -% spacer row for names -\def\@IEEEauthorblockNtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockNtopspace}} -% -% affiliation block -\def\IEEEauthorblockA#1{\relax\@IEEEauthorblockAstyle% set the default text style -\gdef\@IEEEauthorblockXinterlinespace{0pt}%disable strut for spacer row -% the \expandafter hides the \cr in conditional tex, see the array.sty docs -% for details, probably not needed here as the \cr is in a macro -% do a spacer row if needed -\if@IEEEprevauthorblockincol\expandafter\@IEEEauthorblockAtopspaceline\fi -\global\@IEEEprevauthorblockincoltrue% we now have a block in this column -%restore the correct strut value -\gdef\@IEEEauthorblockXinterlinespace{\@IEEEauthorblockAinterlinespace}% -% input the author affiliations -#1% -% end the row if the user did not already -\crcr -% V1.8 transmag does not use any additional affiliation spacing after the first author -\ifCLASSOPTIONtransmag\gdef\@IEEEauthorblockAtopspace{0pt}\fi} - -% spacer row for affiliations -\def\@IEEEauthorblockAtopspaceline{\cr\noalign{\vskip\@IEEEauthorblockAtopspace}} - - -% allow papers to compile even if author blocks are used in modes other -% than conference or peerreviewca. For such cases, we provide dummy blocks. -\ifCLASSOPTIONconference -\else - \ifCLASSOPTIONpeerreviewca\else - % not conference, peerreviewca or transmag mode - \ifCLASSOPTIONtransmag\else - \def\IEEEauthorblockN#1{#1}% - \def\IEEEauthorblockA#1{#1}% - \fi - \fi -\fi - - - -% we provide our own halign so as not to have to depend on tabular -\def\@IEEEauthorhalign{\@IEEEauthordefaulttextstyle% default text style - \lineskip=0pt\relax% disable line spacing - \lineskiplimit=0pt\relax% - \baselineskip=0pt\relax% - \@IEEEcurfontSAVE% save the current font - \mathsurround\z@\relax% no extra spacing around math - \let\\\@IEEEauthorhaligncr% replace newline with halign friendly one - \tabskip=0pt\relax% no column spacing - \everycr{}% ensure no problems here - \@IEEEprevauthorblockincolfalse% no author blocks yet - \def\@IEEEauthorblockXinterlinespace{2.7ex}% default interline space - \vtop\bgroup%vtop box - \halign\bgroup&\relax\hfil\@IEEEcurfontRESTORE\relax ##\relax - \hfil\@IEEEcurfontSAVE\@IEEEauthorstrutrule\cr} - -% ensure last line, exit from halign, close vbox -\def\end@IEEEauthorhalign{\crcr\egroup\egroup} - -% handle bogus star form -\def\@IEEEauthorhaligncr{{\ifnum0=`}\fi\@ifstar{\@@IEEEauthorhaligncr}{\@@IEEEauthorhaligncr}} - -% test and setup the optional argument to \\[] -\def\@@IEEEauthorhaligncr{\@testopt\@@@IEEEauthorhaligncr\z@skip} - -% end the line and do the optional spacer -\def\@@@IEEEauthorhaligncr[#1]{\ifnum0=`{\fi}\cr\noalign{\vskip#1\relax}} - - - -% flag to prevent multiple \and warning messages -\newif\if@IEEEWARNand -\@IEEEWARNandtrue - -% if in conference or peerreviewca modes, we support the use of \and as \author is a -% tabular environment, otherwise we warn the user that \and is invalid -% outside of conference or peerreviewca modes. -\def\and{\relax} % provide a bogus \and that we will then override - -\renewcommand{\and}[1][\relax]{\if@IEEEWARNand\typeout{** WARNING: \noexpand\and is valid only - when in conference or peerreviewca}\typeout{modes (line \the\inputlineno).}\fi\global\@IEEEWARNandfalse} - -\ifCLASSOPTIONconference% -\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% -\fi -\ifCLASSOPTIONpeerreviewca -\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% -\fi -% V1.8 transmag uses conference author format -\ifCLASSOPTIONtransmag -\renewcommand{\and}[1][\hfill]{\end{@IEEEauthorhalign}#1\begin{@IEEEauthorhalign}}% -\fi - -% page clearing command -% based on LaTeX2e's \cleardoublepage, but allows different page styles -% for the inserted blank pages -\def\@IEEEcleardoublepage#1{\clearpage\if@twoside\ifodd\c@page\else -\hbox{}\thispagestyle{#1}\newpage\if@twocolumn\hbox{}\thispagestyle{#1}\newpage\fi\fi\fi} - -% V1.8b hooks to allow adjustment of space above title -\def\IEEEtitletopspace{0.5\baselineskip} -% an added extra amount to allow for adjustment/offset -\def\IEEEtitletopspaceextra{0pt} - -% user command to invoke the title page -\def\maketitle{\par% - \begingroup% - \normalfont% - \def\thefootnote{}% the \thanks{} mark type is empty - \def\footnotemark{}% and kill space from \thanks within author - \let\@makefnmark\relax% V1.7, must *really* kill footnotemark to remove all \textsuperscript spacing as well. - \footnotesize% equal spacing between thanks lines - \footnotesep 0.7\baselineskip%see global setting of \footnotesep for more info - % V1.7 disable \thanks note indention for compsoc - \@IEEEcompsoconly{\long\def\@makefntext##1{\parindent 1em\noindent\hbox{\@makefnmark}##1}}% - \normalsize% - \ifCLASSOPTIONpeerreview - \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% - \thispagestyle{IEEEpeerreviewcoverpagestyle}\@thanks% - \else - \if@twocolumn% - \ifCLASSOPTIONtechnote% - \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% - \else - \twocolumn[{\IEEEquantizevspace{\@maketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}\@IEEEaftertitletext}]% - \fi - \else - \newpage\global\@topnum\z@ \@maketitle\@IEEEstatictitlevskip\@IEEEaftertitletext% - \fi - \thispagestyle{IEEEtitlepagestyle}\@thanks% - \fi - % pullup page for pubid if used. - \if@IEEEusingpubid - \enlargethispage{-\@IEEEpubidpullup}% - \fi - \endgroup - \setcounter{footnote}{0}\let\maketitle\relax\let\@maketitle\relax - \gdef\@thanks{}% - % v1.6b do not clear these as we will need the title again for peer review papers - % \gdef\@author{}\gdef\@title{}% - \let\thanks\relax} - - -% V1.8 parbox to format \@IEEEtitleabstractindextext -\long\def\@IEEEtitleabstractindextextbox#1{\parbox{1\textwidth}{#1}} -% V1.8 compsoc is partial width -\ifCLASSOPTIONcompsoc -% comparison with proofs suggests it's in the range of 92.1-92.3% -\long\def\@IEEEtitleabstractindextextbox#1{\parbox{0.922\textwidth}{\@IEEEcompsocnotconfonly{\rightskip\@flushglue\leftskip\z@skip}#1}} -\fi - -% formats the Title, authors names, affiliations and special paper notice -% THIS IS A CONTROLLED SPACING COMMAND! Do not allow blank lines or unintentional -% spaces to enter the definition - use % at the end of each line -\def\@maketitle{\newpage -\bgroup\par\vskip\IEEEtitletopspace\vskip\IEEEtitletopspaceextra\centering% -\ifCLASSOPTIONtechnote% technotes, V1.8a abstract and index terms are not treated differently for compsoc technotes - {\bfseries\large\@IEEEcompsoconly{\Large\sffamily}\@title\par}\vskip 1.3em{\lineskip .5em\@IEEEcompsoconly{\large\sffamily}\@author - \@IEEEspecialpapernotice\par}\relax -\else% not a technote - \vskip0.2em{\Huge\ifCLASSOPTIONtransmag\bfseries\LARGE\fi\@IEEEcompsoconly{\sffamily}\@IEEEcompsocconfonly{\normalfont\normalsize\vskip 2\@IEEEnormalsizeunitybaselineskip - \bfseries\Large}\@IEEEcompsocnotconfonly{\vskip 0.75\@IEEEnormalsizeunitybaselineskip}\@title\par}\relax - \@IEEEcompsocnotconfonly{\vskip 0.5\@IEEEnormalsizeunitybaselineskip}\vskip1.0em\par% - % V1.6 handle \author differently if in conference mode - \ifCLASSOPTIONconference% - {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% - \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par}\relax - \else% peerreviewca, peerreview or journal - \ifCLASSOPTIONpeerreviewca - % peerreviewca handles author names just like conference mode - {\@IEEEcompsoconly{\sffamily}\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% - \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par - {\@IEEEcompsoconly{\vskip 1.5em\relax - \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill - \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax - \else% journal, peerreview or transmag - \ifCLASSOPTIONtransmag - % transmag also handles author names just like conference mode - % it also uses \@IEEEtitleabstractindextex, but with one line less - % space above, and one more below - {\@IEEEspecialpapernotice\mbox{}\vskip\@IEEEauthorblockconfadjspace% - \mbox{}\hfill\begin{@IEEEauthorhalign}\@author\end{@IEEEauthorhalign}\hfill\mbox{}\par - {\vspace{0.5\baselineskip}\relax\@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\vspace{-1\baselineskip}\par}}\relax - \else% journal or peerreview - {\lineskip.5em\@IEEEcompsoconly{\sffamily}\sublargesize\@author\@IEEEspecialpapernotice\par - {\@IEEEcompsoconly{\vskip 1.5em\relax - \@IEEEtitleabstractindextextbox{\@IEEEtitleabstractindextext}\par\noindent\hfill - \IEEEcompsocdiamondline\hfill\hbox{}\par}}}\relax - \fi - \fi - \fi -\fi\par\addvspace{0.5\baselineskip}\egroup} - - -% V1.7 Computer Society "diamond line" which follows index terms for nonconference papers -% V1.8a full width diamond line for single column use -\def\@IEEEcompsocdiamondlinei{\vrule depth 0pt height 0.5pt width 4cm\nobreak\hspace{7.5pt}\nobreak -\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak -\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 4cm\relax} -% V1.8a narrower width diamond line for double column use -\def\@IEEEcompsocdiamondlineii{\vrule depth 0pt height 0.5pt width 2.5cm\nobreak\hspace{7.5pt}\nobreak -\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak -\hspace{7.5pt}\nobreak\vrule depth 0pt height 0.5pt width 2.5cm\relax} -% V1.8a bare core without rules to base a last resort on for very narrow linewidths -\def\@IEEEcompsocdiamondlineiii{\mbox{}\nobreak\hspace{7.5pt}\nobreak -\raisebox{-3.5pt}{\fontfamily{pzd}\fontencoding{U}\fontseries{m}\fontshape{n}\fontsize{11}{12}\selectfont\char70}\nobreak -\hspace{7.5pt}\nobreak\mbox{}\relax} - -% V1.8a allow \IEEEcompsocdiamondline to adjust for different linewidths. -% Use \@IEEEcompsocdiamondlinei if its width is less than 0.66\linewidth (0.487 nominal for single column) -% if not, fall back to \@IEEEcompsocdiamondlineii if its width is less than 0.75\linewidth (0.659 nominal for double column) -% if all else fails, try to make a custom diamondline based on the abnormally narrow linewidth -\def\IEEEcompsocdiamondline{\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlinei}\relax -\ifdim\@IEEEtrantmpdimenA<0.66\linewidth\relax\@IEEEcompsocdiamondlinei\relax -\else -\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineii}\relax -\ifdim\@IEEEtrantmpdimenA<0.75\linewidth\relax\@IEEEcompsocdiamondlineii\relax -\else -\settowidth{\@IEEEtrantmpdimenA}{\@IEEEcompsocdiamondlineiii}\relax -\@IEEEtrantmpdimenB=\linewidth\relax -\addtolength{\@IEEEtrantmpdimenB}{-1\@IEEEtrantmpdimenA}\relax -\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\@IEEEcompsocdiamondlineiii\vrule depth 0pt height 0.5pt width 0.33\@IEEEtrantmpdimenB\relax -\fi\fi} - - -% V1.7 standard LateX2e \thanks, but with \itshape under compsoc. Also make it a \long\def -% We also need to trigger the one-shot footnote rule -\def\@IEEEtriggeroneshotfootnoterule{\global\@IEEEenableoneshotfootnoteruletrue} - - -\long\def\thanks#1{\footnotemark - \protected@xdef\@thanks{\@thanks - \protect\footnotetext[\the\c@footnote]{\@IEEEcompsoconly{\itshape - \protect\@IEEEtriggeroneshotfootnoterule\relax}\ignorespaces#1}}} -\let\@thanks\@empty - - -% V1.7 allow \author to contain \par's. This is needed to allow \thanks to contain \par. -\long\def\author#1{\gdef\@author{#1}} - - -% in addition to setting up IEEEitemize, we need to remove a baselineskip space above and -% below it because \list's \pars introduce blank lines because of the footnote struts. -\def\@IEEEsetupcompsocitemizelist{\def\labelitemi{$\bullet$}% -\setlength{\IEEElabelindent}{0pt}\setlength{\labelsep}{1.2em}\setlength{\parskip}{0pt}% -\setlength{\partopsep}{0pt}\setlength{\topsep}{0.5\baselineskip}\vspace{-1\baselineskip}\relax} - - -% flag for fake non-compsoc \IEEEcompsocthanksitem - prevents line break on very first item -\newif\if@IEEEbreakcompsocthanksitem \@IEEEbreakcompsocthanksitemfalse - -\ifCLASSOPTIONcompsoc -% V1.7 compsoc bullet item \thanks -% also, we need to redefine this to destroy the argument in \IEEEquantizevspace -\long\def\IEEEcompsocitemizethanks#1{\relax\@IEEEbreakcompsocthanksitemfalse\footnotemark - \protected@xdef\@thanks{\@thanks - \protect\footnotetext[\the\c@footnote]{\itshape\protect\@IEEEtriggeroneshotfootnoterule - {\let\IEEEiedlistdecl\relax\protect\begin{IEEEitemize}[\protect\@IEEEsetupcompsocitemizelist]\ignorespaces#1\relax - \protect\end{IEEEitemize}}\protect\vspace{-1\baselineskip}}}} -\DeclareRobustCommand*{\IEEEcompsocthanksitem}{\item} -\else -% non-compsoc, allow for dual compilation via rerouting to normal \thanks -\long\def\IEEEcompsocitemizethanks#1{\thanks{#1}} -% redirect to "pseudo-par" \hfil\break\indent after swallowing [] from \IEEEcompsocthanksitem[] -\DeclareRobustCommand{\IEEEcompsocthanksitem}{\@ifnextchar [{\@IEEEthanksswallowoptionalarg}% -{\@IEEEthanksswallowoptionalarg[\relax]}} -% be sure and break only after first item, be sure and ignore spaces after optional argument -\def\@IEEEthanksswallowoptionalarg[#1]{\relax\if@IEEEbreakcompsocthanksitem\hfil\break -\indent\fi\@IEEEbreakcompsocthanksitemtrue\ignorespaces} -\fi - - -% V1.6b define the \IEEEpeerreviewmaketitle as needed -\ifCLASSOPTIONpeerreview -\def\IEEEpeerreviewmaketitle{\@IEEEcleardoublepage{empty}% -\ifCLASSOPTIONtwocolumn -\twocolumn[{\IEEEquantizevspace{\@IEEEpeerreviewmaketitle}[\IEEEquantizedisabletitlecmds]{0pt}[-\topskip]{\baselineskip}{\@IEEENORMtitlevspace}{\@IEEEMINtitlevspace}}] -\else -\newpage\@IEEEpeerreviewmaketitle\@IEEEstatictitlevskip -\fi -\thispagestyle{IEEEtitlepagestyle}} -\else -% \IEEEpeerreviewmaketitle does nothing if peer review option has not been selected -\def\IEEEpeerreviewmaketitle{\relax} -\fi - -% peerreview formats the repeated title like the title in journal papers. -\def\@IEEEpeerreviewmaketitle{\bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEcompsoconly{\sffamily}% -\normalfont\normalsize\vskip0.2em{\Huge\@title\par}\vskip1.0em\par -\par\addvspace{0.5\baselineskip}\egroup} - - - -% V1.6 -% this is a static rubber spacer between the title/authors and the main text -% used for single column text, or when the title appears in the first column -% of two column text (technotes). -\def\@IEEEstatictitlevskip{{\normalfont\normalsize -% adjust spacing to next text -% v1.6b handle peer review papers -\ifCLASSOPTIONpeerreview -% for peer review papers, the same value is used for both title pages -% regardless of the other paper modes - \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip -\else - \ifCLASSOPTIONconference% conference - \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% - \else% - \ifCLASSOPTIONtechnote% technote - \vskip 1\baselineskip plus 0.375\baselineskip minus 0.1875\baselineskip% - \else% journal uses more space - \vskip 2.5\baselineskip plus 0.75\baselineskip minus 0.375\baselineskip% - \fi - \fi -\fi}} - - -% set the nominal and minimum values for the quantized title spacer -% the quantization algorithm will not allow the spacer size to -% become less than \@IEEEMINtitlevspace - instead it will be lengthened -% default to journal values -\def\@IEEENORMtitlevspace{2.5\baselineskip} -\def\@IEEEMINtitlevspace{2\baselineskip} -% conferences and technotes need tighter spacing -\ifCLASSOPTIONconference% conference - \def\@IEEENORMtitlevspace{1\baselineskip} - \def\@IEEEMINtitlevspace{0.75\baselineskip} -\fi -\ifCLASSOPTIONtechnote% technote - \def\@IEEENORMtitlevspace{1\baselineskip} - \def\@IEEEMINtitlevspace{0.75\baselineskip} -\fi - - -% V1.8a -\def\IEEEquantizevspace{\begingroup\@ifstar{\@IEEEquantizevspacestarformtrue\@IEEEquantizevspace}{\@IEEEquantizevspacestarformfalse\@IEEEquantizevspace}} -% \IEEEquantizevspace[output dimen register]{object}[object decl] -% {top baselineskip} -% [offset][prevdepth][lineskip limit][lineskip] -% {unit height}{nominal vspace}{minimum vspace} -% -% Calculates and creates the vspace needed to make the combined height with -% the given object an integer multiple of the given unit height. This command -% is more general than the older \@IEEEdynamictitlevspace it replaces. -% -% The star form has no effect at present, but is reserved for future use. -% -% If the optional argument [output dimen register] is given, the calculated -% vspace height is stored in the given output dimen (or skip) register -% and no other action is taken, otherwise the object followed by a vspace* -% of the appropriate height is evaluated/output. -% -% The optional object decl (declarations) is code that is evaluated just -% before the object's height is evaluated. Its intented purpose is to allow -% for the alteration or disabling of code within the object during internal -% height evaluation (e.g., \long\def\thanks#1{\relax} ). -% This special code is not invoked if/when the object is rendered at the end. -% -% The nominal vspace is the target value of the added vspace and the minimum -% vspace is the lower allowed limit. The vspacer will be the value that achieves -% integral overall height, in terms of the given unit height, that is closest -% to the nominal vspace and that is not less than the specified minimum vspace. -% -% The line spacing algorithm of TeX is somewhat involved and requires special -% care with regard to the first line of a vertical list (which is indicated -% when \prevdepth is -1000pt or less). top baselineskip specifies the -% baselineskip or topskip used prior to the object. If the height of the -% first line of the object is greater than the given top baselineskip, then -% the top baselineskip is subtracted from the height of the first line and -% that difference is considered along with the rest of the object height -% (because the object will be shifted down by an amount = -% top line height - top baselineskip). Otherwise, the height of the first line -% of the object is ignored as far as the calculations are concerned. -% This algorithm is adequate for objects that appear at the top of a page -% (e.g., titles) where \topskip spacing is used. -% -% However, as explained on page 78 of the TeXbook, interline spacing is more -% complex when \baselineskip is being used (indicated by \prevdepth > -% -1000pt). The four optional parameters offset, prevdepth, lineskip limit and -% lineskip are assumed to be equal to be 0pt, \prevdepth, \lineskiplimit and -% \lineskip, respectively, if they are omitted. -% -% The prevdepth is the depth of the line before the object, the lineskip limit -% specifies how close the top of the object can come to the bottom of the -% previous line before \baselineskip is ignored and \lineskip is inserted -% between the object and the line above it. Lineskip does not come into -% play unless the first line of the object is high enough to "get too close" -% (as specified by lineskiplimit) to the line before it. The the prevdepth, -% lineskip limit, and lineskip optional parameters are not needed for the -% first object/line on a page (i.e., prevdepth <= -1000pt) where the simplier -% \topskip spacing rules are in effect. -% -% Offset is a manual adjustment that is added to the height calculations of -% object irrespective of the value of \prevdepth. It is useful when the top -% baselineskip will result in a noninteger unit height object placement even -% if the object itself has integral height. e.g., a footnotesize baselineskip -% is used before the object, thus an offset of, say -3pt, can be given as a -% correction. - -% Common combinations of these parameters include: -% -% top baselineskip: (and default values for offset, prevdepth, etc.) -% \topskip % for objects that appear at the top of a page -% \maxdimen % always ignore the height of the top line -% 0pt % always consider any positive height of the top line -% -% for objects to appear inline in normal text: -% top baselineskip = \baselineskip -% -% set prevdepth = -1000pt and top baselineskip = 0pt to consider the -% overall height of the object without any other external skip -% consideration - -\newif\if@IEEEquantizevspacestarform % flag to indicate star form -\newif\if@IEEEquantizevspaceuseoutdimenreg % flag to indicate output dimen register is to be used -% Use our own private registers because the object could contain a -% structure that uses the existing tmp scratch pad registers -\newdimen\@IEEEquantizeheightA -\newdimen\@IEEEquantizeheightB -\newdimen\@IEEEquantizeheightC -\newdimen\@IEEEquantizeprevdepth % need to save this early as can change -\newcount\@IEEEquantizemultiple -\newbox\@IEEEquantizeboxA - - -\def\@IEEEquantizevspace{\@ifnextchar [{\@IEEEquantizevspaceuseoutdimenregtrue\@@IEEEquantizevspace}{\@IEEEquantizevspaceuseoutdimenregfalse\@@IEEEquantizevspace[]}} - - -\long\def\@@IEEEquantizevspace[#1]#2{\relax -% acquire and store -% #1 optional output dimen register -% #2 object -\edef\@IEEEquantizeoutdimenreg{#1}\relax -% allow for object specifications that contain parameters -\@IEEEtrantmptoksA={#2}\relax -\long\edef\@IEEEquantizeobject{\the\@IEEEtrantmptoksA}\relax -\@ifnextchar [{\@@@IEEEquantizevspace}{\@@@IEEEquantizevspace[\relax]}} - -\long\def\@@@IEEEquantizevspace[#1]#2{\relax -% acquire and store -% [#1] optional object decl, is \relax if not given by user -% #2 top baselineskip -% allow for object decl specifications that have parameters -\@IEEEtrantmptoksA={#1}\relax -\long\edef\@IEEEquantizeobjectdecl{\the\@IEEEtrantmptoksA}\relax -\edef\@IEEEquantizetopbaselineskip{#2}\ivIEEEquantizevspace} - -% acquire optional argument set and store -% [offset][prevdepth][lineskip limit][lineskip] -\def\ivIEEEquantizevspace{\@ifnextchar [{\@vIEEEquantizevspace}{\@vIEEEquantizevspace[0pt]}} -\def\@vIEEEquantizevspace[#1]{\edef\@IEEEquantizeoffset{#1}\@ifnextchar [{\@viIEEEquantizevspace}{\@viIEEEquantizevspace[\prevdepth]}} -\def\@viIEEEquantizevspace[#1]{\@IEEEquantizeprevdepth=#1\relax\@ifnextchar [{\@viiIEEEquantizevspace}{\@viiIEEEquantizevspace[\lineskiplimit]}} -\def\@viiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskiplimit{#1}\@ifnextchar [{\@viiiIEEEquantizevspace}{\@viiiIEEEquantizevspace[\lineskip]}} -\def\@viiiIEEEquantizevspace[#1]{\edef\@IEEEquantizelineskip{#1}\@ixIEEEquantizevspace} - -% main routine -\def\@ixIEEEquantizevspace#1#2#3{\relax -\edef\@IEEEquantizeunitheight{#1}\relax -\edef\@IEEEquantizenomvspace{#2}\relax -\edef\@IEEEquantizeminvspace{#3}\relax -% \@IEEEquantizeoutdimenreg -% \@IEEEquantizeobject -% \@IEEEquantizeobjectdecl -% \@IEEEquantizetopbaselineskip -% \@IEEEquantizeoffset -% \@IEEEquantizeprevdepth -% \@IEEEquantizelineskiplimit -% \@IEEEquantizelineskip -% \@IEEEquantizeunitheight -% \@IEEEquantizenomvspace -% \@IEEEquantizeminvspace -% get overall height of object -\setbox\@IEEEquantizeboxA\vbox{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax -\@IEEEquantizeheightA\ht\@IEEEquantizeboxA\relax -% get height of first line of object -\setbox\@IEEEquantizeboxA\vtop{\begingroup\@IEEEquantizeobjectdecl\@IEEEquantizeobject\relax\endgroup}\relax -\@IEEEquantizeheightB\ht\@IEEEquantizeboxA\relax -\ifdim\@IEEEquantizeprevdepth>-1000pt\relax % prevdepth > -1000pf means full baselineskip\lineskip rules in effect -% lineskip spacing rule takes effect if height of top line > baselineskip - prevdepth - lineskiplimit, -% otherwise the baselineskip rule is in effect and the height of the first line does not matter at all. -\@IEEEquantizeheightC=\@IEEEquantizetopbaselineskip\relax -\advance\@IEEEquantizeheightC-\@IEEEquantizeprevdepth\relax -\advance\@IEEEquantizeheightC-\@IEEEquantizelineskiplimit\relax % this works even though \@IEEEquantizelineskiplimit is a macro because TeX allows --10pt notation -\ifdim\@IEEEquantizeheightB>\@IEEEquantizeheightC\relax -% lineskip spacing rule is in effect i.e., the object is going to be shifted down relative to the -% baselineskip set position by its top line height (already a part of the total height) + prevdepth + lineskip - baselineskip -\advance\@IEEEquantizeheightA\@IEEEquantizeprevdepth\relax -\advance\@IEEEquantizeheightA\@IEEEquantizelineskip\relax -\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax -\else -% height of first line <= \@IEEEquantizetopbaselineskip - \@IEEEquantizeprevdepth - \@IEEEquantizelineskiplimit -% standard baselineskip rules are in effect, so don't consider height of first line -\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax -\fi -% -\else % prevdepth <= -1000pt, simplier \topskip type rules in effect -\ifdim\@IEEEquantizeheightB>\@IEEEquantizetopbaselineskip -% height of top line (already included in the total height) in excess of -% baselineskip is the amount it will be downshifted -\advance\@IEEEquantizeheightA-\@IEEEquantizetopbaselineskip\relax -\else -% height of first line is irrelevant, remove it -\advance\@IEEEquantizeheightA-\@IEEEquantizeheightB\relax -\fi -\fi % prevdepth <= -1000pt -% -% adjust height for any manual offset -\advance\@IEEEquantizeheightA\@IEEEquantizeoffset\relax -% add in nominal spacer -\advance\@IEEEquantizeheightA\@IEEEquantizenomvspace\relax -% check for nonzero unitheight -\@IEEEquantizeheightB=\@IEEEquantizeunitheight\relax -\ifnum\@IEEEquantizeheightB=0\relax -\@IEEEclspkgerror{IEEEquantizevspace unit height cannot be zero. Assuming 10pt.}% -{Division by zero is not allowed.} -\@IEEEquantizeheightB=10pt\relax -\fi -% get integer number of lines -\@IEEEquantizemultiple=\@IEEEquantizeheightA\relax -\divide\@IEEEquantizemultiple\@IEEEquantizeheightB\relax -% set A to contain the excess height over the \@IEEEquantizemultiple of lines -% A = height - multiple*unitheight -\@IEEEquantizeheightC\@IEEEquantizeheightB\relax -\multiply\@IEEEquantizeheightC\@IEEEquantizemultiple\relax -\advance\@IEEEquantizeheightA-\@IEEEquantizeheightC\relax -% set B to contain the height short of \@IEEEquantizemultiple+1 of lines -% B = unitheight - A -\advance\@IEEEquantizeheightB-\@IEEEquantizeheightA\relax -% choose A or B based on which is closer -\@IEEEquantizeheightC\@IEEEquantizenomvspace\relax -\ifdim\@IEEEquantizeheightA<\@IEEEquantizeheightB\relax -% C = nomvspace - A, go with lower -\advance\@IEEEquantizeheightC-\@IEEEquantizeheightA\relax -\else -% C = nomvspace + B, go with upper -\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax -\fi -% if violate lower bound, use next integer bound -\ifdim\@IEEEquantizeheightC<\@IEEEquantizeminvspace\relax -% A + B = unitheight -\advance\@IEEEquantizeheightC\@IEEEquantizeheightA\relax -\advance\@IEEEquantizeheightC\@IEEEquantizeheightB\relax -\fi -% export object and spacer outside of group -\global\let\@IEEEquantizeobjectout\@IEEEquantizeobject\relax -\global\@IEEEquantizeheightC\@IEEEquantizeheightC\relax -\endgroup -\if@IEEEquantizevspaceuseoutdimenreg -\@IEEEquantizeoutdimenreg=\@IEEEquantizeheightC\relax -\else -\@IEEEquantizeobjectout\relax -\vskip\@IEEEquantizeheightC\relax -\fi} - - -% user command to disable all global assignments, possible use within object decl -\def\IEEEquantizedisableglobal{\let\global\relax -\let\gdef\def -\let\xdef\edef} -% user command to allow for the disabling of \thanks and other commands, possible use within object decl -\def\IEEEquantizedisabletitlecmds{\long\def\thanks##1{\relax}\relax -\long\def\IEEEcompsocitemizethanks##1{\relax}\def\newpage{\relax}} - - - - - -% V1.6 -% we allow the user access to the last part of the title area -% useful in emergencies such as when a different spacing is needed -% This text is NOT compensated for in the dynamic sizer. -\let\@IEEEaftertitletext=\relax -\long\def\IEEEaftertitletext#1{\def\@IEEEaftertitletext{#1}} - - -% V1.7 provide a way for users to enter abstract and keywords -% into the onecolumn title are. This text is compensated for -% in the dynamic sizer. -\let\@IEEEtitleabstractindextext=\relax -\long\def\IEEEtitleabstractindextext#1{\def\@IEEEtitleabstractindextext{#1}} - -% V1.7 provide a way for users to get the \@IEEEtitleabstractindextext if -% not in compsoc or transmag journal mode - this way abstract and keywords -% can still be placed in their conventional position if not in those modes. -\def\IEEEdisplaynontitleabstractindextext{% -% display for all conference formats -\ifCLASSOPTIONconference\@IEEEtitleabstractindextext\relax -\else% non-conferences - % V1.8a display for all technotes - \ifCLASSOPTIONtechnote\@IEEEtitleabstractindextext\relax - % V1.8a add diamond line after abstract and index terms for compsoc technotes - \@IEEEcompsoconly{\noindent\hfill\IEEEcompsocdiamondline\hfill\hbox{}\par}\relax - \else % non-conferences and non-technotes - \ifCLASSOPTIONcompsoc% display if not compsoc and not transmag - \else - \ifCLASSOPTIONtransmag - \else% not compsoc journal nor transmag journal - \@IEEEtitleabstractindextext\relax - \fi - \fi - \fi -\fi} - - -% command to allow alteration of baselinestretch, but only if the current -% baselineskip is unity. Used to tweak the compsoc abstract and keywords line spacing. -\def\@IEEEtweakunitybaselinestretch#1{{\def\baselinestretch{1}\selectfont -\global\@tempskipa\baselineskip}\ifnum\@tempskipa=\baselineskip% -\def\baselinestretch{#1}\selectfont\fi\relax} - - -% abstract and keywords are in \small, except -% for 9pt docs in which they are in \footnotesize -% Because 9pt docs use an 8pt footnotesize, \small -% becomes a rather awkward 8.5pt -\def\@IEEEabskeysecsize{\small} -\ifx\CLASSOPTIONpt\@IEEEptsizenine - \def\@IEEEabskeysecsize{\footnotesize} -\fi - -% compsoc journals use \footnotesize, compsoc conferences use normalsize -\@IEEEcompsoconly{\def\@IEEEabskeysecsize{\footnotesize}} -\@IEEEcompsocconfonly{\def\@IEEEabskeysecsize{\small}} - - -% V1.6 have abstract and keywords strip leading spaces, pars and newlines -% so that spacing is more tightly controlled. -\def\abstract{\normalfont - \if@twocolumn - \@IEEEabskeysecsize\bfseries\textit{\abstractname}---\relax - \else - \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize - \fi\@IEEEgobbleleadPARNLSP} -% V1.6 The IEEE wants only 1 pica from end of abstract to introduction heading when in -% conference mode (the heading already has this much above it) -\def\endabstract{\relax\ifCLASSOPTIONconference\vspace{0ex}\else\vspace{1.34ex}\fi\par\if@twocolumn\else\endquotation\fi - \normalfont\normalsize} - -\def\IEEEkeywords{\normalfont - \if@twocolumn - \@IEEEabskeysecsize\bfseries\textit{\IEEEkeywordsname}---\relax - \else - \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize - \fi\@IEEEgobbleleadPARNLSP} -\def\endIEEEkeywords{\relax\ifCLASSOPTIONtechnote\vspace{1.34ex}\else\vspace{0.67ex}\fi - \par\if@twocolumn\else\endquotation\fi% - \normalfont\normalsize} - -% V1.7 compsoc keywords index terms -\ifCLASSOPTIONcompsoc - \ifCLASSOPTIONconference% compsoc conference -\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries - \if@twocolumn - \@IEEEabskeysecsize\noindent\textit{\abstractname}---\relax - \else - \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% - \fi\@IEEEgobbleleadPARNLSP} -\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\bfseries - \if@twocolumn - \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent - \textit{\IEEEkeywordsname}---\relax - \else - \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% - \fi\@IEEEgobbleleadPARNLSP} - \else% compsoc not conference -\def\abstract{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily - \if@twocolumn - \@IEEEabskeysecsize\noindent\textbf{\abstractname}---\relax - \else - \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize\textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% - \fi\@IEEEgobbleleadPARNLSP} -\def\IEEEkeywords{\normalfont\@IEEEtweakunitybaselinestretch{1.15}\sffamily - \if@twocolumn - \@IEEEabskeysecsize\vskip 0.5\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip\noindent - \textbf{\IEEEkeywordsname}---\relax - \else - \bgroup\par\addvspace{0.5\baselineskip}\centering\@IEEEabskeysecsize\textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize% - \fi\@IEEEgobbleleadPARNLSP} - \fi -\fi - -% V1.8 transmag keywords index terms -% no abstract name, use indentation -\ifCLASSOPTIONtransmag -\def\abstract{\normalfont\parindent 1em\relax - \if@twocolumn - \@IEEEabskeysecsize\bfseries\indent - \else - \bgroup\par\addvspace{0.5\baselineskip}\centering\vspace{-1.78ex}\@IEEEabskeysecsize - \textbf{\abstractname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize - \fi\@IEEEgobbleleadPARNLSP} - -\def\IEEEkeywords{\normalfont\parindent 1em\relax - \if@twocolumn - \@IEEEabskeysecsize\vspace{1\baselineskip}\bfseries\indent\textit{\IEEEkeywordsname}---\relax - \else - \bgroup\par\vspace{1\baselineskip}\centering\@IEEEabskeysecsize - \textbf{\IEEEkeywordsname}\par\addvspace{0.5\baselineskip}\egroup\quotation\@IEEEabskeysecsize - \fi\@IEEEgobbleleadPARNLSP} -\fi - - - -% gobbles all leading \, \\ and \par, upon finding first token that -% is not a \ , \\ or a \par, it ceases and returns that token -% -% used to strip leading \, \\ and \par from the input -% so that such things in the beginning of an environment will not -% affect the formatting of the text -\long\def\@IEEEgobbleleadPARNLSP#1{\let\@IEEEswallowthistoken=0% -\let\@IEEEgobbleleadPARNLSPtoken#1% -\let\@IEEEgobbleleadPARtoken=\par% -\let\@IEEEgobbleleadNLtoken=\\% -\let\@IEEEgobbleleadSPtoken=\ % -\def\@IEEEgobbleleadSPMACRO{\ }% -\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadPARtoken% -\let\@IEEEswallowthistoken=1% -\fi% -\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadNLtoken% -\let\@IEEEswallowthistoken=1% -\fi% -\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPtoken% -\let\@IEEEswallowthistoken=1% -\fi% -% a control space will come in as a macro -% when it is the last one on a line -\ifx\@IEEEgobbleleadPARNLSPtoken\@IEEEgobbleleadSPMACRO% -\let\@IEEEswallowthistoken=1% -\fi% -% if we have to swallow this token, do so and taste the next one -% else spit it out and stop gobbling -\ifx\@IEEEswallowthistoken 1\let\@IEEEnextgobbleleadPARNLSP=\@IEEEgobbleleadPARNLSP\else% -\let\@IEEEnextgobbleleadPARNLSP=#1\fi% -\@IEEEnextgobbleleadPARNLSP}% - - - - -% TITLING OF SECTIONS -\def\@IEEEsectpunct{:\ \,} % Punctuation after run-in section heading (headings which are - % part of the paragraphs), need little bit more than a single space - % spacing from section number to title -% compsoc conferences use regular period/space punctuation -\ifCLASSOPTIONcompsoc -\ifCLASSOPTIONconference -\def\@IEEEsectpunct{.\ } -\fi\fi - - -\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 0.5em\relax} - -\ifCLASSOPTIONcompsoc -% compsoc journals need extra spacing -\ifCLASSOPTIONconference\else -\def\@seccntformat#1{\csname the#1dis\endcsname\hskip 1em\relax} -\fi\fi - -%v1.7 put {} after #6 to allow for some types of user font control -%and use \@@par rather than \par -\def\@sect#1#2#3#4#5#6[#7]#8{% - \ifnum #2>\c@secnumdepth - \let\@svsec\@empty - \else - \refstepcounter{#1}% - % load section label and spacer into \@svsec - \protected@edef\@svsec{\@seccntformat{#1}\relax}% - \fi% - \@tempskipa #5\relax - \ifdim \@tempskipa>\z@% tempskipa determines whether is treated as a high - \begingroup #6{\relax% or low level heading - \noindent % subsections are NOT indented - % print top level headings. \@svsec is label, #8 is heading title - % The IEEE does not block indent the section title text, it flows like normal - {\hskip #3\relax\@svsec}{\interlinepenalty \@M #8\@@par}}% - \endgroup - \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else - \protect\numberline{\csname the#1\endcsname}\fi#7}% - \else % printout low level headings - % svsechd seems to swallow the trailing space, protect it with \mbox{} - % got rid of sectionmark stuff - \def\@svsechd{#6{\hskip #3\relax\@svsec #8\@IEEEsectpunct\mbox{}}% - \addcontentsline{toc}{#1}{\ifnum #2>\c@secnumdepth\relax\else - \protect\numberline{\csname the#1\endcsname}\fi#7}}% - \fi%skip down - \@xsect{#5}} - - -% section* handler -%v1.7 put {} after #4 to allow for some types of user font control -%and use \@@par rather than \par -\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax - \ifdim \@tempskipa>\z@ - %\begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M #5\par}\endgroup - % The IEEE does not block indent the section title text, it flows like normal - \begingroup \noindent #4{\relax{\hskip #1}{\interlinepenalty \@M #5\@@par}}\endgroup - % svsechd swallows the trailing space, protect it with \mbox{} - \else \def\@svsechd{#4{\hskip #1\relax #5\@IEEEsectpunct\mbox{}}}\fi - \@xsect{#3}} - - -%% SECTION heading spacing and font -%% -% arguments are: #1 - sectiontype name -% (for \@sect) #2 - section level -% #3 - section heading indent -% #4 - top separation (absolute value used, neg indicates not to indent main text) -% If negative, make stretch parts negative too! -% #5 - (absolute value used) positive: bottom separation after heading, -% negative: amount to indent main text after heading -% Both #4 and #5 negative means to indent main text and use negative top separation -% #6 - font control -% You've got to have \normalfont\normalsize in the font specs below to prevent -% trouble when you do something like: -% \section{Note}{\ttfamily TT-TEXT} is known to ... -% The IEEE sometimes REALLY stretches the area before a section -% heading by up to about 0.5in. However, it may not be a good -% idea to let LaTeX have quite this much rubber. -\ifCLASSOPTIONconference% -% The IEEE wants section heading spacing to decrease for conference mode -\def\section{\@startsection{section}{1}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% -{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% -\def\subsection{\@startsection{subsection}{2}{\z@}{1.5ex plus 1.5ex minus 0.5ex}% -{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% -\else % for journals -\def\section{\@startsection{section}{1}{\z@}{3.0ex plus 1.5ex minus 1.5ex}% V1.6 3.0ex from 3.5ex -{0.7ex plus 1ex minus 0ex}{\normalfont\normalsize\centering\scshape}}% -\def\subsection{\@startsection{subsection}{2}{\z@}{3.5ex plus 1.5ex minus 1.5ex}% -{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% -\fi - -% for both journals and conferences -% decided to put in a little rubber above the section, might help somebody -\def\subsubsection{\@startsection{subsubsection}{3}{\parindent}{0ex plus 0.1ex minus 0.1ex}% -{0ex}{\normalfont\normalsize\itshape}}% -\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% -{0ex}{\normalfont\normalsize\itshape}}% - - -% compsoc -\ifCLASSOPTIONcompsoc -\ifCLASSOPTIONconference -% compsoc conference -\def\section{\@startsection{section}{1}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% -{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\large\bfseries}}% -\def\subsection{\@startsection{subsection}{2}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% -{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}{\normalfont\sublargesize\bfseries}}% -\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{1\baselineskip plus 0.25\baselineskip minus 0.25\baselineskip}% -{0ex}{\normalfont\normalsize\bfseries}}% -\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{0ex plus 0.1ex minus 0.1ex}% -{0ex}{\normalfont\normalsize}}% -\else% compsoc journals -% use negative top separation as compsoc journals do not indent paragraphs after section titles -\def\section{\@startsection{section}{1}{\z@}{-3.5ex plus -2ex minus -1.5ex}% -{0.7ex plus 1ex minus 0ex}{\normalfont\sublargesize\sffamily\bfseries\scshape}}% -% Note that subsection and smaller may not be correct for the Computer Society, -% I have to look up an example. -\def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}% -{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}% -\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-2.5ex plus -1ex minus -1ex}% -{0.5ex plus 0.5ex minus 0ex}{\normalfont\normalsize\sffamily\itshape}}% -\def\paragraph{\@startsection{paragraph}{4}{2\parindent}{-0ex plus -0.1ex minus -0.1ex}% -{0ex}{\normalfont\normalsize}}% -\fi\fi - -% transmag -\ifCLASSOPTIONtransmag -\def\subsection{\@startsection{subsection}{2}{0.75\parindent}{3.5ex plus 1.5ex minus 1.5ex}% -{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\itshape}}% -\def\subsubsection{\@startsection{subsubsection}{3}{1.25\parindent}{0.1ex plus 0.1ex minus 0.1ex}% -{0.1ex}{\normalfont\normalsize\itshape}}% -\fi - - -% V1.8a provide for a raised line Introduction section for use with Computer -% Society papers. We have to remove any spacing glue after the section -% heading and then remove the blank line for the new paragraph after it. -% LaTeX's section handler alters \everypar and we need to propogate those -% changes outside of the \parbox lest there be spacing problems at the top -% of the next section. -\def\IEEEraisesectionheading#1{\noindent\raisebox{1.5\baselineskip}[0pt][0pt]{\parbox[b]{\columnwidth}{#1\unskip\global\everypar=\everypar}}\vspace{-1\baselineskip}\vspace{-\parskip}\par} - - - -%% ENVIRONMENTS -% "box" symbols at end of proofs -\def\IEEEQEDclosed{\mbox{\rule[0pt]{1.3ex}{1.3ex}}} % for a filled box -% V1.6 some journals use an open box instead that will just fit around a closed one -\def\IEEEQEDopen{{\setlength{\fboxsep}{0pt}\setlength{\fboxrule}{0.2pt}\fbox{\rule[0pt]{0pt}{1.3ex}\rule[0pt]{1.3ex}{0pt}}}} -\ifCLASSOPTIONcompsoc -\def\IEEEQED{\IEEEQEDopen} % default to open for compsoc -\else -\def\IEEEQED{\IEEEQEDclosed} % otherwise default to closed -\fi - -%V1.8 flag to indicate if QED symbol is to be shown -\newif\if@IEEEQEDshow \@IEEEQEDshowtrue -\def\IEEEproofindentspace{2\parindent}% V1.8 allow user to change indentation amount if desired -% v1.7 name change to avoid namespace collision with amsthm. Also add support -% for an optional argument. -\def\IEEEproof{\@ifnextchar[{\@IEEEproof}{\@IEEEproof[\IEEEproofname]}} -\def\@IEEEproof[#1]{\@IEEEQEDshowtrue\par\noindent\hspace{\IEEEproofindentspace}{\itshape #1: }} -\def\endIEEEproof{\if@IEEEQEDshow\hspace*{\fill}\nobreakspace\IEEEQED\fi\par} -% qedhere for equation environments, similar to AMS \qedhere -\def\IEEEQEDhereeqn{\global\@IEEEQEDshowfalse\eqno\let\eqno\relax\let\leqno\relax - \let\veqno\relax\hbox{\IEEEQED}} -% IEEE style qedhere for IEEEeqnarray and other environments -\def\IEEEQEDhere{\global\@IEEEQEDshowfalse\IEEEQED} -% command to disable QED at end of IEEEproof -\def\IEEEQEDoff{\global\@IEEEQEDshowfalse} - - -%\itemindent is set to \z@ by list, so define new temporary variable -\newdimen\@IEEEtmpitemindent - -\ifCLASSOPTIONcompsoc -% V1.8a compsoc uses bold theorem titles, a period instead of a colon, vertical spacing, and hanging indentation -% V1.8 allow long theorem names to break across lines. -% Thanks to Miquel Payaro for reporting this. -\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax - \topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip - \rmfamily\trivlist\hangindent\parindent% - \item[]\textit{\bfseries\noindent #1\ #2.} \itemindent\@IEEEtmpitemindent\relax} -\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax -\topsep 0.2\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip -\rmfamily\trivlist\hangindent\parindent% -% V1.6 The IEEE is back to using () around theorem names which are also in italics -% Thanks to Christian Peel for reporting this. - \item[]\textit{\bfseries\noindent #1\ #2\ (#3).} \itemindent\@IEEEtmpitemindent\relax} -% V1.7 remove bogus \unskip that caused equations in theorems to collide with -% lines below. -\def\@endtheorem{\endtrivlist\vskip 0.25\@IEEEnormalsizeunitybaselineskip plus 0.26\@IEEEnormalsizeunitybaselineskip minus 0.05\@IEEEnormalsizeunitybaselineskip} -\else -% -% noncompsoc -% -% V1.8 allow long theorem names to break across lines. -% Thanks to Miquel Payaro for reporting this. -\def\@begintheorem#1#2{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily\trivlist% - \item[]\textit{\indent #1\ #2:} \itemindent\@IEEEtmpitemindent\relax} -\def\@opargbegintheorem#1#2#3{\@IEEEtmpitemindent\itemindent\relax\topsep 0pt\rmfamily \trivlist% -% V1.6 The IEEE is back to using () around theorem names which are also in italics -% Thanks to Christian Peel for reporting this. - \item[]\textit{\indent #1\ #2\ (#3):} \itemindent\@IEEEtmpitemindent\relax} -% V1.7 remove bogus \unskip that caused equations in theorems to collide with -% lines below. -\def\@endtheorem{\endtrivlist} -\fi - - - -% V1.6 -% display command for the section the theorem is in - so that \thesection -% is not used as this will be in Roman numerals when we want arabic. -% LaTeX2e uses \def\@thmcounter#1{\noexpand\arabic{#1}} for the theorem number -% (second part) display and \def\@thmcountersep{.} as a separator. -% V1.7 intercept calls to the section counter and reroute to \@IEEEthmcounterinsection -% to allow \appendix(ices} to override as needed. -% -% special handler for sections, allows appendix(ices) to override -\gdef\@IEEEthmcounterinsection#1{\arabic{#1}} -% string macro -\edef\@IEEEstringsection{section} - -% redefine the #1#2[#3] form of newtheorem to use a hook to \@IEEEthmcounterinsection -% if section in_counter is used -\def\@xnthm#1#2[#3]{% - \expandafter\@ifdefinable\csname #1\endcsname - {\@definecounter{#1}\@newctr{#1}[#3]% - \edef\@IEEEstringtmp{#3} - \ifx\@IEEEstringtmp\@IEEEstringsection - \expandafter\xdef\csname the#1\endcsname{% - \noexpand\@IEEEthmcounterinsection{#3}\@thmcountersep - \@thmcounter{#1}}% - \else - \expandafter\xdef\csname the#1\endcsname{% - \expandafter\noexpand\csname the#3\endcsname \@thmcountersep - \@thmcounter{#1}}% - \fi - \global\@namedef{#1}{\@thm{#1}{#2}}% - \global\@namedef{end#1}{\@endtheorem}}} - - - -%% SET UP THE DEFAULT PAGESTYLE -\pagestyle{headings} -\pagenumbering{arabic} - -% normally the page counter starts at 1 -\setcounter{page}{1} -% however, for peerreview the cover sheet is page 0 or page -1 -% (for duplex printing) -\ifCLASSOPTIONpeerreview - \if@twoside - \setcounter{page}{-1} - \else - \setcounter{page}{0} - \fi -\fi - -% standard book class behavior - let bottom line float up and down as -% needed when single sided -\ifCLASSOPTIONtwoside\else\raggedbottom\fi -% if two column - turn on twocolumn, allow word spacings to stretch more and -% enforce a rigid position for the last lines -\ifCLASSOPTIONtwocolumn -% the peer review option delays invoking twocolumn - \ifCLASSOPTIONpeerreview\else - \twocolumn - \fi -\sloppy -\flushbottom -\fi - - - - -% \APPENDIX and \APPENDICES definitions - -% This is the \@ifmtarg command from the LaTeX ifmtarg package -% by Peter Wilson (CUA) and Donald Arseneau -% \@ifmtarg is used to determine if an argument to a command -% is present or not. -% For instance: -% \@ifmtarg{#1}{\typeout{empty}}{\typeout{has something}} -% \@ifmtarg is used with our redefined \section command if -% \appendices is invoked. -% The command \section will behave slightly differently depending -% on whether the user specifies a title: -% \section{My appendix title} -% or not: -% \section{} -% This way, we can eliminate the blank lines where the title -% would be, and the unneeded : after Appendix in the table of -% contents -\begingroup -\catcode`\Q=3 -\long\gdef\@ifmtarg#1{\@xifmtarg#1QQ\@secondoftwo\@firstoftwo\@nil} -\long\gdef\@xifmtarg#1#2Q#3#4#5\@nil{#4} -\endgroup -% end of \@ifmtarg defs - - -% V1.7 -% command that allows the one time saving of the original definition -% of section to \@IEEEappendixsavesection for \appendix or \appendices -% we don't save \section here as it may be redefined later by other -% packages (hyperref.sty, etc.) -\def\@IEEEsaveoriginalsectiononce{\let\@IEEEappendixsavesection\section -\let\@IEEEsaveoriginalsectiononce\relax} - -% neat trick to grab and process the argument from \section{argument} -% we process differently if the user invoked \section{} with no -% argument (title) -% note we reroute the call to the old \section* -\def\@IEEEprocessthesectionargument#1{% -\@ifmtarg{#1}{% -\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis}% -\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection}}{% -\@IEEEappendixsavesection*{\appendixname\nobreakspace\thesectiondis\\* #1}% -\addcontentsline{toc}{section}{\appendixname\nobreakspace\thesection: #1}}} - -% we use this if the user calls \section{} after -% \appendix-- which has no meaning. So, we ignore the -% command and its argument. Then, warn the user. -\def\@IEEEdestroythesectionargument#1{\typeout{** WARNING: Ignoring useless -\protect\section\space in Appendix (line \the\inputlineno).}} - - -% remember \thesection forms will be displayed in \ref calls -% and in the Table of Contents. -% The \sectiondis form is used in the actual heading itself - -% appendix command for one single appendix -% normally has no heading. However, if you want a -% heading, you can do so via the optional argument: -% \appendix[Optional Heading] -\def\appendix{\relax} -\renewcommand{\appendix}[1][]{\@IEEEsaveoriginalsectiononce\par - % v1.6 keep hyperref's identifiers unique - \gdef\theHsection{Appendix.A}% - % v1.6 adjust hyperref's string name for the section - \xdef\Hy@chapapp{appendix}% - \setcounter{section}{0}% - \setcounter{subsection}{0}% - \setcounter{subsubsection}{0}% - \setcounter{paragraph}{0}% - \gdef\thesection{A}% - \gdef\thesectiondis{}% - \gdef\thesubsection{\Alph{subsection}}% - \gdef\@IEEEthmcounterinsection##1{A} - \refstepcounter{section}% update the \ref counter - \@ifmtarg{#1}{\@IEEEappendixsavesection*{\appendixname}% - \addcontentsline{toc}{section}{\appendixname}}{% - \@IEEEappendixsavesection*{\appendixname\nobreakspace\\* #1}% - \addcontentsline{toc}{section}{\appendixname: #1}}% - % redefine \section command for appendix - % leave \section* as is - \def\section{\@ifstar{\@IEEEappendixsavesection*}{% - \@IEEEdestroythesectionargument}}% throw out the argument - % of the normal form -} - - - -% appendices command for multiple appendices -% user then calls \section with an argument (possibly empty) to -% declare the individual appendices -\def\appendices{\@IEEEsaveoriginalsectiononce\par - % v1.6 keep hyperref's identifiers unique - \gdef\theHsection{Appendix.\Alph{section}}% - % v1.6 adjust hyperref's string name for the section - \xdef\Hy@chapapp{appendix}% - \setcounter{section}{-1}% we want \refstepcounter to use section 0 - \setcounter{subsection}{0}% - \setcounter{subsubsection}{0}% - \setcounter{paragraph}{0}% - \ifCLASSOPTIONromanappendices% - \gdef\thesection{\Roman{section}}% - \gdef\thesectiondis{\Roman{section}}% - \@IEEEcompsocconfonly{\gdef\thesectiondis{\Roman{section}.}}% - \gdef\@IEEEthmcounterinsection##1{A\arabic{##1}} - \else% - \gdef\thesection{\Alph{section}}% - \gdef\thesectiondis{\Alph{section}}% - \@IEEEcompsocconfonly{\gdef\thesectiondis{\Alph{section}.}}% - \gdef\@IEEEthmcounterinsection##1{\Alph{##1}} - \fi% - \refstepcounter{section}% update the \ref counter - \setcounter{section}{0}% NEXT \section will be the FIRST appendix - % redefine \section command for appendices - % leave \section* as is - \def\section{\@ifstar{\@IEEEappendixsavesection*}{% process the *-form - \refstepcounter{section}% or is a new section so, - \@IEEEprocessthesectionargument}}% process the argument - % of the normal form -} - - - -% V1.7 compoc uses nonbold drop cap and small caps word style -\ifCLASSOPTIONcompsoc - \def\IEEEPARstartFONTSTYLE{\mdseries} - \def\IEEEPARstartWORDFONTSTYLE{\scshape} - \def\IEEEPARstartWORDCAPSTYLE{\relax} -\fi -% -% -% \IEEEPARstart -% Definition for the big two line drop cap letter at the beginning of the -% first paragraph of journal papers. The first argument is the first letter -% of the first word, the second argument is the remaining letters of the -% first word which will be rendered in upper case. -% In V1.6 this has been completely rewritten to: -% -% 1. no longer have problems when the user begins an environment -% within the paragraph that uses \IEEEPARstart. -% 2. auto-detect and use the current font family -% 3. revise handling of the space at the end of the first word so that -% interword glue will now work as normal. -% 4. produce correctly aligned edges for the (two) indented lines. -% -% We generalize things via control macros - playing with these is fun too. -% -% V1.7 added more control macros to make it easy for IEEEtrantools.sty users -% to change the font style. -% -% the number of lines that are indented to clear it -% may need to increase if using decenders -\providecommand{\IEEEPARstartDROPLINES}{2} -% minimum number of lines left on a page to allow a \@IEEEPARstart -% Does not take into consideration rubber shrink, so it tends to -% be overly cautious -\providecommand{\IEEEPARstartMINPAGELINES}{2} -% V1.7 the height of the drop cap is adjusted to match the height of this text -% in the current font (when \IEEEPARstart is called). -\providecommand{\IEEEPARstartHEIGHTTEXT}{T} -% the depth the letter is lowered below the baseline -% the height (and size) of the letter is determined by the sum -% of this value and the height of the \IEEEPARstartHEIGHTTEXT in the current -% font. It is a good idea to set this value in terms of the baselineskip -% so that it can respond to changes therein. -\providecommand{\IEEEPARstartDROPDEPTH}{1.1\baselineskip} -% V1.7 the font the drop cap will be rendered in, -% can take zero or one argument. -\providecommand{\IEEEPARstartFONTSTYLE}{\bfseries} -% V1.7 any additional, non-font related commands needed to modify -% the drop cap letter, can take zero or one argument. -\providecommand{\IEEEPARstartCAPSTYLE}{\MakeUppercase} -% V1.7 the font that will be used to render the rest of the word, -% can take zero or one argument. -\providecommand{\IEEEPARstartWORDFONTSTYLE}{\relax} -% V1.7 any additional, non-font related commands needed to modify -% the rest of the word, can take zero or one argument. -\providecommand{\IEEEPARstartWORDCAPSTYLE}{\MakeUppercase} -% This is the horizontal separation distance from the drop letter to the main text. -% Lengths that depend on the font (e.g., ex, em, etc.) will be referenced -% to the font that is active when \IEEEPARstart is called. -\providecommand{\IEEEPARstartSEP}{0.15em} -% V1.7 horizontal offset applied to the left of the drop cap. -\providecommand{\IEEEPARstartHOFFSET}{0em} -% V1.7 Italic correction command applied at the end of the drop cap. -\providecommand{\IEEEPARstartITLCORRECT}{\/} - -% width of the letter output, set globally. Can be used in \IEEEPARstartSEP -% or \IEEEPARstartHOFFSET, but not the height lengths. -\newdimen\IEEEPARstartletwidth -\IEEEPARstartletwidth 0pt\relax - -% definition of \IEEEPARstart -% THIS IS A CONTROLLED SPACING AREA, DO NOT ALLOW SPACES WITHIN THESE LINES -% -% The token \@IEEEPARstartfont will be globally defined after the first use -% of \IEEEPARstart and will be a font command which creates the big letter -% The first argument is the first letter of the first word and the second -% argument is the rest of the first word(s). -\def\IEEEPARstart#1#2{\par{% -% if this page does not have enough space, break it and lets start -% on a new one -\@IEEEtranneedspace{\IEEEPARstartMINPAGELINES\baselineskip}{\relax}% -% V1.7 move this up here in case user uses \textbf for \IEEEPARstartFONTSTYLE -% which uses command \leavevmode which causes an unwanted \indent to be issued -\noindent -% calculate the desired height of the big letter -% it extends from the top of \IEEEPARstartHEIGHTTEXT in the current font -% down to \IEEEPARstartDROPDEPTH below the current baseline -\settoheight{\@IEEEtrantmpdimenA}{\IEEEPARstartHEIGHTTEXT}% -\addtolength{\@IEEEtrantmpdimenA}{\IEEEPARstartDROPDEPTH}% -% extract the name of the current font in bold -% and place it in \@IEEEPARstartFONTNAME -\def\@IEEEPARstartGETFIRSTWORD##1 ##2\relax{##1}% -{\IEEEPARstartFONTSTYLE{\selectfont\edef\@IEEEPARstartFONTNAMESPACE{\fontname\font\space}% -\xdef\@IEEEPARstartFONTNAME{\expandafter\@IEEEPARstartGETFIRSTWORD\@IEEEPARstartFONTNAMESPACE\relax}}}% -% define a font based on this name with a point size equal to the desired -% height of the drop letter -\font\@IEEEPARstartsubfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenA\relax% -% save this value as a counter (integer) value (sp points) -\@IEEEtrantmpcountA=\@IEEEtrantmpdimenA% -% now get the height of the actual letter produced by this font size -\settoheight{\@IEEEtrantmpdimenB}{\@IEEEPARstartsubfont\IEEEPARstartCAPSTYLE{#1}}% -% If something bogus happens like the first argument is empty or the -% current font is strange, do not allow a zero height. -\ifdim\@IEEEtrantmpdimenB=0pt\relax% -\typeout{** WARNING: IEEEPARstart drop letter has zero height! (line \the\inputlineno)}% -\typeout{ Forcing the drop letter font size to 10pt.}% -\@IEEEtrantmpdimenB=10pt% -\fi% -% and store it as a counter -\@IEEEtrantmpcountB=\@IEEEtrantmpdimenB% -% Since a font size doesn't exactly correspond to the height of the capital -% letters in that font, the actual height of the letter, \@IEEEtrantmpcountB, -% will be less than that desired, \@IEEEtrantmpcountA -% we need to raise the font size, \@IEEEtrantmpdimenA -% by \@IEEEtrantmpcountA / \@IEEEtrantmpcountB -% But, TeX doesn't have floating point division, so we have to use integer -% division. Hence the use of the counters. -% We need to reduce the denominator so that the loss of the remainder will -% have minimal affect on the accuracy of the result -\divide\@IEEEtrantmpcountB by 200% -\divide\@IEEEtrantmpcountA by \@IEEEtrantmpcountB% -% Then reequalize things when we use TeX's ability to multiply by -% floating point values -\@IEEEtrantmpdimenB=0.005\@IEEEtrantmpdimenA% -\multiply\@IEEEtrantmpdimenB by \@IEEEtrantmpcountA% -% \@IEEEPARstartfont is globaly set to the calculated font of the big letter -% We need to carry this out of the local calculation area to to create the -% big letter. -\global\font\@IEEEPARstartfont\@IEEEPARstartFONTNAME\space at \@IEEEtrantmpdimenB% -% Now set \@IEEEtrantmpdimenA to the width of the big letter -% We need to carry this out of the local calculation area to set the -% hanging indent -\settowidth{\global\@IEEEtrantmpdimenA}{\@IEEEPARstartfont -\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}}}% -% end of the isolated calculation environment -\global\IEEEPARstartletwidth\@IEEEtrantmpdimenA\relax% -% add in the extra clearance we want -\advance\@IEEEtrantmpdimenA by \IEEEPARstartSEP\relax% -% add in the optional offset -\advance\@IEEEtrantmpdimenA by \IEEEPARstartHOFFSET\relax% -% V1.7 don't allow negative offsets to produce negative hanging indents -\@IEEEtrantmpdimenB\@IEEEtrantmpdimenA -\ifnum\@IEEEtrantmpdimenB < 0 \@IEEEtrantmpdimenB 0pt\fi -% \@IEEEtrantmpdimenA has the width of the big letter plus the -% separation space and \@IEEEPARstartfont is the font we need to use -% Now, we make the letter and issue the hanging indent command -% The letter is placed in a box of zero width and height so that other -% text won't be displaced by it. -\hangindent\@IEEEtrantmpdimenB\hangafter=-\IEEEPARstartDROPLINES% -\makebox[0pt][l]{\hspace{-\@IEEEtrantmpdimenA}% -\raisebox{-\IEEEPARstartDROPDEPTH}[0pt][0pt]{\hspace{\IEEEPARstartHOFFSET}% -\@IEEEPARstartfont\IEEEPARstartCAPSTYLE{#1\IEEEPARstartITLCORRECT}% -\hspace{\IEEEPARstartSEP}}}% -{\IEEEPARstartWORDFONTSTYLE{\IEEEPARstartWORDCAPSTYLE{\selectfont#2}}}} - - - - -% determines if the space remaining on a given page is equal to or greater -% than the specified space of argument one -% if not, execute argument two (only if the remaining space is greater than zero) -% and issue a \newpage -% -% example: \@IEEEtranneedspace{2in}{\vfill} -% -% Does not take into consideration rubber shrinkage, so it tends to -% be overly cautious -% Based on an example posted by Donald Arseneau -% Note this macro uses \@IEEEtrantmpdimenB internally for calculations, -% so DO NOT PASS \@IEEEtrantmpdimenB to this routine -% if you need a dimen register, import with \@IEEEtrantmpdimenA instead -\def\@IEEEtranneedspace#1#2{\penalty-100\begingroup%shield temp variable -\@IEEEtrantmpdimenB\pagegoal\advance\@IEEEtrantmpdimenB-\pagetotal% space left -\ifdim #1>\@IEEEtrantmpdimenB\relax% not enough space left -\ifdim\@IEEEtrantmpdimenB>\z@\relax #2\fi% -\newpage% -\fi\endgroup} - - - -% IEEEbiography ENVIRONMENT -% Allows user to enter biography leaving place for picture (adapts to font size) -% As of V1.5, a new optional argument allows you to have a real graphic! -% V1.5 and later also fixes the "colliding biographies" which could happen when a -% biography's text was shorter than the space for the photo. -% MDS 7/2001 -% V1.6 prevent multiple biographies from making multiple TOC entries -\newif\if@IEEEbiographyTOCentrynotmade -\global\@IEEEbiographyTOCentrynotmadetrue - -% biography counter so hyperref can jump directly to the biographies -% and not just the previous section -\newcounter{IEEEbiography} -\setcounter{IEEEbiography}{0} - -% photo area size -\def\@IEEEBIOphotowidth{1.0in} % width of the biography photo area -\def\@IEEEBIOphotodepth{1.25in} % depth (height) of the biography photo area -% area cleared for photo -\def\@IEEEBIOhangwidth{1.14in} % width cleared for the biography photo area -\def\@IEEEBIOhangdepth{1.25in} % depth cleared for the biography photo area - % actual depth will be a multiple of - % \baselineskip, rounded up -\def\@IEEEBIOskipN{4\baselineskip}% nominal value of the vskip above the biography - -\newenvironment{IEEEbiography}[2][]{\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize% -\unitlength 1in\parskip=0pt\par\parindent 1em\interlinepenalty500% -% we need enough space to support the hanging indent -% the nominal value of the spacer -% and one extra line for good measure -\@IEEEtrantmpdimenA=\@IEEEBIOhangdepth% -\advance\@IEEEtrantmpdimenA by \@IEEEBIOskipN% -\advance\@IEEEtrantmpdimenA by 1\baselineskip% -% if this page does not have enough space, break it and lets start -% with a new one -\@IEEEtranneedspace{\@IEEEtrantmpdimenA}{\relax}% -% nominal spacer can strech, not shrink use 1fil so user can out stretch with \vfill -\vskip \@IEEEBIOskipN plus 1fil minus 0\baselineskip% -% the default box for where the photo goes -\def\@IEEEtempbiographybox{{\setlength{\fboxsep}{0pt}\framebox{% -\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}\centering PLACE\\ PHOTO\\ HERE \end{minipage}}}}% -% -% detect if the optional argument was supplied, this requires the -% \@ifmtarg command as defined in the appendix section above -% and if so, override the default box with what they want -\@ifmtarg{#1}{\relax}{\def\@IEEEtempbiographybox{\mbox{\begin{minipage}[b][\@IEEEBIOphotodepth][c]{\@IEEEBIOphotowidth}% -\centering% -#1% -\end{minipage}}}}% end if optional argument supplied -% Make an entry into the table of contents only if we have not done so before -\if@IEEEbiographyTOCentrynotmade% -% link labels to the biography counter so hyperref will jump -% to the biography, not the previous section -\setcounter{IEEEbiography}{-1}% -\refstepcounter{IEEEbiography}% -\addcontentsline{toc}{section}{Biographies}% -\global\@IEEEbiographyTOCentrynotmadefalse% -\fi% -% one more biography -\refstepcounter{IEEEbiography}% -% Make an entry for this name into the table of contents -\addcontentsline{toc}{subsection}{#2}% -% V1.6 properly handle if a new paragraph should occur while the -% hanging indent is still active. Do this by redefining \par so -% that it will not start a new paragraph. (But it will appear to the -% user as if it did.) Also, strip any leading pars, newlines, or spaces. -\let\@IEEEBIOORGparCMD=\par% save the original \par command -\edef\par{\hfil\break\indent}% the new \par will not be a "real" \par -\settoheight{\@IEEEtrantmpdimenA}{\@IEEEtempbiographybox}% get height of biography box -\@IEEEtrantmpdimenB=\@IEEEBIOhangdepth% -\@IEEEtrantmpcountA=\@IEEEtrantmpdimenB% countA has the hang depth -\divide\@IEEEtrantmpcountA by \baselineskip% calculates lines needed to produce the hang depth -\advance\@IEEEtrantmpcountA by 1% ensure we overestimate -% set the hanging indent -\hangindent\@IEEEBIOhangwidth% -\hangafter-\@IEEEtrantmpcountA% -% reference the top of the photo area to the top of a capital T -\settoheight{\@IEEEtrantmpdimenB}{\mbox{T}}% -% set the photo box, give it zero width and height so as not to disturb anything -\noindent\makebox[0pt][l]{\hspace{-\@IEEEBIOhangwidth}\raisebox{\@IEEEtrantmpdimenB}[0pt][0pt]{% -\raisebox{-\@IEEEBIOphotodepth}[0pt][0pt]{\@IEEEtempbiographybox}}}% -% now place the author name and begin the bio text -\noindent\textbf{#2\ }\@IEEEgobbleleadPARNLSP}{\relax\let\par=\@IEEEBIOORGparCMD\par% -% 7/2001 V1.5 detect when the biography text is shorter than the photo area -% and pad the unused area - preventing a collision from the next biography entry -% MDS -\ifnum \prevgraf <\@IEEEtrantmpcountA\relax% detect when the biography text is shorter than the photo - \advance\@IEEEtrantmpcountA by -\prevgraf% calculate how many lines we need to pad - \advance\@IEEEtrantmpcountA by -1\relax% we compensate for the fact that we indented an extra line - \@IEEEtrantmpdimenA=\baselineskip% calculate the length of the padding - \multiply\@IEEEtrantmpdimenA by \@IEEEtrantmpcountA% - \noindent\rule{0pt}{\@IEEEtrantmpdimenA}% insert an invisible support strut -\fi% -\par\normalfont} - - - -% V1.6 -% added biography without a photo environment -\newenvironment{IEEEbiographynophoto}[1]{% -% Make an entry into the table of contents only if we have not done so before -\if@IEEEbiographyTOCentrynotmade% -% link labels to the biography counter so hyperref will jump -% to the biography, not the previous section -\setcounter{IEEEbiography}{-1}% -\refstepcounter{IEEEbiography}% -\addcontentsline{toc}{section}{Biographies}% -\global\@IEEEbiographyTOCentrynotmadefalse% -\fi% -% one more biography -\refstepcounter{IEEEbiography}% -% Make an entry for this name into the table of contents -\addcontentsline{toc}{subsection}{#1}% -\normalfont\@IEEEcompsoconly{\sffamily}\footnotesize\interlinepenalty500% -\vskip 4\baselineskip plus 1fil minus 0\baselineskip% -\parskip=0pt\par% -\noindent\textbf{#1\ }\@IEEEgobbleleadPARNLSP}{\relax\par\normalfont} - - -% provide the user with some old font commands -% got this from article.cls -\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} -\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} -\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} -\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} -\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} -\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} -\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} -\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} -\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} - - -% SPECIAL PAPER NOTICE COMMANDS -% -% holds the special notice text -\def\@IEEEspecialpapernotice{\relax} - -% for special papers, like invited papers, the user can do: -% \IEEEspecialpapernotice{(Invited Paper)} before \maketitle -\def\IEEEspecialpapernotice#1{\ifCLASSOPTIONconference% -\def\@IEEEspecialpapernotice{{\sublargesize\textit{#1}\vspace*{1em}}}% -\else% -\def\@IEEEspecialpapernotice{{\\*[1.5ex]\sublargesize\textit{#1}}\vspace*{-2ex}}% -\fi} - - - - -% PUBLISHER ID COMMANDS -% to insert a publisher's ID footer -% V1.6 \IEEEpubid has been changed so that the change in page size and style -% occurs in \maketitle. \IEEEpubid must now be issued prior to \maketitle -% use \IEEEpubidadjcol as before - in the second column of the title page -% These changes allow \maketitle to take the reduced page height into -% consideration when dynamically setting the space between the author -% names and the maintext. -% -% the amount the main text is pulled up to make room for the -% publisher's ID footer -% The IEEE uses about 1.3\baselineskip for journals, -% dynamic title spacing will clean up the fraction -\def\@IEEEpubidpullup{1.3\baselineskip} -\ifCLASSOPTIONtechnote -% for technotes it must be an integer of baselineskip as there can be no -% dynamic title spacing for two column mode technotes (the title is in the -% in first column) and we should maintain an integer number of lines in the -% second column -% There are some examples (such as older issues of "Transactions on -% Information Theory") in which the IEEE really pulls the text off the ID for -% technotes - about 0.55in (or 4\baselineskip). We'll use 2\baselineskip -% and call it even. -\def\@IEEEpubidpullup{2\baselineskip} -\fi - -% V1.7 compsoc does not use a pullup -\ifCLASSOPTIONcompsoc -\def\@IEEEpubidpullup{0pt} -\fi - -% holds the ID text -\def\@IEEEpubid{\relax} - -% flag so \maketitle can tell if \IEEEpubid was called -\newif\if@IEEEusingpubid -\global\@IEEEusingpubidfalse -% issue this command in the page to have the ID at the bottom -% V1.6 use before \maketitle -\def\IEEEpubid#1{\def\@IEEEpubid{#1}\global\@IEEEusingpubidtrue} - - -% command which will pull up (shorten) the column it is executed in -% to make room for the publisher ID. Place in the second column of -% the title page when using \IEEEpubid -% Is smart enough not to do anything when in single column text or -% if the user hasn't called \IEEEpubid -% currently needed in for the second column of a page with the -% publisher ID. If not needed in future releases, please provide this -% command and define it as \relax for backward compatibility -% v1.6b do not allow command to operate if the peer review option has been -% selected because \IEEEpubidadjcol will not be on the cover page. -% V1.7 do nothing if compsoc -\def\IEEEpubidadjcol{\ifCLASSOPTIONcompsoc\else\ifCLASSOPTIONpeerreview\else -\if@twocolumn\if@IEEEusingpubid\enlargethispage{-\@IEEEpubidpullup}\fi\fi\fi\fi} - -% Special thanks to Peter Wilson, Daniel Luecking, and the other -% gurus at comp.text.tex, for helping me to understand how best to -% implement the IEEEpubid command in LaTeX. - - - -%% Lockout some commands under various conditions - -% general purpose bit bucket -\newsavebox{\@IEEEtranrubishbin} - -% flags to prevent multiple warning messages -\newif\if@IEEEWARNthanks -\newif\if@IEEEWARNIEEEPARstart -\newif\if@IEEEWARNIEEEbiography -\newif\if@IEEEWARNIEEEbiographynophoto -\newif\if@IEEEWARNIEEEpubid -\newif\if@IEEEWARNIEEEpubidadjcol -\newif\if@IEEEWARNIEEEmembership -\newif\if@IEEEWARNIEEEaftertitletext -\@IEEEWARNthankstrue -\@IEEEWARNIEEEPARstarttrue -\@IEEEWARNIEEEbiographytrue -\@IEEEWARNIEEEbiographynophototrue -\@IEEEWARNIEEEpubidtrue -\@IEEEWARNIEEEpubidadjcoltrue -\@IEEEWARNIEEEmembershiptrue -\@IEEEWARNIEEEaftertitletexttrue - - -%% Lockout some commands when in various modes, but allow them to be restored if needed -%% -% save commands which might be locked out -% so that the user can later restore them if needed -\let\@IEEESAVECMDthanks\thanks -\let\@IEEESAVECMDIEEEPARstart\IEEEPARstart -\let\@IEEESAVECMDIEEEbiography\IEEEbiography -\let\@IEEESAVECMDendIEEEbiography\endIEEEbiography -\let\@IEEESAVECMDIEEEbiographynophoto\IEEEbiographynophoto -\let\@IEEESAVECMDendIEEEbiographynophoto\endIEEEbiographynophoto -\let\@IEEESAVECMDIEEEpubid\IEEEpubid -\let\@IEEESAVECMDIEEEpubidadjcol\IEEEpubidadjcol -\let\@IEEESAVECMDIEEEmembership\IEEEmembership -\let\@IEEESAVECMDIEEEaftertitletext\IEEEaftertitletext - - -% disable \IEEEPARstart when in draft mode -% This may have originally been done because the pre-V1.6 drop letter -% algorithm had problems with a non-unity baselinestretch -% At any rate, it seems too formal to have a drop letter in a draft -% paper. -\ifCLASSOPTIONdraftcls -\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** ATTENTION: \noexpand\IEEEPARstart - is disabled in draft mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} -\fi -% and for technotes -\ifCLASSOPTIONtechnote -\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart - is locked out for technotes (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} -\fi - - -% lockout unneeded commands when in conference mode -\ifCLASSOPTIONconference -% when locked out, \thanks, \IEEEbiography, \IEEEbiographynophoto, \IEEEpubid, -% \IEEEmembership and \IEEEaftertitletext will all swallow their given text. -% \IEEEPARstart will output a normal character instead -% warn the user about these commands only once to prevent the console screen -% from filling up with redundant messages -\def\thanks#1{\if@IEEEWARNthanks\typeout{** WARNING: \noexpand\thanks - is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNthanksfalse} -\def\IEEEPARstart#1#2{#1#2\if@IEEEWARNIEEEPARstart\typeout{** WARNING: \noexpand\IEEEPARstart - is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEPARstartfalse} - - -% LaTeX treats environments and commands with optional arguments differently. -% the actual ("internal") command is stored as \\commandname -% (accessed via \csname\string\commandname\endcsname ) -% the "external" command \commandname is a macro with code to determine -% whether or not the optional argument is presented and to provide the -% default if it is absent. So, in order to save and restore such a command -% we would have to save and restore \\commandname as well. But, if LaTeX -% ever changes the way it names the internal names, the trick would break. -% Instead let us just define a new environment so that the internal -% name can be left undisturbed. -\newenvironment{@IEEEbogusbiography}[2][]{\if@IEEEWARNIEEEbiography\typeout{** WARNING: \noexpand\IEEEbiography - is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographyfalse% -\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} -% and make biography point to our bogus biography -\let\IEEEbiography=\@IEEEbogusbiography -\let\endIEEEbiography=\end@IEEEbogusbiography - -\renewenvironment{IEEEbiographynophoto}[1]{\if@IEEEWARNIEEEbiographynophoto\typeout{** WARNING: \noexpand\IEEEbiographynophoto - is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEbiographynophotofalse% -\setbox\@IEEEtranrubishbin\vbox\bgroup}{\egroup\relax} - -\def\IEEEpubid#1{\if@IEEEWARNIEEEpubid\typeout{** WARNING: \noexpand\IEEEpubid - is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidfalse} -\def\IEEEpubidadjcol{\if@IEEEWARNIEEEpubidadjcol\typeout{** WARNING: \noexpand\IEEEpubidadjcol - is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEpubidadjcolfalse} -\def\IEEEmembership#1{\if@IEEEWARNIEEEmembership\typeout{** WARNING: \noexpand\IEEEmembership - is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEmembershipfalse} -\def\IEEEaftertitletext#1{\if@IEEEWARNIEEEaftertitletext\typeout{** WARNING: \noexpand\IEEEaftertitletext - is locked out when in conference mode (line \the\inputlineno).}\fi\global\@IEEEWARNIEEEaftertitletextfalse} -\fi - - -% provide a way to restore the commands that are locked out -\def\IEEEoverridecommandlockouts{% -\typeout{** ATTENTION: Overriding command lockouts (line \the\inputlineno).}% -\let\thanks\@IEEESAVECMDthanks% -\let\IEEEPARstart\@IEEESAVECMDIEEEPARstart% -\let\IEEEbiography\@IEEESAVECMDIEEEbiography% -\let\endIEEEbiography\@IEEESAVECMDendIEEEbiography% -\let\IEEEbiographynophoto\@IEEESAVECMDIEEEbiographynophoto% -\let\endIEEEbiographynophoto\@IEEESAVECMDendIEEEbiographynophoto% -\let\IEEEpubid\@IEEESAVECMDIEEEpubid% -\let\IEEEpubidadjcol\@IEEESAVECMDIEEEpubidadjcol% -\let\IEEEmembership\@IEEESAVECMDIEEEmembership% -\let\IEEEaftertitletext\@IEEESAVECMDIEEEaftertitletext} - - - -% need a backslash character for typeout output -{\catcode`\|=0 \catcode`\\=12 -|xdef|@IEEEbackslash{\}} - - -% hook to allow easy disabling of all legacy warnings -\def\@IEEElegacywarn#1#2{\typeout{** ATTENTION: \@IEEEbackslash #1 is deprecated (line \the\inputlineno). -Use \@IEEEbackslash #2 instead.}} - - -% provide some legacy IEEEtran commands -\def\IEEEcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEcompsoctitleabstractindextext}{IEEEtitleabstractindextext}\IEEEtitleabstractindextext} -\def\IEEEdisplaynotcompsoctitleabstractindextext{\@IEEElegacywarn{IEEEdisplaynotcompsoctitleabstractindextext}{IEEEdisplaynontitleabstractindextext}\IEEEdisplaynontitleabstractindextext} -% provide some legacy IEEEtran environments - - -% V1.8a no more support for these legacy commands -%\def\authorblockA{\@IEEElegacywarn{authorblockA}{IEEEauthorblockA}\IEEEauthorblockA} -%\def\authorblockN{\@IEEElegacywarn{authorblockN}{IEEEauthorblockN}\IEEEauthorblockN} -%\def\authorrefmark{\@IEEElegacywarn{authorrefmark}{IEEEauthorrefmark}\IEEEauthorrefmark} -%\def\PARstart{\@IEEElegacywarn{PARstart}{IEEEPARstart}\IEEEPARstart} -%\def\pubid{\@IEEElegacywarn{pubid}{IEEEpubid}\IEEEpubid} -%\def\pubidadjcol{\@IEEElegacywarn{pubidadjcol}{IEEEpubidadjcol}\IEEEpubidadjcol} -%\def\specialpapernotice{\@IEEElegacywarn{specialpapernotice}{IEEEspecialpapernotice}\IEEEspecialpapernotice} -% and environments -%\def\keywords{\@IEEElegacywarn{keywords}{IEEEkeywords}\IEEEkeywords} -%\def\endkeywords{\endIEEEkeywords} -% V1.8 no more support for legacy IED list commands -%\let\labelindent\IEEElabelindent -%\def\calcleftmargin{\@IEEElegacywarn{calcleftmargin}{IEEEcalcleftmargin}\IEEEcalcleftmargin} -%\def\setlabelwidth{\@IEEElegacywarn{setlabelwidth}{IEEEsetlabelwidth}\IEEEsetlabelwidth} -%\def\usemathlabelsep{\@IEEElegacywarn{usemathlabelsep}{IEEEusemathlabelsep}\IEEEusemathlabelsep} -%\def\iedlabeljustifyc{\@IEEElegacywarn{iedlabeljustifyc}{IEEEiedlabeljustifyc}\IEEEiedlabeljustifyc} -%\def\iedlabeljustifyl{\@IEEElegacywarn{iedlabeljustifyl}{IEEEiedlabeljustifyl}\IEEEiedlabeljustifyl} -%\def\iedlabeljustifyr{\@IEEElegacywarn{iedlabeljustifyr}{IEEEiedlabeljustifyr}\IEEEiedlabeljustifyr} -% V1.8 no more support for QED and proof stuff -%\def\QED{\@IEEElegacywarn{QED}{IEEEQED}\IEEEQED} -%\def\QEDclosed{\@IEEElegacywarn{QEDclosed}{IEEEQEDclosed}\IEEEQEDclosed} -%\def\QEDopen{\@IEEElegacywarn{QEDopen}{IEEEQEDopen}\IEEEQEDopen} -%\AtBeginDocument{\def\proof{\@IEEElegacywarn{proof}{IEEEproof}\IEEEproof}\def\endproof{\endIEEEproof}} -% V1.8 no longer support biography or biographynophoto -%\def\biography{\@IEEElegacywarn{biography}{IEEEbiography}\IEEEbiography} -%\def\biographynophoto{\@IEEElegacywarn{biographynophoto}{IEEEbiographynophoto}\IEEEbiographynophoto} -%\def\endbiography{\endIEEEbiography} -%\def\endbiographynophoto{\endIEEEbiographynophoto} -% V1.7 and later no longer supports \overrideIEEEmargins -%\def\overrideIEEEmargins{% -%\typeout{** WARNING: \string\overrideIEEEmargins \space no longer supported (line \the\inputlineno).}% -%\typeout{** Use the \string\CLASSINPUTinnersidemargin, \string\CLASSINPUToutersidemargin \space controls instead.}} - -\endinput - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%% End of IEEEtran.cls %%%%%%%%%%%%%%%%%%%%%%%%%%%% -% That's all folks! - diff --git a/pkg/urcrypt/argon2/latex/Makefile b/pkg/urcrypt/argon2/latex/Makefile deleted file mode 100644 index 2a85f65f1..000000000 --- a/pkg/urcrypt/argon2/latex/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -TEX = pdflatex -BIB = bibtex - -PROJECT = argon2-specs - -.PHONY: all clean update - -all: - $(TEX) $(PROJECT).tex - $(BIB) $(PROJECT).aux - $(TEX) $(PROJECT).tex - $(TEX) $(PROJECT).tex - -clean: - rm -rf *.aux *.bbl *.blg *.log *.out *.pdf *.toc *~ - -update: - mv $(PROJECT).pdf ./../$(PROJECT).pdf diff --git a/pkg/urcrypt/argon2/latex/argon2-specs.tex b/pkg/urcrypt/argon2/latex/argon2-specs.tex deleted file mode 100644 index b4ef39ca5..000000000 --- a/pkg/urcrypt/argon2/latex/argon2-specs.tex +++ /dev/null @@ -1,920 +0,0 @@ - -\documentclass[a4paper]{article} -\usepackage[hmargin=2cm,vmargin=2cm]{geometry} - - -\pagestyle{plain} - -\usepackage{amssymb,amsthm,amsfonts,longtable, comment,array, ifpdf, hyperref,cite,url} -\usepackage{graphicx} -\newtheorem{theorem}{Theorem} -\newtheorem{lemma}{Lemma} -\newcommand{\Tag}{\mathrm{Tag}} - - -% *** MATH PACKAGES *** -% -\usepackage[cmex10]{amsmath} - - - - -% *** SPECIALIZED LIST PACKAGES *** -% -\usepackage{algorithmic} - - - - - -\begin{document} - -%FINISHED - -\title{\textsf{Argon2: the memory-hard function for password hashing and other applications}} - -\author{Designers: Alex Biryukov, Daniel Dinu, and Dmitry Khovratovich\\University of Luxembourg, Luxembourg -\\[10pt] -%Submitters: Alex Biryukov and Dmitry Khovratovich -%\\ -{\tt alex.biryukov@uni.lu, dumitru-daniel.dinu@uni.lu, khovratovich@gmail.com}\\[10 pt] -\url{https://www.cryptolux.org/index.php/Argon2}\\ -\url{https://github.com/P-H-C/phc-winner-argon2}\\ -\url{https://github.com/khovratovich/Argon2}\\[10pt] -Version 1.3 of Argon2: PHC release} - -\maketitle - -\tableofcontents - -\section{Introduction} - -Passwords, despite all their drawbacks, remain the primary form of authentication on various web-services. Passwords are usually stored in a hashed form in a server's database. These databases are quite often captured by the adversaries, who then apply dictionary attacks since passwords tend to have low entropy. Protocol designers use a number of tricks to mitigate these issues. Starting from the late 70's, a password is hashed together with a random \emph{salt} value to prevent detection of identical passwords across different users and services. The hash function computations, which became faster and faster due to Moore's law have been called multiple times to increase the cost of password trial for the attacker. - - In the meanwhile, the password crackers migrated to new architectures, such as FPGAs, multiple-core GPUs and dedicated ASIC modules, where the amortized cost of a multiple-iterated hash function is much lower. It was quickly noted that these new environments are great when the computation is almost memoryless, but they experience difficulties when operating on a large amount of memory. The defenders responded by designing \emph{memory-hard} functions, which require a large amount of memory to be computed, and impose computational penalties if less memory is used. The password hashing scheme \textsf{scrypt}~\cite{percival2009stronger} is an instance of such function. - -Memory-hard schemes also have other applications. They can be used for key derivation from low-entropy sources. Memory-hard schemes are also welcome in cryptocurrency designs~\cite{litecoin} if a creator wants to demotivate the use of GPUs and ASICs for mining and promote the use of standard desktops. - -\paragraph{Problems of existing schemes} A trivial solution for password hashing is a keyed hash function such as HMAC. If the protocol designer prefers hashing without secret keys to avoid all the problems with key generation, storage, and update, then he has few alternatives: the generic mode PBKDF2, the Blowfish-based \textsf{bcrypt}, and \textsf{scrypt}. Among those, only -\textsf{scrypt} aims for high memory, but the existence of a trivial time-memory tradeoff~\cite{ForlerLW14} allows compact implementations with the same energy cost. - -Design of a memory-hard function proved to be a tough problem. Since early 80's it has been known that many cryptographic problems that seemingly require large memory actually allow for a time-memory tradeoff~\cite{hellman1980cryptanalytic}, where the adversary can trade memory for time and do his job on fast hardware with low memory. In application -to password-hashing schemes, this means that the password crackers can still be implemented on a dedicated hardware even though at some additional cost. - -Another problem with the existing schemes is their complexity. The same \textsf{scrypt} calls a stack of subprocedures, whose design rationale has not been fully motivated (e.g, \textsf{scrypt} calls SMix, which calls ROMix, which calls BlockMix, which calls Salsa20/8 etc.). It is hard to analyze and, moreover, hard to achieve confidence. Finally, it is not flexible in separating time and memory costs. -At the same time, the story of cryptographic competitions~\cite{robshaw2008new,sha3} has demonstrated that -the most secure designs come with simplicity, where every element is well motivated and a cryptanalyst has as few entry points as possible. - -The Password Hashing Competition, which started in 2014, highlighted the following problems: -\begin{itemize} - \item Should the memory addressing (indexing functions) be input-independent or input-dependent, or hybrid? The first type of schemes, where the memory read location are known in advance, is immediately vulnerable to time-space tradeoff attacks, - since an adversary can precompute the missing block by the time it is needed~\cite{trade-att}. In turn, the input-dependent schemes are vulnerable to side-channel attacks~\cite{RistenpartTSS09}, as the timing information allows for much faster password search. - \item Is it better to fill more memory but suffer from time-space tradeoffs, or make more passes over the memory to be more robust? This question was quite difficult to answer due to absence of generic tradeoff tools, which would analyze the security against tradeoff attacks, and the absence of unified metric to measure adversary's costs. - \item How should the input-independent addresses be computed? Several seemingly secure options have been attacked~\cite{trade-att}. - \item How large a single memory block should be? Reading smaller random-placed blocks is slower (in cycles per byte) due to the spacial locality principle of the CPU cache. In turn, larger - blocks are difficult to process due to the limited number of long registers. - \item If the block is large, how to choose the internal compression function? Should it be cryptographically secure or more lightweight, providing only basic mixing of the inputs? Many candidates simply proposed an iterative construction and argued against cryptographically strong transformations. - - \item How to exploit multiple cores of modern CPUs, when they are available? Parallelizing calls to the hashing function without any interaction is subject to simple tradeoff attacks. -\end{itemize} - -\paragraph{Our solution} We offer a hashing scheme called \textsf{Argon2}. - \textsf{Argon2} summarizes the state of the art in the design of memory-hard functions. It is a streamlined and simple design. It aims at the highest memory filling rate and effective use of multiple computing units, while still -providing defense against tradeoff attacks. \textsf{Argon2} is optimized for the x86 architecture and exploits the cache and memory organization of the recent Intel and AMD processors. \textsf{Argon2} has two variants: \textsf{Argon2d} and \textsf{Argon2i}. \textsf{Argon2d} is faster and uses data-depending memory access, which makes it suitable for cryptocurrencies and applications with no threats from side-channel timing attacks. \textsf{Argon2i} uses data-independent memory access, which is preferred for password hashing and password-based key derivation. \textsf{Argon2i} is slower as it makes more passes over the memory to protect from tradeoff attacks. - - -We recommend \textsf{Argon2} for the applications that aim for high performance. Both versions of \textsf{Argon2} allow to fill 1 GB of RAM in a fraction of second, and smaller amounts even faster. It scales easily to the arbitrary number of parallel computing units. Its design is also optimized for clarity to ease analysis and implementation. - -Our scheme provides more features and better tradeoff resilience than pre-PHC designs and equals in performance with the PHC finalists~\cite{broz15}. - -\section{Definitions} - -\subsection{Motivation}\label{sec:costs} -We aim to maximize the cost of password cracking on ASICs. There can be different approaches to measure this cost, but we turn to one of the most popular -- the time-area product~\cite{Thompson79,BernsteinL13}. We assume that the password $P$ is hashed with salt $S$ but without secret keys, and the hashes may leak to the adversaries together with salts: -$$ -\begin{aligned} -\mathrm{Tag} &\leftarrow \mathcal{H}(P,S);\\ -\mathrm{Cracker} &\leftarrow \{(\mathrm{Tag}_i, S_i)\}. -\end{aligned} -$$ - -In the case of the password hashing, we suppose that the defender allocates certain amount of time (e.g., 1 second) per password and a certain number of CPU cores (e.g., 4 cores). Then he hashes the password using the maximum amount $M$ of memory. This memory size translates to certain ASIC area $A$. The running ASIC time $T$ is determined by the length of the longest computational chain and by the ASIC memory latency. -Therefore, we maximize the value $AT$. The other usecases follow a similar procedure. - -Suppose that an ASIC designer that wants to reduce the memory and thus the area wants to compute $\mathcal{H}$ using $\alpha M$ memory only for some $\alpha<1$. Using some tradeoff specific to $\mathcal{H}$, he has to spend $C(\alpha)$ times as much computation and his running time increases by at least the factor $D(\alpha)$. Therefore, the maximum possible gain $\mathcal{E}$ in the time-area product is -$$ -\mathcal{E}_{max}= \max_{\alpha}\frac{1}{\alpha D(\alpha)}. -$$ -The hash function is called \emph{memory-hard} if $D(\alpha) >1/\alpha$ as $\alpha\rightarrow 0$. Clearly, in this case the time-area product does not decrease. Moreover, the following aspects may further increase it: -\begin{itemize} -\item Computing cores needed to implement the $C(\alpha)$ penalty may occupy significant area. -\item If the tradeoff requires significant communication between the computing cores, the memory bandwidth limits may impose additional restrictions on the running time. -\end{itemize} - -In the following text, we will not attempt to estimate time and area with large precision. However, an interested reader may use the following implementations as reference: - \begin{itemize} - \item The 50-nm DRAM implementation~\cite{giridhar2013dram} takes 550 mm${}^2$ per GByte; - \item The Blake2b implementation in the 65-nm process should take about 0.1 mm${}^2$ (using Blake-512 implementation in~\cite{gurkaynak2012sha3}); - \item The maximum memory bandwidth achieved by modern GPUs is around 400 GB/sec. - \end{itemize} - - \subsection{Model for memory-hard functions} - - The memory-hard functions that we explore use the following mode of operation. The memory array $B[]$ is filled with the compression function $G$: - - \begin{equation}\label{eq:class} -\begin{array}{rl} -B[0] &= H(P,S);\\ -\text{for $j$ }&\text{from 1 to } t\\ - &B[j] = G \bigl(B[\phi_1(j)] , B[\phi_2(j)] ,\cdots , B[\phi_k(j)]\bigr), -\end{array} -\end{equation} -where $\phi_i()$ are some \emph{indexing functions}. - - -We distinguish two types of indexing functions: -\begin{itemize} - \item Independent of the password and salt, but possibly dependent on other public parameters (thus called \emph{data-independent}). The addresses can be calculated by the memory-saving adversaries. We suppose that the dedicated hardware can handle parallel memory access, so that the cracker can prefetch the data from the memory. Moreover, if she implements a time-space tradeoff, then the missing blocks can be also precomputed without losing time. Let the single $G$ core occupy the area equivalent to the $\beta$ of the entire memory. Then if we use $\alpha M$ memory, then the gain in the time-area product is - $$ - \mathcal{E}(\alpha) = \frac{1}{\alpha + C(\alpha)\beta}. - $$ - \item Dependent on the password (\emph{data-dependent}), in our case: $\phi(j) = g(B[j-1])$. This choice prevents the adversary from prefetching and precomputing missing data. The adversary figures out what he has to recompute only at the time the element is needed. If an element is recomputed as a tree of $F$ calls of average depth $D$, then the total processing time is multiplied by $D$. The gain in the time-area product is - $$ - \mathcal{E}(\alpha) = \frac{1}{(\alpha + C(\alpha)\beta)D(\alpha)}. - $$ -\end{itemize} - - - The maximum bandwidth $Bw_{max}$ is a hypothetical upper bound on the memory bandwidth on the adversary's architecture. Suppose that for each call to $G$ an adversary has to load - $R(\alpha)$ blocks from the memory on average. Therefore, the adversary can keep the execution time the same as long as - $$ - R(\alpha) Bw \leq Bw_{max}, - $$ - where $Bw$ is the bandwidth achieved by a full-space implementation. In the tradeoff attacks that we apply the following holds: - $$ - R(\alpha) = C(\alpha). - $$ - - - -\section{Specification of Argon2} - -There are two flavors of \textsf{Argon2}\ -- \textsf{Argon2d} and \textsf{Argon2i}. The former one uses data-dependent memory access to thwart tradeoff attacks. However, this makes it vulnerable for side-channel attacks, so \textsf{Argon2d} is recommended primarily for cryptocurrencies and backend servers. \textsf{Argon2i} uses data-independent memory access, which is recommended for password hashing and password-based key derivation. - -\subsection{Inputs} - -\textsf{Argon2}\ has two types of inputs: primary inputs and secondary inputs, or parameters. Primary inputs are message $P$ and nonce $S$, which are password and salt, respectively, for the password hashing. Primary inputs must always be given by the user such that -\begin{itemize} - \item Message $P$ may have any length from $0$ to $2^{32}-1$ bytes; - \item Nonce $S$ may have any length from $8$ to $2^{32}-1$ bytes (16 bytes is recommended for password hashing). -\end{itemize} - Secondary inputs have the following restrictions: -\begin{itemize} - \item Degree of parallelism $p$ determines how many independent (but synchronizing) computational chains can be run. It may take any integer value from 1 to $2^{24}-1$. - \item Tag length $\tau$ may be any integer number of bytes from 4 to $2^{32}-1$. - \item Memory size $m$ can be any integer number of kilobytes from $8p$ to $2^{32}-1$. The actual number of blocks is $m'$, which is $m$ rounded down to the nearest multiple of $4p$. - \item Number of iterations $t$ (used to tune the running time independently of the memory size) can be any integer number from 1 to $2^{32}-1$; - \item Version number $v$ is one byte $0x13$; - \item Secret value $K$ (serves as key if necessary, but we do not assume any key use by default) may have any length from $0$ to $2^{32}-1$ bytes. - \item Associated data $X$ may have any length from $0$ to $2^{32}-1$ bytes. - \item Type $y$ of \textsf{Argon2}: 0 for \textsf{Argon2d}, 1 for \textsf{Argon2i}, 2 for \textsf{Argon2id}. -\end{itemize} - -\textsf{Argon2}\ uses internal compression function ${G}$ with two 1024-byte inputs and a 1024-byte output, and internal hash function ${H}$. Here ${H}$ is the Blake2b hash function, and ${G}$ is based on its internal permutation. The mode of operation of \textsf{Argon2} is quite simple when no parallelism is used: function ${G}$ is iterated $m$ times. At step $i$ a block with index $\phi(i)0$. Blocks are computed as follows: -\begin{align*} -B^1[i][0] &= H'(H_0||\underbrace{0}_{\text{4 bytes}}||\underbrace{i}_{\text{4 bytes}}),\quad 0 \leq i < p; \\ -B^1[i][1] &= H'(H_0||\underbrace{1}_{\text{4 bytes}}||\underbrace{i}_{\text{4 bytes}}),\quad 0 \leq i < p;\\ -B^1[i][j] &= G(B^1[i][j-1], B^1[i'][j']),\quad 0 \leq i < p,\; 2\leq j 1$, we repeat the procedure, but we XOR the new blocks to the old ones instead of overwriting them. -%The first two blocks of a lane are now computed in the same way: -\begin{align*} -B^t[i][0] &=G(B^{t-1}[i][q-1], B[i'][j']) \oplus B^{t-1}[i][0];\\ -B^t[i][j] &= G(B^{t}[i][j-1], B[i'][j'])\oplus B^{t-1}[i][j]. -\end{align*} -Here the block $B[i'][j']$ may be either $B^t[i'][j']$ for $j'j'$. - -After we have done $T$ iterations over the memory, we compute the final block $B_{\mathrm{final}}$ as the XOR of the last column: -$$ -B_{\mathrm{final}} = B^T[0][q-1] \oplus B^T[1][q-1]\oplus \cdots\oplus B^T[p-1][q-1]. -$$ -Then we apply $H'$ to $B_{\mathrm{final}}$ to get the output tag. -$$ -\text{Tag} \leftarrow H'(B_{\mathrm{final}}). -$$ - - -\paragraph{Variable-length hash function.} Let $H_x$ be a hash function with $x$-byte output (in our case $H_x$ is Blake2b, which supports $1\leq x \leq 64$). We define $H'$ as follows. Let $V_i$ be a 64-byte block, and $A_i$ be its first 32 bytes, -and $\tau<2^{32}$ be the 32-bit tag length (viewed little-endian) in bytes. -Then we define -$$ -\begin{array}{rl} -\text{if }\tau \leq 64&\\& H'(X) \overset{\text{def}}{=} H_{\tau}(\tau ||X).\\ -\text{else}&\\ -& r = \lceil\tau/32\rceil-2;\\ -&V_1\leftarrow H_{64}(\tau||X);\\ -&V_2 \leftarrow H_{64}(V_1);\\ -&\cdots\\ -&V_r \leftarrow H_{64}(V_{r-1}),\\ -&V_{r+1} \leftarrow H_{\tau - 32r}(V_{r}).\\ -&H'(X) \overset{\text{def}}{=} A_1||A_2||\ldots A_r||V_{r+1}. -\end{array} -$$ - - \begin{figure}[ht] - \ifpdf -\begin{center} - \includegraphics[scale=0.5]{pics/argon2-par.pdf} - \caption{Single-pass \textsf{Argon2} with $p$ lanes and 4 slices. }\label{fig:argon2} -\end{center} -\fi - \end{figure} - -\subsection{Indexing}\label{sec:index} - -To enable parallel block computation, we further partition the memory matrix into $S=4$ vertical \emph{slices}. The intersection of a slice and a lane is a \emph{segment} of length $q/S$. Segments of the same slice - are computed in parallel, and may not reference blocks from each other. All other blocks can be referenced, and now we explain the procedure in detail. - -\paragraph{Getting two 32-bit values.} In Argon2d we select the first 32 bits of block $B[i][j-1]$ and denote this value by $J_1$. Then we take the next 32 bits of $B[i][j-1]$ and denote this value by $J_2$. In \textsf{Argon2i} we run $G^2$ --- the 2-round compression function $G$ --- in the counter mode, where the first input is all-zero block, and the second input is constructed as - $$ - (\underbrace{r}_{\text{8 bytes}}||\underbrace{l}_{\text{8 bytes}}||\underbrace{s}_{\text{8 bytes}}||\underbrace{m'}_{\text{8 bytes}}||\underbrace{t}_{\text{8 bytes}}||\underbrace{x}_{\text{8 bytes}}||\underbrace{i}_{\text{8 bytes}}||\underbrace{0}_{\text{968 bytes}}), - $$ where - \begin{itemize} - \item $r$ is the pass number; - \item $l$ is the lane number; - \item $s$ is the slice number; - \item $m'$ is the total number of memory blocks; - \item $t$ is the total number of passes; - \item $x$ is the type of the Argon function (equals $1$ for \textsf{Argon2i}); - \item $i$ is the counter starting in each segment from 1. - \end{itemize} All the numbers are put as little-endian. We increase the counter so that each application of $G^2$ gives 128 64-bit values $J_1||J_2$. - - \paragraph{Mapping $J_1,J_2$ to the reference block index} The value $l = J_2 \bmod p$ determines the index of the lane from which the block will be taken. If we work with the first slice and the first pass ($r=s=0$), then $l$ is set to the current lane index. - - Then we determine the set of indices $\mathcal{R}$ that can be referenced for given $[i][j]$ according to the following rules: -\begin{enumerate} - \item If $l$ is the current lane, then $\mathcal{R}$ includes all blocks computed in this lane, that are not overwritten yet, excluding $B[i][j-1]$. - \item If $l$ is not the current lane, then $\mathcal{R}$ includes all blocks in the last $S-1=3$ segments computed and finished in lane $l$. If $B[i][j]$ is the first block of a segment, then the very last block from $\mathcal{R}$ is excluded. -\end{enumerate} - We are going to take a block from $\mathcal{R}$ with a non-uniform distribution over $[0..|\mathcal{R}|)$: - $$ - J_1\in [0..2^{32}) \rightarrow |\mathcal{R}|\left(1-\frac{(J_1)^2}{2^{64}}\right). - $$ To avoid floating-point computation, we use the following integer approximation: -\begin{align*} -x &= (J_1)^2/2^{32};\\ -y &= (|\mathcal{R}|*x)/2^{32};\\ -z & = |\mathcal{R}|-1-y. -\end{align*} -Then we enumerate the blocks in $\mathcal{R}$ in the order of construction and select $z$-th block from it as the reference block. - - - -\subsection{Compression function \texorpdfstring{$G$}{G}}\label{sec:compr} - -Compression function $G$ is built upon the Blake2b round function $\mathcal{P}$ (fully defined in Section~\ref{sec:blakeround}). $\mathcal{P}$ operates on the 128-byte input, which can be viewed as 8 16-byte registers (see details below): -$$ -\mathcal{P}(A_0,A_1,\ldots, A_7) = (B_0,B_1,\ldots, B_7). -$$ - -Compression function ${G}(X,Y)$ operates on two 1024-byte blocks $X$ and $Y$. It first computes $R=X\oplus Y$. Then $R$ is viewed as a $8\times 8$-matrix of 16-byte registers $R_0, R_1,\ldots, R_{63}.$ Then -$\mathcal{P}$ is first applied rowwise, and then columnwise to get $Z$: -\begin{align*} - (Q_0,Q_1,\ldots,Q_7) &\leftarrow \mathcal{P}(R_0,R_1,\ldots,R_7);\\ - (Q_8,Q_9,\ldots,Q_{15})&\leftarrow \mathcal{P}(R_8,R_9,\ldots,R_{15});\\ - \ldots&\\ - (Q_{56},Q_{57},\ldots,Q_{63})&\leftarrow \mathcal{P}(R_{56},R_{57},\ldots,R_{63});\\[10pt] - (Z_0,Z_8,Z_{16},\ldots,Z_{56})&\leftarrow \mathcal{P}(Q_0,Q_8,Q_{16},\ldots,Q_{56});\\ - (Z_1,Z_9,Z_{17},\ldots,Z_{57})&\leftarrow \mathcal{P}(Q_1,Q_9,Q_{17},\ldots,Q_{57});\\ - \ldots&\\ - (Z_7,Z_{15},Z_{23},\ldots,Z_{63})&\leftarrow \mathcal{P}(Q_7,Q_{15},Q_{23},\ldots,Q_{63}). - \end{align*} - Finally, $G$ outputs $Z\oplus R$: - $$ - G:\quad (X,Y)\; \rightarrow\; R = X\oplus Y\; \xrightarrow{\mathcal{P}}\;Q\;\xrightarrow{\mathcal{P}}\;Z\; - \rightarrow \;Z\oplus R. - $$ - - \begin{figure}[ht] - \ifpdf -\begin{center} - \includegraphics[scale=0.6]{pics/compression.pdf} - \caption{Argon2 compression function $G$. }\label{fig:compression} -\end{center} -\fi - \end{figure} - - \section{Features} - -\textsf{Argon2} is a multi-purpose family of hashing schemes, which is suitable for password hashing, key derivation, cryptocurrencies and other applications that require provably high memory use. \textsf{Argon2} is optimized for the x86 architecture, but it does not slow much on older processors. The key feature of \textsf{Argon2} is its performance and the ability to use multiple computational cores in a way that prohibits time-memory tradeoffs. Several features are not included into this version, but can be easily added later. - -\subsection{Available features} -Now we provide an extensive list of features of Argon2. - -\textbf{Performance}. \textsf{Argon2} fills memory very fast, thus increasing the area multiplier in the time-area product for ASIC-equipped adversaries. Data-independent version \textsf{Argon2i} securely fills the memory spending about 2 CPU cycles per byte, and \textsf{Argon2d} is three times as fast. This makes it suitable for applications that need memory-hardness but can not allow much CPU time, like cryptocurrency peer software. - -\textbf{Tradeoff resilience}. Despite high performance, \textsf{Argon2} provides reasonable level of tradeoff resilience. Our tradeoff attacks previously applied to Catena and Lyra2 show the following. With default number of passes over memory (1 for \textsf{Argon2d}, 3 for \textsf{Argon2i}, an ASIC-equipped adversary can not decrease the time-area product if the memory is reduced by the factor of 4 or more. Much higher penalties apply if more passes over the memory are made. - -\textbf{Scalability}. \textsf{Argon2} is scalable both in time and memory dimensions. Both parameters can be changed independently provided that a certain amount of time is always needed to fill the memory. - -\textbf{Parallelism}. \textsf{Argon2} may use up to $2^{24}$ threads in parallel, although in our experiments 8 threads already exhaust the available bandwidth and computing power of the machine. - -\textbf{GPU/FPGA/ASIC-unfriendly}. \textsf{Argon2} is heavily optimized for the x86 architecture, so that implementing it on dedicated cracking hardware should be neither cheaper nor faster. Even specialized ASICs would require significant area and would not allow reduction in the time-area product. - -\textbf{Additional input support}. \textsf{Argon2} supports additional input, which is syntactically separated from the message and nonce, such as secret key, environment parameters, user data, etc.. - - -\subsection{Possible future extensions}\label{sec:future2} - -Argon2\ can be rather easily tuned to support other compression functions, hash functions and block sizes. -ROM can be easily integrated into \textsf{Argon2} by simply including it into the area where the blocks are referenced from. - - -\section{Security analysis} - - - -All the attacks detailed below apply to one-lane version of Argon2, but can be carried to the multi-lane version with the same efficiency. - -\subsection{Ranking tradeoff attack}\label{sec:tradeoff} To figure out the costs of the ASIC-equipped adversary, we first need to calculate the time-space tradeoffs for \textsf{Argon2}. To the best of our knowledge, the first generic -tradeoffs attacks were reported in~\cite{trade-att}, and they apply to both data-dependent and data-independent schemes. The idea of the ranking method~\cite{trade-att} is as follows. When we generate a memory block $B[l]$, we make a decision, to store it or not. If we do not store it, we calculate the access complexity of this block --- the number of calls to $F$ needed to compute the block, which is based on the access complexity of $B[l-1]$ and $B[\phi(l)]$. The detailed strategy is as follows: - \begin{enumerate} - \item Select an integer $q$ (for the sake of simplicity let $q$ divide $T$). - \item Store $B[kq]$ for all $k$; - \item Store all $r_i$ and all access complexities; - \item Store the $T/q$ highest access complexities. If $B[i]$ refers to a vertex from this top, we store $B[i]$. -\end{enumerate} -The memory reduction is a probabilistic function of $q$. We applied the algorithm to the indexing function of \textsf{Argon2} and obtained the results in Table~\ref{tab:generic3}. Each recomputation is a tree of certain depth, also given in the table. - -We conclude that for data-dependent one-pass schemes the adversary is always able to reduce the memory by the factor of 3 and still keep the time-area product the same. -\begin{table}[hb] -\renewcommand{\arraystretch}{1.3} -$$ -\begin{array}{|c||c|c|c|c|c|c|c|c|} -\hline -\text{$\alpha$ } &\frac{1}{2} &\frac{1}{3} &\frac{1}{4} &\frac{1}{5} &\frac{1}{6} &\frac{1}{7} \\ -\hline -\text{$C(\alpha)$} &1.5& 4& 20.2& 344& 4660 & 2^{18}\\ -\text{$D(\alpha)$} & 1.5 & 2.8 & 5.5 & 10.3 & 17 &27 \\ -\hline -\end{array} -$$ -\caption{Time and computation penalties for the ranking tradeoff attack for the Argon2 indexing function.}\label{tab:generic3} -\end{table} - -\subsection{Memory optimization attack} - -As reported in~\cite{Corrigan-GibbsB16}, it is possible to optimize the memory use in the earlier version 1.2.1 of Argon2, concretely for Argon2i. The memory blocks produced in the version 1.2.1 at second and later passes replaced, not overwrote the blocks at earlier passes. Therefore, for each block $B[i]$ there is a time gap (let us call it a \emph{no-use gap}) between the moment the block is used for the last time (as a reference or as a fresh new block) and the moment it is overwritten. We formalize this issue as follows. Let us denote by $\phi^r(i)$ the reference block index for block $B^r[i]$. -\begin{itemize} - \item For $t$-pass Argon2i the block $B^r[i], r1$ this strategy uses $0.25$ of memory on average, so the time-area product advantage is close to 4. If we use the peak memory amount in the time-area calculations, then the advantage would be 5 and 2.7, respectively. - - -The version 1.3 of Argon2 replaces overwriting operation with the XOR. This gives minimal overhead on the performance: for memory requirements of 8 MB and higher the performance difference is between 5\% and 15\% depending on the operating system and hardware. For instance, the highest speed of 3-pass Argon2d v.1.2.1 on 1.8 GHz CPU with Ubuntu is 1.61 cycles per byte, whereas for v.1.3 it is 1.7 cpb (both measured for 2 GB of RAM, 4 threads). - -In the version 1.3 this saving strategy applies to the one-pass Argon2i only, where it brings the same time-area product advantage. The multi-pass versions are safe as all the blocks have to be kept in memory till the overwrite. - -\subsection{Attack on iterative compression function}\label{sec:att-iter} - -Let us consider the following structure of the compression function $F(X,Y)$, where $X$ and $Y$ are input blocks: -\begin{itemize} - \item The input blocks of size $t$ are divided into shorter subblocks of length $t'$ (for instance, 128 bits) $X_0$, $X_1$, $X_2,\ldots$ and $Y_0$, $Y_1$, $Y_2,\ldots$. - \item The output block $Z$ is computed subblockwise: - \begin{align*} - Z_0 = G(X_0,Y_0);\\ - Z_i = G(X_i,Y_i,Z_{i-1}),\;i>0. - \end{align*} -\end{itemize} -This scheme resembles the duplex authenticated encryption mode, which is secure under certain assumptions on $G$. However, it is totally insecure against tradeoff adversaries, as shown below. - -Suppose that an adversary computes $Z = F(X,Y)$ but $Y$ is not stored. Suppose that $Y$ is a tree function of stored elements of depth $D$. The adversary starts with computing $Z_0$, which requires only $Y_0$. In turn, $Y_0 = G(X_0', Y_0')$ for some $X',Y'$. -Therefore, the adversary computes the tree of the same depth $D$, but with the function $G$ instead of $F$. $Z_1$ is then a tree function of depth $D+1$, $Z_2$ of depth $D+2$, etc. In total, the recomputation takes $(D+s)L_G$ time, where $s$ is the number of subblocks and $L_G$ is the latency of $G$. This should be compared to the full-space implementation, which takes time -$sL_G$. Therefore, if the memory is reduced by the factor $q$, then the time-area product is changed as -$$ -AT_{new} = \frac{D(q)+s}{sq}AT. -$$ -Therefore, if -\begin{equation}\label{att:iter} -D(q) \leq s(q-1), -\end{equation} -the adversary wins. - -One may think of using the $Z_{m-1}[l-1]$ as input to computing $Z_0[l]$. Clearly, this changes little in adversary's strategy, who could simply store all $Z_{m-1}$, which is feasible for large $m$. In concrete proposals, $s$ can be 64, 128, 256 and even larger. - -We conclude that $F$ with an iterative structure is insecure. We note that this attack applies also to other PHC candidates with iterative compression function. - - -\subsection{Security of Argon2 to generic attacks}\label{sec:generic} - -Now we consider preimage and collision resistance of both versions of \textsf{Argon2}. Variable-length inputs are prepended with their lengths, which shall ensure - the absence of equal input strings. Inputs are processed by a cryptographic hash function, so no collisions should occur at this stage. - - \paragraph{Internal collision resistance.} The compression function $G$ is not claimed to be collision resistant, so it may happen that distinct inputs produce identical outputs. Recall -that $G$ works as follows: -$$ -G(X,Y) = P(Z)\oplus (Z), \quad Z = X\oplus Y. -$$ -where $P$ is a permutation based on the 2-round Blake2b permutation. Let us prove that all $Z$ are different under certain assumptions. -\begin{theorem} - Let $\Pi$ be \textsf{Argon2d} or \textsf{Argon2i} with $d$ lanes, $s$ slices, and $t$ passes over memory. Assume that - \begin{itemize} - \item $P(Z)\oplus Z$ is collision-resistant, i.e. it is hard to find $a,b$ such that $P(a)\oplus a = P(b)\oplus b$. - \item $P(Z)\oplus Z$ is 4-generalized-birthday-resistant, i.e. it is hard to find distinct $a,b,c,d$ such that $P(a)\oplus P(b)\oplus P(c)\oplus P(d) = a\oplus b\oplus c \oplus d$. - \end{itemize}Then all the blocks $B[i]$ generated in those $t$ passes are different. -\end{theorem} -\begin{proof} - By specification, the value of $Z$ is different for the first two blocks of each segment in the first slice in the first pass. Consider the other blocks. - - Let us enumerate the blocks according to the moment they are computed. Within a slice, where segments can be computed in parallel, we enumerate lane 0 fully first, then lane 1, etc.. Slices are then computed and enumerated sequentially. - Suppose the proposition is wrong, and let $(B[x],B[y])$ be a block collision such that $x2$) Argon2i is the ranking tradeoff attack, which reduces the time-area product by the factor of 3. - -The best attack on the $t$-pass Argon2d is the ranking tradeoff attack, which reduces the time-area product by the factor 1.33. - - - \section{Design rationale} - - \textsf{Argon2}\ was designed with the following primary goal: to maximize the cost of exhaustive search on non-x86 architectures, so that the switch even to dedicated ASICs would not give significant advantage over doing the exhaustive search on defender's machine. - - - - - \subsection{Indexing function} - -The basic scheme~\eqref{eq:class} was extended to implement: -\begin{itemize} - \item Tunable parallelism; - \item Several passes over memory. -\end{itemize} - - - - - - For the data-dependent addressing we set $\phi(l) = g(B[l])$, where $g$ simply truncates the block and takes the result modulo $l-1$. We considered - taking the address - not from the block $B[l-1]$ but from the block $B[l-2]$, which should have allowed to prefetch the block earlier. However, not only the gain in our implementations is limited, but also this benefit can be exploited by the adversary. Indeed, the efficient depth $D(q)$ is - now reduced to $D(q)-1$, since the adversary has one extra timeslot. Table~\ref{tab:generic3} implies that then the adversary would be able to reduce the memory by the factor of 5 without increasing the time-area product (which is a 25\% increase in the reduction factor compared to the standard approach). - - - - For the data-independent addressing we use a simple PRNG, in particular the compression function $G$ in the counter mode. - Due to its long output, one call (or two consecutive calls) would produce hundreds of addresses, - thus minimizing the overhead. This approach does not give provable tradeoff bounds, but instead allows - the analysis with the tradeoff algorithms suited for data-dependent addressing. - -\paragraph{Motivation for our indexing functions} - -Initially, we considered uniform selection of referenced blocks, but then we considered a more generic case: -$$ -\phi \leftarrow \lceil(2^{64}-(J_1)^\gamma)\cdot |\mathcal{R}_l|/2^{64} \rceil -$$ - -We tried to choose the $\gamma$ which would maximize the adversary's costs if he applies the tradeoff based on the ranking method. We also attempted to make the reference block distribution close to uniform, so that each memory block is referenced similar number of times. - -For each $1\leq \gamma\leq 5$ with step $0.1$ we applied the ranking method with sliding window and selected the best available tradeoffs. We obtained a set of time penalties $\{D_{\gamma}(\alpha)\}$ and computational penalties $\{C_{\gamma}(\alpha)\}$ for $0.01<\alpha<1$. We also calculated the reference block distribution for all possible $\gamma$. We considered two possible metrics: -\begin{enumerate} -\item Minimum time-area product $$AT_{\gamma} = \min_{\alpha}\{\alpha\cdot D_{\gamma}(\alpha)\}. -$$ -\item Maximum memory reduction which reduces the time-area product compared to the original: -$$ -\alpha_{\gamma} = \min_{\alpha} \{\alpha\,|\,D_{\gamma}(\alpha)<\alpha\}. -$$ -\item The goodness-of-fit value of the reference block distribution w.r.t. the uniform distribution with $n$ bins: -$$ -\chi^2 = \sum_i \frac{(p_i-\frac{1}{n})^2}{\frac{1}{n}}, -$$ -where $p_i$ is the average probability of the block from $i$-th bin to be referenced. For example, if $p_3 = 0.2, \,n=10$ and there are 1000 blocks, then blocks from $201$ to $300$ are referenced $1000\cdot 0.2 =200$ times throughout the computation. -\end{enumerate} -We got the following results for $n=10$: -$$ -\begin{array}{|c|c|c|c|} -\hline -\gamma & AT_{\gamma}&\alpha_{\gamma} &\chi^2\\ -\hline - 1& 0.78 & 3.95&0.89\\ - \hline 2 & 0.72 & 3.2& 0.35\\ - \hline 3 & 0.67 & 3.48&0.2\\ - \hline 4 & 0.63 & 3.9&0.13\\ - \hline 5 & 0.59 & 4.38&0.09\\ - \hline -\end{array} -$$ -We conclude that the time-area product achievable by the attacker slowly decreases as $\gamma$ grows. However, the difference between $\gamma=1$ and $\gamma=5$ is only the factor of $1.3$. We also see that the time-area product can be kept below the original up to $q=3.2$ for $\gamma=2$, whereas for $\gamma=4$ and $\gamma=1$ such $q$ is close to $4$. -To avoid floating-point computations, we restrict to integer $\gamma$. Thus the optimal values are $\gamma=2$ and $\gamma=3$, where the former is slightly better in the first two metrics. - -However, if we consider the reference block uniformity, the situation favors larger $\gamma$ considerably. We see that the $\chi^2$ value is decreased by the factor of $2.5$ when going from $\gamma=1$ to $\gamma=2$, and by the factor of $1.8$ further to $\gamma=3$. In concrete probabilities (see also Figure~\ref{fig:histo}), -the first 20\% of blocks accumulate 40\% of all reference hits for $\gamma=2$ and 32\% for $\gamma=3$ (23.8\% vs 19.3\% hit for the first 10\% of blocks). - -To summarize, $\gamma=2$ and $\gamma=3$ both are better against one specific attacker and slightly worse against the other. We take $\gamma=2$ as the value that minimizes the AT gain, as we consider this metric more important. - - \begin{table}[ht] -\renewcommand{\arraystretch}{1.3} -$$ -\begin{array}{|c||c|c|c|c|c|} -\hline -\text{Memory fraction ($1/q$) } &\frac{1}{2} &\frac{1}{3} &\frac{1}{4}&\frac{1}{5} &\frac{1}{6}\\ -\hline -\gamma=1 & 1.6 & 2.9 & 7.3 & 16.4 & 59\\ -\gamma=2 & 1.5 & 4 & 20.2 & 344 & 4700\\ -\gamma=3 &1.4& 4.3& 28.1 &1040 & 2^{17}\\ -\hline -\end{array} -$$ -\caption{Computational penalties for the ranking tradeoff attack with a sliding window, 1 pass.}\label{tab:comp-alpha} -\end{table} - - \begin{table}[ht] -\renewcommand{\arraystretch}{1.3} -$$ -\begin{array}{|c||c|c|c|c|c|} -\hline -\text{Memory fraction ($1/q$) } &\frac{1}{2} &\frac{1}{3} &\frac{1}{4}&\frac{1}{5} &\frac{1}{6}\\ -\hline -\gamma=1 & 1.6 & 2.5 & 4 & 5.8 & 8.7\\ -\gamma=2 & 1.5 & 2.6 & 5.4 & 10.7 & 17\\ -\gamma=3 &1.3& 2.5& 5.3 &10.1 & 18\\ -\hline -\end{array} -$$ -\caption{Depth penalties for the ranking tradeoff attack with a sliding window, 1 pass.}\label{tab:depth-alpha} -\end{table} - -\begin{figure}[hb] -\begin{center} -\includegraphics[width=5cm]{pics/power-distribution.jpg} -\end{center} -\caption{Access frequency for different memory segments (10\%-buckets) and different exponents (from $\gamma=1$ to $\gamma=5$) in the indexing functions.}\label{fig:histo} -\end{figure} - - - \subsection{Implementing parallelism}\label{sec:parall} - -As modern CPUs have several cores possibly available for hashing, it is tempting to use these cores to increase the bandwidth, the amount of filled memory, and the CPU load. -The cores of the recent Intel CPU share the L3 cache and the entire memory, which both have large latencies (100 cycles and more). Therefore, the inter-processor communication should be minimal to avoid delays. - -The simplest way to use $p$ parallel cores is to compute and XOR $p$ independent calls to $H$: -$$ -H'(P,S) = H(P,S, 0)\oplus H(P,S,1)\oplus \cdots \oplus H(P,S,p-1). -$$ -If a single call uses $m$ memory units, then $p$ calls use $pm$ units. However, this method admits a trivial tradeoff: an adversary just makes $p$ sequential calls to $H$ using only $m$ memory in total, which keeps the time-area product constant. - -We suggest the following solution for $p$ cores: the entire memory is split into $p$ lanes of $l$ equal slices each, which can be viewed as elements of a $(p\times l)$-matrix $Q[i][j]$. Consider the class of -schemes given by Equation~\eqref{eq:class}. We modify it as follows: -\begin{itemize} - \item $p$ invocations to $H$ run in parallel on the first column $Q[*][0]$ of the memory matrix. Their indexing functions refer to their own slices only; - \item For each column $j>0$, $l$ invocations to $H$ continue to run in parallel, but the indexing functions now may refer not only to their own slice, but also to all $jp$ slices of previous columns $Q[*][0],Q[*][1],\ldots,Q[*][j-1]$. - \item The last blocks produced in each slice of the last column are XORed. -\end{itemize} -This idea is easily implemented in software with $p$ threads and $l$ joining points. It is easy to see that the adversary can use less memory when computing the last column, for instance -by computing the slices sequentially and storing only the slice which is currently computed. Then his time is multiplied by $(1+\frac{p-1}{l})$, whereas the memory use is multiplied -by $(1-\frac{p-1}{pl})$, so the time-area product is modified as -$$ -AT_{new} = AT \left(1-\frac{p-1}{pl}\right)\left(1+\frac{p-1}{l}\right). -$$ -For $2 \leq p,l \leq 10$ this value is always between $1.05$ and $3$. We have selected $l=4$ as this value gives low synchronisation overhead while imposing time-area penalties on the adversary who reduces the memory even by the factor 3/4. We note that values $l=8$ or $l=16$ could be chosen. - -If the compression function is collision-resistant, then one may easily prove that block collisions are highly unlikely. However, we employ a weaker compression function, for which the following holds: -$$ -G(X,Y) = F(X\oplus Y), -$$ -which is invariant to swap of inputs and is not collision-free. We take special care to ensure that the mode of operation does not allow such collisions by introducing additional rule: -\begin{itemize} - \item First block of a segment can not refer to the last block of any segment in the previous slice. -\end{itemize} -We prove that block collisions are unlikely under reasonable conditions on $F$ in Section~\ref{sec:generic}. - - \subsection{Compression function design}\label{sec:compression} - - \subsubsection{Overview} - -In contrast to attacks on regular hash functions, the adversary does not control inputs to the compression function $G$ in our scheme. Intuitively, this should relax the cryptographic properties required from the compression function and allow for a faster primitive. To avoid being the bottleneck, the compression function ideally should be on par with the performance of memcpy() or similar function, which may run at 0.1 cycle per byte or even faster. This much faster than ordinary stream ciphers or hash functions, but we might not need strong properties of those primitives. - -However, we first have to determine the optimal block size. When we request a block from a random location in the memory, we most likely get a cache miss. The first bytes would arrive at the CPU from RAM within at best 10 ns, which accounts for 30 cycles. In practice, the latency of a single load instruction may reach 100 cycles and more. However, this number can be amortized if we request a large block of sequentially stored bytes. When the first bytes are requested, the CPU stores the next ones in the L1 cache, automatically or using the \texttt{prefetch} instruction. The data from the L1 cache can be loaded as fast as 64 bytes per cycle on the Haswell architecture, though we did not manage to reach this speed in our application. - -Therefore, the larger the block is, the higher the throughput is. We have made a series of experiments with a non-cryptographic compression function, which does little beyond simple XOR of its inputs, and achieved the performance of around 0.7 cycles per byte per core with block sizes of 1024 bits and larger. - -\subsubsection{Design criteria} - -It was demonstrated that a compression function with a large block size may be vulnerable to tradeoff attacks if it has a simple iterative structure, like modes of operation for a blockcipher~\cite{trade-att} (some details in Section~\ref{sec:att-iter}). - -Thus we formulate the following design criteria: -\begin{itemize} - \item \emph{The compression function must require about $t$ bits of storage (excluding inputs) to compute any output bit.} - \item \emph{Each output byte of $F$ must be a nonlinear function of all input bytes, so that the function has differential probability below certain level, for example $\frac{1}{4}$}. -\end{itemize} -These criteria ensure that the attacker is unable to compute an output bit using only a few input bits or a few stored bits. Moreover, the output bits should not be (almost) linear functions of input bits, as otherwise the function tree would collapse. - -We have not found any generic design strategy for such large-block compression functions. It is difficult to maintain diffusion on large memory blocks due to the lack of CPU instructions that interleave many registers at once. A naive approach would be to apply a linear transformation with certain branch number. However, even if we operate on 16-byte registers, a 1024-byte block would consist of 64 elements. A $64\times 64$-matrix would require 32 XORs per register to implement, which gives a penalty about 2 cycles per byte. - -Instead, we propose to build the compression function on the top of a transformation $P$ that already mixes several registers. We apply $P$ in parallel (having a P-box), then shuffle the output registers and apply it again. If $P$ handles $p$ registers, then the compression function may transform a block of $p^2$ registers with 2 rounds of P-boxes. We do not have to manually shuffle the data, we just change the inputs to P-boxes. As an example, an implementation of the Blake2b~\cite{AumassonNWW13} permutation processes 8 128-bit registers, so with 2 rounds of Blake2b we can design -a compression function that mixes the 8192-bit block. We stress that this approach is not possible with dedicated AES instructions. Even though they are very fast, they apply only to the 128-bit block, and we still have to diffuse its content across other blocks. - -We replace the original Blake2b round function -with its modification BlaMka~\cite{cryptoeprint:2015:136}, where the modular additions in $G$ are combined with 32-bit multiplications. Our motivation was to increase the circuit depth (and thus the running time) of a potential ASIC implementation while having roughly the same running time on CPU thanks to parallelism and pipelining. Extra multiplications in the scheme serve well, as the best addition-based circuits for multiplication have latency about 4-5 times the addition latency for 32-bit multiplication (or roughly $\log_n$ for $n$-bit multiplication). - -As a result, any output 64-bit word of $\mathcal{P}$ is implemented by a chain of additions, multiplications, XORs, and rotations. The shortest possible chain for the 1 KB-block (e.g, from $v_0$ to $v_0$) consists of 12 MULs, 12 XORs, and 12 rotations. - - - -\subsection{User-controlled parameters} - -We have made a number of design choices, which we consider optimal for a wide range of applications. Some parameters can be altered, some should be kept as is. We give a user full control over: -\begin{itemize} - \item Amount $M$ of memory filled by algorithm. This value, evidently, depends on the application and the environment. There is no "insecure" value for this parameter, though clearly the more memory the better. - \item Number $T$ of passes over the memory. The running time depends linearly on this parameter. We expect that the user chooses this number according to the time constraints on the application. Again, there is no "insecure value" for $T$. - \item Degree $d$ of parallelism. This number determines the number of threads used by an optimized implementation of \textsf{Argon2}. We expect that the user is restricted by a number of CPU cores (or half-cores) that can be devoted to the hash function, and chooses $d$ accordingly (double the number of cores). - \item Length of password/message, salt/nonce, and tag (except for some low, insecure values for salt and tag lengths). -\end{itemize} - -We allow to choose another compression function $G$, hash function $H$, block size $b$, and number of slices $l$. However, we do not provide this flexibility in a reference implementation as we guess that -the vast majority of the users would prefer as few parameters as possible. - - - -\section{Performance} - -\subsection{x86 architecture} -To optimize the data load and store from/to memory, the memory that will be processed has to be alligned on 16-byte boundary when loaded/stored into/from 128-bit registers and on 32-byte boundary when loaded/stored into/from 256-bit registers. If the memory is not aligned on the specified boundaries, then each memory operation may take one extra CPU cycle, which may cause consistent penalties for many memory accesses. - - -The results presented are obtained using the \texttt{gcc 4.8.2} compiler with the following options: \texttt{-m64 -mavx -std=c++11 -pthread -O3}. -The cycle count value was measured using the \texttt{\_\_rdtscp} Intel intrinsics C function which inlines the \texttt{RDTSCP} assembly instruction that returns the 64-bit Time Stamp Counter (TSC) value. The instruction waits for prevoius instruction to finish and then is executed, but meanwhile the next instructions may begin before the value is read. Although this shortcoming, we used this method because it is the most realiable handy method to measure the execution time and also it is widely used in other cryptographic operations benchmarking. - -\begin{table} -\begin{center} -\begin{tabular}{|cc||cc|cc|} -\hline -& & \multicolumn{2}{c|}{\textsf{Argon2d} (1 pass)} & \multicolumn{2}{|c|}{\textsf{Argon2i} (3 passes)} \\ -\cline{3-6} -Processor & Threads & Cycles/Byte & Bandwidth & Cycles/Byte & Bandwidth \\ -& & & (GB/s) & & (GB/s)\\ -\hline - i7-4500U & 1 &1.3 & 2.5 & 4.7 & 2.6 \\ -\hline - i7-4500U & 2 &0.9& 3.8&2.8 & 4.5\\ -\hline - i7-4500U & 4 &0.6 & 5.4 & 2 & 5.4 \\ -\hline - i7-4500U & 8 & 0.6 & 5.4 & 1.9 & 5.8\\ -\hline -\end{tabular} -\end{center} -\caption{Speed and memory bandwidth of Argon2(d/i) measured on 1 GB memory filled. Core i7-4500U --- Intel Haswell 1.8 GHz, 4 cores} -\label{table:cycle_per_byte_results} -\end{table} - -\section{Applications} -\textsf{Argon2d} is optimized for settings where the adversary does not get regular access to system memory or CPU, i.e. he can not run side-channel attacks based on the timing information, nor he -can recover the password much faster using garbage collection~\cite{cryptoeprint:2014:881}. These settings are more typical for backend servers and cryptocurrency minings. For practice we suggest the following settings: -\begin{itemize} - \item Cryptocurrency mining, that takes 0.1 seconds on a 2 Ghz CPU using 1 core --- \textsf{Argon2d} with 2 lanes and 250 MB of RAM; - \item Backend server authentication, that takes 0.5 seconds on a 2 GHz CPU using 4 cores --- \textsf{Argon2d} with 8 lanes and 4 GB of RAM. -\end{itemize} - -\textsf{Argon2i} is optimized for more dangerous settings, where the adversary possibly can access the same machine, use its CPU or mount cold-boot attacks. We use three passes to get rid entirely of the password in the memory. We suggest the following settings: -\begin{itemize} - \item Key derivation for hard-drive encryption, that takes 3 seconds on a 2 GHz CPU using 2 cores --- \textsf{Argon2i} with 4 lanes and 6 GB of RAM; - \item Frontend server authentication, that takes 0.5 seconds on a 2 GHz CPU using 2 cores --- \textsf{Argon2i} with 4 lanes and 1 GB of RAM. -\end{itemize} - -\section{Recommended parameters} - -We recommend the following procedure to select the type and the parameters for practical use of \textsf{Argon2}: -\begin{enumerate} -\item Select the type $y$. If you do not know the difference between them or you consider side-channel attacks as viable threat, choose \textsf{Argon2i}. Otherwise any choice is fine, including optional types. -\item Figure out the maximum number $h$ of threads that can be initiated by each call to \textsf{Argon2}. -\item Figure out the maximum amount $m$ of memory that each call can afford. -\item Figure out the maximum amount $x$ of time (in seconds) that each call can afford. -\item Select the salt length. 128 bits is sufficient for all applications, but can be reduced to 64 bits in the case of space constraints. -\item Select the tag length. 128 bits is sufficient for most applications, including key derivation. If longer keys are needed, select longer tags. -\item If side-channel attacks is a viable threat, enable the memory wiping option in the library call. -\item Run the scheme of type $y$, memory $m$ and $h$ lanes and threads, using different number of passes $t$. Figure out the maximum $t$ such that the running time does not exceed $x$. If it exceeds $x$ even for $t=1$, reduce $m$ accordingly. -\item Hash all the passwords with the just determined values $m$, $h$, and $t$. -\end{enumerate} - - -\section{Conclusion} - -We presented the memory-hard function \textsf{Argon2}, which maximizes the ASIC implementation costs for given CPU computing time. We aimed to make the design clear and compact, so that any feature and operation has certain rationale. The clarity and brevity of the Argon2 design has been confirmed by its eventual selection as the PHC winner. - -Further development of tradeoff attacks with dedication to \textsf{Argon2} is the subject of future work. It also remains to be seen how \textsf{Argon2} withstands GPU cracking with low memory requirements. - - - -\bibliographystyle{IEEEtranS} -\bibliography{tradeoff} - -\appendix - - - -\section{Permutation \texorpdfstring{$\mathcal{P}$}{P}}\label{sec:blakeround} - -Permutation $\mathcal{P}$ is based on the round function of Blake2b and works as follows. Its 8 16-byte inputs $S_0, S_1,\ldots, S_7$ are viewed as a $4\times 4$-matrix of 64-bit words, where $S_i = (v_{2i+1}||v_{2i})$: -$$ -\begin{pmatrix} - v_0 & v_1 & v_2 & v_3\\ - v_4 & v_5 & v_6 & v_7\\ - v_8 & v_9 & v_{10} & v_{11}\\ - v_{12} & v_{13} & v_{14} & v_{15}\\ -\end{pmatrix} -$$ -Then we do -\begin{eqnarray*} -G(v_0, v_4, v_8, v_{12})\quad G(v_1, v_5, v_9, v_{13}) \\ G(v_2, v_6, v_{10}, v_{14}) \quad G(v_3, v_7, v_{11}, v_{15})\\ -G(v_0, v_5, v_{10}, v_{15})\quad G(v_1, v_6, v_{11}, v_{12}) \\ G(v_2, v_7, v_{8}, v_{13}) \quad G(v_3, v_4, v_{9}, v_{14}), -\end{eqnarray*} -where $G$ applies to $(a,b,c,d)$ as follows: -\begin{equation}\label{eq:blake-orig} -\begin{aligned} - a &\leftarrow a + b+ 2*a_L*b_L;\\ - d &\leftarrow (d\oplus a)\ggg 32;\\ - c &\leftarrow c + d+ 2*c_L*d_L;\\ - b &\leftarrow (b\oplus c)\ggg 24;\\ - a &\leftarrow a + b+ 2*a_L*b_L;\\ - d &\leftarrow (d\oplus a)\ggg 16;\\ - c &\leftarrow c + d+ 2*c_L*d_L;\\ - b &\leftarrow (b\oplus c)\ggg 63;\\ -\end{aligned} -\end{equation} -Here $+$ are additions modulo $2^{64}$ and $\ggg$ are 64-bit rotations to the right. $x_L$ is the 64-bit integer $x$ truncated to the 32 least significant bits. The modular additions in $G$ are combined with 64-bit multiplications (that is the only difference to the original Blake2 design). - - -Our motivation in adding multiplications is to increase the circuit depth (and thus the running time) of a potential ASIC implementation while having roughly the same running time on CPU thanks to parallelism and pipelining. Extra multiplications in the scheme serve well, as the best addition-based circuits for multiplication have latency about 4-5 times the addition latency for 32-bit multiplication (or roughly $\log_n$ for $n$-bit multiplication). - -As a result, any output 64-bit word of $\mathcal{P}$ is implemented by a chain of additions, multiplications, XORs, and rotations. The shortest possible chain for the 1 KB-block (e.g, from $v_0$ to $v_0$) consists of 12 MULs, 12 XORs, and 12 rotations. - -\section{Additional functionality} - -The following functionality is enabled in the extended implementation\footnote{\url{https://github.com/khovratovich/Argon2}} but is -not officially included in the PHC release\footnote{\url{https://github.com/P-H-C/phc-winner-argon2}}: -\begin{itemize} -\item Hybrid construction \textsf{Argon2id}, which has type $y=2$ (used in the pre-hashing and address generation). In the first two slices of the first pass it generates reference addresses data-independently as in \textsf{Argon2i}, whereas in later slices and next passes it generates them data-dependently as in \textsf{Argon2d}. -\item Sbox-hardened version \textsf{Argon2ds}, which has type $y=4$. In this version the compression function $G$ includes the 64-bit transformation $\mathcal{T}$, which is a chain of S-boxes, multiplications, and additions. In terms of Section~\ref{sec:compr}, we additionally compute -\begin{align*} -W&= LSB_{64}(R_0\oplus R_{63});\\ -Z_0 &+= \mathcal{T}(W);\\ -Z_{63}&+=\mathcal{T}(W)\ll 32. -\end{align*} -The transformation $\mathcal{T}$, on the 64-bit word $W$ is defined as follows: -\begin{itemize} -\item Repeat 96 times: -\begin{enumerate} -\item $y\leftarrow S[W[8:0]]$; -\item $z\leftarrow S[512+W[40:32]]$; -\item $W \leftarrow ((W[31:0]\circ W[63:32])+y)\oplus z$. -\end{enumerate} -\item $T(W)\leftarrow W$. -\end{itemize} -All the operations are performed modulo $2^{64}$. $\circ$ is the 64-bit multiplication, $S[]$ is the Sbox (lookup table) that maps 10-bit indices to 64-bit values. $W[i:j]$ is the subset of bits of $W$ from $i$ to $j$ inclusive. - -The S-box is generated in the start of every pass in the following procedure. In total we specify $2^{10}\cdot 8$ bytes, or 8 KBytes. We take block $B[0][0]$ and apply $F$ (the core of $G$) to it 16 times. After each two iterations we use the entire 1024-byte value and initialize 128 lookup values. - -The properties of $\mathcal{T}$ and its initialization procedure is subject to change. -\end{itemize} - -\section{Change log} - -\subsection{v.1.3} - -\begin{itemize} - \item The blocks are XORed with, not overwritten in the second pass and later; - \item The version number byte is now $0x13$. -\end{itemize} - -\subsection{v1.2.1 -- February 1st, 2016} -\begin{itemize} -\item The total number of blocks can reach $2^{32}-1$; -\item The reference block index now requires 64 bits; the lane number is computed separately. -\item New modes \textsf{Argon2id} and \textsf{Argon2ds} are added as optional. -\end{itemize} -The specification of v1.2.1 released on 26th August, 2015, had incorrect description of the first block generation. The version released on 2d September, 2015, had incorrect description of the counter used in generating addresses for \textsf{Argon2i}. The version released on September 8th, 2015, lacked the "Recommended parameters" section. The version released on October 1st, 2015, -had the maximal parallelism level of 255 lanes. The version released on November 3d, 2015, had a typo. The versions released on November 5th and December 26th, had incorrect description of the first block generation and the variable-length hash function. - -\subsection{v1.2 -- 21th June, 2015} - -Non-uniform indexing rule, the compression function gets multiplications. - -\subsection{v1.1 -- 6th February, 2015} -\begin{itemize} -\item New indexing rule added to avoid collision with a proof. -\item New rule to generate first two blocks in each lane. -\item Non-zero constant added to the input block used to generate addresses in \textsf{Argon2i}. -\end{itemize} - -\end{document} diff --git a/pkg/urcrypt/argon2/latex/pics/argon2-par.pdf b/pkg/urcrypt/argon2/latex/pics/argon2-par.pdf deleted file mode 100644 index ab2a8438a..000000000 Binary files a/pkg/urcrypt/argon2/latex/pics/argon2-par.pdf and /dev/null differ diff --git a/pkg/urcrypt/argon2/latex/pics/compression.pdf b/pkg/urcrypt/argon2/latex/pics/compression.pdf deleted file mode 100644 index 999775825..000000000 Binary files a/pkg/urcrypt/argon2/latex/pics/compression.pdf and /dev/null differ diff --git a/pkg/urcrypt/argon2/latex/pics/generic.pdf b/pkg/urcrypt/argon2/latex/pics/generic.pdf deleted file mode 100644 index b58197eb2..000000000 Binary files a/pkg/urcrypt/argon2/latex/pics/generic.pdf and /dev/null differ diff --git a/pkg/urcrypt/argon2/latex/pics/power-distribution.jpg b/pkg/urcrypt/argon2/latex/pics/power-distribution.jpg deleted file mode 100644 index 82d006965..000000000 Binary files a/pkg/urcrypt/argon2/latex/pics/power-distribution.jpg and /dev/null differ diff --git a/pkg/urcrypt/argon2/latex/tradeoff.bib b/pkg/urcrypt/argon2/latex/tradeoff.bib deleted file mode 100644 index 65b0e7678..000000000 --- a/pkg/urcrypt/argon2/latex/tradeoff.bib +++ /dev/null @@ -1,822 +0,0 @@ -@article{hellman1980cryptanalytic, - title={A cryptanalytic time-memory trade-off}, - author={Hellman, Martin E}, - journal={Information Theory, IEEE Transactions on}, - volume={26}, - number={4}, - pages={401--406}, - year={1980}, - publisher={IEEE} -} - - -@inproceedings{DworkN92, - author = {Cynthia Dwork and - Moni Naor}, - title = {Pricing via Processing or Combatting Junk Mail}, - booktitle = {CRYPTO'92}, - series = {Lecture Notes in Computer Science}, - volume = {740}, - pages = {139--147}, - publisher = {Springer}, - year = {1992}, - timestamp = {Fri, 18 Sep 2009 10:18:29 +0200}, - biburl = {http://dblp.uni-trier.de/rec/bib/conf/crypto/DworkN92}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - -@article{Sudan97, - author = {Madhu Sudan}, - title = {Decoding of {Reed Solomon} Codes beyond the Error-Correction Bound}, - journal = {J. Complexity}, - volume = {13}, - number = {1}, - pages = {180--193}, - year = {1997}, - url = {http://dx.doi.org/10.1006/jcom.1997.0439}, - doi = {10.1006/jcom.1997.0439}, - timestamp = {Thu, 10 Nov 2005 11:26:57 +0100}, - biburl = {http://dblp.uni-trier.de/rec/bib/journals/jc/Sudan97}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - -@article{OorschotW99, - author = {Paul C. van Oorschot and - Michael J. Wiener}, - title = {Parallel Collision Search with Cryptanalytic Applications}, - journal = {J. Cryptology}, - volume = {12}, - number = {1}, - pages = {1--28}, - year = {1999}, - url = {http://dx.doi.org/10.1007/PL00003816}, - doi = {10.1007/PL00003816}, - timestamp = {Tue, 24 May 2011 14:18:06 +0200}, - biburl = {http://dblp.uni-trier.de/rec/bib/journals/joc/OorschotW99}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - -@inproceedings{JakobssonJ99, - author = {Markus Jakobsson and - Ari Juels}, - editor = {Bart Preneel}, - title = {Proofs of Work and Bread Pudding Protocols}, - booktitle = {Secure Information Networks: Communications and Multimedia Security, - {IFIP} {TC6/TC11} Joint Working Conference on Communications and Multimedia - Security {(CMS} '99), September 20-21, 1999, Leuven, Belgium}, - series = {{IFIP} Conference Proceedings}, - volume = {152}, - pages = {258--272}, - publisher = {Kluwer}, - year = {1999}, - timestamp = {Mon, 14 Oct 2002 12:00:15 +0200}, - biburl = {http://dblp.uni-trier.de/rec/bib/conf/cms/JakobssonJ99}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - - - -@MANUAL{FIPS-197, -TITLE = {{FIPS}-197: {Advanced Encryption Standard}}, -organization = {{N}ational {I}nstitute of {S}tandards and {T}echnology ({NIST}), available at \url{http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf}}, -month = {November}, -year = {2001}, -} - - - -@BOOK{DR02, -AUTHOR = {Joan Daemen and Vincent Rijmen}, -TITLE = {The Design of {Rijndael}. {AES}~--- the {Advanced Encryption Standard}}, -PUBLISHER = {Springer}, -YEAR = {2002} -} - - -@misc{back2002hashcash, - title={Hashcash -- a denial of service counter-measure}, - author={Back, Adam}, - year={2002}, - note ={available at \url{http://www.hashcash.org/papers/hashcash.pdf}} -} - - -@inproceedings{DworkGN03, - author = {Cynthia Dwork and - Andrew Goldberg and - Moni Naor}, - title = {On Memory-Bound Functions for Fighting Spam}, - booktitle = {CRYPTO'03}, - year = {2003}, - pages = {426--444}, - series = {Lecture Notes in Computer Science}, - volume = {2729}, - publisher = {Springer} -} - - -@MANUAL{sha3, - author = {NIST}, - title = {SHA-3 competition}, - year = {2007}, - note = {\url{http://csrc.nist.gov/groups/ST/hash/sha-3/index.html‎}} -} - -@book{robshaw2008new, - title={New stream cipher designs: the eSTREAM finalists}, - author={Robshaw, Matthew and Billet, Olivier}, - volume={4986}, - year={2008}, - publisher={Springer} -} - - - -@misc{percival2009stronger, - title={Stronger key derivation via sequential memory-hard functions}, - author={Percival, Colin}, - note={\url{http://www.tarsnap.com/scrypt/scrypt.pdf}}, - year={2009} -} - - -@misc{litecoin, - title = {Litecoin - Open source P2P digital currency}, - author = {Charles Lee}, - year = {2011}, - note = {\url{https://litecoin.org/‎}}, - howpublished = {\url{https://bitcointalk.org/index.php?topic=47417.0}} -} - - - -@MANUAL{ietf-scrypt, - title = {IETF Draft: The scrypt Password-Based Key Derivation Function}, - year = {2012}, - note = {\url{ -https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-02}} -} - - -@MISC{story, - year=2012, - title = {Password security: past, present, future}, - note = {\url{http://www.openwall.com/presentations/Passwords12-The-Future-Of-Hashing/}} - } - - @article{DziembowskiFKP13, - author = {Stefan Dziembowski and - Sebastian Faust and - Vladimir Kolmogorov and - Krzysztof Pietrzak}, - title = {Proofs of Space}, - journal = {IACR Cryptology ePrint Archive 2013/796}, - note = {to appear at Crypto'15} -} - -@MISC{momentum, - year = {2013}, - title = {Momentum: a memory-hard proof-of-work}, - note = {\url{http://www.hashcash.org/papers/momentum.pdf}} -} - - -@MISC{ebay, - year = {2014}, - title = {{eBay} hacked, requests all users change passwords}, - note = {\url{http://www.cnet.com/news/ebay-hacked-requests-all-users-change-passwords/}} -} - -@TECHREPORT{yescrypt, - author = {Alexander Peslyak }, - title = {Yescrypt - a Password Hashing Competition submission}, - year = {2014}, - note = {available at \url{https://password-hashing.net/submissions/specs/yescrypt-v0.pdf}} -} - - - - - - -@MISC{bitasic, - title = {Avalon ASIC's 40nm Chip to Bring Hashing Boost for Less Power}, - year = {2014}, - note = {\url{ http://www.coindesk.com/avalon-asics-40nm-chip-bring-hashing-boost-less-power/}} -} - -@MISC{comp, - title = {{Password Hashing Competition}}, - year = 2015, - note = {\url{https://password-hashing.net/}} -} - - - - -@MANUAL{vertcoin, - title = {Vertcoin: Lyra2RE reference guide}, - year = {2014}, - note = {\url{https://vertcoin.org/downloads/Vertcoin_Lyra2RE_Paper_11292014.pdf}} -} - - - -@MANUAL{FIPS-180-4, -TITLE = {{FIPS}-180-4: {Secure Hash Standard}}, -organization = {{N}ational {I}nstitute of {S}tandards and {T}echnology ({NIST})}, -note={available at \url{http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf}}, -month = {March}, -year = {2012}, -} - - - - - -@article{gueronaes, - title={AES-GCM software performance on the current high end CPUs as a performance baseline for CAESAR competition}, - author={Gueron, Shay}, - year={2013}, - note={\url{http://2013.diac.cr.yp.to/slides/gueron.pdf}} -} - - -@inproceedings{norwayTrade, - author = {Donghoon Chang and Arpan Jati and Sweta Mishra and Somitra Kumar Sanadhya}, - title = {Time Memory Tradeoff Analysis of Graphs in Password -Hashing Constructions}, - booktitle = {Preproceedings of PASSWORDS'14}, - year = {2014}, - pages = {256-266}, - note={available at \url{http://passwords14.item.ntnu.no/Preproceedings_Passwords14.pdf}} -} - - -@inproceedings{BogdanovKLTVV11, - author = {Andrey Bogdanov and - Miroslav Knezevic and - Gregor Leander and - Deniz Toz and - Kerem Varici and - Ingrid Verbauwhede}, - title = {Spongent: A Lightweight Hash Function}, - booktitle = {CHES'11}, - year = {2011}, - pages = {312-325}, - publisher = {Springer}, - series = {Lecture Notes in Computer Science}, - volume = {6917} -} - -@misc{cryptoeprint:2014:881, - author = {Christian Forler and Eik List and Stefan Lucks and Jakob Wenzel}, - title = {Overview of the Candidates for the Password Hashing Competition - And Their Resistance Against Garbage-Collector Attacks}, - howpublished = {Cryptology ePrint Archive, Report 2014/881}, - year = {2014}, - note = {\url{http://eprint.iacr.org/}}, -} - -@TECHREPORT{Daemen13, - author = {Joan Daemen}, - title = {Permutation-based symmetric cryptography -and -{Keccak}}, - institution = {Ecrypt II, Crypto for 2020 Invited Talk}, - year = {2013}, - note={\url{https://www.cosic.esat.kuleuven.be/ecrypt/cryptofor2020/slides/KeccakEcryptTenerife.pdf}} -} - -@inproceedings{AumassonHMN10, - author = {Jean-Philippe Aumasson and - Luca Henzen and - Willi Meier and - Mar\'{\i}a Naya-Plasencia}, - title = {Quark: A Lightweight Hash}, - booktitle = {CHES'10}, - year = {2010}, - pages = {1-15}, - publisher = {Springer}, - series = {Lecture Notes in Computer Science}, - volume = {6225}, - note= {\url{https://131002.net/quark/quark_full.pdf}} -} - -@inproceedings{knudsen1998analysis, - title={Analysis methods for (alleged) {RC4}}, - author={Knudsen, Lars R and Meier, Willi and Preneel, Bart and Rijmen, Vincent and Verdoolaege, Sven}, - booktitle={Advances in Cryptology—ASIACRYPT’98}, - pages={327--341}, - year={1998}, - organization={Springer} -} - - -@report{Keccak-ref, - author = {Guido Bertoni and - Joan Daemen and - Michael Peeters and - Gilles Van Assche}, - title = {The {Keccak} reference, version 3.0}, - year = {2011}, - note = {\url{http://keccak.noekeon.org/Keccak-reference-3.0.pdf}} -} - - - -@inproceedings{DworkNW05, - author = {Cynthia Dwork and - Moni Naor and - Hoeteck Wee}, - title = {Pebbling and Proofs of Work}, - booktitle = {{CRYPTO}'05}, - year = {2005}, - pages = {37--54}, - series = {Lecture Notes in Computer Science}, - volume = {3621}, - publisher = {Springer} -} - -@inproceedings{FiatS86, - author = {Amos Fiat and - Adi Shamir}, - editor = {Andrew M. Odlyzko}, - title = {How to Prove Yourself: Practical Solutions to Identification and Signature - Problems}, - booktitle = {Advances in Cryptology - {CRYPTO} '86, Santa Barbara, California, - USA, 1986, Proceedings}, - series = {Lecture Notes in Computer Science}, - volume = {263}, - pages = {186--194}, - publisher = {Springer}, - year = {1986}, - url = {http://dx.doi.org/10.1007/3-540-47721-7_12}, - doi = {10.1007/3-540-47721-7_12}, - timestamp = {Fri, 18 Sep 2009 08:01:49 +0200}, - biburl = {http://dblp.uni-trier.de/rec/bib/conf/crypto/FiatS86}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - - -@article{HopcroftPV77, - author = {John E. Hopcroft and - Wolfgang J. Paul and - Leslie G. Valiant}, - title = {On Time Versus Space}, - journal = {J. ACM}, - volume = {24}, - number = {2}, - year = {1977}, - pages = {332-337}, - ee = {http://doi.acm.org/10.1145/322003.322015}, - bibsource = {DBLP, http://dblp.uni-trier.de} -} - -@article{PaulTC77, - author = {Wolfgang J. Paul and - Robert Endre Tarjan and - James R. Celoni}, - title = {Space Bounds for a Game on Graphs}, - journal = {Mathematical Systems Theory}, - volume = {10}, - year = {1977}, - pages = {239-251}, - ee = {http://dx.doi.org/10.1007/BF01683275}, - bibsource = {DBLP, http://dblp.uni-trier.de} -} - -@article{LengauerT82, - author = {Thomas Lengauer and - Robert Endre Tarjan}, - title = {Asymptotically tight bounds on time-space trade-offs in - a pebble game}, - journal = {J. ACM}, - volume = {29}, - number = {4}, - year = {1982}, - pages = {1087-1130}, - ee = {http://doi.acm.org/10.1145/322344.322354}, - bibsource = {DBLP, http://dblp.uni-trier.de} -} - -@article{AlwenS14, - author = {Jo{\"e}l Alwen and - Vladimir Serbinenko}, - title = {High Parallel Complexity Graphs and Memory-Hard Functions}, - journal = {IACR Cryptology ePrint Archive 2014/238} -} - -@TECHREPORT{Bernstein05, - author = {Daniel J. Bernstein}, - title = {Cache-timing -attacks -on -AES}, - year = {2005}, - note = {\url{http://cr.yp.to/antiforgery/cachetiming-20050414.pdf}} -} - -@inproceedings{trade-att, - author = {Alex Biryukov and - Dmitry Khovratovich}, - editor = {Tetsu Iwata and - Jung Hee Cheon}, - title = {Tradeoff Cryptanalysis of Memory-Hard Functions}, - booktitle = {Advances in Cryptology - {ASIACRYPT} 2015 }, - series = {Lecture Notes in Computer Science}, - volume = {9453}, - pages = {633--657}, - publisher = {Springer}, - year = {2015}, -} - -@TECHREPORT{Argon2, - author = {Alex Biryukov and Daniel Dinu and Dmitry Khovratovich}, - title = {Argon2}, - year = {2015}, - note = {\url{https://www.cryptolux.org/images/0/0d/Argon2.pdf}} -} - -@MISC{BSTY, - title = {GlobalBoost announces a yescrypt-based cryptocurrency}, - note = {\url{https://bitcointalk.org/index.php?topic=775289.0}} -} - -@article{ForlerLW13, - author = {Christian Forler and - Stefan Lucks and - Jakob Wenzel}, - title = {Catena: A Memory-Consuming Password Scrambler}, - journal = {IACR Cryptology ePrint Archive, Report 2013/525}, - year = {2013}, - note = {non-tweaked version \url{http://eprint.iacr.org/2013/525/20140105:194859}} -} - -@misc{broz15, -year = 2015, -author = {Milan Broz}, -title = {PHC benchmarks}, -note = {\url{https://github.com/mbroz/PHCtest/blob/master/output/phc\_round2.pdf}} -} - - @inproceedings{ForlerLW14, - author = {Christian Forler and - Stefan Lucks and - Jakob Wenzel}, - title = {Memory-Demanding Password Scrambling}, - booktitle = {{ASIACRYPT}'14}, - series = {Lecture Notes in Computer Science}, - volume = {8874}, - pages = {289--305}, - publisher = {Springer}, - year = {2014}, - note = {tweaked version of \cite{ForlerLW13}} -} - -@article{ParkPAFG15, - author = {Sunoo Park and - Krzysztof Pietrzak and - Jo{\"{e}}l Alwen and - Georg Fuchsbauer and - Peter Gazi}, - title = {Spacecoin: {A} Cryptocurrency Based on Proofs of Space}, - journal = {{IACR} Cryptology ePrint Archive}, - volume = {2015}, - pages = {528}, - year = {2015}, - url = {http://eprint.iacr.org/2015/528}, - timestamp = {Fri, 26 Jun 2015 09:49:58 +0200}, - biburl = {http://dblp.uni-trier.de/rec/bib/journals/iacr/ParkPAFG15}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - - - - - -@inproceedings{BiryukovS01, -author = {Alex Biryukov and -Adi Shamir}, -title = {Structural Cryptanalysis of {SASAS}}, -booktitle = {EUROCRYPT'01}, -year = {2001} -} - -@inproceedings{RistenpartTSS09, - author = {Thomas Ristenpart and - Eran Tromer and - Hovav Shacham and - Stefan Savage}, - title = {Hey, you, get off of my cloud: exploring information leakage in third-party - compute clouds}, - booktitle = {ACM {CCS}'09}, - year = {2009}, - pages = {199--212} -} - -@MISC{bitcoin, - title = {Bitcoin: Mining hardware comparison}, - year={2014}, - note = {available at \url{https://en.bitcoin.it/wiki/Mining_hardware_comparison}. We compare $2^{32}$ hashes per joule on the best ASICs with $2^{17}$ hashes per joule on the most efficient x86-laptops.} -} - - -@MISC{litecoin-comp, - title = {Litecoin: Mining hardware comparison}, - note = {\url{https://litecoin.info/Mining_hardware_comparison}} -} - - -@article{AbadiBMW05, - author = {Mart{\'{\i}}n Abadi and - Michael Burrows and - Mark S. Manasse and - Ted Wobber}, - title = {Moderately hard, memory-bound functions}, - journal = {{ACM} Trans. Internet Techn.}, - year = {2005}, - volume = {5}, - number = {2}, - pages = {299--327}, - url = {http://doi.acm.org/10.1145/1064340.1064341}, - doi = {10.1145/1064340.1064341}, - timestamp = {Tue, 09 Sep 2014 16:27:47 +0200}, - biburl = {http://dblp.uni-trier.de/rec/bib/journals/toit/AbadiBMW05}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - -@article{Pippenger77, - author = {Nicholas Pippenger}, - title = {Superconcentrators}, - journal = {{SIAM} J. Comput.}, - year = {1977}, - volume = {6}, - number = {2}, - pages = {298--304}, - url = {http://dx.doi.org/10.1137/0206022}, - doi = {10.1137/0206022}, - timestamp = {Tue, 09 Sep 2014 16:52:40 +0200}, - biburl = {http://dblp.uni-trier.de/rec/bib/journals/siamcomp/Pippenger77}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - -@TECHREPORT{lyra, - author = {Marcos A. Simplicio Jr and Leonardo C. Almeida and Ewerton R. Andrade and Paulo C. F. dos Santos and Paulo S. L. M. Barreto}, - title = {The {Lyra2} reference guide, version 2.3.2}, - year = {2014}, - month = {april}, - note = {available at \url{http://lyra-kdf.net/Lyra2ReferenceGuide_v1.pdf}}, -} - - -@inproceedings{Thompson79, - author = {Clark D. Thompson}, - title = {Area-Time Complexity for {VLSI}}, - booktitle = {STOC'79}, - pages = {81--88}, - year = {1979}, - publisher = {{ACM}} -} - -@TECHREPORT{pomelo, - author = {Hongjun Wu}, - title = {{POMELO}: -A Password Hashing Algorithm}, - year = {2014}, - note = {available at \url{https://password-hashing.net/submissions/specs/POMELO-v1.pdf}}, -} - - -@inproceedings{knudsen1998analysis, - title={Analysis methods for (alleged) {RC4}}, - author={Knudsen, Lars R and Meier, Willi and Preneel, Bart and Rijmen, Vincent and Verdoolaege, Sven}, - booktitle={Advances in Cryptology—ASIACRYPT’98}, - pages={327--341}, - year={1998}, - organization={Springer} -} - -@MISC{fpga, - title = {Energy-efficient bcrypt cracking}, -author={Katja Malvoni}, - note = {Passwords'14 conference, available at \url{http://www.openwall.com/presentations/Passwords14-Energy-Efficient-Cracking/}} -} - - -@MISC{ripper, - title = {Software tool: {John the Ripper} password cracker}, - note = {\url{http://www.openwall.com/john/}} -} - -@MISC{sharcs, -title = {{SHARCS} -- Special-purpose Hardware for Attacking Cryptographic Systems}, -note = {\url{http://www.sharcs.org/}} -} - -@article{Wiener04, - author = {Michael J. Wiener}, - title = {The Full Cost of Cryptanalytic Attacks}, - journal = {J. Cryptology}, - year = {2004}, - volume = {17}, - number = {2}, - pages = {105--124}, - url = {http://dx.doi.org/10.1007/s00145-003-0213-5}, - doi = {10.1007/s00145-003-0213-5}, - timestamp = {Sat, 27 Sep 2014 18:00:09 +0200}, - biburl = {http://dblp.uni-trier.de/rec/bib/journals/joc/Wiener04}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - - - - - -@inproceedings{MukhopadhyayS06, - author = {Sourav Mukhopadhyay and - Palash Sarkar}, - title = {On the Effectiveness of {TMTO} and Exhaustive Search Attacks}, - booktitle = {{IWSEC} 2006}, - year = {2006}, - pages = {337--352}, - series = {Lecture Notes in Computer Science}, - volume = {4266}, - publisher = {Springer} -} - - - -@inproceedings{SprengerB12, - author = {Martijn Sprengers and Lejla Batina}, - title = {Speeding up {GPU-based} password cracking}, - booktitle = {SHARCS'12}, - year = {2012}, - note = {available at \url{http://2012.sharcs.org/record.pdf}} -} - -@article{nakamoto2012bitcoin, - title={Bitcoin: A peer-to-peer electronic cash system}, - author={Nakamoto, Satoshi}, - note={\url{http://www. bitcoin.org/bitcoin.pdf}}, - year={2009} -} - - - -@inproceedings{BernsteinL13, - author = {Daniel J. Bernstein and - Tanja Lange}, - title = {Non-uniform Cracks in the Concrete: The Power of Free Precomputation}, - booktitle = {ASIACRYPT'13}, - year = {2013}, - pages = {321--340}, - series = {Lecture Notes in Computer Science}, - volume = {8270}, - publisher = {Springer} -} - - - -@inproceedings{AumassonNWW13, - author = {Jean{-}Philippe Aumasson and - Samuel Neves and - Zooko Wilcox{-}O'Hearn and - Christian Winnerlein}, - title = {{BLAKE2:} Simpler, Smaller, Fast as {MD5}}, - booktitle = {{ACNS}'13}, - pages = {119--135}, - series = {Lecture Notes in Computer Science}, - year = {2013}, - volume = {7954}, - publisher = {Springer} -} - - -@article{liu2013parallel, - author = {Bin Liu and Bevan M. Baas}, - title = {Parallel {AES} Encryption Engines for Many-Core Processor Arrays}, - journal = {{IEEE} Transactions on Computers}, - year = {2013}, - volume = {62}, - number = {3}, - pages = {536--547}, - month = mar, -} - -@article{ForlerLLW14, - author = {Christian Forler and - Eik List and - Stefan Lucks and - Jakob Wenzel}, - title = {Overview of the Candidates for the Password Hashing Competition - - And their Resistance against Garbage-Collector Attacks}, - journal = {{IACR} Cryptology ePrint Archive}, - volume = {2014}, - pages = {881}, - year = {2014}, - url = {http://eprint.iacr.org/2014/881}, - timestamp = {Sat, 02 Mar 4439591 14:05:04 +}, - biburl = {http://dblp.uni-trier.de/rec/bib/journals/iacr/ForlerLLW14}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - -@inproceedings{gurkaynak2012sha3, -author = {Frank G{\"{u}}rkaynak and Kris Gaj and Beat Muheim and Ekawat Homsirikamol and Christoph Keller and Marcin Rogawski and Hubert Kaeslin and Jens-Peter Kaps}, -title = {Lessons Learned from Designing a 65nm {ASIC} for Evaluating Third Round {SHA-3} Candidates}, -booktitle = {Third SHA-3 Candidate Conference}, -month = mar, -year = {2012} -} - -@inproceedings{giridhar2013dram, - author = {Bharan Giridhar and Michael Cieslak and Deepankar Duggal and Ronald G. Dreslinski and Hsing Min Chen and Robert Patti and Betina Hold and Chaitali Chakrabarti and Trevor N. Mudge and David Blaauw}, - title = {Exploring {DRAM} organizations for energy-efficient and resilient - exascale memories}, - booktitle = {International Conference for High Performance Computing, Networking, - Storage and Analysis (SC 2013)}, - year = {2013}, - pages = {23--35}, - publisher = {ACM}, -} - -@inproceedings{BertoniDPA11, - author = {Guido Bertoni and - Joan Daemen and - Michael Peeters and - Gilles Van Assche}, - title = {Duplexing the Sponge: Single-Pass Authenticated Encryption and Other - Applications}, - booktitle = {{SAC}'11,}, - series = {Lecture Notes in Computer Science}, - volume = {7118}, - pages = {320--337}, - publisher = {Springer}, - year = {2011} -} - -@inproceedings{Rig, - author = {Donghoon Chang and Arpan Jati and Sweta Mishra and Somitra Sanadhya}, - title = {Rig: A simple, secure and flexible design for Password Hashing}, - booktitle = {Inscrypt'14}, - series = {Lecture Notes in Computer Science, to appear}, - publisher = {Springer}, - year = {2014} -} - -@article{BiryukovP14, - author = {Alex Biryukov and - Ivan Pustogarov}, - title = {Proof-of-Work as Anonymous Micropayment: Rewarding a {Tor} Relay}, - journal = {{IACR} Cryptology ePrint Archive 2014/1011}, - note= {to appear at Financial Cryptography 2015}, - url = {http://eprint.iacr.org/2014/1011}, - timestamp = {Mon, 19 Jan 2015 11:11:51 +0100}, - biburl = {http://dblp.uni-trier.de/rec/bib/journals/iacr/BiryukovP14}, - bibsource = {dblp computer science bibliography, http://dblp.org} -} - - -@misc{Andersen14, - author = {David Andersen}, - title = {A Public Review of Cuckoo Cycle}, - howpublished = {\url{http://www.cs.cmu.edu/~dga/crypto/cuckoo/analysis.pdf}}, - year = {2014} -} - -@misc{Tromp14, - author = {John Tromp}, - title = {Cuckoo Cycle: a memory bound graph-theoretic proof-of-work}, - howpublished = {Cryptology ePrint Archive, Report 2014/059}, - year = {2014}, - note = {\url{http://eprint.iacr.org/2014/059}, project webpage \url{https://github.com/tromp/cuckoo}}, -} - -@misc{cryptoeprint:2015:136, - author = {Marcos A. Simplicio Jr. and Leonardo C. Almeida and Ewerton R. Andrade and Paulo C. F. dos Santos and Paulo S. L. M. Barreto}, - title = {Lyra2: Password Hashing Scheme with improved security against time-memory trade-offs}, - howpublished = {Cryptology ePrint Archive, Report 2015/136}, - year = {2015}, - note = {\url{http://eprint.iacr.org/}}, -} - -@article{Corrigan-GibbsB16, - author = {Henry Corrigan{-}Gibbs and - Dan Boneh and - Stuart E. Schechter}, - title = {Balloon Hashing: Provably Space-Hard Hash Functions with Data-Independent - Access Patterns}, - journal = {{IACR} Cryptology ePrint Archive}, - volume = {2016}, - pages = {27}, - year = {2016} -} - - -@article{AB16, - author = {Joel Alwen and Jeremiah Blocki}, - title = {Efficiently Computing Data-Independent Memory-Hard Functions}, - journal = {{IACR} Cryptology ePrint Archive}, - volume = {2016}, - pages = {115}, - year = {2016} -} \ No newline at end of file diff --git a/pkg/urcrypt/argon2/libargon2.pc b/pkg/urcrypt/argon2/libargon2.pc deleted file mode 100644 index 8bce107ea..000000000 --- a/pkg/urcrypt/argon2/libargon2.pc +++ /dev/null @@ -1,16 +0,0 @@ -# libargon2 info for pkg-config -## Template for downstream installers: -## - replace @HOST_MULTIARCH@ with target arch, eg 'x86_64-linux-gnu' -## - replace @UPSTREAM_VER@ with current version, eg '20160406' - -prefix=/usr -exec_prefix=${prefix} -libdir=${prefix}/lib/@HOST_MULTIARCH@ -includedir=${prefix}/include - -Name: libargon2 -Description: Development libraries for libargon2 -Version: @UPSTREAM_VER@ -Libs: -L${libdir} -largon2 -lrt -ldl -Cflags: -URL: https://github.com/P-H-C/phc-winner-argon2 diff --git a/pkg/urcrypt/argon2/man/argon2.1 b/pkg/urcrypt/argon2/man/argon2.1 deleted file mode 100644 index ff06d977f..000000000 --- a/pkg/urcrypt/argon2/man/argon2.1 +++ /dev/null @@ -1,60 +0,0 @@ -.TH ARGON2 "1" "April 2016" "argon2 " "User Commands" - -.SH NAME -argon2 \- generate argon2 hashes - -.SH SYNOPSIS -.B argon2 salt -.RB [ OPTIONS ] - -.SH DESCRIPTION -Generate Argon2 hashes from the command line. - -The supplied salt (the first argument to the command) must be at least -8 octets in length, and the password is supplied on standard input. - -By default, this uses Argon2i variant (where memory access is -independent of secret data) which is the preferred one for password -hashing and password-based key derivation. - -.SH OPTIONS -.TP -.B \-h -Display tool usage -.TP -.B \-d -Use Argon2d instead of Argon2i (Argon2i is the default) -.TP -.B \-id -Use Argon2id instead of Argon2i (Argon2i is the default) -.TP -.B \-u -Use Argon2u instead of Argon2i (Argon2i is the default) -.TP -.BI \-t " N" -Sets the number of iterations to N (default = 3) -.TP -.BI \-m " N" -Sets the memory usage of 2^N KiB (default = 12) -.TP -.BI \-p " N" -Sets parallelism to N threads (default = 1) -.TP -.BI \-l " N" -Sets hash output length to N bytes (default = 32) -.TP -.B \-e -Output only encoded hash -.TP -.B \-r -Output only the raw bytes of the hash -.TP -.B \-v (10|13) -Argon2 version (defaults to the most recent version, currently 13) - -.SH COPYRIGHT -This manpage was written by \fBDaniel Kahn Gillmor\fR for the Debian -distribution (but may be used by others). It is released, like the -rest of this Argon2 implementation, under a dual license. You may use this work -under the terms of a Creative Commons CC0 1.0 License/Waiver or the Apache -Public License 2.0, at your option. diff --git a/pkg/urcrypt/argon2/meson.build b/pkg/urcrypt/argon2/meson.build deleted file mode 100644 index 22c7ed657..000000000 --- a/pkg/urcrypt/argon2/meson.build +++ /dev/null @@ -1,33 +0,0 @@ -project('argon2', 'c', version : '1') - -legacy_meson = false - -detect_meson_version = run_command('meson', '--version') -meson_ver = detect_meson_version.stdout() - -if(meson_ver == '0.29.0\n') - legacy_meson = true -elif(not meson.version().version_compare('>=0.40.0')) - error('Meson 0.29.0 is last legacy version supported. Otherwise please upgrade to 0.40.0 or higher.') -endif - -lib_src = ['src/argon2.c', -'src/bench.c', -'src/blake2/blake2b.c', -'src/core.c', -'src/encoding.c', -'src/genkat.c', -'src/opt.c', -'src/ref.c', -'src/run.c', -'src/test.c', -'src/thread.c'] - -inc = include_directories(['./include']) - -lib = static_library('argon2', sources: lib_src, -include_directories: inc, -c_args: ['-Wall', '-Wno-unused-value', '-Wno-unused-function', '-DARGON2_NO_THREADS'], -install: false) - -argon2_dep = declare_dependency(include_directories : inc, link_with : lib) diff --git a/pkg/urcrypt/argon2/src/argon2.c b/pkg/urcrypt/argon2/src/argon2.c deleted file mode 100644 index cc3de2e78..000000000 --- a/pkg/urcrypt/argon2/src/argon2.c +++ /dev/null @@ -1,490 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#include -#include -#include - -#include "argon2.h" -#include "encoding.h" -#include "core.h" - -const char *argon2_type2string(argon2_type type, int uppercase) { - switch (type) { - case Argon2_d: - return uppercase ? "Argon2d" : "argon2d"; - case Argon2_i: - return uppercase ? "Argon2i" : "argon2i"; - case Argon2_id: - return uppercase ? "Argon2id" : "argon2id"; - case Argon2_u: - return uppercase ? "Argon2u" : "argon2u"; - } - - return NULL; -} - -int argon2_ctx(argon2_context *context, argon2_type type) { - /* 1. Validate all inputs */ - int result = validate_inputs(context); - uint32_t memory_blocks, segment_length; - argon2_instance_t instance; - - if (ARGON2_OK != result) { - return result; - } - - if (Argon2_d != type && - Argon2_i != type && - Argon2_id != type && - Argon2_u != type) { - return ARGON2_INCORRECT_TYPE; - } - - /* 2. Align memory size */ - /* Minimum memory_blocks = 8L blocks, where L is the number of lanes */ - memory_blocks = context->m_cost; - - if (memory_blocks < 2 * ARGON2_SYNC_POINTS * context->lanes) { - memory_blocks = 2 * ARGON2_SYNC_POINTS * context->lanes; - } - - segment_length = memory_blocks / (context->lanes * ARGON2_SYNC_POINTS); - /* Ensure that all segments have equal length */ - memory_blocks = segment_length * (context->lanes * ARGON2_SYNC_POINTS); - - instance.version = context->version; - instance.memory = NULL; - instance.passes = context->t_cost; - instance.memory_blocks = memory_blocks; - instance.segment_length = segment_length; - instance.lane_length = segment_length * ARGON2_SYNC_POINTS; - instance.lanes = context->lanes; - instance.threads = context->threads; - instance.type = type; - - if (instance.threads > instance.lanes) { - instance.threads = instance.lanes; - } - - /* 3. Initialization: Hashing inputs, allocating memory, filling first - * blocks - */ - result = initialize(&instance, context); - - if (ARGON2_OK != result) { - return result; - } - - /* 4. Filling memory */ - result = fill_memory_blocks(&instance); - - if (ARGON2_OK != result) { - return result; - } - /* 5. Finalization */ - finalize(context, &instance); - - return ARGON2_OK; -} - -int argon2_hash(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, const size_t saltlen, - void *hash, const size_t hashlen, char *encoded, - const size_t encodedlen, argon2_type type, - const uint32_t version){ - - argon2_context context; - int result; - uint8_t *out; - - if (pwdlen > ARGON2_MAX_PWD_LENGTH) { - return ARGON2_PWD_TOO_LONG; - } - - if (saltlen > ARGON2_MAX_SALT_LENGTH) { - return ARGON2_SALT_TOO_LONG; - } - - if (hashlen > ARGON2_MAX_OUTLEN) { - return ARGON2_OUTPUT_TOO_LONG; - } - - if (hashlen < ARGON2_MIN_OUTLEN) { - return ARGON2_OUTPUT_TOO_SHORT; - } - - out = malloc(hashlen); - if (!out) { - return ARGON2_MEMORY_ALLOCATION_ERROR; - } - - context.out = (uint8_t *)out; - context.outlen = (uint32_t)hashlen; - context.pwd = CONST_CAST(uint8_t *)pwd; - context.pwdlen = (uint32_t)pwdlen; - context.salt = CONST_CAST(uint8_t *)salt; - context.saltlen = (uint32_t)saltlen; - context.secret = NULL; - context.secretlen = 0; - context.ad = NULL; - context.adlen = 0; - context.t_cost = t_cost; - context.m_cost = m_cost; - context.lanes = parallelism; - context.threads = parallelism; - context.allocate_cbk = NULL; - context.free_cbk = NULL; - context.flags = ARGON2_DEFAULT_FLAGS; - context.version = version; - - result = argon2_ctx(&context, type); - - if (result != ARGON2_OK) { - clear_internal_memory(out, hashlen); - free(out); - return result; - } - - /* if raw hash requested, write it */ - if (hash) { - memcpy(hash, out, hashlen); - } - - /* if encoding requested, write it */ - if (encoded && encodedlen) { - if (encode_string(encoded, encodedlen, &context, type) != ARGON2_OK) { - clear_internal_memory(out, hashlen); /* wipe buffers if error */ - clear_internal_memory(encoded, encodedlen); - free(out); - return ARGON2_ENCODING_FAIL; - } - } - clear_internal_memory(out, hashlen); - free(out); - - return ARGON2_OK; -} - -int argon2i_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, const size_t hashlen, - char *encoded, const size_t encodedlen) { - - return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, - NULL, hashlen, encoded, encodedlen, Argon2_i, - ARGON2_VERSION_NUMBER); -} - -int argon2i_hash_raw(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, const size_t hashlen) { - - return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, - hash, hashlen, NULL, 0, Argon2_i, ARGON2_VERSION_NUMBER); -} - -int argon2d_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, const size_t hashlen, - char *encoded, const size_t encodedlen) { - - return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, - NULL, hashlen, encoded, encodedlen, Argon2_d, - ARGON2_VERSION_NUMBER); -} - -int argon2d_hash_raw(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, const size_t hashlen) { - - return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, - hash, hashlen, NULL, 0, Argon2_d, ARGON2_VERSION_NUMBER); -} - -int argon2id_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, const size_t hashlen, - char *encoded, const size_t encodedlen) { - - return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, - NULL, hashlen, encoded, encodedlen, Argon2_id, - ARGON2_VERSION_NUMBER); -} - -int argon2id_hash_raw(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, const size_t hashlen) { - return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, - hash, hashlen, NULL, 0, Argon2_id, - ARGON2_VERSION_NUMBER); -} - -int argon2u_hash_encoded(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, const size_t hashlen, - char *encoded, const size_t encodedlen) { - - return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, - NULL, hashlen, encoded, encodedlen, Argon2_u, - ARGON2_VERSION_NUMBER); -} - -int argon2u_hash_raw(const uint32_t t_cost, const uint32_t m_cost, - const uint32_t parallelism, const void *pwd, - const size_t pwdlen, const void *salt, - const size_t saltlen, void *hash, const size_t hashlen) { - - return argon2_hash(t_cost, m_cost, parallelism, pwd, pwdlen, salt, saltlen, - hash, hashlen, NULL, 0, Argon2_u, ARGON2_VERSION_NUMBER); -} - -static int argon2_compare(const uint8_t *b1, const uint8_t *b2, size_t len) { - size_t i; - uint8_t d = 0U; - - for (i = 0U; i < len; i++) { - d |= b1[i] ^ b2[i]; - } - return (int)((1 & ((d - 1) >> 8)) - 1); -} - -int argon2_verify(const char *encoded, const void *pwd, const size_t pwdlen, - argon2_type type) { - - argon2_context ctx; - uint8_t *desired_result = NULL; - - int ret = ARGON2_OK; - - size_t encoded_len; - uint32_t max_field_len; - - if (pwdlen > ARGON2_MAX_PWD_LENGTH) { - return ARGON2_PWD_TOO_LONG; - } - - if (encoded == NULL) { - return ARGON2_DECODING_FAIL; - } - - encoded_len = strlen(encoded); - if (encoded_len > UINT32_MAX) { - return ARGON2_DECODING_FAIL; - } - - /* No field can be longer than the encoded length */ - max_field_len = (uint32_t)encoded_len; - - ctx.saltlen = max_field_len; - ctx.outlen = max_field_len; - - ctx.salt = malloc(ctx.saltlen); - ctx.out = malloc(ctx.outlen); - if (!ctx.salt || !ctx.out) { - ret = ARGON2_MEMORY_ALLOCATION_ERROR; - goto fail; - } - - ctx.pwd = (uint8_t *)pwd; - ctx.pwdlen = (uint32_t)pwdlen; - - ret = decode_string(&ctx, encoded, type); - if (ret != ARGON2_OK) { - goto fail; - } - - /* Set aside the desired result, and get a new buffer. */ - desired_result = ctx.out; - ctx.out = malloc(ctx.outlen); - if (!ctx.out) { - ret = ARGON2_MEMORY_ALLOCATION_ERROR; - goto fail; - } - - ret = argon2_verify_ctx(&ctx, (char *)desired_result, type); - if (ret != ARGON2_OK) { - goto fail; - } - -fail: - free(ctx.salt); - free(ctx.out); - free(desired_result); - - return ret; -} - -int argon2i_verify(const char *encoded, const void *pwd, const size_t pwdlen) { - - return argon2_verify(encoded, pwd, pwdlen, Argon2_i); -} - -int argon2d_verify(const char *encoded, const void *pwd, const size_t pwdlen) { - - return argon2_verify(encoded, pwd, pwdlen, Argon2_d); -} - -int argon2id_verify(const char *encoded, const void *pwd, const size_t pwdlen) { - - return argon2_verify(encoded, pwd, pwdlen, Argon2_id); -} - -int argon2u_verify(const char *encoded, const void *pwd, const size_t pwdlen) { - - return argon2_verify(encoded, pwd, pwdlen, Argon2_u); -} - -int argon2d_ctx(argon2_context *context) { - return argon2_ctx(context, Argon2_d); -} - -int argon2i_ctx(argon2_context *context) { - return argon2_ctx(context, Argon2_i); -} - -int argon2id_ctx(argon2_context *context) { - return argon2_ctx(context, Argon2_id); -} - -int argon2u_ctx(argon2_context *context) { - return argon2_ctx(context, Argon2_u); -} - -int argon2_verify_ctx(argon2_context *context, const char *hash, - argon2_type type) { - int ret = argon2_ctx(context, type); - if (ret != ARGON2_OK) { - return ret; - } - - if (argon2_compare((uint8_t *)hash, context->out, context->outlen)) { - return ARGON2_VERIFY_MISMATCH; - } - - return ARGON2_OK; -} - -int argon2d_verify_ctx(argon2_context *context, const char *hash) { - return argon2_verify_ctx(context, hash, Argon2_d); -} - -int argon2i_verify_ctx(argon2_context *context, const char *hash) { - return argon2_verify_ctx(context, hash, Argon2_i); -} - -int argon2id_verify_ctx(argon2_context *context, const char *hash) { - return argon2_verify_ctx(context, hash, Argon2_id); -} - -int argon2u_verify_ctx(argon2_context *context, const char *hash) { - return argon2_verify_ctx(context, hash, Argon2_u); -} - -const char *argon2_error_message(int error_code) { - switch (error_code) { - case ARGON2_OK: - return "OK"; - case ARGON2_OUTPUT_PTR_NULL: - return "Output pointer is NULL"; - case ARGON2_OUTPUT_TOO_SHORT: - return "Output is too short"; - case ARGON2_OUTPUT_TOO_LONG: - return "Output is too long"; - case ARGON2_PWD_TOO_SHORT: - return "Password is too short"; - case ARGON2_PWD_TOO_LONG: - return "Password is too long"; - case ARGON2_SALT_TOO_SHORT: - return "Salt is too short"; - case ARGON2_SALT_TOO_LONG: - return "Salt is too long"; - case ARGON2_AD_TOO_SHORT: - return "Associated data is too short"; - case ARGON2_AD_TOO_LONG: - return "Associated data is too long"; - case ARGON2_SECRET_TOO_SHORT: - return "Secret is too short"; - case ARGON2_SECRET_TOO_LONG: - return "Secret is too long"; - case ARGON2_TIME_TOO_SMALL: - return "Time cost is too small"; - case ARGON2_TIME_TOO_LARGE: - return "Time cost is too large"; - case ARGON2_MEMORY_TOO_LITTLE: - return "Memory cost is too small"; - case ARGON2_MEMORY_TOO_MUCH: - return "Memory cost is too large"; - case ARGON2_LANES_TOO_FEW: - return "Too few lanes"; - case ARGON2_LANES_TOO_MANY: - return "Too many lanes"; - case ARGON2_PWD_PTR_MISMATCH: - return "Password pointer is NULL, but password length is not 0"; - case ARGON2_SALT_PTR_MISMATCH: - return "Salt pointer is NULL, but salt length is not 0"; - case ARGON2_SECRET_PTR_MISMATCH: - return "Secret pointer is NULL, but secret length is not 0"; - case ARGON2_AD_PTR_MISMATCH: - return "Associated data pointer is NULL, but ad length is not 0"; - case ARGON2_MEMORY_ALLOCATION_ERROR: - return "Memory allocation error"; - case ARGON2_FREE_MEMORY_CBK_NULL: - return "The free memory callback is NULL"; - case ARGON2_ALLOCATE_MEMORY_CBK_NULL: - return "The allocate memory callback is NULL"; - case ARGON2_INCORRECT_PARAMETER: - return "Argon2_Context context is NULL"; - case ARGON2_INCORRECT_TYPE: - return "There is no such version of Argon2"; - case ARGON2_OUT_PTR_MISMATCH: - return "Output pointer mismatch"; - case ARGON2_THREADS_TOO_FEW: - return "Not enough threads"; - case ARGON2_THREADS_TOO_MANY: - return "Too many threads"; - case ARGON2_MISSING_ARGS: - return "Missing arguments"; - case ARGON2_ENCODING_FAIL: - return "Encoding failed"; - case ARGON2_DECODING_FAIL: - return "Decoding failed"; - case ARGON2_THREAD_FAIL: - return "Threading failure"; - case ARGON2_DECODING_LENGTH_FAIL: - return "Some of encoded parameters are too long or too short"; - case ARGON2_VERIFY_MISMATCH: - return "The password does not match the supplied hash"; - default: - return "Unknown error code"; - } -} - -size_t argon2_encodedlen(uint32_t t_cost, uint32_t m_cost, uint32_t parallelism, - uint32_t saltlen, uint32_t hashlen, argon2_type type) { - return strlen("$$v=$m=,t=,p=$$") + strlen(argon2_type2string(type, 0)) + - numlen(t_cost) + numlen(m_cost) + numlen(parallelism) + - b64len(saltlen) + b64len(hashlen) + numlen(ARGON2_VERSION_NUMBER) + 1; -} diff --git a/pkg/urcrypt/argon2/src/bench.c b/pkg/urcrypt/argon2/src/bench.c deleted file mode 100644 index 20a22869d..000000000 --- a/pkg/urcrypt/argon2/src/bench.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#include -#include -#include -#include -#include -#ifdef _MSC_VER -#include -#endif - -#include "argon2.h" - -static uint64_t rdtsc(void) { -#ifdef _MSC_VER - return __rdtsc(); -#else -#if defined(__amd64__) || defined(__x86_64__) - uint64_t rax, rdx; - __asm__ __volatile__("rdtsc" : "=a"(rax), "=d"(rdx) : :); - return (rdx << 32) | rax; -#elif defined(__i386__) || defined(__i386) || defined(__X86__) - uint64_t rax; - __asm__ __volatile__("rdtsc" : "=A"(rax) : :); - return rax; -#else -#error "Not implemented!" -#endif -#endif -} - -/* - * Benchmarks Argon2 with salt length 16, password length 16, t_cost 3, - and different m_cost and threads - */ -static void benchmark() { -#define BENCH_OUTLEN 16 -#define BENCH_INLEN 16 - const uint32_t inlen = BENCH_INLEN; - const unsigned outlen = BENCH_OUTLEN; - unsigned char out[BENCH_OUTLEN]; - unsigned char pwd_array[BENCH_INLEN]; - unsigned char salt_array[BENCH_INLEN]; -#undef BENCH_INLEN -#undef BENCH_OUTLEN - - uint32_t t_cost = 3; - uint32_t m_cost; - uint32_t thread_test[4] = {1, 2, 4, 8}; - argon2_type types[3] = {Argon2_i, Argon2_d, Argon2_id}; - - memset(pwd_array, 0, inlen); - memset(salt_array, 1, inlen); - - for (m_cost = (uint32_t)1 << 10; m_cost <= (uint32_t)1 << 22; m_cost *= 2) { - unsigned i; - for (i = 0; i < 4; ++i) { - double run_time = 0; - uint32_t thread_n = thread_test[i]; - - unsigned j; - for (j = 0; j < 3; ++j) { - clock_t start_time, stop_time; - uint64_t start_cycles, stop_cycles; - uint64_t delta; - double mcycles; - - argon2_type type = types[j]; - start_time = clock(); - start_cycles = rdtsc(); - - argon2_hash(t_cost, m_cost, thread_n, pwd_array, inlen, - salt_array, inlen, out, outlen, NULL, 0, type, - ARGON2_VERSION_NUMBER); - - stop_cycles = rdtsc(); - stop_time = clock(); - - delta = (stop_cycles - start_cycles) / (m_cost); - mcycles = (double)(stop_cycles - start_cycles) / (1UL << 20); - run_time += ((double)stop_time - start_time) / (CLOCKS_PER_SEC); - - printf("%s %d iterations %d MiB %d threads: %2.2f cpb %2.2f " - "Mcycles \n", argon2_type2string(type, 1), t_cost, - m_cost >> 10, thread_n, (float)delta / 1024, mcycles); - } - - printf("%2.4f seconds\n\n", run_time); - } - } -} - -int main() { - benchmark(); - return ARGON2_OK; -} diff --git a/pkg/urcrypt/argon2/src/blake2/blake2-impl.h b/pkg/urcrypt/argon2/src/blake2/blake2-impl.h deleted file mode 100644 index 241f0beb3..000000000 --- a/pkg/urcrypt/argon2/src/blake2/blake2-impl.h +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef PORTABLE_BLAKE2_IMPL_H -#define PORTABLE_BLAKE2_IMPL_H - -#include -#include - -#if defined(_MSC_VER) -#define BLAKE2_INLINE __inline -#elif defined(__GNUC__) || defined(__clang__) -#define BLAKE2_INLINE __inline__ -#else -#define BLAKE2_INLINE -#endif - -/* Argon2 Team - Begin Code */ -/* - Not an exhaustive list, but should cover the majority of modern platforms - Additionally, the code will always be correct---this is only a performance - tweak. -*/ -#if (defined(__BYTE_ORDER__) && \ - (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) || \ - defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || defined(__MIPSEL__) || \ - defined(__AARCH64EL__) || defined(__amd64__) || defined(__i386__) || \ - defined(_M_IX86) || defined(_M_X64) || defined(_M_AMD64) || \ - defined(_M_ARM) -#define NATIVE_LITTLE_ENDIAN -#endif -/* Argon2 Team - End Code */ - -static BLAKE2_INLINE uint32_t load32(const void *src) { -#if defined(NATIVE_LITTLE_ENDIAN) - uint32_t w; - memcpy(&w, src, sizeof w); - return w; -#else - const uint8_t *p = (const uint8_t *)src; - uint32_t w = *p++; - w |= (uint32_t)(*p++) << 8; - w |= (uint32_t)(*p++) << 16; - w |= (uint32_t)(*p++) << 24; - return w; -#endif -} - -static BLAKE2_INLINE uint64_t load64(const void *src) { -#if defined(NATIVE_LITTLE_ENDIAN) - uint64_t w; - memcpy(&w, src, sizeof w); - return w; -#else - const uint8_t *p = (const uint8_t *)src; - uint64_t w = *p++; - w |= (uint64_t)(*p++) << 8; - w |= (uint64_t)(*p++) << 16; - w |= (uint64_t)(*p++) << 24; - w |= (uint64_t)(*p++) << 32; - w |= (uint64_t)(*p++) << 40; - w |= (uint64_t)(*p++) << 48; - w |= (uint64_t)(*p++) << 56; - return w; -#endif -} - -static BLAKE2_INLINE void store32(void *dst, uint32_t w) { -#if defined(NATIVE_LITTLE_ENDIAN) - memcpy(dst, &w, sizeof w); -#else - uint8_t *p = (uint8_t *)dst; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; -#endif -} - -static BLAKE2_INLINE void store64(void *dst, uint64_t w) { -#if defined(NATIVE_LITTLE_ENDIAN) - memcpy(dst, &w, sizeof w); -#else - uint8_t *p = (uint8_t *)dst; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; -#endif -} - -static BLAKE2_INLINE uint64_t load48(const void *src) { - const uint8_t *p = (const uint8_t *)src; - uint64_t w = *p++; - w |= (uint64_t)(*p++) << 8; - w |= (uint64_t)(*p++) << 16; - w |= (uint64_t)(*p++) << 24; - w |= (uint64_t)(*p++) << 32; - w |= (uint64_t)(*p++) << 40; - return w; -} - -static BLAKE2_INLINE void store48(void *dst, uint64_t w) { - uint8_t *p = (uint8_t *)dst; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; - w >>= 8; - *p++ = (uint8_t)w; -} - -static BLAKE2_INLINE uint32_t rotr32(const uint32_t w, const unsigned c) { - return (w >> c) | (w << (32 - c)); -} - -static BLAKE2_INLINE uint64_t rotr64(const uint64_t w, const unsigned c) { - return (w >> c) | (w << (64 - c)); -} - -void clear_internal_memory(void *v, size_t n); - -#endif diff --git a/pkg/urcrypt/argon2/src/blake2/blake2.h b/pkg/urcrypt/argon2/src/blake2/blake2.h deleted file mode 100644 index 57276a776..000000000 --- a/pkg/urcrypt/argon2/src/blake2/blake2.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef PORTABLE_BLAKE2_H -#define PORTABLE_BLAKE2_H - -#include - -#if defined(__cplusplus) -extern "C" { -#endif - -enum blake2b_constant { - BLAKE2B_BLOCKBYTES = 128, - BLAKE2B_OUTBYTES = 64, - BLAKE2B_KEYBYTES = 64, - BLAKE2B_SALTBYTES = 16, - BLAKE2B_PERSONALBYTES = 16 -}; - -#pragma pack(push, 1) -typedef struct __blake2b_param { - uint8_t digest_length; /* 1 */ - uint8_t key_length; /* 2 */ - uint8_t fanout; /* 3 */ - uint8_t depth; /* 4 */ - uint32_t leaf_length; /* 8 */ - uint64_t node_offset; /* 16 */ - uint8_t node_depth; /* 17 */ - uint8_t inner_length; /* 18 */ - uint8_t reserved[14]; /* 32 */ - uint8_t salt[BLAKE2B_SALTBYTES]; /* 48 */ - uint8_t personal[BLAKE2B_PERSONALBYTES]; /* 64 */ -} blake2b_param; -#pragma pack(pop) - -typedef struct __blake2b_state { - uint64_t h[8]; - uint64_t t[2]; - uint64_t f[2]; - uint8_t buf[BLAKE2B_BLOCKBYTES]; - unsigned buflen; - unsigned outlen; - uint8_t last_node; -} blake2b_state; - -/* Ensure param structs have not been wrongly padded */ -/* Poor man's static_assert */ -enum { - blake2_size_check_0 = 1 / !!(CHAR_BIT == 8), - blake2_size_check_2 = - 1 / !!(sizeof(blake2b_param) == sizeof(uint64_t) * CHAR_BIT) -}; - -/* Streaming API */ -ARGON2_LOCAL int blake2b_init(blake2b_state *S, size_t outlen); -ARGON2_LOCAL int blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, - size_t keylen); -ARGON2_LOCAL int blake2b_init_param(blake2b_state *S, const blake2b_param *P); -ARGON2_LOCAL int blake2b_update(blake2b_state *S, const void *in, size_t inlen); -ARGON2_LOCAL int blake2b_final(blake2b_state *S, void *out, size_t outlen); - -/* Simple API */ -ARGON2_LOCAL int blake2b(void *out, size_t outlen, const void *in, size_t inlen, - const void *key, size_t keylen); - -/* Argon2 Team - Begin Code */ -ARGON2_LOCAL int blake2b_long(void *out, size_t outlen, const void *in, size_t inlen); -/* Argon2 Team - End Code */ - -#if defined(__cplusplus) -} -#endif - -#endif diff --git a/pkg/urcrypt/argon2/src/blake2/blake2b.c b/pkg/urcrypt/argon2/src/blake2/blake2b.c deleted file mode 100644 index ca05df598..000000000 --- a/pkg/urcrypt/argon2/src/blake2/blake2b.c +++ /dev/null @@ -1,390 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#include -#include -#include - -#include "blake2.h" -#include "blake2-impl.h" - -static const uint64_t blake2b_IV[8] = { - UINT64_C(0x6a09e667f3bcc908), UINT64_C(0xbb67ae8584caa73b), - UINT64_C(0x3c6ef372fe94f82b), UINT64_C(0xa54ff53a5f1d36f1), - UINT64_C(0x510e527fade682d1), UINT64_C(0x9b05688c2b3e6c1f), - UINT64_C(0x1f83d9abfb41bd6b), UINT64_C(0x5be0cd19137e2179)}; - -static const unsigned int blake2b_sigma[12][16] = { - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, - {11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4}, - {7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8}, - {9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13}, - {2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9}, - {12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11}, - {13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10}, - {6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5}, - {10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0}, - {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, - {14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3}, -}; - -static BLAKE2_INLINE void blake2b_set_lastnode(blake2b_state *S) { - S->f[1] = (uint64_t)-1; -} - -static BLAKE2_INLINE void blake2b_set_lastblock(blake2b_state *S) { - if (S->last_node) { - blake2b_set_lastnode(S); - } - S->f[0] = (uint64_t)-1; -} - -static BLAKE2_INLINE void blake2b_increment_counter(blake2b_state *S, - uint64_t inc) { - S->t[0] += inc; - S->t[1] += (S->t[0] < inc); -} - -static BLAKE2_INLINE void blake2b_invalidate_state(blake2b_state *S) { - clear_internal_memory(S, sizeof(*S)); /* wipe */ - blake2b_set_lastblock(S); /* invalidate for further use */ -} - -static BLAKE2_INLINE void blake2b_init0(blake2b_state *S) { - memset(S, 0, sizeof(*S)); - memcpy(S->h, blake2b_IV, sizeof(S->h)); -} - -int blake2b_init_param(blake2b_state *S, const blake2b_param *P) { - const unsigned char *p = (const unsigned char *)P; - unsigned int i; - - if (NULL == P || NULL == S) { - return -1; - } - - blake2b_init0(S); - /* IV XOR Parameter Block */ - for (i = 0; i < 8; ++i) { - S->h[i] ^= load64(&p[i * sizeof(S->h[i])]); - } - S->outlen = P->digest_length; - return 0; -} - -/* Sequential blake2b initialization */ -int blake2b_init(blake2b_state *S, size_t outlen) { - blake2b_param P; - - if (S == NULL) { - return -1; - } - - if ((outlen == 0) || (outlen > BLAKE2B_OUTBYTES)) { - blake2b_invalidate_state(S); - return -1; - } - - /* Setup Parameter Block for unkeyed BLAKE2 */ - P.digest_length = (uint8_t)outlen; - P.key_length = 0; - P.fanout = 1; - P.depth = 1; - P.leaf_length = 0; - P.node_offset = 0; - P.node_depth = 0; - P.inner_length = 0; - memset(P.reserved, 0, sizeof(P.reserved)); - memset(P.salt, 0, sizeof(P.salt)); - memset(P.personal, 0, sizeof(P.personal)); - - return blake2b_init_param(S, &P); -} - -int blake2b_init_key(blake2b_state *S, size_t outlen, const void *key, - size_t keylen) { - blake2b_param P; - - if (S == NULL) { - return -1; - } - - if ((outlen == 0) || (outlen > BLAKE2B_OUTBYTES)) { - blake2b_invalidate_state(S); - return -1; - } - - if ((key == 0) || (keylen == 0) || (keylen > BLAKE2B_KEYBYTES)) { - blake2b_invalidate_state(S); - return -1; - } - - /* Setup Parameter Block for keyed BLAKE2 */ - P.digest_length = (uint8_t)outlen; - P.key_length = (uint8_t)keylen; - P.fanout = 1; - P.depth = 1; - P.leaf_length = 0; - P.node_offset = 0; - P.node_depth = 0; - P.inner_length = 0; - memset(P.reserved, 0, sizeof(P.reserved)); - memset(P.salt, 0, sizeof(P.salt)); - memset(P.personal, 0, sizeof(P.personal)); - - if (blake2b_init_param(S, &P) < 0) { - blake2b_invalidate_state(S); - return -1; - } - - { - uint8_t block[BLAKE2B_BLOCKBYTES]; - memset(block, 0, BLAKE2B_BLOCKBYTES); - memcpy(block, key, keylen); - blake2b_update(S, block, BLAKE2B_BLOCKBYTES); - /* Burn the key from stack */ - clear_internal_memory(block, BLAKE2B_BLOCKBYTES); - } - return 0; -} - -static void blake2b_compress(blake2b_state *S, const uint8_t *block) { - uint64_t m[16]; - uint64_t v[16]; - unsigned int i, r; - - for (i = 0; i < 16; ++i) { - m[i] = load64(block + i * sizeof(m[i])); - } - - for (i = 0; i < 8; ++i) { - v[i] = S->h[i]; - } - - v[8] = blake2b_IV[0]; - v[9] = blake2b_IV[1]; - v[10] = blake2b_IV[2]; - v[11] = blake2b_IV[3]; - v[12] = blake2b_IV[4] ^ S->t[0]; - v[13] = blake2b_IV[5] ^ S->t[1]; - v[14] = blake2b_IV[6] ^ S->f[0]; - v[15] = blake2b_IV[7] ^ S->f[1]; - -#define G(r, i, a, b, c, d) \ - do { \ - a = a + b + m[blake2b_sigma[r][2 * i + 0]]; \ - d = rotr64(d ^ a, 32); \ - c = c + d; \ - b = rotr64(b ^ c, 24); \ - a = a + b + m[blake2b_sigma[r][2 * i + 1]]; \ - d = rotr64(d ^ a, 16); \ - c = c + d; \ - b = rotr64(b ^ c, 63); \ - } while ((void)0, 0) - -#define ROUND(r) \ - do { \ - G(r, 0, v[0], v[4], v[8], v[12]); \ - G(r, 1, v[1], v[5], v[9], v[13]); \ - G(r, 2, v[2], v[6], v[10], v[14]); \ - G(r, 3, v[3], v[7], v[11], v[15]); \ - G(r, 4, v[0], v[5], v[10], v[15]); \ - G(r, 5, v[1], v[6], v[11], v[12]); \ - G(r, 6, v[2], v[7], v[8], v[13]); \ - G(r, 7, v[3], v[4], v[9], v[14]); \ - } while ((void)0, 0) - - for (r = 0; r < 12; ++r) { - ROUND(r); - } - - for (i = 0; i < 8; ++i) { - S->h[i] = S->h[i] ^ v[i] ^ v[i + 8]; - } - -#undef G -#undef ROUND -} - -int blake2b_update(blake2b_state *S, const void *in, size_t inlen) { - const uint8_t *pin = (const uint8_t *)in; - - if (inlen == 0) { - return 0; - } - - /* Sanity check */ - if (S == NULL || in == NULL) { - return -1; - } - - /* Is this a reused state? */ - if (S->f[0] != 0) { - return -1; - } - - if (S->buflen + inlen > BLAKE2B_BLOCKBYTES) { - /* Complete current block */ - size_t left = S->buflen; - size_t fill = BLAKE2B_BLOCKBYTES - left; - memcpy(&S->buf[left], pin, fill); - blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); - blake2b_compress(S, S->buf); - S->buflen = 0; - inlen -= fill; - pin += fill; - /* Avoid buffer copies when possible */ - while (inlen > BLAKE2B_BLOCKBYTES) { - blake2b_increment_counter(S, BLAKE2B_BLOCKBYTES); - blake2b_compress(S, pin); - inlen -= BLAKE2B_BLOCKBYTES; - pin += BLAKE2B_BLOCKBYTES; - } - } - memcpy(&S->buf[S->buflen], pin, inlen); - S->buflen += (unsigned int)inlen; - return 0; -} - -int blake2b_final(blake2b_state *S, void *out, size_t outlen) { - uint8_t buffer[BLAKE2B_OUTBYTES] = {0}; - unsigned int i; - - /* Sanity checks */ - if (S == NULL || out == NULL || outlen < S->outlen) { - return -1; - } - - /* Is this a reused state? */ - if (S->f[0] != 0) { - return -1; - } - - blake2b_increment_counter(S, S->buflen); - blake2b_set_lastblock(S); - memset(&S->buf[S->buflen], 0, BLAKE2B_BLOCKBYTES - S->buflen); /* Padding */ - blake2b_compress(S, S->buf); - - for (i = 0; i < 8; ++i) { /* Output full hash to temp buffer */ - store64(buffer + sizeof(S->h[i]) * i, S->h[i]); - } - - memcpy(out, buffer, S->outlen); - clear_internal_memory(buffer, sizeof(buffer)); - clear_internal_memory(S->buf, sizeof(S->buf)); - clear_internal_memory(S->h, sizeof(S->h)); - return 0; -} - -int blake2b(void *out, size_t outlen, const void *in, size_t inlen, - const void *key, size_t keylen) { - blake2b_state S; - int ret = -1; - - /* Verify parameters */ - if (NULL == in && inlen > 0) { - goto fail; - } - - if (NULL == out || outlen == 0 || outlen > BLAKE2B_OUTBYTES) { - goto fail; - } - - if ((NULL == key && keylen > 0) || keylen > BLAKE2B_KEYBYTES) { - goto fail; - } - - if (keylen > 0) { - if (blake2b_init_key(&S, outlen, key, keylen) < 0) { - goto fail; - } - } else { - if (blake2b_init(&S, outlen) < 0) { - goto fail; - } - } - - if (blake2b_update(&S, in, inlen) < 0) { - goto fail; - } - ret = blake2b_final(&S, out, outlen); - -fail: - clear_internal_memory(&S, sizeof(S)); - return ret; -} - -/* Argon2 Team - Begin Code */ -int blake2b_long(void *pout, size_t outlen, const void *in, size_t inlen) { - uint8_t *out = (uint8_t *)pout; - blake2b_state blake_state; - uint8_t outlen_bytes[sizeof(uint32_t)] = {0}; - int ret = -1; - - if (outlen > UINT32_MAX) { - goto fail; - } - - /* Ensure little-endian byte order! */ - store32(outlen_bytes, (uint32_t)outlen); - -#define TRY(statement) \ - do { \ - ret = statement; \ - if (ret < 0) { \ - goto fail; \ - } \ - } while ((void)0, 0) - - if (outlen <= BLAKE2B_OUTBYTES) { - TRY(blake2b_init(&blake_state, outlen)); - TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes))); - TRY(blake2b_update(&blake_state, in, inlen)); - TRY(blake2b_final(&blake_state, out, outlen)); - } else { - uint32_t toproduce; - uint8_t out_buffer[BLAKE2B_OUTBYTES]; - uint8_t in_buffer[BLAKE2B_OUTBYTES]; - TRY(blake2b_init(&blake_state, BLAKE2B_OUTBYTES)); - TRY(blake2b_update(&blake_state, outlen_bytes, sizeof(outlen_bytes))); - TRY(blake2b_update(&blake_state, in, inlen)); - TRY(blake2b_final(&blake_state, out_buffer, BLAKE2B_OUTBYTES)); - memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2); - out += BLAKE2B_OUTBYTES / 2; - toproduce = (uint32_t)outlen - BLAKE2B_OUTBYTES / 2; - - while (toproduce > BLAKE2B_OUTBYTES) { - memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES); - TRY(blake2b(out_buffer, BLAKE2B_OUTBYTES, in_buffer, - BLAKE2B_OUTBYTES, NULL, 0)); - memcpy(out, out_buffer, BLAKE2B_OUTBYTES / 2); - out += BLAKE2B_OUTBYTES / 2; - toproduce -= BLAKE2B_OUTBYTES / 2; - } - - memcpy(in_buffer, out_buffer, BLAKE2B_OUTBYTES); - TRY(blake2b(out_buffer, toproduce, in_buffer, BLAKE2B_OUTBYTES, NULL, - 0)); - memcpy(out, out_buffer, toproduce); - } -fail: - clear_internal_memory(&blake_state, sizeof(blake_state)); - return ret; -#undef TRY -} -/* Argon2 Team - End Code */ diff --git a/pkg/urcrypt/argon2/src/blake2/blamka-round-opt.h b/pkg/urcrypt/argon2/src/blake2/blamka-round-opt.h deleted file mode 100644 index 2c8942e31..000000000 --- a/pkg/urcrypt/argon2/src/blake2/blamka-round-opt.h +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef BLAKE_ROUND_MKA_OPT_H -#define BLAKE_ROUND_MKA_OPT_H - -#include "blake2-impl.h" - -#include -#if defined(__SSSE3__) -#include /* for _mm_shuffle_epi8 and _mm_alignr_epi8 */ -#endif - -#if defined(__XOP__) && (defined(__GNUC__) || defined(__clang__)) -#include -#endif - -#if !defined(__AVX512F__) -#if !defined(__AVX2__) -#if !defined(__XOP__) -#if defined(__SSSE3__) -#define r16 \ - (_mm_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) -#define r24 \ - (_mm_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) -#define _mm_roti_epi64(x, c) \ - (-(c) == 32) \ - ? _mm_shuffle_epi32((x), _MM_SHUFFLE(2, 3, 0, 1)) \ - : (-(c) == 24) \ - ? _mm_shuffle_epi8((x), r24) \ - : (-(c) == 16) \ - ? _mm_shuffle_epi8((x), r16) \ - : (-(c) == 63) \ - ? _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ - _mm_add_epi64((x), (x))) \ - : _mm_xor_si128(_mm_srli_epi64((x), -(c)), \ - _mm_slli_epi64((x), 64 - (-(c)))) -#else /* defined(__SSE2__) */ -#define _mm_roti_epi64(r, c) \ - _mm_xor_si128(_mm_srli_epi64((r), -(c)), _mm_slli_epi64((r), 64 - (-(c)))) -#endif -#else -#endif - -static BLAKE2_INLINE __m128i fBlaMka(__m128i x, __m128i y) { - const __m128i z = _mm_mul_epu32(x, y); - return _mm_add_epi64(_mm_add_epi64(x, y), _mm_add_epi64(z, z)); -} - -#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - A0 = fBlaMka(A0, B0); \ - A1 = fBlaMka(A1, B1); \ - \ - D0 = _mm_xor_si128(D0, A0); \ - D1 = _mm_xor_si128(D1, A1); \ - \ - D0 = _mm_roti_epi64(D0, -32); \ - D1 = _mm_roti_epi64(D1, -32); \ - \ - C0 = fBlaMka(C0, D0); \ - C1 = fBlaMka(C1, D1); \ - \ - B0 = _mm_xor_si128(B0, C0); \ - B1 = _mm_xor_si128(B1, C1); \ - \ - B0 = _mm_roti_epi64(B0, -24); \ - B1 = _mm_roti_epi64(B1, -24); \ - } while ((void)0, 0) - -#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - A0 = fBlaMka(A0, B0); \ - A1 = fBlaMka(A1, B1); \ - \ - D0 = _mm_xor_si128(D0, A0); \ - D1 = _mm_xor_si128(D1, A1); \ - \ - D0 = _mm_roti_epi64(D0, -16); \ - D1 = _mm_roti_epi64(D1, -16); \ - \ - C0 = fBlaMka(C0, D0); \ - C1 = fBlaMka(C1, D1); \ - \ - B0 = _mm_xor_si128(B0, C0); \ - B1 = _mm_xor_si128(B1, C1); \ - \ - B0 = _mm_roti_epi64(B0, -63); \ - B1 = _mm_roti_epi64(B1, -63); \ - } while ((void)0, 0) - -#if defined(__SSSE3__) -#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - __m128i t0 = _mm_alignr_epi8(B1, B0, 8); \ - __m128i t1 = _mm_alignr_epi8(B0, B1, 8); \ - B0 = t0; \ - B1 = t1; \ - \ - t0 = C0; \ - C0 = C1; \ - C1 = t0; \ - \ - t0 = _mm_alignr_epi8(D1, D0, 8); \ - t1 = _mm_alignr_epi8(D0, D1, 8); \ - D0 = t1; \ - D1 = t0; \ - } while ((void)0, 0) - -#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - __m128i t0 = _mm_alignr_epi8(B0, B1, 8); \ - __m128i t1 = _mm_alignr_epi8(B1, B0, 8); \ - B0 = t0; \ - B1 = t1; \ - \ - t0 = C0; \ - C0 = C1; \ - C1 = t0; \ - \ - t0 = _mm_alignr_epi8(D0, D1, 8); \ - t1 = _mm_alignr_epi8(D1, D0, 8); \ - D0 = t1; \ - D1 = t0; \ - } while ((void)0, 0) -#else /* SSE2 */ -#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - __m128i t0 = D0; \ - __m128i t1 = B0; \ - D0 = C0; \ - C0 = C1; \ - C1 = D0; \ - D0 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t0, t0)); \ - D1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(D1, D1)); \ - B0 = _mm_unpackhi_epi64(B0, _mm_unpacklo_epi64(B1, B1)); \ - B1 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(t1, t1)); \ - } while ((void)0, 0) - -#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - __m128i t0, t1; \ - t0 = C0; \ - C0 = C1; \ - C1 = t0; \ - t0 = B0; \ - t1 = D0; \ - B0 = _mm_unpackhi_epi64(B1, _mm_unpacklo_epi64(B0, B0)); \ - B1 = _mm_unpackhi_epi64(t0, _mm_unpacklo_epi64(B1, B1)); \ - D0 = _mm_unpackhi_epi64(D0, _mm_unpacklo_epi64(D1, D1)); \ - D1 = _mm_unpackhi_epi64(D1, _mm_unpacklo_epi64(t1, t1)); \ - } while ((void)0, 0) -#endif - -#define BLAKE2_ROUND(A0, A1, B0, B1, C0, C1, D0, D1) \ - do { \ - G1(A0, B0, C0, D0, A1, B1, C1, D1); \ - G2(A0, B0, C0, D0, A1, B1, C1, D1); \ - \ - DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ - \ - G1(A0, B0, C0, D0, A1, B1, C1, D1); \ - G2(A0, B0, C0, D0, A1, B1, C1, D1); \ - \ - UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ - } while ((void)0, 0) -#else /* __AVX2__ */ - -#include - -#define rotr32(x) _mm256_shuffle_epi32(x, _MM_SHUFFLE(2, 3, 0, 1)) -#define rotr24(x) _mm256_shuffle_epi8(x, _mm256_setr_epi8(3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10, 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10)) -#define rotr16(x) _mm256_shuffle_epi8(x, _mm256_setr_epi8(2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9, 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9)) -#define rotr63(x) _mm256_xor_si256(_mm256_srli_epi64((x), 63), _mm256_add_epi64((x), (x))) - -#define G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - do { \ - __m256i ml = _mm256_mul_epu32(A0, B0); \ - ml = _mm256_add_epi64(ml, ml); \ - A0 = _mm256_add_epi64(A0, _mm256_add_epi64(B0, ml)); \ - D0 = _mm256_xor_si256(D0, A0); \ - D0 = rotr32(D0); \ - \ - ml = _mm256_mul_epu32(C0, D0); \ - ml = _mm256_add_epi64(ml, ml); \ - C0 = _mm256_add_epi64(C0, _mm256_add_epi64(D0, ml)); \ - \ - B0 = _mm256_xor_si256(B0, C0); \ - B0 = rotr24(B0); \ - \ - ml = _mm256_mul_epu32(A1, B1); \ - ml = _mm256_add_epi64(ml, ml); \ - A1 = _mm256_add_epi64(A1, _mm256_add_epi64(B1, ml)); \ - D1 = _mm256_xor_si256(D1, A1); \ - D1 = rotr32(D1); \ - \ - ml = _mm256_mul_epu32(C1, D1); \ - ml = _mm256_add_epi64(ml, ml); \ - C1 = _mm256_add_epi64(C1, _mm256_add_epi64(D1, ml)); \ - \ - B1 = _mm256_xor_si256(B1, C1); \ - B1 = rotr24(B1); \ - } while((void)0, 0); - -#define G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - do { \ - __m256i ml = _mm256_mul_epu32(A0, B0); \ - ml = _mm256_add_epi64(ml, ml); \ - A0 = _mm256_add_epi64(A0, _mm256_add_epi64(B0, ml)); \ - D0 = _mm256_xor_si256(D0, A0); \ - D0 = rotr16(D0); \ - \ - ml = _mm256_mul_epu32(C0, D0); \ - ml = _mm256_add_epi64(ml, ml); \ - C0 = _mm256_add_epi64(C0, _mm256_add_epi64(D0, ml)); \ - B0 = _mm256_xor_si256(B0, C0); \ - B0 = rotr63(B0); \ - \ - ml = _mm256_mul_epu32(A1, B1); \ - ml = _mm256_add_epi64(ml, ml); \ - A1 = _mm256_add_epi64(A1, _mm256_add_epi64(B1, ml)); \ - D1 = _mm256_xor_si256(D1, A1); \ - D1 = rotr16(D1); \ - \ - ml = _mm256_mul_epu32(C1, D1); \ - ml = _mm256_add_epi64(ml, ml); \ - C1 = _mm256_add_epi64(C1, _mm256_add_epi64(D1, ml)); \ - B1 = _mm256_xor_si256(B1, C1); \ - B1 = rotr63(B1); \ - } while((void)0, 0); - -#define DIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \ - C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ - D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \ - \ - B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \ - C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ - D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \ - } while((void)0, 0); - -#define DIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ - do { \ - __m256i tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \ - __m256i tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \ - B1 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ - B0 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ - \ - tmp1 = C0; \ - C0 = C1; \ - C1 = tmp1; \ - \ - tmp1 = _mm256_blend_epi32(D0, D1, 0xCC); \ - tmp2 = _mm256_blend_epi32(D0, D1, 0x33); \ - D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ - D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ - } while(0); - -#define UNDIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - B0 = _mm256_permute4x64_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \ - C0 = _mm256_permute4x64_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ - D0 = _mm256_permute4x64_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \ - \ - B1 = _mm256_permute4x64_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \ - C1 = _mm256_permute4x64_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ - D1 = _mm256_permute4x64_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \ - } while((void)0, 0); - -#define UNDIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ - do { \ - __m256i tmp1 = _mm256_blend_epi32(B0, B1, 0xCC); \ - __m256i tmp2 = _mm256_blend_epi32(B0, B1, 0x33); \ - B0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ - B1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ - \ - tmp1 = C0; \ - C0 = C1; \ - C1 = tmp1; \ - \ - tmp1 = _mm256_blend_epi32(D0, D1, 0x33); \ - tmp2 = _mm256_blend_epi32(D0, D1, 0xCC); \ - D0 = _mm256_permute4x64_epi64(tmp1, _MM_SHUFFLE(2,3,0,1)); \ - D1 = _mm256_permute4x64_epi64(tmp2, _MM_SHUFFLE(2,3,0,1)); \ - } while((void)0, 0); - -#define BLAKE2_ROUND_1(A0, A1, B0, B1, C0, C1, D0, D1) \ - do{ \ - G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - \ - DIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ - \ - G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - \ - UNDIAGONALIZE_1(A0, B0, C0, D0, A1, B1, C1, D1) \ - } while((void)0, 0); - -#define BLAKE2_ROUND_2(A0, A1, B0, B1, C0, C1, D0, D1) \ - do{ \ - G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - \ - DIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ - \ - G1_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - G2_AVX2(A0, A1, B0, B1, C0, C1, D0, D1) \ - \ - UNDIAGONALIZE_2(A0, A1, B0, B1, C0, C1, D0, D1) \ - } while((void)0, 0); - -#endif /* __AVX2__ */ - -#else /* __AVX512F__ */ - -#include - -#define ror64(x, n) _mm512_ror_epi64((x), (n)) - -static __m512i muladd(__m512i x, __m512i y) -{ - __m512i z = _mm512_mul_epu32(x, y); - return _mm512_add_epi64(_mm512_add_epi64(x, y), _mm512_add_epi64(z, z)); -} - -#define G1(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - A0 = muladd(A0, B0); \ - A1 = muladd(A1, B1); \ -\ - D0 = _mm512_xor_si512(D0, A0); \ - D1 = _mm512_xor_si512(D1, A1); \ -\ - D0 = ror64(D0, 32); \ - D1 = ror64(D1, 32); \ -\ - C0 = muladd(C0, D0); \ - C1 = muladd(C1, D1); \ -\ - B0 = _mm512_xor_si512(B0, C0); \ - B1 = _mm512_xor_si512(B1, C1); \ -\ - B0 = ror64(B0, 24); \ - B1 = ror64(B1, 24); \ - } while ((void)0, 0) - -#define G2(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - A0 = muladd(A0, B0); \ - A1 = muladd(A1, B1); \ -\ - D0 = _mm512_xor_si512(D0, A0); \ - D1 = _mm512_xor_si512(D1, A1); \ -\ - D0 = ror64(D0, 16); \ - D1 = ror64(D1, 16); \ -\ - C0 = muladd(C0, D0); \ - C1 = muladd(C1, D1); \ -\ - B0 = _mm512_xor_si512(B0, C0); \ - B1 = _mm512_xor_si512(B1, C1); \ -\ - B0 = ror64(B0, 63); \ - B1 = ror64(B1, 63); \ - } while ((void)0, 0) - -#define DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(0, 3, 2, 1)); \ - B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(0, 3, 2, 1)); \ -\ - C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ - C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ -\ - D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(2, 1, 0, 3)); \ - D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(2, 1, 0, 3)); \ - } while ((void)0, 0) - -#define UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - B0 = _mm512_permutex_epi64(B0, _MM_SHUFFLE(2, 1, 0, 3)); \ - B1 = _mm512_permutex_epi64(B1, _MM_SHUFFLE(2, 1, 0, 3)); \ -\ - C0 = _mm512_permutex_epi64(C0, _MM_SHUFFLE(1, 0, 3, 2)); \ - C1 = _mm512_permutex_epi64(C1, _MM_SHUFFLE(1, 0, 3, 2)); \ -\ - D0 = _mm512_permutex_epi64(D0, _MM_SHUFFLE(0, 3, 2, 1)); \ - D1 = _mm512_permutex_epi64(D1, _MM_SHUFFLE(0, 3, 2, 1)); \ - } while ((void)0, 0) - -#define BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1) \ - do { \ - G1(A0, B0, C0, D0, A1, B1, C1, D1); \ - G2(A0, B0, C0, D0, A1, B1, C1, D1); \ -\ - DIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ -\ - G1(A0, B0, C0, D0, A1, B1, C1, D1); \ - G2(A0, B0, C0, D0, A1, B1, C1, D1); \ -\ - UNDIAGONALIZE(A0, B0, C0, D0, A1, B1, C1, D1); \ - } while ((void)0, 0) - -#define SWAP_HALVES(A0, A1) \ - do { \ - __m512i t0, t1; \ - t0 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(1, 0, 1, 0)); \ - t1 = _mm512_shuffle_i64x2(A0, A1, _MM_SHUFFLE(3, 2, 3, 2)); \ - A0 = t0; \ - A1 = t1; \ - } while((void)0, 0) - -#define SWAP_QUARTERS(A0, A1) \ - do { \ - SWAP_HALVES(A0, A1); \ - A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \ - A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \ - } while((void)0, 0) - -#define UNSWAP_QUARTERS(A0, A1) \ - do { \ - A0 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A0); \ - A1 = _mm512_permutexvar_epi64(_mm512_setr_epi64(0, 1, 4, 5, 2, 3, 6, 7), A1); \ - SWAP_HALVES(A0, A1); \ - } while((void)0, 0) - -#define BLAKE2_ROUND_1(A0, C0, B0, D0, A1, C1, B1, D1) \ - do { \ - SWAP_HALVES(A0, B0); \ - SWAP_HALVES(C0, D0); \ - SWAP_HALVES(A1, B1); \ - SWAP_HALVES(C1, D1); \ - BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \ - SWAP_HALVES(A0, B0); \ - SWAP_HALVES(C0, D0); \ - SWAP_HALVES(A1, B1); \ - SWAP_HALVES(C1, D1); \ - } while ((void)0, 0) - -#define BLAKE2_ROUND_2(A0, A1, B0, B1, C0, C1, D0, D1) \ - do { \ - SWAP_QUARTERS(A0, A1); \ - SWAP_QUARTERS(B0, B1); \ - SWAP_QUARTERS(C0, C1); \ - SWAP_QUARTERS(D0, D1); \ - BLAKE2_ROUND(A0, B0, C0, D0, A1, B1, C1, D1); \ - UNSWAP_QUARTERS(A0, A1); \ - UNSWAP_QUARTERS(B0, B1); \ - UNSWAP_QUARTERS(C0, C1); \ - UNSWAP_QUARTERS(D0, D1); \ - } while ((void)0, 0) - -#endif /* __AVX512F__ */ -#endif /* BLAKE_ROUND_MKA_OPT_H */ diff --git a/pkg/urcrypt/argon2/src/blake2/blamka-round-ref.h b/pkg/urcrypt/argon2/src/blake2/blamka-round-ref.h deleted file mode 100644 index b8f2cf471..000000000 --- a/pkg/urcrypt/argon2/src/blake2/blamka-round-ref.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef BLAKE_ROUND_MKA_H -#define BLAKE_ROUND_MKA_H - -#include "blake2.h" -#include "blake2-impl.h" - -/* designed by the Lyra PHC team */ -static BLAKE2_INLINE uint64_t fBlaMka(uint64_t x, uint64_t y) { - const uint64_t m = UINT64_C(0xFFFFFFFF); - const uint64_t xy = (x & m) * (y & m); - return x + y + 2 * xy; -} - -#define G(a, b, c, d) \ - do { \ - a = fBlaMka(a, b); \ - d = rotr64(d ^ a, 32); \ - c = fBlaMka(c, d); \ - b = rotr64(b ^ c, 24); \ - a = fBlaMka(a, b); \ - d = rotr64(d ^ a, 16); \ - c = fBlaMka(c, d); \ - b = rotr64(b ^ c, 63); \ - } while ((void)0, 0) - -#define BLAKE2_ROUND_NOMSG(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, \ - v12, v13, v14, v15) \ - do { \ - G(v0, v4, v8, v12); \ - G(v1, v5, v9, v13); \ - G(v2, v6, v10, v14); \ - G(v3, v7, v11, v15); \ - G(v0, v5, v10, v15); \ - G(v1, v6, v11, v12); \ - G(v2, v7, v8, v13); \ - G(v3, v4, v9, v14); \ - } while ((void)0, 0) - -#endif diff --git a/pkg/urcrypt/argon2/src/core.c b/pkg/urcrypt/argon2/src/core.c deleted file mode 100644 index 56dbb07f3..000000000 --- a/pkg/urcrypt/argon2/src/core.c +++ /dev/null @@ -1,670 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -/*For memory wiping*/ -#ifdef _MSC_VER -#include -#include /* For SecureZeroMemory */ -#endif -#if defined __STDC_LIB_EXT1__ -#define __STDC_WANT_LIB_EXT1__ 1 -#endif -#define VC_GE_2005(version) (version >= 1400) - -#include -#include -#include - -#include "core.h" -#include "thread.h" -#include "blake2/blake2.h" -#include "blake2/blake2-impl.h" - -#ifdef GENKAT -#include "genkat.h" -#endif - -#if defined(__clang__) -#if __has_attribute(optnone) -#define NOT_OPTIMIZED __attribute__((optnone)) -#endif -#elif defined(__GNUC__) -#define GCC_VERSION \ - (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) -#if GCC_VERSION >= 40400 -#define NOT_OPTIMIZED __attribute__((optimize("O0"))) -#endif -#endif -#ifndef NOT_OPTIMIZED -#define NOT_OPTIMIZED -#endif - -/***************Instance and Position constructors**********/ -void init_block_value(block *b, uint8_t in) { memset(b->v, in, sizeof(b->v)); } - -void copy_block(block *dst, const block *src) { - memcpy(dst->v, src->v, sizeof(uint64_t) * ARGON2_QWORDS_IN_BLOCK); -} - -void xor_block(block *dst, const block *src) { - int i; - for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { - dst->v[i] ^= src->v[i]; - } -} - -static void load_block(block *dst, const void *input) { - unsigned i; - for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { - dst->v[i] = load64((const uint8_t *)input + i * sizeof(dst->v[i])); - } -} - -static void store_block(void *output, const block *src) { - unsigned i; - for (i = 0; i < ARGON2_QWORDS_IN_BLOCK; ++i) { - store64((uint8_t *)output + i * sizeof(src->v[i]), src->v[i]); - } -} - -/***************Memory functions*****************/ - -int allocate_memory(const argon2_context *context, uint8_t **memory, - size_t num, size_t size) { - size_t memory_size = num*size; - if (memory == NULL) { - return ARGON2_MEMORY_ALLOCATION_ERROR; - } - - /* 1. Check for multiplication overflow */ - if (size != 0 && memory_size / size != num) { - return ARGON2_MEMORY_ALLOCATION_ERROR; - } - - /* 2. Try to allocate with appropriate allocator */ -#ifdef ARGON2_JS - *memory = malloc(memory_size); -#else - if (context->allocate_cbk) { - (context->allocate_cbk)(memory, memory_size); - } else { - *memory = malloc(memory_size); - } -#endif - - if (*memory == NULL) { - return ARGON2_MEMORY_ALLOCATION_ERROR; - } - - return ARGON2_OK; -} - -void free_memory(const argon2_context *context, uint8_t *memory, - size_t num, size_t size) { - size_t memory_size = num*size; - clear_internal_memory(memory, memory_size); -#ifdef ARGON2_JS - free(memory); -#else - if (context->free_cbk) { - (context->free_cbk)(memory, memory_size); - } else { - free(memory); - } -#endif -} - -void NOT_OPTIMIZED secure_wipe_memory(void *v, size_t n) { -#if defined(_MSC_VER) && VC_GE_2005(_MSC_VER) - SecureZeroMemory(v, n); -#elif defined memset_s - memset_s(v, n, 0, n); -#elif defined(__OpenBSD__) - explicit_bzero(v, n); -#elif defined(ARGON2_JS) - memset(v, 0, n); -#else - static void *(*const volatile memset_sec)(void *, int, size_t) = &memset; - memset_sec(v, 0, n); -#endif -} - -/* Memory clear flag defaults to true. */ -int FLAG_clear_internal_memory = 1; -void clear_internal_memory(void *v, size_t n) { - if (FLAG_clear_internal_memory && v) { - secure_wipe_memory(v, n); - } -} - -void finalize(const argon2_context *context, argon2_instance_t *instance) { - if (context != NULL && instance != NULL) { - block blockhash; - uint32_t l; - - copy_block(&blockhash, instance->memory + instance->lane_length - 1); - - /* XOR the last blocks */ - for (l = 1; l < instance->lanes; ++l) { - uint32_t last_block_in_lane = - l * instance->lane_length + (instance->lane_length - 1); - xor_block(&blockhash, instance->memory + last_block_in_lane); - } - - /* Hash the result */ - { - uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE]; - store_block(blockhash_bytes, &blockhash); - blake2b_long(context->out, context->outlen, blockhash_bytes, - ARGON2_BLOCK_SIZE); - /* clear blockhash and blockhash_bytes */ - clear_internal_memory(blockhash.v, ARGON2_BLOCK_SIZE); - clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE); - } - -#ifdef GENKAT - print_tag(context->out, context->outlen); -#endif - - free_memory(context, (uint8_t *)instance->memory, - instance->memory_blocks, sizeof(block)); - } -} - -uint32_t index_alpha(const argon2_instance_t *instance, - const argon2_position_t *position, uint32_t pseudo_rand, - int same_lane) { - /* - * Pass 0: - * This lane : all already finished segments plus already constructed - * blocks in this segment - * Other lanes : all already finished segments - * Pass 1+: - * This lane : (SYNC_POINTS - 1) last segments plus already constructed - * blocks in this segment - * Other lanes : (SYNC_POINTS - 1) last segments - */ - uint32_t reference_area_size; - uint64_t relative_position; - uint32_t start_position, absolute_position; - - if (0 == position->pass) { - /* First pass */ - if (0 == position->slice) { - /* First slice */ - reference_area_size = - position->index - 1; /* all but the previous */ - } else { - if (same_lane) { - /* The same lane => add current segment */ - reference_area_size = - position->slice * instance->segment_length + - position->index - 1; - } else { - reference_area_size = - position->slice * instance->segment_length + - ((position->index == 0) ? (-1) : 0); - } - } - } else { - /* Second pass */ - if (same_lane) { - reference_area_size = instance->lane_length - - instance->segment_length + position->index - - 1; - } else { - reference_area_size = instance->lane_length - - instance->segment_length + - ((position->index == 0) ? (-1) : 0); - } - } - - /* 1.2.4. Mapping pseudo_rand to 0.. and produce - * relative position */ - relative_position = pseudo_rand; - relative_position = relative_position * relative_position >> 32; - relative_position = reference_area_size - 1 - - (reference_area_size * relative_position >> 32); - - /* 1.2.5 Computing starting position */ - start_position = 0; - - if (0 != position->pass) { - start_position = (position->slice == ARGON2_SYNC_POINTS - 1) - ? 0 - : (position->slice + 1) * instance->segment_length; - } - - /* 1.2.6. Computing absolute position */ - absolute_position = (start_position + relative_position) % - instance->lane_length; /* absolute position */ - return absolute_position; -} - -/* Single-threaded version for p=1 case */ -static int fill_memory_blocks_st(argon2_instance_t *instance) { - uint32_t r, s, l; - - for (r = 0; r < instance->passes; ++r) { - for (s = 0; s < ARGON2_SYNC_POINTS; ++s) { - for (l = 0; l < instance->lanes; ++l) { - argon2_position_t position = {r, l, (uint8_t)s, 0}; - fill_segment(instance, position); - } - } -#ifdef GENKAT - internal_kat(instance, r); /* Print all memory blocks */ -#endif - } - return ARGON2_OK; -} - -#if !defined(ARGON2_NO_THREADS) - -#ifdef _WIN32 -static unsigned __stdcall fill_segment_thr(void *thread_data) -#else -static void *fill_segment_thr(void *thread_data) -#endif -{ - argon2_thread_data *my_data = thread_data; - fill_segment(my_data->instance_ptr, my_data->pos); - argon2_thread_exit(); - return 0; -} - -/* Multi-threaded version for p > 1 case */ -static int fill_memory_blocks_mt(argon2_instance_t *instance) { - uint32_t r, s; - argon2_thread_handle_t *thread = NULL; - argon2_thread_data *thr_data = NULL; - int rc = ARGON2_OK; - - allocate_fptr alc = instance->context_ptr->allocate_cbk; - deallocate_fptr dlc = instance->context_ptr->free_cbk; - uint32_t las = instance->lanes * sizeof(argon2_thread_handle_t); - - /* 1. Allocating space for threads */ - if (alc != NULL) { - alc((uint8_t **)&thread, las); - memset(thread, 0, las); - } else { - thread = calloc(instance->lanes, sizeof(argon2_thread_handle_t)); - } - if (thread == NULL) { - rc = ARGON2_MEMORY_ALLOCATION_ERROR; - goto fail; - } - - if (alc != NULL) { - alc((uint8_t **)&thr_data, las); - memset(thr_data, 0, las); - } else { - thr_data = calloc(instance->lanes, sizeof(argon2_thread_handle_t)); - } - if (thr_data == NULL) { - rc = ARGON2_MEMORY_ALLOCATION_ERROR; - goto fail; - } - - for (r = 0; r < instance->passes; ++r) { - for (s = 0; s < ARGON2_SYNC_POINTS; ++s) { - uint32_t l; - - /* 2. Calling threads */ - for (l = 0; l < instance->lanes; ++l) { - argon2_position_t position; - - /* 2.1 Join a thread if limit is exceeded */ - if (l >= instance->threads) { - if (argon2_thread_join(thread[l - instance->threads])) { - rc = ARGON2_THREAD_FAIL; - goto fail; - } - } - - /* 2.2 Create thread */ - position.pass = r; - position.lane = l; - position.slice = (uint8_t)s; - position.index = 0; - thr_data[l].instance_ptr = - instance; /* preparing the thread input */ - memcpy(&(thr_data[l].pos), &position, - sizeof(argon2_position_t)); -#ifdef EMSCRIPTEN - fill_segment(instance, position); -#else - if (argon2_thread_create(&thread[l], &fill_segment_thr, - (void *)&thr_data[l])) { - rc = ARGON2_THREAD_FAIL; - goto fail; - } - - /* fill_segment(instance, position); */ - /*Non-thread equivalent of the lines above */ -#endif - } - - /* 3. Joining remaining threads */ - for (l = instance->lanes - instance->threads; l < instance->lanes; - ++l) { - if (argon2_thread_join(thread[l])) { - rc = ARGON2_THREAD_FAIL; - goto fail; - } - } - } - -#ifdef GENKAT - internal_kat(instance, r); /* Print all memory blocks */ -#endif - } - -fail: - if (thread != NULL) { - if (dlc != NULL) { - dlc((uint8_t *)thread, las); - } else { - free(thread); - } - } - if (thr_data != NULL) { - if (dlc != NULL) { - dlc((uint8_t *)thr_data, las); - } else { - free(thr_data); - } - } - return rc; -} - -#endif /* ARGON2_NO_THREADS */ - -int fill_memory_blocks(argon2_instance_t *instance) { - if (instance == NULL || instance->lanes == 0) { - return ARGON2_INCORRECT_PARAMETER; - } -#if defined(ARGON2_NO_THREADS) - return fill_memory_blocks_st(instance); -#else - return instance->threads == 1 ? - fill_memory_blocks_st(instance) : fill_memory_blocks_mt(instance); -#endif -} - -int validate_inputs(const argon2_context *context) { - if (NULL == context) { - return ARGON2_INCORRECT_PARAMETER; - } - - if (NULL == context->out) { - return ARGON2_OUTPUT_PTR_NULL; - } - - /* Validate output length */ - if (ARGON2_MIN_OUTLEN > context->outlen) { - return ARGON2_OUTPUT_TOO_SHORT; - } - - if (ARGON2_MAX_OUTLEN < context->outlen) { - return ARGON2_OUTPUT_TOO_LONG; - } - - /* Validate password (required param) */ - if (NULL == context->pwd) { - if (0 != context->pwdlen) { - return ARGON2_PWD_PTR_MISMATCH; - } - } - - if (ARGON2_MIN_PWD_LENGTH > context->pwdlen) { - return ARGON2_PWD_TOO_SHORT; - } - - if (ARGON2_MAX_PWD_LENGTH < context->pwdlen) { - return ARGON2_PWD_TOO_LONG; - } - - /* Validate salt (required param) */ - if (NULL == context->salt) { - if (0 != context->saltlen) { - return ARGON2_SALT_PTR_MISMATCH; - } - } - - if (ARGON2_MIN_SALT_LENGTH > context->saltlen) { - return ARGON2_SALT_TOO_SHORT; - } - - if (ARGON2_MAX_SALT_LENGTH < context->saltlen) { - return ARGON2_SALT_TOO_LONG; - } - - /* Validate secret (optional param) */ - if (NULL == context->secret) { - if (0 != context->secretlen) { - return ARGON2_SECRET_PTR_MISMATCH; - } - } else { - if (ARGON2_MIN_SECRET > context->secretlen) { - return ARGON2_SECRET_TOO_SHORT; - } - if (ARGON2_MAX_SECRET < context->secretlen) { - return ARGON2_SECRET_TOO_LONG; - } - } - - /* Validate associated data (optional param) */ - if (NULL == context->ad) { - if (0 != context->adlen) { - return ARGON2_AD_PTR_MISMATCH; - } - } else { - if (ARGON2_MIN_AD_LENGTH > context->adlen) { - return ARGON2_AD_TOO_SHORT; - } - if (ARGON2_MAX_AD_LENGTH < context->adlen) { - return ARGON2_AD_TOO_LONG; - } - } - - /* Validate memory cost */ - if (ARGON2_MIN_MEMORY > context->m_cost) { - return ARGON2_MEMORY_TOO_LITTLE; - } - - if (ARGON2_MAX_MEMORY < context->m_cost) { - return ARGON2_MEMORY_TOO_MUCH; - } - - if (context->m_cost < 8 * context->lanes) { - return ARGON2_MEMORY_TOO_LITTLE; - } - - /* Validate time cost */ - if (ARGON2_MIN_TIME > context->t_cost) { - return ARGON2_TIME_TOO_SMALL; - } - - if (ARGON2_MAX_TIME < context->t_cost) { - return ARGON2_TIME_TOO_LARGE; - } - - /* Validate lanes */ - if (ARGON2_MIN_LANES > context->lanes) { - return ARGON2_LANES_TOO_FEW; - } - - if (ARGON2_MAX_LANES < context->lanes) { - return ARGON2_LANES_TOO_MANY; - } - - /* Validate threads */ - if (ARGON2_MIN_THREADS > context->threads) { - return ARGON2_THREADS_TOO_FEW; - } - - if (ARGON2_MAX_THREADS < context->threads) { - return ARGON2_THREADS_TOO_MANY; - } - - if (NULL != context->allocate_cbk && NULL == context->free_cbk) { - return ARGON2_FREE_MEMORY_CBK_NULL; - } - - if (NULL == context->allocate_cbk && NULL != context->free_cbk) { - return ARGON2_ALLOCATE_MEMORY_CBK_NULL; - } - - return ARGON2_OK; -} - -void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance) { - uint32_t l; - /* Make the first and second block in each lane as G(H0||0||i) or - G(H0||1||i) */ - uint8_t blockhash_bytes[ARGON2_BLOCK_SIZE]; - for (l = 0; l < instance->lanes; ++l) { - - store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 0); - store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH + 4, l); - blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, - ARGON2_PREHASH_SEED_LENGTH); - load_block(&instance->memory[l * instance->lane_length + 0], - blockhash_bytes); - - store32(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, 1); - blake2b_long(blockhash_bytes, ARGON2_BLOCK_SIZE, blockhash, - ARGON2_PREHASH_SEED_LENGTH); - load_block(&instance->memory[l * instance->lane_length + 1], - blockhash_bytes); - } - clear_internal_memory(blockhash_bytes, ARGON2_BLOCK_SIZE); -} - -void initial_hash(uint8_t *blockhash, argon2_context *context, - argon2_type type) { - blake2b_state BlakeHash; - uint8_t value[sizeof(uint32_t)]; - - if (NULL == context || NULL == blockhash) { - return; - } - - blake2b_init(&BlakeHash, ARGON2_PREHASH_DIGEST_LENGTH); - - store32(&value, context->lanes); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - store32(&value, context->outlen); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - store32(&value, context->m_cost); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - store32(&value, context->t_cost); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - store32(&value, context->version); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - store32(&value, (uint32_t)type); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - store32(&value, context->pwdlen); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - if (context->pwd != NULL) { - blake2b_update(&BlakeHash, (const uint8_t *)context->pwd, - context->pwdlen); - - if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) { - secure_wipe_memory(context->pwd, context->pwdlen); - context->pwdlen = 0; - } - } - - store32(&value, context->saltlen); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - if (context->salt != NULL) { - blake2b_update(&BlakeHash, (const uint8_t *)context->salt, - context->saltlen); - } - - store32(&value, context->secretlen); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - if (context->secret != NULL) { - blake2b_update(&BlakeHash, (const uint8_t *)context->secret, - context->secretlen); - - if (context->flags & ARGON2_FLAG_CLEAR_SECRET) { - secure_wipe_memory(context->secret, context->secretlen); - context->secretlen = 0; - } - } - - store32(&value, context->adlen); - blake2b_update(&BlakeHash, (const uint8_t *)&value, sizeof(value)); - - if (context->ad != NULL) { - blake2b_update(&BlakeHash, (const uint8_t *)context->ad, - context->adlen); - } - - blake2b_final(&BlakeHash, blockhash, ARGON2_PREHASH_DIGEST_LENGTH); -} - -int initialize(argon2_instance_t *instance, argon2_context *context) { - uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; - int result = ARGON2_OK; - - if (instance == NULL || context == NULL) - return ARGON2_INCORRECT_PARAMETER; - instance->context_ptr = context; - - /* 1. Memory allocation */ - result = allocate_memory(context, (uint8_t **)&(instance->memory), - instance->memory_blocks, sizeof(block)); - if (result != ARGON2_OK) { - return result; - } - - /* 2. Initial hashing */ - /* H_0 + 8 extra bytes to produce the first blocks */ - /* uint8_t blockhash[ARGON2_PREHASH_SEED_LENGTH]; */ - /* Hashing all inputs */ - initial_hash(blockhash, context, instance->type); - /* Zeroing 8 extra bytes */ - clear_internal_memory(blockhash + ARGON2_PREHASH_DIGEST_LENGTH, - ARGON2_PREHASH_SEED_LENGTH - - ARGON2_PREHASH_DIGEST_LENGTH); - -#ifdef GENKAT - initial_kat(blockhash, context, instance->type); -#endif - - /* 3. Creating first blocks, we always have at least two blocks in a slice - */ - fill_first_blocks(blockhash, instance); - /* Clearing the hash */ - clear_internal_memory(blockhash, ARGON2_PREHASH_SEED_LENGTH); - - return ARGON2_OK; -} diff --git a/pkg/urcrypt/argon2/src/core.h b/pkg/urcrypt/argon2/src/core.h deleted file mode 100644 index 78000ba9e..000000000 --- a/pkg/urcrypt/argon2/src/core.h +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef ARGON2_CORE_H -#define ARGON2_CORE_H - -#include "argon2.h" - -#define CONST_CAST(x) (x)(uintptr_t) - -/**********************Argon2 internal constants*******************************/ - -enum argon2_core_constants { - /* Memory block size in bytes */ - ARGON2_BLOCK_SIZE = 1024, - ARGON2_QWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 8, - ARGON2_OWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 16, - ARGON2_HWORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 32, - ARGON2_512BIT_WORDS_IN_BLOCK = ARGON2_BLOCK_SIZE / 64, - - /* Number of pseudo-random values generated by one call to Blake in Argon2i - to - generate reference block positions */ - ARGON2_ADDRESSES_IN_BLOCK = 128, - - /* Pre-hashing digest length and its extension*/ - ARGON2_PREHASH_DIGEST_LENGTH = 64, - ARGON2_PREHASH_SEED_LENGTH = 72 -}; - -/*************************Argon2 internal data types***********************/ - -/* - * Structure for the (1KB) memory block implemented as 128 64-bit words. - * Memory blocks can be copied, XORed. Internal words can be accessed by [] (no - * bounds checking). - */ -typedef struct block_ { uint64_t v[ARGON2_QWORDS_IN_BLOCK]; } block; - -/*****************Functions that work with the block******************/ - -/* Initialize each byte of the block with @in */ -void init_block_value(block *b, uint8_t in); - -/* Copy block @src to block @dst */ -void copy_block(block *dst, const block *src); - -/* XOR @src onto @dst bytewise */ -void xor_block(block *dst, const block *src); - -/* - * Argon2 instance: memory pointer, number of passes, amount of memory, type, - * and derived values. - * Used to evaluate the number and location of blocks to construct in each - * thread - */ -typedef struct Argon2_instance_t { - block *memory; /* Memory pointer */ - uint32_t version; - uint32_t passes; /* Number of passes */ - uint32_t memory_blocks; /* Number of blocks in memory */ - uint32_t segment_length; - uint32_t lane_length; - uint32_t lanes; - uint32_t threads; - argon2_type type; - int print_internals; /* whether to print the memory blocks */ - argon2_context *context_ptr; /* points back to original context */ -} argon2_instance_t; - -/* - * Argon2 position: where we construct the block right now. Used to distribute - * work between threads. - */ -typedef struct Argon2_position_t { - uint32_t pass; - uint32_t lane; - uint8_t slice; - uint32_t index; -} argon2_position_t; - -/*Struct that holds the inputs for thread handling FillSegment*/ -typedef struct Argon2_thread_data { - argon2_instance_t *instance_ptr; - argon2_position_t pos; -} argon2_thread_data; - -/*************************Argon2 core functions********************************/ - -/* Allocates memory to the given pointer, uses the appropriate allocator as - * specified in the context. Total allocated memory is num*size. - * @param context argon2_context which specifies the allocator - * @param memory pointer to the pointer to the memory - * @param size the size in bytes for each element to be allocated - * @param num the number of elements to be allocated - * @return ARGON2_OK if @memory is a valid pointer and memory is allocated - */ -int allocate_memory(const argon2_context *context, uint8_t **memory, - size_t num, size_t size); - -/* - * Frees memory at the given pointer, uses the appropriate deallocator as - * specified in the context. Also cleans the memory using clear_internal_memory. - * @param context argon2_context which specifies the deallocator - * @param memory pointer to buffer to be freed - * @param size the size in bytes for each element to be deallocated - * @param num the number of elements to be deallocated - */ -void free_memory(const argon2_context *context, uint8_t *memory, - size_t num, size_t size); - -/* Function that securely cleans the memory. This ignores any flags set - * regarding clearing memory. Usually one just calls clear_internal_memory. - * @param mem Pointer to the memory - * @param s Memory size in bytes - */ -void secure_wipe_memory(void *v, size_t n); - -/* Function that securely clears the memory if FLAG_clear_internal_memory is - * set. If the flag isn't set, this function does nothing. - * @param mem Pointer to the memory - * @param s Memory size in bytes - */ -void clear_internal_memory(void *v, size_t n); - -/* - * Computes absolute position of reference block in the lane following a skewed - * distribution and using a pseudo-random value as input - * @param instance Pointer to the current instance - * @param position Pointer to the current position - * @param pseudo_rand 32-bit pseudo-random value used to determine the position - * @param same_lane Indicates if the block will be taken from the current lane. - * If so we can reference the current segment - * @pre All pointers must be valid - */ -uint32_t index_alpha(const argon2_instance_t *instance, - const argon2_position_t *position, uint32_t pseudo_rand, - int same_lane); - -/* - * Function that validates all inputs against predefined restrictions and return - * an error code - * @param context Pointer to current Argon2 context - * @return ARGON2_OK if everything is all right, otherwise one of error codes - * (all defined in - */ -int validate_inputs(const argon2_context *context); - -/* - * Hashes all the inputs into @a blockhash[PREHASH_DIGEST_LENGTH], clears - * password and secret if needed - * @param context Pointer to the Argon2 internal structure containing memory - * pointer, and parameters for time and space requirements. - * @param blockhash Buffer for pre-hashing digest - * @param type Argon2 type - * @pre @a blockhash must have at least @a PREHASH_DIGEST_LENGTH bytes - * allocated - */ -void initial_hash(uint8_t *blockhash, argon2_context *context, - argon2_type type); - -/* - * Function creates first 2 blocks per lane - * @param instance Pointer to the current instance - * @param blockhash Pointer to the pre-hashing digest - * @pre blockhash must point to @a PREHASH_SEED_LENGTH allocated values - */ -void fill_first_blocks(uint8_t *blockhash, const argon2_instance_t *instance); - -/* - * Function allocates memory, hashes the inputs with Blake, and creates first - * two blocks. Returns the pointer to the main memory with 2 blocks per lane - * initialized - * @param context Pointer to the Argon2 internal structure containing memory - * pointer, and parameters for time and space requirements. - * @param instance Current Argon2 instance - * @return Zero if successful, -1 if memory failed to allocate. @context->state - * will be modified if successful. - */ -int initialize(argon2_instance_t *instance, argon2_context *context); - -/* - * XORing the last block of each lane, hashing it, making the tag. Deallocates - * the memory. - * @param context Pointer to current Argon2 context (use only the out parameters - * from it) - * @param instance Pointer to current instance of Argon2 - * @pre instance->state must point to necessary amount of memory - * @pre context->out must point to outlen bytes of memory - * @pre if context->free_cbk is not NULL, it should point to a function that - * deallocates memory - */ -void finalize(const argon2_context *context, argon2_instance_t *instance); - -/* - * Function that fills the segment using previous segments also from other - * threads - * @param context current context - * @param instance Pointer to the current instance - * @param position Current position - * @pre all block pointers must be valid - */ -void fill_segment(const argon2_instance_t *instance, - argon2_position_t position); - -/* - * Function that fills the entire memory t_cost times based on the first two - * blocks in each lane - * @param instance Pointer to the current instance - * @return ARGON2_OK if successful, @context->state - */ -int fill_memory_blocks(argon2_instance_t *instance); - -#endif diff --git a/pkg/urcrypt/argon2/src/encoding.c b/pkg/urcrypt/argon2/src/encoding.c deleted file mode 100644 index 753a1e1ae..000000000 --- a/pkg/urcrypt/argon2/src/encoding.c +++ /dev/null @@ -1,493 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#include -#include -#include -#include -#include "encoding.h" -#include "core.h" - -/* - * Example code for a decoder and encoder of "hash strings", with Argon2 - * parameters. - * - * This code comprises three sections: - * - * -- The first section contains generic Base64 encoding and decoding - * functions. It is conceptually applicable to any hash function - * implementation that uses Base64 to encode and decode parameters, - * salts and outputs. It could be made into a library, provided that - * the relevant functions are made public (non-static) and be given - * reasonable names to avoid collisions with other functions. - * - * -- The second section is specific to Argon2. It encodes and decodes - * the parameters, salts and outputs. It does not compute the hash - * itself. - * - * The code was originally written by Thomas Pornin , - * to whom comments and remarks may be sent. It is released under what - * should amount to Public Domain or its closest equivalent; the - * following mantra is supposed to incarnate that fact with all the - * proper legal rituals: - * - * --------------------------------------------------------------------- - * This file is provided under the terms of Creative Commons CC0 1.0 - * Public Domain Dedication. To the extent possible under law, the - * author (Thomas Pornin) has waived all copyright and related or - * neighboring rights to this file. This work is published from: Canada. - * --------------------------------------------------------------------- - * - * Copyright (c) 2015 Thomas Pornin - */ - -/* ==================================================================== */ -/* - * Common code; could be shared between different hash functions. - * - * Note: the Base64 functions below assume that uppercase letters (resp. - * lowercase letters) have consecutive numerical codes, that fit on 8 - * bits. All modern systems use ASCII-compatible charsets, where these - * properties are true. If you are stuck with a dinosaur of a system - * that still defaults to EBCDIC then you already have much bigger - * interoperability issues to deal with. - */ - -/* - * Some macros for constant-time comparisons. These work over values in - * the 0..255 range. Returned value is 0x00 on "false", 0xFF on "true". - */ -#define EQ(x, y) ((((0U - ((unsigned)(x) ^ (unsigned)(y))) >> 8) & 0xFF) ^ 0xFF) -#define GT(x, y) ((((unsigned)(y) - (unsigned)(x)) >> 8) & 0xFF) -#define GE(x, y) (GT(y, x) ^ 0xFF) -#define LT(x, y) GT(y, x) -#define LE(x, y) GE(y, x) - -/* - * Convert value x (0..63) to corresponding Base64 character. - */ -static int b64_byte_to_char(unsigned x) { - return (LT(x, 26) & (x + 'A')) | - (GE(x, 26) & LT(x, 52) & (x + ('a' - 26))) | - (GE(x, 52) & LT(x, 62) & (x + ('0' - 52))) | (EQ(x, 62) & '+') | - (EQ(x, 63) & '/'); -} - -/* - * Convert character c to the corresponding 6-bit value. If character c - * is not a Base64 character, then 0xFF (255) is returned. - */ -static unsigned b64_char_to_byte(int c) { - unsigned x; - - x = (GE(c, 'A') & LE(c, 'Z') & (c - 'A')) | - (GE(c, 'a') & LE(c, 'z') & (c - ('a' - 26))) | - (GE(c, '0') & LE(c, '9') & (c - ('0' - 52))) | (EQ(c, '+') & 62) | - (EQ(c, '/') & 63); - return x | (EQ(x, 0) & (EQ(c, 'A') ^ 0xFF)); -} - -/* - * Convert some bytes to Base64. 'dst_len' is the length (in characters) - * of the output buffer 'dst'; if that buffer is not large enough to - * receive the result (including the terminating 0), then (size_t)-1 - * is returned. Otherwise, the zero-terminated Base64 string is written - * in the buffer, and the output length (counted WITHOUT the terminating - * zero) is returned. - */ -static size_t to_base64(char *dst, size_t dst_len, const void *src, - size_t src_len) { - size_t olen; - const unsigned char *buf; - unsigned acc, acc_len; - - olen = (src_len / 3) << 2; - switch (src_len % 3) { - case 2: - olen++; - /* fall through */ - case 1: - olen += 2; - break; - } - if (dst_len <= olen) { - return (size_t)-1; - } - acc = 0; - acc_len = 0; - buf = (const unsigned char *)src; - while (src_len-- > 0) { - acc = (acc << 8) + (*buf++); - acc_len += 8; - while (acc_len >= 6) { - acc_len -= 6; - *dst++ = (char)b64_byte_to_char((acc >> acc_len) & 0x3F); - } - } - if (acc_len > 0) { - *dst++ = (char)b64_byte_to_char((acc << (6 - acc_len)) & 0x3F); - } - *dst++ = 0; - return olen; -} - -/* - * Decode Base64 chars into bytes. The '*dst_len' value must initially - * contain the length of the output buffer '*dst'; when the decoding - * ends, the actual number of decoded bytes is written back in - * '*dst_len'. - * - * Decoding stops when a non-Base64 character is encountered, or when - * the output buffer capacity is exceeded. If an error occurred (output - * buffer is too small, invalid last characters leading to unprocessed - * buffered bits), then NULL is returned; otherwise, the returned value - * points to the first non-Base64 character in the source stream, which - * may be the terminating zero. - */ -static const char *from_base64(void *dst, size_t *dst_len, const char *src) { - size_t len; - unsigned char *buf; - unsigned acc, acc_len; - - buf = (unsigned char *)dst; - len = 0; - acc = 0; - acc_len = 0; - for (;;) { - unsigned d; - - d = b64_char_to_byte(*src); - if (d == 0xFF) { - break; - } - src++; - acc = (acc << 6) + d; - acc_len += 6; - if (acc_len >= 8) { - acc_len -= 8; - if ((len++) >= *dst_len) { - return NULL; - } - *buf++ = (acc >> acc_len) & 0xFF; - } - } - - /* - * If the input length is equal to 1 modulo 4 (which is - * invalid), then there will remain 6 unprocessed bits; - * otherwise, only 0, 2 or 4 bits are buffered. The buffered - * bits must also all be zero. - */ - if (acc_len > 4 || (acc & (((unsigned)1 << acc_len) - 1)) != 0) { - return NULL; - } - *dst_len = len; - return src; -} - -/* - * Decode decimal integer from 'str'; the value is written in '*v'. - * Returned value is a pointer to the next non-decimal character in the - * string. If there is no digit at all, or the value encoding is not - * minimal (extra leading zeros), or the value does not fit in an - * 'unsigned long', then NULL is returned. - */ -static const char *decode_decimal(const char *str, unsigned long *v) { - const char *orig; - unsigned long acc; - - acc = 0; - for (orig = str;; str++) { - int c; - - c = *str; - if (c < '0' || c > '9') { - break; - } - c -= '0'; - if (acc > (ULONG_MAX / 10)) { - return NULL; - } - acc *= 10; - if ((unsigned long)c > (ULONG_MAX - acc)) { - return NULL; - } - acc += (unsigned long)c; - } - if (str == orig || (*orig == '0' && str != (orig + 1))) { - return NULL; - } - *v = acc; - return str; -} - -/* ==================================================================== */ -/* - * Code specific to Argon2. - * - * The code below applies the following format: - * - * $argon2[$v=]$m=,t=,p=$$ - * - * where is either 'd', 'id', or 'i', is a decimal integer (positive, - * fits in an 'unsigned long'), and is Base64-encoded data (no '=' padding - * characters, no newline or whitespace). - * - * The last two binary chunks (encoded in Base64) are, in that order, - * the salt and the output. Both are required. The binary salt length and the - * output length must be in the allowed ranges defined in argon2.h. - * - * The ctx struct must contain buffers large enough to hold the salt and pwd - * when it is fed into decode_string. - */ - -int decode_string(argon2_context *ctx, const char *str, argon2_type type) { - -/* check for prefix */ -#define CC(prefix) \ - do { \ - size_t cc_len = strlen(prefix); \ - if (strncmp(str, prefix, cc_len) != 0) { \ - return ARGON2_DECODING_FAIL; \ - } \ - str += cc_len; \ - } while ((void)0, 0) - -/* optional prefix checking with supplied code */ -#define CC_opt(prefix, code) \ - do { \ - size_t cc_len = strlen(prefix); \ - if (strncmp(str, prefix, cc_len) == 0) { \ - str += cc_len; \ - { code; } \ - } \ - } while ((void)0, 0) - -/* Decoding prefix into decimal */ -#define DECIMAL(x) \ - do { \ - unsigned long dec_x; \ - str = decode_decimal(str, &dec_x); \ - if (str == NULL) { \ - return ARGON2_DECODING_FAIL; \ - } \ - (x) = dec_x; \ - } while ((void)0, 0) - - -/* Decoding prefix into uint32_t decimal */ -#define DECIMAL_U32(x) \ - do { \ - unsigned long dec_x; \ - str = decode_decimal(str, &dec_x); \ - if (str == NULL || dec_x > UINT32_MAX) { \ - return ARGON2_DECODING_FAIL; \ - } \ - (x) = (uint32_t)dec_x; \ - } while ((void)0, 0) - - -/* Decoding base64 into a binary buffer */ -#define BIN(buf, max_len, len) \ - do { \ - size_t bin_len = (max_len); \ - str = from_base64(buf, &bin_len, str); \ - if (str == NULL || bin_len > UINT32_MAX) { \ - return ARGON2_DECODING_FAIL; \ - } \ - (len) = (uint32_t)bin_len; \ - } while ((void)0, 0) - - size_t maxsaltlen = ctx->saltlen; - size_t maxoutlen = ctx->outlen; - int validation_result; - const char* type_string; - - /* We should start with the argon2_type we are using */ - type_string = argon2_type2string(type, 0); - if (!type_string) { - return ARGON2_INCORRECT_TYPE; - } - - CC("$"); - CC(type_string); - - /* Reading the version number if the default is suppressed */ - ctx->version = ARGON2_VERSION_10; - CC_opt("$v=", DECIMAL_U32(ctx->version)); - - CC("$m="); - DECIMAL_U32(ctx->m_cost); - CC(",t="); - DECIMAL_U32(ctx->t_cost); - CC(",p="); - DECIMAL_U32(ctx->lanes); - ctx->threads = ctx->lanes; - - CC("$"); - BIN(ctx->salt, maxsaltlen, ctx->saltlen); - CC("$"); - BIN(ctx->out, maxoutlen, ctx->outlen); - - /* The rest of the fields get the default values */ - ctx->secret = NULL; - ctx->secretlen = 0; - ctx->ad = NULL; - ctx->adlen = 0; - ctx->allocate_cbk = NULL; - ctx->free_cbk = NULL; - ctx->flags = ARGON2_DEFAULT_FLAGS; - - /* On return, must have valid context */ - validation_result = validate_inputs(ctx); - if (validation_result != ARGON2_OK) { - return validation_result; - } - - /* Can't have any additional characters */ - if (*str == 0) { - return ARGON2_OK; - } else { - return ARGON2_DECODING_FAIL; - } -#undef CC -#undef CC_opt -#undef DECIMAL -#undef BIN -} - -static void encode_decimal(int i, char b[]){ - #ifdef ARGON2_JS - - // because this generates WASM error: - // sprintf(tmp, "%lu", (unsigned long)(x)); - - char const digit[] = "0123456789"; - char* p = b; - if(i<0){ - *p++ = '-'; - i *= -1; - } - int shifter = i; - do{ //Move to where representation ends - ++p; - shifter = shifter/10; - }while(shifter); - *p = '\0'; - do{ //Move back, inserting digits as u go - *--p = digit[i%10]; - i = i/10; - }while(i); - - #else - - sprintf(b, "%lu", (unsigned long)(i)); - - #endif -} - -int encode_string(char *dst, size_t dst_len, argon2_context *ctx, - argon2_type type) { -#define SS(str) \ - do { \ - size_t pp_len = strlen(str); \ - if (pp_len >= dst_len) { \ - return ARGON2_ENCODING_FAIL; \ - } \ - memcpy(dst, str, pp_len + 1); \ - dst += pp_len; \ - dst_len -= pp_len; \ - } while ((void)0, 0) - -#define SX(x) \ - do { \ - char tmp[30]; \ - encode_decimal(x, tmp); \ - SS(tmp); \ - } while ((void)0, 0) - -#define SB(buf, len) \ - do { \ - size_t sb_len = to_base64(dst, dst_len, buf, len); \ - if (sb_len == (size_t)-1) { \ - return ARGON2_ENCODING_FAIL; \ - } \ - dst += sb_len; \ - dst_len -= sb_len; \ - } while ((void)0, 0) - - const char* type_string = argon2_type2string(type, 0); - int validation_result = validate_inputs(ctx); - - if (!type_string) { - return ARGON2_ENCODING_FAIL; - } - - if (validation_result != ARGON2_OK) { - return validation_result; - } - - - SS("$"); - SS(type_string); - - SS("$v="); - SX(ctx->version); - - SS("$m="); - SX(ctx->m_cost); - SS(",t="); - SX(ctx->t_cost); - SS(",p="); - SX(ctx->lanes); - - SS("$"); - SB(ctx->salt, ctx->saltlen); - - SS("$"); - SB(ctx->out, ctx->outlen); - return ARGON2_OK; - -#undef SS -#undef SX -#undef SB -} - -size_t b64len(uint32_t len) { - size_t olen = ((size_t)len / 3) << 2; - - switch (len % 3) { - case 2: - olen++; - /* fall through */ - case 1: - olen += 2; - break; - } - - return olen; -} - -size_t numlen(uint32_t num) { - size_t len = 1; - while (num >= 10) { - ++len; - num = num / 10; - } - return len; -} - diff --git a/pkg/urcrypt/argon2/src/encoding.h b/pkg/urcrypt/argon2/src/encoding.h deleted file mode 100644 index 7e83ec928..000000000 --- a/pkg/urcrypt/argon2/src/encoding.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef ENCODING_H -#define ENCODING_H -#include "argon2.h" - -#define ARGON2_MAX_DECODED_LANES UINT32_C(255) -#define ARGON2_MIN_DECODED_SALT_LEN UINT32_C(8) -#define ARGON2_MIN_DECODED_OUT_LEN UINT32_C(12) - -/* -* encode an Argon2 hash string into the provided buffer. 'dst_len' -* contains the size, in characters, of the 'dst' buffer; if 'dst_len' -* is less than the number of required characters (including the -* terminating 0), then this function returns ARGON2_ENCODING_ERROR. -* -* on success, ARGON2_OK is returned. -*/ -int encode_string(char *dst, size_t dst_len, argon2_context *ctx, - argon2_type type); - -/* -* Decodes an Argon2 hash string into the provided structure 'ctx'. -* The only fields that must be set prior to this call are ctx.saltlen and -* ctx.outlen (which must be the maximal salt and out length values that are -* allowed), ctx.salt and ctx.out (which must be buffers of the specified -* length), and ctx.pwd and ctx.pwdlen which must hold a valid password. -* -* Invalid input string causes an error. On success, the ctx is valid and all -* fields have been initialized. -* -* Returned value is ARGON2_OK on success, other ARGON2_ codes on error. -*/ -int decode_string(argon2_context *ctx, const char *str, argon2_type type); - -/* Returns the length of the encoded byte stream with length len */ -size_t b64len(uint32_t len); - -/* Returns the length of the encoded number num */ -size_t numlen(uint32_t num); - -#endif diff --git a/pkg/urcrypt/argon2/src/genkat.c b/pkg/urcrypt/argon2/src/genkat.c deleted file mode 100644 index 1c177b2ee..000000000 --- a/pkg/urcrypt/argon2/src/genkat.c +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#include -#include -#include -#include "argon2.h" -#include "core.h" - -void initial_kat(const uint8_t *blockhash, const argon2_context *context, - argon2_type type) { - unsigned i; - - if (blockhash != NULL && context != NULL) { - printf("=======================================\n"); - - printf("%s version number %d\n", argon2_type2string(type, 1), - context->version); - - printf("=======================================\n"); - - - printf("Memory: %u KiB, Iterations: %u, Parallelism: %u lanes, Tag " - "length: %u bytes\n", - context->m_cost, context->t_cost, context->lanes, - context->outlen); - - printf("Password[%u]: ", context->pwdlen); - - if (context->flags & ARGON2_FLAG_CLEAR_PASSWORD) { - printf("CLEARED\n"); - } else { - for (i = 0; i < context->pwdlen; ++i) { - printf("%2.2x ", ((unsigned char *)context->pwd)[i]); - } - - printf("\n"); - } - - printf("Salt[%u]: ", context->saltlen); - - for (i = 0; i < context->saltlen; ++i) { - printf("%2.2x ", ((unsigned char *)context->salt)[i]); - } - - printf("\n"); - - printf("Secret[%u]: ", context->secretlen); - - if (context->flags & ARGON2_FLAG_CLEAR_SECRET) { - printf("CLEARED\n"); - } else { - for (i = 0; i < context->secretlen; ++i) { - printf("%2.2x ", ((unsigned char *)context->secret)[i]); - } - - printf("\n"); - } - - printf("Associated data[%u]: ", context->adlen); - - for (i = 0; i < context->adlen; ++i) { - printf("%2.2x ", ((unsigned char *)context->ad)[i]); - } - - printf("\n"); - - printf("Pre-hashing digest: "); - - for (i = 0; i < ARGON2_PREHASH_DIGEST_LENGTH; ++i) { - printf("%2.2x ", ((unsigned char *)blockhash)[i]); - } - - printf("\n"); - } -} - -void print_tag(const void *out, uint32_t outlen) { - unsigned i; - if (out != NULL) { - printf("Tag: "); - - for (i = 0; i < outlen; ++i) { - printf("%2.2x ", ((uint8_t *)out)[i]); - } - - printf("\n"); - } -} - -void internal_kat(const argon2_instance_t *instance, uint32_t pass) { - - if (instance != NULL) { - uint32_t i, j; - printf("\n After pass %u:\n", pass); - - for (i = 0; i < instance->memory_blocks; ++i) { - uint32_t how_many_words = - (instance->memory_blocks > ARGON2_QWORDS_IN_BLOCK) - ? 1 - : ARGON2_QWORDS_IN_BLOCK; - - for (j = 0; j < how_many_words; ++j) - printf("Block %.4u [%3u]: %016llx\n", i, j, - (unsigned long long)instance->memory[i].v[j]); - } - } -} - -static void fatal(const char *error) { - fprintf(stderr, "Error: %s\n", error); - exit(1); -} - -static void generate_testvectors(argon2_type type, const uint32_t version) { -#define TEST_OUTLEN 32 -#define TEST_PWDLEN 32 -#define TEST_SALTLEN 16 -#define TEST_SECRETLEN 8 -#define TEST_ADLEN 12 - argon2_context context; - - unsigned char out[TEST_OUTLEN]; - unsigned char pwd[TEST_PWDLEN]; - unsigned char salt[TEST_SALTLEN]; - unsigned char secret[TEST_SECRETLEN]; - unsigned char ad[TEST_ADLEN]; - const allocate_fptr myown_allocator = NULL; - const deallocate_fptr myown_deallocator = NULL; - - unsigned t_cost = 3; - unsigned m_cost = 32; - unsigned lanes = 4; - - memset(pwd, 1, TEST_OUTLEN); - memset(salt, 2, TEST_SALTLEN); - memset(secret, 3, TEST_SECRETLEN); - memset(ad, 4, TEST_ADLEN); - - context.out = out; - context.outlen = TEST_OUTLEN; - context.version = version; - context.pwd = pwd; - context.pwdlen = TEST_PWDLEN; - context.salt = salt; - context.saltlen = TEST_SALTLEN; - context.secret = secret; - context.secretlen = TEST_SECRETLEN; - context.ad = ad; - context.adlen = TEST_ADLEN; - context.t_cost = t_cost; - context.m_cost = m_cost; - context.lanes = lanes; - context.threads = lanes; - context.allocate_cbk = myown_allocator; - context.free_cbk = myown_deallocator; - context.flags = ARGON2_DEFAULT_FLAGS; - -#undef TEST_OUTLEN -#undef TEST_PWDLEN -#undef TEST_SALTLEN -#undef TEST_SECRETLEN -#undef TEST_ADLEN - - argon2_ctx(&context, type); -} - -int main(int argc, char *argv[]) { - /* Get and check Argon2 type */ - const char *type_str = (argc > 1) ? argv[1] : "i"; - argon2_type type = Argon2_i; - uint32_t version = ARGON2_VERSION_NUMBER; - if (!strcmp(type_str, "d")) { - type = Argon2_d; - } else if (!strcmp(type_str, "i")) { - type = Argon2_i; - } else if (!strcmp(type_str, "id")) { - type = Argon2_id; - } else if (!strcmp(type_str, "u")) { - type = Argon2_u; - } else { - fatal("wrong Argon2 type"); - } - - /* Get and check Argon2 version number */ - if (argc > 2) { - version = strtoul(argv[2], NULL, 10); - } - if (ARGON2_VERSION_10 != version && ARGON2_VERSION_NUMBER != version) { - fatal("wrong Argon2 version number"); - } - - generate_testvectors(type, version); - return ARGON2_OK; -} diff --git a/pkg/urcrypt/argon2/src/genkat.h b/pkg/urcrypt/argon2/src/genkat.h deleted file mode 100644 index 057263015..000000000 --- a/pkg/urcrypt/argon2/src/genkat.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef ARGON2_KAT_H -#define ARGON2_KAT_H - -#include "core.h" - -/* - * Initial KAT function that prints the inputs to the file - * @param blockhash Array that contains pre-hashing digest - * @param context Holds inputs - * @param type Argon2 type - * @pre blockhash must point to INPUT_INITIAL_HASH_LENGTH bytes - * @pre context member pointers must point to allocated memory of size according - * to the length values - */ -void initial_kat(const uint8_t *blockhash, const argon2_context *context, - argon2_type type); - -/* - * Function that prints the output tag - * @param out output array pointer - * @param outlen digest length - * @pre out must point to @a outlen bytes - **/ -void print_tag(const void *out, uint32_t outlen); - -/* - * Function that prints the internal state at given moment - * @param instance pointer to the current instance - * @param pass current pass number - * @pre instance must have necessary memory allocated - **/ -void internal_kat(const argon2_instance_t *instance, uint32_t pass); - -#endif diff --git a/pkg/urcrypt/argon2/src/opt.c b/pkg/urcrypt/argon2/src/opt.c deleted file mode 100644 index be7080c28..000000000 --- a/pkg/urcrypt/argon2/src/opt.c +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#include -#include -#include - -#include "argon2.h" -#include "core.h" - -#include "blake2/blake2.h" -#include "blake2/blamka-round-opt.h" - -/* - * Function fills a new memory block and optionally XORs the old block over the new one. - * Memory must be initialized. - * @param state Pointer to the just produced block. Content will be updated(!) - * @param ref_block Pointer to the reference block - * @param next_block Pointer to the block to be XORed over. May coincide with @ref_block - * @param with_xor Whether to XOR into the new block (1) or just overwrite (0) - * @pre all block pointers must be valid - */ -#if defined(__AVX512F__) -static void fill_block(__m512i *state, const block *ref_block, - block *next_block, int with_xor) { - __m512i block_XY[ARGON2_512BIT_WORDS_IN_BLOCK]; - unsigned int i; - - if (with_xor) { - for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { - state[i] = _mm512_xor_si512( - state[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i)); - block_XY[i] = _mm512_xor_si512( - state[i], _mm512_loadu_si512((const __m512i *)next_block->v + i)); - } - } else { - for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { - block_XY[i] = state[i] = _mm512_xor_si512( - state[i], _mm512_loadu_si512((const __m512i *)ref_block->v + i)); - } - } - - for (i = 0; i < 2; ++i) { - BLAKE2_ROUND_1( - state[8 * i + 0], state[8 * i + 1], state[8 * i + 2], state[8 * i + 3], - state[8 * i + 4], state[8 * i + 5], state[8 * i + 6], state[8 * i + 7]); - } - - for (i = 0; i < 2; ++i) { - BLAKE2_ROUND_2( - state[2 * 0 + i], state[2 * 1 + i], state[2 * 2 + i], state[2 * 3 + i], - state[2 * 4 + i], state[2 * 5 + i], state[2 * 6 + i], state[2 * 7 + i]); - } - - for (i = 0; i < ARGON2_512BIT_WORDS_IN_BLOCK; i++) { - state[i] = _mm512_xor_si512(state[i], block_XY[i]); - _mm512_storeu_si512((__m512i *)next_block->v + i, state[i]); - } -} -#elif defined(__AVX2__) -static void fill_block(__m256i *state, const block *ref_block, - block *next_block, int with_xor) { - __m256i block_XY[ARGON2_HWORDS_IN_BLOCK]; - unsigned int i; - - if (with_xor) { - for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { - state[i] = _mm256_xor_si256( - state[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i)); - block_XY[i] = _mm256_xor_si256( - state[i], _mm256_loadu_si256((const __m256i *)next_block->v + i)); - } - } else { - for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { - block_XY[i] = state[i] = _mm256_xor_si256( - state[i], _mm256_loadu_si256((const __m256i *)ref_block->v + i)); - } - } - - for (i = 0; i < 4; ++i) { - BLAKE2_ROUND_1(state[8 * i + 0], state[8 * i + 4], state[8 * i + 1], state[8 * i + 5], - state[8 * i + 2], state[8 * i + 6], state[8 * i + 3], state[8 * i + 7]); - } - - for (i = 0; i < 4; ++i) { - BLAKE2_ROUND_2(state[ 0 + i], state[ 4 + i], state[ 8 + i], state[12 + i], - state[16 + i], state[20 + i], state[24 + i], state[28 + i]); - } - - for (i = 0; i < ARGON2_HWORDS_IN_BLOCK; i++) { - state[i] = _mm256_xor_si256(state[i], block_XY[i]); - _mm256_storeu_si256((__m256i *)next_block->v + i, state[i]); - } -} -#else -static void fill_block(__m128i *state, const block *ref_block, - block *next_block, int with_xor) { - __m128i block_XY[ARGON2_OWORDS_IN_BLOCK]; - unsigned int i; - - if (with_xor) { - for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { - state[i] = _mm_xor_si128( - state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i)); - block_XY[i] = _mm_xor_si128( - state[i], _mm_loadu_si128((const __m128i *)next_block->v + i)); - } - } else { - for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { - block_XY[i] = state[i] = _mm_xor_si128( - state[i], _mm_loadu_si128((const __m128i *)ref_block->v + i)); - } - } - - for (i = 0; i < 8; ++i) { - BLAKE2_ROUND(state[8 * i + 0], state[8 * i + 1], state[8 * i + 2], - state[8 * i + 3], state[8 * i + 4], state[8 * i + 5], - state[8 * i + 6], state[8 * i + 7]); - } - - for (i = 0; i < 8; ++i) { - BLAKE2_ROUND(state[8 * 0 + i], state[8 * 1 + i], state[8 * 2 + i], - state[8 * 3 + i], state[8 * 4 + i], state[8 * 5 + i], - state[8 * 6 + i], state[8 * 7 + i]); - } - - for (i = 0; i < ARGON2_OWORDS_IN_BLOCK; i++) { - state[i] = _mm_xor_si128(state[i], block_XY[i]); - _mm_storeu_si128((__m128i *)next_block->v + i, state[i]); - } -} -#endif - -static void next_addresses(block *address_block, block *input_block) { - /*Temporary zero-initialized blocks*/ -#if defined(__AVX512F__) - __m512i zero_block[ARGON2_512BIT_WORDS_IN_BLOCK]; - __m512i zero2_block[ARGON2_512BIT_WORDS_IN_BLOCK]; -#elif defined(__AVX2__) - __m256i zero_block[ARGON2_HWORDS_IN_BLOCK]; - __m256i zero2_block[ARGON2_HWORDS_IN_BLOCK]; -#else - __m128i zero_block[ARGON2_OWORDS_IN_BLOCK]; - __m128i zero2_block[ARGON2_OWORDS_IN_BLOCK]; -#endif - - memset(zero_block, 0, sizeof(zero_block)); - memset(zero2_block, 0, sizeof(zero2_block)); - - /*Increasing index counter*/ - input_block->v[6]++; - - /*First iteration of G*/ - fill_block(zero_block, input_block, address_block, 0); - - /*Second iteration of G*/ - fill_block(zero2_block, address_block, address_block, 0); -} - -void fill_segment(const argon2_instance_t *instance, - argon2_position_t position) { - block *ref_block = NULL, *curr_block = NULL; - block address_block, input_block; - uint64_t pseudo_rand, ref_index, ref_lane; - uint32_t prev_offset, curr_offset; - uint32_t starting_index, i; -#if defined(__AVX512F__) - __m512i state[ARGON2_512BIT_WORDS_IN_BLOCK]; -#elif defined(__AVX2__) - __m256i state[ARGON2_HWORDS_IN_BLOCK]; -#else - __m128i state[ARGON2_OWORDS_IN_BLOCK]; -#endif - int data_independent_addressing; - - if (instance == NULL) { - return; - } - - data_independent_addressing = - (instance->type == Argon2_i) || - (instance->type == Argon2_id && (position.pass == 0) && - (position.slice < ARGON2_SYNC_POINTS / 2)) || - (instance->type == Argon2_u && (position.pass == 0) && - (position.slice <= ARGON2_SYNC_POINTS / 2)); - - if (data_independent_addressing) { - init_block_value(&input_block, 0); - - input_block.v[0] = position.pass; - input_block.v[1] = position.lane; - input_block.v[2] = position.slice; - input_block.v[3] = instance->memory_blocks; - input_block.v[4] = instance->passes; - input_block.v[5] = instance->type; - } - - starting_index = 0; - - if ((0 == position.pass) && (0 == position.slice)) { - starting_index = 2; /* we have already generated the first two blocks */ - - /* Don't forget to generate the first block of addresses: */ - if (data_independent_addressing) { - next_addresses(&address_block, &input_block); - } - } - - /* Offset of the current block */ - curr_offset = position.lane * instance->lane_length + - position.slice * instance->segment_length + starting_index; - - if (0 == curr_offset % instance->lane_length) { - /* Last block in this lane */ - prev_offset = curr_offset + instance->lane_length - 1; - } else { - /* Previous block */ - prev_offset = curr_offset - 1; - } - - memcpy(state, ((instance->memory + prev_offset)->v), ARGON2_BLOCK_SIZE); - - for (i = starting_index; i < instance->segment_length; - ++i, ++curr_offset, ++prev_offset) { - /*1.1 Rotating prev_offset if needed */ - if (curr_offset % instance->lane_length == 1) { - prev_offset = curr_offset - 1; - } - - /* 1.2 Computing the index of the reference block */ - /* 1.2.1 Taking pseudo-random value from the previous block */ - if (data_independent_addressing) { - if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) { - next_addresses(&address_block, &input_block); - } - pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK]; - } else { - pseudo_rand = instance->memory[prev_offset].v[0]; - } - - /* 1.2.2 Computing the lane of the reference block */ - ref_lane = ((pseudo_rand >> 32)) % instance->lanes; - - if ((position.pass == 0) && (position.slice == 0)) { - /* Can not reference other lanes yet */ - ref_lane = position.lane; - } - - /* 1.2.3 Computing the number of possible reference block within the - * lane. - */ - position.index = i; - ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF, - ref_lane == position.lane); - - /* 2 Creating a new block */ - ref_block = - instance->memory + instance->lane_length * ref_lane + ref_index; - curr_block = instance->memory + curr_offset; - if (ARGON2_VERSION_10 == instance->version) { - /* version 1.2.1 and earlier: overwrite, not XOR */ - fill_block(state, ref_block, curr_block, 0); - } else { - if(0 == position.pass) { - fill_block(state, ref_block, curr_block, 0); - } else { - fill_block(state, ref_block, curr_block, 1); - } - } - } -} diff --git a/pkg/urcrypt/argon2/src/ref.c b/pkg/urcrypt/argon2/src/ref.c deleted file mode 100644 index 03c322f9c..000000000 --- a/pkg/urcrypt/argon2/src/ref.c +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#include -#include -#include - -#include "argon2.h" -#include "core.h" - -#include "blake2/blamka-round-ref.h" -#include "blake2/blake2-impl.h" -#include "blake2/blake2.h" - - -/* - * Function fills a new memory block and optionally XORs the old block over the new one. - * @next_block must be initialized. - * @param prev_block Pointer to the previous block - * @param ref_block Pointer to the reference block - * @param next_block Pointer to the block to be constructed - * @param with_xor Whether to XOR into the new block (1) or just overwrite (0) - * @pre all block pointers must be valid - */ -static void fill_block(const block *prev_block, const block *ref_block, - block *next_block, int with_xor) { - block blockR, block_tmp; - unsigned i; - - copy_block(&blockR, ref_block); - xor_block(&blockR, prev_block); - copy_block(&block_tmp, &blockR); - /* Now blockR = ref_block + prev_block and block_tmp = ref_block + prev_block */ - if (with_xor) { - /* Saving the next block contents for XOR over: */ - xor_block(&block_tmp, next_block); - /* Now blockR = ref_block + prev_block and - block_tmp = ref_block + prev_block + next_block */ - } - - /* Apply Blake2 on columns of 64-bit words: (0,1,...,15) , then - (16,17,..31)... finally (112,113,...127) */ - for (i = 0; i < 8; ++i) { - BLAKE2_ROUND_NOMSG( - blockR.v[16 * i], blockR.v[16 * i + 1], blockR.v[16 * i + 2], - blockR.v[16 * i + 3], blockR.v[16 * i + 4], blockR.v[16 * i + 5], - blockR.v[16 * i + 6], blockR.v[16 * i + 7], blockR.v[16 * i + 8], - blockR.v[16 * i + 9], blockR.v[16 * i + 10], blockR.v[16 * i + 11], - blockR.v[16 * i + 12], blockR.v[16 * i + 13], blockR.v[16 * i + 14], - blockR.v[16 * i + 15]); - } - - /* Apply Blake2 on rows of 64-bit words: (0,1,16,17,...112,113), then - (2,3,18,19,...,114,115).. finally (14,15,30,31,...,126,127) */ - for (i = 0; i < 8; i++) { - BLAKE2_ROUND_NOMSG( - blockR.v[2 * i], blockR.v[2 * i + 1], blockR.v[2 * i + 16], - blockR.v[2 * i + 17], blockR.v[2 * i + 32], blockR.v[2 * i + 33], - blockR.v[2 * i + 48], blockR.v[2 * i + 49], blockR.v[2 * i + 64], - blockR.v[2 * i + 65], blockR.v[2 * i + 80], blockR.v[2 * i + 81], - blockR.v[2 * i + 96], blockR.v[2 * i + 97], blockR.v[2 * i + 112], - blockR.v[2 * i + 113]); - } - - copy_block(next_block, &block_tmp); - xor_block(next_block, &blockR); -} - -static void next_addresses(block *address_block, block *input_block, - const block *zero_block) { - input_block->v[6]++; - fill_block(zero_block, input_block, address_block, 0); - fill_block(zero_block, address_block, address_block, 0); -} - -void fill_segment(const argon2_instance_t *instance, - argon2_position_t position) { - block *ref_block = NULL, *curr_block = NULL; - block address_block, input_block, zero_block; - uint64_t pseudo_rand, ref_index, ref_lane; - uint32_t prev_offset, curr_offset; - uint32_t starting_index; - uint32_t i; - int data_independent_addressing; - - if (instance == NULL) { - return; - } - - data_independent_addressing = - (instance->type == Argon2_i) || - (instance->type == Argon2_id && (position.pass == 0) && - (position.slice < ARGON2_SYNC_POINTS / 2)) || - (instance->type == Argon2_u && (position.pass == 0) && - (position.slice <= ARGON2_SYNC_POINTS / 2)); - - if (data_independent_addressing) { - init_block_value(&zero_block, 0); - init_block_value(&input_block, 0); - - input_block.v[0] = position.pass; - input_block.v[1] = position.lane; - input_block.v[2] = position.slice; - input_block.v[3] = instance->memory_blocks; - input_block.v[4] = instance->passes; - input_block.v[5] = instance->type; - } - - starting_index = 0; - - if ((0 == position.pass) && (0 == position.slice)) { - starting_index = 2; /* we have already generated the first two blocks */ - - /* Don't forget to generate the first block of addresses: */ - if (data_independent_addressing) { - next_addresses(&address_block, &input_block, &zero_block); - } - } - - /* Offset of the current block */ - curr_offset = position.lane * instance->lane_length + - position.slice * instance->segment_length + starting_index; - - if (0 == curr_offset % instance->lane_length) { - /* Last block in this lane */ - prev_offset = curr_offset + instance->lane_length - 1; - } else { - /* Previous block */ - prev_offset = curr_offset - 1; - } - - for (i = starting_index; i < instance->segment_length; - ++i, ++curr_offset, ++prev_offset) { - /*1.1 Rotating prev_offset if needed */ - if (curr_offset % instance->lane_length == 1) { - prev_offset = curr_offset - 1; - } - - /* 1.2 Computing the index of the reference block */ - /* 1.2.1 Taking pseudo-random value from the previous block */ - if (data_independent_addressing) { - if (i % ARGON2_ADDRESSES_IN_BLOCK == 0) { - next_addresses(&address_block, &input_block, &zero_block); - } - pseudo_rand = address_block.v[i % ARGON2_ADDRESSES_IN_BLOCK]; - } else { - pseudo_rand = instance->memory[prev_offset].v[0]; - } - - /* 1.2.2 Computing the lane of the reference block */ - ref_lane = ((pseudo_rand >> 32)) % instance->lanes; - - if ((position.pass == 0) && (position.slice == 0)) { - /* Can not reference other lanes yet */ - ref_lane = position.lane; - } - - /* 1.2.3 Computing the number of possible reference block within the - * lane. - */ - position.index = i; - ref_index = index_alpha(instance, &position, pseudo_rand & 0xFFFFFFFF, - ref_lane == position.lane); - - /* 2 Creating a new block */ - ref_block = - instance->memory + instance->lane_length * ref_lane + ref_index; - curr_block = instance->memory + curr_offset; - if (ARGON2_VERSION_10 == instance->version) { - /* version 1.2.1 and earlier: overwrite, not XOR */ - fill_block(instance->memory + prev_offset, ref_block, curr_block, 0); - } else { - if(0 == position.pass) { - fill_block(instance->memory + prev_offset, ref_block, - curr_block, 0); - } else { - fill_block(instance->memory + prev_offset, ref_block, - curr_block, 1); - } - } - } -} diff --git a/pkg/urcrypt/argon2/src/run.c b/pkg/urcrypt/argon2/src/run.c deleted file mode 100644 index ede5b62d1..000000000 --- a/pkg/urcrypt/argon2/src/run.c +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#define _GNU_SOURCE 1 - -#include -#include -#include -#include -#include - -#include "argon2.h" -#include "core.h" - -#define T_COST_DEF 3 -#define LOG_M_COST_DEF 12 /* 2^12 = 4 MiB */ -#define LANES_DEF 1 -#define THREADS_DEF 1 -#define OUTLEN_DEF 32 -#define MAX_PASS_LEN 128 - -#define UNUSED_PARAMETER(x) (void)(x) - -static void usage(const char *cmd) { - printf("Usage: %s [-h] salt [-i|-d|-id] [-t iterations] " - "[-m log2(memory in KiB) | -k memory in KiB] [-p parallelism] " - "[-l hash length] [-e|-r] [-v (10|13)]\n", - cmd); - printf("\tPassword is read from stdin\n"); - printf("Parameters:\n"); - printf("\tsalt\t\tThe salt to use, at least 8 characters\n"); - printf("\t-i\t\tUse Argon2i (this is the default)\n"); - printf("\t-d\t\tUse Argon2d instead of Argon2i\n"); - printf("\t-id\t\tUse Argon2id instead of Argon2i\n"); - printf("\t-u\t\tUse Argon2u instead of Argon2i\n"); - printf("\t-t N\t\tSets the number of iterations to N (default = %d)\n", - T_COST_DEF); - printf("\t-m N\t\tSets the memory usage of 2^N KiB (default %d)\n", - LOG_M_COST_DEF); - printf("\t-k N\t\tSets the memory usage of N KiB (default %d)\n", - 1 << LOG_M_COST_DEF); - printf("\t-p N\t\tSets parallelism to N threads (default %d)\n", - THREADS_DEF); - printf("\t-l N\t\tSets hash output length to N bytes (default %d)\n", - OUTLEN_DEF); - printf("\t-e\t\tOutput only encoded hash\n"); - printf("\t-r\t\tOutput only the raw bytes of the hash\n"); - printf("\t-v (10|13)\tArgon2 version (defaults to the most recent version, currently %x)\n", - ARGON2_VERSION_NUMBER); - printf("\t-h\t\tPrint %s usage\n", cmd); -} - -static void fatal(const char *error) { - fprintf(stderr, "Error: %s\n", error); - exit(1); -} - -static void print_hex(uint8_t *bytes, size_t bytes_len) { - size_t i; - for (i = 0; i < bytes_len; ++i) { - printf("%02x", bytes[i]); - } - printf("\n"); -} - -/* -Runs Argon2 with certain inputs and parameters, inputs not cleared. Prints the -Base64-encoded hash string -@out output array with at least 32 bytes allocated -@pwd NULL-terminated string, presumably from argv[] -@salt salt array -@t_cost number of iterations -@m_cost amount of requested memory in KB -@lanes amount of requested parallelism -@threads actual parallelism -@type Argon2 type we want to run -@encoded_only display only the encoded hash -@raw_only display only the hexadecimal of the hash -@version Argon2 version -*/ -static void run(uint32_t outlen, char *pwd, size_t pwdlen, char *salt, uint32_t t_cost, - uint32_t m_cost, uint32_t lanes, uint32_t threads, - argon2_type type, int encoded_only, int raw_only, uint32_t version) { - clock_t start_time, stop_time; - size_t saltlen, encodedlen; - int result; - unsigned char * out = NULL; - char * encoded = NULL; - - start_time = clock(); - - if (!pwd) { - fatal("password missing"); - } - - if (!salt) { - clear_internal_memory(pwd, pwdlen); - fatal("salt missing"); - } - - saltlen = strlen(salt); - if(UINT32_MAX < saltlen) { - fatal("salt is too long"); - } - - UNUSED_PARAMETER(lanes); - - out = malloc(outlen + 1); - if (!out) { - clear_internal_memory(pwd, pwdlen); - fatal("could not allocate memory for output"); - } - - encodedlen = argon2_encodedlen(t_cost, m_cost, lanes, (uint32_t)saltlen, outlen, type); - encoded = malloc(encodedlen + 1); - if (!encoded) { - clear_internal_memory(pwd, pwdlen); - fatal("could not allocate memory for hash"); - } - - result = argon2_hash(t_cost, m_cost, threads, pwd, pwdlen, salt, saltlen, - out, outlen, encoded, encodedlen, type, - version); - if (result != ARGON2_OK) - fatal(argon2_error_message(result)); - - stop_time = clock(); - - if (encoded_only) - puts(encoded); - - if (raw_only) - print_hex(out, outlen); - - if (encoded_only || raw_only) { - free(out); - free(encoded); - return; - } - - printf("Hash:\t\t"); - print_hex(out, outlen); - free(out); - - printf("Encoded:\t%s\n", encoded); - - printf("%2.3f seconds\n", - ((double)stop_time - start_time) / (CLOCKS_PER_SEC)); - - result = argon2_verify(encoded, pwd, pwdlen, type); - if (result != ARGON2_OK) - fatal(argon2_error_message(result)); - printf("Verification ok\n"); - free(encoded); -} - -int main(int argc, char *argv[]) { - uint32_t outlen = OUTLEN_DEF; - uint32_t m_cost = 1 << LOG_M_COST_DEF; - uint32_t t_cost = T_COST_DEF; - uint32_t lanes = LANES_DEF; - uint32_t threads = THREADS_DEF; - argon2_type type = Argon2_i; /* Argon2i is the default type */ - int types_specified = 0; - int m_cost_specified = 0; - int encoded_only = 0; - int raw_only = 0; - uint32_t version = ARGON2_VERSION_NUMBER; - int i; - size_t pwdlen; - char pwd[MAX_PASS_LEN], *salt; - - if (argc < 2) { - usage(argv[0]); - return ARGON2_MISSING_ARGS; - } else if (argc >= 2 && strcmp(argv[1], "-h") == 0) { - usage(argv[0]); - return 1; - } - - /* get password from stdin */ - pwdlen = fread(pwd, 1, sizeof pwd, stdin); - if(pwdlen < 1) { - fatal("no password read"); - } - if(pwdlen == MAX_PASS_LEN) { - fatal("Provided password longer than supported in command line utility"); - } - - salt = argv[1]; - - /* parse options */ - for (i = 2; i < argc; i++) { - const char *a = argv[i]; - unsigned long input = 0; - if (!strcmp(a, "-h")) { - usage(argv[0]); - return 1; - } else if (!strcmp(a, "-m")) { - if (m_cost_specified) { - fatal("-m or -k can only be used once"); - } - m_cost_specified = 1; - if (i < argc - 1) { - i++; - input = strtoul(argv[i], NULL, 10); - if (input == 0 || input == ULONG_MAX || - input > ARGON2_MAX_MEMORY_BITS) { - fatal("bad numeric input for -m"); - } - m_cost = ARGON2_MIN(UINT64_C(1) << input, UINT32_C(0xFFFFFFFF)); - if (m_cost > ARGON2_MAX_MEMORY) { - fatal("m_cost overflow"); - } - continue; - } else { - fatal("missing -m argument"); - } - } else if (!strcmp(a, "-k")) { - if (m_cost_specified) { - fatal("-m or -k can only be used once"); - } - m_cost_specified = 1; - if (i < argc - 1) { - i++; - input = strtoul(argv[i], NULL, 10); - if (input == 0 || input == ULONG_MAX) { - fatal("bad numeric input for -k"); - } - m_cost = ARGON2_MIN(input, UINT32_C(0xFFFFFFFF)); - if (m_cost > ARGON2_MAX_MEMORY) { - fatal("m_cost overflow"); - } - continue; - } else { - fatal("missing -k argument"); - } - } else if (!strcmp(a, "-t")) { - if (i < argc - 1) { - i++; - input = strtoul(argv[i], NULL, 10); - if (input == 0 || input == ULONG_MAX || - input > ARGON2_MAX_TIME) { - fatal("bad numeric input for -t"); - } - t_cost = input; - continue; - } else { - fatal("missing -t argument"); - } - } else if (!strcmp(a, "-p")) { - if (i < argc - 1) { - i++; - input = strtoul(argv[i], NULL, 10); - if (input == 0 || input == ULONG_MAX || - input > ARGON2_MAX_THREADS || input > ARGON2_MAX_LANES) { - fatal("bad numeric input for -p"); - } - threads = input; - lanes = threads; - continue; - } else { - fatal("missing -p argument"); - } - } else if (!strcmp(a, "-l")) { - if (i < argc - 1) { - i++; - input = strtoul(argv[i], NULL, 10); - outlen = input; - continue; - } else { - fatal("missing -l argument"); - } - } else if (!strcmp(a, "-i")) { - type = Argon2_i; - ++types_specified; - } else if (!strcmp(a, "-d")) { - type = Argon2_d; - ++types_specified; - } else if (!strcmp(a, "-id")) { - type = Argon2_id; - ++types_specified; - } else if (!strcmp(a, "-u")) { - type = Argon2_u; - ++types_specified; - } else if (!strcmp(a, "-e")) { - encoded_only = 1; - } else if (!strcmp(a, "-r")) { - raw_only = 1; - } else if (!strcmp(a, "-v")) { - if (i < argc - 1) { - i++; - if (!strcmp(argv[i], "10")) { - version = ARGON2_VERSION_10; - } else if (!strcmp(argv[i], "13")) { - version = ARGON2_VERSION_13; - } else { - fatal("invalid Argon2 version"); - } - } else { - fatal("missing -v argument"); - } - } else { - fatal("unknown argument"); - } - } - - if (types_specified > 1) { - fatal("cannot specify multiple Argon2 types"); - } - - if(encoded_only && raw_only) - fatal("cannot provide both -e and -r"); - - if(!encoded_only && !raw_only) { - printf("Type:\t\t%s\n", argon2_type2string(type, 1)); - printf("Iterations:\t%u\n", t_cost); - printf("Memory:\t\t%u KiB\n", m_cost); - printf("Parallelism:\t%u\n", lanes); - } - - run(outlen, pwd, pwdlen, salt, t_cost, m_cost, lanes, threads, type, - encoded_only, raw_only, version); - - return ARGON2_OK; -} - diff --git a/pkg/urcrypt/argon2/src/test.c b/pkg/urcrypt/argon2/src/test.c deleted file mode 100644 index 243cd1982..000000000 --- a/pkg/urcrypt/argon2/src/test.c +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#include -#include -#include -#include -#include -#include - -#include "argon2.h" - -#define OUT_LEN 32 -#define ENCODED_LEN 108 - -/* Test harness will assert: - * argon2_hash() returns ARGON2_OK - * HEX output matches expected - * encoded output matches expected - * argon2_verify() correctly verifies value - */ - -void hashtest(uint32_t version, uint32_t t, uint32_t m, uint32_t p, char *pwd, - char *salt, char *hexref, char *mcfref) { - unsigned char out[OUT_LEN]; - unsigned char hex_out[OUT_LEN * 2 + 4]; - char encoded[ENCODED_LEN]; - int ret, i; - - printf("Hash test: $v=%d t=%d, m=%d, p=%d, pass=%s, salt=%s: ", version, - t, m, p, pwd, salt); - - ret = argon2_hash(t, 1 << m, p, pwd, strlen(pwd), salt, strlen(salt), out, - OUT_LEN, encoded, ENCODED_LEN, Argon2_i, version); - assert(ret == ARGON2_OK); - - for (i = 0; i < OUT_LEN; ++i) - sprintf((char *)(hex_out + i * 2), "%02x", out[i]); - - assert(memcmp(hex_out, hexref, OUT_LEN * 2) == 0); - - if (ARGON2_VERSION_NUMBER == version) { - assert(memcmp(encoded, mcfref, strlen(mcfref)) == 0); - } - - ret = argon2_verify(encoded, pwd, strlen(pwd), Argon2_i); - assert(ret == ARGON2_OK); - ret = argon2_verify(mcfref, pwd, strlen(pwd), Argon2_i); - assert(ret == ARGON2_OK); - - printf("PASS\n"); -} - -int main() { - int ret; - unsigned char out[OUT_LEN]; - char const *msg; - int version; - - version = ARGON2_VERSION_10; - printf("Test Argon2i version number: %02x\n", version); - - /* Multiple test cases for various input values */ - hashtest(version, 2, 16, 1, "password", "somesalt", - "f6c4db4a54e2a370627aff3db6176b94a2a209a62c8e36152711802f7b30c694", - "$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" - "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ"); -#ifdef TEST_LARGE_RAM - hashtest(version, 2, 20, 1, "password", "somesalt", - "9690ec55d28d3ed32562f2e73ea62b02b018757643a2ae6e79528459de8106e9", - "$argon2i$m=1048576,t=2,p=1$c29tZXNhbHQ" - "$lpDsVdKNPtMlYvLnPqYrArAYdXZDoq5ueVKEWd6BBuk"); -#endif - hashtest(version, 2, 18, 1, "password", "somesalt", - "3e689aaa3d28a77cf2bc72a51ac53166761751182f1ee292e3f677a7da4c2467", - "$argon2i$m=262144,t=2,p=1$c29tZXNhbHQ" - "$Pmiaqj0op3zyvHKlGsUxZnYXURgvHuKS4/Z3p9pMJGc"); - hashtest(version, 2, 8, 1, "password", "somesalt", - "fd4dd83d762c49bdeaf57c47bdcd0c2f1babf863fdeb490df63ede9975fccf06", - "$argon2i$m=256,t=2,p=1$c29tZXNhbHQ" - "$/U3YPXYsSb3q9XxHvc0MLxur+GP960kN9j7emXX8zwY"); - hashtest(version, 2, 8, 2, "password", "somesalt", - "b6c11560a6a9d61eac706b79a2f97d68b4463aa3ad87e00c07e2b01e90c564fb", - "$argon2i$m=256,t=2,p=2$c29tZXNhbHQ" - "$tsEVYKap1h6scGt5ovl9aLRGOqOth+AMB+KwHpDFZPs"); - hashtest(version, 1, 16, 1, "password", "somesalt", - "81630552b8f3b1f48cdb1992c4c678643d490b2b5eb4ff6c4b3438b5621724b2", - "$argon2i$m=65536,t=1,p=1$c29tZXNhbHQ" - "$gWMFUrjzsfSM2xmSxMZ4ZD1JCytetP9sSzQ4tWIXJLI"); - hashtest(version, 4, 16, 1, "password", "somesalt", - "f212f01615e6eb5d74734dc3ef40ade2d51d052468d8c69440a3a1f2c1c2847b", - "$argon2i$m=65536,t=4,p=1$c29tZXNhbHQ" - "$8hLwFhXm6110c03D70Ct4tUdBSRo2MaUQKOh8sHChHs"); - hashtest(version, 2, 16, 1, "differentpassword", "somesalt", - "e9c902074b6754531a3a0be519e5baf404b30ce69b3f01ac3bf21229960109a3", - "$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" - "$6ckCB0tnVFMaOgvlGeW69ASzDOabPwGsO/ISKZYBCaM"); - hashtest(version, 2, 16, 1, "password", "diffsalt", - "79a103b90fe8aef8570cb31fc8b22259778916f8336b7bdac3892569d4f1c497", - "$argon2i$m=65536,t=2,p=1$ZGlmZnNhbHQ" - "$eaEDuQ/orvhXDLMfyLIiWXeJFvgza3vaw4kladTxxJc"); - - /* Error state tests */ - - /* Handle an invalid encoding correctly (it is missing a $) */ - ret = argon2_verify("$argon2i$m=65536,t=2,p=1c29tZXNhbHQ" - "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", - "password", strlen("password"), Argon2_i); - assert(ret == ARGON2_DECODING_FAIL); - printf("Recognise an invalid encoding: PASS\n"); - - /* Handle an invalid encoding correctly (it is missing a $) */ - ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" - "9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", - "password", strlen("password"), Argon2_i); - assert(ret == ARGON2_DECODING_FAIL); - printf("Recognise an invalid encoding: PASS\n"); - - /* Handle an invalid encoding correctly (salt is too short) */ - ret = argon2_verify("$argon2i$m=65536,t=2,p=1$" - "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", - "password", strlen("password"), Argon2_i); - assert(ret == ARGON2_SALT_TOO_SHORT); - printf("Recognise an invalid salt in encoding: PASS\n"); - - /* Handle an mismatching hash (the encoded password is "passwore") */ - ret = argon2_verify("$argon2i$m=65536,t=2,p=1$c29tZXNhbHQ" - "$b2G3seW+uPzerwQQC+/E1K50CLLO7YXy0JRcaTuswRo", - "password", strlen("password"), Argon2_i); - assert(ret == ARGON2_VERIFY_MISMATCH); - printf("Verify with mismatched password: PASS\n"); - - msg = argon2_error_message(ARGON2_DECODING_FAIL); - assert(strcmp(msg, "Decoding failed") == 0); - printf("Decode an error message: PASS\n"); - - printf("\n"); - - version = ARGON2_VERSION_NUMBER; - printf("Test Argon2i version number: %02x\n", version); - - /* Multiple test cases for various input values */ - hashtest(version, 2, 16, 1, "password", "somesalt", - "c1628832147d9720c5bd1cfd61367078729f6dfb6f8fea9ff98158e0d7816ed0", - "$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" - "$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA"); -#ifdef TEST_LARGE_RAM - hashtest(version, 2, 20, 1, "password", "somesalt", - "d1587aca0922c3b5d6a83edab31bee3c4ebaef342ed6127a55d19b2351ad1f41", - "$argon2i$v=19$m=1048576,t=2,p=1$c29tZXNhbHQ" - "$0Vh6ygkiw7XWqD7asxvuPE667zQu1hJ6VdGbI1GtH0E"); -#endif - hashtest(version, 2, 18, 1, "password", "somesalt", - "296dbae80b807cdceaad44ae741b506f14db0959267b183b118f9b24229bc7cb", - "$argon2i$v=19$m=262144,t=2,p=1$c29tZXNhbHQ" - "$KW266AuAfNzqrUSudBtQbxTbCVkmexg7EY+bJCKbx8s"); - hashtest(version, 2, 8, 1, "password", "somesalt", - "89e9029f4637b295beb027056a7336c414fadd43f6b208645281cb214a56452f", - "$argon2i$v=19$m=256,t=2,p=1$c29tZXNhbHQ" - "$iekCn0Y3spW+sCcFanM2xBT63UP2sghkUoHLIUpWRS8"); - hashtest(version, 2, 8, 2, "password", "somesalt", - "4ff5ce2769a1d7f4c8a491df09d41a9fbe90e5eb02155a13e4c01e20cd4eab61", - "$argon2i$v=19$m=256,t=2,p=2$c29tZXNhbHQ" - "$T/XOJ2mh1/TIpJHfCdQan76Q5esCFVoT5MAeIM1Oq2E"); - hashtest(version, 1, 16, 1, "password", "somesalt", - "d168075c4d985e13ebeae560cf8b94c3b5d8a16c51916b6f4ac2da3ac11bbecf", - "$argon2i$v=19$m=65536,t=1,p=1$c29tZXNhbHQ" - "$0WgHXE2YXhPr6uVgz4uUw7XYoWxRkWtvSsLaOsEbvs8"); - hashtest(version, 4, 16, 1, "password", "somesalt", - "aaa953d58af3706ce3df1aefd4a64a84e31d7f54175231f1285259f88174ce5b", - "$argon2i$v=19$m=65536,t=4,p=1$c29tZXNhbHQ" - "$qqlT1YrzcGzj3xrv1KZKhOMdf1QXUjHxKFJZ+IF0zls"); - hashtest(version, 2, 16, 1, "differentpassword", "somesalt", - "14ae8da01afea8700c2358dcef7c5358d9021282bd88663a4562f59fb74d22ee", - "$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" - "$FK6NoBr+qHAMI1jc73xTWNkCEoK9iGY6RWL1n7dNIu4"); - hashtest(version, 2, 16, 1, "password", "diffsalt", - "b0357cccfbef91f3860b0dba447b2348cbefecadaf990abfe9cc40726c521271", - "$argon2i$v=19$m=65536,t=2,p=1$ZGlmZnNhbHQ" - "$sDV8zPvvkfOGCw26RHsjSMvv7K2vmQq/6cxAcmxSEnE"); - - /* Error state tests */ - - /* Handle an invalid encoding correctly (it is missing a $) */ - ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1c29tZXNhbHQ" - "$wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", - "password", strlen("password"), Argon2_i); - assert(ret == ARGON2_DECODING_FAIL); - printf("Recognise an invalid encoding: PASS\n"); - - /* Handle an invalid encoding correctly (it is missing a $) */ - ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" - "wWKIMhR9lyDFvRz9YTZweHKfbftvj+qf+YFY4NeBbtA", - "password", strlen("password"), Argon2_i); - assert(ret == ARGON2_DECODING_FAIL); - printf("Recognise an invalid encoding: PASS\n"); - - /* Handle an invalid encoding correctly (salt is too short) */ - ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$" - "$9sTbSlTio3Biev89thdrlKKiCaYsjjYVJxGAL3swxpQ", - "password", strlen("password"), Argon2_i); - assert(ret == ARGON2_SALT_TOO_SHORT); - printf("Recognise an invalid salt in encoding: PASS\n"); - - /* Handle an mismatching hash (the encoded password is "passwore") */ - ret = argon2_verify("$argon2i$v=19$m=65536,t=2,p=1$c29tZXNhbHQ" - "$8iIuixkI73Js3G1uMbezQXD0b8LG4SXGsOwoQkdAQIM", - "password", strlen("password"), Argon2_i); - assert(ret == ARGON2_VERIFY_MISMATCH); - printf("Verify with mismatched password: PASS\n"); - - msg = argon2_error_message(ARGON2_DECODING_FAIL); - assert(strcmp(msg, "Decoding failed") == 0); - printf("Decode an error message: PASS\n"); - - /* Common error state tests */ - - printf("\n"); - printf("Common error state tests\n"); - - ret = argon2_hash(2, 1, 1, "password", strlen("password"), - "diffsalt", strlen("diffsalt"), - out, OUT_LEN, NULL, 0, Argon2_i, version); - assert(ret == ARGON2_MEMORY_TOO_LITTLE); - printf("Fail on invalid memory: PASS\n"); - - ret = argon2_hash(2, 1 << 12, 1, NULL, strlen("password"), - "diffsalt", strlen("diffsalt"), - out, OUT_LEN, NULL, 0, Argon2_i, version); - assert(ret == ARGON2_PWD_PTR_MISMATCH); - printf("Fail on invalid null pointer: PASS\n"); - - ret = argon2_hash(2, 1 << 12, 1, "password", strlen("password"), "s", 1, - out, OUT_LEN, NULL, 0, Argon2_i, version); - assert(ret == ARGON2_SALT_TOO_SHORT); - printf("Fail on salt too short: PASS\n"); - - return 0; -} diff --git a/pkg/urcrypt/argon2/src/thread.c b/pkg/urcrypt/argon2/src/thread.c deleted file mode 100644 index e099a00d2..000000000 --- a/pkg/urcrypt/argon2/src/thread.c +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#if !defined(ARGON2_NO_THREADS) - -#include "thread.h" -#if defined(_WIN32) -#include -#endif - -int argon2_thread_create(argon2_thread_handle_t *handle, - argon2_thread_func_t func, void *args) { - if (NULL == handle || func == NULL) { - return -1; - } -#if defined(_WIN32) - *handle = _beginthreadex(NULL, 0, func, args, 0, NULL); - return *handle != 0 ? 0 : -1; -#else - return pthread_create(handle, NULL, func, args); -#endif -} - -int argon2_thread_join(argon2_thread_handle_t handle) { -#if defined(_WIN32) - if (WaitForSingleObject((HANDLE)handle, INFINITE) == WAIT_OBJECT_0) { - return CloseHandle((HANDLE)handle) != 0 ? 0 : -1; - } - return -1; -#else - return pthread_join(handle, NULL); -#endif -} - -void argon2_thread_exit(void) { -#if defined(_WIN32) - _endthreadex(0); -#else - pthread_exit(NULL); -#endif -} - -#endif /* ARGON2_NO_THREADS */ diff --git a/pkg/urcrypt/argon2/src/thread.h b/pkg/urcrypt/argon2/src/thread.h deleted file mode 100644 index 49d88367b..000000000 --- a/pkg/urcrypt/argon2/src/thread.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Argon2 reference source code package - reference C implementations - * - * Copyright 2015 - * Daniel Dinu, Dmitry Khovratovich, Jean-Philippe Aumasson, and Samuel Neves - * - * You may use this work under the terms of a Creative Commons CC0 1.0 - * License/Waiver or the Apache Public License 2.0, at your option. The terms of - * these licenses can be found at: - * - * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0 - * - Apache 2.0 : http://www.apache.org/licenses/LICENSE-2.0 - * - * You should have received a copy of both of these licenses along with this - * software. If not, they may be obtained at the above URLs. - */ - -#ifndef ARGON2_THREAD_H -#define ARGON2_THREAD_H - -#if !defined(ARGON2_NO_THREADS) - -/* - Here we implement an abstraction layer for the simpĺe requirements - of the Argon2 code. We only require 3 primitives---thread creation, - joining, and termination---so full emulation of the pthreads API - is unwarranted. Currently we wrap pthreads and Win32 threads. - - The API defines 2 types: the function pointer type, - argon2_thread_func_t, - and the type of the thread handle---argon2_thread_handle_t. -*/ -#if defined(_WIN32) -#include -typedef unsigned(__stdcall *argon2_thread_func_t)(void *); -typedef uintptr_t argon2_thread_handle_t; -#else -#include -typedef void *(*argon2_thread_func_t)(void *); -typedef pthread_t argon2_thread_handle_t; -#endif - -/* Creates a thread - * @param handle pointer to a thread handle, which is the output of this - * function. Must not be NULL. - * @param func A function pointer for the thread's entry point. Must not be - * NULL. - * @param args Pointer that is passed as an argument to @func. May be NULL. - * @return 0 if @handle and @func are valid pointers and a thread is successfully - * created. - */ -int argon2_thread_create(argon2_thread_handle_t *handle, - argon2_thread_func_t func, void *args); - -/* Waits for a thread to terminate - * @param handle Handle to a thread created with argon2_thread_create. - * @return 0 if @handle is a valid handle, and joining completed successfully. -*/ -int argon2_thread_join(argon2_thread_handle_t handle); - -/* Terminate the current thread. Must be run inside a thread created by - * argon2_thread_create. -*/ -void argon2_thread_exit(void); - -#endif /* ARGON2_NO_THREADS */ -#endif diff --git a/pkg/urcrypt/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj deleted file mode 100644 index e0286391a..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj +++ /dev/null @@ -1,226 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {CAA75C57-998C-494E-B8A5-5894EF0FC528} - Argon2Opt - 8.1 - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters deleted file mode 100644 index 536602bde..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2Opt/Argon2Opt.vcxproj.filters +++ /dev/null @@ -1,69 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/pkg/urcrypt/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj deleted file mode 100644 index 92e8b94dc..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj +++ /dev/null @@ -1,226 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {B3A0FB44-0C1C-4EC3-B155-8B39371F8EE4} - Argon2OptBench - 8.1 - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters deleted file mode 100644 index 0cc0d957b..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2OptBench/Argon2OptBench.vcxproj.filters +++ /dev/null @@ -1,69 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/pkg/urcrypt/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj deleted file mode 100644 index d4d70c05c..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj +++ /dev/null @@ -1,225 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {3A898DD8-ACAE-4269-ADFE-EB7260D71583} - Argon2OptDll - 8.1 - - - - DynamicLibrary - true - v140 - MultiByte - - - DynamicLibrary - false - v140 - true - MultiByte - - - DynamicLibrary - false - v140 - true - MultiByte - - - DynamicLibrary - true - v140 - MultiByte - - - DynamicLibrary - false - v140 - true - MultiByte - - - DynamicLibrary - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters deleted file mode 100644 index c7a778817..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2OptDll/Argon2OptDll.vcxproj.filters +++ /dev/null @@ -1,66 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj deleted file mode 100644 index 5ce460bf2..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj +++ /dev/null @@ -1,239 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {DBBAAAE6-4560-4D11-8280-30A6650A82EF} - Argon2OptGenKAT - 8.1 - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters deleted file mode 100644 index ff8595575..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2OptGenKAT/Argon2OptGenKAT.vcxproj.filters +++ /dev/null @@ -1,72 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/pkg/urcrypt/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj deleted file mode 100644 index 3c9527899..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj +++ /dev/null @@ -1,227 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {12956597-5E42-433A-93F3-D4EFF50AA207} - Argon2 - 8.1 - Argon2OptTestCI - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters deleted file mode 100644 index bcd4dabc4..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2OptTestCI/Argon2OptTestCI.vcxproj.filters +++ /dev/null @@ -1,69 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - \ No newline at end of file diff --git a/pkg/urcrypt/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj deleted file mode 100644 index e54fb3255..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj +++ /dev/null @@ -1,226 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {B9CAC9CE-9F0D-4F52-8D67-FDBBAFCD0DE2} - Argon2Ref - 8.1 - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters deleted file mode 100644 index 379cf2e49..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2Ref/Argon2Ref.vcxproj.filters +++ /dev/null @@ -1,69 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/pkg/urcrypt/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj deleted file mode 100644 index e4f781f64..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj +++ /dev/null @@ -1,226 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {99203F6A-6E8C-42FC-8C7C-C07E8913D539} - Argon2RefBench - 8.1 - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters deleted file mode 100644 index 222279aa5..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2RefBench/Argon2RefBench.vcxproj.filters +++ /dev/null @@ -1,69 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/pkg/urcrypt/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj deleted file mode 100644 index 6713e3e9c..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj +++ /dev/null @@ -1,225 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {19D911A1-533C-4475-B313-F372481A35D4} - Argon2RefDll - 8.1 - - - - DynamicLibrary - true - v140 - MultiByte - - - DynamicLibrary - false - v140 - true - MultiByte - - - DynamicLibrary - false - v140 - true - MultiByte - - - DynamicLibrary - true - v140 - MultiByte - - - DynamicLibrary - false - v140 - true - MultiByte - - - DynamicLibrary - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters deleted file mode 100644 index ad43f914b..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2RefDll/Argon2RefDll.vcxproj.filters +++ /dev/null @@ -1,66 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj deleted file mode 100644 index c2087281b..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj +++ /dev/null @@ -1,227 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {71921B4C-A795-4A37-95A3-99D600E01211} - Argon2RefGenKAT - 8.1 - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - $(SolutionDir)include;$(IncludePath) - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;GENKAT;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters deleted file mode 100644 index 8490c8a9a..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2RefGenKAT/Argon2RefGenKAT.vcxproj.filters +++ /dev/null @@ -1,72 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/pkg/urcrypt/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj b/pkg/urcrypt/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj deleted file mode 100644 index d482f45e9..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj +++ /dev/null @@ -1,226 +0,0 @@ - - - - - Debug - Win32 - - - ReleaseStatic - Win32 - - - ReleaseStatic - x64 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {8A1F7F84-34AF-4DB2-9D58-D4823DFE79E9} - Argon2RefTestCI - 8.1 - - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - true - v140 - MultiByte - - - Application - false - v140 - true - MultiByte - - - Application - false - v140 - true - MultiByte - - - - - - - - - - - - - - - - - - - - - - - - - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - $(SolutionDir)include;$(IncludePath) - $(SolutionDir)vs2015\build\ - $(SolutionDir)vs2015\build\$(ProjectName)\ - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - Disabled - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - - - true - true - - - - - Level3 - MaxSpeed - true - true - true - _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreaded - - - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pkg/urcrypt/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters b/pkg/urcrypt/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters deleted file mode 100644 index 32bca82c5..000000000 --- a/pkg/urcrypt/argon2/vs2015/Argon2RefTestCI/Argon2RefTestCI.vcxproj.filters +++ /dev/null @@ -1,69 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - \ No newline at end of file diff --git a/pkg/urcrypt/autogen.sh b/pkg/urcrypt/autogen.sh deleted file mode 100755 index 65286b935..000000000 --- a/pkg/urcrypt/autogen.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -e -autoreconf -if --warnings=all diff --git a/pkg/urcrypt/build-aux/m4/.gitkeep b/pkg/urcrypt/build-aux/m4/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/pkg/urcrypt/configure.ac b/pkg/urcrypt/configure.ac deleted file mode 100644 index bdf78c10f..000000000 --- a/pkg/urcrypt/configure.ac +++ /dev/null @@ -1,119 +0,0 @@ -# -*- Autoconf -*- -# Process this file with autoconf to produce a configure script. - -# There are two versions numbers that must be updated on each public release. -# 1. The libtool version (useful to the linker) -# 2. The semantic version (useful to humans) - -# Follow these instructions sequentially for the libtool version: -# 1. If the library source code has changed at all since the last update, -# then increment revision (‘c:r:a’ becomes ‘c:r+1:a’). -# 2. If any interfaces have been added, removed, or changed since the last -# update, increment current, and set revision to 0. -# 3. If any interfaces have been added since the last public release, -# then increment age. -# 4. If any interfaces have been removed or changed since the last public -# release, then set age to 0. -m4_define([urcrypt_lt_current], [0]) -m4_define([urcrypt_lt_revision], [0]) -m4_define([urcrypt_lt_age], [0]) - -# The package version uses semantic versioning (semver.org). -# In summary,increment the: -# 1. MAJOR version when you make incompatible API changes, -# 2. MINOR version when you add functionality in a backwards compatible manner, and -# 3. PATCH version when you make backwards compatible bug fixes. -m4_define([urcrypt_sv_major], [0]) -m4_define([urcrypt_sv_minor], [1]) -m4_define([urcrypt_sv_patch], [0]) - -# Initialize autoconf -AC_PREREQ([2.69]) -AC_INIT([urcrypt], [urcrypt_sv_major.urcrypt_sv_minor.urcrypt_sv_patch]) -AC_SUBST([URCRYPT_API_VERSION], [urcrypt_sv_major]) -AC_SUBST([URCRYPT_LT_VERSION], - [urcrypt_lt_current:urcrypt_lt_revision:urcrypt_lt_age]) - -AC_CONFIG_SRCDIR([urcrypt/util.c]) -AC_CONFIG_HEADERS([config.h]) -AC_CONFIG_AUX_DIR([build-aux]) -AC_CONFIG_MACRO_DIR([build-aux/m4]) -AC_CANONICAL_HOST - -# Initialize automake -AM_INIT_AUTOMAKE([foreign subdir-objects -Wall -Werror]) - -# Initialize libtool -AM_PROG_AR -LT_INIT - -# Initialize pkgconfig -PKG_PROG_PKG_CONFIG -PKG_INSTALLDIR - -# Checks for programs -AC_PROG_CC - -# Checks for pkg-config capable libraries -PKG_CHECK_MODULES([LIBSECP256K1], [libsecp256k1]) -AC_CHECK_HEADER([secp256k1_recovery.h], [], - [AC_MSG_ERROR([libsecp256k1 must have recovery enabled.])]) -AC_CHECK_HEADER([secp256k1_schnorrsig.h], [], - [AC_MSG_ERROR([libsecp256k1 must have Schnorr signatures enabled.])]) -PKG_CHECK_MODULES([LIBCRYPTO], [libcrypto]) - -AS_IF([test "$enable_shared" == "yes"], - [# ensure crypto will be shared for shared object (see README.md) - save_LDFLAGS=$LDFLAGS - save_CLAGS=$CFLAGS - LDFLAGS=$LIBCRYPTO_LIBS - CFLAGS=$LIBCRYPTO_CFLAGS - AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], - [[unsigned char sha[32]; - SHA256("hello", 5, sha);]])], - [AC_PROG_GREP - AC_CHECK_TOOL([NM], [nm]) - AC_MSG_CHECKING([for shared libcrypto]) - AS_IF( - [$NM conftest$EXEEXT | $GREP 'U .*SHA256' 2>&1 >/dev/null], - [AC_MSG_RESULT([yes])], - [AC_MSG_ERROR([cannot find shared object for libcrypto.])])], - [AC_MSG_ERROR([unable to link libcrypto.])]) - LDFLAGS=$save_LDFLAGS - CFLAGS=$save_CFLAGS]) - -# Checks for non pkg-config libraries -AC_CHECK_LIB([aes_siv], [AES_SIV_CTX_new], - [AC_SUBST([LIBAES_SIV_LIBS], "-laes_siv")], - [AC_MSG_ERROR([libaes_siv is required.])], - [-lcrypto]) - -# Checks for header files. -AC_CHECK_HEADERS([limits.h stddef.h stdint.h stdlib.h string.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_CHECK_HEADER_STDBOOL -AC_TYPE_INT32_T -AC_TYPE_INT64_T -AC_TYPE_SIZE_T -AC_TYPE_UINT32_T -AC_TYPE_UINT64_T -AC_TYPE_UINT8_T - -# Checks for library functions. -AC_CHECK_FUNCS([memset]) - -# Checks for CPU architecture, uses SSE instructions if on X86_64 -AS_CASE([$host_cpu], - [x86_64], [ARCH=x86_64 - AC_MSG_WARN("Architecture x86_64: Building libargon2 with optimizations")], - [ARCH=generic - AC_MSG_WARN("Architecture $host_cpu is not x86_64: Building libargon2 without optimizations")] -) -AC_SUBST([ARCH]) -AM_CONDITIONAL([ARCH_X86_64], [test "$ARCH" = 'x86_64']) -AM_CONDITIONAL([ARCH_GENERIC], [test "$ARCH" = 'generic']) - -# Finish and output -AC_CONFIG_FILES([Makefile liburcrypt-$URCRYPT_API_VERSION.pc:liburcrypt.pc.in]) -AC_OUTPUT diff --git a/pkg/urcrypt/ed25519/license.txt b/pkg/urcrypt/ed25519/license.txt deleted file mode 100644 index c1503f912..000000000 --- a/pkg/urcrypt/ed25519/license.txt +++ /dev/null @@ -1,16 +0,0 @@ -Copyright (c) 2015 Orson Peters - -This software is provided 'as-is', without any express or implied warranty. In no event will the -authors be held liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including commercial -applications, and to alter it and redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the - original software. If you use this software in a product, an acknowledgment in the product - documentation would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be misrepresented as - being the original software. - -3. This notice may not be removed or altered from any source distribution. diff --git a/pkg/urcrypt/ed25519/readme.md b/pkg/urcrypt/ed25519/readme.md deleted file mode 100644 index 89329bbe4..000000000 --- a/pkg/urcrypt/ed25519/readme.md +++ /dev/null @@ -1,166 +0,0 @@ -Ed25519 -======= - -This is a portable implementation of [Ed25519](http://ed25519.cr.yp.to/) based -on the SUPERCOP "ref10" implementation. Additionally there is key exchanging -and scalar addition included to further aid building a PKI using Ed25519. All -code is licensed under the permissive zlib license. - -All code is pure ANSI C without any dependencies, except for the random seed -generation which uses standard OS cryptography APIs (`CryptGenRandom` on -Windows, `/dev/urandom` on nix). If you wish to be entirely portable define -`ED25519_NO_SEED`. This disables the `ed25519_create_seed` function, so if your -application requires key generation you must supply your own seeding function -(which is simply a 256 bit (32 byte) cryptographic random number generator). - - -Performance ------------ - -On a Windows machine with an Intel Pentium B970 @ 2.3GHz I got the following -speeds (running on only one a single core): - - Seed generation: 64us (15625 per second) - Key generation: 88us (11364 per second) - Message signing (short message): 87us (11494 per second) - Message verifying (short message): 228us (4386 per second) - Scalar addition: 100us (10000 per second) - Key exchange: 220us (4545 per second) - -The speeds on other machines may vary. Sign/verify times will be higher with -longer messages. The implementation significantly benefits from 64 bit -architectures, if possible compile as 64 bit. - - -Usage ------ - -Simply add all .c and .h files in the `src/` folder to your project and include -`ed25519.h` in any file you want to use the API. If you prefer to use a shared -library, only copy `ed25519.h` and define `ED25519_DLL` before importing. A -windows DLL is pre-built. - -There are no defined types for seeds, private keys, public keys, shared secrets -or signatures. Instead simple `unsigned char` buffers are used with the -following sizes: - -```c -unsigned char seed[32]; -unsigned char signature[64]; -unsigned char public_key[32]; -unsigned char private_key[64]; -unsigned char scalar[32]; -unsigned char shared_secret[32]; -``` - -API ---- - -```c -int ed25519_create_seed(unsigned char *seed); -``` - -Creates a 32 byte random seed in `seed` for key generation. `seed` must be a -writable 32 byte buffer. Returns 0 on success, and nonzero on failure. - -```c -void ed25519_create_keypair(unsigned char *public_key, unsigned char *private_key, - const unsigned char *seed); -``` - -Creates a new key pair from the given seed. `public_key` must be a writable 32 -byte buffer, `private_key` must be a writable 64 byte buffer and `seed` must be -a 32 byte buffer. - -```c -void ed25519_sign(unsigned char *signature, - const unsigned char *message, size_t message_len, - const unsigned char *public_key, const unsigned char *private_key); -``` - -Creates a signature of the given message with the given key pair. `signature` -must be a writable 64 byte buffer. `message` must have at least `message_len` -bytes to be read. - -```c -int ed25519_verify(const unsigned char *signature, - const unsigned char *message, size_t message_len, - const unsigned char *public_key); -``` - -Verifies the signature on the given message using `public_key`. `signature` -must be a readable 64 byte buffer. `message` must have at least `message_len` -bytes to be read. Returns 1 if the signature matches, 0 otherwise. - -```c -void ed25519_add_scalar(unsigned char *public_key, unsigned char *private_key, - const unsigned char *scalar); -``` - -Adds `scalar` to the given key pair where scalar is a 32 byte buffer (possibly -generated with `ed25519_create_seed`), generating a new key pair. You can -calculate the public key sum without knowing the private key and vice versa by -passing in `NULL` for the key you don't know. This is useful for enforcing -randomness on a key pair by a third party while only knowing the public key, -among other things. Warning: the last bit of the scalar is ignored - if -comparing scalars make sure to clear it with `scalar[31] &= 127`. - - -```c -void ed25519_key_exchange(unsigned char *shared_secret, - const unsigned char *public_key, const unsigned char *private_key); -``` - -Performs a key exchange on the given public key and private key, producing a -shared secret. It is recommended to hash the shared secret before using it. -`shared_secret` must be a 32 byte writable buffer where the shared secret will -be stored. - -Example -------- - -```c -unsigned char seed[32], public_key[32], private_key[64], signature[64]; -unsigned char other_public_key[32], other_private_key[64], shared_secret[32]; -const unsigned char message[] = "TEST MESSAGE"; - -/* create a random seed, and a key pair out of that seed */ -if (ed25519_create_seed(seed)) { - printf("error while generating seed\n"); - exit(1); -} - -ed25519_create_keypair(public_key, private_key, seed); - -/* create signature on the message with the key pair */ -ed25519_sign(signature, message, strlen(message), public_key, private_key); - -/* verify the signature */ -if (ed25519_verify(signature, message, strlen(message), public_key)) { - printf("valid signature\n"); -} else { - printf("invalid signature\n"); -} - -/* create a dummy keypair to use for a key exchange, normally you'd only have -the public key and receive it through some communication channel */ -if (ed25519_create_seed(seed)) { - printf("error while generating seed\n"); - exit(1); -} - -ed25519_create_keypair(other_public_key, other_private_key, seed); - -/* do a key exchange with other_public_key */ -ed25519_key_exchange(shared_secret, other_public_key, private_key); - -/* - the magic here is that ed25519_key_exchange(shared_secret, public_key, - other_private_key); would result in the same shared_secret -*/ - -``` - -License -------- -All code is released under the zlib license. See license.txt for details. diff --git a/pkg/urcrypt/ed25519/src/add_scalar.c b/pkg/urcrypt/ed25519/src/add_scalar.c deleted file mode 100644 index 7528a7a4a..000000000 --- a/pkg/urcrypt/ed25519/src/add_scalar.c +++ /dev/null @@ -1,69 +0,0 @@ -#include "ed25519.h" -#include "ge.h" -#include "sc.h" -#include "sha512.h" - - -/* see http://crypto.stackexchange.com/a/6215/4697 */ -void ed25519_add_scalar(unsigned char *public_key, unsigned char *private_key, const unsigned char *scalar) { - const unsigned char SC_1[32] = {1}; /* scalar with value 1 */ - - unsigned char n[32]; - ge_p3 nB; - ge_p1p1 A_p1p1; - ge_p3 A; - ge_p3 public_key_unpacked; - ge_cached T; - - sha512_context hash; - unsigned char hashbuf[64]; - - int i; - - /* copy the scalar and clear highest bit */ - for (i = 0; i < 31; ++i) { - n[i] = scalar[i]; - } - n[31] = scalar[31] & 127; - - /* private key: a = n + t */ - if (private_key) { - sc_muladd(private_key, SC_1, n, private_key); - - // https://github.com/orlp/ed25519/issues/3 - sha512_init(&hash); - sha512_update(&hash, private_key + 32, 32); - sha512_update(&hash, scalar, 32); - sha512_final(&hash, hashbuf); - for (i = 0; i < 32; ++i) { - private_key[32 + i] = hashbuf[i]; - } - } - - /* public key: A = nB + T */ - if (public_key) { - /* if we know the private key we don't need a point addition, which is faster */ - /* using a "timing attack" you could find out wether or not we know the private - key, but this information seems rather useless - if this is important pass - public_key and private_key seperately in 2 function calls */ - if (private_key) { - ge_scalarmult_base(&A, private_key); - } else { - /* unpack public key into T */ - ge_frombytes_negate_vartime(&public_key_unpacked, public_key); - fe_neg(public_key_unpacked.X, public_key_unpacked.X); /* undo negate */ - fe_neg(public_key_unpacked.T, public_key_unpacked.T); /* undo negate */ - ge_p3_to_cached(&T, &public_key_unpacked); - - /* calculate n*B */ - ge_scalarmult_base(&nB, n); - - /* A = n*B + T */ - ge_add(&A_p1p1, &nB, &T); - ge_p1p1_to_p3(&A, &A_p1p1); - } - - /* pack public key */ - ge_p3_tobytes(public_key, &A); - } -} diff --git a/pkg/urcrypt/ed25519/src/ed25519.h b/pkg/urcrypt/ed25519/src/ed25519.h deleted file mode 100644 index 8924659fa..000000000 --- a/pkg/urcrypt/ed25519/src/ed25519.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef ED25519_H -#define ED25519_H - -#include - -#if defined(_WIN32) - #if defined(ED25519_BUILD_DLL) - #define ED25519_DECLSPEC __declspec(dllexport) - #elif defined(ED25519_DLL) - #define ED25519_DECLSPEC __declspec(dllimport) - #else - #define ED25519_DECLSPEC - #endif -#else - #define ED25519_DECLSPEC -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef ED25519_NO_SEED -int ED25519_DECLSPEC ed25519_create_seed(unsigned char *seed); -#endif - -void ED25519_DECLSPEC ed25519_create_keypair(unsigned char *public_key, unsigned char *private_key, const unsigned char *seed); -void ED25519_DECLSPEC ed25519_sign(unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key, const unsigned char *private_key); -int ED25519_DECLSPEC ed25519_verify(const unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key); -void ED25519_DECLSPEC ed25519_add_scalar(unsigned char *public_key, unsigned char *private_key, const unsigned char *scalar); -void ED25519_DECLSPEC ed25519_key_exchange(unsigned char *shared_secret, const unsigned char *public_key, const unsigned char *private_key); - - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/pkg/urcrypt/ed25519/src/fe.c b/pkg/urcrypt/ed25519/src/fe.c deleted file mode 100644 index 2105eb7b2..000000000 --- a/pkg/urcrypt/ed25519/src/fe.c +++ /dev/null @@ -1,1491 +0,0 @@ -#include "fixedint.h" -#include "fe.h" - - -/* - helper functions -*/ -static uint64_t load_3(const unsigned char *in) { - uint64_t result; - - result = (uint64_t) in[0]; - result |= ((uint64_t) in[1]) << 8; - result |= ((uint64_t) in[2]) << 16; - - return result; -} - -static uint64_t load_4(const unsigned char *in) { - uint64_t result; - - result = (uint64_t) in[0]; - result |= ((uint64_t) in[1]) << 8; - result |= ((uint64_t) in[2]) << 16; - result |= ((uint64_t) in[3]) << 24; - - return result; -} - - - -/* - h = 0 -*/ - -void fe_0(fe h) { - h[0] = 0; - h[1] = 0; - h[2] = 0; - h[3] = 0; - h[4] = 0; - h[5] = 0; - h[6] = 0; - h[7] = 0; - h[8] = 0; - h[9] = 0; -} - - - -/* - h = 1 -*/ - -void fe_1(fe h) { - h[0] = 1; - h[1] = 0; - h[2] = 0; - h[3] = 0; - h[4] = 0; - h[5] = 0; - h[6] = 0; - h[7] = 0; - h[8] = 0; - h[9] = 0; -} - - - -/* - h = f + g - Can overlap h with f or g. - - Preconditions: - |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - - Postconditions: - |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. -*/ - -void fe_add(fe h, const fe f, const fe g) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int32_t g0 = g[0]; - int32_t g1 = g[1]; - int32_t g2 = g[2]; - int32_t g3 = g[3]; - int32_t g4 = g[4]; - int32_t g5 = g[5]; - int32_t g6 = g[6]; - int32_t g7 = g[7]; - int32_t g8 = g[8]; - int32_t g9 = g[9]; - int32_t h0 = f0 + g0; - int32_t h1 = f1 + g1; - int32_t h2 = f2 + g2; - int32_t h3 = f3 + g3; - int32_t h4 = f4 + g4; - int32_t h5 = f5 + g5; - int32_t h6 = f6 + g6; - int32_t h7 = f7 + g7; - int32_t h8 = f8 + g8; - int32_t h9 = f9 + g9; - - h[0] = h0; - h[1] = h1; - h[2] = h2; - h[3] = h3; - h[4] = h4; - h[5] = h5; - h[6] = h6; - h[7] = h7; - h[8] = h8; - h[9] = h9; -} - - - -/* - Replace (f,g) with (g,g) if b == 1; - replace (f,g) with (f,g) if b == 0. - - Preconditions: b in {0,1}. -*/ - -void fe_cmov(fe f, const fe g, unsigned int b) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int32_t g0 = g[0]; - int32_t g1 = g[1]; - int32_t g2 = g[2]; - int32_t g3 = g[3]; - int32_t g4 = g[4]; - int32_t g5 = g[5]; - int32_t g6 = g[6]; - int32_t g7 = g[7]; - int32_t g8 = g[8]; - int32_t g9 = g[9]; - int32_t x0 = f0 ^ g0; - int32_t x1 = f1 ^ g1; - int32_t x2 = f2 ^ g2; - int32_t x3 = f3 ^ g3; - int32_t x4 = f4 ^ g4; - int32_t x5 = f5 ^ g5; - int32_t x6 = f6 ^ g6; - int32_t x7 = f7 ^ g7; - int32_t x8 = f8 ^ g8; - int32_t x9 = f9 ^ g9; - - b = (unsigned int) (- (int) b); /* silence warning */ - x0 &= b; - x1 &= b; - x2 &= b; - x3 &= b; - x4 &= b; - x5 &= b; - x6 &= b; - x7 &= b; - x8 &= b; - x9 &= b; - - f[0] = f0 ^ x0; - f[1] = f1 ^ x1; - f[2] = f2 ^ x2; - f[3] = f3 ^ x3; - f[4] = f4 ^ x4; - f[5] = f5 ^ x5; - f[6] = f6 ^ x6; - f[7] = f7 ^ x7; - f[8] = f8 ^ x8; - f[9] = f9 ^ x9; -} - -/* - Replace (f,g) with (g,f) if b == 1; - replace (f,g) with (f,g) if b == 0. - - Preconditions: b in {0,1}. -*/ - -void fe_cswap(fe f,fe g,unsigned int b) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int32_t g0 = g[0]; - int32_t g1 = g[1]; - int32_t g2 = g[2]; - int32_t g3 = g[3]; - int32_t g4 = g[4]; - int32_t g5 = g[5]; - int32_t g6 = g[6]; - int32_t g7 = g[7]; - int32_t g8 = g[8]; - int32_t g9 = g[9]; - int32_t x0 = f0 ^ g0; - int32_t x1 = f1 ^ g1; - int32_t x2 = f2 ^ g2; - int32_t x3 = f3 ^ g3; - int32_t x4 = f4 ^ g4; - int32_t x5 = f5 ^ g5; - int32_t x6 = f6 ^ g6; - int32_t x7 = f7 ^ g7; - int32_t x8 = f8 ^ g8; - int32_t x9 = f9 ^ g9; - b = (unsigned int) (- (int) b); /* silence warning */ - x0 &= b; - x1 &= b; - x2 &= b; - x3 &= b; - x4 &= b; - x5 &= b; - x6 &= b; - x7 &= b; - x8 &= b; - x9 &= b; - f[0] = f0 ^ x0; - f[1] = f1 ^ x1; - f[2] = f2 ^ x2; - f[3] = f3 ^ x3; - f[4] = f4 ^ x4; - f[5] = f5 ^ x5; - f[6] = f6 ^ x6; - f[7] = f7 ^ x7; - f[8] = f8 ^ x8; - f[9] = f9 ^ x9; - g[0] = g0 ^ x0; - g[1] = g1 ^ x1; - g[2] = g2 ^ x2; - g[3] = g3 ^ x3; - g[4] = g4 ^ x4; - g[5] = g5 ^ x5; - g[6] = g6 ^ x6; - g[7] = g7 ^ x7; - g[8] = g8 ^ x8; - g[9] = g9 ^ x9; -} - - - -/* - h = f -*/ - -void fe_copy(fe h, const fe f) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - - h[0] = f0; - h[1] = f1; - h[2] = f2; - h[3] = f3; - h[4] = f4; - h[5] = f5; - h[6] = f6; - h[7] = f7; - h[8] = f8; - h[9] = f9; -} - - - -/* - Ignores top bit of h. -*/ - -void fe_frombytes(fe h, const unsigned char *s) { - int64_t h0 = load_4(s); - int64_t h1 = load_3(s + 4) << 6; - int64_t h2 = load_3(s + 7) << 5; - int64_t h3 = load_3(s + 10) << 3; - int64_t h4 = load_3(s + 13) << 2; - int64_t h5 = load_4(s + 16); - int64_t h6 = load_3(s + 20) << 7; - int64_t h7 = load_3(s + 23) << 5; - int64_t h8 = load_3(s + 26) << 4; - int64_t h9 = (load_3(s + 29) & 8388607) << 2; - int64_t carry0; - int64_t carry1; - int64_t carry2; - int64_t carry3; - int64_t carry4; - int64_t carry5; - int64_t carry6; - int64_t carry7; - int64_t carry8; - int64_t carry9; - - carry9 = (h9 + (int64_t) (1 << 24)) >> 25; - h0 += carry9 * 19; - h9 -= carry9 << 25; - carry1 = (h1 + (int64_t) (1 << 24)) >> 25; - h2 += carry1; - h1 -= carry1 << 25; - carry3 = (h3 + (int64_t) (1 << 24)) >> 25; - h4 += carry3; - h3 -= carry3 << 25; - carry5 = (h5 + (int64_t) (1 << 24)) >> 25; - h6 += carry5; - h5 -= carry5 << 25; - carry7 = (h7 + (int64_t) (1 << 24)) >> 25; - h8 += carry7; - h7 -= carry7 << 25; - carry0 = (h0 + (int64_t) (1 << 25)) >> 26; - h1 += carry0; - h0 -= carry0 << 26; - carry2 = (h2 + (int64_t) (1 << 25)) >> 26; - h3 += carry2; - h2 -= carry2 << 26; - carry4 = (h4 + (int64_t) (1 << 25)) >> 26; - h5 += carry4; - h4 -= carry4 << 26; - carry6 = (h6 + (int64_t) (1 << 25)) >> 26; - h7 += carry6; - h6 -= carry6 << 26; - carry8 = (h8 + (int64_t) (1 << 25)) >> 26; - h9 += carry8; - h8 -= carry8 << 26; - - h[0] = (int32_t) h0; - h[1] = (int32_t) h1; - h[2] = (int32_t) h2; - h[3] = (int32_t) h3; - h[4] = (int32_t) h4; - h[5] = (int32_t) h5; - h[6] = (int32_t) h6; - h[7] = (int32_t) h7; - h[8] = (int32_t) h8; - h[9] = (int32_t) h9; -} - - - -void fe_invert(fe out, const fe z) { - fe t0; - fe t1; - fe t2; - fe t3; - int i; - - fe_sq(t0, z); - - for (i = 1; i < 1; ++i) { - fe_sq(t0, t0); - } - - fe_sq(t1, t0); - - for (i = 1; i < 2; ++i) { - fe_sq(t1, t1); - } - - fe_mul(t1, z, t1); - fe_mul(t0, t0, t1); - fe_sq(t2, t0); - - for (i = 1; i < 1; ++i) { - fe_sq(t2, t2); - } - - fe_mul(t1, t1, t2); - fe_sq(t2, t1); - - for (i = 1; i < 5; ++i) { - fe_sq(t2, t2); - } - - fe_mul(t1, t2, t1); - fe_sq(t2, t1); - - for (i = 1; i < 10; ++i) { - fe_sq(t2, t2); - } - - fe_mul(t2, t2, t1); - fe_sq(t3, t2); - - for (i = 1; i < 20; ++i) { - fe_sq(t3, t3); - } - - fe_mul(t2, t3, t2); - fe_sq(t2, t2); - - for (i = 1; i < 10; ++i) { - fe_sq(t2, t2); - } - - fe_mul(t1, t2, t1); - fe_sq(t2, t1); - - for (i = 1; i < 50; ++i) { - fe_sq(t2, t2); - } - - fe_mul(t2, t2, t1); - fe_sq(t3, t2); - - for (i = 1; i < 100; ++i) { - fe_sq(t3, t3); - } - - fe_mul(t2, t3, t2); - fe_sq(t2, t2); - - for (i = 1; i < 50; ++i) { - fe_sq(t2, t2); - } - - fe_mul(t1, t2, t1); - fe_sq(t1, t1); - - for (i = 1; i < 5; ++i) { - fe_sq(t1, t1); - } - - fe_mul(out, t1, t0); -} - - - -/* - return 1 if f is in {1,3,5,...,q-2} - return 0 if f is in {0,2,4,...,q-1} - - Preconditions: - |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. -*/ - -int fe_isnegative(const fe f) { - unsigned char s[32]; - - fe_tobytes(s, f); - - return s[0] & 1; -} - - - -/* - return 1 if f == 0 - return 0 if f != 0 - - Preconditions: - |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. -*/ - -int fe_isnonzero(const fe f) { - unsigned char s[32]; - unsigned char r; - - fe_tobytes(s, f); - - r = s[0]; - #define F(i) r |= s[i] - F(1); - F(2); - F(3); - F(4); - F(5); - F(6); - F(7); - F(8); - F(9); - F(10); - F(11); - F(12); - F(13); - F(14); - F(15); - F(16); - F(17); - F(18); - F(19); - F(20); - F(21); - F(22); - F(23); - F(24); - F(25); - F(26); - F(27); - F(28); - F(29); - F(30); - F(31); - #undef F - - return r != 0; -} - - - -/* - h = f * g - Can overlap h with f or g. - - Preconditions: - |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - - Postconditions: - |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. - */ - - /* - Notes on implementation strategy: - - Using schoolbook multiplication. - Karatsuba would save a little in some cost models. - - Most multiplications by 2 and 19 are 32-bit precomputations; - cheaper than 64-bit postcomputations. - - There is one remaining multiplication by 19 in the carry chain; - one *19 precomputation can be merged into this, - but the resulting data flow is considerably less clean. - - There are 12 carries below. - 10 of them are 2-way parallelizable and vectorizable. - Can get away with 11 carries, but then data flow is much deeper. - - With tighter constraints on inputs can squeeze carries into int32. -*/ - -void fe_mul(fe h, const fe f, const fe g) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int32_t g0 = g[0]; - int32_t g1 = g[1]; - int32_t g2 = g[2]; - int32_t g3 = g[3]; - int32_t g4 = g[4]; - int32_t g5 = g[5]; - int32_t g6 = g[6]; - int32_t g7 = g[7]; - int32_t g8 = g[8]; - int32_t g9 = g[9]; - int32_t g1_19 = 19 * g1; /* 1.959375*2^29 */ - int32_t g2_19 = 19 * g2; /* 1.959375*2^30; still ok */ - int32_t g3_19 = 19 * g3; - int32_t g4_19 = 19 * g4; - int32_t g5_19 = 19 * g5; - int32_t g6_19 = 19 * g6; - int32_t g7_19 = 19 * g7; - int32_t g8_19 = 19 * g8; - int32_t g9_19 = 19 * g9; - int32_t f1_2 = 2 * f1; - int32_t f3_2 = 2 * f3; - int32_t f5_2 = 2 * f5; - int32_t f7_2 = 2 * f7; - int32_t f9_2 = 2 * f9; - int64_t f0g0 = f0 * (int64_t) g0; - int64_t f0g1 = f0 * (int64_t) g1; - int64_t f0g2 = f0 * (int64_t) g2; - int64_t f0g3 = f0 * (int64_t) g3; - int64_t f0g4 = f0 * (int64_t) g4; - int64_t f0g5 = f0 * (int64_t) g5; - int64_t f0g6 = f0 * (int64_t) g6; - int64_t f0g7 = f0 * (int64_t) g7; - int64_t f0g8 = f0 * (int64_t) g8; - int64_t f0g9 = f0 * (int64_t) g9; - int64_t f1g0 = f1 * (int64_t) g0; - int64_t f1g1_2 = f1_2 * (int64_t) g1; - int64_t f1g2 = f1 * (int64_t) g2; - int64_t f1g3_2 = f1_2 * (int64_t) g3; - int64_t f1g4 = f1 * (int64_t) g4; - int64_t f1g5_2 = f1_2 * (int64_t) g5; - int64_t f1g6 = f1 * (int64_t) g6; - int64_t f1g7_2 = f1_2 * (int64_t) g7; - int64_t f1g8 = f1 * (int64_t) g8; - int64_t f1g9_38 = f1_2 * (int64_t) g9_19; - int64_t f2g0 = f2 * (int64_t) g0; - int64_t f2g1 = f2 * (int64_t) g1; - int64_t f2g2 = f2 * (int64_t) g2; - int64_t f2g3 = f2 * (int64_t) g3; - int64_t f2g4 = f2 * (int64_t) g4; - int64_t f2g5 = f2 * (int64_t) g5; - int64_t f2g6 = f2 * (int64_t) g6; - int64_t f2g7 = f2 * (int64_t) g7; - int64_t f2g8_19 = f2 * (int64_t) g8_19; - int64_t f2g9_19 = f2 * (int64_t) g9_19; - int64_t f3g0 = f3 * (int64_t) g0; - int64_t f3g1_2 = f3_2 * (int64_t) g1; - int64_t f3g2 = f3 * (int64_t) g2; - int64_t f3g3_2 = f3_2 * (int64_t) g3; - int64_t f3g4 = f3 * (int64_t) g4; - int64_t f3g5_2 = f3_2 * (int64_t) g5; - int64_t f3g6 = f3 * (int64_t) g6; - int64_t f3g7_38 = f3_2 * (int64_t) g7_19; - int64_t f3g8_19 = f3 * (int64_t) g8_19; - int64_t f3g9_38 = f3_2 * (int64_t) g9_19; - int64_t f4g0 = f4 * (int64_t) g0; - int64_t f4g1 = f4 * (int64_t) g1; - int64_t f4g2 = f4 * (int64_t) g2; - int64_t f4g3 = f4 * (int64_t) g3; - int64_t f4g4 = f4 * (int64_t) g4; - int64_t f4g5 = f4 * (int64_t) g5; - int64_t f4g6_19 = f4 * (int64_t) g6_19; - int64_t f4g7_19 = f4 * (int64_t) g7_19; - int64_t f4g8_19 = f4 * (int64_t) g8_19; - int64_t f4g9_19 = f4 * (int64_t) g9_19; - int64_t f5g0 = f5 * (int64_t) g0; - int64_t f5g1_2 = f5_2 * (int64_t) g1; - int64_t f5g2 = f5 * (int64_t) g2; - int64_t f5g3_2 = f5_2 * (int64_t) g3; - int64_t f5g4 = f5 * (int64_t) g4; - int64_t f5g5_38 = f5_2 * (int64_t) g5_19; - int64_t f5g6_19 = f5 * (int64_t) g6_19; - int64_t f5g7_38 = f5_2 * (int64_t) g7_19; - int64_t f5g8_19 = f5 * (int64_t) g8_19; - int64_t f5g9_38 = f5_2 * (int64_t) g9_19; - int64_t f6g0 = f6 * (int64_t) g0; - int64_t f6g1 = f6 * (int64_t) g1; - int64_t f6g2 = f6 * (int64_t) g2; - int64_t f6g3 = f6 * (int64_t) g3; - int64_t f6g4_19 = f6 * (int64_t) g4_19; - int64_t f6g5_19 = f6 * (int64_t) g5_19; - int64_t f6g6_19 = f6 * (int64_t) g6_19; - int64_t f6g7_19 = f6 * (int64_t) g7_19; - int64_t f6g8_19 = f6 * (int64_t) g8_19; - int64_t f6g9_19 = f6 * (int64_t) g9_19; - int64_t f7g0 = f7 * (int64_t) g0; - int64_t f7g1_2 = f7_2 * (int64_t) g1; - int64_t f7g2 = f7 * (int64_t) g2; - int64_t f7g3_38 = f7_2 * (int64_t) g3_19; - int64_t f7g4_19 = f7 * (int64_t) g4_19; - int64_t f7g5_38 = f7_2 * (int64_t) g5_19; - int64_t f7g6_19 = f7 * (int64_t) g6_19; - int64_t f7g7_38 = f7_2 * (int64_t) g7_19; - int64_t f7g8_19 = f7 * (int64_t) g8_19; - int64_t f7g9_38 = f7_2 * (int64_t) g9_19; - int64_t f8g0 = f8 * (int64_t) g0; - int64_t f8g1 = f8 * (int64_t) g1; - int64_t f8g2_19 = f8 * (int64_t) g2_19; - int64_t f8g3_19 = f8 * (int64_t) g3_19; - int64_t f8g4_19 = f8 * (int64_t) g4_19; - int64_t f8g5_19 = f8 * (int64_t) g5_19; - int64_t f8g6_19 = f8 * (int64_t) g6_19; - int64_t f8g7_19 = f8 * (int64_t) g7_19; - int64_t f8g8_19 = f8 * (int64_t) g8_19; - int64_t f8g9_19 = f8 * (int64_t) g9_19; - int64_t f9g0 = f9 * (int64_t) g0; - int64_t f9g1_38 = f9_2 * (int64_t) g1_19; - int64_t f9g2_19 = f9 * (int64_t) g2_19; - int64_t f9g3_38 = f9_2 * (int64_t) g3_19; - int64_t f9g4_19 = f9 * (int64_t) g4_19; - int64_t f9g5_38 = f9_2 * (int64_t) g5_19; - int64_t f9g6_19 = f9 * (int64_t) g6_19; - int64_t f9g7_38 = f9_2 * (int64_t) g7_19; - int64_t f9g8_19 = f9 * (int64_t) g8_19; - int64_t f9g9_38 = f9_2 * (int64_t) g9_19; - int64_t h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38; - int64_t h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19; - int64_t h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38; - int64_t h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19; - int64_t h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38; - int64_t h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19; - int64_t h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38; - int64_t h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19; - int64_t h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38; - int64_t h9 = f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0 ; - int64_t carry0; - int64_t carry1; - int64_t carry2; - int64_t carry3; - int64_t carry4; - int64_t carry5; - int64_t carry6; - int64_t carry7; - int64_t carry8; - int64_t carry9; - - carry0 = (h0 + (int64_t) (1 << 25)) >> 26; - h1 += carry0; - h0 -= carry0 << 26; - carry4 = (h4 + (int64_t) (1 << 25)) >> 26; - h5 += carry4; - h4 -= carry4 << 26; - - carry1 = (h1 + (int64_t) (1 << 24)) >> 25; - h2 += carry1; - h1 -= carry1 << 25; - carry5 = (h5 + (int64_t) (1 << 24)) >> 25; - h6 += carry5; - h5 -= carry5 << 25; - - carry2 = (h2 + (int64_t) (1 << 25)) >> 26; - h3 += carry2; - h2 -= carry2 << 26; - carry6 = (h6 + (int64_t) (1 << 25)) >> 26; - h7 += carry6; - h6 -= carry6 << 26; - - carry3 = (h3 + (int64_t) (1 << 24)) >> 25; - h4 += carry3; - h3 -= carry3 << 25; - carry7 = (h7 + (int64_t) (1 << 24)) >> 25; - h8 += carry7; - h7 -= carry7 << 25; - - carry4 = (h4 + (int64_t) (1 << 25)) >> 26; - h5 += carry4; - h4 -= carry4 << 26; - carry8 = (h8 + (int64_t) (1 << 25)) >> 26; - h9 += carry8; - h8 -= carry8 << 26; - - carry9 = (h9 + (int64_t) (1 << 24)) >> 25; - h0 += carry9 * 19; - h9 -= carry9 << 25; - - carry0 = (h0 + (int64_t) (1 << 25)) >> 26; - h1 += carry0; - h0 -= carry0 << 26; - - h[0] = (int32_t) h0; - h[1] = (int32_t) h1; - h[2] = (int32_t) h2; - h[3] = (int32_t) h3; - h[4] = (int32_t) h4; - h[5] = (int32_t) h5; - h[6] = (int32_t) h6; - h[7] = (int32_t) h7; - h[8] = (int32_t) h8; - h[9] = (int32_t) h9; -} - - -/* -h = f * 121666 -Can overlap h with f. - -Preconditions: - |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. - -Postconditions: - |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. -*/ - -void fe_mul121666(fe h, fe f) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int64_t h0 = f0 * (int64_t) 121666; - int64_t h1 = f1 * (int64_t) 121666; - int64_t h2 = f2 * (int64_t) 121666; - int64_t h3 = f3 * (int64_t) 121666; - int64_t h4 = f4 * (int64_t) 121666; - int64_t h5 = f5 * (int64_t) 121666; - int64_t h6 = f6 * (int64_t) 121666; - int64_t h7 = f7 * (int64_t) 121666; - int64_t h8 = f8 * (int64_t) 121666; - int64_t h9 = f9 * (int64_t) 121666; - int64_t carry0; - int64_t carry1; - int64_t carry2; - int64_t carry3; - int64_t carry4; - int64_t carry5; - int64_t carry6; - int64_t carry7; - int64_t carry8; - int64_t carry9; - - carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25; - carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25; - carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25; - carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25; - carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25; - - carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26; - carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26; - carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26; - carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26; - carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26; - - h[0] = (int32_t) h0; - h[1] = (int32_t) h1; - h[2] = (int32_t) h2; - h[3] = (int32_t) h3; - h[4] = (int32_t) h4; - h[5] = (int32_t) h5; - h[6] = (int32_t) h6; - h[7] = (int32_t) h7; - h[8] = (int32_t) h8; - h[9] = (int32_t) h9; -} - - -/* -h = -f - -Preconditions: - |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - -Postconditions: - |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. -*/ - -void fe_neg(fe h, const fe f) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int32_t h0 = -f0; - int32_t h1 = -f1; - int32_t h2 = -f2; - int32_t h3 = -f3; - int32_t h4 = -f4; - int32_t h5 = -f5; - int32_t h6 = -f6; - int32_t h7 = -f7; - int32_t h8 = -f8; - int32_t h9 = -f9; - - h[0] = h0; - h[1] = h1; - h[2] = h2; - h[3] = h3; - h[4] = h4; - h[5] = h5; - h[6] = h6; - h[7] = h7; - h[8] = h8; - h[9] = h9; -} - - -void fe_pow22523(fe out, const fe z) { - fe t0; - fe t1; - fe t2; - int i; - fe_sq(t0, z); - - for (i = 1; i < 1; ++i) { - fe_sq(t0, t0); - } - - fe_sq(t1, t0); - - for (i = 1; i < 2; ++i) { - fe_sq(t1, t1); - } - - fe_mul(t1, z, t1); - fe_mul(t0, t0, t1); - fe_sq(t0, t0); - - for (i = 1; i < 1; ++i) { - fe_sq(t0, t0); - } - - fe_mul(t0, t1, t0); - fe_sq(t1, t0); - - for (i = 1; i < 5; ++i) { - fe_sq(t1, t1); - } - - fe_mul(t0, t1, t0); - fe_sq(t1, t0); - - for (i = 1; i < 10; ++i) { - fe_sq(t1, t1); - } - - fe_mul(t1, t1, t0); - fe_sq(t2, t1); - - for (i = 1; i < 20; ++i) { - fe_sq(t2, t2); - } - - fe_mul(t1, t2, t1); - fe_sq(t1, t1); - - for (i = 1; i < 10; ++i) { - fe_sq(t1, t1); - } - - fe_mul(t0, t1, t0); - fe_sq(t1, t0); - - for (i = 1; i < 50; ++i) { - fe_sq(t1, t1); - } - - fe_mul(t1, t1, t0); - fe_sq(t2, t1); - - for (i = 1; i < 100; ++i) { - fe_sq(t2, t2); - } - - fe_mul(t1, t2, t1); - fe_sq(t1, t1); - - for (i = 1; i < 50; ++i) { - fe_sq(t1, t1); - } - - fe_mul(t0, t1, t0); - fe_sq(t0, t0); - - for (i = 1; i < 2; ++i) { - fe_sq(t0, t0); - } - - fe_mul(out, t0, z); - return; -} - - -/* -h = f * f -Can overlap h with f. - -Preconditions: - |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - -Postconditions: - |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. -*/ - -/* -See fe_mul.c for discussion of implementation strategy. -*/ - -void fe_sq(fe h, const fe f) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int32_t f0_2 = 2 * f0; - int32_t f1_2 = 2 * f1; - int32_t f2_2 = 2 * f2; - int32_t f3_2 = 2 * f3; - int32_t f4_2 = 2 * f4; - int32_t f5_2 = 2 * f5; - int32_t f6_2 = 2 * f6; - int32_t f7_2 = 2 * f7; - int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */ - int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */ - int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */ - int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */ - int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */ - int64_t f0f0 = f0 * (int64_t) f0; - int64_t f0f1_2 = f0_2 * (int64_t) f1; - int64_t f0f2_2 = f0_2 * (int64_t) f2; - int64_t f0f3_2 = f0_2 * (int64_t) f3; - int64_t f0f4_2 = f0_2 * (int64_t) f4; - int64_t f0f5_2 = f0_2 * (int64_t) f5; - int64_t f0f6_2 = f0_2 * (int64_t) f6; - int64_t f0f7_2 = f0_2 * (int64_t) f7; - int64_t f0f8_2 = f0_2 * (int64_t) f8; - int64_t f0f9_2 = f0_2 * (int64_t) f9; - int64_t f1f1_2 = f1_2 * (int64_t) f1; - int64_t f1f2_2 = f1_2 * (int64_t) f2; - int64_t f1f3_4 = f1_2 * (int64_t) f3_2; - int64_t f1f4_2 = f1_2 * (int64_t) f4; - int64_t f1f5_4 = f1_2 * (int64_t) f5_2; - int64_t f1f6_2 = f1_2 * (int64_t) f6; - int64_t f1f7_4 = f1_2 * (int64_t) f7_2; - int64_t f1f8_2 = f1_2 * (int64_t) f8; - int64_t f1f9_76 = f1_2 * (int64_t) f9_38; - int64_t f2f2 = f2 * (int64_t) f2; - int64_t f2f3_2 = f2_2 * (int64_t) f3; - int64_t f2f4_2 = f2_2 * (int64_t) f4; - int64_t f2f5_2 = f2_2 * (int64_t) f5; - int64_t f2f6_2 = f2_2 * (int64_t) f6; - int64_t f2f7_2 = f2_2 * (int64_t) f7; - int64_t f2f8_38 = f2_2 * (int64_t) f8_19; - int64_t f2f9_38 = f2 * (int64_t) f9_38; - int64_t f3f3_2 = f3_2 * (int64_t) f3; - int64_t f3f4_2 = f3_2 * (int64_t) f4; - int64_t f3f5_4 = f3_2 * (int64_t) f5_2; - int64_t f3f6_2 = f3_2 * (int64_t) f6; - int64_t f3f7_76 = f3_2 * (int64_t) f7_38; - int64_t f3f8_38 = f3_2 * (int64_t) f8_19; - int64_t f3f9_76 = f3_2 * (int64_t) f9_38; - int64_t f4f4 = f4 * (int64_t) f4; - int64_t f4f5_2 = f4_2 * (int64_t) f5; - int64_t f4f6_38 = f4_2 * (int64_t) f6_19; - int64_t f4f7_38 = f4 * (int64_t) f7_38; - int64_t f4f8_38 = f4_2 * (int64_t) f8_19; - int64_t f4f9_38 = f4 * (int64_t) f9_38; - int64_t f5f5_38 = f5 * (int64_t) f5_38; - int64_t f5f6_38 = f5_2 * (int64_t) f6_19; - int64_t f5f7_76 = f5_2 * (int64_t) f7_38; - int64_t f5f8_38 = f5_2 * (int64_t) f8_19; - int64_t f5f9_76 = f5_2 * (int64_t) f9_38; - int64_t f6f6_19 = f6 * (int64_t) f6_19; - int64_t f6f7_38 = f6 * (int64_t) f7_38; - int64_t f6f8_38 = f6_2 * (int64_t) f8_19; - int64_t f6f9_38 = f6 * (int64_t) f9_38; - int64_t f7f7_38 = f7 * (int64_t) f7_38; - int64_t f7f8_38 = f7_2 * (int64_t) f8_19; - int64_t f7f9_76 = f7_2 * (int64_t) f9_38; - int64_t f8f8_19 = f8 * (int64_t) f8_19; - int64_t f8f9_38 = f8 * (int64_t) f9_38; - int64_t f9f9_38 = f9 * (int64_t) f9_38; - int64_t h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38; - int64_t h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38; - int64_t h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19; - int64_t h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38; - int64_t h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38; - int64_t h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38; - int64_t h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19; - int64_t h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38; - int64_t h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38; - int64_t h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2; - int64_t carry0; - int64_t carry1; - int64_t carry2; - int64_t carry3; - int64_t carry4; - int64_t carry5; - int64_t carry6; - int64_t carry7; - int64_t carry8; - int64_t carry9; - carry0 = (h0 + (int64_t) (1 << 25)) >> 26; - h1 += carry0; - h0 -= carry0 << 26; - carry4 = (h4 + (int64_t) (1 << 25)) >> 26; - h5 += carry4; - h4 -= carry4 << 26; - carry1 = (h1 + (int64_t) (1 << 24)) >> 25; - h2 += carry1; - h1 -= carry1 << 25; - carry5 = (h5 + (int64_t) (1 << 24)) >> 25; - h6 += carry5; - h5 -= carry5 << 25; - carry2 = (h2 + (int64_t) (1 << 25)) >> 26; - h3 += carry2; - h2 -= carry2 << 26; - carry6 = (h6 + (int64_t) (1 << 25)) >> 26; - h7 += carry6; - h6 -= carry6 << 26; - carry3 = (h3 + (int64_t) (1 << 24)) >> 25; - h4 += carry3; - h3 -= carry3 << 25; - carry7 = (h7 + (int64_t) (1 << 24)) >> 25; - h8 += carry7; - h7 -= carry7 << 25; - carry4 = (h4 + (int64_t) (1 << 25)) >> 26; - h5 += carry4; - h4 -= carry4 << 26; - carry8 = (h8 + (int64_t) (1 << 25)) >> 26; - h9 += carry8; - h8 -= carry8 << 26; - carry9 = (h9 + (int64_t) (1 << 24)) >> 25; - h0 += carry9 * 19; - h9 -= carry9 << 25; - carry0 = (h0 + (int64_t) (1 << 25)) >> 26; - h1 += carry0; - h0 -= carry0 << 26; - h[0] = (int32_t) h0; - h[1] = (int32_t) h1; - h[2] = (int32_t) h2; - h[3] = (int32_t) h3; - h[4] = (int32_t) h4; - h[5] = (int32_t) h5; - h[6] = (int32_t) h6; - h[7] = (int32_t) h7; - h[8] = (int32_t) h8; - h[9] = (int32_t) h9; -} - - -/* -h = 2 * f * f -Can overlap h with f. - -Preconditions: - |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. - -Postconditions: - |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. -*/ - -/* -See fe_mul.c for discussion of implementation strategy. -*/ - -void fe_sq2(fe h, const fe f) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int32_t f0_2 = 2 * f0; - int32_t f1_2 = 2 * f1; - int32_t f2_2 = 2 * f2; - int32_t f3_2 = 2 * f3; - int32_t f4_2 = 2 * f4; - int32_t f5_2 = 2 * f5; - int32_t f6_2 = 2 * f6; - int32_t f7_2 = 2 * f7; - int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */ - int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */ - int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */ - int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */ - int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */ - int64_t f0f0 = f0 * (int64_t) f0; - int64_t f0f1_2 = f0_2 * (int64_t) f1; - int64_t f0f2_2 = f0_2 * (int64_t) f2; - int64_t f0f3_2 = f0_2 * (int64_t) f3; - int64_t f0f4_2 = f0_2 * (int64_t) f4; - int64_t f0f5_2 = f0_2 * (int64_t) f5; - int64_t f0f6_2 = f0_2 * (int64_t) f6; - int64_t f0f7_2 = f0_2 * (int64_t) f7; - int64_t f0f8_2 = f0_2 * (int64_t) f8; - int64_t f0f9_2 = f0_2 * (int64_t) f9; - int64_t f1f1_2 = f1_2 * (int64_t) f1; - int64_t f1f2_2 = f1_2 * (int64_t) f2; - int64_t f1f3_4 = f1_2 * (int64_t) f3_2; - int64_t f1f4_2 = f1_2 * (int64_t) f4; - int64_t f1f5_4 = f1_2 * (int64_t) f5_2; - int64_t f1f6_2 = f1_2 * (int64_t) f6; - int64_t f1f7_4 = f1_2 * (int64_t) f7_2; - int64_t f1f8_2 = f1_2 * (int64_t) f8; - int64_t f1f9_76 = f1_2 * (int64_t) f9_38; - int64_t f2f2 = f2 * (int64_t) f2; - int64_t f2f3_2 = f2_2 * (int64_t) f3; - int64_t f2f4_2 = f2_2 * (int64_t) f4; - int64_t f2f5_2 = f2_2 * (int64_t) f5; - int64_t f2f6_2 = f2_2 * (int64_t) f6; - int64_t f2f7_2 = f2_2 * (int64_t) f7; - int64_t f2f8_38 = f2_2 * (int64_t) f8_19; - int64_t f2f9_38 = f2 * (int64_t) f9_38; - int64_t f3f3_2 = f3_2 * (int64_t) f3; - int64_t f3f4_2 = f3_2 * (int64_t) f4; - int64_t f3f5_4 = f3_2 * (int64_t) f5_2; - int64_t f3f6_2 = f3_2 * (int64_t) f6; - int64_t f3f7_76 = f3_2 * (int64_t) f7_38; - int64_t f3f8_38 = f3_2 * (int64_t) f8_19; - int64_t f3f9_76 = f3_2 * (int64_t) f9_38; - int64_t f4f4 = f4 * (int64_t) f4; - int64_t f4f5_2 = f4_2 * (int64_t) f5; - int64_t f4f6_38 = f4_2 * (int64_t) f6_19; - int64_t f4f7_38 = f4 * (int64_t) f7_38; - int64_t f4f8_38 = f4_2 * (int64_t) f8_19; - int64_t f4f9_38 = f4 * (int64_t) f9_38; - int64_t f5f5_38 = f5 * (int64_t) f5_38; - int64_t f5f6_38 = f5_2 * (int64_t) f6_19; - int64_t f5f7_76 = f5_2 * (int64_t) f7_38; - int64_t f5f8_38 = f5_2 * (int64_t) f8_19; - int64_t f5f9_76 = f5_2 * (int64_t) f9_38; - int64_t f6f6_19 = f6 * (int64_t) f6_19; - int64_t f6f7_38 = f6 * (int64_t) f7_38; - int64_t f6f8_38 = f6_2 * (int64_t) f8_19; - int64_t f6f9_38 = f6 * (int64_t) f9_38; - int64_t f7f7_38 = f7 * (int64_t) f7_38; - int64_t f7f8_38 = f7_2 * (int64_t) f8_19; - int64_t f7f9_76 = f7_2 * (int64_t) f9_38; - int64_t f8f8_19 = f8 * (int64_t) f8_19; - int64_t f8f9_38 = f8 * (int64_t) f9_38; - int64_t f9f9_38 = f9 * (int64_t) f9_38; - int64_t h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38; - int64_t h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38; - int64_t h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19; - int64_t h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38; - int64_t h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38; - int64_t h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38; - int64_t h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19; - int64_t h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38; - int64_t h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38; - int64_t h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2; - int64_t carry0; - int64_t carry1; - int64_t carry2; - int64_t carry3; - int64_t carry4; - int64_t carry5; - int64_t carry6; - int64_t carry7; - int64_t carry8; - int64_t carry9; - h0 += h0; - h1 += h1; - h2 += h2; - h3 += h3; - h4 += h4; - h5 += h5; - h6 += h6; - h7 += h7; - h8 += h8; - h9 += h9; - carry0 = (h0 + (int64_t) (1 << 25)) >> 26; - h1 += carry0; - h0 -= carry0 << 26; - carry4 = (h4 + (int64_t) (1 << 25)) >> 26; - h5 += carry4; - h4 -= carry4 << 26; - carry1 = (h1 + (int64_t) (1 << 24)) >> 25; - h2 += carry1; - h1 -= carry1 << 25; - carry5 = (h5 + (int64_t) (1 << 24)) >> 25; - h6 += carry5; - h5 -= carry5 << 25; - carry2 = (h2 + (int64_t) (1 << 25)) >> 26; - h3 += carry2; - h2 -= carry2 << 26; - carry6 = (h6 + (int64_t) (1 << 25)) >> 26; - h7 += carry6; - h6 -= carry6 << 26; - carry3 = (h3 + (int64_t) (1 << 24)) >> 25; - h4 += carry3; - h3 -= carry3 << 25; - carry7 = (h7 + (int64_t) (1 << 24)) >> 25; - h8 += carry7; - h7 -= carry7 << 25; - carry4 = (h4 + (int64_t) (1 << 25)) >> 26; - h5 += carry4; - h4 -= carry4 << 26; - carry8 = (h8 + (int64_t) (1 << 25)) >> 26; - h9 += carry8; - h8 -= carry8 << 26; - carry9 = (h9 + (int64_t) (1 << 24)) >> 25; - h0 += carry9 * 19; - h9 -= carry9 << 25; - carry0 = (h0 + (int64_t) (1 << 25)) >> 26; - h1 += carry0; - h0 -= carry0 << 26; - h[0] = (int32_t) h0; - h[1] = (int32_t) h1; - h[2] = (int32_t) h2; - h[3] = (int32_t) h3; - h[4] = (int32_t) h4; - h[5] = (int32_t) h5; - h[6] = (int32_t) h6; - h[7] = (int32_t) h7; - h[8] = (int32_t) h8; - h[9] = (int32_t) h9; -} - - -/* -h = f - g -Can overlap h with f or g. - -Preconditions: - |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - -Postconditions: - |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. -*/ - -void fe_sub(fe h, const fe f, const fe g) { - int32_t f0 = f[0]; - int32_t f1 = f[1]; - int32_t f2 = f[2]; - int32_t f3 = f[3]; - int32_t f4 = f[4]; - int32_t f5 = f[5]; - int32_t f6 = f[6]; - int32_t f7 = f[7]; - int32_t f8 = f[8]; - int32_t f9 = f[9]; - int32_t g0 = g[0]; - int32_t g1 = g[1]; - int32_t g2 = g[2]; - int32_t g3 = g[3]; - int32_t g4 = g[4]; - int32_t g5 = g[5]; - int32_t g6 = g[6]; - int32_t g7 = g[7]; - int32_t g8 = g[8]; - int32_t g9 = g[9]; - int32_t h0 = f0 - g0; - int32_t h1 = f1 - g1; - int32_t h2 = f2 - g2; - int32_t h3 = f3 - g3; - int32_t h4 = f4 - g4; - int32_t h5 = f5 - g5; - int32_t h6 = f6 - g6; - int32_t h7 = f7 - g7; - int32_t h8 = f8 - g8; - int32_t h9 = f9 - g9; - - h[0] = h0; - h[1] = h1; - h[2] = h2; - h[3] = h3; - h[4] = h4; - h[5] = h5; - h[6] = h6; - h[7] = h7; - h[8] = h8; - h[9] = h9; -} - - - -/* -Preconditions: - |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. - -Write p=2^255-19; q=floor(h/p). -Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). - -Proof: - Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. - Also have |h-2^230 h9|<2^231 so |19 2^(-255)(h-2^230 h9)|<1/4. - - Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). - Then 0> 25; - q = (h0 + q) >> 26; - q = (h1 + q) >> 25; - q = (h2 + q) >> 26; - q = (h3 + q) >> 25; - q = (h4 + q) >> 26; - q = (h5 + q) >> 25; - q = (h6 + q) >> 26; - q = (h7 + q) >> 25; - q = (h8 + q) >> 26; - q = (h9 + q) >> 25; - /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */ - h0 += 19 * q; - /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */ - carry0 = h0 >> 26; - h1 += carry0; - h0 -= carry0 << 26; - carry1 = h1 >> 25; - h2 += carry1; - h1 -= carry1 << 25; - carry2 = h2 >> 26; - h3 += carry2; - h2 -= carry2 << 26; - carry3 = h3 >> 25; - h4 += carry3; - h3 -= carry3 << 25; - carry4 = h4 >> 26; - h5 += carry4; - h4 -= carry4 << 26; - carry5 = h5 >> 25; - h6 += carry5; - h5 -= carry5 << 25; - carry6 = h6 >> 26; - h7 += carry6; - h6 -= carry6 << 26; - carry7 = h7 >> 25; - h8 += carry7; - h7 -= carry7 << 25; - carry8 = h8 >> 26; - h9 += carry8; - h8 -= carry8 << 26; - carry9 = h9 >> 25; - h9 -= carry9 << 25; - - /* h10 = carry9 */ - /* - Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. - Have h0+...+2^230 h9 between 0 and 2^255-1; - evidently 2^255 h10-2^255 q = 0. - Goal: Output h0+...+2^230 h9. - */ - s[0] = (unsigned char) (h0 >> 0); - s[1] = (unsigned char) (h0 >> 8); - s[2] = (unsigned char) (h0 >> 16); - s[3] = (unsigned char) ((h0 >> 24) | (h1 << 2)); - s[4] = (unsigned char) (h1 >> 6); - s[5] = (unsigned char) (h1 >> 14); - s[6] = (unsigned char) ((h1 >> 22) | (h2 << 3)); - s[7] = (unsigned char) (h2 >> 5); - s[8] = (unsigned char) (h2 >> 13); - s[9] = (unsigned char) ((h2 >> 21) | (h3 << 5)); - s[10] = (unsigned char) (h3 >> 3); - s[11] = (unsigned char) (h3 >> 11); - s[12] = (unsigned char) ((h3 >> 19) | (h4 << 6)); - s[13] = (unsigned char) (h4 >> 2); - s[14] = (unsigned char) (h4 >> 10); - s[15] = (unsigned char) (h4 >> 18); - s[16] = (unsigned char) (h5 >> 0); - s[17] = (unsigned char) (h5 >> 8); - s[18] = (unsigned char) (h5 >> 16); - s[19] = (unsigned char) ((h5 >> 24) | (h6 << 1)); - s[20] = (unsigned char) (h6 >> 7); - s[21] = (unsigned char) (h6 >> 15); - s[22] = (unsigned char) ((h6 >> 23) | (h7 << 3)); - s[23] = (unsigned char) (h7 >> 5); - s[24] = (unsigned char) (h7 >> 13); - s[25] = (unsigned char) ((h7 >> 21) | (h8 << 4)); - s[26] = (unsigned char) (h8 >> 4); - s[27] = (unsigned char) (h8 >> 12); - s[28] = (unsigned char) ((h8 >> 20) | (h9 << 6)); - s[29] = (unsigned char) (h9 >> 2); - s[30] = (unsigned char) (h9 >> 10); - s[31] = (unsigned char) (h9 >> 18); -} diff --git a/pkg/urcrypt/ed25519/src/fe.h b/pkg/urcrypt/ed25519/src/fe.h deleted file mode 100644 index b4b62d282..000000000 --- a/pkg/urcrypt/ed25519/src/fe.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef FE_H -#define FE_H - -#include "fixedint.h" - - -/* - fe means field element. - Here the field is \Z/(2^255-19). - An element t, entries t[0]...t[9], represents the integer - t[0]+2^26 t[1]+2^51 t[2]+2^77 t[3]+2^102 t[4]+...+2^230 t[9]. - Bounds on each t[i] vary depending on context. -*/ - - -typedef int32_t fe[10]; - - -void fe_0(fe h); -void fe_1(fe h); - -void fe_frombytes(fe h, const unsigned char *s); -void fe_tobytes(unsigned char *s, const fe h); - -void fe_copy(fe h, const fe f); -int fe_isnegative(const fe f); -int fe_isnonzero(const fe f); -void fe_cmov(fe f, const fe g, unsigned int b); -void fe_cswap(fe f, fe g, unsigned int b); - -void fe_neg(fe h, const fe f); -void fe_add(fe h, const fe f, const fe g); -void fe_invert(fe out, const fe z); -void fe_sq(fe h, const fe f); -void fe_sq2(fe h, const fe f); -void fe_mul(fe h, const fe f, const fe g); -void fe_mul121666(fe h, fe f); -void fe_pow22523(fe out, const fe z); -void fe_sub(fe h, const fe f, const fe g); - -#endif diff --git a/pkg/urcrypt/ed25519/src/fixedint.h b/pkg/urcrypt/ed25519/src/fixedint.h deleted file mode 100644 index 1a8745b1e..000000000 --- a/pkg/urcrypt/ed25519/src/fixedint.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - Portable header to provide the 32 and 64 bits type. - - Not a compatible replacement for , do not blindly use it as such. -*/ - -#if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined(__WATCOMC__) && (defined(_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_) || defined(__UINT_FAST64_TYPE__)) )) && !defined(FIXEDINT_H_INCLUDED) - #include - #define FIXEDINT_H_INCLUDED - - #if defined(__WATCOMC__) && __WATCOMC__ >= 1250 && !defined(UINT64_C) - #include - #define UINT64_C(x) (x + (UINT64_MAX - UINT64_MAX)) - #endif -#endif - - -#ifndef FIXEDINT_H_INCLUDED - #define FIXEDINT_H_INCLUDED - - #include - - /* (u)int32_t */ - #ifndef uint32_t - #if (ULONG_MAX == 0xffffffffUL) - typedef unsigned long uint32_t; - #elif (UINT_MAX == 0xffffffffUL) - typedef unsigned int uint32_t; - #elif (USHRT_MAX == 0xffffffffUL) - typedef unsigned short uint32_t; - #endif - #endif - - - #ifndef int32_t - #if (LONG_MAX == 0x7fffffffL) - typedef signed long int32_t; - #elif (INT_MAX == 0x7fffffffL) - typedef signed int int32_t; - #elif (SHRT_MAX == 0x7fffffffL) - typedef signed short int32_t; - #endif - #endif - - - /* (u)int64_t */ - #if (defined(__STDC__) && defined(__STDC_VERSION__) && __STDC__ && __STDC_VERSION__ >= 199901L) - typedef long long int64_t; - typedef unsigned long long uint64_t; - - #define UINT64_C(v) v ##ULL - #define INT64_C(v) v ##LL - #elif defined(__GNUC__) - __extension__ typedef long long int64_t; - __extension__ typedef unsigned long long uint64_t; - - #define UINT64_C(v) v ##ULL - #define INT64_C(v) v ##LL - #elif defined(__MWERKS__) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__APPLE_CC__) || defined(_LONG_LONG) || defined(_CRAYC) - typedef long long int64_t; - typedef unsigned long long uint64_t; - - #define UINT64_C(v) v ##ULL - #define INT64_C(v) v ##LL - #elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined(__BORLANDC__) && __BORLANDC__ > 0x460) || defined(__alpha) || defined(__DECC) - typedef __int64 int64_t; - typedef unsigned __int64 uint64_t; - - #define UINT64_C(v) v ##UI64 - #define INT64_C(v) v ##I64 - #endif -#endif diff --git a/pkg/urcrypt/ed25519/src/ge.c b/pkg/urcrypt/ed25519/src/ge.c deleted file mode 100644 index 87c691bff..000000000 --- a/pkg/urcrypt/ed25519/src/ge.c +++ /dev/null @@ -1,467 +0,0 @@ -#include "ge.h" -#include "precomp_data.h" - - -/* -r = p + q -*/ - -void ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) { - fe t0; - fe_add(r->X, p->Y, p->X); - fe_sub(r->Y, p->Y, p->X); - fe_mul(r->Z, r->X, q->YplusX); - fe_mul(r->Y, r->Y, q->YminusX); - fe_mul(r->T, q->T2d, p->T); - fe_mul(r->X, p->Z, q->Z); - fe_add(t0, r->X, r->X); - fe_sub(r->X, r->Z, r->Y); - fe_add(r->Y, r->Z, r->Y); - fe_add(r->Z, t0, r->T); - fe_sub(r->T, t0, r->T); -} - - -static void slide(signed char *r, const unsigned char *a) { - int i; - int b; - int k; - - for (i = 0; i < 256; ++i) { - r[i] = 1 & (a[i >> 3] >> (i & 7)); - } - - for (i = 0; i < 256; ++i) - if (r[i]) { - for (b = 1; b <= 6 && i + b < 256; ++b) { - if (r[i + b]) { - if (r[i] + (r[i + b] << b) <= 15) { - r[i] += r[i + b] << b; - r[i + b] = 0; - } else if (r[i] - (r[i + b] << b) >= -15) { - r[i] -= r[i + b] << b; - - for (k = i + b; k < 256; ++k) { - if (!r[k]) { - r[k] = 1; - break; - } - - r[k] = 0; - } - } else { - break; - } - } - } - } -} - -/* -r = a * A + b * B -where a = a[0]+256*a[1]+...+256^31 a[31]. -and b = b[0]+256*b[1]+...+256^31 b[31]. -B is the Ed25519 base point (x,4/5) with x positive. -*/ - -void ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b) { - signed char aslide[256]; - signed char bslide[256]; - ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */ - ge_p1p1 t; - ge_p3 u; - ge_p3 A2; - int i; - slide(aslide, a); - slide(bslide, b); - ge_p3_to_cached(&Ai[0], A); - ge_p3_dbl(&t, A); - ge_p1p1_to_p3(&A2, &t); - ge_add(&t, &A2, &Ai[0]); - ge_p1p1_to_p3(&u, &t); - ge_p3_to_cached(&Ai[1], &u); - ge_add(&t, &A2, &Ai[1]); - ge_p1p1_to_p3(&u, &t); - ge_p3_to_cached(&Ai[2], &u); - ge_add(&t, &A2, &Ai[2]); - ge_p1p1_to_p3(&u, &t); - ge_p3_to_cached(&Ai[3], &u); - ge_add(&t, &A2, &Ai[3]); - ge_p1p1_to_p3(&u, &t); - ge_p3_to_cached(&Ai[4], &u); - ge_add(&t, &A2, &Ai[4]); - ge_p1p1_to_p3(&u, &t); - ge_p3_to_cached(&Ai[5], &u); - ge_add(&t, &A2, &Ai[5]); - ge_p1p1_to_p3(&u, &t); - ge_p3_to_cached(&Ai[6], &u); - ge_add(&t, &A2, &Ai[6]); - ge_p1p1_to_p3(&u, &t); - ge_p3_to_cached(&Ai[7], &u); - ge_p2_0(r); - - for (i = 255; i >= 0; --i) { - if (aslide[i] || bslide[i]) { - break; - } - } - - for (; i >= 0; --i) { - ge_p2_dbl(&t, r); - - if (aslide[i] > 0) { - ge_p1p1_to_p3(&u, &t); - ge_add(&t, &u, &Ai[aslide[i] / 2]); - } else if (aslide[i] < 0) { - ge_p1p1_to_p3(&u, &t); - ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); - } - - if (bslide[i] > 0) { - ge_p1p1_to_p3(&u, &t); - ge_madd(&t, &u, &Bi[bslide[i] / 2]); - } else if (bslide[i] < 0) { - ge_p1p1_to_p3(&u, &t); - ge_msub(&t, &u, &Bi[(-bslide[i]) / 2]); - } - - ge_p1p1_to_p2(r, &t); - } -} - - -static const fe d = { - -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116 -}; - -static const fe sqrtm1 = { - -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482 -}; - -int ge_frombytes_negate_vartime(ge_p3 *h, const unsigned char *s) { - fe u; - fe v; - fe v3; - fe vxx; - fe check; - fe_frombytes(h->Y, s); - fe_1(h->Z); - fe_sq(u, h->Y); - fe_mul(v, u, d); - fe_sub(u, u, h->Z); /* u = y^2-1 */ - fe_add(v, v, h->Z); /* v = dy^2+1 */ - fe_sq(v3, v); - fe_mul(v3, v3, v); /* v3 = v^3 */ - fe_sq(h->X, v3); - fe_mul(h->X, h->X, v); - fe_mul(h->X, h->X, u); /* x = uv^7 */ - fe_pow22523(h->X, h->X); /* x = (uv^7)^((q-5)/8) */ - fe_mul(h->X, h->X, v3); - fe_mul(h->X, h->X, u); /* x = uv^3(uv^7)^((q-5)/8) */ - fe_sq(vxx, h->X); - fe_mul(vxx, vxx, v); - fe_sub(check, vxx, u); /* vx^2-u */ - - if (fe_isnonzero(check)) { - fe_add(check, vxx, u); /* vx^2+u */ - - if (fe_isnonzero(check)) { - return -1; - } - - fe_mul(h->X, h->X, sqrtm1); - } - - if (fe_isnegative(h->X) == (s[31] >> 7)) { - fe_neg(h->X, h->X); - } - - fe_mul(h->T, h->X, h->Y); - return 0; -} - - -/* -r = p + q -*/ - -void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) { - fe t0; - fe_add(r->X, p->Y, p->X); - fe_sub(r->Y, p->Y, p->X); - fe_mul(r->Z, r->X, q->yplusx); - fe_mul(r->Y, r->Y, q->yminusx); - fe_mul(r->T, q->xy2d, p->T); - fe_add(t0, p->Z, p->Z); - fe_sub(r->X, r->Z, r->Y); - fe_add(r->Y, r->Z, r->Y); - fe_add(r->Z, t0, r->T); - fe_sub(r->T, t0, r->T); -} - - -/* -r = p - q -*/ - -void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) { - fe t0; - - fe_add(r->X, p->Y, p->X); - fe_sub(r->Y, p->Y, p->X); - fe_mul(r->Z, r->X, q->yminusx); - fe_mul(r->Y, r->Y, q->yplusx); - fe_mul(r->T, q->xy2d, p->T); - fe_add(t0, p->Z, p->Z); - fe_sub(r->X, r->Z, r->Y); - fe_add(r->Y, r->Z, r->Y); - fe_sub(r->Z, t0, r->T); - fe_add(r->T, t0, r->T); -} - - -/* -r = p -*/ - -void ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p) { - fe_mul(r->X, p->X, p->T); - fe_mul(r->Y, p->Y, p->Z); - fe_mul(r->Z, p->Z, p->T); -} - - - -/* -r = p -*/ - -void ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p) { - fe_mul(r->X, p->X, p->T); - fe_mul(r->Y, p->Y, p->Z); - fe_mul(r->Z, p->Z, p->T); - fe_mul(r->T, p->X, p->Y); -} - - -void ge_p2_0(ge_p2 *h) { - fe_0(h->X); - fe_1(h->Y); - fe_1(h->Z); -} - - - -/* -r = 2 * p -*/ - -void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p) { - fe t0; - - fe_sq(r->X, p->X); - fe_sq(r->Z, p->Y); - fe_sq2(r->T, p->Z); - fe_add(r->Y, p->X, p->Y); - fe_sq(t0, r->Y); - fe_add(r->Y, r->Z, r->X); - fe_sub(r->Z, r->Z, r->X); - fe_sub(r->X, t0, r->Y); - fe_sub(r->T, r->T, r->Z); -} - - -void ge_p3_0(ge_p3 *h) { - fe_0(h->X); - fe_1(h->Y); - fe_1(h->Z); - fe_0(h->T); -} - - -/* -r = 2 * p -*/ - -void ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p) { - ge_p2 q; - ge_p3_to_p2(&q, p); - ge_p2_dbl(r, &q); -} - - - -/* -r = p -*/ - -static const fe d2 = { - -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199 -}; - -void ge_p3_to_cached(ge_cached *r, const ge_p3 *p) { - fe_add(r->YplusX, p->Y, p->X); - fe_sub(r->YminusX, p->Y, p->X); - fe_copy(r->Z, p->Z); - fe_mul(r->T2d, p->T, d2); -} - - -/* -r = p -*/ - -void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p) { - fe_copy(r->X, p->X); - fe_copy(r->Y, p->Y); - fe_copy(r->Z, p->Z); -} - - -void ge_p3_tobytes(unsigned char *s, const ge_p3 *h) { - fe recip; - fe x; - fe y; - fe_invert(recip, h->Z); - fe_mul(x, h->X, recip); - fe_mul(y, h->Y, recip); - fe_tobytes(s, y); - s[31] ^= fe_isnegative(x) << 7; -} - - -static unsigned char equal(signed char b, signed char c) { - unsigned char ub = b; - unsigned char uc = c; - unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */ - uint64_t y = x; /* 0: yes; 1..255: no */ - y -= 1; /* large: yes; 0..254: no */ - y >>= 63; /* 1: yes; 0: no */ - return (unsigned char) y; -} - -static unsigned char negative(signed char b) { - uint64_t x = b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */ - x >>= 63; /* 1: yes; 0: no */ - return (unsigned char) x; -} - -static void cmov(ge_precomp *t, const ge_precomp *u, unsigned char b) { - fe_cmov(t->yplusx, u->yplusx, b); - fe_cmov(t->yminusx, u->yminusx, b); - fe_cmov(t->xy2d, u->xy2d, b); -} - - -static void select(ge_precomp *t, int pos, signed char b) { - ge_precomp minust; - unsigned char bnegative = negative(b); - unsigned char babs = b - (((-bnegative) & b) << 1); - fe_1(t->yplusx); - fe_1(t->yminusx); - fe_0(t->xy2d); - cmov(t, &base[pos][0], equal(babs, 1)); - cmov(t, &base[pos][1], equal(babs, 2)); - cmov(t, &base[pos][2], equal(babs, 3)); - cmov(t, &base[pos][3], equal(babs, 4)); - cmov(t, &base[pos][4], equal(babs, 5)); - cmov(t, &base[pos][5], equal(babs, 6)); - cmov(t, &base[pos][6], equal(babs, 7)); - cmov(t, &base[pos][7], equal(babs, 8)); - fe_copy(minust.yplusx, t->yminusx); - fe_copy(minust.yminusx, t->yplusx); - fe_neg(minust.xy2d, t->xy2d); - cmov(t, &minust, bnegative); -} - -/* -h = a * B -where a = a[0]+256*a[1]+...+256^31 a[31] -B is the Ed25519 base point (x,4/5) with x positive. - -Preconditions: - a[31] <= 127 -*/ - -void ge_scalarmult_base(ge_p3 *h, const unsigned char *a) { - signed char e[64]; - signed char carry; - ge_p1p1 r; - ge_p2 s; - ge_precomp t; - int i; - - for (i = 0; i < 32; ++i) { - e[2 * i + 0] = (a[i] >> 0) & 15; - e[2 * i + 1] = (a[i] >> 4) & 15; - } - - /* each e[i] is between 0 and 15 */ - /* e[63] is between 0 and 7 */ - carry = 0; - - for (i = 0; i < 63; ++i) { - e[i] += carry; - carry = e[i] + 8; - carry >>= 4; - e[i] -= carry << 4; - } - - e[63] += carry; - /* each e[i] is between -8 and 8 */ - ge_p3_0(h); - - for (i = 1; i < 64; i += 2) { - select(&t, i / 2, e[i]); - ge_madd(&r, h, &t); - ge_p1p1_to_p3(h, &r); - } - - ge_p3_dbl(&r, h); - ge_p1p1_to_p2(&s, &r); - ge_p2_dbl(&r, &s); - ge_p1p1_to_p2(&s, &r); - ge_p2_dbl(&r, &s); - ge_p1p1_to_p2(&s, &r); - ge_p2_dbl(&r, &s); - ge_p1p1_to_p3(h, &r); - - for (i = 0; i < 64; i += 2) { - select(&t, i / 2, e[i]); - ge_madd(&r, h, &t); - ge_p1p1_to_p3(h, &r); - } -} - - -/* -r = p - q -*/ - -void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) { - fe t0; - - fe_add(r->X, p->Y, p->X); - fe_sub(r->Y, p->Y, p->X); - fe_mul(r->Z, r->X, q->YminusX); - fe_mul(r->Y, r->Y, q->YplusX); - fe_mul(r->T, q->T2d, p->T); - fe_mul(r->X, p->Z, q->Z); - fe_add(t0, r->X, r->X); - fe_sub(r->X, r->Z, r->Y); - fe_add(r->Y, r->Z, r->Y); - fe_sub(r->Z, t0, r->T); - fe_add(r->T, t0, r->T); -} - - -void ge_tobytes(unsigned char *s, const ge_p2 *h) { - fe recip; - fe x; - fe y; - fe_invert(recip, h->Z); - fe_mul(x, h->X, recip); - fe_mul(y, h->Y, recip); - fe_tobytes(s, y); - s[31] ^= fe_isnegative(x) << 7; -} diff --git a/pkg/urcrypt/ed25519/src/ge.h b/pkg/urcrypt/ed25519/src/ge.h deleted file mode 100644 index 17fde2df1..000000000 --- a/pkg/urcrypt/ed25519/src/ge.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef GE_H -#define GE_H - -#include "fe.h" - - -/* -ge means group element. - -Here the group is the set of pairs (x,y) of field elements (see fe.h) -satisfying -x^2 + y^2 = 1 + d x^2y^2 -where d = -121665/121666. - -Representations: - ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z - ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT - ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T - ge_precomp (Duif): (y+x,y-x,2dxy) -*/ - -typedef struct { - fe X; - fe Y; - fe Z; -} ge_p2; - -typedef struct { - fe X; - fe Y; - fe Z; - fe T; -} ge_p3; - -typedef struct { - fe X; - fe Y; - fe Z; - fe T; -} ge_p1p1; - -typedef struct { - fe yplusx; - fe yminusx; - fe xy2d; -} ge_precomp; - -typedef struct { - fe YplusX; - fe YminusX; - fe Z; - fe T2d; -} ge_cached; - -void ge_p3_tobytes(unsigned char *s, const ge_p3 *h); -void ge_tobytes(unsigned char *s, const ge_p2 *h); -int ge_frombytes_negate_vartime(ge_p3 *h, const unsigned char *s); - -void ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q); -void ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q); -void ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a, const ge_p3 *A, const unsigned char *b); -void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q); -void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q); -void ge_scalarmult_base(ge_p3 *h, const unsigned char *a); - -void ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p); -void ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p); -void ge_p2_0(ge_p2 *h); -void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p); -void ge_p3_0(ge_p3 *h); -void ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p); -void ge_p3_to_cached(ge_cached *r, const ge_p3 *p); -void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p); - -#endif diff --git a/pkg/urcrypt/ed25519/src/key_exchange.c b/pkg/urcrypt/ed25519/src/key_exchange.c deleted file mode 100644 index abd75da2c..000000000 --- a/pkg/urcrypt/ed25519/src/key_exchange.c +++ /dev/null @@ -1,79 +0,0 @@ -#include "ed25519.h" -#include "fe.h" - -void ed25519_key_exchange(unsigned char *shared_secret, const unsigned char *public_key, const unsigned char *private_key) { - unsigned char e[32]; - unsigned int i; - - fe x1; - fe x2; - fe z2; - fe x3; - fe z3; - fe tmp0; - fe tmp1; - - int pos; - unsigned int swap; - unsigned int b; - - /* copy the private key and make sure it's valid */ - for (i = 0; i < 32; ++i) { - e[i] = private_key[i]; - } - - e[0] &= 248; - e[31] &= 63; - e[31] |= 64; - - /* unpack the public key and convert edwards to montgomery */ - /* due to CodesInChaos: montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p */ - fe_frombytes(x1, public_key); - fe_1(tmp1); - fe_add(tmp0, x1, tmp1); - fe_sub(tmp1, tmp1, x1); - fe_invert(tmp1, tmp1); - fe_mul(x1, tmp0, tmp1); - - fe_1(x2); - fe_0(z2); - fe_copy(x3, x1); - fe_1(z3); - - swap = 0; - for (pos = 254; pos >= 0; --pos) { - b = e[pos / 8] >> (pos & 7); - b &= 1; - swap ^= b; - fe_cswap(x2, x3, swap); - fe_cswap(z2, z3, swap); - swap = b; - - /* from montgomery.h */ - fe_sub(tmp0, x3, z3); - fe_sub(tmp1, x2, z2); - fe_add(x2, x2, z2); - fe_add(z2, x3, z3); - fe_mul(z3, tmp0, x2); - fe_mul(z2, z2, tmp1); - fe_sq(tmp0, tmp1); - fe_sq(tmp1, x2); - fe_add(x3, z3, z2); - fe_sub(z2, z3, z2); - fe_mul(x2, tmp1, tmp0); - fe_sub(tmp1, tmp1, tmp0); - fe_sq(z2, z2); - fe_mul121666(z3, tmp1); - fe_sq(x3, x3); - fe_add(tmp0, tmp0, z3); - fe_mul(z3, x1, z2); - fe_mul(z2, tmp1, tmp0); - } - - fe_cswap(x2, x3, swap); - fe_cswap(z2, z3, swap); - - fe_invert(z2, z2); - fe_mul(x2, x2, z2); - fe_tobytes(shared_secret, x2); -} diff --git a/pkg/urcrypt/ed25519/src/keypair.c b/pkg/urcrypt/ed25519/src/keypair.c deleted file mode 100644 index dc1b8eccc..000000000 --- a/pkg/urcrypt/ed25519/src/keypair.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "ed25519.h" -#include "sha512.h" -#include "ge.h" - - -void ed25519_create_keypair(unsigned char *public_key, unsigned char *private_key, const unsigned char *seed) { - ge_p3 A; - - sha512(seed, 32, private_key); - private_key[0] &= 248; - private_key[31] &= 63; - private_key[31] |= 64; - - ge_scalarmult_base(&A, private_key); - ge_p3_tobytes(public_key, &A); -} diff --git a/pkg/urcrypt/ed25519/src/precomp_data.h b/pkg/urcrypt/ed25519/src/precomp_data.h deleted file mode 100644 index ff23986c3..000000000 --- a/pkg/urcrypt/ed25519/src/precomp_data.h +++ /dev/null @@ -1,1391 +0,0 @@ -static const ge_precomp Bi[8] = { - { - { 25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605 }, - { -12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378 }, - { -8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546 }, - }, - { - { 15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024 }, - { 16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574 }, - { 30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357 }, - }, - { - { 10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380 }, - { 4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306 }, - { 19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942 }, - }, - { - { 5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766 }, - { -30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701 }, - { 28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300 }, - }, - { - { -22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877 }, - { -6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951 }, - { 4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784 }, - }, - { - { -25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436 }, - { 25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918 }, - { 23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877 }, - }, - { - { -33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800 }, - { -25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305 }, - { -13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300 }, - }, - { - { -3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876 }, - { -24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619 }, - { -3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683 }, - }, -}; - - -/* base[i][j] = (j+1)*256^i*B */ -static const ge_precomp base[32][8] = { - { - { - { 25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605 }, - { -12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378 }, - { -8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546 }, - }, - { - { -12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303 }, - { -21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081 }, - { 26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697 }, - }, - { - { 15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024 }, - { 16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574 }, - { 30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357 }, - }, - { - { -17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540 }, - { 23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397 }, - { 7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325 }, - }, - { - { 10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380 }, - { 4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306 }, - { 19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942 }, - }, - { - { -15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777 }, - { -8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737 }, - { -18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652 }, - }, - { - { 5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766 }, - { -30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701 }, - { 28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300 }, - }, - { - { 14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726 }, - { -7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955 }, - { 27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425 }, - }, - }, - { - { - { -13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171 }, - { 27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510 }, - { 17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660 }, - }, - { - { -10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639 }, - { 29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963 }, - { 5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950 }, - }, - { - { -27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568 }, - { 12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335 }, - { 25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628 }, - }, - { - { -26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007 }, - { -2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772 }, - { -22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653 }, - }, - { - { 2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567 }, - { 13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686 }, - { 21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372 }, - }, - { - { -13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887 }, - { -23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954 }, - { -29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953 }, - }, - { - { 24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833 }, - { -16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532 }, - { -22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876 }, - }, - { - { 2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268 }, - { 33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214 }, - { 1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038 }, - }, - }, - { - { - { 6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800 }, - { 4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645 }, - { -4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664 }, - }, - { - { 1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933 }, - { -25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182 }, - { -17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222 }, - }, - { - { -18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991 }, - { 20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880 }, - { 9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092 }, - }, - { - { -16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295 }, - { 19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788 }, - { 8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553 }, - }, - { - { -15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026 }, - { 11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347 }, - { -18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033 }, - }, - { - { -23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395 }, - { -27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278 }, - { 1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890 }, - }, - { - { 32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995 }, - { -30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596 }, - { -11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891 }, - }, - { - { 31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060 }, - { 11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608 }, - { -20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606 }, - }, - }, - { - { - { 7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389 }, - { -19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016 }, - { -11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341 }, - }, - { - { -22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505 }, - { 14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553 }, - { -28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655 }, - }, - { - { 15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220 }, - { 12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631 }, - { -4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099 }, - }, - { - { 26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556 }, - { 14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749 }, - { 236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930 }, - }, - { - { 1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391 }, - { 5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253 }, - { 20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066 }, - }, - { - { 24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958 }, - { -11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082 }, - { -28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383 }, - }, - { - { -30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521 }, - { -11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807 }, - { 23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948 }, - }, - { - { 9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134 }, - { -32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455 }, - { 27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629 }, - }, - }, - { - { - { -8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069 }, - { -32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746 }, - { 24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919 }, - }, - { - { 11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837 }, - { 8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906 }, - { -28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771 }, - }, - { - { -25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817 }, - { 10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098 }, - { 10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409 }, - }, - { - { -12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504 }, - { -26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727 }, - { 28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420 }, - }, - { - { -32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003 }, - { -1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605 }, - { -30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384 }, - }, - { - { -26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701 }, - { -23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683 }, - { 29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708 }, - }, - { - { -3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563 }, - { -19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260 }, - { -5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387 }, - }, - { - { -19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672 }, - { 23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686 }, - { -24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665 }, - }, - }, - { - { - { 11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182 }, - { -31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277 }, - { 14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628 }, - }, - { - { -4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474 }, - { -26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539 }, - { -25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822 }, - }, - { - { -10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970 }, - { 19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756 }, - { -24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508 }, - }, - { - { -26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683 }, - { -10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655 }, - { -20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158 }, - }, - { - { -4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125 }, - { -15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839 }, - { -20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664 }, - }, - { - { 27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294 }, - { -18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899 }, - { -11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070 }, - }, - { - { 3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294 }, - { -15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949 }, - { -21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083 }, - }, - { - { 31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420 }, - { -5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940 }, - { 29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396 }, - }, - }, - { - { - { -12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567 }, - { 20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127 }, - { -16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294 }, - }, - { - { -12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887 }, - { 22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964 }, - { 16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195 }, - }, - { - { 9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244 }, - { 24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999 }, - { -1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762 }, - }, - { - { -18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274 }, - { -33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236 }, - { -16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605 }, - }, - { - { -13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761 }, - { -22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884 }, - { -6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482 }, - }, - { - { -24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638 }, - { -11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490 }, - { -32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170 }, - }, - { - { 5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736 }, - { 10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124 }, - { -17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392 }, - }, - { - { 8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029 }, - { 6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048 }, - { 28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958 }, - }, - }, - { - { - { 24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593 }, - { 26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071 }, - { -11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692 }, - }, - { - { 11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687 }, - { -160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441 }, - { -20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001 }, - }, - { - { -938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460 }, - { -19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007 }, - { -21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762 }, - }, - { - { 15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005 }, - { -9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674 }, - { 4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035 }, - }, - { - { 7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590 }, - { -2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957 }, - { -30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812 }, - }, - { - { 33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740 }, - { -18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122 }, - { -27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158 }, - }, - { - { 8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885 }, - { 26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140 }, - { 19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857 }, - }, - { - { 801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155 }, - { 19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260 }, - { 19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483 }, - }, - }, - { - { - { -3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677 }, - { 32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815 }, - { 22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751 }, - }, - { - { -16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203 }, - { -11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208 }, - { 1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230 }, - }, - { - { 16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850 }, - { -21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389 }, - { -9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968 }, - }, - { - { -11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689 }, - { 14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880 }, - { 5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304 }, - }, - { - { 30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632 }, - { -3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412 }, - { 20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566 }, - }, - { - { -20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038 }, - { -26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232 }, - { -1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943 }, - }, - { - { 17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856 }, - { 23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738 }, - { 15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971 }, - }, - { - { -27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718 }, - { -13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697 }, - { -11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883 }, - }, - }, - { - { - { 5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912 }, - { -26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358 }, - { 3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849 }, - }, - { - { 29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307 }, - { -14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977 }, - { -6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335 }, - }, - { - { -29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644 }, - { -22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616 }, - { -27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735 }, - }, - { - { -21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099 }, - { 29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341 }, - { -936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336 }, - }, - { - { -23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646 }, - { 31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425 }, - { -17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388 }, - }, - { - { -31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743 }, - { -16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822 }, - { -8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462 }, - }, - { - { 18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985 }, - { 9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702 }, - { -22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797 }, - }, - { - { 21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293 }, - { 27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100 }, - { 19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688 }, - }, - }, - { - { - { 12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186 }, - { 2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610 }, - { -2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707 }, - }, - { - { 7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220 }, - { 915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025 }, - { 32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044 }, - }, - { - { 32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992 }, - { -4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027 }, - { 21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197 }, - }, - { - { 8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901 }, - { 31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952 }, - { 19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878 }, - }, - { - { -28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390 }, - { 32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730 }, - { 2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730 }, - }, - { - { -19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180 }, - { -30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272 }, - { -15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715 }, - }, - { - { -22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970 }, - { -31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772 }, - { -17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865 }, - }, - { - { 15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750 }, - { 20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373 }, - { 32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348 }, - }, - }, - { - { - { 9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144 }, - { -22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195 }, - { 5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086 }, - }, - { - { -13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684 }, - { -8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518 }, - { -2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233 }, - }, - { - { -5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793 }, - { -2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794 }, - { 580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435 }, - }, - { - { 23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921 }, - { 13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518 }, - { 2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563 }, - }, - { - { 14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278 }, - { -27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024 }, - { 4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030 }, - }, - { - { 10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783 }, - { 27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717 }, - { 6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844 }, - }, - { - { 14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333 }, - { 16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048 }, - { 22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760 }, - }, - { - { -4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760 }, - { -15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757 }, - { -2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112 }, - }, - }, - { - { - { -19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468 }, - { 3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184 }, - { 10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289 }, - }, - { - { 15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066 }, - { 24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882 }, - { 13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226 }, - }, - { - { 16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101 }, - { 29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279 }, - { -6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811 }, - }, - { - { 27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709 }, - { 20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714 }, - { -2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121 }, - }, - { - { 9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464 }, - { 12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847 }, - { 13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400 }, - }, - { - { 4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414 }, - { -15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158 }, - { 17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045 }, - }, - { - { -461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415 }, - { -5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459 }, - { -31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079 }, - }, - { - { 21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412 }, - { -20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743 }, - { -14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836 }, - }, - }, - { - { - { 12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022 }, - { 18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429 }, - { -6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065 }, - }, - { - { 30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861 }, - { 10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000 }, - { -33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101 }, - }, - { - { 32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815 }, - { 29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642 }, - { 10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966 }, - }, - { - { 25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574 }, - { -21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742 }, - { -18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689 }, - }, - { - { 12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020 }, - { -10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772 }, - { 3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982 }, - }, - { - { -14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953 }, - { -16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218 }, - { -17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265 }, - }, - { - { 29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073 }, - { -3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325 }, - { -11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798 }, - }, - { - { -4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870 }, - { -7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863 }, - { -13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927 }, - }, - }, - { - { - { -2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267 }, - { -9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663 }, - { 22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862 }, - }, - { - { -25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673 }, - { 15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943 }, - { 15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020 }, - }, - { - { -4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238 }, - { 11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064 }, - { 14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795 }, - }, - { - { 15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052 }, - { -10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904 }, - { 29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531 }, - }, - { - { -13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979 }, - { -5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841 }, - { 10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431 }, - }, - { - { 10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324 }, - { -31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940 }, - { 10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320 }, - }, - { - { -15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184 }, - { 14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114 }, - { 30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878 }, - }, - { - { 12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784 }, - { -2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091 }, - { -16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585 }, - }, - }, - { - { - { -8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208 }, - { 10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864 }, - { 17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661 }, - }, - { - { 7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233 }, - { 26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212 }, - { -12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525 }, - }, - { - { -24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068 }, - { 9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397 }, - { -8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988 }, - }, - { - { 5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889 }, - { 32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038 }, - { 14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697 }, - }, - { - { 20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875 }, - { -25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905 }, - { -25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656 }, - }, - { - { 11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818 }, - { 27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714 }, - { 10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203 }, - }, - { - { 20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931 }, - { -30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024 }, - { -23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084 }, - }, - { - { -1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204 }, - { 20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817 }, - { 27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667 }, - }, - }, - { - { - { 11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504 }, - { -12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768 }, - { -19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255 }, - }, - { - { 6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790 }, - { 1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438 }, - { -22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333 }, - }, - { - { 17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971 }, - { 31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905 }, - { 29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409 }, - }, - { - { 12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409 }, - { 6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499 }, - { -8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363 }, - }, - { - { 28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664 }, - { -11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324 }, - { -21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940 }, - }, - { - { 13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990 }, - { -17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914 }, - { -25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290 }, - }, - { - { 24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257 }, - { -6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433 }, - { -16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236 }, - }, - { - { -12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045 }, - { 11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093 }, - { -1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347 }, - }, - }, - { - { - { -28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191 }, - { -15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507 }, - { -12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906 }, - }, - { - { 3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018 }, - { -16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109 }, - { -23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926 }, - }, - { - { -24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528 }, - { 8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625 }, - { -32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286 }, - }, - { - { 2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033 }, - { 27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866 }, - { 21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896 }, - }, - { - { 30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075 }, - { 26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347 }, - { -22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437 }, - }, - { - { -5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165 }, - { -18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588 }, - { -32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193 }, - }, - { - { -19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017 }, - { -28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883 }, - { 21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961 }, - }, - { - { 8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043 }, - { 29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663 }, - { -20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362 }, - }, - }, - { - { - { -33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860 }, - { 2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466 }, - { -24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063 }, - }, - { - { -26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997 }, - { -1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295 }, - { -13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369 }, - }, - { - { 9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385 }, - { 18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109 }, - { 2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906 }, - }, - { - { 4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424 }, - { -19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185 }, - { 7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962 }, - }, - { - { -7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325 }, - { 10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593 }, - { 696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404 }, - }, - { - { -11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644 }, - { 17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801 }, - { 26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804 }, - }, - { - { -31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884 }, - { -586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577 }, - { -9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849 }, - }, - { - { 32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473 }, - { -8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644 }, - { -2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319 }, - }, - }, - { - { - { -11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599 }, - { -9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768 }, - { -27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084 }, - }, - { - { -27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328 }, - { -15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369 }, - { 20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920 }, - }, - { - { 12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815 }, - { -32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025 }, - { -21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397 }, - }, - { - { -20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448 }, - { 6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981 }, - { 30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165 }, - }, - { - { 32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501 }, - { 17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073 }, - { -1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861 }, - }, - { - { 14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845 }, - { -1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211 }, - { 18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870 }, - }, - { - { 10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096 }, - { 33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803 }, - { -32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168 }, - }, - { - { 30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965 }, - { -14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505 }, - { 18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598 }, - }, - }, - { - { - { 5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782 }, - { 5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900 }, - { -31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479 }, - }, - { - { -12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208 }, - { 8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232 }, - { 17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719 }, - }, - { - { 16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271 }, - { -4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326 }, - { -8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132 }, - }, - { - { 14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300 }, - { 8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570 }, - { 15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670 }, - }, - { - { -2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994 }, - { -12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913 }, - { 31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317 }, - }, - { - { -25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730 }, - { 842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096 }, - { -4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078 }, - }, - { - { -15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411 }, - { -19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905 }, - { -9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654 }, - }, - { - { -28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870 }, - { -23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498 }, - { 12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579 }, - }, - }, - { - { - { 14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677 }, - { 10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647 }, - { -2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743 }, - }, - { - { -25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468 }, - { 21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375 }, - { -25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155 }, - }, - { - { 6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725 }, - { -12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612 }, - { -10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943 }, - }, - { - { -30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944 }, - { 30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928 }, - { 9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406 }, - }, - { - { 22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139 }, - { -8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963 }, - { -31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693 }, - }, - { - { 1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734 }, - { -448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680 }, - { -24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410 }, - }, - { - { -9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931 }, - { -16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654 }, - { 22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710 }, - }, - { - { 29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180 }, - { -26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684 }, - { -10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895 }, - }, - }, - { - { - { 22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501 }, - { -11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413 }, - { 6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880 }, - }, - { - { -8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874 }, - { 22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962 }, - { -7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899 }, - }, - { - { 21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152 }, - { 9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063 }, - { 7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080 }, - }, - { - { -9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146 }, - { -17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183 }, - { -19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133 }, - }, - { - { -32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421 }, - { -3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622 }, - { -4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197 }, - }, - { - { 2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663 }, - { 31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753 }, - { 4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755 }, - }, - { - { -9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862 }, - { -26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118 }, - { 26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171 }, - }, - { - { 15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380 }, - { 16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824 }, - { 28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270 }, - }, - }, - { - { - { -817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438 }, - { -31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584 }, - { -594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562 }, - }, - { - { 30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471 }, - { 18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610 }, - { 19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269 }, - }, - { - { -30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650 }, - { 14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369 }, - { 19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461 }, - }, - { - { 30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462 }, - { -5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793 }, - { -2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218 }, - }, - { - { -24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226 }, - { 18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019 }, - { -15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037 }, - }, - { - { 31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171 }, - { -17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132 }, - { -28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841 }, - }, - { - { 21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181 }, - { -33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210 }, - { -1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040 }, - }, - { - { 3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935 }, - { 24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105 }, - { -28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814 }, - }, - }, - { - { - { 793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852 }, - { 5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581 }, - { -4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646 }, - }, - { - { 10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844 }, - { 10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025 }, - { 27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453 }, - }, - { - { -23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068 }, - { 4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192 }, - { -17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921 }, - }, - { - { -9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259 }, - { -12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426 }, - { -5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072 }, - }, - { - { -17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305 }, - { 13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832 }, - { 28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943 }, - }, - { - { -16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011 }, - { 24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447 }, - { 17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494 }, - }, - { - { -28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245 }, - { -20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859 }, - { 28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915 }, - }, - { - { 16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707 }, - { 10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848 }, - { -11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224 }, - }, - }, - { - { - { -25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391 }, - { 15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215 }, - { -23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101 }, - }, - { - { 23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713 }, - { 21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849 }, - { -7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930 }, - }, - { - { -29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940 }, - { -21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031 }, - { -17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404 }, - }, - { - { -25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243 }, - { -23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116 }, - { -24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525 }, - }, - { - { -23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509 }, - { -10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883 }, - { 15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865 }, - }, - { - { -3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660 }, - { 4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273 }, - { -28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138 }, - }, - { - { -25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560 }, - { -10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135 }, - { 2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941 }, - }, - { - { -4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739 }, - { 18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756 }, - { -30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819 }, - }, - }, - { - { - { -6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347 }, - { -27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028 }, - { 21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075 }, - }, - { - { 16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799 }, - { -2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609 }, - { -25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817 }, - }, - { - { -23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989 }, - { -30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523 }, - { 4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278 }, - }, - { - { 31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045 }, - { 19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377 }, - { 24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480 }, - }, - { - { 17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016 }, - { 510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426 }, - { 18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525 }, - }, - { - { 13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396 }, - { 9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080 }, - { 12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892 }, - }, - { - { 15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275 }, - { 11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074 }, - { 20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140 }, - }, - { - { -16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717 }, - { -1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101 }, - { 24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127 }, - }, - }, - { - { - { -12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632 }, - { -26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415 }, - { -31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160 }, - }, - { - { 31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876 }, - { 22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625 }, - { -15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478 }, - }, - { - { 27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164 }, - { 26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595 }, - { -7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248 }, - }, - { - { -16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858 }, - { 15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193 }, - { 8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184 }, - }, - { - { -18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942 }, - { -1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635 }, - { 21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948 }, - }, - { - { 11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935 }, - { -25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415 }, - { -15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416 }, - }, - { - { -7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018 }, - { 4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778 }, - { 366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659 }, - }, - { - { -24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385 }, - { 18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503 }, - { 476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329 }, - }, - }, - { - { - { 20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056 }, - { -13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838 }, - { 24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948 }, - }, - { - { -3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691 }, - { -15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118 }, - { -23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517 }, - }, - { - { -20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269 }, - { -6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904 }, - { -23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589 }, - }, - { - { -28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193 }, - { -7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910 }, - { -30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930 }, - }, - { - { -7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667 }, - { 25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481 }, - { -9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876 }, - }, - { - { 22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640 }, - { -8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278 }, - { -21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112 }, - }, - { - { 26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272 }, - { 17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012 }, - { -10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221 }, - }, - { - { 30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046 }, - { 13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345 }, - { -19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310 }, - }, - }, - { - { - { 19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937 }, - { 31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636 }, - { -9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008 }, - }, - { - { -2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429 }, - { -15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576 }, - { 31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066 }, - }, - { - { -9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490 }, - { -12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104 }, - { 33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053 }, - }, - { - { 31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275 }, - { -20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511 }, - { 22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095 }, - }, - { - { -28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439 }, - { 23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939 }, - { -23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424 }, - }, - { - { 2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310 }, - { 3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608 }, - { -32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079 }, - }, - { - { -23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101 }, - { 21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418 }, - { 18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576 }, - }, - { - { 30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356 }, - { 9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996 }, - { -26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099 }, - }, - }, - { - { - { -26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728 }, - { -13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658 }, - { -10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242 }, - }, - { - { -21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001 }, - { -4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766 }, - { 18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373 }, - }, - { - { 26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458 }, - { -17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628 }, - { -13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657 }, - }, - { - { -23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062 }, - { 25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616 }, - { 31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014 }, - }, - { - { 24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383 }, - { -25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814 }, - { -20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718 }, - }, - { - { 30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417 }, - { 2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222 }, - { 33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444 }, - }, - { - { -20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597 }, - { 23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970 }, - { 1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799 }, - }, - { - { -5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647 }, - { 13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511 }, - { -29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032 }, - }, - }, - { - { - { 9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834 }, - { -23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461 }, - { 29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062 }, - }, - { - { -25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516 }, - { -20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547 }, - { -24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240 }, - }, - { - { -17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038 }, - { -33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741 }, - { 16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103 }, - }, - { - { -19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747 }, - { -1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323 }, - { 31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016 }, - }, - { - { -14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373 }, - { 15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228 }, - { -2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141 }, - }, - { - { 16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399 }, - { 11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831 }, - { -185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376 }, - }, - { - { -32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313 }, - { -18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958 }, - { -6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577 }, - }, - { - { -22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743 }, - { 29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684 }, - { -20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476 }, - }, - }, -}; diff --git a/pkg/urcrypt/ed25519/src/sc.c b/pkg/urcrypt/ed25519/src/sc.c deleted file mode 100644 index ca5bad2ca..000000000 --- a/pkg/urcrypt/ed25519/src/sc.c +++ /dev/null @@ -1,809 +0,0 @@ -#include "fixedint.h" -#include "sc.h" - -static uint64_t load_3(const unsigned char *in) { - uint64_t result; - - result = (uint64_t) in[0]; - result |= ((uint64_t) in[1]) << 8; - result |= ((uint64_t) in[2]) << 16; - - return result; -} - -static uint64_t load_4(const unsigned char *in) { - uint64_t result; - - result = (uint64_t) in[0]; - result |= ((uint64_t) in[1]) << 8; - result |= ((uint64_t) in[2]) << 16; - result |= ((uint64_t) in[3]) << 24; - - return result; -} - -/* -Input: - s[0]+256*s[1]+...+256^63*s[63] = s - -Output: - s[0]+256*s[1]+...+256^31*s[31] = s mod l - where l = 2^252 + 27742317777372353535851937790883648493. - Overwrites s in place. -*/ - -void sc_reduce(unsigned char *s) { - int64_t s0 = 2097151 & load_3(s); - int64_t s1 = 2097151 & (load_4(s + 2) >> 5); - int64_t s2 = 2097151 & (load_3(s + 5) >> 2); - int64_t s3 = 2097151 & (load_4(s + 7) >> 7); - int64_t s4 = 2097151 & (load_4(s + 10) >> 4); - int64_t s5 = 2097151 & (load_3(s + 13) >> 1); - int64_t s6 = 2097151 & (load_4(s + 15) >> 6); - int64_t s7 = 2097151 & (load_3(s + 18) >> 3); - int64_t s8 = 2097151 & load_3(s + 21); - int64_t s9 = 2097151 & (load_4(s + 23) >> 5); - int64_t s10 = 2097151 & (load_3(s + 26) >> 2); - int64_t s11 = 2097151 & (load_4(s + 28) >> 7); - int64_t s12 = 2097151 & (load_4(s + 31) >> 4); - int64_t s13 = 2097151 & (load_3(s + 34) >> 1); - int64_t s14 = 2097151 & (load_4(s + 36) >> 6); - int64_t s15 = 2097151 & (load_3(s + 39) >> 3); - int64_t s16 = 2097151 & load_3(s + 42); - int64_t s17 = 2097151 & (load_4(s + 44) >> 5); - int64_t s18 = 2097151 & (load_3(s + 47) >> 2); - int64_t s19 = 2097151 & (load_4(s + 49) >> 7); - int64_t s20 = 2097151 & (load_4(s + 52) >> 4); - int64_t s21 = 2097151 & (load_3(s + 55) >> 1); - int64_t s22 = 2097151 & (load_4(s + 57) >> 6); - int64_t s23 = (load_4(s + 60) >> 3); - int64_t carry0; - int64_t carry1; - int64_t carry2; - int64_t carry3; - int64_t carry4; - int64_t carry5; - int64_t carry6; - int64_t carry7; - int64_t carry8; - int64_t carry9; - int64_t carry10; - int64_t carry11; - int64_t carry12; - int64_t carry13; - int64_t carry14; - int64_t carry15; - int64_t carry16; - - s11 += s23 * 666643; - s12 += s23 * 470296; - s13 += s23 * 654183; - s14 -= s23 * 997805; - s15 += s23 * 136657; - s16 -= s23 * 683901; - s23 = 0; - s10 += s22 * 666643; - s11 += s22 * 470296; - s12 += s22 * 654183; - s13 -= s22 * 997805; - s14 += s22 * 136657; - s15 -= s22 * 683901; - s22 = 0; - s9 += s21 * 666643; - s10 += s21 * 470296; - s11 += s21 * 654183; - s12 -= s21 * 997805; - s13 += s21 * 136657; - s14 -= s21 * 683901; - s21 = 0; - s8 += s20 * 666643; - s9 += s20 * 470296; - s10 += s20 * 654183; - s11 -= s20 * 997805; - s12 += s20 * 136657; - s13 -= s20 * 683901; - s20 = 0; - s7 += s19 * 666643; - s8 += s19 * 470296; - s9 += s19 * 654183; - s10 -= s19 * 997805; - s11 += s19 * 136657; - s12 -= s19 * 683901; - s19 = 0; - s6 += s18 * 666643; - s7 += s18 * 470296; - s8 += s18 * 654183; - s9 -= s18 * 997805; - s10 += s18 * 136657; - s11 -= s18 * 683901; - s18 = 0; - carry6 = (s6 + (1 << 20)) >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry8 = (s8 + (1 << 20)) >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry10 = (s10 + (1 << 20)) >> 21; - s11 += carry10; - s10 -= carry10 << 21; - carry12 = (s12 + (1 << 20)) >> 21; - s13 += carry12; - s12 -= carry12 << 21; - carry14 = (s14 + (1 << 20)) >> 21; - s15 += carry14; - s14 -= carry14 << 21; - carry16 = (s16 + (1 << 20)) >> 21; - s17 += carry16; - s16 -= carry16 << 21; - carry7 = (s7 + (1 << 20)) >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry9 = (s9 + (1 << 20)) >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry11 = (s11 + (1 << 20)) >> 21; - s12 += carry11; - s11 -= carry11 << 21; - carry13 = (s13 + (1 << 20)) >> 21; - s14 += carry13; - s13 -= carry13 << 21; - carry15 = (s15 + (1 << 20)) >> 21; - s16 += carry15; - s15 -= carry15 << 21; - s5 += s17 * 666643; - s6 += s17 * 470296; - s7 += s17 * 654183; - s8 -= s17 * 997805; - s9 += s17 * 136657; - s10 -= s17 * 683901; - s17 = 0; - s4 += s16 * 666643; - s5 += s16 * 470296; - s6 += s16 * 654183; - s7 -= s16 * 997805; - s8 += s16 * 136657; - s9 -= s16 * 683901; - s16 = 0; - s3 += s15 * 666643; - s4 += s15 * 470296; - s5 += s15 * 654183; - s6 -= s15 * 997805; - s7 += s15 * 136657; - s8 -= s15 * 683901; - s15 = 0; - s2 += s14 * 666643; - s3 += s14 * 470296; - s4 += s14 * 654183; - s5 -= s14 * 997805; - s6 += s14 * 136657; - s7 -= s14 * 683901; - s14 = 0; - s1 += s13 * 666643; - s2 += s13 * 470296; - s3 += s13 * 654183; - s4 -= s13 * 997805; - s5 += s13 * 136657; - s6 -= s13 * 683901; - s13 = 0; - s0 += s12 * 666643; - s1 += s12 * 470296; - s2 += s12 * 654183; - s3 -= s12 * 997805; - s4 += s12 * 136657; - s5 -= s12 * 683901; - s12 = 0; - carry0 = (s0 + (1 << 20)) >> 21; - s1 += carry0; - s0 -= carry0 << 21; - carry2 = (s2 + (1 << 20)) >> 21; - s3 += carry2; - s2 -= carry2 << 21; - carry4 = (s4 + (1 << 20)) >> 21; - s5 += carry4; - s4 -= carry4 << 21; - carry6 = (s6 + (1 << 20)) >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry8 = (s8 + (1 << 20)) >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry10 = (s10 + (1 << 20)) >> 21; - s11 += carry10; - s10 -= carry10 << 21; - carry1 = (s1 + (1 << 20)) >> 21; - s2 += carry1; - s1 -= carry1 << 21; - carry3 = (s3 + (1 << 20)) >> 21; - s4 += carry3; - s3 -= carry3 << 21; - carry5 = (s5 + (1 << 20)) >> 21; - s6 += carry5; - s5 -= carry5 << 21; - carry7 = (s7 + (1 << 20)) >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry9 = (s9 + (1 << 20)) >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry11 = (s11 + (1 << 20)) >> 21; - s12 += carry11; - s11 -= carry11 << 21; - s0 += s12 * 666643; - s1 += s12 * 470296; - s2 += s12 * 654183; - s3 -= s12 * 997805; - s4 += s12 * 136657; - s5 -= s12 * 683901; - s12 = 0; - carry0 = s0 >> 21; - s1 += carry0; - s0 -= carry0 << 21; - carry1 = s1 >> 21; - s2 += carry1; - s1 -= carry1 << 21; - carry2 = s2 >> 21; - s3 += carry2; - s2 -= carry2 << 21; - carry3 = s3 >> 21; - s4 += carry3; - s3 -= carry3 << 21; - carry4 = s4 >> 21; - s5 += carry4; - s4 -= carry4 << 21; - carry5 = s5 >> 21; - s6 += carry5; - s5 -= carry5 << 21; - carry6 = s6 >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry7 = s7 >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry8 = s8 >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry9 = s9 >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry10 = s10 >> 21; - s11 += carry10; - s10 -= carry10 << 21; - carry11 = s11 >> 21; - s12 += carry11; - s11 -= carry11 << 21; - s0 += s12 * 666643; - s1 += s12 * 470296; - s2 += s12 * 654183; - s3 -= s12 * 997805; - s4 += s12 * 136657; - s5 -= s12 * 683901; - s12 = 0; - carry0 = s0 >> 21; - s1 += carry0; - s0 -= carry0 << 21; - carry1 = s1 >> 21; - s2 += carry1; - s1 -= carry1 << 21; - carry2 = s2 >> 21; - s3 += carry2; - s2 -= carry2 << 21; - carry3 = s3 >> 21; - s4 += carry3; - s3 -= carry3 << 21; - carry4 = s4 >> 21; - s5 += carry4; - s4 -= carry4 << 21; - carry5 = s5 >> 21; - s6 += carry5; - s5 -= carry5 << 21; - carry6 = s6 >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry7 = s7 >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry8 = s8 >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry9 = s9 >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry10 = s10 >> 21; - s11 += carry10; - s10 -= carry10 << 21; - - s[0] = (unsigned char) (s0 >> 0); - s[1] = (unsigned char) (s0 >> 8); - s[2] = (unsigned char) ((s0 >> 16) | (s1 << 5)); - s[3] = (unsigned char) (s1 >> 3); - s[4] = (unsigned char) (s1 >> 11); - s[5] = (unsigned char) ((s1 >> 19) | (s2 << 2)); - s[6] = (unsigned char) (s2 >> 6); - s[7] = (unsigned char) ((s2 >> 14) | (s3 << 7)); - s[8] = (unsigned char) (s3 >> 1); - s[9] = (unsigned char) (s3 >> 9); - s[10] = (unsigned char) ((s3 >> 17) | (s4 << 4)); - s[11] = (unsigned char) (s4 >> 4); - s[12] = (unsigned char) (s4 >> 12); - s[13] = (unsigned char) ((s4 >> 20) | (s5 << 1)); - s[14] = (unsigned char) (s5 >> 7); - s[15] = (unsigned char) ((s5 >> 15) | (s6 << 6)); - s[16] = (unsigned char) (s6 >> 2); - s[17] = (unsigned char) (s6 >> 10); - s[18] = (unsigned char) ((s6 >> 18) | (s7 << 3)); - s[19] = (unsigned char) (s7 >> 5); - s[20] = (unsigned char) (s7 >> 13); - s[21] = (unsigned char) (s8 >> 0); - s[22] = (unsigned char) (s8 >> 8); - s[23] = (unsigned char) ((s8 >> 16) | (s9 << 5)); - s[24] = (unsigned char) (s9 >> 3); - s[25] = (unsigned char) (s9 >> 11); - s[26] = (unsigned char) ((s9 >> 19) | (s10 << 2)); - s[27] = (unsigned char) (s10 >> 6); - s[28] = (unsigned char) ((s10 >> 14) | (s11 << 7)); - s[29] = (unsigned char) (s11 >> 1); - s[30] = (unsigned char) (s11 >> 9); - s[31] = (unsigned char) (s11 >> 17); -} - - - -/* -Input: - a[0]+256*a[1]+...+256^31*a[31] = a - b[0]+256*b[1]+...+256^31*b[31] = b - c[0]+256*c[1]+...+256^31*c[31] = c - -Output: - s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l - where l = 2^252 + 27742317777372353535851937790883648493. -*/ - -void sc_muladd(unsigned char *s, const unsigned char *a, const unsigned char *b, const unsigned char *c) { - int64_t a0 = 2097151 & load_3(a); - int64_t a1 = 2097151 & (load_4(a + 2) >> 5); - int64_t a2 = 2097151 & (load_3(a + 5) >> 2); - int64_t a3 = 2097151 & (load_4(a + 7) >> 7); - int64_t a4 = 2097151 & (load_4(a + 10) >> 4); - int64_t a5 = 2097151 & (load_3(a + 13) >> 1); - int64_t a6 = 2097151 & (load_4(a + 15) >> 6); - int64_t a7 = 2097151 & (load_3(a + 18) >> 3); - int64_t a8 = 2097151 & load_3(a + 21); - int64_t a9 = 2097151 & (load_4(a + 23) >> 5); - int64_t a10 = 2097151 & (load_3(a + 26) >> 2); - int64_t a11 = (load_4(a + 28) >> 7); - int64_t b0 = 2097151 & load_3(b); - int64_t b1 = 2097151 & (load_4(b + 2) >> 5); - int64_t b2 = 2097151 & (load_3(b + 5) >> 2); - int64_t b3 = 2097151 & (load_4(b + 7) >> 7); - int64_t b4 = 2097151 & (load_4(b + 10) >> 4); - int64_t b5 = 2097151 & (load_3(b + 13) >> 1); - int64_t b6 = 2097151 & (load_4(b + 15) >> 6); - int64_t b7 = 2097151 & (load_3(b + 18) >> 3); - int64_t b8 = 2097151 & load_3(b + 21); - int64_t b9 = 2097151 & (load_4(b + 23) >> 5); - int64_t b10 = 2097151 & (load_3(b + 26) >> 2); - int64_t b11 = (load_4(b + 28) >> 7); - int64_t c0 = 2097151 & load_3(c); - int64_t c1 = 2097151 & (load_4(c + 2) >> 5); - int64_t c2 = 2097151 & (load_3(c + 5) >> 2); - int64_t c3 = 2097151 & (load_4(c + 7) >> 7); - int64_t c4 = 2097151 & (load_4(c + 10) >> 4); - int64_t c5 = 2097151 & (load_3(c + 13) >> 1); - int64_t c6 = 2097151 & (load_4(c + 15) >> 6); - int64_t c7 = 2097151 & (load_3(c + 18) >> 3); - int64_t c8 = 2097151 & load_3(c + 21); - int64_t c9 = 2097151 & (load_4(c + 23) >> 5); - int64_t c10 = 2097151 & (load_3(c + 26) >> 2); - int64_t c11 = (load_4(c + 28) >> 7); - int64_t s0; - int64_t s1; - int64_t s2; - int64_t s3; - int64_t s4; - int64_t s5; - int64_t s6; - int64_t s7; - int64_t s8; - int64_t s9; - int64_t s10; - int64_t s11; - int64_t s12; - int64_t s13; - int64_t s14; - int64_t s15; - int64_t s16; - int64_t s17; - int64_t s18; - int64_t s19; - int64_t s20; - int64_t s21; - int64_t s22; - int64_t s23; - int64_t carry0; - int64_t carry1; - int64_t carry2; - int64_t carry3; - int64_t carry4; - int64_t carry5; - int64_t carry6; - int64_t carry7; - int64_t carry8; - int64_t carry9; - int64_t carry10; - int64_t carry11; - int64_t carry12; - int64_t carry13; - int64_t carry14; - int64_t carry15; - int64_t carry16; - int64_t carry17; - int64_t carry18; - int64_t carry19; - int64_t carry20; - int64_t carry21; - int64_t carry22; - - s0 = c0 + a0 * b0; - s1 = c1 + a0 * b1 + a1 * b0; - s2 = c2 + a0 * b2 + a1 * b1 + a2 * b0; - s3 = c3 + a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0; - s4 = c4 + a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0; - s5 = c5 + a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0; - s6 = c6 + a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0; - s7 = c7 + a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 + a6 * b1 + a7 * b0; - s8 = c8 + a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 + a6 * b2 + a7 * b1 + a8 * b0; - s9 = c9 + a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 + a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0; - s10 = c10 + a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 + a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0; - s11 = c11 + a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 + a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0; - s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + a7 * b5 + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1; - s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + a8 * b5 + a9 * b4 + a10 * b3 + a11 * b2; - s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + a9 * b5 + a10 * b4 + a11 * b3; - s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + a10 * b5 + a11 * b4; - s16 = a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5; - s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6; - s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7; - s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8; - s20 = a9 * b11 + a10 * b10 + a11 * b9; - s21 = a10 * b11 + a11 * b10; - s22 = a11 * b11; - s23 = 0; - carry0 = (s0 + (1 << 20)) >> 21; - s1 += carry0; - s0 -= carry0 << 21; - carry2 = (s2 + (1 << 20)) >> 21; - s3 += carry2; - s2 -= carry2 << 21; - carry4 = (s4 + (1 << 20)) >> 21; - s5 += carry4; - s4 -= carry4 << 21; - carry6 = (s6 + (1 << 20)) >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry8 = (s8 + (1 << 20)) >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry10 = (s10 + (1 << 20)) >> 21; - s11 += carry10; - s10 -= carry10 << 21; - carry12 = (s12 + (1 << 20)) >> 21; - s13 += carry12; - s12 -= carry12 << 21; - carry14 = (s14 + (1 << 20)) >> 21; - s15 += carry14; - s14 -= carry14 << 21; - carry16 = (s16 + (1 << 20)) >> 21; - s17 += carry16; - s16 -= carry16 << 21; - carry18 = (s18 + (1 << 20)) >> 21; - s19 += carry18; - s18 -= carry18 << 21; - carry20 = (s20 + (1 << 20)) >> 21; - s21 += carry20; - s20 -= carry20 << 21; - carry22 = (s22 + (1 << 20)) >> 21; - s23 += carry22; - s22 -= carry22 << 21; - carry1 = (s1 + (1 << 20)) >> 21; - s2 += carry1; - s1 -= carry1 << 21; - carry3 = (s3 + (1 << 20)) >> 21; - s4 += carry3; - s3 -= carry3 << 21; - carry5 = (s5 + (1 << 20)) >> 21; - s6 += carry5; - s5 -= carry5 << 21; - carry7 = (s7 + (1 << 20)) >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry9 = (s9 + (1 << 20)) >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry11 = (s11 + (1 << 20)) >> 21; - s12 += carry11; - s11 -= carry11 << 21; - carry13 = (s13 + (1 << 20)) >> 21; - s14 += carry13; - s13 -= carry13 << 21; - carry15 = (s15 + (1 << 20)) >> 21; - s16 += carry15; - s15 -= carry15 << 21; - carry17 = (s17 + (1 << 20)) >> 21; - s18 += carry17; - s17 -= carry17 << 21; - carry19 = (s19 + (1 << 20)) >> 21; - s20 += carry19; - s19 -= carry19 << 21; - carry21 = (s21 + (1 << 20)) >> 21; - s22 += carry21; - s21 -= carry21 << 21; - s11 += s23 * 666643; - s12 += s23 * 470296; - s13 += s23 * 654183; - s14 -= s23 * 997805; - s15 += s23 * 136657; - s16 -= s23 * 683901; - s23 = 0; - s10 += s22 * 666643; - s11 += s22 * 470296; - s12 += s22 * 654183; - s13 -= s22 * 997805; - s14 += s22 * 136657; - s15 -= s22 * 683901; - s22 = 0; - s9 += s21 * 666643; - s10 += s21 * 470296; - s11 += s21 * 654183; - s12 -= s21 * 997805; - s13 += s21 * 136657; - s14 -= s21 * 683901; - s21 = 0; - s8 += s20 * 666643; - s9 += s20 * 470296; - s10 += s20 * 654183; - s11 -= s20 * 997805; - s12 += s20 * 136657; - s13 -= s20 * 683901; - s20 = 0; - s7 += s19 * 666643; - s8 += s19 * 470296; - s9 += s19 * 654183; - s10 -= s19 * 997805; - s11 += s19 * 136657; - s12 -= s19 * 683901; - s19 = 0; - s6 += s18 * 666643; - s7 += s18 * 470296; - s8 += s18 * 654183; - s9 -= s18 * 997805; - s10 += s18 * 136657; - s11 -= s18 * 683901; - s18 = 0; - carry6 = (s6 + (1 << 20)) >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry8 = (s8 + (1 << 20)) >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry10 = (s10 + (1 << 20)) >> 21; - s11 += carry10; - s10 -= carry10 << 21; - carry12 = (s12 + (1 << 20)) >> 21; - s13 += carry12; - s12 -= carry12 << 21; - carry14 = (s14 + (1 << 20)) >> 21; - s15 += carry14; - s14 -= carry14 << 21; - carry16 = (s16 + (1 << 20)) >> 21; - s17 += carry16; - s16 -= carry16 << 21; - carry7 = (s7 + (1 << 20)) >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry9 = (s9 + (1 << 20)) >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry11 = (s11 + (1 << 20)) >> 21; - s12 += carry11; - s11 -= carry11 << 21; - carry13 = (s13 + (1 << 20)) >> 21; - s14 += carry13; - s13 -= carry13 << 21; - carry15 = (s15 + (1 << 20)) >> 21; - s16 += carry15; - s15 -= carry15 << 21; - s5 += s17 * 666643; - s6 += s17 * 470296; - s7 += s17 * 654183; - s8 -= s17 * 997805; - s9 += s17 * 136657; - s10 -= s17 * 683901; - s17 = 0; - s4 += s16 * 666643; - s5 += s16 * 470296; - s6 += s16 * 654183; - s7 -= s16 * 997805; - s8 += s16 * 136657; - s9 -= s16 * 683901; - s16 = 0; - s3 += s15 * 666643; - s4 += s15 * 470296; - s5 += s15 * 654183; - s6 -= s15 * 997805; - s7 += s15 * 136657; - s8 -= s15 * 683901; - s15 = 0; - s2 += s14 * 666643; - s3 += s14 * 470296; - s4 += s14 * 654183; - s5 -= s14 * 997805; - s6 += s14 * 136657; - s7 -= s14 * 683901; - s14 = 0; - s1 += s13 * 666643; - s2 += s13 * 470296; - s3 += s13 * 654183; - s4 -= s13 * 997805; - s5 += s13 * 136657; - s6 -= s13 * 683901; - s13 = 0; - s0 += s12 * 666643; - s1 += s12 * 470296; - s2 += s12 * 654183; - s3 -= s12 * 997805; - s4 += s12 * 136657; - s5 -= s12 * 683901; - s12 = 0; - carry0 = (s0 + (1 << 20)) >> 21; - s1 += carry0; - s0 -= carry0 << 21; - carry2 = (s2 + (1 << 20)) >> 21; - s3 += carry2; - s2 -= carry2 << 21; - carry4 = (s4 + (1 << 20)) >> 21; - s5 += carry4; - s4 -= carry4 << 21; - carry6 = (s6 + (1 << 20)) >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry8 = (s8 + (1 << 20)) >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry10 = (s10 + (1 << 20)) >> 21; - s11 += carry10; - s10 -= carry10 << 21; - carry1 = (s1 + (1 << 20)) >> 21; - s2 += carry1; - s1 -= carry1 << 21; - carry3 = (s3 + (1 << 20)) >> 21; - s4 += carry3; - s3 -= carry3 << 21; - carry5 = (s5 + (1 << 20)) >> 21; - s6 += carry5; - s5 -= carry5 << 21; - carry7 = (s7 + (1 << 20)) >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry9 = (s9 + (1 << 20)) >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry11 = (s11 + (1 << 20)) >> 21; - s12 += carry11; - s11 -= carry11 << 21; - s0 += s12 * 666643; - s1 += s12 * 470296; - s2 += s12 * 654183; - s3 -= s12 * 997805; - s4 += s12 * 136657; - s5 -= s12 * 683901; - s12 = 0; - carry0 = s0 >> 21; - s1 += carry0; - s0 -= carry0 << 21; - carry1 = s1 >> 21; - s2 += carry1; - s1 -= carry1 << 21; - carry2 = s2 >> 21; - s3 += carry2; - s2 -= carry2 << 21; - carry3 = s3 >> 21; - s4 += carry3; - s3 -= carry3 << 21; - carry4 = s4 >> 21; - s5 += carry4; - s4 -= carry4 << 21; - carry5 = s5 >> 21; - s6 += carry5; - s5 -= carry5 << 21; - carry6 = s6 >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry7 = s7 >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry8 = s8 >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry9 = s9 >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry10 = s10 >> 21; - s11 += carry10; - s10 -= carry10 << 21; - carry11 = s11 >> 21; - s12 += carry11; - s11 -= carry11 << 21; - s0 += s12 * 666643; - s1 += s12 * 470296; - s2 += s12 * 654183; - s3 -= s12 * 997805; - s4 += s12 * 136657; - s5 -= s12 * 683901; - s12 = 0; - carry0 = s0 >> 21; - s1 += carry0; - s0 -= carry0 << 21; - carry1 = s1 >> 21; - s2 += carry1; - s1 -= carry1 << 21; - carry2 = s2 >> 21; - s3 += carry2; - s2 -= carry2 << 21; - carry3 = s3 >> 21; - s4 += carry3; - s3 -= carry3 << 21; - carry4 = s4 >> 21; - s5 += carry4; - s4 -= carry4 << 21; - carry5 = s5 >> 21; - s6 += carry5; - s5 -= carry5 << 21; - carry6 = s6 >> 21; - s7 += carry6; - s6 -= carry6 << 21; - carry7 = s7 >> 21; - s8 += carry7; - s7 -= carry7 << 21; - carry8 = s8 >> 21; - s9 += carry8; - s8 -= carry8 << 21; - carry9 = s9 >> 21; - s10 += carry9; - s9 -= carry9 << 21; - carry10 = s10 >> 21; - s11 += carry10; - s10 -= carry10 << 21; - - s[0] = (unsigned char) (s0 >> 0); - s[1] = (unsigned char) (s0 >> 8); - s[2] = (unsigned char) ((s0 >> 16) | (s1 << 5)); - s[3] = (unsigned char) (s1 >> 3); - s[4] = (unsigned char) (s1 >> 11); - s[5] = (unsigned char) ((s1 >> 19) | (s2 << 2)); - s[6] = (unsigned char) (s2 >> 6); - s[7] = (unsigned char) ((s2 >> 14) | (s3 << 7)); - s[8] = (unsigned char) (s3 >> 1); - s[9] = (unsigned char) (s3 >> 9); - s[10] = (unsigned char) ((s3 >> 17) | (s4 << 4)); - s[11] = (unsigned char) (s4 >> 4); - s[12] = (unsigned char) (s4 >> 12); - s[13] = (unsigned char) ((s4 >> 20) | (s5 << 1)); - s[14] = (unsigned char) (s5 >> 7); - s[15] = (unsigned char) ((s5 >> 15) | (s6 << 6)); - s[16] = (unsigned char) (s6 >> 2); - s[17] = (unsigned char) (s6 >> 10); - s[18] = (unsigned char) ((s6 >> 18) | (s7 << 3)); - s[19] = (unsigned char) (s7 >> 5); - s[20] = (unsigned char) (s7 >> 13); - s[21] = (unsigned char) (s8 >> 0); - s[22] = (unsigned char) (s8 >> 8); - s[23] = (unsigned char) ((s8 >> 16) | (s9 << 5)); - s[24] = (unsigned char) (s9 >> 3); - s[25] = (unsigned char) (s9 >> 11); - s[26] = (unsigned char) ((s9 >> 19) | (s10 << 2)); - s[27] = (unsigned char) (s10 >> 6); - s[28] = (unsigned char) ((s10 >> 14) | (s11 << 7)); - s[29] = (unsigned char) (s11 >> 1); - s[30] = (unsigned char) (s11 >> 9); - s[31] = (unsigned char) (s11 >> 17); -} diff --git a/pkg/urcrypt/ed25519/src/sc.h b/pkg/urcrypt/ed25519/src/sc.h deleted file mode 100644 index e29e7fa5a..000000000 --- a/pkg/urcrypt/ed25519/src/sc.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SC_H -#define SC_H - -/* -The set of scalars is \Z/l -where l = 2^252 + 27742317777372353535851937790883648493. -*/ - -void sc_reduce(unsigned char *s); -void sc_muladd(unsigned char *s, const unsigned char *a, const unsigned char *b, const unsigned char *c); - -#endif diff --git a/pkg/urcrypt/ed25519/src/seed.c b/pkg/urcrypt/ed25519/src/seed.c deleted file mode 100644 index 11a2e3ec4..000000000 --- a/pkg/urcrypt/ed25519/src/seed.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "ed25519.h" - -#ifndef ED25519_NO_SEED - -#ifdef _WIN32 -#include -#include -#else -#include -#endif - -int ed25519_create_seed(unsigned char *seed) { -#ifdef _WIN32 - HCRYPTPROV prov; - - if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { - return 1; - } - - if (!CryptGenRandom(prov, 32, seed)) { - CryptReleaseContext(prov, 0); - return 1; - } - - CryptReleaseContext(prov, 0); -#else - FILE *f = fopen("/dev/urandom", "rb"); - - if (f == NULL) { - return 1; - } - - fread(seed, 1, 32, f); - fclose(f); -#endif - - return 0; -} - -#endif diff --git a/pkg/urcrypt/ed25519/src/sha512.c b/pkg/urcrypt/ed25519/src/sha512.c deleted file mode 100644 index cb8ae7175..000000000 --- a/pkg/urcrypt/ed25519/src/sha512.c +++ /dev/null @@ -1,275 +0,0 @@ -/* LibTomCrypt, modular cryptographic library -- Tom St Denis - * - * LibTomCrypt is a library that provides various cryptographic - * algorithms in a highly modular and flexible manner. - * - * The library is free for all purposes without any express - * guarantee it works. - * - * Tom St Denis, tomstdenis@gmail.com, http://libtom.org - */ - -#include "fixedint.h" -#include "sha512.h" - -/* the K array */ -static const uint64_t K[80] = { - UINT64_C(0x428a2f98d728ae22), UINT64_C(0x7137449123ef65cd), - UINT64_C(0xb5c0fbcfec4d3b2f), UINT64_C(0xe9b5dba58189dbbc), - UINT64_C(0x3956c25bf348b538), UINT64_C(0x59f111f1b605d019), - UINT64_C(0x923f82a4af194f9b), UINT64_C(0xab1c5ed5da6d8118), - UINT64_C(0xd807aa98a3030242), UINT64_C(0x12835b0145706fbe), - UINT64_C(0x243185be4ee4b28c), UINT64_C(0x550c7dc3d5ffb4e2), - UINT64_C(0x72be5d74f27b896f), UINT64_C(0x80deb1fe3b1696b1), - UINT64_C(0x9bdc06a725c71235), UINT64_C(0xc19bf174cf692694), - UINT64_C(0xe49b69c19ef14ad2), UINT64_C(0xefbe4786384f25e3), - UINT64_C(0x0fc19dc68b8cd5b5), UINT64_C(0x240ca1cc77ac9c65), - UINT64_C(0x2de92c6f592b0275), UINT64_C(0x4a7484aa6ea6e483), - UINT64_C(0x5cb0a9dcbd41fbd4), UINT64_C(0x76f988da831153b5), - UINT64_C(0x983e5152ee66dfab), UINT64_C(0xa831c66d2db43210), - UINT64_C(0xb00327c898fb213f), UINT64_C(0xbf597fc7beef0ee4), - UINT64_C(0xc6e00bf33da88fc2), UINT64_C(0xd5a79147930aa725), - UINT64_C(0x06ca6351e003826f), UINT64_C(0x142929670a0e6e70), - UINT64_C(0x27b70a8546d22ffc), UINT64_C(0x2e1b21385c26c926), - UINT64_C(0x4d2c6dfc5ac42aed), UINT64_C(0x53380d139d95b3df), - UINT64_C(0x650a73548baf63de), UINT64_C(0x766a0abb3c77b2a8), - UINT64_C(0x81c2c92e47edaee6), UINT64_C(0x92722c851482353b), - UINT64_C(0xa2bfe8a14cf10364), UINT64_C(0xa81a664bbc423001), - UINT64_C(0xc24b8b70d0f89791), UINT64_C(0xc76c51a30654be30), - UINT64_C(0xd192e819d6ef5218), UINT64_C(0xd69906245565a910), - UINT64_C(0xf40e35855771202a), UINT64_C(0x106aa07032bbd1b8), - UINT64_C(0x19a4c116b8d2d0c8), UINT64_C(0x1e376c085141ab53), - UINT64_C(0x2748774cdf8eeb99), UINT64_C(0x34b0bcb5e19b48a8), - UINT64_C(0x391c0cb3c5c95a63), UINT64_C(0x4ed8aa4ae3418acb), - UINT64_C(0x5b9cca4f7763e373), UINT64_C(0x682e6ff3d6b2b8a3), - UINT64_C(0x748f82ee5defb2fc), UINT64_C(0x78a5636f43172f60), - UINT64_C(0x84c87814a1f0ab72), UINT64_C(0x8cc702081a6439ec), - UINT64_C(0x90befffa23631e28), UINT64_C(0xa4506cebde82bde9), - UINT64_C(0xbef9a3f7b2c67915), UINT64_C(0xc67178f2e372532b), - UINT64_C(0xca273eceea26619c), UINT64_C(0xd186b8c721c0c207), - UINT64_C(0xeada7dd6cde0eb1e), UINT64_C(0xf57d4f7fee6ed178), - UINT64_C(0x06f067aa72176fba), UINT64_C(0x0a637dc5a2c898a6), - UINT64_C(0x113f9804bef90dae), UINT64_C(0x1b710b35131c471b), - UINT64_C(0x28db77f523047d84), UINT64_C(0x32caab7b40c72493), - UINT64_C(0x3c9ebe0a15c9bebc), UINT64_C(0x431d67c49c100d4c), - UINT64_C(0x4cc5d4becb3e42b6), UINT64_C(0x597f299cfc657e2a), - UINT64_C(0x5fcb6fab3ad6faec), UINT64_C(0x6c44198c4a475817) -}; - -/* Various logical functions */ - -#define ROR64c(x, y) \ - ( ((((x)&UINT64_C(0xFFFFFFFFFFFFFFFF))>>((uint64_t)(y)&UINT64_C(63))) | \ - ((x)<<((uint64_t)(64-((y)&UINT64_C(63)))))) & UINT64_C(0xFFFFFFFFFFFFFFFF)) - -#define STORE64H(x, y) \ - { (y)[0] = (unsigned char)(((x)>>56)&255); (y)[1] = (unsigned char)(((x)>>48)&255); \ - (y)[2] = (unsigned char)(((x)>>40)&255); (y)[3] = (unsigned char)(((x)>>32)&255); \ - (y)[4] = (unsigned char)(((x)>>24)&255); (y)[5] = (unsigned char)(((x)>>16)&255); \ - (y)[6] = (unsigned char)(((x)>>8)&255); (y)[7] = (unsigned char)((x)&255); } - -#define LOAD64H(x, y) \ - { x = (((uint64_t)((y)[0] & 255))<<56)|(((uint64_t)((y)[1] & 255))<<48) | \ - (((uint64_t)((y)[2] & 255))<<40)|(((uint64_t)((y)[3] & 255))<<32) | \ - (((uint64_t)((y)[4] & 255))<<24)|(((uint64_t)((y)[5] & 255))<<16) | \ - (((uint64_t)((y)[6] & 255))<<8)|(((uint64_t)((y)[7] & 255))); } - - -#define Ch(x,y,z) (z ^ (x & (y ^ z))) -#define Maj(x,y,z) (((x | y) & z) | (x & y)) -#define S(x, n) ROR64c(x, n) -#define R(x, n) (((x) &UINT64_C(0xFFFFFFFFFFFFFFFF))>>((uint64_t)n)) -#define Sigma0(x) (S(x, 28) ^ S(x, 34) ^ S(x, 39)) -#define Sigma1(x) (S(x, 14) ^ S(x, 18) ^ S(x, 41)) -#define Gamma0(x) (S(x, 1) ^ S(x, 8) ^ R(x, 7)) -#define Gamma1(x) (S(x, 19) ^ S(x, 61) ^ R(x, 6)) -#ifndef MIN - #define MIN(x, y) ( ((x)<(y))?(x):(y) ) -#endif - -/* compress 1024-bits */ -static int sha512_compress(sha512_context *md, unsigned char *buf) -{ - uint64_t S[8], W[80], t0, t1; - int i; - - /* copy state into S */ - for (i = 0; i < 8; i++) { - S[i] = md->state[i]; - } - - /* copy the state into 1024-bits into W[0..15] */ - for (i = 0; i < 16; i++) { - LOAD64H(W[i], buf + (8*i)); - } - - /* fill W[16..79] */ - for (i = 16; i < 80; i++) { - W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16]; - } - -/* Compress */ - #define RND(a,b,c,d,e,f,g,h,i) \ - t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ - t1 = Sigma0(a) + Maj(a, b, c);\ - d += t0; \ - h = t0 + t1; - - for (i = 0; i < 80; i += 8) { - RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i+0); - RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],i+1); - RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],i+2); - RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],i+3); - RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],i+4); - RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],i+5); - RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],i+6); - RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],i+7); - } - - #undef RND - - - - /* feedback */ - for (i = 0; i < 8; i++) { - md->state[i] = md->state[i] + S[i]; - } - - return 0; -} - - -/** - Initialize the hash state - @param md The hash state you wish to initialize - @return 0 if successful -*/ -int sha512_init(sha512_context * md) { - if (md == NULL) return 1; - - md->curlen = 0; - md->length = 0; - md->state[0] = UINT64_C(0x6a09e667f3bcc908); - md->state[1] = UINT64_C(0xbb67ae8584caa73b); - md->state[2] = UINT64_C(0x3c6ef372fe94f82b); - md->state[3] = UINT64_C(0xa54ff53a5f1d36f1); - md->state[4] = UINT64_C(0x510e527fade682d1); - md->state[5] = UINT64_C(0x9b05688c2b3e6c1f); - md->state[6] = UINT64_C(0x1f83d9abfb41bd6b); - md->state[7] = UINT64_C(0x5be0cd19137e2179); - - return 0; -} - -/** - Process a block of memory though the hash - @param md The hash state - @param in The data to hash - @param inlen The length of the data (octets) - @return 0 if successful -*/ -int sha512_update (sha512_context * md, const unsigned char *in, size_t inlen) -{ - size_t n; - size_t i; - int err; - if (md == NULL) return 1; - if (in == NULL) return 1; - if (md->curlen > sizeof(md->buf)) { - return 1; - } - while (inlen > 0) { - if (md->curlen == 0 && inlen >= 128) { - if ((err = sha512_compress (md, (unsigned char *)in)) != 0) { - return err; - } - md->length += 128 * 8; - in += 128; - inlen -= 128; - } else { - n = MIN(inlen, (128 - md->curlen)); - - for (i = 0; i < n; i++) { - md->buf[i + md->curlen] = in[i]; - } - - - md->curlen += n; - in += n; - inlen -= n; - if (md->curlen == 128) { - if ((err = sha512_compress (md, md->buf)) != 0) { - return err; - } - md->length += 8*128; - md->curlen = 0; - } - } - } - return 0; -} - -/** - Terminate the hash to get the digest - @param md The hash state - @param out [out] The destination of the hash (64 bytes) - @return 0 if successful -*/ - int sha512_final(sha512_context * md, unsigned char *out) - { - int i; - - if (md == NULL) return 1; - if (out == NULL) return 1; - - if (md->curlen >= sizeof(md->buf)) { - return 1; - } - - /* increase the length of the message */ - md->length += md->curlen * UINT64_C(8); - - /* append the '1' bit */ - md->buf[md->curlen++] = (unsigned char)0x80; - - /* if the length is currently above 112 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length - * encoding like normal. - */ - if (md->curlen > 112) { - while (md->curlen < 128) { - md->buf[md->curlen++] = (unsigned char)0; - } - sha512_compress(md, md->buf); - md->curlen = 0; - } - - /* pad upto 120 bytes of zeroes - * note: that from 112 to 120 is the 64 MSB of the length. We assume that you won't hash - * > 2^64 bits of data... :-) - */ -while (md->curlen < 120) { - md->buf[md->curlen++] = (unsigned char)0; -} - - /* store length */ -STORE64H(md->length, md->buf+120); -sha512_compress(md, md->buf); - - /* copy output */ -for (i = 0; i < 8; i++) { - STORE64H(md->state[i], out+(8*i)); -} - -return 0; -} - -int sha512(const unsigned char *message, size_t message_len, unsigned char *out) -{ - sha512_context ctx; - int ret; - if ((ret = sha512_init(&ctx))) return ret; - if ((ret = sha512_update(&ctx, message, message_len))) return ret; - if ((ret = sha512_final(&ctx, out))) return ret; - return 0; -} diff --git a/pkg/urcrypt/ed25519/src/sha512.h b/pkg/urcrypt/ed25519/src/sha512.h deleted file mode 100644 index a34dd5e42..000000000 --- a/pkg/urcrypt/ed25519/src/sha512.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef SHA512_H -#define SHA512_H - -#include - -#include "fixedint.h" - -/* state */ -typedef struct sha512_context_ { - uint64_t length, state[8]; - size_t curlen; - unsigned char buf[128]; -} sha512_context; - - -int sha512_init(sha512_context * md); -int sha512_final(sha512_context * md, unsigned char *out); -int sha512_update(sha512_context * md, const unsigned char *in, size_t inlen); -int sha512(const unsigned char *message, size_t message_len, unsigned char *out); - -#endif diff --git a/pkg/urcrypt/ed25519/src/sign.c b/pkg/urcrypt/ed25519/src/sign.c deleted file mode 100644 index 199a8393b..000000000 --- a/pkg/urcrypt/ed25519/src/sign.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "ed25519.h" -#include "sha512.h" -#include "ge.h" -#include "sc.h" - - -void ed25519_sign(unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key, const unsigned char *private_key) { - sha512_context hash; - unsigned char hram[64]; - unsigned char r[64]; - ge_p3 R; - - - sha512_init(&hash); - sha512_update(&hash, private_key + 32, 32); - sha512_update(&hash, message, message_len); - sha512_final(&hash, r); - - sc_reduce(r); - ge_scalarmult_base(&R, r); - ge_p3_tobytes(signature, &R); - - sha512_init(&hash); - sha512_update(&hash, signature, 32); - sha512_update(&hash, public_key, 32); - sha512_update(&hash, message, message_len); - sha512_final(&hash, hram); - - sc_reduce(hram); - sc_muladd(signature + 32, hram, private_key, r); -} diff --git a/pkg/urcrypt/ed25519/src/verify.c b/pkg/urcrypt/ed25519/src/verify.c deleted file mode 100644 index 32f988edc..000000000 --- a/pkg/urcrypt/ed25519/src/verify.c +++ /dev/null @@ -1,77 +0,0 @@ -#include "ed25519.h" -#include "sha512.h" -#include "ge.h" -#include "sc.h" - -static int consttime_equal(const unsigned char *x, const unsigned char *y) { - unsigned char r = 0; - - r = x[0] ^ y[0]; - #define F(i) r |= x[i] ^ y[i] - F(1); - F(2); - F(3); - F(4); - F(5); - F(6); - F(7); - F(8); - F(9); - F(10); - F(11); - F(12); - F(13); - F(14); - F(15); - F(16); - F(17); - F(18); - F(19); - F(20); - F(21); - F(22); - F(23); - F(24); - F(25); - F(26); - F(27); - F(28); - F(29); - F(30); - F(31); - #undef F - - return !r; -} - -int ed25519_verify(const unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key) { - unsigned char h[64]; - unsigned char checker[32]; - sha512_context hash; - ge_p3 A; - ge_p2 R; - - if (signature[63] & 224) { - return 0; - } - - if (ge_frombytes_negate_vartime(&A, public_key) != 0) { - return 0; - } - - sha512_init(&hash); - sha512_update(&hash, signature, 32); - sha512_update(&hash, public_key, 32); - sha512_update(&hash, message, message_len); - sha512_final(&hash, h); - - sc_reduce(h); - ge_double_scalarmult_vartime(&R, h, &A, signature + 32); - ge_tobytes(checker, &R); - - if (!consttime_equal(checker, signature)) { - return 0; - } - - return 1; -} diff --git a/pkg/urcrypt/ed25519/test.c b/pkg/urcrypt/ed25519/test.c deleted file mode 100644 index e2159a9af..000000000 --- a/pkg/urcrypt/ed25519/test.c +++ /dev/null @@ -1,150 +0,0 @@ -#include -#include -#include -#include - -/* #define ED25519_DLL */ -#include "src/ed25519.h" - -#include "src/ge.h" -#include "src/sc.h" - - -int main() { - unsigned char public_key[32], private_key[64], seed[32], scalar[32]; - unsigned char other_public_key[32], other_private_key[64]; - unsigned char shared_secret[32], other_shared_secret[32]; - unsigned char signature[64]; - - clock_t start; - clock_t end; - int i; - - const unsigned char message[] = "Hello, world!"; - const int message_len = strlen((char*) message); - - /* create a random seed, and a keypair out of that seed */ - ed25519_create_seed(seed); - ed25519_create_keypair(public_key, private_key, seed); - - /* create signature on the message with the keypair */ - ed25519_sign(signature, message, message_len, public_key, private_key); - - /* verify the signature */ - if (ed25519_verify(signature, message, message_len, public_key)) { - printf("valid signature\n"); - } else { - printf("invalid signature\n"); - } - - /* create scalar and add it to the keypair */ - ed25519_create_seed(scalar); - ed25519_add_scalar(public_key, private_key, scalar); - - /* create signature with the new keypair */ - ed25519_sign(signature, message, message_len, public_key, private_key); - - /* verify the signature with the new keypair */ - if (ed25519_verify(signature, message, message_len, public_key)) { - printf("valid signature\n"); - } else { - printf("invalid signature\n"); - } - - /* make a slight adjustment and verify again */ - signature[44] ^= 0x10; - if (ed25519_verify(signature, message, message_len, public_key)) { - printf("did not detect signature change\n"); - } else { - printf("correctly detected signature change\n"); - } - - /* generate two keypairs for testing key exchange */ - ed25519_create_seed(seed); - ed25519_create_keypair(public_key, private_key, seed); - ed25519_create_seed(seed); - ed25519_create_keypair(other_public_key, other_private_key, seed); - - /* create two shared secrets - from both perspectives - and check if they're equal */ - ed25519_key_exchange(shared_secret, other_public_key, private_key); - ed25519_key_exchange(other_shared_secret, public_key, other_private_key); - - for (i = 0; i < 32; ++i) { - if (shared_secret[i] != other_shared_secret[i]) { - printf("key exchange was incorrect\n"); - break; - } - } - - if (i == 32) { - printf("key exchange was correct\n"); - } - - /* test performance */ - printf("testing seed generation performance: "); - start = clock(); - for (i = 0; i < 10000; ++i) { - ed25519_create_seed(seed); - } - end = clock(); - - printf("%fus per seed\n", ((double) ((end - start) * 1000)) / CLOCKS_PER_SEC / i * 1000); - - - printf("testing key generation performance: "); - start = clock(); - for (i = 0; i < 10000; ++i) { - ed25519_create_keypair(public_key, private_key, seed); - } - end = clock(); - - printf("%fus per keypair\n", ((double) ((end - start) * 1000)) / CLOCKS_PER_SEC / i * 1000); - - printf("testing sign performance: "); - start = clock(); - for (i = 0; i < 10000; ++i) { - ed25519_sign(signature, message, message_len, public_key, private_key); - } - end = clock(); - - printf("%fus per signature\n", ((double) ((end - start) * 1000)) / CLOCKS_PER_SEC / i * 1000); - - printf("testing verify performance: "); - start = clock(); - for (i = 0; i < 10000; ++i) { - ed25519_verify(signature, message, message_len, public_key); - } - end = clock(); - - printf("%fus per signature\n", ((double) ((end - start) * 1000)) / CLOCKS_PER_SEC / i * 1000); - - - printf("testing keypair scalar addition performance: "); - start = clock(); - for (i = 0; i < 10000; ++i) { - ed25519_add_scalar(public_key, private_key, scalar); - } - end = clock(); - - printf("%fus per keypair\n", ((double) ((end - start) * 1000)) / CLOCKS_PER_SEC / i * 1000); - - printf("testing public key scalar addition performance: "); - start = clock(); - for (i = 0; i < 10000; ++i) { - ed25519_add_scalar(public_key, NULL, scalar); - } - end = clock(); - - printf("%fus per key\n", ((double) ((end - start) * 1000)) / CLOCKS_PER_SEC / i * 1000); - - printf("testing key exchange performance: "); - start = clock(); - for (i = 0; i < 10000; ++i) { - ed25519_key_exchange(shared_secret, other_public_key, private_key); - } - end = clock(); - - printf("%fus per shared secret\n", ((double) ((end - start) * 1000)) / CLOCKS_PER_SEC / i * 1000); - - return 0; -} diff --git a/pkg/urcrypt/ge-additions/LICENSE b/pkg/urcrypt/ge-additions/LICENSE deleted file mode 100644 index 6a66aea5e..000000000 --- a/pkg/urcrypt/ge-additions/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/pkg/urcrypt/ge-additions/README.md b/pkg/urcrypt/ge-additions/README.md deleted file mode 100644 index 0684ab265..000000000 --- a/pkg/urcrypt/ge-additions/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Group Element Additions - -Urbit uses the ge.h code from the ed25519 library, which was ported from the -ref10 SUPERCOP public domain implementation. That implementation doesn't -contain several functions needed for ring signatures. - -This file does. The providence of this code starts with Adam Langley taking -the SUPERCOP C implementation and producing an ed25519 implementation for it -in golang (https://godoc.org/golang.org/x/crypto/ed25519). (If you look at -the go code, you'll see the comments are the same as the comments in the C -implementation.) - -From there, the DEDIS group from ETH Zurich took that implementation and -added the additional methods to make a generalized ECC point library. While -their project as a whole is MPL, they deliberately left their ed25519 -implementation under the Go BSD-3 license: -(https://github.com/dedis/kyber/blob/master/group/edwards25519/LICENSE) - -This file is a fairly straight translation from Go to C of DEDIS' additions, -so this falls under the same license. diff --git a/pkg/urcrypt/ge-additions/ge-additions.c b/pkg/urcrypt/ge-additions/ge-additions.c deleted file mode 100644 index 95b296dc2..000000000 --- a/pkg/urcrypt/ge-additions/ge-additions.c +++ /dev/null @@ -1,169 +0,0 @@ -// Group Element Additions -// -// Urbit uses the ge.h code from the ed25519 library, which was ported from the -// ref10 SUPERCOP public domain implementation. That implementation doesn't -// contain several functions needed for ring signatures. -// -// This file does. The providence of this code starts with Adam Langley taking -// the SUPERCOP C implementation and producing an ed25519 implementation for it -// in golang (https://godoc.org/golang.org/x/crypto/ed25519). (If you look at -// the go code, you'll see the comments are the same as the comments in the C -// implementation.) -// -// From there, the DEDIS group from ETH Zurich took that implementation and -// added the additional methods to make a generalized ECC point library. While -// their project as a whole is MPL, they deliberately left their ed25519 -// implementation under the Go BSD-3 license: -// (https://github.com/dedis/kyber/blob/master/group/edwards25519/LICENSE) -// -// This file is a fairly straight translation from Go to C of DEDIS' additions, -// so this falls under the same license. -// -// ------ -// -// Copyright (c) 2009 The Go Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#include "ge-additions.h" - -#include - -static unsigned char equal(signed char b, signed char c) { - unsigned char ub = b; - unsigned char uc = c; - unsigned char x = ub ^ uc; /* 0: yes; 1..255: no */ - uint64_t y = x; /* 0: yes; 1..255: no */ - y -= 1; /* large: yes; 0..254: no */ - y >>= 63; /* 1: yes; 0: no */ - return (unsigned char) y; -} - -static unsigned char negative(signed char b) { - uint64_t x = b; /* 18446744073709551361..18446744073709551615: yes; 0..255: no */ - x >>= 63; /* 1: yes; 0: no */ - return (unsigned char) x; -} - -void ge_cached_0(ge_cached* c) { - fe_1(c->YplusX); - fe_1(c->YminusX); - fe_1(c->Z); - fe_0(c->T2d); -} - -void ge_cached_cmov(ge_cached* r, const ge_cached* u, int32_t b) -{ - fe_cmov(r->YplusX, u->YplusX, b); - fe_cmov(r->YminusX, u->YminusX, b); - fe_cmov(r->Z, u->Z, b); - fe_cmov(r->T2d, u->T2d, b); -} - -void ge_cached_neg(ge_cached* r, const ge_cached* t) -{ - fe_copy(r->YplusX, t->YminusX); - fe_copy(r->YminusX, t->YplusX); - fe_copy(r->Z, t->Z); - fe_neg(r->T2d, t->T2d); -} - -void select_cached(ge_cached* c, const ge_cached Ai[8], int32_t b) -{ - int32_t is_negative = negative(b); - int32_t b_abs = b - (((-is_negative) & b) << 1); - - ge_cached_0(c); - for (int32_t i = 0; i < 8; ++i) { - ge_cached_cmov(c, &Ai[i], equal(b_abs, i+1)); - } - - ge_cached minusC; - ge_cached_neg(&minusC, c); - ge_cached_cmov(c, &minusC, is_negative); -} - -// -void ge_scalarmult(ge_p3* h, const unsigned char* a, const ge_p3* A) -{ - signed char e[64]; - int i; - ge_p1p1 t; - ge_p3 u; - - for (i = 0; i < 32; ++i) { - e[2 * i + 0] = (a[i] >> 0) & 15; - e[2 * i + 1] = (a[i] >> 4) & 15; - } - - /* each e[i] is between 0 and 15 */ - /* e[63] is between 0 and 7 */ - signed char carry = 0; - for (i = 0; i < 63; ++i) { - e[i] += carry; - carry = e[i] + 8; - carry >>= 4; - e[i] -= carry << 4; - } - e[63] += carry; - /* each e[i] is between -8 and 8 */ - - // compute cached array of multiples of A from 1A through 8A - ge_cached Ai[8]; - ge_p3_to_cached(&Ai[0], A); - for (i = 0; i < 7; ++i) { - ge_add(&t, A, &Ai[i]); - ge_p1p1_to_p3(&u, &t); - ge_p3_to_cached(&Ai[i+1], &u); - } - - // special case for exponent nybble i == 63 - ge_p3_0(&u); - ge_cached c; - select_cached(&c, Ai, e[63]); - ge_add(&t, &u, &c); - - ge_p2 r; - for (i = 62; i >= 0; i--) { - // t <<= 4 - ge_p1p1_to_p2(&r, &t); - ge_p2_dbl(&t, &r); - ge_p1p1_to_p2(&r, &t); - ge_p2_dbl(&t, &r); - ge_p1p1_to_p2(&r, &t); - ge_p2_dbl(&t, &r); - ge_p1p1_to_p2(&r, &t); - ge_p2_dbl(&t, &r); - - // Add next nyble - ge_p1p1_to_p3(&u, &t); - select_cached(&c, Ai, e[i]); - ge_add(&t, &u, &c); - } - - ge_p1p1_to_p3(h, &t); -} diff --git a/pkg/urcrypt/ge-additions/ge-additions.h b/pkg/urcrypt/ge-additions/ge-additions.h deleted file mode 100644 index 3424ac689..000000000 --- a/pkg/urcrypt/ge-additions/ge-additions.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef GE_ADDITIONS_H -#define GE_ADDITIONS_H - -#include - -void ge_scalarmult(ge_p3* h, const unsigned char* a, const ge_p3* A); - -#endif diff --git a/pkg/urcrypt/keccak-tiny/.clang-format b/pkg/urcrypt/keccak-tiny/.clang-format deleted file mode 100644 index 0b8d122df..000000000 --- a/pkg/urcrypt/keccak-tiny/.clang-format +++ /dev/null @@ -1,54 +0,0 @@ ---- -Language: Cpp -# BasedOnStyle: Chromium -AccessModifierOffset: -1 -ConstructorInitializerIndentWidth: 4 -AlignEscapedNewlinesLeft: true -AlignTrailingComments: true -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortIfStatementsOnASingleLine: false -AllowShortLoopsOnASingleLine: true -AllowShortFunctionsOnASingleLine: Inline -AlwaysBreakTemplateDeclarations: true -AlwaysBreakBeforeMultilineStrings: true -BreakBeforeBinaryOperators: false -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BinPackParameters: false -ColumnLimit: 90 -ConstructorInitializerAllOnOneLineOrOnePerLine: false -DerivePointerBinding: false -ExperimentalAutoDetectBinPacking: false -IndentCaseLabels: true -MaxEmptyLinesToKeep: 1 -KeepEmptyLinesAtTheStartOfBlocks: false -NamespaceIndentation: None -ObjCSpaceAfterProperty: false -ObjCSpaceBeforeProtocolList: false -PenaltyBreakBeforeFirstCallParameter: 1 -PenaltyBreakComment: 300 -PenaltyBreakString: 1000 -PenaltyBreakFirstLessLess: 120 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 200 -PointerBindsToType: true -SpacesBeforeTrailingComments: 2 -Cpp11BracedListStyle: true -Standard: Cpp11 -IndentWidth: 2 -TabWidth: 8 -UseTab: Never -BreakBeforeBraces: Attach -IndentFunctionDeclarationAfterType: true -SpacesInParentheses: false -SpacesInAngles: false -SpaceInEmptyParentheses: false -SpacesInCStyleCastParentheses: false -SpacesInContainerLiterals: true -SpaceBeforeAssignmentOperators: true -ContinuationIndentWidth: 4 -CommentPragmas: '^ IWYU pragma:' -ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] -SpaceBeforeParens: ControlStatements -... - diff --git a/pkg/urcrypt/keccak-tiny/.gitignore b/pkg/urcrypt/keccak-tiny/.gitignore deleted file mode 100644 index 32dc672fb..000000000 --- a/pkg/urcrypt/keccak-tiny/.gitignore +++ /dev/null @@ -1,139 +0,0 @@ -### https://raw.github.com/github/gitignore/master/Global/OSX.gitignore - -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - -# Thumbnails -._* - -# Files that might appear on external disk -.Spotlight-V100 -.Trashes - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -### https://raw.github.com/github/gitignore/master/Global/vim.gitignore - -[._]*.s[a-w][a-z] -[._]s[a-w][a-z] -*.un~ -Session.vim -.netrwhist -*~ - - -### https://raw.github.com/github/gitignore/master/Python.gitignore - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.cache -nosetests.xml -coverage.xml - -# Translations -*.mo -*.pot - -# Django stuff: -*.log - -# Sphinx documentation -docs/_build/ - - -### https://raw.github.com/github/gitignore/master/C.gitignore - -# Object files -*.o -*.ko -*.obj -*.elf - -# Libraries -*.lib -*.a - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - - -### https://raw.github.com/github/gitignore/master/Global/Xcode.gitignore - -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.xcuserstate - - -### https://raw.github.com/github/gitignore/master/Global/Linux.gitignore - -*~ - -# KDE directory preferences -.directory - - -kcksum -.ninja_deps -.ninja_log -JUNK/ diff --git a/pkg/urcrypt/keccak-tiny/README.markdown b/pkg/urcrypt/keccak-tiny/README.markdown deleted file mode 100644 index 784d6f6bd..000000000 --- a/pkg/urcrypt/keccak-tiny/README.markdown +++ /dev/null @@ -1,82 +0,0 @@ -# libkeccak-tiny - -An implementation of the FIPS-202-defined SHA-3 and SHAKE functions -in 120 cloc (156 lines). One C file, one header. - -The `Keccak-f[1600]` permutation is fully unrolled; it's nearly as fast -as the Keccak team's optimized permutation. - -## Building - - > clang -O3 -march=native -std=c11 -Wextra -dynamic -shared keccak-tiny.c -o libkeccak-tiny.dylib - -If you don't have a modern libc that includes the `memset_s` function, -you can just add `-D"memset_s(W,WL,V,OL)=memset(W,V,OL)` to the command -line. - -## Using - -Build the library, include the header, and do, e.g., - - shake256(out, 256, in, inlen); - -That's it. - -(Note: You can request less output from the fixed-output-length -functions, but not more.) - -## TweetShake - -The relevant tweets: - -```C -// @hashbreaker Inspired by TweetNaCl! -// Keccak and SHA-3 are supposedly hard to implement. So, how many tweets does it take to get to the center of a sponge...? -#define decshake(bits) int shake##bits(unsigned char* o, unsigned long, unsigned char*, unsigned long); /*begin keccak.h*/ -#define decsha3(bits) int sha3_##bits(unsigned char*,unsigned long,unsigned char*,unsigned long); -decshake(128) decshake(256) decsha3(224) decsha3(256) decsha3(384) decsha3(512) /*end keccak.h*/ -#define K static const /* Keccak constants: rho rotations, pi lanes, and iota RCs */ /*begin keccak.c*/ -typedef unsigned char byte;typedef byte*bytes;typedef unsigned long z;typedef unsigned long long u8;K u8 V=1ULL<<63;K u8 W=1ULL<<31;/*!gcc*/ -#define V (1ULL<<63) -#define W (1ULL<31) -K byte rho[24]={1,3,6,10,15,21,28,36,45,55,2,14,27,41,56,8,25,43,62,18,39,61,20,44};K u8 RC[24]={1,0x8082,V|0x808a,V|W|0x8000,0x808b,W|1,V|W -|0x8081,V|0x8009,138,136,W|0x8009,W|10,W|0x808b,V|0x8b,V|0x8089,V|0x8003,V|0x8002,V|0x80,0x800a,V|W|0xa,V|W|0x8081,V|0x8080,W|1,V|W|0x8008}; -K byte pi[25]={10,7,11,17,18,3,5,16,8,21,24,4,15,23,19,13,12,2,20,14,22,9,6,1}; /**helpers:*/static inline z min(z a,z b){return (a> (64-s))) /**macros to fully unroll the Keccak-f[1600] permutation:*/ -#define R24(e) /* repeat 24 times */ e e e e e e e e e e e e e e e e e e e e e e e e -#define L5(v,s,e) /* 5-unroll a loop */ v=0; e; v+=s; e; v+=s; e; v+=s; e; v+=s; e; v+=s; /**the permutation:*/ -static inline void keccakf(u8* a){u8 b[5]={0};u8 t=0;byte x,y,i=0; /*24 rounds:*/R24( L5(x,1,b[x]=0;L5(y,5, /*parity*/ b[x] ^= a[x+y])) -L5(x,1,L5(y,5,/*theta*/a[y+x] ^= b[(x+4)%5] ^ ROL(b[(x+1)%5],1))) t=a[1];x=0;R24(b[0]=a[pi[x]];/*rho*/a[pi[x]]=ROL(t, rho[x]);t=b[0];x++;) -L5(y,5,L5(x,1, /*chi*/ b[x] = a[y+x]) L5(x,1, a[y+x] = b[x] ^ ~b[(x+1)%5] & b[(x+2)%5])) /*iota*/ a[0] ^= RC[i]; i++; )} /**keccak-f!**/ -#define FOR(i, ST, L, S) /*obvious*/ do { for (z i = 0; i < L; i += ST) { S; } } while (0) /**now, the sponge construction in hash mode**/ -#define appl(NAME, S) /*macro to define array comprehensions*/ static inline void NAME(bytes dst, bytes src, z len) { FOR(i, 1, len, S); } -/*helpers:*/ static inline void clear(bytes a) { FOR(i,1,200,a[i]=0); } appl(xorin, dst[i] ^= src[i]) appl(set, src[i] = dst[i]) -#define foldP(I, L, F) /* macro to fold app P F */ while (L >= r) { /*apply F*/ F(a, I, r); /*permute*/ keccakf(A); I += r; L -= r; } -static inline int hash(bytes o,z olen,bytes in,z ilen,z r,byte D){ if((o == (void*)0)||((in == (void*)0)&&ilen != 0)||(r >= 200))return -1; -/*absorb*/u8 A[25]={0};bytes a=(bytes)A;/*full blocks*/foldP(in,ilen,xorin);/*last block*/xorin(a,in,ilen);/**ds+padstart*/a[ilen]^=D; -/*padend:*/a[r-1]^=0x80; /**permute**/keccakf(A); /**squeeze:**/foldP(o,olen,set);/*last bytes*/set(a,o,olen);/*done!*/clear(a);return 0;} -#define defshake(bits) int shake##bits(bytes o, z olen, bytes in, z ilen) {return hash(o,olen,in,ilen,200-(bits/4),0x1f);} -#define defsha3(bits) int sha3_##bits(bytes o,z olen,bytes in,z ilen) {return hash(o,min(olen,200-(bits/4)),in,ilen,200-(bits/4),0x06);} -/*define the SHA3 and SHAKE instances:*/defshake(128) defshake(256) defsha3(224) defsha3(256) defsha3(384) defsha3(512)/*end keccak.c*/ -// ...chomp. 24 kinda legible tweets (3232 bytes). And a simple interface: shake256(digest, digestlen, in, inlen) -// Clang recommended. GCC users will need to insert "#define V (1ULL<<63)" and "#define W (1ULL<31)" at the point marked "/*!gcc*/" -// If you're using as a prefix MAC, you MUST replace the body of "clear" with "memset_s(a, 200, 0, 200)" to avoid misoptimization. -// @everyone_who_is_still_using_sha1 Please stop using SHA-1. -// Oh, one more thing: a C11-threaded, memmapped shake256sum in 10 tweets. (Your libc may need a shim for C11 thread support.) -// echo -n string stdio stdint fcntl sys/mman sys/stat sys/types unistd threads|tr ' ' \\n|xargs -n1 -I_ echo '#include <_.h>' -#include "kcksum_tweet.h" -#define E(LABEL, MSG) if (err != 0) { strerror_r(err, serr, 1024); fprintf(stderr, "%s: '%s' %s\n", serr, fn, MSG); goto LABEL;} -static mtx_t iomtx;void h(void* v);void h(void* v){char* fn=(char*)v;int err=0;char serr[1024]={0};/*open file*/int fd=open(fn, O_RDONLY); -err=!fd;E(ret,"couldn't be opened.");/*stat it*/struct stat stat;err=fstat(fd,&stat);E(close,"doesn't exist.");err=!!(stat.st_mode&S_IFDIR); -E(close,"not a regular file.");z length=(size_t)stat.st_size;/*mmap the file*/bytes in=length?mmap(0,length,PROT_READ,MAP_SHARED,fd,0):NULL; -if(length&&(in==MAP_FAILED)){E(close,"mmap-ing failed.");}byte out[64]={0};/*hash it*/shake256(out,64,in,length);length&&munmap(in,length); -/*lock io*/mtx_lock(&iomtx);printf("SHAKE256('%s') = ", fn);FOR(i,1,64,printf("%02x",out[i]));printf("\n");mtx_unlock(&iomtx);/*unlock io*/ -close:close(fd);ret:thrd_exit(err);}int main(int argc,char** argv){int err=0; mtx_init(&iomtx, mtx_plain); thrd_t t[4]; int res[4],i,j,k; -for(i=1;i (bits/8)) { \ - return -1; \ - } \ - return hash(out, outlen, in, inlen, 200 - (bits / 4), 0x06); \ - } - -#define defkeccak(bits) \ - int keccak_##bits(uint8_t* out, size_t outlen, \ - const uint8_t* in, size_t inlen) { \ - if (outlen > (bits/8)) { \ - return -1; \ - } \ - return hash(out, outlen, in, inlen, 200 - (bits / 4), 0x01); \ - } - -/*** FIPS202 SHAKE VOFs ***/ -defshake(128) -defshake(256) - -/*** FIPS202 SHA3 FOFs ***/ -defsha3(224) -defsha3(256) -defsha3(384) -defsha3(512) - -/*** Non FIP202 SHA3 (KECCAK) FOFs ***/ -defkeccak(224) -defkeccak(256) -defkeccak(384) -defkeccak(512) - -#endif // DEFINEMACROS_H diff --git a/pkg/urcrypt/keccak-tiny/do.sh b/pkg/urcrypt/keccak-tiny/do.sh deleted file mode 100755 index abe619e37..000000000 --- a/pkg/urcrypt/keccak-tiny/do.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env sh -cc=$(which clang-3.6||which gcc-4.9||which clang||which gcc) -so=$(test -f /etc/asl.conf && printf dylib|| printf so) -$cc "-Dinline=__attribute__((__always_inline__))" -O3 -march=native -std=c11 -Wextra -Wpedantic -Wall -dynamic -shared keccak-tiny.c -o libkeccak-tiny.$so -$cc -Os -march=native -std=c11 -Wextra -Wpedantic -Wall -dynamic -shared keccak-tiny.c -o libkeccak-tiny-small.$so diff --git a/pkg/urcrypt/keccak-tiny/keccak-tiny-unrolled.c b/pkg/urcrypt/keccak-tiny/keccak-tiny-unrolled.c deleted file mode 100644 index 08c289dfc..000000000 --- a/pkg/urcrypt/keccak-tiny/keccak-tiny-unrolled.c +++ /dev/null @@ -1,145 +0,0 @@ -/** libkeccak-tiny - * - * A single-file implementation of SHA-3 and SHAKE. - * - * Implementor: David Leon Gil - * License: CC0, attribution kindly requested. Blame taken too, - * but not liability. - */ -#include "keccak-tiny.h" - -#include -#include -#include -#include - -/******** The Keccak-f[1600] permutation ********/ - -/*** Constants. ***/ -static const uint8_t rho[24] = \ - { 1, 3, 6, 10, 15, 21, - 28, 36, 45, 55, 2, 14, - 27, 41, 56, 8, 25, 43, - 62, 18, 39, 61, 20, 44}; -static const uint8_t pi[24] = \ - {10, 7, 11, 17, 18, 3, - 5, 16, 8, 21, 24, 4, - 15, 23, 19, 13, 12, 2, - 20, 14, 22, 9, 6, 1}; -static const uint64_t RC[24] = \ - {1ULL, 0x8082ULL, 0x800000000000808aULL, 0x8000000080008000ULL, - 0x808bULL, 0x80000001ULL, 0x8000000080008081ULL, 0x8000000000008009ULL, - 0x8aULL, 0x88ULL, 0x80008009ULL, 0x8000000aULL, - 0x8000808bULL, 0x800000000000008bULL, 0x8000000000008089ULL, 0x8000000000008003ULL, - 0x8000000000008002ULL, 0x8000000000000080ULL, 0x800aULL, 0x800000008000000aULL, - 0x8000000080008081ULL, 0x8000000000008080ULL, 0x80000001ULL, 0x8000000080008008ULL}; - -/*** Helper macros to unroll the permutation. ***/ -#define rol(x, s) (((x) << s) | ((x) >> (64 - s))) -#define REPEAT6(e) e e e e e e -#define REPEAT24(e) REPEAT6(e e e e) -#define REPEAT5(e) e e e e e -#define FOR5(v, s, e) \ - v = 0; \ - REPEAT5(e; v += s;) - -/*** Keccak-f[1600] ***/ -static inline void keccakf(void* state) { - uint64_t* a = (uint64_t*)state; - uint64_t b[5] = {0}; - uint64_t t = 0; - uint8_t x, y, i = 0; - - REPEAT24( - // Theta - FOR5(x, 1, - b[x] = 0; - FOR5(y, 5, - b[x] ^= a[x + y]; )) - FOR5(x, 1, - FOR5(y, 5, - a[y + x] ^= b[(x + 4) % 5] ^ rol(b[(x + 1) % 5], 1); )) - // Rho and pi - t = a[1]; - x = 0; - REPEAT24(b[0] = a[pi[x]]; - a[pi[x]] = rol(t, rho[x]); - t = b[0]; - x++; ) - // Chi - FOR5(y, - 5, - FOR5(x, 1, - b[x] = a[y + x];) - FOR5(x, 1, - a[y + x] = b[x] ^ ((~b[(x + 1) % 5]) & b[(x + 2) % 5]); )) - // Iota - a[0] ^= RC[i]; - i++; ) -} - -/******** The FIPS202-defined functions. ********/ - -/*** Some helper macros. ***/ - -#define _(S) do { S } while (0) -#define FOR(i, ST, L, S) \ - _(for (size_t i = 0; i < L; i += ST) { S; }) -#define mkapply_ds(NAME, S) \ - static inline void NAME(uint8_t* dst, \ - const uint8_t* src, \ - size_t len) { \ - FOR(i, 1, len, S); \ - } -#define mkapply_sd(NAME, S) \ - static inline void NAME(const uint8_t* src, \ - uint8_t* dst, \ - size_t len) { \ - FOR(i, 1, len, S); \ - } - -mkapply_ds(xorin, dst[i] ^= src[i]) // xorin -mkapply_sd(setout, dst[i] = src[i]) // setout - -#define P keccakf -#define Plen 200 - -// Fold P*F over the full blocks of an input. -#define foldP(I, L, F) \ - while (L >= rate) { \ - F(a, I, rate); \ - P(a); \ - I += rate; \ - L -= rate; \ - } - -/** The sponge-based hash construction. **/ -static inline int hash(uint8_t* out, size_t outlen, - const uint8_t* in, size_t inlen, - size_t rate, uint8_t delim) -{ - if ((out == NULL) || ((in == NULL) && inlen != 0) || (rate >= Plen)) - { - return -1; - } - uint8_t a[Plen] = {0}; - // Absorb input. - foldP(in, inlen, xorin); - // Xor in the DS and pad frame. - a[inlen] ^= delim; - a[rate - 1] ^= 0x80; - // Xor in the last block. - xorin(a, in, inlen); - // Apply P - P(a); - // Squeeze output. - foldP(out, outlen, setout); - setout(a, out, outlen); - //TODO: c11 problem: replaced - //memset_s(a, 200, 0, 200); - //Reference: http://en.cppreference.com/w/c/string/byte/memset - memset(a, 0, 200); - return 0; -} - -#include "define-macros.h" diff --git a/pkg/urcrypt/keccak-tiny/keccak-tiny.c b/pkg/urcrypt/keccak-tiny/keccak-tiny.c deleted file mode 100644 index 0c19e993c..000000000 --- a/pkg/urcrypt/keccak-tiny/keccak-tiny.c +++ /dev/null @@ -1,145 +0,0 @@ -/** libkeccak-tiny - * - * A single-file implementation of SHA-3 and SHAKE. - * - * Implementor: David Leon Gil - * License: CC0, attribution kindly requested. Blame taken too, - * but not liability. - */ -#include "keccak-tiny.h" - -#include -#include -#include -#include - -/******** The Keccak-f[1600] permutation ********/ - -/*** Constants. ***/ -static const uint8_t rho[24] = \ - { 1, 3, 6, 10, 15, 21, - 28, 36, 45, 55, 2, 14, - 27, 41, 56, 8, 25, 43, - 62, 18, 39, 61, 20, 44}; -static const uint8_t pi[24] = \ - {10, 7, 11, 17, 18, 3, - 5, 16, 8, 21, 24, 4, - 15, 23, 19, 13, 12, 2, - 20, 14, 22, 9, 6, 1}; -static const uint64_t RC[24] = \ - {1ULL, 0x8082ULL, 0x800000000000808aULL, 0x8000000080008000ULL, - 0x808bULL, 0x80000001ULL, 0x8000000080008081ULL, 0x8000000000008009ULL, - 0x8aULL, 0x88ULL, 0x80008009ULL, 0x8000000aULL, - 0x8000808bULL, 0x800000000000008bULL, 0x8000000000008089ULL, 0x8000000000008003ULL, - 0x8000000000008002ULL, 0x8000000000000080ULL, 0x800aULL, 0x800000008000000aULL, - 0x8000000080008081ULL, 0x8000000000008080ULL, 0x80000001ULL, 0x8000000080008008ULL}; - -/*** Helper macros to unroll the permutation. ***/ -#define rol(x, s) (((x) << s) | ((x) >> (64 - s))) -#define REPEAT6(e) e e e e e e -#define REPEAT24(e) REPEAT6(e e e e) -#define REPEAT5(e) e e e e e -#define FOR5(v, s, e) \ - v = 0; \ - REPEAT5(e; v += s;) - -/*** Keccak-f[1600] ***/ -static inline void keccakf(void* state) { - uint64_t* a = (uint64_t*)state; - uint64_t b[5] = {0}; - uint64_t t = 0; - uint8_t x, y; - - for (int i = 0; i < 24; i++) { - // Theta - FOR5(x, 1, - b[x] = 0; - FOR5(y, 5, - b[x] ^= a[x + y]; )) - FOR5(x, 1, - FOR5(y, 5, - a[y + x] ^= b[(x + 4) % 5] ^ rol(b[(x + 1) % 5], 1); )) - // Rho and pi - t = a[1]; - x = 0; - REPEAT24(b[0] = a[pi[x]]; - a[pi[x]] = rol(t, rho[x]); - t = b[0]; - x++; ) - // Chi - FOR5(y, - 5, - FOR5(x, 1, - b[x] = a[y + x];) - FOR5(x, 1, - a[y + x] = b[x] ^ ((~b[(x + 1) % 5]) & b[(x + 2) % 5]); )) - // Iota - a[0] ^= RC[i]; - } -} - -/******** The FIPS202-defined functions. ********/ - -/*** Some helper macros. ***/ - -#define _(S) do { S } while (0) -#define FOR(i, ST, L, S) \ - _(for (size_t i = 0; i < L; i += ST) { S; }) -#define mkapply_ds(NAME, S) \ - static inline void NAME(uint8_t* dst, \ - const uint8_t* src, \ - size_t len) { \ - FOR(i, 1, len, S); \ - } -#define mkapply_sd(NAME, S) \ - static inline void NAME(const uint8_t* src, \ - uint8_t* dst, \ - size_t len) { \ - FOR(i, 1, len, S); \ - } - -mkapply_ds(xorin, dst[i] ^= src[i]) // xorin -mkapply_sd(setout, dst[i] = src[i]) // setout - -#define P keccakf -#define Plen 200 - -// Fold P*F over the full blocks of an input. -#define foldP(I, L, F) \ - while (L >= rate) { \ - F(a, I, rate); \ - P(a); \ - I += rate; \ - L -= rate; \ - } - -/** The sponge-based hash construction. **/ -static inline int hash(uint8_t* out, size_t outlen, - const uint8_t* in, size_t inlen, - size_t rate, uint8_t delim) -{ - if ((out == NULL) || ((in == NULL) && inlen != 0) || (rate >= Plen)) - { - return -1; - } - uint8_t a[Plen] = {0}; - // Absorb input. - foldP(in, inlen, xorin); - // Xor in the DS and pad frame. - a[inlen] ^= delim; - a[rate - 1] ^= 0x80; - // Xor in the last block. - xorin(a, in, inlen); - // Apply P - P(a); - // Squeeze output. - foldP(out, outlen, setout); - setout(a, out, outlen); - //TODO: c11 problem: replaced - //memset_s(a, 200, 0, 200); - //Reference: http://en.cppreference.com/w/c/string/byte/memset - memset(a, 0, 200); - return 0; -} - -#include "define-macros.h" diff --git a/pkg/urcrypt/keccak-tiny/keccak-tiny.h b/pkg/urcrypt/keccak-tiny/keccak-tiny.h deleted file mode 100644 index 5d643be55..000000000 --- a/pkg/urcrypt/keccak-tiny/keccak-tiny.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef KECCAK_FIPS202_H -#define KECCAK_FIPS202_H -#define __STDC_WANT_LIB_EXT1__ 1 -#include -#include - -#define HASH224_SIZE 28 -#define HASH256_SIZE 32 -#define HASH384_SIZE 48 -#define HASH512_SIZE 64 - -#define decshake(bits) \ - int shake##bits(uint8_t*, size_t, const uint8_t*, size_t); - -#define decsha3(bits) \ - int sha3_##bits(uint8_t*, size_t, const uint8_t*, size_t); - -#define deckeccak(bits) \ - int keccak_##bits(uint8_t*, size_t, const uint8_t*, size_t); - -decshake(128) -decshake(256) - -decsha3(224) -decsha3(256) -decsha3(384) -decsha3(512) - -deckeccak(224) -deckeccak(256) -deckeccak(384) -deckeccak(512) - -#endif diff --git a/pkg/urcrypt/keccak-tiny/keccak-tiny.pri b/pkg/urcrypt/keccak-tiny/keccak-tiny.pri deleted file mode 100644 index b2f05f658..000000000 --- a/pkg/urcrypt/keccak-tiny/keccak-tiny.pri +++ /dev/null @@ -1,13 +0,0 @@ -# Keccak-tiny Library -# Options: -# * KECCAK_UNROLLED - Enable unrolled implementation (but disable main one). - -HEADERS += \ - $$PWD/keccak-tiny.h \ - $$PWD/define-macros.h - -contains(DEFINES, KECCAK_UNROLLED) { - SOURCES += $$PWD/keccak-tiny-unrolled.c -} else { - SOURCES += $$PWD/keccak-tiny.c -} diff --git a/pkg/urcrypt/keccak-tiny/simple_do.sh b/pkg/urcrypt/keccak-tiny/simple_do.sh deleted file mode 100644 index 379af0973..000000000 --- a/pkg/urcrypt/keccak-tiny/simple_do.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env sh -cc=$(which clang-3.6||which gcc-4.9||which clang||which gcc) -case $(uname) in -Linux) - so=$(printf so) - ARFLAGS='rvs -o' - ;; -Darwin) - so=$(printf dylib) - ARFLAGS=rcs - ;; -MINGW*) - so=$(printf lib) - ARFLAGS='rcs -o' - ;; -*) - so=$(printf so) - ARFLAGS='rvs -o' - ;; -esac -# TODO: Fix the compiler to work with any of the above compilers $cc -gcc -c keccak-tiny.c -ar ${ARFLAGS} libkeccak-tiny.$so keccak-tiny.o diff --git a/pkg/urcrypt/liburcrypt.pc.in b/pkg/urcrypt/liburcrypt.pc.in deleted file mode 100644 index 9581b4f80..000000000 --- a/pkg/urcrypt/liburcrypt.pc.in +++ /dev/null @@ -1,13 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: @PACKAGE_NAME@ -Description: cryptography library for urbit -URL: https://github.com/urbit/urcrypt -Version: @PACKAGE_VERSION@ -Cflags: -I${includedir} -Requires.private: libcrypto libsecp256k1 -Libs: -L${libdir} -lurcrypt -Libs.private: -laes_siv diff --git a/pkg/urcrypt/scrypt/.gitignore b/pkg/urcrypt/scrypt/.gitignore deleted file mode 100644 index 5dbf7c6fa..000000000 --- a/pkg/urcrypt/scrypt/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.o -*.so -*.so.0 -*.a -reference -endian.h -byteorder diff --git a/pkg/urcrypt/scrypt/LICENSE b/pkg/urcrypt/scrypt/LICENSE deleted file mode 100644 index 46a743175..000000000 --- a/pkg/urcrypt/scrypt/LICENSE +++ /dev/null @@ -1,9 +0,0 @@ -Copyright (c) 2013, Joshua Small - All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/pkg/urcrypt/scrypt/Makefile b/pkg/urcrypt/scrypt/Makefile deleted file mode 100644 index 783c537e4..000000000 --- a/pkg/urcrypt/scrypt/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -PREFIX ?= /usr/local -LIBDIR ?= $(PREFIX)/lib -INCLUDEDIR ?= $(PREFIX)/include -MAKE_DIR ?= install -d -INSTALL_DATA ?= install - -CC?=gcc -CFLAGS?=$(CFLAGS_EXTRA) -D_FORTIFY_SOURCE=2 -fPIC -LDFLAGS?=$(LDFLAGS_EXTRA) -Wl,-soname,libscrypt.so.0 -Wl,--version-script=libscrypt.version -CFLAGS_EXTRA?=-Wl,-rpath=. -O2 -Wall -g -fstack-protector -LDFLAGS_EXTRA?=-Wl,-z,relro - -all: reference - -OBJS= crypto_scrypt-nosse.o sha256.o crypto-mcf.o b64.o crypto-scrypt-saltgen.o crypto_scrypt-check.o crypto_scrypt-hash.o slowequals.o - -libscrypt.so.0: $(OBJS) - $(CC) $(LDFLAGS) -shared -o libscrypt.so.0 $(OBJS) -lm -lc - ar rcs libscrypt.a $(OBJS) - -reference: libscrypt.so.0 main.o crypto_scrypt-hexconvert.o - ln -s -f libscrypt.so.0 libscrypt.so - $(CC) -o reference main.o b64.o crypto_scrypt-hexconvert.o $(CFLAGS) $(LDFLAGS_EXTRA) -L. -lscrypt - -clean: - rm -f *.o reference libscrypt.so* libscrypt.a endian.h - -check: all - LD_LIBRARY_PATH=. ./reference - -devtest: - splint crypto_scrypt-hexconvert.c - splint crypto-mcf.c crypto_scrypt-check.c crypto_scrypt-hash.c -unrecog - splint crypto-scrypt-saltgen.c +posixlib -compdef - valgrind ./reference - -asan: main.c - clang -O1 -g -fsanitize=address -fno-omit-frame-pointer *.c -o asantest - ./asantest - scan-build clang -O1 -g -fsanitize=undefined -fno-omit-frame-pointer *.c -o asantest - ./asantest - rm -f asantest - -install: libscrypt.so.0 - $(MAKE_DIR) $(DESTDIR) $(DESTDIR)$(PREFIX) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(INCLUDEDIR) - $(INSTALL_DATA) -pm 0755 libscrypt.so.0 $(DESTDIR)$(LIBDIR) - cd $(DESTDIR)$(LIBDIR) && ln -s -f libscrypt.so.0 $(DESTDIR)$(LIBDIR)/libscrypt.so - $(INSTALL_DATA) -pm 0644 libscrypt.h $(DESTDIR)$(INCLUDEDIR) - -install-osx: libscrypt.so.0 - $(MAKE_DIR) $(DESTDIR) $(DESTDIR)$(PREFIX) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(INCLUDEDIR) - $(INSTALL_DATA) -pm 0755 libscrypt.so.0 $(DESTDIR)$(LIBDIR)/libscrypt.0.dylib - cd $(DESTDIR)$(LIBDIR) && install_name_tool -id $(DESTDIR)$(LIBDIR)/libscrypt.0.dylib $(DESTDIR)$(LIBDIR)/libscrypt.0.dylib - cd $(DESTDIR)$(LIBDIR) && ln -s -f libscrypt.0.dylib $(DESTDIR)$(LIBDIR)/libscrypt.dylib - $(INSTALL_DATA) -pm 0644 libscrypt.h $(DESTDIR)$(INCLUDEDIR) - -install-static: libscrypt.a - $(INSTALL_DATA) -pm 0644 libscrypt.a $(DESTDIR)$(LIBDIR) diff --git a/pkg/urcrypt/scrypt/README.md b/pkg/urcrypt/scrypt/README.md deleted file mode 100644 index 05c893b14..000000000 --- a/pkg/urcrypt/scrypt/README.md +++ /dev/null @@ -1,109 +0,0 @@ -libscrypt -========= -Linux scrypt shared library. - -Full credit to algorithm designer and example code from Colin Percival here: -http://www.tarsnap.com/scrypt.html - -Utilises BASE64 encoding library from ISC. - -Official project page, including stable tarballs found here: -http://www.lolware.net/libscrypt.html - -Simple hashing interface - -The (reference) internal hashing function can be directly called as follows: - - int libscrypt_scrypt(const uint8_t *passwd, size_t passwdlen, - const uint8_t *salt, size_t saltlen, uint64_t N, uint32_t r, - uint32_t p, /*@out@*/ uint8_t *buf, size_t buflen); - -Libscrypt's easier to use interface wraps this up to deal with the salt and produce BASE64 output as so: - - int libscrypt_hash(char *dst, char *passphrase, uint32_t N, uint8_t r, uint8_t p); - -Sane constants have been created for N, r and p so you can create a hash like this: - - libscrypt_hash(outbuf, "My cats's breath smells like cat food", SCRYPT_N, SCRYPT_r, SCRYPT_p); - -This function sets errno as required for any error conditions. - -Output stored in "outbuf" is stored in a standardised MCF form, which means includes the randomly created, 128 bit salt, all N, r and p values, and a BASE64 encoded version of the hash. The entire MCF can be stored in a database, and compared for use as below: - - retval = libscrypt_check(mcf, "pleasefailme"); - retval < 0 error - retval = 0 password incorrect - retval > 0 pass - -mcf should be defined as at least SCRYPT_MCF_LEN in size. - -Note that libscrypt_check needs to modify the mcf string and will not return it -to the original state. Pass it a copy if you need to keep the original mcf. - -A number of internal functions are exposed, and users wishing to create more complex use cases should consult the header file, which is aimed at documenting the API fully. - -The test reference is also aimed at providing a well documented use case. -Building --------- - make - make check -Check the Makefile for advice on linking against your application. - -OSX ------ -Please compile and install with: - - make LDFLAGS= CFLAGS_EXTRA= - make install-osx - - -BUGS ----- -SCRYPT_* constants are probably a little high for something like a Raspberry pi. Using '1' as SCRYPT_p is acceptable from a security and performance standpoint if needed. -Experiments were performed with using memset() to zero out passwords as they were checked. This often caused issues with calling applications where the password based have been passed as a const*. We highly recommend implementing your own zeroing function the moment this library is called. - -There is apparently an issue when used on Samsung (and perhaps Android in general) devices. See [this issue](https://github.com/technion/libscrypt/issues/39) for more information. - -Notes on Code Development ------------------------- - -Code is now declared "stable", the master branch will always be "stable" and development will be done on branches. -The reference machines are Fedora, CentOS, FreeBSD and Raspbian, and the code is expected to compile and run on all of these before being moved to stable branch. -Full transparancy on the regular application of thorough testing can be found by reviewing recent test harness results here: -http://www.lolware.net/libscrypttesting.txt - -Please, no more pull requests for Windows compatibility. If it's important to you - fork the project. I have no intention of pulling an OpenSSL and becoming a maze of ifdefs for platforms I don't even have a build environment for. - -I utilise Facebook's "infer" static analyser, in addition to clang's analyzer. Command to run is: - - infer -- make - -Contact -------- -I can be contacted at: technion@lolware.net - -If required, my GPG key can be found at: https://lolware.net/technion-GPG-KEY - -Future releases will have the Git tag signed. - - -Changenotes ------------ -v1.1a: Single Makefile line change. I wouldn't ordinarily tag this as a new "release", but the purpose here is to assist with packaging in distributions. - -v1.12: The static library is built, but no longer installed by default. You can install it with "make install-static". This is because static libraries are not typically bundled in packages. - -v1.13: Minor packaging related update - -v1.15: Replaced the b64 libraries with more portable one from ISC. Now tested and verified on a wider variety of architectures. Note, libscrypt_b64_encrypt was originally an exported function. This is no longer the case as it is considered an internal function only. - -v1.18: God damnit Apple - -v1.19: Code safety cleanups. Now running Coverity. - -v1.20: Bigfixes involving large N values, return values on error - - - Coverity Scan Build Status - diff --git a/pkg/urcrypt/scrypt/b64.c b/pkg/urcrypt/scrypt/b64.c deleted file mode 100644 index b797dd0d9..000000000 --- a/pkg/urcrypt/scrypt/b64.c +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Copyright (c) 1996 by Internet Software Consortium. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS - * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE - * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL - * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR - * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS - * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - */ - -/* - * Portions Copyright (c) 1995 by International Business Machines, Inc. - * - * International Business Machines, Inc. (hereinafter called IBM) grants - * permission under its copyrights to use, copy, modify, and distribute this - * Software with or without fee, provided that the above copyright notice and - * all paragraphs of this notice appear in all copies, and that the name of IBM - * not be used in connection with the marketing of any product incorporating - * the Software or modifications thereof, without specific, written prior - * permission. - * - * To the extent it has a right to do so, IBM grants an immunity from suit - * under its patents, if any, for the use, sale or manufacture of products to - * the extent that such products are used for performing Domain Name System - * dynamic updates in TCP/IP networks by means of the Software. No immunity is - * granted for any product per se or for any other function of any product. - * - * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, - * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN - * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. - */ - -/* - * Base64 encode/decode functions from OpenBSD (src/lib/libc/net/base64.c). - */ -#include -#include -#include -#include -#include - -#include "b64.h" - - -static const char Base64[] = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -static const char Pad64 = '='; - -/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt) - The following encoding technique is taken from RFC 1521 by Borenstein - and Freed. It is reproduced here in a slightly edited form for - convenience. - - A 65-character subset of US-ASCII is used, enabling 6 bits to be - represented per printable character. (The extra 65th character, "=", - is used to signify a special processing function.) - - The encoding process represents 24-bit groups of input bits as output - strings of 4 encoded characters. Proceeding from left to right, a - 24-bit input group is formed by concatenating 3 8-bit input groups. - These 24 bits are then treated as 4 concatenated 6-bit groups, each - of which is translated into a single digit in the base64 alphabet. - - Each 6-bit group is used as an index into an array of 64 printable - characters. The character referenced by the index is placed in the - output string. - - Table 1: The Base64 Alphabet - - Value Encoding Value Encoding Value Encoding Value Encoding - 0 A 17 R 34 i 51 z - 1 B 18 S 35 j 52 0 - 2 C 19 T 36 k 53 1 - 3 D 20 U 37 l 54 2 - 4 E 21 V 38 m 55 3 - 5 F 22 W 39 n 56 4 - 6 G 23 X 40 o 57 5 - 7 H 24 Y 41 p 58 6 - 8 I 25 Z 42 q 59 7 - 9 J 26 a 43 r 60 8 - 10 K 27 b 44 s 61 9 - 11 L 28 c 45 t 62 + - 12 M 29 d 46 u 63 / - 13 N 30 e 47 v - 14 O 31 f 48 w (pad) = - 15 P 32 g 49 x - 16 Q 33 h 50 y - - Special processing is performed if fewer than 24 bits are available - at the end of the data being encoded. A full encoding quantum is - always completed at the end of a quantity. When fewer than 24 input - bits are available in an input group, zero bits are added (on the - right) to form an integral number of 6-bit groups. Padding at the - end of the data is performed using the '=' character. - - Since all base64 input is an integral number of octets, only the - ------------------------------------------------- - following cases can arise: - - (1) the final quantum of encoding input is an integral - multiple of 24 bits; here, the final unit of encoded - output will be an integral multiple of 4 characters - with no "=" padding, - (2) the final quantum of encoding input is exactly 8 bits; - here, the final unit of encoded output will be two - characters followed by two "=" padding characters, or - (3) the final quantum of encoding input is exactly 16 bits; - here, the final unit of encoded output will be three - characters followed by one "=" padding character. -*/ - -int -libscrypt_b64_encode(src, srclength, target, targsize) - unsigned char const *src; - size_t srclength; - char *target; - size_t targsize; -{ - size_t datalength = 0; - unsigned char input[3]; - unsigned char output[4]; - unsigned int i; - - while (2 < srclength) { - input[0] = *src++; - input[1] = *src++; - input[2] = *src++; - srclength -= 3; - - output[0] = input[0] >> 2; - output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); - output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); - output[3] = input[2] & 0x3f; - - if (datalength + 4 > targsize) - return (-1); - target[datalength++] = Base64[output[0]]; - target[datalength++] = Base64[output[1]]; - target[datalength++] = Base64[output[2]]; - target[datalength++] = Base64[output[3]]; - } - - /* Now we worry about padding. */ - if (0 != srclength) { - /* Get what's left. */ - input[0] = input[1] = input[2] = '\0'; - for (i = 0; i < srclength; i++) - input[i] = *src++; - - output[0] = input[0] >> 2; - output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); - output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); - - if (datalength + 4 > targsize) - return (-1); - target[datalength++] = Base64[output[0]]; - target[datalength++] = Base64[output[1]]; - if (srclength == 1) - target[datalength++] = Pad64; - else - target[datalength++] = Base64[output[2]]; - target[datalength++] = Pad64; - } - if (datalength >= targsize) - return (-1); - target[datalength] = '\0'; /* Returned value doesn't count \0. */ - return (int)(datalength); -} - -/* skips all whitespace anywhere. - converts characters, four at a time, starting at (or after) - src from base - 64 numbers into three 8 bit bytes in the target area. - it returns the number of data bytes stored at the target, or -1 on error. - */ - -int -libscrypt_b64_decode(src, target, targsize) - char const *src; - unsigned char *target; - size_t targsize; -{ - int state, ch; - unsigned int tarindex; - unsigned char nextbyte; - char *pos; - - state = 0; - tarindex = 0; - - while ((ch = (unsigned char)*src++) != '\0') { - if (isspace(ch)) /* Skip whitespace anywhere. */ - continue; - - if (ch == Pad64) - break; - - pos = strchr(Base64, ch); - if (pos == 0) /* A non-base64 character. */ - return (-1); - - switch (state) { - case 0: - if (target) { - if (tarindex >= targsize) - return (-1); - target[tarindex] = (pos - Base64) << 2; - } - state = 1; - break; - case 1: - if (target) { - if (tarindex >= targsize) - return (-1); - target[tarindex] |= (pos - Base64) >> 4; - nextbyte = ((pos - Base64) & 0x0f) << 4; - if (tarindex + 1 < targsize) - target[tarindex+1] = nextbyte; - else if (nextbyte) - return (-1); - } - tarindex++; - state = 2; - break; - case 2: - if (target) { - if (tarindex >= targsize) - return (-1); - target[tarindex] |= (pos - Base64) >> 2; - nextbyte = ((pos - Base64) & 0x03) << 6; - if (tarindex + 1 < targsize) - target[tarindex+1] = nextbyte; - else if (nextbyte) - return (-1); - } - tarindex++; - state = 3; - break; - case 3: - if (target) { - if (tarindex >= targsize) - return (-1); - target[tarindex] |= (pos - Base64); - } - tarindex++; - state = 0; - break; - } - } - - /* - * We are done decoding Base-64 chars. Let's see if we ended - * on a byte boundary, and/or with erroneous trailing characters. - */ - - if (ch == Pad64) { /* We got a pad char. */ - ch = (unsigned char)*src++; /* Skip it, get next. */ - switch (state) { - case 0: /* Invalid = in first position */ - case 1: /* Invalid = in second position */ - return (-1); - - case 2: /* Valid, means one byte of info */ - /* Skip any number of spaces. */ - for (; ch != '\0'; ch = (unsigned char)*src++) - if (!isspace(ch)) - break; - /* Make sure there is another trailing = sign. */ - if (ch != Pad64) - return (-1); - ch = (unsigned char)*src++; /* Skip the = */ - /* Fall through to "single trailing =" case. */ - /* FALLTHROUGH */ - - case 3: /* Valid, means two bytes of info */ - /* - * We know this char is an =. Is there anything but - * whitespace after it? - */ - for (; ch != '\0'; ch = (unsigned char)*src++) - if (!isspace(ch)) - return (-1); - - /* - * Now make sure for cases 2 and 3 that the "extra" - * bits that slopped past the last full byte were - * zeros. If we don't check them, they become a - * subliminal channel. - */ - if (target && tarindex < targsize && - target[tarindex] != 0) - return (-1); - } - } else { - /* - * We ended by seeing the end of the string. Make sure we - * have no partial bytes lying around. - */ - if (state != 0) - return (-1); - } - - return (tarindex); -} diff --git a/pkg/urcrypt/scrypt/b64.h b/pkg/urcrypt/scrypt/b64.h deleted file mode 100644 index dd77a1976..000000000 --- a/pkg/urcrypt/scrypt/b64.h +++ /dev/null @@ -1,10 +0,0 @@ - -/* BASE64 libraries used internally - should not need to be packaged */ -#include -#define b64_encode_len(A) ((A+2)/3 * 4 + 1) -#define b64_decode_len(A) (A / 4 * 3 + 2) - -int libscrypt_b64_encode(unsigned char const *src, size_t srclength, - /*@out@*/ char *target, size_t targetsize); -int libscrypt_b64_decode(char const *src, /*@out@*/ unsigned char *target, - size_t targetsize); diff --git a/pkg/urcrypt/scrypt/crypto-mcf.c b/pkg/urcrypt/scrypt/crypto-mcf.c deleted file mode 100644 index 1b04e48f4..000000000 --- a/pkg/urcrypt/scrypt/crypto-mcf.c +++ /dev/null @@ -1,65 +0,0 @@ -#include -#include -#include - -#include "libscrypt.h" - -/* ilog2 for powers of two */ -static uint32_t scrypt_ilog2(uint32_t n) -{ -#ifndef S_SPLINT_S - - /* Check for a valid power of two */ - if (n < 2 || (n & (n - 1))) - return -1; -#endif - uint32_t t = 1; - while (((uint32_t)1 << t) < n) - { - if(t > SCRYPT_SAFE_N) - return (uint32_t) -1; /* Check for insanity */ - t++; - } - - return t; -} - -#ifdef _MSC_VER - #define SNPRINTF _snprintf -#else - #define SNPRINTF snprintf -#endif - -int libscrypt_mcf(uint32_t N, uint32_t r, uint32_t p, const char *salt, - const char *hash, char *mcf) -{ - - uint32_t t, params; - int s; - - if(!mcf || !hash) - return 0; - /* Although larger values of r, p are valid in scrypt, this mcf format - * limits to 8 bits. If your number is larger, current computers will - * struggle - */ - if(r > (uint8_t)(-1) || p > (uint8_t)(-1)) - return 0; - - t = scrypt_ilog2(N); - if (t < 1) - return 0; - - params = (r << 8) + p; - params += (uint32_t)t << 16; - - /* Using snprintf - not checking for overflows. We've already - * determined that mcf should be defined as at least SCRYPT_MCF_LEN - * in length - */ - s = SNPRINTF(mcf, SCRYPT_MCF_LEN, SCRYPT_MCF_ID "$%06x$%s$%s", (unsigned int)params, salt, hash); - if (s >= SCRYPT_MCF_LEN) - return 0; - - return 1; -} diff --git a/pkg/urcrypt/scrypt/crypto-scrypt-saltgen.c b/pkg/urcrypt/scrypt/crypto-scrypt-saltgen.c deleted file mode 100644 index e24aa3cbf..000000000 --- a/pkg/urcrypt/scrypt/crypto-scrypt-saltgen.c +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include - -/* Disable on Windows, there is no /dev/urandom. - Link-time error is better than runtime error. */ -#ifndef _WIN32 - -#ifndef S_SPLINT_S /* Including this here triggers a known bug in splint */ -#include -#endif - -#define RNGDEV "/dev/urandom" - -int libscrypt_salt_gen(uint8_t *salt, size_t len) -{ - unsigned char buf[len]; - size_t data_read = 0; - int urandom = open(RNGDEV, O_RDONLY); - - if (urandom < 0) - { - return -1; - } - - while (data_read < len) { - ssize_t result = read(urandom, buf + data_read, len - data_read); - - if (result < 0) - { - if (errno == EINTR || errno == EAGAIN) { - continue; - } - - else { - (void)close(urandom); - return -1; - } - } - - data_read += result; - } - - /* Failures on close() shouldn't occur with O_RDONLY */ - (void)close(urandom); - - memcpy(salt, buf, len); - - return 0; -} - -#endif diff --git a/pkg/urcrypt/scrypt/crypto_scrypt-check.c b/pkg/urcrypt/scrypt/crypto_scrypt-check.c deleted file mode 100644 index 8ea4519f5..000000000 --- a/pkg/urcrypt/scrypt/crypto_scrypt-check.c +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include -#include -#include - -#include "b64.h" -#include "slowequals.h" -#include "libscrypt.h" - -#ifdef _WIN32 -/* On windows, strtok uses a thread-local static variable in strtok to - * make strtok thread-safe. It also neglects to provide a strtok_r. */ -#define strtok_r(str, val, saveptr) strtok((str), (val)) -#endif - -int libscrypt_check(char *mcf, const char *password) -{ - /* Return values: - * <0 error - * == 0 password incorrect - * >0 correct password - */ - -#ifndef _WIN32 - char *saveptr = NULL; -#endif - uint32_t params; - uint64_t N; - uint8_t r, p; - int retval; - uint8_t hashbuf[64]; - char outbuf[128]; - uint8_t salt[32]; - char *tok; - - if(mcf == NULL) - { - return -1; - } - - if(memcmp(mcf, SCRYPT_MCF_ID, 3) != 0) - { - /* Only version 0 supported */ - return -1; - } - - tok = strtok_r(mcf, "$", &saveptr); - if ( !tok ) - return -1; - - tok = strtok_r(NULL, "$", &saveptr); - - if ( !tok ) - return -1; - - params = (uint32_t)strtoul(tok, NULL, 16); - if ( params == 0 ) - return -1; - - tok = strtok_r(NULL, "$", &saveptr); - - if ( !tok ) - return -1; - - p = params & 0xff; - r = (params >> 8) & 0xff; - N = params >> 16; - - if (N > SCRYPT_SAFE_N) - return -1; - - N = (uint64_t)1 << N; - - /* Useful debugging: - printf("We've obtained salt 'N' r p of '%s' %d %d %d\n", tok, N,r,p); - */ - - memset(salt, 0, sizeof(salt)); /* Keeps splint happy */ - retval = libscrypt_b64_decode(tok, (unsigned char*)salt, sizeof(salt)); - if (retval < 1) - return -1; - - retval = libscrypt_scrypt((uint8_t*)password, strlen(password), salt, - (uint32_t)retval, N, r, p, hashbuf, sizeof(hashbuf)); - - if (retval != 0) - return -1; - - retval = libscrypt_b64_encode((unsigned char*)hashbuf, sizeof(hashbuf), - outbuf, sizeof(outbuf)); - - if (retval == 0) - return -1; - - tok = strtok_r(NULL, "$", &saveptr); - - if ( !tok ) - return -1; - - if(slow_equals(tok, outbuf) == 0) - return 0; - - return 1; /* This is the "else" condition */ -} - diff --git a/pkg/urcrypt/scrypt/crypto_scrypt-hash.c b/pkg/urcrypt/scrypt/crypto_scrypt-hash.c deleted file mode 100644 index 4b41007db..000000000 --- a/pkg/urcrypt/scrypt/crypto_scrypt-hash.c +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include -#include -#include - -#include "b64.h" -#include "libscrypt.h" - -int libscrypt_hash(char *dst, const char *passphrase, uint32_t N, uint8_t r, - uint8_t p) -{ - - int retval; - uint8_t salt[SCRYPT_SALT_LEN]; - uint8_t hashbuf[SCRYPT_HASH_LEN]; - char outbuf[256]; - char saltbuf[256]; - - if(libscrypt_salt_gen(salt, SCRYPT_SALT_LEN) == -1) - { - return 0; - } - - retval = libscrypt_scrypt((const uint8_t*)passphrase, strlen(passphrase), - (uint8_t*)salt, SCRYPT_SALT_LEN, N, r, p, hashbuf, sizeof(hashbuf)); - if(retval == -1) - return 0; - - retval = libscrypt_b64_encode((unsigned char*)hashbuf, sizeof(hashbuf), - outbuf, sizeof(outbuf)); - if(retval == -1) - return 0; - - retval = libscrypt_b64_encode((unsigned char *)salt, sizeof(salt), - saltbuf, sizeof(saltbuf)); - if(retval == -1) - return 0; - - retval = libscrypt_mcf(N, r, p, saltbuf, outbuf, dst); - if(retval != 1) - return 0; - - return 1; -} diff --git a/pkg/urcrypt/scrypt/crypto_scrypt-hexconvert.c b/pkg/urcrypt/scrypt/crypto_scrypt-hexconvert.c deleted file mode 100644 index 3df12a023..000000000 --- a/pkg/urcrypt/scrypt/crypto_scrypt-hexconvert.c +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include -#include -#include - -/* The hexconvert function is only used to test reference vectors against - * known answers. The contents of this file are therefore a component - * to assist with test harnesses only - */ - -int libscrypt_hexconvert(uint8_t *buf, size_t s, char *outbuf, size_t obs) -{ - - size_t i; - int len = 0; - - if (!buf || s < 1 || obs < (s * 2 + 1)) - return 0; - - memset(outbuf, 0, obs); - - - for(i=0; i<=(s-1); i++) - { - /* snprintf(outbuf, s,"%s...", outbuf....) has undefined results - * and can't be used. Using offests like this makes snprintf - * nontrivial. we therefore have use inescure sprintf() and - * lengths checked elsewhere (start of function) */ - /*@ -bufferoverflowhigh @*/ - len += sprintf(outbuf+len, "%02x", (unsigned int) buf[i]); - } - - return 1; -} - diff --git a/pkg/urcrypt/scrypt/crypto_scrypt-hexconvert.h b/pkg/urcrypt/scrypt/crypto_scrypt-hexconvert.h deleted file mode 100644 index 28a9e5d88..000000000 --- a/pkg/urcrypt/scrypt/crypto_scrypt-hexconvert.h +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include - -/** - * Converts a binary string to a hex representation of that string - * outbuf must have size of at least buf * 2 + 1. - */ -int libscrypt_hexconvert(const uint8_t *buf, size_t s, char *outbuf, - size_t obs); diff --git a/pkg/urcrypt/scrypt/crypto_scrypt-nosse.c b/pkg/urcrypt/scrypt/crypto_scrypt-nosse.c deleted file mode 100644 index 12c860f2d..000000000 --- a/pkg/urcrypt/scrypt/crypto_scrypt-nosse.c +++ /dev/null @@ -1,342 +0,0 @@ -/*- - * Copyright 2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file was originally written by Colin Percival as part of the Tarsnap - * online backup system. - */ - -#include -#ifndef _WIN32 -#include -#endif -#include -#include -#include -#include - -#include "sha256.h" -#include "sysendian.h" - -#include "libscrypt.h" - -static void blkcpy(void *, void *, size_t); -static void blkxor(void *, void *, size_t); -static void salsa20_8(uint32_t[16]); -static void blockmix_salsa8(uint32_t *, uint32_t *, uint32_t *, size_t); -static uint64_t integerify(void *, size_t); -static void smix(uint8_t *, size_t, uint64_t, uint32_t *, uint32_t *); - -static void -blkcpy(void * dest, void * src, size_t len) -{ - size_t * D = dest; - size_t * S = src; - size_t L = len / sizeof(size_t); - size_t i; - - for (i = 0; i < L; i++) - D[i] = S[i]; -} - -static void -blkxor(void * dest, void * src, size_t len) -{ - size_t * D = dest; - size_t * S = src; - size_t L = len / sizeof(size_t); - size_t i; - - for (i = 0; i < L; i++) - D[i] ^= S[i]; -} - -/** - * salsa20_8(B): - * Apply the salsa20/8 core to the provided block. - */ -static void -salsa20_8(uint32_t B[16]) -{ - uint32_t x[16]; - size_t i; - - blkcpy(x, B, 64); - for (i = 0; i < 8; i += 2) { -#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b)))) - /* Operate on columns. */ - x[ 4] ^= R(x[ 0]+x[12], 7); x[ 8] ^= R(x[ 4]+x[ 0], 9); - x[12] ^= R(x[ 8]+x[ 4],13); x[ 0] ^= R(x[12]+x[ 8],18); - - x[ 9] ^= R(x[ 5]+x[ 1], 7); x[13] ^= R(x[ 9]+x[ 5], 9); - x[ 1] ^= R(x[13]+x[ 9],13); x[ 5] ^= R(x[ 1]+x[13],18); - - x[14] ^= R(x[10]+x[ 6], 7); x[ 2] ^= R(x[14]+x[10], 9); - x[ 6] ^= R(x[ 2]+x[14],13); x[10] ^= R(x[ 6]+x[ 2],18); - - x[ 3] ^= R(x[15]+x[11], 7); x[ 7] ^= R(x[ 3]+x[15], 9); - x[11] ^= R(x[ 7]+x[ 3],13); x[15] ^= R(x[11]+x[ 7],18); - - /* Operate on rows. */ - x[ 1] ^= R(x[ 0]+x[ 3], 7); x[ 2] ^= R(x[ 1]+x[ 0], 9); - x[ 3] ^= R(x[ 2]+x[ 1],13); x[ 0] ^= R(x[ 3]+x[ 2],18); - - x[ 6] ^= R(x[ 5]+x[ 4], 7); x[ 7] ^= R(x[ 6]+x[ 5], 9); - x[ 4] ^= R(x[ 7]+x[ 6],13); x[ 5] ^= R(x[ 4]+x[ 7],18); - - x[11] ^= R(x[10]+x[ 9], 7); x[ 8] ^= R(x[11]+x[10], 9); - x[ 9] ^= R(x[ 8]+x[11],13); x[10] ^= R(x[ 9]+x[ 8],18); - - x[12] ^= R(x[15]+x[14], 7); x[13] ^= R(x[12]+x[15], 9); - x[14] ^= R(x[13]+x[12],13); x[15] ^= R(x[14]+x[13],18); -#undef R - } - for (i = 0; i < 16; i++) - B[i] += x[i]; -} - -/** - * blockmix_salsa8(Bin, Bout, X, r): - * Compute Bout = BlockMix_{salsa20/8, r}(Bin). The input Bin must be 128r - * bytes in length; the output Bout must also be the same size. The - * temporary space X must be 64 bytes. - */ -static void -blockmix_salsa8(uint32_t * Bin, uint32_t * Bout, uint32_t * X, size_t r) -{ - size_t i; - - /* 1: X <-- B_{2r - 1} */ - blkcpy(X, &Bin[(2 * r - 1) * 16], 64); - - /* 2: for i = 0 to 2r - 1 do */ - for (i = 0; i < 2 * r; i += 2) { - /* 3: X <-- H(X \xor B_i) */ - blkxor(X, &Bin[i * 16], 64); - salsa20_8(X); - - /* 4: Y_i <-- X */ - /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ - blkcpy(&Bout[i * 8], X, 64); - - /* 3: X <-- H(X \xor B_i) */ - blkxor(X, &Bin[i * 16 + 16], 64); - salsa20_8(X); - - /* 4: Y_i <-- X */ - /* 6: B' <-- (Y_0, Y_2 ... Y_{2r-2}, Y_1, Y_3 ... Y_{2r-1}) */ - blkcpy(&Bout[i * 8 + r * 16], X, 64); - } -} - -/** - * integerify(B, r): - * Return the result of parsing B_{2r-1} as a little-endian integer. - */ -static uint64_t -integerify(void * B, size_t r) -{ - uint32_t * X = (void *)((uintptr_t)(B) + (2 * r - 1) * 64); - - return (((uint64_t)(X[1]) << 32) + X[0]); -} - -/** - * smix(B, r, N, V, XY): - * Compute B = SMix_r(B, N). The input B must be 128r bytes in length; - * the temporary storage V must be 128rN bytes in length; the temporary - * storage XY must be 256r + 64 bytes in length. The value N must be a - * power of 2 greater than 1. The arrays B, V, and XY must be aligned to a - * multiple of 64 bytes. - */ -static void -smix(uint8_t * B, size_t r, uint64_t N, uint32_t * V, uint32_t * XY) -{ - uint32_t * X = XY; - uint32_t * Y = &XY[32 * r]; - uint32_t * Z = &XY[64 * r]; - uint64_t i; - uint64_t j; - size_t k; - - /* 1: X <-- B */ - for (k = 0; k < 32 * r; k++) - X[k] = le32dec(&B[4 * k]); - - /* 2: for i = 0 to N - 1 do */ - for (i = 0; i < N; i += 2) { - /* 3: V_i <-- X */ - blkcpy(&V[i * (32 * r)], X, 128 * r); - - /* 4: X <-- H(X) */ - blockmix_salsa8(X, Y, Z, r); - - /* 3: V_i <-- X */ - blkcpy(&V[(i + 1) * (32 * r)], Y, 128 * r); - - /* 4: X <-- H(X) */ - blockmix_salsa8(Y, X, Z, r); - } - - /* 6: for i = 0 to N - 1 do */ - for (i = 0; i < N; i += 2) { - /* 7: j <-- Integerify(X) mod N */ - j = integerify(X, r) & (N - 1); - - /* 8: X <-- H(X \xor V_j) */ - blkxor(X, &V[j * (32 * r)], 128 * r); - blockmix_salsa8(X, Y, Z, r); - - /* 7: j <-- Integerify(X) mod N */ - j = integerify(Y, r) & (N - 1); - - /* 8: X <-- H(X \xor V_j) */ - blkxor(Y, &V[j * (32 * r)], 128 * r); - blockmix_salsa8(Y, X, Z, r); - } - - /* 10: B' <-- X */ - for (k = 0; k < 32 * r; k++) - le32enc(&B[4 * k], X[k]); -} - -/** - * crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen): - * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, - * p, buflen) and write the result into buf. The parameters r, p, and buflen - * must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32. The parameter N - * must be a power of 2 greater than 1. - * - * Return 0 on success; or -1 on error - */ -int -libscrypt_scrypt(const uint8_t * passwd, size_t passwdlen, - const uint8_t * salt, size_t saltlen, uint64_t N, uint32_t r, uint32_t p, - uint8_t * buf, size_t buflen) -{ - void * B0, * V0, * XY0; - uint8_t * B; - uint32_t * V; - uint32_t * XY; - uint32_t i; - - /* Sanity-check parameters. */ -#if SIZE_MAX > UINT32_MAX - if (buflen > (((uint64_t)(1) << 32) - 1) * 32) { - errno = EFBIG; - goto err0; - } -#endif - if ((uint64_t)(r) * (uint64_t)(p) >= (1 << 30)) { - errno = EFBIG; - goto err0; - } - if (r == 0 || p == 0) { - errno = EINVAL; - goto err0; - } - if (((N & (N - 1)) != 0) || (N < 2)) { - errno = EINVAL; - goto err0; - } - if ((r > SIZE_MAX / 128 / p) || -#if SIZE_MAX / 256 <= UINT32_MAX - (r > SIZE_MAX / 256) || -#endif - (N > SIZE_MAX / 128 / r)) { - errno = ENOMEM; - goto err0; - } - - /* Allocate memory. */ -#ifdef HAVE_POSIX_MEMALIGN - if ((errno = posix_memalign(&B0, 64, 128 * r * p)) != 0) - goto err0; - B = (uint8_t *)(B0); - if ((errno = posix_memalign(&XY0, 64, 256 * r + 64)) != 0) - goto err1; - XY = (uint32_t *)(XY0); -#ifndef MAP_ANON - if ((errno = posix_memalign(&V0, 64, 128 * r * N)) != 0) - goto err2; - V = (uint32_t *)(V0); -#endif -#else - if ((B0 = malloc(128 * r * p + 63)) == NULL) - goto err0; - B = (uint8_t *)(((uintptr_t)(B0) + 63) & ~ (uintptr_t)(63)); - if ((XY0 = malloc(256 * r + 64 + 63)) == NULL) - goto err1; - XY = (uint32_t *)(((uintptr_t)(XY0) + 63) & ~ (uintptr_t)(63)); -#ifndef MAP_ANON - if ((V0 = malloc(128 * r * N + 63)) == NULL) - goto err2; - V = (uint32_t *)(((uintptr_t)(V0) + 63) & ~ (uintptr_t)(63)); -#endif -#endif -#ifdef MAP_ANON - if ((V0 = mmap(NULL, 128 * r * N, PROT_READ | PROT_WRITE, -#ifdef MAP_NOCORE - MAP_ANON | MAP_PRIVATE | MAP_NOCORE, -#else - MAP_ANON | MAP_PRIVATE, -#endif - -1, 0)) == MAP_FAILED) - goto err2; - V = (uint32_t *)(V0); -#endif - - /* 1: (B_0 ... B_{p-1}) <-- PBKDF2(P, S, 1, p * MFLen) */ - libscrypt_PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, 1, B, p * 128 * r); - - /* 2: for i = 0 to p - 1 do */ - for (i = 0; i < p; i++) { - /* 3: B_i <-- MF(B_i, N) */ - smix(&B[i * 128 * r], r, N, V, XY); - } - - /* 5: DK <-- PBKDF2(P, B, 1, dkLen) */ - libscrypt_PBKDF2_SHA256(passwd, passwdlen, B, p * 128 * r, 1, buf, buflen); - - /* Free memory. */ -#ifdef MAP_ANON - if (munmap(V0, 128 * r * N)) - goto err2; -#else - free(V0); -#endif - free(XY0); - free(B0); - - /* Success! */ - return (0); - -err2: - free(XY0); -err1: - free(B0); -err0: - /* Failure! */ - return (-1); -} diff --git a/pkg/urcrypt/scrypt/libscrypt.h b/pkg/urcrypt/scrypt/libscrypt.h deleted file mode 100644 index 2ea31cb1a..000000000 --- a/pkg/urcrypt/scrypt/libscrypt.h +++ /dev/null @@ -1,77 +0,0 @@ -/*- - */ -#ifndef _CRYPTO_SCRYPT_H_ -#define _CRYPTO_SCRYPT_H_ - - -#include -#include -#ifdef __cplusplus -extern "C"{ -#endif - -/** - * crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen): - * Compute scrypt(passwd[0 .. passwdlen - 1], salt[0 .. saltlen - 1], N, r, - * p, buflen) and write the result into buf. The parameters r, p, and buflen - * must satisfy r * p < 2^30 and buflen <= (2^32 - 1) * 32. The parameter N - * must be a power of 2 greater than 1. - * - * libscrypt_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen): - * password; duh - * N: CPU AND RAM cost (first modifier) - * r: RAM Cost - * p: CPU cost (parallelisation) - * In short, N is your main performance modifier. Values of r = 8, p = 1 are - * standard unless you want to modify the CPU/RAM ratio. - * Return 0 on success; or -1 on error. - */ -int libscrypt_scrypt(const uint8_t *, size_t, const uint8_t *, size_t, uint64_t, - uint32_t, uint32_t, /*@out@*/ uint8_t *, size_t); - -/* Converts a series of input parameters to a MCF form for storage */ -int libscrypt_mcf(uint32_t N, uint32_t r, uint32_t p, const char *salt, - const char *hash, char *mcf); - -#ifndef _MSC_VER -/* Generates a salt. Uses /dev/urandom/ - */ -int libscrypt_salt_gen(/*@out@*/ uint8_t *rand, size_t len); - -/* Creates a hash of a passphrase using a randomly generated salt */ -/* Returns >0 on success, or 0 for fail */ -int libscrypt_hash(char *dst, const char* passphrase, uint32_t N, uint8_t r, - uint8_t p); -#endif - -/* Checks a given MCF against a password */ -int libscrypt_check(char *mcf, const char *password); - -#ifdef __cplusplus -} -#endif - -/* Sane default values */ -#define SCRYPT_HASH_LEN 64 /* This can be user defined - - *but 64 is the reference size - */ -#define SCRYPT_SAFE_N 30 /* This is much higher than you want. It's just - * a blocker for insane defines - */ -#define SCRYPT_SALT_LEN 16 /* This is just a recommended size */ -/* Standard MCF is: - $s1 Identifier, three chars - $0e0810 Work order and separator, six chars - Formula for binary to base64 length = ceil(n/3)*4 - $pcL+DWle903AXcKJVwMffA== Salt is 16 bytes, or 24 in Base64 - $dn+9ujljVc5JTJMC2fYu1ZEHdJyqYkOurmcrBQbMHUfnD6qxbTmNiR075ohNBZjvp66E2aV1pfOrmyNHUefjMg== Hash is 64 bytes, or 88 in Base64. - Work order, salt and hash have separators (3) - 3 + 6 + 24 + 88 + 3 + null byte = 125 - This is rounded up to a multiple of four for alignment -*/ -#define SCRYPT_MCF_LEN 128 -#define SCRYPT_MCF_ID "$s1" -#define SCRYPT_N 16384 -#define SCRYPT_r 8 -#define SCRYPT_p 16 -#endif /* !_CRYPTO_SCRYPT_H_ */ diff --git a/pkg/urcrypt/scrypt/libscrypt.version b/pkg/urcrypt/scrypt/libscrypt.version deleted file mode 100644 index 9cc574db2..000000000 --- a/pkg/urcrypt/scrypt/libscrypt.version +++ /dev/null @@ -1,8 +0,0 @@ -libscrypt { - global: libscrypt_check; -libscrypt_hash; -libscrypt_mcf; -libscrypt_salt_gen; -libscrypt_scrypt; - local: *; -}; diff --git a/pkg/urcrypt/scrypt/main.c b/pkg/urcrypt/scrypt/main.c deleted file mode 100644 index ab5acecf2..000000000 --- a/pkg/urcrypt/scrypt/main.c +++ /dev/null @@ -1,244 +0,0 @@ -#include -#include -#include -#include - -#include "b64.h" -#include "crypto_scrypt-hexconvert.h" -#include "libscrypt.h" - -#define REF1 "fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640" - -#define REF2 "7023bdcb3afd7348461c06cd81fd38ebfda8fbba904f8e3ea9b543f6545da1f2d5432955613f0fcf62d49705242a9af9e61e85dc0d651e40dfcf017b45575887" - - -int main() -{ - uint8_t hashbuf[SCRYPT_HASH_LEN]; - char outbuf[132]; - char mcf[SCRYPT_MCF_LEN]; - char mcf2[SCRYPT_MCF_LEN]; - char saltbuf[64]; - int retval; - /** - * libscrypt_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen): - * password; duh - * N: CPU AND RAM cost (first modifier) - * r: RAM Cost - * p: CPU cost (parallelisation) - * In short, N is your main performance modifier. Values of r = 8, p = 1 are - * standard unless you want to modify the CPU/RAM ratio. - int libscrypt_scrypt(const uint8_t *, size_t, const uint8_t *, size_t, uint64_t, - uint32_t, uint32_t, uint8_t *, size_t); -*/ - - printf("TEST ONE: Direct call to reference function with password 'password' and salt 'NaCL'\n"); - - retval = libscrypt_scrypt((uint8_t*)"password",strlen("password"), (uint8_t*)"NaCl", strlen("NaCl"), 1024, 8, 16, hashbuf, sizeof(hashbuf)); - - if(retval != 0) - { - printf("TEST ONE FAILED: Failed to create hash of \"password\"\\n"); - exit(EXIT_FAILURE); - } - - printf("TEST ONE: SUCCESSFUL\n"); - - printf("TEST ONE and a half: Review errno on invalid input\n"); - - retval = libscrypt_scrypt((uint8_t*)"password",strlen("password"), (uint8_t*)"NaCl", strlen("NaCl"), 47, 1, 1, hashbuf, sizeof(hashbuf)); - - if(retval != -1) - { - printf("TEST ONE FAILED: Failed to detect invalid input\n"); - exit(EXIT_FAILURE); - } - printf("TEST ONE and a half: Successfully failed on error: %s\n", strerror(errno)); - - /* Convert the binary string to hex representation. Outbuf must be - * at least sizeof(hashbuf) * 2 + 1 - * Returns 0 on fail, 1 on success - */ - printf("TEST TWO: Convert binary output to hex\n"); - retval = libscrypt_hexconvert(hashbuf, sizeof(hashbuf), outbuf, sizeof(outbuf)); - if(!retval) - { - printf("TEST TWO: FAILED\n"); - exit(EXIT_FAILURE); - } - printf("TEST TWO: SUCCESSFUL, Hex output is:\n%s\n", outbuf); - - printf("TEST THREE: Compare hex output to reference hash output\n"); - - /* REF1 is a reference vector from Colin's implementation. */ - if(strcmp(outbuf, REF1) != 0) - { - printf("TEST THREE: FAILED to match reference on hash\n"); - exit(EXIT_FAILURE); - } - else - { - printf("TEST THREE: SUCCESSUL, Test vector matched!\n"); - } - - printf("TEST FOUR: Direct call to reference function with pleaseletmein password and SodiumChloride as salt\n"); - - /* Tests 4-6 repeat tests 1-3 with a different reference vector */ - - retval = libscrypt_scrypt((uint8_t*)"pleaseletmein",strlen("pleaseletmein"), (uint8_t*)"SodiumChloride", strlen("SodiumChloride"), 16384, 8, 1, hashbuf, sizeof(hashbuf)); - - if(retval != 0) - { - printf("TEST FOUR FAILED: Failed to create hash of 'pleaseletmein'\n"); - exit(EXIT_FAILURE); - } - - printf("TEST FOUR: SUCCESSFUL\n"); - - /* Convert the binary string to hex representation. Outbuf must be - * at least sizeof(hashbuf) * 2 + 1 - */ - printf("TEST FIVE: Convert binary output to hex\n"); - retval = libscrypt_hexconvert(hashbuf, sizeof(hashbuf), outbuf, sizeof(outbuf)); - if(!retval) - { - printf("TEST FIVE: FAILED\n"); - exit(EXIT_FAILURE); - } - printf("TEST FIVE: SUCCESSFUL, Hex output is:\n%s\n", outbuf); - - printf("TEST SIX: Compare hex output to reference hash output\n"); - - if(strcmp(outbuf, REF2) != 0) - { - printf("TEST SIX: FAILED to match reference on hash\n"); - exit(EXIT_FAILURE); - } - else - { - printf("TEST SIX: SUCCESSUL, Test vector matched!\n"); - } - - /* This function will convert the binary output to BASE64. Although - * we converted to hex for the reference vectors, BASE64 is more useful. - * Returns -1 on error, else returns length. - * Correct buffer length can be determined using the below function if - retuired. - * char* dest = (char*) malloc(modp_b64_encode_len); - * Note that this is not an exported function - */ - - printf("TEST SEVEN: BASE64 encoding the salt and hash output\n"); - - retval = libscrypt_b64_encode(hashbuf, sizeof(hashbuf), outbuf, sizeof(outbuf)); - if(retval == -1) - { - printf("TEST SEVEN FAILED\n"); - exit(EXIT_FAILURE); - } - retval = libscrypt_b64_encode((unsigned char*)"SodiumChloride", strlen("SodiumChloride"), saltbuf, sizeof(saltbuf)); - if(retval == -1) - { - printf("TEST SEVEN FAILED\n"); - exit(EXIT_FAILURE); - } - - printf("TEST SEVEN: SUCCESSFUL\n"); - - printf("TEST EIGHT: Create an MCF format output\n"); - - /* Creates a standard format output - * int crypto_scrypt_mcf(uint32_t N, uint32_t r, uint32_t p, char *salt, char *hash, char *mcf); - * Returns 0 on error, most likely reason is log2(N) not an integer. - */ - retval = libscrypt_mcf(16384, 8, 1, saltbuf, outbuf, mcf); - if(!retval) - { - printf("TEST EIGHT FAILED\n"); - exit(EXIT_FAILURE); - } - - printf("TEST EIGHT: SUCCESSFUL, calculated mcf\n%s\n", mcf); - - /* Since later calls to scrypt_check() butcher mcf, make a second */ - strcpy(mcf2, mcf); - - /* Couldn't be simpler - for a given mcf, check is the password is valid - * Returns < 0 on failure to calculate hash - * 0 if password incorrect - * >1 if password correct - */ - - printf("TEST NINE: Password verify on given MCF\n"); - retval = libscrypt_check(mcf, "pleaseletmein"); - - if(retval < 0) - { - printf("TEST NINE: FAILED, hash failed to calculate\n"); - exit(EXIT_FAILURE); - } - if(retval == 0) - { - printf("TEST NINE: FAILED, claimed pleaseletmein hash claimed did not verify\n"); - exit(EXIT_FAILURE); - } - /* retval >0 is a success */ - printf("TEST NINE: SUCCESSFUL, tested pleaseletmein password\n"); - - printf("TEST TEN: Password verify on same MCF, incorrect password\n"); - retval = libscrypt_check(mcf2, "pleasefailme"); - - if(retval < 0) - { - printf("TEST TEN: FAILED, hash failed to calculate\n"); - exit(EXIT_FAILURE); - } - if(retval > 0) - { - printf("TEST TEN: FAILED, fail hash has passed\n"); - exit(EXIT_FAILURE); - } - - printf("TEST TEN: SUCCESSFUL, refused incorrect password\n"); - - printf("TEST ELEVEN: Testing salt generator\n"); - - retval = libscrypt_salt_gen((uint8_t*)saltbuf, SCRYPT_SALT_LEN); - if(retval == -1) - { - printf("TEST ELEVEN (salt generate) FAILED\n"); - exit(EXIT_FAILURE); - } - - retval = libscrypt_b64_encode((uint8_t*)saltbuf, SCRYPT_SALT_LEN, outbuf, sizeof(outbuf)); - if(retval == -1) - { - printf("TEST ELEVEN (b64 encode) FAILED\n"); - exit(EXIT_FAILURE); - } - printf("TEST ELEVEN: SUCCESSFUL, Generated %s\n", outbuf); - - printf("TEST TWELVE: Simple hash creation\n"); - - retval = libscrypt_hash(outbuf, "My cats's breath smells like cat food", SCRYPT_N, SCRYPT_r, SCRYPT_p); - if(!retval) - { - printf("TEST TWELVE: FAILED, Failed to create simple hash\n"); - exit(EXIT_FAILURE); - } - printf("TEST TWELVE: SUCCESSFUL. Received the following from simple hash:\n%s\n", outbuf); - - printf("TEST THIRTEEN: Verify test twelve's hash\n"); - - retval = libscrypt_check(outbuf, "My cats's breath smells like cat food"); - - if (retval != 1) { - printf("TEST THIRTEEN: FAILED, hash not verified\n"); - exit(EXIT_FAILURE); - } - - printf("TEST THIRTEEN: SUCCESSFUL\n"); - - return 0; -} - diff --git a/pkg/urcrypt/scrypt/sha256.c b/pkg/urcrypt/scrypt/sha256.c deleted file mode 100644 index cae65db33..000000000 --- a/pkg/urcrypt/scrypt/sha256.c +++ /dev/null @@ -1,397 +0,0 @@ -/*- - * Copyright 2005,2007,2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#include - -#include -#include - -#include "sysendian.h" - -#include "sha256.h" - -/* - * Encode a length len/4 vector of (uint32_t) into a length len vector of - * (unsigned char) in big-endian form. Assumes len is a multiple of 4. - */ -static void -be32enc_vect(unsigned char *dst, const uint32_t *src, size_t len) -{ - size_t i; - - for (i = 0; i < len / 4; i++) - be32enc(dst + i * 4, src[i]); -} - -/* - * Decode a big-endian length len vector of (unsigned char) into a length - * len/4 vector of (uint32_t). Assumes len is a multiple of 4. - */ -static void -be32dec_vect(uint32_t *dst, const unsigned char *src, size_t len) -{ - size_t i; - - for (i = 0; i < len / 4; i++) - dst[i] = be32dec(src + i * 4); -} - -/* Elementary functions used by SHA256 */ -#define Ch(x, y, z) ((x & (y ^ z)) ^ z) -#define Maj(x, y, z) ((x & (y | z)) | (y & z)) -#define SHR(x, n) (x >> n) -#define ROTR(x, n) ((x >> n) | (x << (32 - n))) -#define S0(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22)) -#define S1(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25)) -#define s0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3)) -#define s1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10)) - -/* SHA256 round function */ -#define RND(a, b, c, d, e, f, g, h, k) \ - t0 = h + S1(e) + Ch(e, f, g) + k; \ - t1 = S0(a) + Maj(a, b, c); \ - d += t0; \ - h = t0 + t1; - -/* Adjusted round function for rotating state */ -#define RNDr(S, W, i, k) \ - RND(S[(64 - i) % 8], S[(65 - i) % 8], \ - S[(66 - i) % 8], S[(67 - i) % 8], \ - S[(68 - i) % 8], S[(69 - i) % 8], \ - S[(70 - i) % 8], S[(71 - i) % 8], \ - W[i] + k) - -/* - * SHA256 block compression function. The 256-bit state is transformed via - * the 512-bit input block to produce a new state. - */ -static void -SHA256_Transform(uint32_t * state, const unsigned char block[64]) -{ - uint32_t W[64]; - uint32_t S[8]; - uint32_t t0, t1; - int i; - - /* 1. Prepare message schedule W. */ - be32dec_vect(W, block, 64); - for (i = 16; i < 64; i++) - W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16]; - - /* 2. Initialize working variables. */ - memcpy(S, state, 32); - - /* 3. Mix. */ - RNDr(S, W, 0, 0x428a2f98); - RNDr(S, W, 1, 0x71374491); - RNDr(S, W, 2, 0xb5c0fbcf); - RNDr(S, W, 3, 0xe9b5dba5); - RNDr(S, W, 4, 0x3956c25b); - RNDr(S, W, 5, 0x59f111f1); - RNDr(S, W, 6, 0x923f82a4); - RNDr(S, W, 7, 0xab1c5ed5); - RNDr(S, W, 8, 0xd807aa98); - RNDr(S, W, 9, 0x12835b01); - RNDr(S, W, 10, 0x243185be); - RNDr(S, W, 11, 0x550c7dc3); - RNDr(S, W, 12, 0x72be5d74); - RNDr(S, W, 13, 0x80deb1fe); - RNDr(S, W, 14, 0x9bdc06a7); - RNDr(S, W, 15, 0xc19bf174); - RNDr(S, W, 16, 0xe49b69c1); - RNDr(S, W, 17, 0xefbe4786); - RNDr(S, W, 18, 0x0fc19dc6); - RNDr(S, W, 19, 0x240ca1cc); - RNDr(S, W, 20, 0x2de92c6f); - RNDr(S, W, 21, 0x4a7484aa); - RNDr(S, W, 22, 0x5cb0a9dc); - RNDr(S, W, 23, 0x76f988da); - RNDr(S, W, 24, 0x983e5152); - RNDr(S, W, 25, 0xa831c66d); - RNDr(S, W, 26, 0xb00327c8); - RNDr(S, W, 27, 0xbf597fc7); - RNDr(S, W, 28, 0xc6e00bf3); - RNDr(S, W, 29, 0xd5a79147); - RNDr(S, W, 30, 0x06ca6351); - RNDr(S, W, 31, 0x14292967); - RNDr(S, W, 32, 0x27b70a85); - RNDr(S, W, 33, 0x2e1b2138); - RNDr(S, W, 34, 0x4d2c6dfc); - RNDr(S, W, 35, 0x53380d13); - RNDr(S, W, 36, 0x650a7354); - RNDr(S, W, 37, 0x766a0abb); - RNDr(S, W, 38, 0x81c2c92e); - RNDr(S, W, 39, 0x92722c85); - RNDr(S, W, 40, 0xa2bfe8a1); - RNDr(S, W, 41, 0xa81a664b); - RNDr(S, W, 42, 0xc24b8b70); - RNDr(S, W, 43, 0xc76c51a3); - RNDr(S, W, 44, 0xd192e819); - RNDr(S, W, 45, 0xd6990624); - RNDr(S, W, 46, 0xf40e3585); - RNDr(S, W, 47, 0x106aa070); - RNDr(S, W, 48, 0x19a4c116); - RNDr(S, W, 49, 0x1e376c08); - RNDr(S, W, 50, 0x2748774c); - RNDr(S, W, 51, 0x34b0bcb5); - RNDr(S, W, 52, 0x391c0cb3); - RNDr(S, W, 53, 0x4ed8aa4a); - RNDr(S, W, 54, 0x5b9cca4f); - RNDr(S, W, 55, 0x682e6ff3); - RNDr(S, W, 56, 0x748f82ee); - RNDr(S, W, 57, 0x78a5636f); - RNDr(S, W, 58, 0x84c87814); - RNDr(S, W, 59, 0x8cc70208); - RNDr(S, W, 60, 0x90befffa); - RNDr(S, W, 61, 0xa4506ceb); - RNDr(S, W, 62, 0xbef9a3f7); - RNDr(S, W, 63, 0xc67178f2); - - /* 4. Mix local working variables into global state */ - for (i = 0; i < 8; i++) - state[i] += S[i]; -} - -static unsigned char PAD[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -/* Add padding and terminating bit-count. */ -static void -SHA256_Pad(SHA256_CTX * ctx) -{ - unsigned char len[8]; - uint32_t r, plen; - - /* - * Convert length to a vector of bytes -- we do this now rather - * than later because the length will change after we pad. - */ - be32enc_vect(len, ctx->count, 8); - - /* Add 1--64 bytes so that the resulting length is 56 mod 64 */ - r = (ctx->count[1] >> 3) & 0x3f; - plen = (r < 56) ? (56 - r) : (120 - r); - libscrypt_SHA256_Update(ctx, PAD, (size_t)plen); - - /* Add the terminating bit-count */ - libscrypt_SHA256_Update(ctx, len, 8); -} - -/* SHA-256 initialization. Begins a SHA-256 operation. */ -void -libscrypt_SHA256_Init(SHA256_CTX * ctx) -{ - - /* Zero bits processed so far */ - ctx->count[0] = ctx->count[1] = 0; - - /* Magic initialization constants */ - ctx->state[0] = 0x6A09E667; - ctx->state[1] = 0xBB67AE85; - ctx->state[2] = 0x3C6EF372; - ctx->state[3] = 0xA54FF53A; - ctx->state[4] = 0x510E527F; - ctx->state[5] = 0x9B05688C; - ctx->state[6] = 0x1F83D9AB; - ctx->state[7] = 0x5BE0CD19; -} - -/* Add bytes into the hash */ -void -libscrypt_SHA256_Update(SHA256_CTX * ctx, const void *in, size_t len) -{ - uint32_t bitlen[2]; - uint32_t r; - const unsigned char *src = in; - - /* Number of bytes left in the buffer from previous updates */ - r = (ctx->count[1] >> 3) & 0x3f; - - /* Convert the length into a number of bits */ - bitlen[1] = ((uint32_t)len) << 3; - bitlen[0] = (uint32_t)(len >> 29); - - /* Update number of bits */ - if ((ctx->count[1] += bitlen[1]) < bitlen[1]) - ctx->count[0]++; - ctx->count[0] += bitlen[0]; - - /* Handle the case where we don't need to perform any transforms */ - if (len < 64 - r) { - memcpy(&ctx->buf[r], src, len); - return; - } - - /* Finish the current block */ - memcpy(&ctx->buf[r], src, 64 - r); - SHA256_Transform(ctx->state, ctx->buf); - src += 64 - r; - len -= 64 - r; - - /* Perform complete blocks */ - while (len >= 64) { - SHA256_Transform(ctx->state, src); - src += 64; - len -= 64; - } - - /* Copy left over data into buffer */ - memcpy(ctx->buf, src, len); -} - -/* - * SHA-256 finalization. Pads the input data, exports the hash value, - * and clears the context state. - */ -void -libscrypt_SHA256_Final(unsigned char digest[32], SHA256_CTX * ctx) -{ - - /* Add padding */ - SHA256_Pad(ctx); - - /* Write the hash */ - be32enc_vect(digest, ctx->state, 32); - - /* Clear the context state */ - memset((void *)ctx, 0, sizeof(*ctx)); -} - -/* Initialize an HMAC-SHA256 operation with the given key. */ -void -libscrypt_HMAC_SHA256_Init(HMAC_SHA256_CTX * ctx, const void * _K, size_t Klen) -{ - unsigned char pad[64]; - unsigned char khash[32]; - const unsigned char * K = _K; - size_t i; - - /* If Klen > 64, the key is really SHA256(K). */ - if (Klen > 64) { - libscrypt_SHA256_Init(&ctx->ictx); - libscrypt_SHA256_Update(&ctx->ictx, K, Klen); - libscrypt_SHA256_Final(khash, &ctx->ictx); - K = khash; - Klen = 32; - } - - /* Inner SHA256 operation is SHA256(K xor [block of 0x36] || data). */ - libscrypt_SHA256_Init(&ctx->ictx); - memset(pad, 0x36, 64); - for (i = 0; i < Klen; i++) - pad[i] ^= K[i]; - libscrypt_SHA256_Update(&ctx->ictx, pad, 64); - - /* Outer SHA256 operation is SHA256(K xor [block of 0x5c] || hash). */ - libscrypt_SHA256_Init(&ctx->octx); - memset(pad, 0x5c, 64); - for (i = 0; i < Klen; i++) - pad[i] ^= K[i]; - libscrypt_SHA256_Update(&ctx->octx, pad, 64); -} - -/* Add bytes to the HMAC-SHA256 operation. */ -void -libscrypt_HMAC_SHA256_Update(HMAC_SHA256_CTX * ctx, const void *in, size_t len) -{ - - /* Feed data to the inner SHA256 operation. */ - libscrypt_SHA256_Update(&ctx->ictx, in, len); -} - -/* Finish an HMAC-SHA256 operation. */ -void -libscrypt_HMAC_SHA256_Final(unsigned char digest[32], HMAC_SHA256_CTX * ctx) -{ - unsigned char ihash[32]; - - /* Finish the inner SHA256 operation. */ - libscrypt_SHA256_Final(ihash, &ctx->ictx); - - /* Feed the inner hash to the outer SHA256 operation. */ - libscrypt_SHA256_Update(&ctx->octx, ihash, 32); - - /* Finish the outer SHA256 operation. */ - libscrypt_SHA256_Final(digest, &ctx->octx); -} - -/** - * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen): - * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and - * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). - */ -void -libscrypt_PBKDF2_SHA256(const uint8_t * passwd, size_t passwdlen, const uint8_t * salt, - size_t saltlen, uint64_t c, uint8_t * buf, size_t dkLen) -{ - HMAC_SHA256_CTX PShctx, hctx; - size_t i; - uint8_t ivec[4]; - uint8_t U[32]; - uint8_t T[32]; - uint64_t j; - int k; - size_t clen; - - /* Compute HMAC state after processing P and S. */ - libscrypt_HMAC_SHA256_Init(&PShctx, passwd, passwdlen); - libscrypt_HMAC_SHA256_Update(&PShctx, salt, saltlen); - - /* Iterate through the blocks. */ - for (i = 0; i * 32 < dkLen; i++) { - /* Generate INT(i + 1). */ - be32enc(ivec, (uint32_t)(i + 1)); - - /* Compute U_1 = PRF(P, S || INT(i)). */ - memcpy(&hctx, &PShctx, sizeof(HMAC_SHA256_CTX)); - libscrypt_HMAC_SHA256_Update(&hctx, ivec, 4); - libscrypt_HMAC_SHA256_Final(U, &hctx); - - /* T_i = U_1 ... */ - memcpy(T, U, 32); - - for (j = 2; j <= c; j++) { - /* Compute U_j. */ - libscrypt_HMAC_SHA256_Init(&hctx, passwd, passwdlen); - libscrypt_HMAC_SHA256_Update(&hctx, U, 32); - libscrypt_HMAC_SHA256_Final(U, &hctx); - - /* ... xor U_j ... */ - for (k = 0; k < 32; k++) - T[k] ^= U[k]; - } - - /* Copy as many bytes as necessary into buf. */ - clen = dkLen - i * 32; - if (clen > 32) - clen = 32; - memcpy(&buf[i * 32], T, clen); - } -} diff --git a/pkg/urcrypt/scrypt/sha256.h b/pkg/urcrypt/scrypt/sha256.h deleted file mode 100644 index f7138b417..000000000 --- a/pkg/urcrypt/scrypt/sha256.h +++ /dev/null @@ -1,70 +0,0 @@ -/*- - * Copyright 2005,2007,2009 Colin Percival - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD: src/lib/libmd/sha256.h,v 1.2 2006/01/17 15:35:56 phk Exp $ - */ - -#ifndef _SHA256_H_ -#define _SHA256_H_ - -#include - -#include - -typedef struct libscrypt_SHA256Context { - uint32_t state[8]; - uint32_t count[2]; - unsigned char buf[64]; -} SHA256_CTX; - -typedef struct libscrypt_HMAC_SHA256Context { - SHA256_CTX ictx; - SHA256_CTX octx; -} HMAC_SHA256_CTX; - -void libscrypt_SHA256_Init(/*@out@*/ SHA256_CTX *); -void libscrypt_SHA256_Update(SHA256_CTX *, const void *, size_t); - -/* Original declaration: - * void SHA256_Final(unsigned char [32], SHA256_CTX *); -*/ -void libscrypt_SHA256_Final(/*@out@*/ unsigned char [], SHA256_CTX *); -void libscrypt_HMAC_SHA256_Init(HMAC_SHA256_CTX *, const void *, size_t); -void libscrypt_HMAC_SHA256_Update(HMAC_SHA256_CTX *, const void *, size_t); - -/* Original declaration: - * void HMAC_SHA256_Final(unsigned char [32], HMAC_SHA256_CTX *); -*/ -void libscrypt_HMAC_SHA256_Final(unsigned char [], HMAC_SHA256_CTX *); - -/** - * PBKDF2_SHA256(passwd, passwdlen, salt, saltlen, c, buf, dkLen): - * Compute PBKDF2(passwd, salt, c, dkLen) using HMAC-SHA256 as the PRF, and - * write the output to buf. The value dkLen must be at most 32 * (2^32 - 1). - */ -void libscrypt_PBKDF2_SHA256(const uint8_t *, size_t, const uint8_t *, size_t, - uint64_t, uint8_t *, size_t); - -#endif /* !_SHA256_H_ */ diff --git a/pkg/urcrypt/scrypt/slowequals.c b/pkg/urcrypt/scrypt/slowequals.c deleted file mode 100644 index 48e488e4e..000000000 --- a/pkg/urcrypt/scrypt/slowequals.c +++ /dev/null @@ -1,26 +0,0 @@ -#include - -/* Implements a constant time version of strcmp() - * Will return 1 if a and b are equal, 0 if they are not */ -int slow_equals(const char* a, const char* b) -{ - size_t lena, lenb, diff, i; - lena = strlen(a); - lenb = strlen(b); - diff = strlen(a) ^ strlen(b); - - for(i=0; i we have isn't usable. */ -#if !HAVE_DECL_BE64ENC -#undef HAVE_SYS_ENDIAN_H -#endif - -#ifdef HAVE_SYS_ENDIAN_H - -#include - -#else - -#include -#ifdef _MSC_VER - #define INLINE __inline -#else - #define INLINE inline -#endif - -static INLINE uint32_t -be32dec(const void *pp) -{ - const uint8_t *p = (uint8_t const *)pp; - - return ((uint32_t)(p[3]) + ((uint32_t)(p[2]) << 8) + - ((uint32_t)(p[1]) << 16) + ((uint32_t)(p[0]) << 24)); -} - -static INLINE void -be32enc(void *pp, uint32_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[3] = x & 0xff; - p[2] = (x >> 8) & 0xff; - p[1] = (x >> 16) & 0xff; - p[0] = (x >> 24) & 0xff; -} - -static INLINE uint64_t -be64dec(const void *pp) -{ - const uint8_t *p = (uint8_t const *)pp; - - return ((uint64_t)(p[7]) + ((uint64_t)(p[6]) << 8) + - ((uint64_t)(p[5]) << 16) + ((uint64_t)(p[4]) << 24) + - ((uint64_t)(p[3]) << 32) + ((uint64_t)(p[2]) << 40) + - ((uint64_t)(p[1]) << 48) + ((uint64_t)(p[0]) << 56)); -} - -static INLINE void -be64enc(void *pp, uint64_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[7] = x & 0xff; - p[6] = (x >> 8) & 0xff; - p[5] = (x >> 16) & 0xff; - p[4] = (x >> 24) & 0xff; - p[3] = (x >> 32) & 0xff; - p[2] = (x >> 40) & 0xff; - p[1] = (x >> 48) & 0xff; - p[0] = (x >> 56) & 0xff; -} - -static INLINE uint32_t -le32dec(const void *pp) -{ - const uint8_t *p = (uint8_t const *)pp; - - return ((uint32_t)(p[0]) + ((uint32_t)(p[1]) << 8) + - ((uint32_t)(p[2]) << 16) + ((uint32_t)(p[3]) << 24)); -} - -static INLINE void -le32enc(void *pp, uint32_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[0] = x & 0xff; - p[1] = (x >> 8) & 0xff; - p[2] = (x >> 16) & 0xff; - p[3] = (x >> 24) & 0xff; -} - -static INLINE uint64_t -le64dec(const void *pp) -{ - const uint8_t *p = (uint8_t const *)pp; - - return ((uint64_t)(p[0]) + ((uint64_t)(p[1]) << 8) + - ((uint64_t)(p[2]) << 16) + ((uint64_t)(p[3]) << 24) + - ((uint64_t)(p[4]) << 32) + ((uint64_t)(p[5]) << 40) + - ((uint64_t)(p[6]) << 48) + ((uint64_t)(p[7]) << 56)); -} - -static INLINE void -le64enc(void *pp, uint64_t x) -{ - uint8_t * p = (uint8_t *)pp; - - p[0] = x & 0xff; - p[1] = (x >> 8) & 0xff; - p[2] = (x >> 16) & 0xff; - p[3] = (x >> 24) & 0xff; - p[4] = (x >> 32) & 0xff; - p[5] = (x >> 40) & 0xff; - p[6] = (x >> 48) & 0xff; - p[7] = (x >> 56) & 0xff; -} -#endif /* !HAVE_SYS_ENDIAN_H */ - -#endif /* !_SYSENDIAN_H_ */ diff --git a/pkg/urcrypt/shell.nix b/pkg/urcrypt/shell.nix deleted file mode 100644 index 4119b7f11..000000000 --- a/pkg/urcrypt/shell.nix +++ /dev/null @@ -1,8 +0,0 @@ -let - - pkgs = import ../../default.nix { }; - -in pkgs.shellFor { - name = "urcrypt"; - packages = ps: [ ps.urcrypt ]; -} diff --git a/pkg/urcrypt/urcrypt/aes_cbc.c b/pkg/urcrypt/urcrypt/aes_cbc.c deleted file mode 100644 index f163bccd8..000000000 --- a/pkg/urcrypt/urcrypt/aes_cbc.c +++ /dev/null @@ -1,181 +0,0 @@ -#include "urcrypt.h" -#include "util.h" -#include -#include - -static int -urcrypt__cbc_pad(uint8_t **message_ptr, - size_t *length_ptr, - urcrypt_realloc_t realloc_ptr) -{ - size_t length = *length_ptr, - remain = length % 16; - - if ( 0 == remain ) { - // no padding needed - return 0; - } - else { - size_t padding = 16 - remain, - padded = length + padding; - - if ( padded < length ) { - // size_t overflow - return -1; - } - else { - uint8_t *out = (*realloc_ptr)(*message_ptr, padded); - if ( NULL == out ) { - return -2; - } - else { - memset(out + length, 0, padding); - *message_ptr = out; - *length_ptr = padded; - return 0; - } - } - } -} - -static int -urcrypt__cbc_help(uint8_t **message_ptr, - size_t *length_ptr, - const AES_KEY *key, - uint8_t ivec[16], - const int enc, - urcrypt_realloc_t realloc_ptr) -{ - if ( 0 != urcrypt__cbc_pad(message_ptr, length_ptr, realloc_ptr) ) { - return -1; - } - else { - uint8_t *out = *message_ptr; - size_t length = *length_ptr; - urcrypt__reverse(16, ivec); - urcrypt__reverse(length, out); - AES_cbc_encrypt(out, out, length, key, ivec, enc); - urcrypt__reverse(length, out); - return 0; - } -} - -int -urcrypt_aes_cbca_en(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[16], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr) -{ - AES_KEY aes_key; - - urcrypt__reverse(16, key); - - if ( 0 != AES_set_encrypt_key(key, 128, &aes_key) ) { - return -1; - } - else { - return urcrypt__cbc_help(message_ptr, length_ptr, - &aes_key, ivec, AES_ENCRYPT, realloc_ptr); - } -} - -int -urcrypt_aes_cbca_de(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[16], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr) -{ - AES_KEY aes_key; - - urcrypt__reverse(16, key); - - if ( 0 != AES_set_decrypt_key(key, 128, &aes_key) ) { - return -1; - } - else { - return urcrypt__cbc_help(message_ptr, length_ptr, - &aes_key, ivec, AES_DECRYPT, realloc_ptr); - } -} - -int -urcrypt_aes_cbcb_en(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[24], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr) -{ - AES_KEY aes_key; - - urcrypt__reverse(24, key); - - if ( 0 != AES_set_encrypt_key(key, 192, &aes_key) ) { - return -1; - } - else { - return urcrypt__cbc_help(message_ptr, length_ptr, - &aes_key, ivec, AES_ENCRYPT, realloc_ptr); - } -} - -int -urcrypt_aes_cbcb_de(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[24], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr) -{ - AES_KEY aes_key; - - urcrypt__reverse(24, key); - - if ( 0 != AES_set_decrypt_key(key, 192, &aes_key) ) { - return -1; - } - else { - return urcrypt__cbc_help(message_ptr, length_ptr, - &aes_key, ivec, AES_DECRYPT, realloc_ptr); - } -} - -int -urcrypt_aes_cbcc_en(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[32], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr) -{ - AES_KEY aes_key; - - urcrypt__reverse(32, key); - - if ( 0 != AES_set_encrypt_key(key, 256, &aes_key) ) { - return -1; - } - else { - return urcrypt__cbc_help(message_ptr, length_ptr, - &aes_key, ivec, AES_ENCRYPT, realloc_ptr); - } -} - -int -urcrypt_aes_cbcc_de(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[32], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr) -{ - AES_KEY aes_key; - - urcrypt__reverse(32, key); - - if ( 0 != AES_set_decrypt_key(key, 256, &aes_key) ) { - return -1; - } - else { - return urcrypt__cbc_help(message_ptr, length_ptr, - &aes_key, ivec, AES_DECRYPT, realloc_ptr); - } -} diff --git a/pkg/urcrypt/urcrypt/aes_ecb.c b/pkg/urcrypt/urcrypt/aes_ecb.c deleted file mode 100644 index 9b3910012..000000000 --- a/pkg/urcrypt/urcrypt/aes_ecb.c +++ /dev/null @@ -1,111 +0,0 @@ -#include "urcrypt.h" -#include "util.h" -#include - -int -urcrypt_aes_ecba_en(uint8_t key[16], uint8_t block[16], uint8_t out[16]) -{ - AES_KEY aes_key; - - urcrypt__reverse(16, key); - urcrypt__reverse(16, block); - - if ( 0 != AES_set_encrypt_key(key, 128, &aes_key) ) { - return -1; - } - else { - AES_ecb_encrypt(block, out, &aes_key, AES_ENCRYPT); - urcrypt__reverse(16, out); - return 0; - } -} - -int -urcrypt_aes_ecba_de(uint8_t key[16], uint8_t block[16], uint8_t out[16]) -{ - AES_KEY aes_key; - - urcrypt__reverse(16, key); - urcrypt__reverse(16, block); - - if ( 0 != AES_set_decrypt_key(key, 128, &aes_key) ) { - return -1; - } - else { - AES_ecb_encrypt(block, out, &aes_key, AES_DECRYPT); - urcrypt__reverse(16, out); - return 0; - } -} - -int -urcrypt_aes_ecbb_en(uint8_t key[24], uint8_t block[16], uint8_t out[16]) -{ - AES_KEY aes_key; - - urcrypt__reverse(24, key); - urcrypt__reverse(16, block); - - if ( 0 != AES_set_encrypt_key(key, 192, &aes_key) ) { - return -1; - } - else { - AES_ecb_encrypt(block, out, &aes_key, AES_ENCRYPT); - urcrypt__reverse(16, out); - return 0; - } -} - -int -urcrypt_aes_ecbb_de(uint8_t key[24], uint8_t block[16], uint8_t out[16]) -{ - AES_KEY aes_key; - - urcrypt__reverse(24, key); - urcrypt__reverse(16, block); - - if ( 0 != AES_set_decrypt_key(key, 192, &aes_key) ) { - return -1; - } - else { - AES_ecb_encrypt(block, out, &aes_key, AES_DECRYPT); - urcrypt__reverse(16, out); - return 0; - } -} - -int -urcrypt_aes_ecbc_en(uint8_t key[32], uint8_t block[16], uint8_t out[16]) -{ - AES_KEY aes_key; - - urcrypt__reverse(32, key); - urcrypt__reverse(16, block); - - if ( 0 != AES_set_encrypt_key(key, 256, &aes_key) ) { - return -1; - } - else { - AES_ecb_encrypt(block, out, &aes_key, AES_ENCRYPT); - urcrypt__reverse(16, out); - return 0; - } -} - -int -urcrypt_aes_ecbc_de(uint8_t key[32], uint8_t block[16], uint8_t out[16]) -{ - AES_KEY aes_key; - - urcrypt__reverse(32, key); - urcrypt__reverse(16, block); - - if ( 0 != AES_set_decrypt_key(key, 256, &aes_key) ) { - return -1; - } - else { - AES_ecb_encrypt(block, out, &aes_key, AES_DECRYPT); - urcrypt__reverse(16, out); - return 0; - } -} diff --git a/pkg/urcrypt/urcrypt/aes_siv.c b/pkg/urcrypt/urcrypt/aes_siv.c deleted file mode 100644 index 3e3528b46..000000000 --- a/pkg/urcrypt/urcrypt/aes_siv.c +++ /dev/null @@ -1,181 +0,0 @@ -#include "urcrypt.h" -#include "util.h" -#include - -static AES_SIV_CTX* -urcrypt__aes_siv_init(uint8_t *key, - size_t key_length, - urcrypt_aes_siv_data *data, - size_t data_length) -{ - AES_SIV_CTX *ctx = AES_SIV_CTX_new(); - if ( NULL == ctx ) { - return NULL; - } - else { - urcrypt__reverse(key_length, key); - if ( 0 == AES_SIV_Init(ctx, key, key_length) ) { - AES_SIV_CTX_free(ctx); - return NULL; - } - else { - size_t i, len; - uint8_t *dat; - - for ( i = 0; i < data_length; ++i ) { - len = data[i].length; - dat = data[i].bytes; - urcrypt__reverse(len, dat); - if ( 0 == AES_SIV_AssociateData(ctx, dat, len) ) { - AES_SIV_CTX_free(ctx); - return NULL; - } - } - - return ctx; - } - } -} - -static int -urcrypt__aes_siv_en(uint8_t *key, - size_t key_length, - uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t iv[16], - uint8_t *out) -{ - AES_SIV_CTX *ctx = urcrypt__aes_siv_init(key, key_length, data, data_length); - - if ( NULL == ctx ) { - return -1; - } - else { - int ret; - urcrypt__reverse(message_length, message); - ret = AES_SIV_EncryptFinal(ctx, iv, out, message, message_length); - AES_SIV_CTX_free(ctx); - - if ( 0 == ret ) { - return -2; - } - else { - urcrypt__reverse(16, iv); - urcrypt__reverse(message_length, out); - return 0; - } - } -} - -static int -urcrypt__aes_siv_de(uint8_t *key, - size_t key_length, - uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t iv[16], - uint8_t *out) -{ - AES_SIV_CTX *ctx = urcrypt__aes_siv_init(key, key_length, data, data_length); - - if ( NULL == ctx ) { - return -1; - } - else { - int ret; - - urcrypt__reverse(message_length, message); - urcrypt__reverse(16, iv); - ret = AES_SIV_DecryptFinal(ctx, out, iv, message, message_length); - AES_SIV_CTX_free(ctx); - - if ( 0 == ret ) { - return -2; - } - else { - urcrypt__reverse(message_length, out); - return 0; - } - } -} - -int -urcrypt_aes_siva_en(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[32], - uint8_t iv[16], - uint8_t *out) -{ - return urcrypt__aes_siv_en(key, 32, - message, message_length, data, data_length, iv, out); -} - -int -urcrypt_aes_siva_de(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[32], - uint8_t iv[16], - uint8_t *out) -{ - return urcrypt__aes_siv_de(key, 32, - message, message_length, data, data_length, iv, out); -} - -int -urcrypt_aes_sivb_en(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[48], - uint8_t iv[16], - uint8_t *out) -{ - return urcrypt__aes_siv_en(key, 48, - message, message_length, data, data_length, iv, out); -} - -int -urcrypt_aes_sivb_de(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[48], - uint8_t iv[16], - uint8_t *out) -{ - return urcrypt__aes_siv_de(key, 48, - message, message_length, data, data_length, iv, out); -} - -int -urcrypt_aes_sivc_en(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[64], - uint8_t iv[16], - uint8_t *out) -{ - return urcrypt__aes_siv_en(key, 64, - message, message_length, data, data_length, iv, out); -} - -int -urcrypt_aes_sivc_de(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[64], - uint8_t iv[16], - uint8_t *out) -{ - return urcrypt__aes_siv_de(key, 64, - message, message_length, data, data_length, iv, out); -} diff --git a/pkg/urcrypt/urcrypt/argon.c b/pkg/urcrypt/urcrypt/argon.c deleted file mode 100644 index e1090ddde..000000000 --- a/pkg/urcrypt/urcrypt/argon.c +++ /dev/null @@ -1,120 +0,0 @@ -#include "urcrypt.h" -#include "util.h" -#include -#include - -// library convention is to have sizes in size_t, but argon2 wants them -// in uint32_t, so here's a helper macro for ensuring equivalence. -#define SZ_32(s) ( sizeof(size_t) <= sizeof(uint32_t) || s <= 0xFFFFFFFF ) - -const char* -urcrypt_argon2(uint8_t type, - uint32_t version, - uint32_t threads, - uint32_t memory_cost, - uint32_t time_cost, - size_t secret_length, - uint8_t *secret, - size_t associated_length, - uint8_t *associated, - size_t password_length, - uint8_t *password, - size_t salt_length, - uint8_t *salt, - size_t out_length, - uint8_t *out, - urcrypt_argon2_alloc_t alloc_ptr, - urcrypt_argon2_free_t free_ptr) -{ - if ( !( SZ_32(secret_length) && - SZ_32(associated_length) && - SZ_32(password_length) && - SZ_32(salt_length) && - SZ_32(out_length) ) ) { - return "length > 32 bits"; - } - else { - int (*f)(argon2_context*); - int result; - - switch ( type ) { - default: - return "unknown type"; - case urcrypt_argon2_d: - f = &argon2d_ctx; - break; - case urcrypt_argon2_i: - f = &argon2i_ctx; - break; - case urcrypt_argon2_id: - f = &argon2id_ctx; - break; - case urcrypt_argon2_u: - f = &argon2u_ctx; - break; - } - - urcrypt__reverse(secret_length, secret); - urcrypt__reverse(associated_length, associated); - urcrypt__reverse(password_length, password); - urcrypt__reverse(salt_length, salt); - - argon2_context context = { - out, // output array, at least [digest length] in size - out_length, // digest length - password, // password array - password_length, // password length - salt, // salt array - salt_length, // salt length - secret, // optional secret data - secret_length, - associated, // optional associated data - associated_length, - time_cost, // performance cost configuration - memory_cost, - threads, - threads, - version, // algorithm version - alloc_ptr, // custom memory allocation function - free_ptr, // custom memory deallocation function - ARGON2_DEFAULT_FLAGS // by default only internal memory is cleared - }; - - result = (*f)(&context); - - if ( ARGON2_OK != result ) { - return argon2_error_message(result); - } - else { - urcrypt__reverse(out_length, out); - return NULL; - } - } -} - -int -urcrypt_blake2(size_t message_length, - uint8_t *message, - size_t key_length, - uint8_t key[64], - size_t out_length, - uint8_t *out) -{ - if ( key_length > 64 ) { - return -1; - } - else { - urcrypt__reverse(message_length, message); - urcrypt__reverse(key_length, key); - - if ( 0 != blake2b(out, out_length, - message, message_length, - key, key_length)) { - return -1; - } - else { - urcrypt__reverse(out_length, out); - return 0; - } - } -} diff --git a/pkg/urcrypt/urcrypt/ed25519.c b/pkg/urcrypt/urcrypt/ed25519.c deleted file mode 100644 index eb25f0b75..000000000 --- a/pkg/urcrypt/urcrypt/ed25519.c +++ /dev/null @@ -1,53 +0,0 @@ -#include "urcrypt.h" -#include -#include - -void -urcrypt_ed_puck(const uint8_t seed[32], - uint8_t out[32]) -{ - uint8_t secret[64]; - ed25519_create_keypair(out, secret, seed); -} - -void -urcrypt_ed_shar(const uint8_t public[32], - const uint8_t seed[32], - uint8_t out[32]) -{ - uint8_t self[32], exp[64]; - - memset(self, 0, 32); - memset(exp, 0, 64); - memset(out, 0, 32); - - ed25519_create_keypair(self, exp, seed); - ed25519_key_exchange(out, public, exp); -} - -void -urcrypt_ed_sign(const uint8_t *message, - size_t length, - const uint8_t seed[32], - uint8_t out[64]) -{ - uint8_t public[64], secret[64]; - - memset(public, 0, 64); - memset(secret, 0, 64); - memset(out, 0, 64); - - ed25519_create_keypair(public, secret, seed); - ed25519_sign(out, message, length, public, secret); -} - -bool -urcrypt_ed_veri(const uint8_t *message, - size_t length, - const uint8_t public[32], - const uint8_t signature[64]) -{ - return ( ed25519_verify(signature, message, length, public) == 1 ) - ? true - : false; -} diff --git a/pkg/urcrypt/urcrypt/ge_additions.c b/pkg/urcrypt/urcrypt/ge_additions.c deleted file mode 100644 index f894fc8ad..000000000 --- a/pkg/urcrypt/urcrypt/ge_additions.c +++ /dev/null @@ -1,126 +0,0 @@ -#include "urcrypt.h" -#include - -int -urcrypt_ed_point_add(const uint8_t a[32], - const uint8_t b[32], - uint8_t out[32]) -{ - ge_p3 A, B; - ge_cached b_cached; - ge_p1p1 sum; - ge_p3 result; - - if ( ge_frombytes_negate_vartime(&A, a) != 0 ) { - return -1; - } - - if ( ge_frombytes_negate_vartime(&B, b) != 0 ) { - return -1; - } - - // Undo the negation from above. See add_scalar.c in the ed25519 distro. - fe_neg(A.X, A.X); - fe_neg(A.T, A.T); - fe_neg(B.X, B.X); - fe_neg(B.T, B.T); - - ge_p3_to_cached(&b_cached, &B); - ge_add(&sum, &A, &b_cached); - ge_p1p1_to_p3(&result, &sum); - - ge_p3_tobytes(out, &result); - - return 0; -} - -int -urcrypt_ed_scalarmult(const uint8_t a[32], - const uint8_t b[32], - uint8_t out[32]) -{ - ge_p3 B, result; - - if ( ge_frombytes_negate_vartime(&B, b) != 0 ) { - return -1; - } - - // Undo the negation from above. See add_scalar.c in the ed25519 distro. - fe_neg(B.X, B.X); - fe_neg(B.T, B.T); - - ge_scalarmult(&result, a, &B); - ge_p3_tobytes(out, &result); - return 0; -} - -void -urcrypt_ed_scalarmult_base(const uint8_t a[32], - uint8_t out[32]) -{ - ge_p3 R; - ge_scalarmult_base(&R, a); - ge_p3_tobytes(out, &R); -} - -int -urcrypt_ed_add_scalarmult_scalarmult_base(const uint8_t a[32], - const uint8_t a_point[32], - const uint8_t b[32], - uint8_t out[32]) -{ - ge_p2 r; - ge_p3 A; - - if (ge_frombytes_negate_vartime(&A, a_point) != 0) { - return -1; - } - - // Undo the negation from above. See add_scalar.c in the ed25519 distro. - fe_neg(A.X, A.X); - fe_neg(A.T, A.T); - - ge_double_scalarmult_vartime(&r, a, &A, b); - ge_tobytes(out, &r); - - return 0; -} - -int -urcrypt_ed_add_double_scalarmult(const uint8_t a[32], - const uint8_t a_point[32], - const uint8_t b[32], - const uint8_t b_point[32], - uint8_t out[32]) -{ - ge_p3 A, B, a_result, b_result, final_result; - ge_cached b_result_cached; - ge_p1p1 sum; - - if ( ge_frombytes_negate_vartime(&A, a_point) != 0 ) { - return -1; - } - - if ( ge_frombytes_negate_vartime(&B, b_point) != 0 ) { - return -1; - } - - // Undo the negation from above. See add_scalar.c in the ed25519 distro. - fe_neg(A.X, A.X); - fe_neg(A.T, A.T); - fe_neg(B.X, B.X); - fe_neg(B.T, B.T); - - // Perform the multiplications of a*A and b*B - ge_scalarmult(&a_result, a, &A); - ge_scalarmult(&b_result, b, &B); - - // Sum those two points - ge_p3_to_cached(&b_result_cached, &b_result); - ge_add(&sum, &a_result, &b_result_cached); - - ge_p1p1_to_p3(&final_result, &sum); - ge_p3_tobytes(out, &final_result); - - return 0; -} diff --git a/pkg/urcrypt/urcrypt/keccak.c b/pkg/urcrypt/urcrypt/keccak.c deleted file mode 100644 index 028b872fb..000000000 --- a/pkg/urcrypt/urcrypt/keccak.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "urcrypt.h" -#include "util.h" -#include - -#define defkec(bits,byts) \ - int urcrypt_keccak_##bits(const uint8_t *message, size_t length, \ - uint8_t out[byts]) \ - { \ - if ( 0 == keccak_##bits(out, byts, message, length) ) { \ - urcrypt__reverse(byts, out); \ - return 0; \ - } \ - else { \ - return -1; \ - }\ - } - -defkec(224, 28) -defkec(256, 32) -defkec(384, 48) -defkec(512, 64) diff --git a/pkg/urcrypt/urcrypt/ripemd.c b/pkg/urcrypt/urcrypt/ripemd.c deleted file mode 100644 index 787184090..000000000 --- a/pkg/urcrypt/urcrypt/ripemd.c +++ /dev/null @@ -1,20 +0,0 @@ -#include "urcrypt.h" -#include "util.h" -#include - -int -urcrypt_ripemd160(uint8_t *message, size_t length, uint8_t out[20]) -{ - unsigned long n = length; - - if ( length != n ) { - return -1; - } - else { - urcrypt__reverse(length, message); - RIPEMD160(message, n, out); - urcrypt__reverse(20, out); - return 0; - } -} - diff --git a/pkg/urcrypt/urcrypt/scrypt.c b/pkg/urcrypt/urcrypt/scrypt.c deleted file mode 100644 index 830eddc56..000000000 --- a/pkg/urcrypt/urcrypt/scrypt.c +++ /dev/null @@ -1,31 +0,0 @@ -#include "urcrypt.h" -#include -#include - -void -urcrypt_scrypt_pbkdf_sha256(const uint8_t *passwd, - size_t passwdlen, - const uint8_t *salt, - size_t saltlen, - uint64_t count, - size_t outlen, // must be at most 32*(2^32-1) - uint8_t *out) -{ - libscrypt_PBKDF2_SHA256( - passwd, passwdlen, salt, saltlen, count, out, outlen); -} - -int -urcrypt_scrypt(const uint8_t *passwd, - size_t passwdlen, - const uint8_t *salt, - size_t saltlen, - uint64_t n, - uint32_t r, - uint32_t p, - size_t outlen, - uint8_t *out) -{ - return libscrypt_scrypt( - passwd, passwdlen, salt, saltlen, n, r, p, out, outlen); -} diff --git a/pkg/urcrypt/urcrypt/secp256k1.c b/pkg/urcrypt/urcrypt/secp256k1.c deleted file mode 100644 index 8c599b6c3..000000000 --- a/pkg/urcrypt/urcrypt/secp256k1.c +++ /dev/null @@ -1,245 +0,0 @@ -#include "urcrypt.h" -#include "util.h" -#include -#include -#include -#include -#include -#include - -#define SECP_FLAGS SECP256K1_CONTEXT_VERIFY | SECP256K1_CONTEXT_SIGN - -struct urcrypt_secp_context_struct { - secp256k1_context* secp; - uint8_t prealloc[]; -}; - -size_t -urcrypt_secp_prealloc_size() -{ - return sizeof(urcrypt_secp_context) + - secp256k1_context_preallocated_size(SECP_FLAGS); -} - -int -urcrypt_secp_init(urcrypt_secp_context *context, - uint8_t entropy[32]) -{ - secp256k1_context* secp = - secp256k1_context_preallocated_create(context->prealloc, SECP_FLAGS); - if ( 1 == secp256k1_context_randomize(secp, entropy) ) { - context->secp = secp; - return 0; - } - else { - secp256k1_context_preallocated_destroy(secp); - return -1; - } -} - -void -urcrypt_secp_destroy(urcrypt_secp_context *context) -{ - secp256k1_context_preallocated_destroy(context->secp); -} - -int -urcrypt_secp_make(uint8_t hash[32], uint8_t key[32], uint8_t out[32]) -{ - urcrypt__reverse(32, hash); - urcrypt__reverse(32, key); - - if ( 1 != secp256k1_nonce_function_rfc6979( - out, // OUT: return arg for nonce - hash, // IN: message / hash */ - key, // IN: key32 - NULL, // IN: algorithm (NULL == ECDSA) - NULL, // IN: arbitrary data pointer (unused) - 0) ) { // IN: attempt number (0 == normal) - return -1; - } - else { - urcrypt__reverse(32, out); - return 0; - } -} - -int -urcrypt_secp_sign(urcrypt_secp_context* context, - uint8_t hash[32], - uint8_t key[32], - uint8_t* out_v, - uint8_t out_r[32], - uint8_t out_s[32]) -{ - secp256k1_ecdsa_recoverable_signature signature; - - urcrypt__reverse(32, hash); - urcrypt__reverse(32, key); - - /* sign - N.B. if we want the 'v' field we can't use default secp256k1_ecdsa_sign(), - but must use secp256k1_ecdsa_sign_recoverable() */ - if ( 1 != secp256k1_ecdsa_sign_recoverable( - context->secp, /* IN: context object */ - &signature, /* OUT: signature */ - hash, /* IN: 32 byte hash to be signed */ - key, /* IN: 32 byte secret key */ - NULL, /* IN: nonce-function ptr ; NULL = default */ - NULL) ) { /* IN: data for nonce function; not used */ - return -1; - } - else { - uint8_t sigbytes[64]; - int recid; - if ( 1 != secp256k1_ecdsa_recoverable_signature_serialize_compact( - context->secp, /* IN: context object */ - sigbytes, /* OUT: 64 byte sig (r,s) */ - &recid, /* OUT: v */ - &signature) ) { /* IN: 65 byte sig */ - return -2; - } - else { - /* read sigbytes into r and s - convert endianness while we're at it */ - uint8_t i, j; - for ( j = 31, i = 0; i < 32; ++i, --j) { - out_r[j] = sigbytes[i]; - } - for ( j = 31; i < 64; ++i, --j ) { - out_s[j] = sigbytes[i]; - } - *out_v = (uint8_t) recid; - return 0; - } - } -} - -int -urcrypt_secp_reco(urcrypt_secp_context* context, - uint8_t hash[32], - uint8_t key_v, - const uint8_t key_r[32], - const uint8_t key_s[32], - uint8_t out_x[32], - uint8_t out_y[32]) -{ - if ( (NULL == hash) || - (NULL == key_r) || - (NULL == key_s) ) { - return -1; - } - else if ( key_v > 3 ) { - return -2; - } - else { - secp256k1_ecdsa_recoverable_signature signature; - uint8_t private[64]; - uint8_t i, j; - // make big private key out of two smaller parts, reversing endianness - for ( j = 31, i = 0; i < 32; ++i, --j) { - private[i] = key_r[j]; - } - for ( j = 31; i < 64; ++i, --j ) { - private[i] = key_s[j]; - } - memset(&signature, 0, sizeof(secp256k1_ecdsa_recoverable_signature)); - if ( 1 != secp256k1_ecdsa_recoverable_signature_parse_compact( - context->secp, /* IN: context */ - &signature, /* OUT: sig */ - private, /* IN: r/s */ - key_v) ) { /* IN: v */ - return -3; - } - else { - secp256k1_pubkey public; - memset(&public, 0, sizeof(secp256k1_pubkey)); - urcrypt__reverse(32, hash); - if ( 1 != secp256k1_ecdsa_recover( - context->secp, /* IN: context */ - &public, /* OUT: pub key */ - &signature, /* IN: signature */ - hash) ) { /* IN: message hash */ - return -4; - } - else { - /* convert pub into serialized form that we can get x, y out of */ - uint8_t serialized[65]; - size_t outputlen = 65; - memset(serialized, 0, outputlen); - if ( 1 != secp256k1_ec_pubkey_serialize( - context->secp, /* IN: context */ - serialized, /* OUT: output */ - &outputlen, /* IN/OUT: outputlen */ - &public, /* IN: pubkey*/ - SECP256K1_EC_UNCOMPRESSED) ) { /* IN: flags */ - return -5; - } - else { - /* in file - subprojects/secp256k1/src/eckey_impl.h - func - secp256k1_eckey_pubkey_parse() - we can see - byte 0: signal bits (???) - bytes 1-32: x - bytes 33-64: y - - convert endianness while we're at it */ - for (j = 32, i = 0; i < 32; ++i, --j) { - out_x[i] = serialized[j]; - } - for (j = 64, i = 0; i < 32; ++i, --j) { - out_y[i] = serialized[j]; - } - return 0; - } - } - } - } -} - -int -urcrypt_secp_schnorr_sign(urcrypt_secp_context* context, - uint8_t key[32], - uint8_t msg[32], - uint8_t aux[32], - uint8_t out_sig[64]) -{ - secp256k1_keypair keypair; - - urcrypt__reverse(32, key); - urcrypt__reverse(32, msg); - urcrypt__reverse(32, aux); - - if ( 1 != secp256k1_keypair_create(context->secp, &keypair, key) ) { - return -1; - } - if ( 1 != secp256k1_schnorrsig_sign(context->secp, out_sig, msg, &keypair, aux) ) { - return -1; - } - - urcrypt__reverse(64, out_sig); - return 0; -} - -bool -urcrypt_secp_schnorr_veri(urcrypt_secp_context* context, - uint8_t sig[64], - uint8_t msg[32], - uint8_t pub[32]) -{ - secp256k1_xonly_pubkey pubkey; - - urcrypt__reverse(64, sig); - urcrypt__reverse(32, msg); - urcrypt__reverse(32, pub); - - if ( 1 != secp256k1_xonly_pubkey_parse(context->secp, &pubkey, pub) ) { - return false; - } - if ( 1 != secp256k1_schnorrsig_verify(context->secp, sig, msg, 32, &pubkey) ) { - return false; - } - return true; -} diff --git a/pkg/urcrypt/urcrypt/sha.c b/pkg/urcrypt/urcrypt/sha.c deleted file mode 100644 index 9cd318c5a..000000000 --- a/pkg/urcrypt/urcrypt/sha.c +++ /dev/null @@ -1,49 +0,0 @@ -#include "urcrypt.h" -#include "util.h" -#include - -void -urcrypt_sha1(uint8_t *message, size_t length, uint8_t out[20]) -{ - urcrypt__reverse(length, message); - SHA1(message, length, out); - urcrypt__reverse(20, out); -} - -void -urcrypt_shay(const uint8_t *message, size_t length, uint8_t out[32]) -{ - SHA256(message, length, out); -} - -void -urcrypt_shal(const uint8_t *message, size_t length, uint8_t out[64]) -{ - SHA512(message, length, out); -} - -void -urcrypt_shas(uint8_t *salt, size_t salt_length, - const uint8_t *message, size_t message_length, - uint8_t out[32]) -{ - size_t i; - uint8_t mid[32]; - - // docs don't say what happens if msg overlaps with out - urcrypt_shay(message, message_length, mid); - - if ( salt_length > 32 ) { - for ( i = 0; i < 32; i++ ) { - salt[i] ^= mid[i]; - } - urcrypt_shay(salt, salt_length, out); - } - else { - for ( i = 0; i < salt_length; i++ ) { - mid[i] ^= salt[i]; - } - urcrypt_shay(mid, 32, out); - } -} - diff --git a/pkg/urcrypt/urcrypt/urcrypt.h b/pkg/urcrypt/urcrypt/urcrypt.h deleted file mode 100644 index 682531b94..000000000 --- a/pkg/urcrypt/urcrypt/urcrypt.h +++ /dev/null @@ -1,246 +0,0 @@ -#ifndef URCRYPT_H -#define URCRYPT_H -#include -#include -#include -// const arguments are not written to, non-const arguments may be -// all arrays are in little-endian byte order. -// array sizes[64] are purely documentary - -// 0 on success, result in out -int urcrypt_ed_point_add(const uint8_t a[32], - const uint8_t b[32], - uint8_t out[32]); -int urcrypt_ed_scalarmult(const uint8_t a[32], - const uint8_t b[32], - uint8_t out[32]); -// void functions have no failure mode -void urcrypt_ed_scalarmult_base(const uint8_t a[32], - uint8_t out[32]); -int urcrypt_ed_add_scalarmult_scalarmult_base(const uint8_t a[32], - const uint8_t a_point[32], - const uint8_t b[32], - uint8_t out[32]); -int urcrypt_ed_add_double_scalarmult(const uint8_t a[32], - const uint8_t a_point[32], - const uint8_t b[32], - const uint8_t b_point[32], - uint8_t out[32]); - -void urcrypt_ed_puck(const uint8_t seed[32], - uint8_t out[32]); -void urcrypt_ed_shar(const uint8_t public[32], - const uint8_t seed[32], - uint8_t out[32]); -void urcrypt_ed_sign(const uint8_t *message, - size_t length, - const uint8_t seed[32], - uint8_t out[64]); -// return value means the signature was (not) verified -bool urcrypt_ed_veri(const uint8_t *message, - size_t length, - const uint8_t public[32], - const uint8_t signature[64]); - -int urcrypt_aes_ecba_en(uint8_t key[16], uint8_t block[16], uint8_t out[16]); -int urcrypt_aes_ecba_de(uint8_t key[16], uint8_t block[16], uint8_t out[16]); -int urcrypt_aes_ecbb_en(uint8_t key[24], uint8_t block[16], uint8_t out[16]); -int urcrypt_aes_ecbb_de(uint8_t key[24], uint8_t block[16], uint8_t out[16]); -int urcrypt_aes_ecbc_en(uint8_t key[32], uint8_t block[16], uint8_t out[16]); -int urcrypt_aes_ecbc_de(uint8_t key[32], uint8_t block[16], uint8_t out[16]); - -typedef void* (*urcrypt_realloc_t)(void*, size_t); - -// message and length are read/write so -// realloc_ptr can be used as realloc to pad message -int urcrypt_aes_cbca_en(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[16], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr); -int urcrypt_aes_cbca_de(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[16], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr); -int urcrypt_aes_cbcb_en(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[24], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr); -int urcrypt_aes_cbcb_de(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[24], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr); -int urcrypt_aes_cbcc_en(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[32], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr); -int urcrypt_aes_cbcc_de(uint8_t **message_ptr, - size_t *length_ptr, - uint8_t key[32], - uint8_t ivec[16], - urcrypt_realloc_t realloc_ptr); - -typedef struct { - size_t length; - uint8_t *bytes; -} urcrypt_aes_siv_data; - -int urcrypt_aes_siva_en(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[32], - uint8_t iv[16], - uint8_t *out); -int urcrypt_aes_siva_de(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[32], - uint8_t iv[16], - uint8_t *out); -int urcrypt_aes_sivb_en(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[48], - uint8_t iv[16], - uint8_t *out); -int urcrypt_aes_sivb_de(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[48], - uint8_t iv[16], - uint8_t *out); -int urcrypt_aes_sivc_en(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[64], - uint8_t iv[16], - uint8_t *out); -int urcrypt_aes_sivc_de(uint8_t *message, - size_t message_length, - urcrypt_aes_siv_data *data, - size_t data_length, - uint8_t key[64], - uint8_t iv[16], - uint8_t *out); - -int urcrypt_ripemd160(uint8_t *message, size_t length, uint8_t out[20]); - -void urcrypt_sha1(uint8_t *message, size_t length, uint8_t out[20]); -void urcrypt_shay(const uint8_t *message, size_t length, uint8_t out[32]); -void urcrypt_shal(const uint8_t *message, size_t length, uint8_t out[64]); -void urcrypt_shas(uint8_t *salt, size_t salt_length, - const uint8_t *message, size_t message_length, - uint8_t out[32]); - -typedef int (*urcrypt_argon2_alloc_t)(uint8_t**, size_t); -typedef void (*urcrypt_argon2_free_t)(uint8_t*, size_t); - -#define urcrypt_argon2_d 0 -#define urcrypt_argon2_i 1 -#define urcrypt_argon2_id 2 -#define urcrypt_argon2_u 10 - -/* returns a constant error message string or NULL for success */ -const char* urcrypt_argon2(uint8_t type, // one of the urcrpyt_argon2_* - uint32_t version, - uint32_t threads, - uint32_t memory_cost, - uint32_t time_cost, - size_t secret_length, - uint8_t *secret, - size_t associated_length, - uint8_t *associated, - size_t password_length, - uint8_t *password, - size_t salt_length, - uint8_t *salt, - size_t out_length, - uint8_t *out, - urcrypt_argon2_alloc_t alloc_ptr, - urcrypt_argon2_free_t free_ptr); - -int urcrypt_blake2(size_t message_length, - uint8_t *message, - size_t key_length, - uint8_t key[64], - size_t out_length, - uint8_t *out); - -/* there is some long-term context associated with the secp library - * (precomputed tables, etc), so secp functions require a context object - */ -typedef struct urcrypt_secp_context_struct urcrypt_secp_context; - -// size of opaque secp handle, malloc and pass to init -size_t urcrypt_secp_prealloc_size(void); -// call this once at per context with high quality entropy -int urcrypt_secp_init(urcrypt_secp_context *context, - uint8_t entropy[32]); -// call before freeing opaque secp handle -void urcrypt_secp_destroy(urcrypt_secp_context *context); - -int urcrypt_secp_make(uint8_t hash[32], uint8_t key[32], uint8_t out[32]); -int urcrypt_secp_sign(urcrypt_secp_context* context, - uint8_t hash[32], - uint8_t key[32], - uint8_t* out_v, - uint8_t out_r[32], - uint8_t out_s[32]); -int urcrypt_secp_reco(urcrypt_secp_context* context, - uint8_t hash[32], - uint8_t key_v, // 0, 1, 2, 3 - const uint8_t key_r[32], - const uint8_t key_s[32], - uint8_t out_x[32], - uint8_t out_y[32]); -int urcrypt_secp_schnorr_sign(urcrypt_secp_context* context, - uint8_t key[32], - uint8_t msg[32], - uint8_t aux[32], - uint8_t out_sig[64]); -// return value means signature was (not) verified -bool urcrypt_secp_schnorr_veri(urcrypt_secp_context* context, - uint8_t sig[64], - uint8_t msg[32], - uint8_t pub[32]); - -void urcrypt_scrypt_pbkdf_sha256(const uint8_t *passwd, - size_t passwdlen, - const uint8_t *salt, - size_t saltlen, - uint64_t count, - size_t outlen, // must be at most 32*(2^32-1) - uint8_t *out); - -int urcrypt_scrypt(const uint8_t *passwd, - size_t passwdlen, - const uint8_t *salt, - size_t saltlen, - uint64_t n, - uint32_t r, - uint32_t p, - size_t outlen, - uint8_t *out); - -int urcrypt_keccak_224(const uint8_t *message, - size_t length, - uint8_t out[28]); -int urcrypt_keccak_256(const uint8_t *message, - size_t length, - uint8_t out[32]); -int urcrypt_keccak_384(const uint8_t *message, - size_t length, - uint8_t out[48]); -int urcrypt_keccak_512(const uint8_t *message, - size_t length, - uint8_t out[64]); -#endif diff --git a/pkg/urcrypt/urcrypt/util.c b/pkg/urcrypt/urcrypt/util.c deleted file mode 100644 index 8caa51938..000000000 --- a/pkg/urcrypt/urcrypt/util.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "urcrypt.h" - -void -urcrypt__reverse(size_t size, uint8_t *ptr) { - if ( size > 0 ) { - size_t i, j; - uint8_t tmp; - for ( i = 0, j = size - 1; i < j; i++, j-- ) { - tmp = ptr[i]; - ptr[i] = ptr[j]; - ptr[j] = tmp; - } - } -} diff --git a/pkg/urcrypt/urcrypt/util.h b/pkg/urcrypt/urcrypt/util.h deleted file mode 100644 index 1c6202c6d..000000000 --- a/pkg/urcrypt/urcrypt/util.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef URCRYPT_UTIL_H -#define URCRYPT_UTIL_H - -void urcrypt__reverse(size_t size, uint8_t *ptr); - -#endif diff --git a/pkg/webterm/desk.bill b/pkg/webterm/desk.bill deleted file mode 100644 index 54bcf3046..000000000 --- a/pkg/webterm/desk.bill +++ /dev/null @@ -1 +0,0 @@ -~ diff --git a/pkg/webterm/desk.docket-0 b/pkg/webterm/desk.docket-0 deleted file mode 100644 index 549932de6..000000000 --- a/pkg/webterm/desk.docket-0 +++ /dev/null @@ -1,9 +0,0 @@ -:~ title+'Terminal' - info+'A web interface to your Urbit\'s command line.' - color+0x2e.4347 - glob-http+['https://bootstrap.urbit.org/glob-0v7.1hgb7.euged.6oj3e.cdhdg.rah02.glob' 0v7.1hgb7.euged.6oj3e.cdhdg.rah02] - base+'webterm' - version+[1 0 1] - website+'https://tlon.io' - license+'MIT' -== diff --git a/pkg/webterm/desk.ship b/pkg/webterm/desk.ship deleted file mode 100644 index 2bc09561a..000000000 --- a/pkg/webterm/desk.ship +++ /dev/null @@ -1 +0,0 @@ -~mister-dister-dozzod-dozzod diff --git a/pkg/webterm/lib/agentio.hoon b/pkg/webterm/lib/agentio.hoon deleted file mode 120000 index 959a49843..000000000 --- a/pkg/webterm/lib/agentio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/agentio.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/azimuth.hoon b/pkg/webterm/lib/azimuth.hoon deleted file mode 120000 index 2bacb02b7..000000000 --- a/pkg/webterm/lib/azimuth.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/azimuth.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/azimuthio.hoon b/pkg/webterm/lib/azimuthio.hoon deleted file mode 120000 index 0b5df7063..000000000 --- a/pkg/webterm/lib/azimuthio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/azimuthio.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/bip/b158.hoon b/pkg/webterm/lib/bip/b158.hoon deleted file mode 120000 index cba919a85..000000000 --- a/pkg/webterm/lib/bip/b158.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b158.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/bip/b173.hoon b/pkg/webterm/lib/bip/b173.hoon deleted file mode 120000 index 2999150e2..000000000 --- a/pkg/webterm/lib/bip/b173.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b173.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/bip/b174.hoon b/pkg/webterm/lib/bip/b174.hoon deleted file mode 120000 index bc6cae53b..000000000 --- a/pkg/webterm/lib/bip/b174.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip/b174.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/bip32.hoon b/pkg/webterm/lib/bip32.hoon deleted file mode 120000 index 1cbb7f892..000000000 --- a/pkg/webterm/lib/bip32.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bip32.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/bip39.hoon b/pkg/webterm/lib/bip39.hoon deleted file mode 120000 index 36c4b7e83..000000000 --- a/pkg/webterm/lib/bip39.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bip39.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/bip39/english.hoon b/pkg/webterm/lib/bip39/english.hoon deleted file mode 120000 index f1ea0fe31..000000000 --- a/pkg/webterm/lib/bip39/english.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/bip39/english.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/bitcoin-utils.hoon b/pkg/webterm/lib/bitcoin-utils.hoon deleted file mode 120000 index 7cc792906..000000000 --- a/pkg/webterm/lib/bitcoin-utils.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/bitcoin-utils.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/cram.hoon b/pkg/webterm/lib/cram.hoon deleted file mode 120000 index 4005e57ee..000000000 --- a/pkg/webterm/lib/cram.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/cram.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/dbug.hoon b/pkg/webterm/lib/dbug.hoon deleted file mode 120000 index 04f6855f7..000000000 --- a/pkg/webterm/lib/dbug.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/dbug.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/default-agent.hoon b/pkg/webterm/lib/default-agent.hoon deleted file mode 120000 index 698f6802d..000000000 --- a/pkg/webterm/lib/default-agent.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/default-agent.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/der.hoon b/pkg/webterm/lib/der.hoon deleted file mode 120000 index 8446f8e92..000000000 --- a/pkg/webterm/lib/der.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/der.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/docket.hoon b/pkg/webterm/lib/docket.hoon deleted file mode 120000 index e0f69ee1e..000000000 --- a/pkg/webterm/lib/docket.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/docket.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/ethereum.hoon b/pkg/webterm/lib/ethereum.hoon deleted file mode 120000 index c0a2772eb..000000000 --- a/pkg/webterm/lib/ethereum.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ethereum.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/ethio.hoon b/pkg/webterm/lib/ethio.hoon deleted file mode 120000 index 9c5b58148..000000000 --- a/pkg/webterm/lib/ethio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ethio.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/jose.hoon b/pkg/webterm/lib/jose.hoon deleted file mode 120000 index 6bff549ab..000000000 --- a/pkg/webterm/lib/jose.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/jose.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/keygen.hoon b/pkg/webterm/lib/keygen.hoon deleted file mode 120000 index 8557d0c52..000000000 --- a/pkg/webterm/lib/keygen.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/keygen.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/language-server/build.hoon b/pkg/webterm/lib/language-server/build.hoon deleted file mode 120000 index 749928056..000000000 --- a/pkg/webterm/lib/language-server/build.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/build.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/language-server/complete.hoon b/pkg/webterm/lib/language-server/complete.hoon deleted file mode 120000 index 219d824c7..000000000 --- a/pkg/webterm/lib/language-server/complete.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/complete.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/language-server/easy-print.hoon b/pkg/webterm/lib/language-server/easy-print.hoon deleted file mode 120000 index 2160e2f5a..000000000 --- a/pkg/webterm/lib/language-server/easy-print.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/easy-print.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/language-server/json.hoon b/pkg/webterm/lib/language-server/json.hoon deleted file mode 120000 index 96fe5b516..000000000 --- a/pkg/webterm/lib/language-server/json.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/json.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/language-server/parser.hoon b/pkg/webterm/lib/language-server/parser.hoon deleted file mode 120000 index 327e1a5de..000000000 --- a/pkg/webterm/lib/language-server/parser.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/parser.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/language-server/rune-snippet.hoon b/pkg/webterm/lib/language-server/rune-snippet.hoon deleted file mode 120000 index 387505b59..000000000 --- a/pkg/webterm/lib/language-server/rune-snippet.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/language-server/rune-snippet.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/mip.hoon b/pkg/webterm/lib/mip.hoon deleted file mode 120000 index 47b46482a..000000000 --- a/pkg/webterm/lib/mip.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/lib/mip.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/ph/io.hoon b/pkg/webterm/lib/ph/io.hoon deleted file mode 120000 index 9b660df8f..000000000 --- a/pkg/webterm/lib/ph/io.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/ph/io.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/ph/util.hoon b/pkg/webterm/lib/ph/util.hoon deleted file mode 120000 index ec423efc0..000000000 --- a/pkg/webterm/lib/ph/util.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/lib/ph/util.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/pill.hoon b/pkg/webterm/lib/pill.hoon deleted file mode 120000 index 41e912cf1..000000000 --- a/pkg/webterm/lib/pill.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/pill.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/pkcs.hoon b/pkg/webterm/lib/pkcs.hoon deleted file mode 120000 index d7a2ab46f..000000000 --- a/pkg/webterm/lib/pkcs.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/pkcs.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/primitive-rsa.hoon b/pkg/webterm/lib/primitive-rsa.hoon deleted file mode 120000 index f9dde2d95..000000000 --- a/pkg/webterm/lib/primitive-rsa.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/primitive-rsa.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/ring.hoon b/pkg/webterm/lib/ring.hoon deleted file mode 120000 index e5e819947..000000000 --- a/pkg/webterm/lib/ring.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/ring.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/server.hoon b/pkg/webterm/lib/server.hoon deleted file mode 120000 index 6176cfc00..000000000 --- a/pkg/webterm/lib/server.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/server.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/shoe.hoon b/pkg/webterm/lib/shoe.hoon deleted file mode 120000 index a4aab1dd7..000000000 --- a/pkg/webterm/lib/shoe.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/shoe.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/skeleton.hoon b/pkg/webterm/lib/skeleton.hoon deleted file mode 120000 index 77626a327..000000000 --- a/pkg/webterm/lib/skeleton.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/skeleton.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/sole.hoon b/pkg/webterm/lib/sole.hoon deleted file mode 120000 index f776890f2..000000000 --- a/pkg/webterm/lib/sole.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/sole.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/strand.hoon b/pkg/webterm/lib/strand.hoon deleted file mode 120000 index d95df7948..000000000 --- a/pkg/webterm/lib/strand.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/strand.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/strandio.hoon b/pkg/webterm/lib/strandio.hoon deleted file mode 120000 index 0caebfac1..000000000 --- a/pkg/webterm/lib/strandio.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/strandio.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/test.hoon b/pkg/webterm/lib/test.hoon deleted file mode 120000 index cc50ce7cf..000000000 --- a/pkg/webterm/lib/test.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/test.hoon \ No newline at end of file diff --git a/pkg/webterm/lib/verb.hoon b/pkg/webterm/lib/verb.hoon deleted file mode 120000 index 939072347..000000000 --- a/pkg/webterm/lib/verb.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/lib/verb.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/belt.hoon b/pkg/webterm/mar/belt.hoon deleted file mode 120000 index 0c8999932..000000000 --- a/pkg/webterm/mar/belt.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/belt.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/bill.hoon b/pkg/webterm/mar/bill.hoon deleted file mode 120000 index 801d99730..000000000 --- a/pkg/webterm/mar/bill.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/bill.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/blit.hoon b/pkg/webterm/mar/blit.hoon deleted file mode 120000 index 3ea8dc943..000000000 --- a/pkg/webterm/mar/blit.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/blit.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/docket-0.hoon b/pkg/webterm/mar/docket-0.hoon deleted file mode 120000 index 2bb549dd9..000000000 --- a/pkg/webterm/mar/docket-0.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/mar/docket-0.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/hoon.hoon b/pkg/webterm/mar/hoon.hoon deleted file mode 120000 index 95f8f67f9..000000000 --- a/pkg/webterm/mar/hoon.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/hoon.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/htm.hoon b/pkg/webterm/mar/htm.hoon deleted file mode 120000 index d29e24bac..000000000 --- a/pkg/webterm/mar/htm.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/htm.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/html.hoon b/pkg/webterm/mar/html.hoon deleted file mode 120000 index 14a5f8f7b..000000000 --- a/pkg/webterm/mar/html.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/html.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/httr.hoon b/pkg/webterm/mar/httr.hoon deleted file mode 120000 index 572665778..000000000 --- a/pkg/webterm/mar/httr.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/httr.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/hymn.hoon b/pkg/webterm/mar/hymn.hoon deleted file mode 120000 index 905156749..000000000 --- a/pkg/webterm/mar/hymn.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/hymn.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/js.hoon b/pkg/webterm/mar/js.hoon deleted file mode 120000 index 00189f4c6..000000000 --- a/pkg/webterm/mar/js.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/js.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/json.hoon b/pkg/webterm/mar/json.hoon deleted file mode 120000 index e77f85d05..000000000 --- a/pkg/webterm/mar/json.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/json.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/json/rpc/response.hoon b/pkg/webterm/mar/json/rpc/response.hoon deleted file mode 120000 index 52c97c864..000000000 --- a/pkg/webterm/mar/json/rpc/response.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/json/rpc/response.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/kelvin.hoon b/pkg/webterm/mar/kelvin.hoon deleted file mode 120000 index 195ebe0dc..000000000 --- a/pkg/webterm/mar/kelvin.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/kelvin.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/language-server/rpc/notification.hoon b/pkg/webterm/mar/language-server/rpc/notification.hoon deleted file mode 120000 index b95e54c35..000000000 --- a/pkg/webterm/mar/language-server/rpc/notification.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/notification.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/language-server/rpc/request.hoon b/pkg/webterm/mar/language-server/rpc/request.hoon deleted file mode 120000 index 26203cf5b..000000000 --- a/pkg/webterm/mar/language-server/rpc/request.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/request.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/language-server/rpc/response.hoon b/pkg/webterm/mar/language-server/rpc/response.hoon deleted file mode 120000 index 9dddb2cef..000000000 --- a/pkg/webterm/mar/language-server/rpc/response.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../../base-dev/mar/language-server/rpc/response.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/mime.hoon b/pkg/webterm/mar/mime.hoon deleted file mode 120000 index 0d85898f3..000000000 --- a/pkg/webterm/mar/mime.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/mime.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/noun.hoon b/pkg/webterm/mar/noun.hoon deleted file mode 120000 index 97cc30876..000000000 --- a/pkg/webterm/mar/noun.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/noun.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/path.hoon b/pkg/webterm/mar/path.hoon deleted file mode 120000 index c07b00064..000000000 --- a/pkg/webterm/mar/path.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/path.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/png.hoon b/pkg/webterm/mar/png.hoon deleted file mode 120000 index c2d8cf9fa..000000000 --- a/pkg/webterm/mar/png.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/png.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/purl.hoon b/pkg/webterm/mar/purl.hoon deleted file mode 120000 index d0d2cc0de..000000000 --- a/pkg/webterm/mar/purl.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/purl.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/ship.hoon b/pkg/webterm/mar/ship.hoon deleted file mode 120000 index 72de2c03c..000000000 --- a/pkg/webterm/mar/ship.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/ship.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/sole/action.hoon b/pkg/webterm/mar/sole/action.hoon deleted file mode 120000 index b349bd771..000000000 --- a/pkg/webterm/mar/sole/action.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/mar/sole/action.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/sole/effect.hoon b/pkg/webterm/mar/sole/effect.hoon deleted file mode 120000 index bc11205c0..000000000 --- a/pkg/webterm/mar/sole/effect.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/mar/sole/effect.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/svg.hoon b/pkg/webterm/mar/svg.hoon deleted file mode 120000 index 2b406c2ac..000000000 --- a/pkg/webterm/mar/svg.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/svg.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/tang.hoon b/pkg/webterm/mar/tang.hoon deleted file mode 120000 index 9206e52b2..000000000 --- a/pkg/webterm/mar/tang.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/tang.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/tape.hoon b/pkg/webterm/mar/tape.hoon deleted file mode 120000 index be51fcb2d..000000000 --- a/pkg/webterm/mar/tape.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/tape.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/txt-diff.hoon b/pkg/webterm/mar/txt-diff.hoon deleted file mode 120000 index 1f7c04285..000000000 --- a/pkg/webterm/mar/txt-diff.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/txt-diff.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/txt.hoon b/pkg/webterm/mar/txt.hoon deleted file mode 120000 index 432541575..000000000 --- a/pkg/webterm/mar/txt.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/txt.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/udon.hoon b/pkg/webterm/mar/udon.hoon deleted file mode 120000 index 215e0ada9..000000000 --- a/pkg/webterm/mar/udon.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/udon.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/umd.hoon b/pkg/webterm/mar/umd.hoon deleted file mode 120000 index 9b827a24d..000000000 --- a/pkg/webterm/mar/umd.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/umd.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/urb.hoon b/pkg/webterm/mar/urb.hoon deleted file mode 120000 index 2d8112d1d..000000000 --- a/pkg/webterm/mar/urb.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/urb.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/urbit.hoon b/pkg/webterm/mar/urbit.hoon deleted file mode 120000 index 70a62a723..000000000 --- a/pkg/webterm/mar/urbit.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/urbit.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/woff2.hoon b/pkg/webterm/mar/woff2.hoon deleted file mode 120000 index beaf4875c..000000000 --- a/pkg/webterm/mar/woff2.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/woff2.hoon \ No newline at end of file diff --git a/pkg/webterm/mar/xml.hoon b/pkg/webterm/mar/xml.hoon deleted file mode 120000 index e6323e215..000000000 --- a/pkg/webterm/mar/xml.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/mar/xml.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/aquarium.hoon b/pkg/webterm/sur/aquarium.hoon deleted file mode 120000 index 1195b2c62..000000000 --- a/pkg/webterm/sur/aquarium.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/aquarium.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/asn1.hoon b/pkg/webterm/sur/asn1.hoon deleted file mode 120000 index 7888cada0..000000000 --- a/pkg/webterm/sur/asn1.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/asn1.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/bitcoin.hoon b/pkg/webterm/sur/bitcoin.hoon deleted file mode 120000 index d72c2c830..000000000 --- a/pkg/webterm/sur/bitcoin.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/bitcoin.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/docket.hoon b/pkg/webterm/sur/docket.hoon deleted file mode 120000 index e13676adb..000000000 --- a/pkg/webterm/sur/docket.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/docket.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/hark-store.hoon b/pkg/webterm/sur/hark-store.hoon deleted file mode 120000 index 5d606e793..000000000 --- a/pkg/webterm/sur/hark-store.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/hark-store.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/hood.hoon b/pkg/webterm/sur/hood.hoon deleted file mode 120000 index b212f501e..000000000 --- a/pkg/webterm/sur/hood.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/hood.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/json/rpc.hoon b/pkg/webterm/sur/json/rpc.hoon deleted file mode 120000 index e499542f6..000000000 --- a/pkg/webterm/sur/json/rpc.hoon +++ /dev/null @@ -1 +0,0 @@ -../../../base-dev/sur/json/rpc.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/keygen.hoon b/pkg/webterm/sur/keygen.hoon deleted file mode 120000 index 99bcd5fc8..000000000 --- a/pkg/webterm/sur/keygen.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/keygen.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/language-server.hoon b/pkg/webterm/sur/language-server.hoon deleted file mode 120000 index a1c726780..000000000 --- a/pkg/webterm/sur/language-server.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/language-server.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/ring.hoon b/pkg/webterm/sur/ring.hoon deleted file mode 120000 index 633c96332..000000000 --- a/pkg/webterm/sur/ring.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/ring.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/settings.hoon b/pkg/webterm/sur/settings.hoon deleted file mode 120000 index c2c70beef..000000000 --- a/pkg/webterm/sur/settings.hoon +++ /dev/null @@ -1 +0,0 @@ -../../garden-dev/sur/settings.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/sole.hoon b/pkg/webterm/sur/sole.hoon deleted file mode 120000 index 8cac11891..000000000 --- a/pkg/webterm/sur/sole.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/sole.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/spider.hoon b/pkg/webterm/sur/spider.hoon deleted file mode 120000 index 12ae2c187..000000000 --- a/pkg/webterm/sur/spider.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/spider.hoon \ No newline at end of file diff --git a/pkg/webterm/sur/verb.hoon b/pkg/webterm/sur/verb.hoon deleted file mode 120000 index 1a6100d9c..000000000 --- a/pkg/webterm/sur/verb.hoon +++ /dev/null @@ -1 +0,0 @@ -../../base-dev/sur/verb.hoon \ No newline at end of file diff --git a/pkg/webterm/sys.kelvin b/pkg/webterm/sys.kelvin deleted file mode 100644 index e77a3de08..000000000 --- a/pkg/webterm/sys.kelvin +++ /dev/null @@ -1 +0,0 @@ -[%zuse 418] diff --git a/sh/build-interface b/sh/build-interface index e90e04a14..cebf79101 100755 --- a/sh/build-interface +++ b/sh/build-interface @@ -2,10 +2,7 @@ set -ex -cd pkg/npm/api -npm install & - -cd ../../interface +cd pkg/interface npm install npm run build:prod & diff --git a/sh/create-goerli-pills b/sh/create-goerli-pills new file mode 100755 index 000000000..f8e04add7 --- /dev/null +++ b/sh/create-goerli-pills @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Usage: create-goerli-pills + +# Build the ivory and brass goerli pills, copying them to the local directory, +# named with the current give revision + +set -xeuo pipefail + +cd "${0%/*}/.." + +rev="$(git rev-parse HEAD)" +sha="${rev:0:5}" + +brass="brass-goerli-${sha}.pill" +ivory="ivory-goerli-${sha}.pill" + +cp -f "$(nix-build -A brass-goerli.build --no-out-link)" "$brass" +cp -f "$(nix-build -A ivory-goerli.build --no-out-link)" "$ivory" + +chmod 0644 "$brass" "$ivory" diff --git a/sh/create-ropsten-pills b/sh/create-ropsten-pills deleted file mode 100755 index d288795f3..000000000 --- a/sh/create-ropsten-pills +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -# Usage: create-ropsten-pills - -# Build the ivory and brass ropsten pills, copying them to the local directory, -# named with the current give revision - -set -xeuo pipefail - -cd "${0%/*}/.." - -rev="$(git rev-parse HEAD)" -sha="${rev:0:5}" - -brass="brass-ropsten-${sha}.pill" -ivory="ivory-ropsten-${sha}.pill" - -cp -f "$(nix-build -A brass-ropsten.build --no-out-link)" "$brass" -cp -f "$(nix-build -A ivory-ropsten.build --no-out-link)" "$ivory" - -chmod 0644 "$brass" "$ivory" diff --git a/shell.nix b/shell.nix index b1858df93..c6d03692a 100644 --- a/shell.nix +++ b/shell.nix @@ -22,7 +22,7 @@ let # # Typically the inputs listed here also have a shell.nix in their respective # source directory you can use directly. - inputsFrom = with pkgsLocal; [ ent herb urbit urcrypt ]; + inputsFrom = with pkgsLocal; [ ent urbit urcrypt ]; # Collect the named attribute from all dependencies listed in inputsFrom. mergeFrom = name: pkgs.lib.concatLists (pkgs.lib.catAttrs name inputsFrom); diff --git a/pkg/arvo/tests/bug/gh-703.hoon b/tests/bug/gh-703.hoon similarity index 100% rename from pkg/arvo/tests/bug/gh-703.hoon rename to tests/bug/gh-703.hoon diff --git a/pkg/arvo/tests/lib/der.hoon b/tests/lib/der.hoon similarity index 100% rename from pkg/arvo/tests/lib/der.hoon rename to tests/lib/der.hoon diff --git a/tests/lib/dprint.hoon b/tests/lib/dprint.hoon new file mode 100644 index 000000000..756a7c8a2 --- /dev/null +++ b/tests/lib/dprint.hoon @@ -0,0 +1,318 @@ +:: This library contains unit tests for doccords. +:: +/+ *test, *dprint +:: +=> => + :: core-summary + :: + :: core-description + |% + :: chapter-summary + :: + :: chapter-description + +| %chapter-test + ++ empty ~ + -- + :: + :: arms used for testing doccords + |% + +| %types + +$ arm-dox [tape what what what] + +$ core-dox what + +$ chapter-dox [tape what] + :: + +| %helper-functions + ++ get-item + |= a=(list term) + ^- item + +:(find-item-in-type a -:!>(.)) + :: + ++ get-arm-dox + |= a=(list term) + ^- arm-dox + =/ itm=item (get-item a) + ?> ?=([%arm *] itm) + [name adoc pdoc cdoc]:itm + :: + ++ get-core-dox + |= a=(list term) + ^- core-dox + =/ itm=item (get-item a) + ?> ?=([%core *] itm) + docs:itm + :: + ++ get-chapter-dox + |= a=(list term) + ^- chapter-dox + =/ itm=item (get-item a) + ?> ?=([%chapter *] itm) + [name docs]:itm + :: + ++ arm-check + |= [arms=(list term) wat=(trel ? ? ?) docs=(trel what what what)] + ^- tang + =| res=tang + |- + ?~ arms res + %= $ + arms t.arms + res %+ weld + res + %+ expect-eq + !> ^- arm-dox + :* (trip i.arms) + ?:(p.wat p.docs *what) + ?:(q.wat q.docs *what) + ?:(r.wat r.docs *what) + == + :: + !> (get-arm-dox ~[i.arms]) + == + :: + ++ run-arm-tests + |= [wat=(trel ? ? ?)] + ^- tang + =/ num (sub 3 :(add p.wat q.wat r.wat)) + =/ prefix=term + ;: (cury cat 3) + %arm- + ?:(p.wat %adoc- ~) + ?:(q.wat %pdoc- ~) + ?:(r.wat %cdoc- ~) + == + =/ arms=(list term) + %- turn + :_ |= [postfix=term] + `term`(cat 3 prefix postfix) + ^- (list term) + ?+ num ~ + %1 ~[%pre %post] + %2 ~[%pre-pre %post-pre %post-post] + %3 :~ %pre-pre-pre + %pre-pre-post + %pre-post-pre + %post-pre-pre + %pre-post-post + %post-pre-post + %post-post-pre + == + == + %^ arm-check + arms + wat + [`['arm-doc' ~] `['product-doc' ~] `['core-doc' ~]] + :: + +| %batch-comments + :: +b-foo: a foo + :: $b-baz: a baz + :: +b-bar: a bar + :: + :: a very bar foo + :: + :: $b-boz: a boz + :: + :: a very boz baz + :: + ++ b-foo ~ + ++ b-bar ~ + +$ b-baz * + +$ b-boz * + :: + +| %docs-for-arms + ++ no-doc ~ + :: + :: +arm-adoc-pre: arm-doc + ++ arm-adoc-pre ~ + :: + ++ arm-adoc-post :: arm-doc + ~ + :: + ++ arm-pdoc-pre + :: product-doc + 'foo' + ++ arm-pdoc-post + 'foo' :: product-doc + :: + ++ arm-cdoc-pre + |% + :: core-doc + ++ $ ~ + -- + :: + ++ arm-cdoc-post + |% + ++ $ :: core-doc + ~ + -- + :: + :: +arm-adoc-pdoc-pre-pre: arm-doc + ++ arm-adoc-pdoc-pre-pre + :: product-doc + 'foo' + :: + ++ arm-adoc-pdoc-post-pre :: arm-doc + :: product-doc + 'foo' + :: + ++ arm-adoc-pdoc-post-post :: arm-doc + 'foo' :: product-doc + :: + :: +arm-adoc-cdoc-pre-pre: arm-doc + ++ arm-adoc-cdoc-pre-pre + |% + :: core-doc + ++ $ ~ + -- + :: + ++ arm-adoc-cdoc-post-pre :: arm-doc + |% + :: core-doc + ++ $ ~ + -- + :: + ++ arm-adoc-cdoc-post-post :: arm-doc + |% + ++ $ :: core-doc + ~ + -- + :: + ++ arm-pdoc-cdoc-pre-pre + :: product-doc + |% + :: core-doc + ++ $ ~ + -- + ++ arm-pdoc-cdoc-post-pre + |% + :: core-doc + ++ $ ~ + -- :: product-doc + :: + ++ arm-pdoc-cdoc-post-post + |% + ++ $ :: core-doc + ~ + -- :: product-doc + :: + :: +arm-adoc-pdoc-cdoc-pre-pre-pre: arm-doc + ++ arm-adoc-pdoc-cdoc-pre-pre-pre + :: product-doc + |% + :: core-doc + ++ $ ~ + -- + :: + ++ arm-adoc-pdoc-cdoc-post-pre-pre :: arm-doc + :: product-doc + |% + :: core-doc + ++ $ ~ + -- + :: + :: +arm-adoc-pdoc-cdoc-pre-post-pre: arm-doc + ++ arm-adoc-pdoc-cdoc-pre-post-pre + |% + :: core-doc + ++ $ ~ + -- :: product-doc + :: + :: +arm-adoc-pdoc-cdoc-pre-pre-post: arm-doc + ++ arm-adoc-pdoc-cdoc-pre-pre-post + :: product-doc + |% + ++ $ :: core-doc + ~ + -- + :: + ++ arm-adoc-pdoc-cdoc-post-post-pre :: arm-doc + |% + :: core-doc + ++ $ ~ + -- :: product-doc + :: + ++ arm-adoc-pdoc-cdoc-post-pre-post :: arm-doc + :: product-doc + |% + ++ $ :: core-doc + ~ + -- + :: + :: +arm-adoc-pdoc-cdoc-pre-post-post: arm-doc + ++ arm-adoc-pdoc-cdoc-pre-post-post + |% + ++ $ :: core-doc + ~ + -- :: product-doc + :: + ++ arm-adoc-pdoc-cdoc-post-post-post :: arm-doc + |% + ++ $ :: core-doc + ~ + -- :: product-doc + :: + -- +:: +:: contains the actual tests to be run by -test +|% ++| %batch-tests + ++ test-b-foo + %+ expect-eq + !> ^- arm-dox + ["b-foo" `['a foo' ~] *what *what] + :: + !> (get-arm-dox ~[%b-foo]) + :: + ++ test-b-bar + %+ expect-eq + !> ^- arm-dox + ["b-bar" `['a bar' ~[~[[& 'a very bar foo']]]] *what *what] + :: + !> (get-arm-dox ~[%b-bar]) + :: + ++ test-b-baz + %+ expect-eq + !> ^- arm-dox + ["b-baz" `['a baz' ~] *what *what] + :: + !> (get-arm-dox ~[%b-baz]) + :: + ++ test-b-boz + %+ expect-eq + !> ^- arm-dox + ["b-boz" `['a boz' ~[~[[& 'a very boz baz']]]] *what *what] + :: + !> (get-arm-dox ~[%b-boz]) + :: ++| %arm-tests + :: +++ test-no-doc + %+ expect-eq + !> ^- arm-dox + ["no-doc" *what *what *what] + :: + !> (get-arm-dox ~[%no-doc]) +:: +++ test-adoc (run-arm-tests & | |) +++ test-pdoc (run-arm-tests | & |) +++ test-cdoc (run-arm-tests | | &) +++ test-adoc-pdoc (run-arm-tests & & |) +++ test-adoc-cdoc (run-arm-tests & | &) +++ test-pdoc-cdoc (run-arm-tests | & &) +++ test-adoc-pdoc-cdoc (run-arm-tests & & &) +:: +:: +| %core-tests +:: ++ test-core +:: %+ expect-eq +:: !> ^- core-dox +:: `['core-summary' ~[~[[%.y 'core-description']]]] +:: :: +:: !> (get-core-dox ~[%core-summary]) +:: :: +:: ++ test-chapter +:: %+ expect-eq +:: !> ^- chapter-dox +:: ["chapter-test" `['chapter-summary' ~[~[[%.y 'chapter-description']]]]] +:: :: +:: !> (get-chapter-dox ~[%core-summary %chapter-test]) +:: +-- diff --git a/pkg/arvo/tests/lib/ethereum/encoding.hoon b/tests/lib/ethereum/encoding.hoon similarity index 100% rename from pkg/arvo/tests/lib/ethereum/encoding.hoon rename to tests/lib/ethereum/encoding.hoon diff --git a/pkg/arvo/tests/lib/ethereum/rlp.hoon b/tests/lib/ethereum/rlp.hoon similarity index 100% rename from pkg/arvo/tests/lib/ethereum/rlp.hoon rename to tests/lib/ethereum/rlp.hoon diff --git a/pkg/arvo/tests/lib/ethereum/signing.hoon b/tests/lib/ethereum/signing.hoon similarity index 100% rename from pkg/arvo/tests/lib/ethereum/signing.hoon rename to tests/lib/ethereum/signing.hoon diff --git a/pkg/arvo/tests/lib/jose.hoon b/tests/lib/jose.hoon similarity index 100% rename from pkg/arvo/tests/lib/jose.hoon rename to tests/lib/jose.hoon diff --git a/pkg/arvo/tests/lib/keygen.hoon b/tests/lib/keygen.hoon similarity index 100% rename from pkg/arvo/tests/lib/keygen.hoon rename to tests/lib/keygen.hoon diff --git a/pkg/arvo/tests/lib/language-server.hoon b/tests/lib/language-server.hoon similarity index 100% rename from pkg/arvo/tests/lib/language-server.hoon rename to tests/lib/language-server.hoon diff --git a/pkg/arvo/tests/lib/naive.hoon b/tests/lib/naive.hoon similarity index 99% rename from pkg/arvo/tests/lib/naive.hoon rename to tests/lib/naive.hoon index aa107df84..5e3ceec5b 100644 --- a/pkg/arvo/tests/lib/naive.hoon +++ b/tests/lib/naive.hoon @@ -739,19 +739,19 @@ ++ gen-rut-jar ^~ ^- (jar @p event) =/ filter ;: cork - (cury filter-owner %.y) + ::(cury filter-owner %.y) ::(cury filter-proxy %spawn) - (cury filter-nonce %.y) + ::(cury filter-nonce %.y) ::(cury filter-rank %galaxy) ::(cury filter-dominion %l1) %- cury :- filter-tx-type - :* ::%spawn - ::%transfer-point + :* %spawn + %transfer-point %configure-keys - ::%set-management-proxy - ::%set-spawn-proxy - ::%set-transfer-proxy + %set-management-proxy + %set-spawn-proxy + %set-transfer-proxy ~ == == diff --git a/pkg/arvo/tests/lib/number-to-words.hoon b/tests/lib/number-to-words.hoon similarity index 100% rename from pkg/arvo/tests/lib/number-to-words.hoon rename to tests/lib/number-to-words.hoon diff --git a/pkg/arvo/tests/lib/pkcs.hoon b/tests/lib/pkcs.hoon similarity index 100% rename from pkg/arvo/tests/lib/pkcs.hoon rename to tests/lib/pkcs.hoon diff --git a/pkg/arvo/tests/lib/primitive-rsa.hoon b/tests/lib/primitive-rsa.hoon similarity index 100% rename from pkg/arvo/tests/lib/primitive-rsa.hoon rename to tests/lib/primitive-rsa.hoon diff --git a/pkg/arvo/tests/lib/ring.hoon b/tests/lib/ring.hoon similarity index 100% rename from pkg/arvo/tests/lib/ring.hoon rename to tests/lib/ring.hoon diff --git a/pkg/arvo/tests/lib/vere/dawn.hoon b/tests/lib/vere/dawn.hoon similarity index 100% rename from pkg/arvo/tests/lib/vere/dawn.hoon rename to tests/lib/vere/dawn.hoon diff --git a/tests/run/hints.hoon b/tests/run/hints.hoon new file mode 100644 index 000000000..8bdcac295 --- /dev/null +++ b/tests/run/hints.hoon @@ -0,0 +1,41 @@ +:: Test that these hints do not crash the runtime +:: there is no need to include a test for dynamic %bout +:: since all hoon tests exersize dynamic %bout +|% +:: test that these trace hints +:: are safe to run or ignore +++ test-hilt-hela + ~> %hela + ~ +++ test-hint-hela + ~> %hela.[1 leaf+"test-hint-hela ~"] + ~ +++ test-hilt-nara + ~> %nara + ~ +++ test-hint-nara + ~> %nara.[1 leaf+"test-hint-nara ~"] + ~ +:: test that theses bytecode-report hints +:: are safe to run or ignore +++ test-hilt-xray + ~> %xray + ~ +++ test-hint-xray + ~> %xray.[1 leaf+"test-hint-xray ~"] + ~ +:: test that these memory-report hints +:: are safe to run or ignore +++ test-hilt-meme + ~> %meme + ~ +++ test-hint-meme + ~> %meme.[1 leaf+"test-hint-meme ~"] + ~ +:: test that the hilt bout hint +:: is safe to run or ignore +++ test-hilt-bout + ~> %bout + ~ +-- + diff --git a/pkg/arvo/tests/sys/arvo/wa.hoon b/tests/sys/arvo/wa.hoon similarity index 100% rename from pkg/arvo/tests/sys/arvo/wa.hoon rename to tests/sys/arvo/wa.hoon diff --git a/tests/sys/grq.hoon b/tests/sys/grq.hoon new file mode 100644 index 000000000..c2a45bb0d --- /dev/null +++ b/tests/sys/grq.hoon @@ -0,0 +1,519 @@ +:: test gall subscription nonce incrementation and ames flow killing +:: +/+ *test, v=test-ames-gall +|% +++ test-watch + %- run-chain + |. :- %| + =+ nec-bud:v + :: uncomment to turn on verbose debug output + ::=^ * ames.nec + :: (ames-call:v ames.nec ~[/none] [%spew ~[%msg %snd %rcv %odd]] *roof) + ::=^ * ames.bud + :: (ames-call:v ames.bud ~[/none] [%spew ~[%msg %snd %rcv %odd]] *roof) + :: poke %sub to tell it to subscribe + ~& > 'poke %sub to tell it to subscribe' + =/ =task:gall [%deal [~nec ~nec] %sub %poke watch+!>(~bud)] + =^ t1 gall.nec + %: gall-check-call:v gall.nec + [~1111.1.1 0xdead.beef *roof] + [~[/foo] task] + :~ :- ~[/foo] [%give %unto %poke-ack ~] + :- ~[/init] + :* %pass /use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud + [%g %deal [~nec ~bud] %pub %watch /foo] + == == + == + :- t1 |. :- %| + :: handle gall passing the %watch to itself, which passes to ames + ~& > 'handle gall passing the %watch to itself, which passes to ames' + =^ t2 gall.nec + %: gall-check-call:v gall.nec + [~1111.1.1 0xdead.beef *roof] + :- ~[/use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud /init] + [%deal [~nec ~bud] %pub %watch /foo] + :~ :- ~[/init] [%pass /sys/lag %a %heed ~bud] + :- ~[/init] [%pass /sys/era %j %public-keys (sy ~bud ~)] + :- ~[/use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud /init] + [%pass /sys/way/~bud/pub %a %plea ~bud %g /ge/pub [%0 %s /foo]] + == + == + :- t2 |. :- %| + :: subscriber ames handles %plea from gall, gives a packet to vere + ~& > 'subscriber ames handles %plea from gall, gives a packet to vere' + =^ t3 ames.nec + %: ames-check-call:v ames.nec + [~1111.1.1 0xdead.beef *roof] + :- :~ /sys/way/~bud/pub + /use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud + /init + == + [%plea ~bud %g /ge/pub [%0 %s /foo]] + :~ :- ~[//unix] + :* %give %send [%& ~bud] + 0xae59.5b29.277b.22c1.20b7.a8db.9086.46df.31bd.f9bc. + 2633.7300.17d4.f5fc.8be5.8bfe.5c9d.36d9.2ea1.7cb3. + 8a00.0200.0132.8fd4.f000 + == + :- ~[/ames] [%pass /pump/~bud/0 %b %wait ~1111.1.1..00.00.01] + == + == + :- t3 |. :- %| + :: publisher ames hears %watch, passes to gall + ~& > 'publisher ames hears %watch, passes to gall' + =^ t4 ames.bud + %: ames-check-call:v ames.bud + [~1111.1.2 0xbeef.dead *roof] + :- ~[//unix] + :* %hear [%& ~nec] + 0xae59.5b29.277b.22c1.20b7.a8db.9086.46df.31bd.f9bc. + 2633.7300.17d4.f5fc.8be5.8bfe.5c9d.36d9.2ea1.7cb3. + 8a00.0200.0132.8fd4.f000 + == + :~ :- ~[//unix] [%pass /qos %d %flog %text "; ~nec is your neighbor"] + :- ~[//unix] + [%pass /bone/~nec/0/1 %g %plea ~nec %g /ge/pub [%0 %s /foo]] + == + == + :- t4 |. :- %| + :: publisher gall hears %watch from ames, passes to itself + ~& > 'publisher gall hears %watch from ames, passes to itself' + =^ t5 gall.bud + %: gall-check-call:v gall.bud + [~1111.1.2 0xbeef.dead *roof] + :- ~[/bone/~nec/0/1 //unix] + [%plea ~nec %g /ge/pub [%0 %s /foo]] + :~ :- ~[/init] [%pass /sys/lag %a %heed ~nec] + :- ~[/init] [%pass /sys/era %j %public-keys (sy ~nec ~)] + :- ~[/bone/~nec/0/1 //unix] + [%pass /sys/req/~nec/pub %g %deal [~nec ~bud] %pub %watch /foo] + == + == + :- t5 |. :- %| + :: publisher gall runs %pub with %watch, gives ack to itself + ~& > 'publisher gall runs %pub with %watch, gives ack to itself' + =^ t6 gall.bud + %: gall-check-call:v gall.bud + [~1111.1.2 0xbeef.dead *roof] + :- ~[/sys/req/~nec/pub /bone/~nec/0/1 //unix] + [%deal [~nec ~bud] %pub %watch /foo] + :~ :- ~[/sys/req/~nec/pub /bone/~nec/0/1 //unix] + [%give %unto %watch-ack ~] + == + == + :- t6 |. :- %| + :: gall gives ack to ames + ~& > 'gall gives ack to ames' + =^ t7 gall.bud + %: gall-check-take:v gall.bud + [~1111.1.2 0xbeef.dead *roof] + :+ /sys/req/~nec/pub ~[/bone/~nec/0/1 //unix] + [%gall %unto %watch-ack ~] + :~ :- ~[/bone/~nec/0/1 //unix] [%give %done ~] + == + == + :- t7 |. :- %| + :: publisher ames hears ack from gall, sends over the network + ~& > 'publisher ames hears ack from gall, sends over the network' + =^ t8 ames.bud + %: ames-check-take:v ames.bud + [~1111.1.2 0xbeef.dead *roof] + :+ /bone/~nec/0/1 ~[//unix] + [%gall %done ~] + :~ :- ~[//unix] + :* %give %send [%& ~nec] + 0x2.0219.8100.0485.5530.3c88.9068.3cc6.484e. + 2d9d.076e.6d00.0100.0223.9ae9.5000 + == == + == + :- t8 |. :- %| + :: subscriber ames hears watch-ack packet, gives to gall + ~& > 'subscriber ames hears watch-ack packet, gives to gall' + =^ t9 ames.nec + %: ames-check-call:v ames.nec + [~1111.1.3 0xdead.beef *roof] + :- ~[//unix] + :* %hear [%& ~bud] + 0x2.0219.8100.0485.5530.3c88.9068.3cc6.484e. + 2d9d.076e.6d00.0100.0223.9ae9.5000 + == + :~ :- ~[//unix] [%pass /qos %d %flog %text "; ~bud is your neighbor"] + :- :~ /sys/way/~bud/pub + /use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud + /init + == + [%give %done ~] + :- ~[/ames] [%pass /pump/~bud/0 %b %rest ~1111.1.1..00.00.01] + == + == + :- t9 |. :- %| + :: gall gives %done to itself + ~& > 'gall gives %done to itself' + =^ t10 gall.nec + %: gall-check-take:v gall.nec + [~1111.1.3 0xdead.beef *roof] + :+ /sys/way/~bud/pub + ~[/use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud /init] + [%ames %done ~] + :~ :- ~[/use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud /init] + [%give %unto %watch-ack ~] + == + == + :- t10 |. :- %| + :: gall gives watch-ack to itself + ~& > 'gall gives watch-ack to itself' + =^ t11 gall.nec + %: gall-check-take:v gall.nec + [~1111.1.3 0xdead.beef *roof] + :+ /use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud + ~[/init] + [%gall %unto %watch-ack ~] + ~ + == + :- t11 |. :- %| + :: start the clog and kick process; give clog to publisher gall + ~& > 'start the clog and kick process; give clog to publisher gall' + =^ t12 gall.bud + %: gall-check-take:v gall.bud + [~1111.1.4 0xbeef.dead *roof] + :+ /sys/lag ~[/init] + [%ames %clog ~nec] + :~ :- ~[/sys/req/~nec/pub /bone/~nec/0/1 //unix] + [%give %unto %kick ~] + == + == + :- t12 |. :- %| + :: gall gives %kick %boon to ames + ~& > 'gall gives %kick %boon to ames' + =^ t13 gall.bud + %: gall-check-take:v gall.bud + [~1111.1.4 0xbeef.dead *roof] + :+ /sys/req/~nec/pub ~[/bone/~nec/0/1 //unix] + [%gall %unto %kick ~] + :~ :- ~[/bone/~nec/0/1 //unix] [%give %boon %x ~] + == + == + :- t13 |. :- %| + :: ames gives kick over the network + ~& > 'ames gives kick over the network' + =^ t14 ames.bud + %: ames-check-take:v ames.bud + [~1111.1.4 0xbeef.dead *roof] + :+ /bone/~nec/0/1 ~[//unix] + [%gall %boon %x ~] + :~ :- ~[//unix] + :* %give %send [%& ~nec] + 0xa1fc.cd35.c730.9a00.07e0.90a2.f87c.3657.935e. + 4ca0.801d.3ddc.d400.0100.0223.bc18.1000 + == + :- ~[/ames] [%pass /pump/~nec/1 %b %wait ~1111.1.4..00.00.01] + == + == + :- t14 |. :- %| + :: subscriber ames receives kick, gives to gall and gives ack to unix + ~& > 'subscriber ames receives kick, gives to gall and gives ack to unix' + =^ t15 ames.nec + %: ames-check-call:v ames.nec + [~1111.1.5 0xdead.beef *roof] + :- ~[//unix] + :* %hear [%& ~bud] + 0xa1fc.cd35.c730.9a00.07e0.90a2.f87c.3657.935e. + 4ca0.801d.3ddc.d400.0100.0223.bc18.1000 + == + :~ :- :~ /sys/way/~bud/pub + /use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud + /init + == + [%give %boon %x ~] + :- ~[//unix] + :* %give %send [%& ~bud] + 0xfe.e208.da00.0491.bf7f.9594.2ddc.0948. + 9de0.3906.b678.6e00.0200.0132.e55d.5000 + == == + == + :- t15 |. :- %| + :: subscriber gall receives kick %boon from ames, gives to self + ~& > 'subscriber gall receives kick %boon from ames, gives to self' + =^ t16 gall.nec + %: gall-check-take:v gall.nec + [~1111.1.5 0xdead.beef *roof] + :+ /sys/way/~bud/pub + ~[/use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud /init] + [%ames %boon %x ~] + :~ :- ~[/use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud /init] + [%give %unto %kick ~] + :- ~[/use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud /init] + [%pass /sys/way/~bud/pub %a %cork ~bud] + == + == + :: subscriber gall receives %kick from itself + ~& > 'subscriber gall receives %kick from itself' + =^ t17 gall.nec + %: gall-check-take:v gall.nec + [~1111.1.5 0xdead.beef *roof] + :+ /use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud + ~[/init] + [%gall %unto %kick ~] + :~ :- ~[/init] + :* %pass /use/sub/0w1.d6Isf/out/~bud/pub/2/sub-foo/~bud + [%g %deal [~nec ~bud] %pub %watch /foo] + == == + == + :- t17 |. :- %| + :: gall receives %deal %watch from itself, passes to ames + ~& > 'gall receives %deal %watch from itself, passes to ames' + =^ t18 gall.nec + %: gall-check-call:v gall.nec + [~1111.1.5 0xdead.beef *roof] + :- ~[/use/sub/0w1.d6Isf/out/~bud/pub/2/sub-foo/~bud /init] + [%deal [~nec ~bud] %pub %watch /foo] + :~ :- ~[/use/sub/0w1.d6Isf/out/~bud/pub/2/sub-foo/~bud /init] + [%pass /sys/way/~bud/pub %a %plea ~bud %g /ge/pub [%0 %s /foo]] + == + == + :- t18 |. :- %| + :: subscriber ames sends new %watch + ~& > 'subscriber ames sends new %watch' + =^ t19 ames.nec + %: ames-check-call:v ames.nec + [~1111.1.5 0xdead.beef *roof] + :- :~ /sys/way/~bud/pub + /use/sub/0w1.d6Isf/out/~bud/pub/2/sub-foo/~bud + /init + == + [%plea ~bud %g /ge/pub [%0 %s /foo]] + :~ :- ~[//unix] + :* %give %send [%& ~bud] + 0xfe.9174.6d7c.e042.4ea7.cf3c.08da.3acf.68ec.3bd1.1f2c.abfe.f500. + 1897.c42e.a3ec.2159.86d6.e2f1.b344.9d06.b600.0200.0132.ebe7.8800 + == + :- ~[/ames] [%pass /pump/~bud/4 %b %wait ~1111.1.5..00.00.01] + == + == + :- t19 |. :- %| + :: subscriber ames sends %cork + ~& > 'subscriber ames sends %cork' + =^ t20 ames.nec + %: ames-check-call:v ames.nec + [~1111.1.5 0xdead.beef *roof] + :- :~ /sys/way/~bud/pub + /use/sub/0w1.d6Isf/out/~bud/pub/1/sub-foo/~bud + /init + == + [%cork ~bud] + :~ :- ~[//unix] + :* %give %send [%& ~bud] + 0xb.130c.ab37.ca24.49cd.aecb.23ba.70f1.6f1c.4d00.124e.c9a5. + 3413.3843.d81c.47c4.7040.6e62.3700.0200.0132.e1ab.9000 + == + :- ~[/ames] [%pass /pump/~bud/0 %b %wait ~1111.1.5..00.02.00] + == + == + :: publisher ames hears %kick ack + ~& > 'publisher ames hears %kick ack' + :- t20 |. :- %| + =^ t21 ames.bud + %: ames-check-call:v ames.bud + [~1111.1.6 0xbeef.dead *roof] + :- ~[//unix] + :* %hear [%& ~nec] + 0xfe.e208.da00.0491.bf7f.9594.2ddc.0948. + 9de0.3906.b678.6e00.0200.0132.e55d.5000 + == + :~ :- ~[/ames] [%pass /pump/~nec/1 %b %rest ~1111.1.4..00.00.01] + == + == + :: publisher ames hears new %watch + ~& > 'publisher ames hears new %watch' + :- t21 |. :- %| + =^ t22 ames.bud + %: ames-check-call:v ames.bud + [~1111.1.7 0xbeef.dead *roof] + :- ~[//unix] + :* %hear [%& ~nec] + 0xfe.9174.6d7c.e042.4ea7.cf3c.08da.3acf.68ec.3bd1.1f2c.abfe.f500. + 1897.c42e.a3ec.2159.86d6.e2f1.b344.9d06.b600.0200.0132.ebe7.8800 + == + :~ :- ~[//unix] + [%pass /bone/~nec/0/5 %g %plea ~nec %g /ge/pub [%0 %s /foo]] + == + == + :: publisher gall hears new %watch, passes to self + ~& > 'publisher gall hears new %watch, passes to self' + :- t22 |. :- %| + =^ t23 gall.bud + %: gall-check-call:v gall.bud + [~1111.1.7 0xbeef.dead *roof] + :- ~[/bone/~nec/0/5 //unix] + [%plea ~nec %g /ge/pub [%0 %s /foo]] + :~ :- ~[/bone/~nec/0/5 //unix] + [%pass /sys/req/~nec/pub %g %deal [~nec ~bud] %pub %watch /foo] + == + == + :: publisher gall runs :pub's +on-watch, gives ack to self + ~& > 'publisher gall runs :pub\'s +on-watch, gives ack to self' + :- t23 |. :- %| + =^ t24 gall.bud + %: gall-check-call:v gall.bud + [~1111.1.7 0xbeef.dead *roof] + :- ~[/sys/req/~nec/pub /bone/~nec/0/5 //unix] + [%deal [~nec ~bud] %pub %watch /foo] + :~ :- ~[/sys/req/~nec/pub /bone/~nec/0/5 //unix] + [%give %unto %watch-ack ~] + == + == + :: publisher gall hears %watch-ack, gives to ames + ~& > 'publisher gall hears %watch-ack, gives to ames' + :- t24 |. :- %| + =^ t25 gall.bud + %: gall-check-take:v gall.bud + [~1111.1.7 0xbeef.dead *roof] + :+ /sys/req/~nec/pub ~[/bone/~nec/0/5 //unix] + [%gall %unto %watch-ack ~] + :~ :- ~[/bone/~nec/0/5 //unix] [%give %done ~] + == + == + :: publisher ames hears done from gall, sends over the network + ~& > 'publisher ames hears done from gall, sends over the network' + :- t25 |. :- %| + =^ t26 ames.bud + %: ames-check-take:v ames.bud + [~1111.1.7 0xbeef.dead *roof] + :+ /bone/~nec/0/5 ~[//unix] + [%gall %done ~] + :~ :- ~[//unix] + :* %give %send [%& ~nec] + 0x5f5.c27c.c400.0587.8b0d.0a5d.eb8e.39fa. + 49f4.4848.bfa6.f600.0100.0223.c98c.8800 + == == + == + :: publisher ames hears %cork, passes to itself + ~& > 'publisher ames hears %cork, passes to itself' + :- t26 |. :- %| + =^ t27 ames.bud + %: ames-check-call:v ames.bud + [~1111.1.8 0xbeef.dead *roof] + :- ~[//unix] + :* %hear [%& ~nec] + 0xb.130c.ab37.ca24.49cd.aecb.23ba.70f1.6f1c.4d00.124e.c9a5. + 3413.3843.d81c.47c4.7040.6e62.3700.0200.0132.e1ab.9000 + == + :~ :- ~[//unix] [%pass /bone/~nec/0/1 %a %plea ~nec [%a /close ~]] + == + == + :- t27 |. :- %| + :: publisher ames hear cork plea from self, give %done to self + ~& > 'publisher ames hear cork plea from self, give %done to self' + =^ t28 ames.bud + %: ames-check-call:v ames.bud + [~1111.1.8 0xbeef.dead *roof] + :- ~[/bone/~nec/0/1 //unix] + [%plea ~nec [%a /close ~]] + :~ :- ~[/bone/~nec/0/1 //unix] [%give %done ~] + == + == + :: publisher ames hears cork done from self, sends ack packet + ~& > 'publisher ames hears cork done from self, sends ack packet' + :- t28 |. :- %| + =^ t29 ames.bud + %: ames-check-take:v ames.bud + [~1111.1.8 0xbeef.dead *roof] + :+ /bone/~nec/0/1 + ~[//unix] + [%ames %done ~] + :~ :- ~[//unix] + :* %give %send [%& ~nec] + 0x5f.f966.8e00.0449.bdec.9006.c7e5.1237. + 1d87.53fe.d7bb.ad00.0100.0223.c6a8.5800 + == == + == + :: subscriber ames hears %watch-ack, gives to gall + ~& > 'subscriber ames hears %watch-ack, gives to gall' + :- t29 |. :- %| + =^ t30 ames.nec + %: ames-check-call:v ames.nec + [~1111.1.9 0xdead.beef *roof] + :- ~[//unix] + :* %hear [%& ~bud] + 0x5f5.c27c.c400.0587.8b0d.0a5d.eb8e.39fa. + 49f4.4848.bfa6.f600.0100.0223.c98c.8800 + == + :~ :- :~ /sys/way/~bud/pub + /use/sub/0w1.d6Isf/out/~bud/pub/2/sub-foo/~bud + /init + == + [%give %done ~] + :- ~[/ames] [%pass /pump/~bud/4 %b %rest ~1111.1.5..00.00.01] + == + == + :: subscriber gall hears new %watch-ack from ames, gives to self + ~& > 'subscriber gall hears new %watch-ack from ames, gives to self' + :- t30 |. :- %| + =^ t31 gall.nec + %: gall-check-take:v gall.nec + [~1111.1.9 0xdead.beef *roof] + :+ /sys/way/~bud/pub + :~ /use/sub/0w1.d6Isf/out/~bud/pub/2/sub-foo/~bud + /init + == + [%ames %done ~] + :~ :- :~ /use/sub/0w1.d6Isf/out/~bud/pub/2/sub-foo/~bud + /init + == + [%give %unto %watch-ack ~] + == + == + :: subscriber gall hears new %watch-ack from self, tells :sub + ~& > 'subscriber gall hears new %watch-ack from self, tells :sub' + :- t31 |. :- %| + =^ t32 gall.nec + %: gall-check-take:v gall.nec + [~1111.1.9 0xdead.beef *roof] + :+ /use/sub/0w1.d6Isf/out/~bud/pub/2/sub-foo/~bud + ~[/init] + [%gall %unto %watch-ack ~] + ~ + == + :: subscriber ames hears %cork ack + ~& > 'subscriber ames hears %cork ack' + :- t32 |. :- %| + =^ t33 ames.nec + %: ames-check-call:v ames.nec + [~1111.1.10 0xdead.beef *roof] + :- ~[//unix] + :* %hear [%& ~bud] + 0x5f.f966.8e00.0449.bdec.9006.c7e5.1237. + 1d87.53fe.d7bb.ad00.0100.0223.c6a8.5800 + == + [~[/ames] [%pass /pump/~bud/0 %b %rest ~1111.1.5..00.02.00]]~ + == + :- t33 |. :- %& + ;: weld + %+ expect-eq + !> (sy 0 ~) + !> =< corked + %: ames-scry-peer:v + ames.nec + [~1111.1.10 0xdead.beef *roof] + [~nec ~bud] + == + :: + %+ expect-eq + !> (sy 1 ~) + !> =< corked + %: ames-scry-peer:v + ames.bud + [~1111.1.8 0xbeef.dead *roof] + [~bud ~nec] + == + :: + %+ expect-eq + !> 2 + !> %: gall-scry-nonce:v + gall.nec + [~1111.1.10 0xdead.beef *roof] + ~nec %sub + [~bud %pub /sub-foo/~bud] + == + == +-- diff --git a/pkg/arvo/tests/sys/hoon/auras.hoon b/tests/sys/hoon/auras.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/auras.hoon rename to tests/sys/hoon/auras.hoon diff --git a/pkg/arvo/tests/sys/hoon/bits.hoon b/tests/sys/hoon/bits.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/bits.hoon rename to tests/sys/hoon/bits.hoon diff --git a/pkg/arvo/tests/sys/hoon/differ.hoon b/tests/sys/hoon/differ.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/differ.hoon rename to tests/sys/hoon/differ.hoon diff --git a/pkg/arvo/tests/sys/hoon/hashes.hoon b/tests/sys/hoon/hashes.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/hashes.hoon rename to tests/sys/hoon/hashes.hoon diff --git a/pkg/arvo/tests/sys/hoon/list.hoon b/tests/sys/hoon/list.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/list.hoon rename to tests/sys/hoon/list.hoon diff --git a/pkg/arvo/tests/sys/hoon/map.hoon b/tests/sys/hoon/map.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/map.hoon rename to tests/sys/hoon/map.hoon diff --git a/pkg/arvo/tests/sys/hoon/molds.hoon b/tests/sys/hoon/molds.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/molds.hoon rename to tests/sys/hoon/molds.hoon diff --git a/pkg/arvo/tests/sys/hoon/ob.hoon b/tests/sys/hoon/ob.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/ob.hoon rename to tests/sys/hoon/ob.hoon diff --git a/pkg/arvo/tests/sys/hoon/qeu.hoon b/tests/sys/hoon/qeu.hoon similarity index 100% rename from pkg/arvo/tests/sys/hoon/qeu.hoon rename to tests/sys/hoon/qeu.hoon diff --git a/pkg/arvo/tests/sys/hoon/set.hoon b/tests/sys/hoon/set.hoon similarity index 98% rename from pkg/arvo/tests/sys/hoon/set.hoon rename to tests/sys/hoon/set.hoon index 77ce543d2..c39656998 100644 --- a/pkg/arvo/tests/sys/hoon/set.hoon +++ b/tests/sys/hoon/set.hoon @@ -106,6 +106,10 @@ :: Doesn't follow horizontal & vertical ordering :: =/ unbalanced-e=(set @) [1 [3 ~ ~] [2 ~ ~]] + :: Duplicate elements + :: + =/ has-dupes=(set @) [1 [1 ~ ~] ~] + :: ;: weld %+ expect-eq !> [%b-a %.y] @@ -125,6 +129,9 @@ %+ expect-eq !> [%u-e %.n] !> [%u-e ~(apt in unbalanced-e)] + %+ expect-eq + !> [%h-d %.n] + !> [%h-d ~(apt in has-dupes)] == :: :: Test splits a in b diff --git a/pkg/arvo/tests/sys/nock.hoon b/tests/sys/nock.hoon similarity index 100% rename from pkg/arvo/tests/sys/nock.hoon rename to tests/sys/nock.hoon diff --git a/pkg/arvo/tests/sys/vane/ames.hoon b/tests/sys/vane/ames.hoon similarity index 91% rename from pkg/arvo/tests/sys/vane/ames.hoon rename to tests/sys/vane/ames.hoon index 668ab2812..a8de270ce 100644 --- a/pkg/arvo/tests/sys/vane/ames.hoon +++ b/tests/sys/vane/ames.hoon @@ -251,17 +251,19 @@ !> shut-packet !> decoded :: -++ test-shut-packet-associated-data ^- tang - :: - =/ =shut-packet:ames - :+ bone=17 message-num=18 - [%& num-fragments=1 fragment-num=1 fragment=`@`0xdead.beef] - :: - =/ =packet:ames - (encode-shut-packet:ames shut-packet nec-sym ~marnec ~marbud-marbud 3 1) - :: - %- expect-fail - |.((decode-shut-packet:ames packet nec-sym 3 17)) +:: Crypto failures are now non-deterministic +:: +:: ++ test-shut-packet-associated-data ^- tang +:: :: +:: =/ =shut-packet:ames +:: :+ bone=17 message-num=18 +:: [%& num-fragments=1 fragment-num=1 fragment=`@`0xdead.beef] +:: :: +:: =/ =packet:ames +:: (encode-shut-packet:ames shut-packet nec-sym ~marnec ~marbud-marbud 3 1) +:: :: +:: %- expect-fail +:: |.((decode-shut-packet:ames packet nec-sym 3 17)) :: ++ test-alien-encounter ^- tang :: @@ -353,10 +355,14 @@ !> [~[/g/talk] %give %boon [%post 'first1']] !> (snag 0 `(list move:ames)`moves6) == +:: +test-comet-message-flow: galaxy<->comet comms +:: +:: same as test-message-flow, but ~nec will send a sendkeys packet to +:: request comet's self-attestation directly :: ++ test-comet-message-flow ^- tang - :: same as test-message-flow, but ~nec will send a sendkeys packet to request - :: comet's self-attestation directly + ::=^ * nec (call nec ~[//nemo] %spew ~[%snd %rcv %odd %msg]) + ::=^ * comet (call comet ~[//nemo] %spew ~[%snd %rcv %odd %msg]) :: =^ moves0 nec (call nec ~[/g/talk] %plea our-comet %g /talk [%get %post]) =^ moves1 comet (call comet ~[//unix] %hear (snag-packet 0 moves0)) @@ -371,27 +377,34 @@ :^ comet /public-keys ~[//unix] ^- sign:ames [%jael %public-keys %full [n=[~nec point] ~ ~]] - :: give comet's self-attestation to ~nec; at this point, we have established - :: a channel, and can proceed as usual + :: give comet's self-attestation to ~nec; at this point, we have + :: established a channel, and can proceed as usual :: + =/ post [%post 'first1!!'] =^ moves3 nec (call nec ~[//unix] %hear (snag-packet 0 moves2)) + %+ weld + %- expect-fail |. + (call nec ~[//unix] %hear (snag-packet 1 moves2)) + :: =^ moves4 comet (call comet ~[//unix] %hear (snag-packet 0 moves3)) - =^ moves5 comet (take comet /bone/~nec/0/1 ~[//unix] %g %done ~) + =^ moves5 comet (take comet /bone/~nec/1/1 ~[//unix] %g %done ~) =^ moves6 nec (call nec ~[//unix] %hear (snag-packet 0 moves5)) - =^ moves7 comet (take comet /bone/~nec/0/1 ~[//unix] %g %boon [%post 'first1!!']) + =^ moves7 comet (take comet /bone/~nec/1/1 ~[//unix] %g %boon post) =^ moves8 nec (call nec ~[//unix] %hear (snag-packet 0 moves7)) :: ;: weld %+ expect-eq - !> [~[//unix] %pass /qos %d %flog %text "; ~nec is your neighbor"] + !> =- [~[//unix] %pass /qos %d %flog %text -] + "; ~nec is your neighbor" !> (snag 0 `(list move:ames)`moves4) :: %+ expect-eq - !> [~[//unix] %pass /qos %d %flog %text "; {} is your neighbor"] + !> =- [~[//unix] %pass /qos %d %flog %text -] + "; {} is your neighbor" !> (snag 0 `(list move:ames)`moves6) :: %+ expect-eq - !> [~[/g/talk] %give %boon [%post 'first1!!']] + !> [~[/g/talk] %give %boon post] !> (snag 0 `(list move:ames)`moves8) == :: @@ -445,7 +458,7 @@ :: %+ expect-eq !> [~[/g/talk] %give %done `error] - !> (snag 1 `(list move:ames)`moves5) + !> (snag 0 `(list move:ames)`moves5) :: ++ test-old-ames-wire ^- tang =^ moves0 bud (call bud ~[/g/hood] %spew [%odd]~) diff --git a/tests/sys/vane/behn.hoon b/tests/sys/vane/behn.hoon new file mode 100644 index 000000000..c7db79ded --- /dev/null +++ b/tests/sys/vane/behn.hoon @@ -0,0 +1,234 @@ +/+ *test +/= behn-raw /sys/vane/behn +=/ behn-gate (behn-raw ~bus) +=/ scry *roof +=* move move:behn-gate +:: +|% +++ test-wake-no + ^- tang + =/ wen ~1111.1.1 + =/ arg [~[/vere] [%wake ~]] + -:(call ~ wen arg ~) +:: +++ test-wake-no-wait + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/vere] [%born ~]] + =/ a-out ~ + =^ a behn-gate (call `%a wen a-arg a-out) + :: + =/ b-arg [~[/vere] [%wake ~]] + =/ b-out ~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + (weld a b) +:: +++ test-wake-no-born + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/foo] [%wait +(wen)]] + =/ a-out ~ + =^ a behn-gate (call `%a wen a-arg a-out) + :: + =/ b-arg [~[/vere] [%wake ~]] + =/ b-out ~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + (weld a b) +:: +++ test-wake + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/vere] [%born ~]] + =/ a-out ~ + =^ a behn-gate + (call ~ wen a-arg a-out) + :: + =/ b-arg [~[/foo] [%wait +(wen)]] + =/ b-out=(list move) [~[/vere] [%give [%doze `+(wen)]]]~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + =/ c-arg [~[/vere] [%wake ~]] + =/ c-out=(list move) [~[/foo] [%give [%wake ~]]]~ + =^ c behn-gate (call `%c +(wen) c-arg c-out) + :: + :(weld a b c) +:: +++ test-born + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/foo] [%wait +(wen)]] + =/ a-out ~ + =^ a behn-gate (call `%a wen a-arg a-out) + :: + =/ b-arg [~[/vere] [%born ~]] + =/ b-out=(list move) [~[/vere] [%give [%doze `+(wen)]]]~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + (weld a b) +:: +++ test-many-ordered + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/vere] [%born ~]] + =/ a-out ~ + =^ a behn-gate (call `%a wen a-arg a-out) + :: + =/ b-arg [~[/foo] [%wait +(wen)]] + =/ b-out=(list move) [~[/vere] [%give [%doze `+(wen)]]]~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + =/ c-arg [~[/foo] [%wait (add 2 wen)]] + =/ c-out ~ + =^ c behn-gate (call `%c wen c-arg c-out) + :: + =/ d-arg [~[/foo] [%wait (add 3 wen)]] + =/ d-out ~ + =^ d behn-gate (call `%d wen d-arg d-out) + :: + =/ e-arg [~[/vere] [%wake ~]] + =/ e-out=(list move) + :~ [~[/vere] [%give [%doze `(add 2 wen)]]] + [~[/foo] [%give [%wake ~]]] + == + =^ e behn-gate (call `%e (add 4 wen) e-arg e-out) + :: + :(weld a b c d e) +:: +++ test-many-ordered-lag + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/vere] [%born ~]] + =/ a-out ~ + =^ a behn-gate (call `%a wen a-arg a-out) + :: + =/ b-arg [~[/foo] [%wait +(wen)]] + =/ b-out=(list move) [~[/vere] [%give [%doze `+(wen)]]]~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + =/ c-arg [~[/foo] [%wait (add 2 wen)]] + =/ c-out ~ + =^ c behn-gate (call `%c wen c-arg c-out) + :: + =/ d-arg [~[/foo] [%wait (add 3 wen)]] + =/ d-out ~ + =^ d behn-gate (call `%d wen d-arg d-out) + :: + =/ e-arg [~[/vere] [%wake ~]] + =/ e-out=(list move) + :~ [~[/vere] [%give [%doze `(add 2 wen)]]] + [~[/foo] [%give [%wake ~]]] + == + =^ e behn-gate (call `%e +(wen) e-arg e-out) + :: + :(weld a b c d e) +:: +++ test-many-unordered + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/vere] [%born ~]] + =/ a-out ~ + =^ a behn-gate (call `%a wen a-arg a-out) + :: + =/ b-arg [~[/foo] [%wait (add 2 wen)]] + =/ b-out=(list move) [~[/vere] [%give [%doze `(add 2 wen)]]]~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + =/ c-arg [~[/foo] [%wait (add 3 wen)]] + =/ c-out ~ + =^ c behn-gate (call `%c wen c-arg c-out) + :: + =/ d-arg [~[/foo] [%wait +(wen)]] + =/ d-out=(list move) [~[/vere] [%give [%doze `+(wen)]]]~ + =^ d behn-gate (call `%d wen d-arg d-out) + :: + =/ e-arg [~[/vere] [%wake ~]] + =/ e-out=(list move) + :~ [~[/vere] [%give [%doze `(add 2 wen)]]] + [~[/foo] [%give [%wake ~]]] + == + =^ e behn-gate (call `%e (add 4 wen) e-arg e-out) + :: + :(weld a b c d e) +:: +++ test-same-ordered-lag + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/vere] [%born ~]] + =/ a-out ~ + =^ a behn-gate (call `%a wen a-arg a-out) + :: + =/ b-arg [~[/foo] [%wait (add 2 wen)]] + =/ b-out=(list move) [~[/vere] [%give [%doze `(add 2 wen)]]]~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + =/ c-arg [~[/foo] [%wait (add 2 wen)]] + =/ c-out ~ + =^ c behn-gate (call `%c wen c-arg c-out) + :: + =/ d-arg [~[/foo] [%wait (add 2 wen)]] + =/ d-out ~ + =^ d behn-gate (call `%d wen d-arg d-out) + :: + =/ e-arg [~[/vere] [%wake ~]] + =/ e-out=(list move) + :~ [~[/vere] [%give [%doze `(add 2 wen)]]] + [~[/foo] [%give [%wake ~]]] + == + =^ e behn-gate (call `%e (add 3 wen) e-arg e-out) + :: + :(weld a b c d e) +:: +++ test-rest + ^- tang + =/ wen ~1111.1.1 + :: + =/ a-arg [~[/vere] [%born ~]] + =/ a-out ~ + =^ a behn-gate (call `%a wen a-arg a-out) + :: + =/ b-arg [~[/foo] [%wait (add 2 wen)]] + =/ b-out=(list move) [~[/vere] [%give [%doze `(add 2 wen)]]]~ + =^ b behn-gate (call `%b wen b-arg b-out) + :: + =/ c-arg [~[/foo] [%wait (add 3 wen)]] + =/ c-out ~ + =^ c behn-gate (call `%c wen c-arg c-out) + :: + =/ d-arg [~[/foo] [%rest (add 2 wen)]] + =/ d-out=(list move) [~[/vere] [%give [%doze `(add 3 wen)]]]~ + =^ d behn-gate (call `%d wen d-arg d-out) + :: + =/ e-arg [~[/vere] [%wake ~]] + =/ e-out=(list move) [~[/foo] [%give [%wake ~]]]~ + =^ e behn-gate (call `%e (add 4 wen) e-arg e-out) + :: + :(weld a b c d e) +:: +++ call + =| lac=? + |= $: label=(unit @tas) + now=@da + args=[=duct task=(hobo task:behn)] + expected-moves=(list move) + == + =/ behn-core (behn-gate now=now eny=`@`0xdead.beef scry=scry) + =^ moves behn-gate + (call:behn-core duct.args dud=~ task.args) + :: + ~? !lac moves + =/ output=tang + %+ expect-eq + !> expected-moves + !> moves + [?~(label output ?~(output ~ [u.label output])) behn-gate] +-- diff --git a/pkg/arvo/tests/sys/vane/clay.hoon b/tests/sys/vane/clay.hoon similarity index 100% rename from pkg/arvo/tests/sys/vane/clay.hoon rename to tests/sys/vane/clay.hoon diff --git a/pkg/arvo/tests/sys/vane/eyre.hoon b/tests/sys/vane/eyre.hoon similarity index 95% rename from pkg/arvo/tests/sys/vane/eyre.hoon rename to tests/sys/vane/eyre.hoon index f8fd9ba0f..10802f190 100644 --- a/pkg/arvo/tests/sys/vane/eyre.hoon +++ b/tests/sys/vane/eyre.hoon @@ -7,27 +7,14 @@ :: |% ++ test-init - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == - :: - results1 + -:perform-init +:: +++ test-born + -:(perform-born eyre-gate) :: ++ test-overwrite-bindings :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: app1 binds successfully :: =^ results2 eyre-gate @@ -57,14 +44,7 @@ :: ++ test-remove-binding :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: app1 binds successfully :: =^ results2 eyre-gate @@ -130,14 +110,7 @@ :: ++ test-builtin-four-oh-four :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: when there's no configuration and nothing matches, expect 404 :: =^ results2 eyre-gate @@ -173,14 +146,7 @@ :: ++ test-basic-app-request :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: app1 binds successfully :: =^ results2 eyre-gate @@ -266,14 +232,7 @@ :: ++ test-app-error :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: app1 binds successfully :: =^ results2 eyre-gate @@ -369,14 +328,7 @@ :: ++ test-multipart-app-request :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: app1 binds successfully :: =^ results2 eyre-gate @@ -484,17 +436,11 @@ :: ++ test-login-handler-full-path :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init + =^ results2 eyre-gate (perform-born eyre-gate) :: app1 binds successfully :: - =^ results2 eyre-gate + =^ results3 eyre-gate %- eyre-call :* eyre-gate now=~1111.1.2 @@ -504,7 +450,7 @@ == :: outside requests a path that app1 has bound to :: - =^ results3 eyre-gate + =^ results4 eyre-gate %- eyre-call-with-comparator :* eyre-gate now=~1111.1.3 @@ -550,7 +496,7 @@ == :: app then gives a redirect to Eyre :: - =^ results4 eyre-gate + =^ results5 eyre-gate %- eyre-take :* eyre-gate now=~1111.1.4 @@ -569,7 +515,7 @@ == == == :: the browser then fetches the login page :: - =^ results5 eyre-gate + =^ results6 eyre-gate %- perform-authentication :* eyre-gate now=~1111.1.5 @@ -577,7 +523,7 @@ == :: going back to the original url will acknowledge the authentication cookie :: - =^ results6 eyre-gate + =^ results7 eyre-gate %- eyre-call-with-comparator :* eyre-gate now=~1111.1.5..1.0.0 @@ -644,18 +590,12 @@ results4 results5 results6 + results7 == :: ++ test-generator :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: gen1 binds successfully :: =^ results2 eyre-gate @@ -783,14 +723,7 @@ :: ++ test-channel-reject-unauthenticated :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: =^ results2 eyre-gate %- eyre-call :* @@ -1873,14 +1806,7 @@ :: ++ test-born-sends-pending-cancels :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init :: app1 binds successfully :: =^ results2 eyre-gate @@ -1951,15 +1877,15 @@ |= moves=(list move:eyre-gate) ^- tang :: - ?. ?=([^ ^ ~] moves) + ?. ?=([^ ^ ^ ~] moves) [%leaf "wrong number of moves: {<(lent moves)>}"]~ :: - :: we don't care about the first one, which is just a static - :: configuration move. + :: we don't care about the first two, which are just + :: configuration moves. :: - =/ move=move:eyre-gate i.t.moves - =/ =duct duct.move - =/ card=(wind note:eyre-gate gift:eyre-gate) card.move + =/ =move:eyre-gate i.t.t.moves + =/ =duct duct.move + =/ card card.move :: %+ weld (expect-eq !>(~[/http-blah]) !>(duct)) @@ -2126,6 +2052,30 @@ :: todo: handle other deals :: [%leaf "unexpected %deal type"]~ +:: +perfom-init: %init a new eyre-gate +:: +++ perform-init + %- eyre-call :* + eyre-gate + now=~1111.1.1 + scry=scry-provides-code + call-args=[duct=~[/init] ~ [%init ~]] + expected-moves=~ + == +:: +perform-born: %born an eyre-gate +:: +++ perform-born + |= =_eyre-gate + %- eyre-call :* + eyre-gate + new=~1111.1.1 + scry=scry-provides-code + call-args=[duct=~[/unix] ~ [%born ~]] + ^= expected-moves + :~ [duct=~[/unix] %give %set-config *http-config:eyre] + [duct=~[/unix] %give %sessions ~] + == + == :: +perform-authentication: goes through the authentication flow :: ++ perform-authentication @@ -2185,6 +2135,9 @@ :~ ::NOTE this ~d7 is tied to the eyre-internal +session-timeout... :- duct=~[/http-blah] [%pass p=/sessions/expire q=[%b [%wait p=(add start-now ~d7.m1)]]] + :: + =+ token='0v3.q0p7t.mlkkq.cqtto.p0nvi.2ieea' + [duct=~[/unix] %give %sessions [token ~ ~]] :: :* duct=~[/http-blah] %give @@ -2209,17 +2162,11 @@ == ^- [tang _eyre-gate] :: - =^ results1 eyre-gate - %- eyre-call :* - eyre-gate - now=~1111.1.1 - scry=scry-provides-code - call-args=[duct=~[/init] ~ [%init ~]] - expected-moves=~ - == + =^ results1 eyre-gate perform-init + =^ results2 eyre-gate (perform-born eyre-gate) :: ensure there's an authenticated session :: - =^ results2 eyre-gate + =^ results3 eyre-gate %- perform-authentication :* eyre-gate now=~1111.1.2 @@ -2227,7 +2174,7 @@ == :: send the channel a poke and a subscription request :: - =^ results3 eyre-gate + =^ results4 eyre-gate %- eyre-call-with-comparator :* eyre-gate now=~1111.1.2 @@ -2293,7 +2240,7 @@ == == :: :_ eyre-gate - :(weld results1 results2 results3) + :(weld results1 results2 results3 results4) :: ++ scry-provides-code ^- roof |= [gang =view =beam] diff --git a/pkg/arvo/tests/sys/vane/gall.hoon b/tests/sys/vane/gall.hoon similarity index 60% rename from pkg/arvo/tests/sys/vane/gall.hoon rename to tests/sys/vane/gall.hoon index 43b8569d3..73469503d 100644 --- a/pkg/arvo/tests/sys/vane/gall.hoon +++ b/tests/sys/vane/gall.hoon @@ -22,32 +22,6 @@ (gall-call gall-gate time *roof call-args expected-moves) :: -.res -:: +test-jolt: test %jolt; TODO: test clay response -:: -++ test-jolt - ^- tang - :: - =/ =duct ~[/init] - =/ time (add ~1111.1.1 ~s1) - =/ dap=term %my-agent - =/ ship ~nec - :: - =/ call-args - =/ =task:gall [%jolt %base dap] - [duct task] - :: - =/ =move:gall-gate - =/ =wire /sys/cor/[dap]/(scot %p ship)/base/(scot %da time) - =/ =note-arvo - [%c %warp ship %base ~ %sing %a da+time /app/[dap]/hoon] - [duct %pass wire note-arvo] - :: - =/ expected-moves=(list move:gall-gate) ~[move] - :: - =/ res - (gall-call gall-gate time *roof call-args expected-moves) - :: - -.res :: +gall-call: have %gall run a +task and assert it produces expected-moves :: ++ gall-call diff --git a/pkg/arvo/tests/sys/vane/iris.hoon b/tests/sys/vane/iris.hoon similarity index 100% rename from pkg/arvo/tests/sys/vane/iris.hoon rename to tests/sys/vane/iris.hoon diff --git a/pkg/arvo/tests/sys/vane/khan.hoon b/tests/sys/vane/khan.hoon similarity index 100% rename from pkg/arvo/tests/sys/vane/khan.hoon rename to tests/sys/vane/khan.hoon diff --git a/pkg/arvo/tests/sys/zuse/contain/capped-queue.hoon b/tests/sys/zuse/contain/capped-queue.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/contain/capped-queue.hoon rename to tests/sys/zuse/contain/capped-queue.hoon diff --git a/pkg/arvo/tests/sys/zuse/contain/clock.hoon b/tests/sys/zuse/contain/clock.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/contain/clock.hoon rename to tests/sys/zuse/contain/clock.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/aes.hoon b/tests/sys/zuse/crypto/aes.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/aes.hoon rename to tests/sys/zuse/crypto/aes.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/argon.hoon b/tests/sys/zuse/crypto/argon.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/argon.hoon rename to tests/sys/zuse/crypto/argon.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/blake.hoon b/tests/sys/zuse/crypto/blake.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/blake.hoon rename to tests/sys/zuse/crypto/blake.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/ed25519.hoon b/tests/sys/zuse/crypto/ed25519.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/ed25519.hoon rename to tests/sys/zuse/crypto/ed25519.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/hmac.hoon b/tests/sys/zuse/crypto/hmac.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/hmac.hoon rename to tests/sys/zuse/crypto/hmac.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/keccak.hoon b/tests/sys/zuse/crypto/keccak.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/keccak.hoon rename to tests/sys/zuse/crypto/keccak.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/pbkdf.hoon b/tests/sys/zuse/crypto/pbkdf.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/pbkdf.hoon rename to tests/sys/zuse/crypto/pbkdf.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/ripemd.hoon b/tests/sys/zuse/crypto/ripemd.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/ripemd.hoon rename to tests/sys/zuse/crypto/ripemd.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/scrypt.hoon b/tests/sys/zuse/crypto/scrypt.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/scrypt.hoon rename to tests/sys/zuse/crypto/scrypt.hoon diff --git a/pkg/arvo/tests/sys/zuse/crypto/secp256k1.hoon b/tests/sys/zuse/crypto/secp256k1.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/crypto/secp256k1.hoon rename to tests/sys/zuse/crypto/secp256k1.hoon diff --git a/pkg/arvo/tests/sys/zuse/format.hoon b/tests/sys/zuse/format.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/format.hoon rename to tests/sys/zuse/format.hoon diff --git a/pkg/arvo/tests/sys/zuse/html.hoon b/tests/sys/zuse/html.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/html.hoon rename to tests/sys/zuse/html.hoon diff --git a/pkg/arvo/tests/sys/zuse/mimes.hoon b/tests/sys/zuse/mimes.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/mimes.hoon rename to tests/sys/zuse/mimes.hoon diff --git a/pkg/arvo/tests/sys/zuse/ordered-map.hoon b/tests/sys/zuse/ordered-map.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/ordered-map.hoon rename to tests/sys/zuse/ordered-map.hoon diff --git a/pkg/arvo/tests/sys/zuse/title.hoon b/tests/sys/zuse/title.hoon similarity index 100% rename from pkg/arvo/tests/sys/zuse/title.hoon rename to tests/sys/zuse/title.hoon diff --git a/vere-version b/vere-version new file mode 100644 index 000000000..452ca319b --- /dev/null +++ b/vere-version @@ -0,0 +1 @@ +once v1.18-4d8bfd2